arefaste/1C_Forums huggingface dataset:
Программная установка параметров выбора на примере банковских счетов из ERP 2.5
Теги: 1С,ПараметрыВыбора

# Код реализации

```1c
&НаСервереБезКонтекста
Функция ПараметрыВыбораБанковскихСчетов(ОплатаВВалюте, Организация)

	МассивПараметров = Новый Массив;

	Если НЕ ОплатаВВалюте Тогда
		МассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.ВалютаДенежныхСредств",
					ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация)));
	Иначе
		МассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.ВалютаДенежныхСредств", Новый ФиксированныйМассив(ИностранныеВалюты(Организация))));
	КонецЕсли;

	МассивПараметров.Добавить(Новый ПараметрВыбора("ВыборСчетовГоловнойОрганизации", Неопределено));
	МассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.Закрыт", Ложь));

	Возврат Новый ФиксированныйМассив(МассивПараметров);

КонецФункции

&НаСервере
Процедура ПриЧтенииНаСервере()
	ПараметрыВыбораБанковскогоСчета = ПараметрыВыбораБанковскихСчетов(Ложь, Объект.Организация);
	Элементы.БанковскийСчет.ПараметрыВыбора            = ПараметрыВыбораБанковскогоСчета;
	Элементы.БанковскийСчетКонтрагента.ПараметрыВыбора = ПараметрыВыбораБанковскогоСчета;
КонецПроцедуры
```
Как найти все скрипты, которые срабатывают автоматически
Теги: 1С,TurboConf,Совет,Уроки

В TurboConf есть скрипты, которые выполняются автоматически, в зависимости от условия. Например, автозакрытие окон, автоподключение к хранилищу и т.д.
Прочитать таблицу значений из XML
Теги: 1С,Десериализация,ТаблицаЗначений,XML

Производит десериализацию таблицы значений из строки XML

# Код реализации

```1c
Функция ПрочитатьТаблицуИзXML(СтрокаXML)

    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СтрокаXML);
    ТипОбъектаXDTO = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueTable");
    ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO);
    ОбъектXDTO.Проверить();

    ЧтениеXML.Закрыть();
    Возврат СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);

КонецФункции
```

# Примечания

- В БСП, используется более лучший способ, я всегда пользовался им, даже не зная о таком методе в БСП (этот код взят из БСП):
Функция ЗначениеВСтрокуXML(Значение) Экспорт
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное);
    
    Возврат ЗаписьXML.Закрыть();
КонецФункции

Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СтрокаXML);
    
    Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
КонецФункции
Записать таблицу значений в XML
Теги: 1С,ТаблицаЗначений,Сериализация,XML

Производит сериализацию таблицы значений и возвращает ЗаписьXML.

# Код реализации

```1c
Функция ЗаписатьТаблицуВXML(ТЗ)

    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(ТЗ.Выгрузить());
    ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
    Возврат ЗаписьXML.Закрыть();

КонецФункции
```
Улучшаем игру Diablo 2 Resurrected с TurboConf
Теги: 1С,TurboConf,Уроки

Несмотря на то, что потихоньку разработчики улучшают интерфейс игры, тем не менее многих удобных функций все еще нет.

# Примечания

- А как TurboConf взаимодействует с игрой?
Как зарегистрироваться в ChatGPT из России
Теги: 1С,Нейросети

На текущий день нейросеть не доступна в РФ. В статье несколько советов как это обойти и попробовать возможности ChatGPT.

# Примечания

- Протестировать, что все работает можно через Postman.
Тип запроса: POST
Адрес: https://api.openai.com/v1/completions
В Headers добавляем заголовки
Content-Type application/json
Authorization Bearer <Ваш API-Key>

В Body вставляем Json
{
  "model": "text-davinci-003",
  "prompt": "Все работает?",
  "max_tokens": 7,
  "temperature": 0,
  "top_p": 1,
  "n": 1,
  "stream": false,
  "logprobs": null,
  "stop": "."
}

