Как то мне потребовалось вывести пользователю сообщение с таблицей 4 на 4.
Решил сделать для этого общую форму HTMLСообщение, пример ее вызова ниже:
СтруктураПараметров = Новый Структура(Заголовок, ТекстСообщения);
СтруктураПараметров.Заголовок = Заключе...
&НаСервереБезКонтекста
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные)
тзДанные = Новый ТаблицаЗначений;
Для Каждого ЭлементМассива Из мсДанные Цикл
Если тзДанные.Колонки.Количество() = 0 Тогда
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ);
КонецЦикла;
КонецЕсли;
НоваяСтрока = тзДанные.Добавить();
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
КонецЦикла;
КонецЦикла;
Возврат тзДанные;
КонецФункции
&НаСервереБезКонтекста
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные)
тзДанные = Новый ТаблицаЗначений;
Для Каждого ЭлементМассива Из мсДанные Цикл
Если тзДанные.Колонки.Количество() = 0 Тогда
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
тзДанные.Колонки.Добавить(ЗначениеСтруктуры.Ключ);
КонецЦикла;
КонецЕсли;
НоваяСтрока = тзДанные.Добавить();
Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
КонецЦикла;
КонецЦикла;
Возврат тзДанные;
КонецФункции
TurboConf повышает эффективность работы в Конфигураторе 1С и помогает программисту автоматизировать свои задачи.
Получение указанного порядкового рабочего дня к дате
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000000
Календарь.ДатаКалендаря КАК ДатаКалендаря
ПОМЕСТИТЬ БанковскиеДниКалендаря
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ГДЕ
(Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
УПОРЯДОЧИТЬ ПО
Календарь.ДатаКалендаря
ИНДЕКСИРОВАТЬ ПО
Календарь.ДатаКалендаря
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДАТАВРЕМЯ(2022, 4, 1) КАК ДатаДокумента,
5 КАК ДнейОтсрочки
ПОМЕСТИТЬ ТаблицаОплат
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2022, 4, 9),
7
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Оплаты.ДатаДокумента КАК ДатаДокумента,
Оплаты.ДнейОтсрочки КАК ДнейОтсрочки,
Календарь.ДатаКалендаря КАК ДатаОплаты
ИЗ
ТаблицаОплат КАК Оплаты
ЛЕВОЕ СОЕДИНЕНИЕ БанковскиеДниКалендаря КАК Календарь
ПО ((Календарь.ДатаКалендаря, Оплаты.ДнейОтсрочки) В
(ВЫБРАТЬ
Выборка.ДатаКалендаря КАК ДатаКалендаря,
СУММА(1) КАК НомерРабочегоДня
ИЗ
БанковскиеДниКалендаря КАК Выборка ЛЕВОЕ СОЕДИНЕНИЕ БанковскиеДниКалендаря КАК ПодВыборка
ПО
ПодВыборка.ДатаКалендаря > Оплаты.ДатаДокумента
И ПодВыборка.ДатаКалендаря <= Выборка.ДатаКалендаря
ГДЕ
Выборка.ДатаКалендаря > Оплаты.ДатаДокумента
СГРУППИРОВАТЬ ПО
Выборка.ДатаКалендаря))
ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000000
Календарь.ДатаКалендаря КАК ДатаКалендаря
ПОМЕСТИТЬ БанковскиеДниКалендаря
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК Календарь
ГДЕ
(Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ Календарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
УПОРЯДОЧИТЬ ПО
Календарь.ДатаКалендаря
ИНДЕКСИРОВАТЬ ПО
Календарь.ДатаКалендаря
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДАТАВРЕМЯ(2022, 4, 1) КАК ДатаДокумента,
5 КАК ДнейОтсрочки
ПОМЕСТИТЬ ТаблицаОплат
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2022, 4, 9),
7
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Оплаты.ДатаДокумента КАК ДатаДокумента,
Оплаты.ДнейОтсрочки КАК ДнейОтсрочки,
Календарь.ДатаКалендаря КАК ДатаОплаты
ИЗ
ТаблицаОплат КАК Оплаты
ЛЕВОЕ СОЕДИНЕНИЕ БанковскиеДниКалендаря КАК Календарь
ПО ((Календарь.ДатаКалендаря, Оплаты.ДнейОтсрочки) В
(ВЫБРАТЬ
Выборка.ДатаКалендаря КАК ДатаКалендаря,
СУММА(1) КАК НомерРабочегоДня
ИЗ
БанковскиеДниКалендаря КАК Выборка ЛЕВОЕ СОЕДИНЕНИЕ БанковскиеДниКалендаря КАК ПодВыборка
ПО
ПодВыборка.ДатаКалендаря > Оплаты.ДатаДокумента
И ПодВыборка.ДатаКалендаря <= Выборка.ДатаКалендаря
ГДЕ
Выборка.ДатаКалендаря > Оплаты.ДатаДокумента
СГРУППИРОВАТЬ ПО
Выборка.ДатаКалендаря))
Сравнение Таблиц Значений две Таблицы
// Предварительно надо отсортировать обе таблицы по одному и тому же уникальному ключу
СтрВнутр_СтараяТЗ = ЗначениеВСтрокуВнутр(тзСтарыеПартииГТД.Скопировать());
СтрВнутр_НоваяТЗ = ЗначениеВСтрокуВнутр(тзНовыеПартииГТД.Скопировать());
Если СтрВнутр_СтараяТЗ <> СтрВнутр_НоваяТЗ Тогда
// Предварительно надо отсортировать обе таблицы по одному и тому же уникальному ключу
СтрВнутр_СтараяТЗ = ЗначениеВСтрокуВнутр(тзСтарыеПартииГТД.Скопировать());
СтрВнутр_НоваяТЗ = ЗначениеВСтрокуВнутр(тзНовыеПартииГТД.Скопировать());
Если СтрВнутр_СтараяТЗ <> СтрВнутр_НоваяТЗ Тогда
Процедура СвернутьМассив(Мас) Экспорт
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ЗначМас");
Для каждого ЗначМас из Мас Цикл
НСтрока = ТЗ.Добавить();
НСтрока.ЗначМас = ЗначМас;
КонецЦикла;
ТЗ.Свернуть("ЗначМас");
Мас.Очистить();
Для каждого СтрТЗ из ТЗ Цикл
Мас.Добавить(СтрТЗ.ЗначМас);
КонецЦикла;
КонецПроцедуры
Процедура СвернутьМассив(Мас) Экспорт
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ЗначМас");
Для каждого ЗначМас из Мас Цикл
НСтрока = ТЗ.Добавить();
НСтрока.ЗначМас = ЗначМас;
КонецЦикла;
ТЗ.Свернуть("ЗначМас");
Мас.Очистить();
Для каждого СтрТЗ из ТЗ Цикл
Мас.Добавить(СтрТЗ.ЗначМас);
КонецЦикла;
КонецПроцедуры
Функция ТранспонироватьТЗ(ТЗ)
ТЗ2 = Новый ТаблицаЗначений;
Массив = ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0]); // первая колонка содержит названия новых колонок
ТЗ2.Колонки.Добавить(ТЗ.Колонки[0].Имя); // старые названия колонок сохраним в первой колонке
Для Каждого Значения из Массив Цикл
ТЗ2.Колонки.Добавить(СокрЛП(Значения));
КонецЦикла;
Для Сч = 1 По ТЗ.Колонки.Количество() - 1 Цикл
ТЗ2.Добавить();
ТЗ2[Сч - 1][ТЗ.Колонки[0].Имя] = ТЗ.Колонки[Сч].Имя;
КонецЦикла;
СчетчикСтрок = -1;
Для каждого стр из Тз Цикл
СчетчикСтрок = СчетчикСтрок + 1;
Мас = Новый Массив;
Для Сч = 1 По ТЗ.Колонки.Количество() - 1 Цикл
Мас.Вставить(Сч - 1, стр[Сч]);
КонецЦикла;
ТЗ2.ЗагрузитьКолонку(Мас, ТЗ2.Колонки[СчетчикСтрок + 1]);
КонецЦикла;
Возврат ТЗ2;
КонецФункции
Функция ТранспонироватьТЗ(ТЗ)
ТЗ2 = Новый ТаблицаЗначений;
Массив = ТЗ.ВыгрузитьКолонку(ТЗ.Колонки[0]); // первая колонка содержит названия новых колонок
ТЗ2.Колонки.Добавить(ТЗ.Колонки[0].Имя); // старые названия колонок сохраним в первой колонке
Для Каждого Значения из Массив Цикл
ТЗ2.Колонки.Добавить(СокрЛП(Значения));
КонецЦикла;
Для Сч = 1 По ТЗ.Колонки.Количество() - 1 Цикл
ТЗ2.Добавить();
ТЗ2[Сч - 1][ТЗ.Колонки[0].Имя] = ТЗ.Колонки[Сч].Имя;
КонецЦикла;
СчетчикСтрок = -1;
Для каждого стр из Тз Цикл
СчетчикСтрок = СчетчикСтрок + 1;
Мас = Новый Массив;
Для Сч = 1 По ТЗ.Колонки.Количество() - 1 Цикл
Мас.Вставить(Сч - 1, стр[Сч]);
КонецЦикла;
ТЗ2.ЗагрузитьКолонку(Мас, ТЗ2.Колонки[СчетчикСтрок + 1]);
КонецЦикла;
Возврат ТЗ2;
КонецФункции
&НаСервере
Функция ПолучитьТЗизДинамическогоСписка()
Схема = Элементы.Сделки.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.Сделки.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ТабЗначений = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТабЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
Возврат ТабЗначений;
КонецФункции
&НаСервере
Функция ПолучитьТЗизДинамическогоСписка()
Схема = Элементы.Сделки.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
Настройки = Элементы.Сделки.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ТабЗначений = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТабЗначений);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
Возврат ТабЗначений;
КонецФункции
Предлагаю свой вариант добавления нового поля в текст запроса динамического списка и добавление этого поля на форму.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЧастиЗапроса = СтрРазделить(Список.ТекстЗапроса, ",");
ЧастиЗапроса.Вставить(1, "СправочникКонтрагенты.ПометкаУдаления");
Список.ТекстЗапроса = СтрСоединить(ЧастиЗапроса, ",");
НовыйЭлемент = Элементы.Добавить("СписокПометкаУдаления", Тип("ПолеФормы"), Элементы.Список);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "Список.ПометкаУдаления";
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЧастиЗапроса = СтрРазделить(Список.ТекстЗапроса, ",");
ЧастиЗапроса.Вставить(1, "СправочникКонтрагенты.ПометкаУдаления");
Список.ТекстЗапроса = СтрСоединить(ЧастиЗапроса, ",");
НовыйЭлемент = Элементы.Добавить("СписокПометкаУдаления", Тип("ПолеФормы"), Элементы.Список);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовыйЭлемент.ПутьКДанным = "Список.ПометкаУдаления";
КонецПроцедуры
Для того, чтобы компоновщик настроек мог понять, с каким типами данных из временной таблицы он имеет дело, желательно прописать это в тексте запроса, используя выражения языка запросов ВЫРАЗИТЬ(ВТ.ЗначениеПоля КАК <Описание типа>) или ЕСТЬNULL(ВТ.ЗначениеП...
К оригиналу добавил возможность передать дополнительно свои условия к запросу
Модуль менеджера
//Параметры.ДопУсловияПоиска - строка - значение подставится в параметры запроса
// Пример: Справочники.ПодразделенияОрганизаций.ПолучитьДанныеВыбора(Новый Ст...
Примеры использования: для запуска ДО из других конфигураций или из Битрикс24 и т.п. интеграций
Функция ПолучитьWebСсылкуНаОбъект(Объект) Экспорт
НавСсылка = ПолучитьНавигационнуюСсылку(Объект);
ДлинаСтроки = СтрДлина(НавСсылка);
ПозицияРеф = СтрНа...
С помощью построителя запросов
// ТаблицаОтборов - Таблица значений с колонками
// ИмяОтбора - Строка
// ВидСравнения - ВидСравнения
// Значение - Any
// Возвращает отфильтрованную таблицу значений
Функция ОтфильтроватьТаблицуЗначений(ТаблицаЗначенийДляФильтрации, ТаблицаОтборов)
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначенийДляФильтрации);
Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл
Отбор = Построитель.Отбор.Добавить(СтрокаКоллекции.ИмяОтбора);
Отбор.ВидСравнения = СтрокаКоллекции.ВидСравнения;
Отбор.Использование = Истина;
Отбор.Значение = СтрокаКоллекции.Значение;
КонецЦикла;
Возврат Построитель.Результат.Выгрузить();
КонецФункции
// ТаблицаОтборов - Таблица значений с колонками
// ИмяОтбора - Строка
// ВидСравнения - ВидСравнения
// Значение - Any
// Возвращает отфильтрованную таблицу значений
Функция ОтфильтроватьТаблицуЗначений(ТаблицаЗначенийДляФильтрации, ТаблицаОтборов)
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаЗначенийДляФильтрации);
Для Каждого СтрокаКоллекции Из ТаблицаОтборов Цикл
Отбор = Построитель.Отбор.Добавить(СтрокаКоллекции.ИмяОтбора);
Отбор.ВидСравнения = СтрокаКоллекции.ВидСравнения;
Отбор.Использование = Истина;
Отбор.Значение = СтрокаКоллекции.Значение;
КонецЦикла;
Возврат Построитель.Результат.Выгрузить();
КонецФункции
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоLinux = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы.Linux_x86_64;
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоLinux = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы.Linux_x86_64;
//Вспомогательная, используется в "РаскраситьКод1С8"
Процедура ДобавитьСлово(Код, Слово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, ТипСлова=Неопределено)
Если ПустаяСтрока(Слово) Тогда
Код = Код + СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, " ", " "), Символы.НПП, " "), Символы.Таб, " ");
Возврат;
ИначеЕсли ТипСлова=Неопределено Тогда
нсл = НРег(СокрП(Слово));
Если Найти(СписокКлючевыхСлов, нсл)>0 Тогда
ТипСлова = "<keywrd>";
ИначеЕсли Слово = "0" или мОписаниеТипаЧисло.ПривестиЗначение(Слово)<>0 Тогда
ТипСлова = "<num>";
Иначе
ТипСлова = "<text>";
ЭтоЧисло = Истина;
Для сч=1 по СтрДлина(нсл) Цикл
ТекСимв=Сред(нсл, сч, 1);
Если Найти(ДопустимыеЗнаки, ТекСимв)=0 Тогда
ТипСлова="<unwn>";
Прервать;
ИначеЕсли ТекСимв<>"0" Тогда
ЭтоЧисло = Ложь;
КонецЕсли;
КонецЦикла;
Если ЭтоЧисло Тогда
ТипСлова = "<num>";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Код = Код + ?(ТекТипСлова=ТипСлова, "", ТипСлова) + СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, "<", "<"), ">", ">"), " ", " "), Символы.НПП, " "), Символы.Таб, " ");
ТекТипСлова = ТипСлова;
Слово = "";
КонецПроцедуры
//Реализует функционал "Оформить фрагмент кода"
Функция РаскраситьКод1С8(ТекстКод) Экспорт
мОписаниеТипаЧисло = Новый ОписаниеТипов("Число");
Таб = Символы.Таб;
НПП = Символы.НПП;
ДопустимыеЗнаки = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789abcdefghijklmnopqrstyvwxyz_";
СписокКлючевыхСлов = "асинх|async|ждать|await|if|если|then|тогда|elsif|иначеесли|else|иначе|endif|конецесли|do|цикл|for|для|to|по|each|каждого|in|из|while|пока|enddo|конеццикла|procedure|процедура|endprocedure|конецпроцедуры|function|функция|endfunction|конецфункции|var|перем|export|экспорт|goto|перейти|and|и|or|или|not|не|val|знач|break|прервать|continue|продолжить|return|возврат|try|попытка|except|исключение|endtry|конецпопытки|raise|вызватьисключение|false|ложь|true|истина|undefined|неопределено|null|new|новый|execute|выполнить|";
Ответ = "<span style=""text-align: left; font-family: courier new,courier; color: blue; font-size: 10pt; white-space: pre; display: inline-block; ""><font>";
ТекТипСлова = "<text>";
Для нс=1 По СтрЧислоСтрок(ТекстКод) Цикл
ТекСтрока = СокрП(СтрПолучитьСтроку(ТекстКод, нс));
дл = СтрДлина(ТекСтрока);
сч = 0;
ТекСлово = "";
КодНеНачался = Истина;
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = Сред(ТекСтрока, сч, 1);
Если КодНеНачался Тогда
Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
//ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", " ");
Ответ = Ответ + ТекущийСимвол;
Продолжить;
ИначеЕсли ТекущийСимвол="#" или ТекущийСимвол="&" Тогда
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, сч), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<dir>");
Прервать;
КонецЕсли;
КонецЕсли;
КодНеНачался = Ложь;
Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
Если КодНеНачался Тогда
Ответ = Ответ + ТекущийСимвол;
Продолжить;
КонецЕсли;
//ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", " ");
ДобавитьСлово(Ответ, ТекСлово+ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
ТекСлово = "";
Продолжить;
ИначеЕсли Найти("():;.,=+-*<>?[]%/", ТекущийСимвол) > 0 Тогда
ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
ТекСлово = "";
//Проверяем на комментарий
Если ТекущийСимвол="/" и Сред(ТекСтрока, сч+1, 1)="/" Тогда
ТекСлово = "";
ДобавитьСлово(Ответ, СокрП(Сред(ТекСтрока, сч)), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<cmnt>");
Прервать;
КонецЕсли;
ДобавитьСлово(Ответ, ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<symb>");
Продолжить;
ИначеЕсли ТекущийСимвол="""" или ТекущийСимвол="|" Тогда
ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
// найти закрывающую кавычку
нач = сч;
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = СледующийСимвол;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Если ТекущийСимвол="""" Тогда
Если СледующийСимвол="""" Тогда
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
сч = сч - 1;
Продолжить;
ИначеЕсли ТекущийСимвол="'" Тогда
нач = сч;
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = СледующийСимвол;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Если ТекущийСимвол="'" Тогда
Если СледующийСимвол="'" Тогда
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
сч = сч - 1;
Продолжить;
КонецЕсли;
ТекСлово = ТекСлово + ТекущийСимвол;
КонецЦикла;
Если Не ПустаяСтрока(ТекСлово) Тогда
ДобавитьСлово(Ответ,СокрП(ТекСлово), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
КонецЕсли;
Ответ = Ответ + "";
КонецЦикла;
Ответ = Ответ + Символы.ПС+"</font></span>";
Ответ = СтрЗаменить(Ответ, "<keywrd>", "</font><font color=red>");
Ответ = СтрЗаменить(Ответ, "<text>", "</font><font color=blue>");
Ответ = СтрЗаменить(Ответ, "<str>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<num>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<unwn>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<symb>", "</font><font color=red>");
Ответ = СтрЗаменить(Ответ, "<cmnt>", "</font><font color=green>");
Ответ = СтрЗаменить(Ответ, "<dir>", "</font><font color=brown>");
Ответ = СтрЗаменить(Ответ, Символы.Таб, " ");
Возврат Ответ;
КонецФункции
//Вспомогательная, используется в "РаскраситьКод1С8"
Процедура ДобавитьСлово(Код, Слово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, ТипСлова=Неопределено)
Если ПустаяСтрока(Слово) Тогда
Код = Код + СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, " ", " "), Символы.НПП, " "), Символы.Таб, " ");
Возврат;
ИначеЕсли ТипСлова=Неопределено Тогда
нсл = НРег(СокрП(Слово));
Если Найти(СписокКлючевыхСлов, нсл)>0 Тогда
ТипСлова = "<keywrd>";
ИначеЕсли Слово = "0" или мОписаниеТипаЧисло.ПривестиЗначение(Слово)<>0 Тогда
ТипСлова = "<num>";
Иначе
ТипСлова = "<text>";
ЭтоЧисло = Истина;
Для сч=1 по СтрДлина(нсл) Цикл
ТекСимв=Сред(нсл, сч, 1);
Если Найти(ДопустимыеЗнаки, ТекСимв)=0 Тогда
ТипСлова="<unwn>";
Прервать;
ИначеЕсли ТекСимв<>"0" Тогда
ЭтоЧисло = Ложь;
КонецЕсли;
КонецЦикла;
Если ЭтоЧисло Тогда
ТипСлова = "<num>";
КонецЕсли;
КонецЕсли;
КонецЕсли;
Код = Код + ?(ТекТипСлова=ТипСлова, "", ТипСлова) + СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Слово, "<", "<"), ">", ">"), " ", " "), Символы.НПП, " "), Символы.Таб, " ");
ТекТипСлова = ТипСлова;
Слово = "";
КонецПроцедуры
//Реализует функционал "Оформить фрагмент кода"
Функция РаскраситьКод1С8(ТекстКод) Экспорт
мОписаниеТипаЧисло = Новый ОписаниеТипов("Число");
Таб = Символы.Таб;
НПП = Символы.НПП;
ДопустимыеЗнаки = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789abcdefghijklmnopqrstyvwxyz_";
СписокКлючевыхСлов = "асинх|async|ждать|await|if|если|then|тогда|elsif|иначеесли|else|иначе|endif|конецесли|do|цикл|for|для|to|по|each|каждого|in|из|while|пока|enddo|конеццикла|procedure|процедура|endprocedure|конецпроцедуры|function|функция|endfunction|конецфункции|var|перем|export|экспорт|goto|перейти|and|и|or|или|not|не|val|знач|break|прервать|continue|продолжить|return|возврат|try|попытка|except|исключение|endtry|конецпопытки|raise|вызватьисключение|false|ложь|true|истина|undefined|неопределено|null|new|новый|execute|выполнить|";
Ответ = "<span style=""text-align: left; font-family: courier new,courier; color: blue; font-size: 10pt; white-space: pre; display: inline-block; ""><font>";
ТекТипСлова = "<text>";
Для нс=1 По СтрЧислоСтрок(ТекстКод) Цикл
ТекСтрока = СокрП(СтрПолучитьСтроку(ТекстКод, нс));
дл = СтрДлина(ТекСтрока);
сч = 0;
ТекСлово = "";
КодНеНачался = Истина;
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = Сред(ТекСтрока, сч, 1);
Если КодНеНачался Тогда
Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
//ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", " ");
Ответ = Ответ + ТекущийСимвол;
Продолжить;
ИначеЕсли ТекущийСимвол="#" или ТекущийСимвол="&" Тогда
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, сч), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<dir>");
Прервать;
КонецЕсли;
КонецЕсли;
КодНеНачался = Ложь;
Если ТекущийСимвол=" " Или ТекущийСимвол=Таб Или ТекущийСимвол=НПП Тогда
Если КодНеНачался Тогда
Ответ = Ответ + ТекущийСимвол;
Продолжить;
КонецЕсли;
//ТекущийСимвол = ?(ТекущийСимвол=" " или ТекущийСимвол=НПП, " ", " ");
ДобавитьСлово(Ответ, ТекСлово+ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
ТекСлово = "";
Продолжить;
ИначеЕсли Найти("():;.,=+-*<>?[]%/", ТекущийСимвол) > 0 Тогда
ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
ТекСлово = "";
//Проверяем на комментарий
Если ТекущийСимвол="/" и Сред(ТекСтрока, сч+1, 1)="/" Тогда
ТекСлово = "";
ДобавитьСлово(Ответ, СокрП(Сред(ТекСтрока, сч)), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<cmnt>");
Прервать;
КонецЕсли;
ДобавитьСлово(Ответ, ТекущийСимвол, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<symb>");
Продолжить;
ИначеЕсли ТекущийСимвол="""" или ТекущийСимвол="|" Тогда
ДобавитьСлово(Ответ, ТекСлово, ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
// найти закрывающую кавычку
нач = сч;
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = СледующийСимвол;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Если ТекущийСимвол="""" Тогда
Если СледующийСимвол="""" Тогда
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
сч = сч - 1;
Продолжить;
ИначеЕсли ТекущийСимвол="'" Тогда
нач = сч;
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Пока сч<дл Цикл
сч = сч + 1;
ТекущийСимвол = СледующийСимвол;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Если ТекущийСимвол="'" Тогда
Если СледующийСимвол="'" Тогда
сч = сч + 1;
СледующийСимвол = Сред(ТекСтрока, сч, 1);
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТекСлово = "";
ДобавитьСлово(Ответ, Сред(ТекСтрока, нач, сч-нач), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло, "<str>");
сч = сч - 1;
Продолжить;
КонецЕсли;
ТекСлово = ТекСлово + ТекущийСимвол;
КонецЦикла;
Если Не ПустаяСтрока(ТекСлово) Тогда
ДобавитьСлово(Ответ,СокрП(ТекСлово), ТекТипСлова, СписокКлючевыхСлов, ДопустимыеЗнаки, мОписаниеТипаЧисло);
КонецЕсли;
Ответ = Ответ + "";
КонецЦикла;
Ответ = Ответ + Символы.ПС+"</font></span>";
Ответ = СтрЗаменить(Ответ, "<keywrd>", "</font><font color=red>");
Ответ = СтрЗаменить(Ответ, "<text>", "</font><font color=blue>");
Ответ = СтрЗаменить(Ответ, "<str>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<num>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<unwn>", "</font><font color=black>");
Ответ = СтрЗаменить(Ответ, "<symb>", "</font><font color=red>");
Ответ = СтрЗаменить(Ответ, "<cmnt>", "</font><font color=green>");
Ответ = СтрЗаменить(Ответ, "<dir>", "</font><font color=brown>");
Ответ = СтрЗаменить(Ответ, Символы.Таб, " ");
Возврат Ответ;
КонецФункции
Неделя Полугодие Декада
|Поле|Тип|Формат|
|-------- | --------- | --------------------------------------------|
|ПериодДень | формат | ДФ='dd.MM.yyyy'|
|ПериодНеделя | выражение | Формат(НачалоПериода(ПериодНеделя, "Неделя"), "ДФ='dd.MM.yyyy...
Скрипт для TurboConf реализует вставку в текст модуля конструкцию создания нового описания оповещения, а также саму процедуру-обработчик для него.
Объединение и соединение табличных документов - исследовательская статья "на подумать"
Проблема соединения (объединения) табличных документов начинается тогда, когда табличный документ имеет блоки строк с разной шириной колонок. Сейчас почти все печатны...
Данный шаблон можно временно втыкать в расширении (в режиме "вместо"), если отладка не доступна, а подробности падения узнать хочется.
//Описание
Попытка
// оборачиваемый код
Исключение
ПоляК...
Добрый день! Ребят, ну помогите победить беду. Пытаюсь из unixtime получить читабельную дату.
Делаю так :
Дата1С = дата(1970,1,1,1,0,0) + 637746530810000000;
Получаю 01.01.0001 0:00:00 , а должно быть 09.12.2021 13:24:41 Это знаю так как с этой базой раб...
upd: v21.1210.1200
- Исправлены орфографические ошибки в коде
v21.1027.1000
Программное изменение или добавление реквизитов, свойств, полей и прочего на форме.
Позаимствовано с infostart, дорабатывается под себя.
P.S. В данную библиотеку ещё дорабатывать и дорабатывать, надеюсь на вашу помощь и предложения, чтобы привести данную библиотеку в божеский вид :)
// Добавляет новую команду формы. Дополнительно можно сразу разместить кнопку на форме
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяКоманды - Строка - имя новой команды формы
//
// ДействиеКоманды - Строка - имя обработчика для команды
//
// ИмяГруппы - Строка - имя родительского элемента, если необходимо разместить команду на форме
// - Неопределено - если нужно только создать новую команду
// По умолчанию команда размещается в корне формы
//
// ВидКнопки - ВидКнопкиФормы - вид кнопки формы. По умолчанию ОбычнаяКнопка или КнопкаКоманднойПанели,
// зависит от родителя
//
// Заголовок - Строка - заголовок кнопки формы. Не обязательный
//
// ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить кнопку формы. Не обязательный
//
// Картинка - Картинка - картинка кнопки формы. Не обязательный
//
// ОтображениеКнопки - ОтображениеКнопки - вариант отражение кнопки на форме. Учитывается только если
// заполнен параметр Картинка. Не обязательный
//
Процедура ДобавитьРазместитьКомандуФормы(Форма, ИмяКоманды, ДействиеКоманды, ИмяГруппы = "", ВидКнопки = Неопределено,
Заголовок = "", ПоместитьПеред = "",
Картинка = Неопределено, ОтображениеКнопки = Неопределено,
Доступность = Истина) Экспорт
Команда = Форма.Команды.Добавить(ИмяКоманды);
Команда.Действие = ДействиеКоманды;
Если ЗначениеЗаполнено(Заголовок) Тогда
Команда.Заголовок = Заголовок;
КонецЕсли;
Если Картинка <> Неопределено Тогда
Команда.Картинка = Картинка;
Если ОтображениеКнопки <> Неопределено Тогда
Команда.Отображение = ОтображениеКнопки;
КонецЕсли;
КонецЕсли;
Если ИмяГруппы = Неопределено Тогда
Возврат;
ИначеЕсли ЗначениеЗаполнено(ИмяГруппы) Тогда
ЭлементРодитель = Форма.Элементы[ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
КнопкаФормы = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭлементРодитель);
КнопкаФормы.ИмяКоманды = ИмяКоманды;
КнопкаФормы.Доступность = Доступность;
Если ВидКнопки <> Неопределено Тогда
КнопкаФормы.Вид = ВидКнопки;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(КнопкаФормы, ЭлементРодитель, Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
КонецПроцедуры
// Добавляет новый реквизит формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяРеквизита - Строка - имя нового реквизита формы
//
// ТипРеквизита - ОписаниеТипов - тип реквизита. По умолчанию строка
//
// ЗаголовокРеквизита - Строка - отображаемый текст реквизита. Не обязательный
//
// Путь - Строка - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
//
// СохраняемыеДанные - Булево - если реквизит содержит сохраняемые данные. По умолчанию Ложь
//
// РодительЭлемента - Строка - имя родителя элемента формы,
// если дополнительно необходимо разместить на форме. Не обязательный
//
// ИмяЭлемента - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
// По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитФормы(Форма, ИмяРеквизита, ТипРеквизита, ЗаголовокРеквизита = "", Путь = "",
СохраняемыеДанные = Ложь, РодительЭлемента = "", ИмяЭлемента = "") Экспорт
СтруктураРеквизита = Новый Структура;
СтруктураРеквизита.Вставить("ИмяРеквизита", ИмяРеквизита);
Если ЗначениеЗаполнено(ТипРеквизита) Тогда
СтруктураРеквизита.Вставить("ТипРеквизита", ТипРеквизита);
КонецЕсли;
Если ЗначениеЗаполнено(ЗаголовокРеквизита) Тогда
СтруктураРеквизита.Вставить("ЗаголовокРеквизита", ЗаголовокРеквизита);
КонецЕсли;
Если ЗначениеЗаполнено(Путь) Тогда
СтруктураРеквизита.Вставить("Путь", Путь);
КонецЕсли;
Если ЗначениеЗаполнено(СохраняемыеДанные) Тогда
СтруктураРеквизита.Вставить("СохраняемыеДанные", СохраняемыеДанные);
КонецЕсли;
Если ЗначениеЗаполнено(РодительЭлемента) Тогда
СтруктураРеквизита.Вставить("РодительЭлемента", РодительЭлемента);
КонецЕсли;
Если ЗначениеЗаполнено(ИмяЭлемента) Тогда
СтруктураРеквизита.Вставить("ИмяЭлемента", ИмяЭлемента);
КонецЕсли;
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(СтруктураРеквизита);
ДобавитьРеквизитыФормы(Форма, МассивРеквизитов);
КонецПроцедуры
// Добавляет новые реквизиты формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// МассивРеквизитов - Массив структур - содержит:
// *ИмяРеквизита - Строка - имя нового реквизита формы
// *ТипРеквизита - ОписаниеТипов - тип реквизита. По умолчанию строка неограниченной длины
// *ЗаголовокРеквизита - Строка - отображаемый текст реквизита. Не обязательный
// *Путь - Строка - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
// *СохраняемыеДанные - Булево - если реквизит содержит сохраняемые данные. По умолчанию Ложь
// *РодительЭлемента - Строка - имя родителя элемента формы,
// *ИмяЭлемента - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
// По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитыФормы(Форма, МассивРеквизитов) Экспорт
ДобавляемыеРеквизиты = Новый Массив;
РеквизитыДляРазмещения = Новый Массив;
Для каждого ОписаниеРеквизита Из МассивРеквизитов Цикл
ИмяРеквизита = ОписаниеРеквизита.ИмяРеквизита;
Если ОписаниеРеквизита.Свойство("ТипРеквизита") Тогда
ТипРеквизита = ОписаниеРеквизита.ТипРеквизита;
Иначе
ТипРеквизита = Новый ОписаниеТипов("Строка");
КонецЕсли;
ЗаголовокРеквизита = "";
Если ОписаниеРеквизита.Свойство("ЗаголовокРеквизита") Тогда
ЗаголовокРеквизита = ОписаниеРеквизита.ЗаголовокРеквизита;
КонецЕсли;
Путь = "";
Если ОписаниеРеквизита.Свойство("Путь") Тогда
Путь = ОписаниеРеквизита.Путь;
КонецЕсли;
СохраняемыеДанные = Ложь;
Если ОписаниеРеквизита.Свойство("СохраняемыеДанные") Тогда
СохраняемыеДанные = ОписаниеРеквизита.СохраняемыеДанные;
КонецЕсли;
РеквизитФормы = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита, Путь, ЗаголовокРеквизита, СохраняемыеДанные);
ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
//+ Дополнительное размещение реквизитов на форме
Если ОписаниеРеквизита.Свойство("РодительЭлемента") Тогда
СтруктураЭлемента = Новый Структура;
СтруктураЭлемента.Вставить("ИмяГруппы", ОписаниеРеквизита.РодительЭлемента);
Если ОписаниеРеквизита.Свойство("Путь") Тогда
Шаблон = "%1.%2";
ПутьКДанным = СтрШаблон(Шаблон, ОписаниеРеквизита.Путь, ИмяРеквизита);
Иначе
ПутьКДанным = ИмяРеквизита;
КонецЕсли;
СтруктураЭлемента.Вставить("ПутьКДанным", ПутьКДанным);
ИмяЭлемента = ИмяРеквизита;
Если ОписаниеРеквизита.Свойство("ИмяЭлемента") Тогда
ИмяЭлемента = ОписаниеРеквизита.ИмяЭлемента;
КонецЕсли;
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить(ИмяЭлемента, СтруктураЭлемента);
РеквизитыДляРазмещения.Добавить(СтруктураРеквизитов);
КонецЕсли;
//- Дополнительное размещение реквизитов на форме
КонецЦикла;
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
РазместитьРеквизитыНаФорме(Форма, РеквизитыДляРазмещения);
КонецПроцедуры
// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// МассивРеквизитов - Массив структур - содержит:
// * Имя - Имя добавляемого реквизита
// * Значение - Структура - содержит (все свойства не обязательные):
// ** ИмяГруппы - Строка - имя элемента родителя
// ** ПутьКДанным - Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
// ** ВидПоляФормы - ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
// ** Видимость - Булево - значение свойства Видимость
// ** ТолькоПросмотр - Булево - значение свойства ТолькоПросмотр
// ** Доступность - Булево - значение свойства Доступность
// ** ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить
// ** ОбработкаСобытий - Массив структур - содержит:
// *** Событие - Строка - имя события элемента
// *** Действие - Строка - имя процедуры исполнителя события
//
Процедура РазместитьРеквизитыНаФорме(Форма, МассивРеквизитов) Экспорт
Для каждого ТекРеквизит Из МассивРеквизитов Цикл
ИмяРеквизита = ТекРеквизит.Имя;
ПараметрыРеквизита = ТекРеквизит.Значение;
Если ПараметрыРеквизита.Свойство("ИмяГруппы") Тогда
ЭлементРодитель = Форма.Элементы[ПараметрыРеквизита.ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), ЭлементРодитель);
Если ПараметрыРеквизита.Свойство("ПутьКДанным") Тогда
Элемент.ПутьКДанным = ПараметрыРеквизита.ПутьКДанным;
Иначе
Элемент.ПутьКДанным = "Объект." + ИмяРеквизита;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ВидПоляФормы") Тогда
Элемент.Вид = ПараметрыРеквизита.ВидПоляФормы;
Иначе
Элемент.Вид = ВидПоляФормы.ПолеВвода;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("Видимость") Тогда
Элемент.Видимость = ПараметрыРеквизита.Видимость;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ТолькоПросмотр") Тогда
Элемент.ТолькоПросмотр = ПараметрыРеквизита.ТолькоПросмотр;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("Доступность") Тогда
Элемент.Доступность = ПараметрыРеквизита.Доступность;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ПоместитьПеред") Тогда
Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПараметрыРеквизита.ПоместитьПеред]);
КонецЕсли;
//--- обработчики событий
Если ПараметрыРеквизита.Свойство("ОбработкаСобытий")
И ТипЗнч(ПараметрыРеквизита.ОбработкаСобытий) = Тип("Массив") Тогда
Для каждого ТекСобытие Из ПараметрыРеквизита.ОбработкаСобытий Цикл
Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// Имя - Имя добавляемого реквизита
// ИмяГруппы - Строка - имя элемента родителя
// ПутьКДанным - Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
// ВидПоляФормы - ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
// Видимость - Булево - значение свойства Видимость
// ТолькоПросмотр - Булево - значение свойства ТолькоПросмотр
// Доступность - Булево - значение свойства Доступность
// ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить
// ОбработкаСобытий - Массив структур - содержит:
// * Событие - Строка - имя события элемента
// * Действие - Строка - имя процедуры исполнителя события
// ТипЭлемента - Поле формы или например Таблица формы, по умолчанию тип поле формы
//
Процедура РазместитьРеквизитНаФорме(Форма, Имя, ИмяГруппы = "", ПутьКДанным = "", ПутьКДаннымПодвала = "", ПВидПоляФормы = неопределено, Видимость = Истина,
ТолькоПросмотр = Ложь, Доступность = Истина, ПоместитьПеред = "", ОбработкаСобытий = неопределено, Заголовок = "") Экспорт
//Для каждого ТекРеквизит Из МассивРеквизитов Цикл
УстановитьПривилегированныйРежим(Истина);
Если ЗначениеЗаполнено(ИмяГруппы) Тогда
ЭлементРодитель = Форма.Элементы[ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
Элемент = Форма.Элементы.Добавить(Имя, Тип("ПолеФормы"), ЭлементРодитель);
Если ЗначениеЗаполнено(Заголовок) Тогда
Элемент.Заголовок = Заголовок;
КонецЕсли;
Если ЗначениеЗаполнено(ПутьКДанным) Тогда
Элемент.ПутьКДанным = ПутьКДанным;
Иначе
Элемент.ПутьКДанным = "Объект." + Имя;
КонецЕсли;
Если ЗначениеЗаполнено(ПутьКДаннымПодвала) Тогда
Элемент.ПутьКДаннымПодвала = ПутьКДаннымПодвала;
КонецЕсли;
Если ПВидПоляФормы <> неопределено Тогда
Элемент.Вид = ПВидПоляФормы;
Иначе
Элемент.Вид = ВидПоляФормы.ПолеВвода;
КонецЕсли;
Если ЗначениеЗаполнено(Видимость) Тогда
Элемент.Видимость = Видимость;
КонецЕсли;
Если ЗначениеЗаполнено(ТолькоПросмотр) Тогда
Элемент.ТолькоПросмотр = ТолькоПросмотр;
КонецЕсли;
Если ЗначениеЗаполнено(Доступность) Тогда
Элемент.Доступность = Доступность;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
//--- обработчики событий
Если ОбработкаСобытий <> неопределено
И ТипЗнч(ОбработкаСобытий) = Тип("Массив") Тогда
Для каждого ТекСобытие Из ОбработкаСобытий Цикл
Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);
КонецЦикла;
КонецЕсли;
//КонецЦикла;
КонецПроцедуры
// Устанавливает обработчик события для элемента формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяЭлемента - Строка - имя элемента формы
//
// Событие - Строка - имя события элемента
//
// Действие - Строка - имя процедуры исполнителя события
//
Процедура УстановитьСобытиеЭлементаФормы(Форма, ИмяЭлемента, Событие, Действие) Экспорт
Элемент = Форма.Элементы[ИмяЭлемента];
Элемент.УстановитьДействие(Событие, Действие);
КонецПроцедуры
// Добавляет в дерево элементов формы новую группу
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяГруппы - Строка - имя новой группы
//
// РодительГруппы - Строка - родитель группы. Не обязательно
//
// ВидГруппы - ВидГруппыФормы - вид группы. По умолчанию ОбычнаяГруппа
//
// Группировка - ГруппировкаПодчиненныхЭлементовФормы - вариант группировки. По умолчанию ГоризонтальнаяЕслиВозможно
//
// ОтображатьЗаголовок - Булево - значение свойства ОтображатьЗаголовок группы. По умолчанию Ложь
//
// Заголовок - Строка - заголовок группы. По умолчанию заголовок пустой
//
Процедура ДобавитьГруппуНаФорму(Форма, ИмяГруппы, РодительГруппы = "",
ВидГруппы = Неопределено,
Группировка = Неопределено,
ОтображатьЗаголовок = Ложь,
Заголовок = Неопределено,
Объединенная = Истина,
ПоместитьПеред = "") Экспорт
Если НЕ ПустаяСтрока(РодительГруппы) Тогда
ЭлементРодитель = Форма.Элементы[РодительГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
ГруппаФормы = Форма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), ЭлементРодитель);
ГруппаФормы.Вид = ?(ВидГруппы = Неопределено, ВидГруппыФормы.ОбычнаяГруппа, ВидГруппы);
ГруппаФормы.Группировка = ?(Группировка = Неопределено,
ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно,
Группировка);
ГруппаФормы.ОтображатьЗаголовок = ОтображатьЗаголовок;
ГруппаФормы.Заголовок = Заголовок;
Если ВидГруппы = ВидГруппыФормы.ОбычнаяГруппа Тогда
ГруппаФормы.Объединенная = Объединенная;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(ГруппаФормы, Форма.Элементы[РодительГруппы], Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
КонецПроцедуры
// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// Имя - Имя добавляемого реквизита
// ИмяГруппы - Строка - имя элемента родителя
// ПутьКДанным - Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
// ВидПоляФормы - ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
// Видимость - Булево - значение свойства Видимость
// ТолькоПросмотр - Булево - значение свойства ТолькоПросмотр
// Доступность - Булево - значение свойства Доступность
// ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить
// ОбработкаСобытий - Массив структур - содержит:
// * Событие - Строка - имя события элемента
// * Действие - Строка - имя процедуры исполнителя события
// ТипЭлемента - Поле формы или например Таблица формы, по умолчанию тип поле формы
//
Процедура РазместитьТаблицуНаФорме(Форма, Имя, ИмяГруппы = "", ПутьКДанным = "", Видимость = Истина, ТолькоПросмотр = Ложь,
Доступность = Истина, ПоместитьПеред = "", ОбработкаСобытий = неопределено, Подвал = Ложь) Экспорт
Если ЗначениеЗаполнено(ИмяГруппы) Тогда
ЭлементРодитель = Форма.Элементы[ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
Элемент = Форма.Элементы.Добавить(Имя, Тип("ТаблицаФормы"), ЭлементРодитель);
Если ЗначениеЗаполнено(ПутьКДанным) Тогда
Элемент.ПутьКДанным = ПутьКДанным;
Иначе
Элемент.ПутьКДанным = "Объект." + Имя;
КонецЕсли;
Если ЗначениеЗаполнено(Видимость) Тогда
Элемент.Видимость = Видимость;
КонецЕсли;
Если ЗначениеЗаполнено(ТолькоПросмотр) Тогда
Элемент.ТолькоПросмотр = ТолькоПросмотр;
КонецЕсли;
Если ЗначениеЗаполнено(Доступность) Тогда
Элемент.Доступность = Доступность;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
Элемент.Подвал = Подвал;
//--- обработчики событий
Если ОбработкаСобытий <> неопределено
И ТипЗнч(ОбработкаСобытий) = Тип("Массив") Тогда
Для каждого ТекСобытие Из ОбработкаСобытий Цикл
Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);
КонецЦикла;
КонецЕсли;
//КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СозданиеДинамическогоСписка(
Форма, //Тип форма - Форма документа
ИмяСписка = "Список", //тип строка - имя будущего списка на форме и реквизита
ТекстЗапроса = "", //тип строка - запрос, если он не указан, необходимо указать таблицу
МассивКолонок, //тип массив - массив создаваемых колонок, значения тип строка. Пример: "Д,ДоговораКонтрагента" значит будет создана колонка
// с заголовком "Д" и колонкой списка "ДоговораКонтрагента". Если указать просто "ДоговораКонтрагента",
// заголовок будет идентичен заголовку по умолчанию типа "Договор контрагента".
СписокДействий = Неопределено, //типа структура - структура содержит действия (свойства) динамического списка, можно указать только те которые необходимы.
// пример: СписокДействий = Новый Структура("Выбор,ПриАктивизацииСтроки","СписокВыбор","СписокПриАктивизацииСтроки")
ТаблицаСписка = "", //тип строка - содержит имя основной таблицы, пример: "Документ.РеализацияТоваровУслуг"
ДобавитьВ = "", //тип строка - имя элемента на который будет размещен список, если пустое, тогда добавляется на форму
ВставитьПеред = "", //тип строка - имя элемента перед которым будет размещен список, если пустое, будет просто добавлен в конец
СвояКоманднаяПанель = ЛОЖЬ, //тип булево - если ИСТИНА, скрывает стандартную панель и создает свою пустую для будущего наполнения ИмяСписка+"КоманднаяПанель2"
ПараметрыЗапроса = Неопределено) Экспорт //тип структура - содержит перечень параметров, если они используются в запросе.
//Защита от дурака
Если ТекстЗапроса = "" И ТаблицаСписка = "" Тогда Сообщить("Ошибка формирования динамического списка, укажите запрос или таблицу"); Возврат; КонецЕсли;
Элементы = Форма.Элементы;
//Создаем свою командную панель, тот случай когда я не нашел способа снять галочку "Автозаполнение"
Если СвояКоманднаяПанель Тогда
Если ВставитьПеред = "" Тогда
ГруппаДинамическогоСписка = Элементы.Добавить("Группа" + ИмяСписка + "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",Форма,Форма.Элементы[ДобавитьВ]));
Иначе
ГруппаДинамическогоСписка = Элементы.Вставить("Группа" + ИмяСписка + "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",Форма,Форма.Элементы[ДобавитьВ]),Форма.Элементы[ВставитьПеред]);
КонецЕсли;
ГруппаДинамическогоСписка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДинамическогоСписка.ОтображатьЗаголовок = Ложь;
ГруппаДинамическогоСписка.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДинамическогоСписка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
КоманднаяПанельСписка = Элементы.Добавить(ИмяСписка + "КоманднаяПанель2",Тип("ГруппаФормы"),ГруппаДинамическогоСписка);
КоманднаяПанельСписка.Вид = ВидГруппыФормы.КоманднаяПанель;
КонецЕсли;
//Создаем реквизит формы
ТипыРеквизита = Новый Массив;
ТипыРеквизита.Добавить(Тип("ДинамическийСписок"));
ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита);
ДинамическийСписок = Новый РеквизитФормы(ИмяСписка, ОписаниеТиповДляРеквизита,,"",ЛОЖЬ); //Имя реквизита
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(ДинамическийСписок);
//Задаем свойства реквизиту
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
РеквизитДинамическийСписок = Форма[ИмяСписка]; //Имя реквизита
Если ТекстЗапроса = "" Тогда
РеквизитДинамическийСписок.ПроизвольныйЗапрос = ЛОЖЬ;
РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка;
Иначе
РеквизитДинамическийСписок.ПроизвольныйЗапрос = ИСТИНА;
РеквизитДинамическийСписок.ТекстЗапроса = ТекстЗапроса;
Если ТаблицаСписка <> "" Тогда РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка; КонецЕсли;
КонецЕсли;
//Заполняем параметры если они были указаны
Если ПараметрыЗапроса <> Неопределено Тогда
Для Каждого Параметра из ПараметрыЗапроса Цикл
РеквизитДинамическийСписок.Параметры.УстановитьЗначениеПараметра(Параметра.Ключ,Параметра.Значение);
КонецЦикла;
КонецЕсли;
//Размещаем реквизит на форме
Если ЛОЖЬ
ИЛИ ВставитьПеред = ""
ИЛИ СвояКоманднаяПанель //Если своя командная панель тогда нет логики уже в параметре ВставитьПеред
Тогда
ТаблицаФормы = Элементы.Добавить(ИмяСписка,Тип("ТаблицаФормы"),?(СвояКоманднаяПанель,ГруппаДинамическогоСписка,?(ДобавитьВ = "",Форма,Форма.Элементы[ДобавитьВ])));
Иначе
ТаблицаФормы = Элементы.Вставить(ИмяСписка,Тип("ТаблицаФормы"),?(ДобавитьВ = "",Форма,Форма.Элементы[ДобавитьВ]),Форма.Элементы[ВставитьПеред]);
КонецЕсли;
ТаблицаФормы.ПутьКДанным = ИмяСписка; //Имя реквизита
//Если своя панель тогда скрываем стандартную
Если СвояКоманднаяПанель Тогда
Элементы[ИмяСписка].ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
КонецЕсли;
//Создание колонок на основание МассивКолонок
Для Каждого Элемента Из МассивКолонок Цикл
ПараметрыКолонки = СтрЗаменить(Элемента,",",Символы.ПС);
Если СтрЧислоСтрок(ПараметрыКолонки) > 1 Тогда
Заголовок = СтрПолучитьСтроку(ПараметрыКолонки, 1);
ИмяКолонки = СтрПолучитьСтроку(ПараметрыКолонки, 2);
Иначе
Заголовок = "";
ИмяКолонки = ПараметрыКолонки;
КонецЕсли;
НоваяКолонкаТаблицы = Элементы.Добавить(ИмяСписка + ИмяКолонки, Тип("ПолеФормы"), ТаблицаФормы);
Если Заголовок <> "" Тогда НоваяКолонкаТаблицы.Заголовок = Заголовок; КонецЕсли;
НоваяКолонкаТаблицы.ПутьКДанным = ИмяСписка + "." + ИмяКолонки;
КонецЦикла;
//Задаем действия (События) на основание СписокДействий, если он определен
Если СписокДействий <> Неопределено Тогда
ПереченьСвойств = "ПриИзменении
|Выбор
|ПриАктивизацииСтроки
|ВыборЗначения
|ПриАктивизацииПоля
|ПриАктивизацииЯчейки
|ПередНачаломДобавления
|ПередНачаломИзменения
|ПередУдалением
|ПриНачалеРедактирования
|ПередОкончаниемРедактирования
|ПриОкончанииРедактирования
|ОбработкаВыбора
|ПередРазворачиванием
|ПередСворачиванием
|ПослеУдаления
|ПриСменеТекущегоРодителя
|ОбработкаЗаписиНового
|ПриСохраненииПользовательскихНастроекНаСервере
|ПередЗагрузкойПользовательскихНастроекНаСервере
|ПриЗагрузкеПользовательскихНастроекНаСервере
|ПриОбновленииСоставаПользовательскихНастроекНаСервере
|ОбработкаЗапросаОбновления
|ПриПолученииДанныхНаСервере
|НачалоПеретаскивания
|ПроверкаПеретаскивания
|ОкончаниеПеретаскивания
|Перетаскивание";
Для Счетчик = 1 по 28 Цикл
ИмяСвойства = СтрПолучитьСтроку(ПереченьСвойств, Счетчик);
Элементы[ИмяСписка].УстановитьДействие(ИмяСвойства,?(СписокДействий.Свойство(ИмяСвойства),СписокДействий[ИмяСвойства],""));
КонецЦикла;
КонецЕсли;
КонецПроцедуры
// Изменяет свойства элементов формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяЭлемента - Строка - имя элемента формы
//
// ИмяСвойства - Строка - имя свойства элемента
//
// ЗначениеСвойства - Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойствоЭлементаФормы(Форма, ИмяЭлемента, ИмяСвойства, ЗначениеСвойства) Экспорт
Элемент = Форма.Элементы[ИмяЭлемента];
Элемент[ИмяСвойства] = ЗначениеСвойства;
КонецПроцедуры
// Добавляет новую команду формы. Дополнительно можно сразу разместить кнопку на форме
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяКоманды - Строка - имя новой команды формы
//
// ДействиеКоманды - Строка - имя обработчика для команды
//
// ИмяГруппы - Строка - имя родительского элемента, если необходимо разместить команду на форме
// - Неопределено - если нужно только создать новую команду
// По умолчанию команда размещается в корне формы
//
// ВидКнопки - ВидКнопкиФормы - вид кнопки формы. По умолчанию ОбычнаяКнопка или КнопкаКоманднойПанели,
// зависит от родителя
//
// Заголовок - Строка - заголовок кнопки формы. Не обязательный
//
// ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить кнопку формы. Не обязательный
//
// Картинка - Картинка - картинка кнопки формы. Не обязательный
//
// ОтображениеКнопки - ОтображениеКнопки - вариант отражение кнопки на форме. Учитывается только если
// заполнен параметр Картинка. Не обязательный
//
Процедура ДобавитьРазместитьКомандуФормы(Форма, ИмяКоманды, ДействиеКоманды, ИмяГруппы = "", ВидКнопки = Неопределено,
Заголовок = "", ПоместитьПеред = "",
Картинка = Неопределено, ОтображениеКнопки = Неопределено,
Доступность = Истина) Экспорт
Команда = Форма.Команды.Добавить(ИмяКоманды);
Команда.Действие = ДействиеКоманды;
Если ЗначениеЗаполнено(Заголовок) Тогда
Команда.Заголовок = Заголовок;
КонецЕсли;
Если Картинка <> Неопределено Тогда
Команда.Картинка = Картинка;
Если ОтображениеКнопки <> Неопределено Тогда
Команда.Отображение = ОтображениеКнопки;
КонецЕсли;
КонецЕсли;
Если ИмяГруппы = Неопределено Тогда
Возврат;
ИначеЕсли ЗначениеЗаполнено(ИмяГруппы) Тогда
ЭлементРодитель = Форма.Элементы[ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
КнопкаФормы = Форма.Элементы.Добавить(ИмяКоманды, Тип("КнопкаФормы"), ЭлементРодитель);
КнопкаФормы.ИмяКоманды = ИмяКоманды;
КнопкаФормы.Доступность = Доступность;
Если ВидКнопки <> Неопределено Тогда
КнопкаФормы.Вид = ВидКнопки;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(КнопкаФормы, ЭлементРодитель, Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
КонецПроцедуры
// Добавляет новый реквизит формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяРеквизита - Строка - имя нового реквизита формы
//
// ТипРеквизита - ОписаниеТипов - тип реквизита. По умолчанию строка
//
// ЗаголовокРеквизита - Строка - отображаемый текст реквизита. Не обязательный
//
// Путь - Строка - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
//
// СохраняемыеДанные - Булево - если реквизит содержит сохраняемые данные. По умолчанию Ложь
//
// РодительЭлемента - Строка - имя родителя элемента формы,
// если дополнительно необходимо разместить на форме. Не обязательный
//
// ИмяЭлемента - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
// По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитФормы(Форма, ИмяРеквизита, ТипРеквизита, ЗаголовокРеквизита = "", Путь = "",
СохраняемыеДанные = Ложь, РодительЭлемента = "", ИмяЭлемента = "") Экспорт
СтруктураРеквизита = Новый Структура;
СтруктураРеквизита.Вставить("ИмяРеквизита", ИмяРеквизита);
Если ЗначениеЗаполнено(ТипРеквизита) Тогда
СтруктураРеквизита.Вставить("ТипРеквизита", ТипРеквизита);
КонецЕсли;
Если ЗначениеЗаполнено(ЗаголовокРеквизита) Тогда
СтруктураРеквизита.Вставить("ЗаголовокРеквизита", ЗаголовокРеквизита);
КонецЕсли;
Если ЗначениеЗаполнено(Путь) Тогда
СтруктураРеквизита.Вставить("Путь", Путь);
КонецЕсли;
Если ЗначениеЗаполнено(СохраняемыеДанные) Тогда
СтруктураРеквизита.Вставить("СохраняемыеДанные", СохраняемыеДанные);
КонецЕсли;
Если ЗначениеЗаполнено(РодительЭлемента) Тогда
СтруктураРеквизита.Вставить("РодительЭлемента", РодительЭлемента);
КонецЕсли;
Если ЗначениеЗаполнено(ИмяЭлемента) Тогда
СтруктураРеквизита.Вставить("ИмяЭлемента", ИмяЭлемента);
КонецЕсли;
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(СтруктураРеквизита);
ДобавитьРеквизитыФормы(Форма, МассивРеквизитов);
КонецПроцедуры
// Добавляет новые реквизиты формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// МассивРеквизитов - Массив структур - содержит:
// *ИмяРеквизита - Строка - имя нового реквизита формы
// *ТипРеквизита - ОписаниеТипов - тип реквизита. По умолчанию строка неограниченной длины
// *ЗаголовокРеквизита - Строка - отображаемый текст реквизита. Не обязательный
// *Путь - Строка - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
// *СохраняемыеДанные - Булево - если реквизит содержит сохраняемые данные. По умолчанию Ложь
// *РодительЭлемента - Строка - имя родителя элемента формы,
// *ИмяЭлемента - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
// По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитыФормы(Форма, МассивРеквизитов) Экспорт
ДобавляемыеРеквизиты = Новый Массив;
РеквизитыДляРазмещения = Новый Массив;
Для каждого ОписаниеРеквизита Из МассивРеквизитов Цикл
ИмяРеквизита = ОписаниеРеквизита.ИмяРеквизита;
Если ОписаниеРеквизита.Свойство("ТипРеквизита") Тогда
ТипРеквизита = ОписаниеРеквизита.ТипРеквизита;
Иначе
ТипРеквизита = Новый ОписаниеТипов("Строка");
КонецЕсли;
ЗаголовокРеквизита = "";
Если ОписаниеРеквизита.Свойство("ЗаголовокРеквизита") Тогда
ЗаголовокРеквизита = ОписаниеРеквизита.ЗаголовокРеквизита;
КонецЕсли;
Путь = "";
Если ОписаниеРеквизита.Свойство("Путь") Тогда
Путь = ОписаниеРеквизита.Путь;
КонецЕсли;
СохраняемыеДанные = Ложь;
Если ОписаниеРеквизита.Свойство("СохраняемыеДанные") Тогда
СохраняемыеДанные = ОписаниеРеквизита.СохраняемыеДанные;
КонецЕсли;
РеквизитФормы = Новый РеквизитФормы(ИмяРеквизита, ТипРеквизита, Путь, ЗаголовокРеквизита, СохраняемыеДанные);
ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
//+ Дополнительное размещение реквизитов на форме
Если ОписаниеРеквизита.Свойство("РодительЭлемента") Тогда
СтруктураЭлемента = Новый Структура;
СтруктураЭлемента.Вставить("ИмяГруппы", ОписаниеРеквизита.РодительЭлемента);
Если ОписаниеРеквизита.Свойство("Путь") Тогда
Шаблон = "%1.%2";
ПутьКДанным = СтрШаблон(Шаблон, ОписаниеРеквизита.Путь, ИмяРеквизита);
Иначе
ПутьКДанным = ИмяРеквизита;
КонецЕсли;
СтруктураЭлемента.Вставить("ПутьКДанным", ПутьКДанным);
ИмяЭлемента = ИмяРеквизита;
Если ОписаниеРеквизита.Свойство("ИмяЭлемента") Тогда
ИмяЭлемента = ОписаниеРеквизита.ИмяЭлемента;
КонецЕсли;
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить(ИмяЭлемента, СтруктураЭлемента);
РеквизитыДляРазмещения.Добавить(СтруктураРеквизитов);
КонецЕсли;
//- Дополнительное размещение реквизитов на форме
КонецЦикла;
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
РазместитьРеквизитыНаФорме(Форма, РеквизитыДляРазмещения);
КонецПроцедуры
// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// МассивРеквизитов - Массив структур - содержит:
// * Имя - Имя добавляемого реквизита
// * Значение - Структура - содержит (все свойства не обязательные):
// ** ИмяГруппы - Строка - имя элемента родителя
// ** ПутьКДанным - Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
// ** ВидПоляФормы - ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
// ** Видимость - Булево - значение свойства Видимость
// ** ТолькоПросмотр - Булево - значение свойства ТолькоПросмотр
// ** Доступность - Булево - значение свойства Доступность
// ** ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить
// ** ОбработкаСобытий - Массив структур - содержит:
// *** Событие - Строка - имя события элемента
// *** Действие - Строка - имя процедуры исполнителя события
//
Процедура РазместитьРеквизитыНаФорме(Форма, МассивРеквизитов) Экспорт
Для каждого ТекРеквизит Из МассивРеквизитов Цикл
ИмяРеквизита = ТекРеквизит.Имя;
ПараметрыРеквизита = ТекРеквизит.Значение;
Если ПараметрыРеквизита.Свойство("ИмяГруппы") Тогда
ЭлементРодитель = Форма.Элементы[ПараметрыРеквизита.ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), ЭлементРодитель);
Если ПараметрыРеквизита.Свойство("ПутьКДанным") Тогда
Элемент.ПутьКДанным = ПараметрыРеквизита.ПутьКДанным;
Иначе
Элемент.ПутьКДанным = "Объект." + ИмяРеквизита;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ВидПоляФормы") Тогда
Элемент.Вид = ПараметрыРеквизита.ВидПоляФормы;
Иначе
Элемент.Вид = ВидПоляФормы.ПолеВвода;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("Видимость") Тогда
Элемент.Видимость = ПараметрыРеквизита.Видимость;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ТолькоПросмотр") Тогда
Элемент.ТолькоПросмотр = ПараметрыРеквизита.ТолькоПросмотр;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("Доступность") Тогда
Элемент.Доступность = ПараметрыРеквизита.Доступность;
КонецЕсли;
Если ПараметрыРеквизита.Свойство("ПоместитьПеред") Тогда
Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПараметрыРеквизита.ПоместитьПеред]);
КонецЕсли;
//--- обработчики событий
Если ПараметрыРеквизита.Свойство("ОбработкаСобытий")
И ТипЗнч(ПараметрыРеквизита.ОбработкаСобытий) = Тип("Массив") Тогда
Для каждого ТекСобытие Из ПараметрыРеквизита.ОбработкаСобытий Цикл
Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// Имя - Имя добавляемого реквизита
// ИмяГруппы - Строка - имя элемента родителя
// ПутьКДанным - Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
// ВидПоляФормы - ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
// Видимость - Булево - значение свойства Видимость
// ТолькоПросмотр - Булево - значение свойства ТолькоПросмотр
// Доступность - Булево - значение свойства Доступность
// ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить
// ОбработкаСобытий - Массив структур - содержит:
// * Событие - Строка - имя события элемента
// * Действие - Строка - имя процедуры исполнителя события
// ТипЭлемента - Поле формы или например Таблица формы, по умолчанию тип поле формы
//
Процедура РазместитьРеквизитНаФорме(Форма, Имя, ИмяГруппы = "", ПутьКДанным = "", ПутьКДаннымПодвала = "", ПВидПоляФормы = неопределено, Видимость = Истина,
ТолькоПросмотр = Ложь, Доступность = Истина, ПоместитьПеред = "", ОбработкаСобытий = неопределено, Заголовок = "") Экспорт
//Для каждого ТекРеквизит Из МассивРеквизитов Цикл
УстановитьПривилегированныйРежим(Истина);
Если ЗначениеЗаполнено(ИмяГруппы) Тогда
ЭлементРодитель = Форма.Элементы[ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
Элемент = Форма.Элементы.Добавить(Имя, Тип("ПолеФормы"), ЭлементРодитель);
Если ЗначениеЗаполнено(Заголовок) Тогда
Элемент.Заголовок = Заголовок;
КонецЕсли;
Если ЗначениеЗаполнено(ПутьКДанным) Тогда
Элемент.ПутьКДанным = ПутьКДанным;
Иначе
Элемент.ПутьКДанным = "Объект." + Имя;
КонецЕсли;
Если ЗначениеЗаполнено(ПутьКДаннымПодвала) Тогда
Элемент.ПутьКДаннымПодвала = ПутьКДаннымПодвала;
КонецЕсли;
Если ПВидПоляФормы <> неопределено Тогда
Элемент.Вид = ПВидПоляФормы;
Иначе
Элемент.Вид = ВидПоляФормы.ПолеВвода;
КонецЕсли;
Если ЗначениеЗаполнено(Видимость) Тогда
Элемент.Видимость = Видимость;
КонецЕсли;
Если ЗначениеЗаполнено(ТолькоПросмотр) Тогда
Элемент.ТолькоПросмотр = ТолькоПросмотр;
КонецЕсли;
Если ЗначениеЗаполнено(Доступность) Тогда
Элемент.Доступность = Доступность;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
//--- обработчики событий
Если ОбработкаСобытий <> неопределено
И ТипЗнч(ОбработкаСобытий) = Тип("Массив") Тогда
Для каждого ТекСобытие Из ОбработкаСобытий Цикл
Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);
КонецЦикла;
КонецЕсли;
//КонецЦикла;
КонецПроцедуры
// Устанавливает обработчик события для элемента формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяЭлемента - Строка - имя элемента формы
//
// Событие - Строка - имя события элемента
//
// Действие - Строка - имя процедуры исполнителя события
//
Процедура УстановитьСобытиеЭлементаФормы(Форма, ИмяЭлемента, Событие, Действие) Экспорт
Элемент = Форма.Элементы[ИмяЭлемента];
Элемент.УстановитьДействие(Событие, Действие);
КонецПроцедуры
// Добавляет в дерево элементов формы новую группу
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяГруппы - Строка - имя новой группы
//
// РодительГруппы - Строка - родитель группы. Не обязательно
//
// ВидГруппы - ВидГруппыФормы - вид группы. По умолчанию ОбычнаяГруппа
//
// Группировка - ГруппировкаПодчиненныхЭлементовФормы - вариант группировки. По умолчанию ГоризонтальнаяЕслиВозможно
//
// ОтображатьЗаголовок - Булево - значение свойства ОтображатьЗаголовок группы. По умолчанию Ложь
//
// Заголовок - Строка - заголовок группы. По умолчанию заголовок пустой
//
Процедура ДобавитьГруппуНаФорму(Форма, ИмяГруппы, РодительГруппы = "",
ВидГруппы = Неопределено,
Группировка = Неопределено,
ОтображатьЗаголовок = Ложь,
Заголовок = Неопределено,
Объединенная = Истина,
ПоместитьПеред = "") Экспорт
Если НЕ ПустаяСтрока(РодительГруппы) Тогда
ЭлементРодитель = Форма.Элементы[РодительГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
ГруппаФормы = Форма.Элементы.Добавить(ИмяГруппы, Тип("ГруппаФормы"), ЭлементРодитель);
ГруппаФормы.Вид = ?(ВидГруппы = Неопределено, ВидГруппыФормы.ОбычнаяГруппа, ВидГруппы);
ГруппаФормы.Группировка = ?(Группировка = Неопределено,
ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно,
Группировка);
ГруппаФормы.ОтображатьЗаголовок = ОтображатьЗаголовок;
ГруппаФормы.Заголовок = Заголовок;
Если ВидГруппы = ВидГруппыФормы.ОбычнаяГруппа Тогда
ГруппаФормы.Объединенная = Объединенная;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(ГруппаФормы, Форма.Элементы[РодительГруппы], Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
КонецПроцедуры
// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// Имя - Имя добавляемого реквизита
// ИмяГруппы - Строка - имя элемента родителя
// ПутьКДанным - Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
// ВидПоляФормы - ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
// Видимость - Булево - значение свойства Видимость
// ТолькоПросмотр - Булево - значение свойства ТолькоПросмотр
// Доступность - Булево - значение свойства Доступность
// ПоместитьПеред - Строка - имя элемента, перед которым необходимо разместить
// ОбработкаСобытий - Массив структур - содержит:
// * Событие - Строка - имя события элемента
// * Действие - Строка - имя процедуры исполнителя события
// ТипЭлемента - Поле формы или например Таблица формы, по умолчанию тип поле формы
//
Процедура РазместитьТаблицуНаФорме(Форма, Имя, ИмяГруппы = "", ПутьКДанным = "", Видимость = Истина, ТолькоПросмотр = Ложь,
Доступность = Истина, ПоместитьПеред = "", ОбработкаСобытий = неопределено, Подвал = Ложь) Экспорт
Если ЗначениеЗаполнено(ИмяГруппы) Тогда
ЭлементРодитель = Форма.Элементы[ИмяГруппы];
Иначе
ЭлементРодитель = Форма;
КонецЕсли;
Элемент = Форма.Элементы.Добавить(Имя, Тип("ТаблицаФормы"), ЭлементРодитель);
Если ЗначениеЗаполнено(ПутьКДанным) Тогда
Элемент.ПутьКДанным = ПутьКДанным;
Иначе
Элемент.ПутьКДанным = "Объект." + Имя;
КонецЕсли;
Если ЗначениеЗаполнено(Видимость) Тогда
Элемент.Видимость = Видимость;
КонецЕсли;
Если ЗначениеЗаполнено(ТолькоПросмотр) Тогда
Элемент.ТолькоПросмотр = ТолькоПросмотр;
КонецЕсли;
Если ЗначениеЗаполнено(Доступность) Тогда
Элемент.Доступность = Доступность;
КонецЕсли;
Если ЗначениеЗаполнено(ПоместитьПеред) Тогда
Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПоместитьПеред]);
КонецЕсли;
Элемент.Подвал = Подвал;
//--- обработчики событий
Если ОбработкаСобытий <> неопределено
И ТипЗнч(ОбработкаСобытий) = Тип("Массив") Тогда
Для каждого ТекСобытие Из ОбработкаСобытий Цикл
Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);
КонецЦикла;
КонецЕсли;
//КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СозданиеДинамическогоСписка(
Форма, //Тип форма - Форма документа
ИмяСписка = "Список", //тип строка - имя будущего списка на форме и реквизита
ТекстЗапроса = "", //тип строка - запрос, если он не указан, необходимо указать таблицу
МассивКолонок, //тип массив - массив создаваемых колонок, значения тип строка. Пример: "Д,ДоговораКонтрагента" значит будет создана колонка
// с заголовком "Д" и колонкой списка "ДоговораКонтрагента". Если указать просто "ДоговораКонтрагента",
// заголовок будет идентичен заголовку по умолчанию типа "Договор контрагента".
СписокДействий = Неопределено, //типа структура - структура содержит действия (свойства) динамического списка, можно указать только те которые необходимы.
// пример: СписокДействий = Новый Структура("Выбор,ПриАктивизацииСтроки","СписокВыбор","СписокПриАктивизацииСтроки")
ТаблицаСписка = "", //тип строка - содержит имя основной таблицы, пример: "Документ.РеализацияТоваровУслуг"
ДобавитьВ = "", //тип строка - имя элемента на который будет размещен список, если пустое, тогда добавляется на форму
ВставитьПеред = "", //тип строка - имя элемента перед которым будет размещен список, если пустое, будет просто добавлен в конец
СвояКоманднаяПанель = ЛОЖЬ, //тип булево - если ИСТИНА, скрывает стандартную панель и создает свою пустую для будущего наполнения ИмяСписка+"КоманднаяПанель2"
ПараметрыЗапроса = Неопределено) Экспорт //тип структура - содержит перечень параметров, если они используются в запросе.
//Защита от дурака
Если ТекстЗапроса = "" И ТаблицаСписка = "" Тогда Сообщить("Ошибка формирования динамического списка, укажите запрос или таблицу"); Возврат; КонецЕсли;
Элементы = Форма.Элементы;
//Создаем свою командную панель, тот случай когда я не нашел способа снять галочку "Автозаполнение"
Если СвояКоманднаяПанель Тогда
Если ВставитьПеред = "" Тогда
ГруппаДинамическогоСписка = Элементы.Добавить("Группа" + ИмяСписка + "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",Форма,Форма.Элементы[ДобавитьВ]));
Иначе
ГруппаДинамическогоСписка = Элементы.Вставить("Группа" + ИмяСписка + "CоСвоейКоманднойПанелью",Тип("ГруппаФормы"),?(ДобавитьВ = "",Форма,Форма.Элементы[ДобавитьВ]),Форма.Элементы[ВставитьПеред]);
КонецЕсли;
ГруппаДинамическогоСписка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДинамическогоСписка.ОтображатьЗаголовок = Ложь;
ГруппаДинамическогоСписка.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДинамическогоСписка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
КоманднаяПанельСписка = Элементы.Добавить(ИмяСписка + "КоманднаяПанель2",Тип("ГруппаФормы"),ГруппаДинамическогоСписка);
КоманднаяПанельСписка.Вид = ВидГруппыФормы.КоманднаяПанель;
КонецЕсли;
//Создаем реквизит формы
ТипыРеквизита = Новый Массив;
ТипыРеквизита.Добавить(Тип("ДинамическийСписок"));
ОписаниеТиповДляРеквизита = Новый ОписаниеТипов(ТипыРеквизита);
ДинамическийСписок = Новый РеквизитФормы(ИмяСписка, ОписаниеТиповДляРеквизита,,"",ЛОЖЬ); //Имя реквизита
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(ДинамическийСписок);
//Задаем свойства реквизиту
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
РеквизитДинамическийСписок = Форма[ИмяСписка]; //Имя реквизита
Если ТекстЗапроса = "" Тогда
РеквизитДинамическийСписок.ПроизвольныйЗапрос = ЛОЖЬ;
РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка;
Иначе
РеквизитДинамическийСписок.ПроизвольныйЗапрос = ИСТИНА;
РеквизитДинамическийСписок.ТекстЗапроса = ТекстЗапроса;
Если ТаблицаСписка <> "" Тогда РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка; КонецЕсли;
КонецЕсли;
//Заполняем параметры если они были указаны
Если ПараметрыЗапроса <> Неопределено Тогда
Для Каждого Параметра из ПараметрыЗапроса Цикл
РеквизитДинамическийСписок.Параметры.УстановитьЗначениеПараметра(Параметра.Ключ,Параметра.Значение);
КонецЦикла;
КонецЕсли;
//Размещаем реквизит на форме
Если ЛОЖЬ
ИЛИ ВставитьПеред = ""
ИЛИ СвояКоманднаяПанель //Если своя командная панель тогда нет логики уже в параметре ВставитьПеред
Тогда
ТаблицаФормы = Элементы.Добавить(ИмяСписка,Тип("ТаблицаФормы"),?(СвояКоманднаяПанель,ГруппаДинамическогоСписка,?(ДобавитьВ = "",Форма,Форма.Элементы[ДобавитьВ])));
Иначе
ТаблицаФормы = Элементы.Вставить(ИмяСписка,Тип("ТаблицаФормы"),?(ДобавитьВ = "",Форма,Форма.Элементы[ДобавитьВ]),Форма.Элементы[ВставитьПеред]);
КонецЕсли;
ТаблицаФормы.ПутьКДанным = ИмяСписка; //Имя реквизита
//Если своя панель тогда скрываем стандартную
Если СвояКоманднаяПанель Тогда
Элементы[ИмяСписка].ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
КонецЕсли;
//Создание колонок на основание МассивКолонок
Для Каждого Элемента Из МассивКолонок Цикл
ПараметрыКолонки = СтрЗаменить(Элемента,",",Символы.ПС);
Если СтрЧислоСтрок(ПараметрыКолонки) > 1 Тогда
Заголовок = СтрПолучитьСтроку(ПараметрыКолонки, 1);
ИмяКолонки = СтрПолучитьСтроку(ПараметрыКолонки, 2);
Иначе
Заголовок = "";
ИмяКолонки = ПараметрыКолонки;
КонецЕсли;
НоваяКолонкаТаблицы = Элементы.Добавить(ИмяСписка + ИмяКолонки, Тип("ПолеФормы"), ТаблицаФормы);
Если Заголовок <> "" Тогда НоваяКолонкаТаблицы.Заголовок = Заголовок; КонецЕсли;
НоваяКолонкаТаблицы.ПутьКДанным = ИмяСписка + "." + ИмяКолонки;
КонецЦикла;
//Задаем действия (События) на основание СписокДействий, если он определен
Если СписокДействий <> Неопределено Тогда
ПереченьСвойств = "ПриИзменении
|Выбор
|ПриАктивизацииСтроки
|ВыборЗначения
|ПриАктивизацииПоля
|ПриАктивизацииЯчейки
|ПередНачаломДобавления
|ПередНачаломИзменения
|ПередУдалением
|ПриНачалеРедактирования
|ПередОкончаниемРедактирования
|ПриОкончанииРедактирования
|ОбработкаВыбора
|ПередРазворачиванием
|ПередСворачиванием
|ПослеУдаления
|ПриСменеТекущегоРодителя
|ОбработкаЗаписиНового
|ПриСохраненииПользовательскихНастроекНаСервере
|ПередЗагрузкойПользовательскихНастроекНаСервере
|ПриЗагрузкеПользовательскихНастроекНаСервере
|ПриОбновленииСоставаПользовательскихНастроекНаСервере
|ОбработкаЗапросаОбновления
|ПриПолученииДанныхНаСервере
|НачалоПеретаскивания
|ПроверкаПеретаскивания
|ОкончаниеПеретаскивания
|Перетаскивание";
Для Счетчик = 1 по 28 Цикл
ИмяСвойства = СтрПолучитьСтроку(ПереченьСвойств, Счетчик);
Элементы[ИмяСписка].УстановитьДействие(ИмяСвойства,?(СписокДействий.Свойство(ИмяСвойства),СписокДействий[ИмяСвойства],""));
КонецЦикла;
КонецЕсли;
КонецПроцедуры
// Изменяет свойства элементов формы
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - изменяемая форма
//
// ИмяЭлемента - Строка - имя элемента формы
//
// ИмяСвойства - Строка - имя свойства элемента
//
// ЗначениеСвойства - Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойствоЭлементаФормы(Форма, ИмяЭлемента, ИмяСвойства, ЗначениеСвойства) Экспорт
Элемент = Форма.Элементы[ИмяЭлемента];
Элемент[ИмяСвойства] = ЗначениеСвойства;
КонецПроцедуры