diff --git a/src/Catalogs/ирАлгоритмы/Commands/ОткрытьНастройкиАлгоритмов/Ext/CommandModule.bsl b/src/Catalogs/ирАлгоритмы/Commands/ОткрытьНастройкиАлгоритмов/Ext/CommandModule.bsl index 1e7352986..f9300ef07 100644 --- a/src/Catalogs/ирАлгоритмы/Commands/ОткрытьНастройкиАлгоритмов/Ext/CommandModule.bsl +++ b/src/Catalogs/ирАлгоритмы/Commands/ОткрытьНастройкиАлгоритмов/Ext/CommandModule.bsl @@ -2,6 +2,6 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ирОбщий.ОткрытьНастройкиАлгоритмовЛкс(); + ирКлиент.ОткрытьНастройкиАлгоритмовЛкс(); КонецПроцедуры diff --git a/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form.bin b/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form.bin index b1f48746e..b7058a070 100644 Binary files a/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form.bin and b/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form.bin differ diff --git a/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form/Module.bsl index c420f5538..c5d1e174c 100644 --- a/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form/Module.bsl +++ b/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -1,19 +1,19 @@  Процедура ДействияФормыМенеджерТабличногоПоля(Кнопка) - ирОбщий.ОткрытьМенеджерТабличногоПоляЛкс(ЭлементыФормы.СправочникСписок, ЭтаФорма); + ирКлиент.ОткрытьМенеджерТабличногоПоляЛкс(ЭлементыФормы.СправочникСписок, ЭтаФорма); КонецПроцедуры Процедура ДействияФормыОПодсистеме(Кнопка) - ирОбщий.ОткрытьСправкуПоПодсистемеЛкс(ТипЗнч(СправочникСписок)); + ирКлиент.ОткрытьСправкуПоПодсистемеЛкс(ТипЗнч(СправочникСписок)); КонецПроцедуры Процедура СправочникСписокПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); Если Элемент.ТекущаяСтрока <> Неопределено Тогда Текст = Элемент.ТекущаяСтрока.ТекстАлгоритма; Иначе @@ -42,35 +42,35 @@ Процедура ОткрытьНастройкиАлгоритмов(Кнопка) - ирОбщий.ОткрытьНастройкиАлгоритмовЛкс(); + ирКлиент.ОткрытьНастройкиАлгоритмовЛкс(); КонецПроцедуры Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Справочник.ирАлгоритмы.Форма.ФормаСписка"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Справочник.ирАлгоритмы.Форма.ФормаСписка"); Порядок.Установить("ДатаИзменения Убыв"); diff --git a/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form/form.txt b/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form/form.txt index 6002da34c..ad1331ece 100644 --- a/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form/form.txt +++ b/src/Catalogs/ирАлгоритмы/Forms/ФормаСписка/Ext/Form/form.txt @@ -52,7 +52,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},0,1, {1,1, -{4, +{5, {1,3, {"ru","Страница1"}, {"en","Страница1"}, @@ -70,7 +70,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,4, {2,8,1,1,1,0,0,0,0}, @@ -284,11 +285,11 @@ llKfbKh7Z9s2eeta3O4SpbpLUftPJ0CdQf50eFGakppRC/kO},0},0,0,0,0,0,3.5e2}, {"D"} },0,1,381ed624-9217-4e63-85db-c4c3cb87daae, { -{#base64:AgFTS2/0iI3BTqDV67a9oKcNfVA7DsIwDIUVqZfI7Eix0zbNzgFYOECBrgyoG8rJ -GDgSB2AhtulH5VNHct7z5730uV7J97jdrxGKzdXs2r7vLmcjYGtSsUl81YM1ICMP -JSc3VJc4gAeXW9G5lC/S4TlZol8zn1gnwpIgnBhxY7FhlRzCIjiFWV1J72AKXGSO -Uk2avUljNgZo1pTpd5eTmkU+XDc69KdKw4YvJmfG6hACYQXjL5LXxTbUpT+RxdhF -W1Yd2aaJ3lLjDseIsWpjUP3lC1hcBPO690YRRTWjFtIL},0},0,0,0,0,0,1.4e2}, +{#base64:AgFTS2/0iI3BTqDV67a9oKcNfVA7EsIgENXWmVyCGmZ2gQToPYCNB4ia1sJJl+Fk +Fh7JA9gIu/koflhmlvf295bHekXnfr0NQVabQezavu8uZ0FgK2K1ifnJFxuJGRlp +s4MpWmInjYSUigAxPSjDZKe0/lXzibnClYTGhSE1Cn2ekoxYlMAwTWfSgFwMC5/N +skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl +604r74NR2sPhGDDUbXA8v9wAeAf60bEjDUUWwxLiEw==},0},0,0,0,0,0,1.4e2}, {0,c8656f15-4984-4ee2-b095-393b5122dbef}, {-1}, {-1} @@ -452,20 +453,23 @@ M9r7YLXxuD8ECnUbnPSfT4AyA//o+CI3JTEjFuID},0},0,0,0,0,0,1e2}, {3,0, {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,1,0,1,1, -{5,fd3fe296-ace1-4714-8a0e-a902b716c8d3,472,1,7, -{7,38069f4d-c306-4a35-a21d-ee473cfb79b6,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{5,fd3fe296-ace1-4714-8a0e-a902b716c8d3,642,1,7, +{7,04f10406-6f63-40e2-8dd0-cbc958a3c89b,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,fcccea4d-035c-47df-934f-1a012acd0d17,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыКонсольКода", -{1,"ДействияФормыКонсольКода", -{1,1, -{"ru","Консоль кода"} +{7,a98964e4-8a83-4f49-a2a4-0c5f80bf10bb,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыОПодсистеме", +{1,"ДействияФормыОПодсистеме", +{1,2, +{"ru","О подсистеме"}, +{"en","О подсистеме"} }, -{1,1, -{"ru","Консоль кода"} +{1,2, +{"ru","О подсистеме"}, +{"en","О подсистеме"} }, -{1,1, -{"ru","Консоль кода"} +{1,2, +{"ru","О подсистеме"}, +{"en","О подсистеме"} }, {4,0, {0},"",-1,-1,1,0,""}, @@ -473,22 +477,47 @@ M9r7YLXxuD8ECnUbnPSfT4AyA//o+CI3JTEjFuID},0},0,0,0,0,0,1e2}, } },7, {1,3, -{"ru","Открыть в консоли кода"}, -{"en","Открыть в консоли кода"}, -{"uk","Открыть в консоли кода"} +{"ru","О подсистеме"}, +{"en","О подсистеме"}, +{"uk","О подсистеме"} }, {1,3, -{"ru","Открыть в консоли кода"}, -{"en","Открыть в консоли кода"}, -{"uk","Открыть в консоли кода"} +{"ru","О подсистеме"}, +{"en","О подсистеме"}, +{"uk","О подсистеме"} }, {4,1, -{0,5f19d61d-030e-4b03-820d-c1997cb9137a},"",-1,-1,0,0,""},1}, -{7,cc3099cd-ea70-408e-aa98-3423044c33e7,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,f55c5326-0fee-424f-b9d6-8adad980f4bd,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,947f0c94-a186-412d-9be8-c7b684f48ded,1,e1692cc2-605b-4535-84dd-28440238746c, +{0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},1}, +{7,a6705ba4-9416-44e5-9e56-1ab18344152d,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ОткрытьНастройкиАлгоритмов", +{1,"ОткрытьНастройкиАлгоритмов", +{1,1, +{"ru","Открыть настройки алгоритмов"} +}, +{1,1, +{"ru","Открыть настройки алгоритмов"} +}, +{1,1, +{"ru","Открыть настройки алгоритмов"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть настройки справочника"}, +{"en","Открыть настройки справочника"}, +{"uk","Открыть настройки справочника"} +}, +{1,3, +{"ru","Открыть настройки справочника"}, +{"en","Открыть настройки справочника"}, +{"uk","Открыть настройки справочника"} +}, +{4,1, +{0,593d89a3-25bb-4ad0-8d95-0a11726f633c},"",1,9,1,0,""},1}, +{7,29fc38f4-e022-4dbb-ab73-5de3f6707eac,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыМенеджерТабличногоПоля", {1,"ДействияФормыМенеджерТабличногоПоля", {1,2, @@ -527,17 +556,17 @@ AR4RjghZaoUqtnQZaGuwBIZuFwOC6NLrBTgCAJBwACQBhmZAQBUsC1WBAXt0KoPN ZxRwxH4TBe9gS0YqNWHOuJxUFdLJdbr7PDS9UFJKeQOFTgaIiHwcjF6JB3QohRt5 BgxkEQA7} },0,""},1}, -{7,1ec8c0d9-5d9b-4162-be49-b3fdb727ab85,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ОткрытьНастройкиАлгоритмов", -{1,"ОткрытьНастройкиАлгоритмов", +{7,85ddfd84-47a8-47e2-ad1b-af361ab124f6,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыКонсольКода", +{1,"ДействияФормыКонсольКода", {1,1, -{"ru","Открыть настройки алгоритмов"} +{"ru","Консоль кода"} }, {1,1, -{"ru","Открыть настройки алгоритмов"} +{"ru","Консоль кода"} }, {1,1, -{"ru","Открыть настройки алгоритмов"} +{"ru","Консоль кода"} }, {4,0, {0},"",-1,-1,1,0,""}, @@ -545,80 +574,52 @@ BgxkEQA7} } },7, {1,3, -{"ru","Открыть настройки справочника"}, -{"en","Открыть настройки справочника"}, -{"uk","Открыть настройки справочника"} +{"ru","Открыть в консоли кода"}, +{"en","Открыть в консоли кода"}, +{"uk","Открыть в консоли кода"} }, {1,3, -{"ru","Открыть настройки справочника"}, -{"en","Открыть настройки справочника"}, -{"uk","Открыть настройки справочника"} +{"ru","Открыть в консоли кода"}, +{"en","Открыть в консоли кода"}, +{"uk","Открыть в консоли кода"} }, {4,1, -{0,593d89a3-25bb-4ad0-8d95-0a11726f633c},"",1,9,1,0,""},1}, -{7,8554a4c0-9ae4-453e-a891-2e4518ee89fe,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыОПодсистеме", -{1,"ДействияФормыОПодсистеме", -{1,2, -{"ru","О подсистеме"}, -{"en","О подсистеме"} -}, -{1,2, -{"ru","О подсистеме"}, -{"en","О подсистеме"} -}, -{1,2, -{"ru","О подсистеме"}, -{"en","О подсистеме"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","О подсистеме"}, -{"en","О подсистеме"}, -{"uk","О подсистеме"} -}, -{1,3, -{"ru","О подсистеме"}, -{"en","О подсистеме"}, -{"uk","О подсистеме"} -}, -{4,1, -{0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,7,cc3099cd-ea70-408e-aa98-3423044c33e7, +{0,5f19d61d-030e-4b03-820d-c1997cb9137a},"",-1,-1,0,0,""},1}, +{7,423d3c97-b045-488b-9b72-f70c1279a6b0,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,92f10fa8-b67b-414a-91f8-622491a7ede6,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,7,04f10406-6f63-40e2-8dd0-cbc958a3c89b, {8,"Разделитель4",0,1, {1,1, {"ru","Действие9"} -},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,17,1e2,2,0,1,0,0,0,0},fcccea4d-035c-47df-934f-1a012acd0d17, +},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,17,1e2,2,0,1,0,0,0,0},85ddfd84-47a8-47e2-ad1b-af361ab124f6, {8,"КонсольКода",0,2, {1,3, {"ru","Консоль кода"}, {"en","Консоль кода"}, {"uk","Консоль кода"} -},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,80,1e2,0,3,1,0,0,0,0},f55c5326-0fee-424f-b9d6-8adad980f4bd, +},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,80,1e2,0,3,1,0,0,0,0},423d3c97-b045-488b-9b72-f70c1279a6b0, {8,"Разделитель5",0,1, {1,1, {"ru","Действие9"} -},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,81,1e2,2,0,1,0,0,0,0},947f0c94-a186-412d-9be8-c7b684f48ded, +},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,81,1e2,2,0,1,0,0,0,0},29fc38f4-e022-4dbb-ab73-5de3f6707eac, {8,"МенеджерТабличногоПоля",0,1, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,16,1e2,0,0,1,0,0,0,0},1ec8c0d9-5d9b-4162-be49-b3fdb727ab85, +},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,16,1e2,0,0,1,0,0,0,0},a6705ba4-9416-44e5-9e56-1ab18344152d, {8,"ОбщаяФорма_НастройкиАлгоритмов_ОткрытьФорму",0,2, {1,3, {"ru","Настройки алгоритмов"}, {"en","Настройки алгоритмов"}, {"uk","Настройки алгоритмов"} -},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,302,1e2,0,0,1,0,0,0,0},38069f4d-c306-4a35-a21d-ee473cfb79b6, +},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,302,1e2,0,0,1,0,0,0,0},92f10fa8-b67b-414a-91f8-622491a7ede6, {8,"Разделитель7",0,4, {1,1, {"ru","Действие6"} -},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,33,1e2,2,0,1,0,0,0,0},8554a4c0-9ae4-453e-a891-2e4518ee89fe, +},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,33,1e2,2,0,1,0,0,0,0},a98964e4-8a83-4f49-a2a4-0c5f80bf10bb, {8,"ОПодсистеме",0,4, {1,3, {"ru","О подсистеме"}, @@ -1092,7 +1093,7 @@ BgxkEQA7} {0} } } -},512,300,1,0,1,4,4,60,512,300,96}, +},512,300,1,0,1,4,4,73,512,300,96}, { {0},4, {1, diff --git a/src/Catalogs/ирАлгоритмы/Forms/ФормаСпискаУпр/Ext/Form/Module.bsl b/src/Catalogs/ирАлгоритмы/Forms/ФормаСпискаУпр/Ext/Form/Module.bsl index cae19b8de..def31a31e 100644 --- a/src/Catalogs/ирАлгоритмы/Forms/ФормаСпискаУпр/Ext/Form/Module.bsl +++ b/src/Catalogs/ирАлгоритмы/Forms/ФормаСпискаУпр/Ext/Form/Module.bsl @@ -18,6 +18,6 @@ &НаКлиенте Процедура НастройкиВыполненияАлгоритмов(Команда) - ирОбщий.ОткрытьНастройкиАлгоритмовЛкс(); + ирКлиент.ОткрытьНастройкиАлгоритмовЛкс(); КонецПроцедуры diff --git a/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form.bin b/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form.bin index b09a3b52d..a56a6c16a 100644 Binary files a/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form.bin and b/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form.bin differ diff --git a/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form/Module.bsl index 963187768..c8f473c99 100644 --- a/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form/Module.bsl +++ b/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -68,14 +68,14 @@ // Специальная обработка команд компоненты ДО КомпонентаТекстаАлгоритма = ПолеТекстаПрограммы; Если Ложь - Или Кнопка = ирОбщий.КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ПолеТекстаПрограммы, "Выполнить") - Или Кнопка = ирОбщий.КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ПолеТекстаПрограммы, "Проверить") + Или Кнопка = ирКлиент.КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ПолеТекстаПрограммы, "Выполнить") + Или Кнопка = ирКлиент.КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ПолеТекстаПрограммы, "Проверить") Тогда Если Не ПроверитьДанные() Тогда Возврат; КонецЕсли; КонецЕсли; - Если Кнопка = ирОбщий.КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ПолеТекстаПрограммы, "Выполнить") Тогда + Если Кнопка = ирКлиент.КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ПолеТекстаПрограммы, "Выполнить") Тогда Если ПолеТекстаПрограммы.ПроверитьПрограммныйКод() Тогда Если Модифицированность Тогда Ответ = Вопрос("Перед выполнением алгоритм необходимо сохранить. Выполнить сохранение?", РежимДиалогаВопрос.ОКОтмена); @@ -123,7 +123,7 @@ Открыть(); КонецЕсли; Если Не ВводДоступен() Тогда - ирОбщий.Форма_АктивироватьОткрытьЛкс(ЭтаФорма); + ирКлиент.Форма_АктивироватьОткрытьЛкс(ЭтаФорма); КонецЕсли; ВыполнятьАлгоритмыЧерезВнешниеОбработки = ирКэш.Получить().ВыполнятьАлгоритмыЧерезВнешниеОбработки; Если ВыполнятьАлгоритмыЧерезВнешниеОбработки Тогда @@ -145,7 +145,7 @@ ТекстСообщения = "Ошибка при выполнении алгоритма """ + Наименование + """ в режиме " + РежимВыполненияАлгоритма; КонецЕсли; Сообщить(ТекстСообщения, СтатусСообщения.Важное); - ТекстИстиннойОшибки = ирОбщий.ПоказатьОшибкуВТекстеПрограммыЛкс(ПолеТекстаПрограммы.ПолеТекста, + ТекстИстиннойОшибки = ирКлиент.ПоказатьОшибкуВТекстеПрограммыЛкс(ПолеТекстаПрограммы.ПолеТекста, СтартоваяСтрока, , , МодальныйРежим, ИнформацияОбОшибке, ИмяМодуля); Возврат ТекстИстиннойОшибки; @@ -218,7 +218,7 @@ Процедура ПараметрыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт ОформлениеСтроки.Ячейки.ДопустимыеТипы.УстановитьТекст(ирКэш.Получить().ПредставлениеДопустимыхТипов(ДанныеСтроки.ДопустимыеТипы)); - ирОбщий.ТабличноеПолеОтобразитьПиктограммыТиповЛкс(ОформлениеСтроки, "Значение"); + ирКлиент.ТабличноеПолеОтобразитьПиктограммыТиповЛкс(ОформлениеСтроки, "Значение"); КонецПроцедуры @@ -269,7 +269,7 @@ Процедура ДействияФормыОПодсистеме(Кнопка) - ирОбщий.ОткрытьСправкуПоПодсистемеЛкс(ЭтотОбъект); + ирКлиент.ОткрытьСправкуПоПодсистемеЛкс(ЭтотОбъект); КонецПроцедуры @@ -424,13 +424,13 @@ Результат = Результат + Символы.Таб + "Возврат Результат;" + Символы.ПС; Результат = Результат + "КонецФункции" + Символы.ПС; - ирОбщий.ОткрытьТекстЛкс(Результат, , "ВстроенныйЯзык", Истина); + ирКлиент.ОткрытьТекстЛкс(Результат, , "ВстроенныйЯзык", Истина); КонецПроцедуры Процедура ПараметрыЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ЭлементыФормы.Параметры, СтандартнаяОбработка, , Истина); + ирКлиент.ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ЭлементыФормы.Параметры, СтандартнаяОбработка, , Истина); КонецПроцедуры @@ -467,7 +467,7 @@ Процедура ПоказатьСвернутьНастройки(Видимость = Истина) ЭлементыФормы.ДействияФормы.Кнопки.ОтображатьПараметры.Пометка = Видимость; - ирОбщий.ИзменитьСвернутостьЛкс(ЭтаФорма, Видимость, ЭлементыФормы.Панель1, ЭлементыФормы.Разделитель1, ЭтаФорма.Панель, "верх"); + ирКлиент.ИзменитьСвернутостьЛкс(ЭтаФорма, Видимость, ЭлементыФормы.Панель1, ЭлементыФормы.Разделитель1, ЭтаФорма.Панель, "верх"); КонецПроцедуры diff --git a/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form/form.txt b/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form/form.txt index c8e7b8709..222ce555c 100644 --- a/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form/form.txt +++ b/src/Catalogs/ирАлгоритмы/Forms/ФормаЭлемента/Ext/Form/form.txt @@ -294,25 +294,27 @@ {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,4824adf3-2dd5-415b-8897-ae753e79d0cf,709,1,18, -{7,022c3624-3312-4a67-b922-68d58877caa3,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,147, -{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, -{7,9c8b3aec-3151-479e-9e32-076a27fa976d,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,c8775b4c-d815-4672-83de-8a15b401ae9d,1,c93a51ed-b2d1-47f1-948d-38373f8710af, +{7,a0630e12-d73b-47f6-9a4b-cdf8faad4069,1,c93a51ed-b2d1-47f1-948d-38373f8710af, {4,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,0},0,1}, -{7,576a9be1-1d65-4b43-86ab-d5aa868c59a5,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,c68b670d-a603-4949-a2b4-8024b2acb5a0,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,5c0f217b-abcf-471b-b841-3d81da5772d4,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,146, +{7,ad8397de-5bd0-4cf3-9fa0-ceb33d7b7310,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,147, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, -{7,91762f1a-02e5-4c16-bde6-b84b1cecca70,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,535c921f-d2fd-4d11-84c5-4d56f408180b,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,d70b5cbf-78bf-48a5-8411-2f36712b31fc,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,eb8e633f-5111-4d91-be12-04e290860952,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,145, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, -{7,8d74735d-c402-4d6b-8763-29b83855842f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,6e6ae8c8-70e7-4637-88f7-faae994be38c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,1ccc0d56-c6dc-4d25-90f2-bd96e2f4f05b,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,8665ca70-2544-4eba-b384-b0c315dfdd34,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,146, +{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, +{7,e1370953-d9a3-4529-9770-216680aed75a,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыОтображатьПараметры", {1,"ДействияФормыОтображатьПараметры", {1,1, @@ -342,9 +344,7 @@ {4,1, {0,65fd10fc-43c7-4d09-b386-e1aaa216efaa},"",-1,-1,0,0,""}, {0,0,0},1}, -{7,4400bdb0-1bb4-4501-b874-a26c397e6e21,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,2222e7f9-f92e-4cdd-80dd-100cf1cad5a4,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,13d29042-4942-40d7-8aa1-742b399bb3f8,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыОПодсистеме", {1,"ДействияФормыОПодсистеме", {1,2, @@ -376,61 +376,61 @@ }, {4,1, {0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},1}, -{7,4df4a7ba-3e7c-4155-976b-55f631bcd9c4,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,da6e6180-9741-4ed8-b666-a0e903eddaa1,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,147, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55,1},0,1},0,1}, -{7,c8d00bed-2aea-45a7-ba00-49f63041ae49,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,b190c58c-0686-467c-83fd-eec414403479,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,91ce0927-87ba-4cd1-a2f1-4fc7eb0f3f2b,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,0305f145-53e7-43c7-8170-f8e470ceec49,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,146, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55,1},0,1},0,1}, -{7,f715cc25-6a59-4eae-bd4c-17b97555a97a,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,b8b5e615-791e-4094-ac64-24ab5b24d54f,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,145, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55,1},0,1},0,1}, -{7,fbbb4c68-4604-41a9-81f0-6f922b14f037,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,23f46097-6761-43dd-81a3-890d26dffeda,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,140, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55,1},0,1},0,1}, -{7,fb0e40a2-ddb3-4f1f-b2ef-034279d5da4f,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,a4d1d93d-3987-475b-add7-f615229dbd4a,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,141, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55,1},0,1},0,1}, -{7,556ba9e3-72e2-4795-815b-3afeb8d3a1e1,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,c5286cb2-e3b5-425b-8461-4d7d61828d96,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,916ee776-0391-4179-8e0f-18273af32801,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,f69e75d0-ec0a-47f3-942f-7903996d305b,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,142, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55,1},0,1},0,1},2, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,10,c8775b4c-d815-4672-83de-8a15b401ae9d, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,10,a0630e12-d73b-47f6-9a4b-cdf8faad4069, {8,"Подменю",0,1, {1,1, {"#","Подменю"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,685,1e2,1,0,1,0,0,0,0},9c8b3aec-3151-479e-9e32-076a27fa976d, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,685,1e2,1,0,1,0,0,0,0},c68b670d-a603-4949-a2b4-8024b2acb5a0, {8,"Разделитель",0,1, -{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,694,1e2,2,0,1,0,0,0,0},022c3624-3312-4a67-b922-68d58877caa3, +{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,694,1e2,2,0,1,0,0,0,0},ad8397de-5bd0-4cf3-9fa0-ceb33d7b7310, {8,"Действие",0,1, {1,1, {"#","Действие"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,695,1e2,0,0,1,0,0,0,0},576a9be1-1d65-4b43-86ab-d5aa868c59a5, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,695,1e2,0,0,1,0,0,0,0},d70b5cbf-78bf-48a5-8411-2f36712b31fc, {8,"Разделитель1",0,1, -{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,696,1e2,2,0,1,0,0,0,0},5c0f217b-abcf-471b-b841-3d81da5772d4, +{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,696,1e2,2,0,1,0,0,0,0},8665ca70-2544-4eba-b384-b0c315dfdd34, {8,"Действие1",0,1, {1,1, {"#","Действие1"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,697,1e2,0,0,1,0,0,0,0},91762f1a-02e5-4c16-bde6-b84b1cecca70, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,697,1e2,0,0,1,0,0,0,0},eb8e633f-5111-4d91-be12-04e290860952, {8,"Действие2",0,1, {1,1, {"#","Действие2"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,698,1e2,0,0,1,0,0,0,0},8d74735d-c402-4d6b-8763-29b83855842f, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,698,1e2,0,0,1,0,0,0,0},535c921f-d2fd-4d11-84c5-4d56f408180b, {8,"Разделитель2",0,1, -{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,699,1e2,2,0,1,0,0,0,0},1ccc0d56-c6dc-4d25-90f2-bd96e2f4f05b, +{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,699,1e2,2,0,1,0,0,0,0},e1370953-d9a3-4529-9770-216680aed75a, {8,"ОтображатьПараметры",0,7, {1,3, {"ru","Параметры"}, {"en","Параметры"}, {"uk","Параметры"} -},1,4824adf3-2dd5-415b-8897-ae753e79d0cf,709,1e2,0,3,1,1,0,0,0},4400bdb0-1bb4-4501-b874-a26c397e6e21, +},1,4824adf3-2dd5-415b-8897-ae753e79d0cf,709,1e2,0,3,1,1,0,0,0},6e6ae8c8-70e7-4637-88f7-faae994be38c, {8,"Разделитель9",0,4, {1,1, {"ru","Действие6"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,708,1e2,2,0,1,0,0,0,0},2222e7f9-f92e-4cdd-80dd-100cf1cad5a4, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,708,1e2,2,0,1,0,0,0,0},13d29042-4942-40d7-8aa1-742b399bb3f8, {8,"ОПодсистеме",0,4, {1,3, {"ru","О подсистеме"}, @@ -441,31 +441,31 @@ {1,4824adf3-2dd5-415b-8897-ae753e79d0cf,685,0} } }, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55,0,8,4df4a7ba-3e7c-4155-976b-55f631bcd9c4, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,55,0,8,da6e6180-9741-4ed8-b666-a0e903eddaa1, {8,"Действие",0,1, {1,1, {"#","Действие"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,686,1e2,0,0,1,0,0,0,0},c8d00bed-2aea-45a7-ba00-49f63041ae49, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,686,1e2,0,0,1,0,0,0,0},b190c58c-0686-467c-83fd-eec414403479, {8,"Разделитель",0,1, -{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,687,1e2,2,0,1,0,0,0,0},91ce0927-87ba-4cd1-a2f1-4fc7eb0f3f2b, +{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,687,1e2,2,0,1,0,0,0,0},0305f145-53e7-43c7-8170-f8e470ceec49, {8,"Действие1",0,1, {1,1, {"#","Действие1"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,688,1e2,0,0,1,0,0,0,0},f715cc25-6a59-4eae-bd4c-17b97555a97a, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,688,1e2,0,0,1,0,0,0,0},b8b5e615-791e-4094-ac64-24ab5b24d54f, {8,"Действие2",0,1, {1,1, {"#","Действие2"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,689,1e2,0,0,1,0,0,0,0},fbbb4c68-4604-41a9-81f0-6f922b14f037, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,689,1e2,0,0,1,0,0,0,0},23f46097-6761-43dd-81a3-890d26dffeda, {8,"Действие3",0,1, {1,1, {"#","Действие3"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,690,1e2,0,0,1,0,0,0,0},fb0e40a2-ddb3-4f1f-b2ef-034279d5da4f, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,690,1e2,0,0,1,0,0,0,0},a4d1d93d-3987-475b-add7-f615229dbd4a, {8,"Действие4",0,1, {1,1, {"#","Действие4"} -},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,691,1e2,0,0,1,0,0,0,0},556ba9e3-72e2-4795-815b-3afeb8d3a1e1, +},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,691,1e2,0,0,1,0,0,0,0},c5286cb2-e3b5-425b-8461-4d7d61828d96, {8,"Разделитель1",0,1, -{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,692,1e2,2,0,1,0,0,0,0},916ee776-0391-4179-8e0f-18273af32801, +{1,0},0,4824adf3-2dd5-415b-8897-ae753e79d0cf,692,1e2,2,0,1,0,0,0,0},f69e75d0-ec0a-47f3-942f-7903996d305b, {8,"Действие5",0,1, {1,1, {"#","Действие5"} @@ -535,36 +535,36 @@ {0},7,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,2,0,1, {5,f2335302-8312-497f-bf6b-9dae1c10a498,5,1,5, -{7,ea45a9db-b3d5-4b4a-adee-95ed3d2441f8,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,c6c02333-1287-45fe-8bdf-00398575ce21,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,9edf5009-7464-43af-9b9a-509c6982ad9a,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,0,00000000-0000-0000-0000-000000000000,141, {1,0,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,94bba8ea-8cd3-4dfc-ae51-4ff0e5ddd273,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,0e48a484-3369-403e-bd82-360d98376103,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,0,00000000-0000-0000-0000-000000000000,140, {1,0,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,4d530204-dd13-4fe4-88eb-00f7f2b43a65,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,dcd6e60c-eb01-4404-b1f1-abe86398b980,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,b3f49dfd-0082-4ad4-bd36-0071f0487949,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,39f7f82f-7da0-436d-bbc2-bc2ffdab7516,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,0,00000000-0000-0000-0000-000000000000,142, -{1,0,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,54bbdf54-61bd-4ec3-b5bb-c686ad4f590a,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,c6c02333-1287-45fe-8bdf-00398575ce21, +{1,0,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,9edf5009-7464-43af-9b9a-509c6982ad9a, {8,"ОсновныеДействияФормыОК",0,1, {1,3, {"ru"," OK "}, {"en"," OK "}, {"uk"," OK "} -},1,f2335302-8312-497f-bf6b-9dae1c10a498,1,1e2,0,1,1,0,0,0,0},ea45a9db-b3d5-4b4a-adee-95ed3d2441f8, +},1,f2335302-8312-497f-bf6b-9dae1c10a498,1,1e2,0,1,1,0,0,0,0},dcd6e60c-eb01-4404-b1f1-abe86398b980, {8,"Разделитель",0,1, -{1,0},0,f2335302-8312-497f-bf6b-9dae1c10a498,2,1e2,2,1,1,0,0,0,0},94bba8ea-8cd3-4dfc-ae51-4ff0e5ddd273, +{1,0},0,f2335302-8312-497f-bf6b-9dae1c10a498,2,1e2,2,1,1,0,0,0,0},0e48a484-3369-403e-bd82-360d98376103, {8,"ОсновныеДействияФормыСохранить",0,1, {1,3, {"ru","Записать"}, {"en","Записать"}, {"uk","Записать"} -},1,f2335302-8312-497f-bf6b-9dae1c10a498,3,1e2,0,1,1,0,0,0,0},54bbdf54-61bd-4ec3-b5bb-c686ad4f590a, +},1,f2335302-8312-497f-bf6b-9dae1c10a498,3,1e2,0,1,1,0,0,0,0},b3f49dfd-0082-4ad4-bd36-0071f0487949, {8,"Разделитель1",0,1, -{1,0},0,f2335302-8312-497f-bf6b-9dae1c10a498,4,1e2,2,1,1,0,0,0,0},4d530204-dd13-4fe4-88eb-00f7f2b43a65, +{1,0},0,f2335302-8312-497f-bf6b-9dae1c10a498,4,1e2,2,1,1,0,0,0,0},39f7f82f-7da0-436d-bbc2-bc2ffdab7516, {8,"ОсновныеДействияФормыЗакрыть",0,1, {1,3, {"ru","Закрыть"}, @@ -575,7 +575,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,f3b10d08-37af-4686-af66-0f0172a7d345,1,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,3b740576-f089-4396-bfa2-13a1064e04a7,1,0,0} }, {8,0,439,564,464,1, {0, @@ -637,7 +637,11 @@ {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,2,1,1, {5,ea5d5166-af5e-48aa-b4bc-8278048bd869,14,1,11, -{7,6b81a6c0-7deb-4332-b1be-563e1de07b0d,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,30d9c5fa-c29d-4833-a75d-681f43d6b0d2,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,ea5d5166-af5e-48aa-b4bc-8278048bd869,6},0,2}, +{7,6554d242-653a-47e0-8ff1-f45f3649c390,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,b2e3591a-4532-4b51-9245-876203c31f4d,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельТекстАлгоритмаСгенерироватьМетод", {1,"КоманднаяПанельТекстАлгоритмаСгенерироватьМетод", {1,1, @@ -666,13 +670,68 @@ }, {4,1, {0,4ee0e42b-f7d0-451d-b43d-7de45ecd1e11},"",-1,-1,0,0,""},2}, -{7,a097850e-7519-4e11-95b6-60d7ec2c363e,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,a89f2cb0-8d2c-4ab7-8486-9cbf348cfe24,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельТекстАлгоритмаОбновитьИзФайла", +{1,"КоманднаяПанельТекстАлгоритмаОбновитьИзФайла", +{1,1, +{"ru","Обновить из файла"} +}, +{1,1, +{"ru","Обновить из файла"} +}, +{1,1, +{"ru","Обновить из файла"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},6, +{1,3, +{"ru","Обновить из файла внешней обработки"}, +{"en","Обновить из файла внешней обработки"}, +{"uk","Обновить из файла внешней обработки"} +}, +{1,3, +{"ru","Обновить из файла внешней обработки"}, +{"en","Обновить из файла внешней обработки"}, +{"uk","Обновить из файла внешней обработки"} +},2}, +{7,54022f20-5b25-4e1e-ba58-d1dbf4d1abb0,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельТекстАлгоритмаКонсольКода", +{1,"КоманднаяПанельТекстАлгоритмаКонсольКода", +{1,2, +{"ru","Консоль кода"}, +{"en","Консоль кода"} +}, +{1,2, +{"ru","Консоль кода"}, +{"en","Консоль кода"} +}, +{1,2, +{"ru","Консоль кода"}, +{"en","Консоль кода"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть в консоли кода"}, +{"en","Открыть в консоли кода"}, +{"uk","Открыть в консоли кода"} +}, +{1,3, +{"ru","Открыть в консоли кода"}, +{"en","Открыть в консоли кода"}, +{"uk","Открыть в консоли кода"} +}, +{4,1, +{0,5f19d61d-030e-4b03-820d-c1997cb9137a},"",-1,-1,0,0,""},2}, +{7,3f834e9b-2533-409f-8219-7ec4a2b42702,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,f4f7b60b-0432-46cc-b829-302234162dba,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,ea5d5166-af5e-48aa-b4bc-8278048bd869,6},0,2}, -{7,7f22ed9b-3361-495b-bba9-a8ce7464f624,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,eaacf193-eb45-4dd4-a017-2a0a04f0b819,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,2c007a67-013c-4317-9808-06d3b16ef165,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельТекстАлгоритмаОткрытьВОтладчике", {1,"КоманднаяПанельТекстАлгоритмаОткрытьВОтладчике", {1,2, @@ -705,72 +764,13 @@ {4,1, {0,3d9f1f89-72c7-4d7b-94eb-d6180fd3e81c},"",-1,-1,0,0,""}, {0,120,0},2}, -{7,84d6776b-cb15-49e8-834d-c876bbaf0e2b,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельТекстАлгоритмаКонсольКода", -{1,"КоманднаяПанельТекстАлгоритмаКонсольКода", -{1,2, -{"ru","Консоль кода"}, -{"en","Консоль кода"} -}, -{1,2, -{"ru","Консоль кода"}, -{"en","Консоль кода"} -}, -{1,2, -{"ru","Консоль кода"}, -{"en","Консоль кода"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть в консоли кода"}, -{"en","Открыть в консоли кода"}, -{"uk","Открыть в консоли кода"} -}, -{1,3, -{"ru","Открыть в консоли кода"}, -{"en","Открыть в консоли кода"}, -{"uk","Открыть в консоли кода"} -}, -{4,1, -{0,5f19d61d-030e-4b03-820d-c1997cb9137a},"",-1,-1,0,0,""},2}, -{7,91e175c9-6aa1-4607-b85d-79dbac42e61f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,1495f1e6-7234-4073-99e2-d40545d899c6,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,bfe9c764-c741-44de-826f-0ac0fe12011d,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельТекстАлгоритмаОбновитьИзФайла", -{1,"КоманднаяПанельТекстАлгоритмаОбновитьИзФайла", -{1,1, -{"ru","Обновить из файла"} -}, -{1,1, -{"ru","Обновить из файла"} -}, -{1,1, -{"ru","Обновить из файла"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},6, -{1,3, -{"ru","Обновить из файла внешней обработки"}, -{"en","Обновить из файла внешней обработки"}, -{"uk","Обновить из файла внешней обработки"} -}, -{1,3, -{"ru","Обновить из файла внешней обработки"}, -{"en","Обновить из файла внешней обработки"}, -{"uk","Обновить из файла внешней обработки"} -},2}, -{7,1e0bb39a-23f0-4cd2-b38e-e6e74cbc25cc,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,c18b1ba5-47f8-4766-9e3c-340ec1432342,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,c25e9b62-8aa6-4cbd-bb5f-25a495f20082,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,b5426615-4d2e-4351-864a-f437e6340c35,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,b375da05-53a5-4527-ac04-6fc97a35b145,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,42c040aa-969b-4dfa-84aa-f4a984d851eb,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельТекстАлгоритмаСсылкаНаОбъектБД", {1,"КоманднаяПанельТекстАлгоритмаСсылкаНаОбъектБД", {1,2, @@ -808,53 +808,53 @@ NQXaZGBKoKH1PC7xlibVNneMqSkPLacBiUbEkRITAQA7} },0,""}, {0,49,20},2},2, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,10,6b81a6c0-7deb-4332-b1be-563e1de07b0d, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,10,b2e3591a-4532-4b51-9245-876203c31f4d, {8,"СгенерироватьМетод",0,1, {1,3, {"ru","Метод"}, {"en","Метод"}, {"uk","Метод"} -},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,13,1e2,0,3,1,0,0,0,0},a097850e-7519-4e11-95b6-60d7ec2c363e, +},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,13,1e2,0,3,1,0,0,0,0},6554d242-653a-47e0-8ff1-f45f3649c390, {8,"Разделитель4",0,1, {1,1, {"ru","Действие"} -},0,ea5d5166-af5e-48aa-b4bc-8278048bd869,14,1e2,2,0,1,0,0,0,0},84d6776b-cb15-49e8-834d-c876bbaf0e2b, +},0,ea5d5166-af5e-48aa-b4bc-8278048bd869,14,1e2,2,0,1,0,0,0,0},54022f20-5b25-4e1e-ba58-d1dbf4d1abb0, {8,"КонсольКода",0,1, {1,3, {"ru","Консоль кода"}, {"en","Консоль кода"}, {"uk","Консоль кода"} -},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,10,1e2,0,3,1,0,0,0,0},91e175c9-6aa1-4607-b85d-79dbac42e61f, +},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,10,1e2,0,3,1,0,0,0,0},3f834e9b-2533-409f-8219-7ec4a2b42702, {8,"Разделитель3",0,1, {1,1, {"ru","Действие"} -},0,ea5d5166-af5e-48aa-b4bc-8278048bd869,11,1e2,2,0,1,0,0,0,0},eaacf193-eb45-4dd4-a017-2a0a04f0b819, +},0,ea5d5166-af5e-48aa-b4bc-8278048bd869,11,1e2,2,0,1,0,0,0,0},2c007a67-013c-4317-9808-06d3b16ef165, {8,"ОткрытьВОтладчике",0,2, {1,3, {"ru","Отладчик"}, {"en","Отладчик"}, {"uk","Отладчик"} -},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,4,1e2,0,3,1,0,0,0,0},7f22ed9b-3361-495b-bba9-a8ce7464f624, +},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,4,1e2,0,3,1,0,0,0,0},1495f1e6-7234-4073-99e2-d40545d899c6, {8,"Разделитель1",0,1, {1,1, {"ru","Действие"} -},0,ea5d5166-af5e-48aa-b4bc-8278048bd869,8,1e2,2,0,1,0,0,0,0},bfe9c764-c741-44de-826f-0ac0fe12011d, +},0,ea5d5166-af5e-48aa-b4bc-8278048bd869,8,1e2,2,0,1,0,0,0,0},a89f2cb0-8d2c-4ab7-8486-9cbf348cfe24, {8,"ОбновитьИзФайла",0,1, {1,3, {"ru","Обновить из файла"}, {"en","Обновить из файла"}, {"uk","Обновить из файла"} -},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,3,1e2,0,0,1,0,0,0,0},1e0bb39a-23f0-4cd2-b38e-e6e74cbc25cc, +},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,3,1e2,0,0,1,0,0,0,0},c18b1ba5-47f8-4766-9e3c-340ec1432342, {8,"Разделитель",0,1, {1,1, {"ru","Действие"} -},0,ea5d5166-af5e-48aa-b4bc-8278048bd869,2,1e2,2,0,1,0,0,0,0},f4f7b60b-0432-46cc-b829-302234162dba, +},0,ea5d5166-af5e-48aa-b4bc-8278048bd869,2,1e2,2,0,1,0,0,0,0},30d9c5fa-c29d-4833-a75d-681f43d6b0d2, {8,"Вставка",0,3, {1,3, {"ru","Вставка"}, {"en","Вставка"}, {"uk","Вставка"} -},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,5,1e2,1,0,1,0,0,0,0},c25e9b62-8aa6-4cbd-bb5f-25a495f20082, +},1,ea5d5166-af5e-48aa-b4bc-8278048bd869,5,1e2,1,0,1,0,0,0,0},b5426615-4d2e-4351-864a-f437e6340c35, {8,"Разделитель2",0,1, {1,1, {"ru","Действие"} @@ -863,7 +863,7 @@ NQXaZGBKoKH1PC7xlibVNneMqSkPLacBiUbEkRITAQA7} {1,ea5d5166-af5e-48aa-b4bc-8278048bd869,5,0} } }, -{5,ea5d5166-af5e-48aa-b4bc-8278048bd869,6,0,1,b375da05-53a5-4527-ac04-6fc97a35b145, +{5,ea5d5166-af5e-48aa-b4bc-8278048bd869,6,0,1,42c040aa-969b-4dfa-84aa-f4a984d851eb, {8,"СсылкаНаОбъектБД",1,3, {1,3, {"ru","Ссылка на объект БД"}, @@ -1746,8 +1746,10 @@ fuLt4Ps+cSeolfd+bqg7+LbFHd+vGByZtfkB/13/VdeH91VurcZqQWC96XE7y28= {3,0, {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,1,0,1,1, -{5,3cca1fe2-509e-45a2-b494-c7e009d1c36b,1380,1,2, -{7,14e1f905-be16-4863-a881-9d3350a112da,1,e1692cc2-605b-4535-84dd-28440238746c, +{5,3cca1fe2-509e-45a2-b494-c7e009d1c36b,1470,1,2, +{7,440291f8-0c82-4493-851c-42baa567921c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,8c7e4345-31ae-489e-b10a-91cece1b270a,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельПараметрыЗаполнить", {1,"КоманднаяПанельПараметрыЗаполнить", {1,2, @@ -1776,14 +1778,12 @@ fuLt4Ps+cSeolfd+bqg7+LbFHd+vGByZtfkB/13/VdeH91VurcZqQWC96XE7y28= {"ru","Дополнить параметры по тексту"}, {"en","Дополнить параметры по тексту"}, {"uk","Дополнить параметры по тексту"} -},2}, -{7,2de31785-49c2-4fa0-90a7-73a254ae0383,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,2,2de31785-49c2-4fa0-90a7-73a254ae0383, +},2},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,2,440291f8-0c82-4493-851c-42baa567921c, {8,"Разделитель",0,1, {1,1, {"ru","Действие9"} -},0,3cca1fe2-509e-45a2-b494-c7e009d1c36b,11,1e2,2,0,1,0,0,0,0},14e1f905-be16-4863-a881-9d3350a112da, +},0,3cca1fe2-509e-45a2-b494-c7e009d1c36b,11,1e2,2,0,1,0,0,0,0},8c7e4345-31ae-489e-b10a-91cece1b270a, {8,"Заполнить",0,2, {1,3, {"ru","Заполнить"}, @@ -2044,7 +2044,7 @@ fuLt4Ps+cSeolfd+bqg7+LbFHd+vGByZtfkB/13/VdeH91VurcZqQWC96XE7y28= {0} } } -},564,464,1,0,1,4,4,522,564,464,96}, +},564,464,1,0,1,4,4,532,564,464,96}, { {0},9, {2, diff --git a/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form.bin b/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form.bin index 629024db6..73cd99f48 100644 Binary files a/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form.bin and b/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form.bin differ diff --git a/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form/Module.bsl b/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form/Module.bsl index 206db1acc..0444e2f54 100644 --- a/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form/Module.bsl +++ b/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form/Module.bsl @@ -6,6 +6,6 @@ Сообщить("Сначала запишите объект!"); Возврат; КонецЕсли; - ирОбщий.ОткрытьСсылкуВРедактореОбъектаБДЛкс(ПараметрОснование); + ирКлиент.ОткрытьСсылкуВРедактореОбъектаБДЛкс(ПараметрОснование); КонецПроцедуры \ No newline at end of file diff --git a/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form/form.txt b/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form/form.txt index 01cc52911..d9fb9ae91 100644 --- a/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form/form.txt +++ b/src/Catalogs/ирКомандаРедактироватьОбъект/Forms/ФормаЭлемента/Ext/Form/form.txt @@ -39,7 +39,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},0,1, {1,1, -{4, +{5, {1,3, {"ru","Страница1"}, {"en","Страница1"}, @@ -57,7 +57,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,4, {2,8,1,1,1,0,0,0,0}, @@ -70,7 +71,7 @@ {0} }, {0} -},400,300,1,0,1,4,4,65,400,300,96}, +},400,300,1,0,1,4,4,66,400,300,96}, { {1},3, {1, diff --git a/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form.bin b/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form.bin index 275f2519c..14bae5ed8 100644 Binary files a/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form.bin and b/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form.bin differ diff --git a/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form/Module.bsl b/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form/Module.bsl index 6cc45b38d..c3797c170 100644 --- a/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form/Module.bsl +++ b/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form/Module.bsl @@ -1,13 +1,13 @@  Процедура ДействияФормыМенеджерТабличногоПоля(Кнопка) - ирОбщий.ОткрытьМенеджерТабличногоПоляЛкс(ЭлементыФормы.СправочникСписок, ЭтаФорма); + ирКлиент.ОткрытьМенеджерТабличногоПоляЛкс(ЭлементыФормы.СправочникСписок, ЭтаФорма); КонецПроцедуры Процедура ДействияФормыОПодсистеме(Кнопка) - ирОбщий.ОткрытьСправкуПоПодсистемеЛкс(ТипЗнч(СправочникСписок)); + ирКлиент.ОткрытьСправкуПоПодсистемеЛкс(ТипЗнч(СправочникСписок)); КонецПроцедуры diff --git a/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form/form.txt b/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form/form.txt index 2a63b6918..4867324ca 100644 --- a/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form/form.txt +++ b/src/Catalogs/ирОбъектыДляОтладки/Forms/ФормаСписка/Ext/Form/form.txt @@ -51,7 +51,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},0,1, {1,1, -{4, +{5, {1,3, {"ru","Страница1"}, {"en","Страница1"}, @@ -69,7 +69,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,4, {2,8,1,1,1,0,0,0,0}, @@ -144,7 +145,7 @@ {48a6ebc3-fcc8-4f8f-b399-459fb32aa46b, {4, {8, -{18, +{19, {1,0}, {1,0}, {1,0},24,0,-1,-1,-1,12590592, @@ -179,7 +180,7 @@ {1,0}, {"Pattern", {"S",10,1} -},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0,24}, {-1}, {-1}, {-1} @@ -188,7 +189,7 @@ {48a6ebc3-fcc8-4f8f-b399-459fb32aa46b, {4, {8, -{18, +{19, {1,3, {"ru","Код"}, {"en","Код"}, @@ -233,7 +234,7 @@ MXAkrkBil4DKp4niPj877znrzYq/+/U2BairSe36cRwuZ8Vgq8ABAsW6ijkhm1qg jCw0OeCTXWIPNjcDIcb0wxU2B23Mr55PLB1+mTD0yrAbTV1WSYuzBCgwqUvSInwu 4pOHTMpsUu1VLFGpUoRCz1XInKa8M6+k6Q9bbvhi8s1Q67035KA8EU8Xet829mQ0 -hSHoxg1Gd12w2nR4OAYKrg9e9JcToMzALzrfyKIkZsRCfAA=},0},0,0,0,0,0}, +hSHoxg1Gd12w2nR4OAYKrg9e9JcToMzALzrfyKIkZsRCfAA=},0},0,0,0,0,0,35}, {-2}, {-1}, {-1} @@ -242,7 +243,7 @@ hSHoxg1Gd12w2nR4OAYKrg9e9JcToMzALzrfyKIkZsRCfAA=},0},0,0,0,0,0}, {48a6ebc3-fcc8-4f8f-b399-459fb32aa46b, {4, {8, -{18, +{19, {1,3, {"ru","Наименование"}, {"en","Наименование"}, @@ -287,7 +288,7 @@ hSHoxg1Gd12w2nR4OAYKrg9e9JcToMzALzrfyKIkZsRCfAA=},0},0,0,0,0,0}, MXAkrkBslwLlk0Ry3rNf/JzFfCbrdrmeEyyrs1l1p1N/PBgBawNUI1BeVpkJPdQA MfIQOOAjO8URPBQxEGIuF6nwHKxzvzSfWBVxSjh6MuLGUstdyhaWABWW7kp6VKxF 8Ip4SN5BbZqNyWM05k1U6KEKJWeJD+eNiv5kxxe+2Hyx1MQYHdUwfpLMl7rYBL93 -llKfbKh7Z9s2eeta3O4SpbpLUftPJ0CdQf50eFGakppRC/kO},0},0,0,0,0,0}, +llKfbKh7Z9s2eeta3O4SpbpLUftPJ0CdQf50eFGakppRC/kO},0},0,0,0,0,0,187}, {-3}, {-1}, {-1} @@ -296,7 +297,7 @@ llKfbKh7Z9s2eeta3O4SpbpLUftPJ0CdQf50eFGakppRC/kO},0},0,0,0,0,0}, {48a6ebc3-fcc8-4f8f-b399-459fb32aa46b, {4, {8, -{18, +{19, {1,3, {"ru","Дата изменения"}, {"en","Дата изменения"}, @@ -341,7 +342,7 @@ llKfbKh7Z9s2eeta3O4SpbpLUftPJ0CdQf50eFGakppRC/kO},0},0,0,0,0,0}, Fh7JA9gIu/koflhmlvf295bHekXnfr0NQVabQezavu8uZ0FgK2K1ifnJFxuJGRlp s4MpWmInjYSUigAxPSjDZKe0/lXzibnClYTGhSE1Cn2ekoxYlMAwTWfSgFwMC5/N skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl -604r74NR2sPhGDDUbXA8v9wAeAf60bEjDUUWwxLiEw==},0},0,0,0,0,0}, +604r74NR2sPhGDDUbXA8v9wAeAf60bEjDUUWwxLiEw==},0},0,0,0,0,0,111.0000000000001}, {0,ef3c7e63-7dc3-4e7a-a871-daaa0e3dd570}, {-1}, {-1} @@ -350,7 +351,7 @@ skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl {48a6ebc3-fcc8-4f8f-b399-459fb32aa46b, {4, {8, -{18, +{19, {1,3, {"ru","Число символов"}, {"en","Число символов"}, @@ -395,7 +396,7 @@ skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl jIEjcQViuwqoBeJIzvPz5zm77YbP8/6YItTVpA79OA63q2KwV4AGsqW6ShSRix0g IQcNucIusQeXizH3MCk/OMOR09b+qlljqfDLgMV3hNVoDDSF1BJEMALzdAk6A2vD OYddIyrVUaXilSpZRug5yzCnkS7xSor+sKXDF5UfijrvvcUWyh/xerH3XeMuVmMc -om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0}, +om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0,77}, {0,9f461635-e06c-4b93-8ded-ffcebdb55a8b}, {-1}, {-1} @@ -487,39 +488,12 @@ om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0}, {3,0, {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,1,0,1,1, -{5,fd3fe296-ace1-4714-8a0e-a902b716c8d3,431,1,6, -{7,9efdf08e-bae0-444f-bee8-e4cac9ff829a,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{5,fd3fe296-ace1-4714-8a0e-a902b716c8d3,467,1,6, +{7,fdf46bea-5866-427b-9d39-2236ba524498,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,4b1d963b-aa07-41c4-99e2-f1fbf65e1ef7,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыОтладить", -{1,"ДействияФормыОтладить", -{1,1, -{"ru","Действия формы отладить"} -}, -{1,1, -{"ru","Действия формы отладить"} -}, -{1,1, -{"ru","Действия формы отладить"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Отладить"}, -{"en","Отладить"}, -{"uk","Отладить"} -}, -{1,3, -{"ru","Отладить"}, -{"en","Отладить"}, -{"uk","Отладить"} -}, -{4,1, -{0,5f19d61d-030e-4b03-820d-c1997cb9137a},"",-1,-1,0,0,""},1}, -{7,daded282-c324-4f89-80a3-3530bcd53c79,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,2a6979ea-fcde-4d15-8a2a-ce7c2da29806,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,c09c2b55-5c99-4009-ada3-eba03fcae1a6,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыОПодсистеме", {1,"ДействияФормыОПодсистеме", {1,2, @@ -551,9 +525,38 @@ om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0}, }, {4,1, {0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},1}, -{7,4cdfb69a-4d72-4d6d-aea3-5961d74622fa,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,57231ccd-3f31-4367-a91d-5bd301f0a0e0,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыОтладить", +{1,"ДействияФормыОтладить", +{1,1, +{"ru","Действия формы отладить"} +}, +{1,1, +{"ru","Действия формы отладить"} +}, +{1,1, +{"ru","Действия формы отладить"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Отладить"}, +{"en","Отладить"}, +{"uk","Отладить"} +}, +{1,3, +{"ru","Отладить"}, +{"en","Отладить"}, +{"uk","Отладить"} +}, +{4,1, +{0,5f19d61d-030e-4b03-820d-c1997cb9137a},"",-1,-1,0,0,""},1}, +{7,9a4d20c4-541a-4a9f-9689-42dad55409cf,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,73ad6a67-dfa9-4aa2-b990-1b3a5209c4d5,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,74c1c61b-ab2e-4313-9246-ff7947b856f5,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыМенеджерТабличногоПоля", {1,"ДействияФормыМенеджерТабличногоПоля", {1,2, @@ -591,34 +594,32 @@ om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0}, AR4RjghZaoUqtnQZaGuwBIZuFwOC6NLrBTgCAJBwACQBhmZAQBUsC1WBAXt0KoPN ZxRwxH4TBe9gS0YqNWHOuJxUFdLJdbr7PDS9UFJKeQOFTgaIiHwcjF6JB3QohRt5 BgxkEQA7} -},0,""},1}, -{7,7d927659-5945-4446-9fa0-b60843e096c7,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,6,9efdf08e-bae0-444f-bee8-e4cac9ff829a, +},0,""},1},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,6,2a6979ea-fcde-4d15-8a2a-ce7c2da29806, {8,"Разделитель4",0,1, {1,1, {"ru","Действие9"} -},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,17,1e2,2,0,1,0,0,0,0},4b1d963b-aa07-41c4-99e2-f1fbf65e1ef7, +},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,17,1e2,2,0,1,0,0,0,0},57231ccd-3f31-4367-a91d-5bd301f0a0e0, {8,"Отладить",0,2, {1,3, {"ru","Отладить"}, {"en","Отладить"}, {"uk","Отладить"} -},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,80,1e2,0,3,1,0,0,0,0},4cdfb69a-4d72-4d6d-aea3-5961d74622fa, +},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,80,1e2,0,3,1,0,0,0,0},9a4d20c4-541a-4a9f-9689-42dad55409cf, {8,"Разделитель5",0,1, {1,1, {"ru","Действие9"} -},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,81,1e2,2,0,1,0,0,0,0},73ad6a67-dfa9-4aa2-b990-1b3a5209c4d5, +},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,81,1e2,2,0,1,0,0,0,0},74c1c61b-ab2e-4313-9246-ff7947b856f5, {8,"МенеджерТабличногоПоля",0,1, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,16,1e2,0,0,1,0,0,0,0},7d927659-5945-4446-9fa0-b60843e096c7, +},1,fd3fe296-ace1-4714-8a0e-a902b716c8d3,16,1e2,0,0,1,0,0,0,0},fdf46bea-5866-427b-9d39-2236ba524498, {8,"Разделитель7",0,4, {1,1, {"ru","Действие6"} -},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,33,1e2,2,0,1,0,0,0,0},daded282-c324-4f89-80a3-3530bcd53c79, +},0,fd3fe296-ace1-4714-8a0e-a902b716c8d3,33,1e2,2,0,1,0,0,0,0},c09c2b55-5c99-4009-ada3-eba03fcae1a6, {8,"ОПодсистеме",0,4, {1,3, {"ru","О подсистеме"}, @@ -779,7 +780,7 @@ BgxkEQA7} {0} } } -},536,301,1,0,1,4,4,48,536,301,96}, +},536,301,1,0,1,4,4,50,536,301,96}, { {0},2, {1, diff --git a/src/CommonCommands/ирОбработатьОбъекты/Ext/CommandModule.bsl b/src/CommonCommands/ирОбработатьОбъекты/Ext/CommandModule.bsl index 8ff641444..b47af7128 100644 --- a/src/CommonCommands/ирОбработатьОбъекты/Ext/CommandModule.bsl +++ b/src/CommonCommands/ирОбработатьОбъекты/Ext/CommandModule.bsl @@ -7,7 +7,7 @@ #ИначеЕсли ТонкийКлиент Тогда ОткрытьФорму("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая"); #Иначе - ирОбщий.ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(ПараметрКоманды); + ирКлиент.ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(ПараметрКоманды); #КонецЕсли КонецПроцедуры diff --git a/src/CommonCommands/ирОбъединитьСсылки/Ext/CommandModule.bsl b/src/CommonCommands/ирОбъединитьСсылки/Ext/CommandModule.bsl index 874c919e1..c0fbc7527 100644 --- a/src/CommonCommands/ирОбъединитьСсылки/Ext/CommandModule.bsl +++ b/src/CommonCommands/ирОбъединитьСсылки/Ext/CommandModule.bsl @@ -7,7 +7,7 @@ #ИначеЕсли ТонкийКлиент Тогда ОткрытьФорму("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая"); #Иначе - ФормаОбработки = ирОбщий.ПолучитьФормуЛкс("Обработка.ирПоискДублейИЗаменаСсылок.Форма"); + ФормаОбработки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирПоискДублейИЗаменаСсылок.Форма"); ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(ПараметрКоманды[0])); ФормаОбработки.ОткрытьДляЗаменыПоСпискуСсылок(ПараметрКоманды); #КонецЕсли diff --git a/src/CommonCommands/ирРедактироватьИзмененияНаУзле/Ext/CommandModule.bsl b/src/CommonCommands/ирРедактироватьИзмененияНаУзле/Ext/CommandModule.bsl index 7fae62159..037e66362 100644 --- a/src/CommonCommands/ирРедактироватьИзмененияНаУзле/Ext/CommandModule.bsl +++ b/src/CommonCommands/ирРедактироватьИзмененияНаУзле/Ext/CommandModule.bsl @@ -7,7 +7,7 @@ #ИначеЕсли ТонкийКлиент Тогда ОткрытьФорму("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая"); #Иначе - Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирРедакторИзмененийНаУзлах.Форма"); + Форма = ирКлиент.ПолучитьФормуЛкс("Обработка.ирРедакторИзмененийНаУзлах.Форма"); Форма.ПараметрУзелОбмена = ПараметрКоманды; Форма.Открыть(); #КонецЕсли diff --git a/src/CommonCommands/ирРедактироватьОбъект/Ext/CommandModule.bsl b/src/CommonCommands/ирРедактироватьОбъект/Ext/CommandModule.bsl index ae1c402bc..2b1084f56 100644 --- a/src/CommonCommands/ирРедактироватьОбъект/Ext/CommandModule.bsl +++ b/src/CommonCommands/ирРедактироватьОбъект/Ext/CommandModule.bsl @@ -7,7 +7,7 @@ #ИначеЕсли ТонкийКлиент Тогда ОткрытьФорму("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая"); #Иначе - ирОбщий.ОткрытьСсылкуВРедактореОбъектаБДЛкс(ПараметрКоманды); + ирКлиент.ОткрытьСсылкуВРедактореОбъектаБДЛкс(ПараметрКоманды); #КонецЕсли КонецПроцедуры diff --git a/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form.bin b/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form.bin index 43ab0f936..009cb0837 100644 Binary files a/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form.bin and b/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form.bin differ diff --git a/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form/Module.bsl b/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form/Module.bsl index 60e7d5d39..8e8a1e6d2 100644 --- a/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form/Module.bsl +++ b/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form/Module.bsl @@ -227,7 +227,7 @@ //|Перем ирОбщий Экспорт; //|Перем ирСервер Экспорт; //|Перем ирКэш Экспорт; - //|Перем ирПривилегированный Экспорт; + //|Перем ирКлиент Экспорт; //|Перем ирПортативный Экспорт; //| //|Перем ирПлатформа Экспорт; @@ -570,7 +570,7 @@ Процедура КаталогНачалоВыбора(Элемент, СтандартнаяОбработка) - ирОбщий.ВыбратьКаталогВФормеЛкс(Каталог); + ирКлиент.ВыбратьКаталогВФормеЛкс(Каталог); КонецПроцедуры diff --git a/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form/form.txt b/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form/form.txt index 9c82a7ce9..53d83aba4 100644 --- a/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form/form.txt +++ b/src/CommonForms/ирВыпускВариантаПортативный/Ext/Form/form.txt @@ -111,7 +111,7 @@ {0},7,1,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,1,0,2,0,1, {5,1cdb5be4-467e-46e9-bbd2-7273737aa3a8,1,1,1, -{7,6edc9832-51ef-4829-b0e4-54f3b1981b0c,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,fffc1a7b-5246-4109-8c8e-5cd9e92b6793,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ОсновныеДействияФормыВыполнить", {1,"ОсновныеДействияФормыВыполнить", {1,1, @@ -138,7 +138,7 @@ {"en","Выполнить"}, {"uk","Выполнить"} },1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,6edc9832-51ef-4829-b0e4-54f3b1981b0c, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,fffc1a7b-5246-4109-8c8e-5cd9e92b6793, {8,"Выполнить",0,1, {1,3, {"ru","Выполнить"}, @@ -149,7 +149,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,4eca3439-62d8-41df-99dc-a2ac779d79da,1,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,c369cff6-dfa8-4795-9789-4ddee214afc9,1,0,0} }, {8,0,84,475,109,1, {0, @@ -615,7 +615,7 @@ {0} } } -},475,109,1,0,1,4,4,221,475,109,96}, +},475,109,1,0,1,4,4,217,475,109,96}, { {-1},5, {3, diff --git a/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form.bin b/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form.bin index 427888397..69e74d067 100644 Binary files a/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form.bin and b/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form.bin differ diff --git a/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form/Module.bsl b/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form/Module.bsl index aedcf5a27..902cc98d0 100644 --- a/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form/Module.bsl +++ b/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form/Module.bsl @@ -152,14 +152,14 @@ //ТекстовыйДокумент.УстановитьТекст(ТекстФайла); //ТекстовыйДокумент.Записать(ИмяФайла); - // У общего модуля ирПривилегированный убираем флажок Привилегированный - ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирПривилегированный.xml"; - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.Прочитать(ИмяФайла); - ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); - ТекстФайла = ирОбщий.СтрЗаменитьЛкс(ТекстФайла, "true", "false"); - ТекстовыйДокумент.УстановитьТекст(ТекстФайла); - ТекстовыйДокумент.Записать(ИмяФайла); + //// У общего модуля ирКлиент убираем флажок Привилегированный + //ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирКлиент.xml"; + //ТекстовыйДокумент = Новый ТекстовыйДокумент; + //ТекстовыйДокумент.Прочитать(ИмяФайла); + //ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); + //ТекстФайла = ирОбщий.СтрЗаменитьЛкс(ТекстФайла, "true", "false"); + //ТекстовыйДокумент.УстановитьТекст(ТекстФайла); + //ТекстовыйДокумент.Записать(ИмяФайла); // У подсистемы ИнструментыРазработчикаTormozit обновим версию ИмяФайла = КаталогВыгрузкиРасширения + "\SubSystems\ИнструментыРазработчикаTormozit.xml"; @@ -273,7 +273,7 @@ Процедура КаталогНачалоВыбора(Элемент, СтандартнаяОбработка) - ирОбщий.ВыбратьКаталогВФормеЛкс(Каталог); + ирКлиент.ВыбратьКаталогВФормеЛкс(Каталог); КонецПроцедуры @@ -304,7 +304,7 @@ Процедура ИсполняемыйФайлПлатформыНачалоВыбора(Элемент, СтандартнаяОбработка) - РезультатВыбора = ирОбщий.ВыбратьФайлЛкс(, "exe",, Элемент.Значение); + РезультатВыбора = ирКлиент.ВыбратьФайлЛкс(, "exe",, Элемент.Значение); Если ЗначениеЗаполнено(РезультатВыбора) Тогда Элемент.Значение = РезультатВыбора; КонецЕсли; diff --git a/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form/form.txt b/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form/form.txt index 943bbe920..73088443e 100644 --- a/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form/form.txt +++ b/src/CommonForms/ирВыпускВариантаРасширение/Ext/Form/form.txt @@ -113,7 +113,7 @@ {0},7,1,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,1,0,2,0,1, {5,1cdb5be4-467e-46e9-bbd2-7273737aa3a8,1,1,1, -{7,5fa00200-ddab-4342-8365-78d70fd7fb80,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,04a2b476-2cf8-4e97-a155-b7b12fbb5242,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ОсновныеДействияФормыВыполнить", {1,"ОсновныеДействияФормыВыполнить", {1,1, @@ -140,7 +140,7 @@ {"en","Выполнить"}, {"uk","Выполнить"} },1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,5fa00200-ddab-4342-8365-78d70fd7fb80, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,04a2b476-2cf8-4e97-a155-b7b12fbb5242, {8,"Выполнить",0,1, {1,3, {"ru","Выполнить"}, @@ -151,7 +151,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,05f6383a-9185-41a7-bf4a-311aeaddfb1f,1,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,396b8d9b-2625-4cdb-874f-ba4b6fc289f5,1,0,0} }, {8,0,130,509,155,1, {0, @@ -927,7 +927,7 @@ {0} } } -},509,155,1,0,1,4,4,404,509,155,96}, +},509,155,1,0,1,4,4,408,509,155,96}, { {-1},12, {4, diff --git a/src/CommonForms/ирОтладкаВнешнихОбработокБСП/Ext/Form/Module.bsl b/src/CommonForms/ирОтладкаВнешнихОбработокБСП/Ext/Form/Module.bsl index c0eed6521..db2fe70d4 100644 --- a/src/CommonForms/ирОтладкаВнешнихОбработокБСП/Ext/Form/Module.bsl +++ b/src/CommonForms/ирОтладкаВнешнихОбработокБСП/Ext/Form/Module.bsl @@ -171,9 +171,9 @@ &НаКлиенте Процедура ОбновитьСписок(Команда = Неопределено) - КлючСтроки = ирОбщий.ТабличноеПолеКлючСтрокиЛкс(Элементы.Список); + КлючСтроки = ирКлиент.ТабличноеПолеКлючСтрокиЛкс(Элементы.Список); ОбновитьСписокНаСервере(); - ирОбщий.ТабличноеПолеВосстановитьТекущуюСтрокуЛкс(Элементы.Список, КлючСтроки, Список); + ирКлиент.ТабличноеПолеВосстановитьТекущуюСтрокуЛкс(Элементы.Список, КлючСтроки, Список); КонецПроцедуры @@ -272,7 +272,7 @@ &НаКлиенте Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры @@ -295,7 +295,7 @@ &НаКлиенте Процедура ОПодсистеме(Команда) - ирОбщий.ОткрытьСправкуПоПодсистемеЛкс(ЭтаФорма); + ирКлиент.ОткрытьСправкуПоПодсистемеЛкс(ЭтаФорма); КонецПроцедуры diff --git a/src/CommonModules/ирГлобальный/Ext/Module.bsl b/src/CommonModules/ирГлобальный/Ext/Module.bsl index b3f796b65..b002b1d40 100644 --- a/src/CommonModules/ирГлобальный/Ext/Module.bsl +++ b/src/CommonModules/ирГлобальный/Ext/Module.bsl @@ -26,7 +26,7 @@ Успех = ПодключитьВнешнююКомпоненту("Обработка.ирПлатформа.Макет.KeyboardHookWin" + Разрядность, "ПерехватКлавиатуры", ТипВнешнейКомпоненты.Native); // 0.03сек Если Не Успех Тогда #Если ТонкийКлиент Тогда - ирОбщий.ПослеУстановкиKeyboardHook(); + ирКлиент.ПослеУстановкиKeyboardHook(); #КонецЕсли КонецЕсли; Попытка @@ -251,13 +251,13 @@ Если ПередатьОбработку Тогда ПерехватКлавиатуры.ЗахватПервым = Ложь; // Используем не по назначению СобытиеОбработано = Ложь; - АктивнаяУправляемаяФорма = ирОбщий.АктивнаяУправляемаяФормаЛкс(); + АктивнаяУправляемаяФорма = ирКлиент.АктивнаяУправляемаяФормаЛкс(); Если АктивнаяУправляемаяФорма = Неопределено Тогда - ирОбщий.УдалитьСсылкиНаЗакрытыеФормыЛкс(); + ирКлиент.УдалитьСсылкиНаЗакрытыеФормыЛкс(); Для Каждого ПроверятьПолеHTML Из ирОбщий.ЗначенияВМассивЛкс(Ложь, Истина) Цикл - Для Каждого Форма Из ирКэш.ОткрытыеФормыЛкс() Цикл + Для Каждого Форма Из ирКэш.ОткрытыеФормыПодсистемыЛкс() Цикл СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(Форма); - Если ирОбщий.Форма_ВводДоступенЛкс(Форма, ПроверятьПолеHTML) Тогда + Если ирКлиент.Форма_ВводДоступенЛкс(Форма, ПроверятьПолеHTML) Тогда СобытиеОбработано = Истина; Если ирОбщий.ТекущееВремяВМиллисекундахЛкс() - СлужебныеДанные.ДатаОткрытия > 100 Тогда // https://www.hostedredmine.com/issues/892885 Если ирОбщий.МетодРеализованЛкс(Форма, "ВнешнееСобытие") Тогда @@ -281,19 +281,28 @@ КонецЕсли; КэшПоискаФормИзменен = Ложь; ВводДоступен = Ложь; - ПараметрыБыстрогоСозданияФормы = ирОбщий.ПараметрыБыстрогоСозданияФормыЛкс(); - Для Каждого ЭлементКэша Из КэшПоискаФорм Цикл - ПолноеИмяФормы = ЭлементКэша.Значение; - Попытка - Форма = ирОбщий.ПолучитьФормуЛкс(ПолноеИмяФормы, ПараметрыБыстрогоСозданияФормы); - ВводДоступен = Форма.ВводДоступен(); - Исключение - Продолжить; - КонецПопытки; - Если ВводДоступен Тогда + Для Каждого КлючИЗначение Из ирКэш.ОткрытыеФормыСсылокЛкс() Цикл + Форма = КлючИЗначение.Ключ; + ВводДоступен = ирКлиент.Форма_ВводДоступенЛкс(Форма); + Если ВводДоступен Тогда Прервать; КонецЕсли; КонецЦикла; + Если Не ВводДоступен Тогда + ПараметрыБыстрогоСозданияФормы = ирКлиент.ПараметрыБыстрогоСозданияФормыЛкс(); + Для Каждого ЭлементКэша Из КэшПоискаФорм Цикл + ПолноеИмяФормы = ЭлементКэша.Значение; + Попытка + Форма = ирКлиент.ПолучитьФормуЛкс(ПолноеИмяФормы, ПараметрыБыстрогоСозданияФормы); + ВводДоступен = Форма.ВводДоступен(); + Исключение + Продолжить; + КонецПопытки; + Если ВводДоступен Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; Если Не ВводДоступен Тогда ТаблицаТиповМетаобъектов = ирКэш.ТипыМетаОбъектов(, Ложь, Ложь); ВыбранныеТипыМетаданных = Новый Массив; @@ -319,12 +328,12 @@ СписокВыбораТипа = Новый СписокЗначений; СписокВыбораТипа.ЗагрузитьЗначения(ТаблицаТиповМетаобъектов.ВыгрузитьКолонку("Единственное")); Для Каждого ЭлементСписка Из СписокВыбораТипа Цикл - ЭлементСписка.Картинка = ирОбщий.КартинкаКорневогоТипаМДЛкс(ЭлементСписка.Значение); + ЭлементСписка.Картинка = ирКлиент.КартинкаКорневогоТипаМДЛкс(ЭлементСписка.Значение); КонецЦикла; СписокВыбораТипа.Вставить(0, "<Все>"); ВыбранныйЭлемент = СписокВыбораТипа.ВыбратьЭлемент("Выберите тип формы для ускорения ее поиска"); Если ВыбранныйЭлемент = Неопределено Тогда - Возврат; + //Возврат; КонецЕсли; СтрокаТипа = ТаблицаТиповМетаобъектов.Найти(ВыбранныйЭлемент.Значение, "Единственное"); Если СтрокаТипа <> Неопределено Тогда @@ -353,7 +362,7 @@ Продолжить; КонецЕсли; Попытка - Форма = ирОбщий.ПолучитьФормуЛкс(ПолноеИмяФормы, ПараметрыБыстрогоСозданияФормы); + Форма = ирКлиент.ПолучитьФормуЛкс(ПолноеИмяФормы, ПараметрыБыстрогоСозданияФормы); Исключение Продолжить; КонецПопытки; @@ -377,13 +386,15 @@ КонецЕсли; Если ВводДоступен Тогда СобытиеОбработано = Истина; - ирОбщий.СостояниеЛкс(); - ИндексФормыВКэше = КэшПоискаФорм.Индекс(ЭлементКэша); - Если ИндексФормыВКэше > 0 Тогда - КэшПоискаФорм.Сдвинуть(ЭлементКэша, -ИндексФормыВКэше); - КэшПоискаФормИзменен = Истина; + Если ЭлементКэша <> Неопределено Тогда + ирОбщий.СостояниеЛкс(); + ИндексФормыВКэше = КэшПоискаФорм.Индекс(ЭлементКэша); + Если ИндексФормыВКэше > 0 Тогда + КэшПоискаФорм.Сдвинуть(ЭлементКэша, -ИндексФормыВКэше); + КэшПоискаФормИзменен = Истина; + КонецЕсли; КонецЕсли; - ирОбщий.Форма_ВнешнееСобытиеЛкс(Форма, Источник, Событие, Данные, ВводДоступен); + ирКлиент.Форма_ВнешнееСобытиеЛкс(Форма, Источник, Событие, Данные, ВводДоступен); КонецЕсли; МаксЭлементовКэша = 1000; Пока КэшПоискаФорм.Количество() > МаксЭлементовКэша Цикл @@ -396,7 +407,7 @@ #КонецЕсли КонецЕсли; Если Не СобытиеОбработано Тогда - ирОбщий.Форма_ВнешнееСобытиеЛкс(, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(, Источник, Событие, Данные); КонецЕсли; КонецЕсли; //Сообщить(Данные); // Отладка @@ -418,7 +429,7 @@ МаркерОткрытьФорму = "ОткрытьФормуИР."; Если Найти(ПараметрЗапуска, МаркерОткрытьФорму) > 0 Тогда ИмяФормы = ирОбщий.СтрокаМеждуМаркерамиЛкс(ПараметрЗапуска, МаркерОткрытьФорму, ";"); - Форма = ирОбщий.ПолучитьФормуЛкс(ИмяФормы); + Форма = ирКлиент.ПолучитьФормуЛкс(ИмяФормы); Если Форма <> Неопределено Тогда Форма.Открыть(); КонецЕсли; @@ -449,7 +460,7 @@ //#КонецЕсли #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда Если ирОбщий.ВосстановитьЗначениеЛкс("ПроверятьПодпискиКонфигурации", Истина) <> Ложь Тогда - ирОбщий.ПроверитьПодпискиЛкс(); + ирКлиент.ПроверитьПодпискиЛкс(); КонецЕсли; #Если ТолстыйКлиентОбычноеПриложение Тогда Если Истина @@ -471,7 +482,7 @@ Процедура ГлобальныйОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры @@ -510,12 +521,12 @@ Если Параметры.Свойство("КоманднаяПанель") Тогда КоманднаяПанель = Параметры.КоманднаяПанель; КонецЕсли; - //ТекущаяФорма = ирОбщий.АктивнаяУправляемаяФормаЛкс(); + //ТекущаяФорма = ирКлиент.АктивнаяУправляемаяФормаЛкс(); Если ТекущаяФорма <> Неопределено Тогда Если КоманднаяПанель = Неопределено Тогда - ирОбщий.ОткрытьСтруктуруФормыЛкс(ТекущаяФорма); + ирКлиент.ОткрытьСтруктуруФормыЛкс(ТекущаяФорма); Иначе - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ТекущаяФорма, КоманднаяПанель); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ТекущаяФорма, КоманднаяПанель); КонецЕсли; КонецЕсли; @@ -524,7 +535,7 @@ Процедура ИсследоватьТекущийЭлементАктивнойФормыЛкс(Параметры) Экспорт ТекущаяФорма = Параметры.Форма; - ТекущийЭлемент = ирОбщий.ТекущийЭлементАктивнойФормыЛкс(ТекущаяФорма); + ТекущийЭлемент = ирКлиент.ТекущийЭлементАктивнойФормыЛкс(ТекущаяФорма); Если ТипЗнч(ТекущийЭлемент) = Тип("ТаблицаФормы") Тогда ТекущаяКолонка = ТекущийЭлемент.ТекущийЭлемент; ИначеЕсли ТипЗнч(ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда @@ -542,8 +553,8 @@ Процедура РедактироватьОбъектАктивнойФормыЛкс(Параметры) Экспорт - Форма = Неопределено; - Ссылка = ирОбщий.КлючОсновногоОбъектаУправляемойФормыЛкс(Форма); + Форма = Параметры.Форма; + Ссылка = ирКлиент.КлючОсновногоОбъектаФормыЛкс(Форма); Если Ссылка <> Неопределено Тогда КлючСтроки = Неопределено; ИмяПоляБД = ирОбщий.НайтиПутьКДаннымПоляТаблицыФормыЛкс(Ссылка, Форма.ТекущийЭлемент.Имя); @@ -569,7 +580,7 @@ //Если ПоляТаблицы.Найти(ИмяПоляБД, "Имя") = Неопределено Тогда // ИмяПоляБД = ""; //КонецЕсли; - ирОбщий.ОткрытьСсылкуВРедактореОбъектаБДЛкс(Ссылка,, ИмяТЧБД, ИмяПоляБД, КлючСтроки); + ирКлиент.ОткрытьСсылкуВРедактореОбъектаБДЛкс(Ссылка,, ИмяТЧБД, ИмяПоляБД, КлючСтроки); КонецЕсли; КонецПроцедуры @@ -577,9 +588,9 @@ Процедура КопироватьСсылкуАктивнойФормыЛкс(Параметры) Экспорт Форма = Неопределено; - Ссылка = ирОбщий.КлючОсновногоОбъектаУправляемойФормыЛкс(Форма); + Ссылка = ирКлиент.КлючОсновногоОбъектаФормыЛкс(Форма); Если Ссылка <> Неопределено Тогда - ирОбщий.БуферОбменаПриложения_УстановитьЗначениеЛкс(Ссылка); + ирКлиент.БуферОбменаПриложения_УстановитьЗначениеЛкс(Ссылка); КонецЕсли; КонецПроцедуры @@ -588,10 +599,10 @@ КлючТекущейСтроки = Неопределено; Форма = Параметры.Форма; - ирОбщий.КлючиСтрокБДИзТаблицыФормыЛкс(Форма, КлючТекущейСтроки); + ирКлиент.КлючиСтрокБДИзТаблицыФормыЛкс(Форма, КлючТекущейСтроки); Если КлючТекущейСтроки <> Неопределено Тогда ДанныеКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(Форма.ТекущийЭлемент); - ирОбщий.ОткрытьСсылкуВРедактореОбъектаБДЛкс(КлючТекущейСтроки,,, ДанныеКолонки); + ирКлиент.ОткрытьСсылкуВРедактореОбъектаБДЛкс(КлючТекущейСтроки,,, ДанныеКолонки); КонецЕсли; КонецПроцедуры @@ -599,9 +610,9 @@ Процедура РедактироватьОбъектТекущегоПоляАктивнойФормыЛкс(Параметры) Экспорт КлючТекущейСтроки = Неопределено; - ирОбщий.ЗначенияВыделенныхЯчеекТаблицыЛкс(Параметры.Форма, КлючТекущейСтроки); + ирКлиент.ЗначенияВыделенныхЯчеекТаблицыЛкс(Параметры.Форма, КлючТекущейСтроки); Если КлючТекущейСтроки <> Неопределено Тогда - ирОбщий.ОткрытьСсылкуВРедактореОбъектаБДЛкс(КлючТекущейСтроки); + ирКлиент.ОткрытьСсылкуВРедактореОбъектаБДЛкс(КлючТекущейСтроки); КонецЕсли; КонецПроцедуры @@ -609,9 +620,9 @@ Процедура ОткрытьОбъектТекущегоПоляАктивнойФормыЛкс(Параметры) Экспорт КлючТекущейСтроки = Неопределено; - Ссылки = ирОбщий.ЗначенияВыделенныхЯчеекТаблицыЛкс(Параметры.Форма, КлючТекущейСтроки); + Ссылки = ирКлиент.ЗначенияВыделенныхЯчеекТаблицыЛкс(Параметры.Форма, КлючТекущейСтроки); Если КлючТекущейСтроки <> Неопределено Тогда - ирОбщий.ОткрытьЗначениеЛкс(КлючТекущейСтроки); + ирКлиент.ОткрытьЗначениеЛкс(КлючТекущейСтроки); КонецЕсли; КонецПроцедуры @@ -620,12 +631,12 @@ КлючТекущейСтроки = Неопределено; ТаблицаФормыДинамическогоСписка = Неопределено; - Ссылки = ирОбщий.КлючиСтрокБДИзТаблицыФормыЛкс(Параметры.Форма, КлючТекущейСтроки, ТаблицаФормыДинамическогоСписка); + Ссылки = ирКлиент.КлючиСтрокБДИзТаблицыФормыЛкс(Параметры.Форма, КлючТекущейСтроки, ТаблицаФормыДинамическогоСписка); Если Ссылки.Количество() > 0 Тогда Если ТаблицаФормыДинамическогоСписка <> Неопределено Тогда - ирОбщий.ОткрытьПодборИОбработкуОбъектовИзДинамическогоСпискаЛкс(ТаблицаФормыДинамическогоСписка,, Ссылки); + ирКлиент.ОткрытьПодборИОбработкуОбъектовИзДинамическогоСпискаЛкс(ТаблицаФормыДинамическогоСписка,, Ссылки); Иначе - ирОбщий.ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(Ссылки,,,, КлючТекущейСтроки); + ирКлиент.ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(Ссылки,,,, КлючТекущейСтроки); КонецЕсли; КонецЕсли; @@ -634,76 +645,76 @@ Процедура ОбработатьОбъектыТекущегоПоляАктивнойФормыЛкс(Параметры) Экспорт КлючТекущейСтроки = Неопределено; - Ссылки = ирОбщий.ЗначенияВыделенныхЯчеекТаблицыЛкс(Параметры.Форма, КлючТекущейСтроки); + Ссылки = ирКлиент.ЗначенияВыделенныхЯчеекТаблицыЛкс(Параметры.Форма, КлючТекущейСтроки); Если Ссылки.Количество() > 0 Тогда - ирОбщий.ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(Ссылки,,,, КлючТекущейСтроки); + ирКлиент.ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(Ссылки,,,, КлючТекущейСтроки); КонецЕсли; КонецПроцедуры Процедура ОткрытьТаблицуАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.ОткрытьТаблицуЗначенийИзАктивнойУправляемойФормыЛкс(Параметры.Форма); + ирКлиент.ОткрытьТаблицуЗначенийИзАктивнойУправляемойФормыЛкс(Параметры.Форма); КонецПроцедуры Процедура НастроитьКолонкиТаблицыАктивнойФормыЛкс(Параметры) Экспорт Форма = Параметры.Форма; - ТекущийЭлемент = ирОбщий.ТекущийЭлементАктивнойФормыЛкс(Форма); + ТекущийЭлемент = ирКлиент.ТекущийЭлементАктивнойФормыЛкс(Форма); Если Истина И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") Тогда Возврат; КонецЕсли; - ирОбщий.ОткрытьНастройкуКолонокТабличногоПоляЛкс(Форма, ТекущийЭлемент); + ирКлиент.ОткрытьНастройкуКолонокТабличногоПоляЛкс(Форма, ТекущийЭлемент); КонецПроцедуры Процедура ОткрытьТабличныйДокументАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.ОткрытьТабличныйДокументИзАктивнойФормыЛкс(Параметры.Форма); + ирКлиент.ОткрытьТабличныйДокументИзАктивнойФормыЛкс(Параметры.Форма); КонецПроцедуры Процедура СравнитьТаблицуАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.ЗапомнитьСодержимоеЭлементаАктивнойФормыДляСравненияЛкс(Параметры.Форма); + ирКлиент.ЗапомнитьСодержимоеЭлементаАктивнойФормыДляСравненияЛкс(Параметры.Форма); КонецПроцедуры Процедура ОткрытьРазличныеЗначенияКолонкиАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.ОткрытьРазличныеЗначенияКолонкиАктивнойУправляемойФормыЛкс(Параметры.Форма); + ирКлиент.ОткрытьРазличныеЗначенияКолонкиАктивнойУправляемойФормыЛкс(Параметры.Форма); КонецПроцедуры Процедура УстановитьЗначениеВКолонкеАктивнойФормыЛкс(Параметры) Экспорт Форма = Параметры.Форма; - ТекущийЭлемент = ирОбщий.ТекущийЭлементАктивнойФормыЛкс(Форма); + ТекущийЭлемент = ирКлиент.ТекущийЭлементАктивнойФормыЛкс(Форма); Если Истина И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") Тогда Возврат; КонецЕсли; - ирОбщий.ОткрытьМенеджерТабличногоПоляЛкс(ТекущийЭлемент, Форма, "Обработка"); + ирКлиент.ОткрытьМенеджерТабличногоПоляЛкс(ТекущийЭлемент, Форма, "Обработка"); КонецПроцедуры Процедура ЗагрузитьДанныеВТабличноеПолеАктивнойФормыЛкс(Параметры) Экспорт Форма = Параметры.Форма; - ТабличноеПоле = ирОбщий.ТекущийЭлементАктивнойФормыЛкс(Форма); - ирОбщий.ЗагрузитьСтрокиВТабличноеПолеЛкс(Форма, ТабличноеПоле,,,, Форма); + ТабличноеПоле = ирКлиент.ТекущийЭлементАктивнойФормыЛкс(Форма); + ирКлиент.ЗагрузитьСтрокиВТабличноеПолеЛкс(Форма, ТабличноеПоле,,,, Форма); КонецПроцедуры Процедура ОтладитьКомпоновкуДанныхАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.ОтладитьКомпоновкуДанныхАктивнойУправляемойФормыЛкс(Параметры.Форма); + ирКлиент.ОтладитьКомпоновкуДанныхАктивнойУправляемойФормыЛкс(Параметры.Форма); КонецПроцедуры @@ -715,70 +726,70 @@ Процедура РедактироватьАктивныйСписокЗначенийЛкс(Параметры) Экспорт - ирОбщий.РедактироватьАктивныйСписокЗначенийУправляемыйЛкс(Параметры.Форма); + ирКлиент.РедактироватьАктивныйСписокЗначенийУправляемыйЛкс(Параметры.Форма); КонецПроцедуры Процедура НастроитьДинамическийСписокАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.НастроитьДинамическийСписокАктивнойУправляемойФормыЛкс(Параметры.Форма); + ирКлиент.НастроитьДинамическийСписокАктивнойУправляемойФормыЛкс(Параметры.Форма); КонецПроцедуры Процедура ОткрытьДинамическийСписокАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.ОткрытьДинамическийСписокАктивнойУправляемойФормыЛкс(Параметры.Форма); + ирКлиент.ОткрытьДинамическийСписокАктивнойУправляемойФормыЛкс(Параметры.Форма); КонецПроцедуры Процедура НайтиВыбратьСсылкуВДинамическомСпискеАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.НайтиВыбратьСсылкуВДинамическомСпискеЛкс(Параметры.Форма); + ирКлиент.НайтиВыбратьСсылкуВДинамическомСпискеЛкс(Параметры.Форма); КонецПроцедуры Процедура ОткрытьМенеджерТабличногоПоляАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.ОткрытьМенеджерТабличногоПоляЛкс(, Параметры.Форма); + ирКлиент.ОткрытьМенеджерТабличногоПоляЛкс(, Параметры.Форма); КонецПроцедуры Процедура СообщитьКоличествоСтрокАктивнойТаблицыЛкс(Параметры) Экспорт - ирОбщий.ТабличноеПолеИлиТаблицаФормы_СколькоСтрокЛкс(Параметры.Форма.ТекущийЭлемент); + ирКлиент.ТабличноеПолеИлиТаблицаФормы_СколькоСтрокЛкс(Параметры.Форма.ТекущийЭлемент); КонецПроцедуры Процедура СравнитьСтрокиАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.ТабличноеПолеИлиТаблицаФормы_СравнитьСтрокиЛкс(Параметры.Форма, Параметры.Форма.ТекущийЭлемент); + ирКлиент.ТабличноеПолеИлиТаблицаФормы_СравнитьСтрокиЛкс(Параметры.Форма, Параметры.Форма.ТекущийЭлемент); КонецПроцедуры Процедура ВставитьСкопированнуюСсылкуАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.БуферОбмена_ВставитьЛкс(Параметры.Форма); + ирКлиент.БуферОбмена_ВставитьЛкс(Параметры.Форма); КонецПроцедуры Процедура НайтиСкопированнуюСсылкуВТаблицеАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.НайтиСсылкуИзБуфераВТаблицеФормыЛкс(Параметры.Форма); + ирКлиент.НайтиСсылкуИзБуфераВТаблицеФормыЛкс(Параметры.Форма); КонецПроцедуры Процедура КопироватьСсылкуАктивнойСтрокиАктивнойФормыЛкс(Параметры) Экспорт - ирОбщий.КопироватьСсылкуАктивнойСтрокиФормыЛкс(Параметры.Форма); + ирКлиент.КопироватьСсылкуАктивнойСтрокиФормыЛкс(Параметры.Форма); КонецПроцедуры Процедура СравнитьСкопированнуюСсылкуСЯчейкойАктивнойФормыЛкс(Параметры) Экспорт - Ссылки = ирОбщий.ЗначенияВыделенныхЯчеекТаблицыЛкс(Параметры.Форма); + Ссылки = ирКлиент.ЗначенияВыделенныхЯчеекТаблицыЛкс(Параметры.Форма); Если Ссылки <> Неопределено Тогда - Значение = ирОбщий.ЗначениеИзБуфераОбменаЛкс(); - ирОбщий.Сравнить2ЗначенияВФормеЛкс(Значение, Ссылки[0]); + Значение = ирКлиент.ЗначениеИзБуфераОбменаЛкс(); + ирКлиент.Сравнить2ЗначенияВФормеЛкс(Значение, Ссылки[0]); КонецЕсли; КонецПроцедуры @@ -786,20 +797,20 @@ Процедура СравнитьСкопированнуюСсылкуСКлючомСтрокиАктивнойФормыЛкс(Параметры) Экспорт КлючТекущейСтроки = Неопределено; - ирОбщий.КлючиСтрокБДИзТаблицыФормыЛкс(Параметры.Форма, КлючТекущейСтроки); + ирКлиент.КлючиСтрокБДИзТаблицыФормыЛкс(Параметры.Форма, КлючТекущейСтроки); Если КлючТекущейСтроки <> Неопределено Тогда - Значение = ирОбщий.ЗначениеИзБуфераОбменаЛкс(); - ирОбщий.Сравнить2ЗначенияВФормеЛкс(Значение, КлючТекущейСтроки); + Значение = ирКлиент.ЗначениеИзБуфераОбменаЛкс(); + ирКлиент.Сравнить2ЗначенияВФормеЛкс(Значение, КлючТекущейСтроки); КонецЕсли; КонецПроцедуры Процедура СравнитьСкопированнуюСсылкуСАктивнойФормойЛкс(Параметры) Экспорт - КлючОсновногоОбъекта = ирОбщий.КлючОсновногоОбъектаУправляемойФормыЛкс(Параметры.Форма); + КлючОсновногоОбъекта = ирКлиент.КлючОсновногоОбъектаФормыЛкс(Параметры.Форма); Если КлючОсновногоОбъекта <> Неопределено Тогда - Значение = ирОбщий.ЗначениеИзБуфераОбменаЛкс(); - ирОбщий.Сравнить2ЗначенияВФормеЛкс(Значение, КлючОсновногоОбъекта); + Значение = ирКлиент.ЗначениеИзБуфераОбменаЛкс(); + ирКлиент.Сравнить2ЗначенияВФормеЛкс(Значение, КлючОсновногоОбъекта); КонецЕсли; КонецПроцедуры @@ -807,8 +818,8 @@ Процедура ОткрытьТекстАктивнойФормыЛкс(Параметры) Экспорт АктивнаяФорма = Параметры.Форма; - Текст = ирОбщий.Форма_ЗначениеТекущегоПоляЛкс(АктивнаяФорма); - ирОбщий.ОткрытьТекстЛкс(Текст,, "",, АктивнаяФорма.ТекущийЭлемент); + Текст = ирКлиент.Форма_ЗначениеТекущегоПоляЛкс(АктивнаяФорма); + ирКлиент.ОткрытьТекстЛкс(Текст,, "",, АктивнаяФорма.ТекущийЭлемент); КонецПроцедуры @@ -817,19 +828,80 @@ // 8мс Процедура ВосстановитьФокусВводаГлЛкс() Экспорт - ирОбщий.ВосстановитьФокусВводаОткрытиемПустышкиЛкс(); + ирКлиент.ВосстановитьФокусВводаОткрытиемПустышкиЛкс(); КонецПроцедуры // Антибаг платформы https://www.hostedredmine.com/issues/926161 Процедура АктивироватьАктивнуюФормуЛкс() Экспорт - АктивнаяФорма = ирОбщий.АктивнаяФормаЛкс(); + АктивнаяФорма = ирКлиент.АктивнаяФормаЛкс(); Если АктивнаяФорма = Неопределено Тогда Возврат; КонецЕсли; - ирОбщий.ВосстановитьФокусВводаОткрытиемПустышкиЛкс(); - ирОбщий.Форма_АктивироватьОткрытьЛкс(АктивнаяФорма); + ирКлиент.ВосстановитьФокусВводаОткрытиемПустышкиЛкс(); + ирКлиент.Форма_АктивироватьОткрытьЛкс(АктивнаяФорма); + +КонецПроцедуры + +Процедура ПроверитьФормыСсылокЛкс() Экспорт + ОткрытыеФормыСсылок = ирКэш.ОткрытыеФормыСсылокЛкс(); + #Если Сервер И Не Сервер Тогда + ОткрытыеФормыСсылок = Новый Соответствие; + #КонецЕсли + МинДлительность = ирКлиент.МинДлительностьАктивностиФормыСсылкиЛкс(); + КлючиУдалить = Новый Массив; + ТекущаяДата = ТекущаяДата(); + //ИсторияПлатформыИзменена = Ложь; + Для Каждого КлючИЗначение Из ОткрытыеФормыСсылок Цикл + ФормаСсылки = КлючИЗначение.Ключ; + ПараметрыСлежения = КлючИЗначение.Значение; + Если Истина + И ТекущаяДата - ПараметрыСлежения.МоментОткрытия >= МинДлительность + И ирКлиент.Форма_ВводДоступенЛкс(ФормаСсылки) + Тогда + Ссылка = ирКлиент.КлючОсновногоОбъектаФормыЛкс(ФормаСсылки); + Если ЗначениеЗаполнено(Ссылка) Тогда + Если Ложь + Или Не ЗначениеЗаполнено(ПараметрыСлежения.Ссылка) // Записан новый объект + Или ПараметрыСлежения.Ссылка = Ссылка И Не ПараметрыСлежения.ДобавленаВИсторию + Тогда + ПараметрыСлежения.Ссылка = Ссылка; + ПараметрыСлежения.ДобавленаВИсторию = Истина; + ПараметрыСлежения.МоментОткрытия = ТекущаяДата; + ИсторияПлатформыИзменена = Не ирКэш.ЛиСеансТолстогоКлиентаУПЛкс(); + ирКлиент.ДобавитьСсылкуВИсториюРаботыЛкс(Ссылка, ИсторияПлатформыИзменена); + ИначеЕсли ПараметрыСлежения.Ссылка <> Ссылка Тогда + // Отслеживание аналогов редактора объекта БД + ирКлиент.НачатьОтслеживаниеФормыСсылкиЛкс(ФормаСсылки); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Не ФормаСсылки.Открыта() Тогда + // Удерживаем ссылки пока формы видимы + КлючиУдалить.Добавить(КлючИЗначение.Ключ); + КонецЕсли; + КонецЦикла; + Для Каждого Ключ Из КлючиУдалить Цикл + ОткрытыеФормыСсылок.Удалить(Ключ); + КонецЦикла; + АктивнаяФорма = ирКлиент.АктивнаяУправляемаяФормаЛкс(); + Если АктивнаяФорма <> Неопределено Тогда + Ссылка = ирКлиент.КлючОсновногоОбъектаФормыЛкс(АктивнаяФорма); + Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Ссылка) Тогда + ирКлиент.НачатьОтслеживаниеФормыСсылкиЛкс(АктивнаяФорма); + КонецЕсли; + КонецЕсли; + Если Ложь + Или ОткрытыеФормыСсылок.Количество() > 0 + Или ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() + Тогда + ирКлиент.ПодключитьПроверкуФормСсылокЛкс(); + КонецЕсли; + //Если ИсторияПлатформыИзменена И ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда + // // При первом вызове теряется накопленная история https://www.hostedredmine.com/issues/956694 + // ОбновитьИнтерфейс(); + //КонецЕсли; КонецПроцедуры diff --git a/src/CommonModules/ирПривилегированный.xml b/src/CommonModules/ирКлиент.xml similarity index 71% rename from src/CommonModules/ирПривилегированный.xml rename to src/CommonModules/ирКлиент.xml index b4a10d9a2..f5422af30 100644 --- a/src/CommonModules/ирПривилегированный.xml +++ b/src/CommonModules/ирКлиент.xml @@ -1,30 +1,30 @@  - + - ирПривилегированный + ирКлиент ru - Привилегированный + Клиент (ИР) en - Привилегированный + Общий (ИР) uk - Привилегированный + Общий (ИР) false - false - true + true + false false - false - true - true + true + false + false DontUse diff --git a/src/CommonModules/ирКлиент/Ext/Module.bsl b/src/CommonModules/ирКлиент/Ext/Module.bsl new file mode 100644 index 000000000..b9bcaec37 --- /dev/null +++ b/src/CommonModules/ирКлиент/Ext/Module.bsl @@ -0,0 +1,18213 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Инструменты разработчика Tormozit" +// Авторское право (с) 2007-2023, Старых С.А. +// Лицензия MIT +// Разрешается повторное распространение и использование как в виде исходника так и в двоичной форме, +// с модификациями или без, при соблюдении следующих условий: +// - При повторном распространении исходного кода должно оставаться указанное выше уведомление об авторском +// праве, этот список условий и нижеследующий отказ от гарантий. +// - При повторном распространении двоичного кода должно воспроизводиться указанное выше уведомление об +// авторском праве, этот список условий и нижеследующий отказ от гарантий в документации и/или в других +// материалах, поставляемых при распространении. +// +// ЭТО ПРОГРАММА ПРЕДОСТАВЛЕНА БЕСПЛАТНО ДЕРЖАТЕЛЯМИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИМИ СТОРОНАМИ "КАК ОНА ЕСТЬ" +// БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, +// ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. НИ В КОЕМ СЛУЧАЕ, +// ЕСЛИ НЕ ТРЕБУЕТСЯ СООТВЕТСТВУЮЩИМ ЗАКОНОМ, ИЛИ НЕ УСТАНОВЛЕНО В УСТНОЙ ФОРМЕ, НИ ОДИН ДЕРЖАТЕЛЬ АВТОРСКИХ +// ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО +// РАЗРЕШЕНО ВЫШЕ, НЕ ОТВЕТСТВЕННЫ ПЕРЕД ВАМИ ЗА УБЫТКИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ ИЛИ +// ПОСЛЕДОВАВШИЕ УБЫТКИ, ПРОИСТЕКАЮЩИЕ ИЗ ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, +// НО НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ, ИЛИ ДАННЫМИ, СТАВШИМИ НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ ПРИНЕСЕННЫМИ ИЗ-ЗА +// ВАС ИЛИ ТРЕТЬИХ ЛИЦ, ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ), ДАЖЕ ЕСЛИ ТАКОЙ +// ДЕРЖАТЕЛЬ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ. + +//ирПортативный Перем ирПортативный Экспорт; +//ирПортативный Перем ирОбщий Экспорт; +//ирПортативный Перем ирСервер Экспорт; +//ирПортативный Перем ирКэш Экспорт; +//ирПортативный Перем ирКлиент Экспорт; + +#Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда + +Процедура ИзменитьОтборКлиентаПоМетаданнымЛкс(ТабличноеПоле, Знач ИмяКолонкиСреднегоИмениМД = "Метаданные", ЭтоКолонкаПолногоИмениМД = Ложь) Экспорт + + лСтруктураПараметров = Новый Структура; + лСтруктураПараметров.Вставить("ОтображатьСсылочныеОбъекты", Истина); + лСтруктураПараметров.Вставить("ОтображатьВнешниеИсточникиДанных", Истина); + лСтруктураПараметров.Вставить("ОтображатьРегистры", Истина); + лСтруктураПараметров.Вставить("ОтображатьПерерасчеты", Истина); + лСтруктураПараметров.Вставить("ОтображатьПеречисления", Истина); + лСтруктураПараметров.Вставить("ОтображатьТабличныеЧасти", Истина); + лСтруктураПараметров.Вставить("ОтображатьКонстанты", Истина); + лСтруктураПараметров.Вставить("ОтображатьВыборочныеТаблицы", Истина); + лСтруктураПараметров.Вставить("ОтображатьРегламентныеЗадания", Истина); + лСтруктураПараметров.Вставить("ОтображатьОтчеты", Истина); + лСтруктураПараметров.Вставить("ОтображатьОбработки", Истина); + лСтруктураПараметров.Вставить("ОтображатьПоследовательности", Истина); + лСтруктураПараметров.Вставить("МножественныйВыбор", Истина); + лДоступныеОбъекты = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле); + лДоступныеОбъекты.Свернуть(ИмяКолонкиСреднегоИмениМД); + лДоступныеОбъекты = лДоступныеОбъекты.ВыгрузитьКолонку(ИмяКолонкиСреднегоИмениМД); + Если ЭтоКолонкаПолногоИмениМД Тогда + ДоступныеОбъекты = Новый Массив; + Для Каждого ПолноеИмяМД Из лДоступныеОбъекты Цикл + СреднееИмяМД = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД,, Ложь); + ДоступныеОбъекты.Добавить(СреднееИмяМД); + КонецЦикла; + Иначе + //лСтруктураПараметров.Вставить("ОтображатьВиртуальныеТаблицы", Истина); + //лСтруктураПараметров.Вставить("ОтображатьТаблицыИзменений", Истина); + ДоступныеОбъекты = лДоступныеОбъекты; + КонецЕсли; + ЭлементОтбора = ТабличноеПоле.ОтборСтрок[ИмяКолонкиСреднегоИмениМД]; + Если Истина + И ЭлементОтбора.Использование + И ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке + Тогда + лНачальноеЗначениеВыбора = ЭлементОтбора.Значение.ВыгрузитьЗначения(); + Если ЭтоКолонкаПолногоИмениМД Тогда + НачальноеЗначениеВыбора = Новый Массив; + Для Каждого ПолноеИмяМД Из лНачальноеЗначениеВыбора Цикл + СреднееИмяМД = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД,, Ложь); + НачальноеЗначениеВыбора.Добавить(СреднееИмяМД); + КонецЦикла; + Иначе + НачальноеЗначениеВыбора = лНачальноеЗначениеВыбора; + КонецЕсли; + Иначе + НачальноеЗначениеВыбора = ДоступныеОбъекты; + КонецЕсли; + мПлатформа = ирКэш.Получить(); + Форма = мПлатформа.ПолучитьФорму("ВыборОбъектаМетаданных"); + лСтруктураПараметров.Вставить("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); + лСтруктураПараметров.Вставить("ДоступныеОбъекты", ДоступныеОбъекты); + Форма.НачальноеЗначениеВыбора = лСтруктураПараметров; + ЗначениеВыбора = Форма.ОткрытьМодально(); + Если ЗначениеВыбора <> Неопределено Тогда + Если ЭтоКолонкаПолногоИмениМД Тогда + ТаблицаВсехТаблицБД = ирКэш.ТаблицаВсехТаблицБДЛкс(); + МассивИменМД = Новый Массив; + Для Каждого СреднееИмяМД Из ЗначениеВыбора Цикл + СтрокаОписанияТаблицы = ТаблицаВсехТаблицБД.Найти(СреднееИмяМД, "ПолноеИмя"); + Если СтрокаОписанияТаблицы <> Неопределено Тогда + МассивИменМД.Добавить(СтрокаОписанияТаблицы.ПолноеИмяМД); + Иначе + МассивИменМД.Добавить(СреднееИмяМД); + КонецЕсли; + КонецЦикла; + Иначе + МассивИменМД = ЗначениеВыбора; + КонецЕсли; + СписокЗначений = Новый СписокЗначений; + СписокЗначений.ЗагрузитьЗначения(МассивИменМД); + ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке; + ЭлементОтбора.Значение = СписокЗначений; + ЭлементОтбора.Использование = Истина; + КонецЕсли; + +КонецПроцедуры + +Процедура ОткрытьДиалогЗаменыИдентификаторовОбъектовЛкс(Знач Объекты) Экспорт + + ФормаОбработки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирПоискДублейИЗаменаСсылок.Форма"); + Дерево = Новый ДеревоЗначений; + Дерево.Колонки.Добавить("Объект"); + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Объекты.Количество(), "Создание дублей объектов"); + НачатьТранзакцию(); + Попытка + Для Каждого Объект Из Объекты Цикл + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + КопияОбъекта = Объект.Ссылка.ПолучитьОбъект(); + ирОбщий.ЗаменитьИдентификаторОбъектаЛкс(КопияОбъекта); + Попытка + КопияОбъекта.ОбменДанными.Загрузка = Истина; + Исключение + ирОбщий.СообщитьЛкс("Для узлов планов обмена групповая замена внутренних идентификаторов не поддерживается"); + Возврат; + КонецПопытки; + КопияОбъекта.Записать(); + СтрокаГруппы = Дерево.Строки.Добавить(); + СтрокаЭлемента = СтрокаГруппы.Строки.Добавить(); + СтрокаЭлемента[0] = КопияОбъекта.Ссылка; + СтрокаЭлемента = СтрокаГруппы.Строки.Добавить(); + СтрокаЭлемента[0] = Объект; + КонецЦикла; + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + ЗафиксироватьТранзакцию(); + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); + ФормаОбработки.ОткрытьДляЗаменыПоДеревуСсылок(Дерево,, Ложь); + ФормаОбработки.ОтключатьКонтрольЗаписи = Истина; + ФормаОбработки.РазрешитьУдалениеСНарушениемСсылочнойЦелостности = Ложь; + +КонецПроцедуры // ПередОткрытием() + +// Оформляет ячейку табличного поля, допускающую значения, не имеющие стандартного отображения в платформе и хранимые отдельно. +// Иными словам колонка отображает данные, хранимые отдельно. +// +// Параметры: +// ОформлениеЯчейки - ОформлениеЯчейки +// Значение - Произвольный - значение для отображения. +// +Процедура ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеЯчейки, Знач Значение = Неопределено, КолонкаТабличногоПоля = Неопределено, ВыводитьПиктограммуТипа = Истина) Экспорт + + Если Значение = Неопределено Тогда + Значение = ОформлениеЯчейки.Значение; + КонецЕсли; + Если ВыводитьПиктограммуТипа Тогда + ТипЗначения = ТипЗнч(Значение); + Если Истина + И ТипЗначения = Тип("Булево") + И ОформлениеЯчейки.ОтображатьФлажок + Тогда + // + Иначе + КартинкаТипа = КартинкаТипаЛкс(ТипЗначения); + Если КартинкаТипа <> Неопределено Тогда + ОформлениеЯчейки.УстановитьКартинку(КартинкаТипа); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + РасширенноеПредставление = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(Значение, КолонкаТабличногоПоля); + Если Ложь + Или ОформлениеЯчейки.Текст = РасширенноеПредставление + Тогда + Возврат; + КонецЕсли; + //ОформлениеЯчейки.ТолькоПросмотр = Истина; + //ОформлениеЯчейки.ЦветФона = ирОбщий.ПолучитьЦветСтиляЛкс("ирЦветФонаРасширенногоПредставленияЗначения"); + ОформлениеЯчейки.УстановитьТекст(РасширенноеПредставление); + +КонецПроцедуры + +// Находит файлы в иерархии заданного каталога локальной файловой системы. +// +// Параметры: +// Путь - Строка; +// Маска - Строка. +// +// Возвращаемое значение: +// Массив - элементы типа Файл. +// +Функция НайтиФайлыВИерархииЛкс(Путь, Маска) Экспорт + + НайденныеКаталоги = НайтиФайлы(Путь, "*.*"); + МассивРезультатов = Новый Массив; + Для каждого НайденныйФайл Из НайденныеКаталоги Цикл + Если НайденныйФайл.ЭтоКаталог() Тогда + МассивРезультатов.Добавить(НайтиФайлыВИерархииЛкс(НайденныйФайл.ПолноеИмя, Маска)); + КонецЕсли; + КонецЦикла; + МассивРезультатов.Добавить(НайтиФайлы(Путь, Маска)); + Результат = Новый Массив; + Для Каждого ЭлементРезультат Из МассивРезультатов Цикл + Для Каждого Файл Из ЭлементРезультат Цикл + Результат.Добавить(Файл); + КонецЦикла; + КонецЦикла; + Возврат Результат; + +КонецФункции + +// Проверяет, является ли тип типом элемента формы. +// +// Параметры: +// пТип - Тип - проверяемый тип. +// +// Возвращаемое значение: +// Истина - тип элемента формы подтвержден; +// Ложь - тип элемента формы не подтвержден. +// +Функция ЛиТипЭлементаФормыЛкс(пТип) Экспорт + + Если Ложь + ИЛИ пТип = Тип("Индикатор") + ИЛИ пТип = Тип("Кнопка") + ИЛИ пТип = Тип("КоманднаяПанель") + ИЛИ пТип = Тип("Надпись") + ИЛИ пТип = Тип("Панель") + ИЛИ пТип = Тип("Переключатель") + ИЛИ пТип = Тип("ПолеВвода") + ИЛИ пТип = Тип("ПолеВыбора") + ИЛИ пТип = Тип("ПолеСписка") + ИЛИ пТип = Тип("ПолеТекстовогоДокумента") + ИЛИ пТип = Тип("ПолеТабличногоДокумента") + ИЛИ пТип = Тип("ПолосаРегулирования") + ИЛИ пТип = Тип("ТабличноеПоле") + ИЛИ пТип = Тип("РамкаГруппы") + ИЛИ пТип = Тип("Флажок") + Тогда + Возврат Истина; + КонецЕсли; + Возврат Ложь; + +КонецФункции // ЛиТипЭлементаФормыЛкс() + +// Сообщает об ошибке в тексте запроса и устанавливает выделение на ошибочную строку, если это возможно. +// +// Параметры: +// *ПолеТекста - ПолеТекста, *Неопределено; +// *СтартоваяСтрока - Число, *0 - стартовое смещение строки; +// *СтартоваяКолонка - Число, *0 - стартовое смещение колонки; +// *ЯзыкПрограммы - Число, *0 - признак обработки ошибки при установке текста запроса; +// *ЛиМодально - Булево, *Ложь - модальный режим формы - будет использовано Предупреждение() вместо ирОбщий.СообщитьЛкс(). +// *ИнформацияОбОшибке - ИнформацияОбОшибке, *Неопределено; +// *ИмяМодуля - Строка, *Неопределено - имя модуля в котором произошла ошибка. +// +// Возвращаемое значение: +// Строка - истинное описание ошибки. +// +Функция ПоказатьОшибкуВТекстеПрограммыЛкс(Знач ПолеТекста = Неопределено, + СтартоваяСтрока = 0, СтартоваяКолонка = 0, ЯзыкПрограммы = 0, ЛиМодально = Ложь, ИнформацияОбОшибке = Неопределено, + ИмяМодуля = Неопределено, ПредставлениеКонтекста = "", ЭтаФорма = Неопределено) Экспорт + + ПолеТекста = ОболочкаПоляТекстаЛкс(ПолеТекста); + #Если Сервер И Не Сервер Тогда + ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + Если ЭтаФорма <> Неопределено Тогда + // Баг платформы. Зависает приложение, если пытаемся установить выделение на невидимой странице. + ЭтаФорма.ТекущийЭлемент = ПолеТекста.ЭлементФормы; + КонецЕсли; + НомерСтроки = 0; + Если ИмяМодуля <> Неопределено Тогда + Вступление = Символы.Таб; + Иначе + Вступление = ""; + КонецЕсли; + Если ИнформацияОбОшибке = Неопределено Тогда + ИнформацияОбОшибке = ИнформацияОбОшибке(); + КонецЕсли; + ОписаниеОшибки = ирОбщий.ПодробноеПредставлениеОшибкиЛкс(ИнформацияОбОшибке); + ирОбщий.ВОписанииОшибкиЕстьПередачаМутабельногоЗначенияЛкс(ОписаниеОшибки, Истина, ЛиМодально); + Если Истина + И ЯзыкПрограммы = 0 + И ИмяМодуля <> Неопределено + И ИнформацияОбОшибке.ИмяМодуля <> ИмяМодуля + Тогда + ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); + Возврат ОписаниеОшибки; + КонецЕсли; + Если ЯзыкПрограммы = 2 Тогда + Пока ИнформацияОбОшибке.Причина <> Неопределено Цикл + ИнформацияОбОшибке = ИнформацияОбОшибке.Причина; + КонецЦикла; + Выражение = ""; + Если Выражение = "" Тогда + Маркер = "Ошибка в выражении """; + Если Найти(НРег(ИнформацияОбОшибке.Описание), Нрег(Маркер)) = 1 Тогда + Выражение = Сред(ИнформацияОбОшибке.Описание, СтрДлина(Маркер) + 2, СтрДлина(ИнформацияОбОшибке.Описание) - СтрДлина(Маркер) - 3); + КонецЕсли; + КонецЕсли; + Если Выражение = "" Тогда + Маркер = "Поле не найдено """; + Если Найти(НРег(ИнформацияОбОшибке.Описание), Нрег(Маркер)) = 1 Тогда + МаркерНайден = Истина; + Выражение = Сред(ИнформацияОбОшибке.Описание, СтрДлина(Маркер) + 1, СтрДлина(ИнформацияОбОшибке.Описание) - СтрДлина(Маркер) - 1); + КонецЕсли; + КонецЕсли; + Если Выражение <> "" Тогда + ТекстПоля = ПолеТекста.ПолучитьТекст(); + ПозицияВыражения = Найти(ТекстПоля, Выражение); + Если ПозицияВыражения > 0 Тогда + ПолеТекста.УстановитьГраницыВыделения(ПозицияВыражения, ПозицияВыражения + СтрДлина(Выражение)); + Пустышка = 0; + НомерСтроки = 0; + ПолеТекста.ПолучитьГраницыВыделения(НомерСтроки, Пустышка, Пустышка, Пустышка); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Истина + И ИнформацияОбОшибке.Причина <> Неопределено + И ИнформацияОбОшибке.ИмяМодуля <> "" + И ИнформацияОбОшибке.ИмяМодуля <> ИмяМодуля + Тогда + ФигурноеОписаниеОшибки = ирОбщий.СтрокаМеждуМаркерамиЛкс(ИнформацияОбОшибке.Причина.Описание, "{", "}", Ложь); + Если Истина + И ФигурноеОписаниеОшибки <> Неопределено + //И ИнформацияОбОшибке.Причина.ИмяМодуля <> "" // В закомментированном виде в некоторых случаях неоправдано спускается до ошибки в запросе в модуле, а в раскомментированном ломает нахождение ошибки в строке алгоритма + Тогда + ИнформацияОбОшибке = ИнформацияОбОшибке.Причина; + КонецЕсли; + КонецЕсли; + Если Истина + И ЯзыкПрограммы = 0 + И ИнформацияОбОшибке.ИмяМодуля <> "" + И ИнформацияОбОшибке.ИмяМодуля <> ИмяМодуля + Тогда + ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); + Возврат ирОбщий.ПодробноеПредставлениеОшибкиЛкс(ИнформацияОбОшибке); + КонецЕсли; + МаксимальныйНомерСтроки = 100000; + Если ПолеТекста <> Неопределено Тогда + МаксимальныйНомерСтроки = ПолеТекста.КоличествоСтрок(); + КонецЕсли; + ФигурноеОписаниеОшибки = ирОбщий.СтрокаМеждуМаркерамиЛкс(ИнформацияОбОшибке.Описание, "{", "}", Ложь); + ОписаниеОшибки = ИнформацияОбОшибке.Описание; + Если НомерСтроки = 0 Тогда + НомерСтроки = Мин(ИнформацияОбОшибке.НомерСтроки + СтартоваяСтрока, МаксимальныйНомерСтроки); + Если ИнформацияОбОшибке.ИсходнаяСтрока = "" Тогда + СтрокаКоординатыОшибки = ирОбщий.СтрокаМеждуМаркерамиЛкс(ФигурноеОписаниеОшибки, "(", ")", Ложь); + Если СтрокаКоординатыОшибки <> Неопределено Тогда + НомерКолонки = 0; + МассивФрагментов = ирОбщий.СтрРазделитьЛкс(СтрокаКоординатыОшибки, ","); + СтрокаНомерСтроки = МассивФрагментов[0]; + Попытка + НомерСтроки = Число(СтрокаНомерСтроки); + Исключение + КонецПопытки; + НомерСтроки = Мин(НомерСтроки + СтартоваяСтрока, МаксимальныйНомерСтроки); + Если МассивФрагментов.Количество() > 1 Тогда + СтрокаНомерКолонки = МассивФрагментов[1]; + Попытка + НомерКолонки = Число(СтрокаНомерКолонки); + Исключение + КонецПопытки; + НомерКолонки = НомерКолонки + СтартоваяКолонка; + КонецЕсли; + Если НомерСтроки = 0 Тогда + НомерКолонки = 1; + НомерСтроки = 1; + КонецЕсли; + ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, ФигурноеОписаниеОшибки, "(" + НомерСтроки + "," + НомерКолонки + ")"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Истина + И ЯзыкПрограммы = 0 + И НомерСтроки <= 0 + Тогда + Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + ОписаниеОшибки = "Ошибка передачи переменной: " + ОписаниеОшибки; + Иначе + ОписаниеОшибки = "Ошибка без описания"; + КонецЕсли; + Иначе + ОписаниеОшибки = "Строка кода " + НомерСтроки + ": " + ОписаниеОшибки; + КонецЕсли; + Если ИнформацияОбОшибке.Причина <> Неопределено Тогда + ОписаниеОшибки = ОписаниеОшибки + ": " + ирОбщий.ПодробноеПредставлениеОшибкиЛкс(ИнформацияОбОшибке.Причина); + КонецЕсли; + ТекстСообщения = ""; + Если ПолеТекста <> Неопределено Тогда + Если НомерСтроки > 0 Тогда + ПолеТекста.ПоказатьОшибку(НомерСтроки, НомерКолонки); + КонецЕсли; + ТекстСообщения = ТекстСообщения + ирОбщий.ПредставлениеИзИдентификатораЛкс(ПолеТекста.ЭлементФормы.Имя) + ПредставлениеКонтекста; + ТекстСообщения = ТекстСообщения + ": " + ОписаниеОшибки; + ПолныйТекстСообщения = Вступление + ТекстСообщения; + ирОбщий.СообщитьЛкс(ПолныйТекстСообщения, СтатусСообщения.Важное); + Иначе + ПолныйТекстСообщения = Вступление + ТекстСообщения; + ирОбщий.СообщитьЛкс(ПолныйТекстСообщения, СтатусСообщения.Важное); + КонецЕсли; + Возврат ПолныйТекстСообщения; + +КонецФункции + +// Рассчитывает и устанавливает ширину колонок табличного документа. Ориентирована на обработку +// результата построителя отчета. +// +// Параметры: +// ТабличныйДокумент - ТабличныйДокумент; +// *ЛиМинимальный - Булево, *Ложь - признак установки необходимой ширины, иначе достаточной; +// *ЛиИгнорироватьОбразание - Булево, *Ложь - признак игнорирования ячеек с обрезанием; +// *ШиринаОбластиПолей - Число, *0 - ширина области полей (не показателей); +// *РассчитыватьШиринуКолонкиПоНазванию - Булево, *Истина - признак расчета ширины колонки по названию; +// *МинимальнаяШиринаКолонкиПоказатель - Число, *10 - минимальная ширина колонки показателя; +// *ПорогКоличестваЯчеекДляАнализа - Число, *100000 - пороговое количество ячеек для анализа (усечение по высоте). +// +Процедура УстановитьАвтоширинуКолонокТабличногоДокументаЛкс(ТабличныйДокумент, ЛиМинимальный = Ложь, + ЛиИгнорироватьОбрезание = Ложь, ШиринаОбластиПолей = 0, РассчитыватьШиринуКолонкиПоНазванию = Ложь, + МинимальнаяШиринаКолонкиПоказатель = 10, ПорогКоличестваЯчеекДляАнализа = 10000) Экспорт + + Перем МаксимальнаяШиринаКолонки; + Перем КонечнаяСтрока, НачальнаяСтрока, ТекущаяКолонка, ТекущаяСтрока, НачалоДанных; + Перем ОбластьШапки, ОбластьПодвала; + Перем ШиринаКолонки, ТекстЯчейки, НомерСтрокиТекста; + Перем КоличествоУровнейГруппировокСтрок, Отступ; + Перем ШириныКолонок; + + СтрокаСостояния = "Расчет ширины колонок табличного документа "; + КоличествоОбновленийСостояния = 10; + + // Ограничение максимальной ширины колонки + МаксимальнаяШиринаКолонки = 50; + + // Массив, в который будут помещаться ширины колонок + ШириныКолонок = Новый Массив; + + // Получим количество уровней группировок в отчете для учета автоматического отступа + КоличествоУровнейГруппировокСтрок = ТабличныйДокумент.КоличествоУровнейГруппировокСтрок(); + + // Инициализируем начальные строки + НачальнаяСтрока = 0; + НачалоДанных = 0; + + // Найдем в результирующем документе область шапки таблицы + ОбластьШапки = ТабличныйДокумент.Области.Найти("ШапкаТаблицы"); + + Если ТипЗнч(ОбластьШапки) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда + + // Из шапки таблицы получим начальную строку с которой будем рассчитывать ширины + НачальнаяСтрока = ОбластьШапки.Верх; + НачалоДанных = ОбластьШапки.Низ + 1; + + Иначе + + // Если область шапки таблицы не найдена, найдем область шапки строк + ОбластьШапки = ТабличныйДокумент.Области.Найти("ШапкаСтрок"); + + Если ТипЗнч(ОбластьШапки) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда + + // Из шапки таблицы получим начальную строку с которой будем рассчитывать ширины + НачальнаяСтрока = ОбластьШапки.Верх; + НачалоДанных = ОбластьШапки.Низ + 1; + + КонецЕсли; + + КонецЕсли; + + // Получим область подвала отчета и вычислим конечную строку расчета + ОбластьПодвала = ТабличныйДокумент.Области.Найти("Подвал"); + + Если ТипЗнч(ОбластьПодвала) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда + + // Область подвала найдена + КонечнаяСтрока = ОбластьПодвала.Верх - 1; + + Иначе + + // Область подвала не найдена + КонечнаяСтрока = ТабличныйДокумент.ВысотаТаблицы; + + КонецЕсли; + + СтарыйПрогресс = 0; + + КоличествоЯчеекПоказателейДляРасчета = (КонечнаяСтрока - НачальнаяСтрока) * (ТабличныйДокумент.ШиринаТаблицы - 1); + Если КоличествоЯчеекПоказателейДляРасчета > ПорогКоличестваЯчеекДляАнализа Тогда + КонечнаяСтрока = Мин(КонечнаяСтрока, ПорогКоличестваЯчеекДляАнализа / (ТабличныйДокумент.ШиринаТаблицы - 1)); + КонецЕсли; + + // Переберем все колонки отчета + Для ТекущаяКолонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл + ПрогрессКолонок = ТекущаяКолонка / ТабличныйДокумент.ШиринаТаблицы / КонечнаяСтрока; + АвтоОтступ = 0; + // Переберем строки, которые будут использованы для расчета ширин колонок + Для ТекущаяСтрока = НачальнаяСтрока По КонечнаяСтрока Цикл + + ОбработкаПрерыванияПользователя(); + Прогресс = КоличествоОбновленийСостояния * ПрогрессКолонок * ТекущаяСтрока; + Если Прогресс - СтарыйПрогресс >= 1 Тогда + СтарыйПрогресс = Прогресс; + ирОбщий.СостояниеЛкс(СтрокаСостояния + Цел(100 * ПрогрессКолонок * ТекущаяСтрока) + "%"); + КонецЕсли; + ШиринаКолонки = 0; + + // Получим область текущей ячейки + ОбластьЯчейки = ТабличныйДокумент.Область(ТекущаяСтрока, ТекущаяКолонка); + + Если ОбластьЯчейки.Лево <> ТекущаяКолонка Или ОбластьЯчейки.Верх <> ТекущаяСтрока Тогда + // Данная ячейка принадлежит объединенным ячейкам и не является начальной ячейкой + Продолжить; + КонецЕсли; + + // Данная ячейка обрезает текст + Если Истина + И ЛиИгнорироватьОбрезание + И ОбластьЯчейки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать + Тогда + Продолжить; + КонецЕсли; + + Если КоличествоУровнейГруппировокСтрок > 0 И ТекущаяСтрока = НачалоДанных Тогда + // Для первой строки с данными получим значение автоотступа + АвтоОтступ = ОбластьЯчейки.АвтоОтступ; + КонецЕсли; + + // Получим текст ячейки + ТекстЯчейки = ОбластьЯчейки.Текст; + + КоличествоСтрокВТекстеЯчейки = СтрЧислоСтрок(ТекстЯчейки); + ТекстЯчейкиТД = Новый ТекстовыйДокумент; + ТекстЯчейкиТД.УстановитьТекст(ТекстЯчейки); + + // Для каждой строки из текста ячейки рассчитаем количество символов в строке + Для НомерСтрокиТекста = 1 По КоличествоСтрокВТекстеЯчейки Цикл + ШиринаТекстаЯчейки = СтрДлина(ТекстЯчейкиТД.ПолучитьСтроку(НомерСтрокиТекста)); + Если Истина + И НЕ РассчитыватьШиринуКолонкиПоНазванию + И ТекущаяСтрока < НачалоДанных + И ШиринаТекстаЯчейки > 0 + Тогда + ШиринаТекстаЯчейки = МинимальнаяШиринаКолонкиПоказатель; + КонецЕсли; + // Если используется автоотступ, то прибавим к ширине ячейки его величину + Если АвтоОтступ <> Неопределено И АвтоОтступ > 0 Тогда + ШиринаТекстаЯчейки = ШиринаТекстаЯчейки + КоличествоУровнейГруппировокСтрок * АвтоОтступ; + КонецЕсли; + ШиринаКолонки = Макс(ШиринаКолонки, ШиринаТекстаЯчейки); + КонецЦикла; + + Если ШиринаКолонки > МаксимальнаяШиринаКолонки Тогда + // Ограничим ширину колонки + ШиринаКолонки = МаксимальнаяШиринаКолонки; + КонецЕсли; + + Если ШиринаКолонки <> 0 Тогда + // Ширина колонки рассчитана + + // Определим, сколько ячеек по ширине используется в области для текущей ячейки + КоличествоКолонок = ОбластьЯчейки.Право - ОбластьЯчейки.Лево; + + // Переберем все ячейки, расположенные в области + Для НомерКолонки = 0 По КоличествоКолонок Цикл + + Если ШириныКолонок.ВГраница() >= ТекущаяКолонка - 1 + НомерКолонки Тогда + + // В массиве ширин колонок уже был элемент для текущей колонки + Если ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Неопределено Тогда + + // Значение ширины колонки еще не было установлено + ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = ШиринаКолонки / (КоличествоКолонок + 1); + + Иначе + + // Значение ширины колонки уже было установлено + // Вычислим максимум ширины колонки + ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = + Макс(ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки], ШиринаКолонки / (КоличествоКолонок + 1)); + + КонецЕсли; + + Иначе + + // В массиве ширин колонок еще не было элемента для данной колонки + // Добавим элемент в массив ширин колонок + ШириныКолонок.Вставить(ТекущаяКолонка - 1 + НомерКолонки, ШиринаКолонки / (КоличествоКолонок + 1)); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; // Конец цикла перебора строк + + КонецЦикла; // Конец цикла перебора колонок + + // Переберем все элементы в массиве вычисленных ширин колонок + Для ТекущаяКолонка = 0 По ШириныКолонок.ВГраница() Цикл + + Если ШиринаОбластиПолей >= ТекущаяКолонка Тогда + УстановитьМинимальнуюШирину = Ложь; + Иначе + УстановитьМинимальнуюШирину = ЛиМинимальный; + КонецЕсли; + + Если ШириныКолонок[ТекущаяКолонка] <> Неопределено Тогда + + ОбластьКолонки = ТабличныйДокумент.Область(, ТекущаяКолонка + 1, НачалоДанных, ТекущаяКолонка + 1); + + // Ширина колонок установлена + // Установим ширину области ячеек + Если УстановитьМинимальнуюШирину Тогда + ОбластьКолонки.ШиринаКолонки = Макс(ШириныКолонок[ТекущаяКолонка] + 1, МинимальнаяШиринаКолонкиПоказатель); + Иначе + ОбластьКолонки.ШиринаКолонки = ШириныКолонок[ТекущаяКолонка] + 1; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ирОбщий.СостояниеЛкс(""); + +КонецПроцедуры + +// Устанавливает отбор построителя по расшифровке, содержащей NULL'ы. +// Устанавливает значение каждого NULL элемента отбора в "<Отсутствует>" и вид сравнения в "Равно". +// Для измерений, которые могут содержать значение "NULL" в запросах в секции условий построителя следует +// писать "ЕСТЬNULL(ПутьКДаннымИзмерения, "<Отсутствует>") КАК ИмяИзмерения". +// +// Параметры: +// пПостроительОтчета - ПостроительОтчета - чей отбор обрабатываем; +// пРасшифровка - Структура - расшифровка. +// +Процедура УстановитьОтборПостроителяПриРасшифровкеЛкс(пПостроительОтчета, пРасшифровка) Экспорт + + Для каждого ЭлементРасшифровки Из пРасшифровка Цикл + Если ЭлементРасшифровки.Значение = NULL Тогда + ЭлементОтбора = пПостроительОтчета.Отбор[ЭлементРасшифровки.Ключ]; + Если ЭлементОтбора.ТипЗначения.СодержитТип(Тип("Строка")) Тогда + ЭлементОтбора.Значение = "<Отсутствует>"; + Если ЭлементОтбора.ВидСравнения = ВидСравнения.ВИерархии Тогда + ЭлементОтбора.ВидСравнения = ВидСравнения.Равно; + КонецЕсли; + Иначе + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Запрос не поддерживает расшифровку по отсутствующему значению элемента отбора %1!",, ЭлементОтбора.Представление)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Получает копию построителя отчетов. +// +// Параметры: +// Оригинал - ПостроительОтчета. +// +// Возвращаемое значение: +// - <Тип.Вид> - <описание значения> +// <продолжение описания значения>; +// <Значение2> - <Тип.Вид> - <описание значения> +// <продолжение описания значения>. +// +Функция _СкопироватьПостроительОтчетаЛкс(Оригинал, ВосстанавливатьНастройки = Истина) Экспорт + + Копия = Новый ПостроительОтчета; + Для Каждого ДоступноеПоле Из Оригинал.ДоступныеПоля Цикл + ЗаполнитьЗначенияСвойств(Копия.ДоступныеПоля.Добавить(ДоступноеПоле.Имя, ДоступноеПоле.Представление), ДоступноеПоле); + КонецЦикла; + Если ВосстанавливатьНастройки Тогда + Копия.Текст = Оригинал.Текст; + Копия.ЗаполнитьНастройки(); // Баг платформы. Без этого почему то иногда измерения не восстанавливаются! + Копия.УстановитьНастройки(Оригинал.ПолучитьНастройки()); + КонецЕсли; + Возврат Копия; + +КонецФункции + +// Возвращает менеджер временных таблиц, в котором создана временная таблица по переданному источнику. +// +// Параметры: +// ТаблицаЗначений - ТаблицаЗначений; +// ИмяТаблицы - Строка; +// *МенеджерВременныхТаблиц - МенеджерВременныхТаблиц, *Неопределено. +// +// Возвращаемое значение: +// МенеджерВременныхТаблиц. +// +Функция _МенеджерВременныхТаблицИзТаблицыЛкс(ТаблицаЗначений, ИмяТаблицы, МенеджерВременныхТаблиц = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТаблицаЗначений = Новый ТаблицаЗначений; + #КонецЕсли + Если МенеджерВременныхТаблиц = Неопределено Тогда + МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + КонецЕсли; + ТекстВЫБРАТЬ = ""; + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + Колонка.Имя; + КонецЦикла; + ТекстЗапроса = "ВЫБРАТЬ " + Сред(ТекстВЫБРАТЬ, 3); + ТекстЗапроса = ТекстЗапроса + " ПОМЕСТИТЬ " + ИмяТаблицы; + ТекстЗапроса = ТекстЗапроса + " ИЗ &ВнешнийИсточник КАК ВнешнийИсточник"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ВнешнийИсточник", ТаблицаЗначений); + Запрос.Выполнить(); + Возврат МенеджерВременныхТаблиц; + +КонецФункции + +Процедура ПанельИнструментовОПодсистемеЛкс() Экспорт + + ОткрытьСправкуПоПодсистемеЛкс(); + +КонецПроцедуры + +// Открывает обработку ирПоискДублейИЗаменаСсылок и заполняет группы дублей по табличному полю, связанному с таблицей или деревом значений. +// +Процедура ОткрытьФормуЗаменыСсылокИзТабличногоПоляЛкс(ТабличноеПоле) Экспорт + + Если ТабличноеПоле.ТекущаяКолонка = Неопределено Тогда + Возврат; + КонецЕсли; + ФормаОбработки = ПолучитьФормуЛкс("Обработка.ирПоискДублейИЗаменаСсылок.Форма"); + Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ТаблицаЗначений") Тогда + ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; + СписокВыбора = Новый СписокЗначений; + СписокВыбора.Добавить(0, "Создать группы дублей из пар неправильных значений текущей и правильных значений следующей колонок"); + СписокВыбора.Добавить(1, "Создать одну группу дублей из значений текущей колонки выделенных строк"); + //СписокВыбора.Добавить(2, "Создать правила замены значений из текущей колонки на значения следующей колонки"); + ВыбранныйВариант = СписокВыбора.ВыбратьЭлемент("Выберите вариант"); + Если ВыбранныйВариант = Неопределено Тогда + Возврат; + КонецЕсли; + Если ВыбранныйВариант.Значение = 1 Тогда + Если ВыделенныеСтроки.Количество() = 0 Тогда + Возврат ; + КонецЕсли; + ИмяКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда + Возврат; + КонецЕсли; + МассивСсылок = Новый Массив; + Для Каждого Строка Из ВыделенныеСтроки Цикл + ЗначениеСтроки = Строка[ИмяКолонки]; + ТипЗначения = ТипЗнч(ЗначениеСтроки); + Если Метаданные.НайтиПоТипу(ТипЗначения) = Неопределено Тогда + Продолжить; + КонецЕсли; + МассивСсылок.Добавить(ЗначениеСтроки); + КонецЦикла; + ФормаОбработки.ОткрытьДляЗаменыПоСпискуСсылок(МассивСсылок,, 0); + ИначеЕсли ВыбранныйВариант.Значение = 0 Тогда + ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка; + Если Ложь + Или ТекущаяКолонка = Неопределено + Или ТекущаяКолонка.Данные = "" + Тогда + Возврат; + КонецЕсли; + ИндексКолонки = ТабличноеПоле.Колонки.Индекс(ТекущаяКолонка); + Если ТабличноеПоле.Колонки.Количество() = ИндексКолонки + 1 Тогда + Возврат; + КонецЕсли; + СледующаяКолонка = ТабличноеПоле.Колонки[ИндексКолонки + 1]; + Если СледующаяКолонка.Данные = "" Тогда + Возврат; + КонецЕсли; + ФормаОбработки.ОткрытьСЗаполнениемГруппДублейПоТаблицеПар(ТабличноеПоле.Значение, ТекущаяКолонка.Данные, СледующаяКолонка.Данные); + КонецЕсли; + ИначеЕсли ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда + ФормаОбработки.ОткрытьДляЗаменыПоДеревуСсылок(ТабличноеПоле.Значение, ТабличноеПоле.ТекущаяКолонка.Имя); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ТЕХНОЛОГИЯ КОМПОНЕНТ + +// Возвращает кнопку командной панели компоненты по ее имени из макета. +// +// Параметры: +// ОбъектКомпоненты - ОбработкаОбъект - компонента; +// КраткоеИмяКнопки - Строка - имя кнопки из макета компоненты; +// *КоманднаяПанель - КоманднаяПанель, *Неопределено - на случай, если у компоненты несколько командных панелей. +// +// Возвращаемое значение: +// Кнопка. +// +Функция КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ОбъектКомпоненты, КраткоеИмяКнопки, + Знач КоманднаяПанель = Неопределено) Экспорт + + Если КоманднаяПанель = Неопределено Тогда + КоманднаяПанель = ОбъектКомпоненты.КоманднаяПанель; + КонецЕсли; + Если КоманднаяПанель = Неопределено Тогда + // Был вызван деструктор + Возврат Неопределено; + КонецЕсли; + ПолноеИмяКнопки = СформироватьИмяЭлементаУправленияЭкземпляраЛкс(ОбъектКомпоненты, КраткоеИмяКнопки); + Кнопка = КоманднаяПанель.Кнопки.Найти(ПолноеИмяКнопки); + Если Кнопка = Неопределено Тогда + Для Каждого Подменю Из КоманднаяПанель.Кнопки Цикл + Если Подменю.ТипКнопки <> ТипКнопкиКоманднойПанели.Подменю Тогда + Продолжить; + КонецЕсли; + Кнопка = КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ОбъектКомпоненты, КраткоеИмяКнопки, Подменю); + Если Кнопка <> Неопределено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат Кнопка; + +КонецФункции + +// Формирует имя элемента управления экземпляра компоненты. +// +// Параметры: +// ИмяКласса - Строка; +// ИмяЭкземпляра - Строка; +// КраткоеИмяЭлементаУправления - Строка. +// +// Возвращаемое значение: +// Строка - имя. +// +Функция СформироватьИмяЭлементаУправленияЭкземпляраЛкс(ОбъектКомпоненты, КраткоеИмяЭлементаУправления) Экспорт + + Возврат ПрефиксИменЭлементовЭкземпляраКомпонентыЛкс(ОбъектКомпоненты) + КраткоеИмяЭлементаУправления; + +КонецФункции + +Функция ПрефиксИменЭлементовЭкземпляраКомпонентыЛкс(ОбъектКомпоненты) Экспорт + + Возврат ОбъектКомпоненты.ИмяКласса + "_" + ОбъектКомпоненты.Имя + "_"; + +КонецФункции // СформироватьИмяЭлементаУправленияЭкземпляраЛкс() + +Функция НоваяТаблицуСобытийЭлементаУправленияКомпонентыЛкс() Экспорт + + ТаблицаСобытий = Новый ТаблицаЗначений; + ТаблицаСобытий.Колонки.Добавить("СобытиеОбъекта"); + ТаблицаСобытий.Колонки.Добавить("БлижайшийВидАлгоритма"); + ТаблицаСобытий.Колонки.Добавить("ИмяСобытия"); + ТаблицаСобытий.Колонки.Добавить("Компонента"); + ТаблицаСобытий.Колонки.Добавить("ВызовОбработчика"); + Возврат ТаблицаСобытий; + +КонецФункции + +// Добавляет в кнопки командной панели приемника коллекцию кнопок командной панели источника. +// +// Параметры: +// ОбъектКомпоненты - ОбработкаОбъект - компонента; +// КнопкиМакета - КоллекцияКнопокКоманднойПанели - источник; +// КнопкиПриемника - КоллекцияКнопокКоманднойПанели - приемник; +// *ДействияКнопокКомпонент - ТаблицаЗначений, *Неопределено; +// +Процедура ДобавитьКнопкиКоманднойПанелиКомпонентыЛкс(ОбъектКомпоненты, КнопкиМакета, КнопкаПриемника, + ДействияКнопокКомпонент = Неопределено, ОбщийПриемник = Неопределено, НеДобавлятьЕслиСуществует = Ложь) Экспорт + + КнопкиПриемника = КнопкаПриемника.Кнопки; + ИмяКласса = ОбъектКомпоненты.ИмяКласса; + Если ДействияКнопокКомпонент = Неопределено Тогда + ДействиеТранслятор = Новый Действие("Клс" + ИмяКласса + "Нажатие"); + Иначе + ЭтоКоманднаяПанель = (ТипЗнч(КнопкаПриемника) = Тип("КоманднаяПанель")); + ДопКнопкиКомандныхПанелей = ОбъектКомпоненты.ДопКнопкиКомандныхПанелей; + ДопКнопкиКоманднойПанели = Новый Массив; + ДопКнопкиКомандныхПанелей.Вставить(КнопкаПриемника.Имя, ДопКнопкиКоманднойПанели); + ДействиеТранслятор = Новый Действие("КнопкаКоманднойПанели_Действие") + КонецЕсли; + ИмяЭкземпляра = ОбъектКомпоненты.Имя; + Для Каждого КнопкаМакета Из КнопкиМакета Цикл + Кнопка = Неопределено; + ИмяКнопкиСПрефиксом = СформироватьИмяЭлементаУправленияЭкземпляраЛкс(ОбъектКомпоненты, КнопкаМакета.Имя); + Если КнопкаМакета.ТипКнопки = ТипКнопкиКоманднойПанели.Действие Тогда + Если Истина + И Строка(КнопкаМакета.Действие) = "" + Тогда + Если НеДобавлятьЕслиСуществует И КнопкиПриемника.Найти(ИмяКнопкиСПрефиксом) <> Неопределено Тогда + Продолжить; + КонецЕсли; + // Это пустое действие + Кнопка = КнопкиПриемника.Добавить(ИмяКнопкиСПрефиксом, КнопкаМакета.ТипКнопки); + ЗаполнитьЗначенияСвойств(Кнопка, КнопкаМакета, , "Действие, Имя"); + //Попытка + Кнопка.Действие = ДействиеТранслятор; + //Исключение + // ОписаниеОшибки = ОписаниеОшибки(); // Для отладки + // Возврат; + //КонецПопытки; + Если ДействияКнопокКомпонент <> Неопределено Тогда + СтрокаДействия = ДействияКнопокКомпонент.Добавить(); + СтрокаДействия.Кнопка = Кнопка; + СтрокаДействия.Компонента = ОбъектКомпоненты; + ВызовОбработчика = "Действие_"; + Если ОбщийПриемник = Неопределено Тогда + ВызовОбработчика = ВызовОбработчика + КнопкаМакета.Имя; + Иначе + ВызовОбработчика = ВызовОбработчика + ОбщийПриемник; + КонецЕсли; + СтрокаДействия.ВызовОбработчика = ВызовОбработчика + "(П0, П1)"; + КонецЕсли; + Иначе + Если НеДобавлятьЕслиСуществует И КнопкиПриемника.Найти(КнопкаМакета.Имя) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Кнопка = КнопкиПриемника.Добавить(КнопкаМакета.Имя, КнопкаМакета.ТипКнопки, , КнопкаМакета.Действие); + // Автокартинки предопределенных действий платформа подключает до вызова ПередОткрытием, а потом они уже пустые + Если КнопкаМакета.Картинка.Вид <> ВидКартинки.Пустая Тогда + Кнопка.Картинка = КнопкаМакета.Картинка; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Кнопка, КнопкаМакета, , "Имя, ТипКнопки, Картинка"); + КонецЕсли; + КонецЕсли; + Если Кнопка = Неопределено Тогда + Если НеДобавлятьЕслиСуществует И КнопкиПриемника.Найти(ИмяКнопкиСПрефиксом) <> Неопределено Тогда + Продолжить; + КонецЕсли; + Кнопка = КнопкиПриемника.Добавить(ИмяКнопкиСПрефиксом); + ЗаполнитьЗначенияСвойств(Кнопка, КнопкаМакета, , "Действие, Имя"); + Если КнопкаМакета.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю Тогда + ДобавитьКнопкиКоманднойПанелиКомпонентыЛкс(ОбъектКомпоненты, КнопкаМакета.Кнопки, Кнопка, ДействияКнопокКомпонент, ОбщийПриемник); + КонецЕсли; + КонецЕсли; + Если Истина + И ДействияКнопокКомпонент <> Неопределено + И ЭтоКоманднаяПанель + Тогда + ДопКнопкиКоманднойПанели.Добавить(Кнопка.Имя); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Возвращает имя экземпляра компоненты, которой принадлежит элемент управления. +// +// Параметры: +// ЭлементУправления - ЭлементУправления. +// +// Возвращаемое значение: +// Строка - имя. +// +Функция ИмяЭкземпляраКомпонентыЛкс(ЭлементУправления) Экспорт + + Результат = ирОбщий.СтрРазделитьЛкс(ЭлементУправления.Имя, "_")[1]; + Возврат Результат; + +КонецФункции + +Процедура ТабличноеПолеКолонокПриВыводеСтрокиЛкс(Знач ОформлениеСтроки, Знач ДанныеСтроки, Знач ИмяКолонкиОписанияТипов = "ТипЗначения") Экспорт + + ИндексКартинки = ИндексКартинкиТипаЗначенияБДЛкс(ДанныеСтроки[ИмяКолонкиОписанияТипов]); + Если ИндексКартинки <> Неопределено Тогда + ОформлениеСтроки.Ячейки[ИмяКолонкиОписанияТипов].ОтображатьКартинку = Истина; + ОформлениеСтроки.Ячейки[ИмяКолонкиОписанияТипов].ИндексКартинки = ИндексКартинки; + КонецЕсли; + +КонецПроцедуры + +// Глобальный обработчик события ПриПолученииДанных для табличных полей доступных полей компоновки. +// +// Параметры: +// ОформленияСтрок - ОформленияСтрок. +// +Процедура ПриПолученииДанныхДоступныхПолейКомпоновкиЛкс(ЭтаФорма, Элемент, ОформленияСтрок, ТабличноеПолеВыбранныхПолей = Неопределено) Экспорт + + //СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + //ОбработчикиПриВыводеСтроки = СлужебныеДанныеФормы.ОбработчикиПриВыводеСтроки; + //ОбработчикПриВыводеСтроки = ОбработчикиПриВыводеСтроки[Элемент.Имя]; + //Если Истина + // И ОбработчикПриВыводеСтроки <> Неопределено + // И Не ирОбщий.МетодРеализованЛкс(ЭтаФорма, ОбработчикПриВыводеСтроки) // Сообщение о его отсутствии выдаем в общем обработчике Форма_ПриОткрытии + //Тогда + // ОбработчикПриВыводеСтроки = Неопределено; + //КонецЕсли; + Если Истина + И ТабличноеПолеВыбранныхПолей <> Неопределено + И ОформленияСтрок[0].Ячейки.Найти("Использовано") <> Неопределено + Тогда + ВсеПоляВыбранныхПолей = ирОбщий.ВсеВыбранныеПоляГруппировкиКомпоновкиЛкс(ТабличноеПолеВыбранныхПолей.Значение,,, Истина); + КонецЕсли; + КартинкаРеквизита = ирКэш.КартинкаПоИмениЛкс("ирРеквизит"); + Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл + ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; + Если ДанныеСтроки = Неопределено Тогда + Продолжить; + КонецЕсли; + Ячейки = ОформлениеСтроки.Ячейки; + ЯчейкаТипа = Ячейки.Найти("Тип"); + Если ЯчейкаТипа <> Неопределено Тогда + Ячейки.Тип.УстановитьТекст(ДанныеСтроки.ТипЗначения); + КонецЕсли; + ИндексКартинки = Неопределено; + Попытка + ЭтоПапка = ДанныеСтроки.Папка; + ЭтоРесурс = ДанныеСтроки.Ресурс; + Исключение + ЭтоПапка = Ложь; + ЭтоРесурс = Ложь; + КонецПопытки; + Если ЭтоПапка Тогда + ПапкаСРесурсами = ДанныеСтроки.Элементы.Количество() > 0; + Для каждого ДоступноеПоле Из ДанныеСтроки.Элементы Цикл + Если Не ДоступноеПоле.Ресурс Тогда + ПапкаСРесурсами = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если ПапкаСРесурсами Тогда + ИндексКартинки = 17; + КонецЕсли; + КонецЕсли; + Если Не ЭтоРесурс И Не ЭтоПапка Тогда + ИндексКартинки = ИндексКартинкиТипаЗначенияБДЛкс(ДанныеСтроки.ТипЗначения); + КонецЕсли; + Если ИндексКартинки <> Неопределено Тогда + Ячейки[0].ОтображатьКартинку = Истина; + Ячейки[0].ИндексКартинки = ИндексКартинки; + КонецЕсли; + Если Истина + И ВсеПоляВыбранныхПолей <> Неопределено + И ВсеПоляВыбранныхПолей.Найти(ДанныеСтроки.Поле) <> Неопределено + Тогда + Ячейки.Использовано.УстановитьКартинку(КартинкаРеквизита); + КонецЕсли; + Если Ячейки.Найти("Заголовок") <> Неопределено Тогда + Типы = ДанныеСтроки.ТипЗначения.Типы(); + Если Типы.Количество() > 1 Тогда + Ячейки.Заголовок.УстановитьТекст(Ячейки.Заголовок.Текст + " (" + XMLСтрока(Типы.Количество()) + "т)"); + КонецЕсли; + КонецЕсли; + //Если ОбработчикПриВыводеСтроки = Неопределено Тогда + ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + //Иначе + // Выполнить("ЭтаФорма." + ОбработчикПриВыводеСтроки + "(Элемент, ОформлениеСтроки, ДанныеСтроки);"); + //КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ОформитьСтрокуДоступногоПоляЛкс(ОформлениеСтроки, СтрокаПоля, Знач СтрокаДоступнойТаблицы = Неопределено, ИмяКолонки = "Заголовок", Знач ЭтоИндекс = Ложь, Использовано = Ложь) Экспорт + + Ячейки = ОформлениеСтроки.Ячейки; + ЭтоСтандартное = Истина + И СтрокаПоля <> Неопределено + И СтрокаПоля.Метаданные = Неопределено + И Не СтрокаПоля.ТипЗначения.СодержитТип(Тип("ТаблицаЗначений")) + И (Ложь + Или СтрокаДоступнойТаблицы = Неопределено + Или (Истина + И СтрокаДоступнойТаблицы.Тип <> "ДвиженияССубконто" + И СтрокаДоступнойТаблицы.Тип <> "ВиртуальнаяТаблица" + И СтрокаДоступнойТаблицы.Тип <> "ВременнаяТаблица" + И СтрокаДоступнойТаблицы.Тип <> "Параметр" + И СтрокаДоступнойТаблицы.Тип <> "Константы")); + ТекстВСкобках = ""; + ЭтоИзмерение = Найти(ирОбщий.ПолноеИмяМДПоляТаблицыЛкс(СтрокаПоля), ".Измерение.") > 0; + Если Истина + И СтрокаПоля <> Неопределено + И ИмяКолонки <> "Заголовок" + Тогда + Типы = СтрокаПоля.ТипЗначения.Типы(); + Если Типы.Количество() > 1 Тогда + ТекстВСкобках = ТекстВСкобках + "," + XMLСтрока(Типы.Количество()) + "т"; + КонецЕсли; + КонецЕсли; + Если ЭтоИзмерение Тогда + ТекстВСкобках = ТекстВСкобках + ",Измер"; + ОформлениеСтроки.ЦветФона = Новый Цвет(255, 245, 240); + КонецЕсли; + Если ЭтоСтандартное Тогда + ТекстВСкобках = ТекстВСкобках + ",Станд"; + //ОформлениеСтроки.ЦветФона = Новый Цвет(250, 250, 255); + КонецЕсли; + Если ЭтоИндекс Тогда + ТекстВСкобках = ТекстВСкобках + ",Индекс"; + КонецЕсли; + Если ЗначениеЗаполнено(ТекстВСкобках) Тогда + ТекстВСкобках = " (" + Сред(ТекстВСкобках, 2) + ")"; + Ячейки[ИмяКолонки].УстановитьТекст(Ячейки[ИмяКолонки].Текст + ТекстВСкобках); + КонецЕсли; + Если Использовано И Ячейки.Найти("Использовано") <> Неопределено Тогда + Ячейки.Использовано.УстановитьКартинку(ирКэш.КартинкаПоИмениЛкс("ирРеквизит")); + КонецЕсли; + +КонецПроцедуры + +Процедура ОформитьСтрокуДопРеквизитаБСПЛкс(ОформлениеСтроки) Экспорт + + ОформлениеСтроки.ЦветТекста = Новый Цвет(0, 0, 128); + +КонецПроцедуры + +Процедура УсловноеОформлениеПриВыводеСтрокиЛкс(Знач ЭтаФорма, Знач Элемент, Знач ОформлениеСтроки, Знач ДанныеСтроки, Знач КомпоновщикНастроек = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ДанныеСтроки = Новый НастройкиКомпоновкиДанных; + ДанныеСтроки = ДанныеСтроки.УсловноеОформление.Элементы[0]; + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + #КонецЕсли + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + МассивОформляемыхКолонок = Новый Массив; + //МассивОформляемыхКолонок.Добавить("ОформлениеДляКраткогоОтображенияЭлемента"); + //МассивОформляемыхКолонок.Добавить("ПредставлениеДляКраткогоОтображенияЭлемента"); + //МассивОформляемыхКолонок.Добавить("ОформлениеДляПодробногоОтображенияЭлемента"); + //МассивОформляемыхКолонок.Добавить("ПредставлениеДляПодробногоОтображенияЭлемента"); + МассивОформляемыхКолонок.Добавить("Пример"); + //МассивТекстовыхКолонок = Новый Массив; + //МассивТекстовыхКолонок.Добавить("ОформлениеДляПодробногоОтображенияЭлемента"); + //МассивТекстовыхКолонок.Добавить("ОформлениеДляКраткогоОтображенияЭлемента"); + ИменаКолонокОбласти = Новый Массив; + ИменаКолонокОбласти.Добавить("ОбластиДляКраткогоОтображенияЭлемента"); + ИменаКолонокОбласти.Добавить("ОбластиДляПодробногоОтображенияЭлемента"); + ИменаКолонокОтбора = Новый Массив; + ИменаКолонокОтбора.Добавить("ОтборДляКраткогоОтображенияЭлемента"); + ИменаКолонокОтбора.Добавить("ОтборДляПодробногоОтображенияЭлемента"); + ПараметрФормат = Новый ПараметрКомпоновкиДанных("Format"); + ПараметрТекст = Новый ПараметрКомпоновкиДанных("Text"); + //Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл + // ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; + //: ДанныеСтроки = Новый ("ЭлементУсловногоОформленияКомпоновкиДанных") + Ячейки = ОформлениеСтроки.Ячейки; + ЯчейкаОформления = Ячейки.Пример; + //Для Каждого ИмяКолонки Из МассивТекстовыхКолонок Цикл + // ЯчейкаТекста = Ячейки[ИмяКолонки]; + // Если ЯчейкаТекста.Видимость Тогда + // Прервать; + // КонецЕсли; + //КонецЦикла; + Для Каждого ИмяКолонки Из ИменаКолонокОбласти Цикл + ЯчейкаОбласти = Ячейки[ИмяКолонки]; + Если ЯчейкаОбласти.Видимость Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Для Каждого ИмяКолонки Из ИменаКолонокОтбора Цикл + ЯчейкаОтбор = Ячейки[ИмяКолонки]; + Если ЯчейкаОтбор.Видимость Тогда + Прервать; + КонецЕсли; + КонецЦикла; + ЗначенияПараметров = ДанныеСтроки.Оформление.Элементы; + + ПредставлениеЗначенийПараметра = ""; + Для Каждого ЗначениеПараметра Из ЗначенияПараметров Цикл + Если НЕ ЗначениеПараметра.Использование Тогда + Продолжить; + КонецЕсли; + Если ЗначениеПараметра.Параметр = ПараметрФормат Тогда + ИначеЕсли ЗначениеПараметра.Параметр = ПараметрТекст Тогда + Иначе + Попытка + Выполнить("ЯчейкаОформления." + ЗначениеПараметра.Параметр + " = ЗначениеПараметра.Значение;"); + Исключение + КонецПопытки; + КонецЕсли; + Если ПредставлениеЗначенийПараметра <> "" Тогда + ПредставлениеЗначенийПараметра = ПредставлениеЗначенийПараметра + ", "; + КонецЕсли; + ПредставлениеЗначенийПараметра = ПредставлениеЗначенийПараметра + ЗначениеПараметра.Параметр + "=" + ЗначениеПараметра.Значение; + КонецЦикла; + //Выполнить("ЯчейкаТекста.УстановитьТекст(ПредставлениеЗначенийПараметра);"); + ЯчейкаОформления.УстановитьТекст("Пример"); + + // Антибаг платформы 8.2.13. Если область элемента оформления содержит включенные пустые поля, то представление области выглядит пустым, + // а элемент оформления не будет применяться даже если он включен. Поэтому нужно отобразить такие пустые поля + Если Истина + И ЯчейкаОбласти.Видимость + //И "" + ДанныеСтроки.Поля = "" + И ЯчейкаОбласти.Текст = "" + И ДанныеСтроки.Поля.Элементы.Количество() > 0 + Тогда + Для Каждого Поле Из ДанныеСтроки.Поля.Элементы Цикл + Если Поле.Использование Тогда + ЯчейкаОбласти.УстановитьТекст("<>"); + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если КомпоновщикНастроек <> Неопределено Тогда + Для Каждого Поле Из ДанныеСтроки.Поля.Элементы Цикл + Если Истина + И ЗначениеЗаполнено("" + Поле.Поле) + И КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.НайтиПоле(Поле.Поле) = Неопределено + Тогда + ЯчейкаОбласти.УстановитьКартинку(ирКэш.КартинкаПоИмениЛкс("ирНедоступноеПоле")); + Прервать; + КонецЕсли; + КонецЦикла; + Если ЛиЕстьНеактуальныеПоляВГруппеОтбораЛкс(КомпоновщикНастроек, ДанныеСтроки.Отбор) Тогда + ЯчейкаОтбор.УстановитьКартинку(ирКэш.КартинкаПоИмениЛкс("ирНедоступноеПоле")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ЛиЕстьНеактуальныеПоляВГруппеОтбораЛкс(Знач КомпоновщикНастроек, Знач ГруппаОтбора) Экспорт + + #Если Сервер И Не Сервер Тогда + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + ГруппаОтбора = КомпоновщикНастроек.Настройки.Отбор; + #КонецЕсли + Результат = Ложь; + Для Каждого ЭлементОтбора Из ГруппаОтбора.Элементы Цикл + Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + Результат = ЛиЕстьНеактуальныеПоляВГруппеОтбораЛкс(КомпоновщикНастроек, ЭлементОтбора); + Иначе + Результат = КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.НайтиПоле(ЭлементОтбора.ЛевоеЗначение) = Неопределено; + КонецЕсли; + Если Результат Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + +Процедура ОформитьЯчейкуРазностиЛкс(Знач ОформлениеСтроки, Знач ИмяКолонки = "Разность") Экспорт + + РазностьОбъекта = ОформлениеСтроки.ДанныеСтроки[ИмяКолонки]; + Если ТипЗнч(РазностьОбъекта) = Тип("Число") Тогда + ЦветТекста = Новый Цвет; + Ячейка = ОформлениеСтроки.Ячейки[ИмяКолонки]; + ТекстЯчейки = Ячейка.Текст; + Если РазностьОбъекта > 0 Тогда + ЦветТекста = WebЦвета.Зеленый; + ТекстЯчейки = "+" + ТекстЯчейки; + ИначеЕсли РазностьОбъекта < 0 Тогда + ЦветТекста = WebЦвета.Красный; + КонецЕсли; + Ячейка.ЦветТекста = ЦветТекста; + Ячейка.Текст = ТекстЯчейки; + КонецЕсли; + +КонецПроцедуры + +// Подключает обработчики событий для табличного поля отбора компоновки данных. +// +// Параметры: +// ТабличноеПоле - ТабличноеПоле - отбора компоновки. +// +Процедура ПодключитьОбработчикиСобытийДоступныхПолейКомпоновкиЛкс(ТабличноеПоле) Экспорт + + Обработчик = ТабличноеПоле.ПолучитьДействие("ПриПолученииДанных"); + Если Истина + И Обработчик <> Неопределено + И Не ирОбщий.СтрокиРавныЛкс(Обработчик, "ТабличноеПолеПриПолученииДанных") + Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Обнаружено переопределение обработчика ПриПолученииДанных табличного поля %1",, ТабличноеПоле.Имя)); + КонецЕсли; + ТабличноеПоле.УстановитьДействие("ПриПолученииДанных", Новый Действие("ПриПолученииДанныхДоступныхПолей")); + ТабличноеПоле.Колонки[0].КартинкиСтрок = ирКэш.КартинкаПоИмениЛкс("ирТипыДоступныхПолейКомпоновки"); + +КонецПроцедуры + +Процедура УстановитьПолеВПравомЗначенииТабличПоляОтбораЛкс(Знач ТабличноеПолеОтбора, Знач ТабличноеПолеДоступныхПолей = Неопределено) Экспорт + + Если ТабличноеПолеДоступныхПолей <> Неопределено И ТабличноеПолеДоступныхПолей.ТекущаяСтрока <> Неопределено Тогда + ПолеКомпоновки = ТабличноеПолеДоступныхПолей.ТекущаяСтрока.Поле; + Иначе + ПолеКомпоновки = Новый ПолеКомпоновкиДанных(""); + КонецЕсли; + ТекущаяСтрока = ТабличноеПолеОтбора.ТекущаяСтрока; + Если ТипЗнч(ТекущаяСтрока) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Если ТипЗнч(ТекущаяСтрока.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных") Или ЗначениеЗаполнено("" + ПолеКомпоновки) Тогда + ТекущаяСтрока.ПравоеЗначение = ПолеКомпоновки; + КонецЕсли; + ТабличноеПолеОтбора.ТекущаяКолонка = ТабличноеПолеОтбора.Колонки.ПравоеЗначениеДляКраткогоОтображенияЭлемента; + КонецЕсли; + +КонецПроцедуры + +// Получает макет компоновки данных по схеме с использованием временных таблиц. +// +// Параметры: +// Схема - СхемаКомпоновкиДанных; +// Настройки - НастройкиКомпоновкиДанных; +// *ВнешниеНаборыДанных - Структура, *Неопределено - туда добавляются временные таблицы; +// *ДанныеРасшифровки - ДанныеРасшифровкиКомпоновкиДанных, *Неопределено; +// *ЛиОтладка - Булево, *Ложь - показывать тексты запросов и время выполнения этапов. +// +// Возвращаемое значение: +// МакетКомпоновкиДанных. +// +Функция МакетКомпоновкиДанныхСВременнымиТаблицамиЛкс(Схема, Настройки, ВнешниеНаборыДанных = Неопределено, + ДанныеРасшифровки = Неопределено, ЛиОтладка = Ложь, СвойМакетОформления = Неопределено, ПроверятьДоступностьПолей = Ложь) Экспорт + + RegExp = ирОбщий.НовыйВычислительРегВыражений(); + RegExp.Global = Истина; + RegExp.MultiLine = Истина; + RegExp.IgnoreCase = Истина; + // Допустим 1 уровень скобок. + шСкобки = "\([^\)\(]*?\)"; + RegExp.Pattern = "\(ВЫБРАТЬ(?:" + шСкобки + "|[^$\(\)])*?""ВременнаяТаблица"" = ""(.*?)""\)"; + + Если ВнешниеНаборыДанных = Неопределено Тогда + ВнешниеНаборыДанных = Новый Структура; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + + // Выполним создание всех временных таблиц. Временной таблицей считаем набор данных запрос, + // имя которого начинается с "@". Наборы данных временных таблиц удаляются из предварительной схемы. + ПредварительнаяСхема = ирОбщий.КопияОбъектаЛкс(Схема); + НаборыДанныхСхемы = ПредварительнаяСхема.НаборыДанных; + ЕстьВременныеТаблицы = Ложь; + НачальноеКоличество = НаборыДанныхСхемы.Количество(); + Для СчетчикНаборыДанныхСхемы = 1 По НачальноеКоличество Цикл + НаборДанных = НаборыДанныхСхемы[НачальноеКоличество - СчетчикНаборыДанныхСхемы]; + Если Истина + И Лев(НаборДанных.Имя, 1) = "@" + И ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") + Тогда + ВременнаяСхема = ирОбщий.КопияОбъектаЛкс(Схема); + + // Кривое копирование набора данных в новую схемы, где он будет один. + ВременнаяСхема.СвязиНаборовДанных.Очистить(); + НаборыДанныхВременнойСхемы = ВременнаяСхема.НаборыДанных; + НаборыДанныхВременнойСхемыВГраница = НаборыДанныхВременнойСхемы.Количество() - 1; + Для СчетчикВременнойСхемы = 0 По НаборыДанныхВременнойСхемыВГраница Цикл + НаборДанныхВременнойСхемы = НаборыДанныхВременнойСхемы[НаборыДанныхВременнойСхемыВГраница - СчетчикВременнойСхемы]; + Если НаборДанныхВременнойСхемы.Имя <> НаборДанных.Имя Тогда + НаборыДанныхВременнойСхемы.Удалить(НаборДанныхВременнойСхемы); + КонецЕсли; + КонецЦикла; + Для Каждого ПолеНабора Из НаборыДанныхВременнойСхемы[0].Поля Цикл + ПолеНабора.ОграничениеИспользования.Поле = Ложь; + ПолеНабора.ВыражениеПредставления = ПолеНабора.ПутьКДанным; + КонецЦикла; + + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ВременнаяСхема)); + + КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); + КомпоновщикНастроек.Настройки.Структура.Очистить(); + КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить(); + ирОбщий.КомпоновщикНастроекВосстановитьЛкс(КомпоновщикНастроек); + + ВременныеНастройки = КомпоновщикНастроек.Настройки; + + // Установим использование параметров + Для Каждого ЭлементПараметра Из ВременныеНастройки.ПараметрыДанных.Элементы Цикл + ЭлементПараметра.Использование = Истина; + КонецЦикла; + + // Установим структуру и выбранные поля + ЭлементСтруктуры = ВременныеНастройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); + ЭлементСтруктуры.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); + Для Каждого ДоступноеПоле Из ВременныеНастройки.ДоступныеПоляВыбора.Элементы Цикл + // Чтобы пропустить системные папки + Если Не ДоступноеПоле.Папка Тогда + НовоеВыбранноеПоле = ВременныеНастройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + НовоеВыбранноеПоле.Поле = ДоступноеПоле.Поле; + НовоеВыбранноеПоле.Использование = Истина; + КонецЕсли; + КонецЦикла; + + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ВременнаяСхема, ВременныеНастройки,,,, ПроверятьДоступностьПолей); + Запрос.Текст = МакетКомпоновкиДанных.НаборыДанных[0].Запрос; + Для Каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл + Запрос.УстановитьПараметр(Параметр.Имя, Параметр.Значение); + КонецЦикла; + Запрос.Текст = RegExp.Заменить(Запрос.Текст, "$1"); + ирОбщий.ВыполнитьЗамеритьЗапросЛкс(Запрос, ЛиОтладка, "Предварительный запрос - " + НаборДанных.Имя); + + //// Недоступные поля набора данных цепляются в настройках при совпадении имен с выбранными полями + //// http://partners.v8.1c.ru/forum/thread.jsp?id=514094 + //Для Каждого Поле Из НаборДанных.Поля Цикл + // Поле.ПутьКДанным = "_поле_" + Поле.ПутьКДанным; + //КонецЦикла; + + НаборыДанныхСхемы.Удалить(НаборДанных); + ЕстьВременныеТаблицы = Истина; + + КонецЕсли; + КонецЦикла; + + Если Не ЕстьВременныеТаблицы Тогда + Если ЛиОтладка Тогда + ВремяНачалаКомпоновкиМакета = ирОбщий.ТекущееВремяВМиллисекундахЛкс(); + КонецЕсли; + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ПредварительнаяСхема, Настройки, ДанныеРасшифровки, СвойМакетОформления,, ПроверятьДоступностьПолей); + Если ЛиОтладка Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Компоновка макета - %1мс",, ирОбщий.ТекущееВремяВМиллисекундахЛкс() - ВремяНачалаКомпоновкиМакета)); + КонецЕсли; + Иначе + // Выполним получение результата предварительного запроса + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПредварительнаяСхема)); + КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); + ирОбщий.КомпоновщикНастроекВосстановитьЛкс(КомпоновщикНастроек); + ПредварительныеНастройки = КомпоновщикНастроек.Настройки; + Если ЛиОтладка Тогда + ВремяНачалаКомпоновкиМакета = ирОбщий.ТекущееВремяВМиллисекундахЛкс(); + КонецЕсли; + МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ПредварительнаяСхема, ПредварительныеНастройки, ДанныеРасшифровки, СвойМакетОформления,, ПроверятьДоступностьПолей); + Если ЛиОтладка Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Компоновка макета - %1мс",, ирОбщий.ТекущееВремяВМиллисекундахЛкс() - ВремяНачалаКомпоновкиМакета)); + КонецЕсли; + + Для Каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл + Запрос.УстановитьПараметр(Параметр.Имя, Параметр.Значение); + КонецЦикла; + СтруктураНаборовДанныхЗапросовМакета = ирОбщий.ВсеНаборыДанныхЗапросовКомпоновкиЛкс(МакетКомпоновкиДанных.НаборыДанных); + Для Каждого ЭлементНаборДанныхМакета Из СтруктураНаборовДанныхЗапросовМакета Цикл + НаборДанных = ЭлементНаборДанныхМакета.Значение.НаборДанных; + Запрос.Текст = НаборДанных.Запрос; + Запрос.Текст = RegExp.Заменить(Запрос.Текст, "$1"); + РезультатЗапроса = ирОбщий.ВыполнитьЗамеритьЗапросЛкс(Запрос, ЛиОтладка, "Предварительный запрос - " + НаборДанных.Имя); + ВнешниеНаборыДанных.Вставить(НаборДанных.Имя, РезультатЗапроса); + КонецЦикла; + + // Получение конечного макета + Для Каждого ЭлементНаборДанных Из СтруктураНаборовДанныхЗапросовМакета Цикл + КоллекцияВладелец = ЭлементНаборДанных.Значение.КоллекцияВладелец; + НаборДанныхЗапрос = ЭлементНаборДанных.Значение.НаборДанных; + + НаборДанныхОбъект = КоллекцияВладелец.Добавить(Тип("НаборДанныхОбъектМакетаКомпоновкиДанных")); + // Копируем Свойства набора данных запроса в набор данных объекта + ЗаполнитьЗначенияСвойств(НаборДанныхОбъект, НаборДанныхЗапрос); + НаборДанныхОбъект.ИмяОбъекта = НаборДанныхЗапрос.Имя; + Для Каждого ПолеНабораДанныхОригинала Из НаборДанныхЗапрос.Поля Цикл + ПолеРезультата = НаборДанныхОбъект.Поля.Добавить(); + ЗаполнитьЗначенияСвойств(ПолеРезультата, ПолеНабораДанныхОригинала); + ЗаполнитьЗначенияСвойств(ПолеРезультата.Роль, ПолеНабораДанныхОригинала.Роль); + КонецЦикла; + КоллекцияВладелец.Удалить(НаборДанныхЗапрос); + КонецЦикла; + КонецЕсли; + + // Баг платформы. Пустая дата превращается в Неопределено. + Для Каждого ПараметрСхемы Из ПредварительнаяСхема.Параметры Цикл + Если ПараметрСхемы.ОграничениеИспользования Тогда + Если Не ПараметрСхемы.ДоступенСписокЗначений Тогда + ЗначениеПараметра = МакетКомпоновкиДанных.ЗначенияПараметров.Найти(ПараметрСхемы.Имя); + ЗначениеПараметра.Значение = ПараметрСхемы.ТипЗначения.ПривестиЗначение(ЗначениеПараметра.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат МакетКомпоновкиДанных; + +КонецФункции + +Функция ИмяФормыИзСтрокиИнструментаЛкс(Знач СтрокаИнструмента) Экспорт + + ИмяВыбраннойФормы = СтрокаИнструмента.ПолноеИмя; + Если Найти(ИмяВыбраннойФормы, "ОбщаяФорма.") <> 1 И Найти(ИмяВыбраннойФормы, ".Форма.") = 0 Тогда + Если Найти(ИмяВыбраннойФормы, "Справочник.") = 1 Тогда + ИмяВыбраннойФормы = ИмяВыбраннойФормы + ".ФормаСписка"; + Иначе + ИмяВыбраннойФормы = ИмяВыбраннойФормы + ".Форма"; + КонецЕсли; + КонецЕсли; + Возврат ИмяВыбраннойФормы; + +КонецФункции + +Процедура ПодключитьГлобальныйОбработчикОжиданияЛкс(ИмяГлобальногоМетода, Интервал = 0.1, Однократно = Истина) Экспорт + + Если ирКэш.ЛиПортативныйРежимЛкс() Тогда + ирПортативный.ПолучитьФорму().ПодключитьОбработчикОжидания(ИмяГлобальногоМетода, Интервал, Истина); + Иначе + ПодключитьОбработчикОжидания(ИмяГлобальногоМетода, Интервал, Истина); + КонецЕсли; + +КонецПроцедуры + +Процедура ОтключитьГлобальныйОбработчикОжиданияЛкс(ИмяМетода) Экспорт + + Если ирКэш.ЛиПортативныйРежимЛкс() Тогда + ирПортативный.ПолучитьФорму().ОтключитьОбработчикОжидания(ИмяМетода); + Иначе + ОтключитьОбработчикОжидания(ИмяМетода); + КонецЕсли; + +КонецПроцедуры + +// Процедура - Подключить глобальный обработчик ожидания с параметрами лкс +// +// Параметры: +// ИмяМетодаОбщегоМодуля - Строка - полное имя метода +// Параметры - Структура - +// Интервал - - +// Однократно - - +// +Функция ПодключитьОбработчикОжиданияСПараметрамиЛкс(ИмяМетодаОбщегоМодуля, Знач Параметры = Неопределено, Интервал = 0.1, Однократно = Истина, ВыбрасыватьИсключениеЕслиЗанят = Истина) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + Параметры = Новый Структура; + #КонецЕсли + Если Параметры = Неопределено Тогда + Параметры = Новый Структура; + КонецЕсли; + Параметры.Вставить("ИмяМетода", ИмяМетодаОбщегоМодуля); + Если Однократно И Интервал = 0 Тогда + ОбработчикОжиданияСЯвнымиПараметрамиЛкс(Параметры); + Иначе + Если мПлатформа.ПараметрыОбработчикаОжидания <> Неопределено Тогда + Если ирОбщий.СравнитьЗначенияСвойствЛкс(мПлатформа.ПараметрыОбработчикаОжидания, Параметры,, Ложь) Тогда + // повторный вызов с теми же параметрами + Возврат Истина; + КонецЕсли; + Если ВыбрасыватьИсключениеЕслиЗанят Тогда + ВызватьИсключение "Обработчик ожидания занят"; + Иначе + Возврат Ложь; + КонецЕсли; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ГлобальныйОбработчикОжиданияСПараметрамиЛкс(); + #КонецЕсли + ПодключитьГлобальныйОбработчикОжиданияЛкс("ГлобальныйОбработчикОжиданияСПараметрамиЛкс", Интервал, Однократно); + мПлатформа.ПараметрыОбработчикаОжидания = Параметры; + КонецЕсли; + Возврат Истина; + +КонецФункции + +Процедура ОтлючитьОбработчикОжиданияСПараметрамиЛкс(ИмяМетодаОбщегоМодуля = "") Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Если ЗначениеЗаполнено(ИмяМетодаОбщегоМодуля) Тогда + Если Ложь + Или мПлатформа.ПараметрыОбработчикаОжидания = Неопределено + Или ирОбщий.СтрокиРавныЛкс(мПлатформа.ПараметрыОбработчикаОжидания.ИмяМетода, ИмяМетодаОбщегоМодуля) + Тогда + Возврат; + КонецЕсли; + КонецЕсли; + мПлатформа.ПараметрыОбработчикаОжидания = Неопределено; + ОтключитьГлобальныйОбработчикОжиданияЛкс("ГлобальныйОбработчикОжиданияСПараметрамиЛкс"); + +КонецПроцедуры + +Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ПараметрыОбработчикаОжидания = мПлатформа.ПараметрыОбработчикаОжидания; + Если ПараметрыОбработчикаОжидания = Неопределено Тогда + ирОбщий.СообщитьЛкс("Не удалось выполнить страховочный обработчик ожидания, т.к. обработка ирПлатформа была удалена из кэша", СтатусСообщения.Внимание); + Возврат; + КонецЕсли; + мПлатформа.ПараметрыОбработчикаОжидания = Неопределено; + ОбработчикОжиданияСЯвнымиПараметрамиЛкс(ПараметрыОбработчикаОжидания); + +КонецПроцедуры + +Функция ОбработчикОжиданияСЯвнымиПараметрамиЛкс(Знач ПараметрыОбработчикаОжидания) + + Выполнить(ПараметрыОбработчикаОжидания.ИмяМетода + "(ПараметрыОбработчикаОжидания)"); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// РАБОТА С ФОРМАМИ + +// РежимОткрытия - Булево - Истина - Открытие, иначе Сохранение +Функция ВыбратьФайлЛкс(РежимОткрытия = Истина, Расширение = "", ОписаниеФормата = "", Знач ПолноеИмяФайла = "", Знач Каталог = "", Знач КраткоеИмя = "", Знач Заголовок = "") Экспорт + + ВыборФайла = ДиалогВыбораФайлаЛкс(РежимОткрытия, Расширение, ОписаниеФормата, ПолноеИмяФайла, Каталог, КраткоеИмя, Заголовок); + Если Не ВыборФайла.Выбрать() Тогда + Возврат Неопределено; + КонецЕсли; + Возврат ВыборФайла.ПолноеИмяФайла; + +КонецФункции + +Функция ДиалогВыбораФайлаЛкс(РежимОткрытия = Истина, Знач Расширение = "", ОписаниеФормата = "", Знач ПолноеИмяФайла = "", Знач Каталог = "", Знач КраткоеИмя = "", Знач Заголовок = "") Экспорт + + Если РежимОткрытия = Истина Тогда + РежимДиалога = РежимДиалогаВыбораФайла.Открытие; + Иначе + РежимДиалога = РежимДиалогаВыбораФайла.Сохранение; + КонецЕсли; + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалога); + ВыборФайла.Заголовок = Заголовок; + Если ЗначениеЗаполнено(ПолноеИмяФайла) Тогда + Файл = Новый Файл(ПолноеИмяФайла); + ВыборФайла.Каталог = Файл.Путь; + ВыборФайла.ПолноеИмяФайла = Файл.Имя; + Иначе + ВыборФайла.Каталог = Каталог; + ВыборФайла.ПолноеИмяФайла = КраткоеИмя; + КонецЕсли; + ВыборФайла.Расширение = Расширение; + Если Не ЗначениеЗаполнено(Расширение) Тогда + Расширение = "*"; + КонецЕсли; + ВыборФайла.Фильтр = ирОбщий.ФильтрДляВыбораФайлаЛкс(Расширение, ОписаниеФормата); + Возврат ВыборФайла; + +КонецФункции + +Функция ВыбратьКаталогВФормеЛкс(выхКаталог, ФормаДляУстановкиМодифицированности = Неопределено, Заголовок = "") Экспорт + + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ВыборФайла.Каталог = выхКаталог; + ВыборФайла.Заголовок = Заголовок; + Если Не ВыборФайла.Выбрать() Тогда + Возврат Неопределено; + КонецЕсли; + выхКаталог = ВыборФайла.Каталог; + Если ФормаДляУстановкиМодифицированности <> Неопределено Тогда + ФормаДляУстановкиМодифицированности.Модифицированность = Истина; + КонецЕсли; + Возврат выхКаталог; + +КонецФункции + +Функция МассивЗначенийПеретаскиванияЛкс(Знач ПараметрыПеретаскивания, выхМассивЗначений = Неопределено, выхТипЗначенияПервогоЭлемента = Неопределено) Экспорт + + ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; + выхТипЗначенияПервогоЭлемента = ТипЗнч(ЗначениеПеретаскивания); + Если выхТипЗначенияПервогоЭлемента = Тип("Массив") Тогда + выхТипЗначенияПервогоЭлемента = ТипЗнч(ЗначениеПеретаскивания[0]); + выхМассивЗначений = ЗначениеПеретаскивания; + Иначе + выхМассивЗначений = Новый Массив; + выхМассивЗначений.Добавить(ЗначениеПеретаскивания); + КонецЕсли; + Возврат выхМассивЗначений; + +КонецФункции + +// Подразумевается, что имена колонок табличного поля и коллекции совпадают +// Параметры: +// ТабличноеПоле - ТабличноеПоле +// ИмяКолонкиПометки - Строка - если пустая, то берется текущая колонка типа "Булево" или колонка с именем "Пометка" +// КлючеваяКолонка - Строка - задается только для таблиц без колонки НомерСтроки при необходимости отобрать строки +// ПроверятьОформлениеСтроки - Булево - долго +Процедура ИзменитьПометкиВыделенныхИлиОтобранныхСтрокЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ИмяКолонкиПометки = "", Знач НовоеЗначениеПометки = Истина, КлючеваяКолонка = "НомерСтроки", + СтруктураОтбора = Неопределено, Знач ИнтерактивнаяУстановка = Ложь) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если Не ЗначениеЗаполнено(ИмяКолонкиПометки) Тогда + КолонкаПометки = КолонкаПометкиТабличногоПоляЛкс(ТабличноеПоле); + Если КолонкаПометки <> Неопределено Тогда + ИмяКолонкиПометки = КолонкаПометки.Имя; + КонецЕсли; + КонецЕсли; + Если ТабличноеПоле.Колонки.Найти(ИмяКолонкиПометки) = Неопределено Тогда + Возврат; + КонецЕсли; + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + Колонка = ТабличноеПоле.Колонки[ИмяКолонкиПометки]; + Иначе + Колонка = ТабличноеПоле.ПодчиненныеЭлементы[ИмяКолонкиПометки]; + КонецЕсли; + УстановитьЗначениеВКолонкеТабличногоПоляТЧИлиТЗЛкс(ЭтаФорма, ТабличноеПоле, НовоеЗначениеПометки, "", Колонка, ТабличноеПоле.ВыделенныеСтроки.Количество() > 1, ИнтерактивнаяУстановка,, СтруктураОтбора); + +КонецПроцедуры + +Функция ВыбратьСсылкуЛкс(ИмяТаблицыИлиМДИлиТип, НачальноеЗначениеВыбора = Неопределено, ИспользоватьДинамическийСписокИР = Неопределено) Экспорт + + Результат = ОткрытьФормуСпискаЛкс(ИмяТаблицыИлиМДИлиТип,, ИспользоватьДинамическийСписокИР,, Истина,, НачальноеЗначениеВыбора, Истина); + Возврат Результат; + +КонецФункции + +Процедура ВыбратьИЗаполнитьТабличнуюЧастьОбъектаБДЛкс(ТаблицаИсточник, НачальноеПолноеИмяОбъекта = "") Экспорт + + ФормаВыбораОбъектаБД = ирКлиент.ФормаВыбораОбъектаМетаданныхЛкс(,, НачальноеПолноеИмяОбъекта,, Истина,, Истина, Истина,, Истина,,, Истина); + РезультатВыбора = ФормаВыбораОбъектаБД.ОткрытьМодально(); + Если РезультатВыбора = Неопределено Тогда + Возврат; + КонецЕсли; + ОбъектМД = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(РезультатВыбора.ПолноеИмяОбъекта); + ЭтоНаборЗаписей = ирОбщий.ЛиМетаданныеРегистраЛкс(ОбъектМД); + Если ЭтоНаборЗаписей Тогда + ПолноеИмяМДСписка = ОбъектМД.ПолноеИмя(); + Иначе + ПолноеИмяМДСписка = ОбъектМД.Родитель().ПолноеИмя(); + КонецЕсли; + МакетныйОбъект = Неопределено; + ТекущаяГруппаТипаМетаданных = Неопределено; + ирОбщий.ПолучитьМакетныйОбъектДанныхТаблицыБДЛкс(ПолноеИмяМДСписка, МакетныйОбъект, ТекущаяГруппаТипаМетаданных); + Если ЭтоНаборЗаписей Тогда + СтруктураОбъекта = МакетныйОбъект; + ТаблицаПриемник = СтруктураОбъекта.Данные; + Иначе + ВыбраннаяСтрока = ОткрытьФормуСпискаЛкс(ПолноеИмяМДСписка,,,, Истина,,, Истина); + Если ВыбраннаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + СтруктураОбъекта = ирОбщий.ОбъектДанныхИзСтрокиРезультатаЗапросаЛкс(ВыбраннаяСтрока, МакетныйОбъект, ТекущаяГруппаТипаМетаданных, Истина); + ТаблицаПриемник = СтруктураОбъекта.Данные[ОбъектМД.Имя]; + КонецЕсли; + Если ТаблицаПриемник.Количество() > 0 Тогда + Если ЭтоНаборЗаписей Тогда + ТекстВопроса = "Хотите очистить набор записей в памяти перед заполнением?"; + Иначе + ТекстВопроса = "Выбранная табличная часть объекта не пустая. Хотите очистить ее в памяти перед заполнением?"; + КонецЕсли; + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Да Тогда + ТаблицаПриемник.Очистить(); + КонецЕсли; + КонецЕсли; + ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(ТаблицаИсточник, ТаблицаПриемник); + ОбработкаРедактора = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирРедакторОбъектаБД"); + #Если Сервер И Не Сервер Тогда + ОбработкаРедактора = Обработки.ирРедакторОбъектаБД.Создать(); + #КонецЕсли + ФормаРедактора = ОбработкаРедактора.РедактироватьМодифицированныйОбъект(СтруктураОбъекта); + ФормаРедактора.ПоказатьЯчейкуДанныхОбъекта(РезультатВыбора.ПолноеИмяОбъекта); + +КонецПроцедуры + +// Функция - Сравнить значения в форме лкс +// +// Параметры: +// Значение1 - ТекстовыйДокумент, Строка, ТабличныйДокумент, ТаблицаЗначений - +// Значение2 - - +// Модально - - +// Название1 - - +// Название2 - - +// ПолучатьXMLПредставлениеДляНеизвестныхТипов - - +// ТекущееСвойство - - +// КлючУникальностиФормы - - +// РазрешитьКонвертациюВТаблицуЗначений - - +// ВариантСинтаксиса - Строка - "ВстроенныйЯзык", "ЯзыкЗапросов", "ЯзыкКомпоновки", "XML" +// ОбщееНазвание - - +// +Процедура Сравнить2ЗначенияВФормеЛкс(Знач Значение1, Знач Значение2, Знач Модально = Ложь, Знач Название1 = Неопределено, Знач Название2 = Неопределено, + ПолучатьXMLПредставлениеДляНеизвестныхТипов = Истина, ТекущееСвойство = "", КлючУникальностиФормы = Неопределено, РазрешитьКонвертациюВТаблицуЗначений = Ложь, ВариантСинтаксиса = "", + ОбщееНазвание = "") Экспорт + + Если Ложь + Или ТипЗнч(Значение1) = Тип("ТекстовыйДокумент") + Или ТипЗнч(Значение1) = Тип("ТабличныйДокумент") + Или ТипЗнч(Значение1) = Тип("Строка") + Или ТипЗнч(Значение1) = Тип("Дата") + Или ТипЗнч(Значение1) = Тип("Число") + Или ТипЗнч(Значение1) = Тип("Булево") + Или ТипЗнч(Значение1) = Тип("Неопределено") + Или ТипЗнч(Значение1) = Тип("УникальныйИдентификатор") + Тогда + СравнитьЗначенияВФормеЧерезXMLЛкс(Значение1, Значение2, Модально, Название1, Название2, ПолучатьXMLПредставлениеДляНеизвестныхТипов, ВариантСинтаксиса, ОбщееНазвание); + Возврат; + КонецЕсли; + Если РазрешитьКонвертациюВТаблицуЗначений Тогда + Если ирОбщий.ЛиКоллекцияЛкс(Значение1) Тогда + Значение1 = ирОбщий.ТаблицаЗначенийИзКоллекцииЛкс(Значение1); + КонецЕсли; + Если ирОбщий.ЛиКоллекцияЛкс(Значение2) Тогда + Значение2 = ирОбщий.ТаблицаЗначенийИзКоллекцииЛкс(Значение2); + КонецЕсли; + КонецЕсли; + Если Истина + И ТипЗнч(Значение1) = Тип("ТаблицаЗначений") + И ТипЗнч(Значение2) = Тип("ТаблицаЗначений") + Тогда + СравнитьТаблицыИнтерактивноЛкс(Значение1, Значение2, Модально); + Возврат; + КонецЕсли; + Объекты = Новый СписокЗначений; + Объекты.Добавить(Значение1, Название1); + Объекты.Добавить(Значение2, Название2); + СравнитьОбъектыВФормеЛкс(Объекты, Модально, ТекущееСвойство,, КлючУникальностиФормы); + +КонецПроцедуры + +Процедура СравнитьТаблицыИнтерактивноЛкс(Знач Значение1, Знач Значение2, Знач Модально = Ложь, Знач БезКлючевыхКолонок = Ложь) Экспорт + + Обработка = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирСравнениеТаблиц"); + #Если Сервер И Не Сервер Тогда + Обработка = Обработки.ирСравнениеТаблиц.Создать(); + #КонецЕсли + ФормаСравнителя = Обработка.ПолучитьФорму(); + ФормаСравнителя.ПараметрТаблица1 = Значение1; + ФормаСравнителя.ПараметрТаблица2 = Значение2; + ФормаСравнителя.ПараметрАвтозапуск = Истина; + ФормаСравнителя.ПараметрБезКлючевыхКолонок = БезКлючевыхКолонок; + Если Модально Тогда + ФормаСравнителя.ОткрытьМодально(); + Иначе + ФормаСравнителя.Открыть(); + ФормаСравнителя.СравнитьТаблицыВФорме(); + КонецЕсли; + +КонецПроцедуры + +// Процедура - Сравнить объекты в форме лкс +// +// Параметры: +// Объекты - СписокЗначений - +// Модально - - +// ТекущееСвойство - - +// ТекущийОбъект - - +// КлючУникальностиФормы - - +// ПараметрНомерЭталона - - +// +Процедура СравнитьОбъектыВФормеЛкс(Знач Объекты, Знач Модально = Ложь, ТекущееСвойство = "", ТекущийОбъект = Неопределено, КлючУникальностиФормы = Неопределено, Знач НомерЭталона = Неопределено, + Знач ЭтаФорма = Неопределено) Экспорт + + Если Объекты.Количество() = 0 Тогда + Возврат; + ИначеЕсли Объекты.Количество() = 1 Тогда + ДобавитьОбъектВБуферИПредложитьСравнениеЛкс(ТекущийОбъект, ЭтаФорма); + Возврат; + КонецЕсли; + Если ЭтаФорма <> Неопределено Тогда + ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); + КонецЕсли; + ФормаСравнителя = ирКэш.Получить().ПолучитьФорму("СравнениеОбъектов",, КлючУникальностиФормы); + ФормаСравнителя.ПараметрОбъекты = Объекты; + ФормаСравнителя.ПараметрТекущееСвойство = ТекущееСвойство; + ФормаСравнителя.ПараметрТекущийОбъект = ТекущийОбъект; + ФормаСравнителя.ПараметрНомерЭталона = НомерЭталона; + Если Модально Тогда + ФормаСравнителя.ОткрытьМодально(); + Иначе + ФормаСравнителя.Открыть(); + КонецЕсли; + +КонецПроцедуры + +Процедура СравнитьЗначенияВФормеЧерезXMLЛкс(Значение1, Значение2, Знач Модально = Ложь, Название1 = "", Название2 = "", Знач XMLПредставлениеДляНеизвестныхТипов = Истина, ВариантСинтаксиса = "", + ОбщееНазвание = "", РазрешитьСобственныйСравнитель = Истина) Экспорт + + Если Не ЗначениеЗаполнено(Название1) Тогда + Название1 = "первое"; + КонецЕсли; + Если Не ЗначениеЗаполнено(Название2) Тогда + Название2 = "второе"; + КонецЕсли; + Если Истина + И РазрешитьСобственныйСравнитель + И ирКэш.ДоступенРедакторМонакоЛкс() + И (Ложь + Или ТипЗнч(Значение1) = Тип("Строка") + Или ТипЗнч(Значение1) = Тип("ТекстовыйДокумент")) + И (Ложь + Или ТипЗнч(Значение2) = Тип("Строка") + Или ТипЗнч(Значение2) = Тип("ТекстовыйДокумент")) + Тогда + Если ТипЗнч(Значение1) = Тип("ТекстовыйДокумент") Тогда + Значение1 = Значение1.ПолучитьТекст(); + КонецЕсли; + Если ТипЗнч(Значение2) = Тип("ТекстовыйДокумент") Тогда + Значение2 = Значение2.ПолучитьТекст(); + КонецЕсли; + ФормаСравнителя = ирКэш.ФормаСравнителяТекстовЛкс(); + Если ФормаСравнителя.Открыта() Тогда + ФормаСравнителя = НоваяФормаСравнителяТекстовЛкс(); + КонецЕсли; + ФормаСравнителя.ВариантСинтаксиса = ВариантСинтаксиса; + ФормаСравнителя.ОбщееНазвание = ОбщееНазвание; + ФормаСравнителя.Заголовок1 = Название1; + ФормаСравнителя.Заголовок2 = Название2; + ФормаСравнителя.Текст1 = Значение1; + ФормаСравнителя.Текст2 = Значение2; + ФормаСравнителя.Открыть(); + Иначе + Путь1 = ПолучитьФайлЗначенияДляИнтерактивногоСравненияЛкс(Значение1, Название1, XMLПредставлениеДляНеизвестныхТипов); + Путь2 = ПолучитьФайлЗначенияДляИнтерактивногоСравненияЛкс(Значение2, Название2, XMLПредставлениеДляНеизвестныхТипов); + // Думал, так будет использовать существующее окно, но этого не происходит. + //Если СравнениеФайлов = Неопределено Тогда + СравнениеФайлов = Новый СравнениеФайлов; + //КонецЕсли; + СравнениеФайлов.ПервыйФайл = Путь1; + СравнениеФайлов.ВторойФайл = Путь2; + СравнениеФайлов.ИгнорироватьПустоеПространство = Ложь; + Если Истина + И ТипЗнч(Значение1) = Тип("ТабличныйДокумент") + И ТипЗнч(Значение2) = Тип("ТабличныйДокумент") + Тогда + СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТабличныйДокумент; + Иначе + СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент; + КонецЕсли; + Если Не Модально И СравнениеФайлов.Сравнить() Тогда + ирОбщий.СообщитьЛкс("Файлы идентичны"); + Иначе + Если Модально Тогда + СравнениеФайлов.ПоказатьРазличияМодально(); + Иначе + СравнениеФайлов.ПоказатьРазличия(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьФайлЗначенияДляИнтерактивногоСравненияЛкс(Значение, Название, XMLПредставлениеДляНеизвестныхТипов = Истина) Экспорт + + Если Ложь + Или ТипЗнч(Значение) = Тип("ТабличныйДокумент") + Или ТипЗнч(Значение) = Тип("ТекстовыйДокумент") + Тогда + Документ = Значение; + Иначе + Документ = Новый ТекстовыйДокумент; + Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда + Значение = Значение.Получить(); + КонецЕсли; + Если ТипЗнч(Значение) <> Тип("Строка") И XMLПредставлениеДляНеизвестныхТипов Тогда + Представление = ирОбщий.ОбъектВСтрокуXMLЛкс(Значение); + Представление = ирОбщий.ДекодироватьТекстИзXMLЛкс(Представление); + Иначе + Представление = Значение; + КонецЕсли; + Документ.УстановитьТекст(Представление); + КонецЕсли; + Путь = ПолучитьИмяВременногоФайла(Название); + Документ.Записать(Путь); + Возврат Путь; + +КонецФункции + +Функция НоваяФормаСравнителяТекстовЛкс() Экспорт + + ФормаСравнителя = ирКэш.Получить().ПолучитьФорму("СравнениеТекстов",, Новый УникальныйИдентификатор); + Возврат ФормаСравнителя; + +КонецФункции + +// Сравнивает табличный документ, полученный из элемента управления с предыдущим. +// +// Параметры: +// СравнительТабличныхДокументов - Массив, *Неопределено - переменная для хранения предыдущего табличного документа. +// ЭлементУправления - ТабличноеПоле, ПолеТабличногоДокумента - откуда получаем содержимое. +// ВариантСинтаксиса - Строка - "ВстроенныйЯзык", "ЯзыкЗапросов", "ЯзыкКомпоновки", "XML" +// +Процедура ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(ЭтаФорма, ЭлементУправления, ВариантСинтаксиса = "") Экспорт + + Если Ложь + Или ТипЗнч(ЭлементУправления) = Тип("ПолеТекстовогоДокумента") + Или ТипЗнч(ЭлементУправления) = Тип("ПолеHTMLДокумента") + Или ТипЗнч(ЭлементУправления) = Тип("ПолеВвода") + Или ЛиОболочкаТекстаЛкс(ЭлементУправления) + Тогда + ПолеТекста = ОболочкаПоляТекстаЛкс(ЭлементУправления); + #Если Сервер И Не Сервер Тогда + ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + СравниваемыйДокумент = Новый ТекстовыйДокумент; + СравниваемыйДокумент.УстановитьТекст(ПолеТекста.ПолучитьТекст()); + ЗаголовокЭлементаФормы = ирОбщий.ПредставлениеИзИдентификатораЛкс(ПолеТекста.ЭлементФормы.Имя); + ИначеЕсли Ложь + Или ТипЗнч(ЭлементУправления) = Тип("ТабличноеПоле") + Или ТипЗнч(ЭлементУправления) = Тип("ТаблицаФормы") + Тогда + СравниваемыйДокумент = ВывестиСтрокиТабличногоПоляСНастройкойЛкс(ЭтаФорма, ЭлементУправления); + Если СравниваемыйДокумент = Неопределено Тогда + Возврат; + КонецЕсли; + ЗаголовокЭлементаФормы = ирОбщий.ПредставлениеИзИдентификатораЛкс(ЭлементУправления.Имя); + ИначеЕсли Ложь + Или ТипЗнч(ЭлементУправления) = Тип("ПолеТабличногоДокумента") + Или (Истина + И ТипЗнч(ЭлементУправления) = Тип("ПолеФормы") + И ЭлементУправления.Вид = ВидПоляФормы.ПолеТабличногоДокумента) + Тогда + ТабличныйДокумент = ирОбщий.ДанныеЭлементаФормыЛкс(ЭлементУправления); + СравниваемыйДокумент = ПолучитьОбластьТабличногоДокументаИнтерактивноЛкс(ТабличныйДокумент); + ЗаголовокЭлементаФормы = ирОбщий.ПредставлениеИзИдентификатораЛкс(ЭлементУправления.Имя); + Иначе + ирОбщий.СообщитьЛкс("Неподдерживаемый тип элемента управления для сравнения"); + Возврат; + КонецЕсли; + ДобавитьОбъектВБуферИПредложитьСравнениеЛкс(СравниваемыйДокумент, ЭтаФорма,, ЗаголовокЭлементаФормы, ВариантСинтаксиса); + +КонецПроцедуры + +Процедура ТабличноеПолеИлиТаблицаФормы_СравнитьСтрокиЛкс(ЭтаФорма, ТабличноеПоле) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; + ПолноеИмяТаблицы = ""; + ОбщийТип = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицы); + Объекты = Новый СписокЗначений; + ТекущийОбъект = Неопределено; + Если ОбщийТип = "Список" И ЗначениеЗаполнено(ПолноеИмяТаблицы) Тогда + //Если Истина + // И ТабличноеПоле.ВыделенныеСтроки.Количество() > 2 + // И ирОбщий.ЛиКорневойТипСсылкиЛкс(ирОбщий.КорневойТипКонфигурацииЛкс(ПолноеИмяТаблицы)) + //Тогда + // Объекты = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + // ФормаОбработки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирПоискДублейИЗаменаСсылок.Форма"); + // ФормаОбработки.ОткрытьДляЗаменыПоСпискуСсылок(Объекты,, 0); + // Возврат; + //КонецЕсли; + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + Объекты.Добавить(ВыделеннаяСтрока); + КонецЦикла; + ТекущийОбъект = ТабличноеПоле.ТекущаяСтрока; + Иначе + ТаблицаЗначений = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, ВыделенныеСтроки,,,,,, ТекущийОбъект); + Для Каждого ВыделеннаяСтрока Из ТаблицаЗначений Цикл + Объекты.Добавить(ВыделеннаяСтрока); + КонецЦикла; + КонецЕсли; + ТекущаяКолонка = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + СравнитьОбъектыВФормеЛкс(Объекты,, ТекущаяКолонка, ТекущийОбъект,,, ЭтаФорма); + +КонецПроцедуры + +// Ф +// Параметры: +// ВариантСинтаксиса - Строка - "ВстроенныйЯзык", "ЯзыкЗапросов", "ЯзыкКомпоновки", "XML" +Процедура ДобавитьОбъектВБуферИПредложитьСравнениеЛкс(Знач ЗначениеДляСравнения, Знач ЭтаФорма = Неопределено, Знач ТекущееСвойство = "", ЗаголовокЭлементаФормы = "", ВариантСинтаксиса = "") Экспорт + + МассивСравнения = ДобавитьОбъектВБуферСравненияЛкс(ЗначениеДляСравнения); + Если МассивСравнения.Количество() = 2 Тогда + //Если ПолеТекста <> Неопределено Тогда + // #Если Сервер И Не Сервер Тогда + // ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + // #КонецЕсли + // РедакторHTML = ПолеТекста.РедакторHTML(); + // Если РедакторHTML <> Неопределено Тогда + // РедакторHTML.compare(МассивСравнения[0].ПолучитьТекст()); + // Возврат; + // КонецЕсли; + //КонецЕсли; + Ответ = Вопрос("Сравнить с предыдущим?", РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Нет Тогда + МассивСравнения.Удалить(0); + Возврат; + КонецЕсли; + Если ЭтаФорма <> Неопределено Тогда + ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); + КонецЕсли; + СравниваемыйДокумент1 = МассивСравнения[0]; + СравниваемыйДокумент2 = МассивСравнения[1]; + Сравнить2ЗначенияВФормеЛкс(СравниваемыйДокумент1, СравниваемыйДокумент2,,,,, ТекущееСвойство,,, ВариантСинтаксиса, ЗаголовокЭлементаФормы); + МассивСравнения.Очистить(); + Иначе + ирОбщий.СообщитьЛкс("Первое значение для сравнения запомнено. Теперь передайте второе значение."); + КонецЕсли; + +КонецПроцедуры + +Функция ДобавитьОбъектВБуферСравненияЛкс(Знач ЗначениеДляСравнения) Экспорт + + МассивСравнения = ирКэш.БуферСравненияЛкс("" + ТипЗнч(ЗначениеДляСравнения)); + #Если Сервер И Не Сервер Тогда + МассивСравнения = Новый Массив; + #КонецЕсли + Если МассивСравнения.Количество() = 2 Тогда + МассивСравнения.Удалить(0); + КонецЕсли; + МассивСравнения.Добавить(ЗначениеДляСравнения); + Возврат МассивСравнения; + +КонецФункции + +Функция ПолучитьОбластьТабличногоДокументаИнтерактивноЛкс(ТабличныйДокумент) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличныйДокумент = Новый ТабличныйДокумент; + #КонецЕсли + Если Не ЛиОбластьЯчеекТабличногоДокументаОбъединенаЛкс(ТабличныйДокумент) Тогда + Ответ = Вопрос("Использовать только текущую область (Да) иначе будет использован весь документ (Нет)?", РежимДиалогаВопрос.ДаНет); + Иначе + Ответ = КодВозвратаДиалога.Нет; + КонецЕсли; + Если Ответ = КодВозвратаДиалога.Да Тогда + Результат = ТабличныйДокумент.ПолучитьОбласть(ТабличныйДокумент.ТекущаяОбласть.Имя); + ЗаполнитьЗначенияСвойств(Результат, ТабличныйДокумент,, "ВыделенныеОбласти, ТекущаяОбласть"); + Результат.ТекущаяОбласть = Результат.Область(); + Иначе + Результат = ТабличныйДокумент.ПолучитьОбласть(); + ЗаполнитьЗначенияСвойств(Результат, ТабличныйДокумент); + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ЛиОбластьЯчеекТабличногоДокументаОбъединенаЛкс(Знач ТабличныйДокумент, Знач ТекущаяОбласть = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличныйДокумент = Новый ТабличныйДокумент; + #КонецЕсли + Если ТекущаяОбласть = Неопределено Тогда + ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть; + КонецЕсли; + Область = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, ТекущаяОбласть.Лево); + Возврат ТекущаяОбласть.Низ = Область.Низ И ТекущаяОбласть.Право = Область.Право; + +КонецФункции + +Функция ВывестиСтрокиТабличногоПоляСНастройкойЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, ВыводБезОформления = Истина, Знач НастройкиСписка = Неопределено, выхТекущаяСтрока = Неопределено) Экспорт + + ФормаНастройки = ирКэш.Получить().ПолучитьФорму("ПараметрыВыводаСтрокТаблицы", ЭтаФорма); + ФормаНастройки.ТабличноеПоле = ТабличноеПоле; + Если ВыводБезОформления <> Неопределено Тогда + ФормаНастройки.БезОформления = ВыводБезОформления; + КонецЕсли; + РезультатФормы = ФормаНастройки.ОткрытьМодально(); + Если РезультатФормы = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + выхТекущаяСтрока = Неопределено; + Результат = ВывестиСтрокиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, ФормаНастройки,, выхТекущаяСтрока, НастройкиСписка); + Возврат Результат; + +КонецФункции + +Функция ВывестиСтрокиТабличногоПоляЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ПараметрыВывода, Отладка = Ложь, выхТекущаяСтрока = Неопределено, Знач НастройкиСписка = Неопределено) Экспорт + + КлючТекущейСтроки = Неопределено; + ИндексТекущейСтроки = Неопределено; + ПолноеИмяТаблицыБД = ""; + ДанныеТабличногоПоля = Неопределено; + ТипИсточника = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицыБД, ДанныеТабличногоПоля); + ВыбранныеКолонки = ПараметрыВывода.КолонкиТабличногоПоля.Выгрузить(Новый Структура("Пометка", Истина)); + МассивСтрок = Неопределено; + ЗначениеТабличногоПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + Если ЗначениеТабличногоПоля = Неопределено Тогда + КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле,,, Ложь); + ИначеЕсли ТипЗнч(ЗначениеТабличногоПоля) = Тип("ДанныеФормыДерево") Тогда + ЗначениеТабличногоПоля = ДанныеФормыВЗначение(ЗначениеТабличногоПоля, Тип("ДеревоЗначений")); + КонецЕсли; + Если ТипИсточника = "Список" И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда + КлючТекущейСтроки = ирОбщий.СтруктураКлючаТаблицыБДЛкс(ПолноеИмяТаблицыБД); + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(КлючТекущейСтроки, ТабличноеПоле.ТекущаяСтрока); + КонецЕсли; + Если ПараметрыВывода.ТолькоВыделенныеСтроки Тогда + КоллекцияСтрок = КлючиВыделенныхСтрокИмитатораДинамическогоСпискаЛкс(ТабличноеПоле); + ИначеЕсли ДанныеТабличногоПоля = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Иначе + Если ПараметрыВывода.ТолькоВыделенныеСтроки Тогда + МассивСтрок = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + Если ТипЗнч(ЗначениеТабличногоПоля) = Тип("ДеревоЗначений") Тогда + Если МассивСтрок <> Неопределено Тогда + КоллекцияСтрок = МассивСтрок; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок,, Ложь); + КонецЕсли; + Иначе + КоллекцияСтрок = ЗначениеТабличногоПоля.Строки; + Если ТипЗнч(ТабличноеПоле.ТекущаяСтрока) = Тип("СтрокаДереваЗначений") Тогда + ИндексТекущейСтроки = КоллекцияСтрок.Индекс(ТабличноеПоле.ТекущаяСтрока); + КонецЕсли; + КонецЕсли; + ИначеЕсли Ложь + Или ТипИсточника = "ТабличнаяЧасть" + Или ТипИсточника = "НаборЗаписей" + Или ТипИсточника = "ТаблицаЗначений" + Тогда + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + //ИндексТекущейСтроки = ЗначениеТабличногоПоля.Индекс(ТабличноеПоле.ТекущаяСтрока); + ИндексТекущейСтроки = ЗначениеТабличногоПоля.Индекс(ТабличноеПоле.ТекущиеДанные); + КонецЕсли; + Если ПараметрыВывода.БезОформления Тогда + КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок, Истина); + Иначе + Если МассивСтрок <> Неопределено Тогда + КоллекцияСтрок = МассивСтрок; + ИначеЕсли ТипИсточника = "ТаблицаЗначений" Или Не ирОбщий.ЛиОтборУстановленЛкс(ТабличноеПоле.ОтборСтрок) Тогда + КоллекцияСтрок = ТабличноеПоле.Значение; + Иначе + КоллекцияСтрок = Новый Массив; + ТекущаяСтрока = Неопределено; + КопияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок, Истина,,,,, ТекущаяСтрока); + Для Каждого КопияСтроки Из КопияСтрок Цикл + КоллекцияСтрок.Добавить(ТабличноеПоле.Значение[КопияСтроки.НомерСтроки - 1]); + КонецЦикла; + Если ТекущаяСтрока <> Неопределено Тогда + ИндексТекущейСтроки = КопияСтрок.Индекс(ТекущаяСтрока); + КонецЕсли; + КонецЕсли; + КонецЕсли; + ИначеЕсли Ложь + Или ТипИсточника = "Список" + Тогда + КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок, Истина); + Иначе + Попытка + КоллекцияСтрок = ДанныеТабличногоПоля.Элементы; // Для компоновки + Исключение + КонецПопытки; + КонецЕсли; + КонецЕсли; + Если ПараметрыВывода.БезОформления Тогда + Иерархия = Ложь; + Если ТипИсточника = "Список" И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда + КоллекцияСтрок = ДанныеСтрокДинамическогоСпискаЛкс(ТабличноеПоле, КоллекцияСтрок, ВыбранныеКолонки, НастройкиСписка, ПараметрыВывода.КоличествоПервых); + #Если Сервер И Не Сервер Тогда + КоллекцияСтрок = Новый ТаблицаЗначений; + #КонецЕсли + ВыбранныеКолонки = Неопределено; + ТекущаяСтрока = КоллекцияСтрок.НайтиСтроки(КлючТекущейСтроки); + Если ТекущаяСтрока.Количество() > 0 Тогда + ИндексТекущейСтроки = КоллекцияСтрок.Индекс(ТекущаяСтрока[0]); + КонецЕсли; + Если ирОбщий.ЛиКорневойТипСсылкиЛкс(ирОбщий.ТипТаблицыБДЛкс(ПолноеИмяТаблицыБД)) И ПараметрыВывода.КолонкиИдентификаторов Тогда + //ВыбранныеКолонки.Добавить("Ссылка"); + КоллекцияСтрок.Колонки.Добавить("ИдентификаторСсылкиЛкс",, "Идентификатор ссылки"); + //Если ВыбранныеКолонки.Найти("ИдентификаторСсылкиЛкс") = Неопределено Тогда + // ВыбранныеКолонки.Добавить("ИдентификаторСсылкиЛкс"); + //КонецЕсли; + Для Каждого СтрокаКоллекции Из КоллекцияСтрок Цикл + СтрокаКоллекции.ИдентификаторСсылкиЛкс = ирОбщий.ИдентификаторСсылкиЛкс(СтрокаКоллекции.Ссылка); + КонецЦикла; + КонецЕсли; + ИначеЕсли ТипЗнч(ЗначениеТабличногоПоля) = Тип("ДеревоЗначений") Тогда + ТаблицаСтрокДерева = Новый ТаблицаЗначений; + ТаблицаСтрокДерева.Колонки.Добавить("_ИДВетки"); + ТаблицаСтрокДерева.Колонки.Добавить("_ИДВеткиРодителя"); + Иерархия = Истина; + Для Каждого КолонкаДерева Из ЗначениеТабличногоПоля.Колонки Цикл + ТаблицаСтрокДерева.Колонки.Добавить(КолонкаДерева.Имя, КолонкаДерева.ТипЗначения, КолонкаДерева.Заголовок, КолонкаДерева.Ширина); + КонецЦикла; + Если ТипЗнч(КоллекцияСтрок) = Тип("КоллекцияСтрокДереваЗначений") Тогда + КоллекцияСтрок = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ЗначениеТабличногоПоля); + КонецЕсли; + КэшПутей = Новый Соответствие; + Для Каждого СтрокаДерева Из КоллекцияСтрок Цикл + СтрокаТаблицы = ТаблицаСтрокДерева.Добавить(); + Если СтрокаДерева.Строки.Количество() = 0 Тогда + СтрокаТаблицы._ИДВетки = "_"; + Иначе + ПутьКВетке = КэшПутей[СтрокаДерева]; + Если ПутьКВетке = Неопределено Тогда + ПутьКВетке = ирОбщий.Дерево_ПутьСтрокойЛкс(СтрокаДерева, ""); + КэшПутей[СтрокаДерева] = ПутьКВетке; + КонецЕсли; + СтрокаТаблицы._ИДВетки = ПутьКВетке; + КонецЕсли; + Если СтрокаДерева.Родитель <> Неопределено Тогда + ПутьКРодителю = КэшПутей[СтрокаДерева.Родитель]; + Если ПутьКРодителю = Неопределено Тогда + ПутьКРодителю = ирОбщий.Дерево_ПутьСтрокойЛкс(СтрокаДерева.Родитель, ""); + КэшПутей[СтрокаДерева.Родитель] = ПутьКРодителю; + КонецЕсли; + СтрокаТаблицы._ИДВеткиРодителя = ПутьКРодителю; + КонецЕсли; + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаДерева); + КонецЦикла; + КэшПутей = Неопределено; + КоллекцияСтрок = ТаблицаСтрокДерева; + ИначеЕсли ТипЗнч(КоллекцияСтрок) <> Тип("ТаблицаЗначений") Тогда + КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок, Истина); + КонецЕсли; + Если ВыбранныеКолонки <> Неопределено Тогда + Для Каждого КолонкаКоллекции Из КоллекцияСтрок.Колонки Цикл + ВыбраннаяКолонка = ВыбранныеКолонки.Найти(КолонкаКоллекции.Имя, "Данные"); + Если ВыбраннаяКолонка <> Неопределено Тогда + КолонкаКоллекции.Заголовок = ВыбраннаяКолонка.Заголовок; + КонецЕсли; + КонецЦикла; + ВыбранныеКолонки = ВыбранныеКолонки.ВыгрузитьКолонку("Данные"); + КонецЕсли; + ИмяТекущейКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + Результат = ирОбщий.ВывестиТаблицуВТабличныйДокументИлиТаблицуЗначенийЛкс(КоллекцияСтрок,,, ПараметрыВывода.ИтогиЧисловыхКолонок,, ПараметрыВывода.ВстроитьЗначенияВРасшифровки, + ПараметрыВывода.ОтображатьПустые, ПараметрыВывода.КолонкиИдентификаторов, ПараметрыВывода.КолонкиТипов, ПараметрыВывода.КолонкиЗначений, ВыбранныеКолонки, ИмяТекущейКолонки, + ПараметрыВывода.ВыводВТаблицуЗначений, Отладка, ПараметрыВывода.КолонкиРазмеров, ПараметрыВывода.СузитьТипы, Иерархия); + Иначе + Если ТипИсточника = "Список" Тогда + КоллекцияСтрок = ДанныеСтрокДинамическогоСпискаЛкс(ТабличноеПоле, КоллекцияСтрок,, НастройкиСписка, ПараметрыВывода.КоличествоПервых); + #Если Сервер И Не Сервер Тогда + КоллекцияСтрок = Новый ТаблицаЗначений; + #КонецЕсли + ТекущаяСтрока = КоллекцияСтрок.НайтиСтроки(КлючТекущейСтроки); + Если ТекущаяСтрока.Количество() > 0 Тогда + ИндексТекущейСтроки = КоллекцияСтрок.Индекс(ТекущаяСтрока[0]); + КонецЕсли; + Если ирОбщий.ЛиКорневойТипСсылкиЛкс(ирОбщий.ТипТаблицыБДЛкс(ПолноеИмяТаблицыБД)) Тогда + КоллекцияСтрок = КоллекцияСтрок.ВыгрузитьКолонку("Ссылка"); + КонецЕсли; + КонецЕсли; + Если ПараметрыВывода.ВыводВТаблицуЗначений Тогда + Результат = Новый ТаблицаЗначений; + Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл + Колонка = ТабличноеПоле.Колонки[ВыбраннаяКолонка.Имя]; + //Если Колонка.Имя = ирКэш.ИмяКолонкиНомерСтрокиЛкс() Тогда + // Продолжить; + //КонецЕсли; + //Если Колонка.Видимость Тогда + КолонкаПриемник = Результат.Колонки.Добавить(Колонка.Имя, Новый ОписаниеТипов("Строка"), ВыбраннаяКолонка.Заголовок); + //КонецЕсли; + КонецЦикла; + ВыбранныеКолонки = ВыбранныеКолонки.ВыгрузитьКолонку("Имя"); + ВывестиСтрокиТабличногоПоляСОформлениемЛкс(ЭтаФорма, КоллекцияСтрок,, Результат, ТабличноеПоле,, ПараметрыВывода.ВстроитьЗначенияВРасшифровки, ВыбранныеКолонки); + Иначе + Результат = Новый ТабличныйДокумент; + НомерКолонки = 1; + НомерСтроки = 1; + ОбластьТаблицы = Результат.Область(); + ОбластьТаблицы.ЦветРамки = ЦветаСтиля.ЦветРамки; + ОбластьЗаголовков = Результат.Область(НомерСтроки, 0, НомерСтроки, 0); + ОбластьЗаголовков.ЦветФона = ТабличноеПоле.ЦветФонаШапки; + ОбластьЗаголовков.ЦветТекста = ТабличноеПоле.ЦветТекстаШапки; + Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл + Колонка = ТабличноеПоле.Колонки[ВыбраннаяКолонка.Имя]; + //Если Колонка.Имя = ирКэш.ИмяКолонкиНомерСтрокиЛкс() Тогда + // Продолжить; + //КонецЕсли; + //Если Колонка.Видимость Тогда + ОбластьЗаголовка = Результат.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + ОбластьЗаголовка.Текст = ВыбраннаяКолонка.Заголовок; + ОбластьЗаголовка.ЦветФона = Колонка.ЦветФонаШапки; + ОбластьЗаголовка.ЦветТекста = Колонка.ЦветТекстаШапки; + //ШиринаКолонки = Колонка.Ширина; + //Если ШиринаКолонки <= 0 Тогда + // Если ЗначениеЗаполнено(Колонка.Данные) Тогда + // ШиринаКолонки = ЗначениеТабличногоПоля.Колонки[Колонка.Данные].Ширина; + // Если ШиринаКолонки = 0 Тогда + // ШиринаКолонки = 30; + // КонецЕсли; + // Иначе + // ШиринаКолонки = 30; + // КонецЕсли; + //КонецЕсли; + //ШиринаКолонки = Мин(ШиринаКолонки, 50); + //ШиринаКолонки = Макс(ШиринаКолонки, 10); + //ОбластьЗаголовка.ШиринаКолонки = ШиринаКолонки; + ОбластьЗаголовка.ЦветФона = ЦветаСтиля.ЦветФонаШапкиТаблицы; + ОбластьЗаголовка.ЦветТекста = ЦветаСтиля.ЦветТекстаШапкиТаблицы; + УстановитьГраницыОбластиТабличногоДокументаИзТабличногоПоляЛкс(ОбластьЗаголовка, ТабличноеПоле); + НомерКолонки = НомерКолонки + 1; + //КонецЕсли; + КонецЦикла; + ВыбранныеКолонки = ВыбранныеКолонки.ВыгрузитьКолонку("Имя"); + ВывестиСтрокиТабличногоПоляСОформлениемЛкс(ЭтаФорма, КоллекцияСтрок, НомерСтроки, Результат, ТабличноеПоле,, ПараметрыВывода.ВстроитьЗначенияВРасшифровки, ВыбранныеКолонки); + УстановитьАвтоширинуКолонокТабличногоДокументаЛкс(Результат); + Если ТабличноеПоле.ТекущаяКолонка <> Неопределено Тогда + ИндексКолонки = ВыбранныеКолонки.Найти(ТабличноеПоле.ТекущаяКолонка.Имя); + Если ИндексКолонки <> Неопределено Тогда + Результат.ТекущаяОбласть = Результат.Область(2, ИндексКолонки + 1); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Результат <> Неопределено Тогда + Если ПараметрыВывода.ТолькоВыделенныеСтроки Или ИндексТекущейСтроки = Неопределено Тогда + ИндексТекущейСтроки = 0; + КонецЕсли; + Если ТипЗнч(Результат) = Тип("ТабличныйДокумент") Тогда + НомерСтроки = ИндексТекущейСтроки + 2; + Результат.ТекущаяОбласть = Результат.Область(НомерСтроки, Результат.ТекущаяОбласть.Лево); + ИначеЕсли Результат.Количество() > ИндексТекущейСтроки И ИндексТекущейСтроки >= 0 Тогда + выхТекущаяСтрока = Результат[ИндексТекущейСтроки]; + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Функция - Данные строк динамического списка лкс +// +// Параметры: +// ТабличноеПоле - - +// КлючиСтрок - - +// ВыбранныеКолонки - Строка, ТаблицаЗначений - Если строка, то имена через запятую. Если таблица значений, то ее колонки: Данные, Заголовок +// НастройкиСписка - - +// КоличествоПервых - - +// ЭтаФорма - Форма - нужна для кэширования запроса итогов +// ТолькоСуммируемыеКолонки - Булево - данные только для расчета итогов +// +// Возвращаемое значение: +// - +// +Функция ДанныеСтрокДинамическогоСпискаЛкс(Знач ТабличноеПоле, Знач КлючиСтрок = Неопределено, Знач ВыбранныеКолонки = Неопределено, НастройкиСписка = Неопределено, + Знач КоличествоПервых = 100000, Знач ЭтаФорма = Неопределено, Знач ТолькоСуммируемыеКолонки = Ложь) Экспорт + + ПолноеИмяТаблицы = ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле); + Если Истина + И ирОбщий.ЛиКорневойТипВнешнегоИсточникаДанныхЛкс(ирОбщий.ПервыйФрагментЛкс(ПолноеИмяТаблицы)) + И КлючиСтрок <> Неопределено + Тогда + // https://www.hostedredmine.com/issues/916752 + Результат = КлючиСтрок; + Иначе + СтруктураКлюча = ирОбщий.СтруктураКлючаТаблицыБДЛкс(ПолноеИмяТаблицы,,, Ложь); + ДинамическийСписок = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + СхемаИНастройки = Неопределено; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + СхемаИНастройки = ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(ирОбщий.РодительЭлементаУправляемойФормыЛкс(ТабличноеПоле), ТабличноеПоле.Имя); + КонецЕсли; + Если СхемаИНастройки <> Неопределено Тогда + СхемаКомпоновки = СхемаИНастройки.Схема; + ирОбщий.ДобавитьПоляНабораДанныхЛкс(ПолноеИмяТаблицы, СхемаКомпоновки); + НастройкаКомпоновки = СхемаИНастройки.Настройки; + Иначе + ПсведонимТаблицы = "Таблица" + ирОбщий.СуффиксСлужебногоСвойстваЛкс(); + СхемаКомпоновки = ирОбщий.СоздатьСхемуКомпоновкиТаблицыБДЛкс(ПолноеИмяТаблицы,,,, ПсведонимТаблицы,, Истина, КоличествоПервых); + НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + #КонецЕсли + Если ДинамическийСписок = Неопределено Тогда + Если КлючиСтрок = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Иначе + Если НастройкиСписка = Неопределено Тогда + НастройкиСписка = ирОбщий.НастройкиДинамическогоСпискаЛкс(ДинамическийСписок); + КонецЕсли; + #Если Сервер И Не Сервер Тогда + НастройкиСписка = Новый НастройкиКомпоновкиДанных; + #КонецЕсли + ирОбщий.СкопироватьОтборЛюбойЛкс(НастройкаКомпоновки.Отбор, НастройкиСписка.Отбор); + Если Не ирОбщий.ЛиКорневойТипПеречисленияЛкс(ирОбщий.ПервыйФрагментЛкс(ПолноеИмяТаблицы)) Тогда + ирОбщий.СкопироватьПорядокЛюбойЛкс(НастройкаКомпоновки.Порядок, НастройкиСписка.Порядок); + КонецЕсли; + КонецЕсли; + Для Каждого КлючИЗначение Из СтруктураКлюча Цикл + ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, КлючИЗначение.Ключ); + ПолеНабора = СхемаКомпоновки.НаборыДанных[0].Поля.Найти(КлючИЗначение.Ключ); + Если ПолеНабора = Неопределено Тогда + ПолеНабора = СхемаКомпоновки.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); + ПолеНабора.Поле = КлючИЗначение.Ключ; + ПолеНабора.ПутьКДанным = КлючИЗначение.Ключ; + КонецЕсли; + ПолеНабора.Роль.Обязательное = Истина; + КонецЦикла; + Если ВыбранныеКолонки <> Неопределено Тогда + Если ТипЗнч(ВыбранныеКолонки) = Тип("Строка") Тогда + // Сюда приходим из различных значений колонки и из расчета итогов табличного поля динамического списка + ИменаВыбранныхКолонок = ирОбщий.СтрРазделитьЛкс(ВыбранныеКолонки, ",", Истина); + ВыбранныеКолонки = Новый ТаблицаЗначений; + ВыбранныеКолонки.Колонки.Добавить("Данные"); + ВыбранныеКолонки.Колонки.Добавить("Заголовок"); + Для Каждого ИмяКолонки Из ИменаВыбранныхКолонок Цикл + СтрокаКолонки = ВыбранныеКолонки.Добавить(); + СтрокаКолонки.Данные = ИмяКолонки; + КонецЦикла; + КонецЕсли; + Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл + Если Не ЗначениеЗаполнено(ВыбраннаяКолонка.Данные) Тогда + Продолжить; + КонецЕсли; + ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ВыбраннаяКолонка.Данные); + КонецЦикла; + КонецЕсли; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); + КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки); + ирОбщий.КомпоновщикНастроекВосстановитьЛкс(КомпоновщикНастроек); + НастройкаКомпоновки = КомпоновщикНастроек.Настройки; + КонецЕсли; + Если Истина + И КлючиСтрок <> Неопределено + И ирКэш.ДоступнаСхемаЗапросаЛкс() + И ирКэш.НомерРежимаСовместимостиЛкс() > 803001 + И ТолькоСуммируемыеКолонки + Тогда + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + Запрос = ДопСвойства.ЗапросИтоговПоТаблицеКлючей; + Если Запрос = Неопределено Тогда + Запрос = ирОбщий.ЗапросИзКомпоновкиЛкс(СхемаКомпоновки, НастройкаКомпоновки); + Запрос = ирОбщий.ЗапросОтбораПоТаблицеКлючейЛкс(Запрос, СтруктураКлюча, Истина); + ДопСвойства.ЗапросИтоговПоТаблицеКлючей = Запрос; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + Запрос = Новый Запрос; + #КонецЕсли + Запрос.Параметры.Вставить("Ключи", ТаблицаКлючейВыделенныхСтрокДинСпискаЛкс(ТабличноеПоле, ПолноеИмяТаблицы)); + Иначе + Если КлючиСтрок <> Неопределено Тогда + ГруппаИли = НастройкаКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + ГруппаИли.Использование = Истина; + Для Каждого КлючСтроки Из КлючиСтрок Цикл + ГруппаИ = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; + ГруппаИ.Использование = Истина; + ЗначениеПоляКлюча = Неопределено; + Для Каждого КлючИЗначение Из СтруктураКлюча Цикл + Если ирОбщий.ЛиТипСсылкиТочкиМаршрутаЛкс(ТипЗнч(КлючСтроки)) Тогда + ЗначениеПоляКлюча = КлючСтроки; + Иначе + ЗначениеПоляКлюча = КлючСтроки[КлючИЗначение.Ключ]; + КонецЕсли; + ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИ, КлючИЗначение.Ключ, ЗначениеПоляКлюча); + КонецЦикла; + Если Истина + И СтруктураКлюча.Количество() = 1 + И ТипЗнч(ЗначениеПоляКлюча) = Тип("УникальныйИдентификатор") + Тогда + // Антибаг платформы https://www.hostedredmine.com/issues/895239 + ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИ); + КонецЕсли; + КонецЦикла; + КонецЕсли; + // https://www.hostedredmine.com/issues/897644 + // Обеспечиваем наличие всех полей ключа. Некоторые могли быть отключены + Запрос = ирОбщий.ЗапросИзКомпоновкиЛкс(СхемаКомпоновки, НастройкаКомпоновки, Истина); + КонецЕсли; + #Если Сервер И Не Сервер Тогда + Запрос = Новый Запрос; + #КонецЕсли + Результат = Запрос.Выполнить().Выгрузить(); + Если ВыбранныеКолонки <> Неопределено Тогда + Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл + Если Не ЗначениеЗаполнено(ВыбраннаяКолонка.Данные) Тогда + Продолжить; + КонецЕсли; + ИмяКолонки = СтрЗаменить(ВыбраннаяКолонка.Данные, ".", ""); + КолонкаРезультата = Результат.Колонки.Найти(ИмяКолонки); + Если КолонкаРезультата = Неопределено Тогда + Результат.Колонки.Добавить(ИмяКолонки,, ВыбраннаяКолонка.Заголовок); + Иначе + КолонкаРезультата.Заголовок = ВыбраннаяКолонка.Заголовок; + КонецЕсли; + КонецЦикла; + // Заполним колонки динамического списка, не являющиеся полями его основной таблицы БД + Если Истина + И ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") + И КлючиСтрок <> Неопределено + Тогда + Для Каждого КлючСтроки Из КлючиСтрок Цикл + ЗаполнитьЗначенияСвойств(СтруктураКлюча, КлючСтроки); + ДанныеСтроки = ТабличноеПоле.ДанныеСтроки(КлючСтроки); + ЗаполнитьЗначенияСвойств(Результат.НайтиСтроки(СтруктураКлюча)[0], ДанныеСтроки); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ТаблицаКлючейВыделенныхСтрокДинСпискаЛкс(Знач ТабличноеПоле, Знач ПолноеИмяТаблицы = "", выхКлючТекущейСтроки = Неопределено) Экспорт + + Если Не ЗначениеЗаполнено(ПолноеИмяТаблицы) Тогда + ПолноеИмяТаблицы = ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле); + КонецЕсли; + СтруктураКлюча = ирОбщий.СтруктураКлючаТаблицыБДЛкс(ПолноеИмяТаблицы,,, Ложь); + ТаблицаКлючей = Новый ТаблицаЗначений; + Для Каждого КлючИЗначение Из СтруктураКлюча Цикл + ТаблицаКлючей.Колонки.Добавить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + Для Каждого ВыделеннаяСтрока Из ТабличноеПоле.ВыделенныеСтроки Цикл + Если ТипЗнч(ВыделеннаяСтрока) = Тип("Число") Тогда + КлючСтроки = ТабличноеПоле.ДанныеСтроки(ВыделеннаяСтрока); + Иначе + КлючСтроки = ВыделеннаяСтрока; + КонецЕсли; + СтрокаКлюча = ТаблицаКлючей.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаКлюча, КлючСтроки); + Если КлючСтроки = ТабличноеПоле.ТекущаяСтрока Тогда + выхКлючТекущейСтроки = СтрокаКлюча; + КонецЕсли; + КонецЦикла; + Возврат ТаблицаКлючей; + +КонецФункции + +// . +// Параметры: +// ТабличноеПоле - - +// НуженВидимыйПорядок - Булево - для динамического списка вычисление видимого порядка - долгое +// ЭтаФорма - Форма - передается для ускорения расчета итогов динамического списка +// +// Возвращаемое значение: +// - Массив - ключей выделенных строк +// +Функция ВыделенныеСтрокиТабличногоПоляЛкс(Знач ТабличноеПоле, Знач НуженВидимыйПорядок = Истина, ЭтаФорма = Неопределено) Экспорт + + ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; + #Если Сервер И Не Сервер Тогда + ВыделенныеСтроки = Новый Массив; + #КонецЕсли + Если Ложь + Или Не НуженВидимыйПорядок + Или ВыделенныеСтроки.Количество() <= 1 + Тогда + Результат = Новый Массив; + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + Результат.Добавить(ВыделеннаяСтрока); + КонецЦикла; + Возврат Результат; + КонецЕсли; + // https://partners.v8.1c.ru/forum/t/1928636/m/1928636 + // http://www.hostedredmine.com/issues/881648 + МассивСтрок = Новый Массив; + ПолноеИмяТаблицыБД = ""; + ДанныеТабличногоПоля = Неопределено; + ТипИсточника = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицыБД, ДанныеТабличногоПоля); + Если Истина + И ТипИсточника = "Список" + И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) + И ДанныеТабличногоПоля <> Неопределено + Тогда + КоллекцияСтрок = ДанныеСтрокДинамическогоСпискаЛкс(ТабличноеПоле, ВыделенныеСтроки,,,, ЭтаФорма); + СтруктураКлюча = Неопределено; + ОбъектМД = Неопределено; + Для Каждого ДанныеСтроки Из КоллекцияСтрок Цикл + МассивСтрок.Добавить(ирОбщий.КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицыБД, ДанныеСтроки,,,, СтруктураКлюча, ОбъектМД)); + КонецЦикла; + Иначе + Если Истина + И ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") + И ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") + Тогда + ВсеСтроки = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение); + #Если Сервер И Не Сервер Тогда + ВсеСтроки = Новый Массив; + #КонецЕсли + Иначе + ВсеСтроки = ДанныеТабличногоПоля; + КонецЕсли; + Если ирОбщий.ЛиКоллекцияЛкс(ВсеСтроки) Тогда + Для Каждого ЭлементКоллекции Из ВсеСтроки Цикл + Если ТипЗнч(ЭлементКоллекции) = Тип("ДанныеФормыЭлементКоллекции") Тогда + ВыделеннаяСтрока = ЭлементКоллекции.ПолучитьИдентификатор(); + СтрокаВыделена = ВыделенныеСтроки.Найти(ВыделеннаяСтрока) <> Неопределено; + Иначе + ВыделеннаяСтрока = ЭлементКоллекции; + СтрокаВыделена = ВыделенныеСтроки.Содержит(ВыделеннаяСтрока); + КонецЕсли; + Если СтрокаВыделена Тогда + МассивСтрок.Добавить(ВыделеннаяСтрока); + КонецЕсли; + КонецЦикла; + Иначе + // Грязно + ПредПозиция = Неопределено; + ПорядокНарушен = Ложь; + ТаблицаСтрок = Новый ТаблицаЗначений; + ТаблицаСтрок.Колонки.Добавить("Строка"); + ТаблицаСтрок.Колонки.Добавить("Позиция"); + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + ПозицияСтроки = ВыделеннаяСтрока; + Если Истина + И ТипЗнч(ПозицияСтроки) = Тип("Число") // Бывают и другие типы. Для них не будет корректировки порядка + И ПредПозиция <> Неопределено + И ПозицияСтроки < ПредПозиция И ТаблицаСтрок.Количество() > 2 + Тогда + ПорядокНарушен = Истина; + КонецЕсли; + ПредПозиция = ПозицияСтроки; + ИначеЕсли Истина + И ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") + И ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") + Тогда + ПозицияСтроки = ВсеСтроки.Найти(ВыделеннаяСтрока); + Иначе + ПозицияСтроки = Неопределено; + КонецЕсли; + СтрокаТаблицы = ТаблицаСтрок.Добавить(); + СтрокаТаблицы.Строка = ВыделеннаяСтрока; + СтрокаТаблицы.Позиция = ПозицияСтроки; + КонецЦикла; + Если Не ПорядокНарушен Или ТипЗнч(ТабличноеПоле) <> Тип("ТаблицаФормы") Тогда + ТаблицаСтрок.Сортировать("Позиция"); + КонецЕсли; + МассивСтрок = ТаблицаСтрок.ВыгрузитьКолонку("Строка"); + КонецЕсли; + КонецЕсли; + Возврат МассивСтрок; + +КонецФункции + +Функция ВыделенныеИлиВсеСтрокиТабличногоПоляЛкс(Знач ТабличноеПоле) Экспорт + + Если ТабличноеПоле.ВыделенныеСтроки.Количество() > 1 Тогда + ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; + Иначе + ВыделенныеСтроки = ТабличноеПоле.Значение; + КонецЕсли; + Возврат ВыделенныеСтроки; + +КонецФункции + +Процедура ВывестиСтрокиТабличногоПоляСОформлениемЛкс(Знач ЭтаФорма, Знач КоллекцияСтрок, НомерСтроки = Неопределено, Знач Результат, Знач ТабличноеПоле, Смещение = "", ВстроитьЗначенияВРасшифровки = Истина, + Знач ВыбранныеКолонки = Неопределено) + + Если ВыбранныеКолонки = Неопределено Тогда + ВыбранныеКолонки = Новый Массив; + Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл + ВыбранныеКолонки.Добавить(КолонкаТП.Имя); + КонецЦикла; + КонецЕсли; + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + // Уберем разметку вхождений строки поиска + ДопСвойства.ЗапретРазметкиВхождений = Истина; + ТабличноеПоле.ОбновитьСтроки(КоллекцияСтрок); + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоллекцияСтрок.Количество()); + Для Каждого СтрокаИсточника Из КоллекцияСтрок Цикл + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + Попытка + ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(СтрокаИсточника); + Исключение + // Строки уже могли быть сконвертированы в строки ТЗ. Например доступные поля компоновки + ОформлениеСтроки = Неопределено; + КонецПопытки; + Если ОформлениеСтроки = Неопределено Тогда + Прервать; + КонецЕсли; + Если ТипЗнч(Результат) = Тип("ТабличныйДокумент") Тогда + #Если Сервер И Не Сервер Тогда + Результат = Новый ТабличныйДокумент; + #КонецЕсли + НомерСтроки = НомерСтроки + 1; + ОбластьСтроки = Результат.Область(НомерСтроки, 0, НомерСтроки, 0); + //ЗаполнитьЗначенияСвойств(ОбластьСтроки, ОформлениеСтроки, "Шрифт, ЦветТекста, ЦветФона"); + ИначеЕсли ТипЗнч(Результат) = Тип("ТаблицаЗначений") Тогда + #Если Сервер И Не Сервер Тогда + Результат = Новый ТаблицаЗначений; + #КонецЕсли + ОбластьСтроки = Результат.Добавить(); + КонецЕсли; + НомерКолонки = 1; + Для Каждого ИмяКолонки Из ВыбранныеКолонки Цикл + Колонка = ТабличноеПоле.Колонки[ИмяКолонки]; + //Если Ложь + // Или Не Колонка.Видимость + // //Или Колонка.Имя = ирКэш.ИмяКолонкиНомерСтрокиЛкс() + //Тогда + // Продолжить; + //КонецЕсли; + ОформлениеЯчейки = ОформлениеСтроки.Ячейки[Колонка.Имя]; + Если ТипЗнч(Результат) = Тип("ТабличныйДокумент") Тогда + ОбластьЯчейки = Результат.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); + ЗаполнитьЗначенияСвойств(ОбластьЯчейки, ОформлениеЯчейки, "Шрифт, ЦветТекста, ЦветФона"); + Если ОформлениеЯчейки.ОтображатьТекст Тогда + Если ОформлениеЯчейки.Значение = Истина И Не ЗначениеЗаполнено(ОформлениеЯчейки.Текст) Тогда + ТекстЯчейки = "Да"; + Иначе + ТекстЯчейки = ОформлениеЯчейки.Текст; + КонецЕсли; + ОбластьЯчейки.Текст = Смещение + ТекстЯчейки; + ИначеЕсли ОформлениеЯчейки.ОтображатьФлажок Тогда + ОбластьЯчейки.Текст = Смещение + ОформлениеЯчейки.ЗначениеФлажка; + КонецЕсли; + Если Истина + И ВстроитьЗначенияВРасшифровки + //И ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ОформлениеЯчейки.Значение, Ложь) + Тогда + ОбластьЯчейки.Расшифровка = ОформлениеЯчейки.Значение; + КонецЕсли; + УстановитьГраницыОбластиТабличногоДокументаИзТабличногоПоляЛкс(ОбластьЯчейки, ТабличноеПоле); + НомерКолонки = НомерКолонки + 1; + ИначеЕсли ТипЗнч(Результат) = Тип("ТаблицаЗначений") Тогда + ОбластьСтроки[Колонка.Имя] = ОформлениеЯчейки.Текст; + КонецЕсли; + КонецЦикла; + Если Истина + И ТипЗнч(Результат) = Тип("ТабличныйДокумент") + И ТипЗнч(СтрокаИсточника) = Тип("СтрокаДереваЗначений") + И ТабличноеПоле.Развернут(СтрокаИсточника) + Тогда + Результат.НачатьГруппуСтрок(); + ВывестиСтрокиТабличногоПоляСОформлениемЛкс(ЭтаФорма, СтрокаИсточника.Строки, НомерСтроки, Результат, ТабличноеПоле, Смещение + " "); + Результат.ЗакончитьГруппуСтрок(); + КонецЕсли; + КонецЦикла; + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); + // Вернем разметку вхождений строки поиска + ДопСвойства.ЗапретРазметкиВхождений = Ложь; + ТабличноеПоле.ОбновитьСтроки(КоллекцияСтрок); + +КонецПроцедуры + +Процедура ВывестиСтрокиТабличногоПоляИПоказатьЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ВыводБезОформления = Неопределено, Знач НастройкиСписка = Неопределено) Экспорт + + ТекущаяСтрока = Неопределено; + Результат = ВывестиСтрокиТабличногоПоляСНастройкойЛкс(ЭтаФорма, ТабличноеПоле, ВыводБезОформления, НастройкиСписка, ТекущаяСтрока); + Если Результат <> Неопределено Тогда + ОткрытьЗначениеЛкс(Результат,,,, Ложь,, ТабличноеПоле); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьГраницыОбластиТабличногоДокументаИзТабличногоПоляЛкс(Знач ОбластьЯчейки, Знач ЭлементУправления) Экспорт + + ЛинияСплошная = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); + Если ЭлементУправления.ГоризонтальныеЛинии Тогда + ОбластьЯчейки.ГраницаСверху = ЛинияСплошная; + ОбластьЯчейки.ГраницаСнизу = ЛинияСплошная; + КонецЕсли; + Если ЭлементУправления.ВертикальныеЛинии Тогда + ОбластьЯчейки.ГраницаСлева = ЛинияСплошная; + ОбластьЯчейки.ГраницаСправа = ЛинияСплошная; + КонецЕсли; + +КонецПроцедуры // ЛксСравнитьСодержимоеПоля() + +Процедура РасширитьКолонкиТабличногоПоляЛкс(ТабличноеПоле, УважатьЗапретИзмененияРазмера = Истина) Экспорт + + //ВведенноеЗначениеШирины = 10; + //Если ВвестиЧисло(ВведенноеЗначениеШирины, "Введите новую ширину колонки для всех колонок", 5, 0) Тогда + // УстановитьСвойствоВКоллекцииЛкс(ТабличноеПоле.Колонки, "-Ширина", ВведенноеЗначениеШирины); + //КонецЕсли; + Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл + Ширина = Колонка.Ширина; + Если Ширина = 0 Тогда + // Антибаг платформы. + Ширина = 10; + КонецЕсли; + Если Ложь + Или Не УважатьЗапретИзмененияРазмера + Или Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять + Тогда + НоваяШирина = Ширина + 3; + Колонка.Ширина = НоваяШирина; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Пропорционально сжимает ширины колонок табличного поля. +// +// Параметры: +// ТабличноеПоле - ТабличноеПоле; +// Сжатие - Число, *2 - коэффициент сжатия; +// УважатьЗапретИзмененияРазмера - Булево, *Истина - не сжимать колонки с запретом изменения размера; +// +Процедура СжатьКолонкиТабличногоПоляЛкс(ТабличноеПоле, Сжатие = 2, УважатьЗапретИзмененияРазмера = Истина) Экспорт + + Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл + Ширина = Колонка.Ширина; + Если Ширина = 0 Тогда + // Антибаг платформы. + Ширина = 10; + КонецЕсли; + Если Ложь + Или Не УважатьЗапретИзмененияРазмера + Или Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять + Тогда + НоваяШирина = Ширина / Сжатие; + НоваяШирина = Макс(НоваяШирина, 1); + Колонка.Ширина = НоваяШирина; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Интерактивно записывает значение в поле ввода. Интерактивность заключается в срабатывании события ПриИзменении. +// +// Параметры: +// ЭлементУправления - ЭлементУправления - которому присваиваем значение; +// Значение - Произвольный - присваиваемое значение; +// ФормаИнициатор - Форма, УправляемаяФорма, *Неопределено - которая будет использована в качестве инициатора события; +// если не указана, то будет создана временная форма-пустышка; +// КонтролироватьУспех - Булево, *Ложь - проверять успешность установки значения, долго и не надежно для управляемой формы +// +// Результат - Булево, Неопределено - Если КонтролироватьУспех, то успешно ли значение установлено, иначе Неопределено +Функция ИнтерактивноЗаписатьВПолеВводаЛкс(ПолеВвода, Знач Значение = Неопределено, Знач ФормаИнициатор = Неопределено, КонтролироватьУспех = Ложь) Экспорт + + Если ФормаИнициатор = Неопределено Тогда + ФормаИнициатор = ирКэш.ФормаПустышкаЛкс(); + Иначе + СтарыйВладелец = ФормаИнициатор.ВладелецФормы; + СтарыйЗакрыватьПриВыборе = ФормаИнициатор.ЗакрыватьПриВыборе; + ФормаИнициатор.ЗакрыватьПриВыборе = Ложь; + КонецЕсли; + ФормаИнициатор.ВладелецФормы = ПолеВвода; + НовоеЗначение = ПолеВвода.ОграничениеТипа.ПривестиЗначение(Значение); + Если Ложь + Или НовоеЗначение <> Значение + Или ПолеВвода.ТолькоПросмотр + Тогда + Возврат Ложь; + КонецЕсли; + ФормаИнициатор.ОповеститьОВыборе(Значение); + Если СтарыйЗакрыватьПриВыборе <> Неопределено Тогда + ФормаИнициатор.ВладелецФормы = СтарыйВладелец; + ФормаИнициатор.ЗакрыватьПриВыборе = СтарыйЗакрыватьПриВыборе; + КонецЕсли; + Результат = Истина; + Если КонтролироватьУспех Тогда + ЗначениеПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ПолеВвода); + //Попытка + Результат = ЗначениеПоля = Значение; + //Исключение + // // Это поле управляемой формы + // Результат = Истина; + //КонецПопытки; + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Интерактивно записывает значение в элемент управления (только поле ввода/формы) колонки табличного поля или таблицы формы. +// Интерактивность заключается в срабатывании события ПриИзменении у элемента управления. +// Строка табличного поля или таблицы формы должна находиться в режиме редактирования, +// иначе никаких изменений данных не произойдет. +// +// Параметры: +// ТабличноеПоле - ТабличноеПоле, ТаблицаФормы - внутри него строка редактируется; +// Колонка - КолонкаТабличногоПоля, ПолеФормы - в ее ячейку будем помещать значение; +// Значение - Произвольный - присваиваемое значение; +// *ФормаИнициатор - Форма, УправляемаяФормы, *Неопределено - которая будет использована в качестве инициатора события; +// если не указана, то будет создана временная форма-пустышка; +// *ВосстанавитьТекущуюКолонку - Булево, *Истина; +// *ВключитьРежимРедактирования - Булево, *Истина; +// КонтролироватьТекущиеДанные - Булево, *Истина - если значение не установилось интерактивно, то установить его программно +// ПутьКДаннымКолонки - Строка, *"" - имя колонки данных; используется при КонтролироватьТекущиеДанные +// Результат: +// Булево - Истина, если значение отправлено в поле, иначе оно не прошло проверки по связям и параметрам выбора +// +Функция ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Знач Колонка, Знач Значение, Знач ФормаИнициатор = Неопределено, Знач ВосстанавитьТекущуюКолонку = Истина, + Знач ВключитьРежимРедактирования = Истина, Знач КонтролироватьТекущиеДанные = Истина, Знач ВыключитьРежимРедактирования = Ложь, Знач ПутьКДаннымКолонки = "", Знач МетаданныеВыбора = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если ТипЗнч(Колонка) = Тип("КолонкаТабличногоПоля") Тогда + Если Ложь + Или Не Колонка.Доступность + Или Колонка.ТолькоПросмотр + Тогда + Возврат Ложь; + КонецЕсли; + ЭлементУправления = Колонка.ЭлементУправления; + Если ТипЗнч(ЭлементУправления) <> Тип("ПолеВвода") Тогда + ЭлементУправления = Неопределено; + КонецЕсли; + Иначе + ЭлементУправления = Колонка; + Если ТипЗнч(ЭлементУправления) <> Тип("ПолеФормы") Тогда + ЭлементУправления = Неопределено; + КонецЕсли; + КонецЕсли; + Если ЭлементУправления <> Неопределено Тогда + Если ВосстанавитьТекущуюКолонку Тогда + СтараяТекущаяКолонка = ирКлиент.ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); + КонецЕсли; + ирКлиент.ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, Колонка); + Если ВключитьРежимРедактирования Тогда + ТабличноеПоле.ИзменитьСтроку(); + КонецЕсли; + + // Связи и параметры выбора + Если Истина + И ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Значение, Ложь) + И ЗначениеЗаполнено(Значение) + Тогда + МетаданныеКолонки = Неопределено; + Если ТипЗнч(ЭлементУправления) = Тип("ПолеВвода") Тогда + ДанныеПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ЭлементУправления); + ХмлТип = XMLТипЗнч(ДанныеПоля); + Если Истина + И ХмлТип <> Неопределено + И Найти(ХмлТип.ИмяТипа, "CatalogRef.") > 0 + Тогда + Если Ложь + Или (Истина + И ЗначениеЗаполнено(ЭлементУправления.ВыборПоВладельцу) + И Значение.Владелец <> ЭлементУправления.ВыборПоВладельцу) + Или (Истина + И ЭлементУправления.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы + И Значение.ЭтоГруппа) + Или (Истина + И ЭлементУправления.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы + И Не Значение.ЭтоГруппа) + Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + Если МетаданныеВыбора <> Неопределено Тогда + МетаданныеКолонки = ирОбщий.СвойствоСтруктурыЛкс(МетаданныеВыбора.Колонки, ПутьКДаннымКолонки); + ОбъектВладелец = МетаданныеВыбора.РеквизитыВладельца; + СтруктураТЧ = Новый Структура("ТЧ", ТабличноеПоле.ТекущиеДанные); + КонецЕсли; + Иначе + МетаданныеКолонки = ЭлементУправления; + ПутьКДаннымОбъекта = ""; + ОбъектВладелец = Неопределено; + ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле, ПутьКДаннымОбъекта, ОбъектВладелец); + Если СтрЧислоВхождений(ПутьКДаннымОбъекта, ".") = 1 Тогда + СтруктураТЧ = Новый Структура(ирОбщий.ПоследнийФрагментЛкс(ПутьКДаннымОбъекта), ТабличноеПоле.ТекущиеДанные); + Иначе + ОбъектВладелец = ТабличноеПоле.ТекущиеДанные; + КонецЕсли; + КонецЕсли; + Если МетаданныеКолонки <> Неопределено Тогда + СтруктураОтбора = ирКлиент.СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(МетаданныеКолонки, ОбъектВладелец, СтруктураТЧ); + Для Каждого КлючИЗначение Из СтруктураОтбора Цикл + ЗначениеРеквизита = Значение[КлючИЗначение.Ключ]; + Если Истина + И ЗначениеРеквизита <> КлючИЗначение.Значение + И (Ложь + Или ТипЗнч(КлючИЗначение.Значение) <> Тип("ФиксированныйМассив") + Или КлючИЗначение.Значение.Найти(ЗначениеРеквизита) = Неопределено) + Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + РезультатИнтерактивнойЗаписи = ИнтерактивноЗаписатьВПолеВводаЛкс(ЭлементУправления, Значение, ФормаИнициатор); + //КонтролироватьТекущиеДанные = КонтролироватьТекущиеДанные И РезультатИнтерактивнойЗаписи; // Если раскомментировать, то перестанет работать редактирование ячейки по двойному клику https://www.hostedredmine.com/issues/948448 + Если ВосстанавитьТекущуюКолонку Тогда + ирКлиент.ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, СтараяТекущаяКолонка); + КонецЕсли; + Если ВыключитьРежимРедактирования Тогда + ТабличноеПоле.ЗакончитьРедактированиеСтроки(Ложь); + КонецЕсли; + КонецЕсли; + Если КонтролироватьТекущиеДанные Тогда // На 8.3.8 значение в свойство строки почему то не попадает + Если Не ЗначениеЗаполнено(ПутьКДаннымКолонки) Тогда + ПутьКДаннымКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, Колонка); + КонецЕсли; + Если ПутьКДаннымКолонки <> "" Тогда + ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + Попытка + ЗначениеЯчейки = ДанныеСтроки[ПутьКДаннымКолонки]; + ИмяДанныхПравильное = Истина; + Исключение + // В табличных полях компоновки + ИмяДанныхПравильное = Ложь; + КонецПопытки; + Если ИмяДанныхПравильное И ТипЗнч(ДанныеСтроки) <> Тип("ЭлементОтбора") Тогда + Если Значение <> ЗначениеЯчейки Тогда + // Такое случается в некоторых состояниях формы (пока Открыта() = Ложь) + // Также это срабатывает для неподдерживаемых типов в поле ввода + ДанныеСтроки[ПутьКДаннымКолонки] = Значение; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат Истина; + +КонецФункции + +Процедура ТабличноеПолеАктивироватьТекущуюСтрокуЕслиНеУстановленаЛкс(Знач ТабличноеПоле) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если Истина + И ТабличноеПоле.ТекущаяСтрока = Неопределено + И ТабличноеПоле.Значение.Количество() > 0 + Тогда + ТабличноеПоле.ТекущаяСтрока = ТабличноеПоле.Значение[0]; + КонецЕсли; + +КонецПроцедуры + +// Функция - Табличное поле сдвинуть выделенные строки лкс +// +// Параметры: +// ТабличноеПоле - - +// Смещение - Число - количество позиций на которые нужно переместить строки вперед (+) или назад (-) +// +// Возвращаемое значение: +// Булево - изменен ли порядок строк +// +Функция ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(Знач ТабличноеПоле, Знач Смещение) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если Ложь + Или ТабличноеПоле.ТолькоПросмотр + Или ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") + Тогда + Возврат Ложь; + КонецЕсли; + ПорядокИзменен = Ложь; + ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + #Если Сервер И Не Сервер Тогда + ВыделенныеСтроки = Новый Массив; + #КонецЕсли + Шаг = Смещение; + Пока Смещение <> 0 Цикл + БылиСдвиги = Ложь; + Для Индекс = 0 По ВыделенныеСтроки.ВГраница() Цикл + Если Смещение < 0 Тогда + ВыделеннаяСтрока = ВыделенныеСтроки[Индекс]; + Шаг = -1; + Иначе + ВыделеннаяСтрока = ВыделенныеСтроки[ВыделенныеСтроки.ВГраница() - Индекс]; + Шаг = +1; + КонецЕсли; + Позиция = ТабличноеПоле.Значение.Индекс(ВыделеннаяСтрока); + Если Ложь + Или (Истина + И Смещение < 0 + И Позиция > 0 + Индекс) + Или (Истина + И Смещение > 0 + И Позиция > -1 + И Позиция < ТабличноеПоле.Значение.Количество() - 1 - Индекс) + Тогда + ТабличноеПоле.Значение.Сдвинуть(ВыделеннаяСтрока, Шаг); + БылиСдвиги = Истина; + КонецЕсли; + КонецЦикла; + Если Не БылиСдвиги Тогда + Прервать; + КонецЕсли; + ПорядокИзменен = Истина; + Смещение = Смещение - Шаг; + КонецЦикла; + Возврат ПорядокИзменен; + +КонецФункции + +Процедура ТабличноеПолеОбновитьТекстыПодваловЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Принудительно = Истина) Экспорт + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ОбщийТип = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле); + Если ОбщийТип = Неопределено Тогда + Возврат; + КонецЕсли; + КоличествоВыделенных = ТабличноеПоле.ВыделенныеСтроки.Количество(); + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + ТабличноеПоле.Подвал = Истина + И ДопСвойства.ЗапретПодвала <> Истина + И (Ложь + Или ДопСвойства.КнопкаОтображенияПодвала <> Неопределено И ДопСвойства.КнопкаОтображенияПодвала.Пометка + Или КоличествоВыделенных > 1 И КоличествоВыделенных < 1000 // Для малого количества выделенных всегда показываем подвал + ); + Если Не ТабличноеПоле.Подвал Тогда + Возврат; + КонецЕсли; + ЭтоКоллекцияСМетаданными = Ложь; + Если ОбщийТип = "Список" Тогда + ИменаВидимыхКолонок = Новый Массив; + Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл + Если Колонка.Видимость И Колонка.Данные <> "" Тогда + ИменаВидимыхКолонок.Добавить(Колонка.Данные); + КонецЕсли; + КонецЦикла; + КоллекцияСтрок = ДанныеСтрокДинамическогоСпискаЛкс(ТабличноеПоле, ТабличноеПоле.ВыделенныеСтроки, ирОбщий.СтрСоединитьЛкс(ИменаВидимыхКолонок),,, ЭтаФорма, Истина); // Долго + КолонкиКоллекции = КоллекцияСтрок.Колонки; + Иначе + КоллекцияСтрок = ТабличноеПоле.Значение; + Если ТипЗнч(КоллекцияСтрок) = Тип("ДеревоЗначений") Тогда + КоллекцияСтрок = КоллекцияСтрок.Строки; + КонецЕсли; + Если ОбщийТип = "ТабличнаяЧасть" Или ОбщийТип = "НаборЗаписей" Тогда + КолонкиКоллекции = ТабличноеПоле.Значение.ВыгрузитьКолонки().Колонки; + ЭтоКоллекцияСМетаданными = Истина; + Иначе + КолонкиКоллекции = ТабличноеПоле.Значение.Колонки; + КонецЕсли; + КонецЕсли; + Попытка + Если КоличествоВыделенных = КоллекцияСтрок.Количество() Тогда + КоличествоВыделенных = 1; // Для ускорения + КонецЕсли; + Исключение + КонецПопытки; + Если ОбщийТип <> "Список" И КоличествоВыделенных > 1 Тогда + ВыделенныеСтроки = ирКлиент.ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, Ложь); + КопияТаблицы = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, ВыделенныеСтроки,,,,, ЭтаФорма); + Иначе + ВыделенныеСтроки = Неопределено; + КопияТаблицы = КоллекцияСтрок; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + КопияТаблицы = Новый ТаблицаЗначений; + КолонкиКоллекции = КопияТаблицы.Колонки; + #КонецЕсли + СимволСуммы = "Σ"; + Если Истина + И Не Принудительно + И КоличествоВыделенных <= 1 + И Не ТабличноеПоле.ИзменятьСоставСтрок + И ИнтерактивныеКолонкиТабличногоПоляЛкс(ТабличноеПоле).Количество() = 0 + Тогда + Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл + Если Не Колонка.Видимость Тогда + Продолжить; + КонецЕсли; + Если Лев(Колонка.ТекстПодвала, 1) = СимволСуммы Тогда + Возврат; + КонецЕсли; + КонецЦикла; + КонецЕсли; + ТабличноеПоле.ВертикальныеЛинии = Истина; + //КопияТаблицы = ирОбщий.ТаблицаСКолонкамиБезТипаNullЛкс(КопияТаблицы); // Если у колонки составной тип, то Итог() не будет считать булевы значения + КоличествоУжеВыведено = Ложь; + Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл + Если Не Колонка.Видимость Тогда + Продолжить; + КонецЕсли; + ДанныеКолонки = Колонка.Данные; + СуммаКолонки = ирОбщий.ИтогКолонкиТабличногоПоляЛкс(КопияТаблицы, ДанныеКолонки, КолонкиКоллекции); + ТекстПодвала = ""; + Если СуммаКолонки = Неопределено Тогда + Если Истина + И Не КоличествоУжеВыведено + И (Ложь + Или Колонка.Ширина > 5 + Или Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять) + Тогда + ТекстПодвала = "N" + КопияТаблицы.Количество(); + КоличествоУжеВыведено = Истина; + КонецЕсли; + Колонка.ТекстПодвала = ТекстПодвала; + Продолжить; + КонецЕсли; + Если КоличествоВыделенных > 1 Тогда + ТекстПодвала = "!"; + КонецЕсли; + ТекстПодвала = ТекстПодвала + СимволСуммы + СуммаКолонки; + Колонка.ТекстПодвала = ТекстПодвала; + Колонка.ГоризонтальноеПоложениеВПодвале = ГоризонтальноеПоложение.Право; + КонецЦикла; + +КонецПроцедуры + +Процедура ТабличноеПолеКнопкаОтображенияИтоговНажатиеЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач Кнопка) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Кнопка.Пометка = Не Кнопка.Пометка; + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + ДопСвойства.КнопкаОтображенияПодвала = Кнопка; + ТабличноеПолеОбновитьТекстыПодваловЛкс(ЭтаФорма, ТабличноеПоле); + +КонецПроцедуры + +// Проверяет колонку табличного поля на доступность для эмуляции интерактивного изменения. +// +// Параметры: +// пКолонка - КолонкаТабличногоПоля. +// +// Возвращаемое значение: +// Истина - колонка интерактивно доступна; +// Ложь - иначе. +// +Функция ЛиВКолонкеДоступнаЭмуляцияИнтерактивногоИзмененияЛкс(КолонкаТабличногоПоля) Экспорт + + Если Истина + И КолонкаТабличногоПоля <> Неопределено + И КолонкаТабличногоПоля.Доступность + И КолонкаТабличногоПоля.Видимость + И Не КолонкаТабличногоПоля.ТолькоПросмотр + И (Ложь + Или (Истина + И ТипЗнч(КолонкаТабличногоПоля) = Тип("ПолеФормы") + И КолонкаТабличногоПоля.Вид = ВидПоляФормы.ПолеВвода) + Или (Истина + И ТипЗнч(КолонкаТабличногоПоля) = Тип("КолонкаТабличногоПоля") + И (Ложь + Или КолонкаТабличногоПоля.ДанныеФлажка <> "" + Или (Истина + И ТипЗнч(КолонкаТабличногоПоля.ЭлементУправления) = Тип("ПолеВвода") + И КолонкаТабличногоПоля.ЭлементУправления.Доступность)))) + Тогда + Попытка + Если КолонкаТабличногоПоля.ЭлементУправления.ТолькоПросмотр Тогда + Возврат Ложь; + КонецЕсли; + Исключение + КонецПопытки; + Возврат Истина; + КонецЕсли; + Возврат Ложь; + +КонецФункции + +// Копирует привязки между элементами форм. +// +// Параметры: +// пФорма - Форма - в которую копируем; +// ЭлементПриемник - ЭлементУправления; +// ЭлементИсточник - ЭлементУправления. +// +Процедура СкопироватьПривязкиЛкс(пФорма, ЭлементПриемник, ЭлементИсточник) Экспорт + + Перем ПервыйЭлемент, ГраницаПервогоЭлемента, ВторойЭлемент, ГраницаВторогоЭлемента; + + Границы = Новый Массив; + Границы.Добавить(ГраницаЭлементаУправления.Верх); + Границы.Добавить(ГраницаЭлементаУправления.Низ); + Границы.Добавить(ГраницаЭлементаУправления.Лево); + Границы.Добавить(ГраницаЭлементаУправления.Право); + Для Каждого Граница Из Границы Цикл + ЭлементИсточник.ПолучитьПривязку( Граница, ПервыйЭлемент, ГраницаПервогоЭлемента, ВторойЭлемент, + ГраницаВторогоЭлемента); + Если ПервыйЭлемент <> Неопределено Тогда + ПервыйЭлемент = пФорма.ЭлементыФормы.Найти(ПервыйЭлемент.Имя); + Если ПервыйЭлемент = Неопределено Тогда + ПервыйЭлемент = пФорма.Панель; + КонецЕсли; + КонецЕсли; + Если ВторойЭлемент <> Неопределено Тогда + ВторойЭлемент = пФорма.ЭлементыФормы.Найти(ВторойЭлемент.Имя); + Если ВторойЭлемент = Неопределено Тогда + ВторойЭлемент = пФорма.Панель; + КонецЕсли; + КонецЕсли; + ЭлементПриемник.УстановитьПривязку(Граница, ПервыйЭлемент, ГраницаПервогоЭлемента, ВторойЭлемент, + ГраницаВторогоЭлемента); + КонецЦикла; + +КонецПроцедуры // СкопироватьПривязкиЛкс() + +// Заполняет форму по ее макету. Используется для динамического добавления элементов +// в типовые формы, чтобы облегчить их обновление. Макет формы, если явно не указан, +// ищется среди форм объекта метаданных формы по имени "Лкс"+<ИмяФормы>+"Макет". +// Для измененных элементов в макете к имени следует добавлять через "_" суффиксы +// в соответствии с изменениями: "Привязка", "Размер", "Позиция", "Внутри" (для коллекций). +// Следует вызывать в обработчике ПередОткрытием формы. +// Ограничения. +// 1. Без явного указания макета работает только для основной формы объекта. +// 2. Нельзя добавлять элементы в панели и поля табличного документа, т.к. у элемента нельзя +// определить родителя. +// 3. Нельзя, чтобы форма и макет имели разные размеры. Обрабатывается. +// 4. Нельзя добавлять и изменять элементы, привязанные косвенно к низу формы. +// 5. Иногда элементы, привязанные косвенно к правой границе формы неверно располагаются. +// 6. Нельзя, чтобы оригинальные имена измененных элементов включали "_". Обрабатывается. +// +// Параметры: +// пФорма - Форма - которую настраиваем; +// *пМакет - Форма - макет, по которому настраиваем. +// +Процедура НастроитьФормуПоМакетуЛкс(пФорма, пМакетФормы) Экспорт + + МакетФормы = пМакетФормы; + СоответствиеПривязки = Новый Соответствие; + Если Ложь + Или пФорма.Высота <> МакетФормы.Высота + Или пФорма.Ширина <> МакетФормы.Ширина + Тогда + ирОбщий.СообщитьЛкс("Не соответствие размеров формы при заполнении по макету", + СтатусСообщения.Важное); + КонецЕсли; + //ЗаполнитьЗначенияСвойств(пФорма, МакетФормы, , "ДокументОбъект, Данные, ЭтотОбъект, Панель, ЭлементыФормы"); + //ЗаполнитьЗначенияСвойств(пФорма.Панель, МакетФормы.Панель, , "Данные"); + ЭлементыФормы = пФорма.ЭлементыФормы; + Для Каждого ЭлементМакета Из МакетФормы.ЭлементыФормы Цикл + ИмяЭлемента = ЭлементМакета.Имя; + ЭлементФормы = ЭлементыФормы.Добавить(ТипЗнч(ЭлементМакета), ИмяЭлемента, Ложь, пФорма.Панель); + Если ТипЗнч(ЭлементМакета) = Тип("КоманднаяПанель") Тогда + ЗаполнитьЗначенияСвойств(ЭлементФормы, ЭлементМакета, , "Имя, Данные, Кнопки, ИсточникДействий"); + Если ЭлементМакета.ИсточникДействий = пМакетФормы Тогда + ЭлементФормы.ИсточникДействий = пФорма; + КонецЕсли; + ИначеЕсли ТипЗнч(ЭлементМакета) = Тип("ТабличноеПоле") Тогда + ЗаполнитьЗначенияСвойств(ЭлементФормы, ЭлементМакета, , "Имя, Данные, ТекущаяСтрока"); + Иначе + ЗаполнитьЗначенияСвойств(ЭлементФормы, ЭлементМакета, , "Имя, Данные"); + КонецЕсли; + СоответствиеПривязки.Вставить(ЭлементФормы, ЭлементМакета); + КонецЦикла; + + // Установи новые привязки + Для Каждого Привязка Из СоответствиеПривязки Цикл + ЭлементФормы = Привязка.Ключ; + ЭлементМакета = Привязка.Значение; + СкопироватьПривязкиЛкс(пФорма, ЭлементФормы, ЭлементМакета); + КонецЦикла; + +КонецПроцедуры // НастроитьФормуПоМакетуЛкс() + +Процедура ДеревоКонсолиПроверкаПеретаскиванияЛкс(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка, ИмяТипаСроки) Экспорт + + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Структура") Тогда + ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; + Если ЗначениеПеретаскивания.Свойство("Тип") Тогда + Если НРег(ЗначениеПеретаскивания.Тип) = Нрег(ИмяТипаСроки) Тогда + ТекущийРодитель = Строка; + Пока ТекущийРодитель <> Неопределено Цикл + Если ТекущийРодитель = ЗначениеПеретаскивания.Значение Тогда + ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать; + Возврат; + КонецЕсли; + ТекущийРодитель = ТекущийРодитель.Родитель; + КонецЦикла; + СтандартнаяОбработка = Ложь; + ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДеревоКонсолиПеретаскиваниеЛкс(ЭтаФорма, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, СтрокаПриемник, Колонка, ИмяТипаСроки, ИмяПоляНаименования = "Наименование") Экспорт + + #Если Сервер И Не Сервер Тогда + Элемент = Новый ТабличноеПоле; + #КонецЕсли + Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Структура") Тогда + ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; + Если ЗначениеПеретаскивания.Свойство("Тип") Тогда + Если НРег(ЗначениеПеретаскивания.Тип) = Нрег(ИмяТипаСроки) Тогда + СтандартнаяОбработка = Ложь; + Если СтрокаПриемник <> Неопределено Тогда + РодительскаяСтрока = СтрокаПриемник; + Иначе + РодительскаяСтрока = Элемент.Значение; + КонецЕсли; + НоваяСтрокаДерева = Неопределено; + Элемент.ВыделенныеСтроки.Очистить(); + ВыделенныеСтроки = Новый Массив; + Для Каждого СтрокаИсточника Из ЗначениеПеретаскивания.Значение Цикл + НоваяСтрокаДерева = РодительскаяСтрока.Строки.Добавить(); + ирОбщий.СкопироватьСтрокиДереваЛкс(СтрокаИсточника, НоваяСтрокаДерева); + Если Истина + И СтрокаИсточника.Родитель = НоваяСтрокаДерева.Родитель + И ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение + Тогда + // + Иначе + ДеревоКонсолиПриОкончанииРедактированияЛкс(НоваяСтрокаДерева, ИмяПоляНаименования); + КонецЕсли; + Элемент.ТекущаяСтрока = НоваяСтрокаДерева; + Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение Тогда + РодительСтроки = СтрокаИсточника.Родитель; + Если РодительСтроки = Неопределено Тогда + РодительСтроки = Элемент.Значение; + Если СтрокаИсточника.Владелец() <> РодительСтроки Тогда + // Строка другой формы. Не будем ее удалять + РодительСтроки = Неопределено; + КонецЕсли; + КонецЕсли; + Если РодительСтроки <> Неопределено Тогда + РодительСтроки.Строки.Удалить(СтрокаИсточника); + СтрокаИсточника = Неопределено; + КонецЕсли; + КонецЕсли; + Если СтрокаИсточника <> Неопределено Тогда + НоваяСтрокаДерева.ИД = Новый УникальныйИдентификатор; + КонецЕсли; + Если Элемент.ИзменяетДанные Тогда + ЭтаФорма.Модифицированность = Истина; + КонецЕсли; + ВыделенныеСтроки.Добавить(НоваяСтрокаДерева); + КонецЦикла; + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + Элемент.ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДеревоКонсолиПриОкончанииРедактированияЛкс(Знач СтрокаДерева, Знач ИмяПоляНаименования = "Наименование") Экспорт + + РодительСтроки = ирОбщий.РодительСтрокиДереваЛкс(СтрокаДерева); + СтрокаДерева[ИмяПоляНаименования] = ирОбщий.АвтоУникальноеИмяВКоллекцииЛкс(РодительСтроки.Строки, СтрокаДерева, ИмяПоляНаименования, Ложь); + +КонецПроцедуры + +Процедура ДеревоКонсолиНачалоПеретаскиванияЛкс(Элемент, ПараметрыПеретаскивания, Выполнение, ИмяТипаСроки) Экспорт + + Элемент.ТекущаяСтрока = Элемент.ТекущаяСтрока; // Для сохранения изменений в строке + ЗначениеПеретаскивания = Новый Структура("Тип, Значение", ИмяТипаСроки, ВыделенныеСтрокиТабличногоПоляЛкс(Элемент)); + ПараметрыПеретаскивания.Значение = ЗначениеПеретаскивания; + +КонецПроцедуры + +Процедура ТабличноеПолеСпискаНастроекКомпоновкиПроверкаПеретаскиванияЛкс(Знач ЭтаФорма, Знач Элемент, Знач ПараметрыПеретаскивания, СтандартнаяОбработка, Знач Строка) Экспорт + + Если Не СтандартнаяОбработка Тогда + Возврат; + КонецЕсли; + ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; + Если Строка <> Неопределено И ТипЗнч(ЗначениеПеретаскивания) = Тип("Массив") Тогда + ЗначениеПеретаскивания = ЗначениеПеретаскивания[0]; + //Если Ложь + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ЭлементОтбораКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ОтборКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ВыбранноеПолеКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ЭлементПорядкаКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ЭлементУсловногоОформления") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ПользовательскоеПолеВыборКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппировкаТаблицыКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппировкаКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") + // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ТаблицаКомпоновкиДанных") + //Тогда + Элемент.ТекущаяСтрока = Строка; + СтандартнаяОбработка = Ложь; + ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать; + //КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Для корректной активации при проверке перетаскивания +Процедура ОбновитьТабличноеПолеДереваПослеУстановкиДанныхЛкс(ЭтаФорма, Знач ТабличноеПолеДерева) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПолеДерева = Новый ТабличноеПоле; + #КонецЕсли + ДанныеТабличногоПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПолеДерева); + Если ТипЗнч(ДанныеТабличногоПоля) = Тип("ДеревоЗначений") Тогда + Если Истина + И ТабличноеПолеДерева.ТекущаяСтрока = Неопределено + И ДанныеТабличногоПоля.Строки.Количество() > 0 + Тогда + ТабличноеПолеДерева.ТекущаяСтрока = ДанныеТабличногоПоля.Строки[0]; + КонецЕсли; + Если ТабличноеПолеДерева.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни Тогда + ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(ТабличноеПолеДерева); + КонецЕсли; + Иначе + Если ТабличноеПолеДерева.ТекущаяСтрока = Неопределено Тогда + Попытка + ТабличноеПолеДерева.ТекущаяСтрока = ДанныеТабличногоПоля; + Исключение + КонецПопытки; + КонецЕсли; + Если ТабличноеПолеДерева.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни Тогда + Попытка + ТабличноеПолеДерева.Развернуть(ДанныеТабличногоПоля, Истина); + Исключение + // Например это ЗначенияПараметровДанныхКомпоновкиДанных + КонецПопытки; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Процедура - Изменить свернутость лкс +// +// Параметры: +// ЭтаФорма - - +// Видимость - - +// ГлавныйЭлемент - - какой элемент будет свернут +// Разделитель - - +// Панель - - внутри какой панели находится сворачиваемый элемент +// Направление - Строка - "лево", "право", "верх", "низ" - куда будет сдвинута граница +// ПодчиненныйЭлемент - - +// ПропорциональныйРазмер - - +// +Процедура ИзменитьСвернутостьЛкс(ЭтаФорма, Видимость, ГлавныйЭлемент, Разделитель, Панель, Направление, ПодчиненныйЭлемент = Неопределено, + ПропорциональныйРазмер = Истина) Экспорт + + //Если Не ЭтаФорма.Открыта() Тогда + // // Антибаг платформы. Иначе после закрытия и затем открытия привязки могут сломаться + // ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Изменение свернутости панели вызвано для закрытой формы %1",, ЭтаФорма.Заголовок)); + // Возврат; + //КонецЕсли; + Если Разделитель = Неопределено Тогда + Разделитель = ГлавныйЭлемент; + КонецЕсли; + Если ТипЗнч(Разделитель) = Тип("Разделитель") Тогда + Если Разделитель.Ориентация = Ориентация.Авто Тогда + // возможно это касается только свертки вправо + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Корректная работа свертки с разделителем %1 с ориентацией ""Авто"" не гарантируется из-за ошибки платформы",, Разделитель.Имя), СтатусСообщения.Внимание); + КонецЕсли; + КонецЕсли; + //ПервыйЭлемент = 0; + //ГраницаПервогоЭлемента = 0; + //ВторойЭлемент = 0; + //ГраницаВторогоЭлемента = 0; + Если ирОбщий.СтрокиРавныЛкс(Направление, "лево") Тогда + Если Видимость Тогда + // откроем + Если ПодчиненныйЭлемент <> Неопределено Тогда + ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Лево, Разделитель, ГраницаЭлементаУправления.Право); + КонецЕсли; + Разделитель.Свертка = РежимСверткиЭлементаУправления.Нет; + Если Разделитель <> ГлавныйЭлемент Тогда + ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Нет; + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Лево, Разделитель, ГраницаЭлементаУправления.Право); + Если ПропорциональныйРазмер Тогда + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, Панель, ГраницаЭлементаУправления.Лево, Панель, + ГраницаЭлементаУправления.Право); + Иначе + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, Панель, ГраницаЭлементаУправления.Право); + КонецЕсли; + ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Право, Разделитель, ГраницаЭлементаУправления.Лево); + КонецЕсли; + //Разделитель.Ширина = ШиринаРазделителя; + Иначе + // скроем + Если Разделитель <> ГлавныйЭлемент Тогда + ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Право); + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право); + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Лево, ГлавныйЭлемент, ГраницаЭлементаУправления.Право); + ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Лево; + КонецЕсли; + Разделитель.Свертка = РежимСверткиЭлементаУправления.Лево; + Если ПодчиненныйЭлемент <> Неопределено Тогда + ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Лево, ГлавныйЭлемент, ГраницаЭлементаУправления.Право); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ирОбщий.СтрокиРавныЛкс(Направление, "право") Тогда + Если Видимость Тогда + // откроем + Если ПодчиненныйЭлемент <> Неопределено Тогда + ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Право, Разделитель, ГраницаЭлементаУправления.Лево); + КонецЕсли; + Разделитель.Свертка = РежимСверткиЭлементаУправления.Нет; + Если Разделитель <> ГлавныйЭлемент Тогда + ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Нет; + Если ПропорциональныйРазмер Тогда + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, Панель, ГраницаЭлементаУправления.Лево, Панель, + ГраницаЭлементаУправления.Право); + Иначе + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, Панель, ГраницаЭлементаУправления.Право); + КонецЕсли; + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Лево, Разделитель, ГраницаЭлементаУправления.Право); + ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Лево, Разделитель, ГраницаЭлементаУправления.Право); + //Разделитель.Ширина = ШиринаРазделителя; + КонецЕсли; + Иначе + // Скроем + Если Разделитель <> ГлавныйЭлемент Тогда + ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Лево); + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Лево); + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, ГлавныйЭлемент, ГраницаЭлементаУправления.Лево); + ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Право; + КонецЕсли; + Разделитель.Свертка = РежимСверткиЭлементаУправления.Право; + Если ПодчиненныйЭлемент <> Неопределено Тогда + ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Право, ГлавныйЭлемент, ГраницаЭлементаУправления.Лево); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ирОбщий.СтрокиРавныЛкс(Направление, "низ") Тогда + Если Видимость Тогда + // Откроем + Если ПодчиненныйЭлемент <> Неопределено Тогда + ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Верх, Разделитель, ГраницаЭлементаУправления.Низ); + КонецЕсли; + Разделитель.Свертка = РежимСверткиЭлементаУправления.Нет; + Если Разделитель <> ГлавныйЭлемент Тогда + ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Нет; + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Верх, Разделитель, ГраницаЭлементаУправления.Низ); + Если ПропорциональныйРазмер Тогда + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Панель, ГраницаЭлементаУправления.Верх, Панель, + ГраницаЭлементаУправления.Низ); + Иначе + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Панель, ГраницаЭлементаУправления.Низ); + КонецЕсли; + ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Верх, Разделитель, ГраницаЭлементаУправления.Низ); + КонецЕсли; + //Разделитель.Высота = ШиринаРазделителя; + Иначе // Скроем + Если Разделитель <> ГлавныйЭлемент Тогда + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Верх); + ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Верх); + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ГлавныйЭлемент, ГраницаЭлементаУправления.Верх); + ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Низ; + КонецЕсли; + Разделитель.Свертка = РежимСверткиЭлементаУправления.Низ; + Если ПодчиненныйЭлемент <> Неопределено Тогда + ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ГлавныйЭлемент, ГраницаЭлементаУправления.Верх); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ирОбщий.СтрокиРавныЛкс(Направление, "верх") Тогда + Если Видимость Тогда + // Откроем + Если ПодчиненныйЭлемент <> Неопределено Тогда + ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Разделитель, ГраницаЭлементаУправления.Верх); + КонецЕсли; + Разделитель.Свертка = РежимСверткиЭлементаУправления.Нет; + Если Разделитель <> ГлавныйЭлемент Тогда + ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Нет; + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Верх, Разделитель, ГраницаЭлементаУправления.Низ); + Если ПропорциональныйРазмер Тогда + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Панель, ГраницаЭлементаУправления.Верх, Панель, + ГраницаЭлементаУправления.Низ); + Иначе + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Панель, ГраницаЭлементаУправления.Низ); + КонецЕсли; + ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Разделитель, ГраницаЭлементаУправления.Верх); + //Разделитель.Высота = ШиринаРазделителя; + КонецЕсли; + Иначе // Скроем + Если Разделитель <> ГлавныйЭлемент Тогда + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ); + ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Низ); + Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Верх, ГлавныйЭлемент, ГраницаЭлементаУправления.Низ); + ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Верх; + КонецЕсли; + Разделитель.Свертка = РежимСверткиЭлементаУправления.Верх; + Если ПодчиненныйЭлемент <> Неопределено Тогда + ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Верх, ГлавныйЭлемент, ГраницаЭлементаУправления.Низ); + КонецЕсли; + КонецЕсли; + + КонецЕсли; +КонецПроцедуры + +// <Описание процедуры> +// +// Параметры: +// Ссылка - Ссылка, КлючЗаписи, КонстантаМенеджер; +// ПолноеИмя - Строка - полное имя метаданных для константы. +// +Процедура ОткрытьСсылкуИзРезультатаПоискаСсылокЛкс(Ссылка, ПолноеИмя = "") Экспорт + + Если ирОбщий.ЛиКлючЗаписиРегистраЛкс(Ссылка) Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)); + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ФормаСписка = ПолучитьФормуСпискаЛкс(ОбъектМетаданных.ПолноеИмя(),,,,,, Ссылка); + ФормаСписка.Открыть(); + ИначеЕсли ирОбщий.ЛиКорневойТипКонстантыЛкс(ирОбщий.ПервыйФрагментЛкс(ПолноеИмя)) Тогда + ОткрытьКонстантуВСпискеЛкс(ирОбщий.ПоследнийФрагментЛкс(ПолноеИмя)); + Иначе + ОткрытьЗначениеЛкс(Ссылка); + КонецЕсли; + +КонецПроцедуры + +Процедура ОткрытьКонстантуВСпискеЛкс(ИмяКонстанты) Экспорт + + ФормаСписка = ПолучитьФормуЛкс("Обработка.ирРедакторКонстант.Форма",,, ИмяКонстанты); + ФормаСписка.НачальноеЗначениеВыбора = ИмяКонстанты; + ФормаСписка.Открыть(); + +КонецПроцедуры + +Функция ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Знач Элемент, Знач Текст = Неопределено, Знач ВыделитьТекстДоКонца = Ложь) Экспорт + + НачалоКолонки = 0; НачалоСтроки = 0; КонецКолонки = 0; КонецСтроки = 0; + Элемент.ПолучитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки); + Если Текст = Неопределено Тогда + Текст = Элемент.Значение; + КонецЕсли; + Если Истина + И Не ВыделитьТекстДоКонца + И Вычислить("ЭтаФорма." + СтрЗаменить(Элемент.Данные, "." + ирОбщий.ПеревестиСтроку("Отбор") + ".", "." + ирОбщий.ПеревестиСтроку("ОтборСтрок") + ".")) = Текст + Тогда + // Блокируем нежелательный повторный вызов события АвтоподборТекста, который возникает в некоторых случаях + Возврат Ложь; + КонецЕсли; + Элемент.Значение = Текст; // Даже при совпадающих значения тут происходит неявная установка значения в связанные данные формы + //ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, Текст); // Так делать нельзя, т.к. будет засоряться история последних введенных строк + Если Текст = "" Тогда + Возврат Истина; + КонецЕсли; + // Этот блок вызывает нежелательное повторный вызов события АвтоподборТекста, но он необходим, чтобы событие ПриИзменении сработало при уходе фокуса + Элемент.УстановитьГраницыВыделения(1, СтрДлина(Текст) + 1); + Элемент.ВыделенныйТекст = Элемент.ВыделенныйТекст; + + Если ВыделитьТекстДоКонца Тогда + //Элемент.УстановитьГраницыВыделения(СтрДлина(Текст) + 1, СтрДлина(Текст) + 1); // так будет ошибка, ставить справа от последнего символа можно только 4-мя параметрами + Элемент.УстановитьГраницыВыделения(НачалоСтроки, СтрДлина(Текст) + 1, КонецСтроки, СтрДлина(Текст) + 1); + Иначе + Элемент.УстановитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки); + КонецЕсли; + Возврат Истина; + +КонецФункции + +Функция ПрочитатьЗначениеИзФайлаСКонтролемПотерьЛкс(ПолноеИмяФайла) Экспорт + + ФайлЗначения = Новый Файл(ПолноеИмяФайла); + ПолученноеЗначение = Неопределено; + Если ФайлЗначения.Существует() Тогда + Текст = Новый ТекстовыйДокумент; + Текст.Прочитать(ПолноеИмяФайла); + Текст = Текст.ПолучитьТекст(); + Попытка + ПолученноеЗначение = ирОбщий.ЗначениеИзСтрокиВнутрЛкс(Текст); + Исключение + ирОбщий.СообщитьЛкс("Ошибка чтения из файла: " + ОписаниеОшибки()); + КонецПопытки; + КонецЕсли; + Если ПолученноеЗначение = Неопределено Тогда + Возврат ПолученноеЗначение; + КонецЕсли; + СравнениеФайлов = Новый СравнениеФайлов; + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + Если Не ПроверитьСериализациюXMLПередВызовомЗначениеВФайлЛкс(ПолученноеЗначение) Тогда + //ирОбщий.СообщитьЛкс("Не удалось сериализовать считанные из файла данные: " + ОписаниеОшибки(), СтатусСообщения.Внимание); + Возврат ПолученноеЗначение; + КонецЕсли; + Попытка + ЗначениеВФайл(ИмяВременногоФайла, ПолученноеЗначение); + Исключение + Возврат ПолученноеЗначение; + КонецПопытки; + СравнениеФайлов.ПервыйФайл = ПолноеИмяФайла; + СравнениеФайлов.ВторойФайл = ИмяВременногоФайла; + СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.Двоичное; + Если Не СравнениеФайлов.Сравнить() Тогда + //СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент; + //СравнениеФайлов.ПоказатьРазличия(); // Для отладки + ирОбщий.СообщитьЛкс("При чтении из файла вероятно была потеряна часть информации", СтатусСообщения.Внимание); + КонецЕсли; + УдалитьФайлы(ИмяВременногоФайла); + Возврат ПолученноеЗначение; + +КонецФункции + +Функция ПроверитьСериализациюXMLПередВызовомЗначениеВФайлЛкс(Знач ПолученноеЗначение) Экспорт + + Если ирКэш.НомерВерсииПлатформыЛкс() >= 803012 Тогда + СериализацияXMLУспешна = Истина; + Иначе + СериализацияXMLУспешна = Ложь; + Попытка + // Антибаг платформы https://bugboard.v8.1c.ru/error/000035977.html + // ЗначениеВФайл на некоторых ошибках вызывает безусловное завершение работы http://devtool1c.ucoz.ru/forum/2-746-1 + // http://devtool1c.ucoz.ru/forum/2-752-1 + // Выполняется сильно дольше чем ЗначениеВФайл! + ирОбщий.ОбъектВСтрокуXMLЛкс(ПолученноеЗначение); + СериализацияXMLУспешна = Истина; + Исключение + // Может быть ошибка - Отсутствует отображение для типа 'ОбходРезультатаЗапроса'. http://devtool1c.ucoz.ru/forum/2-756-1 + КонецПопытки; + КонецЕсли; + Возврат СериализацияXMLУспешна; + +КонецФункции + +Процедура УстановитьАвтоматическоеРаскрытиеУзловДереваЛкс(Знач ТабличноеПолеДерева, Порог = 30) Экспорт + + Дерево = ТабличноеПолеДерева.Значение; + #Если Сервер И Не Сервер Тогда + Дерево = Новый ДеревоЗначений; + #КонецЕсли + ДеревоЗначенийСвернутьРазвернутьЛкс(ТабличноеПолеДерева, ирОбщий.ВсеСтрокиДереваЗначенийЛкс(Дерево).Количество() > Порог); + Если Дерево.Строки.Количество() = 1 Тогда + ТабличноеПолеДерева.Развернуть(Дерево.Строки[0]); + КонецЕсли; + +КонецПроцедуры + +Функция БазовыйФайлРедактораJSONЛкс() экспорт + Возврат ирКэш.Получить().БазовыйФайлРедактораJSON(); +КонецФункции + +Процедура РедакторJSON_ИнициироватьЛкс(РедакторJSON) Экспорт + РедакторJSON.menu.style.backgroundColor = "#d0d0d0"; +КонецПроцедуры + +Процедура ПереключитьРежимДереваРедактораJSONЛкс(РедакторJSON, РежимДерева) Экспорт + Если РежимДерева Тогда + РедакторJSON.setMode("tree"); + Иначе + РедакторJSON.setMode("code"); + КонецЕсли; + РедакторJSON_ИнициироватьЛкс(РедакторJSON); +КонецПроцедуры + +Процедура ПоказатьНеуникальныеСтрокиТабличногоПоляЛкс(Знач ТабличноеПоле, Знач СтрокаКлюча = "") Экспорт + + НеуникальныеКлючи = ирОбщий.НеуникальныеКлючиТаблицыЛкс(ТабличноеПоле.Значение, СтрокаКлюча); + ТекстСообщения = "Найдено " + НеуникальныеКлючи.Количество() + " неуникальных ключей строк"; + Если НеуникальныеКлючи.Количество() > 0 Тогда + ВыделитьСтрокиТабличногоПоляПоКлючуЛкс(ТабличноеПоле, НеуникальныеКлючи[0], СтрокаКлюча); + ТекстСообщения = ТекстСообщения + ". Выделены строки первого ключа"; + //ЭтаФорма.ТекущийЭлемент = ТабличноеПоле; + КонецЕсли; + ирОбщий.СообщитьЛкс(ТекстСообщения); + +КонецПроцедуры + +Процедура ОтладитьОтложенныйОбъектЛкс(Знач СсылкаИлиИмяФайла = Неопределено, УдалитьОбъектПослеУспешногоОткрытия = Ложь) Экспорт + + Если ирОбщий.ПроверитьПлатформаНеWindowsЛкс(,, Истина) Тогда + Возврат; + КонецЕсли; + СтруктураПараметров = Неопределено; + ирПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + Ссылка = Справочники.ирОбъектыДляОтладки.ПустаяСсылка(); + ирПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Если СсылкаИлиИмяФайла = Неопределено Тогда + ВычислительРегулярныхВыражений = ирПлатформа.RegExp; + ВычислительРегулярныхВыражений.Pattern = "Объект ""([^""]+)""|Файл ""([^""]+)""|Пользователь ""([^""]+)"""; + СсылкаИлиИмяФайла = ТекстИзБуфераОбменаОСЛкс(); + Результат = ВычислительРегулярныхВыражений.НайтиВхождения(СсылкаИлиИмяФайла); + ЕстьСправочник = Метаданные.Справочники.Найти("ирОбъектыДляОтладки") <> Неопределено; + //Если Не ВвестиСтроку(СсылкаИлиИмяФайла, "Введите результат сохранения объекта") Тогда + ФормаВвода = ирПлатформа.ПолучитьФорму("ОткрытьОбъектДляОтладки"); + Если Результат.Количество() > 0 Тогда + ФормаВвода.Текст = СсылкаИлиИмяФайла; + КонецЕсли; + СсылкаИлиИмяФайла = ФормаВвода.ОткрытьМодально(); + Если Не ЗначениеЗаполнено(СсылкаИлиИмяФайла) Тогда + Если ЕстьСправочник Тогда + СсылкаИлиИмяФайла = ВыбратьСсылкуЛкс(Метаданные.Справочники.ирОбъектыДляОтладки,, Ложь); + Иначе + СсылкаИлиИмяФайла = ВыбратьФайлОбъектаДляОтладкиЛкс(); + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(СсылкаИлиИмяФайла) Тогда + Возврат; + КонецЕсли; + Если ТипЗнч(СсылкаИлиИмяФайла) = Тип("Строка") Тогда + Результат = ВычислительРегулярныхВыражений.НайтиВхождения(СсылкаИлиИмяФайла); + Если Результат.Количество() = 0 Тогда + ирОбщий.СообщитьЛкс("Введен некорректный результат сохранения объекта для отладки"); + Возврат; + КонецЕсли; + Если Результат[0].SubMatches(0) <> Неопределено Тогда + Если ЕстьСправочник Тогда + ВычислительРегулярныхВыражений.Pattern = "\b(" + ирПлатформа.шGUID + ")\b"; + Результат = ВычислительРегулярныхВыражений.НайтиВхождения(СсылкаИлиИмяФайла); + Если Результат.Количество() > 0 Тогда + СсылкаИлиИмяФайла = Результат[0].Value; + Иначе + СсылкаИлиИмяФайла = Неопределено; + КонецЕсли; + Иначе + СсылкаИлиИмяФайла = Неопределено; + КонецЕсли; + Если СсылкаИлиИмяФайла = Неопределено Тогда + ирОбщий.СообщитьЛкс("Введен некорректный результат сохранения объекта для отладки"); + Возврат; + КонецЕсли; + СсылкаИлиИмяФайла = Справочники.ирОбъектыДляОтладки.ПолучитьСсылку(Новый УникальныйИдентификатор(СсылкаИлиИмяФайла)); + Если Не ЗначениеЗаполнено(СсылкаИлиИмяФайла) Тогда + ирОбщий.СообщитьЛкс("Объект для отладки не найден в справочнике"); + Возврат; + КонецЕсли; + ИначеЕсли Результат[0].SubMatches(1) <> Неопределено Тогда + СсылкаИлиИмяФайла = Результат[0].SubMatches(1); + Если ЕстьСправочник Тогда + // Перекладываем из файла в новый элемент справочника + ФайлОбъектаДляОтладки = Новый Файл(СсылкаИлиИмяФайла); + Попытка + ОбъектДляОтладки = ЗначениеИзФайла(ФайлОбъектаДляОтладки.ПолноеИмя); + Исключение + ОбъектДляОтладки = ирОбщий.ОбъектИзСтрокиXMLЛкс(ФайлОбъектаДляОтладки); + КонецПопытки; + РезультатОтложения = ирОбщий.ОтложитьУпакованныйОбъектДляОтладкиЛкс(ОбъектДляОтладки, СсылкаИлиИмяФайла); + ирОбщий.СообщитьЛкс(РезультатОтложения); + УдалитьФайлы(ФайлОбъектаДляОтладки.ПолноеИмя); + КонецЕсли; + ИначеЕсли Результат[0].SubMatches(2) <> Неопределено Тогда + ИмяПользователя = Результат[0].SubMatches(2); + СтруктураПараметров = ХранилищеОбщихНастроек.Загрузить(ирКэш.ИмяПродукта(), ирОбщий.ИмяНастройкиХраненияОбъектаОтложеннойОтладкиЛкс(),, ИмяПользователя); + Если СтруктураПараметров = Неопределено Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Объект для отладки не найден в общих настройках пользователя %1",, ИмяПользователя)); + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если СтруктураПараметров = Неопределено Тогда + //Если ТипЗнч(СсылкаИлиИмяФайла) = Тип("Строка") Тогда + // СтрокаРезультата = ПолучитьИзВременногоХранилища(СсылкаИлиИмяФайла); + // Если СтрокаРезультата = Неопределено Тогда + // ирОбщий.СообщитьЛкс("Временное хранилище пусто. Вероятно отлаживаемый сеанс завершился."); + // Возврат; + // КонецЕсли; + ЧтениеXML = Новый ЧтениеXML; + Если ТипЗнч(СсылкаИлиИмяФайла) = Тип("Строка") Тогда + Попытка + СтруктураПараметров = ЗначениеИзФайла(СсылкаИлиИмяФайла); + Исключение + ЧтениеXML.ОткрытьФайл(СсылкаИлиИмяФайла); + КонецПопытки; + ИначеЕсли ирОбщий.ЛиСсылкаНаОбъектБДЛкс(СсылкаИлиИмяФайла) Тогда + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | ирОбъектыДляОтладки.XML + |ИЗ + | Справочник.ирОбъектыДляОтладки КАК ирОбъектыДляОтладки + |ГДЕ + | ирОбъектыДляОтладки.Ссылка = &Ссылка + |"; + Запрос.УстановитьПараметр("Ссылка", СсылкаИлиИмяФайла); + ТаблицаРезультата = Запрос.Выполнить().Выгрузить(); + Если ТаблицаРезультата.Количество() = 0 Тогда + ирОбщий.СообщитьЛкс("Объект для отладки не найден в справочнике. Вероятно он был удален."); + Возврат; + КонецЕсли; + СтрокаРезультата = ТаблицаРезультата[0]; + СтрокаРезультата = СтрокаРезультата.XML; + Попытка + СтруктураПараметров = ЗначениеИзСтрокиВнутр(СтрокаРезультата); + Исключение + ЧтениеXML.УстановитьСтроку(СтрокаРезультата); + КонецПопытки; + КонецЕсли; + Если СтруктураПараметров = Неопределено Тогда + Попытка + СтруктураПараметров = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + ирОбщий.СообщитьЛкс("Некорректный объект для отладки: " + ОписаниеОшибки, СтатусСообщения.Внимание); + Возврат; + КонецПопытки; + КонецЕсли; + КонецЕсли; + ОтладитьОбъектПоСтруктуреЛкс(СтруктураПараметров); + Если УдалитьОбъектПослеУспешногоОткрытия Тогда + Если ТипЗнч(СсылкаИлиИмяФайла) = Тип("Строка") Тогда + УдалитьФайлы(СсылкаИлиИмяФайла); + Иначе + УдалениеОбъекта = Новый УдалениеОбъекта(СсылкаИлиИмяФайла); + УдалениеОбъекта.ОбменДанными.Загрузка = Истина; + УдалениеОбъекта.Записать(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ВыбратьФайлОбъектаДляОтладкиЛкс() Экспорт + + ПутьДляФайловОбъектовДляОтладки = ирОбщий.ПолучитьКаталогОбъектовДляОтладкиЛкс(); + Расширение = ирОбщий.РасширениеФайловДляОтладкиЛкс(); + Результат = ВыбратьФайлЛкс(, Расширение, "Файлы объектов для отладки",, ПутьДляФайловОбъектовДляОтладки); + Если Результат <> Неопределено Тогда + Результат = "Файл """ + Результат + """"; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Процедура ОтладитьОбъектПоСтруктуреЛкс(Знач СтруктураПараметров) Экспорт + + #Если Сервер И Не Сервер Тогда + СтруктураПараметров = Новый Структура; + #КонецЕсли + Объект = СтруктураПараметров.Объект; + Если СтруктураПараметров.Свойство("ИмяПользователя") Тогда + ИмяПользователя = СтруктураПараметров.ИмяПользователя; + Если ИмяПользователя <> ИмяПользователя() Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонЛкс("Загружаемый снимок объекта для отладки был сделан под другим пользователем (%1)", ИмяПользователя)); + КонецЕсли; + КонецЕсли; + Если СтруктураПараметров.Свойство("Транзакция") Тогда + ирОбщий.СообщитьЛкс("Загружаемый снимок объекта для отладки сделан в транзакции. Если она не зафиксирована, поведение объекта может отличаться. Показан неполный список незафиксированных на тот момент изменений."); + АнализЖурналаРегистрации = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирАнализЖурналаРегистрации"); + #Если Сервер И Не Сервер Тогда + АнализЖурналаРегистрации = Обработки.ирАнализЖурналаРегистрации.Создать(); + #КонецЕсли + ОтборЖурнала = СтруктураПараметров.Транзакция; + Начало = ОтборЖурнала.Начало; + Конец = ОтборЖурнала.Конец; + ОтборЖурнала.Удалить("Начало"); + ОтборЖурнала.Удалить("Конец"); + АнализЖурналаРегистрации.ОткрытьСОтбором(Начало, Конец, ОтборЖурнала); + КонецЕсли; + ТипОперации = СтруктураПараметров.ТипОперации; + Если ТипОперации = "Отладить" Тогда + Объект2 = СтруктураПараметров.НастройкаКомпоновки; + Если СтруктураПараметров.Свойство("ТипОбъекта") И СтруктураПараметров.ТипОбъекта = "HttpСоединение" Тогда + // Параметр ИспользоватьАутентификациюОС появился в 8.3.7 + Если Объект.Защищенное Тогда + ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; + Иначе + ЗащищенноеСоединение = Неопределено; + КонецЕсли; + Объект = Вычислить("Новый HTTPСоединение(Объект.Сервер, Объект.Порт, Объект.Пользователь, Объект.Пароль,, Объект.Таймаут, ЗащищенноеСоединение, Объект.ИспользоватьАутентификациюОС)"); + ЗаполнитьЗначенияСвойств(Объект, СтруктураПараметров.Объект); + Объект2 = Новый HTTPЗапрос; + ЗаполнитьЗначенияСвойств(Объект2, СтруктураПараметров.НастройкаКомпоновки); + Если СтруктураПараметров.НастройкаКомпоновки.ТелоДвоичныеДанные <> Неопределено Тогда + Объект2.УстановитьТелоИзДвоичныхДанных(СтруктураПараметров.НастройкаКомпоновки.ТелоДвоичныеДанные); + КонецЕсли; + ИначеЕсли ТипЗнч(Объект) = Тип("Структура") Тогда + СтруктураЗапроса = Объект; + Если Истина + И СтруктураЗапроса.Свойство("ВременныеТаблицы") + И СтруктураЗапроса.ВременныеТаблицы <> Неопределено + Тогда + ИменаВременныхТаблиц = Неопределено; + МенеджерВременныхТаблиц = ирОбщий.ВосстановитьМенеджерВременныхТаблицЛкс(СтруктураЗапроса.ВременныеТаблицы, Объект2); + КонецЕсли; + Объект = Новый Запрос; + Объект.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; + Объект.Текст = СтруктураЗапроса.Текст; + + // Антибаг платформы 8.2.18. Некорректная сериализация моментов времени http://partners.v8.1c.ru/forum/thread.jsp?id=1159525#1159525 + //ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураЗапроса.Параметры, Объект.Параметры); + Для Каждого КлючИЗначение Из СтруктураЗапроса.Параметры Цикл + Объект.Параметры.Вставить(КлючИЗначение.Ключ, ирОбщий.ЗначениеИзСтрокиВнутрЛкс(КлючИЗначение.Значение)); + КонецЦикла; + Если Объект.Параметры.Свойство("_ОбъектыДанныхТранзакции") Тогда + ОбъектыДанных = Новый Массив; + Для Каждого СнимокОбъекта Из Объект.Параметры._ОбъектыДанныхТранзакции Цикл + ОбъектыДанных.Добавить(ирОбщий.ОбъектИзСнимкаЛкс(СнимокОбъекта)); + КонецЦикла; + Объект.Параметры.Вставить("_ОбъектыДанныхТранзакции", ОбъектыДанных); + КонецЕсли; + Иначе + Если Истина + И СтруктураПараметров.Свойство("ВременныеТаблицы") + И СтруктураПараметров.ВременныеТаблицы <> Неопределено + Тогда + МенеджерВременныхТаблиц = ирОбщий.ВосстановитьМенеджерВременныхТаблицЛкс(СтруктураПараметров.ВременныеТаблицы); + КонецЕсли; + КонецЕсли; + ирОбщий.ОтладитьЛкс(Объект, , Объект2, СтруктураПараметров.ВнешниеНаборыДанных,,,,, МенеджерВременныхТаблиц); + ИначеЕсли ТипОперации = "Исследовать" Тогда + Если СтруктураПараметров.Свойство("СериализацияФабрикой") Тогда + Если СтруктураПараметров.СериализацияФабрикой = Истина Тогда + Объект = ирОбщий.ОбъектXDTOИзСтрокиXMLЛкс(Объект, Истина); + ИначеЕсли СтруктураПараметров.СериализацияФабрикой = "Внутр" Тогда + Объект = ирОбщий.ЗначениеИзСтрокиВнутрЛкс(Объект); + ирОбщий.СообщитьЛкс("Из-за неуспешной сериализации XML применена ЗначениеВСтрокуВнутр(), которая допускает потери (например очищает ссылки на строки таблицы/дерева значений)"); + КонецЕсли; + КонецЕсли; + ирОбщий.ИсследоватьЛкс(Объект, , СтруктураПараметров.КакКоллекцию); + КонецЕсли; + +КонецПроцедуры + +Процедура ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка, РасширенноеЗначение = Null, ЛиТипСтрокаСлужебный = Ложь) Экспорт + + Менеджер = Неопределено; + ТекущеееЗначение = ирОбщий.ДанныеЭлементаФормыЛкс(Элемент); + Если ТипЗнч(ТекущеееЗначение) = Тип("Строка") Тогда + Элемент.Значение = Текст; // Восстановим значение, т.к. при чтении из него в режиме пароля оно меняется на "*************" + Попытка + ТипЗначенияПоля = ирОбщий.ТипЗначенияЭлементаФормыЛкс(Элемент); + Исключение + Если ТипЗнч(Элемент) = Тип("ПолеВвода") Тогда + ВызватьИсключение; + Иначе + // Для поля формы игнорируем + Возврат; + КонецЕсли; + КонецПопытки; + Типы = ТипЗначенияПоля.Типы(); + Если Типы.Количество() > 1 Тогда + ЗначениеСсылки = ирОбщий.НавигационнаяСсылкаВЗначениеЛкс(ТекущеееЗначение); + Если Не ЗначениеЗаполнено(ЗначениеСсылки) Тогда + ЗначениеСсылки = ирОбщий.ПреобразоватьЗначениеИзSDBLЛкс(ТекущеееЗначение); + КонецЕсли; + Если Истина + И ЗначениеСсылки <> Неопределено + И ТипЗнч(ЗначениеСсылки) <> Тип("Строка") + И Элемент.ТипЗначения.СодержитТип(ТипЗнч(ЗначениеСсылки)) + Тогда + Ответ = КодВозвратаДиалога.Да; + Если Не ЛиТипСтрокаСлужебный Тогда + Ответ = Вопрос("Хотите вставить строку как ссылку?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет); + КонецЕсли; + Если Ответ = КодВозвратаДиалога.Да Тогда + Значение = ЗначениеСсылки; + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(ЗначениеСсылки) Тогда + Фрагменты = ирОбщий.СтрРазделитьЛкс(ТекущеееЗначение); + Если Фрагменты.Количество() > 1 Тогда + ИмяТипа = Фрагменты[0] + "." + Фрагменты[1]; + Попытка + ОписаниеТипов = Новый ОписаниеТипов(ИмяТипа); + Исключение + ОписаниеТипов = Неопределено; + КонецПопытки; + Если ОписаниеТипов <> Неопределено Тогда + Значение = ОписаниеТипов.ПривестиЗначение(); + Менеджер = ирОбщий.ПолучитьМенеджерЛкс(Значение); + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Истина + И ЛиТипСтрокаСлужебный + И СтандартнаяОбработка + И ЗначениеЗаполнено(ТекущеееЗначение) + Тогда + Значение = ""; + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ирОбщий.ЛиТипСсылкиБДЛкс(ТипЗнч(ТекущеееЗначение)) Тогда + Менеджер = ирОбщий.ПолучитьМенеджерЛкс(ТекущеееЗначение); + КонецЕсли; + Если Менеджер <> Неопределено Тогда + Значение = ирОбщий.ПреобразоватьПредставлениеВСсылкуЛкс(Менеджер, Текст); + Если Значение <> Неопределено Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; + ИначеЕсли Не Элемент.ОграничениеТипа.СодержитТип(Тип("ПолеКомпоновкиДанных")) Тогда + Если Ложь + Или (Истина + И РасширенноеЗначение <> Null + И ТипЗнч(РасширенноеЗначение) <> ТипЗнч(ТекущеееЗначение)) + Или Элемент.ОграничениеТипа.ПривестиЗначение(ТекущеееЗначение) <> ТекущеееЗначение + Тогда + // Откат + СтандартнаяОбработка = Ложь; + Значение = Новый СписокЗначений; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Процедура - Поле ввода с историей выбора при изменении +// +// Параметры: +// ПолеВвода - - +// КлючИстории - Строка, Форма - +// ЗапоминатьПоследние - - +// НеЗапоминатьПустыеТипизированные - - +// ДополнительныйКлючИстории - Строка - используется только если КлючИстории не ялвяется строкой +// +Процедура ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Знач ЭлементФормыИлиЭлементОтбора, Знач КлючИстории, Знач ЗапоминатьПоследние = 20, Знач _НеЗапоминатьПустыеТипизированные = Истина, + ДополнительныйКлючИстории = "", Знач ЗначениеПоля = Неопределено) Экспорт + + Если ЗначениеПоля = Неопределено Тогда + Если ТипЗнч(ЭлементФормыИлиЭлементОтбора) = Тип("ЭлементОтбора") Тогда + ЗначениеПоля = ЭлементФормыИлиЭлементОтбора.Значение; + ИначеЕсли ТипЗнч(ЭлементФормыИлиЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЗначениеПоля = ЭлементФормыИлиЭлементОтбора.ПравоеЗначение; + ИначеЕсли ТипЗнч(ЭлементФормыИлиЭлементОтбора) = Тип("КолонкаТабличногоПоля") Тогда + ПолеВвода = ЭлементФормыИлиЭлементОтбора.ЭлементУправления; + ЗначениеПоля = ПолеВвода.Значение; + Иначе + ПолеВвода = ЭлементФормыИлиЭлементОтбора; + ЗначениеПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ПолеВвода); + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ЗначениеПоля) Тогда + НовоеЗначениеXML = ирОбщий.ОбъектВСтрокуXMLЛкс(ЗначениеПоля); + Если СтрДлина(НовоеЗначениеXML) > 1000 Тогда + Возврат; + КонецЕсли; + КлючИстории = ирОбщий.КлючИсторииВыбораПоляВводаЛкс(ЭлементФормыИлиЭлементОтбора, КлючИстории, ДополнительныйКлючИстории); + ПоследниеЗначения = ирОбщий.ВосстановитьЗначениеЛкс(КлючИстории); + Если ТипЗнч(ПоследниеЗначения) <> Тип("Массив") Тогда + ПоследниеЗначения = Новый Массив; + КонецЕсли; + ПоследниеЗначенияXML = Новый Массив; + Для Каждого Значение Из ПоследниеЗначения Цикл + ПоследниеЗначенияXML.Добавить(ирОбщий.ОбъектВСтрокуXMLЛкс(Значение)); + КонецЦикла; + Индекс = ПоследниеЗначенияXML.Найти(НовоеЗначениеXML); + Если Индекс <> Неопределено Тогда + ПоследниеЗначения.Удалить(Индекс); + КонецЕсли; + ПоследниеЗначения.Вставить(0, ЗначениеПоля); + Для Счетчик = ЗапоминатьПоследние По ПоследниеЗначения.ВГраница() Цикл + ПоследниеЗначения.Удалить(ЗапоминатьПоследние); + КонецЦикла; + ирОбщий.СохранитьЗначениеЛкс(КлючИстории, ПоследниеЗначения); + Если Ложь + Или ТипЗнч(ПолеВвода) = Тип("ПолеФормы") + Или ТипЗнч(ПолеВвода) = Тип("ПолеВвода") + Тогда + // https://partners.v8.1c.ru/forum/topic/1150632 + ПолеВвода.СписокВыбора.ЗагрузитьЗначения(ПоследниеЗначения); + Если Истина + И ТипЗнч(ЗначениеПоля) = Тип("СписокЗначений") + И ПолеВвода.ПолучитьДействие("ОбработкаВыбора") = Неопределено + Тогда + // Без этого обработчика выбор из списка не устанавливает значение + ирОбщий.СообщитьЛкс("В поле ввода отсутствует обработчик ОбработкаВыбора"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// . +// Параметры: +// РедактированиеРазрешено - Булево - для открытия ссылки надо установить Ложь +// ЭлементУправления - Неопределено - значение этого элемента управления открываем, при открытии значения из ячейки табличного поля должно быть Неопределено +// ЭлементУправленияРодитель - ТабличноеПоле - чью ячейку открываем +// Результат: +// Булево - Истина если значение было изменено +Функция ОткрытьЗначениеЛкс(РасширенноеЗначение, РедактированиеРазрешено = Истина, СтандартнаяОбработка = Истина, ЗаголовокФормы = "", РедактироватьМодально = Истина, + ПринудительноВОтдельнойФорме = Истина, ЭлементУправления = Неопределено, ЭлементУправленияРодитель = Неопределено, Знач ИскомаяСтрока = "", Знач КлючУникальности = Неопределено) Экспорт + + Результат = Ложь; + ТипРасширенногоЗначения = ТипЗнч(РасширенноеЗначение); + ХмлТип = XMLТипЗнч(РасширенноеЗначение); + Если Ложь + Или ТипРасширенногоЗначения = Тип("ТаблицаЗначений") + Или ТипРасширенногоЗначения = Тип("ДеревоЗначений") + Или ТипРасширенногоЗначения = Тип("МоментВремени") + Или ТипРасширенногоЗначения = Тип("ТабличныйДокумент") + Или ТипРасширенногоЗначения = Тип("Массив") + Или ТипРасширенногоЗначения = Тип("ФиксированныйМассив") + Или ТипРасширенногоЗначения = Тип("Граница") + Или ТипРасширенногоЗначения = Тип("УникальныйИдентификатор") + Или ТипРасширенногоЗначения = Тип("Тип") + Или ТипРасширенногоЗначения = Тип("ОписаниеТипов") + Или ТипРасширенногоЗначения = Тип("СписокЗначений") + Или ТипРасширенногоЗначения = Тип("ДвоичныеДанные") + Или ТипРасширенногоЗначения = Тип("ХранилищеЗначения") + Или ТипРасширенногоЗначения = Тип("Картинка") + Или (Истина + И ТипРасширенногоЗначения = Тип("Строка") + И (Ложь + Или ПринудительноВОтдельнойФорме + Или СтрДлина(РасширенноеЗначение) > 100 + Или Найти(РасширенноеЗначение, "://") > 00 // есть гиперссылки + //Или Не РедактированиеРазрешено + )) + Тогда + Если Не ЗначениеЗаполнено(КлючУникальности) Тогда + КлючУникальности = Новый УникальныйИдентификатор; + КонецЕсли; + СтандартнаяОбработка = Ложь; + ЕстьРастягивающиесяВертикальноЭлементы = Истина; + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Если Ложь + Или ТипРасширенногоЗначения = Тип("ТаблицаЗначений") + Или ТипРасширенногоЗначения = Тип("ДеревоЗначений") + Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("ТаблицаЗначений", , РасширенноеЗначение); + ФормаРедактирования.ПараметрТабличноеПоле = ЭлементУправления; + ИначеЕсли ТипРасширенногоЗначения = Тип("МоментВремени") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("МоментВремени", , РасширенноеЗначение); + ЕстьРастягивающиесяВертикальноЭлементы = Ложь; + ИначеЕсли ТипРасширенногоЗначения = Тип("ТабличныйДокумент") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("ТабличныйДокумент", , РасширенноеЗначение); + Если ЭлементУправления <> Неопределено Тогда + ФормаРедактирования.ПолеТабличногоДокумента = ЭлементУправления; + Иначе + ФормаРедактирования.ПолеТабличногоДокумента = РасширенноеЗначение; + КонецЕсли; + ИначеЕсли ТипРасширенногоЗначения = Тип("Граница") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("Граница", , РасширенноеЗначение); + ЕстьРастягивающиесяВертикальноЭлементы = Ложь; + ИначеЕсли Ложь + Или ТипРасширенногоЗначения = Тип("Массив") + Или ТипРасширенногоЗначения = Тип("ФиксированныйМассив") + Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("Массив", , РасширенноеЗначение); + ИначеЕсли ТипРасширенногоЗначения = Тип("УникальныйИдентификатор") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("УникальныйИдентификатор", , РасширенноеЗначение); + ЕстьРастягивающиесяВертикальноЭлементы = Ложь; + ИначеЕсли ТипРасширенногоЗначения = Тип("СписокЗначений") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("СписокЗначений", , РасширенноеЗначение); + ИначеЕсли ТипРасширенногоЗначения = Тип("Строка") Тогда + ФормаРедактирования = ПолучитьФормуТекстаЛкс(,, "",, КлючУникальности); + ФормаРедактирования.ПараметрСтрокаПоиска = ИскомаяСтрока; + ИначеЕсли ТипРасширенногоЗначения = Тип("Тип") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("ВыборРедактируемыхТипов", , ТипРасширенногоЗначения); + ФормаРедактирования.РежимВыбора = Истина; + ФормаРедактирования.МножественныйВыбор = Ложь; + ИначеЕсли ТипРасширенногоЗначения = Тип("ОписаниеТипов") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("ВыборРедактируемыхТипов", , РасширенноеЗначение); + ФормаРедактирования.РежимВыбора = Истина; + ФормаРедактирования.МножественныйВыбор = Истина; + ИначеЕсли ТипРасширенногоЗначения = Тип("ХранилищеЗначения") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("ХранилищеЗначения", , КлючУникальности); + ЕстьРастягивающиесяВертикальноЭлементы = Ложь; + ИначеЕсли ТипРасширенногоЗначения = Тип("ДвоичныеДанные") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("ДвоичныеДанные", , КлючУникальности); + ИначеЕсли ТипРасширенногоЗначения = Тип("Картинка") Тогда + ФормаРедактирования = мПлатформа.ПолучитьФорму("Картинка", , КлючУникальности); + КонецЕсли; + Если ФормаРедактирования.Открыта() Тогда + Форма_АктивироватьОткрытьЛкс(ФормаРедактирования); + Возврат Результат; + КонецЕсли; + Если ЗначениеЗаполнено(ЗаголовокФормы) Тогда + ФормаРедактирования.Заголовок = ЗаголовокФормы; + КонецЕсли; + ФормаРедактирования.ТолькоПросмотр = Не РедактированиеРазрешено; + Если РедактированиеРазрешено И РедактироватьМодально Тогда + Если Ложь + Или ТипРасширенногоЗначения = Тип("ТаблицаЗначений") + Или ТипРасширенногоЗначения = Тип("ДеревоЗначений") + Тогда + ФормаРедактирования.НачальноеЗначениеВыбора = РасширенноеЗначение.Скопировать(); // Неглубокая копия, зато с полным сохранением содержимого, включая объекты метаданных + Иначе + ФормаРедактирования.НачальноеЗначениеВыбора = ирОбщий.КопияОбъектаЛкс(РасширенноеЗначение, ); // Универсально, но с потерей несериализуемых типов + КонецЕсли; + Иначе + ФормаРедактирования.НачальноеЗначениеВыбора = РасширенноеЗначение; + КонецЕсли; + Если Ложь + #Если ТолстыйКлиентУправляемоеПриложение Тогда + Или Не ЕстьРастягивающиесяВертикальноЭлементы // https://www.hostedredmine.com/issues/901852 + #КонецЕсли + Или РедактированиеРазрешено И РедактироватьМодально + Тогда + РезультатВыбора = ФормаРедактирования.ОткрытьМодально(); + Если РезультатВыбора <> Неопределено Тогда + РасширенноеЗначение = РезультатВыбора; + Результат = Истина; + КонецЕсли; + Иначе + ФормаРедактирования.Открыть(); + КонецЕсли; + ИначеЕсли ТипРасширенногоЗначения = Тип("Цвет") Тогда + СтандартнаяОбработка = Ложь; + ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета; + ДиалогВыбораЦвета.Цвет = РасширенноеЗначение; + Результат = ДиалогВыбораЦвета.Выбрать(); + Если Результат Тогда + РасширенноеЗначение = ДиалогВыбораЦвета.Цвет; + КонецЕсли; + ИначеЕсли ТипРасширенногоЗначения = Тип("Шрифт") Тогда + СтандартнаяОбработка = Ложь; + ДиалогВыбораШрифта = Новый ДиалогВыбораШрифта; + ДиалогВыбораШрифта.Шрифт = РасширенноеЗначение; + Результат = ДиалогВыбораШрифта.Выбрать(); + Если Результат Тогда + РасширенноеЗначение = ДиалогВыбораШрифта.Шрифт; + КонецЕсли; + ИначеЕсли ТипРасширенногоЗначения = Тип("СхемаКомпоновкиДанных") Тогда + СтандартнаяОбработка = Ложь; + Редактор = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольКомпоновокДанных"); + #Если Сервер И Не Сервер Тогда + Редактор = Обработки.ирКонсольКомпоновокДанных.Создать(); + #КонецЕсли + ДанныеРедактора = Новый Структура("СхемаКомпоновки", РасширенноеЗначение); + Если ЗначениеЗаполнено(ЗаголовокФормы) Тогда + ДанныеРедактора.Вставить("Имя", ЗаголовокФормы); + КонецЕсли; + Результат = Редактор.РедактироватьСтруктуруСхемы(, ДанныеРедактора, Истина); + Если Результат <> Неопределено Тогда + РасширенноеЗначение = Результат.СхемаКомпоновки; + Результат = Истина; + Иначе + Результат = Ложь; + КонецЕсли; + ИначеЕсли Ложь + Или ТипРасширенногоЗначения = Тип("Число") + Или ТипРасширенногоЗначения = Тип("Строка") + Или ТипРасширенногоЗначения = Тип("Дата") + Или ТипРасширенногоЗначения = Тип("Булево") + Или ТипРасширенногоЗначения = Тип("Неопределено") + Или ТипРасширенногоЗначения = Тип("Null") + Или ТипРасширенногоЗначения = Тип("ПолеКомпоновкиДанных") + Или ТипРасширенногоЗначения = Тип("СтандартнаяДатаНачала") + Или ТипРасширенногоЗначения = Тип("СтандартныйПериод") + Или ТипРасширенногоЗначения = Тип("ОтборКомпоновкиДанных") + Или ТипРасширенногоЗначения = Тип("ВидДвиженияНакопления") + Или ТипРасширенногоЗначения = Тип("ВидДвиженияБухгалтерии") + Или ТипРасширенногоЗначения = Тип("ВидСчета") + Или (Истина + И ХмлТип <> Неопределено + И Найти(ХмлТип.ИмяТипа, "Ref.") > 0) + + Тогда + Если ирОбщий.ЛиТипСсылкиБДЛкс(ТипРасширенногоЗначения, Ложь) Тогда + Если ЗначениеЗаполнено(РасширенноеЗначение) Тогда + ОбъектСуществует = ирОбщий.ЛиСуществуетОбъектПоСсылкеЛкс(РасширенноеЗначение); + Если Не ОбъектСуществует И Не ПринудительноВОтдельнойФорме Тогда + //ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ТабличноеПоле); + ОткрытьСсылкуВРедактореОбъектаБДЛкс(РасширенноеЗначение); + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Ложь + Или Не СтандартнаяОбработка + Или Не РедактированиеРазрешено + Или ЭлементУправленияРодитель = Неопределено + Тогда + Если ирОбщий.ЛиТипСсылкиБДЛкс(ТипРасширенногоЗначения, Ложь) Тогда + Если Истина + И ЗначениеЗаполнено(РасширенноеЗначение) + И ОбъектСуществует + Тогда + Если Не ирОбщий.ЛиДоступноРедактированиеВФормеОбъектаЛкс(Метаданные.НайтиПоТипу(ТипРасширенногоЗначения)) Тогда + ФормаСсылки = ОткрытьСсылкуВРедактореОбъектаБДЛкс(РасширенноеЗначение); + Иначе + Если Истина + И Не ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() + И Не ирОбщий.ЛиТипСсылкиВнешнейТаблицыЛкс(ТипРасширенногоЗначения) // https://www.hostedredmine.com/issues/917016 + Тогда + ФормаСсылки = РасширенноеЗначение.ПолучитьФорму(); + ФормаСсылки.Открыть(); + Иначе + ОткрытьЗначение(РасширенноеЗначение); + ФормаСсылки = АктивнаяФормаЛкс(); // В обычном приложении не работает + КонецЕсли; + КонецЕсли; + НачатьОтслеживаниеФормыСсылкиЛкс(ФормаСсылки); + КонецЕсли; + СтандартнаяОбработка = Ложь; + КонецЕсли; + Если СтандартнаяОбработка Тогда + Если ПримитивныеТипыЛкс().Найти(ТипЗнч(РасширенноеЗначение)) = Неопределено Тогда + ОткрытьЗначение(РасширенноеЗначение); + КонецЕсли; + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + Иначе + //Если Истина + // И ТипЗначения1 <> Неопределено + // И ТипЗначения1.ПривестиЗначение(РасширенноеЗначение) <> РасширенноеЗначение + //Тогда + ирОбщий.ИсследоватьЛкс(РасширенноеЗначение); + СтандартнаяОбработка = Ложь; + //КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Процедура НачатьОтслеживаниеФормыСсылкиЛкс(Форма) Экспорт + ОткрытыеФормыСсылок = ирКэш.ОткрытыеФормыСсылокЛкс(); + #Если Сервер И Не Сервер Тогда + ОткрытыеФормыСсылок = Новый Соответствие; + #КонецЕсли + ПараметрыСлежения = ОткрытыеФормыСсылок[Форма]; + Если ПараметрыСлежения = Неопределено Тогда + ПараметрыСлежения = Новый Структура; + ПараметрыСлежения.Вставить("ДобавленаВИсторию", Ложь); + ПараметрыСлежения.Вставить("МоментОткрытия", ТекущаяДата()); + ПараметрыСлежения.Вставить("Ссылка", КлючОсновногоОбъектаФормыЛкс(Форма)); + Иначе + НоваяСсылка = КлючОсновногоОбъектаФормыЛкс(Форма); + Если НоваяСсылка <> ПараметрыСлежения.Ссылка Тогда + ПараметрыСлежения.ДобавленаВИсторию = Ложь; + ПараметрыСлежения.Ссылка = НоваяСсылка; + ПараметрыСлежения.МоментОткрытия = ТекущаяДата(); + КонецЕсли; + КонецЕсли; + ОткрытыеФормыСсылок[Форма] = ПараметрыСлежения; + Если ОткрытыеФормыСсылок.Количество() = 1 Тогда + ПодключитьПроверкуФормСсылокЛкс(); + КонецЕсли; +КонецПроцедуры + +Процедура ПодключитьПроверкуФормСсылокЛкс() Экспорт + + #Если Сервер И Не Сервер Тогда + ПроверитьФормыСсылокЛкс(); + #КонецЕсли + ПодключитьГлобальныйОбработчикОжиданияЛкс("ПроверитьФормыСсылокЛкс", МинДлительностьАктивностиФормыСсылкиЛкс(), Истина); + +КонецПроцедуры + +Функция МинДлительностьАктивностиФормыСсылкиЛкс() Экспорт + + Возврат 10; + +КонецФункции + +Функция ПримитивныеТипыЛкс() Экспорт + ПримитивныеТипы = Новый Массив; + ПримитивныеТипы.Добавить(Тип("Число")); + ПримитивныеТипы.Добавить(Тип("Строка")); + ПримитивныеТипы.Добавить(Тип("Дата")); + ПримитивныеТипы.Добавить(Тип("Булево")); + ПримитивныеТипы.Добавить(Тип("Неопределено")); + ПримитивныеТипы.Добавить(Тип("Null")); + Возврат ПримитивныеТипы; +КонецФункции + +Функция ОткрытьФормуВМинимальномРазмереЛкс(Форма) Экспорт + + Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда + Форма.ОткрытьМодально(); + Иначе + Форма.Открыть(); + КонецЕсли; + +КонецФункции + +Процедура ОткрытьКонсольСерверов1СБезПараметровЛкс() Экспорт + ОткрытьКонсольСерверов1СЛкс(); +КонецПроцедуры + +Процедура ОткрытьКонсольСерверов1СЛкс(Знач СборкаПлатформы = Неопределено, ТаблицаСерверов = Неопределено) Экспорт + + Если ирОбщий.ПроверитьПлатформаНеWindowsЛкс() Тогда + Возврат; + КонецЕсли; + ОбработкаРегистрации = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирУправлениеCOMКлассами1С"); + #Если Сервер И Не Сервер Тогда + ОбработкаРегистрации = Обработки.ирУправлениеCOMКлассами1С.Создать(); + ТекущаяСтрокаТаблицыСерверов = Обработки.ирУправлениеСлужбамиСервера1С.Создать().СлужбыАгентовСерверов.Добавить(); + #КонецЕсли + ОбработкаРегистрации.ЗаполнитьТипыCOMКлассов(); + ирОбщий.ЗаполнитьДоступныеСборкиПлатформыЛкс(ОбработкаРегистрации.СборкиПлатформы,, ОбработкаРегистрации.ТипыComКлассов); + ТипКласса = "ServerAdminScope"; + Если Не ЗначениеЗаполнено(СборкаПлатформы) Тогда + СборкаПлатформы = ОбработкаРегистрации.ТекущаяСборкаПлатформы; + КонецЕсли; + СтрокаСборкиПлатформы = ОбработкаРегистрации.СборкиПлатформы.НайтиСтроки(Новый Структура("СборкаПлатформы," + ТипКласса, СборкаПлатформы, Истина)); + Если СтрокаСборкиПлатформы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + СтрокаСборкиПлатформы = СтрокаСборкиПлатформы[0]; + #Если Сервер И Не Сервер Тогда + СтрокаСборкиПлатформы = ОбработкаРегистрации.СборкиПлатформы[0]; + #КонецЕсли + ПолноеИмяФайлаКонсоли = ""; + Если ирКэш.НомерИзданияПлатформыЛкс() = "81" Тогда + КаталогПрограммныхФайлов = ирОбщий.КаталогПрограммныхФайловОСЛкс(СтрокаСборкиПлатформы.x64); + ПолноеИмяФайлаКонсоли = КаталогПрограммныхФайлов + СтрЗаменить("\1cv81\bin\1CV8 Servers.msc", "\", ирОбщий.РазделительПутиКФайлуЛкс()); + Файл = Новый Файл(ПолноеИмяФайлаКонсоли); + Если Не Файл.Существует() Тогда + ПолноеИмяФайлаКонсоли = ""; + КонецЕсли; + Иначе + ПолноеИмяФайлаКонсоли = ирОбщий.КаталогОбщихФайловВсехВерсийПлатформыЛкс(СтрокаСборкиПлатформы.x64); + Если СтрокаСборкиПлатформы.x64 Тогда + ПолноеИмяФайлаКонсоли = ПолноеИмяФайлаКонсоли + "1CV8 Servers (x86-64).msc"; + Иначе + ПолноеИмяФайлаКонсоли = ПолноеИмяФайлаКонсоли + "1CV8 Servers.msc"; + КонецЕсли; + Файл = Новый Файл(ПолноеИмяФайлаКонсоли); + Если Не Файл.Существует() Тогда + ПолноеИмяФайлаКонсоли = ""; + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ПолноеИмяФайлаКонсоли) Тогда + Если ТаблицаСерверов <> Неопределено Тогда + ТаблицаСерверов = ПолучитьТаблицуСерверовИзСпискаПользователя(ТаблицаСерверов); + ПоместитьТаблицуСерверовВСписокПользователя(ТаблицаСерверов); + КонецЕсли; + //ОбработкаРегистрации = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирУправлениеCOMКлассами1С"); + //#Если Сервер И Не Сервер Тогда + // ОбработкаРегистрации = Обработки.ирУправлениеCOMКлассами1С.Создать(); + //#КонецЕсли + //ОбработкаРегистрации.ЗаполнитьТипыCOMКлассов(); + //ОбработкаРегистрации.СборкиПлатформы.Загрузить(СборкиПлатформы.Выгрузить()); + СтрокаТипаКласса = ОбработкаРегистрации.ТипыComКлассов.Найти(ТипКласса, "Имя"); + ОбработкаРегистрации.ЗарегистрироватьCOMКлассСборкиПлатформы(СтрокаТипаКласса, СтрокаСборкиПлатформы.x64, СтрокаСборкиПлатформы.СборкаПлатформы); + ЗапуститьПриложение("""" + ПолноеИмяФайлаКонсоли + """"); + Если ЗначениеЗаполнено(ИмяПользователя()) Тогда + ТекстВБуферОбменаОСЛкс(ИмяПользователя()); + КонецЕсли; + Иначе + Если СтрокаСборкиПлатформы.x64 Тогда + ПредставлениеРазрядности = "64"; + Иначе + ПредставлениеРазрядности = "32"; + КонецЕсли; + Сообщить("Файл консоли серверов 1С " + ирКэш.НомерИзданияПлатформыЛкс() + " " + ПредставлениеРазрядности + "б не найден по пути """ + ПолноеИмяФайлаКонсоли + """"); + КонецЕсли; + +КонецПроцедуры + +Функция ОткрытьЗапросСУБДЛкс(ТекстЗапроса, ИмяЗапроса = "Запрос для отладки", Параметры = Неопределено, Автоподключение = Ложь) Экспорт + + КонсольЗапросов = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольЗапросов"); + #Если Сервер И Не Сервер Тогда + КонсольЗапросов = Обработки.ирКонсольЗапросов.Создать(); + #КонецЕсли + КонсольЗапросов.ОткрытьЗапросБД(ТекстЗапроса, ИмяЗапроса, Параметры, Автоподключение); + +КонецФункции + +Процедура ЗапуститьПриложение1СЛкс(РежимКонфигуратора, СтрокаСоединения, ИмяВСпискеБазПользователя = "", ОткрытьПортативныеИнструменты = Истина) Экспорт + ПараметрыЗапуска = ирОбщий.ПараметрыЗапускаПриложения1СЛкс(,,, РежимКонфигуратора,,,,,, СтрокаСоединения, ОткрытьПортативныеИнструменты,,,,,, ИмяВСпискеБазПользователя); + ирОбщий.ВыполнитьКомандуОСЛкс("""" + ирОбщий.ПолноеИмяИсполняемогоФайлаСтартераЛкс() + """ " + ПараметрыЗапуска); +КонецПроцедуры + +Функция ПолучитьПолноеИмяФайлаСпискаСерверов1С() Экспорт + + КаталогФайловыхКэшей = ирКэш.КаталогИзданияПлатформыВПрофилеЛкс(); + ПолноеИмяФайлаСпискаСерверов = КаталогФайловыхКэшей + ирОбщий.РазделительПутиКФайлуЛкс() + "appsrvrs.lst"; + Возврат ПолноеИмяФайлаСпискаСерверов; + +КонецФункции + +Функция ПолучитьТаблицуСерверовИзСпискаПользователя(ТаблицаСерверов = Неопределено) Экспорт + + ТаблицаСерверовИзФайла = Новый ТаблицаЗначений; + ТаблицаСерверовИзФайла.Колонки.Добавить("Протокол"); + ТаблицаСерверовИзФайла.Колонки.Добавить("Компьютер"); + ТаблицаСерверовИзФайла.Колонки.Добавить("НКомпьютер"); + ТаблицаСерверовИзФайла.Колонки.Добавить("Порт"); + ТаблицаСерверовИзФайла.Колонки.Добавить("Наименование"); + //ТаблицаСерверовИзФайла.Колонки.Добавить("ИзданиеПлатформы"); + ТаблицаСерверов.Колонки.Добавить("НКомпьютер"); + Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл + СтрокаСервера.НКомпьютер = НРег(СтрокаСервера.Компьютер); + КонецЦикла; + ПолноеИмяФайлаСпискаСерверов = ПолучитьПолноеИмяФайлаСпискаСерверов1С(); + Файл = Новый Файл(ПолноеИмяФайлаСпискаСерверов); + Если Файл.Существует() Тогда + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.Прочитать(ПолноеИмяФайлаСпискаСерверов); + ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); + // {2, + // {"tcp","pcname",1540,""}, + // {"tcp","pcname",1740,""} + // } + ДокументDOM = ирОбщий.ДокументDOMИзСтрокиВнутрЛкс(ТекстФайла); + РазыменовательПИ = Новый РазыменовательПространствИменDOM(ДокументDOM); + ИмяЭлемента = "/elem/elem"; + РезультатXPath = ДокументDOM.ирОбщий.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ, ТипРезультатаDOMXPath.УпорядоченныйИтераторУзлов); + Пока 1 = 1 Цикл + Узел = РезультатXPath.ПолучитьСледующий(); + Если Узел = Неопределено Тогда + Прервать; + КонецЕсли; + ДочерниеУзлы = Узел.ДочерниеУзлы; + // Здесь есть пробельный узел, который сместит индексы н начиная с 2, если отключить игнорирование пробельных символов при построении документа DOM + Порт = Вычислить(ДочерниеУзлы[2].ТекстовоеСодержимое); + Компьютер = ирОбщий.ПоследнийФрагментЛкс(Вычислить(ДочерниеУзлы[1].ТекстовоеСодержимое), "/"); // Имя компьютера может быть указано в виде "REMOTE/GOMER" + КлючПоиска = Новый Структура("НКомпьютер, Порт", НРег(Компьютер), Порт); + Если ТаблицаСерверовИзФайла.НайтиСтроки(КлючПоиска).Количество() > 0 Тогда + Продолжить; + КонецЕсли; + ОписаниеСервера = ТаблицаСерверовИзФайла.Добавить(); + ЗаполнитьЗначенияСвойств(ОписаниеСервера, КлючПоиска); + ОписаниеСервера.Протокол = Вычислить(ДочерниеУзлы[0].ТекстовоеСодержимое); + ОписаниеСервера.Компьютер = Компьютер; + ОписаниеСервера.Наименование = Вычислить(ДочерниеУзлы[3].ТекстовоеСодержимое); + Если Не ЗначениеЗаполнено(ОписаниеСервера.Наименование) Тогда + ОписаниеСервера.Наименование = ОписаниеСервера.Компьютер + ":" + XMLСтрока(ОписаниеСервера.Порт); + КонецЕсли; + СтрокиСервера = ТаблицаСерверов.НайтиСтроки(Новый Структура("НКомпьютер, Порт", ОписаниеСервера.НКомпьютер, ОписаниеСервера.Порт)); + КонецЦикла; + КонецЕсли; + Если ТаблицаСерверов <> Неопределено Тогда + Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл + СтрокаСервераИзФайла = ТаблицаСерверовИзФайла.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаСервераИзФайла, СтрокаСервера); + СтрокаСервераИзФайла.Протокол = "tcp"; + КонецЦикла; + КонецЕсли; + Возврат ТаблицаСерверовИзФайла; + +КонецФункции + +Процедура ПоместитьТаблицуСерверовВСписокПользователя(ТаблицаСерверов) Экспорт + + #Если _ Тогда + ТаблицаСерверов = Новый ТаблицаЗначений; + ТаблицаСерверов.Колонки.Добавить("Протокол"); + ТаблицаСерверов.Колонки.Добавить("Компьютер"); + ТаблицаСерверов.Колонки.Добавить("Порт"); + ТаблицаСерверов.Колонки.Добавить("Наименование"); + #КонецЕсли + // {2, + // {"tcp","pyramid",1540,""}, + // {"tcp","pyramid",1740,""} + // } + Текст = ""; + Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл + Если Текст <> "" Тогда + Текст = Текст + "," + Символы.ПС; + КонецЕсли; + Текст = Текст + "{" + + """" + СтрокаСервера.Протокол + """," + + """" + СтрокаСервера.Компьютер + """," + + XMLСтрока(СтрокаСервера.Порт) + "," + + """" + СтрокаСервера.Наименование + """" + + "}"; + КонецЦикла; + Текст = "{" + XMLСтрока(ТаблицаСерверов.Количество()) + "," + Символы.ПС + Текст + "}"; + ПолноеИмяФайлаСпискаСерверов = ПолучитьПолноеИмяФайлаСпискаСерверов1С(); + Файл = Новый Файл(ПолноеИмяФайлаСпискаСерверов); + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(Текст); + ТекстовыйДокумент.Записать(ПолноеИмяФайлаСпискаСерверов); + УстановитьТекущийПутьВДеревеКонсолиСерверов(ТаблицаСерверов); + +КонецПроцедуры + +Процедура УстановитьТекущийПутьВДеревеКонсолиСерверов(ТаблицаСерверов) Экспорт + + МассивПути = ПолучитьМассивПутиКСсылкеВКонсолиСерверов(); + ПолноеИмяФайлаНастроекКонсолиСерверов = ирОбщий.КаталогПеремещаемыхДанныхПриложенийЛкс() + "\Microsoft\MMC\1CV8 Servers"; + ПолноеИмяФайлаНастроекКонсолиСерверов = СтрЗаменить(ПолноеИмяФайлаНастроекКонсолиСерверов, "\", ирОбщий.РазделительПутиКФайлуЛкс()); + Файл = Новый Файл(ПолноеИмяФайлаНастроекКонсолиСерверов); + Если Не Файл.Существует() Тогда + Возврат; + КонецЕсли; + ДокументDOM = ирОбщий.ПрочитатьФайлВДокументDOMЛкс(ПолноеИмяФайлаНастроекКонсолиСерверов); + РазыменовательПИ = Новый РазыменовательПространствИменDOM(ДокументDOM); + ИмяЭлемента = "/MMC_ConsoleFile/Views/View/BookMark[2]"; + РезультатXPath = ДокументDOM.ирОбщий.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ); + ЭлементДом = РезультатXPath.ПолучитьСледующий(); + КорневыеЭлементы = ЭлементДом.ПолучитьЭлементыПоИмени("DynamicPath"); + Если КорневыеЭлементы.Количество() > 0 Тогда + КорневойЭлемент = КорневыеЭлементы[0]; + Иначе + КорневойЭлемент = ДокументDOM.СоздатьЭлемент("DynamicPath"); + ЭлементДом.ДобавитьДочерний(КорневойЭлемент); + КонецЕсли; + Пока КорневойЭлемент.ПервыйДочерний <> Неопределено Цикл + КорневойЭлемент.УдалитьДочерний(КорневойЭлемент.ПервыйДочерний); + КонецЦикла; + Для Каждого ЭлементПути Из МассивПути Цикл + ЭлементСегмент = ДокументDOM.СоздатьЭлемент("Segment"); + ЭлементСегмент.УстановитьАтрибут("String", ЭлементПути); + КорневойЭлемент.ДобавитьДочерний(ЭлементСегмент); + КонецЦикла; + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.ОткрытьФайл(ПолноеИмяФайлаНастроекКонсолиСерверов); + ЗаписьДом = Новый ЗаписьDOM; + ЗаписьДом.Записать(ДокументDOM, ЗаписьXML); + +КонецПроцедуры + +Функция ПолучитьМассивПутиКСсылкеВКонсолиСерверов(Знач ИмяСервера = "") + + Если Не ЗначениеЗаполнено(ИмяСервера) Тогда + ИмяСервера = ирОбщий.ИмяКомпьютераКластераЛкс(); + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяСервера) Тогда + ИмяСервера = ИмяКомпьютера(); + КонецЕсли; + // + // + // + // + // + МассивПути = Новый Массив; + ЭлементПути = ИмяСервера; + Если ирОбщий.ЭтоИмяЛокальногоКомпьютераЛкс(ЭлементПути) Тогда + ЭлементПути = "(*)" + ЭлементПути; + КонецЕсли; + МассивПути.Добавить(ЭлементПути); + Возврат МассивПути; + +КонецФункции + +Функция ОткрытьТаблицуЗначенийЛкс(Знач ТаблицаЗначений, Знач ТекущаяСтрока = Неопределено, Модально = Истина, Заголовок = "", РежимВыбора = Ложь, ТолькоПросмотр = Истина, + ОтключитьОформление = Ложь, КлючУникальности = Неопределено) Экспорт + + Если КлючУникальности = Неопределено Тогда + КлючУникальности = ТаблицаЗначений; + КонецЕсли; + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ИмитаторТабличногоПоля = Новый Структура; + ИмитаторТабличногоПоля.Вставить("Имя"); + ИмитаторТабличногоПоля.Вставить("ТекущаяКолонка"); + ИмитаторТабличногоПоля.Вставить("ТекущаяСтрока", ТекущаяСтрока); + ИмитаторТабличногоПоля.Вставить("Значение", ТаблицаЗначений); + ИмитаторТабличногоПоля.Вставить("ВыделенныеСтроки", Новый Массив); + ИмитаторТабличногоПоля.Вставить("Подвал", Ложь); + ФормаРедактирования = мПлатформа.ПолучитьФорму("ТаблицаЗначений", , КлючУникальности); + ФормаРедактирования.ПараметрТабличноеПоле = ИмитаторТабличногоПоля; + ФормаРедактирования.ПараметрОтключитьОформление = ОтключитьОформление; + ФормаРедактирования.НачальноеЗначениеВыбора = ТаблицаЗначений; + //ФормаРедактирования.КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна; // Программно добавленные колонки всегда НЕ сохраняются платформой + ФормаРедактирования.ТолькоПросмотр = ТолькоПросмотр; + Если ЗначениеЗаполнено(Заголовок) Тогда + ФормаРедактирования.Заголовок = Заголовок; + КонецЕсли; + ФормаРедактирования.РежимВыбора = РежимВыбора; + Если Модально Тогда + Результат = ФормаРедактирования.ОткрытьМодально(); + Иначе + ФормаРедактирования.Открыть(); + Результат = ФормаРедактирования; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ВыбратьЭлементСпискаЗначенийЛкс(Знач СписокЗначений, Знач ТекущийЭлемент = Неопределено, Модально = Истина, Заголовок = "", МножественныйВыбор = Ложь) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаРедактирования = мПлатформа.ПолучитьФорму("СписокЗначений", , СписокЗначений); + ФормаРедактирования.НачальноеЗначениеВыбора = СписокЗначений; + ФормаРедактирования.НачальныйЭлементСписка = ТекущийЭлемент; + ФормаРедактирования.МножественныйВыбор = МножественныйВыбор; + Если ЗначениеЗаполнено(Заголовок) Тогда + ФормаРедактирования.Заголовок = Заголовок; + КонецЕсли; + ФормаРедактирования.РежимВыбора = Истина; + Если Модально Тогда + Результат = ФормаРедактирования.ОткрытьМодально(); + Иначе + ФормаРедактирования.Открыть(); + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ОткрытьРедакторИзПоляТабличногоДокументаЛкс(ПолеТабличногоДокумента) Экспорт + + Копия = Новый ТабличныйДокумент; + Копия.Вывести(ПолеТабличногоДокумента); + ЗаполнитьЗначенияСвойств(Копия, ПолеТабличногоДокумента); + Результат = ОткрытьЗначениеЛкс(Копия,,,, Ложь); + Возврат Результат; + +КонецФункции + +Функция ОткрытьРедакторСтрокиТаблицыЛкс(ЭтаФорма, ТабличноеПоле, ИмяТаблицыБДТабличногоПоля = Неопределено, СвязиИПараметрыВыбора = Истина, Знач СтруктураВладельца = Неопределено) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Форма = мПлатформа.ПолучитьФорму("СтрокаТаблицы", ЭтаФорма, ТабличноеПоле); + Форма.ИмяТаблицыБД = ИмяТаблицыБДТабличногоПоля; + Форма.СвязиИПараметрыВыбора = СвязиИПараметрыВыбора; + Форма.СтруктураВладельца = СтруктураВладельца; + Форма.Открыть(); + Возврат Форма; + +КонецФункции + +Процедура ОткрытьФайлВПроводникеЛкс(Знач ИмяФайла) Экспорт + + ЗапуститьПриложение("explorer /select, """ + ИмяФайла + """"); + +КонецПроцедуры + +// Результат - Булево - Истина если значение было изменено +Функция ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка = Ложь, РасширенноеЗначение = Null, + РедактированиеРазрешено = Истина, ПринудительноВОтдельнойФорме = Ложь, Данные = "", Знач Заголовок = "", Знач СтрокаПоиска = "") Экспорт + + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + Колонка = ТабличноеПоле.ТекущаяКолонка; + ЭлементУправления = Колонка.ЭлементУправления; + Иначе + Колонка = ТабличноеПоле.ТекущийЭлемент; + ЭлементУправления = Колонка; + КонецЕсли; + Если Не ЗначениеЗаполнено(Данные) Тогда + Данные = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + Если РасширенноеЗначение = Null Тогда + Если Не ЗначениеЗаполнено(Данные) Тогда + Возврат Ложь; + КонецЕсли; + РасширенноеЗначение = ТабличноеПоле.ТекущиеДанные[Данные]; + КонецЕсли; + КлючУникальности = ""; + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + ДобавитьКлючСтрокиВЗаголовок = Ложь; + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(ТабличноеПоле.ТекущаяСтрока); + Ячейка = ОформлениеСтроки.Ячейки[Колонка.Имя]; + РедактированиеРазрешено = РедактированиеРазрешено И Не Ячейка.ТолькоПросмотр; + Если Не ЗначениеЗаполнено(Заголовок) Тогда + Заголовок = Колонка.ТекстШапки; + ДобавитьКлючСтрокиВЗаголовок = Истина; + КонецЕсли; + Попытка + КлючУникальности = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока); + Исключение + КонецПопытки; + Иначе + Если Не ЗначениеЗаполнено(Заголовок) Тогда + Заголовок = Колонка.Заголовок; + ДобавитьКлючСтрокиВЗаголовок = Истина; + КонецЕсли; + Попытка + КлючУникальности = ТабличноеПоле.ПолучитьИдентификатор(ТабличноеПоле.ТекущаяСтрока); + Исключение + КонецПопытки; + КонецЕсли; + Если ДобавитьКлючСтрокиВЗаголовок И КлючУникальности <> "" Тогда + КлючУникальности = Формат(КлючУникальности, "ЧН="); + Заголовок = Заголовок + " [" + КлючУникальности + "]"; + КонецЕсли; + КлючУникальности = "" + ирОбщий.ИдентификаторФормыЛкс(ЭтаФорма) + ";" + Колонка.Имя + ";" + КлючУникальности; + КонецЕсли; + РедактированиеРазрешено = Истина + И РедактированиеРазрешено + И Не ТабличноеПоле.ТолькоПросмотр + И Не Колонка.ТолькоПросмотр + И (Ложь + Или ЭлементУправления = Неопределено + Или ТипЗнч(ЭлементУправления) = Тип("Флажок") + Или Не ЭлементУправления.ТолькоПросмотр); + Если РедактированиеРазрешено И ПринудительноВОтдельнойФорме Тогда + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + СтруктураТипа = мПлатформа.СтруктураТипаИзЗначения(РасширенноеЗначение); + Попытка + СвойствоГлобальногоКонтекста = Вычислить(СтруктураТипа.ИмяОбщегоТипа); + Исключение + СвойствоГлобальногоКонтекста = Неопределено; + КонецПопытки; + Если Истина + И СвойствоГлобальногоКонтекста <> Неопределено + И СвойствоГлобальногоКонтекста <> Null + Тогда + мПлатформа.ИнициализацияОписанияМетодовИСвойств(); + СписокВыбора = Новый СписокЗначений; + #Если Сервер И Не Сервер Тогда + СписокВыбора = Новый СписокЗначений; + #КонецЕсли + НачальныйВыбор = Неопределено; + СтрокиЗначений = мПлатформа.ТаблицаКонтекстов.НайтиСтроки(Новый Структура("ТипКонтекста, ЯзыкПрограммы", "Перечисление" + СтруктураТипа.ИмяОбщегоТипа, 0)); + Для Каждого СтрокаЗначения Из СтрокиЗначений Цикл + ЗначениеПеречисления = Вычислить(СтруктураТипа.ИмяОбщегоТипа + "." + СтрокаЗначения.Слово); + ЭлементСписка = СписокВыбора.Добавить(ЗначениеПеречисления); + Если РасширенноеЗначение = ЗначениеПеречисления Тогда + НачальныйВыбор = ЭлементСписка; + КонецЕсли; + КонецЦикла; + Если СписокВыбора.Количество() > 0 Тогда + РезультатВыбора = ЭтаФорма.ВыбратьИзСписка(СписокВыбора, ЭлементУправления, НачальныйВыбор); + Результат = РезультатВыбора <> Неопределено; + Если Результат Тогда + РасширенноеЗначение = РезультатВыбора.Значение; + КонецЕсли; + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Результат = Неопределено Тогда + Если Не ЗначениеЗаполнено(СтрокаПоиска) Тогда + СтрокаПоиска = ирКлиент.ТабличноеПолеСтрокаПоискаЛкс(ЭтаФорма, ТабличноеПоле); + КонецЕсли; + Результат = ОткрытьЗначениеЛкс(РасширенноеЗначение, РедактированиеРазрешено, СтандартнаяОбработка, Заголовок,, ПринудительноВОтдельнойФорме,, ТабличноеПоле, СтрокаПоиска, КлючУникальности); + КонецЕсли; + Если Результат Тогда + НовоеЗначение = РасширенноеЗначение; // Сохраняем значение, т.к. оно может испортиться следующей строкой + ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, НовоеЗначение); // Почему то запрещенные для поля ввода значения здесь превращаются в строку (например МоментВремени, УникальныйИдентификатор) + РасширенноеЗначение = НовоеЗначение; + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Результат - Булево - Истина если значение было изменено +Функция ПолеВводаРасширенногоЗначения_НачалоВыбораЛкс(Знач Элемент, СтандартнаяОбработка, РасширенноеЗначение = Null, Знач СтруктураОтбора = Неопределено) Экспорт + + Если РасширенноеЗначение = Null Тогда + РасширенноеЗначение = Элемент.Значение; + КонецЕсли; + ЗначениеИзменено = Ложь; + Если РасширенноеЗначение = Неопределено Тогда + СтандартнаяОбработка = Ложь; + ОграничениеТипа = ирОбщий.ПересечьОписанияТиповЛкс(Элемент.ОграничениеТипа, Элемент.ТипЗначения); + НовыйТипИлиЗначение = ВыбратьРедактируемыйТипЛкс(ОграничениеТипа); + Если НовыйТипИлиЗначение <> Неопределено Тогда + Если ТипЗнч(НовыйТипИлиЗначение) = Тип("Тип") Тогда + МассивТипов = ирОбщий.ЗначенияВМассивЛкс(НовыйТипИлиЗначение); + НовоеОписаниеТипов = Новый ОписаниеТипов(МассивТипов); + НовоеЗначение = НовоеОписаниеТипов.ПривестиЗначение(Неопределено); + Иначе + НовоеЗначение = НовыйТипИлиЗначение; + КонецЕсли; + РасширенноеЗначение = НовоеЗначение; + Элемент.Значение = РасширенноеЗначение; // + ЗначениеИзменено = Истина; + КонецЕсли; + Иначе + Если Истина + И ТипЗнч(Элемент) = Тип("ПолеВвода") + И ТипЗнч(Элемент.Значение) = Тип("СписокЗначений") + И ТипЗнч(РасширенноеЗначение) = Тип("СписокЗначений") + Тогда + РасширенноеЗначение.ТипЗначения = Элемент.ТипЗначенияСписка; + КонецЕсли; + Если ТипЗнч(РасширенноеЗначение) = Тип("Булево") Тогда + РасширенноеЗначение = Не РасширенноеЗначение; + ЗначениеИзменено = Истина; + СтандартнаяОбработка = Ложь; + ИначеЕсли Истина + И ТипЗнч(РасширенноеЗначение) <> Тип("Дата") + И ТипЗнч(РасширенноеЗначение) <> Тип("Число") + И Не ирОбщий.ЛиСсылкаНаОбъектБДЛкс(РасширенноеЗначение, Ложь) + Тогда + ЗначениеИзменено = ОткрытьЗначениеЛкс(РасширенноеЗначение, Истина, СтандартнаяОбработка); + Если ЗначениеИзменено И ТипЗнч(Элемент) = Тип("ПолеВвода") Тогда + Элемент.Значение = РасширенноеЗначение; + КонецЕсли; + КонецЕсли; + // Вредно для колонки вариантов значений в таблице параметров в консоли кода при отмене редактирования нового списка + //Если Не СтандартнаяОбработка Тогда + // Элемент.Значение = РасширенноеЗначение; + //КонецЕсли; + Если СтандартнаяОбработка Тогда + ОткрытьФормуВыбораСсылкиЛкс(РасширенноеЗначение, СтруктураОтбора, Элемент, СтандартнаяОбработка); + КонецЕсли; + КонецЕсли; + Возврат ЗначениеИзменено; + +КонецФункции + +// Результат - Булево - Истина если значение было изменено +Функция ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка, РасширенноеЗначение = Null, ИспользоватьОграничениеТипа = Ложь, + СтруктураОтбора = Неопределено, Данные = "", Знач СтрокаПоиска = "", Знач Заголовок = "") Экспорт + + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + Колонка = ТабличноеПоле.ТекущаяКолонка; + ЭлементУправления = Колонка.ЭлементУправления; + Иначе + Колонка = ТабличноеПоле.ТекущийЭлемент; + ЭлементУправления = Колонка; + КонецЕсли; + Если Не ЗначениеЗаполнено(Данные) Тогда + Данные = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + РазрешитьВыборТипа = Истина; + Иначе + РазрешитьВыборТипа = Ложь; + КонецЕсли; + Если РасширенноеЗначение = Null Тогда + РасширенноеЗначение = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле)[Данные]; + КонецЕсли; + ЗначениеИзменено = Ложь; + Если РасширенноеЗначение = Неопределено Или РасширенноеЗначение = Null Тогда + Если Не РазрешитьВыборТипа Тогда + Возврат ЗначениеИзменено; + КонецЕсли; + СтандартнаяОбработка = Ложь; + ОграничениеТипа = Неопределено; + Если ИспользоватьОграничениеТипа Тогда + ОграничениеТипа = ЭлементУправления.ОграничениеТипа; + Если Истина + И ОграничениеТипа.Типы().Количество() = 0 + И ТипЗнч(ЭлементУправления) = Тип("ПолеФормы") + И ЗначениеЗаполнено(ЭлементУправления.СвязьПоТипу.ПутьКДанным) + Тогда + ЭтаФорма = ирОбщий.РодительЭлементаУправляемойФормыЛкс(ЭлементУправления); + Попытка + ОграничениеТипа = Вычислить("ЭтаФорма." + ЭлементУправления.СвязьПоТипу.ПутьКДанным); + Исключение + ВызватьИсключение "Ошибка вычисления влияющего типа поля: " + ОписаниеОшибки(); + КонецПопытки; + КонецЕсли; + Если ОграничениеТипа.Типы().Количество() = 0 Тогда + ОграничениеТипа = ирОбщий.ТипЗначенияЭлементаФормыЛкс(ЭлементУправления); // Очень большое количество типов будет замедлять работу формы выбора типа https://www.hostedredmine.com/issues/923113 + КонецЕсли; + КонецЕсли; + НовыйТипИлиЗначение = ВыбратьРедактируемыйТипЛкс(ОграничениеТипа,,,,, Заголовок); + Если НовыйТипИлиЗначение <> Неопределено Тогда + Если ТипЗнч(НовыйТипИлиЗначение) = Тип("Тип") Тогда + МассивТипов = ирОбщий.ЗначенияВМассивЛкс(НовыйТипИлиЗначение); + НовоеОписаниеТипов = Новый ОписаниеТипов(МассивТипов); + НовоеЗначение = НовоеОписаниеТипов.ПривестиЗначение(Неопределено); + Иначе + НовоеЗначение = НовыйТипИлиЗначение; + КонецЕсли; + ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, НовоеЗначение); // Почему то запрещенные для поля ввода значения здесь превращаются в строку (например МоментВремени) + РасширенноеЗначение = НовоеЗначение; + ЗначениеИзменено = Истина; + //// http://www.hostedredmine.com/issues/884276 + //ОткрытьФормуВыбораСсылкиЛкс(РасширенноеЗначение, СтруктураОтбора, ЭлементУправления); + КонецЕсли; + КонецЕсли; + Если РасширенноеЗначение <> Неопределено Тогда + ДанныеТабличногоПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + Если ТипЗнч(ДанныеТабличногоПоля) = Тип("ОтборКомпоновкиДанных") Тогда + #Если Сервер И Не Сервер Тогда + ДанныеТабличногоПоля = Новый ОтборКомпоновкиДанных; + #КонецЕсли + ДоступноеПолеОтбора = ДанныеТабличногоПоля.ДоступныеПоляОтбора.НайтиПоле(ТабличноеПоле.ТекущиеДанные.ЛевоеЗначение); + Если ДоступноеПолеОтбора <> Неопределено Тогда + СтруктураОтбора = СтруктураОтбораЗначенийДоступногоПоляКомпоновкиЛкс(ДоступноеПолеОтбора); + КонецЕсли; + КонецЕсли; + Если ТипЗнч(РасширенноеЗначение) = Тип("СписокЗначений") Тогда + СтандартнаяОбработка = Ложь; + ЗначениеИзменено = ОткрытьСписокЗначенийЛкс(РасширенноеЗначение, СтруктураОтбора, Заголовок); + Если ЗначениеИзменено Тогда + ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, РасширенноеЗначение); // Нужно для управляемой формы https://www.hostedredmine.com/issues/956333 + КонецЕсли; + Иначе + Если Истина + И Не ирОбщий.ЛиСсылкаНаОбъектБДЛкс(РасширенноеЗначение, Ложь) + И ТипЗнч(РасширенноеЗначение) <> Тип("ПорядокКомпоновкиДанных") + И ТипЗнч(РасширенноеЗначение) <> Тип("ОтборКомпоновкиДанных") + И ТипЗнч(РасширенноеЗначение) <> Тип("УсловноеОформлениеКомпоновкиДанных") + И ТипЗнч(РасширенноеЗначение) <> Тип("СтруктураНастроекКомпоновкиДанных") + Тогда + ЗначениеИзменено = ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка, РасширенноеЗначение, Истина, Истина, Данные, Заголовок, СтрокаПоиска) Или ЗначениеИзменено; + КонецЕсли; + КонецЕсли; + //Если ЗначениеИзменено Тогда + Если Не СтандартнаяОбработка И ЗначениеЗаполнено(Данные) Тогда + ТабличноеПоле.ТекущиеДанные[Данные] = РасширенноеЗначение;// + КонецЕсли; + Если СтандартнаяОбработка Тогда + ОткрытьФормуВыбораСсылкиЛкс(РасширенноеЗначение, СтруктураОтбора, ЭлементУправления, СтандартнаяОбработка); + КонецЕсли; + КонецЕсли; + Возврат ЗначениеИзменено; + +КонецФункции + +Процедура ОткрытьФормуВыбораСсылкиЛкс(Знач РасширенноеЗначение, Знач СтруктураОтбора, Знач ЭлементУправления, СтандартнаяОбработка) Экспорт + + Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(РасширенноеЗначение, Ложь) Тогда + ОткрытьФормуСпискаЛкс(ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(РасширенноеЗначение)), СтруктураОтбора,, ЭлементУправления, Истина,, РасширенноеЗначение); + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +Функция СтруктураОтбораЗначенийДоступногоПоляКомпоновкиЛкс(Знач ДоступноеПолеОтбора) Экспорт + + МетаданныеРеквизита = СтруктураСвязейИПараметровВыбораЛкс(); + МетаданныеРеквизита.ПараметрыВыбора = ДоступноеПолеОтбора.ПолучитьПараметрыВыбора(); + СтруктураОтбора = ирКлиент.СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(МетаданныеРеквизита); + Возврат СтруктураОтбора; + +КонецФункции + +Функция СтруктураСвязейИПараметровВыбораЛкс() Экспорт + + МетаданныеРеквизита = Новый Структура("ПараметрыВыбора, СвязиПараметровВыбора", Новый Массив, Новый Массив); + Возврат МетаданныеРеквизита; + +КонецФункции + +// Получить структуру отбора по связям И параметрам выбора +// +// Параметры: +// ЭтотОбъект - - <тип> - +// ПолеФормыИлиРеквизитМетаданных - - <тип> - +// СтруктураТЧ - Структура - один элемент, ключ не играет роли (оставлено для совместимости) +// ДляОчистки - - <тип>, Ложь - +// +// Возвращаемое значение: +// - +// +Функция СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(ПолеФормыИлиРеквизитМетаданных, ЭтотОбъект = Неопределено, СтруктураТЧ = Неопределено, ДляОчистки = Ложь) Экспорт + + Попытка + СвязиПараметровВыбора = ПолеФормыИлиРеквизитМетаданных.СвязиПараметровВыбора; + Исключение + Возврат Новый Структура(); + КонецПопытки; + ПараметрыВыбора = ПолеФормыИлиРеквизитМетаданных.ПараметрыВыбора; + Результат = Новый Структура("Отбор", Новый Структура); + Для Каждого СвязьПараметраВыбора Из СвязиПараметровВыбора Цикл + #Если Сервер И Не Сервер Тогда + СвязьПараметраВыбора = Новый СвязьПараметраВыбора; + #КонецЕсли + Если Истина + И ДляОчистки + И СвязьПараметраВыбора.ИзменениеЗначения = РежимИзмененияСвязанногоЗначения.НеИзменять + Тогда + Продолжить; + КонецЕсли; + ПолныйПутьКДанным = "ЭтотОбъект." + СвязьПараметраВыбора.ПутьКДанным; + Если СтруктураТЧ <> Неопределено Тогда + КлючИЗначениеТЧ = Неопределено; + Для Каждого КлючИЗначение Из СтруктураТЧ Цикл + КлючИЗначениеТЧ = КлючИЗначение; + Прервать; + КонецЦикла; + //Если ирОбщий.СтрокиРавныЛкс(ирОбщий.ПервыйФрагментЛкс(СвязьПараметраВыбора.ПутьКДанным), КлючИЗначениеТЧ.Ключ) Тогда + // ПолныйПутьКДанным = "СтруктураТЧ." + СвязьПараметраВыбора.ПутьКДанным; + //КонецЕсли; + Если СтрЧислоВхождений(СвязьПараметраВыбора.ПутьКДанным, ".") = 1 Тогда + ПолныйПутьКДанным = "СтруктураТЧ." + КлючИЗначениеТЧ.Ключ + "." + ирОбщий.ПоследнийФрагментЛкс(СвязьПараметраВыбора.ПутьКДанным); + КонецЕсли; + КонецЕсли; + Попытка + ЗначениеДанных = Вычислить(ПолныйПутьКДанным); + Исключение + // Например поле таблицы или на сервере текущая строка таблицы + Продолжить; + КонецПопытки; + ирОбщий.УстановитьВложенноеСвойствоСтруктурыЛкс(Результат, СвязьПараметраВыбора.Имя, ЗначениеДанных); + КонецЦикла; + Для Каждого ПараметрВыбора Из ПараметрыВыбора Цикл + #Если Сервер И Не Сервер Тогда + ПараметрВыбора = Новый ПараметрВыбора; + #КонецЕсли + ирОбщий.УстановитьВложенноеСвойствоСтруктурыЛкс(Результат, ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЦикла; + Результат = Результат.Отбор; // Возможно потом перейдем везде на передачу полной структуры + Возврат Результат; + +КонецФункции + +Функция ОткрытьСписокЗначенийЛкс(Список, СтруктураОтбора = Неопределено, Заголовок = "") Экспорт + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаРедактирования = мПлатформа.ПолучитьФорму("СписокЗначений"); + ФормаРедактирования.НачальноеЗначениеВыбора = Список; + ФормаРедактирования.СтруктураОтбора = СтруктураОтбора; + Если ЗначениеЗаполнено(Заголовок) Тогда + ФормаРедактирования.Заголовок = Заголовок; + КонецЕсли; + РезультатФормы = ФормаРедактирования.ОткрытьМодально(); + Если РезультатФормы <> Неопределено Тогда + Список = РезультатФормы; + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Параметры: +// ЭтаФорма - Форма - +// ТабличноеПоле - ТабличноеПоле - +// ИмяКолонкиИмениРеквизита - Примитивный - +// ПолноеИмяТаблицы - Строка - +// СвязиИПараметрыВыбора - Булево - +// СтандартнаяОбработка - Булево - +Функция ПолеВводаКолонкиЗначенияРеквизита_НачалоВыбораЛкс(ЭтаФорма, ТабличноеПоле, ПолноеИмяТаблицы, ИмяКолонкиИмениРеквизита = "Имя", ИмяКолонкиЗначения = "Значение", + СвязиИПараметрыВыбора = Истина, СтандартнаяОбработка = Истина, Ссылка = Неопределено, Знач ВладелецТЧ = Неопределено, Знач СтрокаПоиска = "") Экспорт + + Заголовок = ТабличноеПоле.ТекущиеДанные[ИмяКолонкиИмениРеквизита]; + Если СвязиИПараметрыВыбора Тогда + СтруктураОтбора = ПолеВводаКолонкиЗначенияРеквизита_ОтборВыбораЛкс(ТабличноеПоле, ПолноеИмяТаблицы, ИмяКолонкиИмениРеквизита, ИмяКолонкиЗначения, Ссылка, ВладелецТЧ); + ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ПолноеИмяТаблицы); + ТекущиеДанные = ТабличноеПоле.ТекущаяСтрока; + Если ЗначениеЗаполнено(ТекущиеДанные.ДопРеквизит) Тогда + ДопРеквизит = ТекущиеДанные.ДопРеквизит; + #Если Сервер И Не Сервер Тогда + ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка(); + #КонецЕсли + ПриведенноеЗначение = ДопРеквизит.ТипЗначения.ПривестиЗначение(ТекущиеДанные[ИмяКолонкиЗначения]); + Если ПриведенноеЗначение <> ТекущиеДанные[ИмяКолонкиЗначения] Тогда + СтандартнаяОбработка = Ложь; + ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, ТабличноеПоле.Колонки[ИмяКолонкиЗначения], ПриведенноеЗначение); + Возврат Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + УспехВыбора = ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка, , Истина, СтруктураОтбора,, СтрокаПоиска, Заголовок); + Возврат УспехВыбора; +КонецФункции + +// Функция - Поле ввода колонки значения реквизита отбор выбора лкс +// +// Параметры: +// ТабличноеПоле - - +// ПолноеИмяТаблицы - - +// ИмяКолонкиИмениРеквизита - - +// ИмяКолонкиЗначения - - +// Ссылка - - +// ВладелецТЧ - Ссылка, Структура - +// +// Возвращаемое значение: +// Структура - отбор для выбора ссылочного значения +// +Функция ПолеВводаКолонкиЗначенияРеквизита_ОтборВыбораЛкс(Знач ТабличноеПоле, Знач ПолноеИмяТаблицы, Знач ИмяКолонкиИмениРеквизита = "Имя", Знач ИмяКолонкиЗначения = "Значение", + Знач Ссылка = Неопределено, Знач ВладелецТЧ = Неопределено) Экспорт + + ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ПолноеИмяТаблицы); + ТекущиеДанные = ТабличноеПоле.ТекущаяСтрока; + СтрокаПоля = ПоляТаблицыБД.Найти(ТекущиеДанные[ИмяКолонкиИмениРеквизита], "Имя"); + Если СтрокаПоля <> Неопределено Тогда + МетаРеквизит = СтрокаПоля.Метаданные; + СтруктураРеквизитов = Новый Структура; + Для Каждого СтрокаРеквизита Из ТабличноеПоле.Значение Цикл + ИмяРеквизита = СтрокаРеквизита[ИмяКолонкиИмениРеквизита]; + Если Не ирОбщий.ЛиИмяПеременнойЛкс(ИмяРеквизита) Тогда + // Доп. реквизит БСП + Продолжить; + КонецЕсли; + ЗначениеРеквизита = СтрокаРеквизита[ИмяКолонкиЗначения]; + Если ИмяРеквизита = "ИдентификаторСсылкиЛкс" Тогда + ИмяРеквизита = "Ссылка"; + ЗначениеРеквизита = Ссылка; + КонецЕсли; + СтруктураРеквизитов.Вставить(ИмяРеквизита, ЗначениеРеквизита); + КонецЦикла; + Если ирОбщий.ЛиТипВложеннойТаблицыБДЛкс(ирОбщий.ТипТаблицыБДЛкс(ПолноеИмяТаблицы)) Тогда + ОсновныеДанные = ВладелецТЧ; + СтруктураТЧ = Новый Структура(ирОбщий.ПоследнийФрагментЛкс(ПолноеИмяТаблицы), СтруктураРеквизитов); + Иначе + ОсновныеДанные = СтруктураРеквизитов; + СтруктураТЧ = Неопределено; + КонецЕсли; + СтруктураОтбора = ирКлиент.СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(МетаРеквизит, ОсновныеДанные, СтруктураТЧ); + ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.ДопРеквизит) Тогда + ДопРеквизит = ТекущиеДанные.ДопРеквизит; + #Если Сервер И Не Сервер Тогда + ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка(); + #КонецЕсли + СтруктураОтбора = Новый Структура("Владелец", ДопРеквизит); + КонецЕсли; + Возврат СтруктураОтбора; + +КонецФункции + +// Вызывать после установки признака ТолькоПросмотр ячеек. +// +// Параметры: +// ЭтаФорма - - +// Элемент - - +// ОформлениеСтроки - - +// ДанныеСтроки - - +// КнопкаРежимаОтображения - - +// КолонкиСПиктограммамиТипов - Строка, Структура - +// РасширенныеКолонки - Структура - +// РасширенноеПредставлениеХранилищЗначений - - +// РасширенныеДанныеСтроки - - +// КолонкиДляРежимаОтображения - - +// РасширенноеПредставлениеДат - Булево - введен для ускорения +// +Процедура ТабличноеПолеПриВыводеСтрокиЛкс(Знач ЭтаФорма, Знач Элемент, Знач ОформлениеСтроки, Знач ДанныеСтроки, Знач КнопкаРежимаОтображения = Неопределено, Знач КолонкиСПиктограммамиТипов = "", + Знач РасширенныеКолонки = Неопределено, Знач РасширенноеПредставлениеХранилищЗначений = Ложь, Знач РасширенныеДанныеСтроки = Неопределено, Знач КолонкиДляРежимаОтображения = Неопределено, + Знач РасширенноеПредставлениеДат = Ложь) Экспорт + + #Если Сервер И Не Сервер Тогда + Элемент = Новый ТабличноеПоле; + #КонецЕсли + Если Ложь + Или ДанныеСтроки = Неопределено + Или ирКэш = Неопределено // Портативный режим при закрытии всех форм http://devtool1c.ucoz.ru/forum/2-1616-1 + Тогда + Возврат; + КонецЕсли; + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, Элемент); + Если ДопСвойства.ЗапретОтображения = Истина Тогда + Возврат; + КонецЕсли; + Если ДопСвойства.ЗапретРазметкиВхождений <> Истина Тогда + ШаблонРазметкиВхождений = ирОбщий.ШаблонРазметкиВхожденийЛкс(); + МенеджерПоиска = ДопСвойства.МенеджерПоиска; + ПрефиксСтрокиПоиска = ""; + Если МенеджерПоиска <> Неопределено Тогда + ПрефиксСтрокиПоиска = МенеджерПоиска.ПрефиксСтрокиПоиска; + Если МенеджерПоиска.НайденныеСтроки.Найти(ДанныеСтроки) <> Неопределено Тогда + ОформлениеСтроки.ЦветФона = ирОбщий.ЦветФонаЯчеекТекущегоЗначенияЛкс(); + КонецЕсли; + КонецЕсли; + СтрокаПоиска = ирКлиент.ТабличноеПолеСтрокаПоискаЛкс(ЭтаФорма, Элемент, ПрефиксСтрокиПоиска); + КолонкиПоиска = Неопределено; + ИскатьСРодителем = Ложь; + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + РазрешитьОкраскуПоиска = Истина; + Если МенеджерПоиска <> Неопределено Тогда + КолонкиПоиска = МенеджерПоиска.КолонкиПоиска; + РазрешитьОкраскуПоиска = МенеджерПоиска.РазрешитьОкраску; + ИскатьСРодителем = МенеджерПоиска.ИскатьСРодителем; + КонецЕсли; + ВычислительРегВыражений = ирКэш.ВычислительРегВыраженийЛкс(); + #Если Сервер И Не Сервер Тогда + ВычислительРегВыражений = Обработки.ирОболочкаРегВыражение.Создать(); + #КонецЕсли + ВычислительРегВыражений.Global = Истина; + СловаПоиска = ирОбщий.РазделитьСтрокуПоискаНаСловаПоискаЛкс(НРег(СтрокаПоиска), ИскатьСРодителем); + Если ИскатьСРодителем Тогда + Если ДанныеСтроки.Уровень() = 0 Тогда + Пока СловаПоиска.Количество() > 1 Цикл + СловаПоиска.Удалить(1); + КонецЦикла; + Иначе + СловаПоиска.Удалить(0); + КонецЕсли; + КонецЕсли; + ВычислительРегВыражений.Pattern = ирОбщий.РегВыражениеСтрокиПоискаЛкс(СловаПоиска, Ложь); + ИначеЕсли ТипЗнч(Элемент.Значение) <> Тип("НастройкиКомпоновкиДанных") Тогда + РазрешитьОкраскуПоиска = Ложь; + Если ДопСвойства.Отбор <> Неопределено Тогда + КолонкиПоиска = СловаПоискаПоКолонкамИзОтбораПостроителяЛкс(Элемент, ДопСвойства.Отбор); + Если КолонкиПоиска.Количество() > 0 Тогда + СтрокаПоиска = "Ё"; // любая непустая строка + ВычислительРегВыражений = ирКэш.ВычислительРегВыраженийЛкс(); + Для Каждого КлючИЗначение Из КолонкиПоиска Цикл + КлючИЗначение.Значение[0] = "(" + ирОбщий.ПреобразоватьТекстДляРегулярныхВыраженийЛкс(КлючИЗначение.Значение[0]) + ")"; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ТолькоПросмотрТабличногоПоля = Элемент.ТолькоПросмотр Или ЭтаФорма.ТолькоПросмотр И Элемент.ИзменяетДанные; + КолонкиТаблицы = Элемент.Колонки; + Если КнопкаРежимаОтображения <> Неопределено Тогда + ВариантОтображенияИдентификаторов = КнопкаРежимаОтображения.Текст; + КонецЕсли; + Ячейки = ОформлениеСтроки.Ячейки; + Если РасширенныеДанныеСтроки = Неопределено Тогда + РасширенныеДанныеСтроки = ДанныеСтроки; + КонецЕсли; + Если КолонкиДляРежимаОтображения <> Неопределено Тогда + КолонкиДляРежимаОтображения = Новый Структура(КолонкиДляРежимаОтображения); + КонецЕсли; + СостоянияКнопки = ирОбщий.СостоянияКнопкиОтображатьПустыеИИдентификаторыЛкс(); + ЛиОтбражатьПустые = Ложь + Или ВариантОтображенияИдентификаторов = СостоянияКнопки[1] + Или ВариантОтображенияИдентификаторов = СостоянияКнопки[2]; + ОтображатьИдентификаторы = ВариантОтображенияИдентификаторов = СостоянияКнопки[2]; + ирПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + ирПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Если ТипЗнч(КолонкиСПиктограммамиТипов) = Тип("Строка") Тогда + КолонкиСПиктограммамиТипов = Новый Структура(КолонкиСПиктограммамиТипов); + КонецЕсли; + ЦветФонаПустогоЗначения = ирОбщий.ЦветФонаПустогоЗначенияЛкс(); + ЦветТекстаПустогоЗначения = ирОбщий.ЦветТекстаПустогоЗначенияЛкс(); + Если ТипЗнч(ДанныеСтроки) = Тип("ТекущиеДанныеСписка") Тогда + ИмяТаблицыБД = ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(Элемент); + КлючСтроки = ирОбщий.КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ИмяТаблицыБД, ДанныеСтроки); + Иначе + Если ТипЗнч(ДанныеСтроки) = Тип("ТекущиеДанныеСтруктурыНастроекКомпоновкиДанных") Тогда + КлючСтроки = ДанныеСтроки.Строка; + Иначе + КлючСтроки = ДанныеСтроки; + КонецЕсли; + КонецЕсли; + ЭтоВыводТекущейСтроки = КлючСтроки = Элемент.ТекущаяСтрока; + ЭтоВыводВыделеннойСтроки = Элемент.ВыделенныеСтроки.Содержит(КлючСтроки); + ЦветФонаЯчеекТекущегоЗначения = ирОбщий.ЦветФонаЯчеекТекущегоЗначенияЛкс(); + Если ЛиОтбражатьПустые Тогда + ТекущееЗначение = ТабличноеПолеЗначениеТекущейЯчейкиЛкс(Элемент); + ДопСвойства.КнопкаРежимаОтображения = КнопкаРежимаОтображения; + ДопСвойства.ЗначениеТекущейЯчейки = ТекущееЗначение; + КонецЕсли; + ВсеТипыСсылокДокументов = Документы.ТипВсеСсылки(); + ЗначенияНизкойВажности = Новый Массив; + ЗначенияНизкойВажности.Добавить(0); + _РежимОтладки = ирКэш.РежимОтладкиЛкс(); + Если _РежимОтладки Тогда + // Пассивный оригинал расположенного ниже однострочного кода. Выполняйте изменения синхронно в обоих вариантах. ирОбщий.ПрЛкс(_РежимОтладки, 1, 1) + Для Каждого Колонка Из КолонкиТаблицы Цикл + Если Не Колонка.Видимость Тогда + Продолжить; + КонецЕсли; + ИмяКолонки = Колонка.Имя; + ИмяКолонкиДанных = Колонка.Данные; + Ячейка = Ячейки[ИмяКолонки]; + //Если Не Ячейка.Видимость Тогда // Почему то здесь платформа тратит много времени. Поэтому в среднем это лишние траты времени. + // Продолжить; + //КонецЕсли; + КартинкаЯчейки = Неопределено; + КолонкаРасширенныхДанных = Неопределено; + Если РасширенныеКолонки <> Неопределено Тогда + РасширенныеКолонки.Свойство(ИмяКолонки, КолонкаРасширенныхДанных); + КонецЕсли; + ПрименятьРежимОтображения = Ложь + Или КолонкиДляРежимаОтображения = Неопределено + Или КолонкиДляРежимаОтображения.Свойство(ИмяКолонки); + КолонкаОтображаетДанныеФлажка = Ложь; + Если КолонкаРасширенныхДанных <> Неопределено Тогда + ЗначениеЯчейки = РасширенныеДанныеСтроки[КолонкаРасширенныхДанных]; + Иначе + Если Истина + И Не ЗначениеЗаполнено(ИмяКолонкиДанных) + И ЗначениеЗаполнено(Колонка.ДанныеФлажка) + Тогда + ЗначениеЯчейки = Ячейка.ЗначениеФлажка; + КолонкаОтображаетДанныеФлажка = Не Ячейка.ТолькоПросмотр; + Иначе + ЗначениеЯчейки = Ячейка.Значение; + КонецЕсли; + КонецЕсли; + ТипЗначенияЯчейки = ТипЗнч(ЗначениеЯчейки); + ТипЗначенияЯчейкиXML = XMLТипЗнч(ЗначениеЯчейки); + Если Истина + И Не КолонкаОтображаетДанныеФлажка + И ТипЗначенияЯчейки = Тип("Булево") + И ТипЗнч(Колонка.ЭлементУправления) <> Тип("ПолеВыбора") // Колонка "Вид" таблицы "Параметры" в консоли запросов + Тогда + Если Истина + И Не ЛиОтбражатьПустые + И Не ОтображатьИдентификаторы + И Не КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки) + Тогда + Ячейка.УстановитьТекст(""); + Иначе + Ячейка.УстановитьТекст("" + ЗначениеЯчейки); + КонецЕсли; + Если Не Ячейка.ТолькоПросмотр И Колонка.ЭлементУправления <> Неопределено И Не ТолькоПросмотрТабличногоПоля Тогда + Ячейка.УстановитьФлажок(ЗначениеЯчейки); + ИначеЕсли Ячейка.Текст = "" Тогда + Ячейка.ОтображатьФлажок = Ложь; + Если Колонка.КартинкиСтрок.Вид <> ВидКартинки.Пустая Тогда + Ячейка.ИндексКартинки = Не ЗначениеЯчейки; + Ячейка.ОтображатьКартинку = Истина; + Иначе + Если ЗначениеЯчейки = Истина Тогда + КартинкаЯчейки = ирКэш.КартинкаПоИмениЛкс("ирФлажокТолькоПросмотр"); + // Так почему то в некоторых местах выводится квадратик для флажка, как будто его можно изменять. Например в открытой в режиме ТолькоПросмотр ссылки форме выбора редактируемых типов. + //Ячейка.УстановитьФлажок(ЗначениеЯчейки); + //Ячейка.ТолькоПросмотр = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ПредставлениеЗначения = ""; + Если Истина + И Не КолонкаОтображаетДанныеФлажка + И ТипЗначенияЯчейки <> Тип("Строка") + И ЗначениеЯчейки <> Неопределено + И (Ложь + Или РасширенноеПредставлениеХранилищЗначений + Или ТипЗначенияЯчейки = Тип("ОписаниеТипов") + Или РасширенноеПредставлениеДат И ТипЗначенияЯчейки = Тип("Дата") + Или ТипЗначенияЯчейкиXML = Неопределено) + Тогда + ПредставлениеЗначения = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(ЗначениеЯчейки, Колонка,, РасширенноеПредставлениеХранилищЗначений, Ложь); + КонецЕсли; + НовыйЦветФона = Неопределено; + НовыйЦветТекста = Неопределено; + ТекстЯчейки = Ячейка.Текст; + ФорматКолонки = Колонка.Формат; + + // Мультиметка62441127 + Если ЛиОтбражатьПустые И ПрименятьРежимОтображения Тогда + Если ТипЗначенияЯчейки = Тип("Строка") Тогда + Если Не ЗначениеЗаполнено(ЗначениеЯчейки) Тогда + ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки); + НовыйЦветФона = ЦветФонаПустогоЗначения; + ИначеЕсли ОтображатьИдентификаторы Тогда + ПредставлениеЗначения = """" + ЗначениеЯчейки + """"; + КонецЕсли; + ИначеЕсли Не ирОбщий.ЛиКоллекцияЛкс(ЗначениеЯчейки) Тогда + Попытка + ЗначениеНепустое = ЗначениеЗаполнено(ЗначениеЯчейки) И ЗначениеЯчейки <> Ложь; + Исключение + ЗначениеНепустое = Истина; + КонецПопытки; + Если Не ЗначениеНепустое Тогда + ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки); + НовыйЦветФона = ЦветФонаПустогоЗначения; + КонецЕсли; + КонецЕсли; + Если Истина + И ТекущееЗначение = ЗначениеЯчейки + И ТипЗнч(ТекущееЗначение) = ТипЗначенияЯчейки // защита от слияния Истина=1 + Тогда + НовыйЦветФона = ЦветФонаЯчеекТекущегоЗначения; + КонецЕсли; + Иначе + Если Истина + И ЗначенияНизкойВажности.Найти(ЗначениеЯчейки) <> Неопределено + И ФорматКолонки = "" + И ИмяКолонки <> "ИдентификаторСсылкиЛкс" + Тогда + Если ТипЗнч(ЗначениеЯчейки) = Тип("Число") Тогда + ПредставлениеЗначения = "0"; + Иначе + ПредставлениеЗначения = "" + ЗначениеЯчейки; // Ложь + КонецЕсли; + НовыйЦветТекста = ЦветТекстаПустогоЗначения; + КонецЕсли; + // Результаты поиска слов + Если Истина + И ЗначениеЗаполнено(СтрокаПоиска) + И ЗначениеЗаполнено(ИмяКолонкиДанных) + И (Ложь + Или КолонкиПоиска = Неопределено + Или КолонкиПоиска.Свойство(ИмяКолонкиДанных)) + И ТипЗначенияЯчейкиXML <> Неопределено + И (Ложь + Или ТипЗначенияЯчейки = Тип("Строка") + Или (Истина + И Найти(ТипЗначенияЯчейкиXML.ИмяТипа, "Ref.") > 0 + И Не ВсеТипыСсылокДокументов.СодержитТип(ТипЗначенияЯчейки))) + Тогда + Если КолонкиПоиска <> Неопределено Тогда + КолонкаПоиска = КолонкиПоиска[ИмяКолонкиДанных]; + Если КолонкаПоиска <> Неопределено Тогда + // Это отбор и значение ему точно удовлетворяет + ВычислительРегВыражений.Pattern = КолонкаПоиска[0]; + КонецЕсли; + Иначе + КолонкаПоиска = Неопределено; + КонецЕсли; + Если Ложь + Или КолонкаПоиска <> Неопределено + Или ирОбщий.ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекстЯчейки, СловаПоиска) + Тогда + ПредставлениеЗначения = ВычислительРегВыражений.Заменить(ТекстЯчейки, ШаблонРазметкиВхождений); + Если РазрешитьОкраскуПоиска Тогда + НовыйЦветФона = ЦветФонаЯчеекТекущегоЗначения; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если НовыйЦветФона <> Неопределено Тогда + Ячейка.ЦветФона = НовыйЦветФона; + КонецЕсли; + Если НовыйЦветТекста <> Неопределено Тогда + Ячейка.ЦветТекста = НовыйЦветТекста; + КонецЕсли; + Если ПредставлениеЗначения <> "" Тогда + Если Ложь + Или КолонкаОтображаетДанныеФлажка + Или Формат(ЗначениеЯчейки, ФорматКолонки) = ТекстЯчейки // Здесь могут быть обращения к БД + Тогда + Ячейка.УстановитьТекст(ПредставлениеЗначения); + КонецЕсли; + КонецЕсли; + Если Истина + И ОтображатьИдентификаторы + И ПрименятьРежимОтображения + И ТипЗначенияЯчейки <> Тип("Строка") + И ЗначениеЯчейки <> Неопределено + И ЗначениеЯчейки <> Null + Тогда + ИдентификаторСсылки = ирОбщий.СтроковыйИдентификаторЗначенияЛкс(ЗначениеЯчейки, Истина); + Если ИдентификаторСсылки <> Неопределено Тогда + Ячейка.УстановитьТекст(ИдентификаторСсылки); + КонецЕсли; + КонецЕсли; + Если КартинкаЯчейки = Неопределено И КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки) Тогда + Если ТипЗначенияЯчейки <> Тип("ПолеКомпоновкиДанных") Тогда + Если Не (Истина + И ТипЗначенияЯчейки = Тип("Булево") + И Ячейка.ОтображатьФлажок) + Тогда + КартинкаТипа = КартинкаТипаЛкс(ТипЗначенияЯчейки); + Если КартинкаТипа <> Неопределено Тогда + КартинкаЯчейки = КартинкаТипа; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если КартинкаЯчейки <> Неопределено Тогда + Ячейка.УстановитьКартинку(КартинкаЯчейки); + КонецЕсли; + КонецЦикла; + Иначе + // Однострочный код использован для ускорения. Выше расположен оригинал. Выполняйте изменения синхронно в обоих вариантах. Преобразовано консолью кода из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru) + Для Каждого Колонка Из КолонкиТаблицы Цикл   Если Не Колонка.Видимость Тогда   Продолжить;   КонецЕсли;   ИмяКолонки = Колонка.Имя;   ИмяКолонкиДанных = Колонка.Данные;   Ячейка = Ячейки[ИмяКолонки];         КартинкаЯчейки = Неопределено;   КолонкаРасширенныхДанных = Неопределено;   Если РасширенныеКолонки <> Неопределено Тогда   РасширенныеКолонки.Свойство(ИмяКолонки, КолонкаРасширенныхДанных);   КонецЕсли;   ПрименятьРежимОтображения = Ложь   Или КолонкиДляРежимаОтображения = Неопределено   Или КолонкиДляРежимаОтображения.Свойство(ИмяКолонки);   КолонкаОтображаетДанныеФлажка = Ложь;   Если КолонкаРасширенныхДанных <> Неопределено Тогда   ЗначениеЯчейки = РасширенныеДанныеСтроки[КолонкаРасширенныхДанных];   Иначе   Если Истина   И Не ЗначениеЗаполнено(ИмяКолонкиДанных)   И ЗначениеЗаполнено(Колонка.ДанныеФлажка)   Тогда   ЗначениеЯчейки = Ячейка.ЗначениеФлажка;   КолонкаОтображаетДанныеФлажка = Не Ячейка.ТолькоПросмотр;   Иначе   ЗначениеЯчейки = Ячейка.Значение;   КонецЕсли;   КонецЕсли;   ТипЗначенияЯчейки = ТипЗнч(ЗначениеЯчейки);   ТипЗначенияЯчейкиXML = XMLТипЗнч(ЗначениеЯчейки);   Если Истина   И Не КолонкаОтображаетДанныеФлажка   И ТипЗначенияЯчейки = Тип("Булево")   И ТипЗнч(Колонка.ЭлементУправления) <> Тип("ПолеВыбора")   Тогда   Если Истина   И Не ЛиОтбражатьПустые   И Не ОтображатьИдентификаторы   И Не КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки)   Тогда   Ячейка.УстановитьТекст("");   Иначе   Ячейка.УстановитьТекст("" + ЗначениеЯчейки);   КонецЕсли;   Если Не Ячейка.ТолькоПросмотр И Колонка.ЭлементУправления <> Неопределено И Не ТолькоПросмотрТабличногоПоля Тогда   Ячейка.УстановитьФлажок(ЗначениеЯчейки);   ИначеЕсли Ячейка.Текст = "" Тогда   Ячейка.ОтображатьФлажок = Ложь;   Если Колонка.КартинкиСтрок.Вид <> ВидКартинки.Пустая Тогда   Ячейка.ИндексКартинки = Не ЗначениеЯчейки;   Ячейка.ОтображатьКартинку = Истина;   Иначе   Если ЗначениеЯчейки = Истина Тогда   КартинкаЯчейки = ирКэш.КартинкаПоИмениЛкс("ирФлажокТолькоПросмотр");         КонецЕсли;   КонецЕсли;   КонецЕсли;   КонецЕсли;   ПредставлениеЗначения = "";   Если Истина   И Не КолонкаОтображаетДанныеФлажка   И ТипЗначенияЯчейки <> Тип("Строка")   И ЗначениеЯчейки <> Неопределено   И (Ложь   Или РасширенноеПредставлениеХранилищЗначений   Или ТипЗначенияЯчейки = Тип("ОписаниеТипов")   Или РасширенноеПредставлениеДат И ТипЗначенияЯчейки = Тип("Дата")   Или ТипЗначенияЯчейкиXML = Неопределено)   Тогда   ПредставлениеЗначения = ирОбщий.РасширенноеПредставлениеЗначенияЛкс(ЗначениеЯчейки, Колонка,, РасширенноеПредставлениеХранилищЗначений, Ложь);   КонецЕсли;   НовыйЦветФона = Неопределено;   НовыйЦветТекста = Неопределено;   ТекстЯчейки = Ячейка.Текст;   ФорматКолонки = Колонка.Формат;       Если ЛиОтбражатьПустые И ПрименятьРежимОтображения Тогда   Если ТипЗначенияЯчейки = Тип("Строка") Тогда   Если Не ЗначениеЗаполнено(ЗначениеЯчейки) Тогда   ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки);   НовыйЦветФона = ЦветФонаПустогоЗначения;   ИначеЕсли ОтображатьИдентификаторы Тогда   ПредставлениеЗначения = """" + ЗначениеЯчейки + """";   КонецЕсли;   ИначеЕсли Не ирОбщий.ЛиКоллекцияЛкс(ЗначениеЯчейки) Тогда   Попытка   ЗначениеНепустое = ЗначениеЗаполнено(ЗначениеЯчейки) И ЗначениеЯчейки <> Ложь;   Исключение   ЗначениеНепустое = Истина;   КонецПопытки;   Если Не ЗначениеНепустое Тогда   ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки);   НовыйЦветФона = ЦветФонаПустогоЗначения;   КонецЕсли;   КонецЕсли;   Если Истина   И ТекущееЗначение = ЗначениеЯчейки   И ТипЗнч(ТекущееЗначение) = ТипЗначенияЯчейки   Тогда   НовыйЦветФона = ЦветФонаЯчеекТекущегоЗначения;   КонецЕсли;   Иначе   Если Истина   И ЗначенияНизкойВажности.Найти(ЗначениеЯчейки) <> Неопределено   И ФорматКолонки = ""   И ИмяКолонки <> "ИдентификаторСсылкиЛкс"   Тогда   Если ТипЗнч(ЗначениеЯчейки) = Тип("Число") Тогда   ПредставлениеЗначения = "0";   Иначе   ПредставлениеЗначения = "" + ЗначениеЯчейки;   КонецЕсли;   НовыйЦветТекста = ЦветТекстаПустогоЗначения;   КонецЕсли;     Если Истина   И ЗначениеЗаполнено(СтрокаПоиска)   И ЗначениеЗаполнено(ИмяКолонкиДанных)   И (Ложь   Или КолонкиПоиска = Неопределено   Или КолонкиПоиска.Свойство(ИмяКолонкиДанных))   И ТипЗначенияЯчейкиXML <> Неопределено   И (Ложь   Или ТипЗначенияЯчейки = Тип("Строка")   Или (Истина   И Найти(ТипЗначенияЯчейкиXML.ИмяТипа, "Ref.") > 0   И Не ВсеТипыСсылокДокументов.СодержитТип(ТипЗначенияЯчейки)))   Тогда   Если КолонкиПоиска <> Неопределено Тогда   КолонкаПоиска = КолонкиПоиска[ИмяКолонкиДанных];   Если КолонкаПоиска <> Неопределено Тогда     ВычислительРегВыражений.Pattern = КолонкаПоиска[0];   КонецЕсли;   Иначе   КолонкаПоиска = Неопределено;   КонецЕсли;   Если Ложь   Или КолонкаПоиска <> Неопределено   Или ирОбщий.ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекстЯчейки, СловаПоиска)   Тогда   ПредставлениеЗначения = ВычислительРегВыражений.Заменить(ТекстЯчейки, ШаблонРазметкиВхождений);   Если РазрешитьОкраскуПоиска Тогда   НовыйЦветФона = ЦветФонаЯчеекТекущегоЗначения;   КонецЕсли;   КонецЕсли;   КонецЕсли;   КонецЕсли;     Если НовыйЦветФона <> Неопределено Тогда   Ячейка.ЦветФона = НовыйЦветФона;   КонецЕсли;   Если НовыйЦветТекста <> Неопределено Тогда   Ячейка.ЦветТекста = НовыйЦветТекста;   КонецЕсли;   Если ПредставлениеЗначения <> "" Тогда   Если Ложь   Или КолонкаОтображаетДанныеФлажка   Или Формат(ЗначениеЯчейки, ФорматКолонки) = ТекстЯчейки   Тогда   Ячейка.УстановитьТекст(ПредставлениеЗначения);   КонецЕсли;   КонецЕсли;   Если Истина   И ОтображатьИдентификаторы   И ПрименятьРежимОтображения   И ТипЗначенияЯчейки <> Тип("Строка")   И ЗначениеЯчейки <> Неопределено   И ЗначениеЯчейки <> Null   Тогда   ИдентификаторСсылки = ирОбщий.СтроковыйИдентификаторЗначенияЛкс(ЗначениеЯчейки, Истина);   Если ИдентификаторСсылки <> Неопределено Тогда   Ячейка.УстановитьТекст(ИдентификаторСсылки);   КонецЕсли;   КонецЕсли;   Если КартинкаЯчейки = Неопределено И КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки) Тогда   Если ТипЗначенияЯчейки <> Тип("ПолеКомпоновкиДанных") Тогда   Если Не (Истина   И ТипЗначенияЯчейки = Тип("Булево")   И Ячейка.ОтображатьФлажок)   Тогда   КартинкаТипа = КартинкаТипаЛкс(ТипЗначенияЯчейки);   Если КартинкаТипа <> Неопределено Тогда   КартинкаЯчейки = КартинкаТипа;   КонецЕсли;   КонецЕсли;   КонецЕсли;   КонецЕсли;   Если КартинкаЯчейки <> Неопределено Тогда   Ячейка.УстановитьКартинку(КартинкаЯчейки);   КонецЕсли;   КонецЦикла;   + КонецЕсли; + ИмяКолонкиНомерСтроки = ирКэш.ИмяКолонкиНомерСтрокиЛкс(); + Если Ячейки.Найти(ИмяКолонкиНомерСтроки) <> Неопределено Тогда + Если ТипЗнч(ДанныеСтроки) = Тип("СтрокаДереваЗначений") Тогда + ИндексСтроки = ирОбщий.РодительСтрокиДереваЛкс(ДанныеСтроки, ДанныеСтроки.Владелец()).Строки.Индекс(ДанныеСтроки); + Иначе + ИндексСтроки = ДанныеСтроки.Владелец().Индекс(ДанныеСтроки); + КонецЕсли; + Ячейки[ИмяКолонкиНомерСтроки].УстановитьТекст(XMLСтрока(ИндексСтроки + 1)); + Ячейки[ИмяКолонкиНомерСтроки].ЦветТекста = Новый Цвет(128, 128, 128); + КонецЕсли; + Если Истина + И (ЭтоВыводТекущейСтроки Или ЭтоВыводВыделеннойСтроки) + И Элемент.ПолучитьДействие("ПриАктивизацииСтроки") <> Неопределено + Тогда + Если ЭтоВыводТекущейСтроки Тогда + СмещениеЦвета = -25; + Иначе + СмещениеЦвета = -15; + КонецЕсли; + ТекущийЦветФона = ОформлениеСтроки.ЦветФона; + Если ТекущийЦветФона.Вид = ВидЦвета.АвтоЦвет Тогда + ТекущийЦветФона = Элемент.ЦветФонаПоля; + КонецЕсли; + ОформлениеСтроки.ЦветФона = ирОбщий.СмещенныйЦветЛкс(ТекущийЦветФона, СмещениеЦвета,, СмещениеЦвета); + Для Каждого Ячейка Из ОформлениеСтроки.Ячейки Цикл + ТекущийЦветФона = Ячейка.ЦветФона; + Если ТекущийЦветФона.Вид = ВидЦвета.АвтоЦвет Тогда + Продолжить; + КонецЕсли; + Ячейка.ЦветФона = ирОбщий.СмещенныйЦветЛкс(ТекущийЦветФона, СмещениеЦвета,, СмещениеЦвета); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Функция СловаПоискаПоКолонкамИзОтбораПостроителяЛкс(Знач ТабличноеПоле = Неопределено, Знач Отбор = Неопределено) Экспорт + + СловаПоСвойствам = Новый Структура; + Если Отбор = Неопределено Тогда + Отбор = ОтборТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + Если Отбор = Неопределено Тогда + Возврат СловаПоСвойствам; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + Отбор = Новый ПостроительЗапроса; + Отбор = Отбор.Отбор; + #КонецЕсли + ОбщийЭлементОтбора = Отбор.Найти("ДанныеПоиска"); + ОбщееСлово = ""; + Если Истина + И ОбщийЭлементОтбора <> Неопределено + И ОбщийЭлементОтбора.Использование + И ОбщийЭлементОтбора.ВидСравнения = ВидСравнения.Содержит + И ОбщийЭлементОтбора.Значение <> "" + Тогда + ОбщееСлово = ОбщийЭлементОтбора.Значение; + КонецЕсли; + Для Каждого ЭлементОтбора Из Отбор Цикл + Если Истина + И ОбщееСлово <> "" + И ирОбщий.ЛиОписаниеТиповПростогоСтроковогоТипаЛкс(ЭлементОтбора.ТипЗначения, Ложь) + Тогда + ирОбщий.ДобавитьСловаПоискаВСтруктуруРеквизитовЛкс("" + ЭлементОтбора.Имя, ОбщееСлово, СловаПоСвойствам); + КонецЕсли; + Если Истина + И ЭлементОтбора.Использование + И ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит + И ЭлементОтбора.Значение <> "" + Тогда + ирОбщий.ДобавитьСловаПоискаВСтруктуруРеквизитовЛкс("" + ЭлементОтбора.Имя, ЭлементОтбора.Значение, СловаПоСвойствам); + Если ирОбщий.СтрКончаетсяНаЛкс(ЭлементОтбора.Имя, "Представление") Тогда + // Для ирРазличныеЗначенияКолонки + ЭлементОтбораРодитель = Отбор.Найти(ирОбщий.СтрокаБезПоследнегоФрагментаЛкс(ЭлементОтбора.Имя, "Представление")); + Если Истина + И ЭлементОтбораРодитель <> Неопределено + И Не ЭлементОтбораРодитель.Использование + Тогда + ирОбщий.ДобавитьСловаПоискаВСтруктуруРеквизитовЛкс("" + ЭлементОтбораРодитель.Имя, ЭлементОтбора.Значение, СловаПоСвойствам); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Возврат СловаПоСвойствам; + +КонецФункции + +Процедура ТабличноеПолеСДаннымиПоискаУстановитьОтборПоПодстрокеЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ЗначениеОтбора, Знач КолонкиПоиска = Неопределено, Знач РазрешитьОкраску = Ложь) Экспорт + + Если ТабличноеПоле.Значение.Количество() > 0 Тогда + СтрокаТаблицы = ТабличноеПоле.Значение[0]; + ДанныеПоиска = ДанныеПоискаСтрокиТаблицыЛкс(ТабличноеПоле, СтрокаТаблицы, КолонкиПоиска); + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + ДопСвойства.МенеджерПоиска = СоздатьМенеджерПоискаВТабличномПолеЛкс(КолонкиПоиска,,, РазрешитьОкраску); + Если СтрокаТаблицы.ДанныеПоиска <> ДанныеПоиска Тогда + Для Каждого СтрокаТаблицы Из ТабличноеПоле.Значение Цикл + СтрокаТаблицы.ДанныеПоиска = ДанныеПоискаСтрокиТаблицыЛкс(ТабличноеПоле, СтрокаТаблицы, КолонкиПоиска); + КонецЦикла; + КонецЕсли; + КонецЕсли; + ирОбщий.УстановитьОтборПоПодстрокеЛкс(ТабличноеПоле.ОтборСтрок.ДанныеПоиска, ЗначениеОтбора); + +КонецПроцедуры + +Процедура ТабличноеПолеРегистраОбновитьКолонкиОстатковЛкс(Знач ТабличноеПолеРегистра, Знач ОбъектМД, Знач Кнопка, НоваяПометка = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ОбъектМД = Метаданные.РегистрыНакопления.ОстаткиДнейДополнительныхОтпусков; + #КонецЕсли + Если НоваяПометка = Неопределено Тогда + НоваяПометка = Кнопка.Пометка; + Иначе + Кнопка.Пометка = НоваяПометка; + КонецЕсли; + Для Каждого Ресурс Из ОбъектМД.Ресурсы Цикл + ИмяКолонки = Ресурс.Имя + "Остаток"; + КолонкаРесурса = ТабличноеПолеРегистра.Колонки.Найти(Ресурс.Имя); + КолонкаОстатка = ТабличноеПолеРегистра.Колонки.Найти(ИмяКолонки); + Если КолонкаОстатка = Неопределено Тогда + КолонкаОстатка = ТабличноеПолеРегистра.Колонки.Вставить(ТабличноеПолеРегистра.Колонки.Индекс(КолонкаРесурса)); + КолонкаОстатка.Имя = ИмяКолонки; + ТабличноеПолеРегистра.Колонки.Сдвинуть(КолонкаОстатка, 1); + КолонкаОстатка.Положение = ПоложениеКолонки.ВТойЖеКолонке; + КолонкаОстатка.ТекстШапки = "->Остаток"; + КолонкаОстатка.ЦветТекстаПоля = ирОбщий.ЦветТекстаИзмененныхДанныхЛкс(); + КолонкаОстатка.ПодсказкаВШапке = Ресурс.Представление() + " Остаток на текущую дату"; + КолонкаОстатка.ТолькоПросмотр = Истина; + КонецЕсли; + КолонкаОстатка.Видимость = КолонкаРесурса.Видимость И НоваяПометка; + КонецЦикла; + Если НоваяПометка Тогда + ТабличноеПолеРегистра.ОбновитьСтроки(); + КонецЕсли; + +КонецПроцедуры + +// . +// Параметры: +// ОформленияСтрок - ? - +// Кнопка - ? - +// ОбъектМД - ОбъектМетаданных: РегистрНакопления - +// ИмяТаблицыБДРегистра - ? - +// ТипВыхода - Строка - Служебный параметр для перехода после вызова метода +Функция ТабличноеПолеРегистраОтобразитьОстаткиЛкс(Знач ОформленияСтрок, Знач ОбъектМД, Знач Кнопка, Знач ИмяТаблицыБДРегистра = Неопределено) Экспорт + Если Не Кнопка.Доступность Или Не Кнопка.Пометка Тогда + Возврат Неопределено; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ОбъектМД = Метаданные.РегистрыНакопления.ОстаткиДнейДополнительныхОтпусков; + #КонецЕсли + ИменаИзмерений = Новый Массив; + ТаблицаКлючей = Новый ТаблицаЗначений; + Для Каждого ПолеТаблицы Из ирОбщий.ПоляТаблицыБДЛкс(ИмяТаблицыБДРегистра + ".Остатки") Цикл + Если ирОбщий.СтрКончаетсяНаЛкс(ПолеТаблицы.Имя, "Остаток") Тогда // Грязно + Продолжить; + КонецЕсли; + ИменаИзмерений.Добавить(ПолеТаблицы.Имя); + ТаблицаКлючей.Колонки.Добавить(ПолеТаблицы.Имя, ПолеТаблицы.ТипЗначения); + КонецЦикла; + СтрокаИменИзмерений = ирОбщий.СтрСоединитьЛкс(ИменаИзмерений, ","); + Запрос = Новый Запрос("ВЫБРАТЬ Т.* ИЗ " + ИмяТаблицыБДРегистра + ".Остатки(, (" + СтрокаИменИзмерений + ") В (&ТЗ)) КАК Т"); + Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл + ЗаполнитьЗначенияСвойств(ТаблицаКлючей.Добавить(), ОформлениеСтроки.ДанныеСтроки); + КонецЦикла; + Запрос.УстановитьПараметр("ТЗ", ТаблицаКлючей); + РезультатЗапроса = Запрос.Выполнить().Выгрузить(); + КлючСтроки = Новый Структура(СтрокаИменИзмерений); + Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл + ЗаполнитьЗначенияСвойств(КлючСтроки, ОформлениеСтроки.ДанныеСтроки); + СтрокаРезультата = РезультатЗапроса.НайтиСтроки(КлючСтроки); + Если СтрокаРезультата.Количество() > 0 Тогда + СтрокаРезультата = СтрокаРезультата[0]; + Для Каждого Ресурс Из ОбъектМД.Ресурсы Цикл + ИмяРесурса = Ресурс.Имя; + ОформлениеСтроки.Ячейки[ИмяРесурса + "Остаток"].Значение = СтрокаРезультата[ИмяРесурса + "Остаток"]; + КонецЦикла; + КонецЕсли; + КонецЦикла; +КонецФункции + +Функция ДанныеПоискаСтрокиТаблицыЛкс(Знач ТабличноеПоле, Знач СтрокаТаблицы, КолонкиПоиска = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ДанныеПоиска = Новый Массив; + Если КолонкиПоиска = Неопределено Тогда + КолонкиПоиска = Новый Структура; + Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл + Если Не ЗначениеЗаполнено(Колонка.Данные) Тогда + Продолжить; + КонецЕсли; + ЗначениеЯчейки = СтрокаТаблицы[Колонка.Данные]; + Если ТипЗнч(ЗначениеЯчейки) <> Тип("Строка") Тогда + Продолжить; + КонецЕсли; + ДанныеПоиска.Добавить(ЗначениеЯчейки); + КолонкиПоиска.Вставить(Колонка.Данные); + КонецЦикла; + Иначе + Для Каждого КлючИЗначение Из КолонкиПоиска Цикл + ДанныеПоиска.Добавить(СтрокаТаблицы[КлючИЗначение.Ключ]); + КонецЦикла; + КонецЕсли; + ДанныеПоиска = ирОбщий.СтрСоединитьЛкс(ДанныеПоиска, "#"); + Возврат ДанныеПоиска; + +КонецФункции + +Функция ТабличноеПолеЗначениеТекущейЯчейкиЛкс(Знач Элемент) Экспорт + + // Медленный способ + //Если ЭтоВыводВыделеннойСтроки Тогда + // ЯчейкиТекущейСтроки = Ячейки; + //Иначе + // ЯчейкиТекущейСтроки = Элемент.ОформлениеСтроки(Элемент.ТекущаяСтрока).Ячейки; + //КонецЕсли; + //ТекущееЗначение = ЯчейкиТекущейСтроки[Элемент.ТекущаяКолонка.Имя].Значение; + // + ПутьКДанным = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(Элемент); + Если ЗначениеЗаполнено(ПутьКДанным) И Элемент.ТекущиеДанные <> Неопределено Тогда + ТекущееЗначение = Элемент.ТекущиеДанные[ПутьКДанным]; + КонецЕсли; + Возврат ТекущееЗначение; + +КонецФункции + +Функция ТабличноеПолеПриАктивацииКолонкиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле) Экспорт + + Если ТабличноеПоле.ТекущаяКолонка = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + //Возврат Ложь; // Временно + ВсеСтрокиОбновлены = Ложь; + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + КнопкаРежимаОтображения = ДопСвойства.КнопкаРежимаОтображения; + Если КнопкаРежимаОтображения <> Неопределено Тогда + СостоянияКнопки = ирОбщий.СостоянияКнопкиОтображатьПустыеИИдентификаторыЛкс(); + Если КнопкаРежимаОтображения.Текст <> СостоянияКнопки[0] Тогда + СтароеТекущееЗначение = ТабличноеПолеЗначениеТекущейЯчейкиЛкс(ТабличноеПоле); + Если Ложь + Или ТипЗнч(ТабличноеПоле.ТекущиеДанные) = Тип("ТекущиеДанныеСписка") + Тогда + // У динамического списка почему то обновление всех строк вызывает платформа. Так что нет смысла его звать второй раз. + // Также такое происходит в форме таблицы значений, но почему то не происходит в результате консоли запросов + ВсеСтрокиОбновлены = Истина; + ИначеЕсли Ложь + Или СтароеТекущееЗначение <> ДопСвойства.ЗначениеТекущейЯчейки + Или ТипЗнч(СтароеТекущееЗначение) <> ТипЗнч(ДопСвойства.ЗначениеТекущейЯчейки) + Тогда + ТабличноеПоле.ОбновитьСтроки(); // Для окраски текущего значения + ВсеСтрокиОбновлены = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат ВсеСтрокиОбновлены; + +КонецФункции + +Процедура ПолеТабличногоДокументаОформитьТекущиеСтрокиЛкс(ЭтаФорма, ПолеТД) Экспорт + #Если Сервер И Не Сервер Тогда + ПолеТД = Новый ТабличныйДокумент; + #КонецЕсли + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ПолеТД); + Если Ложь + Или ДопСвойства = Неопределено + Или ТипЗнч(ПолеТД.ТекущаяОбласть) = Тип("РисунокТабличногоДокумента") + Тогда + Возврат; + КонецЕсли; + ТекВерх = ПолеТД.ТекущаяОбласть.Верх; + ТекНиз = Мин(ПолеТД.ТекущаяОбласть.Низ, ПолеТД.ВысотаТаблицы); + Если Ложь + Или ТекНиз < ТекВерх + Или ПолеТД.ТекущаяОбласть.Низ > ПолеТД.ВысотаТаблицы + Или ПолеТД.ТекущаяОбласть.Лево > ПолеТД.ШиринаТаблицы + Тогда + Возврат; + КонецЕсли; + Если ДопСвойства.ВременноОформленныеСтроки = Неопределено Тогда + ДопСвойства.ВременноОформленныеСтроки = Новый Структура; + Иначе + //2. Если выделенные строки не менялись - делаем ничего + Если Истина + И ДопСвойства.ВременноОформленныеСтроки.Количество() > 0 + И ТекВерх = ДопСвойства.ВременноОформленныеСтроки.Верх + И ТекНиз = ДопСвойства.ВременноОформленныеСтроки.Низ + Тогда + Возврат; + КонецЕсли; + ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(ЭтаФорма, ПолеТД); + КонецЕсли; + + ОбластьТекСтроки = ПолеТД.Область(ТекНиз,, ТекВерх); + // 3. При выделении всего документа, дальнейшие действия не требуются. + // Более того, если не сделать эту проверку, то дальше упадём с ошибкой, при попытке получения ячейки с координатами (0,х,0,х) + ВыделенВесьТабДок = ТекВерх = 0 Или ТекНиз = 0; + Если ВыделенВесьТабДок Тогда + // обработка выделенных строк на прошлом шаге для случая, когда ВыделенВесьТабДок = Истина, инициирует событие ПриАктивизации. + // Чтобы не заходить в бесконечный цикл, очистим данные выделенных строк. + ДопСвойства.ВременноОформленныеСтроки = Неопределено; + Возврат; + КонецЕсли; + + // 4. Запомним текущие значения обведённости строк + ВременноОформленныеСтроки = ДопСвойства.ВременноОформленныеСтроки; + ВременноОформленныеСтроки.Вставить("Верх", ТекВерх); + ВременноОформленныеСтроки.Вставить("Низ", ТекНиз); + ВременноОформленныеСтроки.Вставить("ГраницаСверху", ОбластьТекСтроки.ГраницаСверху); + ВременноОформленныеСтроки.Вставить("ГраницаСнизу", ОбластьТекСтроки.ГраницаСнизу); + ВременноОформленныеСтроки.Вставить("ЦветРамки", ОбластьТекСтроки.ЦветРамки); + + // У разных ячеек строки могут быть разные настройки Границ (настройки обведения) и чтобы вернуть их назад, их надо запомнить. + // Свойство ГраницаСверху (и все остальные границы) для области будет иметь значение неопределено, + // если для разных ячеек области у этой границы будут отличаться толщина или тип границы + // ЦветРамки при этом, может отличаться, и на Границы это никак не повлияет, т.к. ЦветРамки является самостоятельным свойством области, как и сама Граница. + + ЕстьТекст = Ложь; + ЕстьОформление = Ложь; + УникальныеГраницыВерх = Новый Массив; + ВременноОформленныеСтроки.Вставить("УникальныеГраницыВерх", УникальныеГраницыВерх); + УникальныеГраницыНиз = Новый Массив; + ВременноОформленныеСтроки.Вставить("УникальныеГраницыНиз", УникальныеГраницыНиз); + Для НомерКолонки = 1 По ПолеТД.ШиринаТаблицы Цикл + ЯчейкаВерх = ПолеТД.Область(ТекВерх, НомерКолонки, ТекВерх, НомерКолонки); + Если ЗначениеЗаполнено(ЯчейкаВерх.Текст) Тогда + ЕстьТекст = Истина; + КонецЕсли; + Если Ложь + Или ЯчейкаВерх.ЦветРамки.Вид <> ВидЦвета.АвтоЦвет + Или ЯчейкаВерх.ГраницаСверху.ТипЛинии <> ТипЛинииЯчейкиТабличногоДокумента.НетЛинии + Тогда + ЕстьОформление = Истина; + КонецЕсли; + НастройкиЯчейки = Новый Структура("НомерКолонки, ГраницаСверху, ЦветРамки"); + НастройкиЯчейки.НомерКолонки = НомерКолонки; + НастройкиЯчейки.ГраницаСверху = ЯчейкаВерх.ГраницаСверху; + НастройкиЯчейки.ЦветРамки = ЯчейкаВерх.ЦветРамки; + УникальныеГраницыВерх.Добавить(НастройкиЯчейки); + ЯчейкаНиз = ПолеТД.Область(ТекНиз, НомерКолонки, ТекНиз, НомерКолонки); + Если ЗначениеЗаполнено(ЯчейкаНиз.Текст) Тогда + ЕстьТекст = Истина; + КонецЕсли; + Если Ложь + Или ЯчейкаНиз.ЦветРамки.Вид <> ВидЦвета.АвтоЦвет + Или ЯчейкаНиз.ГраницаСнизу.ТипЛинии <> ТипЛинииЯчейкиТабличногоДокумента.НетЛинии + Тогда + ЕстьОформление = Истина; + КонецЕсли; + НастройкиЯчейки = Новый Структура("НомерКолонки, ГраницаСнизу, ЦветРамки"); + НастройкиЯчейки.НомерКолонки = НомерКолонки; + НастройкиЯчейки.ГраницаСнизу = ЯчейкаНиз.ГраницаСнизу; + НастройкиЯчейки.ЦветРамки = ЯчейкаНиз.ЦветРамки; + УникальныеГраницыНиз.Добавить(НастройкиЯчейки); + КонецЦикла; + Если ЕстьОформление Тогда + ТолщинаЛинии = 2; // максимум 3 - ограничение платформы + ИначеЕсли ЕстьТекст Тогда + ТолщинаЛинии = 1; + Иначе + ВременноОформленныеСтроки.Очистить(); + Возврат; + КонецЕсли; + Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, ТолщинаЛинии); + ЦветРамки = Новый Цвет(250, 204, 31); // Из управляемого приложения + ВременныеСвойства = Новый Структура("Линия, ЦветРамки", Линия, ЦветРамки); + ВременноОформленныеСтроки.Вставить("ВременныеСвойства", ВременныеСвойства); + СтрокаНиз = ПолеТД.Область(ТекВерх, 1, ТекВерх, ПолеТД.ШиринаТаблицы); + СтрокаНиз.ГраницаСверху = Линия; + СтрокаНиз.ЦветРамки = ЦветРамки; + СтрокаВерх = ПолеТД.Область(ТекНиз, 1, ТекНиз, ПолеТД.ШиринаТаблицы); + СтрокаВерх.ГраницаСнизу = Линия; + СтрокаВерх.ЦветРамки = ЦветРамки; + Если Истина + И ПолеТД.ТекущаяОбласть.Низ - ПолеТД.ТекущаяОбласть.Верх > 0 + И Найти(ПолеТД.ТекущаяОбласть.Имя, "R") > 0 + И Найти(ПолеТД.ТекущаяОбласть.Имя, "C") = 0 + Тогда + // Это диапазон строк + // Антибаг платформы 8.3.21 https://www.hostedredmine.com/issues/949285 + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ТекущаяОбласть", ПолеТД.ТекущаяОбласть.Имя); + ПараметрыОбработчика.Вставить("ПолеТД", ПолеТД); + #Если Сервер И Не Сервер Тогда + ВосстановитьТекущуюОбластьПоляТабличногоДокументаЛкс(); + #КонецЕсли + ПодключитьОбработчикОжиданияСПараметрамиЛкс("ВосстановитьТекущуюОбластьПоляТабличногоДокументаЛкс", ПараметрыОбработчика,,, Ложь); + КонецЕсли; +КонецПроцедуры + +Процедура ВосстановитьТекущуюОбластьПоляТабличногоДокументаЛкс(Знач ПараметрыОбработчика) Экспорт + + ПолеТД = ПараметрыОбработчика.ПолеТД; + #Если Сервер И Не Сервер Тогда + ПолеТД = Новый ТабличныйДокумент; + #КонецЕсли + СтараяОбласть = ПолеТД.Область(ПараметрыОбработчика.ТекущаяОбласть); + Если Истина + И СтараяОбласть.Верх = ПолеТД.ТекущаяОбласть.Верх + И ПолеТД.ТекущаяОбласть.Низ - ПолеТД.ТекущаяОбласть.Верх = 0 + Тогда + СтарыйОбработчик = ПолеТД.ПолучитьДействие("ПриАктивизацииОбласти"); + ПолеТД.УстановитьДействие("ПриАктивизацииОбласти", Неопределено); // Иначе будет циклическое переключение https://www.hostedredmine.com/issues/956183 + ПолеТД.ТекущаяОбласть = СтараяОбласть; + ПолеТД.УстановитьДействие("ПриАктивизацииОбласти", СтарыйОбработчик); + КонецЕсли; + +КонецПроцедуры + +Процедура ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(Знач ЭтаФорма, Знач ПолеТД) Экспорт + + #Если Сервер И Не Сервер Тогда + ПолеТД = Новый ТабличныйДокумент; + #КонецЕсли + ДопСвойстваЭлементаФормы = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ПолеТД); + Если ДопСвойстваЭлементаФормы = Неопределено Тогда + Возврат; + КонецЕсли; + ВременноОформленныеСтроки = ДопСвойстваЭлементаФормы.ВременноОформленныеСтроки; + Если ВременноОформленныеСтроки = Неопределено Тогда + Возврат; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ВременноОформленныеСтроки = Новый Структура; + #КонецЕсли + Если ВременноОформленныеСтроки.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ВременныеСвойства = ВременноОформленныеСтроки.ВременныеСвойства; + Для Каждого НастройкиЯчейки Из ВременноОформленныеСтроки.УникальныеГраницыВерх Цикл + ТекЯчейкаВерх = ПолеТД.Область(ВременноОформленныеСтроки.Верх, НастройкиЯчейки.НомерКолонки, ВременноОформленныеСтроки.Верх, НастройкиЯчейки.НомерКолонки); + Если ТекЯчейкаВерх.ГраницаСверху = ВременныеСвойства.Линия Тогда + ТекЯчейкаВерх.ГраницаСверху = НастройкиЯчейки.ГраницаСверху; + КонецЕсли; + Если ТекЯчейкаВерх.ЦветРамки = ВременныеСвойства.ЦветРамки Тогда + ТекЯчейкаВерх.ЦветРамки = НастройкиЯчейки.ЦветРамки; + КонецЕсли; + КонецЦикла; + Для Каждого НастройкиЯчейки Из ВременноОформленныеСтроки.УникальныеГраницыНиз Цикл + ТекЯчейкаНиз = ПолеТД.Область(ВременноОформленныеСтроки.Низ, НастройкиЯчейки.НомерКолонки, ВременноОформленныеСтроки.Низ, НастройкиЯчейки.НомерКолонки); + Если ТекЯчейкаНиз.ГраницаСнизу = ВременныеСвойства.Линия Тогда + ТекЯчейкаНиз.ГраницаСнизу = НастройкиЯчейки.ГраницаСнизу; + КонецЕсли; + Если ТекЯчейкаНиз.ЦветРамки = ВременныеСвойства.ЦветРамки Тогда + ТекЯчейкаНиз.ЦветРамки = НастройкиЯчейки.ЦветРамки; + КонецЕсли; + КонецЦикла; + ВременноОформленныеСтроки.Очистить(); + +КонецПроцедуры + +Функция ДопСвойстваЭлементаФормыЛкс(Знач ЭтаФорма, Знач ЭлементФормы) Экспорт + СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + Если СлужебныеДанныеФормы = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + СлужебныеДанныеФормы = Новый Структура; + #КонецЕсли + СвойстваЭлементов = Неопределено; + Если Не СлужебныеДанныеФормы.Свойство("СвойстваЭлементов", СвойстваЭлементов) Тогда + СвойстваЭлементов = Новый Структура; + СлужебныеДанныеФормы.Вставить("СвойстваЭлементов", СвойстваЭлементов); + КонецЕсли; + СвойстваЭлемента = Неопределено; + Если Не СвойстваЭлементов.Свойство(ЭлементФормы.Имя, СвойстваЭлемента) Тогда + СвойстваЭлемента = Новый Структура("КнопкаРежимаОтображения, ВременноОформленныеСтроки, ЗначениеТекущейЯчейки, ЗапретРазметкиВхождений, МенеджерПоиска, Отбор, НеинтерактивноеИзменение, + |ЗапретОтображения, КнопкаОтображенияПодвала, ЗапретПодвала, КнопкаОформленияТекущихСтрок, ЗапросИтоговПоТаблицеКлючей"); + СвойстваЭлементов.Вставить(ЭлементФормы.Имя, СвойстваЭлемента); + СвойстваЭлемента.Отбор = ОтборТабличногоПоляЛкс(ЭлементФормы); + КонецЕсли; + Возврат СвойстваЭлемента; +КонецФункции + +// Основным элементом страницы считается одноименный с ней элемент формы. +// +Функция Форма_ОбновлениеОтображенияЛкс(ЭтаФорма) Экспорт + + Если ТипЗнч(ЭтаФорма) = Тип("УправляемаяФорма") Тогда + ЭлементыФормы = ЭтаФорма.Элементы; + Иначе + ЭлементыФормы = ЭтаФорма.ЭлементыФормы; + //Если ЭтаФорма.ВводДоступен() Тогда + // СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + // Если СлужебныеДанныеФормы.Свойство("ОбновитьПриАктивации") Тогда + // СлужебныеДанныеФормы.Удалить("ОбновитьПриАктивации"); + // //ЭтаФорма.Обновить(); + // КонецЕсли; + //КонецЕсли; + КонецЕсли; + Для Каждого ЭлементФормы Из ЭлементыФормы Цикл + Если Истина + #Если Клиент Тогда + И ТипЗнч(ЭлементФормы) <> Тип("Панель") + #КонецЕсли + И Не (Истина + И ТипЗнч(ЭлементФормы) = Тип("ГруппаФормы") + И ЭлементФормы.Вид = ВидГруппыФормы.Страницы) + Тогда + Продолжить; + КонецЕсли; + ирОбщий.ОбновитьЗаголовкиСтраницПанелиЛкс(ЭтаФорма, ЭлементыФормы, ЭлементФормы); + КонецЦикла; + Возврат Истина; + +КонецФункции + +Функция Форма_ВосстановитьЗаголовокЛкс(ЭтаФорма) Экспорт + + СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + ЭтаФорма.Заголовок = СлужебныеДанные.ОригинальныйЗаголовок; + +КонецФункции + +Процедура ФормаОбъекта_ОбновитьЗаголовокЛкс(ЭтаФорма, ПредставлениеОбъекта = "") Экспорт + + СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + НовыйЗаголовок = СлужебныеДанные.ОригинальныйЗаголовок; + Если Ложь + Или Не ЗначениеЗаполнено(ПредставлениеОбъекта) + Или ПредставлениеОбъекта = НовыйЗаголовок + Тогда + Если ирОбщий.МетодРеализованЛкс(ЭтаФорма, "ПредставлениеОбъектаДанных") Тогда + ПредставлениеОбъекта = ЭтаФорма.ПредставлениеОбъектаДанных(); + ИначеЕсли ЭтаФорма.АвтоЗаголовок И ЭтаФорма.Заголовок <> НовыйЗаголовок Тогда + ПредставлениеОбъекта = ЭтаФорма.Заголовок; + ИначеЕсли Не ЭтаФорма.МодальныйРежим Тогда + ПредставлениеОбъекта = ирОбщий.ТекущееВремяЛкс(); + КонецЕсли; + КонецЕсли; + Если Истина + И ЗначениеЗаполнено(ПредставлениеОбъекта) + И Не ЭтаФорма.МодальныйРежим + И СтрДлина(НовыйЗаголовок) > 6 + Тогда + Фрагменты = ирОбщий.СтрРазделитьЛкс(НовыйЗаголовок, " "); + НовыеФрагменты = Новый Массив; + Для Каждого Фрагмент Из Фрагменты Цикл + НовыеФрагменты.Добавить(ВРег(Лев(Фрагмент, 1))); + Если НовыеФрагменты.Количество() = 2 Тогда + Прервать; + КонецЕсли; + КонецЦикла; + НовыйЗаголовок = ирОбщий.СтрСоединитьЛкс(НовыеФрагменты, "") + "(ИР)"; + КонецЕсли; + Если ЭтаФорма.КлючУникальности = "Связанный" Тогда + НовыйЗаголовок = НовыйЗаголовок + " (связь)"; + КонецЕсли; + Если ЭтаФорма.РежимВыбора Тогда + НовыйЗаголовок = НовыйЗаголовок + " (выбор)"; + КонецЕсли; + Если ЗначениеЗаполнено(ПредставлениеОбъекта) Тогда + НовыйЗаголовок = НовыйЗаголовок + ": " + ПредставлениеОбъекта; + КонецЕсли; + Если ЭтаФорма.КлючУникальности = "Связанный" Тогда + Если ЭтаФорма.ВладелецФормы <> Неопределено Тогда + НовыйЗаголовок = НовыйЗаголовок + " <- """ + ЭтаФорма.ВладелецФормы.Заголовок + """"; + КонецЕсли; + КонецЕсли; + ЭтаФорма.Заголовок = НовыйЗаголовок; + +КонецПроцедуры + +Процедура ДописатьРежимВыбораВЗаголовокФормыЛкс(ЭтаФорма) Экспорт + + Если ЭтаФорма.РежимВыбора Тогда + ЭтаФорма.Заголовок = ЭтаФорма.Заголовок + " (выбор)"; + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьРежимПриемаОбъектаФормеЛкс(Знач ЭтаФорма, Знач Кнопка, Знач НовыйПриемОбъекта = Неопределено, Знач ОсновнойКлючУникальности = Неопределено) Экспорт + #Если Сервер И Не Сервер Тогда + ЭтаФорма = ОткрытьФорму(); + #КонецЕсли + Если НовыйПриемОбъекта = Ложь Тогда + Если ОсновнойКлючУникальности = Неопределено Тогда + ОсновнойКлючУникальности = Новый УникальныйИдентификатор + КонецЕсли; + ЭтаФорма.КлючУникальности = ОсновнойКлючУникальности; + ИначеЕсли НовыйПриемОбъекта = Истина Тогда + ЭтаФорма.КлючУникальности = "Связанный"; + КонецЕсли; + Кнопка.Доступность = Истина + И (Ложь + Или ТипЗнч(ЭтаФорма.ВладелецФормы) = Тип("Форма") + Или ТипЗнч(ЭтаФорма.ВладелецФормы) = Тип("УправляемаяФорма")) + И ЭтаФорма.ВладелецФормы.Открыта(); + Если Кнопка.Доступность Тогда + Если ТипЗнч(Кнопка) = Тип("КнопкаФормы") Тогда + Иначе + ирОбщий.ОбновитьТекстПослеМаркераВСтрокеЛкс(Кнопка.Подсказка,, "Отправитель - """ + ЭтаФорма.ВладелецФормы.Заголовок + """", Символы.ПС); // Достаточно одного раза + КонецЕсли; + КонецЕсли; + Кнопка.Пометка = ЭтаФорма.КлючУникальности = "Связанный"; + ирКлиент.ФормаОбъекта_ОбновитьЗаголовокЛкс(ЭтаФорма); + +КонецПроцедуры + +// Не используется +Процедура ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Знач Элемент, Знач ОформленияСтрок) Экспорт + + СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + Если СлужебныеДанныеФормы.Свойство("ОбработчикиПриВыводеСтроки") Тогда + ОбработчикиПриВыводеСтроки = СлужебныеДанныеФормы.ОбработчикиПриВыводеСтроки; + ОбработчикПриВыводеСтроки = ОбработчикиПриВыводеСтроки[Элемент.Имя]; + КонецЕсли; + Если Истина + И ОбработчикПриВыводеСтроки <> Неопределено + И Не ирОбщий.МетодРеализованЛкс(ЭтаФорма, ОбработчикПриВыводеСтроки) // Сообщение о его отсутствии выдаем в общем обработчике Форма_ПриОткрытии + Тогда + ОбработчикПриВыводеСтроки = Неопределено; + КонецЕсли; + Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл + ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; + Если ДанныеСтроки = Неопределено Тогда + Продолжить; + КонецЕсли; + Если ОбработчикПриВыводеСтроки = Неопределено Тогда + ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + Иначе + Выполнить("ЭтаФорма." + ОбработчикПриВыводеСтроки + "(Элемент, ОформлениеСтроки, ДанныеСтроки);"); + КонецЕсли; + КонецЦикла; + //Сообщить("" + ТекущаяДата() + " обновлено табличное поле """ + Элемент.Имя + """"); + +КонецПроцедуры + +// Процедура - Табличное поле при активизации строки лкс +// +// Параметры: +// ЭтаФорма - - +// ТабличноеПоле - - +// ОбновлятьПодвал - - +// ОбновлятьСтроки - Булево - имеет смысл установить Ложь, если далее в коде будет обязательно выполнено обновление всех строк табличного поля +// +Процедура ТабличноеПолеПриАктивизацииСтрокиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ОбновлятьПодвал = Истина) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если ТабличноеПоле = Неопределено Тогда + Возврат; + КонецЕсли; + ТабличноеПоле.РежимВыделенияСтроки = РежимВыделенияСтрокиТабличногоПоля.Ячейка; + ВсеСтрокиОбновлены = ТабличноеПолеПриАктивацииКолонкиЛкс(ЭтаФорма, ТабличноеПоле); + Если Не ВсеСтрокиОбновлены Тогда + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + НовыеВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, Ложь); + // ТекущаяСтрока должна всегда быть последней + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + НовыеВыделенныеСтроки.Удалить(НовыеВыделенныеСтроки.Найти(ТабличноеПоле.ТекущаяСтрока)); + НовыеВыделенныеСтроки.Добавить(ТабличноеПоле.ТекущаяСтрока); + КонецЕсли; + СтарыеВыделенныеСтроки = ДопСвойства.ВременноОформленныеСтроки; + Если СтарыеВыделенныеСтроки = Неопределено Или СтарыеВыделенныеСтроки.Количество() = 0 Тогда + СтрокиОбновленияОформления1 = НовыеВыделенныеСтроки; + Иначе + СтрокиОбновленияОформления1 = Новый Массив; + ирОбщий.ПересечьМассивыЛкс(СтарыеВыделенныеСтроки, НовыеВыделенныеСтроки, СтрокиОбновленияОформления1); + СтрокиОбновленияОформления2 = Новый Массив; + ирОбщий.ПересечьМассивыЛкс(НовыеВыделенныеСтроки, СтарыеВыделенныеСтроки, СтрокиОбновленияОформления2); + ирОбщий.ДополнитьМассивЛкс(СтрокиОбновленияОформления1, СтрокиОбновленияОформления2); + СтараяТекущаяСтрока = СтарыеВыделенныеСтроки[СтарыеВыделенныеСтроки.Вграница()]; + Если СтрокиОбновленияОформления1.Найти(СтараяТекущаяСтрока) = Неопределено Тогда + СтрокиОбновленияОформления1.Добавить(СтараяТекущаяСтрока); + КонецЕсли; + КонецЕсли; + ТабличноеПоле.ОбновитьСтроки(СтрокиОбновленияОформления1); + ДопСвойства.ВременноОформленныеСтроки = НовыеВыделенныеСтроки; + КонецЕсли; + ИндексКолонки = 0; + Пока ТабличноеПоле.ТекущаяКолонка = Неопределено И ТабличноеПоле.Колонки.Количество() > ИндексКолонки Цикл + // Антибаг платформы 8.3.17 https://partners.v8.1c.ru/forum/t/1919341/m/1919341 http://www.hostedredmine.com/issues/877079 + КолонкаТП = ТабличноеПоле.Колонки[ИндексКолонки]; + Если КолонкаТП.Доступность И КолонкаТП.Видимость Тогда + ТабличноеПоле.ТекущаяКолонка = КолонкаТП; + КонецЕсли; + ИндексКолонки = ИндексКолонки + 1; + КонецЦикла; + ТабличноеПолеВключитьСтаруюЦветовуюСхемуЛкс(ТабличноеПоле); + Если ОбновлятьПодвал Тогда + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ЭтаФорма", ЭтаФорма); + ПараметрыОбработчика.Вставить("ТабличноеПоле", ТабличноеПоле); + Если ТабличноеПоле.ВыделенныеСтроки.Количество() < 50 Тогда + Задержка = 0; + Иначе + Задержка = 0.1; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ирКлиент.ТабличноеПолеОбновитьТекстыПодваловОтложенноЛкс(); + #КонецЕсли + ПодключитьОбработчикОжиданияСПараметрамиЛкс("ирКлиент.ТабличноеПолеОбновитьТекстыПодваловОтложенноЛкс", ПараметрыОбработчика, Задержка,, Ложь); + КонецЕсли; + ТабличноеПолеОповеститьОбАктивацииСтрокиЛкс(ЭтаФорма, ТабличноеПоле); + +КонецПроцедуры + +Процедура ТабличноеПолеОбновитьТекстыПодваловОтложенноЛкс(Параметры) Экспорт + ТабличноеПолеОбновитьТекстыПодваловЛкс(Параметры.ЭтаФорма, Параметры.ТабличноеПоле, Ложь); +КонецПроцедуры + +Процедура ТабличноеПолеОповеститьОбАктивацииСтрокиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле) Экспорт + + ОповеститьФормыПодсистемыЛкс("ПриАктивизацииСтроки",, ТабличноеПоле, ЭтаФорма); + +КонецПроцедуры + +Процедура ТабличноеПолеВключитьСтаруюЦветовуюСхемуЛкс(Знач Элемент) Экспорт + + // Переключаем цветовую схему на старый вариант (без градиентов и с подсветкой текущей колонки) https://partners.v8.1c.ru/forum/t/898034/m/898082 + Если Элемент.Колонки.Количество() > 0 И Элемент.Колонки[0].ЦветФонаШапки <> ЦветаСтиля.ЦветФонаКнопки Тогда + Элемент.Колонки[0].ЦветФонаШапки = ЦветаСтиля.ЦветФонаКнопки; + КонецЕсли; + +КонецПроцедуры + +Процедура ИнтерактивноЗаписатьВКолонкуФлажкаЛкс(Знач Элемент, Знач Колонка, Знач НовоеЗначение = Неопределено, ВосстанавитьТекущуюКолонку = Истина) Экспорт + + #Если Сервер И Не Сервер Тогда + Элемент = Новый ТабличноеПоле; + Колонка = Элемент.Колонки.Добавить(); + #КонецЕсли + Если НовоеЗначение = Неопределено Тогда + НовоеЗначение = Не Элемент.ТекущаяСтрока[Колонка.Данные]; + КонецЕсли; + ирКлиент.ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(Элемент, Колонка, НовоеЗначение,, ВосстанавитьТекущуюКолонку,,, Истина); + +КонецПроцедуры + +Процедура ТабличноеПоле_ИнтерактивноУстановитьПометкуТекущейСтрокиЛкс(ТабличноеПоле, КолонкаПометки, НоваяПометка = Неопределено) Экспорт + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; + Если ТекущаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + Если КолонкаПометки = Неопределено Тогда + КолонкаПометки = КолонкаПометкиТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + Если КолонкаПометки = Неопределено Тогда + Возврат; + КонецЕсли; + ИнтерактивноЗаписатьВКолонкуФлажкаЛкс(ТабличноеПоле, КолонкаПометки, НоваяПометка); +КонецПроцедуры + +Функция КолонкаПометкиТабличногоПоляЛкс(Знач ТабличноеПоле) + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + КолонкаТекущая = ТабличноеПоле.ТекущаяКолонка; + Если КолонкаТекущая = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Если Истина + //И ТабличноеПоле.ТекущаяКолонка <> Неопределено + //И ТабличноеПоле.Значение.Количество() > 0 + //И ТипЗнч(ТабличноеПоле.Значение[0][ТабличноеПоле.ТекущаяКолонка.Данные]) = Тип("Булево") + И КолонкаТекущая.ЭлементУправления <> Неопределено + И ТипЗнч(КолонкаТекущая.ЭлементУправления.Значение) = Тип("Булево") + Тогда + Колонка = ТабличноеПоле.ТекущаяКолонка; + КонецЕсли; + Если Колонка = Неопределено Тогда + Колонка = ТабличноеПоле.Колонки.Найти("Пометка"); + КонецЕсли; + Если Колонка = Неопределено Тогда + Колонка = ТабличноеПоле.Колонки.Найти("Использование"); + КонецЕсли; + Если Колонка = Неопределено Тогда + КолонкаПервая = ТабличноеПоле.Колонки[0]; + Если КолонкаПервая.Имя = "НомерСтроки" И ТабличноеПоле.Колонки.Количество() > 1 Тогда + КолонкаПервая = ТабличноеПоле.Колонки[1]; + КонецЕсли; + Если Истина + И КолонкаПервая.ЭлементУправления <> Неопределено + И ТипЗнч(КолонкаПервая.ЭлементУправления.Значение) = Тип("Булево") + Тогда + Колонка = КолонкаПервая; + КонецЕсли; + КонецЕсли; + Возврат Колонка; + +КонецФункции + +Процедура УстановитьФокусВводаФормеЛкс(ФормаВладелец = Неопределено, ИспользоватьЭмуляциюНажатияКлавиш = Ложь) Экспорт + + // Для обхода ошибок платформы 8.3. Форма при закрытии может вернуть фокус ввода главному окну вместо отображаемому на переднем плане дочернему окну. + Если ФормаВладелец <> Неопределено Тогда + ФормаВладелец.Открыть(); + КонецЕсли; + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Если Истина + И мПлатформа.ИспользоватьЭмуляциюНажатияКлавиш() + И мПлатформа.МодальныеГруппы.Количество() = 0 // https://www.hostedredmine.com/issues/938929 + Тогда + ВосстановитьФокусВводаОткрытиемПустышкиЛкс(); // https://www.hostedredmine.com/issues/949043 + // Так отображается индикатор изменения NumLock, если он был включен + ОтправитьНажатияКлавишЛкс("%"); // Alt + ОтправитьНажатияКлавишЛкс("%"); // Alt + Иначе + // Так может переставать мигать каретка https://www.hostedredmine.com/issues/936823 + #Если Сервер И Не Сервер Тогда + ВосстановитьФокусВводаГлЛкс(); + #КонецЕсли + ПодключитьГлобальныйОбработчикОжиданияЛкс("ВосстановитьФокусВводаГлЛкс", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +Процедура ВосстановитьФокусВводаОткрытиемПустышкиЛкс() Экспорт + + ФормаПустышка = ирКэш.ФормаПустышкаЛкс(); + Попытка + ФормаПустышка.Открыть(); + ФормаПустышка.Закрыть(); + Исключение + // Главное окно уже закрыто https://www.hostedredmine.com/issues/956380 + КонецПопытки; + +КонецПроцедуры + +Процедура ТабличноеПолеОтбораКомпоновкиПеретаскиваниеЛкс(ЭтаФорма, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка) Экспорт + + Если Истина + И ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") + И ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение + Тогда + ТипЭлемента = ТипЗнч(ПараметрыПеретаскивания.Значение[0]); + Если Ложь + Или ТипЭлемента = Тип("ДоступноеПолеКомпоновкиДанных") + Или ТипЭлемента = Тип("ДоступноеПолеОтбораКомпоновкиДанных") + Тогда + Если Истина + И Строка <> Неопределено + И Колонка <> Неопределено + И Найти(Колонка.Данные, "ПравоеЗначение") = 1 + Тогда + СтандартнаяОбработка = Ложь; + Строка.ПравоеЗначение = ПараметрыПеретаскивания.Значение[0].Поле; + //ИначеЕсли Найти(Колонка.Данные, "ЛевоеЗначение") = 1 Тогда // Удобнее штатным способом добавлять новый элемент сразу в нужную позицию + // СтандартнаяОбработка = Ложь; + // Строка.ЛевоеЗначение = ПараметрыПеретаскивания.Значение[0].Поле; + Иначе + //Если ТипЗнч(Строка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + // Родитель = ирОбщий.РодительСтрокиДереваЛкс(Строка, Элемент.Значение); + //ИначеЕсли ТипЗнч(Строка) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + // Родитель = Строка; + //Иначе + // Родитель = Элемент.Значение; + //КонецЕсли; + //Для Каждого ДоступноеПоле Из ПараметрыПеретаскивания.Значение Цикл + // #Если Сервер И Не Сервер Тогда + // ДоступноеПоле = Новый НастройкиКомпоновкиДанных; + // ДоступноеПоле = ДоступноеПоле.Выбор.ДоступныеПоляВыбора.НайтиПоле(); + // #КонецЕсли + // НовыйЭлемент = Родитель.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + // НовыйЭлемент.Использование = Истина; + // НовыйЭлемент.ЛевоеЗначение = ДоступноеПоле.Поле; + // Элемент.ТекущаяСтрока = НовыйЭлемент; + //КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ТабличноеПолеВставитьКолонкуНомерСтрокиЛкс(Знач ТабличноеПоле) Экспорт + + ИмяКолонкиНомерСтроки = ирКэш.ИмяКолонкиНомерСтрокиЛкс(); + КолонкаТП = ТабличноеПоле.Колонки.Найти(ИмяКолонкиНомерСтроки); + Если КолонкаТП = Неопределено Тогда + КолонкаТП = ТабличноеПоле.Колонки.Вставить(0); + КолонкаТП.Имя = ИмяКолонкиНомерСтроки; + КолонкаТП.ТекстШапки = "№"; + КолонкаТП.ПодсказкаВШапке = "Номер элемента в пределах родителя (служебная)"; + КолонкаТП.ТолькоПросмотр = Истина; + КолонкаТП.Ширина = ирОбщий.МинимальнаяШиринаКолонкиЛкс(); + Иначе + ТабличноеПоле.Колонки.Сдвинуть(КолонкаТП, - ТабличноеПоле.Колонки.Индекс(КолонкаТП)); + КонецЕсли; + +КонецПроцедуры + +Процедура _РасширенныйВыборПравогоЗначенияОтбораКомпоновкиЛкс(ТабличноеПолеОтбора) Экспорт + + ТекущаяСтрока = ТабличноеПолеОтбора.ТекущаяСтрока; + Если Ложь + Или ТекущаяСтрока = Неопределено + Или ТипЗнч(ТекущаяСтрока) = Тип("ОтборКомпоновкиДанных") + Или ТипЗнч(ТекущаяСтрока) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + Тогда + Возврат; + КонецЕсли; + ЗначениеОтбора = ТекущаяСтрока.ПравоеЗначение; + КолонкаТП = ТабличноеПолеОтбора.Колонки.ПравоеЗначениеДляКраткогоОтображенияЭлемента; + ТабличноеПолеОтбора.ТекущаяКолонка = КолонкаТП; + Если ТипЗнч(ЗначениеОтбора) <> Тип("СписокЗначений") Тогда + Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ЗначениеОтбора, Ложь) Тогда + ТабличноеПолеОтбора.ИзменитьСтроку(); + ирКлиент.ОткрытьФормуСпискаЛкс(ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(ЗначениеОтбора)),,, КолонкаТП.ЭлементУправления, Истина,, ЗначениеОтбора); + КонецЕсли; + Иначе + Результат = ирКлиент.ОткрытьЗначениеЛкс(ЗначениеОтбора, Истина); + Если Результат Тогда + ТекущаяСтрока.ПравоеЗначение = ЗначениеОтбора; + ТекущаяСтрока.Использование = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ПоказатьДоступноеПолеЭлементаНастроекКомпоновкиЛкс(ЭтаФорма, Знач ТабличноеПолеДоступныхПолей, Знач ТабличноеПолеНастроек) Экспорт + + ТекущаяСтрока = ТабличноеПолеНастроек.ТекущаяСтрока; + Если ТипЗнч(ТекущаяСтрока) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ИскомоеПоле = ТекущаяСтрока.ЛевоеЗначение; + Если ТабличноеПолеНастроек.ТекущаяКолонка = ТабличноеПолеНастроек.Колонки.ПравоеЗначениеДляКраткогоОтображенияЭлемента Тогда + ИскомоеПоле = ТекущаяСтрока.ПравоеЗначение; + КонецЕсли; + ИначеЕсли Ложь + Или ТипЗнч(ТекущаяСтрока) = Тип("ЭлементПорядкаКомпоновкиДанных") + Или ТипЗнч(ТекущаяСтрока) = Тип("ВыбранноеПолеКомпоновкиДанных") + Или ТипЗнч(ТекущаяСтрока) = Тип("ПолеГруппировкиКомпоновкиДанных") + Тогда + ИскомоеПоле = ТекущаяСтрока.Поле; + Иначе + Возврат Неопределено; + КонецЕсли; + ДоступноеПоле = ТабличноеПолеДоступныхПолей.Значение.НайтиПоле(Новый ПолеКомпоновкиДанных(ИскомоеПоле)); + Если ДоступноеПоле <> Неопределено Тогда + ТабличноеПолеДоступныхПолей.ТекущаяСтрока = ДоступноеПоле; + ЭтаФорма.ТекущийЭлемент = ТабличноеПолеДоступныхПолей; + КонецЕсли; + Возврат ДоступноеПоле; + +КонецФункции + +Процедура КнопкаОтображатьПустыеИИдентификаторыНажатиеЛкс(Кнопка) Экспорт + + МассивСостояний = ирОбщий.СостоянияКнопкиОтображатьПустыеИИдентификаторыЛкс(); + Если ТипЗнч(Кнопка) = Тип("КнопкаКоманднойПанели") Тогда + ТекстКнопки = Кнопка.Текст; + Иначе + ТекстКнопки = Кнопка.Заголовок; + КонецЕсли; + Если ТекстКнопки = МассивСостояний[2] Тогда + Кнопка.Пометка = Ложь; + НовыйТекстКнопки = МассивСостояний[0]; + Кнопка.Картинка = ирКэш.КартинкаПоИмениЛкс("ирПусто"); + ИначеЕсли ТекстКнопки = МассивСостояний[1] Тогда + Кнопка.Пометка = Истина; + НовыйТекстКнопки = МассивСостояний[2]; + Кнопка.Картинка = ирКэш.КартинкаПоИмениЛкс("ирИдентификатор"); + Иначе//Если ТекстКнопки = МассивСостояний[0] Тогда + Кнопка.Пометка = Истина; + НовыйТекстКнопки = МассивСостояний[1]; + Кнопка.Картинка = ирКэш.КартинкаПоИмениЛкс("ирПусто"); + КонецЕсли; + Если ТипЗнч(Кнопка) = Тип("КнопкаКоманднойПанели") Тогда + Кнопка.Текст = НовыйТекстКнопки; + Иначе + Кнопка.Заголовок = НовыйТекстКнопки; + КонецЕсли; + +КонецПроцедуры + +Процедура ПрименитьИзмененияИЗакрытьФормуЛкс(ЭтаФорма, ЗначениеВыбора = Неопределено) Экспорт + + ЭтаФорма.Модифицированность = Ложь; + Если Ложь + Или ЭтаФорма.ВладелецФормы <> Неопределено + Или Не ЭтаФорма.Открыта() + Тогда + ЭтаФорма.ОповеститьОВыборе(ЗначениеВыбора); + КонецЕсли; + Если ЭтаФорма.Открыта() Тогда + ЭтаФорма.Закрыть(ЗначениеВыбора); + КонецЕсли; + //Если ЭтаФорма.Открыта() Тогда + // ЭтаФорма.Закрыть(ЗначениеВыбора); + //Иначе//Если ЭтаФорма.МодальныйРежим Тогда + // ЭтаФорма.ОповеститьОВыборе(ЗначениеВыбора); + //КонецЕсли; + +КонецПроцедуры + +// +// Параметры: +// ЯзыкПрограммы - Число - 0 - встроенный язык, 1 - язык запросов, 2 - язык выражений СКД +Функция НайтиВозможныеСтрокиОписанияСловаВСинтаксПомощникеЛкс(Знач Слово, ЯзыкПрограммы = 0, ПоискСУчетомТипаСлова = Истина) Экспорт + + мПлатформа = ирКэш.Получить(); + мПлатформа.ИнициализацияОписанияМетодовИСвойств(); + МассивВозможныхТиповСлова = Новый Массив; + МассивВозможныхТиповСлова.Добавить("Конструктор"); + Слово = НРег(Слово); + Если Ложь + Или Не ПоискСУчетомТипаСлова + Или Прав(Слово, 1) = "(" + Тогда + Если Прав(Слово, 1) = "(" Тогда + Слово = ирОбщий.СтрокаБезКонцаЛкс(Слово, 1); + КонецЕсли; + МассивВозможныхТиповСлова.Добавить("Метод"); + КонецЕсли; + Если Ложь + Или Не ПоискСУчетомТипаСлова + Или Прав(Слово, 1) <> "(" + Тогда + МассивВозможныхТиповСлова.Добавить("Свойство"); + МассивВозможныхТиповСлова.Добавить("Конструкция"); + МассивВозможныхТиповСлова.Добавить("Событие"); + МассивВозможныхТиповСлова.Добавить("Таблица"); + КонецЕсли; + ТаблицаСтруктурВозможныхТиповКонтекста = мПлатформа.НоваяТаблицаСтруктурТипа(); + Для Каждого ВозможныйТипСлова Из МассивВозможныхТиповСлова Цикл + Если ВозможныйТипСлова = "Конструктор" Тогда + КлючПоиска = Новый Структура("ТипКонтекста, ТипСлова, ЯзыкПрограммы, ТипЯзыка", Слово, ВозможныйТипСлова, ЯзыкПрограммы, ""); + Иначе + КлючПоиска = Новый Структура("НСлово, ТипСлова, ЯзыкПрограммы, ТипЯзыка", Слово, ВозможныйТипСлова, ЯзыкПрограммы, ""); + КонецЕсли; + НайденныеСтроки = мПлатформа.ТаблицаКонтекстов.НайтиСтроки(КлючПоиска); + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + ЗаполнитьЗначенияСвойств(ТаблицаСтруктурВозможныхТиповКонтекста.Добавить(), Новый Структура("СтрокаОписания", НайденнаяСтрока)); + КонецЦикла; + НайденныеСтроки = мПлатформа.ТаблицаШаблоновКонтекстов.НайтиСтроки(КлючПоиска); + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + ЗаполнитьЗначенияСвойств(ТаблицаСтруктурВозможныхТиповКонтекста.Добавить(), Новый Структура("СтрокаОписания", НайденнаяСтрока)); + КонецЦикла; + КонецЦикла; + КлючПоиска = Новый Структура("НСлово, ЯзыкПрограммы", Слово, ЯзыкПрограммы); + НайденныеСтроки = мПлатформа.ТаблицаОбщихТипов.НайтиСтроки(КлючПоиска); + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + ЗаполнитьЗначенияСвойств(ТаблицаСтруктурВозможныхТиповКонтекста.Добавить(), Новый Структура("СтрокаОписания", НайденнаяСтрока)); + КонецЦикла; + Возврат ТаблицаСтруктурВозможныхТиповКонтекста; + +КонецФункции + +// Открывает форму синтакс-помощника и загружает в нее нужную страницу, подсвечивая заданную строку. +// +// Параметры: +// ВнутреннийПутьКОписанию - Строка - внутренний путь к странице синтакс-помощника; +// СтрокаДляПодсветки - Строка - которую нужно подсветить в тексте страницы. +// +// Возвращаемое значение: +// Форма. +// +Функция ОткрытьСтраницуСинтаксПомощникаЛкс(ВнутреннийПутьКОписанию, СтрокаДляПодсветки = "", ВладелецФормы = Неопределено, КлючУникальности = Неопределено) Экспорт + + Если ирОбщий.ПроверитьПлатформаНеWindowsЛкс() Тогда + Возврат Неопределено; + КонецЕсли; + Если ВнутреннийПутьКОписанию = "" Тогда + Возврат Неопределено; + КонецЕсли; + ФормаСправка = ПолучитьФормуЛкс("Обработка.ирСинтаксПомощник.Форма", , , КлючУникальности); + ФормаСправка.ВладелецФормы = ВладелецФормы; + ФормаСправка.ОткрытьАдрес(ВнутреннийПутьКОписанию, СтрокаДляПодсветки); + ФормаСправка.ВладелецФормы = Неопределено; + Возврат ФормаСправка; + +КонецФункции + +// Параметры: +// ЭтаФорма - Форма - для возвращения фокуса ввода +Функция ОткрытьОписаниеТипаПоТипуЛкс(Знач Тип, Знач ЭтаФорма = Неопределено) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + СтруктураТипа = мПлатформа.СтруктураТипаИзКонкретногоТипа(Тип); + ИмяОбщегоТипа = СтруктураТипа.ИмяОбщегоТипа; + Результат = ОткрытьОписаниеТипаПоИмениТипаЛкс(ИмяОбщегоТипа, ЭтаФорма); + Возврат Результат; + +КонецФункции + +Функция ОткрытьОписаниеТипаПоИмениТипаЛкс(Знач ИмяОбщегоТипа, Знач ЭтаФорма = Неопределено) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + СтрокаОбщегоТипа = мПлатформа.ТаблицаОбщихТипов.Найти(НРег(ИмяОбщегоТипа), "НСлово"); + Если СтрокаОбщегоТипа = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Результат = ирКлиент.ОткрытьСтраницуСинтаксПомощникаЛкс(СтрокаОбщегоТипа.ПутьКОписанию, , ЭтаФорма); + Возврат Результат; + +КонецФункции + +// Обходит строки табличного поля и имитирует редактирование и выбор пользователем заданного значения. +// +// Параметры: +// ТабличноеПоле - ТабличноеПоле; +// ЗначениеОбработки - Произвольные - значение, которое будем записывать в ячейки; Структура(Параметры, Формула) +// ТипИсточника - Строка, *Неопределено - "ТаблицаЗначений", "ТабличнаяЧасть"; +// Колонка - КолонкаТабличногоПоля, *Неопределено - колонка в которой обходим ячейки, по умолчанию текущая; +// ТолькоВыделенныеСтроки - Булево, *Истина - обходить только выделенные строки. +// ИнтерактивнаяУстановка - Булево, *Истина - +// НаСервере - Булево, *Ложь - Вычислять формулу на сервере +// СтруктураОтбора - Структура, *Неопределено - +// +Процедура УстановитьЗначениеВКолонкеТабличногоПоляТЧИлиТЗЛкс(ЭтаФорма, ТабличноеПоле, ЗначениеОбработки, Знач ТипИсточника = Неопределено, Знач Колонка = Неопределено, Знач ТолькоВыделенныеСтроки = Истина, + Знач ИнтерактивнаяУстановка = Истина, Знач НаСервере = Ложь, Знач СтруктураОтбора = Неопределено, Знач МетаданныеВыбора = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если ТабличноеПоле.ТолькоПросмотр Тогда + Возврат; + КонецЕсли; + Если Истина + //И ИнтерактивнаяУстановка + И Колонка <> Неопределено + И Не Колонка.Видимость + Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Колонка %1 не видима. Поэтому изменение значений в ней не может быть выполнено.",, Колонка.ТекстШапки)); + Возврат; + КонецЕсли; + ДопСвойства = ирКлиент.ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + ЗначениеТабличногоПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + Если ТипИсточника = "" Тогда + ТипИсточника = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + СтарыеВключенныеЭлементыОтбора = Новый Массив; + ЕстьОтборСтрок = Ложь + Или ТипИсточника = "ТабличнаяЧасть" + Или ТипИсточника = "НаборЗаписей"; + ТекстВопросаУчетаОтбора = ""; + Если ЕстьОтборСтрок Тогда + ТекстВопросаУчетаОтбора = " отобранные"; + КонецЕсли; + Если ТолькоВыделенныеСтроки Тогда + Если Истина + И ТабличноеПоле.ВыделенныеСтроки.Количество() = 1 + И ТипИсточника <> "ДеревоЗначений" + Тогда + Ответ = Вопрос("Выделена только одна строка. Хотите обработать все" + ТекстВопросаУчетаОтбора + " строки?", РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Да Тогда + ТолькоВыделенныеСтроки = Ложь; + КонецЕсли; + КонецЕсли; + ИначеЕсли ЕстьОтборСтрок Тогда + Если ирОбщий.ЛиОтборУстановленЛкс(ТабличноеПоле.ОтборСтрок) Тогда + Ответ = Вопрос("Хотите обработать" + ТекстВопросаУчетаОтбора + " (Да) или все (Нет) строки?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Для Каждого ЭлементОтбора Из ТабличноеПоле.ОтборСтрок Цикл + Если ЭлементОтбора.Использование Тогда + ЭлементОтбора.Использование = Ложь; + СтарыеВключенныеЭлементыОтбора.Добавить(ЭлементОтбора.Имя); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЕсли; + СтараяТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; + СтараяТекущаяКолонка = ирКлиент.ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); + СтарыеВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + //ТабличноеПолеСостояниеСтрокЛкс(ТабличноеПоле, ?); // Неизвестна ключевая колонка + Если Колонка = Неопределено Тогда + Колонка = СтараяТекущаяКолонка; + Иначе + ирОбщий.УстановитьТекущуюКолонкуТаблицыФормыЛкс(ТабличноеПоле, Колонка); + КонецЕсли; + КлючиСтрокДляОбработки = Новый Массив; + Если ТолькоВыделенныеСтроки Тогда + Для Каждого ВыделеннаяСтрока Из ТабличноеПоле.ВыделенныеСтроки Цикл + КлючиСтрокДляОбработки.Добавить(ВыделеннаяСтрока); + КонецЦикла; + Иначе + Если ЕстьОтборСтрок Или СтруктураОтбора <> Неопределено Тогда + КлючеваяКолонка = ирОбщий.ПеревестиСтроку("НомерСтроки"); + Построитель = ПостроительТабличногоПоляСОтборомКлиентаЛкс(ТабличноеПоле, СтруктураОтбора); + #Если Сервер И Не Сервер Тогда + Построитель = Новый ПостроительЗапроса; + #КонецЕсли + Построитель.ВыбранныеПоля.Очистить(); + Построитель.ВыбранныеПоля.Добавить(КлючеваяКолонка); + ТаблицаРезультата = Построитель.Результат.Выгрузить(); + Для Каждого СтрокаРезультата Из ТаблицаРезультата Цикл + КлючиСтрокДляОбработки.Добавить(СтрокаРезультата[КлючеваяКолонка] - 1); + КонецЦикла; + ИначеЕсли ТипИсточника = "ТаблицаЗначений" Тогда + Для Каждого СтрокаТаблицы Из ЗначениеТабличногоПоля Цикл + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + КлючСтроки = СтрокаТаблицы.ПолучитьИдентификатор(); + Иначе + КлючСтроки = СтрокаТаблицы; + КонецЕсли; + КлючиСтрокДляОбработки.Добавить(КлючСтроки); + КонецЦикла; + ИначеЕсли ТипЗнч(ЗначениеТабличногоПоля) = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда + КлючиСтрокДляОбработки = ирОбщий.ВсеВыбранныеПоляГруппировкиКомпоновкиЛкс(ЗначениеТабличногоПоля); + КонецЕсли; + КонецЕсли; + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + ЭлементУправления = Колонка.ЭлементУправления; + ИнтерактивнаяУстановка = Истина + И ИнтерактивнаяУстановка + И ДопСвойства.НеинтерактивноеИзменение <> Истина + И (Ложь + Или ЗначениеЗаполнено("" + ЭлементУправления.ПолучитьДействие("ПриИзменении")) + Или ЗначениеЗаполнено("" + ТабличноеПоле.ПолучитьДействие("ПриНачалеРедактирования"))); + ПроверятьОформлениеСтроки = ДопСвойства.НеинтерактивноеИзменение <> Истина; + ДействиеПриВыводеСтроки = ТабличноеПоле.ПолучитьДействие("ПриВыводеСтроки"); + Иначе + ЭлементУправления = Колонка; + КонецЕсли; + ПутьКДаннымКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, Колонка); + ИспользоватьИндикатор = ПроверятьОформлениеСтроки Или ИнтерактивнаяУстановка; + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КлючиСтрокДляОбработки.Количество(), "Групповая установка значения"); + ПоследняяОбработаннаяСтрока = Неопределено; + ОформлениеСтроки = Неопределено; + КоличествоПропущенных = 0; + Для Каждого КлючСтроки Из КлючиСтрокДляОбработки Цикл + ОбработкаПрерыванияПользователя(); + Если ИспользоватьИндикатор Тогда + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + КонецЕсли; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + ДанныеСтроки = ТабличноеПоле.ДанныеСтроки(КлючСтроки); + ТекущаяСтрока = КлючСтроки; + Иначе + Если ТипЗнч(КлючСтроки) = Тип("Число") Тогда + ТекущаяСтрока = ЗначениеТабличногоПоля[КлючСтроки]; + Иначе + ТекущаяСтрока = КлючСтроки; + КонецЕсли; + ДанныеСтроки = ТекущаяСтрока; + Если ПроверятьОформлениеСтроки Тогда + Если ОформлениеСтроки = Неопределено Тогда + //ТабличноеПоле.ОбновитьСтроки(ДанныеСтроки); // Чтобы функция ОформлениеСтроки() гарантировано вернула актуальное оформление + ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(ДанныеСтроки); // Каждый раз это вызывать очень долго + КонецЕсли; + Если ДействиеПриВыводеСтроки <> Неопределено Тогда + ДопСвойства.ЗапретОтображения = Истина; + Выполнить("ЭтаФорма." + ДействиеПриВыводеСтроки + "(ТабличноеПоле, ОформлениеСтроки, ДанныеСтроки)"); + ДопСвойства.ЗапретОтображения = Ложь; + КонецЕсли; + Если ОформлениеСтроки.Ячейки[Колонка.Имя].ТолькоПросмотр Тогда + ОформлениеСтроки.Ячейки[Колонка.Имя].ТолькоПросмотр = Ложь; + Продолжить; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ТипЗнч(ЗначениеОбработки) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ЗначениеОбработки.Параметры, ДанныеСтроки); + НовоеЗначение = ирОбщий.ВычислитьВыражение(ЗначениеОбработки.Формула, ЗначениеОбработки.Параметры, НаСервере); + Иначе + НовоеЗначение = ЗначениеОбработки; + КонецЕсли; + Если ИнтерактивнаяУстановка Тогда + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + ДействиеПриАктивизацииСтроки = ТабличноеПоле.ПолучитьДействие("ПриАктивизацииСтроки"); + ДействиеПриВыводеСтроки = ТабличноеПоле.ПолучитьДействие("ПриВыводеСтроки"); + ТабличноеПоле.УстановитьДействие("ПриАктивизацииСтроки", Неопределено); + ТабличноеПоле.УстановитьДействие("ПриВыводеСтроки", Неопределено); + ТабличноеПоле.ТекущаяСтрока = ТекущаяСтрока; + Иначе + ТабличноеПоле.ТекущаяСтрока = КлючСтроки; + КонецЕсли; + РезультатОтправки = ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, НовоеЗначение,, Ложь,,, Истина, ПутьКДаннымКолонки, МетаданныеВыбора); + Если Не РезультатОтправки Тогда + КоличествоПропущенных = КоличествоПропущенных + 1; + КонецЕсли; + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + ТабличноеПоле.УстановитьДействие("ПриАктивизацииСтроки", ДействиеПриАктивизацииСтроки); + ТабличноеПоле.УстановитьДействие("ПриВыводеСтроки", ДействиеПриВыводеСтроки); + //ТабличноеПоле.ОбновитьСтроки(ТекущаяСтрока); + КонецЕсли; + Иначе + Попытка + ТекущаяСтрока[ПутьКДаннымКолонки] = НовоеЗначение; + Исключение + // настройка компоновки + КонецПопытки; + КонецЕсли; + ПоследняяОбработаннаяСтрока = ТекущаяСтрока; + КонецЦикла; + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(Индикатор); + Если Истина + И ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") + И Не ИнтерактивнаяУстановка + И ПоследняяОбработаннаяСтрока <> Неопределено + Тогда + // Переустановим значение ради срабатывания события ПриИзменении без его фактического изменения, чтобы сработали механизмы подсчета количества помеченных + ТабличноеПоле.ТекущаяСтрока = ПоследняяОбработаннаяСтрока; + ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, ПоследняяОбработаннаяСтрока[ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, Колонка)],,,,, Истина, ПутьКДаннымКолонки, МетаданныеВыбора); + КонецЕсли; + Если КоличествоПропущенных > 0 Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонЛкс("Пропущено %1 ячеек из-за несогласованности строки с новым значением", КоличествоПропущенных)); + КонецЕсли; + Для Каждого СтарыйЭлементОтбора Из СтарыеВключенныеЭлементыОтбора Цикл + ТабличноеПоле.ОтборСтрок[СтарыйЭлементОтбора].Использование = Истина; + КонецЦикла; + ТабличноеПоле.ВыделенныеСтроки.Очистить(); + Если СтараяТекущаяСтрока <> Неопределено Тогда + ТабличноеПоле.ТекущаяСтрока = СтараяТекущаяСтрока; + КонецЕсли; + Если СтараяТекущаяКолонка <> Неопределено Тогда + ирОбщий.УстановитьТекущуюКолонкуТаблицыФормыЛкс(ТабличноеПоле, СтараяТекущаяКолонка); + КонецЕсли; + Для Каждого СтрокаЦикл Из СтарыеВыделенныеСтроки Цикл + ТабличноеПоле.ВыделенныеСтроки.Добавить(СтрокаЦикл); + КонецЦикла; + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + ТабличноеПоле.ОбновитьСтроки(); // Антибаг платформы. Без этого иногда некоторые строки были недорисованы + КонецЕсли; + +КонецПроцедуры + +// Предоставляет пользователю редактор таблицы значений. Затем загружает добавленные туда пользователем данные в табличное поле с эмуляцией интерактивных событий +// +// Параметры: +// Форма - Форма +// ТабличноеПоле - ТабличноеПоле; +// РазрешитьИнтерактивнуюУстановку - Булево - вызывать обработчики событий формы +// +// Возвращаемое значение: +// Булево - успех +Функция ЗагрузитьСтрокиВТабличноеПолеЛкс(Знач Форма, Знач ТабличноеПоле, Знач РазрешитьИнтерактивнуюУстановку = Истина, Знач МетаданныеКолонок = Неопределено, ЛиТЧ = Истина, + Знач РеквизитыВладельца = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + МетаданныеКолонок = Новый Структура; + #КонецЕсли + Если ТабличноеПоле.ТолькоПросмотр Или Не ТабличноеПоле.ИзменятьСоставСтрок Тогда + Возврат Ложь; + КонецЕсли; + СтараяТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; + ТабличноеПоле.ДобавитьСтроку(); + Если СтараяТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока Тогда + ирОбщий.СообщитьЛкс("Добавление строк заблокировано обработчиком перед добавлением строки"); + Возврат Ложь; + КонецЕсли; + ИнтерактивныеКолонки = ИнтерактивныеКолонкиТабличногоПоляЛкс(ТабличноеПоле); + #Если Сервер И Не Сервер Тогда + ИнтерактивныеКолонки = Новый СписокЗначений; + #КонецЕсли + КоллекцияСтрокПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + Если ТипЗнч(КоллекцияСтрокПоля) = Тип("ДеревоЗначений") Тогда + КоллекцияСтрокПоля = ирОбщий.РодительСтрокиДереваЛкс(ТабличноеПоле.ТекущаяСтрока, КоллекцияСтрокПоля).Строки; + ИначеЕсли ТипЗнч(КоллекцияСтрокПоля) = Тип("ДанныеФормыДерево") Тогда + КоллекцияСтрокПоля = ирОбщий.РодительСтрокиДереваЛкс(ТабличноеПоле.ТекущаяСтрока, КоллекцияСтрокПоля).ПолучитьЭлемент(); + КонецЕсли; + Если ИнтерактивныеКолонки.Количество() = 0 Тогда + КоллекцияСтрокПоля.Удалить(ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле)); + ирОбщий.СообщитьЛкс("В табличном поле отсутствуют интерактивно доступные колонки"); + Возврат Ложь; + КонецЕсли; + ИменаКолонокДанных = ирОбщий.СтрСоединитьЛкс(ирОбщий.ВыгрузитьСвойствоКоллекцииЛкс(ИнтерактивныеКолонки, "Представление")); + ЗагружаемаяТаблица = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, Новый Массив,,,, ИменаКолонокДанных); + #Если Сервер И Не Сервер Тогда + ЗагружаемаяТаблица = Новый ТаблицаЗначений; + #КонецЕсли + СтрокаКоллекции = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + ТабличноеПоле.ЗакончитьРедактированиеСтроки(Истина); + Попытка + // Табличное поле могло выйти из режима редактирования строки из-за смены текущей колонки. Поэтому для подстраховки попробуем удалить строку из коллекции + КоллекцияСтрокПоля.Удалить(СтрокаКоллекции); + Исключение + КонецПопытки; + ТабличноеПоле.ТекущаяСтрока = СтараяТекущаяСтрока; + Заголовок = "Заполните строки для загрузки"; + Если Не ОткрытьЗначениеЛкс(ЗагружаемаяТаблица,,, Заголовок) Тогда + Возврат Ложь; + КонецЕсли; + + БылиДобавленыСтроки = ЗагрузитьТаблицуВТабличноеПолеЛкс(Форма, ТабличноеПоле, ЗагружаемаяТаблица, КоллекцияСтрокПоля, РазрешитьИнтерактивнуюУстановку, МетаданныеКолонок, + ЛиТЧ, РеквизитыВладельца, ИнтерактивныеКолонки); + Возврат БылиДобавленыСтроки; + +КонецФункции + +// Загружает переданную таблицу значений в табличное поле. Перед загрузкой в непустой приемник задается вопрос об очистке. +// Параметры: +// Форма - Форма +// ТабличноеПоле - ТабличноеПоле; +// ЗагружаемаяТаблица - ТаблицаЗначений; +// РазрешитьИнтерактивнуюУстановку - Булево - вызывать обработчики событий формы +// +// Возвращаемое значение: +// Булево - успех +Функция ЗагрузитьТаблицуВТабличноеПолеЛкс(Знач Форма, Знач ТабличноеПоле, Знач ЗагружаемаяТаблица, Знач КоллекцияСтрокПоля = Неопределено, Знач РазрешитьИнтерактивнуюУстановку = Истина, + Знач МетаданныеКолонок = Неопределено, ЛиТЧ = Истина, Знач РеквизитыВладельца = Неопределено, Знач ИнтерактивныеКолонки = Неопределено, Знач ПредлагатьОчистку = Истина) Экспорт + + Если ИнтерактивныеКолонки = Неопределено Тогда + ИнтерактивныеКолонки = ИнтерактивныеКолонкиТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + Если КоллекцияСтрокПоля = Неопределено Тогда + КоллекцияСтрокПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + КонецЕсли; + ИменаКолонокДанных = ирОбщий.СтрСоединитьЛкс(ирОбщий.ВыгрузитьСвойствоКоллекцииЛкс(ИнтерактивныеКолонки, "Представление")); + НесопоставленныеКолонки = Новый СписокЗначений; + ИменаКолонокДанных = Новый Структура(ИменаКолонокДанных); + Для Каждого КолонкаНовая Из ЗагружаемаяТаблица.Колонки Цикл + Если Истина + И Не ИменаКолонокДанных.Свойство(КолонкаНовая.Имя) + И КолонкаНовая.Имя <> "_КлючИсточника" + Тогда + НесопоставленныеКолонки.Добавить(КолонкаНовая.Имя); + КонецЕсли; + КонецЦикла; + Если НесопоставленныеКолонки.Количество() > 0 Тогда + НесопоставленныеКолонки.СортироватьПоЗначению(); + ирОбщий.СообщитьЛкс("В таблице-источнике обнаружены лишние колонки: " + ирОбщий.СтрСоединитьЛкс(НесопоставленныеКолонки), СтатусСообщения.Внимание); + КонецЕсли; + Если ПредлагатьОчистку И КоллекцияСтрокПоля.Количество() > 0 Тогда + Ответ = Вопрос("Очистить строки таблицы перед загрузкой новых строк?", РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Да Тогда + КоллекцияСтрокПоля.Очистить(); + КонецЕсли; + КонецЕсли; + ТипИсточника = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле); + СтарыеВключенныеЭлементыОтбора = Новый Массив; + ЕстьОтборСтрок = Ложь + Или ТипИсточника = "ТабличнаяЧасть" + Или ТипИсточника = "НаборЗаписей"; + Если ЕстьОтборСтрок И ирОбщий.ЛиОтборУстановленЛкс(ТабличноеПоле.ОтборСтрок) Тогда + Для Каждого ЭлементОтбора Из ТабличноеПоле.ОтборСтрок Цикл + Если ЭлементОтбора.Использование Тогда + ЭлементОтбора.Использование = Ложь; + СтарыеВключенныеЭлементыОтбора.Добавить(ЭлементОтбора.Имя); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + ЕстьОбработчикНачалаРедактирования = РазрешитьИнтерактивнуюУстановку И ЗначениеЗаполнено("" + ТабличноеПоле.ПолучитьДействие("ПриНачалеРедактирования")); + ЕстьОбработчикИзменения = Ложь; + Если РазрешитьИнтерактивнуюУстановку Тогда + Для Каждого ИнтерактивнаяКолонка Из ИнтерактивныеКолонки Цикл + Если ЗначениеЗаполнено("" + ИнтерактивнаяКолонка.Значение.ЭлементУправления.ПолучитьДействие("ПриИзменении")) Тогда + ЕстьОбработчикИзменения = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + ЕстьОбработчикНачалаРедактирования = РазрешитьИнтерактивнуюУстановку; + ЕстьОбработчикИзменения = РазрешитьИнтерактивнуюУстановку; + КонецЕсли; + КолонкиСПроверками = Новый Структура; + Для Каждого ИнтерактивнаяКолонка Из ИнтерактивныеКолонки Цикл + ИмяКолонки = ИнтерактивнаяКолонка.Представление; + КолонкаСПроверками = Новый Структура("Имя, СвязиПараметровВыбора, ПараметрыВыбора"); + КолонкаСПроверками.Имя = ИмяКолонки; + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + Если МетаданныеКолонок <> Неопределено И МетаданныеКолонок.Свойство(ИмяКолонки) Тогда + МетаданныеКолонки = МетаданныеКолонок[ИмяКолонки]; + Иначе + Продолжить; + КонецЕсли; + Иначе + МетаданныеКолонки = ИнтерактивнаяКолонка.Значение; + КонецЕсли; + ЗаполнитьЗначенияСвойств(КолонкаСПроверками, МетаданныеКолонки, "СвязиПараметровВыбора, ПараметрыВыбора"); + КолонкиСПроверками.Вставить(ИмяКолонки, КолонкаСПроверками); + КонецЦикла; + КолонкиСНарушениями = Новый Структура; + ПоляСУсловиями = Новый ТаблицаЗначений; + ПропускатьНесогласованныеЗначения = Неопределено; + Если Не ирОбщий.ПроверитьТаблицуЗначенийНаСогласованностьЛкс(ЗагружаемаяТаблица, КолонкиСПроверками, КолонкиСНарушениями, ТабличноеПоле, ПропускатьНесогласованныеЗначения, + ПоляСУсловиями, ЛиТЧ, РеквизитыВладельца) Тогда + Возврат Ложь; + КонецЕсли; + Форма.Активизировать(); + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ЗагружаемаяТаблица.Количество(), "Загрузка строк"); + ПоследняяОбработаннаяСтрока = Неопределено; + КоличествоПропущенных = 0; + Для Каждого СтрокаТаблицы Из ЗагружаемаяТаблица Цикл + ОбработкаПрерыванияПользователя(); + Если ЕстьОбработчикНачалаРедактирования Или ЕстьОбработчикИзменения Тогда + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + ТабличноеПоле.ДобавитьСтроку(); + НоваяСтрока = ТабличноеПоле.ТекущиеДанные; + Иначе + НоваяСтрока = КоллекцияСтрокПоля.Добавить(); + КонецЕсли; + Для Каждого ИнтерактивнаяКолонка Из ИнтерактивныеКолонки Цикл + ИмяКолонки = ИнтерактивнаяКолонка.Представление; + Если ЗагружаемаяТаблица.Колонки.Найти(ИмяКолонки) = Неопределено Тогда + Продолжить; + КонецЕсли; + //Если Истина + // И ПропускатьНесогласованныеЗначения + // И КолонкиСНарушениями.Свойство(ИмяКолонки) + //Тогда + // ПолеСУсловиями = ПоляСУсловиями.Найти(ИмяКолонки, "ИмяКолонки"); + // Если СтрокаТаблицы["Несогласовано_" + ИмяКолонки] Тогда + // Продолжить; + // КонецЕсли; + //КонецЕсли; + НовоеЗначение = СтрокаТаблицы[ИмяКолонки]; + Если ЕстьОбработчикИзменения Тогда + РезультатОтправки = ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, ИнтерактивнаяКолонка.Значение, НовоеЗначение, , Ложь,,,, ИмяКолонки); + Если Не РезультатОтправки Тогда + КоличествоПропущенных = КоличествоПропущенных + 1; + КонецЕсли; + Иначе + НоваяСтрока[ИмяКолонки] = НовоеЗначение; + КонецЕсли; + КонецЦикла; + Если ЕстьОбработчикИзменения Тогда + ирКлиент.ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, ИнтерактивныеКолонки[0].Значение); + КонецЕсли; + КонецЦикла; + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(Индикатор); + Если КоличествоПропущенных > 0 Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонЛкс("Пропущено %1 ячеек из-за несогласованности строки с новым значением", КоличествоПропущенных)); + КонецЕсли; + ТабличноеПоле.ЗакончитьРедактированиеСтроки(Ложь); + Для Каждого СтарыйЭлементОтбора Из СтарыеВключенныеЭлементыОтбора Цикл + ТабличноеПоле.ОтборСтрок[СтарыйЭлементОтбора].Использование = Истина; + КонецЦикла; + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + ТабличноеПоле.ОбновитьСтроки(); // Антибаг платформы. Без этого иногда некоторые строки были недорисованы + КонецЕсли; + БылиДобавленыСтроки = ЗагружаемаяТаблица.Количество() > 0; + Возврат БылиДобавленыСтроки; + +КонецФункции + +Функция ИнтерактивныеКолонкиТабличногоПоляЛкс(Знач ТабличноеПоле) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + СтараяТекущаяКолонка = ирКлиент.ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); + ИнтерактивныеКолонки = Новый СписокЗначений; + КолонкиТП = КолонкиТаблицыФормыИлиТабличногоПоляЛкс(ТабличноеПоле); + Для Каждого КолонкаТП Из КолонкиТП Цикл + ПутьКДаннымКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, КолонкаТП); + Если Истина + И ЗначениеЗаполнено(ПутьКДаннымКолонки) + И ЛиВКолонкеДоступнаЭмуляцияИнтерактивногоИзмененияЛкс(КолонкаТП) + И (Ложь + Или ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") + Или ирКлиент.ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, КолонкаТП) // Только так можно проверить видимость по функциональным опциям у таблицы формы + ) + Тогда + ИнтерактивныеКолонки.Добавить(КолонкаТП, ПутьКДаннымКолонки); + КонецЕсли; + КонецЦикла; + Если СтараяТекущаяКолонка <> Неопределено Тогда + ирКлиент.ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, СтараяТекущаяКолонка); + КонецЕсли; + Возврат ИнтерактивныеКолонки; + +КонецФункции + +// Получает копию данных таблицы формы +// +// Параметры: +// ИсточникДействий - - +// МассивСтрок - Массив - +// СУчетомОтбора - Булево - +// ПреобразоватьДеревоВТаблицу - Булево - +// КолонкаПолученияТекстаЯчеек - Структура - "Источник,Применик", источник - откуда брать текст, приемник - куда помещать +// ИменаКолонокРезультата - - +// +// Возвращаемое значение: +// Неопределено, ТаблицаЗначений, ДеревоЗначений +// +Функция ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(Знач ТабличноеПоле, Знач МассивСтрок = Неопределено, Знач СУчетомОтбора = Ложь, Знач ПреобразоватьДеревоВТаблицу = Истина, + Знач КолонкаПолученияТекстаЯчеек = Неопределено, Знач ИменаКолонокРезультата = "", ЭтаФорма = Неопределено, выхТекущаяСтрока = Неопределено) Экспорт + + ОчиститьТаблицу = Ложь; + Если Истина + И МассивСтрок <> Неопределено + И МассивСтрок.Количество() = 0 + И ТабличноеПоле.ТекущаяСтрока <> Неопределено + Тогда + МассивСтрок.Добавить(ТабличноеПоле.ТекущаяСтрока); + ОчиститьТаблицу = Истина; + КонецЕсли; + ПолноеИмяТаблицыБД = ""; + ДанныеТабличногоПоля = Неопределено; + ТипИсточника = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицыБД, ДанныеТабличногоПоля); + Если ТипИсточника = "Список" И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда + Возврат Неопределено; + КонецЕсли; + Если ТипЗнч(МассивСтрок) = Тип("ВыделенныеСтрокиТабличногоПоля") Тогда + МассивСтрок = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + Если Ложь + #Если Клиент Тогда + Или ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") + #КонецЕсли + Тогда + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ВыгрузкаРезультата = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле,, ЭтаФорма, СУчетомОтбора); + #Если Сервер И Не Сервер Тогда + ВыгрузкаРезультата = Новый ТаблицаЗначений; + #КонецЕсли + Если КолонкаПолученияТекстаЯчеек <> Неопределено Тогда + // Медленнее в разы + Результат = Новый ТаблицаЗначений; + Если ирОбщий.ЛиТабличнаяЧастьЛкс(ВыгрузкаРезультата) Тогда + ирОбщий.СкопироватьКолонкиКоллекцииЛкс(ВыгрузкаРезультата.ВыгрузитьКолонки(), Результат, Истина, ИменаКолонокРезультата); + Иначе + ирОбщий.СкопироватьКолонкиКоллекцииЛкс(ВыгрузкаРезультата , Результат, Истина, ИменаКолонокРезультата); + КонецЕсли; + Результат.Колонки.Добавить(КолонкаПолученияТекстаЯчеек.Приемник, Новый ОписаниеТипов("Строка")); + Если МассивСтрок = Неопределено Тогда + Если ТипЗнч(ВыгрузкаРезультата) = Тип("ДеревоЗначений") Тогда + МассивСтрок = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ВыгрузкаРезультата); + Иначе + МассивСтрок = ВыгрузкаРезультата; + КонецЕсли; + КонецЕсли; + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(МассивСтрок.Количество(), "Получение оформлений ячеек"); + Для Каждого ДанныеСтроки Из МассивСтрок Цикл + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + СтрокаРезультата = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаРезультата, ДанныеСтроки); + ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(ДанныеСтроки); + Если ОформлениеСтроки <> Неопределено Тогда + ТекстЯчейки = ОформлениеСтроки.Ячейки.Найти(КолонкаПолученияТекстаЯчеек.Источник).Текст; + Иначе + // Строка отброшена отбором. Поэтому для платформа не вычисляет для нее оформление + ТекстЯчейки = ДанныеСтроки[КолонкаПолученияТекстаЯчеек.Источник]; + КонецЕсли; + СтрокаРезультата[КолонкаПолученияТекстаЯчеек.Приемник] = ТекстЯчейки; + КонецЦикла; + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); + ВыгрузкаРезультата = Результат; + Иначе + Если ТипЗнч(ВыгрузкаРезультата) = Тип("ТаблицаЗначений") Тогда + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + Если МассивСтрок <> Неопределено Тогда + ИндексТекущейСтроки = МассивСтрок.Найти(ТабличноеПоле.ТекущаяСтрока); + Иначе + ИндексТекущейСтроки = ВыгрузкаРезультата.Индекс(ТабличноеПоле.ТекущаяСтрока); + Если ИндексТекущейСтроки = -1 Тогда + ИндексТекущейСтроки = Неопределено; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ВыгрузкаРезультата = ВыгрузкаРезультата.Скопировать(МассивСтрок, ИменаКолонокРезультата); + Если ИндексТекущейСтроки <> Неопределено Тогда + выхТекущаяСтрока = ВыгрузкаРезультата[ИндексТекущейСтроки]; + КонецЕсли; + ИначеЕсли ТипЗнч(ВыгрузкаРезультата) = Тип("ДеревоЗначений") Тогда + Если ПреобразоватьДеревоВТаблицу Тогда + ВыгрузкаРезультата = ирОбщий.ДеревоЗначенийВТаблицуЛкс(ВыгрузкаРезультата, МассивСтрок, ИменаКолонокРезультата); + КонецЕсли; + Иначе + Если Истина + И (Ложь + Или ТипИсточника = "НаборЗаписей" + Или ТипИсточника = "ТабличнаяЧасть") + И (Ложь + Или МассивСтрок <> Неопределено + Или Не СУчетомОтбора) + Тогда + ВыгрузкаРезультата = ВыгрузкаРезультата.Выгрузить(МассивСтрок, ИменаКолонокРезультата); + Иначе + Построитель = ПостроительТабличногоПоляСОтборомКлиентаЛкс(ТабличноеПоле); + #Если Сервер И Не Сервер Тогда + Построитель = Новый ПостроительЗапроса; + #КонецЕсли + Если Построитель.ВыбранныеПоля.Количество() > 0 Тогда + ВыгрузкаРезультата = Построитель.Результат.Выгрузить(); + Если Истина + И ТабличноеПоле.ТекущаяСтрока <> Неопределено + И Построитель.ДоступныеПоля.Найти("НомерСтроки") <> Неопределено + Тогда + выхТекущаяСтрока = ВыгрузкаРезультата.Найти(ТабличноеПоле.ТекущаяСтрока.НомерСтроки, "НомерСтроки"); + КонецЕсли; + ИначеЕсли ирОбщий.ЛиКоллекцияКомпоновкиЛкс(ВыгрузкаРезультата) Тогда + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + выхТекущаяСтрока = ВыгрузкаРезультата.Элементы.Индекс(ТабличноеПоле.ТекущаяСтрока); + КонецЕсли; + ВыгрузкаРезультата = ирОбщий.ТаблицаЗначенийИзКоллекцииЛкс(ВыгрузкаРезультата.Элементы); + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + Если выхТекущаяСтрока = -1 Тогда + // Например некорневая строка доступного поля компоновки + выхТекущаяСтрока = Неопределено; + Иначе + выхТекущаяСтрока = ВыгрузкаРезультата[выхТекущаяСтрока]; + КонецЕсли; + КонецЕсли; + Иначе + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + выхТекущаяСтрока = ВыгрузкаРезультата.Индекс(ТабличноеПоле.ТекущаяСтрока); + КонецЕсли; + ВыгрузкаРезультата = ирОбщий.ТаблицаЗначенийИзКоллекцииЛкс(ВыгрузкаРезультата); + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + Если выхТекущаяСтрока = -1 Тогда + // Например некорневая строка доступного поля компоновки + выхТекущаяСтрока = Неопределено; + Иначе + выхТекущаяСтрока = ВыгрузкаРезультата[выхТекущаяСтрока]; + КонецЕсли; + КонецЕсли; + //ВызватьИсключение ирОбщий.СтрШаблонЛкс("Неподдерживаемый тип данных табличного поля (%1)", ТипЗнч(ДанныеТабличногоПоля)); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Счетчик = 0; + Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл + ПутьКДанным = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, КолонкаТП); + Если ЗначениеЗаполнено(ПутьКДанным) Тогда + КолонкаТЗ = ВыгрузкаРезультата.Колонки.Найти(ПутьКДанным); + Если КолонкаТЗ <> Неопределено Тогда + ВыгрузкаРезультата.Колонки.Сдвинуть(КолонкаТЗ, Счетчик - ВыгрузкаРезультата.Колонки.Индекс(КолонкаТЗ)); + Счетчик = Счетчик + 1; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Иначе // ТипЗнч(ИсточникДействий) = Тип("ТаблицаФормы") + ТаблицаФормы = ТабличноеПоле; + ДанныеЭлемента = ирОбщий.ДанныеЭлементаФормыЛкс(ТаблицаФормы); + ОтборСтрок = Неопределено; + Если ТипЗнч(ДанныеЭлемента) = Тип("ДинамическийСписок") Тогда + ДанныеЭлемента = Неопределено; + Иначе + Если ТипЗнч(ДанныеЭлемента) = Тип("ДанныеФормыКоллекция") Тогда + ОтборСтрок = ТабличноеПоле.ОтборСтрок; + #Если Сервер И Не Сервер Тогда + ОтборСтрок = Новый ФиксированнаяСтруктура; + #КонецЕсли + КонецЕсли; + КонецЕсли; + Если МассивСтрок = Неопределено И ТипЗнч(ДанныеЭлемента) = Тип("ДанныеФормыДерево") Тогда + Результат = ДанныеФормыВЗначение(ДанныеЭлемента, Тип("ДеревоЗначений")); // Для табличных частей не работает + Иначе + Если ДанныеЭлемента = Неопределено Тогда + Если МассивСтрок = Неопределено Тогда + МассивСтрок = ВыделенныеСтрокиТабличногоПоляЛкс(ТаблицаФормы); + ирОбщий.СообщитьЛкс("Эта таблица позволяет выводить только выделенные строки",,, Истина, Ложь); + КонецЕсли; + Иначе + //ТипЗначенияТаблицы = ирОбщий.ТипЗначенияЭлементаФормыЛкс(ТаблицаФормы, Ложь); + //Если ТипЗначенияТаблицы <> Неопределено Тогда + // ТипЗначенияТаблицы = ТипЗначенияТаблицы.Типы()[0]; + // ИмяОбщегоТипа = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТаблицаФормы, Истина); + // ОбъектМДТаблицы = Метаданные.НайтиПоТипу(ТипЗначенияТаблицы); + // Если ОбъектМДТаблицы <> Неопределено Тогда + // ВыгрузкаРезультата = Новый ТаблицаЗначений; + // Если ИмяОбщегоТипа = "ТабличнаяЧасть" Тогда + // // Через поля таблицы БД нельзя, т.к. у ТЧ может не быть проекции в БД + // Для Каждого МетаРеквизит Из ОбъектМДТаблицы.Реквизиты Цикл + // Результат.Колонки.Добавить(МетаРеквизит.Имя, МетаРеквизит.Тип, МетаРеквизит.Представление()); + // КонецЦикла; + // Иначе + // ПоляТаблицыБД = ирОбщий.ПоляТаблицыМДЛкс(ОбъектМДТаблицы); + // Для Каждого ПолеБД Из ПоляТаблицыБД Цикл + // Результат.Колонки.Добавить(ПолеБД.Имя, ПолеБД.ТипЗначения, ПолеБД.Заголовок); + // КонецЦикла; + // КонецЕсли; + // КонецЕсли; + //КонецЕсли; + Если МассивСтрок = Неопределено Тогда + Попытка + МассивСтрок = ДанныеЭлемента.Элементы; // Настройка компоновки + Исключение + МассивСтрок = ДанныеЭлемента; + КонецПопытки; + КонецЕсли; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + МассивСтрок = Новый Массив; + #КонецЕсли + Результат = Новый ТаблицаЗначений; + Если МассивСтрок.Количество() > 0 Тогда + КолонкиДобавлены = Ложь; + Колонка_КлючИсточникаДобавлена = Ложь; + КолонкаСРеквизитом = ""; + СтараяТекущаяСтрока = ТаблицаФормы.ТекущаяСтрока; + Для Каждого СтрокаТаблицы Из МассивСтрок Цикл + Попытка + ДанныеСтроки = ТаблицаФормы.ДанныеСтроки(СтрокаТаблицы); + ИДСтроки = СтрокаТаблицы; + Исключение + ДанныеСтроки = Неопределено; + КонецПопытки; + Если ДанныеСтроки = Неопределено Тогда + ДанныеСтроки = СтрокаТаблицы; + Попытка + ИДСтроки = СтрокаТаблицы.ПолучитьИдентификатор(); + Исключение + КонецПопытки; + КонецЕсли; + Если Не КолонкиДобавлены Тогда + Если Истина + И Не ОчиститьТаблицу + И ТипЗнч(ИДСтроки) = Тип("Число") + И Результат.Колонки.Найти("_КлючИсточника") = Неопределено + Тогда + Результат.Колонки.Добавить("_КлючИсточника"); + Колонка_КлючИсточникаДобавлена = Истина; + КонецЕсли; + ДобавитьКолонкиГруппыФормыВТаблицуЗначенийЛкс(ТаблицаФормы.ПодчиненныеЭлементы, Результат, ДанныеСтроки, ИменаКолонокРезультата); + Если Не ЗначениеЗаполнено(ИменаКолонокРезультата) Тогда + ТекущееПоле = ТаблицаФормы.ТекущийЭлемент; + Если ТекущееПоле <> Неопределено Тогда + ПутьКДаннымПоля = ирОбщий.НайтиПутьКДаннымПоляТаблицыФормыЛкс(ДанныеСтроки, ТекущееПоле.Имя); + Если ЗначениеЗаполнено(ПутьКДаннымПоля) Тогда + ИмяРеквизитаКоллекции = ПутьКДаннымПоля; + Если Найти(ПутьКДаннымПоля, ".") > 0 Тогда + КолонкаСРеквизитом = ПутьКДаннымПоля; + ИмяРеквизитаКоллекции = СтрЗаменить(КолонкаСРеквизитом, ".", "_"); + КонецЕсли; + Если Результат.Колонки.Найти(ИмяРеквизитаКоллекции) = Неопределено Тогда + Результат.Колонки.Добавить(ИмяРеквизитаКоллекции); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КолонкиДобавлены = Истина; + КонецЕсли; + Если ОтборСтрок <> Неопределено Тогда + ОтборПройден = Истина; + Для Каждого КлючИЗначение Из ОтборСтрок Цикл + Если ДанныеСтроки[КлючИЗначение.Ключ] <> КлючИЗначение.Значение Тогда + ОтборПройден = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + Если Не ОтборПройден Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + Если СУчетомОтбора Тогда + //Если МассивСтрок.Количество() < 500 Тогда // Не будем тратить более 5сек на дорогую проверку пользовательского фильтра + // // долго - 10мс https://www.hostedredmine.com/issues/947570 + // Если Не ирОбщий.ПрисвоитьЕслиНеРавноЛкс(ТаблицаФормы.ТекущаяСтрока, ИДСтроки) Тогда + // Продолжить; + // КонецЕсли; + //КонецЕсли; + Если Не ТаблицаФормы.ПроверитьСтроку(ИДСтроки) Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + НоваяСтрока = Результат.Добавить(); + Если ТипЗнч(ИДСтроки) = Тип("Число") И Колонка_КлючИсточникаДобавлена Тогда + НоваяСтрока._КлючИсточника = ИДСтроки; + КонецЕсли; + ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеСтроки); + КонецЦикла; + ТабличноеПоле.ТекущаяСтрока = СтараяТекущаяСтрока; + Если ЗначениеЗаполнено(КолонкаСРеквизитом) Тогда + ЗначенияКолонкиСРеквизитом = ПрочитатьРеквизитПоМассивуСсылокЛкс(Результат.ВыгрузитьКолонку(ирОбщий.ПервыйФрагментЛкс(КолонкаСРеквизитом)), ирОбщий.ПоследнийФрагментЛкс(КолонкаСРеквизитом)); + Результат.ЗагрузитьКолонку(ЗначенияКолонкиСРеквизитом, СтрЗаменить(КолонкаСРеквизитом, ".", "_")); + КонецЕсли; + Результат = ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(Результат); + ИначеЕсли ДанныеЭлемента <> Неопределено Тогда + ДобавитьКолонкиГруппыФормыВТаблицуЗначенийЛкс(ТаблицаФормы.ПодчиненныеЭлементы, Результат, ДанныеЭлемента, ИменаКолонокРезультата); + КонецЕсли; + //Если ВыделенныеСтрокиВосстановить <> Неопределено Тогда + // ТаблицаФормы.ВыделенныеСтроки.Очистить(); + // Для Каждого ВыделеннаяСтрока Из ВыделенныеСтрокиВосстановить Цикл + // ТаблицаФормы.ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); + // КонецЦикла; + //КонецЕсли; + КонецЕсли; + ВыгрузкаРезультата = Результат; + Если ПреобразоватьДеревоВТаблицу И ТипЗнч(ВыгрузкаРезультата) = Тип("ДеревоЗначений") Тогда + ВыгрузкаРезультата = ирОбщий.ДеревоЗначенийВТаблицуЛкс(ВыгрузкаРезультата); + КонецЕсли; + КонецЕсли; + Если ОчиститьТаблицу И ТипЗнч(ВыгрузкаРезультата) = Тип("ТаблицаЗначений") Тогда + ВыгрузкаРезультата.Очистить(); + КонецЕсли; + Возврат ВыгрузкаРезультата; + +КонецФункции + +Процедура ПоследниеВыбранныеНажатиеЛкс(Знач ЭтаФорма, Знач ТабличноеПолеИлиКлюч, Знач КлючевоеПоле = "Ссылка", Знач Кнопка, Знач ТипКлюча = "Выбранные", ДопКлючХранения = "") Экспорт + + КлючСтроки = ВыбранныйЭлементПоследнихЗначенийЛкс(ЭтаФорма, ТабличноеПолеИлиКлюч, Кнопка, ТипКлюча,, ДопКлючХранения); + СтрокаНайдена = УстановитьТекущуюСтрокуСКонтролемУспешностиЛкс(ЭтаФорма, ТабличноеПолеИлиКлюч, КлючевоеПоле, КлючСтроки,, Истина); + Если СтрокаНайдена И ЭтаФорма.РежимВыбора Тогда + Ответ = Вопрос("Выбрать установленную строку?", РежимДиалогаВопрос.ОКОтмена); + Если Ответ = КодВозвратаДиалога.ОК Тогда + //ЭтаФорма.ОповеститьОВыборе(КлючСтроки); + //Если Этаформа.ВводДоступен() Тогда + ОтправитьНажатияКлавишЛкс("{ENTER}"); + //КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// ЭтаФорма - Форма +// ТабличноеПоле - ТабличноеПоле +// КлючевоеПоле - Строка +// ЗначениеКлюча - +// СообщатьОбУспехе - Булево +// +Функция УстановитьТекущуюСтрокуСКонтролемУспешностиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач КлючевоеПоле = "Ссылка", Знач ЗначениеКлюча = Неопределено, Знач СообщатьОбУспехе = Ложь, + АктивизироватьТабличноеПолеПриУспехе = Ложь, ВыводитьСообщения = Истина) Экспорт + + ПолноеИмяТаблицыБД = ""; + ДанныеТабличногоПоля = Неопределено; + ТипИсточника = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицыБД, ДанныеТабличногоПоля); + Если Ложь + Или ТипИсточника = "ТаблицаЗначений" + Или ТипИсточника = "ТабличнаяЧасть" + Или ТипИсточника = "НаборЗаписей" + Тогда + ДанныеТабличногоПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + #Если Сервер И Не Сервер Тогда + ДанныеТабличногоПоля = Новый ТаблицаЗначений; + #КонецЕсли + Если КлючевоеПоле <> Неопределено Тогда + НайденныеСтроки = ДанныеТабличногоПоля.НайтиСтроки(Новый Структура(КлючевоеПоле, ЗначениеКлюча)); + Иначе + НайденныеСтроки = ДанныеТабличногоПоля; + КонецЕсли; + Если НайденныеСтроки.Количество() > 0 Тогда + НайденнаяСтрока = НайденныеСтроки[0]; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + НайденнаяСтрока = НайденнаяСтрока.ПолучитьИдентификатор(); + КонецЕсли; + КонецЕсли; + ЭтоКлиентскийИсточникДанных = Истина; + ИначеЕсли ТипИсточника = "ДеревоЗначений" Тогда + НайденнаяСтрока = ТабличноеПоле.Значение.Строки.Найти(ЗначениеКлюча, КлючевоеПоле, Истина); + ЭтоКлиентскийИсточникДанных = Истина; + Иначе + НайденнаяСтрока = ЗначениеКлюча; + Если ДанныеТабличногоПоля <> Неопределено Тогда + Отбор = ДанныеТабличногоПоля.Отбор; + ЭтоКлиентскийИсточникДанных = Ложь; + ПостроительЗапроса = Новый ПостроительЗапроса; + ПостроительЗапроса.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ " + ПолноеИмяТаблицыБД; + ПостроительЗапроса.ЗаполнитьНастройки(); + СтруктураКлюча = ирОбщий.СтруктураКлючаТаблицыБДЛкс(ПолноеИмяТаблицыБД,,, Ложь); + ЗаполнитьЗначенияСвойств(СтруктураКлюча, ЗначениеКлюча); + ирОбщий.УстановитьОтборПоСтруктуреЛкс(ПостроительЗапроса.Отбор, СтруктураКлюча); + СтрокаЕстьВИсточникеДанных = Не ПостроительЗапроса.Результат.Пустой(); + Иначе + СтрокаЕстьВИсточникеДанных = Истина; // Немного криво + КонецЕсли; + КонецЕсли; + Если ЭтоКлиентскийИсточникДанных Тогда + СтрокаЕстьВИсточникеДанных = НайденнаяСтрока <> Неопределено; + КонецЕсли; + Если СтрокаЕстьВИсточникеДанных Тогда + ТабличноеПоле.ТекущаяСтрока = НайденнаяСтрока; + ИначеЕсли ВыводитьСообщения Тогда + ирОбщий.СообщитьЛкс("Строка не найдена в источнике данных"); + КонецЕсли; + Если ТабличноеПоле.ТекущаяСтрока = НайденнаяСтрока Тогда + Если АктивизироватьТабличноеПолеПриУспехе Тогда + ЭтаФорма.ТекущийЭлемент = ТабличноеПоле; + КонецЕсли; + Результат = Истина; + Иначе + Если ВыводитьСообщения И СтрокаЕстьВИсточникеДанных Тогда + ТекстСообщения = "Строка найдена в источнике данных, но не найдена в табличном поле"; + Если Отбор <> Неопределено Тогда + ТекстСообщения = ТекстСообщения + " с учетом отбора " + Отбор; + КонецЕсли; + ирОбщий.СообщитьЛкс(ТекстСообщения, СтатусСообщения.Внимание); + КонецЕсли; + Результат = Ложь; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ВыбранныйЭлементПоследнихЗначенийЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач Кнопка, Знач ТипКлюча = "Выбранные", Знач Десериализовать = Ложь, ДопКлючХранения = "") Экспорт + + КлючЗначения = ирОбщий.КлючСохраненияСпискаПоследнихЗначенийФормыЛкс(ЭтаФорма, ТабличноеПоле, ТипКлюча, ДопКлючХранения); + ПоследниеВыбранные = ирОбщий.ВосстановитьЗначениеЛкс(КлючЗначения); + Если ТипЗнч(ПоследниеВыбранные) <> Тип("СписокЗначений") Тогда + Возврат Неопределено; + КонецЕсли; + ИндексЭлементаСписка = Число(Сред(Кнопка.Имя, СтрДлина(ирОбщий.НачалоИмениКнопкиПодменюПоследнихВыбранных(ТипКлюча)) + 1)); + Если ПоследниеВыбранные.Количество() <= ИндексЭлементаСписка Тогда + Возврат Неопределено; + КонецЕсли; + Результат = ПоследниеВыбранные[ИндексЭлементаСписка].Значение; + Если Десериализовать Тогда + Результат = ирОбщий.ОбъектИзСтрокиXMLЛкс(Результат); + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Функция - Последние выбранные добавить лкс +// +// Параметры: +// ЭтаФорма - - +// ВыбранноеЗначение - - +// ПредставлениеЗначения - - +// ТабличноеПолеИлиКлюч - - +// ТипКлюча - - +// Сериализовать - - +// +// Возвращаемое значение: +// - Булево - Истина если значение было добавлено в список +// +Функция ПоследниеВыбранныеДобавитьЛкс(ЭтаФорма, Знач ВыбранноеЗначение, Знач ПредставлениеЗначения = "", Знач ТабличноеПолеИлиКлюч = Неопределено, Знач ТипКлюча = "Выбранные", + Знач Сериализовать = Ложь, ДопКлючХранения = "") Экспорт + + ЗапоминатьПоследниеВыбранные = ирОбщий.КоличествоЗапоминаемыхПоследнихВыбранныхЛкс(); + Если Истина + И ЗапоминатьПоследниеВыбранные <> Неопределено + И ЗапоминатьПоследниеВыбранные > 0 + Тогда + КлючЗначения = ирОбщий.КлючСохраненияСпискаПоследнихЗначенийФормыЛкс(ЭтаФорма, ТабличноеПолеИлиКлюч, ТипКлюча, ДопКлючХранения); + ПоследниеВыбранные = ирОбщий.ВосстановитьЗначениеЛкс(КлючЗначения); + Если ТипЗнч(ПоследниеВыбранные) <> Тип("СписокЗначений") Тогда + ПоследниеВыбранные = Новый СписокЗначений; + КонецЕсли; + Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда + Если ВыбранноеЗначение.Количество() = 0 Тогда + Возврат Ложь; + КонецЕсли; + ВыбранноеЗначение = ВыбранноеЗначение[0]; + КонецЕсли; + Если Не ЗначениеЗаполнено(ПредставлениеЗначения) Тогда + ПредставлениеЗначения = ирОбщий.ПредставлениеКлючаСтрокиБДЛкс(ВыбранноеЗначение); + КонецЕсли; + Если Сериализовать Тогда + ВыбранноеЗначение = ирОбщий.ОбъектВСтрокуXMLЛкс(ВыбранноеЗначение); + КонецЕсли; + Индекс = ПоследниеВыбранные.НайтиПоЗначению(ВыбранноеЗначение); + Если Индекс = 0 Тогда + Возврат Ложь; + ИначеЕсли Индекс <> Неопределено Тогда + ПоследниеВыбранные.Удалить(Индекс); + Иначе + Пустышка = 0; + КонецЕсли; + КлючСтроки = ВыбранноеЗначение; + ПоследниеВыбранные.Вставить(0, КлючСтроки, ПредставлениеЗначения); + ирОбщий.СохранитьЗначениеЛкс(КлючЗначения, ПоследниеВыбранные); + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +Процедура НайденныеСтандартноСсылкиПриВыводеСтрокиЛкс(Знач ОформлениеСтроки, Знач ПолучатьПредставленияСсылок = Ложь, Знач ПолноеИмяМД = "") Экспорт + + ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; + #Если Сервер И Не Сервер Тогда + ДанныеСтроки = Обработки.ирИсторияДанных.Создать().Версии.Добавить(); + ДанныеСтроки = Обработки.ирРедакторОбъектаБД.Создать().СсылкиНаОбъект.Добавить(); + #КонецЕсли + Ячейки = ОформлениеСтроки.Ячейки; + Если Не ЗначениеЗаполнено(ПолноеИмяМД) Тогда + ПолноеИмяМД = ДанныеСтроки.Метаданные; + КонецЕсли; + КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяМД); + КлючОбъекта = КлючОбъектаСтрокиВерсииДанныхЛкс(ДанныеСтроки, ПолноеИмяМД); + Ячейки.Данные.Текст = ирОбщий.ПредставлениеКлючаСтрокиБДЛкс(КлючОбъекта, ПолучатьПредставленияСсылок); + +КонецПроцедуры + +Функция НадоСериализоватьКлючДанныхДляОтображенияЛкс(ТипМетаданных) Экспорт + + НадоСериализоватьКлюч = ирОбщий.ЛиКорневойТипРегистраСведенийЛкс(ТипМетаданных); + Возврат НадоСериализоватьКлюч; + +КонецФункции + +Процедура ОформитьФонТекущейСтрокиЛкс(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт + + Если Элемент.ТекущаяСтрока = ДанныеСтроки Тогда + ОформлениеСтроки.ЦветФона = WebЦвета.СветлоНебесноГолубой; + КонецЕсли; + +КонецПроцедуры + +Функция ПроверитьЗапуститьОтладчик(Знач ВремяОжиданияЗапуска = 5) Экспорт + + Платформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + Платформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ИдентификаторыОтладчиков = Неопределено; + АдресОтладчика = Платформа.ПортДляПодключенияОтладчика(ИдентификаторыОтладчиков); + #Если Сервер И Не Сервер Тогда + ИдентификаторыОтладчиков = Новый Массив; + #КонецЕсли + Если ИдентификаторыОтладчиков.Количество() = 0 Тогда + //СеансКонфигуратора = ирОбщий.СеансКонфигуратора(); // может быть долго + //Если СеансКонфигуратора <> Неопределено Тогда + // ирОбщий.СообщитьЛкс("Конфигуратор уже открыт, но отладка не подключена. Выполните подключение отладчика вручную"); + // Возврат Неопределено; + //КонецЕсли; + // Антибаг 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1003164#1003164 + Если ирКэш.НомерВерсииПлатформыЛкс() = 802015 Тогда + ирОбщий.СообщитьЛкс("Из-за ошибки платформы 8.2.15 запуск и подключение отладчика необходимо выполнять вручную"); + Возврат Неопределено; + КонецЕсли; + Если АдресОтладчика = Неопределено Тогда + ирОбщий.СообщитьЛкс("Если используется TCP отладка, включите разрешение отладки в главном меню ""Сервис/Параметры/Системные"" и повторите операцию снова"); + Возврат Неопределено; + КонецЕсли; + //Если Найти(НРег(АдресОтладчика), "http") > 0 Тогда + // ирОбщий.СообщитьЛкс("Используется http отладка."); + //КонецЕсли; + ПараметрыЗапуска = "CONFIG /DEBUG /DEBUGTARGET""" + АдресОтладчика + """"; + ЗапуститьСистему(ПараметрыЗапуска); + ирОбщий.ПаузаЛкс(ВремяОжиданияЗапуска); + Пока Истина Цикл + Платформа.ПортДляПодключенияОтладчика(ИдентификаторыОтладчиков); + Если ИдентификаторыОтладчиков.Количество() = 0 Тогда + Ответ = Вопрос("Отладчик еще не подключился. Повторить снова?", РежимДиалогаВопрос.ОКОтмена); + Если Ответ = КодВозвратаДиалога.ОК Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + Прервать; + КонецЦикла; + Если ИдентификаторыОтладчиков.Количество() > 0 Тогда + ВыбранныйИдентификатор = Число(ИдентификаторыОтладчиков[0]); + КонецЕсли; + Иначе + Если ИдентификаторыОтладчиков.Количество() = 1 Тогда + ВыбранныйИдентификатор = ИдентификаторыОтладчиков[0]; + Иначе + ВыбранныйИдентификатор = Платформа.ВыбратьПроцессКонфигуратора(ИдентификаторыОтладчиков); + КонецЕсли; + Если ВыбранныйИдентификатор <> Неопределено Тогда + Платформа.АктивизироватьОкноПроцесса1С8(Число(ВыбранныйИдентификатор)); + КонецЕсли; + КонецЕсли; + Возврат ВыбранныйИдентификатор; + +КонецФункции + +Процедура ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ТабличноеПоле, ИмяКолонки = "") Экспорт + + Если ТабличноеПоле.ТекущаяСтрока = Неопределено Тогда + Возврат; + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда + ТекущаяКолонка = ирКлиент.ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); + Если ТекущаяКолонка = Неопределено Тогда + Возврат; + КонецЕсли; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + ИмяКолонки = ирОбщий.ПутьКДаннымЭлементаУправляемойФормыЛкс(ТекущаяКолонка, Истина); + Иначе + ИмяКолонки = ТекущаяКолонка.Данные; + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда + Возврат; + КонецЕсли; + ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + ЗначениеЯчейки = ДанныеСтроки[ИмяКолонки]; + XMLТип = XMLТипЗнч(ЗначениеЯчейки); + Если XMLТип = Неопределено Тогда + Возврат; + КонецЕсли; + Если Найти(XMLТип.ИмяТипа, "Ref.") = 0 Тогда + Возврат; + КонецЕсли; + //Если Ложь + // Или Найти(XMLТип.ИмяТипа, "EnumRef.") > 0 + // Или Найти(XMLТип.ИмяТипа, "BusinessProcessRoutePointRef.") > 0 + //Тогда + // ОткрытьФормуСпискаЛкс(ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(ЗначениеЯчейки)),, Истина,,,, ЗначениеЯчейки); + //Иначе + ОткрытьСсылкуВРедактореОбъектаБДЛкс(ЗначениеЯчейки); + //КонецЕсли; + +КонецПроцедуры + +// Параметры +// КлючИлиОбъект - СтруктураОбъектаБД, Ссылка, ОбъектБД +Функция ОткрытьСсылкуВРедактореОбъектаБДЛкс(КлючОбъекта, ИскомоеЗначение = Неопределено, ИмяТабличнойЧасти = "", ИмяПоля = "", КлючСтроки = Неопределено, НайденныеСсылки = Неопределено) Экспорт + + ФормаРедактора = ПолучитьФормуСсылки(КлючОбъекта, ИскомоеЗначение); + ФормаРедактора.Открыть(); + Если НайденныеСсылки <> Неопределено Тогда + ФормаРедактора.НайтиИПоказатьСсылкиВФорме(НайденныеСсылки); + КонецЕсли; + Если ЗначениеЗаполнено(ИмяПоля) Тогда + Если ЗначениеЗаполнено(ИмяТабличнойЧасти) Тогда + ИмяДочернейТаблицыБД = КлючОбъекта.Метаданные().ПолноеИмя(); + ИмяДочернейТаблицыБД = ИмяДочернейТаблицыБД + "." + ИмяТабличнойЧасти; + КонецЕсли; + ФормаРедактора.ПоказатьЯчейкуДанныхОбъекта(ИмяДочернейТаблицыБД, ИмяПоля, КлючСтроки); + КонецЕсли; + Возврат ФормаРедактора; + +КонецФункции + +Функция ОткрытьОбъектВРедактореОбъектаБДЛкс(ОбъектБД, ИскомоеЗначение = Неопределено, КлючУникальности = Неопределено, Знач Модально = Ложь) Экспорт + + Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ОбъектБД) Тогда + ВызватьИсключение "Вместо ссылки ожидался объект"; + КонецЕсли; + Если КлючУникальности = Неопределено Тогда + КлючУникальности = Новый УникальныйИдентификатор; + КонецЕсли; + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрКлючИлиОбъект", ОбъектБД); + ПараметрыФормы.Вставить("ПараметрПрочитатьОбъект", Ложь); + ПараметрыФормы.Вставить("ПараметрИскомоеЗначение", ИскомоеЗначение); + Форма = ПолучитьФормуЛкс("Обработка.ирРедакторОбъектаБД.Форма", ПараметрыФормы,, КлючУникальности); + #Если Сервер И Не Сервер Тогда + Форма = Обработки.ирРедакторОбъектаБД.Создать(); + #КонецЕсли + ЗаполнитьЗначенияСвойств(Форма.фОбъект, ПараметрыФормы, "ПараметрКлючИлиОбъект, ПараметрПрочитатьОбъект, ПараметрИскомоеЗначение"); + Если Модально Тогда + Форма.ОткрытьМодально(); + Иначе + Форма.Открыть(); + КонецЕсли; + Возврат Форма; + +КонецФункции + +// Параметры +// КлючИлиОбъект - СтруктураОбъектаБД, Ссылка, ОбъектБД +Функция ПолучитьФормуСсылки(КлючОбъекта, ИскомоеЗначение = Неопределено) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрКлючИлиОбъект", КлючОбъекта); + ПараметрыФормы.Вставить("ПараметрПрочитатьОбъект", Истина); + ПараметрыФормы.Вставить("ПараметрИскомоеЗначение", ИскомоеЗначение); + Форма = ПолучитьФормуЛкс("Обработка.ирРедакторОбъектаБД.Форма", ПараметрыФормы,, КлючОбъекта); + #Если Сервер И Не Сервер Тогда + Форма = Обработки.ирРедакторОбъектаБД.Создать(); + #КонецЕсли + ЗаполнитьЗначенияСвойств(Форма, ПараметрыФормы); + Возврат Форма; + +КонецФункции + +Процедура НайтиИПоказатьСсылкиНаОбъектБД(СсылкаНаКоторуюИщемСсылки) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПараметрКлючИлиОбъект", СсылкаНаКоторуюИщемСсылки); + Форма = ПолучитьФормуЛкс("Обработка.ирРедакторОбъектаБД.Форма", ПараметрыФормы); + #Если Сервер И Не Сервер Тогда + Форма = Обработки.ирРедакторОбъектаБД.Создать(); + #КонецЕсли + ЗаполнитьЗначенияСвойств(Форма, ПараметрыФормы); + Форма.Открыть(); + Форма.НайтиИПоказатьСсылкиВФорме(); + +КонецПроцедуры // НайтиСсылки() + +Функция НоваяФормаТекстаЛкс(ВладелецФормы = Неопределено, КлючУникальности = Неопределено) Экспорт + + ФормаТекста = ирКэш.Получить().ПолучитьФорму("Текст", ВладелецФормы, КлючУникальности); + Возврат ФормаТекста; + +КонецФункции + +// . +// Параметры: +// ВариантПросмотра - Строка - если пусто, то автоматически, иначе "Обычный", "Компактный", "ЯзыкЗапросов", "ВстроенныйЯзык", "XML", "JSON", "Дерево", "РезультатыПоиска"... +Функция ПолучитьФормуТекстаЛкс(Текст, Знач Заголовок = "", ВариантПросмотра = "Компактный", ТолькоПросмотр = Ложь, Знач КлючУникальности = Неопределено, ВладелецФормы = Неопределено, ВыделитьВсе = Ложь) Экспорт + + Если КлючУникальности = Неопределено Тогда + КлючУникальности = Новый УникальныйИдентификатор(); + КонецЕсли; + //ФормаТекста = ирКэш.ФормаТекстаЛкс(); // Толку от кэширования нет, т.к. HTML редактор все равно заново загружается платформой + //Если ФормаТекста.Открыта() Тогда + ФормаТекста = НоваяФормаТекстаЛкс(ВладелецФормы, КлючУникальности); + //Иначе + // ФормаТекста.КлючУникальности = КлючУникальности; + // ФормаТекста.ВладелецФормы = ВладелецФормы; + //КонецЕсли; + ФормаТекста.НачальноеЗначениеВыбора = Текст; + ФормаТекста.ВариантПросмотра = ВариантПросмотра; + ФормаТекста.ТолькоПросмотр = ТолькоПросмотр; + ФормаТекста.ПараметрВыделитьВсе = ВыделитьВсе; + Если Не ЗначениеЗаполнено(Заголовок) Тогда + //Заголовок = ФормаПросмотра.Заголовок; + Заголовок = "Текст"; // Чтобы при повторном открытии не оставался старый текст + КонецЕсли; + ФормаТекста.Заголовок = Заголовок; + Возврат ФормаТекста; + +КонецФункции + +// . +// Параметры: +// ВариантПросмотра - Строка - если пусто, то автоматически, иначе "Обычный", "Компактный", "ЯзыкЗапросов", "ВстроенныйЯзык", "XML", "JSON", "Дерево", "РезультатыПоиска"... +Функция ОткрытьТекстЛкс(Текст, Знач Заголовок = "", ВариантПросмотра = "Компактный", ТолькоПросмотр = Ложь, Знач КлючУникальности = Неопределено, ВладелецФормы = Неопределено, ВыделитьВсе = Ложь) Экспорт + + ФормаТекста = ПолучитьФормуТекстаЛкс(Текст, Заголовок, ВариантПросмотра, ТолькоПросмотр, КлючУникальности, ВладелецФормы, ВыделитьВсе); + ФормаТекста.Открыть(); + Возврат ФормаТекста; + +КонецФункции + +Функция ОткрытьПросмотрДереваJSONЛкс(Знач Текст, Знач Заголовок = "", Знач КлючУникальности = Неопределено, ВладелецФормы = Неопределено, Знач РежимВыбораМассива = Ложь) Экспорт + + Если Не ЗначениеЗаполнено(Текст) Тогда + Возврат Неопределено; + КонецЕсли; + ФормаПросмотра = ПолучитьФормуТекстаЛкс(Текст, Заголовок, "Дерево",, КлючУникальности, ВладелецФормы); + ФормаПросмотра.ПараметрРежимВыбораМассива = РежимВыбораМассива; + Если ЗначениеЗаполнено(Заголовок) Тогда + Результат = ФормаПросмотра.ОткрытьМодально(); + Иначе + ФормаПросмотра.Открыть(); + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ФормаПросмотраHTMLЛкс(Текст) Экспорт + + Форма = ирКэш.Получить().ПолучитьФорму("HTML"); + Форма.ЭлементыФормы.ПолеHtmlДокумента.УстановитьТекст(Текст); + Возврат Форма; + +КонецФункции + +Процедура ПолеВводаТекста_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка) Экспорт + + Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда + СтандартнаяОбработка = Ложь; + ФормаРедактора = ирКэш.Получить().ПолучитьФорму("Текст", Элемент, Новый УникальныйИдентификатор); + ФормаРедактора.РежимВыбора = Истина; + ФормаРедактора.НачальноеЗначениеВыбора = Элемент.Значение; + ФормаРедактора.Открыть(); + КонецЕсли; + +КонецПроцедуры + +// Функция - проверяет тип поля формы (обычной или управялемой) +// +// Параметры: +// ЭлементФормы - ЭлементФормы - Элемент обычной или управляемой формы +// ТипПоля - Тип - тип поля обычной формы +// +// Возвращаемое значение: +// Булево - Истина, если поле соответсвует типу +// +Функция ЛиПолеФормыИмеетТипЛкс(Знач ЭлементФормы, ТипПоля) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Результат = Ложь + Или ТипЗнч(ЭлементФормы) = ТипПоля + Или (Истина + И ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") + И ЭлементФормы.Вид = ПредопределенноеЗначение("ВидПоляФормы." + мПлатформа.СтруктураТипаИзКонкретногоТипа(ТипПоля).ИмяОбщегоТипа)); + Возврат Результат; + +КонецФункции + +// Функция - Построитель табличного поля с отбором клиента +// +// Параметры: +// ТабличноеПоле - ТабличноеПоле - табличной части или таблицы значений +// СтруктураОтбора - - +// +// Возвращаемое значение: +// - +// +Функция ПостроительТабличногоПоляСОтборомКлиентаЛкс(Знач ТабличноеПоле, Знач СтруктураОтбора = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ПостроительЗапроса = Новый ПостроительЗапроса; + ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличноеПоле.Значение); + Попытка + ОтборСтрок = ТабличноеПоле.ОтборСтрок; + Исключение + КонецПопытки; + Если ОтборСтрок <> Неопределено Тогда + ирОбщий.СкопироватьОтборПостроителяЛкс(ПостроительЗапроса.Отбор, ОтборСтрок); + КонецЕсли; + Если СтруктураОтбора <> Неопределено Тогда + Для Каждого КлючИЗначение Из СтруктураОтбора Цикл + ирОбщий.УстановитьЭлементОтбораЛкс(ПостроительЗапроса.Отбор.Добавить(КлючИЗначение.Ключ),, КлючИЗначение.Значение); + КонецЦикла; + КонецЕсли; + Возврат ПостроительЗапроса; + +КонецФункции + +// Параметры: +// ТабличноеПоле - ТабличноеПоле - +// ОтборПоЗначению - Булево - Истина - отбирать по значению, Ложь - отбирать без значения +// Отбор - ОтборКомпоновкиДанных, Отбор - +// СообщитьОДобавлении - Булево - +// ТабличноеПолеОтбора - ТабличноеПоле - +// ЭтаФорма - Форма - +// +// Возвращаемое значение: +// - +// +Функция ТабличноеПолеОтборДляЗначенияВТекущейКолонкеЛкс(Знач ТабличноеПоле, Знач ОтборПоЗначению = Ложь, Знач Отбор = Неопределено, Знач СообщитьОДобавлении = Ложь, + ТабличноеПолеОтбора = Неопределено, ЭтаФорма = Неопределено, Знач НазначитьПользовательскийИдентификатор = Истина) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + ТабличноеПолеОтбора = Новый ТабличноеПоле; + #КонецЕсли + Если ТабличноеПоле.ТекущаяСтрока = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + ДанныеКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + Если Не ЗначениеЗаполнено(ДанныеКолонки) Тогда + Возврат Ложь; + КонецЕсли; + КомпоновкаТП = ирКлиент.КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); + Если Отбор = Неопределено Тогда + Если КомпоновкаТП <> Неопределено Тогда + Отбор = КомпоновкаТП.Компоновщик.Настройки.Отбор; + Иначе + ДанныеТабличногоПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + НастройкиСписка = ирОбщий.НастройкиДинамическогоСпискаЛкс(ДанныеТабличногоПоля, "Пользовательские"); + Попытка + Отбор = НастройкиСписка.Отбор; + Исключение + Отбор = ТабличноеПоле.ОтборСтрок; + КонецПопытки; + КонецЕсли; + КонецЕсли; + Если ТипЗнч(Отбор) = Тип("Отбор") Тогда + #Если Сервер И Не Сервер Тогда + Отбор = Новый ПостроительЗапроса; + Отбор = Отбор.Отбор; + #КонецЕсли + ЭлементОтбора = Отбор.Найти(ДанныеКолонки); + Если ЭлементОтбора = Неопределено Тогда + // Например "Предопределенный" + Возврат Ложь; + КонецЕсли; + ДоступноеПоле = ЭлементОтбора; + ТекущееЗначениеОтбора = ЭлементОтбора.Значение; + ЗначениеЯчейки = ТабличноеПоле.ТекущиеДанные[ДанныеКолонки]; + ДоступноСравнениеРавно = Не ирОбщий.ЛиОписаниеТиповНеограниченнойСтрокиЛкс(ДоступноеПоле.ТипЗначения); + Иначе // Компоновка + #Если Сервер И Не Сервер Тогда + НастройкиСписка = Новый НастройкиКомпоновкиДанных; + Отбор = Отбор.НастройкиСписка; + #КонецЕсли + ДоступноеПоле = ирОбщий.НайтиДоступноеПолеКомпоновкиПоИмениКолонкиЛкс(Отбор.ДоступныеПоляОтбора, ДанныеКолонки); + #Если Сервер И Не Сервер Тогда + ДоступноеПоле = НастройкиСписка.ДоступныеПоляВыбора.НайтиПоле(); + #КонецЕсли + Если ДоступноеПоле = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + ЭлементОтбора = ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(Отбор, ДоступноеПоле.Поле,,,,, Ложь); + ТекущееЗначениеОтбора = ЭлементОтбора.ПравоеЗначение; + ЗначениеЯчейки = ТабличноеПоле.ТекущиеДанные["" + ДоступноеПоле.Поле]; + ДоступноСравнениеРавно = ДоступноеПоле.ДоступныеВидыСравнения.НайтиПоЗначению(ВидСравненияКомпоновкиДанных.Равно) <> Неопределено; + КонецЕсли; + Если ОтборПоЗначению Тогда + Если Истина + И Не СообщитьОДобавлении + И ЭлементОтбора.Использование + И (Ложь + Или ЭлементОтбора.ВидСравнения = ВидСравнения.Равно + Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно) + Тогда + ЭлементОтбора.Использование = Ложь; + Иначе + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда + Если ДоступноСравнениеРавно Тогда + НовыйВидСравения = ВидСравнения.Равно; + Иначе + НовыйВидСравения = ВидСравнения.Содержит; + КонецЕсли; + Иначе + Если ДоступноСравнениеРавно Тогда + НовыйВидСравения = ВидСравненияКомпоновкиДанных.Равно; + Иначе + НовыйВидСравения = ВидСравненияКомпоновкиДанных.Содержит; + КонецЕсли; + КонецЕсли; + ЭлементОтбора.Использование = Истина; + ЭлементОтбора.ВидСравнения = НовыйВидСравения; + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда + // Привести значение нужно например для NULL в динамическом списке регистра бухгалтерии + ЭлементОтбора.Значение = ЭлементОтбора.ТипЗначения.ПривестиЗначение(ЗначениеЯчейки); + Иначе + ЭлементОтбора.ПравоеЗначение = ЗначениеЯчейки; + КонецЕсли; + КонецЕсли; + Иначе + Если ЭлементОтбора.Использование Тогда + Если Ложь + Или ЭлементОтбора.ВидСравнения = ВидСравнения.НеРавно + Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно + Тогда + Если Ложь + Или (Истина + И ТипЗнч(ЗначениеЯчейки) <> Тип("Булево") + И (Ложь + Или ТипЗнч(ЭлементОтбора) <> Тип("ЭлементОтбора") + Или ТипЗнч(ЗначениеЯчейки) <> Тип("УникальныйИдентификатор"))) + Или ДоступноеПоле.ТипЗначения.Типы().Количество() > 1 + Тогда + СписокЗначений = Новый СписокЗначений; + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда + НовыйВидСравения = ВидСравнения.НеВСписке; + Иначе + НовыйВидСравения = ВидСравненияКомпоновкиДанных.НеВСписке; + КонецЕсли; + СписокЗначений.Добавить(ТекущееЗначениеОтбора); + СписокЗначений.Добавить(ЗначениеЯчейки); + ЭлементОтбора.ВидСравнения = НовыйВидСравения; + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда + ЭлементОтбора.Значение = СписокЗначений; + Иначе + ЭлементОтбора.ПравоеЗначение = СписокЗначений; + КонецЕсли; + КонецЕсли; + ИначеЕсли Ложь + Или ЭлементОтбора.ВидСравнения = ВидСравнения.НеВСписке + Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке + Тогда + СписокЗначений = ТекущееЗначениеОтбора; + #Если Сервер И Не Сервер Тогда + СписокЗначений = Новый СписокЗначений; + #КонецЕсли + Если СписокЗначений.НайтиПоЗначению(ЗначениеЯчейки) = Неопределено Тогда + СписокЗначений.Добавить(ЗначениеЯчейки); + КонецЕсли; + // Для обновления отбора + ЭлементОтбора.Использование = Ложь; + ЭлементОтбора.Использование = Истина; + ИначеЕсли Ложь + Или ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке + Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке + Тогда + СписокЗначений = ТекущееЗначениеОтбора; + СписокЗначений.Удалить(СписокЗначений.НайтиПоЗначению(ЗначениеЯчейки)); + // Для обновления отбора + ЭлементОтбора.Использование = Ложь; + ЭлементОтбора.Использование = Истина; + Иначе + ЭлементОтбора.Использование = Ложь; + КонецЕсли; + КонецЕсли; + Если Не ЭлементОтбора.Использование Тогда + ЭлементОтбора.Использование = Истина; + Если Не ДоступноСравнениеРавно Тогда + Если Не ЗначениеЗаполнено(ЗначениеЯчейки) Тогда + // Особенность платформы + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда + //ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит; + ЭлементОтбора.Использование = Ложь; + ирОбщий.СообщитьЛкс("В этом отборе невозможно отбросить пустое значение в строковой колонке неограниченной длины"); + Возврат Ложь; + Иначе + //ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; + КонецЕсли; + Иначе + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда + ЭлементОтбора.ВидСравнения = ВидСравнения.НеСодержит; + Иначе + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит; + КонецЕсли; + КонецЕсли; + Иначе + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда + ЭлементОтбора.ВидСравнения = ВидСравнения.НеРавно; + Иначе + ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; + КонецЕсли; + КонецЕсли; + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда + // Привести значение нужно например для NULL в динамическом списке регистра бухгалтерии + ЭлементОтбора.Значение = ЭлементОтбора.ТипЗначения.ПривестиЗначение(ЗначениеЯчейки); + Иначе + ЭлементОтбора.ПравоеЗначение = ЗначениеЯчейки; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если СообщитьОДобавлении Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("В отбор установлен элемент %1",, ирОбщий.ПредставлениеЭлементаОтбораЛкс(ЭлементОтбора))); + КонецЕсли; + Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И НазначитьПользовательскийИдентификатор Тогда + ирОбщий.ПроверитьВключитьЭлементНастроекКомпоновкиВПользовательскиеНастройки(ЭлементОтбора); + КонецЕсли; + Если ТабличноеПолеОтбора <> Неопределено Тогда + ТабличноеПолеОтбора.ТекущаяСтрока = ЭлементОтбора; + КонецЕсли; + Если КомпоновкаТП <> Неопределено Тогда + ирКлиент.ТабличноеПолеСОтборомПросмотраОтобратьЛкс(ЭтаФорма, ТабличноеПоле,,, Истина); + КонецЕсли; + Возврат Истина; +КонецФункции + +Процедура ТабличноеПолеСОтборомПросмотраОтобратьЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ИмяКолонкиНомерСтроки = "", Знач РежимОтладки = Ложь, Знач НовоеИспользованиеОтбора = Неопределено) Экспорт + + ИмяТП = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); + Если НовоеИспользованиеОтбора <> Неопределено Тогда + ЭтаФорма[ИмяТП + "ИспользоватьОтбор"] = НовоеИспользованиеОтбора; + КонецЕсли; + ТаблицаЗначений = ЭтаФорма[ИмяТП]; + #Если Сервер И Не Сервер Тогда + ТаблицаЗначений = Новый ТаблицаЗначений; + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Компоновщик = ЭтаФорма[ИмяТП + "Компоновщик"]; + #Если Сервер И Не Сервер Тогда + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + #КонецЕсли + Попытка + СтрокаПоиска = ЭтаФорма[ИмяТП + "СтрокаПоиска"]; + Исключение + КонецПопытки; + ИскатьВПредставленияхСсылок = ТаблицаЗначений.Количество() < 30000; + ИдентификаторГруппыОтбора = "Любое %1 поле содержит все искомые слова"; + ПредставлениеГруппыОтбора = ирОбщий.СтрШаблонЛкс(ИдентификаторГруппыОтбора, ?(ИскатьВПредставленияхСсылок, "", "строковое ")); + Если Не ЗначениеЗаполнено(ИмяКолонкиНомерСтроки) Тогда + ИмяКолонкиНомерСтроки = ирОбщий.ИмяКолонкиВнутреннегоИДСтрокиЛкс(); + КонецЕсли; + ГруппаИли = ирОбщий.НайтиЭлементКоллекцииЛкс(Компоновщик.Настройки.Отбор.Элементы, "ПредставлениеПользовательскойНастройки", ИдентификаторГруппыОтбора); + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + Если ТаблицаЗначений.Количество() < 1000 Тогда + // Оптимизация для ускорения компоновки макета + ЕстьБольшиеТипы = Ложь; + НеСужаемыеКолонки = Новый Массив; // Для ускорения + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + КоличествоТипов = Колонка.ТипЗначения.Типы().Количество(); + Если КоличествоТипов = 0 Или КоличествоТипов > 10 Тогда + ЕстьБольшиеТипы = Истина; + Иначе + НеСужаемыеКолонки.Добавить(Колонка.Имя); + КонецЕсли; + КонецЦикла; + Если ЕстьБольшиеТипы Тогда + ТаблицаБезДанныхСУзкимиТипами = ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначений,,,,,, НеСужаемыеКолонки, Истина); + КонецЕсли; + КонецЕсли; + ТабличноеПолеСОтборомПросмотраОбновитьКомпоновщикЛкс(ЭтаФорма, ТабличноеПоле, Ложь, ТаблицаБезДанныхСУзкимиТипами); + СловаПоиска = ирОбщий.РазделитьСтрокуПоискаНаСловаПоискаЛкс(СтрокаПоиска); + Если ГруппаИли = Неопределено Тогда + ГруппаИли = Компоновщик.Настройки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + ГруппаИли.ПредставлениеПользовательскойНастройки = ИдентификаторГруппыОтбора; + КонецЕсли; + ГруппаИли.Представление = ПредставлениеГруппыОтбора; + ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; + ГруппаИли.Элементы.Очистить(); + Запрос = Новый Запрос; + УсловияИЛИПоДочернимПолямСсылок = Новый Массив; + ТаблицаСсылок = Новый ТаблицаЗначений; + // Антибаг платформы 8.3 https://www.hostedredmine.com/issues/950769 + ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИли, ирОбщий.ИмяФиктивногоПоляСхемыКомпоновкиЛкс(), "й",,, Ложь); + Для Каждого ДоступноеПоле Из Компоновщик.Настройки.ДоступныеПоляОтбора.Элементы Цикл + ОписаниеТипов = Новый ОписаниеТипов(ДоступноеПоле.ТипЗначения,, ирОбщий.ЗначенияВМассивЛкс(Тип("Null"))); + ПутьКПолю = ""; + Если ОписаниеТипов.СодержитТип(Тип("Строка")) Тогда + ПутьКПолю = "" + ДоступноеПоле.Поле; + КонецЕсли; + Если ОписаниеТипов.Типы().Количество() > 0 Тогда + ТипСсылки = ОписаниеТипов.Типы()[0]; + Если Истина + И ирОбщий.ЛиТипСсылкиБДЛкс(ТипСсылки) + И ирОбщий.ПоляТаблицыМДЛкс(Метаданные.НайтиПоТипу(ТипСсылки)).Найти("Наименование", "Имя") <> Неопределено + Тогда + ПутьКПолю = "" + ДоступноеПоле.Поле + ".Наименование"; + КонецЕсли; + КонецЕсли; + Если ПутьКПолю = "" Тогда + Продолжить; + КонецЕсли; + Если Найти(ПутьКПолю, ".") > 0 Тогда + // Антибаг платформы. Очень долгая компоновка при отборе по дочернему полю https://www.hostedredmine.com/issues/951093 + Если Не ИскатьВПредставленияхСсылок Тогда + Продолжить; + КонецЕсли; + ТаблицаСсылок.Колонки.Добавить("" + ДоступноеПоле.Поле, ОписаниеТипов); + УсловияИПоСловам = Новый Массив; + НомерСлова = 1; + Для Каждого Слово Из СловаПоиска Цикл + ИмяПараметраСлова = "Слово" + (УсловияИПоСловам.Количество() + 1); + УсловияИПоСловам.Добавить(ирОбщий.СтрокаПовторомЛкс(Символы.Таб, 2) + "И " + ПутьКПолю + " ПОДОБНО &" + ИмяПараметраСлова); + НомерСлова = НомерСлова + 1; + Запрос.УстановитьПараметр(ИмяПараметраСлова, "%" + Слово + "%"); + КонецЦикла; + УсловияИЛИПоДочернимПолямСсылок.Добавить(ирОбщий.СтрокаПовторомЛкс(Символы.Таб, 1) + "ИЛИ (ИСТИНА + |" + ирОбщий.СтрСоединитьЛкс(УсловияИПоСловам, Символы.ПС) + ")"); + Иначе + ГруппаИ = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); + Для Каждого Слово Из СловаПоиска Цикл + ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИ, ПутьКПолю, Слово, ВидСравненияКомпоновкиДанных.Содержит,, Ложь); + КонецЦикла; + КонецЕсли; + КонецЦикла; + Если ТаблицаСсылок.Колонки.Количество() > 0 Тогда + // Антибаг платформы. Очень долгая компоновка при отборе по дочернему полю https://www.hostedredmine.com/issues/951093 + ирОбщий.НайтиДобавитьКолонкуНомераСтрокиЛкс(ТаблицаЗначений, ИмяКолонкиНомерСтроки, ТаблицаБезДанныхСУзкимиТипами); + ТаблицаСсылок.Колонки.Добавить(ИмяКолонкиНомерСтроки, Новый ОписаниеТипов("Число")); + ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(ТаблицаЗначений, ТаблицаСсылок); + ИмяПараметра = "ВТ"; + Запрос.Текст = ирОбщий.ТекстЗапросаПоместитьИзПараметраЛкс(ИмяПараметра, ИмяПараметра,, ТаблицаСсылок.Колонки); + Запрос.Текст = Запрос.Текст + "; + |ВЫБРАТЬ " + ИмяКолонкиНомерСтроки + " ИЗ " + ИмяПараметра + " ГДЕ ЛОЖЬ + |" + ирОбщий.СтрСоединитьЛкс(УсловияИЛИПоДочернимПолямСсылок, Символы.ПС); + Запрос.УстановитьПараметр(ИмяПараметра, ТаблицаСсылок); + Попытка + РезультатЗапроса = Запрос.Выполнить(); + Исключение + // В типах колонок есть недопустимые для запроса типы + Запрос.УстановитьПараметр(ИмяПараметра, ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаСсылок)); + РезультатЗапроса = Запрос.Выполнить(); + КонецПопытки; + НомераСтрок = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку(0); + ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИли, ИмяКолонкиНомерСтроки, НомераСтрок,,, Ложь); + КонецЕсли; + Если ГруппаИли.Элементы.Количество() = 0 Тогда + Компоновщик.Настройки.Отбор.Элементы.Удалить(ГруппаИли); + СтрокаПоиска = ""; + ЭтаФорма[ИмяТП + "СтрокаПоиска"] = СтрокаПоиска; + Иначе + ГруппаИли.Использование = Истина; + КонецЕсли; + Иначе + Если ГруппаИли <> Неопределено Тогда + ГруппаИли.Использование = Ложь; + КонецЕсли; + КонецЕсли; + Если Не ирОбщий.ЛиОтборУстановленЛкс(Компоновщик.Настройки.Отбор) И Не ЗначениеЗаполнено(СтрокаПоиска) Тогда + ЭтаФорма[ИмяТП + "ИспользоватьОтбор"] = Ложь; + КонецЕсли; + ИспользоватьОтбор = ЭтаФорма[ИмяТП + "ИспользоватьОтбор"]; + Если ИспользоватьОтбор Тогда + ирОбщий.НайтиДобавитьКолонкуНомераСтрокиЛкс(ТаблицаЗначений, ИмяКолонкиНомерСтроки, ТаблицаБезДанныхСУзкимиТипами); + КлючТекущейСтроки = ирКлиент.ТабличноеПолеКлючСтрокиЛкс(ТабличноеПоле, ИмяКолонкиНомерСтроки); + ИндексТекущейСтроки = ТабличноеПолеПозицияТекущейСтрокиЛкс(ТабличноеПоле); + ТаблицаОтобранное = ирОбщий.ОтобратьТаблицуЗначенийКомпоновкойЛкс(ТаблицаЗначений, Компоновщик.Настройки, РежимОтладки,, ТаблицаБезДанныхСУзкимиТипами); + //ТаблицаЗначенийОтобранное1 = ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначенийОтобранное1,,,, Истина); + Если РежимОтладки Тогда + Возврат; + КонецЕсли; + ТабличноеПоле.ИзменятьСоставСтрок = Ложь; + ТабличноеПоле.Значение = ТаблицаОтобранное; + ЭтаФорма[ИмяТП + "Отобранное"] = ТаблицаОтобранное; + Если КлючТекущейСтроки <> Неопределено Тогда + ирОбщий.ДобавитьИндексВТаблицуЛкс(ТаблицаЗначений, ИмяКолонкиНомерСтроки); + ТекущаяСтрока = ирОбщий.СтрокаТабличнойКоллекцииПоКлючуЛкс(ТаблицаЗначений, КлючТекущейСтроки); + Для ИндексПроверяемойСтроки = ТаблицаЗначений.Индекс(ТекущаяСтрока) По Мин(ИндексТекущейСтроки + 1000, ТаблицаЗначений.Количество() - 1) Цикл + ПроверяемаяСтрока = ТаблицаЗначений[ИндексПроверяемойСтроки]; + КлючТекущейСтроки = ирКлиент.ТабличноеПолеКлючСтрокиЛкс(ТабличноеПоле, ИмяКолонкиНомерСтроки, ПроверяемаяСтрока); + ПроекцияСтроки = ирОбщий.СтрокаТабличнойКоллекцииПоКлючуЛкс(ТабличноеПоле.Значение, КлючТекущейСтроки); + Если ПроекцияСтроки <> Неопределено Тогда + ТабличноеПоле.ТекущаяСтрока = ПроекцияСтроки; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + ирОбщий.УстановитьСвойствоВКоллекцииЛкс(Компоновщик.Настройки.Отбор.Элементы, "Использование", Ложь); + Если ТабличноеПоле.Значение = ТаблицаЗначений Тогда + Возврат; + КонецЕсли; + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + Если ДопСвойства.НачальноеИзменятьСоставСтрок Тогда + ТабличноеПоле.ИзменятьСоставСтрок = Истина; + КонецЕсли; + //КлючТекущейСтроки = ирКлиент.ТабличноеПолеКлючСтрокиЛкс(ТабличноеПоле, ИмяКолонкиНомерСтроки); + СостояниеСтрок = ТабличноеПолеСостояниеСтрокЛкс(ТабличноеПоле, ИмяКолонкиНомерСтроки); + //ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(ТаблицаЗначений, ТаблицаОтобранное); + ЭтаФорма[ИмяТП + "Отобранное"] = ТаблицаЗначений; + ТабличноеПоле.Значение = ТаблицаЗначений; + //ТабличноеПолеВосстановитьТекущуюСтрокуЛкс(ТабличноеПоле, КлючТекущейСтроки); + ирКлиент.ТабличноеПолеВосстановитьСостояниеСтрокЛкс(ТабличноеПоле, СостояниеСтрок); + КонецЕсли; + ТабличноеПолеОбновитьТекстыПодваловЛкс(ЭтаФорма, ТабличноеПоле); + ИмяМетода = ИмяТП + "ПослеОтбора"; + Если ирОбщий.МетодРеализованЛкс(ЭтаФорма, ИмяМетода) Тогда + Выполнить("ЭтаФорма." + ИмяМетода + "()"); + КонецЕсли; + +КонецПроцедуры + +Процедура ТабличноеПолеСОтборомПросмотраПриОкончанииРедактированияЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ИмяКолонкиНомерСтроки = "") Экспорт + + ИмяТП = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); + Если Не ЭтаФорма[ИмяТП + "ИспользоватьОтбор"] Тогда + Возврат; + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяКолонкиНомерСтроки) Тогда + ИмяКолонкиНомерСтроки = ирОбщий.ИмяКолонкиВнутреннегоИДСтрокиЛкс(); + КонецЕсли; + ТаблицаЗначений = ЭтаФорма[ИмяТП]; + #Если Сервер И Не Сервер Тогда + ТаблицаЗначений = Новый ТаблицаЗначений; + #КонецЕсли + ТаблицаПолная = ЭтаФорма[ИмяТП]; + ТекущаяСтрокаПолная = ТаблицаПолная[ТабличноеПоле.ТекущиеДанные[ИмяКолонкиНомерСтроки] - 1]; + ЗаполнитьЗначенияСвойств(ТекущаяСтрокаПолная, ТабличноеПоле.ТекущиеДанные); + +КонецПроцедуры + +// Функция - Табличное поле состояние строк лкс +// +// Параметры: +// ТабличноеПоле - - +// ИменаКлючевыхКолонок - Строка, 0[число] - если 0, то используется логический номер строки +// +// Возвращаемое значение: +// - +// +Функция ТабличноеПолеСостояниеСтрокЛкс(Знач ТабличноеПоле, Знач ИменаКлючевыхКолонок = 0) Экспорт + + СтруктураСостояния = Новый Структура("ТекущаяКолонка, ТекущаяСтрока, ВыделенныеСтроки"); + СтруктураСостояния.ТекущаяСтрока = ТабличноеПолеКлючСтрокиЛкс(ТабличноеПоле, ИменаКлючевыхКолонок); + СтруктураСостояния.ВыделенныеСтроки = ТабличноеПолеКлючиСтрокЛкс(ТабличноеПоле, ИменаКлючевыхКолонок); + Если ТабличноеПоле.ТекущаяКолонка <> Неопределено Тогда + СтруктураСостояния.ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка.Имя; + КонецЕсли; + Возврат СтруктураСостояния; + +КонецФункции + +Функция ТабличноеПолеВосстановитьСостояниеСтрокЛкс(Знач ТабличноеПоле, Знач СтруктураСостояния, ВременноОтключитьОтображение = Истина) Экспорт + + #Если Сервер И Не Сервер Тогда + СтруктураСостояния = Новый Структура; + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если ВременноОтключитьОтображение Тогда + // Предотвращаем двойную (синхронную и затем асинхронную) перерисовку видимых строк табличного поля при установке текущих колонки и строки. + // Такое происходит например в обработчике ПриАктивацииСтраницы в ирЗагрузкаТабличныхДанных. В остальных случаях пользы от этого вероятно нет. + ОбработчикПриВыводеСтроки = ТабличноеПолеОтключитьОтображениеЛкс(ТабличноеПоле); + КонецЕсли; + Если ЗначениеЗаполнено(СтруктураСостояния.ТекущаяКолонка) Тогда + ТекущаяКолонка = ТабличноеПоле.Колонки.Найти(СтруктураСостояния.ТекущаяКолонка); + Если ТекущаяКолонка <> Неопределено И ТекущаяКолонка.Видимость Тогда + ТабличноеПоле.ТекущаяКолонка = ТекущаяКолонка; + КонецЕсли; + КонецЕсли; + ТекущаяСтрокаУстановлена = ТабличноеПолеВосстановитьТекущуюСтрокуЛкс(ТабличноеПоле, СтруктураСостояния.ТекущаяСтрока); + ТабличноеПолеВосстановитьВыделенныеСтрокиЛкс(ТабличноеПоле, СтруктураСостояния.ВыделенныеСтроки); + Если ВременноОтключитьОтображение Тогда + ТабличноеПолеВключитьОтображениеЛкс(ТабличноеПоле, ОбработчикПриВыводеСтроки); + КонецЕсли; + Возврат ТекущаяСтрокаУстановлена; + +КонецФункции + +// Параметры: +// ТаблицаФормы - ТаблицаФормы, ТабличноеПоле - +// ИменаКлючевыхКолонок - Строка, 0[число] - если 0, то используется логический номер строки +// СтрокаТаблицы - - +// +// Результат: +// Структура +// +Функция ТабличноеПолеКлючСтрокиЛкс(ТаблицаФормы, ИменаКлючевыхКолонок = "Ссылка", Знач СтрокаТаблицы = Неопределено) Экспорт + + Если СтрокаТаблицы = Неопределено Тогда + СтрокаТаблицы = ТаблицаФормы.ТекущиеДанные; + КонецЕсли; + Если СтрокаТаблицы <> Неопределено Тогда + Если ИменаКлючевыхКолонок = 0 Тогда + КлючТекущейСтроки = Новый Структура("НомерСтроки"); + КлючТекущейСтроки.НомерСтроки = СтрокаТаблицы.Владелец().Индекс(СтрокаТаблицы) + 1; + Иначе + КлючТекущейСтроки = Новый Структура(ИменаКлючевыхКолонок); + ЗаполнитьЗначенияСвойств(КлючТекущейСтроки, СтрокаТаблицы, ИменаКлючевыхКолонок); + КонецЕсли; + КонецЕсли; + Возврат КлючТекущейСтроки; + +КонецФункции + +// Функция - Табличное поле ключи строк лкс +// +// Параметры: +// ТаблицаФормы - - +// ИменаКлючевыхКолонок - Строка, 0[число] - если 0, то используется логический номер строки +// СтрокиТаблицы - - +// +// Возвращаемое значение: +// - +// +Функция ТабличноеПолеКлючиСтрокЛкс(ТаблицаФормы, ИменаКлючевыхКолонок = "Ссылка", Знач СтрокиТаблицы = Неопределено) Экспорт + + Если СтрокиТаблицы = Неопределено Тогда + СтрокиТаблицы = ТаблицаФормы.ВыделенныеСтроки; + КонецЕсли; + Результат = Новый Массив; + Для Каждого СтрокаТаблицы Из СтрокиТаблицы Цикл + Если СтрокаТаблицы = Неопределено Тогда + // Случается в дереве формы ирРедакторИзмененийНаУзлах + Продолжить; + КонецЕсли; + КлючТекущейСтроки = ТабличноеПолеКлючСтрокиЛкс(ТаблицаФормы, ИменаКлючевыхКолонок, СтрокаТаблицы); + Результат.Добавить(КлючТекущейСтроки); + КонецЦикла; + Возврат Результат; + +КонецФункции + +// Функция - Восстановить текущую строку таблицы формы лкс +// +// Параметры: +// ТабличноеПоле - ТабличноеПоле, ТаблицаФормы - +// КлючТекущейСтроки - Структура - +// ДанныеТаблицы - - +// +// Возвращаемое значение: +// - Булево - успешность установки текущей строки +// +Функция ТабличноеПолеВосстановитьТекущуюСтрокуЛкс(ТабличноеПоле, Знач КлючТекущейСтроки, Знач ДанныеТаблицы = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если КлючТекущейСтроки <> Неопределено Тогда + Если ДанныеТаблицы = Неопределено Тогда + ДанныеТаблицы = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + КонецЕсли; + Строка = ирОбщий.СтрокаТабличнойКоллекцииПоКлючуЛкс(ДанныеТаблицы, КлючТекущейСтроки); + Если Строка <> Неопределено Тогда + Попытка + ИдентификаторСтроки = Строка.ПолучитьИдентификатор(); + Исключение + ИдентификаторСтроки = Строка; + КонецПопытки; + ТабличноеПоле.ТекущаяСтрока = ИдентификаторСтроки; + Возврат Истина; + КонецЕсли; + КонецЕсли; + Возврат Ложь; + +КонецФункции + +Функция ТабличноеПолеВосстановитьВыделенныеСтрокиЛкс(ТабличноеПоле, Знач КлючиВыделенныхСтрок, Знач ДанныеТаблицы = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; + Если КлючиВыделенныхСтрок.Количество() > 0 Тогда + ВыделенныеСтроки.Очистить(); + КонецЕсли; + Для Каждого КлючВыделеннойСтроки Из КлючиВыделенныхСтрок Цикл + Если ДанныеТаблицы = Неопределено Тогда + ДанныеТаблицы = ТабличноеПоле.Значение; + КонецЕсли; + Строка = ирОбщий.СтрокаТабличнойКоллекцииПоКлючуЛкс(ДанныеТаблицы, КлючВыделеннойСтроки); + Если Строка <> Неопределено Тогда + Попытка + ИдентификаторСтроки = Строка.ПолучитьИдентификатор(); + Исключение + ИдентификаторСтроки = Строка; + КонецПопытки; + ВыделенныеСтроки.Добавить(ИдентификаторСтроки); + КонецЕсли; + КонецЦикла; + +КонецФункции + +Процедура ТабличноеПолеВключитьОтображениеЛкс(Знач ТабличноеПоле, Знач ОбработчикПриВыводеСтроки) Экспорт + + ТабличноеПоле.УстановитьДействие("ПриВыводеСтроки", ОбработчикПриВыводеСтроки); + ТабличноеПоле.Видимость = Истина; + +КонецПроцедуры + +Функция ТабличноеПолеОтключитьОтображениеЛкс(Знач ТабличноеПоле) + + ОбработчикПриВыводеСтроки = ТабличноеПоле.ПолучитьДействие("ПриВыводеСтроки"); + ТабличноеПоле.УстановитьДействие("ПриВыводеСтроки", Неопределено); + ТабличноеПоле.Видимость = Ложь; + Возврат ОбработчикПриВыводеСтроки; + +КонецФункции + +Функция ТабличноеПоле_ТекущаяКолонкаЛкс(ТаблицаФормы, выхЭлементУправления = Неопределено, выхДоступноРедактирование = Неопределено) Экспорт + Если ТипЗнч(ТаблицаФормы) = Тип("ТаблицаФормы") Тогда + Результат = ТаблицаФормы.ТекущийЭлемент; + выхЭлементУправления = Результат; + ИначеЕсли ТипЗнч(ТаблицаФормы) = Тип("ТабличноеПоле") Тогда + Результат = ТаблицаФормы.ТекущаяКолонка; + Если Результат <> Неопределено Тогда + выхЭлементУправления = Результат.ЭлементУправления; + КонецЕсли; + Иначе + ВызватьИсключение "Неверный тип (" + ТипЗнч(ТаблицаФормы) + ") параметра"; + КонецЕсли; + выхДоступноРедактирование = Истина + И (Ложь + Или ТипЗнч(выхЭлементУправления) = Тип("ПолеВвода") + Или ТипЗнч(выхЭлементУправления) = Тип("ПолеФормы")) + И Не выхЭлементУправления.ТолькоПросмотр; + Возврат Результат; +КонецФункции + +Функция ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(Знач ТабличноеПоле, Знач НоваяТекущаяКолонка) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + Результат = ирОбщий.ПрисвоитьЕслиНеРавноЛкс(ТабличноеПоле.ТекущаяКолонка, НоваяТекущаяКолонка); + Иначе + Результат = ирОбщий.ПрисвоитьЕслиНеРавноЛкс(ТабличноеПоле.ТекущийЭлемент, НоваяТекущаяКолонка); + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ТабличноеПолеСтрокаПоискаЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ПрефиксСтрокиПоиска = "", выхПутьКДанным = "") Экспорт + + //Префикс = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); + Если Не ЗначениеЗаполнено(ПрефиксСтрокиПоиска) Тогда + ПрефиксСтрокиПоиска = ТабличноеПоле.Имя; + КонецЕсли; + Попытка + выхПутьКДанным = ПрефиксСтрокиПоиска + "СтрокаПоиска"; + СтрокаПоиска = ЭтаФорма[выхПутьКДанным]; + Исключение + СтрокаПоиска = ""; + КонецПопытки; + Возврат СтрокаПоиска; + +КонецФункции + +Функция ТабличноеПолеСОтборомПросмотраОбновитьПредставлениеЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач РазрешитьРучноеВключение = Ложь) Экспорт + + КомпоновкаТП = ирКлиент.КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); + Если КомпоновкаТП = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Компоновщик = КомпоновкаТП.Компоновщик; + ТаблицаЗначений = КомпоновкаТП.ТаблицаЗначений; + ТаблицаОтобранное = КомпоновкаТП.ТаблицаОтобранное; + ИспользоватьОтбор = КомпоновкаТП.ИспользоватьОтбор; + НадписьОтборПросмотра = КомпоновкаТП.НадписьОтборПросмотра; + ФлажокИспользоватьОтбор = КомпоновкаТП.ФлажокИспользоватьОтбор; + #Если Сервер И Не Сервер Тогда + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + ТаблицаЗначений = Новый ТаблицаЗначений; + ТаблицаОтобранное = Новый ТаблицаЗначений; + #КонецЕсли + Пустой = Ложь; + Результат = ирОбщий.ПредставлениеОтбораЛкс(Компоновщик.Настройки.Отбор, Пустой); + Если Не Пустой Тогда + Результат = XMLСтрока(ТаблицаОтобранное.Количество()) + "/" + XMLСтрока(ТаблицаЗначений.Количество() - ТаблицаОтобранное.Количество()) + " - " + Результат; + КонецЕсли; + ирОбщий.ПрисвоитьЕслиНеРавноЛкс(НадписьОтборПросмотра.Заголовок, Результат); + Если Не РазрешитьРучноеВключение Тогда + ФлажокИспользоватьОтбор.Доступность = ИспользоватьОтбор; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, выхКомпоновщик = Неопределено) Экспорт + + Префикс = "" + ТабличноеПоле.Имя; // Тут может быть имитатор табличного поля + выхКомпоновщик = Неопределено; + Для Счетчик = 1 По 2 Цикл + Попытка + выхКомпоновщик = ЭтаФорма[Префикс + "Компоновщик"]; + Исключение + КонецПопытки; + Если выхКомпоновщик = Неопределено И Найти(Префикс, "_") > 0 Тогда + Префикс = ирОбщий.ПервыйФрагментЛкс(Префикс, "_"); // Редактор объекта БД + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + Если выхКомпоновщик = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Возврат Префикс; + +КонецФункции + +Процедура ТабличноеПолеСОтборомПросмотраУстановитьДанныеЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ОтключитьОтбор = Истина) Экспорт + + ИмяТП = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); + Если ОтключитьОтбор Тогда + ЭтаФорма[ИмяТП + "ИспользоватьОтбор"] = Ложь; + КонецЕсли; + ТабличноеПоле.Значение = ЭтаФорма[ИмяТП]; + ТабличноеПолеСОтборомПросмотраОбновитьКомпоновщикЛкс(ЭтаФорма, ТабличноеПоле); + ТабличноеПолеСОтборомПросмотраОтобратьЛкс(ЭтаФорма, ТабличноеПоле); + +КонецПроцедуры + +Процедура ТабличноеПолеСОтборомПросмотраОбновитьКомпоновщикЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач УстановитьПодсказкуФлажка = Истина, Знач ТаблицаБезДанныхСУзкимиТипами = Неопределено) Экспорт + + КомпоновкаТП = ирКлиент.КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); + Если ТаблицаБезДанныхСУзкимиТипами = Неопределено Тогда + ТаблицаБезДанныхСУзкимиТипами = КомпоновкаТП.ТаблицаЗначений; + КонецЕсли; + СхемаКомпоновки = ирОбщий.СоздатьСхемуПоТаблицеЗначенийЛкс(ТаблицаБезДанныхСУзкимиТипами); + Компоновщик = КомпоновкаТП.Компоновщик; + #Если Сервер И Не Сервер Тогда + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + #КонецЕсли + Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); + Компоновщик.Настройки.Выбор.Элементы.Очистить(); + Если КомпоновкаТП.НадписьОтборПросмотра <> Неопределено Тогда + КомпоновкаТП.НадписьОтборПросмотра.Подсказка = "<Количество отобрано>/<Количество отброшено> - <Условия отбора>"; + КонецЕсли; + Если КомпоновкаТП.ФлажокИспользоватьОтбор <> Неопределено И УстановитьПодсказкуФлажка Тогда + КомпоновкаТП.ФлажокИспользоватьОтбор.Подсказка = + "Отбор просмотра включает режим отображения в табличном поле только строк, отвечающих условиям отбора. + |При этом отключается возможность добавления/удаления строк данных табличного поля."; + КонецЕсли; + ирОбщий.КомпоновщикНастроекВосстановитьЛкс(Компоновщик); + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); + ДопСвойства.Вставить("НачальноеИзменятьСоставСтрок", ТабличноеПоле.ИзменятьСоставСтрок); + +КонецПроцедуры + +Функция КомпоновкаТабличногоПоляЛкс(Знач ЭтаФорма, Знач ТабличноеПоле) Экспорт + + КомпоновкаТП = Новый Структура; + Компоновщик = Неопределено; + Префикс = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, Компоновщик); + Если Префикс = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + КомпоновкаТП.Вставить("Компоновщик", Компоновщик); + КомпоновкаТП.Вставить("ТаблицаОтобранное", ЭтаФорма[Префикс + "Отобранное"]); + КомпоновкаТП.Вставить("ТаблицаЗначений", ЭтаФорма[Префикс]); + КомпоновкаТП.Вставить("ИспользоватьОтбор", ЭтаФорма[Префикс + "ИспользоватьОтбор"]); + КомпоновкаТП.Вставить("НадписьОтборПросмотра", ЭтаФорма.ЭлементыФормы.Найти(Префикс + "НадписьОтборПросмотра")); + КомпоновкаТП.Вставить("ФлажокИспользоватьОтбор", ЭтаФорма.ЭлементыФормы.Найти(Префикс + "ИспользоватьОтбор")); + Возврат КомпоновкаТП; + +КонецФункции + +Функция ЗагрузитьЗначениеИзФайлаИнтерактивноЛкс(Знач Расширение = "", Знач ОписаниеФормата = "", Знач Сжатие = Истина) Экспорт + + Если Не ЗначениеЗаполнено(Расширение) И Сжатие Тогда + Расширение = "zip"; + КонецЕсли; + ПолноеИмяФайла = ВыбратьФайлЛкс(, Расширение, ОписаниеФормата); + Если ПолноеИмяФайла = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Результат = ирОбщий.ЗагрузитьЗначениеИзФайлаЛкс(ПолноеИмяФайла, Сжатие); + Возврат Результат; + +КонецФункции + +Функция СохранитьЗначениеВФайлИнтерактивноЛкс(Знач Значение, Знач Расширение = "", Знач ОписаниеФормата = "", Знач Сжатие = Истина, Знач УровеньСжатия = Неопределено, Знач Заголовок = "") Экспорт + + Если Не ЗначениеЗаполнено(Расширение) И Сжатие Тогда + Расширение = "zip"; + КонецЕсли; + ПолноеИмяФайла = ВыбратьФайлЛкс(Ложь, Расширение, ОписаниеФормата,,,, Заголовок); + Если ПолноеИмяФайла = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Результат = ирОбщий.СохранитьЗначениеВФайлЛкс(Значение, ПолноеИмяФайла, Сжатие, УровеньСжатия); + Возврат Результат; + +КонецФункции + +Функция ВыбратьРедактируемыйТипЛкс(Знач ОграничениеТипа = Неопределено, Знач ТолькоПросмотр = Ложь, Знач НачальноеЗначениеВыбора = Неопределено, Знач ВладелецФормы = Неопределено, + ЗакрыватьПриВыборе = Истина, Знач Заголовок = "") Экспорт + + Если ОграничениеТипа = Неопределено Тогда + ОграничениеТипа = Новый ОписаниеТипов; + КонецЕсли; + ФормаРедактора = ирКэш.Получить().ПолучитьФорму("ВыборРедактируемыхТипов", ВладелецФормы); + ФормаРедактора.ОграничениеТипа = ОграничениеТипа; + ФормаРедактора.ЗакрыватьПриВыборе = ЗакрыватьПриВыборе; + ФормаРедактора.НачальноеЗначениеВыбора = НачальноеЗначениеВыбора; + ФормаРедактора.РежимВыбора = Истина; + ФормаРедактора.МножественныйВыбор = Ложь; + Если ЗначениеЗаполнено(Заголовок) Тогда + ФормаРедактора.Заголовок = Заголовок; + КонецЕсли; + ФормаРедактора.ТолькоПросмотр = ТолькоПросмотр; + РезультатВыбора = ФормаРедактора.ОткрытьМодально(); + Возврат РезультатВыбора; + +КонецФункции + +Функция РедактироватьОписаниеРедактируемыхТиповЛкс(ОграничениеТипаИлиПолеВвода, ТолькоПросмотр = Ложь) Экспорт + + Если ТипЗнч(ОграничениеТипаИлиПолеВвода) = Тип("ОписаниеТипов") Тогда + ВладелецФормы = Неопределено; + ОграничениеТипа = ОграничениеТипаИлиПолеВвода; + Иначе + ВладелецФормы = ОграничениеТипаИлиПолеВвода; + ОграничениеТипа = ОграничениеТипаИлиПолеВвода.Значение; + КонецЕсли; + ФормаРедактора = ирКэш.Получить().ПолучитьФорму("ВыборРедактируемыхТипов", ВладелецФормы); + //ФормаРедактора.ОграничениеТипа = ОграничениеТипа; + ФормаРедактора.НачальноеЗначениеВыбора = ОграничениеТипа; + ФормаРедактора.РежимВыбора = Истина; + ФормаРедактора.МножественныйВыбор = Истина; + ФормаРедактора.ТолькоПросмотр = ТолькоПросмотр; + РезультатВыбора = ФормаРедактора.ОткрытьМодально(); + Возврат РезультатВыбора; + +КонецФункции + +// ПолноеИмяНачальногоТипаВыбора - Строка - полное имя метаданного +Функция ОткрытьПодборСВыборомТипаЛкс(ВладелецФормы, Знач ОписаниеТипов = Неопределено, Знач НачальноеЗначениеВыбора = Неопределено, Знач ИспользоватьДинамическийСписокИР = Истина, + Знач ПриПустомОписанииТиповРазрешатьВсе = Ложь, Знач СтруктураОтбора = Неопределено) Экспорт + + ЕстьТипТип = Ложь; + Если ТипЗнч(ОписаниеТипов) = Тип("Строка") Тогда + ДоступныеОбъекты = ирОбщий.СтрРазделитьЛкс(ОписаниеТипов, ",", Истина); + ИначеЕсли ОписаниеТипов <> Неопределено Тогда + ДоступныеОбъекты = Новый Массив(); + ЕстьТипТип = Ложь; + Для Каждого Тип Из ОписаниеТипов.Типы() Цикл + Если Тип = Тип("Тип") Тогда + ЕстьТипТип = Истина; + Иначе + ПолноеИмяМД = ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(Тип); + Если ЗначениеЗаполнено(ПолноеИмяМД) Тогда + ДоступныеОбъекты.Добавить(ПолноеИмяМД); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если ДоступныеОбъекты.Количество() = 0 И ПриПустомОписанииТиповРазрешатьВсе Тогда + ДоступныеОбъекты = Неопределено; + КонецЕсли; + КонецЕсли; + Если Истина + И ДоступныеОбъекты = Неопределено + И (Ложь + Или ЕстьТипТип + Или (Истина + И ОписаниеТипов = Неопределено + И ТипЗнч(НачальноеЗначениеВыбора) = Тип("Тип"))) + Тогда + Возврат ВыбратьРедактируемыйТипЛкс(,, НачальноеЗначениеВыбора, ВладелецФормы, Ложь); + КонецЕсли; + Если НачальноеЗначениеВыбора <> Неопределено Тогда + ТипНачальногоЗначенияВыбора = ирОбщий.ТипОбъектаБДЛкс(НачальноеЗначениеВыбора); + ПолноеИмяНачальногоТипаВыбора = ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(ТипНачальногоЗначенияВыбора); + КонецЕсли; + Если Ложь + Или ДоступныеОбъекты = Неопределено + Или ДоступныеОбъекты.Количество() = 0 + Или ДоступныеОбъекты.Количество() > 1 + Тогда + Форма = ирКэш.Получить().ПолучитьФорму("ВыборОбъектаМетаданных", ВладелецФормы); + лСтруктураПараметров = Новый Структура; + лСтруктураПараметров.Вставить("ДоступныеОбъекты", ДоступныеОбъекты); + лСтруктураПараметров.Вставить("ОтображатьСсылочныеОбъекты", Истина); + лСтруктураПараметров.Вставить("ОтображатьВнешниеИсточникиДанных", Истина); + лСтруктураПараметров.Вставить("НачальноеЗначениеВыбора", ПолноеИмяНачальногоТипаВыбора); + Форма.НачальноеЗначениеВыбора = лСтруктураПараметров; + Результат = Форма.ОткрытьМодально(); + Если Результат = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ПолноеИмяМД = Результат.ПолноеИмяОбъекта; + Иначе + ПолноеИмяМД = ДоступныеОбъекты[0]; + КонецЕсли; + Если Не ЗначениеЗаполнено(ПолноеИмяМД) Тогда + Возврат Неопределено; + КонецЕсли; + Если ПолноеИмяНачальногоТипаВыбора <> ПолноеИмяМД Тогда + НачальноеЗначениеВыбора = Неопределено; + КонецЕсли; + ТекущаяСтрока = Неопределено; + Отбор = СтруктураОтбора; + Если НачальноеЗначениеВыбора <> Неопределено Тогда + ИмяXMLТипа = СериализаторXDTO.XMLТип(ТипНачальногоЗначенияВыбора).ИмяТипа; + Если Ложь + Или Найти(ИмяXMLТипа, "Ref.") > 0 + Или Найти(ИмяXMLТипа, "RecordKey.") > 0 + Тогда + ТекущаяСтрока = НачальноеЗначениеВыбора; + Иначе + Отбор = НачальноеЗначениеВыбора.Методы.Отбор; + КонецЕсли; + КонецЕсли; + ФормаВыбора = ОткрытьФормуСпискаЛкс(ПолноеИмяМД, Отбор, ИспользоватьДинамическийСписокИР, ВладелецФормы, Истина, Истина, ТекущаяСтрока); + Возврат ФормаВыбора; + +КонецФункции + +Функция ФормаВыбораОбъектаМетаданныхЛкс(Знач ВладелецФормы, Знач КлючУникальности, Знач НачальноеЗначениеВыбора, МножественныйВыбор = Ложь, ОтображатьСсылочныеОбъекты = Ложь, + ОтображатьВыборочныеТаблицы = Ложь, ОтображатьРегистры = Ложь, ОтображатьПоследовательности = Ложь, ОтображатьКонстанты = Ложь, ОтображатьТабличныеЧасти = Ложь, + ОтображатьТаблицыИзменений = Ложь, ОтображатьВнешниеИсточникиДанных = Ложь, ЗапретитьВыбиратьСсылочныеОбъекты = Ложь, ТолькоИспользованиеПолнотекстовогоПоиска = Ложь, + ОтображатьПеречисления = Ложь, Знач Фильтр = "", ОтображатьОбработки = Ложь, ОтображатьОтчеты = Ложь, ОтображатьПерерасчеты = Ложь, ОтображатьРегламентныеЗадания = Ложь, + ОтображатьСетевыеСервисы = Ложь, ОтображатьРоли = Ложь) Экспорт + + лСтруктураПараметров = ПараметрыВыбораОбъектаМетаданныхЛкс(ОтображатьСсылочныеОбъекты, ОтображатьВыборочныеТаблицы, ОтображатьРегистры, ОтображатьПоследовательности, + ОтображатьКонстанты, ОтображатьТабличныеЧасти, ОтображатьТаблицыИзменений, ОтображатьВнешниеИсточникиДанных, ЗапретитьВыбиратьСсылочныеОбъекты, ТолькоИспользованиеПолнотекстовогоПоиска, + ОтображатьПеречисления, ОтображатьОбработки, ОтображатьОтчеты, ОтображатьПерерасчеты, МножественныйВыбор, ОтображатьРегламентныеЗадания, ОтображатьСетевыеСервисы, ОтображатьРоли); + Форма = ПолучитьФормуВыбораОбъектаМетаданныхСтруктуройЛкс(ВладелецФормы, КлючУникальности, НачальноеЗначениеВыбора, лСтруктураПараметров, Фильтр); + Возврат Форма; + +КонецФункции + +Функция ПолучитьФормуВыбораОбъектаМетаданныхСтруктуройЛкс(Знач ВладелецФормы, Знач КлючУникальности, Знач НачальноеЗначениеВыбора, Знач лСтруктураПараметров, Знач Фильтр = "") Экспорт + + Форма = ирКэш.Получить().ПолучитьФорму("ВыборОбъектаМетаданных", ВладелецФормы, КлючУникальности); + лСтруктураПараметров.Вставить("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); + лСтруктураПараметров.Вставить("Фильтр", Фильтр); + Форма.НачальноеЗначениеВыбора = лСтруктураПараметров; + Возврат Форма; + +КонецФункции + +Функция ФормаВыбораКолонокБДЛкс(Знач ВладелецФормы, Знач НачальноеЗначениеВыбора = Неопределено, Знач Отбор = Неопределено, Знач МножественныйВыбор = Ложь, Знач КлючУникальности = Неопределено) Экспорт + + Форма = ПолучитьФормуЛкс("Обработка.ирКолонкиБД.Форма",, ВладелецФормы, КлючУникальности); + Форма.РежимВыбора = Истина; + Форма.ПараметрОтбор = Отбор; + Форма.МножественныйВыбор = МножественныйВыбор; + Форма.НачальноеЗначениеВыбора = НачальноеЗначениеВыбора; + Возврат Форма; + +КонецФункции + +Функция ФормаСтруктурыХраненияТаблицыБДЛкс() Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Если мПлатформа.мСтруктураХраненияБДСРазмерами = Неопределено Тогда + СтруктураХраненияСРазмерами = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирСтруктураХраненияБД"); + #Если Сервер И Не Сервер Тогда + СтруктураХраненияСРазмерами = Обработки.ирСтруктураХраненияБД.Создать(); + #КонецЕсли + мПлатформа.мСтруктураХраненияБДСРазмерами = СтруктураХраненияСРазмерами; + КонецЕсли; + СтруктураХраненияСРазмерами = мПлатформа.мСтруктураХраненияБДСРазмерами; + СтруктураХраненияСРазмерами.ПоказыватьРазмеры = Истина; + СтруктураХраненияСРазмерами.ОбщаяТаблицаИндексов = Ложь; // Так быстрее + СтруктураХраненияСРазмерами.ОбщаяТаблицаПолей = Ложь; // Так быстрее + Форма = мПлатформа.мСтруктураХраненияБДСРазмерами.ПолучитьФорму(,, "ПоОбъекту"); + Форма.ПараметрПоказыватьSDBL = Истина; + Форма.ПараметрПоказыватьСУБД = Истина; + Если Форма.Открыта() Тогда + Форма.Закрыть(); + КонецЕсли; + Возврат Форма; + +КонецФункции + +Функция ПараметрыВыбораОбъектаМетаданныхЛкс(ОтображатьСсылочныеОбъекты = Ложь, ОтображатьВыборочныеТаблицы = Ложь, ОтображатьРегистры = Ложь, ОтображатьПоследовательности = Ложь, + ОтображатьКонстанты = Ложь, ОтображатьТабличныеЧасти = Ложь, ОтображатьТаблицыИзменений = Ложь, ОтображатьВнешниеИсточникиДанных = Ложь, ЗапретитьВыбиратьСсылочныеОбъекты = Ложь, + ТолькоИспользованиеПолнотекстовогоПоиска = Ложь, ОтображатьПеречисления = Ложь, ОтображатьОбработки = Ложь, ОтображатьОтчеты = Ложь, ОтображатьПерерасчеты = Ложь, МножественныйВыбор = Ложь, + ОтображатьРегламентныеЗадания = Ложь, ОтображатьСетевыеСервисы = Ложь, ОтображатьРоли = Ложь, ОтображатьПодсистемы = Ложь, ОтображатьВиртуальныеТаблицы = Ложь) Экспорт + + Параметры = Новый Структура; + Параметры.Вставить("ОтображатьКонстанты", ОтображатьКонстанты); + Параметры.Вставить("ОтображатьВыборочныеТаблицы", ОтображатьВыборочныеТаблицы); + Параметры.Вставить("ОтображатьТаблицыИзменений", ОтображатьТаблицыИзменений); + Параметры.Вставить("ОтображатьТабличныеЧасти", ОтображатьТабличныеЧасти); + Параметры.Вставить("ОтображатьРегистры", ОтображатьРегистры); + Параметры.Вставить("ОтображатьПерерасчеты", ОтображатьПерерасчеты); + Параметры.Вставить("ОтображатьПоследовательности", ОтображатьПоследовательности); + Параметры.Вставить("ОтображатьСсылочныеОбъекты", ОтображатьСсылочныеОбъекты); + Параметры.Вставить("ОтображатьВнешниеИсточникиДанных", ОтображатьВнешниеИсточникиДанных); + Параметры.Вставить("ОтображатьПеречисления", ОтображатьПеречисления); + Параметры.Вставить("ОтображатьОбработки", ОтображатьОбработки); + Параметры.Вставить("ОтображатьОтчеты", ОтображатьОтчеты); + Параметры.Вставить("ТолькоИспользованиеПолнотекстовогоПоиска", ТолькоИспользованиеПолнотекстовогоПоиска); + Параметры.Вставить("ЗапретитьВыбиратьСсылочныеОбъекты", ЗапретитьВыбиратьСсылочныеОбъекты); + Параметры.Вставить("МножественныйВыбор", МножественныйВыбор); + Параметры.Вставить("ОтображатьРегламентныеЗадания", ОтображатьРегламентныеЗадания); + Параметры.Вставить("ОтображатьСетевыеСервисы", ОтображатьСетевыеСервисы); + Параметры.Вставить("ОтображатьРоли", ОтображатьРоли); + Параметры.Вставить("ОтображатьПодсистемы", ОтображатьПодсистемы); + Параметры.Вставить("ОтображатьВиртуальныеТаблицы", ОтображатьВиртуальныеТаблицы); + Возврат Параметры; + +КонецФункции + +Процедура ОбъектМетаданныхНачалоВыбораЛкс(Знач Элемент, Знач ПараметрыВыбораОбъектаМетаданных, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + ФормаВыбора = ПолучитьФормуВыбораОбъектаМетаданныхСтруктуройЛкс(,, ирОбщий.ДанныеЭлементаФормыЛкс(Элемент), ПараметрыВыбораОбъектаМетаданных); + РезультатВыбора = ФормаВыбора.ОткрытьМодально(); + Если РезультатВыбора <> Неопределено Тогда + ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, РезультатВыбора.ПолноеИмяОбъекта); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбъектМетаданныхОкончаниеВводаТекстаЛкс(Знач Элемент, Знач ПараметрыВыбораОбъектаМетаданных, Текст, Значение, СтандартнаяОбработка) Экспорт + + Если ЗначениеЗаполнено(Текст) Тогда + СтандартнаяОбработка = Ложь; + Значение = Новый СписокЗначений; + Если ирОбщий.ЛиТаблицаБДСуществуетЛкс(Текст) Тогда + Значение.Добавить(Текст); + Иначе + ФормаВыбора = ирКлиент.ПолучитьФормуВыбораОбъектаМетаданныхСтруктуройЛкс(Элемент,, ирОбщий.ДанныеЭлементаФормыЛкс(Элемент), ПараметрыВыбораОбъектаМетаданных, Текст); + РезультатВыбора = ФормаВыбора.ОткрытьМодально(); + Если РезультатВыбора <> Неопределено Тогда + Значение.Добавить(РезультатВыбора.ПолноеИмяОбъекта); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьФормуВыбораТаблицыСтруктурыБДЛкс(ЛиИменаБД, ИмяТаблицыХранения = "") Экспорт + + Форма = ирКлиент.ПолучитьФормуЛкс("Обработка.ирСтруктураХраненияБД.Форма",,, Истина); + Форма.РежимВыбора = Истина; + Форма.ПараметрИмяТаблицыХранения = ИмяТаблицыХранения; + Форма.ПараметрПоказыватьSDBL = Не ЛиИменаБД; + Форма.ПараметрПоказыватьСУБД = ЛиИменаБД; + Возврат Форма + +КонецФункции + +Функция РедактироватьАлгоритмЧерезСтрокуXMLЛкс(СтрокаXMLАлгоритма, ВнешниеПараметры = Неопределено, НаСервере = Ложь, ИмяАлгоритма = "", Знач ТекстНового = "") Экспорт + + СтруктураАлгоритма = ирОбщий.ОбъектИзСтрокиXMLЛкс(СтрокаXMLАлгоритма); + Результат = РедактироватьАлгоритмЧерезСтруктуруЛкс(СтруктураАлгоритма, ВнешниеПараметры,, НаСервере, ИмяАлгоритма, ТекстНового); + Если Результат Тогда + Если СтруктураАлгоритма = Неопределено Тогда + СтрокаXMLАлгоритма = ""; + Иначе + СтрокаXMLАлгоритма = ирОбщий.ОбъектВСтрокуXMLЛкс(СтруктураАлгоритма); + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Открыть редактирование текста алгоритма с параметрами в консоли кода +// Парамерты: +// СтруктураАлгоритма - Структура - возвращаемый +// "ТекстАлгоритма" - Строка - текст алгоритма, +// "ВнутренниеПараметры" - ТаблицаЗначений - таблица с конструктором НоваяТаблицаПараметровАлгоритмаЛкс с внутренними (значения определяются при редактировании) параметрами алгоритма; +// ВнешниеПараметры* - ТаблицаЗначений - таблица с конструктором НоваяТаблицаПараметровАлгоритмаЛкс с внешними (значения определяются при каждом выполнении) параметрами алгоритма; +// Методы* - ТаблицаЗначений - таблица с конструктором НоваяТаблицаМетодовПодсказкиЛкс с дополнительными методами доступными в алгоритме; +// Результат - Булево - принял ли изменения пользователь +Функция РедактироватьАлгоритмЧерезСтруктуруЛкс(СтруктураАлгоритма, ВнешниеПараметры = Неопределено, Методы = Неопределено, НаСервере = Ложь, ИмяАлгоритма = "", Знач ТекстНового = "") Экспорт + + #Если Сервер И Не Сервер Тогда + ВнешниеПараметры = Новый ТаблицаЗначений; + #КонецЕсли + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ОбработкаКонсольКода = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольКода"); + ФормаКонсоли = ОбработкаКонсольКода.ПолучитьФорму(); + Если ВнешниеПараметры <> Неопределено Тогда + КопияПараметров = ВнешниеПараметры.Скопировать(); + Если КопияПараметров.Колонки.Найти("ТаблицаСтруктурТипов") = Неопределено Тогда + КопияПараметров.Колонки.Добавить("ТаблицаСтруктурТипов"); + КонецЕсли; + Если КопияПараметров.Колонки.Найти("Значение") = Неопределено Тогда + КопияПараметров.Колонки.Добавить("Значение"); + КонецЕсли; + Если КопияПараметров.Колонки.Найти("Фиксированный") = Неопределено Тогда + КопияПараметров.Колонки.Добавить("Фиксированный"); + КонецЕсли; + Для Каждого СтрокаПараметра Из КопияПараметров Цикл + Если Истина + И ТипЗнч(СтрокаПараметра.ТипЗначения) = Тип("ОписаниеТипов") + И СтрокаПараметра.ТаблицаСтруктурТипов = Неопределено + Тогда + СтрокаПараметра.ТаблицаСтруктурТипов = мПлатформа.ТаблицаСтруктурТиповИзОписанияТипов(СтрокаПараметра.ТипЗначения); + КонецЕсли; + КонецЦикла; + КопияПараметров.ЗаполнитьЗначения(Истина, "Фиксированный"); + ФормаКонсоли.мСписокВнешнихПараметров = КопияПараметров; + КонецЕсли; + Если СтруктураАлгоритма <> Неопределено Тогда + Если СтруктураАлгоритма.Свойство("ТекстАлгоритма") Тогда + ФормаКонсоли.ПараметрТекст = СтруктураАлгоритма.ТекстАлгоритма; + КонецЕсли; + Если СтруктураАлгоритма.Свойство("ВнутренниеПараметры") Тогда + ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(СтруктураАлгоритма.ВнутренниеПараметры, КопияПараметров, Новый Структура("Вход", Истина)); + КонецЕсли; + Иначе + ФормаКонсоли.ПараметрТекст = ТекстНового; + КонецЕсли; + ФормаКонсоли.ПараметрНаСервере = НаСервере; + ФормаКонсоли.мМетоды = Методы; + ФормаКонсоли.мРежимРедактора = Истина; + ФормаКонсоли.мИмяАлгоритмаДляРедактора = ИмяАлгоритма; + ФормаКонсоли.ОткрытьМодально(); + РезультатФормы = ФормаКонсоли.РезультатФормы; + Результат = РезультатФормы <> Неопределено; + Если Результат Тогда + ВнутренниеПараметры = РезультатФормы.Параметры.Скопировать(Новый Структура("Вход, Фиксированный", Истина, Ложь), "Имя, Значение"); + Если Истина + И ВнутренниеПараметры.Количество() = 0 + И Не ЗначениеЗаполнено(РезультатФормы.Текст) + Тогда + СтруктураАлгоритма = Неопределено; + Иначе + СтруктураАлгоритма = Новый Структура("ТекстАлгоритма, ВнутренниеПараметры", РезультатФормы.Текст, ВнутренниеПараметры); + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Конструктор таблицы параметров алгоритма +// Результат - ТаблицаЗначений - колонки "Имя, Значение, Вход, Выход, ТипЗначения, Комментарий" +Функция НоваяТаблицаПараметровАлгоритмаЛкс() Экспорт + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("Значение"); + Результат.Колонки.Добавить("Вход", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("Выход", Новый ОписаниеТипов("Булево")); + Результат.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов")); + Результат.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ТаблицаСтруктурТипов"); + Возврат Результат; + +КонецФункции + +// Конструктор таблицы методов контекстной подсказки +// Результат - ТаблицаЗначений - колонки "Имя, ТипЗначения" +Функция НоваяТаблицаМетодовПодсказкиЛкс() Экспорт + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + Результат.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов")); + Результат.Колонки.Добавить("ТаблицаСтруктурТипов"); + Возврат Результат; + +КонецФункции + +Функция СтрокаСобытияАлгоритмНачалоВыбораЛкс(Знач СтрокаСобытия, НаСервере = Ложь) Экспорт + + АлгоритмИзменен = РедактироватьАлгоритмЧерезСтрокуXMLЛкс(СтрокаСобытия.Алгоритм, СтрокаСобытия.Параметры, НаСервере, СтрокаСобытия.СинонимСобытия); + Если СтрокаСобытия.Параметры.Колонки.Найти("Значение") <> Неопределено Тогда + СтрокаСобытия.Параметры.ЗаполнитьЗначения(, "Значение"); + КонецЕсли; + Если СтрокаСобытия.Владелец().Колонки.Найти("АлгоритмОбъект") <> Неопределено Тогда + СтрокаСобытия.АлгоритмОбъект = Неопределено; + КонецЕсли; + Если СтрокаСобытия.Владелец().Колонки.Найти("ТаблицаСтруктурТипов") <> Неопределено Тогда + СтрокаСобытия.Параметры.ЗаполнитьЗначения(Неопределено, "ТаблицаСтруктурТипов"); + КонецЕсли; + Возврат АлгоритмИзменен; + +КонецФункции + +Процедура ОформитьЯчейкуАлгоритмаВТабличномПолеЛкс(Знач ОформлениеСтроки, ИмяКолонки = "Алгоритм", ОтображатьКартинку = Ложь) Экспорт + + Если ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки[ИмяКолонки]) Тогда + СтруктураАлгоритма = ирОбщий.ОбъектИзСтрокиXMLЛкс(ОформлениеСтроки.ДанныеСтроки[ИмяКолонки],,, Ложь); + Если СтруктураАлгоритма <> Неопределено И СтруктураАлгоритма.Свойство("ТекстАлгоритма") Тогда + ОформлениеСтроки.Ячейки[ИмяКолонки].УстановитьТекст(СокрП(СтруктураАлгоритма.ТекстАлгоритма)); + КонецЕсли; + КонецЕсли; + Если ОтображатьКартинку Тогда + ОформлениеСтроки.Ячейки[ИмяКолонки].УстановитьКартинку(ирКэш.КартинкаПоИмениЛкс("ирАлгоритм")); + КонецЕсли; + +КонецПроцедуры + +// ИсторияФайлов - СписокЗначений +// Кнопки - КнопкиКоманднойПанели +Процедура ОбновитьПодменюИсторииФайловЛкс(ИсторияФайлов, Кнопки, ИмяДействия = "ОткрытьФайлИзИстории") Экспорт + + Кнопки.Очистить(); + ДлинаПредставления = 100; + ДействиеКнопки = Новый Действие(ИмяДействия); + Для Каждого СтрокаФайла Из ИсторияФайлов Цикл + Файл = Новый Файл(СтрокаФайла.Значение); + ДлинаПути = ДлинаПредставления - СтрДлина(Файл.Имя); + Представление = Лев(Файл.Имя, ДлинаПредставления); + Если ДлинаПути > 0 Тогда + Если ДлинаПути < СтрДлина(Файл.Путь) + 3 Тогда + Представление = Лев(Файл.Путь, ДлинаПути) + "…\" + Представление; + Иначе + Представление = Файл.Путь + Представление; + КонецЕсли; + КонецЕсли; + КнопкаФайла = Кнопки.Добавить("_" + Формат(ИсторияФайлов.Индекс(СтрокаФайла), "ЧГ=;ЧН="), ТипКнопкиКоманднойПанели.Действие, Представление, ДействиеКнопки); + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьФайлВИсториюФормыЛкс(СписокИстории, ЗначениеЭлемента, РазмерИстории = 20) Экспорт + + ЭлементИстории = СписокИстории.НайтиПоЗначению(ЗначениеЭлемента); + Если ЭлементИстории <> Неопределено Тогда + СписокИстории.Удалить(ЭлементИстории); + КонецЕсли; + СписокИстории.Вставить(0, ЗначениеЭлемента); + Пока СписокИстории.Количество() > РазмерИстории Цикл + СписокИстории.Удалить(РазмерИстории); + КонецЦикла; + +КонецПроцедуры + +Процедура УстановитьДоступностьПодменюЛкс(Знач Подменю, НоваяДоступность = Ложь) Экспорт + + Для Каждого Кнопка Из Подменю.Кнопки Цикл + Кнопка.Доступность = НоваяДоступность; + КонецЦикла; + +КонецПроцедуры + +Процедура ТекстВБуферОбменаОСЛкс(Знач Текст, ВариантПросмотра = "ВстроенныйЯзык") Экспорт + + // http://partners.v8.1c.ru/forum/thread.jsp?id=1075241#1075241 + Попытка + //Документ = ирКэш.Получить().СлужебноеПолеHtmlДокумента.Документ; // Так выбрасывается исключение после нескольких вызовов и сразу на 8.3.14+ + Документ = Новый COMОбъект("HTMLFILE"); // 10мс + Окно = Документ.parentWindow; + Окно.ClipboardData.SetData("Text", Текст); + Исключение + ОписаниеОшибки = ОписаниеОшибки(); // Для отладки + КонецПопытки; + Если ТекстИзБуфераОбменаОСЛкс() <> Текст Тогда + ОткрытьТекстЛкс(Текст,, ВариантПросмотра,,,, Истина); + КонецЕсли; + +Конецпроцедуры + +Функция ТекстИзБуфераОбменаОСЛкс() Экспорт + + // http://partners.v8.1c.ru/forum/thread.jsp?id=1075241#1075241 + Попытка + //Документ = ирКэш.Получить().СлужебноеПолеHtmlДокумента.Документ; // Так выбрасывается исключение после нескольких вызовов и сразу на 8.3.14+ + Документ = Новый COMОбъект("HTMLFILE"); // 10-20мс + Окно = Документ.parentWindow; + Результат = "" + Окно.ClipboardData.GetData("Text"); // Похоже здесь может вернуться не строка + Исключение + ОписаниеОшибки = ОписаниеОшибки(); // Для отладки + Результат = ""; + КонецПопытки; + Возврат Результат; + +КонецФункции + +Функция ЛиЕстьИнтерактивныйДоступКИнструментамЛкс() Экспорт + Возврат ПравоДоступа("Просмотр", Метаданные.Подсистемы.ИнструментыРазработчикаTormozit); +КонецФункции + +// . +// Параметры: +// Отбор - Структура, Отбор, *Неопределено - фиксированный отбор +// ИспользоватьДинамическийСписокИР - Булево, "Обычная" +Функция ОткрытьФормуСпискаЛкс(ИмяТаблицыИлиМДИлиТип, ФиксОтбор = Неопределено, ИспользоватьДинамическийСписокИР = Неопределено, ВладелецФормы = Неопределено, РежимВыбора = Ложь, + МножественныйВыбор = Ложь, ТекущаяСтрока = Неопределено, Модально = Ложь, ПользовательскийОтбор = Неопределено, ТекущаяКолонка = Неопределено, Знач КлючУникальности = Неопределено) Экспорт + + ФормаСписка = ПолучитьФормуСпискаЛкс(ИмяТаблицыИлиМДИлиТип, ФиксОтбор, ИспользоватьДинамическийСписокИР, ВладелецФормы, РежимВыбора, МножественныйВыбор, ТекущаяСтрока, ПользовательскийОтбор, + КлючУникальности, ТекущаяКолонка); + Если ФормаСписка = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Если Модально Тогда + Если ФормаСписка.Открыта() Тогда + ФормаСписка = ПолучитьФормуСпискаЛкс(ИмяТаблицыИлиМДИлиТип, ФиксОтбор, ИспользоватьДинамическийСписокИР, ВладелецФормы, РежимВыбора, МножественныйВыбор, ТекущаяСтрока, ПользовательскийОтбор, + Новый УникальныйИдентификатор, ТекущаяКолонка); + КонецЕсли; + Результат = ФормаСписка.ОткрытьМодально(); + Возврат Результат; + Иначе + ФормаСписка.Открыть(); + Возврат ФормаСписка; + КонецЕсли; + +КонецФункции + +// . +// Параметры: +// Отбор - Структура, Отбор, *Неопределено +// ИспользоватьДинамическийСписокИР - Булево, "Обычная" +Функция ПолучитьФормуСпискаЛкс(Знач ИмяТаблицыИлиМДИлиТип, Знач ФиксОтбор = Неопределено, Знач ИспользоватьДинамическийСписокИР = Неопределено, Знач ВладелецФормы = Неопределено, Знач РежимВыбора = Ложь, + Знач МножественныйВыбор = Ложь, Знач ТекущаяСтрока = Неопределено, Знач ПользовательскийОтбор = Неопределено, Знач КлючУникальности = Неопределено, Знач ТекущаяКолонка = Неопределено) Экспорт + + мПлатформа = ирКэш.Получить(); + Если ТипЗнч(ИмяТаблицыИлиМДИлиТип) = Тип("ОбъектМетаданных") Тогда + ИмяТаблицы = ИмяТаблицыИлиМДИлиТип.ПолноеИмя(); + ИначеЕсли ТипЗнч(ИмяТаблицыИлиМДИлиТип) = Тип("Тип") Тогда + ИмяТаблицы = ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(ИмяТаблицыИлиМДИлиТип); + Иначе + ИмяТаблицы = ИмяТаблицыИлиМДИлиТип; + КонецЕсли; + ТипТаблицы = ирОбщий.ТипТаблицыБДЛкс(ИмяТаблицы); + //МассивФрагментов = ирОбщий.СтрРазделитьЛкс(ПолноеИмяМД); + ТаблицеНедоступенОбычныйДинамическийСписок = Ложь + Или ирОбщий.ЛиТипВложеннойТаблицыБДЛкс(ТипТаблицы) + Или ТипТаблицы = "Изменения" + Или ТипТаблицы = "Перерасчет" + //Или ТипТаблицы = "Точки" // В обычной форме динамического списка ИР эмулируется через таблицу значений + Или ТипТаблицы = "Внешняя" + Или ТипТаблицы = "ВиртуальнаяТаблица"; + Если Истина + И ирКэш.ЛиПортативныйРежимЛкс() + И Не ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() + И ТаблицеНедоступенОбычныйДинамическийСписок + Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Для таблицы %1 динамический список в режиме обычного приложения не предусмотрен",, ИмяТаблицы)); + ФормаСписка = ирКлиент.ПолучитьФормуЛкс("Обработка.ирПодборИОбработкаОбъектов.Форма",,, ИмяТаблицы); + Возврат ФормаСписка; + КонецЕсли; + Если ИспользоватьДинамическийСписокИР = Неопределено Тогда + ИспользоватьДинамическийСписокИР = ирОбщий.ИспользованиеДинамическогоСпискаВместоОсновнойФормыЛкс(ИмяТаблицы); + КонецЕсли; + Если Ложь + Или ТаблицеНедоступенОбычныйДинамическийСписок + Или (Истина + // Потому что у форм списков регистров режим выбора можно включить только через основной элемент управления + И РежимВыбора = Истина + И ирОбщий.ЛиКорневойТипРегистраБДЛкс(ТипТаблицы)) + Тогда + ИспользоватьДинамическийСписокИР = Истина; + КонецЕсли; + Если ИспользоватьДинамическийСписокИР = Неопределено Тогда + Ответ = Вопрос("Хотите использовать Динамический список (ИР)?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + ИспользоватьДинамическийСписокИР = Ответ = КодВозвратаДиалога.Да; + КонецЕсли; + Если ПользовательскийОтбор <> Неопределено Тогда + ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; + ПользовательскийОтборКомпоновки = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных")); + Если ТипЗнч(ПользовательскийОтбор) = Тип("Отбор") Тогда + Для Каждого ЭлементОтбора Из ПользовательскийОтбор Цикл + Если ЭлементОтбора.Использование Тогда + СтрокаВидаСравнения = мПлатформа.СоответствиеВидовСравнения.Найти(ЭлементОтбора.ВидСравнения, "Построитель"); + Если СтрокаВидаСравнения = Неопределено Тогда + // %%%% Здесь можно добавить интеллекта + Продолжить; + КонецЕсли; + ЭлементОтбора = ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ПользовательскийОтборКомпоновки, ЭлементОтбора.Имя, ЭлементОтбора.Значение, СтрокаВидаСравнения.Компоновка); + ирОбщий.ПроверитьВключитьЭлементНастроекКомпоновкиВПользовательскиеНастройки(ЭлементОтбора); + КонецЕсли; + КонецЦикла; + Иначе + ирОбщий.СкопироватьОтборЛюбойЛкс(ПользовательскийОтборКомпоновки, ПользовательскийОтбор); + КонецЕсли; + // Важно: установка идентификатора должна выполняться в конце настройки элемента, + // иначе он будет скопирован в пользовательские настройки частично заполненным. + // Идентификатор установлен экспериментально https://partners.v8.1c.ru/forum/t/1644571/m/1644571, также подтвержден тут http://forum.infostart.ru/forum9/topic163501/message2246750/#message2246750 + ирОбщий.ПроверитьВключитьЭлементНастроекКомпоновкиВПользовательскиеНастройки(ПользовательскийОтборКомпоновки, "dfcece9d-5077-440b-b6b3-45a5cb4538eb"); + КонецЕсли; + Если ТипЗнч(ФиксОтбор) = Тип("Отбор") Тогда + СтруктураОтбора = Новый Структура; + Для Каждого ЭлементОтбора Из ФиксОтбор Цикл + Если ЭлементОтбора.Использование Тогда + Если ЭлементОтбора.ВидСравнения = ВидСравнения.Равно Тогда + СтруктураОтбора.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Иначе + СтруктураОтбора = ФиксОтбор; + КонецЕсли; + ПараметрыФормы = Новый Структура("РежимВыбора, МножественныйВыбор, ЗакрыватьПриВыборе, ТекущаяСтрока, Отбор, ПользовательскиеНастройки, ТекущаяКолонка", + РежимВыбора, МножественныйВыбор, Не МножественныйВыбор, ТекущаяСтрока, СтруктураОтбора, ПользовательскиеНастройки, ТекущаяКолонка); + МожноИспользоватьДинамическийСписокИР = Истина; + #Если ТолстыйКлиентОбычноеПриложение Тогда + МожноИспользоватьДинамическийСписокИР = Ложь + Или Не ТаблицеНедоступенОбычныйДинамическийСписок + Или Не ирКэш.ЛиПортативныйРежимЛкс(); + #КонецЕсли + Если Истина + И ИспользоватьДинамическийСписокИР <> Ложь + И МожноИспользоватьДинамическийСписокИР + Тогда + КлючУникальности = ирОбщий.КлючУникальностиДинамическогоСпискаЛкс(ИмяТаблицы, КлючУникальности); + ПараметрыФормы.Вставить("ИмяТаблицы", ИмяТаблицы); + //Если Не РежимВыбора Тогда + // КлючУникальности = Новый УникальныйИдентификатор; + //КонецЕсли; + Если ТаблицеНедоступенОбычныйДинамическийСписок Тогда + ТипФормы = "Управляемая"; + ИначеЕсли ИспользоватьДинамическийСписокИР = "Обычная" Тогда + ТипФормы = "Обычная"; + Иначе + ТипФормы = Неопределено; + КонецЕсли; + ФормаСписка = ФормаДинамическогоСпискаЛкс(ПараметрыФормы, ВладелецФормы, КлючУникальности, ТипФормы); + Если ТипЗнч(ФормаСписка) = Тип("Форма") Тогда + ФормаСписка.РежимВыбора = РежимВыбора; // Чтобы заголовок сразу правильный сформировался + ФормаСписка.УстановитьОбъектМетаданных(ИмяТаблицы); + //Попытка + // ФормаСписка.ПараметрВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы; // Такого параметра у этой формы нет + //Исключение + //КонецПопытки; + КонецЕсли; + ОтборДинамическогоСписка = ФормаСписка.Отбор(); + ПользовательскийОтборДинамическогоСписка = ФормаСписка.ПользовательскийОтбор(); + Иначе + Если РежимВыбора Тогда + Попытка + ФормаСписка = ПолучитьФормуЛкс(ИмяТаблицы + ".ФормаВыбора", ПараметрыФормы, ВладелецФормы, КлючУникальности); + Исключение + // Например у регистров нет форм выбора + КонецПопытки; + КонецЕсли; + Если ФормаСписка = Неопределено Тогда + ФормаСписка = ПолучитьФормуЛкс(ИмяТаблицы + ".ФормаСписка", ПараметрыФормы, ВладелецФормы, КлючУникальности); + КонецЕсли; + Если ТипЗнч(ФормаСписка) = Тип("Форма") Тогда + Попытка + ОтборДинамическогоСписка = ФормаСписка.Отбор; + Исключение + КонецПопытки; + ПользовательскийОтборДинамическогоСписка = ОтборДинамическогоСписка; + КонецЕсли; + КонецЕсли; + Если ТипЗнч(ФормаСписка) = Тип("Форма") Тогда + ФормаСписка.РежимВыбора = РежимВыбора; + ФормаСписка.ЗакрыватьПриВыборе = Не МножественныйВыбор; + ФормаСписка.НачальноеЗначениеВыбора = ТекущаяСтрока; + Попытка + ФормаСписка.МножественныйВыбор = МножественныйВыбор; + Исключение + // Есть не у всех форм + КонецПопытки; + Попытка + ФормаСписка.ПараметрТекущаяСтрока = ТекущаяСтрока; + Исключение + // Есть не у всех форм + КонецПопытки; + Попытка + ФормаСписка.ПараметрТекущаяКолонка = ТекущаяКолонка; + Исключение + // Есть не у всех форм + КонецПопытки; + КонецЕсли; + Если Истина + И ОтборДинамическогоСписка <> Неопределено + И ФиксОтбор <> Неопределено + Тогда + ирОбщий.СкопироватьОтборЛюбойЛкс(ОтборДинамическогоСписка, ФиксОтбор,, Истина); + КонецЕсли; + Если Истина + И ПользовательскийОтборДинамическогоСписка <> Неопределено + И ПользовательскийОтбор <> Неопределено + Тогда + ирОбщий.СкопироватьОтборЛюбойЛкс(ПользовательскийОтборДинамическогоСписка, ПользовательскийОтбор); + КонецЕсли; + Возврат ФормаСписка; + +КонецФункции + +Функция ФормаДинамическогоСпискаЛкс(ПараметрыФормы = Неопределено, ВладелецФормы = Неопределено, КлючУникальности = Неопределено, Знач ТипФормы = Неопределено) Экспорт + + ИмяФормы = "Обработка.ирДинамическийСписок.Форма"; + Если Истина + И Не ирКэш.ЛиПортативныйРежимЛкс() + И (Ложь + Или ТипФормы = "Управляемая" + Или ТипФормы = Неопределено И Не ирКэш.Получить().НеИспользоватьУправляемыеФормыИнструментов) + Тогда + ИмяФормы = ИмяФормы + ".ФормаУпр"; + Иначе + ИмяФормы = ИмяФормы + ".Форма"; + КонецЕсли; + Если ПараметрыФормы = Неопределено Тогда + ПараметрыФормы = Новый Структура; + КонецЕсли; + ПараметрыФормы.Вставить("КлючУникальности", КлючУникальности); + ФормаСписка = ПолучитьФормуЛкс(ИмяФормы, ПараметрыФормы, ВладелецФормы, КлючУникальности); + Возврат ФормаСписка; + +КонецФункции + +Процедура ПолеФайловогоКаталога_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + ВыборФайла.Каталог = Элемент.Значение; + Если Не ВыборФайла.Выбрать() Тогда + Возврат; + КонецЕсли; + ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, ВыборФайла.Каталог); + +КонецПроцедуры + +Функция ОткрытьСсылкуВСпискеЛкс(Ссылка) Экспорт + + ПолноеИмяМД = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя(); + СтруктураПараметры = Новый Структура; + СтруктураПараметры.Вставить("ТекущаяСтрока", Ссылка); + ФормаСписка = ПолучитьФормуЛкс(ПолноеИмяМД + ".ФормаСписка", СтруктураПараметры, , Новый УникальныйИдентификатор); + ФормаСписка.Открыть(); + Возврат ФормаСписка; + +КонецФункции + +// ИменаКолонок - Строка - имена колонок через запятую +Процедура ТабличноеПолеОтобразитьФлажкиЛкс(ОформлениеСтроки, Знач ИменаКолонок) Экспорт + + Если ТипЗнч(ИменаКолонок) = Тип("Строка") Тогда + ИменаКолонок = ирОбщий.СтрРазделитьЛкс(ИменаКолонок, ",", Истина); + КонецЕсли; + Для Каждого ИмяКолонки Из ИменаКолонок Цикл + Ячейка = ОформлениеСтроки.Ячейки[ИмяКолонки]; + //Если Ячейка.ТолькоПросмотр Тогда + // Продолжить; + //КонецЕсли; + Если ТипЗнч(Ячейка.Значение) = Тип("Булево") Тогда + Ячейка.УстановитьФлажок(Ячейка.Значение); + Ячейка.УстановитьТекст(""); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ТабличноеПолеПриИзмененииФлажкаЛкс(Этаформа, ТабличноеПоле, Знач Колонка, Знач КнопкаРежимаОтбораПомеченных = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + Если ТипЗнч(Колонка.ЭлементУправления) = Тип("ПолеВвода") Тогда + ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(ТабличноеПоле.ТекущаяСтрока); + Ячейка = ОформлениеСтроки.Ячейки[Колонка.Имя]; + Если Не Ячейка.ТолькоПросмотр Тогда + Если Истина + И Колонка.Данные = "" + И Колонка.ДанныеФлажка = "" + Тогда + Колонка.ЭлементУправления.Значение = Не Ячейка.Значение; + //ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(Элемент, Колонка, Не ОформлениеСтроки.Ячейки[Колонка.Имя].Значение); + Иначе + //МетаданныеТипа = глПолучитьМетаданныеТипа(ТипЗнч(Элемент.Значение), "ТипСписка", Истина); + //РедактированиеВДиалоге = Ложь; + //Если Истина + // И МетаданныеТипа <> Неопределено + // И МетаданныеТипа.КлассМетаданных.Предок = оСсылочный + //Тогда + // Попытка + // ВыбранныйСпособРедактирования = Элемент.СпособРедактирования; + // Исключение + // КонецПопытки; + // РедактированиеВДиалоге = ВыбранныйСпособРедактирования <> СпособРедактированияСписка.ВСписке; + //КонецЕсли; + //РазрешитьИзменение = Истина; + //Если РедактированиеВДиалоге Тогда + //Иначе + //Элемент.ЗакончитьРедактированиеСтроки(Ложь); + ТабличноеПоле.ИзменитьСтроку(); + ЗначениеЯчейки = Колонка.ЭлементУправления.Значение; + Если ТипЗнч(ЗначениеЯчейки) = Тип("Булево") Тогда + //ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(Элемент, Колонка, Не ЗначениеЯчейки, , , Ложь); // Так возникает рассогласование флажка и данных в колонке формы ИсследовательКоллекций + ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, Не ЗначениеЯчейки, , , Ложь, Ложь); + //Элемент.ТекущаяКолонка = Колонка; + КонецЕсли; + ТабличноеПоле.ЗакончитьРедактированиеСтроки(Ложь); + ТабличноеПолеОбновитьТекстыПодваловЛкс(ЭтаФорма, ТабличноеПоле); + //КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Истина + И КнопкаРежимаОтбораПомеченных <> Неопределено + И ТабличноеПоле.Значение.Найти(Истина, Колонка.Данные) = Неопределено + Тогда + // Сняли последний флажок. Надо снять отбор по нему + КнопкаРежимаОтбораПомеченных.Пометка = Ложь; + ТабличноеПоле.ОтборСтрок[Колонка.Данные].Использование = Ложь; + КонецЕсли; + +КонецПроцедуры + +Функция СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма, КлючНазначенияИспользования = "", Знач ЗагружатьСохранятьНастройкуПоУмолчанию = Истина, ПараметрыЗагрузкиНастройкиПоУмолчанию = Неопределено, + РасширениеФайла = "", СоставНастройкиФормы = Неопределено) Экспорт + + СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + #Если Сервер И Не Сервер Тогда + СлужебныеДанныеФормы = Новый Структура; + #КонецЕсли + МенеджерСохраненияНастроек = Новый Структура("СохраненныеНастройки, ПоследняяНастройка, КлючНастроек, ЗагружатьСохранятьНастройкуПоУмолчанию, РасширениеФайла, СоставНастройкиФормы"); + МенеджерСохраненияНастроек.КлючНастроек = ирОбщий.КлючХраненияНастроекФормыЛкс(ЭтаФорма) + ".Настройки"; + МенеджерСохраненияНастроек.ЗагружатьСохранятьНастройкуПоУмолчанию = ЗагружатьСохранятьНастройкуПоУмолчанию; + МенеджерСохраненияНастроек.РасширениеФайла = РасширениеФайла; + МенеджерСохраненияНастроек.СоставНастройкиФормы = СоставНастройкиФормы; + Если ЗначениеЗаполнено(КлючНазначенияИспользования) Тогда + МенеджерСохраненияНастроек.КлючНастроек = МенеджерСохраненияНастроек.КлючНастроек + "." + КлючНазначенияИспользования; + КонецЕсли; + МенеджерСохраненияНастроек.КлючНастроек = Лев(МенеджерСохраненияНастроек.КлючНастроек, 128); + СохраненныеНастройкиНовые = Новый ТаблицаЗначений; + СохраненныеНастройкиНовые.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + СохраненныеНастройкиНовые.Колонки.Добавить("Значение"); + СохраненныеНастройкиНовые.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); + СохраненныеНастройкиНовые.Колонки.Добавить("ДатаИзменения", Новый ОписаниеТипов("Дата")); + МенеджерСохраненияНастроек.СохраненныеНастройки = СохраненныеНастройкиНовые; + СлужебныеДанныеФормы.МенеджерСохраненияНастроек = МенеджерСохраненияНастроек; + Попытка + СчитанныеСохраненныеНастройки = ирОбщий.ВосстановитьЗначениеЛкс(МенеджерСохраненияНастроек.КлючНастроек); + Если СчитанныеСохраненныеНастройки = Неопределено Тогда + СтарыйКлючХранения = ирОбщий.КлючХраненияНастроекФормыЛкс(ЭтаФорма) + ".СохраненныеНастройки"; + СчитанныеСохраненныеНастройки = ирОбщий.ВосстановитьЗначениеЛкс(СтарыйКлючХранения); + Если СчитанныеСохраненныеНастройки <> Неопределено Тогда + ирОбщий.УдалитьХранимуюНастройкуЛкс(СтарыйКлючХранения); + КонецЕсли; + КонецЕсли; + Если ТипЗнч(СчитанныеСохраненныеНастройки) = Тип("ТаблицаЗначений") Тогда + Для Каждого СтрокаСтаройНастройки Из СчитанныеСохраненныеНастройки Цикл + Если СтрокаСтаройНастройки.Значение <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(СохраненныеНастройкиНовые.Добавить(), СтрокаСтаройНастройки); + КонецЕсли; + КонецЦикла; + КонецЕсли; + ЗагрузитьНастройкуФормыПоУмолчаниюЛкс(ЭтаФорма, Не ЗагружатьСохранятьНастройкуПоУмолчанию, ПараметрыЗагрузкиНастройкиПоУмолчанию); + Исключение + ирОбщий.СообщитьЛкс(ОписаниеОшибки(), СтатусСообщения.Внимание); + Ответ = Вопрос("При загрузке последней настройки """ + ирОбщий.ПервыйФрагментЛкс(ЭтаФорма.Заголовок, ":") + """ возникла ошибка. Хотите загрузить пустую настройку?", РежимДиалогаВопрос.ОКОтмена); + Если Ответ = КодВозвратаДиалога.ОК Тогда + ЗагрузитьНастройкуФормыПоУмолчаниюЛкс(ЭтаФорма, Истина, ПараметрыЗагрузкиНастройкиПоУмолчанию); + Иначе + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + +КонецФункции + +Процедура ЗагрузитьНастройкуФормыПоУмолчаниюЛкс(Знач ЭтаФорма, Знач ЗагрузитьПустуюНастройку = Ложь, Знач ПараметрыЗагрузкиНастройкиПоУмолчанию = Неопределено) Экспорт + + Если ЗагрузитьПустуюНастройку Тогда + НастройкаФормы = Неопределено; + Иначе + МенеджерСохраненияНастроек = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; + НастройкаПоУмолчанию = ПолучитьНастройкуПоУмолчаниюИзСпискаСохраненныхНастроекЛкс(МенеджерСохраненияНастроек.СохраненныеНастройки); + Если НастройкаПоУмолчанию.Значение = Неопределено Тогда + СохранитьНастройкуФормыЛкс(ЭтаФорма); + НастройкаПоУмолчанию = ПолучитьНастройкуПоУмолчаниюИзСпискаСохраненныхНастроекЛкс(МенеджерСохраненияНастроек.СохраненныеНастройки); + КонецЕсли; + НастройкаФормы = НастройкаПоУмолчанию.Значение; + КонецЕсли; + //ПоследняяНастройка = МенеджерСохраненияНастроек.СохраненныеНастройки.Индекс(НастройкаПоУмолчанию); + ЗагрузитьНастройкуФормыЧерезОбработчикЛкс(ЭтаФорма, НастройкаФормы, ПараметрыЗагрузкиНастройкиПоУмолчанию); + +КонецПроцедуры + +Процедура ЗагрузитьНастройкуФормыЧерезОбработчикЛкс(Знач ЭтаФорма, Знач НастройкаФормы, Знач ПараметрыЗагрузкиНастройкиПоУмолчанию = Неопределено) Экспорт + + Если ПараметрыЗагрузкиНастройкиПоУмолчанию = Неопределено Тогда + ПараметрыЗагрузкиНастройкиПоУмолчанию = Новый Структура; + КонецЕсли; + Если Форма_ВводДоступенЛкс(ЭтаФорма) Тогда + МенеджерСохраненияНастроек = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; + СоставНастройкиФормы = МенеджерСохраненияНастроек.СоставНастройкиФормы; + Если СоставНастройкиФормы <> Неопределено Тогда + #Если Сервер И Не Сервер Тогда + СоставНастройкиФормы = Новый СписокЗначений; + #КонецЕсли + Если Не СоставНастройкиФормы.ОтметитьЭлементы("Выберите состав загружаемой настройки") Тогда + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ПараметрыЗагрузкиНастройкиПоУмолчанию.Вставить("СоставНастройкиФормы", СоставНастройкиФормы); + Если ирОбщий.МетодРеализованЛкс(ЭтаФорма, "ЗагрузитьНастройкуВФорме") Тогда + ЭтаФорма.ЗагрузитьНастройкуВФорме(НастройкаФормы, ПараметрыЗагрузкиНастройкиПоУмолчанию); + Иначе + ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗагрузитьНастройкуФормыЛкс(Знач ЭтаФорма, Знач НастройкаФормы, БелыеСвойства = Неопределено, ЧерныеСвойства = Неопределено, ЗагружатьОстальные = Истина) Экспорт + + #Если Сервер И Не Сервер Тогда + БелыеСвойства = Новый Структура; + ЧерныеСвойства = Новый Структура; + #КонецЕсли + Если НастройкаФормы = Неопределено Тогда + Возврат; + КонецЕсли; + //ЗаполнитьЗначенияСвойств(ЭтаФорма, НастройкаФормы); + Для Каждого КлючИЗначение Из НастройкаФормы Цикл + Если Ложь + Или Не ЕстьСвойствоОбъектаЛкс(ЭтаФорма, КлючИЗначение.Ключ) + Или (Истина + И ЧерныеСвойства <> Неопределено + И ЧерныеСвойства.Свойство(КлючИЗначение.Ключ)) + Или (Истина + И БелыеСвойства <> Неопределено + И Не БелыеСвойства.Свойство(КлючИЗначение.Ключ) + И Не ЗагружатьОстальные) + Тогда + Продолжить; + КонецЕсли; + ТипЗначения = ТипЗнч(ЭтаФорма[КлючИЗначение.Ключ]); + Если ирОбщий.ЛиТабличнаяЧастьЛкс(ТипЗначения) Тогда + Если КлючИЗначение.Значение = Неопределено Тогда + ЭтаФорма[КлючИЗначение.Ключ].Очистить(); + Иначе + ЭтаФорма[КлючИЗначение.Ключ].Загрузить(КлючИЗначение.Значение); + КонецЕсли; + ИначеЕсли ТипЗначения = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + ЭтаФорма[КлючИЗначение.Ключ].ЗагрузитьНастройки(КлючИЗначение.Значение); + ИначеЕсли ТипЗначения = Тип("ТаблицаЗначений") Тогда + ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(КлючИЗначение.Значение, ЭтаФорма[КлючИЗначение.Ключ],,, Истина); + ИначеЕсли ТипЗначения = Тип("ДеревоЗначений") Тогда + ирОбщий.ЗагрузитьВДеревоЗначенийЛкс(КлючИЗначение.Значение, ЭтаФорма[КлючИЗначение.Ключ],,, Истина); + Иначе + ЗначениеСвойства = КлючИЗначение.Значение; + ЗначениеСвойства = ирОбщий.КопияОбъектаЛкс(ЗначениеСвойства); + ЭтаФорма[КлючИЗначение.Ключ] = ЗначениеСвойства; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура СохранитьНастройкуФормыЛкс(Знач ЭтаФорма) Экспорт + + МенеджерСохраненияНастроек = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; + Если МенеджерСохраненияНастроек <> Неопределено И МенеджерСохраненияНастроек.ЗагружатьСохранятьНастройкуПоУмолчанию Тогда + НастройкаПоУмолчанию = ПолучитьНастройкуПоУмолчаниюИзСпискаСохраненныхНастроекЛкс(МенеджерСохраненияНастроек.СохраненныеНастройки); + НастройкаПоУмолчанию.Значение = СохраняемаяНастройкаФормыЛкс(ЭтаФорма); + ирОбщий.СохранитьЗначениеЛкс(МенеджерСохраненияНастроек.КлючНастроек, МенеджерСохраненияНастроек.СохраненныеНастройки); + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьНастройкуПоУмолчаниюИзСпискаСохраненныхНастроекЛкс(СписокСохраненныхНастроек) Экспорт + + ИмяОсновнойНастройки = "Основная"; + СтрокаСписка = СписокСохраненныхНастроек.Найти(Истина, "Пометка"); + Если СтрокаСписка = Неопределено Тогда + СтрокаСписка = СписокСохраненныхНастроек.Найти(ИмяОсновнойНастройки, "Представление"); + КонецЕсли; + Если СтрокаСписка = Неопределено Тогда + СтрокаСписка = СписокСохраненныхНастроек.Добавить(); + СтрокаСписка.Представление = ИмяОсновнойНастройки; + КонецЕсли; + СтрокаСписка.Пометка = Истина; + Возврат СтрокаСписка; + +КонецФункции + +Функция ВыбратьИСохранитьНастройкуФормыЛкс(ЭтаФорма) Экспорт + + МенеджерСохраненияНастроек = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; + НовоеНаименование = Неопределено; + СохраняемаяНастройкаФормы = СохраняемаяНастройкаФормыЛкс(ЭтаФорма, НовоеНаименование); + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаСохраненияНастройки = мПлатформа.ПолучитьФорму("ВыборНастройкиДляСохранения"); + ФормаСохраненияНастройки.НачальноеЗначениеВыбора = МенеджерСохраненияНастроек.ПоследняяНастройка; + ФормаСохраненияНастройки.НовоеНаименование = НовоеНаименование; + Если МенеджерСохраненияНастроек.СохраненныеНастройки <> Неопределено Тогда + ФормаСохраненияНастройки.СписокНастроек = МенеджерСохраненияНастроек.СохраненныеНастройки; + КонецЕсли; + ТекущиеДанные = ФормаСохраненияНастройки.ОткрытьМодально(); + МенеджерСохраненияНастроек.СохраненныеНастройки = ФормаСохраненияНастройки.СписокНастроек; + МенеджерСохраненияНастроек.ПоследняяНастройка = ФормаСохраненияНастройки.НачальноеЗначениеВыбора; + Если ТекущиеДанные <> Неопределено Тогда + ТекущиеДанные.Значение = СохраняемаяНастройкаФормы; + КонецЕсли; + СохранитьНастройкуФормыЛкс(ЭтаФорма); + +КонецФункции + +// Параметры: +// КопироватьЗначения - Булево - Ложь сильно ускоряет +// +// Параметры: +// ЭтаФорма - Форма - +// выхНовоеНаименование - Строка - +// ПорогТаблицыЗначений - Число - Чтобы не засорять БД +// +// Возвращаемое значение: +// - +// +Функция СохраняемаяНастройкаФормыЛкс(Знач ЭтаФорма, выхНовоеНаименование = "", ПорогТаблицыЗначений = 100000) Экспорт + + выхНовоеНаименование = ""; + ИменаСвойств = ""; + СохраняемаяНастройкаФормы = ЭтаФорма.СохраняемаяНастройкаФормы(выхНовоеНаименование, ИменаСвойств); + Если ЗначениеЗаполнено(ИменаСвойств) Тогда + Если СохраняемаяНастройкаФормы = Неопределено Тогда + СохраняемаяНастройкаФормы = Новый Структура; + КонецЕсли; + ИменаСвойств = СтрЗаменить(ИменаСвойств, "Реквизит.", ""); + ИменаСвойств = СтрЗаменить(ИменаСвойств, "Форма.", ""); + ИменаСвойств = СтрЗаменить(ИменаСвойств, "Табличная часть.", ""); + МассивИмен = ирОбщий.СтрРазделитьЛкс(ИменаСвойств, ",", Истина, Ложь); + ЗначенияСвойств = Новый Структура(); + Для Каждого ИмяСвойства Из МассивИмен Цикл + Если Не ЗначениеЗаполнено(ИмяСвойства) Или СохраняемаяНастройкаФормы.Свойство(ИмяСвойства) Тогда + Продолжить; + КонецЕсли; + ЗначенияСвойств.Вставить(ИмяСвойства); + ТипЗначения = ТипЗнч(ЭтаФорма[ИмяСвойства]); + Если ирОбщий.ЛиТабличнаяЧастьЛкс(ТипЗначения) Тогда + ЗначенияСвойств[ИмяСвойства] = ЭтаФорма[ИмяСвойства].Выгрузить(); + ИначеЕсли ТипЗначения = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + ЗначенияСвойств[ИмяСвойства] = ЭтаФорма[ИмяСвойства].ПолучитьНастройки(); + Иначе + ЗначениеСвойства = ЭтаФорма[ИмяСвойства]; + ЗначениеСвойства = ирОбщий.КопияОбъектаЛкс(ЗначениеСвойства); + ЗначенияСвойств[ИмяСвойства] = ЗначениеСвойства; + КонецЕсли; + Если ТипЗнч(ЗначенияСвойств[ИмяСвойства]) = Тип("ТаблицаЗначений") Тогда + ТаблицаЗначений = ЗначенияСвойств[ИмяСвойства]; + Если ТаблицаЗначений.Количество() > ПорогТаблицыЗначений Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Сохраняемая таблица %1 настройки формы обрезана %2 -> %3 строк",, ИмяСвойства, 2, ТаблицаЗначений.Количество(), 3, ПорогТаблицыЗначений)); + Пока ТаблицаЗначений.Количество() > ПорогТаблицыЗначений Цикл + ТаблицаЗначений.Удалить(ТаблицаЗначений.Количество() - 1); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(ЗначенияСвойств, СохраняемаяНастройкаФормы); + КонецЕсли; + Возврат СохраняемаяНастройкаФормы; + +КонецФункции + +Функция ВыбратьИЗагрузитьНастройкуФормыЛкс(ЭтаФорма) Экспорт + + МенеджерСохраненияНастроек = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; + Если МенеджерСохраненияНастроек.СохраненныеНастройки = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Если Не ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма) Тогда + ирОбщий.СообщитьЛкс("Нельзя выполнять загрузку настроек, пока форма выполняет фоновые задания"); + Возврат Неопределено; + КонецЕсли; + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаСохраненияНастройки = мПлатформа.ПолучитьФорму("ВыборНастройкиДляЗагрузки"); + ФормаСохраненияНастройки.НачальноеЗначениеВыбора = МенеджерСохраненияНастроек.ПоследняяНастройка; + Если МенеджерСохраненияНастроек.СохраненныеНастройки <> Неопределено Тогда + ФормаСохраненияНастройки.СписокНастроек = МенеджерСохраненияНастроек.СохраненныеНастройки; + КонецЕсли; + ТекущиеДанные = ФормаСохраненияНастройки.ОткрытьМодально(); + МенеджерСохраненияНастроек.СохраненныеНастройки = ФормаСохраненияНастройки.СписокНастроек; + МенеджерСохраненияНастроек.ПоследняяНастройка = ФормаСохраненияНастройки.НачальноеЗначениеВыбора; + Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Значение <> Неопределено Тогда + ЗагрузитьНастройкуФормыЧерезОбработчикЛкс(ЭтаФорма, ТекущиеДанные.Значение); + КонецЕсли; + СохранитьНастройкуФормыЛкс(ЭтаФорма); + +КонецФункции + +Функция КартинкаТипаЛкс(Тип) Экспорт + + ИмяОбщегоТипа = Неопределено; + ПоляПоиска = "ИД"; + КлючПоиска = Новый Структура(ПоляПоиска); + КлючПоиска.ИД = ирОбщий.ИдентификаторТипаЛкс(Тип); + //КлючПоиска.ТипТипа = "Основной"; + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + мПлатформа.ИнициализацияОписанияОбщихТипов(); + //ирОбщий.ДобавитьИндексВТаблицуЛкс(мПлатформа.ТаблицаОбщихТипов, ПоляПоиска); + НайденныеСтроки = мПлатформа.ТаблицаОбщихТипов.НайтиСтроки(КлючПоиска); + Если НайденныеСтроки.Количество() > 0 Тогда + ИмяОбщегоТипа = НайденныеСтроки[0].Слово; + Иначе + //СтруктураТипа = ирКэш.Получить().СтруктураТипаИзКонкретногоТипа(Тип); + //ИмяОбщегоТипа = СтруктураТипа.ИмяОбщегоТипа; + ОбъектМД = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМД <> Неопределено Тогда + ТекущееИмяТипа = ОбъектМД.ПолноеИмя(); + ИмяОбщегоТипа = ирОбщий.ПервыйФрагментЛкс(ТекущееИмяТипа); + КонецЕсли; + КонецЕсли; + Картинка = Неопределено; + Если ИмяОбщегоТипа <> Неопределено Тогда + ИмяКартинки = "ир" + ирОбщий.ПервыйФрагментЛкс(ИмяОбщегоТипа); + Картинка = ирКэш.КартинкаПоИмениЛкс(ИмяКартинки); + Если Картинка.Вид = ВидКартинки.Пустая Тогда + ИмяКартинки = ИмяОбщегоТипа; + Попытка + Картинка = БиблиотекаКартинок[ИмяКартинки]; + Исключение + Картинка = ирКэш.КартинкаПоИмениЛкс("ирНеизвестныйТип"); + КонецПопытки; + КонецЕсли; + КонецЕсли; + Возврат Картинка; + +КонецФункции + +Функция ПрочитатьДополнительныеПоляСсылающихсяОбъектовЛкс(Знач ТабличноеПоле, Знач КомпоновщикДопПолей, Знач ТаблицаДанных = Неопределено, ИмяПоляСсылки = "Данные") Экспорт + + #Если Сервер И Не Сервер Тогда + КомпоновщикДопПолей = Новый КомпоновщикНастроекКомпоновкиДанных; + #КонецЕсли + Если ТаблицаДанных = Неопределено Тогда + ТаблицаДанных = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + КонецЕсли; + КомпоновщикДопПолей.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное); + МассивДопПолей = Новый Структура(); + ДопустимоеЧислоДопПолей = 5; + Счетчик = 1; + СтрокаПорядка = ""; + СтрокаВыбора = ""; + Для Каждого ПолеПорядка Из КомпоновщикДопПолей.Настройки.Порядок.Элементы Цикл + Если ПолеПорядка.Использование Тогда + ИмяПоля = "" + ПолеПорядка.Поле; + ИмяКолонки = "Реквизит" + Счетчик; + ДоступноеПоле = КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.НайтиПоле(ПолеПорядка.Поле); + Если Счетчик > ДопустимоеЧислоДопПолей Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Дополнительное поле %1 пропущено, т.к. допускается не более %2 полей",, ДоступноеПоле.Заголовок, 2, ДопустимоеЧислоДопПолей)); + Продолжить; + КонецЕсли; + МассивДопПолей.Вставить(ИмяКолонки, ИмяПоля); + КолонкаТП = ТабличноеПоле.Колонки[ИмяКолонки]; + КолонкаТП.Видимость = Истина; + КолонкаТП.ТекстШапки = ДоступноеПоле.Заголовок; + Если СтрокаПорядка <> "" Тогда + СтрокаПорядка = СтрокаПорядка + ","; + КонецЕсли; + СтрокаПорядка = СтрокаПорядка + ИмяКолонки + " "; + Если ПолеПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда + СтрокаПорядка = СтрокаПорядка + "Возр"; + Иначе + СтрокаПорядка = СтрокаПорядка + "Убыв"; + КонецЕсли; + СтрокаВыбора = СтрокаВыбора + ", + | Т." + ИмяПоля + " КАК " + ИмяКолонки; + Счетчик = Счетчик + 1; + КонецЕсли; + КонецЦикла; + Если Не ЗначениеЗаполнено(СтрокаПорядка) Тогда + СтрокаПорядка = "Дата"; + КонецЕсли; + Для Счетчик = Счетчик По ДопустимоеЧислоДопПолей Цикл + ИмяКолонки = "Реквизит" + Счетчик; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + КолонкаТП = ТабличноеПоле.ПодчиненныеЭлементы[ТабличноеПоле.Имя + ИмяКолонки]; + Иначе + КолонкаТП = ТабличноеПоле.Колонки[ИмяКолонки]; + КонецЕсли; + КолонкаТП.Видимость = Ложь; + КонецЦикла; + + СтандартныеРеквизиты = Новый Структура; + СтандартныеРеквизиты.Вставить("ПометкаУдаления", "ЛОЖЬ"); + СтандартныеРеквизиты.Вставить("Проведен", "ЛОЖЬ"); + СтандартныеРеквизиты.Вставить("ЭтоГруппа", "ЛОЖЬ"); + СтандартныеРеквизиты.Вставить("Дата", "ДАТАВРЕМЯ(1,1,1)"); + Для Каждого КлючИЗначение Из СтандартныеРеквизиты Цикл + ИмяРеквизита = КлючИЗначение.Ключ; + Если КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.НайтиПоле(Новый ПолеКомпоновкиДанных("Объект." + ИмяРеквизита)) = Неопределено Тогда + Продолжить; + КонецЕсли; + СтрокаВыбора = СтрокаВыбора + ", + | ЕСТЬNULL(Т.Объект." + ИмяРеквизита + ", " + КлючИЗначение.Значение + ") КАК " + ИмяРеквизита; + КонецЦикла; + Если ТипЗнч(ТаблицаДанных) <> Тип("ТаблицаЗначений") Тогда + //КопияТаблицыДанных = ТаблицаДанных.Выгрузить(, ИмяПоляСсылки); + КопияТаблицыДанных = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле); + Иначе + КопияТаблицыДанных = ТаблицаДанных; + КонецЕсли; + КопияТаблицыДанных = ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(КопияТаблицыДанных,, ИмяПоляСсылки); + #Если Сервер И Не Сервер Тогда + КопияТаблицыДанных = Новый ТаблицаЗначений; + #КонецЕсли + ОписаниеТиповСсылки = КопияТаблицыДанных.Колонки[ИмяПоляСсылки].ТипЗначения; + ПорцияОбъектов = Новый ТаблицаЗначений; + ПорцияОбъектов.Колонки.Добавить("Объект", ОписаниеТиповСсылки); + ПорцияОбъектов.Колонки.Добавить("Индекс", Новый ОписаниеТипов("Число")); + РазмерПорции = 10000; + КоличествоПорций = Цел(ТаблицаДанных.Количество() / РазмерПорции) + 1; + Запрос = Новый Запрос; + ТекстЗапроса = " + |ВЫБРАТЬ Т.* ПОМЕСТИТЬ Т ИЗ &Т КАК Т; + |ВЫБРАТЬ Т.Объект, Т.Индекс" + СтрокаВыбора + " + |ИЗ Т КАК Т"; + Запрос.Текст = ТекстЗапроса; + ИндексСтроки = 0; + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоличествоПорций, "Чтение дополнительных полей"); + ДоступноеПолеОбъект = КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.НайтиПоле(Новый ПолеКомпоновкиДанных("Объект")); + Для СчетчикПорций = 1 По КоличествоПорций Цикл + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + ПорцияОбъектов.Очистить(); + Для Счетчик = 1 По РазмерПорции Цикл + Если ИндексСтроки = ТаблицаДанных.Количество() Тогда + Прервать; + КонецЕсли; + СтрокаОбъекта = ТаблицаДанных[ИндексСтроки]; + ИндексСтроки = ИндексСтроки + 1; + Если Ложь + Или ТипЗнч(СтрокаОбъекта[ИмяПоляСсылки]) = Тип("Строка") + Или СтрокаОбъекта[ИмяПоляСсылки] = Неопределено + Или ДоступноеПолеОбъект = Неопределено + Или Не ДоступноеПолеОбъект.ТипЗначения.СодержитТип(ТипЗнч(СтрокаОбъекта[ИмяПоляСсылки])) + Тогда + СтрокаОбъекта.ИндексКартинки = 12; // Регистр сведений + Продолжить; + КонецЕсли; + СтрокаПорции = ПорцияОбъектов.Добавить(); + СтрокаПорции.Объект = СтрокаОбъекта[ИмяПоляСсылки]; + СтрокаПорции.Индекс = ИндексСтроки - 1; + КонецЦикла; + Запрос.УстановитьПараметр("Т", ПорцияОбъектов); + РезультатЗапроса = Запрос.Выполнить(); + РеквизитыПорции = РезультатЗапроса.Выгрузить(); + Для Каждого СтрокаПорции Из РеквизитыПорции Цикл + СтрокаОбъекта = ТаблицаДанных[СтрокаПорции.Индекс]; + СтрокаОбъекта.ИндексКартинки = ирОбщий.ПолучитьИндексКартинкиСсылкиЛкс(СтрокаПорции.Объект, Истина, СтрокаПорции); + ЗаполнитьЗначенияСвойств(СтрокаОбъекта, СтрокаПорции); + КонецЦикла; + КонецЦикла; + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); + + СтрокаПорядка = "Метаданные," + СтрокаПорядка; + Возврат СтрокаПорядка; + +КонецФункции + +Процедура ОбновитьДоступныеПоляДляДополнительныхПолейЛкс(Знач ТаблицаДанных, Знач КомпоновщикДопПолей, Знач ТабличноеПолеДоступныхПолей) Экспорт + + //Если КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.Элементы.Количество() = 0 Тогда + Если ТипЗнч(ТаблицаДанных) = Тип("ТаблицаЗначений") Тогда + ПолныеИменаМД = ТаблицаДанных.Скопировать(, "Метаданные"); + Иначе + ПолныеИменаМД = ТаблицаДанных.Выгрузить(, "Метаданные"); + КонецЕсли; + ПолныеИменаМД.Свернуть("Метаданные"); + ПолныеИменаМД = ПолныеИменаМД.ВыгрузитьКолонку(0); + МассивТипов = Новый Массив(); + Для Каждого ПолноеИмяМД Из ПолныеИменаМД Цикл + Если ТипЗнч(ПолноеИмяМД) = Тип("ОбъектМетаданных") Тогда + ПолноеИмяМД = ПолноеИмяМД.ПолноеИмя(); + КонецЕсли; + Попытка + Тип = Тип(ирОбщий.ИмяТипаИзПолногоИмениТаблицыБДЛкс(ПолноеИмяМД)); + Исключение + Продолжить; + КонецПопытки; + МассивТипов.Добавить(Тип); + КонецЦикла; + Если МассивТипов.Количество() > 0 Тогда + КоллекцияПолей = Новый Массив(); + КоллекцияПолей.Добавить(Новый Структура("Имя, ТипЗначения", "Объект", Новый ОписаниеТипов(МассивТипов))); + ТекстЗапроса = ирОбщий.ЗапросИмитаторКоллекцииПолейЛкс(КоллекцияПолей); + СхемаКомпоновки = ирОбщий.СоздатьСхемуКомпоновкиПоЗапросу(ТекстЗапроса); + Иначе + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + КонецЕсли; + Если ТипЗнч(ТабличноеПолеДоступныхПолей) = Тип("ТаблицаФормы") Тогда + ЭтаФорма = ирОбщий.РодительЭлементаУправляемойФормыЛкс(ТабличноеПолеДоступныхПолей); + ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(СхемаКомпоновки), ЭтаФорма.УникальныйИдентификатор); + Иначе + ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки); + КонецЕсли; + КомпоновщикДопПолей.Инициализировать(ИсточникДоступныхНастроек); + Если КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.Элементы.Количество() > 0 Тогда + #Если Клиент И Не Сервер Тогда + ТабличноеПолеДоступныхПолей.Развернуть(КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.Элементы[0]); + #КонецЕсли + КонецЕсли; + //КонецЕсли; + +КонецПроцедуры + +// ИменаКолонок - Строка - имена колонок через запятую +Процедура ТабличноеПолеОтобразитьПиктограммыТиповЛкс(ОформлениеСтроки, ИменаКолонок) Экспорт + + Если ТипЗнч(ИменаКолонок) = Тип("Строка") Тогда + ИменаКолонок = ирОбщий.СтрРазделитьЛкс(ИменаКолонок, ",", Истина); + КонецЕсли; + Для Каждого ИмяКолонки Из ИменаКолонок Цикл + Ячейка = ОформлениеСтроки.Ячейки.Найти(ИмяКолонки); + //:Ячейка = Новый("ОформлениеЯчейки") + Если Ячейка <> Неопределено Тогда + ДанныеКартинки = Ячейка.Значение; + Если ТипЗнч(ДанныеКартинки) = Тип("ПолеКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + СсылкаКартинка = Неопределено; + ТипЗначения = ТипЗнч(ДанныеКартинки); + Если Истина + И ТипЗначения = Тип("Булево") + И Ячейка.ОтображатьФлажок + Тогда + Продолжить; + КонецЕсли; + КартинкаТипа = КартинкаТипаЛкс(ТипЗначения); + Если КартинкаТипа <> Неопределено Тогда + Ячейка.УстановитьКартинку(КартинкаТипа); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ОткрытьТекущуюСтрокуТабличногоПоляТаблицыБДВРедактореОбъектаБДЛкс(ТабличноеПоле, ПолноеИмяМД = Неопределено, ДоступныеПоляВыбора = Неопределено, Связанный = Ложь, + ФормаРедактора = Неопределено, ОбъектыНаСервере = Неопределено, ДляНабораЗаписейРегистраСведений = Истина, ПриОтсутствииСтрокиОткрытьНовыйОбъект = Ложь, + ИмяКолонкиДанных = Неопределено, Знач НайденныеСсылки = Неопределено, Знач ВладелецФормы = Неопределено) Экспорт + + ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; + Если Не ПриОтсутствииСтрокиОткрытьНовыйОбъект И ТекущаяСтрока = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + Если ПолноеИмяМД = Неопределено Тогда + ПолноеИмяМД = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле).ОсновнаяТаблица; + КонецЕсли; + Если ИмяКолонкиДанных = Неопределено Тогда + ТекущаяКолонка = ТабличноеПоле.ТекущийЭлемент; + Если ТекущаяКолонка <> Неопределено Тогда + ИмяКолонкиДанных = ирОбщий.ПутьКДаннымЭлементаУправляемойФормыЛкс(ТекущаяКолонка, Истина); + КонецЕсли; + КонецЕсли; + Иначе + Если ПолноеИмяМД = Неопределено Тогда + ПолноеИмяМД = Метаданные.НайтиПоТипу(ТипЗнч(ТабличноеПоле.Значение)).ПолноеИмя(); + КонецЕсли; + Если ИмяКолонкиДанных = Неопределено Тогда + ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка; + Если ТекущаяКолонка <> Неопределено Тогда + ИмяКолонкиДанных = ТекущаяКолонка.Данные; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Истина + И ИмяКолонкиДанных <> Неопределено + И (Ложь + Или ДоступныеПоляВыбора = Неопределено + Или ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных(ИмяКолонкиДанных)) <> Неопределено) + Тогда + ИмяКолонки = ИмяКолонкиДанных; + Иначе + ИмяКолонки = ""; + КонецЕсли; + ПолноеИмяТаблицы = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД,, Ложь); + ТипТаблицы = ирОбщий.ТипТаблицыБДЛкс(ПолноеИмяТаблицы); + ЭтоТаблицаИзменений = ТипТаблицы = "Изменения"; + Если ЭтоТаблицаИзменений Тогда + ПолноеИмяТаблицы = ирОбщий.СтрокаБезПоследнегоФрагментаЛкс(ПолноеИмяТаблицы); + КонецЕсли; + КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяТаблицы); + Если ирОбщий.ЛиКорневойТипКонстантыЛкс(КорневойТип) Тогда + КлючОбъекта = ирОбщий.КлючОбъектаКонстантыЛкс(ирОбщий.ПоследнийФрагментЛкс(ПолноеИмяМД)); + ОткрытьРедакторОбъектаБДЛкс(ПолноеИмяТаблицы,, Связанный, КлючОбъекта, ОбъектыНаСервере,,, ФормаРедактора,,,,, ВладелецФормы); + Иначе + Если Не ДляНабораЗаписейРегистраСведений И ирОбщий.ЛиКлючЗаписиРегистраЛкс(ТабличноеПоле.ТекущаяСтрока) Тогда + ДанныеСтрокиТаблицы = ТабличноеПоле.ТекущаяСтрока; // Так обходим проблему неполных ключей из-за функциональных опций и прочего + Иначе + ДанныеСтрокиТаблицы = ТабличноеПоле.ТекущиеДанные; + КонецЕсли; + Если ЭтоТаблицаИзменений Тогда + АктивироватьУзел = ДанныеСтрокиТаблицы.Узел; + КонецЕсли; + Если ДанныеСтрокиТаблицы <> Неопределено Тогда + КлючОбъекта = ирОбщий.КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицы, ДанныеСтрокиТаблицы, ДляНабораЗаписейРегистраСведений,, ОбъектыНаСервере); + КонецЕсли; + Если КлючОбъекта = Неопределено Тогда + Если Ложь + Или ирОбщий.ЛиКорневойТипСсылкиЛкс(КорневойТип) + Или ирОбщий.ЛиКорневойТипЖурналаДокументовЛкс(КорневойТип) + Тогда + Если ТекущаяСтрока <> Неопределено Тогда + ТипКлюча = ТипЗнч(ТекущаяСтрока.Ссылка); + Иначе + Фрагменты = ирОбщий.СтрРазделитьЛкс(ПолноеИмяМД); // Тут может быть имя ТЧ + ТипКлюча = Тип(ирОбщий.ИмяТипаИзПолногоИмениМДЛкс(Фрагменты[0] + "." + Фрагменты[1])); + КонецЕсли; + КлючОбъекта = Новый (ТипКлюча); + ПолноеИмяТаблицы = Метаданные.НайтиПоТипу(ТипКлюча).ПолноеИмя(); + Иначе + КлючОбъекта = ирОбщий.ОбъектБДПоКлючуЛкс(ПолноеИмяТаблицы,,, Ложь, ОбъектыНаСервере); + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ПолноеИмяМД) Тогда + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + СтрокиПоиска = Новый Структура; + СхемаИНастройки = ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(ирОбщий.РодительЭлементаУправляемойФормыЛкс(ТабличноеПоле)); + Если СхемаИНастройки <> Неопределено Тогда + НастройкиСписка = СхемаИНастройки.Настройки; + Иначе + НастройкиСписка = ирОбщий.НастройкиДинамическогоСпискаЛкс(ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле)); + КонецЕсли; + Для Каждого ЭлементОтбора Из ирОбщий.ВсеЭлементыИерарихииНастроекКомпоновкиЛкс(НастройкиСписка.Отбор,, Истина) Цикл + Если Истина + И ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит + Тогда + ирОбщий.ДобавитьСловаПоискаВСтруктуруРеквизитовЛкс(ирОбщий.ПервыйФрагментЛкс(ЭлементОтбора.ЛевоеЗначение), ЭлементОтбора.ПравоеЗначение, СтрокиПоиска); + КонецЕсли; + КонецЦикла; + Иначе + СтрокиПоиска = СловаПоискаПоКолонкамИзОтбораПостроителяЛкс(ТабличноеПоле); + КонецЕсли; + КонецЕсли; + ОткрытьРедакторОбъектаБДЛкс(ПолноеИмяТаблицы, ИмяКолонки, Связанный, КлючОбъекта, ОбъектыНаСервере, ТабличноеПоле.ТекущиеДанные, ТабличноеПоле.ТекущаяСтрока, ФормаРедактора, + НайденныеСсылки, СтрокиПоиска,, АктивироватьУзел, ВладелецФормы); + КонецЕсли; + Возврат ФормаРедактора; + +КонецФункции + +Функция ОтборТабличногоПоляЛкс(Знач ТабличноеПоле) Экспорт + + Попытка + Отбор = ТабличноеПоле.ОтборСтрок; + Исключение + Попытка + Отбор = ТабличноеПоле.Значение.Отбор; + Исключение + КонецПопытки; + КонецПопытки; + Возврат Отбор; + +КонецФункции + +Функция ОткрытьРедакторОбъектаБДЛкс(ПолноеИмяТаблицы, Знач ИмяРеквизита = "", Знач Связанный = Ложь, Знач КлючОбъекта = Неопределено, Знач ОбъектыНаСервере = Неопределено, + Знач ДанныеСтрокиТаблицы = Неопределено, КлючУникальностиНовойФормы = Неопределено, ФормаРедактора = Неопределено, Знач НайденныеСсылки = Неопределено, Знач СтрокиПоиска = Неопределено, + Знач ПоказатьСвязанныеКолонкиБД = Ложь, Знач АктивироватьУзел = Неопределено, Знач ВладелецФормы = Неопределено) Экспорт + + Если ФормаРедактора = Неопределено Тогда + КлючУникальности = КлючУникальностиНовойФормы; + Если Связанный Тогда + КлючУникальности = "Связанный"; + КонецЕсли; + ФормаРедактора = ПолучитьФормуЛкс("Обработка.ирРедакторОбъектаБД.Форма",,, КлючУникальности); + КонецЕсли; + Фрагменты = ирОбщий.СтрРазделитьЛкс(ПолноеИмяТаблицы); + Если ирОбщий.ЛиКорневойТипСсылкиЛкс(Фрагменты[0]) Тогда + ИмяОсновнойТаблицы = Фрагменты[0] + "." + Фрагменты[1]; + Иначе + ИмяОсновнойТаблицы = ПолноеИмяТаблицы; + КонецЕсли; + Если КлючОбъекта <> Неопределено Тогда + Если Не ФормаРедактора.Открыта() Тогда + ПараметрыФормы = Новый Структура("ПараметрКлючИлиОбъект, ПараметрПрочитатьОбъект", КлючОбъекта, Истина); + ЗаполнитьЗначенияСвойств(ФормаРедактора.фОбъект, ПараметрыФормы); + Иначе + ФормаРедактора.ЗагрузитьОбъектПоКлючу(КлючОбъекта); + КонецЕсли; + Иначе + ФормаРедактора.УстановитьТаблицуБД(ИмяОсновнойТаблицы); + КонецЕсли; + БылаОткрыта = ФормаРедактора.Открыта(); + ФормаРедактора.ПараметрСтрокиПоиска = СтрокиПоиска; + Форма_АктивироватьОткрытьЛкс(ФормаРедактора); + Если НайденныеСсылки <> Неопределено Тогда + ФормаРедактора.НайтиИПоказатьСсылкиВФорме(НайденныеСсылки, Не БылаОткрыта); + КонецЕсли; + СтруктураЛокальногоКлючаСтроки = Неопределено; + Если ДанныеСтрокиТаблицы <> Неопределено Тогда + ирОбщий.КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицы, ДанныеСтрокиТаблицы, Истина, СтруктураЛокальногоКлючаСтроки, ОбъектыНаСервере); + КонецЕсли; + Если Ложь + Или ЗначениеЗаполнено(ИмяРеквизита) + Или СтруктураЛокальногоКлючаСтроки <> Неопределено + Тогда + ФормаРедактора.ПоказатьЯчейкуДанныхОбъекта(ПолноеИмяТаблицы, ИмяРеквизита, СтруктураЛокальногоКлючаСтроки, Ложь); + КонецЕсли; + Если ПоказатьСвязанныеКолонкиБД Тогда + ФормаРедактора.ПоказатьСвязанныеКолонкиБД(); + КонецЕсли; + Если ЗначениеЗаполнено(АктивироватьУзел) Тогда + ФормаРедактора.АктивироватьУзел(АктивироватьУзел); + КонецЕсли; + Возврат ФормаРедактора; + +КонецФункции + +Процедура Форма_АктивироватьОткрытьЛкс(Знач Форма) Экспорт + + Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда + НужноОткрытьФорму = ТипЗнч(Форма) = Тип("Форма"); // Антибаг платформы https://www.hostedredmine.com/issues/923135 + Иначе + НужноОткрытьФорму = Не Форма.Открыта(); + КонецЕсли; + Если НужноОткрытьФорму Тогда + Форма.Открыть(); // В открытой форме платформа при этом тоже выполняет перерисовку табличных текущих страниц панелей формы + Иначе + Форма.Активизировать(); + КонецЕсли; + +КонецПроцедуры + +Функция _КонтрольРазмераВыборкиПользователемЛкс(ЗапросИлиПостроитель, МаксимальноеЧислоСтрок = 500000) Экспорт + + КоличествоСтрокРезультата = ирКэш.Получить().ПолучитьГрубоКоличествоСтрокВРезультатеЗапроса(ЗапросИлиПостроитель); + Если Истина + И ТипЗнч(КоличествоСтрокРезультата) = Тип("Число") + И КоличествоСтрокРезультата > МаксимальноеЧислоСтрок + Тогда + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("Все", "Все"); + Кнопки.Добавить("Часть", "Первые " + Формат(МаксимальноеЧислоСтрок, "ЧГ=")); + Ответ = Вопрос("Загружаемая таблица содержит " + КоличествоСтрокРезультата + " строк. Сколько строк загружать?", Кнопки, , "Часть"); + //Если Ответ <> КодВозвратаДиалога.ОК Тогда + // Возврат; + //КонецЕсли; + Если Ответ = "Все" Тогда + МаксимальноеЧислоСтрок = 0; + КонецЕсли; + Иначе + МаксимальноеЧислоСтрок = 0; + КонецЕсли; + Возврат МаксимальноеЧислоСтрок; + +КонецФункции + +Процедура ОбновитьСтатистикуПоТаблицеОбъектаМДВРезультатеПакетаЛкс(РезультатПакета, ПолноеИмяМД, ИмяКлючевойКолонки = "ПолноеИмяОбъекта", ИмяКолонкиКоличества = "КоличествоСтрок", ЛиТаблицыИзменений = Ложь, + СтруктураОтбора = Неопределено, ТолькоРазрешенные = Истина) Экспорт + + ТекстЗапроса = ирОбщий.ПолучитьТекстЗапросаСтатистикиПоТаблицеЛкс(ПолноеИмяМД, ИмяКлючевойКолонки, ИмяКолонкиКоличества, ЛиТаблицыИзменений, СтруктураОтбора, ТолькоРазрешенные); + Если Не ЗначениеЗаполнено(ТекстЗапроса) Тогда + // В запрос попали только недоступные таблицы + Возврат; + КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); + Если СтруктураОтбора <> Неопределено Тогда + ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураОтбора, Запрос.Параметры); + КонецЕсли; + СтруктураКлюча = Новый Структура(ИмяКлючевойКолонки); + КолонкиКоличества = Новый Массив(); + КолонкиКоличества.Добавить(ИмяКолонкиКоличества); + Если ЛиТаблицыИзменений Тогда + СтруктураКлюча.Вставить("Узел"); + КолонкиКоличества.Добавить("КоличествоВыгруженных"); + КолонкиКоличества.Добавить("КоличествоНевыгруженных"); + КонецЕсли; + СтатистикаПоТаблице = Запрос.Выполнить().Выгрузить(); + СтатистикаПоТаблице.Колонки.Добавить("Найдена", Новый ОписаниеТипов("булево")); + Для Каждого ЭлементПакета Из РезультатПакета Цикл + СтрокиРезультата = ЭлементПакета.НайтиСтроки(Новый Структура(ИмяКлючевойКолонки, ПолноеИмяМД)); + Если СтрокиРезультата.Количество() > 0 Тогда + Для Каждого СтрокаРезультата Из СтрокиРезультата Цикл + ЗаполнитьЗначенияСвойств(СтруктураКлюча, СтрокаРезультата); + Для Каждого ИмяКолонкиКоличества Из КолонкиКоличества Цикл + СтрокаРезультата[ИмяКолонкиКоличества] = 0; + КонецЦикла; + Для Каждого СтрокаСтатистики Из СтатистикаПоТаблице.НайтиСтроки(СтруктураКлюча) Цикл + СтрокаСтатистики.Найдена = Истина; + Для Каждого ИмяКолонкиКоличества Из КолонкиКоличества Цикл + СтрокаРезультата[ИмяКолонкиКоличества] = СтрокаСтатистики[ИмяКолонкиКоличества]; + КонецЦикла; + КонецЦикла; + КонецЦикла; + Прервать; + КонецЕсли; + КонецЦикла; + Для Каждого СтрокаСтатистики Из СтатистикаПоТаблице.НайтиСтроки(Новый Структура("Найдена", Ложь)) Цикл + СтрокаРезультата = ЭлементПакета.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаРезультата, СтрокаСтатистики); + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоМетаданных, РезультатПакета = Неопределено, ИмяКлючевойКолонки = "ПолноеИмяОбъекта", + СуммируемыеКолонки = "КоличествоСтрок", СтруктураОтбора = Неопределено, КлючеваяКолонкаСодержитИмяТаблицы = Ложь) Экспорт + + #Если Сервер И Не Сервер Тогда + ДеревоМетаданных = Новый ДеревоЗначений + #КонецЕсли + ВсеСтрокиДерева = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ДеревоМетаданных); + СтруктураСуммируемыхКолонок = Новый Структура(СуммируемыеКолонки); + МассивСуммируемыхКолонок = Новый Массив(); + Для Каждого КлючИЗначение Из СтруктураСуммируемыхКолонок Цикл + МассивСуммируемыхКолонок.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + Для Каждого СтрокаДерева Из ВсеСтрокиДерева Цикл + Для Каждого ИмяСуммируемойКолонки Из МассивСуммируемыхКолонок Цикл + СтрокаДерева[ИмяСуммируемойКолонки] = Неопределено; + КонецЦикла; + КонецЦикла; + Если РезультатПакета = Неопределено Тогда + ТаблицаКоличества = ирКэш.ТаблицаВсехТаблицБДЛкс(); + Если КлючеваяКолонкаСодержитИмяТаблицы Тогда + ИмяКлючевойКолонкиИсточника = "ПолноеИмя"; + Иначе + ИмяКлючевойКолонкиИсточника = "ПолноеИмяМД"; + КонецЕсли; + ИмяСуммируемойКолонки = "КоличествоСтрок"; + Иначе + ИмяСуммируемойКолонки = МассивСуммируемыхКолонок[0]; + ИмяКлючевойКолонкиИсточника = ИмяКлючевойКолонки; + Для Каждого ТаблицаРезультата Из РезультатПакета Цикл + Для Каждого СтрокаРезультата Из ТаблицаРезультата Цикл + Если ТаблицаКоличества = Неопределено Тогда + ТаблицаКоличества = ТаблицаРезультата.СкопироватьКолонки(); + ТаблицаКоличества.Колонки.Удалить(ИмяКлючевойКолонкиИсточника); + ТаблицаКоличества.Колонки.Добавить(ИмяКлючевойКолонкиИсточника); // Чтобы убрать ограничение на длину строки, которое может быть разным в результатах запросов пакета + КонецЕсли; + Если СтруктураОтбора <> Неопределено Тогда + ПодходитФильтру = Истина; + Для Каждого КлючИЗначение Из СтруктураОтбора Цикл + ЗначениеРезультата = СтрокаРезультата[КлючИЗначение.Ключ]; + Если ТипЗнч(КлючИЗначение.Значение) = Тип("Массив") Тогда + Если КлючИЗначение.Значение.Найти(ЗначениеРезультата) = Неопределено Тогда + ПодходитФильтру = Ложь; + Прервать; + КонецЕсли; + Иначе + Если КлючИЗначение.Значение <> ЗначениеРезультата Тогда + ПодходитФильтру = Ложь; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если Не ПодходитФильтру Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + ЗаполнитьЗначенияСвойств(ТаблицаКоличества.Добавить(), СтрокаРезультата); + КонецЦикла; + КонецЦикла; + КонецЕсли; + Если ТаблицаКоличества <> Неопределено Тогда + #Если Сервер И Не Сервер Тогда + ТаблицаКоличества = Новый ТаблицаЗначений; + #КонецЕсли + //Для Каждого СтрокаКоличества Из ТаблицаКоличества Цикл + // Если СтрокаКоличества[ИмяСуммируемойКолонки] = Неопределено Тогда + // Продолжить; + // КонецЕсли; + // СтрокаДерева = ДеревоМетаданных.Строки.Найти(СтрокаКоличества[ИмяКлючевойКолонкиИсточника], ИмяКлючевойКолонки, Истина); + // Если СтрокаДерева <> Неопределено Тогда + // Для Каждого ИмяСуммируемойКолонки Из МассивСуммируемыхКолонок Цикл + // ДобавитьКоличествоСтрокСРодителемЛкс(СтрокаДерева, СтрокаКоличества[ИмяСуммируемойКолонки], ИмяСуммируемойКолонки); + // КонецЦикла; + // КонецЕсли; + //КонецЦикла; + ирОбщий.ДобавитьИндексВТаблицуЛкс(ТаблицаКоличества, ИмяКлючевойКолонкиИсточника); + ИменаСуммируемыхКолонок = ирОбщий.СтрСоединитьЛкс(МассивСуммируемыхКолонок); + Для Каждого СтрокаДерева Из ВсеСтрокиДерева Цикл + СтрокаКоличества = ТаблицаКоличества.Скопировать(Новый Структура(ИмяКлючевойКолонкиИсточника, СтрокаДерева[ИмяКлючевойКолонки]), ИменаСуммируемыхКолонок); + Если СтрокаКоличества.Количество() > 0 Тогда + СтрокаКоличества.Свернуть(, ИменаСуммируемыхКолонок); + СтрокаКоличества = СтрокаКоличества[0]; + Если СтрокаКоличества[ИмяСуммируемойКолонки] <> Неопределено Тогда + Для Каждого ИмяКолонкиЦикл Из МассивСуммируемыхКолонок Цикл + ДобавитьКоличествоСтрокСРодителемЛкс(СтрокаДерева, СтрокаКоличества[ИмяКолонкиЦикл], ИмяКолонкиЦикл); + КонецЦикла; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьКоличествоСтрокСРодителемЛкс(Знач СтрокаДерева, Знач ДобавкаККоличеству, Знач ИмяСуммируемойКолонки = "КоличествоСтрок") Экспорт + + СтароеКоличество = СтрокаДерева[ИмяСуммируемойКолонки]; + Если СтароеКоличество = Неопределено Тогда + СтароеКоличество = 0; + КонецЕсли; + Если ТипЗнч(ДобавкаККоличеству) = Тип("Число") Тогда + НовоеКоличество = ?(ТипЗнч(СтрокаДерева[ИмяСуммируемойКолонки]) <> Тип("Число"), 0, СтрокаДерева[ИмяСуммируемойКолонки]) + ДобавкаККоличеству; + Иначе + НовоеКоличество = "?"; + КонецЕсли; + СтрокаДерева[ИмяСуммируемойКолонки] = НовоеКоличество; + Если СтрокаДерева.Уровень() > 1 Тогда + Возврат; + КонецЕсли; + Родитель = СтрокаДерева.Родитель; + Пока Родитель <> Неопределено Цикл + Если ТипЗнч(НовоеКоличество) <> Тип("Число") Тогда + Родитель[ИмяСуммируемойКолонки] = "?"; + КонецЕсли; + КоличествоРодителя = Родитель[ИмяСуммируемойКолонки]; + Если КоличествоРодителя = "?" Тогда + Прервать; + КонецЕсли; + Если ТипЗнч(КоличествоРодителя) <> Тип("Число") Тогда + КоличествоРодителя = 0; + КонецЕсли; + Родитель[ИмяСуммируемойКолонки] = КоличествоРодителя - СтароеКоличество + НовоеКоличество; + Родитель = Родитель.Родитель; + КонецЦикла; + +КонецПроцедуры + +Процедура ОбновитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоМетаданных, ИмяКлючевойКолонки = "ПолноеИмяОбъекта", ИмяКолонкиКоличества = "КоличествоСтрок", + ЛиТаблицыИзменений = Ложь, СтруктураОтбора = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ДеревоМетаданных = Новый ДеревоЗначений + #КонецЕсли + РезультатПакета = ирОбщий.ВычислитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоМетаданных, ИмяКлючевойКолонки, ИмяКолонкиКоличества, ЛиТаблицыИзменений, СтруктураОтбора); + ЗаполнитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоМетаданных, РезультатПакета, ИмяКлючевойКолонки, ИмяКолонкиКоличества); + +КонецПроцедуры + +Процедура УстановитьЗначениеКолонкиДереваЛкс(ДеревоЗначений, ИмяКолонки = "Пометка", НовоеЗначение = Истина) Экспорт + + ВсеСтроки = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ДеревоЗначений); + Для Каждого СтрокаДерева Из ВсеСтроки Цикл + СтрокаДерева.Пометка = НовоеЗначение; + КонецЦикла; + +КонецПроцедуры + +// НовыйРежим - Булево - Имя/Синоним +Процедура ТабличноеПолеОбновитьКолонкиИмяСинонимЛкс(ТабличноеПоле, НовыйРежим, ИмяКолонкиИмя = "Имя", ИмяКолонкиСиноним = "Представление") Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + КолонкиТП = ТабличноеПоле.Колонки; + КолонкаИмя = КолонкиТП[ИмяКолонкиИмя]; + КолонкаСиноним = КолонкиТП[ИмяКолонкиСиноним]; + КолонкаИмя.Видимость = НовыйРежим; + КолонкаСиноним.Видимость = Не НовыйРежим; + Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда + КолонкаИмя.ОтображатьИерархию = НовыйРежим; + КолонкаСиноним.ОтображатьИерархию = Не НовыйРежим; + КонецЕсли; + ИндексКолонкиИмя = КолонкиТП.Индекс(КолонкаИмя); + ИндексКолонкиСиноним = КолонкиТП.Индекс(КолонкаСиноним); + Если НовыйРежим = (ИндексКолонкиИмя > ИндексКолонкиСиноним) Тогда + КолонкиТП.Сдвинуть(КолонкаИмя, ИндексКолонкиСиноним - ИндексКолонкиИмя); + КонецЕсли; + Если НовыйРежим Тогда + ТабличноеПоле.ТекущаяКолонка = ТабличноеПоле.Колонки.Имя; + Иначе + ТабличноеПоле.ТекущаяКолонка = ТабличноеПоле.Колонки.Представление; + КонецЕсли; + +КонецПроцедуры + +Процедура ТабличноеПолеОформитьЯчейкиИмяСинонимЛкс(ТабличноеПоле, ОформлениеСтроки, + ИмяКолонкиИмя = "Имя", ИмяКолонкиСиноним = "Представление", ИмяКолонкиИндексКартинки = "ИндексКартинки", ДанныеФлажка = "") Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; + Если ДанныеСтроки = Неопределено Тогда + // Свернутое табличное поле может такое присылать + Возврат; + КонецЕсли; + Если ТабличноеПоле.Колонки[ИмяКолонкиИмя].Видимость Тогда + ВедущаяКолонка = ТабличноеПоле.Колонки[ИмяКолонкиИмя]; + ВедущийИндекс = ТабличноеПоле.Колонки.Индекс(ВедущаяКолонка); + КонецЕсли; + Если ТабличноеПоле.Колонки[ИмяКолонкиСиноним].Видимость Тогда + Если Ложь + Или ВедущаяКолонка = Неопределено + Или ТабличноеПоле.Колонки.Индекс(ТабличноеПоле.Колонки[ИмяКолонкиСиноним]) < ВедущийИндекс + Тогда + ВедущаяКолонка = ТабличноеПоле.Колонки[ИмяКолонкиСиноним]; + КонецЕсли; + КонецЕсли; + Если ВедущаяКолонка <> Неопределено Тогда + Ячейка = ОформлениеСтроки.Ячейки[ВедущаяКолонка.Имя]; + Если ЗначениеЗаполнено(ИмяКолонкиИндексКартинки) Тогда + ИндексКартинки = ДанныеСтроки[ИмяКолонкиИндексКартинки]; + Если ИндексКартинки >= 0 Тогда + Ячейка.ОтображатьКартинку = Истина; + Ячейка.ИндексКартинки = ИндексКартинки; + КонецЕсли; + КонецЕсли; + Если ДанныеФлажка <> "" Тогда + Ячейка.ОтображатьФлажок = Истина; + Ячейка.Флажок = ДанныеСтроки[ДанныеФлажка]; + КонецЕсли; + Если ТипЗнч(ДанныеСтроки) = Тип("СтрокаДереваЗначений") Тогда + КоличествоДочерних = ДанныеСтроки.Строки.Количество(); + Если КоличествоДочерних > 0 Тогда + Ячейка.УстановитьТекст(Ячейка.Текст + " (" + КоличествоДочерних + ")"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ТабличноеПолеПозицияТекущейСтрокиЛкс(Знач ТабличноеПоле) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + СтарыйИндекс = Неопределено; + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + СтарыйИндекс = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока); + КонецЕсли; + Возврат СтарыйИндекс; + +КонецФункции + +Процедура ПолеВводаРоли_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка) Экспорт + + Если ТипЗнч(Элемент.Значение) = Тип("СписокЗначений") Тогда + //Заголовок = "Выберите роли"; + МножественныйВыбор = Истина; + Иначе + //Заголовок = "Выберите роль"; + МножественныйВыбор = Ложь; + КонецЕсли; + СтандартнаяОбработка = Ложь; + //СписокВыбора = Новый СписокЗначений; + //СписокВыбора.ТипЗначения = Новый ОписаниеТипов("Строка"); + //Для Каждого РольЛ Из Метаданные.Роли Цикл + // #Если Сервер И Не Сервер Тогда + // РольЛ = Метаданные.Роли.Пользователь; + // #КонецЕсли + // НовыйЭлемент = СписокВыбора.Добавить(РольЛ.Имя, РольЛ.Представление()); + // Если МножественныйВыбор Тогда + // НовыйЭлемент.Пометка = Элемент.Значение.НайтиПоЗначению(РольЛ.Имя) <> Неопределено; + // Если НовыйЭлемент.Пометка Тогда + // НачальныйВыбор = НовыйЭлемент; + // КонецЕсли; + // Иначе + // Если РольЛ.Имя = Элемент.Значение Тогда + // НачальныйВыбор = НовыйЭлемент; + // КонецЕсли; + // КонецЕсли; + //КонецЦикла; + СписокИмен = Новый СписокЗначений; + Префикс = "Роль"; + Если МножественныйВыбор Тогда + НачальныйВыбор = Новый Массив; + Для Каждого ЭлементСписка Из Элемент.Значение Цикл + НачальныйВыбор.Добавить(Префикс + "." + ЭлементСписка.Значение); + КонецЦикла; + Иначе + НачальныйВыбор = Префикс + "." + Элемент.Значение; + КонецЕсли; + //РезультатВыбора = ирКлиент.ВыбратьЭлементСпискаЗначенийЛкс(СписокВыбора, НачальныйВыбор, Истина, Заголовок, МножественныйВыбор); + ФормаВыбораОбъектаБД = ирКлиент.ФормаВыбораОбъектаМетаданныхЛкс(,, НачальныйВыбор, МножественныйВыбор,,,,,,,,,,,,,,,,,, Истина); + РезультатВыбора = ФормаВыбораОбъектаБД.ОткрытьМодально(); + + Если РезультатВыбора <> Неопределено Тогда + Если МножественныйВыбор Тогда + СписокИмен = Новый СписокЗначений; + Для Каждого ВыбранныйЭлемент Из РезультатВыбора Цикл + //СписокИмен.Добавить(ВыбранныйЭлемент.Значение); + СписокИмен.Добавить(ирОбщий.ПоследнийФрагментЛкс(ВыбранныйЭлемент)); + КонецЦикла; + РезультатВыбора = СписокИмен; + Иначе + //РезультатВыбора = РезультатВыбора.Значение; + РезультатВыбора = ирОбщий.ПоследнийФрагментЛкс(РезультатВыбора.ПолноеИмяОбъекта); + КонецЕсли; + ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, РезультатВыбора); + КонецЕсли; + +КонецПроцедуры + +Процедура ПолеВводаПользователя_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + Если Не ПравоДоступа("Администрирование", Метаданные) Тогда + ирОбщий.СообщитьЛкс("Из-за отстуствия права ""Администрирование"" просмотр списка пользователей не доступен"); + РезультатВыбора = ИмяПользователя(); + Иначе + ФормаВыбора = ирКлиент.ПолучитьФормуЛкс("Обработка.ирРедакторПользователей.Форма",, Элемент); + ФормаВыбора.РежимВыбора = Истина; + ФормаВыбора.НачальноеЗначениеВыбора = Элемент.Значение; + РезультатВыбора = ФормаВыбора.ОткрытьМодально(); + КонецЕсли; + Если РезультатВыбора <> Неопределено Тогда + ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, РезультатВыбора); + КонецЕсли; + +КонецПроцедуры + +Процедура ПолеВводаПользователяОСНачалоВыбораЛкс(Знач Элемент, СтандартнаяОбработка, ДобавлятьЛидирующиеСлеши = Ложь) Экспорт + + СтандартнаяОбработка = Ложь; + НачальноеЗначение = Элемент.Значение; + НачальноеЗначение = СтрЗаменить(НачальноеЗначение, ".\", "\\" + ИмяКомпьютера() + "\"); + Маркер = "\\"; + Если Не ирОбщий.СтрНачинаетсяСЛкс(НачальноеЗначение, Маркер) Тогда + НачальноеЗначение = Маркер + НачальноеЗначение; + КонецЕсли; + ФормаВыбораПользователяWindows = ирКэш.Получить().ПолучитьФорму("ВыборПользователяWindows",, Элемент); + ФормаВыбораПользователяWindows.ВыбранныйПользовательWindows = НачальноеЗначение; + Результат = ФормаВыбораПользователяWindows.ОткрытьМодально(); + Если Результат <> Неопределено Тогда + Если Не ДобавлятьЛидирующиеСлеши И ирОбщий.СтрНачинаетсяСЛкс(Результат, Маркер) Тогда + Результат = Сред(Результат, СтрДлина(Маркер) + 1); + КонецЕсли; + //Результат = СтрЗаменить(Результат, ИмяКомпьютера() + "\", ".\"); + ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, Результат); + КонецЕсли; + +КонецПроцедуры + +Процедура ПолеВводаСтрокиСоединенияADODBНачалоВыбораЛкс(Знач Элемент, СтандартнаяОбработка) Экспорт + + СтандартнаяОбработка = Ложь; + СоединениеADO = Новый COMОбъект("ADODB.Connection"); + СоединениеADO.ConnectionString = Элемент.Значение; + ДатаЛинк = Новый COMОбъект("DataLinks"); + Если ДатаЛинк.PromptEdit(СоединениеADO) Тогда + ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, СоединениеADO.ConnectionString); + КонецЕсли; + +КонецПроцедуры + +Функция ОпределитьВедущуюСтроковуюКолонкуТабличногоПоляЛкс(ТабличноеПолеДерева) Экспорт + + Если Истина + И ТабличноеПолеДерева.ТекущаяКолонка <> Неопределено + И ЗначениеЗаполнено(ТабличноеПолеДерева.ТекущаяКолонка.Данные) + И ТабличноеПолеДерева.Значение.Колонки[ТабличноеПолеДерева.ТекущаяКолонка.Данные].ТипЗначения.СодержитТип(Тип("Строка")) + Тогда + ТекущаяКолонкаТП = ТабличноеПолеДерева.ТекущаяКолонка; + Иначе + Для Каждого КолонкаТП Из ТабличноеПолеДерева.Колонки Цикл + Если Не КолонкаТП.Видимость Тогда + Продолжить; + КонецЕсли; + КолонкаДерева = ТабличноеПолеДерева.Значение.Колонки[КолонкаТП.Данные]; + Если КолонкаДерева.ТипЗначения.СодержитТип(Тип("Строка")) Тогда + ТекущаяКолонкаТП = КолонкаТП; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат ТекущаяКолонкаТП; + +КонецФункции + +Функция _НайтиСтрокуТабличногоПоляДереваЗначенийСоСложнымФильтромЛкс(ТабличноеПолеДерева, ПолеВводаФильтра, Подстроки = "") Экспорт + + ТекущаяКолонкаТП = ОпределитьВедущуюСтроковуюКолонкуТабличногоПоляЛкс(ТабличноеПолеДерева); + Если ТекущаяКолонкаТП = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ИмяТекущейКолонки = ТекущаяКолонкаТП.Данные; + Если Не ЗначениеЗаполнено(ИмяТекущейКолонки) Тогда + Возврат Неопределено; + КонецЕсли; + ВсеСтроки = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ТабличноеПолеДерева.Значение); + ТекущаяСтрока = ТабличноеПолеДерева.ТекущаяСтрока; + Если Подстроки = "" Тогда + Подстроки = ПолеВводаФильтра.Значение; + КонецЕсли; + Фрагменты = ирОбщий.СтрРазделитьЛкс(НРег(Подстроки), " ", Истина); + ИндексСтроки = 0; + Если ТекущаяСтрока <> Неопределено Тогда + Если ирОбщий.ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекущаяСтрока[ИмяТекущейКолонки], Фрагменты) Тогда + ИндексСтроки = ВсеСтроки.Найти(ТекущаяСтрока) + 1; + КонецЕсли; + КонецЕсли; + Успех = Ложь; + Для ИндексСтроки = ИндексСтроки По ВсеСтроки.Количество() - 1 Цикл + ТекущаяСтрока = ВсеСтроки[ИндексСтроки]; + Если ирОбщий.ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекущаяСтрока[ИмяТекущейКолонки], Фрагменты) Тогда + ТабличноеПолеДерева.ТекущаяСтрока = ТекущаяСтрока; + ТабличноеПолеДерева.ТекущаяКолонка = ТекущаяКолонкаТП; + Успех = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если Успех Тогда + ПолеВводаФильтра.ЦветФонаПоля = Новый Цвет(); + Иначе + ТекущаяСтрока = Неопределено; + ПолеВводаФильтра.ЦветФонаПоля = ирОбщий.ПолучитьЦветСтиляЛкс("ирЦветФонаОшибки"); + КонецЕсли; + Возврат ТекущаяСтрока; + +КонецФункции + +Процедура ВыделитьСтрокиТабличногоПоляПоКлючуЛкс(ТабличноеПоле, СтруктураИлиСтрокаТаблицы, Знач СтрокаКлюча = "", Сортировать = Истина) Экспорт + + Если СтруктураИлиСтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + СтруктураИлиСтрокаТаблицы = Новый Структура; + #КонецЕсли + Если Не ЗначениеЗаполнено(СтрокаКлюча) Тогда + СтрокаКлюча = ирОбщий.ИменаСвойствСтруктурыЛкс(СтруктураИлиСтрокаТаблицы); + КонецЕсли; + КлючПоиска = Новый Структура(СтрокаКлюча); + ЗаполнитьЗначенияСвойств(КлючПоиска, СтруктураИлиСтрокаТаблицы); + КоллекцияСтрок = ТабличноеПоле.Значение; + Если ТипЗнч(КоллекцияСтрок) = Тип("ДеревоЗначений") Тогда + КоллекцияСтрок = КоллекцияСтрок.Строки; + КонецЕсли; + Если ЗначениеЗаполнено(СтрокаКлюча) И Сортировать Тогда + Если ПредупреждениеПередСортировкойПоСсылочнымКолонкамЛкс(СтрокаКлюча, ТабличноеПоле) Тогда + КоллекцияСтрок.Сортировать(СтрокаКлюча); + КонецЕсли; + КонецЕсли; + ТабличноеПоле.ВыделенныеСтроки.Очистить(); + ТекущаяСтрокаУстановлена = Ложь; + Если ТипЗнч(КоллекцияСтрок) = Тип("КоллекцияСтрокДереваЗначений") Тогда + НайденныеСтроки = КоллекцияСтрок.НайтиСтроки(КлючПоиска, Истина); + Иначе + НайденныеСтроки = КоллекцияСтрок.НайтиСтроки(КлючПоиска); + КонецЕсли; + Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл + ТабличноеПоле.ВыделенныеСтроки.Добавить(НайденнаяСтрока); + Если Не ТекущаяСтрокаУстановлена Тогда + ТабличноеПоле.ТекущаяСтрока = НайденнаяСтрока; + ТекущаяСтрокаУстановлена = Истина; + КонецЕсли; + КонецЦикла; + //ТабличноеПоле.ОбновитьСтроки(); + +КонецПроцедуры + +Процедура ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(ТабличноеПоле, ЧислоПервыхИгнорируемыхСтрок = 0) Экспорт + + Счетчик = 0; + Для Каждого Строка Из ТабличноеПоле.Значение.Строки Цикл + Счетчик = Счетчик + 1; + Если Счетчик > ЧислоПервыхИгнорируемыхСтрок Тогда + ТабличноеПоле.Развернуть(Строка, Истина); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ТабличноеПолеДеревоЗначений_СвернутьВсеСтрокиЛкс(ТабличноеПоле, ВосстановитьТекущуюСтроку = Ложь) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + МассивТекущихУзлов = Новый Массив; + ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; + Пока ТекущаяСтрока <> Неопределено Цикл + МассивТекущихУзлов.Добавить(ТекущаяСтрока); + ТекущаяСтрока = ТекущаяСтрока.Родитель; + КонецЦикла; + Если Не ВосстановитьТекущуюСтроку Тогда + ТабличноеПоле.ТекущаяСтрока = МассивТекущихУзлов[МассивТекущихУзлов.ВГраница()]; + МассивТекущихУзлов.Очистить(); + КонецЕсли; + ВсеСтрокиДерева = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение); + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ВсеСтрокиДерева.Количество()); + Для Каждого СтрокаДерева Из ВсеСтрокиДерева Цикл + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + Если Истина + И ТабличноеПоле.Развернут(СтрокаДерева) + И СтрокаДерева.Строки.Количество() > 0 + И МассивТекущихУзлов.Найти(СтрокаДерева) = Неопределено + Тогда + ТабличноеПоле.Свернуть(СтрокаДерева); + КонецЕсли; + КонецЦикла; + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); + +КонецПроцедуры + +// Изменяет свернутость строк табличного поля дерева значений. +// +// Параметры: +// Дерево - ТабличноеПоле - связанное с деревом значений и включенным режимом "Дерево"; +// Свернуть - Булево, *Истина - новое значение свернутости +// Строки - СтрокиДереваЗначений, *Неопределено - если Неопределено, то обрабатываются все строки дерева +// +Процедура ДеревоЗначенийСвернутьРазвернутьЛкс(Дерево, Свернуть = Ложь, Строки = Неопределено, СПодчиненными = Истина) Экспорт + + Если Свернуть Тогда + ПредставлениеПроцесса = "Сворачиваем строки дерева"; + Иначе + ПредставлениеПроцесса = "Разворачиваем строки дерева"; + КонецЕсли; + Если Строки = Неопределено Тогда + Строки = Дерево.Значение.Строки; + КонецЕсли; + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Строки.Количество(), ПредставлениеПроцесса); + Для Каждого СтрокаДерева Из Строки Цикл + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + Если Истина + И Свернуть + И Дерево.Развернут(СтрокаДерева) + Тогда + Дерево.Свернуть(СтрокаДерева); + ИначеЕсли Истина + И Не Свернуть + И Не Дерево.Развернут(СтрокаДерева) + Тогда + Дерево.Развернуть(СтрокаДерева, СПодчиненными); + КонецЕсли; + КонецЦикла; + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(Индикатор); + +КонецПроцедуры + +Процедура ТабличноеПолеДеревоЗначений_АвтоРазвернутьВсеСтрокиЛкс(ТабличноеПоле, МаксимальноеЧислоСтрок = 30, ТекущаяСтрокаУстановлена = Ложь) Экспорт + + ВсеСтроки = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение); + ЧислоДинамическихСтрок = ВсеСтроки.Количество(); + Если ЧислоДинамическихСтрок > 0 Тогда + Если ЧислоДинамическихСтрок <= МаксимальноеЧислоСтрок Тогда + ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(ТабличноеПоле); + Если Не ТекущаяСтрокаУстановлена Тогда + ТабличноеПоле.ТекущаяСтрока = ТабличноеПоле.Значение.Строки[0].Строки[0]; + КонецЕсли; + Иначе + Если Не ТекущаяСтрокаУстановлена Тогда + ТабличноеПоле.ТекущаяСтрока = ТабличноеПоле.Значение.Строки[0]; + Если ТабличноеПоле.Значение.Строки.Количество() = 1 Тогда + ТабличноеПоле.Развернуть(ТабличноеПоле.ТекущаяСтрока); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ТабличноеПолеРезультатаЗапросаНастроитьКолонкиЛкс(Знач ТабличноеПолеРезультата, Знач СтарыеКолонкиТабличногоПоля = Неопределено, Знач ШиринаПустойКолонки = Неопределено, + МаксКоличествоСтрокДляАнализа = 10000, Знач ТолькоПросмотр = Истина) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПолеРезультата = Новый ТабличноеПоле; + #КонецЕсли + МинимальнаяШиринаКолонки = ирОбщий.МинимальнаяШиринаКолонкиЛкс(); + Если ШиринаПустойКолонки = Неопределено Тогда + ШиринаПустойКолонки = МинимальнаяШиринаКолонки; + КонецЕсли; + Если ТипЗнч(ТабличноеПолеРезультата.Значение) = Тип("ДеревоЗначений") Тогда + // КоличествоСтрокВТаблице = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ТабличноеПолеРезультата.Значение); // Долго + КоличествоСтрокВТаблице = 10000000; + Иначе + КоличествоСтрокВТаблице = ТабличноеПолеРезультата.Значение.Количество(); + КонецЕсли; + ВыполнятьАнализДанных = КоличествоСтрокВТаблице < МаксКоличествоСтрокДляАнализа; + Для Каждого Колонка Из ТабличноеПолеРезультата.Колонки Цикл + ДанныеКолонки = Колонка.Данные; + Если Не ЗначениеЗаполнено(ДанныеКолонки) Тогда + ДанныеКолонки = Колонка.ДанныеФлажка; // Здесь по крайней мере в 8.3 уже всегда пусто + КонецЕсли; + Если Не ЗначениеЗаполнено(ДанныеКолонки) Тогда + Продолжить; + КонецЕсли; + Если ТолькоПросмотр <> Неопределено Тогда + Колонка.ТолькоПросмотр = ТолькоПросмотр; + КонецЕсли; + //Колонка.Формат = "ЧН="; + КолонкаТЗ = ТабличноеПолеРезультата.Значение.Колонки[ДанныеКолонки]; + Если СтарыеКолонкиТабличногоПоля <> Неопределено Тогда + СохраненныеНастройкиКолонки = СтарыеКолонкиТабличногоПоля[КлючХраненияНастроекКолонкиРезультатаЗапросаЛкс(ТабличноеПолеРезультата, Колонка)]; + КонецЕсли; + Если СохраненныеНастройкиКолонки <> Неопределено Тогда + Колонка.Ширина = СохраненныеНастройкиКолонки.Ширина; + Колонка.АвтоВысотаЯчейки = СохраненныеНастройкиКолонки.АвтоВысотаЯчейки; + Колонка.ВысотаЯчейки = СохраненныеНастройкиКолонки.ВысотаЯчейки; + Иначе + Если Истина + И КолонкаТЗ.ТипЗначения.СодержитТип(Тип("Строка")) + И (Ложь + Или КолонкаТЗ.ТипЗначения.КвалификаторыСтроки.Длина = 0 + Или КолонкаТЗ.ТипЗначения.КвалификаторыСтроки.Длина > 50) + Тогда + Колонка.Ширина = 50; + ИначеЕсли Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять Тогда + Колонка.Ширина = Макс(Колонка.Ширина, МинимальнаяШиринаКолонки); + КонецЕсли; + КонецЕсли; + Если ВыполнятьАнализДанных Тогда + ОписаниеТиповБезNull = Новый ОписаниеТипов(КолонкаТЗ.ТипЗначения, , "NUll"); + ПустыеСтрокиБезNUll = ТабличноеПолеРезультата.Значение.НайтиСтроки(Новый Структура(ДанныеКолонки, ОписаниеТиповБезNull.ПривестиЗначение())); + ПустыеСтрокиNull = ТабличноеПолеРезультата.Значение.НайтиСтроки(Новый Структура(ДанныеКолонки, Null)); + Если ПустыеСтрокиБезNUll.Количество() + ПустыеСтрокиNull.Количество() = КоличествоСтрокВТаблице Тогда + Колонка.Ширина = ШиринаПустойКолонки; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция _БезопасноеОписаниеТиповЛкс(ОписаниеТипов) Экспорт + #Если Сервер И Не Сервер Тогда + ОписаниеТипов = Новый ОписаниеТипов; + #КонецЕсли + Типы = ОписаниеТипов.Типы(); + Если Типы.Количество() > 0 Тогда + ПростойТип = Типы[0]; + Если Истина + И Типы.Количество() = 1 + //// Антибаг платформы 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1015693#1015693 + //И (Ложь + // Или ПростойТип = Тип("КоллекцияАтрибутовDOM") + // Или ПростойТип = Тип("ДокументDOM") + // Или ПростойТип = Тип("СписокУзловDOM") + // Или ПростойТип = Тип("АтрибутDOM") + // Или ПростойТип = Тип("ТипУзлаDOM") + // Или ПростойТип = Тип("ЭлементDOM") + // Или ПростойТип = Тип("КонфигурацияДокументаDOM") + // Или ПростойТип = Тип("ОпределениеТипаДокументаDOM") + // Или ПростойТип = Тип("КоллекцияНотацийDOM") + // Или ПростойТип = Тип("КоллекцияСущностейDOM") + // Или ПростойТип = Тип("ТипЗначенияXDTO") + // Или ПростойТип = Тип("ТипОбъектаXDTO") + // // Эти актуальны и в 8.3.18 + // Или ПростойТип = Тип("ЗначениеXDTO") + // Или ПростойТип = Тип("ПакетXDTO")) + Тогда + ВсеРедактируемыеТипы = ирОбщий.ОписаниеТиповВсеРедактируемыеТипыЛкс(); + #Если Сервер И Не Сервер Тогда + ВсеРедактируемыеТипы = Новый ОписаниеТипов; + #КонецЕсли + Если Не ВсеРедактируемыеТипы.СодержитТип(Типы[0]) Тогда + // Антибаг платформы 8.2-8.3.6 https://partners.v8.1c.ru/forum/t/1401671/m/1401671 + ОписаниеТипов = Новый ОписаниеТипов; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат ОписаниеТипов; +КонецФункции + +Функция КлючХраненияНастроекКолонкиРезультатаЗапросаЛкс(Знач ТабличноеПолеРезультата, Знач СтараяКолонкаТП) Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПолеРезультата = Новый ТабличноеПоле; + #КонецЕсли + СтараяКолонкаТЗ = ТабличноеПолеРезультата.Значение.Колонки[СтараяКолонкаТП.Имя]; + Возврат СтараяКолонкаТП.Имя + " // " + Лев(СтараяКолонкаТЗ.ТипЗначения, 300); + +КонецФункции + +Функция ТабличноеПолеСортироватьЛкс(ЭтаФорма, ТабличноеПоле, ПоВозрастанию = Истина, Знач ПроверятьСортировкуСсылок = Истина) Экспорт + Если ТабличноеПоле.ТолькоПросмотр Тогда + Возврат Неопределено; + КонецЕсли; + ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка; + Если ТекущаяКолонка = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ИмяКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда + ирОбщий.СообщитьЛкс("Сортировка по этой колонке невозможна"); + Возврат Неопределено; + КонецЕсли; + Если ПроверятьСортировкуСсылок Тогда + Продолжаем = ПредупреждениеПередСортировкойПоСсылочнымКолонкамЛкс(ИмяКолонки, ТабличноеПоле); + Если Не Продолжаем Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + Если ПоВозрастанию Тогда + СтрокаСортировки = ИмяКолонки + " Возр"; + Иначе + СтрокаСортировки = ИмяКолонки + " Убыв"; + КонецЕсли; + Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда + Родитель = ирОбщий.РодительСтрокиДереваЛкс(ТабличноеПоле.ТекущаяСтрока); + КоллекцияСтрок = Родитель.Строки; + Иначе + КоллекцияСтрок = ТабличноеПоле.Значение; + КонецЕсли; + КоллекцияСтрок.Сортировать(СтрокаСортировки); + Возврат СтрокаСортировки; +КонецФункции + +// http://www.hostedredmine.com/issues/877327 https://partners.v8.1c.ru/forum/t/1919734/m/1919734 +Функция ПредупреждениеПередСортировкойПоСсылочнымКолонкамЛкс(Знач ИменаКолонок, Знач ТабличноеПоле, ОпасноеКоличествоСсылок = 5000) Экспорт + + Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда + Родитель = ирОбщий.РодительСтрокиДереваЛкс(ТабличноеПоле.ТекущаяСтрока); + КоллекцияСтрок = Родитель.Строки; + Иначе + КоллекцияСтрок = ТабличноеПоле.Значение; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + КоллекцияСтрок = Новый ТаблицаЗначений; + #КонецЕсли + Продолжаем = Истина; + МассивИмен = ирОбщий.СтрРазделитьЛкс(ИменаКолонок, ",", Истина); + Если КоллекцияСтрок.Количество() * МассивИмен.Количество() > ОпасноеКоличествоСсылок Тогда + Если ирОбщий.ЛиТабличнаяЧастьЛкс(ТипЗнч(КоллекцияСтрок)) Тогда + Колонки = ТабличноеПоле.Значение.ВыгрузитьКолонки().Колонки; + Иначе + Колонки = КоллекцияСтрок[0].Владелец().Колонки; + КонецЕсли; + КоличествоСсылочныхКолонок = 0; + НепустыеЗначенияПростыхСсылочныхКолонок = Новый СписокЗначений; + Для Каждого ИмяКолонки Из МассивИмен Цикл + КоличествоСсылочныхТипов = 0; + Для Каждого Тип Из Колонки[ИмяКолонки].ТипЗначения.Типы() Цикл + Если ирОбщий.ЛиТипСсылкиБДЛкс(Тип) Тогда + КоличествоСсылочныхТипов = КоличествоСсылочныхТипов + 1; + Если КоличествоСсылочныхТипов > 1 Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если КоличествоСсылочныхТипов = 1 Тогда + НепустыеЗначенияПростыхСсылочныхКолонок.Добавить(, ИмяКолонки); + КонецЕсли; + Если КоличествоСсылочныхТипов > 0 Тогда + КоличествоСсылочныхКолонок = КоличествоСсылочныхКолонок + 1; + КонецЕсли; + КонецЦикла; + Если КоличествоСсылочныхКолонок * КоллекцияСтрок.Количество() > ОпасноеКоличествоСсылок Тогда + Ответ = Вопрос("Сортировка в памяти большого числа ссылочных значений может длиться долго, если для них задано динамическое представление. Сортировать?", РежимДиалогаВопрос.ДаНет, + 10, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Продолжаем = Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат Продолжаем; + +КонецФункции + +Процедура ТабличноеПолеПорядкаКомпоновкиВыборЛкс(Знач Элемент, Знач ВыбраннаяСтрока, Знач Колонка, СтандартнаяОбработка) Экспорт + + Если ТипЗнч(ВыбраннаяСтрока) = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда + Возврат; + КонецЕсли; + Если Колонка = Элемент.Колонки.ТипУпорядочивания Тогда + Если ВыбраннаяСтрока.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда + ВыбраннаяСтрока.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; + Иначе + ВыбраннаяСтрока.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; + КонецЕсли; + СтандартнаяОбработка = Ложь; + КонецЕсли; + +КонецПроцедуры + +Процедура ТабличноеПолеЭлементовКомпоновкиПеретаскиваниеЛкс(Знач Элемент, Знач ПараметрыПеретаскивания, СтандартнаяОбработка, Знач Строка, Знач Колонка) Экспорт + + ЭлементыКомпоновки = Элемент.Значение; + #Если Сервер И Не Сервер Тогда + Пустышка = Новый НастройкиКомпоновкиДанных; + ЭлементыКомпоновки = Пустышка.Порядок; + #КонецЕсли + ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; + Если ТипЗнч(ЗначениеПеретаскивания) = Тип("Массив") Тогда + Если ТипЗнч(ЗначениеПеретаскивания[0]) = Тип("ДоступноеПолеКомпоновкиДанных") Тогда + СтандартнаяОбработка = Ложь; + Для Каждого ЭлементПеретаскивания Из ЗначениеПеретаскивания Цикл + КоллекцияПриемник = ЭлементыКомпоновки.Элементы; + Если Строка <> Неопределено Тогда + Попытка + КоллекцияПриемник = Строка.Элементы; + Исключение + КонецПопытки; + КонецЕсли; + НовыйЭлемент = ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КоллекцияПриемник, ЭлементПеретаскивания.Поле, ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение); + Если Строка <> Неопределено Тогда + СдвинутьЭлементКоллекцииНаПозициюДругогоЭлементаЛкс(КоллекцияПриемник, НовыйЭлемент, Строка); + КонецЕсли; + КонецЦикла; + Элемент.ТекущаяСтрока = НовыйЭлемент; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура СдвинутьЭлементКоллекцииНаПозициюДругогоЭлементаЛкс(Знач Коллекция, Знач СдвигаемыйЭлемент, Знач ЭлементСЦелевойПозицией) Экспорт + + #Если Сервер И Не Сервер Тогда + Коллекция = Новый ТаблицаЗначений; + #КонецЕсли + Коллекция.Сдвинуть(СдвигаемыйЭлемент, Коллекция.Индекс(ЭлементСЦелевойПозицией) - Коллекция.Индекс(СдвигаемыйЭлемент)); + +КонецПроцедуры + +Процедура ПрименитьСтрокуПоискаКТабличномуПолюДереваЛкс(ЭтаФорма, ТабличноеПоле, СтрокаПоиска, ИменаКолонокДанныхДляПоиска, АктивизироватьПервуюСтроку = Истина, + Знач ТабличноеПолеНайденных = Неопределено, Знач Кнопки = Неопределено) Экспорт + + СтруктураКолонок = Новый Структура(ИменаКолонокДанныхДляПоиска); + Если ТабличноеПолеНайденных <> Неопределено Тогда + НайденныеСтроки = ТабличноеПолеНайденных.Значение; + НайденныеСтроки.Очистить(); + Иначе + НайденныеСтроки = Новый ТаблицаЗначений; + НайденныеСтроки.Колонки.Добавить("СтрокаДанных"); + КонецЕсли; + ТекущийИндексНайденнойСтроки = 0; + Если ЗначениеЗаполнено(СтрокаПоиска) Тогда + СловаПоиска = ирОбщий.РазделитьСтрокуПоискаНаСловаПоискаЛкс(НРег(СтрокаПоиска)); + ВсеСтроки = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение); + ИндексТекущейСтроки = ВсеСтроки.Найти(ТабличноеПоле.ТекущаяСтрока); + ИндексАктивизируемойСтроки = Неопределено; + Для Каждого СтрокаДанных Из ВсеСтроки Цикл + Для Каждого КлючИЗначение Из СтруктураКолонок Цикл + ИнтереснаяКолонка = КлючИЗначение.Ключ; + Попытка + Пустышка = СтрокаДанных.Родитель; + Исключение + // Строка дерева удалена. Например в исследователе объектов + Прервать; + КонецПопытки; + Значение = СтрокаДанных[ИнтереснаяКолонка]; + Если Истина + И ТипЗнч(Значение) = Тип("Строка") + И ирОбщий.ЛиСтрокаСодержитВсеПодстрокиЛкс(Значение, СловаПоиска) + Тогда + СтрокаРезультата = НайденныеСтроки.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаРезультата, СтрокаДанных); + СтрокаРезультата.СтрокаДанных = СтрокаДанных; + Если ИндексТекущейСтроки <> Неопределено И ВсеСтроки.Найти(СтрокаДанных) >= ИндексТекущейСтроки И ИндексАктивизируемойСтроки = Неопределено Тогда + ИндексАктивизируемойСтроки = НайденныеСтроки.Количество() - 1; + КонецЕсли; + Родитель = СтрокаДанных; + Пока Родитель <> Неопределено Цикл + // В большом дереве вредно сразу разворачивать строки, т.к. много времени тратится на отрисовку строк + //Если Родитель <> СтрокаДанных И Не ТабличноеПоле.Развернут(Родитель) Тогда + // ТабличноеПоле.Развернуть(Родитель); + //КонецЕсли; + Родитель = Родитель.Родитель; + КонецЦикла; + Прервать; + КонецЕсли; + КонецЦикла; + Если НайденныеСтроки.Количество() > 1000 Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Если НайденныеСтроки.Количество() > 0 Тогда + Если АктивизироватьПервуюСтроку Тогда + Если ИндексАктивизируемойСтроки = Неопределено Тогда + ИндексАктивизируемойСтроки = 0; + КонецЕсли; + Если ТабличноеПолеНайденных = Неопределено Тогда + ТабличноеПоле.ТекущаяСтрока = НайденныеСтроки[ИндексАктивизируемойСтроки].СтрокаДанных; + Иначе + ТабличноеПолеНайденных.ТекущаяСтрока = НайденныеСтроки[ИндексАктивизируемойСтроки]; + КонецЕсли; + КонецЕсли; + Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда + НайденнаяТекущаяСтрока = НайденныеСтроки.Найти(ТабличноеПоле.ТекущаяСтрока, "СтрокаДанных"); + Если НайденнаяТекущаяСтрока <> Неопределено Тогда + ТекущийИндексНайденнойСтроки = НайденныеСтроки.Индекс(НайденнаяТекущаяСтрока); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Кнопки <> Неопределено Тогда + Для Каждого Кнопка Из Кнопки Цикл + Кнопка.Доступность = НайденныеСтроки.Количество() > 0; + КонецЦикла; + КонецЕсли; + МенеджерПоиска = СоздатьМенеджерПоискаВТабличномПолеЛкс(Новый Структура(ИменаКолонокДанныхДляПоиска), НайденныеСтроки, ТекущийИндексНайденнойСтроки); + ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле).МенеджерПоиска = МенеджерПоиска; + ТабличноеПоле.ОбновитьСтроки(); + +КонецПроцедуры + +// Функция - Создать менеджер поиска в табличном поле лкс +// +// Параметры: +// КолонкиПоиска - Структура - +// НайденныеСтроки - Массив - +// ТекущийИндексНайденнойСтроки - Число - +// РазрешитьОкраску - Булево - +// ИскатьСРодителем - Булево - +// ПрефиксСтрокиПоиска - Строка - +// +// Возвращаемое значение: +// - +// +Функция СоздатьМенеджерПоискаВТабличномПолеЛкс(Знач КолонкиПоиска = Неопределено, Знач НайденныеСтроки = Неопределено, Знач ТекущийИндексНайденнойСтроки = Неопределено, + Знач РазрешитьОкраску = Ложь, Знач ИскатьСРодителем = Ложь, Знач ПрефиксСтрокиПоиска = "") Экспорт + + Если НайденныеСтроки = Неопределено Тогда + НайденныеСтроки = Новый Массив; + КонецЕсли; + МенеджерПоиска = Новый Структура; + МенеджерПоиска.Вставить("ТекущийИндексНайденнойСтроки", ТекущийИндексНайденнойСтроки); + МенеджерПоиска.Вставить("НайденныеСтроки", НайденныеСтроки); + МенеджерПоиска.Вставить("КолонкиПоиска", КолонкиПоиска); + МенеджерПоиска.Вставить("РазрешитьОкраску", РазрешитьОкраску); + МенеджерПоиска.Вставить("ИскатьСРодителем", ИскатьСРодителем); // Это разрешение такого поиска. Фактический режим определяется с учетом искомой строки + МенеджерПоиска.Вставить("ПрефиксСтрокиПоиска", ПрефиксСтрокиПоиска); // По умолчанию используем имя табличного поля + Возврат МенеджерПоиска; + +КонецФункции + +Процедура СледующееВхождениеСтрокиПоискаВТабличномПолеЛкс(ЭтаФорма, ТабличноеПоле) Экспорт + + МенеджерПоиска = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле).МенеджерПоиска; + Если МенеджерПоиска = Неопределено Тогда + Возврат; + КонецЕсли; + Если МенеджерПоиска.НайденныеСтроки.Количество() > 0 Тогда + МенеджерПоиска.ТекущийИндексНайденнойСтроки = МенеджерПоиска.ТекущийИндексНайденнойСтроки + 1; + Если МенеджерПоиска.ТекущийИндексНайденнойСтроки >= МенеджерПоиска.НайденныеСтроки.Количество() Тогда + МенеджерПоиска.ТекущийИндексНайденнойСтроки = 0; + КонецЕсли; + ТабличноеПоле.ТекущаяСтрока = МенеджерПоиска.НайденныеСтроки[МенеджерПоиска.ТекущийИндексНайденнойСтроки].СтрокаДанных; + КонецЕсли; + +КонецПроцедуры + +Процедура ПредыдущееВхождениеСтрокиПоискаВТабличномПолеЛкс(ЭтаФорма, ТабличноеПоле) Экспорт + + МенеджерПоиска = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле).МенеджерПоиска; + Если МенеджерПоиска = Неопределено Тогда + Возврат; + КонецЕсли; + Если МенеджерПоиска.НайденныеСтроки.Количество() > 0 Тогда + МенеджерПоиска.ТекущийИндексНайденнойСтроки = МенеджерПоиска.ТекущийИндексНайденнойСтроки - 1; + Если МенеджерПоиска.ТекущийИндексНайденнойСтроки < 0 Тогда + МенеджерПоиска.ТекущийИндексНайденнойСтроки = МенеджерПоиска.НайденныеСтроки.Количество() - 1; + КонецЕсли; + ТабличноеПоле.ТекущаяСтрока = МенеджерПоиска.НайденныеСтроки[МенеджерПоиска.ТекущийИндексНайденнойСтроки].СтрокаДанных; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьСсылкуВИсториюРаботыЛкс(Ссылка, ДобавлятьВИсториюРаботыПлатформы = Истина, ДобавлятьВИсториюИнтерфейснойПанели = Истина) Экспорт + + Если ДобавлятьВИсториюРаботыПлатформы Тогда + ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Ссылка)); + КонецЕсли; + Если ДобавлятьВИсториюИнтерфейснойПанели Тогда + ФормаИнтерфейснойПанели = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); + СтруктураЭлемента = Новый Структура(); + СтруктураЭлемента.Вставить("Вид", Ссылка.Метаданные().ПолноеИмя()); + СтруктураЭлемента.Вставить("Имя", Ссылка); + ФормаИнтерфейснойПанели.ДобавитьСтрокуВСтатическуюВетку(СтруктураЭлемента, Ложь); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьИнструментВИсториюРаботыЛкс(Форма, ДобавлятьВИсториюРаботыПлатформы = Истина, ДобавлятьВИсториюИнтерфейснойПанели = Истина) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ИмяФормы = ирОбщий.ПолноеИмяФормыЛкс(Форма); + Если Не ЗначениеЗаполнено(ИмяФормы) Тогда + Возврат; + КонецЕсли; + Попытка + ОсновнойОбъект = Форма.ЭтотОбъект; + Исключение + Возврат; + КонецПопытки; + Если ТипЗнч(ОсновнойОбъект) = Тип("УправляемаяФорма") Тогда + ПолноеИмяМД = ИмяФормы; + Иначе + ПолноеИмяМД = ОсновнойОбъект.Метаданные().ПолноеИмя(); + КонецЕсли; + Фрагменты = ирОбщий.СтрРазделитьЛкс(ПолноеИмяМД); + Если Ложь + Или Фрагменты[1] = "ирДинамическийСписок" + Или Фрагменты[1] = "ирРедакторОбъектаБД" + Или Фрагменты[1] = "ирИнтерфейснаяПанель" + Или Фрагменты[1] = "ирИсследовательОбъектов" + Тогда + Возврат; + КонецЕсли; + Фрагменты[0] = ирОбщий.ПеревестиВРусский(Фрагменты[0]); + мПлатформа.ЗаполнитьСписокИнструментов(); + СтрокаИнструмента = мПлатформа.СписокИнструментов.НайтиСтроки(Новый Структура("Видимость, ПолноеИмя", Истина, Фрагменты[0] + "." + Фрагменты[1])); + Если СтрокаИнструмента.Количество() > 0 Тогда + Если ДобавлятьВИсториюИнтерфейснойПанели Тогда + ФормаИнтерфейснойПанели = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); + СтруктураЭлемента = Новый Структура(); + СтруктураЭлемента.Вставить("Вид", ирОбщий.МножественноеИмяМДЛкс(Фрагменты[0])); + СтруктураЭлемента.Вставить("Имя", Фрагменты[1]); + ФормаИнтерфейснойПанели.ДобавитьСтрокуВСтатическуюВетку(СтруктураЭлемента, Ложь); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьСсылкуВИзбранноеЛкс(Ссылка, ДобавлятьВИзбранноеРаботыПользователя = Истина, ДобавлятьВИзрабнноеИнтерфейснойПанели = Истина) Экспорт + + //Если ДобавлятьВИзбранноеРаботыПользователя И ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Ссылка) Тогда + // // e1cib/command/Справочник.ирАлгоритмы.ОткрытьСписок + // // e1cib/command/Обработка.ирДинамическийСписок.Открыть + // // e1cib/command/Обработка.ирКонсольЗапросов.Команда1 + // Избранное = ХранилищеСистемныхНастроек.Загрузить("Общее/ИзбранноеРаботыПользователя"); + // Если Избранное = Неопределено Тогда + // Избранное = Новый ИзбранноеРаботыПользователя; + // КонецЕсли; + // ЭлементИзбранного = Новый ЭлементИзбранногоРаботыПользователя; + // ЭлементИзбранного.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Ссылка); + // Избранное.Добавить(ЭлементИзбранного); + // ХранилищеСистемныхНастроек.Сохранить("Общее/ИзбранноеРаботыПользователя", "", Избранное); + // ОбновитьИнтерфейс(); + //КонецЕсли; + Если ДобавлятьВИзрабнноеИнтерфейснойПанели Тогда + ФормаИнтерфейснойПанели = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); + СтруктураЭлемента = Новый Структура(); + СтруктураЭлемента.Вставить("Вид", Ссылка.Метаданные().ПолноеИмя()); + СтруктураЭлемента.Вставить("Имя", Ссылка); + ФормаИнтерфейснойПанели.ДобавитьСтрокуВСтатическуюВетку(СтруктураЭлемента, Истина); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьТаблицуВИзбранноеЛкс(ИмяТаблицыБД, ДобавлятьВИзбранноеРаботыПользователя = Истина, ДобавлятьВИзрабнноеИнтерфейснойПанели = Истина) Экспорт + + //Если ДобавлятьВИзбранноеРаботыПользователя Тогда + // Избранное = ХранилищеСистемныхНастроек.Загрузить("Общее/ИзбранноеРаботыПользователя"); + // Если Избранное = Неопределено Тогда + // Избранное = Новый ИзбранноеРаботыПользователя; + // КонецЕсли; + // ЭлементИзбранного = Новый ЭлементИзбранногоРаботыПользователя; + // ЭлементИзбранного.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Ссылка); + // Избранное.Добавить(ЭлементИзбранного); + // ХранилищеСистемныхНастроек.Сохранить("Общее/ИзбранноеРаботыПользователя", "", Избранное); + // ОбновитьИнтерфейс(); + //КонецЕсли; + Если ДобавлятьВИзрабнноеИнтерфейснойПанели Тогда + ОбъектМД = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(ИмяТаблицыБД); + Если ОбъектМД = Неопределено Тогда + Возврат; + КонецЕсли; + ФормаИнтерфейснойПанели = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + ОбъектМД = Метаданные.Справочники.Валюты; + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + КорневойТип = ирОбщий.ПеревестиВРусский(ирОбщий.ПервыйФрагментЛкс(ОбъектМД.ПолноеИмя())); + СтрокаТипаМетаОбъектов = мПлатформа.ОписаниеТипаМетаОбъектов(КорневойТип); + СтруктураЭлемента = Новый Структура(); + Если ирОбщий.ЛиКорневойТипВнешнегоИсточникаДанныхЛкс(КорневойТип) Тогда + СтруктураЭлемента.Вставить("Вид", ОбъектМД.Родитель().ПолноеИмя()); + Иначе + СтруктураЭлемента.Вставить("Вид", СтрокаТипаМетаОбъектов.Единственное); + КонецЕсли; + СтруктураЭлемента.Вставить("Имя", ОбъектМД.Имя); + ФормаИнтерфейснойПанели.ДобавитьСтрокуВСтатическуюВетку(СтруктураЭлемента); + КонецЕсли; + +КонецПроцедуры + +// + +Процедура ОткрытьОбъектыИзВыделенныхЯчеекВПодбореИОбработкеОбъектовЛкс(ТабличноеПоле, Знач ИмяКолонки = "", Знач ЭтаФорма = Неопределено, Знач ПолноеИмяТаблицыБД = "") Экспорт + + Если ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда + Ответ = Вопрос("Использовать значения текущей колонки (да) или ключи строк (нет)?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + СобиратьКлючи = Ответ = КодВозвратаДиалога.Нет; + Иначе + СобиратьКлючи = Ложь; + КонецЕсли; + Если СобиратьКлючи Тогда + МассивСсылок = Новый Массив(); + Для Каждого ВыделеннаяСтрока Из ТабличноеПоле.ВыделенныеСтроки Цикл + КлючОбъекта = ирОбщий.КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицыБД, ВыделеннаяСтрока); + МассивСсылок.Добавить(КлючОбъекта); + КонецЦикла; + КлючТекущейСтроки = ирОбщий.КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицыБД, ТабличноеПоле.ТекущаяСтрока); + Иначе + МассивСсылок = СсылкиИзВыделенныхЯчеекТабличногоПоляЛкс(ТабличноеПоле, ИмяКолонки); + КонецЕсли; + ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(МассивСсылок,, ЭтаФорма,, КлючТекущейСтроки); + +КонецПроцедуры + +Функция СсылкиИзВыделенныхЯчеекТабличногоПоляЛкс(ТабличноеПоле, ИмяКолонки = "") Экспорт + + МассивСсылок = Новый Массив; + ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + Если ВыделенныеСтроки.Количество() = 0 Тогда + Возврат МассивСсылок; + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда + ИмяКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда + Возврат МассивСсылок; + КонецЕсли; + ДанныеПоля = Неопределено; + Для Каждого КлючСтроки Из ВыделенныеСтроки Цикл + ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, КлючСтроки, ДанныеПоля); + ЗначениеСтроки = ДанныеСтроки[ИмяКолонки]; + ТипЗначения = ТипЗнч(ЗначениеСтроки); + Если Метаданные.НайтиПоТипу(ТипЗначения) = Неопределено Тогда + Продолжить; + КонецЕсли; + МассивСсылок.Добавить(ЗначениеСтроки); + КонецЦикла; + Возврат МассивСсылок; + +КонецФункции + +Функция ОткрытьПодборИОбработкуОбъектовИзДинамическогоСпискаЛкс(ТабличноеПоле, Знач НастройкиСписка = Неопределено, Знач ВыделенныеСтроки = Неопределено, Знач ИмяТаблицы = "") Экспорт + + #Если Сервер И Не Сервер Тогда + ТабличноеПоле = Новый ТабличноеПоле; + #КонецЕсли + ДинамическийСписок = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + Если Не ЗначениеЗаполнено(ИмяТаблицы) Тогда + ИмяТаблицы = ""; + ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле, ИмяТаблицы); + КонецЕсли; + Если ТабличноеПоле.ВыделенныеСтроки.Количество() = 1 И ЗначениеЗаполнено(ИмяТаблицы) Тогда + Ответ = Вопрос("Обработать только выделенные строки (Да) иначе будет использован текущий отбор (Нет)?", РежимДиалогаВопрос.ДаНет); + Иначе + Ответ = КодВозвратаДиалога.Да; + КонецЕсли; + ВыбранныеПоля = Новый Массив; + МассивКолонок = КолонкиТаблицыФормыИлиТабличногоПоляЛкс(ТабличноеПоле); + ТекущееПолеТаблицы = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + Для Каждого КолонкаТП Из МассивКолонок Цикл + Если Не КолонкаТП.Видимость Тогда + Продолжить; + КонецЕсли; + ДанныеКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, КолонкаТП); + Если Не ЗначениеЗаполнено(ДанныеКолонки) Тогда + Продолжить; + КонецЕсли; + ВыбранныеПоля.Добавить(ДанныеКолонки); + КонецЦикла; + Если Ответ = КодВозвратаДиалога.Да Тогда + Если ВыделенныеСтроки = Неопределено Тогда + ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); + КонецЕсли; + ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; + Если Не ЗначениеЗаполнено(ИмяТаблицы) Тогда + ВыделенныеСтроки = КлючиВыделенныхСтрокИмитатораДинамическогоСпискаЛкс(ТабличноеПоле, ВыделенныеСтроки); + ТекущаяСтрока = КлючиВыделенныхСтрокИмитатораДинамическогоСпискаЛкс(ТабличноеПоле, ирОбщий.ЗначенияВМассивЛкс(ТекущаяСтрока))[0]; + ИначеЕсли ТипЗнч(ТекущаяСтрока) = Тип("Число") Тогда + ВыделенныеСтроки = ТаблицаКлючейВыделенныхСтрокДинСпискаЛкс(ТабличноеПоле, ИмяТаблицы, ТекущаяСтрока); + КлючУникальности = ИмяТаблицы; + КонецЕсли; + Форма = ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(ВыделенныеСтроки, ВыбранныеПоля,, ТекущееПолеТаблицы, ТекущаяСтрока, КлючУникальности); + Иначе + Форма = ПолучитьФормуЛкс("Обработка.ирПодборИОбработкаОбъектов.Форма",,, ИмяТаблицы); + Форма.ПараметрВыбранныеПоля = ВыбранныеПоля; + Форма.ПараметрТекущееПоле = ТекущееПолеТаблицы; + Форма.ПараметрКлючТекущейСтроки = ТабличноеПоле.ТекущаяСтрока; + Если НастройкиСписка = Неопределено Тогда + НастройкиСписка = ирОбщий.НастройкиДинамическогоСпискаЛкс(ДинамическийСписок); + КонецЕсли; + Форма.ПараметрНастройкаКомпоновки = НастройкиСписка; + Форма.Открыть(); + КонецЕсли; + Возврат Форма; + +КонецФункции + +// Параметры: +// ТабличноеПолеИлиТаблицаФормы - ТабличноеПоле, ТаблицаФормы, ГруппаФормы - +// выхТекущаяКолонка - КолонкаТабличногоПоля, ПолеФормы - +// выхМассивКолонок - Массив - все колоноки табличного поля +// +// Возвращаемое значение: +// Массив - все колоноки табличного поля +// +Функция КолонкиТаблицыФормыИлиТабличногоПоляЛкс(Знач ТабличноеПолеИлиТаблицаФормы, выхТекущаяКолонка = Неопределено, выхМассивКолонок = Неопределено) Экспорт + + Если выхМассивКолонок = Неопределено Тогда + выхМассивКолонок = Новый Массив; + КонецЕсли; + Если ТипЗнч(ТабличноеПолеИлиТаблицаФормы) = Тип("ТабличноеПоле") Тогда + Колонки = ТабличноеПолеИлиТаблицаФормы.Колонки; + выхТекущаяКолонка = ТабличноеПолеИлиТаблицаФормы.ТекущаяКолонка; + ИначеЕсли Ложь + Или ТипЗнч(ТабличноеПолеИлиТаблицаФормы) = Тип("ТаблицаФормы") + Или ТипЗнч(ТабличноеПолеИлиТаблицаФормы) = Тип("ГруппаФормы") + Тогда + Колонки = ТабличноеПолеИлиТаблицаФормы.ПодчиненныеЭлементы; + КонецЕсли; + Для Каждого Элемент Из Колонки Цикл + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + КолонкиТаблицыФормыИлиТабличногоПоляЛкс(Элемент,, выхМассивКолонок); + Иначе + выхМассивКолонок.Добавить(Элемент); + КонецЕсли; + КонецЦикла; + Если ТипЗнч(ТабличноеПолеИлиТаблицаФормы) = Тип("ТаблицаФормы") Тогда + выхТекущаяКолонка = ТабличноеПолеИлиТаблицаФормы.ТекущийЭлемент; + Если выхТекущаяКолонка <> Неопределено И выхМассивКолонок.Найти(выхТекущаяКолонка) = Неопределено Тогда + // Пользовательская колонка + выхМассивКолонок.Добавить(выхТекущаяКолонка); + КонецЕсли; + КонецЕсли; + Возврат выхМассивКолонок; + +КонецФункции + +// В обычной форме "Динамический список ИР" для перечислений сделан статический список через таблицу значений +Функция КлючиВыделенныхСтрокИмитатораДинамическогоСпискаЛкс(Знач ТабличноеПоле, ВыделенныеСтроки = Неопределено) + + Если ВыделенныеСтроки = Неопределено Тогда + ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; + КонецЕсли; + ПараметрКоманды = Новый Массив(); + Для Каждого Строка Из ВыделенныеСтроки Цикл + Если ТипЗнч(Строка) = Тип("СтрокаТаблицыЗначений") Тогда + КлючСтроки = Строка.Ссылка; + Иначе + КлючСтроки = Строка; + КонецЕсли; + ПараметрКоманды.Добавить(КлючСтроки); + КонецЦикла; + Возврат ПараметрКоманды; + +КонецФункции + +// Параметры: +// ВыбранныеПоля - Массив, *Неопределено +Функция ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(Знач МассивСсылок, Знач ВыбранныеПоля = Неопределено, Знач ЭтаФорма = Неопределено, Знач ТекущееПолеТаблицы = Неопределено, + Знач КлючТекущейСтроки = Неопределено, Знач КлючУникальности = "") Экспорт + + Если МассивСсылок.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + Если ЭтаФорма <> Неопределено Тогда + ирКлиент.ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); + КонецЕсли; + Если Не ЗначениеЗаполнено(КлючУникальности) Тогда + КлючУникальности = Новый УникальныйИдентификатор; + КонецЕсли; + Форма = ПолучитьФормуЛкс("Обработка.ирПодборИОбработкаОбъектов.Форма",,, КлючУникальности); + Форма.ПараметрМассивСсылок = МассивСсылок; + Форма.ПараметрВыбранныеПоля = ВыбранныеПоля; + Форма.ПараметрТекущееПоле = ТекущееПолеТаблицы; + Форма.ПараметрКлючТекущейСтроки = КлючТекущейСтроки; + Форма.Открыть(); + //Форма.ЗагрузитьОбъектыДляОбработки(РазличныеЗначенияМассиваЛкс(МассивСсылок),, ВыбранныеПоля); + Возврат Форма; + +КонецФункции + +Функция ПолучитьСтруктуруВосстановленияКонсолиЛкс(ИмяИлиОбъектКонсоли) Экспорт + + Если ТипЗнч(ИмяИлиОбъектКонсоли) = Тип("Строка") Тогда + ИмяКонсоли = ИмяИлиОбъектКонсоли; + Иначе + ИмяКонсоли = ИмяИлиОбъектКонсоли.Метаданные().Имя; + КонецЕсли; + Структура = Новый Структура(); + Структура.Вставить("БлокировкаВосстановления", Неопределено); + ПрефиксИмениФайлаВосстановления = ИмяКонсоли + "_" + ИмяПользователя() + "_"; + Структура.Вставить("ПрефиксИмениФайлаВосстановления", ПрефиксИмениФайлаВосстановления); + ИмяФайлаВосстановления = ИмяФайлаВосстановленияКонсолиЛкс(Структура.ПрефиксИмениФайлаВосстановления); + Структура.Вставить("ФайлВосстановления", Новый Файл(ИмяФайлаВосстановления)); + Возврат Структура; + +КонецФункции + +Функция ИмяФайлаВосстановленияКонсолиЛкс(Знач ПрефиксИмениФайлаВосстановления, Знач ИмяОткрытогоФайла = "") + + Если ЗначениеЗаполнено(ИмяОткрытогоФайла) Тогда + лФайл = Новый Файл(ИмяОткрытогоФайла); + ИмяОткрытогоФайла = лФайл.ИмяБезРасширения; + КонецЕсли; + ИмяФайлаВосстановления = ирКэш.Получить().КаталогФайловогоКэша + ирОбщий.РазделительПутиКФайлуЛкс() + ПрефиксИмениФайлаВосстановления + Лев(ИмяОткрытогоФайла, 40) + "_" + Новый УникальныйИдентификатор + ".tmp"; + Возврат ИмяФайлаВосстановления; + +КонецФункции + +Функция СохранитьФайлВКонсолиСВосстановлениемЛкс(ДиалогВыбораФайла, Знач ИмяСохраняемогоФайла, ИмяОткрытогоФайла = "", ДанныеДляФайла, СтруктураВосстановления, ЗапрашиватьИмяФайла = Ложь, + ФайлВосстановленияОбрезан = Ложь) Экспорт + + #Если Сервер И Не Сервер Тогда + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(); + #КонецЕсли + ФайлВосстановления = СтруктураВосстановления.ФайлВосстановления; + #Если Сервер И Не Сервер Тогда + ФайлВосстановления = Новый Файл; + #КонецЕсли + ПрефиксИмениФайлаВосстановления = СтруктураВосстановления.ПрефиксИмениФайлаВосстановления; + СохранитьФайл = Истина; + Если Не ирОбщий.СтрокиРавныЛкс(ИмяСохраняемогоФайла, ФайлВосстановления.ПолноеИмя) Тогда + // Здесь можно вставить проверочную сериализацию+десериализацию + ФайлВыбран = Истина; + лФайл = Новый Файл(ИмяОткрытогоФайла); + ДиалогВыбораФайла.ПолноеИмяФайла = ИмяСохраняемогоФайла; + Если Ложь + Или ПустаяСтрока(ИмяСохраняемогоФайла) + Или ЗапрашиватьИмяФайла + Или Найти(Нрег(лФайл.Имя), НРег(ПрефиксИмениФайлаВосстановления)) = 1 + Тогда + Пока Истина Цикл + Если ДиалогВыбораФайла.Выбрать() Тогда + лФайл = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла); + Если Найти(Нрег(лФайл.Имя), НРег(ПрефиксИмениФайлаВосстановления)) = 1 Тогда + КодОтвета = Вопрос("Это имя файла зарезервировано. Хотите выбрать другое?", РежимДиалогаВопрос.ОКОтмена); + Если КодОтвета = КодВозвратаДиалога.ОК Тогда + Продолжить; + Иначе + ФайлВыбран = Ложь; + Прервать; + КонецЕсли; + КонецЕсли; + ИмяСохраняемогоФайла = ДиалогВыбораФайла.ПолноеИмяФайла; + ФайлВыбран = Истина; + Прервать; + Иначе + ФайлВыбран = Ложь; + СохранитьФайл = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + ФайлВыбран = Ложь; + КонецЕсли; + Если СохранитьФайл Тогда + МоментНачала = ТекущаяДата(); + Если НРег(ИмяСохраняемогоФайла) = НРег(ФайлВосстановления.ПолноеИмя) Тогда + СтруктураВосстановления.БлокировкаВосстановления = Неопределено; + УдалитьФайлы(ФайлВосстановления.Путь, ФайлВосстановления.ИмяБезРасширения + ".*"); + ФайлВосстановления = Новый Файл(ИмяФайлаВосстановленияКонсолиЛкс(ПрефиксИмениФайлаВосстановления, ИмяОткрытогоФайла)); + ИмяСохраняемогоФайла = ФайлВосстановления.ПолноеИмя; + ЗначениеВФайл(ФайлВосстановления.Путь + ФайлВосстановления.ИмяБезРасширения + ".inf", Новый Структура("ИмяОткрытогоФайла, Обрезан", ИмяОткрытогоФайла, ФайлВосстановленияОбрезан)); + СтруктураВосстановления.ФайлВосстановления = ФайлВосстановления; + КонецЕсли; + ПроверитьСериализациюXMLПередВызовомЗначениеВФайлЛкс(ДанныеДляФайла); + Если Не ЗначениеВФайл(ИмяСохраняемогоФайла, ДанныеДляФайла) Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Ошибка записи файла %1",, ИмяСохраняемогоФайла), СтатусСообщения.Внимание); + ФайлВыбран = Ложь; + КонецЕсли; + Если НРег(ИмяСохраняемогоФайла) = НРег(ФайлВосстановления.ПолноеИмя) Тогда + выхДлительность = ТекущаяДата() - МоментНачала; + Если выхДлительность > 1 Тогда + ирОбщий.СообщитьЛкс("Автосохранение файла восстановления выполнено за " + выхДлительность + " секунд"); + КонецЕсли; + СтруктураВосстановления.БлокировкаВосстановления = Новый ЗаписьТекста(ИмяСохраняемогоФайла,,, Истина); + КонецЕсли; + КонецЕсли; + Возврат ФайлВыбран; + +КонецФункции + +Функция ПроверитьВыбратьФайлВосстановленияКонсолиЛкс(СтруктураВосстановления, выхОписаниеФайла = Ложь) Экспорт + + ПрефиксИмениФайлаВосстановления = СтруктураВосстановления.ПрефиксИмениФайлаВосстановления; + СписокВосстановления = Новый СписокЗначений; + КаталогФайлов = ирКэш.Получить().КаталогФайловогоКэша; + ФайлыВосстановления = НайтиФайлы(КаталогФайлов, ПрефиксИмениФайлаВосстановления + "*.tmp"); + Для Каждого Файл Из ФайлыВосстановления Цикл + #Если Сервер И Не Сервер Тогда + Файл = Новый Файл; + #КонецЕсли + СписокВосстановления.Добавить(Файл.ПолучитьВремяИзменения() + ирКэш.ПолучитьСмещениеВремениЛкс(), Файл.Имя); + КонецЦикла; + СписокВосстановления.СортироватьПоЗначению(НаправлениеСортировки.Убыв); + СписокВыбора = Новый СписокЗначений; + Разделитель = ирОбщий.РазделительПутиКФайлуЛкс(); + Для Каждого ЭлементСписка Из СписокВосстановления Цикл + ДатаИзменения = ЭлементСписка.Значение; + Файл = Новый Файл(КаталогФайлов + Разделитель + ЭлементСписка.Представление); + Попытка + //Файл.УстановитьВремяИзменения(ДатаИзменения); // Так не срабатывает блокировка + Пустышка = Новый ЗаписьТекста(Файл.ПолноеИмя, , , Истина); + Пустышка = Неопределено; + Исключение + // Файла заблокирован и значит сессия продолжается. + Продолжить; + КонецПопытки; + ИмяФайлаИнформации = Файл.Путь + Файл.ИмяБезРасширения + ".inf"; + Попытка + ОписаниеФайла = ЗначениеИзФайла(ИмяФайлаИнформации); + Исключение + // Файл восстановления старого формата (без файла информации) + Продолжить; + КонецПопытки; + ОписаниеФайла.Вставить("ИмяФайлаИнформации", ИмяФайлаИнформации); + ОписаниеФайла.Вставить("ФайлВосстановления", Файл); + ОписаниеФайла.Вставить("Устарел", Ложь); + ОригнальныйФайл = Новый Файл(ОписаниеФайла.ИмяОткрытогоФайла); + Если ОригнальныйФайл.Существует() Тогда + ОписаниеФайла.Устарел = ОригнальныйФайл.ПолучитьВремяИзменения() > Файл.ПолучитьВремяИзменения(); + КонецЕсли; + Если ОписаниеФайла.Устарел Тогда + ТекстАктуальности = "Старее"; + Иначе + ТекстАктуальности = "Новее"; + КонецЕсли; + Если ОписаниеФайла.Обрезан Тогда + ТекстПолноты = "Обрезан"; + Иначе + ТекстПолноты = "Полный"; + КонецЕсли; + СписокВыбора.Добавить(ОписаниеФайла, "" + ДатаИзменения + " - [" + ТекстАктуальности + ", " + ТекстПолноты + "] - " + ОписаниеФайла.ИмяОткрытогоФайла); + КонецЦикла; + ИмяФайлаВосстановления = ""; + Если СписокВыбора.Количество() > 0 Тогда + СписокВыбора.Добавить("<Удалить все файлы восстановления>"); + ФормаЗащиты = Неопределено; + #Если ТолстыйКлиентУправляемоеПриложение Тогда + Если ирКэш.НомерИзданияПлатформыЛкс() > "82" Тогда + // Антибаг платформы https://www.hostedredmine.com/issues/901181 + ФормаЗащиты = ОткрытьФорму("Обработка.ирПлатформа.Форма.Пустышка"); + КонецЕсли; + #КонецЕсли + ВыбранныйЭлемент = СписокВыбора.ВыбратьЭлемент("Открыть файл восстановления прерванной сессии"); + Если ФормаЗащиты <> Неопределено Тогда + ФормаЗащиты.Закрыть(); + КонецЕсли; + Если ВыбранныйЭлемент <> Неопределено Тогда + Если ВыбранныйЭлемент.Значение = "<Удалить все файлы восстановления>" Тогда + Для Каждого ЭлементСписка Из СписокВыбора Цикл + Если ВыбранныйЭлемент = ЭлементСписка Тогда + Продолжить; + КонецЕсли; + ФайлВосстановления = ЭлементСписка.Значение.ФайлВосстановления; + УдалитьФайлы(ФайлВосстановления.Путь, ФайлВосстановления.ИмяБезРасширения + ".*"); + КонецЦикла; + Иначе + ОписаниеФайла = ВыбранныйЭлемент.Значение; + выхОписаниеФайла = ОписаниеФайла; + ИмяФайлаВосстановления = ОписаниеФайла.ФайлВосстановления.ПолноеИмя; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат ИмяФайлаВосстановления; + +КонецФункции + +Функция ПослеВосстановленияФайлаКонсолиЛкс(Знач ОписаниеФайла) Экспорт + + ФайлВосстановления = ОписаниеФайла.ФайлВосстановления; + #Если Сервер И Не Сервер Тогда + ФайлВосстановления = Новый Файл; + #КонецЕсли + Результат = ФайлВосстановления.ПолноеИмя; + Если Не ОписаниеФайла.Обрезан И Не ОписаниеФайла.Устарел Тогда + Результат = ОписаниеФайла.ИмяОткрытогоФайла; + ИначеЕсли ОписаниеФайла.Обрезан Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Загружена обрезанная версия файла %1",, ОписаниеФайла.ИмяОткрытогоФайла)); + Иначе + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Загружена старая версия файла %1",, ОписаниеФайла.ИмяОткрытогоФайла)); + КонецЕсли; + УдалитьФайлы(ФайлВосстановления.Путь, ФайлВосстановления.ИмяБезРасширения + ".*"); + Возврат Результат; + +КонецФункции + +Процедура УдалитьФайлВосстановленияКонсолиСБлокировкойЛкс(СтруктураВосстановления) Экспорт + + СтруктураВосстановления.БлокировкаВосстановления = Неопределено; + ФайлВосстановления = СтруктураВосстановления.ФайлВосстановления; + Попытка + УдалитьФайлы(ФайлВосстановления.Путь, ФайлВосстановления.ИмяБезРасширения + ".*"); + Исключение + КонецПопытки; + +КонецПроцедуры + +Процедура СчитатьПорциюВыборкиВТаблицуЛкс(Выборка, ТаблицаПриемник, Знач РазмерПорции = 9999, СчитыватьЧерезКопиюТаблицы = Истина, СсылкаНаБуфернуюТаблицу = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + Пустышка = Новый Запрос; + Выборка = Пустышка.Выполнить(); + #КонецЕсли + Если СчитыватьЧерезКопиюТаблицы Тогда + // Иначе добавление и заполнение строк при связи с табличным полем будет дольше выполняться + КопияТаблицыПриемника = ТаблицаПриемник.Скопировать(); + Если СсылкаНаБуфернуюТаблицу <> Неопределено Тогда + СсылкаНаБуфернуюТаблицу.Вставить("Таблица", КопияТаблицыПриемника); + КонецЕсли; + Иначе + КопияТаблицыПриемника = ТаблицаПриемник; + КонецЕсли; + КоличествоРезультата = Выборка.Количество(); + Несчитано = КоличествоРезультата - КопияТаблицыПриемника.Количество(); + Если Ложь + Или РазмерПорции > Несчитано + Или РазмерПорции = 0 + Тогда + РазмерПорции = Несчитано; + КонецЕсли; + Если Несчитано = РазмерПорции Тогда + ПредставлениеПроцесса = "Загрузка выборки"; + Иначе + ПредставлениеПроцесса = "Загрузка порции выборки"; + КонецЕсли; + Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(РазмерПорции, ПредставлениеПроцесса); + КолонкиВложенныхТаблиц = Новый Массив(); + Для Каждого Колонка Из Выборка.Владелец().Колонки Цикл + Если Колонка.ТипЗначения.СодержитТип(Тип("РезультатЗапроса")) Тогда + КолонкиВложенныхТаблиц.Добавить(Колонка.Имя); + КонецЕсли; + КонецЦикла; + ЕстьКолонкиВложенныхТаблиц = КолонкиВложенныхТаблиц.Количество() > 0; + РазмерПорцииОсталось = РазмерПорции; + _РежимОтладки = Ложь; + Если _РежимОтладки Тогда // Можно менять на Истина в точке останова + // Пассивный оригинал расположенного ниже однострочного кода. Выполняйте изменения синхронно в обоих вариантах. + Пока Выборка.Следующий() Цикл + НоваяСтрока = КопияТаблицыПриемника.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка); + Если ЕстьКолонкиВложенныхТаблиц Тогда + Для Каждого КолонкаВложеннойТаблицы Из КолонкиВложенныхТаблиц Цикл + НоваяСтрока[КолонкаВложеннойТаблицы] = Выборка[КолонкаВложеннойТаблицы].Выгрузить(); + КонецЦикла; + КонецЕсли; + Если РазмерПорцииОсталось > 0 Тогда + РазмерПорцииОсталось = РазмерПорцииОсталось - 1; + Если РазмерПорцииОсталось = 0 Тогда + Прервать; + КонецЕсли; + КонецЕсли; + ирОбщий.ОбработатьИндикаторЛкс(Индикатор); + КонецЦикла; + Иначе + // Однострочный код использован для ускорения. Выше расположен оригинал. Выполняйте изменения синхронно в обоих вариантах. Преобразовано консолью кода из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru) + Пока Выборка.Следующий() Цикл   НоваяСтрока = КопияТаблицыПриемника.Добавить();   ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);   Если ЕстьКолонкиВложенныхТаблиц Тогда   Для Каждого КолонкаВложеннойТаблицы Из КолонкиВложенныхТаблиц Цикл   НоваяСтрока[КолонкаВложеннойТаблицы] = Выборка[КолонкаВложеннойТаблицы].Выгрузить();   КонецЦикла;   КонецЕсли;   Если РазмерПорцииОсталось > 0 Тогда   РазмерПорцииОсталось = РазмерПорцииОсталось - 1;   Если РазмерПорцииОсталось = 0 Тогда   Прервать;   КонецЕсли;   КонецЕсли;   ирОбщий.ОбработатьИндикаторЛкс(Индикатор);   КонецЦикла;   + КонецЕсли; + Если РазмерПорции = Несчитано Тогда + Выборка = Неопределено; + КонецЕсли; + ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); + ТаблицаПриемник = КопияТаблицыПриемника; + +КонецПроцедуры + +// ТабличноеПоле определяется как источник действий командной панели. +// Параметру ВыборкаРезультата внутри присваивается значение! +Процедура ЗагрузитьВыборкуВТабличноеПолеПервуюПорциюЛкс(ЭтаФорма, РезультатЗапроса, ВыборкаРезультата, КоманднаяПанель, + ИмяОбработчикаОбновления = "ОбновитьРазмерДинамическойТаблицы", БезопасныйПорогКоличестваСтрок = 100000, СсылкаНаБуфернуюТаблицу = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + лЗапрос = Новый Запрос; + РезультатЗапроса = лЗапрос.Выполнить(); + #КонецЕсли + //БезопасныйПорогКоличестваСтрок = 1; // Для отладки + ВыборкаРезультата = РезультатЗапроса.Выбрать(); + ТабличноеПоле = КоманднаяПанель.ИсточникДействий; + НачалоЗагрузки = ТекущаяДата(); + Если Ложь + Или БезопасныйПорогКоличестваСтрок = 0 + Или ВыборкаРезультата.Количество() < БезопасныйПорогКоличестваСтрок + Тогда + ВыборкаРезультата = Неопределено; + КоманднаяПанель.Кнопки.ЗагрузитьПолностью.Доступность = Ложь; + ТабличноеПоле.Значение = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой); + Попытка + Выполнить("ЭтаФорма." + ИмяОбработчикаОбновления + "()"); + Исключение + ВызватьИсключение ОписаниеОшибки(); + КонецПопытки; + Иначе + ТабличноеПоле.Значение = Новый ТаблицаЗначений; + Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл + ТипЗначения = Колонка.ТипЗначения; + Если ТипЗначения.СодержитТип(Тип("РезультатЗапроса")) Тогда + ТипЗначения = Новый ОписаниеТипов("ТаблицаЗначений"); + КонецЕсли; + ТабличноеПоле.Значение.Колонки.Добавить(Колонка.Имя, ТипЗначения, Колонка.Имя, Колонка.Ширина); + КонецЦикла; + ЭтаФорма.ПодключитьОбработчикОжидания(ИмяОбработчикаОбновления, 0.1, Истина); + СчитатьПорциюВыборкиВТаблицуЛкс(ВыборкаРезультата, ТабличноеПоле.Значение, БезопасныйПорогКоличестваСтрок, , СсылкаНаБуфернуюТаблицу); + КонецЕсли; + Длительность = ТекущаяДата() - НачалоЗагрузки; + Если Длительность > 30 Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Загрузка выборки выполнена за %1с",, Длительность)); + КонецЕсли; + +КонецПроцедуры + +// ТабличноеПоле определяется как источник действий командной панели. +Процедура ЗагрузитьВыборкуВТабличноеПолеПолностьюЛкс(ЭтаФорма, мВыборкаРезультата, КоманднаяПанель, + ИмяОбработчикаОбновления = "ОбновитьРазмерДинамическойТаблицы", СсылкаНаБуфернуюТаблицу = Неопределено) Экспорт + + ЭтаФорма.ПодключитьОбработчикОжидания(ИмяОбработчикаОбновления, 0.1, Истина); + ТабличноеПоле = КоманднаяПанель.ИсточникДействий; + СчитатьПорциюВыборкиВТаблицуЛкс(мВыборкаРезультата, ТабличноеПоле.Значение, 0, , СсылкаНаБуфернуюТаблицу); + +КонецПроцедуры + +// Параметру КоличествоРезультата внутри присваивается значение! +Процедура ПослеЗагрузкиВыборкиВТабличноеПолеЛкс(ЭтаФорма, мВыборкаРезультата, КоманднаяПанель, ПолеСтрокиКоличестваРезультата, СсылкаНаБуфернуюТаблицу = Неопределено) Экспорт + + ТабличноеПоле = КоманднаяПанель.ИсточникДействий; + Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда + КоличествоСтрокВТабличномПоле = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение).Количество(); + Иначе + КоличествоСтрокВТабличномПоле = ТабличноеПоле.Значение.Количество(); + КонецЕсли; + Если ТипЗнч(мВыборкаРезультата) = Тип("COMОбъект") Тогда + КоличествоРезультата = 0; + Попытка + КоличествоРезультата = мВыборкаРезультата.Count; + Исключение + Если мВыборкаРезультата.State <> 0 Тогда + КоличествоРезультата = мВыборкаРезультата.RecordCount; + КонецЕсли; + КонецПопытки; + //ВсеСчитано = КоличествоРезультата = КоличествоСтрокВТабличномПоле; + ИначеЕсли ТипЗнч(мВыборкаРезультата) = Тип("ВыборкаИзРезультатаЗапроса") Тогда + КоличествоРезультата = мВыборкаРезультата.Количество(); + Если СсылкаНаБуфернуюТаблицу <> Неопределено И СсылкаНаБуфернуюТаблицу.Свойство("Таблица") Тогда + ТабличноеПоле.Значение = СсылкаНаБуфернуюТаблицу.Таблица; + КоличествоСтрокВТабличномПоле = ТабличноеПоле.Значение.Количество(); + КонецЕсли; + //ВсеСчитано = Ложь; + Иначе + КоличествоРезультата = КоличествоСтрокВТабличномПоле; + //ВсеСчитано = Истина; + КонецЕсли; + ВсеСчитано = КоличествоРезультата = КоличествоСтрокВТабличномПоле; + ОбновитьЧислоЗагруженныхЭлементовВыборкиЛкс(ТабличноеПоле, КоманднаяПанель, ПолеСтрокиКоличестваРезультата, КоличествоСтрокВТабличномПоле, + КоличествоРезультата, ВсеСчитано); + +КонецПроцедуры + +Функция ЗагрузитьСвязанныеСтрокиТаблицыБДЛкс(ЭтаФорма, ТабличноеПолеСвязанныхКолонок, ТабличноеПолеСвязанныхСтрок, КоманднаяПанельСвязанныхСтрок, мВыборкаРезультатаСтрокиТаблицы, + ЗначениеОтбора, Знач ВидСравненияНовый = Неопределено, МаксимальнаяПорция = 500000) Экспорт + + СтрокаСвязаннойКолонки = ТабличноеПолеСвязанныхКолонок.ТекущаяСтрока; + ЭтаФорма.СтрокиТаблицыБД = Новый ТаблицаЗначений; + ТабличноеПолеСвязанныхСтрок.СоздатьКолонки(); + Если СтрокаСвязаннойКолонки = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Запрос = ЗапросСтрокСоЗначениемВКолонкеБДЛкс(СтрокаСвязаннойКолонки, ЗначениеОтбора, ВидСравненияНовый, МаксимальнаяПорция); + #Если Сервер И Не Сервер Тогда + Запрос = Новый Запрос; + #КонецЕсли + Попытка + РезультатСтрокиТаблицы = Запрос.Выполнить(); + Исключение + // Антибаг платформы 8.2.14 http://partners.v8.1c.ru/forum/thread.jsp?id=1031481#1031481 + ирОбщий.СообщитьЛкс(ОписаниеОшибки()); + Возврат Неопределено; + КонецПопытки; + ирКлиент.ЗагрузитьВыборкуВТабличноеПолеПервуюПорциюЛкс(ЭтаФорма, РезультатСтрокиТаблицы, мВыборкаРезультатаСтрокиТаблицы, КоманднаяПанельСвязанныхСтрок); + + //Если СтрокиТаблицыБД.Количество() = МаксимальныйРазмер Тогда + // ирОбщий.СообщитьЛкс("Были выбраны первые " + МаксимальныйРазмер + " строк таблицы"); + //КонецЕсли; + СтруктураОтбора = Новый Структура("ПолноеИмяТаблицы, ИмяКолонки", СтрокаСвязаннойКолонки.ПолноеИмяТаблицы, СтрокаСвязаннойКолонки.ИмяКолонки); + ЗаполнитьЗначенияСвойств(СтруктураОтбора, СтрокаСвязаннойКолонки); + ТабличноеПолеСвязанныхСтрок.СоздатьКолонки(); + Для Каждого КолонкаТП Из ТабличноеПолеСвязанныхСтрок.Колонки Цикл + КолонкаТП.ТолькоПросмотр = Истина; + КонецЦикла; + Попытка + ИскомаяСсылка = СтрокаСвязаннойКолонки.Ссылка + Исключение + ИскомаяСсылка = Неопределено; + КонецПопытки; + Если ИскомаяСсылка <> Неопределено Тогда + ТекущаяСтрока = ТабличноеПолеСвязанныхСтрок.Значение.Найти(ИскомаяСсылка, СтрокаСвязаннойКолонки.ИмяКолонки); + Если ТекущаяСтрока <> Неопределено Тогда + ТабличноеПолеСвязанныхСтрок.ТекущаяСтрока = ТекущаяСтрока; + КонецЕсли; + КонецЕсли; + ирОбщий.НастроитьДобавленныеКолонкиТабличногоПоляЛкс(ТабличноеПолеСвязанныхСтрок,,,, Истина); + ТабличноеПолеСвязанныхСтрок.ТекущаяКолонка = ТабличноеПолеСвязанныхСтрок.Колонки[СтрокаСвязаннойКолонки.ИмяКолонки]; + Возврат СтрокаСвязаннойКолонки.ПолноеИмяТаблицы; + +КонецФункции + +Функция ЗапросСтрокСоЗначениемВКолонкеБДЛкс(Знач СтрокаСвязаннойКолонки, Знач ЗначениеОтбора, Знач ВидСравненияНовый = Неопределено, Знач МаксимальнаяПорция = 0) Экспорт + + // Антибаг 8.2.14 http://partners.v8.1c.ru/forum/thread.jsp?id=1017264#1017264 + Если Истина + И СтрокаСвязаннойКолонки.ТипТаблицы = "Изменения" + И Найти(СтрокаСвязаннойКолонки.ПолноеИмяТаблицы, "РегистрСведений.") = 1 + И ирКэш.ДоступныОбщиеРеквизитыЛкс() + Тогда + Если Метаданные.ОбщиеРеквизиты.Количество() > 0 Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + //Если ЗначениеОтбора = Неопределено Тогда + // ЗначениеОтбора = СтрокаСвязаннойКолонки.Ссылка; + //КонецЕсли; + ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(СтрокаСвязаннойКолонки.ПолноеИмяТаблицы); + #Если Сервер И Не Сервер Тогда + ПоляТаблицыБД = НайтиПоСсылкам().Колонки; + #КонецЕсли + ТекстПоля = ""; + Для Каждого ПолеТаблицыБД Из ПоляТаблицыБД Цикл + Если Ложь + Или ПолеТаблицыБД.ТипЗначения.СодержитТип(Тип("ХранилищеЗначения")) + Или ПолеТаблицыБД.ТипЗначения.СодержитТип(Тип("ТаблицаЗначений")) + Тогда + Продолжить; + КонецЕсли; + Если ЗначениеЗаполнено(ТекстПоля) Тогда + ТекстПоля = ТекстПоля + ", "; + КонецЕсли; + ТекстПоля = ТекстПоля + "Т." + ПолеТаблицыБД.Имя; + КонецЦикла; + ТекстПервые = ""; + Если МаксимальнаяПорция > 0 Тогда + ТекстПервые = " ПЕРВЫЕ " + Формат(МаксимальнаяПорция, "ЧГ=") + " "; + КонецЕсли; + ТекстЗапроса = " + |ВЫБРАТЬ " + ТекстПервые + " " + ТекстПоля + " + |ИЗ " + ирКэш.ИмяТаблицыИзМетаданныхЛкс(СтрокаСвязаннойКолонки.ПолноеИмяТаблицы) + " КАК Т"; + + // Очень долгий способ + //ТекстЗапроса = ТекстЗапроса + " + //|{ГДЕ " + ПсевдонимТаблицы + "." + СтрокаСвязаннойКолонки.ИмяКолонки + "}"; + //Схема = СоздатьСхемуКомпоновкиПоЗапросу(ТекстЗапроса); + //НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; + //ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки, СтрокаСвязаннойКолонки.ИмяКолонки, ЗначениеОтбора, ВидСравненияНовый); + //Запрос = ирОбщий.ЗапросИзКомпоновкиЛкс(Схема, НастройкаКомпоновки); + // + ВыражениеСравнения = ирОбщий.ВыражениеСравненияСПараметромВЗапросеЛкс(ПоляТаблицыБД.Найти(СтрокаСвязаннойКолонки.ИмяКолонки, "Имя"), ВидСравненияНовый, "ЗначениеОтбора"); + ТекстЗапроса = ТекстЗапроса + " + |ГДЕ Т." + СтрокаСвязаннойКолонки.ИмяКолонки + " " + ВыражениеСравнения; + ПостроительПорядка = ирОбщий.ОсновнойПорядокТаблицыБДЛкс(СтрокаСвязаннойКолонки.ПолноеИмяТаблицы,,,, Истина); + Если ЗначениеЗаполнено(ПостроительПорядка.Порядок) Тогда + ТекстЗапроса = ТекстЗапроса + " + |УПОРЯДОЧИТЬ ПО " + ирОбщий.ПорядокВСтрокуЛкс(ПостроительПорядка.Порядок); + КонецЕсли; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.Параметры.Вставить("ЗначениеОтбора", ЗначениеОтбора); + Возврат Запрос; + +КонецФункции + +Процедура ОбновитьЧислоЗагруженныхЭлементовВыборкиЛкс(ТабличноеПоле, КоманднаяПанель, ПолеСтрокиКоличестваРезультата, КоличествоЗагружено, КоличествоРезультата, ВсеСчитано) Экспорт + + Если ВсеСчитано Тогда + СтрокаКоличествоРезультата = "" + КоличествоЗагружено; + ПолеСтрокиКоличестваРезультата.ЦветФона = Новый Цвет(); + Иначе + СтрокаКоличествоРезультата = "" + КоличествоЗагружено + "/" + КоличествоРезультата; + ПолеСтрокиКоличестваРезультата.ЦветФона = ирОбщий.ПолучитьЦветСтиляЛкс("ирЦветФонаВычисляемогоЗначения"); + КонецЕсли; + ПолеСтрокиКоличестваРезультата.Значение = СтрокаКоличествоРезультата; + КоманднаяПанель.Кнопки.ЗагрузитьПолностью.Доступность = Не ВсеСчитано; + +КонецПроцедуры + +// Заменяет текущее выделение в поле текстового документа новым текстом. +// После этого устанавливает выделение на вставленный фрагмент. +// +// Параметры: +// ПолеТекста - ПолеТекста; +// НовыйТекст - Строка. +// +Процедура ЗаменитьВыделенныйТекстСохраняяГраницыВыделенияЛкс(Знач ПолеТекста, Знач НовыйТекст) Экспорт + + Перем НачальнаяСтрока; + Перем НачальнаяКолонка; + Перем КонечнаяСтрока; + Перем КонечнаяКолонка; + + ПолеТекста = ОболочкаПоляТекстаЛкс(ПолеТекста); + #Если Сервер И Не Сервер Тогда + ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + ПолеТекста.ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка); + ПолеТекста.УстановитьГраницыВыделения(1, 1, НачальнаяСтрока, НачальнаяКолонка); + НачальнаяГраница = СтрДлина(ПолеТекста.ВыделенныйТекст()) + 1; + ПолеТекста.УстановитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка); + ПолеТекста.ВыделенныйТекст(НовыйТекст); + КонечнаяГраница = НачальнаяГраница + СтрДлина(НовыйТекст); + Если КонечнаяГраница > СтрДлина(ПолеТекста.ПолучитьТекст()) Тогда + КонечнаяГраница = КонечнаяГраница - 1; + КонецЕсли; + ПолеТекста.УстановитьГраницыВыделения(НачальнаяГраница, КонечнаяГраница); + +КонецПроцедуры + +Процедура УстановитьТекстСОткатомЛкс(Знач ПолеТекста, Знач Текст) Экспорт + + ПолеТекста = ОболочкаПоляТекстаЛкс(ПолеТекста); + #Если Сервер И Не Сервер Тогда + ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + СтарыйТекст = ПолеТекста.ПолучитьТекст(); + ПолеТекста.УстановитьГраницыВыделения(1, СтрДлина(СтарыйТекст) + 1); + ПолеТекста.ВыделенныйТекст(Текст); + +КонецПроцедуры + +Функция ОболочкаПоляТекстаЛкс(Знач ПолеТекста) Экспорт + ТипПоля = ТипЗнч(ПолеТекста); + Если Ложь + Или ТипПоля = Тип("ПолеВвода") + Или ТипПоля = Тип("ПолеТекстовогоДокумента") + Или ТипПоля = Тип("ПолеHTMLДокумента") + Или (Истина + И ТипПоля = Тип("ПолеФормы") + И (Ложь + Или ПолеТекста.Вид = ВидПоляФормы.ПолеВвода + Или ПолеТекста.Вид = ВидПоляФормы.ПолеТекстовогоДокумента + Или ПолеТекста.Вид = ВидПоляФормы.ПолеHTMLДокумента)) + Тогда + ОболочкаПолеТекста = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирОболочкаПолеТекста"); + #Если Сервер И Не Сервер Тогда + ОболочкаПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + ОболочкаПолеТекста.ЭлементФормы = ПолеТекста; + Иначе + ОболочкаПолеТекста = ПолеТекста; + КонецЕсли; + Возврат ОболочкаПолеТекста; +КонецФункции + +Функция ЛиОболочкаТекстаЛкс(Объект) Экспорт + + Результат = Ложь + Или (Истина + И ирКэш.ЛиПортативныйРежимЛкс() + И ирОбщий.ЛиВнешняяОбработкаЛкс(Объект)) + Или (Истина + И Не ирКэш.ЛиПортативныйРежимЛкс() + И ТипЗнч(Объект) = Тип("ОбработкаОбъект.ирОболочкаПолеТекста")); + Возврат Результат; + +КонецФункции + +Процедура ЗаменитьИВыделитьВыделенныйТекстПоляЛкс(Знач ЭтаФорма, Знач ПолеТекстаВыражения, Знач НовыйВыделенныйТекст = "") Экспорт + + Перем Граница1, Граница2, Граница3, Граница4; + ПолеТекстаВыражения = ОболочкаПоляТекстаЛкс(ПолеТекстаВыражения); + #Если Сервер И Не Сервер Тогда + ПолеТекстаВыражения = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + Граница1 = 0; Граница2 = 0; Граница3 = 0; Граница4 = 0; + ПолеТекстаВыражения.ПолучитьГраницыВыделения(Граница1, Граница2, Граница3, Граница4); + Если Не ЗначениеЗаполнено(НовыйВыделенныйТекст) Тогда + Если ТипЗнч(ПолеТекстаВыражения) = Тип("ПолеВвода") Тогда + НовыйВыделенныйТекст = ПолеТекстаВыражения.Значение; + Иначе + НовыйВыделенныйТекст = ПолеТекстаВыражения.ПолучитьТекст(); + КонецЕсли; + Граница2 = 1; + Иначе + ПолеТекстаВыражения.ВыделенныйТекст(НовыйВыделенныйТекст); + КонецЕсли; + ПолеТекстаВыражения.УстановитьГраницыВыделения(Граница1, Граница2, Граница1, Граница2 + СтрДлина(НовыйВыделенныйТекст)); + ЭтаФорма.ТекущийЭлемент = ПолеТекстаВыражения.ЭлементФормы; + +КонецПроцедуры + +// Функция - Найти показать строку в поле текстового документа лкс +// +// Параметры: +// Форма - - +// ПолеТекста - ПолеТекста, ПолеВвода - +// СтрокаПоиска - - +// СловоЦеликом - - +// +// Возвращаемое значение: +// - Булево - была ли найдена и выделена строка +// +Функция НайтиПоказатьСтрокуВПолеТекстаЛкс(Форма = Неопределено, Знач ПолеТекста, СтрокаПоиска, СловоЦеликом = Ложь, ИскатьСНачала = Ложь) Экспорт + + ПолеТекста = ОболочкаПоляТекстаЛкс(ПолеТекста); + #Если Сервер И Не Сервер Тогда + ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + НачальнаяПозиция = 0; + КонечнаяПозиция = 0; + Если Не ИскатьСНачала Тогда + ПолеТекста.ВыделениеОдномерное(НачальнаяПозиция, КонечнаяПозиция); + КонецЕсли; + Позиция = ирОбщий.СтрНайтиСловоЛкс(ПолеТекста.ПолучитьТекст(), СтрокаПоиска, КонечнаяПозиция, СловоЦеликом); + Если Позиция > 0 Тогда + Если Форма <> Неопределено Тогда + Форма.ТекущийЭлемент = ПолеТекста.ЭлементФормы; + КонецЕсли; + ПолеТекста.УстановитьГраницыВыделения(Позиция, Позиция + СтрДлина(СтрокаПоиска),,,, Форма); + Результат = Истина; + Иначе + Если СтрДлина(ПолеТекста.ВыделенныйТекст()) > 0 Тогда + ПолеТекста.УстановитьГраницыВыделения(1, 1); + КонецЕсли; + Результат = Ложь; + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Функция - Открыть гиперссылку из поля HTMLЛкс +// +// Параметры: +// htmlElement - - +// МодификаторCTRL - - +// +// Возвращаемое значение: +// - Булево - гиперссылка открыта +// +Функция ОткрытьГиперссылкуИзПоляHTMLЛкс(Знач htmlElement, Знач МодификаторCTRL = Истина) Экспорт + + Пока htmlElement <> Неопределено И htmlElement <> Null И ВРег(htmlElement.tagName) <> "A" Цикл + htmlElement = htmlElement.parentElement; + КонецЦикла; + Если htmlElement = Неопределено Или htmlElement = Null Тогда + Возврат Ложь; + КонецЕсли; + Если htmlElement.hasAttribute("data-href") Тогда + Если Не МодификаторCTRL Тогда + Возврат Ложь; + КонецЕсли; + //НовыйАдрес = htmlElement.getAttribute("data-href"); + НовыйАдрес = htmlElement.textContent; + Иначе + НовыйАдрес = htmlElement.href; + КонецЕсли; + Если ЗначениеЗаполнено(НовыйАдрес) Тогда + //Если Ложь + // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "http://") + // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "https://") + // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "e1c://") + // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "ftp://") + // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "file://") + //Тогда + ЗапуститьПриложение(НовыйАдрес); + Возврат Истина; + КонецЕсли; + Возврат Ложь; + +КонецФункции + +// . +// Параметры: +// Элемент - ПолеТабличногоДокумента +// +Функция ПолеТабличногоДокумента_ПредставлениеСуммыВыделенныхЯчеекЛкс(Знач ПолеТД, Знач Принудительно = Ложь) Экспорт + + #Если Сервер И Не Сервер Тогда + ПолеТД = Новый ТабличныйДокумент; + #КонецЕсли + ВыделенныеОбласти = ПолеТД.ВыделенныеОбласти; + НачальноеКоличество = ВыделенныеОбласти.Количество(); + Если Истина + И Не Принудительно + И НачальноеКоличество = 1 + И (Ложь + Или ТипЗнч(ВыделенныеОбласти[0]) = Тип("РисунокТабличногоДокумента") + Или ПолеТД.Область(ВыделенныеОбласти[0].Низ, ВыделенныеОбласти[0].Право).Имя = ВыделенныеОбласти[0].Имя) + Тогда + Возврат ""; + КонецЕсли; + Сумма = 0; + СчетчикЯчеекСуммы = 0; + СчетчикЯчеекОбщий = 0; + ЕстьИгнорированныеОбласти = Ложь; + Для СчетчикВыделенныеОбласти = 1 По НачальноеКоличество Цикл + Область = ВыделенныеОбласти[НачальноеКоличество - СчетчикВыделенныеОбласти]; + Если ТипЗнч(Область) = Тип("РисунокТабличногоДокумента") Тогда + Продолжить; + КонецЕсли; + Право = Область.Право; + Если Право = 0 Тогда + Право = ПолеТД.ШиринаТаблицы; + КонецЕсли; + ПлощадьОбласти = (Право - Область.Лево + 1) * (Область.Низ - Область.Верх + 1); + СчетчикЯчеекОбщий = СчетчикЯчеекОбщий + ПлощадьОбласти; + Если Ложь + Или ПлощадьОбласти < 1000 + Или Принудительно И ПлощадьОбласти < 10000 + Тогда + Для НомерКолонки = Область.Лево по Право Цикл + Для НомерСтроки = Область.Верх по Область.Низ Цикл + ОбластьЯчейки = ПолеТД.Область(НомерСтроки, НомерКолонки); + Если ОбластьЯчейки.Лево <> НомерКолонки Или ОбластьЯчейки.Верх <> НомерСтроки Тогда + // Данная ячейка принадлежит объединенным ячейкам и не является начальной ячейкой + Продолжить; + КонецЕсли; + Попытка + Число = Число(ОбластьЯчейки.Текст); + Исключение + Продолжить; + КонецПопытки; + Сумма = Сумма + Число; + СчетчикЯчеекСуммы = СчетчикЯчеекСуммы + 1; + КонецЦикла; + КонецЦикла; + Иначе + ЕстьИгнорированныеОбласти = Истина; + КонецЕсли; + КонецЦикла; + СчетчикЯчеекСуммы = "" + СчетчикЯчеекСуммы; + Сумма = "" + Сумма; + Если ЕстьИгнорированныеОбласти Тогда + СчетчикЯчеекСуммы = СчетчикЯчеекСуммы + "+?"; + Сумма = Сумма + "+?"; + КонецЕсли; + Текст = "" + СчетчикЯчеекСуммы + " из " + СчетчикЯчеекОбщий + " яч. = " + Сумма + ""; + Возврат Текст; + +КонецФункции + +Процедура ПолеТабличногоДокументаПриАктивизацииОбластиЛкс(Знач ЭтаФорма, Знач ПолеТД) Экспорт + + #Если Сервер И Не Сервер Тогда + ПолеТД = Новый ТабличныйДокумент; + #КонецЕсли + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ПолеТД); + Если ДопСвойства.КнопкаОтображенияПодвала <> Неопределено Тогда + ДопСвойства.КнопкаОтображенияПодвала.Текст = ПолеТабличногоДокумента_ПредставлениеСуммыВыделенныхЯчеекЛкс(ПолеТД, ДопСвойства.КнопкаОтображенияПодвала.Пометка); + КонецЕсли; + Если Ложь + Или ДопСвойства.КнопкаОформленияТекущихСтрок = Неопределено + Или ДопСвойства.КнопкаОформленияТекущихСтрок.Пометка + Тогда + ПараметрыОбработчика = Новый Структура; + ПараметрыОбработчика.Вставить("ЭтаФорма", ЭтаФорма); + ПараметрыОбработчика.Вставить("ПолеТабличногоДокумента", ПолеТД); + #Если Сервер И Не Сервер Тогда + ирКлиент.ПолеТабличногоДокументаОформитьТекущиеСтрокиОтложенноЛкс(); + #КонецЕсли + Если Не ПодключитьОбработчикОжиданияСПараметрамиЛкс("ирКлиент.ПолеТабличногоДокументаОформитьТекущиеСтрокиОтложенноЛкс", ПараметрыОбработчика,,, Ложь) Тогда + ирКлиент.ПолеТабличногоДокументаОформитьТекущиеСтрокиОтложенноЛкс(ПараметрыОбработчика); + КонецЕсли; + Иначе + ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(ЭтаФорма, ПолеТД); + КонецЕсли; + +КонецПроцедуры + +Процедура ПолеТабличногоДокументаОформитьТекущиеСтрокиОтложенноЛкс(Параметры) Экспорт + ПолеТабличногоДокументаОформитьТекущиеСтрокиЛкс(Параметры.ЭтаФорма, Параметры.ПолеТабличногоДокумента); +КонецПроцедуры + +Функция ДополнительныеДействияРасшифровкиКомпоновкиЛкс(Знач ДоступныеДействия, Знач ЭлементРасшифровки, Знач ДополнительныеПунктыМеню = Неопределено, выхКоличествоСсылочныхПолей = 0, + ЗамещатьСтандартные = Ложь, ЗначенияВсехПолей = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ЭлементРасшифровки = Новый ЭлементРасшифровкиКомпоновкиДанныхПоля; + #КонецЕсли + Если ДополнительныеПунктыМеню = Неопределено Тогда + ДополнительныеПунктыМеню = Новый СписокЗначений; + КонецЕсли; + выхКоличествоСсылочныхПолей = 0; + СписокДействийОформить = Новый СписокЗначений; + СписокДействийОтборать = Новый СписокЗначений; + СписокДействийСгруппировать = Новый СписокЗначений; + СписокДействийУпорядочить = Новый СписокЗначений; + СписокДействийГруппировки = Новый СписокЗначений; + ЗначенияПолей = ЭлементРасшифровки.ПолучитьПоля(); + Для каждого ЗначениеПоля Из ЗначенияПолей Цикл + ДобавитьДействияРасшифровкиПоПолюЛкс(Истина, ДополнительныеПунктыМеню, ЗначениеПоля, СписокДействийОтборать, СписокДействийОформить, СписокДействийСгруппировать, СписокДействийУпорядочить, + ЭлементРасшифровки, выхКоличествоСсылочныхПолей); + КонецЦикла; + Если ЗначенияВсехПолей = Неопределено Тогда + ЗначенияВсехПолей = Новый Соответствие; + ирОбщий.ИзвлечьКлючИзЭлементаРасшифровкиКомпоновкиЛкс(ЭлементРасшифровки,, ЗначенияВсехПолей); + КонецЕсли; + Для Каждого КлючИЗначение Из ЗначенияВсехПолей Цикл + Если ЗначенияПолей.Найти(КлючИЗначение.Ключ) <> Неопределено Тогда + Продолжить; + КонецЕсли; + ЗначениеПоля = Новый Структура("Поле, Значение", КлючИЗначение.Ключ, КлючИЗначение.Значение); + ДобавитьДействияРасшифровкиПоПолюЛкс(Ложь, СписокДействийГруппировки, ЗначениеПоля, СписокДействийОтборать, СписокДействийОформить,, СписокДействийУпорядочить, ЭлементРасшифровки); + КонецЦикла; + Если СписокДействийГруппировки.Количество() > 0 Тогда + ДополнительныеПунктыМеню.Добавить(СписокДействийГруппировки, "Группировки"); + КонецЕсли; + Если ЗамещатьСтандартные Тогда + ИндексМассива = ДоступныеДействия.Найти(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить); + Если ИндексМассива <> Неопределено Тогда + ДоступныеДействия.Удалить(ИндексМассива); + ДополнительныеПунктыМеню.Добавить(СписокДействийОформить, "Оформить",, ирКэш.КартинкаПоИмениЛкс("УсловноеОформлениеКомпоновкиДанных")); + КонецЕсли; + ИндексМассива = ДоступныеДействия.Найти(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать); + Если ИндексМассива <> Неопределено Тогда + ДоступныеДействия.Удалить(ИндексМассива); + ДополнительныеПунктыМеню.Добавить(СписокДействийОтборать, "Отфильтровать",, ирКэш.КартинкаПоИмениЛкс("ОтборКомпоновкиДанных")); + КонецЕсли; + //ДополнительныеПунктыМеню.Добавить(СписокДействийСгруппировать, "Сгруппировать"); // Не доделано + ИндексМассива = ДоступныеДействия.Найти(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить); + Если ИндексМассива <> Неопределено Тогда + ДоступныеДействия.Удалить(ИндексМассива); + ДополнительныеПунктыМеню.Добавить(СписокДействийУпорядочить, "Упорядочить",, ирКэш.КартинкаПоИмениЛкс("ПорядокКомпоновкиДанных")); + КонецЕсли; + КонецЕсли; + Возврат ДополнительныеПунктыМеню; + +КонецФункции + +Процедура ДобавитьДействияРасшифровкиПоПолюЛкс(ЛиПрямоеПоле = Истина, Знач СписокДействийОткрыть, Знач ЗначениеПоля, Знач СписокДействийОтборать, Знач СписокДействийОформить, + Знач СписокДействийСгруппировать = Неопределено, Знач СписокДействийУпорядочить = Неопределено, Знач ЭлементРасшифровки, выхКоличествоСсылочныхПолей = 0) + + ПорогДлиныПредставления = 100; + ПредставлениеЗначения = ирОбщий.ПредставлениеЗначенияСОграничениемДлиныЛкс(ирОбщий.РасширенноеПредставлениеЗначенияЛкс(ЗначениеПоля.Значение,,,,, Истина), ПорогДлиныПредставления); + Если Ложь + Или ирОбщий.ЛиКоллекцияЛкс(ЗначениеПоля.Значение) + Или ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ЗначениеПоля.Значение) + Тогда + СписокДействийОткрыть.Добавить(Новый Структура("Действие, ЗначениеПоля", "ОткрытьЗначение", ЗначениеПоля), "Открыть """ + ЗначениеПоля.Поле + " = " + ПредставлениеЗначения + """", + , ирКлиент.КартинкаТипаЛкс(ТипЗнч(ЗначениеПоля.Значение))); + Иначе + СписокДействийОткрыть.Добавить(Новый Структура("Действие, ЗначениеПоля", "КопироватьВБуферОбмена", ЗначениеПоля), ЗначениеПоля.Поле + " = " + ПредставлениеЗначения, + , ирКэш.КартинкаПоИмениЛкс("ирКопировать")); + КонецЕсли; + Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ЗначениеПоля.Значение) Тогда + СписокДействийОткрыть.Добавить(Новый Структура("Действие, ЗначениеПоля", "ОткрытьВРедактореОбъектаБД", ЗначениеПоля), "Открыть """ + ЗначениеПоля.Поле + " = " + ПредставлениеЗначения + """", + , ирКэш.КартинкаПоИмениЛкс("ирРедактироватьОбъектБД")); + выхКоличествоСсылочныхПолей = выхКоличествоСсылочныхПолей + 1; + КонецЕсли; + Если ЛиПрямоеПоле Тогда + СписокДействийСгруппировать.Добавить(Новый Структура("Действие, ЗначениеПоля, Родители", "Сгруппировать", ЗначениеПоля, ЭлементРасшифровки.ПолучитьРодителей()), "Сгруппировать """ + ЗначениеПоля.Поле + """"); + СписокДействийОформить.Добавить(Новый Структура("Действие, ЗначениеПоля", "ОформитьПоле", ЗначениеПоля), "Оформить """ + ЗначениеПоля.Поле + """"); + КонецЕсли; + Если ЗначениеПоля.Значение <> Null Тогда + СписокДействийОформить.Добавить(Новый Структура("Действие, ЗначениеПоля", "ОформитьЗначение", ЗначениеПоля), "Оформить """ + ЗначениеПоля.Поле + " = " + ПредставлениеЗначения + """"); + СписокДействийОтборать.Добавить(Новый Структура("Действие, ЗначениеПоля", "Отфильтровать", ЗначениеПоля), "Отобрать """ + ЗначениеПоля.Поле + " = " + ПредставлениеЗначения + """"); + КонецЕсли; + СписокДействийУпорядочить.Добавить(Новый Структура("Действие, ЗначениеПоля", "Упорядочить", ЗначениеПоля), "Упорядочить """ + ЗначениеПоля.Поле + """"); + +КонецПроцедуры + +Функция ОбработатьДополнительноеДействиеРасшифровкиКомпоновкиЛкс(Знач ВыбранноеДействие, СтандартнаяОбработка, НастройкаКомпоновки = Неопределено) Экспорт + + Если ТипЗнч(ВыбранноеДействие) = Тип("Структура") Тогда + ЗначениеПоля = ВыбранноеДействие.ЗначениеПоля; + #Если Сервер И Не Сервер Тогда + ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; + ЗначениеПоля = ДанныеРасшифровки.Элементы[0].ПолучитьПоля()[0]; + НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; + #КонецЕсли + Если ВыбранноеДействие.Действие = "ОткрытьЗначение" Тогда + ОткрытьЗначениеЛкс(ЗначениеПоля.Значение, Ложь, СтандартнаяОбработка); + ИначеЕсли ВыбранноеДействие.Действие = "ОткрытьВРедактореОбъектаБД" Тогда + СтандартнаяОбработка = Ложь; + ОткрытьСсылкуВРедактореОбъектаБДЛкс(ЗначениеПоля.Значение); + ИначеЕсли ВыбранноеДействие.Действие = "КопироватьВБуферОбмена" Тогда + СтандартнаяОбработка = Ложь; + ТекстВБуферОбменаОСЛкс(ЗначениеПоля.Значение); + ИначеЕсли Ложь + Или ВыбранноеДействие.Действие = "ОформитьПоле" + Или ВыбранноеДействие.Действие = "ОформитьЗначение" + Тогда + СтандартнаяОбработка = Ложь; + Если ВыбранноеДействие.Действие = "ОформитьПоле" Тогда + ЭлементНастроек = ирОбщий.НайтиЭлементУсловногоОформленияПоПолюЛкс(НастройкаКомпоновки.УсловноеОформление, ЗначениеПоля.Поле); + КонецЕсли; + Если ЭлементНастроек = Неопределено Тогда + ЭлементНастроек = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); + ОформляемоеПоле = ЭлементНастроек.Поля.Элементы.Добавить(); + ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ЗначениеПоля.Поле); + ОформляемоеПоле.Использование = Истина; + Если ВыбранноеДействие.Действие = "ОформитьЗначение" Тогда + ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементНастроек.Отбор, ЗначениеПоля.Поле, ЗначениеПоля.Значение); + КонецЕсли; + КонецЕсли; + ИначеЕсли ВыбранноеДействие.Действие = "Отфильтровать" Тогда + СтандартнаяОбработка = Ложь; + ЭлементНастроек = ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки.Отбор, ЗначениеПоля.Поле, ЗначениеПоля.Значение); + ИначеЕсли ВыбранноеДействие.Действие = "Сгруппировать" Тогда + //Родители = ВыбранноеДействие.Родители; + //#Если Сервер И Не Сервер Тогда + // Родители = ДанныеРасшифровки.Элементы[0].ПолучитьРодителей(); + //#КонецЕсли + //Если Родители.Количество() > 0 Тогда + // ГруппировкаРодитель = Родители[0]; + //КонецЕсли; + //СтандартнаяОбработка = Ложь; + //// TODO придумать. Сейчас ошибка + //ЭлементСтруктурыРодитель = ирОбщий.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(НастройкаКомпоновки.Структура, ГруппировкаРодитель.Группировка, Ложь); + //Если ЭлементСтруктурыРодитель = Неопределено Тогда + // ЭлементСтруктурыРодитель = НастройкаКомпоновки.Структура; + //КонецЕсли; + //ЭлементНастроек = ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПредставлениюЛкс(ЭлементСтруктурыРодитель.ПоляГруппировки, ЗначениеПоля.Поле); + ИначеЕсли ВыбранноеДействие.Действие = "Упорядочить" Тогда + СтандартнаяОбработка = Ложь; + ЭлементНастроек = ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Порядок, ЗначениеПоля.Поле, ЗначениеПоля.Значение); + КонецЕсли; + КонецЕсли; + Возврат ЭлементНастроек; + +КонецФункции + +// Параметры: +// ОтчетОбъект - Форма, ОтчетОбъект +Процедура ОтчетКомпоновкиОбработкаРасшифровкиЛкс(Знач ОтчетОбъект, Знач Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры, ПолеТабличногоДокумента, ДанныеРасшифровки, + Авторасшифровка = Ложь) Экспорт + + #Если _ Тогда + ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; + ЭлементРасшифровки = ДанныеРасшифровки.Элементы[0]; + ТабличныйДокумент = Новый ТабличныйДокумент; + ОтчетОбъект = Отчеты.ирАнализПравДоступа.Создать(); + #КонецЕсли + Если ТипЗнч(Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда + //Возврат; + КонецЕсли; + ЭлементРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка]; + ДоступныеДействия = Новый Массив; + РазрешитьАвтовыборДействия = Истина; + ПараметрВыбранногоДействия = Неопределено; + КоличествоСсылочныхПолей = 0; + ЗначенияВсехПолей = Новый Соответствие; + ирОбщий.ИзвлечьКлючИзЭлементаРасшифровкиКомпоновкиЛкс(ЭлементРасшифровки,, ЗначенияВсехПолей); + Для Каждого ЭлементОтбора Из ДанныеРасшифровки.Настройки.Отбор.Элементы Цикл + Если Ложь + Или Не ЭлементОтбора.Использование + Или ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + Или ЭлементОтбора.ВидСравнения <> ВидСравненияКомпоновкиДанных.Равно + Или ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("ПолеКомпоновкиДанных") + Тогда + Продолжить; + КонецЕсли; + ЗначенияВсехПолей["" + ЭлементОтбора.ЛевоеЗначение] = ЭлементОтбора.ПравоеЗначение; + КонецЦикла; + СписокДополнительныхДействий = Новый СписокЗначений; + Если ирОбщий.МетодРеализованЛкс(ОтчетОбъект, "ОбработкаРасшифровки") Тогда + ОтчетОбъект.ОбработкаРасшифровки(ДанныеРасшифровки, ЭлементРасшифровки, ПолеТабличногоДокумента, ДоступныеДействия, СписокДополнительныхДействий, РазрешитьАвтовыборДействия, ЗначенияВсехПолей); + КонецЕсли; + ДополнительныеДействияРасшифровкиКомпоновкиЛкс(ДоступныеДействия, ЭлементРасшифровки, СписокДополнительныхДействий, КоличествоСсылочныхПолей,, ЗначенияВсехПолей); + КоличествоОбщихДействий = СписокДополнительныхДействий.Количество(); + Если Истина + И РазрешитьАвтовыборДействия + И Авторасшифровка + И (ЛОжь + ИЛи СписокДополнительныхДействий.Количество() - КоличествоОбщихДействий = 1 + Или СписокДополнительныхДействий.Количество() - КоличествоОбщихДействий = 0 И КоличествоСсылочныхПолей = 1) + Тогда + ВыбранноеДействие = СписокДополнительныхДействий[0].Значение; + КонецЕсли; + Если ВыбранноеДействие = Неопределено Тогда + ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОтчетОбъект.СхемаКомпоновкиДанных); + ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникДоступныхНастроек); + ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие, ПараметрВыбранногоДействия, ДоступныеДействия, СписокДополнительныхДействий, Авторасшифровка); + КонецЕсли; + Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда + СтандартнаяОбработка = Ложь; + //Возврат; + КонецЕсли; + Если ПараметрВыбранногоДействия = Неопределено Тогда + ПараметрВыбранногоДействия = ЗначенияВсехПолей; + КонецЕсли; + ЭлементНастроек = ОбработатьДополнительноеДействиеРасшифровкиКомпоновкиЛкс(ВыбранноеДействие, СтандартнаяОбработка, ОтчетОбъект.КомпоновщикНастроек.Настройки); + Если ирОбщий.МетодРеализованЛкс(ОтчетОбъект, "ДействиеРасшифровки") Тогда + ОтчетОбъект.ДействиеРасшифровки(ВыбранноеДействие, ПараметрВыбранногоДействия, СтандартнаяОбработка); + КонецЕсли; + Если СтандартнаяОбработка Тогда + Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда + ОткрытьЗначениеЛкс(ПараметрВыбранногоДействия); + ИначеЕсли ТипЗнч(ВыбранноеДействие) = Тип("ДействиеОбработкиРасшифровкиКомпоновкиДанных") Тогда + ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОтчетОбъект.СхемаКомпоновкиДанных); + ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникДоступныхНастроек); + НовыеНастройки = ОбработкаРасшифровки.ПрименитьНастройки(Расшифровка, ПараметрВыбранногоДействия); + ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройки); + ОтчетОбъект.СкомпоноватьРезультат(ПолеТабличногоДокумента, ДанныеРасшифровки); + КонецЕсли; + КонецЕсли; + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +Функция ВыбратьТипСсылкиВПолеВводаЛкс(Элемент, СтандартнаяОбработка, ОткрытьФормуВыбораСсылкиПослеВыбораТипа = Ложь) Экспорт + + Форма = ирКэш.Получить().ПолучитьФорму("ВыборОбъектаМетаданных", Элемент, Элемент); + ТекущееЗначение = ирОбщий.ДанныеЭлементаФормыЛкс(Элемент); + Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ТекущееЗначение, Ложь) Тогда + НачальноеЗначениеВыбора = ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(ТекущееЗначение)); + КонецЕсли; + лСтруктураПараметров = Новый Структура; + лСтруктураПараметров.Вставить("ОтображатьСсылочныеОбъекты", Истина); + лСтруктураПараметров.Вставить("ОтображатьВнешниеИсточникиДанных", Истина); + лСтруктураПараметров.Вставить("ОтображатьПеречисления", Истина); + лСтруктураПараметров.Вставить("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); + Форма.НачальноеЗначениеВыбора = лСтруктураПараметров; + ЗначениеВыбора = Форма.ОткрытьМодально(); + Если ТипЗнч(ЗначениеВыбора) = Тип("Структура") Тогда + лПолноеИмяОбъекта = Неопределено; + Если ЗначениеВыбора.Свойство("ПолноеИмяОбъекта", лПолноеИмяОбъекта) Тогда + ИмяТипаСсылки = ирОбщий.ИмяТипаИзПолногоИмениМДЛкс(лПолноеИмяОбъекта, "Ссылка"); + ОписаниеТипов = Новый ОписаниеТипов(ИмяТипаСсылки); + НовоеЗначение = ОписаниеТипов.ПривестиЗначение(Неопределено); + ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, НовоеЗначение); + // // http://www.hostedredmine.com/issues/884276 + //Если ОткрытьФормуВыбораСсылкиПослеВыбораТипа Тогда + // //Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(НовоеЗначение, Ложь) Тогда + // ОткрытьФормуСпискаЛкс(лПолноеИмяОбъекта,,, Элемент, Истина); + // //КонецЕсли; + //КонецЕсли; + КонецЕсли; + КонецЕсли; + СтандартнаяОбработка = Ложь; + Возврат НовоеЗначение; + +КонецФункции + +// Результат - значение выбранного типа, но не обязательно выбранное (выбор типа выполняется синхронно, а значения - асинхронно) +// +// Параметры: +// Элемент - - +// СтандартнаяОбработка - - +// ИгнорироватьОписаниеТипов - - +// Отбор - Структура - +// +// Возвращаемое значение: +// - +// +Функция ПолеВвода_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка, ИгнорироватьОписаниеТипов = Ложь, Знач Отбор = Неопределено) Экспорт + + РезультатВыбора = ирОбщий.ДанныеЭлементаФормыЛкс(Элемент); + Если Истина + И ИгнорироватьОписаниеТипов + И (Ложь + Или ТипЗнч(РезультатВыбора) = Тип("Строка") + Или РезультатВыбора = Неопределено) + Тогда + Типы = Элемент.ОграничениеТипа.Типы(); + Если Типы.Количество() = 1 Тогда + // Ссылка внешнего источника данных + СтандартнаяОбработка = Ложь; + ОткрытьФормуСпискаЛкс(ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(Типы[0]),,, Элемент, Истина,, РезультатВыбора); + Иначе + РезультатВыбора = ВыбратьТипСсылкиВПолеВводаЛкс(Элемент, СтандартнаяОбработка); + КонецЕсли; + ИначеЕсли ирОбщий.ЛиСсылкаНаОбъектБДЛкс(РезультатВыбора, Ложь) Тогда + СтандартнаяОбработка = Ложь; + Если Отбор = Неопределено Тогда + Отбор = Новый Структура; + КонецЕсли; + Если ТипЗнч(Элемент) = Тип("ПолеВвода") И Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(РезультатВыбора)) Тогда + Если ЗначениеЗаполнено(Элемент.ВыборПоВладельцу) Тогда + Отбор.Вставить("Владелец", Элемент.ВыборПоВладельцу); + КонецЕсли; + КонецЕсли; + ОткрытьФормуСпискаЛкс(ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(РезультатВыбора)), Отбор,, Элемент, Истина,, РезультатВыбора); + Иначе + // Тут надо делать выбор из диалога плоского списка типов + КонецЕсли; + Возврат РезультатВыбора; + +КонецФункции + +Процедура ПолеВводаРегулированиеЛкс(Знач Элемент, Знач Направление, СтандартнаяОбработка) Экспорт + + ОболочкаПоляТекста = ОболочкаПоляТекстаЛкс(Элемент); + #Если Сервер И Не Сервер Тогда + ОболочкаПоляТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + СтруктураВыделения = ОболочкаПоляТекста.СтруктураДвумерногоВыделения(); + Если ТипЗнч(Элемент.Значение) = Тип("Дата") Тогда + // Антибаг платформы 8.3.0-20 Каретка меняет положение https://www.hostedredmine.com/issues/936754 + // Повторяем штатное поведение + СтандартнаяОбработка = Ложь; + Позиция = СтруктураВыделения.НачальнаяКолонка; + МножительСекунд = 0; + МножительМесяцев = 0; + Если Позиция > 17 Тогда + МножительСекунд = 1; + ИначеЕсли Позиция > 14 Тогда + МножительСекунд = 60; + ИначеЕсли Позиция > 11 Тогда + МножительСекунд = 60*60; + ИначеЕсли Позиция > 6 Тогда + МножительМесяцев = 12; + ИначеЕсли Позиция > 3 Тогда + МножительМесяцев = 1; + Иначе + МножительСекунд = 24*60*60; + КонецЕсли; + НовоеЗначение = Элемент.Значение; + НовоеЗначение = НовоеЗначение + МножительСекунд * Направление; + НовоеЗначение = ДобавитьМесяц(НовоеЗначение, МножительМесяцев * Направление); + //Элемент.Значение = НовоеЗначение; // Так каретка меняет положение + ОболочкаПоляТекста.УстановитьГраницыВыделения(1, 1); + ОболочкаПоляТекста.ВыделенныйТекст(НовоеЗначение); + УстановитьФокусВводаФормеЛкс(); + ОболочкаПоляТекста.УстановитьДвумерноеВыделениеСтруктурой(СтруктураВыделения); + КонецЕсли; + +КонецПроцедуры + +Функция ИндексКартинкиТипаЗначенияБДЛкс(Знач ОписаниеТипов) Экспорт + + Если ОписаниеТипов = Неопределено Тогда + Возврат 14; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ОписаниеТипов = Новый ОписаниеТипов; + #КонецЕсли + Если ОписаниеТипов.СодержитТип(Тип("Null")) Тогда + ОписаниеТипов = Новый ОписаниеТипов(ОписаниеТипов,, "Null"); + КонецЕсли; + Типы = ОписаниеТипов.Типы(); + Если Типы.Количество() = 1 Тогда + КорневойТип = ирОбщий.КорневойТипКонфигурацииЛкс(Типы[0]); + Если Типы[0] = Тип("Число") Тогда + ИндексКартинки = 0; + ИначеЕсли Типы[0] = Тип("Строка") Тогда + ИндексКартинки = 1; + ИначеЕсли Типы[0] = Тип("Дата") Тогда + ИндексКартинки = 2; + ИначеЕсли Типы[0] = Тип("Булево") Тогда + ИндексКартинки = 3; + ИначеЕсли Типы[0] = Тип("ТаблицаЗначений") Тогда + ИндексКартинки = 19; + ИначеЕсли Типы[0] = Тип("Тип") Тогда + ИндексКартинки = 20; + ИначеЕсли Типы[0] = Тип("УникальныйИдентификатор") Тогда + ИндексКартинки = 21; + ИначеЕсли Типы[0] = Тип("ХранилищеЗначения") Тогда + ИндексКартинки = 22; + ИначеЕсли КорневойТип = "Справочник" Тогда + ИндексКартинки = 7; + ИначеЕсли КорневойТип = "Документ" Тогда + ИндексКартинки = 8; + ИначеЕсли КорневойТип = "Перечисление" Тогда + ИндексКартинки = 9; + ИначеЕсли КорневойТип = "ПланВидовХарактеристик" Тогда + ИндексКартинки = 10; + ИначеЕсли КорневойТип = "ПланСчетов" Тогда + ИндексКартинки = 11; + ИначеЕсли КорневойТип = "ПланВидовРасчета" Тогда + ИндексКартинки = 12; + ИначеЕсли КорневойТип = "БизнесПроцесс" Тогда + ИндексКартинки = 13; + ИначеЕсли КорневойТип = "ТочкаМаршрута" Тогда + ИндексКартинки = 14; + ИначеЕсли КорневойТип = "Задача" Тогда + ИндексКартинки = 13; + ИначеЕсли КорневойТип = "ПланОбмена" Тогда + ИндексКартинки = 15; + Иначе + ИндексКартинки = 16; + КонецЕсли; + Иначе + ИндексКартинки = 16; + КонецЕсли; + + Возврат ИндексКартинки; + +КонецФункции + +Функция ИндексКартинкиТипаТаблицыБДЛкс(Знач ТипТаблицы) Экспорт + + ТипТаблицы = ирОбщий.ПеревестиВРусский(ТипТаблицы); + ИндексКартинки = 14; + Если ТипТаблицы = "Константы" Тогда + ИндексКартинки = 2; + ИначеЕсли ТипТаблицы = "Константа" Тогда + ИндексКартинки = 2; + //ИначеЕсли ТипТаблицы = "ТабличнаяЧасть" Тогда + ИначеЕсли ирОбщий.ЛиТипВложеннойТаблицыБДЛкс(ТипТаблицы) Тогда + ИндексКартинки = 20; + ИначеЕсли ТипТаблицы = "Изменения" Тогда + ИндексКартинки = 27; + ИначеЕсли ТипТаблицы = "ВиртуальнаяТаблица" Тогда + ИндексКартинки = 28; + ИначеЕсли ТипТаблицы = "ВнешнийИсточникДанных" Тогда + ИндексКартинки = 29; + ИначеЕсли ТипТаблицы = "Справочник" Тогда + ИндексКартинки = 3; + ИначеЕсли ТипТаблицы = "Перечисление" Тогда + ИндексКартинки = 4; + ИначеЕсли ТипТаблицы = "Документ" Тогда + ИндексКартинки = 5; + ИначеЕсли ТипТаблицы = "ЖурналДокументов" Тогда + ИндексКартинки = 6; + ИначеЕсли ТипТаблицы = "Последовательность" Тогда + ИндексКартинки = 7; + ИначеЕсли ТипТаблицы = "РегистрНакопления" Тогда + ИндексКартинки = 8; + ИначеЕсли ТипТаблицы = "РегистрСведений" Тогда + ИндексКартинки = 9; + ИначеЕсли ТипТаблицы = "РегистрБухгалтерии" Тогда + ИндексКартинки = 10; + ИначеЕсли ТипТаблицы = "РегистрРасчета" Тогда + ИндексКартинки = 11; + ИначеЕсли ТипТаблицы = "ПланОбмена" Тогда + ИндексКартинки = 19; + ИначеЕсли ТипТаблицы = "Задача" Тогда + ИндексКартинки = 17; + ИначеЕсли ТипТаблицы = "БизнесПроцесс" Тогда + ИндексКартинки = 18; + ИначеЕсли ТипТаблицы = "РегистрРасчета" Тогда + ИндексКартинки = 26; + ИначеЕсли ТипТаблицы = "ПланВидовРасчета" Тогда + ИндексКартинки = 25; + ИначеЕсли ТипТаблицы = "ПланВидовХарактеристик" Тогда + ИндексКартинки = 22; + ИначеЕсли ТипТаблицы = "Перечисление" Тогда + ИндексКартинки = 23; + ИначеЕсли ТипТаблицы = "ПланСчетов" Тогда + ИндексКартинки = 24; + ИначеЕсли ТипТаблицы = "Перерасчет" Тогда + ИндексКартинки = 30; + ИначеЕсли ТипТаблицы = "КритерийОтбора" Тогда + ИндексКартинки = 31; + ИначеЕсли ирОбщий.СтрокиРавныЛкс(ТипТаблицы, "Table") Тогда + ИндексКартинки = 3; + КонецЕсли; + Возврат ИндексКартинки; + +КонецФункции + +// Получает картинку для корневого типа конфигурации. +// +// Параметры: +// пКорневойТип - Строка - корневой тип конфигурации. +// +// Возвращаемое значение: +// - Картинка - корневого типа конфигурации. +// +Функция КартинкаКорневогоТипаМДЛкс(Знач КорневойТип) Экспорт + + Если ирОбщий.СтрокиРавныЛкс("Изменения", КорневойТип) Тогда + Картинка = ирКэш.КартинкаПоИмениЛкс("ирТаблицаИзменений"); + КонецЕсли; + Если Картинка = Неопределено Тогда + Картинка = ирКэш.КартинкаПоИмениЛкс("ир" + КорневойТип); + КонецЕсли; + Если Картинка = Неопределено Или Картинка.Вид = ВидКартинки.Пустая Тогда + //Попытка + // Так почему то медленно работает. Ускорили в 8.3.22 + // Картинка = БиблиотекаКартинок[пКорневойТип]; + //Исключение + //КонецПопытки; + Картинка = ирКэш.КартинкаПоИмениЛкс(КорневойТип); + КонецЕсли; + Если Картинка = Неопределено Тогда + Картинка = Новый Картинка(); + КонецЕсли; + Возврат Картинка; + +КонецФункции + +Функция ПроверитьПодпискиЛкс() Экспорт + + Результат = Истина; + + // Проверка компиляции общих модулей с обработчиками событий + СписокМодулейВызоваСервера = Неопределено; + ИмяКлиента = Неопределено; + СписокМодулей = ПроблемныеОбщиеМодулиЛкс(СписокМодулейВызоваСервера, ИмяКлиента); + Если СписокМодулей.Количество() > 0 Тогда + Если ирКэш.ЛиПортативныйРежимЛкс() Тогда + ТипыОбъектовПодписок = ""; + Иначе + ТипыОбъектовПодписок = " менеджеров"; + КонецЕсли; + ирОбщий.СообщитьЛкс("В конфигурации обнаружены недоступные на клиенте (" + ИмяКлиента + " приложение) общие модули с обработчиками подписок на события" + ТипыОбъектовПодписок + ".", СтатусСообщения.Внимание); + ирОбщий.СообщитьЛкс("Поэтому в работе некоторых инструментов возможны ошибки ""При подписке * на событие * произошла ошибка. Обработчик события не найден."""); + Если ИмяКлиента = "Обычное" Тогда + ирОбщий.СообщитьЛкс("Необходимо в конфигураторе установить ""Сервис""/""Параметры""/""Редактирование конфигурации для режимов запуска""=""Управляемое приложение и обычное приложение""."); + КонецЕсли; + Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда + ТекстСообщения = "Рекомендуется установить флажок ""Вызова сервера"" или ""Клиент (" + ИмяКлиента + " приложение)"" и обеспечить компиляцию у этих общих модулей:"; + Иначе + ТекстСообщения = "Рекомендуется установить флажок ""Клиент (" + ИмяКлиента + " приложение)"" и обеспечить компиляцию у этих общих модулей:"; + КонецЕсли; + МассивИменМодулей = Новый Массив; + Для Каждого КлючИЗначение Из СписокМодулей Цикл + МассивИменМодулей.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + ТекстСообщения = ТекстСообщения + " " + ирОбщий.СтрСоединитьЛкс(МассивИменМодулей, ", "); + ирОбщий.СообщитьЛкс(ТекстСообщения); + Результат = Ложь; + КонецЕсли; + Если СписокМодулейВызоваСервера.Количество() > 0 Тогда + ирОбщий.СообщитьЛкс("В конфигурации обнаружены недоступные на клиенте (" + ИмяКлиента + " приложение) общие модули с обработчиками подписок на событие ""ОбработкаПолученияПредставления"".", СтатусСообщения.Внимание); + ирОбщий.СообщитьЛкс("Это может приводить к сильному замеделению получения представлений таких ссылок. Рекомендуется перенести эти обработчики в модуль, компилируемый на толстых клиентах"); + Для Каждого КлючИЗначение Из СписокМодулей Цикл + ТекстСообщения = ТекстСообщения + " " + КлючИЗначение.Ключ + ","; + КонецЦикла; + ирОбщий.СообщитьЛкс(ТекстСообщения); + Результат = Ложь; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ПроблемныеОбщиеМодулиЛкс(СписокМодулейВызоваСервера = Неопределено, ИмяКлиента = "") Экспорт + + СписокМодулей = Новый Структура; + СписокМодулейВызоваСервера = Новый Структура; + ОбщиеМодули = Метаданные.ОбщиеМодули; + Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда + ИмяКлиента = "Управляемое"; + Иначе + ИмяКлиента = "Обычное"; + КонецЕсли; + ИмяСвойства = "Клиент" + ИмяКлиента + "Приложение"; + Для Каждого Подписка Из Метаданные.ПодпискиНаСобытия Цикл + #Если Сервер И Не Сервер Тогда + Подписка = Метаданные.ПодпискиНаСобытия.ВерсионированиеОбъектов_ПриЗаписиОбъекта; + #КонецЕсли + МетаМодуль = ОбщиеМодули.Найти(ирОбщий.ПервыйФрагментЛкс(Подписка.Обработчик)); + Если МетаМодуль = Неопределено Тогда + // Некорректная подписка + Продолжить; + КонецЕсли; + Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда + // Проверяем только подписки менеджеров + Если Не МетаМодуль[ИмяСвойства] И Не МетаМодуль.ВызовСервера Тогда + ТипыИсточников = Подписка.Источник.Типы(); // Долго! + Если ТипыИсточников.Количество() > 0 И Не ирОбщий.ЛиТипОбъектаБДЛкс(ТипыИсточников[0]) Тогда // Это подписка менеджера + СписокМодулей.Вставить(МетаМодуль.Имя); + КонецЕсли; + КонецЕсли; + Иначе + // Проверяем все подписки в портативном режиме обычном приложении + Если Не МетаМодуль[ИмяСвойства] Тогда + СписокМодулей.Вставить(МетаМодуль.Имя); + КонецЕсли; + КонецЕсли; + Если Подписка.Событие = "ОбработкаПолученияПредставления" И МетаМодуль.ВызовСервера Тогда + СписокМодулейВызоваСервера.Вставить(МетаМодуль.Имя); + КонецЕсли; + КонецЦикла; + Возврат СписокМодулей; + +КонецФункции + +// Тяжелый метод. Попытка-Исключение в 5-10 раз быстрее. +Функция ЕстьСвойствоОбъектаЛкс(Объект, Свойство) Экспорт + + УникальноеЗначение = "м86ыщшру5аа7шлв9823454"; + Структура = Новый Структура(Свойство, УникальноеЗначение); + ЗаполнитьЗначенияСвойств(Структура, Объект); + Результат = Структура[Свойство] <> УникальноеЗначение; + Возврат Результат; + +КонецФункции + +//////////////////////////////// +// ФОРМЫ + +Процедура ИнициироватьФормуЛкс(ЭтаФорма, ПолноеИмяФормы, РазрешитьОткрытиеДополнительныхФорм = Истина) Экспорт + + // Проверяем режим модальности + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ОткрыватьФормуПерезапуска = Ложь; + + ЛиМодальностьЗапрещена = ирКэш.ЛиМодальностьЗапрещенаЛкс(); + Если Ложь + Или ирКэш.НомерИзданияПлатформыЛкс() = "82" + Или мПлатформа.мВопросОтключенияПроверкиМодальностиЗадавался = Истина + Или Метаданные.РежимИспользованияМодальности = Метаданные.СвойстваОбъектов.РежимИспользованияМодальности.Использовать + Тогда + // + ИначеЕсли РазрешитьОткрытиеДополнительныхФорм Тогда + КоманднаяСтрокаПроцесса = ирКэш.КоманднаяСтрокаТекущегоПроцессаОСЛкс(); + мПлатформа.мВопросОтключенияПроверкиМодальностиЗадавался = Истина; + Если Ложь + Или Найти(НРег(КоманднаяСтрокаПроцесса), НРег("/EnableCheckModal")) > 0 + //Или Найти(КоманднаяСтрокаПроцесса, "/EnableCheckExtensionsAndAddInsSyncCalls") > 0 + Тогда + ТекстСообщения = "При запуске сеанса из конфигуратора с текущим свойством конфигурации ""Режим использования модальности"" включается контроль модальности." + " Для его отключения рекомендуется запустить сеанс не из конфигуратора, например командой ""Запуск сеанса""."; + ирОбщий.СообщитьЛкс(ТекстСообщения,,, Истина, Ложь); + ОткрыватьФормуПерезапуска = Истина; + КонецЕсли; + КонецЕсли; + + // Проверяем защиту от опасных действий + // Здесь это делать мало полезно, т.к. она срабатывает раньше + Если Истина + И РазрешитьОткрытиеДополнительныхФорм + И ирКэш.ЛиПортативныйРежимЛкс() + И мПлатформа.мПроверкаЗащитыОтОпасныхДействийВыполнялась <> Истина + //И ирКэш.НомерВерсииПлатформыЛкс() < 803010 // Когда в платформе исправят проблему, тогда и отключим + Тогда + ТекущийПользовательБазы = ПользователиИнформационнойБазы.ТекущийПользователь(); + Попытка + ЗащитаОтОпасныхДействий = ТекущийПользовательБазы.ЗащитаОтОпасныхДействий; + Исключение + ЗащитаОтОпасныхДействий = Неопределено; + КонецПопытки; + Если Истина + И ЗначениеЗаполнено(ТекущийПользовательБазы.Имя) + И ЗащитаОтОпасныхДействий <> Неопределено + И ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Истина + Тогда + ТекстСообщения = "У текущего пользователя базы включена защита от опасных действий. Для корректной работы инструментов ее рекомендуется отключить перезапуском сеанса через открывшуюся форму."; + ирОбщий.СообщитьЛкс(ТекстСообщения, СтатусСообщения.Внимание,, Истина, Ложь); + ОткрыватьФормуПерезапуска = Истина; + КонецЕсли; + мПлатформа.мПроверкаЗащитыОтОпасныхДействийВыполнялась = Истина; + КонецЕсли; + + Если ОткрыватьФормуПерезапуска Тогда + // TODO Надо заблокировать открытие формы в модальной группе + #Если ТолстыйКлиентОбычноеПриложение Тогда + ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ЗапускСеансаОбычная"); + #Иначе + //ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая"); + #КонецЕсли + КонецЕсли; + Если ЛиМодальностьЗапрещена И Найти(ПолноеИмяФормы, "ирПортативный") = 0 Тогда + ВызватьИсключение "При запуске сеанса из конфигуратора с текущим свойством конфигурации ""Режим использования модальности"" включается контроль модальности. + |Рекомендуется изменить это свойство конфигурации либо запустить сеанс другим способом."; + КонецЕсли; + + СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + СлужебныеДанные.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор); + СлужебныеДанные.Вставить("МенеджерСохраненияНастроек"); + СлужебныеДанные.Вставить("ИмяФормы", ПолноеИмяФормы); + // Мультиметка55835453 + СлужебныеДанные.Вставить("НеготовыеСтраницы", Новый СписокЗначений); + СлужебныеДанные.Вставить("Задания", Новый Структура); + СлужебныеДанные.Вставить("ОригинальныйЗаголовок", ЭтаФорма.Заголовок); + ПодготовитьЭлементыФормыЛкс(ЭтаФорма); + Форма_ВставитьСкрытуюКоманднуюПанельГлобальныхКомандЛкс(ЭтаФорма); + ПерехватКлавиатуры = мПлатформа.ПодключитьПерехватКлавиатуры(); + СлужебныеДанные.Вставить("ПерехватКлавиатуры", ПерехватКлавиатуры); + Если ирКэш.ЛиПортативныйРежимЛкс() Тогда + Контейнер = Новый Структура(); + ирКлиент.ОповеститьФормыПодсистемыЛкс("ирПолучитьБазовуюФорму", Контейнер); // Скорость https://www.hostedredmine.com/issues/891484 + Если Не Контейнер.Свойство("ирПортативный") Тогда + БазоваяФорма = ирПортативный.ПолучитьФорму(); + БазоваяФорма.Открыть(); + КонецЕсли; + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + СтрокаВызова = "ирПортативный.ИнициализироватьФорму_" + ирОбщий.ИдентификаторИзПредставленияЛкс(ПолноеИмяФормы) + "(ЭтаФорма)"; + Выполнить(СтрокаВызова); + Иначе + МетаФорма = ирКэш.ОбъектМДПоПолномуИмениЛкс(ПолноеИмяФормы); + Если МетаФорма = Неопределено Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Метаформа не найдена по полному имени %1",, ПолноеИмяФормы), СтатусСообщения.Внимание); + КонецЕсли; + КонецЕсли; + + ФлажокОбъектыНаСервере = ЭтаФорма.ЭлементыФормы.Найти("ОбъектыНаСервере"); + Если ФлажокОбъектыНаСервере <> Неопределено Тогда + #Если Сервер И Не Сервер Тогда + ирПортативный = Обработки.ирПортативный.Создать(); + #КонецЕсли + ФлажокОбъектыНаСервере.Доступность = Не ирКэш.ЛиПортативныйРежимЛкс() Или ирПортативный.ЛиСерверныйМодульДоступенЛкс(); + Если ирКэш.ЛиПортативныйРежимЛкс() Тогда + ФлажокОбъектыНаСервере.Подсказка = "Запись и удаление объектов данных выполнять на сервере. Это снижает скорость, но повышает совместимость с конфигурациями под управляемое приложение."; + Иначе + ФлажокОбъектыНаСервере.Подсказка = "При выполнении кода на клиенте работать с объектами данных на сервере. Это снижает скорость, но повышает совместимость с конфигурациями под управляемое приложение. При выполнении кода на сервере этот параметр не используется."; + КонецЕсли; + КонецЕсли; + Если мПлатформа.мПроверкаСовместимостиКонфигурацииВыполнялась <> Истина Тогда + // Однократно выполняем в сеансе проверку совместимости + + Если Метаданные.ХранилищеОбщихНастроек <> Неопределено Тогда + ИмяПроверочнойНастройки = "Тест"; + ирОбщий.СохранитьЗначениеЛкс(ИмяПроверочнойНастройки, 1); + Если ирОбщий.ВосстановитьЗначениеЛкс(ИмяПроверочнойНастройки) = Неопределено Тогда + ирОбщий.СообщитьЛкс("В конфигурации переопределено хранилище общих настроек и оно не восстанавливает сохраненные значения. Корректная работа подсистемы ""Инструменты разработчика"" невозможна", СтатусСообщения.Важное); + КонецЕсли; + КонецЕсли; + Если Не ирОбщий.ЛиСовместимыйЯзыкСистемыЛкс() Тогда + ирОбщий.СообщитьЛкс("Язык системы сеанса 1С (параметр /L) не является русским или английским. Корректная работа подсистемы ""Инструменты разработчика"" невозможна", СтатусСообщения.Важное); + КонецЕсли; + + мПлатформа.мПроверкаСовместимостиКонфигурацииВыполнялась = Истина; + #Если Сервер И Не Сервер Тогда + ВыполнитьПроверкуСовместимостиКонфигурацииЛкс(); + #КонецЕсли + ПодключитьГлобальныйОбработчикОжиданияЛкс("ВыполнитьПроверкуСовместимостиКонфигурацииЛкс", 1, Истина); + Если Не ирКэш.ЛиФайловаяБазаЛкс() Тогда + // Запускаем асинхронную подготовку объекта, иначе он при первом выполнении запроса будет подбирать протокол и в случае недоступности TCP будет 6 секунд ждать + // https://forum.mista.ru/topic.php?id=870813 + ирОбщий.ПроверитьСоединениеADOЭтойБДЛкс(,,,,, Ложь, Истина, мПлатформа.ПроверочноеСоединениеАДО); + КонецЕсли; + КонецЕсли; + ирКэш.СостояниеПодготовкиКэшМДСеансаЛкс(); + +КонецПроцедуры + +Функция ЛиПровайдерАДОДляЭтойБазыГотовЛкс() Экспорт + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Результат = Истина + И мПлатформа.ПроверочноеСоединениеАДО <> Неопределено + И (Ложь + Или мПлатформа.ПроверочноеСоединениеАДО = "Готов" + Или мПлатформа.ПроверочноеСоединениеАДО.State = 1); + Если Результат Тогда + мПлатформа.ПроверочноеСоединениеАДО = "Готов"; + КонецЕсли; + Возврат Результат; +КонецФункции + +Процедура ПодготовитьЭлементыФормыЛкс(ЭтаФорма) Экспорт + + СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + //ОбработчикиПриВыводеСтроки = Новый Соответствие; + //СлужебныеДанныеФормы.Вставить("ОбработчикиПриВыводеСтроки", ОбработчикиПриВыводеСтроки); + КнопкиВсехДействийКомандныхПанелей = Новый Соответствие; + КомандныеПанелиКнопок = Новый Соответствие; + ИмяКнопки = "СтруктураКоманднойПанели"; + ВозможныеИменаРеквизита = Новый Массив; + ВозможныеИменаРеквизита.Добавить("ОбработкаОбъект"); + ВозможныеИменаРеквизита.Добавить("ОсновнойОбъект"); + ОсновнойРеквизит = Неопределено; + ЕстьОбщийОбработчикПриПолученииДанных = Неопределено; + Для Каждого ИмяОсновногоРеквизита Из ВозможныеИменаРеквизита Цикл + Если ЕстьСвойствоОбъектаЛкс(ЭтаФорма, ИмяОсновногоРеквизита) Тогда + ОсновнойРеквизит = ЭтаФорма[ИмяОсновногоРеквизита]; + Прервать; + КонецЕсли; + КонецЦикла; + Для Каждого ЭлементФормы Из ЭтаФорма.ЭлементыФормы Цикл + Если ОсновнойРеквизит <> Неопределено Тогда + Попытка + Данные = ЭлементФормы.Данные; + Подсказка = ЭлементФормы.Подсказка; // У ActiveX этого свойства нет + Исключение + Данные = ""; + КонецПопытки; + Если Не ПустаяСтрока(Данные) И Найти(Данные, ".") = 0 Тогда + Если Не ЗначениеЗаполнено(ЭлементФормы.Подсказка) Тогда + РеквизитОбъекта = ОсновнойРеквизит.Метаданные().Реквизиты.Найти(Данные); + Если РеквизитОбъекта <> Неопределено Тогда + ЭлементФормы.Подсказка = РеквизитОбъекта.Подсказка; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + // Встраиваем кнопки структуры командной панели + КоманднаяПанель = Неопределено; + ВстроитьВНачало = Истина; + Если ТипЗнч(ЭлементФормы) = Тип("КоманднаяПанель") Тогда + КоманднаяПанель = ЭлементФормы; + ВсеКнопки = ВсеКнопкиКоманднойПанелиЛкс(КоманднаяПанель); + Для Каждого Кнопка Из ВсеКнопки Цикл + КомандныеПанелиКнопок[Кнопка] = КоманднаяПанель; + КонецЦикла; + Если Не КоманднаяПанель.Видимость Тогда + Продолжить; + КонецЕсли; + ВстроитьВНачало = КоманднаяПанель.Ширина > 100; + //ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ТабличноеПоле") Тогда + // КоманднаяПанель = ЭлементФормы.КонтекстноеМеню; + Иначе + Попытка + // В контекстных меню функция мало востребована, т.к. они имеют обычно более простую структуру и там сразу виден текст всех кнопок + КоманднаяПанель = ЭлементФормы.КонтекстноеМеню; + ВстроитьВНачало = Ложь; + Исключение + КонецПопытки; + КонецЕсли; + Если Истина + И КоманднаяПанель <> Неопределено + И КоманднаяПанель.Кнопки.Найти(ИмяКнопки) = Неопределено + Тогда + НужноВстроить = Ложь; + КоличествоКнопок = 0; + Для Каждого Кнопка Из КоманднаяПанель.Кнопки Цикл + Если Кнопка.ТипКнопки <> ТипКнопкиКоманднойПанели.Разделитель Тогда + КоличествоКнопок = КоличествоКнопок + 1; + Если КоличествоКнопок > 4 Тогда + НужноВстроить = Истина; + Прервать; + КонецЕсли; + КонецЕсли; + Если Кнопка.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю Тогда + НужноВстроить = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если НужноВстроить Тогда + Если ВстроитьВНачало Тогда + КнопкаСтруктураКоманднойПанели = КоманднаяПанель.Кнопки.Вставить(0); + Иначе + КнопкаСтруктураКоманднойПанели = КоманднаяПанель.Кнопки.Добавить(); + КонецЕсли; + КнопкаСтруктураКоманднойПанели.Имя = ИмяКнопки; + КнопкаСтруктураКоманднойПанели.ТипКнопки = ТипКнопкиКоманднойПанели.Действие; + КнопкаСтруктураКоманднойПанели.Картинка = ирКэш.КартинкаПоИмениЛкс("ирКоманднаяПанель"); + КнопкаСтруктураКоманднойПанели.Отображение = ОтображениеКнопкиКоманднойПанели.Авто; + КнопкаСтруктураКоманднойПанели.Текст = "Структура командной панели"; + КнопкаСтруктураКоманднойПанели.Подсказка = "Открыть структуру командной панели. Позволяет искать кнопки по ключевым словам."; + Попытка + КнопкаСтруктураКоманднойПанели.Действие = Новый Действие("СтруктураКоманднойПанелиНажатие"); + Исключение + // В этой форме нет обработчика + КоманднаяПанель.Кнопки.Удалить(КнопкаСтруктураКоманднойПанели); + КонецПопытки; + КнопкиВсехДействийКомандныхПанелей.Вставить(КнопкаСтруктураКоманднойПанели, КоманднаяПанель); + КонецЕсли; + КонецЕсли; + Если ТипЗнч(ЭлементФормы) = Тип("ТабличноеПоле") Тогда + ТабличноеПолеВключитьСтаруюЦветовуюСхемуЛкс(ЭлементФормы); + КонецЕсли; + КонецЦикла; + СлужебныеДанныеФормы.Вставить("КнопкиВсехДействийКомандныхПанелей", КнопкиВсехДействийКомандныхПанелей); + СлужебныеДанныеФормы.Вставить("КомандныеПанелиКнопок", КомандныеПанелиКнопок); + +КонецПроцедуры + +Процедура Форма_ВставитьСкрытуюКоманднуюПанельГлобальныхКомандЛкс(ЭтаФорма) Экспорт + + ЭлементыФормы = ЭтаФорма.ЭлементыФормы; + + //ИмяКоманднойПанели = "КП_ПолеВвода"; + //КонтекстноеМенюФормы = ЭлементыФормы.Найти(ИмяКоманднойПанели); + //Если КонтекстноеМенюФормы = Неопределено Тогда + // КонтекстноеМенюФормы = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"), ИмяКоманднойПанели); + // КонтекстноеМенюФормы.Видимость = Ложь; + //КонецЕсли; + ////лПлатформа = ирКэш.Получить(); + ////МакетФормы = лПлатформа.ПолучитьФорму("УниверсальныеКоманды"); + ////КонтекстноеМенюМакета = МакетФормы.ЭлементыФормы.КоманднаяПанель.Кнопки.ПолеВвода; + ////ДобавитьКнопкиКоманднойПанелиКомпонентыЛкс(МакетФормы, КонтекстноеМенюМакета.Кнопки, КонтекстноеМенюФормы); + //КоманднаяПанельВставитьКнопкиГлобальныхКомандЛкс(КонтекстноеМенюФормы); + //Для Каждого ЭлементФормы Из ЭлементыФормы Цикл + // Если ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда + // Попытка + // КонтекстноеМеню = ЭлементФормы.КонтекстноеМеню; + // Исключение + // // Поле ввода принадлежит не панели, поэтому у него нет свойства + // Продолжить; + // КонецПопытки; + // Если КонтекстноеМеню = Неопределено Тогда + // //ЭлементФормы.АвтоКонтекстноеМеню = Ложь; + // ЭлементФормы.КонтекстноеМеню = КонтекстноеМенюФормы; + // КонецЕсли; + // КонецЕсли; + //КонецЦикла; + + ДействияФормы = ЭлементыФормы.Найти("ДействияФормы"); + Если ТипЗнч(ДействияФормы) <> Тип("КоманднаяПанель") Тогда + ПанельФормы = ЭтаФорма.Панель; + Если ПанельФормы.КонтекстноеМеню = Неопределено Тогда + ДействияФормы = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"), "ДействияФормыАвто", Ложь); + ДействияФормы.ИсточникДействий = ЭтаФорма; + ПанельФормы.КонтекстноеМеню = ДействияФормы; + Иначе + ДействияФормы = ПанельФормы.КонтекстноеМеню; + КонецЕсли; + КоманднаяПанельВставитьКнопкиГлобальныхКомандЛкс(ДействияФормы); + КонецЕсли; + +КонецПроцедуры + +Функция ВсеКнопкиКоманднойПанелиЛкс(КоманднаяПанель, РезультатРекурсия = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + КоманднаяПанель = Новый КоманднаяПанель; + #КонецЕсли + Если РезультатРекурсия = Неопределено Тогда + РезультатРекурсия = Новый Массив; + КонецЕсли; + ФормаКоманд = ирКэш.ФормаОбщихКомандЛкс(); + ОбщиеКоманды = ФормаКоманд.ЭлементыФормы.Команды.Кнопки; + Для Каждого Кнопка Из КоманднаяПанель.Кнопки Цикл + Если Кнопка.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю Тогда + Если Кнопка.Кнопки.Количество() = 0 Тогда + // Динамическое подменю + РезультатРекурсия.Добавить(Кнопка); + КонецЕсли; + ВсеКнопкиКоманднойПанелиЛкс(Кнопка, РезультатРекурсия); + ИначеЕсли Кнопка.ТипКнопки = ТипКнопкиКоманднойПанели.Действие Тогда + Если Найти(Кнопка.Действие, "КлсКомандаНажатие") = 1 Тогда + РезультатРекурсия.Добавить(Кнопка); + КонецЕсли; + Если Ложь + Или Найти(Кнопка.Действие, "КлсКомандаНажатие") = 1 + Или Найти(Кнопка.Действие, "КлсКомандаТаблицаНажатие") = 1 + Тогда + ОбщаяКоманда = ОбщиеКоманды.Найти(Кнопка.Имя); + Если ОбщаяКоманда = Неопределено Тогда + ВызватьИсключение ирОбщий.СтрШаблонЛкс("Неизвестное имя общей команды ""%1""", Кнопка.Имя); + КонецЕсли; + ЗаполнитьЗначенияСвойств(Кнопка, ОбщаяКоманда, "СочетаниеКлавиш, Подсказка, Пояснение"); + КонецЕсли; + //Если Истина + // И "" + Кнопка.Действие = "Отбор по значению в текущей колонке" + //Тогда + // Кнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.W, Истина); // ALT+W + ////ИначеЕсли Истина + //// И Кнопка.Имя = "РазличныеЗначенияКолонки" + ////Тогда + //// Кнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.F, Истина); // ALT+F + //КонецЕсли; + КонецЕсли; + КонецЦикла; + Возврат РезультатРекурсия; + +КонецФункции + +// Только для кнопок с обработчиком "КлсКомандаНажатие" +Функция КоманднаяПанельКнопкиЛкс(Знач ЭтаФорма, Знач Кнопка) + мСвойстваФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + Пока ТипЗнч(Кнопка) = Тип("КнопкаКоманднойПанели") Цикл + Кнопка = мСвойстваФормы.КомандныеПанелиКнопок[Кнопка]; + КонецЦикла; + Возврат Кнопка; +КонецФункции + +Процедура УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Готовность = Истина) Экспорт + + НеготовыеСтраницы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).НеготовыеСтраницы; + #Если Сервер И Не Сервер Тогда + НеготовыеСтраницы = Новый СписокЗначений; + #КонецЕсли + ЭлементСписка = НеготовыеСтраницы.НайтиПоЗначению(Страница.Имя); + Если ЭлементСписка <> Неопределено И Готовность Тогда + НеготовыеСтраницы.Удалить(ЭлементСписка); + ИначеЕсли ЭлементСписка = Неопределено И Не Готовность Тогда + НеготовыеСтраницы.Добавить(Страница.Имя); + КонецЕсли; + +КонецПроцедуры + +Функция ПолучитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница) Экспорт + + НеготовыеСтраницы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).НеготовыеСтраницы; + #Если Сервер И Не Сервер Тогда + НеготовыеСтраницы = Новый СписокЗначений; + #КонецЕсли + ЭлементСписка = НеготовыеСтраницы.НайтиПоЗначению(Страница.Имя); + Результат = ЭлементСписка = Неопределено; + Возврат Результат; + +КонецФункции + +Процедура ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Знач Кнопка = Неопределено) Экспорт + + Если ТипЗнч(ЭтаФорма) = Тип("Форма") Тогда + мСвойстваФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + КоманднаяПанель = мСвойстваФормы.КнопкиВсехДействийКомандныхПанелей[Кнопка]; + Если Кнопка <> Неопределено Тогда + Если КоманднаяПанель.Кнопки.Индекс(Кнопка) = -1 Тогда + // Для контекстных меню + КоманднаяПанель = КоманднаяПанель.Кнопки[0]; + КонецЕсли; + КонецЕсли; + Иначе + КоманднаяПанель = ирОбщий.РодительЭлементаУправляемойФормыЛкс(Кнопка, Тип("ГруппаФормы")); + КонецЕсли; + ФормаСтруктуры = ирКэш.Получить().ПолучитьФорму("СтруктураФормы"); + ФормаСтруктуры.ПараметрЭлементФормы = КоманднаяПанель; + ФормаСтруктуры.Форма = ЭтаФорма; + ФормаСтруктуры.ОткрытьМодально(); + +КонецПроцедуры + +Процедура ОткрытьСтруктуруФормыЛкс(ЭтаФорма, КлючУникальности = Неопределено) Экспорт + + ФормаСтруктуры = ирКэш.Получить().ПолучитьФорму("СтруктураФормы",, КлючУникальности); + ФормаСтруктуры.Форма = ЭтаФорма; + ФормаСтруктуры.ОткрытьМодально(); + +КонецПроцедуры + +Функция ОткрытьФормуСоединенияСУБДЛкс(Автоподключение = Ложь) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ПроверкаСоединенияADOЭтойБДВыполнялась = мПлатформа.мПроверкаСоединенияADOЭтойБДВыполнялась = Истина; + ФормаПодключения = ирКэш.Получить().ПолучитьФорму("ПараметрыСоединенияСУБД"); + ФормаПодключения.Автоподключение = Автоподключение И ПроверкаСоединенияADOЭтойБДВыполнялась; + Если Истина + И (Ложь + Или Не ПроверкаСоединенияADOЭтойБДВыполнялась + Или Не Автоподключение) + И Не ирКэш.ЛиФайловаяБазаЛкс() + Тогда + ФормаЗащиты = Неопределено; + #Если ТолстыйКлиентУправляемоеПриложение Тогда + Если ирКэш.НомерИзданияПлатформыЛкс() > "82" Тогда + // Антибаг платформы https://www.hostedredmine.com/issues/901181 + ФормаЗащиты = ОткрытьФорму("Обработка.ирПлатформа.Форма.Пустышка"); + КонецЕсли; + #КонецЕсли + РезультатФормы = ФормаПодключения.ОткрытьМодально(); + Если ФормаЗащиты <> Неопределено Тогда + ФормаЗащиты.Закрыть(); + КонецЕсли; + Если РезультатФормы <> Истина Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + Возврат ФормаПодключения; + +КонецФункции + +Функция ОткрытьОбщиеПараметрыЗаписиЛкс(ТолькоОбъектыНаСервере = Ложь) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Форма = мПлатформа.ПолучитьФорму("ПараметрыЗаписиОбъектов"); + Форма.ПараметрТолькоОбъектыНаСервере = ТолькоОбъектыНаСервере; + Форма.ОткрытьМодально(); + +КонецФункции + +Функция ОткрытьСсылкуИТСЛкс(СтрокаЗапуска) Экспорт + + Маркер = "v?doc"; + Если Найти(СтрокаЗапуска, Маркер) > 0 Тогда + ФрагментыМаркера = ирОбщий.СтрРазделитьЛкс(Маркер, "?"); + СисИнфо = Новый СистемнаяИнформация; + ФрагментыВерсии = ирОбщий.СтрРазделитьЛкс(СисИнфо.ВерсияПриложения); + ТекущаяВерсия = ФрагментыВерсии[0] + "." + ФрагментыВерсии[1] + "." + ФрагментыВерсии[2]; + ВыбраннаяВерсия = СтрЗаменить(ТекущаяВерсия, ".", ""); + СтрокаЗапуска = ирОбщий.СтрЗаменитьЛкс(СтрокаЗапуска, Маркер, ФрагментыМаркера[0] + ВыбраннаяВерсия + ФрагментыМаркера[1]); + КонецЕсли; + ЗапуститьПриложение(СтрокаЗапуска); + +КонецФункции + +Процедура УстановитьДоступностьВыполненияНаСервереЛкс(ЭтаФорма, ИмяФлага = "ВыполнятьНаСервере") Экспорт + + ДоступностьРежима = ирОбщий.ЛиАсинхронностьДоступнаЛкс(); + Если ЭтаФорма.ЭлементыФормы.Найти(ИмяФлага) <> Неопределено Тогда + Флажок = ЭтаФорма.ЭлементыФормы[ИмяФлага]; + Флажок.Доступность = ДоступностьРежима; + Флажок.Заголовок = "Выполнять на сервере"; + Флажок.Подсказка = "Недоступно в портативном варианте. " + Флажок.Подсказка; + КонецЕсли; + Если Не ДоступностьРежима Тогда + ЭтаФорма.ЭтотОбъект[ИмяФлага] = Ложь; + КонецЕсли; + +КонецПроцедуры + +Функция ТабличноеПолеИлиТаблицаФормы_СколькоСтрокЛкс(ТабличноеПоле, Знач НастройкиСписка = Неопределено) Экспорт + ЗначениеЭУ = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + Если ЗначениеЭУ <> Неопределено Тогда + Количество = Неопределено; + Попытка + Количество = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле,, Истина).Количество(); + Исключение + КонецПопытки; + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + Отбор = "?"; + Иначе + Попытка + Отбор = ТабличноеПоле.ОтборСтрок; + Исключение + КонецПопытки; + КонецЕсли; + Если Количество = Неопределено Тогда + Попытка + //Коллекция компоновки + Количество = ЗначениеЭУ.Элементы.Количество(); + //Суффикс = "*"; + Исключение + Попытка + //Или ИмяОбщегоТипа = "ДеревоЗначений" + Количество = ЗначениеЭУ.Строки.Количество(); + Суффикс = "*"; + Исключение + КонецПопытки; + КонецПопытки; + КонецЕсли; + Если Количество = Неопределено Тогда + // ДинамическийСписок + Если НастройкиСписка = Неопределено Тогда + НастройкиСписка = ирОбщий.НастройкиДинамическогоСпискаЛкс(ЗначениеЭУ); + КонецЕсли; + Отбор = НастройкиСписка.Отбор; + ПолноеИмяТаблицы = ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле); + ЗапросСписка = ЗапросДинамическогоСпискаЛкс(ТабличноеПоле, ПолноеИмяТаблицы); + Если ЗапросСписка <> Неопределено И ЗначениеЗаполнено(ЗапросСписка.Текст) Тогда + Количество = ирОбщий.КоличествоСтрокВТаблицеБДЛкс(ЗапросСписка); + Иначе + Количество = ирОбщий.КоличествоСтрокВТаблицеБДЛкс(ПолноеИмяТаблицы, Отбор); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Текст = "Количество строк "; + Если Отбор <> Неопределено Тогда + Текст = Текст + "отобрано "; + КонецЕсли; + Текст = Текст + "- " + Формат(Количество, "ЧН=; ЧГ=") + Суффикс; + Если ТабличноеПоле.ВыделенныеСтроки.Количество() > 1 Тогда + Текст = Текст + ", выделено - " + Формат(ТабличноеПоле.ВыделенныеСтроки.Количество(), "ЧН=; ЧГ="); + КонецЕсли; + Если Отбор <> Неопределено Тогда + Текст = Текст + ". Отбор - """ + Отбор + """ "; + КонецЕсли; + ирОбщий.СообщитьЛкс(Текст,,, Истина); + + // Тексты подвала + Результат = Количество; + МассивПодвалов = Новый Массив; + #Если Клиент Тогда + Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл + ТекстПодвала = ирОбщий.ПоследнийФрагментЛкс(КолонкаТП.ТекстПодвала, "Σ"); + Если ЗначениеЗаполнено(ТекстПодвала) Тогда + МассивПодвалов.Добавить(КолонкаТП.ТекстШапки + " = " + ТекстПодвала); + КонецЕсли; + КонецЦикла; + КонецЕсли; + #КонецЕсли + Если МассивПодвалов.Количество() > 0 Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрСоединитьЛкс(МассивПодвалов, "; ")); + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Функция - Данные строки табличного поля лкс +// +// Параметры: +// ТабличноеПоле - - +// Строка - - +// ДанныеПоля - - вход/выход, можно передавать пустую переменнную для ускорения анализа таблицы формы компоновки данных +// +// Возвращаемое значение: +// - +// +Функция ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, Знач Строка = Неопределено, ДанныеПоля = Неопределено) Экспорт + + Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда + ДанныеСтроки = Неопределено; + Если Строка = Неопределено Тогда + Строка = ТабличноеПоле.ТекущаяСтрока; + КонецЕсли; + Если ТипЗнч(Строка) = Тип("ИдентификаторКомпоновкиДанных") Тогда + Если ДанныеПоля = Неопределено Тогда + ДанныеПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + КонецЕсли; + Если ДанныеПоля <> Неопределено Тогда + ДанныеСтроки = ДанныеПоля.ПолучитьОбъектПоИдентификатору(Строка); + КонецЕсли; + КонецЕсли; + Если ДанныеСтроки = Неопределено И Строка <> Неопределено Тогда + //ДанныеТаблицы = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + //#Если Сервер И Не Сервер Тогда + // ДанныеТаблицы = Новый ТаблицаЗначений; + //#КонецЕсли + //ДанныеСтроки = ДанныеТаблицы.НайтиПоИдентификатору(Строка); + ДанныеСтроки = ТабличноеПоле.ДанныеСтроки(Строка); + Если ДанныеСтроки = Неопределено Тогда + // Ключ записи регистра без ресурсов и измерений (ШтрихкодыНоменклатуры) иногда почему то дает Неопределено + ДанныеСтроки = Строка; + КонецЕсли; + КонецЕсли; + ИначеЕсли ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда + ДанныеСтроки = Строка; + Если Ложь + Или ДанныеСтроки = Неопределено + Или ирОбщий.ЛиКлючЗаписиРегистраЛкс(ДанныеСтроки) + Тогда + Попытка + ДанныеСтроки = ТабличноеПоле.ТекущиеДанные; + Исключение + // Удаленное из формы табличное поле, например вызов из Обработка.ирПлатформа.Форма.СтрокаТаблицы + ТабличноеПоле = Неопределено; + КонецПопытки; + КонецЕсли; + КонецЕсли; + Возврат ДанныеСтроки; + +КонецФункции + +Процедура ИсследоватьВерсиюОбъектаДанныхЛкс(Знач Данные, Знач НомерВерсии) Экспорт + + #Если ВебКлиент Тогда + Сообщить("Команда недоступна в вебклиенте"); + #Иначе + ИсторияДанныхМоя = Вычислить("ИсторияДанных"); + #Если Сервер И Не Сервер Тогда + ИсторияДанныхМоя = ИсторияДанных; + #КонецЕсли + Структура = ИсторияДанныхМоя.ПолучитьДанныеВерсии(Данные, НомерВерсии); + ирОбщий.ИсследоватьЛкс(Структура); + #КонецЕсли + +КонецПроцедуры + +Функция ОткрытьСистемнуюФормуОтчетПоВерсииЛкс(Данные, НомерВерсии) Экспорт + + Попытка + ОткрытьФорму("sysForm:DataHistoryVersionDataRuForm", Новый Структура("Данные, НомерВерсии", Данные, НомерВерсии)); + Исключение + ОписаниеОшибки = ОписаниеОшибки(); + ИсследоватьВерсиюОбъектаДанныхЛкс(Данные, НомерВерсии); + КонецПопытки; + +КонецФункции + +// Функция - Открыть системную форму список версий лкс +// +// Параметры: +// Данные - - +// НомерВерсии - Число - пока не реализовано +// +// Возвращаемое значение: +// - +// +Функция ОткрытьСистемнуюФормуСписокВерсийОбъектаЛкс(Данные, НомерВерсии) Экспорт + + ОткрытьФорму("sysForm:DataHistoryVersions", Новый Структура("Data", Данные)); + +КонецФункции + +Функция ОткрытьСистемнуюФормуСравнениеВерсийЛкс(Данные, НомерВерсииПослеИзменения, НомерВерсииДоИзменения) Экспорт + + ОткрытьФорму("sysForm:DataHistoryVersionDifferenecesRuForm", Новый Структура("Данные, НомерВерсииПослеИзменения, НомерВерсииДоИзменения", Данные, НомерВерсииПослеИзменения, НомерВерсииДоИзменения)); + +КонецФункции + +Функция ОткрытьСистемнуюФормуНастройкаОтбораВерсийЛкс(Знач КлючОбъекта, Знач ОтборВерсий, Знач Оповещение) Экспорт + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Filter", ОтборВерсий); + ПараметрыФормы.Вставить("Data", КлючОбъекта); + ПолноеИмяФормы = "sysForm:DataHistoryVersionsFilterDialog"; + Выполнить("ОткрытьФорму(ПолноеИмяФормы, ПараметрыФормы,,,,, Оповещение)"); // Параметра "Оповещение" в 8.2 нет + +КонецФункции + +Процедура ИсследоватьСравнениеВерсийЛкс(Знач Данные, Знач НомерВерсииПослеИзменения, Знач НомерВерсииДоИзменения) Экспорт + + #Если ВебКлиент Тогда + Сообщить("Команда недоступна в вебклиенте"); + #Иначе + ИсторияДанныхМоя = Вычислить("ИсторияДанных"); + #Если Сервер И Не Сервер Тогда + ИсторияДанныхМоя = ИсторияДанных; + #КонецЕсли + Структура = ИсторияДанныхМоя.ПолучитьРазличияВерсий(Данные, НомерВерсииПослеИзменения, НомерВерсииДоИзменения); + ирОбщий.ИсследоватьЛкс(Структура); + #КонецЕсли + +КонецПроцедуры + +Функция НоваяФормаРезультатаФоновогоЗаданияЛкс() Экспорт + + // Управляемые формы так создавать нельзя! + // http://www.hostedredmine.com/issues/874998 + //мПлатформа = ирКэш.Получить(); + //#Если Сервер И Не Сервер Тогда + // мПлатформа = Обработки.ирПлатформа.Создать(); + //#КонецЕсли + //ФормаРезультатФоновогоЗадания = мПлатформа.ПолучитьФорму("РезультатФоновогоЗадания"); + + ФормаРезультатФоновогоЗадания = ПолучитьФормуЛкс("Обработка.ирПлатформа.Форма.РезультатФоновогоЗадания",,, Новый УникальныйИдентификатор); + Возврат ФормаРезультатФоновогоЗадания; + +КонецФункции + +Функция ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(Знач ЭтаФорма, Знач ОписаниеЗадания, Знач Перезапустить = Ложь, выхОшибкаСериализации = Ложь) Экспорт + + СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + #Если Сервер И Не Сервер Тогда + СлужебныеДанные = Новый Структура; + ОписаниеЗадания = ОписаниеФоновогоЗаданияФормыЛкс(); + #КонецЕсли + Если Не ирОбщий.МетодРеализованЛкс(ЭтаФорма, ОписаниеЗадания.ОбработчикЗавершения) Тогда + ВызватьИсключение "У формы " + СсылкаНаМодульКонфигурацииЛкс(СлужебныеДанные.ИмяФормы) + " не обнаружен экспортный метод " + ОписаниеЗадания.ОбработчикЗавершения; + КонецЕсли; + МаркерОтмены = "Отменить фоновое задание"; + ЗаданияФормы = СлужебныеДанные.Задания; + Если ЗаданияФормы.Свойство(ОписаниеЗадания.Имя) Тогда + ОписаниеЗаданияСтарое = ЗаданияФормы[ОписаниеЗадания.Имя]; + Если ОписаниеЗаданияСтарое.УникальныйИдентификатор <> Неопределено Тогда + Если Ложь + Или ОписаниеЗадания.Кнопка = Неопределено + Или ОписаниеЗадания.Кнопка.Картинка <> ирКэш.КартинкаПоИмениЛкс("ирОстановить") + Тогда + Перезапустить = Истина; + КонецЕсли; + ОтменитьЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗаданияСтарое); + Если Не Перезапустить Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + КонецЕсли; + ОписаниеЗадания.НачалоВыполнения = ТекущаяДата(); + ирОбщий.ДобавитьТекущемуПользователюРолиИРЛкс(); + Наименование = ЭтаФорма.Метаданные().Представление() + ". " + ОписаниеЗадания.Представление; + Попытка + ФоновоеЗадание = ФоновыеЗадания.Выполнить(ОписаниеЗадания.Метод, ОписаниеЗадания.Параметры, , Наименование); + Исключение + выхОшибкаСериализации = Истина; + Возврат Неопределено; + КонецПопытки; + ОписаниеЗадания.УникальныйИдентификатор = ФоновоеЗадание.УникальныйИдентификатор; + ЗаданияФормы.Вставить(ОписаниеЗадания.Имя, ОписаниеЗадания); + ФормаЗадания = ФормаЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма); + Если ФормаЗадания <> Неопределено Тогда + #Если Сервер И Не Сервер Тогда + ФормаЗадания = ПолучитьОбщуюФорму(); + #КонецЕсли + ФормаЗадания.ЭлементыФормы.ПолеТекста.Очистить(); + ФормаЗадания.ЭлементыФормы.Отменить.Доступность = Истина; + ФормаЗадания.ЗакрыватьПриЗакрытииВладельца = ЭтаФорма.Открыта(); + ФормаЗадания.Отменить = Ложь; + ФормаЗадания.ЭлементыФормы.Прервать.Доступность = ОписаниеЗадания.ПоддерживаетПрерывание; + ФормаЗадания.ИдентификаторЗадания = ФоновоеЗадание.УникальныйИдентификатор; + ФормаЗадания.ОбновитьСостояниеЗадания(ФоновоеЗадание); + КонецЕсли; + ОжидатьЗавершения = ОписаниеЗадания.Кнопка = Неопределено; + Если Не ОжидатьЗавершения Тогда + // Завершаем основной поток + Если ОписаниеЗадания.БлокируемыеЭлементыФормы <> Неопределено Тогда + Для Каждого КлючИЗначение Из ОписаниеЗадания.БлокируемыеЭлементыФормы Цикл + КлючИЗначение.Значение.Вставить("Доступность"); + КлючИЗначение.Значение.Вставить("ТолькоПросмотр"); + БлокируемыйЭлемент = КлючИЗначение.Ключ; + #Если Сервер И Не Сервер Тогда + БлокируемыйЭлемент = Новый ТабличноеПоле; + #КонецЕсли + ЗаполнитьЗначенияСвойств(КлючИЗначение.Значение, БлокируемыйЭлемент); + Если ТипЗнч(БлокируемыйЭлемент) = Тип("ПолеHTMLДокумента") Тогда + ПолеТекста = ирКлиент.ОболочкаПоляТекстаЛкс(БлокируемыйЭлемент); + #Если Сервер И Не Сервер Тогда + ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + КлючИЗначение.Значение.ТолькоПросмотр = ПолеТекста.ТолькоПросмотр(); + ПолеТекста.ТолькоПросмотр(Истина); + Иначе + Попытка + БлокируемыйЭлемент.ТолькоПросмотр = Истина; + Исключение + БлокируемыйЭлемент.Доступность = Ложь; + КонецПопытки; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ТипЗнч(ОписаниеЗадания.Кнопка) = Тип("КнопкаКоманднойПанели") Тогда + ИменаСвойств = "Доступность, Подсказка, Картинка, Отображение"; + Иначе + ИменаСвойств = "Доступность, Подсказка, Картинка"; + КонецЕсли; + СвойстваКнопки = Новый Структура(ИменаСвойств); + ЗаполнитьЗначенияСвойств(СвойстваКнопки, ОписаниеЗадания.Кнопка, ИменаСвойств); + ОписаниеЗадания.СвойстваКнопки = СвойстваКнопки; + ОписаниеЗадания.Кнопка.Доступность = Истина; + ОписаниеЗадания.Кнопка.Картинка = ирКэш.КартинкаПоИмениЛкс("ирОстановить"); + ОписаниеЗадания.Кнопка.Подсказка = МаркерОтмены + " - " + ОписаниеЗадания.Представление; + Если СвойстваКнопки.Свойство("Отображение") Тогда + ОписаниеЗадания.Кнопка.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка; + КонецЕсли; + Иначе + // Удерживаем основной поток + Если ОписаниеЗадания.Многопоточное Тогда + ФормаЗадания.Открыть(); + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ОтменитьЗаданиеФормыОтложенноЛкс(); + #КонецЕсли + ПодключитьОбработчикОжиданияСПараметрамиЛкс("ОтменитьЗаданиеФормыОтложенноЛкс", Новый Структура("ЭтаФорма, ОписаниеЗадания", ЭтаФорма, ОписаниеЗадания)); + ирОбщий.ОжидатьЗавершенияФоновойОперацииЛкс(ФоновоеЗадание, ЭтаФорма, Ложь, ФормаЗадания); + КонецЕсли; + Результат = Неопределено; + ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма, ОписаниеЗадания, Результат); + Возврат Результат; + +КонецФункции + +Функция ОписаниеФоновогоЗаданияФормыЛкс(Имя = "", Метод = "", Параметры = Неопределено, Знач Представление = "", Кнопка = Неопределено, ОбработчикЗавершения = "", АдресРезультата = "", + ОповещатьПользователяОбУспехе = Истина, БлокируемыеЭлементыФормы = Неопределено, Многопоточное = Ложь, ПрефиксыОповещений = Неопределено, Знач ПоддерживаетПрерывание = Ложь) Экспорт + + Если Не ЗначениеЗаполнено(Представление) Тогда + Представление = ирОбщий.ПредставлениеИзИдентификатораЛкс(Имя); + КонецЕсли; + ОписаниеЗадания = Новый Структура("Имя, Параметры, Метод, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата, УникальныйИдентификатор, НачалоВыполнения, Состояние, СвойстваКнопки, + |ОповещатьПользователяОбУспехе, БлокируемыеЭлементыФормы, ФормаЗадания, Многопоточное, ПрефиксыОповещений, ПоддерживаетПрерывание"); + ОписаниеЗадания.Имя = Имя; + ОписаниеЗадания.Параметры = Параметры; + ОписаниеЗадания.Метод = Метод; + ОписаниеЗадания.Представление = Представление; + ОписаниеЗадания.Кнопка = Кнопка; + ОписаниеЗадания.ОбработчикЗавершения = ОбработчикЗавершения; + ОписаниеЗадания.АдресРезультата = АдресРезультата; + ОписаниеЗадания.ОповещатьПользователяОбУспехе = ОповещатьПользователяОбУспехе; + ОписаниеЗадания.Многопоточное = Многопоточное; + ОписаниеЗадания.ПрефиксыОповещений = ПрефиксыОповещений; + ОписаниеЗадания.ПоддерживаетПрерывание = ПоддерживаетПрерывание; + Если БлокируемыеЭлементыФормы <> Неопределено Тогда + СтруктураБлокировки = Новый Соответствие; + Для Каждого ЭлементФормы Из БлокируемыеЭлементыФормы Цикл + Если Истина + И Типзнч(ЭлементФормы) = Тип("КнопкаКоманднойПанели") + И ЭлементФормы.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю + Тогда + Для Каждого КнопкаПодменю Из ЭлементФормы.Кнопки Цикл + Если КнопкаПодменю.Доступность Тогда + СтруктураБлокировки.Вставить(КнопкаПодменю, Новый Структура()); + КонецЕсли; + КонецЦикла; + Иначе + СтруктураБлокировки.Вставить(ЭлементФормы, Новый Структура()); + КонецЕсли; + КонецЦикла; + ОписаниеЗадания.БлокируемыеЭлементыФормы = СтруктураБлокировки; + КонецЕсли; + Возврат ОписаниеЗадания; + +КонецФункции + +Функция НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(Знач ЭтаФорма) Экспорт + + ФормаРезультатовЗаданий = ФормаРезультатовЗаданийФормыЛкс(ЭтаФорма); + АдресРезультата = ПоместитьВоВременноеХранилище(Null, ФормаРезультатовЗаданий.УникальныйИдентификатор); + Возврат АдресРезультата; + +КонецФункции + +Функция ФормаРезультатовЗаданийФормыЛкс(Знач ЭтаФорма) Экспорт + + СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + #Если Сервер И Не Сервер Тогда + СлужебныеДанные = Новый Структура; + #КонецЕсли + Результат = Неопределено; + Если Не СлужебныеДанные.Свойство("ФормаРезультатовЗаданий", Результат) Тогда + Результат = ирКлиент.НоваяФормаРезультатаФоновогоЗаданияЛкс(); + СлужебныеДанные.Вставить("ФормаРезультатовЗаданий", Результат); + КонецЕсли; + Возврат Результат; + +КонецФункции + +// Функция - Проверить завершение фоновых заданий формы лкс +// +// Параметры: +// ЭтаФорма - - +// +// Возвращаемое значение: +// - Булево - активные задания отсутствуют +// +Функция ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(Знач ЭтаФорма, Знач ОписаниеЗаданияОтбора = Неопределено, Результат = Неопределено) Экспорт + + //Если Не ЭтаФорма.Открыта() Тогда + // Возврат Истина; + //КонецЕсли; + СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + #Если Сервер И Не Сервер Тогда + ЭтаФорма = ПолучитьОбщуюФорму(); + СлужебныеДанные = Новый Структура; + #КонецЕсли + ЗадержкаВызова = 100; + ДлительностьДляЗаголовка = 0; + РазделительДлительности = "-"; + ПозицияРазделителя = Найти(ЭтаФорма.Заголовок, РазделительДлительности); + Если Истина + И ПозицияРазделителя < 10 + И Найти(Лев(ЭтаФорма.Заголовок, ПозицияРазделителя), ":") > 0 + Тогда + ЧистыйЗаголовокФормы = Сред(ЭтаФорма.Заголовок, ПозицияРазделителя + СтрДлина(РазделительДлительности)); + Иначе + ЧистыйЗаголовокФормы = ЭтаФорма.Заголовок; + КонецЕсли; + ФормаРезультата = ФормаРезультатовЗаданийФормыЛкс(ЭтаФорма); + Завершенные = Новый Массив; + ЛиАктивныеЗаданияОтсутствуют = Истина; + Для Каждого КлючИЗначение Из СлужебныеДанные.Задания Цикл + ОписаниеЗадания = КлючИЗначение.Значение; + Если Истина + И ОписаниеЗаданияОтбора <> Неопределено + И ОписаниеЗаданияОтбора <> ОписаниеЗадания + Тогда + Продолжить; + КонецЕсли; + Если ОписаниеЗадания.УникальныйИдентификатор = Неопределено Тогда + // Уже обработано. Защита от зацикливания + Продолжить; + КонецЕсли; + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ОписаниеЗадания.УникальныйИдентификатор); + ФормаЗадания = ФормаЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма); + Если ФормаЗадания <> Неопределено И ФормаЗадания.Отменить Тогда + ОтменитьЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания); + КонецЕсли; + ДлительностьЗадания = ТекущаяДата() - ОписаниеЗадания.НачалоВыполнения; + СостояниеЗадания = ФоновоеЗадание.Состояние; + Если ОписаниеЗадания.Многопоточное Тогда + ПрефиксКлючаПотока = ирОбщий.ПрефиксКлючаПотокаЛкс(ЭтаФорма); + КонецЕсли; + ЭтаИлиФормаЗаданияАктивна = Ложь + Или ФормаЗадания = Неопределено + Или Форма_ВводДоступенЛкс(ЭтаФорма) + Или Форма_ВводДоступенЛкс(ФормаЗадания); + Если СостояниеЗадания = СостояниеФоновогоЗадания.Активно Тогда + Если ДлительностьДляЗаголовка < ДлительностьЗадания Тогда + ДлительностьДляЗаголовка = ДлительностьЗадания; + КонецЕсли; + Если ДлительностьЗадания > 20 Тогда + ЗадержкаВызова = Мин(ЗадержкаВызова, 4); + ИначеЕсли ДлительностьЗадания > 10 Тогда + ЗадержкаВызова = Мин(ЗадержкаВызова, 2); + ИначеЕсли ДлительностьЗадания > 5 Тогда + ЗадержкаВызова = Мин(ЗадержкаВызова, 1); + ИначеЕсли ДлительностьЗадания > 2 Тогда + ЗадержкаВызова = Мин(ЗадержкаВызова, 0.5); + Иначе + ЗадержкаВызова = Мин(ЗадержкаВызова, 0.2); + КонецЕсли; + Если ЭтаИлиФормаЗаданияАктивна Тогда + ИзменилиТекстСостояния = ирОбщий.ОбработатьСообщенияФоновогоЗаданияЛкс(ФоновоеЗадание, ФормаЗадания, ПрефиксКлючаПотока); + Если ФормаЗадания <> Неопределено Тогда + Если Ложь + Или ИзменилиТекстСостояния И ДлительностьЗадания > 2 + Или ДлительностьЗадания > 4 + Тогда + Если Не ФормаЗадания.Открыта() Тогда + ФормаЗадания.Открыть(); + ЭтаФорма.Открыть(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Иначе + Если ФормаЗадания.Открыта() Тогда + ФормаЗадания.Закрыть(); + КонецЕсли; + КонецЕсли; + ЛиАктивныеЗаданияОтсутствуют = Ложь; + Результат = Тип("ФоновоеЗадание"); + Иначе + ОписаниеЗадания.Состояние = СостояниеЗадания; + Если СостояниеЗадания = СостояниеФоновогоЗадания.Завершено И ЗначениеЗаполнено(ОписаниеЗадания.АдресРезультата) Тогда + Результат = ирОбщий.ПрочитатьРезультатФоновогоЗаданияЛкс(ОписаниеЗадания.АдресРезультата, ФормаРезультата); + Иначе + Результат = Неопределено; + КонецЕсли; + ПараметрыЗадания = ОписаниеЗадания.Параметры; + ДлительностьЗадания = ФоновоеЗадание.Конец - ФоновоеЗадание.Начало; + ДлительностьСтрока = ирОбщий.ПредставлениеДлительностиЛкс(ДлительностьЗадания); + Если СостояниеЗадания = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Ошибка через %1 фонового задания %2: " + ирОбщий.ПодробноеПредставлениеОшибкиЛкс(ФоновоеЗадание.ИнформацияОбОшибке), + 1, ДлительностьСтрока, 2, ФоновоеЗадание.Наименование), СтатусСообщения.Внимание); + Результат = ФоновоеЗадание.ИнформацияОбОшибке; + ИначеЕсли Не ЭтаИлиФормаЗаданияАктивна И ОписаниеЗадания.ОповещатьПользователяОбУспехе Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Завершено через %1 фоновое задание %2",, ДлительностьСтрока, 2, ФоновоеЗадание.Наименование)); + КонецЕсли; + Если ФормаЗадания <> Неопределено Тогда + ФормаЗадания.ПолноеПредставление = ЧистыйЗаголовокФормы + ". " + ФормаЗадания.КраткоеПредставление; + КонецЕсли; + ОбработатьЗавершениеЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма, ФоновоеЗадание,,, Результат); + Завершенные.Добавить(КлючИЗначение.Ключ); + КонецЕсли; + КонецЦикла; + Если Завершенные.Количество() > 0 Тогда + ФлагиПрерыванияЗаданий = ирОбщий.ВосстановитьЗначениеЛкс("ФлагиПрерыванияЗаданий"); + Если ФлагиПрерыванияЗаданий <> Неопределено Тогда + Для Индекс = 1 - ФлагиПрерыванияЗаданий.Количество() По 0 Цикл // Обратный обход + ИД = ФлагиПрерыванияЗаданий[-Индекс]; + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИД); + Если ФоновоеЗадание <> Неопределено И ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + ФлагиПрерыванияЗаданий.Удалить(-Индекс); + КонецЕсли; + КонецЦикла; + ирОбщий.СохранитьЗначениеЛкс("ФлагиПрерыванияЗаданий", ФлагиПрерыванияЗаданий); // ЧитаемПишем без блокировки. Поэтому есть незначительная вероятность потери чужого нового флага + КонецЕсли; + КонецЕсли; + Для Каждого Ключ Из Завершенные Цикл + СлужебныеДанные.Задания.Удалить(Ключ); + КонецЦикла; + Если ЗадержкаВызова <> 100 Тогда + ЭтаФорма.Заголовок = ирОбщий.ПредставлениеДлительностиЛкс(ДлительностьДляЗаголовка) + РазделительДлительности + ЧистыйЗаголовокФормы; + ЭтаФорма.ПодключитьОбработчикОжидания("ПроверкаЗавершенияФоновыхЗаданий", ЗадержкаВызова, Истина); + Иначе + ЭтаФорма.Заголовок = ЧистыйЗаголовокФормы; + КонецЕсли; + Возврат ЛиАктивныеЗаданияОтсутствуют; + +КонецФункции + +Процедура ОбработатьЗавершениеЗаданияФормыЛкс(Знач ОписаниеЗадания, Знач ЭтаФорма, Знач ФоновоеЗадание = Неопределено, Знач ПоЗапросуПользователя = Ложь, Знач ЗакрытьФормуЗадания = Ложь, + Знач Результат = Неопределено) + + Если ФоновоеЗадание = Неопределено Тогда + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ОписаниеЗадания.УникальныйИдентификатор); + КонецЕсли; + Если ОписаниеЗадания.Кнопка <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(ОписаниеЗадания.Кнопка, ОписаниеЗадания.СвойстваКнопки); + КонецЕсли; + Если ОписаниеЗадания.БлокируемыеЭлементыФормы <> Неопределено Тогда + Для Каждого КлючИЗначение Из ОписаниеЗадания.БлокируемыеЭлементыФормы Цикл + ЗаполнитьЗначенияСвойств(КлючИЗначение.Ключ, КлючИЗначение.Значение); + Если ТипЗнч(КлючИЗначение.Ключ) = Тип("ПолеHTMLДокумента") Тогда + ПолеТекста = ирКлиент.ОболочкаПоляТекстаЛкс(КлючИЗначение.Ключ); + #Если Сервер И Не Сервер Тогда + ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); + #КонецЕсли + ПолеТекста.ТолькоПросмотр(КлючИЗначение.Значение.ТолькоПросмотр); + КонецЕсли; + КонецЦикла; + КонецЕсли; + ФормаЗадания = ФормаЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма); + ирОбщий.ОбработатьСообщенияФоновогоЗаданияЛкс(ФоновоеЗадание, ФормаЗадания); + ОписаниеЗадания.УникальныйИдентификатор = Неопределено; // Защита от зацикливания + ОписаниеЗадания.ФормаЗадания = Неопределено; + Если ФормаЗадания <> Неопределено Тогда + ПолеСообщений = ФормаЗадания.ЭлементыФормы.ПолеТекста; + Если ПустаяСтрока(ПолеСообщений.ПолучитьТекст()) Тогда + Если ФормаЗадания.Открыта() Тогда + ФормаЗадания.Закрыть(); + КонецЕсли; + Иначе + Если ПоЗапросуПользователя Тогда + ПолеСообщений.ДобавитьСтроку("Выполнение прервано пользователем!"); + КонецЕсли; + Если Истина + И ЭтаФорма.Открыта() + И Не ФормаЗадания.Открыта() + Тогда + ФормаЗадания.Открыть(); + КонецЕсли; + ЕстьОбычныеСообщения = Истина; + #Если ТолстыйКлиентУправляемоеПриложение Тогда + Если ОписаниеЗадания.ПрефиксыОповещений <> Неопределено Тогда + ТекстОповещения = Новый Массив; + ЕстьОбычныеСообщения = Ложь; + Для Счетчик = 1 По ПолеСообщений.КоличествоСтрок() Цикл + СтрокаСообщения = ПолеСообщений.ПолучитьСтроку(Счетчик); + ЛиОповещение = Ложь; + Для Каждого ПрефиксОповещения Из ОписаниеЗадания.ПрефиксыОповещений Цикл + Если ирОбщий.СтрНачинаетсяСЛкс(СтрокаСообщения, ПрефиксОповещения, Истина) Тогда + ЛиОповещение = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + Если ЛиОповещение Тогда + ТекстОповещения.Добавить(СтрокаСообщения); + Иначе + ЕстьОбычныеСообщения = Истина; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если Не ЕстьОбычныеСообщения Тогда + ОписаниеОповещения = Новый ОписаниеОповещения("ОповещениеОткрытьФормуЛкс", ирОбщий, Новый Структура("Форма", ФормаЗадания)); + ПоказатьОповещениеПользователя(, ОписаниеОповещения, ирОбщий.СтрСоединитьЛкс(ТекстОповещения, Символы.ПС)); + Форма_АктивироватьОткрытьЛкс(ЭтаФорма); + КонецЕсли; + #КонецЕсли + КонецЕсли; + Если ЗакрытьФормуЗадания Тогда + Если ФормаЗадания.Открыта() Тогда + ФормаЗадания.Закрыть(); + КонецЕсли; + КонецЕсли; + Если ФормаЗадания.Открыта() Тогда + ФормаЗадания.ОбновитьСостояниеЗадания(ФоновоеЗадание); + КонецЕсли; + КонецЕсли; + Выполнить("ЭтаФорма." + ОписаниеЗадания.ОбработчикЗавершения + "(ФоновоеЗадание.Состояние, Результат)"); + +КонецПроцедуры + +Процедура ОповещениеОткрытьФормуЛкс(ДопПараметры) Экспорт + ДопПараметры.Форма.Открыть(); +КонецПроцедуры + +Функция ФормаЗаданияФормыЛкс(Знач ОписаниеЗадания, Знач ФормаВладелец) + + ФормаЗадания = ОписаниеЗадания.ФормаЗадания; + Если Истина + И ФормаЗадания = Неопределено + И (Ложь + // Запрещаем использовать форму для однопоточного задания с ожиданием + Или ОписаниеЗадания.Кнопка <> Неопределено + Или ОписаниеЗадания.Многопоточное) + Тогда + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаЗадания = мПлатформа.ПолучитьФорму("ФоновоеЗаданиеФормы", ФормаВладелец, ОписаниеЗадания.Имя); + ФормаЗадания.КраткоеПредставление = ОписаниеЗадания.Представление; + ФормаЗадания.ПолноеПредставление = ОписаниеЗадания.Представление; + ОписаниеЗадания.ФормаЗадания = ФормаЗадания; + КонецЕсли; + Возврат ФормаЗадания; + +КонецФункции + +Процедура ОтменитьФоновоеЗаданиеОтложенноЛкс(Параметры) Экспорт + + ОтменитьФоновоеЗаданиеЛкс(Параметры.ИдентификаторФоновогоЗадания); + +КонецПроцедуры + +Процедура ОтменитьФоновоеЗаданиеЛкс(Знач ИдентификаторИлиФоновоеЗадание) Экспорт + + Если ТипЗнч(ИдентификаторИлиФоновоеЗадание) = Тип("ФоновоеЗадание") Тогда + ФоновоеЗадание = ИдентификаторИлиФоновоеЗадание; + Иначе + Если Не ЗначениеЗаполнено(ИдентификаторИлиФоновоеЗадание) Тогда + Возврат; + КонецЕсли; + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторИлиФоновоеЗадание); + КонецЕсли; + Если Истина + И ФоновоеЗадание <> Неопределено + И ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно + Тогда + ФоновоеЗадание.Отменить(); + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + ПроверитьОтмененныеФоновыеЗаданияОтложенноЛкс(); + #КонецЕсли + мПлатформа.ОтмененныеФоновыеЗадания.Добавить(ФоновоеЗадание.УникальныйИдентификатор); + ПодключитьГлобальныйОбработчикОжиданияЛкс("ПроверитьОтмененныеФоновыеЗаданияОтложенноЛкс", 2); + КонецЕсли; + +КонецПроцедуры + +Функция ЗагрузитьТабличныйДокументИнтерактивноЛкс(Знач ТабличныйДокумент = Неопределено, выхПолноеИмяФайла = "") Экспорт + + Если ТабличныйДокумент = Неопределено Тогда + ТабличныйДокумент = Новый ТабличныйДокумент; + КонецЕсли; + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла"; + СписокРасширений = Новый СписокЗначений; + СписокРасширений.Добавить("mxl", "Табличный документ"); + СписокРасширений.Добавить("xls", "Лист Excel"); + СписокРасширений.Добавить("xlsx", "Лист Excel"); + СписокРасширений.Добавить("ods", "Open document"); + СписокРасширений.Добавить("txt", "Текстовый документ"); + СписокРасширений.Добавить("csv", "Текстовый документ"); + СписокРасширений.Добавить("dbf", "dBase III"); + Если ирКэш.ЛиПлатформаWindowsЛкс() Тогда + СписокРасширений.Добавить("htm", "HTML документ"); + СписокРасширений.Добавить("html", "HTML документ"); + КонецЕсли; + ДиалогВыбораФайла.Фильтр = ирОбщий.ФильтрДляВыбораФайлаЛкс(СписокРасширений,, Ложь); + Если ДиалогВыбораФайла.Выбрать() Тогда + выхПолноеИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла; + ФайлНаДиске = Новый Файл(выхПолноеИмяФайла); + Если Ложь + Или ирОбщий.СтрокиРавныЛкс(ФайлНаДиске.Расширение, ".txt") + Или ирОбщий.СтрокиРавныЛкс(ФайлНаДиске.Расширение, ".csv") + Тогда + ирОбщий.ПрочитатьТабличныйДокументИзТекстаЛкс(ТабличныйДокумент, выхПолноеИмяФайла); + ИначеЕсли нРег(ФайлНаДиске.Расширение) = ".dbf" Тогда + ирОбщий.ПрочитатьТабличныйДокументИзDBFЛкс(ТабличныйДокумент, выхПолноеИмяФайла); + ИначеЕсли нРег(ФайлНаДиске.Расширение) = ".mxl" Тогда + ТабличныйДокумент.Прочитать(выхПолноеИмяФайла); + ИначеЕсли ирОбщий.СтрНачинаетсяСЛкс(ФайлНаДиске.Расширение, ".htm") Тогда + ирОбщий.СостояниеЛкс("Запускаем EXCEL"); + ИмяФайлаТаблицы = ПолучитьИмяВременногоФайла("xlsx"); + Эксель = Новый COMОбъект("Excel.Application"); + Эксель.Visible = 1; // Иначе могут появляться невидимые модальные окна + //Эксель.DisplayAlerts = 0; + // https://docs.microsoft.com/ru-ru/office/vba/api/excel.workbooks.open + // (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad) + Книга = Эксель.WorkBooks.Open(выхПолноеИмяФайла, Ложь); + Книга.SaveAs(ИмяФайлаТаблицы, 51); // 51 - xlsx, 56 - xls, 44 - html + Книга.Close(); + Эксель.Quit(); + ТабличныйДокумент.Прочитать(ИмяФайлаТаблицы); + УдалитьФайлы(ИмяФайлаТаблицы); + ирОбщий.СостояниеЛкс(""); + Иначе + ТабличныйДокумент.Очистить(); + ТабличныйДокументЧтение = Новый ТабличныйДокумент; + ТабличныйДокументЧтение.Прочитать(выхПолноеИмяФайла); + РезультатВыбора = Неопределено; + Если ТабличныйДокументЧтение.Области.Количество() > 1 Тогда + СписокВыбора = Новый СписокЗначений; + Для Каждого Область Из ТабличныйДокументЧтение.Области Цикл + СписокВыбора.Добавить(Область.Имя); + КонецЦикла; + РезультатВыбора = СписокВыбора.ВыбратьЭлемент("Выберите лист файла"); + КонецЕсли; + Если РезультатВыбора <> Неопределено Тогда + ТабличныйДокумент.Вывести(ТабличныйДокументЧтение.ПолучитьОбласть(РезультатВыбора.Значение)); + Иначе + ТабличныйДокумент.Вывести(ТабличныйДокументЧтение); + КонецЕсли; + КонецЕсли; + Иначе + ТабличныйДокумент = Неопределено; + КонецЕсли; + Возврат ТабличныйДокумент; + +КонецФункции + +Функция СохранитьТабличныйДокументИнтерактивноЛкс(Знач ПолеИлиТабличныйДокумент, выхПолноеИмяФайла = "", Знач СразуОткрыть = Ложь, Знач УстанавливатьПризнакСодержитЗначение = Ложь, + Знач ЭтаФорма = Неопределено) Экспорт + + Если ЭтаФорма <> Неопределено И ТипЗнч(ПолеИлиТабличныйДокумент) = Тип("ПолеТабличногоДокумента") Тогда + ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(ЭтаФорма, ПолеИлиТабличныйДокумент); + КонецЕсли; + Если Не ЗначениеЗаполнено(выхПолноеИмяФайла) Тогда + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); + ДиалогВыбораФайла.Заголовок = "Записать табличный документ в файл"; + СписокРасширений = Новый СписокЗначений; + СписокРасширений.Добавить("mxl", "Табличный документ"); + СписокРасширений.Добавить("xls", "Лист Excel"); + СписокРасширений.Добавить("xlsx", "Лист Excel"); + СписокРасширений.Добавить("ods", "Open document"); + СписокРасширений.Добавить("txt", "Текстовый документ"); + ДиалогВыбораФайла.Фильтр = ирОбщий.ФильтрДляВыбораФайлаЛкс(СписокРасширений,, Ложь); + Если Не ДиалогВыбораФайла.Выбрать() Тогда + Возврат Ложь; + КонецЕсли; + выхПолноеИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла; + КонецЕсли; + ТабличныйДокумент = Новый ТабличныйДокумент; + ТабличныйДокумент.ВставитьОбласть(ПолеИлиТабличныйДокумент.Область(),,, Ложь); + Файл = Новый файл(выхПолноеИмяФайла); + ТипФайла = ТипФайлаТабличногоДокумента.MXL; + Если ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".xls") Тогда + ТипФайла = ТипФайлаТабличногоДокумента.XLS; + Если УстанавливатьПризнакСодержитЗначение Тогда + УстановитьПризнакСодержитЗначение(ТабличныйДокумент); + КонецЕсли; + ИначеЕсли ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".xlsx") Тогда + ТипФайла = ТипФайлаТабличногоДокумента.XLSX; + Если УстанавливатьПризнакСодержитЗначение Тогда + УстановитьПризнакСодержитЗначение(ТабличныйДокумент); + КонецЕсли; + ИначеЕсли ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".ods") Тогда + ТипФайла = ТипФайлаТабличногоДокумента.ODS; + ИначеЕсли ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".txt") Тогда + ТипФайла = ТипФайлаТабличногоДокумента.TXT; + КонецЕсли; + Попытка + ТабличныйДокумент.Записать(выхПолноеИмяФайла, ТипФайла); + Исключение + ирОбщий.СообщитьЛкс(ОписаниеОшибки()); + Возврат Ложь; + КонецПопытки; + Если Не СразуОткрыть И Не ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".mxl") Тогда + Ответ = Вопрос("Хотите сразу открыть сохраненный файл в сопоставленном приложении?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); + СразуОткрыть = Ответ = КодВозвратаДиалога.Да; + КонецЕсли; + Если СразуОткрыть Тогда + ЗапуститьПриложение(выхПолноеИмяФайла); + КонецЕсли; + Возврат Истина; + +КонецФункции + +Процедура УстановитьПризнакСодержитЗначение(ТабличныйДокумент) + + #Если Сервер И Не Сервер Тогда + ТабличныйДокумент = Новый ТабличныйДокумент; + #КонецЕсли + // Проставим свойство СодержитЗначение, чтобы при открытии в EXCEL в строках типа "000534235" не устанавливался формат "Почтовый" + // и не пропадали лидирующие нули при входе в режим редактирования ячейки + Для ТекущаяКолонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл + Для ТекущаяСтрока = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл + ОбластьЯчейки = ТабличныйДокумент.Область(ТекущаяСтрока, ТекущаяКолонка); + ОбластьЯчейки.СодержитЗначение = Истина; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Функция ПодтверждениеОперацииСУБДЛкс() Экспорт + + Если ирОбщий.ПолучитьСоединениеСУБД() = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + ИмяБД = ирОбщий.ПараметрыСоединенияADOЭтойБДЛкс().ИмяБД; + Возврат Вопрос("Вы осознаете риски и ответственность за использование прямого доступа к данным базы """ + ИмяБД + """ и нарушение лицензионного соглашения 1С?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да; + +КонецФункции + +// РежимИмяСиноним - Булево - Истина - Имя +Процедура НастроитьАвтоТабличноеПолеДинамическогоСпискаЛкс(ОсновнойЭУ, РежимИмяСиноним = Ложь, РазрешитьСортировку = Истина, ПредельноеКоличествоВидимыхКолонок = 30) Экспорт + + #Если Сервер И Не Сервер Тогда + ОсновнойЭУ = Новый ТабличноеПоле; + #КонецЕсли + // Антибаг платформы 8.2-8.3 для регистра бухгалтерии https://partners.v8.1c.ru/forum/t/1372055/m/1372055 + ДинамическийСписок = ирОбщий.ДанныеЭлементаФормыЛкс(ОсновнойЭУ); + ОбъектМД = Метаданные.НайтиПоТипу(ТипЗнч(ДинамическийСписок)); + ПолноеИмяМД = ОбъектМД.ПолноеИмя(); + ПолноеИмяТаблицы = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД); + ТипТаблицы = ирОбщий.ТипТаблицыБДЛкс(ПолноеИмяТаблицы); + КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяМД); + КорневойТип = ирОбщий.ПеревестиВРусский(КорневойТип); + СтруктураХраненияТаблицы = ирОбщий.СтруктураХраненияОсновнойТаблицыМДЛкс(ПолноеИмяМД); + ИмяПроведен = ирОбщий.ПеревестиСтроку("Проведен"); + ИмяСсылка = ирОбщий.ПеревестиСтроку("Ссылка"); + ИмяАктивность = ирОбщий.ПеревестиСтроку("Активность"); + ИмяПометкаУдаления = ирОбщий.ПеревестиСтроку("ПометкаУдаления"); + ИмяПредопределенный = ирОбщий.ПеревестиСтроку("Предопределенный"); + ИмяКартинка = ирОбщий.ПеревестиСтроку("Картинка"); + ВерсияПлатформы = ирКэш.НомерВерсииПлатформыЛкс(); + Если КорневойТип <> "РегистрБухгалтерии" Тогда + ОсновнойЭУ.СоздатьКолонки(); + КонецЕсли; + Попытка + КолонкиСписка = ОсновнойЭУ.Значение.Колонки; + Исключение + // Перечисление + КонецПопытки; + КолонкиТП = ОсновнойЭУ.Колонки; + КолонкаТП = КолонкиТП.Найти(ИмяКартинка); + + // Антибаг платформы. Почему то платформа локализует имя этой колонки "Картинка" в зависимости от кода языка интерфейса. + Если КолонкаТП = Неопределено Тогда + КолонкаТП = КолонкиТП.Найти("Picture"); + КонецЕсли; + Если КолонкаТП = Неопределено Тогда + КолонкаТП = КолонкиТП.Найти("Картинка"); + КонецЕсли; + + Если КолонкаТП = Неопределено Тогда + КолонкаКартинки = КолонкиТП.Добавить(ИмяКартинка); + КолонкаКартинки.ОтображатьСтандартнуюКартинку = Истина; + КолонкаКартинки.Ширина = ирОбщий.МинимальнаяШиринаКолонкиЛкс(); + КолонкаКартинки.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять; + КолонкаКартинки.ТекстШапки = ""; + КонецЕсли; + Попытка + НастройкаПорядка = ОсновнойЭУ.НастройкаПорядка; + Исключение + НастройкаПорядка = Неопределено; + КонецПопытки; + МинимальнаяШиринаКолонки = ирОбщий.МинимальнаяШиринаКолонкиЛкс(); + КоличествоВидимыхКолонок = 0; + Если КолонкиСписка <> Неопределено Тогда + // Здесь добавляется колонка "Предопределенный", т.к. в отборе она отсутствует + Для Каждого КолонкаСписка Из ОсновнойЭУ.Значение.Колонки Цикл + КолонкаТП = КолонкиТП.Найти(КолонкаСписка.Имя); + Если КолонкаТП = Неопределено Тогда + КолонкаТП = КолонкиТП.Добавить(КолонкаСписка.Имя); + Попытка + КолонкаТП.Данные = КолонкаСписка.Имя; + Исключение + // Например поле "Ссылка" почему то является недопустимым + КолонкиТП.Удалить(КолонкаТП); + Продолжить; + КонецПопытки; + КонецЕсли; + КолонкаТП.ТекстШапки = КолонкаСписка.Имя; + ЭлементОтбора = ОсновнойЭУ.Значение.Отбор.Найти(КолонкаСписка.Имя); + Если Истина + И КолонкаСписка.Имя = ИмяПредопределенный + И ЭлементОтбора = Неопределено + Тогда + КолонкаТП.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ирПредопределенный"); + НастроитьКолонкуКартинкиЛкс(КолонкаТП); + КонецЕсли; + Если ЭлементОтбора <> Неопределено И ирОбщий.ЛиОписаниеТиповБулевоЛкс(ЭлементОтбора.ТипЗначения) Тогда // https://www.hostedredmine.com/issues/905911 + Если КолонкаСписка.Имя = ИмяПометкаУдаления Тогда + КолонкаТП.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ПометитьНаУдаление"); + НастроитьКолонкуКартинкиЛкс(КолонкаТП); + КонецЕсли; + Если КолонкаСписка.Имя = ИмяПроведен Тогда + КолонкаТП.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("Провести"); + НастроитьКолонкуКартинкиЛкс(КолонкаТП); + КонецЕсли; + Если КолонкаСписка.Имя = ИмяАктивность Тогда + КолонкаТП.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ПереключитьАктивность"); + НастроитьКолонкуКартинкиЛкс(КолонкаТП); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Попытка + ЛиРедактированиеВСписке = ОсновнойЭУ.СпособРедактирования = СпособРедактированияСписка.ВСписке; + Исключение + ЛиРедактированиеВСписке = Ложь; + КонецПопытки; + Для Каждого ЭлементОтбора Из ОсновнойЭУ.Значение.Отбор Цикл + #Если Сервер И Не Сервер Тогда + ЭлементОтбора = Новый ПостроительЗапроса; + ЭлементОтбора = ЭлементОтбора.Отбор.Добавить(); + #КонецЕсли + // Антибаг 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1002521#1002521 + Если Истина + И ирОбщий.ЛиКорневойТипРегистраБухгалтерииЛкс(КорневойТип) + И (Ложь + Или Найти(ЭлементОтбора.Имя, "ВидСубконтоДт") = 1 + Или Найти(ЭлементОтбора.Имя, "ВидСубконтоКт") = 1) + Тогда + Продолжить; + КонецЕсли; + Если Истина + И ирОбщий.ЛиКорневойТипСсылкиЛкс(КорневойТип) + И ЭлементОтбора.Имя = ИмяСсылка + Тогда + // Добавить для него колонку можно, но платформа не будет выводить в нее данные и потому она будет просто занимать площадь + Продолжить; + КонецЕсли; + Если КолонкиСписка <> Неопределено Тогда + АвтоудалениеКолонки = ирОбщий.ЛиОписаниеТиповНеограниченнойСтрокиЛкс(ЭлементОтбора.ТипЗначения); + Попытка + КолонкиСписка.Добавить(ЭлементОтбора.Имя, АвтоудалениеКолонки); + Исключение + // Сюда попадает например элемент отбора от критерия отбора + ОписаниеОшибки = ОписаниеОшибки(); // Для отладки + Продолжить; + КонецПопытки; + КонецЕсли; + КолонкаТП = КолонкиТП.Найти(ЭлементОтбора.Имя); + Если КолонкаТП = Неопределено Тогда + КолонкаТП = КолонкиТП.Добавить(); + КонецЕсли; + //Колонка.ТекстШапки = ЭлементОтбора.Представление; + Если КорневойТип <> "Перечисление" Тогда + Если ЛиРедактированиеВСписке Тогда + КолонкаТП.УстановитьЭлементУправления(Тип("ПолеВвода")); + КонецЕсли; + ДанныеПодключены = Ложь; + Попытка + КолонкаТП.Данные = ЭлементОтбора.Имя; + ДанныеПодключены = Истина; + Исключение + // Например поле "Ссылка" почему то является недопустимым + ОписаниеОшибки = ОписаниеОшибки(); // Для отладки + КонецПопытки; + Если Не ДанныеПодключены Тогда + КолонкаТП.Видимость = Ложь; + КонецЕсли; + КонецЕсли; + Если КоличествоВидимыхКолонок > ПредельноеКоличествоВидимыхКолонок Тогда + КолонкаТП.Видимость = Ложь; + Иначе + КоличествоВидимыхКолонок = КоличествоВидимыхКолонок + 1; + КонецЕсли; + КолонкаТП.Имя = ЭлементОтбора.Имя; + Если КолонкаТП.Ширина = -1 Тогда + КолонкаТП.Ширина = ирОбщий.ШиринаТипаЗначенияЛкс(ЭлементОтбора.ТипЗначения); + КонецЕсли; + Если Истина + И ЭлементОтбора.ТипЗначения.СодержитТип(Тип("Дата")) + И ЭлементОтбора.ТипЗначения.Типы().Количество() = 1 + Тогда + КолонкаТП.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять; + КонецЕсли; + + // Антибаг платформы 8.2-8.3.6 https://partners.v8.1c.ru/forum/t/1337995/m/1337995 + Если Истина + И ВерсияПлатформы < 803008 + И ЭлементОтбора.ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор")) + Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Колонка %1 типа УникальныйИдентификатор не будет отображаться из-за ошибки платформы",, ЭлементОтбора.Имя)); + КолонкиТП.Удалить(КолонкаТП); + Продолжить; + КонецЕсли; + Если РазрешитьСортировку И НастройкаПорядка <> Неопределено Тогда + ЭлементУправленияПорядком = НастройкаПорядка.Найти(ЭлементОтбора.Имя); + Если ЭлементУправленияПорядком <> Неопределено Тогда + ЭлементУправленияПорядком.Доступность = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если КолонкиСписка <> Неопределено Тогда + Для Каждого ЭлементНастройкиОтбора Из ОсновнойЭУ.НастройкаОтбора Цикл + ЭлементНастройкиОтбора.Доступность = Истина; + КонецЦикла; + ПостроительПорядка = ирОбщий.ОсновнойПорядокТаблицыБДЛкс(ПолноеИмяТаблицы, ирОбщий.ПорядокВСтрокуЛкс(ДинамическийСписок.Порядок), ОсновнойЭУ.НастройкаПорядка, СтруктураХраненияТаблицы); + НовыйПорядок = ирОбщий.ПорядокВСтрокуЛкс(ПостроительПорядка.Порядок); + Если ЗначениеЗаполнено(НовыйПорядок) Тогда + // Обязательную установку делаем, чтобы в шапках появились индикаторы сортировки (антибаг платформы) + ДинамическийСписок.Порядок.Установить(НовыйПорядок); + КонецЕсли; + КонецЕсли; + Если ирОбщий.ЛиКорневойТипСсылкиЛкс(КорневойТип) Тогда + КолонкаИдентификатора = КолонкиТП.Добавить("ИдентификаторСсылкиЛкс"); + КолонкаИдентификатора.ТекстШапки = "Идентификатор ссылки"; + КонецЕсли; + Если ирОбщий.ЛиКорневойТипОбъектаСПредопределеннымЛкс(КорневойТип) Тогда + КолонкаИдентификатора = КолонкиТП.Добавить("ИмяПредопределенныхДанных"); + КолонкаИдентификатора.ТекстШапки = "Имя предопределенных данных"; + КолонкаИдентификатора.Видимость = Ложь; + КонецЕсли; + НастроитьЗаголовкиАвтоТабличногоПоляДинамическогоСпискаЛкс(ОсновнойЭУ, РежимИмяСиноним); + +КонецПроцедуры + +Процедура НастроитьКолонкуКартинкиЛкс(Знач КолонкаКартинки) Экспорт + + КолонкаКартинки.ТолькоПросмотр = Истина; + КолонкаКартинки.Видимость = Истина; + КолонкаКартинки.Ширина = 4; + КолонкаКартинки.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять; + КолонкаКартинки.ЦветТекстаШапки = ЦветаСтиля.ЦветФонаКнопки; + +КонецПроцедуры + +Процедура НастроитьЗаголовкиАвтоТабличногоПоляДинамическогоСпискаЛкс(Знач ОсновнойЭУ, Знач РежимИмяСиноним) Экспорт + + ОбъектМД = Метаданные.НайтиПоТипу(ТипЗнч(ОсновнойЭУ.Значение)); + ПоляТаблицы = ирОбщий.ПоляТаблицыМДЛкс(ОбъектМД.ПолноеИмя()); + Для Каждого ПолеТаблицы Из ПоляТаблицы Цикл + КолонкаТП = ОсновнойЭУ.Колонки.Найти(ПолеТаблицы.Имя); + Если КолонкаТП = Неопределено Тогда + Продолжить; + КонецЕсли; + Попытка + Подсказка = ПолеТаблицы.Метаданные.Подсказка; + Исключение + Подсказка = ""; + КонецПопытки; + Если РежимИмяСиноним Тогда + Заголовок = ПолеТаблицы.Имя; + Иначе + Заголовок = ПолеТаблицы.Заголовок; + КонецЕсли; + КолонкаТП.ТекстШапки = Заголовок; + КолонкаТП.ПодсказкаВШапке = Подсказка; + ирОбщий.ДобавитьОписаниеТиповВПодсказкуШапкиКолонкиЛкс(КолонкаТП, ПолеТаблицы.ТипЗначения, ПолеТаблицы.Метаданные); + Если ирОбщий.ЛиОписаниеТиповБулевоЛкс(ПолеТаблицы.ТипЗначения) Тогда + КолонкаТП.ДанныеФлажка = ""; + КолонкаТП.КартинкиСтрок = ирКэш.КартинкаПоИмениЛкс("ирСостоянияФлажка"); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник) Экспорт + + Если ИмяСобытия = "ЗакрытьВсеФормыИнструментовРазработчика" Тогда + Если ЭтаФорма.Открыта() Тогда + ЭтаФорма.Закрыть(); + Если ЭтаФорма.Открыта() Тогда + Параметр.Отказ = Истина; + КонецЕсли; + КонецЕсли; + ИначеЕсли ИмяСобытия = "ЕстьОткрытыеФормыИнструментовРазработчика" Тогда + Если ЭтаФорма.Открыта() Тогда + Параметр.Ответ = Истина; + КонецЕсли; + ИначеЕсли ИмяСобытия = "ОбнаружитьСебя" Тогда + ИмяФормы = ирОбщий.ПолноеИмяФормыЛкс(ЭтаФорма); + Если Не ЗначениеЗаполнено(ИмяФормы) Тогда + Попытка + ИмяФормы = ЭтаФорма.ЭтотОбъект.Метаданные().ПолноеИмя(); + Исключение + КонецПопытки; + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяФормы) Тогда + ИмяФормы = "Неизвестная форма"; + КонецЕсли; + ирОбщий.СообщитьЛкс(ИмяФормы); + ИначеЕсли ИмяСобытия = "ОбнаружитьАктивную" Тогда + Если Форма_ВводДоступенЛкс(ЭтаФорма) Тогда + Параметр.Результат = ЭтаФорма; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Умеет определять активную форму инструментов и управляемую форму в управляемом приложении +Функция АктивнаяФормаЛкс() Экспорт + + Результат = АктивнаяУправляемаяФормаЛкс(); + Если Результат = Неопределено Тогда + Структура = Новый Структура("Результат"); + Структура.Вставить("ПроверятьПолеHTML", Ложь); + ОповеститьФормыПодсистемыЛкс("ОбнаружитьАктивную", Структура); + Если Структура.Результат = Неопределено Тогда + Структура.Вставить("ПроверятьПолеHTML", Истина); + ОповеститьФормыПодсистемыЛкс("ОбнаружитьАктивную", Структура); + КонецЕсли; + Результат = Структура.Результат; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Процедура ОткрытьФайлСПредупреждениемЛкс(ИмяФайла, СтандартнаяОбработка = Неопределено) Экспорт + + СтандартнаяОбработка = Ложь; + Ответ = Вопрос("Вы уверены, что хотите открыть """ + ИмяФайла + """?", РежимДиалогаВопрос.ОКОтмена); + Если Ответ = КодВозвратаДиалога.ОК Тогда + ЗапуститьПриложение(ИмяФайла); + КонецЕсли; + +КонецПроцедуры + +// Создает новый экземпляр обработки и открывает его форму. +// +// Параметры: +// Объект - ОбработкаОбъект, ОтчетОбъект. +// +// Возвращаемое значение: +// Форма. +// +Функция ОткрытьНовоеОкноФормыЛкс(ЭтотОбъект) Экспорт + + Если Ложь + Или ТипЗнч(ЭтотОбъект) = Тип("Форма") + Или ТипЗнч(ЭтотОбъект) = Тип("УправляемаяФорма") + Тогда + СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтотОбъект); + Если СлужебныеДанныеФормы.Свойство("МенеджерСохраненияНастроек") Тогда + ирКлиент.СохранитьНастройкуФормыЛкс(ЭтотОбъект); + КонецЕсли; + Результат = ПолучитьФормуЛкс(ирОбщий.ПолноеИмяФормыЛкс(ЭтотОбъект),,, Новый УникальныйИдентификатор); + Иначе + Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда + НовыйОбъект = ирОбщий.ПолучитьМенеджерЛкс(ЭтотОбъект).Создать(); + Иначе + ПолноеИмяОбъекта = ЭтотОбъект.Метаданные().ПолноеИмя(); + НовыйОбъект = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс(ПолноеИмяОбъекта); + КонецЕсли; + Результат = НовыйОбъект.ПолучитьФорму(); + КонецЕсли; + Результат.Открыть(); + Возврат Результат; + +КонецФункции + +Функция ПолучитьФормуЛкс(ПолноеИмяФормы, Параметры = Неопределено, Владелец = Неопределено, Уникальность = Неопределено, Окно = Неопределено, ТолькоВнешниеФормы = Ложь) Экспорт + + Фрагменты = ирОбщий.СтрРазделитьЛкс(ПолноеИмяФормы); + #Если Сервер И Не Сервер Тогда + Фрагменты = Новый Массив; + #КонецЕсли + Если Истина + И Фрагменты.Количество() = 4 + И ирОбщий.СтрокиРавныЛкс(Фрагменты[2], "Форма") + Тогда + ИмяФормы = Фрагменты[3]; + Иначе + ИмяФормы = Неопределено; + КонецЕсли; + Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда + //ирПортативный #Если Сервер И Не Сервер Тогда + // Такой прием нужен для обхода ошибка компиляции в портативном режиме + #Если Сервер И Не Сервер Тогда + Фрагменты = Новый Массив; + #КонецЕсли + // http://www.hostedredmine.com/issues/883626 + Если Истина + И (Фрагменты[0] = "Обработка" Или Фрагменты[0] = "Отчет") + И Фрагменты.Количество() > 2 + И Найти(Фрагменты[1], "ир") = 1 + И Фрагменты[1] <> Метаданные.Обработки.ирДинамическийСписок.Имя + Тогда + Если Не ТолькоВнешниеФормы Тогда + ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(Фрагменты[0] + "." + Фрагменты[1]); + #Если Сервер И Не Сервер Тогда + ОбъектМД = Метаданные.Обработки.ирАнализДанных; + #КонецЕсли + КонецЕсли; + Если ОбъектМД = Неопределено Тогда + ВызватьИсключение "Не найден объект метаданных " + ПолноеИмяФормы; + КонецЕсли; + Если ОбъектМД = Метаданные.Обработки.ирПлатформа Тогда + Менеджер = ирКэш.Получить(); // Так управляемые формы нельзя получать + Иначе + Менеджер = Новый (ирОбщий.ПеревестиСтроку(Фрагменты[0]) + ирОбщий.ПеревестиСтроку("Менеджер") + "." + Фрагменты[1]); + КонецЕсли; + Если Не ЗначениеЗаполнено(ИмяФормы) И ОбъектМД.ОсновнаяФорма <> Неопределено Тогда + // Нужно для отчетов. Иначе будет ошибка "неизвестный идентификатор формы" + ИмяФормы = ОбъектМД.ОсновнаяФорма.Имя; + КонецЕсли; + Результат = Менеджер.ПолучитьФорму(ИмяФормы, Владелец, Уникальность); + КонецЕсли; + Если Результат = Неопределено Тогда + // Форма не инструмента или управляемая форма инструмента или форма отчета подсистемы при запрещенном использовании обычных форм + Результат = ПолучитьФорму(ПолноеИмяФормы, Параметры, Владелец, Уникальность, Окно); + КонецЕсли; + //Если Найти(ПолноеИмяФормы, "Обработка.ирПлатформа.") = 1 Тогда + // Попытка + // ЭтоЗапрещено = Результат.ЭтотОбъект.Метаданные().ПолноеИмя() = ирОбщий.ПеревестиСтроку("Обработка") + ".ирПлатформа"; + // Исключение + // ЭтоЗапрещено = Ложь; + // КонецПопытки; + // Если ЭтоЗапрещено Тогда + // ирОбщий.СообщитьЛкс("Создан лишний экземпляр обработки ирПлатформа"); + // КонецЕсли; + //КонецЕсли; + //ирПортативный #КонецЕсли + Иначе + Если Не ТолькоВнешниеФормы Тогда + ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(Фрагменты[0] + "." + Фрагменты[1]); + КонецЕсли; + Если ОбъектМД = Неопределено Тогда + Если Фрагменты[1] = "ирПортативный" Тогда + Результат = ирПортативный.ПолучитьФорму(ИмяФормы, Владелец, Уникальность); + Иначе + ТипМетаданных = Фрагменты[0]; + Менеджер = ирПортативный.ПолучитьМенеджерТипаМетаданныхЛкс(ТипМетаданных); + ПолноеИмяФайла = ирПортативный.ПолноеИмяФайлаПортативногоОбъектаМетаданныхЛкс(Фрагменты[1], ТипМетаданных); + Результат = Менеджер.ПолучитьФорму(ПолноеИмяФайла, ИмяФормы, Владелец, Уникальность); + КонецЕсли; + Иначе + Результат = ирПортативный.ПолучитьФормуЛкс(ПолноеИмяФормы, Параметры, Владелец, Уникальность, Окно); + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ПараметрыБыстрогоСозданияФормыЛкс() Экспорт + + Возврат Новый Структура("АвтоТест"); + +КонецФункции + +Функция ОписаниеОповещенияЛкс(ИмяМетода, Модуль) Экспорт + ОписаниеОповещения = Вычислить("Новый ОписаниеОповещения(ИмяМетода, Модуль)"); // В 8.2 нет типа ОписаниеОповещения + Возврат ОписаниеОповещения; +КонецФункции + +Процедура ЗаполнитьСписокВыбораПоляСортировкиТабличногоПоляЛкс(Знач СписокВыбора, Знач ТабличноеПоле) Экспорт + + #Если Сервер И Не Сервер Тогда + СписокВыбора = Новый СписокЗначений; + #КонецЕсли + СписокВыбора.Очистить(); + Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл + Если Истина + И ЗначениеЗаполнено(КолонкаТП.Данные) + И (КолонкаТП.Видимость Или КолонкаТП.ИзменятьВидимость) + //И Не (КолонкаТП.ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор")) И КолонкаТП.ТипЗначения.Типы() = 1) + Тогда + СписокВыбора.Добавить(КолонкаТП.Данные + " Убыв", КолонкаТП.ТекстШапки + " Убыв"); + СписокВыбора.Добавить(КолонкаТП.Данные + " Возр", КолонкаТП.ТекстШапки + " Возр"); + КонецЕсли; + КонецЦикла; + СписокВыбора.СортироватьПоПредставлению(); + +КонецПроцедуры + +Функция СсылкаОсновногоОбъектаФормыЛкс(Знач ТекущаяФорма) Экспорт + + ИмяОсновногоРеквизита = "Объект"; + Попытка + Ссылка = ТекущаяФорма[ИмяОсновногоРеквизита].Ссылка; + Исключение + ИмяОсновногоРеквизита = ирОбщий.ПеревестиСтроку(ИмяОсновногоРеквизита); + Ссылка = Неопределено; + КонецПопытки; + Если Ссылка = Неопределено Тогда + Попытка + Ссылка = ТекущаяФорма[ИмяОсновногоРеквизита].Ссылка; + Исключение + Ссылка = Неопределено; + КонецПопытки; + КонецЕсли; + Возврат Ссылка; + +КонецФункции + +Функция ПолучитьСхемуКолонокМакетаКомпоновкиДанныхЛкс(МакетКомпоновки) Экспорт + + #Если Сервер И Не Сервер Тогда + МакетКомпоновки = Новый МакетКомпоновкиДанных; + #КонецЕсли + СхемаКолонок = Новый Структура; + + // Схема колонок строится негарантировано, т.к. платформа не предоставляет нужных данных + ОписанияМакетовОбластей = МакетКомпоновки.Макеты; + Если ОписанияМакетовОбластей.Количество() > 0 Тогда + ЯчейкиЗаголовка = ОписанияМакетовОбластей[0].Макет.Ячейки; + Если ЯчейкиЗаголовка <> Неопределено Тогда + КоличествоЯчеекЗаголовка = ЯчейкиЗаголовка.Количество(); + Для Индекс = 0 По КоличествоЯчеекЗаголовка - 1 Цикл + Для Каждого ОписаниеМакетаОбласти Из ОписанияМакетовОбластей Цикл + // Здесь подсказка криво работает из-за кривого синтакс-помощника 8.2.13.205 + // http://partners.v8.1c.ru/forum/thread.jsp?id=898023#898023 + ЯчейкаМакетаОбласти = ОписаниеМакетаОбласти.Макет.Ячейки[Индекс]; + Если ТипЗнч(ЯчейкаМакетаОбласти) <> Тип("ЯчейкаМакетаКоллекцииЗначенийОбластиКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + ПараметрЯчейки = ЯчейкаМакетаОбласти.Значение; + Если ПараметрЯчейки = Неопределено Тогда + Продолжить; + КонецЕсли; + Выражение = ОписаниеМакетаОбласти.Параметры["" + ПараметрЯчейки].Выражение; + ПозицияТочки = Найти(Выражение, "."); + Если Ложь + Или ПозицияТочки = 0 + Или Найти(Выражение, " ") > 0 + Или Найти(Выражение, "(") > 0 + Тогда + //ИмяПоля = ""; + Продолжить; + Иначе + ИмяПоля = Сред(Выражение, ПозицияТочки + 1); + КонецЕсли; + СхемаКолонок.Вставить(ЯчейкиЗаголовка[Индекс].Имя, ИмяПоля); + Прервать; + КонецЦикла; + КонецЦикла; + КонецЕсли; + КонецЕсли; + Возврат СхемаКолонок; + +КонецФункции + +// Параметры: +// Значение - +// ОчиститьПередУстановкой - Булево +// УстановитьТекст - Булево +// УстановитьЗначение - Булево +// +Функция БуферОбменаПриложения_УстановитьЗначениеЛкс(Знач Значение, Знач УстановитьПредставление = Истина) Экспорт + + Если ТипЗнч(Значение) = Тип("Строка") Тогда + Значение = Неопределено; + КонецЕсли; + //ФорматБуфераОбмена1С = ирКэш.ФорматБуфераОбмена1СЛкс(); + Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Значение) Тогда + ДобавитьСсылкуВИсториюРаботыЛкс(Значение); + КонецЕсли; + Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Значение) Тогда + ДобавитьОбъектВБуферСравненияЛкс(Значение); + КонецЕсли; + Если УстановитьПредставление Тогда + ЗначениеПредставление = "" + Значение; + ТекстВБуферОбменаОСЛкс(ЗначениеПредставление); + Иначе + ЗначениеПредставление = ТекстИзБуфераОбменаОСЛкс(); // Для последующео контроля согласованности буфера обмена приложения с буфером обмена ОС; + КонецЕсли; + БуферОбменаПриложения = БуферОбменаПриложенияЛкс(); + БуферОбменаПриложения.Значение = Неопределено; + //БуферОбменаПриложения.ЗначениеСтрока = ирОбщий.ОбъектВСтрокуXMLЛкс(Значение,,, Ложь); + БуферОбменаПриложения.ЗначениеСтрока = ЗначениеВСтрокуВнутр(Значение); + БуферОбменаПриложения.ЗначениеПредставление = ЗначениеПредставление; + +КонецФункции + +Функция БуферОбменаПриложения_ЗначениеЛкс(ТекстИзБуфераОбменаОС = "") Экспорт + + //ФорматБуфераОбмена1С = ирКэш.ФорматБуфераОбмена1СЛкс(); + Если Не ЗначениеЗаполнено(ТекстИзБуфераОбменаОС) Тогда + ТекстИзБуфераОбменаОС = ТекстИзБуфераОбменаОСЛкс(); + КонецЕсли; + БуферОбменаПриложения = БуферОбменаПриложенияЛкс(); + Если БуферОбменаПриложения.ЗначениеПредставление <> ТекстИзБуфераОбменаОС Тогда + // буфера обмена приложения не согласован с буфером обмена ОС + БуферОбменаПриложения.Значение = Неопределено; + БуферОбменаПриложения.ЗначениеСтрока = ""; + БуферОбменаПриложения.ЗначениеПредставление = ""; + Возврат Неопределено; + Иначе + Результат = БуферОбменаПриложения.Значение; + Если Истина + И Результат = Неопределено + И ЗначениеЗаполнено(БуферОбменаПриложения.ЗначениеСтрока) + Тогда + //Результат = ирОбщий.ОбъектИзСтрокиXMLЛкс(БуферОбменаПриложения.ЗначениеСтрока,,, Ложь); + Результат = ирОбщий.ЗначениеИзСтрокиВнутрЛкс(БуферОбменаПриложения.ЗначениеСтрока); + БуферОбменаПриложения.ЗначениеСтрока = ""; + БуферОбменаПриложения.Значение = Результат; + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция БуферОбменаПриложенияЛкс() + + ВнутреннийБуферОбмена = ирКэш.Получить().ВнутреннийБуферОбмена; + Если ВнутреннийБуферОбмена = Неопределено Тогда + ВнутреннийБуферОбмена = Новый Структура("Значение, ЗначениеСтрока, ЗначениеПредставление"); + ирКэш.Получить().ВнутреннийБуферОбмена = ВнутреннийБуферОбмена; + КонецЕсли; + Возврат ВнутреннийБуферОбмена; + +КонецФункции + +Функция ЗначениеИзБуфераОбменаЛкс(РазрешитьСтандартноеЗначение = Ложь) Экспорт + + ТекстИзБуфераОбменаОС = ТекстИзБуфераОбменаОСЛкс(); + ЗначениеСсылки = ирОбщий.НавигационнаяСсылкаВЗначениеЛкс(ТекстИзБуфераОбменаОС); + Если ЗначениеСсылки = Неопределено Тогда + ЗначениеСсылки = БуферОбменаПриложения_ЗначениеЛкс(ТекстИзБуфераОбменаОС); + КонецЕсли; + Если ЗначениеСсылки = Неопределено И РазрешитьСтандартноеЗначение Тогда + ЗначениеСсылки = ТекстИзБуфераОбменаОС; + КонецЕсли; + Возврат ЗначениеСсылки; + +КонецФункции + +// . +// Параметры: +// ПолеВвода - ПолеВвода +// Значение - +// Текст - Строка(0,П) +// +Функция ВставитьЗначениеВПолеВводаЛкс(Знач ПолеВвода, Знач НовоеЗначение) Экспорт + + Результат = Ложь; + Если Истина + И НовоеЗначение <> Неопределено + И Не ПолеВвода.ТолькоПросмотр + Тогда + ТипНовогоЗначения = ТипЗнч(НовоеЗначение); + ТекущееЗначение = ирОбщий.ДанныеЭлементаФормыЛкс(ПолеВвода); + Если Ложь + Или ТипЗнч(ТекущееЗначение) = ТипНовогоЗначения + Или ПолеВвода.ОграничениеТипа.Типы().Количество() = 0 + Или ПолеВвода.ОграничениеТипа.СодержитТип(ТипНовогоЗначения) + Тогда + Результат = ИнтерактивноЗаписатьВПолеВводаЛкс(ПолеВвода, НовоеЗначение,, Истина); + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +// . +// Параметры: +// ЭтаФорма - Форма - для управляемой формы можно не передавать, она определится автоматически +// +Функция БуферОбмена_ВставитьЛкс(Знач ЭтаФорма = Неопределено, Знач ЛиОсновнаяВставка = Истина) Экспорт + + Если ЭтаФорма = Неопределено Тогда + ЭтаФорма = ирКлиент.АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + Если ЭтаФорма = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Значение = ЗначениеИзБуфераОбменаЛкс(Истина); + Если Значение = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ВставитьЗначениеВФормуЛкс(ЭтаФорма, Значение, ЛиОсновнаяВставка); + +КонецФункции + +Процедура ВставитьЗначениеВФормуЛкс(Знач ЭтаФорма, Знач Значение, Знач ЛиОсновнаяВставка = Истина) Экспорт + + #Если Сервер И Не Сервер Тогда + ЭтаФорма = ОткрытьФорму(); + #КонецЕсли + ТекущийЭлементФормы = ЭтаФорма.ТекущийЭлемент; + ПродолжитьОбработку = Истина; + ТипЗначения = ТипЗнч(Значение); + Если ТипЗначения = Тип("СписокЗначений") Тогда + Значение = ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(Значение); + КонецЕсли; + ПутьКДанным = ""; + Если Истина + И ТипЗнч(ЭтаФорма) = Тип("УправляемаяФорма") + И Не ЭтаФорма.ТолькоПросмотр + И ЭтаФорма.ИмяФормы = "ValueListForm" + И ЭтаФорма.ValueList.ТипЗначения.СодержитТип(ТипЗнч(Значение[0].Значение)) + И (Ложь + Или ТипЗначения = Тип("СписокЗначений") И ЭтаФорма.ValueList.ТипЗначения.СодержитТип(ТипЗнч(Значение[0].Значение)) + Или ТипЗначения = Тип("Строка") И ЭтаФорма.ValueList.ТипЗначения.СодержитТип(Тип("Строка"))) + Тогда + Если ТипЗнч(Значение) = Тип("Строка") Тогда + НовоеЗначение = Новый СписокЗначений; + НовоеЗначение.ЗагрузитьЗначения(ирОбщий.СтрРазделитьЛкс(Значение, Символы.ПС, Истина)); + Значение = НовоеЗначение; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + Значение = Новый СписокЗначений; + #КонецЕсли + //ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(Значение, ЭтаФорма.ValueList); + //ТекущийЭлементФормы.ТекущаяСтрока = ЭтаФорма.ValueList[ЭтаФорма.ValueList.Количество() - 1].ПолучитьИдентификатор(); + ЗагружаемаяТаблица = Новый ТаблицаЗначений; + ЗагружаемаяТаблица.Колонки.Добавить("Value"); + Для Каждого ЭлементСписка Из Значение Цикл + СтрокаСписка = ЗагружаемаяТаблица.Добавить(); + СтрокаСписка.Value = ЭлементСписка.Значение; + КонецЦикла; + ЗагрузитьТаблицуВТабличноеПолеЛкс(ЭтаФорма, ТекущийЭлементФормы, ЗагружаемаяТаблица); + ИначеЕсли Истина + И ЛиОсновнаяВставка + И (Ложь + Или ТипЗнч(ТекущийЭлементФормы) = Тип("ПолеВвода") + Или ТипЗнч(ТекущийЭлементФормы) = Тип("ПолеФормы")) + Тогда + Если Не ЭтаФорма.ТолькоПросмотр Тогда + Если ТипЗначения = Тип("Массив") Тогда + Значение = Значение[0]; + КонецЕсли; + Если ЛиОписаниеТиповСодержитТипЛкс(ТекущийЭлементФормы.ОграничениеТипа, ТипЗнч(Значение)) Тогда + ПродолжитьОбработку = Не ВставитьЗначениеВПолеВводаЛкс(ТекущийЭлементФормы, Значение); + КонецЕсли; + //Если ПродолжитьОбработку И ЗначениеЗаполнено(ТекущийЭлементФормы.Данные) Тогда + // // Например ссылка таблицы внешнего источника в поле ввода не может быть установлена через оповещение выбора + // Попытка + // ЭтаФорма[ТекущийЭлементФормы.Данные] = Значение; + // Исключение + // КонецПопытки; + //КонецЕсли; + КонецЕсли; + ИначеЕсли Ложь + Или ТипЗнч(ТекущийЭлементФормы) = Тип("ТабличноеПоле") + Или ТипЗнч(ТекущийЭлементФормы) = Тип("ТаблицаФормы") + Тогда + ЭлементУправления = Неопределено; + КолонкаТП = Неопределено; + ДобавитьСтроку = Истина + И ТекущийЭлементФормы.ТекущиеДанные = Неопределено + И ТекущийЭлементФормы.ИзменятьСоставСтрок; + ДоступноРедактирование = Истина; + // Если табличное поле находится в режиме редактирования строки, то делам ничего + Если Не ДобавитьСтроку Или ТекущийЭлементФормы.ТекущаяСтрока <> Неопределено Тогда + КолонкаТП = ирКлиент.ТабличноеПоле_ТекущаяКолонкаЛкс(ТекущийЭлементФормы, ЭлементУправления, ДоступноРедактирование); + Если Не ЛиОсновнаяВставка И ТипЗнч(ЭлементУправления) = Тип("ПолеВвода") Тогда + ТекущийЭлементФормы.ИзменитьСтроку(); + НачалоКолонки = 0; НачалоСтроки = 0; КонецКолонки = 0; КонецСтроки = 0; + ЭлементУправления.ПолучитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки); + Если Ложь + Или НачалоКолонки > 1 + //Или КонецКолонки > 1 + //Или НачалоСтроки > 1 + //Или КонецСтроки > 1 + Тогда + Возврат; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если Истина + И ТипЗнч(ЭтаФорма) = Тип("Форма") + И Не ЭтаФорма.ТолькоПросмотр + И (Ложь + Или ТипЗначения = Тип("СписокЗначений") + Или ТипЗначения = Тип("Строка")) + И (Ложь + Или ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).ИмяФормы = "Обработка.ирПлатформа.Форма.Массив" + Или (Истина + И ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).ИмяФормы = "Обработка.ирПлатформа.Форма.СписокЗначений" + И (Ложь + Или ТипЗначения = Тип("СписокЗначений") И ЛиОписаниеТиповСодержитТипЛкс(ЭтаФорма.ОписаниеТипов, ТипЗнч(Значение[0].Значение)) + Или ТипЗначения = Тип("Строка") И ЛиОписаниеТиповСодержитТипЛкс(ЭтаФорма.ОписаниеТипов, Тип("Строка"))))) + Тогда + Если ТипЗнч(Значение) = Тип("Строка") Тогда + НовоеЗначение = Новый СписокЗначений; + НовоеЗначение.ЗагрузитьЗначения(ирОбщий.СтрРазделитьЛкс(Значение, Символы.ПС, Истина)); + Значение = НовоеЗначение; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + Значение = Новый СписокЗначений; + #КонецЕсли + ЗагружаемаяТаблица = Новый ТаблицаЗначений; + ЗагружаемаяТаблица.Колонки.Добавить("ПредставлениеЗначения"); + Для Каждого ЭлементСписка Из Значение Цикл + СтрокаСписка = ЗагружаемаяТаблица.Добавить(); + СтрокаСписка.ПредставлениеЗначения = ЭлементСписка.Значение; + КонецЦикла; + ЗагрузитьТаблицуВТабличноеПолеЛкс(ЭтаФорма, ТекущийЭлементФормы, ЗагружаемаяТаблица,,,,,,, ЗагружаемаяТаблица.Количество() > 1); + Возврат; + КонецЕсли; + Попытка + РедактированиеВДиалоге = ТекущийЭлементФормы.СпособРедактирования = СпособРедактированияСписка.ВДиалоге; + Исключение + РедактированиеВДиалоге = Ложь; + КонецПопытки; + ДанныеПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТекущийЭлементФормы); + ИмяКолонкиДанных = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТекущийЭлементФормы); + Если Истина + И Не ТекущийЭлементФормы.ТолькоПросмотр + И ИмяКолонкиДанных <> "ПравоеЗначение" + И ТипЗнч(ДанныеПоля) = Тип("ОтборКомпоновкиДанных") + И ТипЗнч(Значение) = Тип("ОтборКомпоновкиДанных") + Тогда + ГруппаПриемник = ДанныеСтрокиТабличногоПоляЛкс(ТекущийЭлементФормы); + Если ТипЗнч(ГруппаПриемник) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ГруппаПриемник = ирОбщий.РодительСтрокиДереваЛкс(ГруппаПриемник, ДанныеПоля); + КонецЕсли; + ирОбщий.СкопироватьЭлементыКомпоновкиЛкс(ГруппаПриемник, Значение, Ложь,, ТекущийЭлементФормы); + Если ТипЗнч(ТекущийЭлементФормы) = Тип("ТабличноеПоле") Тогда + ТекущийЭлементФормы.Развернуть(ГруппаПриемник); + Если ТекущийЭлементФормы.ИзменяетДанные Тогда + ЭтаФорма.Модифицированность = Истина; + КонецЕсли; + Иначе //Если ТипЗнч(ТекущийЭлементФормы) = Тип("ТаблицаФормы") Тогда + ТекущийЭлементФормы.Развернуть(ДанныеПоля.ПолучитьИдентификаторПоОбъекту(ГруппаПриемник)); + КонецЕсли; + ИначеЕсли Истина + И Не РедактированиеВДиалоге + И Не ЭтаФорма.ТолькоПросмотр + И Не ТекущийЭлементФормы.ТолькоПросмотр + Тогда + Если Истина + И Значение <> Неопределено + И ТекущийЭлементФормы.ИзменятьСоставСтрок + И Не ДобавитьСтроку + И ДоступноРедактирование + И ТипЗнч(ДанныеПоля) <> Тип("Отбор") + И ТипЗнч(ДанныеПоля) <> Тип("ОтборКомпоновкиДанных") + Тогда + //Ответ = Вопрос("Выполнить вставку значения в новую строку (иначе будет выполнена вставка в текущую)?", РежимДиалогаВопрос.ДаНет, , + // КодВозвратаДиалога.Нет); + //Ответ = КодВозвратаДиалога.Нет); + //ДобавитьСтроку = Ответ = КодВозвратаДиалога.Да; + ДобавитьСтроку = Ложь; + КонецЕсли; + Если ДобавитьСтроку Тогда + ТекущийЭлементФормы.ДобавитьСтроку(); + Если КолонкаТП = Неопределено Тогда + КолонкаТП = ирКлиент.ТабличноеПоле_ТекущаяКолонкаЛкс(ТекущийЭлементФормы, ЭлементУправления, ДоступноРедактирование); // Текущая колонка могла измениться в ПриНачалеРедактированияСтроки + Иначе + ирКлиент.ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТекущийЭлементФормы, КолонкаТП); + КонецЕсли; + КонецЕсли; + Если ЭлементУправления <> Неопределено Тогда + Если ТекущийЭлементФормы.ТекущаяСтрока <> Неопределено Тогда + ТекущийЭлементФормы.ИзменитьСтроку(); // Нужно делать, т.к. табличное поле выходит из режима редактирования строки при вызове команды и иногда установке текущей колонки + КонецЕсли; + Если ТекущийЭлементФормы.ТекущиеДанные <> Неопределено Тогда + ТекущиеДанные = ДанныеСтрокиТабличногоПоляЛкс(ТекущийЭлементФормы); + ОграничениеТипа = ЭлементУправления.ОграничениеТипа; + ПродолжитьОбработку = Истина; + Если ТипЗнч(ДанныеПоля) = Тип("ОтборКомпоновкиДанных") Тогда + ДоступноеПоле = ДанныеПоля.ДоступныеПоляОтбора.НайтиПоле(ТекущиеДанные.ЛевоеЗначение); + Если ТипЗначения = Тип("СписокЗначений") Тогда + Если ТекущиеДанные.ВидСравнения <> ВидСравненияКомпоновкиДанных.НеВСписке Тогда + Если ДоступноеПоле.ДоступныеВидыСравнения.НайтиПоЗначению(ВидСравненияКомпоновкиДанных.ВСписке) <> Неопределено Тогда + ТекущиеДанные.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + КонецЕсли; + ПродолжитьОбработку = ТекущиеДанные.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; + КонецЕсли; + ИначеЕсли Ложь + Или ТекущиеДанные.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке + Или ТекущиеДанные.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке + Тогда + ОграничениеТипа = Новый ОписаниеТипов("СписокЗначений"); + Иначе + ОграничениеТипа = ДоступноеПоле.ТипЗначения; + КонецЕсли; + КонецЕсли; + Если ПродолжитьОбработку И ЛиОписаниеТиповСодержитТипЛкс(ОграничениеТипа, ТипЗначения) Тогда + //ПродолжитьОбработку = Не ВставитьЗначениеВПолеВводаЛкс(ЭлементУправления, Значение); // Так не работает для правых значений компоновки в управляемой форме + ПродолжитьОбработку = Не ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТекущийЭлементФормы, КолонкаТП, Значение,,,, ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных")); + КонецЕсли; + Если ПродолжитьОбработку Тогда + Если ТипЗначения = Тип("Массив") И Значение.Количество() > 0 Тогда + ЗначениеЭлемента = Значение[0]; + ЗначениеИзменено = Истина; + ИначеЕсли ТипЗначения = Тип("СписокЗначений") И Значение.Количество() > 0 Тогда + ЗначениеЭлемента = Значение[0].Значение; + ЗначениеИзменено = Истина; + Иначе + ЗначениеИзменено = Ложь; + КонецЕсли; + Если Истина + И ЗначениеИзменено + И ЛиОписаниеТиповСодержитТипЛкс(ОграничениеТипа, ТипЗнч(ЗначениеЭлемента)) + Тогда + //ПродолжитьОбработку = Не ВставитьЗначениеВПолеВводаЛкс(ЭлементУправления, ЗначениеЭлемента); + ПродолжитьОбработку = Не ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТекущийЭлементФормы, КолонкаТП, ЗначениеЭлемента,,,, ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных")); + КонецЕсли; + КонецЕсли; + ИмяКолонкиДанных = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТекущийЭлементФормы); + Если Истина + И ПродолжитьОбработку + И ЗначениеЗаполнено(ИмяКолонкиДанных) + И ЛиВКолонкеДоступнаЭмуляцияИнтерактивногоИзмененияЛкс(КолонкаТП) + И ЛиОписаниеТиповСодержитТипЛкс(ОграничениеТипа, ТипЗнч(Значение)) + Тогда + // Например ссылка таблицы внешнего источника в поле ввода не может быть установлена через оповещение выбора + Если ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ИмяКолонкиДанных = ирОбщий.ПервыйФрагментЛкс(ИмяКолонкиДанных, "Для"); + КонецЕсли; + Попытка + ТекущиеДанные[ИмяКолонкиДанных] = Значение; + Исключение + КонецПопытки; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ЛиОписаниеТиповСодержитТипЛкс(Знач ОграничениеТипа, Знач Тип) Экспорт + + Возврат Ложь + Или ОграничениеТипа.Типы().Количество() = 0 + Или ОграничениеТипа.СодержитТип(Тип); + +КонецФункции + +Процедура НайтиСсылкуИзБуфераВТаблицеФормыЛкс(ЭтаФорма) Экспорт + #Если Сервер И Не Сервер Тогда + ЭтаФорма = ПолучитьОбщуюФорму(); + #КонецЕсли + ИскомоеЗначение = ЗначениеИзБуфераОбменаЛкс(); + Если ИскомоеЗначение = Неопределено Тогда + Возврат; + КонецЕсли; + ТаблицаФормы = ЭтаФорма.ТекущийЭлемент; + ПродолжитьОбработку = Истина; + ТипЗначения = ТипЗнч(ИскомоеЗначение); + Если ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТаблицаФормы) = "Список" Тогда + ДинамическийСписокУстановитьТекущуюСтрокуСКонтролемЛкс(ТаблицаФормы, ИскомоеЗначение, ЭтаФорма); + Иначе + ИмяКолонкиДанных = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТаблицаФормы); + ДанныеТаблицы = ирОбщий.ДанныеЭлементаФормыЛкс(ТаблицаФормы,,, Истина); + ТаблицаИлиДеревоЗначений = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТаблицаФормы,, Истина, Ложь,,, ЭтаФорма); + Если ТипЗнч(ТаблицаИлиДеревоЗначений) = Тип("ДеревоЗначений") Тогда + #Если Сервер И Не Сервер Тогда + ТаблицаИлиДеревоЗначений = Новый ДеревоЗначений; + #КонецЕсли + НайденнаяСтрока = ТаблицаИлиДеревоЗначений.Строки.Найти(ИскомоеЗначение, ИмяКолонкиДанных, Истина); + Если НайденнаяСтрока = Неопределено Тогда + ирОбщий.СообщитьЛкс("Значение в колонке не найдено"); + Иначе + ПутьКСтроке = ирОбщий.Дерево_ПутьСтрокойЛкс(НайденнаяСтрока, "",,, ТаблицаИлиДеревоЗначений); + СтрокаТаблицыФормы = ирОбщий.Дерево_НайтиПоПутиСтрокойЛкс(ДанныеТаблицы, "", ПутьКСтроке); + Если ТипЗнч(ТаблицаФормы) = Тип("ТаблицаФормы") Тогда + Если СтрокаТаблицыФормы <> Неопределено Тогда + ТаблицаФормы.ТекущаяСтрока = СтрокаТаблицыФормы.ПолучитьИдентификатор(); + КонецЕсли; + Иначе + ТаблицаФормы.ТекущаяСтрока = СтрокаТаблицыФормы; + КонецЕсли; + КонецЕсли; + Иначе + НайденнаяСтрока = ТаблицаИлиДеревоЗначений.Найти(ИскомоеЗначение, ИмяКолонкиДанных); + Если НайденнаяСтрока = Неопределено Тогда + ирОбщий.СообщитьЛкс("Значение в колонке не найдено"); + Иначе + СтрокаТаблицыФормы = ДанныеТаблицы[ТаблицаИлиДеревоЗначений.Индекс(НайденнаяСтрока)]; + Если ТипЗнч(ТаблицаФормы) = Тип("ТаблицаФормы") Тогда + ТаблицаФормы.ТекущаяСтрока = СтрокаТаблицыФормы.ПолучитьИдентификатор(); + Иначе + ТаблицаФормы.ТекущаяСтрока = СтрокаТаблицыФормы; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура КопироватьСсылкуАктивнойСтрокиФормыЛкс(Форма) Экспорт + + КлючТекущейСтроки = Неопределено; + КлючиСтрок = КлючиСтрокБДИзТаблицыФормыЛкс(Форма, КлючТекущейСтроки); + Если КлючиСтрок.Количество() > 1 Тогда + БуферОбменаПриложения_УстановитьЗначениеЛкс(ирОбщий.МассивВСписокЗначенийЛкс(КлючиСтрок)); + ИначеЕсли КлючТекущейСтроки <> Неопределено Тогда + БуферОбменаПриложения_УстановитьЗначениеЛкс(КлючТекущейСтроки); + КонецЕсли; + +КонецПроцедуры + +// Параметры: +// ЭтаФорма - Форма - для управляемой формы можно не передавать, она определится автоматически +// +Функция БуферОбмена_КопироватьЛкс(Знач ЭтаФорма = Неопределено, Знач УстановитьПредставление = Истина) Экспорт + + Если ЭтаФорма = Неопределено Тогда + ЭтаФорма = ирКлиент.АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + Если ЭтаФорма = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + Значение = Форма_ЗначениеТекущегоПоляЛкс(ЭтаФорма, Истина); + Если Значение <> Неопределено Тогда + БуферОбменаПриложения_УстановитьЗначениеЛкс(Значение, УстановитьПредставление); + Иначе + КопироватьСсылкуАктивнойСтрокиФормыЛкс(ЭтаФорма); + КонецЕсли; + +КонецФункции + +Функция Форма_ЗначениеТекущегоПоляЛкс(ЭтаФорма, ДляКопирования = Ложь) Экспорт + + Значение = ирКлиент.ЗначенияВыделенныхЯчеекТаблицыЛкс(ЭтаФорма,, ДляКопирования, Ложь); + ЕстьСсылкиВТекущемПоле = Значение.Количество() > 0 И ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Значение[0], Ложь); + Если Значение.Количество() = 1 Тогда + Значение = Значение[0]; + КонецЕсли; + Если Не ЕстьСсылкиВТекущемПоле Тогда + //Значение = Неопределено; + ТекущийЭлементФормы = ЭтаФорма.ТекущийЭлемент; + Если ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеВвода")) Тогда + Значение = ирОбщий.ДанныеЭлементаФормыЛкс(ТекущийЭлементФормы); + //Текст = "" + ТекущийЭлементФормы.ВыделенныйТекст; + Если ДляКопирования И ТипЗнч(Значение) = Тип("Строка") Тогда + Значение = Неопределено; + КонецЕсли; + ИначеЕсли Ложь + Или ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеТекстовогоДокумента")) + Или ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеHTMLДокумента")) + Тогда + Если ДляКопирования Тогда + Если Истина + И ирКэш.НомерВерсииПлатформыЛкс() >= 803015 + И ирКэш.НомерВерсииПлатформыЛкс() <= 803017 + И ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеHTMLДокумента")) + Тогда + ПолеТекста = ОболочкаПоляТекстаЛкс(ТекущийЭлементФормы); + // Антибаг платформы. Копирование в буфер обмена не выполняется платформой + ВыделенныйТекст = ПолеТекста.ВыделенныйТекст(); + Если ВыделенныйТекст <> ТекстИзБуфераОбменаОСЛкс() Тогда + // Теряем оформление + ТекстВБуферОбменаОСЛкс(ВыделенныйТекст); + КонецЕсли; + КонецЕсли; + Иначе + ПолеТекста = ОболочкаПоляТекстаЛкс(ТекущийЭлементФормы); + Значение = ПолеТекста.ПолучитьТекст(); + КонецЕсли; + ИначеЕсли ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеТабличногоДокумента")) Тогда + #Если Сервер И Не Сервер Тогда + ТекущийЭлементФормы = Новый ТабличныйДокумент; + #КонецЕсли + Попытка + ДанныеРасшифровки = ЭтаФорма.ДанныеРасшифровки; + Исключение + ДанныеРасшифровки = Неопределено; + КонецПопытки; + Если ТекущийЭлементФормы.ТекущаяОбласть <> Неопределено Тогда + Если ДляКопирования Тогда + // Так будем терять оформление + //Значение = ТекущийЭлементФормы.ТекущаяОбласть.Текст; + //Если ПустаяСтрока(Прав(Значение, 1)) Тогда + // ТекстВБуферОбменаОСЛкс(Значение, ""); + //КонецЕсли; + Если Истина + И ТипЗнч(ДанныеРасшифровки) = Тип("ДанныеРасшифровкиКомпоновкиДанных") + И ТекущийЭлементФормы.ТекущаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Прямоугольник + И ТипЗнч(ТекущийЭлементФормы.ТекущаяОбласть.Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") + Тогда + ВысотаОбласти = ТекущийЭлементФормы.ТекущаяОбласть.Низ - ТекущийЭлементФормы.ТекущаяОбласть.Верх + 1; + Если Истина + И ТекущийЭлементФормы.ТекущаяОбласть.Лево = ТекущийЭлементФормы.ТекущаяОбласть.Право + И ВысотаОбласти > 1 + И ВысотаОбласти < 1000 + Тогда + ТаблицаВыделенныхЯчеек = ирОбщий.ТаблицаКлючейИзТабличногоДокументаЛкс(ТекущийЭлементФормы, ДанныеРасшифровки); + Значение = ТаблицаВыделенныхЯчеек.ВыгрузитьКолонку(0); // Может быть больше одной колонки + Иначе + ЭлементРасшифровки = ДанныеРасшифровки.Элементы[ТекущийЭлементФормы.ТекущаяОбласть.Расшифровка]; + Для каждого ЗначениеПоля Из ЭлементРасшифровки.ПолучитьПоля() Цикл + //Если Не ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ЗначениеПоля.Значение, Ложь) Тогда + // Продолжить; + //КонецЕсли; + Значение = ЗначениеПоля.Значение; + Прервать; + КонецЦикла; + КонецЕсли; + КонецЕсли; + Иначе + Значение = ТекущийЭлементФормы.ТекущаяОбласть.Текст; + КонецЕсли; + КонецЕсли; + ИначеЕсли Ложь + Или ТипЗнч(ТекущийЭлементФормы) = Тип("ТабличноеПоле") + Или ТипЗнч(ТекущийЭлементФормы) = Тип("ТаблицаФормы") + Тогда + #Если Сервер И Не Сервер Тогда + ТекущийЭлементФормы = Новый ТабличноеПоле; + #КонецЕсли + Если ТекущийЭлементФормы.ТекущаяСтрока <> Неопределено Тогда + ТипСтрокиТаблицы = ТипЗнч(ТекущийЭлементФормы.ТекущаяСтрока); + ДанныеПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТекущийЭлементФормы); + ИмяКолонкиДанных = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТекущийЭлементФормы); + Если Ложь + Или ТипСтрокиТаблицы = Тип("ДоступноеПолеКомпоновкиДанных") + Или ТипСтрокиТаблицы = Тип("ДоступноеПолеОтбораКомпоновкиДанных") + Тогда + Значение = ТекущийЭлементФормы.ТекущаяСтрока.Поле; + ИначеЕсли Истина + И ИмяКолонкиДанных <> "ПравоеЗначение" + И ТипЗнч(ДанныеПоля) = Тип("ОтборКомпоновкиДанных") + Тогда + Значение = Новый НастройкиКомпоновкиДанных; + Значение = Значение.Отбор; + ирОбщий.СкопироватьЭлементыКомпоновкиЛкс(Значение, ДанныеПоля,, ВыделенныеСтрокиТабличногоПоляЛкс(ТекущийЭлементФормы)); + ИначеЕсли ТипЗнч(Значение) <> Тип("Массив") Тогда + Если ТипЗнч(ТекущийЭлементФормы) = Тип("ТабличноеПоле") И ТекущийЭлементФормы.ТекущаяКолонка <> Неопределено Тогда + ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТекущийЭлементФормы); + ЯчейкаСРазметкой = ТекущийЭлементФормы.ОформлениеСтроки(ТекущийЭлементФормы.ТекущаяСтрока).Ячейки[ТекущийЭлементФормы.ТекущаяКолонка.Имя]; + // Уберем разметку вхождений строки поиска + ДопСвойства.ЗапретРазметкиВхождений = Истина; + ТекущийЭлементФормы.ОбновитьСтроки(ТекущийЭлементФормы.ТекущаяСтрока); + Ячейка = ТекущийЭлементФормы.ОформлениеСтроки(ТекущийЭлементФормы.ТекущаяСтрока).Ячейки[ТекущийЭлементФормы.ТекущаяКолонка.Имя]; + // Уберем разметку вхождений строки поиска + ДопСвойства.ЗапретРазметкиВхождений = Ложь; + ТекущийЭлементФормы.ОбновитьСтроки(ТекущийЭлементФормы.ТекущаяСтрока); + Если ДляКопирования Тогда + Значение = Ячейка.Значение; + Если ЯчейкаСРазметкой.Текст <> Ячейка.Текст Тогда + ТекстВБуферОбменаОСЛкс(Ячейка.Текст, ""); // Заменим помещенный платформой в буфер обмена текст с разметкой найденных слов на текст без разметки + ИначеЕсли ТипЗнч(Значение) = Тип("Строка") И """" + Значение + """" = Ячейка.Текст Тогда + ТекстВБуферОбменаОСЛкс(Значение, ""); // Удаляем явное обозначение границ строкового значения кавычками + КонецЕсли; + Если ТипЗнч(Значение) = Тип("Строка") Тогда + Если ПустаяСтрока(Прав(Значение, 1)) Тогда + // https://www.hostedredmine.com/issues/910752 + Массив = Новый Массив; + Массив.Добавить(ТекущийЭлементФормы.ТекущаяСтрока); + ПолноеИмяТаблицыБД = ""; + ТипИсточника = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТекущийЭлементФормы,,, ПолноеИмяТаблицыБД); + Если Истина + И ТипИсточника = "Список" + И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) + Тогда + ТаблицаЗначений = ирОбщий.ПустаяТаблицаЗначенийИзТаблицыБДЛкс(ПолноеИмяТаблицыБД); + Иначе + ТаблицаЗначений = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТекущийЭлементФормы, Массив); + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ТаблицаЗначений = Новый ТаблицаЗначений; + #КонецЕсли + Если ТаблицаЗначений <> Неопределено Тогда + КолонкаТаблицы = ТаблицаЗначений.Колонки.Найти(ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТекущийЭлементФормы)); + Если Ложь + Или КолонкаТаблицы = Неопределено + Или КолонкаТаблицы.ТипЗначения.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Переменная + Тогда + ТекстВБуферОбменаОСЛкс(Значение, ""); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Значение = Неопределено; + КонецЕсли; + Иначе + Значение = Ячейка.Текст; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ДляКопирования И ТипЗнч(Значение) = Тип("Массив") Тогда + Значение = ирОбщий.МассивВСписокЗначенийЛкс(Значение); + КонецЕсли; + Возврат Значение; + +КонецФункции + +Функция ОткрытьРазличныеЗначенияКолонкиЛкс(Знач ТабличноеПоле, Знач НастройкиСписка = Неопределено, Знач _АдресСхемыКомпоновки = Неопределено, ЭтаФорма = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + Обработки.ирРазличныеЗначенияКолонки; + #КонецЕсли + Форма = ирКлиент.ПолучитьФормуЛкс("Обработка.ирРазличныеЗначенияКолонки.Форма",, ТабличноеПоле); + Форма.НастройкиСписка = НастройкиСписка; + Форма.АдресСхемыКомпоновки = _АдресСхемыКомпоновки; + Форма.Форма = ЭтаФорма; + РезультатФормы = Форма.ОткрытьМодально(); + +КонецФункции + +Функция ОткрытьГруппировкуТабличногоПоляЛкс(Знач ТабличноеПоле, Знач НастройкиСписка = Неопределено, ИменаКлючевыхКолонок = "") Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Форма = мПлатформа.ПолучитьФорму("ГруппировкаТаблицы", ТабличноеПоле); + Форма.ПараметрНастройкаКомпоновки = НастройкиСписка; + Форма.ПараметрИменаКлючевыхКолонок = ИменаКлючевыхКолонок; + #Если ТолстыйКлиентУправляемоеПриложение Тогда + Форма.ОткрытьМодально(); + #Иначе + Форма.Открыть(); + #КонецЕсли + +КонецФункции + +Процедура ПоказатьСсылкуНаМодульКонфигурацииЛкс(ПолноеИмяМодуля) Экспорт + + Ссылка = СсылкаНаМодульКонфигурацииЛкс(ПолноеИмяМодуля); + ПоказатьСсылкуНаСтрокуМодуляЛкс(Ссылка); + +КонецПроцедуры + +Функция СсылкаНаМодульКонфигурацииЛкс(Знач ПолноеИмяМодуля) Экспорт + + Возврат "{" + ПолноеИмяМодуля + "(1)}"; + +КонецФункции + +Процедура ПоказатьСсылкуНаСтрокуМодуляЛкс(Знач Ссылка) Экспорт + + Текст = //"" + " + |" + Ссылка + "
+ |Запустите программу ClipAngel, скопируйте эту ссылку и откройте ее в конфигураторе через эту программу через ALT+клик + |" + //"" + ; + Форма = ФормаПросмотраHTMLЛкс(Текст); + Форма.ОткрытьМодально(); + +КонецПроцедуры + +Функция ОписаниеМодуляПоИмениЛкс(Знач ИмяМодуля) Экспорт + ОписаниеМодуля = Новый Структура("Метаданные, ИмяФайлаМодуля"); + Фрагменты = ирОбщий.СтрРазделитьЛкс(ИмяМодуля); + #Если Сервер И Не Сервер Тогда + Фрагменты = Новый Массив; + #КонецЕсли + ТипМодуля = Фрагменты[Фрагменты.ВГраница()]; + Если ТипМодуля = "Форма" Тогда + ТипМодуля = "Форма.Модуль"; + КонецЕсли; + Фрагменты.Удалить(Фрагменты.ВГраница()); + ИмяОбъектаМодуля = ирОбщий.СтрСоединитьЛкс(Фрагменты, "."); + Если ЗначениеЗаполнено(ИмяОбъектаМодуля) Тогда + ОписаниеМодуля.Метаданные = ирКэш.ОбъектМДПоПолномуИмениЛкс(ирОбщий.ПоследнийФрагментЛкс(ИмяОбъектаМодуля, " ")); + Если ОписаниеМодуля.Метаданные <> Неопределено Тогда + ОписаниеМодуля.ИмяФайлаМодуля = ОписаниеМодуля.Метаданные.ПолноеИмя() + "." + ТипМодуля; + Иначе + // Внешняя обработка + ОписаниеМодуля.ИмяФайлаМодуля = ИмяМодуля; + КонецЕсли; + Иначе + ОписаниеМодуля.Метаданные = Метаданные; + ОписаниеМодуля.ИмяФайлаМодуля = "Конфигурация" + "." + ТипМодуля; + КонецЕсли; + Возврат ОписаниеМодуля; +КонецФункции + +Процедура ОткрытьОбъектМетаданныхПоИмениМодуляЛкс(Знач ПолноеИмяМодуля) Экспорт + + ОписаниеМодуля = ОписаниеМодуляПоИмениЛкс(ПолноеИмяМодуля); + Если ОписаниеМодуля.Метаданные <> Неопределено Тогда + ОткрытьОбъектМетаданныхЛкс(ОписаниеМодуля.Метаданные); + КонецЕсли; + +КонецПроцедуры + +Процедура СкрытьПоказатьОднозначныеКолонкиТабличногоПоляЛкс(Знач ТабличноеПоле, Знач Скрыть = Истина, Знач ИгнорироватьКолонки = Неопределено) Экспорт + + ОставитьТолькоРазличающиесяКолонки = Ложь; + Если Скрыть Тогда + // Включаем видимость тех колонок реквизитов, в каких есть различия между элементами группы, а у остальных выключаем + Если ТабличноеПоле.Значение.Количество() > 1 Тогда + ОставитьТолькоРазличающиесяКолонки = Истина; + КонецЕсли; + КонецЕсли; + Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл + Если Ложь + Или (Истина + И ИгнорироватьКолонки <> Неопределено + И ЗначениеЗаполнено(КолонкаТП.Данные) + И ИгнорироватьКолонки.Свойство(КолонкаТП.Данные)) + Или ТабличноеПоле.Значение.Колонки.Найти(КолонкаТП.Данные) = Неопределено + Тогда + Продолжить; + КонецЕсли; + Если ОставитьТолькоРазличающиесяКолонки Тогда + ПервоеЗначение = ТабличноеПоле.Значение[0][КолонкаТП.Данные]; + Для Индекс = 1 По ТабличноеПоле.Значение.Количество() - 1 Цикл + ТекущееЗначение = ТабличноеПоле.Значение[Индекс][КолонкаТП.Данные]; + Если ПервоеЗначение <> ТекущееЗначение Тогда + Прервать; + КонецЕсли; + КонецЦикла; + НоваяВидимость = ПервоеЗначение <> ТекущееЗначение; + Иначе + НоваяВидимость = Истина; + КонецЕсли; + КолонкаТП.Видимость = НоваяВидимость; + КонецЦикла; + +КонецПроцедуры + +Процедура Форма_ПриОткрытииЛкс(ЭтаФорма) Экспорт + ирКэш.СостояниеПодготовкиКэшМДСеансаЛкс(); + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + ЭтаФорма = ПолучитьОбщуюФорму(); + #КонецЕсли + МодальныеГруппы = ирОбщий.МодальныеГруппыЛкс(); + #Если Сервер И Не Сервер Тогда + МодальныеГруппы = Новый Массив; + #КонецЕсли + Если ЭтаФорма.МодальныйРежим Тогда + МодальныеГруппы.Добавить(1); + #Если Сервер И Не Сервер Тогда + АктивироватьМодальныеГруппыЛкс(); + #КонецЕсли + ПодключитьГлобальныйОбработчикОжиданияЛкс("АктивироватьМодальныеГруппыЛкс"); + ИначеЕсли МодальныеГруппы.Количество() > 0 Тогда + ИндексГруппы = МодальныеГруппы.Количество() - 1; + МодальныеГруппы[ИндексГруппы].Значение = МодальныеГруппы[ИндексГруппы].Значение + 1; + КонецЕсли; + мПлатформа.ПодключитьПерехватКлавиатуры().ЗахватПервым = Ложь; // Используем не по назначению + ДобавитьВСписокОткрытыхФормЛкс(ЭтаФорма); + Если ТипЗнч(ЭтаФорма) = Тип("Форма") Тогда + ДобавитьИнструментВИсториюРаботыЛкс(ЭтаФорма); + ПодготовитьПрямуюДоставкуСобытияФормыЛкс(ЭтаФорма, "ВнешнееСобытие"); + ПодготовитьПрямуюДоставкуСобытияФормыЛкс(ЭтаФорма, "ОбработкаОповещения"); + // Подготовка отображения колонков типа Булево + Для Каждого ЭлементФормы Из ЭтаФорма.ЭлементыФормы Цикл + Если ТипЗнч(ЭлементФормы) = Тип("ТабличноеПоле") Тогда + ТипИсточника = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ЭлементФормы); + МакетТаблицы = Неопределено; + Если Ложь + Или ТипИсточника = "ТабличнаяЧасть" + Или ТипИсточника = "НаборЗаписей" + Или ТипИсточника = "ТаблицаЗначений" + Или ТипИсточника = "ДеревоЗначений" + Тогда + МакетТаблицы = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ЭлементФормы, Новый Массив); + КонецЕсли; + Если МакетТаблицы = Неопределено Тогда + // Динамический список + Продолжить; + КонецЕсли; + КолонкиДанных = МакетТаблицы.Колонки; + Для Каждого КолонкаТП Из ЭлементФормы.Колонки Цикл + КолонкаДанных = КолонкиДанных.Найти(КолонкаТП.Данные); + Если КолонкаДанных = Неопределено Или КолонкаТП.КартинкиСтрок.Вид <> ВидКартинки.Пустая Тогда + Продолжить; + КонецЕсли; + ТипЗначенияКолонки = Новый ОписаниеТипов(КолонкаДанных.ТипЗначения,, "Null"); + ТипыРеквизита = ТипЗначенияКолонки.Типы(); + Если ТипыРеквизита.Количество() = 1 И ТипыРеквизита[0] = Тип("Булево") Тогда + КолонкаТП.КартинкиСтрок = ирКэш.КартинкаПоИмениЛкс("ирСостоянияФлажка"); + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + //ирКлиент.УстановитьПрикреплениеФормыВУправляемомПриложенииЛкс(Этаформа); + КонецЕсли; + Если Не ЭтаФорма.МодальныйРежим И МодальныеГруппы.Количество() > 0 Тогда + // Антибаг платформы https://www.hostedredmine.com/issues/926161 + #Если Сервер И Не Сервер Тогда + АктивироватьАктивнуюФормуЛкс(); + #КонецЕсли + ирКлиент.ПодключитьГлобальныйОбработчикОжиданияЛкс("АктивироватьАктивнуюФормуЛкс"); + КонецЕсли; + Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда + ПодключитьПроверкуФормСсылокЛкс(); + КонецЕсли; + +КонецПроцедуры + +Процедура ПодготовитьПрямуюДоставкуСобытияФормыЛкс(Знач ЭтаФорма, Знач ИмяСобытия) + + ОбработчикСобытия = ЭтаФорма.ПолучитьДействие(ИмяСобытия); + Если Истина + И ОбработчикСобытия <> Неопределено + И Не ирОбщий.МетодРеализованЛкс(ЭтаФорма, ОбработчикСобытия) + Тогда + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("В модуле %1 обработчик события %2 не является экспортным",, ирОбщий.ПолноеИмяФормыЛкс(ЭтаФорма), 2, ИмяСобытия), СтатусСообщения.Внимание); + КонецЕсли; + ЭтаФорма.УстановитьДействие(ИмяСобытия, Неопределено); // Будем вызывать напрямую, чтобы платформа не вызывала обновление всех форм + +КонецПроцедуры + +Процедура ДобавитьВСписокОткрытыхФормЛкс(ЭтаФорма) Экспорт + + ирКэш.ОткрытыеФормыПодсистемыЛкс().Добавить(ЭтаФорма); + СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + СлужебныеДанныеФормы.Вставить("ДатаОткрытия", ирОбщий.ТекущееВремяВМиллисекундахЛкс()); + +КонецПроцедуры + +Процедура Форма_ПриЗакрытииЛкс(ЭтаФорма, СохранитьНастройкуПоУмолчанию = Истина) Экспорт + + #Если Сервер И Не Сервер Тогда + ЭтаФорма = ОткрытьФорму(); + #КонецЕсли + // У некоторых из-за большого объема данных в настройках пользователя это вызывает большие задержки + //ПодключитьГлобальныйОбработчикОжиданияЛкс("СохранитьНастройкиПользователяОтложенноЛкс"); + Если ТипЗнч(ЭтаФорма) = Тип("Форма") И СохранитьНастройкуПоУмолчанию Тогда + СохранитьНастройкуФормыЛкс(ЭтаФорма); + КонецЕсли; + ЗаданияФормы = Неопределено; + СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + #Если Сервер И Не Сервер Тогда + СлужебныеДанные = Новый Структура; + #КонецЕсли + Если СлужебныеДанные.Задания.Количество() > 0 Тогда + ЭтаФорма.ОтключитьОбработчикОжидания("ПроверкаЗавершенияФоновыхЗаданий"); + Для Каждого КлючИЗначение Из СлужебныеДанные.Задания Цикл + ОтменитьЗаданиеФормыЛкс(ЭтаФорма, КлючИЗначение.Значение, Истина); + КонецЦикла; + КонецЕсли; + + МодальныеГруппы = ирОбщий.МодальныеГруппыЛкс(); + #Если Сервер И Не Сервер Тогда + МодальныеГруппы = Новый Массив; + #КонецЕсли + Если МодальныеГруппы.Количество() > 0 Тогда + ИндексГруппы = МодальныеГруппы.Количество() - 1; + Если ЭтаФорма.МодальныйРежим Тогда + // Вылняется никогда, т.к. свойство МодальныйРежим платформа сбрасывает перед ПриЗакрытии + КоличествоФормВМодальнойГруппе = 0; + Иначе + КоличествоФормВМодальнойГруппе = МодальныеГруппы[ИндексГруппы].Значение; + КоличествоФормВМодальнойГруппе = КоличествоФормВМодальнойГруппе - 1; + КонецЕсли; + Если КоличествоФормВМодальнойГруппе = 0 Тогда + МодальныеГруппы.Удалить(ИндексГруппы); + УстановитьФокусВводаФормеЛкс(); + Иначе + МодальныеГруппы[ИндексГруппы].Значение = КоличествоФормВМодальнойГруппе; + КонецЕсли; + КонецЕсли; + ОткрытыеФормы = ирКэш.ОткрытыеФормыПодсистемыЛкс(); + Пока Истина Цикл + ПозицияОткрытой = ОткрытыеФормы.Найти(ЭтаФорма); + Если ПозицияОткрытой = Неопределено Тогда + Прервать; + КонецЕсли; + ОткрытыеФормы.Удалить(ПозицияОткрытой); + КонецЦикла; + +КонецПроцедуры + +Процедура ОтменитьЗаданиеФормыОтложенноЛкс(Параметры) Экспорт + + ОтменитьЗаданиеФормыЛкс(Параметры.ЭтаФорма, Параметры.ОписаниеЗадания); + +КонецПроцедуры + +Функция ОтменитьЗаданиеФормыЛкс(Знач ЭтаФорма, Знач ОписаниеЗадания, Знач ЗакрытьФормуЗадания = Ложь) + + Если Не ЗначениеЗаполнено(ОписаниеЗадания.УникальныйИдентификатор) Тогда + Возврат Ложь; + КонецЕсли; + ЗаданияФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).Задания; + #Если Сервер И Не Сервер Тогда + ЗаданияФормы = Новый Структура; + #КонецЕсли + ОтменитьФоновоеЗаданиеЛкс(ОписаниеЗадания.УникальныйИдентификатор); + Если ОписаниеЗадания.Многопоточное Тогда + Найденные = ирОбщий.ФоновыеЗаданияПотоковЛкс(); + ПрефиксКлючаПотока = ирОбщий.ПрефиксКлючаПотокаЛкс(ЭтаФорма); + Для Каждого ФоновоеЗадание Из Найденные Цикл + #Если Сервер И Не Сервер Тогда + ФоновоеЗадание = ФоновыеЗадания.Выполнить(); + #КонецЕсли + Если ирОбщий.СтрНачинаетсяСЛкс(ФоновоеЗадание.Ключ, ПрефиксКлючаПотока) Тогда + ОтменитьФоновоеЗаданиеЛкс(ФоновоеЗадание); + КонецЕсли; + КонецЦикла; + КонецЕсли; + ОбработатьЗавершениеЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма,, Истина, ЗакрытьФормуЗадания); + ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма); + Возврат Истина; + +КонецФункции + +Процедура УдалитьСсылкиНаЗакрытыеФормыЛкс(ЭтаФорма = Неопределено) Экспорт + + УдалитьФормы = Новый Массив; + ОткрытыеФормы = Новый Массив; + Для Каждого Форма Из ОткрытыеФормы Цикл + Если ЭтаФорма = Форма Или Форма.Открыта() Тогда + Продолжить; + КонецЕсли; + УдалитьФормы.Добавить(Форма); + КонецЦикла; + Для Каждого Форма Из УдалитьФормы Цикл + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Удалена ссылка на закрытую ранее форму %1",, Форма.Заголовок)); + ОткрытыеФормы.Удалить(ОткрытыеФормы.Найти(Форма)); + КонецЦикла; + +КонецПроцедуры + +Процедура ОповеститьФормыПодсистемыЛкс(ИмяСобытия = Неопределено, Параметр = Неопределено, Источник = Неопределено, Знач ЭтаФорма = Неопределено) Экспорт + Если ЭтаФорма = Неопределено Тогда + ЭтаФорма = Источник; + КонецЕсли; + УдалитьСсылкиНаЗакрытыеФормыЛкс(ЭтаФорма); + // Копируем, чтобы в процессе оповещения массив не менял состав + ОткрытыеФормы = ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(ирКэш.ОткрытыеФормыПодсистемыЛкс()); + Для Каждого Форма Из ОткрытыеФормы Цикл + Если ирОбщий.МетодРеализованЛкс(Форма, "ОбработкаОповещения") Тогда + Форма.ОбработкаОповещения(ИмяСобытия, Параметр, Источник); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +Процедура ОповеститьИсследователиОбъектовЛкс(Знач ЭтаФорма, Знач Значение, Знач Выражение = "") Экспорт + + Структура = Новый Структура("Значение", Значение); + Если ЗначениеЗаполнено(Выражение) Тогда + Структура.Вставить("Выражение", Выражение); + КонецЕсли; + ирКлиент.ОповеститьФормыПодсистемыЛкс("Исследовать", Структура, ЭтаФорма); + +КонецПроцедуры + +Процедура ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма) Экспорт + + Если ЭтаФорма.МодальныйРежим Тогда + Ответ = Вопрос("Хотите закрыть текущую форму, чтобы открыть новую форму немодально?", РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Да Тогда + ЭтаФорма.Закрыть(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ЗапроситьСохранениеДанныхФормыЛкс(ЭтаФорма, Отказ = Ложь) Экспорт + + Если ЭтаФорма.Модифицированность Тогда + ПередОтображениемДиалогаПередЗакрытиемФормыЛкс(ЭтаФорма); + Ответ = Вопрос("Данные в форме были изменены. Сохранить изменения?", РежимДиалогаВопрос.ДаНетОтмена); + Если Ответ = КодВозвратаДиалога.Отмена Тогда + Отказ = Истина; + Иначе + ЭтаФорма.Модифицированность = Ложь; + КонецЕсли; + КонецЕсли; + Возврат Ответ; + +КонецФункции + +Функция ЗаголовокДляКопииОбъектаЛкс(ЭтаФорма) Экспорт + + Возврат ирОбщий.ПоследнийФрагментЛкс(ЭтаФорма.Заголовок, ": ", Ложь) + " - " + ирОбщий.ТекущееВремяЛкс(); + +КонецФункции + +Функция ПериодОчисткиМенеджераВременныхТаблицЛкс(выхПоУмолчаниюОчищать = Ложь) Экспорт + + ПараметрыОчистки = ирОбщий.ВосстановитьЗначениеЛкс("ПредлагатьОчиститьМенеджерВременныхТаблицЧерезМинут"); + Если ТипЗнч(ПараметрыОчистки) = Тип("Структура") Тогда + Период = ПараметрыОчистки.Период; + выхПоУмолчаниюОчищать = ПараметрыОчистки.ПоУмолчаниюОчищать; + Иначе + Период = ПараметрыОчистки; + выхПоУмолчаниюОчищать = Ложь; + КонецЕсли; + Если Период = Неопределено Тогда + Период = 60; + ИначеЕсли Период < 1 Тогда + Период = 1; + ИначеЕсли Период > 240 Тогда + Период = 240; + КонецЕсли; + Возврат Период; + +КонецФункции + +Процедура ПередОтображениемДиалогаПередЗакрытиемФормыЛкс(Знач ЭтаФорма) Экспорт + + Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда + ЭтаФорма.Открыть(); // http://www.hostedredmine.com/issues/881581 + КонецЕсли; + +КонецПроцедуры + +Процедура КоманднаяПанельВставитьКнопкиГлобальныхКомандЛкс(Знач КоманднаяПанельПолеВвода) + + #Если ТолстыйКлиентОбычноеПриложение Тогда + Если ЛиПерехватКлавиатурногоВводаВОбычномПриложенииЛкс() Тогда + Возврат; + КонецЕсли; + #Иначе + Возврат; + #КонецЕсли + КнопкаКопировать = КоманднаяПанельПолеВвода.Кнопки.Добавить(); + КнопкаКопировать.ТипКнопки = ТипКнопкиКоманднойПанели.Действие; + Попытка + КнопкаКопировать.Действие = Новый Действие("КлсКомандаНажатие"); + Исключение + КоманднаяПанельПолеВвода.Кнопки.Удалить(КнопкаКопировать); + Возврат; + КонецПопытки; + КнопкаКопировать.Имя = "БуферОбмена_Копировать"; + КнопкаКопировать.Текст = "Копировать значение"; + КнопкаКопировать.Подсказка = "Копировать значение в буфер обмена"; + КнопкаКопировать.Пояснение = КнопкаКопировать.Подсказка; + КнопкаКопировать.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.C, Истина, , Истина); // ALT+SHIFT+C + КнопкаКопировать.Картинка = ирКэш.КартинкаПоИмениЛкс("ирКопировать"); + КнопкаВставить = КоманднаяПанельПолеВвода.Кнопки.Добавить(); + КнопкаВставить.Имя = "БуферОбмена_Вставить"; + КнопкаВставить.ТипКнопки = ТипКнопкиКоманднойПанели.Действие; + КнопкаВставить.Текст = "Вставить значение"; + КнопкаВставить.Подсказка = "Вставить значение из буфера обмена"; + КнопкаВставить.Пояснение = КнопкаВставить.Подсказка; + КнопкаВставить.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.V, Истина, , Истина); // ALT+SHIFT+V + КнопкаВставить.Действие = Новый Действие("КлсКомандаНажатие"); + КнопкаВставить.Картинка = ирКэш.КартинкаПоИмениЛкс("ирВставить"); + //КнопкаМеню = КоманднаяПанельПолеВвода.Кнопки.Добавить(); + //КнопкаМеню.Имя = "ОткрытьГлобальноеМеню"; + //КнопкаМеню.ТипКнопки = ТипКнопкиКоманднойПанели.Действие; + //КнопкаМеню.Текст = "Глобальное меню"; + //КнопкаМеню.Подсказка = "Открыть глобальное меню"; + //КнопкаМеню.Пояснение = КнопкаМеню.Подсказка; + //КнопкаМеню.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.E, Истина, Истина); // CTRL+ALT+E + //КнопкаМеню.Действие = Новый Действие("КлсКомандаНажатие"); + +КонецПроцедуры + +Функция ЛиПерехватКлавиатурногоВводаЛкс() Экспорт + + //Возврат Ложь; // для отладки + Если Ложь + Или Не ирКэш.ЛиПлатформаWindowsЛкс() + Или Найти(ПараметрЗапуска, "ОтключитьПерехватКлавиатурыИР") > 0 + Тогда + Результат = Ложь; + Иначе + #Если ТолстыйКлиентОбычноеПриложение Тогда + Результат = ЛиПерехватКлавиатурногоВводаВОбычномПриложенииЛкс(); + #Иначе + Результат = Истина; + #КонецЕсли + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ЛиПерехватКлавиатурногоВводаВОбычномПриложенииЛкс() Экспорт + + Результат = ирКэш.Получить().ПерехватКлавиатурногоВводаВОбычномПриложении; + Возврат Результат; + +КонецФункции + +Процедура УниверсальнаяКомандаФормыЛкс(Знач ЭтаФорма, Знач Кнопка, Знач ИсточникДействий = Неопределено, Знач МетаданныеВыбора = Неопределено) Экспорт + + СлужебныеДанныеФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); + Если Кнопка.Имя = "БуферОбмена_Копировать" Тогда + // Только в обычном приложении с отключенным перехватом клавиатурного ввода + БуферОбмена_КопироватьЛкс(ЭтаФорма); + ИначеЕсли Кнопка.Имя = "БуферОбмена_Вставить" Тогда + // Только в обычном приложении с отключенным перехватом клавиатурного ввода + БуферОбмена_ВставитьЛкс(ЭтаФорма); + ИначеЕсли Кнопка.Имя = "ОткрытьГлобальноеМеню" Тогда + Если Не ЛиПерехватКлавиатурногоВводаЛкс() Тогда + ОткрытьГлобальноеМенюЛкс(ЭтаФорма); + КонецЕсли; + ИначеЕсли Кнопка.Имя = "ОПодсистеме" Тогда + ОткрытьСправкуПоПодсистемеЛкс(ЭтаФорма); + ИначеЕсли Кнопка.Имя = "СтруктураФормы" Тогда + ОткрытьСтруктуруФормыЛкс(ЭтаФорма, ЭтаФорма); + ИначеЕсли Кнопка.Имя = "НовоеОкно" Тогда + ОткрытьНовоеОкноФормыЛкс(ЭтаФорма); + ИначеЕсли Кнопка.Имя = "ЗагрузитьНастройку" Тогда + ВыбратьИЗагрузитьНастройкуФормыЛкс(ЭтаФорма); + ИначеЕсли Кнопка.Имя = "СохранитьНастройку" Тогда + ВыбратьИСохранитьНастройкуФормыЛкс(ЭтаФорма); + ИначеЕсли Кнопка.Имя = "ЗагрузитьНастройкуИзФайла" Тогда + Если Не ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма) Тогда + ирОбщий.СообщитьЛкс("Нельзя выполнять загрузку настроек, пока форма выполняет фоновые задания"); + Возврат; + КонецЕсли; + НастройкаФормы = ЗагрузитьЗначениеИзФайлаИнтерактивноЛкс(СлужебныеДанныеФормы.МенеджерСохраненияНастроек.РасширениеФайла, "Настройка """ + ирОбщий.ПервыйФрагментЛкс(ЭтаФорма.Заголовок, ":") + """"); + Если НастройкаФормы <> Неопределено Тогда + ЗагрузитьНастройкуФормыЧерезОбработчикЛкс(ЭтаФорма, НастройкаФормы); + КонецЕсли; + ИначеЕсли Кнопка.Имя = "СохранитьНастройкуВФайл" Тогда + НастройкаФормы = СохраняемаяНастройкаФормыЛкс(ЭтаФорма); + Если НастройкаФормы <> Неопределено Тогда + СохранитьЗначениеВФайлИнтерактивноЛкс(НастройкаФормы, СлужебныеДанныеФормы.МенеджерСохраненияНастроек.РасширениеФайла, "Настройка """ + ирОбщий.ПервыйФрагментЛкс(ЭтаФорма.Заголовок, ":") + """"); + КонецЕсли; + Иначе + Если ИсточникДействий = Неопределено Тогда + ИсточникДействий = КоманднаяПанельКнопкиЛкс(ЭтаФорма, Кнопка).ИсточникДействий; + КонецЕсли; + Если ИсточникДействий = Неопределено Тогда + ИсточникДействий = ЭтаФорма.ТекущийЭлемент; + КонецЕсли; + Если ТипЗнч(ИсточникДействий) = Тип("ПолеТабличногоДокумента") Тогда + #Если Сервер И Не Сервер Тогда + ИсточникДействий = Новый ТабличныйДокумент; + #КонецЕсли + Если Кнопка.Имя = "Автосумма" Тогда + Кнопка.Пометка = Не Кнопка.Пометка; + ИсточникДействий.ТекущаяОбласть = ИсточникДействий.ТекущаяОбласть; + КонецЕсли; + ИначеЕсли ТипЗнч(ИсточникДействий) = Тип("ТабличноеПоле") Тогда + #Если Сервер И Не Сервер Тогда + ИсточникДействий = Новый ТабличноеПоле; + #КонецЕсли + Если Кнопка.Имя = "ПереместитьВверх" Тогда + ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ИсточникДействий, -1); + ИначеЕсли Кнопка.Имя = "ПереместитьВниз" Тогда + ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ИсточникДействий, +1); + ИначеЕсли Кнопка.Имя = "ПереместитьВНачало" Тогда + ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ИсточникДействий, -100000); + ИначеЕсли Кнопка.Имя = "ПереместитьВКонец" Тогда + ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ИсточникДействий, +100000); + ИначеЕсли Кнопка.Имя = "СортироватьПоВозрастанию" Тогда + ТабличноеПолеСортироватьЛкс(ЭтаФорма, ИсточникДействий, Истина); + ИначеЕсли Кнопка.Имя = "СортироватьПоУбыванию" Тогда + ТабличноеПолеСортироватьЛкс(ЭтаФорма, ИсточникДействий, Ложь); + ИначеЕсли Кнопка.Имя = "ПоказыватьИтоги" Тогда + ТабличноеПолеКнопкаОтображенияИтоговНажатиеЛкс(ЭтаФорма, ИсточникДействий, Кнопка); + ИначеЕсли Кнопка.Имя = "Идентификаторы" Тогда + КнопкаОтображатьПустыеИИдентификаторыНажатиеЛкс(Кнопка); + ИсточникДействий.ОбновитьСтроки(); + ИначеЕсли Кнопка.Имя = "СжатьКолонки" Тогда + СжатьКолонкиТабличногоПоляЛкс(ИсточникДействий); + ИначеЕсли Кнопка.Имя = "ШиринаКолонок" Тогда + РасширитьКолонкиТабличногоПоляЛкс(ИсточникДействий); + ИначеЕсли Кнопка.Имя = "ГруппировкаТаблицы" Тогда + КомпоновкаТП = ирКлиент.КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ИсточникДействий); + Если КомпоновкаТП <> Неопределено Тогда + НастройкаКомпоновки = КомпоновкаТП.Компоновщик.Настройки; + КонецЕсли; + ирКлиент.ОткрытьГруппировкуТабличногоПоляЛкс(ИсточникДействий, НастройкаКомпоновки); + ИначеЕсли Кнопка.Имя = "АнализДанных" Тогда + ФормаАнализа = ирКлиент.ПолучитьФормуЛкс("Обработка.ирАнализДанных.Форма",, ЭтаФорма); + ФормаАнализа.ПараметрТаблица = ИсточникДействий.Значение; + ФормаАнализа.Открыть(); + ИначеЕсли Кнопка.Имя = "МенеджерТабличногоПоля" Тогда + ОткрытьМенеджерТабличногоПоляЛкс(ИсточникДействий, ЭтаФорма,, МетаданныеВыбора); + ИначеЕсли Кнопка.Имя = "УстановитьЗначениеВКолонке" Тогда + ОткрытьМенеджерТабличногоПоляЛкс(ИсточникДействий, ЭтаФорма, "Обработка", МетаданныеВыбора); + ИначеЕсли Кнопка.Имя = "ЗагрузитьСтроки" Тогда + ЗагрузитьСтрокиВТабличноеПолеЛкс(ЭтаФорма, ИсточникДействий); + ИначеЕсли Кнопка.Имя = "РазличныеЗначенияКолонки" Тогда + ОткрытьРазличныеЗначенияКолонкиЛкс(ИсточникДействий,,, ЭтаФорма); + ИначеЕсли Кнопка.Имя = "РедакторОбъектаБД" Тогда + ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); + ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ИсточникДействий); + ИначеЕсли Кнопка.Имя = "КонсольОбработки" Тогда + ОткрытьОбъектыИзВыделенныхЯчеекВПодбореИОбработкеОбъектовЛкс(ИсточникДействий,, ЭтаФорма); + ИначеЕсли Кнопка.Имя = "ОбработатьОбъекты" Тогда + ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); + ОткрытьПодборИОбработкуОбъектовИзДинамическогоСпискаЛкс(ИсточникДействий); + ИначеЕсли Кнопка.Имя = "ВывестиСтроки" Тогда + ВывестиСтрокиТабличногоПоляИПоказатьЛкс(ЭтаФорма, ИсточникДействий); + ИначеЕсли Кнопка.Имя = "КонсольКомпоновки" Тогда + ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); + ОткрытьДанныеТабличногоПоляВКонсолиКомпоновкиЛкс(ЭтаФорма, ИсточникДействий); + ИначеЕсли Кнопка.Имя = "Сравнить" Тогда + ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(ЭтаФорма, ИсточникДействий); + ИначеЕсли Кнопка.Имя = "СравнитьСтроки" Тогда + ТабличноеПолеИлиТаблицаФормы_СравнитьСтрокиЛкс(ЭтаФорма, ИсточникДействий); + ИначеЕсли Кнопка.Имя = "ЗаполнитьГруппыДублейДляЗамены" Тогда + ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); + ОткрытьФормуЗаменыСсылокИзТабличногоПоляЛкс(ИсточникДействий); + ИначеЕсли Кнопка.Имя = "ОткрытьКоллекцию" Тогда + ОткрытьЗначениеЛкс(ИсточникДействий.Значение,,,, Ложь,, ИсточникДействий); + ИначеЕсли Кнопка.Имя = "ОткрытьКопиюКоллекции" Тогда + КопияКоллекции = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ИсточникДействий,,, Ложь,,, ЭтаФорма); + ОткрытьЗначениеЛкс(КопияКоллекции,,,, Ложь,, ИсточникДействий); + ИначеЕсли Кнопка.Имя = "СвернутьДерево" Тогда + ДеревоЗначенийСвернутьРазвернутьЛкс(ИсточникДействий, Истина); + ИначеЕсли Кнопка.Имя = "РазвернутьДерево" Тогда + ДеревоЗначенийСвернутьРазвернутьЛкс(ИсточникДействий, Ложь); + ИначеЕсли Кнопка.Имя = "ДеревоСвернутьОстальные" Тогда + ТабличноеПолеДеревоЗначений_СвернутьВсеСтрокиЛкс(ИсточникДействий, Истина); + ИначеЕсли Кнопка.Имя = "Очистить" Тогда + ИсточникДействий.Значение.Очистить(); + ИначеЕсли Кнопка.Имя = "ОтборПоЗначениюВТекущейКолонке" Тогда + Если ТипЗнч(ИсточникДействий.Значение) <> Тип("ДеревоЗначений") Тогда + ТабличноеПолеОтборДляЗначенияВТекущейКолонкеЛкс(ИсточникДействий, Истина,,,, ЭтаФорма); + КонецЕсли; + ИначеЕсли Кнопка.Имя = "ОтборБезЗначенияВТекущейКолонке" Тогда + Если ТипЗнч(ИсточникДействий.Значение) <> Тип("ДеревоЗначений") Тогда + ТабличноеПолеОтборДляЗначенияВТекущейКолонкеЛкс(ИсточникДействий, Ложь,,,, ЭтаФорма); + КонецЕсли; + ИначеЕсли Кнопка.Имя = "УстановитьФлажки" Тогда + ИзменитьПометкиВыделенныхИлиОтобранныхСтрокЛкс(ЭтаФорма, ИсточникДействий,, Истина,,, Истина); + ИначеЕсли Кнопка.Имя = "СнятьФлажки" Тогда + ИзменитьПометкиВыделенныхИлиОтобранныхСтрокЛкс(ЭтаФорма, ИсточникДействий,, Ложь,,, Истина); + ИначеЕсли Кнопка.Имя = "СколькоСтрок" Тогда + ТабличноеПолеИлиТаблицаФормы_СколькоСтрокЛкс(ИсточникДействий); + ИначеЕсли Кнопка.Имя = "НастроитьКолонки" Тогда + ОткрытьНастройкуКолонокТабличногоПоляЛкс(ЭтаФорма, ИсточникДействий); + ИначеЕсли Кнопка.Имя = "СвойстваСтроки" Тогда + ОткрытьРедакторСтрокиТаблицыЛкс(ЭтаФорма, ИсточникДействий); + ИначеЕсли ирОбщий.СтрНачинаетсяСЛкс(Кнопка.Имя, ирОбщий.НачалоИмениКнопкиПодменюПоследнихВыбранных("Отборы")) Тогда + НастройкаКомпоновки = ВыбранныйЭлементПоследнихЗначенийЛкс(ЭтаФорма, ИсточникДействий, Кнопка, "Отборы", Истина); + #Если Сервер И Не Сервер Тогда + НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; + #КонецЕсли + ПутьКДанным = "ЭлементыФормы." + ИсточникДействий.Имя + ".Отбор"; + ЭтаФорма.ОтключитьОбработчикИзмененияДанных(ПутьКДанным); + ирОбщий.СкопироватьОтборЛюбойЛкс(ИсточникДействий.ОтборСтрок, НастройкаКомпоновки.Отбор); + Попытка + ЭтаФорма.ОбработчикИзмененияДанных(ПутьКДанным); + Исключение + // Временно пропускаем такие ошибки + ирОбщий.СообщитьЛкс(ОписаниеОшибки()); + КонецПопытки; + Иначе + ВызватьИсключение "Неизвестное имя команды (" + Кнопка.Имя + ")"; + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ОткрытьНастройкуКолонокТабличногоПоляЛкс(Знач ЭтаФорма, Знач ИсточникДействий) Экспорт + + мНастройкаКолонок = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирДинамическийСписок"); + #Если Сервер И Не Сервер Тогда + мНастройкаКолонок = Обработки.ирДинамическийСписок.Создать(); + #КонецЕсли + ФормаНастроек = мНастройкаКолонок.ПолучитьФорму("НастройкиКолонок", ЭтаФорма); + ФормаНастроек.ПрочитатьНастройкиКолонокИзТабличногоПоля(ИсточникДействий); + ФормаНастроек.СвязанноеТабличноеПоле = ИсточникДействий; + ФормаНастроек.ПараметрРучноеСохранение = Истина; + ТаблицаЗначений = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ИсточникДействий, Новый Массив,,,,, ЭтаФорма); + Если ТаблицаЗначений <> Неопределено Тогда + Для Каждого СтрокаНастройкиКолонки Из ФормаНастроек.НастройкиКолонок Цикл + ДоступноеПоле = ТаблицаЗначений.Колонки.Найти(ИсточникДействий.Колонки[СтрокаНастройкиКолонки.Имя].Данные); + Если ДоступноеПоле = Неопределено Тогда + Продолжить; + КонецЕсли; + СтрокаНастройкиКолонки.ТипЗначения = ДоступноеПоле.ТипЗначения; + КонецЦикла; + КонецЕсли; + ВыбранноеЗначение = ФормаНастроек.ОткрытьМодально(); + Если ВыбранноеЗначение <> Неопределено Тогда + мНастройкаКолонок.ПрименитьНастройкиКолонокКТабличномуПолю(ИсточникДействий, ВыбранноеЗначение); + КонецЕсли; + +КонецПроцедуры + +Процедура ОткрытьТаблицуВКонсолиКомпоновкиЛкс(Знач Таблица, Знач КомпоновкаТП = Неопределено) Экспорт + + КонсольКомпоновокДанных = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольКомпоновокДанных"); + #Если Сервер И Не Сервер Тогда + КонсольКомпоновокДанных = Обработки.ирКонсольКомпоновокДанных.Создать(); + Таблица = Новый ТаблицаЗначений; + #КонецЕсли + Если КомпоновкаТП <> Неопределено Тогда + НастройкаКомпоновки = КомпоновкаТП.Компоновщик.Настройки; + КонецЕсли; + КонсольКомпоновокДанных.ОткрытьПоТаблицеЗначений(Таблица, НастройкаКомпоновки); + +КонецПроцедуры + +Процедура ОткрытьДанныеТабличногоПоляВКонсолиКомпоновкиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач НастройкаКомпоновки = Неопределено) Экспорт + + КонсольКомпоновокДанных = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольКомпоновокДанных"); + #Если Сервер И Не Сервер Тогда + КонсольКомпоновокДанных = Обработки.ирКонсольКомпоновокДанных.Создать(); + #КонецЕсли + КомпоновкаТП = ирКлиент.КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); + Если КомпоновкаТП <> Неопределено Тогда + Если НастройкаКомпоновки = Неопределено Тогда + НастройкаКомпоновки = КомпоновкаТП.Компоновщик.Настройки; + КонецЕсли; + ирОбщий.УстановитьПараметрыВыводаКомпоновкиПоУмолчаниюЛкс(НастройкаКомпоновки); + КонецЕсли; + КопияКоллекции = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле,,,,,, ЭтаФорма); + ВнешниеНаборыДанных = Новый Структура("Основной", КопияКоллекции); + КонсольКомпоновокДанных.ОткрытьПоТабличномуПолю(ТабличноеПоле,, НастройкаКомпоновки, ВнешниеНаборыДанных); + +КонецПроцедуры + +// Родственник ВернутьПостоянныйПарольПользователяЛкс +// Пароль устанавливается временный и опционально роль ирРазработчик +Функция УстановитьВременныеСвойстваПользователюИБЛкс(ПользовательИБ, ПодменитьПарольНаВремяЗапуска = Истина, ВременноПредоставитьПравоРазработчикИР = Истина, + ОтключитьЗащитуОтОпасныхДействийНаВремяЗапуска = Истина, ЯзыкКонфигурации = "", ПользовательДобавляемыхРолей = "") Экспорт + + #Если Сервер И Не Сервер Тогда + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + #КонецЕсли + мПлатформа = ирКэш.Получить(); + НужноВернутьАутентификациюОС = Ложь; + НужноВернутьАутентификациюПаролем = Ложь; + НужноВернутьПароль = Ложь; + НужноВернутьЗащитуОтОпасныхДействий = Ложь; + НужноВернутьЯзыкКонфигурации = Ложь; + УдалитьРоли = Новый СписокЗначений; + Если ПодменитьПарольНаВремяЗапуска Тогда + Если ирОбщий.СтрокиРавныЛкс(ПользовательИБ.Имя, ИмяПользователя()) Тогда + ирОбщий.СообщитьЛкс("Назначение временного пароля собственному пользователю не допускается"); + Возврат Неопределено; + КонецЕсли; + мhash = ПользовательИБ.СохраняемоеЗначениеПароля; + Если ПользовательИБ.АутентификацияОС = Истина Тогда + ПользовательИБ.АутентификацияОС = Ложь; + НужноВернутьАутентификациюОС = Истина; + КонецЕсли; + Если ПользовательИБ.АутентификацияСтандартная = Ложь Тогда + ПользовательИБ.АутентификацияСтандартная = Истина; + НужноВернутьАутентификациюПаролем = Истина; + КонецЕсли; + Пароль = Формат(ТекущаяДата(), "ДФ=HHmmss") + XMLСтрока(НомерСеансаИнформационнойБазы()) + "!_qQ"; + ПользовательИБ.Пароль = Пароль; + НужноВернутьПароль = Истина; + КонецЕсли; + Если ВременноПредоставитьПравоРазработчикИР И Не ирКэш.ЛиПортативныйРежимЛкс() Тогда + Роль = Метаданные.Роли.ирРазработчик; + Если Не ПользовательИБ.Роли.Содержит(Роль) Тогда + УдалитьРоли.Добавить(Роль); + ПользовательИБ.Роли.Добавить(Роль); + КонецЕсли; + КонецЕсли; + Если ЗначениеЗаполнено(ПользовательДобавляемыхРолей) Тогда + ПользовательДобавляемыхРолейИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательДобавляемыхРолей); + Для Каждого Роль Из ПользовательДобавляемыхРолейИБ.Роли Цикл + Если Не ПользовательИБ.Роли.Содержит(Роль) Тогда + УдалитьРоли.Добавить(Роль); + ПользовательИБ.Роли.Добавить(Роль); + КонецЕсли; + КонецЦикла; + УдалитьРоли.СортироватьПоЗначению(); + Для Каждого Роль Из УдалитьРоли Цикл + ирОбщий.СообщитьЛкс("Добавлена роль - " + Роль.Значение); + КонецЦикла; + КонецЕсли; + Если УдалитьРоли.Количество() > 0 Тогда + ПользовательИБ.ПолноеИмя = ПользовательИБ.ПолноеИмя + ирОбщий.МаркерВременныхРолейЛкс(); + КонецЕсли; + Если ЗначениеЗаполнено(ЯзыкКонфигурации) Тогда + НужноВернутьЯзыкКонфигурации = Истина; + СтарыйЯзыкКонфигурации = ПользовательИБ.Язык; + Если СтарыйЯзыкКонфигурации <> Неопределено Тогда + СтарыйЯзыкКонфигурации = СтарыйЯзыкКонфигурации.Имя; + КонецЕсли; + ПользовательИБ.Язык = Метаданные.Языки[ЯзыкКонфигурации]; + КонецЕсли; + Если ОтключитьЗащитуОтОпасныхДействийНаВремяЗапуска Тогда + Если ирКэш.ДоступнаЗащитаОтОпасныхДействийЛкс() И ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях Тогда + ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь; + НужноВернутьЗащитуОтОпасныхДействий = Истина; + КонецЕсли; + КонецЕсли; + ПользовательИБ.Записать(); + НаборПараметров = Новый Структура(); + НаборПараметров.Вставить("mHash", мhash); + НаборПараметров.Вставить("НужноВернутьАутентификациюПаролем", НужноВернутьАутентификациюПаролем); + НаборПараметров.Вставить("НужноВернутьАутентификациюОС", НужноВернутьАутентификациюОС); + НаборПараметров.Вставить("ПользовательИБ", ПользовательИБ); + НаборПараметров.Вставить("НужноВернутьПароль", НужноВернутьПароль); + НаборПараметров.Вставить("НужноВернутьЗащитуОтОпасныхДействий", НужноВернутьЗащитуОтОпасныхДействий); + НаборПараметров.Вставить("УдалитьРоли", УдалитьРоли); + НаборПараметров.Вставить("Имя", ПользовательИБ.Имя); + НаборПараметров.Вставить("Пароль", Пароль); + НаборПараметров.Вставить("НужноВернутьЯзыкКонфигурации", НужноВернутьЯзыкКонфигурации); + НаборПараметров.Вставить("ЯзыкКонфигурации", СтарыйЯзыкКонфигурации); + Возврат НаборПараметров; + +КонецФункции + +// Родственник УстановитьВременныеСвойстваПользователюИБЛкс +Процедура ВернутьПостоянныеСвойстваПользователюИБЛкс(НаборПараметров = Неопределено) Экспорт; + + //УстановитьПривилегированныйРежим(Истина); + Если НаборПараметров <> Неопределено Тогда + мhash = НаборПараметров.mhash; + ЯзыкКонфигурации = НаборПараметров.ЯзыкКонфигурации; + НужноВернутьАутентификациюПаролем = НаборПараметров.НужноВернутьАутентификациюПаролем; + НужноВернутьАутентификациюОС = НаборПараметров.НужноВернутьАутентификациюОС; + НужноВернутьПароль = НаборПараметров.НужноВернутьПароль; + НужноВернутьЗащитуОтОпасныхДействий = НаборПараметров.НужноВернутьЗащитуОтОпасныхДействий; + НужноВернутьЯзыкКонфигурации = НаборПараметров.НужноВернутьЯзыкКонфигурации; + ПользовательИБ = НаборПараметров.ПользовательИБ; + УдалитьРоли = НаборПараметров.УдалитьРоли; + #Если Сервер И Не Сервер Тогда + УдалитьРоли = Новый СписокЗначений; + #КонецЕсли + Иначе + Возврат; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + #КонецЕсли + Если НужноВернутьПароль Тогда + ПользовательИБ.СохраняемоеЗначениеПароля = мHash; + КонецЕсли; + Если НужноВернутьАутентификациюПаролем Тогда + ПользовательИБ.АутентификацияСтандартная = Ложь; + КонецЕсли; + Если НужноВернутьАутентификациюОС Тогда + ПользовательИБ.АутентификацияОС = Истина; + КонецЕсли; + Если НужноВернутьЗащитуОтОпасныхДействий И ирКэш.ДоступнаЗащитаОтОпасныхДействийЛкс() Тогда + ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Истина; + КонецЕсли; + Если УдалитьРоли.Количество() > 0 Тогда + Для Каждого Роль Из УдалитьРоли Цикл + ПользовательИБ.Роли.Удалить(Роль.Значение); + КонецЦикла; + ПользовательИБ.ПолноеИмя = ирОбщий.СтрокаБезПоследнегоФрагментаЛкс(ПользовательИБ.ПолноеИмя, ирОбщий.МаркерВременныхРолейЛкс()); + КонецЕсли; + Если НужноВернутьЯзыкКонфигурации Тогда + ПользовательИБ.Язык = Метаданные.Языки[ЯзыкКонфигурации]; + КонецЕсли; + ПользовательИБ.Записать(); + +КонецПроцедуры + +Процедура НастроитьПоляВводаПараметровПотоковЛкс(ЭтаФорма, ЕстьКоличествоОбъектовВПорции = Истина) Экспорт + + ЭлементыФормы = ЭтаФорма.ЭлементыФормы; + Если ЕстьКоличествоОбъектовВПорции Тогда + СписокВыбора = ЭлементыФормы.КоличествоОбъектовВПорции.СписокВыбора; + СписокВыбора.Добавить(1); + СписокВыбора.Добавить(2); + СписокВыбора.Добавить(5); + СписокВыбора.Добавить(10); + СписокВыбора.Добавить(20); + СписокВыбора.Добавить(50); + СписокВыбора.Добавить(100); + СписокВыбора.Добавить(200); + КонецЕсли; + СписокВыбора = ЭлементыФормы.КоличествоПотоков.СписокВыбора; + СписокВыбора.Добавить(1); + СписокВыбора.Добавить(4); + СписокВыбора.Добавить(8); + СписокВыбора.Добавить(12); + СписокВыбора.Добавить(16); + +КонецПроцедуры + +Функция ОткрытьМенеджерТабличногоПоляЛкс(Знач ТабличноеПоле = Неопределено, Знач ЭтаФорма, Знач АктивизироватьСтраницу = "", Знач МетаданныеВыбора = Неопределено) Экспорт + + Если ТабличноеПоле = Неопределено Тогда + ТабличноеПоле = ЭтаФорма.ТекущийЭлемент; + КонецЕсли; + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаМенеджера = мПлатформа.ПолучитьФорму("МенеджерТабличногоПоля", ЭтаФорма); + ФормаМенеджера.УстановитьСвязь(ТабличноеПоле, , АктивизироватьСтраницу, МетаданныеВыбора); + Возврат ФормаМенеджера; + +КонецФункции + +Процедура ОткрытьСвязанныйСеансТонкогоКлиентаЛкс() Экспорт + Если ирОбщий.ПроверитьПлатформаНеWindowsЛкс() Тогда + Возврат; + КонецЕсли; + Результат = ирКэш.ПолучитьСеансТонкогоКлиентаЛкс(); + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + Результат.Visible = Истина; + Окна = Результат.ПолучитьОкна(); + СписокОткрытыхОбъектов = Новый СписокЗначений; + Для Каждого Окно Из Окна Цикл + Попытка + Содержимое = Окно.Содержимое; + Исключение + // В 8.2 нет такого свойства + Продолжить; + КонецПопытки; + Для Каждого Форма Из Содержимое Цикл + Попытка + СсылкаCOM = Форма.Parameters.Key; + Исключение + СсылкаCOM = Неопределено; + КонецПопытки; + Если СсылкаCOM <> Неопределено Тогда + ФрагментыИмениТипа = ирОбщий.СтрРазделитьЛкс(Форма.FormName); + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(Новый УникальныйИдентификатор(Результат.String(СсылкаCOM.УникальныйИдентификатор()))); + Ссылка = Новый (Тип(ФрагментыИмениТипа[0] + "Ссылка." + ФрагментыИмениТипа[1]), МассивПараметров); + СписокОткрытыхОбъектов.Добавить(Ссылка, ФрагментыИмениТипа[0] + "." + ФрагментыИмениТипа[1] + " - " + Ссылка); + КонецЕсли; + КонецЦикла; + КонецЦикла; + Если СписокОткрытыхОбъектов.Количество() > 0 Тогда + СписокОткрытыхОбъектов.СортироватьПоПредставлению(); + ВыбранныйЭлемент = СписокОткрытыхОбъектов.ВыбратьЭлемент("Выберите объект для открытия в редакторе объекта БД"); + Если ВыбранныйЭлемент <> Неопределено Тогда + ОткрытьСсылкуВРедактореОбъектаБДЛкс(ВыбранныйЭлемент.Значение); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +Процедура ОповеститьОЗаписиОбъектаЛкс(Знач ТипИлиМассив, Знач Источник = Неопределено, Знач ВсеТипыДляПодсистемы = Ложь) Экспорт + + Если ТипЗнч(ТипИлиМассив) <> Тип("Массив") Тогда + ТипИлиМассив = ирОбщий.ЗначенияВМассивЛкс(ТипИлиМассив); + КонецЕсли; + ВсеТипыДляПодсистемыОповещены = Ложь; + Если ТипИлиМассив.Количество() > 1 Или ВсеТипыДляПодсистемы Тогда + ирКлиент.ОповеститьФормыПодсистемыЛкс("ЗаписанОбъект",, Источник); + ВсеТипыДляПодсистемыОповещены = Истина; + КонецЕсли; + Для Каждого ТипИлиОбъект Из ТипИлиМассив Цикл + Если Не ВсеТипыДляПодсистемыОповещены Тогда + ирКлиент.ОповеститьФормыПодсистемыЛкс("ЗаписанОбъект", ТипИлиОбъект, Источник); + КонецЕсли; + Если ТипЗнч(ТипИлиОбъект) = Тип("Тип") Или ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ТипИлиОбъект) Тогда + ОповеститьОбИзменении(ТипИлиОбъект); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Для оповещения об изменениях объектов в памяти клиентского приложения +Процедура ОповеститьОбИзмененииОбъектаВПамятиЛкс(Объект, Источник = Неопределено) Экспорт + + ирКлиент.ОповеститьФормыПодсистемыЛкс("ИзмененОбъектВПамяти", Объект, Источник); + +КонецПроцедуры + +Функция ЭтоНеудобнаяСсылкаДляОбработкиВыбораЛкс(Знач ВыбранноеЗначение) Экспорт + + // Почему то для ссылок внешних источников данных оповещение о выборе устанавливает строковое значение + XMLТип = XMLТипЗнч(ВыбранноеЗначение); + Если Истина + И XMLТип <> Неопределено + И (Ложь + Или Найти(XMLТип.ИмяТипа, "ExternalDataSourceTableRef.") > 0 + Или (Истина + И ВыбранноеЗначение <> Неопределено + И Метаданные.НайтиПоТипу(ТипЗнч(ВыбранноеЗначение)) <> Неопределено + И ирОбщий.РасширениеКонфигурацииОбъектаМДЛкс(ВыбранноеЗначение.Метаданные()) <> Неопределено)) + Тогда + ЭтоНеудобнаяСсылка = Истина; + Иначе + ЭтоНеудобнаяСсылка = Ложь; + КонецЕсли; + Возврат ЭтоНеудобнаяСсылка; + +КонецФункции + +Функция ОткрытьОбъектМетаданныхЛкс(ОбъектИлиПолноеИмяМД) Экспорт + + Если ТипЗнч(ОбъектИлиПолноеИмяМД) = Тип("ОбъектМетаданных") Тогда + ОбъектМД = ОбъектИлиПолноеИмяМД; + Иначе + ОбъектМД = ирОбщий.ПолучитьМетаданныеЛкс(ОбъектИлиПолноеИмяМД); + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ОбъектМД = Метаданные.НайтиПоТипу(); + #КонецЕсли + Если ОбъектМД = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + ПолноеИмяМД = ОбъектМД.ПолноеИмя(); + Фрагменты = ирОбщий.СтрРазделитьЛкс(ПолноеИмяМД); + Если Ложь + Или ирОбщий.ПеревестиСтроку("ОбщийРеквизит") = Фрагменты[0] + Или ирОбщий.ПеревестиСтроку("Подсистема") = Фрагменты[0] + Или (Истина + И Фрагменты.Количество() >= 4 + И Не ирОбщий.ЛиКорневойТипВнешнегоИсточникаДанныхЛкс(Фрагменты[0])) + Тогда + ирОбщий.ИсследоватьЛкс(ОбъектМД); + Возврат Неопределено; + // Для табличной части берем родителя + //ПолноеИмяМД = ОбъектМД.Родитель().ПолноеИмя(); + КонецЕсли; + Форма = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); + Форма.ПараметрИмяОбъектаМетаданных = ПолноеИмяМД; + Форма.ПрименитьПараметрыФормы(); + Возврат Форма; + +КонецФункции + +Процедура ОткрытьОбъектМДИзТаблицыСИменамиТиповЛкс(Знач СтрокаТаблицы) Экспорт + + Если Найти(СтрокаТаблицы.ИмяТипаЗначения, ".") > 0 Тогда + Тип = Тип(СтрокаТаблицы.ИмяТипаЗначения); + ОбъектМД = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМД <> Неопределено Тогда + ирКлиент.ОткрытьОбъектМетаданныхЛкс(ОбъектМД); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ОткрытьЗначенияФункциональныхОпцийЛкс(Знач ЗначенияОпций, Знач КлючУникальности) Экспорт + + Если ЗначенияОпций = Неопределено Или ЗначенияОпций.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаПросмотра = мПлатформа.ПолучитьФорму("ЗначенияФункциональныхОпций", , КлючУникальности); + ФормаПросмотра.НачальноеЗначениеВыбора = ЗначенияОпций; + ФормаПросмотра.Открыть(); + Возврат ФормаПросмотра; + +КонецФункции + +Функция ОткрытьПользователяИБЛкс(Пользователь) Экспорт + + ФормаПользователя = ирКлиент.ПолучитьФормуЛкс("Обработка.ирРедакторПользователей.Форма.ПользовательИнфобазы",,, Пользователь); + ФормаПользователя.ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); + ФормаПользователя.Открыть(); + Возврат ФормаПользователя; + +КонецФункции + +Функция ОбработкаОбъектИзФормыЛкс(ЭтаФорма) Экспорт + + Если ТипЗнч(ЭтаФорма) = Тип("Форма") Тогда + ОбработкаОбъект = ЭтаФорма; + Иначе + //ОбработкаОбъект = ЭтаФорма.РеквизитФормыВЗначение("фОбъект"); + Фрагменты = ирОбщий.СтрРазделитьЛкс(ЭтаФорма.ИмяФормы); + ОбработкаОбъект = ДанныеФормыВЗначение(ЭтаФорма.фОбъект, Тип("ОбработкаОбъект." + Фрагменты[1])); + КонецЕсли; + Возврат ОбработкаОбъект; + +КонецФункции + +Процедура ПроверитьЗакрытьФормуПриОтказеЛкс(ЭтаФорма, Знач Отказ) Экспорт + + // Антибаг платформы 8.3.11-12 Не работает установка параметра Отказ перед открытием обычной формы в управляемом приложении + // https://partners.v8.1c.ru/forum/t/1713475/m/1713475 + Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда + Если Отказ И Не ЭтаФорма.МодальныйРежим Тогда + ЭтаФорма.Закрыть(); + КонецЕсли; + КонецЕсли + +КонецПроцедуры + +Функция КлючиСтрокБДИзТаблицыФормыЛкс(Форма = Неопределено, выхКлючТекущейСтроки = Неопределено, выхТаблицаФормыДинамическогоСписка = Неопределено, Знач НуженВидимыйПорядок = Истина) Экспорт + + Результат = Новый Массив; + Если Форма = Неопределено Тогда + Форма = АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + Если Ложь + Или ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТаблицаФормы") + Или ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТабличноеПоле") + Тогда + ТаблицаФормы = Форма.ТекущийЭлемент; + Если ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(ТаблицаФормы.ТекущаяСтрока) Тогда + выхКлючТекущейСтроки = ТаблицаФормы.ТекущаяСтрока; + КонецЕсли; + Ссылка = ТаблицаФормы.ТекущаяСтрока; + ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТаблицаФормы, НуженВидимыйПорядок); + Если ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда + выхТаблицаФормыДинамическогоСписка = ТаблицаФормы; + Возврат ВыделенныеСтроки; + КонецЕсли; + Структура = Новый Структура("Ссылка, Data"); + ДанныеПоля = Неопределено; + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТаблицаФормы, ВыделеннаяСтрока, ДанныеПоля); + ЗаполнитьЗначенияСвойств(Структура, ДанныеСтроки); + Ссылка = Структура["Ссылка"]; + Если ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда + Результат.Добавить(Ссылка); + КонецЕсли; + Ссылка = Структура["Data"]; + Если ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда + Результат.Добавить(Ссылка); + Если ВыделеннаяСтрока = ТаблицаФормы.ТекущаяСтрока Тогда + выхКлючТекущейСтроки = Ссылка; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция КлючОсновногоОбъектаФормыЛкс(Форма = Неопределено) Экспорт + + Результат = Новый Массив; + Если Форма = Неопределено Тогда + Форма = АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда + Ссылка = СсылкаОсновногоОбъектаФормыЛкс(Форма); + Если Не ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда + Попытка + Ссылка = Форма.Параметры.Ключ; + Исключение + КонецПопытки; + КонецЕсли; + Если Не ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда + Ссылка = Неопределено; + КонецЕсли; + Иначе + Попытка + Ссылка = Форма.Ссылка; + Исключение + Попытка + Ссылка = Форма.ВыбОбъект; + Исключение + КонецПопытки; + КонецПопытки; + КонецЕсли; + Возврат Ссылка; + +КонецФункции + +Функция ЗначенияВыделенныхЯчеекТаблицыЛкс(Форма = Неопределено, выхКлючТекущейСтроки = Неопределено, НуженВидимыйПорядок = Истина, Знач ТолькоСсылки = Истина) Экспорт + + Результат = Новый Массив; + Если Форма = Неопределено Тогда + Форма = АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + Если ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТаблицаФормы") Тогда + ТаблицаФормы = Форма.ТекущийЭлемент; + ТекущееПоле = ТаблицаФормы.ТекущийЭлемент; + Если ТекущееПоле = Неопределено Тогда + Возврат Результат; + КонецЕсли; + ПолноеИмяПоля = ТекущееПоле.Имя; + ПутьКДанным = Null; + ДанныеПоля = Неопределено; + ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТаблицаФормы, НуженВидимыйПорядок); + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Продолжить; + КонецЕсли; + ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТаблицаФормы, ВыделеннаяСтрока, ДанныеПоля); + Если ПутьКДанным = Null Тогда + ПутьКДанным = ирОбщий.НайтиПутьКДаннымПоляТаблицыФормыЛкс(ДанныеСтроки, ПолноеИмяПоля); + КонецЕсли; + ЗначениеПоля = Неопределено; + Если ЗначениеЗаполнено(ПутьКДанным) Тогда + ЗначениеПоля = ДанныеСтроки[ирОбщий.ПервыйФрагментЛкс(ПутьКДанным)]; + КонецЕсли; + Если Не ТолькоСсылки Или ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(ЗначениеПоля) Тогда + Результат.Добавить(ЗначениеПоля); + Если ВыделеннаяСтрока = ТаблицаФормы.ТекущаяСтрока Тогда + выхКлючТекущейСтроки = ЗначениеПоля; + КонецЕсли; + КонецЕсли; + КонецЦикла; + Если Найти(ПутьКДанным, ".") > 0 И Результат.Количество() > 0 Тогда + Результат = ПрочитатьРеквизитПоМассивуСсылокЛкс(Результат, ирОбщий.ПоследнийФрагментЛкс(ПутьКДанным)); + КонецЕсли; + ИначеЕсли ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда + ТабличноеПоле = Форма.ТекущийЭлемент; + ПутьКДанным = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); + Если ЗначениеЗаполнено(ПутьКДанным) Тогда + ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, НуженВидимыйПорядок); + ДанныеПоля = Неопределено; + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, ВыделеннаяСтрока, ДанныеПоля); + ЗначениеПоля = Неопределено; + Если ЗначениеЗаполнено(ПутьКДанным) Тогда + Попытка + ЗначениеПоля = ДанныеСтроки[ирОбщий.ПоследнийФрагментЛкс(ПутьКДанным)]; + Исключение + // В отборе компоновки может возникать ошибка "Поле объекта не обнаружено (ПредставлениеДляКраткогоОтображенияЭлемента)" + ОписаниеОшибки = ОписаниеОшибки(); + КонецПопытки; + КонецЕсли; + Если Не ТолькоСсылки Или ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(ЗначениеПоля) Тогда + Результат.Добавить(ЗначениеПоля); + Если ВыделеннаяСтрока = ТабличноеПоле.ТекущаяСтрока Тогда + выхКлючТекущейСтроки = ЗначениеПоля; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + ИначеЕсли ТипЗнч(Форма.ТекущийЭлемент) = Тип("ПолеФормы") Тогда + ПолеФормы = Форма.ТекущийЭлемент; + Если ПолеФормы.Вид = ВидПоляФормы.ПолеВвода Тогда + ЗначениеПоля = ирОбщий.ДанныеЭлементаФормыЛкс(Форма.ТекущийЭлемент); + Если Не ТолькоСсылки Или ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(ЗначениеПоля) Тогда + Результат.Добавить(ЗначениеПоля); + выхКлючТекущейСтроки = ЗначениеПоля; + КонецЕсли; + ИначеЕсли ПолеФормы.Вид = ВидПоляФормы.ПолеТабличногоДокумента Тогда + ДанныеРасшифровки = ДанныеРасшифровкиУправляемойФормыОтчетаЛкс(Форма); + ТабличныйДокумент = ирОбщий.ДанныеЭлементаФормыЛкс(ПолеФормы); + #Если Сервер И Не Сервер Тогда + ТабличныйДокумент = Новый ТабличныйДокумент; + #КонецЕсли + Если ТабличныйДокумент = Неопределено Тогда + Возврат Результат; + КонецЕсли; + КлючТекущейСтроки = Неопределено; + ТаблицаЗначений = ирОбщий.ТаблицаКлючейИзТабличногоДокументаЛкс(ТабличныйДокумент, ДанныеРасшифровки,,, КлючТекущейСтроки); + Если ТаблицаЗначений.Колонки.Количество() > 0 Тогда + Для Каждого ЗначениеПоля Из ТаблицаЗначений.ВыгрузитьКолонку(0) Цикл + Если Не ТолькоСсылки Или ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(ЗначениеПоля) Тогда + Результат.Добавить(ЗначениеПоля); + КонецЕсли; + КонецЦикла; + Если Истина + И КлючТекущейСтроки <> Неопределено + И (Ложь + Или Не ТолькоСсылки + Или ирОбщий.ЛиКлючСсылкиИлиРегистраЛкс(КлючТекущейСтроки[0])) + Тогда + выхКлючТекущейСтроки = КлючТекущейСтроки[0]; + КонецЕсли; + КонецЕсли; + Если выхКлючТекущейСтроки = Неопределено И Результат.Количество() > 0 Тогда + выхКлючТекущейСтроки = Результат[0]; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ПрочитатьРеквизитПоМассивуСсылокЛкс(Знач Ссылки, Знач ИмяРеквизита) Экспорт + + #Если Сервер И Не Сервер Тогда + Ссылки = Новый Массив; + #КонецЕсли + Результат = Новый Массив; + Если Ссылки.Количество() > 0 Тогда + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ Т." + ИмяРеквизита + " ИЗ " + Ссылки[0].Метаданные().ПолноеИмя() + " КАК Т ГДЕ Т.Ссылка В (&Ссылки)"; + Запрос.УстановитьПараметр("Ссылки", Ссылки); + Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ЭтоУправляемаяФормаОтчетаЛкс(Знач АктивнаяФорма, РазрешитьВнешнийОтчет = Ложь) Экспорт + + Возврат Истина + И ТипЗнч(АктивнаяФорма) <> Тип("Форма") + И (Ложь + Или Найти(АктивнаяФорма.ИмяФормы, ирОбщий.ПеревестиСтроку("Отчет") + ".") = 1 + Или РазрешитьВнешнийОтчет И Найти(АктивнаяФорма.ИмяФормы, ирОбщий.ПеревестиСтроку("ВнешнийОтчет") + ".") = 1); + +КонецФункции + +Функция ТекущийЭлементАктивнойФормыЛкс(АктивнаяФорма = Неопределено) Экспорт + + Если АктивнаяФорма = Неопределено Тогда + АктивнаяФорма = АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + ТекущийЭлемент = АктивнаяФорма.ТекущийЭлемент; + Если ТипЗнч(АктивнаяФорма) = Тип("УправляемаяФорма") Тогда + Если ТипЗнч(ТекущийЭлемент) = Тип("ОсновнойЭлементФормы") Тогда + // http://www.hostedredmine.com/issues/880476 + ТекущийЭлемент = Неопределено; + КонецЕсли; + КонецЕсли; + Возврат ТекущийЭлемент; + +КонецФункции + +Процедура ЗапомнитьСодержимоеЭлементаАктивнойФормыДляСравненияЛкс(Форма = Неопределено) Экспорт + + ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); + Если Истина + И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") + И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") + И ТипЗнч(ТекущийЭлемент) <> Тип("ПолеТабличногоДокумента") + И Не (Истина + И ТипЗнч(ТекущийЭлемент) = Тип("ПолеФормы") + И ТекущийЭлемент.Вид = ВидПоляФормы.ПолеТабличногоДокумента) + Тогда + Возврат; + КонецЕсли; + ирКлиент.ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(Форма, ТекущийЭлемент); + +КонецПроцедуры + +Процедура ОткрытьТаблицуЗначенийИзАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт + + ТекущаяСтрокаТаблицы = Неопределено; + ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); + Если Ложь + Или ТипЗнч(ТекущийЭлемент) = Тип("ТаблицаФормы") + Тогда + Результат = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТекущийЭлемент,, Истина, Ложь,,, Форма, ТекущаяСтрокаТаблицы); + ИначеЕсли ТипЗнч(ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда + // Используем стандартный диалог, чтобы не терялась возможность оставить только видимые колонки + ИначеЕсли Ложь + Или ТипЗнч(ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") + Или (Истина + И ТипЗнч(ТекущийЭлемент) = Тип("ПолеФормы") + И ТекущийЭлемент.Вид = ВидПоляФормы.ПолеТабличногоДокумента) + Тогда + ДанныеРасшифровки = ДанныеРасшифровкиУправляемойФормыОтчетаЛкс(Форма); + ТабличныйДокумент = ирОбщий.ДанныеЭлементаФормыЛкс(ТекущийЭлемент); + Если ТабличныйДокумент = Неопределено Тогда + Возврат; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ТабличныйДокумент = Новый ТабличныйДокумент; + #КонецЕсли + ОбластьДляАнализа = Неопределено; + ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть; + Если ТекущаяОбласть.Верх = ТекущаяОбласть.Низ Тогда + Ответ = Вопрос("Выделена только одна строка. Хотите обработать все строки?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Да Тогда + ПерваяСтрокаОбласти = ТекущаяОбласть.Верх; + ШиринаКолонкиТекущейОбласти = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, ТекущаяОбласть.Лево).ШиринаКолонки; + Для НомерСтроки = -ТекущаяОбласть.Верх + 1 По 0 Цикл + ШиринаКолонкиПроверяемойОбласти = ТабличныйДокумент.Область(-НомерСтроки, ТекущаяОбласть.Лево, -НомерСтроки, ТекущаяОбласть.Лево).ШиринаКолонки; + Если ШиринаКолонкиТекущейОбласти = 0 Тогда + ШиринаКолонкиТекущейОбласти = ШиринаКолонкиПроверяемойОбласти; + КонецЕсли; + Если ШиринаКолонкиТекущейОбласти <> ШиринаКолонкиПроверяемойОбласти Тогда + ПерваяСтрокаОбласти = -НомерСтроки + 1; + Прервать; + КонецЕсли; + КонецЦикла; + ОбластьДляАнализа = ТабличныйДокумент.Область(ПерваяСтрокаОбласти, ТекущаяОбласть.Лево, ТабличныйДокумент.ВысотаТаблицы, ТекущаяОбласть.Право); + КонецЕсли; + КонецЕсли; + Результат = ирОбщий.ТаблицаКлючейИзТабличногоДокументаЛкс(ТабличныйДокумент, ДанныеРасшифровки,, ОбластьДляАнализа, ТекущаяСтрокаТаблицы); + #Если Сервер И Не Сервер Тогда + Результат = Новый ТаблицаЗначений; + #КонецЕсли + Если Результат.Колонки.Количество() = 0 Тогда + Ответ = Вопрос("Ячейки не содержат расшифровки. Хотите назначить имена колонкам из первой строки выделенной области?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет); + ЛиПерваяСтрокаСодержитИменаКолонок = Ответ = КодВозвратаДиалога.Да; + Результат = ирОбщий.ТаблицаЗначенийИзТабличногоДокументаЛкс(ТабличныйДокумент, ЛиПерваяСтрокаСодержитИменаКолонок,,,, ?(ОбластьДляАнализа = Неопределено, Истина, ОбластьДляАнализа), ТекущаяСтрокаТаблицы); + КонецЕсли; + #Если Сервер И Не Сервер Тогда + Результат = Новый ТаблицаЗначений; + #КонецЕсли + Если ТекущаяСтрокаТаблицы <> Неопределено Тогда + ИндексТекущейСтроки = Результат.Индекс(ТекущаяСтрокаТаблицы); + КонецЕсли; + Результат = ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(Результат); + Если ТекущаяСтрокаТаблицы <> Неопределено Тогда + ТекущаяСтрокаТаблицы = Результат[ИндексТекущейСтроки]; + КонецЕсли; + ТекущийЭлемент = Неопределено; + Иначе + Возврат; + КонецЕсли; + Если Результат <> Неопределено Тогда + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаТаблицыЗначений = мПлатформа.ПолучитьФорму("ТаблицаЗначений", , Результат); + ФормаТаблицыЗначений.ПараметрТабличноеПоле = ТекущийЭлемент; + ФормаТаблицыЗначений.НачальноеЗначениеВыбора = Результат; + ФормаТаблицыЗначений.Открыть(); + Если ТекущаяСтрокаТаблицы <> Неопределено Тогда + ФормаТаблицыЗначений.УстановитьТекущуюСтроку(ТекущаяСтрокаТаблицы, Результат); + КонецЕсли; + Иначе // ДинамическийСписок + ирКлиент.ВывестиСтрокиТабличногоПоляИПоказатьЛкс(Форма, ТекущийЭлемент); + КонецЕсли; + +КонецПроцедуры + +Функция ОткрытьТабличныйДокументИзАктивнойФормыЛкс(Форма = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + Форма = ОткрытьФорму(); + #КонецЕсли + ДокументИзменен = Ложь; + ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); + Если Ложь + Или ТипЗнч(ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") + Или (Истина + И ТипЗнч(ТекущийЭлемент) = Тип("ПолеФормы") + И ТекущийЭлемент.Вид = ВидПоляФормы.ПолеТабличногоДокумента) + Тогда + Результат = ирОбщий.ДанныеЭлементаФормыЛкс(ТекущийЭлемент); + ДанныеРасшифровки = ДанныеРасшифровкиУправляемойФормыОтчетаЛкс(Форма); + КонецЕсли; + Если Результат <> Неопределено Тогда + Если ТипЗнч(ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") Тогда + ДоступноИзменение = Истина + И Не ТекущийЭлемент.ТолькоПросмотр + И ТекущийЭлемент.ПолучитьДействие("ПриИзмененииСодержимогоОбласти") = Неопределено; + ирКлиент.ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(Форма, ТекущийЭлемент); + Иначе + ПутьКДанным = ирОбщий.ПутьКДаннымЭлементаУправляемойФормыЛкс(ТекущийЭлемент,, Форма); + ДоступноИзменение = Истина + И ТекущийЭлемент.Редактирование + И Не ТекущийЭлемент.Защита + И ЛиДоступноРедактированиеЭлементаУправляемойФормыЛкс(ТекущийЭлемент) + И ЗначениеЗаполнено(ПутьКДанным) + //И ТекущийЭлемент.ПолучитьДействие("ПриИзмененииСодержимогоОбласти") = Неопределено // но на клиенте его получить нельзя + ; + КонецЕсли; + НовоеЗначение = ОткрытьТабличныйДокументРезультатаКомпоновкиЛкс(Результат, ДанныеРасшифровки,, ДоступноИзменение); + Если НовоеЗначение <> Неопределено Тогда + #Если Сервер И Не Сервер Тогда + ТекущийЭлемент = Новый ТабличныйДокумент; + НовоеЗначение = Новый ТабличныйДокумент; + #КонецЕсли + Если ТипЗнч(ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") Тогда + // Так только текущий язык останется + ТекущийЭлемент.ВставитьОбласть(НовоеЗначение.Область(),,, Ложь); + Если ТекущийЭлемент.ИзменяетДанные Тогда + Форма.Модифицированность = Истина; + КонецЕсли; + Иначе + Выполнить("Форма." + ПутьКДанным + " = НовоеЗначение"); + КонецЕсли; + ДокументИзменен = Истина; + Иначе + ТекущийЭлемент.ТекущаяОбласть = ТекущийЭлемент.ТекущаяОбласть; + КонецЕсли; + КонецЕсли; + Возврат ДокументИзменен; + +КонецФункции + +Функция ЛиДоступноРедактированиеЭлементаУправляемойФормыЛкс(Знач ТекущийЭлемент) Экспорт + + Возврат ирОбщий.РодительЭлементаУправляемойФормыЛкс(ТекущийЭлемент, "все", "ТолькоПросмотр", Истина) <> "Неопределено"; + +КонецФункции + +Функция ОткрытьТабличныйДокументРезультатаКомпоновкиЛкс(Знач ПолеТабличногоДокумента, Знач ДанныеРасшифровки = Неопределено, Знач ИмяСохраненияПоложенияОкна = "", Знач Модально = Ложь) Экспорт + + //ТабличныйДокумент = Новый ТабличныйДокумент; + //ТабличныйДокумент.Вывести(ПолеТабличногоДокумента); + ТабличныйДокумент = ПолучитьОбластьТабличногоДокументаИнтерактивноЛкс(ПолеТабличногоДокумента); + #Если Сервер И Не Сервер Тогда + ТабличныйДокумент = Новый ТабличныйДокумент; + #КонецЕсли + ТабличныйДокумент.ИмяСохраненияПоложенияОкна = ИмяСохраненияПоложенияОкна; + Если ДанныеРасшифровки <> Неопределено Тогда + ирОбщий.УпроститьРасшифровкиТабличногоДокументаКомпоновкиЛкс(ТабличныйДокумент, ДанныеРасшифровки); + КонецЕсли; + Результат = Неопределено; + Если ОткрытьЗначениеЛкс(ТабличныйДокумент,,,, Модально,, ПолеТабличногоДокумента) Тогда + Результат = ТабличныйДокумент; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция ДанныеРасшифровкиУправляемойФормыОтчетаЛкс(Знач Форма) Экспорт + + ВозможныеИменаРеквизитов = Новый Массив; + ВозможныеИменаРеквизитов.Добавить("ДанныеРасшифровки"); + ВозможныеИменаРеквизитов.Добавить("ОтчетДанныеРасшифровки"); + Для Каждого ИмяРеквизита Из ВозможныеИменаРеквизитов Цикл + Попытка + ДанныеРасшифровки = Форма[ИмяРеквизита]; + Прервать; + Исключение + ДанныеРасшифровки = Неопределено; + КонецПопытки; + КонецЦикла; + Если Истина + И ТипЗнч(ДанныеРасшифровки) = Тип("Строка") + И ЗначениеЗаполнено(ДанныеРасшифровки) + Тогда + ДанныеРасшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); + КонецЕсли; + Возврат ДанныеРасшифровки; + +КонецФункции + +Процедура ОткрытьРазличныеЗначенияКолонкиАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт + + ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); + Если Истина + И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") + И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") + Тогда + Возврат; + КонецЕсли; + ирКлиент.ОткрытьРазличныеЗначенияКолонкиЛкс(ТекущийЭлемент,,, Форма); + +КонецПроцедуры + +Процедура ОтладитьКомпоновкуДанныхАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт + + Если Форма = Неопределено Тогда + Форма = АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда + Попытка + НастройкиОтчета = Форма.НастройкиОтчета; + Исключение + НастройкиОтчета = Неопределено; + КонецПопытки; + Если НастройкиОтчета <> Неопределено И НастройкиОтчета.СхемаМодифицирована Тогда + // Стандартная форма отчета БСП + СхемаКомпоновки = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы); + Иначе + Фрагменты = ирОбщий.СтрРазделитьЛкс(Форма.ИмяФормы); + Если Фрагменты[0] = ирОбщий.ПеревестиСтроку("Отчет") Тогда + ОтчетОбъект = Отчеты[Фрагменты[1]].Создать(); + #Если Сервер И Не Сервер Тогда + ОтчетОбъект = Обработки.ирКонсольКомпоновокДанных.Создать(); + #КонецЕсли + СхемаКомпоновки = ОтчетОбъект.СхемаКомпоновкиДанных; + //ИначеЕсли Фрагменты[0] = ирОбщий.ПеревестиСтроку("ВнешнийОтчет") Тогда + // // https://forum.mista.ru/topic.php?id=857116 + // ОтчетОбъект = ВнешниеОтчеты.Создать(Фрагменты[1]); + // #Если Сервер И Не Сервер Тогда + // ОтчетОбъект = ВнешниеОтчеты.Создать(); + // #КонецЕсли + // СхемаКомпоновки = ОтчетОбъект.СхемаКомпоновкиДанных; + Иначе + ирОбщий.СообщитьЛкс(ирОбщий.СтрШаблонИменЛкс("Не поддерживаемый тип метаданных отчета - %1",, Фрагменты[0])); + Возврат; + КонецЕсли; + КонецЕсли; + КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек; + Иначе + Попытка + ОбщийМодульТиповыеОтчеты = Вычислить("ТиповыеОтчеты"); + Исключение + КонецПопытки; + Если Истина + И ОбщийМодульТиповыеОтчеты <> Неопределено + И ирОбщий.МетодРеализованЛкс(ОбщийМодульТиповыеОтчеты, "ЗагрузитьВРеквизитЗначенияНастроекПанелиПользователя") + Тогда + ОбщийМодульТиповыеОтчеты.ЗагрузитьВРеквизитЗначенияНастроекПанелиПользователя(Форма.ЭтотОбъект, Форма); + ОбщийМодульТиповыеОтчеты.ПолучитьПримененуюНастройку(Форма.ЭтотОбъект); + КонецЕсли; + СхемаКомпоновки = Форма.СхемаКомпоновкиДанных; + КомпоновщикНастроек = Форма.КомпоновщикНастроек; + КонецЕсли; + ирОбщий.ОтладитьЛкс(СхемаКомпоновки,, КомпоновщикНастроек.ПолучитьНастройки()); + +КонецПроцедуры + +Процедура РедактироватьАктивныйСписокЗначенийУправляемыйЛкс(Форма = Неопределено) Экспорт + + Если Форма = Неопределено Тогда + Форма = АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + Если ТипЗнч(Форма) <> Тип("УправляемаяФорма") Тогда + Возврат; + КонецЕсли; + ПутьКДанным = ""; + ирОбщий.ДанныеЭлементаФормыЛкс(Форма.ТекущийЭлемент, ПутьКДанным); + Если Не ЗначениеЗаполнено(ПутьКДанным) Тогда + Возврат; + КонецЕсли; + СписокЗначений = Форма[ПутьКДанным]; + #Если Сервер И Не Сервер Тогда + СписокЗначений = Новый СписокЗначений; + #КонецЕсли + ПолеЗначения = Форма.Элементы.Найти("Value"); + Если ПолеЗначения = Неопределено Тогда + ПолеЗначения = Форма.ТекущийЭлемент.ТекущийЭлемент; + КонецЕсли; + Если ПолеЗначения <> Неопределено Тогда + СтруктураОтбора = ирКлиент.СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(ПолеЗначения); + Если СписокЗначений.ДоступныеЗначения = Неопределено И ПолеЗначения.РежимВыбораИзСписка Тогда + СписокЗначений = ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(СписокЗначений); + СписокЗначений.ДоступныеЗначения = ПолеЗначения.СписокВыбора; + КонецЕсли; + КонецЕсли; + Если ОткрытьСписокЗначенийЛкс(СписокЗначений, СтруктураОтбора) Тогда + Форма[ПутьКДанным] = СписокЗначений; + КонецЕсли; + +КонецПроцедуры + +Процедура НастроитьДинамическийСписокАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт + + ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); + Если ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") Тогда + Возврат; + КонецЕсли; + ДанныеЭлемента = ирОбщий.ДанныеЭлементаФормыЛкс(ТекущийЭлемент); + Если ТипЗнч(ДанныеЭлемента) <> Тип("ДинамическийСписок") Тогда + Возврат; + КонецЕсли; + Параметры = Новый Структура("Настройки, ПользовательскиеНастройки, ФиксированныеНастройки, ИсточникДоступныхНастроек"); + СхемаИНастройки = ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(Форма); + Если СхемаИНастройки <> Неопределено Тогда + Параметры.Вставить("ИсполняемаяСхема", ПоместитьВоВременноеХранилище(СхемаИНастройки.Схема, Форма.УникальныйИдентификатор)); + Параметры.Вставить("ИсполняемыеНастройки", СхемаИНастройки.Настройки); + КонецЕсли; + ЗаполнитьЗначенияСвойств(Параметры, ДанныеЭлемента.КомпоновщикНастроек); + Параметры.ИсточникДоступныхНастроек = ДанныеЭлемента.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек(); + Если ирКэш.НомерВерсииПлатформыЛкс() > 803001 Тогда + Выполнить("ОткрытьФорму(""Обработка.ирДинамическийСписок.Форма.НастройкиСпискаУпр"", Параметры, ТекущийЭлемент,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца)"); + Иначе + ОткрытьФормуМодально("Обработка.ирДинамическийСписок.Форма.НастройкиСпискаУпр", Параметры, ТекущийЭлемент); + КонецЕсли; + +КонецПроцедуры + +Функция ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(Знач Форма, Знач ИмяТаблицыФормы = "") Экспорт + + Если Форма.ИмяФормы = "Обработка.ирДинамическийСписок.Форма.ФормаУпр" Тогда + СхемаИНастройки = Форма.ИсполняемыеСхемаИНастройки(); + Иначе + #Если Сервер И Не Сервер Тогда + ирОбщий.УправляемаяФормаБСП_ИсполняемыеСхемаИНастройкиТаблицыЛкс(); + #КонецЕсли + СхемаИНастройки = ирОбщий.УправляемаяФормаБСП_ВыполнитьНаСервереЛкс(Форма, "ирОбщий.УправляемаяФормаБСП_ИсполняемыеСхемаИНастройкиТаблицыЛкс", ИмяТаблицыФормы); + КонецЕсли; + Возврат СхемаИНастройки; + +КонецФункции + +Процедура ОткрытьДинамическийСписокАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт + + ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); + ДанныеЭлемента = ирОбщий.ДанныеЭлементаФормыЛкс(ТекущийЭлемент); + Если ТипЗнч(ДанныеЭлемента) <> Тип("ДинамическийСписок") Тогда + Возврат; + КонецЕсли; + ПолноеИмяТаблицыБД = ""; + ОбщийТипДанныхТаблицы = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТекущийЭлемент,,, ПолноеИмяТаблицыБД); + Если ПолноеИмяТаблицыБД = Неопределено Тогда + Возврат; + КонецЕсли; + КомпоновщикНастроек = ДанныеЭлемента.КомпоновщикНастроек; + #Если Сервер И Не Сервер Тогда + КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; + #КонецЕсли + НастройкиСписка = КомпоновщикНастроек.ПолучитьНастройки(); + ТекущаяКолонка = ирОбщий.ДанныеЭлементаФормыЛкс(ТекущийЭлемент.ТекущийЭлемент); + Форма = ПолучитьФормуСпискаЛкс(ПолноеИмяТаблицыБД,, Истина,,,, ТекущийЭлемент.ТекущаяСтрока, НастройкиСписка.Отбор, ПолноеИмяТаблицыБД, ТекущаяКолонка); + Форма.Открыть(); + +КонецПроцедуры + +Процедура ОтборБезЗначенияВТекущейКолонкеАктивнойФормыЛкс(Параметры) Экспорт + + ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Параметры.Форма); + Если Истина + И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") + И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") + Тогда + Возврат; + КонецЕсли; + ОбщийТипДанныхТаблицы = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТекущийЭлемент); + Если Истина + И ОбщийТипДанныхТаблицы <> "Список" + И ОбщийТипДанныхТаблицы <> "ТабличнаяЧасть" + И ОбщийТипДанныхТаблицы <> "НаборЗаписей" + Тогда + Возврат; + КонецЕсли; + ТабличноеПолеОтборДляЗначенияВТекущейКолонкеЛкс(ТекущийЭлемент); + +КонецПроцедуры + +Процедура НайтиВыбратьСсылкуВДинамическомСпискеЛкс(Форма = Неопределено) Экспорт + + ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); + Если Истина + И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") + И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") + Тогда + Возврат; + КонецЕсли; + ИмяТаблицыБД = ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТекущийЭлемент); + Если Не ЗначениеЗаполнено(ИмяТаблицыБД) Тогда + Возврат; + КонецЕсли; + НайтиВыбратьСсылкуВДинамическомСпискеПоIDЛкс(ТекущийЭлемент); + +КонецПроцедуры + +Процедура НайтиВыбратьСсылкуВДинамическомСпискеПоIDЛкс(Знач ТабличноеПоле, Форма = Неопределено) Экспорт + + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ФормаВводаИдентификатора = мПлатформа.ПолучитьФорму("УникальныйИдентификатор"); + НовыйИдентификатор = ФормаВводаИдентификатора.ОткрытьМодально(); + Если НовыйИдентификатор = Неопределено Тогда + Возврат; + КонецЕсли; + Ссылка = ирОбщий.ПолучитьМенеджерЛкс(ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле)).ПолучитьСсылку(НовыйИдентификатор); + ДинамическийСписокУстановитьТекущуюСтрокуСКонтролемЛкс(ТабличноеПоле, Ссылка, Форма); + +КонецПроцедуры + +Процедура ДинамическийСписокУстановитьТекущуюСтрокуСКонтролемЛкс(ТабличноеПоле, Ссылка, Форма = Неопределено) Экспорт + + ТабличноеПоле.ТекущаяСтрока = Ссылка; + Если ТабличноеПоле.ТекущаяСтрока = Ссылка Тогда + ирОбщий.СообщитьЛкс("Объект найден и установлен текущей строкой"); + Иначе + Если Форма = Неопределено Тогда + Форма = ирОбщий.РодительЭлементаУправляемойФормыЛкс(ТабличноеПоле); + КонецЕсли; + Если Не ирОбщий.ЛиСуществуетОбъектПоСсылкеЛкс(Ссылка) Тогда + Если ТабличноеПоле.РежимВыбора Тогда + Ответ = Вопрос("Объект не найден в таблице. Выбрать ссылку?", РежимДиалогаВопрос.ОКОтмена); + Если Ответ = КодВозвратаДиалога.ОК Тогда + Форма.ОповеститьОВыборе(Ссылка); + КонецЕсли; + Иначе + ирОбщий.СообщитьЛкс("Объект не найден в таблице"); + КонецЕсли; + Иначе + Если ТабличноеПоле.РежимВыбора Тогда + Ответ = Вопрос("Объект найден в таблице, но не отвечает текущему отбору. Выбрать ссылку?", РежимДиалогаВопрос.ОКОтмена); + Если Ответ = КодВозвратаДиалога.ОК Тогда + Форма.ОповеститьОВыборе(Ссылка); + КонецЕсли; + Иначе + ирОбщий.СообщитьЛкс("Объект найден в таблице, но не отвечает текущему отбору"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ЗапросДинамическогоСпискаЛкс(Знач ТабличноеПоле, Знач ПолноеИмяТаблицыБД = "", Знач УчитываяОтбор = Истина, Знач АнализируемоеПоле = "", Компоновщик = Неопределено) Экспорт + + ДанныеТабличногоПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); + Если Не ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда + ПолноеИмяТаблицыБД = ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле); + КонецЕсли; + ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ПолноеИмяТаблицыБД); + #Если Сервер И Не Сервер Тогда + ПоляТаблицыБД = НайтиПоСсылкам().Колонки; + #КонецЕсли + ЕстьПрисоединенныеПоля = ЗначениеЗаполнено(АнализируемоеПоле) И ПоляТаблицыБД.Найти(АнализируемоеПоле, "Имя") = Неопределено; + Если Не ЕстьПрисоединенныеПоля И УчитываяОтбор Тогда + ПоляОтбора = Новый Соответствие; + НастройкиСписка = ирОбщий.НастройкиДинамическогоСпискаЛкс(ДанныеТабличногоПоля); + ирОбщий.НайтиЭлементОтбораЛкс(НастройкиСписка.Отбор,, ПоляОтбора,, Истина,, Истина); + Для Каждого КлючИЗначение Из ПоляОтбора Цикл + Если ПоляТаблицыБД.Найти(КлючИЗначение.Ключ, "Имя") = Неопределено Тогда + ЕстьПрисоединенныеПоля = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Запрос = Неопределено; + Если Не ЕстьПрисоединенныеПоля Тогда + Запрос = Новый Запрос; + Иначе + СхемаИНастройки = ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(ирОбщий.РодительЭлементаУправляемойФормыЛкс(ТабличноеПоле)); + #Если Сервер И Не Сервер Тогда + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + #КонецЕсли + Если СхемаИНастройки <> Неопределено Тогда + СхемаКомпоновки = СхемаИНастройки.Схема; + НастройкаКомпоновки = СхемаИНастройки.Настройки; + Если Компоновщик <> Неопределено Тогда + Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); + КонецЕсли; + Иначе + СхемаКомпоновки = ирОбщий.СоздатьСхемуКомпоновкиПоОбъектуМДЛкс(ПолноеИмяТаблицыБД,, Ложь); + Если НастройкиСписка <> Неопределено Тогда + НастройкаКомпоновки = НастройкиСписка; + Иначе + НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; + КонецЕсли; + Если Компоновщик = Неопределено Тогда + Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; + КонецЕсли; + Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); + Компоновщик.ЗагрузитьНастройки(НастройкаКомпоновки); + Компоновщик.Восстановить(); + НастройкаКомпоновки = Компоновщик.Настройки; + КонецЕсли; + #Если Сервер И Не Сервер Тогда + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + #КонецЕсли + Если Не УчитываяОтбор Тогда + НастройкаКомпоновки.Отбор.Элементы.Очистить(); + ИначеЕсли ЗначениеЗаполнено(АнализируемоеПоле) Тогда + ЭлементОтбораКолонки = ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки.Отбор, АнализируемоеПоле); + Если ЭлементОтбораКолонки <> Неопределено Тогда + ЭлементОтбораКолонки.Использование = Ложь; + КонецЕсли; + КонецЕсли; + Запрос = ирОбщий.ЗапросИзКомпоновкиЛкс(СхемаКомпоновки, НастройкаКомпоновки); + КонецЕсли; + Возврат Запрос; + +КонецФункции + +Процедура ДобавитьКолонкиГруппыФормыВТаблицуЗначенийЛкс(Знач КолонкиИсточника, Знач Результат, Знач СтрокаИлиКоллекция, Знач ИменаКолонокРезультата = "") + + Если ТипЗнч(ИменаКолонокРезультата) = Тип("Строка") И ЗначениеЗаполнено(ИменаКолонокРезультата) Тогда + ИменаКолонокРезультата = ирОбщий.СтрРазделитьЛкс(ИменаКолонокРезультата, ",", Истина); + ИначеЕсли ТипЗнч(ИменаКолонокРезультата) = Тип("Массив") Тогда + Иначе + ИменаКолонокРезультата = Неопределено; + КонецЕсли; + Для Каждого ПолеТаблицыФормы Из КолонкиИсточника Цикл + Если ТипЗнч(ПолеТаблицыФормы) = Тип("ГруппаФормы") Тогда + ДобавитьКолонкиГруппыФормыВТаблицуЗначенийЛкс(ПолеТаблицыФормы.ПодчиненныеЭлементы, Результат, СтрокаИлиКоллекция, ИменаКолонокРезультата); + Продолжить; + КонецЕсли; + ПолноеИмяПоля = ПолеТаблицыФормы.Имя; + ПутьКДанным = ирОбщий.НайтиПутьКДаннымПоляТаблицыФормыЛкс(СтрокаИлиКоллекция, ПолноеИмяПоля); + Если Истина + И ЗначениеЗаполнено(ПутьКДанным) + И (Ложь + Или ИменаКолонокРезультата = Неопределено + Или ИменаКолонокРезультата.Найти(ПутьКДанным) <> Неопределено) + Тогда + Результат.Колонки.Добавить(СтрЗаменить(ПутьКДанным, ".", "_"),, ПутьКДанным); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ОткрытьСтатистикаMSSQLПоПоследнимЗапросамЛкс(ДатаНачала, ДатаКонца) Экспорт + + ОтчетОбъект = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Отчет.ирСтатистикаПоЗапросамСУБД"); + #Если Сервер И Не Сервер Тогда + ОтчетОбъект = Отчеты.ирСтатистикаПоЗапросамСУБД.Создать(); + #КонецЕсли + КлючВарианта = "Последние"; + ФормаОтчета = ОтчетОбъект.ПолучитьФорму(,, КлючВарианта); + ФормаОтчета.ПараметрКлючВарианта = КлючВарианта; + ФормаОтчета.Открыть(); + НастройкиОтчета = ФормаОтчета.КомпоновщикНастроек.Настройки; + #Если Сервер И Не Сервер Тогда + НастройкиОтчета = Компоновщик.Настройки; + #КонецЕсли + НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПопавшиеВПоследниеМинут")).Использование = Ложь; + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоИнтервала", ДатаНачала); + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("КонецИнтервала", ДатаКонца); + ФормаОтчета.ДействияФормыСформировать(); + +КонецФункции + +Процедура ЗаполнитьИзмененыеПоляВСтрокеВерсииДанныхЛкс(Знач ДанныеСтроки, Знач КлючОбъекта = Неопределено, Знач ПолноеИмяМД = "") Экспорт + + #Если Сервер И Не Сервер Тогда + ДанныеСтроки = Обработки.ирИсторияДанных.Создать().Версии.Добавить(); + #КонецЕсли + Если ДанныеСтроки.ИзмененныеПоля = "?" Тогда + Если ДанныеСтроки.НомерВерсии > 1 Тогда + ИсторияДанныхМоя = Вычислить("ИсторияДанных"); + #Если Сервер И Не Сервер Тогда + ИсторияДанныхМоя = ИсторияДанных; + #КонецЕсли + Если КлючОбъекта = Неопределено Тогда + КлючОбъекта = КлючОбъектаСтрокиВерсииДанныхЛкс(ДанныеСтроки, ПолноеИмяМД); + КонецЕсли; + Попытка + СтруктураРазличий = ИсторияДанныхМоя.ПолучитьРазличияВерсий(КлючОбъекта, ДанныеСтроки.НомерВерсии); + Исключение + // Может быть ошибка "Данные истории не найдены" + Пустышка = 0; + КонецПопытки; + Если СтруктураРазличий <> Неопределено Тогда + ИзмененныеПоля = Новый СписокЗначений; + Для Каждого КлючИЗначение Из СтруктураРазличий Цикл + ИзмененныеПоля.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + ИзмененныеПоля.СортироватьПоЗначению(); + ДанныеСтроки.ИзмененныеПоля = ирОбщий.СтрСоединитьЛкс(ИзмененныеПоля); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция КлючОбъектаСтрокиВерсииДанныхЛкс(Знач ДанныеСтроки, Знач ПолноеИмяМД) Экспорт + + КлючОбъекта = ДанныеСтроки.Данные; + КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяМД); + Если НадоСериализоватьКлючДанныхДляОтображенияЛкс(КорневойТип) Тогда + Попытка + КлючОбъекта = ирОбщий.ЗначениеИзСтрокиВнутрЛкс(КлючОбъекта); + Исключение + // Некоторые большие ключи регистров в сериализованном виде не умещаются в 1024 символа + КлючОбъекта = "<Ключ записи регистра обрезан и не может быть восстановлен>"; + КонецПопытки; + ИначеЕсли ирОбщий.ЛиКорневойТипКонстантыЛкс(КорневойТип) Тогда + КлючОбъекта = ирОбщий.КлючОбъектаКонстантыЛкс(ирОбщий.ПоследнийФрагментЛкс(ПолноеИмяМД)); + КонецЕсли; + Возврат КлючОбъекта; + +КонецФункции + +Процедура Форма_ОткрытьБезЗахватаФокусаЛкс(Форма) Экспорт + + АктивнаяФорма = АктивнаяФормаЛкс(); + Форма.Открыть(); + Если АктивнаяФорма <> Неопределено Тогда + Форма_АктивироватьОткрытьЛкс(АктивнаяФорма); + КонецЕсли; + +КонецПроцедуры + +Функция ДобавитьОтборВИсториюТабличногоПоляЛкс(Знач ЭтаФорма, Знач ТабличноеПолеИлиКлюч, Знач Отбор, СтарыйОтбор, Знач ИгнорироватьЭлементы = "") Экспорт + + #Если Сервер И Не Сервер Тогда + Пустышка = Новый ПостроительЗапроса; + Отбор = Пустышка.Отбор; + СтарыйОтбор = Пустышка.Отбор; + #КонецЕсли + ДобавленВСписок = Ложь; + Если Строка(Отбор) <> Строка(СтарыйОтбор) Тогда + Если "" + Отбор <> "" Тогда + Если Истина + И ТипЗнч(ТабличноеПолеИлиКлюч) = Тип("Строка") + И ТипЗнч(СтарыйОтбор) = Тип("Отбор") + Тогда + Для Каждого ЭлементОтбора Из Отбор Цикл + СтарыйЭлементОтбора = ирОбщий.НайтиЭлементОтбораЛкс(СтарыйОтбор, ЭлементОтбора.Имя); + Если Истина + И ЭлементОтбора.Использование + И (Ложь // Защита от попадания в историю промежуточных строк горячего фильтра по подстроке + Или Форма_ВводДоступенЛкс(ЭтаФорма) + Или (Истина + И ЭлементОтбора.ВидСравнения <> ВидСравнения.НеСодержит + И ЭлементОтбора.ВидСравнения <> ВидСравнения.Содержит)) + И (Ложь + Или СтарыйЭлементОтбора = Неопределено + Или СтарыйЭлементОтбора.Значение <> ЭлементОтбора.Значение) + Тогда + ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(ЭлементОтбора, ТабличноеПолеИлиКлюч); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ТипЗнч(ТабличноеПолеИлиКлюч) = Тип("Строка") Тогда + Компоновщик = ирКэш.КомпоновщикТаблицыМетаданныхЛкс(ТабличноеПолеИлиКлюч); + Иначе + #Если Клиент Тогда + Схема = ирОбщий.СоздатьСхемуПоТаблицамЗначенийЛкс(Новый Структура("Т", ТабличноеПолеИлиКлюч.Значение.ВыгрузитьКолонки())); + Компоновщик = ирОбщий.КомпоновщикПоСхемеКомпоновкиЛкс(Схема); + #КонецЕсли + КонецЕсли; + НастройкаКомпоновки = Компоновщик.Настройки; + ирОбщий.СкопироватьОтборЛюбойЛкс(НастройкаКомпоновки.Отбор, Отбор, Истина,,,, ИгнорироватьЭлементы); + ПредставлениеОтбора = ирОбщий.ПредставлениеЗначенияСОграничениемДлиныЛкс(НастройкаКомпоновки.Отбор, 150); + Если ПредставлениеОтбора <> "" Тогда + ДобавленВСписок = ПоследниеВыбранныеДобавитьЛкс(ЭтаФорма, НастройкаКомпоновки, ПредставлениеОтбора, ТабличноеПолеИлиКлюч, "Отборы", Истина); + КонецЕсли; + КонецЕсли; + ПостроительЗапроса = Новый ПостроительЗапроса; + Если ТипЗнч(ТабличноеПолеИлиКлюч) = Тип("Строка") Тогда + ПустаяТаблица = ирОбщий.ПустаяТаблицаЗначенийИзТаблицыБДЛкс(ТабличноеПолеИлиКлюч); + Иначе + ПустаяТаблица = ТабличноеПолеИлиКлюч.Значение; + КонецЕсли; + ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ПустаяТаблица); + СтарыйОтбор = ПостроительЗапроса.Отбор; + ирОбщий.СкопироватьОтборПостроителяЛкс(СтарыйОтбор, Отбор,, Истина); + КонецЕсли; + Возврат ДобавленВСписок; + +КонецФункции + +// Функция - Добавить отбор компоновки в историю таблицы БДЛкс +// +// Параметры: +// ЭтаФорма - - +// ПолноеИмяТаблицы - - +// АктивнаяНастройка - - +// СтараяНастройка - - +// выхОтборИзменен - - +// +// Возвращаемое значение: +// - Булево - был ли добавлен элемент в историю отборов +// +Функция ДобавитьОтборКомпоновкиВИсториюТаблицыБДЛкс(Знач ЭтаФорма, Знач ПолноеИмяТаблицы, Знач АктивнаяНастройка, Знач СтараяНастройка, выхОтборИзменен = Ложь) Экспорт + + #Если Сервер И Не Сервер Тогда + СтараяНастройка = Новый НастройкиКомпоновкиДанных; + АктивнаяНастройка = Новый НастройкиКомпоновкиДанных; + #КонецЕсли + СтарыйОтбор = СтараяНастройка.Отбор; + Отбор = АктивнаяНастройка.Отбор; + ДобавленВСписок = Ложь; + ПредставлениеОтбора = Строка(Отбор); + выхОтборИзменен = ПредставлениеОтбора <> Строка(СтарыйОтбор); + Если выхОтборИзменен Тогда + Если ПредставлениеОтбора <> "" Тогда + Для Каждого ЭлементОтбора Из Отбор.Элементы Цикл + Если Ложь + Или ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + Или Найти(ЭлементОтбора.ЛевоеЗначение, ".") > 0 + Тогда + Продолжить; + КонецЕсли; + СтарыйЭлементОтбора = ирОбщий.НайтиЭлементОтбораЛкс(СтарыйОтбор, "" + ЭлементОтбора.ЛевоеЗначение); + Если Истина + И ЭлементОтбора.Использование + И (Ложь // Защита от попадания в историю промежуточных строк горячего фильтра по подстроке + Или Форма_ВводДоступенЛкс(ЭтаФорма) + Или (Истина + И ЭлементОтбора.ВидСравнения <> ВидСравненияКомпоновкиДанных.НеСодержит + И ЭлементОтбора.ВидСравнения <> ВидСравненияКомпоновкиДанных.Содержит)) + И (Ложь + Или СтарыйЭлементОтбора = Неопределено + Или СтарыйЭлементОтбора.ПравоеЗначение <> ЭлементОтбора.ПравоеЗначение) + Тогда + ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(ЭлементОтбора, ПолноеИмяТаблицы); + КонецЕсли; + КонецЦикла; + Компоновщик = ирКэш.КомпоновщикТаблицыМетаданныхЛкс(ПолноеИмяТаблицы); + НастройкаКомпоновки = Компоновщик.Настройки; + ирОбщий.СкопироватьОтборЛюбойЛкс(НастройкаКомпоновки.Отбор, Отбор, Истина); + ДобавленВСписок = ирКлиент.ПоследниеВыбранныеДобавитьЛкс(ЭтаФорма, НастройкаКомпоновки, ирОбщий.ПредставлениеЗначенияСОграничениемДлиныЛкс(НастройкаКомпоновки.Отбор, 150), ПолноеИмяТаблицы, "Отборы", Истина); + КонецЕсли; + Если ТипЗнч(СтараяНастройка) = Тип("НастройкиКомпоновкиДанных") Тогда + ирОбщий.СкопироватьНастройкиКомпоновкиЛкс(АктивнаяНастройка, СтараяНастройка, Истина); + Иначе + // Нужно обновлять старую настройку снаружи + КонецЕсли; + КонецЕсли; + Возврат ДобавленВСписок; + +КонецФункции + +Процедура ПодменюПереключателяНажатиеЛкс(Знач Подменю, Кнопка, Знач ИмяКнопкиПоУмолчанию = "") Экспорт + + Если Кнопка = Неопределено Или Не Кнопка.Доступность Тогда + Если ЗначениеЗаполнено(ИмяКнопкиПоУмолчанию) Тогда + Кнопка = Подменю.Кнопки[ИмяКнопкиПоУмолчанию]; + Иначе + Кнопка = Подменю.Кнопки[0]; + КонецЕсли; + КонецЕсли; + Для Каждого КнопкаСпособа Из Подменю.Кнопки Цикл + КнопкаСпособа.Пометка = Кнопка = КнопкаСпособа; + КонецЦикла; + ирОбщий.ОбновитьТекстПослеМаркераВСтрокеЛкс(Подменю.Текст,, Кнопка.Текст, ": "); + +КонецПроцедуры + +#КонецЕсли + +Процедура ПерезапуститьСеансПослеДобавленияРолиЛкс() Экспорт + + Текст = "Перезапускаем сеанс после авто добавления роли"; + Заголовок = "Инструменты разработчика"; + ПараметрыЗапуска = " /C" + "НеДобавлятьРолиИР /DEBUG "; // Защита от циклического перезапуска в БСП 3.1.6+ https://www.hostedredmine.com/issues/955636 + //#Если Не ВебКлиент И Не ТонкийКлиент Тогда + // ПараметрыЗапуска = ПараметрыЗапуска + ПараметрыЗапускаСеансаТекущиеЛкс(); // Не хватит прав без ролей ИР + //#КонецЕсли + #Если ТолстыйКлиентОбычноеПриложение Тогда + Предупреждение(Текст, 2, Заголовок); + #Иначе + ПоказатьОповещениеПользователя(Заголовок,, Текст); + #КонецЕсли + ЗавершитьРаботуСистемы(Ложь, Истина, ПараметрыЗапуска); + +КонецПроцедуры + +// Эта обертка нужно для возможности привязать ее к команде панели инструментов +Процедура ОтладитьОтложенныйОбъектБезПараметровЛкс() Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + ОтладитьОтложенныйОбъектЛкс(); + #КонецЕсли + +КонецПроцедуры + +Процедура УстановитьПрикреплениеФормыВУправляемомПриложенииЛкс(Этаформа, ПроверитьДоступностьВвода = Ложь, ПоложениеПрикрепленногоОкна = Неопределено) Экспорт + + #Если Не ВебКлиент Тогда + Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() И Не Этаформа.МодальныйРежим Тогда + Если ПроверитьДоступностьВвода И Не Форма_ВводДоступенЛкс(Этаформа) Тогда // При открытии формы ВводДоступен() всегда равно Ложь + Возврат; + КонецЕсли; + Если ПоложениеПрикрепленногоОкна = Неопределено Тогда + Если ЭтаФорма.СостояниеОкна = ВариантСостоянияОкна.Прикрепленное Тогда + ПоложениеПрикрепленногоОкна = ЭтаФорма.ПоложениеПрикрепленногоОкна; + КонецЕсли; + КонецЕсли; + Если ПоложениеПрикрепленногоОкна <> Неопределено Тогда + ОжидатьЗавершения = Ложь; // Вроде не играет роли + + Если ирКэш.НомерВерсииПлатформыЛкс() >= 803017 Тогда + Если Истина + И ТипЗнч(ЭтаФорма) = Тип("Форма") + И ирКэш.НомерВерсииПлатформыЛкс() < 803021 + Тогда + КомандаАктивацииПунктаОкна = "{UP 2}"; + Иначе + КомандаАктивацииПунктаОкна = "{UP 4}"; + КонецЕсли; + ОтправитьНажатияКлавишЛкс("%-", ОжидатьЗавершения); // Такой вызов меню окна не работает в 8.3.15-16 + ОтправитьНажатияКлавишЛкс(КомандаАктивацииПунктаОкна, ОжидатьЗавершения); + ОтправитьНажатияКлавишЛкс("{ENTER}", ОжидатьЗавершения); + // Снизу может находиться пункт меню "Сообщения", если было выведено хотя бы одно сообщение + //Если ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Верх Тогда + // ОтправитьНажатияКлавишЛкс("{UP 3}", ОжидатьЗавершения); + //ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Низ Тогда + // ОтправитьНажатияКлавишЛкс("{UP 2}", ОжидатьЗавершения); + //ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Лево Тогда + // ОтправитьНажатияКлавишЛкс("{UP 5}", ОжидатьЗавершения); + //ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право Тогда + // ОтправитьНажатияКлавишЛкс("{UP 4}", ОжидатьЗавершения); + //КонецЕсли; + Если ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Верх Тогда + ОтправитьНажатияКлавишЛкс("{Down 4}", ОжидатьЗавершения); + ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Низ Тогда + ОтправитьНажатияКлавишЛкс("{Down 5}", ОжидатьЗавершения); + ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Лево Тогда + ОтправитьНажатияКлавишЛкс("{Down 2}", ОжидатьЗавершения); + ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право Тогда + ОтправитьНажатияКлавишЛкс("{Down 3}", ОжидатьЗавершения); + КонецЕсли; + ОтправитьНажатияКлавишЛкс("{ENTER}", ОжидатьЗавершения); + ИначеЕсли ирКэш.НомерВерсииПлатформыЛкс() >= 803015 Тогда + // ОтправитьНажатияКлавишЛкс("%-"); // Такой вызов меню окна не работает в 8.3.15-16 + Иначе + ОтправитьНажатияКлавишЛкс("%", ОжидатьЗавершения); + ОтправитьНажатияКлавишЛкс("{Down 1}", ОжидатьЗавершения); + + // https://www.hostedredmine.com/issues/927695 + //ОтправитьНажатияКлавишЛкс("{О}", ОжидатьЗавершения); // Привязка к русскому языку ввода + ОтправитьНажатияКлавишЛкс("{Down 4}", ОжидатьЗавершения); // Если использовать UP то будет проход через опциональный пункт "Функции для технического специалиста" + ОтправитьНажатияКлавишЛкс("{ENTER}", ОжидатьЗавершения); + + Если ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Верх Тогда + ОтправитьНажатияКлавишЛкс("{UP 4}", ОжидатьЗавершения); + ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Низ Тогда + ОтправитьНажатияКлавишЛкс("{UP 3}", ОжидатьЗавершения); + ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Лево Тогда + ОтправитьНажатияКлавишЛкс("{UP 6}", ОжидатьЗавершения); + ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право Тогда + ОтправитьНажатияКлавишЛкс("{UP 5}", ОжидатьЗавершения); + КонецЕсли; + ОтправитьНажатияКлавишЛкс("{ENTER}", ОжидатьЗавершения); + КонецЕсли; + КонецЕсли; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + +// https://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/sendkeys-statement +// Параметры: +// СтрокаКлавиш - Строка - SHIFT +, CTRL ^, ALT % +// +Процедура ОтправитьНажатияКлавишЛкс(СтрокаКлавиш, ОжидатьЗавершения = Ложь) Экспорт + + Если Не ирКэш.ЛиПлатформаWindowsЛкс() Тогда + Возврат; + КонецЕсли; + ирПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + ирПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + ирПлатформа.WshShell().SendKeys(СтрокаКлавиш, ОжидатьЗавершения); // При этом почему то NumLock перенажимается + +КонецПроцедуры + +Процедура ОткрытьСписокИнструментовЛкс() Экспорт + + ОткрытьПанельИнструментовЛкс(Истина, Ложь); + +КонецПроцедуры + +Процедура ОткрытьПанельИнструментовЛкс(ТолькоОткрытьФормуСпискаИнструментов = Ложь, ОткрытьСтраницуНастроек = Ложь) Экспорт + + Если ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + ФормаСпискаИнструментов = ПолучитьФормуЛкс("Обработка.ирПортативный.Форма.Форма"); + Если ФормаСпискаИнструментов.Открыта() Тогда + ФормаСпискаИнструментов.ПараметрТолькоОткрытьНастройки = ТолькоОткрытьФормуСпискаИнструментов; + ФормаСпискаИнструментов.Открыть(); + Иначе + //ирКлиент.ОткрытьПанельИнструментовЛкс(Истина); // Так будут считаны настройки + ФормаНастроек = ирКлиент.ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ФормаНастроек"); + Если ОткрытьСтраницуНастроек Тогда + ФормаНастроек.ЭлементыФормы.Панель.ТекущаяСтраница = ФормаНастроек.ЭлементыФормы.Панель.Страницы.Настройки; + КонецЕсли; + КонецЕсли; + #КонецЕсли + КонецЕсли; + +КонецПроцедуры + +Процедура СохранитьНастройкиПользователяЛкс() Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + СохранитьНастройкиПользователя(); + #КонецЕсли + +КонецПроцедуры + +Процедура ОткрытьНастройкиАлгоритмовЛкс() Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Если ирКэш.ЛиЭтоРасширениеКонфигурацииЛкс() Тогда + ирОбщий.СообщитьЛкс("Команда недоступна в варианте Расширение"); + Возврат; + КонецЕсли; + Форма = ирКэш.Получить().ПолучитьФорму("НастройкиАлгоритмов"); + Форма.Открыть(); + #КонецЕсли + +КонецПроцедуры + +Процедура ОткрытьРегистрацияCOMКомпонентЛкс() Экспорт + + ОткрытьФормуЛкс("Обработка.ирПлатформа.Форма.РегистрацияCOMКомпонент"); + +КонецПроцедуры + +Процедура ОткрытьОтладкаВнешнихОбработокБСПЛкс() Экспорт + + ОткрытьФормуЛкс("ОбщаяФорма.ирОтладкаВнешнихОбработокБСП"); + +КонецПроцедуры + +Процедура ОткрытьОбработкаМодулейМетаданныхЛкс() Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Форма = ирКэш.Получить().ПолучитьФорму("ОбработкаМодулейМетаданных"); + Форма.Открыть(); + #КонецЕсли + +КонецПроцедуры + +Процедура ОткрытьПодключениеВнешнихИсточниковДанныхЛкс() Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Форма = ирКэш.Получить().ПолучитьФорму("ПодключениеВнешнихИсточниковДанных"); + Форма.Открыть(); + #КонецЕсли + +КонецПроцедуры + +Процедура ОткрытьГлобальноеМенюЛкс(АктивнаяФорма = Неопределено) Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Если АктивнаяФорма = Неопределено Тогда + АктивнаяФорма = АктивнаяУправляемаяФормаЛкс(); + КонецЕсли; + Если АктивнаяФорма = Неопределено Тогда + Возврат; + КонецЕсли; + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Форма = мПлатформа.ПолучитьФорму("ГлобальноеМеню"); + Если Не Форма.Открыта() Тогда + Форма.АктивнаяФорма = АктивнаяФорма; + Форма.ОткрытьМодально(); + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + +Процедура ОткрытьФункцииРежимаОтладкиЛкс() Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Форма = ирКэш.Получить().ПолучитьФорму("ФункцииРежимаОтладки"); + Форма.Открыть(); + #КонецЕсли + +КонецПроцедуры + +Процедура ОткрытьЗапускСеансаЛкс() Экспорт + + #Если ВебКлиент Тогда + Сообщить("Команда недоступна в вебклиенте"); + #ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда + ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ЗапускСеансаОбычная"); + #Иначе + ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая"); + #КонецЕсли + +КонецПроцедуры + +Процедура ОткрытьДинамическийСписокЛкс() Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Форма = ФормаДинамическогоСпискаЛкс(); + Форма.Открыть(); + #КонецЕсли + +КонецПроцедуры + +// Открывает справку по первой подсистеме метаданных переданного объекта +// +// Параметры: +// Объект - любой объект, имеющий метаданные. +// +Процедура ОткрытьСправкуПоПодсистемеЛкс(Объект = Неопределено) Экспорт + + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Если Ложь + Или ТипЗнч(Объект) = Тип("Неопределено") + Или ТипЗнч(Объект) = Тип("ОкноКлиентскогоПриложения") + Тогда + // + ИначеЕсли ТипЗнч(Объект) = Тип("Форма") Тогда + ПолноеИмяМД = ирОбщий.СлужебныеДанныеФормыЛкс(Объект).ИмяФормы; + ИначеЕсли ТипЗнч(Объект) = Тип("УправляемаяФорма") Тогда + ПолноеИмяМД = Объект.ИмяФормы; + Иначе + Если ТипЗнч(Объект) = Тип("Тип") Тогда + ОбъектМД = Метаданные.НайтиПоТипу(Объект); + Иначе + ОбъектМД = Объект.Метаданные(); + КонецЕсли; + ПолноеИмяМД = ОбъектМД.ПолноеИмя(); + ПолноеИмяМД = СтрЗаменить(ПолноеИмяМД, "ВнешняяОбработка.", "Обработка."); + ПолноеИмяМД = СтрЗаменить(ПолноеИмяМД, "ВнешнийОтчет.", "Отчет."); + КонецЕсли; + Форма = ирКэш.Получить().ПолучитьФорму("ОПодсистеме",, ПолноеИмяМД); + Форма.Открыть(); + #КонецЕсли + +КонецПроцедуры + +Процедура ОткрытьНастройкуТехножурналаПоПользователюЛкс() Экспорт + + ФормаНастройки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирНастройкаТехножурнала.Форма"); + ФормаНастройки.Открыть(); + ФормаНастройки.НаСервере = Не ирКэш.ЛиФайловаяБазаЛкс(); + ФормаНастройки.ПриИзмененииПравилаПолученияФайлаНастройки(); + ФормаНастройки.ПереключитьТрассировкуЗапросов(Истина); + +КонецПроцедуры + +Процедура ОтключитьГлобальныеОбработчикиОжиданияЛкс() Экспорт + + Если ирОбщий.ПроверитьПлатформаНеWindowsЛкс(,, Истина) Тогда + Возврат; + КонецЕсли; + Если Не ирОбщий.ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда + Возврат; + КонецЕсли; + ОткрытьФормуЛкс("Обработка.ирПлатформа.Форма.ГлобальныеОбработчикиОжидания"); + +КонецПроцедуры + +Функция ПолучитьПриглашениеОткрытьОтладчикЛкс() Экспорт + + Возврат "Если нет кнопки ""Подробно"", разрешите отладку. Нажмите кнопку ""Подробно"", а затем ""Конфигуратор"", чтобы начать отладку!"; + +КонецФункции + +Процедура ОткрытьОтладчикЛкс() Экспорт + + #Если ВебКлиент Тогда + Сообщить("Команда недоступна в вебклиенте"); + #Иначе + ВызватьИсключение ПолучитьПриглашениеОткрытьОтладчикЛкс(); + #КонецЕсли + +КонецПроцедуры + +Функция ОткрытьФормуЛкс(Знач ПолноеИмяФормы, Знач Параметры = Неопределено, Знач Владелец = Неопределено, Знач Уникальность = Неопределено, Знач Окно = Неопределено) Экспорт + + #Если ТонкийКлиент Или ВебКлиент Тогда + Параметры = Новый Структура("ИмяФормыДляОткрытия", ПолноеИмяФормы); + Форма = ПолучитьФорму("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая", Параметры, Владелец, Уникальность, Окно); + #Иначе + Форма = ПолучитьФормуЛкс(ПолноеИмяФормы, Параметры, Владелец, Уникальность, Окно); + #КонецЕсли + Если Форма <> Неопределено Тогда + Форма.Открыть(); + КонецЕсли; + Возврат Форма; + +КонецФункции + +Функция Форма_ВводДоступенЛкс(Знач ЭтаФорма, Знач ПроверятьПолеHTML = Ложь) Экспорт + + Попытка + ВводДоступен = ЭтаФорма.ВводДоступенЛкс(); + Исключение + КонецПопытки; + Результат = Ложь + Или ВводДоступен = Истина + Или ЭтаФорма.ВводДоступен() + Или (Истина + И ПроверятьПолеHTML + // При фокусе ввода у HTML функция ВводДоступен() возвращает Ложь https://partners.v8.1c.ru/forum/t/1943796/m/1943796 + // Этот антибаг работает некорректно - для неактивной формы возращает Истина. Поэтому эту проверку имеет смысл включать только убедившись что надежным способом активной формы не нашлось + И (Ложь + Или (Истина + И ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеФормы") + И ЭтаФорма.ТекущийЭлемент.Вид = ВидПоляФормы.ПолеHTMLДокумента + И ЭтаФорма.ТекущийЭлемент.Документ.hasFocus()) // Затратная функция 1мс + #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда + Или (Истина + И ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеHTMLДокумента") + И ЭтаФорма.ТекущийЭлемент.Документ.hasFocus()) // Затратная функция 1мс + #КонецЕсли + )); + Возврат Результат; + +КонецФункции + +// Параметры: +// ЭтаФорма - Форма - обязательный для обычных форм +Процедура Форма_ВнешнееСобытиеЛкс(ЭтаФорма = Неопределено, Источник, Событие, Данные, ВводДоступен = Неопределено) Экспорт + + Если Источник = "KeyboardHook" Тогда + КодыКлавиш = ирКэш.КодыКлавишЛкс(); + + #Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда + Если Найти(Данные, КодыКлавиш["CTRL+ALT+G"]) = 1 Тогда + Форма = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); + Форма.ПрикреплятьОкноПослеОткрытия = Ложь; + Форма.Открыть(); + Возврат; + КонецЕсли; + #КонецЕсли + + Если ЭтаФорма = Неопределено Тогда + ЭтаФорма = АктивнаяУправляемаяФормаЛкс(); + Если ЭтаФорма = Неопределено Тогда + Возврат; + КонецЕсли; + КонецЕсли; + Если ВводДоступен <> Истина И Не Форма_ВводДоступенЛкс(ЭтаФорма) Тогда + Возврат; + КонецЕсли; + ПолученноеЧисло = Лев(Данные,5); + ПолученноеЧисло = Число(ПолученноеЧисло); + ВиртуальнаяКлавиша = ПолученноеЧисло % 256; + ПолученноеЧисло = ПолученноеЧисло - ВиртуальнаяКлавиша; + РасширеннаяКлавиша = ПолученноеЧисло % 512; + ПолученноеЧисло = ПолученноеЧисло - РасширеннаяКлавиша; + ПравыйАльт = ПолученноеЧисло % 1024; + ПолученноеЧисло = ПолученноеЧисло - ПравыйАльт; + ЛевыйАльт = ПолученноеЧисло % 2048; + ПолученноеЧисло = ПолученноеЧисло - ЛевыйАльт; + ПравыйКонтрол = ПолученноеЧисло % 4096; + ПолученноеЧисло = ПолученноеЧисло - ПравыйКонтрол; + ЛевыйКонтрол = ПолученноеЧисло % 8192; + ПолученноеЧисло = ПолученноеЧисло - ЛевыйКонтрол; + ПравыйШифт = ПолученноеЧисло % 16384; + ПолученноеЧисло = ПолученноеЧисло - ПравыйШифт; + ЛевыйШифт = ПолученноеЧисло; + Если СтрДлина(Данные) > 5 Тогда + Символ = Сред(Данные, 6); + Иначе + Символ = ""; + КонецЕсли; + Если Ложь + Или Найти(Данные, КодыКлавиш["CTRL+~"]) = 1 + Тогда + ОткрытьГлобальноеМенюЛкс(ЭтаФорма); + + #Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда + ИначеЕсли Ложь + Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеВвода") + Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ТабличноеПоле") + Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеФормы") + Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ТаблицаФормы") + Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") + Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеHTMLДокумента") + Тогда + Если Найти(Данные, КодыКлавиш["CTRL+C"]) = 1 Тогда + Попытка + БуферОбмена_КопироватьЛкс(ЭтаФорма, Ложь); + Исключение + ОписаниеОшибки = ОписаниеОшибки(); // Для отладки + Сообщить(ОписаниеОшибки); + КонецПопытки; + ИначеЕсли Найти(Данные, КодыКлавиш["ALT+SHIFT+V"]) = 1 Тогда + БуферОбмена_ВставитьЛкс(ЭтаФорма); + ИначеЕсли Найти(Данные, КодыКлавиш["CTRL+V"]) = 1 Тогда + БуферОбмена_ВставитьЛкс(ЭтаФорма, Ложь); + ИначеЕсли Найти(Данные, КодыКлавиш["CTRL+A"]) = 1 Тогда + Если ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда + ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, ЭтаФорма.ТекущийЭлемент); + КонецЕсли; + ИначеЕсли Найти(Данные, КодыКлавиш["Space"]) = 1 Тогда + Если ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда // Только для форм инструментов + ТабличноеПоле = ЭтаФорма.ТекущийЭлемент; + КолонкаПометки = КолонкаПометкиТабличногоПоляЛкс(ТабличноеПоле); + Если Истина + И Не ТабличноеПоле.ТолькоПросмотр + И ТабличноеПоле.ТекущаяКолонка <> Неопределено + И ТабличноеПоле.ТекущаяКолонка <> КолонкаПометки + И (Ложь + Или ТабличноеПоле.ТекущаяКолонка.ТолькоПросмотр + Или ТабличноеПоле.ТекущаяКолонка.ЭлементУправления = Неопределено) + И (Ложь + Или Не ТабличноеПоле.ИзменяетДанные + Или Не ЭтаФорма.ТолькоПросмотр) + Тогда + ТабличноеПоле_ИнтерактивноУстановитьПометкуТекущейСтрокиЛкс(ТабличноеПоле,, Неопределено); + КонецЕсли; + КонецЕсли; + КонецЕсли; + #КонецЕсли + КонецЕсли; + //Сообщить(Данные); + КонецЕсли; + +КонецПроцедуры + +Функция АктивнаяУправляемаяФормаЛкс() Экспорт + + #Если ТолстыйКлиентОбычноеПриложение Тогда + Возврат Неопределено; + #КонецЕсли + ТекущееОкно = АктивноеОкно(); + Если ТекущееОкно = Неопределено Тогда + Окна = ПолучитьОкна(); + Для Каждого ТекущееОкно Из Окна Цикл + Если ТекущееОкно.НачальнаяСтраница Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ТипЗнч(ТекущееОкно) = Тип("ОкноКлиентскогоПриложения") Тогда + АктивнаяФорма = Неопределено; + Для Каждого Форма Из ТекущееОкно.Содержимое Цикл + Если Форма_ВводДоступенЛкс(Форма) Тогда + АктивнаяФорма = Форма; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат АктивнаяФорма; + +КонецФункции + +// Для тонкого клиента +Процедура ПослеУстановкиKeyboardHook(Результат = 1) Экспорт + Если Результат = Неопределено Тогда + Возврат; + КонецЕсли; + Успех = ПодключитьВнешнююКомпоненту("Обработка.ирПлатформа.Макет.KeyboardHookZip", "ПерехватКлавиатуры", ТипВнешнейКомпоненты.Native); + Если Не Успех Тогда + //ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеУстановкиKeyboardHook", ирОбщий); + //НачатьУстановкуВнешнейКомпоненты(ОповещениеОЗавершении, "Обработка.ирПлатформа.Макет.KeyboardHookZip"); // Не скомпилируется на 8.2 + Попытка + УстановитьВнешнююКомпоненту("Обработка.ирПлатформа.Макет.KeyboardHookZip"); + Исключение + // "Режим использования модальности" = "Не использовать" https://www.hostedredmine.com/issues/927892 + КонецПопытки; + КонецЕсли; +КонецПроцедуры diff --git a/src/CommonModules/ирКэш/Ext/Module.bsl b/src/CommonModules/ирКэш/Ext/Module.bsl index 3d9eedd8b..61891744c 100644 --- a/src/CommonModules/ирКэш/Ext/Module.bsl +++ b/src/CommonModules/ирКэш/Ext/Module.bsl @@ -4,7 +4,7 @@ //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; #Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда @@ -360,9 +360,11 @@ Исключение ирОбщий.СообщитьЛкс("Не удалось подключить тонкий клиент через COM. Пробуйте под пользователем без пароля https://www.hostedredmine.com/issues/917837. |Для диагностики используйте инструмент ""Управление COM классами 1С""", СтатусСообщения.Внимание); - Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирУправлениеCOMКлассами1С.Форма"); + #Если Клиент Тогда + Форма = ирКлиент.ПолучитьФормуЛкс("Обработка.ирУправлениеCOMКлассами1С.Форма"); Форма.ПараметрТипКласса = "CApplication"; Форма.Открыть(); + #КонецЕсли Возврат Неопределено; КонецПопытки; @@ -490,7 +492,7 @@ Если ирКэш.НомерРежимаСовместимостиЛкс() >= 803007 Тогда Результат = Вычислить("ПолучитьТекущийСеансИнформационнойБазы()"); Иначе - Результат = ирПривилегированный.ТекущийСеансЛкс(); + Результат = ирСервер.ТекущийСеансЛкс(); КонецЕсли; Если ирКэш.ЛиПортативныйРежимЛкс() Тогда КэшФункции[КлючНаборПараметров] = Результат; @@ -1167,8 +1169,9 @@ Тогда Возврат Неопределено; КонецЕсли; + #Если Клиент Тогда // Антибаг 8.3.16- В обычном приложении в клиент-серверном режиме из временного хранилища иногда возвращается Неопределено https://partners.v8.1c.ru/forum/t/1768363/m/1768363, http://www.hostedredmine.com/issues/884756 - ФормаРезультата = ирОбщий.НоваяФормаРезультатаФоновогоЗаданияЛкс(); + ФормаРезультата = ирКлиент.НоваяФормаРезультатаФоновогоЗаданияЛкс(); АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ФормаРезультата.УникальныйИдентификатор); ПараметраЗадания = Новый Массив(1); ПараметраЗадания[0] = АдресРезультата; @@ -1182,8 +1185,10 @@ Результат.Вставить("АдресРезультата", АдресРезультата); Результат.Вставить("ФормаРезультата", ФормаРезультата); Возврат Результат; + #КонецЕсли КонецФункции + // Кэширование в 100 раз ускоряет повторный поиск Функция ОбъектМДПоПолномуИмениЛкс(ПолноеИмяМД) Экспорт Если Найти(ПолноеИмяМД, ".") = 0 Тогда @@ -1207,7 +1212,7 @@ КонецЕсли; //Иначе // ОбъектМД = ОбъектИлиИмяМД; - //КонецЕсли; + //КонецЕсли; Если Истина И ОбъектМД <> Неопределено И Не ПравоДоступа("Чтение", ОбъектМД) @@ -1391,25 +1396,26 @@ ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ЭлементСтиля", , "ЭлементыСтиля", ); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Язык", , "Языки", ); КонецЕсли; + // Порядок влияет на отображение пользователю ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Константа", 0, "Константы", 1); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Справочник", 3, "Справочники", 2); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Документ", 13, "Документы", 12); - ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Перечисление", 10, "Перечисления", 9); + ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ЖурналДокументов", 16, "ЖурналыДокументов", 15); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ПланВидовХарактеристик", 38, "ПланыВидовХарактеристик", 37); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ПланСчетов", 40, "ПланыСчетов",39 ); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ПланВидовРасчета", 48, "ПланыВидовРасчета", 47); - ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Последовательность", 30, "Последовательности", 29); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "РегистрСведений", 34, "РегистрыСведений", 33); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "РегистрНакопления", 32, "РегистрыНакопления", 31); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "РегистрБухгалтерии", 42, "РегистрыБухгалтерии", 41); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "РегистрРасчета", 50, "РегистрыРасчета", 49); + ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Перерасчет", 57, "Перерасчеты", 57); + ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Последовательность", 30, "Последовательности", 29); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "БизнесПроцесс", 44, "БизнесПроцессы", 43); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Задача", 46, "Задачи", 45); - ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Перерасчет", 57, "Перерасчеты", 57); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ПланОбмена", 52, "ПланыОбмена", 51); + ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Перечисление", 10, "Перечисления", 9); ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "КритерийОтбора", , "КритерииОтбора", ); - ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ЖурналДокументов", 16, "ЖурналыДокументов", 15); Если ирКэш.ДоступныВнешниеИсточникДанныхЛкс() Тогда ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ВнешнийИсточникДанных", 59, "ВнешниеИсточникиДанных", 58); @@ -1627,7 +1633,7 @@ #Если Клиент Тогда -Функция ОткрытыеФормыЛкс() Экспорт +Функция ОткрытыеФормыПодсистемыЛкс() Экспорт ирПлатформа = ирКэш.Получить(); #Если Сервер И Не Сервер Тогда @@ -1640,6 +1646,21 @@ КонецЕсли; Возврат Результат; +КонецФункции + +Функция ОткрытыеФормыСсылокЛкс() Экспорт + + ирПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + ирПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + Результат = ирПлатформа.ОткрытыеФормыСсылок; + Если Результат = Неопределено Тогда + Результат = Новый Соответствие; + ирПлатформа.ОткрытыеФормыСсылок = Результат; + КонецЕсли; + Возврат Результат; + КонецФункции Функция ПерехватКлавиатурыЛкс() Экспорт @@ -1676,7 +1697,7 @@ Если МодальнаяГруппа = 0 Тогда #Если ТолстыйКлиентУправляемоеПриложение Тогда //Форма = ПолучитьФорму("Обработка.ирПлатформа.Форма.ВременноеОкноСообщенийУпр",,, МодальнаяГруппа); // Так будет ошибка компиляции в портативном варианте в файловой базе - Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирПлатформа.Форма.ВременноеОкноСообщенийУпр",,, МодальнаяГруппа); + Форма = ирКлиент.ПолучитьФормуЛкс("Обработка.ирПлатформа.Форма.ВременноеОкноСообщенийУпр",,, МодальнаяГруппа); #КонецЕсли Иначе мПлатформа = ирКэш.Получить(); @@ -1690,7 +1711,7 @@ КонецФункции Функция ФормаСравнителяТекстовЛкс() Экспорт - Результат = ирОбщий.НоваяФормаСравнителяТекстовЛкс(); + Результат = ирКлиент.НоваяФормаСравнителяТекстовЛкс(); Возврат Результат; КонецФункции @@ -1725,6 +1746,19 @@ КонецФункции +Функция ДоступенРедакторМонакоЛкс() Экспорт + + Возврат Истина + И ирКэш.ЛиПлатформаWindowsЛкс() + И (Ложь + Или ирКэш.НомерВерсииПлатформыЛкс() >= 803018 + Или (Истина + И ирКэш.НомерВерсииПлатформыЛкс() >= 803015 + И ирКлиент.ЛиПерехватКлавиатурногоВводаЛкс())) + ; + +КонецФункции + #КонецЕсли #КонецЕсли @@ -1856,19 +1890,6 @@ Возврат Результат; КонецФункции - -Функция ДоступенРедакторМонакоЛкс() Экспорт - - Возврат Истина - И ирКэш.ЛиПлатформаWindowsЛкс() - И (Ложь - Или ирКэш.НомерВерсииПлатформыЛкс() >= 803018 - Или (Истина - И ирКэш.НомерВерсииПлатформыЛкс() >= 803015 - И ирОбщий.ЛиПерехватКлавиатурногоВводаЛкс())) - ; - -КонецФункции Функция ДоступнаСхемаЗапросаЛкс() Экспорт diff --git a/src/CommonModules/ирОбщий/Ext/Module.bsl b/src/CommonModules/ирОбщий/Ext/Module.bsl index 3bf7549da..2e2cb78ff 100644 --- a/src/CommonModules/ирОбщий/Ext/Module.bsl +++ b/src/CommonModules/ирОбщий/Ext/Module.bsl @@ -1,6 +1,6 @@ //////////////////////////////////////////////////////////////////////////////// // Подсистема "Инструменты разработчика Tormozit" -// Авторское право (с) 2007-2022, Старых С.А. +// Авторское право (с) 2007-2023, Старых С.А. // Лицензия MIT // Разрешается повторное распространение и использование как в виде исходника так и в двоичной форме, // с модификациями или без, при соблюдении следующих условий: @@ -23,16 +23,15 @@ //ирПортативный Перем ирПортативный Экспорт; //ирПортативный Перем ирОбщий Экспорт; -//ирПортативный Перем ирОбщий83 Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; //////////////////////////////////////////////////////////////////////////////// // ОТЛАДКА #Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда - + // Присваивает первому параметру второй. // Удобно вызывать из отладчика через диалог "Вычислить выражение" (в 8.3 есть встроенный аналог) или в условной точке останова для модификации значения переменной без остановки. // @@ -128,7 +127,7 @@ КонецЦикла; Если РежимОперации < 2 Тогда #Если Клиент Тогда - ФормаОтладки = ПолучитьФормуЛкс("Обработка.ирКонсольКода.Форма", , , Новый УникальныйИдентификатор); + ФормаОтладки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирКонсольКода.Форма", , , Новый УникальныйИдентификатор); ФормаОтладки.мРежимРедактора = Истина; ФормаОтладки.мСписокВнешнихПараметров = ПереданныеПараметры; ФормаОтладки.ПараметрТекст = ТекстПрограммы; @@ -299,7 +298,7 @@ КонецЕсли; #КонецЕсли Если ПустаяСтрока(ТекстПрограммы) Тогда - ТекстПрограммы = ТекстИзБуфераОбменаОСЛкс(); + ТекстПрограммы = ирКлиент.ТекстИзБуфераОбменаОСЛкс(); КонецЕсли; Параметры = Новый Структура(); ПолеВстроенногоЯзыка = СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКлсПолеТекстаПрограммы"); @@ -379,7 +378,7 @@ ТекстПрограммы = КлючИЗначение.Ключ; КонецЦикла; КонецЕсли; - ФормаОтладки = ПолучитьФормуЛкс("Обработка.ирКонсольКода.Форма",,, Новый УникальныйИдентификатор); + ФормаОтладки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирКонсольКода.Форма",,, Новый УникальныйИдентификатор); //ФормаОтладки.мСписокВнешнихПараметров = СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураПараметров); ПередаваемыеПараметры = Новый СписокЗначений; @@ -491,7 +490,7 @@ Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() И ирКэш.ЛиПортативныйРежимЛкс() Тогда ОтложенноеВыполнение = Истина; КонецЕсли; - ТребоватьТипЛкс(Модально, "Модально", Тип("Булево"), Тип("Число")); + ТребоватьТипЛкс(Модально, "Модально", Тип("Булево")); ТребоватьТипЛкс(ОтложенноеВыполнение, "ОтложенноеВыполнение", Тип("Булево")); ТребоватьТипЛкс(ВнешниеНаборыДанных, "ВнешниеНаборыДанных", Тип("Неопределено"), Тип("Структура")); ТребоватьТипЛкс(Объект2, "Объект2", Тип("Неопределено"), Тип("Строка"), @@ -560,7 +559,7 @@ ФормаРедактирования = мПлатформа.ПолучитьФорму("ТаблицаЗначений"); ФормаРедактирования.НачальноеЗначениеВыбора = Объект.Выгрузить(); ФормаРедактирования.Открыть(); - ОткрытьГруппировкуТабличногоПоляЛкс(ФормаРедактирования.ЭлементыФормы.ПолеТаблицы,, СтрСоединитьЛкс(ЗначенияСвойстваКоллекцииЛкс(Объект.Метаданные().Измерения))); + ирКлиент.ОткрытьГруппировкуТабличногоПоляЛкс(ФормаРедактирования.ЭлементыФормы.ПолеТаблицы,, СтрСоединитьЛкс(ЗначенияСвойстваКоллекцииЛкс(Объект.Метаданные().Измерения))); ИначеЕсли ТипЗнч(Объект) = Тип("HTTPСоединение") Тогда КонсольHttpЗапросов = СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольHttpЗапросов"); #Если Сервер И Не Сервер Тогда @@ -811,7 +810,7 @@ // Сам объект. // Функция ИсследоватьЛкс(Знач Объект = Неопределено, Знач Модально = Ложь, Знач КакКоллекцию = Ложь, Знач ОтложенноеВыполнение = Ложь, Знач ТекущееВыражение = Неопределено, Знач ИмяТекущегоСвойства = "", - Знач ПрикрепитьОкно = Ложь, Знач ФорматВнутр = Истина) Экспорт + Знач ПрикрепитьОкно = Ложь, Знач ФорматВнутр = Истина, Знач ВладелецФормы = Неопределено) Экспорт Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда Если Не ПравоДоступа("Использование", Метаданные.Обработки.ирИсследовательОбъектов) Тогда @@ -835,9 +834,9 @@ Если КакКоллекцию Тогда Результат = ИсследовательОбъектов.ИсследоватьКоллекцию(Объект, Модально); Иначе - Результат = ИсследовательОбъектов.ИсследоватьОбъект(Объект, Модально, ТекущееВыражение, ИмяТекущегоСвойства, ПрикрепитьОкно); + Результат = ИсследовательОбъектов.ИсследоватьОбъект(Объект, Модально, ТекущееВыражение, ИмяТекущегоСвойства, ПрикрепитьОкно, ВладелецФормы); КонецЕсли; - Если Результат <> Неопределено Тогда + Если Модально И Результат <> Неопределено Тогда Объект = Результат; КонецЕсли; Иначе @@ -1207,22 +1206,6 @@ Возврат Вычислить(Выражение9124327783); КонецФункции -Функция ПолучитьПриглашениеОткрытьОтладчикЛкс() Экспорт - - Возврат "Если нет кнопки ""Подробно"", разрешите отладку. Нажмите кнопку ""Подробно"", а затем ""Конфигуратор"", чтобы начать отладку!"; - -КонецФункции - -Процедура ОткрытьОтладчикЛкс() Экспорт - - #Если ВебКлиент Тогда - СообщитьЛкс("Команда недоступна в вебклиенте"); - #Иначе - ВызватьИсключение ПолучитьПриглашениеОткрытьОтладчикЛкс(); - #КонецЕсли - -КонецПроцедуры - // Параметры: // ПолноеИмя - ? - // ТекстМодуля - ? - @@ -1301,24 +1284,28 @@ Массив.Добавить(Тип4); Массив.Добавить(Тип5); Массив.Добавить(Тип6); - СтрокаТипов = ""; + СтрокаТипов = Новый Массив; Для Каждого Тип Из Массив Цикл - Если ТипЗначения = Тип Тогда + Если Ложь + Или ТипЗначения = Тип + Или (Истина + И Тип = Тип("Булево") + И (Ложь + Или Значение = 0 + Или Значение = 1)) + Тогда Возврат; КонецЕсли; Если Тип = Неопределено Тогда Прервать; КонецЕсли; - Если СтрокаТипов <> "" Тогда - СтрокаТипов = СтрокаТипов + ", "; - КонецЕсли; - СтрокаТипов = СтрокаТипов + Тип; + СтрокаТипов.Добавить(Тип); КонецЦикла; Текст = ""; Если ЗначениеЗаполнено(ИмяПараметра) Тогда Текст = Текст + "Для параметра """ + ИмяПараметра + """ "; КонецЕсли; - Текст = Текст + "Получено значение типа """ + ТипЗначения + """ вместо ожидаемых типов: " + СтрокаТипов + "."; + Текст = Текст + "Получено значение типа """ + ТипЗначения + """ вместо ожидаемых типов: " + СтрСоединитьЛкс(СтрокаТипов) + "."; ВызватьИсключение Текст; КонецПроцедуры @@ -2781,7 +2768,7 @@ КонецФункции -Функция ЛиКорневойТипРегистраРасчетаЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипРегистраРасчетаЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2793,7 +2780,7 @@ КонецФункции // ЛиКорневойТипРегистраБДЛкс() -Функция ЛиКорневойТипРегистраСведенийЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипРегистраСведенийЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2805,7 +2792,7 @@ КонецФункции -Функция ЛиКорневойТипРегистраБухгалтерииЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипРегистраБухгалтерииЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2817,7 +2804,7 @@ КонецФункции -Функция ЛиКорневойТипРегистраНакопленияЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипРегистраНакопленияЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2829,7 +2816,7 @@ КонецФункции -Функция ЛиКорневойТипПоследовательностиЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипПоследовательностиЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2841,7 +2828,7 @@ КонецФункции -Функция ЛиКорневойТипВнешнегоИсточникаДанныхЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипВнешнегоИсточникаДанныхЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2853,7 +2840,7 @@ КонецФункции -Функция ЛиКорневойТипПеречисленияЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипПеречисленияЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2863,9 +2850,9 @@ КонецЕсли; Возврат Ложь; -КонецФункции // ЛиКорневойТипРегистраБДЛкс() +КонецФункции -Функция ЛиТипТаблицыМетассылкиЛкс(ТипТаблицы) Экспорт +Функция ЛиТипТаблицыМетассылкиЛкс(Знач ТипТаблицы) Экспорт Если КодСимвола(ТипТаблицы, 1) < 128 Тогда ТипТаблицы = ПеревестиВРусский(ТипТаблицы); @@ -2878,9 +2865,9 @@ КонецЕсли; Возврат Ложь; -КонецФункции // ЛиКорневойТипРегистраБДЛкс() +КонецФункции -Функция ЛиКорневойТипЖурналаДокументовЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипЖурналаДокументовЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2894,7 +2881,7 @@ КонецФункции -Функция ЛиКорневойТипКритерияОтбораЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипКритерияОтбораЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2908,7 +2895,7 @@ КонецФункции -Функция ЛиКорневойТипТаблицыБДЛкс(КорневойТип, ВключаяВнешниеИсточникиДанных = Истина) Экспорт +Функция ЛиКорневойТипТаблицыБДЛкс(Знач КорневойТип, ВключаяВнешниеИсточникиДанных = Истина) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -2933,7 +2920,7 @@ // Возвращаемое значение: // Булево. // -Функция ЛиТипВложеннойТаблицыБДЛкс(ТипТаблицы) Экспорт +Функция ЛиТипВложеннойТаблицыБДЛкс(Знач ТипТаблицы) Экспорт Если КодСимвола(ТипТаблицы, 1) < 128 Тогда ТипТаблицы = ПеревестиВРусский(ТипТаблицы); @@ -2948,7 +2935,7 @@ КонецФункции -Функция ЛиИмяПредопределеннойТабличнойЧастиЛкс(ТипТаблицы) Экспорт +Функция ЛиИмяПредопределеннойТабличнойЧастиЛкс(Знач ТипТаблицы) Экспорт Если КодСимвола(ТипТаблицы, 1) < 128 Тогда ТипТаблицы = ПеревестиВРусский(ТипТаблицы); @@ -2974,7 +2961,7 @@ // Истина - реквизит "Код" имеется; // Ложь - иначе. // -Функция ЛиКорневойТипОбъектаСКодомЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипОбъектаСКодомЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -3001,7 +2988,7 @@ // Истина - реквизит "Предопределенный" имеется; // Ложь - иначе. // -Функция ЛиКорневойТипОбъектаСПредопределеннымЛкс(КорневойТип) Экспорт +Функция ЛиКорневойТипОбъектаСПредопределеннымЛкс(Знач КорневойТип) Экспорт Если КодСимвола(КорневойТип, 1) < 128 Тогда КорневойТип = ПеревестиВРусский(КорневойТип); @@ -3018,7 +3005,7 @@ КонецФункции // ЛиКорневойТипОбъектаСПредопределеннымЛкс() -Функция ЛиМетаданныеВнешнегоИсточникаДанныхЛкс(ОбъектМД) Экспорт +Функция ЛиМетаданныеВнешнегоИсточникаДанныхЛкс(Знач ОбъектМД) Экспорт Если ОбъектМД = Неопределено Тогда Возврат Ложь; @@ -3038,7 +3025,7 @@ // Истина - метаданные с иерархией; // Ложь - иначе. // -Функция ЛиМетаданныеИерархическогоОбъектаЛкс(ОбъектМД) Экспорт +Функция ЛиМетаданныеИерархическогоОбъектаЛкс(Знач ОбъектМД) Экспорт Если ОбъектМД = Неопределено Тогда Возврат Ложь; @@ -3071,7 +3058,7 @@ // Истина - метаданные с иерархией; // Ложь - иначе. // -Функция ЛиМетаданныеПодчиненногоОбъектаЛкс(ОбъектМД) Экспорт +Функция ЛиМетаданныеПодчиненногоОбъектаЛкс(Знач ОбъектМД) Экспорт Если ОбъектМД = Неопределено Тогда Возврат Ложь; @@ -3102,7 +3089,7 @@ // Истина - метаданные с иерархией групп; // Ложь - иначе. // -Функция ЛиМетаданныеОбъектаСГруппамиЛкс(ОбъектМД) Экспорт +Функция ЛиМетаданныеОбъектаСГруппамиЛкс(Знач ОбъектМД) Экспорт Если ОбъектМД = Неопределено Тогда Возврат Ложь; @@ -3138,7 +3125,7 @@ // Возвращаемое значение: // - // -Функция ЛиМетаданныеСсылочногоОбъектаЛкс(ОбъектМД, ДляТабличнойЧастиПроверятьРодителя = Ложь, ИсключаяСсылкиМетаданных = Ложь, ИсключаяВнешниеИсточникиДанных = Ложь, +Функция ЛиМетаданныеСсылочногоОбъектаЛкс(Знач ОбъектМД, ДляТабличнойЧастиПроверятьРодителя = Ложь, ИсключаяСсылкиМетаданных = Ложь, ИсключаяВнешниеИсточникиДанных = Ложь, Знач ФрагментыИмени = Неопределено) Экспорт Если ОбъектМД = Неопределено Тогда @@ -3175,7 +3162,7 @@ КонецФункции -Функция ЛиМетаданныеРегистраЛкс(ОбъектМД, СчитатьПоследовательностьРегистром = Истина) Экспорт +Функция ЛиМетаданныеРегистраЛкс(Знач ОбъектМД, СчитатьПоследовательностьРегистром = Истина) Экспорт Если ОбъектМД = Неопределено Тогда Возврат Ложь; @@ -3198,7 +3185,7 @@ КонецФункции -Функция ЛиМетаданныеНезависимогоРегистраЛкс(ОбъектМД) Экспорт +Функция ЛиМетаданныеНезависимогоРегистраЛкс(Знач ОбъектМД) Экспорт Если ОбъектМД = Неопределено Тогда Возврат Ложь; @@ -3253,6 +3240,7 @@ КонецФункции // Проверяет, является ли значение ссылкой на объект БД. +// Почему то часто тут тратилось много времени. Поэтому лучше использовать ЛиТипСсылкиБДЛкс(). // // Параметры: // пЗначение - ОбъектМетаданных, Произвольный - проверяемое значение. @@ -3267,7 +3255,7 @@ Результат = ЛиТипСсылкиБДЛкс(ТипЗнч(пЗначение), ИсключаяСсылкиМетаданных); Возврат Результат; -КонецФункции // ЛиСсылкаНаОбъектБДЛкс +КонецФункции Функция ЛиТипСсылкиБДЛкс(Знач Тип, Знач ИсключаяСсылкиМетаданных = Истина) Экспорт @@ -3290,7 +3278,7 @@ КонецФункции // Не поддерживает имитаторы -Функция ЛиТипОбъектаБДЛкс(Тип) Экспорт +Функция ЛиТипОбъектаБДЛкс(Знач Тип) Экспорт Результат = Ложь; ХмлТип = XMLТип(Тип); @@ -3307,7 +3295,7 @@ КонецФункции -Функция ЛиТипСсылкиТочкиМаршрутаЛкс(Тип) Экспорт +Функция ЛиТипСсылкиТочкиМаршрутаЛкс(Знач Тип) Экспорт XMLТип = XMLТип(Тип); Если XMLТип <> Неопределено Тогда @@ -3319,7 +3307,7 @@ КонецФункции -Функция ЛиТипСсылкиВнешнейТаблицыЛкс(Тип) Экспорт +Функция ЛиТипСсылкиВнешнейТаблицыЛкс(Знач Тип) Экспорт XMLТип = XMLТип(Тип); Если XMLТип <> Неопределено Тогда @@ -3331,69 +3319,6 @@ КонецФункции -// Получить структуру отбора по связям И параметрам выбора -// -// Параметры: -// ЭтотОбъект - - <тип> - -// ПолеФормыИлиРеквизитМетаданных - - <тип> - -// СтруктураТЧ - Структура - один элемент, ключ не играет роли (оставлено для совместимости) -// ДляОчистки - - <тип>, Ложь - -// -// Возвращаемое значение: -// - -// -Функция СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(ПолеФормыИлиРеквизитМетаданных, ЭтотОбъект = Неопределено, СтруктураТЧ = Неопределено, ДляОчистки = Ложь) Экспорт - - Попытка - СвязиПараметровВыбора = ПолеФормыИлиРеквизитМетаданных.СвязиПараметровВыбора; - Исключение - Возврат Новый Структура(); - КонецПопытки; - ПараметрыВыбора = ПолеФормыИлиРеквизитМетаданных.ПараметрыВыбора; - Результат = Новый Структура("Отбор", Новый Структура); - Для Каждого СвязьПараметраВыбора Из СвязиПараметровВыбора Цикл - #Если Сервер И Не Сервер Тогда - СвязьПараметраВыбора = Новый СвязьПараметраВыбора; - #КонецЕсли - Если Истина - И ДляОчистки - И СвязьПараметраВыбора.ИзменениеЗначения = РежимИзмененияСвязанногоЗначения.НеИзменять - Тогда - Продолжить; - КонецЕсли; - ПолныйПутьКДанным = "ЭтотОбъект." + СвязьПараметраВыбора.ПутьКДанным; - Если СтруктураТЧ <> Неопределено Тогда - КлючИЗначениеТЧ = Неопределено; - Для Каждого КлючИЗначение Из СтруктураТЧ Цикл - КлючИЗначениеТЧ = КлючИЗначение; - Прервать; - КонецЦикла; - //Если ирОбщий.СтрокиРавныЛкс(ирОбщий.ПервыйФрагментЛкс(СвязьПараметраВыбора.ПутьКДанным), КлючИЗначениеТЧ.Ключ) Тогда - // ПолныйПутьКДанным = "СтруктураТЧ." + СвязьПараметраВыбора.ПутьКДанным; - //КонецЕсли; - Если СтрЧислоВхождений(СвязьПараметраВыбора.ПутьКДанным, ".") = 1 Тогда - ПолныйПутьКДанным = "СтруктураТЧ." + КлючИЗначениеТЧ.Ключ + "." + ПоследнийФрагментЛкс(СвязьПараметраВыбора.ПутьКДанным); - КонецЕсли; - КонецЕсли; - Попытка - ЗначениеДанных = Вычислить(ПолныйПутьКДанным); - Исключение - // Например поле таблицы или на сервере текущая строка таблицы - Продолжить; - КонецПопытки; - УстановитьВложенноеСвойствоСтруктурыЛкс(Результат, СвязьПараметраВыбора.Имя, ЗначениеДанных); - КонецЦикла; - Для Каждого ПараметрВыбора Из ПараметрыВыбора Цикл - #Если Сервер И Не Сервер Тогда - ПараметрВыбора = Новый ПараметрВыбора; - #КонецЕсли - УстановитьВложенноеСвойствоСтруктурыЛкс(Результат, ПараметрВыбора.Имя, ПараметрВыбора.Значение); - КонецЦикла; - Результат = Результат.Отбор; // Возможно потом перейдем везде на передачу полной структуры - Возврат Результат; - -КонецФункции - Процедура УстановитьВложенноеСвойствоСтруктурыЛкс(Знач НачальнаяСтруктура, Знач ПолноеИмяСвойства, Знач ЗначениеДанных) Фрагменты = СтрРазделитьЛкс("_." + ПолноеИмяСвойства); @@ -3426,11 +3351,16 @@ // Проверка с учетом мультиязычности встроенного языка Функция ЛиТипыРегистровРодственныЛкс(Знач Объект, Знач Подтип, Знач КоличествоСлов) Экспорт - ТипОбразец = ирКэш.ЛюбойТипРегистраЛкс(Подтип); - Если ТипОбразец = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - Результат = ЛиПодтипыТиповРавныЛкс(ТипОбразец, Объект, КоличествоСлов); + Если Найти(Объект, ПеревестиСтроку(Подтип) + ".") > 0 Тогда + // Внешний источник данных + Результат = Истина; + Иначе + ТипОбразец = ирКэш.ЛюбойТипРегистраЛкс(Подтип); + Если ТипОбразец = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + Результат = ЛиПодтипыТиповРавныЛкс(ТипОбразец, Объект, КоличествоСлов); + КонецЕсли; Возврат Результат; КонецФункции @@ -3468,7 +3398,6 @@ Результат = ЛиТипыРегистровРодственныЛкс(Объект, "КлючЗаписи", 2); Возврат Результат; - КонецФункции &НаКлиенте @@ -3531,8 +3460,16 @@ КонецФункции -Функция ЛиТабличнаяЧастьЛкс(Знач ТипЗначенияИлиОбъект) Экспорт - +Функция ЛиТабличнаяЧастьЛкс(Знач ТипЗначенияИлиОбъект, Знач ЗапретитьТип = Ложь) Экспорт + + Если Истина + И ЗапретитьТип + И (Ложь + Или ТипЗнч(ТипЗначенияИлиОбъект) = Тип("Тип") + Или ТипЗнч(ТипЗначенияИлиОбъект) = Тип("ОписаниеТипов")) + Тогда + Возврат Ложь; + КонецЕсли; Результат = ЛиПодтипыТиповРавныЛкс(ирКэш.ЛюбойТипТабличнойЧастиЛкс(), ТипЗначенияИлиОбъект, 2); Возврат Результат; @@ -4000,7 +3937,7 @@ Если ЛиСТабличнымиЧастями Тогда #Если Клиент Тогда Если ЛиСКартинками Тогда - КартинкаРеквизита = БиблиотекаКартинок.ТабличнаяЧасть; + КартинкаРеквизита = БиблиотекаКартинок.ирТабличнаяЧасть; КонецЕсли; #КонецЕсли Для Каждого МетаТабличнаяЧасть Из ОбъектМетаданных.ТабличныеЧасти Цикл @@ -4696,7 +4633,10 @@ ОтборПриемник.Сбросить(); КонецЕсли; Для Каждого ЭлементОтбораИсточник Из ОтборИсточник.Элементы Цикл - Если ЭлементОтбораИсточник.Использование Тогда + Если Истина + И ТипЗнч(ЭлементОтбораИсточник) = Тип("ЭлементОтбораКомпоновкиДанных") + И ЭлементОтбораИсточник.Использование + Тогда ЭлементОтбораПриемник = ОтборПриемник.Найти("" + ЭлементОтбораИсточник.ЛевоеЗначение); Если ЭлементОтбораПриемник <> Неопределено Тогда ИмяВидаСравнения = ирОбщий.СтрЗаменитьЛкс(ПолучитьПолноеИмяПредопределенногоЗначения(ЭлементОтбораИсточник.ВидСравнения), "ВидСравненияКомпоновкиДанных", "ВидСравнения"); @@ -5030,7 +4970,6 @@ Попытка // Для ускорения //Пустышка = Метаданные.ОпределяемыеТипы; // Проверка 8.3 - //Результат = ирОбщий83.ТекущееВремяВМиллисекундахЛкс(); Результат = Вычислить("ТекущаяУниверсальнаяДатаВМиллисекундах()"); Исключение мПлатформа = ирКэш.Получить(); @@ -5976,7 +5915,7 @@ КонецФункции -Процедура ДобавитьСловаПоискаВСтруктуруРеквизитов(Знач ИмяСвойства, Знач Слово, Знач СловаПоСвойствам) +Процедура ДобавитьСловаПоискаВСтруктуруРеквизитовЛкс(Знач ИмяСвойства, Знач Слово, Знач СловаПоСвойствам) Экспорт Слова = Неопределено; Если Не СловаПоСвойствам.Свойство(ИмяСвойства, Слова) Тогда @@ -5998,1514 +5937,18 @@ #КонецЕсли Для Каждого ЭлементОтбора Из Отбор.Элементы Цикл Если Истина + И ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И ЭлементОтбора.Использование И ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит И ЭлементОтбора.ПравоеЗначение <> "" Тогда - ДобавитьСловаПоискаВСтруктуруРеквизитов("" + ЭлементОтбора.ЛевоеЗначение, ЭлементОтбора.ПравоеЗначение, СловаПоСвойствам); + ДобавитьСловаПоискаВСтруктуруРеквизитовЛкс("" + ЭлементОтбора.ЛевоеЗначение, ЭлементОтбора.ПравоеЗначение, СловаПоСвойствам); КонецЕсли; КонецЦикла; Возврат СловаПоСвойствам; КонецФункции -#Если Клиент Тогда - -Процедура ИзменитьОтборКлиентаПоМетаданнымЛкс(ТабличноеПоле, Знач ИмяКолонкиСреднегоИмениМД = "Метаданные", ЭтоКолонкаПолногоИмениМД = Ложь) Экспорт - - лСтруктураПараметров = Новый Структура; - лСтруктураПараметров.Вставить("ОтображатьСсылочныеОбъекты", Истина); - лСтруктураПараметров.Вставить("ОтображатьВнешниеИсточникиДанных", Истина); - лСтруктураПараметров.Вставить("ОтображатьРегистры", Истина); - лСтруктураПараметров.Вставить("ОтображатьПерерасчеты", Истина); - лСтруктураПараметров.Вставить("ОтображатьПеречисления", Истина); - лСтруктураПараметров.Вставить("ОтображатьТабличныеЧасти", Истина); - лСтруктураПараметров.Вставить("ОтображатьКонстанты", Истина); - лСтруктураПараметров.Вставить("ОтображатьВыборочныеТаблицы", Истина); - лСтруктураПараметров.Вставить("ОтображатьРегламентныеЗадания", Истина); - лСтруктураПараметров.Вставить("ОтображатьОтчеты", Истина); - лСтруктураПараметров.Вставить("ОтображатьОбработки", Истина); - лСтруктураПараметров.Вставить("ОтображатьПоследовательности", Истина); - лСтруктураПараметров.Вставить("МножественныйВыбор", Истина); - лДоступныеОбъекты = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле); - лДоступныеОбъекты.Свернуть(ИмяКолонкиСреднегоИмениМД); - лДоступныеОбъекты = лДоступныеОбъекты.ВыгрузитьКолонку(ИмяКолонкиСреднегоИмениМД); - Если ЭтоКолонкаПолногоИмениМД Тогда - ДоступныеОбъекты = Новый Массив; - Для Каждого ПолноеИмяМД Из лДоступныеОбъекты Цикл - СреднееИмяМД = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД,, Ложь); - ДоступныеОбъекты.Добавить(СреднееИмяМД); - КонецЦикла; - Иначе - //лСтруктураПараметров.Вставить("ОтображатьВиртуальныеТаблицы", Истина); - //лСтруктураПараметров.Вставить("ОтображатьТаблицыИзменений", Истина); - ДоступныеОбъекты = лДоступныеОбъекты; - КонецЕсли; - ЭлементОтбора = ТабличноеПоле.ОтборСтрок[ИмяКолонкиСреднегоИмениМД]; - Если Истина - И ЭлементОтбора.Использование - И ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке - Тогда - лНачальноеЗначениеВыбора = ЭлементОтбора.Значение.ВыгрузитьЗначения(); - Если ЭтоКолонкаПолногоИмениМД Тогда - НачальноеЗначениеВыбора = Новый Массив; - Для Каждого ПолноеИмяМД Из лНачальноеЗначениеВыбора Цикл - СреднееИмяМД = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД,, Ложь); - НачальноеЗначениеВыбора.Добавить(СреднееИмяМД); - КонецЦикла; - Иначе - НачальноеЗначениеВыбора = лНачальноеЗначениеВыбора; - КонецЕсли; - Иначе - НачальноеЗначениеВыбора = ДоступныеОбъекты; - КонецЕсли; - мПлатформа = ирКэш.Получить(); - Форма = мПлатформа.ПолучитьФорму("ВыборОбъектаМетаданных"); - лСтруктураПараметров.Вставить("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); - лСтруктураПараметров.Вставить("ДоступныеОбъекты", ДоступныеОбъекты); - Форма.НачальноеЗначениеВыбора = лСтруктураПараметров; - ЗначениеВыбора = Форма.ОткрытьМодально(); - Если ЗначениеВыбора <> Неопределено Тогда - Если ЭтоКолонкаПолногоИмениМД Тогда - ТаблицаВсехТаблицБД = ирКэш.ТаблицаВсехТаблицБДЛкс(); - МассивИменМД = Новый Массив; - Для Каждого СреднееИмяМД Из ЗначениеВыбора Цикл - СтрокаОписанияТаблицы = ТаблицаВсехТаблицБД.Найти(СреднееИмяМД, "ПолноеИмя"); - Если СтрокаОписанияТаблицы <> Неопределено Тогда - МассивИменМД.Добавить(СтрокаОписанияТаблицы.ПолноеИмяМД); - Иначе - МассивИменМД.Добавить(СреднееИмяМД); - КонецЕсли; - КонецЦикла; - Иначе - МассивИменМД = ЗначениеВыбора; - КонецЕсли; - СписокЗначений = Новый СписокЗначений; - СписокЗначений.ЗагрузитьЗначения(МассивИменМД); - ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке; - ЭлементОтбора.Значение = СписокЗначений; - ЭлементОтбора.Использование = Истина; - КонецЕсли; - -КонецПроцедуры - -Процедура ОткрытьДиалогЗаменыИдентификаторовОбъектовЛкс(Знач Объекты) Экспорт - - ФормаОбработки = ирОбщий.ПолучитьФормуЛкс("Обработка.ирПоискДублейИЗаменаСсылок.Форма"); - Дерево = Новый ДеревоЗначений; - Дерево.Колонки.Добавить("Объект"); - Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(Объекты.Количество(), "Создание дублей объектов"); - НачатьТранзакцию(); - Попытка - Для Каждого Объект Из Объекты Цикл - ирОбщий.ОбработатьИндикаторЛкс(Индикатор); - КопияОбъекта = Объект.Ссылка.ПолучитьОбъект(); - ирОбщий.ЗаменитьИдентификаторОбъектаЛкс(КопияОбъекта); - Попытка - КопияОбъекта.ОбменДанными.Загрузка = Истина; - Исключение - СообщитьЛкс("Для узлов планов обмена групповая замена внутренних идентификаторов не поддерживается"); - Возврат; - КонецПопытки; - КопияОбъекта.Записать(); - СтрокаГруппы = Дерево.Строки.Добавить(); - СтрокаЭлемента = СтрокаГруппы.Строки.Добавить(); - СтрокаЭлемента[0] = КопияОбъекта.Ссылка; - СтрокаЭлемента = СтрокаГруппы.Строки.Добавить(); - СтрокаЭлемента[0] = Объект; - КонецЦикла; - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - ЗафиксироватьТранзакцию(); - ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); - ФормаОбработки.ОткрытьДляЗаменыПоДеревуСсылок(Дерево,, Ложь); - ФормаОбработки.ОтключатьКонтрольЗаписи = Истина; - ФормаОбработки.РазрешитьУдалениеСНарушениемСсылочнойЦелостности = Ложь; - -КонецПроцедуры // ПередОткрытием() - -// Оформляет ячейку табличного поля, допускающую значения, не имеющие стандартного отображения в платформе и хранимые отдельно. -// Иными словам колонка отображает данные, хранимые отдельно. -// -// Параметры: -// ОформлениеЯчейки - ОформлениеЯчейки -// Значение - Произвольный - значение для отображения. -// -Процедура ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеЯчейки, Знач Значение = Неопределено, КолонкаТабличногоПоля = Неопределено, ВыводитьПиктограммуТипа = Истина) Экспорт - - Если Значение = Неопределено Тогда - Значение = ОформлениеЯчейки.Значение; - КонецЕсли; - Если ВыводитьПиктограммуТипа Тогда - ТипЗначения = ТипЗнч(Значение); - Если Истина - И ТипЗначения = Тип("Булево") - И ОформлениеЯчейки.ОтображатьФлажок - Тогда - // - Иначе - КартинкаТипа = КартинкаТипаЛкс(ТипЗначения); - Если КартинкаТипа <> Неопределено Тогда - ОформлениеЯчейки.УстановитьКартинку(КартинкаТипа); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - РасширенноеПредставление = РасширенноеПредставлениеЗначенияЛкс(Значение, КолонкаТабличногоПоля); - Если Ложь - Или ОформлениеЯчейки.Текст = РасширенноеПредставление - Тогда - Возврат; - КонецЕсли; - //ОформлениеЯчейки.ТолькоПросмотр = Истина; - //ОформлениеЯчейки.ЦветФона = ПолучитьЦветСтиляЛкс("ирЦветФонаРасширенногоПредставленияЗначения"); - ОформлениеЯчейки.УстановитьТекст(РасширенноеПредставление); - -КонецПроцедуры - -// Находит файлы в иерархии заданного каталога локальной файловой системы. -// -// Параметры: -// Путь - Строка; -// Маска - Строка. -// -// Возвращаемое значение: -// Массив - элементы типа Файл. -// -Функция НайтиФайлыВИерархииЛкс(Путь, Маска) Экспорт - - НайденныеКаталоги = НайтиФайлы(Путь, "*.*"); - МассивРезультатов = Новый Массив; - Для каждого НайденныйФайл Из НайденныеКаталоги Цикл - Если НайденныйФайл.ЭтоКаталог() Тогда - МассивРезультатов.Добавить(НайтиФайлыВИерархииЛкс(НайденныйФайл.ПолноеИмя, Маска)); - КонецЕсли; - КонецЦикла; - МассивРезультатов.Добавить(НайтиФайлы(Путь, Маска)); - Результат = Новый Массив; - Для Каждого ЭлементРезультат Из МассивРезультатов Цикл - Для Каждого Файл Из ЭлементРезультат Цикл - Результат.Добавить(Файл); - КонецЦикла; - КонецЦикла; - Возврат Результат; - -КонецФункции - -// Проверяет, является ли тип типом элемента формы. -// -// Параметры: -// пТип - Тип - проверяемый тип. -// -// Возвращаемое значение: -// Истина - тип элемента формы подтвержден; -// Ложь - тип элемента формы не подтвержден. -// -Функция ЛиТипЭлементаФормыЛкс(пТип) Экспорт - - Если Ложь - ИЛИ пТип = Тип("Индикатор") - ИЛИ пТип = Тип("Кнопка") - ИЛИ пТип = Тип("КоманднаяПанель") - ИЛИ пТип = Тип("Надпись") - ИЛИ пТип = Тип("Панель") - ИЛИ пТип = Тип("Переключатель") - ИЛИ пТип = Тип("ПолеВвода") - ИЛИ пТип = Тип("ПолеВыбора") - ИЛИ пТип = Тип("ПолеСписка") - ИЛИ пТип = Тип("ПолеТекстовогоДокумента") - ИЛИ пТип = Тип("ПолеТабличногоДокумента") - ИЛИ пТип = Тип("ПолосаРегулирования") - ИЛИ пТип = Тип("ТабличноеПоле") - ИЛИ пТип = Тип("РамкаГруппы") - ИЛИ пТип = Тип("Флажок") - Тогда - Возврат Истина; - КонецЕсли; - Возврат Ложь; - -КонецФункции // ЛиТипЭлементаФормыЛкс() - -// Сообщает об ошибке в тексте запроса и устанавливает выделение на ошибочную строку, если это возможно. -// -// Параметры: -// *ПолеТекста - ПолеТекста, *Неопределено; -// *СтартоваяСтрока - Число, *0 - стартовое смещение строки; -// *СтартоваяКолонка - Число, *0 - стартовое смещение колонки; -// *ЯзыкПрограммы - Число, *0 - признак обработки ошибки при установке текста запроса; -// *ЛиМодально - Булево, *Ложь - модальный режим формы - будет использовано Предупреждение() вместо СообщитьЛкс(). -// *ИнформацияОбОшибке - ИнформацияОбОшибке, *Неопределено; -// *ИмяМодуля - Строка, *Неопределено - имя модуля в котором произошла ошибка. -// -// Возвращаемое значение: -// Строка - истинное описание ошибки. -// -Функция ПоказатьОшибкуВТекстеПрограммыЛкс(Знач ПолеТекста = Неопределено, - СтартоваяСтрока = 0, СтартоваяКолонка = 0, ЯзыкПрограммы = 0, ЛиМодально = Ложь, ИнформацияОбОшибке = Неопределено, - ИмяМодуля = Неопределено, ПредставлениеКонтекста = "", ЭтаФорма = Неопределено) Экспорт - - ПолеТекста = ОболочкаПоляТекстаЛкс(ПолеТекста); - #Если Сервер И Не Сервер Тогда - ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - Если ЭтаФорма <> Неопределено Тогда - // Баг платформы. Зависает приложение, если пытаемся установить выделение на невидимой странице. - ЭтаФорма.ТекущийЭлемент = ПолеТекста.ЭлементФормы; - КонецЕсли; - НомерСтроки = 0; - Если ИмяМодуля <> Неопределено Тогда - Вступление = Символы.Таб; - Иначе - Вступление = ""; - КонецЕсли; - Если ИнформацияОбОшибке = Неопределено Тогда - ИнформацияОбОшибке = ИнформацияОбОшибке(); - КонецЕсли; - ОписаниеОшибки = ПодробноеПредставлениеОшибкиЛкс(ИнформацияОбОшибке); - ВОписанииОшибкиЕстьПередачаМутабельногоЗначенияЛкс(ОписаниеОшибки, Истина, ЛиМодально); - Если Истина - И ЯзыкПрограммы = 0 - И ИмяМодуля <> Неопределено - И ИнформацияОбОшибке.ИмяМодуля <> ИмяМодуля - Тогда - ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); - Возврат ОписаниеОшибки; - КонецЕсли; - Если ЯзыкПрограммы = 2 Тогда - Пока ИнформацияОбОшибке.Причина <> Неопределено Цикл - ИнформацияОбОшибке = ИнформацияОбОшибке.Причина; - КонецЦикла; - Выражение = ""; - Если Выражение = "" Тогда - Маркер = "Ошибка в выражении """; - Если Найти(НРег(ИнформацияОбОшибке.Описание), Нрег(Маркер)) = 1 Тогда - Выражение = Сред(ИнформацияОбОшибке.Описание, СтрДлина(Маркер) + 2, СтрДлина(ИнформацияОбОшибке.Описание) - СтрДлина(Маркер) - 3); - КонецЕсли; - КонецЕсли; - Если Выражение = "" Тогда - Маркер = "Поле не найдено """; - Если Найти(НРег(ИнформацияОбОшибке.Описание), Нрег(Маркер)) = 1 Тогда - МаркерНайден = Истина; - Выражение = Сред(ИнформацияОбОшибке.Описание, СтрДлина(Маркер) + 1, СтрДлина(ИнформацияОбОшибке.Описание) - СтрДлина(Маркер) - 1); - КонецЕсли; - КонецЕсли; - Если Выражение <> "" Тогда - ТекстПоля = ПолеТекста.ПолучитьТекст(); - ПозицияВыражения = Найти(ТекстПоля, Выражение); - Если ПозицияВыражения > 0 Тогда - ПолеТекста.УстановитьГраницыВыделения(ПозицияВыражения, ПозицияВыражения + СтрДлина(Выражение)); - Пустышка = 0; - НомерСтроки = 0; - ПолеТекста.ПолучитьГраницыВыделения(НомерСтроки, Пустышка, Пустышка, Пустышка); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Истина - И ИнформацияОбОшибке.Причина <> Неопределено - И ИнформацияОбОшибке.ИмяМодуля <> "" - И ИнформацияОбОшибке.ИмяМодуля <> ИмяМодуля - Тогда - ФигурноеОписаниеОшибки = СтрокаМеждуМаркерамиЛкс(ИнформацияОбОшибке.Причина.Описание, "{", "}", Ложь); - Если Истина - И ФигурноеОписаниеОшибки <> Неопределено - //И ИнформацияОбОшибке.Причина.ИмяМодуля <> "" // В закомментированном виде в некоторых случаях неоправдано спускается до ошибки в запросе в модуле, а в раскомментированном ломает нахождение ошибки в строке алгоритма - Тогда - ИнформацияОбОшибке = ИнформацияОбОшибке.Причина; - КонецЕсли; - КонецЕсли; - Если Истина - И ЯзыкПрограммы = 0 - И ИнформацияОбОшибке.ИмяМодуля <> "" - И ИнформацияОбОшибке.ИмяМодуля <> ИмяМодуля - Тогда - ПоказатьИнформациюОбОшибке(ИнформацияОбОшибке); - Возврат ПодробноеПредставлениеОшибкиЛкс(ИнформацияОбОшибке); - КонецЕсли; - МаксимальныйНомерСтроки = 100000; - Если ПолеТекста <> Неопределено Тогда - МаксимальныйНомерСтроки = ПолеТекста.КоличествоСтрок(); - КонецЕсли; - ФигурноеОписаниеОшибки = СтрокаМеждуМаркерамиЛкс(ИнформацияОбОшибке.Описание, "{", "}", Ложь); - ОписаниеОшибки = ИнформацияОбОшибке.Описание; - Если НомерСтроки = 0 Тогда - НомерСтроки = Мин(ИнформацияОбОшибке.НомерСтроки + СтартоваяСтрока, МаксимальныйНомерСтроки); - Если ИнформацияОбОшибке.ИсходнаяСтрока = "" Тогда - СтрокаКоординатыОшибки = СтрокаМеждуМаркерамиЛкс(ФигурноеОписаниеОшибки, "(", ")", Ложь); - Если СтрокаКоординатыОшибки <> Неопределено Тогда - НомерКолонки = 0; - МассивФрагментов = СтрРазделитьЛкс(СтрокаКоординатыОшибки, ","); - СтрокаНомерСтроки = МассивФрагментов[0]; - Попытка - НомерСтроки = Число(СтрокаНомерСтроки); - Исключение - КонецПопытки; - НомерСтроки = Мин(НомерСтроки + СтартоваяСтрока, МаксимальныйНомерСтроки); - Если МассивФрагментов.Количество() > 1 Тогда - СтрокаНомерКолонки = МассивФрагментов[1]; - Попытка - НомерКолонки = Число(СтрокаНомерКолонки); - Исключение - КонецПопытки; - НомерКолонки = НомерКолонки + СтартоваяКолонка; - КонецЕсли; - Если НомерСтроки = 0 Тогда - НомерКолонки = 1; - НомерСтроки = 1; - КонецЕсли; - ОписаниеОшибки = СтрЗаменить(ОписаниеОшибки, ФигурноеОписаниеОшибки, "(" + НомерСтроки + "," + НомерКолонки + ")"); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Истина - И ЯзыкПрограммы = 0 - И НомерСтроки <= 0 - Тогда - Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда - ОписаниеОшибки = "Ошибка передачи переменной: " + ОписаниеОшибки; - Иначе - ОписаниеОшибки = "Ошибка без описания"; - КонецЕсли; - Иначе - ОписаниеОшибки = "Строка кода " + НомерСтроки + ": " + ОписаниеОшибки; - КонецЕсли; - Если ИнформацияОбОшибке.Причина <> Неопределено Тогда - ОписаниеОшибки = ОписаниеОшибки + ": " + ПодробноеПредставлениеОшибкиЛкс(ИнформацияОбОшибке.Причина); - КонецЕсли; - ТекстСообщения = ""; - Если ПолеТекста <> Неопределено Тогда - Если НомерСтроки > 0 Тогда - ПолеТекста.ПоказатьОшибку(НомерСтроки, НомерКолонки); - КонецЕсли; - ТекстСообщения = ТекстСообщения + ПредставлениеИзИдентификатораЛкс(ПолеТекста.ЭлементФормы.Имя) + ПредставлениеКонтекста; - ТекстСообщения = ТекстСообщения + ": " + ОписаниеОшибки; - ПолныйТекстСообщения = Вступление + ТекстСообщения; - СообщитьЛкс(ПолныйТекстСообщения, СтатусСообщения.Важное); - Иначе - ПолныйТекстСообщения = Вступление + ТекстСообщения; - СообщитьЛкс(ПолныйТекстСообщения, СтатусСообщения.Важное); - КонецЕсли; - Возврат ПолныйТекстСообщения; - -КонецФункции - -Функция ВОписанииОшибкиЕстьПередачаМутабельногоЗначенияЛкс(Знач ОписаниеОшибки, ЭтоПроизвольныйАлгоритм = Ложь, Знач ЛиМодально = Ложь) Экспорт - - Результат = Ложь; - Если Истина - //И (Ложь - // Или Не ирКэш.ЛиПортативныйРежимЛкс() - // Или ирПортативный.ЛиСерверныйМодульДоступенЛкс()) - И Найти(ОписаниеОшибки, "мутабельн") > 0 - И Найти(ОписаниеОшибки, "Записать") > 0 - Тогда - ТекстСообщения = "Чтобы избежать ошибки передачи мутабельного значения при записи объектов, используйте "; - Если ирКэш.ЛиПортативныйРежимЛкс() И Не ирПортативный.ЛиСерверныйМодульДоступенЛкс() Тогда - ТекстСообщения = ТекстСообщения + " вариант ""Расширение"" http://devtool1c.ucoz.ru/index/rasshirenie_variant/0-52"; - Иначе - Если ЭтоПроизвольныйАлгоритм Тогда - ТекстСообщения = ТекстСообщения + "функцию ""ирОбщий.ЗаписатьОбъектЛкс(Объект, Истина)"""; - Иначе - ТекстСообщения = ТекстСообщения + "опцию ""Запись на сервере"" инструмента"; - КонецЕсли; - КонецЕсли; - СообщитьЛкс(ТекстСообщения, СтатусСообщения.Внимание); - Результат = Истина; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Рассчитывает и устанавливает ширину колонок табличного документа. Ориентирована на обработку -// результата построителя отчета. -// -// Параметры: -// ТабличныйДокумент - ТабличныйДокумент; -// *ЛиМинимальный - Булево, *Ложь - признак установки необходимой ширины, иначе достаточной; -// *ЛиИгнорироватьОбразание - Булево, *Ложь - признак игнорирования ячеек с обрезанием; -// *ШиринаОбластиПолей - Число, *0 - ширина области полей (не показателей); -// *РассчитыватьШиринуКолонкиПоНазванию - Булево, *Истина - признак расчета ширины колонки по названию; -// *МинимальнаяШиринаКолонкиПоказатель - Число, *10 - минимальная ширина колонки показателя; -// *ПорогКоличестваЯчеекДляАнализа - Число, *100000 - пороговое количество ячеек для анализа (усечение по высоте). -// -Процедура УстановитьАвтоширинуКолонокТабличногоДокументаЛкс(ТабличныйДокумент, ЛиМинимальный = Ложь, - ЛиИгнорироватьОбрезание = Ложь, ШиринаОбластиПолей = 0, РассчитыватьШиринуКолонкиПоНазванию = Ложь, - МинимальнаяШиринаКолонкиПоказатель = 10, ПорогКоличестваЯчеекДляАнализа = 10000) Экспорт - - Перем МаксимальнаяШиринаКолонки; - Перем КонечнаяСтрока, НачальнаяСтрока, ТекущаяКолонка, ТекущаяСтрока, НачалоДанных; - Перем ОбластьШапки, ОбластьПодвала; - Перем ШиринаКолонки, ТекстЯчейки, НомерСтрокиТекста; - Перем КоличествоУровнейГруппировокСтрок, Отступ; - Перем ШириныКолонок; - - СтрокаСостояния = "Расчет ширины колонок табличного документа "; - КоличествоОбновленийСостояния = 10; - - // Ограничение максимальной ширины колонки - МаксимальнаяШиринаКолонки = 50; - - // Массив, в который будут помещаться ширины колонок - ШириныКолонок = Новый Массив; - - // Получим количество уровней группировок в отчете для учета автоматического отступа - КоличествоУровнейГруппировокСтрок = ТабличныйДокумент.КоличествоУровнейГруппировокСтрок(); - - // Инициализируем начальные строки - НачальнаяСтрока = 0; - НачалоДанных = 0; - - // Найдем в результирующем документе область шапки таблицы - ОбластьШапки = ТабличныйДокумент.Области.Найти("ШапкаТаблицы"); - - Если ТипЗнч(ОбластьШапки) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда - - // Из шапки таблицы получим начальную строку с которой будем рассчитывать ширины - НачальнаяСтрока = ОбластьШапки.Верх; - НачалоДанных = ОбластьШапки.Низ + 1; - - Иначе - - // Если область шапки таблицы не найдена, найдем область шапки строк - ОбластьШапки = ТабличныйДокумент.Области.Найти("ШапкаСтрок"); - - Если ТипЗнч(ОбластьШапки) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда - - // Из шапки таблицы получим начальную строку с которой будем рассчитывать ширины - НачальнаяСтрока = ОбластьШапки.Верх; - НачалоДанных = ОбластьШапки.Низ + 1; - - КонецЕсли; - - КонецЕсли; - - // Получим область подвала отчета и вычислим конечную строку расчета - ОбластьПодвала = ТабличныйДокумент.Области.Найти("Подвал"); - - Если ТипЗнч(ОбластьПодвала) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда - - // Область подвала найдена - КонечнаяСтрока = ОбластьПодвала.Верх - 1; - - Иначе - - // Область подвала не найдена - КонечнаяСтрока = ТабличныйДокумент.ВысотаТаблицы; - - КонецЕсли; - - СтарыйПрогресс = 0; - - КоличествоЯчеекПоказателейДляРасчета = (КонечнаяСтрока - НачальнаяСтрока) * (ТабличныйДокумент.ШиринаТаблицы - 1); - Если КоличествоЯчеекПоказателейДляРасчета > ПорогКоличестваЯчеекДляАнализа Тогда - КонечнаяСтрока = Мин(КонечнаяСтрока, ПорогКоличестваЯчеекДляАнализа / (ТабличныйДокумент.ШиринаТаблицы - 1)); - КонецЕсли; - - // Переберем все колонки отчета - Для ТекущаяКолонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл - ПрогрессКолонок = ТекущаяКолонка / ТабличныйДокумент.ШиринаТаблицы / КонечнаяСтрока; - АвтоОтступ = 0; - // Переберем строки, которые будут использованы для расчета ширин колонок - Для ТекущаяСтрока = НачальнаяСтрока По КонечнаяСтрока Цикл - - ОбработкаПрерыванияПользователя(); - Прогресс = КоличествоОбновленийСостояния * ПрогрессКолонок * ТекущаяСтрока; - Если Прогресс - СтарыйПрогресс >= 1 Тогда - СтарыйПрогресс = Прогресс; - СостояниеЛкс(СтрокаСостояния + Цел(100 * ПрогрессКолонок * ТекущаяСтрока) + "%"); - КонецЕсли; - ШиринаКолонки = 0; - - // Получим область текущей ячейки - ОбластьЯчейки = ТабличныйДокумент.Область(ТекущаяСтрока, ТекущаяКолонка); - - Если ОбластьЯчейки.Лево <> ТекущаяКолонка Или ОбластьЯчейки.Верх <> ТекущаяСтрока Тогда - // Данная ячейка принадлежит объединенным ячейкам и не является начальной ячейкой - Продолжить; - КонецЕсли; - - // Данная ячейка обрезает текст - Если Истина - И ЛиИгнорироватьОбрезание - И ОбластьЯчейки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать - Тогда - Продолжить; - КонецЕсли; - - Если КоличествоУровнейГруппировокСтрок > 0 И ТекущаяСтрока = НачалоДанных Тогда - // Для первой строки с данными получим значение автоотступа - АвтоОтступ = ОбластьЯчейки.АвтоОтступ; - КонецЕсли; - - // Получим текст ячейки - ТекстЯчейки = ОбластьЯчейки.Текст; - - КоличествоСтрокВТекстеЯчейки = СтрЧислоСтрок(ТекстЯчейки); - ТекстЯчейкиТД = Новый ТекстовыйДокумент; - ТекстЯчейкиТД.УстановитьТекст(ТекстЯчейки); - - // Для каждой строки из текста ячейки рассчитаем количество символов в строке - Для НомерСтрокиТекста = 1 По КоличествоСтрокВТекстеЯчейки Цикл - ШиринаТекстаЯчейки = СтрДлина(ТекстЯчейкиТД.ПолучитьСтроку(НомерСтрокиТекста)); - Если Истина - И НЕ РассчитыватьШиринуКолонкиПоНазванию - И ТекущаяСтрока < НачалоДанных - И ШиринаТекстаЯчейки > 0 - Тогда - ШиринаТекстаЯчейки = МинимальнаяШиринаКолонкиПоказатель; - КонецЕсли; - // Если используется автоотступ, то прибавим к ширине ячейки его величину - Если АвтоОтступ <> Неопределено И АвтоОтступ > 0 Тогда - ШиринаТекстаЯчейки = ШиринаТекстаЯчейки + КоличествоУровнейГруппировокСтрок * АвтоОтступ; - КонецЕсли; - ШиринаКолонки = Макс(ШиринаКолонки, ШиринаТекстаЯчейки); - КонецЦикла; - - Если ШиринаКолонки > МаксимальнаяШиринаКолонки Тогда - // Ограничим ширину колонки - ШиринаКолонки = МаксимальнаяШиринаКолонки; - КонецЕсли; - - Если ШиринаКолонки <> 0 Тогда - // Ширина колонки рассчитана - - // Определим, сколько ячеек по ширине используется в области для текущей ячейки - КоличествоКолонок = ОбластьЯчейки.Право - ОбластьЯчейки.Лево; - - // Переберем все ячейки, расположенные в области - Для НомерКолонки = 0 По КоличествоКолонок Цикл - - Если ШириныКолонок.ВГраница() >= ТекущаяКолонка - 1 + НомерКолонки Тогда - - // В массиве ширин колонок уже был элемент для текущей колонки - Если ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = Неопределено Тогда - - // Значение ширины колонки еще не было установлено - ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = ШиринаКолонки / (КоличествоКолонок + 1); - - Иначе - - // Значение ширины колонки уже было установлено - // Вычислим максимум ширины колонки - ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки] = - Макс(ШириныКолонок[ТекущаяКолонка - 1 + НомерКолонки], ШиринаКолонки / (КоличествоКолонок + 1)); - - КонецЕсли; - - Иначе - - // В массиве ширин колонок еще не было элемента для данной колонки - // Добавим элемент в массив ширин колонок - ШириныКолонок.Вставить(ТекущаяКолонка - 1 + НомерКолонки, ШиринаКолонки / (КоличествоКолонок + 1)); - - КонецЕсли; - - КонецЦикла; - - КонецЕсли; - - КонецЦикла; // Конец цикла перебора строк - - КонецЦикла; // Конец цикла перебора колонок - - // Переберем все элементы в массиве вычисленных ширин колонок - Для ТекущаяКолонка = 0 По ШириныКолонок.ВГраница() Цикл - - Если ШиринаОбластиПолей >= ТекущаяКолонка Тогда - УстановитьМинимальнуюШирину = Ложь; - Иначе - УстановитьМинимальнуюШирину = ЛиМинимальный; - КонецЕсли; - - Если ШириныКолонок[ТекущаяКолонка] <> Неопределено Тогда - - ОбластьКолонки = ТабличныйДокумент.Область(, ТекущаяКолонка + 1, НачалоДанных, ТекущаяКолонка + 1); - - // Ширина колонок установлена - // Установим ширину области ячеек - Если УстановитьМинимальнуюШирину Тогда - ОбластьКолонки.ШиринаКолонки = Макс(ШириныКолонок[ТекущаяКолонка] + 1, МинимальнаяШиринаКолонкиПоказатель); - Иначе - ОбластьКолонки.ШиринаКолонки = ШириныКолонок[ТекущаяКолонка] + 1; - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - - СостояниеЛкс(""); - -КонецПроцедуры // УстановитьАвтоширинуКолонокТабличногоДокументаЛкс() - -// Устанавливает отбор построителя по расшифровке, содержащей NULL'ы. -// Устанавливает значение каждого NULL элемента отбора в "<Отсутствует>" и вид сравнения в "Равно". -// Для измерений, которые могут содержать значение "NULL" в запросах в секции условий построителя следует -// писать "ЕСТЬNULL(ПутьКДаннымИзмерения, "<Отсутствует>") КАК ИмяИзмерения". -// -// Параметры: -// пПостроительОтчета - ПостроительОтчета - чей отбор обрабатываем; -// пРасшифровка - Структура - расшифровка. -// -Процедура УстановитьОтборПостроителяПриРасшифровкеЛкс(пПостроительОтчета, пРасшифровка) Экспорт - - Для каждого ЭлементРасшифровки Из пРасшифровка Цикл - Если ЭлементРасшифровки.Значение = NULL Тогда - ЭлементОтбора = пПостроительОтчета.Отбор[ЭлементРасшифровки.Ключ]; - Если ЭлементОтбора.ТипЗначения.СодержитТип(Тип("Строка")) Тогда - ЭлементОтбора.Значение = "<Отсутствует>"; - Если ЭлементОтбора.ВидСравнения = ВидСравнения.ВИерархии Тогда - ЭлементОтбора.ВидСравнения = ВидСравнения.Равно; - КонецЕсли; - Иначе - СообщитьЛкс(СтрШаблонИменЛкс("Запрос не поддерживает расшифровку по отсутствующему значению элемента отбора %1!",, ЭлементОтбора.Представление)); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры // УстановитьОтборПостроителяПриРасшифровкеЛкс() - -// Получает копию построителя отчетов. -// -// Параметры: -// Оригинал - ПостроительОтчета. -// -// Возвращаемое значение: -// - <Тип.Вид> - <описание значения> -// <продолжение описания значения>; -// <Значение2> - <Тип.Вид> - <описание значения> -// <продолжение описания значения>. -// -Функция _СкопироватьПостроительОтчетаЛкс(Оригинал, ВосстанавливатьНастройки = Истина) Экспорт - - Копия = Новый ПостроительОтчета; - Для Каждого ДоступноеПоле Из Оригинал.ДоступныеПоля Цикл - ЗаполнитьЗначенияСвойств(Копия.ДоступныеПоля.Добавить(ДоступноеПоле.Имя, ДоступноеПоле.Представление), ДоступноеПоле); - КонецЦикла; - Если ВосстанавливатьНастройки Тогда - Копия.Текст = Оригинал.Текст; - Копия.ЗаполнитьНастройки(); // Баг платформы. Без этого почему то иногда измерения не восстанавливаются! - Копия.УстановитьНастройки(Оригинал.ПолучитьНастройки()); - КонецЕсли; - Возврат Копия; - -КонецФункции - -// Возвращает менеджер временных таблиц, в котором создана временная таблица по переданному источнику. -// -// Параметры: -// ТаблицаЗначений - ТаблицаЗначений; -// ИмяТаблицы - Строка; -// *МенеджерВременныхТаблиц - МенеджерВременныхТаблиц, *Неопределено. -// -// Возвращаемое значение: -// МенеджерВременныхТаблиц. -// -Функция _МенеджерВременныхТаблицИзТаблицыЛкс(ТаблицаЗначений, ИмяТаблицы, МенеджерВременныхТаблиц = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТаблицаЗначений = Новый ТаблицаЗначений; - #КонецЕсли - Если МенеджерВременныхТаблиц = Неопределено Тогда - МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - КонецЕсли; - ТекстВЫБРАТЬ = ""; - Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл - ТекстВЫБРАТЬ = ТекстВЫБРАТЬ + ", " + Колонка.Имя; - КонецЦикла; - ТекстЗапроса = "ВЫБРАТЬ " + Сред(ТекстВЫБРАТЬ, 3); - ТекстЗапроса = ТекстЗапроса + " ПОМЕСТИТЬ " + ИмяТаблицы; - ТекстЗапроса = ТекстЗапроса + " ИЗ &ВнешнийИсточник КАК ВнешнийИсточник"; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - Запрос.УстановитьПараметр("ВнешнийИсточник", ТаблицаЗначений); - Запрос.Выполнить(); - Возврат МенеджерВременныхТаблиц; - -КонецФункции - -Процедура ПанельИнструментовОПодсистемеЛкс() Экспорт - - ОткрытьСправкуПоПодсистемеЛкс(); - -КонецПроцедуры - -// Открывает обработку ирПоискДублейИЗаменаСсылок и заполняет группы дублей по табличному полю, связанному с таблицей или деревом значений. -// -Процедура ОткрытьФормуЗаменыСсылокИзТабличногоПоляЛкс(ТабличноеПоле) Экспорт - - Если ТабличноеПоле.ТекущаяКолонка = Неопределено Тогда - Возврат; - КонецЕсли; - ФормаОбработки = ПолучитьФормуЛкс("Обработка.ирПоискДублейИЗаменаСсылок.Форма"); - Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ТаблицаЗначений") Тогда - ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; - СписокВыбора = Новый СписокЗначений; - СписокВыбора.Добавить(0, "Создать группы дублей из пар неправильных значений текущей и правильных значений следующей колонок"); - СписокВыбора.Добавить(1, "Создать одну группу дублей из значений текущей колонки выделенных строк"); - //СписокВыбора.Добавить(2, "Создать правила замены значений из текущей колонки на значения следующей колонки"); - ВыбранныйВариант = СписокВыбора.ВыбратьЭлемент("Выберите вариант"); - Если ВыбранныйВариант = Неопределено Тогда - Возврат; - КонецЕсли; - Если ВыбранныйВариант.Значение = 1 Тогда - Если ВыделенныеСтроки.Количество() = 0 Тогда - Возврат ; - КонецЕсли; - ИмяКолонки = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда - Возврат; - КонецЕсли; - МассивСсылок = Новый Массив; - Для Каждого Строка Из ВыделенныеСтроки Цикл - ЗначениеСтроки = Строка[ИмяКолонки]; - ТипЗначения = ТипЗнч(ЗначениеСтроки); - Если Метаданные.НайтиПоТипу(ТипЗначения) = Неопределено Тогда - Продолжить; - КонецЕсли; - МассивСсылок.Добавить(ЗначениеСтроки); - КонецЦикла; - ФормаОбработки.ОткрытьДляЗаменыПоСпискуСсылок(МассивСсылок,, 0); - ИначеЕсли ВыбранныйВариант.Значение = 0 Тогда - ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка; - Если Ложь - Или ТекущаяКолонка = Неопределено - Или ТекущаяКолонка.Данные = "" - Тогда - Возврат; - КонецЕсли; - ИндексКолонки = ТабличноеПоле.Колонки.Индекс(ТекущаяКолонка); - Если ТабличноеПоле.Колонки.Количество() = ИндексКолонки + 1 Тогда - Возврат; - КонецЕсли; - СледующаяКолонка = ТабличноеПоле.Колонки[ИндексКолонки + 1]; - Если СледующаяКолонка.Данные = "" Тогда - Возврат; - КонецЕсли; - ФормаОбработки.ОткрытьСЗаполнениемГруппДублейПоТаблицеПар(ТабличноеПоле.Значение, ТекущаяКолонка.Данные, СледующаяКолонка.Данные); - КонецЕсли; - ИначеЕсли ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда - ФормаОбработки.ОткрытьДляЗаменыПоДеревуСсылок(ТабличноеПоле.Значение, ТабличноеПоле.ТекущаяКолонка.Имя); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ТЕХНОЛОГИЯ КОМПОНЕНТ - -// Возвращает кнопку командной панели компоненты по ее имени из макета. -// -// Параметры: -// ОбъектКомпоненты - ОбработкаОбъект - компонента; -// КраткоеИмяКнопки - Строка - имя кнопки из макета компоненты; -// *КоманднаяПанель - КоманднаяПанель, *Неопределено - на случай, если у компоненты несколько командных панелей. -// -// Возвращаемое значение: -// Кнопка. -// -Функция КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ОбъектКомпоненты, КраткоеИмяКнопки, - Знач КоманднаяПанель = Неопределено) Экспорт - - Если КоманднаяПанель = Неопределено Тогда - КоманднаяПанель = ОбъектКомпоненты.КоманднаяПанель; - КонецЕсли; - Если КоманднаяПанель = Неопределено Тогда - // Был вызван деструктор - Возврат Неопределено; - КонецЕсли; - ПолноеИмяКнопки = СформироватьИмяЭлементаУправленияЭкземпляраЛкс(ОбъектКомпоненты, КраткоеИмяКнопки); - Кнопка = КоманднаяПанель.Кнопки.Найти(ПолноеИмяКнопки); - Если Кнопка = Неопределено Тогда - Для Каждого Подменю Из КоманднаяПанель.Кнопки Цикл - Если Подменю.ТипКнопки <> ТипКнопкиКоманднойПанели.Подменю Тогда - Продолжить; - КонецЕсли; - Кнопка = КнопкаКоманднойПанелиЭкземпляраКомпонентыЛкс(ОбъектКомпоненты, КраткоеИмяКнопки, Подменю); - Если Кнопка <> Неопределено Тогда - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Возврат Кнопка; - -КонецФункции - -// Формирует имя элемента управления экземпляра компоненты. -// -// Параметры: -// ИмяКласса - Строка; -// ИмяЭкземпляра - Строка; -// КраткоеИмяЭлементаУправления - Строка. -// -// Возвращаемое значение: -// Строка - имя. -// -Функция СформироватьИмяЭлементаУправленияЭкземпляраЛкс(ОбъектКомпоненты, КраткоеИмяЭлементаУправления) Экспорт - - Возврат ПрефиксИменЭлементовЭкземпляраКомпонентыЛкс(ОбъектКомпоненты) + КраткоеИмяЭлементаУправления; - -КонецФункции - -Функция ПрефиксИменЭлементовЭкземпляраКомпонентыЛкс(ОбъектКомпоненты) Экспорт - - Возврат ОбъектКомпоненты.ИмяКласса + "_" + ОбъектКомпоненты.Имя + "_"; - -КонецФункции // СформироватьИмяЭлементаУправленияЭкземпляраЛкс() - -Функция НоваяТаблицуСобытийЭлементаУправленияКомпонентыЛкс() Экспорт - - ТаблицаСобытий = Новый ТаблицаЗначений; - ТаблицаСобытий.Колонки.Добавить("СобытиеОбъекта"); - ТаблицаСобытий.Колонки.Добавить("БлижайшийВидАлгоритма"); - ТаблицаСобытий.Колонки.Добавить("ИмяСобытия"); - ТаблицаСобытий.Колонки.Добавить("Компонента"); - ТаблицаСобытий.Колонки.Добавить("ВызовОбработчика"); - Возврат ТаблицаСобытий; - -КонецФункции - -// Добавляет в кнопки командной панели приемника коллекцию кнопок командной панели источника. -// -// Параметры: -// ОбъектКомпоненты - ОбработкаОбъект - компонента; -// КнопкиМакета - КоллекцияКнопокКоманднойПанели - источник; -// КнопкиПриемника - КоллекцияКнопокКоманднойПанели - приемник; -// *ДействияКнопокКомпонент - ТаблицаЗначений, *Неопределено; -// -Процедура ДобавитьКнопкиКоманднойПанелиКомпонентыЛкс(ОбъектКомпоненты, КнопкиМакета, КнопкаПриемника, - ДействияКнопокКомпонент = Неопределено, ОбщийПриемник = Неопределено, НеДобавлятьЕслиСуществует = Ложь) Экспорт - - КнопкиПриемника = КнопкаПриемника.Кнопки; - ИмяКласса = ОбъектКомпоненты.ИмяКласса; - Если ДействияКнопокКомпонент = Неопределено Тогда - ДействиеТранслятор = Новый Действие("Клс" + ИмяКласса + "Нажатие"); - Иначе - ЭтоКоманднаяПанель = (ТипЗнч(КнопкаПриемника) = Тип("КоманднаяПанель")); - ДопКнопкиКомандныхПанелей = ОбъектКомпоненты.ДопКнопкиКомандныхПанелей; - ДопКнопкиКоманднойПанели = Новый Массив; - ДопКнопкиКомандныхПанелей.Вставить(КнопкаПриемника.Имя, ДопКнопкиКоманднойПанели); - ДействиеТранслятор = Новый Действие("КнопкаКоманднойПанели_Действие") - КонецЕсли; - ИмяЭкземпляра = ОбъектКомпоненты.Имя; - Для Каждого КнопкаМакета Из КнопкиМакета Цикл - Кнопка = Неопределено; - ИмяКнопкиСПрефиксом = СформироватьИмяЭлементаУправленияЭкземпляраЛкс(ОбъектКомпоненты, КнопкаМакета.Имя); - Если КнопкаМакета.ТипКнопки = ТипКнопкиКоманднойПанели.Действие Тогда - Если Истина - И Строка(КнопкаМакета.Действие) = "" - Тогда - Если НеДобавлятьЕслиСуществует И КнопкиПриемника.Найти(ИмяКнопкиСПрефиксом) <> Неопределено Тогда - Продолжить; - КонецЕсли; - // Это пустое действие - Кнопка = КнопкиПриемника.Добавить(ИмяКнопкиСПрефиксом, КнопкаМакета.ТипКнопки); - ЗаполнитьЗначенияСвойств(Кнопка, КнопкаМакета, , "Действие, Имя"); - //Попытка - Кнопка.Действие = ДействиеТранслятор; - //Исключение - // ОписаниеОшибки = ОписаниеОшибки(); // Для отладки - // Возврат; - //КонецПопытки; - Если ДействияКнопокКомпонент <> Неопределено Тогда - СтрокаДействия = ДействияКнопокКомпонент.Добавить(); - СтрокаДействия.Кнопка = Кнопка; - СтрокаДействия.Компонента = ОбъектКомпоненты; - ВызовОбработчика = "Действие_"; - Если ОбщийПриемник = Неопределено Тогда - ВызовОбработчика = ВызовОбработчика + КнопкаМакета.Имя; - Иначе - ВызовОбработчика = ВызовОбработчика + ОбщийПриемник; - КонецЕсли; - СтрокаДействия.ВызовОбработчика = ВызовОбработчика + "(П0, П1)"; - КонецЕсли; - Иначе - Если НеДобавлятьЕслиСуществует И КнопкиПриемника.Найти(КнопкаМакета.Имя) <> Неопределено Тогда - Продолжить; - КонецЕсли; - Кнопка = КнопкиПриемника.Добавить(КнопкаМакета.Имя, КнопкаМакета.ТипКнопки, , КнопкаМакета.Действие); - // Автокартинки предопределенных действий платформа подключает до вызова ПередОткрытием, а потом они уже пустые - Если КнопкаМакета.Картинка.Вид <> ВидКартинки.Пустая Тогда - Кнопка.Картинка = КнопкаМакета.Картинка; - КонецЕсли; - ЗаполнитьЗначенияСвойств(Кнопка, КнопкаМакета, , "Имя, ТипКнопки, Картинка"); - КонецЕсли; - КонецЕсли; - Если Кнопка = Неопределено Тогда - Если НеДобавлятьЕслиСуществует И КнопкиПриемника.Найти(ИмяКнопкиСПрефиксом) <> Неопределено Тогда - Продолжить; - КонецЕсли; - Кнопка = КнопкиПриемника.Добавить(ИмяКнопкиСПрефиксом); - ЗаполнитьЗначенияСвойств(Кнопка, КнопкаМакета, , "Действие, Имя"); - Если КнопкаМакета.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю Тогда - ДобавитьКнопкиКоманднойПанелиКомпонентыЛкс(ОбъектКомпоненты, КнопкаМакета.Кнопки, Кнопка, ДействияКнопокКомпонент, ОбщийПриемник); - КонецЕсли; - КонецЕсли; - Если Истина - И ДействияКнопокКомпонент <> Неопределено - И ЭтоКоманднаяПанель - Тогда - ДопКнопкиКоманднойПанели.Добавить(Кнопка.Имя); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Возвращает имя экземпляра компоненты, которой принадлежит элемент управления. -// -// Параметры: -// ЭлементУправления - ЭлементУправления. -// -// Возвращаемое значение: -// Строка - имя. -// -Функция ИмяЭкземпляраКомпонентыЛкс(ЭлементУправления) Экспорт - - Результат = СтрРазделитьЛкс(ЭлементУправления.Имя, "_")[1]; - Возврат Результат; - -КонецФункции - -// Устанавливает свойство у элементов коллекции. -// -// Параметры: -// Коллекция - Любая индексированная коллекция; -// МассивИлиСтрока - Массив (индексов), Строка (имена элементов, разделенные запятыми), *Неопределено - фильтр; -// Свойство - Строка - имя Свойства которое нужно установить; если обращение к свойству черех [] недоступно, то нужно указать "-" в начале имени свойства -// ЗначениеСвойства - Произвольный. -// -Процедура УстановитьСвойствоВКоллекцииЛкс(Коллекция, Свойство, ЗначениеСвойства = Неопределено, ИменаЭлементов = Неопределено) Экспорт - - ДоступенИндексСвойств = Лев(Свойство, 1) <> "-"; - Если ИменаЭлементов <> Неопределено Тогда - Если ТипЗнч(ИменаЭлементов) = Тип("Строка") Тогда - МассивИндексов = СтрРазделитьЛкс(ИменаЭлементов, ",", Истина); - Иначе - МассивИндексов = ИменаЭлементов; - КонецЕсли; - Для Каждого ИмяЭлемента Из МассивИндексов Цикл - ЭлементКоллекции = Коллекция[ИмяЭлемента]; - Если ДоступенИндексСвойств Тогда - ЭлементКоллекции[Свойство] = ЗначениеСвойства; - Иначе - Выполнить("ЭлементКоллекции." + Сред(Свойство, 2) + " = ЗначениеСвойства"); - КонецЕсли; - КонецЦикла; - Иначе - Для Каждого ЭлементКоллекции Из Коллекция Цикл - Если ДоступенИндексСвойств Тогда - ЭлементКоллекции[Свойство] = ЗначениеСвойства; - Иначе - Выполнить("ЭлементКоллекции." + Сред(Свойство, 2) + " = ЗначениеСвойства"); - КонецЕсли; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -Функция ОтобратьЭлементыКоллекцииЛкс(Коллекция, СтруктураОтбора = Неопределено) Экспорт - Результат = Новый Массив; - СтрокаСвойств = ""; - Для Каждого ЭлементКоллекции Из Коллекция Цикл - Если СтруктураОтбора = Неопределено Или СравнитьЗначенияСвойствЛкс(ЭлементКоллекции, СтруктураОтбора, СтрокаСвойств) Тогда - Результат.Добавить(ЭлементКоллекции); - КонецЕсли; - КонецЦикла; - Возврат Результат; -КонецФункции - -Процедура ТабличноеПолеКолонокПриВыводеСтрокиЛкс(Знач ОформлениеСтроки, Знач ДанныеСтроки, Знач ИмяКолонкиОписанияТипов = "ТипЗначения") Экспорт - - ИндексКартинки = ИндексКартинкиТипаЗначенияБДЛкс(ДанныеСтроки[ИмяКолонкиОписанияТипов]); - Если ИндексКартинки <> Неопределено Тогда - ОформлениеСтроки.Ячейки[ИмяКолонкиОписанияТипов].ОтображатьКартинку = Истина; - ОформлениеСтроки.Ячейки[ИмяКолонкиОписанияТипов].ИндексКартинки = ИндексКартинки; - КонецЕсли; - -КонецПроцедуры - -// Глобальный обработчик события ПриПолученииДанных для табличных полей доступных полей компоновки. -// -// Параметры: -// ОформленияСтрок - ОформленияСтрок. -// -Процедура ПриПолученииДанныхДоступныхПолейКомпоновкиЛкс(ЭтаФорма, Элемент, ОформленияСтрок, ТабличноеПолеВыбранныхПолей = Неопределено) Экспорт - - //СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - //ОбработчикиПриВыводеСтроки = СлужебныеДанныеФормы.ОбработчикиПриВыводеСтроки; - //ОбработчикПриВыводеСтроки = ОбработчикиПриВыводеСтроки[Элемент.Имя]; - //Если Истина - // И ОбработчикПриВыводеСтроки <> Неопределено - // И Не МетодРеализованЛкс(ЭтаФорма, ОбработчикПриВыводеСтроки) // Сообщение о его отсутствии выдаем в общем обработчике Форма_ПриОткрытии - //Тогда - // ОбработчикПриВыводеСтроки = Неопределено; - //КонецЕсли; - Если Истина - И ТабличноеПолеВыбранныхПолей <> Неопределено - И ОформленияСтрок[0].Ячейки.Найти("Использовано") <> Неопределено - Тогда - ВсеПоляВыбранныхПолей = ирОбщий.ВсеВыбранныеПоляГруппировкиКомпоновкиЛкс(ТабличноеПолеВыбранныхПолей.Значение,,, Истина); - КонецЕсли; - КартинкаРеквизита = ирКэш.КартинкаПоИмениЛкс("ирРеквизит"); - Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл - ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; - Если ДанныеСтроки = Неопределено Тогда - Продолжить; - КонецЕсли; - Ячейки = ОформлениеСтроки.Ячейки; - ЯчейкаТипа = Ячейки.Найти("Тип"); - Если ЯчейкаТипа <> Неопределено Тогда - Ячейки.Тип.УстановитьТекст(ДанныеСтроки.ТипЗначения); - КонецЕсли; - ИндексКартинки = Неопределено; - Попытка - ЭтоПапка = ДанныеСтроки.Папка; - ЭтоРесурс = ДанныеСтроки.Ресурс; - Исключение - ЭтоПапка = Ложь; - ЭтоРесурс = Ложь; - КонецПопытки; - Если ЭтоПапка Тогда - ПапкаСРесурсами = ДанныеСтроки.Элементы.Количество() > 0; - Для каждого ДоступноеПоле Из ДанныеСтроки.Элементы Цикл - Если Не ДоступноеПоле.Ресурс Тогда - ПапкаСРесурсами = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - Если ПапкаСРесурсами Тогда - ИндексКартинки = 17; - КонецЕсли; - КонецЕсли; - Если Не ЭтоРесурс И Не ЭтоПапка Тогда - ИндексКартинки = ИндексКартинкиТипаЗначенияБДЛкс(ДанныеСтроки.ТипЗначения); - КонецЕсли; - Если ИндексКартинки <> Неопределено Тогда - Ячейки[0].ОтображатьКартинку = Истина; - Ячейки[0].ИндексКартинки = ИндексКартинки; - КонецЕсли; - Если Истина - И ВсеПоляВыбранныхПолей <> Неопределено - И ВсеПоляВыбранныхПолей.Найти(ДанныеСтроки.Поле) <> Неопределено - Тогда - Ячейки.Использовано.УстановитьКартинку(КартинкаРеквизита); - КонецЕсли; - Если Ячейки.Найти("Заголовок") <> Неопределено Тогда - Типы = ДанныеСтроки.ТипЗначения.Типы(); - Если Типы.Количество() > 1 Тогда - Ячейки.Заголовок.УстановитьТекст(Ячейки.Заголовок.Текст + " (" + XMLСтрока(Типы.Количество()) + "т)"); - КонецЕсли; - КонецЕсли; - //Если ОбработчикПриВыводеСтроки = Неопределено Тогда - ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); - //Иначе - // Выполнить("ЭтаФорма." + ОбработчикПриВыводеСтроки + "(Элемент, ОформлениеСтроки, ДанныеСтроки);"); - //КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура ОформитьСтрокуДоступногоПоляЛкс(ОформлениеСтроки, СтрокаПоля, Знач СтрокаДоступнойТаблицы = Неопределено, ИмяКолонки = "Заголовок", Знач ЭтоИндекс = Ложь, Использовано = Ложь) Экспорт - - Ячейки = ОформлениеСтроки.Ячейки; - ЭтоСтандартное = Истина - И СтрокаПоля <> Неопределено - И СтрокаПоля.Метаданные = Неопределено - И Не СтрокаПоля.ТипЗначения.СодержитТип(Тип("ТаблицаЗначений")) - И (Ложь - Или СтрокаДоступнойТаблицы = Неопределено - Или (Истина - И СтрокаДоступнойТаблицы.Тип <> "ДвиженияССубконто" - И СтрокаДоступнойТаблицы.Тип <> "ВиртуальнаяТаблица" - И СтрокаДоступнойТаблицы.Тип <> "ВременнаяТаблица" - И СтрокаДоступнойТаблицы.Тип <> "Параметр" - И СтрокаДоступнойТаблицы.Тип <> "Константы")); - ТекстВСкобках = ""; - ЭтоИзмерение = Найти(ПолноеИмяМДПоляТаблицыЛкс(СтрокаПоля), ".Измерение.") > 0; - Если Истина - И СтрокаПоля <> Неопределено - И ИмяКолонки <> "Заголовок" - Тогда - Типы = СтрокаПоля.ТипЗначения.Типы(); - Если Типы.Количество() > 1 Тогда - ТекстВСкобках = ТекстВСкобках + "," + XMLСтрока(Типы.Количество()) + "т"; - КонецЕсли; - КонецЕсли; - Если ЭтоИзмерение Тогда - ТекстВСкобках = ТекстВСкобках + ",Измер"; - ОформлениеСтроки.ЦветФона = Новый Цвет(255, 245, 240); - КонецЕсли; - Если ЭтоСтандартное Тогда - ТекстВСкобках = ТекстВСкобках + ",Станд"; - //ОформлениеСтроки.ЦветФона = Новый Цвет(250, 250, 255); - КонецЕсли; - Если ЭтоИндекс Тогда - ТекстВСкобках = ТекстВСкобках + ",Индекс"; - КонецЕсли; - Если ЗначениеЗаполнено(ТекстВСкобках) Тогда - ТекстВСкобках = " (" + Сред(ТекстВСкобках, 2) + ")"; - Ячейки[ИмяКолонки].УстановитьТекст(Ячейки[ИмяКолонки].Текст + ТекстВСкобках); - КонецЕсли; - Если Использовано И Ячейки.Найти("Использовано") <> Неопределено Тогда - Ячейки.Использовано.УстановитьКартинку(ирКэш.КартинкаПоИмениЛкс("ирРеквизит")); - КонецЕсли; - -КонецПроцедуры - -Процедура УсловноеОформлениеПриВыводеСтрокиЛкс(Знач ЭтаФорма, Знач Элемент, Знач ОформлениеСтроки, Знач ДанныеСтроки, Знач КомпоновщикНастроек = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ДанныеСтроки = Новый НастройкиКомпоновкиДанных; - ДанныеСтроки = ДанныеСтроки.УсловноеОформление.Элементы[0]; - КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; - #КонецЕсли - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); - МассивОформляемыхКолонок = Новый Массив; - //МассивОформляемыхКолонок.Добавить("ОформлениеДляКраткогоОтображенияЭлемента"); - //МассивОформляемыхКолонок.Добавить("ПредставлениеДляКраткогоОтображенияЭлемента"); - //МассивОформляемыхКолонок.Добавить("ОформлениеДляПодробногоОтображенияЭлемента"); - //МассивОформляемыхКолонок.Добавить("ПредставлениеДляПодробногоОтображенияЭлемента"); - МассивОформляемыхКолонок.Добавить("Пример"); - //МассивТекстовыхКолонок = Новый Массив; - //МассивТекстовыхКолонок.Добавить("ОформлениеДляПодробногоОтображенияЭлемента"); - //МассивТекстовыхКолонок.Добавить("ОформлениеДляКраткогоОтображенияЭлемента"); - ИменаКолонокОбласти = Новый Массив; - ИменаКолонокОбласти.Добавить("ОбластиДляКраткогоОтображенияЭлемента"); - ИменаКолонокОбласти.Добавить("ОбластиДляПодробногоОтображенияЭлемента"); - ИменаКолонокОтбора = Новый Массив; - ИменаКолонокОтбора.Добавить("ОтборДляКраткогоОтображенияЭлемента"); - ИменаКолонокОтбора.Добавить("ОтборДляПодробногоОтображенияЭлемента"); - ПараметрФормат = Новый ПараметрКомпоновкиДанных("Format"); - ПараметрТекст = Новый ПараметрКомпоновкиДанных("Text"); - //Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл - // ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; - //: ДанныеСтроки = Новый ("ЭлементУсловногоОформленияКомпоновкиДанных") - Ячейки = ОформлениеСтроки.Ячейки; - ЯчейкаОформления = Ячейки.Пример; - //Для Каждого ИмяКолонки Из МассивТекстовыхКолонок Цикл - // ЯчейкаТекста = Ячейки[ИмяКолонки]; - // Если ЯчейкаТекста.Видимость Тогда - // Прервать; - // КонецЕсли; - //КонецЦикла; - Для Каждого ИмяКолонки Из ИменаКолонокОбласти Цикл - ЯчейкаОбласти = Ячейки[ИмяКолонки]; - Если ЯчейкаОбласти.Видимость Тогда - Прервать; - КонецЕсли; - КонецЦикла; - Для Каждого ИмяКолонки Из ИменаКолонокОтбора Цикл - ЯчейкаОтбор = Ячейки[ИмяКолонки]; - Если ЯчейкаОтбор.Видимость Тогда - Прервать; - КонецЕсли; - КонецЦикла; - ЗначенияПараметров = ДанныеСтроки.Оформление.Элементы; - - ПредставлениеЗначенийПараметра = ""; - Для Каждого ЗначениеПараметра Из ЗначенияПараметров Цикл - Если НЕ ЗначениеПараметра.Использование Тогда - Продолжить; - КонецЕсли; - Если ЗначениеПараметра.Параметр = ПараметрФормат Тогда - ИначеЕсли ЗначениеПараметра.Параметр = ПараметрТекст Тогда - Иначе - Попытка - Выполнить("ЯчейкаОформления." + ЗначениеПараметра.Параметр + " = ЗначениеПараметра.Значение;"); - Исключение - КонецПопытки; - КонецЕсли; - Если ПредставлениеЗначенийПараметра <> "" Тогда - ПредставлениеЗначенийПараметра = ПредставлениеЗначенийПараметра + ", "; - КонецЕсли; - ПредставлениеЗначенийПараметра = ПредставлениеЗначенийПараметра + ЗначениеПараметра.Параметр + "=" + ЗначениеПараметра.Значение; - КонецЦикла; - //Выполнить("ЯчейкаТекста.УстановитьТекст(ПредставлениеЗначенийПараметра);"); - ЯчейкаОформления.УстановитьТекст("Пример"); - - // Антибаг платформы 8.2.13. Если область элемента оформления содержит включенные пустые поля, то представление области выглядит пустым, - // а элемент оформления не будет применяться даже если он включен. Поэтому нужно отобразить такие пустые поля - Если Истина - И ЯчейкаОбласти.Видимость - //И "" + ДанныеСтроки.Поля = "" - И ЯчейкаОбласти.Текст = "" - И ДанныеСтроки.Поля.Элементы.Количество() > 0 - Тогда - Для Каждого Поле Из ДанныеСтроки.Поля.Элементы Цикл - Если Поле.Использование Тогда - ЯчейкаОбласти.УстановитьТекст("<>"); - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если КомпоновщикНастроек <> Неопределено Тогда - Для Каждого Поле Из ДанныеСтроки.Поля.Элементы Цикл - Если Истина - И ЗначениеЗаполнено("" + Поле.Поле) - И КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.НайтиПоле(Поле.Поле) = Неопределено - Тогда - ЯчейкаОбласти.УстановитьКартинку(ирКэш.КартинкаПоИмениЛкс("ирНедоступноеПоле")); - Прервать; - КонецЕсли; - КонецЦикла; - Если ЛиЕстьНеактуальныеПоляВГруппеОтбораЛкс(КомпоновщикНастроек, ДанныеСтроки.Отбор) Тогда - ЯчейкаОтбор.УстановитьКартинку(ирКэш.КартинкаПоИмениЛкс("ирНедоступноеПоле")); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ЛиЕстьНеактуальныеПоляВГруппеОтбораЛкс(Знач КомпоновщикНастроек, Знач ГруппаОтбора) Экспорт - - #Если Сервер И Не Сервер Тогда - КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; - ГруппаОтбора = КомпоновщикНастроек.Настройки.Отбор; - #КонецЕсли - Результат = Ложь; - Для Каждого ЭлементОтбора Из ГруппаОтбора.Элементы Цикл - Если ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - Результат = ЛиЕстьНеактуальныеПоляВГруппеОтбораЛкс(КомпоновщикНастроек, ЭлементОтбора); - Иначе - Результат = КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.НайтиПоле(ЭлементОтбора.ЛевоеЗначение) = Неопределено; - КонецЕсли; - Если Результат Тогда - Прервать; - КонецЕсли; - КонецЦикла; - Возврат Результат; - -КонецФункции - -Процедура ОформитьЯчейкуРазностиЛкс(Знач ОформлениеСтроки, Знач ИмяКолонки = "Разность") Экспорт - - РазностьОбъекта = ОформлениеСтроки.ДанныеСтроки[ИмяКолонки]; - Если ТипЗнч(РазностьОбъекта) = Тип("Число") Тогда - ЦветТекста = Новый Цвет; - Ячейка = ОформлениеСтроки.Ячейки[ИмяКолонки]; - ТекстЯчейки = Ячейка.Текст; - Если РазностьОбъекта > 0 Тогда - ЦветТекста = WebЦвета.Зеленый; - ТекстЯчейки = "+" + ТекстЯчейки; - ИначеЕсли РазностьОбъекта < 0 Тогда - ЦветТекста = WebЦвета.Красный; - КонецЕсли; - Ячейка.ЦветТекста = ЦветТекста; - Ячейка.Текст = ТекстЯчейки; - КонецЕсли; - -КонецПроцедуры - -// Подключает обработчики событий для табличного поля отбора компоновки данных. -// -// Параметры: -// ТабличноеПоле - ТабличноеПоле - отбора компоновки. -// -Процедура ПодключитьОбработчикиСобытийДоступныхПолейКомпоновкиЛкс(ТабличноеПоле) Экспорт - - Обработчик = ТабличноеПоле.ПолучитьДействие("ПриПолученииДанных"); - Если Истина - И Обработчик <> Неопределено - И Не СтрокиРавныЛкс(Обработчик, "ТабличноеПолеПриПолученииДанных") - Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Обнаружено переопределение обработчика ПриПолученииДанных табличного поля %1",, ТабличноеПоле.Имя)); - КонецЕсли; - ТабличноеПоле.УстановитьДействие("ПриПолученииДанных", Новый Действие("ПриПолученииДанныхДоступныхПолей")); - ТабличноеПоле.Колонки[0].КартинкиСтрок = ирКэш.КартинкаПоИмениЛкс("ирТипыДоступныхПолейКомпоновки"); - -КонецПроцедуры - -Процедура УстановитьПолеВПравомЗначенииЭлементаОтбораЛкс(Знач ТабличноеПолеОтбора, Знач ТабличноеПолеДоступныхПолей = Неопределено) Экспорт - - Если ТабличноеПолеДоступныхПолей <> Неопределено И ТабличноеПолеДоступныхПолей.ТекущаяСтрока <> Неопределено Тогда - ПолеКомпоновки = ТабличноеПолеДоступныхПолей.ТекущаяСтрока.Поле; - Иначе - ПолеКомпоновки = Новый ПолеКомпоновкиДанных(""); - КонецЕсли; - ТекущаяСтрока = ТабличноеПолеОтбора.ТекущаяСтрока; - Если ТипЗнч(ТекущаяСтрока) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - Если ТипЗнч(ТекущаяСтрока.ПравоеЗначение) <> Тип("ПолеКомпоновкиДанных") Или ЗначениеЗаполнено("" + ПолеКомпоновки) Тогда - ТекущаяСтрока.ПравоеЗначение = ПолеКомпоновки; - КонецЕсли; - ТабличноеПолеОтбора.ТекущаяКолонка = ТабличноеПолеОтбора.Колонки.ПравоеЗначениеДляКраткогоОтображенияЭлемента; - КонецЕсли; - -КонецПроцедуры - -// Получает макет компоновки данных по схеме с использованием временных таблиц. -// -// Параметры: -// Схема - СхемаКомпоновкиДанных; -// Настройки - НастройкиКомпоновкиДанных; -// *ВнешниеНаборыДанных - Структура, *Неопределено - туда добавляются временные таблицы; -// *ДанныеРасшифровки - ДанныеРасшифровкиКомпоновкиДанных, *Неопределено; -// *ЛиОтладка - Булево, *Ложь - показывать тексты запросов и время выполнения этапов. -// -// Возвращаемое значение: -// МакетКомпоновкиДанных. -// -Функция МакетКомпоновкиДанныхСВременнымиТаблицамиЛкс(Схема, Настройки, ВнешниеНаборыДанных = Неопределено, - ДанныеРасшифровки = Неопределено, ЛиОтладка = Ложь, СвойМакетОформления = Неопределено, ПроверятьДоступностьПолей = Ложь) Экспорт - - RegExp = НовыйВычислительРегВыражений(); - RegExp.Global = Истина; - RegExp.MultiLine = Истина; - RegExp.IgnoreCase = Истина; - // Допустим 1 уровень скобок. - шСкобки = "\([^\)\(]*?\)"; - RegExp.Pattern = "\(ВЫБРАТЬ(?:" + шСкобки + "|[^$\(\)])*?""ВременнаяТаблица"" = ""(.*?)""\)"; - - Если ВнешниеНаборыДанных = Неопределено Тогда - ВнешниеНаборыДанных = Новый Структура; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; - КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; - - // Выполним создание всех временных таблиц. Временной таблицей считаем набор данных запрос, - // имя которого начинается с "@". Наборы данных временных таблиц удаляются из предварительной схемы. - ПредварительнаяСхема = КопияОбъектаЛкс(Схема); - НаборыДанныхСхемы = ПредварительнаяСхема.НаборыДанных; - ЕстьВременныеТаблицы = Ложь; - НачальноеКоличество = НаборыДанныхСхемы.Количество(); - Для СчетчикНаборыДанныхСхемы = 1 По НачальноеКоличество Цикл - НаборДанных = НаборыДанныхСхемы[НачальноеКоличество - СчетчикНаборыДанныхСхемы]; - Если Истина - И Лев(НаборДанных.Имя, 1) = "@" - И ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") - Тогда - ВременнаяСхема = КопияОбъектаЛкс(Схема); - - // Кривое копирование набора данных в новую схемы, где он будет один. - ВременнаяСхема.СвязиНаборовДанных.Очистить(); - НаборыДанныхВременнойСхемы = ВременнаяСхема.НаборыДанных; - НаборыДанныхВременнойСхемыВГраница = НаборыДанныхВременнойСхемы.Количество() - 1; - Для СчетчикВременнойСхемы = 0 По НаборыДанныхВременнойСхемыВГраница Цикл - НаборДанныхВременнойСхемы = НаборыДанныхВременнойСхемы[НаборыДанныхВременнойСхемыВГраница - СчетчикВременнойСхемы]; - Если НаборДанныхВременнойСхемы.Имя <> НаборДанных.Имя Тогда - НаборыДанныхВременнойСхемы.Удалить(НаборДанныхВременнойСхемы); - КонецЕсли; - КонецЦикла; - Для Каждого ПолеНабора Из НаборыДанныхВременнойСхемы[0].Поля Цикл - ПолеНабора.ОграничениеИспользования.Поле = Ложь; - ПолеНабора.ВыражениеПредставления = ПолеНабора.ПутьКДанным; - КонецЦикла; - - КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ВременнаяСхема)); - - КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); - КомпоновщикНастроек.Настройки.Структура.Очистить(); - КомпоновщикНастроек.Настройки.Выбор.Элементы.Очистить(); - ирОбщий.КомпоновщикНастроекВосстановитьЛкс(КомпоновщикНастроек); - - ВременныеНастройки = КомпоновщикНастроек.Настройки; - - // Установим использование параметров - Для Каждого ЭлементПараметра Из ВременныеНастройки.ПараметрыДанных.Элементы Цикл - ЭлементПараметра.Использование = Истина; - КонецЦикла; - - // Установим структуру и выбранные поля - ЭлементСтруктуры = ВременныеНастройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); - ЭлементСтруктуры.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); - Для Каждого ДоступноеПоле Из ВременныеНастройки.ДоступныеПоляВыбора.Элементы Цикл - // Чтобы пропустить системные папки - Если Не ДоступноеПоле.Папка Тогда - НовоеВыбранноеПоле = ВременныеНастройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); - НовоеВыбранноеПоле.Поле = ДоступноеПоле.Поле; - НовоеВыбранноеПоле.Использование = Истина; - КонецЕсли; - КонецЦикла; - - МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ВременнаяСхема, ВременныеНастройки,,,, ПроверятьДоступностьПолей); - Запрос.Текст = МакетКомпоновкиДанных.НаборыДанных[0].Запрос; - Для Каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл - Запрос.УстановитьПараметр(Параметр.Имя, Параметр.Значение); - КонецЦикла; - Запрос.Текст = RegExp.Заменить(Запрос.Текст, "$1"); - ВыполнитьЗамеритьЗапросЛкс(Запрос, ЛиОтладка, "Предварительный запрос - " + НаборДанных.Имя); - - //// Недоступные поля набора данных цепляются в настройках при совпадении имен с выбранными полями - //// http://partners.v8.1c.ru/forum/thread.jsp?id=514094 - //Для Каждого Поле Из НаборДанных.Поля Цикл - // Поле.ПутьКДанным = "_поле_" + Поле.ПутьКДанным; - //КонецЦикла; - - НаборыДанныхСхемы.Удалить(НаборДанных); - ЕстьВременныеТаблицы = Истина; - - КонецЕсли; - КонецЦикла; - - Если Не ЕстьВременныеТаблицы Тогда - Если ЛиОтладка Тогда - ВремяНачалаКомпоновкиМакета = ТекущееВремяВМиллисекундахЛкс(); - КонецЕсли; - МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ПредварительнаяСхема, Настройки, ДанныеРасшифровки, СвойМакетОформления,, ПроверятьДоступностьПолей); - Если ЛиОтладка Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Компоновка макета - %1мс",, ТекущееВремяВМиллисекундахЛкс() - ВремяНачалаКомпоновкиМакета)); - КонецЕсли; - Иначе - // Выполним получение результата предварительного запроса - КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПредварительнаяСхема)); - КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); - ирОбщий.КомпоновщикНастроекВосстановитьЛкс(КомпоновщикНастроек); - ПредварительныеНастройки = КомпоновщикНастроек.Настройки; - Если ЛиОтладка Тогда - ВремяНачалаКомпоновкиМакета = ТекущееВремяВМиллисекундахЛкс(); - КонецЕсли; - МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(ПредварительнаяСхема, ПредварительныеНастройки, ДанныеРасшифровки, СвойМакетОформления,, ПроверятьДоступностьПолей); - Если ЛиОтладка Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Компоновка макета - %1мс",, ТекущееВремяВМиллисекундахЛкс() - ВремяНачалаКомпоновкиМакета)); - КонецЕсли; - - Для Каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл - Запрос.УстановитьПараметр(Параметр.Имя, Параметр.Значение); - КонецЦикла; - СтруктураНаборовДанныхЗапросовМакета = ВсеНаборыДанныхЗапросовКомпоновкиЛкс(МакетКомпоновкиДанных.НаборыДанных); - Для Каждого ЭлементНаборДанныхМакета Из СтруктураНаборовДанныхЗапросовМакета Цикл - НаборДанных = ЭлементНаборДанныхМакета.Значение.НаборДанных; - Запрос.Текст = НаборДанных.Запрос; - Запрос.Текст = RegExp.Заменить(Запрос.Текст, "$1"); - РезультатЗапроса = ВыполнитьЗамеритьЗапросЛкс(Запрос, ЛиОтладка, "Предварительный запрос - " + НаборДанных.Имя); - ВнешниеНаборыДанных.Вставить(НаборДанных.Имя, РезультатЗапроса); - КонецЦикла; - - // Получение конечного макета - Для Каждого ЭлементНаборДанных Из СтруктураНаборовДанныхЗапросовМакета Цикл - КоллекцияВладелец = ЭлементНаборДанных.Значение.КоллекцияВладелец; - НаборДанныхЗапрос = ЭлементНаборДанных.Значение.НаборДанных; - - НаборДанныхОбъект = КоллекцияВладелец.Добавить(Тип("НаборДанныхОбъектМакетаКомпоновкиДанных")); - // Копируем Свойства набора данных запроса в набор данных объекта - ЗаполнитьЗначенияСвойств(НаборДанныхОбъект, НаборДанныхЗапрос); - НаборДанныхОбъект.ИмяОбъекта = НаборДанныхЗапрос.Имя; - Для Каждого ПолеНабораДанныхОригинала Из НаборДанныхЗапрос.Поля Цикл - ПолеРезультата = НаборДанныхОбъект.Поля.Добавить(); - ЗаполнитьЗначенияСвойств(ПолеРезультата, ПолеНабораДанныхОригинала); - ЗаполнитьЗначенияСвойств(ПолеРезультата.Роль, ПолеНабораДанныхОригинала.Роль); - КонецЦикла; - КоллекцияВладелец.Удалить(НаборДанныхЗапрос); - КонецЦикла; - КонецЕсли; - - // Баг платформы. Пустая дата превращается в Неопределено. - Для Каждого ПараметрСхемы Из ПредварительнаяСхема.Параметры Цикл - Если ПараметрСхемы.ОграничениеИспользования Тогда - Если Не ПараметрСхемы.ДоступенСписокЗначений Тогда - ЗначениеПараметра = МакетКомпоновкиДанных.ЗначенияПараметров.Найти(ПараметрСхемы.Имя); - ЗначениеПараметра.Значение = ПараметрСхемы.ТипЗначения.ПривестиЗначение(ЗначениеПараметра.Значение); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат МакетКомпоновкиДанных; - -КонецФункции - -#КонецЕсли - Функция КоличествоИзмененийПоУзлуЛкс(Узел, МассивМетаданных = Неопределено) Экспорт #Если Клиент Тогда @@ -7895,32 +6338,6 @@ КонецФункции -Функция ПолучитьФайлЗначенияДляИнтерактивногоСравненияЛкс(Значение, Название, XMLПредставлениеДляНеизвестныхТипов = Истина) Экспорт - - Если Ложь - Или ТипЗнч(Значение) = Тип("ТабличныйДокумент") - Или ТипЗнч(Значение) = Тип("ТекстовыйДокумент") - Тогда - Документ = Значение; - Иначе - Документ = Новый ТекстовыйДокумент; - Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда - Значение = Значение.Получить(); - КонецЕсли; - Если ТипЗнч(Значение) <> Тип("Строка") И XMLПредставлениеДляНеизвестныхТипов Тогда - Представление = ОбъектВСтрокуXMLЛкс(Значение); - Представление = ДекодироватьТекстИзXMLЛкс(Представление); - Иначе - Представление = Значение; - КонецЕсли; - Документ.УстановитьТекст(Представление); - КонецЕсли; - Путь = ПолучитьИмяВременногоФайла(Название); - Документ.Записать(Путь); - Возврат Путь; - -КонецФункции - // Получает строку путем отсечения заданного числа последних символов. // // Параметры: @@ -8394,7 +6811,7 @@ КонецЦикла; Возврат Текст; -КонецФункции // ПреобразоватьТекстДляРегулярныхВыраженийЛкс() +КонецФункции // Шаблон для вызова //Вхождения = ирОбщий.НайтиРегулярноеВыражениеЛкс(Текст, Шаблон); @@ -8504,6 +6921,123 @@ КонецФункции +// Функция - Стр найти слово +// +// Параметры: +// ГдеИскать - - +// ЧтоИскать - - +// НачальнаяПозиция - - +// СловоЦеликом - - +// +// Возвращаемое значение: +// Число - 0 если не нашли +// +Функция СтрНайтиСловоЛкс(Знач ГдеИскать, Знач ЧтоИскать, Знач НачальнаяПозиция = 0, Знач СловоЦеликом = Истина) Экспорт + + Позиция = 0; + Вхождения = НайтиРегулярноеВыражениеЛкс(ГдеИскать, ШаблонПоискаСловаЛкс(ЧтоИскать, СловоЦеликом)); + #Если Сервер И Не Сервер Тогда + Вхождения = Обработки.ирПлатформа.Создать().ВхожденияРегВыражения; + #КонецЕсли + Для каждого Вхождение Из Вхождения Цикл + Если Вхождение.ПозицияВхождения >= НачальнаяПозиция Тогда + Позиция = Вхождение.ПозицияВхождения + 1; + Если СловоЦеликом Тогда + Позиция = Позиция + СтрДлина(Вхождение.Подгруппы[0]); + КонецЕсли; + Прервать; + КонецЕсли; + КонецЦикла; + Если Вхождения.Количество() > 0 И Позиция = 0 Тогда + Позиция = Вхождения[0].ПозицияВхождения + 1; + Если СловоЦеликом Тогда + Позиция = Позиция + СтрДлина(Вхождения[0].Подгруппы[0]); + КонецЕсли; + КонецЕсли; + Возврат Позиция; + +КонецФункции + +Функция ШаблонПоискаСловаЛкс(Знач СтрокаПоиска, СловоЦеликом = Истина) Экспорт + + Шаблон = ПреобразоватьТекстДляРегулярныхВыраженийЛкс(СтрокаПоиска); + Если СловоЦеликом Тогда + Шаблон = "(^|[^_a-zа-яё0-9])(" + Шаблон + ")($|[^_a-zа-яё0-9])"; + КонецЕсли; + Возврат Шаблон; + +КонецФункции + +// Функция - Разделить строку поиска на слова поиска лкс +// +// Параметры: +// СтрокаПоиска - - +// ВыделитьРодителя - Булево - Часть до первой точки трактуется как слово поиска в родителе (для дерева), но если точки нет то этот параметр станет Ложь +// +// Возвращаемое значение: +// - Массив строк +// +Функция РазделитьСтрокуПоискаНаСловаПоискаЛкс(Знач СтрокаПоиска, ВыделитьРодителя = Ложь) Экспорт + + УИД = "" + Новый УникальныйИдентификатор; + СтрокаПоиска = СтрЗаменить(СтрокаПоиска, """""", УИД); + Фрагменты = ирОбщий.СтрРазделитьЛкс(СтрокаПоиска, """"); + СловаПоиска = Новый Массив; + Для Индекс = 0 По Фрагменты.ВГраница() Цикл + Фрагмент = СтрЗаменить(Фрагменты[Индекс], УИД, """"); + Если Индекс % 2 = 0 Тогда + ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(ирОбщий.СтрРазделитьЛкс(Фрагмент, " ", Истина, Ложь), СловаПоиска); + Иначе + СловаПоиска.Добавить(Фрагмент); + КонецЕсли; + КонецЦикла; + Если ВыделитьРодителя Тогда + ВыделитьРодителя = Ложь; + ПозицияТочки = Найти(СловаПоиска[0], "."); + Если ПозицияТочки > 0 Тогда + СловоРодителя = СокрП(Лев(СловаПоиска[0], ПозицияТочки - 1)); + Если СловоРодителя <> "" Тогда + НовоеСлово = СокрЛ(Сред(СловаПоиска[0], ПозицияТочки + 1)); + Если НовоеСлово = "" Тогда + СловаПоиска.Удалить(0); + ВыделитьРодителя = СловаПоиска.Количество() > 0; + Если Не ВыделитьРодителя Тогда + СловоРодителя = СловоРодителя + "."; // Возвращаем точку обратно + КонецЕсли; + Иначе + СловаПоиска[0] = НовоеСлово; + ВыделитьРодителя = Истина; + КонецЕсли; + СловаПоиска.Вставить(0, СловоРодителя); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат СловаПоиска; + +КонецФункции + +Функция РегВыражениеСтрокиПоискаЛкс(Знач СтрокаИлиСловаПоиска, Знач ПодгруппыДляСлов = Истина) Экспорт + + Если ТипЗнч(СтрокаИлиСловаПоиска) = Тип("Строка") Тогда + СловаПоиска = РазделитьСтрокуПоискаНаСловаПоискаЛкс(СтрокаИлиСловаПоиска); + Иначе + СловаПоиска = СтрокаИлиСловаПоиска; + КонецЕсли; + ВыраженияПоиска = Новый Массив; + Если Не ПодгруппыДляСлов Тогда + НачалоПодгруппы = "?:"; + КонецЕсли; + Для Каждого СловоПоиска Из СловаПоиска Цикл + ВыраженияПоиска.Добавить("(" + НачалоПодгруппы + ирОбщий.ПреобразоватьТекстДляРегулярныхВыраженийЛкс(СловоПоиска) + ")"); + КонецЦикла; + ФинальноеВыражение = ирОбщий.СтрСоединитьЛкс(ВыраженияПоиска, "|"); + Если Не ПодгруппыДляСлов Тогда + ФинальноеВыражение = "(" + ФинальноеВыражение + ")"; + КонецЕсли; + Возврат ФинальноеВыражение; + +КонецФункции + // Преобразует строку для правого операнда оператора ПОДОБНО языка запросов. // // Параметры: @@ -8820,7 +7354,26 @@ КонецЕсли; КолонкиДереваИлиТаблицы.Добавить(ИмяКолонки, ОписаниеТипов, Заголовок, Ширина); -КонецПроцедуры // ДобавитьКолонкуЕслиНетЛкс() +КонецПроцедуры + +Процедура НайтиДобавитьКолонкуНомераСтрокиЛкс(Знач ТаблицаЗначений, Знач ИмяКолонкиНомерСтроки, Знач ТаблицаБезДанныхСУзкимиТипами = Неопределено) Экспорт + + #Если Сервер И Не Сервер Тогда + ТаблицаЗначений = Новый ТаблицаЗначений; + #КонецЕсли + Если ТаблицаЗначений.Колонки.Найти(ИмяКолонкиНомерСтроки) = Неопределено Тогда + ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиНомерСтроки, Новый ОписаниеТипов("Число")); + Если ТаблицаБезДанныхСУзкимиТипами <> Неопределено Тогда + ТаблицаБезДанныхСУзкимиТипами.Колонки.Добавить(ИмяКолонкиНомерСтроки, Новый ОписаниеТипов("Число")); + КонецЕсли; + Счетчик = 1; + Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл + СтрокаТаблицы[ИмяКолонкиНомерСтроки] = Счетчик; + Счетчик = Счетчик + 1; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры Функция Дерево_ПутьМассивомЛкс(СтрокаДерева, ИмяКлючевойКолонки = "") Экспорт @@ -9216,7 +7769,7 @@ ТаблицаИндикаторов = ирПлатформа.мТаблицаИндикаторов; Если ТаблицаИндикаторов.Количество() = 0 Тогда #Если Клиент Тогда - ПодключитьГлобальныйОбработчикОжиданияЛкс("ОсвободитьВсеИндикаторыПроцессовОтложенноЛкс"); + ирКлиент.ПодключитьГлобальныйОбработчикОжиданияЛкс("ОсвободитьВсеИндикаторыПроцессовОтложенноЛкс"); #КонецЕсли ИначеЕсли ТаблицаИндикаторов.Количество() >= 10 Тогда ВызватьИсключение "Превышена допустимая глубина вложенности индикаторов"; @@ -10137,2439 +8690,7 @@ КонецФункции -#Если Клиент Тогда -Функция ИмяФормыИзСтрокиИнструментаЛкс(Знач СтрокаИнструмента) Экспорт - - ИмяВыбраннойФормы = СтрокаИнструмента.ПолноеИмя; - Если Найти(ИмяВыбраннойФормы, "ОбщаяФорма.") <> 1 И Найти(ИмяВыбраннойФормы, ".Форма.") = 0 Тогда - Если Найти(ИмяВыбраннойФормы, "Справочник.") = 1 Тогда - ИмяВыбраннойФормы = ИмяВыбраннойФормы + ".ФормаСписка"; - Иначе - ИмяВыбраннойФормы = ИмяВыбраннойФормы + ".Форма"; - КонецЕсли; - КонецЕсли; - Возврат ИмяВыбраннойФормы; - -КонецФункции - -Процедура ПодключитьГлобальныйОбработчикОжиданияЛкс(ИмяГлобальногоМетода, Интервал = 0.1, Однократно = Истина) Экспорт - - Если ирКэш.ЛиПортативныйРежимЛкс() Тогда - ирПортативный.ПолучитьФорму().ПодключитьОбработчикОжидания(ИмяГлобальногоМетода, Интервал, Истина); - Иначе - ПодключитьОбработчикОжидания(ИмяГлобальногоМетода, Интервал, Истина); - КонецЕсли; - -КонецПроцедуры - -Процедура ОтключитьГлобальныйОбработчикОжиданияЛкс(ИмяМетода) Экспорт - - Если ирКэш.ЛиПортативныйРежимЛкс() Тогда - ирПортативный.ПолучитьФорму().ОтключитьОбработчикОжидания(ИмяМетода); - Иначе - ОтключитьОбработчикОжидания(ИмяМетода); - КонецЕсли; - -КонецПроцедуры - -// Процедура - Подключить глобальный обработчик ожидания с параметрами лкс -// -// Параметры: -// ИмяМетодаОбщегоМодуля - Строка - полное имя метода -// Параметры - Структура - -// Интервал - - -// Однократно - - -// -Функция ПодключитьОбработчикОжиданияСПараметрамиЛкс(ИмяМетодаОбщегоМодуля, Параметры = Неопределено, Интервал = 0.1, Однократно = Истина, ВыбрасыватьИсключениеЕслиЗанят = Истина) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - Параметры = Новый Структура; - #КонецЕсли - Если Параметры = Неопределено Тогда - Параметры = Новый Структура; - КонецЕсли; - Параметры.Вставить("ИмяМетода", ИмяМетодаОбщегоМодуля); - Если мПлатформа.ПараметрыОбработчикаОжидания <> Неопределено Тогда - Если СравнитьЗначенияСвойствЛкс(мПлатформа.ПараметрыОбработчикаОжидания, Параметры,, Ложь) Тогда - // повторный вызов с теми же параметрами - Возврат Истина; - КонецЕсли; - Если ВыбрасыватьИсключениеЕслиЗанят Тогда - ВызватьИсключение "Обработчик ожидания занят"; - Иначе - Возврат Ложь; - КонецЕсли; - КонецЕсли; - мПлатформа.ПараметрыОбработчикаОжидания = Параметры; - #Если Сервер И Не Сервер Тогда - ГлобальныйОбработчикОжиданияСПараметрамиЛкс(); - #КонецЕсли - ПодключитьГлобальныйОбработчикОжиданияЛкс("ГлобальныйОбработчикОжиданияСПараметрамиЛкс", Интервал, Однократно); - Возврат Истина; - -КонецФункции - -Процедура ОтлючитьОбработчикОжиданияСПараметрамиЛкс(ИмяМетодаОбщегоМодуля = "") Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Если ЗначениеЗаполнено(ИмяМетодаОбщегоМодуля) Тогда - Если Ложь - Или мПлатформа.ПараметрыОбработчикаОжидания = Неопределено - Или СтрокиРавныЛкс(мПлатформа.ПараметрыОбработчикаОжидания.ИмяМетода, ИмяМетодаОбщегоМодуля) - Тогда - Возврат; - КонецЕсли; - КонецЕсли; - мПлатформа.ПараметрыОбработчикаОжидания = Неопределено; - ОтключитьГлобальныйОбработчикОжиданияЛкс("ГлобальныйОбработчикОжиданияСПараметрамиЛкс"); - -КонецПроцедуры - -Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ПараметрыОбработчикаОжидания = мПлатформа.ПараметрыОбработчикаОжидания; - Если ПараметрыОбработчикаОжидания = Неопределено Тогда - СообщитьЛкс("Не удалось выполнить страховочный обработчик ожидания, т.к. обработка ирПлатформа была удалена из кэша", СтатусСообщения.Внимание); - Возврат; - КонецЕсли; - мПлатформа.ПараметрыОбработчикаОжидания = Неопределено; - Выполнить(ПараметрыОбработчикаОжидания.ИмяМетода + "(ПараметрыОбработчикаОжидания)"); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// РАБОТА С ФОРМАМИ - -// РежимОткрытия - Булево - Истина - Открытие, иначе Сохранение -Функция ВыбратьФайлЛкс(РежимОткрытия = Истина, Расширение = "", ОписаниеФормата = "", Знач ПолноеИмяФайла = "", Знач Каталог = "", Знач КраткоеИмя = "", Знач Заголовок = "") Экспорт - - ВыборФайла = ДиалогВыбораФайлаЛкс(РежимОткрытия, Расширение, ОписаниеФормата, ПолноеИмяФайла, Каталог, КраткоеИмя, Заголовок); - Если Не ВыборФайла.Выбрать() Тогда - Возврат Неопределено; - КонецЕсли; - Возврат ВыборФайла.ПолноеИмяФайла; - -КонецФункции - -Функция ДиалогВыбораФайлаЛкс(РежимОткрытия = Истина, Знач Расширение = "", ОписаниеФормата = "", Знач ПолноеИмяФайла = "", Знач Каталог = "", Знач КраткоеИмя = "", Знач Заголовок = "") Экспорт - - Если РежимОткрытия = Истина Тогда - РежимДиалога = РежимДиалогаВыбораФайла.Открытие; - Иначе - РежимДиалога = РежимДиалогаВыбораФайла.Сохранение; - КонецЕсли; - ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалога); - ВыборФайла.Заголовок = Заголовок; - Если ЗначениеЗаполнено(ПолноеИмяФайла) Тогда - Файл = Новый Файл(ПолноеИмяФайла); - ВыборФайла.Каталог = Файл.Путь; - ВыборФайла.ПолноеИмяФайла = Файл.Имя; - Иначе - ВыборФайла.Каталог = Каталог; - ВыборФайла.ПолноеИмяФайла = КраткоеИмя; - КонецЕсли; - ВыборФайла.Расширение = Расширение; - Если Не ЗначениеЗаполнено(Расширение) Тогда - Расширение = "*"; - КонецЕсли; - ВыборФайла.Фильтр = ФильтрДляВыбораФайлаЛкс(Расширение, ОписаниеФормата); - Возврат ВыборФайла; - -КонецФункции - -Функция ВыбратьКаталогВФормеЛкс(выхКаталог, ФормаДляУстановкиМодифицированности = Неопределено, Заголовок = "") Экспорт - - ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - ВыборФайла.Каталог = выхКаталог; - ВыборФайла.Заголовок = Заголовок; - Если Не ВыборФайла.Выбрать() Тогда - Возврат Неопределено; - КонецЕсли; - выхКаталог = ВыборФайла.Каталог; - Если ФормаДляУстановкиМодифицированности <> Неопределено Тогда - ФормаДляУстановкиМодифицированности.Модифицированность = Истина; - КонецЕсли; - Возврат выхКаталог; - -КонецФункции - -Функция МассивЗначенийПеретаскиванияЛкс(Знач ПараметрыПеретаскивания, выхМассивЗначений = Неопределено, выхТипЗначенияПервогоЭлемента = Неопределено) Экспорт - - ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; - выхТипЗначенияПервогоЭлемента = ТипЗнч(ЗначениеПеретаскивания); - Если выхТипЗначенияПервогоЭлемента = Тип("Массив") Тогда - выхТипЗначенияПервогоЭлемента = ТипЗнч(ЗначениеПеретаскивания[0]); - выхМассивЗначений = ЗначениеПеретаскивания; - Иначе - выхМассивЗначений = Новый Массив; - выхМассивЗначений.Добавить(ЗначениеПеретаскивания); - КонецЕсли; - Возврат выхМассивЗначений; - -КонецФункции - -// Подразумевается, что имена колонок табличного поля и коллекции совпадают -// Параметры: -// ТабличноеПоле - ТабличноеПоле -// ИмяКолонкиПометки - Строка - если пустая, то берется текущая колонка типа "Булево" или колонка с именем "Пометка" -// КлючеваяКолонка - Строка - задается только для таблиц без колонки НомерСтроки при необходимости отобрать строки -// ПроверятьОформлениеСтроки - Булево - долго -Процедура ИзменитьПометкиВыделенныхИлиОтобранныхСтрокЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ИмяКолонкиПометки = "", Знач НовоеЗначениеПометки = Истина, КлючеваяКолонка = "НомерСтроки", - СтруктураОтбора = Неопределено, Знач ИнтерактивнаяУстановка = Ложь) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если Не ЗначениеЗаполнено(ИмяКолонкиПометки) Тогда - КолонкаПометки = КолонкаПометкиТабличногоПоляЛкс(ТабличноеПоле); - Если КолонкаПометки <> Неопределено Тогда - ИмяКолонкиПометки = КолонкаПометки.Имя; - КонецЕсли; - КонецЕсли; - Если ТабличноеПоле.Колонки.Найти(ИмяКолонкиПометки) = Неопределено Тогда - Возврат; - КонецЕсли; - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - Колонка = ТабличноеПоле.Колонки[ИмяКолонкиПометки]; - Иначе - Колонка = ТабличноеПоле.ПодчиненныеЭлементы[ИмяКолонкиПометки]; - КонецЕсли; - УстановитьЗначениеВКолонкеТабличногоПоляТЧИлиТЗЛкс(ЭтаФорма, ТабличноеПоле, НовоеЗначениеПометки, "", Колонка, ТабличноеПоле.ВыделенныеСтроки.Количество() > 1, ИнтерактивнаяУстановка,, СтруктураОтбора); - -КонецПроцедуры - -Функция ВыбратьСсылкуЛкс(ИмяТаблицыИлиМДИлиТип, НачальноеЗначениеВыбора = Неопределено, ИспользоватьДинамическийСписокИР = Неопределено) Экспорт - - Результат = ОткрытьФормуСпискаЛкс(ИмяТаблицыИлиМДИлиТип,, ИспользоватьДинамическийСписокИР,, Истина,, НачальноеЗначениеВыбора, Истина); - Возврат Результат; - -КонецФункции - -Процедура ВыбратьИЗаполнитьТабличнуюЧастьОбъектаБДЛкс(ТаблицаИсточник, НачальноеПолноеИмяОбъекта = "") Экспорт - - ФормаВыбораОбъектаБД = ирОбщий.ФормаВыбораОбъектаМетаданныхЛкс(,, НачальноеПолноеИмяОбъекта,, Истина,, Истина, Истина,, Истина,,, Истина); - РезультатВыбора = ФормаВыбораОбъектаБД.ОткрытьМодально(); - Если РезультатВыбора = Неопределено Тогда - Возврат; - КонецЕсли; - ОбъектМД = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(РезультатВыбора.ПолноеИмяОбъекта); - ЭтоНаборЗаписей = ирОбщий.ЛиМетаданныеРегистраЛкс(ОбъектМД); - Если ЭтоНаборЗаписей Тогда - ПолноеИмяМДСписка = ОбъектМД.ПолноеИмя(); - Иначе - ПолноеИмяМДСписка = ОбъектМД.Родитель().ПолноеИмя(); - КонецЕсли; - МакетныйОбъект = Неопределено; - ТекущаяГруппаТипаМетаданных = Неопределено; - ПолучитьМакетныйОбъектДанныхТаблицыБДЛкс(ПолноеИмяМДСписка, МакетныйОбъект, ТекущаяГруппаТипаМетаданных); - Если ЭтоНаборЗаписей Тогда - СтруктураОбъекта = МакетныйОбъект; - ТаблицаПриемник = СтруктураОбъекта.Данные; - Иначе - ВыбраннаяСтрока = ОткрытьФормуСпискаЛкс(ПолноеИмяМДСписка,,,, Истина,,, Истина); - Если ВыбраннаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - СтруктураОбъекта = ирОбщий.ОбъектДанныхИзСтрокиРезультатаЗапросаЛкс(ВыбраннаяСтрока, МакетныйОбъект, ТекущаяГруппаТипаМетаданных, Истина); - ТаблицаПриемник = СтруктураОбъекта.Данные[ОбъектМД.Имя]; - КонецЕсли; - Если ТаблицаПриемник.Количество() > 0 Тогда - Если ЭтоНаборЗаписей Тогда - ТекстВопроса = "Хотите очистить набор записей в памяти перед заполнением?"; - Иначе - ТекстВопроса = "Выбранная табличная часть объекта не пустая. Хотите очистить ее в памяти перед заполнением?"; - КонецЕсли; - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Да Тогда - ТаблицаПриемник.Очистить(); - КонецЕсли; - КонецЕсли; - ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(ТаблицаИсточник, ТаблицаПриемник); - ОбработкаРедактора = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирРедакторОбъектаБД"); - #Если Сервер И Не Сервер Тогда - ОбработкаРедактора = Обработки.ирРедакторОбъектаБД.Создать(); - #КонецЕсли - ФормаРедактора = ОбработкаРедактора.РедактироватьМодифицированныйОбъект(СтруктураОбъекта); - ФормаРедактора.ПоказатьЯчейкуДанныхОбъекта(РезультатВыбора.ПолноеИмяОбъекта); - -КонецПроцедуры - -// Функция - Сравнить значения в форме лкс -// -// Параметры: -// Значение1 - ТекстовыйДокумент, Строка, ТабличныйДокумент, ТаблицаЗначений - -// Значение2 - - -// Модально - - -// Название1 - - -// Название2 - - -// ПолучатьXMLПредставлениеДляНеизвестныхТипов - - -// ТекущееСвойство - - -// КлючУникальностиФормы - - -// РазрешитьКонвертациюВТаблицуЗначений - - -// ВариантСинтаксиса - Строка - "ВстроенныйЯзык", "ЯзыкЗапросов", "ЯзыкКомпоновки", "XML" -// ОбщееНазвание - - -// -Процедура Сравнить2ЗначенияВФормеЛкс(Знач Значение1, Знач Значение2, Знач Модально = Ложь, Знач Название1 = Неопределено, Знач Название2 = Неопределено, - ПолучатьXMLПредставлениеДляНеизвестныхТипов = Истина, ТекущееСвойство = "", КлючУникальностиФормы = Неопределено, РазрешитьКонвертациюВТаблицуЗначений = Ложь, ВариантСинтаксиса = "", - ОбщееНазвание = "") Экспорт - - Если Ложь - Или ТипЗнч(Значение1) = Тип("ТекстовыйДокумент") - Или ТипЗнч(Значение1) = Тип("ТабличныйДокумент") - Или ТипЗнч(Значение1) = Тип("Строка") - Или ТипЗнч(Значение1) = Тип("Дата") - Или ТипЗнч(Значение1) = Тип("Число") - Или ТипЗнч(Значение1) = Тип("Булево") - Или ТипЗнч(Значение1) = Тип("Неопределено") - Или ТипЗнч(Значение1) = Тип("УникальныйИдентификатор") - Тогда - СравнитьЗначенияВФормеЧерезXMLЛкс(Значение1, Значение2, Модально, Название1, Название2, ПолучатьXMLПредставлениеДляНеизвестныхТипов, ВариантСинтаксиса, ОбщееНазвание); - Возврат; - КонецЕсли; - Если РазрешитьКонвертациюВТаблицуЗначений Тогда - Если ирОбщий.ЛиКоллекцияЛкс(Значение1) Тогда - Значение1 = ТаблицаЗначенийИзКоллекцииЛкс(Значение1); - КонецЕсли; - Если ирОбщий.ЛиКоллекцияЛкс(Значение2) Тогда - Значение2 = ТаблицаЗначенийИзКоллекцииЛкс(Значение2); - КонецЕсли; - КонецЕсли; - Если Истина - И ТипЗнч(Значение1) = Тип("ТаблицаЗначений") - И ТипЗнч(Значение2) = Тип("ТаблицаЗначений") - Тогда - СравнитьТаблицыИнтерактивноЛкс(Значение1, Значение2, Модально); - Возврат; - КонецЕсли; - Объекты = Новый СписокЗначений; - Объекты.Добавить(Значение1, Название1); - Объекты.Добавить(Значение2, Название2); - СравнитьОбъектыВФормеЛкс(Объекты, Модально, ТекущееСвойство,, КлючУникальностиФормы); - -КонецПроцедуры - -Процедура СравнитьТаблицыИнтерактивноЛкс(Знач Значение1, Знач Значение2, Знач Модально = Ложь, Знач БезКлючевыхКолонок = Ложь) Экспорт - - Обработка = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирСравнениеТаблиц"); - #Если Сервер И Не Сервер Тогда - Обработка = Обработки.ирСравнениеТаблиц.Создать(); - #КонецЕсли - ФормаСравнителя = Обработка.ПолучитьФорму(); - ФормаСравнителя.ПараметрТаблица1 = Значение1; - ФормаСравнителя.ПараметрТаблица2 = Значение2; - ФормаСравнителя.ПараметрАвтозапуск = Истина; - ФормаСравнителя.ПараметрБезКлючевыхКолонок = БезКлючевыхКолонок; - Если Модально Тогда - ФормаСравнителя.ОткрытьМодально(); - Иначе - ФормаСравнителя.Открыть(); - ФормаСравнителя.СравнитьТаблицыВФорме(); - КонецЕсли; - -КонецПроцедуры - -// Процедура - Сравнить объекты в форме лкс -// -// Параметры: -// Объекты - СписокЗначений - -// Модально - - -// ТекущееСвойство - - -// ТекущийОбъект - - -// КлючУникальностиФормы - - -// ПараметрНомерЭталона - - -// -Процедура СравнитьОбъектыВФормеЛкс(Знач Объекты, Знач Модально = Ложь, ТекущееСвойство = "", ТекущийОбъект = Неопределено, КлючУникальностиФормы = Неопределено, Знач НомерЭталона = Неопределено) Экспорт - - ФормаСравнителя = ирКэш.Получить().ПолучитьФорму("СравнениеОбъектов",, КлючУникальностиФормы); - ФормаСравнителя.ПараметрОбъекты = Объекты; - ФормаСравнителя.ПараметрТекущееСвойство = ТекущееСвойство; - ФормаСравнителя.ПараметрТекущийОбъект = ТекущийОбъект; - ФормаСравнителя.ПараметрНомерЭталона = НомерЭталона; - Если Модально Тогда - ФормаСравнителя.ОткрытьМодально(); - Иначе - ФормаСравнителя.Открыть(); - КонецЕсли; - -КонецПроцедуры - -Процедура СравнитьЗначенияВФормеЧерезXMLЛкс(Значение1, Значение2, Знач Модально = Ложь, Название1 = "", Название2 = "", Знач XMLПредставлениеДляНеизвестныхТипов = Истина, ВариантСинтаксиса = "", - ОбщееНазвание = "", РазрешитьСобственныйСравнитель = Истина) Экспорт - - Если Не ЗначениеЗаполнено(Название1) Тогда - Название1 = "первое"; - КонецЕсли; - Если Не ЗначениеЗаполнено(Название2) Тогда - Название2 = "второе"; - КонецЕсли; - Если Истина - И РазрешитьСобственныйСравнитель - И ирКэш.ДоступенРедакторМонакоЛкс() - И (Ложь - Или ТипЗнч(Значение1) = Тип("Строка") - Или ТипЗнч(Значение1) = Тип("ТекстовыйДокумент")) - И (Ложь - Или ТипЗнч(Значение2) = Тип("Строка") - Или ТипЗнч(Значение2) = Тип("ТекстовыйДокумент")) - Тогда - Если ТипЗнч(Значение1) = Тип("ТекстовыйДокумент") Тогда - Значение1 = Значение1.ПолучитьТекст(); - КонецЕсли; - Если ТипЗнч(Значение2) = Тип("ТекстовыйДокумент") Тогда - Значение2 = Значение2.ПолучитьТекст(); - КонецЕсли; - ФормаСравнителя = ирКэш.ФормаСравнителяТекстовЛкс(); - Если ФормаСравнителя.Открыта() Тогда - ФормаСравнителя = НоваяФормаСравнителяТекстовЛкс(); - КонецЕсли; - ФормаСравнителя.ВариантСинтаксиса = ВариантСинтаксиса; - ФормаСравнителя.ОбщееНазвание = ОбщееНазвание; - ФормаСравнителя.Заголовок1 = Название1; - ФормаСравнителя.Заголовок2 = Название2; - ФормаСравнителя.Текст1 = Значение1; - ФормаСравнителя.Текст2 = Значение2; - ФормаСравнителя.Открыть(); - Иначе - Путь1 = ПолучитьФайлЗначенияДляИнтерактивногоСравненияЛкс(Значение1, Название1, XMLПредставлениеДляНеизвестныхТипов); - Путь2 = ПолучитьФайлЗначенияДляИнтерактивногоСравненияЛкс(Значение2, Название2, XMLПредставлениеДляНеизвестныхТипов); - // Думал, так будет использовать существующее окно, но этого не происходит. - //Если СравнениеФайлов = Неопределено Тогда - СравнениеФайлов = Новый СравнениеФайлов; - //КонецЕсли; - СравнениеФайлов.ПервыйФайл = Путь1; - СравнениеФайлов.ВторойФайл = Путь2; - СравнениеФайлов.ИгнорироватьПустоеПространство = Ложь; - Если Истина - И ТипЗнч(Значение1) = Тип("ТабличныйДокумент") - И ТипЗнч(Значение2) = Тип("ТабличныйДокумент") - Тогда - СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТабличныйДокумент; - Иначе - СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент; - КонецЕсли; - Если Не Модально И СравнениеФайлов.Сравнить() Тогда - СообщитьЛкс("Файлы идентичны"); - Иначе - Если Модально Тогда - СравнениеФайлов.ПоказатьРазличияМодально(); - Иначе - СравнениеФайлов.ПоказатьРазличия(); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция НоваяФормаСравнителяТекстовЛкс() Экспорт - - ФормаСравнителя = ирКэш.Получить().ПолучитьФорму("СравнениеТекстов",, Новый УникальныйИдентификатор); - Возврат ФормаСравнителя; - -КонецФункции - -// Сравнивает табличный документ, полученный из элемента управления с предыдущим. -// -// Параметры: -// СравнительТабличныхДокументов - Массив, *Неопределено - переменная для хранения предыдущего табличного документа. -// ЭлементУправления - ТабличноеПоле, ПолеТабличногоДокумента - откуда получаем содержимое. -// ВариантСинтаксиса - Строка - "ВстроенныйЯзык", "ЯзыкЗапросов", "ЯзыкКомпоновки", "XML" -// -Процедура ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(ЭтаФорма, ЭлементУправления, ВариантСинтаксиса = "") Экспорт - - Если Ложь - Или ТипЗнч(ЭлементУправления) = Тип("ПолеТекстовогоДокумента") - Или ТипЗнч(ЭлементУправления) = Тип("ПолеHTMLДокумента") - Или ТипЗнч(ЭлементУправления) = Тип("ПолеВвода") - Или ЛиОболочкаТекстаЛкс(ЭлементУправления) - Тогда - ПолеТекста = ОболочкаПоляТекстаЛкс(ЭлементУправления); - #Если Сервер И Не Сервер Тогда - ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - СравниваемыйДокумент = Новый ТекстовыйДокумент; - СравниваемыйДокумент.УстановитьТекст(ПолеТекста.ПолучитьТекст()); - ЗаголовокЭлементаФормы = ПредставлениеИзИдентификатораЛкс(ПолеТекста.ЭлементФормы.Имя); - ИначеЕсли Ложь - Или ТипЗнч(ЭлементУправления) = Тип("ТабличноеПоле") - Или ТипЗнч(ЭлементУправления) = Тип("ТаблицаФормы") - Тогда - СравниваемыйДокумент = ВывестиСтрокиТабличногоПоляСНастройкойЛкс(ЭтаФорма, ЭлементУправления); - Если СравниваемыйДокумент = Неопределено Тогда - Возврат; - КонецЕсли; - ЗаголовокЭлементаФормы = ПредставлениеИзИдентификатораЛкс(ЭлементУправления.Имя); - ИначеЕсли Ложь - Или ТипЗнч(ЭлементУправления) = Тип("ПолеТабличногоДокумента") - Или (Истина - И ТипЗнч(ЭлементУправления) = Тип("ПолеФормы") - И ЭлементУправления.Вид = ВидПоляФормы.ПолеТабличногоДокумента) - Тогда - ТабличныйДокумент = ДанныеЭлементаФормыЛкс(ЭлементУправления); - СравниваемыйДокумент = ПолучитьОбластьТабличногоДокументаИнтерактивноЛкс(ТабличныйДокумент); - ЗаголовокЭлементаФормы = ПредставлениеИзИдентификатораЛкс(ЭлементУправления.Имя); - Иначе - СообщитьЛкс("Неподдерживаемый тип элемента управления для сравнения"); - Возврат; - КонецЕсли; - ДобавитьОбъектВБуферИПредложитьСравнениеЛкс(СравниваемыйДокумент, ЭтаФорма,, ЗаголовокЭлементаФормы, ВариантСинтаксиса); - -КонецПроцедуры - -Процедура ТабличноеПолеИлиТаблицаФормы_СравнитьСтрокиЛкс(ЭтаФорма, ТабличноеПоле) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если ТабличноеПоле.ВыделенныеСтроки.Количество() < 2 Тогда - Возврат; - КонецЕсли; - ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; - ПолноеИмяТаблицы = ""; - ОбщийТип = ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицы); - Объекты = Новый СписокЗначений; - ТекущийОбъект = Неопределено; - Если ОбщийТип = "Список" И ЗначениеЗаполнено(ПолноеИмяТаблицы) Тогда - //Если Истина - // И ТабличноеПоле.ВыделенныеСтроки.Количество() > 2 - // И ЛиКорневойТипСсылкиЛкс(КорневойТипКонфигурацииЛкс(ПолноеИмяТаблицы)) - //Тогда - // Объекты = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - // ФормаОбработки = ирОбщий.ПолучитьФормуЛкс("Обработка.ирПоискДублейИЗаменаСсылок.Форма"); - // ФормаОбработки.ОткрытьДляЗаменыПоСпискуСсылок(Объекты,, 0); - // Возврат; - //КонецЕсли; - Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - Объекты.Добавить(ВыделеннаяСтрока); - КонецЦикла; - ТекущийОбъект = ТабличноеПоле.ТекущаяСтрока; - Иначе - ТаблицаЗначений = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, ВыделенныеСтроки,,,,,, ТекущийОбъект); - Для Каждого ВыделеннаяСтрока Из ТаблицаЗначений Цикл - Объекты.Добавить(ВыделеннаяСтрока); - КонецЦикла; - КонецЕсли; - ТекущаяКолонка = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - СравнитьОбъектыВФормеЛкс(Объекты,, ТекущаяКолонка, ТекущийОбъект); - -КонецПроцедуры - -// Ф -// Параметры: -// ВариантСинтаксиса - Строка - "ВстроенныйЯзык", "ЯзыкЗапросов", "ЯзыкКомпоновки", "XML" -Процедура ДобавитьОбъектВБуферИПредложитьСравнениеЛкс(Знач ЗначениеДляСравнения, Знач ЭтаФорма = Неопределено, Знач ТекущееСвойство = "", ЗаголовокЭлементаФормы = "", ВариантСинтаксиса = "") Экспорт - - МассивСравнения = ДобавитьОбъектВБуферСравненияЛкс(ЗначениеДляСравнения); - Если МассивСравнения.Количество() = 2 Тогда - //Если ПолеТекста <> Неопределено Тогда - // #Если Сервер И Не Сервер Тогда - // ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - // #КонецЕсли - // РедакторHTML = ПолеТекста.РедакторHTML(); - // Если РедакторHTML <> Неопределено Тогда - // РедакторHTML.compare(МассивСравнения[0].ПолучитьТекст()); - // Возврат; - // КонецЕсли; - //КонецЕсли; - Ответ = Вопрос("Сравнить с предыдущим?", РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Нет Тогда - МассивСравнения.Удалить(0); - Возврат; - КонецЕсли; - Если ЭтаФорма <> Неопределено Тогда - ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); - КонецЕсли; - СравниваемыйДокумент1 = МассивСравнения[0]; - СравниваемыйДокумент2 = МассивСравнения[1]; - Сравнить2ЗначенияВФормеЛкс(СравниваемыйДокумент1, СравниваемыйДокумент2,,,,, ТекущееСвойство,,, ВариантСинтаксиса, ЗаголовокЭлементаФормы); - МассивСравнения.Очистить(); - Иначе - СообщитьЛкс("Первое значение для сравнения запомнено. Теперь передайте второе значение."); - КонецЕсли; - -КонецПроцедуры - -Функция ДобавитьОбъектВБуферСравненияЛкс(Знач ЗначениеДляСравнения) Экспорт - - МассивСравнения = ирКэш.БуферСравненияЛкс("" + ТипЗнч(ЗначениеДляСравнения)); - #Если Сервер И Не Сервер Тогда - МассивСравнения = Новый Массив; - #КонецЕсли - Если МассивСравнения.Количество() = 2 Тогда - МассивСравнения.Удалить(0); - КонецЕсли; - МассивСравнения.Добавить(ЗначениеДляСравнения); - Возврат МассивСравнения; - -КонецФункции - -Функция ПолучитьОбластьТабличногоДокументаИнтерактивноЛкс(ТабличныйДокумент) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличныйДокумент = Новый ТабличныйДокумент; - #КонецЕсли - Если Не ЛиОбластьЯчеекТабличногоДокументаОбъединенаЛкс(ТабличныйДокумент) Тогда - Ответ = Вопрос("Использовать только текущую область (Да) иначе будет использован весь документ (Нет)?", РежимДиалогаВопрос.ДаНет); - Иначе - Ответ = КодВозвратаДиалога.Нет; - КонецЕсли; - Если Ответ = КодВозвратаДиалога.Да Тогда - Результат = ТабличныйДокумент.ПолучитьОбласть(ТабличныйДокумент.ТекущаяОбласть.Имя); - ЗаполнитьЗначенияСвойств(Результат, ТабличныйДокумент,, "ВыделенныеОбласти, ТекущаяОбласть"); - Результат.ТекущаяОбласть = Результат.Область(); - Иначе - Результат = ТабличныйДокумент.ПолучитьОбласть(); - ЗаполнитьЗначенияСвойств(Результат, ТабличныйДокумент); - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ЛиОбластьЯчеекТабличногоДокументаОбъединенаЛкс(Знач ТабличныйДокумент, Знач ТекущаяОбласть = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличныйДокумент = Новый ТабличныйДокумент; - #КонецЕсли - Если ТекущаяОбласть = Неопределено Тогда - ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть; - КонецЕсли; - Область = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, ТекущаяОбласть.Лево); - Возврат ТекущаяОбласть.Низ = Область.Низ И ТекущаяОбласть.Право = Область.Право; - -КонецФункции - -Функция ВывестиСтрокиТабличногоПоляСНастройкойЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, ВыводБезОформления = Истина, Знач НастройкиСписка = Неопределено, выхТекущаяСтрока = Неопределено) Экспорт - - ФормаНастройки = ирКэш.Получить().ПолучитьФорму("ПараметрыВыводаСтрокТаблицы", ЭтаФорма); - ФормаНастройки.ТабличноеПоле = ТабличноеПоле; - Если ВыводБезОформления <> Неопределено Тогда - ФормаНастройки.БезОформления = ВыводБезОформления; - КонецЕсли; - РезультатФормы = ФормаНастройки.ОткрытьМодально(); - Если РезультатФормы = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - выхТекущаяСтрока = Неопределено; - Результат = ВывестиСтрокиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, ФормаНастройки,, выхТекущаяСтрока, НастройкиСписка); - Возврат Результат; - -КонецФункции - -Функция ВывестиСтрокиТабличногоПоляЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ПараметрыВывода, Отладка = Ложь, выхТекущаяСтрока = Неопределено, Знач НастройкиСписка = Неопределено) Экспорт - - КлючТекущейСтроки = Неопределено; - ИндексТекущейСтроки = Неопределено; - ПолноеИмяТаблицыБД = ""; - ДанныеТабличногоПоля = Неопределено; - ТипИсточника = ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицыБД, ДанныеТабличногоПоля); - ВыбранныеКолонки = ПараметрыВывода.КолонкиТабличногоПоля.Выгрузить(Новый Структура("Пометка", Истина)); - МассивСтрок = Неопределено; - ЗначениеТабличногоПоля = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - Если ЗначениеТабличногоПоля = Неопределено Тогда - КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле,,, Ложь); - ИначеЕсли ТипЗнч(ЗначениеТабличногоПоля) = Тип("ДанныеФормыДерево") Тогда - ЗначениеТабличногоПоля = ДанныеФормыВЗначение(ЗначениеТабличногоПоля, Тип("ДеревоЗначений")); - КонецЕсли; - Если ТипИсточника = "Список" И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда - КлючТекущейСтроки = СтруктураКлючаТаблицыБДЛкс(ПолноеИмяТаблицыБД); - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(КлючТекущейСтроки, ТабличноеПоле.ТекущаяСтрока); - КонецЕсли; - Если ПараметрыВывода.ТолькоВыделенныеСтроки Тогда - КоллекцияСтрок = КлючиВыделенныхСтрокИмитатораДинамическогоСпискаЛкс(ТабличноеПоле); - ИначеЕсли ДанныеТабличногоПоля = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Иначе - Если ПараметрыВывода.ТолькоВыделенныеСтроки Тогда - МассивСтрок = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - Если ТипЗнч(ЗначениеТабличногоПоля) = Тип("ДеревоЗначений") Тогда - Если МассивСтрок <> Неопределено Тогда - КоллекцияСтрок = МассивСтрок; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок,, Ложь); - КонецЕсли; - Иначе - КоллекцияСтрок = ЗначениеТабличногоПоля.Строки; - Если ТипЗнч(ТабличноеПоле.ТекущаяСтрока) = Тип("СтрокаДереваЗначений") Тогда - ИндексТекущейСтроки = КоллекцияСтрок.Индекс(ТабличноеПоле.ТекущаяСтрока); - КонецЕсли; - КонецЕсли; - ИначеЕсли Ложь - Или ТипИсточника = "ТабличнаяЧасть" - Или ТипИсточника = "НаборЗаписей" - Или ТипИсточника = "ТаблицаЗначений" - Тогда - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - //ИндексТекущейСтроки = ЗначениеТабличногоПоля.Индекс(ТабличноеПоле.ТекущаяСтрока); - ИндексТекущейСтроки = ЗначениеТабличногоПоля.Индекс(ТабличноеПоле.ТекущиеДанные); - КонецЕсли; - Если ПараметрыВывода.БезОформления Тогда - КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок, Истина); - Иначе - Если МассивСтрок <> Неопределено Тогда - КоллекцияСтрок = МассивСтрок; - ИначеЕсли ТипИсточника = "ТаблицаЗначений" Или Не ЛиОтборУстановленЛкс(ТабличноеПоле.ОтборСтрок) Тогда - КоллекцияСтрок = ТабличноеПоле.Значение; - Иначе - КоллекцияСтрок = Новый Массив; - ТекущаяСтрока = Неопределено; - КопияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок, Истина,,,,, ТекущаяСтрока); - Для Каждого КопияСтроки Из КопияСтрок Цикл - КоллекцияСтрок.Добавить(ТабличноеПоле.Значение[КопияСтроки.НомерСтроки - 1]); - КонецЦикла; - Если ТекущаяСтрока <> Неопределено Тогда - ИндексТекущейСтроки = КопияСтрок.Индекс(ТекущаяСтрока); - КонецЕсли; - КонецЕсли; - КонецЕсли; - ИначеЕсли Ложь - Или ТипИсточника = "Список" - Тогда - КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок, Истина); - Иначе - Попытка - КоллекцияСтрок = ДанныеТабличногоПоля.Элементы; // Для компоновки - Исключение - КонецПопытки; - КонецЕсли; - КонецЕсли; - Если ПараметрыВывода.БезОформления Тогда - Иерархия = Ложь; - Если ТипИсточника = "Список" И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда - КоллекцияСтрок = ДанныеСтрокДинамическогоСпискаЛкс(ТабличноеПоле, КоллекцияСтрок, ВыбранныеКолонки, НастройкиСписка, ПараметрыВывода.КоличествоПервых); - #Если Сервер И Не Сервер Тогда - КоллекцияСтрок = Новый ТаблицаЗначений; - #КонецЕсли - ВыбранныеКолонки = Неопределено; - ТекущаяСтрока = КоллекцияСтрок.НайтиСтроки(КлючТекущейСтроки); - Если ТекущаяСтрока.Количество() > 0 Тогда - ИндексТекущейСтроки = КоллекцияСтрок.Индекс(ТекущаяСтрока[0]); - КонецЕсли; - Если ЛиКорневойТипСсылкиЛкс(ТипТаблицыБДЛкс(ПолноеИмяТаблицыБД)) И ПараметрыВывода.КолонкиИдентификаторов Тогда - //ВыбранныеКолонки.Добавить("Ссылка"); - КоллекцияСтрок.Колонки.Добавить("ИдентификаторСсылкиЛкс",, "Идентификатор ссылки"); - //Если ВыбранныеКолонки.Найти("ИдентификаторСсылкиЛкс") = Неопределено Тогда - // ВыбранныеКолонки.Добавить("ИдентификаторСсылкиЛкс"); - //КонецЕсли; - Для Каждого СтрокаКоллекции Из КоллекцияСтрок Цикл - СтрокаКоллекции.ИдентификаторСсылкиЛкс = ИдентификаторСсылкиЛкс(СтрокаКоллекции.Ссылка); - КонецЦикла; - КонецЕсли; - ИначеЕсли ТипЗнч(ЗначениеТабличногоПоля) = Тип("ДеревоЗначений") Тогда - ТаблицаСтрокДерева = Новый ТаблицаЗначений; - ТаблицаСтрокДерева.Колонки.Добавить("_ИДВетки"); - ТаблицаСтрокДерева.Колонки.Добавить("_ИДВеткиРодителя"); - Иерархия = Истина; - Для Каждого КолонкаДерева Из ЗначениеТабличногоПоля.Колонки Цикл - ТаблицаСтрокДерева.Колонки.Добавить(КолонкаДерева.Имя, КолонкаДерева.ТипЗначения, КолонкаДерева.Заголовок, КолонкаДерева.Ширина); - КонецЦикла; - Если ТипЗнч(КоллекцияСтрок) = Тип("КоллекцияСтрокДереваЗначений") Тогда - КоллекцияСтрок = ВсеСтрокиДереваЗначенийЛкс(ЗначениеТабличногоПоля); - КонецЕсли; - КэшПутей = Новый Соответствие; - Для Каждого СтрокаДерева Из КоллекцияСтрок Цикл - СтрокаТаблицы = ТаблицаСтрокДерева.Добавить(); - Если СтрокаДерева.Строки.Количество() = 0 Тогда - СтрокаТаблицы._ИДВетки = "_"; - Иначе - ПутьКВетке = КэшПутей[СтрокаДерева]; - Если ПутьКВетке = Неопределено Тогда - ПутьКВетке = Дерево_ПутьСтрокойЛкс(СтрокаДерева, ""); - КэшПутей[СтрокаДерева] = ПутьКВетке; - КонецЕсли; - СтрокаТаблицы._ИДВетки = ПутьКВетке; - КонецЕсли; - Если СтрокаДерева.Родитель <> Неопределено Тогда - ПутьКРодителю = КэшПутей[СтрокаДерева.Родитель]; - Если ПутьКРодителю = Неопределено Тогда - ПутьКРодителю = Дерево_ПутьСтрокойЛкс(СтрокаДерева.Родитель, ""); - КэшПутей[СтрокаДерева.Родитель] = ПутьКРодителю; - КонецЕсли; - СтрокаТаблицы._ИДВеткиРодителя = ПутьКРодителю; - КонецЕсли; - ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаДерева); - КонецЦикла; - КэшПутей = Неопределено; - КоллекцияСтрок = ТаблицаСтрокДерева; - ИначеЕсли ТипЗнч(КоллекцияСтрок) <> Тип("ТаблицаЗначений") Тогда - КоллекцияСтрок = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, МассивСтрок, Истина); - КонецЕсли; - Если ВыбранныеКолонки <> Неопределено Тогда - Для Каждого КолонкаКоллекции Из КоллекцияСтрок.Колонки Цикл - ВыбраннаяКолонка = ВыбранныеКолонки.Найти(КолонкаКоллекции.Имя, "Данные"); - Если ВыбраннаяКолонка <> Неопределено Тогда - КолонкаКоллекции.Заголовок = ВыбраннаяКолонка.Заголовок; - КонецЕсли; - КонецЦикла; - ВыбранныеКолонки = ВыбранныеКолонки.ВыгрузитьКолонку("Данные"); - КонецЕсли; - ИмяТекущейКолонки = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - Результат = ВывестиТаблицуВТабличныйДокументИлиТаблицуЗначенийЛкс(КоллекцияСтрок,,, ПараметрыВывода.ИтогиЧисловыхКолонок,, ПараметрыВывода.ВстроитьЗначенияВРасшифровки, - ПараметрыВывода.ОтображатьПустые, ПараметрыВывода.КолонкиИдентификаторов, ПараметрыВывода.КолонкиТипов, ПараметрыВывода.КолонкиЗначений, ВыбранныеКолонки, ИмяТекущейКолонки, - ПараметрыВывода.ВыводВТаблицуЗначений, Отладка, ПараметрыВывода.КолонкиРазмеров, ПараметрыВывода.СузитьТипы, Иерархия); - Иначе - Если ТипИсточника = "Список" Тогда - КоллекцияСтрок = ДанныеСтрокДинамическогоСпискаЛкс(ТабличноеПоле, КоллекцияСтрок,, НастройкиСписка, ПараметрыВывода.КоличествоПервых); - #Если Сервер И Не Сервер Тогда - КоллекцияСтрок = Новый ТаблицаЗначений; - #КонецЕсли - ТекущаяСтрока = КоллекцияСтрок.НайтиСтроки(КлючТекущейСтроки); - Если ТекущаяСтрока.Количество() > 0 Тогда - ИндексТекущейСтроки = КоллекцияСтрок.Индекс(ТекущаяСтрока[0]); - КонецЕсли; - Если ЛиКорневойТипСсылкиЛкс(ТипТаблицыБДЛкс(ПолноеИмяТаблицыБД)) Тогда - КоллекцияСтрок = КоллекцияСтрок.ВыгрузитьКолонку("Ссылка"); - КонецЕсли; - КонецЕсли; - Если ПараметрыВывода.ВыводВТаблицуЗначений Тогда - Результат = Новый ТаблицаЗначений; - Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл - Колонка = ТабличноеПоле.Колонки[ВыбраннаяКолонка.Имя]; - //Если Колонка.Имя = ирКэш.ИмяКолонкиНомерСтрокиЛкс() Тогда - // Продолжить; - //КонецЕсли; - //Если Колонка.Видимость Тогда - КолонкаПриемник = Результат.Колонки.Добавить(Колонка.Имя, Новый ОписаниеТипов("Строка"), ВыбраннаяКолонка.Заголовок); - //КонецЕсли; - КонецЦикла; - ВыбранныеКолонки = ВыбранныеКолонки.ВыгрузитьКолонку("Имя"); - ВывестиСтрокиТабличногоПоляСОформлениемЛкс(ЭтаФорма, КоллекцияСтрок,, Результат, ТабличноеПоле,, ПараметрыВывода.ВстроитьЗначенияВРасшифровки, ВыбранныеКолонки); - Иначе - Результат = Новый ТабличныйДокумент; - НомерКолонки = 1; - НомерСтроки = 1; - ОбластьТаблицы = Результат.Область(); - ОбластьТаблицы.ЦветРамки = ЦветаСтиля.ЦветРамки; - ОбластьЗаголовков = Результат.Область(НомерСтроки, 0, НомерСтроки, 0); - ОбластьЗаголовков.ЦветФона = ТабличноеПоле.ЦветФонаШапки; - ОбластьЗаголовков.ЦветТекста = ТабличноеПоле.ЦветТекстаШапки; - Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл - Колонка = ТабличноеПоле.Колонки[ВыбраннаяКолонка.Имя]; - //Если Колонка.Имя = ирКэш.ИмяКолонкиНомерСтрокиЛкс() Тогда - // Продолжить; - //КонецЕсли; - //Если Колонка.Видимость Тогда - ОбластьЗаголовка = Результат.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); - ОбластьЗаголовка.Текст = ВыбраннаяКолонка.Заголовок; - ОбластьЗаголовка.ЦветФона = Колонка.ЦветФонаШапки; - ОбластьЗаголовка.ЦветТекста = Колонка.ЦветТекстаШапки; - //ШиринаКолонки = Колонка.Ширина; - //Если ШиринаКолонки <= 0 Тогда - // Если ЗначениеЗаполнено(Колонка.Данные) Тогда - // ШиринаКолонки = ЗначениеТабличногоПоля.Колонки[Колонка.Данные].Ширина; - // Если ШиринаКолонки = 0 Тогда - // ШиринаКолонки = 30; - // КонецЕсли; - // Иначе - // ШиринаКолонки = 30; - // КонецЕсли; - //КонецЕсли; - //ШиринаКолонки = Мин(ШиринаКолонки, 50); - //ШиринаКолонки = Макс(ШиринаКолонки, 10); - //ОбластьЗаголовка.ШиринаКолонки = ШиринаКолонки; - ОбластьЗаголовка.ЦветФона = ЦветаСтиля.ЦветФонаШапкиТаблицы; - ОбластьЗаголовка.ЦветТекста = ЦветаСтиля.ЦветТекстаШапкиТаблицы; - УстановитьГраницыОбластиТабличногоДокументаИзТабличногоПоляЛкс(ОбластьЗаголовка, ТабличноеПоле); - НомерКолонки = НомерКолонки + 1; - //КонецЕсли; - КонецЦикла; - ВыбранныеКолонки = ВыбранныеКолонки.ВыгрузитьКолонку("Имя"); - ВывестиСтрокиТабличногоПоляСОформлениемЛкс(ЭтаФорма, КоллекцияСтрок, НомерСтроки, Результат, ТабличноеПоле,, ПараметрыВывода.ВстроитьЗначенияВРасшифровки, ВыбранныеКолонки); - УстановитьАвтоширинуКолонокТабличногоДокументаЛкс(Результат); - Если ТабличноеПоле.ТекущаяКолонка <> Неопределено Тогда - ИндексКолонки = ВыбранныеКолонки.Найти(ТабличноеПоле.ТекущаяКолонка.Имя); - Если ИндексКолонки <> Неопределено Тогда - Результат.ТекущаяОбласть = Результат.Область(2, ИндексКолонки + 1); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Результат <> Неопределено Тогда - Если ПараметрыВывода.ТолькоВыделенныеСтроки Или ИндексТекущейСтроки = Неопределено Тогда - ИндексТекущейСтроки = 0; - КонецЕсли; - Если ТипЗнч(Результат) = Тип("ТабличныйДокумент") Тогда - НомерСтроки = ИндексТекущейСтроки + 2; - Результат.ТекущаяОбласть = Результат.Область(НомерСтроки, Результат.ТекущаяОбласть.Лево); - ИначеЕсли Результат.Количество() > ИндексТекущейСтроки И ИндексТекущейСтроки >= 0 Тогда - выхТекущаяСтрока = Результат[ИндексТекущейСтроки]; - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Функция - Данные строк динамического списка лкс -// -// Параметры: -// ТабличноеПоле - - -// КлючиСтрок - - -// ВыбранныеКолонки - Строка, ТаблицаЗначений - Если строка, то имена через запятую. Если таблица значений, то ее колонки: Данные, Заголовок -// НастройкиСписка - - -// КоличествоПервых - - -// ЭтаФорма - Форма - нужна для кэширования запроса итогов -// ТолькоСуммируемыеКолонки - Булево - данные только для расчета итогов -// -// Возвращаемое значение: -// - -// -Функция ДанныеСтрокДинамическогоСпискаЛкс(Знач ТабличноеПоле, Знач КлючиСтрок = Неопределено, Знач ВыбранныеКолонки = Неопределено, НастройкиСписка = Неопределено, - Знач КоличествоПервых = 100000, Знач ЭтаФорма = Неопределено, Знач ТолькоСуммируемыеКолонки = Ложь) Экспорт - - ПолноеИмяТаблицы = ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле); - Если Истина - И ирОбщий.ЛиКорневойТипВнешнегоИсточникаДанныхЛкс(ирОбщий.ПервыйФрагментЛкс(ПолноеИмяТаблицы)) - И КлючиСтрок <> Неопределено - Тогда - // https://www.hostedredmine.com/issues/916752 - Результат = КлючиСтрок; - Иначе - СтруктураКлюча = СтруктураКлючаТаблицыБДЛкс(ПолноеИмяТаблицы,,, Ложь); - ДинамическийСписок = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - СхемаИНастройки = Неопределено; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - СхемаИНастройки = ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(РодительЭлементаУправляемойФормыЛкс(ТабличноеПоле), ТабличноеПоле.Имя); - КонецЕсли; - Если СхемаИНастройки <> Неопределено Тогда - СхемаКомпоновки = СхемаИНастройки.Схема; - ДобавитьПоляНабораДанныхЛкс(ПолноеИмяТаблицы, СхемаКомпоновки); - НастройкаКомпоновки = СхемаИНастройки.Настройки; - Иначе - ПсведонимТаблицы = "Таблица" + СуффиксСлужебногоСвойстваЛкс(); - СхемаКомпоновки = ирОбщий.СоздатьСхемуКомпоновкиТаблицыБДЛкс(ПолноеИмяТаблицы,,,, ПсведонимТаблицы,, Истина, КоличествоПервых); - НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - СхемаКомпоновки = Новый СхемаКомпоновкиДанных; - #КонецЕсли - Если ДинамическийСписок = Неопределено Тогда - Если КлючиСтрок = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Иначе - Если НастройкиСписка = Неопределено Тогда - НастройкиСписка = НастройкиДинамическогоСпискаЛкс(ДинамическийСписок); - КонецЕсли; - #Если Сервер И Не Сервер Тогда - НастройкиСписка = Новый НастройкиКомпоновкиДанных; - #КонецЕсли - СкопироватьОтборЛюбойЛкс(НастройкаКомпоновки.Отбор, НастройкиСписка.Отбор); - Если Не ЛиКорневойТипПеречисленияЛкс(ПервыйФрагментЛкс(ПолноеИмяТаблицы)) Тогда - СкопироватьПорядокЛюбойЛкс(НастройкаКомпоновки.Порядок, НастройкиСписка.Порядок); - КонецЕсли; - КонецЕсли; - Для Каждого КлючИЗначение Из СтруктураКлюча Цикл - НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, КлючИЗначение.Ключ); - ПолеНабора = СхемаКомпоновки.НаборыДанных[0].Поля.Найти(КлючИЗначение.Ключ); - Если ПолеНабора = Неопределено Тогда - ПолеНабора = СхемаКомпоновки.НаборыДанных[0].Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); - ПолеНабора.Поле = КлючИЗначение.Ключ; - ПолеНабора.ПутьКДанным = КлючИЗначение.Ключ; - КонецЕсли; - ПолеНабора.Роль.Обязательное = Истина; - КонецЦикла; - Если ВыбранныеКолонки <> Неопределено Тогда - Если ТипЗнч(ВыбранныеКолонки) = Тип("Строка") Тогда - // Сюда приходим из различных значений колонки и из расчета итогов табличного поля динамического списка - ИменаВыбранныхКолонок = СтрРазделитьЛкс(ВыбранныеКолонки, ",", Истина); - ВыбранныеКолонки = Новый ТаблицаЗначений; - ВыбранныеКолонки.Колонки.Добавить("Данные"); - ВыбранныеКолонки.Колонки.Добавить("Заголовок"); - Для Каждого ИмяКолонки Из ИменаВыбранныхКолонок Цикл - СтрокаКолонки = ВыбранныеКолонки.Добавить(); - СтрокаКолонки.Данные = ИмяКолонки; - КонецЦикла; - КонецЕсли; - Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл - Если Не ЗначениеЗаполнено(ВыбраннаяКолонка.Данные) Тогда - Продолжить; - КонецЕсли; - НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ВыбраннаяКолонка.Данные); - КонецЦикла; - КонецЕсли; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; - КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); - КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки); - ирОбщий.КомпоновщикНастроекВосстановитьЛкс(КомпоновщикНастроек); - НастройкаКомпоновки = КомпоновщикНастроек.Настройки; - КонецЕсли; - Если Истина - И КлючиСтрок <> Неопределено - И ирКэш.ДоступнаСхемаЗапросаЛкс() - И ирКэш.НомерРежимаСовместимостиЛкс() > 803001 - И ТолькоСуммируемыеКолонки - Тогда - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - Запрос = ДопСвойства.ЗапросИтоговПоТаблицеКлючей; - Если Запрос = Неопределено Тогда - Запрос = ЗапросИзКомпоновкиЛкс(СхемаКомпоновки, НастройкаКомпоновки); - Запрос = ЗапросОтбораПоТаблицеКлючейЛкс(Запрос, СтруктураКлюча, Истина); - ДопСвойства.ЗапросИтоговПоТаблицеКлючей = Запрос; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - Запрос = Новый Запрос; - #КонецЕсли - Запрос.Параметры.Вставить("Ключи", ТаблицаКлючейВыделенныхСтрокДинСпискаЛкс(ТабличноеПоле, ПолноеИмяТаблицы)); - Иначе - Если КлючиСтрок <> Неопределено Тогда - ГруппаИли = НастройкаКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); - ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; - ГруппаИли.Использование = Истина; - Для Каждого КлючСтроки Из КлючиСтрок Цикл - ГруппаИ = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); - ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; - ГруппаИ.Использование = Истина; - ЗначениеПоляКлюча = Неопределено; - Для Каждого КлючИЗначение Из СтруктураКлюча Цикл - Если ЛиТипСсылкиТочкиМаршрутаЛкс(ТипЗнч(КлючСтроки)) Тогда - ЗначениеПоляКлюча = КлючСтроки; - Иначе - ЗначениеПоляКлюча = КлючСтроки[КлючИЗначение.Ключ]; - КонецЕсли; - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИ, КлючИЗначение.Ключ, ЗначениеПоляКлюча); - КонецЦикла; - Если Истина - И СтруктураКлюча.Количество() = 1 - И ТипЗнч(ЗначениеПоляКлюча) = Тип("УникальныйИдентификатор") - Тогда - // Антибаг платформы https://www.hostedredmine.com/issues/895239 - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИ); - КонецЕсли; - КонецЦикла; - КонецЕсли; - // https://www.hostedredmine.com/issues/897644 - // Обеспечиваем наличие всех полей ключа. Некоторые могли быть отключены - Запрос = ЗапросИзКомпоновкиЛкс(СхемаКомпоновки, НастройкаКомпоновки, Истина); - КонецЕсли; - #Если Сервер И Не Сервер Тогда - Запрос = Новый Запрос; - #КонецЕсли - Результат = Запрос.Выполнить().Выгрузить(); - Если ВыбранныеКолонки <> Неопределено Тогда - Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл - Если Не ЗначениеЗаполнено(ВыбраннаяКолонка.Данные) Тогда - Продолжить; - КонецЕсли; - КолонкаРезультата = Результат.Колонки.Найти(ВыбраннаяКолонка.Данные); - Если КолонкаРезультата = Неопределено Тогда - Результат.Колонки.Добавить(ВыбраннаяКолонка.Данные,, ВыбраннаяКолонка.Заголовок); - Иначе - КолонкаРезультата.Заголовок = ВыбраннаяКолонка.Заголовок; - КонецЕсли; - КонецЦикла; - // Заполним колонки динамического списка, не являющиеся полями его основной таблицы БД - Если Истина - И ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") - И КлючиСтрок <> Неопределено - Тогда - Для Каждого КлючСтроки Из КлючиСтрок Цикл - ЗаполнитьЗначенияСвойств(СтруктураКлюча, КлючСтроки); - ДанныеСтроки = ТабличноеПоле.ДанныеСтроки(КлючСтроки); - ЗаполнитьЗначенияСвойств(Результат.НайтиСтроки(СтруктураКлюча)[0], ДанныеСтроки); - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ТаблицаКлючейВыделенныхСтрокДинСпискаЛкс(Знач ТабличноеПоле, Знач ПолноеИмяТаблицы = "") Экспорт - - Если Не ЗначениеЗаполнено(ПолноеИмяТаблицы) Тогда - ПолноеИмяТаблицы = ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле); - КонецЕсли; - СтруктураКлюча = СтруктураКлючаТаблицыБДЛкс(ПолноеИмяТаблицы,,, Ложь); - ТаблицаКлючей = Новый ТаблицаЗначений; - Для Каждого КлючИЗначение Из СтруктураКлюча Цикл - ТаблицаКлючей.Колонки.Добавить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - КонецЦикла; - Для Каждого ВыделеннаяСтрока Из ТабличноеПоле.ВыделенныеСтроки Цикл - Если ТипЗнч(ВыделеннаяСтрока) = Тип("Число") Тогда - КлючСтроки = ТабличноеПоле.ДанныеСтроки(ВыделеннаяСтрока); - Иначе - КлючСтроки = ВыделеннаяСтрока; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ТаблицаКлючей.Добавить(), КлючСтроки); - КонецЦикла; - Возврат ТаблицаКлючей; - -КонецФункции - -// . -// Параметры: -// ТабличноеПоле - - -// НуженВидимыйПорядок - Булево - для динамического списка вычисление видимого порядка - долгое -// ЭтаФорма - Форма - передается для ускорения расчета итогов динамического списка -// -// Возвращаемое значение: -// - Массив - ключей выделенных строк -// -Функция ВыделенныеСтрокиТабличногоПоляЛкс(Знач ТабличноеПоле, Знач НуженВидимыйПорядок = Истина, ЭтаФорма = Неопределено) Экспорт - - ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; - #Если Сервер И Не Сервер Тогда - ВыделенныеСтроки = Новый Массив; - #КонецЕсли - Если Ложь - Или Не НуженВидимыйПорядок - Или ВыделенныеСтроки.Количество() <= 1 - Тогда - Результат = Новый Массив; - Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - Результат.Добавить(ВыделеннаяСтрока); - КонецЦикла; - Возврат Результат; - КонецЕсли; - // https://partners.v8.1c.ru/forum/t/1928636/m/1928636 - // http://www.hostedredmine.com/issues/881648 - МассивСтрок = Новый Массив; - ПолноеИмяТаблицыБД = ""; - ДанныеТабличногоПоля = Неопределено; - ТипИсточника = ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицыБД, ДанныеТабличногоПоля); - Если Истина - И ТипИсточника = "Список" - И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) - И ДанныеТабличногоПоля <> Неопределено - Тогда - КоллекцияСтрок = ДанныеСтрокДинамическогоСпискаЛкс(ТабличноеПоле, ВыделенныеСтроки,,,, ЭтаФорма); - СтруктураКлюча = Неопределено; - ОбъектМД = Неопределено; - Для Каждого ДанныеСтроки Из КоллекцияСтрок Цикл - МассивСтрок.Добавить(ирОбщий.КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицыБД, ДанныеСтроки,,,, СтруктураКлюча, ОбъектМД)); - КонецЦикла; - Иначе - Если Истина - И ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") - И ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") - Тогда - ВсеСтроки = ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение); - #Если Сервер И Не Сервер Тогда - ВсеСтроки = Новый Массив; - #КонецЕсли - Иначе - ВсеСтроки = ДанныеТабличногоПоля; - КонецЕсли; - Если ЛиКоллекцияЛкс(ВсеСтроки) Тогда - Для Каждого ЭлементКоллекции Из ВсеСтроки Цикл - Если ТипЗнч(ЭлементКоллекции) = Тип("ДанныеФормыЭлементКоллекции") Тогда - ВыделеннаяСтрока = ЭлементКоллекции.ПолучитьИдентификатор(); - СтрокаВыделена = ВыделенныеСтроки.Найти(ВыделеннаяСтрока) <> Неопределено; - Иначе - ВыделеннаяСтрока = ЭлементКоллекции; - СтрокаВыделена = ВыделенныеСтроки.Содержит(ВыделеннаяСтрока); - КонецЕсли; - Если СтрокаВыделена Тогда - МассивСтрок.Добавить(ВыделеннаяСтрока); - КонецЕсли; - КонецЦикла; - Иначе - // Грязно - ПредПозиция = Неопределено; - ПорядокНарушен = Ложь; - ТаблицаСтрок = Новый ТаблицаЗначений; - ТаблицаСтрок.Колонки.Добавить("Строка"); - ТаблицаСтрок.Колонки.Добавить("Позиция"); - Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - ПозицияСтроки = ВыделеннаяСтрока; - Если Истина - И ТипЗнч(ПозицияСтроки) = Тип("Число") // Бывают и другие типы. Для них не будет корректировки порядка - И ПредПозиция <> Неопределено - И ПозицияСтроки < ПредПозиция И ТаблицаСтрок.Количество() > 2 - Тогда - ПорядокНарушен = Истина; - КонецЕсли; - ПредПозиция = ПозицияСтроки; - ИначеЕсли Истина - И ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") - И ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") - Тогда - ПозицияСтроки = ВсеСтроки.Найти(ВыделеннаяСтрока); - Иначе - ПозицияСтроки = Неопределено; - КонецЕсли; - СтрокаТаблицы = ТаблицаСтрок.Добавить(); - СтрокаТаблицы.Строка = ВыделеннаяСтрока; - СтрокаТаблицы.Позиция = ПозицияСтроки; - КонецЦикла; - Если Не ПорядокНарушен Или ТипЗнч(ТабличноеПоле) <> Тип("ТаблицаФормы") Тогда - ТаблицаСтрок.Сортировать("Позиция"); - КонецЕсли; - МассивСтрок = ТаблицаСтрок.ВыгрузитьКолонку("Строка"); - КонецЕсли; - КонецЕсли; - Возврат МассивСтрок; - -КонецФункции - -Функция ВыделенныеИлиВсеСтрокиТабличногоПоляЛкс(Знач ТабличноеПоле) Экспорт - - Если ТабличноеПоле.ВыделенныеСтроки.Количество() > 1 Тогда - ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; - Иначе - ВыделенныеСтроки = ТабличноеПоле.Значение; - КонецЕсли; - Возврат ВыделенныеСтроки; - -КонецФункции - -Процедура ВывестиСтрокиТабличногоПоляСОформлениемЛкс(Знач ЭтаФорма, Знач КоллекцияСтрок, НомерСтроки = Неопределено, Знач Результат, Знач ТабличноеПоле, Смещение = "", ВстроитьЗначенияВРасшифровки = Истина, - Знач ВыбранныеКолонки = Неопределено) - - Если ВыбранныеКолонки = Неопределено Тогда - ВыбранныеКолонки = Новый Массив; - Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл - ВыбранныеКолонки.Добавить(КолонкаТП.Имя); - КонецЦикла; - КонецЕсли; - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - // Уберем разметку вхождений строки поиска - ДопСвойства.ЗапретРазметкиВхождений = Истина; - ТабличноеПоле.ОбновитьСтроки(КоллекцияСтрок); - Индикатор = ПолучитьИндикаторПроцессаЛкс(КоллекцияСтрок.Количество()); - Для Каждого СтрокаИсточника Из КоллекцияСтрок Цикл - ОбработатьИндикаторЛкс(Индикатор); - Попытка - ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(СтрокаИсточника); - Исключение - // Строки уже могли быть сконвертированы в строки ТЗ. Например доступные поля компоновки - ОформлениеСтроки = Неопределено; - КонецПопытки; - Если ОформлениеСтроки = Неопределено Тогда - Прервать; - КонецЕсли; - Если ТипЗнч(Результат) = Тип("ТабличныйДокумент") Тогда - #Если Сервер И Не Сервер Тогда - Результат = Новый ТабличныйДокумент; - #КонецЕсли - НомерСтроки = НомерСтроки + 1; - ОбластьСтроки = Результат.Область(НомерСтроки, 0, НомерСтроки, 0); - //ЗаполнитьЗначенияСвойств(ОбластьСтроки, ОформлениеСтроки, "Шрифт, ЦветТекста, ЦветФона"); - ИначеЕсли ТипЗнч(Результат) = Тип("ТаблицаЗначений") Тогда - #Если Сервер И Не Сервер Тогда - Результат = Новый ТаблицаЗначений; - #КонецЕсли - ОбластьСтроки = Результат.Добавить(); - КонецЕсли; - НомерКолонки = 1; - Для Каждого ИмяКолонки Из ВыбранныеКолонки Цикл - Колонка = ТабличноеПоле.Колонки[ИмяКолонки]; - //Если Ложь - // Или Не Колонка.Видимость - // //Или Колонка.Имя = ирКэш.ИмяКолонкиНомерСтрокиЛкс() - //Тогда - // Продолжить; - //КонецЕсли; - ОформлениеЯчейки = ОформлениеСтроки.Ячейки[Колонка.Имя]; - Если ТипЗнч(Результат) = Тип("ТабличныйДокумент") Тогда - ОбластьЯчейки = Результат.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки); - ЗаполнитьЗначенияСвойств(ОбластьЯчейки, ОформлениеЯчейки, "Шрифт, ЦветТекста, ЦветФона"); - Если ОформлениеЯчейки.ОтображатьТекст Тогда - Если ОформлениеЯчейки.Значение = Истина И Не ЗначениеЗаполнено(ОформлениеЯчейки.Текст) Тогда - ТекстЯчейки = "Да"; - Иначе - ТекстЯчейки = ОформлениеЯчейки.Текст; - КонецЕсли; - ОбластьЯчейки.Текст = Смещение + ТекстЯчейки; - ИначеЕсли ОформлениеЯчейки.ОтображатьФлажок Тогда - ОбластьЯчейки.Текст = Смещение + ОформлениеЯчейки.ЗначениеФлажка; - КонецЕсли; - Если Истина - И ВстроитьЗначенияВРасшифровки - //И ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ОформлениеЯчейки.Значение, Ложь) - Тогда - ОбластьЯчейки.Расшифровка = ОформлениеЯчейки.Значение; - КонецЕсли; - УстановитьГраницыОбластиТабличногоДокументаИзТабличногоПоляЛкс(ОбластьЯчейки, ТабличноеПоле); - НомерКолонки = НомерКолонки + 1; - ИначеЕсли ТипЗнч(Результат) = Тип("ТаблицаЗначений") Тогда - ОбластьСтроки[Колонка.Имя] = ОформлениеЯчейки.Текст; - КонецЕсли; - КонецЦикла; - Если Истина - И ТипЗнч(Результат) = Тип("ТабличныйДокумент") - И ТипЗнч(СтрокаИсточника) = Тип("СтрокаДереваЗначений") - И ТабличноеПоле.Развернут(СтрокаИсточника) - Тогда - Результат.НачатьГруппуСтрок(); - ВывестиСтрокиТабличногоПоляСОформлениемЛкс(ЭтаФорма, СтрокаИсточника.Строки, НомерСтроки, Результат, ТабличноеПоле, Смещение + " "); - Результат.ЗакончитьГруппуСтрок(); - КонецЕсли; - КонецЦикла; - ОсвободитьИндикаторПроцессаЛкс(); - // Вернем разметку вхождений строки поиска - ДопСвойства.ЗапретРазметкиВхождений = Ложь; - ТабличноеПоле.ОбновитьСтроки(КоллекцияСтрок); - -КонецПроцедуры - -Процедура ВывестиСтрокиТабличногоПоляИПоказатьЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ВыводБезОформления = Неопределено, Знач НастройкиСписка = Неопределено) Экспорт - - ТекущаяСтрока = Неопределено; - Результат = ВывестиСтрокиТабличногоПоляСНастройкойЛкс(ЭтаФорма, ТабличноеПоле, ВыводБезОформления, НастройкиСписка, ТекущаяСтрока); - Если Результат <> Неопределено Тогда - ОткрытьЗначениеЛкс(Результат,,,, Ложь,, ТабличноеПоле); - КонецЕсли; - -КонецПроцедуры - -Процедура УстановитьГраницыОбластиТабличногоДокументаИзТабличногоПоляЛкс(Знач ОбластьЯчейки, Знач ЭлементУправления) Экспорт - - ЛинияСплошная = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); - Если ЭлементУправления.ГоризонтальныеЛинии Тогда - ОбластьЯчейки.ГраницаСверху = ЛинияСплошная; - ОбластьЯчейки.ГраницаСнизу = ЛинияСплошная; - КонецЕсли; - Если ЭлементУправления.ВертикальныеЛинии Тогда - ОбластьЯчейки.ГраницаСлева = ЛинияСплошная; - ОбластьЯчейки.ГраницаСправа = ЛинияСплошная; - КонецЕсли; - -КонецПроцедуры // ЛксСравнитьСодержимоеПоля() - -Процедура РасширитьКолонкиТабличногоПоляЛкс(ТабличноеПоле, УважатьЗапретИзмененияРазмера = Истина) Экспорт - - //ВведенноеЗначениеШирины = 10; - //Если ВвестиЧисло(ВведенноеЗначениеШирины, "Введите новую ширину колонки для всех колонок", 5, 0) Тогда - // УстановитьСвойствоВКоллекцииЛкс(ТабличноеПоле.Колонки, "-Ширина", ВведенноеЗначениеШирины); - //КонецЕсли; - Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл - Ширина = Колонка.Ширина; - Если Ширина = 0 Тогда - // Антибаг платформы. - Ширина = 10; - КонецЕсли; - Если Ложь - Или Не УважатьЗапретИзмененияРазмера - Или Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять - Тогда - НоваяШирина = Ширина + 3; - Колонка.Ширина = НоваяШирина; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Пропорционально сжимает ширины колонок табличного поля. -// -// Параметры: -// ТабличноеПоле - ТабличноеПоле; -// Сжатие - Число, *2 - коэффициент сжатия; -// УважатьЗапретИзмененияРазмера - Булево, *Истина - не сжимать колонки с запретом изменения размера; -// -Процедура СжатьКолонкиТабличногоПоляЛкс(ТабличноеПоле, Сжатие = 2, УважатьЗапретИзмененияРазмера = Истина) Экспорт - - Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл - Ширина = Колонка.Ширина; - Если Ширина = 0 Тогда - // Антибаг платформы. - Ширина = 10; - КонецЕсли; - Если Ложь - Или Не УважатьЗапретИзмененияРазмера - Или Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять - Тогда - НоваяШирина = Ширина / Сжатие; - НоваяШирина = Макс(НоваяШирина, 1); - Колонка.Ширина = НоваяШирина; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Интерактивно записывает значение в поле ввода. Интерактивность заключается в срабатывании события ПриИзменении. -// -// Параметры: -// ЭлементУправления - ЭлементУправления - которому присваиваем значение; -// Значение - Произвольный - присваиваемое значение; -// ФормаИнициатор - Форма, УправляемаяФорма, *Неопределено - которая будет использована в качестве инициатора события; -// если не указана, то будет создана временная форма-пустышка; -// КонтролироватьУспех - Булево, *Ложь - проверять успешность установки значения, долго и не надежно для управляемой формы -// -// Результат - Булево, Неопределено - Если КонтролироватьУспех, то успешно ли значение установлено, иначе Неопределено -Функция ИнтерактивноЗаписатьВПолеВводаЛкс(ПолеВвода, Знач Значение = Неопределено, Знач ФормаИнициатор = Неопределено, КонтролироватьУспех = Ложь) Экспорт - - Если ФормаИнициатор = Неопределено Тогда - ФормаИнициатор = ирКэш.ФормаПустышкаЛкс(); - Иначе - СтарыйВладелец = ФормаИнициатор.ВладелецФормы; - СтарыйЗакрыватьПриВыборе = ФормаИнициатор.ЗакрыватьПриВыборе; - ФормаИнициатор.ЗакрыватьПриВыборе = Ложь; - КонецЕсли; - ФормаИнициатор.ВладелецФормы = ПолеВвода; - НовоеЗначение = ПолеВвода.ОграничениеТипа.ПривестиЗначение(Значение); - Если Ложь - Или НовоеЗначение <> Значение - Или ПолеВвода.ТолькоПросмотр - Тогда - Возврат Ложь; - КонецЕсли; - ФормаИнициатор.ОповеститьОВыборе(Значение); - Если СтарыйЗакрыватьПриВыборе <> Неопределено Тогда - ФормаИнициатор.ВладелецФормы = СтарыйВладелец; - ФормаИнициатор.ЗакрыватьПриВыборе = СтарыйЗакрыватьПриВыборе; - КонецЕсли; - Результат = Истина; - Если КонтролироватьУспех Тогда - ЗначениеПоля = ДанныеЭлементаФормыЛкс(ПолеВвода); - //Попытка - Результат = ЗначениеПоля = Значение; - //Исключение - // // Это поле управляемой формы - // Результат = Истина; - //КонецПопытки; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Интерактивно записывает значение в элемент управления (только поле ввода/формы) колонки табличного поля или таблицы формы. -// Интерактивность заключается в срабатывании события ПриИзменении у элемента управления. -// Строка табличного поля или таблицы формы должна находиться в режиме редактирования, -// иначе никаких изменений данных не произойдет. -// -// Параметры: -// ТабличноеПоле - ТабличноеПоле, ТаблицаФормы - внутри него строка редактируется; -// Колонка - КолонкаТабличногоПоля, ПолеФормы - в ее ячейку будем помещать значение; -// Значение - Произвольный - присваиваемое значение; -// *ФормаИнициатор - Форма, УправляемаяФормы, *Неопределено - которая будет использована в качестве инициатора события; -// если не указана, то будет создана временная форма-пустышка; -// *ВосстанавитьТекущуюКолонку - Булево, *Истина; -// *ВключитьРежимРедактирования - Булево, *Истина; -// КонтролироватьТекущиеДанные - Булево, *Истина - если значение не установилось интерактивно, то установить его программно -// ПутьКДаннымКолонки - Строка, *"" - имя колонки данных; используется при КонтролироватьТекущиеДанные -// Результат: -// Булево - Истина, если значение отправлено в поле, иначе оно не прошло проверки по связям и параметрам выбора -// -Функция ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Знач Колонка, Знач Значение, Знач ФормаИнициатор = Неопределено, Знач ВосстанавитьТекущуюКолонку = Истина, - Знач ВключитьРежимРедактирования = Истина, Знач КонтролироватьТекущиеДанные = Истина, Знач ВыключитьРежимРедактирования = Ложь, Знач ПутьКДаннымКолонки = "", Знач МетаданныеВыбора = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если ТипЗнч(Колонка) = Тип("КолонкаТабличногоПоля") Тогда - Если Ложь - Или Не Колонка.Доступность - Или Колонка.ТолькоПросмотр - Тогда - Возврат Ложь; - КонецЕсли; - ЭлементУправления = Колонка.ЭлементУправления; - Если ТипЗнч(ЭлементУправления) <> Тип("ПолеВвода") Тогда - ЭлементУправления = Неопределено; - КонецЕсли; - Иначе - ЭлементУправления = Колонка; - Если ТипЗнч(ЭлементУправления) <> Тип("ПолеФормы") Тогда - ЭлементУправления = Неопределено; - КонецЕсли; - КонецЕсли; - Если ЭлементУправления <> Неопределено Тогда - Если ВосстанавитьТекущуюКолонку Тогда - СтараяТекущаяКолонка = ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); - КонецЕсли; - ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, Колонка); - Если ВключитьРежимРедактирования Тогда - ТабличноеПоле.ИзменитьСтроку(); - КонецЕсли; - - // Связи и параметры выбора - Если Истина - И ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Значение, Ложь) - И ЗначениеЗаполнено(Значение) - Тогда - МетаданныеКолонки = Неопределено; - Если ТипЗнч(ЭлементУправления) = Тип("ПолеВвода") Тогда - ДанныеПоля = ДанныеЭлементаФормыЛкс(ЭлементУправления); - ХмлТип = XMLТипЗнч(ДанныеПоля); - Если Истина - И ХмлТип <> Неопределено - И Найти(ХмлТип.ИмяТипа, "CatalogRef.") > 0 - Тогда - Если Ложь - Или (Истина - И ЗначениеЗаполнено(ЭлементУправления.ВыборПоВладельцу) - И Значение.Владелец <> ЭлементУправления.ВыборПоВладельцу) - Или (Истина - И ЭлементУправления.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы - И Значение.ЭтоГруппа) - Или (Истина - И ЭлементУправления.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы - И Не Значение.ЭтоГруппа) - Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; - Если МетаданныеВыбора <> Неопределено Тогда - МетаданныеКолонки = СвойствоСтруктурыЛкс(МетаданныеВыбора.Колонки, ПутьКДаннымКолонки); - ОбъектВладелец = МетаданныеВыбора.РеквизитыВладельца; - СтруктураТЧ = Новый Структура("ТЧ", ТабличноеПоле.ТекущиеДанные); - КонецЕсли; - Иначе - МетаданныеКолонки = ЭлементУправления; - ПутьКДаннымОбъекта = ""; - ОбъектВладелец = Неопределено; - ДанныеЭлементаФормыЛкс(ТабличноеПоле, ПутьКДаннымОбъекта, ОбъектВладелец); - Если СтрЧислоВхождений(ПутьКДаннымОбъекта, ".") = 1 Тогда - СтруктураТЧ = Новый Структура(ирОбщий.ПоследнийФрагментЛкс(ПутьКДаннымОбъекта), ТабличноеПоле.ТекущиеДанные); - Иначе - ОбъектВладелец = ТабличноеПоле.ТекущиеДанные; - КонецЕсли; - КонецЕсли; - Если МетаданныеКолонки <> Неопределено Тогда - СтруктураОтбора = СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(МетаданныеКолонки, ОбъектВладелец, СтруктураТЧ); - Для Каждого КлючИЗначение Из СтруктураОтбора Цикл - ЗначениеРеквизита = Значение[КлючИЗначение.Ключ]; - Если Истина - И ЗначениеРеквизита <> КлючИЗначение.Значение - И (Ложь - Или ТипЗнч(КлючИЗначение.Значение) <> Тип("ФиксированныйМассив") - Или КлючИЗначение.Значение.Найти(ЗначениеРеквизита) = Неопределено) - Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - РезультатИнтерактивнойЗаписи = ИнтерактивноЗаписатьВПолеВводаЛкс(ЭлементУправления, Значение, ФормаИнициатор); - //КонтролироватьТекущиеДанные = КонтролироватьТекущиеДанные И РезультатИнтерактивнойЗаписи; // Если раскомментировать, то перестанет работать редактирование ячейки по двойному клику https://www.hostedredmine.com/issues/948448 - Если ВосстанавитьТекущуюКолонку Тогда - ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, СтараяТекущаяКолонка); - КонецЕсли; - Если ВыключитьРежимРедактирования Тогда - ТабличноеПоле.ЗакончитьРедактированиеСтроки(Ложь); - КонецЕсли; - КонецЕсли; - Если КонтролироватьТекущиеДанные Тогда // На 8.3.8 значение в свойство строки почему то не попадает - Если Не ЗначениеЗаполнено(ПутьКДаннымКолонки) Тогда - ПутьКДаннымКолонки = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, Колонка); - КонецЕсли; - Если ПутьКДаннымКолонки <> "" Тогда - ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - Попытка - ЗначениеЯчейки = ДанныеСтроки[ПутьКДаннымКолонки]; - ИмяДанныхПравильное = Истина; - Исключение - // В табличных полях компоновки - ИмяДанныхПравильное = Ложь; - КонецПопытки; - Если ИмяДанныхПравильное И ТипЗнч(ДанныеСтроки) <> Тип("ЭлементОтбора") Тогда - Если Значение <> ЗначениеЯчейки Тогда - // Такое случается в некоторых состояниях формы (пока Открыта() = Ложь) - // Также это срабатывает для неподдерживаемых типов в поле ввода - ДанныеСтроки[ПутьКДаннымКолонки] = Значение; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат Истина; - -КонецФункции - -Функция ТабличноеПоле_ТекущаяКолонкаЛкс(ТаблицаФормы, выхЭлементУправления = Неопределено, выхДоступноРедактирование = Неопределено) Экспорт - Если ТипЗнч(ТаблицаФормы) = Тип("ТаблицаФормы") Тогда - Результат = ТаблицаФормы.ТекущийЭлемент; - выхЭлементУправления = Результат; - ИначеЕсли ТипЗнч(ТаблицаФормы) = Тип("ТабличноеПоле") Тогда - Результат = ТаблицаФормы.ТекущаяКолонка; - Если Результат <> Неопределено Тогда - выхЭлементУправления = Результат.ЭлементУправления; - КонецЕсли; - Иначе - ВызватьИсключение "Неверный тип (" + ТипЗнч(ТаблицаФормы) + ") параметра"; - КонецЕсли; - выхДоступноРедактирование = Истина - И (Ложь - Или ТипЗнч(выхЭлементУправления) = Тип("ПолеВвода") - Или ТипЗнч(выхЭлементУправления) = Тип("ПолеФормы")) - И Не выхЭлементУправления.ТолькоПросмотр; - Возврат Результат; -КонецФункции - -Функция ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(Знач ТабличноеПоле, Знач НоваяТекущаяКолонка) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - Результат = ПрисвоитьЕслиНеРавноЛкс(ТабличноеПоле.ТекущаяКолонка, НоваяТекущаяКолонка); - Иначе - Результат = ПрисвоитьЕслиНеРавноЛкс(ТабличноеПоле.ТекущийЭлемент, НоваяТекущаяКолонка); - КонецЕсли; - Возврат Результат; - -КонецФункции - -Процедура ТабличноеПолеАктивироватьТекущуюСтрокуЕслиНеУстановленаЛкс(Знач ТабличноеПоле) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если Истина - И ТабличноеПоле.ТекущаяСтрока = Неопределено - И ТабличноеПоле.Значение.Количество() > 0 - Тогда - ТабличноеПоле.ТекущаяСтрока = ТабличноеПоле.Значение[0]; - КонецЕсли; - -КонецПроцедуры - -// Функция - Табличное поле сдвинуть выделенные строки лкс -// -// Параметры: -// ТабличноеПоле - - -// Смещение - Число - количество позиций на которые нужно переместить строки вперед (+) или назад (-) -// -// Возвращаемое значение: -// Булево - изменен ли порядок строк -// -Функция ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(Знач ТабличноеПоле, Знач Смещение) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если Ложь - Или ТабличноеПоле.ТолькоПросмотр - Или ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") - Тогда - Возврат Ложь; - КонецЕсли; - ПорядокИзменен = Ложь; - ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - #Если Сервер И Не Сервер Тогда - ВыделенныеСтроки = Новый Массив; - #КонецЕсли - Шаг = Смещение; - Пока Смещение <> 0 Цикл - БылиСдвиги = Ложь; - Для Индекс = 0 По ВыделенныеСтроки.ВГраница() Цикл - Если Смещение < 0 Тогда - ВыделеннаяСтрока = ВыделенныеСтроки[Индекс]; - Шаг = -1; - Иначе - ВыделеннаяСтрока = ВыделенныеСтроки[ВыделенныеСтроки.ВГраница() - Индекс]; - Шаг = +1; - КонецЕсли; - Позиция = ТабличноеПоле.Значение.Индекс(ВыделеннаяСтрока); - Если Ложь - Или (Истина - И Смещение < 0 - И Позиция > 0 + Индекс) - Или (Истина - И Смещение > 0 - И Позиция > -1 - И Позиция < ТабличноеПоле.Значение.Количество() - 1 - Индекс) - Тогда - ТабличноеПоле.Значение.Сдвинуть(ВыделеннаяСтрока, Шаг); - БылиСдвиги = Истина; - КонецЕсли; - КонецЦикла; - Если Не БылиСдвиги Тогда - Прервать; - КонецЕсли; - ПорядокИзменен = Истина; - Смещение = Смещение - Шаг; - КонецЦикла; - Возврат ПорядокИзменен; - -КонецФункции - -Процедура ТабличноеПолеОбновитьТекстыПодваловЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Принудительно = Истина) Экспорт - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - ОбщийТип = ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле); - Если ОбщийТип = Неопределено Тогда - Возврат; - КонецЕсли; - КоличествоВыделенных = ТабличноеПоле.ВыделенныеСтроки.Количество(); - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - ТабличноеПоле.Подвал = Истина - И ДопСвойства.ЗапретПодвала <> Истина - И (Ложь - Или ДопСвойства.КнопкаОтображенияПодвала <> Неопределено И ДопСвойства.КнопкаОтображенияПодвала.Пометка - Или КоличествоВыделенных > 1 И КоличествоВыделенных < 1000 // Для малого количества выделенных всегда показываем подвал - ); - Если Не ТабличноеПоле.Подвал Тогда - Возврат; - КонецЕсли; - ЭтоКоллекцияСМетаданными = Ложь; - Если ОбщийТип = "Список" Тогда - ИменаВидимыхКолонок = Новый Массив; - Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл - Если Колонка.Видимость И Колонка.Данные <> "" Тогда - ИменаВидимыхКолонок.Добавить(Колонка.Данные); - КонецЕсли; - КонецЦикла; - КоллекцияСтрок = ДанныеСтрокДинамическогоСпискаЛкс(ТабличноеПоле, ТабличноеПоле.ВыделенныеСтроки, СтрСоединитьЛкс(ИменаВидимыхКолонок),,, ЭтаФорма, Истина); // Долго - КолонкиКоллекции = КоллекцияСтрок.Колонки; - Иначе - КоллекцияСтрок = ТабличноеПоле.Значение; - Если ТипЗнч(КоллекцияСтрок) = Тип("ДеревоЗначений") Тогда - КоллекцияСтрок = КоллекцияСтрок.Строки; - КонецЕсли; - Если ОбщийТип = "ТабличнаяЧасть" Или ОбщийТип = "НаборЗаписей" Тогда - КолонкиКоллекции = ТабличноеПоле.Значение.ВыгрузитьКолонки().Колонки; - ЭтоКоллекцияСМетаданными = Истина; - Иначе - КолонкиКоллекции = ТабличноеПоле.Значение.Колонки; - КонецЕсли; - КонецЕсли; - Попытка - Если КоличествоВыделенных = КоллекцияСтрок.Количество() Тогда - КоличествоВыделенных = 1; // Для ускорения - КонецЕсли; - Исключение - КонецПопытки; - Если ОбщийТип <> "Список" И КоличествоВыделенных > 1 Тогда - ВыделенныеСтроки = ирОбщий.ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, Ложь); - КопияТаблицы = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, ВыделенныеСтроки,,,,, ЭтаФорма); - Иначе - ВыделенныеСтроки = Неопределено; - КопияТаблицы = КоллекцияСтрок; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - КопияТаблицы = Новый ТаблицаЗначений; - КолонкиКоллекции = КопияТаблицы.Колонки; - #КонецЕсли - СимволСуммы = "Σ"; - Если Истина - И Не Принудительно - И КоличествоВыделенных <= 1 - И Не ТабличноеПоле.ИзменятьСоставСтрок - И ИнтерактивныеКолонкиТабличногоПоляЛкс(ТабличноеПоле).Количество() = 0 - Тогда - Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл - Если Не Колонка.Видимость Тогда - Продолжить; - КонецЕсли; - Если Лев(Колонка.ТекстПодвала, 1) = СимволСуммы Тогда - Возврат; - КонецЕсли; - КонецЦикла; - КонецЕсли; - ТабличноеПоле.ВертикальныеЛинии = Истина; - //КопияТаблицы = ТаблицаСКолонкамиБезТипаNullЛкс(КопияТаблицы); // Если у колонки составной тип, то Итог() не будет считать булевы значения - КоличествоУжеВыведено = Ложь; - Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл - Если Не Колонка.Видимость Тогда - Продолжить; - КонецЕсли; - ДанныеКолонки = Колонка.Данные; - СуммаКолонки = ИтогКолонкиТабличногоПоляЛкс(КопияТаблицы, ДанныеКолонки, КолонкиКоллекции); - ТекстПодвала = ""; - Если СуммаКолонки = Неопределено Тогда - Если Истина - И Не КоличествоУжеВыведено - И (Ложь - Или Колонка.Ширина > 5 - Или Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять) - Тогда - ТекстПодвала = "N" + КопияТаблицы.Количество(); - КоличествоУжеВыведено = Истина; - КонецЕсли; - Колонка.ТекстПодвала = ТекстПодвала; - Продолжить; - КонецЕсли; - Если КоличествоВыделенных > 1 Тогда - ТекстПодвала = "!"; - КонецЕсли; - ТекстПодвала = ТекстПодвала + СимволСуммы + СуммаКолонки; - Колонка.ТекстПодвала = ТекстПодвала; - Колонка.ГоризонтальноеПоложениеВПодвале = ГоризонтальноеПоложение.Право; - КонецЦикла; - -КонецПроцедуры - -Функция ИтогКолонкиТабличногоПоляЛкс(Знач КопияТаблицы, Знач ИмяКолонки, Знач КолонкиКоллекции = Неопределено) Экспорт - - СуммаКолонки = Неопределено; - Если Истина - И ЗначениеЗаполнено(ИмяКолонки) - И ИмяКолонки <> "НомерСтроки" - //И КоллекцияСтрок.Количество() > 0 - И КопияТаблицы.Количество() > 0 - Тогда - Если КолонкиКоллекции = Неопределено Тогда - КолонкиКоллекции = КопияТаблицы.Колонки; - КонецЕсли; - ТипЗначения = КолонкиКоллекции.Найти(ИмяКолонки).ТипЗначения; - Если Ложь - Или ТипЗначения.СодержитТип(Тип("Число")) - Или ТипЗначения = Новый ОписаниеТипов("Булево") - Тогда - СуммаКолонки = КопияТаблицы.Итог(ИмяКолонки); - ИначеЕсли Истина - И ТипЗначения = Новый ОписаниеТипов("Булево, Null") - И ТипЗнч(КопияТаблицы) = Тип("ТаблицаЗначений") - //И Не ЭтоКоллекцияСМетаданными - И КопияТаблицы.Количество() < 10000 // Сужение типа - долгая операция - Тогда - //Если ТипЗнч(КопияТаблицы) <> Тип("ТаблицаЗначений") Тогда - // КопияТаблицы = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле,,,,,, ЭтаФорма); - //КонецЕсли; - // Если у колонки составной тип, то Итог() не будет считать булевы значения - КопияКолонки = ТаблицаСКолонкамиБезТипаNullЛкс(КопияТаблицы,, ИмяКолонки); - СуммаКолонки = КопияКолонки.Итог(ИмяКолонки); - КонецЕсли; - КонецЕсли; - Возврат СуммаКолонки; - -КонецФункции - -Процедура ТабличноеПолеКнопкаОтображенияИтоговНажатиеЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач Кнопка) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Кнопка.Пометка = Не Кнопка.Пометка; - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - ДопСвойства.КнопкаОтображенияПодвала = Кнопка; - ТабличноеПолеОбновитьТекстыПодваловЛкс(ЭтаФорма, ТабличноеПоле); - -КонецПроцедуры - -// Проверяет колонку табличного поля на доступность для эмуляции интерактивного изменения. -// -// Параметры: -// пКолонка - КолонкаТабличногоПоля. -// -// Возвращаемое значение: -// Истина - колонка интерактивно доступна; -// Ложь - иначе. -// -Функция ЛиВКолонкеДоступнаЭмуляцияИнтерактивногоИзмененияЛкс(КолонкаТабличногоПоля) Экспорт - - Если Истина - И КолонкаТабличногоПоля <> Неопределено - И КолонкаТабличногоПоля.Доступность - И КолонкаТабличногоПоля.Видимость - И Не КолонкаТабличногоПоля.ТолькоПросмотр - И (Ложь - Или (Истина - И ТипЗнч(КолонкаТабличногоПоля) = Тип("ПолеФормы") - И КолонкаТабличногоПоля.Вид = ВидПоляФормы.ПолеВвода) - Или (Истина - И ТипЗнч(КолонкаТабличногоПоля) = Тип("КолонкаТабличногоПоля") - И (Ложь - Или КолонкаТабличногоПоля.ДанныеФлажка <> "" - Или (Истина - И ТипЗнч(КолонкаТабличногоПоля.ЭлементУправления) = Тип("ПолеВвода") - И КолонкаТабличногоПоля.ЭлементУправления.Доступность)))) - Тогда - Попытка - Если КолонкаТабличногоПоля.ЭлементУправления.ТолькоПросмотр Тогда - Возврат Ложь; - КонецЕсли; - Исключение - КонецПопытки; - Возврат Истина; - КонецЕсли; - Возврат Ложь; - -КонецФункции - -// Копирует привязки между элементами форм. -// -// Параметры: -// пФорма - Форма - в которую копируем; -// ЭлементПриемник - ЭлементУправления; -// ЭлементИсточник - ЭлементУправления. -// -Процедура СкопироватьПривязкиЛкс(пФорма, ЭлементПриемник, ЭлементИсточник) Экспорт - - Перем ПервыйЭлемент, ГраницаПервогоЭлемента, ВторойЭлемент, ГраницаВторогоЭлемента; - - Границы = Новый Массив; - Границы.Добавить(ГраницаЭлементаУправления.Верх); - Границы.Добавить(ГраницаЭлементаУправления.Низ); - Границы.Добавить(ГраницаЭлементаУправления.Лево); - Границы.Добавить(ГраницаЭлементаУправления.Право); - Для Каждого Граница Из Границы Цикл - ЭлементИсточник.ПолучитьПривязку( Граница, ПервыйЭлемент, ГраницаПервогоЭлемента, ВторойЭлемент, - ГраницаВторогоЭлемента); - Если ПервыйЭлемент <> Неопределено Тогда - ПервыйЭлемент = пФорма.ЭлементыФормы.Найти(ПервыйЭлемент.Имя); - Если ПервыйЭлемент = Неопределено Тогда - ПервыйЭлемент = пФорма.Панель; - КонецЕсли; - КонецЕсли; - Если ВторойЭлемент <> Неопределено Тогда - ВторойЭлемент = пФорма.ЭлементыФормы.Найти(ВторойЭлемент.Имя); - Если ВторойЭлемент = Неопределено Тогда - ВторойЭлемент = пФорма.Панель; - КонецЕсли; - КонецЕсли; - ЭлементПриемник.УстановитьПривязку(Граница, ПервыйЭлемент, ГраницаПервогоЭлемента, ВторойЭлемент, - ГраницаВторогоЭлемента); - КонецЦикла; - -КонецПроцедуры // СкопироватьПривязкиЛкс() - -// Заполняет форму по ее макету. Используется для динамического добавления элементов -// в типовые формы, чтобы облегчить их обновление. Макет формы, если явно не указан, -// ищется среди форм объекта метаданных формы по имени "Лкс"+<ИмяФормы>+"Макет". -// Для измененных элементов в макете к имени следует добавлять через "_" суффиксы -// в соответствии с изменениями: "Привязка", "Размер", "Позиция", "Внутри" (для коллекций). -// Следует вызывать в обработчике ПередОткрытием формы. -// Ограничения. -// 1. Без явного указания макета работает только для основной формы объекта. -// 2. Нельзя добавлять элементы в панели и поля табличного документа, т.к. у элемента нельзя -// определить родителя. -// 3. Нельзя, чтобы форма и макет имели разные размеры. Обрабатывается. -// 4. Нельзя добавлять и изменять элементы, привязанные косвенно к низу формы. -// 5. Иногда элементы, привязанные косвенно к правой границе формы неверно располагаются. -// 6. Нельзя, чтобы оригинальные имена измененных элементов включали "_". Обрабатывается. -// -// Параметры: -// пФорма - Форма - которую настраиваем; -// *пМакет - Форма - макет, по которому настраиваем. -// -Процедура НастроитьФормуПоМакетуЛкс(пФорма, пМакетФормы) Экспорт - - МакетФормы = пМакетФормы; - СоответствиеПривязки = Новый Соответствие; - Если Ложь - Или пФорма.Высота <> МакетФормы.Высота - Или пФорма.Ширина <> МакетФормы.Ширина - Тогда - СообщитьЛкс("Не соответствие размеров формы при заполнении по макету", - СтатусСообщения.Важное); - КонецЕсли; - //ЗаполнитьЗначенияСвойств(пФорма, МакетФормы, , "ДокументОбъект, Данные, ЭтотОбъект, Панель, ЭлементыФормы"); - //ЗаполнитьЗначенияСвойств(пФорма.Панель, МакетФормы.Панель, , "Данные"); - ЭлементыФормы = пФорма.ЭлементыФормы; - Для Каждого ЭлементМакета Из МакетФормы.ЭлементыФормы Цикл - ИмяЭлемента = ЭлементМакета.Имя; - ЭлементФормы = ЭлементыФормы.Добавить(ТипЗнч(ЭлементМакета), ИмяЭлемента, Ложь, пФорма.Панель); - Если ТипЗнч(ЭлементМакета) = Тип("КоманднаяПанель") Тогда - ЗаполнитьЗначенияСвойств(ЭлементФормы, ЭлементМакета, , "Имя, Данные, Кнопки, ИсточникДействий"); - Если ЭлементМакета.ИсточникДействий = пМакетФормы Тогда - ЭлементФормы.ИсточникДействий = пФорма; - КонецЕсли; - ИначеЕсли ТипЗнч(ЭлементМакета) = Тип("ТабличноеПоле") Тогда - ЗаполнитьЗначенияСвойств(ЭлементФормы, ЭлементМакета, , "Имя, Данные, ТекущаяСтрока"); - Иначе - ЗаполнитьЗначенияСвойств(ЭлементФормы, ЭлементМакета, , "Имя, Данные"); - КонецЕсли; - СоответствиеПривязки.Вставить(ЭлементФормы, ЭлементМакета); - КонецЦикла; - - // Установи новые привязки - Для Каждого Привязка Из СоответствиеПривязки Цикл - ЭлементФормы = Привязка.Ключ; - ЭлементМакета = Привязка.Значение; - СкопироватьПривязкиЛкс(пФорма, ЭлементФормы, ЭлементМакета); - КонецЦикла; - -КонецПроцедуры // НастроитьФормуПоМакетуЛкс() - -Процедура ДеревоКонсолиПроверкаПеретаскиванияЛкс(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка, ИмяТипаСроки) Экспорт - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Структура") Тогда - ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; - Если ЗначениеПеретаскивания.Свойство("Тип") Тогда - Если НРег(ЗначениеПеретаскивания.Тип) = Нрег(ИмяТипаСроки) Тогда - ТекущийРодитель = Строка; - Пока ТекущийРодитель <> Неопределено Цикл - Если ТекущийРодитель = ЗначениеПеретаскивания.Значение Тогда - ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать; - Возврат; - КонецЕсли; - ТекущийРодитель = ТекущийРодитель.Родитель; - КонецЦикла; - СтандартнаяОбработка = Ложь; - ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ДеревоКонсолиПеретаскиваниеЛкс(ЭтаФорма, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, СтрокаПриемник, Колонка, ИмяТипаСроки, ИмяПоляНаименования = "Наименование") Экспорт - - #Если Сервер И Не Сервер Тогда - Элемент = Новый ТабличноеПоле; - #КонецЕсли - Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Структура") Тогда - ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; - Если ЗначениеПеретаскивания.Свойство("Тип") Тогда - Если НРег(ЗначениеПеретаскивания.Тип) = Нрег(ИмяТипаСроки) Тогда - СтандартнаяОбработка = Ложь; - Если СтрокаПриемник <> Неопределено Тогда - РодительскаяСтрока = СтрокаПриемник; - Иначе - РодительскаяСтрока = Элемент.Значение; - КонецЕсли; - НоваяСтрокаДерева = Неопределено; - Элемент.ВыделенныеСтроки.Очистить(); - ВыделенныеСтроки = Новый Массив; - Для Каждого СтрокаИсточника Из ЗначениеПеретаскивания.Значение Цикл - НоваяСтрокаДерева = РодительскаяСтрока.Строки.Добавить(); - СкопироватьСтрокиДереваЛкс(СтрокаИсточника, НоваяСтрокаДерева); - Если Истина - И СтрокаИсточника.Родитель = НоваяСтрокаДерева.Родитель - И ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение - Тогда - // - Иначе - ДеревоКонсолиПриОкончанииРедактированияЛкс(НоваяСтрокаДерева, ИмяПоляНаименования); - КонецЕсли; - Элемент.ТекущаяСтрока = НоваяСтрокаДерева; - Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение Тогда - РодительСтроки = СтрокаИсточника.Родитель; - Если РодительСтроки = Неопределено Тогда - РодительСтроки = Элемент.Значение; - Если СтрокаИсточника.Владелец() <> РодительСтроки Тогда - // Строка другой формы. Не будем ее удалять - РодительСтроки = Неопределено; - КонецЕсли; - КонецЕсли; - Если РодительСтроки <> Неопределено Тогда - РодительСтроки.Строки.Удалить(СтрокаИсточника); - СтрокаИсточника = Неопределено; - КонецЕсли; - КонецЕсли; - Если СтрокаИсточника <> Неопределено Тогда - НоваяСтрокаДерева.ИД = Новый УникальныйИдентификатор; - КонецЕсли; - Если Элемент.ИзменяетДанные Тогда - ЭтаФорма.Модифицированность = Истина; - КонецЕсли; - ВыделенныеСтроки.Добавить(НоваяСтрокаДерева); - КонецЦикла; - Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - Элемент.ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ДеревоКонсолиПриОкончанииРедактированияЛкс(Знач СтрокаДерева, Знач ИмяПоляНаименования = "Наименование") Экспорт - - РодительСтроки = РодительСтрокиДереваЛкс(СтрокаДерева); - СтрокаДерева[ИмяПоляНаименования] = АвтоУникальноеИмяВКоллекцииЛкс(РодительСтроки.Строки, СтрокаДерева, ИмяПоляНаименования, Ложь); - -КонецПроцедуры - -Процедура ДеревоКонсолиНачалоПеретаскиванияЛкс(Элемент, ПараметрыПеретаскивания, Выполнение, ИмяТипаСроки) Экспорт - - Элемент.ТекущаяСтрока = Элемент.ТекущаяСтрока; // Для сохранения изменений в строке - ЗначениеПеретаскивания = Новый Структура("Тип, Значение", ИмяТипаСроки, ВыделенныеСтрокиТабличногоПоляЛкс(Элемент)); - ПараметрыПеретаскивания.Значение = ЗначениеПеретаскивания; - -КонецПроцедуры - -Процедура ТабличноеПолеСпискаНастроекКомпоновкиПроверкаПеретаскиванияЛкс(Знач ЭтаФорма, Знач Элемент, Знач ПараметрыПеретаскивания, СтандартнаяОбработка, Знач Строка) Экспорт - - Если Не СтандартнаяОбработка Тогда - Возврат; - КонецЕсли; - ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; - Если Строка <> Неопределено И ТипЗнч(ЗначениеПеретаскивания) = Тип("Массив") Тогда - ЗначениеПеретаскивания = ЗначениеПеретаскивания[0]; - //Если Ложь - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ЭлементОтбораКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ОтборКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ВыбранноеПолеКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ЭлементПорядкаКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ЭлементУсловногоОформления") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ПользовательскоеПолеВыборКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппировкаТаблицыКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппировкаКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") - // Или ТипЗнч(ЗначениеПеретаскивания) = Тип("ТаблицаКомпоновкиДанных") - //Тогда - Элемент.ТекущаяСтрока = Строка; - СтандартнаяОбработка = Ложь; - ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать; - //КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Для корректной активации при проверке перетаскивания -Процедура ОбновитьТабличноеПолеДереваПослеУстановкиДанныхЛкс(ЭтаФорма, Знач ТабличноеПолеДерева) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПолеДерева = Новый ТабличноеПоле; - #КонецЕсли - ДанныеТабличногоПоля = ДанныеЭлементаФормыЛкс(ТабличноеПолеДерева); - Если ТипЗнч(ДанныеТабличногоПоля) = Тип("ДеревоЗначений") Тогда - Если Истина - И ТабличноеПолеДерева.ТекущаяСтрока = Неопределено - И ДанныеТабличногоПоля.Строки.Количество() > 0 - Тогда - ТабличноеПолеДерева.ТекущаяСтрока = ДанныеТабличногоПоля.Строки[0]; - КонецЕсли; - Если ТабличноеПолеДерева.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни Тогда - ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(ТабличноеПолеДерева); - КонецЕсли; - Иначе - Если ТабличноеПолеДерева.ТекущаяСтрока = Неопределено Тогда - Попытка - ТабличноеПолеДерева.ТекущаяСтрока = ДанныеТабличногоПоля; - Исключение - КонецПопытки; - КонецЕсли; - Если ТабличноеПолеДерева.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни Тогда - Попытка - ТабличноеПолеДерева.Развернуть(ДанныеТабличногоПоля, Истина); - Исключение - // Например это ЗначенияПараметровДанныхКомпоновкиДанных - КонецПопытки; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура СкопироватьСтрокиДереваЛкс(СтрокаИсточник, СтрокаПриемник, СтопСтрока = Неопределено, Рекурсивно = Истина) Экспорт - - Если СтопСтрока = Неопределено Тогда - Если СтрокаПриемник.Родитель <> Неопределено Тогда - СтопСтрока = СтрокаПриемник.Родитель; - КонецЕсли; - КонецЕсли; - Дерево = СтрокаПриемник.Владелец(); - Для Каждого Колонка Из Дерево.Колонки Цикл - СтрокаПриемник[Колонка.Имя] = КопияОбъектаЛкс(СтрокаИсточник[Колонка.Имя]); - КонецЦикла; - Если Рекурсивно Тогда - Для Каждого Строка Из СтрокаИсточник.Строки Цикл - Если Строка = СтопСтрока Тогда - Продолжить; - КонецЕсли; - НоваяСтрока = СтрокаПриемник.Строки.Добавить(); - СкопироватьСтрокиДереваЛкс(Строка, НоваяСтрока, СтопСтрока, Рекурсивно); - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -// Процедура - Изменить свернутость лкс -// -// Параметры: -// ЭтаФорма - - -// Видимость - - -// ГлавныйЭлемент - - какой элемент будет свернут -// Разделитель - - -// Панель - - внутри какой панели находится сворачиваемый элемент -// Направление - Строка - "лево", "право", "верх", "низ" - куда будет сдвинута граница -// ПодчиненныйЭлемент - - -// ПропорциональныйРазмер - - -// -Процедура ИзменитьСвернутостьЛкс(ЭтаФорма, Видимость, ГлавныйЭлемент, Разделитель, Панель, Направление, ПодчиненныйЭлемент = Неопределено, - ПропорциональныйРазмер = Истина) Экспорт - - //Если Не ЭтаФорма.Открыта() Тогда - // // Антибаг платформы. Иначе после закрытия и затем открытия привязки могут сломаться - // СообщитьЛкс(СтрШаблонИменЛкс("Изменение свернутости панели вызвано для закрытой формы %1",, ЭтаФорма.Заголовок)); - // Возврат; - //КонецЕсли; - Если Разделитель = Неопределено Тогда - Разделитель = ГлавныйЭлемент; - КонецЕсли; - Если ТипЗнч(Разделитель) = Тип("Разделитель") Тогда - Если Разделитель.Ориентация = Ориентация.Авто Тогда - // возможно это касается только свертки вправо - СообщитьЛкс(СтрШаблонИменЛкс("Корректная работа свертки с разделителем %1 с ориентацией ""Авто"" не гарантируется из-за ошибки платформы",, Разделитель.Имя), СтатусСообщения.Внимание); - КонецЕсли; - КонецЕсли; - //ПервыйЭлемент = 0; - //ГраницаПервогоЭлемента = 0; - //ВторойЭлемент = 0; - //ГраницаВторогоЭлемента = 0; - Если СтрокиРавныЛкс(Направление, "лево") Тогда - Если Видимость Тогда - // откроем - Если ПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Лево, Разделитель, ГраницаЭлементаУправления.Право); - КонецЕсли; - Разделитель.Свертка = РежимСверткиЭлементаУправления.Нет; - Если Разделитель <> ГлавныйЭлемент Тогда - ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Нет; - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Лево, Разделитель, ГраницаЭлементаУправления.Право); - Если ПропорциональныйРазмер Тогда - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, Панель, ГраницаЭлементаУправления.Лево, Панель, - ГраницаЭлементаУправления.Право); - Иначе - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, Панель, ГраницаЭлементаУправления.Право); - КонецЕсли; - ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Право, Разделитель, ГраницаЭлементаУправления.Лево); - КонецЕсли; - //Разделитель.Ширина = ШиринаРазделителя; - Иначе - // скроем - Если Разделитель <> ГлавныйЭлемент Тогда - ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Право); - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право); - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Лево, ГлавныйЭлемент, ГраницаЭлементаУправления.Право); - ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Лево; - КонецЕсли; - Разделитель.Свертка = РежимСверткиЭлементаУправления.Лево; - Если ПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Лево, ГлавныйЭлемент, ГраницаЭлементаУправления.Право); - КонецЕсли; - КонецЕсли; - - ИначеЕсли СтрокиРавныЛкс(Направление, "право") Тогда - Если Видимость Тогда - // откроем - Если ПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Право, Разделитель, ГраницаЭлементаУправления.Лево); - КонецЕсли; - Разделитель.Свертка = РежимСверткиЭлементаУправления.Нет; - Если Разделитель <> ГлавныйЭлемент Тогда - ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Нет; - Если ПропорциональныйРазмер Тогда - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, Панель, ГраницаЭлементаУправления.Лево, Панель, - ГраницаЭлементаУправления.Право); - Иначе - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, Панель, ГраницаЭлементаУправления.Право); - КонецЕсли; - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Лево, Разделитель, ГраницаЭлементаУправления.Право); - ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Лево, Разделитель, ГраницаЭлементаУправления.Право); - //Разделитель.Ширина = ШиринаРазделителя; - КонецЕсли; - Иначе - // Скроем - Если Разделитель <> ГлавныйЭлемент Тогда - ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Лево); - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Лево); - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Право, ГлавныйЭлемент, ГраницаЭлементаУправления.Лево); - ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Право; - КонецЕсли; - Разделитель.Свертка = РежимСверткиЭлементаУправления.Право; - Если ПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Право, ГлавныйЭлемент, ГраницаЭлементаУправления.Лево); - КонецЕсли; - КонецЕсли; - - ИначеЕсли СтрокиРавныЛкс(Направление, "низ") Тогда - Если Видимость Тогда - // Откроем - Если ПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Верх, Разделитель, ГраницаЭлементаУправления.Низ); - КонецЕсли; - Разделитель.Свертка = РежимСверткиЭлементаУправления.Нет; - Если Разделитель <> ГлавныйЭлемент Тогда - ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Нет; - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Верх, Разделитель, ГраницаЭлементаУправления.Низ); - Если ПропорциональныйРазмер Тогда - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Панель, ГраницаЭлементаУправления.Верх, Панель, - ГраницаЭлементаУправления.Низ); - Иначе - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Панель, ГраницаЭлементаУправления.Низ); - КонецЕсли; - ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Верх, Разделитель, ГраницаЭлементаУправления.Низ); - КонецЕсли; - //Разделитель.Высота = ШиринаРазделителя; - Иначе // Скроем - Если Разделитель <> ГлавныйЭлемент Тогда - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Верх); - ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Верх); - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ГлавныйЭлемент, ГраницаЭлементаУправления.Верх); - ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Низ; - КонецЕсли; - Разделитель.Свертка = РежимСверткиЭлементаУправления.Низ; - Если ПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ГлавныйЭлемент, ГраницаЭлементаУправления.Верх); - КонецЕсли; - КонецЕсли; - - ИначеЕсли СтрокиРавныЛкс(Направление, "верх") Тогда - Если Видимость Тогда - // Откроем - Если ПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Разделитель, ГраницаЭлементаУправления.Верх); - КонецЕсли; - Разделитель.Свертка = РежимСверткиЭлементаУправления.Нет; - Если Разделитель <> ГлавныйЭлемент Тогда - ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Нет; - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Верх, Разделитель, ГраницаЭлементаУправления.Низ); - Если ПропорциональныйРазмер Тогда - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Панель, ГраницаЭлементаУправления.Верх, Панель, - ГраницаЭлементаУправления.Низ); - Иначе - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Панель, ГраницаЭлементаУправления.Низ); - КонецЕсли; - ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Низ, Разделитель, ГраницаЭлементаУправления.Верх); - //Разделитель.Высота = ШиринаРазделителя; - КонецЕсли; - Иначе // Скроем - Если Разделитель <> ГлавныйЭлемент Тогда - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Низ); - ГлавныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Низ); - Разделитель.УстановитьПривязку(ГраницаЭлементаУправления.Верх, ГлавныйЭлемент, ГраницаЭлементаУправления.Низ); - ГлавныйЭлемент.Свертка = РежимСверткиЭлементаУправления.Верх; - КонецЕсли; - Разделитель.Свертка = РежимСверткиЭлементаУправления.Верх; - Если ПодчиненныйЭлемент <> Неопределено Тогда - ПодчиненныйЭлемент.УстановитьПривязку(ГраницаЭлементаУправления.Верх, ГлавныйЭлемент, ГраницаЭлементаУправления.Низ); - КонецЕсли; - КонецЕсли; - - КонецЕсли; -КонецПроцедуры - -// <Описание процедуры> -// -// Параметры: -// Ссылка - Ссылка, КлючЗаписи, КонстантаМенеджер; -// ПолноеИмя - Строка - полное имя метаданных для константы. -// -Процедура ОткрытьСсылкуИзРезультатаПоискаСсылокЛкс(Ссылка, ПолноеИмя = "") Экспорт - - Если ЛиКлючЗаписиРегистраЛкс(Ссылка) Тогда - ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)); - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - ФормаСписка = ПолучитьФормуСпискаЛкс(ОбъектМетаданных.ПолноеИмя(),,,,,, Ссылка); - ФормаСписка.Открыть(); - ИначеЕсли ЛиКорневойТипКонстантыЛкс(ПервыйФрагментЛкс(ПолноеИмя)) Тогда - ОткрытьКонстантуВСпискеЛкс(ПоследнийФрагментЛкс(ПолноеИмя)); - Иначе - ОткрытьЗначение(Ссылка); - КонецЕсли; - -КонецПроцедуры // ОткрытьСсылкуИзРезультатаПоискаСсылокЛкс() - -Процедура ОткрытьКонстантуВСпискеЛкс(ИмяКонстанты) Экспорт - - ФормаСписка = ПолучитьФормуЛкс("Обработка.ирРедакторКонстант.Форма",,, ИмяКонстанты); - ФормаСписка.НачальноеЗначениеВыбора = ИмяКонстанты; - ФормаСписка.Открыть(); - -КонецПроцедуры - -Функция ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Знач Элемент, Знач Текст = Неопределено, Знач ВыделитьТекстДоКонца = Ложь) Экспорт - - НачалоКолонки = 0; НачалоСтроки = 0; КонецКолонки = 0; КонецСтроки = 0; - Элемент.ПолучитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки); - Если Текст = Неопределено Тогда - Текст = Элемент.Значение; - КонецЕсли; - Если Истина - И Не ВыделитьТекстДоКонца - И Вычислить("ЭтаФорма." + СтрЗаменить(Элемент.Данные, "." + ПеревестиСтроку("Отбор") + ".", "." + ПеревестиСтроку("ОтборСтрок") + ".")) = Текст - Тогда - // Блокируем нежелательный повторный вызов события АвтоподборТекста, который возникает в некоторых случаях - Возврат Ложь; - КонецЕсли; - Элемент.Значение = Текст; // Даже при совпадающих значения тут происходит неявная установка значения в связанные данные формы - //ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, Текст); // Так делать нельзя, т.к. будет засоряться история последних введенных строк - Если Текст = "" Тогда - Возврат Истина; - КонецЕсли; - // Этот блок вызывает нежелательное повторный вызов события АвтоподборТекста, но он необходим, чтобы событие ПриИзменении сработало при уходе фокуса - Элемент.УстановитьГраницыВыделения(1, СтрДлина(Текст) + 1); - Элемент.ВыделенныйТекст = Элемент.ВыделенныйТекст; - - Если ВыделитьТекстДоКонца Тогда - //Элемент.УстановитьГраницыВыделения(СтрДлина(Текст) + 1, СтрДлина(Текст) + 1); // так будет ошибка, ставить справа от последнего символа можно только 4-мя параметрами - Элемент.УстановитьГраницыВыделения(НачалоСтроки, СтрДлина(Текст) + 1, КонецСтроки, СтрДлина(Текст) + 1); - Иначе - Элемент.УстановитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки); - КонецЕсли; - Возврат Истина; - -КонецФункции - -Функция ПрочитатьЗначениеИзФайлаСКонтролемПотерьЛкс(ПолноеИмяФайла) Экспорт - - ФайлЗначения = Новый Файл(ПолноеИмяФайла); - ПолученноеЗначение = Неопределено; - Если ФайлЗначения.Существует() Тогда - Текст = Новый ТекстовыйДокумент; - Текст.Прочитать(ПолноеИмяФайла); - Текст = Текст.ПолучитьТекст(); - Попытка - ПолученноеЗначение = ЗначениеИзСтрокиВнутрЛкс(Текст); - Исключение - СообщитьЛкс("Ошибка чтения из файла: " + ОписаниеОшибки()); - КонецПопытки; - КонецЕсли; - Если ПолученноеЗначение = Неопределено Тогда - Возврат ПолученноеЗначение; - КонецЕсли; - СравнениеФайлов = Новый СравнениеФайлов; - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - Если Не ПроверитьСериализациюXMLПередВызовомЗначениеВФайлЛкс(ПолученноеЗначение) Тогда - //СообщитьЛкс("Не удалось сериализовать считанные из файла данные: " + ОписаниеОшибки(), СтатусСообщения.Внимание); - Возврат ПолученноеЗначение; - КонецЕсли; - Попытка - ЗначениеВФайл(ИмяВременногоФайла, ПолученноеЗначение); - Исключение - Возврат ПолученноеЗначение; - КонецПопытки; - СравнениеФайлов.ПервыйФайл = ПолноеИмяФайла; - СравнениеФайлов.ВторойФайл = ИмяВременногоФайла; - СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.Двоичное; - Если Не СравнениеФайлов.Сравнить() Тогда - //СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент; - //СравнениеФайлов.ПоказатьРазличия(); // Для отладки - СообщитьЛкс("При чтении из файла вероятно была потеряна часть информации", СтатусСообщения.Внимание); - КонецЕсли; - УдалитьФайлы(ИмяВременногоФайла); - Возврат ПолученноеЗначение; - -КонецФункции - -Функция ПроверитьСериализациюXMLПередВызовомЗначениеВФайлЛкс(Знач ПолученноеЗначение) Экспорт - - Если ирКэш.НомерВерсииПлатформыЛкс() >= 803012 Тогда - СериализацияXMLУспешна = Истина; - Иначе - СериализацияXMLУспешна = Ложь; - Попытка - // Антибаг платформы https://bugboard.v8.1c.ru/error/000035977.html - // ЗначениеВФайл на некоторых ошибках вызывает безусловное завершение работы http://devtool1c.ucoz.ru/forum/2-746-1 - // http://devtool1c.ucoz.ru/forum/2-752-1 - // Выполняется сильно дольше чем ЗначениеВФайл! - ирОбщий.ОбъектВСтрокуXMLЛкс(ПолученноеЗначение); - СериализацияXMLУспешна = Истина; - Исключение - // Может быть ошибка - Отсутствует отображение для типа 'ОбходРезультатаЗапроса'. http://devtool1c.ucoz.ru/forum/2-756-1 - КонецПопытки; - КонецЕсли; - Возврат СериализацияXMLУспешна; - -КонецФункции - -Процедура УстановитьАвтоматическоеРаскрытиеУзловДереваЛкс(Знач ТабличноеПолеДерева, Порог = 30) Экспорт - - Дерево = ТабличноеПолеДерева.Значение; - #Если Сервер И Не Сервер Тогда - Дерево = Новый ДеревоЗначений; - #КонецЕсли - ДеревоЗначенийСвернутьРазвернутьЛкс(ТабличноеПолеДерева, ирОбщий.ВсеСтрокиДереваЗначенийЛкс(Дерево).Количество() > Порог); - Если Дерево.Строки.Количество() = 1 Тогда - ТабличноеПолеДерева.Развернуть(Дерево.Строки[0]); - КонецЕсли; - -КонецПроцедуры - -#КонецЕсли Функция НеблокирующиеМетаданныеБСПЛкс() Экспорт @@ -12721,12 +8842,6 @@ КонецФункции -Процедура ОформитьСтрокуДопРеквизитаБСПЛкс(ОформлениеСтроки) Экспорт - - ОформлениеСтроки.ЦветТекста = Новый Цвет(0, 0, 128); - -КонецПроцедуры - Функция ПраваСОграничениямиДоступаКДаннымЛкс() Экспорт ДоступныеПрава = Новый СписокЗначений; @@ -13195,16 +9310,9 @@ ИмяТипа = ирОбщий.ИмяТипаИзПолногоИмениМДЛкс(Метаданные.НайтиПоТипу(ТипЗначения), РасширениеТипа); МассивТипов.Добавить(Тип(ИмяТипа)); КонецЦикла; - ИначеЕсли ТипТаблицы = "Точки" Тогда - РасширениеТипа = "ТочкаМаршрутаБизнесПроцессаСсылка"; + ИначеЕсли ирОбщий.ЛиТипТаблицыМетассылкиЛкс(ТипТаблицы) Тогда Для Каждого ИмяТаблицыБД Из МассивИменТаблицБД Цикл - ИмяТипа = СтрЗаменить(ИмяТаблицыБД, "БизнесПроцесс.", РасширениеТипа + "."); - МассивТипов.Добавить(Тип(ИмяТипа)); - КонецЦикла; - ИначеЕсли ирОбщий.ЛиКорневойТипПеречисленияЛкс(ТипТаблицы) Тогда - РасширениеТипа = "Ссылка"; - Для Каждого ИмяТаблицыБД Из МассивИменТаблицБД Цикл - ИмяТипа = ИмяТипаИзПолногоИмениМДЛкс(ИмяТаблицыБД, РасширениеТипа); + ИмяТипа = ирОбщий.ИмяТипаИзПолногоИмениТаблицыБДЛкс(ИмяТаблицыБД); МассивТипов.Добавить(Тип(ИмяТипа)); КонецЦикла; ИначеЕсли ирОбщий.ЛиКорневойТипКонстантыЛкс(ТипТаблицы) Тогда @@ -13397,6 +9505,29 @@ КонецФункции +Процедура СкопироватьСтрокиДереваЛкс(СтрокаИсточник, СтрокаПриемник, СтопСтрока = Неопределено, Рекурсивно = Истина) Экспорт + + Если СтопСтрока = Неопределено Тогда + Если СтрокаПриемник.Родитель <> Неопределено Тогда + СтопСтрока = СтрокаПриемник.Родитель; + КонецЕсли; + КонецЕсли; + Дерево = СтрокаПриемник.Владелец(); + Для Каждого Колонка Из Дерево.Колонки Цикл + СтрокаПриемник[Колонка.Имя] = ирОбщий.КопияОбъектаЛкс(СтрокаИсточник[Колонка.Имя]); + КонецЦикла; + Если Рекурсивно Тогда + Для Каждого Строка Из СтрокаИсточник.Строки Цикл + Если Строка = СтопСтрока Тогда + Продолжить; + КонецЕсли; + НоваяСтрока = СтрокаПриемник.Строки.Добавить(); + СкопироватьСтрокиДереваЛкс(Строка, НоваяСтрока, СтопСтрока, Рекурсивно); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + Функция СериализацииРавныЛкс(Значение1, Значение2, СУчетомРегистра = Истина) Экспорт СтрокаXML1 = ОбъектВСтрокуXMLЛкс(Значение1); @@ -13627,7 +9758,7 @@ Если ПустаяСтрока(ТекстПрограммы) Тогда #Если Клиент Тогда - ТекстПрограммы = ТекстИзБуфераОбменаОСЛкс(); + ТекстПрограммы = ирКлиент.ТекстИзБуфераОбменаОСЛкс(); #Иначе ВызватьИсключение "Получение текста из буфера обмена возможно только на клиенте"; #КонецЕсли @@ -13864,7 +9995,7 @@ КонецФункции -Функция ВыбратьВсеДоступныеПоляКомпоновки(Знач СхемаКомпоновки, Знач НастройкаКомпоновки = Неопределено) Экспорт +Функция ДобавитьВсеДоступныеПоляКомпоновкиВВыбранныеЛкс(Знач СхемаКомпоновки, Знач НастройкаКомпоновки = Неопределено) Экспорт Если НастройкаКомпоновки = Неопределено Тогда НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; @@ -15057,68 +11188,6 @@ КонецФункции -Функция ИндексКартинкиТипаТаблицыБДЛкс(Знач ТипТаблицы) Экспорт - - ТипТаблицы = ПеревестиВРусский(ТипТаблицы); - ИндексКартинки = 14; - Если ТипТаблицы = "Константы" Тогда - ИндексКартинки = 2; - ИначеЕсли ТипТаблицы = "Константа" Тогда - ИндексКартинки = 2; - //ИначеЕсли ТипТаблицы = "ТабличнаяЧасть" Тогда - ИначеЕсли ЛиТипВложеннойТаблицыБДЛкс(ТипТаблицы) Тогда - ИндексКартинки = 20; - ИначеЕсли ТипТаблицы = "Изменения" Тогда - ИндексКартинки = 27; - ИначеЕсли ТипТаблицы = "ВиртуальнаяТаблица" Тогда - ИндексКартинки = 28; - ИначеЕсли ТипТаблицы = "ВнешнийИсточникДанных" Тогда - ИндексКартинки = 29; - ИначеЕсли ТипТаблицы = "Справочник" Тогда - ИндексКартинки = 3; - ИначеЕсли ТипТаблицы = "Перечисление" Тогда - ИндексКартинки = 4; - ИначеЕсли ТипТаблицы = "Документ" Тогда - ИндексКартинки = 5; - ИначеЕсли ТипТаблицы = "ЖурналДокументов" Тогда - ИндексКартинки = 6; - ИначеЕсли ТипТаблицы = "Последовательность" Тогда - ИндексКартинки = 7; - ИначеЕсли ТипТаблицы = "РегистрНакопления" Тогда - ИндексКартинки = 8; - ИначеЕсли ТипТаблицы = "РегистрСведений" Тогда - ИндексКартинки = 9; - ИначеЕсли ТипТаблицы = "РегистрБухгалтерии" Тогда - ИндексКартинки = 10; - ИначеЕсли ТипТаблицы = "РегистрРасчета" Тогда - ИндексКартинки = 11; - ИначеЕсли ТипТаблицы = "ПланОбмена" Тогда - ИндексКартинки = 19; - ИначеЕсли ТипТаблицы = "Задача" Тогда - ИндексКартинки = 17; - ИначеЕсли ТипТаблицы = "БизнесПроцесс" Тогда - ИндексКартинки = 18; - ИначеЕсли ТипТаблицы = "РегистрРасчета" Тогда - ИндексКартинки = 26; - ИначеЕсли ТипТаблицы = "ПланВидовРасчета" Тогда - ИндексКартинки = 25; - ИначеЕсли ТипТаблицы = "ПланВидовХарактеристик" Тогда - ИндексКартинки = 22; - ИначеЕсли ТипТаблицы = "Перечисление" Тогда - ИндексКартинки = 23; - ИначеЕсли ТипТаблицы = "ПланСчетов" Тогда - ИндексКартинки = 24; - ИначеЕсли ТипТаблицы = "Перерасчет" Тогда - ИндексКартинки = 30; - ИначеЕсли ТипТаблицы = "КритерийОтбора" Тогда - ИндексКартинки = 31; - ИначеЕсли СтрокиРавныЛкс(ТипТаблицы, "Table") Тогда - ИндексКартинки = 3; - КонецЕсли; - Возврат ИндексКартинки; - -КонецФункции - Функция НайтиДобавитьЭлементНастроекКомпоновкиПоПредставлениюЛкс(Знач ЭлементыНастройки, Знач Представление = "", Знач ПроверятьУникальность = Истина, Знач ИспользованиеДляНового = Истина) Экспорт @@ -16482,6 +12551,16 @@ КонецФункции +Функция ЧислоHEXВЦветЛкс(ЧислоHEX) Экспорт + + Красный = СтрокаHEXtoINTЛкс(Лев(ЧислоHEX, 2)); + Зеленый = СтрокаHEXtoINTЛкс(Сред(ЧислоHEX, 3, 2)); + Синий = СтрокаHEXtoINTЛкс(Сред(ЧислоHEX, 5, 2)); + Результат = Новый Цвет(Красный, Зеленый, Синий); + Возврат Результат; + +КонецФункции + Функция ПолучитьЦветСтиляЛкс(ИмяЦвета) Экспорт //Результат = ирПортативный.ПолучитьЦветСтиляЛкс(Имя); @@ -16931,7 +13010,10 @@ _РежимОтладки = Ложь; Функция ПредставлениеТаблицыБДЛкс(ИмяТаблицыБД) Экспорт - ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(ИмяТаблицыБД); + Если Не ЗначениеЗаполнено(ИмяТаблицыБД) Тогда + Возврат Неопределено; + КонецЕсли; + ОбъектМД = ОбъектМДПоПолномуИмениЛкс(ИмяТаблицыБД); Если ОбъектМД <> Неопределено Тогда Результат = ОбъектМД.Представление(); Иначе @@ -16969,7 +13051,7 @@ _РежимОтладки = Ложь; Тогда ОбъектМД = ОбъектМДПоПолномуИмениТаблицыБДЛкс(ПолноеИмяТаблицыБД); Если ОбъектМД = Неопределено Тогда - ТипТаблицы = ПеревестиВРусский(Фрагменты[2]); + ТипТаблицы = ПеревестиВРусский(Фрагменты[2]); // ВидыРасчета, ВидыСубконто Иначе ТипТаблицы = "ТабличнаяЧасть"; КонецЕсли; @@ -16990,6 +13072,15 @@ _РежимОтладки = Ложь; КонецФункции +Функция ЛиСуществуетОбъектПоСсылкеЛкс(Знач РасширенноеЗначение) Экспорт + + Запрос = Новый Запрос("ВЫБРАТЬ 1 ИЗ " + ирОбщий.ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(РасширенноеЗначение)) + " ГДЕ Ссылка = &Ссылка"); + Запрос.УстановитьПараметр("Ссылка", РасширенноеЗначение); + ОбъектСуществует = Не Запрос.Выполнить().Пустой(); + Возврат ОбъектСуществует; + +КонецФункции + // ВариантИсточников - // // Параметры: @@ -17253,7 +13344,7 @@ _РежимОтладки = Ложь; Функция ПолучитьТекстЗапросаСтатистикиПоТаблицеЛкс(ПолноеИмяМДИлиТаблицы, ИмяКлючевойКолонки = "ПолноеИмяОбъекта", ИмяКолонкиКоличества = "КоличествоСтрок", ЛиТаблицыИзменений = Ложь, СтруктураОтбора = Неопределено, ТолькоРазрешенные = Ложь, ЭтоПолноеИмяТаблицы = Ложь) Экспорт - + //ЗаписьXML = Новый ЗаписьXML; // Так будет дольше ТекстЧастиОбъединения = " |SELECT"; @@ -17320,6 +13411,59 @@ _РежимОтладки = Ложь; КонецФункции +// Не поддерживает таблицы внешних источников данных. Надо переделать вызывы этой функции на ирКлиент.ВычислитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс +Функция ЗапросПодсчетаКоличестваСтрокСоЗначениемИзТаблицыКолонокБДЛкс(Знач СтрокиКолонокДляОбновления, Знач ЗначениеОтбора, Знач ВидСравненияНовый = Неопределено) Экспорт + + ТекстЗапроса = Новый ЗаписьXML; + ТекстЗапроса.УстановитьСтроку(); + ЛиТекстПустой = Истина; + Для Каждого СтрокаКолонкиБД Из СтрокиКолонокДляОбновления Цикл + Если СтрокаКолонкиБД.ТипТаблицы = "Внешняя" Тогда + Продолжить; + КонецЕсли; + // Антибаг 8.2.14 http://partners.v8.1c.ru/forum/thread.jsp?id=1017264#1017264 + Если Истина + И СтрокаКолонкиБД.ТипТаблицы = "Изменения" + И Найти(СтрокаКолонкиБД.ПолноеИмяТаблицы, "РегистрСведений.") = 1 + И ирКэш.ДоступныОбщиеРеквизитыЛкс() + Тогда + Если Метаданные.ОбщиеРеквизиты.Найти(СтрокаКолонкиБД.ИмяКолонки) <> Неопределено Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + Если Не СтрокаКолонкиБД.ЕстьДоступ Тогда + Продолжить; + КонецЕсли; + Если Не ЛиТекстПустой Тогда + ТекстЗапроса.ЗаписатьБезОбработки(" + |ОБЪЕДИНИТЬ ВСЕ"); + Иначе + ЛиТекстПустой = Ложь; + КонецЕсли; + ТекстЗапроса.ЗаписатьБезОбработки(" + |ВЫБРАТЬ """ + СтрокаКолонкиБД.ПолноеИмяТаблицы + """ КАК ПолноеИмяТаблицы, """ + СтрокаКолонкиБД.ИмяКолонки + """ КАК ИмяКолонки, КОЛИЧЕСТВО(*) КАК Количество + |ИЗ " + СтрокаКолонкиБД.ПолноеИмяТаблицы + " КАК Т"); + + // Очень долгий способ + // ТекстЗапроса.ЗаписатьБезОбработки(" + // |{ГДЕ Т." + СтрокаКолонкиБД.ИмяКолонки + " КАК ПолеОтбора}"); + //КонецЦикла; + //Схема = СоздатьСхемуКомпоновкиПоЗапросу(ТекстЗапроса,,, Истина); + //НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; + //НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки, "ПолеОтбора", ЗначениеОтбора, ВидСравненияНовый); + //Запрос = ЗапросИзКомпоновкиЛкс(Схема, НастройкаКомпоновки); + // + ОписаниеПоля = ОписаниеПоляТаблицыБДЛкс(СтрокаКолонкиБД.ПолноеИмяТаблицы, СтрокаКолонкиБД.ИмяКолонки); + ВыражениеСравнения = ВыражениеСравненияСПараметромВЗапросеЛкс(ОписаниеПоля, ВидСравненияНовый, "ЗначениеОтбора"); + ТекстЗапроса.ЗаписатьБезОбработки(" + |ГДЕ Т." + СтрокаКолонкиБД.ИмяКолонки + " " + ВыражениеСравнения); + КонецЦикла; + Запрос = Новый Запрос(ТекстЗапроса.Закрыть()); + Запрос.Параметры.Вставить("ЗначениеОтбора", ЗначениеОтбора); + Возврат Запрос; + +КонецФункции + Функция ИмяВременнойТаблицыДляТаблицыБДЛкс(ПолноеИмяТаблицы, ИмяВременнойТаблицы = "ВТ") Экспорт ТипТаблицы = ТипТаблицыБДЛкс(ПолноеИмяТаблицы); @@ -17414,7 +13558,7 @@ _РежимОтладки = Ложь; Для Каждого ТипПоля Из Колонка.ТипЗначения.Типы() Цикл ВыражениеПоля = ВыражениеПоля + " | КОГДА ЛОЖЬ - | ТОГДА " + ирОбщий.ВыражениеПриведенияТипаНаЯзыкеЗапросовЛкс(ТипПоля, Колонка.ТипЗначения); + | ТОГДА " + ВыражениеПриведенияТипаНаЯзыкеЗапросовЛкс(ТипПоля, Колонка.ТипЗначения); КонецЦикла; ВыражениеПоля = ВыражениеПоля + " |КОНЕЦ КАК " + Колонка.Имя; @@ -17422,7 +13566,7 @@ _РежимОтладки = Ложь; ВыраженияПолей.Добавить(ВыражениеПоля); КонецЦикла; ВыраженияПолей = " - | " + ирОбщий.СтрСоединитьЛкс(ВыраженияПолей, "," + Символы.ПС); + | " + СтрСоединитьЛкс(ВыраженияПолей, "," + Символы.ПС); Иначе ВыраженияПолей = "*"; КонецЕсли; @@ -17479,7 +13623,7 @@ _РежимОтладки = Ложь; Функция ПрочитатьНаборЗаписейВТаблицуЛкс(НаборЗаписей, НовыйРежимБлокировки = Неопределено) Экспорт Если НовыйРежимБлокировки <> Неопределено Тогда - ирОбщий.ЗаблокироватьНаборЗаписейПоОтборуЛкс(НаборЗаписей, Истина, НовыйРежимБлокировки); + ЗаблокироватьНаборЗаписейПоОтборуЛкс(НаборЗаписей, Истина, НовыйРежимБлокировки); КонецЕсли; ЭтоИмитатор = Истина И Не ирКэш.ЛиПортативныйРежимЛкс() @@ -17497,7 +13641,7 @@ _РежимОтладки = Ложь; #КонецЕсли Данные = НаборЗаписей; ПолноеИмяМД = НаборЗаписей.Метаданные().ПолноеИмя(); - КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяМД); + КорневойТип = ПервыйФрагментЛкс(ПолноеИмяМД); Если ЛиКорневойТипРегистраБухгалтерииЛкс(КорневойТип) Тогда // Чтобы в таблице правильно расставились субконто https://partners.v8.1c.ru/forum/t/1168440/m/1711008 Запрос = Новый Запрос; @@ -17506,9 +13650,9 @@ _РежимОтладки = Ложь; |ИЗ " + ПолноеИмяМД + "." + ПеревестиСтроку("ДвиженияССубконто") + "(,, Регистратор = &Регистратор) КАК Т |"; Запрос.УстановитьПараметр("Регистратор", НаборЗаписей.Отбор.Регистратор.Значение); - ирОбщий.ЗаблокироватьНаборЗаписейПоОтборуЛкс(НаборЗаписей, Истина, РежимБлокировкиДанных.Разделяемый); + ЗаблокироватьНаборЗаписейПоОтборуЛкс(НаборЗаписей, Истина, РежимБлокировкиДанных.Разделяемый); // Избавиться от NULL в колонках видов субконто надо, чтобы потом метод Загрузить не выдавал ошибку - Результат = ирОбщий.ТаблицаСКолонкамиБезТипаNullЛкс(Запрос.Выполнить().Выгрузить()); + Результат = ТаблицаСКолонкамиБезТипаNullЛкс(Запрос.Выполнить().Выгрузить()); Иначе НаборЗаписей.Прочитать(); Результат = НаборЗаписей.Выгрузить(); @@ -17835,6 +13979,33 @@ _РежимОтладки = Ложь; КонецПроцедуры +Функция ВОписанииОшибкиЕстьПередачаМутабельногоЗначенияЛкс(Знач ОписаниеОшибки, ЭтоПроизвольныйАлгоритм = Ложь, Знач ЛиМодально = Ложь) Экспорт + + Результат = Ложь; + Если Истина + //И (Ложь + // Или Не ирКэш.ЛиПортативныйРежимЛкс() + // Или ирПортативный.ЛиСерверныйМодульДоступенЛкс()) + И Найти(ОписаниеОшибки, "мутабельн") > 0 + И Найти(ОписаниеОшибки, "Записать") > 0 + Тогда + ТекстСообщения = "Чтобы избежать ошибки передачи мутабельного значения при записи объектов, используйте "; + Если ирКэш.ЛиПортативныйРежимЛкс() И Не ирПортативный.ЛиСерверныйМодульДоступенЛкс() Тогда + ТекстСообщения = ТекстСообщения + " вариант ""Расширение"" http://devtool1c.ucoz.ru/index/rasshirenie_variant/0-52"; + Иначе + Если ЭтоПроизвольныйАлгоритм Тогда + ТекстСообщения = ТекстСообщения + "функцию ""ирОбщий.ЗаписатьОбъектЛкс(Объект, Истина)"""; + Иначе + ТекстСообщения = ТекстСообщения + "опцию ""Запись на сервере"" инструмента"; + КонецЕсли; + КонецЕсли; + ирОбщий.СообщитьЛкс(ТекстСообщения, СтатусСообщения.Внимание); + Результат = Истина; + КонецЕсли; + Возврат Результат; + +КонецФункции + Процедура УстановитьДопСвойстваИзПарамертовЗаписиОбъектаЛкс(Знач Объект, Знач ПараметрыЗаписи) Экспорт #Если Сервер И Не Сервер Тогда @@ -19299,7 +15470,9 @@ _РежимОтладки = Ложь; Если СтрокиРавныЛкс(ТипCOMКласса, "ComConnector") Тогда ирОбщий.СообщитьЛкс("Убедитесь что зарегистрирован COM класс COMConnector нужной разрядности и версии платформы"); КонецЕсли; - ирОбщий.ОткрытьФормуЛкс("Обработка.ирУправлениеCOMКлассами1С.Форма"); + #Если Клиент Тогда + ирКлиент.ОткрытьФормуЛкс("Обработка.ирУправлениеCOMКлассами1С.Форма"); + #КонецЕсли ВызватьИсключение "Ошибка создания COM объекта " + ИмяCOMКласса + ": " + ОписаниеОшибки(); КонецПопытки; Возврат Соединение; @@ -19539,7 +15712,7 @@ _РежимОтладки = Ложь; Функция ОбъектВСтрокуДляСравненияВнутрЛкс(Знач Объект) Экспорт РежимXML = Ложь; - Если ЛиТабличнаяЧастьЛкс(Объект) Тогда + Если ЛиТабличнаяЧастьЛкс(Объект, Истина) Тогда Объект = Объект.Выгрузить(); ИначеЕсли ТипЗнч(Объект) = Тип("ТаблицаЗначений") Тогда // сериализация через ЗначениеВСтрокуВнутр будет содержать внутренние номер строк и первого свободного номера @@ -19583,6 +15756,32 @@ _РежимОтладки = Ложь; КонецФункции +Функция ЛиТаблицаСериализуемаЛкс(Знач ТаблицаЗначений) Экспорт + + #Если Сервер И Не Сервер Тогда + ТаблицаЗначений = Новый ТаблицаЗначений; + #КонецЕсли + ВсеРедактируемыеТипы = ОписаниеТиповВсеРедактируемыеТипыЛкс(); + Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл + ТипыКолонки = Колонка.ТипЗначения.Типы(); + ТаблицаСериализуема = Ложь; + Если ТипыКолонки.Количество() > 0 Тогда + ТаблицаСериализуема = Истина; + Для Каждого Тип Из ТипыКолонки Цикл + Если Не ВсеРедактируемыеТипы.СодержитТип(Тип) Тогда + ТаблицаСериализуема = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если Не ТаблицаСериализуема Тогда + Прервать; + КонецЕсли; + КонецЦикла; + Возврат ТаблицаСериализуема; + +КонецФункции + Функция ТаблицаИзДереваСвойствоЗначениеАтрибутыЛкс(Знач СтрокиДерева) Экспорт #Если Сервер И Не Сервер Тогда @@ -22478,7 +18677,18 @@ _РежимОтладки = Ложь; КонецФункции -Функция ИмяФиктивногоПоляСхемыКомпоновкиЛкс() +Функция ОтобратьЭлементыКоллекцииЛкс(Коллекция, СтруктураОтбора = Неопределено) Экспорт + Результат = Новый Массив; + СтрокаСвойств = ""; + Для Каждого ЭлементКоллекции Из Коллекция Цикл + Если СтруктураОтбора = Неопределено Или СравнитьЗначенияСвойствЛкс(ЭлементКоллекции, СтруктураОтбора, СтрокаСвойств) Тогда + Результат.Добавить(ЭлементКоллекции); + КонецЕсли; + КонецЦикла; + Возврат Результат; +КонецФункции + +Функция ИмяФиктивногоПоляСхемыКомпоновкиЛкс() Экспорт Возврат "_ФиктивноеПоле"; @@ -22509,7 +18719,7 @@ _РежимОтладки = Ложь; НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(НастройкаКомпоновки.Структура); КонецЕсли; Если ВыбратьВсеДоступныеПоля Тогда - ВыбратьВсеДоступныеПоляКомпоновки(СхемаКомпоновки, НастройкаКомпоновки); + ДобавитьВсеДоступныеПоляКомпоновкиВВыбранныеЛкс(СхемаКомпоновки, НастройкаКомпоновки); КонецЕсли; Если ОтключитьОбщиеИтоги Тогда НастройкаКомпоновки.ПараметрыВывода.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВертикальноеРасположениеОбщихИтогов"), РасположениеИтоговКомпоновкиДанных.Нет); @@ -22730,8751 +18940,6 @@ _РежимОтладки = Ложь; Возврат КоллекцияЗначений; КонецФункции -#КонецЕсли - -#Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент И Клиент Тогда - -Функция БазовыйФайлРедактораJSONЛкс() экспорт - Возврат ирКэш.Получить().БазовыйФайлРедактораJSON(); -КонецФункции - -Процедура РедакторJSON_ИнициироватьЛкс(РедакторJSON) Экспорт - РедакторJSON.menu.style.backgroundColor = "#d0d0d0"; -КонецПроцедуры - -Процедура ПереключитьРежимДереваРедактораJSONЛкс(РедакторJSON, РежимДерева) Экспорт - Если РежимДерева Тогда - РедакторJSON.setMode("tree"); - Иначе - РедакторJSON.setMode("code"); - КонецЕсли; - РедакторJSON_ИнициироватьЛкс(РедакторJSON); -КонецПроцедуры - -Процедура ПоказатьНеуникальныеСтрокиТабличногоПоляЛкс(Знач ТабличноеПоле, Знач СтрокаКлюча = "") Экспорт - - НеуникальныеКлючи = НеуникальныеКлючиТаблицыЛкс(ТабличноеПоле.Значение, СтрокаКлюча); - ТекстСообщения = "Найдено " + НеуникальныеКлючи.Количество() + " неуникальных ключей строк"; - Если НеуникальныеКлючи.Количество() > 0 Тогда - ВыделитьСтрокиТабличногоПоляПоКлючуЛкс(ТабличноеПоле, НеуникальныеКлючи[0], СтрокаКлюча); - ТекстСообщения = ТекстСообщения + ". Выделены строки первого ключа"; - //ЭтаФорма.ТекущийЭлемент = ТабличноеПоле; - КонецЕсли; - СообщитьЛкс(ТекстСообщения); - -КонецПроцедуры - -Процедура ОтладитьОтложенныйОбъектЛкс(Знач СсылкаИлиИмяФайла = Неопределено, УдалитьОбъектПослеУспешногоОткрытия = Ложь) Экспорт - - Если ПроверитьПлатформаНеWindowsЛкс(,, Истина) Тогда - Возврат; - КонецЕсли; - СтруктураПараметров = Неопределено; - ирПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - Ссылка = Справочники.ирОбъектыДляОтладки.ПустаяСсылка(); - ирПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Если СсылкаИлиИмяФайла = Неопределено Тогда - ВычислительРегулярныхВыражений = ирПлатформа.RegExp; - ВычислительРегулярныхВыражений.Pattern = "Объект ""([^""]+)""|Файл ""([^""]+)""|Пользователь ""([^""]+)"""; - СсылкаИлиИмяФайла = ТекстИзБуфераОбменаОСЛкс(); - Результат = ВычислительРегулярныхВыражений.НайтиВхождения(СсылкаИлиИмяФайла); - ЕстьСправочник = Метаданные.Справочники.Найти("ирОбъектыДляОтладки") <> Неопределено; - //Если Не ВвестиСтроку(СсылкаИлиИмяФайла, "Введите результат сохранения объекта") Тогда - ФормаВвода = ирПлатформа.ПолучитьФорму("ОткрытьОбъектДляОтладки"); - Если Результат.Количество() > 0 Тогда - ФормаВвода.Текст = СсылкаИлиИмяФайла; - КонецЕсли; - СсылкаИлиИмяФайла = ФормаВвода.ОткрытьМодально(); - Если Не ЗначениеЗаполнено(СсылкаИлиИмяФайла) Тогда - Если ЕстьСправочник Тогда - СсылкаИлиИмяФайла = ВыбратьСсылкуЛкс(Метаданные.Справочники.ирОбъектыДляОтладки,, Ложь); - Иначе - СсылкаИлиИмяФайла = ВыбратьФайлОбъектаДляОтладкиЛкс(); - КонецЕсли; - КонецЕсли; - Если Не ЗначениеЗаполнено(СсылкаИлиИмяФайла) Тогда - Возврат; - КонецЕсли; - Если ТипЗнч(СсылкаИлиИмяФайла) = Тип("Строка") Тогда - Результат = ВычислительРегулярныхВыражений.НайтиВхождения(СсылкаИлиИмяФайла); - Если Результат.Количество() = 0 Тогда - СообщитьЛкс("Введен некорректный результат сохранения объекта для отладки"); - Возврат; - КонецЕсли; - Если Результат[0].SubMatches(0) <> Неопределено Тогда - Если ЕстьСправочник Тогда - ВычислительРегулярныхВыражений.Pattern = "\b(" + ирПлатформа.шGUID + ")\b"; - Результат = ВычислительРегулярныхВыражений.НайтиВхождения(СсылкаИлиИмяФайла); - Если Результат.Количество() > 0 Тогда - СсылкаИлиИмяФайла = Результат[0].Value; - Иначе - СсылкаИлиИмяФайла = Неопределено; - КонецЕсли; - Иначе - СсылкаИлиИмяФайла = Неопределено; - КонецЕсли; - Если СсылкаИлиИмяФайла = Неопределено Тогда - СообщитьЛкс("Введен некорректный результат сохранения объекта для отладки"); - Возврат; - КонецЕсли; - СсылкаИлиИмяФайла = Справочники.ирОбъектыДляОтладки.ПолучитьСсылку(Новый УникальныйИдентификатор(СсылкаИлиИмяФайла)); - Если Не ЗначениеЗаполнено(СсылкаИлиИмяФайла) Тогда - СообщитьЛкс("Объект для отладки не найден в справочнике"); - Возврат; - КонецЕсли; - ИначеЕсли Результат[0].SubMatches(1) <> Неопределено Тогда - СсылкаИлиИмяФайла = Результат[0].SubMatches(1); - Если ЕстьСправочник Тогда - // Перекладываем из файла в новый элемент справочника - ФайлОбъектаДляОтладки = Новый Файл(СсылкаИлиИмяФайла); - Попытка - ОбъектДляОтладки = ЗначениеИзФайла(ФайлОбъектаДляОтладки.ПолноеИмя); - Исключение - ОбъектДляОтладки = ОбъектИзСтрокиXMLЛкс(ФайлОбъектаДляОтладки); - КонецПопытки; - РезультатОтложения = ОтложитьУпакованныйОбъектДляОтладкиЛкс(ОбъектДляОтладки, СсылкаИлиИмяФайла); - СообщитьЛкс(РезультатОтложения); - УдалитьФайлы(ФайлОбъектаДляОтладки.ПолноеИмя); - КонецЕсли; - ИначеЕсли Результат[0].SubMatches(2) <> Неопределено Тогда - ИмяПользователя = Результат[0].SubMatches(2); - СтруктураПараметров = ХранилищеОбщихНастроек.Загрузить(ирКэш.ИмяПродукта(), ИмяНастройкиХраненияОбъектаОтложеннойОтладкиЛкс(),, ИмяПользователя); - Если СтруктураПараметров = Неопределено Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Объект для отладки не найден в общих настройках пользователя %1",, ИмяПользователя)); - Возврат; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если СтруктураПараметров = Неопределено Тогда - //Если ТипЗнч(СсылкаИлиИмяФайла) = Тип("Строка") Тогда - // СтрокаРезультата = ПолучитьИзВременногоХранилища(СсылкаИлиИмяФайла); - // Если СтрокаРезультата = Неопределено Тогда - // СообщитьЛкс("Временное хранилище пусто. Вероятно отлаживаемый сеанс завершился."); - // Возврат; - // КонецЕсли; - ЧтениеXML = Новый ЧтениеXML; - Если ТипЗнч(СсылкаИлиИмяФайла) = Тип("Строка") Тогда - Попытка - СтруктураПараметров = ЗначениеИзФайла(СсылкаИлиИмяФайла); - Исключение - ЧтениеXML.ОткрытьФайл(СсылкаИлиИмяФайла); - КонецПопытки; - ИначеЕсли ЛиСсылкаНаОбъектБДЛкс(СсылкаИлиИмяФайла) Тогда - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | ирОбъектыДляОтладки.XML - |ИЗ - | Справочник.ирОбъектыДляОтладки КАК ирОбъектыДляОтладки - |ГДЕ - | ирОбъектыДляОтладки.Ссылка = &Ссылка - |"; - Запрос.УстановитьПараметр("Ссылка", СсылкаИлиИмяФайла); - ТаблицаРезультата = Запрос.Выполнить().Выгрузить(); - Если ТаблицаРезультата.Количество() = 0 Тогда - СообщитьЛкс("Объект для отладки не найден в справочнике. Вероятно он был удален."); - Возврат; - КонецЕсли; - СтрокаРезультата = ТаблицаРезультата[0]; - СтрокаРезультата = СтрокаРезультата.XML; - Попытка - СтруктураПараметров = ЗначениеИзСтрокиВнутр(СтрокаРезультата); - Исключение - ЧтениеXML.УстановитьСтроку(СтрокаРезультата); - КонецПопытки; - КонецЕсли; - Если СтруктураПараметров = Неопределено Тогда - Попытка - СтруктураПараметров = СериализаторXDTO.ПрочитатьXML(ЧтениеXML); - Исключение - ОписаниеОшибки = ОписаниеОшибки(); - СообщитьЛкс("Некорректный объект для отладки: " + ОписаниеОшибки, СтатусСообщения.Внимание); - Возврат; - КонецПопытки; - КонецЕсли; - КонецЕсли; - ОтладитьОбъектПоСтруктуреЛкс(СтруктураПараметров); - Если УдалитьОбъектПослеУспешногоОткрытия Тогда - Если ТипЗнч(СсылкаИлиИмяФайла) = Тип("Строка") Тогда - УдалитьФайлы(СсылкаИлиИмяФайла); - Иначе - УдалениеОбъекта = Новый УдалениеОбъекта(СсылкаИлиИмяФайла); - УдалениеОбъекта.ОбменДанными.Загрузка = Истина; - УдалениеОбъекта.Записать(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ВыбратьФайлОбъектаДляОтладкиЛкс() Экспорт - - ПутьДляФайловОбъектовДляОтладки = ПолучитьКаталогОбъектовДляОтладкиЛкс(); - Расширение = РасширениеФайловДляОтладкиЛкс(); - Результат = ВыбратьФайлЛкс(, Расширение, "Файлы объектов для отладки",, ПутьДляФайловОбъектовДляОтладки); - Если Результат <> Неопределено Тогда - Результат = "Файл """ + Результат + """"; - КонецЕсли; - Возврат Результат; - -КонецФункции - -#Если Клиент Тогда - -Процедура ОтладитьОбъектПоСтруктуреЛкс(Знач СтруктураПараметров) Экспорт - - #Если Сервер И Не Сервер Тогда - СтруктураПараметров = Новый Структура; - #КонецЕсли - Объект = СтруктураПараметров.Объект; - Если СтруктураПараметров.Свойство("ИмяПользователя") Тогда - ИмяПользователя = СтруктураПараметров.ИмяПользователя; - Если ИмяПользователя <> ИмяПользователя() Тогда - СообщитьЛкс(СтрШаблонЛкс("Загружаемый снимок объекта для отладки был сделан под другим пользователем (%1)", ИмяПользователя)); - КонецЕсли; - КонецЕсли; - Если СтруктураПараметров.Свойство("Транзакция") Тогда - СообщитьЛкс("Загружаемый снимок объекта для отладки сделан в транзакции. Если она не зафиксирована, поведение объекта может отличаться. Показан неполный список незафиксированных на тот момент изменений."); - АнализЖурналаРегистрации = СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирАнализЖурналаРегистрации"); - #Если Сервер И Не Сервер Тогда - АнализЖурналаРегистрации = Обработки.ирАнализЖурналаРегистрации.Создать(); - #КонецЕсли - ОтборЖурнала = СтруктураПараметров.Транзакция; - Начало = ОтборЖурнала.Начало; - Конец = ОтборЖурнала.Конец; - ОтборЖурнала.Удалить("Начало"); - ОтборЖурнала.Удалить("Конец"); - АнализЖурналаРегистрации.ОткрытьСОтбором(Начало, Конец, ОтборЖурнала); - КонецЕсли; - ТипОперации = СтруктураПараметров.ТипОперации; - Если ТипОперации = "Отладить" Тогда - Объект2 = СтруктураПараметров.НастройкаКомпоновки; - Если СтруктураПараметров.Свойство("ТипОбъекта") И СтруктураПараметров.ТипОбъекта = "HttpСоединение" Тогда - // Параметр ИспользоватьАутентификациюОС появился в 8.3.7 - Если Объект.Защищенное Тогда - ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL; - Иначе - ЗащищенноеСоединение = Неопределено; - КонецЕсли; - Объект = Вычислить("Новый HTTPСоединение(Объект.Сервер, Объект.Порт, Объект.Пользователь, Объект.Пароль,, Объект.Таймаут, ЗащищенноеСоединение, Объект.ИспользоватьАутентификациюОС)"); - ЗаполнитьЗначенияСвойств(Объект, СтруктураПараметров.Объект); - Объект2 = Новый HTTPЗапрос; - ЗаполнитьЗначенияСвойств(Объект2, СтруктураПараметров.НастройкаКомпоновки); - Если СтруктураПараметров.НастройкаКомпоновки.ТелоДвоичныеДанные <> Неопределено Тогда - Объект2.УстановитьТелоИзДвоичныхДанных(СтруктураПараметров.НастройкаКомпоновки.ТелоДвоичныеДанные); - КонецЕсли; - ИначеЕсли ТипЗнч(Объект) = Тип("Структура") Тогда - СтруктураЗапроса = Объект; - Если Истина - И СтруктураЗапроса.Свойство("ВременныеТаблицы") - И СтруктураЗапроса.ВременныеТаблицы <> Неопределено - Тогда - ИменаВременныхТаблиц = Неопределено; - МенеджерВременныхТаблиц = ВосстановитьМенеджерВременныхТаблицЛкс(СтруктураЗапроса.ВременныеТаблицы, Объект2); - КонецЕсли; - Объект = Новый Запрос; - Объект.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; - Объект.Текст = СтруктураЗапроса.Текст; - - // Антибаг платформы 8.2.18. Некорректная сериализация моментов времени http://partners.v8.1c.ru/forum/thread.jsp?id=1159525#1159525 - //СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураЗапроса.Параметры, Объект.Параметры); - Для Каждого КлючИЗначение Из СтруктураЗапроса.Параметры Цикл - Объект.Параметры.Вставить(КлючИЗначение.Ключ, ЗначениеИзСтрокиВнутрЛкс(КлючИЗначение.Значение)); - КонецЦикла; - Если Объект.Параметры.Свойство("_ОбъектыДанныхТранзакции") Тогда - ОбъектыДанных = Новый Массив; - Для Каждого СнимокОбъекта Из Объект.Параметры._ОбъектыДанныхТранзакции Цикл - ОбъектыДанных.Добавить(ОбъектИзСнимкаЛкс(СнимокОбъекта)); - КонецЦикла; - Объект.Параметры.Вставить("_ОбъектыДанныхТранзакции", ОбъектыДанных); - КонецЕсли; - Иначе - Если Истина - И СтруктураПараметров.Свойство("ВременныеТаблицы") - И СтруктураПараметров.ВременныеТаблицы <> Неопределено - Тогда - МенеджерВременныхТаблиц = ВосстановитьМенеджерВременныхТаблицЛкс(СтруктураПараметров.ВременныеТаблицы); - КонецЕсли; - КонецЕсли; - ОтладитьЛкс(Объект, , Объект2, СтруктураПараметров.ВнешниеНаборыДанных,,,,, МенеджерВременныхТаблиц); - ИначеЕсли ТипОперации = "Исследовать" Тогда - Если СтруктураПараметров.Свойство("СериализацияФабрикой") Тогда - Если СтруктураПараметров.СериализацияФабрикой = Истина Тогда - Объект = ОбъектXDTOИзСтрокиXMLЛкс(Объект, Истина); - ИначеЕсли СтруктураПараметров.СериализацияФабрикой = "Внутр" Тогда - Объект = ЗначениеИзСтрокиВнутрЛкс(Объект); - СообщитьЛкс("Из-за неуспешной сериализации XML применена ЗначениеВСтрокуВнутр(), которая допускает потери (например очищает ссылки на строки таблицы/дерева значений)"); - КонецЕсли; - КонецЕсли; - ИсследоватьЛкс(Объект, , СтруктураПараметров.КакКоллекцию); - КонецЕсли; - -КонецПроцедуры - -Функция ВосстановитьМенеджерВременныхТаблицЛкс(Знач СтруктураВременныеТаблицы, выхИменаВременныхТаблиц = "") - - Запрос = Новый Запрос; - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - выхИменаВременныхТаблиц = ""; - СостояниеЛкс("Подготовка временных таблиц"); - Для Каждого КлючИЗначение Из СтруктураВременныеТаблицы Цикл - Если выхИменаВременныхТаблиц <> "" Тогда - выхИменаВременныхТаблиц = выхИменаВременныхТаблиц + ","; - КонецЕсли; - ИмяТаблицы = КлючИЗначение.Ключ; - ТаблицаЗначений = КлючИЗначение.Значение; - выхИменаВременныхТаблиц = выхИменаВременныхТаблиц + ИмяТаблицы; - СоздатьВременнуюТаблицуЗапросаИзТаблицыЗначенийЛкс(Запрос, ТаблицаЗначений, ИмяТаблицы); - КонецЦикла; - СостояниеЛкс(""); - Возврат Запрос.МенеджерВременныхТаблиц; - -КонецФункции - -#КонецЕсли - -Процедура СоздатьВременнуюТаблицуЗапросаИзТаблицыЗначенийЛкс(Запрос, ТаблицаЗначений, Знач ИмяТаблицы) Экспорт - - ТаблицаЗначений = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначений, Истина); - #Если Сервер И Не Сервер Тогда - ТаблицаЗначений = Новый ТаблицаЗначений; - Запрос = Новый Запрос; - #КонецЕсли - ТекстВыбораПолей = ""; - СуффиксВыборПодколонки = "_ВыборПодколонки" + СуффиксСлужебногоСвойстваЛкс(); - СуффиксПодколонкиБезНеудобногоТипа = "_Значение" + СуффиксСлужебногоСвойстваЛкс(); - СуффиксПодколонкиДляНеудобногоТипа = "_ЗначениеДляТипа" + СуффиксСлужебногоСвойстваЛкс(); - ЕстьКолонкиСНеудобнымТипом = Ложь; - НеподдерживаемыеКолонки = ""; - НачальноеЧислоКолонок = ТаблицаЗначений.Колонки.Количество(); - Для ИндексКолонки = 0 По НачальноеЧислоКолонок - 1 Цикл - Колонка = ТаблицаЗначений.Колонки[НачальноеЧислоКолонок - ИндексКолонки - 1]; // Состав коллекции расширяется, но нам нужно обойти только начальный состав - Если Ложь - //Или Колонка.ТипЗначения.СодержитТип(Тип("Тип")) - //Или Колонка.ТипЗначения.СодержитТип(Тип("МоментВремени")) - Или (Истина - И ирКэш.НомерРежимаСовместимостиЛкс() < 803012 - И Колонка.ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор"))) - Тогда - Если НеподдерживаемыеКолонки <> "" Тогда - НеподдерживаемыеКолонки = НеподдерживаемыеКолонки + ", "; - КонецЕсли; - НеподдерживаемыеКолонки = НеподдерживаемыеКолонки + ИмяТаблицы + "." + Колонка.Имя; - ИначеЕсли Колонка.ТипЗначения.Типы().Количество() = 0 Тогда - // Вроде бы после СузитьТипыКолонокТаблицыБезПотериДанныхЛкс() такого вообще не должно оставаться - ТекстВыбораПолей = ТекстВыбораПолей + ", - |НЕОПРЕДЕЛЕНО КАК " + Колонка.Имя; - ИначеЕсли Ложь - Или Колонка.ТипЗначения.СодержитТип(Тип("Тип")) - Или Колонка.ТипЗначения.СодержитТип(Тип("МоментВремени")) - Или Колонка.ТипЗначения.СодержитТип(Тип("Null")) - Тогда - ЕстьКолонкиСНеудобнымТипом = Истина; - ОписаниеТиповДляНеудобногоТипа = Неопределено; - Если Колонка.ТипЗначения.СодержитТип(Тип("МоментВремени")) Тогда - ИмяНеудобногоТипа = "МоментВремени"; - ИмяКолонкиЗначениеДляНеудобногоТипа = Колонка.Имя + СуффиксПодколонкиДляНеудобногоТипа; - ИмяКолонкиЗначениеДляНеудобногоТипаДата = Колонка.Имя + "_Дата" + СуффиксПодколонкиДляНеудобногоТипа; - ВыражениеНеудобногоТипа = " - |ВЫБОР КОГДА Т." + ИмяКолонкиЗначениеДляНеудобногоТипа + ".Дата <> Т." + ИмяКолонкиЗначениеДляНеудобногоТипаДата + " - | ТОГДА 1/0 - | ИНАЧЕ Т." + ИмяКолонкиЗначениеДляНеудобногоТипа + ".МоментВремени - |КОНЕЦ"; - ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиЗначениеДляНеудобногоТипаДата, Новый ОписаниеТипов("Дата")); - Если ТаблицаЗначений.Количество() = 0 Тогда - ТипыДокументов = Новый Массив; - ТипыДокументов.Добавить(Документы.ТипВсеСсылки().Типы()[0]); - ОписаниеТиповДляНеудобногоТипа = Новый ОписаниеТипов(ТипыДокументов); - КонецЕсли; - ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Тип")) Тогда - ИмяНеудобногоТипа = "Тип"; - ИмяКолонкиЗначениеДляНеудобногоТипа = Колонка.Имя + СуффиксПодколонкиДляНеудобногоТипа; - ВыражениеНеудобногоТипа = "ТипЗначения(Т." + ИмяКолонкиЗначениеДляНеудобногоТипа + ")"; - ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Null")) Тогда - ИмяНеудобногоТипа = "Null"; - ИмяКолонкиЗначениеДляНеудобногоТипа = Колонка.Имя + СуффиксПодколонкиДляНеудобногоТипа; - ВыражениеНеудобногоТипа = "NULL"; - Иначе - ВызватьИсключение "Неподдерживаемый тип"; - КонецЕсли; - ИмяКолонкиВыбораПодколонки = Колонка.Имя + СуффиксВыборПодколонки; - ИмяКолонкиБезНеудобногоТипа = Колонка.Имя + СуффиксПодколонкиБезНеудобногоТипа; - ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиВыбораПодколонки, Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(Макс(10, СтрДлина(ИмяНеудобногоТипа))))); - ОписаниеТиповКолонкиБезТипов = Новый ОписаниеТипов(Колонка.ТипЗначения,, ИмяНеудобногоТипа + ", Null"); - Если ОписаниеТиповКолонкиБезТипов.Типы().Количество() > 0 Тогда - ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиБезНеудобногоТипа, ОписаниеТиповКолонкиБезТипов); - ВыражениеБезНеудобногоТипа = "Т." + ИмяКолонкиБезНеудобногоТипа; - Иначе - ВыражениеБезНеудобногоТипа = "НЕОПРЕДЕЛЕНО"; - КонецЕсли; - ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиЗначениеДляНеудобногоТипа, ОписаниеТиповДляНеудобногоТипа); - ТекстВыбораПолей = ТекстВыбораПолей + ", - | ВЫБОР КОГДА Т." + ИмяКолонкиВыбораПодколонки + " = """ + ИмяНеудобногоТипа + """ - | ТОГДА " + ВыражениеНеудобногоТипа + " - | КОГДА Т." + ИмяКолонкиВыбораПодколонки + " = ""Null"" - | ТОГДА NULL - | ИНАЧЕ " + ВыражениеБезНеудобногоТипа + " - | КОНЕЦ КАК " + Колонка.Имя; - Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл - ЗначениеКолонки = СтрокаТаблицы[Колонка.Имя]; - Если ТипЗнч(ЗначениеКолонки) = Тип(ИмяНеудобногоТипа) Тогда - Если ТипЗнч(ЗначениеКолонки) = Тип("МоментВремени") Тогда - СтрокаТаблицы[ИмяКолонкиЗначениеДляНеудобногоТипаДата] = ЗначениеКолонки.Дата; - ЗначениеКолонки = ЗначениеКолонки.Ссылка; - ИначеЕсли ТипЗнч(ЗначениеКолонки) = Тип("Тип") Тогда - Типы = Новый Массив; - Типы.Добавить(ЗначениеКолонки); - ОписаниеТипов = Новый ОписаниеТипов(Типы); - ЗначениеКолонки = ОписаниеТипов.ПривестиЗначение(); - ИначеЕсли ТипЗнч(ЗначениеКолонки) = Тип("NULL") Тогда - ЗначениеКолонки = Неопределено; - Иначе - ВызватьИсключение "Неподдерживаемый тип"; - КонецЕсли; - СтрокаТаблицы[ИмяКолонкиВыбораПодколонки] = ИмяНеудобногоТипа; - СтрокаТаблицы[ИмяКолонкиЗначениеДляНеудобногоТипа] = ЗначениеКолонки; - ИначеЕсли ЗначениеКолонки = Null Тогда - // Моноколонку с типом NULL тоже невозможно поместить во временную таблицу из таблицы-параметра - СтрокаТаблицы[ИмяКолонкиВыбораПодколонки] = "Null"; - Иначе - СтрокаТаблицы[ИмяКолонкиБезНеудобногоТипа] = ЗначениеКолонки; - КонецЕсли; - КонецЦикла; - ТаблицаЗначений.Колонки.Удалить(Колонка.Имя); - Иначе - ТекстВыбораПолей = ТекстВыбораПолей + ", - |Т." + Колонка.Имя + " КАК " + Колонка.Имя; - КонецЕсли; - КонецЦикла; - Если ЕстьКолонкиСНеудобнымТипом Тогда - ТаблицаЗначений = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначений, Истина); - ИмяСлужебнойТаблицы = "_Т" + СуффиксСлужебногоСвойстваЛкс(); - ТекстЗапросаПодготовки = " - |ВЫБРАТЬ Т.* ПОМЕСТИТЬ " + ИмяСлужебнойТаблицы + " ИЗ &" + ИмяТаблицы + " КАК Т; - |ВЫБРАТЬ " + Сред(ТекстВыбораПолей, 2) + " - |ПОМЕСТИТЬ " + ИмяТаблицы + " ИЗ " + ИмяСлужебнойТаблицы + " КАК Т; - |УНИЧТОЖИТЬ " + ИмяСлужебнойТаблицы + ""; - Иначе - ТекстЗапросаПодготовки = " - |ВЫБРАТЬ Т.* ПОМЕСТИТЬ " + ИмяТаблицы + " ИЗ &" + ИмяТаблицы + " КАК Т"; - КонецЕсли; - Запрос.Параметры.Вставить(ИмяТаблицы, ТаблицаЗначений); - Если НеподдерживаемыеКолонки <> "" Тогда - // https://partners.v8.1c.ru/forum/t/1570237/m/1570237 - СообщитьЛкс(СтрШаблонИменЛкс("Невозможно восстановить временную таблицу %1 из-за недопустимых типов (МоментВремени, УникальныйИдентификатор, Тип) в колонках %2",, - ИмяТаблицы, 2, НеподдерживаемыеКолонки), СтатусСообщения.Внимание); - Иначе - Если ЗначениеЗаполнено(ТекстЗапросаПодготовки) Тогда - Запрос.Текст = ТекстЗапросаПодготовки; - Попытка - Запрос.Выполнить(); - Исключение - Причина = ОписаниеОшибки(); - Если Ложь - Или СтрНайтиЛкс(Причина, "деление на ноль",,,, Ложь) - Или СтрНайтиЛкс(Причина, "division by zero",,,, Ложь) - Тогда - Причина = "Присутствует момент времени, дата в котором не совпадает с датой документа"; - КонецЕсли; - СообщитьЛкс(СтрШаблонИменЛкс("Ошибка восстановления временной таблицы %1: " + Причина,, ИмяТаблицы), СтатусСообщения.Внимание); - КонецПопытки; - КонецЕсли; - КонецЕсли; - Запрос.Параметры.Удалить(ИмяТаблицы); - -КонецПроцедуры - -Процедура ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка, РасширенноеЗначение = Null, ЛиТипСтрокаСлужебный = Ложь) Экспорт - - Менеджер = Неопределено; - ТекущеееЗначение = ДанныеЭлементаФормыЛкс(Элемент); - Если ТипЗнч(ТекущеееЗначение) = Тип("Строка") Тогда - Элемент.Значение = Текст; // Восстановим значение, т.к. при чтении из него в режиме пароля оно меняется на "*************" - Попытка - ТипЗначенияПоля = ТипЗначенияЭлементаФормыЛкс(Элемент); - Исключение - Если ТипЗнч(Элемент) = Тип("ПолеВвода") Тогда - ВызватьИсключение; - Иначе - // Для поля формы игнорируем - Возврат; - КонецЕсли; - КонецПопытки; - Типы = ТипЗначенияПоля.Типы(); - Если Типы.Количество() > 1 Тогда - ЗначениеСсылки = НавигационнаяСсылкаВЗначениеЛкс(ТекущеееЗначение); - Если Не ЗначениеЗаполнено(ЗначениеСсылки) Тогда - ЗначениеСсылки = ПреобразоватьЗначениеИзSDBLЛкс(ТекущеееЗначение); - КонецЕсли; - Если Истина - И ЗначениеСсылки <> Неопределено - И ТипЗнч(ЗначениеСсылки) <> Тип("Строка") - И Элемент.ТипЗначения.СодержитТип(ТипЗнч(ЗначениеСсылки)) - Тогда - Ответ = КодВозвратаДиалога.Да; - Если Не ЛиТипСтрокаСлужебный Тогда - Ответ = Вопрос("Хотите вставить строку как ссылку?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет); - КонецЕсли; - Если Ответ = КодВозвратаДиалога.Да Тогда - Значение = ЗначениеСсылки; - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; - Если Не ЗначениеЗаполнено(ЗначениеСсылки) Тогда - Фрагменты = СтрРазделитьЛкс(ТекущеееЗначение); - Если Фрагменты.Количество() > 1 Тогда - ИмяТипа = Фрагменты[0] + "." + Фрагменты[1]; - Попытка - ОписаниеТипов = Новый ОписаниеТипов(ИмяТипа); - Исключение - ОписаниеТипов = Неопределено; - КонецПопытки; - Если ОписаниеТипов <> Неопределено Тогда - Значение = ОписаниеТипов.ПривестиЗначение(); - Менеджер = ПолучитьМенеджерЛкс(Значение); - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Истина - И ЛиТипСтрокаСлужебный - И СтандартнаяОбработка - И ЗначениеЗаполнено(ТекущеееЗначение) - Тогда - Значение = ""; - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если ЛиТипСсылкиБДЛкс(ТипЗнч(ТекущеееЗначение)) Тогда - Менеджер = ПолучитьМенеджерЛкс(ТекущеееЗначение); - КонецЕсли; - Если Менеджер <> Неопределено Тогда - Значение = ПреобразоватьПредставлениеВСсылкуЛкс(Менеджер, Текст); - Если Значение <> Неопределено Тогда - СтандартнаяОбработка = Ложь; - КонецЕсли; - ИначеЕсли Не Элемент.ОграничениеТипа.СодержитТип(Тип("ПолеКомпоновкиДанных")) Тогда - Если Ложь - Или (Истина - И РасширенноеЗначение <> Null - И ТипЗнч(РасширенноеЗначение) <> ТипЗнч(ТекущеееЗначение)) - Или Элемент.ОграничениеТипа.ПривестиЗначение(ТекущеееЗначение) <> ТекущеееЗначение - Тогда - // Откат - СтандартнаяОбработка = Ложь; - Значение = Новый СписокЗначений; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// . -// Параметры: -// РедактированиеРазрешено - Булево - для открытия ссылки надо установить Ложь -// ЭлементУправления - Неопределено - значение этого элемента управления открываем, при открытии значения из ячейки табличного поля должно быть Неопределено -// ЭлементУправленияРодитель - ТабличноеПоле - чью ячейку открываем -// Результат: -// Булево - Истина если значение было изменено -Функция ОткрытьЗначениеЛкс(РасширенноеЗначение, РедактированиеРазрешено = Истина, СтандартнаяОбработка = Истина, ЗаголовокФормы = "", РедактироватьМодально = Истина, - ПринудительноВОтдельнойФорме = Истина, ЭлементУправления = Неопределено, ЭлементУправленияРодитель = Неопределено, Знач ИскомаяСтрока = "", Знач КлючУникальности = Неопределено) Экспорт - - Результат = Ложь; - ТипРасширенногоЗначения = ТипЗнч(РасширенноеЗначение); - ХмлТип = XMLТипЗнч(РасширенноеЗначение); - Если Ложь - Или ТипРасширенногоЗначения = Тип("ТаблицаЗначений") - Или ТипРасширенногоЗначения = Тип("ДеревоЗначений") - Или ТипРасширенногоЗначения = Тип("МоментВремени") - Или ТипРасширенногоЗначения = Тип("ТабличныйДокумент") - Или ТипРасширенногоЗначения = Тип("Массив") - Или ТипРасширенногоЗначения = Тип("ФиксированныйМассив") - Или ТипРасширенногоЗначения = Тип("Граница") - Или ТипРасширенногоЗначения = Тип("УникальныйИдентификатор") - Или ТипРасширенногоЗначения = Тип("Тип") - Или ТипРасширенногоЗначения = Тип("ОписаниеТипов") - Или ТипРасширенногоЗначения = Тип("СписокЗначений") - Или ТипРасширенногоЗначения = Тип("ДвоичныеДанные") - Или ТипРасширенногоЗначения = Тип("ХранилищеЗначения") - Или ТипРасширенногоЗначения = Тип("Картинка") - Или (Истина - И ТипРасширенногоЗначения = Тип("Строка") - И (Ложь - Или ПринудительноВОтдельнойФорме - Или СтрДлина(РасширенноеЗначение) > 100 - Или Найти(РасширенноеЗначение, "://") > 00 // есть гиперссылки - //Или Не РедактированиеРазрешено - )) - Тогда - Если Не ЗначениеЗаполнено(КлючУникальности) Тогда - КлючУникальности = Новый УникальныйИдентификатор; - КонецЕсли; - СтандартнаяОбработка = Ложь; - ЕстьРастягивающиесяВертикальноЭлементы = Истина; - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Если Ложь - Или ТипРасширенногоЗначения = Тип("ТаблицаЗначений") - Или ТипРасширенногоЗначения = Тип("ДеревоЗначений") - Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("ТаблицаЗначений", , РасширенноеЗначение); - ФормаРедактирования.ПараметрТабличноеПоле = ЭлементУправления; - ИначеЕсли ТипРасширенногоЗначения = Тип("МоментВремени") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("МоментВремени", , РасширенноеЗначение); - ЕстьРастягивающиесяВертикальноЭлементы = Ложь; - ИначеЕсли ТипРасширенногоЗначения = Тип("ТабличныйДокумент") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("ТабличныйДокумент", , РасширенноеЗначение); - Если ЭлементУправления <> Неопределено Тогда - ФормаРедактирования.ПолеТабличногоДокумента = ЭлементУправления; - Иначе - ФормаРедактирования.ПолеТабличногоДокумента = РасширенноеЗначение; - КонецЕсли; - ИначеЕсли ТипРасширенногоЗначения = Тип("Граница") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("Граница", , РасширенноеЗначение); - ЕстьРастягивающиесяВертикальноЭлементы = Ложь; - ИначеЕсли Ложь - Или ТипРасширенногоЗначения = Тип("Массив") - Или ТипРасширенногоЗначения = Тип("ФиксированныйМассив") - Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("Массив", , РасширенноеЗначение); - ИначеЕсли ТипРасширенногоЗначения = Тип("УникальныйИдентификатор") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("УникальныйИдентификатор", , РасширенноеЗначение); - ЕстьРастягивающиесяВертикальноЭлементы = Ложь; - ИначеЕсли ТипРасширенногоЗначения = Тип("СписокЗначений") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("СписокЗначений", , РасширенноеЗначение); - ИначеЕсли ТипРасширенногоЗначения = Тип("Строка") Тогда - ФормаРедактирования = ПолучитьФормуТекстаЛкс(,, "",, КлючУникальности); - ФормаРедактирования.ПараметрСтрокаПоиска = ИскомаяСтрока; - ИначеЕсли ТипРасширенногоЗначения = Тип("Тип") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("ВыборРедактируемыхТипов", , ТипРасширенногоЗначения); - ФормаРедактирования.РежимВыбора = Истина; - ФормаРедактирования.МножественныйВыбор = Ложь; - ИначеЕсли ТипРасширенногоЗначения = Тип("ОписаниеТипов") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("ВыборРедактируемыхТипов", , РасширенноеЗначение); - ФормаРедактирования.РежимВыбора = Истина; - ФормаРедактирования.МножественныйВыбор = Истина; - ИначеЕсли ТипРасширенногоЗначения = Тип("ХранилищеЗначения") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("ХранилищеЗначения", , КлючУникальности); - ЕстьРастягивающиесяВертикальноЭлементы = Ложь; - ИначеЕсли ТипРасширенногоЗначения = Тип("ДвоичныеДанные") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("ДвоичныеДанные", , КлючУникальности); - ИначеЕсли ТипРасширенногоЗначения = Тип("Картинка") Тогда - ФормаРедактирования = мПлатформа.ПолучитьФорму("Картинка", , КлючУникальности); - КонецЕсли; - Если ФормаРедактирования.Открыта() Тогда - Форма_АктивироватьОткрытьЛкс(ФормаРедактирования); - Возврат Результат; - КонецЕсли; - Если ЗначениеЗаполнено(ЗаголовокФормы) Тогда - ФормаРедактирования.Заголовок = ЗаголовокФормы; - КонецЕсли; - ФормаРедактирования.ТолькоПросмотр = Не РедактированиеРазрешено; - Если РедактированиеРазрешено И РедактироватьМодально Тогда - Если Ложь - Или ТипРасширенногоЗначения = Тип("ТаблицаЗначений") - Или ТипРасширенногоЗначения = Тип("ДеревоЗначений") - Тогда - ФормаРедактирования.НачальноеЗначениеВыбора = РасширенноеЗначение.Скопировать(); // Неглубокая копия, зато с полным сохранением содержимого, включая объекты метаданных - Иначе - ФормаРедактирования.НачальноеЗначениеВыбора = КопияОбъектаЛкс(РасширенноеЗначение, ); // Универсально, но с потерей несериализуемых типов - КонецЕсли; - Иначе - ФормаРедактирования.НачальноеЗначениеВыбора = РасширенноеЗначение; - КонецЕсли; - Если Ложь - #Если ТолстыйКлиентУправляемоеПриложение Тогда - Или Не ЕстьРастягивающиесяВертикальноЭлементы // https://www.hostedredmine.com/issues/901852 - #КонецЕсли - Или РедактированиеРазрешено И РедактироватьМодально - Тогда - РезультатВыбора = ФормаРедактирования.ОткрытьМодально(); - Если РезультатВыбора <> Неопределено Тогда - РасширенноеЗначение = РезультатВыбора; - Результат = Истина; - КонецЕсли; - Иначе - ФормаРедактирования.Открыть(); - КонецЕсли; - ИначеЕсли ТипРасширенногоЗначения = Тип("Цвет") Тогда - СтандартнаяОбработка = Ложь; - ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета; - ДиалогВыбораЦвета.Цвет = РасширенноеЗначение; - Результат = ДиалогВыбораЦвета.Выбрать(); - Если Результат Тогда - РасширенноеЗначение = ДиалогВыбораЦвета.Цвет; - КонецЕсли; - ИначеЕсли ТипРасширенногоЗначения = Тип("Шрифт") Тогда - СтандартнаяОбработка = Ложь; - ДиалогВыбораШрифта = Новый ДиалогВыбораШрифта; - ДиалогВыбораШрифта.Шрифт = РасширенноеЗначение; - Результат = ДиалогВыбораШрифта.Выбрать(); - Если Результат Тогда - РасширенноеЗначение = ДиалогВыбораШрифта.Шрифт; - КонецЕсли; - ИначеЕсли ТипРасширенногоЗначения = Тип("СхемаКомпоновкиДанных") Тогда - СтандартнаяОбработка = Ложь; - Редактор = СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольКомпоновокДанных"); - #Если Сервер И Не Сервер Тогда - Редактор = Обработки.ирКонсольКомпоновокДанных.Создать(); - #КонецЕсли - ДанныеРедактора = Новый Структура("СхемаКомпоновки", РасширенноеЗначение); - Если ЗначениеЗаполнено(ЗаголовокФормы) Тогда - ДанныеРедактора.Вставить("Имя", ЗаголовокФормы); - КонецЕсли; - Результат = Редактор.РедактироватьСтруктуруСхемы(, ДанныеРедактора, Истина); - Если Результат <> Неопределено Тогда - РасширенноеЗначение = Результат.СхемаКомпоновки; - Результат = Истина; - Иначе - Результат = Ложь; - КонецЕсли; - ИначеЕсли Ложь - Или ТипРасширенногоЗначения = Тип("Число") - Или ТипРасширенногоЗначения = Тип("Строка") - Или ТипРасширенногоЗначения = Тип("Дата") - Или ТипРасширенногоЗначения = Тип("Булево") - Или ТипРасширенногоЗначения = Тип("Неопределено") - Или ТипРасширенногоЗначения = Тип("Null") - Или ТипРасширенногоЗначения = Тип("ПолеКомпоновкиДанных") - Или ТипРасширенногоЗначения = Тип("СтандартнаяДатаНачала") - Или ТипРасширенногоЗначения = Тип("СтандартныйПериод") - Или ТипРасширенногоЗначения = Тип("ОтборКомпоновкиДанных") - Или ТипРасширенногоЗначения = Тип("ВидДвиженияНакопления") - Или ТипРасширенногоЗначения = Тип("ВидДвиженияБухгалтерии") - Или ТипРасширенногоЗначения = Тип("ВидСчета") - Или (Истина - И ХмлТип <> Неопределено - И Найти(ХмлТип.ИмяТипа, "Ref.") > 0) - - Тогда - Если ЛиТипСсылкиБДЛкс(ТипРасширенногоЗначения, Ложь) Тогда - Если ЗначениеЗаполнено(РасширенноеЗначение) Тогда - ОбъектСуществует = ЛиСуществуетОбъектПоСсылкеЛкс(РасширенноеЗначение); - Если Не ОбъектСуществует И Не ПринудительноВОтдельнойФорме Тогда - //ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ТабличноеПоле); - ОткрытьСсылкуВРедактореОбъектаБДЛкс(РасширенноеЗначение); - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Ложь - Или Не СтандартнаяОбработка - Или Не РедактированиеРазрешено - Или ЭлементУправленияРодитель = Неопределено - Тогда - Если ЛиТипСсылкиБДЛкс(ТипРасширенногоЗначения, Ложь) Тогда - Если Истина - И ЗначениеЗаполнено(РасширенноеЗначение) - И ОбъектСуществует - Тогда - Если Не ЛиДоступноРедактированиеВФормеОбъектаЛкс(Метаданные.НайтиПоТипу(ТипРасширенногоЗначения)) Тогда - ОткрытьСсылкуВРедактореОбъектаБДЛкс(РасширенноеЗначение); - Иначе - ОткрытьЗначение(РасширенноеЗначение); - КонецЕсли; - КонецЕсли; - СтандартнаяОбработка = Ложь; - КонецЕсли; - Если СтандартнаяОбработка Тогда - Если ПримитивныеТипыЛкс().Найти(ТипЗнч(РасширенноеЗначение)) = Неопределено Тогда - ОткрытьЗначение(РасширенноеЗначение); - КонецЕсли; - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; - Иначе - //Если Истина - // И ТипЗначения1 <> Неопределено - // И ТипЗначения1.ПривестиЗначение(РасширенноеЗначение) <> РасширенноеЗначение - //Тогда - ИсследоватьЛкс(РасширенноеЗначение); - СтандартнаяОбработка = Ложь; - //КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ПримитивныеТипыЛкс() Экспорт - ПримитивныеТипы = Новый Массив; - ПримитивныеТипы.Добавить(Тип("Число")); - ПримитивныеТипы.Добавить(Тип("Строка")); - ПримитивныеТипы.Добавить(Тип("Дата")); - ПримитивныеТипы.Добавить(Тип("Булево")); - ПримитивныеТипы.Добавить(Тип("Неопределено")); - ПримитивныеТипы.Добавить(Тип("Null")); - Возврат ПримитивныеТипы; -КонецФункции - -Функция ОткрытьФормуВМинимальномРазмереЛкс(Форма) Экспорт - - Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда - Форма.ОткрытьМодально(); - Иначе - Форма.Открыть(); - КонецЕсли; - -КонецФункции - -Процедура ОткрытьКонсольСерверов1СБезПараметровЛкс() Экспорт - ОткрытьКонсольСерверов1СЛкс(); -КонецПроцедуры - -Процедура ОткрытьКонсольСерверов1СЛкс(Знач СборкаПлатформы = Неопределено, ТаблицаСерверов = Неопределено) Экспорт - - Если ПроверитьПлатформаНеWindowsЛкс() Тогда - Возврат; - КонецЕсли; - ОбработкаРегистрации = СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирУправлениеCOMКлассами1С"); - #Если Сервер И Не Сервер Тогда - ОбработкаРегистрации = Обработки.ирУправлениеCOMКлассами1С.Создать(); - ТекущаяСтрокаТаблицыСерверов = Обработки.ирУправлениеСлужбамиСервера1С.Создать().СлужбыАгентовСерверов.Добавить(); - #КонецЕсли - ОбработкаРегистрации.ЗаполнитьТипыCOMКлассов(); - ЗаполнитьДоступныеСборкиПлатформыЛкс(ОбработкаРегистрации.СборкиПлатформы,, ОбработкаРегистрации.ТипыComКлассов); - ТипКласса = "ServerAdminScope"; - Если Не ЗначениеЗаполнено(СборкаПлатформы) Тогда - СборкаПлатформы = ОбработкаРегистрации.ТекущаяСборкаПлатформы; - КонецЕсли; - СтрокаСборкиПлатформы = ОбработкаРегистрации.СборкиПлатформы.НайтиСтроки(Новый Структура("СборкаПлатформы," + ТипКласса, СборкаПлатформы, Истина)); - Если СтрокаСборкиПлатформы.Количество() = 0 Тогда - Возврат; - КонецЕсли; - СтрокаСборкиПлатформы = СтрокаСборкиПлатформы[0]; - #Если Сервер И Не Сервер Тогда - СтрокаСборкиПлатформы = ОбработкаРегистрации.СборкиПлатформы[0]; - #КонецЕсли - ПолноеИмяФайлаКонсоли = ""; - Если ирКэш.НомерИзданияПлатформыЛкс() = "81" Тогда - КаталогПрограммныхФайлов = КаталогПрограммныхФайловОСЛкс(СтрокаСборкиПлатформы.x64); - ПолноеИмяФайлаКонсоли = КаталогПрограммныхФайлов + СтрЗаменить("\1cv81\bin\1CV8 Servers.msc", "\", РазделительПутиКФайлуЛкс()); - Файл = Новый Файл(ПолноеИмяФайлаКонсоли); - Если Не Файл.Существует() Тогда - ПолноеИмяФайлаКонсоли = ""; - КонецЕсли; - Иначе - ПолноеИмяФайлаКонсоли = КаталогОбщихФайловВсехВерсийПлатформыЛкс(СтрокаСборкиПлатформы.x64); - Если СтрокаСборкиПлатформы.x64 Тогда - ПолноеИмяФайлаКонсоли = ПолноеИмяФайлаКонсоли + "1CV8 Servers (x86-64).msc"; - Иначе - ПолноеИмяФайлаКонсоли = ПолноеИмяФайлаКонсоли + "1CV8 Servers.msc"; - КонецЕсли; - Файл = Новый Файл(ПолноеИмяФайлаКонсоли); - Если Не Файл.Существует() Тогда - ПолноеИмяФайлаКонсоли = ""; - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ПолноеИмяФайлаКонсоли) Тогда - Если ТаблицаСерверов <> Неопределено Тогда - ТаблицаСерверов = ПолучитьТаблицуСерверовИзСпискаПользователя(ТаблицаСерверов); - ПоместитьТаблицуСерверовВСписокПользователя(ТаблицаСерверов); - КонецЕсли; - //ОбработкаРегистрации = СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирУправлениеCOMКлассами1С"); - //#Если Сервер И Не Сервер Тогда - // ОбработкаРегистрации = Обработки.ирУправлениеCOMКлассами1С.Создать(); - //#КонецЕсли - //ОбработкаРегистрации.ЗаполнитьТипыCOMКлассов(); - //ОбработкаРегистрации.СборкиПлатформы.Загрузить(СборкиПлатформы.Выгрузить()); - СтрокаТипаКласса = ОбработкаРегистрации.ТипыComКлассов.Найти(ТипКласса, "Имя"); - ОбработкаРегистрации.ЗарегистрироватьCOMКлассСборкиПлатформы(СтрокаТипаКласса, СтрокаСборкиПлатформы.x64, СтрокаСборкиПлатформы.СборкаПлатформы); - ЗапуститьПриложение("""" + ПолноеИмяФайлаКонсоли + """"); - Если ЗначениеЗаполнено(ИмяПользователя()) Тогда - ТекстВБуферОбменаОСЛкс(ИмяПользователя()); - КонецЕсли; - Иначе - Если СтрокаСборкиПлатформы.x64 Тогда - ПредставлениеРазрядности = "64"; - Иначе - ПредставлениеРазрядности = "32"; - КонецЕсли; - Сообщить("Файл консоли серверов 1С " + ирКэш.НомерИзданияПлатформыЛкс() + " " + ПредставлениеРазрядности + "б не найден по пути """ + ПолноеИмяФайлаКонсоли + """"); - КонецЕсли; - -КонецПроцедуры - -Процедура ЗапуститьПриложение1СЛкс(РежимКонфигуратора, СтрокаСоединения, ИмяВСпискеБазПользователя = "", ОткрытьПортативныеИнструменты = Истина) Экспорт - ПараметрыЗапуска = ПараметрыЗапускаПриложения1СЛкс(,,, РежимКонфигуратора,,,,,, СтрокаСоединения, ОткрытьПортативныеИнструменты,,,,,, ИмяВСпискеБазПользователя); - ВыполнитьКомандуОСЛкс("""" + ПолноеИмяИсполняемогоФайлаСтартераЛкс() + """ " + ПараметрыЗапуска); -КонецПроцедуры - -Функция ПолучитьПолноеИмяФайлаСпискаСерверов1С() Экспорт - - КаталогФайловыхКэшей = ирКэш.КаталогИзданияПлатформыВПрофилеЛкс(); - ПолноеИмяФайлаСпискаСерверов = КаталогФайловыхКэшей + РазделительПутиКФайлуЛкс() + "appsrvrs.lst"; - Возврат ПолноеИмяФайлаСпискаСерверов; - -КонецФункции - -Функция ПолучитьТаблицуСерверовИзСпискаПользователя(ТаблицаСерверов = Неопределено) Экспорт - - ТаблицаСерверовИзФайла = Новый ТаблицаЗначений; - ТаблицаСерверовИзФайла.Колонки.Добавить("Протокол"); - ТаблицаСерверовИзФайла.Колонки.Добавить("Компьютер"); - ТаблицаСерверовИзФайла.Колонки.Добавить("НКомпьютер"); - ТаблицаСерверовИзФайла.Колонки.Добавить("Порт"); - ТаблицаСерверовИзФайла.Колонки.Добавить("Наименование"); - //ТаблицаСерверовИзФайла.Колонки.Добавить("ИзданиеПлатформы"); - ТаблицаСерверов.Колонки.Добавить("НКомпьютер"); - Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл - СтрокаСервера.НКомпьютер = НРег(СтрокаСервера.Компьютер); - КонецЦикла; - ПолноеИмяФайлаСпискаСерверов = ПолучитьПолноеИмяФайлаСпискаСерверов1С(); - Файл = Новый Файл(ПолноеИмяФайлаСпискаСерверов); - Если Файл.Существует() Тогда - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.Прочитать(ПолноеИмяФайлаСпискаСерверов); - ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); - // {2, - // {"tcp","pcname",1540,""}, - // {"tcp","pcname",1740,""} - // } - ДокументDOM = ДокументDOMИзСтрокиВнутрЛкс(ТекстФайла); - РазыменовательПИ = Новый РазыменовательПространствИменDOM(ДокументDOM); - ИмяЭлемента = "/elem/elem"; - РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ, ТипРезультатаDOMXPath.УпорядоченныйИтераторУзлов); - Пока 1 = 1 Цикл - Узел = РезультатXPath.ПолучитьСледующий(); - Если Узел = Неопределено Тогда - Прервать; - КонецЕсли; - ДочерниеУзлы = Узел.ДочерниеУзлы; - // Здесь есть пробельный узел, который сместит индексы н начиная с 2, если отключить игнорирование пробельных символов при построении документа DOM - Порт = Вычислить(ДочерниеУзлы[2].ТекстовоеСодержимое); - Компьютер = ПоследнийФрагментЛкс(Вычислить(ДочерниеУзлы[1].ТекстовоеСодержимое), "/"); // Имя компьютера может быть указано в виде "REMOTE/GOMER" - КлючПоиска = Новый Структура("НКомпьютер, Порт", НРег(Компьютер), Порт); - Если ТаблицаСерверовИзФайла.НайтиСтроки(КлючПоиска).Количество() > 0 Тогда - Продолжить; - КонецЕсли; - ОписаниеСервера = ТаблицаСерверовИзФайла.Добавить(); - ЗаполнитьЗначенияСвойств(ОписаниеСервера, КлючПоиска); - ОписаниеСервера.Протокол = Вычислить(ДочерниеУзлы[0].ТекстовоеСодержимое); - ОписаниеСервера.Компьютер = Компьютер; - ОписаниеСервера.Наименование = Вычислить(ДочерниеУзлы[3].ТекстовоеСодержимое); - Если Не ЗначениеЗаполнено(ОписаниеСервера.Наименование) Тогда - ОписаниеСервера.Наименование = ОписаниеСервера.Компьютер + ":" + XMLСтрока(ОписаниеСервера.Порт); - КонецЕсли; - СтрокиСервера = ТаблицаСерверов.НайтиСтроки(Новый Структура("НКомпьютер, Порт", ОписаниеСервера.НКомпьютер, ОписаниеСервера.Порт)); - КонецЦикла; - КонецЕсли; - Если ТаблицаСерверов <> Неопределено Тогда - Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл - СтрокаСервераИзФайла = ТаблицаСерверовИзФайла.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаСервераИзФайла, СтрокаСервера); - СтрокаСервераИзФайла.Протокол = "tcp"; - КонецЦикла; - КонецЕсли; - Возврат ТаблицаСерверовИзФайла; - -КонецФункции - -Процедура ПоместитьТаблицуСерверовВСписокПользователя(ТаблицаСерверов) Экспорт - - #Если _ Тогда - ТаблицаСерверов = Новый ТаблицаЗначений; - ТаблицаСерверов.Колонки.Добавить("Протокол"); - ТаблицаСерверов.Колонки.Добавить("Компьютер"); - ТаблицаСерверов.Колонки.Добавить("Порт"); - ТаблицаСерверов.Колонки.Добавить("Наименование"); - #КонецЕсли - // {2, - // {"tcp","pyramid",1540,""}, - // {"tcp","pyramid",1740,""} - // } - Текст = ""; - Для Каждого СтрокаСервера Из ТаблицаСерверов Цикл - Если Текст <> "" Тогда - Текст = Текст + "," + Символы.ПС; - КонецЕсли; - Текст = Текст + "{" - + """" + СтрокаСервера.Протокол + """," - + """" + СтрокаСервера.Компьютер + """," - + XMLСтрока(СтрокаСервера.Порт) + "," - + """" + СтрокаСервера.Наименование + """" - + "}"; - КонецЦикла; - Текст = "{" + XMLСтрока(ТаблицаСерверов.Количество()) + "," + Символы.ПС + Текст + "}"; - ПолноеИмяФайлаСпискаСерверов = ПолучитьПолноеИмяФайлаСпискаСерверов1С(); - Файл = Новый Файл(ПолноеИмяФайлаСпискаСерверов); - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.УстановитьТекст(Текст); - ТекстовыйДокумент.Записать(ПолноеИмяФайлаСпискаСерверов); - УстановитьТекущийПутьВДеревеКонсолиСерверов(ТаблицаСерверов); - -КонецПроцедуры - -Процедура УстановитьТекущийПутьВДеревеКонсолиСерверов(ТаблицаСерверов) Экспорт - - МассивПути = ПолучитьМассивПутиКСсылкеВКонсолиСерверов(); - ПолноеИмяФайлаНастроекКонсолиСерверов = КаталогПеремещаемыхДанныхПриложенийЛкс() + "\Microsoft\MMC\1CV8 Servers"; - ПолноеИмяФайлаНастроекКонсолиСерверов = СтрЗаменить(ПолноеИмяФайлаНастроекКонсолиСерверов, "\", РазделительПутиКФайлуЛкс()); - Файл = Новый Файл(ПолноеИмяФайлаНастроекКонсолиСерверов); - Если Не Файл.Существует() Тогда - Возврат; - КонецЕсли; - ДокументDOM = ПрочитатьФайлВДокументDOMЛкс(ПолноеИмяФайлаНастроекКонсолиСерверов); - РазыменовательПИ = Новый РазыменовательПространствИменDOM(ДокументDOM); - ИмяЭлемента = "/MMC_ConsoleFile/Views/View/BookMark[2]"; - РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ИмяЭлемента, ДокументDOM, РазыменовательПИ); - ЭлементДом = РезультатXPath.ПолучитьСледующий(); - КорневыеЭлементы = ЭлементДом.ПолучитьЭлементыПоИмени("DynamicPath"); - Если КорневыеЭлементы.Количество() > 0 Тогда - КорневойЭлемент = КорневыеЭлементы[0]; - Иначе - КорневойЭлемент = ДокументDOM.СоздатьЭлемент("DynamicPath"); - ЭлементДом.ДобавитьДочерний(КорневойЭлемент); - КонецЕсли; - Пока КорневойЭлемент.ПервыйДочерний <> Неопределено Цикл - КорневойЭлемент.УдалитьДочерний(КорневойЭлемент.ПервыйДочерний); - КонецЦикла; - Для Каждого ЭлементПути Из МассивПути Цикл - ЭлементСегмент = ДокументDOM.СоздатьЭлемент("Segment"); - ЭлементСегмент.УстановитьАтрибут("String", ЭлементПути); - КорневойЭлемент.ДобавитьДочерний(ЭлементСегмент); - КонецЦикла; - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.ОткрытьФайл(ПолноеИмяФайлаНастроекКонсолиСерверов); - ЗаписьДом = Новый ЗаписьDOM; - ЗаписьДом.Записать(ДокументDOM, ЗаписьXML); - -КонецПроцедуры - -Функция ПолучитьМассивПутиКСсылкеВКонсолиСерверов(Знач ИмяСервера = "") - - Если Не ЗначениеЗаполнено(ИмяСервера) Тогда - ИмяСервера = ИмяКомпьютераКластераЛкс(); - КонецЕсли; - Если Не ЗначениеЗаполнено(ИмяСервера) Тогда - ИмяСервера = ИмяКомпьютера(); - КонецЕсли; - // - // - // - // - // - МассивПути = Новый Массив; - ЭлементПути = ИмяСервера; - Если ЭтоИмяЛокальногоКомпьютераЛкс(ЭлементПути) Тогда - ЭлементПути = "(*)" + ЭлементПути; - КонецЕсли; - МассивПути.Добавить(ЭлементПути); - Возврат МассивПути; - -КонецФункции - -Функция ОткрытьТаблицуЗначенийЛкс(Знач ТаблицаЗначений, Знач ТекущаяСтрока = Неопределено, Модально = Истина, Заголовок = "", РежимВыбора = Ложь, ТолькоПросмотр = Истина, - ОтключитьОформление = Ложь, КлючУникальности = Неопределено) Экспорт - - Если КлючУникальности = Неопределено Тогда - КлючУникальности = ТаблицаЗначений; - КонецЕсли; - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ИмитаторТабличногоПоля = Новый Структура; - ИмитаторТабличногоПоля.Вставить("Имя"); - ИмитаторТабличногоПоля.Вставить("ТекущаяКолонка"); - ИмитаторТабличногоПоля.Вставить("ТекущаяСтрока", ТекущаяСтрока); - ИмитаторТабличногоПоля.Вставить("Значение", ТаблицаЗначений); - ИмитаторТабличногоПоля.Вставить("ВыделенныеСтроки", Новый Массив); - ИмитаторТабличногоПоля.Вставить("Подвал", Ложь); - ФормаРедактирования = мПлатформа.ПолучитьФорму("ТаблицаЗначений", , КлючУникальности); - ФормаРедактирования.ПараметрТабличноеПоле = ИмитаторТабличногоПоля; - ФормаРедактирования.ПараметрОтключитьОформление = ОтключитьОформление; - ФормаРедактирования.НачальноеЗначениеВыбора = ТаблицаЗначений; - //ФормаРедактирования.КлючСохраненияПоложенияОкна = КлючСохраненияПоложенияОкна; // Программно добавленные колонки всегда НЕ сохраняются платформой - ФормаРедактирования.ТолькоПросмотр = ТолькоПросмотр; - Если ЗначениеЗаполнено(Заголовок) Тогда - ФормаРедактирования.Заголовок = Заголовок; - КонецЕсли; - ФормаРедактирования.РежимВыбора = РежимВыбора; - Если Модально Тогда - Результат = ФормаРедактирования.ОткрытьМодально(); - Иначе - ФормаРедактирования.Открыть(); - Результат = ФормаРедактирования; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ВыбратьЭлементСпискаЗначенийЛкс(Знач СписокЗначений, Знач ТекущийЭлемент = Неопределено, Модально = Истина, Заголовок = "", МножественныйВыбор = Ложь) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаРедактирования = мПлатформа.ПолучитьФорму("СписокЗначений", , СписокЗначений); - ФормаРедактирования.НачальноеЗначениеВыбора = СписокЗначений; - ФормаРедактирования.НачальныйЭлементСписка = ТекущийЭлемент; - ФормаРедактирования.МножественныйВыбор = МножественныйВыбор; - Если ЗначениеЗаполнено(Заголовок) Тогда - ФормаРедактирования.Заголовок = Заголовок; - КонецЕсли; - ФормаРедактирования.РежимВыбора = Истина; - Если Модально Тогда - Результат = ФормаРедактирования.ОткрытьМодально(); - Иначе - ФормаРедактирования.Открыть(); - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ЛиСуществуетОбъектПоСсылкеЛкс(Знач РасширенноеЗначение) Экспорт - - Запрос = Новый Запрос("ВЫБРАТЬ 1 ИЗ " + ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(РасширенноеЗначение)) + " ГДЕ Ссылка = &Ссылка"); - Запрос.УстановитьПараметр("Ссылка", РасширенноеЗначение); - ОбъектСуществует = Не Запрос.Выполнить().Пустой(); - Возврат ОбъектСуществует; - -КонецФункции - -Функция ОткрытьРедакторИзПоляТабличногоДокументаЛкс(ПолеТабличногоДокумента) Экспорт - - Копия = Новый ТабличныйДокумент; - Копия.Вывести(ПолеТабличногоДокумента); - ЗаполнитьЗначенияСвойств(Копия, ПолеТабличногоДокумента); - Результат = ОткрытьЗначениеЛкс(Копия,,,, Ложь); - Возврат Результат; - -КонецФункции - -Функция ОткрытьРедакторСтрокиТаблицыЛкс(ЭтаФорма, ТабличноеПоле, ИмяТаблицыБДТабличногоПоля = Неопределено, СвязиИПараметрыВыбора = Истина, Знач СтруктураВладельца = Неопределено) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Форма = мПлатформа.ПолучитьФорму("СтрокаТаблицы", ЭтаФорма, ТабличноеПоле); - Форма.ИмяТаблицыБД = ИмяТаблицыБДТабличногоПоля; - Форма.СвязиИПараметрыВыбора = СвязиИПараметрыВыбора; - Форма.СтруктураВладельца = СтруктураВладельца; - Форма.Открыть(); - Возврат Форма; - -КонецФункции - -Процедура ОткрытьФайлВПроводникеЛкс(Знач ИмяФайла) Экспорт - - ЗапуститьПриложение("explorer /select, """ + ИмяФайла + """"); - -КонецПроцедуры - -// Результат - Булево - Истина если значение было изменено -Функция ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка = Ложь, РасширенноеЗначение = Null, - РедактированиеРазрешено = Истина, ПринудительноВОтдельнойФорме = Ложь, Данные = "", Знач Заголовок = "", Знач СтрокаПоиска = "") Экспорт - - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - Колонка = ТабличноеПоле.ТекущаяКолонка; - ЭлементУправления = Колонка.ЭлементУправления; - Иначе - Колонка = ТабличноеПоле.ТекущийЭлемент; - ЭлементУправления = Колонка; - КонецЕсли; - Если Не ЗначениеЗаполнено(Данные) Тогда - Данные = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - Если РасширенноеЗначение = Null Тогда - Если Не ЗначениеЗаполнено(Данные) Тогда - Возврат Ложь; - КонецЕсли; - РасширенноеЗначение = ТабличноеПоле.ТекущиеДанные[Данные]; - КонецЕсли; - КлючУникальности = ""; - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - ДобавитьКлючСтрокиВЗаголовок = Ложь; - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(ТабличноеПоле.ТекущаяСтрока); - Ячейка = ОформлениеСтроки.Ячейки[Колонка.Имя]; - РедактированиеРазрешено = РедактированиеРазрешено И Не Ячейка.ТолькоПросмотр; - Если Не ЗначениеЗаполнено(Заголовок) Тогда - Заголовок = Колонка.ТекстШапки; - ДобавитьКлючСтрокиВЗаголовок = Истина; - КонецЕсли; - Попытка - КлючУникальности = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока); - Исключение - КонецПопытки; - Иначе - Если Не ЗначениеЗаполнено(Заголовок) Тогда - Заголовок = Колонка.Заголовок; - ДобавитьКлючСтрокиВЗаголовок = Истина; - КонецЕсли; - Попытка - КлючУникальности = ТабличноеПоле.ПолучитьИдентификатор(ТабличноеПоле.ТекущаяСтрока); - Исключение - КонецПопытки; - КонецЕсли; - Если ДобавитьКлючСтрокиВЗаголовок И КлючУникальности <> "" Тогда - КлючУникальности = Формат(КлючУникальности, "ЧН="); - Заголовок = Заголовок + " [" + КлючУникальности + "]"; - КонецЕсли; - КлючУникальности = "" + ИдентификаторФормыЛкс(ЭтаФорма) + ";" + Колонка.Имя + ";" + КлючУникальности; - КонецЕсли; - РедактированиеРазрешено = Истина - И РедактированиеРазрешено - И Не ТабличноеПоле.ТолькоПросмотр - И Не Колонка.ТолькоПросмотр - И (Ложь - Или ЭлементУправления = Неопределено - Или ТипЗнч(ЭлементУправления) = Тип("Флажок") - Или Не ЭлементУправления.ТолькоПросмотр); - Если РедактированиеРазрешено И ПринудительноВОтдельнойФорме Тогда - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - СтруктураТипа = мПлатформа.СтруктураТипаИзЗначения(РасширенноеЗначение); - Попытка - СвойствоГлобальногоКонтекста = Вычислить(СтруктураТипа.ИмяОбщегоТипа); - Исключение - СвойствоГлобальногоКонтекста = Неопределено; - КонецПопытки; - Если Истина - И СвойствоГлобальногоКонтекста <> Неопределено - И СвойствоГлобальногоКонтекста <> Null - Тогда - мПлатформа.ИнициализацияОписанияМетодовИСвойств(); - СписокВыбора = Новый СписокЗначений; - #Если Сервер И Не Сервер Тогда - СписокВыбора = Новый СписокЗначений; - #КонецЕсли - НачальныйВыбор = Неопределено; - СтрокиЗначений = мПлатформа.ТаблицаКонтекстов.НайтиСтроки(Новый Структура("ТипКонтекста, ЯзыкПрограммы", "Перечисление" + СтруктураТипа.ИмяОбщегоТипа, 0)); - Для Каждого СтрокаЗначения Из СтрокиЗначений Цикл - ЗначениеПеречисления = Вычислить(СтруктураТипа.ИмяОбщегоТипа + "." + СтрокаЗначения.Слово); - ЭлементСписка = СписокВыбора.Добавить(ЗначениеПеречисления); - Если РасширенноеЗначение = ЗначениеПеречисления Тогда - НачальныйВыбор = ЭлементСписка; - КонецЕсли; - КонецЦикла; - Если СписокВыбора.Количество() > 0 Тогда - РезультатВыбора = ЭтаФорма.ВыбратьИзСписка(СписокВыбора, ЭлементУправления, НачальныйВыбор); - Результат = РезультатВыбора <> Неопределено; - Если Результат Тогда - РасширенноеЗначение = РезультатВыбора.Значение; - КонецЕсли; - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Результат = Неопределено Тогда - Если Не ЗначениеЗаполнено(СтрокаПоиска) Тогда - СтрокаПоиска = ТабличноеПолеСтрокаПоискаЛкс(ЭтаФорма, ТабличноеПоле); - КонецЕсли; - Результат = ОткрытьЗначениеЛкс(РасширенноеЗначение, РедактированиеРазрешено, СтандартнаяОбработка, Заголовок,, ПринудительноВОтдельнойФорме,, ТабличноеПоле, СтрокаПоиска, КлючУникальности); - КонецЕсли; - Если Результат Тогда - НовоеЗначение = РасширенноеЗначение; // Сохраняем значение, т.к. оно может испортиться следующей строкой - ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, НовоеЗначение); // Почему то запрещенные для поля ввода значения здесь превращаются в строку (например МоментВремени, УникальныйИдентификатор) - РасширенноеЗначение = НовоеЗначение; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Результат - Булево - Истина если значение было изменено -Функция ПолеВводаРасширенногоЗначения_НачалоВыбораЛкс(Знач Элемент, СтандартнаяОбработка, РасширенноеЗначение = Null, Знач СтруктураОтбора = Неопределено) Экспорт - - Если РасширенноеЗначение = Null Тогда - РасширенноеЗначение = Элемент.Значение; - КонецЕсли; - ЗначениеИзменено = Ложь; - Если РасширенноеЗначение = Неопределено Тогда - СтандартнаяОбработка = Ложь; - ОграничениеТипа = ПересечьОписанияТиповЛкс(Элемент.ОграничениеТипа, Элемент.ТипЗначения); - НовыйТипИлиЗначение = ВыбратьРедактируемыйТипЛкс(ОграничениеТипа); - Если НовыйТипИлиЗначение <> Неопределено Тогда - Если ТипЗнч(НовыйТипИлиЗначение) = Тип("Тип") Тогда - МассивТипов = ЗначенияВМассивЛкс(НовыйТипИлиЗначение); - НовоеОписаниеТипов = Новый ОписаниеТипов(МассивТипов); - НовоеЗначение = НовоеОписаниеТипов.ПривестиЗначение(Неопределено); - Иначе - НовоеЗначение = НовыйТипИлиЗначение; - КонецЕсли; - РасширенноеЗначение = НовоеЗначение; - Элемент.Значение = РасширенноеЗначение; // - ЗначениеИзменено = Истина; - КонецЕсли; - Иначе - Если Истина - И ТипЗнч(Элемент) = Тип("ПолеВвода") - И ТипЗнч(Элемент.Значение) = Тип("СписокЗначений") - И ТипЗнч(РасширенноеЗначение) = Тип("СписокЗначений") - Тогда - РасширенноеЗначение.ТипЗначения = Элемент.ТипЗначенияСписка; - КонецЕсли; - Если ТипЗнч(РасширенноеЗначение) = Тип("Булево") Тогда - РасширенноеЗначение = Не РасширенноеЗначение; - ЗначениеИзменено = Истина; - СтандартнаяОбработка = Ложь; - ИначеЕсли Истина - И ТипЗнч(РасширенноеЗначение) <> Тип("Дата") - И ТипЗнч(РасширенноеЗначение) <> Тип("Число") - И Не ЛиСсылкаНаОбъектБДЛкс(РасширенноеЗначение, Ложь) - Тогда - ЗначениеИзменено = ОткрытьЗначениеЛкс(РасширенноеЗначение, Истина, СтандартнаяОбработка); - Если ЗначениеИзменено И ТипЗнч(Элемент) = Тип("ПолеВвода") Тогда - Элемент.Значение = РасширенноеЗначение; - КонецЕсли; - КонецЕсли; - // Вредно для колонки вариантов значений в таблице параметров в консоли кода при отмене редактирования нового списка - //Если Не СтандартнаяОбработка Тогда - // Элемент.Значение = РасширенноеЗначение; - //КонецЕсли; - Если СтандартнаяОбработка Тогда - ОткрытьФормуВыбораСсылкиЛкс(РасширенноеЗначение, СтруктураОтбора, Элемент, СтандартнаяОбработка); - КонецЕсли; - КонецЕсли; - Возврат ЗначениеИзменено; - -КонецФункции - -// Результат - Булево - Истина если значение было изменено -Функция ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка, РасширенноеЗначение = Null, ИспользоватьОграничениеТипа = Ложь, - СтруктураОтбора = Неопределено, Данные = "", Знач СтрокаПоиска = "", Знач Заголовок = "") Экспорт - - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - Колонка = ТабличноеПоле.ТекущаяКолонка; - ЭлементУправления = Колонка.ЭлементУправления; - Иначе - Колонка = ТабличноеПоле.ТекущийЭлемент; - ЭлементУправления = Колонка; - КонецЕсли; - Если Не ЗначениеЗаполнено(Данные) Тогда - Данные = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - РазрешитьВыборТипа = Истина; - Иначе - РазрешитьВыборТипа = Ложь; - КонецЕсли; - Если РасширенноеЗначение = Null Тогда - РасширенноеЗначение = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле)[Данные]; - КонецЕсли; - ЗначениеИзменено = Ложь; - Если РасширенноеЗначение = Неопределено Или РасширенноеЗначение = Null Тогда - Если Не РазрешитьВыборТипа Тогда - Возврат ЗначениеИзменено; - КонецЕсли; - СтандартнаяОбработка = Ложь; - ОграничениеТипа = Неопределено; - Если ИспользоватьОграничениеТипа Тогда - ОграничениеТипа = ЭлементУправления.ОграничениеТипа; - Если Истина - И ОграничениеТипа.Типы().Количество() = 0 - И ТипЗнч(ЭлементУправления) = Тип("ПолеФормы") - И ЗначениеЗаполнено(ЭлементУправления.СвязьПоТипу.ПутьКДанным) - Тогда - ЭтаФорма = РодительЭлементаУправляемойФормыЛкс(ЭлементУправления); - Попытка - ОграничениеТипа = Вычислить("ЭтаФорма." + ЭлементУправления.СвязьПоТипу.ПутьКДанным); - Исключение - ВызватьИсключение "Ошибка вычисления влияющего типа поля: " + ОписаниеОшибки(); - КонецПопытки; - КонецЕсли; - Если ОграничениеТипа.Типы().Количество() = 0 Тогда - ОграничениеТипа = ТипЗначенияЭлементаФормыЛкс(ЭлементУправления); // Очень большое количество типов будет замедлять работу формы выбора типа https://www.hostedredmine.com/issues/923113 - КонецЕсли; - КонецЕсли; - НовыйТипИлиЗначение = ВыбратьРедактируемыйТипЛкс(ОграничениеТипа,,,,, Заголовок); - Если НовыйТипИлиЗначение <> Неопределено Тогда - Если ТипЗнч(НовыйТипИлиЗначение) = Тип("Тип") Тогда - МассивТипов = ЗначенияВМассивЛкс(НовыйТипИлиЗначение); - НовоеОписаниеТипов = Новый ОписаниеТипов(МассивТипов); - НовоеЗначение = НовоеОписаниеТипов.ПривестиЗначение(Неопределено); - Иначе - НовоеЗначение = НовыйТипИлиЗначение; - КонецЕсли; - ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, НовоеЗначение); // Почему то запрещенные для поля ввода значения здесь превращаются в строку (например МоментВремени) - РасширенноеЗначение = НовоеЗначение; - ЗначениеИзменено = Истина; - //// http://www.hostedredmine.com/issues/884276 - //ОткрытьФормуВыбораСсылкиЛкс(РасширенноеЗначение, СтруктураОтбора, ЭлементУправления); - КонецЕсли; - КонецЕсли; - Если РасширенноеЗначение <> Неопределено Тогда - ДанныеТабличногоПоля = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - Если ТипЗнч(ДанныеТабличногоПоля) = Тип("ОтборКомпоновкиДанных") Тогда - #Если Сервер И Не Сервер Тогда - ДанныеТабличногоПоля = Новый ОтборКомпоновкиДанных; - #КонецЕсли - ДоступноеПолеОтбора = ДанныеТабличногоПоля.ДоступныеПоляОтбора.НайтиПоле(ТабличноеПоле.ТекущиеДанные.ЛевоеЗначение); - Если ДоступноеПолеОтбора <> Неопределено Тогда - СтруктураОтбора = СтруктураОтбораЗначенийДоступногоПоляКомпоновкиЛкс(ДоступноеПолеОтбора); - КонецЕсли; - КонецЕсли; - Если ТипЗнч(РасширенноеЗначение) = Тип("СписокЗначений") Тогда - СтандартнаяОбработка = Ложь; - ЗначениеИзменено = ОткрытьСписокЗначенийЛкс(РасширенноеЗначение, СтруктураОтбора, Заголовок); - Если ЗначениеИзменено Тогда - ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, РасширенноеЗначение); // Нужно для управляемой формы https://www.hostedredmine.com/issues/956333 - КонецЕсли; - Иначе - Если Истина - И Не ЛиСсылкаНаОбъектБДЛкс(РасширенноеЗначение, Ложь) - И ТипЗнч(РасширенноеЗначение) <> Тип("ПорядокКомпоновкиДанных") - И ТипЗнч(РасширенноеЗначение) <> Тип("ОтборКомпоновкиДанных") - И ТипЗнч(РасширенноеЗначение) <> Тип("УсловноеОформлениеКомпоновкиДанных") - И ТипЗнч(РасширенноеЗначение) <> Тип("СтруктураНастроекКомпоновкиДанных") - Тогда - ЗначениеИзменено = ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка, РасширенноеЗначение, Истина, Истина, Данные, Заголовок, СтрокаПоиска) Или ЗначениеИзменено; - КонецЕсли; - КонецЕсли; - //Если ЗначениеИзменено Тогда - Если Не СтандартнаяОбработка И ЗначениеЗаполнено(Данные) Тогда - ТабличноеПоле.ТекущиеДанные[Данные] = РасширенноеЗначение;// - КонецЕсли; - Если СтандартнаяОбработка Тогда - ОткрытьФормуВыбораСсылкиЛкс(РасширенноеЗначение, СтруктураОтбора, ЭлементУправления, СтандартнаяОбработка); - КонецЕсли; - КонецЕсли; - Возврат ЗначениеИзменено; - -КонецФункции - -Процедура ОткрытьФормуВыбораСсылкиЛкс(Знач РасширенноеЗначение, Знач СтруктураОтбора, Знач ЭлементУправления, СтандартнаяОбработка) Экспорт - - Если ЛиСсылкаНаОбъектБДЛкс(РасширенноеЗначение, Ложь) Тогда - ОткрытьФормуСпискаЛкс(ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(РасширенноеЗначение)), СтруктураОтбора,, ЭлементУправления, Истина,, РасширенноеЗначение); - СтандартнаяОбработка = Ложь; - КонецЕсли; - -КонецПроцедуры - -Функция СтруктураОтбораЗначенийДоступногоПоляКомпоновкиЛкс(Знач ДоступноеПолеОтбора) Экспорт - - МетаданныеРеквизита = СтруктураСвязейИПараметровВыбораЛкс(); - МетаданныеРеквизита.ПараметрыВыбора = ДоступноеПолеОтбора.ПолучитьПараметрыВыбора(); - СтруктураОтбора = СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(МетаданныеРеквизита); - Возврат СтруктураОтбора; - -КонецФункции - -Функция СтруктураСвязейИПараметровВыбораЛкс() Экспорт - - МетаданныеРеквизита = Новый Структура("ПараметрыВыбора, СвязиПараметровВыбора", Новый Массив, Новый Массив); - Возврат МетаданныеРеквизита; - -КонецФункции - -Функция ОткрытьСписокЗначенийЛкс(Список, СтруктураОтбора = Неопределено, Заголовок = "") Экспорт - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаРедактирования = мПлатформа.ПолучитьФорму("СписокЗначений"); - ФормаРедактирования.НачальноеЗначениеВыбора = Список; - ФормаРедактирования.СтруктураОтбора = СтруктураОтбора; - Если ЗначениеЗаполнено(Заголовок) Тогда - ФормаРедактирования.Заголовок = Заголовок; - КонецЕсли; - РезультатФормы = ФормаРедактирования.ОткрытьМодально(); - Если РезультатФормы <> Неопределено Тогда - Список = РезультатФормы; - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции - -// Параметры: -// ЭтаФорма - Форма - -// ТабличноеПоле - ТабличноеПоле - -// ИмяКолонкиИмениРеквизита - Примитивный - -// ПолноеИмяТаблицы - Строка - -// СвязиИПараметрыВыбора - Булево - -// СтандартнаяОбработка - Булево - -Функция ПолеВводаКолонкиЗначенияРеквизита_НачалоВыбораЛкс(ЭтаФорма, ТабличноеПоле, ПолноеИмяТаблицы, ИмяКолонкиИмениРеквизита = "Имя", ИмяКолонкиЗначения = "Значение", - СвязиИПараметрыВыбора = Истина, СтандартнаяОбработка = Истина, Ссылка = Неопределено, Знач ВладелецТЧ = Неопределено, Знач СтрокаПоиска = "") Экспорт - - Заголовок = ТабличноеПоле.ТекущиеДанные[ИмяКолонкиИмениРеквизита]; - Если СвязиИПараметрыВыбора Тогда - СтруктураОтбора = ПолеВводаКолонкиЗначенияРеквизита_ОтборВыбораЛкс(ТабличноеПоле, ПолноеИмяТаблицы, ИмяКолонкиИмениРеквизита, ИмяКолонкиЗначения, Ссылка, ВладелецТЧ); - ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ПолноеИмяТаблицы); - ТекущиеДанные = ТабличноеПоле.ТекущаяСтрока; - Если ЗначениеЗаполнено(ТекущиеДанные.ДопРеквизит) Тогда - ДопРеквизит = ТекущиеДанные.ДопРеквизит; - #Если Сервер И Не Сервер Тогда - ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка(); - #КонецЕсли - ПриведенноеЗначение = ДопРеквизит.ТипЗначения.ПривестиЗначение(ТекущиеДанные[ИмяКолонкиЗначения]); - Если ПриведенноеЗначение <> ТекущиеДанные[ИмяКолонкиЗначения] Тогда - СтандартнаяОбработка = Ложь; - ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, ТабличноеПоле.Колонки[ИмяКолонкиЗначения], ПриведенноеЗначение); - Возврат Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - УспехВыбора = ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка, , Истина, СтруктураОтбора,, СтрокаПоиска, Заголовок); - Возврат УспехВыбора; -КонецФункции - -// Функция - Поле ввода колонки значения реквизита отбор выбора лкс -// -// Параметры: -// ТабличноеПоле - - -// ПолноеИмяТаблицы - - -// ИмяКолонкиИмениРеквизита - - -// ИмяКолонкиЗначения - - -// Ссылка - - -// ВладелецТЧ - Ссылка, Структура - -// -// Возвращаемое значение: -// Структура - отбор для выбора ссылочного значения -// -Функция ПолеВводаКолонкиЗначенияРеквизита_ОтборВыбораЛкс(Знач ТабличноеПоле, Знач ПолноеИмяТаблицы, Знач ИмяКолонкиИмениРеквизита = "Имя", Знач ИмяКолонкиЗначения = "Значение", - Знач Ссылка = Неопределено, Знач ВладелецТЧ = Неопределено) Экспорт - - ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ПолноеИмяТаблицы); - ТекущиеДанные = ТабличноеПоле.ТекущаяСтрока; - СтрокаПоля = ПоляТаблицыБД.Найти(ТекущиеДанные[ИмяКолонкиИмениРеквизита], "Имя"); - Если СтрокаПоля <> Неопределено Тогда - МетаРеквизит = СтрокаПоля.Метаданные; - СтруктураРеквизитов = Новый Структура; - Для Каждого СтрокаРеквизита Из ТабличноеПоле.Значение Цикл - ИмяРеквизита = СтрокаРеквизита[ИмяКолонкиИмениРеквизита]; - Если Не ЛиИмяПеременнойЛкс(ИмяРеквизита) Тогда - // Доп. реквизит БСП - Продолжить; - КонецЕсли; - ЗначениеРеквизита = СтрокаРеквизита[ИмяКолонкиЗначения]; - Если ИмяРеквизита = "ИдентификаторСсылкиЛкс" Тогда - ИмяРеквизита = "Ссылка"; - ЗначениеРеквизита = Ссылка; - КонецЕсли; - СтруктураРеквизитов.Вставить(ИмяРеквизита, ЗначениеРеквизита); - КонецЦикла; - Если ЛиТипВложеннойТаблицыБДЛкс(ТипТаблицыБДЛкс(ПолноеИмяТаблицы)) Тогда - ОсновныеДанные = ВладелецТЧ; - СтруктураТЧ = Новый Структура(ПоследнийФрагментЛкс(ПолноеИмяТаблицы), СтруктураРеквизитов); - Иначе - ОсновныеДанные = СтруктураРеквизитов; - СтруктураТЧ = Неопределено; - КонецЕсли; - СтруктураОтбора = СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(МетаРеквизит, ОсновныеДанные, СтруктураТЧ); - ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.ДопРеквизит) Тогда - ДопРеквизит = ТекущиеДанные.ДопРеквизит; - #Если Сервер И Не Сервер Тогда - ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка(); - #КонецЕсли - СтруктураОтбора = Новый Структура("Владелец", ДопРеквизит); - КонецЕсли; - Возврат СтруктураОтбора; - -КонецФункции - -// Вызывать после установки признака ТолькоПросмотр ячеек. -// -// Параметры: -// ЭтаФорма - - -// Элемент - - -// ОформлениеСтроки - - -// ДанныеСтроки - - -// КнопкаРежимаОтображения - - -// КолонкиСПиктограммамиТипов - Строка, Структура - -// РасширенныеКолонки - Структура - -// РасширенноеПредставлениеХранилищЗначений - - -// РасширенныеДанныеСтроки - - -// КолонкиДляРежимаОтображения - - -// РасширенноеПредставлениеДат - Булево - введен для ускорения -// -Процедура ТабличноеПолеПриВыводеСтрокиЛкс(Знач ЭтаФорма, Знач Элемент, Знач ОформлениеСтроки, Знач ДанныеСтроки, Знач КнопкаРежимаОтображения = Неопределено, Знач КолонкиСПиктограммамиТипов = "", - Знач РасширенныеКолонки = Неопределено, Знач РасширенноеПредставлениеХранилищЗначений = Ложь, Знач РасширенныеДанныеСтроки = Неопределено, Знач КолонкиДляРежимаОтображения = Неопределено, - Знач РасширенноеПредставлениеДат = Ложь) Экспорт - - #Если Сервер И Не Сервер Тогда - Элемент = Новый ТабличноеПоле; - #КонецЕсли - Если Ложь - Или ДанныеСтроки = Неопределено - Или ирКэш = Неопределено // Портативный режим при закрытии всех форм http://devtool1c.ucoz.ru/forum/2-1616-1 - Тогда - Возврат; - КонецЕсли; - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, Элемент); - Если ДопСвойства.ЗапретОтображения = Истина Тогда - Возврат; - КонецЕсли; - Если ДопСвойства.ЗапретРазметкиВхождений <> Истина Тогда - ШаблонРазметкиВхождений = ШаблонРазметкиВхожденийЛкс(); - МенеджерПоиска = ДопСвойства.МенеджерПоиска; - ПрефиксСтрокиПоиска = ""; - Если МенеджерПоиска <> Неопределено Тогда - ПрефиксСтрокиПоиска = МенеджерПоиска.ПрефиксСтрокиПоиска; - Если МенеджерПоиска.НайденныеСтроки.Найти(ДанныеСтроки) <> Неопределено Тогда - ОформлениеСтроки.ЦветФона = ЦветФонаЯчеекТекущегоЗначенияЛкс(); - КонецЕсли; - КонецЕсли; - СтрокаПоиска = ТабличноеПолеСтрокаПоискаЛкс(ЭтаФорма, Элемент, ПрефиксСтрокиПоиска); - КолонкиПоиска = Неопределено; - ИскатьСРодителем = Ложь; - Если ЗначениеЗаполнено(СтрокаПоиска) Тогда - РазрешитьОкраскуПоиска = Истина; - Если МенеджерПоиска <> Неопределено Тогда - КолонкиПоиска = МенеджерПоиска.КолонкиПоиска; - РазрешитьОкраскуПоиска = МенеджерПоиска.РазрешитьОкраску; - ИскатьСРодителем = МенеджерПоиска.ИскатьСРодителем; - КонецЕсли; - ВычислительРегВыражений = ирКэш.ВычислительРегВыраженийЛкс(); - #Если Сервер И Не Сервер Тогда - ВычислительРегВыражений = Обработки.ирОболочкаРегВыражение.Создать(); - #КонецЕсли - ВычислительРегВыражений.Global = Истина; - СловаПоиска = РазделитьСтрокуПоискаНаСловаПоискаЛкс(НРег(СтрокаПоиска), ИскатьСРодителем); - Если ИскатьСРодителем Тогда - Если ДанныеСтроки.Уровень() = 0 Тогда - Пока СловаПоиска.Количество() > 1 Цикл - СловаПоиска.Удалить(1); - КонецЦикла; - Иначе - СловаПоиска.Удалить(0); - КонецЕсли; - КонецЕсли; - ВычислительРегВыражений.Pattern = РегВыражениеСтрокиПоискаЛкс(СловаПоиска, Ложь); - ИначеЕсли ТипЗнч(Элемент.Значение) <> Тип("НастройкиКомпоновкиДанных") Тогда - РазрешитьОкраскуПоиска = Ложь; - Если ДопСвойства.Отбор <> Неопределено Тогда - КолонкиПоиска = СловаПоискаПоКолонкамИзОтбораПостроителяЛкс(Элемент, ДопСвойства.Отбор); - Если КолонкиПоиска.Количество() > 0 Тогда - СтрокаПоиска = "Ё"; // любая непустая строка - ВычислительРегВыражений = ирКэш.ВычислительРегВыраженийЛкс(); - Для Каждого КлючИЗначение Из КолонкиПоиска Цикл - КлючИЗначение.Значение[0] = "(" + ПреобразоватьТекстДляРегулярныхВыраженийЛкс(КлючИЗначение.Значение[0]) + ")"; - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - ТолькоПросмотрТабличногоПоля = Элемент.ТолькоПросмотр Или ЭтаФорма.ТолькоПросмотр И Элемент.ИзменяетДанные; - КолонкиТаблицы = Элемент.Колонки; - Если КнопкаРежимаОтображения <> Неопределено Тогда - ВариантОтображенияИдентификаторов = КнопкаРежимаОтображения.Текст; - КонецЕсли; - Ячейки = ОформлениеСтроки.Ячейки; - Если РасширенныеДанныеСтроки = Неопределено Тогда - РасширенныеДанныеСтроки = ДанныеСтроки; - КонецЕсли; - Если КолонкиДляРежимаОтображения <> Неопределено Тогда - КолонкиДляРежимаОтображения = Новый Структура(КолонкиДляРежимаОтображения); - КонецЕсли; - СостоянияКнопки = СостоянияКнопкиОтображатьПустыеИИдентификаторыЛкс(); - ЛиОтбражатьПустые = Ложь - Или ВариантОтображенияИдентификаторов = СостоянияКнопки[1] - Или ВариантОтображенияИдентификаторов = СостоянияКнопки[2]; - ОтображатьИдентификаторы = ВариантОтображенияИдентификаторов = СостоянияКнопки[2]; - ирПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - ирПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Если ТипЗнч(КолонкиСПиктограммамиТипов) = Тип("Строка") Тогда - КолонкиСПиктограммамиТипов = Новый Структура(КолонкиСПиктограммамиТипов); - КонецЕсли; - ЦветФонаПустогоЗначения = ЦветФонаПустогоЗначенияЛкс(); - ЦветТекстаПустогоЗначения = ЦветТекстаПустогоЗначенияЛкс(); - Если ТипЗнч(ДанныеСтроки) = Тип("ТекущиеДанныеСписка") Тогда - ИмяТаблицыБД = ИмяТаблицыБДДинамическогоСпискаЛкс(Элемент); - КлючСтроки = КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ИмяТаблицыБД, ДанныеСтроки); - Иначе - Если ТипЗнч(ДанныеСтроки) = Тип("ТекущиеДанныеСтруктурыНастроекКомпоновкиДанных") Тогда - КлючСтроки = ДанныеСтроки.Строка; - Иначе - КлючСтроки = ДанныеСтроки; - КонецЕсли; - КонецЕсли; - ЭтоВыводТекущейСтроки = КлючСтроки = Элемент.ТекущаяСтрока; - ЭтоВыводВыделеннойСтроки = Элемент.ВыделенныеСтроки.Содержит(КлючСтроки); - ЦветФонаЯчеекТекущегоЗначения = ЦветФонаЯчеекТекущегоЗначенияЛкс(); - Если ЛиОтбражатьПустые Тогда - ТекущееЗначение = ТабличноеПолеЗначениеТекущейЯчейкиЛкс(Элемент); - ДопСвойства.КнопкаРежимаОтображения = КнопкаРежимаОтображения; - ДопСвойства.ЗначениеТекущейЯчейки = ТекущееЗначение; - КонецЕсли; - ВсеТипыСсылокДокументов = Документы.ТипВсеСсылки(); - ЗначенияНизкойВажности = Новый Массив; - ЗначенияНизкойВажности.Добавить(0); - _РежимОтладки = ирКэш.РежимОтладкиЛкс(); - Если _РежимОтладки Тогда - // Пассивный оригинал расположенного ниже однострочного кода. Выполняйте изменения синхронно в обоих вариантах. - Для Каждого Колонка Из КолонкиТаблицы Цикл - Если Не Колонка.Видимость Тогда - Продолжить; - КонецЕсли; - ИмяКолонки = Колонка.Имя; - ИмяКолонкиДанных = Колонка.Данные; - Ячейка = Ячейки[ИмяКолонки]; - //Если Не Ячейка.Видимость Тогда // Почему то здесь платформа тратит много времени. Поэтому в среднем это лишние траты времени. - // Продолжить; - //КонецЕсли; - КартинкаЯчейки = Неопределено; - КолонкаРасширенныхДанных = Неопределено; - Если РасширенныеКолонки <> Неопределено Тогда - РасширенныеКолонки.Свойство(ИмяКолонки, КолонкаРасширенныхДанных); - КонецЕсли; - ПрименятьРежимОтображения = Ложь - Или КолонкиДляРежимаОтображения = Неопределено - Или КолонкиДляРежимаОтображения.Свойство(ИмяКолонки); - КолонкаОтображаетДанныеФлажка = Ложь; - Если КолонкаРасширенныхДанных <> Неопределено Тогда - ЗначениеЯчейки = РасширенныеДанныеСтроки[КолонкаРасширенныхДанных]; - Иначе - Если Истина - И Не ЗначениеЗаполнено(ИмяКолонкиДанных) - И ЗначениеЗаполнено(Колонка.ДанныеФлажка) - Тогда - ЗначениеЯчейки = Ячейка.ЗначениеФлажка; - КолонкаОтображаетДанныеФлажка = Не Ячейка.ТолькоПросмотр; - Иначе - ЗначениеЯчейки = Ячейка.Значение; - КонецЕсли; - КонецЕсли; - ТипЗначенияЯчейки = ТипЗнч(ЗначениеЯчейки); - ТипЗначенияЯчейкиXML = XMLТипЗнч(ЗначениеЯчейки); - Если Истина - И Не КолонкаОтображаетДанныеФлажка - И ТипЗначенияЯчейки = Тип("Булево") - И ТипЗнч(Колонка.ЭлементУправления) <> Тип("ПолеВыбора") // Колонка "Вид" таблицы "Параметры" в консоли запросов - Тогда - Если Истина - И Не ЛиОтбражатьПустые - И Не ОтображатьИдентификаторы - И Не КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки) - Тогда - Ячейка.УстановитьТекст(""); - Иначе - Ячейка.УстановитьТекст("" + ЗначениеЯчейки); - КонецЕсли; - Если Не Ячейка.ТолькоПросмотр И Колонка.ЭлементУправления <> Неопределено И Не ТолькоПросмотрТабличногоПоля Тогда - Ячейка.УстановитьФлажок(ЗначениеЯчейки); - ИначеЕсли Ячейка.Текст = "" Тогда - Ячейка.ОтображатьФлажок = Ложь; - Если Колонка.КартинкиСтрок.Вид <> ВидКартинки.Пустая Тогда - Ячейка.ИндексКартинки = Не ЗначениеЯчейки; - Ячейка.ОтображатьКартинку = Истина; - Иначе - Если ЗначениеЯчейки = Истина Тогда - КартинкаЯчейки = ирКэш.КартинкаПоИмениЛкс("ирФлажокТолькоПросмотр"); - // Так почему то в некоторых местах выводится квадратик для флажка, как будто его можно изменять. Например в открытой в режиме ТолькоПросмотр ссылки форме выбора редактируемых типов. - //Ячейка.УстановитьФлажок(ЗначениеЯчейки); - //Ячейка.ТолькоПросмотр = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - ПредставлениеЗначения = ""; - Если Истина - И Не КолонкаОтображаетДанныеФлажка - И ТипЗначенияЯчейки <> Тип("Строка") - И ЗначениеЯчейки <> Неопределено - И (Ложь - Или РасширенноеПредставлениеХранилищЗначений - Или ТипЗначенияЯчейки = Тип("ОписаниеТипов") - Или РасширенноеПредставлениеДат И ТипЗначенияЯчейки = Тип("Дата") - Или ТипЗначенияЯчейкиXML = Неопределено) - Тогда - ПредставлениеЗначения = РасширенноеПредставлениеЗначенияЛкс(ЗначениеЯчейки, Колонка,, РасширенноеПредставлениеХранилищЗначений, Ложь); - КонецЕсли; - НовыйЦветФона = Неопределено; - НовыйЦветТекста = Неопределено; - ТекстЯчейки = Ячейка.Текст; - ФорматКолонки = Колонка.Формат; - - // Мультиметка62441127 - Если ЛиОтбражатьПустые И ПрименятьРежимОтображения Тогда - Если ТипЗначенияЯчейки = Тип("Строка") Тогда - Если Не ЗначениеЗаполнено(ЗначениеЯчейки) Тогда - ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки); - НовыйЦветФона = ЦветФонаПустогоЗначения; - ИначеЕсли ОтображатьИдентификаторы Тогда - ПредставлениеЗначения = """" + ЗначениеЯчейки + """"; - КонецЕсли; - ИначеЕсли Не ЛиКоллекцияЛкс(ЗначениеЯчейки) Тогда - Попытка - ЗначениеНепустое = ЗначениеЗаполнено(ЗначениеЯчейки) И ЗначениеЯчейки <> Ложь; - Исключение - ЗначениеНепустое = Истина; - КонецПопытки; - Если Не ЗначениеНепустое Тогда - ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки); - НовыйЦветФона = ЦветФонаПустогоЗначения; - КонецЕсли; - КонецЕсли; - Если Истина - И ТекущееЗначение = ЗначениеЯчейки - И ТипЗнч(ТекущееЗначение) = ТипЗначенияЯчейки // защита от слияния Истина=1 - Тогда - НовыйЦветФона = ЦветФонаЯчеекТекущегоЗначения; - КонецЕсли; - Иначе - Если Истина - И ЗначенияНизкойВажности.Найти(ЗначениеЯчейки) <> Неопределено - И ФорматКолонки = "" - И ИмяКолонки <> "ИдентификаторСсылкиЛкс" - Тогда - Если ТипЗнч(ЗначениеЯчейки) = Тип("Число") Тогда - ПредставлениеЗначения = "0"; - Иначе - ПредставлениеЗначения = "" + ЗначениеЯчейки; // Ложь - КонецЕсли; - НовыйЦветТекста = ЦветТекстаПустогоЗначения; - КонецЕсли; - // Результаты поиска слов - Если Истина - И ЗначениеЗаполнено(СтрокаПоиска) - И ЗначениеЗаполнено(ИмяКолонкиДанных) - И (Ложь - Или КолонкиПоиска = Неопределено - Или КолонкиПоиска.Свойство(ИмяКолонкиДанных)) - И ТипЗначенияЯчейкиXML <> Неопределено - И (Ложь - Или ТипЗначенияЯчейки = Тип("Строка") - Или (Истина - И Найти(ТипЗначенияЯчейкиXML.ИмяТипа, "Ref.") > 0 - И Не ВсеТипыСсылокДокументов.СодержитТип(ТипЗначенияЯчейки))) - Тогда - Если КолонкиПоиска <> Неопределено Тогда - КолонкаПоиска = КолонкиПоиска[ИмяКолонкиДанных]; - Если КолонкаПоиска <> Неопределено Тогда - // Это отбор и значение ему точно удовлетворяет - ВычислительРегВыражений.Pattern = КолонкаПоиска[0]; - КонецЕсли; - Иначе - КолонкаПоиска = Неопределено; - КонецЕсли; - Если Ложь - Или КолонкаПоиска <> Неопределено - Или ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекстЯчейки, СловаПоиска) - Тогда - ПредставлениеЗначения = ВычислительРегВыражений.Заменить(ТекстЯчейки, ШаблонРазметкиВхождений); - Если РазрешитьОкраскуПоиска Тогда - НовыйЦветФона = ЦветФонаЯчеекТекущегоЗначения; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если НовыйЦветФона <> Неопределено Тогда - Ячейка.ЦветФона = НовыйЦветФона; - КонецЕсли; - Если НовыйЦветТекста <> Неопределено Тогда - Ячейка.ЦветТекста = НовыйЦветТекста; - КонецЕсли; - Если ПредставлениеЗначения <> "" Тогда - Если Ложь - Или КолонкаОтображаетДанныеФлажка - Или Формат(ЗначениеЯчейки, ФорматКолонки) = ТекстЯчейки // Здесь могут быть обращения к БД - Тогда - Ячейка.УстановитьТекст(ПредставлениеЗначения); - КонецЕсли; - КонецЕсли; - Если Истина - И ОтображатьИдентификаторы - И ПрименятьРежимОтображения - И ТипЗначенияЯчейки <> Тип("Строка") - И ЗначениеЯчейки <> Неопределено - И ЗначениеЯчейки <> Null - Тогда - ИдентификаторСсылки = СтроковыйИдентификаторЗначенияЛкс(ЗначениеЯчейки, Истина); - Если ИдентификаторСсылки <> Неопределено Тогда - Ячейка.УстановитьТекст(ИдентификаторСсылки); - КонецЕсли; - КонецЕсли; - Если КартинкаЯчейки = Неопределено И КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки) Тогда - Если ТипЗначенияЯчейки <> Тип("ПолеКомпоновкиДанных") Тогда - Если Не (Истина - И ТипЗначенияЯчейки = Тип("Булево") - И Ячейка.ОтображатьФлажок) - Тогда - КартинкаТипа = КартинкаТипаЛкс(ТипЗначенияЯчейки); - Если КартинкаТипа <> Неопределено Тогда - КартинкаЯчейки = КартинкаТипа; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если КартинкаЯчейки <> Неопределено Тогда - Ячейка.УстановитьКартинку(КартинкаЯчейки); - КонецЕсли; - КонецЦикла; - Иначе - // Однострочный код использован для ускорения. Выше расположен оригинал. Выполняйте изменения синхронно в обоих вариантах. Преобразовано консолью кода из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru) - Для Каждого Колонка Из КолонкиТаблицы Цикл   Если Не Колонка.Видимость Тогда   Продолжить;   КонецЕсли;   ИмяКолонки = Колонка.Имя;   ИмяКолонкиДанных = Колонка.Данные;   Ячейка = Ячейки[ИмяКолонки];         КартинкаЯчейки = Неопределено;   КолонкаРасширенныхДанных = Неопределено;   Если РасширенныеКолонки <> Неопределено Тогда   РасширенныеКолонки.Свойство(ИмяКолонки, КолонкаРасширенныхДанных);   КонецЕсли;   ПрименятьРежимОтображения = Ложь   Или КолонкиДляРежимаОтображения = Неопределено   Или КолонкиДляРежимаОтображения.Свойство(ИмяКолонки);   КолонкаОтображаетДанныеФлажка = Ложь;   Если КолонкаРасширенныхДанных <> Неопределено Тогда   ЗначениеЯчейки = РасширенныеДанныеСтроки[КолонкаРасширенныхДанных];   Иначе   Если Истина   И Не ЗначениеЗаполнено(ИмяКолонкиДанных)   И ЗначениеЗаполнено(Колонка.ДанныеФлажка)   Тогда   ЗначениеЯчейки = Ячейка.ЗначениеФлажка;   КолонкаОтображаетДанныеФлажка = Не Ячейка.ТолькоПросмотр;   Иначе   ЗначениеЯчейки = Ячейка.Значение;   КонецЕсли;   КонецЕсли;   ТипЗначенияЯчейки = ТипЗнч(ЗначениеЯчейки);   ТипЗначенияЯчейкиXML = XMLТипЗнч(ЗначениеЯчейки);   Если Истина   И Не КолонкаОтображаетДанныеФлажка   И ТипЗначенияЯчейки = Тип("Булево")   И ТипЗнч(Колонка.ЭлементУправления) <> Тип("ПолеВыбора")   Тогда   Если Истина   И Не ЛиОтбражатьПустые   И Не ОтображатьИдентификаторы   И Не КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки)   Тогда   Ячейка.УстановитьТекст("");   Иначе   Ячейка.УстановитьТекст("" + ЗначениеЯчейки);   КонецЕсли;   Если Не Ячейка.ТолькоПросмотр И Колонка.ЭлементУправления <> Неопределено И Не ТолькоПросмотрТабличногоПоля Тогда   Ячейка.УстановитьФлажок(ЗначениеЯчейки);   ИначеЕсли Ячейка.Текст = "" Тогда   Ячейка.ОтображатьФлажок = Ложь;   Если Колонка.КартинкиСтрок.Вид <> ВидКартинки.Пустая Тогда   Ячейка.ИндексКартинки = Не ЗначениеЯчейки;   Ячейка.ОтображатьКартинку = Истина;   Иначе   Если ЗначениеЯчейки = Истина Тогда   КартинкаЯчейки = ирКэш.КартинкаПоИмениЛкс("ирФлажокТолькоПросмотр");         КонецЕсли;   КонецЕсли;   КонецЕсли;   КонецЕсли;   ПредставлениеЗначения = "";   Если Истина   И Не КолонкаОтображаетДанныеФлажка   И ТипЗначенияЯчейки <> Тип("Строка")   И ЗначениеЯчейки <> Неопределено   И (Ложь   Или РасширенноеПредставлениеХранилищЗначений   Или ТипЗначенияЯчейки = Тип("ОписаниеТипов")   Или РасширенноеПредставлениеДат И ТипЗначенияЯчейки = Тип("Дата")   Или ТипЗначенияЯчейкиXML = Неопределено)   Тогда   ПредставлениеЗначения = РасширенноеПредставлениеЗначенияЛкс(ЗначениеЯчейки, Колонка,, РасширенноеПредставлениеХранилищЗначений, Ложь);   КонецЕсли;   НовыйЦветФона = Неопределено;   НовыйЦветТекста = Неопределено;   ТекстЯчейки = Ячейка.Текст;   ФорматКолонки = Колонка.Формат;       Если ЛиОтбражатьПустые И ПрименятьРежимОтображения Тогда   Если ТипЗначенияЯчейки = Тип("Строка") Тогда   Если Не ЗначениеЗаполнено(ЗначениеЯчейки) Тогда   ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки);   НовыйЦветФона = ЦветФонаПустогоЗначения;   ИначеЕсли ОтображатьИдентификаторы Тогда   ПредставлениеЗначения = """" + ЗначениеЯчейки + """";   КонецЕсли;   ИначеЕсли Не ЛиКоллекцияЛкс(ЗначениеЯчейки) Тогда   Попытка   ЗначениеНепустое = ЗначениеЗаполнено(ЗначениеЯчейки) И ЗначениеЯчейки <> Ложь;   Исключение   ЗначениеНепустое = Истина;   КонецПопытки;   Если Не ЗначениеНепустое Тогда   ПредставлениеЗначения = ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ЗначениеЯчейки);   НовыйЦветФона = ЦветФонаПустогоЗначения;   КонецЕсли;   КонецЕсли;   Если Истина   И ТекущееЗначение = ЗначениеЯчейки   И ТипЗнч(ТекущееЗначение) = ТипЗначенияЯчейки   Тогда   НовыйЦветФона = ЦветФонаЯчеекТекущегоЗначения;   КонецЕсли;   Иначе   Если Истина   И ЗначенияНизкойВажности.Найти(ЗначениеЯчейки) <> Неопределено   И ФорматКолонки = ""   И ИмяКолонки <> "ИдентификаторСсылкиЛкс"   Тогда   Если ТипЗнч(ЗначениеЯчейки) = Тип("Число") Тогда   ПредставлениеЗначения = "0";   Иначе   ПредставлениеЗначения = "" + ЗначениеЯчейки;   КонецЕсли;   НовыйЦветТекста = ЦветТекстаПустогоЗначения;   КонецЕсли;     Если Истина   И ЗначениеЗаполнено(СтрокаПоиска)   И ЗначениеЗаполнено(ИмяКолонкиДанных)   И (Ложь   Или КолонкиПоиска = Неопределено   Или КолонкиПоиска.Свойство(ИмяКолонкиДанных))   И ТипЗначенияЯчейкиXML <> Неопределено   И (Ложь   Или ТипЗначенияЯчейки = Тип("Строка")   Или (Истина   И Найти(ТипЗначенияЯчейкиXML.ИмяТипа, "Ref.") > 0   И Не ВсеТипыСсылокДокументов.СодержитТип(ТипЗначенияЯчейки)))   Тогда   Если КолонкиПоиска <> Неопределено Тогда   КолонкаПоиска = КолонкиПоиска[ИмяКолонкиДанных];   Если КолонкаПоиска <> Неопределено Тогда     ВычислительРегВыражений.Pattern = КолонкаПоиска[0];   КонецЕсли;   Иначе   КолонкаПоиска = Неопределено;   КонецЕсли;   Если Ложь   Или КолонкаПоиска <> Неопределено   Или ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекстЯчейки, СловаПоиска)   Тогда   ПредставлениеЗначения = ВычислительРегВыражений.Заменить(ТекстЯчейки, ШаблонРазметкиВхождений);   Если РазрешитьОкраскуПоиска Тогда   НовыйЦветФона = ЦветФонаЯчеекТекущегоЗначения;   КонецЕсли;   КонецЕсли;   КонецЕсли;   КонецЕсли;     Если НовыйЦветФона <> Неопределено Тогда   Ячейка.ЦветФона = НовыйЦветФона;   КонецЕсли;   Если НовыйЦветТекста <> Неопределено Тогда   Ячейка.ЦветТекста = НовыйЦветТекста;   КонецЕсли;   Если ПредставлениеЗначения <> "" Тогда   Если Ложь   Или КолонкаОтображаетДанныеФлажка   Или Формат(ЗначениеЯчейки, ФорматКолонки) = ТекстЯчейки   Тогда   Ячейка.УстановитьТекст(ПредставлениеЗначения);   КонецЕсли;   КонецЕсли;   Если Истина   И ОтображатьИдентификаторы   И ПрименятьРежимОтображения   И ТипЗначенияЯчейки <> Тип("Строка")   И ЗначениеЯчейки <> Неопределено   И ЗначениеЯчейки <> Null   Тогда   ИдентификаторСсылки = СтроковыйИдентификаторЗначенияЛкс(ЗначениеЯчейки, Истина);   Если ИдентификаторСсылки <> Неопределено Тогда   Ячейка.УстановитьТекст(ИдентификаторСсылки);   КонецЕсли;   КонецЕсли;   Если КартинкаЯчейки = Неопределено И КолонкиСПиктограммамиТипов.Свойство(ИмяКолонки) Тогда   Если ТипЗначенияЯчейки <> Тип("ПолеКомпоновкиДанных") Тогда   Если Не (Истина   И ТипЗначенияЯчейки = Тип("Булево")   И Ячейка.ОтображатьФлажок)   Тогда   КартинкаТипа = КартинкаТипаЛкс(ТипЗначенияЯчейки);   Если КартинкаТипа <> Неопределено Тогда   КартинкаЯчейки = КартинкаТипа;   КонецЕсли;   КонецЕсли;   КонецЕсли;   КонецЕсли;   Если КартинкаЯчейки <> Неопределено Тогда   Ячейка.УстановитьКартинку(КартинкаЯчейки);   КонецЕсли;   КонецЦикла;   - КонецЕсли; - ИмяКолонкиНомерСтроки = ирКэш.ИмяКолонкиНомерСтрокиЛкс(); - Если Ячейки.Найти(ИмяКолонкиНомерСтроки) <> Неопределено Тогда - Если ТипЗнч(ДанныеСтроки) = Тип("СтрокаДереваЗначений") Тогда - ИндексСтроки = РодительСтрокиДереваЛкс(ДанныеСтроки, ДанныеСтроки.Владелец()).Строки.Индекс(ДанныеСтроки); - Иначе - ИндексСтроки = ДанныеСтроки.Владелец().Индекс(ДанныеСтроки); - КонецЕсли; - Ячейки[ИмяКолонкиНомерСтроки].УстановитьТекст(XMLСтрока(ИндексСтроки + 1)); - Ячейки[ИмяКолонкиНомерСтроки].ЦветТекста = Новый Цвет(128, 128, 128); - КонецЕсли; - Если Истина - И (ЭтоВыводТекущейСтроки Или ЭтоВыводВыделеннойСтроки) - И Элемент.ПолучитьДействие("ПриАктивизацииСтроки") <> Неопределено - Тогда - Если ЭтоВыводТекущейСтроки Тогда - СмещениеЦвета = -20; - Иначе - СмещениеЦвета = -15; - КонецЕсли; - ТекущийЦветФона = ОформлениеСтроки.ЦветФона; - Если ТекущийЦветФона.Вид = ВидЦвета.АвтоЦвет Тогда - ТекущийЦветФона = Элемент.ЦветФонаПоля; - КонецЕсли; - ОформлениеСтроки.ЦветФона = СмещенныйЦветЛкс(ТекущийЦветФона, СмещениеЦвета,, СмещениеЦвета); - Для Каждого Ячейка Из ОформлениеСтроки.Ячейки Цикл - ТекущийЦветФона = Ячейка.ЦветФона; - Если ТекущийЦветФона.Вид = ВидЦвета.АвтоЦвет Тогда - Продолжить; - КонецЕсли; - Ячейка.ЦветФона = СмещенныйЦветЛкс(ТекущийЦветФона, СмещениеЦвета,, СмещениеЦвета); - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -Функция СловаПоискаПоКолонкамИзОтбораПостроителяЛкс(Знач ТабличноеПоле = Неопределено, Знач Отбор = Неопределено) Экспорт - - СловаПоСвойствам = Новый Структура; - Если Отбор = Неопределено Тогда - Отбор = ОтборТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - Если Отбор = Неопределено Тогда - Возврат СловаПоСвойствам; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - Отбор = Новый ПостроительЗапроса; - Отбор = Отбор.Отбор; - #КонецЕсли - ОбщийЭлементОтбора = Отбор.Найти("ДанныеПоиска"); - ОбщееСлово = ""; - Если Истина - И ОбщийЭлементОтбора <> Неопределено - И ОбщийЭлементОтбора.Использование - И ОбщийЭлементОтбора.ВидСравнения = ВидСравнения.Содержит - И ОбщийЭлементОтбора.Значение <> "" - Тогда - ОбщееСлово = ОбщийЭлементОтбора.Значение; - КонецЕсли; - Для Каждого ЭлементОтбора Из Отбор Цикл - Если Истина - И ОбщееСлово <> "" - И ЛиОписаниеТиповПростогоСтроковогоТипаЛкс(ЭлементОтбора.ТипЗначения, Ложь) - Тогда - ДобавитьСловаПоискаВСтруктуруРеквизитов("" + ЭлементОтбора.Имя, ОбщееСлово, СловаПоСвойствам); - КонецЕсли; - Если Истина - И ЭлементОтбора.Использование - И ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит - И ЭлементОтбора.Значение <> "" - Тогда - ДобавитьСловаПоискаВСтруктуруРеквизитов("" + ЭлементОтбора.Имя, ЭлементОтбора.Значение, СловаПоСвойствам); - Если СтрКончаетсяНаЛкс(ЭлементОтбора.Имя, "Представление") Тогда - // Для ирРазличныеЗначенияКолонки - ЭлементОтбораРодитель = Отбор.Найти(СтрокаБезПоследнегоФрагментаЛкс(ЭлементОтбора.Имя, "Представление")); - Если Истина - И ЭлементОтбораРодитель <> Неопределено - И Не ЭлементОтбораРодитель.Использование - Тогда - ДобавитьСловаПоискаВСтруктуруРеквизитов("" + ЭлементОтбораРодитель.Имя, ЭлементОтбора.Значение, СловаПоСвойствам); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Возврат СловаПоСвойствам; - -КонецФункции - -Процедура ТабличноеПолеСДаннымиПоискаУстановитьОтборПоПодстрокеЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ЗначениеОтбора, Знач КолонкиПоиска = Неопределено, Знач РазрешитьОкраску = Ложь) Экспорт - - Если ТабличноеПоле.Значение.Количество() > 0 Тогда - СтрокаТаблицы = ТабличноеПоле.Значение[0]; - ДанныеПоиска = ДанныеПоискаСтрокиТаблицыЛкс(ТабличноеПоле, СтрокаТаблицы, КолонкиПоиска); - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - ДопСвойства.МенеджерПоиска = СоздатьМенеджерПоискаВТабличномПолеЛкс(КолонкиПоиска,,, РазрешитьОкраску); - Если СтрокаТаблицы.ДанныеПоиска <> ДанныеПоиска Тогда - Для Каждого СтрокаТаблицы Из ТабличноеПоле.Значение Цикл - СтрокаТаблицы.ДанныеПоиска = ДанныеПоискаСтрокиТаблицыЛкс(ТабличноеПоле, СтрокаТаблицы, КолонкиПоиска); - КонецЦикла; - КонецЕсли; - КонецЕсли; - УстановитьОтборПоПодстрокеЛкс(ТабличноеПоле.ОтборСтрок.ДанныеПоиска, ЗначениеОтбора); - -КонецПроцедуры - -Процедура ТабличноеПолеРегистраОбновитьКолонкиОстатковЛкс(Знач ТабличноеПолеРегистра, Знач ОбъектМД, Знач Кнопка, НоваяПометка = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ОбъектМД = Метаданные.РегистрыНакопления.ОстаткиДнейДополнительныхОтпусков; - #КонецЕсли - Если НоваяПометка = Неопределено Тогда - НоваяПометка = Кнопка.Пометка; - Иначе - Кнопка.Пометка = НоваяПометка; - КонецЕсли; - Для Каждого Ресурс Из ОбъектМД.Ресурсы Цикл - ИмяКолонки = Ресурс.Имя + "Остаток"; - КолонкаРесурса = ТабличноеПолеРегистра.Колонки.Найти(Ресурс.Имя); - КолонкаОстатка = ТабличноеПолеРегистра.Колонки.Найти(ИмяКолонки); - Если КолонкаОстатка = Неопределено Тогда - КолонкаОстатка = ТабличноеПолеРегистра.Колонки.Вставить(ТабличноеПолеРегистра.Колонки.Индекс(КолонкаРесурса)); - КолонкаОстатка.Имя = ИмяКолонки; - ТабличноеПолеРегистра.Колонки.Сдвинуть(КолонкаОстатка, 1); - КолонкаОстатка.Положение = ПоложениеКолонки.ВТойЖеКолонке; - КолонкаОстатка.ТекстШапки = "->Остаток"; - КолонкаОстатка.ЦветТекстаПоля = ирОбщий.ЦветТекстаИзмененныхДанныхЛкс(); - КолонкаОстатка.ПодсказкаВШапке = Ресурс.Представление() + " Остаток на текущую дату"; - КолонкаОстатка.ТолькоПросмотр = Истина; - КонецЕсли; - КолонкаОстатка.Видимость = КолонкаРесурса.Видимость И НоваяПометка; - КонецЦикла; - Если НоваяПометка Тогда - ТабличноеПолеРегистра.ОбновитьСтроки(); - КонецЕсли; - -КонецПроцедуры - -// . -// Параметры: -// ОформленияСтрок - ? - -// Кнопка - ? - -// ОбъектМД - ОбъектМетаданных: РегистрНакопления - -// ИмяТаблицыБДРегистра - ? - -// ТипВыхода - Строка - Служебный параметр для перехода после вызова метода -Функция ТабличноеПолеРегистраОтобразитьОстаткиЛкс(Знач ОформленияСтрок, Знач ОбъектМД, Знач Кнопка, Знач ИмяТаблицыБДРегистра = Неопределено) Экспорт - Если Не Кнопка.Доступность Или Не Кнопка.Пометка Тогда - Возврат Неопределено; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ОбъектМД = Метаданные.РегистрыНакопления.ОстаткиДнейДополнительныхОтпусков; - #КонецЕсли - ИменаИзмерений = Новый Массив; - ТаблицаКлючей = Новый ТаблицаЗначений; - Для Каждого ПолеТаблицы Из ПоляТаблицыБДЛкс(ИмяТаблицыБДРегистра + ".Остатки") Цикл - Если СтрКончаетсяНаЛкс(ПолеТаблицы.Имя, "Остаток") Тогда // Грязно - Продолжить; - КонецЕсли; - ИменаИзмерений.Добавить(ПолеТаблицы.Имя); - ТаблицаКлючей.Колонки.Добавить(ПолеТаблицы.Имя, ПолеТаблицы.ТипЗначения); - КонецЦикла; - СтрокаИменИзмерений = СтрСоединитьЛкс(ИменаИзмерений, ","); - Запрос = Новый Запрос("ВЫБРАТЬ Т.* ИЗ " + ИмяТаблицыБДРегистра + ".Остатки(, (" + СтрокаИменИзмерений + ") В (&ТЗ)) КАК Т"); - Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл - ЗаполнитьЗначенияСвойств(ТаблицаКлючей.Добавить(), ОформлениеСтроки.ДанныеСтроки); - КонецЦикла; - Запрос.УстановитьПараметр("ТЗ", ТаблицаКлючей); - РезультатЗапроса = Запрос.Выполнить().Выгрузить(); - КлючСтроки = Новый Структура(СтрокаИменИзмерений); - Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл - ЗаполнитьЗначенияСвойств(КлючСтроки, ОформлениеСтроки.ДанныеСтроки); - СтрокаРезультата = РезультатЗапроса.НайтиСтроки(КлючСтроки); - Если СтрокаРезультата.Количество() > 0 Тогда - СтрокаРезультата = СтрокаРезультата[0]; - Для Каждого Ресурс Из ОбъектМД.Ресурсы Цикл - ИмяРесурса = Ресурс.Имя; - ОформлениеСтроки.Ячейки[ИмяРесурса + "Остаток"].Значение = СтрокаРезультата[ИмяРесурса + "Остаток"]; - КонецЦикла; - КонецЕсли; - КонецЦикла; -КонецФункции - -Функция ДанныеПоискаСтрокиТаблицыЛкс(Знач ТабличноеПоле, Знач СтрокаТаблицы, КолонкиПоиска = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - ДанныеПоиска = Новый Массив; - Если КолонкиПоиска = Неопределено Тогда - КолонкиПоиска = Новый Структура; - Для Каждого Колонка Из ТабличноеПоле.Колонки Цикл - Если Не ЗначениеЗаполнено(Колонка.Данные) Тогда - Продолжить; - КонецЕсли; - ЗначениеЯчейки = СтрокаТаблицы[Колонка.Данные]; - Если ТипЗнч(ЗначениеЯчейки) <> Тип("Строка") Тогда - Продолжить; - КонецЕсли; - ДанныеПоиска.Добавить(ЗначениеЯчейки); - КолонкиПоиска.Вставить(Колонка.Данные); - КонецЦикла; - Иначе - Для Каждого КлючИЗначение Из КолонкиПоиска Цикл - ДанныеПоиска.Добавить(СтрокаТаблицы[КлючИЗначение.Ключ]); - КонецЦикла; - КонецЕсли; - ДанныеПоиска = СтрСоединитьЛкс(ДанныеПоиска, "#"); - Возврат ДанныеПоиска; - -КонецФункции - -Функция ТабличноеПолеЗначениеТекущейЯчейкиЛкс(Знач Элемент) Экспорт - - // Медленный способ - //Если ЭтоВыводВыделеннойСтроки Тогда - // ЯчейкиТекущейСтроки = Ячейки; - //Иначе - // ЯчейкиТекущейСтроки = Элемент.ОформлениеСтроки(Элемент.ТекущаяСтрока).Ячейки; - //КонецЕсли; - //ТекущееЗначение = ЯчейкиТекущейСтроки[Элемент.ТекущаяКолонка.Имя].Значение; - // - ПутьКДанным = ПутьКДаннымКолонкиТабличногоПоляЛкс(Элемент); - Если ЗначениеЗаполнено(ПутьКДанным) И Элемент.ТекущиеДанные <> Неопределено Тогда - ТекущееЗначение = Элемент.ТекущиеДанные[ПутьКДанным]; - КонецЕсли; - Возврат ТекущееЗначение; - -КонецФункции - -Функция ТабличноеПолеПриАктивацииКолонкиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле) Экспорт - - Если ТабличноеПоле.ТекущаяКолонка = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - //Возврат Ложь; // Временно - ВсеСтрокиОбновлены = Ложь; - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - КнопкаРежимаОтображения = ДопСвойства.КнопкаРежимаОтображения; - Если КнопкаРежимаОтображения <> Неопределено Тогда - СостоянияКнопки = СостоянияКнопкиОтображатьПустыеИИдентификаторыЛкс(); - Если КнопкаРежимаОтображения.Текст <> СостоянияКнопки[0] Тогда - СтароеТекущееЗначение = ТабличноеПолеЗначениеТекущейЯчейкиЛкс(ТабличноеПоле); - Если Ложь - Или ТипЗнч(ТабличноеПоле.ТекущиеДанные) = Тип("ТекущиеДанныеСписка") - Тогда - // У динамического списка почему то обновление всех строк вызывает платформа. Так что нет смысла его звать второй раз. - // Также такое происходит в форме таблицы значений, но почему то не происходит в результате консоли запросов - ВсеСтрокиОбновлены = Истина; - ИначеЕсли Ложь - Или СтароеТекущееЗначение <> ДопСвойства.ЗначениеТекущейЯчейки - Или ТипЗнч(СтароеТекущееЗначение) <> ТипЗнч(ДопСвойства.ЗначениеТекущейЯчейки) - Тогда - ТабличноеПоле.ОбновитьСтроки(); // Для окраски текущего значения - ВсеСтрокиОбновлены = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат ВсеСтрокиОбновлены; - -КонецФункции - -Процедура ПолеТабличногоДокументаОформитьТекущиеСтрокиЛкс(ЭтаФорма, ПолеТД) Экспорт - #Если Сервер И Не Сервер Тогда - ПолеТД = Новый ТабличныйДокумент; - #КонецЕсли - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ПолеТД); - Если Ложь - Или ДопСвойства = Неопределено - Или ТипЗнч(ПолеТД.ТекущаяОбласть) = Тип("РисунокТабличногоДокумента") - Тогда - Возврат; - КонецЕсли; - ТекВерх = ПолеТД.ТекущаяОбласть.Верх; - ТекНиз = Мин(ПолеТД.ТекущаяОбласть.Низ, ПолеТД.ВысотаТаблицы); - Если Ложь - Или ТекНиз < ТекВерх - Или ПолеТД.ТекущаяОбласть.Низ > ПолеТД.ВысотаТаблицы - Или ПолеТД.ТекущаяОбласть.Лево > ПолеТД.ШиринаТаблицы - Тогда - Возврат; - КонецЕсли; - Если ДопСвойства.ВременноОформленныеСтроки = Неопределено Тогда - ДопСвойства.ВременноОформленныеСтроки = Новый Структура; - Иначе - //2. Если выделенные строки не менялись - делаем ничего - Если Истина - И ДопСвойства.ВременноОформленныеСтроки.Количество() > 0 - И ТекВерх = ДопСвойства.ВременноОформленныеСтроки.Верх - И ТекНиз = ДопСвойства.ВременноОформленныеСтроки.Низ - Тогда - Возврат; - КонецЕсли; - ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(ЭтаФорма, ПолеТД); - КонецЕсли; - - ОбластьТекСтроки = ПолеТД.Область(ТекНиз,, ТекВерх); - // 3. При выделении всего документа, дальнейшие действия не требуются. - // Более того, если не сделать эту проверку, то дальше упадём с ошибкой, при попытке получения ячейки с координатами (0,х,0,х) - ВыделенВесьТабДок = ТекВерх = 0 Или ТекНиз = 0; - Если ВыделенВесьТабДок Тогда - // обработка выделенных строк на прошлом шаге для случая, когда ВыделенВесьТабДок = Истина, инициирует событие ПриАктивизации. - // Чтобы не заходить в бесконечный цикл, очистим данные выделенных строк. - ДопСвойства.ВременноОформленныеСтроки = Неопределено; - Возврат; - КонецЕсли; - - // 4. Запомним текущие значения обведённости строк - ВременноОформленныеСтроки = ДопСвойства.ВременноОформленныеСтроки; - ВременноОформленныеСтроки.Вставить("Верх", ТекВерх); - ВременноОформленныеСтроки.Вставить("Низ", ТекНиз); - ВременноОформленныеСтроки.Вставить("ГраницаСверху", ОбластьТекСтроки.ГраницаСверху); - ВременноОформленныеСтроки.Вставить("ГраницаСнизу", ОбластьТекСтроки.ГраницаСнизу); - ВременноОформленныеСтроки.Вставить("ЦветРамки", ОбластьТекСтроки.ЦветРамки); - - // У разных ячеек строки могут быть разные настройки Границ (настройки обведения) и чтобы вернуть их назад, их надо запомнить. - // Свойство ГраницаСверху (и все остальные границы) для области будет иметь значение неопределено, - // если для разных ячеек области у этой границы будут отличаться толщина или тип границы - // ЦветРамки при этом, может отличаться, и на Границы это никак не повлияет, т.к. ЦветРамки является самостоятельным свойством области, как и сама Граница. - - ЕстьТекст = Ложь; - ЕстьОформление = Ложь; - УникальныеГраницыВерх = Новый Массив; - ВременноОформленныеСтроки.Вставить("УникальныеГраницыВерх", УникальныеГраницыВерх); - УникальныеГраницыНиз = Новый Массив; - ВременноОформленныеСтроки.Вставить("УникальныеГраницыНиз", УникальныеГраницыНиз); - Для НомерКолонки = 1 По ПолеТД.ШиринаТаблицы Цикл - ЯчейкаВерх = ПолеТД.Область(ТекВерх, НомерКолонки, ТекВерх, НомерКолонки); - Если ЗначениеЗаполнено(ЯчейкаВерх.Текст) Тогда - ЕстьТекст = Истина; - КонецЕсли; - Если Ложь - Или ЯчейкаВерх.ЦветРамки.Вид <> ВидЦвета.АвтоЦвет - Или ЯчейкаВерх.ГраницаСверху.ТипЛинии <> ТипЛинииЯчейкиТабличногоДокумента.НетЛинии - Тогда - ЕстьОформление = Истина; - КонецЕсли; - НастройкиЯчейки = Новый Структура("НомерКолонки, ГраницаСверху, ЦветРамки"); - НастройкиЯчейки.НомерКолонки = НомерКолонки; - НастройкиЯчейки.ГраницаСверху = ЯчейкаВерх.ГраницаСверху; - НастройкиЯчейки.ЦветРамки = ЯчейкаВерх.ЦветРамки; - УникальныеГраницыВерх.Добавить(НастройкиЯчейки); - ЯчейкаНиз = ПолеТД.Область(ТекНиз, НомерКолонки, ТекНиз, НомерКолонки); - Если ЗначениеЗаполнено(ЯчейкаНиз.Текст) Тогда - ЕстьТекст = Истина; - КонецЕсли; - Если Ложь - Или ЯчейкаНиз.ЦветРамки.Вид <> ВидЦвета.АвтоЦвет - Или ЯчейкаНиз.ГраницаСнизу.ТипЛинии <> ТипЛинииЯчейкиТабличногоДокумента.НетЛинии - Тогда - ЕстьОформление = Истина; - КонецЕсли; - НастройкиЯчейки = Новый Структура("НомерКолонки, ГраницаСнизу, ЦветРамки"); - НастройкиЯчейки.НомерКолонки = НомерКолонки; - НастройкиЯчейки.ГраницаСнизу = ЯчейкаНиз.ГраницаСнизу; - НастройкиЯчейки.ЦветРамки = ЯчейкаНиз.ЦветРамки; - УникальныеГраницыНиз.Добавить(НастройкиЯчейки); - КонецЦикла; - Если ЕстьОформление Тогда - ТолщинаЛинии = 2; // максимум 3 - ограничение платформы - ИначеЕсли ЕстьТекст Тогда - ТолщинаЛинии = 1; - Иначе - ВременноОформленныеСтроки.Очистить(); - Возврат; - КонецЕсли; - Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, ТолщинаЛинии); - ЦветРамки = Новый Цвет(250, 204, 31); // Из управляемого приложения - ВременныеСвойства = Новый Структура("Линия, ЦветРамки", Линия, ЦветРамки); - ВременноОформленныеСтроки.Вставить("ВременныеСвойства", ВременныеСвойства); - СтрокаНиз = ПолеТД.Область(ТекВерх, 1, ТекВерх, ПолеТД.ШиринаТаблицы); - СтрокаНиз.ГраницаСверху = Линия; - СтрокаНиз.ЦветРамки = ЦветРамки; - СтрокаВерх = ПолеТД.Область(ТекНиз, 1, ТекНиз, ПолеТД.ШиринаТаблицы); - СтрокаВерх.ГраницаСнизу = Линия; - СтрокаВерх.ЦветРамки = ЦветРамки; - Если Истина - И ПолеТД.ТекущаяОбласть.Низ - ПолеТД.ТекущаяОбласть.Верх > 0 - И Найти(ПолеТД.ТекущаяОбласть.Имя, "R") > 0 - И Найти(ПолеТД.ТекущаяОбласть.Имя, "C") = 0 - Тогда - // Это диапазон строк - // Антибаг платформы 8.3.21 https://www.hostedredmine.com/issues/949285 - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("ТекущаяОбласть", ПолеТД.ТекущаяОбласть.Имя); - ПараметрыОбработчика.Вставить("ПолеТД", ПолеТД); - #Если Сервер И Не Сервер Тогда - ВосстановитьТекущуюОбластьПоляТабличногоДокументаЛкс(); - #КонецЕсли - ПодключитьОбработчикОжиданияСПараметрамиЛкс("ВосстановитьТекущуюОбластьПоляТабличногоДокументаЛкс", ПараметрыОбработчика,,, Ложь); - КонецЕсли; -КонецПроцедуры - -Процедура ВосстановитьТекущуюОбластьПоляТабличногоДокументаЛкс(Знач ПараметрыОбработчика) Экспорт - - ПолеТД = ПараметрыОбработчика.ПолеТД; - #Если Сервер И Не Сервер Тогда - ПолеТД = Новый ТабличныйДокумент; - #КонецЕсли - СтараяОбласть = ПолеТД.Область(ПараметрыОбработчика.ТекущаяОбласть); - Если Истина - И СтараяОбласть.Верх = ПолеТД.ТекущаяОбласть.Верх - И ПолеТД.ТекущаяОбласть.Низ - ПолеТД.ТекущаяОбласть.Верх = 0 - Тогда - СтарыйОбработчик = ПолеТД.ПолучитьДействие("ПриАктивизацииОбласти"); - ПолеТД.УстановитьДействие("ПриАктивизацииОбласти", Неопределено); // Иначе будет циклическое переключение https://www.hostedredmine.com/issues/956183 - ПолеТД.ТекущаяОбласть = СтараяОбласть; - ПолеТД.УстановитьДействие("ПриАктивизацииОбласти", СтарыйОбработчик); - КонецЕсли; - -КонецПроцедуры - -Процедура ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(Знач ЭтаФорма, Знач ПолеТД) Экспорт - - #Если Сервер И Не Сервер Тогда - ПолеТД = Новый ТабличныйДокумент; - #КонецЕсли - ДопСвойстваЭлементаФормы = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ПолеТД); - Если ДопСвойстваЭлементаФормы = Неопределено Тогда - Возврат; - КонецЕсли; - ВременноОформленныеСтроки = ДопСвойстваЭлементаФормы.ВременноОформленныеСтроки; - Если ВременноОформленныеСтроки = Неопределено Тогда - Возврат; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ВременноОформленныеСтроки = Новый Структура; - #КонецЕсли - Если ВременноОформленныеСтроки.Количество() = 0 Тогда - Возврат; - КонецЕсли; - ВременныеСвойства = ВременноОформленныеСтроки.ВременныеСвойства; - Для Каждого НастройкиЯчейки Из ВременноОформленныеСтроки.УникальныеГраницыВерх Цикл - ТекЯчейкаВерх = ПолеТД.Область(ВременноОформленныеСтроки.Верх, НастройкиЯчейки.НомерКолонки, ВременноОформленныеСтроки.Верх, НастройкиЯчейки.НомерКолонки); - Если ТекЯчейкаВерх.ГраницаСверху = ВременныеСвойства.Линия Тогда - ТекЯчейкаВерх.ГраницаСверху = НастройкиЯчейки.ГраницаСверху; - КонецЕсли; - Если ТекЯчейкаВерх.ЦветРамки = ВременныеСвойства.ЦветРамки Тогда - ТекЯчейкаВерх.ЦветРамки = НастройкиЯчейки.ЦветРамки; - КонецЕсли; - КонецЦикла; - Для Каждого НастройкиЯчейки Из ВременноОформленныеСтроки.УникальныеГраницыНиз Цикл - ТекЯчейкаНиз = ПолеТД.Область(ВременноОформленныеСтроки.Низ, НастройкиЯчейки.НомерКолонки, ВременноОформленныеСтроки.Низ, НастройкиЯчейки.НомерКолонки); - Если ТекЯчейкаНиз.ГраницаСнизу = ВременныеСвойства.Линия Тогда - ТекЯчейкаНиз.ГраницаСнизу = НастройкиЯчейки.ГраницаСнизу; - КонецЕсли; - Если ТекЯчейкаНиз.ЦветРамки = ВременныеСвойства.ЦветРамки Тогда - ТекЯчейкаНиз.ЦветРамки = НастройкиЯчейки.ЦветРамки; - КонецЕсли; - КонецЦикла; - ВременноОформленныеСтроки.Очистить(); - -КонецПроцедуры - -Функция ДопСвойстваЭлементаФормыЛкс(Знач ЭтаФорма, Знач ЭлементФормы) Экспорт - СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - Если СлужебныеДанныеФормы = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - СлужебныеДанныеФормы = Новый Структура; - #КонецЕсли - СвойстваЭлементов = Неопределено; - Если Не СлужебныеДанныеФормы.Свойство("СвойстваЭлементов", СвойстваЭлементов) Тогда - СвойстваЭлементов = Новый Структура; - СлужебныеДанныеФормы.Вставить("СвойстваЭлементов", СвойстваЭлементов); - КонецЕсли; - СвойстваЭлемента = Неопределено; - Если Не СвойстваЭлементов.Свойство(ЭлементФормы.Имя, СвойстваЭлемента) Тогда - СвойстваЭлемента = Новый Структура("КнопкаРежимаОтображения, ВременноОформленныеСтроки, ЗначениеТекущейЯчейки, ЗапретРазметкиВхождений, МенеджерПоиска, Отбор, НеинтерактивноеИзменение, - |ЗапретОтображения, КнопкаОтображенияПодвала, ЗапретПодвала, КнопкаОформленияТекущихСтрок, ЗапросИтоговПоТаблицеКлючей"); - СвойстваЭлементов.Вставить(ЭлементФормы.Имя, СвойстваЭлемента); - СвойстваЭлемента.Отбор = ОтборТабличногоПоляЛкс(ЭлементФормы); - КонецЕсли; - Возврат СвойстваЭлемента; -КонецФункции - -// Основным элементом страницы считается одноименный с ней элемент формы. -// -Функция Форма_ОбновлениеОтображенияЛкс(ЭтаФорма) Экспорт - - Если ТипЗнч(ЭтаФорма) = Тип("УправляемаяФорма") Тогда - ЭлементыФормы = ЭтаФорма.Элементы; - Иначе - ЭлементыФормы = ЭтаФорма.ЭлементыФормы; - //Если ЭтаФорма.ВводДоступен() Тогда - // СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - // Если СлужебныеДанныеФормы.Свойство("ОбновитьПриАктивации") Тогда - // СлужебныеДанныеФормы.Удалить("ОбновитьПриАктивации"); - // //ЭтаФорма.Обновить(); - // КонецЕсли; - //КонецЕсли; - КонецЕсли; - Для Каждого ЭлементФормы Из ЭлементыФормы Цикл - Если Истина - #Если Клиент Тогда - И ТипЗнч(ЭлементФормы) <> Тип("Панель") - #КонецЕсли - И Не (Истина - И ТипЗнч(ЭлементФормы) = Тип("ГруппаФормы") - И ЭлементФормы.Вид = ВидГруппыФормы.Страницы) - Тогда - Продолжить; - КонецЕсли; - ОбновитьЗаголовкиСтраницПанелиЛкс(ЭтаФорма, ЭлементыФормы, ЭлементФормы); - КонецЦикла; - Возврат Истина; - -КонецФункции - -Функция Форма_ВосстановитьЗаголовокЛкс(ЭтаФорма) Экспорт - - СлужебныеДанные = СлужебныеДанныеФормыЛкс(ЭтаФорма); - ЭтаФорма.Заголовок = СлужебныеДанные.ОригинальныйЗаголовок; - -КонецФункции - -Процедура ФормаОбъекта_ОбновитьЗаголовокЛкс(ЭтаФорма, ПредставлениеОбъекта = "") Экспорт - - СлужебныеДанные = СлужебныеДанныеФормыЛкс(ЭтаФорма); - НовыйЗаголовок = СлужебныеДанные.ОригинальныйЗаголовок; - Если Ложь - Или Не ЗначениеЗаполнено(ПредставлениеОбъекта) - Или ПредставлениеОбъекта = НовыйЗаголовок - Тогда - Если МетодРеализованЛкс(ЭтаФорма, "ПредставлениеОбъектаДанных") Тогда - ПредставлениеОбъекта = ЭтаФорма.ПредставлениеОбъектаДанных(); - ИначеЕсли ЭтаФорма.АвтоЗаголовок И ЭтаФорма.Заголовок <> НовыйЗаголовок Тогда - ПредставлениеОбъекта = ЭтаФорма.Заголовок; - ИначеЕсли Не ЭтаФорма.МодальныйРежим Тогда - ПредставлениеОбъекта = ТекущееВремяЛкс(); - КонецЕсли; - КонецЕсли; - Если Истина - И ЗначениеЗаполнено(ПредставлениеОбъекта) - И Не ЭтаФорма.МодальныйРежим - И СтрДлина(НовыйЗаголовок) > 6 - Тогда - Фрагменты = СтрРазделитьЛкс(НовыйЗаголовок, " "); - НовыеФрагменты = Новый Массив; - Для Каждого Фрагмент Из Фрагменты Цикл - НовыеФрагменты.Добавить(ВРег(Лев(Фрагмент, 1))); - Если НовыеФрагменты.Количество() = 2 Тогда - Прервать; - КонецЕсли; - КонецЦикла; - НовыйЗаголовок = СтрСоединитьЛкс(НовыеФрагменты, "") + "(ИР)"; - КонецЕсли; - Если ЭтаФорма.КлючУникальности = "Связанный" Тогда - НовыйЗаголовок = НовыйЗаголовок + " (связанный)"; - КонецЕсли; - Если ЗначениеЗаполнено(ПредставлениеОбъекта) Тогда - НовыйЗаголовок = НовыйЗаголовок + ": " + ПредставлениеОбъекта; - КонецЕсли; - ДописатьРежимВыбораВЗаголовокФормыЛкс(ЭтаФорма); - ЭтаФорма.Заголовок = НовыйЗаголовок; - -КонецПроцедуры - -Процедура ДописатьРежимВыбораВЗаголовокФормыЛкс(ЭтаФорма) Экспорт - - Если ЭтаФорма.РежимВыбора Тогда - ЭтаФорма.Заголовок = ЭтаФорма.Заголовок + " (выбор)"; - КонецЕсли; - -КонецПроцедуры - -// Не используется -Процедура ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Знач Элемент, Знач ОформленияСтрок) Экспорт - - СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - Если СлужебныеДанныеФормы.Свойство("ОбработчикиПриВыводеСтроки") Тогда - ОбработчикиПриВыводеСтроки = СлужебныеДанныеФормы.ОбработчикиПриВыводеСтроки; - ОбработчикПриВыводеСтроки = ОбработчикиПриВыводеСтроки[Элемент.Имя]; - КонецЕсли; - Если Истина - И ОбработчикПриВыводеСтроки <> Неопределено - И Не МетодРеализованЛкс(ЭтаФорма, ОбработчикПриВыводеСтроки) // Сообщение о его отсутствии выдаем в общем обработчике Форма_ПриОткрытии - Тогда - ОбработчикПриВыводеСтроки = Неопределено; - КонецЕсли; - Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл - ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; - Если ДанныеСтроки = Неопределено Тогда - Продолжить; - КонецЕсли; - Если ОбработчикПриВыводеСтроки = Неопределено Тогда - ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); - Иначе - Выполнить("ЭтаФорма." + ОбработчикПриВыводеСтроки + "(Элемент, ОформлениеСтроки, ДанныеСтроки);"); - КонецЕсли; - КонецЦикла; - //Сообщить("" + ТекущаяДата() + " обновлено табличное поле """ + Элемент.Имя + """"); - -КонецПроцедуры - -Функция СмещенныйЦветЛкс(Знач ТекущийЦветФона, СмещениеКрасный = -20, СмещениеЗеленый = 0, СмещениеСиний = -20) Экспорт - - Если ТекущийЦветФона.Вид = ВидЦвета.АвтоЦвет Тогда - ТекущийЦветФона = ЦветаСтиля.ЦветФонаПоля; - КонецЕсли; - АбсолютныйЦвет = ирКэш.АбсолютныйЦветЛкс(ЗначениеВСтрокуВнутр(ТекущийЦветФона)); - #Если Сервер И Не Сервер Тогда - АбсолютныйЦвет = Новый Цвет; - #КонецЕсли - СмещенныйЦвет = Новый Цвет(Макс(0, АбсолютныйЦвет.Красный + СмещениеКрасный), Макс(0, АбсолютныйЦвет.Зеленый + СмещениеЗеленый), Макс(АбсолютныйЦвет.Синий + СмещениеСиний)); - Возврат СмещенныйЦвет; - -КонецФункции - -// Процедура - Табличное поле при активизации строки лкс -// -// Параметры: -// ЭтаФорма - - -// ТабличноеПоле - - -// ОбновлятьПодвал - - -// ОбновлятьСтроки - Булево - имеет смысл установить Ложь, если далее в коде будет обязательно выполнено обновление всех строк табличного поля -// -Процедура ТабличноеПолеПриАктивизацииСтрокиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ОбновлятьПодвал = Истина, ОбновлятьСтроки = Истина) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если ТабличноеПоле = Неопределено Тогда - Возврат; - КонецЕсли; - ТабличноеПоле.РежимВыделенияСтроки = РежимВыделенияСтрокиТабличногоПоля.Ячейка; - ВсеСтрокиОбновлены = ТабличноеПолеПриАктивацииКолонкиЛкс(ЭтаФорма, ТабличноеПоле); - Если Не ВсеСтрокиОбновлены Тогда - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - НовыеВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, Ложь); - // ТекущаяСтрока должна всегда быть последней - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - НовыеВыделенныеСтроки.Удалить(НовыеВыделенныеСтроки.Найти(ТабличноеПоле.ТекущаяСтрока)); - НовыеВыделенныеСтроки.Добавить(ТабличноеПоле.ТекущаяСтрока); - КонецЕсли; - СтарыеВыделенныеСтроки = ДопСвойства.ВременноОформленныеСтроки; - Если СтарыеВыделенныеСтроки = Неопределено Или СтарыеВыделенныеСтроки.Количество() = 0 Тогда - СтрокиОбновленияОформления1 = НовыеВыделенныеСтроки; - Иначе - СтрокиОбновленияОформления1 = Новый Массив; - ПересечьМассивыЛкс(СтарыеВыделенныеСтроки, НовыеВыделенныеСтроки, СтрокиОбновленияОформления1); - СтрокиОбновленияОформления2 = Новый Массив; - ПересечьМассивыЛкс(НовыеВыделенныеСтроки, СтарыеВыделенныеСтроки, СтрокиОбновленияОформления2); - ДополнитьМассивЛкс(СтрокиОбновленияОформления1, СтрокиОбновленияОформления2); - СтараяТекущаяСтрока = СтарыеВыделенныеСтроки[СтарыеВыделенныеСтроки.Вграница()]; - Если СтрокиОбновленияОформления1.Найти(СтараяТекущаяСтрока) = Неопределено Тогда - СтрокиОбновленияОформления1.Добавить(СтараяТекущаяСтрока); - КонецЕсли; - КонецЕсли; - ТабличноеПоле.ОбновитьСтроки(СтрокиОбновленияОформления1); - ДопСвойства.ВременноОформленныеСтроки = НовыеВыделенныеСтроки; - КонецЕсли; - ИндексКолонки = 0; - Пока ТабличноеПоле.ТекущаяКолонка = Неопределено И ТабличноеПоле.Колонки.Количество() > ИндексКолонки Цикл - // Антибаг платформы 8.3.17 https://partners.v8.1c.ru/forum/t/1919341/m/1919341 http://www.hostedredmine.com/issues/877079 - КолонкаТП = ТабличноеПоле.Колонки[ИндексКолонки]; - Если КолонкаТП.Доступность И КолонкаТП.Видимость Тогда - ТабличноеПоле.ТекущаяКолонка = КолонкаТП; - КонецЕсли; - ИндексКолонки = ИндексКолонки + 1; - КонецЦикла; - ТабличноеПолеВключитьСтаруюЦветовуюСхемуЛкс(ТабличноеПоле); - Если ОбновлятьПодвал Тогда - ТабличноеПолеОбновитьТекстыПодваловЛкс(ЭтаФорма, ТабличноеПоле, Ложь); - КонецЕсли; - ТабличноеПолеОповеститьОбАктивацииСтрокиЛкс(ЭтаФорма, ТабличноеПоле); - -КонецПроцедуры - -Процедура ТабличноеПолеОповеститьОбАктивацииСтрокиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле) Экспорт - - ОповеститьФормыПодсистемыЛкс("ПриАктивизацииСтроки",, ТабличноеПоле, ЭтаФорма); - -КонецПроцедуры - -Процедура ТабличноеПолеВключитьСтаруюЦветовуюСхемуЛкс(Знач Элемент) - - // Переключаем цветовую схему на старый вариант (без градиентов и с подсветкой текущей колонки) https://partners.v8.1c.ru/forum/t/898034/m/898082 - Если Элемент.Колонки.Количество() > 0 И Элемент.Колонки[0].ЦветФонаШапки <> ЦветаСтиля.ЦветФонаКнопки Тогда - Элемент.Колонки[0].ЦветФонаШапки = ЦветаСтиля.ЦветФонаКнопки; - КонецЕсли; - -КонецПроцедуры - -Процедура ИнтерактивноЗаписатьВКолонкуФлажкаЛкс(Знач Элемент, Знач Колонка, Знач НовоеЗначение = Неопределено, ВосстанавитьТекущуюКолонку = Истина) Экспорт - - #Если Сервер И Не Сервер Тогда - Элемент = Новый ТабличноеПоле; - Колонка = Элемент.Колонки.Добавить(); - #КонецЕсли - Если НовоеЗначение = Неопределено Тогда - НовоеЗначение = Не Элемент.ТекущаяСтрока[Колонка.Данные]; - КонецЕсли; - ирОбщий.ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(Элемент, Колонка, НовоеЗначение,, ВосстанавитьТекущуюКолонку,,, Истина); - -КонецПроцедуры - -Процедура ТабличноеПоле_ИнтерактивноУстановитьПометкуТекущейСтрокиЛкс(ТабличноеПоле, КолонкаПометки, НоваяПометка = Неопределено) Экспорт - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; - Если ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - Если КолонкаПометки = Неопределено Тогда - КолонкаПометки = КолонкаПометкиТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - Если КолонкаПометки = Неопределено Тогда - Возврат; - КонецЕсли; - ИнтерактивноЗаписатьВКолонкуФлажкаЛкс(ТабличноеПоле, КолонкаПометки, НоваяПометка); -КонецПроцедуры - -Функция КолонкаПометкиТабличногоПоляЛкс(Знач ТабличноеПоле) - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - КолонкаТекущая = ТабличноеПоле.ТекущаяКолонка; - Если КолонкаТекущая = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Если Истина - //И ТабличноеПоле.ТекущаяКолонка <> Неопределено - //И ТабличноеПоле.Значение.Количество() > 0 - //И ТипЗнч(ТабличноеПоле.Значение[0][ТабличноеПоле.ТекущаяКолонка.Данные]) = Тип("Булево") - И КолонкаТекущая.ЭлементУправления <> Неопределено - И ТипЗнч(КолонкаТекущая.ЭлементУправления.Значение) = Тип("Булево") - Тогда - Колонка = ТабличноеПоле.ТекущаяКолонка; - КонецЕсли; - Если Колонка = Неопределено Тогда - Колонка = ТабличноеПоле.Колонки.Найти("Пометка"); - КонецЕсли; - Если Колонка = Неопределено Тогда - Колонка = ТабличноеПоле.Колонки.Найти("Использование"); - КонецЕсли; - Если Колонка = Неопределено Тогда - КолонкаПервая = ТабличноеПоле.Колонки[0]; - Если КолонкаПервая.Имя = "НомерСтроки" И ТабличноеПоле.Колонки.Количество() > 1 Тогда - КолонкаПервая = ТабличноеПоле.Колонки[1]; - КонецЕсли; - Если Истина - И КолонкаПервая.ЭлементУправления <> Неопределено - И ТипЗнч(КолонкаПервая.ЭлементУправления.Значение) = Тип("Булево") - Тогда - Колонка = КолонкаПервая; - КонецЕсли; - КонецЕсли; - Возврат Колонка; - -КонецФункции - -Процедура УстановитьФокусВводаФормеЛкс(ФормаВладелец = Неопределено, ИспользоватьЭмуляциюНажатияКлавиш = Ложь) Экспорт - - // Для обхода ошибок платформы 8.3. Форма при закрытии может вернуть фокус ввода главному окну вместо отображаемому на переднем плане дочернему окну. - Если ФормаВладелец <> Неопределено Тогда - ФормаВладелец.Открыть(); - КонецЕсли; - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Если Истина - И мПлатформа.ИспользоватьЭмуляциюНажатияКлавиш() - И мПлатформа.МодальныеГруппы.Количество() = 0 // https://www.hostedredmine.com/issues/938929 - Тогда - ВосстановитьФокусВводаОткрытиемПустышкиЛкс(); // https://www.hostedredmine.com/issues/949043 - // Так отображается индикатор изменения NumLock, если он был включен - ОтправитьНажатияКлавишЛкс("%"); - ОтправитьНажатияКлавишЛкс("%"); - Иначе - // Так может переставать мигать каретка https://www.hostedredmine.com/issues/936823 - #Если Сервер И Не Сервер Тогда - ВосстановитьФокусВводаГлЛкс(); - #КонецЕсли - ПодключитьГлобальныйОбработчикОжиданияЛкс("ВосстановитьФокусВводаГлЛкс", 0.1, Истина); - КонецЕсли; - -КонецПроцедуры - -Процедура ВосстановитьФокусВводаОткрытиемПустышкиЛкс() Экспорт - - ФормаПустышка = ирКэш.ФормаПустышкаЛкс(); - Попытка - ФормаПустышка.Открыть(); - ФормаПустышка.Закрыть(); - Исключение - // Главное окно уже закрыто https://www.hostedredmine.com/issues/956380 - КонецПопытки; - -КонецПроцедуры - -Процедура ТабличноеПолеОтбораКомпоновкиПеретаскиваниеЛкс(ЭтаФорма, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка) Экспорт - - Если Истина - И ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") - И ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение - Тогда - ТипЭлемента = ТипЗнч(ПараметрыПеретаскивания.Значение[0]); - Если Ложь - Или ТипЭлемента = Тип("ДоступноеПолеКомпоновкиДанных") - Или ТипЭлемента = Тип("ДоступноеПолеОтбораКомпоновкиДанных") - Тогда - Если Истина - И Строка <> Неопределено - И Колонка <> Неопределено - И Найти(Колонка.Данные, "ПравоеЗначение") = 1 - Тогда - СтандартнаяОбработка = Ложь; - Строка.ПравоеЗначение = ПараметрыПеретаскивания.Значение[0].Поле; - //ИначеЕсли Найти(Колонка.Данные, "ЛевоеЗначение") = 1 Тогда // Удобнее штатным способом добавлять новый элемент сразу в нужную позицию - // СтандартнаяОбработка = Ложь; - // Строка.ЛевоеЗначение = ПараметрыПеретаскивания.Значение[0].Поле; - Иначе - //Если ТипЗнч(Строка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - // Родитель = РодительСтрокиДереваЛкс(Строка, Элемент.Значение); - //ИначеЕсли ТипЗнч(Строка) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда - // Родитель = Строка; - //Иначе - // Родитель = Элемент.Значение; - //КонецЕсли; - //Для Каждого ДоступноеПоле Из ПараметрыПеретаскивания.Значение Цикл - // #Если Сервер И Не Сервер Тогда - // ДоступноеПоле = Новый НастройкиКомпоновкиДанных; - // ДоступноеПоле = ДоступноеПоле.Выбор.ДоступныеПоляВыбора.НайтиПоле(); - // #КонецЕсли - // НовыйЭлемент = Родитель.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - // НовыйЭлемент.Использование = Истина; - // НовыйЭлемент.ЛевоеЗначение = ДоступноеПоле.Поле; - // Элемент.ТекущаяСтрока = НовыйЭлемент; - //КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ТабличноеПолеВставитьКолонкуНомерСтрокиЛкс(Знач ТабличноеПоле) Экспорт - - ИмяКолонкиНомерСтроки = ирКэш.ИмяКолонкиНомерСтрокиЛкс(); - КолонкаТП = ТабличноеПоле.Колонки.Найти(ИмяКолонкиНомерСтроки); - Если КолонкаТП = Неопределено Тогда - КолонкаТП = ТабличноеПоле.Колонки.Вставить(0); - КолонкаТП.Имя = ИмяКолонкиНомерСтроки; - КолонкаТП.ТекстШапки = "№"; - КолонкаТП.ПодсказкаВШапке = "Номер элемента в пределах родителя (служебная)"; - КолонкаТП.ТолькоПросмотр = Истина; - КолонкаТП.Ширина = МинимальнаяШиринаКолонкиЛкс(); - Иначе - ТабличноеПоле.Колонки.Сдвинуть(КолонкаТП, - ТабличноеПоле.Колонки.Индекс(КолонкаТП)); - КонецЕсли; - -КонецПроцедуры - -Процедура _РасширенныйВыборПравогоЗначенияОтбораКомпоновкиЛкс(ТабличноеПолеОтбора) Экспорт - - ТекущаяСтрока = ТабличноеПолеОтбора.ТекущаяСтрока; - Если Ложь - Или ТекущаяСтрока = Неопределено - Или ТипЗнч(ТекущаяСтрока) = Тип("ОтборКомпоновкиДанных") - Или ТипЗнч(ТекущаяСтрока) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") - Тогда - Возврат; - КонецЕсли; - ЗначениеОтбора = ТекущаяСтрока.ПравоеЗначение; - КолонкаТП = ТабличноеПолеОтбора.Колонки.ПравоеЗначениеДляКраткогоОтображенияЭлемента; - ТабличноеПолеОтбора.ТекущаяКолонка = КолонкаТП; - Если ТипЗнч(ЗначениеОтбора) <> Тип("СписокЗначений") Тогда - Если ЛиСсылкаНаОбъектБДЛкс(ЗначениеОтбора, Ложь) Тогда - ТабличноеПолеОтбора.ИзменитьСтроку(); - ирОбщий.ОткрытьФормуСпискаЛкс(ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(ЗначениеОтбора)),,, КолонкаТП.ЭлементУправления, Истина,, ЗначениеОтбора); - КонецЕсли; - Иначе - Результат = ирОбщий.ОткрытьЗначениеЛкс(ЗначениеОтбора, Истина); - Если Результат Тогда - ТекущаяСтрока.ПравоеЗначение = ЗначениеОтбора; - ТекущаяСтрока.Использование = Истина; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ПоказатьДоступноеПолеЭлементаНастроекКомпоновкиЛкс(ЭтаФорма, Знач ТабличноеПолеДоступныхПолей, Знач ТабличноеПолеНастроек) Экспорт - - ТекущаяСтрока = ТабличноеПолеНастроек.ТекущаяСтрока; - Если ТипЗнч(ТекущаяСтрока) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ИскомоеПоле = ТекущаяСтрока.ЛевоеЗначение; - Если ТабличноеПолеНастроек.ТекущаяКолонка = ТабличноеПолеНастроек.Колонки.ПравоеЗначениеДляКраткогоОтображенияЭлемента Тогда - ИскомоеПоле = ТекущаяСтрока.ПравоеЗначение; - КонецЕсли; - ИначеЕсли Ложь - Или ТипЗнч(ТекущаяСтрока) = Тип("ЭлементПорядкаКомпоновкиДанных") - Или ТипЗнч(ТекущаяСтрока) = Тип("ВыбранноеПолеКомпоновкиДанных") - Или ТипЗнч(ТекущаяСтрока) = Тип("ПолеГруппировкиКомпоновкиДанных") - Тогда - ИскомоеПоле = ТекущаяСтрока.Поле; - Иначе - Возврат Неопределено; - КонецЕсли; - ДоступноеПоле = ТабличноеПолеДоступныхПолей.Значение.НайтиПоле(Новый ПолеКомпоновкиДанных(ИскомоеПоле)); - Если ДоступноеПоле <> Неопределено Тогда - ТабличноеПолеДоступныхПолей.ТекущаяСтрока = ДоступноеПоле; - ЭтаФорма.ТекущийЭлемент = ТабличноеПолеДоступныхПолей; - КонецЕсли; - Возврат ДоступноеПоле; - -КонецФункции - -Процедура КнопкаОтображатьПустыеИИдентификаторыНажатиеЛкс(Кнопка) Экспорт - - МассивСостояний = СостоянияКнопкиОтображатьПустыеИИдентификаторыЛкс(); - Если ТипЗнч(Кнопка) = Тип("КнопкаКоманднойПанели") Тогда - ТекстКнопки = Кнопка.Текст; - Иначе - ТекстКнопки = Кнопка.Заголовок; - КонецЕсли; - Если ТекстКнопки = МассивСостояний[2] Тогда - Кнопка.Пометка = Ложь; - НовыйТекстКнопки = МассивСостояний[0]; - Кнопка.Картинка = ирКэш.КартинкаПоИмениЛкс("ирПусто"); - ИначеЕсли ТекстКнопки = МассивСостояний[1] Тогда - Кнопка.Пометка = Истина; - НовыйТекстКнопки = МассивСостояний[2]; - Кнопка.Картинка = ирКэш.КартинкаПоИмениЛкс("ирИдентификатор"); - Иначе//Если ТекстКнопки = МассивСостояний[0] Тогда - Кнопка.Пометка = Истина; - НовыйТекстКнопки = МассивСостояний[1]; - Кнопка.Картинка = ирКэш.КартинкаПоИмениЛкс("ирПусто"); - КонецЕсли; - Если ТипЗнч(Кнопка) = Тип("КнопкаКоманднойПанели") Тогда - Кнопка.Текст = НовыйТекстКнопки; - Иначе - Кнопка.Заголовок = НовыйТекстКнопки; - КонецЕсли; - -КонецПроцедуры - -Процедура ПрименитьИзмененияИЗакрытьФормуЛкс(ЭтаФорма, ЗначениеВыбора = Неопределено) Экспорт - - ЭтаФорма.Модифицированность = Ложь; - Если Ложь - Или ЭтаФорма.ВладелецФормы <> Неопределено - Или Не ЭтаФорма.Открыта() - Тогда - ЭтаФорма.ОповеститьОВыборе(ЗначениеВыбора); - КонецЕсли; - Если ЭтаФорма.Открыта() Тогда - ЭтаФорма.Закрыть(ЗначениеВыбора); - КонецЕсли; - //Если ЭтаФорма.Открыта() Тогда - // ЭтаФорма.Закрыть(ЗначениеВыбора); - //Иначе//Если ЭтаФорма.МодальныйРежим Тогда - // ЭтаФорма.ОповеститьОВыборе(ЗначениеВыбора); - //КонецЕсли; - -КонецПроцедуры - -// -// Параметры: -// ЯзыкПрограммы - Число - 0 - встроенный язык, 1 - язык запросов, 2 - язык выражений СКД -Функция НайтиВозможныеСтрокиОписанияСловаВСинтаксПомощникеЛкс(Знач Слово, ЯзыкПрограммы = 0, ПоискСУчетомТипаСлова = Истина) Экспорт - - мПлатформа = ирКэш.Получить(); - мПлатформа.ИнициализацияОписанияМетодовИСвойств(); - МассивВозможныхТиповСлова = Новый Массив; - МассивВозможныхТиповСлова.Добавить("Конструктор"); - Слово = НРег(Слово); - Если Ложь - Или Не ПоискСУчетомТипаСлова - Или Прав(Слово, 1) = "(" - Тогда - Если Прав(Слово, 1) = "(" Тогда - Слово = СтрокаБезКонцаЛкс(Слово, 1); - КонецЕсли; - МассивВозможныхТиповСлова.Добавить("Метод"); - КонецЕсли; - Если Ложь - Или Не ПоискСУчетомТипаСлова - Или Прав(Слово, 1) <> "(" - Тогда - МассивВозможныхТиповСлова.Добавить("Свойство"); - МассивВозможныхТиповСлова.Добавить("Конструкция"); - МассивВозможныхТиповСлова.Добавить("Событие"); - МассивВозможныхТиповСлова.Добавить("Таблица"); - КонецЕсли; - ТаблицаСтруктурВозможныхТиповКонтекста = мПлатформа.НоваяТаблицаСтруктурТипа(); - Для Каждого ВозможныйТипСлова Из МассивВозможныхТиповСлова Цикл - Если ВозможныйТипСлова = "Конструктор" Тогда - КлючПоиска = Новый Структура("ТипКонтекста, ТипСлова, ЯзыкПрограммы, ТипЯзыка", Слово, ВозможныйТипСлова, ЯзыкПрограммы, ""); - Иначе - КлючПоиска = Новый Структура("НСлово, ТипСлова, ЯзыкПрограммы, ТипЯзыка", Слово, ВозможныйТипСлова, ЯзыкПрограммы, ""); - КонецЕсли; - НайденныеСтроки = мПлатформа.ТаблицаКонтекстов.НайтиСтроки(КлючПоиска); - Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл - ЗаполнитьЗначенияСвойств(ТаблицаСтруктурВозможныхТиповКонтекста.Добавить(), Новый Структура("СтрокаОписания", НайденнаяСтрока)); - КонецЦикла; - НайденныеСтроки = мПлатформа.ТаблицаШаблоновКонтекстов.НайтиСтроки(КлючПоиска); - Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл - ЗаполнитьЗначенияСвойств(ТаблицаСтруктурВозможныхТиповКонтекста.Добавить(), Новый Структура("СтрокаОписания", НайденнаяСтрока)); - КонецЦикла; - КонецЦикла; - КлючПоиска = Новый Структура("НСлово, ЯзыкПрограммы", Слово, ЯзыкПрограммы); - НайденныеСтроки = мПлатформа.ТаблицаОбщихТипов.НайтиСтроки(КлючПоиска); - Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл - ЗаполнитьЗначенияСвойств(ТаблицаСтруктурВозможныхТиповКонтекста.Добавить(), Новый Структура("СтрокаОписания", НайденнаяСтрока)); - КонецЦикла; - Возврат ТаблицаСтруктурВозможныхТиповКонтекста; - -КонецФункции - -// Открывает форму синтакс-помощника и загружает в нее нужную страницу, подсвечивая заданную строку. -// -// Параметры: -// ВнутреннийПутьКОписанию - Строка - внутренний путь к странице синтакс-помощника; -// СтрокаДляПодсветки - Строка - которую нужно подсветить в тексте страницы. -// -// Возвращаемое значение: -// Форма. -// -Функция ОткрытьСтраницуСинтаксПомощникаЛкс(ВнутреннийПутьКОписанию, СтрокаДляПодсветки = "", ВладелецФормы = Неопределено, КлючУникальности = Неопределено) Экспорт - - Если ирОбщий.ПроверитьПлатформаНеWindowsЛкс() Тогда - Возврат Неопределено; - КонецЕсли; - Если ВнутреннийПутьКОписанию = "" Тогда - Возврат Неопределено; - КонецЕсли; - ФормаСправка = ПолучитьФормуЛкс("Обработка.ирСинтаксПомощник.Форма", , , КлючУникальности); - ФормаСправка.ВладелецФормы = ВладелецФормы; - ФормаСправка.ОткрытьАдрес(ВнутреннийПутьКОписанию, СтрокаДляПодсветки); - ФормаСправка.ВладелецФормы = Неопределено; - Возврат ФормаСправка; - -КонецФункции - -// Параметры: -// ЭтаФорма - Форма - для возвращения фокуса ввода -Функция ОткрытьОписаниеТипаПоТипуЛкс(Знач Тип, Знач ЭтаФорма = Неопределено) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - СтруктураТипа = мПлатформа.СтруктураТипаИзКонкретногоТипа(Тип); - ИмяОбщегоТипа = СтруктураТипа.ИмяОбщегоТипа; - Результат = ОткрытьОписаниеТипаПоИмениТипаЛкс(ИмяОбщегоТипа, ЭтаФорма); - Возврат Результат; - -КонецФункции - -Функция ОткрытьОписаниеТипаПоИмениТипаЛкс(Знач ИмяОбщегоТипа, Знач ЭтаФорма = Неопределено) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - СтрокаОбщегоТипа = мПлатформа.ТаблицаОбщихТипов.Найти(НРег(ИмяОбщегоТипа), "НСлово"); - Если СтрокаОбщегоТипа = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Результат = ирОбщий.ОткрытьСтраницуСинтаксПомощникаЛкс(СтрокаОбщегоТипа.ПутьКОписанию, , ЭтаФорма); - Возврат Результат; - -КонецФункции - -// Обходит строки табличного поля и имитирует редактирование и выбор пользователем заданного значения. -// -// Параметры: -// ТабличноеПоле - ТабличноеПоле; -// ЗначениеОбработки - Произвольные - значение, которое будем записывать в ячейки; Структура(Параметры, Формула) -// ТипИсточника - Строка, *Неопределено - "ТаблицаЗначений", "ТабличнаяЧасть"; -// Колонка - КолонкаТабличногоПоля, *Неопределено - колонка в которой обходим ячейки, по умолчанию текущая; -// ТолькоВыделенныеСтроки - Булево, *Истина - обходить только выделенные строки. -// ИнтерактивнаяУстановка - Булево, *Истина - -// НаСервере - Булево, *Ложь - Вычислять формулу на сервере -// СтруктураОтбора - Структура, *Неопределено - -// -Процедура УстановитьЗначениеВКолонкеТабличногоПоляТЧИлиТЗЛкс(ЭтаФорма, ТабличноеПоле, ЗначениеОбработки, Знач ТипИсточника = Неопределено, Знач Колонка = Неопределено, Знач ТолькоВыделенныеСтроки = Истина, - Знач ИнтерактивнаяУстановка = Истина, Знач НаСервере = Ложь, Знач СтруктураОтбора = Неопределено, Знач МетаданныеВыбора = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если ТабличноеПоле.ТолькоПросмотр Тогда - Возврат; - КонецЕсли; - Если Истина - //И ИнтерактивнаяУстановка - И Колонка <> Неопределено - И Не Колонка.Видимость - Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Колонка %1 не видима. Поэтому изменение значений в ней не может быть выполнено.",, Колонка.ТекстШапки)); - Возврат; - КонецЕсли; - ДопСвойства = ирОбщий.ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - ЗначениеТабличногоПоля = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле); - Если ТипИсточника = "" Тогда - ТипИсточника = ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - СтарыеВключенныеЭлементыОтбора = Новый Массив; - ЕстьОтборСтрок = Ложь - Или ТипИсточника = "ТабличнаяЧасть" - Или ТипИсточника = "НаборЗаписей"; - ТекстВопросаУчетаОтбора = ""; - Если ЕстьОтборСтрок Тогда - ТекстВопросаУчетаОтбора = " отобранные"; - КонецЕсли; - Если ТолькоВыделенныеСтроки Тогда - Если Истина - И ТабличноеПоле.ВыделенныеСтроки.Количество() = 1 - И ТипИсточника <> "ДеревоЗначений" - Тогда - Ответ = Вопрос("Выделена только одна строка. Хотите обработать все" + ТекстВопросаУчетаОтбора + " строки?", РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Да Тогда - ТолькоВыделенныеСтроки = Ложь; - КонецЕсли; - КонецЕсли; - ИначеЕсли ЕстьОтборСтрок Тогда - Если ЛиОтборУстановленЛкс(ТабличноеПоле.ОтборСтрок) Тогда - Ответ = Вопрос("Хотите обработать" + ТекстВопросаУчетаОтбора + " (Да) или все (Нет) строки?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Для Каждого ЭлементОтбора Из ТабличноеПоле.ОтборСтрок Цикл - Если ЭлементОтбора.Использование Тогда - ЭлементОтбора.Использование = Ложь; - СтарыеВключенныеЭлементыОтбора.Добавить(ЭлементОтбора.Имя); - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЕсли; - СтараяТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; - СтараяТекущаяКолонка = ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); - СтарыеВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - //ТабличноеПолеСостояниеСтрокЛкс(ТабличноеПоле, ?); // Неизвестна ключевая колонка - Если Колонка = Неопределено Тогда - Колонка = СтараяТекущаяКолонка; - Иначе - УстановитьТекущуюКолонкуТаблицыФормыЛкс(ТабличноеПоле, Колонка); - КонецЕсли; - КлючиСтрокДляОбработки = Новый Массив; - Если ТолькоВыделенныеСтроки Тогда - Для Каждого ВыделеннаяСтрока Из ТабличноеПоле.ВыделенныеСтроки Цикл - КлючиСтрокДляОбработки.Добавить(ВыделеннаяСтрока); - КонецЦикла; - Иначе - Если ЕстьОтборСтрок Или СтруктураОтбора <> Неопределено Тогда - КлючеваяКолонка = ПеревестиСтроку("НомерСтроки"); - Построитель = ПостроительТабличногоПоляСОтборомКлиентаЛкс(ТабличноеПоле, СтруктураОтбора); - #Если Сервер И Не Сервер Тогда - Построитель = Новый ПостроительЗапроса; - #КонецЕсли - Построитель.ВыбранныеПоля.Очистить(); - Построитель.ВыбранныеПоля.Добавить(КлючеваяКолонка); - ТаблицаРезультата = Построитель.Результат.Выгрузить(); - Для Каждого СтрокаРезультата Из ТаблицаРезультата Цикл - КлючиСтрокДляОбработки.Добавить(СтрокаРезультата[КлючеваяКолонка] - 1); - КонецЦикла; - ИначеЕсли ТипИсточника = "ТаблицаЗначений" Тогда - Для Каждого СтрокаТаблицы Из ЗначениеТабличногоПоля Цикл - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - КлючСтроки = СтрокаТаблицы.ПолучитьИдентификатор(); - Иначе - КлючСтроки = СтрокаТаблицы; - КонецЕсли; - КлючиСтрокДляОбработки.Добавить(КлючСтроки); - КонецЦикла; - ИначеЕсли ТипЗнч(ЗначениеТабличногоПоля) = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда - КлючиСтрокДляОбработки = ирОбщий.ВсеВыбранныеПоляГруппировкиКомпоновкиЛкс(ЗначениеТабличногоПоля); - КонецЕсли; - КонецЕсли; - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - ЭлементУправления = Колонка.ЭлементУправления; - ИнтерактивнаяУстановка = Истина - И ИнтерактивнаяУстановка - И ДопСвойства.НеинтерактивноеИзменение <> Истина - И (Ложь - Или ЗначениеЗаполнено("" + ЭлементУправления.ПолучитьДействие("ПриИзменении")) - Или ЗначениеЗаполнено("" + ТабличноеПоле.ПолучитьДействие("ПриНачалеРедактирования"))); - ПроверятьОформлениеСтроки = ДопСвойства.НеинтерактивноеИзменение <> Истина; - ДействиеПриВыводеСтроки = ТабличноеПоле.ПолучитьДействие("ПриВыводеСтроки"); - Иначе - ЭлементУправления = Колонка; - КонецЕсли; - ПутьКДаннымКолонки = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, Колонка); - ИспользоватьИндикатор = ПроверятьОформлениеСтроки Или ИнтерактивнаяУстановка; - Индикатор = ПолучитьИндикаторПроцессаЛкс(КлючиСтрокДляОбработки.Количество(), "Групповая установка значения"); - ПоследняяОбработаннаяСтрока = Неопределено; - ОформлениеСтроки = Неопределено; - КоличествоПропущенных = 0; - Для Каждого КлючСтроки Из КлючиСтрокДляОбработки Цикл - ОбработкаПрерыванияПользователя(); - Если ИспользоватьИндикатор Тогда - ОбработатьИндикаторЛкс(Индикатор); - КонецЕсли; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - ДанныеСтроки = ТабличноеПоле.ДанныеСтроки(КлючСтроки); - ТекущаяСтрока = КлючСтроки; - Иначе - Если ТипЗнч(КлючСтроки) = Тип("Число") Тогда - ТекущаяСтрока = ЗначениеТабличногоПоля[КлючСтроки]; - Иначе - ТекущаяСтрока = КлючСтроки; - КонецЕсли; - ДанныеСтроки = ТекущаяСтрока; - Если ПроверятьОформлениеСтроки Тогда - Если ОформлениеСтроки = Неопределено Тогда - //ТабличноеПоле.ОбновитьСтроки(ДанныеСтроки); // Чтобы функция ОформлениеСтроки() гарантировано вернула актуальное оформление - ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(ДанныеСтроки); // Каждый раз это вызывать очень долго - КонецЕсли; - Если ДействиеПриВыводеСтроки <> Неопределено Тогда - ДопСвойства.ЗапретОтображения = Истина; - Выполнить("ЭтаФорма." + ДействиеПриВыводеСтроки + "(ТабличноеПоле, ОформлениеСтроки, ДанныеСтроки)"); - ДопСвойства.ЗапретОтображения = Ложь; - КонецЕсли; - Если ОформлениеСтроки.Ячейки[Колонка.Имя].ТолькоПросмотр Тогда - ОформлениеСтроки.Ячейки[Колонка.Имя].ТолькоПросмотр = Ложь; - Продолжить; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если ТипЗнч(ЗначениеОбработки) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ЗначениеОбработки.Параметры, ДанныеСтроки); - НовоеЗначение = ВычислитьВыражение(ЗначениеОбработки.Формула, ЗначениеОбработки.Параметры, НаСервере); - Иначе - НовоеЗначение = ЗначениеОбработки; - КонецЕсли; - Если ИнтерактивнаяУстановка Тогда - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - ДействиеПриАктивизацииСтроки = ТабличноеПоле.ПолучитьДействие("ПриАктивизацииСтроки"); - ДействиеПриВыводеСтроки = ТабличноеПоле.ПолучитьДействие("ПриВыводеСтроки"); - ТабличноеПоле.УстановитьДействие("ПриАктивизацииСтроки", Неопределено); - ТабличноеПоле.УстановитьДействие("ПриВыводеСтроки", Неопределено); - ТабличноеПоле.ТекущаяСтрока = ТекущаяСтрока; - Иначе - ТабличноеПоле.ТекущаяСтрока = КлючСтроки; - КонецЕсли; - РезультатОтправки = ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, НовоеЗначение,, Ложь,,, Истина, ПутьКДаннымКолонки, МетаданныеВыбора); - Если Не РезультатОтправки Тогда - КоличествоПропущенных = КоличествоПропущенных + 1; - КонецЕсли; - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - ТабличноеПоле.УстановитьДействие("ПриАктивизацииСтроки", ДействиеПриАктивизацииСтроки); - ТабличноеПоле.УстановитьДействие("ПриВыводеСтроки", ДействиеПриВыводеСтроки); - //ТабличноеПоле.ОбновитьСтроки(ТекущаяСтрока); - КонецЕсли; - Иначе - Попытка - ТекущаяСтрока[ПутьКДаннымКолонки] = НовоеЗначение; - Исключение - // настройка компоновки - КонецПопытки; - КонецЕсли; - ПоследняяОбработаннаяСтрока = ТекущаяСтрока; - КонецЦикла; - ОсвободитьИндикаторПроцессаЛкс(Индикатор); - Если Истина - И ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") - И Не ИнтерактивнаяУстановка - И ПоследняяОбработаннаяСтрока <> Неопределено - Тогда - // Переустановим значение ради срабатывания события ПриИзменении без его фактического изменения, чтобы сработали механизмы подсчета количества помеченных - ТабличноеПоле.ТекущаяСтрока = ПоследняяОбработаннаяСтрока; - ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, ПоследняяОбработаннаяСтрока[ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, Колонка)],,,,, Истина, ПутьКДаннымКолонки, МетаданныеВыбора); - КонецЕсли; - Если КоличествоПропущенных > 0 Тогда - СообщитьЛкс(СтрШаблонЛкс("Пропущено %1 ячеек из-за несогласованности строки с новым значением", КоличествоПропущенных)); - КонецЕсли; - Для Каждого СтарыйЭлементОтбора Из СтарыеВключенныеЭлементыОтбора Цикл - ТабличноеПоле.ОтборСтрок[СтарыйЭлементОтбора].Использование = Истина; - КонецЦикла; - ТабличноеПоле.ВыделенныеСтроки.Очистить(); - Если СтараяТекущаяСтрока <> Неопределено Тогда - ТабличноеПоле.ТекущаяСтрока = СтараяТекущаяСтрока; - КонецЕсли; - Если СтараяТекущаяКолонка <> Неопределено Тогда - УстановитьТекущуюКолонкуТаблицыФормыЛкс(ТабличноеПоле, СтараяТекущаяКолонка); - КонецЕсли; - Для Каждого СтрокаЦикл Из СтарыеВыделенныеСтроки Цикл - ТабличноеПоле.ВыделенныеСтроки.Добавить(СтрокаЦикл); - КонецЦикла; - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - ТабличноеПоле.ОбновитьСтроки(); // Антибаг платформы. Без этого иногда некоторые строки были недорисованы - КонецЕсли; - -КонецПроцедуры - -// Предоставляет пользователю редактор таблицы значений. Затем загружает добавленные туда пользователем данные в табличное поле с эмуляцией интерактивных событий -// -// Параметры: -// Форма - Форма -// ТабличноеПоле - ТабличноеПоле; -// РазрешитьИнтерактивнуюУстановку - Булево - вызывать обработчики событий формы -// -// Возвращаемое значение: -// Булево - успех -Функция ЗагрузитьСтрокиВТабличноеПолеЛкс(Знач Форма, Знач ТабличноеПоле, Знач РазрешитьИнтерактивнуюУстановку = Истина, Знач МетаданныеКолонок = Неопределено, ЛиТЧ = Истина, - Знач РеквизитыВладельца = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - МетаданныеКолонок = Новый Структура; - #КонецЕсли - Если ТабличноеПоле.ТолькоПросмотр Или Не ТабличноеПоле.ИзменятьСоставСтрок Тогда - Возврат Ложь; - КонецЕсли; - СтараяТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; - ТабличноеПоле.ДобавитьСтроку(); - Если СтараяТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока Тогда - СообщитьЛкс("Добавление строк заблокировано обработчиком перед добавлением строки"); - Возврат Ложь; - КонецЕсли; - ИнтерактивныеКолонки = ИнтерактивныеКолонкиТабличногоПоляЛкс(ТабличноеПоле); - #Если Сервер И Не Сервер Тогда - ИнтерактивныеКолонки = Новый СписокЗначений; - #КонецЕсли - КоллекцияСтрокПоля = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - Если ТипЗнч(КоллекцияСтрокПоля) = Тип("ДеревоЗначений") Тогда - КоллекцияСтрокПоля = РодительСтрокиДереваЛкс(ТабличноеПоле.ТекущаяСтрока, КоллекцияСтрокПоля).Строки; - ИначеЕсли ТипЗнч(КоллекцияСтрокПоля) = Тип("ДанныеФормыДерево") Тогда - КоллекцияСтрокПоля = РодительСтрокиДереваЛкс(ТабличноеПоле.ТекущаяСтрока, КоллекцияСтрокПоля).ПолучитьЭлемент(); - КонецЕсли; - Если ИнтерактивныеКолонки.Количество() = 0 Тогда - КоллекцияСтрокПоля.Удалить(ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле)); - СообщитьЛкс("В табличном поле отсутствуют интерактивно доступные колонки"); - Возврат Ложь; - КонецЕсли; - ИменаКолонокДанных = СтрСоединитьЛкс(ВыгрузитьСвойствоКоллекцииЛкс(ИнтерактивныеКолонки, "Представление")); - ЗагружаемаяТаблица = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле, Новый Массив,,,, ИменаКолонокДанных); - #Если Сервер И Не Сервер Тогда - ЗагружаемаяТаблица = Новый ТаблицаЗначений; - #КонецЕсли - СтрокаКоллекции = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - ТабличноеПоле.ЗакончитьРедактированиеСтроки(Истина); - Попытка - // Табличное поле могло выйти из режима редактирования строки из-за смены текущей колонки. Поэтому для подстраховки попробуем удалить строку из коллекции - КоллекцияСтрокПоля.Удалить(СтрокаКоллекции); - Исключение - КонецПопытки; - ТабличноеПоле.ТекущаяСтрока = СтараяТекущаяСтрока; - Заголовок = "Заполните строки для загрузки"; - Если Не ОткрытьЗначениеЛкс(ЗагружаемаяТаблица,,, Заголовок) Тогда - Возврат Ложь; - КонецЕсли; - - БылиДобавленыСтроки = ЗагрузитьТаблицуВТабличноеПолеЛкс(Форма, ТабличноеПоле, ЗагружаемаяТаблица, КоллекцияСтрокПоля, РазрешитьИнтерактивнуюУстановку, МетаданныеКолонок, - ЛиТЧ, РеквизитыВладельца, ИнтерактивныеКолонки); - Возврат БылиДобавленыСтроки; - -КонецФункции - -// Загружает переданную таблицу значений в табличное поле. Перед загрузкой в непустой приемник задается вопрос об очистке. -// Параметры: -// Форма - Форма -// ТабличноеПоле - ТабличноеПоле; -// ЗагружаемаяТаблица - ТаблицаЗначений; -// РазрешитьИнтерактивнуюУстановку - Булево - вызывать обработчики событий формы -// -// Возвращаемое значение: -// Булево - успех -Функция ЗагрузитьТаблицуВТабличноеПолеЛкс(Знач Форма, Знач ТабличноеПоле, Знач ЗагружаемаяТаблица, Знач КоллекцияСтрокПоля = Неопределено, Знач РазрешитьИнтерактивнуюУстановку = Истина, - Знач МетаданныеКолонок = Неопределено, ЛиТЧ = Истина, Знач РеквизитыВладельца = Неопределено, Знач ИнтерактивныеКолонки = Неопределено, Знач ПредлагатьОчистку = Истина) Экспорт - - Если ИнтерактивныеКолонки = Неопределено Тогда - ИнтерактивныеКолонки = ИнтерактивныеКолонкиТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - Если КоллекцияСтрокПоля = Неопределено Тогда - КоллекцияСтрокПоля = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - КонецЕсли; - ИменаКолонокДанных = СтрСоединитьЛкс(ВыгрузитьСвойствоКоллекцииЛкс(ИнтерактивныеКолонки, "Представление")); - НесопоставленныеКолонки = Новый СписокЗначений; - ИменаКолонокДанных = Новый Структура(ИменаКолонокДанных); - Для Каждого КолонкаНовая Из ЗагружаемаяТаблица.Колонки Цикл - Если Истина - И Не ИменаКолонокДанных.Свойство(КолонкаНовая.Имя) - И КолонкаНовая.Имя <> "_КлючИсточника" - Тогда - НесопоставленныеКолонки.Добавить(КолонкаНовая.Имя); - КонецЕсли; - КонецЦикла; - Если НесопоставленныеКолонки.Количество() > 0 Тогда - НесопоставленныеКолонки.СортироватьПоЗначению(); - СообщитьЛкс("В таблице-источнике обнаружены лишние колонки: " + СтрСоединитьЛкс(НесопоставленныеКолонки), СтатусСообщения.Внимание); - КонецЕсли; - Если ПредлагатьОчистку И КоллекцияСтрокПоля.Количество() > 0 Тогда - Ответ = Вопрос("Очистить строки таблицы перед загрузкой новых строк?", РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Да Тогда - КоллекцияСтрокПоля.Очистить(); - КонецЕсли; - КонецЕсли; - ТипИсточника = ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле); - СтарыеВключенныеЭлементыОтбора = Новый Массив; - ЕстьОтборСтрок = Ложь - Или ТипИсточника = "ТабличнаяЧасть" - Или ТипИсточника = "НаборЗаписей"; - Если ЕстьОтборСтрок И ЛиОтборУстановленЛкс(ТабличноеПоле.ОтборСтрок) Тогда - Для Каждого ЭлементОтбора Из ТабличноеПоле.ОтборСтрок Цикл - Если ЭлементОтбора.Использование Тогда - ЭлементОтбора.Использование = Ложь; - СтарыеВключенныеЭлементыОтбора.Добавить(ЭлементОтбора.Имя); - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - ЕстьОбработчикНачалаРедактирования = РазрешитьИнтерактивнуюУстановку И ЗначениеЗаполнено("" + ТабличноеПоле.ПолучитьДействие("ПриНачалеРедактирования")); - ЕстьОбработчикИзменения = Ложь; - Если РазрешитьИнтерактивнуюУстановку Тогда - Для Каждого ИнтерактивнаяКолонка Из ИнтерактивныеКолонки Цикл - Если ЗначениеЗаполнено("" + ИнтерактивнаяКолонка.Значение.ЭлементУправления.ПолучитьДействие("ПриИзменении")) Тогда - ЕстьОбработчикИзменения = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе - ЕстьОбработчикНачалаРедактирования = РазрешитьИнтерактивнуюУстановку; - ЕстьОбработчикИзменения = РазрешитьИнтерактивнуюУстановку; - КонецЕсли; - КолонкиСПроверками = Новый Структура; - Для Каждого ИнтерактивнаяКолонка Из ИнтерактивныеКолонки Цикл - ИмяКолонки = ИнтерактивнаяКолонка.Представление; - КолонкаСПроверками = Новый Структура("Имя, СвязиПараметровВыбора, ПараметрыВыбора"); - КолонкаСПроверками.Имя = ИмяКолонки; - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - Если МетаданныеКолонок <> Неопределено И МетаданныеКолонок.Свойство(ИмяКолонки) Тогда - МетаданныеКолонки = МетаданныеКолонок[ИмяКолонки]; - Иначе - Продолжить; - КонецЕсли; - Иначе - МетаданныеКолонки = ИнтерактивнаяКолонка.Значение; - КонецЕсли; - ЗаполнитьЗначенияСвойств(КолонкаСПроверками, МетаданныеКолонки, "СвязиПараметровВыбора, ПараметрыВыбора"); - КолонкиСПроверками.Вставить(ИмяКолонки, КолонкаСПроверками); - КонецЦикла; - КолонкиСНарушениями = Новый Структура; - ПоляСУсловиями = Новый ТаблицаЗначений; - ПропускатьНесогласованныеЗначения = Неопределено; - Если Не ПроверитьТаблицуЗначенийНаСогласованностьЛкс(ЗагружаемаяТаблица, КолонкиСПроверками, КолонкиСНарушениями, ТабличноеПоле, ПропускатьНесогласованныеЗначения, - ПоляСУсловиями, ЛиТЧ, РеквизитыВладельца) Тогда - Возврат Ложь; - КонецЕсли; - Форма.Активизировать(); - Индикатор = ПолучитьИндикаторПроцессаЛкс(ЗагружаемаяТаблица.Количество(), "Загрузка строк"); - ПоследняяОбработаннаяСтрока = Неопределено; - КоличествоПропущенных = 0; - Для Каждого СтрокаТаблицы Из ЗагружаемаяТаблица Цикл - ОбработкаПрерыванияПользователя(); - Если ЕстьОбработчикНачалаРедактирования Или ЕстьОбработчикИзменения Тогда - ОбработатьИндикаторЛкс(Индикатор); - ТабличноеПоле.ДобавитьСтроку(); - НоваяСтрока = ТабличноеПоле.ТекущиеДанные; - Иначе - НоваяСтрока = КоллекцияСтрокПоля.Добавить(); - КонецЕсли; - Для Каждого ИнтерактивнаяКолонка Из ИнтерактивныеКолонки Цикл - ИмяКолонки = ИнтерактивнаяКолонка.Представление; - Если ЗагружаемаяТаблица.Колонки.Найти(ИмяКолонки) = Неопределено Тогда - Продолжить; - КонецЕсли; - //Если Истина - // И ПропускатьНесогласованныеЗначения - // И КолонкиСНарушениями.Свойство(ИмяКолонки) - //Тогда - // ПолеСУсловиями = ПоляСУсловиями.Найти(ИмяКолонки, "ИмяКолонки"); - // Если СтрокаТаблицы["Несогласовано_" + ИмяКолонки] Тогда - // Продолжить; - // КонецЕсли; - //КонецЕсли; - НовоеЗначение = СтрокаТаблицы[ИмяКолонки]; - Если ЕстьОбработчикИзменения Тогда - РезультатОтправки = ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, ИнтерактивнаяКолонка.Значение, НовоеЗначение, , Ложь,,,, ИмяКолонки); - Если Не РезультатОтправки Тогда - КоличествоПропущенных = КоличествоПропущенных + 1; - КонецЕсли; - Иначе - НоваяСтрока[ИмяКолонки] = НовоеЗначение; - КонецЕсли; - КонецЦикла; - Если ЕстьОбработчикИзменения Тогда - ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, ИнтерактивныеКолонки[0].Значение); - КонецЕсли; - КонецЦикла; - ОсвободитьИндикаторПроцессаЛкс(Индикатор); - Если КоличествоПропущенных > 0 Тогда - СообщитьЛкс(СтрШаблонЛкс("Пропущено %1 ячеек из-за несогласованности строки с новым значением", КоличествоПропущенных)); - КонецЕсли; - ТабличноеПоле.ЗакончитьРедактированиеСтроки(Ложь); - Для Каждого СтарыйЭлементОтбора Из СтарыеВключенныеЭлементыОтбора Цикл - ТабличноеПоле.ОтборСтрок[СтарыйЭлементОтбора].Использование = Истина; - КонецЦикла; - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - ТабличноеПоле.ОбновитьСтроки(); // Антибаг платформы. Без этого иногда некоторые строки были недорисованы - КонецЕсли; - БылиДобавленыСтроки = ЗагружаемаяТаблица.Количество() > 0; - Возврат БылиДобавленыСтроки; - -КонецФункции - -Функция ИнтерактивныеКолонкиТабличногоПоляЛкс(Знач ТабличноеПоле) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - СтараяТекущаяКолонка = ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); - ИнтерактивныеКолонки = Новый СписокЗначений; - КолонкиТП = КолонкиТаблицыФормыИлиТабличногоПоляЛкс(ТабличноеПоле); - Для Каждого КолонкаТП Из КолонкиТП Цикл - ПутьКДаннымКолонки = ирОбщий.ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, КолонкаТП); - Если Истина - И ЗначениеЗаполнено(ПутьКДаннымКолонки) - И ЛиВКолонкеДоступнаЭмуляцияИнтерактивногоИзмененияЛкс(КолонкаТП) - И (Ложь - Или ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") - Или ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, КолонкаТП) // Только так можно проверить видимость по функциональным опциям у таблицы формы - ) - Тогда - ИнтерактивныеКолонки.Добавить(КолонкаТП, ПутьКДаннымКолонки); - КонецЕсли; - КонецЦикла; - Если СтараяТекущаяКолонка <> Неопределено Тогда - ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТабличноеПоле, СтараяТекущаяКолонка); - КонецЕсли; - Возврат ИнтерактивныеКолонки; - -КонецФункции - -// Получает копию данных таблицы формы -// -// Параметры: -// ИсточникДействий - - -// МассивСтрок - Массив - -// СУчетомОтбора - Булево - -// ПреобразоватьДеревоВТаблицу - Булево - -// КолонкаПолученияТекстаЯчеек - Структура - "Источник,Применик", источник - откуда брать текст, приемник - куда помещать -// ИменаКолонокРезультата - - -// -// Возвращаемое значение: -// Неопределено, ТаблицаЗначений, ДеревоЗначений -// -Функция ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(Знач ТабличноеПоле, Знач МассивСтрок = Неопределено, Знач СУчетомОтбора = Ложь, Знач ПреобразоватьДеревоВТаблицу = Истина, - Знач КолонкаПолученияТекстаЯчеек = Неопределено, Знач ИменаКолонокРезультата = "", ЭтаФорма = Неопределено, выхТекущаяСтрока = Неопределено) Экспорт - - ОчиститьТаблицу = Ложь; - Если Истина - И МассивСтрок <> Неопределено - И МассивСтрок.Количество() = 0 - И ТабличноеПоле.ТекущаяСтрока <> Неопределено - Тогда - МассивСтрок.Добавить(ТабличноеПоле.ТекущаяСтрока); - ОчиститьТаблицу = Истина; - КонецЕсли; - ПолноеИмяТаблицыБД = ""; - ДанныеТабличногоПоля = Неопределено; - ТипИсточника = ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицыБД, ДанныеТабличногоПоля); - Если ТипИсточника = "Список" И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда - Возврат Неопределено; - КонецЕсли; - Если ТипЗнч(МассивСтрок) = Тип("ВыделенныеСтрокиТабличногоПоля") Тогда - МассивСтрок = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - Если Ложь - #Если Клиент Тогда - Или ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") - #КонецЕсли - Тогда - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - ВыгрузкаРезультата = ирОбщий.ДанныеЭлементаФормыЛкс(ТабличноеПоле,, ЭтаФорма, СУчетомОтбора); - #Если Сервер И Не Сервер Тогда - ВыгрузкаРезультата = Новый ТаблицаЗначений; - #КонецЕсли - Если КолонкаПолученияТекстаЯчеек <> Неопределено Тогда - // Медленнее в разы - Результат = Новый ТаблицаЗначений; - Если ЛиТабличнаяЧастьЛкс(ВыгрузкаРезультата) Тогда - СкопироватьКолонкиКоллекцииЛкс(ВыгрузкаРезультата.ВыгрузитьКолонки(), Результат, Истина, ИменаКолонокРезультата); - Иначе - СкопироватьКолонкиКоллекцииЛкс(ВыгрузкаРезультата , Результат, Истина, ИменаКолонокРезультата); - КонецЕсли; - Результат.Колонки.Добавить(КолонкаПолученияТекстаЯчеек.Приемник, Новый ОписаниеТипов("Строка")); - Если МассивСтрок = Неопределено Тогда - Если ТипЗнч(ВыгрузкаРезультата) = Тип("ДеревоЗначений") Тогда - МассивСтрок = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ВыгрузкаРезультата); - Иначе - МассивСтрок = ВыгрузкаРезультата; - КонецЕсли; - КонецЕсли; - Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(МассивСтрок.Количество(), "Получение оформлений ячеек"); - Для Каждого ДанныеСтроки Из МассивСтрок Цикл - ирОбщий.ОбработатьИндикаторЛкс(Индикатор); - СтрокаРезультата = Результат.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаРезультата, ДанныеСтроки); - ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(ДанныеСтроки); - Если ОформлениеСтроки <> Неопределено Тогда - ТекстЯчейки = ОформлениеСтроки.Ячейки.Найти(КолонкаПолученияТекстаЯчеек.Источник).Текст; - Иначе - // Строка отброшена отбором. Поэтому для платформа не вычисляет для нее оформление - ТекстЯчейки = ДанныеСтроки[КолонкаПолученияТекстаЯчеек.Источник]; - КонецЕсли; - СтрокаРезультата[КолонкаПолученияТекстаЯчеек.Приемник] = ТекстЯчейки; - КонецЦикла; - ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); - ВыгрузкаРезультата = Результат; - Иначе - Если ТипЗнч(ВыгрузкаРезультата) = Тип("ТаблицаЗначений") Тогда - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - Если МассивСтрок <> Неопределено Тогда - ИндексТекущейСтроки = МассивСтрок.Найти(ТабличноеПоле.ТекущаяСтрока); - Иначе - ИндексТекущейСтроки = ВыгрузкаРезультата.Индекс(ТабличноеПоле.ТекущаяСтрока); - Если ИндексТекущейСтроки = -1 Тогда - ИндексТекущейСтроки = Неопределено; - КонецЕсли; - КонецЕсли; - КонецЕсли; - ВыгрузкаРезультата = ВыгрузкаРезультата.Скопировать(МассивСтрок, ИменаКолонокРезультата); - Если ИндексТекущейСтроки <> Неопределено Тогда - выхТекущаяСтрока = ВыгрузкаРезультата[ИндексТекущейСтроки]; - КонецЕсли; - ИначеЕсли ТипЗнч(ВыгрузкаРезультата) = Тип("ДеревоЗначений") Тогда - Если ПреобразоватьДеревоВТаблицу Тогда - ВыгрузкаРезультата = ирОбщий.ДеревоЗначенийВТаблицуЛкс(ВыгрузкаРезультата, МассивСтрок, ИменаКолонокРезультата); - КонецЕсли; - Иначе - Если Истина - И (Ложь - Или ТипИсточника = "НаборЗаписей" - Или ТипИсточника = "ТабличнаяЧасть") - И (Ложь - Или МассивСтрок <> Неопределено - Или Не СУчетомОтбора) - Тогда - ВыгрузкаРезультата = ВыгрузкаРезультата.Выгрузить(МассивСтрок, ИменаКолонокРезультата); - Иначе - Построитель = ПостроительТабличногоПоляСОтборомКлиентаЛкс(ТабличноеПоле); - #Если Сервер И Не Сервер Тогда - Построитель = Новый ПостроительЗапроса; - #КонецЕсли - Если Построитель.ВыбранныеПоля.Количество() > 0 Тогда - ВыгрузкаРезультата = Построитель.Результат.Выгрузить(); - Если Истина - И ТабличноеПоле.ТекущаяСтрока <> Неопределено - И Построитель.ДоступныеПоля.Найти("НомерСтроки") <> Неопределено - Тогда - выхТекущаяСтрока = ВыгрузкаРезультата.Найти(ТабличноеПоле.ТекущаяСтрока.НомерСтроки, "НомерСтроки"); - КонецЕсли; - ИначеЕсли ЛиКоллекцияКомпоновкиЛкс(ВыгрузкаРезультата) Тогда - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - выхТекущаяСтрока = ВыгрузкаРезультата.Элементы.Индекс(ТабличноеПоле.ТекущаяСтрока); - КонецЕсли; - ВыгрузкаРезультата = ТаблицаЗначенийИзКоллекцииЛкс(ВыгрузкаРезультата.Элементы); - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - Если выхТекущаяСтрока = -1 Тогда - // Например некорневая строка доступного поля компоновки - выхТекущаяСтрока = Неопределено; - Иначе - выхТекущаяСтрока = ВыгрузкаРезультата[выхТекущаяСтрока]; - КонецЕсли; - КонецЕсли; - Иначе - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - выхТекущаяСтрока = ВыгрузкаРезультата.Индекс(ТабличноеПоле.ТекущаяСтрока); - КонецЕсли; - ВыгрузкаРезультата = ТаблицаЗначенийИзКоллекцииЛкс(ВыгрузкаРезультата); - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - Если выхТекущаяСтрока = -1 Тогда - // Например некорневая строка доступного поля компоновки - выхТекущаяСтрока = Неопределено; - Иначе - выхТекущаяСтрока = ВыгрузкаРезультата[выхТекущаяСтрока]; - КонецЕсли; - КонецЕсли; - //ВызватьИсключение СтрШаблонЛкс("Неподдерживаемый тип данных табличного поля (%1)", ТипЗнч(ДанныеТабличногоПоля)); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Счетчик = 0; - Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл - ПутьКДанным = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, КолонкаТП); - Если ЗначениеЗаполнено(ПутьКДанным) Тогда - КолонкаТЗ = ВыгрузкаРезультата.Колонки.Найти(ПутьКДанным); - Если КолонкаТЗ <> Неопределено Тогда - ВыгрузкаРезультата.Колонки.Сдвинуть(КолонкаТЗ, Счетчик - ВыгрузкаРезультата.Колонки.Индекс(КолонкаТЗ)); - Счетчик = Счетчик + 1; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Иначе // ТипЗнч(ИсточникДействий) = Тип("ТаблицаФормы") - ТаблицаФормы = ТабличноеПоле; - ДанныеЭлемента = ДанныеЭлементаФормыЛкс(ТаблицаФормы); - ОтборСтрок = Неопределено; - Если ТипЗнч(ДанныеЭлемента) = Тип("ДинамическийСписок") Тогда - ДанныеЭлемента = Неопределено; - Иначе - Если ТипЗнч(ДанныеЭлемента) = Тип("ДанныеФормыКоллекция") Тогда - ОтборСтрок = ТабличноеПоле.ОтборСтрок; - #Если Сервер И Не Сервер Тогда - ОтборСтрок = Новый ФиксированнаяСтруктура; - #КонецЕсли - КонецЕсли; - КонецЕсли; - Если МассивСтрок = Неопределено И ТипЗнч(ДанныеЭлемента) = Тип("ДанныеФормыДерево") Тогда - Результат = ДанныеФормыВЗначение(ДанныеЭлемента, Тип("ДеревоЗначений")); // Для табличных частей не работает - Иначе - Если ДанныеЭлемента = Неопределено Тогда - Если МассивСтрок = Неопределено Тогда - МассивСтрок = ВыделенныеСтрокиТабличногоПоляЛкс(ТаблицаФормы); - ирОбщий.СообщитьЛкс("Эта таблица позволяет выводить только выделенные строки",,, Истина, Ложь); - КонецЕсли; - Иначе - //ТипЗначенияТаблицы = ТипЗначенияЭлементаФормыЛкс(ТаблицаФормы, Ложь); - //Если ТипЗначенияТаблицы <> Неопределено Тогда - // ТипЗначенияТаблицы = ТипЗначенияТаблицы.Типы()[0]; - // ИмяОбщегоТипа = ОбщийТипДанныхТабличногоПоляЛкс(ТаблицаФормы, Истина); - // ОбъектМДТаблицы = Метаданные.НайтиПоТипу(ТипЗначенияТаблицы); - // Если ОбъектМДТаблицы <> Неопределено Тогда - // ВыгрузкаРезультата = Новый ТаблицаЗначений; - // Если ИмяОбщегоТипа = "ТабличнаяЧасть" Тогда - // // Через поля таблицы БД нельзя, т.к. у ТЧ может не быть проекции в БД - // Для Каждого МетаРеквизит Из ОбъектМДТаблицы.Реквизиты Цикл - // Результат.Колонки.Добавить(МетаРеквизит.Имя, МетаРеквизит.Тип, МетаРеквизит.Представление()); - // КонецЦикла; - // Иначе - // ПоляТаблицыБД = ирОбщий.ПоляТаблицыМДЛкс(ОбъектМДТаблицы); - // Для Каждого ПолеБД Из ПоляТаблицыБД Цикл - // Результат.Колонки.Добавить(ПолеБД.Имя, ПолеБД.ТипЗначения, ПолеБД.Заголовок); - // КонецЦикла; - // КонецЕсли; - // КонецЕсли; - //КонецЕсли; - Если МассивСтрок = Неопределено Тогда - Попытка - МассивСтрок = ДанныеЭлемента.Элементы; // Настройка компоновки - Исключение - МассивСтрок = ДанныеЭлемента; - КонецПопытки; - КонецЕсли; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - МассивСтрок = Новый Массив; - #КонецЕсли - Результат = Новый ТаблицаЗначений; - Если МассивСтрок.Количество() > 0 Тогда - КолонкиДобавлены = Ложь; - Колонка_КлючИсточникаДобавлена = Ложь; - КолонкаСРеквизитом = ""; - СтараяТекущаяСтрока = ТаблицаФормы.ТекущаяСтрока; - Для Каждого СтрокаТаблицы Из МассивСтрок Цикл - Попытка - ДанныеСтроки = ТаблицаФормы.ДанныеСтроки(СтрокаТаблицы); - ИДСтроки = СтрокаТаблицы; - Исключение - ДанныеСтроки = Неопределено; - КонецПопытки; - Если ДанныеСтроки = Неопределено Тогда - ДанныеСтроки = СтрокаТаблицы; - Попытка - ИДСтроки = СтрокаТаблицы.ПолучитьИдентификатор(); - Исключение - КонецПопытки; - КонецЕсли; - Если Не КолонкиДобавлены Тогда - Если Истина - И Не ОчиститьТаблицу - И ТипЗнч(ИДСтроки) = Тип("Число") - И Результат.Колонки.Найти("_КлючИсточника") = Неопределено - Тогда - Результат.Колонки.Добавить("_КлючИсточника"); - Колонка_КлючИсточникаДобавлена = Истина; - КонецЕсли; - ДобавитьКолонкиГруппыФормыВТаблицуЗначенийЛкс(ТаблицаФормы.ПодчиненныеЭлементы, Результат, ДанныеСтроки, ИменаКолонокРезультата); - Если Не ЗначениеЗаполнено(ИменаКолонокРезультата) Тогда - ТекущееПоле = ТаблицаФормы.ТекущийЭлемент; - Если ТекущееПоле <> Неопределено Тогда - ПутьКДаннымПоля = НайтиПутьКДаннымПоляТаблицыФормыЛкс(ДанныеСтроки, ТекущееПоле.Имя); - Если ЗначениеЗаполнено(ПутьКДаннымПоля) Тогда - ИмяРеквизитаКоллекции = ПутьКДаннымПоля; - Если Найти(ПутьКДаннымПоля, ".") > 0 Тогда - КолонкаСРеквизитом = ПутьКДаннымПоля; - ИмяРеквизитаКоллекции = СтрЗаменить(КолонкаСРеквизитом, ".", "_"); - КонецЕсли; - Если Результат.Колонки.Найти(ИмяРеквизитаКоллекции) = Неопределено Тогда - Результат.Колонки.Добавить(ИмяРеквизитаКоллекции); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КолонкиДобавлены = Истина; - КонецЕсли; - Если ОтборСтрок <> Неопределено Тогда - ОтборПройден = Истина; - Для Каждого КлючИЗначение Из ОтборСтрок Цикл - Если ДанныеСтроки[КлючИЗначение.Ключ] <> КлючИЗначение.Значение Тогда - ОтборПройден = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - Если Не ОтборПройден Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - Если СУчетомОтбора Тогда - //Если МассивСтрок.Количество() < 500 Тогда // Не будем тратить более 5сек на дорогую проверку пользовательского фильтра - // // долго - 10мс https://www.hostedredmine.com/issues/947570 - // Если Не ПрисвоитьЕслиНеРавноЛкс(ТаблицаФормы.ТекущаяСтрока, ИДСтроки) Тогда - // Продолжить; - // КонецЕсли; - //КонецЕсли; - Если Не ТаблицаФормы.ПроверитьСтроку(ИДСтроки) Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - НоваяСтрока = Результат.Добавить(); - Если ТипЗнч(ИДСтроки) = Тип("Число") И Колонка_КлючИсточникаДобавлена Тогда - НоваяСтрока._КлючИсточника = ИДСтроки; - КонецЕсли; - ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеСтроки); - КонецЦикла; - ТабличноеПоле.ТекущаяСтрока = СтараяТекущаяСтрока; - Если ЗначениеЗаполнено(КолонкаСРеквизитом) Тогда - ЗначенияКолонкиСРеквизитом = ПрочитатьРеквизитПоМассивуСсылокЛкс(Результат.ВыгрузитьКолонку(ПервыйФрагментЛкс(КолонкаСРеквизитом)), ПоследнийФрагментЛкс(КолонкаСРеквизитом)); - Результат.ЗагрузитьКолонку(ЗначенияКолонкиСРеквизитом, СтрЗаменить(КолонкаСРеквизитом, ".", "_")); - КонецЕсли; - Результат = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(Результат); - ИначеЕсли ДанныеЭлемента <> Неопределено Тогда - ДобавитьКолонкиГруппыФормыВТаблицуЗначенийЛкс(ТаблицаФормы.ПодчиненныеЭлементы, Результат, ДанныеЭлемента, ИменаКолонокРезультата); - КонецЕсли; - //Если ВыделенныеСтрокиВосстановить <> Неопределено Тогда - // ТаблицаФормы.ВыделенныеСтроки.Очистить(); - // Для Каждого ВыделеннаяСтрока Из ВыделенныеСтрокиВосстановить Цикл - // ТаблицаФормы.ВыделенныеСтроки.Добавить(ВыделеннаяСтрока); - // КонецЦикла; - //КонецЕсли; - КонецЕсли; - ВыгрузкаРезультата = Результат; - Если ПреобразоватьДеревоВТаблицу И ТипЗнч(ВыгрузкаРезультата) = Тип("ДеревоЗначений") Тогда - ВыгрузкаРезультата = ирОбщий.ДеревоЗначенийВТаблицуЛкс(ВыгрузкаРезультата); - КонецЕсли; - КонецЕсли; - Если ОчиститьТаблицу И ТипЗнч(ВыгрузкаРезультата) = Тип("ТаблицаЗначений") Тогда - ВыгрузкаРезультата.Очистить(); - КонецЕсли; - Возврат ВыгрузкаРезультата; - -КонецФункции - -Процедура ПоследниеВыбранныеНажатиеЛкс(Знач ЭтаФорма, Знач ТабличноеПолеИлиКлюч, Знач КлючевоеПоле = "Ссылка", Знач Кнопка, Знач ТипКлюча = "Выбранные", ДопКлючХранения = "") Экспорт - - КлючСтроки = ВыбранныйЭлементПоследнихЗначенийЛкс(ЭтаФорма, ТабличноеПолеИлиКлюч, Кнопка, ТипКлюча,, ДопКлючХранения); - СтрокаНайдена = ирОбщий.УстановитьТекущуюСтрокуСКонтролемУспешностиЛкс(ЭтаФорма, ТабличноеПолеИлиКлюч, КлючевоеПоле, КлючСтроки,, Истина); - Если СтрокаНайдена И ЭтаФорма.РежимВыбора Тогда - Ответ = Вопрос("Выбрать установленную строку?", РежимДиалогаВопрос.ОКОтмена); - Если Ответ = КодВозвратаДиалога.ОК Тогда - //ЭтаФорма.ОповеститьОВыборе(КлючСтроки); - //Если Этаформа.ВводДоступен() Тогда - ОтправитьНажатияКлавишЛкс("{ENTER}"); - //КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ВыбранныйЭлементПоследнихЗначенийЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач Кнопка, Знач ТипКлюча = "Выбранные", Знач Десериализовать = Ложь, ДопКлючХранения = "") Экспорт - - КлючЗначения = КлючСохраненияСпискаПоследнихЗначенийФормыЛкс(ЭтаФорма, ТабличноеПоле, ТипКлюча, ДопКлючХранения); - ПоследниеВыбранные = ВосстановитьЗначениеЛкс(КлючЗначения); - Если ТипЗнч(ПоследниеВыбранные) <> Тип("СписокЗначений") Тогда - Возврат Неопределено; - КонецЕсли; - ИндексЭлементаСписка = Число(Сред(Кнопка.Имя, СтрДлина(НачалоИмениКнопкиПодменюПоследнихВыбранных(ТипКлюча)) + 1)); - Если ПоследниеВыбранные.Количество() <= ИндексЭлементаСписка Тогда - Возврат Неопределено; - КонецЕсли; - Результат = ПоследниеВыбранные[ИндексЭлементаСписка].Значение; - Если Десериализовать Тогда - Результат = ОбъектИзСтрокиXMLЛкс(Результат); - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Функция - Последние выбранные добавить лкс -// -// Параметры: -// ЭтаФорма - - -// ВыбранноеЗначение - - -// ПредставлениеЗначения - - -// ТабличноеПолеИлиКлюч - - -// ТипКлюча - - -// Сериализовать - - -// -// Возвращаемое значение: -// - Булево - Истина если значение было добавлено в список -// -Функция ПоследниеВыбранныеДобавитьЛкс(ЭтаФорма, Знач ВыбранноеЗначение, Знач ПредставлениеЗначения = "", Знач ТабличноеПолеИлиКлюч = Неопределено, Знач ТипКлюча = "Выбранные", - Знач Сериализовать = Ложь, ДопКлючХранения = "") Экспорт - - ЗапоминатьПоследниеВыбранные = КоличествоЗапоминаемыхПоследнихВыбранныхЛкс(); - Если Истина - И ЗапоминатьПоследниеВыбранные <> Неопределено - И ЗапоминатьПоследниеВыбранные > 0 - Тогда - КлючЗначения = КлючСохраненияСпискаПоследнихЗначенийФормыЛкс(ЭтаФорма, ТабличноеПолеИлиКлюч, ТипКлюча, ДопКлючХранения); - ПоследниеВыбранные = ВосстановитьЗначениеЛкс(КлючЗначения); - Если ТипЗнч(ПоследниеВыбранные) <> Тип("СписокЗначений") Тогда - ПоследниеВыбранные = Новый СписокЗначений; - КонецЕсли; - Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда - Если ВыбранноеЗначение.Количество() = 0 Тогда - Возврат Ложь; - КонецЕсли; - ВыбранноеЗначение = ВыбранноеЗначение[0]; - КонецЕсли; - Если Не ЗначениеЗаполнено(ПредставлениеЗначения) Тогда - ПредставлениеЗначения = ПредставлениеКлючаСтрокиБДЛкс(ВыбранноеЗначение); - КонецЕсли; - Если Сериализовать Тогда - ВыбранноеЗначение = ОбъектВСтрокуXMLЛкс(ВыбранноеЗначение); - КонецЕсли; - Индекс = ПоследниеВыбранные.НайтиПоЗначению(ВыбранноеЗначение); - Если Индекс = 0 Тогда - Возврат Ложь; - ИначеЕсли Индекс <> Неопределено Тогда - ПоследниеВыбранные.Удалить(Индекс); - Иначе - Пустышка = 0; - КонецЕсли; - КлючСтроки = ВыбранноеЗначение; - ПоследниеВыбранные.Вставить(0, КлючСтроки, ПредставлениеЗначения); - ирОбщий.СохранитьЗначениеЛкс(КлючЗначения, ПоследниеВыбранные); - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции - -Процедура НайденныеСтандартноСсылкиПриВыводеСтрокиЛкс(Знач ОформлениеСтроки, Знач ПолучатьПредставленияСсылок = Ложь, Знач ПолноеИмяМД = "") Экспорт - - ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; - #Если Сервер И Не Сервер Тогда - ДанныеСтроки = Обработки.ирИсторияДанных.Создать().Версии.Добавить(); - ДанныеСтроки = Обработки.ирРедакторОбъектаБД.Создать().СсылкиНаОбъект.Добавить(); - #КонецЕсли - Ячейки = ОформлениеСтроки.Ячейки; - Если Не ЗначениеЗаполнено(ПолноеИмяМД) Тогда - ПолноеИмяМД = ДанныеСтроки.Метаданные; - КонецЕсли; - КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяМД); - КлючОбъекта = КлючОбъектаСтрокиВерсииДанныхЛкс(ДанныеСтроки, ПолноеИмяМД); - Ячейки.Данные.Текст = ирОбщий.ПредставлениеКлючаСтрокиБДЛкс(КлючОбъекта, ПолучатьПредставленияСсылок); - -КонецПроцедуры - -Функция НадоСериализоватьКлючДанныхДляОтображенияЛкс(ТипМетаданных) Экспорт - - НадоСериализоватьКлюч = ирОбщий.ЛиКорневойТипРегистраСведенийЛкс(ТипМетаданных); - Возврат НадоСериализоватьКлюч; - -КонецФункции - -Процедура ОформитьФонТекущейСтрокиЛкс(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - - Если Элемент.ТекущаяСтрока = ДанныеСтроки Тогда - ОформлениеСтроки.ЦветФона = WebЦвета.СветлоНебесноГолубой; - КонецЕсли; - -КонецПроцедуры - -Функция ПроверитьЗапуститьОтладчик(Знач ВремяОжиданияЗапуска = 5) Экспорт - - Платформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - Платформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ИдентификаторыОтладчиков = Неопределено; - АдресОтладчика = Платформа.ПортДляПодключенияОтладчика(ИдентификаторыОтладчиков); - #Если Сервер И Не Сервер Тогда - ИдентификаторыОтладчиков = Новый Массив; - #КонецЕсли - Если ИдентификаторыОтладчиков.Количество() = 0 Тогда - //СеансКонфигуратора = ирОбщий.СеансКонфигуратора(); // может быть долго - //Если СеансКонфигуратора <> Неопределено Тогда - // СообщитьЛкс("Конфигуратор уже открыт, но отладка не подключена. Выполните подключение отладчика вручную"); - // Возврат Неопределено; - //КонецЕсли; - // Антибаг 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1003164#1003164 - Если ирКэш.НомерВерсииПлатформыЛкс() = 802015 Тогда - СообщитьЛкс("Из-за ошибки платформы 8.2.15 запуск и подключение отладчика необходимо выполнять вручную"); - Возврат Неопределено; - КонецЕсли; - Если АдресОтладчика = Неопределено Тогда - СообщитьЛкс("Если используется TCP отладка, включите разрешение отладки в главном меню ""Сервис/Параметры/Системные"" и повторите операцию снова"); - Возврат Неопределено; - КонецЕсли; - //Если Найти(НРег(АдресОтладчика), "http") > 0 Тогда - // СообщитьЛкс("Используется http отладка."); - //КонецЕсли; - ПараметрыЗапуска = "CONFIG /DEBUG /DEBUGTARGET""" + АдресОтладчика + """"; - ЗапуститьСистему(ПараметрыЗапуска); - ПаузаЛкс(ВремяОжиданияЗапуска); - Пока Истина Цикл - Платформа.ПортДляПодключенияОтладчика(ИдентификаторыОтладчиков); - Если ИдентификаторыОтладчиков.Количество() = 0 Тогда - Ответ = Вопрос("Отладчик еще не подключился. Повторить снова?", РежимДиалогаВопрос.ОКОтмена); - Если Ответ = КодВозвратаДиалога.ОК Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - Прервать; - КонецЦикла; - Если ИдентификаторыОтладчиков.Количество() > 0 Тогда - ВыбранныйИдентификатор = Число(ИдентификаторыОтладчиков[0]); - КонецЕсли; - Иначе - Если ИдентификаторыОтладчиков.Количество() = 1 Тогда - ВыбранныйИдентификатор = ИдентификаторыОтладчиков[0]; - Иначе - ВыбранныйИдентификатор = Платформа.ВыбратьПроцессКонфигуратора(ИдентификаторыОтладчиков); - КонецЕсли; - Если ВыбранныйИдентификатор <> Неопределено Тогда - Платформа.АктивизироватьОкноПроцесса1С8(Число(ВыбранныйИдентификатор)); - КонецЕсли; - КонецЕсли; - Возврат ВыбранныйИдентификатор; - -КонецФункции - -Процедура ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ТабличноеПоле, ИмяКолонки = "") Экспорт - - Если ТабличноеПоле.ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда - ТекущаяКолонка = ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); - Если ТекущаяКолонка = Неопределено Тогда - Возврат; - КонецЕсли; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - ИмяКолонки = ПутьКДаннымЭлементаУправляемойФормыЛкс(ТекущаяКолонка, Истина); - Иначе - ИмяКолонки = ТекущаяКолонка.Данные; - КонецЕсли; - КонецЕсли; - Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда - Возврат; - КонецЕсли; - ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - ЗначениеЯчейки = ДанныеСтроки[ИмяКолонки]; - XMLТип = XMLТипЗнч(ЗначениеЯчейки); - Если XMLТип = Неопределено Тогда - Возврат; - КонецЕсли; - Если Найти(XMLТип.ИмяТипа, "Ref.") = 0 Тогда - Возврат; - КонецЕсли; - //Если Ложь - // Или Найти(XMLТип.ИмяТипа, "EnumRef.") > 0 - // Или Найти(XMLТип.ИмяТипа, "BusinessProcessRoutePointRef.") > 0 - //Тогда - // ОткрытьФормуСпискаЛкс(ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(ЗначениеЯчейки)),, Истина,,,, ЗначениеЯчейки); - //Иначе - ОткрытьСсылкуВРедактореОбъектаБДЛкс(ЗначениеЯчейки); - //КонецЕсли; - -КонецПроцедуры - -// Параметры -// КлючИлиОбъект - СтруктураОбъектаБД, Ссылка, ОбъектБД -Функция ОткрытьСсылкуВРедактореОбъектаБДЛкс(КлючОбъекта, ИскомоеЗначение = Неопределено, ИмяТабличнойЧасти = "", ИмяПоля = "", КлючСтроки = Неопределено, НайденныеСсылки = Неопределено) Экспорт - - ФормаРедактора = ПолучитьФормуСсылки(КлючОбъекта, ИскомоеЗначение); - ФормаРедактора.Открыть(); - Если НайденныеСсылки <> Неопределено Тогда - ФормаРедактора.НайтиИПоказатьСсылкиВФорме(НайденныеСсылки); - КонецЕсли; - Если ЗначениеЗаполнено(ИмяПоля) Тогда - Если ЗначениеЗаполнено(ИмяТабличнойЧасти) Тогда - ИмяДочернейТаблицыБД = КлючОбъекта.Метаданные().ПолноеИмя(); - ИмяДочернейТаблицыБД = ИмяДочернейТаблицыБД + "." + ИмяТабличнойЧасти; - КонецЕсли; - ФормаРедактора.ПоказатьЯчейкуДанныхОбъекта(ИмяДочернейТаблицыБД, ИмяПоля, КлючСтроки); - КонецЕсли; - Возврат ФормаРедактора; - -КонецФункции - -Функция ОткрытьОбъектВРедактореОбъектаБДЛкс(ОбъектБД, ИскомоеЗначение = Неопределено, КлючУникальности = Неопределено, Знач Модально = Ложь) Экспорт - - Если ЛиСсылкаНаОбъектБДЛкс(ОбъектБД) Тогда - ВызватьИсключение "Вместо ссылки ожидался объект"; - КонецЕсли; - Если КлючУникальности = Неопределено Тогда - КлючУникальности = Новый УникальныйИдентификатор; - КонецЕсли; - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрКлючИлиОбъект", ОбъектБД); - ПараметрыФормы.Вставить("ПараметрПрочитатьОбъект", Ложь); - ПараметрыФормы.Вставить("ПараметрИскомоеЗначение", ИскомоеЗначение); - Форма = ПолучитьФормуЛкс("Обработка.ирРедакторОбъектаБД.Форма", ПараметрыФормы,, КлючУникальности); - #Если Сервер И Не Сервер Тогда - Форма = Обработки.ирРедакторОбъектаБД.Создать(); - #КонецЕсли - ЗаполнитьЗначенияСвойств(Форма.фОбъект, ПараметрыФормы, "ПараметрКлючИлиОбъект, ПараметрПрочитатьОбъект, ПараметрИскомоеЗначение"); - Если Модально Тогда - Форма.ОткрытьМодально(); - Иначе - Форма.Открыть(); - КонецЕсли; - Возврат Форма; - -КонецФункции - -// Параметры -// КлючИлиОбъект - СтруктураОбъектаБД, Ссылка, ОбъектБД -Функция ПолучитьФормуСсылки(КлючОбъекта, ИскомоеЗначение = Неопределено) - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрКлючИлиОбъект", КлючОбъекта); - ПараметрыФормы.Вставить("ПараметрПрочитатьОбъект", Истина); - ПараметрыФормы.Вставить("ПараметрИскомоеЗначение", ИскомоеЗначение); - Форма = ПолучитьФормуЛкс("Обработка.ирРедакторОбъектаБД.Форма", ПараметрыФормы,, КлючОбъекта); - #Если Сервер И Не Сервер Тогда - Форма = Обработки.ирРедакторОбъектаБД.Создать(); - #КонецЕсли - ЗаполнитьЗначенияСвойств(Форма, ПараметрыФормы); - Возврат Форма; - -КонецФункции - -Процедура НайтиИПоказатьСсылкиНаОбъектБД(СсылкаНаКоторуюИщемСсылки) Экспорт - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПараметрКлючИлиОбъект", СсылкаНаКоторуюИщемСсылки); - Форма = ПолучитьФормуЛкс("Обработка.ирРедакторОбъектаБД.Форма", ПараметрыФормы); - #Если Сервер И Не Сервер Тогда - Форма = Обработки.ирРедакторОбъектаБД.Создать(); - #КонецЕсли - ЗаполнитьЗначенияСвойств(Форма, ПараметрыФормы); - Форма.Открыть(); - Форма.НайтиИПоказатьСсылкиВФорме(); - -КонецПроцедуры // НайтиСсылки() - -Функция НоваяФормаТекстаЛкс(ВладелецФормы = Неопределено, КлючУникальности = Неопределено) Экспорт - - ФормаТекста = ирКэш.Получить().ПолучитьФорму("Текст", ВладелецФормы, КлючУникальности); - Возврат ФормаТекста; - -КонецФункции - -// . -// Параметры: -// ВариантПросмотра - Строка - если пусто, то автоматически, иначе "Обычный", "Компактный", "ЯзыкЗапросов", "ВстроенныйЯзык", "XML", "JSON", "Дерево"... -Функция ПолучитьФормуТекстаЛкс(Текст, Знач Заголовок = "", ВариантПросмотра = "Компактный", ТолькоПросмотр = Ложь, Знач КлючУникальности = Неопределено, ВладелецФормы = Неопределено, ВыделитьВсе = Ложь) Экспорт - - Если КлючУникальности = Неопределено Тогда - КлючУникальности = Новый УникальныйИдентификатор(); - КонецЕсли; - //ФормаТекста = ирКэш.ФормаТекстаЛкс(); // Толку от кэширования нет, т.к. HTML редактор все равно заново загружается платформой - //Если ФормаТекста.Открыта() Тогда - ФормаТекста = НоваяФормаТекстаЛкс(ВладелецФормы, КлючУникальности); - //Иначе - // ФормаТекста.КлючУникальности = КлючУникальности; - // ФормаТекста.ВладелецФормы = ВладелецФормы; - //КонецЕсли; - ФормаТекста.НачальноеЗначениеВыбора = Текст; - ФормаТекста.ВариантПросмотра = ВариантПросмотра; - ФормаТекста.ТолькоПросмотр = ТолькоПросмотр; - ФормаТекста.ПараметрВыделитьВсе = ВыделитьВсе; - Если Не ЗначениеЗаполнено(Заголовок) Тогда - //Заголовок = ФормаПросмотра.Заголовок; - Заголовок = "Текст"; // Чтобы при повторном открытии не оставался старый текст - КонецЕсли; - ФормаТекста.Заголовок = Заголовок; - Возврат ФормаТекста; - -КонецФункции - -// . -// Параметры: -// ВариантПросмотра - Строка - если пусто, то автоматически, иначе "Обычный", "Компактный", "ЯзыкЗапросов", "ВстроенныйЯзык", "XML", "JSON", "Дерево"... -Функция ОткрытьТекстЛкс(Текст, Знач Заголовок = "", ВариантПросмотра = "Компактный", ТолькоПросмотр = Ложь, Знач КлючУникальности = Неопределено, ВладелецФормы = Неопределено, ВыделитьВсе = Ложь) Экспорт - - ФормаТекста = ПолучитьФормуТекстаЛкс(Текст, Заголовок, ВариантПросмотра, ТолькоПросмотр, КлючУникальности, ВладелецФормы, ВыделитьВсе); - ФормаТекста.Открыть(); - Возврат ФормаТекста; - -КонецФункции - -Функция ОткрытьПросмотрДереваJSONЛкс(Знач Текст, Знач Заголовок = "", Знач КлючУникальности = Неопределено, ВладелецФормы = Неопределено, Знач РежимВыбораМассива = Ложь) Экспорт - - Если Не ЗначениеЗаполнено(Текст) Тогда - Возврат Неопределено; - КонецЕсли; - ФормаПросмотра = ПолучитьФормуТекстаЛкс(Текст, Заголовок, "Дерево",, КлючУникальности, ВладелецФормы); - ФормаПросмотра.ПараметрРежимВыбораМассива = РежимВыбораМассива; - Если ЗначениеЗаполнено(Заголовок) Тогда - Результат = ФормаПросмотра.ОткрытьМодально(); - Иначе - ФормаПросмотра.Открыть(); - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ФормаПросмотраHTMLЛкс(Текст) Экспорт - - Форма = ирКэш.Получить().ПолучитьФорму("HTML"); - Форма.ЭлементыФормы.ПолеHtmlДокумента.УстановитьТекст(Текст); - Возврат Форма; - -КонецФункции - -Процедура ПолеВводаТекста_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка) Экспорт - - Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда - СтандартнаяОбработка = Ложь; - ФормаРедактора = ирКэш.Получить().ПолучитьФорму("Текст", Элемент, Новый УникальныйИдентификатор); - ФормаРедактора.РежимВыбора = Истина; - ФормаРедактора.НачальноеЗначениеВыбора = Элемент.Значение; - ФормаРедактора.Открыть(); - КонецЕсли; - -КонецПроцедуры - -// Функция - проверяет тип поля формы (обычной или управялемой) -// -// Параметры: -// ЭлементФормы - ЭлементФормы - Элемент обычной или управляемой формы -// ТипПоля - Тип - тип поля обычной формы -// -// Возвращаемое значение: -// Булево - Истина, если поле соответсвует типу -// -Функция ЛиПолеФормыИмеетТипЛкс(Знач ЭлементФормы, ТипПоля) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Результат = Ложь - Или ТипЗнч(ЭлементФормы) = ТипПоля - Или (Истина - И ТипЗнч(ЭлементФормы) = Тип("ПолеФормы") - И ЭлементФормы.Вид = ПредопределенноеЗначение("ВидПоляФормы." + мПлатформа.СтруктураТипаИзКонкретногоТипа(ТипПоля).ИмяОбщегоТипа)); - Возврат Результат; - -КонецФункции - -// Функция - Построитель табличного поля с отбором клиента -// -// Параметры: -// ТабличноеПоле - ТабличноеПоле - табличной части или таблицы значений -// СтруктураОтбора - - -// -// Возвращаемое значение: -// - -// -Функция ПостроительТабличногоПоляСОтборомКлиентаЛкс(Знач ТабличноеПоле, Знач СтруктураОтбора = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - ПостроительЗапроса = Новый ПостроительЗапроса; - ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличноеПоле.Значение); - Попытка - ОтборСтрок = ТабличноеПоле.ОтборСтрок; - Исключение - КонецПопытки; - Если ОтборСтрок <> Неопределено Тогда - СкопироватьОтборПостроителяЛкс(ПостроительЗапроса.Отбор, ОтборСтрок); - КонецЕсли; - Если СтруктураОтбора <> Неопределено Тогда - Для Каждого КлючИЗначение Из СтруктураОтбора Цикл - УстановитьЭлементОтбораЛкс(ПостроительЗапроса.Отбор.Добавить(КлючИЗначение.Ключ),, КлючИЗначение.Значение); - КонецЦикла; - КонецЕсли; - Возврат ПостроительЗапроса; - -КонецФункции - -// Параметры: -// ТабличноеПоле - ТабличноеПоле - -// ОтборПоЗначению - Булево - Истина - отбирать по значению, Ложь - отбирать без значения -// Отбор - ОтборКомпоновкиДанных, Отбор - -// СообщитьОДобавлении - Булево - -// ТабличноеПолеОтбора - ТабличноеПоле - -// ЭтаФорма - Форма - -// -// Возвращаемое значение: -// - -// -Функция ТабличноеПолеОтборДляЗначенияВТекущейКолонкеЛкс(Знач ТабличноеПоле, Знач ОтборПоЗначению = Ложь, Знач Отбор = Неопределено, Знач СообщитьОДобавлении = Ложь, - ТабличноеПолеОтбора = Неопределено, ЭтаФорма = Неопределено, Знач НазначитьПользовательскийИдентификатор = Истина) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - ТабличноеПолеОтбора = Новый ТабличноеПоле; - #КонецЕсли - Если ТабличноеПоле.ТекущаяСтрока = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - ДанныеКолонки = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - Если Не ЗначениеЗаполнено(ДанныеКолонки) Тогда - Возврат Ложь; - КонецЕсли; - КомпоновкаТП = КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); - Если Отбор = Неопределено Тогда - Если КомпоновкаТП <> Неопределено Тогда - Отбор = КомпоновкаТП.Компоновщик.Настройки.Отбор; - Иначе - ДанныеТабличногоПоля = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - НастройкиСписка = НастройкиДинамическогоСпискаЛкс(ДанныеТабличногоПоля, "Пользовательские"); - Попытка - Отбор = НастройкиСписка.Отбор; - Исключение - Отбор = ТабличноеПоле.ОтборСтрок; - КонецПопытки; - КонецЕсли; - КонецЕсли; - Если ТипЗнч(Отбор) = Тип("Отбор") Тогда - #Если Сервер И Не Сервер Тогда - Отбор = Новый ПостроительЗапроса; - Отбор = Отбор.Отбор; - #КонецЕсли - ЭлементОтбора = Отбор.Найти(ДанныеКолонки); - Если ЭлементОтбора = Неопределено Тогда - // Например "Предопределенный" - Возврат Ложь; - КонецЕсли; - ДоступноеПоле = ЭлементОтбора; - ТекущееЗначениеОтбора = ЭлементОтбора.Значение; - ЗначениеЯчейки = ТабличноеПоле.ТекущиеДанные[ДанныеКолонки]; - ДоступноСравнениеРавно = Не ЛиОписаниеТиповНеограниченнойСтрокиЛкс(ДоступноеПоле.ТипЗначения); - Иначе // Компоновка - #Если Сервер И Не Сервер Тогда - НастройкиСписка = Новый НастройкиКомпоновкиДанных; - Отбор = Отбор.НастройкиСписка; - #КонецЕсли - ДоступноеПоле = ирОбщий.НайтиДоступноеПолеКомпоновкиПоИмениКолонкиЛкс(Отбор.ДоступныеПоляОтбора, ДанныеКолонки); - #Если Сервер И Не Сервер Тогда - ДоступноеПоле = НастройкиСписка.ДоступныеПоляВыбора.НайтиПоле(); - #КонецЕсли - Если ДоступноеПоле = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - ЭлементОтбора = ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(Отбор, ДоступноеПоле.Поле,,,,, Ложь); - ТекущееЗначениеОтбора = ЭлементОтбора.ПравоеЗначение; - ЗначениеЯчейки = ТабличноеПоле.ТекущиеДанные["" + ДоступноеПоле.Поле]; - ДоступноСравнениеРавно = ДоступноеПоле.ДоступныеВидыСравнения.НайтиПоЗначению(ВидСравненияКомпоновкиДанных.Равно) <> Неопределено; - КонецЕсли; - Если ОтборПоЗначению Тогда - Если Истина - И Не СообщитьОДобавлении - И ЭлементОтбора.Использование - И (Ложь - Или ЭлементОтбора.ВидСравнения = ВидСравнения.Равно - Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно) - Тогда - ЭлементОтбора.Использование = Ложь; - Иначе - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда - Если ДоступноСравнениеРавно Тогда - НовыйВидСравения = ВидСравнения.Равно; - Иначе - НовыйВидСравения = ВидСравнения.Содержит; - КонецЕсли; - Иначе - Если ДоступноСравнениеРавно Тогда - НовыйВидСравения = ВидСравненияКомпоновкиДанных.Равно; - Иначе - НовыйВидСравения = ВидСравненияКомпоновкиДанных.Содержит; - КонецЕсли; - КонецЕсли; - ЭлементОтбора.Использование = Истина; - ЭлементОтбора.ВидСравнения = НовыйВидСравения; - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда - // Привести значение нужно например для NULL в динамическом списке регистра бухгалтерии - ЭлементОтбора.Значение = ЭлементОтбора.ТипЗначения.ПривестиЗначение(ЗначениеЯчейки); - Иначе - ЭлементОтбора.ПравоеЗначение = ЗначениеЯчейки; - КонецЕсли; - КонецЕсли; - Иначе - Если ЭлементОтбора.Использование Тогда - Если Ложь - Или ЭлементОтбора.ВидСравнения = ВидСравнения.НеРавно - Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно - Тогда - Если Ложь - Или (Истина - И ТипЗнч(ЗначениеЯчейки) <> Тип("Булево") - И (Ложь - Или ТипЗнч(ЭлементОтбора) <> Тип("ЭлементОтбора") - Или ТипЗнч(ЗначениеЯчейки) <> Тип("УникальныйИдентификатор"))) - Или ДоступноеПоле.ТипЗначения.Типы().Количество() > 1 - Тогда - СписокЗначений = Новый СписокЗначений; - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда - НовыйВидСравения = ВидСравнения.НеВСписке; - Иначе - НовыйВидСравения = ВидСравненияКомпоновкиДанных.НеВСписке; - КонецЕсли; - СписокЗначений.Добавить(ТекущееЗначениеОтбора); - СписокЗначений.Добавить(ЗначениеЯчейки); - ЭлементОтбора.ВидСравнения = НовыйВидСравения; - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда - ЭлементОтбора.Значение = СписокЗначений; - Иначе - ЭлементОтбора.ПравоеЗначение = СписокЗначений; - КонецЕсли; - КонецЕсли; - ИначеЕсли Ложь - Или ЭлементОтбора.ВидСравнения = ВидСравнения.НеВСписке - Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке - Тогда - СписокЗначений = ТекущееЗначениеОтбора; - #Если Сервер И Не Сервер Тогда - СписокЗначений = Новый СписокЗначений; - #КонецЕсли - Если СписокЗначений.НайтиПоЗначению(ЗначениеЯчейки) = Неопределено Тогда - СписокЗначений.Добавить(ЗначениеЯчейки); - КонецЕсли; - // Для обновления отбора - ЭлементОтбора.Использование = Ложь; - ЭлементОтбора.Использование = Истина; - ИначеЕсли Ложь - Или ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке - Или ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке - Тогда - СписокЗначений = ТекущееЗначениеОтбора; - СписокЗначений.Удалить(СписокЗначений.НайтиПоЗначению(ЗначениеЯчейки)); - // Для обновления отбора - ЭлементОтбора.Использование = Ложь; - ЭлементОтбора.Использование = Истина; - Иначе - ЭлементОтбора.Использование = Ложь; - КонецЕсли; - КонецЕсли; - Если Не ЭлементОтбора.Использование Тогда - ЭлементОтбора.Использование = Истина; - Если Не ДоступноСравнениеРавно Тогда - Если Не ЗначениеЗаполнено(ЗначениеЯчейки) Тогда - // Особенность платформы - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда - //ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит; - ЭлементОтбора.Использование = Ложь; - СообщитьЛкс("В этом отборе невозможно отбросить пустое значение в строковой колонке неограниченной длины"); - Возврат Ложь; - Иначе - //ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; - КонецЕсли; - Иначе - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда - ЭлементОтбора.ВидСравнения = ВидСравнения.НеСодержит; - Иначе - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит; - КонецЕсли; - КонецЕсли; - Иначе - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда - ЭлементОтбора.ВидСравнения = ВидСравнения.НеРавно; - Иначе - ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; - КонецЕсли; - КонецЕсли; - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда - // Привести значение нужно например для NULL в динамическом списке регистра бухгалтерии - ЭлементОтбора.Значение = ЭлементОтбора.ТипЗначения.ПривестиЗначение(ЗначениеЯчейки); - Иначе - ЭлементОтбора.ПравоеЗначение = ЗначениеЯчейки; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если СообщитьОДобавлении Тогда - СообщитьЛкс(СтрШаблонИменЛкс("В отбор установлен элемент %1",, ПредставлениеЭлементаОтбораЛкс(ЭлементОтбора))); - КонецЕсли; - Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И НазначитьПользовательскийИдентификатор Тогда - ПроверитьВключитьЭлементНастроекКомпоновкиВПользовательскиеНастройки(ЭлементОтбора); - КонецЕсли; - Если ТабличноеПолеОтбора <> Неопределено Тогда - ТабличноеПолеОтбора.ТекущаяСтрока = ЭлементОтбора; - КонецЕсли; - Если КомпоновкаТП <> Неопределено Тогда - ирОбщий.ТабличноеПолеСОтборомПросмотраОтобратьЛкс(ЭтаФорма, ТабличноеПоле,,, Истина); - КонецЕсли; - Возврат Истина; -КонецФункции - -Процедура ТабличноеПолеСОтборомПросмотраОтобратьЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ИмяКолонкиНомерСтроки = "", Знач РежимОтладки = Ложь, Знач НовоеИспользованиеОтбора = Неопределено) Экспорт - - ИмяТП = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); - Если НовоеИспользованиеОтбора <> Неопределено Тогда - ЭтаФорма[ИмяТП + "ИспользоватьОтбор"] = НовоеИспользованиеОтбора; - КонецЕсли; - ТаблицаЗначений = ЭтаФорма[ИмяТП]; - #Если Сервер И Не Сервер Тогда - ТаблицаЗначений = Новый ТаблицаЗначений; - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Компоновщик = ЭтаФорма[ИмяТП + "Компоновщик"]; - #Если Сервер И Не Сервер Тогда - Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - #КонецЕсли - Попытка - СтрокаПоиска = ЭтаФорма[ИмяТП + "СтрокаПоиска"]; - Исключение - КонецПопытки; - ИскатьВПредставленияхСсылок = ТаблицаЗначений.Количество() < 30000; - ИдентификаторГруппыОтбора = "Любое %1 поле содержит все искомые слова"; - ПредставлениеГруппыОтбора = СтрШаблонЛкс(ИдентификаторГруппыОтбора, ?(ИскатьВПредставленияхСсылок, "", "строковое ")); - Если Не ЗначениеЗаполнено(ИмяКолонкиНомерСтроки) Тогда - ИмяКолонкиНомерСтроки = ИмяКолонкиВнутреннегоИДСтрокиЛкс(); - КонецЕсли; - ГруппаИли = НайтиЭлементКоллекцииЛкс(Компоновщик.Настройки.Отбор.Элементы, "ПредставлениеПользовательскойНастройки", ИдентификаторГруппыОтбора); - Если ЗначениеЗаполнено(СтрокаПоиска) Тогда - Если ТаблицаЗначений.Количество() < 1000 Тогда - // Оптимизация для ускорения компоновки макета - ЕстьБольшиеТипы = Ложь; - НеСужаемыеКолонки = Новый Массив; // Для ускорения - Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл - КоличествоТипов = Колонка.ТипЗначения.Типы().Количество(); - Если КоличествоТипов = 0 Или КоличествоТипов > 10 Тогда - ЕстьБольшиеТипы = Истина; - Иначе - НеСужаемыеКолонки.Добавить(Колонка.Имя); - КонецЕсли; - КонецЦикла; - Если ЕстьБольшиеТипы Тогда - ТаблицаБезДанныхСУзкимиТипами = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначений,,,,,, НеСужаемыеКолонки, Истина); - КонецЕсли; - КонецЕсли; - ТабличноеПолеСОтборомПросмотраОбновитьКомпоновщикЛкс(ЭтаФорма, ТабличноеПоле, Ложь, ТаблицаБезДанныхСУзкимиТипами); - СловаПоиска = РазделитьСтрокуПоискаНаСловаПоискаЛкс(СтрокаПоиска); - Если ГруппаИли = Неопределено Тогда - ГруппаИли = Компоновщик.Настройки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); - ГруппаИли.ПредставлениеПользовательскойНастройки = ИдентификаторГруппыОтбора; - КонецЕсли; - ГруппаИли.Представление = ПредставлениеГруппыОтбора; - ГруппаИли.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; - ГруппаИли.Элементы.Очистить(); - Запрос = Новый Запрос; - УсловияИЛИПоДочернимПолямСсылок = Новый Массив; - ТаблицаСсылок = Новый ТаблицаЗначений; - // Антибаг платформы 8.3 https://www.hostedredmine.com/issues/950769 - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИли, ИмяФиктивногоПоляСхемыКомпоновкиЛкс(), "й",,, Ложь); - Для Каждого ДоступноеПоле Из Компоновщик.Настройки.ДоступныеПоляОтбора.Элементы Цикл - ОписаниеТипов = Новый ОписаниеТипов(ДоступноеПоле.ТипЗначения,, ЗначенияВМассивЛкс(Тип("Null"))); - ПутьКПолю = ""; - Если ОписаниеТипов.СодержитТип(Тип("Строка")) Тогда - ПутьКПолю = "" + ДоступноеПоле.Поле; - КонецЕсли; - Если ОписаниеТипов.Типы().Количество() > 0 Тогда - ТипСсылки = ОписаниеТипов.Типы()[0]; - Если Истина - И ЛиТипСсылкиБДЛкс(ТипСсылки) - И ПоляТаблицыМДЛкс(Метаданные.НайтиПоТипу(ТипСсылки)).Найти("Наименование", "Имя") <> Неопределено - Тогда - ПутьКПолю = "" + ДоступноеПоле.Поле + ".Наименование"; - КонецЕсли; - КонецЕсли; - Если ПутьКПолю = "" Тогда - Продолжить; - КонецЕсли; - Если Найти(ПутьКПолю, ".") > 0 Тогда - // Антибаг платформы. Очень долгая компоновка при отборе по дочернему полю https://www.hostedredmine.com/issues/951093 - Если Не ИскатьВПредставленияхСсылок Тогда - Продолжить; - КонецЕсли; - ТаблицаСсылок.Колонки.Добавить("" + ДоступноеПоле.Поле, ОписаниеТипов); - УсловияИПоСловам = Новый Массив; - НомерСлова = 1; - Для Каждого Слово Из СловаПоиска Цикл - ИмяПараметраСлова = "Слово" + (УсловияИПоСловам.Количество() + 1); - УсловияИПоСловам.Добавить(СтрокаПовторомЛкс(Символы.Таб, 2) + "И " + ПутьКПолю + " ПОДОБНО &" + ИмяПараметраСлова); - НомерСлова = НомерСлова + 1; - Запрос.УстановитьПараметр(ИмяПараметраСлова, "%" + Слово + "%"); - КонецЦикла; - УсловияИЛИПоДочернимПолямСсылок.Добавить(СтрокаПовторомЛкс(Символы.Таб, 1) + "ИЛИ (ИСТИНА - |" + СтрСоединитьЛкс(УсловияИПоСловам, Символы.ПС) + ")"); - Иначе - ГруппаИ = ГруппаИли.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); - Для Каждого Слово Из СловаПоиска Цикл - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИ, ПутьКПолю, Слово, ВидСравненияКомпоновкиДанных.Содержит,, Ложь); - КонецЦикла; - КонецЕсли; - КонецЦикла; - Если ТаблицаСсылок.Колонки.Количество() > 0 Тогда - // Антибаг платформы. Очень долгая компоновка при отборе по дочернему полю https://www.hostedredmine.com/issues/951093 - НайтиДобавитьКолонкуНомераСтрокиЛкс(ТаблицаЗначений, ИмяКолонкиНомерСтроки, ТаблицаБезДанныхСУзкимиТипами); - ТаблицаСсылок.Колонки.Добавить(ИмяКолонкиНомерСтроки, Новый ОписаниеТипов("Число")); - ЗагрузитьВТаблицуЗначенийЛкс(ТаблицаЗначений, ТаблицаСсылок); - ИмяПараметра = "ВТ"; - Запрос.Текст = ТекстЗапросаПоместитьИзПараметраЛкс(ИмяПараметра, ИмяПараметра,, ТаблицаСсылок.Колонки); - Запрос.Текст = Запрос.Текст + "; - |ВЫБРАТЬ " + ИмяКолонкиНомерСтроки + " ИЗ " + ИмяПараметра + " ГДЕ ЛОЖЬ - |" + СтрСоединитьЛкс(УсловияИЛИПоДочернимПолямСсылок, Символы.ПС); - Запрос.УстановитьПараметр(ИмяПараметра, ТаблицаСсылок); - Попытка - РезультатЗапроса = Запрос.Выполнить(); - Исключение - // В типах колонок есть недопустимые для запроса типы - Запрос.УстановитьПараметр(ИмяПараметра, СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаСсылок)); - РезультатЗапроса = Запрос.Выполнить(); - КонецПопытки; - НомераСтрок = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку(0); - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ГруппаИли, ИмяКолонкиНомерСтроки, НомераСтрок,,, Ложь); - КонецЕсли; - Если ГруппаИли.Элементы.Количество() = 0 Тогда - Компоновщик.Настройки.Отбор.Элементы.Удалить(ГруппаИли); - СтрокаПоиска = ""; - ЭтаФорма[ИмяТП + "СтрокаПоиска"] = СтрокаПоиска; - Иначе - ГруппаИли.Использование = Истина; - КонецЕсли; - Иначе - Если ГруппаИли <> Неопределено Тогда - ГруппаИли.Использование = Ложь; - КонецЕсли; - КонецЕсли; - Если Не ЛиОтборУстановленЛкс(Компоновщик.Настройки.Отбор) И Не ЗначениеЗаполнено(СтрокаПоиска) Тогда - ЭтаФорма[ИмяТП + "ИспользоватьОтбор"] = Ложь; - КонецЕсли; - ИспользоватьОтбор = ЭтаФорма[ИмяТП + "ИспользоватьОтбор"]; - Если ИспользоватьОтбор Тогда - НайтиДобавитьКолонкуНомераСтрокиЛкс(ТаблицаЗначений, ИмяКолонкиНомерСтроки, ТаблицаБезДанныхСУзкимиТипами); - КлючТекущейСтроки = ТабличноеПолеКлючСтрокиЛкс(ТабличноеПоле, ИмяКолонкиНомерСтроки); - ИндексТекущейСтроки = ТабличноеПолеПозицияТекущейСтрокиЛкс(ТабличноеПоле); - ТаблицаОтобранное = ОтобратьТаблицуЗначенийКомпоновкойЛкс(ТаблицаЗначений, Компоновщик.Настройки, РежимОтладки,, ТаблицаБезДанныхСУзкимиТипами); - //ТаблицаЗначенийОтобранное1 = ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначенийОтобранное1,,,, Истина); - Если РежимОтладки Тогда - Возврат; - КонецЕсли; - ТабличноеПоле.ИзменятьСоставСтрок = Ложь; - ТабличноеПоле.Значение = ТаблицаОтобранное; - ЭтаФорма[ИмяТП + "Отобранное"] = ТаблицаОтобранное; - Если КлючТекущейСтроки <> Неопределено Тогда - ДобавитьИндексВТаблицуЛкс(ТаблицаЗначений, ИмяКолонкиНомерСтроки); - ТекущаяСтрока = СтрокаТабличнойКоллекцииПоКлючуЛкс(ТаблицаЗначений, КлючТекущейСтроки); - Для ИндексПроверяемойСтроки = ТаблицаЗначений.Индекс(ТекущаяСтрока) По Мин(ИндексТекущейСтроки + 1000, ТаблицаЗначений.Количество() - 1) Цикл - ПроверяемаяСтрока = ТаблицаЗначений[ИндексПроверяемойСтроки]; - КлючТекущейСтроки = ТабличноеПолеКлючСтрокиЛкс(ТабличноеПоле, ИмяКолонкиНомерСтроки, ПроверяемаяСтрока); - ПроекцияСтроки = СтрокаТабличнойКоллекцииПоКлючуЛкс(ТабличноеПоле.Значение, КлючТекущейСтроки); - Если ПроекцияСтроки <> Неопределено Тогда - ТабличноеПоле.ТекущаяСтрока = ПроекцияСтроки; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе - УстановитьСвойствоВКоллекцииЛкс(Компоновщик.Настройки.Отбор.Элементы, "Использование", Ложь); - Если ТабличноеПоле.Значение = ТаблицаЗначений Тогда - Возврат; - КонецЕсли; - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - Если ДопСвойства.НачальноеИзменятьСоставСтрок Тогда - ТабличноеПоле.ИзменятьСоставСтрок = Истина; - КонецЕсли; - //КлючТекущейСтроки = ТабличноеПолеКлючСтрокиЛкс(ТабличноеПоле, ИмяКолонкиНомерСтроки); - СостояниеСтрок = ТабличноеПолеСостояниеСтрокЛкс(ТабличноеПоле, ИмяКолонкиНомерСтроки); - //ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(ТаблицаЗначений, ТаблицаОтобранное); - ЭтаФорма[ИмяТП + "Отобранное"] = ТаблицаЗначений; - ТабличноеПоле.Значение = ТаблицаЗначений; - //ТабличноеПолеВосстановитьТекущуюСтрокуЛкс(ТабличноеПоле, КлючТекущейСтроки); - ТабличноеПолеВосстановитьСостояниеСтрокЛкс(ТабличноеПоле, СостояниеСтрок); - КонецЕсли; - ТабличноеПолеОбновитьТекстыПодваловЛкс(ЭтаФорма, ТабличноеПоле); - ИмяМетода = ИмяТП + "ПослеОтбора"; - Если МетодРеализованЛкс(ЭтаФорма, ИмяМетода) Тогда - Выполнить("ЭтаФорма." + ИмяМетода + "()"); - КонецЕсли; - -КонецПроцедуры - -Процедура ТабличноеПолеСОтборомПросмотраПриОкончанииРедактированияЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ИмяКолонкиНомерСтроки = "") Экспорт - - ИмяТП = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); - Если Не ЭтаФорма[ИмяТП + "ИспользоватьОтбор"] Тогда - Возврат; - КонецЕсли; - Если Не ЗначениеЗаполнено(ИмяКолонкиНомерСтроки) Тогда - ИмяКолонкиНомерСтроки = ИмяКолонкиВнутреннегоИДСтрокиЛкс(); - КонецЕсли; - ТаблицаЗначений = ЭтаФорма[ИмяТП]; - #Если Сервер И Не Сервер Тогда - ТаблицаЗначений = Новый ТаблицаЗначений; - #КонецЕсли - ТаблицаПолная = ЭтаФорма[ИмяТП]; - ТекущаяСтрокаПолная = ТаблицаПолная[ТабличноеПоле.ТекущиеДанные[ИмяКолонкиНомерСтроки] - 1]; - ЗаполнитьЗначенияСвойств(ТекущаяСтрокаПолная, ТабличноеПоле.ТекущиеДанные); - -КонецПроцедуры - -// Функция - Разделить строку поиска на слова поиска лкс -// -// Параметры: -// СтрокаПоиска - - -// ВыделитьРодителя - Булево - Часть до первой точки трактуется как слово поиска в родителе (для дерева), но если точки нет то этот параметр станет Ложь -// -// Возвращаемое значение: -// - Массив строк -// -Функция РазделитьСтрокуПоискаНаСловаПоискаЛкс(Знач СтрокаПоиска, ВыделитьРодителя = Ложь) Экспорт - - УИД = "" + Новый УникальныйИдентификатор; - СтрокаПоиска = СтрЗаменить(СтрокаПоиска, """""", УИД); - Фрагменты = СтрРазделитьЛкс(СтрокаПоиска, """"); - СловаПоиска = Новый Массив; - Для Индекс = 0 По Фрагменты.ВГраница() Цикл - Фрагмент = СтрЗаменить(Фрагменты[Индекс], УИД, """"); - Если Индекс % 2 = 0 Тогда - СкопироватьУниверсальнуюКоллекциюЛкс(СтрРазделитьЛкс(Фрагмент, " ", Истина, Ложь), СловаПоиска); - Иначе - СловаПоиска.Добавить(Фрагмент); - КонецЕсли; - КонецЦикла; - Если ВыделитьРодителя Тогда - ВыделитьРодителя = Ложь; - ПозицияТочки = Найти(СловаПоиска[0], "."); - Если ПозицияТочки > 0 Тогда - СловоРодителя = СокрП(Лев(СловаПоиска[0], ПозицияТочки - 1)); - Если СловоРодителя <> "" Тогда - НовоеСлово = СокрЛ(Сред(СловаПоиска[0], ПозицияТочки + 1)); - Если НовоеСлово = "" Тогда - СловаПоиска.Удалить(0); - ВыделитьРодителя = СловаПоиска.Количество() > 0; - Если Не ВыделитьРодителя Тогда - СловоРодителя = СловоРодителя + "."; // Возвращаем точку обратно - КонецЕсли; - Иначе - СловаПоиска[0] = НовоеСлово; - ВыделитьРодителя = Истина; - КонецЕсли; - СловаПоиска.Вставить(0, СловоРодителя); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат СловаПоиска; - -КонецФункции - -Процедура НайтиДобавитьКолонкуНомераСтрокиЛкс(Знач ТаблицаЗначений, Знач ИмяКолонкиНомерСтроки, Знач ТаблицаБезДанныхСУзкимиТипами = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТаблицаЗначений = Новый ТаблицаЗначений; - #КонецЕсли - Если ТаблицаЗначений.Колонки.Найти(ИмяКолонкиНомерСтроки) = Неопределено Тогда - ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиНомерСтроки, Новый ОписаниеТипов("Число")); - Если ТаблицаБезДанныхСУзкимиТипами <> Неопределено Тогда - ТаблицаБезДанныхСУзкимиТипами.Колонки.Добавить(ИмяКолонкиНомерСтроки, Новый ОписаниеТипов("Число")); - КонецЕсли; - Счетчик = 1; - Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл - СтрокаТаблицы[ИмяКолонкиНомерСтроки] = Счетчик; - Счетчик = Счетчик + 1; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -Функция ТабличноеПолеСОтборомПросмотраОбновитьПредставлениеЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач РазрешитьРучноеВключение = Ложь) Экспорт - - КомпоновкаТП = КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); - Если КомпоновкаТП = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Компоновщик = КомпоновкаТП.Компоновщик; - ТаблицаЗначений = КомпоновкаТП.ТаблицаЗначений; - ТаблицаОтобранное = КомпоновкаТП.ТаблицаОтобранное; - ИспользоватьОтбор = КомпоновкаТП.ИспользоватьОтбор; - НадписьОтборПросмотра = КомпоновкаТП.НадписьОтборПросмотра; - ФлажокИспользоватьОтбор = КомпоновкаТП.ФлажокИспользоватьОтбор; - #Если Сервер И Не Сервер Тогда - Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - ТаблицаЗначений = Новый ТаблицаЗначений; - ТаблицаОтобранное = Новый ТаблицаЗначений; - #КонецЕсли - Пустой = Ложь; - Результат = ПредставлениеОтбораЛкс(Компоновщик.Настройки.Отбор, Пустой); - Если Не Пустой Тогда - Результат = XMLСтрока(ТаблицаОтобранное.Количество()) + "/" + XMLСтрока(ТаблицаЗначений.Количество() - ТаблицаОтобранное.Количество()) + " - " + Результат; - КонецЕсли; - ирОбщий.ПрисвоитьЕслиНеРавноЛкс(НадписьОтборПросмотра.Заголовок, Результат); - Если Не РазрешитьРучноеВключение Тогда - ФлажокИспользоватьОтбор.Доступность = ИспользоватьОтбор; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Процедура ТабличноеПолеСОтборомПросмотраУстановитьДанныеЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ОтключитьОтбор = Истина) Экспорт - - ИмяТП = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); - Если ОтключитьОтбор Тогда - ЭтаФорма[ИмяТП + "ИспользоватьОтбор"] = Ложь; - КонецЕсли; - ТабличноеПоле.Значение = ЭтаФорма[ИмяТП]; - ТабличноеПолеСОтборомПросмотраОбновитьКомпоновщикЛкс(ЭтаФорма, ТабличноеПоле); - ТабличноеПолеСОтборомПросмотраОтобратьЛкс(ЭтаФорма, ТабличноеПоле); - -КонецПроцедуры - -Процедура ТабличноеПолеСОтборомПросмотраОбновитьКомпоновщикЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач УстановитьПодсказкуФлажка = Истина, Знач ТаблицаБезДанныхСУзкимиТипами = Неопределено) Экспорт - - КомпоновкаТП = КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); - Если ТаблицаБезДанныхСУзкимиТипами = Неопределено Тогда - ТаблицаБезДанныхСУзкимиТипами = КомпоновкаТП.ТаблицаЗначений; - КонецЕсли; - СхемаКомпоновки = СоздатьСхемуПоТаблицеЗначенийЛкс(ТаблицаБезДанныхСУзкимиТипами); - Компоновщик = КомпоновкаТП.Компоновщик; - #Если Сервер И Не Сервер Тогда - Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - #КонецЕсли - Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); - Компоновщик.Настройки.Выбор.Элементы.Очистить(); - Если КомпоновкаТП.НадписьОтборПросмотра <> Неопределено Тогда - КомпоновкаТП.НадписьОтборПросмотра.Подсказка = "<Количество отобрано>/<Количество отброшено> - <Условия отбора>"; - КонецЕсли; - Если КомпоновкаТП.ФлажокИспользоватьОтбор <> Неопределено И УстановитьПодсказкуФлажка Тогда - КомпоновкаТП.ФлажокИспользоватьОтбор.Подсказка = - "Отбор просмотра включает режим отображения в табличном поле только строк, отвечающих условиям отбора. - |При этом отключается возможность добавления/удаления строк данных табличного поля."; - КонецЕсли; - КомпоновщикНастроекВосстановитьЛкс(Компоновщик); - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле); - ДопСвойства.Вставить("НачальноеИзменятьСоставСтрок", ТабличноеПоле.ИзменятьСоставСтрок); - -КонецПроцедуры - -Функция ЗагрузитьЗначениеИзФайлаИнтерактивноЛкс(Знач Расширение = "", Знач ОписаниеФормата = "", Знач Сжатие = Истина) Экспорт - - Если Не ЗначениеЗаполнено(Расширение) И Сжатие Тогда - Расширение = "zip"; - КонецЕсли; - ПолноеИмяФайла = ВыбратьФайлЛкс(, Расширение, ОписаниеФормата); - Если ПолноеИмяФайла = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Результат = ЗагрузитьЗначениеИзФайлаЛкс(ПолноеИмяФайла, Сжатие); - Возврат Результат; - -КонецФункции - -Функция СохранитьЗначениеВФайлИнтерактивноЛкс(Знач Значение, Знач Расширение = "", Знач ОписаниеФормата = "", Знач Сжатие = Истина, Знач УровеньСжатия = Неопределено, Знач Заголовок = "") Экспорт - - Если Не ЗначениеЗаполнено(Расширение) И Сжатие Тогда - Расширение = "zip"; - КонецЕсли; - ПолноеИмяФайла = ВыбратьФайлЛкс(Ложь, Расширение, ОписаниеФормата,,,, Заголовок); - Если ПолноеИмяФайла = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - Результат = СохранитьЗначениеВФайлЛкс(Значение, ПолноеИмяФайла, Сжатие, УровеньСжатия); - Возврат Результат; - -КонецФункции - -Функция ВыбратьРедактируемыйТипЛкс(Знач ОграничениеТипа = Неопределено, Знач ТолькоПросмотр = Ложь, Знач НачальноеЗначениеВыбора = Неопределено, Знач ВладелецФормы = Неопределено, - ЗакрыватьПриВыборе = Истина, Знач Заголовок = "") Экспорт - - Если ОграничениеТипа = Неопределено Тогда - ОграничениеТипа = Новый ОписаниеТипов; - КонецЕсли; - ФормаРедактора = ирКэш.Получить().ПолучитьФорму("ВыборРедактируемыхТипов", ВладелецФормы); - ФормаРедактора.ОграничениеТипа = ОграничениеТипа; - ФормаРедактора.ЗакрыватьПриВыборе = ЗакрыватьПриВыборе; - ФормаРедактора.НачальноеЗначениеВыбора = НачальноеЗначениеВыбора; - ФормаРедактора.РежимВыбора = Истина; - ФормаРедактора.МножественныйВыбор = Ложь; - Если ЗначениеЗаполнено(Заголовок) Тогда - ФормаРедактора.Заголовок = Заголовок; - КонецЕсли; - ФормаРедактора.ТолькоПросмотр = ТолькоПросмотр; - РезультатВыбора = ФормаРедактора.ОткрытьМодально(); - Возврат РезультатВыбора; - -КонецФункции - -Функция РедактироватьОписаниеРедактируемыхТиповЛкс(ОграничениеТипаИлиПолеВвода, ТолькоПросмотр = Ложь) Экспорт - - Если ТипЗнч(ОграничениеТипаИлиПолеВвода) = Тип("ОписаниеТипов") Тогда - ВладелецФормы = Неопределено; - ОграничениеТипа = ОграничениеТипаИлиПолеВвода; - Иначе - ВладелецФормы = ОграничениеТипаИлиПолеВвода; - ОграничениеТипа = ОграничениеТипаИлиПолеВвода.Значение; - КонецЕсли; - ФормаРедактора = ирКэш.Получить().ПолучитьФорму("ВыборРедактируемыхТипов", ВладелецФормы); - //ФормаРедактора.ОграничениеТипа = ОграничениеТипа; - ФормаРедактора.НачальноеЗначениеВыбора = ОграничениеТипа; - ФормаРедактора.РежимВыбора = Истина; - ФормаРедактора.МножественныйВыбор = Истина; - ФормаРедактора.ТолькоПросмотр = ТолькоПросмотр; - РезультатВыбора = ФормаРедактора.ОткрытьМодально(); - Возврат РезультатВыбора; - -КонецФункции - -// ПолноеИмяНачальногоТипаВыбора - Строка - полное имя метаданного -Функция ОткрытьПодборСВыборомТипаЛкс(ВладелецФормы, Знач ОписаниеТипов = Неопределено, Знач НачальноеЗначениеВыбора = Неопределено, Знач ИспользоватьДинамическийСписокИР = Истина, - Знач ПриПустомОписанииТиповРазрешатьВсе = Ложь, Знач СтруктураОтбора = Неопределено) Экспорт - - ЕстьТипТип = Ложь; - Если ТипЗнч(ОписаниеТипов) = Тип("Строка") Тогда - ДоступныеОбъекты = СтрРазделитьЛкс(ОписаниеТипов, ",", Истина); - ИначеЕсли ОписаниеТипов <> Неопределено Тогда - ДоступныеОбъекты = Новый Массив(); - ЕстьТипТип = Ложь; - Для Каждого Тип Из ОписаниеТипов.Типы() Цикл - Если Тип = Тип("Тип") Тогда - ЕстьТипТип = Истина; - Иначе - ПолноеИмяМД = ПолучитьПолноеИмяМДТипаЛкс(Тип); - Если ЗначениеЗаполнено(ПолноеИмяМД) Тогда - ДоступныеОбъекты.Добавить(ПолноеИмяМД); - КонецЕсли; - КонецЕсли; - КонецЦикла; - Если ДоступныеОбъекты.Количество() = 0 И ПриПустомОписанииТиповРазрешатьВсе Тогда - ДоступныеОбъекты = Неопределено; - КонецЕсли; - КонецЕсли; - Если Истина - И ДоступныеОбъекты = Неопределено - И (Ложь - Или ЕстьТипТип - Или (Истина - И ОписаниеТипов = Неопределено - И ТипЗнч(НачальноеЗначениеВыбора) = Тип("Тип"))) - Тогда - Возврат ВыбратьРедактируемыйТипЛкс(,, НачальноеЗначениеВыбора, ВладелецФормы, Ложь); - КонецЕсли; - Если НачальноеЗначениеВыбора <> Неопределено Тогда - ТипНачальногоЗначенияВыбора = ТипОбъектаБДЛкс(НачальноеЗначениеВыбора); - ПолноеИмяНачальногоТипаВыбора = ПолучитьПолноеИмяМДТипаЛкс(ТипНачальногоЗначенияВыбора); - КонецЕсли; - Если Ложь - Или ДоступныеОбъекты = Неопределено - Или ДоступныеОбъекты.Количество() = 0 - Или ДоступныеОбъекты.Количество() > 1 - Тогда - Форма = ирКэш.Получить().ПолучитьФорму("ВыборОбъектаМетаданных", ВладелецФормы); - лСтруктураПараметров = Новый Структура; - лСтруктураПараметров.Вставить("ДоступныеОбъекты", ДоступныеОбъекты); - лСтруктураПараметров.Вставить("ОтображатьСсылочныеОбъекты", Истина); - лСтруктураПараметров.Вставить("ОтображатьВнешниеИсточникиДанных", Истина); - лСтруктураПараметров.Вставить("НачальноеЗначениеВыбора", ПолноеИмяНачальногоТипаВыбора); - Форма.НачальноеЗначениеВыбора = лСтруктураПараметров; - Результат = Форма.ОткрытьМодально(); - Если Результат = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - ПолноеИмяМД = Результат.ПолноеИмяОбъекта; - Иначе - ПолноеИмяМД = ДоступныеОбъекты[0]; - КонецЕсли; - Если Не ЗначениеЗаполнено(ПолноеИмяМД) Тогда - Возврат Неопределено; - КонецЕсли; - Если ПолноеИмяНачальногоТипаВыбора <> ПолноеИмяМД Тогда - НачальноеЗначениеВыбора = Неопределено; - КонецЕсли; - ТекущаяСтрока = Неопределено; - Отбор = СтруктураОтбора; - Если НачальноеЗначениеВыбора <> Неопределено Тогда - ИмяXMLТипа = СериализаторXDTO.XMLТип(ТипНачальногоЗначенияВыбора).ИмяТипа; - Если Ложь - Или Найти(ИмяXMLТипа, "Ref.") > 0 - Или Найти(ИмяXMLТипа, "RecordKey.") > 0 - Тогда - ТекущаяСтрока = НачальноеЗначениеВыбора; - Иначе - Отбор = НачальноеЗначениеВыбора.Методы.Отбор; - КонецЕсли; - КонецЕсли; - ФормаВыбора = ОткрытьФормуСпискаЛкс(ПолноеИмяМД, Отбор, ИспользоватьДинамическийСписокИР, ВладелецФормы, Истина, Истина, ТекущаяСтрока); - Возврат ФормаВыбора; - -КонецФункции - -Функция ФормаВыбораОбъектаМетаданныхЛкс(Знач ВладелецФормы, Знач КлючУникальности, Знач НачальноеЗначениеВыбора, МножественныйВыбор = Ложь, ОтображатьСсылочныеОбъекты = Ложь, - ОтображатьВыборочныеТаблицы = Ложь, ОтображатьРегистры = Ложь, ОтображатьПоследовательности = Ложь, ОтображатьКонстанты = Ложь, ОтображатьТабличныеЧасти = Ложь, - ОтображатьТаблицыИзменений = Ложь, ОтображатьВнешниеИсточникиДанных = Ложь, ЗапретитьВыбиратьСсылочныеОбъекты = Ложь, ТолькоИспользованиеПолнотекстовогоПоиска = Ложь, - ОтображатьПеречисления = Ложь, Знач Фильтр = "", ОтображатьОбработки = Ложь, ОтображатьОтчеты = Ложь, ОтображатьПерерасчеты = Ложь, ОтображатьРегламентныеЗадания = Ложь, - ОтображатьСетевыеСервисы = Ложь, ОтображатьРоли = Ложь) Экспорт - - лСтруктураПараметров = ПараметрыВыбораОбъектаМетаданныхЛкс(ОтображатьСсылочныеОбъекты, ОтображатьВыборочныеТаблицы, ОтображатьРегистры, ОтображатьПоследовательности, - ОтображатьКонстанты, ОтображатьТабличныеЧасти, ОтображатьТаблицыИзменений, ОтображатьВнешниеИсточникиДанных, ЗапретитьВыбиратьСсылочныеОбъекты, ТолькоИспользованиеПолнотекстовогоПоиска, - ОтображатьПеречисления, ОтображатьОбработки, ОтображатьОтчеты, ОтображатьПерерасчеты, МножественныйВыбор, ОтображатьРегламентныеЗадания, ОтображатьСетевыеСервисы, ОтображатьРоли); - Форма = ПолучитьФормуВыбораОбъектаМетаданныхСтруктуройЛкс(ВладелецФормы, КлючУникальности, НачальноеЗначениеВыбора, лСтруктураПараметров, Фильтр); - Возврат Форма; - -КонецФункции - -Функция ПолучитьФормуВыбораОбъектаМетаданныхСтруктуройЛкс(Знач ВладелецФормы, Знач КлючУникальности, Знач НачальноеЗначениеВыбора, Знач лСтруктураПараметров, Знач Фильтр = "") Экспорт - - Форма = ирКэш.Получить().ПолучитьФорму("ВыборОбъектаМетаданных", ВладелецФормы, КлючУникальности); - лСтруктураПараметров.Вставить("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); - лСтруктураПараметров.Вставить("Фильтр", Фильтр); - Форма.НачальноеЗначениеВыбора = лСтруктураПараметров; - Возврат Форма; - -КонецФункции - -Функция ФормаВыбораКолонокБДЛкс(Знач ВладелецФормы, Знач НачальноеЗначениеВыбора = Неопределено, Знач Отбор = Неопределено, Знач МножественныйВыбор = Ложь, Знач КлючУникальности = Неопределено) Экспорт - - Форма = ПолучитьФормуЛкс("Обработка.ирКолонкиБД.Форма",, ВладелецФормы, КлючУникальности); - Форма.РежимВыбора = Истина; - Форма.ПараметрОтбор = Отбор; - Форма.МножественныйВыбор = МножественныйВыбор; - Форма.НачальноеЗначениеВыбора = НачальноеЗначениеВыбора; - Возврат Форма; - -КонецФункции - -Функция ФормаСтруктурыХраненияТаблицыБДЛкс() Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Если мПлатформа.мСтруктураХраненияБДСРазмерами = Неопределено Тогда - СтруктураХраненияСРазмерами = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирСтруктураХраненияБД"); - #Если Сервер И Не Сервер Тогда - СтруктураХраненияСРазмерами = Обработки.ирСтруктураХраненияБД.Создать(); - #КонецЕсли - мПлатформа.мСтруктураХраненияБДСРазмерами = СтруктураХраненияСРазмерами; - КонецЕсли; - СтруктураХраненияСРазмерами = мПлатформа.мСтруктураХраненияБДСРазмерами; - СтруктураХраненияСРазмерами.ПоказыватьРазмеры = Истина; - СтруктураХраненияСРазмерами.ОбщаяТаблицаИндексов = Ложь; // Так быстрее - СтруктураХраненияСРазмерами.ОбщаяТаблицаПолей = Ложь; // Так быстрее - Форма = мПлатформа.мСтруктураХраненияБДСРазмерами.ПолучитьФорму(,, "ПоОбъекту"); - Форма.ПараметрПоказыватьSDBL = Истина; - Форма.ПараметрПоказыватьСУБД = Истина; - Если Форма.Открыта() Тогда - Форма.Закрыть(); - КонецЕсли; - Возврат Форма; - -КонецФункции - -Функция ПараметрыВыбораОбъектаМетаданныхЛкс(ОтображатьСсылочныеОбъекты = Ложь, ОтображатьВыборочныеТаблицы = Ложь, ОтображатьРегистры = Ложь, ОтображатьПоследовательности = Ложь, - ОтображатьКонстанты = Ложь, ОтображатьТабличныеЧасти = Ложь, ОтображатьТаблицыИзменений = Ложь, ОтображатьВнешниеИсточникиДанных = Ложь, ЗапретитьВыбиратьСсылочныеОбъекты = Ложь, - ТолькоИспользованиеПолнотекстовогоПоиска = Ложь, ОтображатьПеречисления = Ложь, ОтображатьОбработки = Ложь, ОтображатьОтчеты = Ложь, ОтображатьПерерасчеты = Ложь, МножественныйВыбор = Ложь, - ОтображатьРегламентныеЗадания = Ложь, ОтображатьСетевыеСервисы = Ложь, ОтображатьРоли = Ложь, ОтображатьПодсистемы = Ложь, ОтображатьВиртуальныеТаблицы = Ложь) Экспорт - - Параметры = Новый Структура; - Параметры.Вставить("ОтображатьКонстанты", ОтображатьКонстанты); - Параметры.Вставить("ОтображатьВыборочныеТаблицы", ОтображатьВыборочныеТаблицы); - Параметры.Вставить("ОтображатьТаблицыИзменений", ОтображатьТаблицыИзменений); - Параметры.Вставить("ОтображатьТабличныеЧасти", ОтображатьТабличныеЧасти); - Параметры.Вставить("ОтображатьРегистры", ОтображатьРегистры); - Параметры.Вставить("ОтображатьПерерасчеты", ОтображатьПерерасчеты); - Параметры.Вставить("ОтображатьПоследовательности", ОтображатьПоследовательности); - Параметры.Вставить("ОтображатьСсылочныеОбъекты", ОтображатьСсылочныеОбъекты); - Параметры.Вставить("ОтображатьВнешниеИсточникиДанных", ОтображатьВнешниеИсточникиДанных); - Параметры.Вставить("ОтображатьПеречисления", ОтображатьПеречисления); - Параметры.Вставить("ОтображатьОбработки", ОтображатьОбработки); - Параметры.Вставить("ОтображатьОтчеты", ОтображатьОтчеты); - Параметры.Вставить("ТолькоИспользованиеПолнотекстовогоПоиска", ТолькоИспользованиеПолнотекстовогоПоиска); - Параметры.Вставить("ЗапретитьВыбиратьСсылочныеОбъекты", ЗапретитьВыбиратьСсылочныеОбъекты); - Параметры.Вставить("МножественныйВыбор", МножественныйВыбор); - Параметры.Вставить("ОтображатьРегламентныеЗадания", ОтображатьРегламентныеЗадания); - Параметры.Вставить("ОтображатьСетевыеСервисы", ОтображатьСетевыеСервисы); - Параметры.Вставить("ОтображатьРоли", ОтображатьРоли); - Параметры.Вставить("ОтображатьПодсистемы", ОтображатьПодсистемы); - Параметры.Вставить("ОтображатьВиртуальныеТаблицы", ОтображатьВиртуальныеТаблицы); - Возврат Параметры; - -КонецФункции - -Процедура ОбъектМетаданныхНачалоВыбораЛкс(Знач Элемент, Знач ПараметрыВыбораОбъектаМетаданных, СтандартнаяОбработка) Экспорт - - СтандартнаяОбработка = Ложь; - ФормаВыбора = ПолучитьФормуВыбораОбъектаМетаданныхСтруктуройЛкс(,, ДанныеЭлементаФормыЛкс(Элемент), ПараметрыВыбораОбъектаМетаданных); - РезультатВыбора = ФормаВыбора.ОткрытьМодально(); - Если РезультатВыбора <> Неопределено Тогда - ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, РезультатВыбора.ПолноеИмяОбъекта); - КонецЕсли; - -КонецПроцедуры - -Процедура ОбъектМетаданныхОкончаниеВводаТекстаЛкс(Знач Элемент, Знач ПараметрыВыбораОбъектаМетаданных, Текст, Значение, СтандартнаяОбработка) Экспорт - - Если ЗначениеЗаполнено(Текст) Тогда - СтандартнаяОбработка = Ложь; - Значение = Новый СписокЗначений; - Если ирОбщий.ЛиТаблицаБДСуществуетЛкс(Текст) Тогда - Значение.Добавить(Текст); - Иначе - ФормаВыбора = ирОбщий.ПолучитьФормуВыбораОбъектаМетаданныхСтруктуройЛкс(Элемент,, ДанныеЭлементаФормыЛкс(Элемент), ПараметрыВыбораОбъектаМетаданных, Текст); - РезультатВыбора = ФормаВыбора.ОткрытьМодально(); - Если РезультатВыбора <> Неопределено Тогда - Значение.Добавить(РезультатВыбора.ПолноеИмяОбъекта); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ПолучитьФормуВыбораТаблицыСтруктурыБДЛкс(ЛиИменаБД, ИмяТаблицыХранения = "") Экспорт - - Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирСтруктураХраненияБД.Форма",,, Истина); - Форма.РежимВыбора = Истина; - Форма.ПараметрИмяТаблицыХранения = ИмяТаблицыХранения; - Форма.ПараметрПоказыватьSDBL = Не ЛиИменаБД; - Форма.ПараметрПоказыватьСУБД = ЛиИменаБД; - Возврат Форма - -КонецФункции - -Функция РедактироватьАлгоритмЧерезСтрокуXMLЛкс(СтрокаXMLАлгоритма, ВнешниеПараметры = Неопределено, НаСервере = Ложь, ИмяАлгоритма = "", Знач ТекстНового = "") Экспорт - - СтруктураАлгоритма = ирОбщий.ОбъектИзСтрокиXMLЛкс(СтрокаXMLАлгоритма); - Результат = РедактироватьАлгоритмЧерезСтруктуруЛкс(СтруктураАлгоритма, ВнешниеПараметры,, НаСервере, ИмяАлгоритма, ТекстНового); - Если Результат Тогда - Если СтруктураАлгоритма = Неопределено Тогда - СтрокаXMLАлгоритма = ""; - Иначе - СтрокаXMLАлгоритма = ирОбщий.ОбъектВСтрокуXMLЛкс(СтруктураАлгоритма); - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Открыть редактирование текста алгоритма с параметрами в консоли кода -// Парамерты: -// СтруктураАлгоритма - Структура - возвращаемый -// "ТекстАлгоритма" - Строка - текст алгоритма, -// "ВнутренниеПараметры" - ТаблицаЗначений - таблица с конструктором НоваяТаблицаПараметровАлгоритмаЛкс с внутренними (значения определяются при редактировании) параметрами алгоритма; -// ВнешниеПараметры* - ТаблицаЗначений - таблица с конструктором НоваяТаблицаПараметровАлгоритмаЛкс с внешними (значения определяются при каждом выполнении) параметрами алгоритма; -// Методы* - ТаблицаЗначений - таблица с конструктором НоваяТаблицаМетодовПодсказкиЛкс с дополнительными методами доступными в алгоритме; -// Результат - Булево - принял ли изменения пользователь -Функция РедактироватьАлгоритмЧерезСтруктуруЛкс(СтруктураАлгоритма, ВнешниеПараметры = Неопределено, Методы = Неопределено, НаСервере = Ложь, ИмяАлгоритма = "", Знач ТекстНового = "") Экспорт - - #Если Сервер И Не Сервер Тогда - ВнешниеПараметры = Новый ТаблицаЗначений; - #КонецЕсли - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ОбработкаКонсольКода = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольКода"); - ФормаКонсоли = ОбработкаКонсольКода.ПолучитьФорму(); - Если ВнешниеПараметры <> Неопределено Тогда - КопияПараметров = ВнешниеПараметры.Скопировать(); - Если КопияПараметров.Колонки.Найти("ТаблицаСтруктурТипов") = Неопределено Тогда - КопияПараметров.Колонки.Добавить("ТаблицаСтруктурТипов"); - КонецЕсли; - Если КопияПараметров.Колонки.Найти("Значение") = Неопределено Тогда - КопияПараметров.Колонки.Добавить("Значение"); - КонецЕсли; - Если КопияПараметров.Колонки.Найти("Фиксированный") = Неопределено Тогда - КопияПараметров.Колонки.Добавить("Фиксированный"); - КонецЕсли; - Для Каждого СтрокаПараметра Из КопияПараметров Цикл - Если Истина - И ТипЗнч(СтрокаПараметра.ТипЗначения) = Тип("ОписаниеТипов") - И СтрокаПараметра.ТаблицаСтруктурТипов = Неопределено - Тогда - СтрокаПараметра.ТаблицаСтруктурТипов = мПлатформа.ТаблицаСтруктурТиповИзОписанияТипов(СтрокаПараметра.ТипЗначения); - КонецЕсли; - КонецЦикла; - КопияПараметров.ЗаполнитьЗначения(Истина, "Фиксированный"); - ФормаКонсоли.мСписокВнешнихПараметров = КопияПараметров; - КонецЕсли; - Если СтруктураАлгоритма <> Неопределено Тогда - Если СтруктураАлгоритма.Свойство("ТекстАлгоритма") Тогда - ФормаКонсоли.ПараметрТекст = СтруктураАлгоритма.ТекстАлгоритма; - КонецЕсли; - Если СтруктураАлгоритма.Свойство("ВнутренниеПараметры") Тогда - ЗагрузитьВТаблицуЗначенийЛкс(СтруктураАлгоритма.ВнутренниеПараметры, КопияПараметров, Новый Структура("Вход", Истина)); - КонецЕсли; - Иначе - ФормаКонсоли.ПараметрТекст = ТекстНового; - КонецЕсли; - ФормаКонсоли.ПараметрНаСервере = НаСервере; - ФормаКонсоли.мМетоды = Методы; - ФормаКонсоли.мРежимРедактора = Истина; - ФормаКонсоли.мИмяАлгоритмаДляРедактора = ИмяАлгоритма; - ФормаКонсоли.ОткрытьМодально(); - РезультатФормы = ФормаКонсоли.РезультатФормы; - Результат = РезультатФормы <> Неопределено; - Если Результат Тогда - ВнутренниеПараметры = РезультатФормы.Параметры.Скопировать(Новый Структура("Вход, Фиксированный", Истина, Ложь), "Имя, Значение"); - Если Истина - И ВнутренниеПараметры.Количество() = 0 - И Не ЗначениеЗаполнено(РезультатФормы.Текст) - Тогда - СтруктураАлгоритма = Неопределено; - Иначе - СтруктураАлгоритма = Новый Структура("ТекстАлгоритма, ВнутренниеПараметры", РезультатФормы.Текст, ВнутренниеПараметры); - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Конструктор таблицы параметров алгоритма -// Результат - ТаблицаЗначений - колонки "Имя, Значение, Вход, Выход, ТипЗначения, Комментарий" -Функция НоваяТаблицаПараметровАлгоритмаЛкс() Экспорт - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("Значение"); - Результат.Колонки.Добавить("Вход", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("Выход", Новый ОписаниеТипов("Булево")); - Результат.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов")); - Результат.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ТаблицаСтруктурТипов"); - Возврат Результат; - -КонецФункции - -// Конструктор таблицы методов контекстной подсказки -// Результат - ТаблицаЗначений - колонки "Имя, ТипЗначения" -Функция НоваяТаблицаМетодовПодсказкиЛкс() Экспорт - - Результат = Новый ТаблицаЗначений; - Результат.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); - Результат.Колонки.Добавить("ТипЗначения", Новый ОписаниеТипов("ОписаниеТипов")); - Результат.Колонки.Добавить("ТаблицаСтруктурТипов"); - Возврат Результат; - -КонецФункции - -Функция СтрокаСобытияАлгоритмНачалоВыбораЛкс(Знач СтрокаСобытия, НаСервере = Ложь) Экспорт - - АлгоритмИзменен = РедактироватьАлгоритмЧерезСтрокуXMLЛкс(СтрокаСобытия.Алгоритм, СтрокаСобытия.Параметры, НаСервере, СтрокаСобытия.СинонимСобытия); - Если СтрокаСобытия.Параметры.Колонки.Найти("Значение") <> Неопределено Тогда - СтрокаСобытия.Параметры.ЗаполнитьЗначения(, "Значение"); - КонецЕсли; - Если СтрокаСобытия.Владелец().Колонки.Найти("АлгоритмОбъект") <> Неопределено Тогда - СтрокаСобытия.АлгоритмОбъект = Неопределено; - КонецЕсли; - Если СтрокаСобытия.Владелец().Колонки.Найти("ТаблицаСтруктурТипов") <> Неопределено Тогда - СтрокаСобытия.Параметры.ЗаполнитьЗначения(Неопределено, "ТаблицаСтруктурТипов"); - КонецЕсли; - Возврат АлгоритмИзменен; - -КонецФункции - -Процедура ОформитьЯчейкуАлгоритмаВТабличномПолеЛкс(Знач ОформлениеСтроки, ИмяКолонки = "Алгоритм", ОтображатьКартинку = Ложь) Экспорт - - Если ЗначениеЗаполнено(ОформлениеСтроки.ДанныеСтроки[ИмяКолонки]) Тогда - СтруктураАлгоритма = ирОбщий.ОбъектИзСтрокиXMLЛкс(ОформлениеСтроки.ДанныеСтроки[ИмяКолонки],,, Ложь); - Если СтруктураАлгоритма <> Неопределено И СтруктураАлгоритма.Свойство("ТекстАлгоритма") Тогда - ОформлениеСтроки.Ячейки[ИмяКолонки].УстановитьТекст(СокрП(СтруктураАлгоритма.ТекстАлгоритма)); - КонецЕсли; - КонецЕсли; - Если ОтображатьКартинку Тогда - ОформлениеСтроки.Ячейки[ИмяКолонки].УстановитьКартинку(ирКэш.КартинкаПоИмениЛкс("ирАлгоритм")); - КонецЕсли; - -КонецПроцедуры - -// ИсторияФайлов - СписокЗначений -// Кнопки - КнопкиКоманднойПанели -Процедура ОбновитьПодменюИсторииФайловЛкс(ИсторияФайлов, Кнопки, ИмяДействия = "ОткрытьФайлИзИстории") Экспорт - - Кнопки.Очистить(); - ДлинаПредставления = 100; - ДействиеКнопки = Новый Действие(ИмяДействия); - Для Каждого СтрокаФайла Из ИсторияФайлов Цикл - Файл = Новый Файл(СтрокаФайла.Значение); - ДлинаПути = ДлинаПредставления - СтрДлина(Файл.Имя); - Представление = Лев(Файл.Имя, ДлинаПредставления); - Если ДлинаПути > 0 Тогда - Если ДлинаПути < СтрДлина(Файл.Путь) + 3 Тогда - Представление = Лев(Файл.Путь, ДлинаПути) + "…\" + Представление; - Иначе - Представление = Файл.Путь + Представление; - КонецЕсли; - КонецЕсли; - КнопкаФайла = Кнопки.Добавить("_" + Формат(ИсторияФайлов.Индекс(СтрокаФайла), "ЧГ=;ЧН="), ТипКнопкиКоманднойПанели.Действие, Представление, ДействиеКнопки); - КонецЦикла; - -КонецПроцедуры - -Процедура ДобавитьВИсториюЭлементЛкс(СписокИстории, ЗначениеЭлемента, РазмерИстории = 20) Экспорт - - ЭлементИстории = СписокИстории.НайтиПоЗначению(ЗначениеЭлемента); - Если ЭлементИстории <> Неопределено Тогда - СписокИстории.Удалить(ЭлементИстории); - КонецЕсли; - СписокИстории.Вставить(0, ЗначениеЭлемента); - Пока СписокИстории.Количество() > РазмерИстории Цикл - СписокИстории.Удалить(РазмерИстории); - КонецЦикла; - -КонецПроцедуры - -Процедура УстановитьДоступностьПодменюЛкс(Знач Подменю, НоваяДоступность = Ложь) Экспорт - - Для Каждого Кнопка Из Подменю.Кнопки Цикл - Кнопка.Доступность = НоваяДоступность; - КонецЦикла; - -КонецПроцедуры - -Процедура ТекстВБуферОбменаОСЛкс(Знач Текст, ВариантПросмотра = "ВстроенныйЯзык") Экспорт - - // http://partners.v8.1c.ru/forum/thread.jsp?id=1075241#1075241 - Попытка - //Документ = ирКэш.Получить().СлужебноеПолеHtmlДокумента.Документ; // Так выбрасывается исключение после нескольких вызовов и сразу на 8.3.14+ - Документ = Новый COMОбъект("HTMLFILE"); // 10мс - Окно = Документ.parentWindow; - Окно.ClipboardData.SetData("Text", Текст); - Исключение - ОписаниеОшибки = ОписаниеОшибки(); // Для отладки - КонецПопытки; - Если ТекстИзБуфераОбменаОСЛкс() <> Текст Тогда - ОткрытьТекстЛкс(Текст,, ВариантПросмотра,,,, Истина); - КонецЕсли; - -Конецпроцедуры - -Функция ТекстИзБуфераОбменаОСЛкс() Экспорт - - // http://partners.v8.1c.ru/forum/thread.jsp?id=1075241#1075241 - Попытка - //Документ = ирКэш.Получить().СлужебноеПолеHtmlДокумента.Документ; // Так выбрасывается исключение после нескольких вызовов и сразу на 8.3.14+ - Документ = Новый COMОбъект("HTMLFILE"); // 10-20мс - Окно = Документ.parentWindow; - Результат = "" + Окно.ClipboardData.GetData("Text"); // Похоже здесь может вернуться не строка - Исключение - ОписаниеОшибки = ОписаниеОшибки(); // Для отладки - Результат = ""; - КонецПопытки; - Возврат Результат; - -КонецФункции - -Функция ЛиЕстьИнтерактивныйДоступКИнструментамЛкс() Экспорт - Возврат ПравоДоступа("Просмотр", Метаданные.Подсистемы.ИнструментыРазработчикаTormozit); -КонецФункции - -// . -// Параметры: -// Отбор - Структура, Отбор, *Неопределено - фиксированный отбор -// ИспользоватьДинамическийСписокИР - Булево, "Обычная" -Функция ОткрытьФормуСпискаЛкс(ИмяТаблицыИлиМДИлиТип, Отбор = Неопределено, ИспользоватьДинамическийСписокИР = Неопределено, ВладелецФормы = Неопределено, РежимВыбора = Ложь, - МножественныйВыбор = Ложь, ТекущаяСтрока = Неопределено, Модально = Ложь, ПользовательскийОтбор = Неопределено, ТекущаяКолонка = Неопределено, Знач КлючУникальности = Неопределено) Экспорт - - ФормаСписка = ПолучитьФормуСпискаЛкс(ИмяТаблицыИлиМДИлиТип, Отбор, ИспользоватьДинамическийСписокИР, ВладелецФормы, РежимВыбора, МножественныйВыбор, ТекущаяСтрока, ПользовательскийОтбор, - КлючУникальности, ТекущаяКолонка); - Если ФормаСписка = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Если Модально Тогда - Если ФормаСписка.Открыта() Тогда - ФормаСписка = ПолучитьФормуСпискаЛкс(ИмяТаблицыИлиМДИлиТип, Отбор, ИспользоватьДинамическийСписокИР, ВладелецФормы, РежимВыбора, МножественныйВыбор, ТекущаяСтрока, ПользовательскийОтбор, - Новый УникальныйИдентификатор, ТекущаяКолонка); - КонецЕсли; - Результат = ФормаСписка.ОткрытьМодально(); - Возврат Результат; - Иначе - ФормаСписка.Открыть(); - Возврат ФормаСписка; - КонецЕсли; - -КонецФункции - -// . -// Параметры: -// Отбор - Структура, Отбор, *Неопределено -// ИспользоватьДинамическийСписокИР - Булево, "Обычная" -Функция ПолучитьФормуСпискаЛкс(Знач ИмяТаблицыИлиМДИлиТип, Знач Отбор = Неопределено, Знач ИспользоватьДинамическийСписокИР = Неопределено, Знач ВладелецФормы = Неопределено, Знач РежимВыбора = Ложь, - Знач МножественныйВыбор = Ложь, Знач ТекущаяСтрока = Неопределено, Знач ПользовательскийОтбор = Неопределено, Знач КлючУникальности = Неопределено, Знач ТекущаяКолонка = Неопределено) Экспорт - - мПлатформа = ирКэш.Получить(); - Если ТипЗнч(ИмяТаблицыИлиМДИлиТип) = Тип("ОбъектМетаданных") Тогда - ИмяТаблицы = ИмяТаблицыИлиМДИлиТип.ПолноеИмя(); - ИначеЕсли ТипЗнч(ИмяТаблицыИлиМДИлиТип) = Тип("Тип") Тогда - ИмяТаблицы = ПолучитьПолноеИмяМДТипаЛкс(ИмяТаблицыИлиМДИлиТип); - Иначе - ИмяТаблицы = ИмяТаблицыИлиМДИлиТип; - КонецЕсли; - ТипТаблицы = ТипТаблицыБДЛкс(ИмяТаблицы); - //МассивФрагментов = СтрРазделитьЛкс(ПолноеИмяМД); - Если Истина - И Не ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() - И (Ложь - Или ирОбщий.ЛиТипВложеннойТаблицыБДЛкс(ТипТаблицы) - Или ТипТаблицы = "Изменения" - Или ТипТаблицы = "Перерасчет" - //Или МассивФрагментов.Количество() > 2 - ) - Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Для таблицы %1 динамический список в режиме обычного приложения не предусмотрен",, ИмяТаблицы)); - ФормаСписка = ирОбщий.ПолучитьФормуЛкс("Обработка.ирПодборИОбработкаОбъектов.Форма",,, ИмяТаблицы); - Возврат ФормаСписка; - КонецЕсли; - Если ИспользоватьДинамическийСписокИР = Неопределено Тогда - ИспользоватьДинамическийСписокИР = ИспользованиеДинамическогоСпискаВместоОсновнойФормыЛкс(ИмяТаблицы); - КонецЕсли; - Если Истина - И РежимВыбора = Истина - И ирОбщий.ЛиКорневойТипРегистраБДЛкс(ТипТаблицы) - Тогда - ИспользоватьДинамическийСписокИР = Истина; // Потому что у форм списков регистров режим выбора можно включить только через основной элемент управления - КонецЕсли; - Если ТипТаблицы = "Точки" Тогда - ИспользоватьДинамическийСписокИР = Истина; - КонецЕсли; - Если ИспользоватьДинамическийСписокИР = Неопределено Тогда - Ответ = Вопрос("Хотите использовать Динамический список (ИР)?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); - ИспользоватьДинамическийСписокИР = Ответ = КодВозвратаДиалога.Да; - КонецЕсли; - Если ПользовательскийОтбор <> Неопределено Тогда - ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; - ПользовательскийОтборКомпоновки = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных")); - Если ТипЗнч(ПользовательскийОтбор) = Тип("Отбор") Тогда - Для Каждого ЭлементОтбора Из ПользовательскийОтбор Цикл - Если ЭлементОтбора.Использование Тогда - СтрокаВидаСравнения = мПлатформа.СоответствиеВидовСравнения.Найти(ЭлементОтбора.ВидСравнения, "Построитель"); - Если СтрокаВидаСравнения = Неопределено Тогда - // %%%% Здесь можно добавить интеллекта - Продолжить; - КонецЕсли; - ЭлементОтбора = НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ПользовательскийОтборКомпоновки, ЭлементОтбора.Имя, ЭлементОтбора.Значение, СтрокаВидаСравнения.Компоновка); - ПроверитьВключитьЭлементНастроекКомпоновкиВПользовательскиеНастройки(ЭлементОтбора); - КонецЕсли; - КонецЦикла; - Иначе - СкопироватьОтборЛюбойЛкс(ПользовательскийОтборКомпоновки, ПользовательскийОтбор); - КонецЕсли; - // Важно: установка идентификатора должна выполняться в конце настройки элемента, - // иначе он будет скопирован в пользовательские настройки частично заполненным. - // Идентификатор установлен экспериментально https://partners.v8.1c.ru/forum/t/1644571/m/1644571, также подтвержден тут http://forum.infostart.ru/forum9/topic163501/message2246750/#message2246750 - ПроверитьВключитьЭлементНастроекКомпоновкиВПользовательскиеНастройки(ПользовательскийОтборКомпоновки, "dfcece9d-5077-440b-b6b3-45a5cb4538eb"); - КонецЕсли; - Если ТипЗнч(Отбор) = Тип("Отбор") Тогда - СтруктураОтбора = Новый Структура; - Для Каждого ЭлементОтбора Из Отбор Цикл - Если ЭлементОтбора.Использование Тогда - Если ЭлементОтбора.ВидСравнения = ВидСравнения.Равно Тогда - СтруктураОтбора.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение); - КонецЕсли; - КонецЕсли; - КонецЦикла; - Иначе - СтруктураОтбора = Отбор; - КонецЕсли; - ПараметрыФормы = Новый Структура("РежимВыбора, МножественныйВыбор, ЗакрыватьПриВыборе, ТекущаяСтрока, Отбор, ПользовательскиеНастройки, ТекущаяКолонка", - РежимВыбора, МножественныйВыбор, Не МножественныйВыбор, ТекущаяСтрока, СтруктураОтбора, ПользовательскиеНастройки, ТекущаяКолонка); - МожноИспользоватьДинамическийСписокИР = Истина; - #Если ТолстыйКлиентОбычноеПриложение Тогда - МожноИспользоватьДинамическийСписокИР = Ложь - Или ТипТаблицы <> "Внешняя" И ТипТаблицы <> "ВиртуальнаяТаблица" - Или Не ирКэш.ЛиПортативныйРежимЛкс(); - #КонецЕсли - Если Истина - И ИспользоватьДинамическийСписокИР <> Ложь - И МожноИспользоватьДинамическийСписокИР - Тогда - КлючУникальности = КлючУникальностиДинамическогоСпискаЛкс(ИмяТаблицы, КлючУникальности); - ПараметрыФормы.Вставить("ИмяТаблицы", ИмяТаблицы); - //Если Не РежимВыбора Тогда - // КлючУникальности = Новый УникальныйИдентификатор; - //КонецЕсли; - ФормаСписка = ФормаДинамическогоСпискаЛкс(ПараметрыФормы, ВладелецФормы, КлючУникальности, ИспользоватьДинамическийСписокИР = "Обычная"); - ФормаСписка.РежимВыбора = РежимВыбора; // Чтобы заголовок сразу правильный сформировался - ФормаСписка.УстановитьОбъектМетаданных(ИмяТаблицы); - //Попытка - // ФормаСписка.ПараметрВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.ГруппыИЭлементы; // Такого параметра у этой формы нет - //Исключение - //КонецПопытки; - ОтборДинамическогоСписка = ФормаСписка.Отбор(); - ПользовательскийОтборДинамическогоСписка = ФормаСписка.ПользовательскийОтбор(); - Иначе - Если РежимВыбора Тогда - Попытка - ФормаСписка = ПолучитьФормуЛкс(ИмяТаблицы + ".ФормаВыбора", ПараметрыФормы, ВладелецФормы, КлючУникальности); - Исключение - // Например у регистров нет форм выбора - КонецПопытки; - КонецЕсли; - Если ФормаСписка = Неопределено Тогда - ФормаСписка = ПолучитьФормуЛкс(ИмяТаблицы + ".ФормаСписка", ПараметрыФормы, ВладелецФормы, КлючУникальности); - КонецЕсли; - Если ТипЗнч(ФормаСписка) = Тип("Форма") Тогда - Попытка - ОтборДинамическогоСписка = ФормаСписка.Отбор; - Исключение - КонецПопытки; - ПользовательскийОтборДинамическогоСписка = ОтборДинамическогоСписка; - КонецЕсли; - КонецЕсли; - Если ТипЗнч(ФормаСписка) = Тип("Форма") Тогда - ФормаСписка.РежимВыбора = РежимВыбора; - ФормаСписка.ЗакрыватьПриВыборе = Не МножественныйВыбор; - ФормаСписка.НачальноеЗначениеВыбора = ТекущаяСтрока; - Попытка - ФормаСписка.МножественныйВыбор = МножественныйВыбор; - Исключение - // Есть не у всех форм - КонецПопытки; - Попытка - ФормаСписка.ПараметрТекущаяСтрока = ТекущаяСтрока; - Исключение - // Есть не у всех форм - КонецПопытки; - Попытка - ФормаСписка.ПараметрТекущаяКолонка = ТекущаяКолонка; - Исключение - // Есть не у всех форм - КонецПопытки; - КонецЕсли; - Если Истина - И ОтборДинамическогоСписка <> Неопределено - И Отбор <> Неопределено - Тогда - СкопироватьОтборЛюбойЛкс(ОтборДинамическогоСписка, Отбор,, Истина); - КонецЕсли; - Если Истина - И ПользовательскийОтборДинамическогоСписка <> Неопределено - И ПользовательскийОтбор <> Неопределено - Тогда - СкопироватьОтборЛюбойЛкс(ПользовательскийОтборДинамическогоСписка, ПользовательскийОтбор); - КонецЕсли; - Возврат ФормаСписка; - -КонецФункции - -Функция ФормаДинамическогоСпискаЛкс(ПараметрыФормы = Неопределено, ВладелецФормы = Неопределено, КлючУникальности = Неопределено, Знач ЛиОбычная = Ложь) Экспорт - - ИмяФормы = "Обработка.ирДинамическийСписок.Форма"; - Если Не ирКэш.ЛиПортативныйРежимЛкс() И Не ЛиОбычная И Не ирКэш.Получить().НеИспользоватьУправляемыеФормыИнструментов Тогда - ИмяФормы = ИмяФормы + ".ФормаУпр"; - КонецЕсли; - Если ПараметрыФормы = Неопределено Тогда - ПараметрыФормы = Новый Структура; - КонецЕсли; - ПараметрыФормы.Вставить("КлючУникальности", КлючУникальности); - Форма = ПолучитьФормуЛкс(ИмяФормы, ПараметрыФормы, ВладелецФормы, КлючУникальности); - Возврат Форма; - -КонецФункции - -Функция КлючУникальностиДинамическогоСпискаЛкс(Знач ИмяТаблицы, Знач КлючУникальности = "") Экспорт - - КлючУникальности = ИмяТаблицы + ";" + КлючУникальности; - Возврат КлючУникальности; - -КонецФункции - -Процедура ПолеФайловогоКаталога_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка) Экспорт - - СтандартнаяОбработка = Ложь; - ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - ВыборФайла.Каталог = Элемент.Значение; - Если Не ВыборФайла.Выбрать() Тогда - Возврат; - КонецЕсли; - ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, ВыборФайла.Каталог); - -КонецПроцедуры - -Функция ОткрытьСсылкуВСпискеЛкс(Ссылка) Экспорт - - ПолноеИмяМД = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя(); - СтруктураПараметры = Новый Структура; - СтруктураПараметры.Вставить("ТекущаяСтрока", Ссылка); - ФормаСписка = ПолучитьФормуЛкс(ПолноеИмяМД + ".ФормаСписка", СтруктураПараметры, , Новый УникальныйИдентификатор); - ФормаСписка.Открыть(); - Возврат ФормаСписка; - -КонецФункции - -// ИменаКолонок - Строка - имена колонок через запятую -Процедура ТабличноеПолеОтобразитьФлажкиЛкс(ОформлениеСтроки, Знач ИменаКолонок) Экспорт - - Если ТипЗнч(ИменаКолонок) = Тип("Строка") Тогда - ИменаКолонок = СтрРазделитьЛкс(ИменаКолонок, ",", Истина); - КонецЕсли; - Для Каждого ИмяКолонки Из ИменаКолонок Цикл - Ячейка = ОформлениеСтроки.Ячейки[ИмяКолонки]; - //Если Ячейка.ТолькоПросмотр Тогда - // Продолжить; - //КонецЕсли; - Если ТипЗнч(Ячейка.Значение) = Тип("Булево") Тогда - Ячейка.УстановитьФлажок(Ячейка.Значение); - Ячейка.УстановитьТекст(""); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура ТабличноеПолеПриИзмененииФлажкаЛкс(Этаформа, ТабличноеПоле, Знач Колонка, Знач КнопкаРежимаОтбораПомеченных = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если ТипЗнч(Колонка.ЭлементУправления) = Тип("ПолеВвода") Тогда - ОформлениеСтроки = ТабличноеПоле.ОформлениеСтроки(ТабличноеПоле.ТекущаяСтрока); - Ячейка = ОформлениеСтроки.Ячейки[Колонка.Имя]; - Если Не Ячейка.ТолькоПросмотр Тогда - Если Истина - И Колонка.Данные = "" - И Колонка.ДанныеФлажка = "" - Тогда - Колонка.ЭлементУправления.Значение = Не Ячейка.Значение; - //ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(Элемент, Колонка, Не ОформлениеСтроки.Ячейки[Колонка.Имя].Значение); - Иначе - //МетаданныеТипа = глПолучитьМетаданныеТипа(ТипЗнч(Элемент.Значение), "ТипСписка", Истина); - //РедактированиеВДиалоге = Ложь; - //Если Истина - // И МетаданныеТипа <> Неопределено - // И МетаданныеТипа.КлассМетаданных.Предок = оСсылочный - //Тогда - // Попытка - // ВыбранныйСпособРедактирования = Элемент.СпособРедактирования; - // Исключение - // КонецПопытки; - // РедактированиеВДиалоге = ВыбранныйСпособРедактирования <> СпособРедактированияСписка.ВСписке; - //КонецЕсли; - //РазрешитьИзменение = Истина; - //Если РедактированиеВДиалоге Тогда - //Иначе - //Элемент.ЗакончитьРедактированиеСтроки(Ложь); - ТабличноеПоле.ИзменитьСтроку(); - ЗначениеЯчейки = Колонка.ЭлементУправления.Значение; - Если ТипЗнч(ЗначениеЯчейки) = Тип("Булево") Тогда - //ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(Элемент, Колонка, Не ЗначениеЯчейки, , , Ложь); // Так возникает рассогласование флажка и данных в колонке формы ИсследовательКоллекций - ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТабличноеПоле, Колонка, Не ЗначениеЯчейки, , , Ложь, Ложь); - //Элемент.ТекущаяКолонка = Колонка; - КонецЕсли; - ТабличноеПоле.ЗакончитьРедактированиеСтроки(Ложь); - ТабличноеПолеОбновитьТекстыПодваловЛкс(ЭтаФорма, ТабличноеПоле); - //КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Истина - И КнопкаРежимаОтбораПомеченных <> Неопределено - И ТабличноеПоле.Значение.Найти(Истина, Колонка.Данные) = Неопределено - Тогда - // Сняли последний флажок. Надо снять отбор по нему - КнопкаРежимаОтбораПомеченных.Пометка = Ложь; - ТабличноеПоле.ОтборСтрок[Колонка.Данные].Использование = Ложь; - КонецЕсли; - -КонецПроцедуры - -Функция СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма, КлючНазначенияИспользования = "", Знач ЗагружатьСохранятьНастройкуПоУмолчанию = Истина, ПараметрыЗагрузкиНастройкиПоУмолчанию = Неопределено, - РасширениеФайла = "", СоставНастройкиФормы = Неопределено) Экспорт - - СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - #Если Сервер И Не Сервер Тогда - СлужебныеДанныеФормы = Новый Структура; - #КонецЕсли - МенеджерСохраненияНастроек = Новый Структура("СохраненныеНастройки, ПоследняяНастройка, КлючНастроек, ЗагружатьСохранятьНастройкуПоУмолчанию, РасширениеФайла, СоставНастройкиФормы"); - МенеджерСохраненияНастроек.КлючНастроек = КлючХраненияНастроекФормыЛкс(ЭтаФорма) + ".Настройки"; - МенеджерСохраненияНастроек.ЗагружатьСохранятьНастройкуПоУмолчанию = ЗагружатьСохранятьНастройкуПоУмолчанию; - МенеджерСохраненияНастроек.РасширениеФайла = РасширениеФайла; - МенеджерСохраненияНастроек.СоставНастройкиФормы = СоставНастройкиФормы; - Если ЗначениеЗаполнено(КлючНазначенияИспользования) Тогда - МенеджерСохраненияНастроек.КлючНастроек = МенеджерСохраненияНастроек.КлючНастроек + "." + КлючНазначенияИспользования; - КонецЕсли; - МенеджерСохраненияНастроек.КлючНастроек = Лев(МенеджерСохраненияНастроек.КлючНастроек, 128); - СохраненныеНастройкиНовые = Новый ТаблицаЗначений; - СохраненныеНастройкиНовые.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - СохраненныеНастройкиНовые.Колонки.Добавить("Значение"); - СохраненныеНастройкиНовые.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); - СохраненныеНастройкиНовые.Колонки.Добавить("ДатаИзменения", Новый ОписаниеТипов("Дата")); - МенеджерСохраненияНастроек.СохраненныеНастройки = СохраненныеНастройкиНовые; - СлужебныеДанныеФормы.МенеджерСохраненияНастроек = МенеджерСохраненияНастроек; - Попытка - СчитанныеСохраненныеНастройки = ирОбщий.ВосстановитьЗначениеЛкс(МенеджерСохраненияНастроек.КлючНастроек); - Если СчитанныеСохраненныеНастройки = Неопределено Тогда - СтарыйКлючХранения = КлючХраненияНастроекФормыЛкс(ЭтаФорма) + ".СохраненныеНастройки"; - СчитанныеСохраненныеНастройки = ирОбщий.ВосстановитьЗначениеЛкс(СтарыйКлючХранения); - Если СчитанныеСохраненныеНастройки <> Неопределено Тогда - УдалитьХранимуюНастройкуЛкс(СтарыйКлючХранения); - КонецЕсли; - КонецЕсли; - Если ТипЗнч(СчитанныеСохраненныеНастройки) = Тип("ТаблицаЗначений") Тогда - Для Каждого СтрокаСтаройНастройки Из СчитанныеСохраненныеНастройки Цикл - Если СтрокаСтаройНастройки.Значение <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(СохраненныеНастройкиНовые.Добавить(), СтрокаСтаройНастройки); - КонецЕсли; - КонецЦикла; - КонецЕсли; - ЗагрузитьНастройкуФормыПоУмолчаниюЛкс(ЭтаФорма, Не ЗагружатьСохранятьНастройкуПоУмолчанию, ПараметрыЗагрузкиНастройкиПоУмолчанию); - Исключение - СообщитьЛкс(ОписаниеОшибки(), СтатусСообщения.Внимание); - Ответ = Вопрос("При загрузке последней настройки """ + ПервыйФрагментЛкс(ЭтаФорма.Заголовок, ":") + """ возникла ошибка. Хотите загрузить пустую настройку?", РежимДиалогаВопрос.ОКОтмена); - Если Ответ = КодВозвратаДиалога.ОК Тогда - ЗагрузитьНастройкуФормыПоУмолчаниюЛкс(ЭтаФорма, Истина, ПараметрыЗагрузкиНастройкиПоУмолчанию); - Иначе - ВызватьИсключение; - КонецЕсли; - КонецПопытки; - -КонецФункции - -Процедура ЗагрузитьНастройкуФормыПоУмолчаниюЛкс(Знач ЭтаФорма, Знач ЗагрузитьПустуюНастройку = Ложь, Знач ПараметрыЗагрузкиНастройкиПоУмолчанию = Неопределено) Экспорт - - Если ЗагрузитьПустуюНастройку Тогда - НастройкаФормы = Неопределено; - Иначе - МенеджерСохраненияНастроек = СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; - НастройкаПоУмолчанию = ПолучитьНастройкуПоУмолчаниюИзСпискаСохраненныхНастроекЛкс(МенеджерСохраненияНастроек.СохраненныеНастройки); - Если НастройкаПоУмолчанию.Значение = Неопределено Тогда - СохранитьНастройкуФормыЛкс(ЭтаФорма); - НастройкаПоУмолчанию = ПолучитьНастройкуПоУмолчаниюИзСпискаСохраненныхНастроекЛкс(МенеджерСохраненияНастроек.СохраненныеНастройки); - КонецЕсли; - НастройкаФормы = НастройкаПоУмолчанию.Значение; - КонецЕсли; - //ПоследняяНастройка = МенеджерСохраненияНастроек.СохраненныеНастройки.Индекс(НастройкаПоУмолчанию); - ЗагрузитьНастройкуФормыЧерезОбработчикЛкс(ЭтаФорма, НастройкаФормы, ПараметрыЗагрузкиНастройкиПоУмолчанию); - -КонецПроцедуры - -Процедура ЗагрузитьНастройкуФормыЧерезОбработчикЛкс(Знач ЭтаФорма, Знач НастройкаФормы, Знач ПараметрыЗагрузкиНастройкиПоУмолчанию = Неопределено) Экспорт - - Если ПараметрыЗагрузкиНастройкиПоУмолчанию = Неопределено Тогда - ПараметрыЗагрузкиНастройкиПоУмолчанию = Новый Структура; - КонецЕсли; - Если Форма_ВводДоступенЛкс(ЭтаФорма) Тогда - МенеджерСохраненияНастроек = СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; - СоставНастройкиФормы = МенеджерСохраненияНастроек.СоставНастройкиФормы; - Если СоставНастройкиФормы <> Неопределено Тогда - #Если Сервер И Не Сервер Тогда - СоставНастройкиФормы = Новый СписокЗначений; - #КонецЕсли - Если Не СоставНастройкиФормы.ОтметитьЭлементы("Выберите состав загружаемой настройки") Тогда - Возврат; - КонецЕсли; - КонецЕсли; - КонецЕсли; - ПараметрыЗагрузкиНастройкиПоУмолчанию.Вставить("СоставНастройкиФормы", СоставНастройкиФормы); - Если МетодРеализованЛкс(ЭтаФорма, "ЗагрузитьНастройкуВФорме") Тогда - ЭтаФорма.ЗагрузитьНастройкуВФорме(НастройкаФормы, ПараметрыЗагрузкиНастройкиПоУмолчанию); - Иначе - ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); - КонецЕсли; - -КонецПроцедуры - -Процедура ЗагрузитьНастройкуФормыЛкс(Знач ЭтаФорма, Знач НастройкаФормы, БелыеСвойства = Неопределено, ЧерныеСвойства = Неопределено, ЗагружатьОстальные = Истина) Экспорт - - #Если Сервер И Не Сервер Тогда - БелыеСвойства = Новый Структура; - ЧерныеСвойства = Новый Структура; - #КонецЕсли - Если НастройкаФормы = Неопределено Тогда - Возврат; - КонецЕсли; - //ЗаполнитьЗначенияСвойств(ЭтаФорма, НастройкаФормы); - Для Каждого КлючИЗначение Из НастройкаФормы Цикл - Если Ложь - Или Не ЕстьСвойствоОбъектаЛкс(ЭтаФорма, КлючИЗначение.Ключ) - Или (Истина - И ЧерныеСвойства <> Неопределено - И ЧерныеСвойства.Свойство(КлючИЗначение.Ключ)) - Или (Истина - И БелыеСвойства <> Неопределено - И Не БелыеСвойства.Свойство(КлючИЗначение.Ключ) - И Не ЗагружатьОстальные) - Тогда - Продолжить; - КонецЕсли; - ТипЗначения = ТипЗнч(ЭтаФорма[КлючИЗначение.Ключ]); - Если ЛиТабличнаяЧастьЛкс(ТипЗначения) Тогда - Если КлючИЗначение.Значение = Неопределено Тогда - ЭтаФорма[КлючИЗначение.Ключ].Очистить(); - Иначе - ЭтаФорма[КлючИЗначение.Ключ].Загрузить(КлючИЗначение.Значение); - КонецЕсли; - ИначеЕсли ТипЗначения = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда - ЭтаФорма[КлючИЗначение.Ключ].ЗагрузитьНастройки(КлючИЗначение.Значение); - ИначеЕсли ТипЗначения = Тип("ТаблицаЗначений") Тогда - ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(КлючИЗначение.Значение, ЭтаФорма[КлючИЗначение.Ключ],,, Истина); - ИначеЕсли ТипЗначения = Тип("ДеревоЗначений") Тогда - ирОбщий.ЗагрузитьВДеревоЗначенийЛкс(КлючИЗначение.Значение, ЭтаФорма[КлючИЗначение.Ключ],,, Истина); - Иначе - ЗначениеСвойства = КлючИЗначение.Значение; - ЗначениеСвойства = КопияОбъектаЛкс(ЗначениеСвойства); - ЭтаФорма[КлючИЗначение.Ключ] = ЗначениеСвойства; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура СохранитьНастройкуФормыЛкс(Знач ЭтаФорма) Экспорт - - МенеджерСохраненияНастроек = СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; - Если МенеджерСохраненияНастроек <> Неопределено И МенеджерСохраненияНастроек.ЗагружатьСохранятьНастройкуПоУмолчанию Тогда - НастройкаПоУмолчанию = ПолучитьНастройкуПоУмолчаниюИзСпискаСохраненныхНастроекЛкс(МенеджерСохраненияНастроек.СохраненныеНастройки); - НастройкаПоУмолчанию.Значение = СохраняемаяНастройкаФормыЛкс(ЭтаФорма); - СохранитьЗначениеЛкс(МенеджерСохраненияНастроек.КлючНастроек, МенеджерСохраненияНастроек.СохраненныеНастройки); - КонецЕсли; - -КонецПроцедуры - -Функция ПолучитьНастройкуПоУмолчаниюИзСпискаСохраненныхНастроекЛкс(СписокСохраненныхНастроек) Экспорт - - ИмяОсновнойНастройки = "Основная"; - СтрокаСписка = СписокСохраненныхНастроек.Найти(Истина, "Пометка"); - Если СтрокаСписка = Неопределено Тогда - СтрокаСписка = СписокСохраненныхНастроек.Найти(ИмяОсновнойНастройки, "Представление"); - КонецЕсли; - Если СтрокаСписка = Неопределено Тогда - СтрокаСписка = СписокСохраненныхНастроек.Добавить(); - СтрокаСписка.Представление = ИмяОсновнойНастройки; - КонецЕсли; - СтрокаСписка.Пометка = Истина; - Возврат СтрокаСписка; - -КонецФункции - -Функция ВыбратьИСохранитьНастройкуФормыЛкс(ЭтаФорма) Экспорт - - МенеджерСохраненияНастроек = СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; - НовоеНаименование = Неопределено; - СохраняемаяНастройкаФормы = СохраняемаяНастройкаФормыЛкс(ЭтаФорма, НовоеНаименование); - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаСохраненияНастройки = мПлатформа.ПолучитьФорму("ВыборНастройкиДляСохранения"); - ФормаСохраненияНастройки.НачальноеЗначениеВыбора = МенеджерСохраненияНастроек.ПоследняяНастройка; - ФормаСохраненияНастройки.НовоеНаименование = НовоеНаименование; - Если МенеджерСохраненияНастроек.СохраненныеНастройки <> Неопределено Тогда - ФормаСохраненияНастройки.СписокНастроек = МенеджерСохраненияНастроек.СохраненныеНастройки; - КонецЕсли; - ТекущиеДанные = ФормаСохраненияНастройки.ОткрытьМодально(); - МенеджерСохраненияНастроек.СохраненныеНастройки = ФормаСохраненияНастройки.СписокНастроек; - МенеджерСохраненияНастроек.ПоследняяНастройка = ФормаСохраненияНастройки.НачальноеЗначениеВыбора; - Если ТекущиеДанные <> Неопределено Тогда - ТекущиеДанные.Значение = СохраняемаяНастройкаФормы; - КонецЕсли; - СохранитьНастройкуФормыЛкс(ЭтаФорма); - -КонецФункции - -// Параметры: -// КопироватьЗначения - Булево - Ложь сильно ускоряет -// -// Параметры: -// ЭтаФорма - Форма - -// выхНовоеНаименование - Строка - -// ПорогТаблицыЗначений - Число - Чтобы не засорять БД -// -// Возвращаемое значение: -// - -// -Функция СохраняемаяНастройкаФормыЛкс(Знач ЭтаФорма, выхНовоеНаименование = "", ПорогТаблицыЗначений = 100000) Экспорт - - выхНовоеНаименование = ""; - ИменаСвойств = ""; - СохраняемаяНастройкаФормы = ЭтаФорма.СохраняемаяНастройкаФормы(выхНовоеНаименование, ИменаСвойств); - Если ЗначениеЗаполнено(ИменаСвойств) Тогда - Если СохраняемаяНастройкаФормы = Неопределено Тогда - СохраняемаяНастройкаФормы = Новый Структура; - КонецЕсли; - ИменаСвойств = СтрЗаменить(ИменаСвойств, "Реквизит.", ""); - ИменаСвойств = СтрЗаменить(ИменаСвойств, "Форма.", ""); - ИменаСвойств = СтрЗаменить(ИменаСвойств, "Табличная часть.", ""); - МассивИмен = СтрРазделитьЛкс(ИменаСвойств, ",", Истина, Ложь); - ЗначенияСвойств = Новый Структура(); - Для Каждого ИмяСвойства Из МассивИмен Цикл - Если Не ЗначениеЗаполнено(ИмяСвойства) Или СохраняемаяНастройкаФормы.Свойство(ИмяСвойства) Тогда - Продолжить; - КонецЕсли; - ЗначенияСвойств.Вставить(ИмяСвойства); - ТипЗначения = ТипЗнч(ЭтаФорма[ИмяСвойства]); - Если ЛиТабличнаяЧастьЛкс(ТипЗначения) Тогда - ЗначенияСвойств[ИмяСвойства] = ЭтаФорма[ИмяСвойства].Выгрузить(); - ИначеЕсли ТипЗначения = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда - ЗначенияСвойств[ИмяСвойства] = ЭтаФорма[ИмяСвойства].ПолучитьНастройки(); - Иначе - ЗначениеСвойства = ЭтаФорма[ИмяСвойства]; - ЗначениеСвойства = КопияОбъектаЛкс(ЗначениеСвойства); - ЗначенияСвойств[ИмяСвойства] = ЗначениеСвойства; - КонецЕсли; - Если ТипЗнч(ЗначенияСвойств[ИмяСвойства]) = Тип("ТаблицаЗначений") Тогда - ТаблицаЗначений = ЗначенияСвойств[ИмяСвойства]; - Если ТаблицаЗначений.Количество() > ПорогТаблицыЗначений Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Сохраняемая таблица %1 настройки формы обрезана %2 -> %3 строк",, ИмяСвойства, 2, ТаблицаЗначений.Количество(), 3, ПорогТаблицыЗначений)); - Пока ТаблицаЗначений.Количество() > ПорогТаблицыЗначений Цикл - ТаблицаЗначений.Удалить(ТаблицаЗначений.Количество() - 1); - КонецЦикла; - КонецЕсли; - КонецЕсли; - КонецЦикла; - СкопироватьУниверсальнуюКоллекциюЛкс(ЗначенияСвойств, СохраняемаяНастройкаФормы); - КонецЕсли; - Возврат СохраняемаяНастройкаФормы; - -КонецФункции - -Функция ВыбратьИЗагрузитьНастройкуФормыЛкс(ЭтаФорма) Экспорт - - МенеджерСохраненияНастроек = СлужебныеДанныеФормыЛкс(ЭтаФорма).МенеджерСохраненияНастроек; - Если МенеджерСохраненияНастроек.СохраненныеНастройки = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Если Не ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма) Тогда - СообщитьЛкс("Нельзя выполнять загрузку настроек, пока форма выполняет фоновые задания"); - Возврат Неопределено; - КонецЕсли; - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаСохраненияНастройки = мПлатформа.ПолучитьФорму("ВыборНастройкиДляЗагрузки"); - ФормаСохраненияНастройки.НачальноеЗначениеВыбора = МенеджерСохраненияНастроек.ПоследняяНастройка; - Если МенеджерСохраненияНастроек.СохраненныеНастройки <> Неопределено Тогда - ФормаСохраненияНастройки.СписокНастроек = МенеджерСохраненияНастроек.СохраненныеНастройки; - КонецЕсли; - ТекущиеДанные = ФормаСохраненияНастройки.ОткрытьМодально(); - МенеджерСохраненияНастроек.СохраненныеНастройки = ФормаСохраненияНастройки.СписокНастроек; - МенеджерСохраненияНастроек.ПоследняяНастройка = ФормаСохраненияНастройки.НачальноеЗначениеВыбора; - Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Значение <> Неопределено Тогда - ЗагрузитьНастройкуФормыЧерезОбработчикЛкс(ЭтаФорма, ТекущиеДанные.Значение); - КонецЕсли; - СохранитьНастройкуФормыЛкс(ЭтаФорма); - -КонецФункции - -Функция КартинкаТипаЛкс(Тип) Экспорт - - ИмяОбщегоТипа = Неопределено; - ПоляПоиска = "ИД"; - КлючПоиска = Новый Структура(ПоляПоиска); - КлючПоиска.ИД = ИдентификаторТипаЛкс(Тип); - //КлючПоиска.ТипТипа = "Основной"; - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - мПлатформа.ИнициализацияОписанияОбщихТипов(); - //ирОбщий.ДобавитьИндексВТаблицуЛкс(мПлатформа.ТаблицаОбщихТипов, ПоляПоиска); - НайденныеСтроки = мПлатформа.ТаблицаОбщихТипов.НайтиСтроки(КлючПоиска); - Если НайденныеСтроки.Количество() > 0 Тогда - ИмяОбщегоТипа = НайденныеСтроки[0].Слово; - Иначе - //СтруктураТипа = ирКэш.Получить().СтруктураТипаИзКонкретногоТипа(Тип); - //ИмяОбщегоТипа = СтруктураТипа.ИмяОбщегоТипа; - ОбъектМД = Метаданные.НайтиПоТипу(Тип); - Если ОбъектМД <> Неопределено Тогда - ТекущееИмяТипа = ОбъектМД.ПолноеИмя(); - ИмяОбщегоТипа = ПервыйФрагментЛкс(ТекущееИмяТипа); - КонецЕсли; - КонецЕсли; - Картинка = Неопределено; - Если ИмяОбщегоТипа <> Неопределено Тогда - ИмяКартинки = "ир" + ПервыйФрагментЛкс(ИмяОбщегоТипа); - Картинка = ирКэш.КартинкаПоИмениЛкс(ИмяКартинки); - Если Картинка.Вид = ВидКартинки.Пустая Тогда - ИмяКартинки = ИмяОбщегоТипа; - Попытка - Картинка = БиблиотекаКартинок[ИмяКартинки]; - Исключение - Картинка = ирКэш.КартинкаПоИмениЛкс("ирНеизвестныйТип"); - КонецПопытки; - КонецЕсли; - КонецЕсли; - Возврат Картинка; - -КонецФункции - -Функция ПрочитатьДополнительныеПоляСсылающихсяОбъектовЛкс(Знач ТабличноеПоле, Знач КомпоновщикДопПолей, Знач ТаблицаДанных = Неопределено, ИмяПоляСсылки = "Данные") Экспорт - - #Если Сервер И Не Сервер Тогда - КомпоновщикДопПолей = Новый КомпоновщикНастроекКомпоновкиДанных; - #КонецЕсли - Если ТаблицаДанных = Неопределено Тогда - ТаблицаДанных = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - КонецЕсли; - КомпоновщикДопПолей.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.Полное); - МассивДопПолей = Новый Структура(); - ДопустимоеЧислоДопПолей = 5; - Счетчик = 1; - СтрокаПорядка = ""; - СтрокаВыбора = ""; - Для Каждого ПолеПорядка Из КомпоновщикДопПолей.Настройки.Порядок.Элементы Цикл - Если ПолеПорядка.Использование Тогда - ИмяПоля = "" + ПолеПорядка.Поле; - ИмяКолонки = "Реквизит" + Счетчик; - ДоступноеПоле = КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.НайтиПоле(ПолеПорядка.Поле); - Если Счетчик > ДопустимоеЧислоДопПолей Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Дополнительное поле %1 пропущено, т.к. допускается не более %2 полей",, ДоступноеПоле.Заголовок, 2, ДопустимоеЧислоДопПолей)); - Продолжить; - КонецЕсли; - МассивДопПолей.Вставить(ИмяКолонки, ИмяПоля); - КолонкаТП = ТабличноеПоле.Колонки[ИмяКолонки]; - КолонкаТП.Видимость = Истина; - КолонкаТП.ТекстШапки = ДоступноеПоле.Заголовок; - Если СтрокаПорядка <> "" Тогда - СтрокаПорядка = СтрокаПорядка + ","; - КонецЕсли; - СтрокаПорядка = СтрокаПорядка + ИмяКолонки + " "; - Если ПолеПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда - СтрокаПорядка = СтрокаПорядка + "Возр"; - Иначе - СтрокаПорядка = СтрокаПорядка + "Убыв"; - КонецЕсли; - СтрокаВыбора = СтрокаВыбора + ", - | Т." + ИмяПоля + " КАК " + ИмяКолонки; - Счетчик = Счетчик + 1; - КонецЕсли; - КонецЦикла; - Если Не ЗначениеЗаполнено(СтрокаПорядка) Тогда - СтрокаПорядка = "Дата"; - КонецЕсли; - Для Счетчик = Счетчик По ДопустимоеЧислоДопПолей Цикл - ИмяКолонки = "Реквизит" + Счетчик; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - КолонкаТП = ТабличноеПоле.ПодчиненныеЭлементы[ТабличноеПоле.Имя + ИмяКолонки]; - Иначе - КолонкаТП = ТабличноеПоле.Колонки[ИмяКолонки]; - КонецЕсли; - КолонкаТП.Видимость = Ложь; - КонецЦикла; - - СтандартныеРеквизиты = Новый Структура; - СтандартныеРеквизиты.Вставить("ПометкаУдаления", "ЛОЖЬ"); - СтандартныеРеквизиты.Вставить("Проведен", "ЛОЖЬ"); - СтандартныеРеквизиты.Вставить("ЭтоГруппа", "ЛОЖЬ"); - СтандартныеРеквизиты.Вставить("Дата", "ДАТАВРЕМЯ(1,1,1)"); - Для Каждого КлючИЗначение Из СтандартныеРеквизиты Цикл - ИмяРеквизита = КлючИЗначение.Ключ; - Если КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.НайтиПоле(Новый ПолеКомпоновкиДанных("Объект." + ИмяРеквизита)) = Неопределено Тогда - Продолжить; - КонецЕсли; - СтрокаВыбора = СтрокаВыбора + ", - | ЕСТЬNULL(Т.Объект." + ИмяРеквизита + ", " + КлючИЗначение.Значение + ") КАК " + ИмяРеквизита; - КонецЦикла; - Если ТипЗнч(ТаблицаДанных) <> Тип("ТаблицаЗначений") Тогда - //КопияТаблицыДанных = ТаблицаДанных.Выгрузить(, ИмяПоляСсылки); - КопияТаблицыДанных = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле); - Иначе - КопияТаблицыДанных = ТаблицаДанных; - КонецЕсли; - КопияТаблицыДанных = ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(КопияТаблицыДанных,, ИмяПоляСсылки); - #Если Сервер И Не Сервер Тогда - КопияТаблицыДанных = Новый ТаблицаЗначений; - #КонецЕсли - ОписаниеТиповСсылки = КопияТаблицыДанных.Колонки[ИмяПоляСсылки].ТипЗначения; - ПорцияОбъектов = Новый ТаблицаЗначений; - ПорцияОбъектов.Колонки.Добавить("Объект", ОписаниеТиповСсылки); - ПорцияОбъектов.Колонки.Добавить("Индекс", Новый ОписаниеТипов("Число")); - РазмерПорции = 10000; - КоличествоПорций = Цел(ТаблицаДанных.Количество() / РазмерПорции) + 1; - Запрос = Новый Запрос; - ТекстЗапроса = " - |ВЫБРАТЬ Т.* ПОМЕСТИТЬ Т ИЗ &Т КАК Т; - |ВЫБРАТЬ Т.Объект, Т.Индекс" + СтрокаВыбора + " - |ИЗ Т КАК Т"; - Запрос.Текст = ТекстЗапроса; - ИндексСтроки = 0; - Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоличествоПорций, "Чтение дополнительных полей"); - ДоступноеПолеОбъект = КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.НайтиПоле(Новый ПолеКомпоновкиДанных("Объект")); - Для СчетчикПорций = 1 По КоличествоПорций Цикл - ирОбщий.ОбработатьИндикаторЛкс(Индикатор); - ПорцияОбъектов.Очистить(); - Для Счетчик = 1 По РазмерПорции Цикл - Если ИндексСтроки = ТаблицаДанных.Количество() Тогда - Прервать; - КонецЕсли; - СтрокаОбъекта = ТаблицаДанных[ИндексСтроки]; - ИндексСтроки = ИндексСтроки + 1; - Если Ложь - Или ТипЗнч(СтрокаОбъекта[ИмяПоляСсылки]) = Тип("Строка") - Или СтрокаОбъекта[ИмяПоляСсылки] = Неопределено - Или ДоступноеПолеОбъект = Неопределено - Или Не ДоступноеПолеОбъект.ТипЗначения.СодержитТип(ТипЗнч(СтрокаОбъекта[ИмяПоляСсылки])) - Тогда - СтрокаОбъекта.ИндексКартинки = 12; // Регистр сведений - Продолжить; - КонецЕсли; - СтрокаПорции = ПорцияОбъектов.Добавить(); - СтрокаПорции.Объект = СтрокаОбъекта[ИмяПоляСсылки]; - СтрокаПорции.Индекс = ИндексСтроки - 1; - КонецЦикла; - Запрос.УстановитьПараметр("Т", ПорцияОбъектов); - РезультатЗапроса = Запрос.Выполнить(); - РеквизитыПорции = РезультатЗапроса.Выгрузить(); - Для Каждого СтрокаПорции Из РеквизитыПорции Цикл - СтрокаОбъекта = ТаблицаДанных[СтрокаПорции.Индекс]; - СтрокаОбъекта.ИндексКартинки = ирОбщий.ПолучитьИндексКартинкиСсылкиЛкс(СтрокаПорции.Объект, Истина, СтрокаПорции); - ЗаполнитьЗначенияСвойств(СтрокаОбъекта, СтрокаПорции); - КонецЦикла; - КонецЦикла; - ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); - - СтрокаПорядка = "Метаданные," + СтрокаПорядка; - Возврат СтрокаПорядка; - -КонецФункции - -Процедура ОбновитьДоступныеПоляДляДополнительныхПолейЛкс(Знач ТаблицаДанных, Знач КомпоновщикДопПолей, Знач ТабличноеПолеДоступныхПолей) Экспорт - - //Если КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.Элементы.Количество() = 0 Тогда - Если ТипЗнч(ТаблицаДанных) = Тип("ТаблицаЗначений") Тогда - ПолныеИменаМД = ТаблицаДанных.Скопировать(, "Метаданные"); - Иначе - ПолныеИменаМД = ТаблицаДанных.Выгрузить(, "Метаданные"); - КонецЕсли; - ПолныеИменаМД.Свернуть("Метаданные"); - ПолныеИменаМД = ПолныеИменаМД.ВыгрузитьКолонку(0); - МассивТипов = Новый Массив(); - Для Каждого ПолноеИмяМД Из ПолныеИменаМД Цикл - Если ТипЗнч(ПолноеИмяМД) = Тип("ОбъектМетаданных") Тогда - ПолноеИмяМД = ПолноеИмяМД.ПолноеИмя(); - КонецЕсли; - Попытка - Тип = Тип(ирОбщий.ИмяТипаИзПолногоИмениТаблицыБДЛкс(ПолноеИмяМД)); - Исключение - Продолжить; - КонецПопытки; - МассивТипов.Добавить(Тип); - КонецЦикла; - Если МассивТипов.Количество() > 0 Тогда - КоллекцияПолей = Новый Массив(); - КоллекцияПолей.Добавить(Новый Структура("Имя, ТипЗначения", "Объект", Новый ОписаниеТипов(МассивТипов))); - ТекстЗапроса = ирОбщий.ЗапросИмитаторКоллекцииПолейЛкс(КоллекцияПолей); - СхемаКомпоновки = ирОбщий.СоздатьСхемуКомпоновкиПоЗапросу(ТекстЗапроса); - Иначе - СхемаКомпоновки = Новый СхемаКомпоновкиДанных; - КонецЕсли; - Если ТипЗнч(ТабличноеПолеДоступныхПолей) = Тип("ТаблицаФормы") Тогда - ЭтаФорма = РодительЭлементаУправляемойФормыЛкс(ТабличноеПолеДоступныхПолей); - ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПоместитьВоВременноеХранилище(СхемаКомпоновки), ЭтаФорма.УникальныйИдентификатор); - Иначе - ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки); - КонецЕсли; - КомпоновщикДопПолей.Инициализировать(ИсточникДоступныхНастроек); - Если КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.Элементы.Количество() > 0 Тогда - #Если Клиент И Не Сервер Тогда - ТабличноеПолеДоступныхПолей.Развернуть(КомпоновщикДопПолей.Настройки.ДоступныеПоляПорядка.Элементы[0]); - #КонецЕсли - КонецЕсли; - //КонецЕсли; - -КонецПроцедуры - -// ИменаКолонок - Строка - имена колонок через запятую -Процедура ТабличноеПолеОтобразитьПиктограммыТиповЛкс(ОформлениеСтроки, ИменаКолонок) Экспорт - - Если ТипЗнч(ИменаКолонок) = Тип("Строка") Тогда - ИменаКолонок = СтрРазделитьЛкс(ИменаКолонок, ",", Истина); - КонецЕсли; - Для Каждого ИмяКолонки Из ИменаКолонок Цикл - Ячейка = ОформлениеСтроки.Ячейки.Найти(ИмяКолонки); - //:Ячейка = Новый("ОформлениеЯчейки") - Если Ячейка <> Неопределено Тогда - ДанныеКартинки = Ячейка.Значение; - Если ТипЗнч(ДанныеКартинки) = Тип("ПолеКомпоновкиДанных") Тогда - Продолжить; - КонецЕсли; - СсылкаКартинка = Неопределено; - ТипЗначения = ТипЗнч(ДанныеКартинки); - Если Истина - И ТипЗначения = Тип("Булево") - И Ячейка.ОтображатьФлажок - Тогда - Продолжить; - КонецЕсли; - КартинкаТипа = КартинкаТипаЛкс(ТипЗначения); - Если КартинкаТипа <> Неопределено Тогда - Ячейка.УстановитьКартинку(КартинкаТипа); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Получает картинку для корневого типа конфигурации. -// -// Параметры: -// пКорневойТип - Строка - корневой тип конфигурации. -// -// Возвращаемое значение: -// - Картинка - корневого типа конфигурации. -// -Функция КартинкаКорневогоТипаМДЛкс(Знач КорневойТип) Экспорт - - Если СтрокиРавныЛкс("Изменения", КорневойТип) Тогда - Картинка = ирКэш.КартинкаПоИмениЛкс("ирТаблицаИзменений"); - КонецЕсли; - Если Картинка = Неопределено Тогда - Картинка = ирКэш.КартинкаПоИмениЛкс("ир" + КорневойТип); - КонецЕсли; - Если Картинка = Неопределено Или Картинка.Вид = ВидКартинки.Пустая Тогда - //Попытка - // Так почему то медленно работает. Ускорили в 8.3.22 - // Картинка = БиблиотекаКартинок[пКорневойТип]; - //Исключение - //КонецПопытки; - Картинка = ирКэш.КартинкаПоИмениЛкс(КорневойТип); - КонецЕсли; - Если Картинка = Неопределено Тогда - Картинка = Новый Картинка(); - КонецЕсли; - Возврат Картинка; - -КонецФункции - -Функция ОткрытьТекущуюСтрокуТабличногоПоляТаблицыБДВРедактореОбъектаБДЛкс(ТабличноеПоле, ПолноеИмяМД = Неопределено, ДоступныеПоляВыбора = Неопределено, Связанный = Ложь, - ФормаРедактора = Неопределено, ОбъектыНаСервере = Неопределено, ДляНабораЗаписейРегистраСведений = Истина, ПриОтсутствииСтрокиОткрытьНовыйОбъект = Ложь, - ИмяКолонкиДанных = Неопределено, Знач НайденныеСсылки = Неопределено) Экспорт - - ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; - Если Не ПриОтсутствииСтрокиОткрытьНовыйОбъект И ТекущаяСтрока = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - Если ПолноеИмяМД = Неопределено Тогда - ПолноеИмяМД = ДанныеЭлементаФормыЛкс(ТабличноеПоле).ОсновнаяТаблица; - КонецЕсли; - Если ИмяКолонкиДанных = Неопределено Тогда - ТекущаяКолонка = ТабличноеПоле.ТекущийЭлемент; - Если ТекущаяКолонка <> Неопределено Тогда - ИмяКолонкиДанных = ПутьКДаннымЭлементаУправляемойФормыЛкс(ТекущаяКолонка, Истина); - КонецЕсли; - КонецЕсли; - Иначе - Если ПолноеИмяМД = Неопределено Тогда - ПолноеИмяМД = Метаданные.НайтиПоТипу(ТипЗнч(ТабличноеПоле.Значение)).ПолноеИмя(); - КонецЕсли; - Если ИмяКолонкиДанных = Неопределено Тогда - ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка; - Если ТекущаяКолонка <> Неопределено Тогда - ИмяКолонкиДанных = ТекущаяКолонка.Данные; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Истина - И ИмяКолонкиДанных <> Неопределено - И (Ложь - Или ДоступныеПоляВыбора = Неопределено - Или ДоступныеПоляВыбора.НайтиПоле(Новый ПолеКомпоновкиДанных(ИмяКолонкиДанных)) <> Неопределено) - Тогда - ИмяКолонки = ИмяКолонкиДанных; - Иначе - ИмяКолонки = ""; - КонецЕсли; - ПолноеИмяТаблицы = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД,, Ложь); - КорневойТип = ПервыйФрагментЛкс(ПолноеИмяТаблицы); - Если ЛиКорневойТипКонстантыЛкс(КорневойТип) Тогда - КлючОбъекта = КлючОбъектаКонстантыЛкс(ПоследнийФрагментЛкс(ПолноеИмяМД)); - ОткрытьРедакторОбъектаБДЛкс(ПолноеИмяТаблицы,, Связанный, КлючОбъекта, ОбъектыНаСервере,,, ФормаРедактора); - Иначе - Если Не ДляНабораЗаписейРегистраСведений И ЛиКлючЗаписиРегистраЛкс(ТабличноеПоле.ТекущаяСтрока) Тогда - ДанныеСтрокиТаблицы = ТабличноеПоле.ТекущаяСтрока; // Так обходим проблему неполных ключей из-за функциональных опций и прочего - Иначе - ДанныеСтрокиТаблицы = ТабличноеПоле.ТекущиеДанные; - КонецЕсли; - Если ДанныеСтрокиТаблицы <> Неопределено Тогда - КлючОбъекта = КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицы, ДанныеСтрокиТаблицы, ДляНабораЗаписейРегистраСведений,, ОбъектыНаСервере); - КонецЕсли; - Если КлючОбъекта = Неопределено Тогда - Если Ложь - Или ЛиКорневойТипСсылкиЛкс(КорневойТип) - Или ЛиКорневойТипЖурналаДокументовЛкс(КорневойТип) - Тогда - Если ТекущаяСтрока <> Неопределено Тогда - ТипКлюча = ТипЗнч(ТекущаяСтрока.Ссылка); - Иначе - Фрагменты = СтрРазделитьЛкс(ПолноеИмяМД); // Тут может быть имя ТЧ - ТипКлюча = Тип(ИмяТипаИзПолногоИмениМДЛкс(Фрагменты[0] + "." + Фрагменты[1])); - КонецЕсли; - КлючОбъекта = Новый (ТипКлюча); - ПолноеИмяТаблицы = Метаданные.НайтиПоТипу(ТипКлюча).ПолноеИмя(); - Иначе - КлючОбъекта = ОбъектБДПоКлючуЛкс(ПолноеИмяТаблицы,,, Ложь, ОбъектыНаСервере); - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ПолноеИмяМД) Тогда - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - СтрокиПоиска = Новый Структура; - СхемаИНастройки = ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(РодительЭлементаУправляемойФормыЛкс(ТабличноеПоле)); - Если СхемаИНастройки <> Неопределено Тогда - НастройкиСписка = СхемаИНастройки.Настройки; - Иначе - НастройкиСписка = НастройкиДинамическогоСпискаЛкс(ДанныеЭлементаФормыЛкс(ТабличноеПоле)); - КонецЕсли; - Для Каждого ЭлементОтбора Из ВсеЭлементыИерарихииНастроекКомпоновкиЛкс(НастройкиСписка.Отбор,, Истина) Цикл - Если Истина - И ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит - Тогда - ДобавитьСловаПоискаВСтруктуруРеквизитов(ПервыйФрагментЛкс(ЭлементОтбора.ЛевоеЗначение), ЭлементОтбора.ПравоеЗначение, СтрокиПоиска); - КонецЕсли; - КонецЦикла; - Иначе - СтрокиПоиска = СловаПоискаПоКолонкамИзОтбораПостроителяЛкс(ТабличноеПоле); - КонецЕсли; - КонецЕсли; - ОткрытьРедакторОбъектаБДЛкс(ПолноеИмяТаблицы, ИмяКолонки, Связанный, КлючОбъекта, ОбъектыНаСервере, ТабличноеПоле.ТекущиеДанные, ТабличноеПоле.ТекущаяСтрока, ФормаРедактора, НайденныеСсылки, СтрокиПоиска); - КонецЕсли; - Возврат ФормаРедактора; - -КонецФункции - -Функция ОтборТабличногоПоляЛкс(Знач ТабличноеПоле) Экспорт - - Попытка - Отбор = ТабличноеПоле.ОтборСтрок; - Исключение - Попытка - Отбор = ТабличноеПоле.Значение.Отбор; - Исключение - КонецПопытки; - КонецПопытки; - Возврат Отбор; - -КонецФункции - -Функция КлючОбъектаКонстантыЛкс(Знач ИмяКонстанты, Знач РазрешитьОпасныеОперации = Истина) Экспорт - - Если ирКэш.НомерВерсииПлатформыЛкс() >= 803013 Тогда - КлючОбъекта = Новый ("КонстантаКлючЗначения." + ИмяКонстанты); - ИначеЕсли РазрешитьОпасныеОперации Тогда - КлючОбъекта = Новый ("КонстантаМенеджерЗначения." + ИмяКонстанты); // Инициализация модуля. Есть риск ошибок компиляции на клиенте - КонецЕсли; - Возврат КлючОбъекта; - -КонецФункции - -Функция ОткрытьРедакторОбъектаБДЛкс(ПолноеИмяТаблицы, ИмяРеквизита, Связанный = Ложь, Знач КлючОбъекта = Неопределено, Знач ОбъектыНаСервере = Неопределено, - Знач ДанныеСтрокиТаблицы = Неопределено, КлючУникальностиНовойФормы = Неопределено, ФормаРедактора = Неопределено, Знач НайденныеСсылки = Неопределено, Знач СтрокиПоиска = Неопределено, - Знач ПоказатьСвязанныеКолонкиБД = Ложь) Экспорт - - Если ФормаРедактора = Неопределено Тогда - КлючУникальности = КлючУникальностиНовойФормы; - Если Связанный Тогда - КлючУникальности = "Связанный"; - КонецЕсли; - ФормаРедактора = ПолучитьФормуЛкс("Обработка.ирРедакторОбъектаБД.Форма", , , КлючУникальности); - КонецЕсли; - Фрагменты = СтрРазделитьЛкс(ПолноеИмяТаблицы); - Если ЛиКорневойТипСсылкиЛкс(Фрагменты[0]) Тогда - ИмяОсновнойТаблицы = Фрагменты[0] + "." + Фрагменты[1]; - Иначе - ИмяОсновнойТаблицы = ПолноеИмяТаблицы; - КонецЕсли; - Если КлючОбъекта <> Неопределено Тогда - Если Не ФормаРедактора.Открыта() Тогда - ПараметрыФормы = Новый Структура("ПараметрКлючИлиОбъект, ПараметрПрочитатьОбъект", КлючОбъекта, Истина); - ЗаполнитьЗначенияСвойств(ФормаРедактора.фОбъект, ПараметрыФормы); - Иначе - ФормаРедактора.ЗагрузитьОбъектПоКлючу(КлючОбъекта); - КонецЕсли; - Иначе - ФормаРедактора.УстановитьТаблицуБД(ИмяОсновнойТаблицы); - КонецЕсли; - БылаОткрыта = ФормаРедактора.Открыта(); - ФормаРедактора.ПараметрСтрокиПоиска = СтрокиПоиска; - Форма_АктивироватьОткрытьЛкс(ФормаРедактора); - Если НайденныеСсылки <> Неопределено Тогда - ФормаРедактора.НайтиИПоказатьСсылкиВФорме(НайденныеСсылки, Не БылаОткрыта); - КонецЕсли; - СтруктураЛокальногоКлючаСтроки = Неопределено; - Если ДанныеСтрокиТаблицы <> Неопределено Тогда - КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицы, ДанныеСтрокиТаблицы, Истина, СтруктураЛокальногоКлючаСтроки, ОбъектыНаСервере); - КонецЕсли; - Если Ложь - Или ЗначениеЗаполнено(ИмяРеквизита) - Или СтруктураЛокальногоКлючаСтроки <> Неопределено - Тогда - ФормаРедактора.ПоказатьЯчейкуДанныхОбъекта(ПолноеИмяТаблицы, ИмяРеквизита, СтруктураЛокальногоКлючаСтроки, Ложь); - КонецЕсли; - Если ПоказатьСвязанныеКолонкиБД Тогда - ФормаРедактора.ПоказатьСвязанныеКолонкиБД(); - КонецЕсли; - Возврат ФормаРедактора; - -КонецФункции - -Процедура Форма_АктивироватьОткрытьЛкс(Знач Форма) Экспорт - - Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда - НужноОткрытьФорму = ТипЗнч(Форма) = Тип("Форма"); // Антибаг платформы https://www.hostedredmine.com/issues/923135 - Иначе - НужноОткрытьФорму = Не Форма.Открыта(); - КонецЕсли; - Если НужноОткрытьФорму Тогда - Форма.Открыть(); // В открытой форме платформа при этом тоже выполняет перерисовку табличных текущих страниц панелей формы - Иначе - Форма.Активизировать(); - КонецЕсли; - -КонецПроцедуры - -Функция _КонтрольРазмераВыборкиПользователемЛкс(ЗапросИлиПостроитель, МаксимальноеЧислоСтрок = 500000) Экспорт - - КоличествоСтрокРезультата = ирКэш.Получить().ПолучитьГрубоКоличествоСтрокВРезультатеЗапроса(ЗапросИлиПостроитель); - Если Истина - И ТипЗнч(КоличествоСтрокРезультата) = Тип("Число") - И КоличествоСтрокРезультата > МаксимальноеЧислоСтрок - Тогда - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("Все", "Все"); - Кнопки.Добавить("Часть", "Первые " + Формат(МаксимальноеЧислоСтрок, "ЧГ=")); - Ответ = Вопрос("Загружаемая таблица содержит " + КоличествоСтрокРезультата + " строк. Сколько строк загружать?", Кнопки, , "Часть"); - //Если Ответ <> КодВозвратаДиалога.ОК Тогда - // Возврат; - //КонецЕсли; - Если Ответ = "Все" Тогда - МаксимальноеЧислоСтрок = 0; - КонецЕсли; - Иначе - МаксимальноеЧислоСтрок = 0; - КонецЕсли; - Возврат МаксимальноеЧислоСтрок; - -КонецФункции - -Процедура ОбновитьСтатистикуПоТаблицеОбъектаМДВРезультатеПакетаЛкс(РезультатПакета, ПолноеИмяМД, ИмяКлючевойКолонки = "ПолноеИмяОбъекта", ИмяКолонкиКоличества = "КоличествоСтрок", ЛиТаблицыИзменений = Ложь, - СтруктураОтбора = Неопределено, ТолькоРазрешенные = Истина) Экспорт - - ТекстЗапроса = ПолучитьТекстЗапросаСтатистикиПоТаблицеЛкс(ПолноеИмяМД, ИмяКлючевойКолонки, ИмяКолонкиКоличества, ЛиТаблицыИзменений, СтруктураОтбора, ТолькоРазрешенные); - Если Не ЗначениеЗаполнено(ТекстЗапроса) Тогда - // В запрос попали только недоступные таблицы - Возврат; - КонецЕсли; - Запрос = Новый Запрос(ТекстЗапроса); - Если СтруктураОтбора <> Неопределено Тогда - СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураОтбора, Запрос.Параметры); - КонецЕсли; - СтруктураКлюча = Новый Структура(ИмяКлючевойКолонки); - КолонкиКоличества = Новый Массив(); - КолонкиКоличества.Добавить(ИмяКолонкиКоличества); - Если ЛиТаблицыИзменений Тогда - СтруктураКлюча.Вставить("Узел"); - КолонкиКоличества.Добавить("КоличествоВыгруженных"); - КолонкиКоличества.Добавить("КоличествоНевыгруженных"); - КонецЕсли; - СтатистикаПоТаблице = Запрос.Выполнить().Выгрузить(); - СтатистикаПоТаблице.Колонки.Добавить("Найдена", Новый ОписаниеТипов("булево")); - Для Каждого ЭлементПакета Из РезультатПакета Цикл - СтрокиРезультата = ЭлементПакета.НайтиСтроки(Новый Структура(ИмяКлючевойКолонки, ПолноеИмяМД)); - Если СтрокиРезультата.Количество() > 0 Тогда - Для Каждого СтрокаРезультата Из СтрокиРезультата Цикл - ЗаполнитьЗначенияСвойств(СтруктураКлюча, СтрокаРезультата); - Для Каждого ИмяКолонкиКоличества Из КолонкиКоличества Цикл - СтрокаРезультата[ИмяКолонкиКоличества] = 0; - КонецЦикла; - Для Каждого СтрокаСтатистики Из СтатистикаПоТаблице.НайтиСтроки(СтруктураКлюча) Цикл - СтрокаСтатистики.Найдена = Истина; - Для Каждого ИмяКолонкиКоличества Из КолонкиКоличества Цикл - СтрокаРезультата[ИмяКолонкиКоличества] = СтрокаСтатистики[ИмяКолонкиКоличества]; - КонецЦикла; - КонецЦикла; - КонецЦикла; - Прервать; - КонецЕсли; - КонецЦикла; - Для Каждого СтрокаСтатистики Из СтатистикаПоТаблице.НайтиСтроки(Новый Структура("Найдена", Ложь)) Цикл - СтрокаРезультата = ЭлементПакета.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаРезультата, СтрокаСтатистики); - КонецЦикла; - -КонецПроцедуры - -Процедура ЗаполнитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоМетаданных, РезультатПакета = Неопределено, ИмяКлючевойКолонки = "ПолноеИмяОбъекта", - СуммируемыеКолонки = "КоличествоСтрок", СтруктураОтбора = Неопределено, КлючеваяКолонкаСодержитИмяТаблицы = Ложь) Экспорт - - #Если Сервер И Не Сервер Тогда - ДеревоМетаданных = Новый ДеревоЗначений - #КонецЕсли - ВсеСтрокиДерева = ВсеСтрокиДереваЗначенийЛкс(ДеревоМетаданных); - СтруктураСуммируемыхКолонок = Новый Структура(СуммируемыеКолонки); - МассивСуммируемыхКолонок = Новый Массив(); - Для Каждого КлючИЗначение Из СтруктураСуммируемыхКолонок Цикл - МассивСуммируемыхКолонок.Добавить(КлючИЗначение.Ключ); - КонецЦикла; - Для Каждого СтрокаДерева Из ВсеСтрокиДерева Цикл - Для Каждого ИмяСуммируемойКолонки Из МассивСуммируемыхКолонок Цикл - СтрокаДерева[ИмяСуммируемойКолонки] = Неопределено; - КонецЦикла; - КонецЦикла; - Если РезультатПакета = Неопределено Тогда - ТаблицаКоличества = ирКэш.ТаблицаВсехТаблицБДЛкс(); - Если КлючеваяКолонкаСодержитИмяТаблицы Тогда - ИмяКлючевойКолонкиИсточника = "ПолноеИмя"; - Иначе - ИмяКлючевойКолонкиИсточника = "ПолноеИмяМД"; - КонецЕсли; - ИмяСуммируемойКолонки = "КоличествоСтрок"; - Иначе - ИмяСуммируемойКолонки = МассивСуммируемыхКолонок[0]; - ИмяКлючевойКолонкиИсточника = ИмяКлючевойКолонки; - Для Каждого ТаблицаРезультата Из РезультатПакета Цикл - Для Каждого СтрокаРезультата Из ТаблицаРезультата Цикл - Если ТаблицаКоличества = Неопределено Тогда - ТаблицаКоличества = ТаблицаРезультата.СкопироватьКолонки(); - ТаблицаКоличества.Колонки.Удалить(ИмяКлючевойКолонкиИсточника); - ТаблицаКоличества.Колонки.Добавить(ИмяКлючевойКолонкиИсточника); // Чтобы убрать ограничение на длину строки, которое может быть разным в результатах запросов пакета - КонецЕсли; - Если СтруктураОтбора <> Неопределено Тогда - ПодходитФильтру = Истина; - Для Каждого КлючИЗначение Из СтруктураОтбора Цикл - ЗначениеРезультата = СтрокаРезультата[КлючИЗначение.Ключ]; - Если ТипЗнч(КлючИЗначение.Значение) = Тип("Массив") Тогда - Если КлючИЗначение.Значение.Найти(ЗначениеРезультата) = Неопределено Тогда - ПодходитФильтру = Ложь; - Прервать; - КонецЕсли; - Иначе - Если КлючИЗначение.Значение <> ЗначениеРезультата Тогда - ПодходитФильтру = Ложь; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Если Не ПодходитФильтру Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - ЗаполнитьЗначенияСвойств(ТаблицаКоличества.Добавить(), СтрокаРезультата); - КонецЦикла; - КонецЦикла; - КонецЕсли; - Если ТаблицаКоличества <> Неопределено Тогда - #Если Сервер И Не Сервер Тогда - ТаблицаКоличества = Новый ТаблицаЗначений; - #КонецЕсли - //Для Каждого СтрокаКоличества Из ТаблицаКоличества Цикл - // Если СтрокаКоличества[ИмяСуммируемойКолонки] = Неопределено Тогда - // Продолжить; - // КонецЕсли; - // СтрокаДерева = ДеревоМетаданных.Строки.Найти(СтрокаКоличества[ИмяКлючевойКолонкиИсточника], ИмяКлючевойКолонки, Истина); - // Если СтрокаДерева <> Неопределено Тогда - // Для Каждого ИмяСуммируемойКолонки Из МассивСуммируемыхКолонок Цикл - // ДобавитьКоличествоСтрокСРодителемЛкс(СтрокаДерева, СтрокаКоличества[ИмяСуммируемойКолонки], ИмяСуммируемойКолонки); - // КонецЦикла; - // КонецЕсли; - //КонецЦикла; - ирОбщий.ДобавитьИндексВТаблицуЛкс(ТаблицаКоличества, ИмяКлючевойКолонкиИсточника); - Для Каждого СтрокаДерева Из ВсеСтрокиДерева Цикл - СтрокаКоличества = ТаблицаКоличества.Найти(СтрокаДерева[ИмяКлючевойКолонки], ИмяКлючевойКолонкиИсточника); - Если Истина - И СтрокаКоличества <> Неопределено - И СтрокаКоличества[ИмяСуммируемойКолонки] <> Неопределено - Тогда - Для Каждого ИмяКолонкиЦикл Из МассивСуммируемыхКолонок Цикл - ДобавитьКоличествоСтрокСРодителемЛкс(СтрокаДерева, СтрокаКоличества[ИмяКолонкиЦикл], ИмяКолонкиЦикл); - КонецЦикла; - КонецЕсли; - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - -Процедура ДобавитьКоличествоСтрокСРодителемЛкс(Знач СтрокаДерева, Знач ДобавкаККоличеству, Знач ИмяСуммируемойКолонки = "КоличествоСтрок") Экспорт - - СтароеКоличество = СтрокаДерева[ИмяСуммируемойКолонки]; - Если СтароеКоличество = Неопределено Тогда - СтароеКоличество = 0; - КонецЕсли; - Если ТипЗнч(ДобавкаККоличеству) = Тип("Число") Тогда - НовоеКоличество = ?(ТипЗнч(СтрокаДерева[ИмяСуммируемойКолонки]) <> Тип("Число"), 0, СтрокаДерева[ИмяСуммируемойКолонки]) + ДобавкаККоличеству; - Иначе - НовоеКоличество = "?"; - КонецЕсли; - СтрокаДерева[ИмяСуммируемойКолонки] = НовоеКоличество; - Если СтрокаДерева.Уровень() > 1 Тогда - Возврат; - КонецЕсли; - Родитель = СтрокаДерева.Родитель; - Пока Родитель <> Неопределено Цикл - Если ТипЗнч(НовоеКоличество) <> Тип("Число") Тогда - Родитель[ИмяСуммируемойКолонки] = "?"; - КонецЕсли; - КоличествоРодителя = Родитель[ИмяСуммируемойКолонки]; - Если КоличествоРодителя = "?" Тогда - Прервать; - КонецЕсли; - Если ТипЗнч(КоличествоРодителя) <> Тип("Число") Тогда - КоличествоРодителя = 0; - КонецЕсли; - Родитель[ИмяСуммируемойКолонки] = КоличествоРодителя - СтароеКоличество + НовоеКоличество; - Родитель = Родитель.Родитель; - КонецЦикла; - -КонецПроцедуры - -Процедура ОбновитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоМетаданных, ИмяКлючевойКолонки = "ПолноеИмяОбъекта", ИмяКолонкиКоличества = "КоличествоСтрок", - ЛиТаблицыИзменений = Ложь, СтруктураОтбора = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ДеревоМетаданных = Новый ДеревоЗначений - #КонецЕсли - РезультатПакета = ВычислитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоМетаданных, ИмяКлючевойКолонки, ИмяКолонкиКоличества, ЛиТаблицыИзменений, СтруктураОтбора); - ЗаполнитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс(ДеревоМетаданных, РезультатПакета, ИмяКлючевойКолонки, ИмяКолонкиКоличества); - -КонецПроцедуры - -Процедура УстановитьЗначениеКолонкиДереваЛкс(ДеревоЗначений, ИмяКолонки = "Пометка", НовоеЗначение = Истина) Экспорт - - ВсеСтроки = ВсеСтрокиДереваЗначенийЛкс(ДеревоЗначений); - Для Каждого СтрокаДерева Из ВсеСтроки Цикл - СтрокаДерева.Пометка = НовоеЗначение; - КонецЦикла; - -КонецПроцедуры - -// НовыйРежим - Булево - Имя/Синоним -Процедура ТабличноеПолеОбновитьКолонкиИмяСинонимЛкс(ТабличноеПоле, НовыйРежим, ИмяКолонкиИмя = "Имя", ИмяКолонкиСиноним = "Представление") Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - КолонкиТП = ТабличноеПоле.Колонки; - КолонкаИмя = КолонкиТП[ИмяКолонкиИмя]; - КолонкаСиноним = КолонкиТП[ИмяКолонкиСиноним]; - КолонкаИмя.Видимость = НовыйРежим; - КолонкаСиноним.Видимость = Не НовыйРежим; - Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда - КолонкаИмя.ОтображатьИерархию = НовыйРежим; - КолонкаСиноним.ОтображатьИерархию = Не НовыйРежим; - КонецЕсли; - ИндексКолонкиИмя = КолонкиТП.Индекс(КолонкаИмя); - ИндексКолонкиСиноним = КолонкиТП.Индекс(КолонкаСиноним); - Если НовыйРежим = (ИндексКолонкиИмя > ИндексКолонкиСиноним) Тогда - КолонкиТП.Сдвинуть(КолонкаИмя, ИндексКолонкиСиноним - ИндексКолонкиИмя); - КонецЕсли; - Если НовыйРежим Тогда - ТабличноеПоле.ТекущаяКолонка = ТабличноеПоле.Колонки.Имя; - Иначе - ТабличноеПоле.ТекущаяКолонка = ТабличноеПоле.Колонки.Представление; - КонецЕсли; - -КонецПроцедуры - -Процедура ТабличноеПолеОформитьЯчейкиИмяСинонимЛкс(ТабличноеПоле, ОформлениеСтроки, - ИмяКолонкиИмя = "Имя", ИмяКолонкиСиноним = "Представление", ИмяКолонкиИндексКартинки = "ИндексКартинки", ДанныеФлажка = "") Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; - Если ДанныеСтроки = Неопределено Тогда - // Свернутое табличное поле может такое присылать - Возврат; - КонецЕсли; - Если ТабличноеПоле.Колонки[ИмяКолонкиИмя].Видимость Тогда - ВедущаяКолонка = ТабличноеПоле.Колонки[ИмяКолонкиИмя]; - ВедущийИндекс = ТабличноеПоле.Колонки.Индекс(ВедущаяКолонка); - КонецЕсли; - Если ТабличноеПоле.Колонки[ИмяКолонкиСиноним].Видимость Тогда - Если Ложь - Или ВедущаяКолонка = Неопределено - Или ТабличноеПоле.Колонки.Индекс(ТабличноеПоле.Колонки[ИмяКолонкиСиноним]) < ВедущийИндекс - Тогда - ВедущаяКолонка = ТабличноеПоле.Колонки[ИмяКолонкиСиноним]; - КонецЕсли; - КонецЕсли; - Если ВедущаяКолонка <> Неопределено Тогда - Ячейка = ОформлениеСтроки.Ячейки[ВедущаяКолонка.Имя]; - Если ЗначениеЗаполнено(ИмяКолонкиИндексКартинки) Тогда - ИндексКартинки = ДанныеСтроки[ИмяКолонкиИндексКартинки]; - Если ИндексКартинки >= 0 Тогда - Ячейка.ОтображатьКартинку = Истина; - Ячейка.ИндексКартинки = ИндексКартинки; - КонецЕсли; - КонецЕсли; - Если ДанныеФлажка <> "" Тогда - Ячейка.ОтображатьФлажок = Истина; - Ячейка.Флажок = ДанныеСтроки[ДанныеФлажка]; - КонецЕсли; - Если ТипЗнч(ДанныеСтроки) = Тип("СтрокаДереваЗначений") Тогда - КоличествоДочерних = ДанныеСтроки.Строки.Количество(); - Если КоличествоДочерних > 0 Тогда - Ячейка.УстановитьТекст(Ячейка.Текст + " (" + КоличествоДочерних + ")"); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ТабличноеПолеПозицияТекущейСтрокиЛкс(Знач ТабличноеПоле) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - СтарыйИндекс = Неопределено; - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - СтарыйИндекс = ТабличноеПоле.Значение.Индекс(ТабличноеПоле.ТекущаяСтрока); - КонецЕсли; - Возврат СтарыйИндекс; - -КонецФункции - -Процедура ПолеВводаРоли_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка) Экспорт - - Если ТипЗнч(Элемент.Значение) = Тип("СписокЗначений") Тогда - //Заголовок = "Выберите роли"; - МножественныйВыбор = Истина; - Иначе - //Заголовок = "Выберите роль"; - МножественныйВыбор = Ложь; - КонецЕсли; - СтандартнаяОбработка = Ложь; - //СписокВыбора = Новый СписокЗначений; - //СписокВыбора.ТипЗначения = Новый ОписаниеТипов("Строка"); - //Для Каждого РольЛ Из Метаданные.Роли Цикл - // #Если Сервер И Не Сервер Тогда - // РольЛ = Метаданные.Роли.Пользователь; - // #КонецЕсли - // НовыйЭлемент = СписокВыбора.Добавить(РольЛ.Имя, РольЛ.Представление()); - // Если МножественныйВыбор Тогда - // НовыйЭлемент.Пометка = Элемент.Значение.НайтиПоЗначению(РольЛ.Имя) <> Неопределено; - // Если НовыйЭлемент.Пометка Тогда - // НачальныйВыбор = НовыйЭлемент; - // КонецЕсли; - // Иначе - // Если РольЛ.Имя = Элемент.Значение Тогда - // НачальныйВыбор = НовыйЭлемент; - // КонецЕсли; - // КонецЕсли; - //КонецЦикла; - СписокИмен = Новый СписокЗначений; - Префикс = "Роль"; - Если МножественныйВыбор Тогда - НачальныйВыбор = Новый Массив; - Для Каждого ЭлементСписка Из Элемент.Значение Цикл - НачальныйВыбор.Добавить(Префикс + "." + ЭлементСписка.Значение); - КонецЦикла; - Иначе - НачальныйВыбор = Префикс + "." + Элемент.Значение; - КонецЕсли; - //РезультатВыбора = ирОбщий.ВыбратьЭлементСпискаЗначенийЛкс(СписокВыбора, НачальныйВыбор, Истина, Заголовок, МножественныйВыбор); - ФормаВыбораОбъектаБД = ирОбщий.ФормаВыбораОбъектаМетаданныхЛкс(,, НачальныйВыбор, МножественныйВыбор,,,,,,,,,,,,,,,,,, Истина); - РезультатВыбора = ФормаВыбораОбъектаБД.ОткрытьМодально(); - - Если РезультатВыбора <> Неопределено Тогда - Если МножественныйВыбор Тогда - СписокИмен = Новый СписокЗначений; - Для Каждого ВыбранныйЭлемент Из РезультатВыбора Цикл - //СписокИмен.Добавить(ВыбранныйЭлемент.Значение); - СписокИмен.Добавить(ПоследнийФрагментЛкс(ВыбранныйЭлемент)); - КонецЦикла; - РезультатВыбора = СписокИмен; - Иначе - //РезультатВыбора = РезультатВыбора.Значение; - РезультатВыбора = ПоследнийФрагментЛкс(РезультатВыбора.ПолноеИмяОбъекта); - КонецЕсли; - ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, РезультатВыбора); - КонецЕсли; - -КонецПроцедуры - -Процедура ПолеВводаПользователя_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка) Экспорт - - СтандартнаяОбработка = Ложь; - Если Не ПравоДоступа("Администрирование", Метаданные) Тогда - СообщитьЛкс("Из-за отстуствия права ""Администрирование"" просмотр списка пользователей не доступен"); - РезультатВыбора = ИмяПользователя(); - Иначе - ФормаВыбора = ирОбщий.ПолучитьФормуЛкс("Обработка.ирРедакторПользователей.Форма",, Элемент); - ФормаВыбора.РежимВыбора = Истина; - ФормаВыбора.НачальноеЗначениеВыбора = Элемент.Значение; - РезультатВыбора = ФормаВыбора.ОткрытьМодально(); - КонецЕсли; - Если РезультатВыбора <> Неопределено Тогда - ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, РезультатВыбора); - КонецЕсли; - -КонецПроцедуры - -Процедура ПолеВводаПользователяОСНачалоВыбораЛкс(Знач Элемент, СтандартнаяОбработка, ДобавлятьЛидирующиеСлеши = Ложь) Экспорт - - СтандартнаяОбработка = Ложь; - НачальноеЗначение = Элемент.Значение; - НачальноеЗначение = СтрЗаменить(НачальноеЗначение, ".\", "\\" + ИмяКомпьютера() + "\"); - Маркер = "\\"; - Если Не СтрНачинаетсяСЛкс(НачальноеЗначение, Маркер) Тогда - НачальноеЗначение = Маркер + НачальноеЗначение; - КонецЕсли; - ФормаВыбораПользователяWindows = ирКэш.Получить().ПолучитьФорму("ВыборПользователяWindows",, Элемент); - ФормаВыбораПользователяWindows.ВыбранныйПользовательWindows = НачальноеЗначение; - Результат = ФормаВыбораПользователяWindows.ОткрытьМодально(); - Если Результат <> Неопределено Тогда - Если Не ДобавлятьЛидирующиеСлеши И СтрНачинаетсяСЛкс(Результат, Маркер) Тогда - Результат = Сред(Результат, СтрДлина(Маркер) + 1); - КонецЕсли; - //Результат = СтрЗаменить(Результат, ИмяКомпьютера() + "\", ".\"); - ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, Результат); - КонецЕсли; - -КонецПроцедуры - -Процедура ПолеВводаСтрокиСоединенияADODBНачалоВыбораЛкс(Знач Элемент, СтандартнаяОбработка) Экспорт - - СтандартнаяОбработка = Ложь; - СоединениеADO = Новый COMОбъект("ADODB.Connection"); - СоединениеADO.ConnectionString = Элемент.Значение; - ДатаЛинк = Новый COMОбъект("DataLinks"); - Если ДатаЛинк.PromptEdit(СоединениеADO) Тогда - ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, СоединениеADO.ConnectionString); - КонецЕсли; - -КонецПроцедуры - -Функция ОпределитьВедущуюСтроковуюКолонкуТабличногоПоляЛкс(ТабличноеПолеДерева) Экспорт - - Если Истина - И ТабличноеПолеДерева.ТекущаяКолонка <> Неопределено - И ЗначениеЗаполнено(ТабличноеПолеДерева.ТекущаяКолонка.Данные) - И ТабличноеПолеДерева.Значение.Колонки[ТабличноеПолеДерева.ТекущаяКолонка.Данные].ТипЗначения.СодержитТип(Тип("Строка")) - Тогда - ТекущаяКолонкаТП = ТабличноеПолеДерева.ТекущаяКолонка; - Иначе - Для Каждого КолонкаТП Из ТабличноеПолеДерева.Колонки Цикл - Если Не КолонкаТП.Видимость Тогда - Продолжить; - КонецЕсли; - КолонкаДерева = ТабличноеПолеДерева.Значение.Колонки[КолонкаТП.Данные]; - Если КолонкаДерева.ТипЗначения.СодержитТип(Тип("Строка")) Тогда - ТекущаяКолонкаТП = КолонкаТП; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Возврат ТекущаяКолонкаТП; - -КонецФункции - -Функция _НайтиСтрокуТабличногоПоляДереваЗначенийСоСложнымФильтромЛкс(ТабличноеПолеДерева, ПолеВводаФильтра, Подстроки = "") Экспорт - - ТекущаяКолонкаТП = ОпределитьВедущуюСтроковуюКолонкуТабличногоПоляЛкс(ТабличноеПолеДерева); - Если ТекущаяКолонкаТП = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - ИмяТекущейКолонки = ТекущаяКолонкаТП.Данные; - Если Не ЗначениеЗаполнено(ИмяТекущейКолонки) Тогда - Возврат Неопределено; - КонецЕсли; - ВсеСтроки = ВсеСтрокиДереваЗначенийЛкс(ТабличноеПолеДерева.Значение); - ТекущаяСтрока = ТабличноеПолеДерева.ТекущаяСтрока; - Если Подстроки = "" Тогда - Подстроки = ПолеВводаФильтра.Значение; - КонецЕсли; - Фрагменты = СтрРазделитьЛкс(НРег(Подстроки), " ", Истина); - ИндексСтроки = 0; - Если ТекущаяСтрока <> Неопределено Тогда - Если ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекущаяСтрока[ИмяТекущейКолонки], Фрагменты) Тогда - ИндексСтроки = ВсеСтроки.Найти(ТекущаяСтрока) + 1; - КонецЕсли; - КонецЕсли; - Успех = Ложь; - Для ИндексСтроки = ИндексСтроки По ВсеСтроки.Количество() - 1 Цикл - ТекущаяСтрока = ВсеСтроки[ИндексСтроки]; - Если ЛиСтрокаСодержитВсеПодстрокиЛкс(ТекущаяСтрока[ИмяТекущейКолонки], Фрагменты) Тогда - ТабличноеПолеДерева.ТекущаяСтрока = ТекущаяСтрока; - ТабличноеПолеДерева.ТекущаяКолонка = ТекущаяКолонкаТП; - Успех = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - Если Успех Тогда - ПолеВводаФильтра.ЦветФонаПоля = Новый Цвет(); - Иначе - ТекущаяСтрока = Неопределено; - ПолеВводаФильтра.ЦветФонаПоля = ПолучитьЦветСтиляЛкс("ирЦветФонаОшибки"); - КонецЕсли; - Возврат ТекущаяСтрока; - -КонецФункции - -Процедура ВыделитьСтрокиТабличногоПоляПоКлючуЛкс(ТабличноеПоле, СтруктураИлиСтрокаТаблицы, Знач СтрокаКлюча = "", Сортировать = Истина) Экспорт - - Если СтруктураИлиСтрокаТаблицы = Неопределено Тогда - Возврат; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - СтруктураИлиСтрокаТаблицы = Новый Структура; - #КонецЕсли - Если Не ЗначениеЗаполнено(СтрокаКлюча) Тогда - СтрокаКлюча = ИменаСвойствСтруктурыЛкс(СтруктураИлиСтрокаТаблицы); - КонецЕсли; - КлючПоиска = Новый Структура(СтрокаКлюча); - ЗаполнитьЗначенияСвойств(КлючПоиска, СтруктураИлиСтрокаТаблицы); - КоллекцияСтрок = ТабличноеПоле.Значение; - Если ТипЗнч(КоллекцияСтрок) = Тип("ДеревоЗначений") Тогда - КоллекцияСтрок = КоллекцияСтрок.Строки; - КонецЕсли; - Если ЗначениеЗаполнено(СтрокаКлюча) И Сортировать Тогда - Если ПредупреждениеПередСортировкойПоСсылочнымКолонкамЛкс(СтрокаКлюча, ТабличноеПоле) Тогда - КоллекцияСтрок.Сортировать(СтрокаКлюча); - КонецЕсли; - КонецЕсли; - ТабличноеПоле.ВыделенныеСтроки.Очистить(); - ТекущаяСтрокаУстановлена = Ложь; - Если ТипЗнч(КоллекцияСтрок) = Тип("КоллекцияСтрокДереваЗначений") Тогда - НайденныеСтроки = КоллекцияСтрок.НайтиСтроки(КлючПоиска, Истина); - Иначе - НайденныеСтроки = КоллекцияСтрок.НайтиСтроки(КлючПоиска); - КонецЕсли; - Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл - ТабличноеПоле.ВыделенныеСтроки.Добавить(НайденнаяСтрока); - Если Не ТекущаяСтрокаУстановлена Тогда - ТабличноеПоле.ТекущаяСтрока = НайденнаяСтрока; - ТекущаяСтрокаУстановлена = Истина; - КонецЕсли; - КонецЦикла; - //ТабличноеПоле.ОбновитьСтроки(); - -КонецПроцедуры - -Процедура ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(ТабличноеПоле, ЧислоПервыхИгнорируемыхСтрок = 0) Экспорт - - Счетчик = 0; - Для Каждого Строка Из ТабличноеПоле.Значение.Строки Цикл - Счетчик = Счетчик + 1; - Если Счетчик > ЧислоПервыхИгнорируемыхСтрок Тогда - ТабличноеПоле.Развернуть(Строка, Истина); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура ТабличноеПолеДеревоЗначений_СвернутьВсеСтрокиЛкс(ТабличноеПоле, ВосстановитьТекущуюСтроку = Ложь) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - МассивТекущихУзлов = Новый Массив; - ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; - Пока ТекущаяСтрока <> Неопределено Цикл - МассивТекущихУзлов.Добавить(ТекущаяСтрока); - ТекущаяСтрока = ТекущаяСтрока.Родитель; - КонецЦикла; - Если Не ВосстановитьТекущуюСтроку Тогда - ТабличноеПоле.ТекущаяСтрока = МассивТекущихУзлов[МассивТекущихУзлов.ВГраница()]; - МассивТекущихУзлов.Очистить(); - КонецЕсли; - ВсеСтрокиДерева = ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение); - Индикатор = ПолучитьИндикаторПроцессаЛкс(ВсеСтрокиДерева.Количество()); - Для Каждого СтрокаДерева Из ВсеСтрокиДерева Цикл - ОбработатьИндикаторЛкс(Индикатор); - Если Истина - И ТабличноеПоле.Развернут(СтрокаДерева) - И СтрокаДерева.Строки.Количество() > 0 - И МассивТекущихУзлов.Найти(СтрокаДерева) = Неопределено - Тогда - ТабличноеПоле.Свернуть(СтрокаДерева); - КонецЕсли; - КонецЦикла; - ОсвободитьИндикаторПроцессаЛкс(); - -КонецПроцедуры - -// Изменяет свернутость строк табличного поля дерева значений. -// -// Параметры: -// Дерево - ТабличноеПоле - связанное с деревом значений и включенным режимом "Дерево"; -// Свернуть - Булево, *Истина - новое значение свернутости -// Строки - СтрокиДереваЗначений, *Неопределено - если Неопределено, то обрабатываются все строки дерева -// -Процедура ДеревоЗначенийСвернутьРазвернутьЛкс(Дерево, Свернуть = Ложь, Строки = Неопределено, СПодчиненными = Истина) Экспорт - - Если Свернуть Тогда - ПредставлениеПроцесса = "Сворачиваем строки дерева"; - Иначе - ПредставлениеПроцесса = "Разворачиваем строки дерева"; - КонецЕсли; - Если Строки = Неопределено Тогда - Строки = Дерево.Значение.Строки; - КонецЕсли; - Индикатор = ПолучитьИндикаторПроцессаЛкс(Строки.Количество(), ПредставлениеПроцесса); - Для Каждого СтрокаДерева Из Строки Цикл - ОбработатьИндикаторЛкс(Индикатор); - Если Истина - И Свернуть - И Дерево.Развернут(СтрокаДерева) - Тогда - Дерево.Свернуть(СтрокаДерева); - ИначеЕсли Истина - И Не Свернуть - И Не Дерево.Развернут(СтрокаДерева) - Тогда - Дерево.Развернуть(СтрокаДерева, СПодчиненными); - КонецЕсли; - КонецЦикла; - ОсвободитьИндикаторПроцессаЛкс(Индикатор); - -КонецПроцедуры - -Процедура ТабличноеПолеДеревоЗначений_АвтоРазвернутьВсеСтрокиЛкс(ТабличноеПоле, МаксимальноеЧислоСтрок = 30, ТекущаяСтрокаУстановлена = Ложь) Экспорт - - ВсеСтроки = ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение); - ЧислоДинамическихСтрок = ВсеСтроки.Количество(); - Если ЧислоДинамическихСтрок > 0 Тогда - Если ЧислоДинамическихСтрок <= МаксимальноеЧислоСтрок Тогда - ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(ТабличноеПоле); - Если Не ТекущаяСтрокаУстановлена Тогда - ТабличноеПоле.ТекущаяСтрока = ТабличноеПоле.Значение.Строки[0].Строки[0]; - КонецЕсли; - Иначе - Если Не ТекущаяСтрокаУстановлена Тогда - ТабличноеПоле.ТекущаяСтрока = ТабличноеПоле.Значение.Строки[0]; - Если ТабличноеПоле.Значение.Строки.Количество() = 1 Тогда - ТабличноеПоле.Развернуть(ТабличноеПоле.ТекущаяСтрока); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ТабличноеПолеРезультатаЗапросаНастроитьКолонкиЛкс(Знач ТабличноеПолеРезультата, Знач СтарыеКолонкиТабличногоПоля = Неопределено, Знач ШиринаПустойКолонки = Неопределено, - МаксКоличествоСтрокДляАнализа = 10000, Знач ТолькоПросмотр = Истина) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПолеРезультата = Новый ТабличноеПоле; - #КонецЕсли - МинимальнаяШиринаКолонки = МинимальнаяШиринаКолонкиЛкс(); - Если ШиринаПустойКолонки = Неопределено Тогда - ШиринаПустойКолонки = МинимальнаяШиринаКолонки; - КонецЕсли; - Если ТипЗнч(ТабличноеПолеРезультата.Значение) = Тип("ДеревоЗначений") Тогда - // КоличествоСтрокВТаблице = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ТабличноеПолеРезультата.Значение); // Долго - КоличествоСтрокВТаблице = 10000000; - Иначе - КоличествоСтрокВТаблице = ТабличноеПолеРезультата.Значение.Количество(); - КонецЕсли; - ВыполнятьАнализДанных = КоличествоСтрокВТаблице < МаксКоличествоСтрокДляАнализа; - Для Каждого Колонка Из ТабличноеПолеРезультата.Колонки Цикл - ДанныеКолонки = Колонка.Данные; - Если Не ЗначениеЗаполнено(ДанныеКолонки) Тогда - ДанныеКолонки = Колонка.ДанныеФлажка; // Здесь по крайней мере в 8.3 уже всегда пусто - КонецЕсли; - Если Не ЗначениеЗаполнено(ДанныеКолонки) Тогда - Продолжить; - КонецЕсли; - Если ТолькоПросмотр <> Неопределено Тогда - Колонка.ТолькоПросмотр = ТолькоПросмотр; - КонецЕсли; - //Колонка.Формат = "ЧН="; - КолонкаТЗ = ТабличноеПолеРезультата.Значение.Колонки[ДанныеКолонки]; - Если СтарыеКолонкиТабличногоПоля <> Неопределено Тогда - СохраненныеНастройкиКолонки = СтарыеКолонкиТабличногоПоля[КлючХраненияНастроекКолонкиРезультатаЗапросаЛкс(ТабличноеПолеРезультата, Колонка)]; - КонецЕсли; - Если СохраненныеНастройкиКолонки <> Неопределено Тогда - Колонка.Ширина = СохраненныеНастройкиКолонки.Ширина; - Колонка.АвтоВысотаЯчейки = СохраненныеНастройкиКолонки.АвтоВысотаЯчейки; - Колонка.ВысотаЯчейки = СохраненныеНастройкиКолонки.ВысотаЯчейки; - Иначе - Если Истина - И КолонкаТЗ.ТипЗначения.СодержитТип(Тип("Строка")) - И (Ложь - Или КолонкаТЗ.ТипЗначения.КвалификаторыСтроки.Длина = 0 - Или КолонкаТЗ.ТипЗначения.КвалификаторыСтроки.Длина > 50) - Тогда - Колонка.Ширина = 50; - ИначеЕсли Колонка.ИзменениеРазмера = ИзменениеРазмераКолонки.Изменять Тогда - Колонка.Ширина = Макс(Колонка.Ширина, МинимальнаяШиринаКолонки); - КонецЕсли; - КонецЕсли; - Если ВыполнятьАнализДанных Тогда - ОписаниеТиповБезNull = Новый ОписаниеТипов(КолонкаТЗ.ТипЗначения, , "NUll"); - ПустыеСтрокиБезNUll = ТабличноеПолеРезультата.Значение.НайтиСтроки(Новый Структура(ДанныеКолонки, ОписаниеТиповБезNull.ПривестиЗначение())); - ПустыеСтрокиNull = ТабличноеПолеРезультата.Значение.НайтиСтроки(Новый Структура(ДанныеКолонки, Null)); - Если ПустыеСтрокиБезNUll.Количество() + ПустыеСтрокиNull.Количество() = КоличествоСтрокВТаблице Тогда - Колонка.Ширина = ШиринаПустойКолонки; - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Функция _БезопасноеОписаниеТиповЛкс(ОписаниеТипов) Экспорт - #Если Сервер И Не Сервер Тогда - ОписаниеТипов = Новый ОписаниеТипов; - #КонецЕсли - Типы = ОписаниеТипов.Типы(); - Если Типы.Количество() > 0 Тогда - ПростойТип = Типы[0]; - Если Истина - И Типы.Количество() = 1 - //// Антибаг платформы 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1015693#1015693 - //И (Ложь - // Или ПростойТип = Тип("КоллекцияАтрибутовDOM") - // Или ПростойТип = Тип("ДокументDOM") - // Или ПростойТип = Тип("СписокУзловDOM") - // Или ПростойТип = Тип("АтрибутDOM") - // Или ПростойТип = Тип("ТипУзлаDOM") - // Или ПростойТип = Тип("ЭлементDOM") - // Или ПростойТип = Тип("КонфигурацияДокументаDOM") - // Или ПростойТип = Тип("ОпределениеТипаДокументаDOM") - // Или ПростойТип = Тип("КоллекцияНотацийDOM") - // Или ПростойТип = Тип("КоллекцияСущностейDOM") - // Или ПростойТип = Тип("ТипЗначенияXDTO") - // Или ПростойТип = Тип("ТипОбъектаXDTO") - // // Эти актуальны и в 8.3.18 - // Или ПростойТип = Тип("ЗначениеXDTO") - // Или ПростойТип = Тип("ПакетXDTO")) - Тогда - ВсеРедактируемыеТипы = ирОбщий.ОписаниеТиповВсеРедактируемыеТипыЛкс(); - #Если Сервер И Не Сервер Тогда - ВсеРедактируемыеТипы = Новый ОписаниеТипов; - #КонецЕсли - Если Не ВсеРедактируемыеТипы.СодержитТип(Типы[0]) Тогда - // Антибаг платформы 8.2-8.3.6 https://partners.v8.1c.ru/forum/t/1401671/m/1401671 - ОписаниеТипов = Новый ОписаниеТипов; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат ОписаниеТипов; -КонецФункции - -Функция КлючХраненияНастроекКолонкиРезультатаЗапросаЛкс(Знач ТабличноеПолеРезультата, Знач СтараяКолонкаТП) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПолеРезультата = Новый ТабличноеПоле; - #КонецЕсли - СтараяКолонкаТЗ = ТабличноеПолеРезультата.Значение.Колонки[СтараяКолонкаТП.Имя]; - Возврат СтараяКолонкаТП.Имя + " // " + Лев(СтараяКолонкаТЗ.ТипЗначения, 300); - -КонецФункции - -Функция ТабличноеПолеСортироватьЛкс(ЭтаФорма, ТабличноеПоле, ПоВозрастанию = Истина, Знач ПроверятьСортировкуСсылок = Истина) Экспорт - Если ТабличноеПоле.ТолькоПросмотр Тогда - Возврат Неопределено; - КонецЕсли; - ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка; - Если ТекущаяКолонка = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - ИмяКолонки = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда - СообщитьЛкс("Сортировка по этой колонке невозможна"); - Возврат Неопределено; - КонецЕсли; - Если ПроверятьСортировкуСсылок Тогда - Продолжаем = ПредупреждениеПередСортировкойПоСсылочнымКолонкамЛкс(ИмяКолонки, ТабличноеПоле); - Если Не Продолжаем Тогда - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - Если ПоВозрастанию Тогда - СтрокаСортировки = ИмяКолонки + " Возр"; - Иначе - СтрокаСортировки = ИмяКолонки + " Убыв"; - КонецЕсли; - Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда - Родитель = РодительСтрокиДереваЛкс(ТабличноеПоле.ТекущаяСтрока); - КоллекцияСтрок = Родитель.Строки; - Иначе - КоллекцияСтрок = ТабличноеПоле.Значение; - КонецЕсли; - КоллекцияСтрок.Сортировать(СтрокаСортировки); - Возврат СтрокаСортировки; -КонецФункции - -// http://www.hostedredmine.com/issues/877327 https://partners.v8.1c.ru/forum/t/1919734/m/1919734 -Функция ПредупреждениеПередСортировкойПоСсылочнымКолонкамЛкс(Знач ИменаКолонок, Знач ТабличноеПоле, ОпасноеКоличествоСсылок = 5000) Экспорт - - Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда - Родитель = РодительСтрокиДереваЛкс(ТабличноеПоле.ТекущаяСтрока); - КоллекцияСтрок = Родитель.Строки; - Иначе - КоллекцияСтрок = ТабличноеПоле.Значение; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - КоллекцияСтрок = Новый ТаблицаЗначений; - #КонецЕсли - Продолжаем = Истина; - МассивИмен = СтрРазделитьЛкс(ИменаКолонок, ",", Истина); - Если КоллекцияСтрок.Количество() * МассивИмен.Количество() > ОпасноеКоличествоСсылок Тогда - Если ЛиТабличнаяЧастьЛкс(ТипЗнч(КоллекцияСтрок)) Тогда - Колонки = ТабличноеПоле.Значение.ВыгрузитьКолонки().Колонки; - Иначе - Колонки = КоллекцияСтрок[0].Владелец().Колонки; - КонецЕсли; - КоличествоСсылочныхКолонок = 0; - НепустыеЗначенияПростыхСсылочныхКолонок = Новый СписокЗначений; - Для Каждого ИмяКолонки Из МассивИмен Цикл - КоличествоСсылочныхТипов = 0; - Для Каждого Тип Из Колонки[ИмяКолонки].ТипЗначения.Типы() Цикл - Если ирОбщий.ЛиТипСсылкиБДЛкс(Тип) Тогда - КоличествоСсылочныхТипов = КоличествоСсылочныхТипов + 1; - Если КоличествоСсылочныхТипов > 1 Тогда - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Если КоличествоСсылочныхТипов = 1 Тогда - НепустыеЗначенияПростыхСсылочныхКолонок.Добавить(, ИмяКолонки); - КонецЕсли; - Если КоличествоСсылочныхТипов > 0 Тогда - КоличествоСсылочныхКолонок = КоличествоСсылочныхКолонок + 1; - КонецЕсли; - КонецЦикла; - Если КоличествоСсылочныхКолонок * КоллекцияСтрок.Количество() > ОпасноеКоличествоСсылок Тогда - Ответ = Вопрос("Сортировка в памяти большого числа ссылочных значений может длиться долго, если для них задано динамическое представление. Сортировать?", РежимДиалогаВопрос.ДаНет, - 10, КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Продолжаем = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат Продолжаем; - -КонецФункции - -Процедура ТабличноеПолеПорядкаКомпоновкиВыборЛкс(Знач Элемент, Знач ВыбраннаяСтрока, Знач Колонка, СтандартнаяОбработка) Экспорт - - Если ТипЗнч(ВыбраннаяСтрока) = Тип("АвтоЭлементПорядкаКомпоновкиДанных") Тогда - Возврат; - КонецЕсли; - Если Колонка = Элемент.Колонки.ТипУпорядочивания Тогда - Если ВыбраннаяСтрока.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр Тогда - ВыбраннаяСтрока.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; - Иначе - ВыбраннаяСтрока.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; - КонецЕсли; - СтандартнаяОбработка = Ложь; - КонецЕсли; - -КонецПроцедуры - -Процедура ТабличноеПолеЭлементовКомпоновкиПеретаскиваниеЛкс(Знач Элемент, Знач ПараметрыПеретаскивания, СтандартнаяОбработка, Знач Строка, Знач Колонка) Экспорт - - ЭлементыКомпоновки = Элемент.Значение; - #Если Сервер И Не Сервер Тогда - Пустышка = Новый НастройкиКомпоновкиДанных; - ЭлементыКомпоновки = Пустышка.Порядок; - #КонецЕсли - ЗначениеПеретаскивания = ПараметрыПеретаскивания.Значение; - Если ТипЗнч(ЗначениеПеретаскивания) = Тип("Массив") Тогда - Если ТипЗнч(ЗначениеПеретаскивания[0]) = Тип("ДоступноеПолеКомпоновкиДанных") Тогда - СтандартнаяОбработка = Ложь; - Для Каждого ЭлементПеретаскивания Из ЗначениеПеретаскивания Цикл - КоллекцияПриемник = ЭлементыКомпоновки.Элементы; - Если Строка <> Неопределено Тогда - Попытка - КоллекцияПриемник = Строка.Элементы; - Исключение - КонецПопытки; - КонецЕсли; - НовыйЭлемент = НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КоллекцияПриемник, ЭлементПеретаскивания.Поле, ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение); - Если Строка <> Неопределено Тогда - СдвинутьЭлементКоллекцииНаПозициюДругогоЭлементаЛкс(КоллекцияПриемник, НовыйЭлемент, Строка); - КонецЕсли; - КонецЦикла; - Элемент.ТекущаяСтрока = НовыйЭлемент; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура СдвинутьЭлементКоллекцииНаПозициюДругогоЭлементаЛкс(Знач Коллекция, Знач СдвигаемыйЭлемент, Знач ЭлементСЦелевойПозицией) Экспорт - - #Если Сервер И Не Сервер Тогда - Коллекция = Новый ТаблицаЗначений; - #КонецЕсли - Коллекция.Сдвинуть(СдвигаемыйЭлемент, Коллекция.Индекс(ЭлементСЦелевойПозицией) - Коллекция.Индекс(СдвигаемыйЭлемент)); - -КонецПроцедуры - -Процедура ПрименитьСтрокуПоискаКТабличномуПолюДереваЛкс(ЭтаФорма, ТабличноеПоле, СтрокаПоиска, ИменаКолонокДанныхДляПоиска, АктивизироватьПервуюСтроку = Истина, - Знач ТабличноеПолеНайденных = Неопределено, Знач Кнопки = Неопределено) Экспорт - - СтруктураКолонок = Новый Структура(ИменаКолонокДанныхДляПоиска); - Если ТабличноеПолеНайденных <> Неопределено Тогда - НайденныеСтроки = ТабличноеПолеНайденных.Значение; - НайденныеСтроки.Очистить(); - Иначе - НайденныеСтроки = Новый ТаблицаЗначений; - НайденныеСтроки.Колонки.Добавить("СтрокаДанных"); - КонецЕсли; - ТекущийИндексНайденнойСтроки = 0; - Если ЗначениеЗаполнено(СтрокаПоиска) Тогда - СловаПоиска = РазделитьСтрокуПоискаНаСловаПоискаЛкс(НРег(СтрокаПоиска)); - ВсеСтроки = ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение); - ИндексТекущейСтроки = ВсеСтроки.Найти(ТабличноеПоле.ТекущаяСтрока); - ИндексАктивизируемойСтроки = Неопределено; - Для Каждого СтрокаДанных Из ВсеСтроки Цикл - Для Каждого КлючИЗначение Из СтруктураКолонок Цикл - ИнтереснаяКолонка = КлючИЗначение.Ключ; - Попытка - Пустышка = СтрокаДанных.Родитель; - Исключение - // Строка дерева удалена. Например в исследователе объектов - Прервать; - КонецПопытки; - Значение = СтрокаДанных[ИнтереснаяКолонка]; - Если Истина - И ТипЗнч(Значение) = Тип("Строка") - И ЛиСтрокаСодержитВсеПодстрокиЛкс(Значение, СловаПоиска) - Тогда - СтрокаРезультата = НайденныеСтроки.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаРезультата, СтрокаДанных); - СтрокаРезультата.СтрокаДанных = СтрокаДанных; - Если ИндексТекущейСтроки <> Неопределено И ВсеСтроки.Найти(СтрокаДанных) >= ИндексТекущейСтроки И ИндексАктивизируемойСтроки = Неопределено Тогда - ИндексАктивизируемойСтроки = НайденныеСтроки.Количество() - 1; - КонецЕсли; - Родитель = СтрокаДанных; - Пока Родитель <> Неопределено Цикл - // В большом дереве вредно сразу разворачивать строки, т.к. много времени тратится на отрисовку строк - //Если Родитель <> СтрокаДанных И Не ТабличноеПоле.Развернут(Родитель) Тогда - // ТабличноеПоле.Развернуть(Родитель); - //КонецЕсли; - Родитель = Родитель.Родитель; - КонецЦикла; - Прервать; - КонецЕсли; - КонецЦикла; - Если НайденныеСтроки.Количество() > 1000 Тогда - Прервать; - КонецЕсли; - КонецЦикла; - Если НайденныеСтроки.Количество() > 0 Тогда - Если АктивизироватьПервуюСтроку Тогда - Если ИндексАктивизируемойСтроки = Неопределено Тогда - ИндексАктивизируемойСтроки = 0; - КонецЕсли; - Если ТабличноеПолеНайденных = Неопределено Тогда - ТабличноеПоле.ТекущаяСтрока = НайденныеСтроки[ИндексАктивизируемойСтроки].СтрокаДанных; - Иначе - ТабличноеПолеНайденных.ТекущаяСтрока = НайденныеСтроки[ИндексАктивизируемойСтроки]; - КонецЕсли; - КонецЕсли; - Если ТабличноеПоле.ТекущаяСтрока <> Неопределено Тогда - НайденнаяТекущаяСтрока = НайденныеСтроки.Найти(ТабличноеПоле.ТекущаяСтрока, "СтрокаДанных"); - Если НайденнаяТекущаяСтрока <> Неопределено Тогда - ТекущийИндексНайденнойСтроки = НайденныеСтроки.Индекс(НайденнаяТекущаяСтрока); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Кнопки <> Неопределено Тогда - Для Каждого Кнопка Из Кнопки Цикл - Кнопка.Доступность = НайденныеСтроки.Количество() > 0; - КонецЦикла; - КонецЕсли; - МенеджерПоиска = СоздатьМенеджерПоискаВТабличномПолеЛкс(Новый Структура(ИменаКолонокДанныхДляПоиска), НайденныеСтроки, ТекущийИндексНайденнойСтроки); - ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле).МенеджерПоиска = МенеджерПоиска; - ТабличноеПоле.ОбновитьСтроки(); - -КонецПроцедуры - -Функция СоздатьМенеджерПоискаВТабличномПолеЛкс(Знач КолонкиПоиска = Неопределено, Знач НайденныеСтроки = Неопределено, Знач ТекущийИндексНайденнойСтроки = Неопределено, - Знач РазрешитьОкраску = Ложь, Знач ИскатьСРодителем = Ложь, Знач ПрефиксСтрокиПоиска = "") Экспорт - - Если НайденныеСтроки = Неопределено Тогда - НайденныеСтроки = Новый Массив; - КонецЕсли; - МенеджерПоиска = Новый Структура; - МенеджерПоиска.Вставить("ТекущийИндексНайденнойСтроки", ТекущийИндексНайденнойСтроки); - МенеджерПоиска.Вставить("НайденныеСтроки", НайденныеСтроки); - МенеджерПоиска.Вставить("КолонкиПоиска", КолонкиПоиска); - МенеджерПоиска.Вставить("РазрешитьОкраску", РазрешитьОкраску); - МенеджерПоиска.Вставить("ИскатьСРодителем", ИскатьСРодителем); // Это разрешение такого поиска. Фактический режим определяется с учетом искомой строки - МенеджерПоиска.Вставить("ПрефиксСтрокиПоиска", ПрефиксСтрокиПоиска); // По умолчанию используем имя табличного поля - Возврат МенеджерПоиска; - -КонецФункции - -Процедура СледующееВхождениеСтрокиПоискаВТабличномПолеЛкс(ЭтаФорма, ТабличноеПоле) Экспорт - - МенеджерПоиска = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле).МенеджерПоиска; - Если МенеджерПоиска = Неопределено Тогда - Возврат; - КонецЕсли; - Если МенеджерПоиска.НайденныеСтроки.Количество() > 0 Тогда - МенеджерПоиска.ТекущийИндексНайденнойСтроки = МенеджерПоиска.ТекущийИндексНайденнойСтроки + 1; - Если МенеджерПоиска.ТекущийИндексНайденнойСтроки >= МенеджерПоиска.НайденныеСтроки.Количество() Тогда - МенеджерПоиска.ТекущийИндексНайденнойСтроки = 0; - КонецЕсли; - ТабличноеПоле.ТекущаяСтрока = МенеджерПоиска.НайденныеСтроки[МенеджерПоиска.ТекущийИндексНайденнойСтроки].СтрокаДанных; - КонецЕсли; - -КонецПроцедуры - -Процедура ПредыдущееВхождениеСтрокиПоискаВТабличномПолеЛкс(ЭтаФорма, ТабличноеПоле) Экспорт - - МенеджерПоиска = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТабличноеПоле).МенеджерПоиска; - Если МенеджерПоиска = Неопределено Тогда - Возврат; - КонецЕсли; - Если МенеджерПоиска.НайденныеСтроки.Количество() > 0 Тогда - МенеджерПоиска.ТекущийИндексНайденнойСтроки = МенеджерПоиска.ТекущийИндексНайденнойСтроки - 1; - Если МенеджерПоиска.ТекущийИндексНайденнойСтроки < 0 Тогда - МенеджерПоиска.ТекущийИндексНайденнойСтроки = МенеджерПоиска.НайденныеСтроки.Количество() - 1; - КонецЕсли; - ТабличноеПоле.ТекущаяСтрока = МенеджерПоиска.НайденныеСтроки[МенеджерПоиска.ТекущийИндексНайденнойСтроки].СтрокаДанных; - КонецЕсли; - -КонецПроцедуры - -Процедура ДобавитьСсылкуВИсториюРаботыЛкс(Ссылка, ДобавлятьВИсториюРаботыПлатформы = Истина, ДобавлятьВИсториюИнтерфейснойПанели = Истина) Экспорт - - Если ДобавлятьВИсториюРаботыПлатформы Тогда - ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Ссылка)); - КонецЕсли; - Если ДобавлятьВИсториюИнтерфейснойПанели Тогда - ФормаИнтерфейснойПанели = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); - СтруктураЭлемента = Новый Структура(); - СтруктураЭлемента.Вставить("Вид", Ссылка.Метаданные().ПолноеИмя()); - СтруктураЭлемента.Вставить("Имя", Ссылка); - ФормаИнтерфейснойПанели.ДобавитьСтрокуВСтатическуюВетку(СтруктураЭлемента, Ложь); - КонецЕсли; - -КонецПроцедуры - -Процедура ДобавитьИнструментВИсториюРаботыЛкс(Форма, ДобавлятьВИсториюРаботыПлатформы = Истина, ДобавлятьВИсториюИнтерфейснойПанели = Истина) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ИмяФормы = ПолноеИмяФормыЛкс(Форма); - Если Не ЗначениеЗаполнено(ИмяФормы) Тогда - Возврат; - КонецЕсли; - Попытка - ОсновнойОбъект = Форма.ЭтотОбъект; - Исключение - Возврат; - КонецПопытки; - Если ТипЗнч(ОсновнойОбъект) = Тип("УправляемаяФорма") Тогда - ПолноеИмяМД = ИмяФормы; - Иначе - ПолноеИмяМД = ОсновнойОбъект.Метаданные().ПолноеИмя(); - КонецЕсли; - Фрагменты = ирОбщий.СтрРазделитьЛкс(ПолноеИмяМД); - Если Ложь - Или Фрагменты[1] = "ирДинамическийСписок" - Или Фрагменты[1] = "ирРедакторОбъектаБД" - Или Фрагменты[1] = "ирИнтерфейснаяПанель" - Или Фрагменты[1] = "ирИсследовательОбъектов" - Тогда - Возврат; - КонецЕсли; - Фрагменты[0] = ПеревестиВРусский(Фрагменты[0]); - мПлатформа.ЗаполнитьСписокИнструментов(); - СтрокаИнструмента = мПлатформа.СписокИнструментов.НайтиСтроки(Новый Структура("Видимость, ПолноеИмя", Истина, Фрагменты[0] + "." + Фрагменты[1])); - Если СтрокаИнструмента.Количество() > 0 Тогда - Если ДобавлятьВИсториюИнтерфейснойПанели Тогда - ФормаИнтерфейснойПанели = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); - СтруктураЭлемента = Новый Структура(); - СтруктураЭлемента.Вставить("Вид", ирОбщий.МножественноеИмяМДЛкс(Фрагменты[0])); - СтруктураЭлемента.Вставить("Имя", Фрагменты[1]); - ФормаИнтерфейснойПанели.ДобавитьСтрокуВСтатическуюВетку(СтруктураЭлемента, Ложь); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ДобавитьСсылкуВИзбранноеЛкс(Ссылка, ДобавлятьВИзбранноеРаботыПользователя = Истина, ДобавлятьВИзрабнноеИнтерфейснойПанели = Истина) Экспорт - - //Если ДобавлятьВИзбранноеРаботыПользователя И ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Ссылка) Тогда - // // e1cib/command/Справочник.ирАлгоритмы.ОткрытьСписок - // // e1cib/command/Обработка.ирДинамическийСписок.Открыть - // // e1cib/command/Обработка.ирКонсольЗапросов.Команда1 - // Избранное = ХранилищеСистемныхНастроек.Загрузить("Общее/ИзбранноеРаботыПользователя"); - // Если Избранное = Неопределено Тогда - // Избранное = Новый ИзбранноеРаботыПользователя; - // КонецЕсли; - // ЭлементИзбранного = Новый ЭлементИзбранногоРаботыПользователя; - // ЭлементИзбранного.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Ссылка); - // Избранное.Добавить(ЭлементИзбранного); - // ХранилищеСистемныхНастроек.Сохранить("Общее/ИзбранноеРаботыПользователя", "", Избранное); - // ОбновитьИнтерфейс(); - //КонецЕсли; - Если ДобавлятьВИзрабнноеИнтерфейснойПанели Тогда - ФормаИнтерфейснойПанели = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); - СтруктураЭлемента = Новый Структура(); - СтруктураЭлемента.Вставить("Вид", Ссылка.Метаданные().ПолноеИмя()); - СтруктураЭлемента.Вставить("Имя", Ссылка); - ФормаИнтерфейснойПанели.ДобавитьСтрокуВСтатическуюВетку(СтруктураЭлемента, Истина); - КонецЕсли; - -КонецПроцедуры - -Процедура ДобавитьТаблицуВИзбранноеЛкс(ИмяТаблицыБД, ДобавлятьВИзбранноеРаботыПользователя = Истина, ДобавлятьВИзрабнноеИнтерфейснойПанели = Истина) Экспорт - - //Если ДобавлятьВИзбранноеРаботыПользователя Тогда - // Избранное = ХранилищеСистемныхНастроек.Загрузить("Общее/ИзбранноеРаботыПользователя"); - // Если Избранное = Неопределено Тогда - // Избранное = Новый ИзбранноеРаботыПользователя; - // КонецЕсли; - // ЭлементИзбранного = Новый ЭлементИзбранногоРаботыПользователя; - // ЭлементИзбранного.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Ссылка); - // Избранное.Добавить(ЭлементИзбранного); - // ХранилищеСистемныхНастроек.Сохранить("Общее/ИзбранноеРаботыПользователя", "", Избранное); - // ОбновитьИнтерфейс(); - //КонецЕсли; - Если ДобавлятьВИзрабнноеИнтерфейснойПанели Тогда - ОбъектМД = ОбъектМДПоПолномуИмениТаблицыБДЛкс(ИмяТаблицыБД); - Если ОбъектМД = Неопределено Тогда - Возврат; - КонецЕсли; - ФормаИнтерфейснойПанели = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - ОбъектМД = Метаданные.Справочники.Валюты; - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - КорневойТип = ПеревестиВРусский(ПервыйФрагментЛкс(ОбъектМД.ПолноеИмя())); - СтрокаТипаМетаОбъектов = мПлатформа.ОписаниеТипаМетаОбъектов(КорневойТип); - СтруктураЭлемента = Новый Структура(); - Если ЛиКорневойТипВнешнегоИсточникаДанныхЛкс(КорневойТип) Тогда - СтруктураЭлемента.Вставить("Вид", ОбъектМД.Родитель().ПолноеИмя()); - Иначе - СтруктураЭлемента.Вставить("Вид", СтрокаТипаМетаОбъектов.Множественное); - КонецЕсли; - СтруктураЭлемента.Вставить("Имя", ОбъектМД.Имя); - ФормаИнтерфейснойПанели.ДобавитьСтрокуВСтатическуюВетку(СтруктураЭлемента); - КонецЕсли; - -КонецПроцедуры - -// - -Процедура ОткрытьОбъектыИзВыделенныхЯчеекВПодбореИОбработкеОбъектовЛкс(ТабличноеПоле, Знач ИмяКолонки = "", Знач ЭтаФорма = Неопределено, Знач ПолноеИмяТаблицыБД = "") Экспорт - - Если ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда - Ответ = Вопрос("Использовать значения текущей колонки (да) или ключи строк (нет)?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); - СобиратьКлючи = Ответ = КодВозвратаДиалога.Нет; - Иначе - СобиратьКлючи = Ложь; - КонецЕсли; - Если СобиратьКлючи Тогда - МассивСсылок = Новый Массив(); - Для Каждого ВыделеннаяСтрока Из ТабличноеПоле.ВыделенныеСтроки Цикл - КлючОбъекта = КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицыБД, ВыделеннаяСтрока); - МассивСсылок.Добавить(КлючОбъекта); - КонецЦикла; - КлючТекущейСтроки = КлючСтрокиТаблицыБДИзСтрокиТаблицыЗначенийЛкс(ПолноеИмяТаблицыБД, ТабличноеПоле.ТекущаяСтрока); - Иначе - МассивСсылок = СсылкиИзВыделенныхЯчеекТабличногоПоляЛкс(ТабличноеПоле, ИмяКолонки); - КонецЕсли; - ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(МассивСсылок,, ЭтаФорма,, КлючТекущейСтроки); - -КонецПроцедуры - -Функция СсылкиИзВыделенныхЯчеекТабличногоПоляЛкс(ТабличноеПоле, ИмяКолонки = "") Экспорт - - МассивСсылок = Новый Массив; - ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - Если ВыделенныеСтроки.Количество() = 0 Тогда - Возврат МассивСсылок; - КонецЕсли; - Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда - ИмяКолонки = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда - Возврат МассивСсылок; - КонецЕсли; - ДанныеПоля = Неопределено; - Для Каждого КлючСтроки Из ВыделенныеСтроки Цикл - ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, КлючСтроки, ДанныеПоля); - ЗначениеСтроки = ДанныеСтроки[ИмяКолонки]; - ТипЗначения = ТипЗнч(ЗначениеСтроки); - Если Метаданные.НайтиПоТипу(ТипЗначения) = Неопределено Тогда - Продолжить; - КонецЕсли; - МассивСсылок.Добавить(ЗначениеСтроки); - КонецЦикла; - Возврат МассивСсылок; - -КонецФункции - -Функция ОткрытьПодборИОбработкуОбъектовИзДинамическогоСпискаЛкс(ТабличноеПоле, Знач НастройкиСписка = Неопределено, ВыделенныеСтроки = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - ДинамическийСписок = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - ПолноеИмяМД = ""; - ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле, ПолноеИмяМД); - Если ТабличноеПоле.ВыделенныеСтроки.Количество() = 1 И ЗначениеЗаполнено(ПолноеИмяМД) Тогда - Ответ = Вопрос("Обработать только выделенные строки (Да) иначе будет использован текущий отбор (Нет)?", РежимДиалогаВопрос.ДаНет); - Иначе - Ответ = КодВозвратаДиалога.Да; - КонецЕсли; - ВыбранныеПоля = Новый Массив; - МассивКолонок = КолонкиТаблицыФормыИлиТабличногоПоляЛкс(ТабличноеПоле); - ТекущееПолеТаблицы = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - Для Каждого КолонкаТП Из МассивКолонок Цикл - Если Не КолонкаТП.Видимость Тогда - Продолжить; - КонецЕсли; - ДанныеКолонки = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле, КолонкаТП); - Если Не ЗначениеЗаполнено(ДанныеКолонки) Тогда - Продолжить; - КонецЕсли; - ВыбранныеПоля.Добавить(ДанныеКолонки); - КонецЦикла; - Если Ответ = КодВозвратаДиалога.Да Тогда - Если ВыделенныеСтроки = Неопределено Тогда - ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле); - КонецЕсли; - ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; - Если Не ЗначениеЗаполнено(ПолноеИмяМД) Тогда - ВыделенныеСтроки = КлючиВыделенныхСтрокИмитатораДинамическогоСпискаЛкс(ТабличноеПоле, ВыделенныеСтроки); - ТекущиеСтроки = Новый Массив; - ТекущиеСтроки.Добавить(ТекущаяСтрока); - ТекущаяСтрока = КлючиВыделенныхСтрокИмитатораДинамическогоСпискаЛкс(ТабличноеПоле, ТекущиеСтроки)[0]; - КонецЕсли; - Форма = ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(ВыделенныеСтроки, ВыбранныеПоля,, ТекущееПолеТаблицы, ТекущаяСтрока); - Иначе - Форма = ПолучитьФормуЛкс("Обработка.ирПодборИОбработкаОбъектов.Форма",,, ПолноеИмяМД); - Форма.ПараметрВыбранныеПоля = ВыбранныеПоля; - Форма.ПараметрТекущееПоле = ТекущееПолеТаблицы; - Форма.ПараметрКлючТекущейСтроки = ТабличноеПоле.ТекущаяСтрока; - Если НастройкиСписка = Неопределено Тогда - НастройкиСписка = НастройкиДинамическогоСпискаЛкс(ДинамическийСписок); - КонецЕсли; - Форма.ПараметрНастройкаКомпоновки = НастройкиСписка; - Форма.Открыть(); - КонецЕсли; - Возврат Форма; - -КонецФункции - -// Параметры: -// ТабличноеПолеИлиТаблицаФормы - ТабличноеПоле, ТаблицаФормы, ГруппаФормы - -// выхТекущаяКолонка - КолонкаТабличногоПоля, ПолеФормы - -// выхМассивКолонок - Массив - все колоноки табличного поля -// -// Возвращаемое значение: -// Массив - все колоноки табличного поля -// -Функция КолонкиТаблицыФормыИлиТабличногоПоляЛкс(Знач ТабличноеПолеИлиТаблицаФормы, выхТекущаяКолонка = Неопределено, выхМассивКолонок = Неопределено) Экспорт - - Если выхМассивКолонок = Неопределено Тогда - выхМассивКолонок = Новый Массив; - КонецЕсли; - Если ТипЗнч(ТабличноеПолеИлиТаблицаФормы) = Тип("ТабличноеПоле") Тогда - Колонки = ТабличноеПолеИлиТаблицаФормы.Колонки; - выхТекущаяКолонка = ТабличноеПолеИлиТаблицаФормы.ТекущаяКолонка; - ИначеЕсли Ложь - Или ТипЗнч(ТабличноеПолеИлиТаблицаФормы) = Тип("ТаблицаФормы") - Или ТипЗнч(ТабличноеПолеИлиТаблицаФормы) = Тип("ГруппаФормы") - Тогда - Колонки = ТабличноеПолеИлиТаблицаФормы.ПодчиненныеЭлементы; - КонецЕсли; - Для Каждого Элемент Из Колонки Цикл - Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда - КолонкиТаблицыФормыИлиТабличногоПоляЛкс(Элемент,, выхМассивКолонок); - Иначе - выхМассивКолонок.Добавить(Элемент); - КонецЕсли; - КонецЦикла; - Если ТипЗнч(ТабличноеПолеИлиТаблицаФормы) = Тип("ТаблицаФормы") Тогда - выхТекущаяКолонка = ТабличноеПолеИлиТаблицаФормы.ТекущийЭлемент; - Если выхТекущаяКолонка <> Неопределено И выхМассивКолонок.Найти(выхТекущаяКолонка) = Неопределено Тогда - // Пользовательская колонка - выхМассивКолонок.Добавить(выхТекущаяКолонка); - КонецЕсли; - КонецЕсли; - Возврат выхМассивКолонок; - -КонецФункции - -// В обычной форме "Динамический список ИР" для перечислений сделан статический список через таблицу значений -Функция КлючиВыделенныхСтрокИмитатораДинамическогоСпискаЛкс(Знач ТабличноеПоле, ВыделенныеСтроки = Неопределено) - - Если ВыделенныеСтроки = Неопределено Тогда - ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; - КонецЕсли; - ПараметрКоманды = Новый Массив(); - Для Каждого Строка Из ВыделенныеСтроки Цикл - Если ТипЗнч(Строка) = Тип("СтрокаТаблицыЗначений") Тогда - КлючСтроки = Строка.Ссылка; - Иначе - КлючСтроки = Строка; - КонецЕсли; - ПараметрКоманды.Добавить(КлючСтроки); - КонецЦикла; - Возврат ПараметрКоманды; - -КонецФункции - -// Параметры: -// ВыбранныеПоля - Массив, *Неопределено -Функция ОткрытьМассивОбъектовВПодбореИОбработкеОбъектовЛкс(МассивСсылок, ВыбранныеПоля = Неопределено, ЭтаФорма = Неопределено, ТекущееПолеТаблицы = Неопределено, - КлючТекущейСтроки = Неопределено) Экспорт - - Если МассивСсылок.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - Если ЭтаФорма <> Неопределено Тогда - ирОбщий.ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); - КонецЕсли; - Форма = ПолучитьФормуЛкс("Обработка.ирПодборИОбработкаОбъектов.Форма",,, Новый УникальныйИдентификатор); - Форма.ПараметрМассивСсылок = МассивСсылок; - Форма.ПараметрВыбранныеПоля = ВыбранныеПоля; - Форма.ПараметрТекущееПоле = ТекущееПолеТаблицы; - Форма.ПараметрКлючТекущейСтроки = КлючТекущейСтроки; - Форма.Открыть(); - //Форма.ЗагрузитьОбъектыДляОбработки(РазличныеЗначенияМассиваЛкс(МассивСсылок),, ВыбранныеПоля); - Возврат Форма; - -КонецФункции - -Функция ПолучитьСтруктуруВосстановленияКонсолиЛкс(ИмяИлиОбъектКонсоли) Экспорт - - Если ТипЗнч(ИмяИлиОбъектКонсоли) = Тип("Строка") Тогда - ИмяКонсоли = ИмяИлиОбъектКонсоли; - Иначе - ИмяКонсоли = ИмяИлиОбъектКонсоли.Метаданные().Имя; - КонецЕсли; - Структура = Новый Структура(); - Структура.Вставить("БлокировкаВосстановления", Неопределено); - ПрефиксИмениФайлаВосстановления = ИмяКонсоли + "_" + ИмяПользователя() + "_"; - Структура.Вставить("ПрефиксИмениФайлаВосстановления", ПрефиксИмениФайлаВосстановления); - ИмяФайлаВосстановления = ИмяФайлаВосстановленияКонсолиЛкс(Структура.ПрефиксИмениФайлаВосстановления); - Структура.Вставить("ФайлВосстановления", Новый Файл(ИмяФайлаВосстановления)); - Возврат Структура; - -КонецФункции - -Функция ИмяФайлаВосстановленияКонсолиЛкс(Знач ПрефиксИмениФайлаВосстановления, Знач ИмяОткрытогоФайла = "") - - Если ЗначениеЗаполнено(ИмяОткрытогоФайла) Тогда - лФайл = Новый Файл(ИмяОткрытогоФайла); - ИмяОткрытогоФайла = лФайл.ИмяБезРасширения; - КонецЕсли; - ИмяФайлаВосстановления = ирКэш.Получить().КаталогФайловогоКэша + РазделительПутиКФайлуЛкс() + ПрефиксИмениФайлаВосстановления + Лев(ИмяОткрытогоФайла, 40) + "_" + Новый УникальныйИдентификатор + ".tmp"; - Возврат ИмяФайлаВосстановления; - -КонецФункции - -Функция СохранитьФайлВКонсолиСВосстановлениемЛкс(ДиалогВыбораФайла, Знач ИмяСохраняемогоФайла, ИмяОткрытогоФайла = "", ДанныеДляФайла, СтруктураВосстановления, ЗапрашиватьИмяФайла = Ложь, - ФайлВосстановленияОбрезан = Ложь) Экспорт - - #Если Сервер И Не Сервер Тогда - ДиалогВыбораФайла = Новый ДиалогВыбораФайла(); - #КонецЕсли - ФайлВосстановления = СтруктураВосстановления.ФайлВосстановления; - #Если Сервер И Не Сервер Тогда - ФайлВосстановления = Новый Файл; - #КонецЕсли - ПрефиксИмениФайлаВосстановления = СтруктураВосстановления.ПрефиксИмениФайлаВосстановления; - СохранитьФайл = Истина; - Если Не СтрокиРавныЛкс(ИмяСохраняемогоФайла, ФайлВосстановления.ПолноеИмя) Тогда - // Здесь можно вставить проверочную сериализацию+десериализацию - ФайлВыбран = Истина; - лФайл = Новый Файл(ИмяОткрытогоФайла); - ДиалогВыбораФайла.ПолноеИмяФайла = ИмяСохраняемогоФайла; - Если Ложь - Или ПустаяСтрока(ИмяСохраняемогоФайла) - Или ЗапрашиватьИмяФайла - Или Найти(Нрег(лФайл.Имя), НРег(ПрефиксИмениФайлаВосстановления)) = 1 - Тогда - Пока Истина Цикл - Если ДиалогВыбораФайла.Выбрать() Тогда - лФайл = Новый Файл(ДиалогВыбораФайла.ПолноеИмяФайла); - Если Найти(Нрег(лФайл.Имя), НРег(ПрефиксИмениФайлаВосстановления)) = 1 Тогда - КодОтвета = Вопрос("Это имя файла зарезервировано. Хотите выбрать другое?", РежимДиалогаВопрос.ОКОтмена); - Если КодОтвета = КодВозвратаДиалога.ОК Тогда - Продолжить; - Иначе - ФайлВыбран = Ложь; - Прервать; - КонецЕсли; - КонецЕсли; - ИмяСохраняемогоФайла = ДиалогВыбораФайла.ПолноеИмяФайла; - ФайлВыбран = Истина; - Прервать; - Иначе - ФайлВыбран = Ложь; - СохранитьФайл = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Иначе - ФайлВыбран = Ложь; - КонецЕсли; - Если СохранитьФайл Тогда - МоментНачала = ТекущаяДата(); - Если НРег(ИмяСохраняемогоФайла) = НРег(ФайлВосстановления.ПолноеИмя) Тогда - СтруктураВосстановления.БлокировкаВосстановления = Неопределено; - УдалитьФайлы(ФайлВосстановления.Путь, ФайлВосстановления.ИмяБезРасширения + ".*"); - ФайлВосстановления = Новый Файл(ИмяФайлаВосстановленияКонсолиЛкс(ПрефиксИмениФайлаВосстановления, ИмяОткрытогоФайла)); - ИмяСохраняемогоФайла = ФайлВосстановления.ПолноеИмя; - ЗначениеВФайл(ФайлВосстановления.Путь + ФайлВосстановления.ИмяБезРасширения + ".inf", Новый Структура("ИмяОткрытогоФайла, Обрезан", ИмяОткрытогоФайла, ФайлВосстановленияОбрезан)); - СтруктураВосстановления.ФайлВосстановления = ФайлВосстановления; - КонецЕсли; - ПроверитьСериализациюXMLПередВызовомЗначениеВФайлЛкс(ДанныеДляФайла); - Если Не ЗначениеВФайл(ИмяСохраняемогоФайла, ДанныеДляФайла) Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Ошибка записи файла %1",, ИмяСохраняемогоФайла), СтатусСообщения.Внимание); - ФайлВыбран = Ложь; - КонецЕсли; - Если НРег(ИмяСохраняемогоФайла) = НРег(ФайлВосстановления.ПолноеИмя) Тогда - выхДлительность = ТекущаяДата() - МоментНачала; - Если выхДлительность > 1 Тогда - СообщитьЛкс("Автосохранение файла восстановления выполнено за " + выхДлительность + " секунд"); - КонецЕсли; - СтруктураВосстановления.БлокировкаВосстановления = Новый ЗаписьТекста(ИмяСохраняемогоФайла,,, Истина); - КонецЕсли; - КонецЕсли; - Возврат ФайлВыбран; - -КонецФункции - -Функция ПроверитьВыбратьФайлВосстановленияКонсолиЛкс(СтруктураВосстановления, выхОписаниеФайла = Ложь) Экспорт - - ПрефиксИмениФайлаВосстановления = СтруктураВосстановления.ПрефиксИмениФайлаВосстановления; - СписокВосстановления = Новый СписокЗначений; - КаталогФайлов = ирКэш.Получить().КаталогФайловогоКэша; - ФайлыВосстановления = НайтиФайлы(КаталогФайлов, ПрефиксИмениФайлаВосстановления + "*.tmp"); - Для Каждого Файл Из ФайлыВосстановления Цикл - #Если Сервер И Не Сервер Тогда - Файл = Новый Файл; - #КонецЕсли - СписокВосстановления.Добавить(Файл.ПолучитьВремяИзменения() + ирКэш.ПолучитьСмещениеВремениЛкс(), Файл.Имя); - КонецЦикла; - СписокВосстановления.СортироватьПоЗначению(НаправлениеСортировки.Убыв); - СписокВыбора = Новый СписокЗначений; - Разделитель = РазделительПутиКФайлуЛкс(); - Для Каждого ЭлементСписка Из СписокВосстановления Цикл - ДатаИзменения = ЭлементСписка.Значение; - Файл = Новый Файл(КаталогФайлов + Разделитель + ЭлементСписка.Представление); - Попытка - //Файл.УстановитьВремяИзменения(ДатаИзменения); // Так не срабатывает блокировка - Пустышка = Новый ЗаписьТекста(Файл.ПолноеИмя, , , Истина); - Пустышка = Неопределено; - Исключение - // Файла заблокирован и значит сессия продолжается. - Продолжить; - КонецПопытки; - ИмяФайлаИнформации = Файл.Путь + Файл.ИмяБезРасширения + ".inf"; - Попытка - ОписаниеФайла = ЗначениеИзФайла(ИмяФайлаИнформации); - Исключение - // Файл восстановления старого формата (без файла информации) - Продолжить; - КонецПопытки; - ОписаниеФайла.Вставить("ИмяФайлаИнформации", ИмяФайлаИнформации); - ОписаниеФайла.Вставить("ФайлВосстановления", Файл); - ОписаниеФайла.Вставить("Устарел", Ложь); - ОригнальныйФайл = Новый Файл(ОписаниеФайла.ИмяОткрытогоФайла); - Если ОригнальныйФайл.Существует() Тогда - ОписаниеФайла.Устарел = ОригнальныйФайл.ПолучитьВремяИзменения() > Файл.ПолучитьВремяИзменения(); - КонецЕсли; - Если ОписаниеФайла.Устарел Тогда - ТекстАктуальности = "Старее"; - Иначе - ТекстАктуальности = "Новее"; - КонецЕсли; - Если ОписаниеФайла.Обрезан Тогда - ТекстПолноты = "Обрезан"; - Иначе - ТекстПолноты = "Полный"; - КонецЕсли; - СписокВыбора.Добавить(ОписаниеФайла, "" + ДатаИзменения + " - [" + ТекстАктуальности + ", " + ТекстПолноты + "] - " + ОписаниеФайла.ИмяОткрытогоФайла); - КонецЦикла; - ИмяФайлаВосстановления = ""; - Если СписокВыбора.Количество() > 0 Тогда - СписокВыбора.Добавить("<Удалить все файлы восстановления>"); - ФормаЗащиты = Неопределено; - #Если ТолстыйКлиентУправляемоеПриложение Тогда - Если ирКэш.НомерИзданияПлатформыЛкс() > "82" Тогда - // Антибаг платформы https://www.hostedredmine.com/issues/901181 - ФормаЗащиты = ОткрытьФорму("Обработка.ирПлатформа.Форма.Пустышка"); - КонецЕсли; - #КонецЕсли - ВыбранныйЭлемент = СписокВыбора.ВыбратьЭлемент("Открыть файл восстановления прерванной сессии"); - Если ФормаЗащиты <> Неопределено Тогда - ФормаЗащиты.Закрыть(); - КонецЕсли; - Если ВыбранныйЭлемент <> Неопределено Тогда - Если ВыбранныйЭлемент.Значение = "<Удалить все файлы восстановления>" Тогда - Для Каждого ЭлементСписка Из СписокВыбора Цикл - Если ВыбранныйЭлемент = ЭлементСписка Тогда - Продолжить; - КонецЕсли; - ФайлВосстановления = ЭлементСписка.Значение.ФайлВосстановления; - УдалитьФайлы(ФайлВосстановления.Путь, ФайлВосстановления.ИмяБезРасширения + ".*"); - КонецЦикла; - Иначе - ОписаниеФайла = ВыбранныйЭлемент.Значение; - выхОписаниеФайла = ОписаниеФайла; - ИмяФайлаВосстановления = ОписаниеФайла.ФайлВосстановления.ПолноеИмя; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат ИмяФайлаВосстановления; - -КонецФункции - -Функция ПослеВосстановленияФайлаКонсолиЛкс(Знач ОписаниеФайла) Экспорт - - ФайлВосстановления = ОписаниеФайла.ФайлВосстановления; - #Если Сервер И Не Сервер Тогда - ФайлВосстановления = Новый Файл; - #КонецЕсли - Результат = ФайлВосстановления.ПолноеИмя; - Если Не ОписаниеФайла.Обрезан И Не ОписаниеФайла.Устарел Тогда - Результат = ОписаниеФайла.ИмяОткрытогоФайла; - ИначеЕсли ОписаниеФайла.Обрезан Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Загружена обрезанная версия файла %1",, ОписаниеФайла.ИмяОткрытогоФайла)); - Иначе - СообщитьЛкс(СтрШаблонИменЛкс("Загружена старая версия файла %1",, ОписаниеФайла.ИмяОткрытогоФайла)); - КонецЕсли; - УдалитьФайлы(ФайлВосстановления.Путь, ФайлВосстановления.ИмяБезРасширения + ".*"); - Возврат Результат; - -КонецФункции - -Процедура УдалитьФайлВосстановленияКонсолиСБлокировкойЛкс(СтруктураВосстановления) Экспорт - - СтруктураВосстановления.БлокировкаВосстановления = Неопределено; - ФайлВосстановления = СтруктураВосстановления.ФайлВосстановления; - Попытка - УдалитьФайлы(ФайлВосстановления.Путь, ФайлВосстановления.ИмяБезРасширения + ".*"); - Исключение - КонецПопытки; - -КонецПроцедуры - -Процедура СчитатьПорциюВыборкиВТаблицуЛкс(Выборка, ТаблицаПриемник, Знач РазмерПорции = 9999, СчитыватьЧерезКопиюТаблицы = Истина, СсылкаНаБуфернуюТаблицу = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - Пустышка = Новый Запрос; - Выборка = Пустышка.Выполнить(); - #КонецЕсли - Если СчитыватьЧерезКопиюТаблицы Тогда - // Иначе добавление и заполнение строк при связи с табличным полем будет дольше выполняться - КопияТаблицыПриемника = ТаблицаПриемник.Скопировать(); - Если СсылкаНаБуфернуюТаблицу <> Неопределено Тогда - СсылкаНаБуфернуюТаблицу.Вставить("Таблица", КопияТаблицыПриемника); - КонецЕсли; - Иначе - КопияТаблицыПриемника = ТаблицаПриемник; - КонецЕсли; - КоличествоРезультата = Выборка.Количество(); - Несчитано = КоличествоРезультата - КопияТаблицыПриемника.Количество(); - Если Ложь - Или РазмерПорции > Несчитано - Или РазмерПорции = 0 - Тогда - РазмерПорции = Несчитано; - КонецЕсли; - Если Несчитано = РазмерПорции Тогда - ПредставлениеПроцесса = "Загрузка выборки"; - Иначе - ПредставлениеПроцесса = "Загрузка порции выборки"; - КонецЕсли; - Индикатор = ПолучитьИндикаторПроцессаЛкс(РазмерПорции, ПредставлениеПроцесса); - КолонкиВложенныхТаблиц = Новый Массив(); - Для Каждого Колонка Из Выборка.Владелец().Колонки Цикл - Если Колонка.ТипЗначения.СодержитТип(Тип("РезультатЗапроса")) Тогда - КолонкиВложенныхТаблиц.Добавить(Колонка.Имя); - КонецЕсли; - КонецЦикла; - ЕстьКолонкиВложенныхТаблиц = КолонкиВложенныхТаблиц.Количество() > 0; - РазмерПорцииОсталось = РазмерПорции; - _РежимОтладки = Ложь; - Если _РежимОтладки Тогда // Можно менять на Истина в точке останова - // Пассивный оригинал расположенного ниже однострочного кода. Выполняйте изменения синхронно в обоих вариантах. - Пока Выборка.Следующий() Цикл - НоваяСтрока = КопияТаблицыПриемника.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка); - Если ЕстьКолонкиВложенныхТаблиц Тогда - Для Каждого КолонкаВложеннойТаблицы Из КолонкиВложенныхТаблиц Цикл - НоваяСтрока[КолонкаВложеннойТаблицы] = Выборка[КолонкаВложеннойТаблицы].Выгрузить(); - КонецЦикла; - КонецЕсли; - Если РазмерПорцииОсталось > 0 Тогда - РазмерПорцииОсталось = РазмерПорцииОсталось - 1; - Если РазмерПорцииОсталось = 0 Тогда - Прервать; - КонецЕсли; - КонецЕсли; - ОбработатьИндикаторЛкс(Индикатор); - КонецЦикла; - Иначе - // Однострочный код использован для ускорения. Выше расположен оригинал. Выполняйте изменения синхронно в обоих вариантах. Преобразовано консолью кода из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru) - Пока Выборка.Следующий() Цикл   НоваяСтрока = КопияТаблицыПриемника.Добавить();   ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);   Если ЕстьКолонкиВложенныхТаблиц Тогда   Для Каждого КолонкаВложеннойТаблицы Из КолонкиВложенныхТаблиц Цикл   НоваяСтрока[КолонкаВложеннойТаблицы] = Выборка[КолонкаВложеннойТаблицы].Выгрузить();   КонецЦикла;   КонецЕсли;   Если РазмерПорцииОсталось > 0 Тогда   РазмерПорцииОсталось = РазмерПорцииОсталось - 1;   Если РазмерПорцииОсталось = 0 Тогда   Прервать;   КонецЕсли;   КонецЕсли;   ОбработатьИндикаторЛкс(Индикатор);   КонецЦикла;   - КонецЕсли; - Если РазмерПорции = Несчитано Тогда - Выборка = Неопределено; - КонецЕсли; - ОсвободитьИндикаторПроцессаЛкс(); - ТаблицаПриемник = КопияТаблицыПриемника; - -КонецПроцедуры - -// ТабличноеПоле определяется как источник действий командной панели. -// Параметру ВыборкаРезультата внутри присваивается значение! -Процедура ЗагрузитьВыборкуВТабличноеПолеПервуюПорциюЛкс(ЭтаФорма, РезультатЗапроса, ВыборкаРезультата, КоманднаяПанель, - ИмяОбработчикаОбновления = "ОбновитьРазмерДинамическойТаблицы", БезопасныйПорогКоличестваСтрок = 100000, СсылкаНаБуфернуюТаблицу = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - лЗапрос = Новый Запрос; - РезультатЗапроса = лЗапрос.Выполнить(); - #КонецЕсли - //БезопасныйПорогКоличестваСтрок = 1; // Для отладки - ВыборкаРезультата = РезультатЗапроса.Выбрать(); - ТабличноеПоле = КоманднаяПанель.ИсточникДействий; - НачалоЗагрузки = ТекущаяДата(); - Если Ложь - Или БезопасныйПорогКоличестваСтрок = 0 - Или ВыборкаРезультата.Количество() < БезопасныйПорогКоличестваСтрок - Тогда - ВыборкаРезультата = Неопределено; - КоманднаяПанель.Кнопки.ЗагрузитьПолностью.Доступность = Ложь; - ТабличноеПоле.Значение = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой); - Попытка - Выполнить("ЭтаФорма." + ИмяОбработчикаОбновления + "()"); - Исключение - ВызватьИсключение ОписаниеОшибки(); - КонецПопытки; - Иначе - ТабличноеПоле.Значение = Новый ТаблицаЗначений; - Для Каждого Колонка Из РезультатЗапроса.Колонки Цикл - ТипЗначения = Колонка.ТипЗначения; - Если ТипЗначения.СодержитТип(Тип("РезультатЗапроса")) Тогда - ТипЗначения = Новый ОписаниеТипов("ТаблицаЗначений"); - КонецЕсли; - ТабличноеПоле.Значение.Колонки.Добавить(Колонка.Имя, ТипЗначения, Колонка.Имя, Колонка.Ширина); - КонецЦикла; - ЭтаФорма.ПодключитьОбработчикОжидания(ИмяОбработчикаОбновления, 0.1, Истина); - СчитатьПорциюВыборкиВТаблицуЛкс(ВыборкаРезультата, ТабличноеПоле.Значение, БезопасныйПорогКоличестваСтрок, , СсылкаНаБуфернуюТаблицу); - КонецЕсли; - Длительность = ТекущаяДата() - НачалоЗагрузки; - Если Длительность > 30 Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Загрузка выборки выполнена за %1с",, Длительность)); - КонецЕсли; - -КонецПроцедуры - -// ТабличноеПоле определяется как источник действий командной панели. -Процедура ЗагрузитьВыборкуВТабличноеПолеПолностьюЛкс(ЭтаФорма, мВыборкаРезультата, КоманднаяПанель, - ИмяОбработчикаОбновления = "ОбновитьРазмерДинамическойТаблицы", СсылкаНаБуфернуюТаблицу = Неопределено) Экспорт - - ЭтаФорма.ПодключитьОбработчикОжидания(ИмяОбработчикаОбновления, 0.1, Истина); - ТабличноеПоле = КоманднаяПанель.ИсточникДействий; - СчитатьПорциюВыборкиВТаблицуЛкс(мВыборкаРезультата, ТабличноеПоле.Значение, 0, , СсылкаНаБуфернуюТаблицу); - -КонецПроцедуры - -// Параметру КоличествоРезультата внутри присваивается значение! -Процедура ПослеЗагрузкиВыборкиВТабличноеПолеЛкс(ЭтаФорма, мВыборкаРезультата, КоманднаяПанель, ПолеСтрокиКоличестваРезультата, СсылкаНаБуфернуюТаблицу = Неопределено) Экспорт - - ТабличноеПоле = КоманднаяПанель.ИсточникДействий; - Если ТипЗнч(ТабличноеПоле.Значение) = Тип("ДеревоЗначений") Тогда - КоличествоСтрокВТабличномПоле = ВсеСтрокиДереваЗначенийЛкс(ТабличноеПоле.Значение).Количество(); - Иначе - КоличествоСтрокВТабличномПоле = ТабличноеПоле.Значение.Количество(); - КонецЕсли; - Если ТипЗнч(мВыборкаРезультата) = Тип("COMОбъект") Тогда - КоличествоРезультата = 0; - Попытка - КоличествоРезультата = мВыборкаРезультата.Count; - Исключение - Если мВыборкаРезультата.State <> 0 Тогда - КоличествоРезультата = мВыборкаРезультата.RecordCount; - КонецЕсли; - КонецПопытки; - //ВсеСчитано = КоличествоРезультата = КоличествоСтрокВТабличномПоле; - ИначеЕсли ТипЗнч(мВыборкаРезультата) = Тип("ВыборкаИзРезультатаЗапроса") Тогда - КоличествоРезультата = мВыборкаРезультата.Количество(); - Если СсылкаНаБуфернуюТаблицу <> Неопределено И СсылкаНаБуфернуюТаблицу.Свойство("Таблица") Тогда - ТабличноеПоле.Значение = СсылкаНаБуфернуюТаблицу.Таблица; - КоличествоСтрокВТабличномПоле = ТабличноеПоле.Значение.Количество(); - КонецЕсли; - //ВсеСчитано = Ложь; - Иначе - КоличествоРезультата = КоличествоСтрокВТабличномПоле; - //ВсеСчитано = Истина; - КонецЕсли; - ВсеСчитано = КоличествоРезультата = КоличествоСтрокВТабличномПоле; - ОбновитьЧислоЗагруженныхЭлементовВыборкиЛкс(ТабличноеПоле, КоманднаяПанель, ПолеСтрокиКоличестваРезультата, КоличествоСтрокВТабличномПоле, - КоличествоРезультата, ВсеСчитано); - -КонецПроцедуры - -// Не поддерживает таблицы внешних источников данных. Надо переделать вызывы этой функции на ВычислитьКоличествоСтрокТаблицВДеревеМетаданныхЛкс -Функция ЗапросПодсчетаКоличестваСтрокСоЗначениемИзТаблицыКолонокБДЛкс(Знач СтрокиКолонокДляОбновления, Знач ЗначениеОтбора, Знач ВидСравненияНовый = Неопределено) Экспорт - - ТекстЗапроса = Новый ЗаписьXML; - ТекстЗапроса.УстановитьСтроку(); - ЛиТекстПустой = Истина; - Для Каждого СтрокаКолонкиБД Из СтрокиКолонокДляОбновления Цикл - Если СтрокаКолонкиБД.ТипТаблицы = "Внешняя" Тогда - Продолжить; - КонецЕсли; - // Антибаг 8.2.14 http://partners.v8.1c.ru/forum/thread.jsp?id=1017264#1017264 - Если Истина - И СтрокаКолонкиБД.ТипТаблицы = "Изменения" - И Найти(СтрокаКолонкиБД.ПолноеИмяТаблицы, "РегистрСведений.") = 1 - И ирКэш.ДоступныОбщиеРеквизитыЛкс() - Тогда - Если Метаданные.ОбщиеРеквизиты.Найти(СтрокаКолонкиБД.ИмяКолонки) <> Неопределено Тогда - Продолжить; - КонецЕсли; - КонецЕсли; - Если Не СтрокаКолонкиБД.ЕстьДоступ Тогда - Продолжить; - КонецЕсли; - Если Не ЛиТекстПустой Тогда - ТекстЗапроса.ЗаписатьБезОбработки(" - |ОБЪЕДИНИТЬ ВСЕ"); - Иначе - ЛиТекстПустой = Ложь; - КонецЕсли; - ТекстЗапроса.ЗаписатьБезОбработки(" - |ВЫБРАТЬ """ + СтрокаКолонкиБД.ПолноеИмяТаблицы + """ КАК ПолноеИмяТаблицы, """ + СтрокаКолонкиБД.ИмяКолонки + """ КАК ИмяКолонки, КОЛИЧЕСТВО(*) КАК Количество - |ИЗ " + СтрокаКолонкиБД.ПолноеИмяТаблицы + " КАК Т"); - - // Очень долгий способ - // ТекстЗапроса.ЗаписатьБезОбработки(" - // |{ГДЕ Т." + СтрокаКолонкиБД.ИмяКолонки + " КАК ПолеОтбора}"); - //КонецЦикла; - //Схема = СоздатьСхемуКомпоновкиПоЗапросу(ТекстЗапроса,,, Истина); - //НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; - //НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки, "ПолеОтбора", ЗначениеОтбора, ВидСравненияНовый); - //Запрос = ЗапросИзКомпоновкиЛкс(Схема, НастройкаКомпоновки); - // - ОписаниеПоля = ОписаниеПоляТаблицыБДЛкс(СтрокаКолонкиБД.ПолноеИмяТаблицы, СтрокаКолонкиБД.ИмяКолонки); - ВыражениеСравнения = ВыражениеСравненияСПараметромВЗапросеЛкс(ОписаниеПоля, ВидСравненияНовый, "ЗначениеОтбора"); - ТекстЗапроса.ЗаписатьБезОбработки(" - |ГДЕ Т." + СтрокаКолонкиБД.ИмяКолонки + " " + ВыражениеСравнения); - КонецЦикла; - Запрос = Новый Запрос(ТекстЗапроса.Закрыть()); - Запрос.Параметры.Вставить("ЗначениеОтбора", ЗначениеОтбора); - Возврат Запрос; - -КонецФункции - -Функция ЗагрузитьСвязанныеСтрокиТаблицыБДЛкс(ЭтаФорма, ТабличноеПолеСвязанныхКолонок, ТабличноеПолеСвязанныхСтрок, КоманднаяПанельСвязанныхСтрок, мВыборкаРезультатаСтрокиТаблицы, - ЗначениеОтбора, Знач ВидСравненияНовый = Неопределено, МаксимальнаяПорция = 500000) Экспорт - - СтрокаСвязаннойКолонки = ТабличноеПолеСвязанныхКолонок.ТекущаяСтрока; - ЭтаФорма.СтрокиТаблицыБД = Новый ТаблицаЗначений; - ТабличноеПолеСвязанныхСтрок.СоздатьКолонки(); - Если СтрокаСвязаннойКолонки = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Запрос = ЗапросСтрокСоЗначениемВКолонкеБДЛкс(СтрокаСвязаннойКолонки, ЗначениеОтбора, ВидСравненияНовый, МаксимальнаяПорция); - #Если Сервер И Не Сервер Тогда - Запрос = Новый Запрос; - #КонецЕсли - Попытка - РезультатСтрокиТаблицы = Запрос.Выполнить(); - Исключение - // Антибаг платформы 8.2.14 http://partners.v8.1c.ru/forum/thread.jsp?id=1031481#1031481 - СообщитьЛкс(ОписаниеОшибки()); - Возврат Неопределено; - КонецПопытки; - ирОбщий.ЗагрузитьВыборкуВТабличноеПолеПервуюПорциюЛкс(ЭтаФорма, РезультатСтрокиТаблицы, мВыборкаРезультатаСтрокиТаблицы, КоманднаяПанельСвязанныхСтрок); - - //Если СтрокиТаблицыБД.Количество() = МаксимальныйРазмер Тогда - // СообщитьЛкс("Были выбраны первые " + МаксимальныйРазмер + " строк таблицы"); - //КонецЕсли; - СтруктураОтбора = Новый Структура("ПолноеИмяТаблицы, ИмяКолонки", СтрокаСвязаннойКолонки.ПолноеИмяТаблицы, СтрокаСвязаннойКолонки.ИмяКолонки); - ЗаполнитьЗначенияСвойств(СтруктураОтбора, СтрокаСвязаннойКолонки); - ТабличноеПолеСвязанныхСтрок.СоздатьКолонки(); - Для Каждого КолонкаТП Из ТабличноеПолеСвязанныхСтрок.Колонки Цикл - КолонкаТП.ТолькоПросмотр = Истина; - КонецЦикла; - Попытка - ИскомаяСсылка = СтрокаСвязаннойКолонки.Ссылка - Исключение - ИскомаяСсылка = Неопределено; - КонецПопытки; - Если ИскомаяСсылка <> Неопределено Тогда - ТекущаяСтрока = ТабличноеПолеСвязанныхСтрок.Значение.Найти(ИскомаяСсылка, СтрокаСвязаннойКолонки.ИмяКолонки); - Если ТекущаяСтрока <> Неопределено Тогда - ТабличноеПолеСвязанныхСтрок.ТекущаяСтрока = ТекущаяСтрока; - КонецЕсли; - КонецЕсли; - НастроитьДобавленныеКолонкиТабличногоПоляЛкс(ТабличноеПолеСвязанныхСтрок,,,, Истина); - ТабличноеПолеСвязанныхСтрок.ТекущаяКолонка = ТабличноеПолеСвязанныхСтрок.Колонки[СтрокаСвязаннойКолонки.ИмяКолонки]; - Возврат СтрокаСвязаннойКолонки.ПолноеИмяТаблицы; - -КонецФункции - -Функция ЗапросСтрокСоЗначениемВКолонкеБДЛкс(Знач СтрокаСвязаннойКолонки, Знач ЗначениеОтбора, Знач ВидСравненияНовый = Неопределено, Знач МаксимальнаяПорция = 0) Экспорт - - // Антибаг 8.2.14 http://partners.v8.1c.ru/forum/thread.jsp?id=1017264#1017264 - Если Истина - И СтрокаСвязаннойКолонки.ТипТаблицы = "Изменения" - И Найти(СтрокаСвязаннойКолонки.ПолноеИмяТаблицы, "РегистрСведений.") = 1 - И ирКэш.ДоступныОбщиеРеквизитыЛкс() - Тогда - Если Метаданные.ОбщиеРеквизиты.Количество() > 0 Тогда - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - //Если ЗначениеОтбора = Неопределено Тогда - // ЗначениеОтбора = СтрокаСвязаннойКолонки.Ссылка; - //КонецЕсли; - ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(СтрокаСвязаннойКолонки.ПолноеИмяТаблицы); - #Если Сервер И Не Сервер Тогда - ПоляТаблицыБД = НайтиПоСсылкам().Колонки; - #КонецЕсли - ТекстПоля = ""; - Для Каждого ПолеТаблицыБД Из ПоляТаблицыБД Цикл - Если Ложь - Или ПолеТаблицыБД.ТипЗначения.СодержитТип(Тип("ХранилищеЗначения")) - Или ПолеТаблицыБД.ТипЗначения.СодержитТип(Тип("ТаблицаЗначений")) - Тогда - Продолжить; - КонецЕсли; - Если ЗначениеЗаполнено(ТекстПоля) Тогда - ТекстПоля = ТекстПоля + ", "; - КонецЕсли; - ТекстПоля = ТекстПоля + "Т." + ПолеТаблицыБД.Имя; - КонецЦикла; - ТекстПервые = ""; - Если МаксимальнаяПорция > 0 Тогда - ТекстПервые = " ПЕРВЫЕ " + Формат(МаксимальнаяПорция, "ЧГ=") + " "; - КонецЕсли; - ТекстЗапроса = " - |ВЫБРАТЬ " + ТекстПервые + " " + ТекстПоля + " - |ИЗ " + ирКэш.ИмяТаблицыИзМетаданныхЛкс(СтрокаСвязаннойКолонки.ПолноеИмяТаблицы) + " КАК Т"; - - // Очень долгий способ - //ТекстЗапроса = ТекстЗапроса + " - //|{ГДЕ " + ПсевдонимТаблицы + "." + СтрокаСвязаннойКолонки.ИмяКолонки + "}"; - //Схема = СоздатьСхемуКомпоновкиПоЗапросу(ТекстЗапроса); - //НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; - //НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки, СтрокаСвязаннойКолонки.ИмяКолонки, ЗначениеОтбора, ВидСравненияНовый); - //Запрос = ЗапросИзКомпоновкиЛкс(Схема, НастройкаКомпоновки); - // - ВыражениеСравнения = ВыражениеСравненияСПараметромВЗапросеЛкс(ПоляТаблицыБД.Найти(СтрокаСвязаннойКолонки.ИмяКолонки, "Имя"), ВидСравненияНовый, "ЗначениеОтбора"); - ТекстЗапроса = ТекстЗапроса + " - |ГДЕ Т." + СтрокаСвязаннойКолонки.ИмяКолонки + " " + ВыражениеСравнения; - ПостроительПорядка = ОсновнойПорядокТаблицыБДЛкс(СтрокаСвязаннойКолонки.ПолноеИмяТаблицы,,,, Истина); - Если ЗначениеЗаполнено(ПостроительПорядка.Порядок) Тогда - ТекстЗапроса = ТекстЗапроса + " - |УПОРЯДОЧИТЬ ПО " + ПорядокВСтрокуЛкс(ПостроительПорядка.Порядок); - КонецЕсли; - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.Параметры.Вставить("ЗначениеОтбора", ЗначениеОтбора); - Возврат Запрос; - -КонецФункции - -Процедура ОбновитьЧислоЗагруженныхЭлементовВыборкиЛкс(ТабличноеПоле, КоманднаяПанель, ПолеСтрокиКоличестваРезультата, КоличествоЗагружено, КоличествоРезультата, ВсеСчитано) Экспорт - - Если ВсеСчитано Тогда - СтрокаКоличествоРезультата = "" + КоличествоЗагружено; - ПолеСтрокиКоличестваРезультата.ЦветФона = Новый Цвет(); - Иначе - СтрокаКоличествоРезультата = "" + КоличествоЗагружено + "/" + КоличествоРезультата; - ПолеСтрокиКоличестваРезультата.ЦветФона = ПолучитьЦветСтиляЛкс("ирЦветФонаВычисляемогоЗначения"); - КонецЕсли; - ПолеСтрокиКоличестваРезультата.Значение = СтрокаКоличествоРезультата; - КоманднаяПанель.Кнопки.ЗагрузитьПолностью.Доступность = Не ВсеСчитано; - -КонецПроцедуры - -Функция ТекстОтбораЗапросаКомпоновкиЛкс(ТекстЗапросаСОтбором, ПсевдонимТаблицыПередГДЕ = "Т") Экспорт - - ВычислительРегВыражений = ирКэш.ВычислительРегВыраженийЛкс(); - ВычислительРегВыражений.Multiline = Ложь; - ВычислительРегВыражений.Pattern = "(?:AS|КАК)\s+" + ПсевдонимТаблицыПередГДЕ + "\s+(?:ГДЕ|WHERE)((?:.|\n|\r)+)"; - Найденные = ВычислительРегВыражений.НайтиВхождения(ТекстЗапросаСОтбором); - Если Найденные.Количество() > 0 Тогда - ТекстОтбора = Найденные[0].Submatches(0); - Иначе - ТекстОтбора = " ИСТИНА "; - КонецЕсли; - Возврат ТекстОтбора; - -КонецФункции - -// Заменяет текущее выделение в поле текстового документа новым текстом. -// После этого устанавливает выделение на вставленный фрагмент. -// -// Параметры: -// ПолеТекста - ПолеТекста; -// НовыйТекст - Строка. -// -Процедура ЗаменитьВыделенныйТекстСохраняяГраницыВыделенияЛкс(Знач ПолеТекста, Знач НовыйТекст) Экспорт - - Перем НачальнаяСтрока; - Перем НачальнаяКолонка; - Перем КонечнаяСтрока; - Перем КонечнаяКолонка; - - ПолеТекста = ОболочкаПоляТекстаЛкс(ПолеТекста); - #Если Сервер И Не Сервер Тогда - ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - ПолеТекста.ПолучитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка); - ПолеТекста.УстановитьГраницыВыделения(1, 1, НачальнаяСтрока, НачальнаяКолонка); - НачальнаяГраница = СтрДлина(ПолеТекста.ВыделенныйТекст()) + 1; - ПолеТекста.УстановитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка); - ПолеТекста.ВыделенныйТекст(НовыйТекст); - КонечнаяГраница = НачальнаяГраница + СтрДлина(НовыйТекст); - Если КонечнаяГраница > СтрДлина(ПолеТекста.ПолучитьТекст()) Тогда - КонечнаяГраница = КонечнаяГраница - 1; - КонецЕсли; - ПолеТекста.УстановитьГраницыВыделения(НачальнаяГраница, КонечнаяГраница); - -КонецПроцедуры - -Процедура УстановитьТекстСОткатомЛкс(Знач ПолеТекста, Знач Текст) Экспорт - - ПолеТекста = ОболочкаПоляТекстаЛкс(ПолеТекста); - #Если Сервер И Не Сервер Тогда - ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - СтарыйТекст = ПолеТекста.ПолучитьТекст(); - ПолеТекста.УстановитьГраницыВыделения(1, СтрДлина(СтарыйТекст) + 1); - ПолеТекста.ВыделенныйТекст(Текст); - -КонецПроцедуры - -Функция ОболочкаПоляТекстаЛкс(Знач ПолеТекста) Экспорт - ТипПоля = ТипЗнч(ПолеТекста); - Если Ложь - Или ТипПоля = Тип("ПолеВвода") - Или ТипПоля = Тип("ПолеТекстовогоДокумента") - Или ТипПоля = Тип("ПолеHTMLДокумента") - Или (Истина - И ТипПоля = Тип("ПолеФормы") - И (Ложь - Или ПолеТекста.Вид = ВидПоляФормы.ПолеВвода - Или ПолеТекста.Вид = ВидПоляФормы.ПолеТекстовогоДокумента - Или ПолеТекста.Вид = ВидПоляФормы.ПолеHTMLДокумента)) - Тогда - ОболочкаПолеТекста = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирОболочкаПолеТекста"); - #Если Сервер И Не Сервер Тогда - ОболочкаПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - ОболочкаПолеТекста.ЭлементФормы = ПолеТекста; - Иначе - ОболочкаПолеТекста = ПолеТекста; - КонецЕсли; - Возврат ОболочкаПолеТекста; -КонецФункции - -Функция ЛиОболочкаТекстаЛкс(Объект) Экспорт - - Результат = Ложь - Или (Истина - И ирКэш.ЛиПортативныйРежимЛкс() - И ЛиВнешняяОбработкаЛкс(Объект)) - Или (Истина - И Не ирКэш.ЛиПортативныйРежимЛкс() - И ТипЗнч(Объект) = Тип("ОбработкаОбъект.ирОболочкаПолеТекста")); - Возврат Результат; - -КонецФункции - -Процедура ЗаменитьИВыделитьВыделенныйТекстПоляЛкс(Знач ЭтаФорма, Знач ПолеТекстаВыражения, Знач НовыйВыделенныйТекст = "") Экспорт - - Перем Граница1, Граница2, Граница3, Граница4; - ПолеТекстаВыражения = ОболочкаПоляТекстаЛкс(ПолеТекстаВыражения); - #Если Сервер И Не Сервер Тогда - ПолеТекстаВыражения = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - Граница1 = 0; Граница2 = 0; Граница3 = 0; Граница4 = 0; - ПолеТекстаВыражения.ПолучитьГраницыВыделения(Граница1, Граница2, Граница3, Граница4); - Если Не ЗначениеЗаполнено(НовыйВыделенныйТекст) Тогда - Если ТипЗнч(ПолеТекстаВыражения) = Тип("ПолеВвода") Тогда - НовыйВыделенныйТекст = ПолеТекстаВыражения.Значение; - Иначе - НовыйВыделенныйТекст = ПолеТекстаВыражения.ПолучитьТекст(); - КонецЕсли; - Граница2 = 1; - Иначе - ПолеТекстаВыражения.ВыделенныйТекст(НовыйВыделенныйТекст); - КонецЕсли; - ПолеТекстаВыражения.УстановитьГраницыВыделения(Граница1, Граница2, Граница1, Граница2 + СтрДлина(НовыйВыделенныйТекст)); - ЭтаФорма.ТекущийЭлемент = ПолеТекстаВыражения.ЭлементФормы; - -КонецПроцедуры - -// Функция - Найти показать строку в поле текстового документа лкс -// -// Параметры: -// Форма - - -// ПолеТекста - ПолеТекста, ПолеВвода - -// СтрокаПоиска - - -// СловоЦеликом - - -// -// Возвращаемое значение: -// - Булево - была ли найдена и выделена строка -// -Функция НайтиПоказатьСтрокуВПолеТекстаЛкс(Форма = Неопределено, Знач ПолеТекста, СтрокаПоиска, СловоЦеликом = Ложь, ИскатьСНачала = Ложь) Экспорт - - ПолеТекста = ОболочкаПоляТекстаЛкс(ПолеТекста); - #Если Сервер И Не Сервер Тогда - ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - НачальнаяПозиция = 0; - КонечнаяПозиция = 0; - Если Не ИскатьСНачала Тогда - ПолеТекста.ВыделениеОдномерное(НачальнаяПозиция, КонечнаяПозиция); - КонецЕсли; - Позиция = СтрНайтиСловоЛкс(ПолеТекста.ПолучитьТекст(), СтрокаПоиска, КонечнаяПозиция, СловоЦеликом); - Если Позиция > 0 Тогда - Если Форма <> Неопределено Тогда - Форма.ТекущийЭлемент = ПолеТекста.ЭлементФормы; - КонецЕсли; - ПолеТекста.УстановитьГраницыВыделения(Позиция, Позиция + СтрДлина(СтрокаПоиска),,,, Форма); - Результат = Истина; - Иначе - Если СтрДлина(ПолеТекста.ВыделенныйТекст()) > 0 Тогда - ПолеТекста.УстановитьГраницыВыделения(1, 1); - КонецЕсли; - Результат = Ложь; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Функция - Стр найти слово -// -// Параметры: -// ГдеИскать - - -// ЧтоИскать - - -// НачальнаяПозиция - - -// СловоЦеликом - - -// -// Возвращаемое значение: -// Число - 0 если не нашли -// -Функция СтрНайтиСловоЛкс(Знач ГдеИскать, Знач ЧтоИскать, Знач НачальнаяПозиция = 0, Знач СловоЦеликом = Истина) Экспорт - - Позиция = 0; - Вхождения = НайтиРегулярноеВыражениеЛкс(ГдеИскать, ШаблонПоискаСловаЛкс(ЧтоИскать, СловоЦеликом)); - #Если Сервер И Не Сервер Тогда - Вхождения = Обработки.ирПлатформа.Создать().ВхожденияРегВыражения; - #КонецЕсли - Для каждого Вхождение Из Вхождения Цикл - Если Вхождение.ПозицияВхождения >= НачальнаяПозиция Тогда - Позиция = Вхождение.ПозицияВхождения + 1; - Если СловоЦеликом Тогда - Позиция = Позиция + СтрДлина(Вхождение.Подгруппы[0]); - КонецЕсли; - Прервать; - КонецЕсли; - КонецЦикла; - Если Вхождения.Количество() > 0 И Позиция = 0 Тогда - Позиция = Вхождения[0].ПозицияВхождения + 1; - Если СловоЦеликом Тогда - Позиция = Позиция + СтрДлина(Вхождения[0].Подгруппы[0]); - КонецЕсли; - КонецЕсли; - Возврат Позиция; - -КонецФункции - -// Функция - Открыть гиперссылку из поля HTMLЛкс -// -// Параметры: -// htmlElement - - -// МодификаторCTRL - - -// -// Возвращаемое значение: -// - Булево - гиперссылка открыта -// -Функция ОткрытьГиперссылкуИзПоляHTMLЛкс(Знач htmlElement, Знач МодификаторCTRL = Истина) Экспорт - - Пока htmlElement <> Неопределено И htmlElement <> Null И ВРег(htmlElement.tagName) <> "A" Цикл - htmlElement = htmlElement.parentElement; - КонецЦикла; - Если htmlElement = Неопределено Или htmlElement = Null Тогда - Возврат Ложь; - КонецЕсли; - Если htmlElement.hasAttribute("data-href") Тогда - Если Не МодификаторCTRL Тогда - Возврат Ложь; - КонецЕсли; - //НовыйАдрес = htmlElement.getAttribute("data-href"); - НовыйАдрес = htmlElement.textContent; - Иначе - НовыйАдрес = htmlElement.href; - КонецЕсли; - Если ЗначениеЗаполнено(НовыйАдрес) Тогда - //Если Ложь - // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "http://") - // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "https://") - // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "e1c://") - // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "ftp://") - // Или ирОбщий.СтрНачинаетсяСЛкс(НовыйАдрес, "file://") - //Тогда - ЗапуститьПриложение(НовыйАдрес); - Возврат Истина; - КонецЕсли; - Возврат Ложь; - -КонецФункции - -Функция ШаблонПоискаСловаЛкс(Знач СтрокаПоиска, СловоЦеликом = Истина) Экспорт - - Шаблон = ПреобразоватьТекстДляРегулярныхВыраженийЛкс(СтрокаПоиска); - Если СловоЦеликом Тогда - Шаблон = "(^|[^_a-zа-яё0-9])(" + Шаблон + ")($|[^_a-zа-яё0-9])"; - КонецЕсли; - Возврат Шаблон; - -КонецФункции - -Функция РегВыражениеСтрокиПоискаЛкс(Знач СтрокаИлиСловаПоиска, Знач ПодгруппыДляСлов = Истина) Экспорт - - Если ТипЗнч(СтрокаИлиСловаПоиска) = Тип("Строка") Тогда - СловаПоиска = РазделитьСтрокуПоискаНаСловаПоискаЛкс(СтрокаИлиСловаПоиска); - Иначе - СловаПоиска = СтрокаИлиСловаПоиска; - КонецЕсли; - ВыраженияПоиска = Новый Массив; - Если Не ПодгруппыДляСлов Тогда - НачалоПодгруппы = "?:"; - КонецЕсли; - Для Каждого СловоПоиска Из СловаПоиска Цикл - ВыраженияПоиска.Добавить("(" + НачалоПодгруппы + ПреобразоватьТекстДляРегулярныхВыраженийЛкс(СловоПоиска) + ")"); - КонецЦикла; - ФинальноеВыражение = СтрСоединитьЛкс(ВыраженияПоиска, "|"); - Если Не ПодгруппыДляСлов Тогда - ФинальноеВыражение = "(" + ФинальноеВыражение + ")"; - КонецЕсли; - Возврат ФинальноеВыражение; - -КонецФункции - -// . -// Параметры: -// Элемент - ПолеТабличногоДокумента -// -Функция ПолеТабличногоДокументаПолучитьПредставлениеСуммыВыделенныхЯчеекЛкс(Знач ПолеТД, Знач Принудительно = Ложь) Экспорт - - #Если Сервер И Не Сервер Тогда - ПолеТД = Новый ТабличныйДокумент; - #КонецЕсли - ВыделенныеОбласти = ПолеТД.ВыделенныеОбласти; - НачальноеКоличество = ВыделенныеОбласти.Количество(); - Если Истина - И Не Принудительно - И НачальноеКоличество = 1 - И ПолеТД.Область(ВыделенныеОбласти[0].Низ, ВыделенныеОбласти[0].Право).Имя = ВыделенныеОбласти[0].Имя - Тогда - Возврат ""; - КонецЕсли; - Сумма = 0; - СчетчикЯчеекСуммы = 0; - СчетчикЯчеекОбщий = 0; - ЕстьИгнорированныеОбласти = Ложь; - Для СчетчикВыделенныеОбласти = 1 По НачальноеКоличество Цикл - Область = ВыделенныеОбласти[НачальноеКоличество - СчетчикВыделенныеОбласти]; - Если ТипЗнч(Область) = Тип("РисунокТабличногоДокумента") Тогда - Продолжить; - КонецЕсли; - Право = Область.Право; - Если Право = 0 Тогда - Право = ПолеТД.ШиринаТаблицы; - КонецЕсли; - ПлощадьОбласти = (Право - Область.Лево + 1) * (Область.Низ - Область.Верх + 1); - СчетчикЯчеекОбщий = СчетчикЯчеекОбщий + ПлощадьОбласти; - Если Ложь - Или ПлощадьОбласти < 1000 - Или Принудительно И ПлощадьОбласти < 10000 - Тогда - Для НомерКолонки = Область.Лево по Право Цикл - Для НомерСтроки = Область.Верх по Область.Низ Цикл - ОбластьЯчейки = ПолеТД.Область(НомерСтроки, НомерКолонки); - Если ОбластьЯчейки.Лево <> НомерКолонки Или ОбластьЯчейки.Верх <> НомерСтроки Тогда - // Данная ячейка принадлежит объединенным ячейкам и не является начальной ячейкой - Продолжить; - КонецЕсли; - Попытка - Число = Число(ОбластьЯчейки.Текст); - Исключение - Продолжить; - КонецПопытки; - Сумма = Сумма + Число; - СчетчикЯчеекСуммы = СчетчикЯчеекСуммы + 1; - КонецЦикла; - КонецЦикла; - Иначе - ЕстьИгнорированныеОбласти = Истина; - КонецЕсли; - КонецЦикла; - СчетчикЯчеекСуммы = "" + СчетчикЯчеекСуммы; - Сумма = "" + Сумма; - Если ЕстьИгнорированныеОбласти Тогда - СчетчикЯчеекСуммы = СчетчикЯчеекСуммы + "+?"; - Сумма = Сумма + "+?"; - КонецЕсли; - Текст = "" + СчетчикЯчеекСуммы + " из " + СчетчикЯчеекОбщий + " яч. = " + Сумма + ""; - Возврат Текст; - -КонецФункции - -Процедура ПолеТабличногоДокументаПриАктивизацииОбластиЛкс(Знач ЭтаФорма, Знач ПолеТД) Экспорт - - #Если Сервер И Не Сервер Тогда - ПолеТД = Новый ТабличныйДокумент; - #КонецЕсли - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ПолеТД); - Если ДопСвойства.КнопкаОтображенияПодвала <> Неопределено Тогда - ДопСвойства.КнопкаОтображенияПодвала.Текст = ПолеТабличногоДокументаПолучитьПредставлениеСуммыВыделенныхЯчеекЛкс(ПолеТД, ДопСвойства.КнопкаОтображенияПодвала.Пометка); - КонецЕсли; - Если Ложь - Или ДопСвойства.КнопкаОформленияТекущихСтрок = Неопределено - Или ДопСвойства.КнопкаОформленияТекущихСтрок.Пометка - Тогда - ПараметрыОбработчика = Новый Структура; - ПараметрыОбработчика.Вставить("ЭтаФорма", ЭтаФорма); - ПараметрыОбработчика.Вставить("ПолеТабличногоДокумента", ПолеТД); - #Если Сервер И Не Сервер Тогда - ирОбщий.ПолеТабличногоДокументаОформитьТекущиеСтрокиОтложенноЛкс(); - #КонецЕсли - Если Не ПодключитьОбработчикОжиданияСПараметрамиЛкс("ирОбщий.ПолеТабличногоДокументаОформитьТекущиеСтрокиОтложенноЛкс", ПараметрыОбработчика,,, Ложь) Тогда - ирОбщий.ПолеТабличногоДокументаОформитьТекущиеСтрокиОтложенноЛкс(ПараметрыОбработчика); - КонецЕсли; - Иначе - ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(ЭтаФорма, ПолеТД); - КонецЕсли; - -КонецПроцедуры - -Процедура ПолеТабличногоДокументаОформитьТекущиеСтрокиОтложенноЛкс(Параметры) Экспорт - ирОбщий.ПолеТабличногоДокументаОформитьТекущиеСтрокиЛкс(Параметры.ЭтаФорма, Параметры.ПолеТабличногоДокумента); -КонецПроцедуры - - -// -// Параметры: -// Таблица - ТаблицаЗначений - может быть модифицирована здесь, поэтому нужно передавать копию, если нужна неизменность -Функция ВывестиТаблицуВТабличныйДокументИлиТаблицуЗначенийЛкс(ТаблицаЗначений, Знач Приемник = Неопределено, ДанныеРасшифровки = Неопределено, ИтогиЧисловыхКолонок = Истина, - АвтофиксацияШапки = Истина, ВстроитьЗначенияВРасшифровки = Истина, ОтображатьПустые = Ложь, ДобавлятьКолонкиИдентификаторов = Ложь, ДобавлятьКолонкиТипов = Ложь, - ДобавлятьКолонкиПредставлений = Истина, Знач ВыбранныеКолонки = Неопределено, ИмяТекущейКолонки = "", ВыводВТаблицуЗначений = Ложь, Отладка = Ложь, ДобавлятьКолонкиРазмеров = Ложь, - СузитьТипы = Ложь, Иерархия = Ложь) Экспорт - - ТребоватьТипЛкс(ТаблицаЗначений,, Тип("ТаблицаЗначений")); - ирПлатформа = ирКэш.Получить(); - Если ДобавлятьКолонкиТипов Или ДобавлятьКолонкиИдентификаторов Тогда - //ТаблицаЗначений = ТаблицаСКолонкамиБезТипаNullЛкс(ТаблицаЗначений); - ТаблицаЗначений = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначений); - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ирПлатформа = Обработки.ирПлатформа.Создать(); - ТаблицаЗначений = Новый ТаблицаЗначений; - #КонецЕсли - ВнешниеНаборыДанных = Новый Структура("Основной", ТаблицаЗначений); - НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; - КолонкиИдентификаторов = Новый Массив; - КолонкиТипов = Новый Массив; - КолонкиРазмеров = Новый Массив; - Если ВыбранныеКолонки = Неопределено Тогда - ВыбранныеКолонки = Новый Массив; - Для Каждого Колонка Из КолонкиИсточникаДанныхЛкс(ТаблицаЗначений) Цикл - ВыбранныеКолонки.Добавить(Колонка.Имя); - КонецЦикла; - КонецЕсли; - ИменаТипов = Новый Структура; - ПозицииКолонок = Новый Структура; - ИндексТекущейКолонки = 0; - ОформлениеКолонокИдентификаторов = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); - ОформлениеКолонокИдентификаторов.Оформление.УстановитьЗначениеПараметра("МаксимальнаяШирина", 2); - ОформлениеКолонокИдентификаторов.Оформление.УстановитьЗначениеПараметра("Размещение", ТипРазмещенияТекстаКомпоновкиДанных.Обрезать); - Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл - Если Не ЗначениеЗаполнено(ВыбраннаяКолонка) Тогда - Продолжить; - КонецЕсли; - ИмяКолонки = СтрЗаменить(ВыбраннаяКолонка, ".", "_"); - Колонка = ТаблицаЗначений.Колонки.Найти(ИмяКолонки); - Если Колонка = Неопределено Тогда - // Например "ИдентификаторСсылкиЛкс" в таблице формы - Продолжить; - КонецЕсли; - ТипЗначения = Колонка.ТипЗначения; - ТипыКолонки = ТипЗначения.Типы(); - ЛиТипПростойСтроковый = ЛиОписаниеТиповПростогоСтроковогоТипаЛкс(ТипЗначения); - ПозицииКолонок.Вставить(Колонка.Имя, НастройкаКомпоновки.Выбор.Элементы.Количество()); - Если ДобавлятьКолонкиПредставлений Или ЛиТипПростойСтроковый Тогда - НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ВыбраннаяКолонка); - КонецЕсли; - Если Ложь - Или ОтображатьПустые - Или (Истина - И ДобавлятьКолонкиТипов - И ТипыКолонки.Количество() > 1) - Тогда - КолонкиТипов.Добавить(Колонка.Имя); - ТаблицаЗначений.Колонки.Вставить(ТаблицаЗначений.Колонки.Индекс(Колонка) + 1, ИмяКолонки + "_ИмяТипаЗначения_", Новый ОписаниеТипов("Строка"), - Колонка.Заголовок + " (тип)"); - Если ДобавлятьКолонкиТипов Тогда - НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ИмяКолонки + "_ИмяТипаЗначения_"); - КонецЕсли; - ИменаТиповКолонки = Новый Соответствие; - Для Каждого Тип Из ТипыКолонки Цикл - ИменаТиповКолонки.Вставить(Тип, ПредставлениеТипаЛкс(Тип, ТипЗначения, Истина)); - КонецЦикла; - ИменаТипов.Вставить(Колонка.Имя, ИменаТиповКолонки); - КонецЕсли; - Если ДобавлятьКолонкиИдентификаторов Тогда - //ЕстьСсылочныйТип = ТипыКолонки.Количество() = 0; - //Если Не ЕстьСсылочныйТип Тогда - // Для Каждого Тип Из ТипыКолонки Цикл - // Если ЛиТипСсылкиБДЛкс(Тип, Ложь) Тогда - // ЕстьСсылочныйТип = Истина; - // Прервать; - // КонецЕсли; - // КонецЦикла; - //КонецЕсли; - Если Ложь - //Или ЕстьСсылочныйТип - Или Не (ЛиТипПростойСтроковый) - Тогда - Если ИндексТекущейКолонки = 0 И ЗначениеЗаполнено(ИмяТекущейКолонки) И СтрокиРавныЛкс(ВыбраннаяКолонка, ИмяТекущейКолонки) Тогда - ИндексТекущейКолонки = НастройкаКомпоновки.Выбор.Элементы.Количество(); - КонецЕсли; - КолонкиИдентификаторов.Добавить(Колонка.Имя); - ИмяКолонкиИдентификатора = ИмяКолонки + "_ИдентификаторЗначения_"; - ТаблицаЗначений.Колонки.Вставить(ТаблицаЗначений.Колонки.Индекс(Колонка) + 1, ИмяКолонкиИдентификатора, Новый ОписаниеТипов("Строка"), - Колонка.Заголовок + " (идентификатор)"); - НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ИмяКолонкиИдентификатора); - Если ДобавлятьКолонкиПредставлений Тогда - НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(ОформлениеКолонокИдентификаторов.Поля, ИмяКолонкиИдентификатора); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если ДобавлятьКолонкиРазмеров Тогда - Если Ложь - Или ТипЗначения.СодержитТип(Тип("ХранилищеЗначения")) - Или (Истина - И ТипЗначения.СодержитТип(Тип("Строка")) - И ТипЗначения.КвалификаторыСтроки.ДопустимаяДлина = 0) - Тогда - Если ИндексТекущейКолонки = 0 И ЗначениеЗаполнено(ИмяТекущейКолонки) И СтрокиРавныЛкс(ВыбраннаяКолонка, ИмяТекущейКолонки) Тогда - ИндексТекущейКолонки = НастройкаКомпоновки.Выбор.Элементы.Количество(); - КонецЕсли; - КолонкиРазмеров.Добавить(Колонка.Имя); - ТаблицаЗначений.Колонки.Вставить(ТаблицаЗначений.Колонки.Индекс(Колонка) + 1, ИмяКолонки + "_РазмерЗначения_", Новый ОписаниеТипов("Число"), - Колонка.Заголовок + " (размер)"); - НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ИмяКолонки + "_РазмерЗначения_"); - КонецЕсли; - КонецЕсли; - Если ОтображатьПустые Тогда - ПустыеЗначения = Новый Массив; - ПустыеЗначения.Добавить(Неопределено); - ПустыеЗначения.Добавить(0); - ПустыеЗначения.Добавить(Дата(1,1,1)); - ПустыеЗначения.Добавить(Ложь); - ПустыеЗначения.Добавить(""); - Для Каждого ПустоеЗначение Из ПустыеЗначения Цикл - Если Ложь - Или ТипЗначения.Типы().Количество() = 0 - Или ТипЗначения.СодержитТип(ТипЗнч(ПустоеЗначение)) - Тогда - ЭлементУсловногоОформления = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ПустоеЗначение)); - //ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветФонаПустогоЗначенияЛкс()); - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементУсловногоОформления.Отбор, ВыбраннаяКолонка, , ВидСравненияКомпоновкиДанных.НеЗаполнено); - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементУсловногоОформления.Отбор, ВыбраннаяКолонка, ПустоеЗначение, ВидСравненияКомпоновкиДанных.Равно); - ПолеЭлементаОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ПолеЭлементаОформления.Поле = Новый ПолеКомпоновкиДанных(ВыбраннаяКолонка); - КонецЕсли; - КонецЦикла; - // Отдельно для особенного Null - ПустоеЗначение = Null; - Если Истина - И ТипЗначения.Типы().Количество() > 0 - И ТипЗначения.СодержитТип(ТипЗнч(ПустоеЗначение)) - Тогда - ЭлементУсловногоОформления = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ПустоеЗначение)); - //ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветФонаПустогоЗначенияЛкс()); - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементУсловногоОформления.Отбор, ИмяКолонки + "_ИмяТипаЗначения_", "Null", ВидСравненияКомпоновкиДанных.Равно); - ПолеЭлементаОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ПолеЭлементаОформления.Поле = Новый ПолеКомпоновкиДанных(ВыбраннаяКолонка); - КонецЕсли; - Иначе - // Значение "Ложь" выводим в виде пустой строки - ПустоеЗначение = Ложь; - Если Ложь - Или ТипЗначения.Типы().Количество() = 1 - Или ТипЗначения.СодержитТип(ТипЗнч(ПустоеЗначение)) - Тогда - ЭлементУсловногоОформления = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); - ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", ""); - НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементУсловногоОформления.Отбор, ВыбраннаяКолонка, ПустоеЗначение, ВидСравненияКомпоновкиДанных.Равно); - ПолеЭлементаОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); - ПолеЭлементаОформления.Поле = Новый ПолеКомпоновкиДанных(ВыбраннаяКолонка); - КонецЕсли; - КонецЕсли; - КонецЦикла; - ОформлениеКолонокИдентификаторов.Использование = ОформлениеКолонокИдентификаторов.Поля.Элементы.Количество() > 0; - Если Ложь - Или КолонкиТипов.Количество() > 0 - Или КолонкиИдентификаторов.Количество() > 0 - Или КолонкиРазмеров.Количество() > 0 - Тогда - Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТаблицаЗначений.Количество(), "Заполнение доп. колонок"); - Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл - ирОбщий.ОбработатьИндикаторЛкс(Индикатор); // добавляет значительную долю длительности цикла - Если ирКэш.РежимОтладкиЛкс() Тогда - // Пассивный оригинал расположенного ниже однострочного кода. Выполняйте изменения синхронно в обоих вариантах. - Для Каждого ИмяКолонки Из КолонкиТипов Цикл - Если Ложь - Или ДобавлятьКолонкиТипов - Или СтрокаТаблицы[ИмяКолонки] = Null - Тогда - СтрокаТаблицы[ИмяКолонки + "_ИмяТипаЗначения_"] = ИменаТипов[ИмяКолонки][ТипЗнч(СтрокаТаблицы[ИмяКолонки])]; - КонецЕсли; - КонецЦикла; - Если ДобавлятьКолонкиИдентификаторов Тогда - Для Каждого ИмяКолонки Из КолонкиИдентификаторов Цикл - СтрокаТаблицы[ИмяКолонки + "_ИдентификаторЗначения_"] = СтроковыйИдентификаторЗначенияЛкс(СтрокаТаблицы[ИмяКолонки]); - КонецЦикла; - КонецЕсли; - Если ДобавлятьКолонкиРазмеров Тогда - Для Каждого ИмяКолонки Из КолонкиРазмеров Цикл - СтрокаТаблицы[ИмяКолонки + "_РазмерЗначения_"] = РазмерЗначенияЛкс(СтрокаТаблицы[ИмяКолонки]); - КонецЦикла; - КонецЕсли; - Иначе - // Однострочный код использован для ускорения. Выше расположен оригинал. Выполняйте изменения синхронно в обоих вариантах. Преобразовано консолью кода из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru) - Для Каждого ИмяКолонки Из КолонкиТипов Цикл   Если Ложь   Или ДобавлятьКолонкиТипов   Или СтрокаТаблицы[ИмяКолонки] = Null   Тогда   СтрокаТаблицы[ИмяКолонки + "_ИмяТипаЗначения_"] = ИменаТипов[ИмяКолонки][ТипЗнч(СтрокаТаблицы[ИмяКолонки])];   КонецЕсли;   КонецЦикла;   Если ДобавлятьКолонкиИдентификаторов Тогда   Для Каждого ИмяКолонки Из КолонкиИдентификаторов Цикл   СтрокаТаблицы[ИмяКолонки + "_ИдентификаторЗначения_"] = СтроковыйИдентификаторЗначенияЛкс(СтрокаТаблицы[ИмяКолонки]);   КонецЦикла;   КонецЕсли;   Если ДобавлятьКолонкиРазмеров Тогда   Для Каждого ИмяКолонки Из КолонкиРазмеров Цикл   СтрокаТаблицы[ИмяКолонки + "_РазмерЗначения_"] = РазмерЗначенияЛкс(СтрокаТаблицы[ИмяКолонки]);   КонецЦикла;   КонецЕсли;   - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если НастройкаКомпоновки.Структура.Количество() = 0 Тогда - НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(НастройкаКомпоновки.Структура); - КонецЕсли; - СхемаКомпоновки = СоздатьСхемуПоТаблицамЗначенийЛкс(ВнешниеНаборыДанных, , , ИтогиЧисловыхКолонок); - #Если Сервер И Не Сервер Тогда - СхемаКомпоновки = Новый СхемаКомпоновкиДанных; - #КонецЕсли - Если Иерархия Тогда - СвязьНаборов = СхемаКомпоновки.СвязиНаборовДанных.Добавить(); - СвязьНаборов.НаборДанныхИсточник = СхемаКомпоновки.НаборыДанных[0].Имя; - СвязьНаборов.НаборДанныхПриемник = СхемаКомпоновки.НаборыДанных[0].Имя; - СвязьНаборов.ВыражениеИсточник = "_ИДВетки"; - СвязьНаборов.ВыражениеПриемник = "_ИДВеткиРодителя"; - СвязьНаборов.НачальноеВыражение = "Неопределено"; // вычисляемое значение - КонецЕсли; - Если Отладка Тогда - ОтладитьЛкс(СхемаКомпоновки, , НастройкаКомпоновки, ВнешниеНаборыДанных); - Возврат Неопределено; - КонецЕсли; - Если ВыводВТаблицуЗначений Тогда - Приемник = СкомпоноватьВКоллекциюЗначенийПоСхемеЛкс(СхемаКомпоновки, НастройкаКомпоновки, Приемник, ВнешниеНаборыДанных,,,,,,, СузитьТипы); - //Приемник = ТаблицаЗначений.Скопировать(, "…"); - Иначе - Приемник = СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновки, НастройкаКомпоновки, Приемник, ВнешниеНаборыДанных, ДанныеРасшифровки, АвтофиксацияШапки,, ВстроитьЗначенияВРасшифровки); - #Если Сервер И Не Сервер Тогда - Приемник = Новый ТабличныйДокумент; - #КонецЕсли - Если ЗначениеЗаполнено(ИмяТекущейКолонки) И ВыбранныеКолонки.Найти(ИмяТекущейКолонки) <> Неопределено Тогда - Приемник.ТекущаяОбласть = Приемник.Область(2, ПозицииКолонок[ИмяТекущейКолонки] + 1); - КонецЕсли; - Для Счетчик = 1 По ВыбранныеКолонки.Количество() Цикл - ИмяКолонки = ВыбранныеКолонки[Счетчик - 1]; - Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда - Продолжить; - КонецЕсли; - Колонка = ТаблицаЗначений.Колонки.Найти(ИмяКолонки); - Если Колонка <> Неопределено Тогда - Приемник.Область(1, ПозицииКолонок[ИмяКолонки] + 1).Примечание.Текст = "Типы значений: " + РасширенноеПредставлениеЗначенияЛкс(Колонка.ТипЗначения); - КонецЕсли; - КонецЦикла; - КонецЕсли; - Возврат Приемник; - -КонецФункции - Функция СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновки, НастройкаКомпоновки, Знач ТабличныйДокумент = Неопределено, ВнешниеНаборыДанных = Неопределено, ДанныеРасшифровки = Неопределено, АвтофиксацияШапки = Истина, ПроверятьДоступностьПолей = Ложь, ВстроитьЗначенияПолейВРасшифровки = Ложь, ДобавитьРасшифровкиДляПолейИтогов = Ложь) Экспорт @@ -31517,1018 +18982,20 @@ _РежимОтладки = Ложь; КонецФункции -Функция ДополнительныеДействияРасшифровкиКомпоновкиЛкс(Знач ДоступныеДействия, Знач ЭлементРасшифровки, Знач ДополнительныеПунктыМеню = Неопределено, выхКоличествоСсылочныхПолей = 0, - ЗамещатьСтандартные = Ложь, ЗначенияВсехПолей = Неопределено) Экспорт +Функция СмещенныйЦветЛкс(Знач ТекущийЦветФона, СмещениеКрасный = -20, СмещениеЗеленый = 0, СмещениеСиний = -20) Экспорт + Если ТекущийЦветФона.Вид = ВидЦвета.АвтоЦвет Тогда + ТекущийЦветФона = ЦветаСтиля.ЦветФонаПоля; + КонецЕсли; + АбсолютныйЦвет = ирКэш.АбсолютныйЦветЛкс(ЗначениеВСтрокуВнутр(ТекущийЦветФона)); #Если Сервер И Не Сервер Тогда - ЭлементРасшифровки = Новый ЭлементРасшифровкиКомпоновкиДанныхПоля; + АбсолютныйЦвет = Новый Цвет; #КонецЕсли - Если ДополнительныеПунктыМеню = Неопределено Тогда - ДополнительныеПунктыМеню = Новый СписокЗначений; - КонецЕсли; - выхКоличествоСсылочныхПолей = 0; - СписокДействийОформить = Новый СписокЗначений; - СписокДействийОтборать = Новый СписокЗначений; - СписокДействийСгруппировать = Новый СписокЗначений; - СписокДействийУпорядочить = Новый СписокЗначений; - СписокДействийГруппировки = Новый СписокЗначений; - ЗначенияПолей = ЭлементРасшифровки.ПолучитьПоля(); - Для каждого ЗначениеПоля Из ЗначенияПолей Цикл - ДобавитьДействияРасшифровкиПоПолюЛкс(Истина, ДополнительныеПунктыМеню, ЗначениеПоля, СписокДействийОтборать, СписокДействийОформить, СписокДействийСгруппировать, СписокДействийУпорядочить, - ЭлементРасшифровки, выхКоличествоСсылочныхПолей); - КонецЦикла; - Если ЗначенияВсехПолей = Неопределено Тогда - ЗначенияВсехПолей = Новый Соответствие; - ИзвлечьКлючИзЭлементаРасшифровкиКомпоновкиЛкс(ЭлементРасшифровки,, ЗначенияВсехПолей); - КонецЕсли; - Для Каждого КлючИЗначение Из ЗначенияВсехПолей Цикл - Если ЗначенияПолей.Найти(КлючИЗначение.Ключ) <> Неопределено Тогда - Продолжить; - КонецЕсли; - ЗначениеПоля = Новый Структура("Поле, Значение", КлючИЗначение.Ключ, КлючИЗначение.Значение); - ДобавитьДействияРасшифровкиПоПолюЛкс(Ложь, СписокДействийГруппировки, ЗначениеПоля, СписокДействийОтборать, СписокДействийОформить,, СписокДействийУпорядочить, ЭлементРасшифровки); - КонецЦикла; - Если СписокДействийГруппировки.Количество() > 0 Тогда - ДополнительныеПунктыМеню.Добавить(СписокДействийГруппировки, "Группировки"); - КонецЕсли; - Если ЗамещатьСтандартные Тогда - ИндексМассива = ДоступныеДействия.Найти(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить); - Если ИндексМассива <> Неопределено Тогда - ДоступныеДействия.Удалить(ИндексМассива); - ДополнительныеПунктыМеню.Добавить(СписокДействийОформить, "Оформить",, ирКэш.КартинкаПоИмениЛкс("УсловноеОформлениеКомпоновкиДанных")); - КонецЕсли; - ИндексМассива = ДоступныеДействия.Найти(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать); - Если ИндексМассива <> Неопределено Тогда - ДоступныеДействия.Удалить(ИндексМассива); - ДополнительныеПунктыМеню.Добавить(СписокДействийОтборать, "Отфильтровать",, ирКэш.КартинкаПоИмениЛкс("ОтборКомпоновкиДанных")); - КонецЕсли; - //ДополнительныеПунктыМеню.Добавить(СписокДействийСгруппировать, "Сгруппировать"); // Не доделано - ИндексМассива = ДоступныеДействия.Найти(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить); - Если ИндексМассива <> Неопределено Тогда - ДоступныеДействия.Удалить(ИндексМассива); - ДополнительныеПунктыМеню.Добавить(СписокДействийУпорядочить, "Упорядочить",, ирКэш.КартинкаПоИмениЛкс("ПорядокКомпоновкиДанных")); - КонецЕсли; - КонецЕсли; - Возврат ДополнительныеПунктыМеню; + СмещенныйЦвет = Новый Цвет(Макс(0, АбсолютныйЦвет.Красный + СмещениеКрасный), Макс(0, АбсолютныйЦвет.Зеленый + СмещениеЗеленый), Макс(АбсолютныйЦвет.Синий + СмещениеСиний)); + Возврат СмещенныйЦвет; КонецФункции -Процедура ДобавитьДействияРасшифровкиПоПолюЛкс(ЛиПрямоеПоле = Истина, Знач СписокДействийОткрыть, Знач ЗначениеПоля, Знач СписокДействийОтборать, Знач СписокДействийОформить, - Знач СписокДействийСгруппировать = Неопределено, Знач СписокДействийУпорядочить = Неопределено, Знач ЭлементРасшифровки, выхКоличествоСсылочныхПолей = 0) - - ПорогДлиныПредставления = 100; - ПредставлениеЗначения = ПредставлениеЗначенияСОграничениемДлиныЛкс(РасширенноеПредставлениеЗначенияЛкс(ЗначениеПоля.Значение,,,,, Истина), ПорогДлиныПредставления); - Если Ложь - Или ирОбщий.ЛиКоллекцияЛкс(ЗначениеПоля.Значение) - Или ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ЗначениеПоля.Значение) - Тогда - СписокДействийОткрыть.Добавить(Новый Структура("Действие, ЗначениеПоля", "ОткрытьЗначение", ЗначениеПоля), "Открыть """ + ЗначениеПоля.Поле + " = " + ПредставлениеЗначения + """", - , ирОбщий.КартинкаТипаЛкс(ТипЗнч(ЗначениеПоля.Значение))); - Иначе - СписокДействийОткрыть.Добавить(Новый Структура("Действие, ЗначениеПоля", "КопироватьВБуферОбмена", ЗначениеПоля), ЗначениеПоля.Поле + " = " + ПредставлениеЗначения, - , ирКэш.КартинкаПоИмениЛкс("ирКопировать")); - КонецЕсли; - Если ирОбщий.ЛиСсылкаНаОбъектБДЛкс(ЗначениеПоля.Значение) Тогда - СписокДействийОткрыть.Добавить(Новый Структура("Действие, ЗначениеПоля", "ОткрытьВРедактореОбъектаБД", ЗначениеПоля), "Открыть """ + ЗначениеПоля.Поле + " = " + ПредставлениеЗначения + """", - , ирКэш.КартинкаПоИмениЛкс("ирРедактироватьОбъектБД")); - выхКоличествоСсылочныхПолей = выхКоличествоСсылочныхПолей + 1; - КонецЕсли; - Если ЛиПрямоеПоле Тогда - СписокДействийСгруппировать.Добавить(Новый Структура("Действие, ЗначениеПоля, Родители", "Сгруппировать", ЗначениеПоля, ЭлементРасшифровки.ПолучитьРодителей()), "Сгруппировать """ + ЗначениеПоля.Поле + """"); - СписокДействийОформить.Добавить(Новый Структура("Действие, ЗначениеПоля", "ОформитьПоле", ЗначениеПоля), "Оформить """ + ЗначениеПоля.Поле + """"); - КонецЕсли; - Если ЗначениеПоля.Значение <> Null Тогда - СписокДействийОформить.Добавить(Новый Структура("Действие, ЗначениеПоля", "ОформитьЗначение", ЗначениеПоля), "Оформить """ + ЗначениеПоля.Поле + " = " + ПредставлениеЗначения + """"); - СписокДействийОтборать.Добавить(Новый Структура("Действие, ЗначениеПоля", "Отфильтровать", ЗначениеПоля), "Отобрать """ + ЗначениеПоля.Поле + " = " + ПредставлениеЗначения + """"); - КонецЕсли; - СписокДействийУпорядочить.Добавить(Новый Структура("Действие, ЗначениеПоля", "Упорядочить", ЗначениеПоля), "Упорядочить """ + ЗначениеПоля.Поле + """"); - -КонецПроцедуры - -Функция ОбработатьДополнительноеДействиеРасшифровкиКомпоновкиЛкс(Знач ВыбранноеДействие, СтандартнаяОбработка, НастройкаКомпоновки = Неопределено) Экспорт - - Если ТипЗнч(ВыбранноеДействие) = Тип("Структура") Тогда - ЗначениеПоля = ВыбранноеДействие.ЗначениеПоля; - #Если Сервер И Не Сервер Тогда - ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; - ЗначениеПоля = ДанныеРасшифровки.Элементы[0].ПолучитьПоля()[0]; - НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; - #КонецЕсли - Если ВыбранноеДействие.Действие = "ОткрытьЗначение" Тогда - ОткрытьЗначениеЛкс(ЗначениеПоля.Значение, Ложь, СтандартнаяОбработка); - ИначеЕсли ВыбранноеДействие.Действие = "ОткрытьВРедактореОбъектаБД" Тогда - СтандартнаяОбработка = Ложь; - ОткрытьСсылкуВРедактореОбъектаБДЛкс(ЗначениеПоля.Значение); - ИначеЕсли ВыбранноеДействие.Действие = "КопироватьВБуферОбмена" Тогда - СтандартнаяОбработка = Ложь; - ТекстВБуферОбменаОСЛкс(ЗначениеПоля.Значение); - ИначеЕсли Ложь - Или ВыбранноеДействие.Действие = "ОформитьПоле" - Или ВыбранноеДействие.Действие = "ОформитьЗначение" - Тогда - СтандартнаяОбработка = Ложь; - Если ВыбранноеДействие.Действие = "ОформитьПоле" Тогда - ЭлементНастроек = ирОбщий.НайтиЭлементУсловногоОформленияПоПолюЛкс(НастройкаКомпоновки.УсловноеОформление, ЗначениеПоля.Поле); - КонецЕсли; - Если ЭлементНастроек = Неопределено Тогда - ЭлементНастроек = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); - ОформляемоеПоле = ЭлементНастроек.Поля.Элементы.Добавить(); - ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ЗначениеПоля.Поле); - ОформляемоеПоле.Использование = Истина; - Если ВыбранноеДействие.Действие = "ОформитьЗначение" Тогда - ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементНастроек.Отбор, ЗначениеПоля.Поле, ЗначениеПоля.Значение); - КонецЕсли; - КонецЕсли; - ИначеЕсли ВыбранноеДействие.Действие = "Отфильтровать" Тогда - СтандартнаяОбработка = Ложь; - ЭлементНастроек = ирОбщий.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки.Отбор, ЗначениеПоля.Поле, ЗначениеПоля.Значение); - ИначеЕсли ВыбранноеДействие.Действие = "Сгруппировать" Тогда - //Родители = ВыбранноеДействие.Родители; - //#Если Сервер И Не Сервер Тогда - // Родители = ДанныеРасшифровки.Элементы[0].ПолучитьРодителей(); - //#КонецЕсли - //Если Родители.Количество() > 0 Тогда - // ГруппировкаРодитель = Родители[0]; - //КонецЕсли; - //СтандартнаяОбработка = Ложь; - //// TODO придумать. Сейчас ошибка - //ЭлементСтруктурыРодитель = ирОбщий.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(НастройкаКомпоновки.Структура, ГруппировкаРодитель.Группировка, Ложь); - //Если ЭлементСтруктурыРодитель = Неопределено Тогда - // ЭлементСтруктурыРодитель = НастройкаКомпоновки.Структура; - //КонецЕсли; - //ЭлементНастроек = ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПредставлениюЛкс(ЭлементСтруктурыРодитель.ПоляГруппировки, ЗначениеПоля.Поле); - ИначеЕсли ВыбранноеДействие.Действие = "Упорядочить" Тогда - СтандартнаяОбработка = Ложь; - ЭлементНастроек = ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Порядок, ЗначениеПоля.Поле, ЗначениеПоля.Значение); - КонецЕсли; - КонецЕсли; - Возврат ЭлементНастроек; - -КонецФункции - -// Параметры: -// ОтчетОбъект - Форма, ОтчетОбъект -Процедура ОтчетКомпоновкиОбработкаРасшифровкиЛкс(Знач ОтчетОбъект, Знач Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры, ПолеТабличногоДокумента, ДанныеРасшифровки, - Авторасшифровка = Ложь) Экспорт - - #Если _ Тогда - ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; - ЭлементРасшифровки = ДанныеРасшифровки.Элементы[0]; - ТабличныйДокумент = Новый ТабличныйДокумент; - ОтчетОбъект = Отчеты.ирАнализПравДоступа.Создать(); - #КонецЕсли - Если ТипЗнч(Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда - //Возврат; - КонецЕсли; - ЭлементРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка]; - ДоступныеДействия = Новый Массив; - РазрешитьАвтовыборДействия = Истина; - ПараметрВыбранногоДействия = Неопределено; - КоличествоСсылочныхПолей = 0; - ЗначенияВсехПолей = Новый Соответствие; - ИзвлечьКлючИзЭлементаРасшифровкиКомпоновкиЛкс(ЭлементРасшифровки,, ЗначенияВсехПолей); - Для Каждого ЭлементОтбора Из ДанныеРасшифровки.Настройки.Отбор.Элементы Цикл - Если Ложь - Или Не ЭлементОтбора.Использование - Или ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") - Или ЭлементОтбора.ВидСравнения <> ВидСравненияКомпоновкиДанных.Равно - Или ТипЗнч(ЭлементОтбора.ПравоеЗначение) = Тип("ПолеКомпоновкиДанных") - Тогда - Продолжить; - КонецЕсли; - ЗначенияВсехПолей["" + ЭлементОтбора.ЛевоеЗначение] = ЭлементОтбора.ПравоеЗначение; - КонецЦикла; - СписокДополнительныхДействий = Новый СписокЗначений; - Если ирОбщий.МетодРеализованЛкс(ОтчетОбъект, "ОбработкаРасшифровки") Тогда - ОтчетОбъект.ОбработкаРасшифровки(ДанныеРасшифровки, ЭлементРасшифровки, ПолеТабличногоДокумента, ДоступныеДействия, СписокДополнительныхДействий, РазрешитьАвтовыборДействия, ЗначенияВсехПолей); - КонецЕсли; - ДополнительныеДействияРасшифровкиКомпоновкиЛкс(ДоступныеДействия, ЭлементРасшифровки, СписокДополнительныхДействий, КоличествоСсылочныхПолей,, ЗначенияВсехПолей); - КоличествоОбщихДействий = СписокДополнительныхДействий.Количество(); - Если Истина - И РазрешитьАвтовыборДействия - И Авторасшифровка - И (ЛОжь - ИЛи СписокДополнительныхДействий.Количество() - КоличествоОбщихДействий = 1 - Или СписокДополнительныхДействий.Количество() - КоличествоОбщихДействий = 0 И КоличествоСсылочныхПолей = 1) - Тогда - ВыбранноеДействие = СписокДополнительныхДействий[0].Значение; - КонецЕсли; - Если ВыбранноеДействие = Неопределено Тогда - ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОтчетОбъект.СхемаКомпоновкиДанных); - ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникДоступныхНастроек); - ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие, ПараметрВыбранногоДействия, ДоступныеДействия, СписокДополнительныхДействий, Авторасшифровка); - КонецЕсли; - Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда - СтандартнаяОбработка = Ложь; - //Возврат; - КонецЕсли; - Если ПараметрВыбранногоДействия = Неопределено Тогда - ПараметрВыбранногоДействия = ЗначенияВсехПолей; - КонецЕсли; - ЭлементНастроек = ОбработатьДополнительноеДействиеРасшифровкиКомпоновкиЛкс(ВыбранноеДействие, СтандартнаяОбработка, ОтчетОбъект.КомпоновщикНастроек.Настройки); - Если ирОбщий.МетодРеализованЛкс(ОтчетОбъект, "ДействиеРасшифровки") Тогда - ОтчетОбъект.ДействиеРасшифровки(ВыбранноеДействие, ПараметрВыбранногоДействия, СтандартнаяОбработка); - КонецЕсли; - Если СтандартнаяОбработка Тогда - Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда - ОткрытьЗначение(ПараметрВыбранногоДействия); - ИначеЕсли ТипЗнч(ВыбранноеДействие) = Тип("ДействиеОбработкиРасшифровкиКомпоновкиДанных") Тогда - ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОтчетОбъект.СхемаКомпоновкиДанных); - ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникДоступныхНастроек); - НовыеНастройки = ОбработкаРасшифровки.ПрименитьНастройки(Расшифровка, ПараметрВыбранногоДействия); - ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройки); - ОтчетОбъект.СкомпоноватьРезультат(ПолеТабличногоДокумента, ДанныеРасшифровки); - КонецЕсли; - КонецЕсли; - СтандартнаяОбработка = Ложь; - -КонецПроцедуры - -Функция ВыбратьТипСсылкиВПолеВводаЛкс(Элемент, СтандартнаяОбработка, ОткрытьФормуВыбораСсылкиПослеВыбораТипа = Ложь) Экспорт - - Форма = ирКэш.Получить().ПолучитьФорму("ВыборОбъектаМетаданных", Элемент, Элемент); - ТекущееЗначение = ДанныеЭлементаФормыЛкс(Элемент); - Если ЛиСсылкаНаОбъектБДЛкс(ТекущееЗначение, Ложь) Тогда - НачальноеЗначениеВыбора = ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(ТекущееЗначение)); - КонецЕсли; - лСтруктураПараметров = Новый Структура; - лСтруктураПараметров.Вставить("ОтображатьСсылочныеОбъекты", Истина); - лСтруктураПараметров.Вставить("ОтображатьВнешниеИсточникиДанных", Истина); - лСтруктураПараметров.Вставить("ОтображатьПеречисления", Истина); - лСтруктураПараметров.Вставить("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); - Форма.НачальноеЗначениеВыбора = лСтруктураПараметров; - ЗначениеВыбора = Форма.ОткрытьМодально(); - Если ТипЗнч(ЗначениеВыбора) = Тип("Структура") Тогда - лПолноеИмяОбъекта = Неопределено; - Если ЗначениеВыбора.Свойство("ПолноеИмяОбъекта", лПолноеИмяОбъекта) Тогда - ИмяТипаСсылки = ИмяТипаИзПолногоИмениМДЛкс(лПолноеИмяОбъекта, "Ссылка"); - ОписаниеТипов = Новый ОписаниеТипов(ИмяТипаСсылки); - НовоеЗначение = ОписаниеТипов.ПривестиЗначение(Неопределено); - ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, НовоеЗначение); - // // http://www.hostedredmine.com/issues/884276 - //Если ОткрытьФормуВыбораСсылкиПослеВыбораТипа Тогда - // //Если ЛиСсылкаНаОбъектБДЛкс(НовоеЗначение, Ложь) Тогда - // ОткрытьФормуСпискаЛкс(лПолноеИмяОбъекта,,, Элемент, Истина); - // //КонецЕсли; - //КонецЕсли; - КонецЕсли; - КонецЕсли; - СтандартнаяОбработка = Ложь; - Возврат НовоеЗначение; - -КонецФункции - -// Результат - значение выбранного типа, но не обязательно выбранное (выбор типа выполняется синхронно, а значения - асинхронно) -// -// Параметры: -// Элемент - - -// СтандартнаяОбработка - - -// ИгнорироватьОписаниеТипов - - -// Отбор - Структура - -// -// Возвращаемое значение: -// - -// -Функция ПолеВвода_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка, ИгнорироватьОписаниеТипов = Ложь, Знач Отбор = Неопределено) Экспорт - - РезультатВыбора = ДанныеЭлементаФормыЛкс(Элемент); - Если Истина - И ИгнорироватьОписаниеТипов - И (Ложь - Или ТипЗнч(РезультатВыбора) = Тип("Строка") - Или РезультатВыбора = Неопределено) - Тогда - Типы = Элемент.ОграничениеТипа.Типы(); - Если Типы.Количество() = 1 Тогда - // Ссылка внешнего источника данных - СтандартнаяОбработка = Ложь; - ОткрытьФормуСпискаЛкс(ПолучитьПолноеИмяМДТипаЛкс(Типы[0]),,, Элемент, Истина,, РезультатВыбора); - Иначе - РезультатВыбора = ВыбратьТипСсылкиВПолеВводаЛкс(Элемент, СтандартнаяОбработка); - КонецЕсли; - ИначеЕсли ЛиСсылкаНаОбъектБДЛкс(РезультатВыбора, Ложь) Тогда - СтандартнаяОбработка = Ложь; - Если Отбор = Неопределено Тогда - Отбор = Новый Структура; - КонецЕсли; - Если ТипЗнч(Элемент) = Тип("ПолеВвода") И Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(РезультатВыбора)) Тогда - Если ЗначениеЗаполнено(Элемент.ВыборПоВладельцу) Тогда - Отбор.Вставить("Владелец", Элемент.ВыборПоВладельцу); - КонецЕсли; - КонецЕсли; - ОткрытьФормуСпискаЛкс(ПолучитьПолноеИмяМДТипаЛкс(ТипЗнч(РезультатВыбора)), Отбор,, Элемент, Истина,, РезультатВыбора); - Иначе - // Тут надо делать выбор из диалога плоского списка типов - КонецЕсли; - Возврат РезультатВыбора; - -КонецФункции - -Процедура ПолеВводаРегулированиеЛкс(Знач Элемент, Знач Направление, СтандартнаяОбработка) Экспорт - - ОболочкаПоляТекста = ОболочкаПоляТекстаЛкс(Элемент); - #Если Сервер И Не Сервер Тогда - ОболочкаПоляТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - СтруктураВыделения = ОболочкаПоляТекста.СтруктураДвумерногоВыделения(); - Если ТипЗнч(Элемент.Значение) = Тип("Дата") Тогда - // Антибаг платформы 8.3.0-20 Каретка меняет положение https://www.hostedredmine.com/issues/936754 - // Повторяем штатное поведение - СтандартнаяОбработка = Ложь; - Позиция = СтруктураВыделения.НачальнаяКолонка; - МножительСекунд = 0; - МножительМесяцев = 0; - Если Позиция > 17 Тогда - МножительСекунд = 1; - ИначеЕсли Позиция > 14 Тогда - МножительСекунд = 60; - ИначеЕсли Позиция > 11 Тогда - МножительСекунд = 60*60; - ИначеЕсли Позиция > 6 Тогда - МножительМесяцев = 12; - ИначеЕсли Позиция > 3 Тогда - МножительМесяцев = 1; - Иначе - МножительСекунд = 24*60*60; - КонецЕсли; - НовоеЗначение = Элемент.Значение; - НовоеЗначение = НовоеЗначение + МножительСекунд * Направление; - НовоеЗначение = ДобавитьМесяц(НовоеЗначение, МножительМесяцев * Направление); - //Элемент.Значение = НовоеЗначение; // Так каретка меняет положение - ОболочкаПоляТекста.УстановитьГраницыВыделения(1, 1); - ОболочкаПоляТекста.ВыделенныйТекст(НовоеЗначение); - УстановитьФокусВводаФормеЛкс(); - ОболочкаПоляТекста.УстановитьДвумерноеВыделениеСтруктурой(СтруктураВыделения); - КонецЕсли; - -КонецПроцедуры - -Функция ДобавитьМногострочнуюСтрокуВТекстЛкс(ТекстПриемник, СтрокаДляВставки, Смещение, СНовойСтроки = Ложь, ОбрезатьЛевыеПустые = Ложь) Экспорт - - Если Не ЗначениеЗаполнено(ТекстПриемник) Тогда - ТекстПриемник = ""; - КонецЕсли; - ЗаписьТекста = Новый ЗаписьXML; - ЗаписьТекста.УстановитьСтроку(); - Если СНовойСтроки Тогда - ЗаписьТекста.ЗаписатьБезОбработки(Символы.ПС + Смещение); - КонецЕсли; - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.УстановитьТекст(СтрокаДляВставки); - ЗаписьТекста.ЗаписатьБезОбработки(ТекстовыйДокумент.ПолучитьСтроку(1)); - Для Счетчик = 2 По ТекстовыйДокумент.КоличествоСтрок() Цикл - ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(Счетчик); - Если ОбрезатьЛевыеПустые Тогда - ТекущаяСтрока = СокрЛ(ТекущаяСтрока); - КонецЕсли; - ЗаписьТекста.ЗаписатьБезОбработки(Символы.ПС + Смещение + ТекущаяСтрока); - КонецЦикла; - ТекстПриемник = ТекстПриемник + ЗаписьТекста.Закрыть(); - Возврат ТекстПриемник; - -КонецФункции - -Функция ИндексКартинкиТипаЗначенияБДЛкс(Знач ОписаниеТипов) Экспорт - - Если ОписаниеТипов = Неопределено Тогда - Возврат 14; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ОписаниеТипов = Новый ОписаниеТипов; - #КонецЕсли - Если ОписаниеТипов.СодержитТип(Тип("Null")) Тогда - ОписаниеТипов = Новый ОписаниеТипов(ОписаниеТипов,, "Null"); - КонецЕсли; - Типы = ОписаниеТипов.Типы(); - Если Типы.Количество() = 1 Тогда - КорневойТип = КорневойТипКонфигурацииЛкс(Типы[0]); - Если Типы[0] = Тип("Число") Тогда - ИндексКартинки = 0; - ИначеЕсли Типы[0] = Тип("Строка") Тогда - ИндексКартинки = 1; - ИначеЕсли Типы[0] = Тип("Дата") Тогда - ИндексКартинки = 2; - ИначеЕсли Типы[0] = Тип("Булево") Тогда - ИндексКартинки = 3; - ИначеЕсли Типы[0] = Тип("ТаблицаЗначений") Тогда - ИндексКартинки = 19; - ИначеЕсли Типы[0] = Тип("Тип") Тогда - ИндексКартинки = 20; - ИначеЕсли Типы[0] = Тип("УникальныйИдентификатор") Тогда - ИндексКартинки = 21; - ИначеЕсли Типы[0] = Тип("ХранилищеЗначения") Тогда - ИндексКартинки = 22; - ИначеЕсли КорневойТип = "Справочник" Тогда - ИндексКартинки = 7; - ИначеЕсли КорневойТип = "Документ" Тогда - ИндексКартинки = 8; - ИначеЕсли КорневойТип = "Перечисление" Тогда - ИндексКартинки = 9; - ИначеЕсли КорневойТип = "ПланВидовХарактеристик" Тогда - ИндексКартинки = 10; - ИначеЕсли КорневойТип = "ПланСчетов" Тогда - ИндексКартинки = 11; - ИначеЕсли КорневойТип = "ПланВидовРасчета" Тогда - ИндексКартинки = 12; - ИначеЕсли КорневойТип = "БизнесПроцесс" Тогда - ИндексКартинки = 13; - ИначеЕсли КорневойТип = "ТочкаМаршрута" Тогда - ИндексКартинки = 14; - ИначеЕсли КорневойТип = "Задача" Тогда - ИндексКартинки = 13; - ИначеЕсли КорневойТип = "ПланОбмена" Тогда - ИндексКартинки = 15; - Иначе - ИндексКартинки = 16; - КонецЕсли; - Иначе - ИндексКартинки = 16; - КонецЕсли; - - Возврат ИндексКартинки; - -КонецФункции - -Функция ПроверитьПодпискиЛкс() Экспорт - - Результат = Истина; - - // Проверка компиляции общих модулей с обработчиками событий - СписокМодулейВызоваСервера = Неопределено; - ИмяКлиента = Неопределено; - СписокМодулей = ПроблемныеОбщиеМодулиЛкс(СписокМодулейВызоваСервера, ИмяКлиента); - Если СписокМодулей.Количество() > 0 Тогда - Если ирКэш.ЛиПортативныйРежимЛкс() Тогда - ТипыОбъектовПодписок = ""; - Иначе - ТипыОбъектовПодписок = " менеджеров"; - КонецЕсли; - СообщитьЛкс("В конфигурации обнаружены недоступные на клиенте (" + ИмяКлиента + " приложение) общие модули с обработчиками подписок на события" + ТипыОбъектовПодписок + ".", СтатусСообщения.Внимание); - СообщитьЛкс("Поэтому в работе некоторых инструментов возможны ошибки ""При подписке * на событие * произошла ошибка. Обработчик события не найден."""); - Если ИмяКлиента = "Обычное" Тогда - СообщитьЛкс("Необходимо в конфигураторе установить ""Сервис""/""Параметры""/""Редактирование конфигурации для режимов запуска""=""Управляемое приложение и обычное приложение""."); - КонецЕсли; - Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда - ТекстСообщения = "Рекомендуется установить флажок ""Вызова сервера"" или ""Клиент (" + ИмяКлиента + " приложение)"" и обеспечить компиляцию у этих общих модулей:"; - Иначе - ТекстСообщения = "Рекомендуется установить флажок ""Клиент (" + ИмяКлиента + " приложение)"" и обеспечить компиляцию у этих общих модулей:"; - КонецЕсли; - МассивИменМодулей = Новый Массив; - Для Каждого КлючИЗначение Из СписокМодулей Цикл - МассивИменМодулей.Добавить(КлючИЗначение.Ключ); - КонецЦикла; - ТекстСообщения = ТекстСообщения + " " + СтрСоединитьЛкс(МассивИменМодулей, ", "); - СообщитьЛкс(ТекстСообщения); - Результат = Ложь; - КонецЕсли; - Если СписокМодулейВызоваСервера.Количество() > 0 Тогда - СообщитьЛкс("В конфигурации обнаружены недоступные на клиенте (" + ИмяКлиента + " приложение) общие модули с обработчиками подписок на событие ""ОбработкаПолученияПредставления"".", СтатусСообщения.Внимание); - СообщитьЛкс("Это может приводить к сильному замеделению получения представлений таких ссылок. Рекомендуется перенести эти обработчики в модуль, компилируемый на толстых клиентах"); - Для Каждого КлючИЗначение Из СписокМодулей Цикл - ТекстСообщения = ТекстСообщения + " " + КлючИЗначение.Ключ + ","; - КонецЦикла; - СообщитьЛкс(ТекстСообщения); - Результат = Ложь; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ПроблемныеОбщиеМодулиЛкс(СписокМодулейВызоваСервера = Неопределено, ИмяКлиента = "") Экспорт - - СписокМодулей = Новый Структура; - СписокМодулейВызоваСервера = Новый Структура; - ОбщиеМодули = Метаданные.ОбщиеМодули; - Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда - ИмяКлиента = "Управляемое"; - Иначе - ИмяКлиента = "Обычное"; - КонецЕсли; - ИмяСвойства = "Клиент" + ИмяКлиента + "Приложение"; - Для Каждого Подписка Из Метаданные.ПодпискиНаСобытия Цикл - #Если Сервер И Не Сервер Тогда - Подписка = Метаданные.ПодпискиНаСобытия.ВерсионированиеОбъектов_ПриЗаписиОбъекта; - #КонецЕсли - МетаМодуль = ОбщиеМодули.Найти(ирОбщий.ПервыйФрагментЛкс(Подписка.Обработчик)); - Если МетаМодуль = Неопределено Тогда - // Некорректная подписка - Продолжить; - КонецЕсли; - Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда - // Проверяем только подписки менеджеров - Если Не МетаМодуль[ИмяСвойства] И Не МетаМодуль.ВызовСервера Тогда - ТипыИсточников = Подписка.Источник.Типы(); // Долго! - Если ТипыИсточников.Количество() > 0 И Не ирОбщий.ЛиТипОбъектаБДЛкс(ТипыИсточников[0]) Тогда // Это подписка менеджера - СписокМодулей.Вставить(МетаМодуль.Имя); - КонецЕсли; - КонецЕсли; - Иначе - // Проверяем все подписки в портативном режиме обычном приложении - Если Не МетаМодуль[ИмяСвойства] Тогда - СписокМодулей.Вставить(МетаМодуль.Имя); - КонецЕсли; - КонецЕсли; - Если Подписка.Событие = "ОбработкаПолученияПредставления" И МетаМодуль.ВызовСервера Тогда - СписокМодулейВызоваСервера.Вставить(МетаМодуль.Имя); - КонецЕсли; - КонецЦикла; - Возврат СписокМодулей; - -КонецФункции - -// Тяжелый метод. Попытка-Исключение в 5-10 раз быстрее. -Функция ЕстьСвойствоОбъектаЛкс(Объект, Свойство) Экспорт - - УникальноеЗначение = "м86ыщшру5аа7шлв9823454"; - Структура = Новый Структура(Свойство, УникальноеЗначение); - ЗаполнитьЗначенияСвойств(Структура, Объект); - Результат = Структура[Свойство] <> УникальноеЗначение; - Возврат Результат; - -КонецФункции - -//////////////////////////////// -// ФОРМЫ - -Процедура ИнициироватьФормуЛкс(ЭтаФорма, ПолноеИмяФормы, РазрешитьОткрытиеДополнительныхФорм = Истина) Экспорт - - // Проверяем режим модальности - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ОткрыватьФормуПерезапуска = Ложь; - - ЛиМодальностьЗапрещена = ирКэш.ЛиМодальностьЗапрещенаЛкс(); - Если Ложь - Или ирКэш.НомерИзданияПлатформыЛкс() = "82" - Или мПлатформа.мВопросОтключенияПроверкиМодальностиЗадавался = Истина - Или Метаданные.РежимИспользованияМодальности = Метаданные.СвойстваОбъектов.РежимИспользованияМодальности.Использовать - Тогда - // - ИначеЕсли РазрешитьОткрытиеДополнительныхФорм Тогда - КоманднаяСтрокаПроцесса = ирКэш.КоманднаяСтрокаТекущегоПроцессаОСЛкс(); - мПлатформа.мВопросОтключенияПроверкиМодальностиЗадавался = Истина; - Если Ложь - Или Найти(НРег(КоманднаяСтрокаПроцесса), НРег("/EnableCheckModal")) > 0 - //Или Найти(КоманднаяСтрокаПроцесса, "/EnableCheckExtensionsAndAddInsSyncCalls") > 0 - Тогда - ТекстСообщения = "При запуске сеанса из конфигуратора с текущим свойством конфигурации ""Режим использования модальности"" включается контроль модальности." - " Для его отключения рекомендуется запустить сеанс не из конфигуратора, например командой ""Запуск сеанса""."; - СообщитьЛкс(ТекстСообщения,,, Истина, Ложь); - ОткрыватьФормуПерезапуска = Истина; - КонецЕсли; - КонецЕсли; - - // Проверяем защиту от опасных действий - // Здесь это делать мало полезно, т.к. она срабатывает раньше - Если Истина - И РазрешитьОткрытиеДополнительныхФорм - И ирКэш.ЛиПортативныйРежимЛкс() - И мПлатформа.мПроверкаЗащитыОтОпасныхДействийВыполнялась <> Истина - //И ирКэш.НомерВерсииПлатформыЛкс() < 803010 // Когда в платформе исправят проблему, тогда и отключим - Тогда - ТекущийПользовательБазы = ПользователиИнформационнойБазы.ТекущийПользователь(); - Попытка - ЗащитаОтОпасныхДействий = ТекущийПользовательБазы.ЗащитаОтОпасныхДействий; - Исключение - ЗащитаОтОпасныхДействий = Неопределено; - КонецПопытки; - Если Истина - И ЗначениеЗаполнено(ТекущийПользовательБазы.Имя) - И ЗащитаОтОпасныхДействий <> Неопределено - И ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Истина - Тогда - ТекстСообщения = "У текущего пользователя базы включена защита от опасных действий. Для корректной работы инструментов ее рекомендуется отключить перезапуском сеанса через открывшуюся форму."; - СообщитьЛкс(ТекстСообщения, СтатусСообщения.Внимание,, Истина, Ложь); - ОткрыватьФормуПерезапуска = Истина; - КонецЕсли; - мПлатформа.мПроверкаЗащитыОтОпасныхДействийВыполнялась = Истина; - КонецЕсли; - - Если ОткрыватьФормуПерезапуска Тогда - // TODO Надо заблокировать открытие формы в модальной группе - #Если ТолстыйКлиентОбычноеПриложение Тогда - ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ЗапускСеансаОбычная"); - #Иначе - //ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая"); - #КонецЕсли - КонецЕсли; - Если ЛиМодальностьЗапрещена И Найти(ПолноеИмяФормы, "ирПортативный") = 0 Тогда - ВызватьИсключение "При запуске сеанса из конфигуратора с текущим свойством конфигурации ""Режим использования модальности"" включается контроль модальности. - |Рекомендуется изменить это свойство конфигурации либо запустить сеанс другим способом."; - КонецЕсли; - - СлужебныеДанные = СлужебныеДанныеФормыЛкс(ЭтаФорма); - СлужебныеДанные.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор); - СлужебныеДанные.Вставить("МенеджерСохраненияНастроек"); - СлужебныеДанные.Вставить("ИмяФормы", ПолноеИмяФормы); - СлужебныеДанные.Вставить("НеготовыеСтраницы", Новый СписокЗначений); - СлужебныеДанные.Вставить("Задания", Новый Структура); - СлужебныеДанные.Вставить("ОригинальныйЗаголовок", ЭтаФорма.Заголовок); - ПодготовитьЭлементыФормыЛкс(ЭтаФорма); - Форма_ВставитьСкрытуюКоманднуюПанельГлобальныхКомандЛкс(ЭтаФорма); - ПерехватКлавиатуры = мПлатформа.ПодключитьПерехватКлавиатуры(); - СлужебныеДанные.Вставить("ПерехватКлавиатуры", ПерехватКлавиатуры); - Если ирКэш.ЛиПортативныйРежимЛкс() Тогда - Контейнер = Новый Структура(); - ирОбщий.ОповеститьФормыПодсистемыЛкс("ирПолучитьБазовуюФорму", Контейнер); // Скорость https://www.hostedredmine.com/issues/891484 - Если Не Контейнер.Свойство("ирПортативный") Тогда - БазоваяФорма = ирПортативный.ПолучитьФорму(); - БазоваяФорма.Открыть(); - КонецЕсли; - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - СтрокаВызова = "ирПортативный.ИнициализироватьФорму_" + ИдентификаторИзПредставленияЛкс(ПолноеИмяФормы) + "(ЭтаФорма)"; - Выполнить(СтрокаВызова); - Иначе - МетаФорма = ирКэш.ОбъектМДПоПолномуИмениЛкс(ПолноеИмяФормы); - Если МетаФорма = Неопределено Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Метаформа не найдена по полному имени %1",, ПолноеИмяФормы), СтатусСообщения.Внимание); - КонецЕсли; - КонецЕсли; - - ФлажокОбъектыНаСервере = ЭтаФорма.ЭлементыФормы.Найти("ОбъектыНаСервере"); - Если ФлажокОбъектыНаСервере <> Неопределено Тогда - #Если Сервер И Не Сервер Тогда - ирПортативный = Обработки.ирПортативный.Создать(); - #КонецЕсли - ФлажокОбъектыНаСервере.Доступность = Не ирКэш.ЛиПортативныйРежимЛкс() Или ирПортативный.ЛиСерверныйМодульДоступенЛкс(); - Если ирКэш.ЛиПортативныйРежимЛкс() Тогда - ФлажокОбъектыНаСервере.Подсказка = "Запись и удаление объектов данных выполнять на сервере. Это снижает скорость, но повышает совместимость с конфигурациями под управляемое приложение."; - Иначе - ФлажокОбъектыНаСервере.Подсказка = "При выполнении кода на клиенте работать с объектами данных на сервере. Это снижает скорость, но повышает совместимость с конфигурациями под управляемое приложение. При выполнении кода на сервере этот параметр не используется."; - КонецЕсли; - КонецЕсли; - Если мПлатформа.мПроверкаСовместимостиКонфигурацииВыполнялась <> Истина Тогда - // Однократно выполняем в сеансе проверку совместимости - - Если Метаданные.ХранилищеОбщихНастроек <> Неопределено Тогда - ИмяПроверочнойНастройки = "Тест"; - СохранитьЗначениеЛкс(ИмяПроверочнойНастройки, 1); - Если ВосстановитьЗначениеЛкс(ИмяПроверочнойНастройки) = Неопределено Тогда - СообщитьЛкс("В конфигурации переопределено хранилище общих настроек и оно не восстанавливает сохраненные значения. Корректная работа подсистемы ""Инструменты разработчика"" невозможна", СтатусСообщения.Важное); - КонецЕсли; - КонецЕсли; - Если Не ЛиСовместимыйЯзыкСистемыЛкс() Тогда - СообщитьЛкс("Язык системы сеанса 1С (параметр /L) не является русским или английским. Корректная работа подсистемы ""Инструменты разработчика"" невозможна", СтатусСообщения.Важное); - КонецЕсли; - - мПлатформа.мПроверкаСовместимостиКонфигурацииВыполнялась = Истина; - #Если Сервер И Не Сервер Тогда - ВыполнитьПроверкуСовместимостиКонфигурацииЛкс(); - #КонецЕсли - ПодключитьГлобальныйОбработчикОжиданияЛкс("ВыполнитьПроверкуСовместимостиКонфигурацииЛкс", 1, Истина); - Если Не ирКэш.ЛиФайловаяБазаЛкс() Тогда - // Запускаем асинхронную подготовку объекта, иначе он при первом выполнении запроса будет подбирать протокол и в случае недоступности TCP будет 6 секунд ждать - // https://forum.mista.ru/topic.php?id=870813 - ПроверитьСоединениеADOЭтойБДЛкс(,,,,, Ложь, Истина, мПлатформа.ПроверочноеСоединениеАДО); - КонецЕсли; - КонецЕсли; - ирКэш.СостояниеПодготовкиКэшМДСеансаЛкс(); - -КонецПроцедуры - -Функция ЛиПровайдерАДОДляЭтойБазыГотовЛкс() Экспорт - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Результат = Истина - И мПлатформа.ПроверочноеСоединениеАДО <> Неопределено - И (Ложь - Или мПлатформа.ПроверочноеСоединениеАДО = "Готов" - Или мПлатформа.ПроверочноеСоединениеАДО.State = 1); - Если Результат Тогда - мПлатформа.ПроверочноеСоединениеАДО = "Готов"; - КонецЕсли; - Возврат Результат; -КонецФункции - -Функция ЛиСовместимыйЯзыкСистемыЛкс() Экспорт - - ТекущийЯзыкСистемы = НРег(ПервыйФрагментЛкс(ТекущийЯзыкСистемы(), "_")); - ЛиСовместимыйЯзыкСистемы = Ложь - Или ТекущийЯзыкСистемы = "ru" - Или ТекущийЯзыкСистемы = "en"; - Возврат ЛиСовместимыйЯзыкСистемы; - -КонецФункции - -Процедура ПодготовитьЭлементыФормыЛкс(ЭтаФорма) Экспорт - - СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - //ОбработчикиПриВыводеСтроки = Новый Соответствие; - //СлужебныеДанныеФормы.Вставить("ОбработчикиПриВыводеСтроки", ОбработчикиПриВыводеСтроки); - КнопкиВсехДействийКомандныхПанелей = Новый Соответствие; - КомандныеПанелиКнопок = Новый Соответствие; - ИмяКнопки = "СтруктураКоманднойПанели"; - ВозможныеИменаРеквизита = Новый Массив; - ВозможныеИменаРеквизита.Добавить("ОбработкаОбъект"); - ВозможныеИменаРеквизита.Добавить("ОсновнойОбъект"); - ОсновнойРеквизит = Неопределено; - ЕстьОбщийОбработчикПриПолученииДанных = Неопределено; - Для Каждого ИмяОсновногоРеквизита Из ВозможныеИменаРеквизита Цикл - Если ЕстьСвойствоОбъектаЛкс(ЭтаФорма, ИмяОсновногоРеквизита) Тогда - ОсновнойРеквизит = ЭтаФорма[ИмяОсновногоРеквизита]; - Прервать; - КонецЕсли; - КонецЦикла; - Для Каждого ЭлементФормы Из ЭтаФорма.ЭлементыФормы Цикл - Если ОсновнойРеквизит <> Неопределено Тогда - Попытка - Данные = ЭлементФормы.Данные; - Подсказка = ЭлементФормы.Подсказка; // У ActiveX этого свойства нет - Исключение - Данные = ""; - КонецПопытки; - Если Не ПустаяСтрока(Данные) И Найти(Данные, ".") = 0 Тогда - Если Не ЗначениеЗаполнено(ЭлементФормы.Подсказка) Тогда - РеквизитОбъекта = ОсновнойРеквизит.Метаданные().Реквизиты.Найти(Данные); - Если РеквизитОбъекта <> Неопределено Тогда - ЭлементФормы.Подсказка = РеквизитОбъекта.Подсказка; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - // Встраиваем кнопки структуры командной панели - КоманднаяПанель = Неопределено; - ВстроитьВНачало = Истина; - Если ТипЗнч(ЭлементФормы) = Тип("КоманднаяПанель") Тогда - КоманднаяПанель = ЭлементФормы; - ВсеКнопки = ВсеКнопкиКоманднойПанелиЛкс(КоманднаяПанель); - Для Каждого Кнопка Из ВсеКнопки Цикл - КомандныеПанелиКнопок[Кнопка] = КоманднаяПанель; - КонецЦикла; - Если Не КоманднаяПанель.Видимость Тогда - Продолжить; - КонецЕсли; - ВстроитьВНачало = КоманднаяПанель.Ширина > 100; - //ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ТабличноеПоле") Тогда - // КоманднаяПанель = ЭлементФормы.КонтекстноеМеню; - Иначе - Попытка - // В контекстных меню функция мало востребована, т.к. они имеют обычно более простую структуру и там сразу виден текст всех кнопок - КоманднаяПанель = ЭлементФормы.КонтекстноеМеню; - ВстроитьВНачало = Ложь; - Исключение - КонецПопытки; - КонецЕсли; - Если Истина - И КоманднаяПанель <> Неопределено - И КоманднаяПанель.Кнопки.Найти(ИмяКнопки) = Неопределено - Тогда - НужноВстроить = Ложь; - КоличествоКнопок = 0; - Для Каждого Кнопка Из КоманднаяПанель.Кнопки Цикл - Если Кнопка.ТипКнопки <> ТипКнопкиКоманднойПанели.Разделитель Тогда - КоличествоКнопок = КоличествоКнопок + 1; - Если КоличествоКнопок > 4 Тогда - НужноВстроить = Истина; - Прервать; - КонецЕсли; - КонецЕсли; - Если Кнопка.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю Тогда - НужноВстроить = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - Если НужноВстроить Тогда - Если ВстроитьВНачало Тогда - КнопкаСтруктураКоманднойПанели = КоманднаяПанель.Кнопки.Вставить(0); - Иначе - КнопкаСтруктураКоманднойПанели = КоманднаяПанель.Кнопки.Добавить(); - КонецЕсли; - КнопкаСтруктураКоманднойПанели.Имя = ИмяКнопки; - КнопкаСтруктураКоманднойПанели.ТипКнопки = ТипКнопкиКоманднойПанели.Действие; - КнопкаСтруктураКоманднойПанели.Картинка = ирКэш.КартинкаПоИмениЛкс("ирКоманднаяПанель"); - КнопкаСтруктураКоманднойПанели.Отображение = ОтображениеКнопкиКоманднойПанели.Авто; - КнопкаСтруктураКоманднойПанели.Текст = "Структура командной панели"; - КнопкаСтруктураКоманднойПанели.Подсказка = "Открыть структуру командной панели. Позволяет искать кнопки по ключевым словам."; - Попытка - КнопкаСтруктураКоманднойПанели.Действие = Новый Действие("СтруктураКоманднойПанелиНажатие"); - Исключение - // В этой форме нет обработчика - КоманднаяПанель.Кнопки.Удалить(КнопкаСтруктураКоманднойПанели); - КонецПопытки; - КнопкиВсехДействийКомандныхПанелей.Вставить(КнопкаСтруктураКоманднойПанели, КоманднаяПанель); - КонецЕсли; - КонецЕсли; - Если ТипЗнч(ЭлементФормы) = Тип("ТабличноеПоле") Тогда - ТабличноеПолеВключитьСтаруюЦветовуюСхемуЛкс(ЭлементФормы); - КонецЕсли; - КонецЦикла; - СлужебныеДанныеФормы.Вставить("КнопкиВсехДействийКомандныхПанелей", КнопкиВсехДействийКомандныхПанелей); - СлужебныеДанныеФормы.Вставить("КомандныеПанелиКнопок", КомандныеПанелиКнопок); - -КонецПроцедуры - -Процедура Форма_ВставитьСкрытуюКоманднуюПанельГлобальныхКомандЛкс(ЭтаФорма) Экспорт - - ЭлементыФормы = ЭтаФорма.ЭлементыФормы; - - //ИмяКоманднойПанели = "КП_ПолеВвода"; - //КонтекстноеМенюФормы = ЭлементыФормы.Найти(ИмяКоманднойПанели); - //Если КонтекстноеМенюФормы = Неопределено Тогда - // КонтекстноеМенюФормы = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"), ИмяКоманднойПанели); - // КонтекстноеМенюФормы.Видимость = Ложь; - //КонецЕсли; - ////лПлатформа = ирКэш.Получить(); - ////МакетФормы = лПлатформа.ПолучитьФорму("УниверсальныеКоманды"); - ////КонтекстноеМенюМакета = МакетФормы.ЭлементыФормы.КоманднаяПанель.Кнопки.ПолеВвода; - ////ДобавитьКнопкиКоманднойПанелиКомпонентыЛкс(МакетФормы, КонтекстноеМенюМакета.Кнопки, КонтекстноеМенюФормы); - //КоманднаяПанельВставитьКнопкиГлобальныхКомандЛкс(КонтекстноеМенюФормы); - //Для Каждого ЭлементФормы Из ЭлементыФормы Цикл - // Если ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда - // Попытка - // КонтекстноеМеню = ЭлементФормы.КонтекстноеМеню; - // Исключение - // // Поле ввода принадлежит не панели, поэтому у него нет свойства - // Продолжить; - // КонецПопытки; - // Если КонтекстноеМеню = Неопределено Тогда - // //ЭлементФормы.АвтоКонтекстноеМеню = Ложь; - // ЭлементФормы.КонтекстноеМеню = КонтекстноеМенюФормы; - // КонецЕсли; - // КонецЕсли; - //КонецЦикла; - - ДействияФормы = ЭлементыФормы.Найти("ДействияФормы"); - Если ТипЗнч(ДействияФормы) <> Тип("КоманднаяПанель") Тогда - ПанельФормы = ЭтаФорма.Панель; - Если ПанельФормы.КонтекстноеМеню = Неопределено Тогда - ДействияФормы = ЭлементыФормы.Добавить(Тип("КоманднаяПанель"), "ДействияФормыАвто", Ложь); - ДействияФормы.ИсточникДействий = ЭтаФорма; - ПанельФормы.КонтекстноеМеню = ДействияФормы; - Иначе - ДействияФормы = ПанельФормы.КонтекстноеМеню; - КонецЕсли; - КоманднаяПанельВставитьКнопкиГлобальныхКомандЛкс(ДействияФормы); - КонецЕсли; - -КонецПроцедуры - -Функция ВсеКнопкиКоманднойПанелиЛкс(КоманднаяПанель, РезультатРекурсия = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - КоманднаяПанель = Новый КоманднаяПанель; - #КонецЕсли - Если РезультатРекурсия = Неопределено Тогда - РезультатРекурсия = Новый Массив; - КонецЕсли; - ФормаКоманд = ирКэш.ФормаОбщихКомандЛкс(); - ОбщиеКоманды = ФормаКоманд.ЭлементыФормы.Команды.Кнопки; - Для Каждого Кнопка Из КоманднаяПанель.Кнопки Цикл - Если Кнопка.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю Тогда - Если Кнопка.Кнопки.Количество() = 0 Тогда - // Динамическое подменю - РезультатРекурсия.Добавить(Кнопка); - КонецЕсли; - ВсеКнопкиКоманднойПанелиЛкс(Кнопка, РезультатРекурсия); - ИначеЕсли Кнопка.ТипКнопки = ТипКнопкиКоманднойПанели.Действие Тогда - Если Найти(Кнопка.Действие, "КлсКомандаНажатие") = 1 Тогда - РезультатРекурсия.Добавить(Кнопка); - КонецЕсли; - Если Ложь - Или Найти(Кнопка.Действие, "КлсКомандаНажатие") = 1 - Или Найти(Кнопка.Действие, "КлсКомандаТаблицаНажатие") = 1 - Тогда - ОбщаяКоманда = ОбщиеКоманды.Найти(Кнопка.Имя); - Если ОбщаяКоманда = Неопределено Тогда - ВызватьИсключение СтрШаблонЛкс("Неизвестное имя общей команды ""%1""", Кнопка.Имя); - КонецЕсли; - ЗаполнитьЗначенияСвойств(Кнопка, ОбщаяКоманда, "СочетаниеКлавиш, Подсказка, Пояснение"); - КонецЕсли; - //Если Истина - // И "" + Кнопка.Действие = "Отбор по значению в текущей колонке" - //Тогда - // Кнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.W, Истина); // ALT+W - ////ИначеЕсли Истина - //// И Кнопка.Имя = "РазличныеЗначенияКолонки" - ////Тогда - //// Кнопка.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.F, Истина); // ALT+F - //КонецЕсли; - КонецЕсли; - КонецЦикла; - Возврат РезультатРекурсия; - -КонецФункции - -// Только для кнопок с обработчиком "КлсКомандаНажатие" -Функция КоманднаяПанельКнопкиЛкс(Знач ЭтаФорма, Знач Кнопка) - мСвойстваФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - Пока ТипЗнч(Кнопка) = Тип("КнопкаКоманднойПанели") Цикл - Кнопка = мСвойстваФормы.КомандныеПанелиКнопок[Кнопка]; - КонецЦикла; - Возврат Кнопка; -КонецФункции - -Процедура ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Знач Кнопка = Неопределено) Экспорт - - Если ТипЗнч(ЭтаФорма) = Тип("Форма") Тогда - мСвойстваФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - КоманднаяПанель = мСвойстваФормы.КнопкиВсехДействийКомандныхПанелей[Кнопка]; - Если Кнопка <> Неопределено Тогда - Если КоманднаяПанель.Кнопки.Индекс(Кнопка) = -1 Тогда - // Для контекстных меню - КоманднаяПанель = КоманднаяПанель.Кнопки[0]; - КонецЕсли; - КонецЕсли; - Иначе - КоманднаяПанель = РодительЭлементаУправляемойФормыЛкс(Кнопка, Тип("ГруппаФормы")); - КонецЕсли; - ФормаСтруктуры = ирКэш.Получить().ПолучитьФорму("СтруктураФормы"); - ФормаСтруктуры.ПараметрЭлементФормы = КоманднаяПанель; - ФормаСтруктуры.Форма = ЭтаФорма; - ФормаСтруктуры.ОткрытьМодально(); - -КонецПроцедуры - -Процедура ОткрытьСтруктуруФормыЛкс(ЭтаФорма, КлючУникальности = Неопределено) Экспорт - - ФормаСтруктуры = ирКэш.Получить().ПолучитьФорму("СтруктураФормы",, КлючУникальности); - ФормаСтруктуры.Форма = ЭтаФорма; - ФормаСтруктуры.ОткрытьМодально(); - -КонецПроцедуры - -Функция ОткрытьФормуСоединенияСУБДЛкс(Автоподключение = Ложь) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ПроверкаСоединенияADOЭтойБДВыполнялась = мПлатформа.мПроверкаСоединенияADOЭтойБДВыполнялась = Истина; - ФормаПодключения = ирКэш.Получить().ПолучитьФорму("ПараметрыСоединенияСУБД"); - ФормаПодключения.Автоподключение = Автоподключение И ПроверкаСоединенияADOЭтойБДВыполнялась; - Если Истина - И (Ложь - Или Не ПроверкаСоединенияADOЭтойБДВыполнялась - Или Не Автоподключение) - И Не ирКэш.ЛиФайловаяБазаЛкс() - Тогда - ФормаЗащиты = Неопределено; - #Если ТолстыйКлиентУправляемоеПриложение Тогда - Если ирКэш.НомерИзданияПлатформыЛкс() > "82" Тогда - // Антибаг платформы https://www.hostedredmine.com/issues/901181 - ФормаЗащиты = ОткрытьФорму("Обработка.ирПлатформа.Форма.Пустышка"); - КонецЕсли; - #КонецЕсли - РезультатФормы = ФормаПодключения.ОткрытьМодально(); - Если ФормаЗащиты <> Неопределено Тогда - ФормаЗащиты.Закрыть(); - КонецЕсли; - Если РезультатФормы <> Истина Тогда - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - Возврат ФормаПодключения; - -КонецФункции - -Функция ОткрытьОбщиеПараметрыЗаписиЛкс(ТолькоОбъектыНаСервере = Ложь) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Форма = мПлатформа.ПолучитьФорму("ПараметрыЗаписиОбъектов"); - Форма.ПараметрТолькоОбъектыНаСервере = ТолькоОбъектыНаСервере; - Форма.ОткрытьМодально(); - -КонецФункции - -Функция ОткрытьСсылкуИТСЛкс(СтрокаЗапуска) Экспорт - - Маркер = "v?doc"; - Если Найти(СтрокаЗапуска, Маркер) > 0 Тогда - ФрагментыМаркера = ирОбщий.СтрРазделитьЛкс(Маркер, "?"); - СисИнфо = Новый СистемнаяИнформация; - ФрагментыВерсии = ирОбщий.СтрРазделитьЛкс(СисИнфо.ВерсияПриложения); - ТекущаяВерсия = ФрагментыВерсии[0] + "." + ФрагментыВерсии[1] + "." + ФрагментыВерсии[2]; - ВыбраннаяВерсия = СтрЗаменить(ТекущаяВерсия, ".", ""); - СтрокаЗапуска = ирОбщий.СтрЗаменитьЛкс(СтрокаЗапуска, Маркер, ФрагментыМаркера[0] + ВыбраннаяВерсия + ФрагментыМаркера[1]); - КонецЕсли; - ЗапуститьПриложение(СтрокаЗапуска); - -КонецФункции - -Процедура УстановитьДоступностьВыполненияНаСервереЛкс(ЭтаФорма, ИмяФлага = "ВыполнятьНаСервере") Экспорт - - ДоступностьРежима = ЛиАсинхронностьДоступнаЛкс(); - Если ЭтаФорма.ЭлементыФормы.Найти(ИмяФлага) <> Неопределено Тогда - Флажок = ЭтаФорма.ЭлементыФормы[ИмяФлага]; - Флажок.Доступность = ДоступностьРежима; - Флажок.Заголовок = "Выполнять на сервере"; - Флажок.Подсказка = "Недоступно в портативном варианте. " + Флажок.Подсказка; - КонецЕсли; - Если Не ДоступностьРежима Тогда - ЭтаФорма.ЭтотОбъект[ИмяФлага] = Ложь; - КонецЕсли; - -КонецПроцедуры - #КонецЕсли Функция ПредставлениеСочетанияКлавишЛкс(СочетаниеКлавиш) Экспорт @@ -33073,6 +19540,16 @@ _РежимОтладки = Ложь; КонецЕсли; КонецФункции +Функция ЛиСовместимыйЯзыкСистемыЛкс() Экспорт + + ТекущийЯзыкСистемы = НРег(ирОбщий.ПервыйФрагментЛкс(ТекущийЯзыкСистемы(), "_")); + ЛиСовместимыйЯзыкСистемы = Ложь + Или ТекущийЯзыкСистемы = "ru" + Или ТекущийЯзыкСистемы = "en"; + Возврат ЛиСовместимыйЯзыкСистемы; + +КонецФункции + Процедура ОчиститьКаталогТехножурналаЛкс(КаталогЖурнала, НаСервере = Ложь, ВыводитьПредупрежденияИСообщения = Истина) Экспорт #Если Клиент Тогда @@ -33660,7 +20137,7 @@ _РежимОтладки = Ложь; Или Не ЛиАсинхронностьДоступнаЛкс() Тогда СостояниеЛкс("Поиск ссылок…"); - ТаблицаСсылок = ирПривилегированный.НайтиПоСсылкамЛкс(СсылкиНа); + ТаблицаСсылок = ирСервер.НайтиПоСсылкамЛкс(СсылкиНа); СостояниеЛкс(""); Результат = Новый Структура; Результат.Вставить("ТаблицаСсылок", ТаблицаСсылок); @@ -33675,7 +20152,8 @@ _РежимОтладки = Ложь; КонецЕсли; КонецЕсли; Иначе - АдресРезультата = ирОбщий.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФорма); + #Если Клиент Тогда + АдресРезультата = ирКлиент.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФорма); ПараметрыЗадания = Новый Массив; ПараметрыЗадания.Добавить(СсылкиНа); ПараметрыЗадания.Добавить(МоментНачала); @@ -33683,9 +20161,10 @@ _РежимОтладки = Ложь; Для Счетчик = 1 По 6 Цикл ПараметрыЗадания.Добавить(Неопределено); // Необязательные параметры КонецЦикла; - Представление = "Ссылки на " + РасширенноеПредставлениеЗначенияЛкс(СсылкиНа); - ОписаниеЗадания = ирОбщий.ОписаниеФоновогоЗаданияФормыЛкс("СсылкиНа", "ирОбщий.НайтиПоСсылкамЛкс", ПараметрыЗадания, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата,, БлокируемыеЭлементыФормы); - ирОбщий.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания, Перезапустить); + Представление = "Ссылки на " + РасширенноеПредставлениеЗначенияЛкс(СсылкиНа); + ОписаниеЗадания = ирКлиент.ОписаниеФоновогоЗаданияФормыЛкс("СсылкиНа", "ирОбщий.НайтиПоСсылкамЛкс", ПараметрыЗадания, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата,, БлокируемыеЭлементыФормы); + ирКлиент.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания, Перезапустить); + #КонецЕсли КонецЕсли; Возврат Результат; КонецФункции @@ -33898,7 +20377,8 @@ _РежимОтладки = Ложь; Результат = Неопределено; КонецЕсли; Иначе - АдресРезультата = ирОбщий.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФорма); + #Если Клиент Тогда + АдресРезультата = ирКлиент.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФорма); ПараметрыЗадания = Новый Массив; ПараметрыЗадания.Добавить(БазыДанных); ПараметрыЗадания.Добавить(СтруктураОтбора); @@ -33908,9 +20388,10 @@ _РежимОтладки = Ложь; #Если Сервер И Не Сервер Тогда ирСервер.ВыполнитьЗапросСтатистикиПоТаблицамЛкс(); #КонецЕсли - ОписаниеЗадания = ирОбщий.ОписаниеФоновогоЗаданияФормыЛкс("Выгрузка", "ирСервер.ВыполнитьЗапросСтатистикиПоТаблицамЛкс", ПараметрыЗадания, Представление, Кнопка, ОбработчикЗавершения, + ОписаниеЗадания = ирКлиент.ОписаниеФоновогоЗаданияФормыЛкс("Выгрузка", "ирСервер.ВыполнитьЗапросСтатистикиПоТаблицамЛкс", ПараметрыЗадания, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата); - ирОбщий.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания, Перезапустить); + ирКлиент.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания, Перезапустить); + #КонецЕсли КонецЕсли; Иначе Результат = Новый Массив(); @@ -34038,8 +20519,9 @@ _РежимОтладки = Ложь; РезультатЗадания = Неопределено; КонецЕсли; Иначе + #Если Клиент Тогда МоментНачала = ТекущаяДата(); - АдресРезультата = ирОбщий.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФорма); + АдресРезультата = ирКлиент.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФорма); ПараметрыЗадания.Добавить(АдресРезультата); ПараметрыЗадания.Добавить(МоментНачала); Для Счетчик = 1 По 1 Цикл @@ -34049,9 +20531,10 @@ _РежимОтладки = Ложь; #Если Сервер И Не Сервер Тогда ирСервер.ВыполнитьЗапросЛкс(); #КонецЕсли - ОписаниеЗадания = ирОбщий.ОписаниеФоновогоЗаданияФормыЛкс("ВыполнениеЗапроса", "ирСервер.ВыполнитьЗапросЛкс", ПараметрыЗадания, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата,, + ОписаниеЗадания = ирКлиент.ОписаниеФоновогоЗаданияФормыЛкс("ВыполнениеЗапроса", "ирСервер.ВыполнитьЗапросЛкс", ПараметрыЗадания, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата,, БлокируемыеЭлементыФормы); - ирОбщий.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания, Перезапустить); + ирКлиент.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания, Перезапустить); + #КонецЕсли КонецЕсли; Возврат РезультатЗадания; КонецФункции @@ -34084,9 +20567,10 @@ _РежимОтладки = Ложь; КонецЕсли; КонецЕсли; Иначе + #Если Клиент Тогда Представление = Команда; ИмяЗадания = "ОбработкаРегистров"; - АдресРезультата = ирОбщий.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФорма); + АдресРезультата = ирКлиент.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФорма); ПараметрыЗадания = Новый Массив; ПараметрыЗадания.Добавить(ОбщиеПараметрыОбработки); ПараметрыЗадания.Добавить(МоментНачала); @@ -34098,10 +20582,11 @@ _РежимОтладки = Ложь; ПараметрыЗадания.Добавить(Неопределено); // Необязательные параметры КонецЦикла; //ДобавитьПереданныйКэшВСтруктуруЛкс(ОбщиеПараметрыОбработки); - ОписаниеЗадания = ирОбщий.ОписаниеФоновогоЗаданияФормыЛкс(ИмяЗадания, "ирОбщий.УправлениеИтогамиРегистров_ВыполнитьКомандуЛкс", ПараметрыЗадания, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата,, + ОписаниеЗадания = ирКлиент.ОписаниеФоновогоЗаданияФормыЛкс(ИмяЗадания, "ирОбщий.УправлениеИтогамиРегистров_ВыполнитьКомандуЛкс", ПараметрыЗадания, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата,, БлокируемыеЭлементы); - ирОбщий.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания); + ирКлиент.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания); Результат = Неопределено; + #КонецЕсли КонецЕсли; Возврат Результат; КонецФункции @@ -34187,6 +20672,7 @@ _РежимОтладки = Ложь; КонецЕсли; КонецЕсли; Иначе + #Если Клиент Тогда //Если МетодРеализованЛкс(ЭтаФорма, "РеквизитыОбработки") Тогда РеквизитыДляСервера = ЭтаФормаИлиОбработка.РеквизитыДляСервера(ПараметрыЗадания); //КонецЕсли; @@ -34210,7 +20696,7 @@ _РежимОтладки = Ложь; ПараметрыЗадания.Вставить(ИмяСвойстваКэш, Новый Структура("ТаблицаВсехТаблицБД", ТаблицаВсехТаблицБД)); КонецЕсли; КонецЕсли; - АдресРезультата = ирОбщий.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФормаИлиОбработка); + АдресРезультата = ирКлиент.НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(ЭтаФормаИлиОбработка); ПолноеИмяОбъекта = ЭтаФормаИлиОбработка.Метаданные().ПолноеИмя(); ПараметрыЗадания.Вставить(ИмяСвойстваРеквизитыДляСервера, РеквизитыДляСервера); ПараметрыЗадания.Вставить(ИмяСвойстваАдресРезультата, АдресРезультата); @@ -34230,9 +20716,14 @@ _РежимОтладки = Ложь; Если Не ЗначениеЗаполнено(ИмяЗадания) Тогда ИмяЗадания = ИмяМетодаОбработки; КонецЕсли; - ОписаниеЗадания = ирОбщий.ОписаниеФоновогоЗаданияФормыЛкс(ИмяЗадания, ПолноеИмяЭтогоМетода, ПараметрыФоновогоЗадания, ПредставлениеЗадания, Кнопка, ОбработчикЗавершения, АдресРезультата,, + ОписаниеЗадания = ирКлиент.ОписаниеФоновогоЗаданияФормыЛкс(ИмяЗадания, ПолноеИмяЭтогоМетода, ПараметрыФоновогоЗадания, ПредставлениеЗадания, Кнопка, ОбработчикЗавершения, АдресРезультата,, БлокируемыеЭлементыФормы, Многопоточное, ПрефиксыОповещений, ПоддерживаетПрерывание); - Результат = ирОбщий.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФормаИлиОбработка, ОписаниеЗадания, Перезапустить); + ОшибкаСериализации = Ложь; + Результат = ирКлиент.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФормаИлиОбработка, ОписаниеЗадания, Перезапустить, ОшибкаСериализации); + Если ОшибкаСериализации Тогда + Результат = ВыполнитьЗаданиеФормыЛкс(ИмяМетодаОбработки, ПараметрыЗадания, ЭтаФормаИлиОбработка,,,, ОбработчикЗавершения, "ВЭтомСеансе"); + КонецЕсли; + #КонецЕсли КонецЕсли; Возврат Результат; @@ -34275,106 +20766,6 @@ _РежимОтладки = Ложь; ///////////////////////////////////// - -Процедура НастроитьЗаголовкиАвтоТабличногоПоляДинамическогоСпискаЛкс(Знач ОсновнойЭУ, Знач РежимИмяСиноним) Экспорт - - ОбъектМД = Метаданные.НайтиПоТипу(ТипЗнч(ОсновнойЭУ.Значение)); - ПоляТаблицы = ПоляТаблицыМДЛкс(ОбъектМД.ПолноеИмя()); - Для Каждого ПолеТаблицы Из ПоляТаблицы Цикл - КолонкаТП = ОсновнойЭУ.Колонки.Найти(ПолеТаблицы.Имя); - Если КолонкаТП = Неопределено Тогда - Продолжить; - КонецЕсли; - Попытка - Подсказка = ПолеТаблицы.Метаданные.Подсказка; - Исключение - Подсказка = ""; - КонецПопытки; - Если РежимИмяСиноним Тогда - Заголовок = ПолеТаблицы.Имя; - Иначе - Заголовок = ПолеТаблицы.Заголовок; - КонецЕсли; - КолонкаТП.ТекстШапки = Заголовок; - КолонкаТП.ПодсказкаВШапке = Подсказка; - ДобавитьОписаниеТиповВПодсказкуШапкиКолонкиЛкс(КолонкаТП, ПолеТаблицы.ТипЗначения, ПолеТаблицы.Метаданные); - Если ЛиОписаниеТиповБулевоЛкс(ПолеТаблицы.ТипЗначения) Тогда - КолонкаТП.ДанныеФлажка = ""; - КолонкаТП.КартинкиСтрок = ирКэш.КартинкаПоИмениЛкс("ирСостоянияФлажка"); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Процедура НастроитьЗаголовкиАвтоТаблицыФормыДинамическогоСпискаЛкс(Знач ОсновнойЭУ, Знач ПолноеИмяТаблицы, Знач РежимИмяСиноним, Знач ПоляБезОбрезкиЗаголовков = Неопределено) Экспорт - - ПоляТаблицы = ирОбщий.ПоляТаблицыМДЛкс(ПолноеИмяТаблицы); - ПоляТаблицы = ПоляТаблицы.Скопировать(); - СтрокаПоляИденитификатора = ПоляТаблицы.Добавить(); - СтрокаПоляИденитификатора.Имя = "ИдентификаторСсылкиЛкс"; - СтрокаПоляИденитификатора.Заголовок = "Идентификатор ссылки"; - СтрокаПоляИденитификатора.ТипЗначения = Новый ОписаниеТипов; - Для Каждого ПолеТаблицы Из ПоляТаблицы Цикл - КолонкаТП = ОсновнойЭУ.ПодчиненныеЭлементы.Найти(ОсновнойЭУ.Имя + ПолеТаблицы.Имя); - Если КолонкаТП = Неопределено Тогда - Продолжить; - КонецЕсли; - Попытка - Подсказка = ПолеТаблицы.Метаданные.Подсказка; - Исключение - Подсказка = ""; - КонецПопытки; - РазрешитьОбрезку = Истина; - Если ПоляБезОбрезкиЗаголовков <> Неопределено Тогда - РазрешитьОбрезку = ПоляБезОбрезкиЗаголовков.Найти(ПолеТаблицы.Имя) = Неопределено; - КонецЕсли; - Заголовок = ЗаголовокПоляТаблицыФормыЛкс(ОсновнойЭУ, ПолеТаблицы, РежимИмяСиноним, Подсказка, РазрешитьОбрезку); - КолонкаТП.Заголовок = Заголовок; - КолонкаТП.Подсказка = Подсказка; - ДобавитьОписаниеТиповВПодсказкуШапкиКолонкиЛкс(КолонкаТП, ПолеТаблицы.ТипЗначения, ПолеТаблицы.Метаданные); - КонецЦикла; - -КонецПроцедуры - -Функция ЗаголовокПоляТаблицыФормыЛкс(Знач ОсновнойЭУ, Знач ПолеТаблицыБД, Знач РежимИмяСиноним, Подсказка = "", Знач РазрешитьОбрезку = Истина) Экспорт - - Если РежимИмяСиноним Тогда - Заголовок = ПолеТаблицыБД.Имя; - Иначе - Заголовок = ПолеТаблицыБД.Заголовок; - КонецЕсли; - МаркерТипаЗначения = "_ТипЗначения_"; - Если Истина - //И Не ЗначениеЗаполнено(ЗаголовокПоля) - И ирОбщий.СтрКончаетсяНаЛкс(ПолеТаблицыБД.Имя, МаркерТипаЗначения) - Тогда - Заголовок = ирОбщий.ПредставлениеИзИдентификатораЛкс(ирОбщий.СтрокаБезПоследнегоФрагментаЛкс(ПолеТаблицыБД.Имя, МаркерТипаЗначения)) + " (тип)"; - КонецЕсли; - Если Не ЗначениеЗаполнено(Подсказка) Тогда - Подсказка = Заголовок; - КонецЕсли; - ТекущийЗаголовок = ""; - Если РазрешитьОбрезку И ирОбщий.ЛиОписаниеТиповБулевоЛкс(ПолеТаблицыБД.ТипЗначения) Тогда - ТекущийЗаголовок = Лев(Заголовок, 5) + "…"; - Иначе - НомерСтрокиЗаголовка = 1; - СловаЗаголовка = ирОбщий.СтрРазделитьЛкс(Заголовок, " "); - Для Каждого СловоЗаголовка Из СловаЗаголовка Цикл - Если Истина - И ЗначениеЗаполнено(ТекущийЗаголовок) - И СтрДлина(ТекущийЗаголовок) + СтрДлина(СловоЗаголовка) - НомерСтрокиЗаголовка > НомерСтрокиЗаголовка*СтрДлина(Заголовок)/ОсновнойЭУ.ВысотаШапки - Тогда - НомерСтрокиЗаголовка = НомерСтрокиЗаголовка + 1; - ТекущийЗаголовок = ТекущийЗаголовок + Символы.ПС; // Для сокращения результирующей ширины колонки - КонецЕсли; - ТекущийЗаголовок = ТекущийЗаголовок + СловоЗаголовка + " "; - КонецЦикла; - КонецЕсли; - Заголовок = ТекущийЗаголовок; - Возврат Заголовок; - -КонецФункции - // Функция - Колонки таблицы БДСПроверками лкс // // Параметры: @@ -35106,6 +21497,248 @@ _РежимОтладки = Ложь; КонецПроцедуры +// +// Параметры: +// Таблица - ТаблицаЗначений - может быть модифицирована здесь, поэтому нужно передавать копию, если нужна неизменность +Функция ВывестиТаблицуВТабличныйДокументИлиТаблицуЗначенийЛкс(ТаблицаЗначений, Знач Приемник = Неопределено, ДанныеРасшифровки = Неопределено, ИтогиЧисловыхКолонок = Истина, + АвтофиксацияШапки = Истина, ВстроитьЗначенияВРасшифровки = Истина, ОтображатьПустые = Ложь, ДобавлятьКолонкиИдентификаторов = Ложь, ДобавлятьКолонкиТипов = Ложь, + ДобавлятьКолонкиПредставлений = Истина, Знач ВыбранныеКолонки = Неопределено, ИмяТекущейКолонки = "", ВыводВТаблицуЗначений = Ложь, Отладка = Ложь, ДобавлятьКолонкиРазмеров = Ложь, + СузитьТипы = Ложь, Иерархия = Ложь) Экспорт + + ТребоватьТипЛкс(ТаблицаЗначений,, Тип("ТаблицаЗначений")); + ирПлатформа = ирКэш.Получить(); + Если ДобавлятьКолонкиТипов Или ДобавлятьКолонкиИдентификаторов Тогда + //ТаблицаЗначений = ТаблицаСКолонкамиБезТипаNullЛкс(ТаблицаЗначений); + ТаблицаЗначений = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначений); + КонецЕсли; + #Если Сервер И Не Сервер Тогда + ирПлатформа = Обработки.ирПлатформа.Создать(); + ТаблицаЗначений = Новый ТаблицаЗначений; + #КонецЕсли + ВнешниеНаборыДанных = Новый Структура("Основной", ТаблицаЗначений); + НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; + КолонкиИдентификаторов = Новый Массив; + КолонкиТипов = Новый Массив; + КолонкиРазмеров = Новый Массив; + Если ВыбранныеКолонки = Неопределено Тогда + ВыбранныеКолонки = Новый Массив; + Для Каждого Колонка Из КолонкиИсточникаДанныхЛкс(ТаблицаЗначений) Цикл + ВыбранныеКолонки.Добавить(Колонка.Имя); + КонецЦикла; + КонецЕсли; + ИменаТипов = Новый Структура; + ПозицииКолонок = Новый Структура; + ИндексТекущейКолонки = 0; + ОформлениеКолонокИдентификаторов = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); + ОформлениеКолонокИдентификаторов.Оформление.УстановитьЗначениеПараметра("МаксимальнаяШирина", 2); + ОформлениеКолонокИдентификаторов.Оформление.УстановитьЗначениеПараметра("Размещение", ТипРазмещенияТекстаКомпоновкиДанных.Обрезать); + Для Каждого ВыбраннаяКолонка Из ВыбранныеКолонки Цикл + Если Не ЗначениеЗаполнено(ВыбраннаяКолонка) Тогда + Продолжить; + КонецЕсли; + ИмяКолонки = СтрЗаменить(ВыбраннаяКолонка, ".", "_"); + Колонка = ТаблицаЗначений.Колонки.Найти(ИмяКолонки); + Если Колонка = Неопределено Тогда + // Например "ИдентификаторСсылкиЛкс" в таблице формы + Продолжить; + КонецЕсли; + ТипЗначения = Колонка.ТипЗначения; + ТипыКолонки = ТипЗначения.Типы(); + ЛиТипПростойСтроковый = ЛиОписаниеТиповПростогоСтроковогоТипаЛкс(ТипЗначения); + ПозицииКолонок.Вставить(Колонка.Имя, НастройкаКомпоновки.Выбор.Элементы.Количество()); + Если ДобавлятьКолонкиПредставлений Или ЛиТипПростойСтроковый Тогда + НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ВыбраннаяКолонка); + КонецЕсли; + Если Ложь + Или ОтображатьПустые + Или (Истина + И ДобавлятьКолонкиТипов + И ТипыКолонки.Количество() > 1) + Тогда + КолонкиТипов.Добавить(Колонка.Имя); + ТаблицаЗначений.Колонки.Вставить(ТаблицаЗначений.Колонки.Индекс(Колонка) + 1, ИмяКолонки + "_ИмяТипаЗначения_", Новый ОписаниеТипов("Строка"), + Колонка.Заголовок + " (тип)"); + Если ДобавлятьКолонкиТипов Тогда + НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ИмяКолонки + "_ИмяТипаЗначения_"); + КонецЕсли; + ИменаТиповКолонки = Новый Соответствие; + Для Каждого Тип Из ТипыКолонки Цикл + ИменаТиповКолонки.Вставить(Тип, ПредставлениеТипаЛкс(Тип, ТипЗначения, Истина)); + КонецЦикла; + ИменаТипов.Вставить(Колонка.Имя, ИменаТиповКолонки); + КонецЕсли; + Если ДобавлятьКолонкиИдентификаторов Тогда + //ЕстьСсылочныйТип = ТипыКолонки.Количество() = 0; + //Если Не ЕстьСсылочныйТип Тогда + // Для Каждого Тип Из ТипыКолонки Цикл + // Если ЛиТипСсылкиБДЛкс(Тип, Ложь) Тогда + // ЕстьСсылочныйТип = Истина; + // Прервать; + // КонецЕсли; + // КонецЦикла; + //КонецЕсли; + Если Ложь + //Или ЕстьСсылочныйТип + Или Не (ЛиТипПростойСтроковый) + Тогда + Если ИндексТекущейКолонки = 0 И ЗначениеЗаполнено(ИмяТекущейКолонки) И СтрокиРавныЛкс(ВыбраннаяКолонка, ИмяТекущейКолонки) Тогда + ИндексТекущейКолонки = НастройкаКомпоновки.Выбор.Элементы.Количество(); + КонецЕсли; + КолонкиИдентификаторов.Добавить(Колонка.Имя); + ИмяКолонкиИдентификатора = ИмяКолонки + "_ИдентификаторЗначения_"; + ТаблицаЗначений.Колонки.Вставить(ТаблицаЗначений.Колонки.Индекс(Колонка) + 1, ИмяКолонкиИдентификатора, Новый ОписаниеТипов("Строка"), + Колонка.Заголовок + " (идентификатор)"); + НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ИмяКолонкиИдентификатора); + Если ДобавлятьКолонкиПредставлений Тогда + НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(ОформлениеКолонокИдентификаторов.Поля, ИмяКолонкиИдентификатора); + КонецЕсли; + КонецЕсли; + КонецЕсли; + Если ДобавлятьКолонкиРазмеров Тогда + Если Ложь + Или ТипЗначения.СодержитТип(Тип("ХранилищеЗначения")) + Или (Истина + И ТипЗначения.СодержитТип(Тип("Строка")) + И ТипЗначения.КвалификаторыСтроки.ДопустимаяДлина = 0) + Тогда + Если ИндексТекущейКолонки = 0 И ЗначениеЗаполнено(ИмяТекущейКолонки) И СтрокиРавныЛкс(ВыбраннаяКолонка, ИмяТекущейКолонки) Тогда + ИндексТекущейКолонки = НастройкаКомпоновки.Выбор.Элементы.Количество(); + КонецЕсли; + КолонкиРазмеров.Добавить(Колонка.Имя); + ТаблицаЗначений.Колонки.Вставить(ТаблицаЗначений.Колонки.Индекс(Колонка) + 1, ИмяКолонки + "_РазмерЗначения_", Новый ОписаниеТипов("Число"), + Колонка.Заголовок + " (размер)"); + НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ИмяКолонки + "_РазмерЗначения_"); + КонецЕсли; + КонецЕсли; + Если ОтображатьПустые Тогда + ПустыеЗначения = Новый Массив; + ПустыеЗначения.Добавить(Неопределено); + ПустыеЗначения.Добавить(0); + ПустыеЗначения.Добавить(Дата(1,1,1)); + ПустыеЗначения.Добавить(Ложь); + ПустыеЗначения.Добавить(""); + Для Каждого ПустоеЗначение Из ПустыеЗначения Цикл + Если Ложь + Или ТипЗначения.Типы().Количество() = 0 + Или ТипЗначения.СодержитТип(ТипЗнч(ПустоеЗначение)) + Тогда + ЭлементУсловногоОформления = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ПустоеЗначение)); + //ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветФонаПустогоЗначенияЛкс()); + НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементУсловногоОформления.Отбор, ВыбраннаяКолонка, , ВидСравненияКомпоновкиДанных.НеЗаполнено); + НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементУсловногоОформления.Отбор, ВыбраннаяКолонка, ПустоеЗначение, ВидСравненияКомпоновкиДанных.Равно); + ПолеЭлементаОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеЭлементаОформления.Поле = Новый ПолеКомпоновкиДанных(ВыбраннаяКолонка); + КонецЕсли; + КонецЦикла; + // Отдельно для особенного Null + ПустоеЗначение = Null; + Если Истина + И ТипЗначения.Типы().Количество() > 0 + И ТипЗначения.СодержитТип(ТипЗнч(ПустоеЗначение)) + Тогда + ЭлементУсловногоОформления = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", ирПлатформа.ПредставлениеПустогоЗначенияЛкс(ПустоеЗначение)); + //ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветФонаПустогоЗначенияЛкс()); + НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементУсловногоОформления.Отбор, ИмяКолонки + "_ИмяТипаЗначения_", "Null", ВидСравненияКомпоновкиДанных.Равно); + ПолеЭлементаОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеЭлементаОформления.Поле = Новый ПолеКомпоновкиДанных(ВыбраннаяКолонка); + КонецЕсли; + Иначе + // Значение "Ложь" выводим в виде пустой строки + ПустоеЗначение = Ложь; + Если Ложь + Или ТипЗначения.Типы().Количество() = 1 + Или ТипЗначения.СодержитТип(ТипЗнч(ПустоеЗначение)) + Тогда + ЭлементУсловногоОформления = НастройкаКомпоновки.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", ""); + НайтиДобавитьЭлементОтбораКомпоновкиЛкс(ЭлементУсловногоОформления.Отбор, ВыбраннаяКолонка, ПустоеЗначение, ВидСравненияКомпоновкиДанных.Равно); + ПолеЭлементаОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеЭлементаОформления.Поле = Новый ПолеКомпоновкиДанных(ВыбраннаяКолонка); + КонецЕсли; + КонецЕсли; + КонецЦикла; + ОформлениеКолонокИдентификаторов.Использование = ОформлениеКолонокИдентификаторов.Поля.Элементы.Количество() > 0; + Если Ложь + Или КолонкиТипов.Количество() > 0 + Или КолонкиИдентификаторов.Количество() > 0 + Или КолонкиРазмеров.Количество() > 0 + Тогда + Индикатор = ПолучитьИндикаторПроцессаЛкс(ТаблицаЗначений.Количество(), "Заполнение доп. колонок"); + Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл + ОбработатьИндикаторЛкс(Индикатор); // добавляет значительную долю длительности цикла + Если ирКэш.РежимОтладкиЛкс() Тогда + // Пассивный оригинал расположенного ниже однострочного кода. Выполняйте изменения синхронно в обоих вариантах. + Для Каждого ИмяКолонки Из КолонкиТипов Цикл + Если Ложь + Или ДобавлятьКолонкиТипов + Или СтрокаТаблицы[ИмяКолонки] = Null + Тогда + СтрокаТаблицы[ИмяКолонки + "_ИмяТипаЗначения_"] = ИменаТипов[ИмяКолонки][ТипЗнч(СтрокаТаблицы[ИмяКолонки])]; + КонецЕсли; + КонецЦикла; + Если ДобавлятьКолонкиИдентификаторов Тогда + Для Каждого ИмяКолонки Из КолонкиИдентификаторов Цикл + СтрокаТаблицы[ИмяКолонки + "_ИдентификаторЗначения_"] = СтроковыйИдентификаторЗначенияЛкс(СтрокаТаблицы[ИмяКолонки]); + КонецЦикла; + КонецЕсли; + Если ДобавлятьКолонкиРазмеров Тогда + Для Каждого ИмяКолонки Из КолонкиРазмеров Цикл + СтрокаТаблицы[ИмяКолонки + "_РазмерЗначения_"] = РазмерЗначенияЛкс(СтрокаТаблицы[ИмяКолонки]); + КонецЦикла; + КонецЕсли; + Иначе + // Однострочный код использован для ускорения. Выше расположен оригинал. Выполняйте изменения синхронно в обоих вариантах. Преобразовано консолью кода из подсистемы "Инструменты разработчика" (http://devtool1c.ucoz.ru) + Для Каждого ИмяКолонки Из КолонкиТипов Цикл   Если Ложь   Или ДобавлятьКолонкиТипов   Или СтрокаТаблицы[ИмяКолонки] = Null   Тогда   СтрокаТаблицы[ИмяКолонки + "_ИмяТипаЗначения_"] = ИменаТипов[ИмяКолонки][ТипЗнч(СтрокаТаблицы[ИмяКолонки])];   КонецЕсли;   КонецЦикла;   Если ДобавлятьКолонкиИдентификаторов Тогда   Для Каждого ИмяКолонки Из КолонкиИдентификаторов Цикл   СтрокаТаблицы[ИмяКолонки + "_ИдентификаторЗначения_"] = СтроковыйИдентификаторЗначенияЛкс(СтрокаТаблицы[ИмяКолонки]);   КонецЦикла;   КонецЕсли;   Если ДобавлятьКолонкиРазмеров Тогда   Для Каждого ИмяКолонки Из КолонкиРазмеров Цикл   СтрокаТаблицы[ИмяКолонки + "_РазмерЗначения_"] = РазмерЗначенияЛкс(СтрокаТаблицы[ИмяКолонки]);   КонецЦикла;   КонецЕсли;   + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если НастройкаКомпоновки.Структура.Количество() = 0 Тогда + НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(НастройкаКомпоновки.Структура); + КонецЕсли; + СхемаКомпоновки = СоздатьСхемуПоТаблицамЗначенийЛкс(ВнешниеНаборыДанных, , , ИтогиЧисловыхКолонок); + #Если Сервер И Не Сервер Тогда + СхемаКомпоновки = Новый СхемаКомпоновкиДанных; + #КонецЕсли + Если Иерархия Тогда + СвязьНаборов = СхемаКомпоновки.СвязиНаборовДанных.Добавить(); + СвязьНаборов.НаборДанныхИсточник = СхемаКомпоновки.НаборыДанных[0].Имя; + СвязьНаборов.НаборДанныхПриемник = СхемаКомпоновки.НаборыДанных[0].Имя; + СвязьНаборов.ВыражениеИсточник = "_ИДВетки"; + СвязьНаборов.ВыражениеПриемник = "_ИДВеткиРодителя"; + СвязьНаборов.НачальноеВыражение = "Неопределено"; // вычисляемое значение + КонецЕсли; + Если Отладка Тогда + ОтладитьЛкс(СхемаКомпоновки, , НастройкаКомпоновки, ВнешниеНаборыДанных); + Возврат Неопределено; + КонецЕсли; + Если ВыводВТаблицуЗначений Тогда + Приемник = СкомпоноватьВКоллекциюЗначенийПоСхемеЛкс(СхемаКомпоновки, НастройкаКомпоновки, Приемник, ВнешниеНаборыДанных,,,,,,, СузитьТипы); + //Приемник = ТаблицаЗначений.Скопировать(, "…"); + Иначе + Приемник = СкомпоноватьВТабличныйДокументЛкс(СхемаКомпоновки, НастройкаКомпоновки, Приемник, ВнешниеНаборыДанных, ДанныеРасшифровки, АвтофиксацияШапки,, ВстроитьЗначенияВРасшифровки); + #Если Сервер И Не Сервер Тогда + Приемник = Новый ТабличныйДокумент; + #КонецЕсли + Если ЗначениеЗаполнено(ИмяТекущейКолонки) И ВыбранныеКолонки.Найти(ИмяТекущейКолонки) <> Неопределено Тогда + Приемник.ТекущаяОбласть = Приемник.Область(2, ПозицииКолонок[ИмяТекущейКолонки] + 1); + КонецЕсли; + Для Счетчик = 1 По ВыбранныеКолонки.Количество() Цикл + ИмяКолонки = ВыбранныеКолонки[Счетчик - 1]; + Если Не ЗначениеЗаполнено(ИмяКолонки) Тогда + Продолжить; + КонецЕсли; + Колонка = ТаблицаЗначений.Колонки.Найти(ИмяКолонки); + Если Колонка <> Неопределено Тогда + Приемник.Область(1, ПозицииКолонок[ИмяКолонки] + 1).Примечание.Текст = "Типы значений: " + РасширенноеПредставлениеЗначенияЛкс(Колонка.ТипЗначения); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Возврат Приемник; + +КонецФункции + // Для табличного поля может вернуть полное имя МД табличной части обработки! // Поэтому вместо это функции рекомендуется вызов ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ИмяТаблицыБД) = "Список" Функция ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле, выхПолноеИмяМД = "") Экспорт @@ -35123,19 +21756,19 @@ _РежимОтладки = Ложь; Тогда СлужебныеДанные.ДинамическиеСписки.Свойство(ПутьКДаннымСписка, ДинамическийСписок); КонецЕсли; - Если ДинамическийСписок <> Неопределено Тогда + Если ТипЗнч(ДинамическийСписок) = Тип("ДинамическийСписок") Тогда ПолноеИмяТаблицы = ДинамическийСписок.ОсновнаяТаблица; Иначе Если ЗначениеЗаполнено(ПутьКДаннымСписка) Тогда ДинамическийСписок = Вычислить("ЭтаФорма." + ПутьКДаннымСписка); - КонецЕсли; + КонецЕсли; ТекущаяСтрока = ТабличноеПоле.ТекущаяСтрока; ТипЗначенияСтроки = Неопределено; Если Ложь Или ТекущаяСтрока = Неопределено Или ТипЗнч(ТекущаяСтрока) = Тип("Число") // Основная таблица не указана Тогда - Если ДинамическийСписок <> Неопределено Тогда + Если ТипЗнч(ДинамическийСписок) = Тип("ДинамическийСписок") Тогда КомпоновщикНастроек = ДинамическийСписок.КомпоновщикНастроек; #Если Сервер И Не Сервер Тогда КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; @@ -35213,7 +21846,7 @@ _РежимОтладки = Ложь; НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, ДобавитьВыбранноеПоле); КонецЕсли; Если НастройкаКомпоновки.Выбор.Элементы.Количество() = 0 Тогда - ВыбратьВсеДоступныеПоляКомпоновки(Схема, НастройкаКомпоновки); // Опасно + ДобавитьВсеДоступныеПоляКомпоновкиВВыбранныеЛкс(Схема, НастройкаКомпоновки); // Опасно КонецЕсли; Если Не СПредставлениямиСсылок Тогда Для Каждого ВыбранноеПоле Из ВсеВыбранныеПоляГруппировкиКомпоновкиЛкс(НастройкаКомпоновки.Выбор, Истина) Цикл @@ -35287,6 +21920,21 @@ _РежимОтладки = Ложь; КонецФункции +Функция ТекстОтбораЗапросаКомпоновкиЛкс(ТекстЗапросаСОтбором, ПсевдонимТаблицыПередГДЕ = "Т") Экспорт + + ВычислительРегВыражений = ирКэш.ВычислительРегВыраженийЛкс(); + ВычислительРегВыражений.Multiline = Ложь; + ВычислительРегВыражений.Pattern = "(?:AS|КАК)\s+" + ПсевдонимТаблицыПередГДЕ + "\s+(?:ГДЕ|WHERE)((?:.|\n|\r)+)"; + Найденные = ВычислительРегВыражений.НайтиВхождения(ТекстЗапросаСОтбором); + Если Найденные.Количество() > 0 Тогда + ТекстОтбора = Найденные[0].Submatches(0); + Иначе + ТекстОтбора = " ИСТИНА "; + КонецЕсли; + Возврат ТекстОтбора; + +КонецФункции + Функция ЗапросОтбораПоТаблицеКлючейЛкс(Запрос, Знач СтруктураКлюча, Знач ТолькоСуммируемыеКолонки = Ложь) Экспорт #Если Сервер И Не Сервер Тогда @@ -35905,86 +22553,6 @@ _РежимОтладки = Ложь; КонецФункции -// Параметры: -// ЭтаФорма - Форма -// ТабличноеПоле - ТабличноеПоле -// КлючевоеПоле - Строка -// ЗначениеКлюча - -// СообщатьОбУспехе - Булево -// -Функция УстановитьТекущуюСтрокуСКонтролемУспешностиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач КлючевоеПоле = "Ссылка", Знач ЗначениеКлюча = Неопределено, Знач СообщатьОбУспехе = Ложь, - АктивизироватьТабличноеПолеПриУспехе = Ложь, ВыводитьСообщения = Истина) Экспорт - - ПолноеИмяТаблицыБД = ""; - ДанныеТабличногоПоля = Неопределено; - ТипИсточника = ОбщийТипДанныхТабличногоПоляЛкс(ТабличноеПоле,,, ПолноеИмяТаблицыБД, ДанныеТабличногоПоля); - Если Ложь - Или ТипИсточника = "ТаблицаЗначений" - Или ТипИсточника = "ТабличнаяЧасть" - Или ТипИсточника = "НаборЗаписей" - Тогда - ДанныеТабличногоПоля = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - #Если Сервер И Не Сервер Тогда - ДанныеТабличногоПоля = Новый ТаблицаЗначений; - #КонецЕсли - Если КлючевоеПоле <> Неопределено Тогда - НайденныеСтроки = ДанныеТабличногоПоля.НайтиСтроки(Новый Структура(КлючевоеПоле, ЗначениеКлюча)); - Иначе - НайденныеСтроки = ДанныеТабличногоПоля; - КонецЕсли; - Если НайденныеСтроки.Количество() > 0 Тогда - НайденнаяСтрока = НайденныеСтроки[0]; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - НайденнаяСтрока = НайденнаяСтрока.ПолучитьИдентификатор(); - КонецЕсли; - КонецЕсли; - ЭтоКлиентскийИсточникДанных = Истина; - ИначеЕсли ТипИсточника = "ДеревоЗначений" Тогда - НайденнаяСтрока = ТабличноеПоле.Значение.Строки.Найти(ЗначениеКлюча, КлючевоеПоле, Истина); - ЭтоКлиентскийИсточникДанных = Истина; - Иначе - НайденнаяСтрока = ЗначениеКлюча; - Если ДанныеТабличногоПоля <> Неопределено Тогда - Отбор = ДанныеТабличногоПоля.Отбор; - ЭтоКлиентскийИсточникДанных = Ложь; - ПостроительЗапроса = Новый ПостроительЗапроса; - ПостроительЗапроса.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ " + ПолноеИмяТаблицыБД; - ПостроительЗапроса.ЗаполнитьНастройки(); - СтруктураКлюча = СтруктураКлючаТаблицыБДЛкс(ПолноеИмяТаблицыБД,,, Ложь); - ЗаполнитьЗначенияСвойств(СтруктураКлюча, ЗначениеКлюча); - УстановитьОтборПоСтруктуреЛкс(ПостроительЗапроса.Отбор, СтруктураКлюча); - СтрокаЕстьВИсточникеДанных = Не ПостроительЗапроса.Результат.Пустой(); - Иначе - СтрокаЕстьВИсточникеДанных = Истина; // Немного криво - КонецЕсли; - КонецЕсли; - Если ЭтоКлиентскийИсточникДанных Тогда - СтрокаЕстьВИсточникеДанных = НайденнаяСтрока <> Неопределено; - КонецЕсли; - Если СтрокаЕстьВИсточникеДанных Тогда - ТабличноеПоле.ТекущаяСтрока = НайденнаяСтрока; - ИначеЕсли ВыводитьСообщения Тогда - СообщитьЛкс("Строка не найдена в источнике данных"); - КонецЕсли; - Если ТабличноеПоле.ТекущаяСтрока = НайденнаяСтрока Тогда - Если АктивизироватьТабличноеПолеПриУспехе Тогда - ЭтаФорма.ТекущийЭлемент = ТабличноеПоле; - КонецЕсли; - Результат = Истина; - Иначе - Если ВыводитьСообщения И СтрокаЕстьВИсточникеДанных Тогда - ТекстСообщения = "Строка найдена в источнике данных, но не найдена в табличном поле"; - Если Отбор <> Неопределено Тогда - ТекстСообщения = ТекстСообщения + " с учетом отбора " + Отбор; - КонецЕсли; - СообщитьЛкс(ТекстСообщения, СтатусСообщения.Внимание); - КонецЕсли; - Результат = Ложь; - КонецЕсли; - Возврат Результат; - -КонецФункции - // Параметры // МетаданныеКолонок - КоллекцияОбъектовМетаданных, ТаблицаЗначений - для таблицы значений используются колонки Имя и Метаданные Процедура НастроитьДобавленныеКолонкиТабличногоПоляЛкс(Знач ТабличноеПоле, ОписанияКолонок = Неопределено, МетаданныеКолонок = Неопределено, ДоступныеПоляВыбора = Неопределено, @@ -35999,7 +22567,7 @@ _РежимОтладки = Ложь; КонецЕсли; Иначе #Если Клиент Тогда - ТабличноеПолеВключитьСтаруюЦветовуюСхемуЛкс(ТабличноеПоле); + ирКлиент.ТабличноеПолеВключитьСтаруюЦветовуюСхемуЛкс(ТабличноеПоле); #КонецЕсли Если ОписанияКолонок = Неопределено Тогда ОписанияКолонок = ТабличноеПоле.Значение.Колонки; @@ -36114,18 +22682,6 @@ _РежимОтладки = Ложь; КонецПроцедуры -Процедура НастроитьКолонкуКартинкиЛкс(Знач КолонкаКартинки) Экспорт - - #Если Клиент Тогда - КолонкаКартинки.ТолькоПросмотр = Истина; - КолонкаКартинки.Видимость = Истина; - КолонкаКартинки.Ширина = 4; - КолонкаКартинки.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять; - КолонкаКартинки.ЦветТекстаШапки = ЦветаСтиля.ЦветФонаКнопки; - #КонецЕсли - -КонецПроцедуры - Процедура ДобавитьОписаниеТиповВПодсказкуШапкиКолонкиЛкс(Знач КолонкаТабличногоПоля, Знач ТипЗначенияКолонки, Знач МетаданныеКолонки = Неопределено, Знач ДобавлятьРоль = Истина) Экспорт Если ТипЗнч(КолонкаТабличногоПоля) = Тип("ПолеФормы") Тогда НоваяПодсказка = КолонкаТабличногоПоля.Подсказка; @@ -36226,10 +22782,10 @@ _РежимОтладки = Ложь; Результат = ПолноеИмяФормыЛкс(ЭтаФорма); // Сделать потом новый режим формирования ключа хранения и флажок в общих настройках чтобы пользователь сам его включал для использования нового ключа. - //Фрагменты = СтрРазделитьЛкс(Результат); + //Фрагменты = ирОбщий.СтрРазделитьЛкс(Результат); //Фрагменты.Удалить(2); //Фрагменты.Удалить(0); - //Результат = СтрСоединитьЛкс(Фрагменты); + //Результат = ирОбщий.СтрСоединитьЛкс(Фрагменты); Возврат Результат; КонецФункции @@ -36340,40 +22896,31 @@ _РежимОтладки = Ложь; КонецПроцедуры -Функция КоличествоЗапоминаемыхПоследнихВыбранныхЛкс() +Функция КоличествоЗапоминаемыхПоследнихВыбранныхЛкс() Экспорт Возврат 20; КонецФункции -Функция НачалоИмениКнопкиПодменюПоследнихВыбранных(ТипКлюча = "Выбранные") +Функция НачалоИмениКнопкиПодменюПоследнихВыбранных(ТипКлюча = "Выбранные") Экспорт Возврат "Последние" + ТипКлюча; КонецФункции -Процедура ПодменюПереключетеляНажатиеЛкс(Знач Подменю, Кнопка, Знач ИмяКнопкиПоУмолчанию = "") Экспорт - - Если Кнопка = Неопределено Или Не Кнопка.Доступность Тогда - Если ЗначениеЗаполнено(ИмяКнопкиПоУмолчанию) Тогда - Кнопка = Подменю.Кнопки[ИмяКнопкиПоУмолчанию]; - Иначе - Кнопка = Подменю.Кнопки[0]; - КонецЕсли; - КонецЕсли; - Для Каждого КнопкаСпособа Из Подменю.Кнопки Цикл - КнопкаСпособа.Пометка = Кнопка = КнопкаСпособа; - КонецЦикла; - ОбновитьТекстПослеМаркераВСтрокеЛкс(Подменю.Текст,, Кнопка.Текст, ": "); - -КонецПроцедуры - Функция ИспользованиеДинамическогоСпискаВместоОсновнойФормыЛкс(ПолноеИмяМД) Экспорт Возврат ВосстановитьЗначениеЛкс("ирДинамическийСписок.ВместоОсновной." + ПолноеИмяМД) <> Ложь; КонецФункции +Функция КлючУникальностиДинамическогоСпискаЛкс(Знач ИмяТаблицы, Знач КлючУникальности = "") Экспорт + + КлючУникальности = ИмяТаблицы + ";" + КлючУникальности; + Возврат КлючУникальности; + +КонецФункции + Функция КлючИсторииВыбораПоляВводаЛкс(Знач ПолеВводаИлиЭлементОтбора, Знач КлючИстории, Знач ДополнительныйКлючИстории = "") Экспорт Если ТипЗнч(КлючИстории) <> Тип("Строка") Тогда @@ -36392,6 +22939,53 @@ _РежимОтладки = Ложь; КонецФункции +// Процедура - Поле ввода с историей выбора начало выбора из списка лкс. +// Вызывается с сервера в динамическом списке. +// +// Параметры: +// ЭлементФормы - - +// КлючИстории - Форма, Строка - +// ДополнительныйКлючИстории - - +// ОтборВыбора - - +// +Процедура ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Знач ЭлементФормы, Знач КлючИстории, ДополнительныйКлючИстории = "", ОтборВыбора = Неопределено) Экспорт + + Если Ложь + #Если Клиент Тогда + Или ТипЗнч(ЭлементФормы) = Тип("КолонкаТабличногоПоля") + #КонецЕсли + Тогда + ПолеВвода = ЭлементФормы.ЭлементУправления; + Иначе + ПолеВвода = ЭлементФормы; + КонецЕсли; + КлючИстории = ирОбщий.КлючИсторииВыбораПоляВводаЛкс(ЭлементФормы, КлючИстории, ДополнительныйКлючИстории); + ПоследниеЗначения = ирОбщий.ВосстановитьЗначениеЛкс(КлючИстории); + ПолеВвода.СписокВыбора.Очистить(); + Если ТипЗнч(ПоследниеЗначения) = Тип("Массив") Тогда + Если ОтборВыбора <> Неопределено Тогда + ТаблицаСсылок = Новый ТаблицаЗначений; + ТаблицаСсылок.Колонки.Добавить("Ссылка"); + Для Каждого Значение Из ПоследниеЗначения Цикл + ТаблицаСсылок.Добавить().Ссылка = Значение; + КонецЦикла; + ТаблицаСсылок = ирОбщий.СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаСсылок); + НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; + ирОбщий.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, "Ссылка"); + ирОбщий.СкопироватьОтборЛюбойЛкс(НастройкаКомпоновки.Отбор, ОтборВыбора,,,, "Ссылка"); + ПоследниеЗначения = ирОбщий.ОтобратьТаблицуЗначенийКомпоновкойЛкс(ТаблицаСсылок, НастройкаКомпоновки,, Истина); + #Если Сервер И Не Сервер Тогда + ПоследниеЗначения = Новый ТаблицаЗначений; + #КонецЕсли + ПоследниеЗначения = ПоследниеЗначения.ВыгрузитьКолонку("Ссылка"); + КонецЕсли; + Для Каждого Значение Из ПоследниеЗначения Цикл + ПолеВвода.СписокВыбора.Добавить(Значение, ирОбщий.РасширенноеПредставлениеЗначенияЛкс(Значение)); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + Функция КлючИсторииВыбораЗначенияОтбораЛкс(ПолноеИмяМД, ЭлементОтбора) Экспорт Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбора") Тогда @@ -36407,118 +23001,6 @@ _РежимОтладки = Ложь; КонецФункции -// Процедура - Поле ввода с историей выбора при изменении -// -// Параметры: -// ПолеВвода - - -// КлючИстории - Строка, Форма - -// ЗапоминатьПоследние - - -// НеЗапоминатьПустыеТипизированные - - -// ДополнительныйКлючИстории - Строка - используется только если КлючИстории не ялвяется строкой -// -Процедура ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Знач ЭлементФормыИлиЭлементОтбора, Знач КлючИстории, Знач ЗапоминатьПоследние = 20, Знач _НеЗапоминатьПустыеТипизированные = Истина, - ДополнительныйКлючИстории = "", Знач ЗначениеПоля = Неопределено) Экспорт - - Если ЗначениеПоля = Неопределено Тогда - Если ТипЗнч(ЭлементФормыИлиЭлементОтбора) = Тип("ЭлементОтбора") Тогда - ЗначениеПоля = ЭлементФормыИлиЭлементОтбора.Значение; - ИначеЕсли ТипЗнч(ЭлементФормыИлиЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ЗначениеПоля = ЭлементФормыИлиЭлементОтбора.ПравоеЗначение; - ИначеЕсли ТипЗнч(ЭлементФормыИлиЭлементОтбора) = Тип("КолонкаТабличногоПоля") Тогда - ПолеВвода = ЭлементФормыИлиЭлементОтбора.ЭлементУправления; - ЗначениеПоля = ПолеВвода.Значение; - Иначе - ПолеВвода = ЭлементФормыИлиЭлементОтбора; - ЗначениеПоля = ДанныеЭлементаФормыЛкс(ПолеВвода); - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ЗначениеПоля) Тогда - НовоеЗначениеXML = ОбъектВСтрокуXMLЛкс(ЗначениеПоля); - Если СтрДлина(НовоеЗначениеXML) > 1000 Тогда - Возврат; - КонецЕсли; - КлючИстории = КлючИсторииВыбораПоляВводаЛкс(ЭлементФормыИлиЭлементОтбора, КлючИстории, ДополнительныйКлючИстории); - ПоследниеЗначения = ВосстановитьЗначениеЛкс(КлючИстории); - Если ТипЗнч(ПоследниеЗначения) <> Тип("Массив") Тогда - ПоследниеЗначения = Новый Массив; - КонецЕсли; - ПоследниеЗначенияXML = Новый Массив; - Для Каждого Значение Из ПоследниеЗначения Цикл - ПоследниеЗначенияXML.Добавить(ОбъектВСтрокуXMLЛкс(Значение)); - КонецЦикла; - Индекс = ПоследниеЗначенияXML.Найти(НовоеЗначениеXML); - Если Индекс <> Неопределено Тогда - ПоследниеЗначения.Удалить(Индекс); - КонецЕсли; - ПоследниеЗначения.Вставить(0, ЗначениеПоля); - Для Счетчик = ЗапоминатьПоследние По ПоследниеЗначения.ВГраница() Цикл - ПоследниеЗначения.Удалить(ЗапоминатьПоследние); - КонецЦикла; - СохранитьЗначениеЛкс(КлючИстории, ПоследниеЗначения); - Если Ложь - Или ТипЗнч(ПолеВвода) = Тип("ПолеФормы") - Или ТипЗнч(ПолеВвода) = Тип("ПолеВвода") - Тогда - // https://partners.v8.1c.ru/forum/topic/1150632 - ПолеВвода.СписокВыбора.ЗагрузитьЗначения(ПоследниеЗначения); - Если Истина - И ТипЗнч(ЗначениеПоля) = Тип("СписокЗначений") - И ПолеВвода.ПолучитьДействие("ОбработкаВыбора") = Неопределено - Тогда - // Без этого обработчика выбор из списка не устанавливает значение - СообщитьЛкс("В поле ввода отсутствует обработчик ОбработкаВыбора"); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Процедура - Поле ввода с историей выбора начало выбора из списка лкс -// -// Параметры: -// ЭлементФормы - - -// КлючИстории - Форма, Строка - -// ДополнительныйКлючИстории - - -// ОтборВыбора - - -// -Процедура ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Знач ЭлементФормы, Знач КлючИстории, ДополнительныйКлючИстории = "", ОтборВыбора = Неопределено) Экспорт - - Если Ложь - #Если Клиент Тогда - Или ТипЗнч(ЭлементФормы) = Тип("КолонкаТабличногоПоля") - #КонецЕсли - Тогда - ПолеВвода = ЭлементФормы.ЭлементУправления; - Иначе - ПолеВвода = ЭлементФормы; - КонецЕсли; - КлючИстории = КлючИсторииВыбораПоляВводаЛкс(ЭлементФормы, КлючИстории, ДополнительныйКлючИстории); - ПоследниеЗначения = ВосстановитьЗначениеЛкс(КлючИстории); - ПолеВвода.СписокВыбора.Очистить(); - Если ТипЗнч(ПоследниеЗначения) = Тип("Массив") Тогда - Если ОтборВыбора <> Неопределено Тогда - ТаблицаСсылок = Новый ТаблицаЗначений; - ТаблицаСсылок.Колонки.Добавить("Ссылка"); - Для Каждого Значение Из ПоследниеЗначения Цикл - ТаблицаСсылок.Добавить().Ссылка = Значение; - КонецЦикла; - ТаблицаСсылок = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаСсылок); - НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; - НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(НастройкаКомпоновки.Выбор, "Ссылка"); - СкопироватьОтборЛюбойЛкс(НастройкаКомпоновки.Отбор, ОтборВыбора,,,, "Ссылка"); - ПоследниеЗначения = ОтобратьТаблицуЗначенийКомпоновкойЛкс(ТаблицаСсылок, НастройкаКомпоновки,, Истина); - #Если Сервер И Не Сервер Тогда - ПоследниеЗначения = Новый ТаблицаЗначений; - #КонецЕсли - ПоследниеЗначения = ПоследниеЗначения.ВыгрузитьКолонку("Ссылка"); - КонецЕсли; - Для Каждого Значение Из ПоследниеЗначения Цикл - ПолеВвода.СписокВыбора.Добавить(Значение, РасширенноеПредставлениеЗначенияЛкс(Значение)); - КонецЦикла; - КонецЕсли; - -КонецПроцедуры - Функция ПолучитьИндексКартинкиСловаПодсказкиЛкс(ДанныеСтроки) Экспорт Попытка @@ -36845,9 +23327,11 @@ _РежимОтладки = Ложь; #Если Сервер И Не Сервер Тогда СборкиПлатформы = Обработки.ирУправлениеСлужбамиСервера1С.Создать().СборкиПлатформы; #КонецЕсли - Если ТабличноеПоле <> Неопределено Тогда - СостояниеСтрокТП = ТабличноеПолеСостояниеСтрокЛкс(ТабличноеПоле, "Каталог"); - КонецЕсли; + #Если Клиент Тогда + Если ТабличноеПоле <> Неопределено Тогда + СостояниеСтрокТП = ирКлиент.ТабличноеПолеСостояниеСтрокЛкс(ТабличноеПоле, "Каталог"); + КонецЕсли; + #КонецЕсли СборкиПлатформы.Очистить(); // Оба варианта пришлось оставить, т.к. WMI вариант очень долгий Если ЭтоИмяЛокальногоКомпьютераЛкс(Компьютер) Тогда @@ -36935,9 +23419,11 @@ _РежимОтладки = Ложь; СтрокаТаблицыСборок.НКаталог = НРег(СтрокаТаблицыСборок.Каталог); КонецЦикла; СборкиПлатформы.Сортировать("Порядок Убыв, ФайлыСуществуют Убыв, СборкаПлатформы Убыв, x64"); - Если ТабличноеПоле <> Неопределено Тогда - ТабличноеПолеВосстановитьСостояниеСтрокЛкс(ТабличноеПоле, СостояниеСтрокТП); - КонецЕсли; + #Если Клиент Тогда + Если ТабличноеПоле <> Неопределено Тогда + ирКлиент.ТабличноеПолеВосстановитьСостояниеСтрокЛкс(ТабличноеПоле, СостояниеСтрокТП); + КонецЕсли; + #КонецЕсли КонецПроцедуры @@ -37906,6 +24392,177 @@ _РежимОтладки = Ложь; КонецФункции +Функция ВосстановитьМенеджерВременныхТаблицЛкс(Знач СтруктураВременныеТаблицы, выхИменаВременныхТаблиц = "") Экспорт + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + выхИменаВременныхТаблиц = ""; + СостояниеЛкс("Подготовка временных таблиц"); + Для Каждого КлючИЗначение Из СтруктураВременныеТаблицы Цикл + Если выхИменаВременныхТаблиц <> "" Тогда + выхИменаВременныхТаблиц = выхИменаВременныхТаблиц + ","; + КонецЕсли; + ИмяТаблицы = КлючИЗначение.Ключ; + ТаблицаЗначений = КлючИЗначение.Значение; + выхИменаВременныхТаблиц = выхИменаВременныхТаблиц + ИмяТаблицы; + СоздатьВременнуюТаблицуЗапросаИзТаблицыЗначенийЛкс(Запрос, ТаблицаЗначений, ИмяТаблицы); + КонецЦикла; + СостояниеЛкс(""); + Возврат Запрос.МенеджерВременныхТаблиц; + +КонецФункции + +Процедура СоздатьВременнуюТаблицуЗапросаИзТаблицыЗначенийЛкс(Запрос, ТаблицаЗначений, Знач ИмяТаблицы) Экспорт + + ТаблицаЗначений = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначений, Истина); + #Если Сервер И Не Сервер Тогда + ТаблицаЗначений = Новый ТаблицаЗначений; + Запрос = Новый Запрос; + #КонецЕсли + ТекстВыбораПолей = ""; + СуффиксВыборПодколонки = "_ВыборПодколонки" + СуффиксСлужебногоСвойстваЛкс(); + СуффиксПодколонкиБезНеудобногоТипа = "_Значение" + СуффиксСлужебногоСвойстваЛкс(); + СуффиксПодколонкиДляНеудобногоТипа = "_ЗначениеДляТипа" + СуффиксСлужебногоСвойстваЛкс(); + ЕстьКолонкиСНеудобнымТипом = Ложь; + НеподдерживаемыеКолонки = ""; + НачальноеЧислоКолонок = ТаблицаЗначений.Колонки.Количество(); + Для ИндексКолонки = 0 По НачальноеЧислоКолонок - 1 Цикл + Колонка = ТаблицаЗначений.Колонки[НачальноеЧислоКолонок - ИндексКолонки - 1]; // Состав коллекции расширяется, но нам нужно обойти только начальный состав + Если Ложь + //Или Колонка.ТипЗначения.СодержитТип(Тип("Тип")) + //Или Колонка.ТипЗначения.СодержитТип(Тип("МоментВремени")) + Или (Истина + И ирКэш.НомерРежимаСовместимостиЛкс() < 803012 + И Колонка.ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор"))) + Тогда + Если НеподдерживаемыеКолонки <> "" Тогда + НеподдерживаемыеКолонки = НеподдерживаемыеКолонки + ", "; + КонецЕсли; + НеподдерживаемыеКолонки = НеподдерживаемыеКолонки + ИмяТаблицы + "." + Колонка.Имя; + ИначеЕсли Колонка.ТипЗначения.Типы().Количество() = 0 Тогда + // Вроде бы после СузитьТипыКолонокТаблицыБезПотериДанныхЛкс() такого вообще не должно оставаться + ТекстВыбораПолей = ТекстВыбораПолей + ", + |НЕОПРЕДЕЛЕНО КАК " + Колонка.Имя; + ИначеЕсли Ложь + Или Колонка.ТипЗначения.СодержитТип(Тип("Тип")) + Или Колонка.ТипЗначения.СодержитТип(Тип("МоментВремени")) + Или Колонка.ТипЗначения.СодержитТип(Тип("Null")) + Тогда + ЕстьКолонкиСНеудобнымТипом = Истина; + ОписаниеТиповДляНеудобногоТипа = Неопределено; + Если Колонка.ТипЗначения.СодержитТип(Тип("МоментВремени")) Тогда + ИмяНеудобногоТипа = "МоментВремени"; + ИмяКолонкиЗначениеДляНеудобногоТипа = Колонка.Имя + СуффиксПодколонкиДляНеудобногоТипа; + ИмяКолонкиЗначениеДляНеудобногоТипаДата = Колонка.Имя + "_Дата" + СуффиксПодколонкиДляНеудобногоТипа; + ВыражениеНеудобногоТипа = " + |ВЫБОР КОГДА Т." + ИмяКолонкиЗначениеДляНеудобногоТипа + ".Дата <> Т." + ИмяКолонкиЗначениеДляНеудобногоТипаДата + " + | ТОГДА 1/0 + | ИНАЧЕ Т." + ИмяКолонкиЗначениеДляНеудобногоТипа + ".МоментВремени + |КОНЕЦ"; + ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиЗначениеДляНеудобногоТипаДата, Новый ОписаниеТипов("Дата")); + Если ТаблицаЗначений.Количество() = 0 Тогда + ТипыДокументов = Новый Массив; + ТипыДокументов.Добавить(Документы.ТипВсеСсылки().Типы()[0]); + ОписаниеТиповДляНеудобногоТипа = Новый ОписаниеТипов(ТипыДокументов); + КонецЕсли; + ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Тип")) Тогда + ИмяНеудобногоТипа = "Тип"; + ИмяКолонкиЗначениеДляНеудобногоТипа = Колонка.Имя + СуффиксПодколонкиДляНеудобногоТипа; + ВыражениеНеудобногоТипа = "ТипЗначения(Т." + ИмяКолонкиЗначениеДляНеудобногоТипа + ")"; + ИначеЕсли Колонка.ТипЗначения.СодержитТип(Тип("Null")) Тогда + ИмяНеудобногоТипа = "Null"; + ИмяКолонкиЗначениеДляНеудобногоТипа = Колонка.Имя + СуффиксПодколонкиДляНеудобногоТипа; + ВыражениеНеудобногоТипа = "NULL"; + Иначе + ВызватьИсключение "Неподдерживаемый тип"; + КонецЕсли; + ИмяКолонкиВыбораПодколонки = Колонка.Имя + СуффиксВыборПодколонки; + ИмяКолонкиБезНеудобногоТипа = Колонка.Имя + СуффиксПодколонкиБезНеудобногоТипа; + ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиВыбораПодколонки, Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(Макс(10, СтрДлина(ИмяНеудобногоТипа))))); + ОписаниеТиповКолонкиБезТипов = Новый ОписаниеТипов(Колонка.ТипЗначения,, ИмяНеудобногоТипа + ", Null"); + Если ОписаниеТиповКолонкиБезТипов.Типы().Количество() > 0 Тогда + ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиБезНеудобногоТипа, ОписаниеТиповКолонкиБезТипов); + ВыражениеБезНеудобногоТипа = "Т." + ИмяКолонкиБезНеудобногоТипа; + Иначе + ВыражениеБезНеудобногоТипа = "НЕОПРЕДЕЛЕНО"; + КонецЕсли; + ТаблицаЗначений.Колонки.Добавить(ИмяКолонкиЗначениеДляНеудобногоТипа, ОписаниеТиповДляНеудобногоТипа); + ТекстВыбораПолей = ТекстВыбораПолей + ", + | ВЫБОР КОГДА Т." + ИмяКолонкиВыбораПодколонки + " = """ + ИмяНеудобногоТипа + """ + | ТОГДА " + ВыражениеНеудобногоТипа + " + | КОГДА Т." + ИмяКолонкиВыбораПодколонки + " = ""Null"" + | ТОГДА NULL + | ИНАЧЕ " + ВыражениеБезНеудобногоТипа + " + | КОНЕЦ КАК " + Колонка.Имя; + Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл + ЗначениеКолонки = СтрокаТаблицы[Колонка.Имя]; + Если ТипЗнч(ЗначениеКолонки) = Тип(ИмяНеудобногоТипа) Тогда + Если ТипЗнч(ЗначениеКолонки) = Тип("МоментВремени") Тогда + СтрокаТаблицы[ИмяКолонкиЗначениеДляНеудобногоТипаДата] = ЗначениеКолонки.Дата; + ЗначениеКолонки = ЗначениеКолонки.Ссылка; + ИначеЕсли ТипЗнч(ЗначениеКолонки) = Тип("Тип") Тогда + Типы = Новый Массив; + Типы.Добавить(ЗначениеКолонки); + ОписаниеТипов = Новый ОписаниеТипов(Типы); + ЗначениеКолонки = ОписаниеТипов.ПривестиЗначение(); + ИначеЕсли ТипЗнч(ЗначениеКолонки) = Тип("NULL") Тогда + ЗначениеКолонки = Неопределено; + Иначе + ВызватьИсключение "Неподдерживаемый тип"; + КонецЕсли; + СтрокаТаблицы[ИмяКолонкиВыбораПодколонки] = ИмяНеудобногоТипа; + СтрокаТаблицы[ИмяКолонкиЗначениеДляНеудобногоТипа] = ЗначениеКолонки; + ИначеЕсли ЗначениеКолонки = Null Тогда + // Моноколонку с типом NULL тоже невозможно поместить во временную таблицу из таблицы-параметра + СтрокаТаблицы[ИмяКолонкиВыбораПодколонки] = "Null"; + Иначе + СтрокаТаблицы[ИмяКолонкиБезНеудобногоТипа] = ЗначениеКолонки; + КонецЕсли; + КонецЦикла; + ТаблицаЗначений.Колонки.Удалить(Колонка.Имя); + Иначе + ТекстВыбораПолей = ТекстВыбораПолей + ", + |Т." + Колонка.Имя + " КАК " + Колонка.Имя; + КонецЕсли; + КонецЦикла; + Если ЕстьКолонкиСНеудобнымТипом Тогда + ТаблицаЗначений = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(ТаблицаЗначений, Истина); + ИмяСлужебнойТаблицы = "_Т" + СуффиксСлужебногоСвойстваЛкс(); + ТекстЗапросаПодготовки = " + |ВЫБРАТЬ Т.* ПОМЕСТИТЬ " + ИмяСлужебнойТаблицы + " ИЗ &" + ИмяТаблицы + " КАК Т; + |ВЫБРАТЬ " + Сред(ТекстВыбораПолей, 2) + " + |ПОМЕСТИТЬ " + ИмяТаблицы + " ИЗ " + ИмяСлужебнойТаблицы + " КАК Т; + |УНИЧТОЖИТЬ " + ИмяСлужебнойТаблицы + ""; + Иначе + ТекстЗапросаПодготовки = " + |ВЫБРАТЬ Т.* ПОМЕСТИТЬ " + ИмяТаблицы + " ИЗ &" + ИмяТаблицы + " КАК Т"; + КонецЕсли; + Запрос.Параметры.Вставить(ИмяТаблицы, ТаблицаЗначений); + Если НеподдерживаемыеКолонки <> "" Тогда + // https://partners.v8.1c.ru/forum/t/1570237/m/1570237 + СообщитьЛкс(СтрШаблонИменЛкс("Невозможно восстановить временную таблицу %1 из-за недопустимых типов (МоментВремени, УникальныйИдентификатор, Тип) в колонках %2",, + ИмяТаблицы, 2, НеподдерживаемыеКолонки), СтатусСообщения.Внимание); + Иначе + Если ЗначениеЗаполнено(ТекстЗапросаПодготовки) Тогда + Запрос.Текст = ТекстЗапросаПодготовки; + Попытка + Запрос.Выполнить(); + Исключение + Причина = ОписаниеОшибки(); + Если Ложь + Или СтрНайтиЛкс(Причина, "деление на ноль",,,, Ложь) + Или СтрНайтиЛкс(Причина, "division by zero",,,, Ложь) + Тогда + Причина = "Присутствует момент времени, дата в котором не совпадает с датой документа"; + КонецЕсли; + СообщитьЛкс(СтрШаблонИменЛкс("Ошибка восстановления временной таблицы %1: " + Причина,, ИмяТаблицы), СтатусСообщения.Внимание); + КонецПопытки; + КонецЕсли; + КонецЕсли; + Запрос.Параметры.Удалить(ИмяТаблицы); + +КонецПроцедуры + // Подставляет параметры в строку. Максимально возможное число параметров - 9. // Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы. // @@ -38448,16 +25105,6 @@ _РежимОтладки = Ложь; КонецФункции -Функция ОткрытьЗапросСУБДЛкс(ТекстЗапроса, ИмяЗапроса = "Запрос для отладки", Параметры = Неопределено, Автоподключение = Ложь) Экспорт - - КонсольЗапросов = СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольЗапросов"); - #Если Сервер И Не Сервер Тогда - КонсольЗапросов = Обработки.ирКонсольЗапросов.Создать(); - #КонецЕсли - КонсольЗапросов.ОткрытьЗапросБД(ТекстЗапроса, ИмяЗапроса, Параметры, Автоподключение); - -КонецФункции - Функция ОбновитьМодульВнешнейОбработкиДляОтладкиЛкс(БазовоеИмяВнешнейОбработки, ИмяВнешнейОбработки, ТекстМодуля, ТекстМодуляВКонсолиНеМенялся, ДатаИзмененияВнешнейОбработки, ИспользоватьБыструюРаспаковку = Ложь) Экспорт @@ -38640,6 +25287,31 @@ _РежимОтладки = Ложь; КонецФункции +Функция ДобавитьМногострочнуюСтрокуВТекстЛкс(ТекстПриемник, СтрокаДляВставки, Смещение, СНовойСтроки = Ложь, ОбрезатьЛевыеПустые = Ложь) Экспорт + + Если Не ЗначениеЗаполнено(ТекстПриемник) Тогда + ТекстПриемник = ""; + КонецЕсли; + ЗаписьТекста = Новый ЗаписьXML; + ЗаписьТекста.УстановитьСтроку(); + Если СНовойСтроки Тогда + ЗаписьТекста.ЗаписатьБезОбработки(Символы.ПС + Смещение); + КонецЕсли; + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(СтрокаДляВставки); + ЗаписьТекста.ЗаписатьБезОбработки(ТекстовыйДокумент.ПолучитьСтроку(1)); + Для Счетчик = 2 По ТекстовыйДокумент.КоличествоСтрок() Цикл + ТекущаяСтрока = ТекстовыйДокумент.ПолучитьСтроку(Счетчик); + Если ОбрезатьЛевыеПустые Тогда + ТекущаяСтрока = СокрЛ(ТекущаяСтрока); + КонецЕсли; + ЗаписьТекста.ЗаписатьБезОбработки(Символы.ПС + Смещение + ТекущаяСтрока); + КонецЦикла; + ТекстПриемник = ТекстПриемник + ЗаписьТекста.Закрыть(); + Возврат ТекстПриемник; + +КонецФункции + Функция ЭтотРасширениеКонфигурацииЛкс() Экспорт Результат = Неопределено; @@ -39263,7 +25935,7 @@ _РежимОтладки = Ложь; Для НомерПопытки = НачальнаяПопытка По КоличествоПопыток Цикл Если НомерПопытки = 2 Тогда #Если Клиент Тогда - ФормаПодключения = ОткрытьФормуСоединенияСУБДЛкс(Истина); + ФормаПодключения = ирКлиент.ОткрытьФормуСоединенияСУБДЛкс(Истина); Если ФормаПодключения = Неопределено Тогда Возврат Ложь; КонецЕсли; @@ -39305,11 +25977,11 @@ _РежимОтладки = Ложь; Знач НаСервере = Неопределено, СоединениеADO = Неопределено, БинарныеВСтроку = Истина) Экспорт ТребоватьТипЛкс(ТекстЗапроса, "ТекстЗапроса", Тип("Строка")); - Если РежимОтладки Тогда - ОткрытьЗапросСУБДЛкс(ТекстЗапроса, ПредставлениеЗапроса); - Возврат Неопределено; - КонецЕсли; #Если Клиент Тогда + Если РежимОтладки Тогда + ирКлиент.ОткрытьЗапросСУБДЛкс(ТекстЗапроса, ПредставлениеЗапроса); + Возврат Неопределено; + КонецЕсли; Если Истина И СоединениеADO = Неопределено И НаСервере = Неопределено @@ -39428,7 +26100,7 @@ _РежимОтладки = Ложь; КонецПроцедуры -Функция ФоновыеЗаданияПотоковЛкс() +Функция ФоновыеЗаданияПотоковЛкс() Экспорт Отбор = Новый Структура; Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); @@ -39591,6 +26263,7 @@ _РежимОтладки = Ложь; Если Ложь Или ЛиМетаданныеСсылочногоОбъектаЛкс(ОбъектМД) Или ЛиКорневойТипЖурналаДокументовЛкс(ТипТаблицы) + Или ТипТаблицы = "Точки" Тогда Если ЛиТипСсылкиБДЛкс(ТипЗнч(ТекущаяСтрока), Ложь) Тогда КлючОбъекта = ТекущаяСтрока; @@ -39645,6 +26318,17 @@ _РежимОтладки = Ложь; КонецФункции +Функция КлючОбъектаКонстантыЛкс(Знач ИмяКонстанты, Знач РазрешитьОпасныеОперации = Истина) Экспорт + + Если ирКэш.НомерВерсииПлатформыЛкс() >= 803013 Тогда + КлючОбъекта = Новый ("КонстантаКлючЗначения." + ИмяКонстанты); + ИначеЕсли РазрешитьОпасныеОперации Тогда + КлючОбъекта = Новый ("КонстантаМенеджерЗначения." + ИмяКонстанты); // Инициализация модуля. Есть риск ошибок компиляции на клиенте + КонецЕсли; + Возврат КлючОбъекта; + +КонецФункции + Функция СообщенияПользователюОтФоновогоЗаданияЛкс(Знач ФоновоеЗадание, УдалятьПолученные = Ложь) Экспорт #Если Сервер И Не Сервер Тогда @@ -39685,7 +26369,7 @@ _РежимОтладки = Ложь; #Если Сервер И Не Сервер Тогда ОтменитьФоновоеЗаданиеОтложенноЛкс(); #КонецЕсли - ПодключитьОбработчикОжиданияСПараметрамиЛкс("ОтменитьФоновоеЗаданиеОтложенноЛкс", Новый Структура("ИдентификаторФоновогоЗадания", ИдентификаторФоновогоЗадания)); + ирКлиент.ПодключитьОбработчикОжиданияСПараметрамиЛкс("ОтменитьФоновоеЗаданиеОтложенноЛкс", Новый Структура("ИдентификаторФоновогоЗадания", ИдентификаторФоновогоЗадания)); КонецЕсли; СостояниеЛкс("Выполняем фоновое задание", Истина); #КонецЕсли @@ -39712,7 +26396,7 @@ _РежимОтладки = Ложь; ПаузаМиллисекундЛкс(100); КонецЦикла; #Если Клиент Тогда - ОтлючитьОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОтлючитьОбработчикОжиданияСПараметрамиЛкс(); #КонецЕсли Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда ИнформацияОбОшибке = ФоновоеЗадание.ИнформацияОбОшибке; @@ -39776,7 +26460,7 @@ _РежимОтладки = Ложь; #Если Клиент Тогда ТекстовыйДокумент = ФормаЗадания.ЭлементыФормы.ПолеТекста; ТекстовыйДокумент.ДобавитьСтроку(СообщениеПользователю.Текст); - ПолеТекста = ОболочкаПоляТекстаЛкс(ТекстовыйДокумент); + ПолеТекста = ирКлиент.ОболочкаПоляТекстаЛкс(ТекстовыйДокумент); #Если Сервер И Не Сервер Тогда ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); #КонецЕсли @@ -39857,7 +26541,7 @@ _РежимОтладки = Ложь; Возврат ПредставлениеОтбора; КонецФункции -Функция СтруктураХраненияОсновнойТаблицыМДЛкс(Знач ПолноеИмяМД) +Функция СтруктураХраненияОсновнойТаблицыМДЛкс(Знач ПолноеИмяМД) Экспорт //СтруктураХраненияПолей = ирКэш.СтруктураХраненияБДЛкс().НайтиСтроки(Новый Структура("Назначение, Метаданные", "Основная", ПолноеИмяМД))[0].Поля; ФильтрМетаданных = Новый Массив; @@ -40053,7 +26737,7 @@ _РежимОтладки = Ложь; #КонецЕсли Если Колонка = Неопределено Тогда #Если Клиент Тогда - Колонка = ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); + Колонка = ирКлиент.ТабличноеПоле_ТекущаяКолонкаЛкс(ТабличноеПоле); #КонецЕсли КонецЕсли; Если ТипЗнч(Колонка) = Тип("ПолеФормы") Тогда @@ -40113,6 +26797,73 @@ _РежимОтладки = Ложь; КонецФункции +Функция ИтогКолонкиТабличногоПоляЛкс(Знач КопияТаблицы, Знач ИмяКолонки, Знач КолонкиКоллекции = Неопределено) Экспорт + + СуммаКолонки = Неопределено; + Если Истина + И ЗначениеЗаполнено(ИмяКолонки) + И ИмяКолонки <> "НомерСтроки" + //И КоллекцияСтрок.Количество() > 0 + И КопияТаблицы.Количество() > 0 + Тогда + Если КолонкиКоллекции = Неопределено Тогда + КолонкиКоллекции = КопияТаблицы.Колонки; + КонецЕсли; + ТипЗначения = КолонкиКоллекции.Найти(ИмяКолонки).ТипЗначения; + Если Ложь + Или ТипЗначения.СодержитТип(Тип("Число")) + Или ТипЗначения = Новый ОписаниеТипов("Булево") + Тогда + СуммаКолонки = КопияТаблицы.Итог(ИмяКолонки); + ИначеЕсли Истина + И ТипЗначения = Новый ОписаниеТипов("Булево, Null") + И ТипЗнч(КопияТаблицы) = Тип("ТаблицаЗначений") + //И Не ЭтоКоллекцияСМетаданными + И КопияТаблицы.Количество() < 10000 // Сужение типа - долгая операция + Тогда + //Если ТипЗнч(КопияТаблицы) <> Тип("ТаблицаЗначений") Тогда + // КопияТаблицы = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле,,,,,, ЭтаФорма); + //КонецЕсли; + // Если у колонки составной тип, то Итог() не будет считать булевы значения + КопияКолонки = ирОбщий.ТаблицаСКолонкамиБезТипаNullЛкс(КопияТаблицы,, ИмяКолонки); + СуммаКолонки = КопияКолонки.Итог(ИмяКолонки); + КонецЕсли; + КонецЕсли; + Возврат СуммаКолонки; + +КонецФункции + +// Функция - Прочитать результат фонового задания лкс +// +// Параметры: +// АдресРезультата - - +// ФормаРезультата - УправляемаяФорма - Обработка.ирПлатформа.Форма.РезультатФоновогоЗадания, с ее идентификатором создавался адрес временного хранилища +// +// Возвращаемое значение: +// - +// +Функция ПрочитатьРезультатФоновогоЗаданияЛкс(Знач АдресРезультата, Знач ФормаРезультата = Неопределено) Экспорт + + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + Если Результат = Null И ФормаРезультата <> Неопределено Тогда + // Антибаг платформы https://www.hostedredmine.com/issues/884756 + ФормаРезультата.ОбновитьВременноеХранилище(АдресРезультата); // Тяжелая операция + Результат = ПолучитьИзВременногоХранилища(АдресРезультата); + Если Результат = Null Тогда + СообщитьЛкс("Не удалось получить результат фонового задания вероятно из-за ошибки платформы https://www.hostedredmine.com/issues/884756. Асинхронность отключена до конца сеанса.", СтатусСообщения.Внимание); + мПлатформа = ирКэш.Получить(); + #Если Сервер И Не Сервер Тогда + мПлатформа = Обработки.ирПлатформа.Создать(); + #КонецЕсли + мПлатформа.АсинхронностьЗапрещена = Истина; + КонецЕсли; + КонецЕсли; + УдалитьИзВременногоХранилища(АдресРезультата); + Возврат Результат + +КонецФункции + + //////////////////////////////////////////////// // Многопоточность @@ -40273,7 +27024,7 @@ _РежимОтладки = Ложь; КонецПроцедуры -Функция ПрефиксКлючаПотокаЛкс(Знач ОбработкаОбъект) +Функция ПрефиксКлючаПотокаЛкс(Знач ОбработкаОбъект) Экспорт Возврат ОбработкаОбъект.Метаданные().ПолноеИмя() + "."; @@ -40379,12 +27130,12 @@ _РежимОтладки = Ложь; КонецЕсли; ТекущийПользовательБД.Записать(); #Если Клиент Тогда - ирОбщий.ОповеститьОЗаписиОбъектаЛкс(Тип("ПользовательИнформационнойБазы")); + ирКлиент.ОповеститьОЗаписиОбъектаЛкс(Тип("ПользовательИнформационнойБазы")); #КонецЕсли КонецПроцедуры -Функция МаркерВременныхРолейЛкс() +Функция МаркерВременныхРолейЛкс() Экспорт Результат = " (временные роли ИР)"; Возврат Результат; @@ -40395,4350 +27146,6 @@ _РежимОтладки = Ложь; #КонецЕсли -#Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент И Клиент Тогда - -Функция ТабличноеПолеИлиТаблицаФормы_СколькоСтрокЛкс(ТабличноеПоле, Знач НастройкиСписка = Неопределено) Экспорт - ЗначениеЭУ = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - Если ЗначениеЭУ <> Неопределено Тогда - Количество = Неопределено; - Попытка - Количество = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле,, Истина).Количество(); - Исключение - КонецПопытки; - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - Отбор = "?"; - Иначе - Попытка - Отбор = ТабличноеПоле.ОтборСтрок; - Исключение - КонецПопытки; - КонецЕсли; - Если Количество = Неопределено Тогда - Попытка - //Коллекция компоновки - Количество = ЗначениеЭУ.Элементы.Количество(); - //Суффикс = "*"; - Исключение - Попытка - //Или ИмяОбщегоТипа = "ДеревоЗначений" - Количество = ЗначениеЭУ.Строки.Количество(); - Суффикс = "*"; - Исключение - КонецПопытки; - КонецПопытки; - КонецЕсли; - Если Количество = Неопределено Тогда - // ДинамическийСписок - Если НастройкиСписка = Неопределено Тогда - НастройкиСписка = НастройкиДинамическогоСпискаЛкс(ЗначениеЭУ); - КонецЕсли; - Отбор = НастройкиСписка.Отбор; - ПолноеИмяТаблицы = ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле); - ЗапросСписка = ЗапросДинамическогоСпискаЛкс(ТабличноеПоле, ПолноеИмяТаблицы); - Если ЗначениеЗаполнено(ЗапросСписка.Текст) Тогда - Количество = КоличествоСтрокВТаблицеБДЛкс(ЗапросСписка); - Иначе - Количество = КоличествоСтрокВТаблицеБДЛкс(ПолноеИмяТаблицы, Отбор); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Текст = "Количество строк "; - Если Отбор <> Неопределено Тогда - Текст = Текст + "отобрано "; - КонецЕсли; - Текст = Текст + "- " + Формат(Количество, "ЧН=; ЧГ=") + Суффикс; - Если ТабличноеПоле.ВыделенныеСтроки.Количество() > 1 Тогда - Текст = Текст + ", выделено - " + Формат(ТабличноеПоле.ВыделенныеСтроки.Количество(), "ЧН=; ЧГ="); - КонецЕсли; - Если Отбор <> Неопределено Тогда - Текст = Текст + ". Отбор - """ + Отбор + """ "; - КонецЕсли; - СообщитьЛкс(Текст,,, Истина); - - // Тексты подвала - Результат = Количество; - МассивПодвалов = Новый Массив; - #Если Клиент Тогда - Если ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл - ТекстПодвала = ПоследнийФрагментЛкс(КолонкаТП.ТекстПодвала, "Σ"); - Если ЗначениеЗаполнено(ТекстПодвала) Тогда - МассивПодвалов.Добавить(КолонкаТП.ТекстШапки + " = " + ТекстПодвала); - КонецЕсли; - КонецЦикла; - КонецЕсли; - #КонецЕсли - Если МассивПодвалов.Количество() > 0 Тогда - СообщитьЛкс(СтрСоединитьЛкс(МассивПодвалов, "; ")); - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Функция - Данные строки табличного поля лкс -// -// Параметры: -// ТабличноеПоле - - -// Строка - - -// ДанныеПоля - - вход/выход, можно передавать пустую переменнную для ускорения анализа таблицы формы компоновки данных -// -// Возвращаемое значение: -// - -// -Функция ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, Знач Строка = Неопределено, ДанныеПоля = Неопределено) Экспорт - - Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда - ДанныеСтроки = Неопределено; - Если Строка = Неопределено Тогда - Строка = ТабличноеПоле.ТекущаяСтрока; - КонецЕсли; - Если ТипЗнч(Строка) = Тип("ИдентификаторКомпоновкиДанных") Тогда - Если ДанныеПоля = Неопределено Тогда - ДанныеПоля = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - КонецЕсли; - Если ДанныеПоля <> Неопределено Тогда - ДанныеСтроки = ДанныеПоля.ПолучитьОбъектПоИдентификатору(Строка); - КонецЕсли; - КонецЕсли; - Если ДанныеСтроки = Неопределено И Строка <> Неопределено Тогда - //ДанныеТаблицы = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - //#Если Сервер И Не Сервер Тогда - // ДанныеТаблицы = Новый ТаблицаЗначений; - //#КонецЕсли - //ДанныеСтроки = ДанныеТаблицы.НайтиПоИдентификатору(Строка); - ДанныеСтроки = ТабличноеПоле.ДанныеСтроки(Строка); - Если ДанныеСтроки = Неопределено Тогда - // Ключ записи регистра без ресурсов и измерений (ШтрихкодыНоменклатуры) иногда почему то дает Неопределено - ДанныеСтроки = Строка; - КонецЕсли; - КонецЕсли; - ИначеЕсли ТипЗнч(ТабличноеПоле) = Тип("ТабличноеПоле") Тогда - ДанныеСтроки = Строка; - Если Ложь - Или ДанныеСтроки = Неопределено - Или ЛиКлючЗаписиРегистраЛкс(ДанныеСтроки) - Тогда - Попытка - ДанныеСтроки = ТабличноеПоле.ТекущиеДанные; - Исключение - // Удаленное из формы табличное поле, например вызов из Обработка.ирПлатформа.Форма.СтрокаТаблицы - ТабличноеПоле = Неопределено; - КонецПопытки; - КонецЕсли; - КонецЕсли; - Возврат ДанныеСтроки; - -КонецФункции - -Процедура ИсследоватьВерсиюОбъектаДанныхЛкс(Знач Данные, Знач НомерВерсии) Экспорт - - #Если ВебКлиент Тогда - СообщитьЛкс("Команда недоступна в вебклиенте"); - #Иначе - ИсторияДанныхМоя = Вычислить("ИсторияДанных"); - #Если Сервер И Не Сервер Тогда - ИсторияДанныхМоя = ИсторияДанных; - #КонецЕсли - Структура = ИсторияДанныхМоя.ПолучитьДанныеВерсии(Данные, НомерВерсии); - ИсследоватьЛкс(Структура); - #КонецЕсли - -КонецПроцедуры - -Функция ОткрытьСистемнуюФормуОтчетПоВерсииЛкс(Данные, НомерВерсии) Экспорт - - Попытка - ОткрытьФорму("sysForm:DataHistoryVersionDataRuForm", Новый Структура("Данные, НомерВерсии", Данные, НомерВерсии)); - Исключение - ОписаниеОшибки = ОписаниеОшибки(); - ИсследоватьВерсиюОбъектаДанныхЛкс(Данные, НомерВерсии); - КонецПопытки; - -КонецФункции - -// Функция - Открыть системную форму список версий лкс -// -// Параметры: -// Данные - - -// НомерВерсии - Число - пока не реализовано -// -// Возвращаемое значение: -// - -// -Функция ОткрытьСистемнуюФормуСписокВерсийОбъектаЛкс(Данные, НомерВерсии) Экспорт - - ОткрытьФорму("sysForm:DataHistoryVersions", Новый Структура("Data", Данные)); - -КонецФункции - -Функция ОткрытьСистемнуюФормуСравнениеВерсийЛкс(Данные, НомерВерсииПослеИзменения, НомерВерсииДоИзменения) Экспорт - - ОткрытьФорму("sysForm:DataHistoryVersionDifferenecesRuForm", Новый Структура("Данные, НомерВерсииПослеИзменения, НомерВерсииДоИзменения", Данные, НомерВерсииПослеИзменения, НомерВерсииДоИзменения)); - -КонецФункции - -Функция ОткрытьСистемнуюФормуНастройкаОтбораВерсийЛкс(Знач КлючОбъекта, Знач ОтборВерсий, Знач Оповещение) Экспорт - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Filter", ОтборВерсий); - ПараметрыФормы.Вставить("Data", КлючОбъекта); - ПолноеИмяФормы = "sysForm:DataHistoryVersionsFilterDialog"; - Выполнить("ОткрытьФорму(ПолноеИмяФормы, ПараметрыФормы,,,,, Оповещение)"); // Параметра "Оповещение" в 8.2 нет - -КонецФункции - -Процедура ИсследоватьСравнениеВерсийЛкс(Знач Данные, Знач НомерВерсииПослеИзменения, Знач НомерВерсииДоИзменения) Экспорт - - #Если ВебКлиент Тогда - СообщитьЛкс("Команда недоступна в вебклиенте"); - #Иначе - ИсторияДанныхМоя = Вычислить("ИсторияДанных"); - #Если Сервер И Не Сервер Тогда - ИсторияДанныхМоя = ИсторияДанных; - #КонецЕсли - Структура = ИсторияДанныхМоя.ПолучитьРазличияВерсий(Данные, НомерВерсииПослеИзменения, НомерВерсииДоИзменения); - ИсследоватьЛкс(Структура); - #КонецЕсли - -КонецПроцедуры - -Функция НоваяФормаРезультатаФоновогоЗаданияЛкс() Экспорт - - // Управляемые формы так создавать нельзя! - // http://www.hostedredmine.com/issues/874998 - //мПлатформа = ирКэш.Получить(); - //#Если Сервер И Не Сервер Тогда - // мПлатформа = Обработки.ирПлатформа.Создать(); - //#КонецЕсли - //ФормаРезультатФоновогоЗадания = мПлатформа.ПолучитьФорму("РезультатФоновогоЗадания"); - - ФормаРезультатФоновогоЗадания = ПолучитьФормуЛкс("Обработка.ирПлатформа.Форма.РезультатФоновогоЗадания",,, Новый УникальныйИдентификатор); - Возврат ФормаРезультатФоновогоЗадания; - -КонецФункции - -Функция ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(Знач ЭтаФорма, Знач ОписаниеЗадания, Знач Перезапустить = Ложь) Экспорт - - СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); - #Если Сервер И Не Сервер Тогда - СлужебныеДанные = Новый Структура; - ОписаниеЗадания = ОписаниеФоновогоЗаданияФормыЛкс(); - #КонецЕсли - Если Не МетодРеализованЛкс(ЭтаФорма, ОписаниеЗадания.ОбработчикЗавершения) Тогда - ВызватьИсключение "У формы " + СсылкаНаМодульКонфигурацииЛкс(СлужебныеДанные.ИмяФормы) + " не обнаружен экспортный метод " + ОписаниеЗадания.ОбработчикЗавершения; - КонецЕсли; - МаркерОтмены = "Отменить фоновое задание"; - ЗаданияФормы = СлужебныеДанные.Задания; - Если ЗаданияФормы.Свойство(ОписаниеЗадания.Имя) Тогда - ОписаниеЗаданияСтарое = ЗаданияФормы[ОписаниеЗадания.Имя]; - Если ОписаниеЗаданияСтарое.УникальныйИдентификатор <> Неопределено Тогда - Если Ложь - Или ОписаниеЗадания.Кнопка = Неопределено - Или ОписаниеЗадания.Кнопка.Картинка <> ирКэш.КартинкаПоИмениЛкс("ирОстановить") - Тогда - Перезапустить = Истина; - КонецЕсли; - ОтменитьЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗаданияСтарое); - Если Не Перезапустить Тогда - Возврат Неопределено; - КонецЕсли; - КонецЕсли; - КонецЕсли; - ОписаниеЗадания.НачалоВыполнения = ТекущаяДата(); - ДобавитьТекущемуПользователюРолиИРЛкс(); - ФоновоеЗадание = ФоновыеЗадания.Выполнить(ОписаниеЗадания.Метод, ОписаниеЗадания.Параметры, , ЭтаФорма.Метаданные().Представление() + ". " + ОписаниеЗадания.Представление); - ОписаниеЗадания.УникальныйИдентификатор = ФоновоеЗадание.УникальныйИдентификатор; - ЗаданияФормы.Вставить(ОписаниеЗадания.Имя, ОписаниеЗадания); - ФормаЗадания = ФормаЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма); - Если ФормаЗадания <> Неопределено Тогда - #Если Сервер И Не Сервер Тогда - ФормаЗадания = ПолучитьОбщуюФорму(); - #КонецЕсли - ФормаЗадания.ЭлементыФормы.ПолеТекста.Очистить(); - ФормаЗадания.ЭлементыФормы.Отменить.Доступность = Истина; - ФормаЗадания.ЗакрыватьПриЗакрытииВладельца = ЭтаФорма.Открыта(); - ФормаЗадания.Отменить = Ложь; - ФормаЗадания.ЭлементыФормы.Прервать.Доступность = ОписаниеЗадания.ПоддерживаетПрерывание; - ФормаЗадания.ИдентификаторЗадания = ФоновоеЗадание.УникальныйИдентификатор; - ФормаЗадания.ОбновитьСостояниеЗадания(ФоновоеЗадание); - КонецЕсли; - ОжидатьЗавершения = ОписаниеЗадания.Кнопка = Неопределено; - Если Не ОжидатьЗавершения Тогда - // Завершаем основной поток - Если ОписаниеЗадания.БлокируемыеЭлементыФормы <> Неопределено Тогда - Для Каждого КлючИЗначение Из ОписаниеЗадания.БлокируемыеЭлементыФормы Цикл - КлючИЗначение.Значение.Вставить("Доступность"); - КлючИЗначение.Значение.Вставить("ТолькоПросмотр"); - БлокируемыйЭлемент = КлючИЗначение.Ключ; - #Если Сервер И Не Сервер Тогда - БлокируемыйЭлемент = Новый ТабличноеПоле; - #КонецЕсли - ЗаполнитьЗначенияСвойств(КлючИЗначение.Значение, БлокируемыйЭлемент); - Если ТипЗнч(БлокируемыйЭлемент) = Тип("ПолеHTMLДокумента") Тогда - ПолеТекста = ирОбщий.ОболочкаПоляТекстаЛкс(БлокируемыйЭлемент); - #Если Сервер И Не Сервер Тогда - ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - КлючИЗначение.Значение.ТолькоПросмотр = ПолеТекста.ТолькоПросмотр(); - ПолеТекста.ТолькоПросмотр(Истина); - Иначе - Попытка - БлокируемыйЭлемент.ТолькоПросмотр = Истина; - Исключение - БлокируемыйЭлемент.Доступность = Ложь; - КонецПопытки; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ТипЗнч(ОписаниеЗадания.Кнопка) = Тип("КнопкаКоманднойПанели") Тогда - ИменаСвойств = "Доступность, Подсказка, Картинка, Отображение"; - Иначе - ИменаСвойств = "Доступность, Подсказка, Картинка"; - КонецЕсли; - СвойстваКнопки = Новый Структура(ИменаСвойств); - ЗаполнитьЗначенияСвойств(СвойстваКнопки, ОписаниеЗадания.Кнопка, ИменаСвойств); - ОписаниеЗадания.СвойстваКнопки = СвойстваКнопки; - ОписаниеЗадания.Кнопка.Доступность = Истина; - ОписаниеЗадания.Кнопка.Картинка = ирКэш.КартинкаПоИмениЛкс("ирОстановить"); - ОписаниеЗадания.Кнопка.Подсказка = МаркерОтмены + " - " + ОписаниеЗадания.Представление; - Если СвойстваКнопки.Свойство("Отображение") Тогда - ОписаниеЗадания.Кнопка.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка; - КонецЕсли; - Иначе - // Удерживаем основной поток - Если ОписаниеЗадания.Многопоточное Тогда - ФормаЗадания.Открыть(); - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ОтменитьЗаданиеФормыОтложенноЛкс(); - #КонецЕсли - ПодключитьОбработчикОжиданияСПараметрамиЛкс("ОтменитьЗаданиеФормыОтложенноЛкс", Новый Структура("ЭтаФорма, ОписаниеЗадания", ЭтаФорма, ОписаниеЗадания)); - ОжидатьЗавершенияФоновойОперацииЛкс(ФоновоеЗадание, ЭтаФорма, Ложь, ФормаЗадания); - КонецЕсли; - Результат = Неопределено; - ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма, ОписаниеЗадания, Результат); - Возврат Результат; - -КонецФункции - -Функция ОписаниеФоновогоЗаданияФормыЛкс(Имя = "", Метод = "", Параметры = Неопределено, Знач Представление = "", Кнопка = Неопределено, ОбработчикЗавершения = "", АдресРезультата = "", - ОповещатьПользователяОбУспехе = Истина, БлокируемыеЭлементыФормы = Неопределено, Многопоточное = Ложь, ПрефиксыОповещений = Неопределено, Знач ПоддерживаетПрерывание = Ложь) Экспорт - - Если Не ЗначениеЗаполнено(Представление) Тогда - Представление = ПредставлениеИзИдентификатораЛкс(Имя); - КонецЕсли; - ОписаниеЗадания = Новый Структура("Имя, Параметры, Метод, Представление, Кнопка, ОбработчикЗавершения, АдресРезультата, УникальныйИдентификатор, НачалоВыполнения, Состояние, СвойстваКнопки, - |ОповещатьПользователяОбУспехе, БлокируемыеЭлементыФормы, ФормаЗадания, Многопоточное, ПрефиксыОповещений, ПоддерживаетПрерывание"); - ОписаниеЗадания.Имя = Имя; - ОписаниеЗадания.Параметры = Параметры; - ОписаниеЗадания.Метод = Метод; - ОписаниеЗадания.Представление = Представление; - ОписаниеЗадания.Кнопка = Кнопка; - ОписаниеЗадания.ОбработчикЗавершения = ОбработчикЗавершения; - ОписаниеЗадания.АдресРезультата = АдресРезультата; - ОписаниеЗадания.ОповещатьПользователяОбУспехе = ОповещатьПользователяОбУспехе; - ОписаниеЗадания.Многопоточное = Многопоточное; - ОписаниеЗадания.ПрефиксыОповещений = ПрефиксыОповещений; - ОписаниеЗадания.ПоддерживаетПрерывание = ПоддерживаетПрерывание; - Если БлокируемыеЭлементыФормы <> Неопределено Тогда - СтруктураБлокировки = Новый Соответствие; - Для Каждого ЭлементФормы Из БлокируемыеЭлементыФормы Цикл - Если Истина - И Типзнч(ЭлементФормы) = Тип("КнопкаКоманднойПанели") - И ЭлементФормы.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю - Тогда - Для Каждого КнопкаПодменю Из ЭлементФормы.Кнопки Цикл - Если КнопкаПодменю.Доступность Тогда - СтруктураБлокировки.Вставить(КнопкаПодменю, Новый Структура()); - КонецЕсли; - КонецЦикла; - Иначе - СтруктураБлокировки.Вставить(ЭлементФормы, Новый Структура()); - КонецЕсли; - КонецЦикла; - ОписаниеЗадания.БлокируемыеЭлементыФормы = СтруктураБлокировки; - КонецЕсли; - Возврат ОписаниеЗадания; - -КонецФункции - -Функция НовыйАдресРезультатаФоновогоЗаданияФормыЛкс(Знач ЭтаФорма) Экспорт - - ФормаРезультатовЗаданий = ФормаРезультатовЗаданийФормыЛкс(ЭтаФорма); - АдресРезультата = ПоместитьВоВременноеХранилище(Null, ФормаРезультатовЗаданий.УникальныйИдентификатор); - Возврат АдресРезультата; - -КонецФункции - -Функция ФормаРезультатовЗаданийФормыЛкс(Знач ЭтаФорма) Экспорт - - СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); - #Если Сервер И Не Сервер Тогда - СлужебныеДанные = Новый Структура; - #КонецЕсли - Результат = Неопределено; - Если Не СлужебныеДанные.Свойство("ФормаРезультатовЗаданий", Результат) Тогда - Результат = ирОбщий.НоваяФормаРезультатаФоновогоЗаданияЛкс(); - СлужебныеДанные.Вставить("ФормаРезультатовЗаданий", Результат); - КонецЕсли; - Возврат Результат; - -КонецФункции - -// Функция - Проверить завершение фоновых заданий формы лкс -// -// Параметры: -// ЭтаФорма - - -// -// Возвращаемое значение: -// - Булево - активные задания отсутствуют -// -Функция ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(Знач ЭтаФорма, Знач ОписаниеЗаданияОтбора = Неопределено, Результат = Неопределено) Экспорт - - //Если Не ЭтаФорма.Открыта() Тогда - // Возврат Истина; - //КонецЕсли; - СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); - #Если Сервер И Не Сервер Тогда - ЭтаФорма = ПолучитьОбщуюФорму(); - СлужебныеДанные = Новый Структура; - #КонецЕсли - ЗадержкаВызова = 100; - ДлительностьДляЗаголовка = 0; - РазделительДлительности = "-"; - ПозицияРазделителя = Найти(ЭтаФорма.Заголовок, РазделительДлительности); - Если Истина - И ПозицияРазделителя < 10 - И Найти(Лев(ЭтаФорма.Заголовок, ПозицияРазделителя), ":") > 0 - Тогда - ЧистыйЗаголовокФормы = Сред(ЭтаФорма.Заголовок, ПозицияРазделителя + СтрДлина(РазделительДлительности)); - Иначе - ЧистыйЗаголовокФормы = ЭтаФорма.Заголовок; - КонецЕсли; - ФормаРезультата = ФормаРезультатовЗаданийФормыЛкс(ЭтаФорма); - Завершенные = Новый Массив; - ЛиАктивныеЗаданияОтсутствуют = Истина; - Для Каждого КлючИЗначение Из СлужебныеДанные.Задания Цикл - ОписаниеЗадания = КлючИЗначение.Значение; - Если Истина - И ОписаниеЗаданияОтбора <> Неопределено - И ОписаниеЗаданияОтбора <> ОписаниеЗадания - Тогда - Продолжить; - КонецЕсли; - Если ОписаниеЗадания.УникальныйИдентификатор = Неопределено Тогда - // Уже обработано. Защита от зацикливания - Продолжить; - КонецЕсли; - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ОписаниеЗадания.УникальныйИдентификатор); - ФормаЗадания = ФормаЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма); - Если ФормаЗадания <> Неопределено Тогда - Если ФормаЗадания.Отменить Тогда - ОтменитьЗаданиеФормыЛкс(ЭтаФорма, ОписаниеЗадания); - КонецЕсли; - КонецЕсли; - ДлительностьЗадания = ТекущаяДата() - ОписаниеЗадания.НачалоВыполнения; - СостояниеЗадания = ФоновоеЗадание.Состояние; - Если ОписаниеЗадания.Многопоточное Тогда - ПрефиксКлючаПотока = ПрефиксКлючаПотокаЛкс(ЭтаФорма); - КонецЕсли; - ЭтаИлиФормаЗаданияАктивна = Ложь - Или ФормаЗадания = Неопределено - Или Форма_ВводДоступенЛкс(ЭтаФорма) - Или Форма_ВводДоступенЛкс(ФормаЗадания); - Если СостояниеЗадания = СостояниеФоновогоЗадания.Активно Тогда - Если ДлительностьДляЗаголовка < ДлительностьЗадания Тогда - ДлительностьДляЗаголовка = ДлительностьЗадания; - КонецЕсли; - Если ДлительностьЗадания > 20 Тогда - ЗадержкаВызова = Мин(ЗадержкаВызова, 4); - ИначеЕсли ДлительностьЗадания > 10 Тогда - ЗадержкаВызова = Мин(ЗадержкаВызова, 2); - ИначеЕсли ДлительностьЗадания > 5 Тогда - ЗадержкаВызова = Мин(ЗадержкаВызова, 1); - ИначеЕсли ДлительностьЗадания > 2 Тогда - ЗадержкаВызова = Мин(ЗадержкаВызова, 0.5); - Иначе - ЗадержкаВызова = Мин(ЗадержкаВызова, 0.2); - КонецЕсли; - Если ЭтаИлиФормаЗаданияАктивна Тогда - ИзменилиТекстСостояния = ОбработатьСообщенияФоновогоЗаданияЛкс(ФоновоеЗадание, ФормаЗадания, ПрефиксКлючаПотока); - Если ФормаЗадания <> Неопределено Тогда - Если Ложь - Или ИзменилиТекстСостояния И ДлительностьЗадания > 2 - Или ДлительностьЗадания > 4 - Тогда - Если Не ФормаЗадания.Открыта() Тогда - ФормаЗадания.Открыть(); - ЭтаФорма.Открыть(); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Иначе - Если ФормаЗадания.Открыта() Тогда - ФормаЗадания.Закрыть(); - КонецЕсли; - КонецЕсли; - ЛиАктивныеЗаданияОтсутствуют = Ложь; - Результат = Тип("ФоновоеЗадание"); - Иначе - ОписаниеЗадания.Состояние = СостояниеЗадания; - Если СостояниеЗадания = СостояниеФоновогоЗадания.Завершено И ЗначениеЗаполнено(ОписаниеЗадания.АдресРезультата) Тогда - Результат = ПрочитатьРезультатФоновогоЗаданияЛкс(ОписаниеЗадания.АдресРезультата, ФормаРезультата); - Иначе - Результат = Неопределено; - КонецЕсли; - ПараметрыЗадания = ОписаниеЗадания.Параметры; - ДлительностьЗадания = ФоновоеЗадание.Конец - ФоновоеЗадание.Начало; - ДлительностьСтрока = ирОбщий.ПредставлениеДлительностиЛкс(ДлительностьЗадания); - Если СостояниеЗадания = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Ошибка через %1 фонового задания %2: " + ПодробноеПредставлениеОшибкиЛкс(ФоновоеЗадание.ИнформацияОбОшибке), - 1, ДлительностьСтрока, 2, ФоновоеЗадание.Наименование), СтатусСообщения.Внимание); - Результат = ФоновоеЗадание.ИнформацияОбОшибке; - ИначеЕсли Не ЭтаИлиФормаЗаданияАктивна И ОписаниеЗадания.ОповещатьПользователяОбУспехе Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Завершено через %1 фоновое задание %2",, ДлительностьСтрока, 2, ФоновоеЗадание.Наименование)); - КонецЕсли; - ОбработатьЗавершениеЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма, ФоновоеЗадание); - Если ФормаЗадания <> Неопределено Тогда - ФормаЗадания.ПолноеПредставление = ЧистыйЗаголовокФормы + ". " + ФормаЗадания.КраткоеПредставление; - КонецЕсли; - Выполнить("ЭтаФорма." + ОписаниеЗадания.ОбработчикЗавершения + "(СостояниеЗадания, Результат)"); - Завершенные.Добавить(КлючИЗначение.Ключ); - КонецЕсли; - КонецЦикла; - Если Завершенные.Количество() > 0 Тогда - ФлагиПрерыванияЗаданий = ВосстановитьЗначениеЛкс("ФлагиПрерыванияЗаданий"); - Если ФлагиПрерыванияЗаданий <> Неопределено Тогда - Для Индекс = 1 - ФлагиПрерыванияЗаданий.Количество() По 0 Цикл // Обратный обход - ИД = ФлагиПрерыванияЗаданий[-Индекс]; - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИД); - Если ФоновоеЗадание <> Неопределено И ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда - ФлагиПрерыванияЗаданий.Удалить(-Индекс); - КонецЕсли; - КонецЦикла; - СохранитьЗначениеЛкс("ФлагиПрерыванияЗаданий", ФлагиПрерыванияЗаданий); // ЧитаемПишем без блокировки. Поэтому есть незначительная вероятность потери чужого нового флага - КонецЕсли; - КонецЕсли; - Для Каждого Ключ Из Завершенные Цикл - СлужебныеДанные.Задания.Удалить(Ключ); - КонецЦикла; - Если ЗадержкаВызова <> 100 Тогда - ЭтаФорма.Заголовок = ирОбщий.ПредставлениеДлительностиЛкс(ДлительностьДляЗаголовка) + РазделительДлительности + ЧистыйЗаголовокФормы; - ЭтаФорма.ПодключитьОбработчикОжидания("ПроверкаЗавершенияФоновыхЗаданий", ЗадержкаВызова, Истина); - Иначе - ЭтаФорма.Заголовок = ЧистыйЗаголовокФормы; - КонецЕсли; - Возврат ЛиАктивныеЗаданияОтсутствуют; - -КонецФункции - -Процедура ОбработатьЗавершениеЗаданияФормыЛкс(Знач ОписаниеЗадания, Знач ЭтаФорма, Знач ФоновоеЗадание = Неопределено, Знач ПоЗапросуПользователя = Ложь, Знач ЗакрытьФормуЗадания = Ложь) - - Если ФоновоеЗадание = Неопределено Тогда - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ОписаниеЗадания.УникальныйИдентификатор); - КонецЕсли; - Если ОписаниеЗадания.Кнопка <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(ОписаниеЗадания.Кнопка, ОписаниеЗадания.СвойстваКнопки); - КонецЕсли; - Если ОписаниеЗадания.БлокируемыеЭлементыФормы <> Неопределено Тогда - Для Каждого КлючИЗначение Из ОписаниеЗадания.БлокируемыеЭлементыФормы Цикл - ЗаполнитьЗначенияСвойств(КлючИЗначение.Ключ, КлючИЗначение.Значение); - Если ТипЗнч(КлючИЗначение.Ключ) = Тип("ПолеHTMLДокумента") Тогда - ПолеТекста = ирОбщий.ОболочкаПоляТекстаЛкс(КлючИЗначение.Ключ); - #Если Сервер И Не Сервер Тогда - ПолеТекста = Обработки.ирОболочкаПолеТекста.Создать(); - #КонецЕсли - ПолеТекста.ТолькоПросмотр(КлючИЗначение.Значение.ТолькоПросмотр); - КонецЕсли; - КонецЦикла; - КонецЕсли; - ФормаЗадания = ФормаЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма); - ОбработатьСообщенияФоновогоЗаданияЛкс(ФоновоеЗадание, ФормаЗадания); - ОписаниеЗадания.УникальныйИдентификатор = Неопределено; // Защита от зацикливания - ОписаниеЗадания.ФормаЗадания = Неопределено; - Если ФормаЗадания = Неопределено Тогда - Возврат; - КонецЕсли; - ПолеСообщений = ФормаЗадания.ЭлементыФормы.ПолеТекста; - Если ПустаяСтрока(ПолеСообщений.ПолучитьТекст()) Тогда - Если ФормаЗадания.Открыта() Тогда - ФормаЗадания.Закрыть(); - КонецЕсли; - Иначе - Если ПоЗапросуПользователя Тогда - ПолеСообщений.ДобавитьСтроку("Выполнение прервано пользователем!"); - КонецЕсли; - Если Истина - И ЭтаФорма.Открыта() - И Не ФормаЗадания.Открыта() - Тогда - ФормаЗадания.Открыть(); - КонецЕсли; - ЕстьОбычныеСообщения = Истина; - #Если ТолстыйКлиентУправляемоеПриложение Тогда - Если ОписаниеЗадания.ПрефиксыОповещений <> Неопределено Тогда - ТекстОповещения = Новый Массив; - ЕстьОбычныеСообщения = Ложь; - Для Счетчик = 1 По ПолеСообщений.КоличествоСтрок() Цикл - СтрокаСообщения = ПолеСообщений.ПолучитьСтроку(Счетчик); - ЛиОповещение = Ложь; - Для Каждого ПрефиксОповещения Из ОписаниеЗадания.ПрефиксыОповещений Цикл - Если СтрНачинаетсяСЛкс(СтрокаСообщения, ПрефиксОповещения, Истина) Тогда - ЛиОповещение = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - Если ЛиОповещение Тогда - ТекстОповещения.Добавить(СтрокаСообщения); - Иначе - ЕстьОбычныеСообщения = Истина; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если Не ЕстьОбычныеСообщения Тогда - ОписаниеОповещения = Новый ОписаниеОповещения("ОповещениеОткрытьФормуЛкс", ирОбщий, Новый Структура("Форма", ФормаЗадания)); - ПоказатьОповещениеПользователя(, ОписаниеОповещения, СтрСоединитьЛкс(ТекстОповещения, Символы.ПС)); - Форма_АктивироватьОткрытьЛкс(ЭтаФорма); - КонецЕсли; - #КонецЕсли - КонецЕсли; - Если ЗакрытьФормуЗадания Тогда - Если ФормаЗадания.Открыта() Тогда - ФормаЗадания.Закрыть(); - КонецЕсли; - КонецЕсли; - Если ФормаЗадания.Открыта() Тогда - ФормаЗадания.ОбновитьСостояниеЗадания(ФоновоеЗадание); - КонецЕсли; - -КонецПроцедуры - -Процедура ОповещениеОткрытьФормуЛкс(ДопПараметры) Экспорт - ДопПараметры.Форма.Открыть(); -КонецПроцедуры - -Функция ФормаЗаданияФормыЛкс(Знач ОписаниеЗадания, Знач ФормаВладелец) - - ФормаЗадания = ОписаниеЗадания.ФормаЗадания; - Если Истина - И ФормаЗадания = Неопределено - И (Ложь - // Запрещаем использовать форму для однопоточного задания с ожиданием - Или ОписаниеЗадания.Кнопка <> Неопределено - Или ОписаниеЗадания.Многопоточное) - Тогда - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаЗадания = мПлатформа.ПолучитьФорму("ФоновоеЗаданиеФормы", ФормаВладелец, ОписаниеЗадания.Имя); - ФормаЗадания.КраткоеПредставление = ОписаниеЗадания.Представление; - ФормаЗадания.ПолноеПредставление = ОписаниеЗадания.Представление; - ОписаниеЗадания.ФормаЗадания = ФормаЗадания; - КонецЕсли; - Возврат ФормаЗадания; - -КонецФункции - -// Функция - Прочитать результат фонового задания лкс -// -// Параметры: -// АдресРезультата - - -// ФормаРезультата - УправляемаяФорма - Обработка.ирПлатформа.Форма.РезультатФоновогоЗадания, с ее идентификатором создавался адрес временного хранилища -// -// Возвращаемое значение: -// - -// -Функция ПрочитатьРезультатФоновогоЗаданияЛкс(Знач АдресРезультата, Знач ФормаРезультата = Неопределено) Экспорт - - Результат = ПолучитьИзВременногоХранилища(АдресРезультата); - Если Результат = Null И ФормаРезультата <> Неопределено Тогда - // Антибаг платформы https://www.hostedredmine.com/issues/884756 - ФормаРезультата.ОбновитьВременноеХранилище(АдресРезультата); // Тяжелая операция - Результат = ПолучитьИзВременногоХранилища(АдресРезультата); - Если Результат = Null Тогда - ирОбщий.СообщитьЛкс("Не удалось получить результат фонового задания вероятно из-за ошибки платформы https://www.hostedredmine.com/issues/884756. Асинхронность отключена до конца сеанса.", СтатусСообщения.Внимание); - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - мПлатформа.АсинхронностьЗапрещена = Истина; - КонецЕсли; - КонецЕсли; - УдалитьИзВременногоХранилища(АдресРезультата); - Возврат Результат - -КонецФункции - -Процедура ОтменитьФоновоеЗаданиеОтложенноЛкс(Параметры) Экспорт - - ОтменитьФоновоеЗаданиеЛкс(Параметры.ИдентификаторФоновогоЗадания); - -КонецПроцедуры - -Процедура ОтменитьФоновоеЗаданиеЛкс(Знач ИдентификаторИлиФоновоеЗадание) Экспорт - - Если ТипЗнч(ИдентификаторИлиФоновоеЗадание) = Тип("ФоновоеЗадание") Тогда - ФоновоеЗадание = ИдентификаторИлиФоновоеЗадание; - Иначе - Если Не ЗначениеЗаполнено(ИдентификаторИлиФоновоеЗадание) Тогда - Возврат; - КонецЕсли; - ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторИлиФоновоеЗадание); - КонецЕсли; - Если Истина - И ФоновоеЗадание <> Неопределено - И ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно - Тогда - ФоновоеЗадание.Отменить(); - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - ПроверитьОтмененныеФоновыеЗаданияОтложенноЛкс(); - #КонецЕсли - мПлатформа.ОтмененныеФоновыеЗадания.Добавить(ФоновоеЗадание.УникальныйИдентификатор); - ПодключитьГлобальныйОбработчикОжиданияЛкс("ПроверитьОтмененныеФоновыеЗаданияОтложенноЛкс", 2); - КонецЕсли; - -КонецПроцедуры - -Функция ЗагрузитьТабличныйДокументИнтерактивноЛкс(Знач ТабличныйДокумент = Неопределено, выхПолноеИмяФайла = "") Экспорт - - Если ТабличныйДокумент = Неопределено Тогда - ТабличныйДокумент = Новый ТабличныйДокумент; - КонецЕсли; - ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ДиалогВыбораФайла.Заголовок = "Прочитать табличный документ из файла"; - СписокРасширений = Новый СписокЗначений; - СписокРасширений.Добавить("mxl", "Табличный документ"); - СписокРасширений.Добавить("xls", "Лист Excel"); - СписокРасширений.Добавить("xlsx", "Лист Excel"); - СписокРасширений.Добавить("ods", "Open document"); - СписокРасширений.Добавить("txt", "Текстовый документ"); - СписокРасширений.Добавить("csv", "Текстовый документ"); - СписокРасширений.Добавить("dbf", "dBase III"); - Если ирКэш.ЛиПлатформаWindowsЛкс() Тогда - СписокРасширений.Добавить("htm", "HTML документ"); - СписокРасширений.Добавить("html", "HTML документ"); - КонецЕсли; - ДиалогВыбораФайла.Фильтр = ФильтрДляВыбораФайлаЛкс(СписокРасширений,, Ложь); - Если ДиалогВыбораФайла.Выбрать() Тогда - выхПолноеИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла; - ФайлНаДиске = Новый Файл(выхПолноеИмяФайла); - Если Ложь - Или ирОбщий.СтрокиРавныЛкс(ФайлНаДиске.Расширение, ".txt") - Или ирОбщий.СтрокиРавныЛкс(ФайлНаДиске.Расширение, ".csv") - Тогда - ПрочитатьТабличныйДокументИзТекстаЛкс(ТабличныйДокумент, выхПолноеИмяФайла); - ИначеЕсли нРег(ФайлНаДиске.Расширение) = ".dbf" Тогда - ПрочитатьТабличныйДокументИзDBFЛкс(ТабличныйДокумент, выхПолноеИмяФайла); - ИначеЕсли нРег(ФайлНаДиске.Расширение) = ".mxl" Тогда - ТабличныйДокумент.Прочитать(выхПолноеИмяФайла); - ИначеЕсли СтрНачинаетсяСЛкс(ФайлНаДиске.Расширение, ".htm") Тогда - СостояниеЛкс("Запускаем EXCEL"); - ИмяФайлаТаблицы = ПолучитьИмяВременногоФайла("xlsx"); - Эксель = Новый COMОбъект("Excel.Application"); - Эксель.Visible = 1; // Иначе могут появляться невидимые модальные окна - //Эксель.DisplayAlerts = 0; - // https://docs.microsoft.com/ru-ru/office/vba/api/excel.workbooks.open - // (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad) - Книга = Эксель.WorkBooks.Open(выхПолноеИмяФайла, Ложь); - Книга.SaveAs(ИмяФайлаТаблицы, 51); // 51 - xlsx, 56 - xls, 44 - html - Книга.Close(); - Эксель.Quit(); - ТабличныйДокумент.Прочитать(ИмяФайлаТаблицы); - УдалитьФайлы(ИмяФайлаТаблицы); - СостояниеЛкс(""); - Иначе - ТабличныйДокумент.Очистить(); - ТабличныйДокументЧтение = Новый ТабличныйДокумент; - ТабличныйДокументЧтение.Прочитать(выхПолноеИмяФайла); - РезультатВыбора = Неопределено; - Если ТабличныйДокументЧтение.Области.Количество() > 1 Тогда - СписокВыбора = Новый СписокЗначений; - Для Каждого Область Из ТабличныйДокументЧтение.Области Цикл - СписокВыбора.Добавить(Область.Имя); - КонецЦикла; - РезультатВыбора = СписокВыбора.ВыбратьЭлемент("Выберите лист файла"); - КонецЕсли; - Если РезультатВыбора <> Неопределено Тогда - ТабличныйДокумент.Вывести(ТабличныйДокументЧтение.ПолучитьОбласть(РезультатВыбора.Значение)); - Иначе - ТабличныйДокумент.Вывести(ТабличныйДокументЧтение); - КонецЕсли; - КонецЕсли; - Иначе - ТабличныйДокумент = Неопределено; - КонецЕсли; - Возврат ТабличныйДокумент; - -КонецФункции - -Функция СохранитьТабличныйДокументИнтерактивноЛкс(Знач ПолеИлиТабличныйДокумент, выхПолноеИмяФайла = "", Знач СразуОткрыть = Ложь, Знач УстанавливатьПризнакСодержитЗначение = Ложь, - Знач ЭтаФорма = Неопределено) Экспорт - - Если ЭтаФорма <> Неопределено И ТипЗнч(ПолеИлиТабличныйДокумент) = Тип("ПолеТабличногоДокумента") Тогда - ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(ЭтаФорма, ПолеИлиТабличныйДокумент); - КонецЕсли; - Если Не ЗначениеЗаполнено(выхПолноеИмяФайла) Тогда - ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); - ДиалогВыбораФайла.Заголовок = "Записать табличный документ в файл"; - СписокРасширений = Новый СписокЗначений; - СписокРасширений.Добавить("mxl", "Табличный документ"); - СписокРасширений.Добавить("xls", "Лист Excel"); - СписокРасширений.Добавить("xlsx", "Лист Excel"); - СписокРасширений.Добавить("ods", "Open document"); - СписокРасширений.Добавить("txt", "Текстовый документ"); - ДиалогВыбораФайла.Фильтр = ФильтрДляВыбораФайлаЛкс(СписокРасширений,, Ложь); - Если Не ДиалогВыбораФайла.Выбрать() Тогда - Возврат Ложь; - КонецЕсли; - выхПолноеИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла; - КонецЕсли; - ТабличныйДокумент = Новый ТабличныйДокумент; - ТабличныйДокумент.ВставитьОбласть(ПолеИлиТабличныйДокумент.Область(),,, Ложь); - Файл = Новый файл(выхПолноеИмяФайла); - ТипФайла = ТипФайлаТабличногоДокумента.MXL; - Если ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".xls") Тогда - ТипФайла = ТипФайлаТабличногоДокумента.XLS; - Если УстанавливатьПризнакСодержитЗначение Тогда - УстановитьПризнакСодержитЗначение(ТабличныйДокумент); - КонецЕсли; - ИначеЕсли ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".xlsx") Тогда - ТипФайла = ТипФайлаТабличногоДокумента.XLSX; - Если УстанавливатьПризнакСодержитЗначение Тогда - УстановитьПризнакСодержитЗначение(ТабличныйДокумент); - КонецЕсли; - ИначеЕсли ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".ods") Тогда - ТипФайла = ТипФайлаТабличногоДокумента.ODS; - ИначеЕсли ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".txt") Тогда - ТипФайла = ТипФайлаТабличногоДокумента.TXT; - КонецЕсли; - Попытка - ТабличныйДокумент.Записать(выхПолноеИмяФайла, ТипФайла); - Исключение - СообщитьЛкс(ОписаниеОшибки()); - Возврат Ложь; - КонецПопытки; - Если Не СразуОткрыть И Не ирОбщий.СтрокиРавныЛкс(Файл.Расширение, ".mxl") Тогда - Ответ = Вопрос("Хотите сразу открыть сохраненный файл в сопоставленном приложении?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); - СразуОткрыть = Ответ = КодВозвратаДиалога.Да; - КонецЕсли; - Если СразуОткрыть Тогда - ЗапуститьПриложение(выхПолноеИмяФайла); - КонецЕсли; - Возврат Истина; - -КонецФункции - -Процедура УстановитьПризнакСодержитЗначение(ТабличныйДокумент) - - #Если Сервер И Не Сервер Тогда - ТабличныйДокумент = Новый ТабличныйДокумент; - #КонецЕсли - // Проставим свойство СодержитЗначение, чтобы при открытии в EXCEL в строках типа "000534235" не устанавливался формат "Почтовый" - // и не пропадали лидирующие нули при входе в режим редактирования ячейки - Для ТекущаяКолонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл - Для ТекущаяСтрока = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл - ОбластьЯчейки = ТабличныйДокумент.Область(ТекущаяСтрока, ТекущаяКолонка); - ОбластьЯчейки.СодержитЗначение = Истина; - КонецЦикла; - КонецЦикла; - -КонецПроцедуры - -Функция ПодтверждениеОперацииСУБДЛкс() Экспорт - - Если ПолучитьСоединениеСУБД() = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - ИмяБД = ПараметрыСоединенияADOЭтойБДЛкс().ИмяБД; - Возврат Вопрос("Вы осознаете риски и ответственность за использование прямого доступа к данным базы """ + ИмяБД + """ и нарушение лицензионного соглашения 1С?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да; - -КонецФункции - -// РежимИмяСиноним - Булево - Истина - Имя -Процедура НастроитьАвтоТабличноеПолеДинамическогоСпискаЛкс(ОсновнойЭУ, РежимИмяСиноним = Ложь, РазрешитьСортировку = Истина, ПредельноеКоличествоВидимыхКолонок = 30) Экспорт - - #Если Сервер И Не Сервер Тогда - ОсновнойЭУ = Новый ТабличноеПоле; - #КонецЕсли - // Антибаг платформы 8.2-8.3 для регистра бухгалтерии https://partners.v8.1c.ru/forum/t/1372055/m/1372055 - ДинамическийСписок = ирОбщий.ДанныеЭлементаФормыЛкс(ОсновнойЭУ); - ОбъектМД = Метаданные.НайтиПоТипу(ТипЗнч(ДинамическийСписок)); - ПолноеИмяМД = ОбъектМД.ПолноеИмя(); - ПолноеИмяТаблицы = ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД); - ТипТаблицы = ирОбщий.ТипТаблицыБДЛкс(ПолноеИмяТаблицы); - КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяМД); - КорневойТип = ПеревестиВРусский(КорневойТип); - СтруктураХраненияТаблицы = СтруктураХраненияОсновнойТаблицыМДЛкс(ПолноеИмяМД); - ИмяПроведен = ПеревестиСтроку("Проведен"); - ИмяСсылка = ПеревестиСтроку("Ссылка"); - ИмяАктивность = ПеревестиСтроку("Активность"); - ИмяПометкаУдаления = ПеревестиСтроку("ПометкаУдаления"); - ИмяПредопределенный = ПеревестиСтроку("Предопределенный"); - ИмяКартинка = ПеревестиСтроку("Картинка"); - ВерсияПлатформы = ирКэш.НомерВерсииПлатформыЛкс(); - Если КорневойТип <> "РегистрБухгалтерии" Тогда - ОсновнойЭУ.СоздатьКолонки(); - КонецЕсли; - Попытка - КолонкиСписка = ОсновнойЭУ.Значение.Колонки; - Исключение - // Перечисление - КонецПопытки; - КолонкиТП = ОсновнойЭУ.Колонки; - КолонкаТП = КолонкиТП.Найти(ИмяКартинка); - - // Антибаг платформы. Почему то платформа локализует имя этой колонки "Картинка" в зависимости от кода языка интерфейса. - Если КолонкаТП = Неопределено Тогда - КолонкаТП = КолонкиТП.Найти("Picture"); - КонецЕсли; - Если КолонкаТП = Неопределено Тогда - КолонкаТП = КолонкиТП.Найти("Картинка"); - КонецЕсли; - - Если КолонкаТП = Неопределено Тогда - КолонкаКартинки = КолонкиТП.Добавить(ИмяКартинка); - КолонкаКартинки.ОтображатьСтандартнуюКартинку = Истина; - КолонкаКартинки.Ширина = МинимальнаяШиринаКолонкиЛкс(); - КолонкаКартинки.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять; - КолонкаКартинки.ТекстШапки = ""; - КонецЕсли; - Попытка - НастройкаПорядка = ОсновнойЭУ.НастройкаПорядка; - Исключение - НастройкаПорядка = Неопределено; - КонецПопытки; - МинимальнаяШиринаКолонки = МинимальнаяШиринаКолонкиЛкс(); - КоличествоВидимыхКолонок = 0; - Если КолонкиСписка <> Неопределено Тогда - // Здесь добавляется колонка "Предопределенный", т.к. в отборе она отсутствует - Для Каждого КолонкаСписка Из ОсновнойЭУ.Значение.Колонки Цикл - КолонкаТП = КолонкиТП.Найти(КолонкаСписка.Имя); - Если КолонкаТП = Неопределено Тогда - КолонкаТП = КолонкиТП.Добавить(КолонкаСписка.Имя); - Попытка - КолонкаТП.Данные = КолонкаСписка.Имя; - Исключение - // Например поле "Ссылка" почему то является недопустимым - КолонкиТП.Удалить(КолонкаТП); - Продолжить; - КонецПопытки; - КонецЕсли; - КолонкаТП.ТекстШапки = КолонкаСписка.Имя; - ЭлементОтбора = ОсновнойЭУ.Значение.Отбор.Найти(КолонкаСписка.Имя); - Если Истина - И КолонкаСписка.Имя = ИмяПредопределенный - И ЭлементОтбора = Неопределено - Тогда - КолонкаТП.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ирПредопределенный"); - НастроитьКолонкуКартинкиЛкс(КолонкаТП); - КонецЕсли; - Если ЭлементОтбора <> Неопределено И ЛиОписаниеТиповБулевоЛкс(ЭлементОтбора.ТипЗначения) Тогда // https://www.hostedredmine.com/issues/905911 - Если КолонкаСписка.Имя = ИмяПометкаУдаления Тогда - КолонкаТП.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ПометитьНаУдаление"); - НастроитьКолонкуКартинкиЛкс(КолонкаТП); - КонецЕсли; - Если КолонкаСписка.Имя = ИмяПроведен Тогда - КолонкаТП.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("Провести"); - НастроитьКолонкуКартинкиЛкс(КолонкаТП); - КонецЕсли; - Если КолонкаСписка.Имя = ИмяАктивность Тогда - КолонкаТП.КартинкаШапки = ирКэш.КартинкаПоИмениЛкс("ПереключитьАктивность"); - НастроитьКолонкуКартинкиЛкс(КолонкаТП); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Попытка - ЛиРедактированиеВСписке = ОсновнойЭУ.СпособРедактирования = СпособРедактированияСписка.ВСписке; - Исключение - ЛиРедактированиеВСписке = Ложь; - КонецПопытки; - Для Каждого ЭлементОтбора Из ОсновнойЭУ.Значение.Отбор Цикл - #Если Сервер И Не Сервер Тогда - ЭлементОтбора = Новый ПостроительЗапроса; - ЭлементОтбора = ЭлементОтбора.Отбор.Добавить(); - #КонецЕсли - // Антибаг 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1002521#1002521 - Если Истина - И ЛиКорневойТипРегистраБухгалтерииЛкс(КорневойТип) - И (Ложь - Или Найти(ЭлементОтбора.Имя, "ВидСубконтоДт") = 1 - Или Найти(ЭлементОтбора.Имя, "ВидСубконтоКт") = 1) - Тогда - Продолжить; - КонецЕсли; - Если Истина - И ЛиКорневойТипСсылкиЛкс(КорневойТип) - И ЭлементОтбора.Имя = ИмяСсылка - Тогда - // Добавить для него колонку можно, но платформа не будет выводить в нее данные и потому она будет просто занимать площадь - Продолжить; - КонецЕсли; - Если КолонкиСписка <> Неопределено Тогда - АвтоудалениеКолонки = ЛиОписаниеТиповНеограниченнойСтрокиЛкс(ЭлементОтбора.ТипЗначения); - Попытка - КолонкиСписка.Добавить(ЭлементОтбора.Имя, АвтоудалениеКолонки); - Исключение - // Сюда попадает например элемент отбора от критерия отбора - ОписаниеОшибки = ОписаниеОшибки(); // Для отладки - Продолжить; - КонецПопытки; - КонецЕсли; - КолонкаТП = КолонкиТП.Найти(ЭлементОтбора.Имя); - Если КолонкаТП = Неопределено Тогда - КолонкаТП = КолонкиТП.Добавить(); - КонецЕсли; - //Колонка.ТекстШапки = ЭлементОтбора.Представление; - Если КорневойТип <> "Перечисление" Тогда - Если ЛиРедактированиеВСписке Тогда - КолонкаТП.УстановитьЭлементУправления(Тип("ПолеВвода")); - КонецЕсли; - ДанныеПодключены = Ложь; - Попытка - КолонкаТП.Данные = ЭлементОтбора.Имя; - ДанныеПодключены = Истина; - Исключение - // Например поле "Ссылка" почему то является недопустимым - ОписаниеОшибки = ОписаниеОшибки(); // Для отладки - КонецПопытки; - Если Не ДанныеПодключены Тогда - КолонкаТП.Видимость = Ложь; - КонецЕсли; - КонецЕсли; - Если КоличествоВидимыхКолонок > ПредельноеКоличествоВидимыхКолонок Тогда - КолонкаТП.Видимость = Ложь; - Иначе - КоличествоВидимыхКолонок = КоличествоВидимыхКолонок + 1; - КонецЕсли; - КолонкаТП.Имя = ЭлементОтбора.Имя; - Если КолонкаТП.Ширина = -1 Тогда - КолонкаТП.Ширина = ШиринаТипаЗначенияЛкс(ЭлементОтбора.ТипЗначения); - КонецЕсли; - Если Истина - И ЭлементОтбора.ТипЗначения.СодержитТип(Тип("Дата")) - И ЭлементОтбора.ТипЗначения.Типы().Количество() = 1 - Тогда - КолонкаТП.ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять; - КонецЕсли; - - // Антибаг платформы 8.2-8.3.6 https://partners.v8.1c.ru/forum/t/1337995/m/1337995 - Если Истина - И ВерсияПлатформы < 803008 - И ЭлементОтбора.ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор")) - Тогда - СообщитьЛкс(СтрШаблонИменЛкс("Колонка %1 типа УникальныйИдентификатор не будет отображаться из-за ошибки платформы",, ЭлементОтбора.Имя)); - КолонкиТП.Удалить(КолонкаТП); - Продолжить; - КонецЕсли; - Если РазрешитьСортировку И НастройкаПорядка <> Неопределено Тогда - ЭлементУправленияПорядком = НастройкаПорядка.Найти(ЭлементОтбора.Имя); - Если ЭлементУправленияПорядком <> Неопределено Тогда - ЭлементУправленияПорядком.Доступность = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Если КолонкиСписка <> Неопределено Тогда - Для Каждого ЭлементНастройкиОтбора Из ОсновнойЭУ.НастройкаОтбора Цикл - ЭлементНастройкиОтбора.Доступность = Истина; - КонецЦикла; - ПостроительПорядка = ОсновнойПорядокТаблицыБДЛкс(ПолноеИмяТаблицы, ирОбщий.ПорядокВСтрокуЛкс(ДинамическийСписок.Порядок), ОсновнойЭУ.НастройкаПорядка, СтруктураХраненияТаблицы); - НовыйПорядок = ПорядокВСтрокуЛкс(ПостроительПорядка.Порядок); - Если ЗначениеЗаполнено(НовыйПорядок) Тогда - // Обязательную установку делаем, чтобы в шапках появились индикаторы сортировки (антибаг платформы) - ДинамическийСписок.Порядок.Установить(НовыйПорядок); - КонецЕсли; - КонецЕсли; - Если ЛиКорневойТипСсылкиЛкс(КорневойТип) Тогда - КолонкаИдентификатора = КолонкиТП.Добавить("ИдентификаторСсылкиЛкс"); - КолонкаИдентификатора.ТекстШапки = "Идентификатор ссылки"; - КонецЕсли; - Если ЛиКорневойТипОбъектаСПредопределеннымЛкс(КорневойТип) Тогда - КолонкаИдентификатора = КолонкиТП.Добавить("ИмяПредопределенныхДанных"); - КолонкаИдентификатора.ТекстШапки = "Имя предопределенных данных"; - КолонкаИдентификатора.Видимость = Ложь; - КонецЕсли; - НастроитьЗаголовкиАвтоТабличногоПоляДинамическогоСпискаЛкс(ОсновнойЭУ, РежимИмяСиноним); - -КонецПроцедуры - -Процедура Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник) Экспорт - - Если ИмяСобытия = "ЗакрытьВсеФормыИнструментовРазработчика" Тогда - Если ЭтаФорма.Открыта() Тогда - ЭтаФорма.Закрыть(); - Если ЭтаФорма.Открыта() Тогда - Параметр.Отказ = Истина; - КонецЕсли; - КонецЕсли; - ИначеЕсли ИмяСобытия = "ЕстьОткрытыеФормыИнструментовРазработчика" Тогда - Если ЭтаФорма.Открыта() Тогда - Параметр.Ответ = Истина; - КонецЕсли; - ИначеЕсли ИмяСобытия = "ОбнаружитьСебя" Тогда - ИмяФормы = ПолноеИмяФормыЛкс(ЭтаФорма); - Если Не ЗначениеЗаполнено(ИмяФормы) Тогда - Попытка - ИмяФормы = ЭтаФорма.ЭтотОбъект.Метаданные().ПолноеИмя(); - Исключение - КонецПопытки; - КонецЕсли; - Если Не ЗначениеЗаполнено(ИмяФормы) Тогда - ИмяФормы = "Неизвестная форма"; - КонецЕсли; - СообщитьЛкс(ИмяФормы); - ИначеЕсли ИмяСобытия = "ОбнаружитьАктивную" Тогда - Если Форма_ВводДоступенЛкс(ЭтаФорма) Тогда - Параметр.Результат = ЭтаФорма; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Умеет определять активную форму инструментов и управляемую форму в управляемом приложении -Функция АктивнаяФормаЛкс() Экспорт - - Результат = АктивнаяУправляемаяФормаЛкс(); - Если Результат = Неопределено Тогда - Структура = Новый Структура("Результат"); - Структура.Вставить("ПроверятьПолеHTML", Ложь); - ОповеститьФормыПодсистемыЛкс("ОбнаружитьАктивную", Структура); - Если Структура.Результат = Неопределено Тогда - Структура.Вставить("ПроверятьПолеHTML", Истина); - ОповеститьФормыПодсистемыЛкс("ОбнаружитьАктивную", Структура); - КонецЕсли; - Результат = Структура.Результат; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Процедура ОткрытьФайлСПредупреждениемЛкс(ИмяФайла, СтандартнаяОбработка = Неопределено) Экспорт - - СтандартнаяОбработка = Ложь; - Ответ = Вопрос("Вы уверены, что хотите открыть """ + ИмяФайла + """?", РежимДиалогаВопрос.ОКОтмена); - Если Ответ = КодВозвратаДиалога.ОК Тогда - ЗапуститьПриложение(ИмяФайла); - КонецЕсли; - -КонецПроцедуры - -// Создает новый экземпляр обработки и открывает его форму. -// -// Параметры: -// Объект - ОбработкаОбъект, ОтчетОбъект. -// -// Возвращаемое значение: -// Форма. -// -Функция ОткрытьНовоеОкноФормыЛкс(ЭтотОбъект) Экспорт - - Если Ложь - Или ТипЗнч(ЭтотОбъект) = Тип("Форма") - Или ТипЗнч(ЭтотОбъект) = Тип("УправляемаяФорма") - Тогда - СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтотОбъект); - Если СлужебныеДанныеФормы.Свойство("МенеджерСохраненияНастроек") Тогда - ирОбщий.СохранитьНастройкуФормыЛкс(ЭтотОбъект); - КонецЕсли; - Результат = ПолучитьФормуЛкс(ПолноеИмяФормыЛкс(ЭтотОбъект),,, Новый УникальныйИдентификатор); - Иначе - Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда - НовыйОбъект = ПолучитьМенеджерЛкс(ЭтотОбъект).Создать(); - Иначе - ПолноеИмяОбъекта = ЭтотОбъект.Метаданные().ПолноеИмя(); - НовыйОбъект = СоздатьОбъектПоПолномуИмениМетаданныхЛкс(ПолноеИмяОбъекта); - КонецЕсли; - Результат = НовыйОбъект.ПолучитьФорму(); - КонецЕсли; - Результат.Открыть(); - Возврат Результат; - -КонецФункции - -Функция ПолучитьФормуЛкс(ПолноеИмяФормы, Параметры = Неопределено, Владелец = Неопределено, Уникальность = Неопределено, Окно = Неопределено, ТолькоВнешниеФормы = Ложь) Экспорт - - Фрагменты = СтрРазделитьЛкс(ПолноеИмяФормы); - #Если Сервер И Не Сервер Тогда - Фрагменты = Новый Массив; - #КонецЕсли - Если Истина - И Фрагменты.Количество() = 4 - И СтрокиРавныЛкс(Фрагменты[2], "Форма") - Тогда - ИмяФормы = Фрагменты[3]; - Иначе - ИмяФормы = Неопределено; - КонецЕсли; - Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда - //ирПортативный #Если Сервер И Не Сервер Тогда - // Такой прием нужен для обхода ошибка компиляции в портативном режиме - #Если Сервер И Не Сервер Тогда - Фрагменты = Новый Массив; - #КонецЕсли - // http://www.hostedredmine.com/issues/883626 - Если Истина - И (Фрагменты[0] = "Обработка" Или Фрагменты[0] = "Отчет") - И Фрагменты.Количество() > 2 - И Найти(Фрагменты[1], "ир") = 1 - И Фрагменты[1] <> Метаданные.Обработки.ирДинамическийСписок.Имя - Тогда - Если Не ТолькоВнешниеФормы Тогда - ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(Фрагменты[0] + "." + Фрагменты[1]); - #Если Сервер И Не Сервер Тогда - ОбъектМД = Метаданные.Обработки.ирАнализДанных; - #КонецЕсли - КонецЕсли; - Если ОбъектМД = Неопределено Тогда - ВызватьИсключение "Не найден объект метаданных " + ПолноеИмяФормы; - КонецЕсли; - Если ОбъектМД = Метаданные.Обработки.ирПлатформа Тогда - Менеджер = ирКэш.Получить(); // Так управляемые формы нельзя получать - Иначе - Менеджер = Новый (ПеревестиСтроку(Фрагменты[0]) + ПеревестиСтроку("Менеджер") + "." + Фрагменты[1]); - КонецЕсли; - Если Не ЗначениеЗаполнено(ИмяФормы) И ОбъектМД.ОсновнаяФорма <> Неопределено Тогда - // Нужно для отчетов. Иначе будет ошибка "неизвестный идентификатор формы" - ИмяФормы = ОбъектМД.ОсновнаяФорма.Имя; - КонецЕсли; - Результат = Менеджер.ПолучитьФорму(ИмяФормы, Владелец, Уникальность); - КонецЕсли; - Если Результат = Неопределено Тогда - // Форма не инструмента или управляемая форма инструмента или форма отчета подсистемы при запрещенном использовании обычных форм - Результат = ПолучитьФорму(ПолноеИмяФормы, Параметры, Владелец, Уникальность, Окно); - КонецЕсли; - //Если Найти(ПолноеИмяФормы, "Обработка.ирПлатформа.") = 1 Тогда - // Попытка - // ЭтоЗапрещено = Результат.ЭтотОбъект.Метаданные().ПолноеИмя() = ПеревестиСтроку("Обработка") + ".ирПлатформа"; - // Исключение - // ЭтоЗапрещено = Ложь; - // КонецПопытки; - // Если ЭтоЗапрещено Тогда - // СообщитьЛкс("Создан лишний экземпляр обработки ирПлатформа"); - // КонецЕсли; - //КонецЕсли; - //ирПортативный #КонецЕсли - Иначе - Если Не ТолькоВнешниеФормы Тогда - ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(Фрагменты[0] + "." + Фрагменты[1]); - КонецЕсли; - Если ОбъектМД = Неопределено Тогда - Если Фрагменты[1] = "ирПортативный" Тогда - Результат = ирПортативный.ПолучитьФорму(ИмяФормы, Владелец, Уникальность); - Иначе - ТипМетаданных = Фрагменты[0]; - Менеджер = ирПортативный.ПолучитьМенеджерТипаМетаданныхЛкс(ТипМетаданных); - ПолноеИмяФайла = ирПортативный.ПолноеИмяФайлаПортативногоОбъектаМетаданныхЛкс(Фрагменты[1], ТипМетаданных); - Результат = Менеджер.ПолучитьФорму(ПолноеИмяФайла, ИмяФормы, Владелец, Уникальность); - КонецЕсли; - Иначе - Результат = ирПортативный.ПолучитьФормуЛкс(ПолноеИмяФормы, Параметры, Владелец, Уникальность, Окно); - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ПараметрыБыстрогоСозданияФормыЛкс() Экспорт - - Возврат Новый Структура("АвтоТест"); - -КонецФункции - -Функция ОписаниеОповещенияЛкс(ИмяМетода, Модуль) Экспорт - ОписаниеОповещения = Вычислить("Новый ОписаниеОповещения(ИмяМетода, Модуль)"); // В 8.2 нет типа ОписаниеОповещения - Возврат ОписаниеОповещения; -КонецФункции - -Процедура ЗаполнитьСписокВыбораПоляСортировкиТабличногоПоляЛкс(Знач СписокВыбора, Знач ТабличноеПоле) Экспорт - - #Если Сервер И Не Сервер Тогда - СписокВыбора = Новый СписокЗначений; - #КонецЕсли - СписокВыбора.Очистить(); - Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл - Если Истина - И ЗначениеЗаполнено(КолонкаТП.Данные) - И (КолонкаТП.Видимость Или КолонкаТП.ИзменятьВидимость) - //И Не (КолонкаТП.ТипЗначения.СодержитТип(Тип("УникальныйИдентификатор")) И КолонкаТП.ТипЗначения.Типы() = 1) - Тогда - СписокВыбора.Добавить(КолонкаТП.Данные + " Убыв", КолонкаТП.ТекстШапки + " Убыв"); - СписокВыбора.Добавить(КолонкаТП.Данные + " Возр", КолонкаТП.ТекстШапки + " Возр"); - КонецЕсли; - КонецЦикла; - СписокВыбора.СортироватьПоПредставлению(); - -КонецПроцедуры - -Функция СсылкаОсновногоОбъектаФормыЛкс(Знач ТекущаяФорма) Экспорт - - ИмяОсновногоРеквизита = "Объект"; - Попытка - Ссылка = ТекущаяФорма[ИмяОсновногоРеквизита].Ссылка; - Исключение - ИмяОсновногоРеквизита = ирОбщий.ПеревестиСтроку(ИмяОсновногоРеквизита); - Ссылка = Неопределено; - КонецПопытки; - Если Ссылка = Неопределено Тогда - Попытка - Ссылка = ТекущаяФорма[ИмяОсновногоРеквизита].Ссылка; - Исключение - Ссылка = Неопределено; - КонецПопытки; - КонецЕсли; - Возврат Ссылка; - -КонецФункции - -Функция ЧислоHEXВЦветЛкс(ЧислоHEX) Экспорт - - Красный = СтрокаHEXtoINTЛкс(Лев(ЧислоHEX, 2)); - Зеленый = СтрокаHEXtoINTЛкс(Сред(ЧислоHEX, 3, 2)); - Синий = СтрокаHEXtoINTЛкс(Сред(ЧислоHEX, 5, 2)); - Результат = Новый Цвет(Красный, Зеленый, Синий); - Возврат Результат; - -КонецФункции - -Функция ПолучитьСхемуКолонокМакетаКомпоновкиДанныхЛкс(МакетКомпоновки) Экспорт - - #Если Сервер И Не Сервер Тогда - МакетКомпоновки = Новый МакетКомпоновкиДанных; - #КонецЕсли - СхемаКолонок = Новый Структура; - - // Схема колонок строится негарантировано, т.к. платформа не предоставляет нужных данных - ОписанияМакетовОбластей = МакетКомпоновки.Макеты; - Если ОписанияМакетовОбластей.Количество() > 0 Тогда - ЯчейкиЗаголовка = ОписанияМакетовОбластей[0].Макет.Ячейки; - Если ЯчейкиЗаголовка <> Неопределено Тогда - КоличествоЯчеекЗаголовка = ЯчейкиЗаголовка.Количество(); - Для Индекс = 0 По КоличествоЯчеекЗаголовка - 1 Цикл - Для Каждого ОписаниеМакетаОбласти Из ОписанияМакетовОбластей Цикл - // Здесь подсказка криво работает из-за кривого синтакс-помощника 8.2.13.205 - // http://partners.v8.1c.ru/forum/thread.jsp?id=898023#898023 - ЯчейкаМакетаОбласти = ОписаниеМакетаОбласти.Макет.Ячейки[Индекс]; - Если ТипЗнч(ЯчейкаМакетаОбласти) <> Тип("ЯчейкаМакетаКоллекцииЗначенийОбластиКомпоновкиДанных") Тогда - Продолжить; - КонецЕсли; - ПараметрЯчейки = ЯчейкаМакетаОбласти.Значение; - Если ПараметрЯчейки = Неопределено Тогда - Продолжить; - КонецЕсли; - Выражение = ОписаниеМакетаОбласти.Параметры["" + ПараметрЯчейки].Выражение; - ПозицияТочки = Найти(Выражение, "."); - Если Ложь - Или ПозицияТочки = 0 - Или Найти(Выражение, " ") > 0 - Или Найти(Выражение, "(") > 0 - Тогда - //ИмяПоля = ""; - Продолжить; - Иначе - ИмяПоля = Сред(Выражение, ПозицияТочки + 1); - КонецЕсли; - СхемаКолонок.Вставить(ЯчейкиЗаголовка[Индекс].Имя, ИмяПоля); - Прервать; - КонецЦикла; - КонецЦикла; - КонецЕсли; - КонецЕсли; - Возврат СхемаКолонок; - -КонецФункции - -// Параметры: -// Значение - -// ОчиститьПередУстановкой - Булево -// УстановитьТекст - Булево -// УстановитьЗначение - Булево -// -Функция БуферОбменаПриложения_УстановитьЗначениеЛкс(Знач Значение, Знач УстановитьПредставление = Истина) Экспорт - - Если ТипЗнч(Значение) = Тип("Строка") Тогда - Значение = Неопределено; - КонецЕсли; - //ФорматБуфераОбмена1С = ирКэш.ФорматБуфераОбмена1СЛкс(); - Если ЛиСсылкаНаОбъектБДЛкс(Значение) Тогда - ДобавитьСсылкуВИсториюРаботыЛкс(Значение); - КонецЕсли; - Если ЛиСсылкаНаОбъектБДЛкс(Значение) Тогда - ДобавитьОбъектВБуферСравненияЛкс(Значение); - КонецЕсли; - Если УстановитьПредставление Тогда - ЗначениеПредставление = "" + Значение; - ТекстВБуферОбменаОСЛкс(ЗначениеПредставление); - Иначе - ЗначениеПредставление = ТекстИзБуфераОбменаОСЛкс(); // Для последующео контроля согласованности буфера обмена приложения с буфером обмена ОС; - КонецЕсли; - БуферОбменаПриложения = БуферОбменаПриложенияЛкс(); - БуферОбменаПриложения.Значение = Неопределено; - //БуферОбменаПриложения.ЗначениеСтрока = ОбъектВСтрокуXMLЛкс(Значение,,, Ложь); - БуферОбменаПриложения.ЗначениеСтрока = ЗначениеВСтрокуВнутр(Значение); - БуферОбменаПриложения.ЗначениеПредставление = ЗначениеПредставление; - -КонецФункции - -Функция БуферОбменаПриложения_ЗначениеЛкс(ТекстИзБуфераОбменаОС = "") Экспорт - - //ФорматБуфераОбмена1С = ирКэш.ФорматБуфераОбмена1СЛкс(); - Если Не ЗначениеЗаполнено(ТекстИзБуфераОбменаОС) Тогда - ТекстИзБуфераОбменаОС = ТекстИзБуфераОбменаОСЛкс(); - КонецЕсли; - БуферОбменаПриложения = БуферОбменаПриложенияЛкс(); - Если БуферОбменаПриложения.ЗначениеПредставление <> ТекстИзБуфераОбменаОС Тогда - // буфера обмена приложения не согласован с буфером обмена ОС - БуферОбменаПриложения.Значение = Неопределено; - БуферОбменаПриложения.ЗначениеСтрока = ""; - БуферОбменаПриложения.ЗначениеПредставление = ""; - Возврат Неопределено; - Иначе - Результат = БуферОбменаПриложения.Значение; - Если Истина - И Результат = Неопределено - И ЗначениеЗаполнено(БуферОбменаПриложения.ЗначениеСтрока) - Тогда - //Результат = ОбъектИзСтрокиXMLЛкс(БуферОбменаПриложения.ЗначениеСтрока,,, Ложь); - Результат = ЗначениеИзСтрокиВнутрЛкс(БуферОбменаПриложения.ЗначениеСтрока); - БуферОбменаПриложения.ЗначениеСтрока = ""; - БуферОбменаПриложения.Значение = Результат; - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция БуферОбменаПриложенияЛкс() - - ВнутреннийБуферОбмена = ирКэш.Получить().ВнутреннийБуферОбмена; - Если ВнутреннийБуферОбмена = Неопределено Тогда - ВнутреннийБуферОбмена = Новый Структура("Значение, ЗначениеСтрока, ЗначениеПредставление"); - ирКэш.Получить().ВнутреннийБуферОбмена = ВнутреннийБуферОбмена; - КонецЕсли; - Возврат ВнутреннийБуферОбмена; - -КонецФункции - -Функция ЗначениеИзБуфераОбменаЛкс(РазрешитьСтандартноеЗначение = Ложь) Экспорт - - ТекстИзБуфераОбменаОС = ТекстИзБуфераОбменаОСЛкс(); - ЗначениеСсылки = НавигационнаяСсылкаВЗначениеЛкс(ТекстИзБуфераОбменаОС); - Если ЗначениеСсылки = Неопределено Тогда - ЗначениеСсылки = БуферОбменаПриложения_ЗначениеЛкс(ТекстИзБуфераОбменаОС); - КонецЕсли; - Если ЗначениеСсылки = Неопределено И РазрешитьСтандартноеЗначение Тогда - ЗначениеСсылки = ТекстИзБуфераОбменаОС; - КонецЕсли; - Возврат ЗначениеСсылки; - -КонецФункции - -// . -// Параметры: -// ПолеВвода - ПолеВвода -// Значение - -// Текст - Строка(0,П) -// -Функция ВставитьЗначениеВПолеВводаЛкс(Знач ПолеВвода, Знач НовоеЗначение) Экспорт - - Результат = Ложь; - Если Истина - И НовоеЗначение <> Неопределено - И Не ПолеВвода.ТолькоПросмотр - Тогда - ТипНовогоЗначения = ТипЗнч(НовоеЗначение); - ТекущееЗначение = ДанныеЭлементаФормыЛкс(ПолеВвода); - Если Ложь - Или ТипЗнч(ТекущееЗначение) = ТипНовогоЗначения - Или ПолеВвода.ОграничениеТипа.Типы().Количество() = 0 - Или ПолеВвода.ОграничениеТипа.СодержитТип(ТипНовогоЗначения) - Тогда - Результат = ИнтерактивноЗаписатьВПолеВводаЛкс(ПолеВвода, НовоеЗначение,, Истина); - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -// . -// Параметры: -// ЭтаФорма - Форма - для управляемой формы можно не передавать, она определится автоматически -// -Функция БуферОбмена_ВставитьЛкс(Знач ЭтаФорма = Неопределено, Знач ЛиОсновнаяВставка = Истина) Экспорт - - Если ЭтаФорма = Неопределено Тогда - ЭтаФорма = ирОбщий.АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - Если ЭтаФорма = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Значение = ЗначениеИзБуфераОбменаЛкс(Истина); - Если Значение = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - ВставитьЗначениеВФормуЛкс(ЭтаФорма, Значение, ЛиОсновнаяВставка); - -КонецФункции - -Процедура ВставитьЗначениеВФормуЛкс(Знач ЭтаФорма, Знач Значение, Знач ЛиОсновнаяВставка = Истина) Экспорт - - #Если Сервер И Не Сервер Тогда - ЭтаФорма = ОткрытьФорму(); - #КонецЕсли - ТекущийЭлементФормы = ЭтаФорма.ТекущийЭлемент; - ПродолжитьОбработку = Истина; - ТипЗначения = ТипЗнч(Значение); - Если ТипЗначения = Тип("СписокЗначений") Тогда - Значение = СкопироватьУниверсальнуюКоллекциюЛкс(Значение); - КонецЕсли; - ПутьКДанным = ""; - Если Истина - И ТипЗнч(ЭтаФорма) = Тип("УправляемаяФорма") - И Не ЭтаФорма.ТолькоПросмотр - И ЭтаФорма.ИмяФормы = "ValueListForm" - И ЭтаФорма.ValueList.ТипЗначения.СодержитТип(ТипЗнч(Значение[0].Значение)) - И (Ложь - Или ТипЗначения = Тип("СписокЗначений") И ЭтаФорма.ValueList.ТипЗначения.СодержитТип(ТипЗнч(Значение[0].Значение)) - Или ТипЗначения = Тип("Строка") И ЭтаФорма.ValueList.ТипЗначения.СодержитТип(Тип("Строка"))) - Тогда - Если ТипЗнч(Значение) = Тип("Строка") Тогда - НовоеЗначение = Новый СписокЗначений; - НовоеЗначение.ЗагрузитьЗначения(ирОбщий.СтрРазделитьЛкс(Значение, Символы.ПС, Истина)); - Значение = НовоеЗначение; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - Значение = Новый СписокЗначений; - #КонецЕсли - //СкопироватьУниверсальнуюКоллекциюЛкс(Значение, ЭтаФорма.ValueList); - //ТекущийЭлементФормы.ТекущаяСтрока = ЭтаФорма.ValueList[ЭтаФорма.ValueList.Количество() - 1].ПолучитьИдентификатор(); - ЗагружаемаяТаблица = Новый ТаблицаЗначений; - ЗагружаемаяТаблица.Колонки.Добавить("Value"); - Для Каждого ЭлементСписка Из Значение Цикл - СтрокаСписка = ЗагружаемаяТаблица.Добавить(); - СтрокаСписка.Value = ЭлементСписка.Значение; - КонецЦикла; - ЗагрузитьТаблицуВТабличноеПолеЛкс(ЭтаФорма, ТекущийЭлементФормы, ЗагружаемаяТаблица); - ИначеЕсли Истина - И ЛиОсновнаяВставка - И (Ложь - Или ТипЗнч(ТекущийЭлементФормы) = Тип("ПолеВвода") - Или ТипЗнч(ТекущийЭлементФормы) = Тип("ПолеФормы")) - Тогда - Если Не ЭтаФорма.ТолькоПросмотр Тогда - Если ТипЗначения = Тип("Массив") Тогда - Значение = Значение[0]; - КонецЕсли; - Если ЛиОписаниеТиповСодержитТипЛкс(ТекущийЭлементФормы.ОграничениеТипа, ТипЗнч(Значение)) Тогда - ПродолжитьОбработку = Не ВставитьЗначениеВПолеВводаЛкс(ТекущийЭлементФормы, Значение); - КонецЕсли; - //Если ПродолжитьОбработку И ЗначениеЗаполнено(ТекущийЭлементФормы.Данные) Тогда - // // Например ссылка таблицы внешнего источника в поле ввода не может быть установлена через оповещение выбора - // Попытка - // ЭтаФорма[ТекущийЭлементФормы.Данные] = Значение; - // Исключение - // КонецПопытки; - //КонецЕсли; - КонецЕсли; - ИначеЕсли Ложь - Или ТипЗнч(ТекущийЭлементФормы) = Тип("ТабличноеПоле") - Или ТипЗнч(ТекущийЭлементФормы) = Тип("ТаблицаФормы") - Тогда - ЭлементУправления = Неопределено; - КолонкаТП = Неопределено; - ДобавитьСтроку = Истина - И ТекущийЭлементФормы.ТекущиеДанные = Неопределено - И ТекущийЭлементФормы.ИзменятьСоставСтрок; - ДоступноРедактирование = Истина; - // Если табличное поле находится в режиме редактирования строки, то делам ничего - Если Не ДобавитьСтроку Или ТекущийЭлементФормы.ТекущаяСтрока <> Неопределено Тогда - КолонкаТП = ТабличноеПоле_ТекущаяКолонкаЛкс(ТекущийЭлементФормы, ЭлементУправления, ДоступноРедактирование); - Если Не ЛиОсновнаяВставка И ТипЗнч(ЭлементУправления) = Тип("ПолеВвода") Тогда - ТекущийЭлементФормы.ИзменитьСтроку(); - НачалоКолонки = 0; НачалоСтроки = 0; КонецКолонки = 0; КонецСтроки = 0; - ЭлементУправления.ПолучитьГраницыВыделения(НачалоСтроки, НачалоКолонки, КонецСтроки, КонецКолонки); - Если Ложь - Или НачалоКолонки > 1 - //Или КонецКолонки > 1 - //Или НачалоСтроки > 1 - //Или КонецСтроки > 1 - Тогда - Возврат; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если Истина - И ТипЗнч(ЭтаФорма) = Тип("Форма") - И Не ЭтаФорма.ТолькоПросмотр - И (Ложь - Или ТипЗначения = Тип("СписокЗначений") - Или ТипЗначения = Тип("Строка")) - И (Ложь - Или СлужебныеДанныеФормыЛкс(ЭтаФорма).ИмяФормы = "Обработка.ирПлатформа.Форма.Массив" - Или (Истина - И СлужебныеДанныеФормыЛкс(ЭтаФорма).ИмяФормы = "Обработка.ирПлатформа.Форма.СписокЗначений" - И (Ложь - Или ТипЗначения = Тип("СписокЗначений") И ЛиОписаниеТиповСодержитТипЛкс(ЭтаФорма.ОписаниеТипов, ТипЗнч(Значение[0].Значение)) - Или ТипЗначения = Тип("Строка") И ЛиОписаниеТиповСодержитТипЛкс(ЭтаФорма.ОписаниеТипов, Тип("Строка"))))) - Тогда - Если ТипЗнч(Значение) = Тип("Строка") Тогда - НовоеЗначение = Новый СписокЗначений; - НовоеЗначение.ЗагрузитьЗначения(ирОбщий.СтрРазделитьЛкс(Значение, Символы.ПС, Истина)); - Значение = НовоеЗначение; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - Значение = Новый СписокЗначений; - #КонецЕсли - ЗагружаемаяТаблица = Новый ТаблицаЗначений; - ЗагружаемаяТаблица.Колонки.Добавить("ПредставлениеЗначения"); - Для Каждого ЭлементСписка Из Значение Цикл - СтрокаСписка = ЗагружаемаяТаблица.Добавить(); - СтрокаСписка.ПредставлениеЗначения = ЭлементСписка.Значение; - КонецЦикла; - ЗагрузитьТаблицуВТабличноеПолеЛкс(ЭтаФорма, ТекущийЭлементФормы, ЗагружаемаяТаблица,,,,,,, ЗагружаемаяТаблица.Количество() > 1); - Возврат; - КонецЕсли; - Попытка - РедактированиеВДиалоге = ТекущийЭлементФормы.СпособРедактирования = СпособРедактированияСписка.ВДиалоге; - Исключение - РедактированиеВДиалоге = Ложь; - КонецПопытки; - ДанныеПоля = ДанныеЭлементаФормыЛкс(ТекущийЭлементФормы); - ИмяКолонкиДанных = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТекущийЭлементФормы); - Если Истина - И Не ТекущийЭлементФормы.ТолькоПросмотр - И ИмяКолонкиДанных <> "ПравоеЗначение" - И ТипЗнч(ДанныеПоля) = Тип("ОтборКомпоновкиДанных") - И ТипЗнч(Значение) = Тип("ОтборКомпоновкиДанных") - Тогда - ГруппаПриемник = ДанныеСтрокиТабличногоПоляЛкс(ТекущийЭлементФормы); - Если ТипЗнч(ГруппаПриемник) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ГруппаПриемник = РодительСтрокиДереваЛкс(ГруппаПриемник, ДанныеПоля); - КонецЕсли; - СкопироватьЭлементыКомпоновкиЛкс(ГруппаПриемник, Значение, Ложь,, ТекущийЭлементФормы); - Если ТипЗнч(ТекущийЭлементФормы) = Тип("ТабличноеПоле") Тогда - ТекущийЭлементФормы.Развернуть(ГруппаПриемник); - Если ТекущийЭлементФормы.ИзменяетДанные Тогда - ЭтаФорма.Модифицированность = Истина; - КонецЕсли; - Иначе //Если ТипЗнч(ТекущийЭлементФормы) = Тип("ТаблицаФормы") Тогда - ТекущийЭлементФормы.Развернуть(ДанныеПоля.ПолучитьИдентификаторПоОбъекту(ГруппаПриемник)); - КонецЕсли; - ИначеЕсли Истина - И Не РедактированиеВДиалоге - И Не ЭтаФорма.ТолькоПросмотр - И Не ТекущийЭлементФормы.ТолькоПросмотр - Тогда - Если Истина - И Значение <> Неопределено - И ТекущийЭлементФормы.ИзменятьСоставСтрок - И Не ДобавитьСтроку - И ДоступноРедактирование - И ТипЗнч(ДанныеПоля) <> Тип("Отбор") - И ТипЗнч(ДанныеПоля) <> Тип("ОтборКомпоновкиДанных") - Тогда - //Ответ = Вопрос("Выполнить вставку значения в новую строку (иначе будет выполнена вставка в текущую)?", РежимДиалогаВопрос.ДаНет, , - // КодВозвратаДиалога.Нет); - //Ответ = КодВозвратаДиалога.Нет); - //ДобавитьСтроку = Ответ = КодВозвратаДиалога.Да; - ДобавитьСтроку = Ложь; - КонецЕсли; - Если ДобавитьСтроку Тогда - ТекущийЭлементФормы.ДобавитьСтроку(); - Если КолонкаТП = Неопределено Тогда - КолонкаТП = ТабличноеПоле_ТекущаяКолонкаЛкс(ТекущийЭлементФормы, ЭлементУправления, ДоступноРедактирование); // Текущая колонка могла измениться в ПриНачалеРедактированияСтроки - Иначе - ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(ТекущийЭлементФормы, КолонкаТП); - КонецЕсли; - КонецЕсли; - Если ЭлементУправления <> Неопределено Тогда - Если ТекущийЭлементФормы.ТекущаяСтрока <> Неопределено Тогда - ТекущийЭлементФормы.ИзменитьСтроку(); // Нужно делать, т.к. табличное поле выходит из режима редактирования строки при вызове команды и иногда установке текущей колонки - КонецЕсли; - Если ТекущийЭлементФормы.ТекущиеДанные <> Неопределено Тогда - ТекущиеДанные = ДанныеСтрокиТабличногоПоляЛкс(ТекущийЭлементФормы); - ОграничениеТипа = ЭлементУправления.ОграничениеТипа; - ПродолжитьОбработку = Истина; - Если ТипЗнч(ДанныеПоля) = Тип("ОтборКомпоновкиДанных") Тогда - ДоступноеПоле = ДанныеПоля.ДоступныеПоляОтбора.НайтиПоле(ТекущиеДанные.ЛевоеЗначение); - Если ТипЗначения = Тип("СписокЗначений") Тогда - Если ТекущиеДанные.ВидСравнения <> ВидСравненияКомпоновкиДанных.НеВСписке Тогда - Если ДоступноеПоле.ДоступныеВидыСравнения.НайтиПоЗначению(ВидСравненияКомпоновкиДанных.ВСписке) <> Неопределено Тогда - ТекущиеДанные.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; - КонецЕсли; - ПродолжитьОбработку = ТекущиеДанные.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; - КонецЕсли; - ИначеЕсли Ложь - Или ТекущиеДанные.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке - Или ТекущиеДанные.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке - Тогда - ОграничениеТипа = Новый ОписаниеТипов("СписокЗначений"); - Иначе - ОграничениеТипа = ДоступноеПоле.ТипЗначения; - КонецЕсли; - КонецЕсли; - Если ПродолжитьОбработку И ЛиОписаниеТиповСодержитТипЛкс(ОграничениеТипа, ТипЗначения) Тогда - //ПродолжитьОбработку = Не ВставитьЗначениеВПолеВводаЛкс(ЭлементУправления, Значение); // Так не работает для правых значений компоновки в управляемой форме - ПродолжитьОбработку = Не ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТекущийЭлементФормы, КолонкаТП, Значение,,,, ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных")); - КонецЕсли; - Если ПродолжитьОбработку Тогда - Если ТипЗначения = Тип("Массив") И Значение.Количество() > 0 Тогда - ЗначениеЭлемента = Значение[0]; - ЗначениеИзменено = Истина; - ИначеЕсли ТипЗначения = Тип("СписокЗначений") И Значение.Количество() > 0 Тогда - ЗначениеЭлемента = Значение[0].Значение; - ЗначениеИзменено = Истина; - Иначе - ЗначениеИзменено = Ложь; - КонецЕсли; - Если Истина - И ЗначениеИзменено - И ЛиОписаниеТиповСодержитТипЛкс(ОграничениеТипа, ТипЗнч(ЗначениеЭлемента)) - Тогда - //ПродолжитьОбработку = Не ВставитьЗначениеВПолеВводаЛкс(ЭлементУправления, ЗначениеЭлемента); - ПродолжитьОбработку = Не ИнтерактивноЗаписатьВКолонкуТабличногоПоляЛкс(ТекущийЭлементФормы, КолонкаТП, ЗначениеЭлемента,,,, ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных")); - КонецЕсли; - КонецЕсли; - ИмяКолонкиДанных = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТекущийЭлементФормы); - Если Истина - И ПродолжитьОбработку - И ЗначениеЗаполнено(ИмяКолонкиДанных) - И ЛиВКолонкеДоступнаЭмуляцияИнтерактивногоИзмененияЛкс(КолонкаТП) - И ЛиОписаниеТиповСодержитТипЛкс(ОграничениеТипа, ТипЗнч(Значение)) - Тогда - // Например ссылка таблицы внешнего источника в поле ввода не может быть установлена через оповещение выбора - Если ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда - ИмяКолонкиДанных = ПервыйФрагментЛкс(ИмяКолонкиДанных, "Для"); - КонецЕсли; - Попытка - ТекущиеДанные[ИмяКолонкиДанных] = Значение; - Исключение - КонецПопытки; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ЛиОписаниеТиповСодержитТипЛкс(Знач ОграничениеТипа, Знач Тип) Экспорт - - Возврат Ложь - Или ОграничениеТипа.Типы().Количество() = 0 - Или ОграничениеТипа.СодержитТип(Тип); - -КонецФункции - -Процедура НайтиСсылкуИзБуфераВТаблицеФормыЛкс(ЭтаФорма) Экспорт - #Если Сервер И Не Сервер Тогда - ЭтаФорма = ПолучитьОбщуюФорму(); - #КонецЕсли - ИскомоеЗначение = ЗначениеИзБуфераОбменаЛкс(); - Если ИскомоеЗначение = Неопределено Тогда - Возврат; - КонецЕсли; - ТаблицаФормы = ЭтаФорма.ТекущийЭлемент; - ПродолжитьОбработку = Истина; - ТипЗначения = ТипЗнч(ИскомоеЗначение); - Если ОбщийТипДанныхТабличногоПоляЛкс(ТаблицаФормы) = "Список" Тогда - ДинамическийСписокУстановитьТекущуюСтрокуСКонтролемЛкс(ТаблицаФормы, ИскомоеЗначение, ЭтаФорма); - Иначе - ИмяКолонкиДанных = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТаблицаФормы); - ДанныеТаблицы = ДанныеЭлементаФормыЛкс(ТаблицаФормы,,, Истина); - ТаблицаИлиДеревоЗначений = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТаблицаФормы,, Истина, Ложь,,, ЭтаФорма); - Если ТипЗнч(ТаблицаИлиДеревоЗначений) = Тип("ДеревоЗначений") Тогда - #Если Сервер И Не Сервер Тогда - ТаблицаИлиДеревоЗначений = Новый ДеревоЗначений; - #КонецЕсли - НайденнаяСтрока = ТаблицаИлиДеревоЗначений.Строки.Найти(ИскомоеЗначение, ИмяКолонкиДанных, Истина); - Если НайденнаяСтрока = Неопределено Тогда - СообщитьЛкс("Значение в колонке не найдено"); - Иначе - ПутьКСтроке = Дерево_ПутьСтрокойЛкс(НайденнаяСтрока, "",,, ТаблицаИлиДеревоЗначений); - СтрокаТаблицыФормы = Дерево_НайтиПоПутиСтрокойЛкс(ДанныеТаблицы, "", ПутьКСтроке); - Если ТипЗнч(ТаблицаФормы) = Тип("ТаблицаФормы") Тогда - Если СтрокаТаблицыФормы <> Неопределено Тогда - ТаблицаФормы.ТекущаяСтрока = СтрокаТаблицыФормы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - ТаблицаФормы.ТекущаяСтрока = СтрокаТаблицыФормы; - КонецЕсли; - КонецЕсли; - Иначе - НайденнаяСтрока = ТаблицаИлиДеревоЗначений.Найти(ИскомоеЗначение, ИмяКолонкиДанных); - Если НайденнаяСтрока = Неопределено Тогда - СообщитьЛкс("Значение в колонке не найдено"); - Иначе - СтрокаТаблицыФормы = ДанныеТаблицы[ТаблицаИлиДеревоЗначений.Индекс(НайденнаяСтрока)]; - Если ТипЗнч(ТаблицаФормы) = Тип("ТаблицаФормы") Тогда - ТаблицаФормы.ТекущаяСтрока = СтрокаТаблицыФормы.ПолучитьИдентификатор(); - Иначе - ТаблицаФормы.ТекущаяСтрока = СтрокаТаблицыФормы; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура КопироватьСсылкуАктивнойСтрокиФормыЛкс(Форма) Экспорт - - КлючТекущейСтроки = Неопределено; - КлючиСтрок = КлючиСтрокБДИзТаблицыФормыЛкс(Форма, КлючТекущейСтроки); - Если КлючиСтрок.Количество() > 1 Тогда - БуферОбменаПриложения_УстановитьЗначениеЛкс(МассивВСписокЗначенийЛкс(КлючиСтрок)); - ИначеЕсли КлючТекущейСтроки <> Неопределено Тогда - БуферОбменаПриложения_УстановитьЗначениеЛкс(КлючТекущейСтроки); - КонецЕсли; - -КонецПроцедуры - -// Параметры: -// ЭтаФорма - Форма - для управляемой формы можно не передавать, она определится автоматически -// -Функция БуферОбмена_КопироватьЛкс(Знач ЭтаФорма = Неопределено, Знач УстановитьПредставление = Истина) Экспорт - - Если ЭтаФорма = Неопределено Тогда - ЭтаФорма = ирОбщий.АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - Если ЭтаФорма = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Значение = Форма_ЗначениеТекущегоПоляЛкс(ЭтаФорма, Истина); - Если Значение <> Неопределено Тогда - БуферОбменаПриложения_УстановитьЗначениеЛкс(Значение, УстановитьПредставление); - Иначе - КопироватьСсылкуАктивнойСтрокиФормыЛкс(ЭтаФорма); - КонецЕсли; - -КонецФункции - -Функция Форма_ЗначениеТекущегоПоляЛкс(ЭтаФорма, ДляКопирования = Ложь) Экспорт - - Значение = ирОбщий.ЗначенияВыделенныхЯчеекТаблицыЛкс(ЭтаФорма,, ДляКопирования, Ложь); - ЕстьСсылкиВТекущемПоле = Значение.Количество() > 0 И ЛиСсылкаНаОбъектБДЛкс(Значение[0], Ложь); - Если Значение.Количество() = 1 Тогда - Значение = Значение[0]; - КонецЕсли; - Если Не ЕстьСсылкиВТекущемПоле Тогда - //Значение = Неопределено; - ТекущийЭлементФормы = ЭтаФорма.ТекущийЭлемент; - Если ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеВвода")) Тогда - Значение = ДанныеЭлементаФормыЛкс(ТекущийЭлементФормы); - //Текст = "" + ТекущийЭлементФормы.ВыделенныйТекст; - Если ДляКопирования И ТипЗнч(Значение) = Тип("Строка") Тогда - Значение = Неопределено; - КонецЕсли; - ИначеЕсли Ложь - Или ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеТекстовогоДокумента")) - Или ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеHTMLДокумента")) - Тогда - Если ДляКопирования Тогда - Если Истина - И ирКэш.НомерВерсииПлатформыЛкс() >= 803015 - И ирКэш.НомерВерсииПлатформыЛкс() <= 803017 - И ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеHTMLДокумента")) - Тогда - ПолеТекста = ОболочкаПоляТекстаЛкс(ТекущийЭлементФормы); - // Антибаг платформы. Копирование в буфер обмена не выполняется платформой - ВыделенныйТекст = ПолеТекста.ВыделенныйТекст(); - Если ВыделенныйТекст <> ТекстИзБуфераОбменаОСЛкс() Тогда - // Теряем оформление - ТекстВБуферОбменаОСЛкс(ВыделенныйТекст); - КонецЕсли; - КонецЕсли; - Иначе - ПолеТекста = ОболочкаПоляТекстаЛкс(ТекущийЭлементФормы); - Значение = ПолеТекста.ПолучитьТекст(); - КонецЕсли; - ИначеЕсли ЛиПолеФормыИмеетТипЛкс(ТекущийЭлементФормы, Тип("ПолеТабличногоДокумента")) Тогда - #Если Сервер И Не Сервер Тогда - ТекущийЭлементФормы = Новый ТабличныйДокумент; - #КонецЕсли - Попытка - ДанныеРасшифровки = ЭтаФорма.ДанныеРасшифровки; - Исключение - ДанныеРасшифровки = Неопределено; - КонецПопытки; - Если ТекущийЭлементФормы.ТекущаяОбласть <> Неопределено Тогда - Если ДляКопирования Тогда - // Так будем терять оформление - //Значение = ТекущийЭлементФормы.ТекущаяОбласть.Текст; - //Если ПустаяСтрока(Прав(Значение, 1)) Тогда - // ТекстВБуферОбменаОСЛкс(Значение, ""); - //КонецЕсли; - Если Истина - И ТипЗнч(ДанныеРасшифровки) = Тип("ДанныеРасшифровкиКомпоновкиДанных") - И ТекущийЭлементФормы.ТекущаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Прямоугольник - И ТипЗнч(ТекущийЭлементФормы.ТекущаяОбласть.Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") - Тогда - ВысотаОбласти = ТекущийЭлементФормы.ТекущаяОбласть.Низ - ТекущийЭлементФормы.ТекущаяОбласть.Верх + 1; - Если Истина - И ТекущийЭлементФормы.ТекущаяОбласть.Лево = ТекущийЭлементФормы.ТекущаяОбласть.Право - И ВысотаОбласти > 1 - И ВысотаОбласти < 1000 - Тогда - ТаблицаВыделенныхЯчеек = ТаблицаКлючейИзТабличногоДокументаЛкс(ТекущийЭлементФормы, ДанныеРасшифровки); - Значение = ТаблицаВыделенныхЯчеек.ВыгрузитьКолонку(0); // Может быть больше одной колонки - Иначе - ЭлементРасшифровки = ДанныеРасшифровки.Элементы[ТекущийЭлементФормы.ТекущаяОбласть.Расшифровка]; - Для каждого ЗначениеПоля Из ЭлементРасшифровки.ПолучитьПоля() Цикл - //Если Не ЛиСсылкаНаОбъектБДЛкс(ЗначениеПоля.Значение, Ложь) Тогда - // Продолжить; - //КонецЕсли; - Значение = ЗначениеПоля.Значение; - Прервать; - КонецЦикла; - КонецЕсли; - КонецЕсли; - Иначе - Значение = ТекущийЭлементФормы.ТекущаяОбласть.Текст; - КонецЕсли; - КонецЕсли; - ИначеЕсли Ложь - Или ТипЗнч(ТекущийЭлементФормы) = Тип("ТабличноеПоле") - Или ТипЗнч(ТекущийЭлементФормы) = Тип("ТаблицаФормы") - Тогда - #Если Сервер И Не Сервер Тогда - ТекущийЭлементФормы = Новый ТабличноеПоле; - #КонецЕсли - Если ТекущийЭлементФормы.ТекущаяСтрока <> Неопределено Тогда - ТипСтрокиТаблицы = ТипЗнч(ТекущийЭлементФормы.ТекущаяСтрока); - ДанныеПоля = ДанныеЭлементаФормыЛкс(ТекущийЭлементФормы); - ИмяКолонкиДанных = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТекущийЭлементФормы); - Если Ложь - Или ТипСтрокиТаблицы = Тип("ДоступноеПолеКомпоновкиДанных") - Или ТипСтрокиТаблицы = Тип("ДоступноеПолеОтбораКомпоновкиДанных") - Тогда - Значение = ТекущийЭлементФормы.ТекущаяСтрока.Поле; - ИначеЕсли Истина - И ИмяКолонкиДанных <> "ПравоеЗначение" - И ТипЗнч(ДанныеПоля) = Тип("ОтборКомпоновкиДанных") - Тогда - Значение = Новый НастройкиКомпоновкиДанных; - Значение = Значение.Отбор; - СкопироватьЭлементыКомпоновкиЛкс(Значение, ДанныеПоля,, ВыделенныеСтрокиТабличногоПоляЛкс(ТекущийЭлементФормы)); - ИначеЕсли ТипЗнч(Значение) <> Тип("Массив") Тогда - Если ТипЗнч(ТекущийЭлементФормы) = Тип("ТабличноеПоле") И ТекущийЭлементФормы.ТекущаяКолонка <> Неопределено Тогда - ДопСвойства = ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ТекущийЭлементФормы); - ЯчейкаСРазметкой = ТекущийЭлементФормы.ОформлениеСтроки(ТекущийЭлементФормы.ТекущаяСтрока).Ячейки[ТекущийЭлементФормы.ТекущаяКолонка.Имя]; - // Уберем разметку вхождений строки поиска - ДопСвойства.ЗапретРазметкиВхождений = Истина; - ТекущийЭлементФормы.ОбновитьСтроки(ТекущийЭлементФормы.ТекущаяСтрока); - Ячейка = ТекущийЭлементФормы.ОформлениеСтроки(ТекущийЭлементФормы.ТекущаяСтрока).Ячейки[ТекущийЭлементФормы.ТекущаяКолонка.Имя]; - // Уберем разметку вхождений строки поиска - ДопСвойства.ЗапретРазметкиВхождений = Ложь; - ТекущийЭлементФормы.ОбновитьСтроки(ТекущийЭлементФормы.ТекущаяСтрока); - Если ДляКопирования Тогда - Значение = Ячейка.Значение; - Если ЯчейкаСРазметкой.Текст <> Ячейка.Текст Тогда - ТекстВБуферОбменаОСЛкс(Ячейка.Текст, ""); // Заменим помещенный платформой в буфер обмена текст с разметкой найденных слов на текст без разметки - ИначеЕсли ТипЗнч(Значение) = Тип("Строка") И """" + Значение + """" = Ячейка.Текст Тогда - ТекстВБуферОбменаОСЛкс(Значение, ""); // Удаляем явное обозначение границ строкового значения кавычками - КонецЕсли; - Если ТипЗнч(Значение) = Тип("Строка") Тогда - Если ПустаяСтрока(Прав(Значение, 1)) Тогда - // https://www.hostedredmine.com/issues/910752 - Массив = Новый Массив; - Массив.Добавить(ТекущийЭлементФормы.ТекущаяСтрока); - ПолноеИмяТаблицыБД = ""; - ТипИсточника = ОбщийТипДанныхТабличногоПоляЛкс(ТекущийЭлементФормы,,, ПолноеИмяТаблицыБД); - Если Истина - И ТипИсточника = "Список" - И ЗначениеЗаполнено(ПолноеИмяТаблицыБД) - Тогда - ТаблицаЗначений = ПустаяТаблицаЗначенийИзТаблицыБДЛкс(ПолноеИмяТаблицыБД); - Иначе - ТаблицаЗначений = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТекущийЭлементФормы, Массив); - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ТаблицаЗначений = Новый ТаблицаЗначений; - #КонецЕсли - Если ТаблицаЗначений <> Неопределено Тогда - КолонкаТаблицы = ТаблицаЗначений.Колонки.Найти(ПутьКДаннымКолонкиТабличногоПоляЛкс(ТекущийЭлементФормы)); - Если Ложь - Или КолонкаТаблицы = Неопределено - Или КолонкаТаблицы.ТипЗначения.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Переменная - Тогда - ТекстВБуферОбменаОСЛкс(Значение, ""); - КонецЕсли; - КонецЕсли; - КонецЕсли; - Значение = Неопределено; - КонецЕсли; - Иначе - Значение = Ячейка.Текст; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Если ДляКопирования И ТипЗнч(Значение) = Тип("Массив") Тогда - Значение = МассивВСписокЗначенийЛкс(Значение); - КонецЕсли; - Возврат Значение; - -КонецФункции - -Функция ОткрытьРазличныеЗначенияКолонкиЛкс(Знач ТабличноеПоле, Знач НастройкиСписка = Неопределено, Знач _АдресСхемыКомпоновки = Неопределено, ЭтаФорма = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - Обработки.ирРазличныеЗначенияКолонки; - #КонецЕсли - Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирРазличныеЗначенияКолонки.Форма",, ТабличноеПоле); - Форма.НастройкиСписка = НастройкиСписка; - Форма.АдресСхемыКомпоновки = _АдресСхемыКомпоновки; - Форма.Форма = ЭтаФорма; - РезультатФормы = Форма.ОткрытьМодально(); - -КонецФункции - -Функция ОткрытьГруппировкуТабличногоПоляЛкс(Знач ТабличноеПоле, Знач НастройкиСписка = Неопределено, ИменаКлючевыхКолонок = "") Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Форма = мПлатформа.ПолучитьФорму("ГруппировкаТаблицы", ТабличноеПоле); - Форма.ПараметрНастройкаКомпоновки = НастройкиСписка; - Форма.ПараметрИменаКлючевыхКолонок = ИменаКлючевыхКолонок; - #Если ТолстыйКлиентУправляемоеПриложение Тогда - Форма.ОткрытьМодально(); - #Иначе - Форма.Открыть(); - #КонецЕсли - -КонецФункции - -Процедура ПоказатьСсылкуНаМодульКонфигурацииЛкс(ПолноеИмяМодуля) Экспорт - - Ссылка = СсылкаНаМодульКонфигурацииЛкс(ПолноеИмяМодуля); - ПоказатьСсылкуНаСтрокуМодуляЛкс(Ссылка); - -КонецПроцедуры - -Функция СсылкаНаМодульКонфигурацииЛкс(Знач ПолноеИмяМодуля) Экспорт - - Возврат "{" + ПолноеИмяМодуля + "(1)}"; - -КонецФункции - -Процедура ПоказатьСсылкуНаСтрокуМодуляЛкс(Знач Ссылка) Экспорт - - Текст = //"" - " - |" + Ссылка + "
- |Запустите программу ClipAngel, скопируйте эту ссылку и откройте ее в конфигураторе через эту программу через ALT+клик - |" - //"" - ; - Форма = ФормаПросмотраHTMLЛкс(Текст); - Форма.ОткрытьМодально(); - -КонецПроцедуры - -Функция ОписаниеМодуляПоИмениЛкс(Знач ИмяМодуля) Экспорт - ОписаниеМодуля = Новый Структура("Метаданные, ИмяФайлаМодуля"); - Фрагменты = СтрРазделитьЛкс(ИмяМодуля); - #Если Сервер И Не Сервер Тогда - Фрагменты = Новый Массив; - #КонецЕсли - ТипМодуля = Фрагменты[Фрагменты.ВГраница()]; - Если ТипМодуля = "Форма" Тогда - ТипМодуля = "Форма.Модуль"; - КонецЕсли; - Фрагменты.Удалить(Фрагменты.ВГраница()); - ИмяОбъектаМодуля = СтрСоединитьЛкс(Фрагменты, "."); - Если ЗначениеЗаполнено(ИмяОбъектаМодуля) Тогда - ОписаниеМодуля.Метаданные = ирКэш.ОбъектМДПоПолномуИмениЛкс(ирОбщий.ПоследнийФрагментЛкс(ИмяОбъектаМодуля, " ")); - Если ОписаниеМодуля.Метаданные <> Неопределено Тогда - ОписаниеМодуля.ИмяФайлаМодуля = ОписаниеМодуля.Метаданные.ПолноеИмя() + "." + ТипМодуля; - Иначе - // Внешняя обработка - ОписаниеМодуля.ИмяФайлаМодуля = ИмяМодуля; - КонецЕсли; - Иначе - ОписаниеМодуля.Метаданные = Метаданные; - ОписаниеМодуля.ИмяФайлаМодуля = "Конфигурация" + "." + ТипМодуля; - КонецЕсли; - Возврат ОписаниеМодуля; -КонецФункции - -Процедура ОткрытьОбъектМетаданныхПоИмениМодуляЛкс(Знач ПолноеИмяМодуля) Экспорт - - ОписаниеМодуля = ОписаниеМодуляПоИмениЛкс(ПолноеИмяМодуля); - Если ОписаниеМодуля.Метаданные <> Неопределено Тогда - ОткрытьОбъектМетаданныхЛкс(ОписаниеМодуля.Метаданные); - КонецЕсли; - -КонецПроцедуры - -Процедура СкрытьПоказатьОднозначныеКолонкиТабличногоПоляЛкс(Знач ТабличноеПоле, Знач Скрыть = Истина, Знач ИгнорироватьКолонки = Неопределено) Экспорт - - ОставитьТолькоРазличающиесяКолонки = Ложь; - Если Скрыть Тогда - // Включаем видимость тех колонок реквизитов, в каких есть различия между элементами группы, а у остальных выключаем - Если ТабличноеПоле.Значение.Количество() > 1 Тогда - ОставитьТолькоРазличающиесяКолонки = Истина; - КонецЕсли; - КонецЕсли; - Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл - Если Ложь - Или (Истина - И ИгнорироватьКолонки <> Неопределено - И ЗначениеЗаполнено(КолонкаТП.Данные) - И ИгнорироватьКолонки.Свойство(КолонкаТП.Данные)) - Или ТабличноеПоле.Значение.Колонки.Найти(КолонкаТП.Данные) = Неопределено - Тогда - Продолжить; - КонецЕсли; - Если ОставитьТолькоРазличающиесяКолонки Тогда - ПервоеЗначение = ТабличноеПоле.Значение[0][КолонкаТП.Данные]; - Для Индекс = 1 По ТабличноеПоле.Значение.Количество() - 1 Цикл - ТекущееЗначение = ТабличноеПоле.Значение[Индекс][КолонкаТП.Данные]; - Если ПервоеЗначение <> ТекущееЗначение Тогда - Прервать; - КонецЕсли; - КонецЦикла; - НоваяВидимость = ПервоеЗначение <> ТекущееЗначение; - Иначе - НоваяВидимость = Истина; - КонецЕсли; - КолонкаТП.Видимость = НоваяВидимость; - КонецЦикла; - -КонецПроцедуры - -Процедура Форма_ПриОткрытииЛкс(ЭтаФорма) Экспорт - ирКэш.СостояниеПодготовкиКэшМДСеансаЛкс(); - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - ЭтаФорма = ПолучитьОбщуюФорму(); - #КонецЕсли - МодальныеГруппы = МодальныеГруппыЛкс(); - #Если Сервер И Не Сервер Тогда - МодальныеГруппы = Новый Массив; - #КонецЕсли - Если ЭтаФорма.МодальныйРежим Тогда - МодальныеГруппы.Добавить(1); - #Если Сервер И Не Сервер Тогда - АктивироватьМодальныеГруппыЛкс(); - #КонецЕсли - ПодключитьГлобальныйОбработчикОжиданияЛкс("АктивироватьМодальныеГруппыЛкс"); - ИначеЕсли МодальныеГруппы.Количество() > 0 Тогда - ИндексГруппы = МодальныеГруппы.Количество() - 1; - МодальныеГруппы[ИндексГруппы].Значение = МодальныеГруппы[ИндексГруппы].Значение + 1; - КонецЕсли; - мПлатформа.ПодключитьПерехватКлавиатуры().ЗахватПервым = Ложь; // Используем не по назначению - ДобавитьВСписокОткрытыхФормЛкс(ЭтаФорма); - Если ТипЗнч(ЭтаФорма) = Тип("Форма") Тогда - ДобавитьИнструментВИсториюРаботыЛкс(ЭтаФорма); - ПодготовитьПрямуюДоставкуСобытияФормыЛкс(ЭтаФорма, "ВнешнееСобытие"); - ПодготовитьПрямуюДоставкуСобытияФормыЛкс(ЭтаФорма, "ОбработкаОповещения"); - // Подготовка отображения колонков типа Булево - Для Каждого ЭлементФормы Из ЭтаФорма.ЭлементыФормы Цикл - Если ТипЗнч(ЭлементФормы) = Тип("ТабличноеПоле") Тогда - ТипИсточника = ОбщийТипДанныхТабличногоПоляЛкс(ЭлементФормы); - МакетТаблицы = Неопределено; - Если Ложь - Или ТипИсточника = "ТабличнаяЧасть" - Или ТипИсточника = "НаборЗаписей" - Или ТипИсточника = "ТаблицаЗначений" - Или ТипИсточника = "ДеревоЗначений" - Тогда - МакетТаблицы = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ЭлементФормы, Новый Массив); - КонецЕсли; - Если МакетТаблицы = Неопределено Тогда - // Динамический список - Продолжить; - КонецЕсли; - КолонкиДанных = МакетТаблицы.Колонки; - Для Каждого КолонкаТП Из ЭлементФормы.Колонки Цикл - КолонкаДанных = КолонкиДанных.Найти(КолонкаТП.Данные); - Если КолонкаДанных = Неопределено Или КолонкаТП.КартинкиСтрок.Вид <> ВидКартинки.Пустая Тогда - Продолжить; - КонецЕсли; - ТипЗначенияКолонки = Новый ОписаниеТипов(КолонкаДанных.ТипЗначения,, "Null"); - ТипыРеквизита = ТипЗначенияКолонки.Типы(); - Если ТипыРеквизита.Количество() = 1 И ТипыРеквизита[0] = Тип("Булево") Тогда - КолонкаТП.КартинкиСтрок = ирКэш.КартинкаПоИмениЛкс("ирСостоянияФлажка"); - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; - //ирОбщий.УстановитьПрикреплениеФормыВУправляемомПриложенииЛкс(Этаформа); - КонецЕсли; - Если Не ЭтаФорма.МодальныйРежим И МодальныеГруппы.Количество() > 0 Тогда - // Антибаг платформы https://www.hostedredmine.com/issues/926161 - #Если Сервер И Не Сервер Тогда - АктивироватьАктивнуюФормуЛкс(); - #КонецЕсли - ирОбщий.ПодключитьГлобальныйОбработчикОжиданияЛкс("АктивироватьАктивнуюФормуЛкс"); - КонецЕсли; - -КонецПроцедуры - -Процедура ПодготовитьПрямуюДоставкуСобытияФормыЛкс(Знач ЭтаФорма, Знач ИмяСобытия) - - ОбработчикСобытия = ЭтаФорма.ПолучитьДействие(ИмяСобытия); - Если Истина - И ОбработчикСобытия <> Неопределено - И Не МетодРеализованЛкс(ЭтаФорма, ОбработчикСобытия) - Тогда - СообщитьЛкс(СтрШаблонИменЛкс("В модуле %1 обработчик события %2 не является экспортным",, ПолноеИмяФормыЛкс(ЭтаФорма), 2, ИмяСобытия), СтатусСообщения.Внимание); - КонецЕсли; - ЭтаФорма.УстановитьДействие(ИмяСобытия, Неопределено); // Будем вызывать напрямую, чтобы платформа не вызывала обновление всех форм - -КонецПроцедуры - -Процедура ДобавитьВСписокОткрытыхФормЛкс(ЭтаФорма) Экспорт - - ирКэш.ОткрытыеФормыЛкс().Добавить(ЭтаФорма); - СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - СлужебныеДанныеФормы.Вставить("ДатаОткрытия", ТекущееВремяВМиллисекундахЛкс()); - -КонецПроцедуры - -Процедура Форма_ПриЗакрытииЛкс(ЭтаФорма, СохранитьНастройкуПоУмолчанию = Истина) Экспорт - - #Если Сервер И Не Сервер Тогда - ЭтаФорма = ОткрытьФорму(); - #КонецЕсли - // У некоторых из-за большого объема данных в настройках пользователя это вызывает большие задержки - //ПодключитьГлобальныйОбработчикОжиданияЛкс("СохранитьНастройкиПользователяОтложенноЛкс"); - Если ТипЗнч(ЭтаФорма) = Тип("Форма") И СохранитьНастройкуПоУмолчанию Тогда - СохранитьНастройкуФормыЛкс(ЭтаФорма); - КонецЕсли; - ЗаданияФормы = Неопределено; - СлужебныеДанные = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма); - #Если Сервер И Не Сервер Тогда - СлужебныеДанные = Новый Структура; - #КонецЕсли - Если СлужебныеДанные.Задания.Количество() > 0 Тогда - ЭтаФорма.ОтключитьОбработчикОжидания("ПроверкаЗавершенияФоновыхЗаданий"); - Для Каждого КлючИЗначение Из СлужебныеДанные.Задания Цикл - ОтменитьЗаданиеФормыЛкс(ЭтаФорма, КлючИЗначение.Значение, Истина); - КонецЦикла; - КонецЕсли; - - МодальныеГруппы = МодальныеГруппыЛкс(); - #Если Сервер И Не Сервер Тогда - МодальныеГруппы = Новый Массив; - #КонецЕсли - Если МодальныеГруппы.Количество() > 0 Тогда - ИндексГруппы = МодальныеГруппы.Количество() - 1; - Если ЭтаФорма.МодальныйРежим Тогда - // Вылняется никогда, т.к. свойство МодальныйРежим платформа сбрасывает перед ПриЗакрытии - КоличествоФормВМодальнойГруппе = 0; - Иначе - КоличествоФормВМодальнойГруппе = МодальныеГруппы[ИндексГруппы].Значение; - КоличествоФормВМодальнойГруппе = КоличествоФормВМодальнойГруппе - 1; - КонецЕсли; - Если КоличествоФормВМодальнойГруппе = 0 Тогда - МодальныеГруппы.Удалить(ИндексГруппы); - УстановитьФокусВводаФормеЛкс(); - Иначе - МодальныеГруппы[ИндексГруппы].Значение = КоличествоФормВМодальнойГруппе; - КонецЕсли; - КонецЕсли; - ОткрытыеФормы = ирКэш.ОткрытыеФормыЛкс(); - Пока Истина Цикл - ПозицияОткрытой = ОткрытыеФормы.Найти(ЭтаФорма); - Если ПозицияОткрытой = Неопределено Тогда - Прервать; - КонецЕсли; - ОткрытыеФормы.Удалить(ПозицияОткрытой); - КонецЦикла; - -КонецПроцедуры - -Процедура ОтменитьЗаданиеФормыОтложенноЛкс(Параметры) Экспорт - - ОтменитьЗаданиеФормыЛкс(Параметры.ЭтаФорма, Параметры.ОписаниеЗадания); - -КонецПроцедуры - -Функция ОтменитьЗаданиеФормыЛкс(Знач ЭтаФорма, Знач ОписаниеЗадания, Знач ЗакрытьФормуЗадания = Ложь) - - Если Не ЗначениеЗаполнено(ОписаниеЗадания.УникальныйИдентификатор) Тогда - Возврат Ложь; - КонецЕсли; - ЗаданияФормы = ирОбщий.СлужебныеДанныеФормыЛкс(ЭтаФорма).Задания; - #Если Сервер И Не Сервер Тогда - ЗаданияФормы = Новый Структура; - #КонецЕсли - ОтменитьФоновоеЗаданиеЛкс(ОписаниеЗадания.УникальныйИдентификатор); - Если ОписаниеЗадания.Многопоточное Тогда - Найденные = ФоновыеЗаданияПотоковЛкс(); - ПрефиксКлючаПотока = ПрефиксКлючаПотокаЛкс(ЭтаФорма); - Для Каждого ФоновоеЗадание Из Найденные Цикл - #Если Сервер И Не Сервер Тогда - ФоновоеЗадание = ФоновыеЗадания.Выполнить(); - #КонецЕсли - Если СтрНачинаетсяСЛкс(ФоновоеЗадание.Ключ, ПрефиксКлючаПотока) Тогда - ОтменитьФоновоеЗаданиеЛкс(ФоновоеЗадание); - КонецЕсли; - КонецЦикла; - КонецЕсли; - ОбработатьЗавершениеЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма,, Истина, ЗакрытьФормуЗадания); - ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма); - Возврат Истина; - -КонецФункции - -Процедура УдалитьСсылкиНаЗакрытыеФормыЛкс(ЭтаФорма = Неопределено) Экспорт - - УдалитьФормы = Новый Массив; - ОткрытыеФормы = Новый Массив; - Для Каждого Форма Из ОткрытыеФормы Цикл - Если ЭтаФорма = Форма Или Форма.Открыта() Тогда - Продолжить; - КонецЕсли; - УдалитьФормы.Добавить(Форма); - КонецЦикла; - Для Каждого Форма Из УдалитьФормы Цикл - СообщитьЛкс(СтрШаблонИменЛкс("Удалена ссылка на закрытую ранее форму %1",, Форма.Заголовок)); - ОткрытыеФормы.Удалить(ОткрытыеФормы.Найти(Форма)); - КонецЦикла; - -КонецПроцедуры - -Процедура ОповеститьФормыПодсистемыЛкс(ИмяСобытия = Неопределено, Параметр = Неопределено, Источник = Неопределено, Знач ЭтаФорма = Неопределено) Экспорт - Если ЭтаФорма = Неопределено Тогда - ЭтаФорма = Источник; - КонецЕсли; - УдалитьСсылкиНаЗакрытыеФормыЛкс(ЭтаФорма); - // Копируем, чтобы в процессе оповещения массив не менял состав - ОткрытыеФормы = СкопироватьУниверсальнуюКоллекциюЛкс(ирКэш.ОткрытыеФормыЛкс()); - Для Каждого Форма Из ОткрытыеФормы Цикл - Если МетодРеализованЛкс(Форма, "ОбработкаОповещения") Тогда - Форма.ОбработкаОповещения(ИмяСобытия, Параметр, Источник); - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -Процедура ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма) Экспорт - - Если ЭтаФорма.МодальныйРежим Тогда - Ответ = Вопрос("Хотите закрыть текущую форму, чтобы открыть новую форму немодально?", РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Да Тогда - ЭтаФорма.Закрыть(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ЗапроситьСохранениеДанныхФормыЛкс(ЭтаФорма, Отказ = Ложь) Экспорт - - Если ЭтаФорма.Модифицированность Тогда - ПередОтображениемДиалогаПередЗакрытиемФормыЛкс(ЭтаФорма); - Ответ = Вопрос("Данные в форме были изменены. Сохранить изменения?", РежимДиалогаВопрос.ДаНетОтмена); - Если Ответ = КодВозвратаДиалога.Отмена Тогда - Отказ = Истина; - Иначе - ЭтаФорма.Модифицированность = Ложь; - КонецЕсли; - КонецЕсли; - Возврат Ответ; - -КонецФункции - -Функция ЗаголовокДляКопииОбъектаЛкс(ЭтаФорма) Экспорт - - Возврат ПоследнийФрагментЛкс(ЭтаФорма.Заголовок, ": ", Ложь) + " - " + ТекущееВремяЛкс(); - -КонецФункции - -Функция ПериодОчисткиМенеджераВременныхТаблицЛкс(выхПоУмолчаниюОчищать = Ложь) Экспорт - - ПараметрыОчистки = ирОбщий.ВосстановитьЗначениеЛкс("ПредлагатьОчиститьМенеджерВременныхТаблицЧерезМинут"); - Если ТипЗнч(ПараметрыОчистки) = Тип("Структура") Тогда - Период = ПараметрыОчистки.Период; - выхПоУмолчаниюОчищать = ПараметрыОчистки.ПоУмолчаниюОчищать; - Иначе - Период = ПараметрыОчистки; - выхПоУмолчаниюОчищать = Ложь; - КонецЕсли; - Если Период = Неопределено Тогда - Период = 60; - ИначеЕсли Период < 1 Тогда - Период = 1; - ИначеЕсли Период > 240 Тогда - Период = 240; - КонецЕсли; - Возврат Период; - -КонецФункции - -Процедура ПередОтображениемДиалогаПередЗакрытиемФормыЛкс(Знач ЭтаФорма) Экспорт - - Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда - ЭтаФорма.Открыть(); // http://www.hostedredmine.com/issues/881581 - КонецЕсли; - -КонецПроцедуры - -Процедура КоманднаяПанельВставитьКнопкиГлобальныхКомандЛкс(Знач КоманднаяПанельПолеВвода) - - #Если ТолстыйКлиентОбычноеПриложение Тогда - Если ЛиПерехватКлавиатурногоВводаВОбычномПриложенииЛкс() Тогда - Возврат; - КонецЕсли; - #Иначе - Возврат; - #КонецЕсли - КнопкаКопировать = КоманднаяПанельПолеВвода.Кнопки.Добавить(); - КнопкаКопировать.ТипКнопки = ТипКнопкиКоманднойПанели.Действие; - Попытка - КнопкаКопировать.Действие = Новый Действие("КлсКомандаНажатие"); - Исключение - КоманднаяПанельПолеВвода.Кнопки.Удалить(КнопкаКопировать); - Возврат; - КонецПопытки; - КнопкаКопировать.Имя = "БуферОбмена_Копировать"; - КнопкаКопировать.Текст = "Копировать значение"; - КнопкаКопировать.Подсказка = "Копировать значение в буфер обмена"; - КнопкаКопировать.Пояснение = КнопкаКопировать.Подсказка; - КнопкаКопировать.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.C, Истина, , Истина); // ALT+SHIFT+C - КнопкаКопировать.Картинка = ирКэш.КартинкаПоИмениЛкс("ирКопировать"); - КнопкаВставить = КоманднаяПанельПолеВвода.Кнопки.Добавить(); - КнопкаВставить.Имя = "БуферОбмена_Вставить"; - КнопкаВставить.ТипКнопки = ТипКнопкиКоманднойПанели.Действие; - КнопкаВставить.Текст = "Вставить значение"; - КнопкаВставить.Подсказка = "Вставить значение из буфера обмена"; - КнопкаВставить.Пояснение = КнопкаВставить.Подсказка; - КнопкаВставить.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.V, Истина, , Истина); // ALT+SHIFT+V - КнопкаВставить.Действие = Новый Действие("КлсКомандаНажатие"); - КнопкаВставить.Картинка = ирКэш.КартинкаПоИмениЛкс("ирВставить"); - //КнопкаМеню = КоманднаяПанельПолеВвода.Кнопки.Добавить(); - //КнопкаМеню.Имя = "ОткрытьГлобальноеМеню"; - //КнопкаМеню.ТипКнопки = ТипКнопкиКоманднойПанели.Действие; - //КнопкаМеню.Текст = "Глобальное меню"; - //КнопкаМеню.Подсказка = "Открыть глобальное меню"; - //КнопкаМеню.Пояснение = КнопкаМеню.Подсказка; - //КнопкаМеню.СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.E, Истина, Истина); // CTRL+ALT+E - //КнопкаМеню.Действие = Новый Действие("КлсКомандаНажатие"); - -КонецПроцедуры - -Функция ЛиПерехватКлавиатурногоВводаЛкс() Экспорт - - //Возврат Ложь; // для отладки - Если Ложь - Или Не ирКэш.ЛиПлатформаWindowsЛкс() - Или Найти(ПараметрЗапуска, "ОтключитьПерехватКлавиатурыИР") > 0 - Тогда - Результат = Ложь; - Иначе - #Если ТолстыйКлиентОбычноеПриложение Тогда - Результат = ирОбщий.ЛиПерехватКлавиатурногоВводаВОбычномПриложенииЛкс(); - #Иначе - Результат = Истина; - #КонецЕсли - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ЛиПерехватКлавиатурногоВводаВОбычномПриложенииЛкс() Экспорт - - Результат = ирКэш.Получить().ПерехватКлавиатурногоВводаВОбычномПриложении; - Возврат Результат; - -КонецФункции - -Процедура УниверсальнаяКомандаФормыЛкс(Знач ЭтаФорма, Знач Кнопка, Знач ИсточникДействий = Неопределено, Знач МетаданныеВыбора = Неопределено) Экспорт - - СлужебныеДанныеФормы = СлужебныеДанныеФормыЛкс(ЭтаФорма); - Если Кнопка.Имя = "БуферОбмена_Копировать" Тогда - // Только в обычном приложении с отключенным перехватом клавиатурного ввода - БуферОбмена_КопироватьЛкс(ЭтаФорма); - ИначеЕсли Кнопка.Имя = "БуферОбмена_Вставить" Тогда - // Только в обычном приложении с отключенным перехватом клавиатурного ввода - БуферОбмена_ВставитьЛкс(ЭтаФорма); - ИначеЕсли Кнопка.Имя = "ОткрытьГлобальноеМеню" Тогда - Если Не ЛиПерехватКлавиатурногоВводаЛкс() Тогда - ОткрытьГлобальноеМенюЛкс(ЭтаФорма); - КонецЕсли; - ИначеЕсли Кнопка.Имя = "ОПодсистеме" Тогда - ОткрытьСправкуПоПодсистемеЛкс(ЭтаФорма); - ИначеЕсли Кнопка.Имя = "СтруктураФормы" Тогда - ОткрытьСтруктуруФормыЛкс(ЭтаФорма, ЭтаФорма); - ИначеЕсли Кнопка.Имя = "НовоеОкно" Тогда - ОткрытьНовоеОкноФормыЛкс(ЭтаФорма); - ИначеЕсли Кнопка.Имя = "ЗагрузитьНастройку" Тогда - ВыбратьИЗагрузитьНастройкуФормыЛкс(ЭтаФорма); - ИначеЕсли Кнопка.Имя = "СохранитьНастройку" Тогда - ВыбратьИСохранитьНастройкуФормыЛкс(ЭтаФорма); - ИначеЕсли Кнопка.Имя = "ЗагрузитьНастройкуИзФайла" Тогда - Если Не ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма) Тогда - СообщитьЛкс("Нельзя выполнять загрузку настроек, пока форма выполняет фоновые задания"); - Возврат; - КонецЕсли; - НастройкаФормы = ЗагрузитьЗначениеИзФайлаИнтерактивноЛкс(СлужебныеДанныеФормы.МенеджерСохраненияНастроек.РасширениеФайла, "Настройка """ + ПервыйФрагментЛкс(ЭтаФорма.Заголовок, ":") + """"); - Если НастройкаФормы <> Неопределено Тогда - ирОбщий.ЗагрузитьНастройкуФормыЧерезОбработчикЛкс(ЭтаФорма, НастройкаФормы); - КонецЕсли; - ИначеЕсли Кнопка.Имя = "СохранитьНастройкуВФайл" Тогда - НастройкаФормы = ирОбщий.СохраняемаяНастройкаФормыЛкс(ЭтаФорма); - Если НастройкаФормы <> Неопределено Тогда - СохранитьЗначениеВФайлИнтерактивноЛкс(НастройкаФормы, СлужебныеДанныеФормы.МенеджерСохраненияНастроек.РасширениеФайла, "Настройка """ + ПервыйФрагментЛкс(ЭтаФорма.Заголовок, ":") + """"); - КонецЕсли; - Иначе - Если ИсточникДействий = Неопределено Тогда - ИсточникДействий = КоманднаяПанельКнопкиЛкс(ЭтаФорма, Кнопка).ИсточникДействий; - КонецЕсли; - Если ИсточникДействий = Неопределено Тогда - ИсточникДействий = ЭтаФорма.ТекущийЭлемент; - КонецЕсли; - Если ТипЗнч(ИсточникДействий) = Тип("ПолеТабличногоДокумента") Тогда - #Если Сервер И Не Сервер Тогда - ИсточникДействий = Новый ТабличныйДокумент; - #КонецЕсли - Если Кнопка.Имя = "Автосумма" Тогда - Кнопка.Пометка = Не Кнопка.Пометка; - ИсточникДействий.ТекущаяОбласть = ИсточникДействий.ТекущаяОбласть; - КонецЕсли; - ИначеЕсли ТипЗнч(ИсточникДействий) = Тип("ТабличноеПоле") Тогда - #Если Сервер И Не Сервер Тогда - ИсточникДействий = Новый ТабличноеПоле; - #КонецЕсли - Если Кнопка.Имя = "ПереместитьВверх" Тогда - ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ИсточникДействий, -1); - ИначеЕсли Кнопка.Имя = "ПереместитьВниз" Тогда - ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ИсточникДействий, +1); - ИначеЕсли Кнопка.Имя = "ПереместитьВНачало" Тогда - ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ИсточникДействий, -100000); - ИначеЕсли Кнопка.Имя = "ПереместитьВКонец" Тогда - ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ИсточникДействий, +100000); - ИначеЕсли Кнопка.Имя = "СортироватьПоВозрастанию" Тогда - ТабличноеПолеСортироватьЛкс(ЭтаФорма, ИсточникДействий, Истина); - ИначеЕсли Кнопка.Имя = "СортироватьПоУбыванию" Тогда - ТабличноеПолеСортироватьЛкс(ЭтаФорма, ИсточникДействий, Ложь); - ИначеЕсли Кнопка.Имя = "ПоказыватьИтоги" Тогда - ТабличноеПолеКнопкаОтображенияИтоговНажатиеЛкс(ЭтаФорма, ИсточникДействий, Кнопка); - ИначеЕсли Кнопка.Имя = "Идентификаторы" Тогда - КнопкаОтображатьПустыеИИдентификаторыНажатиеЛкс(Кнопка); - ИсточникДействий.ОбновитьСтроки(); - ИначеЕсли Кнопка.Имя = "СжатьКолонки" Тогда - СжатьКолонкиТабличногоПоляЛкс(ИсточникДействий); - ИначеЕсли Кнопка.Имя = "ШиринаКолонок" Тогда - РасширитьКолонкиТабличногоПоляЛкс(ИсточникДействий); - ИначеЕсли Кнопка.Имя = "ГруппировкаТаблицы" Тогда - КомпоновкаТП = КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ИсточникДействий); - Если КомпоновкаТП <> Неопределено Тогда - НастройкаКомпоновки = КомпоновкаТП.Компоновщик.Настройки; - КонецЕсли; - ирОбщий.ОткрытьГруппировкуТабличногоПоляЛкс(ИсточникДействий, НастройкаКомпоновки); - ИначеЕсли Кнопка.Имя = "АнализДанных" Тогда - ФормаАнализа = ирОбщий.ПолучитьФормуЛкс("Обработка.ирАнализДанных.Форма",, ЭтаФорма); - ФормаАнализа.ПараметрТаблица = ИсточникДействий.Значение; - ФормаАнализа.Открыть(); - ИначеЕсли Кнопка.Имя = "МенеджерТабличногоПоля" Тогда - ОткрытьМенеджерТабличногоПоляЛкс(ИсточникДействий, ЭтаФорма,, МетаданныеВыбора); - ИначеЕсли Кнопка.Имя = "УстановитьЗначениеВКолонке" Тогда - ОткрытьМенеджерТабличногоПоляЛкс(ИсточникДействий, ЭтаФорма, "Обработка", МетаданныеВыбора); - ИначеЕсли Кнопка.Имя = "ЗагрузитьСтроки" Тогда - ЗагрузитьСтрокиВТабличноеПолеЛкс(ЭтаФорма, ИсточникДействий); - ИначеЕсли Кнопка.Имя = "РазличныеЗначенияКолонки" Тогда - ОткрытьРазличныеЗначенияКолонкиЛкс(ИсточникДействий,,, ЭтаФорма); - ИначеЕсли Кнопка.Имя = "РедакторОбъектаБД" Тогда - ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); - ОткрытьСсылкуЯчейкиВРедактореОбъектаБДЛкс(ИсточникДействий); - ИначеЕсли Кнопка.Имя = "КонсольОбработки" Тогда - ОткрытьОбъектыИзВыделенныхЯчеекВПодбореИОбработкеОбъектовЛкс(ИсточникДействий,, ЭтаФорма); - ИначеЕсли Кнопка.Имя = "ОбработатьОбъекты" Тогда - ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); - ОткрытьПодборИОбработкуОбъектовИзДинамическогоСпискаЛкс(ИсточникДействий); - ИначеЕсли Кнопка.Имя = "ВывестиСтроки" Тогда - ВывестиСтрокиТабличногоПоляИПоказатьЛкс(ЭтаФорма, ИсточникДействий); - ИначеЕсли Кнопка.Имя = "КонсольКомпоновки" Тогда - ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); - ОткрытьДанныеТабличногоПоляВКонсолиКомпоновкиЛкс(ЭтаФорма, ИсточникДействий); - ИначеЕсли Кнопка.Имя = "Сравнить" Тогда - ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(ЭтаФорма, ИсточникДействий); - ИначеЕсли Кнопка.Имя = "СравнитьСтроки" Тогда - ТабличноеПолеИлиТаблицаФормы_СравнитьСтрокиЛкс(ЭтаФорма, ИсточникДействий); - ИначеЕсли Кнопка.Имя = "ЗаполнитьГруппыДублейДляЗамены" Тогда - ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); - ОткрытьФормуЗаменыСсылокИзТабличногоПоляЛкс(ИсточникДействий); - ИначеЕсли Кнопка.Имя = "ОткрытьКоллекцию" Тогда - ОткрытьЗначениеЛкс(ИсточникДействий.Значение,,,, Ложь,, ИсточникДействий); - ИначеЕсли Кнопка.Имя = "ОткрытьКопиюКоллекции" Тогда - КопияКоллекции = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ИсточникДействий,,, Ложь,,, ЭтаФорма); - ОткрытьЗначениеЛкс(КопияКоллекции,,,, Ложь,, ИсточникДействий); - ИначеЕсли Кнопка.Имя = "СвернутьДерево" Тогда - ДеревоЗначенийСвернутьРазвернутьЛкс(ИсточникДействий, Истина); - ИначеЕсли Кнопка.Имя = "РазвернутьДерево" Тогда - ДеревоЗначенийСвернутьРазвернутьЛкс(ИсточникДействий, Ложь); - ИначеЕсли Кнопка.Имя = "ДеревоСвернутьОстальные" Тогда - ТабличноеПолеДеревоЗначений_СвернутьВсеСтрокиЛкс(ИсточникДействий, Истина); - ИначеЕсли Кнопка.Имя = "Очистить" Тогда - ИсточникДействий.Значение.Очистить(); - ИначеЕсли Кнопка.Имя = "ОтборПоЗначениюВТекущейКолонке" Тогда - Если ТипЗнч(ИсточникДействий.Значение) <> Тип("ДеревоЗначений") Тогда - ТабличноеПолеОтборДляЗначенияВТекущейКолонкеЛкс(ИсточникДействий, Истина,,,, ЭтаФорма); - КонецЕсли; - ИначеЕсли Кнопка.Имя = "ОтборБезЗначенияВТекущейКолонке" Тогда - Если ТипЗнч(ИсточникДействий.Значение) <> Тип("ДеревоЗначений") Тогда - ТабличноеПолеОтборДляЗначенияВТекущейКолонкеЛкс(ИсточникДействий, Ложь,,,, ЭтаФорма); - КонецЕсли; - ИначеЕсли Кнопка.Имя = "УстановитьФлажки" Тогда - ИзменитьПометкиВыделенныхИлиОтобранныхСтрокЛкс(ЭтаФорма, ИсточникДействий,, Истина,,, Истина); - ИначеЕсли Кнопка.Имя = "СнятьФлажки" Тогда - ИзменитьПометкиВыделенныхИлиОтобранныхСтрокЛкс(ЭтаФорма, ИсточникДействий,, Ложь,,, Истина); - ИначеЕсли Кнопка.Имя = "СколькоСтрок" Тогда - ТабличноеПолеИлиТаблицаФормы_СколькоСтрокЛкс(ИсточникДействий); - ИначеЕсли Кнопка.Имя = "НастроитьКолонки" Тогда - ОткрытьНастройкуКолонокТабличногоПоляЛкс(ЭтаФорма, ИсточникДействий); - ИначеЕсли Кнопка.Имя = "СвойстваСтроки" Тогда - ОткрытьРедакторСтрокиТаблицыЛкс(ЭтаФорма, ИсточникДействий); - ИначеЕсли СтрНачинаетсяСЛкс(Кнопка.Имя, НачалоИмениКнопкиПодменюПоследнихВыбранных("Отборы")) Тогда - НастройкаКомпоновки = ирОбщий.ВыбранныйЭлементПоследнихЗначенийЛкс(ЭтаФорма, ИсточникДействий, Кнопка, "Отборы", Истина); - #Если Сервер И Не Сервер Тогда - НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; - #КонецЕсли - ПутьКДанным = "ЭлементыФормы." + ИсточникДействий.Имя + ".Отбор"; - ЭтаФорма.ОтключитьОбработчикИзмененияДанных(ПутьКДанным); - ирОбщий.СкопироватьОтборЛюбойЛкс(ИсточникДействий.ОтборСтрок, НастройкаКомпоновки.Отбор); - Попытка - ЭтаФорма.ОбработчикИзмененияДанных(ПутьКДанным); - Исключение - // Временно пропускаем такие ошибки - ирОбщий.СообщитьЛкс(ОписаниеОшибки()); - КонецПопытки; - Иначе - ВызватьИсключение "Неизвестное имя команды (" + Кнопка.Имя + ")"; - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ОткрытьНастройкуКолонокТабличногоПоляЛкс(Знач ЭтаФорма, Знач ИсточникДействий) Экспорт - - мНастройкаКолонок = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирДинамическийСписок"); - #Если Сервер И Не Сервер Тогда - мНастройкаКолонок = Обработки.ирДинамическийСписок.Создать(); - #КонецЕсли - ФормаНастроек = мНастройкаКолонок.ПолучитьФорму("НастройкиКолонок", ЭтаФорма); - ФормаНастроек.ПрочитатьНастройкиКолонокИзТабличногоПоля(ИсточникДействий); - ФормаНастроек.СвязанноеТабличноеПоле = ИсточникДействий; - ФормаНастроек.ПараметрРучноеСохранение = Истина; - ТаблицаЗначений = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ИсточникДействий, Новый Массив,,,,, ЭтаФорма); - Если ТаблицаЗначений <> Неопределено Тогда - Для Каждого СтрокаНастройкиКолонки Из ФормаНастроек.НастройкиКолонок Цикл - ДоступноеПоле = ТаблицаЗначений.Колонки.Найти(ИсточникДействий.Колонки[СтрокаНастройкиКолонки.Имя].Данные); - Если ДоступноеПоле = Неопределено Тогда - Продолжить; - КонецЕсли; - СтрокаНастройкиКолонки.ТипЗначения = ДоступноеПоле.ТипЗначения; - КонецЦикла; - КонецЕсли; - ВыбранноеЗначение = ФормаНастроек.ОткрытьМодально(); - Если ВыбранноеЗначение <> Неопределено Тогда - мНастройкаКолонок.ПрименитьНастройкиКолонокКТабличномуПолю(ИсточникДействий, ВыбранноеЗначение); - КонецЕсли; - -КонецПроцедуры - -Процедура ОткрытьТаблицуВКонсолиКомпоновкиЛкс(Знач Таблица, Знач КомпоновкаТП = Неопределено) Экспорт - - КонсольКомпоновокДанных = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольКомпоновокДанных"); - #Если Сервер И Не Сервер Тогда - КонсольКомпоновокДанных = Обработки.ирКонсольКомпоновокДанных.Создать(); - Таблица = Новый ТаблицаЗначений; - #КонецЕсли - Если КомпоновкаТП <> Неопределено Тогда - НастройкаКомпоновки = КомпоновкаТП.Компоновщик.Настройки; - КонецЕсли; - КонсольКомпоновокДанных.ОткрытьПоТаблицеЗначений(Таблица, НастройкаКомпоновки); - -КонецПроцедуры - -Процедура ОткрытьДанныеТабличногоПоляВКонсолиКомпоновкиЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач НастройкаКомпоновки = Неопределено) Экспорт - - КонсольКомпоновокДанных = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКонсольКомпоновокДанных"); - #Если Сервер И Не Сервер Тогда - КонсольКомпоновокДанных = Обработки.ирКонсольКомпоновокДанных.Создать(); - #КонецЕсли - КомпоновкаТП = КомпоновкаТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); - Если КомпоновкаТП <> Неопределено Тогда - Если НастройкаКомпоновки = Неопределено Тогда - НастройкаКомпоновки = КомпоновкаТП.Компоновщик.Настройки; - КонецЕсли; - УстановитьПараметрыВыводаКомпоновкиПоУмолчаниюЛкс(НастройкаКомпоновки); - КонецЕсли; - КопияКоллекции = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТабличноеПоле,,,,,, ЭтаФорма); - ВнешниеНаборыДанных = Новый Структура("Основной", КопияКоллекции); - КонсольКомпоновокДанных.ОткрытьПоТабличномуПолю(ТабличноеПоле,, НастройкаКомпоновки, ВнешниеНаборыДанных); - -КонецПроцедуры - -// Родственник ВернутьПостоянныйПарольПользователяЛкс -// Пароль устанавливается временный и опционально роль ирРазработчик -Функция УстановитьВременныеСвойстваПользователюИБЛкс(ПользовательИБ, ПодменитьПарольНаВремяЗапуска = Истина, ВременноПредоставитьПравоРазработчикИР = Истина, - ОтключитьЗащитуОтОпасныхДействийНаВремяЗапуска = Истина, ЯзыкКонфигурации = "", ПользовательДобавляемыхРолей = "") Экспорт - - #Если Сервер И Не Сервер Тогда - ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - #КонецЕсли - мПлатформа = ирКэш.Получить(); - НужноВернутьАутентификациюОС = Ложь; - НужноВернутьАутентификациюПаролем = Ложь; - НужноВернутьПароль = Ложь; - НужноВернутьЗащитуОтОпасныхДействий = Ложь; - НужноВернутьЯзыкКонфигурации = Ложь; - УдалитьРоли = Новый СписокЗначений; - Если ПодменитьПарольНаВремяЗапуска Тогда - Если СтрокиРавныЛкс(ПользовательИБ.Имя, ИмяПользователя()) Тогда - СообщитьЛкс("Назначение временного пароля собственному пользователю не допускается"); - Возврат Неопределено; - КонецЕсли; - мhash = ПользовательИБ.СохраняемоеЗначениеПароля; - Если ПользовательИБ.АутентификацияОС = Истина Тогда - ПользовательИБ.АутентификацияОС = Ложь; - НужноВернутьАутентификациюОС = Истина; - КонецЕсли; - Если ПользовательИБ.АутентификацияСтандартная = Ложь Тогда - ПользовательИБ.АутентификацияСтандартная = Истина; - НужноВернутьАутентификациюПаролем = Истина; - КонецЕсли; - Пароль = Формат(ТекущаяДата(), "ДФ=HHmmss") + XMLСтрока(НомерСеансаИнформационнойБазы()) + "!_qQ"; - ПользовательИБ.Пароль = Пароль; - НужноВернутьПароль = Истина; - КонецЕсли; - Если ВременноПредоставитьПравоРазработчикИР И Не ирКэш.ЛиПортативныйРежимЛкс() Тогда - Роль = Метаданные.Роли.ирРазработчик; - Если Не ПользовательИБ.Роли.Содержит(Роль) Тогда - УдалитьРоли.Добавить(Роль); - ПользовательИБ.Роли.Добавить(Роль); - КонецЕсли; - КонецЕсли; - Если ЗначениеЗаполнено(ПользовательДобавляемыхРолей) Тогда - ПользовательДобавляемыхРолейИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательДобавляемыхРолей); - Для Каждого Роль Из ПользовательДобавляемыхРолейИБ.Роли Цикл - Если Не ПользовательИБ.Роли.Содержит(Роль) Тогда - УдалитьРоли.Добавить(Роль); - ПользовательИБ.Роли.Добавить(Роль); - КонецЕсли; - КонецЦикла; - УдалитьРоли.СортироватьПоЗначению(); - Для Каждого Роль Из УдалитьРоли Цикл - СообщитьЛкс("Добавлена роль - " + Роль.Значение); - КонецЦикла; - КонецЕсли; - Если УдалитьРоли.Количество() > 0 Тогда - ПользовательИБ.ПолноеИмя = ПользовательИБ.ПолноеИмя + МаркерВременныхРолейЛкс(); - КонецЕсли; - Если ЗначениеЗаполнено(ЯзыкКонфигурации) Тогда - НужноВернутьЯзыкКонфигурации = Истина; - СтарыйЯзыкКонфигурации = ПользовательИБ.Язык; - Если СтарыйЯзыкКонфигурации <> Неопределено Тогда - СтарыйЯзыкКонфигурации = СтарыйЯзыкКонфигурации.Имя; - КонецЕсли; - ПользовательИБ.Язык = Метаданные.Языки[ЯзыкКонфигурации]; - КонецЕсли; - Если ОтключитьЗащитуОтОпасныхДействийНаВремяЗапуска Тогда - Если ирКэш.ДоступнаЗащитаОтОпасныхДействийЛкс() И ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях Тогда - ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь; - НужноВернутьЗащитуОтОпасныхДействий = Истина; - КонецЕсли; - КонецЕсли; - ПользовательИБ.Записать(); - НаборПараметров = Новый Структура(); - НаборПараметров.Вставить("mHash", мhash); - НаборПараметров.Вставить("НужноВернутьАутентификациюПаролем", НужноВернутьАутентификациюПаролем); - НаборПараметров.Вставить("НужноВернутьАутентификациюОС", НужноВернутьАутентификациюОС); - НаборПараметров.Вставить("ПользовательИБ", ПользовательИБ); - НаборПараметров.Вставить("НужноВернутьПароль", НужноВернутьПароль); - НаборПараметров.Вставить("НужноВернутьЗащитуОтОпасныхДействий", НужноВернутьЗащитуОтОпасныхДействий); - НаборПараметров.Вставить("УдалитьРоли", УдалитьРоли); - НаборПараметров.Вставить("Имя", ПользовательИБ.Имя); - НаборПараметров.Вставить("Пароль", Пароль); - НаборПараметров.Вставить("НужноВернутьЯзыкКонфигурации", НужноВернутьЯзыкКонфигурации); - НаборПараметров.Вставить("ЯзыкКонфигурации", СтарыйЯзыкКонфигурации); - Возврат НаборПараметров; - -КонецФункции - -// Родственник УстановитьВременныеСвойстваПользователюИБЛкс -Процедура ВернутьПостоянныеСвойстваПользователюИБЛкс(НаборПараметров = Неопределено) Экспорт; - - //УстановитьПривилегированныйРежим(Истина); - Если НаборПараметров <> Неопределено Тогда - мhash = НаборПараметров.mhash; - ЯзыкКонфигурации = НаборПараметров.ЯзыкКонфигурации; - НужноВернутьАутентификациюПаролем = НаборПараметров.НужноВернутьАутентификациюПаролем; - НужноВернутьАутентификациюОС = НаборПараметров.НужноВернутьАутентификациюОС; - НужноВернутьПароль = НаборПараметров.НужноВернутьПароль; - НужноВернутьЗащитуОтОпасныхДействий = НаборПараметров.НужноВернутьЗащитуОтОпасныхДействий; - НужноВернутьЯзыкКонфигурации = НаборПараметров.НужноВернутьЯзыкКонфигурации; - ПользовательИБ = НаборПараметров.ПользовательИБ; - УдалитьРоли = НаборПараметров.УдалитьРоли; - #Если Сервер И Не Сервер Тогда - УдалитьРоли = Новый СписокЗначений; - #КонецЕсли - Иначе - Возврат; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); - #КонецЕсли - Если НужноВернутьПароль Тогда - ПользовательИБ.СохраняемоеЗначениеПароля = мHash; - КонецЕсли; - Если НужноВернутьАутентификациюПаролем Тогда - ПользовательИБ.АутентификацияСтандартная = Ложь; - КонецЕсли; - Если НужноВернутьАутентификациюОС Тогда - ПользовательИБ.АутентификацияОС = Истина; - КонецЕсли; - Если НужноВернутьЗащитуОтОпасныхДействий И ирКэш.ДоступнаЗащитаОтОпасныхДействийЛкс() Тогда - ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Истина; - КонецЕсли; - Если УдалитьРоли.Количество() > 0 Тогда - Для Каждого Роль Из УдалитьРоли Цикл - ПользовательИБ.Роли.Удалить(Роль.Значение); - КонецЦикла; - ПользовательИБ.ПолноеИмя = СтрокаБезПоследнегоФрагментаЛкс(ПользовательИБ.ПолноеИмя, МаркерВременныхРолейЛкс()); - КонецЕсли; - Если НужноВернутьЯзыкКонфигурации Тогда - ПользовательИБ.Язык = Метаданные.Языки[ЯзыкКонфигурации]; - КонецЕсли; - ПользовательИБ.Записать(); - -КонецПроцедуры - -Процедура НастроитьПоляВводаПараметровПотоковЛкс(ЭтаФорма, ЕстьКоличествоОбъектовВПорции = Истина) Экспорт - - ЭлементыФормы = ЭтаФорма.ЭлементыФормы; - Если ЕстьКоличествоОбъектовВПорции Тогда - СписокВыбора = ЭлементыФормы.КоличествоОбъектовВПорции.СписокВыбора; - СписокВыбора.Добавить(1); - СписокВыбора.Добавить(2); - СписокВыбора.Добавить(5); - СписокВыбора.Добавить(10); - СписокВыбора.Добавить(20); - СписокВыбора.Добавить(50); - СписокВыбора.Добавить(100); - СписокВыбора.Добавить(200); - КонецЕсли; - СписокВыбора = ЭлементыФормы.КоличествоПотоков.СписокВыбора; - СписокВыбора.Добавить(1); - СписокВыбора.Добавить(4); - СписокВыбора.Добавить(8); - СписокВыбора.Добавить(12); - СписокВыбора.Добавить(16); - -КонецПроцедуры - -Функция ОткрытьМенеджерТабличногоПоляЛкс(Знач ТабличноеПоле = Неопределено, Знач ЭтаФорма, Знач АктивизироватьСтраницу = "", Знач МетаданныеВыбора = Неопределено) Экспорт - - Если ТабличноеПоле = Неопределено Тогда - ТабличноеПоле = ЭтаФорма.ТекущийЭлемент; - КонецЕсли; - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаМенеджера = мПлатформа.ПолучитьФорму("МенеджерТабличногоПоля", ЭтаФорма); - ФормаМенеджера.УстановитьСвязь(ТабличноеПоле, , АктивизироватьСтраницу, МетаданныеВыбора); - Возврат ФормаМенеджера; - -КонецФункции - -Процедура ОткрытьСвязанныйСеансТонкогоКлиентаЛкс() Экспорт - Если ПроверитьПлатформаНеWindowsЛкс() Тогда - Возврат; - КонецЕсли; - Результат = ирКэш.ПолучитьСеансТонкогоКлиентаЛкс(); - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - Результат.Visible = Истина; - Окна = Результат.ПолучитьОкна(); - СписокОткрытыхОбъектов = Новый СписокЗначений; - Для Каждого Окно Из Окна Цикл - Попытка - Содержимое = Окно.Содержимое; - Исключение - // В 8.2 нет такого свойства - Продолжить; - КонецПопытки; - Для Каждого Форма Из Содержимое Цикл - Попытка - СсылкаCOM = Форма.Parameters.Key; - Исключение - СсылкаCOM = Неопределено; - КонецПопытки; - Если СсылкаCOM <> Неопределено Тогда - ФрагментыИмениТипа = ирОбщий.СтрРазделитьЛкс(Форма.FormName); - МассивПараметров = Новый Массив; - МассивПараметров.Добавить(Новый УникальныйИдентификатор(Результат.String(СсылкаCOM.УникальныйИдентификатор()))); - Ссылка = Новый (Тип(ФрагментыИмениТипа[0] + "Ссылка." + ФрагментыИмениТипа[1]), МассивПараметров); - СписокОткрытыхОбъектов.Добавить(Ссылка, ФрагментыИмениТипа[0] + "." + ФрагментыИмениТипа[1] + " - " + Ссылка); - КонецЕсли; - КонецЦикла; - КонецЦикла; - Если СписокОткрытыхОбъектов.Количество() > 0 Тогда - СписокОткрытыхОбъектов.СортироватьПоПредставлению(); - ВыбранныйЭлемент = СписокОткрытыхОбъектов.ВыбратьЭлемент("Выберите объект для открытия в редакторе объекта БД"); - Если ВыбранныйЭлемент <> Неопределено Тогда - ОткрытьСсылкуВРедактореОбъектаБДЛкс(ВыбранныйЭлемент.Значение); - КонецЕсли; - КонецЕсли; -КонецПроцедуры - -Процедура ОповеститьОЗаписиОбъектаЛкс(Знач ТипИлиМассив, Знач Источник = Неопределено, Знач ВсеТипыДляПодсистемы = Ложь) Экспорт - - Если ТипЗнч(ТипИлиМассив) <> Тип("Массив") Тогда - ТипИлиМассив = ЗначенияВМассивЛкс(ТипИлиМассив); - КонецЕсли; - ВсеТипыДляПодсистемыОповещены = Ложь; - Если ТипИлиМассив.Количество() > 1 Или ВсеТипыДляПодсистемы Тогда - ирОбщий.ОповеститьФормыПодсистемыЛкс("ЗаписанОбъект",, Источник); - ВсеТипыДляПодсистемыОповещены = Истина; - КонецЕсли; - Для Каждого ТипИлиОбъект Из ТипИлиМассив Цикл - Если Не ВсеТипыДляПодсистемыОповещены Тогда - ирОбщий.ОповеститьФормыПодсистемыЛкс("ЗаписанОбъект", ТипИлиОбъект, Источник); - КонецЕсли; - Если ТипЗнч(ТипИлиОбъект) = Тип("Тип") Или ЛиСсылкаНаОбъектБДЛкс(ТипИлиОбъект) Тогда - ОповеститьОбИзменении(ТипИлиОбъект); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Для оповещения об изменениях объектов в памяти клиентского приложения -Процедура ОповеститьОбИзмененииОбъектаВПамятиЛкс(Объект, Источник = Неопределено) Экспорт - - ирОбщий.ОповеститьФормыПодсистемыЛкс("ИзмененОбъектВПамяти", Объект, Источник); - -КонецПроцедуры - -Функция ЭтоНеудобнаяСсылкаДляОбработкиВыбораЛкс(Знач ВыбранноеЗначение) Экспорт - - // Почему то для ссылок внешних источников данных оповещение о выборе устанавливает строковое значение - XMLТип = XMLТипЗнч(ВыбранноеЗначение); - Если Истина - И XMLТип <> Неопределено - И (Ложь - Или Найти(XMLТип.ИмяТипа, "ExternalDataSourceTableRef.") > 0 - Или (Истина - И ВыбранноеЗначение <> Неопределено - И Метаданные.НайтиПоТипу(ТипЗнч(ВыбранноеЗначение)) <> Неопределено - И РасширениеКонфигурацииОбъектаМДЛкс(ВыбранноеЗначение.Метаданные()) <> Неопределено)) - Тогда - ЭтоНеудобнаяСсылка = Истина; - Иначе - ЭтоНеудобнаяСсылка = Ложь; - КонецЕсли; - Возврат ЭтоНеудобнаяСсылка; - -КонецФункции - -Функция ОткрытьОбъектМетаданныхЛкс(ОбъектИлиПолноеИмяМД) Экспорт - - Если ТипЗнч(ОбъектИлиПолноеИмяМД) = Тип("ОбъектМетаданных") Тогда - ОбъектМД = ОбъектИлиПолноеИмяМД; - Иначе - ОбъектМД = ПолучитьМетаданныеЛкс(ОбъектИлиПолноеИмяМД); - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ОбъектМД = Метаданные.НайтиПоТипу(); - #КонецЕсли - Если ОбъектМД = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - ПолноеИмяМД = ОбъектМД.ПолноеИмя(); - Фрагменты = ирОбщий.СтрРазделитьЛкс(ПолноеИмяМД); - Если Ложь - Или ПеревестиСтроку("ОбщийРеквизит") = Фрагменты[0] - Или ПеревестиСтроку("Подсистема") = Фрагменты[0] - Или (Истина - И Фрагменты.Количество() >= 4 - И Не ЛиКорневойТипВнешнегоИсточникаДанныхЛкс(Фрагменты[0])) - Тогда - ИсследоватьЛкс(ОбъектМД); - Возврат Неопределено; - // Для табличной части берем родителя - //ПолноеИмяМД = ОбъектМД.Родитель().ПолноеИмя(); - КонецЕсли; - Форма = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); - Форма.ПараметрИмяОбъектаМетаданных = ПолноеИмяМД; - Форма.ПрименитьПараметрыФормы(); - Возврат Форма; - -КонецФункции - -Процедура ОткрытьОбъектМДИзТаблицыСИменамиТиповЛкс(Знач СтрокаТаблицы) Экспорт - - Если Найти(СтрокаТаблицы.ИмяТипаЗначения, ".") > 0 Тогда - Тип = Тип(СтрокаТаблицы.ИмяТипаЗначения); - ОбъектМД = Метаданные.НайтиПоТипу(Тип); - Если ОбъектМД <> Неопределено Тогда - ирОбщий.ОткрытьОбъектМетаданныхЛкс(ОбъектМД); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ОткрытьЗначенияФункциональныхОпцийЛкс(Знач ЗначенияОпций, Знач КлючУникальности) Экспорт - - Если ЗначенияОпций = Неопределено Или ЗначенияОпций.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаПросмотра = мПлатформа.ПолучитьФорму("ЗначенияФункциональныхОпций", , КлючУникальности); - ФормаПросмотра.НачальноеЗначениеВыбора = ЗначенияОпций; - ФормаПросмотра.Открыть(); - Возврат ФормаПросмотра; - -КонецФункции - -Функция ОткрытьПользователяИБЛкс(Пользователь) Экспорт - - ФормаПользователя = ирОбщий.ПолучитьФормуЛкс("Обработка.ирРедакторПользователей.Форма.ПользовательИнфобазы",,, Пользователь); - ФормаПользователя.ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); - ФормаПользователя.Открыть(); - Возврат ФормаПользователя; - -КонецФункции - -Функция ОбработкаОбъектИзФормыЛкс(ЭтаФорма) Экспорт - - Если ТипЗнч(ЭтаФорма) = Тип("Форма") Тогда - ОбработкаОбъект = ЭтаФорма; - Иначе - //ОбработкаОбъект = ЭтаФорма.РеквизитФормыВЗначение("фОбъект"); - Фрагменты = СтрРазделитьЛкс(ЭтаФорма.ИмяФормы); - ОбработкаОбъект = ДанныеФормыВЗначение(ЭтаФорма.фОбъект, Тип("ОбработкаОбъект." + Фрагменты[1])); - КонецЕсли; - Возврат ОбработкаОбъект; - -КонецФункции - -Процедура ПроверитьЗакрытьФормуПриОтказеЛкс(ЭтаФорма, Знач Отказ) Экспорт - - // Антибаг платформы 8.3.11-12 Не работает установка параметра Отказ перед открытием обычной формы в управляемом приложении - // https://partners.v8.1c.ru/forum/t/1713475/m/1713475 - Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() Тогда - Если Отказ И Не ЭтаФорма.МодальныйРежим Тогда - ЭтаФорма.Закрыть(); - КонецЕсли; - КонецЕсли - -КонецПроцедуры - -Функция КлючиСтрокБДИзТаблицыФормыЛкс(Форма = Неопределено, выхКлючТекущейСтроки = Неопределено, выхТаблицаФормыДинамическогоСписка = Неопределено, Знач НуженВидимыйПорядок = Истина) Экспорт - - Результат = Новый Массив; - Если Форма = Неопределено Тогда - Форма = АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - Если Ложь - Или ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТаблицаФормы") - Или ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТабличноеПоле") - Тогда - ТаблицаФормы = Форма.ТекущийЭлемент; - Если ЛиКлючСсылкиИлиРегистраЛкс(ТаблицаФормы.ТекущаяСтрока) Тогда - выхКлючТекущейСтроки = ТаблицаФормы.ТекущаяСтрока; - КонецЕсли; - Ссылка = ТаблицаФормы.ТекущаяСтрока; - ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТаблицаФормы, НуженВидимыйПорядок); - Если ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда - выхТаблицаФормыДинамическогоСписка = ТаблицаФормы; - Возврат ВыделенныеСтроки; - КонецЕсли; - Структура = Новый Структура("Ссылка, Data"); - ДанныеПоля = Неопределено; - Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТаблицаФормы, ВыделеннаяСтрока, ДанныеПоля); - ЗаполнитьЗначенияСвойств(Структура, ДанныеСтроки); - Ссылка = Структура["Ссылка"]; - Если ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда - Результат.Добавить(Ссылка); - КонецЕсли; - Ссылка = Структура["Data"]; - Если ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда - Результат.Добавить(Ссылка); - Если ВыделеннаяСтрока = ТаблицаФормы.ТекущаяСтрока Тогда - выхКлючТекущейСтроки = Ссылка; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция КлючОсновногоОбъектаУправляемойФормыЛкс(Форма = Неопределено) Экспорт - - Результат = Новый Массив; - Если Форма = Неопределено Тогда - Форма = АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда - Ссылка = ирОбщий.СсылкаОсновногоОбъектаФормыЛкс(Форма); - Если Не ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда - Попытка - Ссылка = Форма.Параметры.Ключ; - Исключение - КонецПопытки; - КонецЕсли; - Если Не ЛиКлючСсылкиИлиРегистраЛкс(Ссылка) Тогда - Ссылка = Неопределено; - КонецЕсли; - КонецЕсли; - Возврат Ссылка; - -КонецФункции - -Функция ЗначенияВыделенныхЯчеекТаблицыЛкс(Форма = Неопределено, выхКлючТекущейСтроки = Неопределено, НуженВидимыйПорядок = Истина, Знач ТолькоСсылки = Истина) Экспорт - - Результат = Новый Массив; - Если Форма = Неопределено Тогда - Форма = АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - Если ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТаблицаФормы") Тогда - ТаблицаФормы = Форма.ТекущийЭлемент; - ТекущееПоле = ТаблицаФормы.ТекущийЭлемент; - Если ТекущееПоле = Неопределено Тогда - Возврат Результат; - КонецЕсли; - ПолноеИмяПоля = ТекущееПоле.Имя; - ПутьКДанным = Null; - ДанныеПоля = Неопределено; - ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТаблицаФормы, НуженВидимыйПорядок); - Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - Если ТипЗнч(ВыделеннаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Продолжить; - КонецЕсли; - ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТаблицаФормы, ВыделеннаяСтрока, ДанныеПоля); - Если ПутьКДанным = Null Тогда - ПутьКДанным = НайтиПутьКДаннымПоляТаблицыФормыЛкс(ДанныеСтроки, ПолноеИмяПоля); - КонецЕсли; - ЗначениеПоля = Неопределено; - Если ЗначениеЗаполнено(ПутьКДанным) Тогда - ЗначениеПоля = ДанныеСтроки[ПервыйФрагментЛкс(ПутьКДанным)]; - КонецЕсли; - Если Не ТолькоСсылки Или ЛиКлючСсылкиИлиРегистраЛкс(ЗначениеПоля) Тогда - Результат.Добавить(ЗначениеПоля); - Если ВыделеннаяСтрока = ТаблицаФормы.ТекущаяСтрока Тогда - выхКлючТекущейСтроки = ЗначениеПоля; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Если Найти(ПутьКДанным, ".") > 0 И Результат.Количество() > 0 Тогда - Результат = ПрочитатьРеквизитПоМассивуСсылокЛкс(Результат, ПоследнийФрагментЛкс(ПутьКДанным)); - КонецЕсли; - ИначеЕсли ТипЗнч(Форма.ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда - ТабличноеПоле = Форма.ТекущийЭлемент; - ПутьКДанным = ПутьКДаннымКолонкиТабличногоПоляЛкс(ТабличноеПоле); - Если ЗначениеЗаполнено(ПутьКДанным) Тогда - ВыделенныеСтроки = ВыделенныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, НуженВидимыйПорядок); - ДанныеПоля = Неопределено; - Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл - ДанныеСтроки = ДанныеСтрокиТабличногоПоляЛкс(ТабличноеПоле, ВыделеннаяСтрока, ДанныеПоля); - ЗначениеПоля = Неопределено; - Если ЗначениеЗаполнено(ПутьКДанным) Тогда - Попытка - ЗначениеПоля = ДанныеСтроки[ПоследнийФрагментЛкс(ПутьКДанным)]; - Исключение - // В отборе компоновки может возникать ошибка "Поле объекта не обнаружено (ПредставлениеДляКраткогоОтображенияЭлемента)" - ОписаниеОшибки = ОписаниеОшибки(); - КонецПопытки; - КонецЕсли; - Если Не ТолькоСсылки Или ЛиКлючСсылкиИлиРегистраЛкс(ЗначениеПоля) Тогда - Результат.Добавить(ЗначениеПоля); - Если ВыделеннаяСтрока = ТабличноеПоле.ТекущаяСтрока Тогда - выхКлючТекущейСтроки = ЗначениеПоля; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - ИначеЕсли ТипЗнч(Форма.ТекущийЭлемент) = Тип("ПолеФормы") Тогда - ПолеФормы = Форма.ТекущийЭлемент; - Если ПолеФормы.Вид = ВидПоляФормы.ПолеВвода Тогда - ЗначениеПоля = ДанныеЭлементаФормыЛкс(Форма.ТекущийЭлемент); - Если Не ТолькоСсылки Или ЛиКлючСсылкиИлиРегистраЛкс(ЗначениеПоля) Тогда - Результат.Добавить(ЗначениеПоля); - выхКлючТекущейСтроки = ЗначениеПоля; - КонецЕсли; - ИначеЕсли ПолеФормы.Вид = ВидПоляФормы.ПолеТабличногоДокумента Тогда - ДанныеРасшифровки = ДанныеРасшифровкиУправляемойФормыОтчетаЛкс(Форма); - ТабличныйДокумент = ДанныеЭлементаФормыЛкс(ПолеФормы); - #Если Сервер И Не Сервер Тогда - ТабличныйДокумент = Новый ТабличныйДокумент; - #КонецЕсли - Если ТабличныйДокумент = Неопределено Тогда - Возврат Результат; - КонецЕсли; - КлючТекущейСтроки = Неопределено; - ТаблицаЗначений = ТаблицаКлючейИзТабличногоДокументаЛкс(ТабличныйДокумент, ДанныеРасшифровки,,, КлючТекущейСтроки); - Если ТаблицаЗначений.Колонки.Количество() > 0 Тогда - Для Каждого ЗначениеПоля Из ТаблицаЗначений.ВыгрузитьКолонку(0) Цикл - Если Не ТолькоСсылки Или ЛиКлючСсылкиИлиРегистраЛкс(ЗначениеПоля) Тогда - Результат.Добавить(ЗначениеПоля); - КонецЕсли; - КонецЦикла; - Если Истина - И КлючТекущейСтроки <> Неопределено - И (Ложь - Или Не ТолькоСсылки - Или ЛиКлючСсылкиИлиРегистраЛкс(КлючТекущейСтроки[0])) - Тогда - выхКлючТекущейСтроки = КлючТекущейСтроки[0]; - КонецЕсли; - КонецЕсли; - Если выхКлючТекущейСтроки = Неопределено И Результат.Количество() > 0 Тогда - выхКлючТекущейСтроки = Результат[0]; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ПрочитатьРеквизитПоМассивуСсылокЛкс(Знач Ссылки, Знач ИмяРеквизита) Экспорт - - #Если Сервер И Не Сервер Тогда - Ссылки = Новый Массив; - #КонецЕсли - Результат = Новый Массив; - Если Ссылки.Количество() > 0 Тогда - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ Т." + ИмяРеквизита + " ИЗ " + Ссылки[0].Метаданные().ПолноеИмя() + " КАК Т ГДЕ Т.Ссылка В (&Ссылки)"; - Запрос.УстановитьПараметр("Ссылки", Ссылки); - Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ЭтоУправляемаяФормаОтчетаЛкс(Знач АктивнаяФорма, РазрешитьВнешнийОтчет = Ложь) Экспорт - - Возврат Истина - И ТипЗнч(АктивнаяФорма) <> Тип("Форма") - И (Ложь - Или Найти(АктивнаяФорма.ИмяФормы, ирОбщий.ПеревестиСтроку("Отчет") + ".") = 1 - Или РазрешитьВнешнийОтчет И Найти(АктивнаяФорма.ИмяФормы, ирОбщий.ПеревестиСтроку("ВнешнийОтчет") + ".") = 1); - -КонецФункции - -Функция ТекущийЭлементАктивнойФормыЛкс(АктивнаяФорма = Неопределено) Экспорт - - Если АктивнаяФорма = Неопределено Тогда - АктивнаяФорма = АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - ТекущийЭлемент = АктивнаяФорма.ТекущийЭлемент; - Если ТипЗнч(АктивнаяФорма) = Тип("УправляемаяФорма") Тогда - Если ТипЗнч(ТекущийЭлемент) = Тип("ОсновнойЭлементФормы") Тогда - // http://www.hostedredmine.com/issues/880476 - ТекущийЭлемент = Неопределено; - КонецЕсли; - КонецЕсли; - Возврат ТекущийЭлемент; - -КонецФункции - -Процедура ЗапомнитьСодержимоеЭлементаАктивнойФормыДляСравненияЛкс(Форма = Неопределено) Экспорт - - ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); - Если Истина - И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") - И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") - И ТипЗнч(ТекущийЭлемент) <> Тип("ПолеТабличногоДокумента") - И Не (Истина - И ТипЗнч(ТекущийЭлемент) = Тип("ПолеФормы") - И ТекущийЭлемент.Вид = ВидПоляФормы.ПолеТабличногоДокумента) - Тогда - Возврат; - КонецЕсли; - ирОбщий.ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(Форма, ТекущийЭлемент); - -КонецПроцедуры - -Процедура ОткрытьТаблицуЗначенийИзАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт - - ТекущаяСтрокаТаблицы = Неопределено; - ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); - Если Ложь - Или ТипЗнч(ТекущийЭлемент) = Тип("ТаблицаФормы") - Тогда - Результат = ТаблицаИлиДеревоЗначенийИзТаблицыФормыСКоллекциейЛкс(ТекущийЭлемент,, Истина, Ложь,,, Форма, ТекущаяСтрокаТаблицы); - ИначеЕсли ТипЗнч(ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда - // Используем стандартный диалог, чтобы не терялась возможность оставить только видимые колонки - ИначеЕсли Ложь - Или ТипЗнч(ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") - Или (Истина - И ТипЗнч(ТекущийЭлемент) = Тип("ПолеФормы") - И ТекущийЭлемент.Вид = ВидПоляФормы.ПолеТабличногоДокумента) - Тогда - ДанныеРасшифровки = ДанныеРасшифровкиУправляемойФормыОтчетаЛкс(Форма); - ТабличныйДокумент = ДанныеЭлементаФормыЛкс(ТекущийЭлемент); - Если ТабличныйДокумент = Неопределено Тогда - Возврат; - КонецЕсли; - #Если Сервер И Не Сервер Тогда - ТабличныйДокумент = Новый ТабличныйДокумент; - #КонецЕсли - ОбластьДляАнализа = Неопределено; - ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть; - Если ТекущаяОбласть.Верх = ТекущаяОбласть.Низ Тогда - Ответ = Вопрос("Выделена только одна строка. Хотите обработать все строки?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Да Тогда - ПерваяСтрокаОбласти = ТекущаяОбласть.Верх; - ШиринаКолонкиТекущейОбласти = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, ТекущаяОбласть.Лево).ШиринаКолонки; - Для НомерСтроки = -ТекущаяОбласть.Верх + 1 По 0 Цикл - ШиринаКолонкиПроверяемойОбласти = ТабличныйДокумент.Область(-НомерСтроки, ТекущаяОбласть.Лево, -НомерСтроки, ТекущаяОбласть.Лево).ШиринаКолонки; - Если ШиринаКолонкиТекущейОбласти = 0 Тогда - ШиринаКолонкиТекущейОбласти = ШиринаКолонкиПроверяемойОбласти; - КонецЕсли; - Если ШиринаКолонкиТекущейОбласти <> ШиринаКолонкиПроверяемойОбласти Тогда - ПерваяСтрокаОбласти = -НомерСтроки + 1; - Прервать; - КонецЕсли; - КонецЦикла; - ОбластьДляАнализа = ТабличныйДокумент.Область(ПерваяСтрокаОбласти, ТекущаяОбласть.Лево, ТабличныйДокумент.ВысотаТаблицы, ТекущаяОбласть.Право); - КонецЕсли; - КонецЕсли; - Результат = ТаблицаКлючейИзТабличногоДокументаЛкс(ТабличныйДокумент, ДанныеРасшифровки,, ОбластьДляАнализа, ТекущаяСтрокаТаблицы); - #Если Сервер И Не Сервер Тогда - Результат = Новый ТаблицаЗначений; - #КонецЕсли - Если Результат.Колонки.Количество() = 0 Тогда - Ответ = Вопрос("Ячейки не содержат расшифровки. Хотите назначить имена колонкам из первой строки выделенной области?", РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Нет); - ЛиПерваяСтрокаСодержитИменаКолонок = Ответ = КодВозвратаДиалога.Да; - Результат = ТаблицаЗначенийИзТабличногоДокументаЛкс(ТабличныйДокумент, ЛиПерваяСтрокаСодержитИменаКолонок,,,, ?(ОбластьДляАнализа = Неопределено, Истина, ОбластьДляАнализа), ТекущаяСтрокаТаблицы); - КонецЕсли; - #Если Сервер И Не Сервер Тогда - Результат = Новый ТаблицаЗначений; - #КонецЕсли - Если ТекущаяСтрокаТаблицы <> Неопределено Тогда - ИндексТекущейСтроки = Результат.Индекс(ТекущаяСтрокаТаблицы); - КонецЕсли; - Результат = СузитьТипыКолонокТаблицыБезПотериДанныхЛкс(Результат); - Если ТекущаяСтрокаТаблицы <> Неопределено Тогда - ТекущаяСтрокаТаблицы = Результат[ИндексТекущейСтроки]; - КонецЕсли; - ТекущийЭлемент = Неопределено; - Иначе - Возврат; - КонецЕсли; - Если Результат <> Неопределено Тогда - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаТаблицыЗначений = мПлатформа.ПолучитьФорму("ТаблицаЗначений", , Результат); - ФормаТаблицыЗначений.ПараметрТабличноеПоле = ТекущийЭлемент; - ФормаТаблицыЗначений.НачальноеЗначениеВыбора = Результат; - ФормаТаблицыЗначений.Открыть(); - Если ТекущаяСтрокаТаблицы <> Неопределено Тогда - ФормаТаблицыЗначений.УстановитьТекущуюСтроку(ТекущаяСтрокаТаблицы, Результат); - КонецЕсли; - Иначе // ДинамическийСписок - ирОбщий.ВывестиСтрокиТабличногоПоляИПоказатьЛкс(Форма, ТекущийЭлемент); - КонецЕсли; - -КонецПроцедуры - -Функция ОткрытьТабличныйДокументИзАктивнойФормыЛкс(Форма = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - Форма = ОткрытьФорму(); - #КонецЕсли - ДокументИзменен = Ложь; - ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); - Если Ложь - Или ТипЗнч(ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") - Или (Истина - И ТипЗнч(ТекущийЭлемент) = Тип("ПолеФормы") - И ТекущийЭлемент.Вид = ВидПоляФормы.ПолеТабличногоДокумента) - Тогда - Результат = ДанныеЭлементаФормыЛкс(ТекущийЭлемент); - ДанныеРасшифровки = ДанныеРасшифровкиУправляемойФормыОтчетаЛкс(Форма); - КонецЕсли; - Если Результат <> Неопределено Тогда - Если ТипЗнч(ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") Тогда - ДоступноИзменение = Истина - И Не ТекущийЭлемент.ТолькоПросмотр - И ТекущийЭлемент.ПолучитьДействие("ПриИзмененииСодержимогоОбласти") = Неопределено; - ирОбщий.ПолеТабличногоДокументаВосстановитьОформлениеТекущихСтрокЛкс(Форма, ТекущийЭлемент); - Иначе - ПутьКДанным = ПутьКДаннымЭлементаУправляемойФормыЛкс(ТекущийЭлемент,, Форма); - ДоступноИзменение = Истина - И ТекущийЭлемент.Редактирование - И Не ТекущийЭлемент.Защита - И ЛиДоступноРедактированиеЭлементаУправляемойФормыЛкс(ТекущийЭлемент) - И ЗначениеЗаполнено(ПутьКДанным) - //И ТекущийЭлемент.ПолучитьДействие("ПриИзмененииСодержимогоОбласти") = Неопределено // но на клиенте его получить нельзя - ; - КонецЕсли; - НовоеЗначение = ОткрытьТабличныйДокументРезультатаКомпоновкиЛкс(Результат, ДанныеРасшифровки,, ДоступноИзменение); - Если НовоеЗначение <> Неопределено Тогда - #Если Сервер И Не Сервер Тогда - ТекущийЭлемент = Новый ТабличныйДокумент; - НовоеЗначение = Новый ТабличныйДокумент; - #КонецЕсли - Если ТипЗнч(ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") Тогда - // Так только текущий язык останется - ТекущийЭлемент.ВставитьОбласть(НовоеЗначение.Область(),,, Ложь); - Если ТекущийЭлемент.ИзменяетДанные Тогда - Форма.Модифицированность = Истина; - КонецЕсли; - Иначе - Выполнить("Форма." + ПутьКДанным + " = НовоеЗначение"); - КонецЕсли; - ДокументИзменен = Истина; - Иначе - ТекущийЭлемент.ТекущаяОбласть = ТекущийЭлемент.ТекущаяОбласть; - КонецЕсли; - КонецЕсли; - Возврат ДокументИзменен; - -КонецФункции - -Функция ЛиДоступноРедактированиеЭлементаУправляемойФормыЛкс(Знач ТекущийЭлемент) Экспорт - - Возврат РодительЭлементаУправляемойФормыЛкс(ТекущийЭлемент, "все", "ТолькоПросмотр", Истина) <> "Неопределено"; - -КонецФункции - -Функция ОткрытьТабличныйДокументРезультатаКомпоновкиЛкс(Знач ПолеТабличногоДокумента, Знач ДанныеРасшифровки = Неопределено, Знач ИмяСохраненияПоложенияОкна = "", Знач Модально = Ложь) Экспорт - - //ТабличныйДокумент = Новый ТабличныйДокумент; - //ТабличныйДокумент.Вывести(ПолеТабличногоДокумента); - ТабличныйДокумент = ПолучитьОбластьТабличногоДокументаИнтерактивноЛкс(ПолеТабличногоДокумента); - #Если Сервер И Не Сервер Тогда - ТабличныйДокумент = Новый ТабличныйДокумент; - #КонецЕсли - ТабличныйДокумент.ИмяСохраненияПоложенияОкна = ИмяСохраненияПоложенияОкна; - Если ДанныеРасшифровки <> Неопределено Тогда - УпроститьРасшифровкиТабличногоДокументаКомпоновкиЛкс(ТабличныйДокумент, ДанныеРасшифровки); - КонецЕсли; - Результат = Неопределено; - Если ОткрытьЗначениеЛкс(ТабличныйДокумент,,,, Модально,, ПолеТабличногоДокумента) Тогда - Результат = ТабличныйДокумент; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция ДанныеРасшифровкиУправляемойФормыОтчетаЛкс(Знач Форма) Экспорт - - ВозможныеИменаРеквизитов = Новый Массив; - ВозможныеИменаРеквизитов.Добавить("ДанныеРасшифровки"); - ВозможныеИменаРеквизитов.Добавить("ОтчетДанныеРасшифровки"); - Для Каждого ИмяРеквизита Из ВозможныеИменаРеквизитов Цикл - Попытка - ДанныеРасшифровки = Форма[ИмяРеквизита]; - Прервать; - Исключение - ДанныеРасшифровки = Неопределено; - КонецПопытки; - КонецЦикла; - Если Истина - И ТипЗнч(ДанныеРасшифровки) = Тип("Строка") - И ЗначениеЗаполнено(ДанныеРасшифровки) - Тогда - ДанныеРасшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); - КонецЕсли; - Возврат ДанныеРасшифровки; - -КонецФункции - -Процедура ОткрытьРазличныеЗначенияКолонкиАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт - - ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); - Если Истина - И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") - И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") - Тогда - Возврат; - КонецЕсли; - ирОбщий.ОткрытьРазличныеЗначенияКолонкиЛкс(ТекущийЭлемент,,, Форма); - -КонецПроцедуры - -Процедура ОтладитьКомпоновкуДанныхАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт - - Если Форма = Неопределено Тогда - Форма = АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда - Попытка - НастройкиОтчета = Форма.НастройкиОтчета; - Исключение - НастройкиОтчета = Неопределено; - КонецПопытки; - Если НастройкиОтчета <> Неопределено И НастройкиОтчета.СхемаМодифицирована Тогда - // Стандартная форма отчета БСП - СхемаКомпоновки = ПолучитьИзВременногоХранилища(НастройкиОтчета.АдресСхемы); - Иначе - Фрагменты = СтрРазделитьЛкс(Форма.ИмяФормы); - Если Фрагменты[0] = ирОбщий.ПеревестиСтроку("Отчет") Тогда - ОтчетОбъект = Отчеты[Фрагменты[1]].Создать(); - #Если Сервер И Не Сервер Тогда - ОтчетОбъект = Обработки.ирКонсольКомпоновокДанных.Создать(); - #КонецЕсли - СхемаКомпоновки = ОтчетОбъект.СхемаКомпоновкиДанных; - //ИначеЕсли Фрагменты[0] = ирОбщий.ПеревестиСтроку("ВнешнийОтчет") Тогда - // // https://forum.mista.ru/topic.php?id=857116 - // ОтчетОбъект = ВнешниеОтчеты.Создать(Фрагменты[1]); - // #Если Сервер И Не Сервер Тогда - // ОтчетОбъект = ВнешниеОтчеты.Создать(); - // #КонецЕсли - // СхемаКомпоновки = ОтчетОбъект.СхемаКомпоновкиДанных; - Иначе - СообщитьЛкс(СтрШаблонИменЛкс("Не поддерживаемый тип метаданных отчета - %1",, Фрагменты[0])); - Возврат; - КонецЕсли; - КонецЕсли; - КомпоновщикНастроек = Форма.Отчет.КомпоновщикНастроек; - Иначе - Попытка - ОбщийМодульТиповыеОтчеты = Вычислить("ТиповыеОтчеты"); - Исключение - КонецПопытки; - Если Истина - И ОбщийМодульТиповыеОтчеты <> Неопределено - И МетодРеализованЛкс(ОбщийМодульТиповыеОтчеты, "ЗагрузитьВРеквизитЗначенияНастроекПанелиПользователя") - Тогда - ОбщийМодульТиповыеОтчеты.ЗагрузитьВРеквизитЗначенияНастроекПанелиПользователя(Форма.ЭтотОбъект, Форма); - ОбщийМодульТиповыеОтчеты.ПолучитьПримененуюНастройку(Форма.ЭтотОбъект); - КонецЕсли; - СхемаКомпоновки = Форма.СхемаКомпоновкиДанных; - КомпоновщикНастроек = Форма.КомпоновщикНастроек; - КонецЕсли; - ОтладитьЛкс(СхемаКомпоновки,, КомпоновщикНастроек.ПолучитьНастройки()); - -КонецПроцедуры - -Процедура РедактироватьАктивныйСписокЗначенийУправляемыйЛкс(Форма = Неопределено) Экспорт - - Если Форма = Неопределено Тогда - Форма = АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - Если ТипЗнч(Форма) <> Тип("УправляемаяФорма") Тогда - Возврат; - КонецЕсли; - ПутьКДанным = ""; - ДанныеЭлементаФормыЛкс(Форма.ТекущийЭлемент, ПутьКДанным); - Если Не ЗначениеЗаполнено(ПутьКДанным) Тогда - Возврат; - КонецЕсли; - СписокЗначений = Форма[ПутьКДанным]; - #Если Сервер И Не Сервер Тогда - СписокЗначений = Новый СписокЗначений; - #КонецЕсли - ПолеЗначения = Форма.Элементы.Найти("Value"); - Если ПолеЗначения = Неопределено Тогда - ПолеЗначения = Форма.ТекущийЭлемент.ТекущийЭлемент; - КонецЕсли; - Если ПолеЗначения <> Неопределено Тогда - СтруктураОтбора = СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(ПолеЗначения); - Если СписокЗначений.ДоступныеЗначения = Неопределено И ПолеЗначения.РежимВыбораИзСписка Тогда - СписокЗначений = СкопироватьУниверсальнуюКоллекциюЛкс(СписокЗначений); - СписокЗначений.ДоступныеЗначения = ПолеЗначения.СписокВыбора; - КонецЕсли; - КонецЕсли; - Если ОткрытьСписокЗначенийЛкс(СписокЗначений, СтруктураОтбора) Тогда - Форма[ПутьКДанным] = СписокЗначений; - КонецЕсли; - -КонецПроцедуры - -Процедура НастроитьДинамическийСписокАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт - - ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); - Если ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") Тогда - Возврат; - КонецЕсли; - ДанныеЭлемента = ДанныеЭлементаФормыЛкс(ТекущийЭлемент); - Если ТипЗнч(ДанныеЭлемента) <> Тип("ДинамическийСписок") Тогда - Возврат; - КонецЕсли; - Параметры = Новый Структура("Настройки, ПользовательскиеНастройки, ФиксированныеНастройки, ИсточникДоступныхНастроек"); - СхемаИНастройки = ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(Форма); - Если СхемаИНастройки <> Неопределено Тогда - Параметры.Вставить("ИсполняемаяСхема", ПоместитьВоВременноеХранилище(СхемаИНастройки.Схема, Форма.УникальныйИдентификатор)); - Параметры.Вставить("ИсполняемыеНастройки", СхемаИНастройки.Настройки); - КонецЕсли; - ЗаполнитьЗначенияСвойств(Параметры, ДанныеЭлемента.КомпоновщикНастроек); - Параметры.ИсточникДоступныхНастроек = ДанныеЭлемента.КомпоновщикНастроек.ПолучитьИсточникДоступныхНастроек(); - Если ирКэш.НомерВерсииПлатформыЛкс() > 803001 Тогда - Выполнить("ОткрытьФорму(""Обработка.ирДинамическийСписок.Форма.НастройкиСпискаУпр"", Параметры, ТекущийЭлемент,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца)"); - Иначе - ОткрытьФормуМодально("Обработка.ирДинамическийСписок.Форма.НастройкиСпискаУпр", Параметры, ТекущийЭлемент); - КонецЕсли; - -КонецПроцедуры - -Функция ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(Знач Форма, Знач ИмяТаблицыФормы = "") Экспорт - - Если Форма.ИмяФормы = "Обработка.ирДинамическийСписок.Форма.ФормаУпр" Тогда - СхемаИНастройки = Форма.ИсполняемыеСхемаИНастройки(); - Иначе - #Если Сервер И Не Сервер Тогда - ирОбщий.УправляемаяФормаБСП_ИсполняемыеСхемаИНастройкиТаблицыЛкс(); - #КонецЕсли - СхемаИНастройки = УправляемаяФормаБСП_ВыполнитьНаСервереЛкс(Форма, "ирОбщий.УправляемаяФормаБСП_ИсполняемыеСхемаИНастройкиТаблицыЛкс", ИмяТаблицыФормы); - КонецЕсли; - Возврат СхемаИНастройки; - -КонецФункции - -Процедура ОткрытьДинамическийСписокАктивнойУправляемойФормыЛкс(Форма = Неопределено) Экспорт - - ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); - ДанныеЭлемента = ДанныеЭлементаФормыЛкс(ТекущийЭлемент); - Если ТипЗнч(ДанныеЭлемента) <> Тип("ДинамическийСписок") Тогда - Возврат; - КонецЕсли; - ПолноеИмяТаблицыБД = ""; - ОбщийТипДанныхТаблицы = ирОбщий.ОбщийТипДанныхТабличногоПоляЛкс(ТекущийЭлемент,,, ПолноеИмяТаблицыБД); - Если ПолноеИмяТаблицыБД = Неопределено Тогда - Возврат; - КонецЕсли; - КомпоновщикНастроек = ДанныеЭлемента.КомпоновщикНастроек; - #Если Сервер И Не Сервер Тогда - КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных; - #КонецЕсли - НастройкиСписка = КомпоновщикНастроек.ПолучитьНастройки(); - ТекущаяКолонка = ДанныеЭлементаФормыЛкс(ТекущийЭлемент.ТекущийЭлемент); - Форма = ПолучитьФормуСпискаЛкс(ПолноеИмяТаблицыБД,, Истина,,,, ТекущийЭлемент.ТекущаяСтрока, НастройкиСписка.Отбор, ПолноеИмяТаблицыБД, ТекущаяКолонка); - Форма.Открыть(); - -КонецПроцедуры - -Процедура ОтборБезЗначенияВТекущейКолонкеАктивнойФормыЛкс(Параметры) Экспорт - - ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Параметры.Форма); - Если Истина - И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") - И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") - Тогда - Возврат; - КонецЕсли; - ОбщийТипДанныхТаблицы = ОбщийТипДанныхТабличногоПоляЛкс(ТекущийЭлемент); - Если Истина - И ОбщийТипДанныхТаблицы <> "Список" - И ОбщийТипДанныхТаблицы <> "ТабличнаяЧасть" - И ОбщийТипДанныхТаблицы <> "НаборЗаписей" - Тогда - Возврат; - КонецЕсли; - ТабличноеПолеОтборДляЗначенияВТекущейКолонкеЛкс(ТекущийЭлемент); - -КонецПроцедуры - -Процедура НайтиВыбратьСсылкуВДинамическомСпискеЛкс(Форма = Неопределено) Экспорт - - ТекущийЭлемент = ТекущийЭлементАктивнойФормыЛкс(Форма); - Если Истина - И ТипЗнч(ТекущийЭлемент) <> Тип("ТаблицаФормы") - И ТипЗнч(ТекущийЭлемент) <> Тип("ТабличноеПоле") - Тогда - Возврат; - КонецЕсли; - ИмяТаблицыБД = ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТекущийЭлемент); - Если Не ЗначениеЗаполнено(ИмяТаблицыБД) Тогда - Возврат; - КонецЕсли; - НайтиВыбратьСсылкуВДинамическомСпискеПоIDЛкс(ТекущийЭлемент); - -КонецПроцедуры - -Процедура НайтиВыбратьСсылкуВДинамическомСпискеПоIDЛкс(Знач ТабличноеПоле, Форма = Неопределено) Экспорт - - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ФормаВводаИдентификатора = мПлатформа.ПолучитьФорму("УникальныйИдентификатор"); - НовыйИдентификатор = ФормаВводаИдентификатора.ОткрытьМодально(); - Если НовыйИдентификатор = Неопределено Тогда - Возврат; - КонецЕсли; - Ссылка = ирОбщий.ПолучитьМенеджерЛкс(ирОбщий.ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле)).ПолучитьСсылку(НовыйИдентификатор); - ДинамическийСписокУстановитьТекущуюСтрокуСКонтролемЛкс(ТабличноеПоле, Ссылка, Форма); - -КонецПроцедуры - -Процедура ДинамическийСписокУстановитьТекущуюСтрокуСКонтролемЛкс(ТабличноеПоле, Ссылка, Форма = Неопределено) Экспорт - - ТабличноеПоле.ТекущаяСтрока = Ссылка; - Если ТабличноеПоле.ТекущаяСтрока = Ссылка Тогда - СообщитьЛкс("Объект найден и установлен текущей строкой"); - Иначе - Если Форма = Неопределено Тогда - Форма = ирОбщий.РодительЭлементаУправляемойФормыЛкс(ТабличноеПоле); - КонецЕсли; - Если Не ирОбщий.ЛиСуществуетОбъектПоСсылкеЛкс(Ссылка) Тогда - Если ТабличноеПоле.РежимВыбора Тогда - Ответ = Вопрос("Объект не найден в таблице. Выбрать ссылку?", РежимДиалогаВопрос.ОКОтмена); - Если Ответ = КодВозвратаДиалога.ОК Тогда - Форма.ОповеститьОВыборе(Ссылка); - КонецЕсли; - Иначе - СообщитьЛкс("Объект не найден в таблице"); - КонецЕсли; - Иначе - Если ТабличноеПоле.РежимВыбора Тогда - Ответ = Вопрос("Объект найден в таблице, но не отвечает текущему отбору. Выбрать ссылку?", РежимДиалогаВопрос.ОКОтмена); - Если Ответ = КодВозвратаДиалога.ОК Тогда - Форма.ОповеститьОВыборе(Ссылка); - КонецЕсли; - Иначе - СообщитьЛкс("Объект найден в таблице, но не отвечает текущему отбору"); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция ЗапросДинамическогоСпискаЛкс(Знач ТабличноеПоле, Знач ПолноеИмяТаблицыБД = "", Знач УчитываяОтбор = Истина, Знач АнализируемоеПоле = "", Компоновщик = Неопределено) Экспорт - - ДанныеТабличногоПоля = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - Если Не ЗначениеЗаполнено(ПолноеИмяТаблицыБД) Тогда - ПолноеИмяТаблицыБД = ИмяТаблицыБДДинамическогоСпискаЛкс(ТабличноеПоле); - КонецЕсли; - ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ПолноеИмяТаблицыБД); - #Если Сервер И Не Сервер Тогда - ПоляТаблицыБД = НайтиПоСсылкам().Колонки; - #КонецЕсли - ЕстьПрисоединенныеПоля = ЗначениеЗаполнено(АнализируемоеПоле) И ПоляТаблицыБД.Найти(АнализируемоеПоле, "Имя") = Неопределено; - Если Не ЕстьПрисоединенныеПоля И УчитываяОтбор Тогда - ПоляОтбора = Новый Соответствие; - НастройкиСписка = НастройкиДинамическогоСпискаЛкс(ДанныеТабличногоПоля); - НайтиЭлементОтбораЛкс(НастройкиСписка.Отбор,, ПоляОтбора,, Истина,, Истина); - Для Каждого КлючИЗначение Из ПоляОтбора Цикл - Если ПоляТаблицыБД.Найти(КлючИЗначение.Ключ, "Имя") = Неопределено Тогда - ЕстьПрисоединенныеПоля = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Запрос = Неопределено; - Если Не ЕстьПрисоединенныеПоля Тогда - Запрос = Новый Запрос; - Иначе - СхемаИНастройки = ИсполняемыеСхемаИНастройкиСпискаУправляемойФормаЛкс(РодительЭлементаУправляемойФормыЛкс(ТабличноеПоле)); - Если СхемаИНастройки <> Неопределено Тогда - Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных; - СхемаКомпоновки = СхемаИНастройки.Схема; - НастройкаКомпоновки = СхемаИНастройки.Настройки; - #Если Сервер И Не Сервер Тогда - СхемаКомпоновки = Новый СхемаКомпоновкиДанных; - #КонецЕсли - Если Не УчитываяОтбор Тогда - НастройкаКомпоновки.Отбор.Элементы.Очистить(); - ИначеЕсли ЗначениеЗаполнено(АнализируемоеПоле) Тогда - ЭлементОтбораКолонки = НайтиДобавитьЭлементОтбораКомпоновкиЛкс(НастройкаКомпоновки.Отбор, АнализируемоеПоле); - Если ЭлементОтбораКолонки <> Неопределено Тогда - ЭлементОтбораКолонки.Использование = Ложь; - КонецЕсли; - КонецЕсли; - Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновки)); - Запрос = ЗапросИзКомпоновкиЛкс(СхемаКомпоновки, НастройкаКомпоновки); - КонецЕсли; - КонецЕсли; - Возврат Запрос; - -КонецФункции - -Процедура ДобавитьКолонкиГруппыФормыВТаблицуЗначенийЛкс(Знач КолонкиИсточника, Знач Результат, Знач СтрокаИлиКоллекция, Знач ИменаКолонокРезультата = "") - - Если ТипЗнч(ИменаКолонокРезультата) = Тип("Строка") И ЗначениеЗаполнено(ИменаКолонокРезультата) Тогда - ИменаКолонокРезультата = СтрРазделитьЛкс(ИменаКолонокРезультата, ",", Истина); - ИначеЕсли ТипЗнч(ИменаКолонокРезультата) = Тип("Массив") Тогда - Иначе - ИменаКолонокРезультата = Неопределено; - КонецЕсли; - Для Каждого ПолеТаблицыФормы Из КолонкиИсточника Цикл - Если ТипЗнч(ПолеТаблицыФормы) = Тип("ГруппаФормы") Тогда - ДобавитьКолонкиГруппыФормыВТаблицуЗначенийЛкс(ПолеТаблицыФормы.ПодчиненныеЭлементы, Результат, СтрокаИлиКоллекция, ИменаКолонокРезультата); - Продолжить; - КонецЕсли; - ПолноеИмяПоля = ПолеТаблицыФормы.Имя; - ПутьКДанным = НайтиПутьКДаннымПоляТаблицыФормыЛкс(СтрокаИлиКоллекция, ПолноеИмяПоля); - Если Истина - И ЗначениеЗаполнено(ПутьКДанным) - И (Ложь - Или ИменаКолонокРезультата = Неопределено - Или ИменаКолонокРезультата.Найти(ПутьКДанным) <> Неопределено) - Тогда - Результат.Колонки.Добавить(СтрЗаменить(ПутьКДанным, ".", "_"),, ПутьКДанным); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Функция ОткрытьСтатистикаMSSQLПоПоследнимЗапросамЛкс(ДатаНачала, ДатаКонца) Экспорт - - ОтчетОбъект = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Отчет.ирСтатистикаПоЗапросамСУБД"); - #Если Сервер И Не Сервер Тогда - ОтчетОбъект = Отчеты.ирСтатистикаПоЗапросамСУБД.Создать(); - #КонецЕсли - КлючВарианта = "Последние"; - ФормаОтчета = ОтчетОбъект.ПолучитьФорму(,, КлючВарианта); - ФормаОтчета.ПараметрКлючВарианта = КлючВарианта; - ФормаОтчета.Открыть(); - НастройкиОтчета = ФормаОтчета.КомпоновщикНастроек.Настройки; - #Если Сервер И Не Сервер Тогда - НастройкиОтчета = Компоновщик.Настройки; - #КонецЕсли - НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПопавшиеВПоследниеМинут")).Использование = Ложь; - НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоИнтервала", ДатаНачала); - НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("КонецИнтервала", ДатаКонца); - ФормаОтчета.ДействияФормыСформировать(); - -КонецФункции - -Процедура ЗаполнитьИзмененыеПоляВСтрокеВерсииДанныхЛкс(Знач ДанныеСтроки, Знач КлючОбъекта = Неопределено, Знач ПолноеИмяМД = "") Экспорт - - #Если Сервер И Не Сервер Тогда - ДанныеСтроки = Обработки.ирИсторияДанных.Создать().Версии.Добавить(); - #КонецЕсли - Если ДанныеСтроки.ИзмененныеПоля = "?" Тогда - Если ДанныеСтроки.НомерВерсии > 1 Тогда - ИсторияДанныхМоя = Вычислить("ИсторияДанных"); - #Если Сервер И Не Сервер Тогда - ИсторияДанныхМоя = ИсторияДанных; - #КонецЕсли - Если КлючОбъекта = Неопределено Тогда - КлючОбъекта = КлючОбъектаСтрокиВерсииДанныхЛкс(ДанныеСтроки, ПолноеИмяМД); - КонецЕсли; - Попытка - СтруктураРазличий = ИсторияДанныхМоя.ПолучитьРазличияВерсий(КлючОбъекта, ДанныеСтроки.НомерВерсии); - Исключение - // Может быть ошибка "Данные истории не найдены" - Пустышка = 0; - КонецПопытки; - Если СтруктураРазличий <> Неопределено Тогда - ИзмененныеПоля = Новый СписокЗначений; - Для Каждого КлючИЗначение Из СтруктураРазличий Цикл - ИзмененныеПоля.Добавить(КлючИЗначение.Ключ); - КонецЦикла; - ИзмененныеПоля.СортироватьПоЗначению(); - ДанныеСтроки.ИзмененныеПоля = ирОбщий.СтрСоединитьЛкс(ИзмененныеПоля); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция КлючОбъектаСтрокиВерсииДанныхЛкс(Знач ДанныеСтроки, Знач ПолноеИмяМД) Экспорт - - КлючОбъекта = ДанныеСтроки.Данные; - КорневойТип = ирОбщий.ПервыйФрагментЛкс(ПолноеИмяМД); - Если НадоСериализоватьКлючДанныхДляОтображенияЛкс(КорневойТип) Тогда - Попытка - КлючОбъекта = ЗначениеИзСтрокиВнутрЛкс(КлючОбъекта); - Исключение - // Некоторые большие ключи регистров в сериализованном виде не умещаются в 1024 символа - КлючОбъекта = "<Ключ записи регистра обрезан и не может быть восстановлен>"; - КонецПопытки; - ИначеЕсли ЛиКорневойТипКонстантыЛкс(КорневойТип) Тогда - КлючОбъекта = КлючОбъектаКонстантыЛкс(ПоследнийФрагментЛкс(ПолноеИмяМД)); - КонецЕсли; - Возврат КлючОбъекта; - -КонецФункции - -Процедура Форма_ОткрытьБезЗахватаФокусаЛкс(Форма) Экспорт - - АктивнаяФорма = АктивнаяФормаЛкс(); - Форма.Открыть(); - Если АктивнаяФорма <> Неопределено Тогда - Форма_АктивироватьОткрытьЛкс(АктивнаяФорма); - КонецЕсли; - -КонецПроцедуры - -Функция ДобавитьОтборВИсториюТабличногоПоляЛкс(Знач ЭтаФорма, Знач ТабличноеПолеИлиКлюч, Знач Отбор, СтарыйОтбор, Знач ИгнорироватьЭлементы = "") Экспорт - - #Если Сервер И Не Сервер Тогда - Пустышка = Новый ПостроительЗапроса; - Отбор = Пустышка.Отбор; - СтарыйОтбор = Пустышка.Отбор; - #КонецЕсли - ДобавленВСписок = Ложь; - Если Строка(Отбор) <> Строка(СтарыйОтбор) Тогда - Если "" + Отбор <> "" Тогда - Если Истина - И ТипЗнч(ТабличноеПолеИлиКлюч) = Тип("Строка") - И ТипЗнч(СтарыйОтбор) = Тип("Отбор") - Тогда - Для Каждого ЭлементОтбора Из Отбор Цикл - СтарыйЭлементОтбора = НайтиЭлементОтбораЛкс(СтарыйОтбор, ЭлементОтбора.Имя); - Если Истина - И ЭлементОтбора.Использование - И (Ложь // Защита от попадания в историю промежуточных строк горячего фильтра по подстроке - Или Форма_ВводДоступенЛкс(ЭтаФорма) - Или (Истина - И ЭлементОтбора.ВидСравнения <> ВидСравнения.НеСодержит - И ЭлементОтбора.ВидСравнения <> ВидСравнения.Содержит)) - И (Ложь - Или СтарыйЭлементОтбора = Неопределено - Или СтарыйЭлементОтбора.Значение <> ЭлементОтбора.Значение) - Тогда - ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(ЭлементОтбора, ТабличноеПолеИлиКлюч); - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ТипЗнч(ТабличноеПолеИлиКлюч) = Тип("Строка") Тогда - Компоновщик = ирКэш.КомпоновщикТаблицыМетаданныхЛкс(ТабличноеПолеИлиКлюч); - Иначе - #Если Клиент Тогда - Схема = СоздатьСхемуПоТаблицамЗначенийЛкс(Новый Структура("Т", ТабличноеПолеИлиКлюч.Значение.ВыгрузитьКолонки())); - Компоновщик = КомпоновщикПоСхемеКомпоновкиЛкс(Схема); - #КонецЕсли - КонецЕсли; - НастройкаКомпоновки = Компоновщик.Настройки; - СкопироватьОтборЛюбойЛкс(НастройкаКомпоновки.Отбор, Отбор, Истина,,,, ИгнорироватьЭлементы); - ПредставлениеОтбора = ПредставлениеЗначенияСОграничениемДлиныЛкс(НастройкаКомпоновки.Отбор, 150); - Если ПредставлениеОтбора <> "" Тогда - ДобавленВСписок = ПоследниеВыбранныеДобавитьЛкс(ЭтаФорма, НастройкаКомпоновки, ПредставлениеОтбора, ТабличноеПолеИлиКлюч, "Отборы", Истина); - КонецЕсли; - КонецЕсли; - ПостроительЗапроса = Новый ПостроительЗапроса; - Если ТипЗнч(ТабличноеПолеИлиКлюч) = Тип("Строка") Тогда - ПустаяТаблица = ПустаяТаблицаЗначенийИзТаблицыБДЛкс(ТабличноеПолеИлиКлюч); - Иначе - ПустаяТаблица = ТабличноеПолеИлиКлюч.Значение; - КонецЕсли; - ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ПустаяТаблица); - СтарыйОтбор = ПостроительЗапроса.Отбор; - СкопироватьОтборПостроителяЛкс(СтарыйОтбор, Отбор,, Истина); - КонецЕсли; - Возврат ДобавленВСписок; - -КонецФункции - -// Функция - Добавить отбор компоновки в историю таблицы БДЛкс -// -// Параметры: -// ЭтаФорма - - -// ПолноеИмяТаблицы - - -// АктивнаяНастройка - - -// СтараяНастройка - - -// выхОтборИзменен - - -// -// Возвращаемое значение: -// - Булево - был ли добавлен элемент в историю отборов -// -Функция ДобавитьОтборКомпоновкиВИсториюТаблицыБДЛкс(Знач ЭтаФорма, Знач ПолноеИмяТаблицы, Знач АктивнаяНастройка, Знач СтараяНастройка, выхОтборИзменен = Ложь) Экспорт - - #Если Сервер И Не Сервер Тогда - СтараяНастройка = Новый НастройкиКомпоновкиДанных; - АктивнаяНастройка = Новый НастройкиКомпоновкиДанных; - #КонецЕсли - СтарыйОтбор = СтараяНастройка.Отбор; - Отбор = АктивнаяНастройка.Отбор; - ДобавленВСписок = Ложь; - ПредставлениеОтбора = Строка(Отбор); - выхОтборИзменен = ПредставлениеОтбора <> Строка(СтарыйОтбор); - Если выхОтборИзменен Тогда - Если ПредставлениеОтбора <> "" Тогда - Для Каждого ЭлементОтбора Из Отбор.Элементы Цикл - Если Ложь - Или ТипЗнч(ЭлементОтбора) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") - Или Найти(ЭлементОтбора.ЛевоеЗначение, ".") > 0 - Тогда - Продолжить; - КонецЕсли; - СтарыйЭлементОтбора = ирОбщий.НайтиЭлементОтбораЛкс(СтарыйОтбор, "" + ЭлементОтбора.ЛевоеЗначение); - Если Истина - И ЭлементОтбора.Использование - И (Ложь // Защита от попадания в историю промежуточных строк горячего фильтра по подстроке - Или Форма_ВводДоступенЛкс(ЭтаФорма) - Или (Истина - И ЭлементОтбора.ВидСравнения <> ВидСравненияКомпоновкиДанных.НеСодержит - И ЭлементОтбора.ВидСравнения <> ВидСравненияКомпоновкиДанных.Содержит)) - И (Ложь - Или СтарыйЭлементОтбора = Неопределено - Или СтарыйЭлементОтбора.ПравоеЗначение <> ЭлементОтбора.ПравоеЗначение) - Тогда - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(ЭлементОтбора, ПолноеИмяТаблицы); - КонецЕсли; - КонецЦикла; - Компоновщик = ирКэш.КомпоновщикТаблицыМетаданныхЛкс(ПолноеИмяТаблицы); - НастройкаКомпоновки = Компоновщик.Настройки; - ирОбщий.СкопироватьОтборЛюбойЛкс(НастройкаКомпоновки.Отбор, Отбор, Истина); - ДобавленВСписок = ирОбщий.ПоследниеВыбранныеДобавитьЛкс(ЭтаФорма, НастройкаКомпоновки, ПредставлениеЗначенияСОграничениемДлиныЛкс(НастройкаКомпоновки.Отбор, 150), ПолноеИмяТаблицы, "Отборы", Истина); - КонецЕсли; - Если ТипЗнч(СтараяНастройка) = Тип("НастройкиКомпоновкиДанных") Тогда - ирОбщий.СкопироватьНастройкиКомпоновкиЛкс(АктивнаяНастройка, СтараяНастройка, Истина); - Иначе - // Нужно обновлять старую настройку снаружи - КонецЕсли; - КонецЕсли; - Возврат ДобавленВСписок; - -КонецФункции - -#КонецЕсли - -#Если Клиент Тогда - -Процедура ПерезапуститьСеансПослеДобавленияРолиЛкс() Экспорт - - Текст = "Перезапускаем сеанс после авто добавления роли"; - Заголовок = "Инструменты разработчика"; - ПараметрыЗапуска = " /C" + "НеДобавлятьРолиИР /DEBUG "; // Защита от циклического перезапуска в БСП 3.1.6+ https://www.hostedredmine.com/issues/955636 - //#Если Не ВебКлиент И Не ТонкийКлиент Тогда - // ПараметрыЗапуска = ПараметрыЗапуска + ПараметрыЗапускаСеансаТекущиеЛкс(); // Не хватит прав без ролей ИР - //#КонецЕсли - #Если ТолстыйКлиентОбычноеПриложение Тогда - Предупреждение(Текст, 2, Заголовок); - #Иначе - ПоказатьОповещениеПользователя(Заголовок,, Текст); - #КонецЕсли - ЗавершитьРаботуСистемы(Ложь, Истина, ПараметрыЗапуска); - -КонецПроцедуры - -// Эта обертка нужно для возможности привязать ее к команде панели инструментов -Процедура ОтладитьОтложенныйОбъектБезПараметровЛкс() Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - ОтладитьОтложенныйОбъектЛкс(); - #КонецЕсли - -КонецПроцедуры - -Процедура УстановитьПрикреплениеФормыВУправляемомПриложенииЛкс(Этаформа, ПроверитьДоступностьВвода = Ложь, ПоложениеПрикрепленногоОкна = Неопределено) Экспорт - - #Если Не ВебКлиент Тогда - Если ирКэш.ЛиСеансТолстогоКлиентаУПЛкс() И Не Этаформа.МодальныйРежим Тогда - Если ПроверитьДоступностьВвода И Не Форма_ВводДоступенЛкс(Этаформа) Тогда // При открытии формы ВводДоступен() всегда равно Ложь - Возврат; - КонецЕсли; - Если ПоложениеПрикрепленногоОкна = Неопределено Тогда - Если ЭтаФорма.СостояниеОкна = ВариантСостоянияОкна.Прикрепленное Тогда - ПоложениеПрикрепленногоОкна = ЭтаФорма.ПоложениеПрикрепленногоОкна; - КонецЕсли; - КонецЕсли; - Если ПоложениеПрикрепленногоОкна <> Неопределено Тогда - ОжидатьЗавершения = Ложь; // Вроде не играет роли - - Если ирКэш.НомерВерсииПлатформыЛкс() >= 803017 Тогда - Если Истина - И ТипЗнч(ЭтаФорма) = Тип("Форма") - И ирКэш.НомерВерсииПлатформыЛкс() < 803021 - Тогда - КомандаАктивацииПунктаОкна = "{UP 2}"; - Иначе - КомандаАктивацииПунктаОкна = "{UP 4}"; - КонецЕсли; - ОтправитьНажатияКлавишЛкс("%-", ОжидатьЗавершения); // Такой вызов меню окна не работает в 8.3.15-16 - ОтправитьНажатияКлавишЛкс(КомандаАктивацииПунктаОкна, ОжидатьЗавершения); - ОтправитьНажатияКлавишЛкс("{ENTER}", ОжидатьЗавершения); - // Снизу может находиться пункт меню "Сообщения", если было выведено хотя бы одно сообщение - //Если ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Верх Тогда - // ОтправитьНажатияКлавишЛкс("{UP 3}", ОжидатьЗавершения); - //ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Низ Тогда - // ОтправитьНажатияКлавишЛкс("{UP 2}", ОжидатьЗавершения); - //ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Лево Тогда - // ОтправитьНажатияКлавишЛкс("{UP 5}", ОжидатьЗавершения); - //ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право Тогда - // ОтправитьНажатияКлавишЛкс("{UP 4}", ОжидатьЗавершения); - //КонецЕсли; - Если ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Верх Тогда - ОтправитьНажатияКлавишЛкс("{Down 4}", ОжидатьЗавершения); - ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Низ Тогда - ОтправитьНажатияКлавишЛкс("{Down 5}", ОжидатьЗавершения); - ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Лево Тогда - ОтправитьНажатияКлавишЛкс("{Down 2}", ОжидатьЗавершения); - ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право Тогда - ОтправитьНажатияКлавишЛкс("{Down 3}", ОжидатьЗавершения); - КонецЕсли; - ОтправитьНажатияКлавишЛкс("{ENTER}", ОжидатьЗавершения); - ИначеЕсли ирКэш.НомерВерсииПлатформыЛкс() >= 803015 Тогда - // ОтправитьНажатияКлавишЛкс("%-"); // Такой вызов меню окна не работает в 8.3.15-16 - Иначе - ОтправитьНажатияКлавишЛкс("%", ОжидатьЗавершения); - ОтправитьНажатияКлавишЛкс("{Down 1}", ОжидатьЗавершения); - - // https://www.hostedredmine.com/issues/927695 - //ОтправитьНажатияКлавишЛкс("{О}", ОжидатьЗавершения); // Привязка к русскому языку ввода - ОтправитьНажатияКлавишЛкс("{Down 4}", ОжидатьЗавершения); // Если использовать UP то будет проход через опциональный пункт "Функции для технического специалиста" - ОтправитьНажатияКлавишЛкс("{ENTER}", ОжидатьЗавершения); - - Если ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Верх Тогда - ОтправитьНажатияКлавишЛкс("{UP 4}", ОжидатьЗавершения); - ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Низ Тогда - ОтправитьНажатияКлавишЛкс("{UP 3}", ОжидатьЗавершения); - ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Лево Тогда - ОтправитьНажатияКлавишЛкс("{UP 6}", ОжидатьЗавершения); - ИначеЕсли ПоложениеПрикрепленногоОкна = ВариантПрикрепленияОкна.Право Тогда - ОтправитьНажатияКлавишЛкс("{UP 5}", ОжидатьЗавершения); - КонецЕсли; - ОтправитьНажатияКлавишЛкс("{ENTER}", ОжидатьЗавершения); - КонецЕсли; - КонецЕсли; - КонецЕсли; - #КонецЕсли - -КонецПроцедуры - -// https://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/sendkeys-statement -// Параметры: -// СтрокаКлавиш - Строка - SHIFT +, CTRL ^, ALT % -// -Процедура ОтправитьНажатияКлавишЛкс(СтрокаКлавиш, ОжидатьЗавершения = Ложь) Экспорт - - Если Не ирКэш.ЛиПлатформаWindowsЛкс() Тогда - Возврат; - КонецЕсли; - ирПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - ирПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - ирПлатформа.WshShell().SendKeys(СтрокаКлавиш, ОжидатьЗавершения); // При этом почему то NumLock перенажимается - -КонецПроцедуры - -Процедура ОткрытьСписокИнструментовЛкс() Экспорт - - ОткрытьПанельИнструментовЛкс(Истина, Ложь); - -КонецПроцедуры - -Процедура ОткрытьПанельИнструментовЛкс(ТолькоОткрытьФормуСпискаИнструментов = Ложь, ОткрытьСтраницуНастроек = Ложь) Экспорт - - Если ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - ФормаСпискаИнструментов = ПолучитьФормуЛкс("Обработка.ирПортативный.Форма.Форма"); - Если ФормаСпискаИнструментов.Открыта() Тогда - ФормаСпискаИнструментов.ПараметрТолькоОткрытьНастройки = ТолькоОткрытьФормуСпискаИнструментов; - ФормаСпискаИнструментов.Открыть(); - Иначе - //ирОбщий.ОткрытьПанельИнструментовЛкс(Истина); // Так будут считаны настройки - ФормаНастроек = ирОбщий.ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ФормаНастроек"); - Если ОткрытьСтраницуНастроек Тогда - ФормаНастроек.ЭлементыФормы.Панель.ТекущаяСтраница = ФормаНастроек.ЭлементыФормы.Панель.Страницы.Настройки; - КонецЕсли; - КонецЕсли; - #КонецЕсли - КонецЕсли; - -КонецПроцедуры - -Процедура СохранитьНастройкиПользователяЛкс() Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - СохранитьНастройкиПользователя(); - #КонецЕсли - -КонецПроцедуры - -Процедура ОткрытьНастройкиАлгоритмовЛкс() Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - Если ирКэш.ЛиЭтоРасширениеКонфигурацииЛкс() Тогда - СообщитьЛкс("Команда недоступна в варианте Расширение"); - Возврат; - КонецЕсли; - Форма = ирКэш.Получить().ПолучитьФорму("НастройкиАлгоритмов"); - Форма.Открыть(); - #КонецЕсли - -КонецПроцедуры - -Процедура ОткрытьРегистрацияCOMКомпонентЛкс() Экспорт - - ОткрытьФормуЛкс("Обработка.ирПлатформа.Форма.РегистрацияCOMКомпонент"); - -КонецПроцедуры - -Процедура ОткрытьОтладкаВнешнихОбработокБСПЛкс() Экспорт - - ОткрытьФормуЛкс("ОбщаяФорма.ирОтладкаВнешнихОбработокБСП"); - -КонецПроцедуры - -Процедура ОткрытьОбработкаМодулейМетаданныхЛкс() Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - Форма = ирКэш.Получить().ПолучитьФорму("ОбработкаМодулейМетаданных"); - Форма.Открыть(); - #КонецЕсли - -КонецПроцедуры - -Процедура ОткрытьПодключениеВнешнихИсточниковДанныхЛкс() Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - Форма = ирКэш.Получить().ПолучитьФорму("ПодключениеВнешнихИсточниковДанных"); - Форма.Открыть(); - #КонецЕсли - -КонецПроцедуры - -Процедура ОткрытьГлобальноеМенюЛкс(АктивнаяФорма = Неопределено) Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - Если АктивнаяФорма = Неопределено Тогда - АктивнаяФорма = АктивнаяУправляемаяФормаЛкс(); - КонецЕсли; - Если АктивнаяФорма = Неопределено Тогда - Возврат; - КонецЕсли; - мПлатформа = ирКэш.Получить(); - #Если Сервер И Не Сервер Тогда - мПлатформа = Обработки.ирПлатформа.Создать(); - #КонецЕсли - Форма = мПлатформа.ПолучитьФорму("ГлобальноеМеню"); - Если Не Форма.Открыта() Тогда - Форма.АктивнаяФорма = АктивнаяФорма; - Форма.ОткрытьМодально(); - КонецЕсли; - #КонецЕсли - -КонецПроцедуры - -Процедура ОткрытьФункцииРежимаОтладкиЛкс() Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - Форма = ирКэш.Получить().ПолучитьФорму("ФункцииРежимаОтладки"); - Форма.Открыть(); - #КонецЕсли - -КонецПроцедуры - -Процедура ОткрытьЗапускСеансаЛкс() Экспорт - - #Если ВебКлиент Тогда - Сообщить("Команда недоступна в вебклиенте"); - #ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда - ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ЗапускСеансаОбычная"); - #Иначе - ОткрытьФормуЛкс("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая"); - #КонецЕсли - -КонецПроцедуры - -Процедура ОткрытьДинамическийСписокЛкс() Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - Форма = ФормаДинамическогоСпискаЛкс(); - Форма.Открыть(); - #КонецЕсли - -КонецПроцедуры - -// Открывает справку по первой подсистеме метаданных переданного объекта -// -// Параметры: -// Объект - любой объект, имеющий метаданные. -// -Процедура ОткрытьСправкуПоПодсистемеЛкс(Объект = Неопределено) Экспорт - - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - Если Ложь - Или ТипЗнч(Объект) = Тип("Неопределено") - Или ТипЗнч(Объект) = Тип("ОкноКлиентскогоПриложения") - Тогда - // - ИначеЕсли ТипЗнч(Объект) = Тип("Форма") Тогда - ПолноеИмяМД = СлужебныеДанныеФормыЛкс(Объект).ИмяФормы; - ИначеЕсли ТипЗнч(Объект) = Тип("УправляемаяФорма") Тогда - ПолноеИмяМД = Объект.ИмяФормы; - Иначе - Если ТипЗнч(Объект) = Тип("Тип") Тогда - ОбъектМД = Метаданные.НайтиПоТипу(Объект); - Иначе - ОбъектМД = Объект.Метаданные(); - КонецЕсли; - ПолноеИмяМД = ОбъектМД.ПолноеИмя(); - ПолноеИмяМД = СтрЗаменить(ПолноеИмяМД, "ВнешняяОбработка.", "Обработка."); - ПолноеИмяМД = СтрЗаменить(ПолноеИмяМД, "ВнешнийОтчет.", "Отчет."); - КонецЕсли; - Форма = ирКэш.Получить().ПолучитьФорму("ОПодсистеме",, ПолноеИмяМД); - Форма.Открыть(); - #КонецЕсли - -КонецПроцедуры - -Процедура ОткрытьНастройкуТехножурналаПоПользователюЛкс() Экспорт - - ФормаНастройки = ирОбщий.ПолучитьФормуЛкс("Обработка.ирНастройкаТехножурнала.Форма"); - ФормаНастройки.Открыть(); - ФормаНастройки.НаСервере = Не ирКэш.ЛиФайловаяБазаЛкс(); - ФормаНастройки.ПриИзмененииПравилаПолученияФайлаНастройки(); - ФормаНастройки.ПереключитьТрассировкуЗапросов(Истина); - -КонецПроцедуры - -Процедура ОтключитьГлобальныеОбработчикиОжиданияЛкс() Экспорт - - Если ПроверитьПлатформаНеWindowsЛкс(,, Истина) Тогда - Возврат; - КонецЕсли; - Если Не ПроверитьЧтоСеансТолстогоКлиентаЛкс() Тогда - Возврат; - КонецЕсли; - ОткрытьФормуЛкс("Обработка.ирПлатформа.Форма.ГлобальныеОбработчикиОжидания"); - -КонецПроцедуры - -Функция ОткрытьФормуЛкс(Знач ПолноеИмяФормы, Знач Параметры = Неопределено, Знач Владелец = Неопределено, Знач Уникальность = Неопределено, Знач Окно = Неопределено) Экспорт - - #Если ТонкийКлиент Или ВебКлиент Тогда - Параметры = Новый Структура("ИмяФормыДляОткрытия", ПолноеИмяФормы); - Форма = ПолучитьФорму("Обработка.ирПортативный.Форма.ЗапускСеансаУправляемая", Параметры, Владелец, Уникальность, Окно); - #Иначе - Форма = ПолучитьФормуЛкс(ПолноеИмяФормы, Параметры, Владелец, Уникальность, Окно); - #КонецЕсли - Если Форма <> Неопределено Тогда - Форма.Открыть(); - КонецЕсли; - Возврат Форма; - -КонецФункции - -#КонецЕсли // Получает первый фрагмент, отделяемый разделителем от строки. // Написана для оптимизации по скорости. @@ -45133,114 +27540,13 @@ _РежимОтладки = Ложь; КонецФункции -// Функция - Восстановить текущую строку таблицы формы лкс -// -// Параметры: -// ТабличноеПоле - ТабличноеПоле, ТаблицаФормы - -// КлючТекущейСтроки - Структура - -// ДанныеТаблицы - - -// -// Возвращаемое значение: -// - Булево - успешность установки текущей строки -// -Функция ТабличноеПолеВосстановитьТекущуюСтрокуЛкс(ТабличноеПоле, Знач КлючТекущейСтроки, Знач ДанныеТаблицы = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если КлючТекущейСтроки <> Неопределено Тогда - Если ДанныеТаблицы = Неопределено Тогда - ДанныеТаблицы = ДанныеЭлементаФормыЛкс(ТабличноеПоле); - КонецЕсли; - Строка = СтрокаТабличнойКоллекцииПоКлючуЛкс(ДанныеТаблицы, КлючТекущейСтроки); - Если Строка <> Неопределено Тогда - Попытка - ИдентификаторСтроки = Строка.ПолучитьИдентификатор(); - Исключение - ИдентификаторСтроки = Строка; - КонецПопытки; - ТабличноеПоле.ТекущаяСтрока = ИдентификаторСтроки; - Возврат Истина; - КонецЕсли; - КонецЕсли; - Возврат Ложь; - -КонецФункции - -Функция ТабличноеПолеВосстановитьВыделенныеСтрокиЛкс(ТабличноеПоле, Знач КлючиВыделенныхСтрок, Знач ДанныеТаблицы = Неопределено) Экспорт - - #Если Сервер И Не Сервер Тогда - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - ВыделенныеСтроки = ТабличноеПоле.ВыделенныеСтроки; - Если КлючиВыделенныхСтрок.Количество() > 0 Тогда - ВыделенныеСтроки.Очистить(); - КонецЕсли; - Для Каждого КлючВыделеннойСтроки Из КлючиВыделенныхСтрок Цикл - Если ДанныеТаблицы = Неопределено Тогда - ДанныеТаблицы = ТабличноеПоле.Значение; - КонецЕсли; - Строка = СтрокаТабличнойКоллекцииПоКлючуЛкс(ДанныеТаблицы, КлючВыделеннойСтроки); - Если Строка <> Неопределено Тогда - Попытка - ИдентификаторСтроки = Строка.ПолучитьИдентификатор(); - Исключение - ИдентификаторСтроки = Строка; - КонецПопытки; - ВыделенныеСтроки.Добавить(ИдентификаторСтроки); - КонецЕсли; - КонецЦикла; - -КонецФункции - -Функция ТабличноеПолеВосстановитьСостояниеСтрокЛкс(Знач ТабличноеПоле, Знач СтруктураСостояния, ВременноОтключитьОтображение = Истина) Экспорт - - #Если Сервер И Не Сервер Тогда - СтруктураСостояния = Новый Структура; - ТабличноеПоле = Новый ТабличноеПоле; - #КонецЕсли - Если ВременноОтключитьОтображение Тогда - // Предотвращаем двойную (синхронную и затем асинхронную) перерисовку видимых строк табличного поля при установке текущих колонки и строки. - // Такое происходит например в обработчике ПриАктивацииСтраницы в ирЗагрузкаТабличныхДанных. В остальных случаях пользы от этого вероятно нет. - ОбработчикПриВыводеСтроки = ТабличноеПолеОтключитьОтображениеЛкс(ТабличноеПоле); - КонецЕсли; - Если ЗначениеЗаполнено(СтруктураСостояния.ТекущаяКолонка) Тогда - ТекущаяКолонка = ТабличноеПоле.Колонки.Найти(СтруктураСостояния.ТекущаяКолонка); - Если ТекущаяКолонка <> Неопределено И ТекущаяКолонка.Видимость Тогда - ТабличноеПоле.ТекущаяКолонка = ТекущаяКолонка; - КонецЕсли; - КонецЕсли; - ТекущаяСтрокаУстановлена = ТабличноеПолеВосстановитьТекущуюСтрокуЛкс(ТабличноеПоле, СтруктураСостояния.ТекущаяСтрока); - ТабличноеПолеВосстановитьВыделенныеСтрокиЛкс(ТабличноеПоле, СтруктураСостояния.ВыделенныеСтроки); - Если ВременноОтключитьОтображение Тогда - ТабличноеПолеВключитьОтображениеЛкс(ТабличноеПоле, ОбработчикПриВыводеСтроки); - КонецЕсли; - Возврат ТекущаяСтрокаУстановлена; - -КонецФункции - -Процедура ТабличноеПолеВключитьОтображениеЛкс(Знач ТабличноеПоле, Знач ОбработчикПриВыводеСтроки) Экспорт - - ТабличноеПоле.УстановитьДействие("ПриВыводеСтроки", ОбработчикПриВыводеСтроки); - ТабличноеПоле.Видимость = Истина; - -КонецПроцедуры - -Функция ТабличноеПолеОтключитьОтображениеЛкс(Знач ТабличноеПоле) - - ОбработчикПриВыводеСтроки = ТабличноеПоле.ПолучитьДействие("ПриВыводеСтроки"); - ТабличноеПоле.УстановитьДействие("ПриВыводеСтроки", Неопределено); - ТабличноеПоле.Видимость = Ложь; - Возврат ОбработчикПриВыводеСтроки; - -КонецФункции - Функция СтрокаТабличнойКоллекцииПоКлючуЛкс(Знач ТабличнаяКоллекция, Знач КлючТекущейСтроки) Экспорт Если ТипЗнч(КлючТекущейСтроки) = Тип("Структура") Тогда #Если Сервер И Не Сервер Тогда КлючТекущейСтроки = Новый Структура; #КонецЕсли + НайденныеСтроки = Новый Массив; Если ТипЗнч(ТабличнаяКоллекция) = Тип("ДеревоЗначений") Тогда НайденныеСтроки = ТабличнаяКоллекция.Строки.НайтиСтроки(КлючТекущейСтроки, Истина); Иначе @@ -45249,8 +27555,10 @@ _РежимОтладки = Ложь; И КлючТекущейСтроки.Свойство("НомерСтроки") И ТабличнаяКоллекция.Колонки.Найти("НомерСтроки") = Неопределено Тогда - НайденныеСтроки = Новый Массив; - Если ТабличнаяКоллекция.Количество() >= КлючТекущейСтроки.НомерСтроки Тогда + Если Истина + И ТипЗнч(КлючТекущейСтроки.НомерСтроки) = Тип("Число") + И ТабличнаяКоллекция.Количество() >= КлючТекущейСтроки.НомерСтроки + Тогда НайденныеСтроки.Добавить(ТабличнаяКоллекция[КлючТекущейСтроки.НомерСтроки - 1]); КонецЕсли; Иначе @@ -45269,97 +27577,6 @@ _РежимОтладки = Ложь; КонецФункции -// Параметры: -// ТаблицаФормы - ТаблицаФормы, ТабличноеПоле - -// ИменаКлючевыхКолонок - Строка, 0[число] - если 0, то используется логический номер строки -// СтрокаТаблицы - - -// -// Результат: -// Структура -// -Функция ТабличноеПолеКлючСтрокиЛкс(ТаблицаФормы, ИменаКлючевыхКолонок = "Ссылка", Знач СтрокаТаблицы = Неопределено) Экспорт - - Если СтрокаТаблицы = Неопределено Тогда - СтрокаТаблицы = ТаблицаФормы.ТекущиеДанные; - КонецЕсли; - Если СтрокаТаблицы <> Неопределено Тогда - Если ИменаКлючевыхКолонок = 0 Тогда - КлючТекущейСтроки = Новый Структура("НомерСтроки"); - КлючТекущейСтроки.НомерСтроки = СтрокаТаблицы.Владелец().Индекс(СтрокаТаблицы) + 1; - Иначе - КлючТекущейСтроки = Новый Структура(ИменаКлючевыхКолонок); - ЗаполнитьЗначенияСвойств(КлючТекущейСтроки, СтрокаТаблицы, ИменаКлючевыхКолонок); - КонецЕсли; - КонецЕсли; - Возврат КлючТекущейСтроки; - -КонецФункции - -// Функция - Табличное поле ключи строк лкс -// -// Параметры: -// ТаблицаФормы - - -// ИменаКлючевыхКолонок - Строка, 0[число] - если 0, то используется логический номер строки -// СтрокиТаблицы - - -// -// Возвращаемое значение: -// - -// -Функция ТабличноеПолеКлючиСтрокЛкс(ТаблицаФормы, ИменаКлючевыхКолонок = "Ссылка", Знач СтрокиТаблицы = Неопределено) Экспорт - - Если СтрокиТаблицы = Неопределено Тогда - СтрокиТаблицы = ТаблицаФормы.ВыделенныеСтроки; - КонецЕсли; - Результат = Новый Массив; - Для Каждого СтрокаТаблицы Из СтрокиТаблицы Цикл - Если СтрокаТаблицы = Неопределено Тогда - // Случается в дереве формы ирРедакторИзмененийНаУзлах - Продолжить; - КонецЕсли; - КлючТекущейСтроки = ТабличноеПолеКлючСтрокиЛкс(ТаблицаФормы, ИменаКлючевыхКолонок, СтрокаТаблицы); - Результат.Добавить(КлючТекущейСтроки); - КонецЦикла; - Возврат Результат; - -КонецФункции - -// Функция - Табличное поле состояние строк лкс -// -// Параметры: -// ТабличноеПоле - - -// ИменаКлючевыхКолонок - Строка, 0[число] - если 0, то используется логический номер строки -// -// Возвращаемое значение: -// - -// -Функция ТабличноеПолеСостояниеСтрокЛкс(Знач ТабличноеПоле, Знач ИменаКлючевыхКолонок = 0) Экспорт - - СтруктураСостояния = Новый Структура("ТекущаяКолонка, ТекущаяСтрока, ВыделенныеСтроки"); - СтруктураСостояния.ТекущаяСтрока = ТабличноеПолеКлючСтрокиЛкс(ТабличноеПоле, ИменаКлючевыхКолонок); - СтруктураСостояния.ВыделенныеСтроки = ТабличноеПолеКлючиСтрокЛкс(ТабличноеПоле, ИменаКлючевыхКолонок); - Если ТабличноеПоле.ТекущаяКолонка <> Неопределено Тогда - СтруктураСостояния.ТекущаяКолонка = ТабличноеПоле.ТекущаяКолонка.Имя; - КонецЕсли; - Возврат СтруктураСостояния; - -КонецФункции - -Функция ТабличноеПолеСтрокаПоискаЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, Знач ПрефиксСтрокиПоиска = "", выхПутьКДанным = "") Экспорт - - //Префикс = ирОбщий.ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле); - Если Не ЗначениеЗаполнено(ПрефиксСтрокиПоиска) Тогда - ПрефиксСтрокиПоиска = ТабличноеПоле.Имя; - КонецЕсли; - Попытка - выхПутьКДанным = ПрефиксСтрокиПоиска + "СтрокаПоиска"; - СтрокаПоиска = ЭтаФорма[выхПутьКДанным]; - Исключение - СтрокаПоиска = ""; - КонецПопытки; - Возврат СтрокаПоиска; - -КонецФункции - Функция ПолноеИмяФормыЛкс(ЭтаФорма) Экспорт Если ТипЗнч(ЭтаФорма) = Тип("УправляемаяФорма") Тогда @@ -45456,33 +27673,6 @@ _РежимОтладки = Ложь; КонецПроцедуры -Процедура УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Готовность = Истина) Экспорт - - НеготовыеСтраницы = СлужебныеДанныеФормыЛкс(ЭтаФорма).НеготовыеСтраницы; - #Если Сервер И Не Сервер Тогда - НеготовыеСтраницы = Новый СписокЗначений; - #КонецЕсли - ЭлементСписка = НеготовыеСтраницы.НайтиПоЗначению(Страница.Имя); - Если ЭлементСписка <> Неопределено И Готовность Тогда - НеготовыеСтраницы.Удалить(ЭлементСписка); - ИначеЕсли ЭлементСписка = Неопределено И Не Готовность Тогда - НеготовыеСтраницы.Добавить(Страница.Имя); - КонецЕсли; - -КонецПроцедуры - -Функция ПолучитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница) Экспорт - - НеготовыеСтраницы = СлужебныеДанныеФормыЛкс(ЭтаФорма).НеготовыеСтраницы; - #Если Сервер И Не Сервер Тогда - НеготовыеСтраницы = Новый СписокЗначений; - #КонецЕсли - ЭлементСписка = НеготовыеСтраницы.НайтиПоЗначению(Страница.Имя); - Результат = ЭлементСписка = Неопределено; - Возврат Результат; - -КонецФункции - Процедура СоздатьКолонкиТабличногоПоляЛкс(ТабличноеПоле) Экспорт Если ТипЗнч(ТабличноеПоле) = Тип("ТаблицаФормы") Тогда @@ -45538,12 +27728,13 @@ _РежимОтладки = Ложь; // Функция ДанныеЭлементаФормыЛкс(Знач Элемент, выхПутьКДанным = "", ЭтаФорма = Неопределено, ВзятьОтобранное = Ложь) Экспорт + #Если Клиент Тогда Если Истина И ЭтаФорма <> Неопределено И ТипЗнч(Элемент) = Тип("ТабличноеПоле") И ВзятьОтобранное <> Неопределено Тогда - КомпоновкаТП = КомпоновкаТабличногоПоляЛкс(ЭтаФорма, Элемент); + КомпоновкаТП = ирКлиент.КомпоновкаТабличногоПоляЛкс(ЭтаФорма, Элемент); Если КомпоновкаТП <> Неопределено Тогда Если ВзятьОтобранное И КомпоновкаТП.ИспользоватьОтбор Тогда Возврат КомпоновкаТП.ТаблицаОтобранное; @@ -45552,6 +27743,8 @@ _РежимОтладки = Ложь; КонецЕсли; КонецЕсли; КонецЕсли; + #КонецЕсли + Попытка // Обычная форма Данные = Элемент.Значение; @@ -45640,46 +27833,6 @@ _РежимОтладки = Ложь; КонецФункции -Функция КомпоновкаТабличногоПоляЛкс(Знач ЭтаФорма, Знач ТабличноеПоле) Экспорт - - КомпоновкаТП = Новый Структура; - Компоновщик = Неопределено; - Префикс = ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, Компоновщик); - Если Префикс = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - КомпоновкаТП.Вставить("Компоновщик", Компоновщик); - КомпоновкаТП.Вставить("ТаблицаОтобранное", ЭтаФорма[Префикс + "Отобранное"]); - КомпоновкаТП.Вставить("ТаблицаЗначений", ЭтаФорма[Префикс]); - КомпоновкаТП.Вставить("ИспользоватьОтбор", ЭтаФорма[Префикс + "ИспользоватьОтбор"]); - КомпоновкаТП.Вставить("НадписьОтборПросмотра", ЭтаФорма.ЭлементыФормы.Найти(Префикс + "НадписьОтборПросмотра")); - КомпоновкаТП.Вставить("ФлажокИспользоватьОтбор", ЭтаФорма.ЭлементыФормы.Найти(Префикс + "ИспользоватьОтбор")); - Возврат КомпоновкаТП; - -КонецФункции - -Функция ПрефиксРеквизитовКомпоновкиТабличногоПоляЛкс(Знач ЭтаФорма, Знач ТабличноеПоле, выхКомпоновщик = Неопределено) Экспорт - - Префикс = "" + ТабличноеПоле.Имя; // Тут может быть имитатор табличного поля - выхКомпоновщик = Неопределено; - Для Счетчик = 1 По 2 Цикл - Попытка - выхКомпоновщик = ЭтаФорма[Префикс + "Компоновщик"]; - Исключение - КонецПопытки; - Если выхКомпоновщик = Неопределено И Найти(Префикс, "_") > 0 Тогда - Префикс = ПервыйФрагментЛкс(Префикс, "_"); // Редактор объекта БД - Иначе - Прервать; - КонецЕсли; - КонецЦикла; - Если выхКомпоновщик = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - Возврат Префикс; - -КонецФункции - Функция ИдентификаторСтрокиТабличногоПоляЛкс(Знач НоваяСтрока) Экспорт Если Ложь @@ -46213,6 +28366,43 @@ _РежимОтладки = Ложь; КонецФункции +// Устанавливает свойство у элементов коллекции. +// +// Параметры: +// Коллекция - Любая индексированная коллекция; +// МассивИлиСтрока - Массив (индексов), Строка (имена элементов, разделенные запятыми), *Неопределено - фильтр; +// Свойство - Строка - имя Свойства которое нужно установить; если обращение к свойству черех [] недоступно, то нужно указать "-" в начале имени свойства +// ЗначениеСвойства - Произвольный. +// +Процедура УстановитьСвойствоВКоллекцииЛкс(Коллекция, Свойство, ЗначениеСвойства = Неопределено, ИменаЭлементов = Неопределено) Экспорт + + ДоступенИндексСвойств = Лев(Свойство, 1) <> "-"; + Если ИменаЭлементов <> Неопределено Тогда + Если ТипЗнч(ИменаЭлементов) = Тип("Строка") Тогда + МассивИндексов = ирОбщий.СтрРазделитьЛкс(ИменаЭлементов, ",", Истина); + Иначе + МассивИндексов = ИменаЭлементов; + КонецЕсли; + Для Каждого ИмяЭлемента Из МассивИндексов Цикл + ЭлементКоллекции = Коллекция[ИмяЭлемента]; + Если ДоступенИндексСвойств Тогда + ЭлементКоллекции[Свойство] = ЗначениеСвойства; + Иначе + Выполнить("ЭлементКоллекции." + Сред(Свойство, 2) + " = ЗначениеСвойства"); + КонецЕсли; + КонецЦикла; + Иначе + Для Каждого ЭлементКоллекции Из Коллекция Цикл + Если ДоступенИндексСвойств Тогда + ЭлементКоллекции[Свойство] = ЗначениеСвойства; + Иначе + Выполнить("ЭлементКоллекции." + Сред(Свойство, 2) + " = ЗначениеСвойства"); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + Функция МинимальнаяШиринаКолонкиЛкс() Экспорт Возврат 5; // Начиная с 5 гарантируется возможность увеличения ширины перетаскиванием даже при очень большом числе колонок @@ -46276,7 +28466,6 @@ _РежимОтладки = Ложь; КонецФункции - /////////////////////////////////////////////////// // Управляемые формы @@ -46384,8 +28573,8 @@ _РежимОтладки = Ложь; КонецФункции -// Получить путь К данным элемента управляемой формы. Чтобы функция возвращала правильное значение, в форме должен быть -// выполнен общий обработчик формы _ПриСозданииНаСервереИис. +// Получить путь к данным элемента управляемой формы. Чтобы функция возвращала правильное значение, в форме должен быть +// выполнен общий обработчик УправляемаяФорма_ПриСозданииЛкс. // // Параметры: // Поле - <тип> - @@ -46398,17 +28587,27 @@ _РежимОтладки = Ложь; ЭтаФорма = РодительЭлементаУправляемойФормыЛкс(ЭлементФормы, Тип("УправляемаяФорма")); КонецЕсли; ПутьКДаннымПоля = ""; + + #Если Не ТонкийКлиент И Не ВебКлиент Тогда Если ЭлементФормы <> ЭтаФорма Тогда СнимокФормы = Новый Структура("мСлужебныеДанные"); ЗаполнитьЗначенияСвойств(СнимокФормы, ЭтаФорма); //СообщитьЛкс(Поле.Имя); // Для отладки http://www.hostedredmine.com/issues/850205, http://www.hostedredmine.com/issues/850204 - Если СнимокФормы.мСлужебныеДанные <> Неопределено И Не ЭтаФорма.мСлужебныеДанные.ПутиКДанным.Свойство(ЭлементФормы.Имя, ПутьКДаннымПоля) Тогда + Если Истина + И СнимокФормы.мСлужебныеДанные <> Неопределено + И Не ЭтаФорма.мСлужебныеДанные.ПутиКДанным.Свойство(ЭлементФормы.Имя, ПутьКДаннымПоля) + Тогда ПутьКДаннымПоля = ""; КонецЕсли; Если ОтносительноРодителя Тогда - ПутьКДаннымПоля = ПоследнийФрагментЛкс(ПутьКДаннымПоля); + ПутьКДаннымПоля = ПоследнийФрагментЛкс(ПутьКДаннымПоля, "." + ПеревестиСтроку("ТекущиеДанные") + ".", Ложь); + Если Не ЗначениеЗаполнено(ПутьКДаннымПоля) Тогда + ПутьКДаннымПоля = ПоследнийФрагментЛкс(ПутьКДаннымПоля); + КонецЕсли; КонецЕсли; КонецЕсли; + #КонецЕсли + Если Не ЗначениеЗаполнено(ПутьКДаннымПоля) Тогда // Криво, но для управляемой формы на клиенте других способов нет Попытка @@ -46478,7 +28677,7 @@ _РежимОтладки = Ложь; ПараметрыВызова.Вставить("Результат", Новый Структура("Текст")); #Если Сервер И Не Сервер Тогда ТаблицаКомандБСП = Новый ТаблицаЗначений; - ирОбщий.УсловноеОформлениеУправляемойФормыЛкс(); + УправляемаяФормаБСП_УсловноеОформлениеЛкс(); #КонецЕсли Если ТаблицаКомандБСП.Найти(ИмяКомандыВФорме, "ИмяВФорме") = Неопределено Тогда ОписаниеКоманды = ТаблицаКомандБСП.Добавить(); @@ -46515,181 +28714,3 @@ _РежимОтладки = Ложь; Результат.Вставить("Настройки", Контекст.Форма.Элементы[ИмяТаблицыФормы].ПолучитьИсполняемыеНастройкиКомпоновкиДанных()); Контекст.Результат.Текст = Результат; КонецФункции - -#Если Клиент Тогда - -Функция Форма_ВводДоступенЛкс(Знач ЭтаФорма, Знач ПроверятьПолеHTML = Ложь) Экспорт - - Попытка - ВводДоступен = ЭтаФорма.ВводДоступенЛкс(); - Исключение - КонецПопытки; - Результат = Ложь - Или ВводДоступен = Истина - Или ЭтаФорма.ВводДоступен() - Или (Истина - И ПроверятьПолеHTML - // При фокусе ввода у HTML функция ВводДоступен() возвращает Ложь https://partners.v8.1c.ru/forum/t/1943796/m/1943796 - // Этот антибаг работает некорректно - для неактивной формы возращает Истина. Поэтому эту проверку имеет смысл включать только убедившись что надежным способом активной формы не нашлось - И (Ложь - Или (Истина - И ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеФормы") - И ЭтаФорма.ТекущийЭлемент.Вид = ВидПоляФормы.ПолеHTMLДокумента - И ЭтаФорма.ТекущийЭлемент.Документ.hasFocus()) // Затратная функция 1мс - #Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда - Или (Истина - И ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеHTMLДокумента") - И ЭтаФорма.ТекущийЭлемент.Документ.hasFocus()) // Затратная функция 1мс - #КонецЕсли - )); - Возврат Результат; - -КонецФункции - -// Параметры: -// ЭтаФорма - Форма - обязательный для обычных форм -Процедура Форма_ВнешнееСобытиеЛкс(ЭтаФорма = Неопределено, Источник, Событие, Данные, ВводДоступен = Неопределено) Экспорт - - Если Источник = "KeyboardHook" Тогда - КодыКлавиш = ирКэш.КодыКлавишЛкс(); - - #Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда - Если Найти(Данные, КодыКлавиш["CTRL+ALT+G"]) = 1 Тогда - Форма = ПолучитьФормуЛкс("Обработка.ирИнтерфейснаяПанель.Форма"); - Форма.ПрикреплятьОкноПослеОткрытия = Ложь; - Форма.Открыть(); - Возврат; - КонецЕсли; - #КонецЕсли - - Если ЭтаФорма = Неопределено Тогда - ЭтаФорма = АктивнаяУправляемаяФормаЛкс(); - Если ЭтаФорма = Неопределено Тогда - Возврат; - КонецЕсли; - КонецЕсли; - Если ВводДоступен <> Истина И Не Форма_ВводДоступенЛкс(ЭтаФорма) Тогда - Возврат; - КонецЕсли; - ПолученноеЧисло = Лев(Данные,5); - ПолученноеЧисло = Число(ПолученноеЧисло); - ВиртуальнаяКлавиша = ПолученноеЧисло % 256; - ПолученноеЧисло = ПолученноеЧисло - ВиртуальнаяКлавиша; - РасширеннаяКлавиша = ПолученноеЧисло % 512; - ПолученноеЧисло = ПолученноеЧисло - РасширеннаяКлавиша; - ПравыйАльт = ПолученноеЧисло % 1024; - ПолученноеЧисло = ПолученноеЧисло - ПравыйАльт; - ЛевыйАльт = ПолученноеЧисло % 2048; - ПолученноеЧисло = ПолученноеЧисло - ЛевыйАльт; - ПравыйКонтрол = ПолученноеЧисло % 4096; - ПолученноеЧисло = ПолученноеЧисло - ПравыйКонтрол; - ЛевыйКонтрол = ПолученноеЧисло % 8192; - ПолученноеЧисло = ПолученноеЧисло - ЛевыйКонтрол; - ПравыйШифт = ПолученноеЧисло % 16384; - ПолученноеЧисло = ПолученноеЧисло - ПравыйШифт; - ЛевыйШифт = ПолученноеЧисло; - Если СтрДлина(Данные) > 5 Тогда - Символ = Сред(Данные, 6); - Иначе - Символ = ""; - КонецЕсли; - Если Ложь - Или Найти(Данные, КодыКлавиш["CTRL+~"]) = 1 - Тогда - ОткрытьГлобальноеМенюЛкс(ЭтаФорма); - - #Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда - ИначеЕсли Ложь - Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеВвода") - Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ТабличноеПоле") - Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеФормы") - Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ТаблицаФормы") - Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеТабличногоДокумента") - Или ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ПолеHTMLДокумента") - Тогда - Если Найти(Данные, КодыКлавиш["CTRL+C"]) = 1 Тогда - Попытка - БуферОбмена_КопироватьЛкс(ЭтаФорма, Ложь); - Исключение - ОписаниеОшибки = ОписаниеОшибки(); // Для отладки - Сообщить(ОписаниеОшибки); - КонецПопытки; - ИначеЕсли Найти(Данные, КодыКлавиш["ALT+SHIFT+V"]) = 1 Тогда - БуферОбмена_ВставитьЛкс(ЭтаФорма); - ИначеЕсли Найти(Данные, КодыКлавиш["CTRL+V"]) = 1 Тогда - БуферОбмена_ВставитьЛкс(ЭтаФорма, Ложь); - ИначеЕсли Найти(Данные, КодыКлавиш["CTRL+A"]) = 1 Тогда - Если ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда - ТабличноеПолеОбновитьТекстыПодваловЛкс(ЭтаФорма, ЭтаФорма.ТекущийЭлемент); - КонецЕсли; - ИначеЕсли Найти(Данные, КодыКлавиш["Space"]) = 1 Тогда - Если ТипЗнч(ЭтаФорма.ТекущийЭлемент) = Тип("ТабличноеПоле") Тогда // Только для форм инструментов - ТабличноеПоле = ЭтаФорма.ТекущийЭлемент; - КолонкаПометки = КолонкаПометкиТабличногоПоляЛкс(ТабличноеПоле); - Если Истина - И Не ТабличноеПоле.ТолькоПросмотр - И ТабличноеПоле.ТекущаяКолонка <> Неопределено - И ТабличноеПоле.ТекущаяКолонка <> КолонкаПометки - И (Ложь - Или ТабличноеПоле.ТекущаяКолонка.ТолькоПросмотр - Или ТабличноеПоле.ТекущаяКолонка.ЭлементУправления = Неопределено) - И (Ложь - Или Не ТабличноеПоле.ИзменяетДанные - Или Не ЭтаФорма.ТолькоПросмотр) - Тогда - ТабличноеПоле_ИнтерактивноУстановитьПометкуТекущейСтрокиЛкс(ТабличноеПоле,, Неопределено); - КонецЕсли; - КонецЕсли; - КонецЕсли; - #КонецЕсли - КонецЕсли; - //Сообщить(Данные); - КонецЕсли; - -КонецПроцедуры - -Функция АктивнаяУправляемаяФормаЛкс() Экспорт - - #Если ТолстыйКлиентОбычноеПриложение Тогда - Возврат Неопределено; - #КонецЕсли - ТекущееОкно = АктивноеОкно(); - Если ТекущееОкно = Неопределено Тогда - Окна = ПолучитьОкна(); - Для Каждого ТекущееОкно Из Окна Цикл - Если ТекущееОкно.НачальнаяСтраница Тогда - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ТипЗнч(ТекущееОкно) = Тип("ОкноКлиентскогоПриложения") Тогда - АктивнаяФорма = Неопределено; - Для Каждого Форма Из ТекущееОкно.Содержимое Цикл - Если Форма_ВводДоступенЛкс(Форма) Тогда - АктивнаяФорма = Форма; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Возврат АктивнаяФорма; - -КонецФункции - -// Для тонкого клиента -Процедура ПослеУстановкиKeyboardHook(Результат = 1) Экспорт - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - Успех = ПодключитьВнешнююКомпоненту("Обработка.ирПлатформа.Макет.KeyboardHookZip", "ПерехватКлавиатуры", ТипВнешнейКомпоненты.Native); - Если Не Успех Тогда - //ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеУстановкиKeyboardHook", ирОбщий); - //НачатьУстановкуВнешнейКомпоненты(ОповещениеОЗавершении, "Обработка.ирПлатформа.Макет.KeyboardHookZip"); // Не скомпилируется на 8.2 - Попытка - УстановитьВнешнююКомпоненту("Обработка.ирПлатформа.Макет.KeyboardHookZip"); - Исключение - // "Режим использования модальности" = "Не использовать" https://www.hostedredmine.com/issues/927892 - КонецПопытки; - КонецЕсли; -КонецПроцедуры - -#КонецЕсли diff --git a/src/CommonModules/ирПривилегированный/Ext/Module.bsl b/src/CommonModules/ирПривилегированный/Ext/Module.bsl deleted file mode 100644 index 0e99b86c8..000000000 --- a/src/CommonModules/ирПривилегированный/Ext/Module.bsl +++ /dev/null @@ -1,84 +0,0 @@ -//ирПортативный Перем ирПортативный Экспорт; -//ирПортативный Перем ирОбщий Экспорт; -//ирПортативный Перем ирСервер Экспорт; -//ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; - -// Привилегированные процедуры и функции - -// Находит все ссылки на массив ссылок. -// -// Параметры: -// пМассивСсылок - Массив - ссылок; -// пТаблицаРезультатов - ТаблицаЗначений - возвращаемая таблица с найденными ссылками. -// -Функция НайтиПоСсылкамЛкс(МассивСсылок, ТаблицаРезультатов = Неопределено) Экспорт - - //Если ФильтрПоМетаданным <> Неопределено Тогда - // // 8.3.5+ - // НайденныеСсылки = Вычислить("НайтиПоСсылкам(МассивСсылок,, ФильтрПоМетаданным)"); - //Иначе - НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); - //КонецЕсли; - Если ТаблицаРезультатов = Неопределено Тогда - ТаблицаРезультатов = Новый ТаблицаЗначений; - КонецЕсли; - ирОбщий.ПеревестиКолонкиНайтиПоСсылкамЛкс(НайденныеСсылки); - Для Сч = 0 По НайденныеСсылки.Колонки.Количество() - 1 Цикл - ТаблицаРезультатов.Колонки.Добавить(НайденныеСсылки.Колонки[Сч].Имя); - КонецЦикла; - Для Каждого Строка Из НайденныеСсылки Цикл - Если Ложь - Или Строка.Метаданные = Неопределено - Или Строка.Ссылка = Неопределено - Тогда - Продолжить; - КонецЕсли; - НоваяСтрока = ТаблицаРезультатов.Добавить(); - НоваяСтрока.Метаданные = Строка.Метаданные.ПолноеИмя(); - //Если Строка.Данные = Неопределено Тогда - // Строка.Данные = НоваяСтрока.Метаданные; // так будет возникать ошибка в Обработка.ирПоискДублейИЗаменаСсылок.ЗаменитьСсылкиВОбъектеБД() - //КонецЕсли; - НоваяСтрока.Данные = ЗначениеВСтрокуВнутр(Строка.Данные); - НоваяСтрока.Ссылка = Строка.Ссылка; - КонецЦикла; - ирОбщий.ПеревестиКолонкиНайтиПоСсылкамЛкс(ТаблицаРезультатов); - Возврат ТаблицаРезультатов; - -КонецФункции - -Функция ТекущийСеансЛкс() Экспорт - - Если ирКэш.НомерРежимаСовместимостиЛкс() >= 803007 Тогда - ТекущийСеанс = Вычислить("ПолучитьТекущийСеансИнформационнойБазы()"); - #Если Сервер И Не Сервер Тогда - ТекущийСеанс = ПолучитьТекущийСеансИнформационнойБазы(); - #КонецЕсли - Иначе - Попытка - Сеансы = ПолучитьСеансыИнформационнойБазы(); // Иногда выполняется долго - Исключение - Сообщить("У пользователя отсутствуют административные права 1С. Некоторые функции инструментов отключены."); - Возврат Неопределено; - КонецПопытки; - НомерСеанса = НомерСеансаИнформационнойБазы(); - Для Каждого Сеанс Из Сеансы Цикл - Если Сеанс.НомерСеанса = НомерСеанса Тогда - ТекущийСеанс = Сеанс; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ТекущийСеанс = Неопределено Тогда - Сообщить("Собственный сеанс не найден"); - Результат = Неопределено; - Иначе - Результат = Новый Структура; - Результат.Вставить("НачалоСеанса", ТекущийСеанс.НачалоСеанса); - Результат.Вставить("НомерСеанса", ТекущийСеанс.НомерСеанса); - Результат.Вставить("ИмяПриложения", ТекущийСеанс.ИмяПриложения); - Результат.Вставить("ИмяКомпьютера", ТекущийСеанс.ИмяКомпьютера); - КонецЕсли; - Возврат Результат; - -КонецФункции diff --git a/src/CommonModules/ирСервер/Ext/Module.bsl b/src/CommonModules/ирСервер/Ext/Module.bsl index 090ba1b8a..2690a70fc 100644 --- a/src/CommonModules/ирСервер/Ext/Module.bsl +++ b/src/CommonModules/ирСервер/Ext/Module.bsl @@ -2,7 +2,7 @@ //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; // Поместить строку соединения во временное хранилище Функция ПоместитьСтрокуСоединенияВХранилищеЛкс(Адрес) Экспорт @@ -927,6 +927,85 @@ Возврат Результат; КонецФункции +// Находит все ссылки на массив ссылок. +// +// Параметры: +// пМассивСсылок - Массив - ссылок; +// пТаблицаРезультатов - ТаблицаЗначений - возвращаемая таблица с найденными ссылками. +// +Функция НайтиПоСсылкамЛкс(МассивСсылок, ТаблицаРезультатов = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + //Если ФильтрПоМетаданным <> Неопределено Тогда + // // 8.3.5+ + // НайденныеСсылки = Вычислить("НайтиПоСсылкам(МассивСсылок,, ФильтрПоМетаданным)"); + //Иначе + НайденныеСсылки = НайтиПоСсылкам(МассивСсылок); + //КонецЕсли; + Если ТаблицаРезультатов = Неопределено Тогда + ТаблицаРезультатов = Новый ТаблицаЗначений; + КонецЕсли; + ирОбщий.ПеревестиКолонкиНайтиПоСсылкамЛкс(НайденныеСсылки); + Для Сч = 0 По НайденныеСсылки.Колонки.Количество() - 1 Цикл + ТаблицаРезультатов.Колонки.Добавить(НайденныеСсылки.Колонки[Сч].Имя); + КонецЦикла; + Для Каждого Строка Из НайденныеСсылки Цикл + Если Ложь + Или Строка.Метаданные = Неопределено + Или Строка.Ссылка = Неопределено + Тогда + Продолжить; + КонецЕсли; + НоваяСтрока = ТаблицаРезультатов.Добавить(); + НоваяСтрока.Метаданные = Строка.Метаданные.ПолноеИмя(); + //Если Строка.Данные = Неопределено Тогда + // Строка.Данные = НоваяСтрока.Метаданные; // так будет возникать ошибка в Обработка.ирПоискДублейИЗаменаСсылок.ЗаменитьСсылкиВОбъектеБД() + //КонецЕсли; + НоваяСтрока.Данные = ЗначениеВСтрокуВнутр(Строка.Данные); + НоваяСтрока.Ссылка = Строка.Ссылка; + КонецЦикла; + ирОбщий.ПеревестиКолонкиНайтиПоСсылкамЛкс(ТаблицаРезультатов); + Возврат ТаблицаРезультатов; + +КонецФункции + +Функция ТекущийСеансЛкс() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Если ирКэш.НомерРежимаСовместимостиЛкс() >= 803007 Тогда + ТекущийСеанс = Вычислить("ПолучитьТекущийСеансИнформационнойБазы()"); + #Если Сервер И Не Сервер Тогда + ТекущийСеанс = ПолучитьТекущийСеансИнформационнойБазы(); + #КонецЕсли + Иначе + Попытка + Сеансы = ПолучитьСеансыИнформационнойБазы(); // Иногда выполняется долго + Исключение + Сообщить("У пользователя отсутствуют административные права 1С. Некоторые функции инструментов отключены."); + Возврат Неопределено; + КонецПопытки; + НомерСеанса = НомерСеансаИнформационнойБазы(); + Для Каждого Сеанс Из Сеансы Цикл + Если Сеанс.НомерСеанса = НомерСеанса Тогда + ТекущийСеанс = Сеанс; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ТекущийСеанс = Неопределено Тогда + Сообщить("Собственный сеанс не найден"); + Результат = Неопределено; + Иначе + Результат = Новый Структура; + Результат.Вставить("НачалоСеанса", ТекущийСеанс.НачалоСеанса); + Результат.Вставить("НомерСеанса", ТекущийСеанс.НомерСеанса); + Результат.Вставить("ИмяПриложения", ТекущийСеанс.ИмяПриложения); + Результат.Вставить("ИмяКомпьютера", ТекущийСеанс.ИмяКомпьютера); + КонецЕсли; + Возврат Результат; + +КонецФункции + /////////////////////////////////////////////////// // Управляемые формы @@ -954,7 +1033,7 @@ выхСхемаПодвала = Новый Структура; ПутьКДаннымСписка = ОсновнойЭУ.ПутьКДанным; ДинамическийСписок.ПроизвольныйЗапрос = Истина; - ДинамическийСписок.ДинамическоеСчитываниеДанных = Истина; + ДинамическийСписок.ДинамическоеСчитываниеДанных = Истина; СкрытыеПоля = Неопределено; ТекстЗапроса = ТекстЗапросаДинамическогоСпискаЛкс(ОбъектМД, ПолноеИмяТаблицыБД, СоединенныеРегистры, ДинамическийСписок, СкрытыеПоля); ДинамическийСписок.ТекстЗапроса = ТекстЗапроса; @@ -1004,8 +1083,10 @@ Если ирОбщий.СтрНачинаетсяСЛкс(ИмяКолонки, ПрефиксИмениПолей) Тогда ИмяПоляЗапросаБезТаблицы = Сред(ИмяКолонки, СтрДлина(ПрефиксИмениПолей) + 1); ИмяПоляТаблицы = ИмяПоляЗапросаБезТаблицы; + МодификаторПоля = Неопределено; Если ирОбщий.СтрКончаетсяНаЛкс(ИмяПоляТаблицы, МаркерТипаЗначения) Тогда ИмяПоляТаблицы = ирОбщий.СтрокаБезПоследнегоФрагментаЛкс(ИмяПоляТаблицы, МаркерТипаЗначения); + МодификаторПоля = "тип"; КонецЕсли; Если ОбъектМД.Измерения.Найти(ИмяПоляТаблицы) <> Неопределено Тогда ЭтоПолезноеПоле = Ложь; @@ -1030,9 +1111,9 @@ КонецЕсли; РодительПоляФормы.Заголовок = ЗаголовокГруппы; КонецЕсли; - ПолеТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(СоединенныйРегистр).Найти(ИмяПоляЗапросаБезТаблицы); + ПолеТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(СоединенныйРегистр).Найти(ИмяПоляТаблицы); Если ПолеТаблицыБД <> Неопределено Тогда - ЗаголовокПоля = ирОбщий.ЗаголовокПоляТаблицыФормыЛкс(ОсновнойЭУ, ПолеТаблицыБД, РежимИмяСиноним); + ЗаголовокПоля = ЗаголовокПоляТаблицыФормыЛкс(ОсновнойЭУ, ПолеТаблицыБД, РежимИмяСиноним,,, МодификаторПоля); Иначе ЗаголовокПоля = ИмяПоляЗапросаБезТаблицы; КонецЕсли; @@ -1048,7 +1129,7 @@ И Не ЗначениеЗаполнено(ЗаголовокПоля) И ирОбщий.СтрКончаетсяНаЛкс(ПолеСписка.Имя, МаркерТипаЗначения) Тогда - ЗаголовокПоля = ирОбщий.ЗаголовокПоляТаблицыФормыЛкс(ОсновнойЭУ, ПолеСписка, РежимИмяСиноним); + ЗаголовокПоля = ЗаголовокПоляТаблицыФормыЛкс(ОсновнойЭУ, ПолеСписка, РежимИмяСиноним); КонецЕсли; СуществующийЭлемент = ЭтаФорма.Элементы.Найти(ИмяПоля); Если СуществующийЭлемент <> Неопределено Тогда @@ -1113,10 +1194,20 @@ ЭтаФорма.Элементы.Переместить(ПолеФормы, ОсновнойЭУ, ОсновнойЭУ.ПодчиненныеЭлементы[0]); КонецЕсли; КонецЦикла; + #Если Сервер И Не Сервер Тогда + ОбъектМД = Метаданные.Справочники.ирАлгоритмы; + #КонецЕсли // Порядок по убыванию важности ИменаНеважныхКолонок = Новый Массив; ИменаНеважныхКолонок.Добавить("ИдентификаторСсылкиЛкс"); ИменаНеважныхКолонок.Добавить("ВерсияДанных"); + Если Истина + И ирОбщий.ЛиКорневойТипОбъектаСПредопределеннымЛкс(ирОбщий.ПервыйФрагментЛкс(ПолноеИмяТаблицыБД)) + И ОбъектМД.ПолучитьИменаПредопределенных().Количество() = 0 + Тогда + ИменаНеважныхКолонок.Добавить("Предопределенный"); + ИменаНеважныхКолонок.Добавить("ИмяПредопределенныхДанных"); + КонецЕсли; Для Каждого ИмяНеважнойКолонки Из ИменаНеважныхКолонок Цикл ПолеФормы = ОсновнойЭУ.ПодчиненныеЭлементы.Найти(ОсновнойЭУ.Имя + ИмяНеважнойКолонки); Если ПолеФормы <> Неопределено Тогда @@ -1124,11 +1215,11 @@ КонецЕсли; КонецЦикла; ПоляБезОбрезкиЗаголовков = Новый Массив; - НастроитьСиситемноеПолеФормыТипаБулевоЛкс(ОсновнойЭУ, "Предопределенный", ПоляБезОбрезкиЗаголовков); - НастроитьСиситемноеПолеФормыТипаБулевоЛкс(ОсновнойЭУ, "ПометкаУдаления", ПоляБезОбрезкиЗаголовков); - НастроитьСиситемноеПолеФормыТипаБулевоЛкс(ОсновнойЭУ, "Проведен", ПоляБезОбрезкиЗаголовков); - НастроитьСиситемноеПолеФормыТипаБулевоЛкс(ОсновнойЭУ, "ЭтоГруппа", ПоляБезОбрезкиЗаголовков); - ирОбщий.НастроитьЗаголовкиАвтоТаблицыФормыДинамическогоСпискаЛкс(ОсновнойЭУ, ПолноеИмяТаблицыБД, РежимИмяСиноним, ПоляБезОбрезкиЗаголовков); + НастроитьСистемноеПолеФормыТипаБулевоЛкс(ОсновнойЭУ, "Предопределенный", ПоляБезОбрезкиЗаголовков); + НастроитьСистемноеПолеФормыТипаБулевоЛкс(ОсновнойЭУ, "ПометкаУдаления", ПоляБезОбрезкиЗаголовков); + НастроитьСистемноеПолеФормыТипаБулевоЛкс(ОсновнойЭУ, "Проведен", ПоляБезОбрезкиЗаголовков); + НастроитьСистемноеПолеФормыТипаБулевоЛкс(ОсновнойЭУ, "ЭтоГруппа", ПоляБезОбрезкиЗаголовков); + НастроитьЗаголовкиАвтоТаблицыФормыДинамическогоСпискаЛкс(ОсновнойЭУ, ПолноеИмяТаблицыБД, РежимИмяСиноним, ПоляБезОбрезкиЗаголовков); ПостроительПорядка = ирОбщий.ОсновнойПорядокТаблицыБДЛкс(ПолноеИмяТаблицыБД, ирОбщий.ВыражениеПорядкаКомпоновкиНаЯзыкеЗапросовЛкс(ДинамическийСписок.Порядок)); Если ЗначениеЗаполнено(ПостроительПорядка.Порядок) Тогда ирОбщий.СкопироватьПорядокЛюбойЛкс(ДинамическийСписок.Порядок, ПостроительПорядка.Порядок); @@ -1137,7 +1228,85 @@ КонецФункции -Процедура НастроитьСиситемноеПолеФормыТипаБулевоЛкс(Знач ОсновнойЭУ, Знач ИмяКолонки, ПоляБезОбрезкиЗаголовков = Неопределено) +Процедура НастроитьЗаголовкиАвтоТаблицыФормыДинамическогоСпискаЛкс(Знач ОсновнойЭУ, Знач ПолноеИмяТаблицы, Знач РежимИмяСиноним, Знач ПоляБезОбрезкиЗаголовков = Неопределено) Экспорт + + ПоляТаблицы = ирОбщий.ПоляТаблицыМДЛкс(ПолноеИмяТаблицы); + ПоляТаблицы = ПоляТаблицы.Скопировать(); + СтрокаПоляИденитификатора = ПоляТаблицы.Добавить(); + СтрокаПоляИденитификатора.Имя = "ИдентификаторСсылкиЛкс"; + СтрокаПоляИденитификатора.Заголовок = "Идентификатор ссылки"; + СтрокаПоляИденитификатора.ТипЗначения = Новый ОписаниеТипов; + Для Каждого ПолеТаблицы Из ПоляТаблицы Цикл + КолонкаТП = ОсновнойЭУ.ПодчиненныеЭлементы.Найти(ОсновнойЭУ.Имя + ПолеТаблицы.Имя); + Если КолонкаТП = Неопределено Тогда + Продолжить; + КонецЕсли; + Попытка + Подсказка = ПолеТаблицы.Метаданные.Подсказка; + Исключение + Подсказка = ""; + КонецПопытки; + РазрешитьОбрезку = Истина; + Если ПоляБезОбрезкиЗаголовков <> Неопределено Тогда + РазрешитьОбрезку = ПоляБезОбрезкиЗаголовков.Найти(ПолеТаблицы.Имя) = Неопределено; + КонецЕсли; + Заголовок = ЗаголовокПоляТаблицыФормыЛкс(ОсновнойЭУ, ПолеТаблицы, РежимИмяСиноним, Подсказка, РазрешитьОбрезку); + КолонкаТП.Заголовок = Заголовок; + КолонкаТП.Подсказка = Подсказка; + ирОбщий.ДобавитьОписаниеТиповВПодсказкуШапкиКолонкиЛкс(КолонкаТП, ПолеТаблицы.ТипЗначения, ПолеТаблицы.Метаданные); + КонецЦикла; + +КонецПроцедуры + +Функция ЗаголовокПоляТаблицыФормыЛкс(Знач ОсновнойЭУ, Знач ПолеТаблицыБД, Знач РежимИмяСиноним, Подсказка = "", Знач РазрешитьОбрезку = Истина, Знач МодификаторПоля = "") Экспорт + + Если РежимИмяСиноним Тогда + Заголовок = ПолеТаблицыБД.Имя; + Иначе + Заголовок = ПолеТаблицыБД.Заголовок; + КонецЕсли; + МаркерТипаЗначения = "_ТипЗначения_"; + Если Ложь + Или МодификаторПоля = "тип" + Или (Истина + //И Не ЗначениеЗаполнено(ЗаголовокПоля) + И ирОбщий.СтрКончаетсяНаЛкс(ПолеТаблицыБД.Имя, МаркерТипаЗначения)) + Тогда + Если МодификаторПоля = "тип" Тогда + Заголовок = ПолеТаблицыБД.Заголовок + " (тип)"; + Иначе + Заголовок = ирОбщий.ПредставлениеИзИдентификатораЛкс(ирОбщий.СтрокаБезПоследнегоФрагментаЛкс(ПолеТаблицыБД.Имя, МаркерТипаЗначения)) + " (тип)"; + КонецЕсли; + ТипЗначения = Новый ОписаниеТипов("Тип"); + Иначе + ТипЗначения = ПолеТаблицыБД.ТипЗначения; + КонецЕсли; + Если Не ЗначениеЗаполнено(Подсказка) Тогда + Подсказка = Заголовок; + КонецЕсли; + ТекущийЗаголовок = ""; + Если РазрешитьОбрезку И ирОбщий.ЛиОписаниеТиповБулевоЛкс(ТипЗначения) Тогда + ТекущийЗаголовок = Лев(Заголовок, 5) + "…"; + Иначе + НомерСтрокиЗаголовка = 1; + СловаЗаголовка = ирОбщий.СтрРазделитьЛкс(Заголовок, " "); + Для Каждого СловоЗаголовка Из СловаЗаголовка Цикл + Если Истина + И ЗначениеЗаполнено(ТекущийЗаголовок) + И СтрДлина(ТекущийЗаголовок) + СтрДлина(СловоЗаголовка) - НомерСтрокиЗаголовка > НомерСтрокиЗаголовка*СтрДлина(Заголовок)/ОсновнойЭУ.ВысотаШапки + Тогда + НомерСтрокиЗаголовка = НомерСтрокиЗаголовка + 1; + ТекущийЗаголовок = ТекущийЗаголовок + Символы.ПС; // Для сокращения результирующей ширины колонки + КонецЕсли; + ТекущийЗаголовок = ТекущийЗаголовок + СловоЗаголовка + " "; + КонецЦикла; + КонецЕсли; + Заголовок = ТекущийЗаголовок; + Возврат Заголовок; + +КонецФункции + +Процедура НастроитьСистемноеПолеФормыТипаБулевоЛкс(Знач ОсновнойЭУ, Знач ИмяКолонки, ПоляБезОбрезкиЗаголовков = Неопределено) ПолеФормы = ОсновнойЭУ.ПодчиненныеЭлементы.Найти(ОсновнойЭУ.Имя + ИмяКолонки); Если ПолеФормы = Неопределено Тогда @@ -1227,7 +1396,7 @@ ИмяПоляИмяПредопределенныхДанных = ирОбщий.ПеревестиСтроку("ИмяПредопределенныхДанных"); ИмяПоляПометкаУдаления = ирОбщий.ПеревестиСтроку("ПометкаУдаления"); ИмяПоляВладелец = ирОбщий.ПеревестиСтроку("Владелец"); - КонецЕсли; + КонецЕсли; Для Каждого КлючИЗначение Из ИсточникиДанных Цикл ЭтоОсновнаяТаблицаБД = КлючИЗначение.Ключ = ""; ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(КлючИЗначение.Значение); @@ -1255,22 +1424,8 @@ ПсевдонимПоля = КлючИЗначение.Ключ + "_" + ПсевдонимПоля; КонецЕсли; ВыражениеПоля = ПутьКПолю + ПолеТаблицы.Имя; - Если ЛиМетаданныеВнешнегоИсточника И ПолеТаблицы.Метаданные <> Неопределено Тогда - МетаданныеПоля = ПолеТаблицы.Метаданные; - // Антибаг платформы 8.3.18 теряются значения NULL https://www.hostedredmine.com/issues/925439 - #Если Сервер И Не Сервер Тогда - МетаданныеПоля = Метаданные.ВнешниеИсточникиДанных.Tropic.Таблицы.dbo_Dorem.Поля.Posted; - #КонецЕсли - Если МетаданныеПоля.РазрешитьNULL Тогда - ИмяСкрытогоПоля = ПолеТаблицы.Имя + "_ЭтоNULL_"; - СкрытыеПоля.Добавить(ИмяСкрытогоПоля); - ВыбранныеПоля.Добавить(ПутьКПолю + ПолеТаблицы.Имя + " ЕСТЬ NULL КАК " + ИмяСкрытогоПоля); - Если ДинамическийСписок <> Неопределено Тогда - ДинамическийСписок.УстановитьОбязательноеИспользование(ИмяСкрытогоПоля, Истина); - КонецЕсли; - КонецЕсли; - КонецЕсли; ЛиПолеВидимоПользователю = ДоступныеПоляКомпоновки.НайтиПоле(Новый ПолеКомпоновкиДанных(ПолеТаблицы.Имя)) <> Неопределено; + ТипЗначенияБезNull = Новый ОписаниеТипов(ПолеТаблицы.ТипЗначения,, "Null"); Если Истина И Не ЛиПолеВидимоПользователю // Для этих полей недоступно приведение типа @@ -1283,15 +1438,30 @@ Тогда Если ЗначениеЗаполнено(ИмяЛюбойКонстанты) Тогда ВыражениеОбъединения = "ВЫБОР КОГДА ЛОЖЬ ТОГДА Константы." + ИмяЛюбойКонстанты + " ИНАЧЕ " + ВыражениеПоля + " КОНЕЦ"; - ВыражениеСТипом = ирОбщий.ВыражениеПриведенияТипаНаЯзыкеЗапросовЛкс(ПолеТаблицы.ТипЗначения.Типы()[0], ПолеТаблицы.ТипЗначения, ВыражениеОбъединения); + ВыражениеСТипом = ирОбщий.ВыражениеПриведенияТипаНаЯзыкеЗапросовЛкс(ТипЗначенияБезNull.Типы()[0], ТипЗначенияБезNull, ВыражениеОбъединения); ВыражениеПоля = "ВЫБОР КОГДА ЛОЖЬ ТОГДА " + ВыражениеСТипом + " // Обходим недоступность поля в компоновке, сохраняя тип | ИНАЧЕ " + ВыражениеПоля + " КОНЕЦ"; Иначе ВыражениеПоля = """" + ЗначениеНедоступногоПоля + """"; КонецЕсли; КонецЕсли; + Если ЛиМетаданныеВнешнегоИсточника И ПолеТаблицы.Метаданные <> Неопределено Тогда + МетаданныеПоля = ПолеТаблицы.Метаданные; + // Антибаг платформы 8.3.18 теряются значения NULL https://www.hostedredmine.com/issues/925439 + #Если Сервер И Не Сервер Тогда + МетаданныеПоля = Метаданные.ВнешниеИсточникиДанных.Tropic.Таблицы.dbo_Dorem.Поля.Posted; + #КонецЕсли + Если МетаданныеПоля.РазрешитьNULL Тогда + ИмяСкрытогоПоля = ПолеТаблицы.Имя + "_ЭтоNULL_"; + СкрытыеПоля.Добавить(ИмяСкрытогоПоля); + ВыбранныеПоля.Добавить(ВыражениеПоля + " ЕСТЬ NULL КАК " + ИмяСкрытогоПоля); + Если ДинамическийСписок <> Неопределено Тогда + ДинамическийСписок.УстановитьОбязательноеИспользование(ИмяСкрытогоПоля, Истина); + КонецЕсли; + КонецЕсли; + КонецЕсли; Если Истина - И ПолеТаблицы.ТипЗначения.Типы().Количество() > 1 + И ТипЗначенияБезNull.Типы().Количество() > 1 И НЕ (Истина // Антибаг платформы http://www.hostedredmine.com/issues/882688, http://www.hostedredmine.com/issues/882690 И ПолеТаблицы.Имя = "ВедущаяЗадача" @@ -1354,10 +1524,18 @@ КонецПроцедуры -Процедура УправляемаяФорма_ОбновитьСлужебныеДанныеЛкс(Знач ЭтаФорма, Знач ПоляДляЗапоминанияТипов = Неопределено, Знач ПоляСИсториейВыбора = Неопределено) Экспорт +// Процедура - Управляемая форма обновить служебные данные лкс +// +// Параметры: +// ЭтаФорма - - +// ПоляДляЗапоминанияТипов - - +// ПоляСИсториейВыбора - - +// ДинамическиеСписки - Структура - для ускорения; ключ - имя таблицы формы, значение - исполняемые настройки +// +Процедура УправляемаяФорма_ОбновитьСлужебныеДанныеЛкс(Знач ЭтаФорма, Знач ПоляДляЗапоминанияТипов = Неопределено, Знач ПоляСИсториейВыбора = Неопределено, Знач ДинамическиеСписки = Неопределено) Экспорт СтруктураПутиКДанным = Новый Структура(); - ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(ЭтаФорма, СтруктураПутиКДанным); + ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(ЭтаФорма, СтруктураПутиКДанным,, ДинамическиеСписки); ФиксированнаяСтруктураПутиКДанным = Новый ФиксированнаяСтруктура(СтруктураПутиКДанным); СтруктураТипыЗначений = Новый Структура; @@ -1456,8 +1634,10 @@ СлужебныеДанные.Вставить("СохраняемыеДанные", СтруктураСохраняемыеДанные); СлужебныеДанные.Вставить("ТипыЗначений", ФиксированнаяСтруктураТипыЗначений); СлужебныеДанные.Вставить("ДинамическиеСписки", ДинамическиеСписки); + // Мультиметка55835453 СлужебныеДанные.Вставить("НеготовыеСтраницы", НеготовыеСтраницы); СлужебныеДанные.Вставить("Задания", Задания); + СлужебныеДанные.Вставить("ОригинальныйЗаголовок", ЭтаФорма.Заголовок); СлужебныеДанные.Вставить("ДатаОткрытия", ДатаОткрытия); ЭтаФорма.мСлужебныеДанные = СлужебныеДанные; Возврат; @@ -1516,7 +1696,7 @@ // НачальныйЭлемент - <тип> - // СтруктураПутиКДанным - <тип> - // -Процедура ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(НачальныйЭлемент, СтруктураПутиКДанным, Знач ЭтаФорма = Неопределено) Экспорт +Процедура ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(НачальныйЭлемент, СтруктураПутиКДанным, Знач ЭтаФорма = Неопределено, Знач ДинамическиеСписки = Неопределено) Экспорт Если ТипЗнч(НачальныйЭлемент) = Тип("УправляемаяФорма") Тогда ЭтаФорма = НачальныйЭлемент; @@ -1541,16 +1721,22 @@ И ТипЗначения <> Неопределено И ТипЗначения.СодержитТип(Тип("ДинамическийСписок")) Тогда - НастройкаКомпоновки = ТаблицаФормы.ПолучитьИсполняемыеНастройкиКомпоновкиДанных(); + НастройкаКомпоновки = Неопределено; + Если ДинамическиеСписки <> Неопределено Тогда + ДинамическиеСписки.Свойство(ТаблицаФормы.Имя, НастройкаКомпоновки); + КонецЕсли; + Если НастройкаКомпоновки = Неопределено Тогда + НастройкаКомпоновки = ТаблицаФормы.ПолучитьИсполняемыеНастройкиКомпоновкиДанных(); + КонецЕсли; #Если Сервер И Не Сервер Тогда НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; #КонецЕсли Для Каждого ВыбранноеПоле Из НастройкаКомпоновки.Структура[0].Выбор.Элементы Цикл - ИмяКолонки = СтрЗаменить(ВыбранноеПоле.Поле, ".", "_"); - ИмяПоля = ТаблицаФормы.Имя + ИмяКолонки; + ИмяПоляКомпоновки = "" + ВыбранноеПоле.Поле; + ИмяПоля = ТаблицаФормы.Имя + СтрЗаменить(ИмяПоляКомпоновки, ".", "_"); Если ТаблицаФормы.ПодчиненныеЭлементы.Найти(ИмяПоля) = Неопределено Тогда ИмяПоля = ирОбщий.АвтоУникальноеИмяВКоллекцииЛкс(СтруктураПутиКДанным, ИмяПоля,,,, 0); - СтруктураПутиКДанным.Вставить(ИмяПоля, "Элементы." + ТаблицаФормы.Имя + ".ТекущиеДанные." + ИмяКолонки); + СтруктураПутиКДанным.Вставить(ИмяПоля, "Элементы." + ТаблицаФормы.Имя + ".ТекущиеДанные." + ИмяПоляКомпоновки); КонецЕсли; КонецЦикла; КонецЕсли; @@ -1560,7 +1746,7 @@ Или ТипЗнч(Поле) = Тип("ГруппаФормы") Или ТипЗнч(Поле) = Тип("ТаблицаФормы") Тогда - ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(Поле, СтруктураПутиКДанным, ЭтаФорма); + ЗаполнитьСоответствиеПутиКДаннымПодчиненныхЭлементовФормыЛкс(Поле, СтруктураПутиКДанным, ЭтаФорма, ДинамическиеСписки); КонецЕсли; КонецЦикла; @@ -1660,6 +1846,6 @@ // Не вызывается в портативном режиме Функция ЛиЕстьИнтерактивныйДоступКИнструментамЛкс() Экспорт - //Результат = ирОбщий.ЛиЕстьИнтерактивныйДоступКИнструментамЛкс(); // Не используем этот способ, чтобы не компилировать огромный модуль + //Результат = ирКлиент.ЛиЕстьИнтерактивныйДоступКИнструментамЛкс(); // Не используем этот способ, чтобы не компилировать огромный модуль Возврат ПравоДоступа("Просмотр", Метаданные.Подсистемы.ИнструментыРазработчикаTormozit); КонецФункции \ No newline at end of file diff --git a/src/DataProcessors/ирПлатформа/Forms/ДеревоJSON.xml b/src/CommonPictures/ирПриемОбъекта.xml similarity index 61% rename from src/DataProcessors/ирПлатформа/Forms/ДеревоJSON.xml rename to src/CommonPictures/ирПриемОбъекта.xml index d64971023..44ccd8e20 100644 --- a/src/DataProcessors/ирПлатформа/Forms/ДеревоJSON.xml +++ b/src/CommonPictures/ирПриемОбъекта.xml @@ -1,30 +1,17 @@  -
+ - ДеревоJSON + ирПриемОбъекта ru - Дерево JSON - - - en - Дерево JSON - - - uk - Дерево JSON + Прием объекта - Ordinary - false - - PlatformApplication - MobilePlatformApplication - - + false + false - +
\ No newline at end of file diff --git a/src/CommonPictures/ирПриемОбъекта/Ext/Picture.xml b/src/CommonPictures/ирПриемОбъекта/Ext/Picture.xml new file mode 100644 index 000000000..a0912b2b5 --- /dev/null +++ b/src/CommonPictures/ирПриемОбъекта/Ext/Picture.xml @@ -0,0 +1,7 @@ + + + + Picture.png + false + + \ No newline at end of file diff --git a/src/CommonPictures/ирПриемОбъекта/Ext/Picture/Picture.png b/src/CommonPictures/ирПриемОбъекта/Ext/Picture/Picture.png new file mode 100644 index 000000000..12fef9671 Binary files /dev/null and b/src/CommonPictures/ирПриемОбъекта/Ext/Picture/Picture.png differ diff --git a/src/CommonTemplates/ирШаблонРасширения/Ext/Template.bin b/src/CommonTemplates/ирШаблонРасширения/Ext/Template.bin index 1377651b4..8e015391f 100644 Binary files a/src/CommonTemplates/ирШаблонРасширения/Ext/Template.bin and b/src/CommonTemplates/ирШаблонРасширения/Ext/Template.bin differ diff --git a/src/ConfigDumpInfo.xml b/src/ConfigDumpInfo.xml index 894c105b5..5a37c316c 100644 --- a/src/ConfigDumpInfo.xml +++ b/src/ConfigDumpInfo.xml @@ -1,7 +1,7 @@  - + @@ -16,20 +16,20 @@ - - - - - - - - - + + + + + + + + + - - + + @@ -40,50 +40,50 @@ - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - + + + + + + - - + + - - - - + + + + + + - - - - + + @@ -410,6 +410,8 @@ + + @@ -558,9 +560,9 @@ - - - + + + @@ -568,7 +570,7 @@ - + @@ -578,12 +580,12 @@ - - + + - + @@ -596,7 +598,7 @@ - + @@ -645,18 +647,18 @@ - - - - - - - + + + + + + + - + - + @@ -851,27 +853,27 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + @@ -892,18 +894,18 @@ - + - - + + - - + + @@ -926,13 +928,13 @@ - - - + + + - - + + @@ -952,19 +954,19 @@ - - - - - + + + + + - - - - + + + + - - + + @@ -1007,13 +1009,13 @@ - - - - - + + + + + - + @@ -1026,7 +1028,7 @@ - + @@ -1038,7 +1040,7 @@ - + @@ -1059,7 +1061,7 @@ - + @@ -1070,32 +1072,33 @@ + - - - - - + + + + + - + - + - - - - - + + + + + - - + + @@ -1133,24 +1136,24 @@ - - - + + + - - + + - - + + - - + + @@ -1219,36 +1222,36 @@ - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + + + - + - + @@ -1285,13 +1288,13 @@ - - - + + + - - + + @@ -1306,20 +1309,20 @@ - - - - - + + + + + - + - + @@ -1332,27 +1335,27 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - + @@ -1367,58 +1370,58 @@ - - - - - + + + + + - - + + - + - + - - - - - + + + + + - - + + - - - - - + + + + + - - + + - - + + - + - + @@ -1429,34 +1432,34 @@ - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -1475,43 +1478,43 @@ - - - - - + + + + + - + - + - - + + - - + + - - - - - - - - - + + + + + + + + + - + - + @@ -1558,27 +1561,27 @@ - - - + + + - - + + - - + + - - + + - - + + - - + + - + @@ -1619,11 +1622,11 @@ - + - + @@ -1631,14 +1634,14 @@ - + - - + + @@ -1743,132 +1746,128 @@ - + - - - + + + - - - - - - + + + + + + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + - + @@ -1971,8 +1970,8 @@ - - + + @@ -1989,7 +1988,7 @@ - + @@ -2032,67 +2031,67 @@ - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -2108,14 +2107,14 @@ - - - - - + + + + + - - + + @@ -2144,14 +2143,14 @@ - - - + + + - - + + @@ -2192,17 +2191,17 @@ - - - - - - - + + + + + + + - - + + @@ -2210,14 +2209,15 @@ - - - + + + - - + + + @@ -2236,18 +2236,18 @@ - - + + - - - - + + + + - + @@ -2258,7 +2258,7 @@ - + @@ -2269,29 +2269,29 @@ - - + + - - + + - - - - - - - - - - - + + + + + + + + + + + - - + + @@ -2309,12 +2309,12 @@ - - - + + + - - + + @@ -2426,41 +2426,41 @@ - - - + + + - - + + - - - - - + + + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -2506,20 +2506,20 @@ - - - - - - - + + + + + + + - - + + - - + + @@ -2542,14 +2542,14 @@ - - - + + + - - + + @@ -2570,14 +2570,12 @@ - - - - - + + + - - + + @@ -2601,11 +2599,11 @@ - - - + + + - + @@ -2614,7 +2612,7 @@ - + @@ -2622,11 +2620,11 @@ - - - + + + - + @@ -2635,7 +2633,7 @@ - + @@ -2685,12 +2683,12 @@ - - - + + + - - + + @@ -2743,16 +2741,16 @@ - - - + + + - + - + @@ -2771,12 +2769,12 @@ - - - + + + - - + + @@ -2816,13 +2814,13 @@ - - - + + + - - + + @@ -2891,17 +2889,17 @@ - - - + + + - + - + @@ -2953,14 +2951,14 @@ - - - - - + + + + + - - + + @@ -2981,13 +2979,13 @@ - - - + + + - - + + @@ -3106,13 +3104,13 @@ - - - - - + + + + + - + @@ -3124,34 +3122,34 @@ - - + + - + - - - + + + - + - + - - - + + + - - + + @@ -3189,77 +3187,77 @@ - - - + + + - + - + - - - + + + - + - + - - - + + + - + - + - - - + + + - + - + - - - + + + - + - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/Configuration.xml b/src/Configuration.xml index 099d732b5..23379297a 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -51,7 +51,7 @@ Role.ирРазработчик Tormozit - 6.58.3 + 6.59.1 false true @@ -384,6 +384,7 @@ ирПраваНаБазу ирПредопределенный ирПредприятие1С8 + ирПриемОбъекта ирПриходРасход ирПусто ирРазблокировать @@ -467,10 +468,10 @@ ирГлобальный ирДополнительныеОтчетыИОбработкиБСП ирИнтерфейсДляВстраивания + ирКлиент ирКэш ирОбщий ирПортативный - ирПривилегированный ирСервер ирОбработатьОбъекты ирОбъединитьСсылки diff --git a/src/DataProcessors/ирАнализДанных/Ext/ObjectModule.bsl b/src/DataProcessors/ирАнализДанных/Ext/ObjectModule.bsl index a55037689..9f2054875 100644 --- a/src/DataProcessors/ирАнализДанных/Ext/ObjectModule.bsl +++ b/src/DataProcessors/ирАнализДанных/Ext/ObjectModule.bsl @@ -2,7 +2,7 @@ //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; Перем мПлатформа Экспорт; @@ -21,6 +21,6 @@ //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); -//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); +//ирПортативный ирКлиент = ирПортативный.ПолучитьОбщийМодульЛкс("ирКлиент"); мПлатформа = ирКэш.Получить(); diff --git a/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form.bin b/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form.bin index dacae95b8..6e64bea3b 100644 Binary files a/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form.bin and b/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form/Module.bsl index 03b9ee1a0..2a3a2e57f 100644 --- a/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form/Module.bsl @@ -24,7 +24,7 @@ НастройкаФормы.Удалить("КолонкиАнализаДанных"); ЗагрузитьЗначенияПараметров(НастройкаФормы.Параметры); НастройкаФормы.Удалить("Параметры"); - ирОбщий.ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); + ирКлиент.ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); КонецЕсли; НастроитьЭлементыФормы(); @@ -52,13 +52,13 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); УстановитьТипАнализа(); КонецПроцедуры Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОсновныеДействияФормыОК(Кнопка) @@ -81,7 +81,7 @@ КонецЕсли; Документ = Новый ТабличныйДокумент; Построитель.Вывести(Документ); - ирОбщий.ОткрытьЗначениеЛкс(Документ,,, "" + ТипАнализа + ": " + ТекущаяДата(), Ложь); + ирКлиент.ОткрытьЗначениеЛкс(Документ,,, "" + ТипАнализа + ": " + ТекущаяДата(), Ложь); Если МодальныйРежим Тогда Если ТаблицаКластеризации <> Неопределено Тогда ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(Построитель.Результат.ТаблицаКластеризации, ТаблицаКластеризации); @@ -115,43 +115,43 @@ Процедура СтруктураКоманднойПанелиНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура КолонкиТабличногоПоляПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура КолонкиТабличногоПоляПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры @@ -241,7 +241,7 @@ #Если Сервер И Не Сервер Тогда мПлатформа = Обработки.ирПлатформа.Создать(); #КонецЕсли - ирОбщий.СохранитьНастройкуФормыЛкс(ЭтаФорма); + ирКлиент.СохранитьНастройкуФормыЛкс(ЭтаФорма); СтарыеЗначенияПараметров = ирОбщий.ТаблицаЗначенийИзКоллекцииЛкс(Построитель.Параметры); Построитель.ТипАнализа = ТипАнализа; Если ТипАнализа = Тип("АнализДанныхКластеризация") Тогда @@ -304,13 +304,13 @@ КолонкиАнализаДанных.Удалить(Колонка); КонецЕсли; КонецЦикла; - ирОбщий.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма, ТипАнализа); + ирКлиент.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма, ТипАнализа); КонецПроцедуры Процедура ДействияФормыИсходнаяТаблица(Кнопка) - ирОбщий.ОткрытьЗначениеЛкс(ПараметрТаблица,,,, Ложь); + ирКлиент.ОткрытьЗначениеЛкс(ПараметрТаблица,,,, Ложь); КонецПроцедуры @@ -323,11 +323,11 @@ Процедура НадписьОписаниеНажатие(Элемент) ИмяТипа = ирОбщий.ИмяТипаЛкс(ТипАнализа); - ирОбщий.ОткрытьТекстЛкс(мТаблицаТиповАнализа.Найти(ИмяТипа, "Имя").Описание, "" + ТипАнализа,, Истина, ИмяТипа); + ирКлиент.ОткрытьТекстЛкс(мТаблицаТиповАнализа.Найти(ИмяТипа, "Имя").Описание, "" + ТипАнализа,, Истина, ИмяТипа); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализДанных.Форма.Форма"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализДанных.Форма.Форма"); ВесПоУмолчанию = 100; ТипАнализа = Тип("АнализДанныхКластеризация"); мТаблицаТиповАнализа = Новый ТаблицаЗначений; \ No newline at end of file diff --git a/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form/form.txt b/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form/form.txt index 499e6aa7d..facb6393f 100644 --- a/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализДанных/Forms/Форма/Ext/Form/form.txt @@ -505,12 +505,43 @@ tuFL6NETJrT6xBh3qOwfjmt0fhCu5pD+u/2r3X7/ioit67q+tPEVat6M6h0=},0},0,0,0,0,0,1e2}, {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,ec655782-3cf2-4fd8-bec2-c936046c5ee1,326,1,14, -{7,cffef0db-3548-47b1-b900-d1340828edf3,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,3aa9760f-d25a-46e8-a39f-e72d94feea91,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0}, -{7,f5a377de-4161-4291-a347-03891f96dffd,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,88, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,6f34d99e-2e9e-4176-8b79-9097ea37d196,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,3e504fcf-4eb9-4709-9b0d-ed0787bef404,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0}, +{7,ce1c2618-03c6-409c-9af7-a6dd9def6e9e,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,2, +{"ru","Клс команда нажатие"}, +{"en","Клс команда нажатие"} +}, +{1,2, +{"ru","Клс команда нажатие"}, +{"en","Клс команда нажатие"} +}, +{1,2, +{"ru","Клс команда нажатие"}, +{"en","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Добавляет отбор без значения текущей ячейки"}, +{"en","Добавляет отбор без значения текущей ячейки"}, +{"uk","Добавляет отбор без значения текущей ячейки"} +}, +{1,3, +{"ru","Добавляет отбор без значения текущей ячейки"}, +{"en","Добавляет отбор без значения текущей ячейки"}, +{"uk","Добавляет отбор без значения текущей ячейки"} +}, +{4,1, +{0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, +{7,68b10030-baf3-4a8b-8fac-3d0fee6736fe,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,315},6, {1,3, {"ru","Установить тип колонки выделенным колонкам"}, @@ -522,7 +553,7 @@ tuFL6NETJrT6xBh3qOwfjmt0fhCu5pD+u/2r3X7/ioit67q+tPEVat6M6h0=},0},0,0,0,0,0,1e2}, {"en","Установить тип колонки выделенным колонкам"}, {"uk","Установить тип колонки выделенным колонкам"} },2}, -{7,dc9cd830-958b-4352-86c2-48846f559869,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,29c252ad-6057-48d2-9ee7-a46e2f570925,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,3, @@ -557,9 +588,9 @@ tuFL6NETJrT6xBh3qOwfjmt0fhCu5pD+u/2r3X7/ioit67q+tPEVat6M6h0=},0},0,0,0,0,0,1e2}, }, {4,1, {0,f3131559-4ff5-4195-b378-a9dd606b2f9a},"",-1,-1,1,0,""},2}, -{7,28b5b378-971a-40b5-9feb-c735f056c2a3,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,0c30dd45-2fb0-4498-8e65-654f8f128fef,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,c2a837a2-e41f-4b1b-b3f5-9ef1050f1ea0,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,891fddf6-e9f4-41ba-aabf-0b6e78b0cc2d,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -588,50 +619,13 @@ tuFL6NETJrT6xBh3qOwfjmt0fhCu5pD+u/2r3X7/ioit67q+tPEVat6M6h0=},0},0,0,0,0,0,1e2}, }, {4,1, {0,f0ebb5dc-978f-45d6-8d6d-90002b451026},"",-1,-1,0,0,""},2}, -{7,735bac4d-2faf-485b-a7b6-eda2bf2a8ec9,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,b9e13a34-2a79-4294-98f6-cff2c8ff5de7,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,91, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,dea75af9-6480-43fc-9265-5507f8ad7452,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,2, -{"ru","Клс команда нажатие"}, -{"en","Клс команда нажатие"} -}, -{1,2, -{"ru","Клс команда нажатие"}, -{"en","Клс команда нажатие"} -}, -{1,2, -{"ru","Клс команда нажатие"}, -{"en","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Добавляет отбор без значения текущей ячейки"}, -{"en","Добавляет отбор без значения текущей ячейки"}, -{"uk","Добавляет отбор без значения текущей ячейки"} -}, -{1,3, -{"ru","Добавляет отбор без значения текущей ячейки"}, -{"en","Добавляет отбор без значения текущей ячейки"}, -{"uk","Добавляет отбор без значения текущей ячейки"} -}, -{4,1, -{0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, -{7,dc24323c-0c48-44ea-b6ef-ec6f9abf3e91,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,e0a024c9-0912-40e9-9049-dacb2cf7bec0,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,93, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,b8857ebc-b21b-449e-a447-a5248205b880,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0}, -{7,87cd7dbe-e29d-463f-81ce-237e73e35c6c,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,89, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,b7fb4b3e-f86a-40b9-a2de-05b213506d8b,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,e4f813ea-db74-47a3-a637-1ae18fb7342b,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -661,7 +655,7 @@ tuFL6NETJrT6xBh3qOwfjmt0fhCu5pD+u/2r3X7/ioit67q+tPEVat6M6h0=},0},0,0,0,0,0,1e2}, {4,1, {-3},"",-1,-1,1,0,""}, {0,0,0},1}, -{7,987209a9-874b-4086-9702-fd1522ec492b,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,2d5938c4-55bf-4718-a794-b989d3401794,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -690,77 +684,83 @@ tuFL6NETJrT6xBh3qOwfjmt0fhCu5pD+u/2r3X7/ioit67q+tPEVat6M6h0=},0},0,0,0,0,0,1e2}, }, {4,1, {-4},"",-1,-1,1,0,""},1}, -{7,7748b353-1b3a-4415-90a3-0a01effad3d1,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,d1cbae47-34fc-4dbc-afd5-7839ce7ff7d0,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,88, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, +{7,fe9ca378-9b41-41ca-915f-b4bfb55e1082,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,89, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, +{7,ac45eb10-e0eb-4708-afcb-a7bfbd625403,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0},2, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,14,cffef0db-3548-47b1-b900-d1340828edf3, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,14,3aa9760f-d25a-46e8-a39f-e72d94feea91, {8,"Разделитель3",0,3, {1,1, {"ru","Действие1"} -},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,324,1e2,2,0,1,0,0,0,0},6f34d99e-2e9e-4176-8b79-9097ea37d196, +},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,324,1e2,2,0,1,0,0,0,0},68b10030-baf3-4a8b-8fac-3d0fee6736fe, {8,"УстановитьТипКолонки",0,1, {1,3, {"ru","Установить тип колонки"}, {"en","Установить тип колонки"}, {"uk","Установить тип колонки"} -},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,311,1e2,1,0,1,0,0,0,0},28b5b378-971a-40b5-9feb-c735f056c2a3, +},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,311,1e2,1,0,1,0,0,0,0},0c30dd45-2fb0-4498-8e65-654f8f128fef, {8,"Разделитель",0,1, {1,1, {"ru","Действие6"} -},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,8,1e2,2,0,1,0,0,0,0},dc9cd830-958b-4352-86c2-48846f559869, +},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,8,1e2,2,0,1,0,0,0,0},29c252ad-6057-48d2-9ee7-a46e2f570925, {8,"УстановитьЗначениеВКолонке",1,3, {1,3, {"ru","Установить значение в колонке"}, {"en","Установить значение в колонке"}, {"uk","Установить значение в колонке"} -},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,326,1e2,0,0,1,0,0,0,0},c2a837a2-e41f-4b1b-b3f5-9ef1050f1ea0, +},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,326,1e2,0,0,1,0,0,0,0},891fddf6-e9f4-41ba-aabf-0b6e78b0cc2d, {8,"МенеджерТабличногоПоля",0,4, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,325,1e2,0,0,1,0,0,0,0},735bac4d-2faf-485b-a7b6-eda2bf2a8ec9, +},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,325,1e2,0,0,1,0,0,0,0},b9e13a34-2a79-4294-98f6-cff2c8ff5de7, {8,"Действие2",0,1, {1,1, {"#","Действие2"} -},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,322,1e2,0,0,1,0,0,0,0},dea75af9-6480-43fc-9265-5507f8ad7452, +},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,322,1e2,0,0,1,0,0,0,0},ce1c2618-03c6-409c-9af7-a6dd9def6e9e, {8,"ОтборБезЗначенияВТекущейКолонке",0,7, {1,3, {"ru","Отбор без значения"}, {"en","Отбор без значения"}, {"uk","Отбор без значения"} -},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,323,1e2,0,0,1,0,0,0,0},dc24323c-0c48-44ea-b6ef-ec6f9abf3e91, +},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,323,1e2,0,0,1,0,0,0,0},e0a024c9-0912-40e9-9049-dacb2cf7bec0, {8,"Действие1",0,1, {1,1, {"#","Действие1"} -},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,321,1e2,0,0,1,0,0,0,0},b8857ebc-b21b-449e-a447-a5248205b880, +},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,321,1e2,0,0,1,0,0,0,0},3e504fcf-4eb9-4709-9b0d-ed0787bef404, {8,"Разделитель1",0,1, {1,1, {"ru","Действие1"} -},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,316,1e2,2,0,1,0,0,0,0},b7fb4b3e-f86a-40b9-a2de-05b213506d8b, +},0,ec655782-3cf2-4fd8-bec2-c936046c5ee1,316,1e2,2,0,1,0,0,0,0},e4f813ea-db74-47a3-a637-1ae18fb7342b, {8,"ПереместитьВверх",0,5, {1,3, {"ru","Переместить вверх"}, {"en","Переместить вверх"}, {"uk","Переместить вверх"} -},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,303,1e2,0,0,1,0,1,0,0},987209a9-874b-4086-9702-fd1522ec492b, +},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,303,1e2,0,0,1,0,1,0,0},2d5938c4-55bf-4718-a794-b989d3401794, {8,"ПереместитьВниз",0,6, {1,3, {"ru","Переместить вниз"}, {"en","Переместить вниз"}, {"uk","Переместить вниз"} -},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,304,1e2,0,0,1,0,1,0,0},f5a377de-4161-4291-a347-03891f96dffd, +},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,304,1e2,0,0,1,0,1,0,0},d1cbae47-34fc-4dbc-afd5-7839ce7ff7d0, {8,"СортироватьПоВозрастанию",1,3, {1,3, {"ru","Сортировать по возрастанию"}, {"en","Сортировать по возрастанию"}, {"uk","Сортировать по возрастанию"} -},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,305,1e2,0,0,1,0,0,0,0},87cd7dbe-e29d-463f-81ce-237e73e35c6c, +},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,305,1e2,0,0,1,0,0,0,0},fe9ca378-9b41-41ca-915f-b4bfb55e1082, {8,"СортироватьПоУбыванию",1,4, {1,3, {"ru","Сортировать по убыванию"}, {"en","Сортировать по убыванию"}, {"uk","Сортировать по убыванию"} -},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,306,1e2,0,0,1,0,0,0,0},7748b353-1b3a-4415-90a3-0a01effad3d1, +},1,ec655782-3cf2-4fd8-bec2-c936046c5ee1,306,1e2,0,0,1,0,0,0,0},ac45eb10-e0eb-4708-afcb-a7bfbd625403, {8,"Разделитель2",0,2, {1,1, {"ru","Действие1"} @@ -1273,7 +1273,78 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,0,1, {5,481ee287-ea62-461d-82cb-00bcf2d0dd76,172,1,14, -{7,0b97516e-7500-4821-ae9a-3d9eabc6dceb,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,9052e8f7-1daf-4023-ba22-d24ee84746c7,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,d159b49a-2664-43e5-b8be-93c7209329bf,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ОсновныеДействияФормыОК", +{1,"ОсновныеДействияФормыОК", +{1,3, +{"ru","Основные действия формы ОК"}, +{"en","Основные действия формы ОК"}, +{"uk","Основные действия формы ОК"} +}, +{1,3, +{"ru","Основные действия формы ОК"}, +{"en","Основные действия формы ОК"}, +{"uk","Основные действия формы ОК"} +}, +{1,3, +{"ru","Основные действия формы ОК"}, +{"en","Основные действия формы ОК"}, +{"uk","Основные действия формы ОК"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},15, +{1,0}, +{1,0}, +{4,1, +{0,0ce78048-0196-4f80-a781-9829cdb7f43e},"",-1,-1,1,0,""}, +{0,118,0},2}, +{7,31525d31-fd55-468e-a732-13f52b9d382c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0}, +{7,57aff489-a8a1-4ae7-bce3-15ab99654007,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыСгенерироватьПрограммныйКод", +{1,"ДействияФормыСгенерироватьПрограммныйКод", +{1,3, +{"ru","Действия формы сгенерировать программный код"}, +{"en","Действия формы сгенерировать программный код"}, +{"uk","Действия формы сгенерировать программный код"} +}, +{1,3, +{"ru","Действия формы сгенерировать программный код"}, +{"en","Действия формы сгенерировать программный код"}, +{"uk","Действия формы сгенерировать программный код"} +}, +{1,3, +{"ru","Действия формы сгенерировать программный код"}, +{"en","Действия формы сгенерировать программный код"}, +{"uk","Действия формы сгенерировать программный код"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Сгенерировать программный код анализа данных и открыть его в консоли кода"}, +{"en","Сгенерировать программный код анализа данных и открыть его в консоли кода"}, +{"uk","Сгенерировать программный код анализа данных и открыть его в консоли кода"} +}, +{1,3, +{"ru","Сгенерировать программный код анализа данных и открыть его в консоли кода"}, +{"en","Сгенерировать программный код анализа данных и открыть его в консоли кода"}, +{"uk","Сгенерировать программный код анализа данных и открыть его в консоли кода"} +}, +{4,1, +{0,7a3cee33-d378-4621-b7dc-0275f6690e27},"",-1,-1,1,0,""},2}, +{7,c7333261-0757-4594-9478-bb5cb11784fe,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,41828698-e066-40e4-818a-fc2f8c58cfdb,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0}, +{7,324b76a0-0847-4ba7-b7ef-4c558052dc6e,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыИсходнаяТаблица", {1,"ДействияФормыИсходнаяТаблица", {1,3, @@ -1309,110 +1380,9 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, {4,1, {0,d2a146a1-4c9b-478f-9e3a-04d9e161b165},"",-1,-1,1,0,""}, {0,0,0},2}, -{7,e12e183e-2b64-469d-8b92-696f40195a1d,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,ebd519ab-469b-4828-b547-643b7a66f42d,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,a7e6f081-3da8-45ca-a3f3-9d37992c0465,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ОсновныеДействияФормыОК", -{1,"ОсновныеДействияФормыОК", -{1,3, -{"ru","Основные действия формы ОК"}, -{"en","Основные действия формы ОК"}, -{"uk","Основные действия формы ОК"} -}, -{1,3, -{"ru","Основные действия формы ОК"}, -{"en","Основные действия формы ОК"}, -{"uk","Основные действия формы ОК"} -}, -{1,3, -{"ru","Основные действия формы ОК"}, -{"en","Основные действия формы ОК"}, -{"uk","Основные действия формы ОК"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},15, -{1,0}, -{1,0}, -{4,1, -{0,0ce78048-0196-4f80-a781-9829cdb7f43e},"",-1,-1,1,0,""}, -{0,118,0},2}, -{7,4f53629a-8086-4f35-8249-a33cfd2193c8,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыСгенерироватьПрограммныйКод", -{1,"ДействияФормыСгенерироватьПрограммныйКод", -{1,3, -{"ru","Действия формы сгенерировать программный код"}, -{"en","Действия формы сгенерировать программный код"}, -{"uk","Действия формы сгенерировать программный код"} -}, -{1,3, -{"ru","Действия формы сгенерировать программный код"}, -{"en","Действия формы сгенерировать программный код"}, -{"uk","Действия формы сгенерировать программный код"} -}, -{1,3, -{"ru","Действия формы сгенерировать программный код"}, -{"en","Действия формы сгенерировать программный код"}, -{"uk","Действия формы сгенерировать программный код"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Сгенерировать программный код анализа данных и открыть его в консоли кода"}, -{"en","Сгенерировать программный код анализа данных и открыть его в консоли кода"}, -{"uk","Сгенерировать программный код анализа данных и открыть его в консоли кода"} -}, -{1,3, -{"ru","Сгенерировать программный код анализа данных и открыть его в консоли кода"}, -{"en","Сгенерировать программный код анализа данных и открыть его в консоли кода"}, -{"uk","Сгенерировать программный код анализа данных и открыть его в консоли кода"} -}, -{4,1, -{0,7a3cee33-d378-4621-b7dc-0275f6690e27},"",-1,-1,1,0,""},2}, -{7,3ace28ca-96ea-40a5-b9a7-79ad4adda61a,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,ee9d2d15-2d66-4de0-8eee-53966c02e258,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,1a1ce573-fd95-4741-8524-fc804727c616,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},15, -{1,3, -{"ru","Сохранить настройку формы..."}, -{"en","Сохранить настройку формы..."}, -{"uk","Сохранить настройку формы..."} -}, -{1,3, -{"ru","Сохранить настройку формы..."}, -{"en","Сохранить настройку формы..."}, -{"uk","Сохранить настройку формы..."} -}, -{4,1, -{0,23f940bf-7381-4c2b-85a1-e541ed428042},"",14,8,1,0,""}, -{0,0,0},2}, -{7,d857b233-4b91-4e6d-ab61-e0e6ea9cfe1e,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0}, -{7,7dad2873-63e3-447e-9148-79c533efcbba,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0}, -{7,1e8f0450-f116-40c2-8438-aae882a1d750,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,6c074e84-5e98-476e-89f1-54886661d272,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыСтатья1", {1,"ДействияФормыСтатья1", {1,3, @@ -1445,7 +1415,37 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, {"en","Статья про кластеризацию"}, {"uk","Статья про кластеризацию"} },1}, -{7,3ff5f6aa-abda-4475-8f6b-ce80500774fd,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,695385bb-1bde-4df3-a38e-1453fae21ab6,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},15, +{1,3, +{"ru","Сохранить настройку формы..."}, +{"en","Сохранить настройку формы..."}, +{"uk","Сохранить настройку формы..."} +}, +{1,3, +{"ru","Сохранить настройку формы..."}, +{"en","Сохранить настройку формы..."}, +{"uk","Сохранить настройку формы..."} +}, +{4,1, +{0,23f940bf-7381-4c2b-85a1-e541ed428042},"",14,8,1,0,""}, +{0,0,0},2}, +{7,a170f206-86af-48ec-9706-2a153c05d266,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1474,7 +1474,7 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, }, {4,1, {0,a7707ed1-39b0-418f-974d-4d500d27a9c6},"",-1,-1,1,0,""},2}, -{7,2a47efe6-99e9-4db8-a86a-5cb7cb9af7c4,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,c7a01f13-562f-47d8-896f-6f306c0fc2ca,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1503,7 +1503,7 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, }, {4,1, {0,31324465-3215-4477-b5ac-5ec8be01ddcc},"",-1,-1,0,0,""},1}, -{7,37599987-cd6f-48f1-9a3b-7c56ee4eceb9,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,b0ec3e2e-64c3-486b-8e4e-e0d71c2a2686,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1532,7 +1532,7 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, }, {4,1, {0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1}, -{7,ebaa3158-a314-45ee-a7f0-483c55af00fc,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,87cf2b1c-08e3-41d1-b36d-f10c69e8bae5,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1561,69 +1561,69 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, }, {4,1, {0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,14,e12e183e-2b64-469d-8b92-696f40195a1d, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,14,9052e8f7-1daf-4023-ba22-d24ee84746c7, {8,"Разделитель",0,2, -{1,0},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,166,1e2,2,0,1,0,0,0,0},a7e6f081-3da8-45ca-a3f3-9d37992c0465, +{1,0},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,166,1e2,2,0,1,0,0,0,0},d159b49a-2664-43e5-b8be-93c7209329bf, {8,"ВыполнитьПоиск",0,2, {1,3, {"ru","Выполнить анализ"}, {"en","Выполнить анализ"}, {"uk","Выполнить анализ"} -},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,163,1e2,0,3,1,0,0,0,0},3ace28ca-96ea-40a5-b9a7-79ad4adda61a, +},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,163,1e2,0,3,1,0,0,0,0},c7333261-0757-4594-9478-bb5cb11784fe, {8,"Разделитель1",0,1, -{1,0},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,117,1e2,2,0,1,0,0,0,0},0b97516e-7500-4821-ae9a-3d9eabc6dceb, +{1,0},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,117,1e2,2,0,1,0,0,0,0},324b76a0-0847-4ba7-b7ef-4c558052dc6e, {8,"ИсходнаяТаблица",0,6, {1,3, {"ru","Источник"}, {"en","Источник"}, {"uk","Источник"} -},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,165,1e2,0,3,1,0,0,0,0},ee9d2d15-2d66-4de0-8eee-53966c02e258, +},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,165,1e2,0,3,1,0,0,0,0},ebd519ab-469b-4828-b547-643b7a66f42d, {8,"Разделитель2",0,2, -{1,0},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,167,1e2,2,0,1,0,0,0,0},4f53629a-8086-4f35-8249-a33cfd2193c8, +{1,0},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,167,1e2,2,0,1,0,0,0,0},57aff489-a8a1-4ae7-bce3-15ab99654007, {8,"СгенерироватьПрограммныйКод",0,3, {1,3, {"ru","Сгенерировать код"}, {"en","Сгенерировать код"}, {"uk","Сгенерировать код"} -},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,164,1e2,0,3,1,0,0,0,0},d857b233-4b91-4e6d-ab61-e0e6ea9cfe1e, +},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,164,1e2,0,3,1,0,0,0,0},31525d31-fd55-468e-a732-13f52b9d382c, {8,"Разделитель3",0,1, {1,1, {"ru","Действие"} -},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,169,1e2,2,0,1,0,0,0,0},1e8f0450-f116-40c2-8438-aae882a1d750, +},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,169,1e2,2,0,1,0,0,0,0},6c074e84-5e98-476e-89f1-54886661d272, {8,"Статья1",0,1, {1,3, {"ru","Статья про кластеризацию"}, {"en","Статья про кластеризацию"}, {"uk","Статья про кластеризацию"} -},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,168,1e2,0,0,1,0,0,0,0},7dad2873-63e3-447e-9148-79c533efcbba, +},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,168,1e2,0,0,1,0,0,0,0},41828698-e066-40e4-818a-fc2f8c58cfdb, {8,"Разделитель4",0,2, {1,1, {"ru","Действие"} -},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,170,1e2,2,0,1,0,0,0,0},1a1ce573-fd95-4741-8524-fc804727c616, +},0,481ee287-ea62-461d-82cb-00bcf2d0dd76,170,1e2,2,0,1,0,0,0,0},695385bb-1bde-4df3-a38e-1453fae21ab6, {8,"СохранитьНастройку",0,11, {1,3, {"ru","Сохранить настройку..."}, {"en","Сохранить настройку..."}, {"uk","Сохранить настройку..."} -},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,156,1e2,0,0,1,0,0,0,0},3ff5f6aa-abda-4475-8f6b-ce80500774fd, +},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,156,1e2,0,0,1,0,0,0,0},a170f206-86af-48ec-9706-2a153c05d266, {8,"ЗагрузитьНастройку",0,6, {1,3, {"ru","Загрузить настройку..."}, {"en","Загрузить настройку..."}, {"uk","Загрузить настройку..."} -},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,157,1e2,0,0,1,0,1,0,0},2a47efe6-99e9-4db8-a86a-5cb7cb9af7c4, +},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,157,1e2,0,0,1,0,1,0,0},c7a01f13-562f-47d8-896f-6f306c0fc2ca, {8,"НовоеОкно",0,10, {1,3, {"ru","НовоеОкно"}, {"en","НовоеОкно"}, {"uk","НовоеОкно"} -},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,158,1e2,0,0,1,0,0,0,0},37599987-cd6f-48f1-9a3b-7c56ee4eceb9, +},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,158,1e2,0,0,1,0,0,0,0},b0ec3e2e-64c3-486b-8e4e-e0d71c2a2686, {8,"СтруктураФормы",0,5, {1,3, {"ru","Структура формы"}, {"en","Структура формы"}, {"uk","Структура формы"} -},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,159,1e2,0,0,1,0,0,0,0},ebaa3158-a314-45ee-a7f0-483c55af00fc, +},1,481ee287-ea62-461d-82cb-00bcf2d0dd76,159,1e2,0,0,1,0,0,0,0},87cf2b1c-08e3-41d1-b36d-f10c69e8bae5, {8,"ОПодсистеме",0,5, {1,3, {"ru","О подсистеме"}, @@ -1634,7 +1634,7 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,d4eef082-1930-4c99-8190-725187db3004,163,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,06854765-6926-46fd-98f5-ccb9a1fc3334,163,0,0} }, {8,0,0,645,25,1, {0, @@ -1770,7 +1770,7 @@ GoIQSF4JogmPLNwELM5EcpKZubm5kaGpjhHMhwYwEuIQuLZaAA==},0},0,0,0,0,0,6e1}, {0} } } -},645,374,1,0,1,4,4,581,645,374,96}, +},645,374,1,0,1,4,4,596,645,374,96}, { {5},28, {4, diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Commands/Команда1/Ext/CommandModule.bsl b/src/DataProcessors/ирАнализЖурналаРегистрации/Commands/Команда1/Ext/CommandModule.bsl index 70d890254..49bde61cd 100644 --- a/src/DataProcessors/ирАнализЖурналаРегистрации/Commands/Команда1/Ext/CommandModule.bsl +++ b/src/DataProcessors/ирАнализЖурналаРегистрации/Commands/Команда1/Ext/CommandModule.bsl @@ -1,5 +1,5 @@  &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ирОбщий.ОткрытьФормуЛкс("Обработка.ирАнализЖурналаРегистрации.Форма"); + ирКлиент.ОткрытьФормуЛкс("Обработка.ирАнализЖурналаРегистрации.Форма"); КонецПроцедуры diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Ext/ObjectModule.bsl b/src/DataProcessors/ирАнализЖурналаРегистрации/Ext/ObjectModule.bsl index 0262516ac..45b03d88d 100644 --- a/src/DataProcessors/ирАнализЖурналаРегистрации/Ext/ObjectModule.bsl +++ b/src/DataProcessors/ирАнализЖурналаРегистрации/Ext/ObjectModule.bsl @@ -2,7 +2,7 @@ //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; Перем мАлгоритмПередВыгрузкойПараметры Экспорт; @@ -617,7 +617,7 @@ //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); -//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); +//ирПортативный ирКлиент = ирПортативный.ПолучитьОбщийМодульЛкс("ирКлиент"); Отбор.Колонки.Добавить("Использование", Новый ОписаниеТипов("Булево")); Отбор.Колонки.Добавить("Поле", Новый ОписаниеТипов("Строка")); diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form.bin b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form.bin index 850ffd892..2c6726b3c 100644 Binary files a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form.bin and b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form/Module.bsl index 10929e4df..678321f39 100644 --- a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form/Module.bsl @@ -30,7 +30,7 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); СписокЗначений.Очистить(); МаксКоличествоФрагментов = 3; Если ПараметрСписок <> Неопределено Тогда @@ -70,37 +70,37 @@ Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры Процедура СтруктураКоманднойПанелиНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура СписокЗначенийПриИзмененииФлажка(Элемент, Колонка) - ирОбщий.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка, ЭлементыФормы.ДействияФормы.Кнопки.ТолькоПомеченные); + ирКлиент.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка, ЭлементыФормы.ДействияФормы.Кнопки.ТолькоПомеченные); КонецПроцедуры Процедура СписокЗначенийПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура СписокЗначенийПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); КонецПроцедуры @@ -112,29 +112,29 @@ КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ФильтрПредставлениеАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка) - Если ирОбщий.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст) Тогда + Если ирКлиент.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст) Тогда ОбновитьОтбор(); КонецЕсли; КонецПроцедуры Процедура ФильтрИмяАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка) - Если ирОбщий.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст) Тогда + Если ирКлиент.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст) Тогда ОбновитьОтбор(); КонецЕсли; КонецПроцедуры @@ -145,23 +145,23 @@ КолонкиПоиска = Новый Структура; КолонкиПоиска.Вставить(Реквизиты.ПолноеИмя.Имя); КолонкиПоиска.Вставить(Реквизиты.ПолноеПредставление.Имя); - ирОбщий.ТабличноеПолеСДаннымиПоискаУстановитьОтборПоПодстрокеЛкс(ЭтаФорма, ЭлементыФормы.СписокЗначений, ПодстрокаПоиска, КолонкиПоиска); + ирКлиент.ТабличноеПолеСДаннымиПоискаУстановитьОтборПоПодстрокеЛкс(ЭтаФорма, ЭлементыФормы.СписокЗначений, ПодстрокаПоиска, КолонкиПоиска); КонецПроцедуры Процедура ПодстрокаПоискаПриИзменении(Элемент) - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); ОбновитьОтбор(); КонецПроцедуры Процедура ПодстрокаПоискаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура ПодстрокаПоискаАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка) - Если ирОбщий.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст) Тогда + Если ирКлиент.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст) Тогда ОбновитьОтбор(); КонецЕсли; КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализЖурналаРегистрации.Форма.РедакторСписка"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализЖурналаРегистрации.Форма.РедакторСписка"); diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form/form.txt b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form/form.txt index 1d7257f38..b6ff9eb90 100644 --- a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/РедакторСписка/Ext/Form/form.txt @@ -113,69 +113,7 @@ {0},0,1,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,bea25f84-0db9-4ab0-93b3-850bef12dffb,36,1,12, -{7,2324b7ee-453b-44d0-9dff-289805911795,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,88, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,ed4be211-bc8c-4554-948c-978b9e46d0c6,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"en","Открыть менеджер табличного поля"}, -{"ru","Открыть менеджер табличного поля"}, -{"uk","Открыть менеджер табличного поля"} -}, -{1,3, -{"en","Открыть менеджер табличного поля"}, -{"ru","Открыть менеджер табличного поля"}, -{"uk","Открыть менеджер табличного поля"} -}, -{4,1, -{0,f0ebb5dc-978f-45d6-8d6d-90002b451026},"",-1,-1,0,0,""},2}, -{7,7c58c921-108b-449c-9716-1ec6aa7e47b1,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,89, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,a8cd1a12-535a-44d4-a3c0-aabcca052341,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыТолькоПомеченные", -{1,"ДействияФормыТолькоПомеченные", -{1,1, -{"ru","Действия формы только помеченные"} -}, -{1,1, -{"ru","Действия формы только помеченные"} -}, -{1,1, -{"ru","Действия формы только помеченные"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},6, -{1,3, -{"ru","Включить отбор по только помеченным элементам"}, -{"en","Включить отбор по только помеченным элементам"}, -{"uk","Включить отбор по только помеченным элементам"} -}, -{1,3, -{"ru","Включить отбор по только помеченным элементам"}, -{"en","Включить отбор по только помеченным элементам"}, -{"uk","Включить отбор по только помеченным элементам"} -},2}, -{7,ca35b512-eab1-4c57-9989-dfc2f7f206d0,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,8460ffb7-3d8f-466f-a1e8-2142cff389f0,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -205,65 +143,7 @@ {4,1, {0,e827fd85-4497-4a57-9846-8703be214c08},"",-1,-1,1,0,""}, {0,70,16},2}, -{7,e6e47b8a-0eae-4b0b-9063-15ffcf7c02a4,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Установить пометки всех или выделенных строк"}, -{"en","Установить пометки всех или выделенных строк"}, -{"uk","Установить пометки всех или выделенных строк"} -}, -{1,3, -{"ru","Установить пометки всех или выделенных строк"}, -{"en","Установить пометки всех или выделенных строк"}, -{"uk","Установить пометки всех или выделенных строк"} -}, -{4,1, -{-10},"",-1,-1,1,0,""},2}, -{7,aec5f750-58e4-4dda-a0a5-ed81ba61147d,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Снять пометки всех или выделенных строк"}, -{"en","Снять пометки всех или выделенных строк"}, -{"uk","Снять пометки всех или выделенных строк"} -}, -{1,3, -{"ru","Снять пометки всех или выделенных строк"}, -{"en","Снять пометки всех или выделенных строк"}, -{"uk","Снять пометки всех или выделенных строк"} -}, -{4,1, -{-11},"",-1,-1,1,0,""},2}, -{7,4c10994c-7aba-41f9-9c83-afda9d44a1b6,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,ca65f70f-bc4f-474a-adcc-0b66185e5fd8,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -292,73 +172,193 @@ }, {4,1, {0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, -{7,7f5e906c-0fa6-445f-836e-476d9f614860,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,0f5402bf-356d-4250-aebc-01cd1fc2b97e,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,88, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, +{7,aeaf9629-9264-42aa-9ee1-0b177d5ec123,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыТолькоПомеченные", +{1,"ДействияФормыТолькоПомеченные", +{1,1, +{"ru","Действия формы только помеченные"} +}, +{1,1, +{"ru","Действия формы только помеченные"} +}, +{1,1, +{"ru","Действия формы только помеченные"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},6, +{1,3, +{"ru","Включить отбор по только помеченным элементам"}, +{"en","Включить отбор по только помеченным элементам"}, +{"uk","Включить отбор по только помеченным элементам"} +}, +{1,3, +{"ru","Включить отбор по только помеченным элементам"}, +{"en","Включить отбор по только помеченным элементам"}, +{"uk","Включить отбор по только помеченным элементам"} +},2}, +{7,16095269-3a0e-40c5-bc77-deea7855b80a,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Снять пометки всех или выделенных строк"}, +{"en","Снять пометки всех или выделенных строк"}, +{"uk","Снять пометки всех или выделенных строк"} +}, +{1,3, +{"ru","Снять пометки всех или выделенных строк"}, +{"en","Снять пометки всех или выделенных строк"}, +{"uk","Снять пометки всех или выделенных строк"} +}, +{4,1, +{-11},"",-1,-1,1,0,""},2}, +{7,0b461079-a2bd-44aa-b710-a0472ed20b6e,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,89, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, +{7,aeae29ca-3745-4977-8da1-d19890f78cbc,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Установить пометки всех или выделенных строк"}, +{"en","Установить пометки всех или выделенных строк"}, +{"uk","Установить пометки всех или выделенных строк"} +}, +{1,3, +{"ru","Установить пометки всех или выделенных строк"}, +{"en","Установить пометки всех или выделенных строк"}, +{"uk","Установить пометки всех или выделенных строк"} +}, +{4,1, +{-10},"",-1,-1,1,0,""},2}, +{7,32582edb-6dfe-4813-88e4-1f26260cddb0,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"en","Открыть менеджер табличного поля"}, +{"ru","Открыть менеджер табличного поля"}, +{"uk","Открыть менеджер табличного поля"} +}, +{1,3, +{"en","Открыть менеджер табличного поля"}, +{"ru","Открыть менеджер табличного поля"}, +{"uk","Открыть менеджер табличного поля"} +}, +{4,1, +{0,f0ebb5dc-978f-45d6-8d6d-90002b451026},"",-1,-1,0,0,""},2}, +{7,9815301c-8fae-42fe-97c7-91e0d8b29cb4,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,91, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,1a33f7b5-9354-486f-957d-2d1c6eee6d8a,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,e3588af0-b6fe-4136-96a3-87132449bb00,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,93, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,c5a415c0-2217-4a5c-9016-f2cebeeb5a92,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,eb7136e2-6216-4629-9393-16f9f025dcbb,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0}, -{7,f8bfc0de-09e9-4b8b-abbb-381274214961,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,039e132c-6b73-4b69-b258-9b8ff1527c8b,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,0},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,12,2324b7ee-453b-44d0-9dff-289805911795, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,12,0f5402bf-356d-4250-aebc-01cd1fc2b97e, {8,"Действие",0,1, {1,1, {"#","Действие"} -},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,23,1e2,0,0,1,0,0,0,0},7c58c921-108b-449c-9716-1ec6aa7e47b1, +},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,23,1e2,0,0,1,0,0,0,0},0b461079-a2bd-44aa-b710-a0472ed20b6e, {8,"Действие1",0,1, {1,1, {"#","Действие1"} -},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,24,1e2,0,0,1,0,0,0,0},e6e47b8a-0eae-4b0b-9063-15ffcf7c02a4, +},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,24,1e2,0,0,1,0,0,0,0},aeae29ca-3745-4977-8da1-d19890f78cbc, {8,"УстановитьФлажки",0,8, {1,3, {"ru","Установить пометки"}, {"en","Установить пометки"}, {"uk","Установить пометки"} -},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,21,1e2,0,0,1,0,0,0,0},aec5f750-58e4-4dda-a0a5-ed81ba61147d, +},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,21,1e2,0,0,1,0,0,0,0},16095269-3a0e-40c5-bc77-deea7855b80a, {8,"СнятьФлажки",0,8, {1,3, {"ru","Снять пометки"}, {"en","Снять пометки"}, {"uk","Снять пометки"} -},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,22,1e2,0,0,1,0,0,0,0},ed4be211-bc8c-4554-948c-978b9e46d0c6, +},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,22,1e2,0,0,1,0,0,0,0},32582edb-6dfe-4813-88e4-1f26260cddb0, {8,"МенеджерТабличногоПоля",0,5, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,30,1e2,0,0,1,0,0,0,0},7f5e906c-0fa6-445f-836e-476d9f614860, +},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,30,1e2,0,0,1,0,0,0,0},9815301c-8fae-42fe-97c7-91e0d8b29cb4, {8,"Действие2",0,1, {1,1, {"#","Действие2"} -},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,27,1e2,0,0,1,0,0,0,0},4c10994c-7aba-41f9-9c83-afda9d44a1b6, +},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,27,1e2,0,0,1,0,0,0,0},ca65f70f-bc4f-474a-adcc-0b66185e5fd8, {8,"ОтборБезЗначенияВТекущейКолонке",0,2, {1,3, {"ru","Отбор без значения"}, {"en","Отбор без значения"}, {"uk","Отбор без значения"} -},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,31,1e2,0,0,1,0,0,0,0},1a33f7b5-9354-486f-957d-2d1c6eee6d8a, +},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,31,1e2,0,0,1,0,0,0,0},e3588af0-b6fe-4136-96a3-87132449bb00, {8,"Действие3",0,1, {1,1, {"#","Действие3"} -},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,28,1e2,0,0,1,0,0,0,0},ca35b512-eab1-4c57-9989-dfc2f7f206d0, +},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,28,1e2,0,0,1,0,0,0,0},8460ffb7-3d8f-466f-a1e8-2142cff389f0, {8,"РазличныеЗначенияКолонки",0,4, {1,3, {"ru","Значения колонки"}, {"en","Значения колонки"}, {"uk","Значения колонки"} -},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,36,1e2,0,0,1,0,0,0,0},c5a415c0-2217-4a5c-9016-f2cebeeb5a92, +},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,36,1e2,0,0,1,0,0,0,0},eb7136e2-6216-4629-9393-16f9f025dcbb, {8,"Разделитель1",0,2, {1,1, {"ru","Действие4"} -},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,34,1e2,2,0,1,0,0,0,0},a8cd1a12-535a-44d4-a3c0-aabcca052341, +},0,bea25f84-0db9-4ab0-93b3-850bef12dffb,34,1e2,2,0,1,0,0,0,0},aeaf9629-9264-42aa-9ee1-0b177d5ec123, {8,"ТолькоПомеченные",0,2, {1,3, {"ru","Только помеченные"}, {"en","Только помеченные"}, {"uk","Только помеченные"} -},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,32,1e2,0,0,1,0,0,0,0},f8bfc0de-09e9-4b8b-abbb-381274214961, +},1,bea25f84-0db9-4ab0-93b3-850bef12dffb,32,1e2,0,0,1,0,0,0,0},039e132c-6b73-4b69-b258-9b8ff1527c8b, {8,"Разделитель",0,1, {1,1, {"ru","Действие4"} @@ -430,7 +430,9 @@ {0},7,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,2,0,1, {5,9047f361-f64c-4893-aa3f-9e6b49dabae2,4,1,4, -{7,abfe412e-2b97-47d7-9bf3-9345af9f0c23,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,4c99c430-1641-4a8a-a4f8-741a444b7724,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,19f07056-1d4e-4487-a4d4-137ef846d439,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ОсновныеДействияФормыОК", {1,"ОсновныеДействияФормыОК", {1,1, @@ -457,28 +459,26 @@ {"en","ОК"}, {"uk","ОК"} },1}, -{7,7551e45e-3f70-4b80-bc1c-244436da38e0,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,60597562-db63-40db-b030-cd4001e6292b,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,073c906a-4a18-403e-af43-d28cca96f7bf,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,6074cc04-0f61-44e4-9f44-81cfc16fce51,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,07415c5d-4619-4bb2-a872-0f2b9ff2d1ab,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,142, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0},0,1},0,1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,4,7551e45e-3f70-4b80-bc1c-244436da38e0, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,4,4c99c430-1641-4a8a-a4f8-741a444b7724, {8,"Разделитель2",0,3, {1,1, {"ru","Действие1"} -},0,9047f361-f64c-4893-aa3f-9e6b49dabae2,1,1e2,2,0,1,0,0,0,0},abfe412e-2b97-47d7-9bf3-9345af9f0c23, +},0,9047f361-f64c-4893-aa3f-9e6b49dabae2,1,1e2,2,0,1,0,0,0,0},19f07056-1d4e-4487-a4d4-137ef846d439, {8,"ОК",1,3, {1,3, {"ru"," ОК "}, {"en"," ОК "}, {"uk"," ОК "} -},1,9047f361-f64c-4893-aa3f-9e6b49dabae2,2,1e2,0,0,1,0,0,0,0},073c906a-4a18-403e-af43-d28cca96f7bf, +},1,9047f361-f64c-4893-aa3f-9e6b49dabae2,2,1e2,0,0,1,0,0,0,0},60597562-db63-40db-b030-cd4001e6292b, {8,"Разделитель",0,3, {1,1, {"ru","Действие"} -},0,9047f361-f64c-4893-aa3f-9e6b49dabae2,3,1e2,2,0,1,0,0,0,0},6074cc04-0f61-44e4-9f44-81cfc16fce51, +},0,9047f361-f64c-4893-aa3f-9e6b49dabae2,3,1e2,2,0,1,0,0,0,0},07415c5d-4619-4bb2-a872-0f2b9ff2d1ab, {8,"Закрыть",0,3, {1,3, {"ru","Закрыть"}, @@ -489,7 +489,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,5be7d3fe-c71e-4a94-946c-f2ca2411d274,2,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,273ac43a-6134-437f-856f-43c899f554cf,2,0,0} }, {8,0,267,582,292,1, {0, @@ -1549,7 +1549,7 @@ AjljAxyOhFQ15KX/cgKQGfKPDi/mpihiREJ8Ag==},0},0,0,0,0,0,25}, {0} } } -},582,292,1,0,1,4,4,95,582,292,96}, +},582,292,1,0,1,4,4,114,582,292,96}, { {3},11, {5, diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form.bin b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form.bin index 1a0b0f51e..c7147f876 100644 Binary files a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form.bin and b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form/Module.bsl index ab0f050d2..e6522c27a 100644 --- a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form/Module.bsl @@ -41,7 +41,7 @@ Процедура ТаблицаВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) СтрокаТаблицыЗначений = ТаблицаЗначенийЖурнала.Найти(ВыбраннаяСтрока.ПорядокСтроки, "ПорядокСтроки"); - //ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка, СтрокаТаблицыЗначений[Колонка.Данные]); + //ирКлиент.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка, СтрокаТаблицыЗначений[Колонка.Данные]); ФормаСобытия = ПолучитьФорму("ФормаСобытия",, ВыбраннаяСтрока.ПорядокСтроки); ФормаСобытия.НачальноеЗначениеВыбора = ВыбраннаяСтрока; ФормаСобытия.СтрокаТаблицыЗначений = СтрокаТаблицыЗначений; @@ -61,7 +61,7 @@ // Предопределеный метод Процедура ПроверкаЗавершенияФоновыхЗаданий() Экспорт - ирОбщий.ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма); + ирКлиент.ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма); КонецПроцедуры @@ -150,22 +150,22 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); - ирОбщий.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма); мАлгоритмПередВыгрузкойПараметры = ирОбщий.ТаблицаЗначенийИзТабличногоДокументаЛкс(ПолучитьМакет("АлгоритмПередВыгрузкой"),,,, Истина); Если НЕ ЗначениеЗаполнено(НачалоПериода) Тогда НачалоПериода = НачалоДня(ТекущаяДата()); КонецЕсли; ДействияФормыОткрытьФайлЖурнала(); ОбновитьПодменюПоследнихОтборов(); - ДопСвойства = ирОбщий.ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ЭлементыФормы.ТаблицаЖурнала); + ДопСвойства = ирКлиент.ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ЭлементыФормы.ТаблицаЖурнала); ДопСвойства.ЗапретПодвала = Истина; КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры @@ -181,7 +181,7 @@ КонецЕсли; КонецЕсли; Если ТекущаяСтрока.Поле = "Комментарий" Тогда - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, КомментарийКлючХраненияПоследнихЗначений()); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, КомментарийКлючХраненияПоследнихЗначений()); КонецЕсли; КонецПроцедуры @@ -224,7 +224,7 @@ Процедура КоманднаяПанельЖурналРегистрацииНастроитьРегистрациюСобытия(Кнопка) - Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирНастройкаЖурналаРегистрации.Форма"); + Форма = ирКлиент.ПолучитьФормуЛкс("Обработка.ирНастройкаЖурналаРегистрации.Форма"); Форма.Открыть(); ТекущаяСтрока = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока; Если ТекущаяСтрока <> Неопределено Тогда @@ -250,7 +250,7 @@ Если Элемент = Неопределено Тогда Элемент = ЭлементыФормы.Отбор; КонецЕсли; - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); ТекущиеДанные = ЭлементыФормы.Отбор.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда ЗначениеОтбора = Неопределено; @@ -331,38 +331,38 @@ Процедура СтруктураКоманднойПанелиНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры Процедура ОтборЗначениеОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) - //ирОбщий.ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка, , Истина); - ирОбщий.ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка); + //ирКлиент.ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка, , Истина); + ирКлиент.ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка); КонецПроцедуры Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры Процедура ОтборЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ЭлементыФормы.Отбор, СтандартнаяОбработка, , Истина); + ирКлиент.ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ЭлементыФормы.Отбор, СтандартнаяОбработка, , Истина); КонецПроцедуры @@ -389,8 +389,8 @@ Если Ответ = КодВозвратаДиалога.Да Тогда ИмяФайла = ""; Иначе - //НовоеИмяФайла = ирОбщий.ВыбратьФайлЛкс(, "lgf,lgd", "Журнал регистрации 1С", ИмяФайла); // lgd выдает ошибку https://www.hostedredmine.com/issues/929797 - НовоеИмяФайла = ирОбщий.ВыбратьФайлЛкс(, "lgf", "Журнал регистрации 1С", ИмяФайла); + //НовоеИмяФайла = ирКлиент.ВыбратьФайлЛкс(, "lgf,lgd", "Журнал регистрации 1С", ИмяФайла); // lgd выдает ошибку https://www.hostedredmine.com/issues/929797 + НовоеИмяФайла = ирКлиент.ВыбратьФайлЛкс(, "lgf", "Журнал регистрации 1С", ИмяФайла); Если НовоеИмяФайла <> Неопределено Тогда ИмяФайла = НовоеИмяФайла; Иначе @@ -407,7 +407,7 @@ Процедура КоманднаяПанельФормыОткрытьИТС(Кнопка) - ирОбщий.ОткрытьСсылкуИТСЛкс("https://its.1c.ru/db/v?doc#bookmark:dev:TI000000823"); + ирКлиент.ОткрытьСсылкуИТСЛкс("https://its.1c.ru/db/v?doc#bookmark:dev:TI000000823"); КонецПроцедуры @@ -440,13 +440,13 @@ Процедура ОтборПриИзмененииФлажка(Элемент, Колонка) - ирОбщий.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка); + ирКлиент.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка); КонецПроцедуры Процедура ТаблицаЖурналаПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); КонецПроцедуры @@ -459,7 +459,7 @@ Процедура ПоказатьСвернутьОтбор(Видимость = Истина) ЭлементыФормы.ДействияФормы.Кнопки.ОтображатьОтбор.Пометка = Видимость; - ирОбщий.ИзменитьСвернутостьЛкс(ЭтаФорма, Видимость, ЭлементыФормы.ПанельОтбор, ЭлементыФормы.РазделительГоризонтальныйПодОтбором, ЭтаФорма.Панель, "верх"); + ирКлиент.ИзменитьСвернутостьЛкс(ЭтаФорма, Видимость, ЭлементыФормы.ПанельОтбор, ЭлементыФормы.РазделительГоризонтальныйПодОтбором, ЭтаФорма.Панель, "верх"); КонецПроцедуры @@ -473,7 +473,7 @@ Процедура ОбновлениеОтображения() - ирОбщий.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); + ирКлиент.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); КонецПроцедуры @@ -493,7 +493,7 @@ Процедура ПроверитьИзменениеОтбораДляИсторииОтложенно() ТабличноеПоле = ЭлементыФормы.ТаблицаЖурнала; - ДобавленВСписок = ирОбщий.ДобавитьОтборВИсториюТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, ТабличноеПоле.ОтборСтрок, СтарыйОтбор); + ДобавленВСписок = ирКлиент.ДобавитьОтборВИсториюТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, ТабличноеПоле.ОтборСтрок, СтарыйОтбор); Если ДобавленВСписок Тогда ОбновитьПодменюПоследнихОтборов(); КонецЕсли; @@ -524,7 +524,7 @@ Если ПолноеИмяМД = Неопределено Тогда Возврат; КонецЕсли; - ФормаОтчета = ирОбщий.ПолучитьФормуЛкс("Отчет.ирАнализПравДоступа.Форма",,, ПолноеИмяМД); + ФормаОтчета = ирКлиент.ПолучитьФормуЛкс("Отчет.ирАнализПравДоступа.Форма",,, ПолноеИмяМД); ФормаОтчета.Пользователь = СтрокаТаблицыЗначений.ИмяПользователя; ФормаОтчета.ОбъектМетаданных = ПолноеИмяМД; ФормаОтчета.ПараметрКлючВарианта = "ПоПользователям"; @@ -543,13 +543,13 @@ Если ПолноеИмяМД = Неопределено Тогда Возврат; КонецЕсли; - ирОбщий.ОткрытьОбъектМетаданныхЛкс(ПолноеИмяМД); + ирКлиент.ОткрытьОбъектМетаданныхЛкс(ПолноеИмяМД); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры @@ -575,25 +575,25 @@ СтрокаТаблицыЗначений = ТаблицаЗначенийЖурнала.Найти(ДанныеСтроки.ПорядокСтроки, "ПорядокСтроки"); Если СтрокаТаблицыЗначений <> Неопределено Тогда Если ТаблицаЗначенийЖурнала.Колонки.Найти("РазделениеДанныхСеанса") <> Неопределено Тогда - ирОбщий.ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеСтроки.Ячейки.РазделениеДанныхСеанса, СтрокаТаблицыЗначений.РазделениеДанныхСеанса, Элемент.Колонки.РазделениеДанныхСеанса); + ирКлиент.ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеСтроки.Ячейки.РазделениеДанныхСеанса, СтрокаТаблицыЗначений.РазделениеДанныхСеанса, Элемент.Колонки.РазделениеДанныхСеанса); КонецЕсли; Если ТипЗнч(СтрокаТаблицыЗначений.Метаданные) = Тип("Строка") Тогда - КартинкаКорневогоТипа = ирОбщий.КартинкаКорневогоТипаМДЛкс(ирОбщий.ПервыйФрагментЛкс(СтрокаТаблицыЗначений.Метаданные)); + КартинкаКорневогоТипа = ирКлиент.КартинкаКорневогоТипаМДЛкс(ирОбщий.ПервыйФрагментЛкс(СтрокаТаблицыЗначений.Метаданные)); Если КартинкаКорневогоТипа.Вид <> ВидКартинки.Пустая Тогда ОформлениеСтроки.Ячейки.Метаданные.УстановитьКартинку(КартинкаКорневогоТипа); КонецЕсли; Иначе - ирОбщий.ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеСтроки.Ячейки.Метаданные, СтрокаТаблицыЗначений.Метаданные, Элемент.Колонки.Метаданные); + ирКлиент.ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеСтроки.Ячейки.Метаданные, СтрокаТаблицыЗначений.Метаданные, Элемент.Колонки.Метаданные); КонецЕсли; - ирОбщий.ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеСтроки.Ячейки.Данные, СтрокаТаблицыЗначений.Данные, Элемент.Колонки.Данные); - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки,,,,, СтрокаТаблицыЗначений); + ирКлиент.ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеСтроки.Ячейки.Данные, СтрокаТаблицыЗначений.Данные, Элемент.Колонки.Данные); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки,,,,, СтрокаТаблицыЗначений); КонецЕсли; КонецПроцедуры Процедура ОтборПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); СтрокаОтбора = ДанныеСтроки; ИспользованиеСтрокиОтбора = ИспользованиеСтрокиОтбора(СтрокаОтбора); Если ТипЗнч(ДанныеСтроки.Значение) = Тип("СписокЗначений") Тогда @@ -605,7 +605,7 @@ КонецЕсли; КонецЕсли; Если ДанныеСтроки.Поле = "Данные" Тогда - ирОбщий.ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеСтроки.Ячейки.Значение,,, Истина); + ирКлиент.ОформитьЯчейкуСРасширеннымЗначениемЛкс(ОформлениеСтроки.Ячейки.Значение,,, Истина); КонецЕсли; Если Не ИспользованиеСтрокиОтбора Тогда ОформлениеСтроки.ЦветТекста = ирОбщий.ЦветТекстаНеактивностиЛкс(); @@ -615,7 +615,7 @@ Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры @@ -629,7 +629,7 @@ Если Не ирОбщий.ЛиСсылкаНаОбъектБДЛкс(СтрокаТаблицыЗначений.Данные) Тогда Возврат КонецЕсли; - ирОбщий.ОткрытьСсылкуВРедактореОбъектаБДЛкс(СтрокаТаблицыЗначений.Данные); + ирКлиент.ОткрытьСсылкуВРедактореОбъектаБДЛкс(СтрокаТаблицыЗначений.Данные); КонецПроцедуры @@ -637,7 +637,7 @@ СтандартнаяОбработка = Ложь; СтруктураАлгоритма = ирОбщий.ОбъектИзСтрокиXMLЛкс(АлгоритмПередВыгрузкой); - Результат = ирОбщий.РедактироватьАлгоритмЧерезСтруктуруЛкс(СтруктураАлгоритма, мАлгоритмПередВыгрузкойПараметры,,, "Алгоритм перед выгрузкой"); + Результат = ирКлиент.РедактироватьАлгоритмЧерезСтруктуруЛкс(СтруктураАлгоритма, мАлгоритмПередВыгрузкойПараметры,,, "Алгоритм перед выгрузкой"); Если Результат Тогда Если Не ЗначениеЗаполнено(СтруктураАлгоритма.ТекстАлгоритма) Тогда ЭтотОбъект.АлгоритмПередВыгрузкой = ""; @@ -663,27 +663,27 @@ Процедура ФильтрКомментарийПриИзменении(Элемент) - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, КомментарийКлючХраненияПоследнихЗначений()); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, КомментарийКлючХраненияПоследнихЗначений()); ОбновитьОтборПросмотра(); КонецПроцедуры Процедура ФильтрКомментарийНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, КомментарийКлючХраненияПоследнихЗначений()); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, КомментарийКлючХраненияПоследнихЗначений()); КонецПроцедуры Процедура ФильтрКомментарийАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка) - ирОбщий.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст); + ирКлиент.ПромежуточноеОбновлениеСтроковогоЗначенияПоляВводаЛкс(ЭтаФорма, Элемент, Текст); ОбновитьОтборПросмотра(); КонецПроцедуры Процедура ОтборЗначениеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, КомментарийКлючХраненияПоследнихЗначений()); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, КомментарийКлючХраненияПоследнихЗначений()); КонецПроцедуры @@ -694,7 +694,7 @@ КонецФункции -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализЖурналаРегистрации.Форма.Форма"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализЖурналаРегистрации.Форма.Форма"); СписокВыбора = ЭлементыФормы.МаксимальныйРазмерВыгрузки.СписокВыбора; СписокВыбора.Добавить(100); СписокВыбора.Добавить(1000); diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form/form.txt b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form/form.txt index 5d9b9e304..a8af85ae8 100644 --- a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/Форма/Ext/Form/form.txt @@ -1372,7 +1372,40 @@ {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,0,1, {5,4a991a32-fb27-422a-a99e-bfa0c561a5b4,41,1,15, -{7,66a32c2b-4c8d-49ae-be99-3bd0cb36fcdb,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,4a4195ca-0954-49c4-846b-66b3cada4d80,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельЖурналРегистрацииОбновить", +{1,"КоманднаяПанельЖурналРегистрацииОбновить", +{1,1, +{"ru","Обновить"} +}, +{1,1, +{"ru","Обновить"} +}, +{1,1, +{"ru","Обновить"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Выгрузить данные журнала в таблицу. Может выполняться долго."}, +{"en","Выгрузить данные журнала в таблицу. Может выполняться долго."}, +{"uk","Выгрузить данные журнала в таблицу. Может выполняться долго."} +}, +{1,3, +{"ru","Выгрузить данные журнала в таблицу. Может выполняться долго."}, +{"en","Выгрузить данные журнала в таблицу. Может выполняться долго."}, +{"uk","Выгрузить данные журнала в таблицу. Может выполняться долго."} +}, +{4,1, +{0,fc4f29e0-d168-4fe0-8e64-e982fabf2595},"",-1,-1,1,0,""},2}, +{7,df02a7e2-0198-40f5-9f66-b9264b240c4b,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},6, +{1,0}, +{1,0},1}, +{7,07d9d7aa-4d6b-44b9-9e10-eb3fa5866469,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыОткрытьФайлЖурнала", {1,"ДействияФормыОткрытьФайлЖурнала", {1,1, @@ -1401,7 +1434,40 @@ }, {4,1, {0,a171cb59-6182-4375-bf8c-6890274f4366},"",-1,-1,1,0,""},1}, -{7,dd8251f9-1298-461a-8c61-d25e1b710fee,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,eebaa384-79a9-4d42-92a8-85bd8fd2d925,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыАнализТехножурнала", +{1,"ДействияФормыАнализТехножурнала", +{1,1, +{"ru","Анализ техножурнала"} +}, +{1,1, +{"ru","Анализ техножурнала"} +}, +{1,1, +{"ru","Анализ техножурнала"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть техножурнал с тем же отбором"}, +{"en","Открыть техножурнал с тем же отбором"}, +{"uk","Открыть техножурнал с тем же отбором"} +}, +{1,3, +{"ru","Открыть техножурнал с тем же отбором"}, +{"en","Открыть техножурнал с тем же отбором"}, +{"uk","Открыть техножурнал с тем же отбором"} +}, +{4,1, +{0,5a01a007-81fc-4dbf-8170-98fbaabecd73},"",-1,-1,0,0,""},1}, +{7,c1c055fc-d635-4612-b263-5527a433ee70,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},6, +{1,0}, +{1,0},1}, +{7,79265d8c-1bc2-4179-acdb-e2ba09fe69fc,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельФормыОтображатьОтбор", {1,"КоманднаяПанельФормыОтображатьОтбор", {1,1, @@ -1431,40 +1497,15 @@ {4,1, {0,65fd10fc-43c7-4d09-b386-e1aaa216efaa},"",-1,-1,0,0,""}, {0,0,0},1}, -{7,66a4fc69-75a8-4be0-bf16-c22806e28167,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,3538f2dc-e555-49c0-ac83-b78f61479ff8,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},6, {1,0}, {1,0},1}, -{7,880a7160-8875-475d-9c41-b23faf6961e7,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельЖурналРегистрацииОбновить", -{1,"КоманднаяПанельЖурналРегистрацииОбновить", -{1,1, -{"ru","Обновить"} -}, -{1,1, -{"ru","Обновить"} -}, -{1,1, -{"ru","Обновить"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Выгрузить данные журнала в таблицу. Может выполняться долго."}, -{"en","Выгрузить данные журнала в таблицу. Может выполняться долго."}, -{"uk","Выгрузить данные журнала в таблицу. Может выполняться долго."} -}, -{1,3, -{"ru","Выгрузить данные журнала в таблицу. Может выполняться долго."}, -{"en","Выгрузить данные журнала в таблицу. Может выполняться долго."}, -{"uk","Выгрузить данные журнала в таблицу. Может выполняться долго."} -}, -{4,1, -{0,fc4f29e0-d168-4fe0-8e64-e982fabf2595},"",-1,-1,1,0,""},2}, -{7,3b8d18f4-8a5e-497e-9317-f851b83ab29b,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,e8a96db8-738b-4dac-a754-62a711b50245,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},6, +{1,0}, +{1,0},1}, +{7,a047a5c6-703a-49f8-bdc8-39f7894a1a16,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельФормыОткрытьИТС", {1,"КоманднаяПанельФормыОткрытьИТС", {1,1, @@ -1491,52 +1532,11 @@ {"en","Открыть описание механизма its.1c.ru"}, {"uk","Открыть описание механизма its.1c.ru"} },1}, -{7,4557d114-f03a-47d1-92cd-32d525a1059a,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,2c16659f-de63-4cdd-92fa-6e7d0c53fdf0,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},6, {1,0}, {1,0},1}, -{7,7f498854-1a93-4a1f-83de-60efa42d7142,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыАнализТехножурнала", -{1,"ДействияФормыАнализТехножурнала", -{1,1, -{"ru","Анализ техножурнала"} -}, -{1,1, -{"ru","Анализ техножурнала"} -}, -{1,1, -{"ru","Анализ техножурнала"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть техножурнал с тем же отбором"}, -{"en","Открыть техножурнал с тем же отбором"}, -{"uk","Открыть техножурнал с тем же отбором"} -}, -{1,3, -{"ru","Открыть техножурнал с тем же отбором"}, -{"en","Открыть техножурнал с тем же отбором"}, -{"uk","Открыть техножурнал с тем же отбором"} -}, -{4,1, -{0,5a01a007-81fc-4dbf-8170-98fbaabecd73},"",-1,-1,0,0,""},1}, -{7,e557041a-f88e-495e-9e04-402112c7e7cc,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},6, -{1,0}, -{1,0},1}, -{7,0fe1727f-8009-4dde-ba17-82efcd533129,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},6, -{1,0}, -{1,0},1}, -{7,7397f13e-ab07-4238-8ab9-83ab2d61474f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},6, -{1,0}, -{1,0},1}, -{7,6ff5b1bd-0a36-47b1-89af-a3726eb96b0a,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,30527a11-433d-4eaa-8514-7b0c1225dfbb,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1566,7 +1566,7 @@ {4,1, {0,23f940bf-7381-4c2b-85a1-e541ed428042},"",14,8,1,0,""}, {0,0,0},2}, -{7,f7b7d409-3c0e-447b-9cd0-58ccb40200c5,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,bcc87f00-1de9-4365-81dc-32d9da997817,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1595,7 +1595,7 @@ }, {4,1, {0,a7707ed1-39b0-418f-974d-4d500d27a9c6},"",-1,-1,1,0,""},2}, -{7,c5add263-5568-4d82-a9fd-c91446265c7e,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,ea5bf007-28aa-4152-a923-f3a4a44c9882,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1624,7 +1624,7 @@ }, {4,1, {0,31324465-3215-4477-b5ac-5ec8be01ddcc},"",-1,-1,0,0,""},1}, -{7,d09db941-368f-4828-8e1a-94c64f5f7446,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,9d1efe5d-549c-4425-b6de-f6b6d33ea9f7,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1653,7 +1653,7 @@ }, {4,1, {0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1}, -{7,47181f1f-33a1-4253-b12e-2b782c06219a,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,42e54412-056e-41a9-b717-8ef80e2907e2,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1682,71 +1682,71 @@ }, {4,1, {0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,15,66a32c2b-4c8d-49ae-be99-3bd0cb36fcdb, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,15,07d9d7aa-4d6b-44b9-9e10-eb3fa5866469, {8,"ОткрытьФайлЖурнала",0,1, {1,3, {"ru","Открыть файл журнала"}, {"en","Открыть файл журнала"}, {"uk","Открыть файл журнала"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,25,1e2,0,0,1,0,0,0,0},66a4fc69-75a8-4be0-bf16-c22806e28167, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,25,1e2,0,0,1,0,0,0,0},df02a7e2-0198-40f5-9f66-b9264b240c4b, {8,"Разделитель1",0,12, -{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,34,1e2,2,0,1,0,0,0,0},880a7160-8875-475d-9c41-b23faf6961e7, +{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,34,1e2,2,0,1,0,0,0,0},4a4195ca-0954-49c4-846b-66b3cada4d80, {8,"Обновить",0,3, {1,3, {"ru","Выгрузить"}, {"en","Выгрузить"}, {"uk","Выгрузить"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,33,1e2,0,3,1,0,0,0,0},4557d114-f03a-47d1-92cd-32d525a1059a, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,33,1e2,0,3,1,0,0,0,0},3538f2dc-e555-49c0-ac83-b78f61479ff8, {8,"Разделитель5",0,12, -{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,41,1e2,2,0,1,0,0,0,0},dd8251f9-1298-461a-8c61-d25e1b710fee, +{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,41,1e2,2,0,1,0,0,0,0},79265d8c-1bc2-4179-acdb-e2ba09fe69fc, {8,"ОтображатьОтбор",0,7, {1,3, {"ru","Отбор"}, {"en","Отбор"}, {"uk","Отбор"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,36,1e2,0,3,1,1,0,0,0},e557041a-f88e-495e-9e04-402112c7e7cc, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,36,1e2,0,3,1,1,0,0,0},c1c055fc-d635-4612-b263-5527a433ee70, {8,"Разделитель4",0,11, -{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,37,1e2,2,0,1,0,0,0,0},7f498854-1a93-4a1f-83de-60efa42d7142, +{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,37,1e2,2,0,1,0,0,0,0},eebaa384-79a9-4d42-92a8-85bd8fd2d925, {8,"АнализТехножурнала",0,4, {1,3, {"ru","Техножурнал"}, {"en","Техножурнал"}, {"uk","Техножурнал"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,22,1e2,0,0,1,0,0,0,0},0fe1727f-8009-4dde-ba17-82efcd533129, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,22,1e2,0,0,1,0,0,0,0},e8a96db8-738b-4dac-a754-62a711b50245, {8,"Разделитель3",0,10, -{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,30,1e2,2,0,1,0,0,0,0},3b8d18f4-8a5e-497e-9317-f851b83ab29b, +{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,30,1e2,2,0,1,0,0,0,0},a047a5c6-703a-49f8-bdc8-39f7894a1a16, {8,"ОткрытьИТС",0,7, {1,3, {"ru","ИТС"}, {"en","ИТС"}, {"uk","ИТС"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,31,1e2,0,0,1,0,0,0,0},7397f13e-ab07-4238-8ab9-83ab2d61474f, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,31,1e2,0,0,1,0,0,0,0},2c16659f-de63-4cdd-92fa-6e7d0c53fdf0, {8,"Разделитель",0,11, -{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,32,1e2,2,0,1,0,0,0,0},6ff5b1bd-0a36-47b1-89af-a3726eb96b0a, +{1,0},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,32,1e2,2,0,1,0,0,0,0},30527a11-433d-4eaa-8514-7b0c1225dfbb, {8,"СохранитьНастройку",0,10, {1,3, {"ru","Сохранить настройку..."}, {"en","Сохранить настройку..."}, {"uk","Сохранить настройку..."} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,38,1e2,0,0,1,0,0,0,0},f7b7d409-3c0e-447b-9cd0-58ccb40200c5, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,38,1e2,0,0,1,0,0,0,0},bcc87f00-1de9-4365-81dc-32d9da997817, {8,"ЗагрузитьНастройку",0,5, {1,3, {"ru","Загрузить настройку..."}, {"en","Загрузить настройку..."}, {"uk","Загрузить настройку..."} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,39,1e2,0,0,1,0,1,0,0},c5add263-5568-4d82-a9fd-c91446265c7e, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,39,1e2,0,0,1,0,1,0,0},ea5bf007-28aa-4152-a923-f3a4a44c9882, {8,"НовоеОкно",0,9, {1,3, {"ru","НовоеОкно"}, {"en","НовоеОкно"}, {"uk","НовоеОкно"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,19,1e2,0,0,1,0,0,0,0},d09db941-368f-4828-8e1a-94c64f5f7446, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,19,1e2,0,0,1,0,0,0,0},9d1efe5d-549c-4425-b6de-f6b6d33ea9f7, {8,"СтруктураФормы",0,4, {1,3, {"ru","Структура формы"}, {"en","Структура формы"}, {"uk","Структура формы"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,24,1e2,0,0,1,0,0,0,0},47181f1f-33a1-4253-b12e-2b782c06219a, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,24,1e2,0,0,1,0,0,0,0},42e54412-056e-41a9-b717-8ef80e2907e2, {8,"ОПодсистеме",0,4, {1,3, {"ru","О подсистеме"}, @@ -1757,7 +1757,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,3df44278-b2cc-445f-b57b-65a4c818c6d3,33,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,289f7327-5008-42e1-9bc5-95adc6cbaa8f,33,0,0} }, {8,0,0,900,25,1, {0, @@ -2042,102 +2042,18 @@ {0},0,1,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,d80a01e7-2431-497b-9ae1-f9238f588b9f,231,1,19, -{7,3541d7b8-aaf7-451e-b8d4-81f314d6f0c0,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,4c41e5e0-e216-4346-8ce4-f94f990db9aa,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельЖурналРегистрацииАнализПравДоступа", -{1,"КоманднаяПанельЖурналРегистрацииАнализПравДоступа", -{1,1, -{"ru","Анализ прав доступа"} -}, -{1,1, -{"ru","Анализ прав доступа"} -}, -{1,1, -{"ru","Анализ прав доступа"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},15, -{1,3, -{"ru","Анализ прав доступа"}, -{"en","Анализ прав доступа"}, -{"uk","Анализ прав доступа"} -}, -{1,3, -{"ru","Анализ прав доступа"}, -{"en","Анализ прав доступа"}, -{"uk","Анализ прав доступа"} -}, -{4,1, -{0,8ce6a6aa-80eb-4a9e-8b59-f98fd5c6bd40},"",-1,-1,1,0,""}, -{0,0,0},2}, -{7,56a280e0-7531-4868-8749-d3f83f0fada8,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,f17b53e0-a66d-4688-842c-56c5673a03e4,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,d57f832c-c02a-428c-9b8b-c1d69a77d9f1,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,88, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,10e2d9ae-53ef-459c-b2e1-562f70532786,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Отбор без значения в текущей колонке"}, -{"en","Отбор без значения в текущей колонке"}, -{"uk","Отбор без значения в текущей колонке"} -}, -{1,3, -{"ru","Отбор без значения в текущей колонке"}, -{"en","Отбор без значения в текущей колонке"}, -{"uk","Отбор без значения в текущей колонке"} -}, -{4,1, -{0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, -{7,f7d57cb6-9f2a-41fb-ac31-6e4eb9bd83c2,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть таблицу в консоли компоновки"}, -{"en","Открыть таблицу в консоли компоновки"}, -{"uk","Открыть таблицу в консоли компоновки"} -}, -{1,3, -{"ru","Открыть таблицу в консоли компоновки"}, -{"en","Открыть таблицу в консоли компоновки"}, -{"uk","Открыть таблицу в консоли компоновки"} -}, -{4,1, -{0,98f09020-9b4d-48bc-96b4-84d954a633e8},"",14,2,1,0,""},2}, -{7,81affb76-2029-40e4-b44d-d0e2a1cd5098,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,1d477bb0-272a-4732-a6b7-3f48b53d43fa,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,b2e53580-457b-4cc0-bde7-df37e0fb824e,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,89, +{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, +{7,223e0b25-1d61-4d6a-ac75-8e02402b7b27,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,97, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, +{7,428ab833-898c-4a5c-983b-544324090f5c,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -2166,27 +2082,7 @@ }, {4,1, {0,c2e2d966-5b7f-4699-903b-28a6f50d5471},"",-1,-1,1,0,""},2}, -{7,c483da26-e7c3-46c1-b1a3-e82558f78f32,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,89, -{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,3621974b-34e7-4f32-8607-75232c620c95,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,d80a01e7-2431-497b-9ae1-f9238f588b9f,231},7, -{1,3, -{"ru","Список последних отборов"}, -{"en","Список последних отборов"}, -{"uk","Список последних отборов"} -}, -{1,3, -{"ru","Список последних отборов"}, -{"en","Список последних отборов"}, -{"uk","Список последних отборов"} -}, -{4,1, -{0,8729a534-9f88-47b0-8d6b-ec213689580d},"",-1,-1,1,0,""},2}, -{7,c465813b-5985-481d-ac0a-d90da543ba1c,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,97, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,1be0de19-d2b9-458d-a183-6a025f810e92,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,220ae947-6e62-4e69-9c35-6fa8af3db893,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -2215,13 +2111,85 @@ }, {4,1, {0,f0ebb5dc-978f-45d6-8d6d-90002b451026},"",-1,-1,0,0,""},2}, -{7,e515a1c2-723b-420c-8a7e-404e29656eae,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,5249c007-d8eb-4bd7-8201-4344c690611d,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,d80a01e7-2431-497b-9ae1-f9238f588b9f,231},7, +{1,3, +{"ru","Список последних отборов"}, +{"en","Список последних отборов"}, +{"uk","Список последних отборов"} +}, +{1,3, +{"ru","Список последних отборов"}, +{"en","Список последних отборов"}, +{"uk","Список последних отборов"} +}, +{4,1, +{0,8729a534-9f88-47b0-8d6b-ec213689580d},"",-1,-1,1,0,""},2}, +{7,fbe2bbca-e7d6-4338-861f-69aeb8147d61,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,0,00000000-0000-0000-0000-000000000000,91, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,2d2701c7-b29d-46e3-b293-12f9f4ed413b,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,a30a6ae9-f526-48f1-a62f-bec38123f2a9,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Отбор без значения в текущей колонке"}, +{"en","Отбор без значения в текущей колонке"}, +{"uk","Отбор без значения в текущей колонке"} +}, +{1,3, +{"ru","Отбор без значения в текущей колонке"}, +{"en","Отбор без значения в текущей колонке"}, +{"uk","Отбор без значения в текущей колонке"} +}, +{4,1, +{0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, +{7,9eb2c2e7-5b40-44c1-881c-ceca523dbf0b,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,0,00000000-0000-0000-0000-000000000000,93, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,165322fe-da9d-47a9-b74d-f2f0176e6bd6,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,413593b9-4283-433e-a7c7-96d617a15202,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть таблицу в консоли компоновки"}, +{"en","Открыть таблицу в консоли компоновки"}, +{"uk","Открыть таблицу в консоли компоновки"} +}, +{1,3, +{"ru","Открыть таблицу в консоли компоновки"}, +{"en","Открыть таблицу в консоли компоновки"}, +{"uk","Открыть таблицу в консоли компоновки"} +}, +{4,1, +{0,98f09020-9b4d-48bc-96b4-84d954a633e8},"",14,2,1,0,""},2}, +{7,30a21279-7609-4370-8639-d240af56b9d7,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -2251,7 +2219,9 @@ {4,1, {0,e827fd85-4497-4a57-9846-8703be214c08},"",-1,-1,1,0,""}, {0,70,16},2}, -{7,5be5c52b-c982-4292-bb54-476de8985307,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,d4d59611-0113-4835-aff4-29854b484868,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,2c80afeb-2757-407f-a935-2d95b249b89b,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииРедакторОбъектаБД", {1,"КоманднаяПанельЖурналРегистрацииРедакторОбъектаБД", {1,2, @@ -2284,7 +2254,37 @@ {4,1, {0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""}, {0,81,8},2}, -{7,c94d9ac1-385c-41b0-9ca0-c29d2ed7b078,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,279d0c94-067c-46af-8d9b-e0e0949bc35f,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельЖурналРегистрацииАнализПравДоступа", +{1,"КоманднаяПанельЖурналРегистрацииАнализПравДоступа", +{1,1, +{"ru","Анализ прав доступа"} +}, +{1,1, +{"ru","Анализ прав доступа"} +}, +{1,1, +{"ru","Анализ прав доступа"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},15, +{1,3, +{"ru","Анализ прав доступа"}, +{"en","Анализ прав доступа"}, +{"uk","Анализ прав доступа"} +}, +{1,3, +{"ru","Анализ прав доступа"}, +{"en","Анализ прав доступа"}, +{"uk","Анализ прав доступа"} +}, +{4,1, +{0,8ce6a6aa-80eb-4a9e-8b59-f98fd5c6bd40},"",-1,-1,1,0,""}, +{0,0,0},2}, +{7,9e2b6e7f-506f-4b52-910b-b1a1d12d4aaa,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииОткрытьОбъектМетаданных", {1,"КоманднаяПанельЖурналРегистрацииОткрытьОбъектМетаданных", {1,1, @@ -2313,7 +2313,7 @@ }, {4,1, {0,3d510c6e-0d07-453c-af65-fb96ff26fd61},"",-1,-1,1,0,""},1}, -{7,965745f9-301b-4f5f-bd93-7fa5fc474872,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,3a801846-f4b2-4d9c-9ffe-24f13508a898,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииНастроитьРегистрациюСобытия", {1,"КоманднаяПанельЖурналРегистрацииНастроитьРегистрациюСобытия", {1,1, @@ -2342,9 +2342,9 @@ }, {4,1, {0,8f56ef2c-fd38-417b-b184-3b9ec3c6837f},"",-1,-1,0,0,""},2}, -{7,699062e5-a13f-458a-bb27-f987e6b8c4d2,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,163ac752-86e4-4800-90a4-6cb90f31cce4,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,685766ad-b3e6-4a89-ac7f-a1395e73cc2b,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,907614ed-dbf4-4f1c-b9aa-0943a7f06acd,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииНайтиВОтбореВыгрузки", {1,"КоманднаяПанельЖурналРегистрацииНайтиВОтбореВыгрузки", {1,1, @@ -2373,97 +2373,97 @@ }, {4,1, {0,977e831a-0e73-4d60-af51-091a6fa8612e},"",-1,-1,1,0,""},2},2, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,19,f17b53e0-a66d-4688-842c-56c5673a03e4, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,19,d57f832c-c02a-428c-9b8b-c1d69a77d9f1, {8,"Действие4",0,1, {1,1, {"#","Действие4"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,177,1e2,0,0,1,0,1,0,0},c483da26-e7c3-46c1-b1a3-e82558f78f32, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,177,1e2,0,0,1,0,1,0,0},b2e53580-457b-4cc0-bde7-df37e0fb824e, {8,"Действие5",0,1, {1,1, {"#","Действие5"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,178,1e2,0,0,1,0,1,0,0},3541d7b8-aaf7-451e-b8d4-81f314d6f0c0, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,178,1e2,0,0,1,0,1,0,0},1d477bb0-272a-4732-a6b7-3f48b53d43fa, {8,"Разделитель2",0,1, -{1,0},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,59,1e2,2,0,1,0,1,0,0},c465813b-5985-481d-ac0a-d90da543ba1c, +{1,0},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,59,1e2,2,0,1,0,1,0,0},223e0b25-1d61-4d6a-ac75-8e02402b7b27, {8,"Действие",0,1, {1,1, {"#","Действие"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,179,1e2,0,0,1,0,0,0,0},81affb76-2029-40e4-b44d-d0e2a1cd5098, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,179,1e2,0,0,1,0,0,0,0},428ab833-898c-4a5c-983b-544324090f5c, {8,"ВывестиСтроки",0,4, {1,3, {"ru","Вывести строки"}, {"en","Вывести строки"}, {"uk","Вывести строки"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,226,1e2,0,0,1,0,0,0,0},1be0de19-d2b9-458d-a183-6a025f810e92, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,226,1e2,0,0,1,0,0,0,0},220ae947-6e62-4e69-9c35-6fa8af3db893, {8,"МенеджерТабличногоПоля",0,4, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,219,1e2,0,0,1,0,0,0,0},e515a1c2-723b-420c-8a7e-404e29656eae, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,219,1e2,0,0,1,0,0,0,0},fbe2bbca-e7d6-4338-861f-69aeb8147d61, {8,"Действие2",0,1, {1,1, {"#","Действие2"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,182,1e2,0,0,1,0,0,0,0},10e2d9ae-53ef-459c-b2e1-562f70532786, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,182,1e2,0,0,1,0,0,0,0},a30a6ae9-f526-48f1-a62f-bec38123f2a9, {8,"ОтборБезЗначенияВТекущейКолонке",0,1, {1,3, {"ru","Отбор без значения"}, {"en","Отбор без значения"}, {"uk","Отбор без значения"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,216,1e2,0,0,1,0,0,0,0},3621974b-34e7-4f32-8607-75232c620c95, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,216,1e2,0,0,1,0,0,0,0},5249c007-d8eb-4bd7-8201-4344c690611d, {8,"ПоследниеОтборы",0,4, {1,3, {"ru","Выбрать"}, {"en","Выбрать"}, {"uk","Выбрать"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,230,1e2,1,0,1,0,0,0,0},2d2701c7-b29d-46e3-b293-12f9f4ed413b, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,230,1e2,1,0,1,0,0,0,0},9eb2c2e7-5b40-44c1-881c-ceca523dbf0b, {8,"Действие1",0,1, {1,1, {"#","Действие1"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,181,1e2,0,0,1,0,0,0,0},165322fe-da9d-47a9-b74d-f2f0176e6bd6, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,181,1e2,0,0,1,0,0,0,0},30a21279-7609-4370-8639-d240af56b9d7, {8,"РазличныеЗначенияКолонки",0,3, {1,3, {"ru","Значения колонки"}, {"en","Значения колонки"}, {"uk","Значения колонки"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,224,1e2,0,0,1,0,0,0,0},56a280e0-7531-4868-8749-d3f83f0fada8, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,224,1e2,0,0,1,0,0,0,0},d4d59611-0113-4835-aff4-29854b484868, {8,"Разделитель",0,1, {1,1, {"ru","Действие9"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,204,1e2,2,0,1,0,0,0,0},5be5c52b-c982-4292-bb54-476de8985307, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,204,1e2,2,0,1,0,0,0,0},2c80afeb-2757-407f-a935-2d95b249b89b, {8,"РедакторОбъектаБД",0,4, {1,3, {"ru","Ячейка"}, {"en","Ячейка"}, {"uk","Ячейка"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,229,1e2,0,0,1,0,0,0,0},4c41e5e0-e216-4346-8ce4-f94f990db9aa, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,229,1e2,0,0,1,0,0,0,0},279d0c94-067c-46af-8d9b-e0e0949bc35f, {8,"АнализПравДоступа",0,2, {1,3, {"ru","Анализ прав доступа"}, {"en","Анализ прав доступа"}, {"uk","Анализ прав доступа"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,227,1e2,0,0,1,0,0,0,0},c94d9ac1-385c-41b0-9ca0-c29d2ed7b078, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,227,1e2,0,0,1,0,0,0,0},9e2b6e7f-506f-4b52-910b-b1a1d12d4aaa, {8,"ОткрытьОбъектМетаданных",0,3, {1,3, {"ru","Объект метаданных"}, {"en","Объект метаданных"}, {"uk","Объект метаданных"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,228,1e2,0,0,1,0,0,0,0},f7d57cb6-9f2a-41fb-ac31-6e4eb9bd83c2, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,228,1e2,0,0,1,0,0,0,0},413593b9-4283-433e-a7c7-96d617a15202, {8,"КонсольКомпоновки",0,1, {1,3, {"ru","Консоль компоновки"}, {"en","Консоль компоновки"}, {"uk","Консоль компоновки"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,205,1e2,0,0,1,0,0,0,0},965745f9-301b-4f5f-bd93-7fa5fc474872, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,205,1e2,0,0,1,0,0,0,0},3a801846-f4b2-4d9c-9ffe-24f13508a898, {8,"НастроитьРегистрациюСобытия",0,1, {1,3, {"ru","Настроить регистрацию события"}, {"en","Настроить регистрацию события"}, {"uk","Настроить регистрацию события"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,221,1e2,0,0,1,0,0,0,0},699062e5-a13f-458a-bb27-f987e6b8c4d2, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,221,1e2,0,0,1,0,0,0,0},163ac752-86e4-4800-90a4-6cb90f31cce4, {8,"Разделитель5",0,1, {1,1, {"ru","Действие7"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,223,1e2,2,0,1,0,0,0,0},685766ad-b3e6-4a89-ac7f-a1395e73cc2b, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,223,1e2,2,0,1,0,0,0,0},907614ed-dbf4-4f1c-b9aa-0943a7f06acd, {8,"НайтиВОтбореВыгрузки",0,1, {1,3, {"ru","В отбор выгрузки"}, @@ -3998,9 +3998,17 @@ kk61FZjh6f+fUIMKF23yD+7id3TyAw==},0},0,0,0,0,0,153}, {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,663c9b11-4673-4431-a2da-6ca05ee6e390,48,1,21, -{7,950bb328-c1f4-4fa4-972b-5642aa6c5719,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,492be611-0abd-44ed-9abe-de624a783729,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,7c6d7c68-17db-4cd2-b2ed-f4a7e33f6b85,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,f965f20e-28f9-4b32-9cce-438d01db6649,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,80, +{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, +{7,0de082e3-4750-4d85-8e44-8155ff5d4344,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,c6c9e5a3-6d92-40da-ba3e-b28eed052a15,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,83, +{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, +{7,6cdbd3a3-bef5-4a5a-bce5-e09eb3f5c9c5,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -4029,27 +4037,46 @@ kk61FZjh6f+fUIMKF23yD+7id3TyAw==},0},0,0,0,0,0,153}, }, {4,1, {-11},"",-1,-1,1,0,""},2}, -{7,5e6dc4e3-3d76-4233-a600-aaf069b27512,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,ed3b15cc-02c3-483e-bcbc-51cf8d289cbd,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,10148423-d513-4fae-9b3b-7f6b667514d0,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,83, -{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,e6f8a363-dd87-4885-b3b8-524eb633add6,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,bd2f3873-9e27-4b82-b3c6-acf91ead6fae,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,80, -{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,e736c98f-be74-43ed-af2c-145204b63b96,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,9f8674e6-a9e7-4d39-8aec-d34a654d4a97,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,052922e2-364d-4edd-a274-336d4b552cb3,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,8a1867ad-2a6c-462a-adea-0b2d1103b34e,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,94, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,f19063d2-d632-4547-9532-d4887a570987,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,f70d8a6d-2779-474e-aeed-0ecdcdfe3505,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,4995ab15-0ace-4561-9151-44a424ecc037,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Переместить вниз"}, +{"en","Переместить вниз"}, +{"uk","Переместить вниз"} +}, +{1,3, +{"ru","Переместить вниз"}, +{"en","Переместить вниз"}, +{"uk","Переместить вниз"} +}, +{4,1, +{-4},"",-1,-1,1,0,""},1}, +{7,dab55d15-b453-4ff6-b2df-3ab9a113732e,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,84, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,5836d9b5-6847-495e-a77b-6a881f5edb54,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,e75bf107-3c62-4fd4-8273-5c76b04b0af4,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -4079,42 +4106,15 @@ kk61FZjh6f+fUIMKF23yD+7id3TyAw==},0},0,0,0,0,0,153}, {4,1, {-3},"",-1,-1,1,0,""}, {0,0,0},1}, -{7,0535406a-65fe-4de3-a29b-4361108b4a47,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Переместить вниз"}, -{"en","Переместить вниз"}, -{"uk","Переместить вниз"} -}, -{1,3, -{"ru","Переместить вниз"}, -{"en","Переместить вниз"}, -{"uk","Переместить вниз"} -}, -{4,1, -{-4},"",-1,-1,1,0,""},1}, -{7,a15ea903-6856-4e53-a391-e5d81fd2da64,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,88, -{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,4471af7b-dd2f-45d3-8a01-1143dc685f45,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,748225ea-88ba-4109-9573-3e2aba236cc1,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,89, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,a6fdda6f-c327-4782-a449-004a4897e278,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,25248f6a-e392-4d08-b275-f2be609477ca,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,f05148f8-ce83-4146-a9d8-b9296c26f5ca,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,88, +{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, +{7,9f8fa741-9e9b-4f40-98e5-8489ec6de406,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -4150,7 +4150,7 @@ AR4RjghZaoUqtnQZaGuwBIZuFwOC6NLrBTgCAJBwACQBhmZAQBUsC1WBAXt0KoPN ZxRwxH4TBe9gS0YqNWHOuJxUFdLJdbr7PDS9UFJKeQOFTgaIiHwcjF6JB3QohRt5 BgxkEQA7} },0,""},2}, -{7,234d07b7-f7af-4c6d-a533-4d5de78b1168,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,9d63c84f-6f83-4450-809a-d0b8719337d9,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,663c9b11-4673-4431-a2da-6ca05ee6e390,31},7, {1,3, {"ru","Добавляет в отбор выгрузки отбор по значению текущей ячейки таблицы выгрузки"}, @@ -4164,7 +4164,7 @@ BgxkEQA7} }, {4,1, {0,ddb60315-2e8f-4080-928e-b8719adf31e3},"",-1,-1,0,0,""},2}, -{7,138565d5-b9d9-485c-ab27-29204c8e65a2,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,51680ac9-593b-4b11-8fbb-269cb964bf81,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,663c9b11-4673-4431-a2da-6ca05ee6e390,30},7, {1,3, {"ru","Добавляет в отбор выгрузки отбор без значения текущей ячейки таблицы выгрузки"}, @@ -4178,9 +4178,9 @@ BgxkEQA7} }, {4,1, {0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, -{7,62211511-32b3-4a72-ad09-72146ff06920,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,b7207729-edb0-42fc-b5c7-7531d8b21ff4,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,64ba2767-03fb-46d4-8b0d-0ebf9f827ea8,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,66a51837-8bea-4558-ad07-f1ab19d67e6d,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельОтборТекущийСеанс", {1,"КоманднаяПанельОтборТекущийСеанс", {1,1, @@ -4207,7 +4207,9 @@ BgxkEQA7} {"en","Добавить элемент отбора ""Сеанс = <Текущий сеанс>"""}, {"uk","Добавить элемент отбора ""Сеанс = <Текущий сеанс>"""} },2}, -{7,a80baefe-dfa8-4746-b06b-aeda14677d52,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,09f550d9-b5fd-425e-86be-fc05203b9c2c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,20ecb7f4-4177-46b5-bb0f-e6390b783c71,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельОтборАлгоритм", {1,"КоманднаяПанельОтборАлгоритм", {1,2, @@ -4238,100 +4240,98 @@ BgxkEQA7} {"uk","Алгоритм перед выполнением выгрузки"} }, {4,1, -{0,7a3cee33-d378-4621-b7dc-0275f6690e27},"",-1,-1,1,0,""},2}, -{7,1105b47e-8abb-41fb-a409-af1c134a4df1,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,21,950bb328-c1f4-4fa4-972b-5642aa6c5719, +{0,7a3cee33-d378-4621-b7dc-0275f6690e27},"",-1,-1,1,0,""},2},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,21,492be611-0abd-44ed-9abe-de624a783729, {8,"Разделитель5",0,2, {1,1, {"ru","Действие1"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,42,1e2,2,0,1,0,0,0,0},bd2f3873-9e27-4b82-b3c6-acf91ead6fae, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,42,1e2,2,0,1,0,0,0,0},f965f20e-28f9-4b32-9cce-438d01db6649, {8,"Действие",0,1, {1,1, {"#","Действие"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,12,1e2,0,3,1,0,1,0,0},e736c98f-be74-43ed-af2c-145204b63b96, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,12,1e2,0,3,1,0,1,0,0},0de082e3-4750-4d85-8e44-8155ff5d4344, {8,"Разделитель2",0,1, {1,1, {"ru","Действие1"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,23,1e2,2,0,1,0,0,0,0},10148423-d513-4fae-9b3b-7f6b667514d0, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,23,1e2,2,0,1,0,0,0,0},c6c9e5a3-6d92-40da-ba3e-b28eed052a15, {8,"Действие3",0,1, {1,1, {"#","Действие3"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,15,1e2,0,3,1,0,1,0,0},9f8674e6-a9e7-4d39-8aec-d34a654d4a97, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,15,1e2,0,3,1,0,1,0,0},ed3b15cc-02c3-483e-bcbc-51cf8d289cbd, {8,"Разделитель3",0,1, {1,1, {"ru","Действие1"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,24,1e2,2,0,1,0,0,0,0},7c6d7c68-17db-4cd2-b2ed-f4a7e33f6b85, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,24,1e2,2,0,1,0,0,0,0},6cdbd3a3-bef5-4a5a-bce5-e09eb3f5c9c5, {8,"СнятьФлажки",0,4, {1,3, {"ru","Снять пометки"}, {"en","Снять пометки"}, {"uk","Снять пометки"} -},1,663c9b11-4673-4431-a2da-6ca05ee6e390,41,1e2,0,0,1,0,0,0,0},f19063d2-d632-4547-9532-d4887a570987, +},1,663c9b11-4673-4431-a2da-6ca05ee6e390,41,1e2,0,0,1,0,0,0,0},dab55d15-b453-4ff6-b2df-3ab9a113732e, {8,"Действие2",0,1, {1,1, {"#","Действие2"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,14,1e2,0,0,1,0,1,0,0},052922e2-364d-4edd-a274-336d4b552cb3, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,14,1e2,0,0,1,0,1,0,0},8a1867ad-2a6c-462a-adea-0b2d1103b34e, {8,"Действие4",0,1, {1,1, {"#","Действие4"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,16,1e2,0,0,1,0,1,0,0},e6f8a363-dd87-4885-b3b8-524eb633add6, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,16,1e2,0,0,1,0,1,0,0},f70d8a6d-2779-474e-aeed-0ecdcdfe3505, {8,"Разделитель",0,1, -{1,0},0,663c9b11-4673-4431-a2da-6ca05ee6e390,17,1e2,2,0,1,0,1,0,0},5836d9b5-6847-495e-a77b-6a881f5edb54, +{1,0},0,663c9b11-4673-4431-a2da-6ca05ee6e390,17,1e2,2,0,1,0,1,0,0},e75bf107-3c62-4fd4-8273-5c76b04b0af4, {8,"ПереместитьВверх",0,2, {1,3, {"ru","Переместить вверх"}, {"en","Переместить вверх"}, {"uk","Переместить вверх"} -},1,663c9b11-4673-4431-a2da-6ca05ee6e390,43,1e2,0,0,1,0,1,0,0},0535406a-65fe-4de3-a29b-4361108b4a47, +},1,663c9b11-4673-4431-a2da-6ca05ee6e390,43,1e2,0,0,1,0,1,0,0},4995ab15-0ace-4561-9151-44a424ecc037, {8,"ПереместитьВниз",0,3, {1,3, {"ru","Переместить вниз"}, {"en","Переместить вниз"}, {"uk","Переместить вниз"} -},1,663c9b11-4673-4431-a2da-6ca05ee6e390,44,1e2,0,0,1,0,1,0,0},5e6dc4e3-3d76-4233-a600-aaf069b27512, +},1,663c9b11-4673-4431-a2da-6ca05ee6e390,44,1e2,0,0,1,0,1,0,0},25248f6a-e392-4d08-b275-f2be609477ca, {8,"Разделитель1",0,1, -{1,0},0,663c9b11-4673-4431-a2da-6ca05ee6e390,20,1e2,2,0,1,0,1,0,0},a15ea903-6856-4e53-a391-e5d81fd2da64, +{1,0},0,663c9b11-4673-4431-a2da-6ca05ee6e390,20,1e2,2,0,1,0,1,0,0},f05148f8-ce83-4146-a9d8-b9296c26f5ca, {8,"Действие7",0,1, {1,1, {"#","Действие7"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,21,1e2,0,0,1,0,1,0,0},4471af7b-dd2f-45d3-8a01-1143dc685f45, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,21,1e2,0,0,1,0,1,0,0},748225ea-88ba-4109-9573-3e2aba236cc1, {8,"Действие8",0,1, {1,1, {"#","Действие8"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,22,1e2,0,0,1,0,1,0,0},a6fdda6f-c327-4782-a449-004a4897e278, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,22,1e2,0,0,1,0,1,0,0},9f8fa741-9e9b-4f40-98e5-8489ec6de406, {8,"МенеджерТабличногоПоля",0,5, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,663c9b11-4673-4431-a2da-6ca05ee6e390,33,1e2,0,0,1,0,0,0,0},234d07b7-f7af-4c6d-a533-4d5de78b1168, +},1,663c9b11-4673-4431-a2da-6ca05ee6e390,33,1e2,0,0,1,0,0,0,0},9d63c84f-6f83-4450-809a-d0b8719337d9, {8,"ОтборПоЗначению",0,2, {1,3, {"ru","Отбор по значению"}, {"en","Отбор по значению"}, {"uk","Отбор по значению"} -},1,663c9b11-4673-4431-a2da-6ca05ee6e390,29,1e2,0,0,0,0,0,0,0},138565d5-b9d9-485c-ab27-29204c8e65a2, +},1,663c9b11-4673-4431-a2da-6ca05ee6e390,29,1e2,0,0,0,0,0,0,0},51680ac9-593b-4b11-8fbb-269cb964bf81, {8,"ОтборБезЗначенияВТекущейКолонке",0,5, {1,3, {"ru","Отбор без значения"}, {"en","Отбор без значения"}, {"uk","Отбор без значения"} -},1,663c9b11-4673-4431-a2da-6ca05ee6e390,28,1e2,0,0,0,0,0,0,0},62211511-32b3-4a72-ad09-72146ff06920, +},1,663c9b11-4673-4431-a2da-6ca05ee6e390,28,1e2,0,0,0,0,0,0,0},b7207729-edb0-42fc-b5c7-7531d8b21ff4, {8,"Разделитель6",0,2, {1,1, {"ru","Действие1"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,48,1e2,2,0,1,0,0,0,0},64ba2767-03fb-46d4-8b0d-0ebf9f827ea8, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,48,1e2,2,0,1,0,0,0,0},66a51837-8bea-4558-ad07-f1ab19d67e6d, {8,"ТекущийСеанс",0,1, {1,3, {"ru","Только текущий сеанс"}, {"en","Только текущий сеанс"}, {"uk","Только текущий сеанс"} -},1,663c9b11-4673-4431-a2da-6ca05ee6e390,32,1e2,0,0,1,0,0,0,0},1105b47e-8abb-41fb-a409-af1c134a4df1, +},1,663c9b11-4673-4431-a2da-6ca05ee6e390,32,1e2,0,0,1,0,0,0,0},09f550d9-b5fd-425e-86be-fc05203b9c2c, {8,"Разделитель4",0,1, {1,1, {"ru","Действие1"} -},0,663c9b11-4673-4431-a2da-6ca05ee6e390,36,1e2,2,0,1,0,0,0,0},a80baefe-dfa8-4746-b06b-aeda14677d52, +},0,663c9b11-4673-4431-a2da-6ca05ee6e390,36,1e2,2,0,1,0,0,0,0},20ecb7f4-4177-46b5-bb0f-e6390b783c71, {8,"Алгоритм",0,1, {1,3, {"ru","Алгоритм"}, @@ -4466,17 +4466,17 @@ BgxkEQA7} {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,6474377e-4a70-4401-b780-ee25e72a4a7f,160,1,5, -{7,49b02ce7-6b02-4c54-9494-e55dada955cd,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельСпискаУстановитьФлажки", -{1,"КоманднаяПанельСпискаУстановитьФлажки", +{7,50a7e0af-cb37-402e-854b-50c78edeea0b,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельСпискаСортироватьПоУбыванию", +{1,"КоманднаяПанельСпискаСортироватьПоУбыванию", {1,1, -{"ru","Установить флажки"} +{"ru","Сортировать по убыванию"} }, {1,1, -{"ru","Установить флажки"} +{"ru","Сортировать по убыванию"} }, {1,1, -{"ru","Установить флажки"} +{"ru","Сортировать по убыванию"} }, {4,0, {0},"",-1,-1,1,0,""}, @@ -4484,47 +4484,18 @@ BgxkEQA7} } },7, {1,3, -{"ru","Установить пометки на всех строках"}, -{"en","Установить пометки на всех строках"}, -{"uk","Установить пометки на всех строках"} +{"ru","Сортировать по убыванию"}, +{"en","Сортировать по убыванию"}, +{"uk","Сортировать по убыванию"} }, {1,3, -{"ru","Установить пометки на всех строках"}, -{"en","Установить пометки на всех строках"}, -{"uk","Установить пометки на всех строках"} +{"ru","Сортировать по убыванию"}, +{"en","Сортировать по убыванию"}, +{"uk","Сортировать по убыванию"} }, {4,1, -{-10},"",-1,-1,1,0,""},2}, -{7,46a3d003-fb0c-4932-bdec-d59fa1c1f5a9,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельСпискаРедактироватьЭлементОтбора", -{1,"КоманднаяПанельСпискаРедактироватьЭлементОтбора", -{1,1, -{"ru","Редактировать элемент отбора"} -}, -{1,1, -{"ru","Редактировать элемент отбора"} -}, -{1,1, -{"ru","Редактировать элемент отбора"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Выбрать значения в отдельном окне"}, -{"en","Выбрать значения в отдельном окне"}, -{"uk","Выбрать значения в отдельном окне"} -}, -{1,3, -{"ru","Выбрать значения в отдельном окне"}, -{"en","Выбрать значения в отдельном окне"}, -{"uk","Выбрать значения в отдельном окне"} -}, -{4,1, -{0,97b2cc97-d5c6-45fb-9824-9d6d73db21fe},"",-1,-1,1,0,""},2}, -{7,1b00e59b-3983-4cb1-8808-156a2374d7ca,1,e1692cc2-605b-4535-84dd-28440238746c, +{0,1fa32fdb-a180-418f-a6eb-db7516b7a30b},"",-1,-1,1,0,""},2}, +{7,9dd3c39f-092b-4791-be4a-46b67f138433,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельСпискаСнятьФлажки", {1,"КоманднаяПанельСпискаСнятьФлажки", {1,1, @@ -4553,7 +4524,36 @@ BgxkEQA7} }, {4,1, {-11},"",-1,-1,1,0,""},2}, -{7,63041e8e-14e6-4f2c-8d32-4b5fb0d89a0c,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,08ee7caf-1c4a-432b-96a0-696906bfcf05,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельСпискаУстановитьФлажки", +{1,"КоманднаяПанельСпискаУстановитьФлажки", +{1,1, +{"ru","Установить флажки"} +}, +{1,1, +{"ru","Установить флажки"} +}, +{1,1, +{"ru","Установить флажки"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Установить пометки на всех строках"}, +{"en","Установить пометки на всех строках"}, +{"uk","Установить пометки на всех строках"} +}, +{1,3, +{"ru","Установить пометки на всех строках"}, +{"en","Установить пометки на всех строках"}, +{"uk","Установить пометки на всех строках"} +}, +{4,1, +{-10},"",-1,-1,1,0,""},2}, +{7,bb16904b-c915-4ab5-989e-c1ed70902023,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельСпискаСортироватьПоВозрастанию", {1,"КоманднаяПанельСпискаСортироватьПоВозрастанию", {1,1, @@ -4582,17 +4582,17 @@ BgxkEQA7} }, {4,1, {0,91022b99-b610-48ad-954e-a297848081ce},"",-1,-1,1,0,""},2}, -{7,177f9209-f671-42e3-bc1d-144751513adf,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельСпискаСортироватьПоУбыванию", -{1,"КоманднаяПанельСпискаСортироватьПоУбыванию", +{7,5e9a5e46-1f12-4da8-9a13-7db53458cf4c,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельСпискаРедактироватьЭлементОтбора", +{1,"КоманднаяПанельСпискаРедактироватьЭлементОтбора", {1,1, -{"ru","Сортировать по убыванию"} +{"ru","Редактировать элемент отбора"} }, {1,1, -{"ru","Сортировать по убыванию"} +{"ru","Редактировать элемент отбора"} }, {1,1, -{"ru","Сортировать по убыванию"} +{"ru","Редактировать элемент отбора"} }, {4,0, {0},"",-1,-1,1,0,""}, @@ -4600,42 +4600,42 @@ BgxkEQA7} } },7, {1,3, -{"ru","Сортировать по убыванию"}, -{"en","Сортировать по убыванию"}, -{"uk","Сортировать по убыванию"} +{"ru","Выбрать значения в отдельном окне"}, +{"en","Выбрать значения в отдельном окне"}, +{"uk","Выбрать значения в отдельном окне"} }, {1,3, -{"ru","Сортировать по убыванию"}, -{"en","Сортировать по убыванию"}, -{"uk","Сортировать по убыванию"} +{"ru","Выбрать значения в отдельном окне"}, +{"en","Выбрать значения в отдельном окне"}, +{"uk","Выбрать значения в отдельном окне"} }, {4,1, -{0,1fa32fdb-a180-418f-a6eb-db7516b7a30b},"",-1,-1,1,0,""},2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,49b02ce7-6b02-4c54-9494-e55dada955cd, +{0,97b2cc97-d5c6-45fb-9824-9d6d73db21fe},"",-1,-1,1,0,""},2},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,08ee7caf-1c4a-432b-96a0-696906bfcf05, {8,"УстановитьФлажки",0,1, {1,3, {"ru","Установить пометки"}, {"en","Установить пометки"}, {"uk","Установить пометки"} -},1,6474377e-4a70-4401-b780-ee25e72a4a7f,154,1e2,0,0,1,0,0,0,0},1b00e59b-3983-4cb1-8808-156a2374d7ca, +},1,6474377e-4a70-4401-b780-ee25e72a4a7f,154,1e2,0,0,1,0,0,0,0},9dd3c39f-092b-4791-be4a-46b67f138433, {8,"СнятьФлажки",0,1, {1,3, {"ru","Снять пометки"}, {"en","Снять пометки"}, {"uk","Снять пометки"} -},1,6474377e-4a70-4401-b780-ee25e72a4a7f,153,1e2,0,0,1,0,0,0,0},63041e8e-14e6-4f2c-8d32-4b5fb0d89a0c, +},1,6474377e-4a70-4401-b780-ee25e72a4a7f,153,1e2,0,0,1,0,0,0,0},bb16904b-c915-4ab5-989e-c1ed70902023, {8,"СортироватьПоВозрастанию",0,1, {1,3, {"ru","По возрастанию"}, {"en","По возрастанию"}, {"uk","По возрастанию"} -},1,6474377e-4a70-4401-b780-ee25e72a4a7f,155,1e2,0,0,1,0,0,0,0},177f9209-f671-42e3-bc1d-144751513adf, +},1,6474377e-4a70-4401-b780-ee25e72a4a7f,155,1e2,0,0,1,0,0,0,0},50a7e0af-cb37-402e-854b-50c78edeea0b, {8,"СортироватьПоУбыванию",0,1, {1,3, {"ru","По убыванию"}, {"en","По убыванию"}, {"uk","По убыванию"} -},1,6474377e-4a70-4401-b780-ee25e72a4a7f,156,1e2,0,0,1,0,0,0,0},46a3d003-fb0c-4932-bdec-d59fa1c1f5a9, +},1,6474377e-4a70-4401-b780-ee25e72a4a7f,156,1e2,0,0,1,0,0,0,0},5e9a5e46-1f12-4da8-9a13-7db53458cf4c, {8,"РедактироватьЭлементОтбора",0,1, {1,3, {"ru","Выбрать значения"}, @@ -5247,7 +5247,7 @@ BgxkEQA7} {0} } } -},900,489,1,0,1,4,4,1064,900,489,96}, +},900,489,1,0,1,4,4,1111,900,489,96}, { {0},23, {3, diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form.bin b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form.bin index 10ded8572..adca3f541 100644 Binary files a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form.bin and b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form/Module.bsl index 29f7316a6..d3eba0921 100644 --- a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form/Module.bsl @@ -4,7 +4,7 @@ Если КлючУникальности = "Автотест" Тогда Возврат; КонецЕсли; - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); АктивизироватьПодробныеДанные = Ложь; Если НачальноеЗначениеВыбора <> Неопределено Тогда ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока = НачальноеЗначениеВыбора; @@ -52,9 +52,9 @@ ЗначениеПоля = СтрокаТаблицыЗначений[ирОбщий.ПоследнийФрагментЛкс(Элемент.Данные)]; Если ТипЗнч(ЗначениеПоля) = Тип("Строка") И ирКэш.ОбъектМДПоПолномуИмениЛкс(ЗначениеПоля) <> Неопределено Тогда СтандартнаяОбработка = Ложь; - ирОбщий.ОткрытьОбъектМетаданныхЛкс(ЗначениеПоля); + ирКлиент.ОткрытьОбъектМетаданныхЛкс(ЗначениеПоля); Иначе - ирОбщий.ОткрытьЗначениеЛкс(ЗначениеПоля, Ложь, СтандартнаяОбработка); + ирКлиент.ОткрытьЗначениеЛкс(ЗначениеПоля, Ложь, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры @@ -65,7 +65,7 @@ Если ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока = Неопределено Тогда Возврат; КонецЕсли; - Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирНастройкаЖурналаРегистрации.Форма"); + Форма = ирКлиент.ПолучитьФормуЛкс("Обработка.ирНастройкаЖурналаРегистрации.Форма"); Форма.Открыть(); лМетаданные = Неопределено; Если СтрокаТаблицыЗначений <> Неопределено Тогда @@ -77,20 +77,20 @@ Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры Процедура ИмяПользователяОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ирОбщий.ОткрытьПользователяИБЛкс(ЭлементыФормы.ТаблицаЖурнала.ТекущиеДанные.ИмяПользователя); + ирКлиент.ОткрытьПользователяИБЛкс(ЭлементыФормы.ТаблицаЖурнала.ТекущиеДанные.ИмяПользователя); КонецПроцедуры @@ -100,7 +100,7 @@ Если ПолноеИмяМД = Неопределено Тогда Возврат; КонецЕсли; - ФормаОтчета = ирОбщий.ПолучитьФормуЛкс("Отчет.ирАнализПравДоступа.Форма",,, ПолноеИмяМД); + ФормаОтчета = ирКлиент.ПолучитьФормуЛкс("Отчет.ирАнализПравДоступа.Форма",,, ПолноеИмяМД); ФормаОтчета.Пользователь = СтрокаТаблицыЗначений.ИмяПользователя; ФормаОтчета.ОбъектМетаданных = ПолноеИмяМД; ФормаОтчета.ПараметрКлючВарианта = "ПоПользователям"; @@ -110,13 +110,13 @@ Процедура ОбновлениеОтображения() - ирОбщий.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); + ирКлиент.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); КонецПроцедуры Процедура ПодробныеДанныеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки,,, Новый Структура("ПредставлениеЗначения", "Значение")); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки,,, Новый Структура("ПредставлениеЗначения", "Значение")); КонецПроцедуры @@ -126,38 +126,38 @@ Если ПолноеИмяМД = Неопределено Тогда Возврат; КонецЕсли; - ирОбщий.ОткрытьОбъектМетаданныхЛкс(ПолноеИмяМД); + ирКлиент.ОткрытьОбъектМетаданныхЛкс(ПолноеИмяМД); КонецПроцедуры Процедура КомментарийОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ирОбщий.ОткрытьТекстЛкс(Элемент.Значение,,,, СтрокаТаблицыЗначений.ПорядокСтроки); + ирКлиент.ОткрытьТекстЛкс(Элемент.Значение,,,, СтрокаТаблицыЗначений.ПорядокСтроки); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры @@ -165,5 +165,5 @@ КП_ДоступОткрытьОбъектМетаданных(); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализЖурналаРегистрации.Форма.ФормаСобытия"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализЖурналаРегистрации.Форма.ФормаСобытия"); ПодробныеДанные.Колонки.Добавить("Значение"); \ No newline at end of file diff --git a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form/form.txt b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form/form.txt index 5e9f7e863..edd20072f 100644 --- a/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализЖурналаРегистрации/Forms/ФормаСобытия/Ext/Form/form.txt @@ -4086,7 +4086,7 @@ {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,c4a681ba-1629-4c89-a75e-637c32907ec8,4,1,2, -{7,059cc69c-3135-42d1-9026-804a4a13ae86,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,c7695371-14e0-4005-ab78-b17163b22708,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_ДоступАнализПравДоступа", {1,"КП_ДоступАнализПравДоступа", {1,1, @@ -4116,7 +4116,7 @@ {4,1, {0,8ce6a6aa-80eb-4a9e-8b59-f98fd5c6bd40},"",-1,-1,1,0,""}, {0,0,0},2}, -{7,22205b70-e2e7-4f90-9027-3f0abe5f7395,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,e1747bdb-1abb-4b56-8728-3bfac5ee5608,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_ДоступОткрытьОбъектМетаданных", {1,"КП_ДоступОткрытьОбъектМетаданных", {1,1, @@ -4145,13 +4145,13 @@ }, {4,1, {0,3d510c6e-0d07-453c-af65-fb96ff26fd61},"",-1,-1,1,0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,2,059cc69c-3135-42d1-9026-804a4a13ae86, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,2,c7695371-14e0-4005-ab78-b17163b22708, {8,"АнализПравДоступа",0,1, {1,3, {"ru","Анализ прав доступа"}, {"en","Анализ прав доступа"}, {"uk","Анализ прав доступа"} -},1,c4a681ba-1629-4c89-a75e-637c32907ec8,1,1e2,0,0,1,0,0,0,0},22205b70-e2e7-4f90-9027-3f0abe5f7395, +},1,c4a681ba-1629-4c89-a75e-637c32907ec8,1,1e2,0,0,1,0,0,0,0},e1747bdb-1abb-4b56-8728-3bfac5ee5608, {8,"ОткрытьОбъектМетаданных",0,2, {1,3, {"ru","Объект метаданных"}, @@ -4196,7 +4196,7 @@ } } } -},450,527,1,0,1,4,4,205,450,527,96}, +},450,527,1,0,1,4,4,222,450,527,96}, { {23},29, {4, diff --git a/src/DataProcessors/ирАнализТехножурнала/Commands/Команда1/Ext/CommandModule.bsl b/src/DataProcessors/ирАнализТехножурнала/Commands/Команда1/Ext/CommandModule.bsl index 43f448886..4f79d81bc 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Commands/Команда1/Ext/CommandModule.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Commands/Команда1/Ext/CommandModule.bsl @@ -1,5 +1,5 @@  &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ирОбщий.ОткрытьФормуЛкс("Обработка.ирАнализТехножурнала.Форма"); + ирКлиент.ОткрытьФормуЛкс("Обработка.ирАнализТехножурнала.Форма"); КонецПроцедуры diff --git a/src/DataProcessors/ирАнализТехножурнала/Ext/ObjectModule.bsl b/src/DataProcessors/ирАнализТехножурнала/Ext/ObjectModule.bsl index 038aa6c00..305da6043 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Ext/ObjectModule.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Ext/ObjectModule.bsl @@ -2,7 +2,7 @@ //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; Перем мТаблицаКолонок Экспорт; Перем мСписокКолонок Экспорт; @@ -1547,7 +1547,9 @@ ЭтотОбъект.КонецПериодаКлиента = Неопределено; ИспользоватьТрассуСУБД = Истина И ирОбщий.ПараметрыСоединенияADOЭтойБДЛкс().СобиратьТрассу = Истина - И ирОбщий.ЛиПровайдерАДОДляЭтойБазыГотовЛкс() + #Если Клиент Тогда + И ирКлиент.ЛиПровайдерАДОДляЭтойБазыГотовЛкс() + #КонецЕсли И ЛиСерверMSSQLПоддерживаетТрассировку(); мИдентификаторТрассы = ПрефиксТрассы + "_" + СтрЗаменить(Новый УникальныйИдентификатор(), "-", ""); ЗаписатьМаркерВТехножурнал("НачалоТрассы_" + мИдентификаторТрассы,,, НачалоПериодаКлиента, НачалоПериодаСервера); @@ -1965,7 +1967,7 @@ ТекстБД = ПолучитьШаблонТекстаБД(ТекстБД, "%"); ТекстБД = СтрЗаменить(ТекстБД, Символы.ПС, "%"); ТекстБД = СтрЗаменить(ТекстБД, "%%", "%"); - ФормаНастройки = ирОбщий.ПолучитьФормуЛкс("Обработка.ирНастройкаТехножурнала.Форма"); + ФормаНастройки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирНастройкаТехножурнала.Форма"); ФормаНастройки.Открыть(); ФормаНастройки.НаСервере = Не ирКэш.Получить().ЭтоФайловаяБаза; ФормаНастройки.ПриИзмененииПравилаПолученияФайлаНастройки(); @@ -2612,7 +2614,7 @@ //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); -//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); +//ирПортативный ирКлиент = ирПортативный.ПолучитьОбщийМодульЛкс("ирКлиент"); мПлатформа = ирКэш.Получить(); ЭтотОбъект.КоличествоПотоков = 8; diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form.bin index 187217e1c..e13014038 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form/Module.bsl index 779d6e668..97e69f7c1 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form/Module.bsl @@ -8,7 +8,7 @@ Возврат; КонецЕсли; СтрокаСобытияБлокировки = ЭтаФорма.КлючУникальности; - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); ЭтаФорма.Заголовок = ЭтаФорма.Заголовок + " - " + Формат(СтрокаСобытияБлокировки.МоментВремени, "ЧГ="); ЭтаФорма.Инфобаза = СтрокаСобытияБлокировки.Инфобаза; ЭтаФорма.Соединение = СтрокаСобытияБлокировки.Соединение_; @@ -35,8 +35,8 @@ ОписаниеБлокировкиМета = ПолучитьОписаниеБлокировкиМета(СтрокаСобытияБлокировки); ЗагрузитьОбластиБлокировки(ОбластиБлокировки, СтрокаСобытияБлокировки.Locks, ОписаниеБлокировкиМета); ЭтаФорма.КоличествоЭлементов = ОбластиБлокировки.Количество(); - ирОбщий.ТабличноеПолеВставитьКолонкуНомерСтрокиЛкс(ЭлементыФормы.ОбластиБлокировки); - ирОбщий.ТабличноеПолеВставитьКолонкуНомерСтрокиЛкс(ЭлементыФормы.ОбластиБлокировкиБлокиратора); + ирКлиент.ТабличноеПолеВставитьКолонкуНомерСтрокиЛкс(ЭлементыФормы.ОбластиБлокировки); + ирКлиент.ТабличноеПолеВставитьКолонкуНомерСтрокиЛкс(ЭлементыФормы.ОбластиБлокировкиБлокиратора); КонецПроцедуры @@ -173,7 +173,7 @@ Процедура БлокировавшиеСоединенияПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); ВозможныеБлокираторы.Очистить(); Если Элемент.ТекущаяСтрока = Неопределено Тогда Возврат; @@ -315,7 +315,7 @@ Процедура ТаблицаЖурналаПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); Если Элемент.ТекущаяСтрока = Неопределено Тогда Возврат; КонецЕсли; @@ -350,7 +350,7 @@ Если Колонка.Имя = "Значение" Тогда СтандартнаяОбработка = Ложь; - ОткрытьЗначение(ВыбраннаяСтрока.Значение); + ирКлиент.ОткрытьЗначениеЛкс(ВыбраннаяСтрока.Значение); КонецЕсли; КонецПроцедуры @@ -369,74 +369,74 @@ Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры Процедура КоманднаяПанель1Сравнить(Кнопка) ВыводБезОформления = Ложь; - СравниваемыйДокумент1 = ирОбщий.ВывестиСтрокиТабличногоПоляСНастройкойЛкс(ЭтаФорма, ЭлементыФормы.ОбластиБлокировки, ВыводБезОформления); - СравниваемыйДокумент2 = ирОбщий.ВывестиСтрокиТабличногоПоляСНастройкойЛкс(ЭтаФорма, ЭлементыФормы.ОбластиБлокировкиБлокиратора, ВыводБезОформления); - ирОбщий.Сравнить2ЗначенияВФормеЛкс(СравниваемыйДокумент1, СравниваемыйДокумент2, , "Заблокированный", "Блокиратор",, Ложь); + СравниваемыйДокумент1 = ирКлиент.ВывестиСтрокиТабличногоПоляСНастройкойЛкс(ЭтаФорма, ЭлементыФормы.ОбластиБлокировки, ВыводБезОформления); + СравниваемыйДокумент2 = ирКлиент.ВывестиСтрокиТабличногоПоляСНастройкойЛкс(ЭтаФорма, ЭлементыФормы.ОбластиБлокировкиБлокиратора, ВыводБезОформления); + ирКлиент.Сравнить2ЗначенияВФормеЛкс(СравниваемыйДокумент1, СравниваемыйДокумент2, , "Заблокированный", "Блокиратор",, Ложь); КонецПроцедуры Процедура ОбластиБлокировкиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ОбластиБлокировкиБлокиратораПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ВозможныеБлокираторыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура БлокировавшиеСоединенияПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Блокировка1С"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Блокировка1С"); шИмя = "[" + мПлатформа.шБуква + "\d]+"; ШаблонПоля = "(" + шИмя + ")=(?:(\d+\:" + шИмя + ")|(-?\d+)|T""(\d+)""|(" + шИмя + ")|(""(?:(?:"""")*|[^""])*"")|(\[(?:(-?\d+)|T""(\d+)""|(\+))\:(?:(-?\d+)|T""(\d+)""|(\+))\]))"; ШаблонОбласти = "((?:\s+" + ШаблонПоля + ")+)\s*"; diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form/form.txt index 095910654..e7019406a 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/Блокировка1С/Ext/Form/form.txt @@ -5717,7 +5717,7 @@ {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,7d5e1400-daa1-4334-af18-f5722eda4e24,1,1,1, -{7,b0695020-69c6-48c1-a9dc-5de02c10e0dd,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,5099bca9-5077-42a3-9d2f-d525e6a73718,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанель1Сравнить", {1,"КоманднаяПанель1Сравнить", {1,1, @@ -5746,7 +5746,7 @@ }, {4,1, {0,8c325feb-0b3d-4094-aa2f-917b484044a5},"",-1,-1,0,0,""},2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,b0695020-69c6-48c1-a9dc-5de02c10e0dd, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,5099bca9-5077-42a3-9d2f-d525e6a73718, {8,"Сравнить",0,2, {1,3, {"ru","Сравнить"}, @@ -5789,7 +5789,7 @@ {0} } } -},840,513,1,0,1,4,4,533,840,513,96}, +},840,513,1,0,1,4,4,553,840,513,96}, { {0},40, {22, diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form.bin index 0499d7e5b..742f019b0 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form/Module.bsl index 893776304..5e94e23d2 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form/Module.bsl @@ -3,7 +3,7 @@ Если ВладелецФормы = Неопределено Тогда Возврат; КонецЕсли; - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); ТаблицаЖурнала = ВладелецФормы.ТаблицаЖурнала; СтрокаСобытияБлокировки = ЭтаФорма.КлючУникальности; Если СтрокаСобытияБлокировки = Неопределено Тогда @@ -117,7 +117,7 @@ Если ВладелецФормы.ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока <> ВыбраннаяСтрока Тогда Сообщить("Невозможно активизировать строку события в журнале при текущем отборе"); КонецЕсли; - ирОбщий.Форма_АктивироватьОткрытьЛкс(ВладелецФормы); + ирКлиент.Форма_АктивироватьОткрытьЛкс(ВладелецФормы); КонецЕсли; КонецПроцедуры @@ -177,14 +177,14 @@ Процедура ДеревоОжиданийПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); ОбновитьПанельТексты(); КонецПроцедуры Процедура КлсКомандаНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруФормыЛкс(ЭтаФорма); + ирКлиент.ОткрытьСтруктуруФормыЛкс(ЭтаФорма); КонецПроцедуры @@ -196,7 +196,7 @@ Процедура ДеревоОжиданийПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); Если ДанныеСтроки.Родитель = Неопределено Тогда Возврат; КонецЕсли; @@ -214,32 +214,32 @@ Процедура СравнитьТекстыНажатие(Элемент) - ирОбщий.Сравнить2ЗначенияВФормеЛкс(ЭлементыФормы.ТекстРодительскойСтроки.ПолучитьТекст(), ЭлементыФормы.ТекстВыбраннойСтроки.ПолучитьТекст(),, "Родительское", "Выбранное"); + ирКлиент.Сравнить2ЗначенияВФормеЛкс(ЭлементыФормы.ТекстРодительскойСтроки.ПолучитьТекст(), ЭлементыФормы.ТекстВыбраннойСтроки.ПолучитьТекст(),, "Родительское", "Выбранное"); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.БлокировкаСУБД"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.БлокировкаСУБД"); diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form/form.txt index 8d983d609..86bfe5edd 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/БлокировкаСУБД/Ext/Form/form.txt @@ -112,63 +112,7 @@ {0},4,1,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,be5c7501-4ba7-495e-bbd1-7f361221c78a,34,1,6, -{7,aa460664-66a5-4673-b030-11bcc572d1b9,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыСобытие", -{1,"ДействияФормыСобытие", -{1,1, -{"ru","Событие"} -}, -{1,1, -{"ru","Событие"} -}, -{1,1, -{"ru","Событие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},6, -{1,3, -{"ru","Открыть событие текущей строки"}, -{"en","Открыть событие текущей строки"}, -{"uk","Открыть событие текущей строки"} -}, -{1,3, -{"ru","Открыть событие текущей строки"}, -{"en","Открыть событие текущей строки"}, -{"uk","Открыть событие текущей строки"} -},1}, -{7,ee78523c-2080-4f5f-98ac-7f9c6c8f5fe5,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанель1НайтиВЖурнале", -{1,"КоманднаяПанель1НайтиВЖурнале", -{1,1, -{"ru","Найти в журнале"} -}, -{1,1, -{"ru","Найти в журнале"} -}, -{1,1, -{"ru","Найти в журнале"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Найти строку события в таблице журнала"}, -{"en","Найти строку события в таблице журнала"}, -{"uk","Найти строку события в таблице журнала"} -}, -{1,3, -{"ru","Найти строку события в таблице журнала"}, -{"en","Найти строку события в таблице журнала"}, -{"uk","Найти строку события в таблице журнала"} -}, -{4,1, -{0,c7cdd3c0-3879-436a-b145-5e2615e9b3e1},"",-1,-1,1,0,""},1}, -{7,15cac693-210a-4641-8dfc-e7da95b1bc76,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,8528cb43-861e-4b95-97bb-a65ea797ab83,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -197,11 +141,67 @@ }, {4,1, {0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1}, -{7,979e76b3-daf6-4f2d-a67d-ae078a095a54,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,765a51b3-2219-4631-ab48-ad6111f44603,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанель1НайтиВЖурнале", +{1,"КоманднаяПанель1НайтиВЖурнале", +{1,1, +{"ru","Найти в журнале"} +}, +{1,1, +{"ru","Найти в журнале"} +}, +{1,1, +{"ru","Найти в журнале"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Найти строку события в таблице журнала"}, +{"en","Найти строку события в таблице журнала"}, +{"uk","Найти строку события в таблице журнала"} +}, +{1,3, +{"ru","Найти строку события в таблице журнала"}, +{"en","Найти строку события в таблице журнала"}, +{"uk","Найти строку события в таблице журнала"} +}, +{4,1, +{0,c7cdd3c0-3879-436a-b145-5e2615e9b3e1},"",-1,-1,1,0,""},1}, +{7,345dd1af-8ed7-4f46-a97e-3ba41d7b05b0,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыСобытие", +{1,"ДействияФормыСобытие", +{1,1, +{"ru","Событие"} +}, +{1,1, +{"ru","Событие"} +}, +{1,1, +{"ru","Событие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},6, +{1,3, +{"ru","Открыть событие текущей строки"}, +{"en","Открыть событие текущей строки"}, +{"uk","Открыть событие текущей строки"} +}, +{1,3, +{"ru","Открыть событие текущей строки"}, +{"en","Открыть событие текущей строки"}, +{"uk","Открыть событие текущей строки"} +},1}, +{7,dfa204a7-2781-4b78-94e9-966f592985ac,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,d2e34f0d-384f-4518-8758-7ca3b7992b7f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,a0bd9645-649b-46f7-9965-4db2dc7b3304,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,2ee39fff-8b0f-46ec-b297-37f03edb8ed9,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,a68f0868-83ab-47ce-90f1-c2659c0120ff,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -237,33 +237,33 @@ AR4RjghZaoUqtnQZaGuwBIZuFwOC6NLrBTgCAJBwACQBhmZAQBUsC1WBAXt0KoPN ZxRwxH4TBe9gS0YqNWHOuJxUFdLJdbr7PDS9UFJKeQOFTgaIiHwcjF6JB3QohRt5 BgxkEQA7} },0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,6,ee78523c-2080-4f5f-98ac-7f9c6c8f5fe5, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,6,765a51b3-2219-4631-ab48-ad6111f44603, {8,"НайтиВЖурнале",0,2, {1,3, {"ru","Найти в журнале"}, {"en","Найти в журнале"}, {"uk","Найти в журнале"} -},1,be5c7501-4ba7-495e-bbd1-7f361221c78a,1,1e2,0,0,1,0,0,0,0},979e76b3-daf6-4f2d-a67d-ae078a095a54, +},1,be5c7501-4ba7-495e-bbd1-7f361221c78a,1,1e2,0,0,1,0,0,0,0},dfa204a7-2781-4b78-94e9-966f592985ac, {8,"Разделитель",0,1, {1,1, {"ru","Действие"} -},0,be5c7501-4ba7-495e-bbd1-7f361221c78a,31,1e2,2,0,1,0,0,0,0},aa460664-66a5-4673-b030-11bcc572d1b9, +},0,be5c7501-4ba7-495e-bbd1-7f361221c78a,31,1e2,2,0,1,0,0,0,0},345dd1af-8ed7-4f46-a97e-3ba41d7b05b0, {8,"Событие",0,1, {1,3, {"ru","Событие"}, {"en","Событие"}, {"uk","Событие"} -},1,be5c7501-4ba7-495e-bbd1-7f361221c78a,30,1e2,0,0,1,0,0,0,0},d2e34f0d-384f-4518-8758-7ca3b7992b7f, +},1,be5c7501-4ba7-495e-bbd1-7f361221c78a,30,1e2,0,0,1,0,0,0,0},a0bd9645-649b-46f7-9965-4db2dc7b3304, {8,"Разделитель1",0,1, {1,1, {"ru","Действие"} -},0,be5c7501-4ba7-495e-bbd1-7f361221c78a,32,1e2,2,0,1,0,0,0,0},2ee39fff-8b0f-46ec-b297-37f03edb8ed9, +},0,be5c7501-4ba7-495e-bbd1-7f361221c78a,32,1e2,2,0,1,0,0,0,0},a68f0868-83ab-47ce-90f1-c2659c0120ff, {8,"МенеджерТабличногоПоля",0,6, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,be5c7501-4ba7-495e-bbd1-7f361221c78a,33,1e2,0,0,1,0,0,0,0},15cac693-210a-4641-8dfc-e7da95b1bc76, +},1,be5c7501-4ba7-495e-bbd1-7f361221c78a,33,1e2,0,0,1,0,0,0,0},8528cb43-861e-4b95-97bb-a65ea797ab83, {8,"СтруктураФормы",0,6, {1,3, {"ru","Структура формы"}, @@ -1877,7 +1877,7 @@ BgxkEQA7} } } } -},1000,513,1,0,1,4,4,582,1000,513,96}, +},1000,513,1,0,1,4,4,593,1000,513,96}, { {0},42, {7, diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form.bin index a26e6e4d6..b0c2662bc 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form/Module.bsl index ac9748d10..f2ccd6ba2 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form/Module.bsl @@ -25,7 +25,7 @@ ////СоединениеADO = ПодключенияИис.ПолучитьСоединениеADOПоСсылкеИис(Инфобаза.ИнфобазаСУБД,, Ложь); //СоединениеADO = Новый COMОбъект("ADODB.Connection"); //ирОбщий.ОтладитьЛкс(СоединениеADO,, ТекстЗапроса); - ирОбщий.ОткрытьЗапросСУБДЛкс(ТекстЗапроса,, Параметры); + ирКлиент.ОткрытьЗапросСУБДЛкс(ТекстЗапроса,, Параметры); КонецЕсли; КонецПроцедуры @@ -85,8 +85,8 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); - ирОбщий.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма); ЭлементыФормы.Таблицы.Колонки.КоличествоСтрок.Видимость = Не ирКэш.ЛиФайловаяБазаЛкс(); ЭтоТекстSDBLПриИзменении(); ОбновитьЗапрос(); @@ -108,13 +108,13 @@ Процедура ПараметрыВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) Если Колонка = Элемент.Колонки.Значение И ЗначениеЗаполнено(ВыбраннаяСтрока.Метаданные) Тогда - ОткрытьЗначение(ВыбраннаяСтрока.Значение); + ирКлиент.ОткрытьЗначениеЛкс(ВыбраннаяСтрока.Значение); Иначе Если Ложь Или Не ЗначениеЗаполнено(ВыбраннаяСтрока.ЗначениеSDBL) - Или Не ирОбщий.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы.Результат, ВыбраннаяСтрока.ЗначениеSDBL, Истина) + Или Не ирКлиент.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы.Результат, ВыбраннаяСтрока.ЗначениеSDBL, Истина) Тогда - ирОбщий.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы.Результат, ВыбраннаяСтрока.Имя, Истина); + ирКлиент.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы.Результат, ВыбраннаяСтрока.Имя, Истина); КонецЕсли; КонецЕсли; @@ -122,7 +122,7 @@ Процедура ОбновлениеОтображения() - ирОбщий.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); + ирКлиент.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); КонецПроцедуры @@ -203,19 +203,19 @@ Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры Процедура ТаблицыПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); ТекущаяСтрокаТаблиц = ЭлементыФормы.Таблицы.ТекущаяСтрока; Индексы.Очистить(); Если ТекущаяСтрокаТаблиц = Неопределено Тогда @@ -277,15 +277,15 @@ Если ТекущаяСтрока = Неопределено Тогда Возврат; КонецЕсли; - Если Не ирОбщий.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы[ИмяСтраницы], ТекущаяСтрока.ИмяБД, Истина) Тогда - ирОбщий.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы[ИмяСтраницы], ТекущаяСтрока.ИмяМета, Истина); + Если Не ирКлиент.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы[ИмяСтраницы], ТекущаяСтрока.ИмяБД, Истина) Тогда + ирКлиент.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы[ИмяСтраницы], ТекущаяСтрока.ИмяМета, Истина); КонецЕсли; КонецПроцедуры Процедура СтруктураКоманднойПанелиНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); КонецПроцедуры @@ -316,73 +316,73 @@ КонецЕсли; Если Ложь Или Не ЗначениеЗаполнено(ТекущаяСтрока.ЗначениеSDBL) - Или Не ирОбщий.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы[ИмяСтраницы], ТекущаяСтрока.ЗначениеSDBL, Истина) + Или Не ирКлиент.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы[ИмяСтраницы], ТекущаяСтрока.ЗначениеSDBL, Истина) Тогда Если ВстраиватьПараметры Тогда СтрокаПоиска = ТекущаяСтрока.Значение; Иначе СтрокаПоиска = ТекущаяСтрока.Имя; КонецЕсли; - ирОбщий.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы[ИмяСтраницы], СтрокаПоиска, Истина); + ирКлиент.НайтиПоказатьСтрокуВПолеТекстаЛкс(ЭтаФорма, ЭлементыФормы[ИмяСтраницы], СтрокаПоиска, Истина); КонецЕсли; КонецПроцедуры Процедура ДействияФормыСравнить(Кнопка) - ирОбщий.ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(ЭтаФорма, ЭлементыФормы[ЭлементыФормы.ПанельОсновная.ТекущаяСтраница.Имя], "ЯзыкЗапросов"); + ирКлиент.ЗапомнитьСодержимоеЭлементаФормыДляСравненияЛкс(ЭтаФорма, ЭлементыФормы[ЭлементыФормы.ПанельОсновная.ТекущаяСтраница.Имя], "ЯзыкЗапросов"); КонецПроцедуры Процедура ДействияФормыПараметрыСУБД(Кнопка) - ирОбщий.ОткрытьФормуСоединенияСУБДЛкс(); + ирКлиент.ОткрытьФормуСоединенияСУБДЛкс(); КонецПроцедуры Процедура ПараметрыПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); КонецПроцедуры Процедура ПараметрыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ТаблицыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.КонверторТекстаСУБД"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.КонверторТекстаСУБД"); ПереводитьИндексы = Истина; ПереводитьВМета = Истина; ЭлементыФормы.ТипСУБД.СписокВыбора.Добавить("DBMSSQL"); diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form/form.txt index 0a263e31e..dd9dabb4b 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/КонверторТекстаСУБД/Ext/Form/form.txt @@ -117,9 +117,7 @@ {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,0,1, {5,92c33185-55a4-499b-9546-45afdf69b6ab,38,1,15, -{7,6e44185a-3fa1-49c0-92e0-62dca1611e40,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,6478dd1a-3f54-4161-9223-4db852771c3a,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,88a331fd-230e-4369-a25f-7829cff4a35d,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыВыполнить", {1,"ДействияФормыВыполнить", {1,1, @@ -146,69 +144,7 @@ {"en","Преобразовать текст БД"}, {"uk","Преобразовать текст БД"} },1}, -{7,112b3507-30bb-4889-b5d1-cc2fa3a0bb70,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"НастроитьТехножурналПоТексту", -{1,"НастроитьТехножурналПоТексту", -{1,1, -{"ru","Настроить техножурнал по тексту"} -}, -{1,1, -{"ru","Настроить техножурнал по тексту"} -}, -{1,1, -{"ru","Настроить техножурнал по тексту"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"}, -{"en","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"}, -{"uk","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"} -}, -{1,3, -{"ru","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"}, -{"en","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"}, -{"uk","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"} -}, -{4,1, -{0,97d5c5e9-7727-4d49-8c8d-495cd7d883bf},"",-1,-1,0,0,""},1}, -{7,acf7fce7-893d-4efe-b422-a72225a17740,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,33061d14-588a-490c-a6a3-e8170588d804,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,39560e8c-ac05-428b-ac42-4d8373ed92f6,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанель1КонсольЗапросов", -{1,"КоманднаяПанель1КонсольЗапросов", -{1,1, -{"ru","Консоль запросов"} -}, -{1,1, -{"ru","Консоль запросов"} -}, -{1,1, -{"ru","Консоль запросов"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть запрос в консоли запросов"}, -{"en","Открыть запрос в консоли запросов"}, -{"uk","Открыть запрос в консоли запросов"} -}, -{1,3, -{"ru","Открыть запрос в консоли запросов"}, -{"en","Открыть запрос в консоли запросов"}, -{"uk","Открыть запрос в консоли запросов"} -}, -{4,1, -{0,783a529d-ae98-4068-8486-88ba18a9bcc4},"",2,13,1,0,""},1}, -{7,5258bc96-8a98-453d-8f69-e800c031eed0,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,44f507f6-cef1-4089-a67d-664bd46df29f,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыСравнить", {1,"ДействияФормыСравнить", {1,1, @@ -237,7 +173,9 @@ }, {4,1, {0,8c325feb-0b3d-4094-aa2f-917b484044a5},"",-1,-1,0,0,""},1}, -{7,96bc099e-b42c-4471-8e08-0d58e2a716d9,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,798b964e-5adc-4623-887e-3ec418fe0e69,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,7bed475e-79f6-4c27-bd24-361be928a873,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыПараметрыСУБД", {1,"ДействияФормыПараметрыСУБД", {1,1, @@ -266,7 +204,102 @@ }, {4,0, {0},"",-1,-1,1,0,""},1}, -{7,3110bd7e-f23f-4c93-a952-f54806349f42,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,743ddbfe-c587-4626-878e-d88322df502c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,67920fa0-6974-40b7-9cdb-23353eded3f4,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанель1КонсольЗапросов", +{1,"КоманднаяПанель1КонсольЗапросов", +{1,1, +{"ru","Консоль запросов"} +}, +{1,1, +{"ru","Консоль запросов"} +}, +{1,1, +{"ru","Консоль запросов"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть запрос в консоли запросов"}, +{"en","Открыть запрос в консоли запросов"}, +{"uk","Открыть запрос в консоли запросов"} +}, +{1,3, +{"ru","Открыть запрос в консоли запросов"}, +{"en","Открыть запрос в консоли запросов"}, +{"uk","Открыть запрос в консоли запросов"} +}, +{4,1, +{0,783a529d-ae98-4068-8486-88ba18a9bcc4},"",2,13,1,0,""},1}, +{7,5926ace0-fc56-4b4d-adf1-ef8b0b3896da,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,90e8e658-b6fa-466d-a374-658f644fd49d,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,2b15cd72-5469-4841-9d97-4f9755d3769e,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"НастроитьТехножурналПоТексту", +{1,"НастроитьТехножурналПоТексту", +{1,1, +{"ru","Настроить техножурнал по тексту"} +}, +{1,1, +{"ru","Настроить техножурнал по тексту"} +}, +{1,1, +{"ru","Настроить техножурнал по тексту"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"}, +{"en","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"}, +{"uk","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"} +}, +{1,3, +{"ru","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"}, +{"en","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"}, +{"uk","Настроить техножурнал в инфобазе на регистрацию выполнения запроса с таким шаблоном"} +}, +{4,1, +{0,97d5c5e9-7727-4d49-8c8d-495cd7d883bf},"",-1,-1,0,0,""},1}, +{7,6de3175f-0c23-4615-af2f-d9bf48328a81,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"НайтиВТаблицеТехножурнала", +{1,"НайтиВТаблицеТехножурнала", +{1,1, +{"ru","Найти в таблице техножурнала"} +}, +{1,1, +{"ru","Найти в таблице техножурнала"} +}, +{1,1, +{"ru","Найти в таблице техножурнала"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Найти в таблице техножурнала"}, +{"en","Найти в таблице техножурнала"}, +{"uk","Найти в таблице техножурнала"} +}, +{1,3, +{"ru","Найти в таблице техножурнала"}, +{"en","Найти в таблице техножурнала"}, +{"uk","Найти в таблице техножурнала"} +}, +{4,1, +{0,c7cdd3c0-3879-436a-b145-5e2615e9b3e1},"",-1,-1,1,0,""},1}, +{7,f3b3c5e1-9a7f-4fcf-ac2a-6e688ffbf553,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,8ce0fbe8-ac2a-428d-a2f7-def8fe23cd15,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -296,40 +329,7 @@ {4,1, {0,23f940bf-7381-4c2b-85a1-e541ed428042},"",14,8,1,0,""}, {0,0,0},2}, -{7,80bf37fe-1312-4c1d-b1f6-a94cd8129d17,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,3ed86259-6162-406d-ae38-297ade07d438,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,3d76dcfd-039a-47e7-a670-98aadbbfa90e,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"НайтиВТаблицеТехножурнала", -{1,"НайтиВТаблицеТехножурнала", -{1,1, -{"ru","Найти в таблице техножурнала"} -}, -{1,1, -{"ru","Найти в таблице техножурнала"} -}, -{1,1, -{"ru","Найти в таблице техножурнала"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Найти в таблице техножурнала"}, -{"en","Найти в таблице техножурнала"}, -{"uk","Найти в таблице техножурнала"} -}, -{1,3, -{"ru","Найти в таблице техножурнала"}, -{"en","Найти в таблице техножурнала"}, -{"uk","Найти в таблице техножурнала"} -}, -{4,1, -{0,c7cdd3c0-3879-436a-b145-5e2615e9b3e1},"",-1,-1,1,0,""},1}, -{7,b65c71f6-c23f-4fdc-bdb2-bc451a4947d8,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,c6aa6be3-05cd-4a7c-8853-2cb7f749e2e0,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -358,36 +358,7 @@ }, {4,1, {0,a7707ed1-39b0-418f-974d-4d500d27a9c6},"",-1,-1,1,0,""},2}, -{7,108af6c5-1e9d-4025-9930-8d2ec101fa9c,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанель1НовоеОкно", -{1,"КоманднаяПанель1НовоеОкно", -{1,1, -{"ru","Новое окно"} -}, -{1,1, -{"ru","Новое окно"} -}, -{1,1, -{"ru","Новое окно"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть новое окно"}, -{"en","Открыть новое окно"}, -{"uk","Открыть новое окно"} -}, -{1,3, -{"ru","Открыть новое окно"}, -{"en","Открыть новое окно"}, -{"uk","Открыть новое окно"} -}, -{4,1, -{0,31324465-3215-4477-b5ac-5ec8be01ddcc},"",-1,-1,0,0,""},1}, -{7,6ac7afc5-b62c-4637-8652-e5e6179aafb4,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,8a58a146-4cc1-4907-8d9d-57c0c57b4658,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -415,82 +386,111 @@ {"uk","Показать структуру формы"} }, {4,1, -{0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,15,6478dd1a-3f54-4161-9223-4db852771c3a, +{0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1}, +{7,8503e311-282e-417e-83ed-3ae8773c78d3,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанель1НовоеОкно", +{1,"КоманднаяПанель1НовоеОкно", +{1,1, +{"ru","Новое окно"} +}, +{1,1, +{"ru","Новое окно"} +}, +{1,1, +{"ru","Новое окно"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть новое окно"}, +{"en","Открыть новое окно"}, +{"uk","Открыть новое окно"} +}, +{1,3, +{"ru","Открыть новое окно"}, +{"en","Открыть новое окно"}, +{"uk","Открыть новое окно"} +}, +{4,1, +{0,31324465-3215-4477-b5ac-5ec8be01ddcc},"",-1,-1,0,0,""},1},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,15,88a331fd-230e-4369-a25f-7829cff4a35d, {8,"Выполнить",0,1, {1,3, {"ru","Преобразовать"}, {"en","Преобразовать"}, {"uk","Преобразовать"} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,22,1e2,0,0,1,0,0,0,0},acf7fce7-893d-4efe-b422-a72225a17740, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,22,1e2,0,0,1,0,0,0,0},743ddbfe-c587-4626-878e-d88322df502c, {8,"Разделитель",0,1, {1,1, {"ru","Действие"} -},0,92c33185-55a4-499b-9546-45afdf69b6ab,23,1e2,2,0,1,0,0,0,0},39560e8c-ac05-428b-ac42-4d8373ed92f6, +},0,92c33185-55a4-499b-9546-45afdf69b6ab,23,1e2,2,0,1,0,0,0,0},67920fa0-6974-40b7-9cdb-23353eded3f4, {8,"КонсольЗапросов",0,1, {1,3, {"ru","Консоль запросов"}, {"en","Консоль запросов"}, {"uk","Консоль запросов"} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,16,1e2,0,3,1,0,0,0,0},33061d14-588a-490c-a6a3-e8170588d804, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,16,1e2,0,3,1,0,0,0,0},90e8e658-b6fa-466d-a374-658f644fd49d, {8,"Разделитель1",0,1, {1,1, {"ru","Действие"} -},0,92c33185-55a4-499b-9546-45afdf69b6ab,24,1e2,2,0,1,0,0,0,0},112b3507-30bb-4889-b5d1-cc2fa3a0bb70, +},0,92c33185-55a4-499b-9546-45afdf69b6ab,24,1e2,2,0,1,0,0,0,0},2b15cd72-5469-4841-9d97-4f9755d3769e, {8,"НастроитьТехножурналПоТексту",0,2, {1,3, {"ru","Настроить техножурнал по тексту..."}, {"en","Настроить техножурнал по тексту..."}, {"uk","Настроить техножурнал по тексту..."} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,25,1e2,0,3,1,0,0,0,0},80bf37fe-1312-4c1d-b1f6-a94cd8129d17, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,25,1e2,0,3,1,0,0,0,0},5926ace0-fc56-4b4d-adf1-ef8b0b3896da, {8,"Разделитель2",0,1, {1,1, {"ru","Действие"} -},0,92c33185-55a4-499b-9546-45afdf69b6ab,26,1e2,2,0,1,0,0,0,0},96bc099e-b42c-4471-8e08-0d58e2a716d9, +},0,92c33185-55a4-499b-9546-45afdf69b6ab,26,1e2,2,0,1,0,0,0,0},7bed475e-79f6-4c27-bd24-361be928a873, {8,"ПараметрыСУБД",0,3, {1,3, {"ru","СУБД"}, {"en","СУБД"}, {"uk","СУБД"} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,35,1e2,0,0,1,0,0,0,0},3ed86259-6162-406d-ae38-297ade07d438, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,35,1e2,0,0,1,0,0,0,0},798b964e-5adc-4623-887e-3ec418fe0e69, {8,"Разделитель4",0,3, {1,1, {"ru","Действие"} -},0,92c33185-55a4-499b-9546-45afdf69b6ab,36,1e2,2,0,1,0,0,0,0},5258bc96-8a98-453d-8f69-e800c031eed0, +},0,92c33185-55a4-499b-9546-45afdf69b6ab,36,1e2,2,0,1,0,0,0,0},44f507f6-cef1-4089-a67d-664bd46df29f, {8,"Сравнить",0,4, {1,3, {"ru","Сравнить"}, {"en","Сравнить"}, {"uk","Сравнить"} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,33,1e2,0,0,1,0,0,0,0},3d76dcfd-039a-47e7-a670-98aadbbfa90e, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,33,1e2,0,0,1,0,0,0,0},6de3175f-0c23-4615-af2f-d9bf48328a81, {8,"НайтиВТаблицеТехножурнала",0,1, {1,3, {"ru","Найти в техножурнале"}, {"en","Найти в техножурнале"}, {"uk","Найти в техножурнале"} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,28,1e2,0,0,1,0,0,0,0},6e44185a-3fa1-49c0-92e0-62dca1611e40, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,28,1e2,0,0,1,0,0,0,0},f3b3c5e1-9a7f-4fcf-ac2a-6e688ffbf553, {8,"Разделитель3",0,2, {1,1, {"ru","Действие"} -},0,92c33185-55a4-499b-9546-45afdf69b6ab,31,1e2,2,0,1,0,0,0,0},3110bd7e-f23f-4c93-a952-f54806349f42, +},0,92c33185-55a4-499b-9546-45afdf69b6ab,31,1e2,2,0,1,0,0,0,0},8ce0fbe8-ac2a-428d-a2f7-def8fe23cd15, {8,"СохранитьНастройку",0,11, {1,3, {"ru","Сохранить настройку..."}, {"en","Сохранить настройку..."}, {"uk","Сохранить настройку..."} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,37,1e2,0,0,1,0,0,0,0},b65c71f6-c23f-4fdc-bdb2-bc451a4947d8, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,37,1e2,0,0,1,0,0,0,0},c6aa6be3-05cd-4a7c-8853-2cb7f749e2e0, {8,"ЗагрузитьНастройку",0,6, {1,3, {"ru","Загрузить настройку..."}, {"en","Загрузить настройку..."}, {"uk","Загрузить настройку..."} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,38,1e2,0,0,1,0,1,0,0},6ac7afc5-b62c-4637-8652-e5e6179aafb4, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,38,1e2,0,0,1,0,1,0,0},8a58a146-4cc1-4907-8d9d-57c0c57b4658, {8,"СтруктураФормы",0,5, {1,3, {"ru","Структура формы"}, {"en","Структура формы"}, {"uk","Структура формы"} -},1,92c33185-55a4-499b-9546-45afdf69b6ab,32,1e2,0,0,1,0,0,0,0},108af6c5-1e9d-4025-9930-8d2ec101fa9c, +},1,92c33185-55a4-499b-9546-45afdf69b6ab,32,1e2,0,0,1,0,0,0,0},8503e311-282e-417e-83ed-3ae8773c78d3, {8,"НовоеОкно",0,10, {1,3, {"ru","НовоеОкно"}, @@ -501,7 +501,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,902bd65f-ba85-4d3e-8174-abccc33c3379,22,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,471e36ca-df4c-4069-91e3-a0349e6019e9,22,0,0} }, {8,0,0,1000,25,1, {0, @@ -2119,7 +2119,36 @@ {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,220e24e2-70de-4c3c-ba0b-20769a464f3f,2,1,2, -{7,d4a9e118-8f0a-4b18-8277-bc328763b99a,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,8d83603e-ed18-4d27-bc51-2a65ae48efd2,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанель1ПоказатьСтруктуруХранения", +{1,"КоманднаяПанель1ПоказатьСтруктуруХранения", +{1,1, +{"ru","Показать структуру хранения"} +}, +{1,1, +{"ru","Показать структуру хранения"} +}, +{1,1, +{"ru","Показать структуру хранения"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Показать структуру хранения"}, +{"en","Показать структуру хранения"}, +{"uk","Показать структуру хранения"} +}, +{1,3, +{"ru","Показать структуру хранения"}, +{"en","Показать структуру хранения"}, +{"uk","Показать структуру хранения"} +}, +{4,1, +{0,1a4ef299-3528-4f60-8c96-875fd7e32694},"",-1,-1,1,0,""},2}, +{7,282a5b41-9bcc-497e-9ce7-4f46b6f5b5db,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КонтекстноеМенюТаблицНайтиВТексте", {1,"КонтекстноеМенюТаблицНайтиВТексте", {1,1, @@ -2148,43 +2177,14 @@ }, {4,1, {0,ffab30f1-da11-44b5-b34c-24da22badcf4},"",-1,-1,1,0,""}, -{0,118,0},2}, -{7,46a803a0-f1a0-43b0-9cc2-c82802a9d167,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанель1ПоказатьСтруктуруХранения", -{1,"КоманднаяПанель1ПоказатьСтруктуруХранения", -{1,1, -{"ru","Показать структуру хранения"} -}, -{1,1, -{"ru","Показать структуру хранения"} -}, -{1,1, -{"ru","Показать структуру хранения"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Показать структуру хранения"}, -{"en","Показать структуру хранения"}, -{"uk","Показать структуру хранения"} -}, -{1,3, -{"ru","Показать структуру хранения"}, -{"en","Показать структуру хранения"}, -{"uk","Показать структуру хранения"} -}, -{4,1, -{0,1a4ef299-3528-4f60-8c96-875fd7e32694},"",-1,-1,1,0,""},2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,2,46a803a0-f1a0-43b0-9cc2-c82802a9d167, +{0,118,0},2},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,2,8d83603e-ed18-4d27-bc51-2a65ae48efd2, {8,"ПоказатьСтруктуруХранения",0,2, {1,3, {"ru","Показать структуру хранения"}, {"en","Показать структуру хранения"}, {"uk","Показать структуру хранения"} -},1,220e24e2-70de-4c3c-ba0b-20769a464f3f,1,1e2,0,0,1,0,0,0,0},d4a9e118-8f0a-4b18-8277-bc328763b99a, +},1,220e24e2-70de-4c3c-ba0b-20769a464f3f,1,1e2,0,0,1,0,0,0,0},282a5b41-9bcc-497e-9ce7-4f46b6f5b5db, {8,"НайтиВТексте",0,1, {1,3, {"ru","Найти в тексте"}, @@ -2256,7 +2256,7 @@ {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,220e24e2-70de-4c3c-ba0b-20769a464f3f,2,1,1, -{7,fa7a2b8e-b97f-428b-951a-f4306cf2e03d,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,0901f484-7db1-468d-a732-b03217e3a3fc,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КонтекстноеМенюКонстантаНайтиВТексте", {1,"КонтекстноеМенюКонстантаНайтиВТексте", {1,1, @@ -2286,7 +2286,7 @@ {4,1, {0,ffab30f1-da11-44b5-b34c-24da22badcf4},"",-1,-1,1,0,""}, {0,119,0},2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,fa7a2b8e-b97f-428b-951a-f4306cf2e03d, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,0901f484-7db1-468d-a732-b03217e3a3fc, {8,"НайтиВТексте",0,1, {1,3, {"ru","Найти в тексте"}, @@ -3134,7 +3134,7 @@ {0} } } -},1000,482,1,0,1,4,4,345,1000,482,96}, +},1000,482,1,0,1,4,4,371,1000,482,96}, { {0},17, {12, diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form.bin index e9c8ba945..f9229ec71 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form/Module.bsl index 8ff861adf..82279b372 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form/Module.bsl @@ -18,7 +18,7 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); ЭтаФорма.АвтоочисткаТехножурнала = ирОбщий.ВосстановитьЗначениеЛкс("ирАнализТехножурнала.АвтоочисткаТехножурнала"); ЭтаФорма.ВыраниватьДатуПоСерверу = ирОбщий.ВосстановитьЗначениеЛкс("ирАнализТехножурнала.ВыраниватьДатуПоСерверу"); ЭтаФорма.КаталогЖурналаСервера = ирОбщий.ВосстановитьЗначениеЛкс("ирАнализТехножурнала.КаталогЖурналаСервера"); @@ -29,25 +29,25 @@ Если Не ЭлементыФормы.КаталогЖурналаСервера.Доступность Тогда ЭтаФорма.КаталогЖурналаСервера = ""; КонецЕсли; - ирОбщий.НастроитьПоляВводаПараметровПотоковЛкс(ЭтаФорма, Ложь); + ирКлиент.НастроитьПоляВводаПараметровПотоковЛкс(ЭтаФорма, Ложь); КонецПроцедуры Процедура КаталогЖурналаТрассыПриИзменении(Элемент) - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура КаталогЖурналаТрассыНачалоВыбора(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеФайловогоКаталога_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка); + ирКлиент.ПолеФайловогоКаталога_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка); КонецПроцедуры Процедура КаталогЖурналаТрассыНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры @@ -60,19 +60,19 @@ Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры @@ -81,4 +81,4 @@ Элемент.Значение = 1; КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.НастройкаЧтения"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.НастройкаЧтения"); diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form/form.txt index 75ebaefc3..ef2a102d2 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/НастройкаЧтения/Ext/Form/form.txt @@ -52,7 +52,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},0,1, {1,1, -{4, +{5, {1,3, {"ru","Страница1"}, {"en","Страница1"}, @@ -70,7 +70,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,4, {2,8,1,1,1,0,0,0,0}, @@ -113,7 +114,9 @@ {0},7,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,2,0,1, {5,3913ba8b-05f4-4231-a8e7-7ba48d5c3777,3,1,3, -{7,087fee43-cd9f-46ab-a448-3c42c4927557,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,db50ff2f-8bda-4d7b-a36a-01817a416b87,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,0aa408cf-8fa5-41fd-bc4e-cc11f4fc1f36,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КнопкаВыполнитьНажатие", {1,"КнопкаВыполнитьНажатие", {1,1, @@ -132,20 +135,18 @@ },6, {1,0}, {1,0},1}, -{7,76ad8539-80e9-43aa-9bf6-e49b11821d83,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,69e56828-05fb-4965-b572-4880f88eb653,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,f1486476-4ed6-4d04-8d16-5def21814631,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,1,00000000-0000-0000-0000-000000000000,142, {1,0,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,3,087fee43-cd9f-46ab-a448-3c42c4927557, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,3,0aa408cf-8fa5-41fd-bc4e-cc11f4fc1f36, {8,"ОсновныеДействияФормыОК",0,1, {1,3, {"ru"," ОК "}, {"en"," ОК "}, {"uk"," ОК "} -},1,3913ba8b-05f4-4231-a8e7-7ba48d5c3777,1,1e2,0,1,1,0,1,0,0},76ad8539-80e9-43aa-9bf6-e49b11821d83, +},1,3913ba8b-05f4-4231-a8e7-7ba48d5c3777,1,1e2,0,1,1,0,1,0,0},db50ff2f-8bda-4d7b-a36a-01817a416b87, {8,"Разделитель",0,1, -{1,0},0,3913ba8b-05f4-4231-a8e7-7ba48d5c3777,2,1e2,2,1,1,0,1,0,0},69e56828-05fb-4965-b572-4880f88eb653, +{1,0},0,3913ba8b-05f4-4231-a8e7-7ba48d5c3777,2,1e2,2,1,1,0,1,0,0},f1486476-4ed6-4d04-8d16-5def21814631, {8,"ОсновныеДействияФормыЗакрыть",0,1, {1,3, {"ru","Закрыть"}, @@ -156,7 +157,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1eb591ee-a89a-4efb-a47f-d3c27012ff19,1,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,b30c36c8-b706-4e69-95f8-f48ceba574a5,1,0,0} }, {8,0,319,469,344,1, {0, @@ -1551,7 +1552,7 @@ {0} } } -},469,344,1,0,1,4,4,123,469,344,96}, +},469,344,1,0,1,4,4,134,469,344,96}, { {1},12, {8, diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form.bin index 596a49521..293baf338 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form/Module.bsl index 1c8ff260e..224f76662 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form/Module.bsl @@ -3,7 +3,7 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); мСловарьПланаЗапроса = ирОбщий.ТаблицаЗначенийИзТабличногоДокументаЛкс(ОбработкаОбъект.ПолучитьМакет("ОперацииПланаЗапросаMSSQL"),,,, Истина); #Если Сервер И Не Сервер Тогда мСловарьПланаЗапроса = Новый ТаблицаЗначений; @@ -77,7 +77,7 @@ НомерОперации = НомерОперации + 1; КонецЦикла; РасчитатьСтоимостьОпераций(ДеревоПлана.Строки); - ирОбщий.ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(ЭлементыФормы.ДеревоПлана); + ирКлиент.ТабличноеПолеДеревоЗначений_РазвернутьВсеСтрокиЛкс(ЭлементыФормы.ДеревоПлана); ВсеСтрокиДерева = ирОбщий.ВсеСтрокиДереваЗначенийЛкс(ДеревоПлана); ОператорыПланаЗапроса.Очистить(); Если ДеревоПлана.Строки.Количество() > 0 Тогда @@ -131,7 +131,7 @@ Процедура ДеревоПланаПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); СтрокаСловаря = мСловарьПланаЗапроса.Найти(ДанныеСтроки.ОператорАнгл, "Ключ"); Если ТипЗнч(СтрокаСловаря.Картинка) = Тип("Картинка") Тогда ОформлениеСтроки.Ячейки.Инструкция.УстановитьКартинку(СтрокаСловаря.Картинка); @@ -139,13 +139,13 @@ Если ДанныеСтроки.НомерОперации = мНомерСамойТяжелойОперации Тогда ОформлениеСтроки.ЦветФона = ирОбщий.ПолучитьЦветСтиляЛкс("ирЦветФонаОшибки"); КонецЕсли; - //ирОбщий.ОформитьФонТекущейСтрокиЛкс(Элемент, ОформлениеСтроки, ДанныеСтроки); + //ирКлиент.ОформитьФонТекущейСтрокиЛкс(Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ДеревоПланаПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); Если Элемент.ТекущаяСтрока = Неопределено Тогда ЭтаФорма.ОписаниеОперации = ""; ЭтаФорма.Инструкция = ""; @@ -159,43 +159,43 @@ Процедура ОбновлениеОтображения() - ирОбщий.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); + ирКлиент.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура КоманднаяПанель1УстановитьИзТекста(Кнопка) - ФормаТекста = ирОбщий.ПолучитьФормуТекстаЛкс("", "Вставьте текст плана запроса", "Обычный",,, ЭтаФорма); + ФормаТекста = ирКлиент.ПолучитьФормуТекстаЛкс("", "Вставьте текст плана запроса", "Обычный",,, ЭтаФорма); РезультатФормы = ФормаТекста.ОткрытьМодально(); Если РезультатФормы <> Неопределено Тогда ЭтаФорма.Текст = РезультатФормы; @@ -210,4 +210,4 @@ КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.ПланЗапросаMSSQL"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.ПланЗапросаMSSQL"); diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form/form.txt index a11f18e2d..47173efb6 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/ПланЗапросаMSSQL/Ext/Form/form.txt @@ -51,7 +51,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},0,1, {1,1, -{4, +{5, {1,3, {"ru","Страница1"}, {"en","Страница1"}, @@ -69,7 +69,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,4, {2,8,1,1,1,0,0,0,0}, @@ -112,7 +113,7 @@ {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,679b7529-259f-44a4-be64-61d75c5004f5,48,1,8, -{7,58ae4d33-e480-4694-87e7-5254b666bd56,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,56f41870-4b11-45d3-aefa-33fcfd40fba0,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -142,10 +143,30 @@ {4,1, {-3},"",-1,-1,1,0,""}, {0,0,0},1}, -{7,a17d085d-89f3-45c6-8a9e-248d79833ff7,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,0,00000000-0000-0000-0000-000000000000,89, -{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, -{7,dae760b5-101b-40eb-9780-dd00f2af8b97,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,42a45d6c-5589-4524-967d-ce108158a012,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанель1УстановитьИзТекста", +{1,"КоманднаяПанель1УстановитьИзТекста", +{1,3, +{"ru","Установить из текста"}, +{"en","Установить из текста"}, +{"uk","Установить из текста"} +}, +{1,3, +{"ru","Установить из текста"}, +{"en","Установить из текста"}, +{"uk","Установить из текста"} +}, +{1,3, +{"ru","Установить из текста"}, +{"en","Установить из текста"}, +{"uk","Установить из текста"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},0,1}, +{7,0bbe4b14-ee1e-4216-9f7a-eea88d001ba8,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -174,12 +195,17 @@ }, {4,1, {-4},"",-1,-1,1,0,""},1}, -{7,07c65f1e-b251-47ae-bd3d-7df3a7c545d0,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,c5a1973f-8e79-47f1-8792-734fb5fc26ac,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,0,00000000-0000-0000-0000-000000000000,88, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, -{7,da55a8f1-ba84-4df3-99e8-654d3c09cb4f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,4fcc7842-c581-4663-9201-ea8cb6e1a47c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,50190e58-69b2-4d55-99d7-ae395c909a48,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,dd3a1b02-3f14-4000-868f-b44c0bed6d46,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,0,00000000-0000-0000-0000-000000000000,89, +{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, +{7,a1e31fa3-cd59-4ace-94f7-2936c717fe10,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,4da705e1-8ca6-43fc-be8a-76c214296d50,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанель1ОткрытьОписаниеМеханизма", {1,"КоманднаяПанель1ОткрытьОписаниеМеханизма", {1,3, @@ -211,63 +237,38 @@ {"ru","Открыть описание механизма планов запросов"}, {"en","Открыть описание механизма планов запросов"}, {"uk","Открыть описание механизма планов запросов"} -},1}, -{7,1c8b9148-bcb7-4fbb-8696-f4bdd94e6a5d,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанель1УстановитьИзТекста", -{1,"КоманднаяПанель1УстановитьИзТекста", -{1,3, -{"ru","Установить из текста"}, -{"en","Установить из текста"}, -{"uk","Установить из текста"} -}, -{1,3, -{"ru","Установить из текста"}, -{"en","Установить из текста"}, -{"uk","Установить из текста"} -}, -{1,3, -{"ru","Установить из текста"}, -{"en","Установить из текста"}, -{"uk","Установить из текста"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},0,1}, -{7,53a73427-a4ee-427c-84c0-ddde189fa731,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,8,58ae4d33-e480-4694-87e7-5254b666bd56, +},1},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,8,56f41870-4b11-45d3-aefa-33fcfd40fba0, {8,"ПереместитьВверх",0,3, {1,3, {"ru","Переместить вверх"}, {"en","Переместить вверх"}, {"uk","Переместить вверх"} -},1,679b7529-259f-44a4-be64-61d75c5004f5,44,1e2,0,0,1,0,1,0,0},dae760b5-101b-40eb-9780-dd00f2af8b97, +},1,679b7529-259f-44a4-be64-61d75c5004f5,44,1e2,0,0,1,0,1,0,0},0bbe4b14-ee1e-4216-9f7a-eea88d001ba8, {8,"ПереместитьВниз",0,4, {1,3, {"ru","Переместить вниз"}, {"en","Переместить вниз"}, {"uk","Переместить вниз"} -},1,679b7529-259f-44a4-be64-61d75c5004f5,45,1e2,0,0,1,0,1,0,0},07c65f1e-b251-47ae-bd3d-7df3a7c545d0, +},1,679b7529-259f-44a4-be64-61d75c5004f5,45,1e2,0,0,1,0,1,0,0},c5a1973f-8e79-47f1-8792-734fb5fc26ac, {8,"Действие4",0,1, {1,1, {"#","Действие4"} -},0,679b7529-259f-44a4-be64-61d75c5004f5,38,1e2,0,0,1,0,1,0,0},a17d085d-89f3-45c6-8a9e-248d79833ff7, +},0,679b7529-259f-44a4-be64-61d75c5004f5,38,1e2,0,0,1,0,1,0,0},dd3a1b02-3f14-4000-868f-b44c0bed6d46, {8,"Действие5",0,1, {1,1, {"#","Действие5"} -},0,679b7529-259f-44a4-be64-61d75c5004f5,39,1e2,0,0,1,0,1,0,0},da55a8f1-ba84-4df3-99e8-654d3c09cb4f, +},0,679b7529-259f-44a4-be64-61d75c5004f5,39,1e2,0,0,1,0,1,0,0},a1e31fa3-cd59-4ace-94f7-2936c717fe10, {8,"Разделитель2",0,1, -{1,0},0,679b7529-259f-44a4-be64-61d75c5004f5,40,1e2,2,0,1,0,1,0,0},1c8b9148-bcb7-4fbb-8696-f4bdd94e6a5d, +{1,0},0,679b7529-259f-44a4-be64-61d75c5004f5,40,1e2,2,0,1,0,1,0,0},42a45d6c-5589-4524-967d-ce108158a012, {8,"УстановитьИзТекста",0,1, {1,3, {"ru","Установить"}, {"en","Установить"}, {"uk","Установить"} -},1,679b7529-259f-44a4-be64-61d75c5004f5,46,1e2,0,0,1,0,0,0,0},53a73427-a4ee-427c-84c0-ddde189fa731, +},1,679b7529-259f-44a4-be64-61d75c5004f5,46,1e2,0,0,1,0,0,0,0},4fcc7842-c581-4663-9201-ea8cb6e1a47c, {8,"Разделитель",0,2, -{1,0},0,679b7529-259f-44a4-be64-61d75c5004f5,48,1e2,2,0,1,0,1,0,0},50190e58-69b2-4d55-99d7-ae395c909a48, +{1,0},0,679b7529-259f-44a4-be64-61d75c5004f5,48,1e2,2,0,1,0,1,0,0},4da705e1-8ca6-43fc-be8a-76c214296d50, {8,"ОткрытьОписаниеМеханизма",0,1, {1,3, {"ru","Описание механизма"}, @@ -724,7 +725,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},1,1, {1,2, -{4, +{5, {1,3, {"ru","Дерево"}, {"en","Дерево"}, @@ -742,9 +743,10 @@ }, {3,4, {0} -} }, -{4, +{7,3,0,1,100} +}, +{5, {1,3, {"ru","Таблица"}, {"en","Таблица"}, @@ -762,7 +764,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,8, {2,6,1,1,1,0,0,0,0}, @@ -2547,16 +2550,13 @@ {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,76fdf041-568e-4dae-ba08-5fcdeb9f1972,13,1,5, -{7,ce2d847d-8b38-4d7a-a5c9-20e55aa90aa5,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,73d89490-6518-482c-96c7-8e864b32e2bd,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,88, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,29c05e2b-6f4f-446a-a5fc-0ef3e528d8ec,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,b26ec86b-5089-4634-b14c-76c3228bbda5,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,89, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,9c78b06e-b0cb-4349-9dcb-f4186e4f1023,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,91, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,618e4a3e-9138-4b56-b0fe-5c40d68e5183,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,39444c4f-8c06-458f-a08a-dbbd2a30b16f,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -2592,28 +2592,31 @@ AR4RjghZaoUqtnQZaGuwBIZuFwOC6NLrBTgCAJBwACQBhmZAQBUsC1WBAXt0KoPN ZxRwxH4TBe9gS0YqNWHOuJxUFdLJdbr7PDS9UFJKeQOFTgaIiHwcjF6JB3QohRt5 BgxkEQA7} },0,""},2}, -{7,3c81330c-ca29-47e8-bb29-136b0915472c,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,aa3bbaee-2e3a-4172-8c8c-46b672f23761,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,93, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, +{7,6ceaa386-4f8a-4ece-8022-0fd5e0008a43,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,91, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,ce2d847d-8b38-4d7a-a5c9-20e55aa90aa5, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,73d89490-6518-482c-96c7-8e864b32e2bd, {8,"Действие7",0,1, {1,1, {"#","Действие7"} -},0,76fdf041-568e-4dae-ba08-5fcdeb9f1972,8,1e2,0,0,1,0,1,0,0},29c05e2b-6f4f-446a-a5fc-0ef3e528d8ec, +},0,76fdf041-568e-4dae-ba08-5fcdeb9f1972,8,1e2,0,0,1,0,1,0,0},b26ec86b-5089-4634-b14c-76c3228bbda5, {8,"Действие8",0,1, {1,1, {"#","Действие8"} -},0,76fdf041-568e-4dae-ba08-5fcdeb9f1972,9,1e2,0,0,1,0,1,0,0},618e4a3e-9138-4b56-b0fe-5c40d68e5183, +},0,76fdf041-568e-4dae-ba08-5fcdeb9f1972,9,1e2,0,0,1,0,1,0,0},39444c4f-8c06-458f-a08a-dbbd2a30b16f, {8,"МенеджерТабличногоПоля",0,5, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,76fdf041-568e-4dae-ba08-5fcdeb9f1972,13,1e2,0,0,1,0,0,0,0},9c78b06e-b0cb-4349-9dcb-f4186e4f1023, +},1,76fdf041-568e-4dae-ba08-5fcdeb9f1972,13,1e2,0,0,1,0,0,0,0},6ceaa386-4f8a-4ece-8022-0fd5e0008a43, {8,"Действие9",0,1, {1,1, {"#","Действие9"} -},0,76fdf041-568e-4dae-ba08-5fcdeb9f1972,10,1e2,0,0,1,0,0,0,0},3c81330c-ca29-47e8-bb29-136b0915472c, +},0,76fdf041-568e-4dae-ba08-5fcdeb9f1972,10,1e2,0,0,1,0,0,0,0},aa3bbaee-2e3a-4172-8c8c-46b672f23761, {8,"Действие10",0,1, {1,1, {"#","Действие10"} @@ -2656,7 +2659,7 @@ BgxkEQA7} } } } -},720,444,1,0,1,4,4,199,720,444,96}, +},720,444,1,0,1,4,4,214,720,444,96}, { {5},11, {5, diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form.bin index f8612063d..dc7d232e2 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form/Module.bsl index 9baf58b0b..cff9bb4ea 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form/Module.bsl @@ -30,20 +30,20 @@ И ТипЗначения.КвалификаторыСтроки.Длина = 0 Тогда ВариантПросмотра = ПолучитьВариантПросмотраТекстПоИмениРеквизита(ИмяРеквизита); - ирОбщий.ОткрытьТекстЛкс(ВыбраннаяСтрока.Значение, ВыбраннаяСтрока.СвойствоСиноним, ВариантПросмотра, Истина, + ирКлиент.ОткрытьТекстЛкс(ВыбраннаяСтрока.Значение, ВыбраннаяСтрока.СвойствоСиноним, ВариантПросмотра, Истина, "" + ЭтаФорма.КлючУникальности + ВыбраннаяСтрока.ИмяВТаблице); ИначеЕсли Истина И ирОбщий.СтрокиРавныЛкс(ИмяРеквизита, "ИмяФайлаЛога") Тогда - ирОбщий.ОткрытьФайлВПроводникеЛкс(ВыбраннаяСтрока.Значение); + ирКлиент.ОткрытьФайлВПроводникеЛкс(ВыбраннаяСтрока.Значение); ИначеЕсли Истина И ВыбраннаяСтрока.ИмяВТаблице = "Пользователь" И ЗначениеЗаполнено(ВыбраннаяСтрока.Значение) И ПользователиИнформационнойБазы.НайтиПоИмени(ВыбраннаяСтрока.Значение) <> Неопределено Тогда - ирОбщий.ОткрытьПользователяИБЛкс(ВыбраннаяСтрока.Значение); + ирКлиент.ОткрытьПользователяИБЛкс(ВыбраннаяСтрока.Значение); Иначе - ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка); + ирКлиент.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры @@ -151,13 +151,13 @@ Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры @@ -172,33 +172,33 @@ Если ВладелецФормы.ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока <> ВыбраннаяСтрока Тогда Сообщить("Невозможно активизировать строку события в журнале при текущем отборе"); КонецЕсли; - ирОбщий.Форма_АктивироватьОткрытьЛкс(ВладелецФормы); + ирКлиент.Форма_АктивироватьОткрытьЛкс(ВладелецФормы); КонецЕсли; КонецПроцедуры Процедура ЗначенияСвойствПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ЗначенияСвойствПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Событие"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Событие"); diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form/form.txt index bedfd8b6d..71d6a9fff 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/Событие/Ext/Form/form.txt @@ -47,7 +47,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},0,1, {1,1, -{4, +{5, {1,3, {"ru","Страница1"}, {"en","Страница1"}, @@ -65,7 +65,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,4, {2,8,1,1,1,0,0,0,0}, @@ -108,10 +109,7 @@ {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,d894584a-d9cc-4be9-aa71-c1971412a5d3,30,1,5, -{7,5e9fd000-5f02-4a41-bbf5-6496c4047125,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,0,00000000-0000-0000-0000-000000000000,99, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,630827f8-0a59-4c4f-a571-7a6a2dd1873e,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,2b824fe2-2012-4faf-8fb6-d08862c1f117,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыНайтиВЖурнале", {1,"ДействияФормыНайтиВЖурнале", {1,1, @@ -140,10 +138,36 @@ }, {4,1, {0,c7cdd3c0-3879-436a-b145-5e2615e9b3e1},"",-1,-1,1,0,""},1}, -{7,9269ae69-e3c0-40bb-9862-18b9e81bdfdf,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,0,00000000-0000-0000-0000-000000000000,97, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,30fd7891-5ec3-4a6e-a764-7685f8c1b05a,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,3daf9349-fdfa-47ef-9385-a0464f19b8b1,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Сравнить результат с предыдущим переданным для сравнения"}, +{"en","Сравнить результат с предыдущим переданным для сравнения"}, +{"uk","Сравнить результат с предыдущим переданным для сравнения"} +}, +{1,3, +{"ru","Сравнить результат с предыдущим переданным для сравнения"}, +{"en","Сравнить результат с предыдущим переданным для сравнения"}, +{"uk","Сравнить результат с предыдущим переданным для сравнения"} +}, +{4,1, +{0,8c325feb-0b3d-4094-aa2f-917b484044a5},"",-1,-1,0,0,""},1}, +{7,df276abf-507b-4603-84d1-6b836a2b85ce,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -179,58 +203,35 @@ AR4RjghZaoUqtnQZaGuwBIZuFwOC6NLrBTgCAJBwACQBhmZAQBUsC1WBAXt0KoPN ZxRwxH4TBe9gS0YqNWHOuJxUFdLJdbr7PDS9UFJKeQOFTgaIiHwcjF6JB3QohRt5 BgxkEQA7} },0,""},1}, -{7,49155cc9-e324-439e-b17e-743f8dce7485,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Сравнить результат с предыдущим переданным для сравнения"}, -{"en","Сравнить результат с предыдущим переданным для сравнения"}, -{"uk","Сравнить результат с предыдущим переданным для сравнения"} -}, -{1,3, -{"ru","Сравнить результат с предыдущим переданным для сравнения"}, -{"en","Сравнить результат с предыдущим переданным для сравнения"}, -{"uk","Сравнить результат с предыдущим переданным для сравнения"} -}, -{4,1, -{0,8c325feb-0b3d-4094-aa2f-917b484044a5},"",-1,-1,0,0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,630827f8-0a59-4c4f-a571-7a6a2dd1873e, +{7,1d92850e-fd08-4b09-a608-d41027bdf0a2,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,0,00000000-0000-0000-0000-000000000000,97, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, +{7,853719ab-a51e-4362-893f-489ed6528349,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,0,00000000-0000-0000-0000-000000000000,99, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,2b824fe2-2012-4faf-8fb6-d08862c1f117, {8,"НайтиВЖурнале",0,1, {1,3, {"ru","Найти в журнале"}, {"en","Найти в журнале"}, {"uk","Найти в журнале"} -},1,d894584a-d9cc-4be9-aa71-c1971412a5d3,28,1e2,0,0,1,0,0,0,0},49155cc9-e324-439e-b17e-743f8dce7485, +},1,d894584a-d9cc-4be9-aa71-c1971412a5d3,28,1e2,0,0,1,0,0,0,0},3daf9349-fdfa-47ef-9385-a0464f19b8b1, {8,"Сравнить",0,3, {1,3, {"ru","Сравнить"}, {"en","Сравнить"}, {"uk","Сравнить"} -},1,d894584a-d9cc-4be9-aa71-c1971412a5d3,26,1e2,0,0,1,0,0,0,0},30fd7891-5ec3-4a6e-a764-7685f8c1b05a, +},1,d894584a-d9cc-4be9-aa71-c1971412a5d3,26,1e2,0,0,1,0,0,0,0},df276abf-507b-4603-84d1-6b836a2b85ce, {8,"МенеджерТабличногоПоля",0,5, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,d894584a-d9cc-4be9-aa71-c1971412a5d3,29,1e2,0,0,1,0,0,0,0},9269ae69-e3c0-40bb-9862-18b9e81bdfdf, +},1,d894584a-d9cc-4be9-aa71-c1971412a5d3,29,1e2,0,0,1,0,0,0,0},1d92850e-fd08-4b09-a608-d41027bdf0a2, {8,"Действие1",0,1, {1,1, {"#","Действие1"} -},0,d894584a-d9cc-4be9-aa71-c1971412a5d3,24,1e2,0,0,1,0,0,0,0},5e9fd000-5f02-4a41-bbf5-6496c4047125, +},0,d894584a-d9cc-4be9-aa71-c1971412a5d3,24,1e2,0,0,1,0,0,0,0},853719ab-a51e-4362-893f-489ed6528349, {8,"Действие2",0,1, {1,1, {"#","Действие2"} @@ -332,7 +333,7 @@ BgxkEQA7} {737535a4-21e6-4971-8513-3e3173a9fedd, {8, {8, -{18, +{19, {1,3, {"ru","№"}, {"en","№"}, @@ -371,7 +372,7 @@ BgxkEQA7} {1,0}, {"Pattern", {"N",10,0,0} -},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0,25.00000000000001}, {-1}, {-1}, {-1} @@ -380,7 +381,7 @@ BgxkEQA7} {737535a4-21e6-4971-8513-3e3173a9fedd, {8, {8, -{18, +{19, {1,3, {"ru","Свойство"}, {"en","Свойство"}, @@ -419,7 +420,7 @@ BgxkEQA7} {1,0}, {"Pattern", {"S"} -},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0,67}, {-1}, {-1}, {-1} @@ -428,7 +429,7 @@ BgxkEQA7} {737535a4-21e6-4971-8513-3e3173a9fedd, {8, {8, -{18, +{19, {1,3, {"ru","Имя свойства"}, {"en","Имя свойства"}, @@ -467,7 +468,7 @@ BgxkEQA7} {1,0}, {"Pattern", {"S"} -},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0,88.9999999999999}, {-1}, {-1}, {-1} @@ -476,7 +477,7 @@ BgxkEQA7} {737535a4-21e6-4971-8513-3e3173a9fedd, {8, {8, -{18, +{19, {1,3, {"ru","Значение"}, {"en","Значение"}, @@ -518,7 +519,7 @@ BgxkEQA7} {"S"}, {"D"}, {"N",20,0,1} -},0,10,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +},0,10,00000000-0000-0000-0000-000000000000,0,0,0,0,0,85.9999999999998}, {-1}, {-1}, {-1} @@ -527,7 +528,7 @@ BgxkEQA7} {737535a4-21e6-4971-8513-3e3173a9fedd, {8, {8, -{18, +{19, {1,3, {"ru","Описание свойства"}, {"en","Описание свойства"}, @@ -566,7 +567,7 @@ BgxkEQA7} {1,0}, {"Pattern", {"S"} -},0,2,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +},0,2,00000000-0000-0000-0000-000000000000,0,0,0,0,0,199.9999999999998}, {-1}, {-1}, {-1} @@ -575,7 +576,7 @@ BgxkEQA7} {737535a4-21e6-4971-8513-3e3173a9fedd, {8, {8, -{18, +{19, {1,3, {"ru","Имя в таблице"}, {"en","Имя в таблице"}, @@ -614,7 +615,7 @@ BgxkEQA7} {1,0}, {"Pattern", {"S"} -},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0,1e2}, {-1}, {-1}, {-1} @@ -711,7 +712,7 @@ BgxkEQA7} {0} } } -},400,300,1,0,1,4,4,143,400,300,96}, +},400,300,1,0,1,4,4,155,400,300,96}, { {2},4, {3, diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form.bin index a1b6484c8..e03d16a20 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form/Module.bsl index e70d6af0e..b7c60aa81 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form/Module.bsl @@ -91,6 +91,6 @@ Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form/form.txt index 301558900..2d7e4357e 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/СхемаБД/Ext/Form/form.txt @@ -44,7 +44,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},0,1, {1,1, -{4, +{5, {1,3, {"ru","Страница1"}, {"en","Страница1"}, @@ -62,7 +62,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,4, {2,8,1,1,1,0,0,0,0}, @@ -647,7 +648,7 @@ {0} } } -},456,115,1,0,1,4,4,54,456,115,96}, +},456,115,1,0,1,4,4,55,456,115,96}, { {1},9, {3, diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form.bin index c8105f088..3aa8b2a61 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form/Module.bsl index c78c5efb6..2cd6d35f3 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form/Module.bsl @@ -13,26 +13,26 @@ Процедура ТрассыПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); КонецПроцедуры Процедура ТрассыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Трассы"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Трассы"); diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form/form.txt index f33f94b8b..983048e16 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/Трассы/Ext/Form/form.txt @@ -47,7 +47,7 @@ {4,0, {0},"",-1,-1,1,0,""},100,0,0,0},0,1, {1,1, -{4, +{5, {1,3, {"ru","Страница1"}, {"en","Страница1"}, @@ -65,7 +65,8 @@ }, {3,4, {0} -} +}, +{7,3,0,1,100} } },1,1,0,4, {2,8,1,1,1,0,0,0,0}, @@ -108,7 +109,7 @@ {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,0,1, {5,b6003b3d-fc09-486e-932f-789f998ad0e2,178,1,1, -{7,75cd34d9-08c0-422c-be14-060e1129ab80,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,d08b1d61-8770-4d27-9228-9583e7ad4041,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыВыбрать", {1,"ДействияФормыВыбрать", {1,1, @@ -135,7 +136,7 @@ {"en","Выбрать"}, {"uk","Выбрать"} },1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,75cd34d9-08c0-422c-be14-060e1129ab80, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,d08b1d61-8770-4d27-9228-9583e7ad4041, {8,"Выбрать",0,1, {1,3, {"ru","Выбрать"}, @@ -146,7 +147,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,72986783-763e-4e2c-af7c-894a1fd30c68,178,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,8041d539-ec72-48f5-8020-de4319d108b4,178,0,0} }, {8,0,0,621,25,1, {0, @@ -239,7 +240,7 @@ {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","N"}, {"en","N"}, @@ -276,7 +277,7 @@ {7,3,0,1,100},1,0,0,4,0,"НомерСтроки", {},4,0, {1,0}, -{"Pattern"},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +{"Pattern"},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0,28}, {-2}, {-1}, {-1} @@ -285,7 +286,7 @@ {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","На сервере"}, {"en","На сервере"}, @@ -324,7 +325,7 @@ {1,0}, {"Pattern", {"S",10,1} -},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0}, +},0,1,00000000-0000-0000-0000-000000000000,0,0,0,0,0,28}, {-1}, {0,61942160-fd64-4e5d-ba4e-d76dbce1fae5}, {-1} @@ -333,7 +334,7 @@ {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","Инфобаза"}, {"en","Инфобаза"}, @@ -378,7 +379,7 @@ jIEjcQViu5RSPm0k5z372c/ZrFf83a+3IUJZDGrb9n13OSsGOwVoDGAqi0SEHGwA CTmoKJhndok9OMhiapHyhSscBW3tL80nFoVfEhZfDLvRGGhK/plFMAJpASadESxF MEdjTZ7NNtVepSkq9SbK9FhlOKeRDuWViP5kpw5fbM4sNd57izVMj8T7xdY3lTtZ -jbGLuqo7q0OITttgDseIsW6jl/nLDYzswG86duShKGbEQnoA},0},0,0,0,0,0}, +jbGLuqo7q0OITttgDseIsW6jl/nLDYzswG86duShKGbEQnoA},0},0,0,0,0,0,1e2}, {0,91ac08cb-66a7-4dcc-ab9b-8889769cf332}, {-1}, {-1} @@ -387,7 +388,7 @@ jbGLuqo7q0OITttgDseIsW6jl/nLDYzswG86duShKGbEQnoA},0},0,0,0,0,0}, {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","Пользователь"}, {"en","Пользователь"}, @@ -432,7 +433,7 @@ jbGLuqo7q0OITttgDseIsW6jl/nLDYzswG86duShKGbEQnoA},0},0,0,0,0,0}, jIEjcQViu5RSPm0k5z372c/ZrFf83a+3IUJZDGrb9n13OSsGOwVoDGAqi0SEHGwA CTmoKJhndok9OMhiapHyhSscBW3tL80nFoVfEhZfDLvRGGhK/plFMAJpASadESxF MEdjTZ7NNtVepSkq9SbK9FhlOKeRDuWViP5kpw5fbM4sNd57izVMj8T7xdY3lTtZ -jbGLuqo7q0OITttgDseIsW6jl/nLDYzswG86duShKGbEQnoA},0},0,0,0,0,0}, +jbGLuqo7q0OITttgDseIsW6jl/nLDYzswG86duShKGbEQnoA},0},0,0,0,0,0,7e1}, {0,3c2d1643-2fe4-4c46-8ba1-23c5e884a819}, {-1}, {-1} @@ -441,7 +442,7 @@ jbGLuqo7q0OITttgDseIsW6jl/nLDYzswG86duShKGbEQnoA},0},0,0,0,0,0}, {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","Сеанс"}, {"en","Сеанс"}, @@ -486,7 +487,7 @@ jbGLuqo7q0OITttgDseIsW6jl/nLDYzswG86duShKGbEQnoA},0},0,0,0,0,0}, jIEjcQUSuwRUPkkk+/n585zNesXnfr1NAepqUrt+HIfLWTHYKiAEBIp1FXNEHnVA GVlossEnu8QObC5OPTAmhzNsNtqYXzWfWCrcMmDoFWE1mnyeki5HCVBgmi5Bi/B5 ac5htxGVaq9isUqVLBR6zkLmNOWXeSVFf9jS4YvKN0Wdc85QC+WPeL3Qu66xJ6Mp -DEE37WC098Fq4/FwDBTaPjiZv9wAZQf+0rkjDyURIxLiAw==},0},0,0,0,0,0}, +DEE37WC098Fq4/FwDBTaPjiZv9wAZQf+0rkjDyURIxLiAw==},0},0,0,0,0,0,51.9999999999998}, {0,ae7a207f-66e4-43cc-a8cb-d254df86ded2}, {-1}, {-1} @@ -495,7 +496,7 @@ DEE37WC098Fq4/FwDBTaPjiZv9wAZQf+0rkjDyURIxLiAw==},0},0,0,0,0,0}, {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","Процесс ОС"}, {"en","Процесс ОС"}, @@ -540,7 +541,7 @@ DEE37WC098Fq4/FwDBTaPjiZv9wAZQf+0rkjDyURIxLiAw==},0},0,0,0,0,0}, jIEjcQViuwqoBeJIzvPz5zm77YbP8/6YItTVpA79OA63q2KwV4AGsqW6ShSRix0g IQcNucIusQeXizH3MCk/OMOR09b+qlljqfDLgMV3hNVoDDSF1BJEMALzdAk6A2vD OYddIyrVUaXilSpZRug5yzCnkS7xSor+sKXDF5UfijrvvcUWyh/xerH3XeMuVmMc -om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0}, +om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0,56.9999999999999}, {0,f2f72971-a8de-40c0-9e7f-8cf23d925528}, {-1}, {-1} @@ -549,7 +550,7 @@ om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0}, {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","Префикс"}, {"en","Префикс"}, @@ -594,7 +595,7 @@ om7aweoQotM2mNM5Ymz76GX+cgMjO/CXzh15KIoYkZBe},0},0,0,0,0,0}, Bo7EFUjsUqB8kkjOe/aLnzNfzGTdLtdzhGV1NqvudOqPByNgbYARKC2rVLAeaoAK cuBLwEd2igM4yGIgxJQvUuFKsMy/NJ9YFWFKMD0ZcWOpLV3yFpYAFebuSjpUrEXw iliBV5dmY9IYjXnTZHqoQslZKqfkjYr+ZMcXvrh8cdSEEJhqGP9IxotdaLzbs6XY -R+vrnm3bRme5xe0uUqy7GLT/dALUGeRLhxelKakZtZDu},0},0,0,0,0,0}, +R+vrnm3bRme5xe0uUqy7GLT/dALUGeRLhxelKakZtZDu},0},0,0,0,0,0,70.9999999999999}, {0,3e86eed1-42f0-4158-8e13-523f94297481}, {-1}, {-1} @@ -603,7 +604,7 @@ R+vrnm3bRme5xe0uUqy7GLT/dALUGeRLhxelKakZtZDu},0},0,0,0,0,0}, {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","Дата начала"}, {"en","Дата начала"}, @@ -648,7 +649,7 @@ R+vrnm3bRme5xe0uUqy7GLT/dALUGeRLhxelKakZtZDu},0},0,0,0,0,0}, Fh7JA9gIu/koflhmlvf295bHekXnfr0NQVabQezavu8uZ0FgK2K1ifnJFxuJGRlp s4MpWmInjYSUigAxPSjDZKe0/lXzibnClYTGhSE1Cn2ekoxYlMAwTWfSgFwMC5/N skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl -604r74NR2sPhGDDUbXA8v9wAeAf60bEjDUUWwxLiEw==},0},0,0,0,0,0}, +604r74NR2sPhGDDUbXA8v9wAeAf60bEjDUUWwxLiEw==},0},0,0,0,0,0,97.9999999999997}, {0,1b92843e-7eae-4473-9bbc-9c3b8a2746a5}, {-1}, {-1} @@ -657,7 +658,7 @@ skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl {c2cf1953-2796-4fe2-b78c-ff84140b124e, {1, {8, -{18, +{19, {1,3, {"ru","Дата конца"}, {"en","Дата конца"}, @@ -702,7 +703,7 @@ skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl Fh7JA9gIu/koflhmlvf295bHekXnfr0NQVabQezavu8uZ0FgK2K1ifnJFxuJGRlp s4MpWmInjYSUigAxPSjDZKe0/lXzibnClYTGhSE1Cn2ekoxYlMAwTWfSgFwMC5/N skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl -604r74NR2sPhGDDUbXA8v9wAeAf60bEjDUUWwxLiEw==},0},0,0,0,0,0}, +604r74NR2sPhGDDUbXA8v9wAeAf60bEjDUUWwxLiEw==},0},0,0,0,0,0,93.9999999999998}, {0,3f8d1d6f-8373-4d46-b587-b366effe2ea8}, {-1}, {-1} @@ -801,7 +802,7 @@ skixF3H2QrwlJXrMAoopzDfHBRf9ieqpwxeRL8Ia55zGWs5fRNuF1jXWnLTC0AVl {0} } } -},621,213,1,0,1,4,4,25,621,213,96}, +},621,213,1,0,1,4,4,30,621,213,96}, { {0},9, {1, diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form.bin b/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form.bin index c3d2f3a64..9c7cfdceb 100644 Binary files a/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form.bin and b/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form.bin differ diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form/Module.bsl index c9710f613..2c1cd5b9e 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form/Module.bsl @@ -29,7 +29,7 @@ Процедура ЗагрузитьНастройкуВФорме(НастройкаФормы, ДопПараметры) Экспорт - ирОбщий.ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); + ирКлиент.ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); Если Не ЭтоТрасса Тогда СвойстваВТерминахМетаданныхПриИзменении(); УстановитьРежимИтогов(ИтогиВключены); @@ -137,13 +137,13 @@ Тогда СтандартнаяОбработка = Ложь; ВариантПросмотра = ПолучитьВариантПросмотраТекстПоИмениРеквизита(ИмяРеквизита); - ирОбщий.ОткрытьТекстЛкс(ВыбраннаяСтрока[Колонка.Данные], Колонка.ТекстШапки, ВариантПросмотра, Истина, + ирКлиент.ОткрытьТекстЛкс(ВыбраннаяСтрока[Колонка.Данные], Колонка.ТекстШапки, ВариантПросмотра, Истина, "" + ВыбраннаяСтрока.МоментВремени + Колонка.Данные); КонецЕсли; КонецЕсли; Если СтандартнаяОбработка Тогда СтандартнаяОбработка = Ложь; - //ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка); + //ирКлиент.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка); ОткрытьФормуСобытия(); КонецЕсли; @@ -231,7 +231,7 @@ КонецЕсли; РежимДозагрузки = ТаблицаЖурнала.Количество() > 0; ЗаполнитьЗначенияСвойств(ЭтотОбъект, РезультатЗадания, мИменаВозвращаемыхСвойств); - СостояниеСтрокПоля = ирОбщий.ТабличноеПолеСостояниеСтрокЛкс(ЭлементыФормы.ТаблицаЖурнала, "МоментВремени, ИмяФайлаЛога"); + СостояниеСтрокПоля = ирКлиент.ТабличноеПолеСостояниеСтрокЛкс(ЭлементыФормы.ТаблицаЖурнала, "МоментВремени, ИмяФайлаЛога"); Если СостояниеЗадания <> Неопределено Тогда ирОбщий.СостояниеЛкс("Загрузка таблицы из фонового задания..."); ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(РезультатЗадания.ТаблицаЖурнала, ТаблицаЖурнала,,,, мНепустыеКолонкиЖурнала); @@ -260,7 +260,7 @@ КонецЕсли; КонецЕсли; Если Не РежимДозагрузки Тогда - ТекущаяСтрокаУстановлена = ирОбщий.ТабличноеПолеВосстановитьСостояниеСтрокЛкс(ЭлементыФормы.ТаблицаЖурнала, СостояниеСтрокПоля); + ТекущаяСтрокаУстановлена = ирКлиент.ТабличноеПолеВосстановитьСостояниеСтрокЛкс(ЭлементыФормы.ТаблицаЖурнала, СостояниеСтрокПоля); Если Не ТекущаяСтрокаУстановлена Тогда Если ТаблицаЖурнала.Количество() > 0 Тогда ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока = ТаблицаЖурнала[ТаблицаЖурнала.Количество() - 1]; @@ -285,7 +285,7 @@ // Предопределеный метод Процедура ПроверкаЗавершенияФоновыхЗаданий() Экспорт - ирОбщий.ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма); + ирКлиент.ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма); КонецПроцедуры @@ -485,8 +485,8 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); - ирОбщий.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма); //КлиентЗапущенНаКомпьютереСервера = ирОбщий.ЛиКлиентЗапущенНаКомпьютереСервераЛкс(); //Если Не КлиентЗапущенНаКомпьютереСервера Тогда // ЭтотОбъект.ЗагружатьЖурналСервера = Ложь; @@ -516,7 +516,7 @@ УстановитьТипСУБДВТекстахШапокКолонок(); КонецЕсли; ОбновитьСпискиВыбораПолейСортировки(); - ирОбщий.УстановитьДоступностьВыполненияНаСервереЛкс(ЭтаФорма); + ирКлиент.УстановитьДоступностьВыполненияНаСервереЛкс(ЭтаФорма); // Перенес в раздел инициализации модуля. Антибаг платформы 8.3.5 https://partners.v8.1c.ru/forum/topic/1323811 //ОсновнойАнализТехножурнала = ирКэш.ПолучитьАнализТехножурналаЛкс(); @@ -555,7 +555,7 @@ Процедура ПроверитьИзменениеОтбораДляИсторииОтложенно() ТабличноеПоле = ЭлементыФормы.ТаблицаЖурнала; - ДобавленВСписок = ирОбщий.ДобавитьОтборВИсториюТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, ТабличноеПоле.ОтборСтрок, СтарыйОтбор); + ДобавленВСписок = ирКлиент.ДобавитьОтборВИсториюТабличногоПоляЛкс(ЭтаФорма, ТабличноеПоле, ТабличноеПоле.ОтборСтрок, СтарыйОтбор); Если ДобавленВСписок Тогда ОбновитьПодменюПоследнихОтборов(); КонецЕсли; @@ -797,19 +797,19 @@ Процедура КаталогЖурналаНачалоВыбора(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеФайловогоКаталога_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка); + ирКлиент.ПолеФайловогоКаталога_НачалоВыбораЛкс(Элемент, СтандартнаяОбработка); КонецПроцедуры Процедура КаталогЖурналаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура КаталогЖурналаПриИзменении(Элемент) - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры @@ -828,7 +828,7 @@ Процедура ДействияФормыНастройкаЖурнала(Кнопка) - ФормаНастройки = ирОбщий.ПолучитьФормуЛкс("Обработка.ирНастройкаТехножурнала.Форма"); + ФормаНастройки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирНастройкаТехножурнала.Форма"); ФормаНастройки.Открыть(); Если ЗагружатьЖурналСервера Тогда ФормаНастройки.НаСервере = Истина; @@ -847,7 +847,7 @@ Процедура КоманднаяПанельЖурналРегистрацииНастройкаСобытия(Кнопка) ТекущаяСтрока = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока; - ФормаНастройки = ирОбщий.ПолучитьФормуЛкс("Обработка.ирНастройкаТехножурнала.Форма"); + ФормаНастройки = ирКлиент.ПолучитьФормуЛкс("Обработка.ирНастройкаТехножурнала.Форма"); ФормаНастройки.Открыть(); Если ТекущаяСтрока <> Неопределено Тогда ФормаНастройки.НаСервере = ТекущаяСтрока.НаСервере; @@ -935,7 +935,7 @@ Процедура ПриАктивизацииСтрокиИтогов(Элемент = Неопределено) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); мАктуальныеСвойства = Неопределено; Если ИтогиВключены Тогда ПанельИтоги = ЭлементыФормы.ПанельИтоги; @@ -1064,7 +1064,7 @@ Если НовыйРежим <> ИтогиВключены Тогда ЭтаФорма.ИтогиВключены = НовыйРежим; - ирОбщий.ИзменитьСвернутостьЛкс(ЭтаФорма, ИтогиВключены, ЭлементыФормы.ПанельИтоги, ЭтаФорма.ЭлементыФормы.гРазделительИтогиЖурнал, ЭтаФорма.Панель, "верх"); + ирКлиент.ИзменитьСвернутостьЛкс(ЭтаФорма, ИтогиВключены, ЭлементыФормы.ПанельИтоги, ЭтаФорма.ЭлементыФормы.гРазделительИтогиЖурнал, ЭтаФорма.Панель, "верх"); КонецЕсли; Если Не ИтогиВключены Тогда мАктуальныеСвойства = Неопределено; @@ -1082,8 +1082,8 @@ Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Если Не Отказ Тогда - ирОбщий.ИзменитьСвернутостьЛкс(ЭтаФорма, Истина, ЭлементыФормы.ПанельИтоги, ЭтаФорма.ЭлементыФормы.гРазделительИтогиЖурнал, ЭтаФорма.Панель, "верх"); - ирОбщий.ИзменитьСвернутостьЛкс(ЭтаФорма, Истина, ЭлементыФормы.ПанельСвойств, ЭтаФорма.ЭлементыФормы.гРазделительЖурналСвойства, ЭтаФорма.Панель, "низ"); + ирКлиент.ИзменитьСвернутостьЛкс(ЭтаФорма, Истина, ЭлементыФормы.ПанельИтоги, ЭтаФорма.ЭлементыФормы.гРазделительИтогиЖурнал, ЭтаФорма.Панель, "верх"); + ирКлиент.ИзменитьСвернутостьЛкс(ЭтаФорма, Истина, ЭлементыФормы.ПанельСвойств, ЭтаФорма.ЭлементыФормы.гРазделительЖурналСвойства, ЭтаФорма.Панель, "низ"); //Для Каждого ИмяКолонки Из мИзмененныеВидимостиКолонок Цикл // КолонкаТП = ЭлементыФормы.ТаблицаЖурнала.Колонки.Найти(ИмяКолонки); // Если КолонкаТП <> Неопределено Тогда @@ -1152,7 +1152,7 @@ Процедура ДействияФормыНастройкаЧтение(Кнопка) - ФормаНастройки = ПолучитьФорму("НастройкаЧтения"); + ФормаНастройки = ПолучитьФорму("НастройкаЧтения", ЭтаФорма); ФормаНастройки.Открыть(); КонецПроцедуры @@ -1174,7 +1174,7 @@ Процедура ОткрытьФормуСобытия(Кнопка = Неопределено) Экспорт - //ирОбщий.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка); + //ирКлиент.ЯчейкаТабличногоПоляРасширенногоЗначения_ВыборЛкс(ЭтаФорма, Элемент, СтандартнаяОбработка); ВыбраннаяСтрока = ЭлементыФормы.ТаблицаЖурнала.ТекущаяСтрока; Если ВыбраннаяСтрока = Неопределено Тогда Возврат; @@ -1321,13 +1321,13 @@ Процедура ОбновлениеОтображения() - ирОбщий.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); + ирКлиент.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); КонецПроцедуры Процедура ОтборТекстSDBLНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры @@ -1386,19 +1386,19 @@ ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит; ЭлементОтбора.Значение = ПреобразоватьЗначениеВSDBL(СсылкаДляПоиска); КонецЕсли; - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура ТаблицаДляПоискаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура ТаблицаЖурналаПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); ТекущаяСтрока = Элемент.ТекущаяСтрока; Если Истина И ТекущаяСтрока <> Неопределено @@ -1417,13 +1417,13 @@ КонецЕсли; Если ТипЗнч(ЭлементУправления) = Тип("ПолеТекстовогоДокумента") Тогда ЭлементУправления.УстановитьТекст(ЗначениеПоля); - ирОбщий.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Истина); + ирКлиент.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Истина); ИначеЕсли ТипЗнч(ЭлементУправления.Значение) = Тип("ДеревоЗначений") Тогда ЭлементУправления.Значение.Строки.Очистить(); - ирОбщий.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Ложь); + ирКлиент.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Ложь); ИначеЕсли ТипЗнч(ЭлементУправления.Значение) = Тип("ТаблицаЗначений") Тогда ЭлементУправления.Значение.Очистить(); - ирОбщий.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Ложь); + ирКлиент.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, Страница, Ложь); КонецЕсли; КонецЦикла; ОбновитьТекущуюСтраницуПанелиЭлемента(); @@ -1447,7 +1447,7 @@ Если ТипЗнч(ЭлементУправления) = Тип("ПолеТекстовогоДокумента") Тогда Возврат; КонецЕсли; - Если Не ирОбщий.ПолучитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, ТекущаяСтраница) Тогда + Если Не ирКлиент.ПолучитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, ТекущаяСтраница) Тогда Если ТекущаяСтрока = Неопределено Тогда ЗначениеПоля = Неопределено; Иначе @@ -1458,7 +1458,7 @@ ИначеЕсли ЭлементУправления = ЭлементыФормы.ТаблицыМетаданных Тогда ОбновитьТаблицыМетаданных(ЗначениеПоля); КонецЕсли; - ирОбщий.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, ТекущаяСтраница, Истина); + ирКлиент.УстановитьГотовностьДанныхСтраницыЛкс(ЭтаФорма, ТекущаяСтраница, Истина); КонецЕсли; Если ЭлементУправления = ЭлементыФормы.Контекст Тогда Если ЭлементыФормы.ТаблицаЖурнала.ТекущаяКолонка = ЭлементыФормы.ТаблицаЖурнала.Колонки.СтрокаМодуля Тогда @@ -1521,14 +1521,14 @@ Если ТекущаяСтраница <> Неопределено Тогда ЭлементыФормы.ПанельСвойств.ТекущаяСтраница = ТекущаяСтраница; КонецЕсли; - ирОбщий.ТабличноеПолеПриАктивацииКолонкиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивацииКолонкиЛкс(ЭтаФорма, Элемент); КонецПроцедуры Процедура КоманднаяПанельЖурналРегистрацииПоказыватьПанельСвойств(Кнопка) Кнопка.Пометка = Не Кнопка.Пометка; - ирОбщий.ИзменитьСвернутостьЛкс(ЭтаФорма, Кнопка.Пометка, ЭлементыФормы.ПанельСвойств, ЭтаФорма.ЭлементыФормы.гРазделительЖурналСвойства, ЭтаФорма.Панель, "низ"); + ирКлиент.ИзменитьСвернутостьЛкс(ЭтаФорма, Кнопка.Пометка, ЭлементыФормы.ПанельСвойств, ЭтаФорма.ЭлементыФормы.гРазделительЖурналСвойства, ЭтаФорма.Панель, "низ"); ОбновитьТекущуюСтраницуПанелиЭлемента(); КонецПроцедуры @@ -1562,13 +1562,13 @@ Процедура ДействияФормыСохранитьКак(Кнопка) СтруктураФайла = Новый Структура("ЭтоТрасса, ДанныеЖурнала", ЭтоТрасса, ТаблицаЖурнала.Выгрузить()); - ирОбщий.СохранитьЗначениеВФайлИнтерактивноЛкс(СтруктураФайла, "tld", "Данные техножурнала 1С", Истина); + ирКлиент.СохранитьЗначениеВФайлИнтерактивноЛкс(СтруктураФайла, "tld", "Данные техножурнала 1С", Истина); КонецПроцедуры Процедура ДействияФормыОткрытьФайл(Кнопка) - СтруктураФайла = ирОбщий.ЗагрузитьЗначениеИзФайлаИнтерактивноЛкс("tld", "Данные техножурнала 1С", Истина); + СтруктураФайла = ирКлиент.ЗагрузитьЗначениеИзФайлаИнтерактивноЛкс("tld", "Данные техножурнала 1С", Истина); Если СтруктураФайла = Неопределено Тогда Возврат; КонецЕсли; @@ -1595,7 +1595,7 @@ ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит; ЭлементОтбора.Значение = ПолучитьСтрокуОтбораТекстаSDBL(); КонецЕсли; - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры @@ -1610,7 +1610,7 @@ ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит; ЭлементОтбора.Значение = ОтборСтрокаМодуля; КонецЕсли; - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры @@ -1663,7 +1663,7 @@ ЭлементОтбора.ВидСравнения = ВидСравнения.Содержит; ЭлементОтбора.Значение = ПолучитьСтрокуОтбораТекстаСУБД(); КонецЕсли; - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры @@ -1671,12 +1671,12 @@ Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда СтандартнаяОбработка = Ложь; - ФормаВыбора = ирОбщий.ПолучитьФормуВыбораТаблицыСтруктурыБДЛкс(Ложь, Элемент.Значение); + ФормаВыбора = ирКлиент.ПолучитьФормуВыбораТаблицыСтруктурыБДЛкс(Ложь, Элемент.Значение); ИмяТаблицыХранения = ФормаВыбора.ОткрытьМодально(); Если ИмяТаблицыХранения = Неопределено Тогда Возврат; КонецЕсли; - ирОбщий.ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, ИмяТаблицыХранения); + ирКлиент.ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, ИмяТаблицыХранения); КонецЕсли; КонецПроцедуры @@ -1684,18 +1684,18 @@ Процедура ОтборТекстСУБДНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ФормаВыбора = ирОбщий.ПолучитьФормуВыбораТаблицыСтруктурыБДЛкс(Истина, Элемент.Значение); + ФормаВыбора = ирКлиент.ПолучитьФормуВыбораТаблицыСтруктурыБДЛкс(Истина, Элемент.Значение); ИмяТаблицыХранения = ФормаВыбора.ОткрытьМодально(); Если ИмяТаблицыХранения = Неопределено Тогда Возврат; КонецЕсли; - ирОбщий.ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, ИмяТаблицыХранения); + ирКлиент.ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, ИмяТаблицыХранения); КонецПроцедуры Процедура ОтборТекстСУБДНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры @@ -1716,7 +1716,7 @@ Процедура СтруктураКоманднойПанелиНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); КонецПроцедуры @@ -1744,19 +1744,19 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры @@ -1768,7 +1768,7 @@ Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры @@ -1805,35 +1805,35 @@ Процедура КонтекстПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура КонтекстПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); КонецПроцедуры Процедура КонтекстВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) Если Колонка = ЭлементыФормы.Контекст.Колонки.Ссылка Тогда - ирОбщий.ПоказатьСсылкуНаМодульКонфигурацииЛкс(ВыбраннаяСтрока.Модуль); + ирКлиент.ПоказатьСсылкуНаМодульКонфигурацииЛкс(ВыбраннаяСтрока.Модуль); ИначеЕсли Колонка = ЭлементыФормы.Контекст.Колонки.Метод Тогда //Если ЗначениеЗаполнено(ВыбраннаяСтрока.Метод) Тогда // ирОбщий.ПерейтиКОпределениюМетодаВКонфигуратореЛкс(ВыбраннаяСтрока.Метод); //КонецЕсли; ИначеЕсли Колонка = ЭлементыФормы.Контекст.Колонки.Модуль Тогда - ирОбщий.ОткрытьОбъектМетаданныхПоИмениМодуляЛкс(ВыбраннаяСтрока.Модуль); + ирКлиент.ОткрытьОбъектМетаданныхПоИмениМодуляЛкс(ВыбраннаяСтрока.Модуль); ИначеЕсли Колонка = ЭлементыФормы.Контекст.Колонки.Ссылка Тогда - ирОбщий.ПоказатьСсылкуНаСтрокуМодуляЛкс(ВыбраннаяСтрока.Ссылка); + ирКлиент.ПоказатьСсылкуНаСтрокуМодуляЛкс(ВыбраннаяСтрока.Ссылка); КонецЕсли; КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры @@ -1868,26 +1868,26 @@ Тогда ОформлениеСтроки.ЦветФона = Новый Цвет(245, 255, 245); КонецЕсли; - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ИтогиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) ОформлениеСтроки.Ячейки.НомерСтроки.Значение = Элемент.Значение.Индекс(ДанныеСтроки) + 1; - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ДействияФормыИТС(Кнопка) - ирОбщий.ОткрытьСсылкуИТСЛкс("https://its.1c.ru/db/v?doc/bookmark/adm/TI000000151"); + ирКлиент.ОткрытьСсылкуИТСЛкс("https://its.1c.ru/db/v?doc/bookmark/adm/TI000000151"); КонецПроцедуры @@ -1903,7 +1903,7 @@ Процедура ТаблицыМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка) - ирОбщий.ОткрытьОбъектМетаданныхЛкс(ВыбраннаяСтрока.Имя); + ирКлиент.ОткрытьОбъектМетаданныхЛкс(ВыбраннаяСтрока.Имя); КонецПроцедуры @@ -1946,7 +1946,7 @@ КонсольКомпоновокДанных.ОткрытьПоТабличномуПолю(ТабличноеПоле, СхемаКомпоновки, НастройкаКомпоновки, ВнешниеНаборыДанных); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Форма"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирАнализТехножурнала.Форма.Форма"); // Установим ключевые группировки для страниц итогов ПанельИтоги = ЭлементыФормы.ПанельИтоги; diff --git a/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form/form.txt b/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form/form.txt index e301523f8..fd08e99a9 100644 --- a/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form/form.txt +++ b/src/DataProcessors/ирАнализТехножурнала/Forms/Форма/Ext/Form/form.txt @@ -6960,7 +6960,9 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,0,1, {5,4a991a32-fb27-422a-a99e-bfa0c561a5b4,49,1,28, -{7,fe05e0ad-d760-44ab-9808-a9198562027c,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,f010b6fb-5a54-41cb-8ec2-42d62b15b32f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,02b4ef3b-7e2c-481b-921c-00335e1a8b71,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыОткрытьФайл", {1,"ДействияФормыОткрытьФайл", {1,2, @@ -6993,7 +6995,36 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, }, {4,1, {0,785362cb-3756-48ed-87d2-292ded17054a},"",-1,-1,1,0,""},1}, -{7,364d3b8c-2897-4197-8e79-6c87179cd09e,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,c08e697d-4f5e-4ea0-b8d1-5e6cb8715fc2,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыТрасса", +{1,"ДействияФормыТрасса", +{1,1, +{"ru","Трасса"} +}, +{1,1, +{"ru","Трасса"} +}, +{1,1, +{"ru","Трасса"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"}, +{"en","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"}, +{"uk","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"} +}, +{1,3, +{"ru","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"}, +{"en","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"}, +{"uk","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"} +}, +{4,1, +{0,978f2c88-7ac4-495d-ba22-f749e6352b95},"",-1,-1,0,0,""},1}, +{7,23c752ed-9539-4074-945f-2a24661a9678,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыСохранитьКак", {1,"ДействияФормыСохранитьКак", {1,2, @@ -7025,73 +7056,9 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, }, {4,1, {0,894cf65b-4109-4533-a1d7-c87b1fcc80a3},"",-1,-1,1,0,""},1}, -{7,1d13bb4c-2e6b-4a84-b717-f4b1f9cd3e21,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,b1ede406-e142-4491-9506-a1d8a0fcd2c6,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,3053b29c-83b6-4b6c-a2a3-c16cabf96d76,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,f2d97ee6-b29e-48c9-b2d5-036ae9fdcc35,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть новое окно"}, -{"en","Открыть новое окно"}, -{"uk","Открыть новое окно"} -}, -{1,3, -{"ru","Открыть новое окно"}, -{"en","Открыть новое окно"}, -{"uk","Открыть новое окно"} -}, -{4,1, -{0,31324465-3215-4477-b5ac-5ec8be01ddcc},"",-1,-1,0,0,""},1}, -{7,8982dba6-eca8-402d-866d-55fabc4db1e2,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыТрасса", -{1,"ДействияФормыТрасса", -{1,1, -{"ru","Трасса"} -}, -{1,1, -{"ru","Трасса"} -}, -{1,1, -{"ru","Трасса"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"}, -{"en","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"}, -{"uk","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"} -}, -{1,3, -{"ru","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"}, -{"en","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"}, -{"uk","Начать/кончить трассу текущего сеанса. Для обозначения трассы должно быть включено событие QERR"} -}, -{4,1, -{0,978f2c88-7ac4-495d-ba22-f749e6352b95},"",-1,-1,0,0,""},1}, -{7,64dd495e-c748-4e2f-b83c-cff4678861e8,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,d081d396-e3b5-47a5-ae7d-d9af8b64d6ee,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,7f40e996-a49b-4761-971b-096e2ea429ec,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,5cbcfdfe-79d4-4e2b-b90c-39b7dd1c5082,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииЗагрузить", {1,"КоманднаяПанельЖурналРегистрацииЗагрузить", {1,1, @@ -7120,100 +7087,9 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, }, {4,1, {0,fc4f29e0-d168-4fe0-8e64-e982fabf2595},"",-1,-1,1,0,""},1}, -{7,5f704be0-d791-4af9-9522-26379771d4ef,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,53d7511e-904e-427c-94e0-539cea0bc3a5,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,632bdbf2-67cb-4afc-a6e7-0b82b2d55ea2,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыНастройкаЧтение", -{1,"ДействияФормыНастройкаЧтение", -{1,1, -{"ru","Настройка чтение"} -}, -{1,1, -{"ru","Настройка чтение"} -}, -{1,1, -{"ru","Настройка чтение"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},6, -{1,3, -{"ru","Настройка чтения собственного техножурнала"}, -{"en","Настройка чтения собственного техножурнала"}, -{"uk","Настройка чтения собственного техножурнала"} -}, -{1,3, -{"ru","Настройка чтения собственного техножурнала"}, -{"en","Настройка чтения собственного техножурнала"}, -{"uk","Настройка чтения собственного техножурнала"} -},1}, -{7,2cdd39b8-2d65-4abc-84db-b89f091a5d57,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыНастройкаЖурнала", -{1,"ДействияФормыНастройкаЖурнала", -{1,1, -{"ru","Настройка журнала"} -}, -{1,1, -{"ru","Настройка журнала"} -}, -{1,1, -{"ru","Настройка журнала"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Настройка записи техножурнала"}, -{"en","Настройка записи техножурнала"}, -{"uk","Настройка записи техножурнала"} -}, -{1,3, -{"ru","Настройка записи техножурнала"}, -{"en","Настройка записи техножурнала"}, -{"uk","Настройка записи техножурнала"} -}, -{4,1, -{0,97d5c5e9-7727-4d49-8c8d-495cd7d883bf},"",-1,-1,0,0,""},1}, -{7,09cefa42-6773-4c38-b1d0-f7217b0818a6,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,b2bcc202-5ed7-465d-88a9-fe6446642381,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыОчиститьКаталогЖурнала", -{1,"ДействияФормыОчиститьКаталогЖурнала", -{1,1, -{"ru","Очистить каталог журнала"} -}, -{1,1, -{"ru","Очистить каталог журнала"} -}, -{1,1, -{"ru","Очистить каталог журнала"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Очистить каталог журнала"}, -{"en","Очистить каталог журнала"}, -{"uk","Очистить каталог журнала"} -}, -{1,3, -{"ru","Очистить каталог журнала"}, -{"en","Очистить каталог журнала"}, -{"uk","Очистить каталог журнала"} -}, -{4,1, -{-2},"",-1,-1,1,0,""},1}, -{7,ce27a602-54cb-412e-beb1-1049ed4f071c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,3ae28f5f-54ba-4f95-9cc9-aa1f49e9bbd7,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,42eb6de5-33ef-406c-ad2b-401d12c33176,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,cc38c72c-81f3-4946-9a74-dece5128465a,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыЖурналРегистрации", {1,"ДействияФормыЖурналРегистрации", {1,1, @@ -7242,9 +7118,102 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, }, {4,1, {0,e3b995e3-23f6-4c63-8bd8-a651eeddcfc4},"",-1,-1,0,0,""},1}, -{7,8e11b312-0f2e-48a5-9024-4b5cdfc4bebc,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,831383ac-705a-42a6-bdbc-ac134c8c9635,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,e5931ccf-31e5-4d35-87c0-3d3162e91409,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,86d8505f-2d62-4c50-82e1-2e84fb1136fe,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,7d6c83a0-e3d8-4dc8-9ec8-a79ba51d802a,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыНастройкаЧтение", +{1,"ДействияФормыНастройкаЧтение", +{1,1, +{"ru","Настройка чтение"} +}, +{1,1, +{"ru","Настройка чтение"} +}, +{1,1, +{"ru","Настройка чтение"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},6, +{1,3, +{"ru","Настройка чтения собственного техножурнала"}, +{"en","Настройка чтения собственного техножурнала"}, +{"uk","Настройка чтения собственного техножурнала"} +}, +{1,3, +{"ru","Настройка чтения собственного техножурнала"}, +{"en","Настройка чтения собственного техножурнала"}, +{"uk","Настройка чтения собственного техножурнала"} +},1}, +{7,9e116f76-45d3-4a12-b0fc-6636c18ea306,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыНастройкаЖурнала", +{1,"ДействияФормыНастройкаЖурнала", +{1,1, +{"ru","Настройка журнала"} +}, +{1,1, +{"ru","Настройка журнала"} +}, +{1,1, +{"ru","Настройка журнала"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Настройка записи техножурнала"}, +{"en","Настройка записи техножурнала"}, +{"uk","Настройка записи техножурнала"} +}, +{1,3, +{"ru","Настройка записи техножурнала"}, +{"en","Настройка записи техножурнала"}, +{"uk","Настройка записи техножурнала"} +}, +{4,1, +{0,97d5c5e9-7727-4d49-8c8d-495cd7d883bf},"",-1,-1,0,0,""},1}, +{7,246d5a55-8d23-44f5-84d1-cb54524547bf,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,2f667a22-382e-42b3-8e90-8c609e65513b,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыОчиститьКаталогЖурнала", +{1,"ДействияФормыОчиститьКаталогЖурнала", +{1,1, +{"ru","Очистить каталог журнала"} +}, +{1,1, +{"ru","Очистить каталог журнала"} +}, +{1,1, +{"ru","Очистить каталог журнала"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Очистить каталог журнала"}, +{"en","Очистить каталог журнала"}, +{"uk","Очистить каталог журнала"} +}, +{1,3, +{"ru","Очистить каталог журнала"}, +{"en","Очистить каталог журнала"}, +{"uk","Очистить каталог журнала"} +}, +{4,1, +{-2},"",-1,-1,1,0,""},1}, +{7,944d12a5-2d01-41e9-b02a-e6241569d560,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,927c0131-12f6-4368-9a44-42c7e5336436,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,a2dae5d8-62fa-4a88-b97c-a5d4a686670b,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыКонверторТекстаБД", {1,"ДействияФормыКонверторТекстаБД", {1,1, @@ -7272,9 +7241,38 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, {"uk","Конвертор текста СУБД"} }, {0,0,0},1}, -{7,d90a192c-9fd3-4923-9239-ec8438b29c83,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,29c69937-bd07-4799-9d06-e0e94a8b7a51,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,26b4504b-6762-48a7-8193-13bcca54ec15,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,18b8cc3a-c300-4aa7-aa32-1fb60436c531,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Показать структуру формы"}, +{"en","Показать структуру формы"}, +{"uk","Показать структуру формы"} +}, +{1,3, +{"ru","Показать структуру формы"}, +{"en","Показать структуру формы"}, +{"uk","Показать структуру формы"} +}, +{4,1, +{0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1}, +{7,ea9f033a-54d9-40ab-a620-8aed25f1858b,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыПросмотрТекстаПланаЗапроса", {1,"ДействияФормыПросмотрТекстаПланаЗапроса", {1,3, @@ -7307,7 +7305,9 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, {"en","Просмотр текстового плана запроса MSSQL"}, {"uk","Просмотр текстового плана запроса MSSQL"} },1}, -{7,00eaed31-dc48-4cd9-b0cc-13344933e4e6,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,555201c0-bacd-41be-89bc-29370ea8c1aa,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,2157c4e8-c5a2-4b05-a835-e156b3ab0fd0,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыСхемаБД", {1,"ДействияФормыСхемаБД", {1,1, @@ -7334,7 +7334,9 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, {"en","Использование чужой схемы БД"}, {"uk","Использование чужой схемы БД"} },1}, -{7,07ef6243-ba77-49c4-b5eb-bce536071b62,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,f1c1e613-fd76-4a60-ad25-0a155f0987f3,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,a567b713-48d5-4a26-a172-a548bbd57b40,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыИТС", {1,"ДействияФормыИТС", {1,1, @@ -7361,9 +7363,7 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, {"en","Открыть описание механизма its.1c.ru"}, {"uk","Открыть описание механизма its.1c.ru"} },1}, -{7,7d7be862-3f59-464d-a3fa-a38590fdca7f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,7c06d369-5d0d-4376-9daa-3dc04577fd6f,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,307ed911-32a8-44a1-a0af-6ac1d46afc38,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -7393,7 +7393,7 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, {4,1, {0,23f940bf-7381-4c2b-85a1-e541ed428042},"",14,8,1,0,""}, {0,0,0},2}, -{7,fc37481d-e537-4e18-a75a-71ae575f409f,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,d3375ecf-b621-448d-a3c4-ca9edf8c87dd,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -7422,7 +7422,7 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, }, {4,1, {0,a7707ed1-39b0-418f-974d-4d500d27a9c6},"",-1,-1,1,0,""},2}, -{7,de4fc5c7-7e96-485f-b4f9-b02eb88d6ab9,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,397e1e8e-7d01-4a35-9165-a10cd67fd2db,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -7440,18 +7440,18 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, } },7, {1,3, -{"ru","Показать структуру формы"}, -{"en","Показать структуру формы"}, -{"uk","Показать структуру формы"} +{"ru","Открыть новое окно"}, +{"en","Открыть новое окно"}, +{"uk","Открыть новое окно"} }, {1,3, -{"ru","Показать структуру формы"}, -{"en","Показать структуру формы"}, -{"uk","Показать структуру формы"} +{"ru","Открыть новое окно"}, +{"en","Открыть новое окно"}, +{"uk","Открыть новое окно"} }, {4,1, -{0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1}, -{7,c733003e-15bc-4fe4-84e0-f77670b7f33a,1,e1692cc2-605b-4535-84dd-28440238746c, +{0,31324465-3215-4477-b5ac-5ec8be01ddcc},"",-1,-1,0,0,""},1}, +{7,5129898a-83a2-4097-88d2-58f72e5d158f,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -7480,148 +7480,148 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, }, {4,1, {0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,28,fe05e0ad-d760-44ab-9808-a9198562027c, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,28,02b4ef3b-7e2c-481b-921c-00335e1a8b71, {8,"ОткрытьФайл",0,3, {1,4, {"ru_RU","ЗакрытьФайл"}, {"ru","Открыть файл"}, {"en","Открыть файл"}, {"uk","Открыть файл"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,36,1e2,0,0,1,0,0,0,0},364d3b8c-2897-4197-8e79-6c87179cd09e, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,36,1e2,0,0,1,0,0,0,0},23c752ed-9539-4074-945f-2a24661a9678, {8,"СохранитьКак",0,3, {1,3, {"ru","Сохранить как"}, {"en","Сохранить как"}, {"uk","Сохранить как"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,37,1e2,0,0,1,0,0,0,0},3053b29c-83b6-4b6c-a2a3-c16cabf96d76, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,37,1e2,0,0,1,0,0,0,0},53d7511e-904e-427c-94e0-539cea0bc3a5, {8,"Разделитель6",0,1, {1,1, {"ru","Действие"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,38,1e2,2,0,1,0,0,0,0},7f40e996-a49b-4761-971b-096e2ea429ec, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,38,1e2,2,0,1,0,0,0,0},5cbcfdfe-79d4-4e2b-b90c-39b7dd1c5082, {8,"Загрузить",0,3, {1,3, {"ru","Загрузить"}, {"en","Загрузить"}, {"uk","Загрузить"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,26,1e2,0,3,1,0,0,0,0},64dd495e-c748-4e2f-b83c-cff4678861e8, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,26,1e2,0,3,1,0,0,0,0},831383ac-705a-42a6-bdbc-ac134c8c9635, {8,"Разделитель2",0,1, {1,1, {"ru","Действие1"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,27,1e2,2,0,1,0,0,0,0},8982dba6-eca8-402d-866d-55fabc4db1e2, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,27,1e2,2,0,1,0,0,0,0},c08e697d-4f5e-4ea0-b8d1-5e6cb8715fc2, {8,"Трасса",0,1, {1,3, {"ru","Трасса"}, {"en","Трасса"}, {"uk","Трасса"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,30,1e2,0,3,1,0,0,0,0},5f704be0-d791-4af9-9522-26379771d4ef, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,30,1e2,0,3,1,0,0,0,0},86d8505f-2d62-4c50-82e1-2e84fb1136fe, {8,"Разделитель",0,1, {1,1, {"ru","Действие1"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,23,1e2,2,0,1,0,0,0,0},632bdbf2-67cb-4afc-a6e7-0b82b2d55ea2, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,23,1e2,2,0,1,0,0,0,0},7d6c83a0-e3d8-4dc8-9ec8-a79ba51d802a, {8,"НастройкаЧтенияТрассы",0,1, {1,3, {"ru","Настройка чтения"}, {"en","Настройка чтения"}, {"uk","Настройка чтения"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,28,1e2,0,0,1,0,0,0,0},1d13bb4c-2e6b-4a84-b717-f4b1f9cd3e21, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,28,1e2,0,0,1,0,0,0,0},b1ede406-e142-4491-9506-a1d8a0fcd2c6, {8,"Разделитель3",0,1, {1,1, {"ru","Действие1"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,29,1e2,2,0,1,0,0,0,0},2cdd39b8-2d65-4abc-84db-b89f091a5d57, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,29,1e2,2,0,1,0,0,0,0},9e116f76-45d3-4a12-b0fc-6636c18ea306, {8,"НастройкаЖурнала",0,2, {1,3, {"ru","Настройка записи"}, {"en","Настройка записи"}, {"uk","Настройка записи"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,24,1e2,0,3,1,0,0,0,0},ce27a602-54cb-412e-beb1-1049ed4f071c, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,24,1e2,0,3,1,0,0,0,0},246d5a55-8d23-44f5-84d1-cb54524547bf, {8,"Разделитель1",0,1, {1,1, {"ru","Действие1"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,25,1e2,2,0,1,0,0,0,0},b2bcc202-5ed7-465d-88a9-fe6446642381, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,25,1e2,2,0,1,0,0,0,0},2f667a22-382e-42b3-8e90-8c609e65513b, {8,"ОчиститьКаталогЖурнала",0,1, {1,3, {"ru","Очистить каталог"}, {"en","Очистить каталог"}, {"uk","Очистить каталог"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,22,1e2,0,3,1,0,0,0,0},3ae28f5f-54ba-4f95-9cc9-aa1f49e9bbd7, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,22,1e2,0,3,1,0,0,0,0},944d12a5-2d01-41e9-b02a-e6241569d560, {8,"Разделитель10",0,2, {1,1, {"ru","Действие"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,49,1e2,2,0,1,0,0,0,0},42eb6de5-33ef-406c-ad2b-401d12c33176, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,49,1e2,2,0,1,0,0,0,0},cc38c72c-81f3-4946-9a74-dece5128465a, {8,"ЖурналРегистрации",0,2, {1,3, {"ru","Журнал регистрации"}, {"en","Журнал регистрации"}, {"uk","Журнал регистрации"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,34,1e2,0,0,1,0,0,0,0},8e11b312-0f2e-48a5-9024-4b5cdfc4bebc, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,34,1e2,0,0,1,0,0,0,0},927c0131-12f6-4368-9a44-42c7e5336436, {8,"Разделитель5",0,1, {1,1, {"ru","Действие"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,33,1e2,2,0,1,0,0,0,0},e5931ccf-31e5-4d35-87c0-3d3162e91409, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,33,1e2,2,0,1,0,0,0,0},a2dae5d8-62fa-4a88-b97c-a5d4a686670b, {8,"КонверторТекстаБД",0,1, {1,3, {"ru","Конвертор текста БД"}, {"en","Конвертор текста БД"}, {"uk","Конвертор текста БД"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,32,1e2,0,0,1,0,0,0,0},d90a192c-9fd3-4923-9239-ec8438b29c83, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,32,1e2,0,0,1,0,0,0,0},29c69937-bd07-4799-9d06-e0e94a8b7a51, {8,"Разделитель7",0,1, {1,1, {"ru","Действие"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,42,1e2,2,0,1,0,0,0,0},26b4504b-6762-48a7-8193-13bcca54ec15, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,42,1e2,2,0,1,0,0,0,0},ea9f033a-54d9-40ab-a620-8aed25f1858b, {8,"ПросмотрТекстаПланаЗапроса",0,1, {1,3, {"ru","Плана запроса БД"}, {"en","Плана запроса БД"}, {"uk","Плана запроса БД"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,48,1e2,0,0,1,0,0,0,0},09cefa42-6773-4c38-b1d0-f7217b0818a6, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,48,1e2,0,0,1,0,0,0,0},555201c0-bacd-41be-89bc-29370ea8c1aa, {8,"Разделитель8",0,2, {1,1, {"ru","Действие"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,46,1e2,2,0,1,0,0,0,0},00eaed31-dc48-4cd9-b0cc-13344933e4e6, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,46,1e2,2,0,1,0,0,0,0},2157c4e8-c5a2-4b05-a835-e156b3ab0fd0, {8,"СхемаБД",0,1, {1,3, {"ru","Схема БД"}, {"en","Схема БД"}, {"uk","Схема БД"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,41,1e2,0,0,1,0,0,0,0},d081d396-e3b5-47a5-ae7d-d9af8b64d6ee, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,41,1e2,0,0,1,0,0,0,0},f010b6fb-5a54-41cb-8ec2-42d62b15b32f, {8,"Разделитель4",0,1, {1,1, {"ru","Действие"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,31,1e2,2,0,1,0,0,0,0},07ef6243-ba77-49c4-b5eb-bce536071b62, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,31,1e2,2,0,1,0,0,0,0},a567b713-48d5-4a26-a172-a548bbd57b40, {8,"ИТС",0,2, {1,3, {"ru","ИТС"}, {"en","ИТС"}, {"uk","ИТС"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,45,1e2,0,0,1,0,0,0,0},7d7be862-3f59-464d-a3fa-a38590fdca7f, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,45,1e2,0,0,1,0,0,0,0},f1c1e613-fd76-4a60-ad25-0a155f0987f3, {8,"Разделитель9",0,3, {1,1, {"ru","Действие"} -},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,47,1e2,2,0,1,0,0,0,0},7c06d369-5d0d-4376-9daa-3dc04577fd6f, +},0,4a991a32-fb27-422a-a99e-bfa0c561a5b4,47,1e2,2,0,1,0,0,0,0},307ed911-32a8-44a1-a0af-6ac1d46afc38, {8,"СохранитьНастройку",0,13, {1,3, {"ru","Сохранить настройку..."}, {"en","Сохранить настройку..."}, {"uk","Сохранить настройку..."} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,43,1e2,0,0,1,0,0,0,0},fc37481d-e537-4e18-a75a-71ae575f409f, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,43,1e2,0,0,1,0,0,0,0},d3375ecf-b621-448d-a3c4-ca9edf8c87dd, {8,"ЗагрузитьНастройку",0,8, {1,3, {"ru","Загрузить настройку..."}, {"en","Загрузить настройку..."}, {"uk","Загрузить настройку..."} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,44,1e2,0,0,1,0,1,0,0},f2d97ee6-b29e-48c9-b2d5-036ae9fdcc35, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,44,1e2,0,0,1,0,1,0,0},397e1e8e-7d01-4a35-9165-a10cd67fd2db, {8,"НовоеОкно",0,9, {1,3, {"ru","НовоеОкно"}, {"en","НовоеОкно"}, {"uk","НовоеОкно"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,19,1e2,0,0,1,0,0,0,0},de4fc5c7-7e96-485f-b4f9-b02eb88d6ab9, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,19,1e2,0,0,1,0,0,0,0},18b8cc3a-c300-4aa7-aa32-1fb60436c531, {8,"СтруктураФормы",0,4, {1,3, {"ru","Структура формы"}, {"en","Структура формы"}, {"uk","Структура формы"} -},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,40,1e2,0,0,1,0,0,0,0},c733003e-15bc-4fe4-84e0-f77670b7f33a, +},1,4a991a32-fb27-422a-a99e-bfa0c561a5b4,40,1e2,0,0,1,0,0,0,0},5129898a-83a2-4097-88d2-58f72e5d158f, {8,"ОПодсистеме",0,4, {1,3, {"ru","О подсистеме"}, @@ -7632,7 +7632,7 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,c80f05a1-3e43-4113-bdd2-cd8fc7704f0a,26,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,439ce68b-2169-4501-8403-11063637a2f2,26,0,0} }, {8,0,0,1000,25,1, {0, @@ -7777,128 +7777,7 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, {0},0,1,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,d80a01e7-2431-497b-9ae1-f9238f588b9f,250,1,23, -{7,dd0465cd-efa2-4c65-8acb-2ce1db2dfbd7,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,0,00000000-0000-0000-0000-000000000000,91, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,1561864d-710b-4dde-bb38-f401a725772b,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельЖурналРегистрацииУстановитьХронологическийПорядок", -{1,"КоманднаяПанельЖурналРегистрацииУстановитьХронологическийПорядок", -{1,1, -{"ru","Установить хронологический порядок"} -}, -{1,1, -{"ru","Установить хронологический порядок"} -}, -{1,1, -{"ru","Установить хронологический порядок"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},6, -{1,3, -{"ru","Установить порядок по хронологии начала/конца событий"}, -{"en","Установить порядок по хронологии начала/конца событий"}, -{"uk","Установить порядок по хронологии начала/конца событий"} -}, -{1,3, -{"ru","Установить порядок по хронологии начала/конца событий"}, -{"en","Установить порядок по хронологии начала/конца событий"}, -{"uk","Установить порядок по хронологии начала/конца событий"} -},2}, -{7,6acf850d-f522-46cf-ae29-cf21cba529cc,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,a9577f0b-1d5c-4771-b568-adf8ae03700e,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,303e3fcb-9370-4dc2-933b-e9ceb420c444,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельЖурналРегистрацииОткрытьСтрокуВОтдельномОкне", -{1,"КоманднаяПанельЖурналРегистрацииОткрытьСтрокуВОтдельномОкне", -{1,1, -{"ru","Открыть строку в отдельном окне"} -}, -{1,1, -{"ru","Открыть строку в отдельном окне"} -}, -{1,1, -{"ru","Открыть строку в отдельном окне"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть строку журнала в отдельном окне"}, -{"en","Открыть строку журнала в отдельном окне"}, -{"uk","Открыть строку журнала в отдельном окне"} -}, -{1,3, -{"ru","Открыть строку журнала в отдельном окне"}, -{"en","Открыть строку журнала в отдельном окне"}, -{"uk","Открыть строку журнала в отдельном окне"} -}, -{4,1, -{-7},"",-1,-1,1,0,""},2}, -{7,c1351173-a246-4c83-91ad-cafcc2b0e1b4,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,448f6d68-e1cc-4c68-8bcf-36e111a9d088,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Показывать подвал с итогами по выделенным строкам"}, -{"en","Показывать подвал с итогами по выделенным строкам"}, -{"uk","Показывать подвал с итогами по выделенным строкам"} -}, -{1,3, -{"ru","Показывать подвал с итогами по выделенным строкам"}, -{"en","Показывать подвал с итогами по выделенным строкам"}, -{"uk","Показывать подвал с итогами по выделенным строкам"} -}, -{4,1, -{0,3f21aca4-89b4-4f37-82cb-6e9370aa5481},"",-1,-1,0,0,""},2}, -{7,92357628-d180-4dbe-b56b-c9784a3a574e,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельЖурналРегистрацииТрассы", -{1,"КоманднаяПанельЖурналРегистрацииТрассы", -{1,1, -{"ru","Трассы"} -}, -{1,1, -{"ru","Трассы"} -}, -{1,1, -{"ru","Трассы"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},6, -{1,3, -{"ru","Найти в таблице трассы и выбрать одну для просмотра"}, -{"en","Найти в таблице трассы и выбрать одну для просмотра"}, -{"uk","Найти в таблице трассы и выбрать одну для просмотра"} -}, -{1,3, -{"ru","Найти в таблице трассы и выбрать одну для просмотра"}, -{"en","Найти в таблице трассы и выбрать одну для просмотра"}, -{"uk","Найти в таблице трассы и выбрать одну для просмотра"} -},2}, -{7,2dd19009-e212-4cc6-8217-acb07f9c0cb7,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,8520e289-5122-4e04-a3ba-221d71711fe9,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииНастройкаСобытия", {1,"КоманднаяПанельЖурналРегистрацииНастройкаСобытия", {1,1, @@ -7927,65 +7806,63 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, }, {4,1, {0,97d5c5e9-7727-4d49-8c8d-495cd7d883bf},"",-1,-1,0,0,""},2}, -{7,d9ed9489-f5a8-4393-881f-ba6c091c1c08,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", +{7,c8e9ff49-7b4c-455c-98b0-86acf6c45053,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельЖурналРегистрацииУстановитьХронологическийПорядок", +{1,"КоманднаяПанельЖурналРегистрацииУстановитьХронологическийПорядок", {1,1, -{"ru","Клс команда нажатие"} +{"ru","Установить хронологический порядок"} }, {1,1, -{"ru","Клс команда нажатие"} +{"ru","Установить хронологический порядок"} }, {1,1, -{"ru","Клс команда нажатие"} +{"ru","Установить хронологический порядок"} }, {4,0, {0},"",-1,-1,1,0,""}, {0,0,0} } -},7, +},6, {1,3, -{"ru","Сжать колонки в 2 раза"}, -{"en","Сжать колонки в 2 раза"}, -{"uk","Сжать колонки в 2 раза"} +{"ru","Установить порядок по хронологии начала/конца событий"}, +{"en","Установить порядок по хронологии начала/конца событий"}, +{"uk","Установить порядок по хронологии начала/конца событий"} }, {1,3, -{"ru","Сжать колонки в 2 раза"}, -{"en","Сжать колонки в 2 раза"}, -{"uk","Сжать колонки в 2 раза"} -}, -{4,1, -{0,2de8a30d-89da-497f-aa99-d42b887681ca},"",-1,-1,0,0,""},2}, -{7,4f5a5751-e355-489a-9c75-56691e1a9241,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КоманднаяПанельЖурналРегистрацииОчистить", -{1,"КоманднаяПанельЖурналРегистрацииОчистить", +{"ru","Установить порядок по хронологии начала/конца событий"}, +{"en","Установить порядок по хронологии начала/конца событий"}, +{"uk","Установить порядок по хронологии начала/конца событий"} +},2}, +{7,68e36d6c-c573-4d86-8563-2fe7a076b3fa,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,ec4c0a38-e087-4557-ba5f-eecaa2fcc13d,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельЖурналРегистрацииТрассы", +{1,"КоманднаяПанельЖурналРегистрацииТрассы", {1,1, -{"ru","Очистить"} +{"ru","Трассы"} }, {1,1, -{"ru","Очистить"} +{"ru","Трассы"} }, {1,1, -{"ru","Очистить"} +{"ru","Трассы"} }, {4,0, {0},"",-1,-1,1,0,""}, {0,0,0} } -},7, +},6, {1,3, -{"ru","Очистить"}, -{"en","Очистить"}, -{"uk","Очистить"} +{"ru","Найти в таблице трассы и выбрать одну для просмотра"}, +{"en","Найти в таблице трассы и выбрать одну для просмотра"}, +{"uk","Найти в таблице трассы и выбрать одну для просмотра"} }, {1,3, -{"ru","Очистить"}, -{"en","Очистить"}, -{"uk","Очистить"} -}, -{4,1, -{-2},"",-1,-1,1,0,""},2}, -{7,64dca382-daa0-4030-b33b-103b2bec0b39,1,e1692cc2-605b-4535-84dd-28440238746c, +{"ru","Найти в таблице трассы и выбрать одну для просмотра"}, +{"en","Найти в таблице трассы и выбрать одну для просмотра"}, +{"uk","Найти в таблице трассы и выбрать одну для просмотра"} +},2}, +{7,2b9c664a-dde3-4d73-b77d-bec48336da03,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииПоказатьВнутренниеСобытия", {1,"КоманднаяПанельЖурналРегистрацииПоказатьВнутренниеСобытия", {1,2, @@ -8017,7 +7894,101 @@ WYpttEXZOlvX0VtX4+EYKZZNDNp/OQHqDPKnw4vSlNSMWkhP},0},0,0,0,0,0,2e2}, }, {4,1, {0,7b52e456-3c9a-49f8-907e-4c21ee7f76ba},"",-1,-1,0,0,""},2}, -{7,e3bc1261-df5e-471d-b532-56c6cbe13880,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,233554a2-3eb2-4f23-a08f-c7f95d2c04af,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,6d2b6cff-bf00-418c-9891-2123ee2e139b,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Сжать колонки в 2 раза"}, +{"en","Сжать колонки в 2 раза"}, +{"uk","Сжать колонки в 2 раза"} +}, +{1,3, +{"ru","Сжать колонки в 2 раза"}, +{"en","Сжать колонки в 2 раза"}, +{"uk","Сжать колонки в 2 раза"} +}, +{4,1, +{0,2de8a30d-89da-497f-aa99-d42b887681ca},"",-1,-1,0,0,""},2}, +{7,91dd1257-4be5-4f32-873d-16dd20687334,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельЖурналРегистрацииОчистить", +{1,"КоманднаяПанельЖурналРегистрацииОчистить", +{1,1, +{"ru","Очистить"} +}, +{1,1, +{"ru","Очистить"} +}, +{1,1, +{"ru","Очистить"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Очистить"}, +{"en","Очистить"}, +{"uk","Очистить"} +}, +{1,3, +{"ru","Очистить"}, +{"en","Очистить"}, +{"uk","Очистить"} +}, +{4,1, +{-2},"",-1,-1,1,0,""},2}, +{7,3d9d2357-7790-4160-8fdb-2072a7598944,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,88d54073-265e-4e0a-8223-9ea6c1b64ebb,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КоманднаяПанельЖурналРегистрацииОткрытьСтрокуВОтдельномОкне", +{1,"КоманднаяПанельЖурналРегистрацииОткрытьСтрокуВОтдельномОкне", +{1,1, +{"ru","Открыть строку в отдельном окне"} +}, +{1,1, +{"ru","Открыть строку в отдельном окне"} +}, +{1,1, +{"ru","Открыть строку в отдельном окне"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть строку журнала в отдельном окне"}, +{"en","Открыть строку журнала в отдельном окне"}, +{"uk","Открыть строку журнала в отдельном окне"} +}, +{1,3, +{"ru","Открыть строку журнала в отдельном окне"}, +{"en","Открыть строку журнала в отдельном окне"}, +{"uk","Открыть строку журнала в отдельном окне"} +}, +{4,1, +{-7},"",-1,-1,1,0,""},2}, +{7,28a0a62b-aa48-4444-ab41-13d5e65a06f5,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,0,00000000-0000-0000-0000-000000000000,91, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, +{7,90f3aed6-5af4-441f-afc2-f7e71b03824e,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -8053,7 +8024,7 @@ AR4RjghZaoUqtnQZaGuwBIZuFwOC6NLrBTgCAJBwACQBhmZAQBUsC1WBAXt0KoPN ZxRwxH4TBe9gS0YqNWHOuJxUFdLJdbr7PDS9UFJKeQOFTgaIiHwcjF6JB3QohRt5 BgxkEQA7} },0,""},2}, -{7,9a91925f-0173-449e-8584-7e0d2b223209,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,135b80bc-da57-46b0-b0d1-c25747b0b532,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -8082,7 +8053,7 @@ BgxkEQA7} }, {4,1, {0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, -{7,3981499c-93db-4f78-98df-ba4065440db0,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,23e3b3ba-98e0-4fae-aac0-d3d876c4aaf2,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,d80a01e7-2431-497b-9ae1-f9238f588b9f,250},7, {1,3, {"ru","Список последних отборов"}, @@ -8096,10 +8067,39 @@ BgxkEQA7} }, {4,1, {0,8729a534-9f88-47b0-8d6b-ec213689580d},"",-1,-1,1,0,""},2}, -{7,7da34f2b-d0f6-4ee2-be02-c9a8efd5696b,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,7ff52bcc-b7a9-4125-bd72-4acd96150c12,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,0,00000000-0000-0000-0000-000000000000,93, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,d18c54db-78c1-464f-8d69-b5766d51bce2,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,920a65c4-a83c-4e44-b49e-ef619da75533,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Показывать подвал с итогами по выделенным строкам"}, +{"en","Показывать подвал с итогами по выделенным строкам"}, +{"uk","Показывать подвал с итогами по выделенным строкам"} +}, +{1,3, +{"ru","Показывать подвал с итогами по выделенным строкам"}, +{"en","Показывать подвал с итогами по выделенным строкам"}, +{"uk","Показывать подвал с итогами по выделенным строкам"} +}, +{4,1, +{0,3f21aca4-89b4-4f37-82cb-6e9370aa5481},"",-1,-1,0,0,""},2}, +{7,514ad4d2-57eb-40f7-b1e4-60dfaede808f,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -8129,9 +8129,9 @@ BgxkEQA7} {4,1, {0,e827fd85-4497-4a57-9846-8703be214c08},"",-1,-1,1,0,""}, {0,70,16},2}, -{7,208c0f1e-5705-442b-8813-cfb3af2738cc,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,2b731b26-0555-47a3-b2df-0c3af51549bc,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,7f265447-985f-43b0-b9cf-63bd202cc632,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,07b8fe10-dce5-4829-926e-19021259b13c,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналаКонсольКомпоновки", {1,"КоманднаяПанельЖурналаКонсольКомпоновки", {1,3, @@ -8166,9 +8166,9 @@ BgxkEQA7} }, {4,1, {0,98f09020-9b4d-48bc-96b4-84d954a633e8},"",14,2,1,0,""},2}, -{7,706a74b9-0177-4941-9db3-9ed1464ec464,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,cb79b1d3-8756-4e87-8915-9adf19e1bc0e,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,4d759f62-8340-4ccd-8d1d-c44ab39084e7,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,0786ed70-1ff7-4388-818c-acfcc42bde14,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииПоказыватьПанельИтогов", {1,"КоманднаяПанельЖурналРегистрацииПоказыватьПанельИтогов", {1,2, @@ -8200,9 +8200,9 @@ BgxkEQA7} }, {4,1, {0,65fd10fc-43c7-4d09-b386-e1aaa216efaa},"",-1,-1,0,0,""},2}, -{7,2a400e69-694e-4a91-95d9-28d4c2f9a1f5,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,a10c267e-b5c0-47c9-a547-193936c66671,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,3ee26f90-c71f-4f24-993d-4c9d90a18edf,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,e0ad3b1f-e869-461f-b261-0ec11a45f2b6,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельЖурналРегистрацииПоказыватьПанельСвойств", {1,"КоманднаяПанельЖурналРегистрацииПоказыватьПанельСвойств", {1,2, @@ -8234,123 +8234,123 @@ BgxkEQA7} }, {4,1, {0,65fd10fc-43c7-4d09-b386-e1aaa216efaa},"",-1,-1,0,0,""},2},2, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,23,1561864d-710b-4dde-bb38-f401a725772b, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,23,c8e9ff49-7b4c-455c-98b0-86acf6c45053, {8,"УстановитьХронологическийПорядок",0,1, {1,3, {"ru","Порядок по дате"}, {"en","Порядок по дате"}, {"uk","Порядок по дате"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,231,1e2,0,0,1,0,0,0,0},a9577f0b-1d5c-4771-b568-adf8ae03700e, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,231,1e2,0,0,1,0,0,0,0},68e36d6c-c573-4d86-8563-2fe7a076b3fa, {8,"Разделитель4",0,1, {1,1, {"ru","Действие7"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,143,1e2,2,0,1,0,0,0,0},92357628-d180-4dbe-b56b-c9784a3a574e, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,143,1e2,2,0,1,0,0,0,0},ec4c0a38-e087-4557-ba5f-eecaa2fcc13d, {8,"Трассы",0,1, {1,3, {"ru","Найти трассы"}, {"en","Найти трассы"}, {"uk","Найти трассы"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,234,1e2,0,0,1,0,0,0,0},c1351173-a246-4c83-91ad-cafcc2b0e1b4, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,234,1e2,0,0,1,0,0,0,0},233554a2-3eb2-4f23-a08f-c7f95d2c04af, {8,"Разделитель5",0,1, {1,1, {"ru","Действие"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,238,1e2,2,0,1,0,0,0,0},4f5a5751-e355-489a-9c75-56691e1a9241, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,238,1e2,2,0,1,0,0,0,0},91dd1257-4be5-4f32-873d-16dd20687334, {8,"Очистить",0,1, {1,3, {"ru","Очистить"}, {"en","Очистить"}, {"uk","Очистить"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,227,1e2,0,3,1,0,0,0,0},6acf850d-f522-46cf-ae29-cf21cba529cc, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,227,1e2,0,3,1,0,0,0,0},3d9d2357-7790-4160-8fdb-2072a7598944, {8,"Разделитель1",0,2, {1,1, {"ru","Действие"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,247,1e2,2,0,1,0,0,0,0},303e3fcb-9370-4dc2-933b-e9ceb420c444, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,247,1e2,2,0,1,0,0,0,0},88d54073-265e-4e0a-8223-9ea6c1b64ebb, {8,"ОткрытьСтрокуВОтдельномОкне",0,1, {1,3, {"ru","Открыть строку"}, {"en","Открыть строку"}, {"uk","Открыть строку"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,233,1e2,0,0,1,0,0,0,0},64dca382-daa0-4030-b33b-103b2bec0b39, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,233,1e2,0,0,1,0,0,0,0},2b9c664a-dde3-4d73-b77d-bec48336da03, {8,"ПоказатьВнутренниеСобытия",0,1, {1,3, {"ru","Показать внутренние события "}, {"en","Показать внутренние события "}, {"uk","Показать внутренние события "} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,243,1e2,0,0,1,0,0,0,0},d9ed9489-f5a8-4393-881f-ba6c091c1c08, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,243,1e2,0,0,1,0,0,0,0},6d2b6cff-bf00-418c-9891-2123ee2e139b, {8,"СжатьКолонки",0,2, {1,3, {"ru","Сжать"}, {"en","Сжать"}, {"uk","Сжать"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,242,1e2,0,0,1,0,0,0,0},dd0465cd-efa2-4c65-8acb-2ce1db2dfbd7, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,242,1e2,0,0,1,0,0,0,0},28a0a62b-aa48-4444-ab41-13d5e65a06f5, {8,"Действие2",0,1, {1,1, {"#","Действие2"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,182,1e2,0,0,1,0,0,0,0},e3bc1261-df5e-471d-b532-56c6cbe13880, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,182,1e2,0,0,1,0,0,0,0},90f3aed6-5af4-441f-afc2-f7e71b03824e, {8,"МенеджерТабличногоПоля",0,4, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,219,1e2,0,0,1,0,0,0,0},9a91925f-0173-449e-8584-7e0d2b223209, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,219,1e2,0,0,1,0,0,0,0},135b80bc-da57-46b0-b0d1-c25747b0b532, {8,"ОтборБезЗначенияВТекущейКолонке",0,1, {1,3, {"ru","Отбор без значения"}, {"en","Отбор без значения"}, {"uk","Отбор без значения"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,216,1e2,0,0,1,0,0,0,0},3981499c-93db-4f78-98df-ba4065440db0, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,216,1e2,0,0,1,0,0,0,0},23e3b3ba-98e0-4fae-aac0-d3d876c4aaf2, {8,"ПоследниеОтборы",0,5, {1,3, {"ru","Выбрать"}, {"en","Выбрать"}, {"uk","Выбрать"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,249,1e2,1,0,1,0,0,0,0},7da34f2b-d0f6-4ee2-be02-c9a8efd5696b, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,249,1e2,1,0,1,0,0,0,0},7ff52bcc-b7a9-4125-bd72-4acd96150c12, {8,"Действие1",0,1, {1,1, {"#","Действие1"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,181,1e2,0,0,1,0,0,0,0},448f6d68-e1cc-4c68-8bcf-36e111a9d088, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,181,1e2,0,0,1,0,0,0,0},920a65c4-a83c-4e44-b49e-ef619da75533, {8,"ПоказыватьИтоги",0,3, {1,3, {"ru","Итоги"}, {"en","Итоги"}, {"uk","Итоги"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,248,1e2,0,0,1,0,0,0,0},d18c54db-78c1-464f-8d69-b5766d51bce2, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,248,1e2,0,0,1,0,0,0,0},514ad4d2-57eb-40f7-b1e4-60dfaede808f, {8,"РазличныеЗначенияКолонки",0,2, {1,3, {"ru","Значения колонки"}, {"en","Значения колонки"}, {"uk","Значения колонки"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,245,1e2,0,0,1,0,0,0,0},208c0f1e-5705-442b-8813-cfb3af2738cc, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,245,1e2,0,0,1,0,0,0,0},2b731b26-0555-47a3-b2df-0c3af51549bc, {8,"Разделитель",0,1, {1,1, {"ru","Действие9"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,204,1e2,2,0,1,0,0,0,0},2dd19009-e212-4cc6-8217-acb07f9c0cb7, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,204,1e2,2,0,1,0,0,0,0},8520e289-5122-4e04-a3ba-221d71711fe9, {8,"НастройкаСобытия",0,3, {1,3, {"ru","Событие"}, {"en","Событие"}, {"uk","Событие"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,222,1e2,0,0,1,0,0,0,0},7f265447-985f-43b0-b9cf-63bd202cc632, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,222,1e2,0,0,1,0,0,0,0},07b8fe10-dce5-4829-926e-19021259b13c, {8,"КонсольКомпоновки",0,1, {1,3, {"ru","Консоль компоновки"}, {"en","Консоль компоновки"}, {"uk","Консоль компоновки"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,205,1e2,0,0,1,0,0,0,0},706a74b9-0177-4941-9db3-9ed1464ec464, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,205,1e2,0,0,1,0,0,0,0},cb79b1d3-8756-4e87-8915-9adf19e1bc0e, {8,"Разделитель3",0,1, {1,1, {"ru","Действие"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,237,1e2,2,0,1,0,0,0,0},4d759f62-8340-4ccd-8d1d-c44ab39084e7, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,237,1e2,2,0,1,0,0,0,0},0786ed70-1ff7-4388-818c-acfcc42bde14, {8,"ПоказыватьПанельИтогов",0,1, {1,3, {"ru","Итоги"}, {"en","Итоги"}, {"uk","Итоги"} -},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,239,1e2,0,3,1,1,0,0,0},2a400e69-694e-4a91-95d9-28d4c2f9a1f5, +},1,d80a01e7-2431-497b-9ae1-f9238f588b9f,239,1e2,0,3,1,1,0,0,0},a10c267e-b5c0-47c9-a547-193936c66671, {8,"Разделитель6",0,1, {1,1, {"ru","Действие3"} -},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,240,1e2,2,0,1,0,0,0,0},3ee26f90-c71f-4f24-993d-4c9d90a18edf, +},0,d80a01e7-2431-497b-9ae1-f9238f588b9f,240,1e2,2,0,1,0,0,0,0},e0ad3b1f-e869-461f-b261-0ec11a45f2b6, {8,"ПоказыватьПанельСвойств",0,1, {1,3, {"ru","Свойства"}, @@ -26637,7 +26637,7 @@ BgxkEQA7} {0} } } -},1000,596,1,0,1,4,4,2348,1000,596,96}, +},1000,596,1,0,1,4,4,2413,1000,596,96}, { {0},176, {65, diff --git a/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Ext/ObjectModule.bsl b/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Ext/ObjectModule.bsl index bd60fd8d1..0adaf9286 100644 --- a/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Ext/ObjectModule.bsl +++ b/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Ext/ObjectModule.bsl @@ -2,7 +2,7 @@ //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; #Если Клиент Тогда Перем мПараметры Экспорт; @@ -83,7 +83,7 @@ //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); -//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); +//ирПортативный ирКлиент = ирПортативный.ПолучитьОбщийМодульЛкс("ирКлиент"); Описание = "Здесь задается выражение для вычисления на встроенном языке. Для обращения к значениям параметров служит переменная Параметры."; #КонецЕсли diff --git a/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form.bin b/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form.bin index 38346566d..0665c7b0b 100644 Binary files a/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form.bin and b/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form.bin differ diff --git a/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form/Module.bsl index 1c08f3baa..05fcabec3 100644 --- a/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form/Module.bsl @@ -71,7 +71,7 @@ Процедура ОсновныеДействияФормыОК(Кнопка = Неопределено) ЗначениеВыбора = Новый Структура("Формула", СокрЛП(ЭлементыФормы.ВыражениеВнутреннегоЯзыка.ПолучитьТекст())); - ирОбщий.ПрименитьИзмененияИЗакрытьФормуЛкс(ЭтаФорма, ЗначениеВыбора); + ирКлиент.ПрименитьИзмененияИЗакрытьФормуЛкс(ЭтаФорма, ЗначениеВыбора); КонецПроцедуры @@ -108,35 +108,35 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Ответ = ирОбщий.ЗапроситьСохранениеДанныхФормыЛкс(ЭтаФорма, Отказ); + Ответ = ирКлиент.ЗапроситьСохранениеДанныхФормыЛкс(ЭтаФорма, Отказ); Если Ответ = КодВозвратаДиалога.Да Тогда ОсновныеДействияФормыОК(); КонецЕсли; КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирВводВыраженияВстроенногоЯзыка.Форма.Форма"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирВводВыраженияВстроенногоЯзыка.Форма.Форма"); diff --git a/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form/form.txt b/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form/form.txt index 1a13bbf1a..a67dac777 100644 --- a/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form/form.txt +++ b/src/DataProcessors/ирВводВыраженияВстроенногоЯзыка/Forms/Форма/Ext/Form/form.txt @@ -114,7 +114,7 @@ {0},7,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,2,0,1, {5,75f9e26a-cbd0-46e7-9075-cf010750da98,7,1,3, -{7,f3f44c9d-07ed-407e-ab00-54519e0a9ba1,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,4af4fe54-255d-41a1-9d1e-f3623066e440,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ОсновныеДействияФормыОК", {1,"ОсновныеДействияФормыОК", {1,1, @@ -137,22 +137,22 @@ {"uk","Записать формулу"} }, {1,0},1}, -{7,22b7b46c-30fc-4076-8271-029aa24a952c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,78b6ab1f-1160-41f5-9901-dc24cf6a392c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,35e48302-23c4-442d-b389-9327a1be075e,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,4f1087ad-64d2-44e0-a812-6d26d82df3e4,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,142, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0},0,1},0,1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,3,f3f44c9d-07ed-407e-ab00-54519e0a9ba1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,3,4af4fe54-255d-41a1-9d1e-f3623066e440, {8,"ОК",0,2, {1,3, {"ru"," ОК "}, {"en"," ОК "}, {"uk"," ОК "} -},1,75f9e26a-cbd0-46e7-9075-cf010750da98,4,1e2,0,1,1,0,0,0,0},22b7b46c-30fc-4076-8271-029aa24a952c, +},1,75f9e26a-cbd0-46e7-9075-cf010750da98,4,1e2,0,1,1,0,0,0,0},78b6ab1f-1160-41f5-9901-dc24cf6a392c, {8,"Разделитель",0,1, {1,1, {"ru","Действие"} -},0,75f9e26a-cbd0-46e7-9075-cf010750da98,7,1e2,2,0,1,0,0,0,0},35e48302-23c4-442d-b389-9327a1be075e, +},0,75f9e26a-cbd0-46e7-9075-cf010750da98,7,1e2,2,0,1,0,0,0,0},4f1087ad-64d2-44e0-a812-6d26d82df3e4, {8,"Закрыть",0,1, {1,3, {"ru","Закрыть"}, @@ -163,7 +163,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,256855e6-56b2-403c-b403-c6abd983ad7a,4,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,aa48a4a1-da08-4886-8c8b-5539b4f0fb5f,4,0,0} }, {8,0,267,400,292,1, {0, @@ -698,7 +698,7 @@ {0} } } -},400,292,1,0,1,4,4,234,400,292,96}, +},400,292,1,0,1,4,4,241,400,292,96}, { {7},13, {3, diff --git a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Commands/Команда1/Ext/CommandModule.bsl b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Commands/Команда1/Ext/CommandModule.bsl index efc57f953..ef75a124d 100644 --- a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Commands/Команда1/Ext/CommandModule.bsl +++ b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Commands/Команда1/Ext/CommandModule.bsl @@ -1,5 +1,5 @@  &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ирОбщий.ОткрытьФормуЛкс("Обработка.ирВыгрузкаЗагрузкаДанныхЧерезФайл.Форма"); + ирКлиент.ОткрытьФормуЛкс("Обработка.ирВыгрузкаЗагрузкаДанныхЧерезФайл.Форма"); КонецПроцедуры diff --git a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Ext/ObjectModule.bsl b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Ext/ObjectModule.bsl index a354ed913..26e82cbb1 100644 --- a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Ext/ObjectModule.bsl +++ b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Ext/ObjectModule.bsl @@ -2,7 +2,7 @@ //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; Перем мПоследнийПрочитанныйОбъект Экспорт; Перем мСериализатор Экспорт; @@ -733,7 +733,7 @@ //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); -//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); +//ирПортативный ирКлиент = ирПортативный.ПолучитьОбщийМодульЛкс("ирКлиент"); ЭтотОбъект.КоличествоПотоков = 1; ЭтотОбъект.КоличествоОбъектовВПорции = 10; diff --git a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form.bin b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form.bin index 6c2e179c8..f4b904d3b 100644 Binary files a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form.bin and b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form.bin differ diff --git a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form/Module.bsl index 5b2ce3666..836891ab3 100644 --- a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form/Module.bsl @@ -5,7 +5,7 @@ Процедура ЗагрузитьНастройкуВФорме(НастройкаФормы, ДопПараметры) Экспорт - ирОбщий.ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); + ирКлиент.ЗагрузитьНастройкуФормыЛкс(ЭтаФорма, НастройкаФормы); НастроитьЭлементыФормы(); КонецПроцедуры @@ -95,7 +95,7 @@ // Предопределеный метод Процедура ПроверкаЗавершенияФоновыхЗаданий() Экспорт - ирОбщий.ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма); + ирКлиент.ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма); КонецПроцедуры @@ -133,7 +133,7 @@ ДобавитьСобытиеОбменаПоОбъекту(мПоследнийПрочитанныйОбъект, "Последний считанный из файла объект", Ложь); КонецЕсли; КонецЕсли; - ирОбщий.ОповеститьФормыПодсистемыЛкс("ЗаписанОбъект", , ЭтаФорма); + ирКлиент.ОповеститьФормыПодсистемыЛкс("ЗаписанОбъект", , ЭтаФорма); КонецПроцедуры @@ -150,32 +150,32 @@ Процедура ИмяФайлаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура ИмяФайлаПриИзменении(Элемент) - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка) - лПолноеИмяФайла = ирОбщий.ВыбратьФайлЛкс(, "zip",, Элемент.Значение); + лПолноеИмяФайла = ирКлиент.ВыбратьФайлЛкс(, "zip",, Элемент.Значение); Если лПолноеИмяФайла <> Неопределено Тогда - ирОбщий.ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, лПолноеИмяФайла); + ирКлиент.ИнтерактивноЗаписатьВПолеВводаЛкс(Элемент, лПолноеИмяФайла); КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); - ирОбщий.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.СоздатьМенеджерСохраненияНастроекФормыЛкс(ЭтаФорма); Панель1ПриСменеСтраницы(); - ирОбщий.УстановитьДоступностьВыполненияНаСервереЛкс(ЭтаФорма); - ирОбщий.НастроитьПоляВводаПараметровПотоковЛкс(ЭтаФорма); + ирКлиент.УстановитьДоступностьВыполненияНаСервереЛкс(ЭтаФорма); + ирКлиент.НастроитьПоляВводаПараметровПотоковЛкс(ЭтаФорма); КонецПроцедуры @@ -194,32 +194,32 @@ Процедура УзелОтправительНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура УзелОтправительПриИзменении(Элемент) - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура УзелОтбораОбъектовПриИзменении(Элемент) - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура УзелОтбораОбъектовНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры Процедура ДействияФормыРедакторИзмененийНаУзле(Кнопка) Если ЗначениеЗаполнено(УзелВыборкиДанных) Тогда - Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирРедакторИзмененийНаУзлах.Форма"); + Форма = ирКлиент.ПолучитьФормуЛкс("Обработка.ирРедакторИзмененийНаУзлах.Форма"); Форма.ПараметрУзелОбмена = УзелВыборкиДанных; Форма.Открыть(); КонецЕсли; @@ -228,61 +228,61 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры Процедура СтруктураКоманднойПанелиНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры Процедура ДействияФормыПараметрыЗаписи(Кнопка) - ирОбщий.ОткрытьОбщиеПараметрыЗаписиЛкс(); + ирКлиент.ОткрытьОбщиеПараметрыЗаписиЛкс(); КонецПроцедуры Процедура РезультатЗагрузкиПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); КонецПроцедуры Процедура РезультатЗагрузкиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки); КонецПроцедуры Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры @@ -302,13 +302,13 @@ Процедура ТипыВыгружаемыеПоСсылкеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, "ТипыВыгружаемыеПоСсылке"); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, "ТипыВыгружаемыеПоСсылке"); КонецПроцедуры Процедура ТипыВыгружаемыеПоСсылкеПриИзменении(Элемент) - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, "ТипыВыгружаемыеПоСсылке"); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, "ТипыВыгружаемыеПоСсылке"); КонецПроцедуры @@ -340,6 +340,6 @@ КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирВыгрузкаЗагрузкаДанныхЧерезФайл.Форма.Форма"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирВыгрузкаЗагрузкаДанныхЧерезФайл.Форма.Форма"); diff --git a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form/form.txt b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form/form.txt index db43179a3..f88dd5aa5 100644 --- a/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form/form.txt +++ b/src/DataProcessors/ирВыгрузкаЗагрузкаДанныхЧерезФайл/Forms/Форма/Ext/Form/form.txt @@ -113,7 +113,7 @@ {0},4,1,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,0,1, {5,e61ec258-df81-4716-a7e2-d75c858d35c9,61,1,11, -{7,1f6b7014-48e5-45ac-83ff-592f90e0094b,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,269d33eb-ed8e-4125-b420-e1b69dedb760,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыВыполнить", {1,"ДействияФормыВыполнить", {1,1, @@ -140,7 +140,69 @@ {"en","Выполнить"}, {"uk","Выполнить"} },1}, -{7,22a521e1-6420-4a91-bec1-298caa800c3b,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,7d9208da-bd40-4387-93e6-3610de40591b,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыРедакторИзмененийНаУзле", +{1,"ДействияФормыРедакторИзмененийНаУзле", +{1,1, +{"ru","Редактор изменений на узле"} +}, +{1,1, +{"ru","Редактор изменений на узле"} +}, +{1,1, +{"ru","Редактор изменений на узле"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Редактор изменений на узле выборки данных"}, +{"en","Редактор изменений на узле выборки данных"}, +{"uk","Редактор изменений на узле выборки данных"} +}, +{1,3, +{"ru","Редактор изменений на узле выборки данных"}, +{"en","Редактор изменений на узле выборки данных"}, +{"uk","Редактор изменений на узле выборки данных"} +}, +{4,1, +{0,022247f7-2b7d-4dd2-b28f-773fc6fe97d1},"",-1,-1,1,0,""},1}, +{7,05170952-6b6d-4b5e-abfe-6a80ed966ea5,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,9ee3ffb8-4292-46bf-b168-6249604d25d1,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,d9859ba0-e543-42a8-bc1e-6f45ba029d4f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,8c4990fe-236c-426c-9ce0-d59bea6a486b,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыПараметрыЗаписи", +{1,"ДействияФормыПараметрыЗаписи", +{1,1, +{"ru","Параметры записи"} +}, +{1,1, +{"ru","Параметры записи"} +}, +{1,1, +{"ru","Параметры записи"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},6, +{1,3, +{"ru","Общие параметры записи"}, +{"en","Общие параметры записи"}, +{"uk","Общие параметры записи"} +}, +{1,3, +{"ru","Общие параметры записи"}, +{"en","Общие параметры записи"}, +{"uk","Общие параметры записи"} +},1}, +{7,3528717e-1eef-4949-8279-6f96b8bbd289,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -170,38 +232,7 @@ {4,1, {0,23f940bf-7381-4c2b-85a1-e541ed428042},"",14,8,1,0,""}, {0,0,0},2}, -{7,0fc80691-bd1c-412f-94ab-69a4cf1b2e97,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,a982d336-0448-4576-9062-5d900de6dd07,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыРедакторИзмененийНаУзле", -{1,"ДействияФормыРедакторИзмененийНаУзле", -{1,1, -{"ru","Редактор изменений на узле"} -}, -{1,1, -{"ru","Редактор изменений на узле"} -}, -{1,1, -{"ru","Редактор изменений на узле"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Редактор изменений на узле выборки данных"}, -{"en","Редактор изменений на узле выборки данных"}, -{"uk","Редактор изменений на узле выборки данных"} -}, -{1,3, -{"ru","Редактор изменений на узле выборки данных"}, -{"en","Редактор изменений на узле выборки данных"}, -{"uk","Редактор изменений на узле выборки данных"} -}, -{4,1, -{0,022247f7-2b7d-4dd2-b28f-773fc6fe97d1},"",-1,-1,1,0,""},1}, -{7,424b7ef6-0e6d-40ed-b639-a7356c94f93f,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,406227f1-b0a7-44bb-a309-0f452ebc2f61,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -230,38 +261,7 @@ }, {4,1, {0,a7707ed1-39b0-418f-974d-4d500d27a9c6},"",-1,-1,1,0,""},2}, -{7,c4645c73-8063-4655-9f4c-2db004f2e946,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,249d0a2d-22e5-44b0-b5ea-a091c2ba80b4,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыПараметрыЗаписи", -{1,"ДействияФормыПараметрыЗаписи", -{1,1, -{"ru","Параметры записи"} -}, -{1,1, -{"ru","Параметры записи"} -}, -{1,1, -{"ru","Параметры записи"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},6, -{1,3, -{"ru","Общие параметры записи"}, -{"en","Общие параметры записи"}, -{"uk","Общие параметры записи"} -}, -{1,3, -{"ru","Общие параметры записи"}, -{"en","Общие параметры записи"}, -{"uk","Общие параметры записи"} -},1}, -{7,8550696d-6d61-470b-954b-d9180be54958,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,5020ab77-2eb4-453b-b933-8001e4e3fbc2,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,1b8601e4-da29-4706-99bd-436f0ebff375,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -290,7 +290,7 @@ }, {4,1, {0,eb47324b-85f9-4172-9315-bba8015d9970},"",-1,-1,1,0,""},1}, -{7,db8f9e01-df51-4fc5-bf66-34e14dc05a12,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,8a0d6351-ec30-4f17-ada8-d38365e3f462,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -319,7 +319,7 @@ }, {4,1, {0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1}, -{7,540422b0-3857-4227-b3d1-16b4d8846f91,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,a8c812fa-e954-46c2-beda-1201fcb293c3,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -348,61 +348,61 @@ }, {4,1, {0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,11,1f6b7014-48e5-45ac-83ff-592f90e0094b, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,11,269d33eb-ed8e-4125-b420-e1b69dedb760, {8,"Выполнить",0,1, {1,3, {"ru","Выполнить"}, {"en","Выполнить"}, {"uk","Выполнить"} -},1,e61ec258-df81-4716-a7e2-d75c858d35c9,47,1e2,0,0,1,0,0,0,0},0fc80691-bd1c-412f-94ab-69a4cf1b2e97, +},1,e61ec258-df81-4716-a7e2-d75c858d35c9,47,1e2,0,0,1,0,0,0,0},05170952-6b6d-4b5e-abfe-6a80ed966ea5, {8,"Разделитель",0,1, {1,1, {"ru","Действие"} -},0,e61ec258-df81-4716-a7e2-d75c858d35c9,48,1e2,2,0,1,0,0,0,0},a982d336-0448-4576-9062-5d900de6dd07, +},0,e61ec258-df81-4716-a7e2-d75c858d35c9,48,1e2,2,0,1,0,0,0,0},7d9208da-bd40-4387-93e6-3610de40591b, {8,"РедакторИзмененийНаУзле",0,2, {1,3, {"ru","Редактор изменений"}, {"en","Редактор изменений"}, {"uk","Редактор изменений"} -},1,e61ec258-df81-4716-a7e2-d75c858d35c9,52,1e2,0,3,1,0,0,0,0},c4645c73-8063-4655-9f4c-2db004f2e946, +},1,e61ec258-df81-4716-a7e2-d75c858d35c9,52,1e2,0,3,1,0,0,0,0},d9859ba0-e543-42a8-bc1e-6f45ba029d4f, {8,"Разделитель1",0,1, {1,1, {"ru","Действие2"} -},0,e61ec258-df81-4716-a7e2-d75c858d35c9,53,1e2,2,0,1,0,0,0,0},249d0a2d-22e5-44b0-b5ea-a091c2ba80b4, +},0,e61ec258-df81-4716-a7e2-d75c858d35c9,53,1e2,2,0,1,0,0,0,0},8c4990fe-236c-426c-9ce0-d59bea6a486b, {8,"ПараметрыЗаписи",0,2, {1,3, {"ru","Параметры записи"}, {"en","Параметры записи"}, {"uk","Параметры записи"} -},1,e61ec258-df81-4716-a7e2-d75c858d35c9,56,1e2,0,0,1,0,0,0,0},8550696d-6d61-470b-954b-d9180be54958, +},1,e61ec258-df81-4716-a7e2-d75c858d35c9,56,1e2,0,0,1,0,0,0,0},9ee3ffb8-4292-46bf-b168-6249604d25d1, {8,"Разделитель7",0,3, {1,1, {"ru","Действие6"} -},0,e61ec258-df81-4716-a7e2-d75c858d35c9,55,1e2,2,0,1,0,0,0,0},22a521e1-6420-4a91-bec1-298caa800c3b, +},0,e61ec258-df81-4716-a7e2-d75c858d35c9,55,1e2,2,0,1,0,0,0,0},3528717e-1eef-4949-8279-6f96b8bbd289, {8,"СохранитьНастройку",0,11, {1,3, {"ru","Сохранить настройку..."}, {"en","Сохранить настройку..."}, {"uk","Сохранить настройку..."} -},1,e61ec258-df81-4716-a7e2-d75c858d35c9,61,1e2,0,0,1,0,0,0,0},424b7ef6-0e6d-40ed-b639-a7356c94f93f, +},1,e61ec258-df81-4716-a7e2-d75c858d35c9,61,1e2,0,0,1,0,0,0,0},406227f1-b0a7-44bb-a309-0f452ebc2f61, {8,"ЗагрузитьНастройку",0,6, {1,3, {"ru","Загрузить настройку..."}, {"en","Загрузить настройку..."}, {"uk","Загрузить настройку..."} -},1,e61ec258-df81-4716-a7e2-d75c858d35c9,60,1e2,0,0,1,0,1,0,0},5020ab77-2eb4-453b-b933-8001e4e3fbc2, +},1,e61ec258-df81-4716-a7e2-d75c858d35c9,60,1e2,0,0,1,0,1,0,0},1b8601e4-da29-4706-99bd-436f0ebff375, {8,"НовоеОкно",0,6, {1,3, {"ru","НовоеОкно"}, {"en","НовоеОкно"}, {"uk","НовоеОкно"} -},1,e61ec258-df81-4716-a7e2-d75c858d35c9,40,1e2,0,0,1,0,0,0,0},db8f9e01-df51-4fc5-bf66-34e14dc05a12, +},1,e61ec258-df81-4716-a7e2-d75c858d35c9,40,1e2,0,0,1,0,0,0,0},8a0d6351-ec30-4f17-ada8-d38365e3f462, {8,"СтруктураФормы",0,4, {1,3, {"ru","Структура формы"}, {"en","Структура формы"}, {"uk","Структура формы"} -},1,e61ec258-df81-4716-a7e2-d75c858d35c9,54,1e2,0,0,1,0,0,0,0},540422b0-3857-4227-b3d1-16b4d8846f91, +},1,e61ec258-df81-4716-a7e2-d75c858d35c9,54,1e2,0,0,1,0,0,0,0},a8c812fa-e954-46c2-beda-1201fcb293c3, {8,"ОПодсистеме",0,2, {1,3, {"ru","О подсистеме"}, @@ -413,7 +413,7 @@ {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,4918caa1-8ad0-425d-903e-a74c51b9e749,47,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,617b47c0-dd9c-47ed-b15c-4bdf6952f7fc,47,0,0} }, {8,0,0,827,25,1, {0, @@ -2815,10 +2815,16 @@ {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,2600b634-5a3e-444b-b6ce-eea3617b93b8,30,1,10, -{7,110e1e20-abf2-4ef9-b10f-f722f2c96950,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,64b713fe-8c97-4bef-b9c7-a68d901d7e96,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,0,00000000-0000-0000-0000-000000000000,93, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, +{7,ab32654e-bb7d-4d84-8960-daeb2142db88,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,88, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,4b6ff511-06e1-43a2-bc34-9a70ceee86a0,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,13102e1f-394e-4dbb-bd77-a82b7cb1cfe3,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,0,00000000-0000-0000-0000-000000000000,91, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, +{7,b07a4f5f-0274-4e30-9489-279f8bf4e960,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -2847,42 +2853,10 @@ }, {4,1, {0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, -{7,6ee815b9-44ff-4553-b83d-f5853259c6e2,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,7560b2a7-e116-4691-b225-7464289de8d2,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,89, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,2}, -{7,05198612-0fa7-47ac-b436-184260b5c7ba,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},15, -{1,3, -{"ru","Различные значения колонки"}, -{"en","Различные значения колонки"}, -{"uk","Различные значения колонки"} -}, -{1,3, -{"ru","Различные значения колонки"}, -{"en","Различные значения колонки"}, -{"uk","Различные значения колонки"} -}, -{4,1, -{0,e827fd85-4497-4a57-9846-8703be214c08},"",-1,-1,1,0,""}, -{0,70,16},2}, -{7,71a6a6b2-493e-4768-9a7b-2c951a18a11a,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,643f5115-2343-4e1f-a917-cdefe8c788eb,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,baad1ae8-32a6-4d04-a4f9-e12a1ad66a49,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -2918,15 +2892,41 @@ AR4RjghZaoUqtnQZaGuwBIZuFwOC6NLrBTgCAJBwACQBhmZAQBUsC1WBAXt0KoPN ZxRwxH4TBe9gS0YqNWHOuJxUFdLJdbr7PDS9UFJKeQOFTgaIiHwcjF6JB3QohRt5 BgxkEQA7} },0,""},2}, -{7,45aca5ab-1178-4e4a-8001-0ec8c1202f4a,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,0,00000000-0000-0000-0000-000000000000,93, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,1f7c4197-694c-4233-92ac-d30ec120ef4e,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,0,00000000-0000-0000-0000-000000000000,91, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,9e033736-8aff-451e-80ff-6eb145297942,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,82f080f8-6c43-4d22-9870-26e1c9795eb7,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,5f5430d3-3b17-4606-bb4b-4aec0cef4e01,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,25990992-d968-4bc8-a604-0d7e2f4fc972,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},15, +{1,3, +{"ru","Различные значения колонки"}, +{"en","Различные значения колонки"}, +{"uk","Различные значения колонки"} +}, +{1,3, +{"ru","Различные значения колонки"}, +{"en","Различные значения колонки"}, +{"uk","Различные значения колонки"} +}, +{4,1, +{0,e827fd85-4497-4a57-9846-8703be214c08},"",-1,-1,1,0,""}, +{0,70,16},2}, +{7,9a9b3e23-22a5-4e30-89b3-432b9be71855,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,126d6648-20e8-400e-b798-0ec2f990e74c,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КоманднаяПанельРезультатЗагрузкиРедакторОбъектаБД", {1,"КоманднаяПанельРезультатЗагрузкиРедакторОбъектаБД", {1,1, @@ -2955,47 +2955,47 @@ BgxkEQA7} }, {4,1, {0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""},2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,10,110e1e20-abf2-4ef9-b10f-f722f2c96950, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,10,ab32654e-bb7d-4d84-8960-daeb2142db88, {8,"Действие7",0,1, {1,1, {"#","Действие7"} -},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,21,1e2,0,0,1,0,1,0,0},6ee815b9-44ff-4553-b83d-f5853259c6e2, +},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,21,1e2,0,0,1,0,1,0,0},7560b2a7-e116-4691-b225-7464289de8d2, {8,"Действие8",0,1, {1,1, {"#","Действие8"} -},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,22,1e2,0,0,1,0,1,0,0},71a6a6b2-493e-4768-9a7b-2c951a18a11a, +},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,22,1e2,0,0,1,0,1,0,0},82f080f8-6c43-4d22-9870-26e1c9795eb7, {8,"Разделитель",0,1, -{1,0},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,17,1e2,2,0,1,0,1,0,0},643f5115-2343-4e1f-a917-cdefe8c788eb, +{1,0},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,17,1e2,2,0,1,0,1,0,0},baad1ae8-32a6-4d04-a4f9-e12a1ad66a49, {8,"МенеджерТабличногоПоля",0,5, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,2600b634-5a3e-444b-b6ce-eea3617b93b8,23,1e2,0,0,1,0,0,0,0},05198612-0fa7-47ac-b436-184260b5c7ba, +},1,2600b634-5a3e-444b-b6ce-eea3617b93b8,23,1e2,0,0,1,0,0,0,0},25990992-d968-4bc8-a604-0d7e2f4fc972, {8,"РазличныеЗначенияКолонки",0,3, {1,3, {"ru","Значения колонки"}, {"en","Значения колонки"}, {"uk","Значения колонки"} -},1,2600b634-5a3e-444b-b6ce-eea3617b93b8,30,1e2,0,0,1,0,0,0,0},45aca5ab-1178-4e4a-8001-0ec8c1202f4a, +},1,2600b634-5a3e-444b-b6ce-eea3617b93b8,30,1e2,0,0,1,0,0,0,0},64b713fe-8c97-4bef-b9c7-a68d901d7e96, {8,"Действие1",0,2, {1,1, {"#","Действие1"} -},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,26,1e2,0,0,1,0,0,0,0},1f7c4197-694c-4233-92ac-d30ec120ef4e, +},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,26,1e2,0,0,1,0,0,0,0},13102e1f-394e-4dbb-bd77-a82b7cb1cfe3, {8,"Действие2",0,2, {1,1, {"#","Действие2"} -},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,27,1e2,0,0,1,0,0,0,0},4b6ff511-06e1-43a2-bc34-9a70ceee86a0, +},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,27,1e2,0,0,1,0,0,0,0},b07a4f5f-0274-4e30-9489-279f8bf4e960, {8,"ОтборБезЗначенияВТекущейКолонке",0,2, {1,3, {"ru","Отбор без значения"}, {"en","Отбор без значения"}, {"uk","Отбор без значения"} -},1,2600b634-5a3e-444b-b6ce-eea3617b93b8,28,1e2,0,0,1,0,0,0,0},9e033736-8aff-451e-80ff-6eb145297942, +},1,2600b634-5a3e-444b-b6ce-eea3617b93b8,28,1e2,0,0,1,0,0,0,0},9a9b3e23-22a5-4e30-89b3-432b9be71855, {8,"Разделитель1",0,1, {1,1, {"ru","Действие"} -},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,29,1e2,2,0,1,0,0,0,0},5f5430d3-3b17-4606-bb4b-4aec0cef4e01, +},0,2600b634-5a3e-444b-b6ce-eea3617b93b8,29,1e2,2,0,1,0,0,0,0},126d6648-20e8-400e-b798-0ec2f990e74c, {8,"РедакторОбъектаБД",0,3, {1,3, {"ru","РедакторОбъектаБД"}, @@ -3354,7 +3354,7 @@ BgxkEQA7} {0} } } -},827,275,1,0,1,4,4,1124,827,275,96}, +},827,275,1,0,1,4,4,1161,827,275,96}, { {21},39, {6, diff --git a/src/DataProcessors/ирДинамическийСписок/Commands/Команда1/Ext/CommandModule.bsl b/src/DataProcessors/ирДинамическийСписок/Commands/Команда1/Ext/CommandModule.bsl index a8e2bcf5a..316ba635c 100644 --- a/src/DataProcessors/ирДинамическийСписок/Commands/Команда1/Ext/CommandModule.bsl +++ b/src/DataProcessors/ирДинамическийСписок/Commands/Команда1/Ext/CommandModule.bsl @@ -1,6 +1,6 @@  &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ирОбщий.ОткрытьДинамическийСписокЛкс(); + ирКлиент.ОткрытьДинамическийСписокЛкс(); КонецПроцедуры diff --git a/src/DataProcessors/ирДинамическийСписок/Ext/ObjectModule.bsl b/src/DataProcessors/ирДинамическийСписок/Ext/ObjectModule.bsl index 11231b7a2..7d160d07a 100644 --- a/src/DataProcessors/ирДинамическийСписок/Ext/ObjectModule.bsl +++ b/src/DataProcessors/ирДинамическийСписок/Ext/ObjectModule.bsl @@ -2,7 +2,7 @@ //ирПортативный Перем ирОбщий Экспорт; //ирПортативный Перем ирСервер Экспорт; //ирПортативный Перем ирКэш Экспорт; -//ирПортативный Перем ирПривилегированный Экспорт; +//ирПортативный Перем ирКлиент Экспорт; Процедура ПрочитатьНастройкиКолонокИзТабличногоПоля(Знач ТабличноеПоле) Экспорт @@ -92,4 +92,4 @@ //ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий"); //ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш"); //ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер"); -//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный"); +//ирПортативный ирКлиент = ирПортативный.ПолучитьОбщийМодульЛкс("ирКлиент"); diff --git a/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form.bin b/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form.bin index 9017d6b71..3d4d3ab38 100644 Binary files a/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form.bin and b/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form.bin differ diff --git a/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form/Module.bsl b/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form/Module.bsl index 3db5df393..b744b39d9 100644 --- a/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form/Module.bsl @@ -48,7 +48,7 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); ЭтаФорма.ЗакрыватьПриВыборе = Ложь; ЭлементыФормы.НадписьСохранениеНастроек.Видимость = ПараметрРучноеСохранение; Если СвязанноеТабличноеПоле = Неопределено Тогда @@ -71,7 +71,7 @@ КонецЦикла; КонецЕсли; Если СвязанноеТабличноеПоле <> Неопределено Тогда - ТекущаяКолонка = ирОбщий.ТабличноеПоле_ТекущаяКолонкаЛкс(СвязанноеТабличноеПоле); + ТекущаяКолонка = ирКлиент.ТабличноеПоле_ТекущаяКолонкаЛкс(СвязанноеТабличноеПоле); Если Не ЗначениеЗаполнено(ПараметрИмяТекущейКолонки) И ТекущаяКолонка <> Неопределено Тогда ПараметрИмяТекущейКолонки = ТекущаяКолонка.Имя; КонецЕсли; @@ -89,7 +89,7 @@ Процедура СтруктураКоманднойПанелиНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); КонецПроцедуры @@ -102,7 +102,7 @@ ИмяКолонки = ЭлементыФормы.НастройкиКолонок.ТекущаяСтрока.Имя; КолонкаТП = СвязанноеТабличноеПоле.Колонки.Найти(ИмяКолонки); Если КолонкаТП.Видимость Тогда - ирОбщий.ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(СвязанноеТабличноеПоле, КолонкаТП); + ирКлиент.ТабличноеПоле_УстановитьТекущуюКолонкуЛкс(СвязанноеТабличноеПоле, КолонкаТП); КонецЕсли; Иначе ОповеститьСвязаннуюТаблицуФормы(); @@ -146,7 +146,7 @@ Процедура ДействияФормыПереместитьВверх(Кнопка) - ПорядокИзменен = ирОбщий.ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ЭлементыФормы.НастройкиКолонок, -1); + ПорядокИзменен = ирКлиент.ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ЭлементыФормы.НастройкиКолонок, -1); Если ПорядокИзменен Тогда ЭтаФорма.ПрименятьПорядок = Истина; ОсновныеДействияФормыПробовать(); @@ -156,7 +156,7 @@ Процедура ДействияФормыПереместитьВниз(Кнопка) - ПорядокИзменен = ирОбщий.ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ЭлементыФормы.НастройкиКолонок, +1); + ПорядокИзменен = ирКлиент.ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ЭлементыФормы.НастройкиКолонок, +1); Если ПорядокИзменен Тогда ЭтаФорма.ПрименятьПорядок = Истина; ОсновныеДействияФормыПробовать(); @@ -166,7 +166,7 @@ Процедура ДействияФормыВНачало(Кнопка) - ПорядокИзменен = ирОбщий.ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ЭлементыФормы.НастройкиКолонок, -100000); + ПорядокИзменен = ирКлиент.ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ЭлементыФормы.НастройкиКолонок, -100000); Если ПорядокИзменен Тогда ЭтаФорма.ПрименятьПорядок = Истина; ОсновныеДействияФормыПробовать(); @@ -175,7 +175,7 @@ КонецПроцедуры Процедура ДействияФормыВКонец(Кнопка) - ПорядокИзменен = ирОбщий.ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ЭлементыФормы.НастройкиКолонок, +100000); + ПорядокИзменен = ирКлиент.ТабличноеПолеСдвинутьВыделенныеСтрокиЛкс(ЭлементыФормы.НастройкиКолонок, +100000); Если ПорядокИзменен Тогда ЭтаФорма.ПрименятьПорядок = Истина; ОсновныеДействияФормыПробовать(); @@ -192,7 +192,7 @@ Процедура НастройкиКолонокПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); ДействияФормыАктивизироватьКолонку(); КонецПроцедуры @@ -200,7 +200,7 @@ Процедура НастройкиКолонокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Экспорт ОформлениеСтроки.Ячейки.Видимость.ТолькоПросмотр = Не ДанныеСтроки.ВидимостьРазрешено; - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки,,, Новый Структура("ТипЗначения")); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки,,, Новый Структура("ТипЗначения")); КонецПроцедуры @@ -209,7 +209,7 @@ Если ЗначениеЗаполнено(СсылкаОбъекта) Тогда Форма = СсылкаОбъекта.ПолучитьФорму(); ИначеЕсли ЗначениеЗаполнено(ПолноеИмяТаблицы) Тогда - Форма = ирОбщий.ПолучитьФормуСпискаЛкс(ПолноеИмяТаблицы,, Ложь, ВладелецФормы, РежимВыбора); + Форма = ирКлиент.ПолучитьФормуСпискаЛкс(ПолноеИмяТаблицы,, Ложь, ВладелецФормы, РежимВыбора); КонецЕсли; Если Форма = Неопределено Тогда Возврат; @@ -267,32 +267,32 @@ Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура НастройкиКолонокПриИзмененииФлажка(Элемент, Колонка) - ирОбщий.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка); + ирКлиент.ТабличноеПолеПриИзмененииФлажкаЛкс(ЭтаФорма, Элемент, Колонка); КонецПроцедуры Процедура ПриЗакрытии() ОбновитьСвязанноеТабличноеПоле(Результат = Неопределено Или Не Результат.Сохранить); - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры @@ -318,13 +318,13 @@ Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Ответ = ирОбщий.ЗапроситьСохранениеДанныхФормыЛкс(ЭтаФорма, Отказ); + Ответ = ирКлиент.ЗапроситьСохранениеДанныхФормыЛкс(ЭтаФорма, Отказ); Если Ответ = КодВозвратаДиалога.Да Тогда ОсновныеДействияФормыПрименитьИЗакрыть(); КонецЕсли; КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирДинамическийСписок.Форма.НастройкиКолонок"); +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирДинамическийСписок.Форма.НастройкиКолонок"); мПлатформа = ирКэш.Получить(); \ No newline at end of file diff --git a/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form/form.txt b/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form/form.txt index f225dbb84..e89c9d58e 100644 --- a/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form/form.txt +++ b/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиКолонок/Ext/Form/form.txt @@ -842,36 +842,37 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, {0},4,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,0,1,1, {5,be0541a8-e78b-43e1-b338-9744fa477764,94,1,20, -{7,55a9be4d-f3a9-42f6-9bea-394f49599da5,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", +{7,cde621d3-364e-4803-8a77-1bea448e5e7f,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыПереместитьВверх", +{1,"ДействияФормыПереместитьВверх", {1,1, -{"ru","Клс команда нажатие"} +{"ru","Переместить вверх"} }, {1,1, -{"ru","Клс команда нажатие"} +{"ru","Переместить вверх"} }, {1,1, -{"ru","Клс команда нажатие"} +{"ru","Переместить вверх"} }, {4,0, {0},"",-1,-1,1,0,""}, {0,0,0} } -},7, +},15, {1,3, -{"ru","Установить флажки всех или выделенных строк"}, -{"en","Установить флажки всех или выделенных строк"}, -{"uk","Установить флажки всех или выделенных строк"} +{"ru","Переместить вверх"}, +{"en","Переместить вверх"}, +{"uk","Переместить вверх"} }, {1,3, -{"ru","Установить флажки всех или выделенных строк"}, -{"en","Установить флажки всех или выделенных строк"}, -{"uk","Установить флажки всех или выделенных строк"} +{"ru","Переместить вверх"}, +{"en","Переместить вверх"}, +{"uk","Переместить вверх"} }, {4,1, -{-10},"",-1,-1,1,0,""},1}, -{7,c92a8aa5-3a5b-443b-82b7-a36b24596280,1,e1692cc2-605b-4535-84dd-28440238746c, +{-3},"",-1,-1,1,0,""}, +{0,0,0},1}, +{7,961457c2-ee50-4748-9f5b-afebe41e424f,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыПереместитьВниз", {1,"ДействияФормыПереместитьВниз", {1,1, @@ -900,7 +901,36 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, }, {4,1, {-4},"",-1,-1,1,0,""},1}, -{7,2e41ea65-50a0-4398-bdc8-c008e343b3f8,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,a08ee6ac-048d-4d46-adc3-104b0a48cd9c,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,a2739c6c-96b8-4fb1-83bc-66928be52d2b,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДействияФормыЗагрузитьПорядокИзОсновнойФормы", +{1,"ДействияФормыЗагрузитьПорядокИзОсновнойФормы", +{1,1, +{"ru","Загрузить порядок из основной формы"} +}, +{1,1, +{"ru","Загрузить порядок из основной формы"} +}, +{1,1, +{"ru","Загрузить порядок из основной формы"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},6, +{1,3, +{"ru","Загрузить порядок колонок из основной формы объекта метаданных"}, +{"en","Загрузить порядок колонок из основной формы объекта метаданных"}, +{"uk","Загрузить порядок колонок из основной формы объекта метаданных"} +}, +{1,3, +{"ru","Загрузить порядок колонок из основной формы объекта метаданных"}, +{"en","Загрузить порядок колонок из основной формы объекта метаданных"}, +{"uk","Загрузить порядок колонок из основной формы объекта метаданных"} +},1}, +{7,2db1c66c-af28-4e61-aba0-530216f673e9,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыВНачало", {1,"ДействияФормыВНачало", {1,3, @@ -935,69 +965,9 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, }, {4,1, {0,548958cb-4110-4db3-899e-0013b9640cf9},"",-1,-1,1,0,""},1}, -{7,ce79df9d-f4be-44ef-b14e-708e8bd2fd84,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,2, -{"ru","Клс команда нажатие"}, -{"en","Клс команда нажатие"} -}, -{1,2, -{"ru","Клс команда нажатие"}, -{"en","Клс команда нажатие"} -}, -{1,2, -{"ru","Клс команда нажатие"}, -{"en","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Групповая установка значения в колонке"}, -{"en","Групповая установка значения в колонке"}, -{"uk","Групповая установка значения в колонке"} -}, -{1,3, -{"ru","Групповая установка значения в колонке"}, -{"en","Групповая установка значения в колонке"}, -{"uk","Групповая установка значения в колонке"} -}, -{4,1, -{0,f3131559-4ff5-4195-b378-a9dd606b2f9a},"",-1,-1,1,0,""},1}, -{7,6cb4e15d-3f86-4fce-8f5c-fb972be7f51b,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыПереместитьВверх", -{1,"ДействияФормыПереместитьВверх", -{1,1, -{"ru","Переместить вверх"} -}, -{1,1, -{"ru","Переместить вверх"} -}, -{1,1, -{"ru","Переместить вверх"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},15, -{1,3, -{"ru","Переместить вверх"}, -{"en","Переместить вверх"}, -{"uk","Переместить вверх"} -}, -{1,3, -{"ru","Переместить вверх"}, -{"en","Переместить вверх"}, -{"uk","Переместить вверх"} -}, -{4,1, -{-3},"",-1,-1,1,0,""}, -{0,0,0},1}, -{7,9d992579-f128-47b6-92a9-d8661266b0f0,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,ca70491f-5266-4683-9f39-3b01701850f8,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,beb23ad7-c084-47c3-b556-3fd455ff4d83,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыВКонец", {1,"ДействияФормыВКонец", {1,3, @@ -1032,7 +1002,10 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, }, {4,1, {0,59e91999-8c60-479a-8e89-3a637a86b3c7},"",-1,-1,1,0,""},1}, -{7,36f6618b-3624-417e-9761-dff3891fd045,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,840166a5-b68c-427e-a65b-f1088a5b6b44,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,88, +{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, +{7,a2661ebe-c8df-4e5e-89ce-adef841dd984,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1061,12 +1034,10 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, }, {4,1, {-11},"",-1,-1,1,0,""},1}, -{7,11be5d6b-f5d5-449b-84ba-400141797ec0,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,9fbb14cc-a07f-45e1-949c-b99aa4556b1b,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,88, +{7,3aa895e6-9acb-44fe-aa7f-505f9fa810b2,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,4294967295,00000000-0000-0000-0000-000000000000,89, {1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, -{7,317411bf-3ff1-4ea6-9894-aa952d833fc4,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,43799360-d4ff-44cc-acfd-40d311bde196,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1084,21 +1055,18 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, } },7, {1,3, -{"ru","Показать структуру формы"}, -{"en","Показать структуру формы"}, -{"uk","Показать структуру формы"} +{"ru","Установить флажки всех или выделенных строк"}, +{"en","Установить флажки всех или выделенных строк"}, +{"uk","Установить флажки всех или выделенных строк"} }, {1,3, -{"ru","Показать структуру формы"}, -{"en","Показать структуру формы"}, -{"uk","Показать структуру формы"} +{"ru","Установить флажки всех или выделенных строк"}, +{"en","Установить флажки всех или выделенных строк"}, +{"uk","Установить флажки всех или выделенных строк"} }, {4,1, -{0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1}, -{7,eab994bf-035e-42f8-8c4d-9c31df47cf8f,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,4294967295,00000000-0000-0000-0000-000000000000,89, -{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1},0,1}, -{7,2823a45c-80f5-42e1-a886-d509690edf24,1,e1692cc2-605b-4535-84dd-28440238746c, +{-10},"",-1,-1,1,0,""},1}, +{7,3c1e16a2-0e71-40d3-a8a9-9492c2db6551,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1127,10 +1095,10 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, }, {4,1, {0,f0ebb5dc-978f-45d6-8d6d-90002b451026},"",-1,-1,0,0,""},1}, -{7,cbedee64-741b-44a6-87d3-6116540b4550,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,8c68d0c0-44b1-4648-b887-ca510a68c947,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,91, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,a40bf210-e6e1-4736-a62e-bb65aaeb4a37,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,cfe6169b-8583-4a7a-af5d-8ad0d29a78d9,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -1159,43 +1127,44 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, }, {4,1, {0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},1}, -{7,4add28bb-1e25-434f-9cac-fd7b2ba0c836,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,8aef8da7-1955-44a8-a2a3-fc1df1a2130a,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,4294967295,00000000-0000-0000-0000-000000000000,93, {1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1}, -{7,e80c1b1a-17fd-4b51-8152-67429ab7e26a,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,b1258ff7-c956-4138-a2a4-71c9fe2b7c4d,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДействияФормыЗагрузитьПорядокИзОсновнойФормы", -{1,"ДействияФормыЗагрузитьПорядокИзОсновнойФормы", -{1,1, -{"ru","Загрузить порядок из основной формы"} +{7,d8da8896-2f94-426e-a266-420bf27b33d9,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,2, +{"ru","Клс команда нажатие"}, +{"en","Клс команда нажатие"} }, -{1,1, -{"ru","Загрузить порядок из основной формы"} +{1,2, +{"ru","Клс команда нажатие"}, +{"en","Клс команда нажатие"} }, -{1,1, -{"ru","Загрузить порядок из основной формы"} +{1,2, +{"ru","Клс команда нажатие"}, +{"en","Клс команда нажатие"} }, {4,0, {0},"",-1,-1,1,0,""}, {0,0,0} } -},6, +},7, {1,3, -{"ru","Загрузить порядок колонок из основной формы объекта метаданных"}, -{"en","Загрузить порядок колонок из основной формы объекта метаданных"}, -{"uk","Загрузить порядок колонок из основной формы объекта метаданных"} +{"ru","Групповая установка значения в колонке"}, +{"en","Групповая установка значения в колонке"}, +{"uk","Групповая установка значения в колонке"} }, {1,3, -{"ru","Загрузить порядок колонок из основной формы объекта метаданных"}, -{"en","Загрузить порядок колонок из основной формы объекта метаданных"}, -{"uk","Загрузить порядок колонок из основной формы объекта метаданных"} -},1}, -{7,b2a02d61-8a17-4cba-abc7-0fe3e557a2f7,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{"ru","Групповая установка значения в колонке"}, +{"en","Групповая установка значения в колонке"}, +{"uk","Групповая установка значения в колонке"} +}, +{4,1, +{0,f3131559-4ff5-4195-b378-a9dd606b2f9a},"",-1,-1,1,0,""},1}, +{7,0c5ea43f-754b-4f4a-a31c-695dcaf79991,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,80d2bd3e-0fc5-4b5a-ae78-ac0cf59af667,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,bd75217e-bf37-4ff6-8b84-a2d50dad3492,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,3c85067d-8879-46c0-9ab3-6ad7e7b2cf0b,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДействияФормыАктивизироватьКолонку", {1,"ДействияФормыАктивизироватьКолонку", {1,1, @@ -1221,106 +1190,137 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, {"ru","Активизировать колонку"}, {"en","Активизировать колонку"}, {"uk","Активизировать колонку"} -},1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,20,6cb4e15d-3f86-4fce-8f5c-fb972be7f51b, +},1}, +{7,6246c3cd-5f2b-48b5-99dc-183a91b11b3b,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,ac418f1c-ec51-462b-84c6-e9bda3d3da45,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Показать структуру формы"}, +{"en","Показать структуру формы"}, +{"uk","Показать структуру формы"} +}, +{1,3, +{"ru","Показать структуру формы"}, +{"en","Показать структуру формы"}, +{"uk","Показать структуру формы"} +}, +{4,1, +{0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},1},1, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,20,cde621d3-364e-4803-8a77-1bea448e5e7f, {8,"ПереместитьВверх",0,1, {1,3, {"ru","Переместить вверх"}, {"en","Переместить вверх"}, {"uk","Переместить вверх"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,78,1e2,0,0,1,0,1,0,0},c92a8aa5-3a5b-443b-82b7-a36b24596280, +},1,be0541a8-e78b-43e1-b338-9744fa477764,78,1e2,0,0,1,0,1,0,0},961457c2-ee50-4748-9f5b-afebe41e424f, {8,"ПереместитьВниз",0,2, {1,3, {"ru","Переместить вниз"}, {"en","Переместить вниз"}, {"uk","Переместить вниз"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,82,1e2,0,0,1,0,1,0,0},2e41ea65-50a0-4398-bdc8-c008e343b3f8, +},1,be0541a8-e78b-43e1-b338-9744fa477764,82,1e2,0,0,1,0,1,0,0},2db1c66c-af28-4e61-aba0-530216f673e9, {8,"ПереместитьВНачало",0,1, {1,3, {"ru","Переместить в начало"}, {"en","Переместить в начало"}, {"uk","Переместить в начало"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,90,1e2,0,0,1,0,0,0,0},9d992579-f128-47b6-92a9-d8661266b0f0, +},1,be0541a8-e78b-43e1-b338-9744fa477764,90,1e2,0,0,1,0,0,0,0},beb23ad7-c084-47c3-b556-3fd455ff4d83, {8,"ПереместитьВКонец",0,1, {1,3, {"ru","Переместить в конец"}, {"en","Переместить в конец"}, {"uk","Переместить в конец"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,91,1e2,0,0,1,0,0,0,0},11be5d6b-f5d5-449b-84ba-400141797ec0, +},1,be0541a8-e78b-43e1-b338-9744fa477764,91,1e2,0,0,1,0,0,0,0},ca70491f-5266-4683-9f39-3b01701850f8, {8,"Разделитель5",0,5, {1,1, {"ru","Действие8"} -},0,be0541a8-e78b-43e1-b338-9744fa477764,94,1e2,2,0,1,0,0,0,0},9fbb14cc-a07f-45e1-949c-b99aa4556b1b, +},0,be0541a8-e78b-43e1-b338-9744fa477764,94,1e2,2,0,1,0,0,0,0},840166a5-b68c-427e-a65b-f1088a5b6b44, {8,"Действие9",0,1, {1,1, {"#","Действие9"} -},0,be0541a8-e78b-43e1-b338-9744fa477764,79,1e2,0,0,1,0,1,0,0},eab994bf-035e-42f8-8c4d-9c31df47cf8f, +},0,be0541a8-e78b-43e1-b338-9744fa477764,79,1e2,0,0,1,0,1,0,0},3aa895e6-9acb-44fe-aa7f-505f9fa810b2, {8,"Действие10",0,1, {1,1, {"#","Действие10"} -},0,be0541a8-e78b-43e1-b338-9744fa477764,80,1e2,0,0,1,0,1,0,0},55a9be4d-f3a9-42f6-9bea-394f49599da5, +},0,be0541a8-e78b-43e1-b338-9744fa477764,80,1e2,0,0,1,0,1,0,0},43799360-d4ff-44cc-acfd-40d311bde196, {8,"УстановитьФлажки",1,6, {1,3, {"ru","Установить флажки"}, {"en","Установить флажки"}, {"uk","Установить флажки"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,19,1e2,0,0,1,0,0,0,0},36f6618b-3624-417e-9761-dff3891fd045, +},1,be0541a8-e78b-43e1-b338-9744fa477764,19,1e2,0,0,1,0,0,0,0},a2661ebe-c8df-4e5e-89ce-adef841dd984, {8,"СнятьФлажки",1,6, {1,3, {"ru","Снять флажки"}, {"en","Снять флажки"}, {"uk","Снять флажки"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,20,1e2,0,0,1,0,0,0,0},2823a45c-80f5-42e1-a886-d509690edf24, +},1,be0541a8-e78b-43e1-b338-9744fa477764,20,1e2,0,0,1,0,0,0,0},3c1e16a2-0e71-40d3-a8a9-9492c2db6551, {8,"МенеджерТабличногоПоля",0,9, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,21,1e2,0,0,1,0,0,0,0},cbedee64-741b-44a6-87d3-6116540b4550, +},1,be0541a8-e78b-43e1-b338-9744fa477764,21,1e2,0,0,1,0,0,0,0},8c68d0c0-44b1-4648-b887-ca510a68c947, {8,"Действие6",0,1, {1,1, {"#","Действие6"} -},0,be0541a8-e78b-43e1-b338-9744fa477764,22,1e2,0,0,1,0,0,0,0},a40bf210-e6e1-4736-a62e-bb65aaeb4a37, +},0,be0541a8-e78b-43e1-b338-9744fa477764,22,1e2,0,0,1,0,0,0,0},cfe6169b-8583-4a7a-af5d-8ad0d29a78d9, {8,"ОтборБезЗначенияВТекущейКолонке",0,4, {1,3, {"ru","Отбор без значения"}, {"en","Отбор без значения"}, {"uk","Отбор без значения"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,24,1e2,0,0,1,0,0,0,0},4add28bb-1e25-434f-9cac-fd7b2ba0c836, +},1,be0541a8-e78b-43e1-b338-9744fa477764,24,1e2,0,0,1,0,0,0,0},8aef8da7-1955-44a8-a2a3-fc1df1a2130a, {8,"Действие7",0,1, {1,1, {"#","Действие7"} -},0,be0541a8-e78b-43e1-b338-9744fa477764,23,1e2,0,0,1,0,0,0,0},ce79df9d-f4be-44ef-b14e-708e8bd2fd84, +},0,be0541a8-e78b-43e1-b338-9744fa477764,23,1e2,0,0,1,0,0,0,0},d8da8896-2f94-426e-a266-420bf27b33d9, {8,"УстановитьЗначениеВКолонке",0,2, {1,3, {"ru","Установить значение в колонке"}, {"en","Установить значение в колонке"}, {"uk","Установить значение в колонке"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,89,1e2,0,0,1,0,0,0,0},e80c1b1a-17fd-4b51-8152-67429ab7e26a, +},1,be0541a8-e78b-43e1-b338-9744fa477764,89,1e2,0,0,1,0,0,0,0},0c5ea43f-754b-4f4a-a31c-695dcaf79991, {8,"Разделитель",0,1, {1,1, {"ru","Действие8"} -},0,be0541a8-e78b-43e1-b338-9744fa477764,26,1e2,2,0,1,0,0,0,0},b1258ff7-c956-4138-a2a4-71c9fe2b7c4d, +},0,be0541a8-e78b-43e1-b338-9744fa477764,26,1e2,2,0,1,0,0,0,0},a2739c6c-96b8-4fb1-83bc-66928be52d2b, {8,"ЗагрузитьПорядокИзОсновнойФормы",1,1, {1,3, {"ru","Порядок из основной формы"}, {"en","Порядок из основной формы"}, {"uk","Порядок из основной формы"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,83,1e2,0,0,1,0,0,0,0},b2a02d61-8a17-4cba-abc7-0fe3e557a2f7, +},1,be0541a8-e78b-43e1-b338-9744fa477764,83,1e2,0,0,1,0,0,0,0},a08ee6ac-048d-4d46-adc3-104b0a48cd9c, {8,"Разделитель2",0,3, {1,1, {"ru","Действие8"} -},0,be0541a8-e78b-43e1-b338-9744fa477764,88,1e2,2,0,1,0,0,0,0},bd75217e-bf37-4ff6-8b84-a2d50dad3492, +},0,be0541a8-e78b-43e1-b338-9744fa477764,88,1e2,2,0,1,0,0,0,0},3c85067d-8879-46c0-9ab3-6ad7e7b2cf0b, {8,"АктивизироватьКолонку",0,1, {1,3, {"ru","Активизировать"}, {"en","Активизировать"}, {"uk","Активизировать"} -},1,be0541a8-e78b-43e1-b338-9744fa477764,25,1e2,0,0,0,0,0,0,0},80d2bd3e-0fc5-4b5a-ae78-ac0cf59af667, +},1,be0541a8-e78b-43e1-b338-9744fa477764,25,1e2,0,0,0,0,0,0,0},6246c3cd-5f2b-48b5-99dc-183a91b11b3b, {8,"Разделитель1",0,2, {1,1, {"ru","Действие8"} -},0,be0541a8-e78b-43e1-b338-9744fa477764,84,1e2,2,0,1,0,0,0,0},317411bf-3ff1-4ea6-9894-aa952d833fc4, +},0,be0541a8-e78b-43e1-b338-9744fa477764,84,1e2,2,0,1,0,0,0,0},ac418f1c-ec51-462b-84c6-e9bda3d3da45, {8,"СтруктураФормы",0,6, {1,3, {"ru","Структура формы"}, @@ -1392,7 +1392,7 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, {0},7,1,0,00000000-0000-0000-0000-000000000000}, {1,0},0,0,100,0,0},9,2,0,2,0,1, {5,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,5,1,5, -{7,d0c73024-d24f-4638-86e0-d18df65f2bf0,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,0df09195-89ab-456b-819b-e37ae6aeed5b,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ОсновныеДействияФормыПрименитьИЗакрыть", {1,"ОсновныеДействияФормыПрименитьИЗакрыть", {1,1, @@ -1419,11 +1419,7 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, {"en","Применить и закрыть. Настройки применяются окончательно."}, {"uk","Применить и закрыть. Настройки применяются окончательно."} },1}, -{7,f8c35d50-bdae-44b5-a958-46381dfaae21,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,2bccaaa8-c5dd-4daf-9bc4-4632a83e6ada,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, -{7,9e6e7fb6-c3b0-4eb8-816f-a7b93f85ef78,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,7e3ffd2f-649c-4859-af85-db9ccd22e0fc,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"ОсновныеДействияФормыПробовать", {1,"ОсновныеДействияФормыПробовать", {1,3, @@ -1456,28 +1452,32 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, {"en","Применить временно. После закрытия этой формы без применения изменений колонки табличного поля будут восстановлены."}, {"uk","Применить временно. После закрытия этой формы без применения изменений колонки табличного поля будут восстановлены."} },1}, -{7,f6960a1d-9190-4dc0-8ef4-f5a3a01d3553,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{7,8776d5b7-c799-49ba-ab0b-dcab9142c0fa,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,34b68d42-6988-49e7-aa18-defa1d928444,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,1}, +{7,be0dc0f6-b124-4f19-b6d8-859b251ff8ea,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, {6,3,00000000-0000-0000-0000-000000000000,142, {1,0,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,1},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,d0c73024-d24f-4638-86e0-d18df65f2bf0, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,5,0df09195-89ab-456b-819b-e37ae6aeed5b, {8,"ПрименитьИЗакрыть",0,1, {1,3, {"ru"," ОК "}, {"en"," ОК "}, {"uk"," ОК "} -},1,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,4,1e2,0,0,1,0,0,0,0},2bccaaa8-c5dd-4daf-9bc4-4632a83e6ada, +},1,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,4,1e2,0,0,1,0,0,0,0},8776d5b7-c799-49ba-ab0b-dcab9142c0fa, {8,"Разделитель1",0,1, {1,1, {"ru","Действие"} -},0,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,5,1e2,2,0,1,0,0,0,0},9e6e7fb6-c3b0-4eb8-816f-a7b93f85ef78, +},0,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,5,1e2,2,0,1,0,0,0,0},7e3ffd2f-649c-4859-af85-db9ccd22e0fc, {8,"Пробовать",0,1, {1,3, {"ru","Пробовать"}, {"en","Пробовать"}, {"uk","Пробовать"} -},1,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,1,1e2,0,1,0,0,1,0,0},f8c35d50-bdae-44b5-a958-46381dfaae21, +},1,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,1,1e2,0,1,0,0,1,0,0},34b68d42-6988-49e7-aa18-defa1d928444, {8,"Разделитель",0,1, -{1,0},0,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,2,1e2,2,1,1,0,1,0,0},f6960a1d-9190-4dc0-8ef4-f5a3a01d3553, +{1,0},0,025e3715-c86c-4fca-ba9a-a207e5fb2ff3,2,1e2,2,1,1,0,1,0,0},be0dc0f6-b124-4f19-b6d8-859b251ff8ea, {8,"ОсновныеДействияФормыЗакрыть",0,1, {1,3, {"ru","Закрыть"}, @@ -1488,7 +1488,7 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,f5840514-4670-421a-9683-8fc6929ac6f5,4,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,76a0ef64-c1a2-4574-848f-e1d21c9b901c,4,0,0} }, {8,0,267,600,292,1, {0, @@ -1666,7 +1666,7 @@ jlCg7+C6yZ9efzD8L+bJ9T8w129+zMsxL4fnZX81S5UqVZSqrqRquK5dvPgG},0},0,0,0,0,0,7e1}, {0} } } -},600,292,1,0,1,4,4,266,600,292,96}, +},600,292,1,0,1,4,4,284,600,292,96}, { {3},12, {8, diff --git a/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиСпискаУпр/Ext/Form/Module.bsl b/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиСпискаУпр/Ext/Form/Module.bsl index c81e91539..b74f65c48 100644 --- a/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиСпискаУпр/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирДинамическийСписок/Forms/НастройкиСпискаУпр/Ext/Form/Module.bsl @@ -1,7 +1,7 @@ &НаКлиенте Процедура ПоказатьЗначениеОтбора(Знач ЗначениеОтбора) - ирОбщий.ОткрытьЗначениеЛкс(ЗначениеОтбора, Ложь,,,, Ложь); + ирКлиент.ОткрытьЗначениеЛкс(ЗначениеОтбора, Ложь,,,, Ложь); КонецПроцедуры @@ -97,7 +97,7 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); Элементы.ФормаПрименить.Доступность = ВладелецФормы <> Неопределено; Элементы.ФормаПрименитьИЗакрыть.Доступность = ВладелецФормы <> Неопределено; Если ПараметрАктивироватьГруппу = "ФиксированныйОтбор" Тогда @@ -171,7 +171,7 @@ // Вызывается кодом Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры diff --git a/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form.bin b/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form.bin index e7c154391..ad36a8a71 100644 Binary files a/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form.bin and b/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form.bin differ diff --git a/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form/Module.bsl b/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form/Module.bsl index a6a8d1233..5dbd4509b 100644 --- a/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form/Module.bsl +++ b/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form/Module.bsl @@ -17,8 +17,8 @@ КонецЕсли; фОбъект.КоличествоСтрокВОбластиПоиска = "..."; Если ирОбщий.ЛиАсинхронностьДоступнаЛкс() Тогда - ирОбщий.ОтменитьФоновоеЗаданиеЛкс(фОбъект.ИДФоновогоЗадания); - ФормаРезультата = ирОбщий.НоваяФормаРезультатаФоновогоЗаданияЛкс(); + ирКлиент.ОтменитьФоновоеЗаданиеЛкс(фОбъект.ИДФоновогоЗадания); + ФормаРезультата = ирКлиент.НоваяФормаРезультатаФоновогоЗаданияЛкс(); фОбъект.АдресХранилищаКоличестваСтрок = ПоместитьВоВременноеХранилище(Null, ФормаРезультата.УникальныйИдентификатор); ПараметрыЗапуска = Новый Массив; ПараметрыЗапуска.Добавить(фОбъект.ПолноеИмяТаблицы); @@ -42,8 +42,6 @@ ЭлементыФормы.ДинамическийСписок.ИзменятьСоставСтрок = Истина; МассивФрагментов = ирОбщий.СтрРазделитьЛкс(фОбъект.ПолноеИмяТаблицы); ОсновнойЭУ = ЭлементыФормы.ДинамическийСписок; - ДопСвойства = ирОбщий.ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ОсновнойЭУ); - ДопСвойства.ЗапросИтоговПоТаблицеКлючей = Неопределено; ИмяТипаСписка = ирОбщий.ИмяТипаИзПолногоИмениТаблицыБДЛкс(фОбъект.ПолноеИмяТаблицы, "Список"); ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(фОбъект.ПолноеИмяТаблицы); ЕстьОграниченияДоступа = ирОбщий.ЕстьОграниченияДоступаКСтрокамТаблицыНаЧтениеЛкс(ОбъектМД); @@ -64,6 +62,7 @@ Попытка ОсновнойЭУ.ТипЗначения = Новый ОписаниеТипов(ИмяТипаСписка); Исключение + ОписаниеОшибки = ОписаниеОшибки(); // Для отладки Сообщить("Динамический список для таблицы """ + фОбъект.ПолноеИмяТаблицы + """ недоступен"); фОбъект.ПолноеИмяТаблицы = Неопределено; Возврат Ложь; @@ -71,7 +70,7 @@ //ТекстЗапросаКоличестваСтрок = "ВЫБРАТЬ СУММА(Количество) ИЗ (" + ТекстЗапросаКоличестваСтрок + ") КАК Т"; //ЗапросКоличестваСтрок = Новый Запрос(мТекстЗапросаКоличестваСтрок); //КоличествоСтрокВТаблицеБД = ЗапросКоличестваСтрок.Выполнить().Выгрузить()[0][0]; - ирОбщий.НастроитьАвтоТабличноеПолеДинамическогоСпискаЛкс(ОсновнойЭУ, фОбъект.РежимИмяСиноним); + ирКлиент.НастроитьАвтоТабличноеПолеДинамическогоСпискаЛкс(ОсновнойЭУ, фОбъект.РежимИмяСиноним); ЭтаФорма.Отбор = ЭлементыФормы.ДинамическийСписок.Значение.Отбор; КонецЕсли; Иначе @@ -89,16 +88,18 @@ КолонкаИдентификатора.ТекстШапки = "Идентификатор ссылки"; ЭтаФорма.Отбор = Построитель.Отбор; КонецЕсли; - ПредставлениеТаблицы = ирОбщий.ПредставлениеТаблицыБДЛкс(фОбъект.ПолноеИмяТаблицы); + ДопСвойства = ирКлиент.ДопСвойстваЭлементаФормыЛкс(ЭтаФорма, ОсновнойЭУ); + ДопСвойства.ЗапросИтоговПоТаблицеКлючей = Неопределено; Для Каждого КолонкаТП Из ОсновнойЭУ.Колонки Цикл Если ТипЗнч(КолонкаТП.ЭлементУправления) = Тип("ПолеВвода") Тогда КолонкаТП.ЭлементУправления.УстановитьДействие("ОкончаниеВводаТекста", Новый Действие("ПолеВводаКолонкиСписка_ОкончаниеВводаТекста")); КолонкаТП.ЭлементУправления.УстановитьДействие("НачалоВыбора", Новый Действие("ПолеВводаКолонкиСписка_НачалоВыбора")); КонецЕсли; КонецЦикла; - ЭтаФорма.Заголовок = СтрЗаменить(ЭтаФорма.Заголовок, "Динамический список ", "ДС"); - ирОбщий.ОбновитьТекстПослеМаркераВСтрокеЛкс(ЭтаФорма.Заголовок,, ПредставлениеТаблицы, ": "); - ирОбщий.ДописатьРежимВыбораВЗаголовокФормыЛкс(ЭтаФорма); + //ЭтаФорма.Заголовок = СтрЗаменить(ЭтаФорма.Заголовок, "Динамический список ", "ДС"); + //ирОбщий.ОбновитьТекстПослеМаркераВСтрокеЛкс(ЭтаФорма.Заголовок,, ПредставлениеТаблицы, ": "); + ирКлиент.ФормаОбъекта_ОбновитьЗаголовокЛкс(ЭтаФорма); + ирКлиент.ДописатьРежимВыбораВЗаголовокФормыЛкс(ЭтаФорма); ЭтоПеречисление = ирОбщий.ЛиКорневойТипПеречисленияЛкс(ТипТаблицыБД); ЭтоСсылкаБД = ирОбщий.ЛиКорневойТипСсылочногоОбъектаБДЛкс(ТипТаблицыБД); фОбъект.ВместоОсновной = ирОбщий.ИспользованиеДинамическогоСпискаВместоОсновнойФормыЛкс(фОбъект.ПолноеИмяТаблицы); @@ -112,7 +113,10 @@ ЭлементыФормы.КП_Список.Кнопки.ПодменюРедактор.Кнопки.ДобавитьСтрокуЧерезРедакторОбъектаБД.Доступность = ЭтоСсылкаБД; ЭлементыФормы.КП_Список.Кнопки.НайтиВыбратьПоID.Доступность = ЭтоСсылкаБД; ЗагрузитьНастройкиТаблицы(); - Если Не ирОбщий.ЛиКорневойТипПеречисленияЛкс(ТипТаблицыБД) Тогда + Если Истина + И Не ирОбщий.ЛиКорневойТипПеречисленияЛкс(ТипТаблицыБД) + И ТипЗнч(ОсновнойЭУ.Значение) <> Тип("ТаблицаЗначений") + Тогда ЭлементПорядкаТипаДата = ирОбщий.ЭлементПорядкаТипаДатаЛкс(ПолноеИмяТаблицы, ОсновнойЭУ.Значение.Порядок); Если ЭлементПорядкаТипаДата <> Неопределено И ЭлементПорядкаТипаДата.Направление = НаправлениеСортировки.Возр Тогда ОсновнойЭУ.НачальноеОтображениеСписка = НачальноеОтображениеСписка.Конец; @@ -125,7 +129,7 @@ // Не удалось найти способ удалить автокнопку истории отборов //Для Каждого Кнопка Из ЭлементыФормы.КП_Список.Кнопки Цикл // Если Кнопка.Текст = "История отборов" Тогда - // ирОбщий.УстановитьДоступностьПодменюЛкс(Кнопка); + // ирКлиент.УстановитьДоступностьПодменюЛкс(Кнопка); // Прервать; // КонецЕсли; //КонецЦикла; @@ -134,7 +138,7 @@ И Не ирОбщий.ЛиКорневойТипРегистраБухгалтерииЛкс(ирОбщий.ТипТаблицыБДЛкс(ПолноеИмяТаблицы)) И ирОбщий.ОписаниеТаблицыБДЛкс(ПолноеИмяТаблицы + ".Остатки") <> Неопределено; Если Не РежимВыбора Тогда - ирОбщий.ДобавитьТаблицуВИзбранноеЛкс(фОбъект.ПолноеИмяТаблицы); + ирКлиент.ДобавитьТаблицуВИзбранноеЛкс(фОбъект.ПолноеИмяТаблицы); КонецЕсли; Возврат Истина; @@ -151,7 +155,7 @@ СтруктураНастроек.Вставить("ИерархическийПросмотр", ЭлементыФормы.ДинамическийСписок.ИерархическийПросмотр); Исключение КонецПопытки; - СтруктураНастроек.Вставить("ТекущаяСтрока", ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока); + СтруктураНастроек.Вставить("ТекущаяСтрока", КлючСтрокиИзСсылки(ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока)); СтруктураНастроек.Вставить("НастройкиКолонок", фОбъект.НастройкиКолонок.Выгрузить()); Попытка ПорядокСписка = ЭлементыФормы.ДинамическийСписок.Значение.Порядок; @@ -190,6 +194,7 @@ Если СтруктураНастроек.Свойство("ТекущаяСтрока") Тогда ТипТаблицы = ирОбщий.ТипТаблицыБДЛкс(фОбъект.ПолноеИмяТаблицы); Если Истина + И СтруктураНастроек.ТекущаяСтрока <> Неопределено И ирОбщий.ЛиКорневойТипСсылкиЛкс(ТипТаблицы) И Не ирОбщий.ЛиКорневойТипДокументаЛкс(ТипТаблицы) И Не ирОбщий.ЛиКорневойТипБизнесПроцессаЛкс(ТипТаблицы) @@ -198,10 +203,10 @@ Или Не СтруктураНастроек.Свойство("ИерархическийПросмотр") Или Не СтруктураНастроек.ИерархическийПросмотр) Тогда - Попытка - ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока = СтруктураНастроек.ТекущаяСтрока; - Исключение - КонецПопытки; + КлючСтроки = КлючСтрокиИзСсылки(СтруктураНастроек.ТекущаяСтрока); + Если КлючСтроки <> Неопределено Тогда + ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока = КлючСтроки; + КонецЕсли; КонецЕсли; КонецЕсли; Попытка @@ -239,15 +244,19 @@ Процедура ПриОткрытии() - ирОбщий.Форма_ПриОткрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриОткрытииЛкс(ЭтаФорма); ЭтаФорма.СвязиИПараметрыВыбора = Истина; Если КлючУникальности <> Неопределено Тогда НовоеИмяТаблицы = ирОбщий.ПервыйФрагментЛкс(КлючУникальности, ";"); - ОбъектМД = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(НовоеИмяТаблицы); - Если ОбъектМД <> Неопределено Тогда - УстановитьОбъектМетаданных(НовоеИмяТаблицы); + Если Не ЗначениеЗаполнено(фОбъект.ПолноеИмяТаблицы) Тогда + ОбъектМД = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(НовоеИмяТаблицы); + Если ОбъектМД <> Неопределено Тогда + УстановитьОбъектМетаданных(НовоеИмяТаблицы); + КонецЕсли; КонецЕсли; - КонецЕсли; + КонецЕсли; + // В обычном приложении изменение состава полей формы приводит к удалению настроек окна управляемой формы. Поэтому сохраняем для каждой таблицы отдельные настройки. + ЭтаФорма.КлючСохраненияПоложенияОкна = ПолноеИмяТаблицы + ";" + XMLСтрока(РежимВыбора); Если ЗначениеЗаполнено(фОбъект.ПолноеИмяТаблицы) Тогда ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ДинамическийСписок; КонецЕсли; @@ -260,20 +269,10 @@ И НачальноеЗначениеВыбора <> Неопределено И ЗначениеЗаполнено(НачальноеЗначениеВыбора) Тогда - ИмяПоляСсылка = ирОбщий.ПеревестиСтроку("Ссылка"); - Если Ложь - Или ирОбщий.ЛиСсылкаНаОбъектБДЛкс(НачальноеЗначениеВыбора) - Или ирОбщий.ЛиСсылкаНаПеречислениеЛкс(НачальноеЗначениеВыбора) - Или ирОбщий.ЛиКлючЗаписиРегистраЛкс(НачальноеЗначениеВыбора) - Тогда - ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока = НачальноеЗначениеВыбора; - ИначеЕсли ирОбщий.ЛиСсылкаНаОбъектБДЛкс(НачальноеЗначениеВыбора, Ложь) Тогда - ДанныеСписка = ЭлементыФормы.ДинамическийСписок.Значение; - ТекущаяСтрока = ДанныеСписка.Найти(НачальноеЗначениеВыбора, ИмяПоляСсылка); - Если ТекущаяСтрока <> Неопределено Тогда - ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока = ТекущаяСтрока; - КонецЕсли; - КонецЕсли; + КлючСтроки = КлючСтрокиИзСсылки(НачальноеЗначениеВыбора); + Если КлючСтроки <> Неопределено Тогда + ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока = КлючСтроки; + КонецЕсли; ЭтаФорма.НачальноеЗначениеВыбора = Неопределено; КонецЕсли; Если ПараметрТекущаяКолонка <> Неопределено Тогда @@ -283,13 +282,35 @@ КонецЕсли; ЭтаФорма.ПараметрТекущаяКолонка = ""; КонецЕсли; - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(ЭлементыФормы.ОбъектМетаданных, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(ЭлементыФормы.ОбъектМетаданных, ЭтаФорма); + УстановитьНовыйПриемОбъекта(); КонецПроцедуры +Функция КлючСтрокиИзСсылки(Ссылка) + + КлючСтроки = Неопределено; + Если Ложь + Или ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Ссылка) + Или ирОбщий.ЛиСсылкаНаПеречислениеЛкс(Ссылка) + Или ирОбщий.ЛиКлючЗаписиРегистраЛкс(Ссылка) + Тогда + КлючСтроки = Ссылка; + ИначеЕсли ирОбщий.ЛиСсылкаНаОбъектБДЛкс(Ссылка, Ложь) Тогда + ИмяПоляСсылка = ирОбщий.ПеревестиСтроку("Ссылка"); + ДанныеСписка = ЭлементыФормы.ДинамическийСписок.Значение; + ТекущаяСтрока = ДанныеСписка.Найти(Ссылка, ИмяПоляСсылка); + Если ТекущаяСтрока <> Неопределено Тогда + КлючСтроки = ТекущаяСтрока; + КонецЕсли; + КонецЕсли; + Возврат КлючСтроки; + +КонецФункции + Процедура ИзменитьСтрокуЧерезРедакторОбъектаБД(Кнопка = Неопределено) - ирОбщий.ОткрытьТекущуюСтрокуТабличногоПоляТаблицыБДВРедактореОбъектаБДЛкс(ЭлементыФормы.ДинамическийСписок, ПолноеИмяТаблицы,,,,, Ложь); + ирКлиент.ОткрытьТекущуюСтрокуТабличногоПоляТаблицыБДВРедактореОбъектаБДЛкс(ЭлементыФормы.ДинамическийСписок, ПолноеИмяТаблицы,,,,, Ложь,,,, ЭтаФорма); КонецПроцедуры @@ -323,7 +344,7 @@ КонецЕсли; Кнопка = ЭлементыФормы.КП_Список.Кнопки.ОтображатьОстатки; ОбъектМД = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(ПолноеИмяТаблицы); - ирОбщий.ТабличноеПолеРегистраОтобразитьОстаткиЛкс(ОформленияСтрок, ОбъектМД, Кнопка, ПолноеИмяТаблицы); + ирКлиент.ТабличноеПолеРегистраОтобразитьОстаткиЛкс(ОформленияСтрок, ОбъектМД, Кнопка, ПолноеИмяТаблицы); ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(ПолноеИмяТаблицы); КолонкиВРежимеПароля = Новый Массив; Для Каждого ПолеТаблицы Из ПоляТаблицыБД.НайтиСтроки(Новый Структура("РежимПароля", Истина)) Цикл @@ -332,7 +353,7 @@ МаскироватьПароли = Не ЭлементыФормы.КП_Список.Кнопки.Идентификаторы.Пометка; Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; - ирОбщий.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки, ЭлементыФормы.КП_Список.Кнопки.Идентификаторы); + ирКлиент.ТабличноеПолеПриВыводеСтрокиЛкс(ЭтаФорма, Элемент, ОформлениеСтроки, ДанныеСтроки, ЭлементыФормы.КП_Список.Кнопки.Идентификаторы); Если ДанныеСтроки = неопределено Тогда Продолжить; КонецЕсли; @@ -371,25 +392,25 @@ Процедура ОбъектМетаданныхПриИзменении(Элемент) СохранитьНастройкиТаблицы(); - ЭтаФорма.КлючУникальности = фОбъект.ПолноеИмяТаблицы; + ЭтаФорма.КлючУникальности = ирОбщий.КлючУникальностиДинамическогоСпискаЛкс(фОбъект.ПолноеИмяТаблицы); Если УстановитьОбъектМетаданных() Тогда - ирОбщий.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); + ирКлиент.ПолеВводаСИсториейВыбора_ПриИзмененииЛкс(Элемент, ЭтаФорма); КонецЕсли; КонецПроцедуры Процедура ОбъектМетаданныхНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) - ирОбщий.ПолеВводаСИсториейВыбора_НачалоВыбораИзСпискаЛкс(Элемент, ЭтаФорма); + ирОбщий.ПолеВводаСИсториейВыбора_ОбновитьСписокЛкс(Элемент, ЭтаФорма); КонецПроцедуры Функция ПараметрыВыбораОбъектаМетаданных() - Возврат ирОбщий.ПараметрыВыбораОбъектаМетаданныхЛкс(Истина, Истина, Истина,,,,,,,, Истина); + Возврат ирКлиент.ПараметрыВыбораОбъектаМетаданныхЛкс(Истина, Истина, Истина,,,,,,,, Истина); КонецФункции Процедура ОбъектМетаданныхНачалоВыбора(Элемент, СтандартнаяОбработка) - ирОбщий.ОбъектМетаданныхНачалоВыбораЛкс(Элемент, ПараметрыВыбораОбъектаМетаданных(), СтандартнаяОбработка); + ирКлиент.ОбъектМетаданныхНачалоВыбораЛкс(Элемент, ПараметрыВыбораОбъектаМетаданных(), СтандартнаяОбработка); КонецПроцедуры Процедура ОбъектМетаданныхОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) @@ -398,12 +419,12 @@ Значение = фОбъект.ПолноеИмяТаблицы; Возврат; КонецЕсли; - ирОбщий.ОбъектМетаданныхОкончаниеВводаТекстаЛкс(Элемент, ПараметрыВыбораОбъектаМетаданных(), Текст, Значение, СтандартнаяОбработка); + ирКлиент.ОбъектМетаданныхОкончаниеВводаТекстаЛкс(Элемент, ПараметрыВыбораОбъектаМетаданных(), Текст, Значение, СтандартнаяОбработка); КонецПроцедуры Процедура СтруктураКоманднойПанелиНажатие(Кнопка) - ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); + ирКлиент.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка); КонецПроцедуры @@ -415,7 +436,7 @@ Процедура ОбновлениеОтображения() - ирОбщий.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); + ирКлиент.Форма_ОбновлениеОтображенияЛкс(ЭтаФорма); ЗначениеТабличногоПоля = ЭлементыФормы.ДинамическийСписок.Значение; #Если Сервер И Не Сервер Тогда ЗначениеТабличногоПоля = Новый ПостроительЗапроса; @@ -426,7 +447,7 @@ Исключение КонецПопытки; ЭлементыФормы.НадписьОтбор.Заголовок = "Отбор: " + ирОбщий.ПредставлениеОтбораЛкс(Отбор); - ДобавленВСписок = ирОбщий.ДобавитьОтборВИсториюТабличногоПоляЛкс(ЭтаФорма, фОбъект.ПолноеИмяТаблицы, Отбор, СтарыйОтбор); + ДобавленВСписок = ирКлиент.ДобавитьОтборВИсториюТабличногоПоляЛкс(ЭтаФорма, фОбъект.ПолноеИмяТаблицы, Отбор, СтарыйОтбор); Если ДобавленВСписок Тогда ОбновитьПодменюПоследнихОтборов(); КонецЕсли; @@ -445,6 +466,12 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Экспорт Если Истина + И КлючУникальности = "Связанный" + И ИмяСобытия = "ТаблицаБД" + И Источник = ВладелецФормы + Тогда + УстановитьОбъектМетаданных(Параметр, Истина); + ИначеЕсли Истина И ИмяСобытия = "ЗаписанОбъект" И ЗначениеЗаполнено(фОбъект.ПолноеИмяТаблицы) Тогда @@ -464,7 +491,7 @@ ЭлементыФормы.ДинамическийСписок.Значение.Обновить(); КонецЕсли; КонецЕсли; - ирОбщий.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); + ирКлиент.Форма_ОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); КонецПроцедуры @@ -483,11 +510,12 @@ КонецЕсли; ВыбраннаяСтрока = Массив; КонецЕсли; - ирОбщий.ПоследниеВыбранныеДобавитьЛкс(ЭтаФорма, ВыбраннаяСтрока); + ирКлиент.ПоследниеВыбранныеДобавитьЛкс(ЭтаФорма, ВыбраннаяСтрока); ОповеститьОВыборе(ВыбраннаяСтрока); СтандартнаяОбработка = Ложь; Иначе - СтандартнаяОбработка = Не ОткрытьРедакторОбъектаБДЕслиНужно(); + ДинамическийСписокПередНачаломИзменения(Элемент, СтандартнаяОбработка); + СтандартнаяОбработка = Не СтандартнаяОбработка; КонецЕсли; КонецПроцедуры @@ -495,7 +523,7 @@ Процедура КП_СписокВыбрать(Кнопка) ТабличноеПоле = ЭлементыФормы.ДинамическийСписок; - РезультатВыбора = ирОбщий.ВыделенныеСтрокиТабличногоПоляЛкс(ЭлементыФормы.ДинамическийСписок, Ложь); + РезультатВыбора = ирКлиент.ВыделенныеСтрокиТабличногоПоляЛкс(ЭлементыФормы.ДинамическийСписок, Ложь); Если РезультатВыбора.Количество() = 0 Тогда Возврат; КонецЕсли; @@ -521,13 +549,13 @@ Процедура КлсКомандаНажатие(Кнопка) Экспорт - ирОбщий.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); + ирКлиент.УниверсальнаяКомандаФормыЛкс(ЭтаФорма, Кнопка); КонецПроцедуры Процедура ОбработчикОжиданияСПараметрамиЛкс() Экспорт - ирОбщий.ОбработчикОжиданияСПараметрамиЛкс(); + ирКлиент.ОбработчикОжиданияСПараметрамиЛкс(); КонецПроцедуры @@ -538,7 +566,7 @@ Если ТекущаяСтрока = Неопределено Тогда Возврат; КонецЕсли; - ирОбщий.БуферОбменаПриложения_УстановитьЗначениеЛкс(ТекущаяСтрока); + ирКлиент.БуферОбменаПриложения_УстановитьЗначениеЛкс(ТекущаяСтрока); КонецПроцедуры @@ -564,23 +592,23 @@ ИмяПоляТаблицы = ТабличноеПоле.ТекущаяКолонка.Имя; ПоляТаблицыБД = ирКэш.ПоляТаблицыБДЛкс(фОбъект.ПолноеИмяТаблицы); МетаРеквизит = ПоляТаблицыБД.Найти(ИмяПоляТаблицы, "Имя").Метаданные; - СтруктураОтбора = ирОбщий.СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(МетаРеквизит, ТабличноеПоле.ТекущиеДанные); + СтруктураОтбора = ирКлиент.СтруктураОтбораПоСвязямИПараметрамВыбораЛкс(МетаРеквизит, ТабличноеПоле.ТекущиеДанные); КонецЕсли; - ирОбщий.ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка,, Истина, СтруктураОтбора); + ирКлиент.ПолеВводаКолонкиРасширенногоЗначения_НачалоВыбораЛкс(ЭтаФорма, ТабличноеПоле, СтандартнаяОбработка,, Истина, СтруктураОтбора); КонецПроцедуры Процедура ПолеВводаКолонкиСписка_ОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) - ирОбщий.ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка); + ирКлиент.ПолеВвода_ОкончаниеВводаТекстаЛкс(Элемент, Текст, Значение, СтандартнаяОбработка); КонецПроцедуры Процедура ПриЗакрытии() - ирОбщий.ОтменитьФоновоеЗаданиеЛкс(фОбъект.ИДФоновогоЗадания); + ирКлиент.ОтменитьФоновоеЗаданиеЛкс(фОбъект.ИДФоновогоЗадания); СохранитьНастройкиТаблицы(); - ирОбщий.Форма_ПриЗакрытииЛкс(ЭтаФорма); + ирКлиент.Форма_ПриЗакрытииЛкс(ЭтаФорма); КонецПроцедуры @@ -609,7 +637,7 @@ Исключение Отбор = Неопределено; КонецПопытки; - Форма = ирОбщий.ОткрытьФормуСпискаЛкс(фОбъект.ПолноеИмяТаблицы, Отбор, Ложь, ВладелецФормы, РежимВыбора, МножественныйВыбор, ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока); + Форма = ирКлиент.ОткрытьФормуСпискаЛкс(фОбъект.ПолноеИмяТаблицы, Отбор, Ложь, ВладелецФормы, РежимВыбора, МножественныйВыбор, ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока); Если Форма = Неопределено Тогда ЭтаФорма.Открыть(); КонецЕсли; @@ -633,7 +661,7 @@ Процедура ДинамическийСписокПриАктивизацииСтроки(Элемент) - ирОбщий.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивизацииСтрокиЛкс(ЭтаФорма, Элемент); Если мСвязанныйРедакторОбъектаБД <> Неопределено И мСвязанныйРедакторОбъектаБД.Открыта() Тогда ОткрытьСвязанныйРедакторОбъектаБДСтроки(); КонецЕсли; @@ -642,7 +670,7 @@ Процедура ОткрытьСвязанныйРедакторОбъектаБДСтроки() - ирОбщий.ОткрытьТекущуюСтрокуТабличногоПоляТаблицыБДВРедактореОбъектаБДЛкс(ЭлементыФормы.ДинамическийСписок, фОбъект.ПолноеИмяТаблицы,, Истина, мСвязанныйРедакторОбъектаБД,, Ложь); + ирКлиент.ОткрытьТекущуюСтрокуТабличногоПоляТаблицыБДВРедактореОбъектаБДЛкс(ЭлементыФормы.ДинамическийСписок, фОбъект.ПолноеИмяТаблицы,, Истина, мСвязанныйРедакторОбъектаБД,, Ложь,,,, ЭтаФорма); КонецПроцедуры @@ -687,14 +715,14 @@ КонецЕсли; фОбъект.РежимИмяСиноним = Не Кнопка.Пометка; Кнопка.Пометка = фОбъект.РежимИмяСиноним; - ирОбщий.НастроитьЗаголовкиАвтоТабличногоПоляДинамическогоСпискаЛкс(ЭлементыФормы.ДинамическийСписок, фОбъект.РежимИмяСиноним); + ирКлиент.НастроитьЗаголовкиАвтоТабличногоПоляДинамическогоСпискаЛкс(ЭлементыФормы.ДинамическийСписок, фОбъект.РежимИмяСиноним); КонецПроцедуры Процедура КП_СписокОткрытьОбъектМетаданных(Кнопка) - ирОбщий.ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); - ирОбщий.ОткрытьОбъектМетаданныхЛкс(фОбъект.ПолноеИмяТаблицы); + ирКлиент.ПредложитьЗакрытьМодальнуюФормуЛкс(ЭтаФорма); + ирКлиент.ОткрытьОбъектМетаданныхЛкс(фОбъект.ПолноеИмяТаблицы); КонецПроцедуры @@ -708,13 +736,13 @@ Функция ПоследниеВыбранныеНажатие(Кнопка) Экспорт - ирОбщий.ПоследниеВыбранныеНажатиеЛкс(ЭтаФорма, ЭлементыФормы.ДинамическийСписок, , Кнопка); + ирКлиент.ПоследниеВыбранныеНажатиеЛкс(ЭтаФорма, ЭлементыФормы.ДинамическийСписок, , Кнопка); КонецФункции Функция ПоследниеОтборыНажатие(Кнопка) Экспорт - НастройкаКомпоновки = ирОбщий.ВыбранныйЭлементПоследнихЗначенийЛкс(ЭтаФорма, фОбъект.ПолноеИмяТаблицы, Кнопка, "Отборы", Истина); + НастройкаКомпоновки = ирКлиент.ВыбранныйЭлементПоследнихЗначенийЛкс(ЭтаФорма, фОбъект.ПолноеИмяТаблицы, Кнопка, "Отборы", Истина); #Если Сервер И Не Сервер Тогда НастройкаКомпоновки = Новый НастройкиКомпоновкиДанных; #КонецЕсли @@ -725,7 +753,7 @@ Процедура ОбъектМетаданныхОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ирОбщий.ОткрытьОбъектМетаданныхЛкс(фОбъект.ПолноеИмяТаблицы); + ирКлиент.ОткрытьОбъектМетаданныхЛкс(фОбъект.ПолноеИмяТаблицы); КонецПроцедуры @@ -753,7 +781,7 @@ Возврат; КонецЕсли; СохранитьНастройкиТаблицы(); - ФормаНастроек = ирОбщий.ПолучитьФормуЛкс("Обработка.ирДинамическийСписок.Форма.НастройкиКолонок",, ЭтаФорма); + ФормаНастроек = ирКлиент.ПолучитьФормуЛкс("Обработка.ирДинамическийСписок.Форма.НастройкиКолонок",, ЭтаФорма); ЗаполнитьЗначенияСвойств(ФормаНастроек, фОбъект); ФормаНастроек.НастройкиКолонок.Загрузить(фОбъект.НастройкиКолонок.Выгрузить()); ФормаНастроек.СвязанноеТабличноеПоле = ЭлементыФормы.ДинамическийСписок; @@ -766,7 +794,7 @@ Процедура НадписьПраваДоступаКСтрокамНажатие(Элемент) - Форма = ирОбщий.ПолучитьФормуЛкс("Отчет.ирАнализПравДоступа.Форма",,, фОбъект.ПолноеИмяТаблицы); + Форма = ирКлиент.ПолучитьФормуЛкс("Отчет.ирАнализПравДоступа.Форма",,, фОбъект.ПолноеИмяТаблицы); Форма.ОбъектМетаданных = фОбъект.ПолноеИмяТаблицы; Форма.Пользователь = ИмяПользователя(); Форма.ПараметрКлючВарианта = "ПоПользователям"; @@ -805,9 +833,9 @@ СтруктураОбъекта = ирОбщий.ОбъектБДПоКлючуЛкс(фОбъект.ПолноеИмяТаблицы, ЭтоГруппа); КонецЕсли; ирОбщий.УстановитьЗначенияРеквизитовПоОтборуЛкс(СтруктураОбъекта.Данные, ЭлементыФормы.ДинамическийСписок.Значение.Отбор); - ирОбщий.ОткрытьОбъектВРедактореОбъектаБДЛкс(СтруктураОбъекта); + ирКлиент.ОткрытьОбъектВРедактореОбъектаБДЛкс(СтруктураОбъекта); Иначе - ирОбщий.ОткрытьОбъектВРедактореОбъектаБДЛкс(Новый(ирОбщий.ИмяТипаИзПолногоИмениТаблицыБДЛкс(фОбъект.ПолноеИмяТаблицы, "Ссылка"))); + ирКлиент.ОткрытьОбъектВРедактореОбъектаБДЛкс(Новый(ирОбщий.ИмяТипаИзПолногоИмениТаблицыБДЛкс(фОбъект.ПолноеИмяТаблицы, "Ссылка"))); КонецЕсли; Иначе КлючОбъекта = ирОбщий.СтруктураКлючаТаблицыБДЛкс(фОбъект.ПолноеИмяТаблицы, Ложь); @@ -819,7 +847,7 @@ КонецЕсли; КонецЦикла; СтруктураОбъекта = ирОбщий.ОбъектБДПоКлючуЛкс(фОбъект.ПолноеИмяТаблицы, КлючОбъекта); - ирОбщий.ОткрытьСсылкуВРедактореОбъектаБДЛкс(СтруктураОбъекта); + ирКлиент.ОткрытьСсылкуВРедактореОбъектаБДЛкс(СтруктураОбъекта); КонецЕсли; КонецПроцедуры @@ -829,7 +857,7 @@ Если Не ЗначениеЗаполнено(фОбъект.ПолноеИмяТаблицы) Тогда Возврат; КонецЕсли; - ирОбщий.НайтиВыбратьСсылкуВДинамическомСпискеПоIDЛкс(ЭлементыФормы.ДинамическийСписок, ЭтаФорма); + ирКлиент.НайтиВыбратьСсылкуВДинамическомСпискеПоIDЛкс(ЭлементыФормы.ДинамическийСписок, ЭтаФорма); КонецПроцедуры @@ -842,19 +870,23 @@ Процедура ВнешнееСобытие(Источник, Событие, Данные) Экспорт - ирОбщий.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); + ирКлиент.Форма_ВнешнееСобытиеЛкс(ЭтаФорма, Источник, Событие, Данные); КонецПроцедуры Процедура ТабличноеПолеПриПолученииДанных(Элемент, ОформленияСтрок) Экспорт - ирОбщий.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); + ирКлиент.ТабличноеПолеПриПолученииДанныхЛкс(ЭтаФорма, Элемент, ОформленияСтрок); КонецПроцедуры Процедура ДинамическийСписокПередНачаломИзменения(Элемент = Неопределено, Отказ = Ложь) - Отказ = ОткрытьРедакторОбъектаБДЕслиНужно(); + СтандартнаяОбработка = Не ОткрытьРедакторОбъектаБДЕслиНужно(); + Если СтандартнаяОбработка Тогда + ирКлиент.ОткрытьЗначениеЛкс(Элемент.ТекущаяСтрока,, СтандартнаяОбработка); + КонецЕсли; + Отказ = Не СтандартнаяОбработка; КонецПроцедуры @@ -871,7 +903,7 @@ КонецФункции Процедура ДинамическийСписокПриАктивизацииКолонки(Элемент) - ирОбщий.ТабличноеПолеПриАктивацииКолонкиЛкс(ЭтаФорма, Элемент); + ирКлиент.ТабличноеПолеПриАктивацииКолонкиЛкс(ЭтаФорма, Элемент); КонецПроцедуры Процедура КП_СписокОтображатьОстатки(Кнопка) @@ -881,21 +913,42 @@ Если Не Кнопка.Доступность Тогда Возврат; КонецЕсли; - ирОбщий.ТабличноеПолеРегистраОбновитьКолонкиОстатковЛкс(ЭлементыФормы.ДинамическийСписок, ОбъектМД, Кнопка, НоваяПометка); + ирКлиент.ТабличноеПолеРегистраОбновитьКолонкиОстатковЛкс(ЭлементыФормы.ДинамическийСписок, ОбъектМД, Кнопка, НоваяПометка); КонецПроцедуры Процедура КП_СписокНовоеОкно(Кнопка) - ирОбщий.ОткрытьФормуСпискаЛкс(ПолноеИмяТаблицы,, "Обычная",,,, ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока,, ПользовательскийОтбор(),, Новый УникальныйИдентификатор); + ирКлиент.ОткрытьФормуСпискаЛкс(ПолноеИмяТаблицы,, "Обычная",,,, ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока,, ПользовательскийОтбор(),, Новый УникальныйИдентификатор); КонецПроцедуры Процедура КП_СписокСвязанныеКолонкиБД(Кнопка) - ирОбщий.ОткрытьРедакторОбъектаБДЛкс(ПолноеИмяТаблицы,,, ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока,,, Ложь,,,, Истина); + ирКлиент.ОткрытьРедакторОбъектаБДЛкс(ПолноеИмяТаблицы,,, ЭлементыФормы.ДинамическийСписок.ТекущаяСтрока,,, Ложь,,,, Истина,, ЭтаФорма); КонецПроцедуры -ирОбщий.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирДинамическийСписок.Форма.Форма"); -Если КлючУникальности = "Связанный" Тогда - ЭтаФорма.Заголовок = ЭтаФорма.Заголовок + " (связанный)"; -КонецЕсли; +Процедура КП_СписокПриемОбъекта(Кнопка) + УстановитьНовыйПриемОбъекта(Не Кнопка.Пометка); +КонецПроцедуры + +Процедура УстановитьНовыйПриемОбъекта(Знач НовыйПриемОбъекта = Неопределено) Экспорт + + ирКлиент.УстановитьРежимПриемаОбъектаФормеЛкс(ЭтаФорма, ЭлементыФормы.КП_Список.Кнопки.ПриемОбъекта, НовыйПриемОбъекта, ПолноеИмяТаблицы); + +КонецПроцедуры + +Функция ПредставлениеОбъектаДанных() Экспорт + + Результат = ирОбщий.ПредставлениеТаблицыБДЛкс(фОбъект.ПолноеИмяТаблицы); + Возврат Результат; + +КонецФункции + +Процедура ДинамическийСписокОбработкаЗаписиНовогоОбъекта(Элемент, Объект, СтандартнаяОбработка) + ирКлиент.ДобавитьСсылкуВИсториюРаботыЛкс(Объект.Ссылка); +КонецПроцедуры + +ирКлиент.ИнициироватьФормуЛкс(ЭтаФорма, "Обработка.ирДинамическийСписок.Форма.Форма"); +//Если КлючУникальности = "Связанный" Тогда +// ЭтаФорма.Заголовок = ЭтаФорма.Заголовок + " (связанный)"; +//КонецЕсли; Построитель = Новый ПостроительЗапроса; diff --git a/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form/form.txt b/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form/form.txt index 9ad54049b..0fdf25056 100644 --- a/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form/form.txt +++ b/src/DataProcessors/ирДинамическийСписок/Forms/Форма/Ext/Form/form.txt @@ -110,13 +110,101 @@ {3,0, {0},0,1,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,2,1,0,0,1, -{5,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3720,1,49, -{7,5815ac00-c0fa-4460-a84b-681d09e3c4fd,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{5,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,4194,1,50, +{7,43983020-e1b6-495e-b09a-977233d20fa3,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,cc3e7f40-dc63-4b55-97fb-fb6f21cee0f1,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, -{6,0,00000000-0000-0000-0000-000000000000,91, -{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, -{7,beaa4df3-d623-4904-9edb-ef2a54eabd0c,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,3947dca0-929a-452c-8aec-218dc76b21cc,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,9e4c1a40-05cc-454c-9913-8704a30e6242,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,70070102-547e-48fe-8a02-fb3ec58b6526,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КП_СписокКопироватьСсылку", +{1,"КП_СписокКопироватьСсылку", +{1,1, +{"ru","Копировать ссылку"} +}, +{1,1, +{"ru","Копировать ссылку"} +}, +{1,1, +{"ru","Копировать ссылку"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},15, +{1,3, +{"ru","Копировать ключ строки в буфер обмена"}, +{"en","Копировать ключ строки в буфер обмена"}, +{"uk","Копировать ключ строки в буфер обмена"} +}, +{1,3, +{"ru","Копировать ключ строки в буфер обмена"}, +{"en","Копировать ключ строки в буфер обмена"}, +{"uk","Копировать ключ строки в буфер обмена"} +}, +{4,1, +{0,ce20c321-bc66-4c13-8bc1-58d477f5b758},"",-1,-1,1,0,""}, +{0,82,16},2}, +{7,952fa592-3444-488a-a8bd-0995b5ccff81,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},15, +{1,3, +{"ru","Редактор объекта БД ячейки"}, +{"en","Редактор объекта БД ячейки"}, +{"uk","Редактор объекта БД ячейки"} +}, +{1,3, +{"ru","Редактор объекта БД ячейки"}, +{"en","Редактор объекта БД ячейки"}, +{"uk","Редактор объекта БД ячейки"} +}, +{4,1, +{0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""}, +{0,81,8},2}, +{7,c506b092-e35d-4ca7-bcac-4c3e59a6c136,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КП_СписокСброситьНастройкиСписка", +{1,"КП_СписокСброситьНастройкиСписка", +{1,1, +{"ru","К п список сбросить настройки списка"} +}, +{1,1, +{"ru","К п список сбросить настройки списка"} +}, +{1,1, +{"ru","К п список сбросить настройки списка"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},6, +{1,3, +{"ru","Сбросить настройки списка"}, +{"en","Сбросить настройки списка"}, +{"uk","Сбросить настройки списка"} +}, +{1,3, +{"ru","Сбросить настройки списка"}, +{"en","Сбросить настройки списка"}, +{"uk","Сбросить настройки списка"} +},2}, +{7,40f4ff12-c4bd-45fe-8180-f295ce4735be,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_СписокВыбрать", {1,"КП_СписокВыбрать", {1,3, @@ -149,44 +237,26 @@ {"en","Выбрать выделенные строки"}, {"uk","Выбрать выделенные строки"} },1}, -{7,eefd26b3-69ac-4155-854e-b4fc464466bb,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, +{7,308a6ebb-94c0-4827-a1dd-1157531cca6f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2993},7, {1,3, -{"ru","Отбор без значения в текущей колонке"}, -{"en","Отбор без значения в текущей колонке"}, -{"uk","Отбор без значения в текущей колонке"} +{"ru","Список последних отборов"}, +{"en","Список последних отборов"}, +{"uk","Список последних отборов"} }, {1,3, -{"ru","Отбор без значения в текущей колонке"}, -{"en","Отбор без значения в текущей колонке"}, -{"uk","Отбор без значения в текущей колонке"} +{"ru","Список последних отборов"}, +{"en","Список последних отборов"}, +{"uk","Список последних отборов"} }, {4,1, -{0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, -{7,fa782c5b-2898-44da-8e60-26e39f7758e8,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{0,8729a534-9f88-47b0-8d6b-ec213689580d},"",-1,-1,1,0,""},2}, +{7,6b5001db-f6cf-4477-be21-74d662c3e46e,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,de28ac9b-4080-4600-b9f3-e21968ace0a6,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,6d97719b-0d48-4460-977e-d53ec9a6873e,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,32c6a4ae-e2c5-4214-96b8-a3b19df3f123,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,08a38e32-eade-4d72-92f4-b45f2289f08d,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,95922861-d50d-4f74-a727-4753d2facc14,1,fbe38877-b914-4fd5-8540-07dde06ba2e1, +{6,0,00000000-0000-0000-0000-000000000000,91, +{1,99,357c6a54-357d-425d-a2bd-22f4f6e86c87,2147483647,0},0,1},0,2}, +{7,41bade71-b0ec-4119-a90b-04b534ee4b26,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -215,127 +285,7 @@ }, {4,1, {0,f0ebb5dc-978f-45d6-8d6d-90002b451026},"",-1,-1,0,0,""},2}, -{7,8330c232-8fb7-4eeb-b8de-bdcdf1f319c7,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КП_СписокКопироватьСсылку", -{1,"КП_СписокКопироватьСсылку", -{1,1, -{"ru","Копировать ссылку"} -}, -{1,1, -{"ru","Копировать ссылку"} -}, -{1,1, -{"ru","Копировать ссылку"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},15, -{1,3, -{"ru","Копировать ключ строки в буфер обмена"}, -{"en","Копировать ключ строки в буфер обмена"}, -{"uk","Копировать ключ строки в буфер обмена"} -}, -{1,3, -{"ru","Копировать ключ строки в буфер обмена"}, -{"en","Копировать ключ строки в буфер обмена"}, -{"uk","Копировать ключ строки в буфер обмена"} -}, -{4,1, -{0,ce20c321-bc66-4c13-8bc1-58d477f5b758},"",-1,-1,1,0,""}, -{0,82,16},2}, -{7,f1151e2c-d72b-404b-9c84-bf9c54b7402f,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КП_СписокВыбратьНужноеКоличество", -{1,"КП_СписокВыбратьНужноеКоличество", -{1,1, -{"ru","Выбрать нужное количество"} -}, -{1,1, -{"ru","Выбрать нужное количество"} -}, -{1,1, -{"ru","Выбрать нужное количество"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},6, -{1,3, -{"ru","Выделить нужное количество первых элементов"}, -{"en","Выделить нужное количество первых элементов"}, -{"uk","Выделить нужное количество первых элементов"} -}, -{1,3, -{"ru","Выделить нужное количество первых элементов"}, -{"en","Выделить нужное количество первых элементов"}, -{"uk","Выделить нужное количество первых элементов"} -},2}, -{7,2d221fec-7c44-4009-a1c5-9345202e105f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2993},7, -{1,3, -{"ru","Список последних отборов"}, -{"en","Список последних отборов"}, -{"uk","Список последних отборов"} -}, -{1,3, -{"ru","Список последних отборов"}, -{"en","Список последних отборов"}, -{"uk","Список последних отборов"} -}, -{4,1, -{0,8729a534-9f88-47b0-8d6b-ec213689580d},"",-1,-1,1,0,""},2}, -{7,f8876fa2-f325-4c1d-9d09-2a18ed97412b,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,8520fbe2-d8b1-4694-b15d-a0df020ce649,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КП_СписокОсновнаяФорма", -{1,"КП_СписокОсновнаяФорма", -{1,1, -{"ru","Основная форма"} -}, -{1,1, -{"ru","Основная форма"} -}, -{1,1, -{"ru","Основная форма"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."}, -{"en","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."}, -{"uk","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."} -}, -{1,3, -{"ru","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."}, -{"en","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."}, -{"uk","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."} -}, -{4,1, -{0,bcfd3acf-dc33-47b3-a334-74322693e2e1},"",-1,-1,1,0,""},2}, -{7,e3141022-8046-46b3-a1b3-10f24ac19230,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,1302c711-e1dd-47f7-9cc0-0f79cd33e53b,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,0358a57c-4181-4482-abc4-5b28c828dd01,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1949},7, -{1,3, -{"ru","Список последних выбранных элементов"}, -{"en","Список последних выбранных элементов"}, -{"uk","Список последних выбранных элементов"} -}, -{1,3, -{"ru","Список последних выбранных элементов"}, -{"en","Список последних выбранных элементов"}, -{"uk","Список последних выбранных элементов"} -}, -{4,1, -{0,043c1a42-284e-4d5e-a92e-5b51f5563cf4},"",-1,-1,1,0,""},2}, -{7,b4be95ba-d956-48df-8b33-a16bb75cc7d6,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,a956ca1e-c76b-4876-8600-20b9aee00bd6,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -353,18 +303,18 @@ } },7, {1,3, -{"ru","Вывести строки и передать в одну сторону сравнения"}, -{"en","Вывести строки и передать в одну сторону сравнения"}, -{"uk","Вывести строки и передать в одну сторону сравнения"} +{"ru","Отбор без значения в текущей колонке"}, +{"en","Отбор без значения в текущей колонке"}, +{"uk","Отбор без значения в текущей колонке"} }, {1,3, -{"ru","Вывести строки и передать в одну сторону сравнения"}, -{"en","Вывести строки и передать в одну сторону сравнения"}, -{"uk","Вывести строки и передать в одну сторону сравнения"} +{"ru","Отбор без значения в текущей колонке"}, +{"en","Отбор без значения в текущей колонке"}, +{"uk","Отбор без значения в текущей колонке"} }, {4,1, -{0,8c325feb-0b3d-4094-aa2f-917b484044a5},"",-1,-1,1,0,""},2}, -{7,e6f668fa-67ba-43a4-9165-fdf97029df32,1,e1692cc2-605b-4535-84dd-28440238746c, +{0,eb50f275-62e7-4bb6-a91e-2e5d65deb0c1},"",-1,-1,0,0,""},2}, +{7,e60ee6ab-287a-4e3d-a05b-2a2c98c03037,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_СписокНайтиВыбратьПоID", {1,"КП_СписокНайтиВыбратьПоID", {1,1, @@ -393,9 +343,172 @@ }, {4,1, {0,877e1105-1e4d-4c9e-b345-84d3a865fe9b},"",-1,-1,1,0,""},2}, -{7,db72c23d-72ef-4046-8fec-e219e4fee233,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,d87ed86b-938b-44d5-88dd-d95f36efd696,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,8212c4d5-7217-430a-a610-d3f78c6822e2,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,9e108456-8af9-4a3e-9745-6b5f3bdd3ad5,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КП_СписокОткрытьОбъектМетаданных", +{1,"КП_СписокОткрытьОбъектМетаданных", +{1,1, +{"ru","Открыть объект метаданных"} +}, +{1,1, +{"ru","Открыть объект метаданных"} +}, +{1,1, +{"ru","Открыть объект метаданных"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть объект метаданных"}, +{"en","Открыть объект метаданных"}, +{"uk","Открыть объект метаданных"} +}, +{1,3, +{"ru","Открыть объект метаданных"}, +{"en","Открыть объект метаданных"}, +{"uk","Открыть объект метаданных"} +}, +{4,1, +{0,3d510c6e-0d07-453c-af65-fb96ff26fd61},"",-1,-1,1,0,""},2}, +{7,ca00abd6-26a6-4fc8-b7ac-65fee4096559,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КП_СписокОсновнаяФорма", +{1,"КП_СписокОсновнаяФорма", +{1,1, +{"ru","Основная форма"} +}, +{1,1, +{"ru","Основная форма"} +}, +{1,1, +{"ru","Основная форма"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."}, +{"en","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."}, +{"uk","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."} +}, +{1,3, +{"ru","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."}, +{"en","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."}, +{"uk","Открыть основную форму списка с передачей текущей строки, отбора и владельца. Закрыть текущую форму, если она в режиме выбора."} +}, +{4,1, +{0,bcfd3acf-dc33-47b3-a334-74322693e2e1},"",-1,-1,1,0,""},2}, +{7,112cd9ea-d5ee-4e0e-8c9c-c0ca4708742f,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Отображать пустые значения и идентификаторы вместо представлений значений"}, +{"en","Отображать пустые значения и идентификаторы вместо представлений значений"}, +{"uk","Отображать пустые значения и идентификаторы вместо представлений значений"} +}, +{1,3, +{"ru","Отображать пустые значения и идентификаторы вместо представлений значений"}, +{"en","Отображать пустые значения и идентификаторы вместо представлений значений"}, +{"uk","Отображать пустые значения и идентификаторы вместо представлений значений"} +}, +{4,1, +{0,c78e788d-c8f3-48ea-aa5c-b571bb079b06},"",-1,-1,1,0,""},2}, +{7,ac5f28aa-3101-4eb3-a891-ca9b3ac2d6d2,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,ffeedb30-bc2c-4f4c-893e-a4bb2ae6d003,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КП_СписокВыбратьНужноеКоличество", +{1,"КП_СписокВыбратьНужноеКоличество", +{1,1, +{"ru","Выбрать нужное количество"} +}, +{1,1, +{"ru","Выбрать нужное количество"} +}, +{1,1, +{"ru","Выбрать нужное количество"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},6, +{1,3, +{"ru","Выделить нужное количество первых элементов"}, +{"en","Выделить нужное количество первых элементов"}, +{"uk","Выделить нужное количество первых элементов"} +}, +{1,3, +{"ru","Выделить нужное количество первых элементов"}, +{"en","Выделить нужное количество первых элементов"}, +{"uk","Выделить нужное количество первых элементов"} +},2}, +{7,8bd85df0-e54e-46cc-b0e6-18daf402f64a,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1949},7, +{1,3, +{"ru","Список последних выбранных элементов"}, +{"en","Список последних выбранных элементов"}, +{"uk","Список последних выбранных элементов"} +}, +{1,3, +{"ru","Список последних выбранных элементов"}, +{"en","Список последних выбранных элементов"}, +{"uk","Список последних выбранных элементов"} +}, +{4,1, +{0,043c1a42-284e-4d5e-a92e-5b51f5563cf4},"",-1,-1,1,0,""},2}, +{7,a1229ac6-179c-49d1-81d8-83180e454741,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Расширить колонки на 5 символов"}, +{"en","Расширить колонки на 5 символов"}, +{"uk","Расширить колонки на 5 символов"} +}, +{1,3, +{"ru","Расширить колонки на 5 символов"}, +{"en","Расширить колонки на 5 символов"}, +{"uk","Расширить колонки на 5 символов"} +}, +{4,1, +{0,2350ced9-9887-479b-b3b3-66fa8ff7d688},"",-1,-1,0,0,""},2}, +{7,04b95d46-1216-4a63-9286-d09837ed3b55,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,3f398d2e-1ee9-450f-ad0b-c8387a99a403,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,23dede2e-e422-4bc3-8764-2cec98710fa7,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_СписокИмяСиноним", {1,"КП_СписокИмяСиноним", {1,1, @@ -422,70 +535,9 @@ {"en","Переключение отображения имен/синонимов в шапках колонок"}, {"uk","Переключение отображения имен/синонимов в шапках колонок"} },2}, -{7,c71fa7bf-841f-43ad-8d9a-fcd855ba7cec,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Вывести в табличный документ или таблицу значений"}, -{"en","Вывести в табличный документ или таблицу значений"}, -{"uk","Вывести в табличный документ или таблицу значений"} -}, -{1,3, -{"ru","Вывести в табличный документ или таблицу значений"}, -{"en","Вывести в табличный документ или таблицу значений"}, -{"uk","Вывести в табличный документ или таблицу значений"} -}, -{4,1, -{0,c2e2d966-5b7f-4699-903b-28a6f50d5471},"",-1,-1,1,0,""},2}, -{7,dece89ff-6030-4705-a8f6-f93f20183304,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{7,02b28b47-5505-4d73-b5f9-4a42d12ceac8,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,0a19f297-ae84-44db-9937-8cfa8c414f14,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ИзменитьСтрокуЧерезРедакторОбъектаБД", -{1,"ИзменитьСтрокуЧерезРедакторОбъектаБД", -{1,1, -{"ru","Изменить строку через редактор объекта БД"} -}, -{1,1, -{"ru","Изменить строку через редактор объекта БД"} -}, -{1,1, -{"ru","Изменить строку через редактор объекта БД"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},15, -{1,3, -{"ru","Изменить через независимый редактор объекта БД строки"}, -{"en","Изменить через независимый редактор объекта БД строки"}, -{"uk","Изменить через независимый редактор объекта БД строки"} -}, -{1,3, -{"ru","Изменить через независимый редактор объекта БД строки"}, -{"en","Изменить через независимый редактор объекта БД строки"}, -{"uk","Изменить через независимый редактор объекта БД строки"} -}, -{4,1, -{0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""}, -{0,113,16},2}, -{7,9c898b8c-5a5b-4c84-b435-ad6ec3d6e875,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,9739b375-5952-4e13-92be-97e229b94a05,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,331762d9-2f4b-4d15-b72c-83a80b93f82d,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -510,23 +562,7 @@ {1,0}, {4,1, {0,2de8a30d-89da-497f-aa99-d42b887681ca},"",-1,-1,0,0,""},2}, -{7,5ee31435-8e90-4f17-9898-85691f6cbf14,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3521},7, -{1,3, -{"ru","Подменю редактора объекта БД"}, -{"en","Подменю редактора объекта БД"}, -{"uk","Подменю редактора объекта БД"} -}, -{1,3, -{"ru","Подменю редактора объекта БД"}, -{"en","Подменю редактора объекта БД"}, -{"uk","Подменю редактора объекта БД"} -}, -{4,1, -{0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",-1,-1,1,0,""},2}, -{7,c1d50894-a2d1-414f-903c-e2712b1d613f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,56797ec8-32f4-4975-b3cf-c5cd1dc0bf89,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,d9d2de99-44db-472f-9d62-afbe1163d8c6,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -556,7 +592,86 @@ {4,1, {0,7f2ff1a9-6b51-49ff-a062-6b2ea68c89fb},"",12,12,1,0,""}, {0,0,0},2}, -{7,d94951f9-5834-4a72-a680-0e89c5cdd364,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,5fa5d5d9-da6b-4269-93aa-9645bf6e8434,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ИзменитьСтрокуЧерезРедакторОбъектаБД", +{1,"ИзменитьСтрокуЧерезРедакторОбъектаБД", +{1,1, +{"ru","Изменить строку через редактор объекта БД"} +}, +{1,1, +{"ru","Изменить строку через редактор объекта БД"} +}, +{1,1, +{"ru","Изменить строку через редактор объекта БД"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},15, +{1,3, +{"ru","Изменить через независимый редактор объекта БД строки"}, +{"en","Изменить через независимый редактор объекта БД строки"}, +{"uk","Изменить через независимый редактор объекта БД строки"} +}, +{1,3, +{"ru","Изменить через независимый редактор объекта БД строки"}, +{"en","Изменить через независимый редактор объекта БД строки"}, +{"uk","Изменить через независимый редактор объекта БД строки"} +}, +{4,1, +{0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""}, +{0,113,16},2}, +{7,146779fa-9018-4505-a229-cebeb3ccc197,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3521},7, +{1,3, +{"ru","Подменю редактора объекта БД"}, +{"en","Подменю редактора объекта БД"}, +{"uk","Подменю редактора объекта БД"} +}, +{1,3, +{"ru","Подменю редактора объекта БД"}, +{"en","Подменю редактора объекта БД"}, +{"uk","Подменю редактора объекта БД"} +}, +{4,1, +{0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",-1,-1,1,0,""},2}, +{7,0ae4e6c9-6f3e-4d17-9be2-21b26d080a77,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,90a17b49-4c49-42d8-a7ac-0510cf9fd929,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,2c02fb84-0ab1-4013-b6e1-40358f870a70,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,c1f59475-2486-4f22-b0ad-37658b43321c,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Вывести строки и передать в одну сторону сравнения"}, +{"en","Вывести строки и передать в одну сторону сравнения"}, +{"uk","Вывести строки и передать в одну сторону сравнения"} +}, +{1,3, +{"ru","Вывести строки и передать в одну сторону сравнения"}, +{"en","Вывести строки и передать в одну сторону сравнения"}, +{"uk","Вывести строки и передать в одну сторону сравнения"} +}, +{4,1, +{0,8c325feb-0b3d-4094-aa2f-917b484044a5},"",-1,-1,1,0,""},2}, +{7,20ab34f6-a3cb-499b-ab33-0428bd465f47,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,2, @@ -577,18 +692,47 @@ } },7, {1,3, -{"ru","Сравнить выделенные строки между собой"}, +{"ru","Сравнить выделенные объекты между собой или запомнить один объект для сравнения"}, {"en","Сравнить выделенные строки между собой"}, {"uk","Сравнить выделенные строки между собой"} }, {1,3, -{"ru","Сравнить выделенные строки между собой"}, +{"ru","Сравнить выделенные объекты между собой или запомнить один объект для сравнения"}, {"en","Сравнить выделенные строки между собой"}, {"uk","Сравнить выделенные строки между собой"} }, {4,1, {0,b8ca1d82-d6a2-4de6-9707-ee0504609327},"",-1,-1,1,0,""},2}, -{7,b6d2e085-c1c9-4c8a-8db4-3438d3c13959,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,49a520b9-d04f-4fba-aa71-b630875c9dc8,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","Открыть группировку таблицы"}, +{"en","Открыть группировку таблицы"}, +{"uk","Открыть группировку таблицы"} +}, +{1,3, +{"ru","Открыть группировку таблицы"}, +{"en","Открыть группировку таблицы"}, +{"uk","Открыть группировку таблицы"} +}, +{4,1, +{0,ce103606-ad7d-4eff-913d-87e04bd6fb9c},"",-1,-1,1,0,""},2}, +{7,75b3e639-ed92-4477-b613-b537a1f315be,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -618,94 +762,7 @@ {4,1, {0,e827fd85-4497-4a57-9846-8703be214c08},"",-1,-1,1,0,""}, {0,70,16},2}, -{7,ca2f7867-ab71-498c-90bb-90e7f4d3c84b,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Открыть группировку таблицы"}, -{"en","Открыть группировку таблицы"}, -{"uk","Открыть группировку таблицы"} -}, -{1,3, -{"ru","Открыть группировку таблицы"}, -{"en","Открыть группировку таблицы"}, -{"uk","Открыть группировку таблицы"} -}, -{4,1, -{0,ce103606-ad7d-4eff-913d-87e04bd6fb9c},"",-1,-1,1,0,""},2}, -{7,5b908549-bf38-4f00-8be0-35e17b87eba0,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Отображать пустые значения и идентификаторы вместо представлений значений"}, -{"en","Отображать пустые значения и идентификаторы вместо представлений значений"}, -{"uk","Отображать пустые значения и идентификаторы вместо представлений значений"} -}, -{1,3, -{"ru","Отображать пустые значения и идентификаторы вместо представлений значений"}, -{"en","Отображать пустые значения и идентификаторы вместо представлений значений"}, -{"uk","Отображать пустые значения и идентификаторы вместо представлений значений"} -}, -{4,1, -{0,c78e788d-c8f3-48ea-aa5c-b571bb079b06},"",-1,-1,1,0,""},2}, -{7,3fe21070-66d6-4946-adb7-8537a87cc229,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","Расширить колонки на 5 символов"}, -{"en","Расширить колонки на 5 символов"}, -{"uk","Расширить колонки на 5 символов"} -}, -{1,3, -{"ru","Расширить колонки на 5 символов"}, -{"en","Расширить колонки на 5 символов"}, -{"uk","Расширить колонки на 5 символов"} -}, -{4,1, -{0,2350ced9-9887-479b-b3b3-66fa8ff7d688},"",-1,-1,0,0,""},2}, -{7,8ae0780b-14f5-4f4a-9588-8376f3e81300,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,b8be49c3-e41f-446b-8831-5fe8cde7911a,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,3, @@ -740,17 +797,17 @@ }, {4,1, {0,9f855199-dfc8-4e63-9271-bd30801f2796},"",-1,-1,0,0,""},2}, -{7,7efd3aa9-daec-43ff-8aba-c1686dc8c4b1,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"ДобавитьСтрокуЧерезРедакторОбъектаБД", -{1,"ДобавитьСтрокуЧерезРедакторОбъектаБД", +{7,679d8b0f-cf79-4c32-aed7-90bcf3f9aaa5,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", {1,1, -{"ru","Добавить строку через редактор объекта БД"} +{"ru","Клс команда нажатие"} }, {1,1, -{"ru","Добавить строку через редактор объекта БД"} +{"ru","Клс команда нажатие"} }, {1,1, -{"ru","Добавить строку через редактор объекта БД"} +{"ru","Клс команда нажатие"} }, {4,0, {0},"",-1,-1,1,0,""}, @@ -758,20 +815,49 @@ } },7, {1,3, -{"ru","Добавить через независимый редактор объекта БД строки"}, -{"en","Добавить через независимый редактор объекта БД строки"}, -{"uk","Добавить через независимый редактор объекта БД строки"} +{"ru","Вывести в табличный документ или таблицу значений"}, +{"en","Вывести в табличный документ или таблицу значений"}, +{"uk","Вывести в табличный документ или таблицу значений"} }, {1,3, -{"ru","Добавить через независимый редактор объекта БД строки"}, -{"en","Добавить через независимый редактор объекта БД строки"}, -{"uk","Добавить через независимый редактор объекта БД строки"} +{"ru","Вывести в табличный документ или таблицу значений"}, +{"en","Вывести в табличный документ или таблицу значений"}, +{"uk","Вывести в табличный документ или таблицу значений"} }, {4,1, -{0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""},2}, -{7,ddd987e9-02d6-4cc4-a7fb-d02f7ca60b12,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{0,c2e2d966-5b7f-4699-903b-28a6f50d5471},"",-1,-1,1,0,""},2}, +{7,171ceca4-c94f-4ab8-a034-d9a7d305a062,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, {1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,177097f6-d67b-4830-8f02-ba98d090570a,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,2482961a-bf4e-46e8-8395-1638cbe11d55,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КлсКомандаНажатие", +{1,"КлсКомандаНажатие", +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{1,1, +{"ru","Клс команда нажатие"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +},7, +{1,3, +{"ru","О подсистеме"}, +{"en","О подсистеме"}, +{"uk","О подсистеме"} +}, +{1,3, +{"ru","О подсистеме"}, +{"en","О подсистеме"}, +{"uk","О подсистеме"} +}, +{4,1, +{0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},2}, +{7,bba64c1a-15a7-4aa4-aded-1998c63e0d07,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"НастройкаКолонок", {1,"НастройкаКолонок", {1,1, @@ -800,34 +886,39 @@ }, {4,1, {0,31b93f03-0ba2-4631-a171-0d3a3d2ecc48},"",-1,-1,1,0,""},2}, -{7,3e7c4303-f7fc-41c2-b7a2-1b6131cf6f38,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КП_СписокСброситьНастройкиСписка", -{1,"КП_СписокСброситьНастройкиСписка", +{7,9fc8fe3f-275a-4a6f-b41e-0b54c4bb1f9f,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, +{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, +{7,5dd06018-afb4-4561-a2a9-ad36c221ebd2,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КП_СписокСправкаМетаданного", +{1,"КП_СписокСправкаМетаданного", {1,1, -{"ru","К п список сбросить настройки списка"} +{"ru","Справка метаданного"} }, {1,1, -{"ru","К п список сбросить настройки списка"} +{"ru","Справка метаданного"} }, {1,1, -{"ru","К п список сбросить настройки списка"} +{"ru","Справка метаданного"} }, {4,0, {0},"",-1,-1,1,0,""}, {0,0,0} } -},6, +},15, {1,3, -{"ru","Сбросить настройки списка"}, -{"en","Сбросить настройки списка"}, -{"uk","Сбросить настройки списка"} +{"ru","Справка метаданного"}, +{"en","Справка метаданного"}, +{"uk","Справка метаданного"} }, {1,3, -{"ru","Сбросить настройки списка"}, -{"en","Сбросить настройки списка"}, -{"uk","Сбросить настройки списка"} -},2}, -{7,e9208ce1-1b98-4f16-b5a0-5bc03ec15a12,1,e1692cc2-605b-4535-84dd-28440238746c, +{"ru","Справка метаданного"}, +{"en","Справка метаданного"}, +{"uk","Справка метаданного"} +}, +{4,1, +{0,363637d3-b6ef-4539-8fc2-93cbe75d82e2},"",-1,-1,1,0,""}, +{0,112,8},2}, +{7,3a5b6bd8-3043-43a0-8669-f3bf9f9d649b,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_СписокОтображатьОстатки", {1,"КП_СписокОтображатьОстатки", {1,3, @@ -860,68 +951,38 @@ {"en","Отображать остатки. Когда включен, для каждой колонки ресурса справа добавляется колонка остатка на текущую дату, обновляемая при перерисовке табличного поля."}, {"uk","Отображать остатки. Когда включен, для каждой колонки ресурса справа добавляется колонка остатка на текущую дату, обновляемая при перерисовке табличного поля."} },2}, -{7,c5a15377-ac8f-4bbb-9d59-0ee725f0c74e,1,abde0c9a-18a6-4e0c-bbaa-af26b911b3e6, -{1,9d0a2e40-b978-11d4-84b6-008048da06df,0},0,2}, -{7,dddb7c12-2bbe-4f1e-b188-1e3f1c71c918,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КП_СписокОткрытьОбъектМетаданных", -{1,"КП_СписокОткрытьОбъектМетаданных", -{1,1, -{"ru","Открыть объект метаданных"} +{7,abd1c70b-2f6d-4319-8761-3b976008a46a,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"КП_СписокПриемОбъекта", +{1,"КП_СписокПриемОбъекта", +{1,3, +{"ru","Прием объекта"}, +{"en","Прием объекта"}, +{"uk","Прием объекта"} }, -{1,1, -{"ru","Открыть объект метаданных"} +{1,3, +{"ru","Прием объекта"}, +{"en","Прием объекта"}, +{"uk","Прием объекта"} }, -{1,1, -{"ru","Открыть объект метаданных"} +{1,3, +{"ru","Прием объекта"}, +{"en","Прием объекта"}, +{"uk","Прием объекта"} }, {4,0, {0},"",-1,-1,1,0,""}, {0,0,0} } },7, -{1,3, -{"ru","Открыть объект метаданных"}, -{"en","Открыть объект метаданных"}, -{"uk","Открыть объект метаданных"} +{1,1, +{"ru","Переключатель приема таблицы при активации строки владельца"} }, -{1,3, -{"ru","Открыть объект метаданных"}, -{"en","Открыть объект метаданных"}, -{"uk","Открыть объект метаданных"} +{1,1, +{"ru","Переключатель приема таблицы при активации строки владельца"} }, {4,1, -{0,3d510c6e-0d07-453c-af65-fb96ff26fd61},"",-1,-1,1,0,""},2}, -{7,b7eb5231-e1df-4aa6-a039-acbf914e116b,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КП_СписокСправкаМетаданного", -{1,"КП_СписокСправкаМетаданного", -{1,1, -{"ru","Справка метаданного"} -}, -{1,1, -{"ru","Справка метаданного"} -}, -{1,1, -{"ru","Справка метаданного"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},15, -{1,3, -{"ru","Справка метаданного"}, -{"en","Справка метаданного"}, -{"uk","Справка метаданного"} -}, -{1,3, -{"ru","Справка метаданного"}, -{"en","Справка метаданного"}, -{"uk","Справка метаданного"} -}, -{4,1, -{0,363637d3-b6ef-4539-8fc2-93cbe75d82e2},"",-1,-1,1,0,""}, -{0,112,8},2}, -{7,6b5df5ce-ee5d-4d2f-ae3a-eabc0b91c3bc,1,e1692cc2-605b-4535-84dd-28440238746c, +{0,373ff02e-ca19-48f3-8255-9475af59745f},"",-1,-1,1,0,""},2}, +{7,a645c08d-c2eb-487c-8b1e-57f08af1366d,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_СписокНовоеОкно", {1,"КП_СписокНовоеОкно", {1,3, @@ -956,7 +1017,7 @@ }, {4,1, {0,31324465-3215-4477-b5ac-5ec8be01ddcc},"",-1,-1,0,0,""},2}, -{7,655759d0-61e2-469e-ab72-dadf2e1e989f,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,0a1fc14e-cfd0-46e4-b23b-e8d0026ff713,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КлсКомандаНажатие", {1,"КлсКомандаНажатие", {1,1, @@ -985,36 +1046,7 @@ }, {4,1, {0,f3a4ff2d-7c13-4472-910a-5a04b179af69},"",-1,-1,1,0,""},2}, -{7,688b6486-084d-4ec0-bb01-b7a9bbf4d2ee,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{1,1, -{"ru","Клс команда нажатие"} -}, -{4,0, -{0},"",-1,-1,1,0,""}, -{0,0,0} -} -},7, -{1,3, -{"ru","О подсистеме"}, -{"en","О подсистеме"}, -{"uk","О подсистеме"} -}, -{1,3, -{"ru","О подсистеме"}, -{"en","О подсистеме"}, -{"uk","О подсистеме"} -}, -{4,1, -{0,f4bd79b3-3b25-494b-99c4-74b39341e007},"",-1,-1,0,0,""},2}, -{7,d6762804-0b02-4c63-8de4-01d3e02aaf43,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,153ffab8-373e-4ec2-8b6a-60e2b599533d,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_СписокСвязанныйРедакторОбъектаБДСтроки", {1,"КП_СписокСвязанныйРедакторОбъектаБДСтроки", {1,1, @@ -1043,37 +1075,36 @@ }, {4,1, {0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""},2}, -{7,060349a6-ea17-44ca-9892-3767f33d778c,1,e1692cc2-605b-4535-84dd-28440238746c, -{3,"КлсКомандаНажатие", -{1,"КлсКомандаНажатие", +{7,c025efb8-ca6d-4e04-9085-2ac2e43dd6fc,1,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДобавитьСтрокуЧерезРедакторОбъектаБД", +{1,"ДобавитьСтрокуЧерезРедакторОбъектаБД", {1,1, -{"ru","Клс команда нажатие"} +{"ru","Добавить строку через редактор объекта БД"} }, {1,1, -{"ru","Клс команда нажатие"} +{"ru","Добавить строку через редактор объекта БД"} }, {1,1, -{"ru","Клс команда нажатие"} +{"ru","Добавить строку через редактор объекта БД"} }, {4,0, {0},"",-1,-1,1,0,""}, {0,0,0} } -},15, +},7, {1,3, -{"ru","Редактор объекта БД ячейки"}, -{"en","Редактор объекта БД ячейки"}, -{"uk","Редактор объекта БД ячейки"} +{"ru","Добавить через независимый редактор объекта БД строки"}, +{"en","Добавить через независимый редактор объекта БД строки"}, +{"uk","Добавить через независимый редактор объекта БД строки"} }, {1,3, -{"ru","Редактор объекта БД ячейки"}, -{"en","Редактор объекта БД ячейки"}, -{"uk","Редактор объекта БД ячейки"} +{"ru","Добавить через независимый редактор объекта БД строки"}, +{"en","Добавить через независимый редактор объекта БД строки"}, +{"uk","Добавить через независимый редактор объекта БД строки"} }, {4,1, -{0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""}, -{0,81,8},2}, -{7,febe1d6f-a99b-4a41-b050-3baa97e4b1a1,1,e1692cc2-605b-4535-84dd-28440238746c, +{0,54dfb094-cca5-4ae7-bcc6-9d10651516c6},"",13,8,1,0,""},2}, +{7,bfd47bd1-5d63-4a71-b3f4-a6ab1c88cb39,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_СписокСвязанныеКолонкиБД", {1,"КП_СписокСвязанныеКолонкиБД", {1,3, @@ -1118,243 +1149,243 @@ {0} } }, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,45,5815ac00-c0fa-4460-a84b-681d09e3c4fd, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,46,9e4c1a40-05cc-454c-9913-8704a30e6242, {8,"Разделитель16",0,4, {1,1, {"ru","Действие2"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3270,1e2,2,0,1,0,0,0,0},beaa4df3-d623-4904-9edb-ef2a54eabd0c, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3270,1e2,2,0,1,0,0,0,0},40f4ff12-c4bd-45fe-8180-f295ce4735be, {8,"Выбрать",0,2, -{1,3, -{"ru","Выбрать"}, -{"en","Выбрать"}, -{"uk","Выбрать"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3267,1e2,0,3,1,0,0,0,0},6d97719b-0d48-4460-977e-d53ec9a6873e, +{1,1, +{"#","Выбрать"} +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3267,1e2,0,3,1,0,0,0,0},3947dca0-929a-452c-8aec-218dc76b21cc, {8,"Разделитель15",0,3, {1,1, {"ru","Действие2"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3268,1e2,2,0,1,0,0,0,0},32c6a4ae-e2c5-4214-96b8-a3b19df3f123, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3268,1e2,2,0,1,0,0,0,0},6b5001db-f6cf-4477-be21-74d662c3e46e, {8,"Разделитель5",0,1, {1,1, {"ru","Действие9"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,750,1e2,2,0,1,0,0,0,0},08a38e32-eade-4d72-92f4-b45f2289f08d, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,750,1e2,2,0,1,0,0,0,0},41bade71-b0ec-4119-a90b-04b534ee4b26, {8,"МенеджерТабличногоПоля",0,3, {1,3, {"ru","Менеджер табличного поля"}, {"en","Менеджер табличного поля"}, {"uk","Менеджер табличного поля"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,16,1e2,0,0,1,0,0,0,0},cc3e7f40-dc63-4b55-97fb-fb6f21cee0f1, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,16,1e2,0,0,1,0,0,0,0},95922861-d50d-4f74-a727-4753d2facc14, {8,"Действие7",0,2, -{1,3, -{"ru","Отбор по значению в текущей колонке"}, -{"en","Отбор по значению в текущей колонке"}, -{"uk","Отбор по значению в текущей колонке"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3162,1e2,0,0,1,0,0,0,0},eefd26b3-69ac-4155-854e-b4fc464466bb, +{1,1, +{"#","Действие7"} +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3162,1e2,0,0,1,0,0,0,0},a956ca1e-c76b-4876-8600-20b9aee00bd6, {8,"ОтборБезЗначенияВТекущейКолонке",0,3, {1,3, {"ru","Отбор без значения"}, {"en","Отбор без значения"}, {"uk","Отбор без значения"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,229,1e2,0,0,1,0,0,0,0},2d221fec-7c44-4009-a1c5-9345202e105f, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,229,1e2,0,0,1,0,0,0,0},308a6ebb-94c0-4827-a1dd-1157531cca6f, {8,"ПоследниеОтборы",0,3, {1,3, {"ru","Выбрать"}, {"en","Выбрать"}, {"uk","Выбрать"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2992,1e2,1,0,1,0,0,0,0},8330c232-8fb7-4eeb-b8de-bdcdf1f319c7, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2992,1e2,1,0,1,0,0,0,0},70070102-547e-48fe-8a02-fb3ec58b6526, {8,"КопироватьКлючСтроки",0,1, {1,3, {"ru","Копировать ключ строки"}, {"en","Копировать ключ строки"}, {"uk","Копировать ключ строки"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,864,1e2,0,0,1,0,0,0,0},e3141022-8046-46b3-a1b3-10f24ac19230, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,864,1e2,0,0,1,0,0,0,0},d87ed86b-938b-44d5-88dd-d95f36efd696, {8,"Разделитель3",0,1, {1,1, {"ru","Действие9"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,43,1e2,2,0,1,0,0,0,0},8520fbe2-d8b1-4694-b15d-a0df020ce649, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,43,1e2,2,0,1,0,0,0,0},ca00abd6-26a6-4fc8-b7ac-65fee4096559, {8,"ОсновнаяФорма",0,1, {1,3, {"ru","Основная"}, {"en","Основная"}, {"uk","Основная"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1192,1e2,0,3,1,0,0,0,0},1302c711-e1dd-47f7-9cc0-0f79cd33e53b, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1192,1e2,0,3,1,0,0,0,0},ac5f28aa-3101-4eb3-a891-ca9b3ac2d6d2, {8,"Разделитель9",0,2, {1,1, {"ru","Действие9"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1157,1e2,2,0,1,0,0,0,0},0358a57c-4181-4482-abc4-5b28c828dd01, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1157,1e2,2,0,1,0,0,0,0},8bd85df0-e54e-46cc-b0e6-18daf402f64a, {8,"ПоследниеВыбранные",0,2, {1,3, {"ru","Выбрать"}, {"en","Выбрать"}, {"uk","Выбрать"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1948,1e2,1,0,1,0,0,0,0},e6f668fa-67ba-43a4-9165-fdf97029df32, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1948,1e2,1,0,1,0,0,0,0},e60ee6ab-287a-4e3d-a05b-2a2c98c03037, {8,"НайтиВыбратьПоID",0,1, {1,3, {"ru","Найти/Выбрать по ID"}, {"en","Найти/Выбрать по ID"}, {"uk","Найти/Выбрать по ID"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2346,1e2,0,0,1,0,0,0,0},db72c23d-72ef-4046-8fec-e219e4fee233, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2346,1e2,0,0,1,0,0,0,0},04b95d46-1216-4a63-9286-d09837ed3b55, {8,"Разделитель12",0,2, {1,1, {"ru","Действие2"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1947,1e2,2,0,1,0,0,0,0},8212c4d5-7217-430a-a610-d3f78c6822e2, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1947,1e2,2,0,1,0,0,0,0},23dede2e-e422-4bc3-8764-2cec98710fa7, {8,"ИмяСиноним",0,2, {1,3, {"ru","Имя/Синоним"}, {"en","Имя/Синоним"}, {"uk","Имя/Синоним"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1738,1e2,0,0,1,0,0,0,0},dece89ff-6030-4705-a8f6-f93f20183304, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1738,1e2,0,0,1,0,0,0,0},02b28b47-5505-4d73-b5f9-4a42d12ceac8, {8,"Разделитель4",0,1, {1,1, {"ru","Действие7"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1739,1e2,2,0,1,0,0,0,0},0a19f297-ae84-44db-9937-8cfa8c414f14, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1739,1e2,2,0,1,0,0,0,0},5fa5d5d9-da6b-4269-93aa-9645bf6e8434, {8,"ИзменитьСтрокуЧерезРедакторОбъектаБД",0,1, {1,3, {"ru","Изменить"}, {"en","Изменить"}, {"uk","Изменить"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,47,1e2,0,3,1,0,0,0,0},9c898b8c-5a5b-4c84-b435-ad6ec3d6e875, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,47,1e2,0,3,1,0,0,0,0},3f398d2e-1ee9-450f-ad0b-c8387a99a403, {8,"Разделитель14",0,2, {1,1, {"ru","Действие7"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2289,1e2,2,0,1,0,0,0,0},5ee31435-8e90-4f17-9898-85691f6cbf14, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2289,1e2,2,0,1,0,0,0,0},146779fa-9018-4505-a229-cebeb3ccc197, {8,"ПодменюРедактор",0,1, {1,3, {"ru","Подменю редактора"}, {"en","Подменю редактора"}, {"uk","Подменю редактора"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3520,1e2,1,0,1,0,0,0,0},c1d50894-a2d1-414f-903c-e2712b1d613f, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3520,1e2,1,0,1,0,0,0,0},90a17b49-4c49-42d8-a7ac-0510cf9fd929, {8,"Разделитель8",0,1, {1,1, {"ru","Действие9"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1156,1e2,2,0,1,0,0,0,0},f1151e2c-d72b-404b-9c84-bf9c54b7402f, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1156,1e2,2,0,1,0,0,0,0},ffeedb30-bc2c-4f4c-893e-a4bb2ae6d003, {8,"ВыделитьНужноеКоличество",0,1, {1,3, {"ru","Выделить N"}, {"en","Выделить N"}, {"uk","Выделить N"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,749,1e2,0,0,1,0,0,0,0},de28ac9b-4080-4600-b9f3-e21968ace0a6, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,749,1e2,0,0,1,0,0,0,0},2c02fb84-0ab1-4013-b6e1-40358f870a70, {8,"Разделитель6",0,1, {1,1, {"ru","Действие9"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,751,1e2,2,0,1,0,0,0,0},56797ec8-32f4-4975-b3cf-c5cd1dc0bf89, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,751,1e2,2,0,1,0,0,0,0},d9d2de99-44db-472f-9d62-afbe1163d8c6, {8,"ОбработатьОбъекты",0,1, {1,3, {"ru","Передать для обработки"}, {"en","Передать для обработки"}, {"uk","Передать для обработки"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,162,1e2,0,0,1,0,0,0,0},b4be95ba-d956-48df-8b33-a16bb75cc7d6, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,162,1e2,0,0,1,0,0,0,0},c1f59475-2486-4f22-b0ad-37658b43321c, {8,"Сравнить",0,2, {1,3, {"ru","Сравнить строки с другими"}, {"en","Сравнить строки с другими"}, {"uk","Сравнить строки с другими"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1818,1e2,0,0,1,0,0,0,0},d94951f9-5834-4a72-a680-0e89c5cdd364, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1818,1e2,0,0,1,0,0,0,0},20ab34f6-a3cb-499b-ab33-0428bd465f47, {8,"СравнитьСтроки",0,3, {1,3, {"en","Сравнить строки"}, -{"ru","Сравнить строки"}, +{"ru","Сравнить объекты"}, {"uk","Сравнить строки"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2924,1e2,0,0,1,0,0,0,0},b6d2e085-c1c9-4c8a-8db4-3438d3c13959, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2924,1e2,0,0,1,0,0,0,0},75b3e639-ed92-4477-b613-b537a1f315be, {8,"РазличныеЗначенияКолонки",0,1, {1,3, {"ru","Значения колонки"}, {"en","Значения колонки"}, {"uk","Значения колонки"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,898,1e2,0,0,1,0,0,0,0},ca2f7867-ab71-498c-90bb-90e7f4d3c84b, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,898,1e2,0,0,1,0,0,0,0},49a520b9-d04f-4fba-aa71-b630875c9dc8, {8,"ГруппировкаТаблицы",0,7, {1,3, {"ru","Группировка таблицы"}, {"en","Группировка таблицы"}, {"uk","Группировка таблицы"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3311,1e2,0,0,1,0,0,0,0},5b908549-bf38-4f00-8be0-35e17b87eba0, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3311,1e2,0,0,1,0,0,0,0},112cd9ea-d5ee-4e0e-8c9c-c0ca4708742f, {8,"Идентификаторы",0,4, {1,3, {"ru","Отображать идентификаторы"}, {"en","Отображать идентификаторы"}, {"uk","Отображать идентификаторы"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,899,1e2,0,0,1,0,0,0,0},9739b375-5952-4e13-92be-97e229b94a05, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,899,1e2,0,0,1,0,0,0,0},331762d9-2f4b-4d15-b72c-83a80b93f82d, {8,"СжатьКолонки",0,2, {1,3, {"ru","Сжать колонки"}, {"en","Сжать колонки"}, {"uk","Сжать колонки"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,17,1e2,0,0,1,0,0,0,0},3fe21070-66d6-4946-adb7-8537a87cc229, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,17,1e2,0,0,1,0,0,0,0},a1229ac6-179c-49d1-81d8-83180e454741, {8,"ШиринаКолонок",0,3, {1,3, {"ru","Расширить"}, {"en","Расширить"}, {"uk","Расширить"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,42,1e2,0,0,1,0,0,0,0},8ae0780b-14f5-4f4a-9588-8376f3e81300, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,42,1e2,0,0,1,0,0,0,0},b8be49c3-e41f-446b-8831-5fe8cde7911a, {8,"СколькоСтрок",0,1, {1,3, {"ru","Сколько строк?"}, {"en","Сколько строк?"}, {"uk","Сколько строк?"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,285,1e2,0,0,1,0,0,0,0},c71fa7bf-841f-43ad-8d9a-fcd855ba7cec, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,285,1e2,0,0,1,0,0,0,0},679d8b0f-cf79-4c32-aed7-90bcf3f9aaa5, {8,"ВывестиСтроки",0,3, {1,3, {"ru","Вывести строки"}, {"en","Вывести строки"}, {"uk","Вывести строки"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1817,1e2,0,0,1,0,0,0,0},ddd987e9-02d6-4cc4-a7fb-d02f7ca60b12, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1817,1e2,0,0,1,0,0,0,0},171ceca4-c94f-4ab8-a034-d9a7d305a062, {8,"Разделитель11",0,1, {1,1, {"ru","Действие7"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1808,1e2,2,0,1,0,0,0,0},177097f6-d67b-4830-8f02-ba98d090570a, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1808,1e2,2,0,1,0,0,0,0},bba64c1a-15a7-4aa4-aded-1998c63e0d07, {8,"НастройкаКолонок",0,1, {1,3, {"ru","Колонки"}, {"en","Колонки"}, {"uk","Колонки"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2198,1e2,0,3,1,0,0,0,0},fa782c5b-2898-44da-8e60-26e39f7758e8, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2198,1e2,0,3,1,0,0,0,0},9fc8fe3f-275a-4a6f-b41e-0b54c4bb1f9f, {8,"Разделитель13",0,4, {1,1, {"ru","Действие6"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2199,1e2,2,0,1,0,0,0,0},3e7c4303-f7fc-41c2-b7a2-1b6131cf6f38, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,2199,1e2,2,0,1,0,0,0,0},c506b092-e35d-4ca7-bcac-4c3e59a6c136, {8,"СброситьНастройкиСписка",0,1, {1,3, {"ru","Сбросить"}, {"en","Сбросить"}, {"uk","Сбросить"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1807,1e2,0,0,1,0,0,0,0},f8876fa2-f325-4c1d-9d09-2a18ed97412b, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1807,1e2,0,0,1,0,0,0,0},0ae4e6c9-6f3e-4d17-9be2-21b26d080a77, {8,"Разделитель7",0,3, {1,1, {"ru","Действие6"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,92,1e2,2,0,1,0,0,0,0},e9208ce1-1b98-4f16-b5a0-5bc03ec15a12, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,92,1e2,2,0,1,0,0,0,0},3a5b6bd8-3043-43a0-8669-f3bf9f9d649b, {8,"ОтображатьОстатки",0,3, {1,3, {"ru","Остатки"}, {"en","Остатки"}, {"uk","Остатки"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3566,1e2,0,0,1,0,0,0,0},c5a15377-ac8f-4bbb-9d59-0ee725f0c74e, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3566,1e2,0,0,1,0,0,0,0},43983020-e1b6-495e-b09a-977233d20fa3, {8,"Разделитель2",0,4, {1,1, {"ru","Действие6"} -},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3567,1e2,2,0,1,0,0,0,0},dddb7c12-2bbe-4f1e-b188-1e3f1c71c918, +},0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3567,1e2,2,0,1,0,0,0,0},abd1c70b-2f6d-4319-8761-3b976008a46a, +{8,"ПриемОбъекта",0,2, +{1,1, +{"ru","Прием таблицы"} +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3721,1e2,0,0,1,0,0,0,0},9e108456-8af9-4a3e-9745-6b5f3bdd3ad5, {8,"ОткрытьОбъектМетаданных",0,2, {1,3, {"ru","Открыть объект метаданных"}, {"en","Открыть объект метаданных"}, {"uk","Открыть объект метаданных"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1790,1e2,0,0,1,0,0,0,0},b7eb5231-e1df-4aa6-a039-acbf914e116b, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1790,1e2,0,0,1,0,0,0,0},5dd06018-afb4-4561-a2a9-ad36c221ebd2, {8,"СправкаМетаданного",0,1, {1,3, {"ru","Справка метаданного"}, {"en","Справка метаданного"}, {"uk","Справка метаданного"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1450,1e2,0,0,1,0,0,0,0},6b5df5ce-ee5d-4d2f-ae3a-eabc0b91c3bc, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1450,1e2,0,0,1,0,0,0,0},a645c08d-c2eb-487c-8b1e-57f08af1366d, {8,"НовоеОкно",0,8, {1,3, {"ru","НовоеОкно"}, {"en","НовоеОкно"}, {"uk","НовоеОкно"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,116,1e2,0,0,1,0,0,0,0},655759d0-61e2-469e-ab72-dadf2e1e989f, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,116,1e2,0,0,1,0,0,0,0},0a1fc14e-cfd0-46e4-b23b-e8d0026ff713, {8,"СтруктураФормы",0,3, {1,3, {"ru","Структура формы"}, {"en","Структура формы"}, {"uk","Структура формы"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1010,1e2,0,0,1,0,0,0,0},688b6486-084d-4ec0-bb01-b7a9bbf4d2ee, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,1010,1e2,0,0,1,0,0,0,0},2482961a-bf4e-46e8-8395-1638cbe11d55, {8,"ОПодсистеме",0,3, {1,3, {"ru","О подсистеме"}, @@ -1375,36 +1406,34 @@ {0} } }, -{5,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3521,0,4,7efd3aa9-daec-43ff-8aba-c1686dc8c4b1, +{5,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3521,0,4,c025efb8-ca6d-4e04-9085-2ac2e43dd6fc, {8,"ДобавитьСтрокуЧерезРедакторОбъектаБД",0,3, {1,3, {"ru","Добавить"}, {"en","Добавить"}, {"uk","Добавить"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3522,1e2,0,3,1,0,0,0,0},d6762804-0b02-4c63-8de4-01d3e02aaf43, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3522,1e2,0,3,1,0,0,0,0},153ffab8-373e-4ec2-8b6a-60e2b599533d, {8,"СвязанныйРедакторОбъектаБДСтроки",0,3, {1,3, {"ru","Связанный"}, {"en","Связанный"}, {"uk","Связанный"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3524,1e2,0,3,1,0,0,0,0},060349a6-ea17-44ca-9892-3767f33d778c, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3524,1e2,0,3,1,0,0,0,0},952fa592-3444-488a-a8bd-0995b5ccff81, {8,"РедакторОбъектаБД",0,3, {1,3, {"ru","Ячейка"}, {"en","Ячейка"}, {"uk","Ячейка"} -},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3523,1e2,0,0,1,0,0,0,0},febe1d6f-a99b-4a41-b050-3baa97e4b1a1, +},1,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3523,1e2,0,0,1,0,0,0,0},bfd47bd1-5d63-4a71-b3f4-a6ab1c88cb39, {8,"СвязанныеКолонкиБД",0,1, -{1,3, -{"ru","Связанные колонки БД"}, -{"en","Связанные колонки БД"}, -{"uk","Связанные колонки БД"} +{1,1, +{"#","Связанные колонки БД"} },0,f2a0e95f-b7a8-4760-9bc5-44cdb7c8cb2e,3680,1e2,0,0,1,0,0,0,0}, {-1,0, {0} } } -},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,cd7cfe55-6369-4072-9f96-a3a59e95f9c6,3267,0,0} +},b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0f0d51d6-3bee-4b35-84ce-dfd292633bf5,3267,0,0} }, {8,32,30,992,55,1, {0, @@ -1785,7 +1814,7 @@ {342cf854-134c-42bb-8af9-a2103d5d9723, {5,0,0,1} }, -{6, +{7, {34,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДинамическийСписокВыбор", {1,"ДинамическийСписокВыбор", @@ -1882,6 +1911,30 @@ } } }, +{50,e1692cc2-605b-4535-84dd-28440238746c, +{3,"ДинамическийСписокОбработкаЗаписиНовогоОбъекта", +{1,"ДинамическийСписокОбработкаЗаписиНовогоОбъекта", +{1,3, +{"ru","Динамический список обработка записи нового объекта"}, +{"en","Динамический список обработка записи нового объекта"}, +{"uk","Динамический список обработка записи нового объекта"} +}, +{1,3, +{"ru","Динамический список обработка записи нового объекта"}, +{"en","Динамический список обработка записи нового объекта"}, +{"uk","Динамический список обработка записи нового объекта"} +}, +{1,3, +{"ru","Динамический список обработка записи нового объекта"}, +{"en","Динамический список обработка записи нового объекта"}, +{"uk","Динамический список обработка записи нового объекта"} +}, +{4,0, +{0},"",-1,-1,1,0,""}, +{0,0,0} +} +} +}, {53,e1692cc2-605b-4535-84dd-28440238746c, {3,"ДинамическийСписокПриПолученииДанных", {1,"ДинамическийСписокПриПолученииДанных", @@ -2258,7 +2311,7 @@ {0},0,0,0,48312c09-257f-4b29-b280-284dd89efc1e}, {1,0},0,0,100,0,0},9,1,0,0,1,1, {5,d52f50af-cf36-4750-b249-c0c4ef9af0c3,1,1,1, -{7,cc7a173c-23ef-4f10-82d8-ec487501447e,1,e1692cc2-605b-4535-84dd-28440238746c, +{7,f082102a-1a24-4f1c-8228-d0ed7f5384bf,1,e1692cc2-605b-4535-84dd-28440238746c, {3,"КП_СписокРежимДерева", {1,"КП_СписокРежимДерева", {1,1, @@ -2287,7 +2340,7 @@ }, {4,1, {0,e31f4b26-fd8a-414f-a194-b2f94fb6c9c6},"",-1,-1,1,0,""},2},1, -{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,cc7a173c-23ef-4f10-82d8-ec487501447e, +{5,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0,1,f082102a-1a24-4f1c-8228-d0ed7f5384bf, {8,"РежимДерева",0,2, {1,3, {"ru","Режим дерева"}, @@ -2598,7 +2651,7 @@ {0} } } -},1000,292,1,0,1,4,4,1313,1000,292,96}, +},1000,292,1,0,1,4,4,1427,1000,292,96}, { {0},12, {3, diff --git a/src/DataProcessors/ирДинамическийСписок/Forms/ФормаУпр/Ext/Form.xml b/src/DataProcessors/ирДинамическийСписок/Forms/ФормаУпр/Ext/Form.xml index c3a8f84c6..708e3b4b2 100644 --- a/src/DataProcessors/ирДинамическийСписок/Forms/ФормаУпр/Ext/Form.xml +++ b/src/DataProcessors/ирДинамическийСписок/Forms/ФормаУпр/Ext/Form.xml @@ -354,6 +354,12 @@ None +