Отправляем и проверяем, что все работает.
Записать таблицу значений в XML файл
Теги: 1С,ТаблицаЗначений,Сериализация,XML

Сериализует таблицу значений и сохраняет ее в файл xml.

# Код реализации

```1c
Процедура СохранитьТаблицуВФайлXML(ИмяФайла, ТЗ)

	Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
	XML = Новый ЗаписьXML;
	XML.ОткрытьФайл(ИмяФайла);
	Сериализатор.ЗаписатьXML(XML, ТЗ);
	XML.Закрыть();

КонецПроцедуры
```
Исправляем неработающие горячие клавиши в Конфигураторе 1С
Теги: 1С,Совет,Конфигуратор

На некоторых компьютерах может не работать комбинация Ctrl+Alt+M - для поиска по метаданным, Alt+F2 - установка закладки и  другие хоткеи.
Быстрое добавление объекта в кэш
Теги: 1С,TurboConf,Помощь,Уроки

TurboConf получает список объектов конфигурации из кэша, который формирует из "Отчета по конфигурации". Этот кэш используется для быстрой навигации, в подсказках и в других функциях. Как быстро добавить новый объект, без обновления кэша целиком?
Сообщить отложенные сообщения
Теги: 1С,Сообщение,буфер,сообщить

Выводит сообщения пользователю из заранее подготовленного массива объектов "СообщениеПользователю".
Поддерживаемые контексты: клиент, сервер. Метод подходит для размещения в клиент-серверном общем модуле.

# Код реализации

```1c
// Выводит сообщения пользователю из заранее подготовленного массива объектов "СообщениеПользователю".
// Массив предварительно может быть получен методом "ПолучитьСообщенияПользователю".
// Рекомендуется применять, когда мы временно очистили буфер накопленных сообщений пользователю
// и теперь хотим вернуть все такие изъятые из буфера сообщения обратно.
//
// Параметры:
//  СообщенияПользователю - Массив, ФиксированныйМассив - Элементами массива должны быть объекты "СообщениеПользователю".
//
Процедура СообщитьОтложенныеСообщения(Знач СообщенияПользователю) Экспорт

	Для Каждого СообщениеПользователю Из СообщенияПользователю Цикл
		СообщениеПользователю.Сообщить();
	КонецЦикла;

КонецПроцедуры
```
Выбор каталога (папки) файловой системы
Теги: 1С,Работа с файлами,Каталог,Шаблон

Шаблон кода для выбора каталога.

# Примечания

- Лучше использовать асинхронный вариант, как здесь https://fastcode.im/Templates/7673/vybor-fajla-upravlyaemoe-prilozhenie.
Только заменить РежимДиалогаВыбораФайла.Открытие на РежимДиалогаВыбораФайла.ВыборКаталога

- (1) Калинин Михаил, А в чем преимущество?
Про ваш вариант знаю, но чаще пользуюсь таким. А когда реально асинх нужно, тогда использую таки Ждать, а не вот это вот всё с кучей процедур ))).
Не, такое тоже использую, но это должно быть прям обоснованно.

- (1) Калинин Михаил, вчерашний день. Используйте Асинх-Ждать. Кода меньше, толку столько же.
Таблица значений с колонкой любого имени (без ограничений используемых символов)
Теги: 1С,ТаблицаЗначений,ТЗ,Баг,Желтый Чайник 1С,Колонка,Колонки,Таблица

Возвращает новую таблицу значений с добавлением новой колонки в обход ограничений доступных символов в имени.
Использовать не рекомендуется. Просто забавы ради

# Код реализации

