commit 4c378ceb8226bbc4e20565733a891dfd899a4d0c Author: Ilya Konchakov Date: Fri Jan 16 11:37:23 2026 +0300 first commit 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 0000000..7609e4f Binary files /dev/null and b/ШаблонДополнительнойОбработки/bin/ШаблонДополнительнойОбработки.epf differ 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 0000000..05d625a Binary files /dev/null and b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыБезопасноеХранилищеТипКонтейнера/ValuesPicture.png differ diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыТипКонтейнера/ValuesPicture.png b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыТипКонтейнера/ValuesPicture.png new file mode 100644 index 0000000..05d625a Binary files /dev/null and b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиКомандыТипКонтейнера/ValuesPicture.png differ diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиБезопасноеХранилищеТипКонтейнера/ValuesPicture.png b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиБезопасноеХранилищеТипКонтейнера/ValuesPicture.png new file mode 100644 index 0000000..05d625a Binary files /dev/null and b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиБезопасноеХранилищеТипКонтейнера/ValuesPicture.png differ diff --git a/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиТипКонтейнера/ValuesPicture.png b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиТипКонтейнера/ValuesPicture.png new file mode 100644 index 0000000..05d625a Binary files /dev/null and b/ШаблонДополнительнойОбработки/src/ExternalDataProcessors/ШаблонДополнительнойОбработки/Forms/ФормаНастроек/Items/НастройкиОбработкиТипКонтейнера/ValuesPicture.png differ 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 + +