From 4c378ceb8226bbc4e20565733a891dfd899a4d0c Mon Sep 17 00:00:00 2001 From: Ilya Konchakov Date: Fri, 16 Jan 2026 11:37:23 +0300 Subject: [PATCH] first commit --- ШаблонДополнительнойОбработки/.project | 18 + .../.settings/com._1c.g5.v8.dt.platform.services.core.prefs | 2 + .../.settings/com.e1c.v8codestyle.autosort.prefs | 2 + .../.settings/com.e1c.v8codestyle.bsl.prefs | 3 + .../.settings/com.e1c.v8codestyle.prefs | 3 + .../.settings/org.eclipse.core.resources.prefs | 2 + .../DT-INF/PROJECT.PMF | 3 + .../bin/ШаблонДополнительнойОбработки.epf | Bin 0 -> 57178 bytes .../ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Form.form | 606 +++ .../ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Module.bsl | 170 + .../ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Form.form | 545 +++ .../ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Module.bsl | 402 ++ .../Forms/РедактированиеТипа/ConditionalAppearance.dcssca | 23 + .../ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Form.form | 2066 +++++++++++ .../ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Module.bsl | 882 +++++ .../ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Form.form | 3287 +++++++++++++++++ .../Forms/ФормаНастроек/Items/НастройкиКомандыБезопасноеХранилищеТипКонтейнера/ValuesPicture.png | Bin 0 -> 703 bytes .../Forms/ФормаНастроек/Items/НастройкиКомандыТипКонтейнера/ValuesPicture.png | Bin 0 -> 703 bytes .../Forms/ФормаНастроек/Items/НастройкиОбработкиБезопасноеХранилищеТипКонтейнера/ValuesPicture.png | Bin 0 -> 703 bytes .../Forms/ФормаНастроек/Items/НастройкиОбработкиТипКонтейнера/ValuesPicture.png | Bin 0 -> 703 bytes .../ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Module.bsl | 1304 +++++++ .../ExternalDataProcessors/ШаблонДополнительнойОбработки/ObjectModule.bsl | 1033 ++++++ .../ШаблонДополнительнойОбработки/ШаблонДополнительнойОбработки.mdo | 53 + 23 files changed, 10404 insertions(+) create mode 100644 ШаблонДополнительнойОбработки/.project create mode 100644 ШаблонДополнительнойОбработки/.settings/com._1c.g5.v8.dt.platform.services.core.prefs create mode 100644 ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.autosort.prefs create mode 100644 ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.bsl.prefs create mode 100644 ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.prefs create mode 100644 ШаблонДополнительнойОбработки/.settings/org.eclipse.core.resources.prefs create mode 100644 ШаблонДополнительнойОбработки/DT-INF/PROJECT.PMF create mode 100644 ШаблонДополнительнойОбработки/bin/ШаблонДополнительнойОбработки.epf create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Form.form create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Module.bsl create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Form.form create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Module.bsl create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/ConditionalAppearance.dcssca create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Form.form create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Module.bsl create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Form.form create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыБезопасноеХранилищеТипКонтейнера/ValuesPicture.png create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыТипКонтейнера/ValuesPicture.png create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиБезопасноеХранилищеТипКонтейнера/ValuesPicture.png create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиТипКонтейнера/ValuesPicture.png create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Module.bsl create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/ObjectModule.bsl create mode 100644 ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/ШаблонДополнительнойОбработки.mdo diff --git a/ШаблонДополнительнойОбработки/.project b/ШаблонДополнительнойОбработки/.project new file mode 100644 index 0000000..10c1fce --- /dev/null +++ b/ШаблонДополнительнойОбработки/.project @@ -0,0 +1,18 @@ + + + ШаблонДополнительнойОбработки + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + com._1c.g5.v8.dt.core.V8ExternalObjectsNature + + diff --git a/ШаблонДополнительнойОбработки/.settings/com._1c.g5.v8.dt.platform.services.core.prefs b/ШаблонДополнительнойОбработки/.settings/com._1c.g5.v8.dt.platform.services.core.prefs new file mode 100644 index 0000000..4f1e2a2 --- /dev/null +++ b/ШаблонДополнительнойОбработки/.settings/com._1c.g5.v8.dt.platform.services.core.prefs @@ -0,0 +1,2 @@ +com._1c.g5.v8.dt.platform.services.core.PREF_AUTO_EXT_OBJECT_DUMP_GENERATION=true +eclipse.preferences.version=1 diff --git a/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.autosort.prefs b/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.autosort.prefs new file mode 100644 index 0000000..23b0625 --- /dev/null +++ b/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.autosort.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +topObjects=true diff --git a/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.bsl.prefs b/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.bsl.prefs new file mode 100644 index 0000000..ac5ba52 --- /dev/null +++ b/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.bsl.prefs @@ -0,0 +1,3 @@ +addModuleStrictTypesAnnotation=false +createModuleStructure=false +eclipse.preferences.version=1 diff --git a/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.prefs b/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.prefs new file mode 100644 index 0000000..9e9b57e --- /dev/null +++ b/ШаблонДополнительнойОбработки/.settings/com.e1c.v8codestyle.prefs @@ -0,0 +1,3 @@ +commonChecks=true +eclipse.preferences.version=1 +standardChecks=true diff --git a/ШаблонДополнительнойОбработки/.settings/org.eclipse.core.resources.prefs b/ШаблонДополнительнойОбработки/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/ШаблонДополнительнойОбработки/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/ШаблонДополнительнойОбработки/DT-INF/PROJECT.PMF b/ШаблонДополнительнойОбработки/DT-INF/PROJECT.PMF new file mode 100644 index 0000000..431dd2b --- /dev/null +++ b/ШаблонДополнительнойОбработки/DT-INF/PROJECT.PMF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Runtime-Version: 8.5.1 +Base-Project: БСПШаблонДополнительнойОбработки diff --git a/ШаблонДополнительнойОбработки/bin/ШаблонДополнительнойОбработки.epf b/ШаблонДополнительнойОбработки/bin/ШаблонДополнительнойОбработки.epf new file mode 100644 index 0000000000000000000000000000000000000000..7609e4f6a66b92b3efe0a5904ecd8afceda31284 GIT binary patch literal 57178 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 Dr*jtP literal 0 HcmV?d00001 diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Form.form b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Form.form new file mode 100644 index 0000000..3d94041 --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Form.form @@ -0,0 +1,606 @@ + + + + СписокЭлементов + 1 + true + true + + true + + + СписокЭлементов + + None + + СписокЭлементовЗначение + 14 + true + true + + true + + + СписокЭлементов.Value + + + СписокЭлементовЗначениеРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СписокЭлементовЗначениеКонтекстноеМеню + 15 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + СписокЭлементовЗначениеНачалоВыбора + + + ChoiceProcessing + СписокЭлементовЗначениеОбработкаВыбора + + true + true + true + true + false + FoldersAndItems + true + true + true + Normal + + + + СписокЭлементовКоманднаяПанель + 3 + + СписокЭлементовДобавить + 17 + true + true + + true + + + СписокЭлементовДобавитьРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Item.СписокЭлементов.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + + + СписокЭлементовПодбор + 19 + true + true + + true + + + СписокЭлементовПодборРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Item.СписокЭлементов.StandardCommand.Pickup + Normal + Auto + true + true + UserCmds + Auto + + + СписокЭлементовСкопировать + 27 + true + true + + true + + + СписокЭлементовСкопироватьРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.Item.СписокЭлементов.StandardCommand.Copy + Normal + Picture + true + true + UserCmds + Auto + + + СписокЭлементовУдалить + 21 + true + true + + true + + + СписокЭлементовУдалитьРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Item.СписокЭлементов.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + + + СписокЭлементовПереместитьВверх + 23 + true + true + + true + + + СписокЭлементовПереместитьВверхРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Form.Item.СписокЭлементов.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + + + СписокЭлементовПереместитьВниз + 25 + true + true + + true + + + СписокЭлементовПереместитьВнизРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Item.СписокЭлементов.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + + + СписокЭлементовКомандаОчистить + 41 + true + true + + true + + + СписокЭлементовКомандаОчиститьРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Command.КомандаОчистить + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + СписокЭлементовСтрокаПоиска + 5 + + СписокЭлементовСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + СписокЭлементовСтрокаПоискаКонтекстноеМеню + 6 + true + + СписокЭлементов + + true + + + + СписокЭлементовСостояниеПросмотра + 8 + + СписокЭлементовСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + СписокЭлементовСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + СписокЭлементов + + true + + + + СписокЭлементовУправлениеПоиском + 11 + + СписокЭлементовУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СписокЭлементовУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + СписокЭлементов + + true + + + + СписокЭлементовРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + СписокЭлементовКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow + Auto + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + + СписокЭлементов.Picture + + true + + + ГруппаКоманднаяПанельНижняя + 33 + + КнопкаОК + 39 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + true + + КнопкаОКРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Command.КомандаОК + Normal + Auto + true + true + true + UserCmds + Auto + + + КомандаОтмена + 37 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + КомандаОтменаРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель нижняя</value> + + + ru + Группа командная панель нижняя + + + ГруппаКоманднаяПанельНижняяРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + CustomizeForm + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 50 + true + true + Auto + true + true + true + auto + true + + Объект + 1 + + ExternalDataProcessor.ШаблонДополнительнойОбработки + + + true + + + true + +
true
+
+ + СписокЭлементов + + <key>ru</key> + <value>Список элементов</value> + + 2 + + ValueList + + + true + + + true + + + + + + + ТипКонтейнера + + <key>ru</key> + <value>Тип контейнера</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + ПутьМетаданных + + <key>ru</key> + <value>Путь метаданных</value> + + 3 + + String + + + + true + + + true + + + + КомандаОК + + <key>ru</key> + <value>Команда ОК</value> + + 1 + + ru + Команда ОК + + + true + + + + КомандаОК + + + DontUse + Auto + + + КомандаОчистить + + <key>ru</key> + <value>Очистить</value> + + 2 + + ru + Команда очистить + + + true + + + + КомандаОчистить + + + DontUse + Auto + + + + + + +
diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Module.bsl b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Module.bsl new file mode 100644 index 0000000..2b9209a --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ПодборВСписок/Module.bsl @@ -0,0 +1,170 @@ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + +// КопироватьДанныеФормы(Параметры.Объект, Объект); + + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + МетаданныеОбработки = ОбработкаОбъект.Метаданные(); + + // Получаем ссылку на обработку/отчет по имени. + ИмяОбработки = МетаданныеОбработки.Имя; + ПутьМетаданных = "ВнешняяОбработка." + ИмяОбработки; + + + + ПереданныйСписокЭлементов = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(Параметры.Значение); + ТипКонтейнера = Параметры.ТипКонтейнера; + + Если ТипКонтейнера = 2 Тогда + Заголовок = Параметры.Заголовок + " (массив)"; + СписокЭлементов.ЗагрузитьЗначения(ПереданныйСписокЭлементов); + Иначе + Заголовок = Параметры.Заголовок + " (список значений)"; + СписокЭлементов = ПереданныйСписокЭлементов; + КонецЕсли; + + СписокЭлементов.ТипЗначения = Параметры.ТипЗначения; + + маТипыБезПодбора = Новый Массив; + маТипыБезПодбора.Добавить(Тип("Число")); + маТипыБезПодбора.Добавить(Тип("Строка")); + маТипыБезПодбора.Добавить(Тип("Дата")); + маТипыБезПодбора.Добавить(Тип("Неопределено")); + маТипыБезПодбора.Добавить(Тип("Тип")); + маТипыБезПодбора.Добавить(Тип("ВидДвиженияНакопления")); + маТипыБезПодбора.Добавить(Тип("ВидДвиженияБухгалтерии")); + маТипыБезПодбора.Добавить(Тип("ВидСчета")); + маТипыБезПодбора.Добавить(Тип("УникальныйИдентификатор")); + маТипыБезПодбора.Добавить(Тип("NULL")); + ТипыБезПодбора = Новый ОписаниеТипов(маТипыБезПодбора); + + маТипы = Параметры.ТипЗначения.Типы(); + Элементы.СписокЭлементовПодбор.Видимость = Истина; + Для Каждого Тип Из маТипы Цикл + Если ТипыБезПодбора.СодержитТип(Тип) Тогда + Элементы.СписокЭлементовПодбор.Видимость = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция ПолноеИмяФормы(ИмяФормы) + Возврат СтрШаблон("%1.Форма.%2", Объект.ПутьМетаданных, ИмяФормы); +КонецФункции + +&НаСервере +Функция ПолучитьВозвращаемоеЗначение() + + Если ТипКонтейнера = 2 Тогда + Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(СписокЭлементов.ВыгрузитьЗначения()); + КонецЕсли; + + Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(СписокЭлементов); + +КонецФункции + +&НаКлиенте +Процедура КомандаОК(Команда) + + ВозвращаемоеЗначение = Новый Структура("Значение", ПолучитьВозвращаемоеЗначение()); + + Закрыть(ВозвращаемоеЗначение); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОчистить(Команда) + СписокЭлементов.Очистить(); +КонецПроцедуры + +&НаКлиенте +Процедура РедактироватьЗначение() + + Значение = Элементы.СписокЭлементов.ТекущиеДанные.Значение; + Если ТипЗнч(Значение) = Тип("Тип") Тогда + + ПараметрыОповещения = Новый Структура("Строка", Элементы.СписокЭлементов.ТекущаяСтрока); + //@skip-warning + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияТипа", ЭтаФорма, ПараметрыОповещения); + + Если ТипЗнч(Значение) <> Тип("Тип") Тогда + Значение = Тип("Неопределено"); + КонецЕсли; + + ПараметрыОткрытия = Новый Структура("Объект, ТипЗначения", Объект, Значение); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеТипа"), ПараметрыОткрытия, ЭтаФорма, Истина, , , ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + ИначеЕсли ТипЗнч(Значение) = Тип("УникальныйИдентификатор") Тогда + + ПараметрыОповещения = Новый Структура("Строка", Элементы.СписокЭлементов.ТекущаяСтрока); + //@skip-warning + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияТипа", ЭтаФорма, ПараметрыОповещения); + + ПараметрыОткрытия = Новый Структура("Объект, Значение", Объект, Значение); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеУникальногоИдентификатора"), ПараметрыОткрытия, ЭтаФорма, Истина, , , ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокЭлементовЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + Значение = Элементы.СписокЭлементов.ТекущиеДанные.Значение; + + ТипРедактируемогоЗначения = ТипЗнч(Значение); + + Если ТипРедактируемогоЗначения = Тип("Тип") ИЛИ ТипРедактируемогоЗначения = Тип("УникальныйИдентификатор") Тогда + РедактироватьЗначение(); + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокЭлементовЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + Если ВыбранноеЗначение = Тип("Тип") Тогда + СписокЭлементов.НайтиПоИдентификатору(Элементы.СписокЭлементов.ТекущаяСтрока).Значение = Тип("Неопределено"); + РедактироватьЗначение(); + ИначеЕсли ВыбранноеЗначение = Тип("УникальныйИдентификатор") Тогда + СписокЭлементов.НайтиПоИдентификатору(Элементы.СписокЭлементов.ТекущаяСтрока).Значение = Новый УникальныйИдентификатор; + РедактироватьЗначение(); + КонецЕсли; + +КонецПроцедуры + +Процедура ОкончаниеРедактированияТипа(Результат, ПараметрыОповещения) Экспорт + Перем Значение; + + Если Результат <> Неопределено Тогда + + Если Результат.Свойство("Значение", Значение) Тогда + + СписокЭлементов.НайтиПоИдентификатору(ПараметрыОповещения.Строка).Значение = Значение; + + Иначе + + СписокЭлементов.НайтиПоИдентификатору(ПараметрыОповещения.Строка).Значение = Тип(Результат.ОписаниеКонтейнера.ИмяТипа); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + + + + + + + + + + + + diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Form.form b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Form.form new file mode 100644 index 0000000..12b09ba --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Form.form @@ -0,0 +1,545 @@ + + + + ТаблицаЗначений + 1 + true + true + + true + + + ТаблицаЗначений + + None + + ТаблицаЗначенийКоманднаяПанель + 3 + + ТаблицаКнопкаДобавить + 31 + true + true + + true + + + ТаблицаКнопкаДобавитьРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Form.Item.ТаблицаЗначений.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + + + ТаблицаКнопкаСкопировать + 33 + true + true + + true + + + ТаблицаКнопкаСкопироватьРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Form.Item.ТаблицаЗначений.StandardCommand.Copy + Normal + Picture + true + true + UserCmds + Auto + + + ТаблицаКнопкаУдалить + 29 + true + true + + true + + + ТаблицаКнопкаУдалитьРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Form.Item.ТаблицаЗначений.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + + + ТаблицаКнопкаПереместитьВниз + 25 + true + true + + true + + + ТаблицаКнопкаПереместитьВнизРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.Item.ТаблицаЗначений.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаКнопкаПереместитьВверх + 27 + true + true + + true + + + ТаблицаКнопкаПереместитьВверхРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.Item.ТаблицаЗначений.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаЗначенийКомандаОчистить + 35 + true + true + + true + + + ТаблицаЗначенийКомандаОчиститьРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Form.Command.КомандаОчистить + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + ТаблицаЗначенийСтрокаПоиска + 5 + + ТаблицаЗначенийСтрокаПоискаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ТаблицаЗначенийСтрокаПоискаКонтекстноеМеню + 6 + true + + ТаблицаЗначений + + true + + + + ТаблицаЗначенийСостояниеПросмотра + 8 + + ТаблицаЗначенийСостояниеПросмотраРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + ТаблицаЗначенийСостояниеПросмотраКонтекстноеМеню + 9 + true + + ViewStatusAddition + ТаблицаЗначений + + true + + + + ТаблицаЗначенийУправлениеПоиском + 11 + + ТаблицаЗначенийУправлениеПоискомРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ТаблицаЗначенийУправлениеПоискомКонтекстноеМеню + 12 + true + + SearchControlAddition + ТаблицаЗначений + + true + + + + ТаблицаЗначенийРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + + ТаблицаЗначенийКонтекстноеМеню + 2 + true + + true + true + true + true + true + MultiRow + Auto +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + true + +
+ + ГруппаКоманднаяПанельНижняя + 19 + + КнопкаОК + 21 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + true + + КнопкаОКРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.КомандаОК + Normal + Auto + true + true + true + UserCmds + Auto + + + КомандаОтмена + 23 + + <key>ru</key> + <value>Отмена</value> + + true + true + + true + + + КомандаОтменаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель нижняя</value> + + + ru + Группа командная панель нижняя + + + ГруппаКоманднаяПанельНижняяРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 64 + true + true + Auto + true + true + true + auto + true + + Объект + 1 + + ExternalDataProcessor.ШаблонДополнительнойОбработки + + + true + + + true + +
true
+
+ + ТаблицаЗначений + + <key>ru</key> + <value>Таблица значений</value> + + 2 + + ValueTable + + + true + + + true + + + + ТаблицаЗначенийСоответствиеКолонок + + <key>ru</key> + <value>Таблица значений соответствие колонок</value> + + 5 + + + true + + + true + + + + ТаблицаЗначенийКолонкиКонтейнера + + <key>ru</key> + <value>Таблица значений колонки контейнера</value> + + 6 + + + true + + + true + + + + СуффиксРеквизитаКонтейнера + + <key>ru</key> + <value>Суффикс реквизита контейнера</value> + + 8 + + String + + + + true + + + true + + + + ПутьМетаданных + + <key>ru</key> + <value>Путь метаданных</value> + + 3 + + String + + + + true + + + true + + + + КомандаОК + + <key>ru</key> + <value>Команда ОК</value> + + 1 + + ru + Команда ОК + + + true + + + + КомандаОК + + + DontUse + Auto + + + КомандаОчистить + + <key>ru</key> + <value>Очистить</value> + + 2 + + ru + Команда очистить + + + true + + + + КомандаОчистить + + + true + DontUse + Auto + + + + + + +
diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Module.bsl b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Module.bsl new file mode 100644 index 0000000..688dc60 --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТаблицы/Module.bsl @@ -0,0 +1,402 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + МетаданныеОбработки = ОбработкаОбъект.Метаданные(); + + ИмяОбработки = МетаданныеОбработки.Имя; + ПутьМетаданных = "ВнешняяОбработка." + ИмяОбработки; + + Заголовок = Параметры.Заголовок + " (таблица значений)"; + + Если Параметры.Значение = Неопределено Тогда + Таблица = Новый ТаблицаЗначений; + Иначе + Таблица = РеквизитФормыВЗначение("Объект").СтрокаВЗначение(Параметры.Значение.Значение); + КонецЕсли; + + СоздатьРеквизитыТаблицыПоКолонкам(ЭтаФорма, "ТаблицаЗначений", "ТаблицаЗначенийСоответствиеКолонок", + "ТаблицаЗначенийКолонкиКонтейнера", Таблица.Колонки, Истина); + + ТаблицаВРеквизитыФормы(Таблица, ТаблицаЗначений, ТаблицаЗначенийКолонкиКонтейнера); + + фТолькоПросмотр = Ложь; + Если Параметры.Свойство("ТолькоПросмотр", фТолькоПросмотр) И фТолькоПросмотр = Истина Тогда + Элементы.ТаблицаЗначений.ТолькоПросмотр = Истина; + Элементы.КнопкаОК.Видимость = Ложь; + КонецЕсли; + + СуффиксРеквизитаКонтейнера = РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера(); +КонецПроцедуры + +&НаСервере +Функция ПолучитьВозвращаемуюТаблицу() + + тзВозвращаемаяТаблица = ТаблицаИзРеквизитовФормы(ТаблицаЗначений, ТаблицаЗначенийКолонкиКонтейнера); + Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(тзВозвращаемаяТаблица); + +КонецФункции + +&НаСервере +Процедура ИнициализироватьКонтейнерыСтрокиПоТипам(чСтрока, ТаблицаЗначенийКолонкиКонтейнера) + ТаблицаИнициализироватьКонтейнерыСтрокиПоТипам(ТаблицаЗначений.НайтиПоИдентификатору(чСтрока), + ТаблицаЗначенийКолонкиКонтейнера); +КонецПроцедуры + +&НаКлиенте +Функция ПолноеИмяФормы(ИмяФормы) + Возврат СтрШаблон("%1.Форма.%2", ПутьМетаданных, ИмяФормы); +КонецФункции + +//@skip-warning +&НаКлиенте +Процедура ПолеТаблицыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + Перем Контейнер; + + ИмяКолонки = ТаблицаЗначенийСоответствиеКолонок[Элемент.Имя]; + ИмяКолонкиКонтейнера = ИмяКолонки + СуффиксРеквизитаКонтейнера; + + Если ТаблицаЗначенийКолонкиКонтейнера.Свойство(ИмяКолонки) Тогда + + СтрокаТаблицы = ТаблицаЗначений.НайтиПоИдентификатору(Элементы.ТаблицаЗначений.ТекущаяСтрока); + Контейнер = СтрокаТаблицы[ИмяКолонкиКонтейнера]; + + Если Не ЗначениеЗаполнено(Контейнер) Тогда + ИнициализироватьКонтейнерыСтрокиПоТипам(Элементы.ТаблицаЗначений.ТекущаяСтрока, + ТаблицаЗначенийКолонкиКонтейнера); + Контейнер = СтрокаТаблицы[ИмяКолонкиКонтейнера]; + КонецЕсли; + + Если ЗначениеЗаполнено(Контейнер.Тип) Тогда + + Если Контейнер.Тип = "Тип" Тогда + СтандартнаяОбработка = Ложь; + ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", "ТаблицаЗначений", + Элементы.ТаблицаЗначений.ТекущаяСтрока, ИмяКолонки); + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки", + ЭтотОбъект, ПараметрыОповещения); + ПараметрыОткрытия = Новый Структура("Объект, ТипЗначения", Объект, Контейнер); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеТипа"), ПараметрыОткрытия, ЭтотОбъект, Истина, , , + ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ИначеЕсли Контейнер.Тип = "МоментВремени" Тогда + СтандартнаяОбработка = Ложь; + ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", "ТаблицаЗначений", + Элементы.ТаблицаЗначений.ТекущаяСтрока, ИмяКолонки); + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки", + ЭтотОбъект, ПараметрыОповещения); + ПараметрыОткрытия = Новый Структура("Объект, Значение", Объект, Контейнер); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеГраницыМомента"), ПараметрыОткрытия, ЭтотОбъект, Ложь, , , + ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОкончаниеРедактированияСтроки(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если РезультатЗакрытия <> Неопределено Тогда + + чИдентификаторСтроки = ДополнительныеПараметры.Строка; + Значение = Неопределено; + Если РезультатЗакрытия.Свойство("Значение", Значение) Тогда + ТаблицаЗначений[чИдентификаторСтроки][ДополнительныеПараметры.Поле + СуффиксРеквизитаКонтейнера] = Значение; + ТаблицаЗначений[чИдентификаторСтроки][ДополнительныеПараметры.Поле] = Значение.Представление; + Иначе + ТаблицаЗначений[чИдентификаторСтроки][ДополнительныеПараметры.Поле + + СуффиксРеквизитаКонтейнера] = РезультатЗакрытия.ОписаниеКонтейнера; + ТаблицаЗначений[чИдентификаторСтроки][ДополнительныеПараметры.Поле] = РезультатЗакрытия.ОписаниеКонтейнера.Представление; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОчистить(Команда) + ТаблицаЗначений.Очистить(); +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОК(Команда) + ВозвращаемоеЗначение = Новый Структура("Значение", ПолучитьВозвращаемуюТаблицу()); + Закрыть(ВозвращаемоеЗначение); +КонецПроцедуры + + + +#Область ИнтерфейсСТаблицейЗначений + +//Описание типов внутри содержит больше, чем это можно увидеть средствами языка. +//Например, там есть какая-то информация, которая прилетает туда из "определяемых типов" полей в запросе. +//Это приводит к некорректному поведению. Колонка не воспринимала отрицательные числа, хотя в типе точно стаяло в квалификаторах числа знак "Любой". +//Эта функция пересоздает описание типов, что бы там внутри не было ничего лишнего. +Функция НормализоватьТип(НекоеОписаниеТипов) + + Типы = НекоеОписаниеТипов.Типы(); + НовоеОписаниеТипов = Новый ОписаниеТипов(Типы, НекоеОписаниеТипов.КвалификаторыЧисла, + НекоеОписаниеТипов.КвалификаторыСтроки, НекоеОписаниеТипов.КвалификаторыДаты); + + Возврат НовоеОписаниеТипов; + +КонецФункции + +Процедура СоздатьРеквизитыТаблицыПоКолонкам(Форма, ИмяРеквизитаТаблицыФормы, ИмяРеквизитаСоответствияКолонок, + ИмяРеквизитаКолонкиКонтейнера, Колонки, фДляРедактирования = Ложь, стМакроколонки = Неопределено) Экспорт + + маНеотображаемыеТипы = РеквизитФормыВЗначение("Объект").ПолучитьНеотображаемыеНаКлиентеТипы(); + + ИмяРеквизитаТаблицыФормыИтоги = ИмяРеквизитаТаблицыФормы + "Итоги"; + ЕстьИтоги = Ложь; + Для Каждого Реквизит Из Форма.ПолучитьРеквизиты() Цикл + Если Реквизит.Имя = ИмяРеквизитаТаблицыФормыИтоги Тогда + ЕстьИтоги = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + маУдаляемыеРеквизиты = Новый Массив; + + Если ТипЗнч(Форма[ИмяРеквизитаТаблицыФормы]) = Тип("ДанныеФормыКоллекция") Тогда + Форма[ИмяРеквизитаТаблицыФормы].Очистить(); + КонецЕсли; + + Для Каждого Реквизит Из Форма.ПолучитьРеквизиты(ИмяРеквизитаТаблицыФормы) Цикл + маУдаляемыеРеквизиты.Добавить(Реквизит.Путь + "." + Реквизит.Имя); + КонецЦикла; + + Если ЕстьИтоги Тогда + Форма[ИмяРеквизитаТаблицыФормыИтоги].Очистить(); + Для Каждого Реквизит Из Форма.ПолучитьРеквизиты(ИмяРеквизитаТаблицыФормыИтоги) Цикл + маУдаляемыеРеквизиты.Добавить(Реквизит.Путь + "." + Реквизит.Имя); + КонецЦикла; + КонецЕсли; + + стКолонкиКонтейнера = Новый Структура; + маДобавляемыеРеквизиты = Новый Массив; + Если Колонки <> Неопределено Тогда + + Для Каждого Колонка Из Колонки Цикл + + стМакроколонка = Неопределено; + Если стМакроколонки <> Неопределено И стМакроколонки.Свойство(Колонка.Имя, стМакроколонка) Тогда + ТипКолонки = стМакроколонка.ТипЗначения; + Иначе + ТипКолонки = Колонка.ТипЗначения; + КонецЕсли; + + ЕстьНеотображаемыеТипы = Ложь; + Для Каждого НеотображаемыйТип Из маНеотображаемыеТипы Цикл + Если ТипКолонки.СодержитТип(НеотображаемыйТип) Тогда + ЕстьНеотображаемыеТипы = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ЕстьНеотображаемыеТипы Тогда + + ИмяКолонкиКонтейнера = Колонка.Имя + РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера(); + Реквизит = Новый РеквизитФормы(ИмяКолонкиКонтейнера, Новый ОписаниеТипов, ИмяРеквизитаТаблицыФормы, + ИмяКолонкиКонтейнера); + маДобавляемыеРеквизиты.Добавить(Реквизит); + стКолонкиКонтейнера.Вставить(Колонка.Имя, ТипКолонки); + + ТипКолонкиТаблицы = Новый ОписаниеТипов(ТипКолонки, "Строка", маНеотображаемыеТипы); + + Иначе + ТипКолонкиТаблицы = НормализоватьТип(ТипКолонки); + КонецЕсли; + + Если ТипКолонкиТаблицы.СодержитТип(Тип("Число")) Тогда + ТипКолонкиИтогов = Новый ОписаниеТипов("Число", ТипКолонкиТаблицы.КвалификаторыЧисла); + Иначе + ТипКолонкиИтогов = Новый ОписаниеТипов("Null"); + КонецЕсли; + + Реквизит = Новый РеквизитФормы(Колонка.Имя, ТипКолонкиТаблицы, ИмяРеквизитаТаблицыФормы, Колонка.Имя); + маДобавляемыеРеквизиты.Добавить(Реквизит); + + Если ЕстьИтоги Тогда + Реквизит = Новый РеквизитФормы(Колонка.Имя, ТипКолонкиИтогов, ИмяРеквизитаТаблицыФормыИтоги, + Колонка.Имя); + маДобавляемыеРеквизиты.Добавить(Реквизит); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Форма.ИзменитьРеквизиты(маДобавляемыеРеквизиты, маУдаляемыеРеквизиты); + + Если ЕстьИтоги Тогда + Форма[ИмяРеквизитаТаблицыФормыИтоги].Добавить(); + КонецЕсли; + + Пока Форма.Элементы[ИмяРеквизитаТаблицыФормы].ПодчиненныеЭлементы.Количество() > 0 Цикл + Форма.Элементы.Удалить(Форма.Элементы[ИмяРеквизитаТаблицыФормы].ПодчиненныеЭлементы[0]); + КонецЦикла; + + стКолонкиРезультата = Новый Структура; + Если Колонки <> Неопределено Тогда + + Для Каждого Колонка Из Колонки Цикл + + ИмяКолонки = ИмяРеквизитаТаблицыФормы + Колонка.Имя; + стКолонкиРезультата.Вставить(ИмяКолонки, Колонка.Имя); + КолонкаТаблицы = Форма.Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"), + Форма.Элементы[ИмяРеквизитаТаблицыФормы]); + КолонкаТаблицы.ПутьКДанным = ИмяРеквизитаТаблицыФормы + "." + Колонка.Имя; + + Если ЕстьИтоги Тогда + КолонкаТаблицы.ПутьКДаннымПодвала = ИмяРеквизитаТаблицыФормыИтоги + "[0]." + Колонка.Имя; + КонецЕсли; + + Если фДляРедактирования Тогда + + КолонкаТаблицы.Вид = ВидПоляФормы.ПолеВвода; + КолонкаТаблицы.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; + КолонкаТаблицы.КнопкаОчистки = Истина; + + Если стКолонкиКонтейнера.Свойство(Колонка.Имя) Тогда + КолонкаТаблицы.КнопкаВыбора = Истина; + КолонкаТаблицы.РедактированиеТекста = Ложь; + КолонкаТаблицы.УстановитьДействие("НачалоВыбора", "ПолеТаблицыНачалоВыбора"); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Форма[ИмяРеквизитаСоответствияКолонок] = стКолонкиРезультата; + Форма[ИмяРеквизитаКолонкиКонтейнера] = стКолонкиКонтейнера; + +КонецПроцедуры + +Процедура ТаблицаИнициализироватьКонтейнерыСтрокиПоТипам(СтрокаТаблицы, ТаблицаЗначенийКолонкиКонтейнера) Экспорт + + Для Каждого кз Из ТаблицаЗначенийКолонкиКонтейнера Цикл + + ИмяКолонки = кз.Ключ; + ТипЗначения = кз.Значение; + маТипыЗначения = ТипЗначения.Типы(); + + Контейнер = Неопределено; + Если маТипыЗначения.Количество() = 1 Тогда + + Если ТипЗначения.СодержитТип(Тип("Тип")) Тогда + Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Тип("Неопределено")); + ИначеЕсли ТипЗначения.СодержитТип(Тип("МоментВремени")) Тогда + Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение( + Новый МоментВремени('00010101', Неопределено)); + КонецЕсли; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(Контейнер) Тогда + Контейнер = ПустойКонтейнер(); + КонецЕсли; + + СтрокаТаблицы[ИмяКолонки + РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера()] = Контейнер; + + КонецЦикла; + +КонецПроцедуры + +Функция ПустойКонтейнер() + Возврат Новый Структура("Тип, Представление", , "???"); +КонецФункции + +//Контейнеры в таблице должны быть всегда. +//Если контейнер не нужен, и значение храниться в основном поле - добавляем пустой контейнер. +Процедура ДобавитьКонтейнеры(СтрокаТаблицыЗначенийРеквизита, СтрокаИсточник, КолонкиКонтейнера) Экспорт + + Для Каждого кз Из КолонкиКонтейнера Цикл + + ИмяКолонки = кз.Ключ; + ИмяКолонкиКонтейнера = ИмяКолонки + РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера(); + + Если ТипЗнч(СтрокаИсточник[ИмяКолонки]) = Тип("РезультатЗапроса") Тогда + Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение( + СтрокаИсточник[кз.Ключ].Выгрузить()); + Иначе + Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(СтрокаИсточник[кз.Ключ]); + КонецЕсли; + + Если ТипЗнч(Контейнер) <> Тип("Структура") Тогда + Контейнер = ПустойКонтейнер(); + Иначе + СтрокаТаблицыЗначенийРеквизита[ИмяКолонки] = Контейнер.Представление; + КонецЕсли; + + СтрокаТаблицыЗначенийРеквизита[ИмяКолонкиКонтейнера] = Контейнер; + + КонецЦикла; + +КонецПроцедуры + +Функция ТаблицаВРеквизитыФормы(ТаблицаЗначений, ТаблицаЗначенийРеквизит, ТаблицаЗначенийКолонкиКонтейнераРеквизит) Экспорт + + фЕстьКонтейнеры = ТаблицаЗначенийКолонкиКонтейнераРеквизит.Количество() > 0; + Если Не фЕстьКонтейнеры Тогда + ТаблицаЗначенийРеквизит.Загрузить(ТаблицаЗначений); + Иначе + + Для Каждого Строка Из ТаблицаЗначений Цикл + СтрокаТаблицыЗначенийРеквизита = ТаблицаЗначенийРеквизит.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицыЗначенийРеквизита, Строка); + Если фЕстьКонтейнеры Тогда + ДобавитьКонтейнеры(СтрокаТаблицыЗначенийРеквизита, Строка, ТаблицаЗначенийКолонкиКонтейнераРеквизит); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + +КонецФункции + +Функция ТаблицаИзРеквизитовФормы(ТаблицаЗначенийРеквизит, ТаблицаЗначенийКолонкиКонтейнераРеквизит) Экспорт + + тзДанные = ТаблицаЗначенийРеквизит.Выгрузить(); + + Если ТаблицаЗначенийКолонкиКонтейнераРеквизит.Количество() = 0 Тогда + Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(тзДанные); + КонецЕсли; + + стИменаКолонокКонтейнеров = Новый Структура; + Для Каждого кз Из ТаблицаЗначенийКолонкиКонтейнераРеквизит Цикл + стИменаКолонокКонтейнеров.Вставить(кз.Ключ + РеквизитФормыВЗначение("Объект").СуффиксРеквизитаКонтейнера()); + КонецЦикла; + + тзВозвращаемаяТаблица = Новый ТаблицаЗначений; + Для Каждого Колонка Из тзДанные.Колонки Цикл + + Если стИменаКолонокКонтейнеров.Свойство(Колонка.Имя) Тогда + Продолжить; + КонецЕсли; + + ТипКолонки = Колонка.ТипЗначения; + ТаблицаЗначенийКолонкиКонтейнераРеквизит.Свойство(Колонка.Имя, ТипКолонки); + тзВозвращаемаяТаблица.Колонки.Добавить(Колонка.Имя, ТипКолонки); + + КонецЦикла; + + чКоличествоСтрок = тзДанные.Количество(); + Для Каждого СтрокаТаблицыЗначенийРеквизита Из ТаблицаЗначенийРеквизит Цикл + Строка = тзВозвращаемаяТаблица.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, СтрокаТаблицыЗначенийРеквизита); + Для Каждого кз Из ТаблицаЗначенийКолонкиКонтейнераРеквизит Цикл + ИмяКолонки = кз.Ключ; + Строка[ИмяКолонки] = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение( + СтрокаТаблицыЗначенийРеквизита[ИмяКолонки + РеквизитФормыВЗначение( + "Объект").СуффиксРеквизитаКонтейнера()]); + КонецЦикла; + КонецЦикла; + + Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(тзВозвращаемаяТаблица); + +КонецФункции + +#КонецОбласти \ No newline at end of file diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/ConditionalAppearance.dcssca b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/ConditionalAppearance.dcssca new file mode 100644 index 0000000..c42410c --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/ConditionalAppearance.dcssca @@ -0,0 +1,23 @@ + + + + + + СоставТипа + + + + + СоставТипа.ВыбранПодч + Equal + true + + + + + ЦветФона + win:ScrollBar + + + + diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Form.form b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Form.form new file mode 100644 index 0000000..c971343 --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Form.form @@ -0,0 +1,2066 @@ + + + + <key>ru</key> + <value>Редактирование типа</value> + + + Контейнер + 56 + true + true + + true + + + ТипКонтейнера + + + OnChange + КонтейнерПриИзменении + + + КонтейнерРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + КонтейнерКонтекстноеМеню + 57 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + ru + Нет + + + 0 + + + + + ru + Список значений + + + 1 + + + + + ru + Массив + + + 2 + + + + + ru + Таблица значений + + + 3 + + + Normal + + + + ГруппаТипЗначения + 59 + + СоставнойТип + 1 + true + true + + true + + + СоставнойТип + + Right + + OnChange + СоставнойТипПриИзменении + + + СоставнойТипРасширеннаяПодсказка + 3 + Label + true + true + + Left + + + + СоставнойТипКонтекстноеМеню + 2 + true + + CheckBoxField + Enter + true + Left + true + + + + СтрокаПоиска + 98 + true + true + + true + + + СтрокаПоиска + + None + + СтрокаПоискаРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + СтрокаПоискаКонтекстноеМеню + 99 + true + + InputField + Enter + true + Left + true + + + EditTextChange + СтрокаПоискаИзменениеТекстаРедактирования + + true + true + true + true + true + true + Normal + + ru + Найти + + + + + СоставТипа + 4 + true + true + + true + + + СоставТипа + + None + + СоставТипаВыбран + 17 + true + true + + true + + + СоставТипа.Выбран + + + OnChange + СоставТипаВыбранПриИзменении + + + СоставТипаВыбранРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + СоставТипаВыбранКонтекстноеМеню + 18 + true + + CheckBoxField + true + Left + true + + + + СоставТипаКартинка + 95 + true + true + + true + + + СоставТипа.Картинка + + + СоставТипаКартинкаРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + СоставТипаКартинкаКонтекстноеМеню + 96 + true + + PictureField + EnterOnInput + true + Left + true + + 1 + true + 1 + true + true + true + + + 1 + + + + + СоставТипаПредставление + 20 + true + true + + true + + + СоставТипа.Представление + + + СоставТипаПредставлениеРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СоставТипаПредставлениеКонтекстноеМеню + 21 + true + + InputField + true + EnterOnInput + true + Left + true + + true + true + true + true + true + true + Normal + + + + СоставТипаКоманднаяПанель + 6 + Left + + + OnActivateRow + СоставТипаПриАктивизацииСтроки + + + OnChange + СоставТипаПриИзменении + + + СоставТипаСтрокаПоиска + 8 + + СоставТипаСтрокаПоискаРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + СоставТипаСтрокаПоискаКонтекстноеМеню + 9 + true + + СоставТипа + + true + + + + СоставТипаСостояниеПросмотра + 11 + + СоставТипаСостояниеПросмотраРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + СоставТипаСостояниеПросмотраКонтекстноеМеню + 12 + true + + ViewStatusAddition + СоставТипа + + true + + + + СоставТипаУправлениеПоиском + 14 + + СоставТипаУправлениеПоискомРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СоставТипаУправлениеПоискомКонтекстноеМеню + 15 + true + + SearchControlAddition + СоставТипа + + true + + + + СоставТипаРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + СоставТипаКонтекстноеМеню + 5 + true + + Tree + true + true + true + MultiRow + Row + 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + true + + + ГруппаКвалификаторыЧисла + 27 + + КвалификаторыЧислаНеОтрицательный + 32 + true + true + + true + + + КвалификаторыЧислаНеОтрицательный + + Right + + КвалификаторыЧислаНеОтрицательныйРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + КвалификаторыЧислаНеОтрицательныйКонтекстноеМеню + 33 + true + + CheckBoxField + Enter + true + Left + true + + + + КвалификаторыЧислаДлина + 29 + true + true + + true + + + КвалификаторыЧислаДлина + + + КвалификаторыЧислаДлинаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + КвалификаторыЧислаДлинаКонтекстноеМеню + 30 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + КвалификаторыЧислаТочность + 35 + true + true + + true + + + КвалификаторыЧислаТочность + + + КвалификаторыЧислаТочностьРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + КвалификаторыЧислаТочностьКонтекстноеМеню + 36 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа квалификаторы числа</value> + + + ru + Группа квалификаторы числа + + + ГруппаКвалификаторыЧислаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКвалификаторыДаты + 40 + + КвалификаторыДатыСостав + 48 + true + true + + true + + + КвалификаторыДатыСостав + + + КвалификаторыДатыСоставРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + КвалификаторыДатыСоставКонтекстноеМеню + 49 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + Дата + + + + + Время + + + + + Дата и время + + + Normal + + + true + + true + + + <key>ru</key> + <value>Группа квалификаторы даты</value> + + + ru + Группа квалификаторы даты + + + ГруппаКвалификаторыДатыРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаКвалификаторыСтроки + 38 + + КвалификаторыСтрокиДлина + 42 + true + true + + true + + + КвалификаторыСтрокиДлина + + + OnChange + КвалификаторыСтрокиДлинаПриИзменении + + + КвалификаторыСтрокиДлинаРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + КвалификаторыСтрокиДлинаКонтекстноеМеню + 43 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + КвалификаторыСтрокиФиксированная + 51 + true + true + + true + + + КвалификаторыСтрокиФиксированная + + Right + + КвалификаторыСтрокиФиксированнаяРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + КвалификаторыСтрокиФиксированнаяКонтекстноеМеню + 52 + true + + CheckBoxField + Enter + true + Left + true + + + + КвалификаторыСтрокиКомментарий + 45 + true + true + + true + + + КвалификаторыСтрокиКомментарий + + None + + КвалификаторыСтрокиКомментарийРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + КвалификаторыСтрокиКомментарийКонтекстноеМеню + 46 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + + true + + + <key>ru</key> + <value>Группа квалификаторы строки</value> + + + ru + Группа квалификаторы строки + + + ГруппаКвалификаторыСтрокиРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа тип значения</value> + + + ru + Группа тип значения + + + ГруппаТипЗначенияРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + UsualGroup + + Vertical + true + true + Auto + Auto + + + + ГруппаРедактированиеТаблицы + 61 + + СтруктураТаблицы + 63 + true + true + + true + + + СтруктураТаблицы + + None + + СтруктураТаблицыИмя + 76 + + <key>ru</key> + <value>Имя колонки</value> + + true + true + + true + + + СтруктураТаблицы.Имя + + + СтруктураТаблицыИмяРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + СтруктураТаблицыИмяКонтекстноеМеню + 77 + true + + InputField + true + Left + true + + true + true + true + true + true + true + Normal + + + + СтруктураТаблицыТипЗначения + 79 + true + true + + true + + + СтруктураТаблицы.ТипЗначения + + + СтруктураТаблицыТипЗначенияРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + + СтруктураТаблицыТипЗначенияКонтекстноеМеню + 80 + true + + InputField + true + Left + true + + + StartChoice + СтруктураТаблицыТипЗначенияНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + СтруктураТаблицыМодификаторы + 82 + true + true + + true + + + СтруктураТаблицы.Квалификаторы + + + СтруктураТаблицыМодификаторыРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + СтруктураТаблицыМодификаторыКонтекстноеМеню + 83 + true + + InputField + true + EnterOnInput + true + Left + true + + true + true + true + true + true + true + Normal + + + + СтруктураТаблицыКоманднаяПанель + 65 + + СтруктураТаблицыКнопкаДобавить + 85 + true + true + + true + + + СтруктураТаблицыКнопкаДобавитьРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Form.Item.СтруктураТаблицы.StandardCommand.Add + Normal + PictureAndText + true + true + UserCmds + Auto + + + СтруктураТаблицыКнопкаСкопировать + 87 + true + true + + true + + + СтруктураТаблицыКнопкаСкопироватьРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Form.Item.СтруктураТаблицы.StandardCommand.Copy + Normal + Picture + true + true + UserCmds + Auto + + + СтруктураТаблицыКнопкаУдалить + 89 + true + true + + true + + + СтруктураТаблицыКнопкаУдалитьРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + Form.Item.СтруктураТаблицы.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + + + СтруктураТаблицыКнопкаПереместитьВверх + 91 + true + true + + true + + + СтруктураТаблицыКнопкаПереместитьВверхРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + Form.Item.СтруктураТаблицы.StandardCommand.MoveUp + Normal + Picture + true + true + UserCmds + Auto + + + СтруктураТаблицыКнопкаПереместитьВниз + 93 + true + true + + true + + + СтруктураТаблицыКнопкаПереместитьВнизРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + Form.Item.СтруктураТаблицы.StandardCommand.MoveDown + Normal + Picture + true + true + UserCmds + Auto + + Left + true + + + BeforeEditEnd + СтруктураТаблицыПередОкончаниемРедактирования + + + СтруктураТаблицыСтрокаПоиска + 67 + + СтруктураТаблицыСтрокаПоискаРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + СтруктураТаблицыСтрокаПоискаКонтекстноеМеню + 68 + true + + СтруктураТаблицы + + true + + + + СтруктураТаблицыСостояниеПросмотра + 70 + + СтруктураТаблицыСостояниеПросмотраРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + СтруктураТаблицыСостояниеПросмотраКонтекстноеМеню + 71 + true + + ViewStatusAddition + СтруктураТаблицы + + true + + + + СтруктураТаблицыУправлениеПоиском + 73 + + СтруктураТаблицыУправлениеПоискомРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + СтруктураТаблицыУправлениеПоискомКонтекстноеМеню + 74 + true + + SearchControlAddition + СтруктураТаблицы + + true + + + + СтруктураТаблицыРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + СтруктураТаблицыКонтекстноеМеню + 64 + true + + true + true + true + true + true + MultiRow + Auto +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + true + +
+ true + + true + + + <key>ru</key> + <value>Структура таблицы</value> + + + ru + Группа редактирование таблицы + + + ГруппаРедактированиеТаблицыРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + UsualGroup + + Auto + Auto + true + true + auto + Auto + Auto + +
+ + ГруппаКоманднаяПанельВнизу + 23 + + КнопкаОтмена + 25 + true + true + + true + + + КнопкаОтменаРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + PictureAndText + true + true + UserCmds + Auto + + + КомандаВЗапрос + 101 + true + true + + true + + + КомандаВЗапросРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + Form.Command.КомандаВЗапрос + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОК + 54 + true + true + + true + + true + + КомандаОКРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.Command.КомандаОК + Normal + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа командная панель внизу</value> + + + ru + Группа командная панель внизу + + + ГруппаКоманднаяПанельВнизуРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + CommandBar + + Right + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + 65 + 30 + true + true + Auto + true + true + true + auto + true + + Объект + 1 + + ExternalDataProcessor.ШаблонДополнительнойОбработки + + + true + + + true + +
true
+
+ + СоставТипа + + <key>ru</key> + <value>Состав типа</value> + + 2 + + ValueTree + + + true + + + true + + + Выбран + + <key>ru</key> + <value>Выбран</value> + + 1 + + Boolean + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 2 + + String + + + + true + + + true + + + + Имя + + <key>ru</key> + <value>Имя</value> + + 3 + + String + + + + true + + + true + + + + ВыбранПодч + + <key>ru</key> + <value>Выбран подч</value> + + 4 + + Boolean + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 5 + + Boolean + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 6 + + Picture + + + true + + + true + + + + + СоставнойТип + + <key>ru</key> + <value>Составной тип</value> + + 3 + + Boolean + + + true + + + true + + + + КвалификаторыЧислаНеОтрицательный + + <key>ru</key> + <value>Не отрицательное</value> + + 4 + + Boolean + + + true + + + true + + + + КвалификаторыЧислаДлина + + <key>ru</key> + <value>Длина</value> + + 5 + + Number + + 2 + true + + + + true + + + true + + + + КвалификаторыЧислаТочность + + <key>ru</key> + <value>Точность</value> + + 6 + + Number + + 2 + true + + + + true + + + true + + + + КвалификаторыСтрокиДлина + + <key>ru</key> + <value>Длина</value> + + 7 + + Number + + 10 + + + + true + + + true + + + + КвалификаторыСтрокиКомментарий + + <key>ru</key> + <value>Квалификаторы строки комментарий</value> + + 8 + + String + + + + true + + + true + + + + КвалификаторыДатыСостав + + <key>ru</key> + <value>Состав даты</value> + + 9 + + String + + + + true + + + true + + + + КвалификаторыСтрокиФиксированная + + <key>ru</key> + <value>Фиксированная</value> + + 10 + + Boolean + + + true + + + true + + + + ТипКонтейнера + + <key>ru</key> + <value>Тип контейнера</value> + + 11 + + Number + + 10 + + + + true + + + true + + + + фМоментГраница + + <key>ru</key> + <value>Момент граница используются</value> + + 12 + + Boolean + + + true + + + true + + + + СтруктураТаблицы + + <key>ru</key> + <value>Структура таблицы</value> + + 13 + + ValueTable + + + true + + + true + + + Имя + + <key>ru</key> + <value>Имя</value> + + 1 + + String + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип значения</value> + + 2 + + TypeDescription + + + true + + + true + + + + Квалификаторы + + <key>ru</key> + <value>Квалификаторы</value> + + 3 + + String + + + + true + + + true + + + + ИмяСтарое + + <key>ru</key> + <value>Имя старое</value> + + 4 + + String + + + + true + + + true + + + + + фПростойВид + + <key>ru</key> + <value>Форма открыта в простом виде</value> + + 14 + + Boolean + + + true + + + true + + + + фРедактированиеТипа + + <key>ru</key> + <value>Ф редактирование типа</value> + + 16 + + Boolean + + + true + + + true + + + + АдресТаблицы + + <key>ru</key> + <value>Адрес таблицы</value> + + 17 + + String + + + + true + + + true + + + + ДеревоТипов + + <key>ru</key> + <value>Дерево типов</value> + + 19 + + String + + + + true + + + true + + + + СтрокаПоиска + + <key>ru</key> + <value>Строка поиска</value> + + 20 + + String + + + + true + + + true + + + + ФлагСброшеныВсе + + <key>ru</key> + <value>Флаг сброшены все</value> + + 21 + + Boolean + + + true + + + true + + + + СписокРазрешенных + + <key>ru</key> + <value>Список разрешенных</value> + + 15 + + + true + + + true + + + + ВЗапросРазрешено + + <key>ru</key> + <value>В запрос разрешено</value> + + 22 + + Boolean + + + true + + + true + + + + ИмяПараметра + + <key>ru</key> + <value>Имя параметра</value> + + 23 + + String + + + + true + + + true + + + + РежимВПараметр + + <key>ru</key> + <value>Режим в параметр</value> + + 18 + + Boolean + + + true + + + true + + + + ПутьМетаданных + + <key>ru</key> + <value>Путь метаданных</value> + + 24 + + String + + + + true + + + true + + + + КомандаОК + + <key>ru</key> + <value>ОК</value> + + 1 + + true + + + + КомандаОК + + + DontUse + Auto + + + КомандаВЗапрос + + <key>ru</key> + <value>В запрос</value> + + 2 + + ru + Команда в запрос + + + true + + + StdPicture.GoForward + + + + КомандаВЗапрос + + + TextPicture + DontUse + Auto + + + + + + +
diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Module.bsl b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Module.bsl new file mode 100644 index 0000000..fe72704 --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/РедактированиеТипа/Module.bsl @@ -0,0 +1,882 @@ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + МетаданныеОбработки = ОбработкаОбъект.Метаданные(); + + // Получаем ссылку на обработку/отчет по имени. + ИмяОбработки = МетаданныеОбработки.Имя; + ПутьМетаданных = "ВнешняяОбработка." + ИмяОбработки; + дзДеревоТипов = Неопределено; + + ТипЗначения = Параметры.ТипЗначения; + + Параметры.Свойство("СписокРазрешенных", СписокРазрешенных); + + Если Не Параметры.Свойство("ВПараметр", РежимВПараметр) Тогда + РежимВПараметр = Ложь; + КонецЕсли; + + Если РежимВПараметр Тогда + РежимСтрокой = "В параметр"; + Элементы.КомандаОК.Заголовок = РежимСтрокой; + Иначе + РежимСтрокой = "Редактирование типа"; + КонецЕсли; + + Если Параметры.Свойство("Имя", ИмяПараметра) Тогда + Заголовок = СтрШаблон("%1 (%2)", ИмяПараметра, НРег(РежимСтрокой)); + Иначе + Заголовок = РежимСтрокой; + ИмяПараметра = "ТаблицаЗначений"; + КонецЕсли; + + Если ТипЗнч(ТипЗначения) = Тип("Структура") И ТипЗначения.Тип = "Тип" Тогда + + Попытка + маТипы = Новый Массив; + маТипы.Добавить(РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(ТипЗначения)); + ТипЗначения = Новый ОписаниеТипов(маТипы); + Исключение + ТипЗначения = Новый ОписаниеТипов; + КонецПопытки; + + фПростойВид = Истина; + фРедактированиеТипа = Истина; + Элементы.СоставнойТип.Видимость = Ложь; + Элементы.Контейнер.Видимость = Ложь; + Элементы.ГруппаКвалификаторыДаты.Видимость = Ложь; + Элементы.ГруппаКвалификаторыЧисла.Видимость = Ложь; + Элементы.ГруппаКвалификаторыСтроки.Видимость = Ложь; + + ИначеЕсли ТипЗнч(ТипЗначения) = Тип("Тип") Тогда + + маТипы = Новый Массив; + маТипы.Добавить(ТипЗначения); + ТипЗначения = Новый ОписаниеТипов(маТипы); + + фПростойВид = Истина; + фРедактированиеТипа = Истина; + Элементы.СоставнойТип.Видимость = Ложь; + Элементы.Контейнер.Видимость = Ложь; + Элементы.ГруппаКвалификаторыДаты.Видимость = Ложь; + Элементы.ГруппаКвалификаторыЧисла.Видимость = Ложь; + Элементы.ГруппаКвалификаторыСтроки.Видимость = Ложь; + + Иначе + + Если Не ЗначениеЗаполнено(ТипЗначения) Тогда + ТипЗначения = Новый ОписаниеТипов; + КонецЕсли; + + ТипКонтейнера = Неопределено; + фПростойВид = Не Параметры.Свойство("ТипКонтейнера", ТипКонтейнера); + + Если фПростойВид Тогда + ТипКонтейнера = 0; + Элементы.Контейнер.Видимость = Ложь; + КонецЕсли; + + Если ТипКонтейнера = 3 Тогда + + //Режим редактирования структуры таблицы. Таблицу можно передать с данными, они будут сохранены. + Таблица = РеквизитФормыВЗначение("Объект").СтрокаВЗначение(ТипЗначения.Значение); + + //Сами данные на клиента не потащим. + АдресТаблицы = ПоместитьВоВременноеХранилище(Таблица, УникальныйИдентификатор); + + ЗаполнитьСтруктуруТаблицы(Таблица); + ТипЗначения = Новый ОписаниеТипов; + + КонецЕсли; + + КонецЕсли; + + СоставнойТип = ТипЗначения.Типы().Количество() > 1; + + КвалификаторыДатыСостав = ТипЗначения.КвалификаторыДаты.ЧастиДаты; + КвалификаторыСтрокиДлина = ТипЗначения.КвалификаторыСтроки.Длина; + КвалификаторыСтрокиФиксированная = ТипЗначения.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Фиксированная; + КвалификаторыЧислаДлина = ТипЗначения.КвалификаторыЧисла.Разрядность; + КвалификаторыЧислаНеОтрицательный = ТипЗначения.КвалификаторыЧисла.ДопустимыйЗнак = ДопустимыйЗнак.Неотрицательный; + КвалификаторыЧислаТочность = ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти; + + дзДеревоТипов = ПолучитьДеревоТипов(ТипЗначения, СписокРазрешенных); + //Если НЕ СоставнойТип И ТипКонтейнера = 0 Тогда + // ДобавитьМоментИГраницуВДерево(дзДеревоТипов, ТипЗначения); + //КонецЕсли; + + ДеревоТипов = ПоместитьВоВременноеХранилище(дзДеревоТипов, УникальныйИдентификатор); + ОбновитьСоставТипаНаСервере(); + + УстановитьВидимостьЭлементов(); + + ТекущийЭлемент = Элементы.СтрокаПоиска; + +КонецПроцедуры + +&НаСервере +Процедура ДеревоТиповВДанныеФормы(Узел, УзелРеквизита, ТекущаяСтрока = Неопределено, ВыбранПодч = Ложь) + + ЭлементыУзла = УзелРеквизита.ПолучитьЭлементы(); + + Для Каждого Строка Из Узел.Строки Цикл + + Если Строка.Строки.Количество() > 0 Тогда + + СтрокаРеквизита = ЭлементыУзла.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаРеквизита, Строка); + СтрокаРеквизита.ВыбранПодч = Ложь; + ДеревоТиповВДанныеФормы(Строка, СтрокаРеквизита, ТекущаяСтрока, СтрокаРеквизита.ВыбранПодч); + + Если СтрокаРеквизита.ПолучитьЭлементы().Количество() = 0 Тогда + ЭлементыУзла.Удалить(СтрокаРеквизита); + КонецЕсли; + + Иначе + + Если Не ЗначениеЗаполнено(СтрокаПоиска) Или Найти(ВРег(Строка.Представление), ВРег(СтрокаПоиска)) > 0 + //ИЛИ Найти(ВРег(Строка.Имя), ВРег(СтрокаПоиска)) > 0 + Тогда + СтрокаРеквизита = ЭлементыУзла.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаРеквизита, Строка); + ВыбранПодч = ВыбранПодч Или Строка.Выбран; + КонецЕсли; + + КонецЕсли; + + Если ТекущаяСтрока = Неопределено И СтрокаРеквизита <> Неопределено И Строка.Выбран Тогда + ТекущаяСтрока = СтрокаРеквизита.ПолучитьИдентификатор(); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьОтметкиДерева(УзелДерева, УзелСоставаТипа) + Перем ЭлементыУзла; + + Если УзелСоставаТипа <> Неопределено Тогда + ЭлементыУзла = УзелСоставаТипа.ПолучитьЭлементы(); + КонецЕсли; + + й = 0; + Для Каждого СтрокаДерева Из УзелДерева.Строки Цикл + + Если ЭлементыУзла = Неопределено Или ЭлементыУзла.Количество() <= й Тогда + Если ФлагСброшеныВсе Тогда + СтрокаДерева.Выбран = Ложь; + Если СтрокаДерева.Строки.Количество() > 0 Тогда + ОбновитьОтметкиДерева(СтрокаДерева, Неопределено); + КонецЕсли; + Продолжить; + Иначе + Прервать; + КонецЕсли; + КонецЕсли; + + Если ФлагСброшеныВсе Тогда + СтрокаДерева.Выбран = Ложь; + КонецЕсли; + + Если ЭлементыУзла[й].Имя = СтрокаДерева.Имя Тогда + + СтрокаДерева.Выбран = ЭлементыУзла[й].Выбран; + + Если СтрокаДерева.Строки.Количество() > 0 Тогда + ОбновитьОтметкиДерева(СтрокаДерева, ЭлементыУзла[й]); + КонецЕсли; + + й = й + 1; + + КонецЕсли; + + КонецЦикла; + + ФлагСброшеныВсе = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСоставТипаНаСервере() + + дзДерево = ПолучитьИзВременногоХранилища(ДеревоТипов); + ОбновитьОтметкиДерева(дзДерево, СоставТипа); + ПоместитьВоВременноеХранилище(дзДерево, ДеревоТипов); + + ТекущаяСтрока = Неопределено; + СоставТипа.ПолучитьЭлементы().Очистить(); + ДеревоТиповВДанныеФормы(дзДерево, СоставТипа, ТекущаяСтрока); + Элементы.СоставТипа.ТекущаяСтрока = ТекущаяСтрока; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСостояниеДереваТипов() + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + Для Каждого Элемент Из СоставТипа.ПолучитьЭлементы() Цикл + Элементы.СоставТипа.Развернуть(Элемент.ПолучитьИдентификатор(), Истина); + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьСоставТипа() Экспорт + ОбновитьСоставТипаНаСервере(); + УстановитьСостояниеДереваТипов(); +КонецПроцедуры + +&НаСервере +Функция ПолучитьПредставлениеКвалификаторовТипа(ТипЗначения) + + маКвалификаторы = Новый Массив; + + Если ТипЗначения.СодержитТип(Тип("Строка")) Тогда + ПредставлениеКвалификаторовСтроки = "Длина " + ТипЗначения.КвалификаторыСтроки.Длина; + маКвалификаторы.Добавить(Новый Структура("Тип, Квалификаторы", "Строка", ПредставлениеКвалификаторовСтроки)); + КонецЕсли; + + Если ТипЗначения.СодержитТип(Тип("Дата")) Тогда + ПредставлениеКвалификаторовДаты = ТипЗначения.КвалификаторыДаты.ЧастиДаты; + маКвалификаторы.Добавить(Новый Структура("Тип, Квалификаторы", "Дата", ПредставлениеКвалификаторовДаты)); + КонецЕсли; + + Если ТипЗначения.СодержитТип(Тип("Число")) Тогда + ПредставлениеКвалификаторовЧисла = "Знак " + ТипЗначения.КвалификаторыЧисла.ДопустимыйЗнак + " " + + ТипЗначения.КвалификаторыЧисла.Разрядность + "." + ТипЗначения.КвалификаторыЧисла.РазрядностьДробнойЧасти; + маКвалификаторы.Добавить(Новый Структура("Тип, Квалификаторы", "Число", ПредставлениеКвалификаторовЧисла)); + КонецЕсли; + + ФлагНуженЗаголовок = маКвалификаторы.Количество() > 1; + + ПредставлениеКвалификаторовТипа = ""; + Для Каждого стКвалификаторы Из маКвалификаторы Цикл + ПредставлениеКвалификаторовТипа = ПредставлениеКвалификаторовТипа + ?(ФлагНуженЗаголовок, стКвалификаторы.Тип + + ": ", "") + стКвалификаторы.Квалификаторы + "; "; + КонецЦикла; + + Возврат ПредставлениеКвалификаторовТипа; + +КонецФункции + +&НаСервере +Процедура ЗаполнитьСтруктуруТаблицы(Таблица) + + Для Каждого Колонка Из Таблица.Колонки Цикл + СтрокаСтруктуры = СтруктураТаблицы.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаСтруктуры, Колонка, "Имя, ТипЗначения"); + СтрокаСтруктуры.ИмяСтарое = Колонка.Имя; + СтрокаСтруктуры.Квалификаторы = ПолучитьПредставлениеКвалификаторовТипа(Колонка.ТипЗначения); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьПервыйВыбранный(СоставТипа) + + Для Каждого СтрокаТипа Из СоставТипа.ПолучитьЭлементы() Цикл + Если СтрокаТипа.ЭтоГруппа Тогда + Результат = ПолучитьПервыйВыбранный(СтрокаТипа); + Если Результат <> Неопределено Тогда + Возврат Результат; + КонецЕсли; + Иначе + Если СтрокаТипа.Выбран Тогда + Возврат СтрокаТипа.Имя; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +&НаСервере +Функция СобратьТипы(СоставТипа, маТипы = Неопределено) + + Если маТипы = Неопределено Тогда + маТипы = Новый Массив; + КонецЕсли; + + Для Каждого СтрокаТипа Из СоставТипа.Строки Цикл + Если СтрокаТипа.ЭтоГруппа Тогда + маТипы = СобратьТипы(СтрокаТипа, маТипы); + Иначе + Если СтрокаТипа.Выбран Тогда + маТипы.Добавить(Тип(СтрокаТипа.Имя)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат маТипы; + +КонецФункции + +&НаСервере +Функция ПолучитьОписаниеТипов() + + дзДерево = ПолучитьИзВременногоХранилища(ДеревоТипов); + ОбновитьОтметкиДерева(дзДерево, СоставТипа); + маТипы = СобратьТипы(дзДерево); + + КвалификаторыЧисла = Новый КвалификаторыЧисла(КвалификаторыЧислаДлина, КвалификаторыЧислаТочность, ?( + КвалификаторыЧислаНеОтрицательный, ДопустимыйЗнак.Неотрицательный, ДопустимыйЗнак.Любой)); + КвалификаторыСтроки = Новый КвалификаторыСтроки(КвалификаторыСтрокиДлина, ?(КвалификаторыСтрокиФиксированная, + ДопустимаяДлина.Фиксированная, ДопустимаяДлина.Переменная)); + КвалификаторыДаты = Новый КвалификаторыДаты(?(КвалификаторыДатыСостав = "Дата и время", ЧастиДаты.ДатаВремя, + ЧастиДаты[КвалификаторыДатыСостав])); + + Возврат Новый ОписаниеТипов(маТипы, КвалификаторыЧисла, КвалификаторыСтроки, КвалификаторыДаты); + +КонецФункции + +&НаСервере +Функция ПолучитьКонтейнерТипа(ОписаниеТипов) + + Обработка = РеквизитФормыВЗначение("Объект"); + ВозвращаемыйТип = Тип("Неопределено"); + + маТипы = ОписаниеТипов.Типы(); + Если маТипы.Количество() > 0 Тогда + ВозвращаемыйТип = маТипы[0]; + КонецЕсли; + + Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(ВозвращаемыйТип); + +КонецФункции + +&НаСервере +Функция ПолучитьТаблицу(ТекстЗапроса = Неопределено) + + Обработка = РеквизитФормыВЗначение("Объект"); + + фЕстьИзмененияКолонок = Ложь; + стСоответствиеКолонок = Новый Структура; + маВыраженияКолонок = Новый Массив; + Таблица = Новый ТаблицаЗначений; + Для Каждого СтрокаСтруктуры Из СтруктураТаблицы Цикл + + Колонка = Таблица.Колонки.Добавить(СтрокаСтруктуры.Имя, СтрокаСтруктуры.ТипЗначения); + + маВыраженияКолонок.Добавить(СтрШаблон(" %1.%2 КАК %2", ИмяПараметра, Колонка.Имя)); + + Если ЗначениеЗаполнено(СтрокаСтруктуры.ИмяСтарое) Тогда + стСоответствиеКолонок.Вставить(СтрокаСтруктуры.Имя, СтрокаСтруктуры.ИмяСтарое); + фЕстьИзмененияКолонок = фЕстьИзмененияКолонок Или СтрокаСтруктуры.ИмяСтарое <> СтрокаСтруктуры.Имя; + КонецЕсли; + + КонецЦикла; + + Если стСоответствиеКолонок.Количество() > 0 Тогда + + СтараяТаблица = ПолучитьИзВременногоХранилища(АдресТаблицы); + + Если фЕстьИзмененияКолонок Тогда + + Для Каждого Строка Из СтараяТаблица Цикл + СтрокаНовая = Таблица.Добавить(); + Для Каждого кз Из стСоответствиеКолонок Цикл + СтрокаНовая[кз.Ключ] = Строка[кз.Значение]; + КонецЦикла; + КонецЦикла; + + Иначе + Для Каждого Строка Из СтараяТаблица Цикл + ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Строка); + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + ВыраженияКолонок = СтрСоединить(маВыраженияКолонок, ", + |"); + ТекстЗапроса = СтрШаблон(" + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | %1 + |ПОМЕСТИТЬ %2 + |ИЗ &%2 КАК %2;", ВыраженияКолонок, ИмяПараметра); + + Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Таблица); + +КонецФункции + +&НаКлиенте +Функция ПолноеИмяФормы(ИмяФормы) + Возврат СтрШаблон("%1.Форма.%2", ПутьМетаданных, ИмяФормы); +КонецФункции + +&НаКлиенте +Процедура КомандаОК(Команда) + + ВозвращаемоеЗначение = Новый Структура("ИмяПараметра, ТипКонтейнера, ОписаниеКонтейнера", ИмяПараметра, + ТипКонтейнера, ПолучитьОписаниеТипов()); + + Если ТипКонтейнера < 3 Тогда + + Если фРедактированиеТипа Тогда + ВозвращаемоеЗначение.ОписаниеКонтейнера = ПолучитьКонтейнерТипа(ВозвращаемоеЗначение.ОписаниеКонтейнера); + ИначеЕсли ВозвращаемоеЗначение.ОписаниеКонтейнера.СодержитТип(Тип("Граница")) + Или ВозвращаемоеЗначение.ОписаниеКонтейнера.СодержитТип(Тип("МоментВремени")) Тогда + ВозвращаемоеЗначение.ТипКонтейнера = 0; + КонецЕсли; + + Иначе + + ВозвращаемоеЗначение.ОписаниеКонтейнера = ПолучитьТаблицу(); + + КонецЕсли; + + Закрыть(ВозвращаемоеЗначение); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаВЗапрос(Команда) + Перем ТекстЗапроса; + + ВозвращаемоеЗначение = Новый Структура("ИмяПараметра, ТипКонтейнера, ОписаниеКонтейнера, ТекстЗапроса", + ИмяПараметра, ТипКонтейнера, ПолучитьОписаниеТипов()); + ВозвращаемоеЗначение.ОписаниеКонтейнера = ПолучитьТаблицу(ТекстЗапроса); + ВозвращаемоеЗначение.ТекстЗапроса = ТекстЗапроса; + + Закрыть(ВозвращаемоеЗначение); + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьМоментИГраницуВДерево(дзДерево, ТипЗначенияТекущий = Неопределено) + Перем Картинки; + + Если ТипЗначенияТекущий = Неопределено Тогда + ТипЗначенияТекущий = Новый ОписаниеТипов; + КонецЕсли; + + ДобавитьТип(дзДерево, ТипЗначенияТекущий, "Граница", Картинки, "Граница", 4); + ДобавитьТип(дзДерево, ТипЗначенияТекущий, "МоментВремени", Картинки, "Момент времени", 5); + + фМоментГраница = Истина; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьМоментИГраницу() + + дзДерево = ПолучитьИзВременногоХранилища(ДеревоТипов); + ДобавитьМоментИГраницуВДерево(дзДерево); + ПоместитьВоВременноеХранилище(дзДерево, ДеревоТипов); + + ОбновитьСоставТипаНаСервере(); + +КонецПроцедуры + +&НаСервере +Процедура УбратьМоментИГраницуИзДерева(дзДерево) + + Если дзДерево.Строки[4].Имя = "Граница" Тогда + дзДерево.Строки.Удалить(дзДерево.Строки[4]); + КонецЕсли; + + Если дзДерево.Строки[4].Имя = "МоментВремени" Тогда + дзДерево.Строки.Удалить(дзДерево.Строки[4]); + КонецЕсли; + + фМоментГраница = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура УбратьМоментИГраницу() + + дзДерево = ПолучитьИзВременногоХранилища(ДеревоТипов); + ОбновитьОтметкиДерева(дзДерево, СоставТипа); + УбратьМоментИГраницуИзДерева(дзДерево); + ПоместитьВоВременноеХранилище(дзДерево, ДеревоТипов); + + ТекущаяСтрока = Неопределено; + СоставТипа.ПолучитьЭлементы().Очистить(); + ДеревоТиповВДанныеФормы(дзДерево, СоставТипа, ТекущаяСтрока); + Элементы.СоставТипа.ТекущаяСтрока = ТекущаяСтрока; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьМоментаИГраницы() + + //Если ТипКонтейнера = 0 И НЕ СоставнойТип И (НЕ фПростойВид ИЛИ фРедактированиеТипа) Тогда + // Если НЕ фМоментГраница Тогда + // ДобавитьМоментИГраницу(); + // КонецЕсли; + //Иначе + // Если фМоментГраница Тогда + // УбратьМоментИГраницу(); + // КонецЕсли; + //КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьТип(дзДерево, ТипЗначенияТекущий, стрИмяТипа, Картинки, стрПредставлениеТипа = Неопределено, + чИндексВставки = Неопределено) + + //Если Картинки = Неопределено Тогда + // Картинки = ПолучитьИзВременногоХранилища(Объект.Картинки); + //КонецЕсли; + + Если чИндексВставки = Неопределено Тогда + Строка = дзДерево.Строки.Добавить(); + Иначе + Строка = дзДерево.Строки.Вставить(чИндексВставки); + КонецЕсли; + + Строка.Имя = стрИмяТипа; + Если ТипЗнч(Картинки) = Тип("Картинка") Тогда + Строка.Картинка = Картинки; + Иначе + //Картинка = Неопределено; + //Если Найти(стрИмяТипа, ".") = 0 Тогда + // Если Картинки.Свойство("Тип_" + стрИмяТипа, Картинка) Тогда + // Строка.Картинка = Картинка; + // КонецЕсли; + //КонецЕсли; + КонецЕсли; + + Если стрПредставлениеТипа = Неопределено Тогда + Строка.Представление = стрИмяТипа; + Иначе + Строка.Представление = стрПредставлениеТипа; + КонецЕсли; + + Если ТипЗначенияТекущий.СодержитТип(Тип(стрИмяТипа)) Тогда + Строка.Выбран = Истина; + Если Строка.Родитель <> Неопределено Тогда + Строка.Родитель.ВыбранПодч = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Менеджер, стрПрефиксИмени, КартинкаСсылок) +// Перем КартинкаСсылок; + +// Картинки.Свойство("Тип_" + стрПрефиксИмени, КартинкаСсылок); + +// маТипы = Менеджер.ТипВсеСсылки().Типы(); + + ВеткаТипов = Типы.Строки.Добавить(); + ВеткаТипов.Имя = стрПрефиксИмени; + ВеткаТипов.Представление = стрПрефиксИмени + " (" + Формат(Менеджер.Количество(), "ЧГ=0") + ")"; + ВеткаТипов.ЭтоГруппа = Истина; + ВеткаТипов.Картинка = КартинкаСсылок; + + Для Каждого тТип Из Менеджер Цикл + стрИмяТипа = тТип.Имя; + стрТип = стрПрефиксИмени + "." + стрИмяТипа; + Ссылка = Новый (Тип(стрТип)); + + ДобавитьТип(ВеткаТипов, ТипЗначенияТекущий, стрТип, КартинкаСсылок, стрИмяТипа); + //ДобавитьТип(ВеткаТипов, ТипЗначенияТекущий, стрТип, КартинкаСсылок, Строка(тТип)); + КонецЦикла; + + ВеткаТипов.Строки.Сортировать("Представление"); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьДеревоТипов(ТипЗначенияТекущий, СписокРазрешенных) + Перем Картинки; + + Типы = Новый ДеревоЗначений; + Типы.Колонки.Добавить("Выбран", Новый ОписаниеТипов("Булево")); + Типы.Колонки.Добавить("ВыбранПодч", Новый ОписаниеТипов("Булево")); + Типы.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + Типы.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); + Типы.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + Типы.Колонки.Добавить("ЭтоГруппа", Новый ОписаниеТипов("Булево")); + + ДобавитьТип(Типы, ТипЗначенияТекущий, "Булево", БиблиотекаКартинок.ТипБулево); + ДобавитьТип(Типы, ТипЗначенияТекущий, "Дата", БиблиотекаКартинок.ТипДата); + ДобавитьТип(Типы, ТипЗначенияТекущий, "Строка", БиблиотекаКартинок.ТипСтрока); + ДобавитьТип(Типы, ТипЗначенияТекущий, "Число", БиблиотекаКартинок.ТипЧисло); + //ДобавитьТип(Типы, ТипЗначенияТекущий, "Null", Картинки); + //ДобавитьТип(Типы, ТипЗначенияТекущий, "Неопределено", Картинки); + //ДобавитьТип(Типы, ТипЗначенияТекущий, "ВидДвиженияНакопления", Картинки, "Вид движения накопления"); + //ДобавитьТип(Типы, ТипЗначенияТекущий, "ВидДвиженияБухгалтерии", Картинки, "Вид движения бухгалтерии"); + //ДобавитьТип(Типы, ТипЗначенияТекущий, "ВидСчета", Картинки, "Вид счета"); + //ДобавитьТип(Типы, ТипЗначенияТекущий, "Тип", Картинки); + //ДобавитьТип(Типы, ТипЗначенияТекущий, "УникальныйИдентификатор", БиблиотекаКартинок.ТипИдентификатор, "Уникальный идентификатор"); + + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.Справочники, "СправочникСсылка", + БиблиотекаКартинок.Справочник); + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.Документы, "ДокументСсылка", БиблиотекаКартинок.Документ); + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.Перечисления, "ПеречислениеСсылка", + БиблиотекаКартинок.Перечисление); + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.ПланыВидовХарактеристик, "ПланВидовХарактеристикСсылка", + БиблиотекаКартинок.ПланВидовХарактеристик); + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.ПланыСчетов, "ПланСчетовСсылка", + БиблиотекаКартинок.ПланСчетов); + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.ПланыВидовРасчета, "ПланВидовРасчетаСсылка", + БиблиотекаКартинок.ПланВидовРасчета); + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.БизнесПроцессы, "БизнесПроцессСсылка", + БиблиотекаКартинок.БизнесПроцесс); + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.Задачи, "ЗадачаСсылка", БиблиотекаКартинок.Задача); + ДобавитьТипыСсылок(Типы, ТипЗначенияТекущий, Метаданные.ПланыОбмена, "ПланОбменаСсылка", + БиблиотекаКартинок.ПланОбмена); + + Возврат Типы; + +КонецФункции + +&НаКлиенте +Процедура СоставТипаСброситьВсеКроме(Узел, стрИмяКроме) + + СтрокаКроме = Неопределено; + Для Каждого Строка Из Узел.ПолучитьЭлементы() Цикл + + Если Строка.Имя <> стрИмяКроме Тогда + Строка.Выбран = Ложь; + Строка.ВыбранПодч = Ложь; + СоставТипаСброситьВсеКроме(Строка, стрИмяКроме); + Иначе + СтрокаКроме = Строка; + КонецЕсли; + + КонецЦикла; + + Если СтрокаКроме <> Неопределено И СтрокаКроме.Выбран Тогда + Родитель = Строка.ПолучитьРодителя(); + Если Родитель <> Неопределено Тогда + Родитель.ВыбранПодч = Истина; + КонецЕсли; + КонецЕсли; + + //Мы сбросили все в урезанном дереве на клиенте. В сеансовых данных остались пометки, они уже не действительны. + //Когда будем на сервере, сбросим их перед обновлением отметок. Для этого этот флаг. + ФлагСброшеныВсе = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура СоставТипаВыбранПриИзменении(Элемент) + + Если Не СоставнойТип Тогда + СоставТипаСброситьВсеКроме(СоставТипа, Элементы.СоставТипа.ТекущиеДанные.Имя); + КонецЕсли; + + Если Элементы.СоставТипа.ТекущиеДанные.Выбран Тогда + Родитель = Элементы.СоставТипа.ТекущиеДанные.ПолучитьРодителя(); + Если Родитель <> Неопределено Тогда + Родитель.ВыбранПодч = Истина; + КонецЕсли; + КонецЕсли; + + ОбновитьОтображениеКвалификаторов(); + +КонецПроцедуры + +&НаСервере +Функция СоставнойТипПриИзмененииНаСервере() + + стрТекущееИмя = Неопределено; + + Если СоставнойТип Тогда + УстановитьВидимостьЭлементов(); + Иначе + стрТекущееИмя = ПолучитьПервыйВыбранный(СоставТипа); + УстановитьВидимостьЭлементов(); + КонецЕсли; + + Возврат стрТекущееИмя; + +КонецФункции + +&НаКлиенте +Процедура СоставнойТипПриИзменении(Элемент) + + стрТекущееИмя = СоставнойТипПриИзмененииНаСервере(); + + Если Не СоставнойТип Тогда + СоставТипаСброситьВсеКроме(СоставТипа, стрТекущееИмя); + КонецЕсли; + + УстановитьСостояниеДереваТипов(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьОтображениеКвалификаторов() Экспорт + + Если Не фРедактированиеТипа Тогда + + фВидимостьКвалификаторовЧисла = Элементы.СоставТипа.ТекущиеДанные <> Неопределено + И Элементы.СоставТипа.ТекущиеДанные.Выбран И Элементы.СоставТипа.ТекущиеДанные.Имя = "Число"; + фВидимостьКвалификаторовСтроки = Элементы.СоставТипа.ТекущиеДанные <> Неопределено + И Элементы.СоставТипа.ТекущиеДанные.Выбран И Элементы.СоставТипа.ТекущиеДанные.Имя = "Строка"; + фВидимостьКвалификаторовДаты = Элементы.СоставТипа.ТекущиеДанные <> Неопределено + И Элементы.СоставТипа.ТекущиеДанные.Выбран И Элементы.СоставТипа.ТекущиеДанные.Имя = "Дата"; + + Элементы.ГруппаКвалификаторыЧисла.Видимость = фВидимостьКвалификаторовЧисла; + Элементы.ГруппаКвалификаторыСтроки.Видимость = фВидимостьКвалификаторовСтроки; + Элементы.ГруппаКвалификаторыДаты.Видимость = фВидимостьКвалификаторовДаты; + + Если фВидимостьКвалификаторовСтроки Тогда + Если КвалификаторыСтрокиДлина = 0 Тогда + КвалификаторыСтрокиКомментарий = "(неограниченная)"; + Элементы.КвалификаторыСтрокиФиксированная.Видимость = Ложь; + Иначе + КвалификаторыСтрокиКомментарий = ""; + Элементы.КвалификаторыСтрокиФиксированная.Видимость = Истина; + КонецЕсли; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СоставТипаПриАктивизацииСтроки(Элемент) + ПодключитьОбработчикОжидания("ОбновитьОтображениеКвалификаторов", 0.1, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура КвалификаторыСтрокиДлинаПриИзменении(Элемент) + ОбновитьОтображениеКвалификаторов(); +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимостьЭлементов() + + фТаблица = ТипКонтейнера = 3; + Элементы.ГруппаТипЗначения.Видимость = Не фТаблица; + Элементы.ГруппаРедактированиеТаблицы.Видимость = фТаблица; + Элементы.КомандаВЗапрос.Видимость = фТаблица И ВЗапросРазрешено; + + Если Не фТаблица Тогда + УстановитьВидимостьМоментаИГраницы(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КонтейнерПриИзменении(Элемент) + УстановитьВидимостьЭлементов(); + УстановитьСостояниеДереваТипов(); +КонецПроцедуры + +&НаКлиенте +Процедура ОкончаниеРедактированияТипа(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + Если РезультатЗакрытия <> Неопределено Тогда + + СтрокаСтруктуры = ДополнительныеПараметры.Таблица.НайтиПоИдентификатору(ДополнительныеПараметры.Строка); + СтрокаСтруктуры.ТипЗначения = РезультатЗакрытия.ОписаниеКонтейнера; + СтрокаСтруктуры.Квалификаторы = ПолучитьПредставлениеКвалификаторовТипа(РезультатЗакрытия.ОписаниеКонтейнера); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураТаблицыТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ТипЗначения = Элементы.СтруктураТаблицы.ТекущиеДанные.ТипЗначения; + + ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", СтруктураТаблицы, + Элементы.СтруктураТаблицы.ТекущаяСтрока, "ТипЗначения"); + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияТипа", ЭтотОбъект, + ПараметрыОповещения); + ПараметрыОткрытия = Новый Структура("Объект, ТипЗначения", Объект, ТипЗначения); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеТипа"), ПараметрыОткрытия, ЭтаФорма, Истина, , , + ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура СоставТипаПриИзменении(Элемент) + + Если Элементы.СоставТипа.ТекущиеДанные.ЭтоГруппа Тогда + + Если СоставнойТип Тогда + + ЭлементыГруппы = СоставТипа.НайтиПоИдентификатору(Элементы.СоставТипа.ТекущаяСтрока).ПолучитьЭлементы(); + фВыбранРодитель = Элементы.СоставТипа.ТекущиеДанные.Выбран; + Для Каждого Элемент Из ЭлементыГруппы Цикл + Элемент.Выбран = фВыбранРодитель; + КонецЦикла; + + Элементы.СоставТипа.ТекущиеДанные.ВыбранПодч = фВыбранРодитель; + + Иначе + Элементы.СоставТипа.ТекущиеДанные.Выбран = Ложь; + Элементы.СоставТипа.Развернуть(Элементы.СоставТипа.ТекущаяСтрока); + КонецЕсли; + + Иначе + + Родитель = СоставТипа.НайтиПоИдентификатору(Элементы.СоставТипа.ТекущаяСтрока).ПолучитьРодителя(); + Если Родитель <> Неопределено Тогда + + Если Элементы.СоставТипа.ТекущиеДанные.Выбран Тогда + Родитель.ВыбранПодч = Истина; + Иначе + Родитель.ВыбранПодч = Ложь; + ЭлементыГруппы = Родитель.ПолучитьЭлементы(); + Для Каждого Элемент Из ЭлементыГруппы Цикл + Если Элемент.Выбран Тогда + Родитель.ВыбранПодч = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтрокаПоискаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) + СтрокаПоиска = Текст; + СтандартнаяОбработка = Ложь; + ОбновитьСоставТипа(); +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьИзменениеИмениКолонки(НоваяСтрока, ОтменаРедактирования, Отказ) + + стрИмяКолонки = Элементы.СтруктураТаблицы.ТекущиеДанные.Имя; + + фИмяКорректно = Ложь; + Попытка + //@skip-warning + ст = Новый Структура(стрИмяКолонки); + фИмяКорректно = ЗначениеЗаполнено(стрИмяКолонки); + Исключение + КонецПопытки; + + Если Не фИмяКорректно Тогда + ПоказатьПредупреждение( , + "Неверное имя колонки! Имя должно состоять из одного слова, начинаться с буквы и не содержать специальных символов кроме ""_"".", + , Заголовок); + Отказ = Истина; + Возврат; + КонецЕсли; + + маСтрокиИмени = СтруктураТаблицы.НайтиСтроки(Новый Структура("Имя", стрИмяКолонки)); + Если маСтрокиИмени.Количество() > 1 Тогда + ПоказатьПредупреждение( , "Колонка с таким именем уже есть! Введите другое имя.", , Заголовок); + Отказ = Истина; + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СтруктураТаблицыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) + ОбработатьИзменениеИмениКолонки(НоваяСтрока, ОтменаРедактирования, Отказ); +КонецПроцедуры \ No newline at end of file diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Form.form b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Form.form new file mode 100644 index 0000000..6591985 --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Form.form @@ -0,0 +1,3287 @@ + + + + ГруппаПараметрыЗагрузкиНастроекПоУмолчанию + 196 + + РежимЗагрузкиНастроекПоУмолчанию + 198 + + <key>ru</key> + <value>Режим загрузки настроек по умолчанию</value> + + true + true + + true + + + РежимЗагрузкиНастроекПоУмолчанию + + + ru + Обновление - обновление описанию у существующих и добавление новых +Добавление новых - добавление новых настроек +Замещение - очистка и загрузка + + + РежимЗагрузкиНастроекПоУмолчаниюРасширеннаяПодсказка + 200 + Label + true + true + + true + Left + + + + РежимЗагрузкиНастроекПоУмолчаниюКонтекстноеМеню + 199 + true + + RadioButtonField + Enter + true + Left + true + + Tumbler + + + ru + Обновление + + + Обновление + + + + + ru + Добавление новых + + + ДобавлениеНовых + + + + + ru + Замещение + + + Замещение + + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Группа параметры загрузки настроек по умолчанию</value> + + + ru + Группа параметры загрузки настроек по умолчанию + + + ГруппаПараметрыЗагрузкиНастроекПоУмолчаниюРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + UsualGroup + + Auto + Auto + true + true + Auto + Auto + + + + ГруппаУправлениеОтображениемЗначениямиБезопасногоХрналища + 201 + + ПоказатьЗначенияБезопасногоХранилища + 166 + true + true + + true + + + ПоказатьЗначенияБезопасногоХранилища + + + ru + Управляет отображением данных в колонке "Значение" на вкладках "Настройки обработки (Безопасное хранилище)" и "Настройки команды (Безопасное хранилище)" +Да - отображаются в открытом виде +Нет - отображаются в режиме пароля "*****" + + + OnChange + ПоказатьЗначенияБезопасногоХранилищаПриИзменении + + + ПоказатьЗначенияБезопасногоХранилищаРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + + ПоказатьЗначенияБезопасногоХранилищаКонтекстноеМеню + 167 + true + + CheckBoxField + Enter + true + Left + true + + Tumbler + + ru + БЛ=Нет; БИ=Да + + + + true + true + + true + + + <key>ru</key> + <value>Группа управление отображением значениями безопасного хрналища</value> + + + ru + Группа управление отображением значениями безопасного хрналища + + + ГруппаУправлениеОтображениемЗначениямиБезопасногоХрналищаРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + UsualGroup + + Auto + Auto + true + true + Auto + Auto + + + + ГруппаОбщиеНастройки + 1 + + ДополнительнаяОбработка + 31 + true + true + + true + + + ДополнительнаяОбработка + + + ДополнительнаяОбработкаРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + + ДополнительнаяОбработкаКонтекстноеМеню + 32 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Группа1 + 140 + + ЗагрузитьНастройкиОбработкиПоУмолчанию + 142 + true + true + + true + + + ЗагрузитьНастройкиОбработкиПоУмолчаниюРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьНастройкиОбработкиПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + + ПрочитатьНастройкиОбработки + 146 + true + true + + true + + + ПрочитатьНастройкиОбработкиРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + UsualButton + Form.Command.ПрочитатьНастройкиОбработки + Normal + Auto + true + true + UserCmds + Auto + + + СохранитьНастройкиОбработки + 150 + true + true + + true + + + СохранитьНастройкиОбработкиРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + UsualButton + Form.Command.СохранитьНастройкиОбработки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа1РасширеннаяПодсказка + 141 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа общие настройки</value> + + + ru + Группа общие настройки + + + ГруппаОбщиеНастройкиРасширеннаяПодсказка + 2 + Label + true + true + + Left + + + UsualGroup + + Auto + Auto + true + true + Auto + Auto + + + + ГруппаРаботаСКоманадми + 39 + + ИдентификаторКоманды + 41 + true + true + + true + + + ИдентификаторКоманды + + + OnChange + ИдентификаторКомандыПриИзменении + + + ИдентификаторКомандыРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + ИдентификаторКомандыКонтекстноеМеню + 42 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + true + Normal + + + + ГруппаРаботаСКоманадмиКомандыКартинки + 50 + + ЗагрузитьНастройкиКомандыПоУмолчанию + 144 + true + true + + true + + + ЗагрузитьНастройкиКомандыПоУмолчаниюРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьНастройкиКомандыПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + + ПрочитатьНастройкиКоманды + 148 + true + true + + true + + + ПрочитатьНастройкиКомандыРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + UsualButton + Form.Command.ПрочитатьНастройкиКоманды + Normal + Auto + true + true + UserCmds + Auto + + + СохранитьНастройкиКоманды + 152 + true + true + + true + + + СохранитьНастройкиКомандыРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + UsualButton + Form.Command.СохранитьНастройкиКоманды + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа работа с команадми команды картинки</value> + + + ru + Группа работа с команадми команды картинки + + + ГруппаРаботаСКоманадмиКомандыКартинкиРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ВыполнитьКоманду + 44 + true + true + + true + + + ВыполнитьКомандуРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьКоманду + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа работа с команадми</value> + + + ru + Группа работа с команадми + + + ГруппаРаботаСКоманадмиРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + Auto + true + true + Auto + Auto + + + + ГруппаСтраницыНастройкиОбработки + 54 + + ГруппаСтраницаНастройкиОбработки + 56 + + НастройкиОбработки + 79 + true + true + + true + + + НастройкиОбработки + + None + + НастройкиОбработкиИмя + 92 + true + true + + true + + + НастройкиОбработки.Имя + + + НастройкиОбработкиИмяРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + НастройкиОбработкиИмяКонтекстноеМеню + 93 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиОбработкиТипЗначения + 178 + true + true + + true + + + НастройкиОбработки.ТипЗначения + + + НастройкиОбработкиТипЗначенияРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + + НастройкиОбработкиТипЗначенияКонтекстноеМеню + 179 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + НастройкиОбработкиТипЗначенияНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + НастройкиОбработкиТипКонтейнера + 181 + true + true + + true + + + НастройкиОбработки.ТипКонтейнера + + + НастройкиОбработкиТипКонтейнераРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + НастройкиОбработкиТипКонтейнераКонтекстноеМеню + 182 + true + + PictureField + EnterOnInput + Left + true + + 1 + true + true + true + + + + 1 + + AsFileRef + + + + НастройкиОбработкиЗначение + 95 + true + true + + true + + + НастройкиОбработки.Значение + + + OnChange + НастройкиОбработкиЗначениеПриИзменении + + + НастройкиОбработкиЗначениеРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + НастройкиОбработкиЗначениеКонтекстноеМеню + 96 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + НастройкиОбработкиЗначениеНачалоВыбора + + + Clearing + НастройкиОбработкиЗначениеОчистка + + + TextEditEnd + НастройкиОбработкиЗначениеОкончаниеВводаТекста + + + ChoiceProcessing + НастройкиОбработкиЗначениеОбработкаВыбора + + true + true + true + true + true + true + true + Normal + + + + НастройкиОбработкиОписание + 154 + true + true + + true + + + НастройкиОбработки.Описание + + + НастройкиОбработкиОписаниеРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + + НастройкиОбработкиОписаниеКонтекстноеМеню + 155 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиОбработкиКоманднаяПанель + 81 + Left + true + + + BeforeEditEnd + НастройкиОбработкиПередОкончаниемРедактирования + + + OnActivateRow + НастройкиОбработкиПриАктивизацииСтроки + + + НастройкиОбработкиСтрокаПоиска + 83 + + НастройкиОбработкиСтрокаПоискаРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + НастройкиОбработкиСтрокаПоискаКонтекстноеМеню + 84 + true + + НастройкиОбработки + + true + + + + НастройкиОбработкиСостояниеПросмотра + 86 + + НастройкиОбработкиСостояниеПросмотраРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + НастройкиОбработкиСостояниеПросмотраКонтекстноеМеню + 87 + true + + ViewStatusAddition + НастройкиОбработки + + true + + + + НастройкиОбработкиУправлениеПоиском + 89 + + НастройкиОбработкиУправлениеПоискомРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + НастройкиОбработкиУправлениеПоискомКонтекстноеМеню + 90 + true + + SearchControlAddition + НастройкиОбработки + + true + + + + НастройкиОбработкиРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + НастройкиОбработкиКонтекстноеМеню + 80 + true + + true + true + true + true + true + MultiRow + Auto +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + true + +
+ true + true + + true + + + <key>ru</key> + <value>Настройки обработки</value> + + + ru + Группа страница настройки обработки + + + ГруппаСтраницаНастройкиОбработкиРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Page + + Auto + auto + +
+ + ГруппаСтраницаНастройкиОбработкиБезопасноеХранилище + 98 + + НастройкиОбработкиБезопасноеХранилище + 100 + true + true + + true + + + НастройкиОбработкиБезопасноеХранилище + + None + + НастройкиОбработкиБезопасноеХранилищеИмя + 113 + true + true + + true + + + НастройкиОбработкиБезопасноеХранилище.Имя + + + НастройкиОбработкиБезопасноеХранилищеИмяРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеИмяКонтекстноеМеню + 114 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиОбработкиБезопасноеХранилищеТипЗначения + 184 + true + true + + true + + + НастройкиОбработкиБезопасноеХранилище.ТипЗначения + + + НастройкиОбработкиБезопасноеХранилищеТипЗначенияРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеТипЗначенияКонтекстноеМеню + 185 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + НастройкиОбработкиБезопасноеХранилищеТипЗначенияНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + НастройкиОбработкиБезопасноеХранилищеТипКонтейнера + 187 + true + true + + true + + + НастройкиОбработкиБезопасноеХранилище.ТипКонтейнера + + + НастройкиОбработкиБезопасноеХранилищеТипКонтейнераРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеТипКонтейнераКонтекстноеМеню + 188 + true + + PictureField + EnterOnInput + Left + true + + 1 + true + true + true + + + + 1 + + AsFileRef + + + + НастройкиОбработкиБезопасноеХранилищеЗначение + 116 + true + true + + true + + + НастройкиОбработкиБезопасноеХранилище.Значение + + + OnChange + НастройкиОбработкиБезопасноеХранилищеЗначениеПриИзменении + + + НастройкиОбработкиБезопасноеХранилищеЗначениеРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеЗначениеКонтекстноеМеню + 117 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + НастройкиОбработкиБезопасноеХранилищеЗначениеНачалоВыбора + + + Clearing + НастройкиОбработкиБезопасноеХранилищеЗначениеОчистка + + + TextEditEnd + НастройкиОбработкиБезопасноеХранилищеЗначениеОкончаниеВводаТекста + + + ChoiceProcessing + НастройкиОбработкиБезопасноеХранилищеЗначениеОбработкаВыбора + + true + true + true + true + true + true + true + true + Normal + + + + НастройкиОбработкиБезопасноеХранилищеОписание + 157 + true + true + + true + + + НастройкиОбработкиБезопасноеХранилище.Описание + + + НастройкиОбработкиБезопасноеХранилищеОписаниеРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеОписаниеКонтекстноеМеню + 158 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиОбработкиБезопасноеХранилищеКоманднаяПанель + 102 + Left + true + + + BeforeEditEnd + НастройкиОбработкиБезопасноеХранилищеПередОкончаниемРедактирования + + + OnActivateRow + НастройкиОбработкиБезопасноеХранилищеПриАктивизацииСтроки + + + НастройкиОбработкиБезопасноеХранилищеСтрокаПоиска + 104 + + НастройкиОбработкиБезопасноеХранилищеСтрокаПоискаРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеСтрокаПоискаКонтекстноеМеню + 105 + true + + НастройкиОбработкиБезопасноеХранилище + + true + + + + НастройкиОбработкиБезопасноеХранилищеСостояниеПросмотра + 107 + + НастройкиОбработкиБезопасноеХранилищеСостояниеПросмотраРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеСостояниеПросмотраКонтекстноеМеню + 108 + true + + ViewStatusAddition + НастройкиОбработкиБезопасноеХранилище + + true + + + + НастройкиОбработкиБезопасноеХранилищеУправлениеПоиском + 110 + + НастройкиОбработкиБезопасноеХранилищеУправлениеПоискомРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеУправлениеПоискомКонтекстноеМеню + 111 + true + + SearchControlAddition + НастройкиОбработкиБезопасноеХранилище + + true + + + + НастройкиОбработкиБезопасноеХранилищеРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + НастройкиОбработкиБезопасноеХранилищеКонтекстноеМеню + 101 + true + + true + true + true + true + true + MultiRow + Auto +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + true + +
+ true + true + + true + + + <key>ru</key> + <value>Настройки обработки (Безопасное хранилище)</value> + + + ru + Группа страница настройки обработки безопасное хранилище + + + ГруппаСтраницаНастройкиОбработкиБезопасноеХранилищеРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + Page + + Auto + auto + +
+ + ГруппаСтраницаНастройкиКоманды + 58 + + НастройкиКоманды + 203 + true + true + + true + + + НастройкиКоманды + + None + + НастройкиКомандыИмя + 216 + true + true + + true + + + НастройкиКоманды.Имя + + + НастройкиКомандыИмяРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + + НастройкиКомандыИмяКонтекстноеМеню + 217 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиКомандыТипЗначения + 225 + true + true + + true + + + НастройкиКоманды.ТипЗначения + + + НастройкиКомандыТипЗначенияРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + НастройкиКомандыТипЗначенияКонтекстноеМеню + 226 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + НастройкиКомандыТипЗначенияНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + НастройкиКомандыТипКонтейнера + 231 + true + true + + true + + + НастройкиКоманды.ТипКонтейнера + + + НастройкиКомандыТипКонтейнераРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + НастройкиКомандыТипКонтейнераКонтекстноеМеню + 232 + true + + PictureField + EnterOnInput + Left + true + + 1 + true + true + true + + + + 1 + + AsFileRef + + + + НастройкиКомандыЗначение + 219 + true + true + + true + + + НастройкиКоманды.Значение + + + OnChange + НастройкиКомандыЗначениеПриИзменении + + + НастройкиКомандыЗначениеРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + + НастройкиКомандыЗначениеКонтекстноеМеню + 220 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + НастройкиКомандыЗначениеНачалоВыбора + + + Clearing + НастройкиКомандыЗначениеОчистка + + + TextEditEnd + НастройкиКомандыЗначениеОкончаниеВводаТекста + + + ChoiceProcessing + НастройкиКомандыЗначениеОбработкаВыбора + + true + true + true + true + true + true + true + Normal + + + + НастройкиКомандыОписание + 222 + true + true + + true + + + НастройкиКоманды.Описание + + + НастройкиКомандыОписаниеРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + + НастройкиКомандыОписаниеКонтекстноеМеню + 223 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиКомандыКоманднаяПанель + 205 + Left + true + + + BeforeEditEnd + НастройкиКомандыПередОкончаниемРедактирования + + + OnActivateRow + НастройкиКомандыПриАктивизацииСтроки + + + НастройкиКомандыСтрокаПоиска + 207 + + НастройкиКомандыСтрокаПоискаРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + + НастройкиКомандыСтрокаПоискаКонтекстноеМеню + 208 + true + + НастройкиКоманды + + true + + + + НастройкиКомандыСостояниеПросмотра + 210 + + НастройкиКомандыСостояниеПросмотраРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + + НастройкиКомандыСостояниеПросмотраКонтекстноеМеню + 211 + true + + ViewStatusAddition + НастройкиКоманды + + true + + + + НастройкиКомандыУправлениеПоиском + 213 + + НастройкиКомандыУправлениеПоискомРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + + НастройкиКомандыУправлениеПоискомКонтекстноеМеню + 214 + true + + SearchControlAddition + НастройкиКоманды + + true + + + + НастройкиКомандыРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + + НастройкиКомандыКонтекстноеМеню + 204 + true + + true + true + true + true + true + MultiRow + Auto +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + true + +
+ true + true + + true + + + <key>ru</key> + <value>Настройки команды</value> + + + ru + Группа страница настройки команды + + + ГруппаСтраницаНастройкиКомандыРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Page + + Auto + auto + +
+ + ГруппаСтраницаНастройкиКомандыБезопасноеХранилище + 119 + + НастройкиКомандыБезопасноеХранилище + 121 + true + true + + true + + + НастройкиКомандыБезопасноеХранилище + + None + + НастройкиКомандыБезопасноеХранилищеИмя + 134 + true + true + + true + + + НастройкиКомандыБезопасноеХранилище.Имя + + + НастройкиКомандыБезопасноеХранилищеИмяРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеИмяКонтекстноеМеню + 135 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиКомандыБезопасноеХранилищеТипЗначения + 190 + true + true + + true + + + НастройкиКомандыБезопасноеХранилище.ТипЗначения + + + НастройкиКомандыБезопасноеХранилищеТипЗначенияРасширеннаяПодсказка + 192 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеТипЗначенияКонтекстноеМеню + 191 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + НастройкиКомандыБезопасноеХранилищеТипЗначенияНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + + НастройкиКомандыБезопасноеХранилищеТипКонтейнера + 193 + true + true + + true + + + НастройкиКомандыБезопасноеХранилище.ТипКонтейнера + + + НастройкиКомандыБезопасноеХранилищеТипКонтейнераРасширеннаяПодсказка + 195 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеТипКонтейнераКонтекстноеМеню + 194 + true + + PictureField + EnterOnInput + Left + true + + 1 + true + true + true + + + + 1 + + AsFileRef + + + + НастройкиКомандыБезопасноеХранилищеЗначение + 137 + true + true + + true + + + НастройкиКомандыБезопасноеХранилище.Значение + + + OnChange + НастройкиКомандыБезопасноеХранилищеЗначениеПриИзменении + + + НастройкиКомандыБезопасноеХранилищеЗначениеРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеЗначениеКонтекстноеМеню + 138 + true + + InputField + EnterOnInput + true + Left + true + + + StartChoice + НастройкиКомандыБезопасноеХранилищеЗначениеНачалоВыбора + + + Clearing + НастройкиКомандыБезопасноеХранилищеЗначениеОчистка + + + TextEditEnd + НастройкиКомандыБезопасноеХранилищеЗначениеОкончаниеВводаТекста + + + ChoiceProcessing + НастройкиКомандыБезопасноеХранилищеЗначениеОбработкаВыбора + + true + true + true + true + true + true + true + Normal + + + + НастройкиКомандыБезопасноеХранилищеОписание + 163 + true + true + + true + + + НастройкиКомандыБезопасноеХранилище.Описание + + + НастройкиКомандыБезопасноеХранилищеОписаниеРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеОписаниеКонтекстноеМеню + 164 + true + + InputField + EnterOnInput + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + НастройкиКомандыБезопасноеХранилищеКоманднаяПанель + 123 + Left + true + + + BeforeEditEnd + НастройкиКомандыБезопасноеХранилищеПередОкончаниемРедактирования + + + OnActivateRow + НастройкиКомандыБезопасноеХранилищеПриАктивизацииСтроки + + + НастройкиКомандыБезопасноеХранилищеСтрокаПоиска + 125 + + НастройкиКомандыБезопасноеХранилищеСтрокаПоискаРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеСтрокаПоискаКонтекстноеМеню + 126 + true + + НастройкиКомандыБезопасноеХранилище + + true + + + + НастройкиКомандыБезопасноеХранилищеСостояниеПросмотра + 128 + + НастройкиКомандыБезопасноеХранилищеСостояниеПросмотраРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеСостояниеПросмотраКонтекстноеМеню + 129 + true + + ViewStatusAddition + НастройкиКомандыБезопасноеХранилище + + true + + + + НастройкиКомандыБезопасноеХранилищеУправлениеПоиском + 131 + + НастройкиКомандыБезопасноеХранилищеУправлениеПоискомРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеУправлениеПоискомКонтекстноеМеню + 132 + true + + SearchControlAddition + НастройкиКомандыБезопасноеХранилище + + true + + + + НастройкиКомандыБезопасноеХранилищеРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + + НастройкиКомандыБезопасноеХранилищеКонтекстноеМеню + 122 + true + + true + true + true + true + true + MultiRow + Auto +
true
+ 1 + 1 + AutoUse + AutoUse + true + true + true + Auto + Auto + true + true + true + true + AsFileRef + true + +
+ true + true + + true + + + <key>ru</key> + <value>Настройки команды (Безопасное хранилище)</value> + + + ru + Группа страница настройки команды безопасное хранилище + + + ГруппаСтраницаНастройкиКомандыБезопасноеХранилищеРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Page + + Auto + auto + +
+ true + true + + true + + + <key>ru</key> + <value>Группа страницы настройки обработки</value> + + + ru + Группа страницы настройки обработки + + + ГруппаСтраницыНастройкиОбработкиРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
+ + ФормаКоманднаяПанель + -1 + + УправлениеНастройками + 234 + + ФормаЭкспортироватьНастройки + 236 + true + true + + true + + + ФормаЭкспортироватьНастройкиРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + Form.Command.ЭкспортироватьНастройки + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИмпортироватьНастройки + 238 + true + true + + true + + + ФормаИмпортироватьНастройкиРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + Form.Command.ИмпортироватьНастройки + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОчиститьНастройки + 240 + true + true + + true + + + ФормаОчиститьНастройкиРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + Form.Command.ОчиститьНастройки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Управление настройками</value> + + + УправлениеНастройкамиРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + true + true + true + Auto + true + true + true + auto + true + + Объект + 1 + + ExternalDataProcessor.ШаблонДополнительнойОбработки + + + true + + + true + +
true
+
+ + НастройкиОбработки + + <key>ru</key> + <value>Настройки обработки</value> + + 3 + + ValueTable + + + true + + + true + + + Имя + + <key>ru</key> + <value>Имя</value> + + 1 + + String + + 100 + + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 2 + + + true + + + true + + + + Описание + + <key>ru</key> + <value>Описание</value> + + 3 + + String + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип</value> + + 4 + + String + TypeDescription + + + + true + + + true + + + + Контейнер + + <key>ru</key> + <value>Контейнер</value> + + 5 + + + true + + + true + + + + ТипКонтейнера + + <key>ru</key> + <value>Тип контейнера</value> + + 6 + + Number + + + + true + + + true + + + + + ИдентификаторКоманды + + <key>ru</key> + <value>Идентификатор команды</value> + + 4 + + String + + + + true + + + true + + + + ДополнительнаяОбработка + + <key>ru</key> + <value>Дополнительная обработка</value> + + 2 + + CatalogRef.ДополнительныеОтчетыИОбработки + + + true + + + true + + + + НастройкиКоманды + + <key>ru</key> + <value>Настройки команды</value> + + 5 + + ValueTable + + + true + + + true + + + Имя + + <key>ru</key> + <value>Имя</value> + + 1 + + String + + 100 + + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 2 + + + true + + + true + + + + Описание + + <key>ru</key> + <value>Описание</value> + + 3 + + String + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип</value> + + 4 + + String + TypeDescription + + + + true + + + true + + + + Контейнер + + <key>ru</key> + <value>Контейнер</value> + + 5 + + + true + + + true + + + + ТипКонтейнера + + <key>ru</key> + <value>Тип контейнера</value> + + 6 + + Number + + + + true + + + true + + + + + НастройкиОбработкиБезопасноеХранилище + + <key>ru</key> + <value>Настройки обработки (Безопасное хранилище)</value> + + 6 + + ValueTable + + + true + + + true + + + Имя + + <key>ru</key> + <value>Имя</value> + + 1 + + String + + 100 + + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 2 + + + true + + + true + + + + Описание + + <key>ru</key> + <value>Описание</value> + + 3 + + String + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип</value> + + 4 + + String + TypeDescription + + + + true + + + true + + + + Контейнер + + <key>ru</key> + <value>Контейнер</value> + + 5 + + + true + + + true + + + + ТипКонтейнера + + <key>ru</key> + <value>Тип контейнера</value> + + 6 + + Number + + + + true + + + true + + + + + НастройкиКомандыБезопасноеХранилище + + <key>ru</key> + <value>Настройки команды (Безопасное хранилище)</value> + + 7 + + ValueTable + + + true + + + true + + + Имя + + <key>ru</key> + <value>Имя</value> + + 1 + + String + + 100 + + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 2 + + + true + + + true + + + + Описание + + <key>ru</key> + <value>Описание</value> + + 3 + + String + + + + true + + + true + + + + ТипЗначения + + <key>ru</key> + <value>Тип</value> + + 4 + + String + TypeDescription + + + + true + + + true + + + + Контейнер + + <key>ru</key> + <value>Контейнер</value> + + 5 + + + true + + + true + + + + ТипКонтейнера + + <key>ru</key> + <value>Тип контейнера</value> + + 6 + + Number + + + + true + + + true + + + + + ПоказатьЗначенияБезопасногоХранилища + + <key>ru</key> + <value>Показать значения безопасного хранилища</value> + + 8 + + Boolean + + + true + + + true + + + + НастройкиКомандыБезопасноеХранилищеПоказатьЗначения + + <key>ru</key> + <value>Показать значения безопасного хранилища</value> + + 9 + + Boolean + + + true + + + true + + + + ПутьМетаданных + + <key>ru</key> + <value>Путь метаданных</value> + + 10 + + String + + + + true + + + true + + + + СтароеЗначениеИмяПараметра + + <key>ru</key> + <value>Старое значение имя параметра</value> + + 11 + + String + + + + true + + + true + + + + РежимЗагрузкиНастроекПоУмолчанию + + <key>ru</key> + <value>Режим загрузки настроек по умолчанию</value> + + 12 + + String + + + + true + + + true + + + + ИмяОбработки + + <key>ru</key> + <value>Имя обработки</value> + + 13 + + String + + + + true + + + true + + + + ВыполнитьКоманду + + <key>ru</key> + <value>Выполнить команду</value> + + 2 + + ru + Выполнить команду + + + true + + + StdPicture.GenerateReport + + + + ВыполнитьКоманду + + + TextPicture + Auto + Auto + + + ЗагрузитьНастройкиКомандыПоУмолчанию + + <key>ru</key> + <value>Загрузить настройки команды по умолчанию</value> + + 5 + + ru + Загрузить настройки команды по умолчанию + + + true + + + StdPicture.ReadChanges + + + + ЗагрузитьНастройкиКомандыПоУмолчанию + + + Picture + Auto + Auto + + + ЗагрузитьНастройкиОбработкиПоУмолчанию + + <key>ru</key> + <value>Загрузить настройки обработки по умолчанию</value> + + 6 + + ru + Загрузить настройки обработки по умолчанию + + + true + + + StdPicture.ReadChanges + + + + ЗагрузитьНастройкиОбработкиПоУмолчанию + + + Picture + Auto + Auto + + + ПрочитатьНастройкиОбработки + + <key>ru</key> + <value>Прочитать настройки обработки</value> + + 4 + + ru + Прочитать настройки обработки из хранилища + + + true + + + StdPicture.OpenFile + + + + ПрочитатьНастройкиОбработки + + + Picture + Auto + Auto + + + ПрочитатьНастройкиКоманды + + <key>ru</key> + <value>Прочитать настройки команды</value> + + 7 + + ru + Прочитать настройки команды из хранилища + + + true + + + StdPicture.OpenFile + + + + ПрочитатьНастройкиКоманды + + + Picture + Auto + Auto + + + СохранитьНастройкиОбработки + + <key>ru</key> + <value>Сохранить настройки обработки</value> + + 1 + + ru + Сохранить настройки обработки + + + true + + + StdPicture.SaveFile + + + + СохранитьНастройкиОбработки + + + Picture + Auto + Auto + + + СохранитьНастройкиКоманды + + <key>ru</key> + <value>Сохранить настройки команды</value> + + 8 + + ru + Сохранить настройки команды + + + true + + + StdPicture.SaveFile + + + + СохранитьНастройкиКоманды + + + Picture + Auto + Auto + + + ЭкспортироватьНастройки + + <key>ru</key> + <value>Экспортировать настройки</value> + + 9 + + true + + + StdPicture.SaveFile + + + + ЭкспортироватьНастройки + + + Auto + Auto + + + ИмпортироватьНастройки + + <key>ru</key> + <value>Импортировать настройки</value> + + 10 + + true + + + StdPicture.OpenFile + + + + ИмпортироватьНастройки + + + Auto + Auto + + + ОчиститьНастройки + + <key>ru</key> + <value>Очистить настройки</value> + + + <key>en</key> + <value>Очистить настройки</value> + + 11 + + true + + + StdPicture.InputFieldClear + + + + ОчиститьНастройки + + + Auto + Auto + + + + + + +
diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыБезопасноеХранилищеТипКонтейнера/ValuesPicture.png b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыБезопасноеХранилищеТипКонтейнера/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..05d625a75bbae0a799b7b10afb375fb5590e152c GIT binary patch literal 703 zcmV;w0zmzVP)PKBjVDQGCp?l<#&9cE{p-I=kLhL-RTAIy8-d-LXd??3O&z%GaI3R-I| zgb-oIVMwJ?&w-vg-3n7vQ@!=ZiW++w7`yI72jSw4?81v>odB`#PkoLj`F#K8m7`I_ zj|_#ev@VRLb-gyjqvK0bN>$Gq9vxqD{R0`W`QxizeEN{p53c}79683JzO%F*?1-dl zJE1U^);*b=FHTr;;s^GByLInz5_Zg;2LhuR=}Nu?nCmP0&7JGWjkSty_5DkJe))*G zzM@-V?Y@U=bPu?8=?u+cI{~+Ic}CKMfwD$$Ig_pIHPzm1c|Kotco%YGjpg}#6wm7- zlufnO{@tq~HB994Oyu%dwn78aR#@fb%F@!+A~DN7(~8h6YXo&Ow#dm_@tH04n+*_NOU?iQ literal 0 HcmV?d00001 diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыТипКонтейнера/ValuesPicture.png b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыТипКонтейнера/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..05d625a75bbae0a799b7b10afb375fb5590e152c GIT binary patch literal 703 zcmV;w0zmzVP)PKBjVDQGCp?l<#&9cE{p-I=kLhL-RTAIy8-d-LXd??3O&z%GaI3R-I| zgb-oIVMwJ?&w-vg-3n7vQ@!=ZiW++w7`yI72jSw4?81v>odB`#PkoLj`F#K8m7`I_ zj|_#ev@VRLb-gyjqvK0bN>$Gq9vxqD{R0`W`QxizeEN{p53c}79683JzO%F*?1-dl zJE1U^);*b=FHTr;;s^GByLInz5_Zg;2LhuR=}Nu?nCmP0&7JGWjkSty_5DkJe))*G zzM@-V?Y@U=bPu?8=?u+cI{~+Ic}CKMfwD$$Ig_pIHPzm1c|Kotco%YGjpg}#6wm7- zlufnO{@tq~HB994Oyu%dwn78aR#@fb%F@!+A~DN7(~8h6YXo&Ow#dm_@tH04n+*_NOU?iQ literal 0 HcmV?d00001 diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиБезопасноеХранилищеТипКонтейнера/ValuesPicture.png b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиБезопасноеХранилищеТипКонтейнера/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..05d625a75bbae0a799b7b10afb375fb5590e152c GIT binary patch literal 703 zcmV;w0zmzVP)PKBjVDQGCp?l<#&9cE{p-I=kLhL-RTAIy8-d-LXd??3O&z%GaI3R-I| zgb-oIVMwJ?&w-vg-3n7vQ@!=ZiW++w7`yI72jSw4?81v>odB`#PkoLj`F#K8m7`I_ zj|_#ev@VRLb-gyjqvK0bN>$Gq9vxqD{R0`W`QxizeEN{p53c}79683JzO%F*?1-dl zJE1U^);*b=FHTr;;s^GByLInz5_Zg;2LhuR=}Nu?nCmP0&7JGWjkSty_5DkJe))*G zzM@-V?Y@U=bPu?8=?u+cI{~+Ic}CKMfwD$$Ig_pIHPzm1c|Kotco%YGjpg}#6wm7- zlufnO{@tq~HB994Oyu%dwn78aR#@fb%F@!+A~DN7(~8h6YXo&Ow#dm_@tH04n+*_NOU?iQ literal 0 HcmV?d00001 diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиТипКонтейнера/ValuesPicture.png b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиТипКонтейнера/ValuesPicture.png new file mode 100644 index 0000000000000000000000000000000000000000..05d625a75bbae0a799b7b10afb375fb5590e152c GIT binary patch literal 703 zcmV;w0zmzVP)PKBjVDQGCp?l<#&9cE{p-I=kLhL-RTAIy8-d-LXd??3O&z%GaI3R-I| zgb-oIVMwJ?&w-vg-3n7vQ@!=ZiW++w7`yI72jSw4?81v>odB`#PkoLj`F#K8m7`I_ zj|_#ev@VRLb-gyjqvK0bN>$Gq9vxqD{R0`W`QxizeEN{p53c}79683JzO%F*?1-dl zJE1U^);*b=FHTr;;s^GByLInz5_Zg;2LhuR=}Nu?nCmP0&7JGWjkSty_5DkJe))*G zzM@-V?Y@U=bPu?8=?u+cI{~+Ic}CKMfwD$$Ig_pIHPzm1c|Kotco%YGjpg}#6wm7- zlufnO{@tq~HB994Oyu%dwn78aR#@fb%F@!+A~DN7(~8h6YXo&Ow#dm_@tH04n+*_NOU?iQ literal 0 HcmV?d00001 diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Module.bsl b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Module.bsl new file mode 100644 index 0000000..dad10df --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Module.bsl @@ -0,0 +1,1304 @@ +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + МетаданныеОбработки = ОбработкаОбъект.Метаданные(); + + ИмяОбработки = МетаданныеОбработки.Имя; + ПутьМетаданных = "ВнешняяОбработка." + ИмяОбработки; + + ДополнительнаяОбработка = ПолучитьСсылкуДополнительнойОбработкиПоИмени(ИмяОбработки); + + Если ЗначениеЗаполнено(ДополнительнаяОбработка) Тогда + ТаблицаКоманд = ОбработкаОбъект.СведенияОВнешнейОбработке().Команды; + Для Каждого стр Из ТаблицаКоманд Цикл + Если стр.Использование = "ВызовСерверногоМетода" Тогда + Элементы.ИдентификаторКоманды.СписокВыбора.Добавить(стр.Идентификатор, стр.Представление); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ПоказатьЗначенияБезопасногоХранилища = Ложь; + РежимЗагрузкиНастроекПоУмолчанию = "Обновление"; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ИзменитьОтображениеЗначенияБезопасногоХранилища(); + + Если Не ЗначениеЗаполнено(ДополнительнаяОбработка) Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Зарегистрируйте обработку в дополнительных отчетах и обработках и повторите открытие"; + Сообщение.Поле = "ДополнительнаяОбработка"; //имя реквизита + //Сообщение.УстановитьДанные(); //Ссылка на объект ИБ + Сообщение.Сообщить(); + + Возврат; + + КонецЕсли; + + ПодключитьОбработчикОжидания("ПрочитатьНастройкиОбработкиНаКлиенте", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрочитатьНастройкиОбработкиНаКлиенте() + ПрочитатьНастройкиОбработкиНаСервере(); +КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовШапкиФормы + +&НаКлиенте +Процедура ИдентификаторКомандыПриИзменении(Элемент) + + ПрочитатьНастройкиКомандыНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьЗначенияБезопасногоХранилищаПриИзменении(Элемент) + ИзменитьОтображениеЗначенияБезопасногоХранилища(); +КонецПроцедуры +// Код процедур и функций +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиОбработки + +//НастройкиОбработки_Таблица + +&НаКлиенте +Процедура НастройкиОбработкиПриАктивизацииСтроки(Элемент) + ИмяТаблицы = "НастройкиОбработки"; + ТаблицаПриАктивизацииСтроки(Элемент, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) + ИмяТаблицы = "НастройкиОбработки"; + ТаблицаПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ, ИмяТаблицы); +КонецПроцедуры + + +// НастройкиОбработки_ТипЗначения + +&НаКлиенте +Процедура НастройкиОбработкиТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработки"; + ТаблицаТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + + +// НастройкиОбработки_Значение + +&НаКлиенте +Процедура НастройкиОбработкиЗначениеПриИзменении(Элемент) + ИмяТаблицы = "НастройкиОбработки"; + ТаблицаЗначениеПриИзменении(ИмяТаблицы); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиЗначениеНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработки"; + ТаблицаЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиЗначениеОчистка(Элемент, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработки"; + ТаблицаЗначениеОчистка(Элемент, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, ВыборДобавлением, + СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработки"; + ТаблицаЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, + СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработки"; + ТаблицаЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка, + ИмяТаблицы); +КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиОбработкиБезопасноеХранилище + +// НастройкиОбработкиБезопасноеХранилище_Таблица + +&НаКлиенте +Процедура НастройкиОбработкиБезопасноеХранилищеПриАктивизацииСтроки(Элемент) + ИмяТаблицы = "НастройкиОбработкиБезопасноеХранилище"; + ТаблицаПриАктивизацииСтроки(Элемент, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиБезопасноеХранилищеПередОкончаниемРедактирования(Элемент, НоваяСтрока, + ОтменаРедактирования, Отказ) + ИмяТаблицы = "НастройкиОбработкиБезопасноеХранилище"; + ТаблицаПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ, ИмяТаблицы); +КонецПроцедуры + + +// НастройкиОбработкиБезопасноеХранилище_ТипЗначения + +&НаКлиенте +Процедура НастройкиОбработкиБезопасноеХранилищеТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, + СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработкиБезопасноеХранилище"; + ТаблицаТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + + +// НастройкиОбработкиБезопасноеХранилище_Значение + +&НаКлиенте +Процедура НастройкиОбработкиБезопасноеХранилищеЗначениеПриИзменении(Элемент) + ИмяТаблицы = "НастройкиОбработкиБезопасноеХранилище"; + ТаблицаЗначениеПриИзменении(ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиБезопасноеХранилищеЗначениеНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, + СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработкиБезопасноеХранилище"; + ТаблицаЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиБезопасноеХранилищеЗначениеОчистка(Элемент, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработкиБезопасноеХранилище"; + ТаблицаЗначениеОчистка(Элемент, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиБезопасноеХранилищеЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, + ДополнительныеДанные, ВыборДобавлением, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработкиБезопасноеХранилище"; + ТаблицаЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОбработкиБезопасноеХранилищеЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, + ПараметрыПолученияДанных, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиОбработкиБезопасноеХранилище"; + ТаблицаЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка, + ИмяТаблицы); +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиКоманды + +// НастройкиКоманды_Таблица + +&НаКлиенте +Процедура НастройкиКомандыПриАктивизацииСтроки(Элемент) + ИмяТаблицы = "НастройкиКоманды"; + ТаблицаПриАктивизацииСтроки(Элемент, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) + ИмяТаблицы = "НастройкиКоманды"; + ТаблицаПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ, ИмяТаблицы); +КонецПроцедуры + + +// НастройкиКоманды_ТипЗначения + +&НаКлиенте +Процедура НастройкиКомандыТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + + ИмяТаблицы = "НастройкиКоманды"; + ТаблицаТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка, ИмяТаблицы); + +КонецПроцедуры + + +// НастройкиКоманды_Значение + +&НаКлиенте +Процедура НастройкиКомандыЗначениеПриИзменении(Элемент) + ИмяТаблицы = "НастройкиКоманды"; + ТаблицаЗначениеПриИзменении(ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыЗначениеНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКоманды"; + ТаблицаЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыЗначениеОчистка(Элемент, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКоманды"; + ТаблицаЗначениеОчистка(Элемент, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, ВыборДобавлением, + СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКоманды"; + ТаблицаЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, + СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКоманды"; + ТаблицаЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка, + ИмяТаблицы); +КонецПроцедуры +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиКомандыБезопасноеХранилище + +// НастройкиКомандыБезопасноеХранилище_Таблица + +&НаКлиенте +Процедура НастройкиКомандыБезопасноеХранилищеПриАктивизацииСтроки(Элемент) + ИмяТаблицы = "НастройкиКомандыБезопасноеХранилище"; + ТаблицаПриАктивизацииСтроки(Элемент, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыБезопасноеХранилищеПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, + Отказ) + ИмяТаблицы = "НастройкиКомандыБезопасноеХранилище"; + ТаблицаПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ, ИмяТаблицы); +КонецПроцедуры + + +// НастройкиКомандыБезопасноеХранилище_ТипЗначения + +&НаКлиенте +Процедура НастройкиКомандыБезопасноеХранилищеТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, + СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКомандыБезопасноеХранилище"; + ТаблицаТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + + +// НастройкиКомандыБезопасноеХранилище_Значение + +&НаКлиенте +Процедура НастройкиКомандыБезопасноеХранилищеЗначениеПриИзменении(Элемент) + ИмяТаблицы = "НастройкиКомандыБезопасноеХранилище"; + ТаблицаЗначениеПриИзменении(ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыБезопасноеХранилищеЗначениеНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, + СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКомандыБезопасноеХранилище"; + ТаблицаЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыБезопасноеХранилищеЗначениеОчистка(Элемент, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКомандыБезопасноеХранилище"; + ТаблицаЗначениеОчистка(Элемент, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыБезопасноеХранилищеЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, ДополнительныеДанные, + ВыборДобавлением, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКомандыБезопасноеХранилище"; + ТаблицаЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиКомандыБезопасноеХранилищеЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, + ПараметрыПолученияДанных, СтандартнаяОбработка) + ИмяТаблицы = "НастройкиКомандыБезопасноеХранилище"; + ТаблицаЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка, + ИмяТаблицы); +КонецПроцедуры + +#КонецОбласти +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ВыполнитьКоманду(Команда) + + Если Модифицированность Тогда + ОбщегоНазначенияКлиент.СообщитьПользователю( + "Настройки обработки модифицированы, сохраните перед выполнением команды"); + Возврат; + КонецЕсли; + + ВыполнитьКомандуНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНастройкиКомандыПоУмолчанию(Команда) + ЗагрузитьНастройкиКомандыПоУмолчаниюНаСервере(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНастройкиОбработкиПоУмолчанию(Команда) + ЗагрузитьНастройкиОбработкиПоУмолчаниюНаСервере(); +КонецПроцедуры +&НаКлиенте +Процедура СохранитьНастройкиОбработки(Команда) + + СохранитьНастройкиОбработкиНаСервере(); + + Модифицированность = Ложь; + + ОповеститьОбИзменении(ДополнительнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьНастройкиКоманды(Команда) + + СохранитьНастройкиКомандыНаСервере(); + + Модифицированность = Ложь; + + ОповеститьОбИзменении(ДополнительнаяОбработка); + +КонецПроцедуры + +// Чтение настройек из хранилищ +&НаКлиенте +Процедура ПрочитатьНастройкиОбработки(Команда) + ПрочитатьНастройкиОбработкиНаСервере(); +КонецПроцедуры + +&НаКлиенте +Процедура ПрочитатьНастройкиКоманды(Команда) + ПрочитатьНастройкиКомандыНаСервере(); +КонецПроцедуры +&НаКлиенте +Процедура ЭкспортироватьНастройки(Команда) + + АдресФайла = ""; + ЭкспортироватьНастройкиНаСервере(АдресФайла); + + //@skip-check use-non-recommended-method + ТекДата = ТекущаяДата(); + ИмяФайла = СтрШаблон("%1_Настройки_%2.txt", ИмяОбработки, Формат(ТекДата, "ДФ=yyyy-MM-dd_HHmmss;")); + //@skip-check bsl-legacy-check-static-feature-access + ПолучитьФайл(АдресФайла, ИмяФайла); + +КонецПроцедуры + +&НаКлиенте +Асинх Процедура ИмпортироватьНастройки(Команда) + ОписаниеПомещенногоФайла = Ждать ПоместитьФайлНаСерверАсинх(); + ИмпортироватьНастройкиНаСервере(ОписаниеПомещенногоФайла.Адрес); +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьНастройки(Команда) + ОчиститьНастройкиНаСервере(); +КонецПроцедуры +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#Область ОбщиеОбработчикиСобытийЭлементовТаблицыФормы + +// Таблица +&НаКлиенте +Процедура ТаблицаПриАктивизацииСтроки(Элемент, ИмяТаблицы) + УстановитьПараметрыВводаЗначения(ИмяТаблицы); +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ, ИмяТаблицы) + + ОбработатьИзменениеИмениПараметра(НоваяСтрока, ОтменаРедактирования, Отказ, ИмяТаблицы); + +КонецПроцедуры + + +// Таблица_ТипЗначения + +&НаКлиенте +Процедура ТаблицаТипЗначенияНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка, ИмяТаблицы) + + СтандартнаяОбработка = Ложь; + ТекущиеДанные = Элементы[ИмяТаблицы].ТекущиеДанные; + ТекущаяСтрока = Элементы[ИмяТаблицы].ТекущаяСтрока; + + Если ТекущиеДанные.ТипКонтейнера < 3 Тогда + ТипЗначения = ТекущиеДанные.ТипЗначения; + Иначе + ТипЗначения = ТекущиеДанные.Контейнер; + КонецЕсли; + + ПараметрыОповещения = Новый Структура("ИмяТаблицы, Строка, Поле", ИмяТаблицы, ТекущаяСтрока, "ТипЗначения"); + + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки", ЭтотОбъект, + ПараметрыОповещения); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("Объект", Объект); + ПараметрыОткрытия.Вставить("ТипЗначения", ТипЗначения); + ПараметрыОткрытия.Вставить("ТипКонтейнера", ТекущиеДанные.ТипКонтейнера); + ПараметрыОткрытия.Вставить("Имя", ТекущиеДанные.Имя); + ПараметрыОткрытия.Вставить("ВЗапросРазрешено", Истина); + + ОткрытьФорму(ПолноеИмяФормы("РедактированиеТипа"), ПараметрыОткрытия, ЭтотОбъект, Истина, , , + ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + +КонецПроцедуры + +// Таблица_Значение + +&НаКлиенте +Процедура ТаблицаЗначениеПриИзменении(ИмяТаблицы) + + ТекущиеДанные = Элементы[ИмяТаблицы].ТекущиеДанные; + + Если ТекущиеДанные.ТипКонтейнера = 0 Тогда + + ТекущиеДанные.Контейнер = ТекущиеДанные.Значение; + Если Не ЗначениеЗаполнено(ТекущиеДанные.ТипЗначения) Тогда + ТекущиеДанные.ТипЗначения = ОписаниеТиповПоТипу(ТипЗнч(ТекущиеДанные.Значение)); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, ИмяТаблицы) + + ТекущиеДанные = Элемент.Родитель.ТекущиеДанные; + + Если ТекущиеДанные.ТипКонтейнера > 0 Тогда + + СтандартнаяОбработка = Ложь; + ПараметрыОповещения = Новый Структура("ИмяТаблицы, Строка, Поле", ИмяТаблицы, Элемент.Родитель.ТекущаяСтрока, + "Контейнер"); + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки", + ЭтотОбъект, ПараметрыОповещения); + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("Объект", Объект); + ПараметрыОткрытия.Вставить("ТипЗначения", ТекущиеДанные.ТипЗначения); + ПараметрыОткрытия.Вставить("Заголовок", ТекущиеДанные.Имя); + ПараметрыОткрытия.Вставить("Значение", ТекущиеДанные.Контейнер); + ПараметрыОткрытия.Вставить("ТипКонтейнера", ТекущиеДанные.ТипКонтейнера); + + Если ТекущиеДанные.ТипКонтейнера = 3 Тогда + ИмяФормыРедактирования = "РедактированиеТаблицы"; + Иначе + ИмяФормыРедактирования = "ПодборВСписок"; + КонецЕсли; + + ОткрытьФорму(ПолноеИмяФормы(ИмяФормыРедактирования), ПараметрыОткрытия, ЭтотОбъект, Ложь, , , + ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + + ИначеЕсли ТипЗнч(ТекущиеДанные.Контейнер) = Тип("Структура") Тогда + + Если ТекущиеДанные.Контейнер.Тип = "МоментВремени" Или ТекущиеДанные.Контейнер.Тип = "Граница" Тогда + СтандартнаяОбработка = Ложь; + ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", "ПараметрыЗапроса", + Элемент.Родитель.ТекущаяСтрока, "Контейнер"); + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки", + ЭтотОбъект, ПараметрыОповещения); + ПараметрыОткрытия = Новый Структура("Объект, Значение", Объект, ТекущиеДанные.Контейнер); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеГраницыМомента"), ПараметрыОткрытия, ЭтотОбъект, Ложь, , , + ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ИначеЕсли ТекущиеДанные.Контейнер.Тип = "Тип" Тогда + СтандартнаяОбработка = Ложь; + ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", "ПараметрыЗапроса", + Элемент.Родитель.ТекущаяСтрока, "КонтейнерКакТип"); + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки", + ЭтотОбъект, ПараметрыОповещения); + ПараметрыОткрытия = Новый Структура("Объект, ТипЗначения, ТипКонтейнера", Объект, ТекущиеДанные.Контейнер, + ТекущиеДанные.ТипКонтейнера); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеТипа"), ПараметрыОткрытия, ЭтотОбъект, Истина, , , + ОписаниеОповещенияОЗакрытииОткрываемойФормы, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецЕсли; + + Иначе + Если ТипЗнч(ТекущиеДанные.Значение) = Тип("УникальныйИдентификатор") Тогда + СтандартнаяОбработка = Ложь; + ПараметрыОповещения = Новый Структура("Таблица, Строка, Поле", "ПараметрыЗапроса", + Элемент.Родитель.ТекущаяСтрока, "Значение"); + ОписаниеОповещенияОЗакрытииОткрываемойФормы = Новый ОписаниеОповещения("ОкончаниеРедактированияСтроки", + ЭтотОбъект, ПараметрыОповещения); + ПараметрыОткрытия = Новый Структура("Объект, Значение", Объект, ТекущиеДанные.Значение); + ОткрытьФорму(ПолноеИмяФормы("РедактированиеУникальногоИдентификатора"), ПараметрыОткрытия, ЭтотОбъект, + Истина, , , ОписаниеОповещенияОЗакрытииОткрываемойФормы, + РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаЗначениеОчистка(Элемент, СтандартнаяОбработка, ИмяТаблицы) + + ТекущиеДанные = Элементы[ИмяТаблицы].ТекущиеДанные; + + Если ТекущиеДанные.ТипКонтейнера = 0 Тогда + КоличествоТипов = ТекущиеДанные.ТипЗначения.Типы().Количество(); + Если КоличествоТипов = 0 Или КоличествоТипов > 1 Тогда + ТекущиеДанные.Значение = Неопределено; + Иначе + ТекущиеДанные.Значение = ТекущиеДанные.ТипЗначения.ПривестиЗначение(Неопределено); + КонецЕсли; + ИначеЕсли ТекущиеДанные.ТипКонтейнера = 3 Тогда + КонецЕсли; + + УстановитьПараметрыВводаЗначения(ИмяТаблицы); + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаЗначениеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ИмяТаблицы) + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Тип") Тогда + ОграничениеТипа = Элементы[ИмяТаблицы + "Значение"].ОграничениеТипа; + МассивТипы = Новый Массив; + МассивТипы.Добавить(ВыбранноеЗначение); + ТипЗначения = Новый ОписаниеТипов(МассивТипы, ОграничениеТипа.КвалификаторыЧисла, + ОграничениеТипа.КвалификаторыСтроки, ОграничениеТипа.КвалификаторыДаты); + Значение = ТипЗначения.ПривестиЗначение(Элементы[ИмяТаблицы].ТекущиеДанные.Значение); + Элементы[ИмяТаблицы].ТекущиеДанные.Значение = Значение; + СтандартнаяОбработка = Ложь; + КонецЕсли; + + УстановитьПараметрыВводаЗначения(ИмяТаблицы); + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаЗначениеОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, + СтандартнаяОбработка, ИмяТаблицы) + + ТекущиеДанные = Элементы[ИмяТаблицы].ТекущиеДанные; + Если ТипЗнч(ТекущиеДанные.Контейнер) = Тип("Структура") И ТекущиеДанные.Контейнер.Тип = "УникальныйИдентификатор" Тогда + Попытка + Значение = Новый УникальныйИдентификатор(Текст); + Исключение + ВызватьИсключение "Не корректное значение уникального идентификатора"; + КонецПопытки; + Таблица_СохранитьЗначение(Элементы[ИмяТаблицы].ТекущаяСтрока, Значение, ИмяТаблицы); + СтандартнаяОбработка = Ложь; + КонецЕсли; +КонецПроцедуры +#КонецОбласти +&НаСервере +Процедура ВыполнитьКомандуНаСервере() + + Если ЗначениеЗаполнено(ИдентификаторКоманды) Тогда + + ПараметрыВыполнения = Новый Структура("ДополнительнаяОбработкаСсылка", ДополнительнаяОбработка); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбработкаОбъект.ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьОтображениеЗначенияБезопасногоХранилища() + + Элементы.НастройкиОбработкиБезопасноеХранилищеЗначение.РежимПароля = Не ПоказатьЗначенияБезопасногоХранилища; + Элементы.НастройкиКомандыБезопасноеХранилищеЗначение.РежимПароля = Не ПоказатьЗначенияБезопасногоХранилища; + +КонецПроцедуры + +&НаКлиенте +Процедура ОкончаниеРедактированияСтроки(РезультатЗакрытия, ДополнительныеПараметры) Экспорт + + ИмяТаблицы = ДополнительныеПараметры.ИмяТаблицы; + Если РезультатЗакрытия = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ДополнительныеПараметры.Поле = "Контейнер" Тогда + Таблица_СохранитьЗначение(ДополнительныеПараметры.Строка, РезультатЗакрытия.Значение, ИмяТаблицы); + + ИначеЕсли ДополнительныеПараметры.Поле = "КонтейнерКакТип" Тогда + //ПараметрыЗапроса_СохранитьЗначение(ДополнительныеПараметры.Строка, РезультатЗакрытия.ОписаниеКонтейнера); + ИначеЕсли ДополнительныеПараметры.Поле = "ТипЗначения" Тогда + + ОписаниеКонтейнера = РезультатЗакрытия.ОписаниеКонтейнера; + + ИдСтрокаПараметра = ДополнительныеПараметры.Строка; + Если идСтрокаПараметра = Неопределено Тогда + //добавление нового параметра + СтрокаПараметра = ДобавитьПараметрСКонтролемИмени(РезультатЗакрытия.ИмяПараметра); + СтрокаПараметра.ТипКонтейнера = РезультатЗакрытия.ТипКонтейнера; + ИдСтрокаПараметра = СтрокаПараметра.ПолучитьИдентификатор(); + КонецЕсли; + + ПараметрыТаблицы_УстановитьТип(ИдСтрокаПараметра, РезультатЗакрытия.ТипКонтейнера, ОписаниеКонтейнера, + ИмяТаблицы); + + УстановитьПараметрыВводаЗначения(ИмяТаблицы); + + ИначеЕсли ДополнительныеПараметры.Поле = "Значение" Тогда + Элементы.ПараметрыЗапроса.ТекущиеДанные.Значение = РезультатЗакрытия.Значение; + Элементы.ПараметрыЗапроса.ТекущиеДанные.Контейнер = РезультатЗакрытия.Значение; + Модифицированность = Истина; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьНастройкиОбработкиНаСервере() + + Если Не ЗначениеЗаполнено(ДополнительнаяОбработка) Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Не заполнено обязательные поле ""Дополнительная обработка"""; + Сообщение.Поле = "ДополнительнаяОбработка"; + Сообщение.Сообщить(); + + Возврат; + + КонецЕсли; + + НастройкиОбработки.Очистить(); + НастройкиОбработкиБезопасноеХранилище.Очистить(); + + + // Чтение из хранилища обработки + + ДополнительнаяОбработкаОбъект = ДополнительнаяОбработка.ПолучитьОбъект(); + НастройкиИзХранилищаНастроекОбработки = ДополнительнаяОбработкаОбъект.ХранилищеНастроек.Получить(); + + Если ТипЗнч(НастройкиИзХранилищаНастроекОбработки) = Тип("Структура") Тогда + + Если НастройкиИзХранилищаНастроекОбработки.Свойство("НастройкиОбработки") Тогда + НастройкиОбработки.Загрузить(НастройкиИзХранилищаНастроекОбработки.НастройкиОбработки); + КонецЕсли; + + КонецЕсли; + + // Чтение из безопасного хранилища + + НастройкиИзБезопасногоХранилища = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ДополнительнаяОбработка); + + Если ТипЗнч(НастройкиИзБезопасногоХранилища) = Тип("Структура") Тогда + + Если НастройкиИзБезопасногоХранилища.Свойство("НастройкиОбработкиБезопасноеХранилище") Тогда + НастройкиОбработкиБезопасноеХранилище.Загрузить( + НастройкиИзБезопасногоХранилища.НастройкиОбработкиБезопасноеХранилище); + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьНастройкиКомандыНаСервере() + + Если Не ЗначениеЗаполнено(ДополнительнаяОбработка) Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Не заполнено обязательные поле ""Дополнительная обработка"""; + Сообщение.Поле = "ДополнительнаяОбработка"; + Сообщение.Сообщить(); + + Возврат; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(ИдентификаторКоманды) Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Не заполнено обязательные поле ""Идентификатор команды"""; + Сообщение.Поле = "ИдентификаторКоманды"; + Сообщение.Сообщить(); + + Возврат; + + КонецЕсли; + + НастройкиКоманды.Очистить(); + НастройкиКомандыБезопасноеХранилище.Очистить(); + + // Чтение из хранилища обработки + + ДополнительнаяОбработкаОбъект = ДополнительнаяОбработка.ПолучитьОбъект(); + НастройкиИзХранилищаНастроекОбработки = ДополнительнаяОбработкаОбъект.ХранилищеНастроек.Получить(); + + Если ТипЗнч(НастройкиИзХранилищаНастроекОбработки) = Тип("Структура") Тогда + + Если ЗначениеЗаполнено(ИдентификаторКоманды) И НастройкиИзХранилищаНастроекОбработки.Свойство( + ИдентификаторКоманды) Тогда + НастройкиКоманды.Загрузить(НастройкиИзХранилищаНастроекОбработки[ИдентификаторКоманды]); + КонецЕсли; + + КонецЕсли; + + // Чтение из безопасного хранилища + + НастройкиИзБезопасногоХранилища = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ДополнительнаяОбработка); + + Если ТипЗнч(НастройкиИзБезопасногоХранилища) = Тип("Структура") Тогда + + Если ЗначениеЗаполнено(ИдентификаторКоманды) И НастройкиИзБезопасногоХранилища.Свойство(ИдентификаторКоманды) Тогда + НастройкиКомандыБезопасноеХранилище.Загрузить(НастройкиИзБезопасногоХранилища[ИдентификаторКоманды]); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СохранитьНастройкиОбработкиНаСервере() + + Если Не ЗначениеЗаполнено(ДополнительнаяОбработка) Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Не заполнено обязательные поле ""Дополнительная обработка"""; + Сообщение.Поле = "ДополнительнаяОбработка"; + Сообщение.Сообщить(); + + Возврат; + + КонецЕсли; + + // Сохранение в хранилище обработки + + ДополнительнаяОбработкаОбъект = ДополнительнаяОбработка.ПолучитьОбъект(); + НастройкиДляСохранения = ДополнительнаяОбработкаОбъект.ХранилищеНастроек.Получить(); + + Если НастройкиДляСохранения = Неопределено Тогда + НастройкиДляСохранения = Новый Структура; + КонецЕсли; + + НастройкиДляСохранения.Вставить("НастройкиОбработки", НастройкиОбработки.Выгрузить()); + + ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(НастройкиДляСохранения); + ДополнительнаяОбработкаОбъект.Записать(); + + + // Сохранение в безопасное хранилище + + НастройкиДляСохраненияБезопасноеХранилище = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища( + ДополнительнаяОбработка); + + Если НастройкиДляСохраненияБезопасноеХранилище = Неопределено Тогда + НастройкиДляСохраненияБезопасноеХранилище = Новый Структура; + КонецЕсли; + + НастройкиДляСохраненияБезопасноеХранилище.Вставить("НастройкиОбработкиБезопасноеХранилище", + НастройкиОбработкиБезопасноеХранилище.Выгрузить()); + + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ДополнительнаяОбработка, + НастройкиДляСохраненияБезопасноеХранилище); + +КонецПроцедуры + +&НаСервере +Процедура СохранитьНастройкиКомандыНаСервере() + + Если Не ЗначениеЗаполнено(ДополнительнаяОбработка) Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Не заполнено обязательные поле ""Дополнительная обработка"""; + Сообщение.Поле = "ДополнительнаяОбработка"; + Сообщение.Сообщить(); + + Возврат; + + КонецЕсли; + + Если Не ЗначениеЗаполнено(ИдентификаторКоманды) Тогда + + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Не заполнено обязательные поле ""Идентификатор команды"""; + Сообщение.Поле = "ИдентификаторКоманды"; + Сообщение.Сообщить(); + + Возврат; + + КонецЕсли; + + // Сохранение в хранилище обработки + + ДополнительнаяОбработкаОбъект = ДополнительнаяОбработка.ПолучитьОбъект(); + НастройкиДляСохранения = ДополнительнаяОбработкаОбъект.ХранилищеНастроек.Получить(); + + Если НастройкиДляСохранения = Неопределено Тогда + НастройкиДляСохранения = Новый Структура; + КонецЕсли; + + НастройкиДляСохранения.Вставить(ИдентификаторКоманды, НастройкиКоманды.Выгрузить()); + + ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(НастройкиДляСохранения); + ДополнительнаяОбработкаОбъект.Записать(); + + + // Сохранение в безопасное хранилище + + НастройкиДляСохраненияБезопасноеХранилище = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища( + ДополнительнаяОбработка); + + Если НастройкиДляСохраненияБезопасноеХранилище = Неопределено Тогда + НастройкиДляСохраненияБезопасноеХранилище = Новый Структура; + КонецЕсли; + + НастройкиДляСохраненияБезопасноеХранилище.Вставить(ИдентификаторКоманды, + НастройкиКомандыБезопасноеХранилище.Выгрузить()); + + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ДополнительнаяОбработка, + НастройкиДляСохраненияБезопасноеХранилище); + +КонецПроцедуры +&НаКлиенте +Функция ПолноеИмяФормы(ИмяФормы) + Возврат СтрШаблон("%1.Форма.%2", ПутьМетаданных, ИмяФормы); +КонецФункции + +&НаСервере +Процедура Таблица_СохранитьЗначение(СтрокаИд, Знач Значение, ИмяТаблицы) + + СтрокаПараметр = ЭтотОбъект[ИмяТаблицы].НайтиПоИдентификатору(СтрокаИд); + + Если СтрокаПараметр.ТипКонтейнера = 0 Тогда + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Значение); + Если ТипЗнч(СтрокаПараметр.Контейнер) = Тип("Структура") Тогда + СтрокаПараметр.Значение = СтрокаПараметр.Контейнер.Представление; + Иначе + СтрокаПараметр.Значение = Значение; + КонецЕсли; + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 1 Тогда + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Значение); + СтрокаПараметр.Значение = СтрокаПараметр.Контейнер.Представление; + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 2 Тогда + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Значение); + СтрокаПараметр.Значение = СтрокаПараметр.Контейнер.Представление; + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 3 Тогда + СтрокаПараметр.ТипЗначения = "Таблица значений"; + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Значение); + СтрокаПараметр.Значение = СтрокаПараметр.Контейнер.Представление; + Иначе + ВызватьИсключение "Ошибка в типе контейнера параметра"; + КонецЕсли; + + Модифицированность = Истина; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОписаниеТиповПоТипу(Тип) + МассивТипы = Новый Массив; + МассивТипы.Добавить(Тип); + Возврат Новый ОписаниеТипов(МассивТипы); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ИмяКорректно(ПроверяемоеИмя) + + Если Не ЗначениеЗаполнено(ПроверяемоеИмя) Тогда + Возврат Ложь; + КонецЕсли; + + Попытка + //@skip-warning + ст = Новый Структура(ПроверяемоеИмя); + Исключение + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции +&НаКлиенте +Процедура УстановитьПараметрыВводаЗначения(ИмяТаблицы) + + ТекущиеДанные = Элементы[ИмяТаблицы].ТекущиеДанные; + + ЭлементЗначение = Элементы[ИмяТаблицы + "Значение"]; + + Если ТекущиеДанные <> Неопределено Тогда + + ЭлементЗначение.КартинкаКнопкиВыбора = Новый Картинка; + + Если ЗначениеЗаполнено(ТекущиеДанные.ТипКонтейнера) Тогда + + ЭлементЗначение.КнопкаОчистки = Ложь; + ЭлементЗначение.КнопкаВыбора = Истина; + ЭлементЗначение.ВыбиратьТип = Ложь; + ЭлементЗначение.РедактированиеТекста = Ложь; + ЭлементЗначение.ОграничениеТипа = Новый ОписаниеТипов("Строка"); + ЭлементЗначение.КартинкаКнопкиВыбора = БиблиотекаКартинок.Изменить; + + ИначеЕсли ТипЗнч(ТекущиеДанные.Контейнер) = Тип("Структура") Тогда + + ЭлементЗначение.КнопкаОчистки = Ложь; + ЭлементЗначение.КнопкаВыбора = Истина; + ЭлементЗначение.ВыбиратьТип = Ложь; + ЭлементЗначение.КартинкаКнопкиВыбора = БиблиотекаКартинок.Изменить; + ЭлементЗначение.РедактированиеТекста = Ложь; + ЭлементЗначение.ОграничениеТипа = Новый ОписаниеТипов("Строка"); + + Иначе + + ЭлементЗначение.РедактированиеТекста = Истина; + Если ЗначениеЗаполнено(ТекущиеДанные.ТипЗначения) Тогда + ЭлементЗначение.ОграничениеТипа = ТекущиеДанные.ТипЗначения; + Иначе + ЭлементЗначение.ОграничениеТипа = Новый ОписаниеТипов; + КонецЕсли; + + Если ТекущиеДанные.Значение = Неопределено И ЭлементЗначение.ОграничениеТипа.Типы().Количество() > 1 Тогда + + ЭлементЗначение.ВыбиратьТип = Истина; + ЭлементЗначение.КнопкаВыбора = Истина; + ЭлементЗначение.КнопкаОчистки = Ложь; + + Иначе + + ЭлементЗначение.ВыбиратьТип = Ложь; + ЭлементЗначение.КнопкаОчистки = Истина; + ЭлементЗначение.КнопкаВыбора = НужнаКнопкаВыбораЗначению(ТекущиеДанные.Значение); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ДобавитьПараметрСКонтролемИмени(ИмяПараметра) + + СтрИспользуемоеИмяПараметра = ИмяПараметра; + Счетчик = 1; + Пока Истина Цикл + + МассивСтрок = НастройкиКоманды.НайтиСтроки(Новый Структура("Имя", СтрИспользуемоеИмяПараметра)); + Если МассивСтрок.Количество() = 0 Тогда + Прервать; + КонецЕсли; + + СтрИспользуемоеИмяПараметра = ИмяПараметра + Счетчик; + Счетчик = Счетчик + 1; + + КонецЦикла; + + НоваяСтрока = НастройкиКоманды.Добавить(); + НоваяСтрока.Имя = СтрИспользуемоеИмяПараметра; + + Возврат НоваяСтрока; + +КонецФункции + +&НаСервере +Процедура ПараметрыТаблицы_УстановитьТип(СтрокаИд, ТипКонтейнера, ТипЗначения, ИмяТаблицы) + + СтрокаПараметр = ЭтотОбъект[ИмяТаблицы].НайтиПоИдентификатору(СтрокаИд); // ЭтотОбъект["НастройкиКоманды"].НайтиПоИдентификатору(СтрокаИд) + Контейнер = СтрокаПараметр.Контейнер; + + Если ТипКонтейнера = 1 Или ТипКонтейнера = 2 Тогда + + Если СтрокаПараметр.ТипКонтейнера = 1 Или СтрокаПараметр.ТипКонтейнера = 2 Тогда + КонтейнерМассив = Контейнер12ВМассив(Контейнер); + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 3 Тогда + //Была ТЗ, теперь СЗ. Надо достать первую ячейку. + Таблица = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(Контейнер); + КонтейнерМассив = Таблица.ВыгрузитьКолонку(0); + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 0 Тогда + + КонтейнерМассив = Новый Массив; + + КонтейнерМассив.Добавить(РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(Контейнер)); + //Если ЗначениеЗаполнено(СтрокаПараметр.Значение) Тогда + // КонтейнерМассив.Добавить(СтрокаПараметр.Значение); + //КонецЕсли; + + СтрокаПараметр.Значение = Неопределено; + + КонецЕсли; + + Если ТипКонтейнера = 1 Тогда + НовыйСписок = Новый СписокЗначений; + НовыйСписок.ЗагрузитьЗначения(КонтейнерМассив); + НовыйСписок.ТипЗначения = ТипЗначения; + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(НовыйСписок); + ИначеЕсли ТипКонтейнера = 2 Тогда + НовыйСписок = Новый СписокЗначений; + НовыйСписок.ЗагрузитьЗначения(КонтейнерМассив); + НовыйСписок.ТипЗначения = ТипЗначения; + КонтейнерМассив = НовыйСписок.ВыгрузитьЗначения(); + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(КонтейнерМассив); + КонецЕсли; + + ИначеЕсли ТипКонтейнера = 3 Тогда + + Если СтрокаПараметр.ТипКонтейнера = 1 Или СтрокаПараметр.ТипКонтейнера = 2 Тогда + Таблица = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(ТипЗначения); + Значение = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(Контейнер); + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + Значение = Значение.ВыгрузитьЗначения(); + КонецЕсли; + Для Каждого ъ Из Значение Цикл + Таблица.Добавить()[0] = ъ; + КонецЦикла; + НовыйКонтейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Таблица); + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 3 Тогда + Контейнер = ТипЗначения; + //Теперь не копируем, преобразование уже выполняет редактор типа! + //СкопироватьДанныеКонтейнераТипа3(Контейнер, СтрокаПараметр.Контейнер); + НовыйКонтейнер = Контейнер; + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 0 Тогда + Таблица = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(ТипЗначения); + Таблица.Добавить()[0] = СтрокаПараметр.Значение; + НовыйКонтейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(Таблица); + КонецЕсли; + + СтрокаПараметр.Контейнер = НовыйКонтейнер; + + ИначеЕсли ТипКонтейнера = 0 Тогда + + Если СтрокаПараметр.ТипКонтейнера = 1 Или СтрокаПараметр.ТипКонтейнера = 2 Тогда + КонтейнерМассив = Контейнер12ВМассив(Контейнер); + Если КонтейнерМассив.Количество() > 0 Тогда + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение( + ТипЗначения.ПривестиЗначение(КонтейнерМассив[0])); + КонецЕсли; + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 3 Тогда + СписокЗначений = ТаблицаФормаПриИзмененииСЗИзТЗ(Контейнер); + Если СписокЗначений.Количество() > 0 Тогда + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение( + ТипЗначения.ПривестиЗначение(СписокЗначений.СписокЗначений[0].Значение)); + КонецЕсли; + ИначеЕсли СтрокаПараметр.ТипКонтейнера = 0 Тогда + СтрокаПараметр.Контейнер = РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение( + ТипЗначения.ПривестиЗначение(РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение( + СтрокаПараметр.Контейнер))); + КонецЕсли; + + КонецЕсли; + + СтрокаПараметр.ТипКонтейнера = ТипКонтейнера; + Если СтрокаПараметр.ТипКонтейнера = 3 Тогда + СтрокаПараметр.ТипЗначения = "Таблица значений"; + Иначе + СтрокаПараметр.ТипЗначения = ТипЗначения; + КонецЕсли; + + Модифицированность = Истина; + + Если ТипЗнч(СтрокаПараметр.Контейнер) = Тип("Структура") Тогда + СтрокаПараметр.Значение = СтрокаПараметр.Контейнер.Представление; + Иначе + СтрокаПараметр.Значение = СтрокаПараметр.Контейнер; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +//Контейнер типа 1 и типа 2 (список значений или массив) возвращаем в виде массива +Функция Контейнер12ВМассив(Контейнер) + + Значение = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(Контейнер); + + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + Возврат Значение.ВыгрузитьЗначения(); + ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда + Возврат Значение; + КонецЕсли; + + Возврат Неопределено; + +КонецФункции + +&НаСервере +Функция ТаблицаФормаПриИзмененииСЗИзТЗ(Контейнер) + + ТзТаблица = РеквизитФормыВЗначение("Объект").Контейнер_ВосстановитьЗначение(Контейнер); + СзСписок = Новый СписокЗначений; + Если ТзТаблица.Колонки.Количество() > 0 Тогда + СзСписок.ЗагрузитьЗначения(тзТаблица.ВыгрузитьКолонку(0)); + КонецЕсли; + + Возврат РеквизитФормыВЗначение("Объект").Контейнер_СохранитьЗначение(СзСписок); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НужнаКнопкаВыбораЗначению(Значение) + + МассивТипыБезКнопкиВыбора = Новый Массив; + МассивТипыБезКнопкиВыбора.Добавить(Тип("Строка")); + МассивТипыБезКнопкиВыбора.Добавить(Тип("Число")); + МассивТипыБезКнопкиВыбора.Добавить(Тип("Булево")); + МассивТипыБезКнопкиВыбора.Добавить(Тип("ВидДвиженияНакопления")); + МассивТипыБезКнопкиВыбора.Добавить(Тип("ВидДвиженияБухгалтерии")); + МассивТипыБезКнопкиВыбора.Добавить(Тип("ВидСчета")); + ТипыБезКнопкийВыбора = Новый ОписаниеТипов(МассивТипыБезКнопкиВыбора); + + Возврат Не ТипыБезКнопкийВыбора.СодержитТип(ТипЗнч(Значение)); + +КонецФункции + +&НаКлиенте +Процедура ОбработатьИзменениеИмениПараметра(НоваяСтрока, ОтменаРедактирования, Отказ, ИмяТаблицы) + + Если ОтменаРедактирования Тогда + Возврат; + КонецЕсли; + + СтрИмяПараметра = Элементы[ИмяТаблицы].ТекущиеДанные.Имя; + Если ЗначениеЗаполнено(СтрИмяПараметра) И СтрИмяПараметра = СтароеЗначениеИмяПараметра Тогда + Возврат; + КонецЕсли; + + Если Не ИмяКорректно(СтрИмяПараметра) Тогда + //ПоказатьПредупреждениеКонсоли( + // "Неверное имя параметра! Имя должно состоять из одного слова, начинаться с буквы и не содержать специальных символов кроме ""_""."); + + //@skip-check use-non-recommended-method + Сообщить( + "Неверное имя параметра! Имя должно состоять из одного слова, начинаться с буквы и не содержать специальных символов кроме ""_""."); + Отказ = Истина; + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ПолучитьСсылкуДополнительнойОбработкиПоИмени(ИмяОбъекта) + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки + |ГДЕ + | ДополнительныеОтчетыИОбработки.ИмяОбъекта = &ИмяОбъекта"; + Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + + Пока Выборка.Следующий() Цикл + Возврат Выборка.Ссылка; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +&НаСервере +Процедура ЗагрузитьНастройкиКомандыПоУмолчаниюНаСервере() + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбработкаОбъект.ЗагрузитьНастройкиКомандыПоУмолчанию(НастройкиКоманды, ИдентификаторКоманды, + РежимЗагрузкиНастроекПоУмолчанию); + ОбработкаОбъект.ЗагрузитьНастройкиКомандыБезопасноеХранилищеПоУмолчанию(НастройкиКомандыБезопасноеХранилище, + ИдентификаторКоманды, РежимЗагрузкиНастроекПоУмолчанию); +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьНастройкиОБработкиПоУмолчаниюНаСервере() + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + ОбработкаОбъект.ЗагрузитьНастройкиОбработкиПоУмолчанию(НастройкиОбработки, РежимЗагрузкиНастроекПоУмолчанию); + ОбработкаОбъект.ЗагрузитьНастройкиОбработкиБезопасноеХранилищеПоУмолчанию(НастройкиОбработкиБезопасноеХранилище, + РежимЗагрузкиНастроекПоУмолчанию); + +КонецПроцедуры +&НаСервере +Процедура ЭкспортироватьНастройкиНаСервере(АдресФайла) + + + //@skip-check reading-attribute-from-database + НастройкиИзХранилищаНастроекОбработки = ДополнительнаяОбработка.ХранилищеНастроек.Получить(); + НастройкиИзБезопасногоХранилища = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ДополнительнаяОбработка); + + СтруктураНастроек = Новый Структура; + СтруктураНастроек.Вставить("ИмяОбработки", ИмяОбработки); + СтруктураНастроек.Вставить("ДатаСохраненияНастроек", ТекущаяДатаСеанса()); + СтруктураНастроек.Вставить("НастройкиИзХранилищаНастроекОбработки", НастройкиИзХранилищаНастроекОбработки); + СтруктураНастроек.Вставить("НастройкиИзБезопасногоХранилища", НастройкиИзБезопасногоХранилища); + + ТекстНастроек = ЗначениеВСтрокуВнутр(СтруктураНастроек); + + ПотокВПамяти = Новый ПотокВПамяти; + + ТекстДок = Новый ТекстовыйДокумент; + ТекстДок.УстановитьТекст(ТекстНастроек); + ТекстДок.Записать(ПотокВПамяти); + + АдресФайла = ПоместитьВоВременноеХранилище(ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные(), УникальныйИдентификатор); +КонецПроцедуры + +&НаСервере +Процедура ИмпортироватьНастройкиНаСервере(АдресФайла) + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла); + + ПотокВПамяти = Новый ПотокВПамяти; + ЗаписьДанных = Новый ЗаписьДанных(ПотокВПамяти); + ЗаписьДанных.Записать(ДвоичныеДанные); + ЗаписьДанных.Закрыть(); + ПотокВПамяти.Перейти(0, ПозицияВПотоке.Начало); + + ТекстДок = Новый ТекстовыйДокумент; + ТекстДок.Прочитать(ПотокВПамяти, КодировкаТекста.UTF8); + ТекстНастроек = ТекстДок.ПолучитьТекст(); + + Попытка + СтруктураНастроек = ЗначениеИзСтрокиВнутр(ТекстНастроек); + Если ТипЗнч(СтруктураНастроек) = Тип("Структура") Тогда + + + // Сохранение в хранилище обработки + + ДополнительнаяОбработкаОбъект = ДополнительнаяОбработка.ПолучитьОбъект(); + ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(СтруктураНастроек.НастройкиИзХранилищаНастроекОбработки); + ДополнительнаяОбработкаОбъект.Записать(); + + // Сохранение в безопасное хранилище + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ДополнительнаяОбработка, + СтруктураНастроек.НастройкиИзБезопасногоХранилища); + + ПрочитатьНастройкиОбработкиНаСервере(); + + Иначе + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Файл содержит настройки неподдерживаемого формата!"; + Сообщение.Сообщить(); + + КонецЕсли; + + Исключение + Сообщение = Новый СообщениеПользователю; + Сообщение.Текст = "Файл содержит настройки неподдерживаемого формата!"; + Сообщение.Сообщить(); + КонецПопытки; + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьНастройкиНаСервере() + // Сохранение в хранилище обработки + + ДополнительнаяОбработкаОбъект = ДополнительнаяОбработка.ПолучитьОбъект(); + ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(Новый Структура); + ДополнительнаяОбработкаОбъект.Записать(); + + // Сохранение в безопасное хранилище + ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ДополнительнаяОбработка, Новый Структура); + + ПрочитатьНастройкиОбработкиНаСервере(); + +КонецПроцедуры +#КонецОбласти \ No newline at end of file diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/ObjectModule.bsl b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/ObjectModule.bsl new file mode 100644 index 0000000..8058543 --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/ObjectModule.bsl @@ -0,0 +1,1033 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +#Область ОписаниеПеременных + +Перем ОбработкаСсылка; // Ссылка на данную обработку +Перем ПараметрыЛогирования; // Используется для подсистемы логирования + +// ПараметрыКоманды - Структура - Содержит параметры сохраненные для обработки в режиме предприятие +// ПараметрыКоманды.НастройкиОбработки - Структура - содержит параметры с вкладки "Настройки обработки" +// ПараметрыКоманды.НастройкиОбработкиБезопасноеХранилище - Структура - содержит параметры с вкладки "Настройки обработки (Безопасное хранилище)" +// ПараметрыКоманды.НастройкиКоманды - Структура - содержит параметры с вкладки "Настройки команды" +// ПараметрыКоманды.НастройкиКомандыБезопасноеХранилище - Структура - содержит параметры с вкладки "Настройки команды (Безопасное хранилище)" +Перем ПараметрыКоманды; + +Перем НастройкиОбработки; // Структура - содержит параметры с вкладки "Настройки обработки" +Перем НастройкиОбработкиБезопасноеХранилище; // Структура - содержит параметры с вкладки "Настройки обработки (Безопасное хранилище)" +Перем НастройкиКоманды; // Структура - содержит параметры с вкладки "Настройки команды" +Перем НастройкиКомандыБезопасноеХранилище; // Структура - содержит параметры с вкладки "Настройки команды (Безопасное хранилище)" + + +// НастройкиКомандИОбработки - Структура - Содержит параметры сохраненные для обработки в режиме предприятие +// НастройкиКомандИОбработки.НастройкиОбработки - Структура - содержит параметры с вкладки "Настройки обработки" +// НастройкиКомандИОбработки.НастройкиОбработкиБезопасноеХранилище - Структура - содержит параметры с вкладки +// "Настройки обработки (Безопасное хранилище)" +// НастройкиКомандИОбработки[ИдентификаторКоманды].НастройкиКоманды - Структура - содержит параметры с вкладки +// "Настройки команды" для указанного идентификатора команды +// НастройкиКомандИОбработки[ИдентификаторКоманды].НастройкиКомандыБезопасноеХранилище - Структура - +// содержит параметры с вкладки "Настройки команды (Безопасное хранилище)" для указанного идентификатора команды +Перем НастройкиКомандИОбработки; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Формирует сведения о внешнем отчете или обработке. +// +// Возвращаемое значение: +// Структура - параметры внешнего отчета или обработки: +// * Вид - ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок +// - Строка - вид внешнего отчета или обработки. Для указания вида рекомендуется использовать функции +// ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<ИмяВида>. +// Также вид можно указать явно: +// "ПечатнаяФорма", +// "ЗаполнениеОбъекта", +// "СозданиеСвязанныхОбъектов", +// "Отчет", +// "ШаблонСообщения", +// "ДополнительнаяОбработка", +// "ДополнительныйОтчет". +// +// * Версия - Строка - версия отчета или обработки (далее - обработки). +// Задается в формате: "<Старший номер>.<Младший номер>". +// +// * Назначение - Массив из Строка - полные имена объектов конфигурации (Строка), для которых предназначен эта обработка. +// Необязательное свойство. +// +// * Наименование - Строка - представление для администратора (наименование элемента справочника). +// Если не заполнено, то берется представление объекта метаданных внешней обработки. +// Необязательное свойство. +// +// * БезопасныйРежим - Булево - признак подключения внешней обработки в безопасном режиме. +// Значение по умолчанию Истина (обработка будет выполняться безопасно). +// В безопасном режиме: +// Игнорируется привилегированный режим. +// Запрещены внешние по отношению к платформе 1С:Предприятия действия: +// COM; +// загрузка внешних компонент; +// запуск внешних приложений и команд операционной системы; +// доступ к файловой системе, кроме временных файлов; +// доступ к Интернету. +// Необязательное свойство. +// +// * Разрешения - Массив из ОбъектXDTO - дополнительные разрешения, необходимые внешней обработке при работе в +// безопасном режиме. Элемент массива - ОбъектXDTO - разрешение типа +// {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}PermissionBase. +// Для формирования описания разрешения рекомендуется использовать функции +// РаботаВБезопасномРежиме.Разрешение<ВидРазрешения>(<ПараметрыРазрешения>). +// Необязательное свойство. +// +// * Информация - Строка - краткая информация о внешней обработке. +// В этом параметре для администратора рекомендуется дать описание ее возможностей. +// Если не заполнено, то берется комментарий объекта метаданных внешней обработки. +// +// * ВерсияБСП - см. СтандартныеПодсистемыСервер.ВерсияБиблиотеки. +// +// * ОпределитьНастройкиФормы - Булево - только для дополнительных отчетов, подключенных к общей форме ФормаОтчета. +// Позволяет переопределять некоторые настройки общей формы отчета и +// подписываться на ее события. +// Если Истина, то в модуле объекта отчета следует определить процедуру по шаблону: +// +// * НазначениеВариантаОтчета - ПеречислениеСсылка.НазначенияВариантовОтчетов - назначение варианта отчета +// (ДляКомпьютеровИПланшетов, ДляСмартфонов, ДляЛюбыхУстройств). +// +// // Задать настройки формы отчета. +// // +// // Параметры: +// // Форма - ФормаКлиентскогоПриложения, Неопределено +// // КлючВарианта - Строка, Неопределено +// // Настройки - см. ОтчетыКлиентСервер.НастройкиОтчетаПоУмолчанию +// // +// Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт +// // Код процедуры. +// КонецПроцедуры +// +// Подробнее см. в документации к подсистемам "Дополнительные отчеты и обработки" и "Варианты отчетов". +// Необязательное свойство. +// +// * Команды - ТаблицаЗначений - настройки команд, поставляемых внешней обработкой (необязательно для отчетов): +// ** Идентификатор - Строка - внутреннее имя команды. Для внешних печатных форм (когда Вид = "ПечатнаяФорма"): +// Идентификатор может содержать имена одной или нескольких команд печати, +// разделенные запятыми. Подробнее см. описание колонки Идентификатор +// в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати. +// ** Представление - Строка - пользовательское представление команды. +// ** Использование - Строка - тип команды: +// "ВызовКлиентскогоМетода", +// "ВызовСерверногоМетода", +// "ЗаполнениеФормы", +// "ОткрытиеФормы" или +// "СценарийВБезопасномРежиме". +// Для получения типов команд рекомендуется использовать функции +// ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды<ИмяТипа>. +// В комментариях к этим функциям также даны шаблоны процедур-обработчиков команд. +// ** ПоказыватьОповещение - Булево - если Истина, то при запуске команды выводится оповещение "Команда выполняется...". +// Действует для всех типов команд, кроме команд по открытию формы (Использование = "ОткрытиеФормы"). +// ** Модификатор - Строка - дополнительная классификация команды. +// Для внешних печатных форм (когда Вид = "ПечатнаяФорма"): +// "ПечатьMXL" - для печатных форм на основе табличных макетов. +// Для загрузки данных из файла (когда Вид = "ПечатнаяФорма" и Использование = "ЗагрузкаДанныхИзФайла"): +// Модификатор является обязательным для заполнения +// и должен содержать полное имя объекта метаданных (справочника), +// для которого выполняется загрузка данных. +// ** Скрыть - Булево - необязательный. Признак того, что это служебная команда. +// Если установить в значение Истина, то команда скрывается в карточке дополнительного объекта. +// +Функция СведенияОВнешнейОбработке() Экспорт + + ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1"); + ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка(); + ПараметрыРегистрации.Версия = "1.0.0.3"; + ПараметрыРегистрации.Информация = "Шаблон_ДополнительнаяОбработка"; + ПараметрыРегистрации.БезопасныйРежим = Ложь; + + Команда = ПараметрыРегистрации.Команды.Добавить(); + Команда.Представление = НСтр("ru = 'Форма настроек'"); + Команда.Идентификатор = "ОткрытьФормуНастроек"; + Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(); + Команда.ПоказыватьОповещение = Истина; + + Команда = ПараметрыРегистрации.Команды.Добавить(); + Команда.Представление = НСтр("ru = 'Команда 1'"); + Команда.Идентификатор = "Команда1"; + Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); + Команда.ПоказыватьОповещение = Истина; + + Команда = ПараметрыРегистрации.Команды.Добавить(); + Команда.Представление = НСтр("ru = 'Команда 2'"); + Команда.Идентификатор = "Команда2"; + Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); + Команда.ПоказыватьОповещение = Истина; + + Команда = ПараметрыРегистрации.Команды.Добавить(); + Команда.Представление = НСтр("ru = 'Команда 3'"); + Команда.Идентификатор = "Команда3"; + Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); + Команда.ПоказыватьОповещение = Истина; + + Возврат ПараметрыРегистрации; + +КонецФункции + + +// Выполнить команду. +// Для глобальных отчетов и обработок (Вид = "ДополнительнаяОбработка" или Вид = "ДополнительныйОтчет"): +// +// Параметры: +// ИдентификаторКоманды - Строка - имя команды, определенное в функции СведенияОВнешнейОбработке(). +// ПараметрыВыполнения - Структура - контекст выполнения команды +// * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка на обработку. +// Может использоваться для чтения параметров обработки. +// Пример см. в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). +// * РезультатВыполнения - Структура - результат выполнения команды. +// Может использоваться для передачи результата с сервера или из фонового задания в исходную точку. +// В частности, возвращается функциями ДополнительныеОтчетыИОбработки.ВыполнитьКоманду() +// и ДополнительныеОтчетыИОбработки.ВыполнитьКомандуИзФормыВнешнегоОбъекта(), +// а также может быть получено из временного хранилища +// в обработчике ожидания процедуры ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКомандуВФоне(). +//@skip-check doc-comment-field-in-description-suggestion +Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЕстьОшибки = Ложь; + + ИмяОбработки = Метаданные().Имя; + ИмяСобытия = СтрШаблон("ДополнительныеОтчетыИОбработки.%1.%2", ИмяОбработки, ИдентификаторКоманды); + + ПараметрыЛогирования = ПолучитьПараметрыЛогирования(ИмяСобытия); + ОбработкаСсылка = ПараметрыВыполнения.ДополнительнаяОбработкаСсылка; + + ЗаписатьСобытиеВЖурналРегистрации("Начало выполнения.", , , ОбработкаСсылка); + + ЗаписатьСобытиеВЖурналРегистрации("Начало чтения настроек.", , , ОбработкаСсылка); + + ПрочитатьНастройки(ИдентификаторКоманды, ОбработкаСсылка, ЕстьОшибки); + + ЗаписатьСобытиеВЖурналРегистрации("Окончание чтения настроек.", , , ОбработкаСсылка); + + Если ИдентификаторКоманды = "Команда1" Тогда + + Команда1(); + + ИначеЕсли ИдентификаторКоманды = "Команда2" Тогда + + Команда2(); + + ИначеЕсли ИдентификаторКоманды = "Команда3" Тогда + + Команда3(); + + Иначе + + ЗаписатьСобытиеВЖурналРегистрации("Для команды не задан обработчик.", , , ОбработкаСсылка); + + КонецЕсли; + + ЗаписатьСобытиеВЖурналРегистрации("Окончание выполнения.", , , ОбработкаСсылка); + +КонецПроцедуры + +// Удалить, нужна для совместимости на проекте +//@skip-check doc-comment-export-function-return-section +Функция ИдентификаторыПараметровОбъектов() Экспорт + + Массив = Новый Массив; + Возврат Массив; + +КонецФункции +#КонецОбласти +#Область СлужебныйПрограммныйИнтерфейс + +#Область ЗагрузитьНастройкиПоУмолчанию + + +// Имя - Имя параметра, задается по правилам именования переменных, в дальнешем исполюзутся, как ключ в структуре для доступа к значению параметра. +// ТипКонтейнера - Число(1, 0) - Описывает структуру для хранения параметра, доступны следующие варианты +// 0 - Нет, +// 1 - СписокЗначений +// 2 - Массив +// 3 - ТаблицаЗначений +// ТипЗначения - ОписаниеТипов - Описывает допустимые типы для параметра +// Значение - Произвольный - хранит значение(я) параметра в соответствии с определенными "ТипКонтейнера" и "ТипЗначения" +// Описание - Строка - Прозвольный текст для описания параметра и его назначения + + + +// Загрузить настройки обработки по умолчанию. +// +// Параметры: +// НастройкиОбработки - ТаблицаЗначений - соответствует одноименному реквзиту на форме +// РежимЗагрузкиНастроекПоУмолчанию - Строка - Определяет режим добавления строк: "Обновление", "ДобавлениеНовых", "Замещение" +Процедура ЗагрузитьНастройкиОбработкиПоУмолчанию(НастройкиОбработки, РежимЗагрузкиНастроекПоУмолчанию) Экспорт + + Если РежимЗагрузкиНастроекПоУмолчанию = "Замещение" Тогда + НастройкиОбработки.Очистить(); + КонецЕсли; + + // + Имя = "Сервер"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Строка"); + Значение = "jsonplaceholder.typicode.com"; + Описание = "Тип: Строка. Путь к серверу. DNS-имя или IP"; + ДобавитьСтрокуСНастройкой(НастройкиОбработки, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // + Имя = "Порт"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Число"); + Значение = 443; + Описание = "Тип: Число(10, 0). Порт сервера"; + ДобавитьСтрокуСНастройкой(НастройкиОбработки, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // + Имя = "ЗащищенноеСоединение"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Булево"); + Значение = Истина; + Описание = "Тип: Булево. Использовать защищенное соединение (https)"; + ДобавитьСтрокуСНастройкой(НастройкиОбработки, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + +КонецПроцедуры + +// Загрузить настройки обработки безопасное хранилище по умолчанию. +// +// Параметры: +// НастройкиОбработкиБезопасноеХранилище - ТаблицаЗначений - соответствует одноименному реквзиту на форме +// РежимЗагрузкиНастроекПоУмолчанию - Строка - Определяет режим добавления строк: "Обновление", "ДобавлениеНовых", "Замещение" +Процедура ЗагрузитьНастройкиОбработкиБезопасноеХранилищеПоУмолчанию(НастройкиОбработкиБезопасноеХранилище, + РежимЗагрузкиНастроекПоУмолчанию) Экспорт + + Если НастройкиОбработкиБезопасноеХранилище = "Замещение" Тогда + НастройкиОбработкиБезопасноеХранилище.Очистить(); + КонецЕсли; + + Имя = "Пользователь"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Строка"); + Значение = ""; + Описание = "Тип: Строка. Пользователь"; + ДобавитьСтрокуСНастройкой(НастройкиОбработкиБезопасноеХранилище, Имя, ТипКонтейнера, ТипЗначения, Значение, + Описание, РежимЗагрузкиНастроекПоУмолчанию); + + Имя = "Пароль"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Строка"); + Значение = ""; + Описание = "Тип: Строка. Пароль"; + ДобавитьСтрокуСНастройкой(НастройкиОбработкиБезопасноеХранилище, Имя, ТипКонтейнера, ТипЗначения, Значение, + Описание, РежимЗагрузкиНастроекПоУмолчанию); + + + // Таблица значений + Имя = "ТаблицаApiKey"; + ТипКонтейнера = 3; + ТипЗначения = "Таблица значений"; + Значение = Новый ТаблицаЗначений; + Значение.Колонки.Добавить("Аккаунт", Новый ОписаниеТипов("СправочникСсылка._ДемоОрганизации"), "Аккаунт"); + Значение.Колонки.Добавить("ApiKey", Новый ОписаниеТипов("Строка"), "Api Key"); + Значение.Колонки.Добавить("ПсевдонимApiKey", Новый ОписаниеТипов("Строка"), "Псевдоним Api Key"); + Значение.Колонки.Добавить("ДействуетДо", Новый ОписаниеТипов("Дата"), "Действует до"); + Описание = "Ключи для доступа к API и сроки их действия"; + ДобавитьСтрокуСНастройкой(НастройкиОбработкиБезопасноеХранилище, Имя, ТипКонтейнера, ТипЗначения, Значение, + Описание, РежимЗагрузкиНастроекПоУмолчанию); + +КонецПроцедуры + +// Загрузить настройки команды по умолчанию. +// +// Параметры: +// НастройкиКоманды - ТаблицаЗначений - соответствует одноименному реквзиту на форме +// ИдентификаторКоманды - Строка - Идентификатор команды определенный в функции "СведенияОВнешнейОбработке()" +// РежимЗагрузкиНастроекПоУмолчанию - Строка - Определяет режим добавления строк: "Обновление", "ДобавлениеНовых", "Замещение" +Процедура ЗагрузитьНастройкиКомандыПоУмолчанию(НастройкиКоманды, ИдентификаторКоманды, + РежимЗагрузкиНастроекПоУмолчанию) Экспорт + + Если РежимЗагрузкиНастроекПоУмолчанию = "Замещение" Тогда + НастройкиКоманды.Очистить(); + КонецЕсли; + Если ИдентификаторКоманды = "Команда1" Тогда + + // Строка + Имя = "ПутьКМетоду"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Строка"); + Значение = "/comments"; + Описание = "Путь к методу на сервере"; + ТипКонтейнера = 0; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // Число + Имя = "Таймаут"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Число"); + Значение = 1500; + Описание = "Таймаут"; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // Булево + Имя = "ИспользоватьЛогирование"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Булево"); + Значение = Истина; + Описание = "Использовать логирование событий"; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // Дата + Имя = "ДатаНачалаЗагрузкиКомментариев"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Дата"); + Значение = Дата(2024, 1, 1); + Описание = "Дата начала загрузки комментариев"; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // Ссылочный тип + Имя = "УзелОбмена"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("ПланОбменаСсылка._ДемоОбменВРаспределеннойИнформационнойБазе"); + Значение = ПланыОбмена._ДемоОбменВРаспределеннойИнформационнойБазе.ПустаяСсылка(); + Описание = "Узел обмена"; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // Список значений из Ссылочных типов + Имя = "Валюты"; + ТипКонтейнера = 1; + ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Валюты"); + Значение = Новый СписокЗначений; + Описание = "Тип: СправочникСсылка.Валюты. Перечень валют для выгрузки"; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // Массив из Ссылочных типов + Имя = "ВидыЦен"; + ТипКонтейнера = 2; + ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Пользователи"); + Значение = Контейнер_СохранитьЗначение(Новый Массив); + Описание = "Тип: СправочникСсылка.Пользователи. Перечень пользователей для выгрузки"; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // Таблица значений + Имя = "ТаблицаСоответствияПользователейИВалют"; + ТипКонтейнера = 3; + ТипЗначения = "Таблица значений"; + Значение = Новый ТаблицаЗначений; + Значение.Колонки.Добавить("Пользователи", Новый ОписаниеТипов("СправочникСсылка.Пользователи"), "Пользователи"); + Значение.Колонки.Добавить("Валюты", Новый ОписаниеТипов("СправочникСсылка.Валюты"), "Валюты расчета"); + Значение.Колонки.Добавить("ПорядокСортировки", Новый ОписаниеТипов("Число"), "Порядок сортировки"); + //стр = Значение.Добавить(); + //стр.Склад = Справочники.Склады.ПустаяСсылка(); + //стр.ПорядокСортировки = 1; + Описание = "Тип: СправочникСсылка.ВидыЦен. Перечень видов цен для выгрузки"; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + // Составной тип + // Массив из составных типов + Имя = "ПараметрСоставногоТипа"; + ТипКонтейнера = 2; + //@skip-check bsl-variable-name-invalid + КЧ = Новый КвалификаторыЧисла(12, 2); + //@skip-check bsl-variable-name-invalid + КС = Новый КвалификаторыСтроки(20); + МассивТипов = Новый Массив; + МассивТипов.Добавить(Тип("Строка")); + МассивТипов.Добавить(Тип("Дата")); + МассивТипов.Добавить(Тип("СправочникСсылка.Пользователи")); + МассивТипов.Добавить(Тип("СправочникСсылка.Валюты")); + МассивТипов.Добавить(Тип("ДокументСсылка.АктОбУничтоженииПерсональныхДанных")); + ТипЗначения = Новый ОписаниеТипов(МассивТипов, , , КЧ, КС); + Значение = Контейнер_СохранитьЗначение(Новый Массив); + Описание = "Пример параметра составного типа"; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + ИначеЕсли ИдентификаторКоманды = "Команда2" Тогда + + Имя = "ПутьКМетоду"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Строка"); + Значение = "/todos"; + Описание = "Путь к методу на сервере"; + ТипКонтейнера = 0; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + ИначеЕсли ИдентификаторКоманды = "Команда3" Тогда + + Имя = "ПутьКМетоду"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Строка"); + Значение = "/posts"; + Описание = "Путь к методу на сервере"; + ТипКонтейнера = 0; + ДобавитьСтрокуСНастройкой(НастройкиКоманды, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию); + + КонецЕсли; +КонецПроцедуры + +// Загрузить настройки команды безопасное хранилище по умолчанию. +// +// Параметры: +// НастройкиКомандыБезопасноеХранилище - ТаблицаЗначений - соответствует одноименному реквзиту на форме +// ИдентификаторКоманды - Строка - Идентификатор команды определенный в функции "СведенияОВнешнейОбработке()" +// РежимЗагрузкиНастроекПоУмолчанию - Строка - Определяет режим добавления строк: "Обновление", "ДобавлениеНовых", "Замещение" +Процедура ЗагрузитьНастройкиКомандыБезопасноеХранилищеПоУмолчанию(НастройкиКомандыБезопасноеХранилище, + ИдентификаторКоманды, РежимЗагрузкиНастроекПоУмолчанию) Экспорт + + Если РежимЗагрузкиНастроекПоУмолчанию = "Замещение" Тогда + НастройкиКомандыБезопасноеХранилище.Очистить(); + КонецЕсли; + Если ИдентификаторКоманды = "Команда1" Тогда + + Имя = "ApiKey"; + ТипКонтейнера = 0; + ТипЗначения = Новый ОписаниеТипов("Строка"); + Значение = ""; + Описание = "Строка. Ключ для доступа к методу"; + ДобавитьСтрокуСНастройкой(НастройкиКомандыБезопасноеХранилище, Имя, ТипКонтейнера, ТипЗначения, Значение, + Описание, РежимЗагрузкиНастроекПоУмолчанию); + + ИначеЕсли ИдентификаторКоманды = "Команда2" Тогда + + ИначеЕсли ИдентификаторКоманды = "Команда3" Тогда + + КонецЕсли; +КонецПроцедуры +#КонецОбласти + +#Область Контейнер + +Функция СуффиксРеквизитаКонтейнера() Экспорт + Возврат "_31415926Контейнер"; +КонецФункции + +//@skip-check bsl-legacy-check-method-for-statements-after-return +//@skip-check doc-comment-parameter-section +//@skip-check doc-comment-export-function-return-section +Функция Контейнер_Очистить(Контейнер) Экспорт + + Если Контейнер.Тип = "ТаблицаЗначений" Тогда + Значение = Контейнер_ВосстановитьЗначение(Контейнер); + Значение.Очистить(); + ИначеЕсли Контейнер.Тип = "СписокЗначений" Тогда + Значение = Контейнер_ВосстановитьЗначение(Контейнер); + Значение.Очистить(); + ИначеЕсли Контейнер.Тип = "Массив" Тогда + Значение = Новый Массив; + ИначеЕсли Контейнер.Тип = "Тип" Тогда + Значение = Тип("Неопределено"); + ИначеЕсли Контейнер.Тип = "Граница" Тогда + Значение = Новый Граница(, ВидГраницы.Включая); + ИначеЕсли Контейнер.Тип = "МоментВремени" Тогда + Значение = Новый МоментВремени('00010101'); + ИначеЕсли Контейнер.Тип = "ХранилищеЗначения" Тогда + Значение = Новый ХранилищеЗначения(Неопределено); + Иначе + ВызватьИсключение "Неизвестный тип контейнера"; + КонецЕсли; + + Контейнер_СохранитьЗначение(Значение); + +КонецФункции + +Функция Контейнер_СохранитьЗначение(Значение) Экспорт + + ТипЗначения = ТипЗнч(Значение); + Если ТипЗначения = Тип("Граница") Тогда + //@skip-check structure-consructor-too-many-keys + Результат = Новый Структура("Тип, ВидГраницы, Значение, Представление", "Граница"); + ЗаполнитьЗначенияСвойств(Результат, Значение); + Результат.ВидГраницы = Строка(Результат.ВидГраницы); + Результат.Представление = Контейнер_ПолучитьПредставление(Результат); + ИначеЕсли ТипЗначения = Тип("МоментВремени") Тогда + //@skip-check structure-consructor-too-many-keys + Результат = Новый Структура("Тип, Дата, Ссылка, Представление", "МоментВремени"); + ЗаполнитьЗначенияСвойств(Результат, Значение); + Результат.Представление = Контейнер_ПолучитьПредставление(Результат); + ИначеЕсли ТипЗначения = Тип("Тип") Тогда + Результат = Новый Структура("Тип, ИмяТипа, Представление", "Тип", ПолучитьИмяТипа(Значение)); + Результат.Представление = Контейнер_ПолучитьПредставление(Результат); + ИначеЕсли ТипЗначения = Тип("ХранилищеЗначения") Тогда + Результат = Новый Структура("Тип, Хранилище, Представление", "ХранилищеЗначения", ЗначениеВСтроку(Значение)); + Результат.Представление = Контейнер_ПолучитьПредставление(Результат); + ИначеЕсли ТипЗначения = Тип("Массив") Тогда + Результат = Новый Структура("Тип, СписокЗначений, Представление", "Массив", СписокЗначенийИзМассива(Значение)); + Результат.Представление = Контейнер_ПолучитьПредставление(Результат); + ИначеЕсли ТипЗначения = Тип("СписокЗначений") Тогда + Результат = Новый Структура("Тип, СписокЗначений, Представление", "СписокЗначений", Значение); + Результат.Представление = Контейнер_ПолучитьПредставление(Результат); + ИначеЕсли ТипЗначения = Тип("ТаблицаЗначений") Тогда + //@skip-check structure-consructor-too-many-keys + Результат = Новый Структура("Тип, КоличествоСтрок, Значение, Представление", "ТаблицаЗначений", + Значение.Количество(), ЗначениеВСтроку(Значение)); + Результат.Представление = Контейнер_ПолучитьПредставление(Результат); + Иначе + Результат = Значение; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция Контейнер_ВосстановитьЗначение(СохраненноеЗначение) Экспорт + + Если ТипЗнч(СохраненноеЗначение) = Тип("Структура") Тогда + Если СохраненноеЗначение.Тип = "Граница" Тогда + Результат = Новый Граница(СохраненноеЗначение.Значение, ВидГраницы[СохраненноеЗначение.ВидГраницы]); + ИначеЕсли СохраненноеЗначение.Тип = "МоментВремени" Тогда + Результат = Новый МоментВремени(СохраненноеЗначение.Дата, СохраненноеЗначение.Ссылка); + ИначеЕсли СохраненноеЗначение.Тип = "ХранилищеЗначения" Тогда + Результат = СохраненноеЗначение.Хранилище; + ИначеЕсли СохраненноеЗначение.Тип = "Тип" Тогда + Результат = Тип(СохраненноеЗначение.ИмяТипа); + ИначеЕсли СохраненноеЗначение.Тип = "СписокЗначений" Тогда + Результат = СохраненноеЗначение.СписокЗначений; + ИначеЕсли СохраненноеЗначение.Тип = "Массив" Тогда + Результат = СохраненноеЗначение.СписокЗначений.ВыгрузитьЗначения(); + ИначеЕсли СохраненноеЗначение.Тип = "ТаблицаЗначений" Тогда + Результат = СтрокаВЗначение(СохраненноеЗначение.Значение); + КонецЕсли; + Иначе + Результат = СохраненноеЗначение; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +Функция Контейнер_ПолучитьПредставление(Контейнер) Экспорт + + РазмерПредставления = 200; + + Если ТипЗнч(Контейнер) = Тип("Структура") Тогда + Если Контейнер.Тип = "Граница" Тогда + Возврат Строка(Контейнер.Значение) + " " + Контейнер.ВидГраницы; + ИначеЕсли Контейнер.Тип = "Массив" Тогда + Возврат Лев(СтрСоединить(Контейнер.СписокЗначений.ВыгрузитьЗначения(), "; "), РазмерПредставления); + ИначеЕсли Контейнер.Тип = "СписокЗначений" Тогда + Возврат Лев(СтрСоединить(Контейнер.СписокЗначений.ВыгрузитьЗначения(), "; "), РазмерПредставления); + ИначеЕсли Контейнер.Тип = "ТаблицаЗначений" Тогда + КоличествоСтрок = Неопределено; + Если Контейнер.Свойство("КоличествоСтрок", КоличествоСтрок) Тогда + Возврат "<строк: " + КоличествоСтрок + ">"; + Иначе + Возврат "<строк: ?>"; + КонецЕсли; + ИначеЕсли Контейнер.Тип = "МоментВремени" Тогда + Возврат Строка(Контейнер.Дата) + "; " + Контейнер.Ссылка; + ИначеЕсли Контейнер.Тип = "Тип" Тогда + Возврат "Тип: " + Тип(Контейнер.ИмяТипа); + ИначеЕсли Контейнер.Тип = "ХранилищеЗначения" Тогда + Возврат "<ХранилищеЗначения>"; + КонецЕсли; + Иначе + Возврат "???"; + КонецЕсли; + +КонецФункции + +#КонецОбласти +#Область Прочее + +Функция ПолучитьИмяКартинкиТипа(Значение) Экспорт + + Если Значение = "Таблица значений" Тогда + Возврат "Тип_ТаблицаЗначений"; + ИначеЕсли Значение = Тип("Массив") Тогда + Возврат "Тип_Массив"; + ИначеЕсли Значение = Тип("СписокЗначений") Тогда + Возврат "Тип_СписокЗначений"; + ИначеЕсли Значение = Тип("Строка") Тогда + Возврат "Тип_Строка"; + ИначеЕсли Значение = Тип("Число") Тогда + Возврат "Тип_Число"; + ИначеЕсли Значение = Тип("Булево") Тогда + Возврат "Тип_Булево"; + ИначеЕсли Значение = Тип("Дата") Тогда + Возврат "Тип_Дата"; + ИначеЕсли Значение = Тип("Граница") Тогда + Возврат "Тип_Граница"; + ИначеЕсли Значение = Тип("МоментВремени") Тогда + Возврат "Тип_МоментВремени"; + ИначеЕсли Значение = Тип("Тип") Тогда + Возврат "Тип_Тип"; + ИначеЕсли Значение = Тип("УникальныйИдентификатор") Тогда + Возврат "Тип_УникальныйИдентификатор"; + ИначеЕсли Значение = Тип("Неопределено") Тогда + Возврат "Тип_Неопределено"; + ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_СправочникСсылка"; + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_ДокументСсылка"; + ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_ПеречислениеСсылка"; + ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_ПланВидовХарактеристикСсылка"; + ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_ПланСчетовСсылка"; + ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_ПланВидовРасчетаСсылка"; + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_БизнесПроцессСсылка"; + ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_ЗадачаСсылка"; + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "Тип_ПланОбменаСсылка"; + ИначеЕсли Значение = Тип("Null") Тогда + Возврат "Тип_Null"; + ИначеЕсли Значение = Тип("ВидДвиженияБухгалтерии") Тогда + Возврат "Тип_ВидДвиженияБухгалтерии"; + ИначеЕсли Значение = Тип("ВидДвиженияНакопления") Тогда + Возврат "Тип_ВидДвиженияНакопления"; + ИначеЕсли Значение = Тип("ВидСчета") Тогда + Возврат "Тип_ВидСчета"; + Иначе + Возврат "Тип_Неопределено"; + КонецЕсли; + +КонецФункции + +Функция ПолучитьИмяТипа(Значение) Экспорт + + МассивТипов = Новый Массив; + МассивТипов.Добавить(Значение); + ОписаниеТиповЗначения = Новый ОписаниеТипов(МассивТипов); + ЗначениеТипа = ОписаниеТиповЗначения.ПривестиЗначение(Неопределено); + + Если Значение = Тип("Неопределено") Тогда + Возврат "Неопределено"; + ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "СправочникСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "ДокументСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "ПеречислениеСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "ПланВидовХарактеристикСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "ПланСчетовСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "ПланВидовРасчетаСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "БизнесПроцессСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "ЗадачаСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(Значение) Тогда + Возврат "ПланОбменаСсылка." + ЗначениеТипа.Метаданные().Имя; + ИначеЕсли Значение = Тип("Null") Тогда + Возврат "Null"; + ИначеЕсли Значение = Тип("ВидДвиженияБухгалтерии") Тогда + Возврат "ВидДвиженияБухгалтерии"; + ИначеЕсли Значение = Тип("ВидДвиженияНакопления") Тогда + Возврат "ВидДвиженияНакопления"; + ИначеЕсли Значение = Тип("ВидСчета") Тогда + Возврат "ВидСчета"; + ИначеЕсли Значение = Тип("УникальныйИдентификатор") Тогда + Возврат "УникальныйИдентификатор"; + Иначе + Возврат Строка(Значение); + КонецЕсли; + +КонецФункции + +Функция ПолучитьНеотображаемыеНаКлиентеТипы() Экспорт + МассивТипы = Новый Массив; + МассивТипы.Добавить(Тип("Тип")); + МассивТипы.Добавить(Тип("МоментВремени")); + МассивТипы.Добавить(Тип("Граница")); + МассивТипы.Добавить(Тип("ХранилищеЗначения")); + МассивТипы.Добавить(Тип("РезультатЗапроса")); + Возврат МассивТипы; +КонецФункции + +Функция СписокЗначенийИзМассива(Массив) Экспорт + Список = Новый СписокЗначений; + Список.ЗагрузитьЗначения(Массив); + Возврат Список; +КонецФункции + +Процедура ИзменитьТипКолонкиТаблицыЗначений(ТзДанные, ИмяКолонки, НовыйТипКолонки) Экспорт + ИмяВременнойКолонки = ИмяКолонки + "_Вр31415926"; + МассивДанныеКолонки = тзДанные.ВыгрузитьКолонку(ИмяКолонки); + ТзДанные.Колонки.Добавить(ИмяВременнойКолонки, НовыйТипКолонки); + ТзДанные.ЗагрузитьКолонку(МассивДанныеКолонки, ИмяВременнойКолонки); + ТзДанные.Колонки.Удалить(ИмяКолонки); + ТзДанные.Колонки[ИмяВременнойКолонки].Имя = ИмяКолонки; +КонецПроцедуры + +Функция СтрокаВЗначение(ЗначениеСтрокой) Экспорт + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(ЗначениеСтрокой); + Возврат СериализаторXDTO.ПрочитатьXML(Чтение); +КонецФункции + +Функция ЗначениеВСтроку(Значение) Экспорт + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(Запись, Значение); + Возврат Запись.Закрыть(); +КонецФункции + +#КонецОбласти +#Область Логирование +// Получает структуру параметров записи в журнал событий. +// +// Параметры: +// ИмяСобытия - Строка - источник событий, если не указать источник, то запись производится не будет; +// Пользователь - СправочникСсылка.Пользователи - пользователь под которым выполняется запись; +// Приложение - ПеречислениеСсылка.спк_Приложения - приложение в котором выполняется запись. +// +// Возвращаемое значение: +// Структура +// * ИмяСобытия - Строка - Имя события; +// * Записывать - Булево - Признак необходимости записи в журнал; +// * ИдентификаторЗаписи - Строка - GUID записи, необходим для обозначения итерации выполнения команды, +// позволяет разделить события в журнале, когда команда выполняется в разных сеансах +// параллельно; +// * НомерЗаписи - Число - номер записи по порядку, необходим для упорядочивания событий в рамках +// сенса с одинаковым значением "ИдентификаторЗаписи". Увеличивается на 1 +// при каждой записи в журнал; +// * ВремяНачала - Число - Универсальная дата в миллисекундах, начала выполнения +//@skip-check doc-comment-field-in-description-suggestion +Функция ПолучитьПараметрыЛогирования(ИмяСобытия) Экспорт + + СтруктураПараметров = Новый Структура; + + СтруктураПараметров.Вставить("ИмяСобытия", ИмяСобытия); + СтруктураПараметров.Вставить("Записывать", Истина); + СтруктураПараметров.Вставить("ИдентификаторЗаписи", Строка(Новый УникальныйИдентификатор)); + СтруктураПараметров.Вставить("НомерЗаписи", 0); + СтруктураПараметров.Вставить("ВремяНачала", ТекущаяУниверсальнаяДатаВМиллисекундах()); + СтруктураПараметров.Вставить("Пользователь", ПараметрыСеанса.ТекущийПользователь); + + //@skip-check constructor-function-return-section + Возврат СтруктураПараметров; + +КонецФункции + +// Записывает событие в журнал событий. +// Предназначена для записи событий обменов или других операций. +// +// Параметры: +// Комментарий - Строка - комментарий к событию; +// УровеньСобытия - УровеньЖурналаРегистрации - УровеньЖурналаРегистрации; +// ОбъектМетаданных - ОбъектМетаданных - Объект метаданных, к которому относится событие. +// Данные - Число, Строка, Дата, Булево, Неопределено, Null, Тип - Данные, с которыми связано событие. +// Рекомендуется указывать ссылки на объекты данных (элементы справочников, документы, +// к которым относится событие). +Процедура ЗаписатьСобытиеВЖурналРегистрации(Комментарий, УровеньСобытия = Неопределено, ОбъектМетаданных = Неопределено, + Данные = Неопределено) Экспорт + + Если Не ПараметрыЛогирования.Записывать Тогда + Возврат; + КонецЕсли; + + Если УровеньСобытия = Неопределено Тогда + УровеньСобытия = УровеньЖурналаРегистрации.Информация; + КонецЕсли; + + ВремяВыполнения = (ТекущаяУниверсальнаяДатаВМиллисекундах() - ПараметрыЛогирования.ВремяНачала) / 1000; + + ПараметрыЛогирования.НомерЗаписи = ПараметрыЛогирования.НомерЗаписи + 1; + КомментарийСтруктура = Новый Структура; + КомментарийСтруктура.Вставить("Комментарий", Комментарий); + КомментарийСтруктура.Вставить("ИдентификаторЗаписи", ПараметрыЛогирования.ИдентификаторЗаписи); + КомментарийСтруктура.Вставить("НомерЗаписи", ПараметрыЛогирования.НомерЗаписи); + КомментарийСтруктура.Вставить("ВремяВыполнения", ВремяВыполнения); + КомментарийСтруктура.Вставить("Пользователь", ЗначениеВСтрокуВнутр(ПараметрыЛогирования.Пользователь)); + + ЗаписьJSON = Новый ЗаписьJSON; + ЗаписьJSON.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON, КомментарийСтруктура); + КомментарийТекст = ЗаписьJSON.Закрыть(); + + ЗаписьЖурналаРегистрации(ПараметрыЛогирования.ИмяСобытия, УровеньСобытия, ОбъектМетаданных, Данные, + КомментарийТекст); + +КонецПроцедуры +#КонецОбласти + +#КонецОбласти +#Область СлужебныеПроцедурыИФункции +Процедура ДобавитьСтрокуСНастройкой(ТаблицаНастроек, Имя, ТипКонтейнера, ТипЗначения, Значение, Описание, + РежимЗагрузкиНастроекПоУмолчанию) + + ДобавитьСтрокуСНастройкой = Ложь; + + Если РежимЗагрузкиНастроекПоУмолчанию = "Замещение" Тогда + + ДобавитьСтрокуСНастройкой = Истина; + + Иначе + + Строки = ТаблицаНастроек.НайтиСтроки(Новый Структура("Имя", Имя)); + + Если Строки.Количество() = 0 Тогда + + ДобавитьСтрокуСНастройкой = Истина; + + Иначе + + Если РежимЗагрузкиНастроекПоУмолчанию = "Обновление" Тогда + + Для Каждого стр Из Строки Цикл + стр.Описание = Описание; + КонецЦикла; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + Если ДобавитьСтрокуСНастройкой Тогда + + стр = ТаблицаНастроек.Добавить(); + стр.Имя = Имя; + стр.Значение = Значение; + стр.Описание = Описание; + стр.Контейнер = Контейнер_СохранитьЗначение(Значение); + стр.ТипКонтейнера = ТипКонтейнера; + + Если стр.ТипКонтейнера = 3 Тогда + стр.ТипЗначения = "Таблица значений"; + стр.Значение = стр.Контейнер.Представление; + Иначе + стр.ТипЗначения = ТипЗначения; + КонецЕсли; + + КонецЕсли; +КонецПроцедуры +Процедура ПрочитатьНастройки(ИдентификаторКоманды, ОбработкаСсылка, ЕстьОшибки) + НастройкиОбработки = Новый Структура; + НастройкиОбработкиБезопасноеХранилище = Новый Структура; + НастройкиКомандИОбработки = Новый Структура; + ПараметрыКоманды = Новый Структура; + Сведения = СведенияОВнешнейОбработке(); + + Для Каждого Команда Из Сведения.Команды Цикл + + Если Команда.Использование = "ВызовСерверногоМетода" Тогда + + НастройкиКомандИОбработки.Вставить(Команда.Идентификатор, Новый Структура); + + КонецЕсли; + + КонецЦикла; + + + + + + // Чтение из хранилища обработки + + //@skip-check bsl-legacy-check-string-literal + ХранилищеНастроек = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбработкаСсылка, "ХранилищеНастроек"); + НастройкиИзХранилищаНастроекОбработки = ХранилищеНастроек.Получить(); + + Если ТипЗнч(НастройкиИзХранилищаНастроекОбработки) = Тип("Структура") Тогда + + // НастройкиОбработки + Если НастройкиИзХранилищаНастроекОбработки.Свойство("НастройкиОбработки") Тогда + Для Каждого стр Из НастройкиИзХранилищаНастроекОбработки.НастройкиОбработки Цикл + НастройкиОбработки.Вставить(стр.Имя, Контейнер_ВосстановитьЗначение(стр.Контейнер)); + КонецЦикла; + КонецЕсли; + + // НастройкиКоманд + Для Каждого Команда Из Сведения.Команды Цикл + + Если Команда.Использование = "ВызовСерверногоМетода" Тогда + + КомандаНастройкиКоманды = Новый Структура; + + Если НастройкиИзХранилищаНастроекОбработки.Свойство(Команда.Идентификатор) Тогда + Для Каждого стр Из НастройкиИзХранилищаНастроекОбработки[Команда.Идентификатор] Цикл + КомандаНастройкиКоманды.Вставить(стр.Имя, Контейнер_ВосстановитьЗначение(стр.Контейнер)); + КонецЦикла; + КонецЕсли; + + НастройкиКомандИОбработки[Команда.Идентификатор].Вставить("НастройкиКоманды", КомандаНастройкиКоманды); + + КонецЕсли; + КонецЦикла; + КонецЕсли; + + + // Чтение из безопасного хранилища + + НастройкиИзБезопасногоХранилища = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(ОбработкаСсылка); + + Если ТипЗнч(НастройкиИзБезопасногоХранилища) = Тип("Структура") Тогда + + + // Чтение настроек обработки из безопасного хранилища + НастройкиОбработкиБезопасноеХранилище = Новый Структура; + Если НастройкиИзБезопасногоХранилища.Свойство("НастройкиОбработкиБезопасноеХранилище") Тогда + Для Каждого стр Из НастройкиИзБезопасногоХранилища.НастройкиОбработкиБезопасноеХранилище Цикл + НастройкиОбработкиБезопасноеХранилище.Вставить(стр.Имя, Контейнер_ВосстановитьЗначение(стр.Контейнер)); + КонецЦикла; + КонецЕсли; + + // Чтение настроек команд из безопасного хранилища + Для Каждого Команда Из Сведения.Команды Цикл + + Если Команда.Использование = "ВызовСерверногоМетода" Тогда + + КомандаНастройкиКомандыБезопасноеХранилище = Новый Структура; + + Если НастройкиИзБезопасногоХранилища.Свойство(Команда.Идентификатор) Тогда + Для Каждого стр Из НастройкиИзБезопасногоХранилища[Команда.Идентификатор] Цикл + КомандаНастройкиКомандыБезопасноеХранилище.Вставить(стр.Имя, Контейнер_ВосстановитьЗначение( + стр.Контейнер)); + КонецЦикла; + КонецЕсли; + + НастройкиКомандИОбработки[Команда.Идентификатор].Вставить("НастройкиКомандыБезопасноеХранилище", + КомандаНастройкиКомандыБезопасноеХранилище); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + НастройкиКоманды = НастройкиКомандИОбработки[ИдентификаторКоманды].НастройкиКоманды; + НастройкиКомандыБезопасноеХранилище = НастройкиКомандИОбработки[ИдентификаторКоманды].НастройкиКомандыБезопасноеХранилище; + + ПараметрыКоманды.Вставить("НастройкиОбработки", НастройкиОбработки); + ПараметрыКоманды.Вставить("НастройкиОбработкиБезопасноеХранилище", НастройкиОбработкиБезопасноеХранилище); + ПараметрыКоманды.Вставить("НастройкиКоманды", НастройкиКоманды); + ПараметрыКоманды.Вставить("НастройкиКомандыБезопасноеХранилище", НастройкиКомандыБезопасноеХранилище); + +КонецПроцедуры +#Область ОбработчикиКоманд + +// ПараметрыКоманды - Структура - Содержит параметры сохраненные для обработки в режиме предприятие +// * НастройкиОбработки - Структура - содержит параметры с вкладки "Настройки обработки" +// * НастройкиОбработкиБезопасноеХранилище - Структура - содержит параметры с вкладки "Настройки обработки (Безопасное хранилище)" +// * НастройкиКоманды - Структура - содержит параметры с вкладки "Настройки команды" +// * НастройкиКомандыБезопасноеХранилище - Структура - содержит параметры с вкладки "Настройки команды (Безопасное хранилище)" + +Процедура Команда1() + ЗаписатьСобытиеВЖурналРегистрации("Выполнение Команда1."); +КонецПроцедуры + +Процедура Команда2() + ЗаписатьСобытиеВЖурналРегистрации("Выполнение Команда2."); +КонецПроцедуры +Процедура Команда3() + ЗаписатьСобытиеВЖурналРегистрации("Выполнение Команда3."); +КонецПроцедуры + +#КонецОбласти +#КонецОбласти +#Иначе + ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); +#КонецЕсли \ No newline at end of file diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/ШаблонДополнительнойОбработки.mdo b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/ШаблонДополнительнойОбработки.mdo new file mode 100644 index 0000000..17e9b6c --- /dev/null +++ b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/ШаблонДополнительнойОбработки.mdo @@ -0,0 +1,53 @@ + + + + + + ШаблонДополнительнойОбработки + + ru + Шаблон дополнительной обработки + + + en + Additional data processor template + + + ExternalDataProcessor.ШаблонДополнительнойОбработки.Form.ФормаНастроек + + ФормаНастроек + + ru + Форма настроек + + PersonalComputer + MobileDevice + + + РедактированиеТипа + + ru + Редактирование типа + + PersonalComputer + MobileDevice + + + ПодборВСписок + + ru + Подбор в список + + PersonalComputer + MobileDevice + + + РедактированиеТаблицы + + ru + Редактирование таблицы + + PersonalComputer + MobileDevice + +