```1c
// Возвращает новую таблицу значений с добавлением новой колонки в обход ограничений доступных символов в имени.
// Использовать не рекомендуется. Просто забавы ради.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/35
//
// Параметры:
//  ПлохоеИмя		 - Строка - Имя добавляемой колонки, которое может не соответствовать требованиям к символам
//  ИсходнаяТаблица	 - Неопределено, ТаблицаЗначений - Функция вернет новую ТЗ на основе переданной
//  ОписаниеТипа	 - ОписаниеТипов, Неопределено - Описание типа добавляемой колонки
//  Заголовок		 - Строка - Заголовок добавляемой колонки
//
// Возвращаемое значение:
//  ТаблицаЗначений - новая таблица значений с добавленной колонкой
//
// Пример:
//  ТЗ = ТаблицаЗначенийСПлохойКолонкой("12345");
//	ТЗ = ТаблицаЗначенийСПлохойКолонкой("  --23-502  =-2-=6524-0624 ", ТЗ);
Функция ТаблицаЗначенийСПлохойКолонкой(Знач ПлохоеИмя, Знач ИсходнаяТаблица = Неопределено,
	Знач ОписаниеТипа = Неопределено, Знач Заголовок = "") Экспорт

	ТаблицаЗначений = ?(ИсходнаяТаблица = Неопределено,
		Новый ТаблицаЗначений, ИсходнаяТаблица);

	ВременноеИмя = "_" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
	ТаблицаЗначений.Колонки.Добавить(ВременноеИмя, ОписаниеТипа, Заголовок);
	СтрокаВнутр = ЗначениеВСтрокуВнутр(ТаблицаЗначений);
	СтрокаВнутр = СтрЗаменить(СтрокаВнутр, ВременноеИмя, ПлохоеИмя);

	ИсходнаяТаблица = ЗначениеИзСтрокиВнутр(СтрокаВнутр); // ТаблицаЗначений
	Возврат ИсходнаяТаблица; //@skip-check constructor-function-return-section - Баг ЕДТ - не понимает типизированный коммент

КонецФункции
```
Запрос к нейросети ChatGPT
Теги: 1С,ChatGPT,Нейросети

Пример Http запроса и получения ответа от нейросети ChatGPT (OpenAI)

# Код реализации

```1c
//Описание API https://beta.openai.com/docs/api-reference/

Процедура ЗапросКChatGPT(Текст)

	Соединение = Новый HTTPСоединение("api.openai.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());

	Заголовки=Новый Соответствие();
	Заголовки.Вставить("Content-Type", "application/json");
	Заголовки.Вставить("Authorization", "Bearer <Ваш API-Key>");

	Запрос = Новый HTTPЗапрос();
	Запрос.АдресРесурса = "v1/completions";
	Запрос.Заголовки = Заголовки;

    ТелоЗапроса =
    "
	|{
  |""model"": ""text-davinci-003"",
  |""prompt"": """ + Текст+ """,
  |""max_tokens"": 100,
  |""temperature"": 0,
  |""top_p"": 1,
  |""n"": 1,
  |""stream"": false,
  |""logprobs"": null,
  |""stop"": "".""
  |}";

	Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);

	Ответ=Соединение.ОтправитьДляОбработки(Запрос);

	КодСостояния=Ответ.КодСостояния;
	СтрокаОтвета=Ответ.ПолучитьТелоКакСтроку();

	Если КодСостояния=200 Тогда
		//Ответ в виде Json
		Сообщить(СтрокаОтвета);
	Иначе
		//Ошибка при выполнении запроса
	КонецЕсли;

КонецПроцедуры
```

# Примечания

- Пример запроса и ответа

- у меня не получается авторизация "Код Состояния" 401 ответ дал, посмотрите что я не так делаю

- (2) Aidos, пробела похоже не хватает между Bearer и ApiKey

