From 684daa47a48a459a4ff1bf60d4618c6ebadbb49a Mon Sep 17 00:00:00 2001 From: wakadakawaka Date: Wed, 16 Apr 2025 18:37:21 +0500 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../БСП и типовые/ERP/Валюта регламентированного учета.md | 16 + .../БСП и типовые/ERP/Разбить строку ТЧ.md | 40 + .../БСП и типовые/ЗУП/Плановые начисления на дату.md | 39 + .../Документы/Префиксация при установке нового номера.md | 7 + .../Механизмы печати/Вывод табдок в общую форму печати.md | 22 + .../Обсуждения/Отправка сообщений в чат (обсуждения).md | 19 + .../БСП и типовые/Пользователи}/Обращение к пользователю.md | 0 .../Работа с почтой/Адрес электронной почты пользователя.md | 25 + .../Работа с почтой/Отправить письмо на почту.md | 30 + .../БСП и типовые/Штрихкоды/Пример генерации QR-кода.md | 13 + .../БСП и типовые/Штрихкоды/Пример генерации штрихкодов.md | 55 + .../{ => Общее}/HTML-документы/Виджеты.md | 0 .../Обработка создания задач из бизнес-процесса.md | 0 .../Пример создания простого бизнес-процесса.md | 0 .../Добавление польз. отборов в динамический список.md | 6 + .../Динамические списки/Обход всех строк динамического списка.md | 0 .../Динамические списки/Обход выделенных строк динамического списка.md | 0 .../Установить период динамического списка программно.md | 7 + .../{ => Общее}/Запросы/Схема запроса.md | 0 .../Обмен данными/Directum/Статусы соединениия с directum.md | 0 .../{ => Общее}/Обмен данными/Directum/Строка соединения.md | 0 .../Модуль менеджера/ОбработкаПолученияДанныхВыбора | 106 ++ .../Общее/Прочее}/Логирование в массив строк .md | 0 .../Общее/Прочее/Настройка EDT после установки.md | 9 + .../Прочее/Разрешенное имя переменной из любой строки.md} | 6 +- .../Общее/Прочее}/Уникальный ключ набора данных.md | 0 .../Общее/Работа с файлами/Проверка файла на блокировку.md | 19 + .../Общее/СКД/Значения пользовательских параметров.md | 12 + .../Общее}/СКД/ПриКомпоновкеРезультата.md | 0 .../Сохранение и восстановление настроек пользователя.md | 43 + .../{ТабДокВТЗ.md => Общее/Табличный документ в ТЗ.md} | 0 .../Общее/Управляемые формы}/Изменение доступности элементов рекурсивно.md | 0 .../Перебор строк таблицы формы после установки пользовательских отборов.md | 0 .../Общий модуль для создания элементов формы.md | 1554 +++++++++++++++++ .../Программное создание элементов формы/Создание групп формы.md | 53 + .../Программное создание элементов формы/Создание декораций формы.md | 15 + .../Программное создание элементов формы/Создание команд и кнопок.md | 14 + .../Программное создание элементов формы/Создание полей формы.md | 23 + .../Программное создание элементов формы/Создание реквизитов формы.md | 61 + .../Программное создание элементов формы/Создание таблиц формы.md | 20 + .../Управляемые формы/Условное оформление программно.md | 3 +- .../Общее/Управляемые формы/Форма выбора даты и времени.md | 156 ++ 42 files changed, 2367 insertions(+), 6 deletions(-) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Валюта регламентированного учета.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Разбить строку ТЧ.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ЗУП/Плановые начисления на дату.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Интеграция собственных объектов/Документы/Префиксация при установке нового номера.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Механизмы печати/Вывод табдок в общую форму печати.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Обсуждения/Отправка сообщений в чат (обсуждения).md rename src/content/docs/knowledge-base/{Самописные методы => Примеры, сниппеты/БСП и типовые/Пользователи}/Обращение к пользователю.md (100%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Работа с почтой/Адрес электронной почты пользователя.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Работа с почтой/Отправить письмо на почту.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Штрихкоды/Пример генерации QR-кода.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Штрихкоды/Пример генерации штрихкодов.md rename src/content/docs/knowledge-base/Примеры, сниппеты/{ => Общее}/HTML-документы/Виджеты.md (100%) rename src/content/docs/knowledge-base/Примеры, сниппеты/{ => Общее}/Бизнес-процессы и задачи/Обработка создания задач из бизнес-процесса.md (100%) rename src/content/docs/knowledge-base/Примеры, сниппеты/{ => Общее}/Бизнес-процессы и задачи/Пример создания простого бизнес-процесса.md (100%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Добавление польз. отборов в динамический список.md rename src/content/docs/knowledge-base/Примеры, сниппеты/{Работа с коллекциями => Общее}/Динамические списки/Обход всех строк динамического списка.md (100%) rename src/content/docs/knowledge-base/Примеры, сниппеты/{Работа с коллекциями => Общее}/Динамические списки/Обход выделенных строк динамического списка.md (100%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Установить период динамического списка программно.md rename src/content/docs/knowledge-base/Примеры, сниппеты/{ => Общее}/Запросы/Схема запроса.md (100%) rename src/content/docs/knowledge-base/Примеры, сниппеты/{ => Общее}/Обмен данными/Directum/Статусы соединениия с directum.md (100%) rename src/content/docs/knowledge-base/Примеры, сниппеты/{ => Общее}/Обмен данными/Directum/Строка соединения.md (100%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Обработчики событий/Модуль менеджера/ОбработкаПолученияДанныхВыбора rename src/content/docs/knowledge-base/{Самописные методы => Примеры, сниппеты/Общее/Прочее}/Логирование в массив строк .md (100%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Настройка EDT после установки.md rename src/content/docs/knowledge-base/Примеры, сниппеты/{РазрИмяФайла.md => Общее/Прочее/Разрешенное имя переменной из любой строки.md} (93%) rename src/content/docs/knowledge-base/{Самописные методы => Примеры, сниппеты/Общее/Прочее}/Уникальный ключ набора данных.md (100%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Работа с файлами/Проверка файла на блокировку.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/СКД/Значения пользовательских параметров.md rename src/content/docs/knowledge-base/{ => Примеры, сниппеты/Общее}/СКД/ПриКомпоновкеРезультата.md (100%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Сохранение и восстановление настроек пользователя.md rename src/content/docs/knowledge-base/Примеры, сниппеты/{ТабДокВТЗ.md => Общее/Табличный документ в ТЗ.md} (100%) rename src/content/docs/knowledge-base/{Самописные методы => Примеры, сниппеты/Общее/Управляемые формы}/Изменение доступности элементов рекурсивно.md (100%) rename src/content/docs/knowledge-base/Примеры, сниппеты/{ => Общее}/Управляемые формы/Перебор строк таблицы формы после установки пользовательских отборов.md (100%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Общий модуль для создания элементов формы.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание групп формы.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание декораций формы.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание команд и кнопок.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание полей формы.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание реквизитов формы.md create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание таблиц формы.md rename src/content/docs/knowledge-base/Примеры, сниппеты/{ => Общее}/Управляемые формы/Условное оформление программно.md (96%) create mode 100644 src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Форма выбора даты и времени.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Валюта регламентированного учета.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Валюта регламентированного учета.md new file mode 100644 index 0000000..dd85b56 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Валюта регламентированного учета.md @@ -0,0 +1,16 @@ + +## Через константу +```bsl +Валюта = Константы.ВалютаРегламентированногоУчета.Получить(); +``` + +> Далее - функции служебного программного интерфейса +## На клиенте +```bsl +Валюта = ЗначениеНастроекВызовСервера.ВалютаРегламентированногоУчетаОрганизации(Организация); +``` + +## На сервере +```bsl +Валюта = ЗначениеНастроекКлиентСерверПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация); +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Разбить строку ТЧ.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Разбить строку ТЧ.md new file mode 100644 index 0000000..e41c4e4 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ERP/Разбить строку ТЧ.md @@ -0,0 +1,40 @@ +```bsl +&НаКлиенте +Процедура КорзинаНоменклатурыРазбитьСтроку(Команда) + + ОписаниеОповещения = Новый ОписаниеОповещения("КорзинаНоменклатурыРазбитьСтрокуЗавершение", ЭтотОбъект); + + ПараметрыРазбиения = РаботаСТабличнымиЧастямиКлиент.ПараметрыРазбиенияСтроки(); + ПараметрыРазбиения.ИмяПоляКоличество = "Количество"; + ПараметрыРазбиения.Заголовок = "Введите количество для новой строки"; + ПараметрыРазбиения.РазрешитьНулевоеКоличество = Ложь; + ПараметрыРазбиения.Количество = Неопределено; + + РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку( + ТаблицаКорзинаНоменклатуры, + Элементы.ТаблицаКорзинаНоменклатуры, + ОписаниеОповещения, + ПараметрыРазбиения); + +КонецПроцедуры + +&НаКлиенте +Процедура КорзинаНоменклатурыРазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт + + ТекДанн = Элементы.ТаблицаКорзинаНоменклатуры.ТекущиеДанные; + + // обработка новой и старой строк при необходимости + Если НоваяСтрока <> Неопределено Тогда + + СтруктураДействий = Новый Структура; + СтруктураДействий.Вставить("ПересчитатьСумму", "Количество"); + ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекДанн, СтруктураДействий, КэшированныеЗначения); + ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, КэшированныеЗначения); + + Элементы.ТаблицаКорзинаНоменклатуры.ТекущаяСтрока = НоваяСтрока.ПолучитьИдентификатор(); + + КонецЕсли; + +КонецПроцедуры + +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ЗУП/Плановые начисления на дату.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ЗУП/Плановые начисления на дату.md new file mode 100644 index 0000000..32219d1 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/ЗУП/Плановые начисления на дату.md @@ -0,0 +1,39 @@ +--- +title: ВТ «Плановые начисления» сотрудников на дату +--- +Сначала необходимо создать временную таблицу отборов, в которой будет 2 поля `Сотрудник` и `Дата`. Эти поля заполняем списком сотрудников, по которым необходимо получить начисления и дату актуальности. В примере ниже создается временная таблица `ВТСотрудникиПериоды`, в которую из формы через таблицу значений передаются сотрудники. + +```bsl +Запрос = Новый Запрос; +Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + +ТЗ = РеквизитФормыВЗначение("Сотрудники", Тип("ТаблицаЗначений")); + +Запрос.Текст = +"ВЫБРАТЬ +| Сотрудники.Сотрудник КАК Сотрудник, +| &Дата КАК Период +|ПОМЕСТИТЬ ВТСотрудникиПериоды +|ИЗ +| &ТЗ КАК Сотрудники"; + +Запрос.УстановитьПараметр("ТЗ", ТЗ); +Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса()); +Запрос.Выполнить(); +``` + +Далее вызываем функцию общего модуля `КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников`, которая вернет текст запроса для получения начислений: +```bsl +ЗапросНачисления = КадровыйУчетРасширенный.ЗапросВТПлановыеНачисленияСотрудников( + , Истина // Только разрешенные + , "ВТНачисления" // Имя создаваемой ВТ + , "ВТСотрудникиПериоды" // Имя ВТ-отбора (создали выше) + , "Сотрудник, Период"); // Имя полей таблицы ВТ-отбора +``` + +Теперь полученный текст запроса необходимо передать в сам запрос. В менеджере временных таблиц такого запроса должна быть таблица отборов, которая была указана в качестве аргумента функции `ЗапросВТПлановыеНачисленияСотрудников` (в нашем случае `ВТСотрудникиПериоды`). Проще всего передать текст в уже имеющийся запрос: +```bsl +Запрос.Текст = ЗапросНачисления.Текст; +Запрос.Выполнить(); +``` +В результате - Временная таблица со всеми начислениями сотрудников \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Интеграция собственных объектов/Документы/Префиксация при установке нового номера.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Интеграция собственных объектов/Документы/Префиксация при установке нового номера.md new file mode 100644 index 0000000..e103798 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Интеграция собственных объектов/Документы/Префиксация при установке нового номера.md @@ -0,0 +1,7 @@ +Для того, чтобы нумерация документов была "Типовой", длину кода нужно установить **11 символов**, а в модуле объекта документа прописать. +```bsl +Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) + ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(ЭтотОбъект, СтандартнаяОбработка, Префикс); +КонецПроцедуры +``` +Для того, чтобы этот код работал, нужно, чтобы в реквизитах документа обязательно была `Организация` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Механизмы печати/Вывод табдок в общую форму печати.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Механизмы печати/Вывод табдок в общую форму печати.md new file mode 100644 index 0000000..bc0996f --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Механизмы печати/Вывод табдок в общую форму печати.md @@ -0,0 +1,22 @@ +--- +title: Как вывести произвольный табличный документ в общую форму печати +--- +```bsl +&НаКлиенте +Процедура ВывестиНаПечать(Команда) + + Если Не ПроверитьЗаполнение(); Тогда + Возврат; + КонецЕсли; + + ТабДок = СформироватьТабличныйДокумент(); + КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм("ИмяКоллекцииПечатныхФорм"); + + КоллекцияПечатныхФорм[0].ТабличныйДокумент = ТабДок; + КоллекцияПечатныхФорм[0].Экземпляров = 1; + КоллекцияПечатныхФорм[0].СинонимМакета = "Синоним макета; + + УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, Неопределено, ЭтотОбъект); + +КонецПроцедуры +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Обсуждения/Отправка сообщений в чат (обсуждения).md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Обсуждения/Отправка сообщений в чат (обсуждения).md new file mode 100644 index 0000000..c21b8a2 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Обсуждения/Отправка сообщений в чат (обсуждения).md @@ -0,0 +1,19 @@ +```bsl +&НаСервереБезКонтекста +Процедура ОтправитьСообщенияПоСписку(ТекстСообщения, Отправитель, СписокПолучатеелей) + + Сообщение = Обсуждения.ОписаниеСообщения(ТекстСообщения); + + Для Каждого Пользователь Из СписокПользователей Цикл + + ПолучательВМассиве = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Пользователь); + Попытка + Обсуждения.ОтправитьСообщение(Отправитель, ПолучательВМассиве, Сообщение, Неопределено); + Исключение + ЗаписьЖурналаРегистрации(...); + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Самописные методы/Обращение к пользователю.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Пользователи/Обращение к пользователю.md similarity index 100% rename from src/content/docs/knowledge-base/Самописные методы/Обращение к пользователю.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Пользователи/Обращение к пользователю.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Работа с почтой/Адрес электронной почты пользователя.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Работа с почтой/Адрес электронной почты пользователя.md new file mode 100644 index 0000000..de6288b --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Работа с почтой/Адрес электронной почты пользователя.md @@ -0,0 +1,25 @@ +```bsl +// Функция - Адрес электронной почты пользователя +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи - +// +// Возвращаемое значение: +// Строка - Проверенный адрес электронной почты. Если данные контактной информации не отвечают трвебованиям к адресу ЭП, +// возвращается пустая строка +// +Функция АдресЭлектроннойПочтыПользователя(Пользователь) Экспорт + + АдресЭлектроннойПочты = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(Пользователь, + Справочники.ВидыКонтактнойИнформации.EmailПользователя); + + Результат = ""; + + Если ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Ложь) Тогда + Результат = АдресЭлектроннойПочты; + КонецЕсли; + + Возврат Результат; + +КонецФункции +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Работа с почтой/Отправить письмо на почту.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Работа с почтой/Отправить письмо на почту.md new file mode 100644 index 0000000..ed59f5e --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Работа с почтой/Отправить письмо на почту.md @@ -0,0 +1,30 @@ +```bsl + +Процедура ОтправитьПисьмо(АдресЭлектроннойПочты, ТекстСообщения, ТемаСообщения) Экспорт + + Если Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Ложь) Тогда + ЗаписьЖурналаРегистрации("Рассылка уведомлений на электронную почту", + УровеньЖурналаРегистрации.Ошибка,,, + СтрШаблон("Ошибка отправки сообщения. Адрес ""%1"" не валиден", АдресЭлектроннойПочты)); + Возврат; + КонецЕсли; + + УчетнаяЗапись = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); + + ПараметрыПисьма = Новый Структура; + ПараметрыПисьма.Вставить("Кому", АдресЭлектроннойПочты); + ПараметрыПисьма.Вставить("Тема", ТемаСообщения); + ПараметрыПисьма.Вставить("Тело", ТекстСообщения); + + Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗапись, ПараметрыПисьма); + + Попытка + РаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗапись, Письмо); + Исключение + ЗаписьЖурналаРегистрации("Рассылка уведомлений на электронную почту", + УровеньЖурналаРегистрации.Ошибка,,, + СтрШаблон("Ошибка отправки сообщения. Описание ошибки %1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); + КонецПопытки; + +КонецПроцедуры +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Штрихкоды/Пример генерации QR-кода.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Штрихкоды/Пример генерации QR-кода.md new file mode 100644 index 0000000..1ca8138 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Штрихкоды/Пример генерации QR-кода.md @@ -0,0 +1,13 @@ +```bsl +// QRСтрока - Строка - данные, которые необходимо разместить в QR-коде. +// +// УровеньКоррекции - Число - уровень погрешности изображения, при котором данный QR-код все еще возможно 100% +// распознать. +// Параметр должен иметь тип целого и принимать одно из 4 допустимых значений: +// 0 (7 % погрешности), 1 (15 % погрешности), 2 (25 % погрешности), 3 (35 % погрешности). +// +// Размер - Число - определяет длину стороны выходного изображения в пикселях. +// Если минимально возможный размер изображения больше этого параметра - код сформирован не будет. +// +КартинкаQR = ГенерацияШтрихкода.ДанныеQRКода(QRСтрока, УровеньКоррекции, Размер) +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Штрихкоды/Пример генерации штрихкодов.md b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Штрихкоды/Пример генерации штрихкодов.md new file mode 100644 index 0000000..75a7803 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/БСП и типовые/Штрихкоды/Пример генерации штрихкодов.md @@ -0,0 +1,55 @@ +```bsl +// Структура: +// * Ширина - Число - ширина изображения штрих кода. +// * Высота - Число - высота изображения штрих кода. +// * ТипКода - Число - штрихкода. +// Возможные значение: +// 99 - Авто выбор +// 0 - EAN8 +// 1 - EAN13 +// 2 - EAN128 +// 3 - Code39 +// 4 - Code128 +// 5 - Code16k +// 6 - PDF417 +// 7 - Standart (Industrial) 2 of 5 +// 8 - Interleaved 2 of 5 +// 9 - Code39 Расширение +// 10 - Code93 +// 11 - ITF14 +// 12 - RSS14 +// 14 - EAN13AddOn2 +// 15 - EAN13AddOn5 +// 16 - QR +// 17 - GS1DataBarExpandedStacked +// 18 - Datamatrix ASCII +// 19 - Datamatrix BASE256 +// 20 - Datamatrix TEXT +// 21 - Datamatrix C40 +// 22 - Datamatrix X12 +// 23 - Datamatrix EDIFACT +// 24 - Datamatrix GS1ASCII +// 25 - Aztec +// * ОтображатьТекст - Булево - отображать HRI теста для штрихкода. +// * РазмерШрифта - Число - размер шрифта HRI теста для штрихкода. +// * УголПоворота - Число - угол поворота. +// Возможные значения: 0, 90, 180, 270. +// * Штрихкод - Строка - значение штрихкод в виде строки или Base64. +// * ТипВходныхДанных - Число - тип входных данных +// Возможные значения: 0 - Строка, 1 - Base64 +// * ПрозрачныйФон - Булево - прозрачный фон изображения штрихкода. +// * УровеньКоррекцииQR - Число - уровень коррекции штрихкода QR. +// Возможные значения: 0 - L, 1 - M, 2 - Q, 3 - H. +// * Масштабировать - Булево - масштабировать изображение штрихкода. +// * СохранятьПропорции - Булево - сохранять пропорции изображения штрихкода. +// * ВертикальноеВыравнивание - Число - вертикальное выравнивание штрихкода. +// Возможные значения: 1 - По верхнему краю, 2 - По центру, 3 - По нижнему краю +// * GS1DatabarКоличествоСтрок - Число - количество строк в штрихкоде GS1Databar. +// * УбратьЛишнийФон - Булево +// * ЛоготипКартинка - Строка - строка с base64 представлением png картинки логотипа. +// * ЛоготипРазмерПроцентОтШК - Число - процент от генерированного QR для вписывания логотипа. +// +Параметры = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода(); + +ИзображениеШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода); +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/HTML-документы/Виджеты.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/HTML-документы/Виджеты.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/HTML-документы/Виджеты.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/HTML-документы/Виджеты.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Бизнес-процессы и задачи/Обработка создания задач из бизнес-процесса.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Бизнес-процессы и задачи/Обработка создания задач из бизнес-процесса.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Бизнес-процессы и задачи/Обработка создания задач из бизнес-процесса.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Бизнес-процессы и задачи/Обработка создания задач из бизнес-процесса.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Бизнес-процессы и задачи/Пример создания простого бизнес-процесса.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Бизнес-процессы и задачи/Пример создания простого бизнес-процесса.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Бизнес-процессы и задачи/Пример создания простого бизнес-процесса.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Бизнес-процессы и задачи/Пример создания простого бизнес-процесса.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Добавление польз. отборов в динамический список.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Добавление польз. отборов в динамический список.md new file mode 100644 index 0000000..c7f7f24 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Добавление польз. отборов в динамический список.md @@ -0,0 +1,6 @@ +```bsl +ЭлементОтбора = СписокДокументов.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); +ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата"); +ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно; +ЭлементОтбора.ПравоеЗначение = ДатаНачала; +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Работа с коллекциями/Динамические списки/Обход всех строк динамического списка.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Обход всех строк динамического списка.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Работа с коллекциями/Динамические списки/Обход всех строк динамического списка.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Обход всех строк динамического списка.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Работа с коллекциями/Динамические списки/Обход выделенных строк динамического списка.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Обход выделенных строк динамического списка.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Работа с коллекциями/Динамические списки/Обход выделенных строк динамического списка.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Обход выделенных строк динамического списка.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Установить период динамического списка программно.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Установить период динамического списка программно.md new file mode 100644 index 0000000..9968f80 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Динамические списки/Установить период динамического списка программно.md @@ -0,0 +1,7 @@ + +```bsl +Элементы.СписокДокументов.Период.Вариант = ВариантСтандартногоПериода.ПроизвольныйПериод; +Элементы.СписокДокументов.Период.ДатаНачала = ДатаНачала; +Элементы.СписокДокументов.Период.ДатаОкончания = ДатаОкончания; +Элементы.СписокДокументов.Обновить(); +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Запросы/Схема запроса.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Запросы/Схема запроса.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Запросы/Схема запроса.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Запросы/Схема запроса.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Обмен данными/Directum/Статусы соединениия с directum.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Обмен данными/Directum/Статусы соединениия с directum.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Обмен данными/Directum/Статусы соединениия с directum.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Обмен данными/Directum/Статусы соединениия с directum.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Обмен данными/Directum/Строка соединения.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Обмен данными/Directum/Строка соединения.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Обмен данными/Directum/Строка соединения.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Обмен данными/Directum/Строка соединения.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Обработчики событий/Модуль менеджера/ОбработкаПолученияДанныхВыбора b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Обработчики событий/Модуль менеджера/ОбработкаПолученияДанныхВыбора new file mode 100644 index 0000000..0ade6f3 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Обработчики событий/Модуль менеджера/ОбработкаПолученияДанныхВыбора @@ -0,0 +1,106 @@ +--- + title: ОбработкаПолученияДанныхВыбора +--- + +## 📌 Назначение +Обработчик `ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)` позволяет: +- Влиять на формирование списка выбора. +- Модифицировать параметры отбора. +- Полностью формировать список выбора вручную. + +--- + +## 🔧 Параметры обработчика + +- `ДанныеВыбора`: переменная для возврата кастомного списка. +- `Параметры`: структура параметров, включая отборы и строку поиска. +- `СтандартнаяОбработка`: + - `Истина`: платформа формирует список выбора. + - `Ложь`: список задаётся вручную через `ДанныеВыбора`. + +--- + +## 🔹 Пример 1: Модификация параметров отбора + +**Задача:** Выводить товары только от указанного поставщика и не услуги. + +### Решение: +1. В `Параметры.Отбор` добавить: +```1C +Параметры.Отбор.Вставить("ВидТовара", Перечисления.ВидыТоваров.Товар); +``` +2. Оставить `СтандартнаяОбработка = Истина`. + +--- + +## 🔹 Пример 2: Полное переопределение — простой список + +**Задача:** Предлагать склады, не являющиеся розничными. + +### Пример кода: +```1C +СтандартнаяОбработка = Ложь; + +Запрос = Новый Запрос; +Запрос.Текст = "ВЫБРАТЬ Склады.Ссылка ИЗ Справочник.Склады КАК Склады + ГДЕ Склады.Розничный = ЛОЖЬ + И Склады.Наименование ПОДОБНО &СтрокаПоиска"; + +Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%"); + +Результат = Запрос.Выполнить(); +Список = Новый СписокЗначений; + +Пока Результат.Выбрать().Следующий() Цикл + Список.Добавить(Выборка.Ссылка); +КонецЦикла; + +ДанныеВыбора = Список; +``` + +--- + +## 🔹 Пример 3: Полное переопределение — сложный список + +**Задача:** Выводить поставщиков с пометкой удаления и предупреждением о ненадёжности. + +### Пример кода: +```1C +СтандартнаяОбработка = Ложь; + +Запрос = Новый Запрос; +Запрос.Текст = "ВЫБРАТЬ Поставщики.Ссылка, Поставщики.ПометкаУдаления, Поставщики.Ненадежный + ИЗ Справочник.Поставщики КАК Поставщики + ГДЕ Поставщики.Наименование ПОДОБНО &СтрокаПоиска"; + +Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%"); + +Результат = Запрос.Выполнить(); +Список = Новый СписокЗначений; + +Пока Результат.Выбрать().Следующий() Цикл + Структура = Новый Структура; + Структура.Вставить("Значение", Выборка.Ссылка); + Структура.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления); + + Если Выборка.Ненадежный Тогда + Структура.Вставить("Предупреждение", "Это ненадежный поставщик..."); + КонецЕсли; + + Список.Добавить(Структура); +КонецЦикла; + +ДанныеВыбора = Список; +``` + +--- + +## ⚠️ Особенности производительности + +Обработчик вызывается: +- При автоподборе. +- При потере фокуса поля ввода. +- При быстром выборе. + +**Рекомендация:** тщательно оптимизировать запросы и код обработчика. + diff --git a/src/content/docs/knowledge-base/Самописные методы/Логирование в массив строк .md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Логирование в массив строк .md similarity index 100% rename from src/content/docs/knowledge-base/Самописные методы/Логирование в массив строк .md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Логирование в массив строк .md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Настройка EDT после установки.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Настройка EDT после установки.md new file mode 100644 index 0000000..5957316 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Настройка EDT после установки.md @@ -0,0 +1,9 @@ +1. Установите EDT + +2. После установки EDT для того, чтобы файлы проектов хранились в произвольном расположении, создайте папку в удобном месте, например `D:\EDT` + +3. Внесите корректировки в файл настроек EDT (по умолчанию расположен `C:\Program Files\1C\1CE\components\1c-edt-2023.2.4+6-x86_64\1cedt.ini`) + +4. Для того, чтобы EDT выделяла больше оперативной памяти, необходимо откорректировать строку `-Xmx4096m`, где вместо 4096 указать произвольный объем оперативной памяти в мегабайтах + +5. В продолжение п.5, для того, чтобы проекты сохранялись в произвольном месте, нужно добавить строку `-Djava.io.tmpdir=D:\EDT`, где можно указать любой удобный путь. \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/РазрИмяФайла.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Разрешенное имя переменной из любой строки.md similarity index 93% rename from src/content/docs/knowledge-base/Примеры, сниппеты/РазрИмяФайла.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Разрешенное имя переменной из любой строки.md index 5e24ff9..b3d9628 100644 --- a/src/content/docs/knowledge-base/Примеры, сниппеты/РазрИмяФайла.md +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Разрешенное имя переменной из любой строки.md @@ -1,7 +1,3 @@ ---- -title: Разрешенное имя переменной из любой строки -slug: knowledge-base/snippety/razreshennoe-imya-peremennoy-iz-lyuboy-stroki ---- ```bsl // Функция - Разрешенное имя переменной из наименования // @@ -21,7 +17,7 @@ slug: knowledge-base/snippety/razreshennoe-imya-peremennoy-iz-lyuboy-stroki КонецЕсли; Наименование = СтрЗаменить(Наименование, Символы.ВК + Символы.ВТаб + Символы.НПП + Символы.ПС + Символы.ПФ + Символы.Таб, " "); - + Наименование = СтрЗаменитьПоРегулярномуВыражению(Наименование, "[^а-яА-ЯёЁa-zA-Z0-9 ]", "", Истина, Ложь); МассивПодстрок = СтрРазделить(Наименование, " ", Ложь); diff --git a/src/content/docs/knowledge-base/Самописные методы/Уникальный ключ набора данных.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Уникальный ключ набора данных.md similarity index 100% rename from src/content/docs/knowledge-base/Самописные методы/Уникальный ключ набора данных.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Прочее/Уникальный ключ набора данных.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Работа с файлами/Проверка файла на блокировку.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Работа с файлами/Проверка файла на блокировку.md new file mode 100644 index 0000000..d5a6749 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Работа с файлами/Проверка файла на блокировку.md @@ -0,0 +1,19 @@ + +```bsl +Функция ФайлЗаблокирован(ПолноеИмяФайла) Экспорт + + ЕстьБлокировка = Ложь; + + Файл = Новый Файл(ПолноеИмяФайла); + Если Файл.Существует() Тогда + Попытка + ЗаписьТекста = Новый ЗаписьТекста(ПолноеИмяФайла, , , Истина); + Исключение + ЕстьБлокировка = Истина; + КонецПопытки; + КонецЕсли; + + Возврат ЕстьБлокировка; + +КонецФункции +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/СКД/Значения пользовательских параметров.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/СКД/Значения пользовательских параметров.md new file mode 100644 index 0000000..991bef3 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/СКД/Значения пользовательских параметров.md @@ -0,0 +1,12 @@ + +```bsl +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) + + ... + + Настройки = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(); + Дата = Настройки.ПараметрыДанных.Элементы.Найти("Дата").Значение.Дата; + Сотрудник = Настройки.ПараметрыДанных.Элементы.Найти("Сотрудник").Значение; + +КонецПроцедуры +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/СКД/ПриКомпоновкеРезультата.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/СКД/ПриКомпоновкеРезультата.md similarity index 100% rename from src/content/docs/knowledge-base/СКД/ПриКомпоновкеРезультата.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/СКД/ПриКомпоновкеРезультата.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Сохранение и восстановление настроек пользователя.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Сохранение и восстановление настроек пользователя.md new file mode 100644 index 0000000..b02a546 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Сохранение и восстановление настроек пользователя.md @@ -0,0 +1,43 @@ + +## Сохранение настроек + +```bsl +&НаСервереБезКонтекста +Процедура СохранитьНастройкиФормы(ВидПечати) + + КлючОбъектаНастроек = "Расш1_ФормаНастроекПечатиЭтикеток"; + КлючНастроек = "Расш1_ВидПечати"; + + ИмяТекущегоПользователя = ИмяПользователя(); + Настройки = Новый Структура("ВидПечати", ВидПечати); // Структура с произвольными значениями + ХранилищеОбщихНастроек.Сохранить(КлючОбъектаНастроек, КлючНастроек, Настройки, , ИмяТекущегоПользователя); + +КонецПроцедуры +``` + +## Восстановление настроек + +```bsl +&НаСервереБезКонтекста +Функция СохраненныеНастройкиФормы() + + КлючОбъектаНастроек = "Расш1_ФормаНастроекПечатиЭтикеток"; + КлючНастроек = "Расш1_ВидПечати"; + + ИмяТекущегоПользователя = ИмяПользователя(); + + ОшибкаПолученияНастроек = Ложь; + Попытка + Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъектаНастроек, КлючНастроек, , ИмяТекущегоПользователя); + Исключение + ОшибкаПолученияНастроек = Истина; + КонецПопытки; + + Если ОшибкаПолученияНастроек Тогда + Настройки = Новый Структура("ВидПечати", 0); + КонецЕсли; + + Возврат Настройки; + +КонецФункции +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/ТабДокВТЗ.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Табличный документ в ТЗ.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/ТабДокВТЗ.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Табличный документ в ТЗ.md diff --git a/src/content/docs/knowledge-base/Самописные методы/Изменение доступности элементов рекурсивно.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Изменение доступности элементов рекурсивно.md similarity index 100% rename from src/content/docs/knowledge-base/Самописные методы/Изменение доступности элементов рекурсивно.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Изменение доступности элементов рекурсивно.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Управляемые формы/Перебор строк таблицы формы после установки пользовательских отборов.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Перебор строк таблицы формы после установки пользовательских отборов.md similarity index 100% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Управляемые формы/Перебор строк таблицы формы после установки пользовательских отборов.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Перебор строк таблицы формы после установки пользовательских отборов.md diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Общий модуль для создания элементов формы.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Общий модуль для создания элементов формы.md new file mode 100644 index 0000000..26a4774 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Общий модуль для создания элементов формы.md @@ -0,0 +1,1554 @@ + +```bsl +////////////////////////////////////////////////////////////////////////////////// +// +// Модуль Динамического Формирования Интерфейса +// Начало разработки 26.03.2020 года +// +// Автор и разработчик: Котов Дмитрий Вадимович +// При поддержеке участников сообщества GitHub & Infostart +// https://github.com/KotovDima1C/DFI +// Инфостарт https://infostart.ru/profile/564942/ +// telegram: @KotovDima +// +////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеТипов + +////////////////////////////////////////////////////////////////////////////////// +//Создание описание типов + +// Создание описания типа Строка +// +// Параметры: +// ДлинаСтроки - Число - длина строки +// +Функция ОписаниеТипаСтрока(ДлинаСтроки = 0) Экспорт + Возврат Новый ОписаниеТипов("Строка",,кСтрока(ДлинаСтроки)); +КонецФункции + +// Создание описания типа Число +// +// Параметры: +// ДлинаЧисла - Число - общая длина числа +// ТочностьЧисла - Число - количество символов после запятой +// +Функция ОписаниеТипаЧисло(ДлинаЧисла = 15,ТочностьЧисла = 2) Экспорт + Возврат Новый ОписаниеТипов("Число",кЧисло(ДлинаЧисла,ТочностьЧисла)); +КонецФункции + +// Создание описания типа ДатаВремя +// +// Параметры: +// ДатаВремя - Строка - Варианты: "ДатаВремя", "Дата" или "Время" +// +Функция ОписаниеТипаДатаВремя(ДатаВремя = "ДатаВремя") Экспорт + Возврат Новый ОписаниеТипов("Дата",,,кДатаВремя(ДатаВремя)); +КонецФункции + +// Создание типа "Таблица значений" +Функция ОписаниеТипаТаблицаЗначений() Экспорт + + МассивТипаВыбора = Новый Массив; + МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений")); + Возврат Новый ОписаниеТипов(МассивТипаВыбора); + +КонецФункции + +// Создание типа "Динамический список" +Функция ОписаниеТипаДинамическийСписок() Экспорт + + МассивТипаВыбора = Новый Массив; + МассивТипаВыбора.Добавить(Тип("ДинамическийСписок")); + Возврат Новый ОписаниеТипов(МассивТипаВыбора); + +КонецФункции + +// Создание типа "Булево" +Функция ОписаниеТипаБулево() Экспорт + + Возврат Новый ОписаниеТипов("Булево"); + +КонецФункции + +// Создание описания ссылочного типа справочника +// +// Параметры: +// ИмяДокумента - Строка - Имя документа в дереве метаданных +// +Функция ОписаниеТипаДокумент(ИмяДокумента) Экспорт + + Возврат Новый ОписаниеТипов("ДокументСсылка." + ИмяДокумента); + +КонецФункции + +// Создание описания ссылочного типа справочника +// +// Параметры: +// ИмяСправочника - Строка - Имя справочника в дереве метаданных +// +Функция ОписаниеТипаСправочник(ИмяСправочника) Экспорт + + Возврат Новый ОписаниеТипов("СправочникСсылка." + ИмяСправочника); + +КонецФункции + +// Создание описания типа перечисление +// +// Параметры: +// ИмяПеречисления - Строка - Имя перечисления в дереве метаданных +// +Функция ОписаниеТипаПеречисление(ИмяПеречисления) Экспорт + + Возврат Новый ОписаниеТипов("ПеречислениеСсылка." + ИмяПеречисления); + +КонецФункции + + +/////////////////////////////////////////////////////////////////////////////////// +//Создание квалификаторов + +// Создание квалификатора для типа Строка +// +// Параметры: +// ДлинаСтроки - Число - длина строки +// +Функция кСтрока(ДлинаСтроки = 0) Экспорт + Возврат Новый КвалификаторыСтроки(ДлинаСтроки); +КонецФункции + +// Создание квалификатора для типа Число +// +// Параметры: +// ДлинаЧисла - Число - общая длина числа +// ТочностьЧисла - Число - количество символов после запятой +// +Функция кЧисло(ДлинаЧисла = 15,ТочностьЧисла = 2) Экспорт + Возврат Новый КвалификаторыЧисла(ДлинаЧисла,ТочностьЧисла); +КонецФункции + +// Создание квалификатора для типа ДатаВремя +// +// Параметры: +// ДатаВремя - Строка - Варианты: "ДатаВремя", "Дата" или "Время" +// +Функция кДатаВремя(ДатаВремя = "ДатаВремя") Экспорт + Возврат Новый КвалификаторыДаты(ЧастиДаты[ДатаВремя]); +КонецФункции + +#КонецОбласти + +#Область СозданиеРеквизитовКоманд + +// Создание одного реквизита +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяРеквизита - Строка - Имя реквизита +// ОписаниеТипа - ОписаниеТипа - Описание типа реквизита +// +Процедура СоздатьРеквизит(Форма,ИмяРеквизита,ОписаниеТипа) Экспорт + + структураРеквизитов = Новый Структура; + структураРеквизитов.Вставить(ОчиститьОтЗапрещенныхСимволов(ИмяРеквизита),ОписаниеТипа); + СоздатьРеквизиты(Форма,структураРеквизитов); + +КонецПроцедуры + +// Создание реквизитов +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// структураРеквизитов - Структура - Где ключ это Имя реквизита, а значение это описание типа реквизита +// +Процедура СоздатьРеквизиты(Форма,структураРеквизитов) Экспорт + + ДобавляемыеРеквизиты = Новый Массив; + Для Каждого тРеквизит Из структураРеквизитов Цикл + НовыйРеквизит = Новый РеквизитФормы(тРеквизит.Ключ,тРеквизит.Значение); + ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + КонецЦикла; + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + +КонецПроцедуры + +// Создание реквизитов для таблицы +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяТаблицы - Строка - Имя таблицы куда добавляете реквизиты +// структураРеквизитов - Структура - Где ключ это Имя реквизита, а значение это описание типа реквизита +// +Процедура СоздатьРеквизитыТаблицы(Форма,ИмяТаблицы,структураРеквизитов) Экспорт + + ДобавляемыеРеквизиты = Новый Массив; + Для Каждого тРеквизит Из структураРеквизитов Цикл + НовыйРеквизит = Новый РеквизитФормы(тРеквизит.Ключ,тРеквизит.Значение,ИмяТаблицы); + ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + КонецЦикла; + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + +КонецПроцедуры + +// Создание команды +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяКоманды - Строка - Имя команды +// Заголовок - Строка - Заголовок команды +// ИмяДействия - Строка - Имя процедуры действия команды +// Пример процедуры в модуле формы "Процедура <ИмяДействия>(Команда)" +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// +Процедура СоздатьКоманду(Форма, + ИмяКоманды, + Заголовок, + ИмяДействия, + СтруктураСвойств = Неопределено) Экспорт + + НоваяКоманда = Форма.Команды.Добавить(ОчиститьОтЗапрещенныхСимволов(ИмяКоманды)); + НоваяКоманда.Заголовок = Заголовок; + НоваяКоманда.Действие = ОчиститьОтЗапрещенныхСимволов(ИмяДействия); + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + УстановитьСвойстваЭлементу(НоваяКоманда,СтруктураСвойств); + +КонецПроцедуры + +#КонецОбласти + +#Область ВспомогательныеФункции + +Процедура ЕслиСтруктураНеопределеноТоНовая(текущаяСруктура) + Если текущаяСруктура = Неопределено Тогда + текущаяСруктура = Новый Структура; + КонецЕсли; +КонецПроцедуры + +Процедура ОпределитьЭлементФормы(Форма,Элемент) + Если Элемент = Неопределено Тогда Возврат КонецЕсли; + Если ТипЗнч(Элемент) = Тип("Строка") Тогда + // может прийти "ИмяТаблицы.КоманднаяПанель" + Иерархия = СтрРазделить(Элемент, "."); + Элемент = Форма.Элементы; + Для Каждого Шаг Из Иерархия Цикл + Элемент = Элемент[Шаг]; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +Процедура ПолучитьСостояниеРастягиванияЭлементаПоГоризонтали(Элемент,Состояние) + Если Состояние = 1 Тогда + Элемент.РастягиватьПоГоризонтали = ИСТИНА; + ИначеЕсли Состояние = 2 Тогда + Элемент.РастягиватьПоГоризонтали = ЛОЖЬ; + КонецЕсли; +КонецПроцедуры + +Процедура ПолучитьСостояниеРастягиванияЭлементаПоВертикали(Элемент,Состояние) + Если Состояние = 1 Тогда + Элемент.РастягиватьПоВертикали = ИСТИНА; + ИначеЕсли Состояние = 2 Тогда + Элемент.РастягиватьПоВертикали = ЛОЖЬ; + КонецЕсли; +КонецПроцедуры + +Процедура ПолучитьСостояниеГруппировкиЭлемента(Элемент,Состояние) + Если Состояние = 1 Тогда + Элемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ИначеЕсли Состояние = 2 Тогда + Элемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно; + ИначеЕсли Состояние = 3 Тогда + Элемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; + КонецЕсли; +КонецПроцедуры + +Процедура ПолучитьСостояниеГруппировкиКолонкиЭлемента(Элемент,Состояние) + Если Состояние = 1 Тогда + Элемент.Группировка = ГруппировкаКолонок.Горизонтальная; + ИначеЕсли Состояние = 2 Тогда + Элемент.Группировка = ГруппировкаКолонок.Вертикальная; + ИначеЕсли Состояние = 3 Тогда + Элемент.Группировка = ГруппировкаКолонок.ВЯчейке; + КонецЕсли; +КонецПроцедуры + +Процедура УстановитьМножествоСтруктурСвойствЭлементу(Элемент, + СтруктураСвойств1, + СтруктураСвойств2 = Неопределено, + СтруктураСвойств3 = Неопределено, + СтруктураСвойств4 = Неопределено, + СтруктураСвойств5 = Неопределено, + СтруктураСвойств6 = Неопределено, + СтруктураСвойств7 = Неопределено, + СтруктураСвойств8 = Неопределено, + СтруктураСвойств9 = Неопределено, + СтруктураСвойств10 = Неопределено) Экспорт + + УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств1); + Если СтруктураСвойств2 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств2) КонецЕсли; + Если СтруктураСвойств3 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств3) КонецЕсли; + Если СтруктураСвойств4 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств4) КонецЕсли; + Если СтруктураСвойств5 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств5) КонецЕсли; + Если СтруктураСвойств6 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств6) КонецЕсли; + Если СтруктураСвойств7 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств7) КонецЕсли; + Если СтруктураСвойств8 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств8) КонецЕсли; + Если СтруктураСвойств9 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств9) КонецЕсли; + Если СтруктураСвойств10 <> Неопределено Тогда УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств10) КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьСвойстваЭлементу(Элемент,СтруктураСвойств) Экспорт + Для Каждого тСвойство Из СтруктураСвойств Цикл + Элемент[тСвойство.Ключ] = тСвойство.Значение; + КонецЦикла; +КонецПроцедуры + +Процедура УстановитьСобытияЭлементу(Элемент,СтруктураСобытий) Экспорт + Для Каждого тСвойство Из СтруктураСобытий Цикл + Элемент.УстановитьДействие(тСвойство.Ключ,тСвойство.Значение); + КонецЦикла; +КонецПроцедуры + +Процедура УстановитьПараметрыЗапросу(РеквизитДинамическийСписок,ПараметрыЗапроса) Экспорт + Для Каждого Параметра из ПараметрыЗапроса Цикл + РеквизитДинамическийСписок.Параметры.УстановитьЗначениеПараметра(Параметра.Ключ,Параметра.Значение); + КонецЦикла; +КонецПроцедуры + +Функция СоздатьЭлементФормы(Форма,ИмяЭлемента,ТипЭлемента,РодительЭлемента,ЭлементПеред = Неопределено) + Если ЭлементПеред = Неопределено Тогда + НовыйЭлемент = Форма.Элементы.Добавить(ОчиститьОтЗапрещенныхСимволов(ИмяЭлемента),ТипЭлемента,РодительЭлемента); + Иначе + НовыйЭлемент = Форма.Элементы.Вставить(ОчиститьОтЗапрещенныхСимволов(ИмяЭлемента),ТипЭлемента,РодительЭлемента,ЭлементПеред); + КонецЕсли; + Возврат НовыйЭлемент; +КонецФункции + +Процедура СоздатьКолонкиДляТаблицыФормы(Форма,ТаблицаФормы,СтруктураКолонок,ЭтоДС = ЛОЖЬ) + + ИмяСписка = ТаблицаФормы.Имя; + Для Каждого тКолонка Из СтруктураКолонок Цикл + ИмяКолонки = тКолонка.Ключ; + НоваяКолонкаТаблицы = СоздатьЭлементФормы(Форма,ИмяСписка + ИмяКолонки,Тип("ПолеФормы"),ТаблицаФормы); + НоваяКолонкаТаблицы.Вид = ?(ЭтоДС,ВидПоляФормы.ПолеНадписи,ВидПоляФормы.ПолеВвода); + Если тКолонка.Значение <> "" Тогда НоваяКолонкаТаблицы.Заголовок = тКолонка.Значение КонецЕсли; + // ++bugfix https://github.com/JusteRU + НоваяКолонкаТаблицы.ПутьКДанным = ТаблицаФормы.ПутьКДанным + "." + ИмяКолонки; + // --bugfix + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьГоризонтальноеПоложение(ШифрПоложения) + Если ШифрПоложения = 1 Тогда + нГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево; + ИначеЕсли ШифрПоложения = 2 Тогда + нГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр; + ИначеЕсли ШифрПоложения = 3 Тогда + нГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право; + Иначе + нГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Авто; + КонецЕсли; + Возврат нГоризонтальноеПоложение; +КонецФункции + +#КонецОбласти + +#Область СозданиеЭлементов + +// Создать обычную группу без отображения +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяГруппы - Строка - Имя элемента на форме +// РодительГруппы - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// ГруппировкаОбычнойГруппы - Число - Принимаемые значения: +// 1 - Вертикальная +// 2 - ГоризонтальнаяЕслиВозможно +// 3 - ГоризонтальнаяВсегда +// 0 - Авто +// РастягиватьГоризонтально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// РастягиватьВертикально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздГруппаОбычнаяБезОтображения(Форма, + ИмяГруппы, + РодительГруппы, + ГруппировкаОбычнойГруппы = 0, + РастягиватьГоризонтально = 0, + РастягиватьВертикально = 0, + СтруктураСвойств = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ОпределитьЭлементФормы(Форма,РодительГруппы); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяГруппы,Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред); + НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа; + НовыйЭлемент.Отображение = ОтображениеОбычнойГруппы.Нет; + НовыйЭлемент.ОтображатьЗаголовок = ЛОЖЬ; + + ПолучитьСостояниеГруппировкиЭлемента(НовыйЭлемент,ГруппировкаОбычнойГруппы); + ПолучитьСостояниеРастягиванияЭлементаПоГоризонтали(НовыйЭлемент,РастягиватьГоризонтально); + ПолучитьСостояниеРастягиванияЭлементаПоВертикали(НовыйЭлемент,РастягиватьВертикально); + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создать обычную группу +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяГруппы - Строка - Имя элемента на форме +// РодительГруппы - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// Заголовок - Строка - Заголовок группы +// ГруппировкаОбычнойГруппы - Число - Принимаемые значения: +// 1 - Вертикальная +// 2 - ГоризонтальнаяЕслиВозможно +// 3 - ГоризонтальнаяВсегда +// 0 - Авто +// РастягиватьГоризонтально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// РастягиватьВертикально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздГруппаОбычная(Форма, + ИмяГруппы, + РодительГруппы, + Заголовок = "", + ГруппировкаОбычнойГруппы = 0, + РастягиватьГоризонтально = 0, + РастягиватьВертикально = 0, + СтруктураСвойств = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ОпределитьЭлементФормы(Форма,РодительГруппы); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяГруппы,Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред); + НовыйЭлемент.Вид = ВидГруппыФормы.ОбычнаяГруппа; + НовыйЭлемент.Отображение = ОтображениеОбычнойГруппы.СлабоеВыделение; + НовыйЭлемент.ОтображатьЗаголовок = ИСТИНА; + + ПолучитьСостояниеГруппировкиЭлемента(НовыйЭлемент,ГруппировкаОбычнойГруппы); + ПолучитьСостояниеРастягиванияЭлементаПоГоризонтали(НовыйЭлемент,РастягиватьГоризонтально); + ПолучитьСостояниеРастягиванияЭлементаПоВертикали(НовыйЭлемент,РастягиватьВертикально); + + Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создать группу страниц +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяГруппы - Строка - Имя элемента на форме +// РодительГруппы - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// РастягиватьГоризонтально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// РастягиватьВертикально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// ПриСменеСтраницы - Строка - При смене страницы??? +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздГруппаСтраниц(Форма, + ИмяГруппы, + РодительГруппы, + РастягиватьГоризонтально = 0, + РастягиватьВертикально = 0, + ПриСменеСтраницы = "", + СтруктураСвойств = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ОпределитьЭлементФормы(Форма,РодительГруппы); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяГруппы,Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред); + НовыйЭлемент.Вид = ВидГруппыФормы.Страницы; + + ПолучитьСостояниеРастягиванияЭлементаПоГоризонтали(НовыйЭлемент,РастягиватьГоризонтально); + ПолучитьСостояниеРастягиванияЭлементаПоВертикали(НовыйЭлемент,РастягиватьВертикально); + + Если ПриСменеСтраницы <> "" Тогда НовыйЭлемент.ПриСменеСтраницы = ПриСменеСтраницы КонецЕсли; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создать страницу группы страницы +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяСтраницы - Строка - Имя элемента на форме +// ГруппаСтраницы - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// Заголовок - Строка - Заголовок страницы +// ГруппировкаОбычнойГруппы - Число - Принимаемые значения: +// 1 - Вертикальная +// 2 - ГоризонтальнаяЕслиВозможно +// 3 - ГоризонтальнаяВсегда +// 0 - Авто +// РастягиватьГоризонтально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// РастягиватьВертикально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтраницаПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздСтраница(Форма, + ИмяСтраницы, + ГруппаСтраницы, + Заголовок = "", + ГруппировкаОбычнойГруппы = 0, + РастягиватьГоризонтально = 0, + РастягиватьВертикально = 0, + СтруктураСвойств = Неопределено, + СтраницаПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ОпределитьЭлементФормы(Форма,ГруппаСтраницы); + ОпределитьЭлементФормы(Форма,СтраницаПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяСтраницы,Тип("ГруппаФормы"),ГруппаСтраницы,СтраницаПеред); + НовыйЭлемент.Вид = ВидГруппыФормы.Страница; + + ПолучитьСостояниеГруппировкиЭлемента(НовыйЭлемент,ГруппировкаОбычнойГруппы); + ПолучитьСостояниеРастягиванияЭлементаПоГоризонтали(НовыйЭлемент,РастягиватьГоризонтально); + ПолучитьСостояниеРастягиванияЭлементаПоВертикали(НовыйЭлемент,РастягиватьВертикально); + + Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создать обычную группу +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяГруппы - Строка - Имя элемента на форме +// РодительПанели - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздГруппаКоманднаяПанель(Форма, + ИмяПанели, + РодительПанели, + СтруктураСвойств = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ОпределитьЭлементФормы(Форма,РодительПанели); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяПанели,Тип("ГруппаФормы"),РодительПанели,ЭлементПеред); + НовыйЭлемент.Вид = ВидГруппыФормы.КоманднаяПанель; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создать группу +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяГруппы - Строка - Имя элемента на форме +// РодительГруппы - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздГруппа(Форма, + ИмяГруппы, + РодительГруппы, + СтруктураСвойств, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ОпределитьЭлементФормы(Форма,РодительГруппы); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяГруппы,Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред); + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создание поля популярных видов +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяПоля - Строка - Имя элемента на форме +// РодительПоля - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// Заголовок - Строка - заголовок элемента +// ШифрВидаПоля - Число - возможно указать шифр следующих значений: +// 1 - ПолеВвода +// 2 - ПолеФлажка +// 3 - ПолеИндикатора +// 4 - ПолеПереключателя +// 5 - ПолеПериода +// 6 - ПолеHTMLДокумента +// 0 - Без указания типа, тип можно передать в структуре свойств +// ПутьКДанным - Строка - Путь к данным значения +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздПоле(Форма, + ИмяПоля, + РодительПоля, + Заголовок, + ШифрВидаПоля = 0, + ПутьКДанным = "", + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ЕслиСтруктураНеопределеноТоНовая(СтруктураСобытий); + ОпределитьЭлементФормы(Форма,РодительПоля); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяПоля,Тип("ПолеФормы"),РодительПоля,ЭлементПеред); + + Если ШифрВидаПоля <> 0 Тогда + НаборВидов = "ПолеВвода + |ПолеФлажка + |ПолеИндикатора + |ПолеПереключателя + |ПолеПериода + |ПолеHTMLДокумента"; + ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,ШифрВидаПоля)); + НовыйЭлемент.Вид = ВидПоляФормы[ВидПоля]; + КонецЕсли; + + Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли; + Если ПутьКДанным <> "" Тогда НовыйЭлемент.ПутьКДанным = ПутьКДанным КонецЕсли; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + УстановитьСобытияЭлементу(НовыйЭлемент,СтруктураСобытий); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создание поля популярных видов +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяПоля - Строка - Имя элемента на форме +// РодительПоля - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// Заголовок - Строка - заголовок элемента +// тВидФлажка - Число - возможные варианты: +// 0 - Авто +// 1 - Флажок +// 2 - Тумблер +// 3 - Выключатель +// ПутьКДанным - Строка - Путь к данным значения +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздПолеФлажок(Форма, + ИмяПоля, + РодительПоля, + Заголовок, + тВидФлажка = 0, + ПутьКДанным = "", + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + НовыйЭлемент = СздПоле(Форма,ИмяПоля,РодительПоля,Заголовок,2,ПутьКДанным,СтруктураСвойств,СтруктураСобытий,ЭлементПеред); + Если тВидФлажка <> 0 Тогда + НаборВидов = "Флажок + |Тумблер + |Выключатель"; + ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,тВидФлажка)); + НовыйЭлемент.ВидФлажка = ВидФлажка[ВидПоля]; + КонецЕсли; + +КонецФункции + +//Быстрая функция по созданию декорации надпись +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяДекорации - Строка - Имя элемента на форме +// РодительДекорации - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// ЗаголовокДекорации - Строка - текст который содержит декорация +// РастягиватьПоГоризонтали - Булево - растянуть надпись на всю ширину формы +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздДекорацияНадпись(Форма, + ИмяДекорации, + РодительДекорации, + ЗаголовокДекорации, + РастягиватьПоГоризонтали = ИСТИНА, + ЭлементПеред = Неопределено) Экспорт + + ОпределитьЭлементФормы(Форма,РодительДекорации); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СздДекорация(Форма,ИмяДекорации,РодительДекорации,,,ЭлементПеред); + + НовыйЭлемент.Заголовок = ЗаголовокДекорации; + + Если РастягиватьПоГоризонтали Тогда + НовыйЭлемент.АвтоМаксимальнаяШирина = ЛОЖЬ; + НовыйЭлемент.РастягиватьПоГоризонтали = ИСТИНА; + КонецЕсли; + + Возврат НовыйЭлемент; + +КонецФункции + +//Быстрая функция по созданию декорации картинки +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяДекорации - Строка - Имя элемента на форме +// РодительДекорации - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// ИмяКартинки - Строка - Имя картинки в дереве метаданных +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздДекорацияКартинка(Форма, + ИмяДекорации, + РодительДекорации, + ИмяКартинки, + ЭлементПеред = Неопределено) Экспорт + + НовыйЭлемент = СздДекорация(Форма,ИмяДекорации,РодительДекорации,,,ЭлементПеред); + + НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка; + НовыйЭлемент.Картинка = БиблиотекаКартинок[ИмяКартинки]; + + Возврат НовыйЭлемент; + +КонецФункции + +//Общая функция создания декорации с видом надпись и картинка +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяДекорации - Строка - Имя элемента на форме +// РодительДекорации - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздДекорация(Форма, + ИмяДекорации, + РодительДекорации, + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ЕслиСтруктураНеопределеноТоНовая(СтруктураСобытий); + ОпределитьЭлементФормы(Форма,РодительДекорации); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяДекорации,Тип("ДекорацияФормы"),РодительДекорации,ЭлементПеред); + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + УстановитьСобытияЭлементу(НовыйЭлемент,СтруктураСобытий); + + Возврат НовыйЭлемент; + +КонецФункции + +//Общая функция создания кнопки +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяКнопки - Строка - Имя элемента на форме +// РодительКнопки - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// ЗаголовокКнопки - Строка - отображаемый заголовок кнопки +// ИмяКоманды - Строка - Имя команды +// ВидКнопки - Число - Принимаемые значения +// 1 - Обычная кнопка +// 2 - Гиперссылка +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздКнопка(Форма, + ИмяКнопки, + РодительКнопки, + ЗаголовокКнопки = "", + ИмяКоманды = "", + ВидКнопки = 0, + СтруктураСвойств = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ОпределитьЭлементФормы(Форма,РодительКнопки); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + //НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяКнопки,Тип("ДекорацияФормы"),РодительКнопки,ЭлементПеред); + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяКнопки,Тип("КнопкаФормы"),РодительКнопки,ЭлементПеред); + Если ВидКнопки <> 0 Тогда + НаборВидов = "ОбычнаяКнопка + |Гиперссылка"; + ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,ВидКнопки)); + НовыйЭлемент.Вид = ВидКнопкиФормы[ВидПоля]; + КонецЕсли; + + Если ЗаголовокКнопки <> "" Тогда НовыйЭлемент.Заголовок = ЗаголовокКнопки; КонецЕсли; + Если ИмяКоманды <> "" Тогда НовыйЭлемент.ИмяКоманды = ИмяКоманды; КонецЕсли; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создаем динамический список версия 2.0 +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяСписка - Строка - Имя будущей таблицы формы +// РодительСписка - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// ТекстЗапроса - Строка - если не заполнен, то обязательно должен быть заполнен параметр ТаблицаСписка +// ПараметрыЗапроса - Структура - Содержит параметры для запроса, где ключ - имя параметры, а значение соответственно +// ТаблицаСписка - Строка - имя таблицы списка, +// СтруктураКолонок - Структура - Ключ имя колонки в динамическом списке, значение это заголовок колонки +// Для сложных случаев лучше передать "неопределено" и впоспользоваться процедурой формирования колонок таблицы формы этого же модуля ДФИ +// СвояКоманднаяПанель - Булево - используется если требуется снять флаг "Автозаполнение" и наполнить самостоятельно +// Из-за специфики работы, нет программной возможности снятия флага "Автозаполнение", по этому создается своя командная панель, а стандартная скрывается полностью. +// Имя новой командной панели <ИмяСписка>+"КоманднаяПанель2" +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздДинамическийСписок(Форма, + ИмяСписка = "Список", + РодительСписка, + ТекстЗапроса = "", + ПараметрыЗапроса = Неопределено, + ТаблицаСписка = "", + СтруктураКолонок = Неопределено, + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + СвояКоманднаяПанель = ЛОЖЬ, + ЭлементПеред = Неопределено + ) Экспорт + + СоздатьРеквизит(Форма,ИмяСписка,ОписаниеТипаДинамическийСписок()); + РеквизитДинамическийСписок = Форма[ИмяСписка]; + Если ТекстЗапроса = "" Тогда + РеквизитДинамическийСписок.ПроизвольныйЗапрос = ЛОЖЬ; + РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка; + Иначе + РеквизитДинамическийСписок.ПроизвольныйЗапрос = ИСТИНА; + РеквизитДинамическийСписок.ТекстЗапроса = ТекстЗапроса; + Если ТаблицаСписка <> "" Тогда РеквизитДинамическийСписок.ОсновнаяТаблица = ТаблицаСписка; КонецЕсли; + КонецЕсли; + + ЕслиСтруктураНеопределеноТоНовая(ПараметрыЗапроса); + УстановитьПараметрыЗапросу(РеквизитДинамическийСписок,ПараметрыЗапроса); + + ТаблицаФормы = СздТаблицаФормы(Форма,ИмяСписка,РодительСписка,ИмяСписка,СтруктураКолонок,СтруктураСвойств,СтруктураСобытий,СвояКоманднаяПанель,ЭлементПеред); + + Возврат ТаблицаФормы; + +КонецФункции + +// Создаем колонку для Таблицы формы (Динамического списка) +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяКолонки - Строка - Имя будущей колонки +// ТипКолонки - Число - Принимаемые значения: +// 0 - Поле вводы +// 1 - Поле надписи +// 2 - Поле флажка +// 3 - Поле картинки +// Заголовок - Строка - Заголовок колонки +// ПутьКДанным - Строка - Путь к данным, не забывайте про точку и "Объект", пример "Объект.Товары.Номенклатура" +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздКолонкаТаблицыФормы(Форма, + ИмяКолонки, + Родитель, + ТипКолонки = 0, + Заголовок = "", + ПутьКДанным, + ОтображатьШапку = ИСТИНА, + ОтображатьПодвал = ЛОЖЬ, + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + ЭлементПеред = Неопределено + ) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ЕслиСтруктураНеопределеноТоНовая(СтруктураСобытий); + ОпределитьЭлементФормы(Форма,Родитель); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + Если ТипКолонки <> 0 Тогда + НаборВидов = "ПолеНадписи + |ПолеФлажка + |ПолеКартинки"; + ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,ТипКолонки)); + Иначе + ВидПоля = "ПолеВвода"; + КонецЕсли; + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяКолонки,Тип("ПолеФормы"),Родитель,ЭлементПеред); + НовыйЭлемент.Заголовок = Заголовок; + НовыйЭлемент.Вид = ВидПоляФормы[ВидПоля]; + НовыйЭлемент.ПутьКДанным = ПутьКДанным; + НовыйЭлемент.ОтображатьВШапке = ОтображатьШапку; + НовыйЭлемент.ОтображатьВПодвале = ОтображатьПодвал; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + УстановитьСобытияЭлементу(НовыйЭлемент,СтруктураСобытий); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создаем Таблицу формы +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяТаблицы - Строка - Имя будущей таблицы +// РодительТаблицы - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// ПутьКДанным - Строка - Путь к данным реквизита +// СтруктураКолонок - Структура - Содержит значения колонок, где ключ имя колонки и значение это заголовок если необходимо изменить, иначе можно передать "" +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// СвояКоманднаяПанель - Булево - используется если требуется снять флаг "Автозаполнение" и наполнить самостоятельно +// Из-за специфики работы, нет программной возможности снятия флага "Автозаполнение", по этому создается своя командная панель, а стандартная скрывается полностью. +// Имя новой командной панели <ИмяСписка>+"КоманднаяПанель2" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздТаблицаФормы(Форма, + ИмяТаблицы, + РодительТаблицы, + ПутьКДанным, + СтруктураКолонок = Неопределено, + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + СвояКоманднаяПанель = ЛОЖЬ, + ЭлементПеред = Неопределено + ) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураКолонок); + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ЕслиСтруктураНеопределеноТоНовая(СтруктураСобытий); + ОпределитьЭлементФормы(Форма,РодительТаблицы); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + Если СвояКоманднаяПанель Тогда + ГруппаДинамическогоСписка = СздГруппаОбычнаяБезОтображения(Форма,"ДополнительнаяГруппаКоманднаяПанель" + ИмяТаблицы,РодительТаблицы,1,1,1,,ЭлементПеред); + КоманднаяПанельСписка = СздГруппаКоманднаяПанель(Форма,ИмяТаблицы + "КоманднаяПанель2",ГруппаДинамическогоСписка); + ТаблицаФормы = СоздатьЭлементФормы(Форма,ИмяТаблицы,Тип("ТаблицаФормы"),ГруппаДинамическогоСписка); + ТаблицаФормы.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; + Иначе + ТаблицаФормы = СоздатьЭлементФормы(Форма,ИмяТаблицы,Тип("ТаблицаФормы"),РодительТаблицы,ЭлементПеред); + КонецЕсли; + + ТаблицаФормы.ПутьКДанным = ПутьКДанным; + + СоздатьКолонкиДляТаблицыФормы(Форма,ТаблицаФормы,СтруктураКолонок); + + УстановитьСвойстваЭлементу(ТаблицаФормы,СтруктураСвойств); + УстановитьСобытияЭлементу(ТаблицаФормы,СтруктураСобытий); + + Возврат ТаблицаФормы; + +КонецФункции + +// Создать обычную группу без отображения +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяГруппы - Строка - Имя элемента на форме +// РодительГруппы - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// ГруппировкаГруппы - Число - Принимаемые значения: +// 1 - Горизонтальная +// 2 - Вертикальная +// 3 - В ячейке +// 0 - Авто +// РастягиватьГоризонтально - Число - Принимаемые значения: +// 1 - ИСТИНА +// 2 - ЛОЖЬ +// 0 - Авто +// ОтображатьВШапке - Булево - Если необходимо вывести заголовок +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздГруппаКолонокТаблицыФормы(Форма, + ИмяГруппы, + РодительГруппы, + ГруппировкаГруппы = 0, + РастягиватьГоризонтально = 0, + ОтображатьВШапке = ЛОЖЬ, + Заголовок = "", + СтруктураСвойств = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ОпределитьЭлементФормы(Форма,РодительГруппы); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяГруппы,Тип("ГруппаФормы"),РодительГруппы,ЭлементПеред); + НовыйЭлемент.Вид = ВидГруппыФормы.ГруппаКолонок; + НовыйЭлемент.ОтображатьВШапке = ОтображатьВШапке; + НовыйЭлемент.Заголовок = Заголовок; + + ПолучитьСостояниеГруппировкиКолонкиЭлемента(НовыйЭлемент,ГруппировкаГруппы); + ПолучитьСостояниеРастягиванияЭлементаПоГоризонтали(НовыйЭлемент,РастягиватьГоризонтально); + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создание специфического элемента, выпадающий список. +// Создается автоматически строковый реквизит с идентичным названием +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяСписка - Строка - Имя элемента на форме +// РодительСписка - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// Заголовок - Строка - отображаемый заголовок кнопки +// МассивЗначений - Массив - массив значений выбора из списка (содержит строковый тип) +// РедактированиеТекста - Булево - Редактирование текста, если ЛОЖЬ, то можно выбирать только из списка +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздВыпадающийСписок(Форма, + ИмяСписка, + РодительСписка, + ЗаголовокЭлемента = "", + МассивЗначений, + РедактированиеТекста = ЛОЖЬ, + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + ЭлементПеред = Неопределено + ) Экспорт + + СоздатьРеквизит(Форма,ИмяСписка,ОписаниеТипаСтрока(100)); + НовыйРеквизит = Форма[ИмяСписка]; + НовыйЭлемент = СздПоле(Форма,ИмяСписка,РодительСписка,ЗаголовокЭлемента,1,ИмяСписка,СтруктураСвойств,СтруктураСобытий,ЭлементПеред); + НовыйЭлемент.КнопкаВыпадающегоСписка = ИСТИНА; + + Для Каждого текЭлемент Из МассивЗначений Цикл + НовыйЭлемент.СписокВыбора.Добавить(текЭлемент); + КонецЦикла; + + Если ЗаголовокЭлемента <> "" Тогда НовыйЭлемент.Заголовок = ЗаголовокЭлемента; КонецЕсли; + + НовыйЭлемент.РедактированиеТекста = РедактированиеТекста; + + Возврат НовыйЭлемент; + +КонецФункции + +// Создание специфического элемента, переключатель +// Создается автоматически реквизит с типом число с идентичным названием +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяПереключателя - Строка - Имя элемента на форме +// РодительЭлемента - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// Заголовок - Строка - отображаемый заголовок кнопки +// МассивЗначений - Массив - Массив значений выбора из списка (содержит строковый тип), +// Важно отметить, что номер в массиве соответствует номеру в списке выбора переключателя. +// тВидПереключателя - Число - Принимает значения: +// 1 - Переключатель +// 2 - Тумблер +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздПереключатель(Форма, + ИмяПереключателя, + РодительЭлемента, + ЗаголовокЭлемента = "", + МассивЗначений, + тВидПереключателя, + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + ЭлементПеред = Неопределено + ) Экспорт + + СоздатьРеквизит(Форма,ИмяПереключателя,ОписаниеТипаЧисло(10,0)); + НовыйРеквизит = Форма[ИмяПереключателя]; + НовыйЭлемент = СздПоле(Форма,ИмяПереключателя,РодительЭлемента,ЗаголовокЭлемента,4,ИмяПереключателя,СтруктураСвойств,СтруктураСобытий,ЭлементПеред); + + Если ЗаголовокЭлемента <> "" Тогда НовыйЭлемент.Заголовок = ЗаголовокЭлемента; КонецЕсли; + + Если тВидПереключателя <> 0 Тогда + НаборВидов = "Переключатель + |Тумблер"; + ВидПоля = СокрЛП(СтрПолучитьСтроку(НаборВидов,тВидПереключателя)); + НовыйЭлемент.ВидПереключателя = ВидПереключателя[ВидПоля]; + КонецЕсли; + + Счетчик = 0; + Для Каждого текЭлемент Из МассивЗначений Цикл + НовыйЭлемент.СписокВыбора.Добавить(Счетчик,текЭлемент); + Счетчик = Счетчик + 1; + КонецЦикла; + + Возврат НовыйЭлемент; + +КонецФункции + +// Создание поля гиперссылки +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяПоля - Строка - Имя элемента на форме +// РодительПоля - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// Заголовок - Строка - заголовок элемента +// БезЗаголовка - Булево - по умолчанию заголовок не выводится +// ПутьКДанным - Строка - Путь к данным значения +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздПолеГиперссылка(Форма, + ИмяПоля, + РодительПоля, + Заголовок = "", + БезЗаголовка = ИСТИНА, + ПутьКДанным = "", + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ЕслиСтруктураНеопределеноТоНовая(СтруктураСобытий); + ОпределитьЭлементФормы(Форма,РодительПоля); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяПоля,Тип("ПолеФормы"),РодительПоля,ЭлементПеред); + НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи; + НовыйЭлемент.Гиперссылка = ИСТИНА; + + Если БезЗаголовка Тогда НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет КонецЕсли; + + Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли; + Если ПутьКДанным <> "" Тогда НовыйЭлемент.ПутьКДанным = ПутьКДанным КонецЕсли; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + УстановитьСобытияЭлементу(НовыйЭлемент,СтруктураСобытий); + + Возврат НовыйЭлемент; + +КонецФункции + +// Создание поля Надпись +// +// Параметры: +// Форма - ФормаКлиентскогоПриложения - Форма на которой создаются элементы +// ИмяПоля - Строка - Имя элемента на форме +// РодительПоля - Строка - достаточно указать название элемента формы +// - Элементы - можно в качестве родителя передать элемент формы +// Заголовок - Строка - заголовок элемента +// БезЗаголовка - Булево - по умолчанию заголовок не выводится +// ПутьКДанным - Строка - Путь к данным значения +// СтруктураСвойств - Структура - Содержит значения свойств, где ключ название свойства и значение +// СтруктураСобытий - Структура - Содержит значения событий, где ключ название события и в значение название процедуры тип "строка" +// ЭлементПеред - Строка - достаточно указать название элемента формы перед которым требуется вставить новый элемент +// - Элементы - можно передать элемент формы +// +Функция СздПолеНадписи(Форма, + ИмяПоля, + РодительПоля, + Заголовок = "", + БезЗаголовка = ИСТИНА, + ПутьКДанным = "", + СтруктураСвойств = Неопределено, + СтруктураСобытий = Неопределено, + ЭлементПеред = Неопределено) Экспорт + + ЕслиСтруктураНеопределеноТоНовая(СтруктураСвойств); + ЕслиСтруктураНеопределеноТоНовая(СтруктураСобытий); + ОпределитьЭлементФормы(Форма,РодительПоля); + ОпределитьЭлементФормы(Форма,ЭлементПеред); + + НовыйЭлемент = СоздатьЭлементФормы(Форма,ИмяПоля,Тип("ПолеФормы"),РодительПоля,ЭлементПеред); + НовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи; + + Если БезЗаголовка Тогда НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет КонецЕсли; + + Если Заголовок <> "" Тогда НовыйЭлемент.Заголовок = Заголовок КонецЕсли; + Если ПутьКДанным <> "" Тогда НовыйЭлемент.ПутьКДанным = ПутьКДанным КонецЕсли; + + УстановитьСвойстваЭлементу(НовыйЭлемент,СтруктураСвойств); + УстановитьСобытияЭлементу(НовыйЭлемент,СтруктураСобытий); + + Возврат НовыйЭлемент; + +КонецФункции + +#КонецОбласти + +#Область УдалениеЭлементовИРеквизитов + +//Удалить реквизиты ранее созданный программно! +// +//Параметры: +// МассивУдаляемыхРеквизитов - Массив - Содержит строковые типы с именами реквизитов, ТОЛЬКО СОЗДАННЫЕ ПРОГРАММНО! +Процедура УдлРеквизиты(Форма,МассивУдаляемыхРеквизитов) Экспорт + Форма.ИзменитьРеквизиты(,МассивУдаляемыхРеквизитов); +КонецПроцедуры + +//Удалить реквизит ранее созданный программно! +// +//Параметры: +// ИмяРеквизита - Строка - Имя удаляемого реквизита, ТОЛЬКО СОЗДАННЫЕ ПРОГРАММНО! +Процедура УдлРеквизит(Форма,ИмяРеквизита) Экспорт + МассивУдаляемыхРеквизитов = Новый Массив; + МассивУдаляемыхРеквизитов.Добавить(ИмяРеквизита); + УдлРеквизиты(Форма,МассивУдаляемыхРеквизитов); +КонецПроцедуры + +//Удалить элементы ранее созданный программно! +// +//Параметры: +// МассивУдаляемыхЭлементов - Массив - Содержит строковые типы с именами удаляемых элементов, ТОЛЬКО СОЗДАННЫЕ ПРОГРАММНО! +Процедура УдлЭлементы(Форма,МассивУдаляемыхЭлементов) Экспорт + Для Каждого текЭлемент Из МассивУдаляемыхЭлементов Цикл + Если Форма.Элементы.Найти(текЭлемент) <> Неопределено Тогда + Форма.Элементы.Удалить(Форма.Элементы[текЭлемент]); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +//Удалить элемент ранее созданный программно! +// +//Параметры: +// ИмяРеквизита - Строка - Имя удаляемого элемента на форме, ТОЛЬКО СОЗДАННЫЕ ПРОГРАММНО! +Процедура УдлЭлемент(Форма,ИмяЭлемента) Экспорт + МассивУдаляемыхЭлементов = Новый Массив; + МассивУдаляемыхЭлементов.Добавить(ИмяЭлемента); + УдлЭлементы(Форма,МассивУдаляемыхЭлементов); +КонецПроцедуры + +//Удалить элемент и реквизит ранее созданный программно! +// +//Параметры: +// ИмяРеквизитаЭлемента - Строка - Имя удаляемого элемента и реквизита на форме СОВПАДАЕТ!!! и ТОЛЬКО СОЗДАННЫЕ ПРОГРАММНО! +Процедура УдлРеквизитИЭлемент(Форма,ИмяРеквизитаЭлемента) Экспорт + УдлРеквизит(Форма,ИмяРеквизитаЭлемента); + УдлЭлемент(Форма,ИмяРеквизитаЭлемента); +КонецПроцедуры + +#КонецОбласти + +#Область Свойства + +//Основные свойства поля ввода +// +// Параметры: +//Заголовок - Строка - Заголовок поля на форме +//Вид - ВидПоляФормы - Вид поля формы клиентского приложения +//ПутьКДанным - Строка - Путь к данным реквизита формы или объекта +//ПоложениеЗаголовка - ПоложениеЗаголовкаЭлементаФормы - Определяет положение заголовка относительно поля в макете формы. Следует заметить, что для отключения вывода заголовка следует установить это свойство в значение Нет. +//Видимость - Булево - Видимость элемента на форме +//Доступность - Булево - Доступность элемента на форме +//ТолькоПросмотр - Булево - Только просмотр элемента на форме +//ПропускатьПриВводе - Булево - Указывает необходимость пропуска поля при вводе данных +// - Неопределено - Авто +//АктивизироватьПоУмолчанию - Булево - Если свойство установлено, данный элемент будет активизирован при открытии формы +//ВажностьПриОтображении - ВажностьПриОтображении - Указывает важность элемента при отображении (используется для адаптации формы к ширине экрана мобильного устройства) +//Маска - Строка - (Поле ввода) Содержит посимвольную строку маски интерактивного ввода текста в поле. +//В строке маски допустимо использование следующих специальных символов: +//! - любой введенный символ преобразуется в верхний регистр; +//9 - допустимо ввести произвольный символ цифры; +//# - допустимо ввести произвольный символ цифры или - (знак минус) или + (знак плюс) или пробел; +//N - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры); +//U - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный символ преобразуется в верхний регистр; +//X (латинского алфавита) - допустимо ввести произвольный символ; +//^ - недопустимо вводить этот символ интерактивно пользователем, он может устанавливаться только из языка; +//h - допустим ввод символов обозначения шестнадцатеричных цифр; +//@ - допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре или пробел. +//Если в маске из специальных символов используются только символы "@", то все символы текста, соответствующие символам маски, не являющимся специальными символами, удаляются после последнего непустого блока из символов "@". Например, при маске "@@.@@.@@." текст "41. 2. ." преобразуется в "41.2". +//Для того, чтобы использовать в маске один из специальных символов, нужно использовать перед ним символ "\". +//Допускается указание нескольких масок в одном параметре. Маски разделяются символом ";". В этом случае использоваться будет та маска, к которой подходит введенный текст. +//РежимПароля - Булево - (Поле ввода, поле надписи) Содержит признак специального режима для ввода пароля, в котором все вводимые символы отображаются символом "*" (звездочка). +// - Неопределено - Авто +//МногострочныйРежим - Булево - Управляет многострочным режимом в поле ввода. +//РасширенноеРедактирование - Булево - (Поле ввода) Если свойство установлено в Истина, то включается расширенный режим редактирования, при котором само поле ввода обрабатывает нажатие клавиши TAB (в текст вставляется символ табуляции и переход к следующему полю не происходит), а также доступен поиск по тексту с помощью стандартных действий. +//Гиперссылка - Булево - (Поле надписи, поле картинки) можно обработать событие гиперссылки "ОбработкаНавигационнойСсылки" +// +Функция СтруктураСвойствОсновные(Заголовок = "", + Вид = Неопределено, + ПутьКДанным = "", + ПоложениеЗаголовка = Неопределено, + Видимость = Неопределено, + Доступность = Неопределено, + ТолькоПросмотр = Неопределено, + ПропускатьПриВводе = Неопределено, + АктивизироватьПоУмолчанию = Неопределено, + Маска = "", + РежимПароля = Неопределено, + МногострочныйРежим = Неопределено, + РасширенноеРедактирование = Неопределено, + Гиперссылка = Неопределено) Экспорт + + СтруктураСвойств = Новый Структура; + + Если Заголовок <> "" Тогда СтруктураСвойств.Вставить("Заголовок",Заголовок) КонецЕсли; + Если Вид <> Неопределено Тогда СтруктураСвойств.Вставить("Вид",Вид) КонецЕсли; + Если ПутьКДанным <> "" Тогда СтруктураСвойств.Вставить("ПутьКДанным",ПутьКДанным) КонецЕсли; + Если ПоложениеЗаголовка <> Неопределено Тогда СтруктураСвойств.Вставить("ПоложениеЗаголовка",ПоложениеЗаголовка) КонецЕсли; + Если Видимость <> Неопределено Тогда СтруктураСвойств.Вставить("Видимость",Видимость) КонецЕсли; + Если Доступность <> Неопределено Тогда СтруктураСвойств.Вставить("Доступность",Доступность) КонецЕсли; + Если ТолькоПросмотр <> Неопределено Тогда СтруктураСвойств.Вставить("ТолькоПросмотр",ТолькоПросмотр) КонецЕсли; + Если ПропускатьПриВводе <> Неопределено Тогда СтруктураСвойств.Вставить("ПропускатьПриВводе",ПропускатьПриВводе) КонецЕсли; + Если АктивизироватьПоУмолчанию <> Неопределено Тогда СтруктураСвойств.Вставить("АктивизироватьПоУмолчанию",АктивизироватьПоУмолчанию) КонецЕсли; + Если Маска <> "" Тогда СтруктураСвойств.Вставить("Маска",Маска) КонецЕсли; + Если РежимПароля <> Неопределено Тогда СтруктураСвойств.Вставить("РежимПароля",РежимПароля) КонецЕсли; + Если МногострочныйРежим <> Неопределено Тогда СтруктураСвойств.Вставить("МногострочныйРежим",МногострочныйРежим) КонецЕсли; + Если РасширенноеРедактирование <> Неопределено Тогда СтруктураСвойств.Вставить("РасширенноеРедактирование",РасширенноеРедактирование) КонецЕсли; + Если Гиперссылка <> Неопределено Тогда СтруктураСвойств.Вставить("Гиперссылка",Гиперссылка) КонецЕсли; + + Возврат СтруктураСвойств; + +КонецФункции + +//Свойства Подсказка +// +// Параметры: +// Подсказка - Строка - Текст подсказки +// ОтображениеПодсказки - ОтображениеПодсказки - Задает способ отображения подсказки элемента формы +// ПодсказкаВвода - Строка - Текст подсказки ввода в поле формы +Функция СтруктураСвойствПодсказка(Подсказка = Неопределено, + ОтображениеПодсказки = Неопределено, + ПодсказкаВвода = Неопределено) Экспорт + + СтруктураСвойств = Новый Структура; + + Если Подсказка <> Неопределено Тогда СтруктураСвойств.Вставить("Подсказка",Подсказка) КонецЕсли; + Если ОтображениеПодсказки <> Неопределено Тогда СтруктураСвойств.Вставить("ОтображениеПодсказки",ОтображениеПодсказки) КонецЕсли; + Если ПодсказкаВвода <> Неопределено Тогда СтруктураСвойств.Вставить("ПодсказкаВвода",ПодсказкаВвода) КонецЕсли; + + Возврат СтруктураСвойств; + +КонецФункции + +//Свойства размеров +// +// Параметры: +// Ширина - Число - Ширина элемента +// Высота - Число - Высота элемента +// АвтоМаксимальнаяШирина - Булево - Отключение автоматической ширины +// МаксимальнаяШирина - Число - Максимальная ширина элемента на форме, работает если АвтоМаксимальнаяШирина - ОТКЛЮЧЕНА +// АвтоМаксимальнаяВысота - Булево - Отключение автоматической высоты +// МаксимальнаяВысота - Число - Максимальная высота элемента на форме, работает если АвтоМаксимальнаяВысота - ОТКЛЮЧЕНА +// РастягиватьПоГоризонтали - Булево - Если требуется принудительно задать автоматическое растягивание по ширине +// РастягиватьПоВертикали - Булево - Если требуется принудительно задать автоматическое растягивание по высоте +// тГоризонтальноеПоложение - Число - Принимаемые значения: +// 1 - Лево +// 2 - Центр +// 3 - Право +// 0 - Авто +// тГоризонтальноеПоложениеВШапке - Число - Принимаемые значения: +// 1 - Лево +// 2 - Центр +// 3 - Право +// 0 - Авто +// тГоризонтальноеПоложениеВПодвале - Число - Принимаемые значения: +// 1 - Лево +// 2 - Центр +// 3 - Право +// 0 - Авто +// +Функция СтруктураСвойствРасположение(Ширина = Неопределено, + Высота = Неопределено, + АвтоМаксимальнаяШирина = Неопределено, + МаксимальнаяШирина = Неопределено, + АвтоМаксимальнаяВысота = Неопределено, + МаксимальнаяВысота = Неопределено, + РастягиватьПоГоризонтали = Неопределено, + РастягиватьПоВертикали = Неопределено, + тГоризонтальноеПоложение = Неопределено, + тГоризонтальноеПоложениеВШапке = Неопределено, + тГоризонтальноеПоложениеВПодвале = Неопределено) Экспорт + + СтруктураСвойств = Новый Структура; + + Если Ширина <> Неопределено Тогда СтруктураСвойств.Вставить("Ширина",Ширина) КонецЕсли; + Если Высота <> Неопределено Тогда СтруктураСвойств.Вставить("Высота",Высота) КонецЕсли; + Если АвтоМаксимальнаяШирина <> Неопределено Тогда СтруктураСвойств.Вставить("АвтоМаксимальнаяШирина",АвтоМаксимальнаяШирина) КонецЕсли; + Если МаксимальнаяШирина <> Неопределено Тогда СтруктураСвойств.Вставить("МаксимальнаяШирина",МаксимальнаяШирина) КонецЕсли; + Если АвтоМаксимальнаяВысота <> Неопределено Тогда СтруктураСвойств.Вставить("АвтоМаксимальнаяВысота",АвтоМаксимальнаяВысота) КонецЕсли; + Если МаксимальнаяВысота <> Неопределено Тогда СтруктураСвойств.Вставить("МаксимальнаяВысота",МаксимальнаяВысота) КонецЕсли; + Если РастягиватьПоГоризонтали <> Неопределено Тогда СтруктураСвойств.Вставить("РастягиватьПоГоризонтали",РастягиватьПоГоризонтали) КонецЕсли; + Если РастягиватьПоВертикали <> Неопределено Тогда СтруктураСвойств.Вставить("РастягиватьПоВертикали",РастягиватьПоВертикали) КонецЕсли; + Если тГоризонтальноеПоложение <> Неопределено Тогда СтруктураСвойств.Вставить("ГоризонтальноеПоложение",ПолучитьГоризонтальноеПоложение(тГоризонтальноеПоложение)) КонецЕсли; + Если тГоризонтальноеПоложениеВШапке <> Неопределено Тогда СтруктураСвойств.Вставить("ГоризонтальноеПоложениеВШапке",ПолучитьГоризонтальноеПоложение(тГоризонтальноеПоложениеВШапке)) КонецЕсли; + Если тГоризонтальноеПоложениеВПодвале <> Неопределено Тогда СтруктураСвойств.Вставить("ГоризонтальноеПоложениеВПодвале",ПолучитьГоризонтальноеПоложение(тГоризонтальноеПоложениеВПодвале)) КонецЕсли; + + Возврат СтруктураСвойств; + +КонецФункции + +//Свойства Таблицы формы +// +// Параметры: +// Отображение - ОтображениеТаблицы - Отображение данных в таблице +// РежимВводаСтрок - РежимВводаСтрокТаблицы - Режим ввода строк в таблице +// РежимВыделения - РежимВыделенияТаблицы - Определяет режим выделения строк в таблице +// РежимВыделенияСтроки - РежимВыделенияСтрокиТаблицы - Определяет режим выделения строки в таблице +// Шапка - Булево - Определяет наличие шапки у таблицы +// Подвал - Булево - Определяет наличие подвала у таблицы +// АвтоВводНовойСтроки - Булево - Содержит признак автоматического ввода новой строки после заполнения текущей +// ВысотаВСтрокахТаблицы - Число - Содержит высоту таблицы. Задается в строках. Указывает количество строк, отображаемых в области данных таблицы. Таблица занимает такую высоту, чтобы разместились шапка, подвал и заданное число строк в области данных. Число строк в общем случае не является числом записей данных, отображаемых в таблице, так как одна запись данных может выводиться в несколько строк таблицы. Более того, разные строки данных могут занимать разную высоту +Функция СтруктураСвойствТаблицыФормы(Отображение = Неопределено, + РежимВводаСтрок = Неопределено, + РежимВыделения = Неопределено, + РежимВыделенияСтроки = Неопределено, + Шапка = Неопределено, + Подвал = Неопределено, + АвтоВводНовойСтроки = Неопределено, + ВысотаВСтрокахТаблицы = Неопределено) Экспорт + + СтруктураСвойств = Новый Структура; + + Если Отображение <> Неопределено Тогда СтруктураСвойств.Вставить("Отображение",Отображение) КонецЕсли; + Если РежимВводаСтрок <> Неопределено Тогда СтруктураСвойств.Вставить("РежимВводаСтрок",РежимВводаСтрок) КонецЕсли; + Если РежимВыделения <> Неопределено Тогда СтруктураСвойств.Вставить("РежимВыделения",РежимВыделения) КонецЕсли; + Если РежимВыделенияСтроки <> Неопределено Тогда СтруктураСвойств.Вставить("РежимВыделенияСтроки",РежимВыделенияСтроки) КонецЕсли; + Если Шапка <> Неопределено Тогда СтруктураСвойств.Вставить("Шапка",Шапка) КонецЕсли; + Если Подвал <> Неопределено Тогда СтруктураСвойств.Вставить("Подвал",Подвал) КонецЕсли; + Если АвтоВводНовойСтроки <> Неопределено Тогда СтруктураСвойств.Вставить("АвтоВводНовойСтроки",АвтоВводНовойСтроки) КонецЕсли; + Если ВысотаВСтрокахТаблицы <> Неопределено Тогда СтруктураСвойств.Вставить("ВысотаВСтрокахТаблицы",ВысотаВСтрокахТаблицы) КонецЕсли; + + Возврат СтруктураСвойств; + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +// Функция - Очистить от запрещенных символов +// +// Параметры: +// ПроверяемаяСтрока - Строка - Имя элемента +// ДопРазрешенныеСимволы - Строка - Дополнительно разрешенные символы +// +// Возвращаемое значение: +// Строка - Имя элемента очищенное от запрещенных символов +// +Функция ОчиститьОтЗапрещенныхСимволов(ПроверяемаяСтрока, ДопРазрешенныеСимволы = Неопределено) + + Если НЕ ЗначениеЗаполнено(ПроверяемаяСтрока) Тогда + Возврат ПроверяемаяСтрока; + КонецЕсли; + + ОчищеннаяСтрока = ""; + + РазрешенныеСимволы = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" + + "abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM" + + "0123456789_"; + + Если ЗначениеЗаполнено(ДопРазрешенныеСимволы) Тогда + РазрешенныеСимволы = РазрешенныеСимволы + ДопРазрешенныеСимволы; + КонецЕсли; + + Для Сч = 1 по СтрДлина(СокрЛП(ПроверяемаяСтрока)) Цикл + ТекСимв = Сред(ПроверяемаяСтрока, Сч, 1); + + Если Найти(РазрешенныеСимволы, ТекСимв) > 0 Тогда + ОчищеннаяСтрока = ОчищеннаяСтрока + ТекСимв; + КонецЕсли; + + КонецЦикла; + + Возврат ОчищеннаяСтрока; + +КонецФункции + +#КонецОбласти +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание групп формы.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание групп формы.md new file mode 100644 index 0000000..39c3c72 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание групп формы.md @@ -0,0 +1,53 @@ + +### Обычная группа без отображения +```bsl +ГруппаДатаНомер = Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма); +ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа; +ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет; +ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ; +ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда; +``` + +### Обычная группа +```bsl +//Пример создания обычной группы +ГруппаШапка = Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"), ЭтотОбъект); +ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа; +ГруппаШапка.Заголовок = "Основные реквизиты"; +ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение; +ГруппаШапка.ОтображатьЗаголовок = ИСТИНА; +ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; +ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА; +``` + +### Свертываемая группа +```bsl +ГруппаХарактеристики = Элементы.Добавить("СвертываемаяГруппа", Тип("ГруппаФормы"), Элементы.СтраницаКонтейнер); +ГруппаХарактеристики.Заголовок = "СвертываемаяГруппа"; +ГруппаХарактеристики.Вид = ВидГруппыФормы.ОбычнаяГруппа; +ГруппаХарактеристики.Поведение = ПоведениеОбычнойГруппы.Свертываемая; +ГруппаХарактеристики.ОтображатьОтступСлева = Истина; +ГруппаХарактеристики.ОтображениеУправления = ОтображениеУправленияОбычнойГруппы.Картинка; + +``` + +### Группа страниц +```bsl +//Пример создания группы страниц +ГруппаСтраниц = Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"), ЭтотОбъект); +ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы; +ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; +ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА; + +``` + +### Страницы +```bsl +СтраницаТовары = Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"), ГруппаСтраниц); +СтраницаТовары.Вид = ВидГруппыФормы.Страница; +СтраницаТовары.Заголовок = "Товары"; + +СтраницаДополнительно = Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"), ГруппаСтраниц); +СтраницаДополнительно.Вид = ВидГруппыФормы.Страница; +СтраницаДополнительно.Заголовок = "Дополнительно"; +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание декораций формы.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание декораций формы.md new file mode 100644 index 0000000..e044b3e --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание декораций формы.md @@ -0,0 +1,15 @@ +### Декорация "Надпись" +```bsl +НовыйЭлемент = Элементы.Добавить("ЗаголовокТовара", Тип("ДекорацияФормы"),СтраницаТовары); +НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись; +НовыйЭлемент.Заголовок = "Глобус"; +``` +### Декорация "Картинка" +```bsl +НовыйЭлемент = Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары); +НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка; +НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема; +НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть; +НовыйЭлемент.Ширина = 20; +НовыйЭлемент.Высота = 8; +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание команд и кнопок.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание команд и кнопок.md new file mode 100644 index 0000000..ddb95e4 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание команд и кнопок.md @@ -0,0 +1,14 @@ + +Для работы кнопок, необходимо наличие команды. Если на форме нет определенной команды, то её необходимо создать программно. +### Создаем команду +```bsl +НоваяКоманда = Команды.Добавить("ОбщаяКоманда"); +НоваяКоманда.Заголовок = "Общая команда"; +НоваяКоманда.Действие = "ОбщееДействие"; //указываем только имя процедуры +``` +### Создаем кнопку +```bsl +НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Кнопка1", Тип("КнопкаФормы"),СтраницаТовары); +НовыйЭлемент.Заголовок = "Привет мир!"; +НовыйЭлемент.ИмяКоманды = "ОбщаяКоманда"; +``` diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание полей формы.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание полей формы.md new file mode 100644 index 0000000..5fe48a6 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание полей формы.md @@ -0,0 +1,23 @@ +```bsl +//Создание полей + +НовыйЭлемент = Элементы.Добавить("Номер", Тип("ПолеФормы"),ГруппаДатаНомер); +НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; +НовыйЭлемент.ПутьКДанным = "Номер"; + +НовыйЭлемент = Элементы.Добавить("Дата", Тип("ПолеФормы"),ГруппаДатаНомер); +НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; +НовыйЭлемент.ПутьКДанным = "Дата"; + +НовыйЭлемент = Элементы.Добавить("Наименование", Тип("ПолеФормы"),ГруппаШапка); +НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; +НовыйЭлемент.ПутьКДанным = "Наименование"; + +НовыйЭлемент = Элементы.Добавить("Комментарий", Тип("ПолеФормы"),СтраницаДополнительно); +НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; +НовыйЭлемент.ПутьКДанным = "Комментарий"; + +НовыйЭлемент = Элементы.Добавить("ПометкаУдаления", Тип("ПолеФормы"),СтраницаДополнительно); +НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка; +НовыйЭлемент.ПутьКДанным = "ПометкаУдаления"; +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание реквизитов формы.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание реквизитов формы.md new file mode 100644 index 0000000..2925a6a --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание реквизитов формы.md @@ -0,0 +1,61 @@ + +## Пример добавления + +```1c +ДобавляемыеРеквизиты = Новый Массив; // Определяем массив добавляемых реквизитов + +НовыйРеквизит = Новый РеквизитФормы( + "Комментарий", + Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500)) +); +ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + +НовыйРеквизит = Новый РеквизитФормы( + "Номер", + Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0)) +); +ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + +НовыйРеквизит = Новый РеквизитФормы( + "Дата", + Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)) +); +ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + +НовыйРеквизит = Новый РеквизитФормы( + "Наименование", + Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)) +); +ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + +НовыйРеквизит = Новый РеквизитФормы( + "ПометкаУдаления", + Новый ОписаниеТипов("Булево") +); +ДобавляемыеРеквизиты.Добавить(НовыйРеквизит); + +ЭтотОбъект.ИзменитьРеквизиты(ДобавляемыеРеквизиты); +``` + +### Синтаксис + +#### **`ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)`** + +### Параметры + +#### `<ДобавляемыеРеквизиты>` (необязательный) + +- **Тип:** `Массив` +- **Описание:** Массив, содержащий объекты типа `РеквизитФормы`. + +Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками. +К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции: + +```1c +ЭтотОбъект.<Имя реквизита> +``` + +#### `<УдаляемыеРеквизиты>` (необязательный) + +- **Тип:** `Массив` +- **Описание:** Массив, содержащий строки, описывающие пути к удаляемым реквизитам. diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание таблиц формы.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание таблиц формы.md new file mode 100644 index 0000000..42fbbf0 --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Программное создание элементов формы/Создание таблиц формы.md @@ -0,0 +1,20 @@ +Для работы таблицы формы необходимо наличие реквизита **`Таблица значений`** или **`Динамический список`**. Не забывайти про путь, если таблица находиться в объекте, тогда указываем полный путь, пример: **`Объект.Товары`** и так же для колонок **`Объект.Товары.Номенклатура`**. + +### Создаем таблицу +```bsl +ТаблицаФормы = Элементы.Добавить("МояТаблицаТоваров", Тип("ТаблицаФормы"),ЭтотОбъект); +ТаблицаФормы.ПутьКДанным = "Объект.Товары"; +``` + +### Создаем колонки +```bsl +//Создаем колонку для выбора и ввода +НовыйЭлемент = Форма.Элементы.Добавить("МояТаблицаТоваровНоменклатура",Тип("ПолеФормы"),ТаблицаФормы); +НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; +НовыйЭлемент.ПутьКДанным = "Объект.Товары.Номенклатура"; + +//Создаем колонку для булево +НовыйЭлемент = Форма.Элементы.Добавить("МояТаблицаТоваровПроведен",Тип("ПолеФормы"),ТаблицаФормы); +НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка; +НовыйЭлемент.ПутьКДанным = "Объект.Товары.Используется"; +``` \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Управляемые формы/Условное оформление программно.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Условное оформление программно.md similarity index 96% rename from src/content/docs/knowledge-base/Примеры, сниппеты/Управляемые формы/Условное оформление программно.md rename to src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Условное оформление программно.md index 82c930e..d3395b5 100644 --- a/src/content/docs/knowledge-base/Примеры, сниппеты/Управляемые формы/Условное оформление программно.md +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Условное оформление программно.md @@ -17,7 +17,8 @@ НовыйЭлемент = УсловноеОформление.Элементы.Добавить(); НовыйЭлемент.Использование = Истина; - // Настраиваем оформление. Варианты параметров можно посмотреть в форме настройки условного оформления на форме + // Настраиваем оформление. Варианты параметров можно посмотреть в форме настройки условного оформления на форме + //(цвет фона, цвет текста, видимость, доступность и пр.) НовыйЭлемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветВажного); НовыйЭлемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ЦветФонаГруппировкиОтчета1); diff --git a/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Форма выбора даты и времени.md b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Форма выбора даты и времени.md new file mode 100644 index 0000000..ffe82bb --- /dev/null +++ b/src/content/docs/knowledge-base/Примеры, сниппеты/Общее/Управляемые формы/Форма выбора даты и времени.md @@ -0,0 +1,156 @@ +## 📝 Описание + +Стандартные формы выбора даты не предполагают выбор времени — его нужно вводить вручную в поле ввода. Для удобства можно создать собственную форму и вызывать её при выборе даты в поле ввода. + +## 🛠 Создание формы, параметров, реквизитов + +1. Создаём новую форму с реквизитами: + - `День` (тип: Дата) + - `Часы` (тип: Число) + - `Минуты` (тип: Число) + +2. Размещаем реквизиты на форме и объединяем их в группу с горизонтальной группировкой. + +3. Создаём ключевой параметр `Дата` (тип: Дата, состав: Дата и время), в который будем передавать исходную дату в форму извне. + +![Изображение 1.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F16&files=aa602e3a-8359-411c-be66-4df036543426.png) + +4. Для реквизитов `Часы` и `Минуты` устанавливаем вид как «Поле переключателя» с видом переключателя «Тумблер». + +5. Для `Часы` определяем список выбора и устанавливаем количество колонок = 2. + +![Изображение 2.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F16&files=1df97832-daf2-4cae-96e1-3524b06f712f.png) + +6. Для `Минуты` делаем аналогично, но количество колонок = 1 и список выбора немного другой. + +7. Добавляем команду `Выбрать` и размещаем её на командной панели. + +8. Добавляем декорацию `Представление времени`, настраиваем шрифт, цвет и прочее. Эта декорация будет показывать выбранные значения. + +## 🧩 Модуль формы + +### Обработчики событий формы + +```bsl +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если ЗначениеЗаполнено(Параметры.Дата) Тогда + СтруктураДаты = СтруктураДаты(Параметры.Дата); + День = Параметры.Дата; + Часы = СтруктураДаты.Час; + Минуты = СтруктураДаты.Минута; + Иначе + День = ТекущаяДатаСеанса(); + Часы = 8; + Минуты = 0; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ОбновитьДекорациюВыбранноеВремя(); +КонецПроцедуры +``` + +### Обработчики событий элементов шапки формы + +```bsl +&НаКлиенте +Процедура ДеньВыбор(Элемент, ВыбраннаяДата) + ВыбратьДатуВремя(); +КонецПроцедуры + +&НаКлиенте +Процедура ДеньПриИзменении(Элемент) + ОбновитьДекорациюВыбранноеВремя(); +КонецПроцедуры + +&НаКлиенте +Процедура ЧасыПриИзменении(Элемент) + ОбновитьДекорациюВыбранноеВремя(); +КонецПроцедуры + +&НаКлиенте +Процедура МинутыПриИзменении(Элемент) + ОбновитьДекорациюВыбранноеВремя(); +КонецПроцедуры +``` + +### Обработчики команд формы + +```bsl +&НаКлиенте +Процедура Выбрать(Команда) + ВыбратьДатуВремя(); +КонецПроцедуры +``` + +### Служебные процедуры и функции + +```bsl +&НаКлиенте +Процедура ВыбратьДатуВремя() + СтруктураДаты = СтруктураДаты(День); + ВыбраннаяДатаВремя = Дата(СтруктураДаты.Год, СтруктураДаты.Месяц, СтруктураДаты.День, Часы, Минуты, 0); + ОповеститьОВыборе(ВыбраннаяДатаВремя); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьДекорациюВыбранноеВремя() + ВыбранноеВремя = СтрШаблон("Выбрано: %1 %2 ч. %3 мин.", + Формат(День, "ДФ='дд ММММ гггг "г."'"), + Формат(Часы, "ЧЦ=2; ЧН=00; ЧВН="), + Формат(Минуты, "ЧЦ=2; ЧН=00; ЧВН=")); + Элементы.ПредставлениеВремени.Заголовок = ВыбранноеВремя; +КонецПроцедуры + +&НаКлиенте +Функция СтруктураДаты(Дата) Экспорт + Структура = Новый Структура; + Структура.Вставить("Год", 1); + Структура.Вставить("Месяц", 1); + Структура.Вставить("День", 1); + Структура.Вставить("Час", 0); + Структура.Вставить("Минута", 0); + Структура.Вставить("Секунда", 0); + Если ТипЗнч(Дата) = Тип("Дата") Тогда + Структура.Год = Год(Дата); + Структура.Месяц = Месяц(Дата); + Структура.День = День(Дата); + Структура.Час = Час(Дата); + Структура.Минута = Минута(Дата); + Структура.Секунда = Секунда(Дата); + КонецЕсли; + Возврат Структура; +КонецФункции +``` + +## 🚀 Вызов формы + +Определяем два обработчика событий произвольного реквизита формы с типом дата — `НачалоВыбора` и `ОбработкаВыбора`. + +В обработчике `НачалоВыбора` вызываем нашу форму. При вызове владельцем нужно указать элемент формы, который инициировал выбор. + +```bsl +&НаКлиенте +Процедура ДатаВремяУбытияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Дата", Объект.ДатаВремяУбытия); + + ОткрытьФорму("ОбщаяФорма.УТЗ_ПЛ_ВыборСтантартногоПериодаСоВременем", ПараметрыФормы, + Элементы.ДатаВремяУбытия, УникальныйИдентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура ДатаВремяУбытияОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, СтандартнаяОбработка) + + Если ЗначениеЗаполнено(ВыбранноеЗначение) Тогда + Объект.ДатаВремяУбытия = ВыбранноеЗначение; + КонецЕсли; + +КонецПроцедуры +``` \ No newline at end of file