- {
"error": {
"message": "We could not parse the JSON body of your request. (HINT: This likely means you aren't using your HTTP library correctly. The OpenAI API expects a JSON payload, but what was sent was not valid JSON. If you have trouble figuring out how to fix this, please send an email to support@openai.com and include any relevant code you'd like help with.)",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
вот теперь что то не так с текстом?

- (4) Ney, через запись json отправил тоже самое

- Кто подскажет синтаксис загрузки файлов (POST
https://api.openai.com/v1/files") , со всем остальынм проблем нет (все просто и понятно) а вот с загрузкой - затык..

- Здравствуйте! В чем может быть ошибка? Что способом со статьи вывожу, что своими функциями. Все время ругается на КодСостояния

- А есть пример работы с langchain и суммаризатором текста из 1с?
эти инструменты хороши для подготовки промпта для chatGPT
Обмен с помощью Web - Сервисов. Новый (С примерами)
Теги: 1С,ws,XML,Обмен,web-сервис

Продолжим цикл статей про обмены с помощью встроенных механизмов 1С -Web-Сервисы.

# Примечания

- что за ужасный код выложили...
Внешняя обработка с несколькими командами, добавляемая в регламентные задания
Теги: 1С,ВнешняяОбработка,БСП,РегламентноеЗадание

Шаблон модуля объекта внешней обработки в стандарте БСП.
Можно добавлять в регламентные задачи и/или размещать в разделах
Копирование файлов
Теги: 1С,Файл

Копирование всех файлов из одного каталога в доугой

# Код реализации

```1c
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)

	//Проверим и поправим окончания пути каталогов
	Если Прав(КаталогИсточник, 1) <> "\" Тогда
		КаталогИсточник = КаталогИсточник + "\";
	КонецЕсли;
	Если Прав(КаталогПриемник, 1) <> "\" Тогда
		КаталогПриемник = КаталогПриемник + "\";
	КонецЕсли;

	//Создадим каталог приемник
	СоздатьКаталог(КаталогПриемник);

	МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);

	Для Каждого Файл Из МассивФайлов Цикл
		ПолноеИмяИсточник = Файл.ПолноеИмя;
		ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");

		Если ПустаяСтрока(Файл.Расширение) Тогда
			СоздатьКаталог(ПолноеИмяПриемник);
		Иначе
			КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры
```

# Примечания

- Т.е., если файл без расширения, то вместо его копирования, будет создан одноимённый каталог? А если каталог имеет расширение (да, каталоги тоже могут иметь расширение), то вместо создания каталога, будет выполнено копирование.
Может условие
Если ПустаяСтрока(Файл.Расширение) Тогда

заменить на
Если Файл.ЭтоКаталог() Тогда

?

- Процедура СкопироватьФайлы(Знач Источник, Знач Приемник)
	КаталогПриемник = Новый Файл(Приемник);
	Если Не КаталогПриемник.Существует() Тогда
		СоздатьКаталог(КаталогПриемник.ПолноеИмя);
	КонецЕсли;
	
	Файлы = НайтиФайлы(Источник, "*.*", Ложь);
	Для каждого Файл Из Файлы Цикл
		ПолноеИмяПриемника = КаталогПриемник.ПолноеИмя + "\" + Файл.Имя;
		Если Файл.ЭтоКаталог() Тогда
			СкопироватьФайлы(Файл.ПолноеИмя, ПолноеИмяПриемника);
		Иначе
			КопироватьФайл(Файл.ПолноеИмя, ПолноеИмяПриемника);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Проверки объекта на изменения
Теги: 1С

Функция для проверки объекта на изменения

# Код реализации

```1c
Функция ОбъектМодифицирован(Объект, ПроверятьТабличныеЧасти = Истина, ПроверятьСтандартные = Истина)

	Ссылка = Объект.Ссылка;
	Метаданное = Ссылка.Метаданные();

	Для каждого Реквизит из Метаданное.Реквизиты Цикл
		Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда
			Возврат Истина;
		КонецЕсли;
	КонецЦикла;

	Если ПроверятьСтандартные Тогда
		Для каждого Реквизит из Метаданное.СтандартныеРеквизиты Цикл
			Если Объект[Реквизит.Имя] <> Ссылка[Реквизит.Имя] Тогда
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;


    Если ПроверятьТабличныеЧасти Тогда
        Для каждого ТЧ из Метаданное.ТабличныеЧасти Цикл

            Если Объект[ТЧ.Имя].Количество() <> Ссылка[ТЧ.Имя].Количество() Тогда
                Возврат Истина;
            КонецЕсли;

            Для Индекс = 0 по Объект[ТЧ.Имя].Количество()-1 Цикл
                ОбъектСтрокаТЧ = Объект[ТЧ.Имя][Индекс];
                СсылкаСтрокаТЧ = Ссылка[ТЧ.Имя][Индекс];
                Для каждого РеквизитТЧ из ТЧ.Реквизиты Цикл
                    Если ОбъектСтрокаТЧ[РеквизитТЧ.Имя] <> СсылкаСтрокаТЧ[РеквизитТЧ.Имя] Тогда
                        Возврат Истина;
                    КонецЕсли;
                КонецЦикла;
            КонецЦикла;

        КонецЦикла;
    КонецЕсли;

    Возврат Ложь;

КонецФункции
```
Программная установка условного оформления (УО) поля динамического списка
Теги: 1С,Управляемое приложение,УТ11,УФ

1. Процедура находится в ОбщемМодуле (К примеру, ОбщегоНазначенияНаСервере);
2. Вызываться может как ПриСозданииНаСервере,  так и ПриИзменении, например статуса документа/ заказа (засчет ветвления);
3. При вызове в событии ПриСозданииНаСервере перед вызовом процедуры лучше очистить элементы условного офомления: УсловноеОформление.Элементы.Очистить();
4.Процедуру можно дорабатывать под свои хотелки, но для программного создания элементов ОУ, обязательно передавать параметр УсловноеОформление по ссылке;

# Код реализации

```1c
Процедура НазваниеПроцедуры(УсловноеОформление, ТаблицаЗначений = Неопределено, НомерПриОтображении = Неопределено, Цвет = Неопределено) Экспорт

	Если  УсловноеОформление.Элементы.Количество() = 0  Тогда
		//ПриСозданииНаСервере => Перед вызовом функции чистим Элементы УО:  УсловноеОформление.Элементы.Очистить();
		//Секция: Какое условное оформление нужно задать при генерации формы на сервере?
		Для каждого Строка Из ТаблицаЗначений Цикл

			ЭлементОформления 	= УсловноеОформление.Элементы.Добавить();

			ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.НомерПриОтображении");
			ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
			ЭлементОтбора.ПравоеЗначение = Строка.НомерПриОтображении;
			ЭлементОтбора.Использование = Истина;

			ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
			ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Оформление");
			ОформляемоеПоле.Использование = Истина;

                        //можем настроить любой параметр =>
			ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", Строка.ЦветСтатуса);

		КонецЦикла;

	Иначе

		//ПриИзменении цвета пользователем интерактивно;
	        //Секция: Какое условное оформление нужно задать при изменении элемента, установлении нового статуса, выполнении
                //условия и т.п.

		Для каждого ЭлементУО Из УсловноеОформление.Элементы Цикл
			Если СтрНайти(ЭлементУО.Отбор, НомерПриОтображении) > 0 Тогда
				ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", Цвет);
			КонецЕсли;
		КонецЦикла;

	КонецЕсли;

КонецПроцедуры // ()
```
Определение границы запрета изменения данных в УПП
Теги: 1С,УПП

# Код реализации

```1c
СоответствиеГраницЗапрета = ПараметрыСеанса.ГраницыЗапретаИзмененияДанных.Получить();
ГраницаПериода = СоответствиеГраницЗапрета[Организация.Ссылка];

// Если дата запрета по организации не определена, то используется основная дата запрета для пользователя
Если НЕ ЗначениеЗаполнено(ГраницаПериода) Тогда
    ГраницаПериода = СоответствиеГраницЗапрета[Справочники.Организации.ПустаяСсылка()];
КонецЕсли;

// Если основная дата запрета для пользователя не определена, то используется общая дата запрета
Если НЕ ЗначениеЗаполнено(ГраницаПериода) Тогда
    ГраницаПериода = СоответствиеГраницЗапрета["ОбщаяДатаЗапретаРедактирования"];
КонецЕсли;
```
Преобразование Объекта ДеревоЗначений в Объект ТаблицаЗначений
Теги: 1С,ТаблицаЗначений,ДеревоЗначений

В первую функцию передаем - ДеревоЗначений,  во вторую (рекурсивную) функцию передаем созданный объект встроенного языка - ТаблицаЗначений, и строку дерева; 
В место вызова функции ДеревоЗначенийВТаблицуЗначений() произойдет возврат ТаблицыЗначений.

# Код реализации

```1c
&НаСервере
Функция ДеревоЗначенийВТаблицуЗначений(Знач ДеревоЗначений)

	ТаблицаТоваров = Новый ТаблицаЗначений;

	//заполним колонки;
	Для каждого Колонка Из ДеревоЗначений.Колонки Цикл
		ТаблицаТоваров.Колонки.Добавить(Колонка.Имя);
	КонецЦикла;

	//произведем вызов вспомогательной рекурсивной функции;
	Для каждого Строка Из ДеревоЗначений.Строки Цикл
		РекурсивноеЗаполнениеТаблицыЗначений(ТаблицаТоваров, Строка);
	КонецЦикла;

	Возврат ТаблицаТоваров;

КонецФункции // ()

&НаСервере
Процедура РекурсивноеЗаполнениеТаблицыЗначений(ТаблицаЗначений, СтрокаДерева)

	//условие выхода из рекурсии;
	Если СтрокаДерева.Строки.Количество () = 0 Тогда
		Возврат;
	КонецЕсли;

	Для каждого Строка Из СтрокаДерева.Строки Цикл

		НоваяСтрока = ТаблицаЗначений.Добавить();
		Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
			НоваяСтрока[Колонка.Имя] = Строка[Колонка.Имя];
		КонецЦикла;

		РекурсивноеЗаполнениеТаблицыЗначений(ТаблицаЗначений, Строка);

	КонецЦикла;

КонецПроцедуры // ()
```
Работа с универсальными коллекциями данных
Теги: 1С,ТаблицаЗначений,Структура

Преобразование таблицы значений в массив структур, параметр - ТаблицаЗначений, возвращаемое значение - МассивСтруктур;

# Код реализации

```1c
&НаСервере
Функция ТаблицаЗначенийВМассивСтруктур(Знач ТаблицаЗначений)  Экспорт

	МассивСтруктур = Новый Массив;

	МассивНаименованийКолонок = Новый Массив;

	Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
		Если  МассивНаименованийКолонок.Найти(Колонка.Имя) = Неопределено Тогда
			МассивНаименованийКолонок.Добавить(Колонка.Имя);
		КонецЕсли;
	КонецЦикла;

	Для каждого Строка Из ТаблицаЗначений Цикл

		НоваяСтруктура = Новый Структура;
		Для каждого ЭлементМассива Из МассивНаименованийКолонок Цикл
			НоваяСтруктура.Вставить(ЭлементМассива, Строка[ЭлементМассива]);
		КонецЦикла;

		МассивСтруктур.Добавить(НоваяСтруктура);
	КонецЦикла;

	Возврат МассивСтруктур;

КонецФункции // ()
```

# Примечания

- А есть ли разница в формировании структуры перебирая массив в цикле, предварительно подготовив его из колонок ТЗ, вместо перебора сразу колонок в цикле? Лучше уж сформировать ещё и строку полей при обходе колонок, и создавать структуру конструктором Новый Структура(СписокПолейСтрокойЧерезЗапятую); ИМХО

- (1) СергейТ, Хорошая идея,  Сергей,  спасибо!
1с83. Шаблон кода для программной установки условного оформления поля динамического списка
Теги: 1С

Вызывать процедуру из модуля формы "ПриОткрытии"

# Код реализации

```1c
&НаКлиенте
Процедура УстановитьУсловноеОформлениеДляПоляСрокаГодности()

	ЭлементОформления = СписокПартийДС.УсловноеОформление.Элементы.Добавить();
	ЭлементОформления.Использование = Истина;

	ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
	ПолеОформления.Использование = Истина;
	ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ГоденДо");
	ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
	ПолеОформления.Использование = Истина;

	ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.Использование = истина;
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ГоденДо");
	ЭлементОтбора.ПравоеЗначение = ТекущаяДата() - 23668200;

	Оформление = ЭлементОформления.Оформление;
	Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета.Коралловый);

КонецПроцедуры
```
Получить нужные поля элемента справочника в виде структуры
Теги: 1С,Оптимизация

!!! ВНИМАНИЕ !!!
Ещё не тестировал, написал в промежутке, между основными задачами, оттестирую и доработаю как появится время. Если кто оттестит, буду очень рад конструктивным отзывам.

# Примечания

- Необязательно выгружать в таблицу значений, чтобы обратиться к колонкам. В РезультатеЗапроса тоже можно обойти коллекцию по колонкам

- Идея очень понравилась, спасибо. Может имеет смысл использовать ЗаполнитьЗначенияСвойств.
Набросал свой вариант для пояснения. Интересно ваше мнение.
&НаСервере
Функция ПолучитьНужныеПоляЭлемента(пСсылка, Знач СписокПолей = "") Экспорт
	
  ИмяМетаданных = пСсылка.Метаданные().Имя;
	
	// Добавляем реквизиты если не передали СписокПолей 
	Если ПустаяСтрока(СписокПолей) Тогда		
		
		// Стандартные
		Для каждого Реквизит из Справочники[ИмяМетаданных].ПустаяСсылка().Метаданные().СтандартныеРеквизиты Цикл	
			СписокПолей = СписокПолей+Реквизит.Имя+",";		
		КонецЦикла;       
		
		// Общие реквизиты	
		Для каждого Реквизит из Справочники[ИмяМетаданных].ПустаяСсылка().Метаданные().Реквизиты Цикл
		  СписокПолей = СписокПолей+Реквизит.Имя+",";	
		КонецЦикла;	

	КонецЕсли;
	
	ТЗ = "ВЫБРАТЬ ПЕРВЫЕ 1
		|	Спр.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник."+ИмяМетаданных+" AS Спр
		|ГДЕ
		|	Спр.Ссылка = &Ссылка";          
	
	Результат = Новый Структура;
	мнСтроки = СтрЗаменить(СписокПолей,",",Символы.ПС); 
	
	Для Стр=1 По СтрЧислоСтрок(мнСтроки) Цикл
		ТекПоле = СтрПолучитьСтроку(мнСтроки, Стр); 
		
		Если НЕ ПустаяСтрока(ТекПоле) Тогда
			Результат.Вставить(ТекПоле, Неопределено);
		КонецЕсли;  
		
	КонецЦикла;
	
	Если Результат.Количество() = 0 Тогда
		Возврат Результат;
	КонецЕсли;
	
	Запрос = Новый Запрос(ТЗ);
	Запрос.УстановитьПараметр("Ссылка", пСсылка);

	Таб = Запрос.Выполнить().Выгрузить();                 
	
	ЗаполнитьЗначенияСвойств(Результат, Таб[0].Ссылка);
	
	Возврат Результат

КонецФункции

- А почему нельзя использовать функции БСП:
ОбщегоНазначения.ЗначениеРеквизитаОбъекта
ОбщегоНазначения.ЗначенияРеквизитовОбъекта
ОбщегоНазначения.ЗначениеРеквизитаОбъектов
ОбщегоНазначения.ЗначенияРеквизитовОбъектов

- (3) vlhown, Можно, можно ))
Но я писал в конфу без БСП и сложности все запихивать не хотел. Вот и родилась простенькая простенькая функция. А то в ней понаписана куча всяких получений объектов или обращений к реквизитам через точку, решил переделать всё по нормальному.
Условное оформление
Теги: 1С,УсловноеОформление

Добавление условного оформления одной строкой в элементы формы: ДинамическийСписок, ТаблицаФормы
- поддерживает добавление сравниваемого значения при виде сравнения ВСписке
- создание/подбор (отборы будут дополнены) элемента отбора
- замена (т.е. удаление и создание заново, в т.ч. отборы
- удаление (без создания)
- исключение ПравоеЗначение из отбора, но не удалять само оформление