diff --git a/.gitignore b/.gitignore
index b82bb3f..6f5df80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,6 @@ unpack/
bin/
db.db
js.json
-autumn-data/
\ No newline at end of file
+autumn-data/
+.vscode\launch.json
+DataBase/
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 93f0028..6f34114 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -13,7 +13,7 @@
"args": [],
"cwd": "${workspaceRoot}",
"env": {},
- "runtimeExecutable": "/Users/untru/.local/share/ovm/current/bin/oscript",
+ "runtimeExecutable": null,
"runtimeArgs": [],
"debugPort": 2801
}
diff --git a/autumn-properties.json b/autumn-properties.json
index 355903b..c549700 100644
--- a/autumn-properties.json
+++ b/autumn-properties.json
@@ -15,8 +15,8 @@
"FILE_MAX_SIZE": 30000000,
"data": {
"ИсточникиДанных": {
- "ТипКоннектора": "КоннекторSQLite",
- "СтрокаСоединения": "FullUri=db.db"
+ "ТипКоннектора": "КоннекторJSON",
+ "СтрокаСоединения": "./DataBase"
}
},
"logos": {
diff --git a/js.json b/js.json
index 8eb7002..dc4af33 100644
--- a/js.json
+++ b/js.json
@@ -1,22 +1,479 @@
-{'update_id': 726598677,'callback_query':
- {'id':'988241522275206274','from':
-
-{'id': 230092909,'is_bot': false,'first_name':'Павел','last_name':'Чегодаев','username':'Un_tru','language_code':'ru','is_premium': true
- },'message':
-
- {'message_id': 437,'from': {'id': 7967956539,'is_bot': true,'first_name':'sharebsl_bot','username':'sharebsl_bot'
- },'chat': {'id': 230092909,'first_name':'Павел','last_name':'Чегодаев','username':'Un_tru','type':'private'
- },'date': 1752007338,'text':'Ранее вы уже публиковали файл с таким именем, заменить или выложить еще раз?','reply_markup': {'inline_keyboard': [
- [
- {'text':'08.07.2025 22: 02: 15','callback_data':'1'
- }
- ],
- [
- {'text':'Сделать новую публикацию','callback_data':'NEW_8'
- }
- ]
- ]
- }
- },'chat_instance':'-7815209320371019100','data':'NEW_8'
- }
+{
+ "url": "https://api.github.com/gists/a8ad35e99ff9f3aafd2b9c4364ae91b6",
+ "forks_url": "https://api.github.com/gists/a8ad35e99ff9f3aafd2b9c4364ae91b6/forks",
+ "commits_url": "https://api.github.com/gists/a8ad35e99ff9f3aafd2b9c4364ae91b6/commits",
+ "id": "a8ad35e99ff9f3aafd2b9c4364ae91b6",
+ "node_id": "G_kwDOA5mHbtoAIGE4YWQzNWU5OWZmOWYzYWFmZDJiOWM0MzY0YWU5MWI2",
+ "git_pull_url": "https://gist.github.com/a8ad35e99ff9f3aafd2b9c4364ae91b6.git",
+ "git_push_url": "https://gist.github.com/a8ad35e99ff9f3aafd2b9c4364ae91b6.git",
+ "html_url": "https://gist.github.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6",
+ "files": {
+ "Contents.md": {
+ "filename": "Contents.md",
+ "type": "text/markdown",
+ "language": "Markdown",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/7fdac5af17d36e60b68ca54d5ee62ab313e795ef/Contents.md",
+ "size": 3636,
+ "truncated": false,
+ "content": "# Дерево файлов\n\n\n\n ВнешняяОбработка
\n\n Обработка\n- [](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/59e66388830ce92a9b981a85aeb50e956723331c/are_bsl%5Cunpack%5C726598746%5CExternalDataProcessor.obj.bsl)\n\n \n\n Форма
\n\n Форма\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/fe5229c00d26a2dadebd8b088d83227db5a1f7a8/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%5CForm.obj.bsl)\n\n\n ФормаВводаШтрихкода\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/41e9fdeaf103fc1351ea8a1c70ff340434c610f2/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%92%D0%B2%D0%BE%D0%B4%D0%B0%D0%A8%D1%82%D1%80%D0%B8%D1%85%D0%BA%D0%BE%D0%B4%D0%B0%5CForm.obj.bsl)\n\n\n ФормаНастройкиИнтеграции\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/91dd7a37fa6aa991601e96aaacd31ac50164db2e/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8%5CForm.obj.bsl)\n\n\n ФормаОперации\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/309ff624d6e6d6f8277c30ffadf365f1384fcfcc/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8%5CForm.obj.bsl)\n\n\n ФормаПросмотрДанных\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/ceb39267c6e5a861590035ceec23ba4fe159661c/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%94%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%5CForm.obj.bsl)\n\n\n ФормаПросмотрИзмененныхПараметров\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/ff3410141db686025fe21f44f915b7a16125f433/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2%5CForm.obj.bsl)\n\n\n ФормаПросмотрКода\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/d15bcb6bed28affa5c0186f40289cdf9dc099f31/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%9A%D0%BE%D0%B4%D0%B0%5CForm.obj.bsl)\n\n\n ФормаПросмотрПараметров\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/38b2d50ba02e91e93f0433f45a3d0d28a65c6807/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2%5CForm.obj.bsl)\n\n\n ФормаСообщений\n- [ Модуль объекта](https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/c0d319ba09c434734e5afef3679da32f49e0bb85/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%A1%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9%5CForm.obj.bsl)\n\n ",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\ExternalDataProcessor.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\ExternalDataProcessor.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/59e66388830ce92a9b981a85aeb50e956723331c/are_bsl%5Cunpack%5C726598746%5CExternalDataProcessor.obj.bsl",
+ "size": 44587,
+ "truncated": false,
+ "content": "#Область СлужебныйПрограммныйИнтерфейс\n\n#Область НастройкаИнтеграции\n\nФункция НоваяСтруктураНастроекИнтеграции() Экспорт\n\t\n\tНастройкиИнтеграции = Новый Структура();\n\t// Режим интеграции\n\tНастройкиИнтеграции.Вставить(\"Режим\");\n\t// Настройки режима \"Подключаемый модуль\"\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_Версия\");\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_Текст\");\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_ОписаниеМетодов\");\n\t// Настройки режима \"Web-сервер\"\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_УРЛ\");\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_Логин\");\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_Пароль\");\n\t// Дополнительные настройки\n\tНастройкиИнтеграции.Вставить(\"ПространствоИменXDTO\");\n\t\n\tВозврат(НастройкиИнтеграции);\n\t\nКонецФункции\n\nПроцедура АвтоопределениеНастроекИнтеграции(НастройкиИнтеграции) Экспорт\n\t\n\tСтандартныйМодуль = Метаданные.ОбщиеМодули.Найти(\"усТСДВебСервис\");\n\tЕсли СтандартныйМодуль <> Неопределено Тогда\n\t\tНастройкиИнтеграции.Режим = \"СтандартныйМодуль\";\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\";\n\tВерсияШаблона = ПодобратьВерсиюШаблона();\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия = ВерсияШаблона;\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = ШаблоныМодулей_ОписаниеМетодовМодуля(НастройкиИнтеграции.ПодключаемыйМодуль_Текст);\n\t\nКонецПроцедуры\n\nПроцедура ПослеВосстановленияСохраненныхНастроекИнтеграции(НастройкиИнтеграции) Экспорт\n\t\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\t// Нет настроек\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tВосстановитьНастройкиПодключаемогоМодуля(НастройкиИнтеграции);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\t// Нет настроек\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ШаблоныПодключаемыхМодулей\n\nФункция ШаблоныМодулей_ПолучитьСписокВерсий() Экспорт\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\tМассивВерсий = Новый Массив;\n\t\n\tМакеты = Метаданные().Макеты;\n\tДля Каждого Макет Из Макеты Цикл\n\t\tЕсли СтрНачинаетсяС(Макет.Имя, ПрефиксМакета) Тогда\n\t\t\tСтрокаВерсии = Сред(Макет.Имя, 1 + СтрДлина(ПрефиксМакета));\n\t\t\tСтрокаВерсии = СтрЗаменить(СтрокаВерсии, \"_\", \".\");\n\t\t\tМассивВерсий.Добавить(СтрокаВерсии);\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат (МассивВерсий);\n\t\nКонецФункции\n\nФункция ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона) Экспорт\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\t\n\tИмяМакетаШаблона = ПрефиксМакета + СтрЗаменить(ВерсияШаблона, \".\", \"_\");\n\t\n\tМакет = ПолучитьМакет(ИмяМакетаШаблона);\n\tТекстМодуля = Макет.ПолучитьТекст();\n\t\n\tВозврат (ТекстМодуля);\n\t\nКонецФункции\n\nФункция ШаблоныМодулей_ОписаниеМетодовМодуля(ТекстМодуля) Экспорт\n\t\n\tОписаниеПолейСтруктурыМетодов = \"ИмяМетода, КоличествоПараметров, ИмяПараметра1, ИмяПараметра2, ИмяПараметра3, ТелоМетода\";\n\tОписаниеМетодов = Новый Соответствие;\n\t\n\tМаркерНачалоФункции = \"ФУНКЦИЯ\";\n\tМаркерКонецФункции = \"КОНЕЦФУНКЦИИ\";\n\tМаркерВозврат = \"ВОЗВРАТ\";\n\tЗаменаВозврат = \"ВебСервис_Результат = \";\n\tДопСтрокаВозврат = \"Перейти ~ВЫХОД;\";\n\tМеткаВыходаИзФункции = \"~ВЫХОД:\";\n\t\n\tОписаниеМетода = Неопределено;\n\tСтрокиМетода = Неопределено;\n\t\n\tДля Каждого СтрокаКода Из СтрРазделить(ТекстМодуля, Символы.ПС) Цикл\n\t\t\n\t\tБуфер = СтрЗаменить(СтрокаКода, Символы.Таб, \" \");\n\t\tБуфер = СокрЛП(Буфер);\n\t\tБуфер = ВРег(Буфер);\n\t\t\n\t\tЕсли СтрНачинаетсяС(Буфер, МаркерНачалоФункции) Тогда\n\t\t\t\n\t\t\tОписаниеМетода = Новый Структура(ОписаниеПолейСтруктурыМетодов);\n\t\t\t\n\t\t\tБуфер = Сред(Буфер, СтрДлина(МаркерНачалоФункции) + 1);\n\t\t\tБуфер = СокрЛП(Буфер);\n\t\t\t\n\t\t\tЧастиСтроки = СтрРазделить(Буфер, \"()\");\n\t\t\tОписаниеМетода.ИмяМетода = ЧастиСтроки[0];\n\t\t\t\n\t\t\tПараметрыМетода = СтрРазделить(ЧастиСтроки[1], \",\", Ложь);\n\t\t\tОписаниеМетода.КоличествоПараметров = ПараметрыМетода.Количество();\n\t\t\tДля Сч = 1 По ОписаниеМетода.КоличествоПараметров Цикл\n\t\t\t\t\n\t\t\t\tИмяПараметра = СокрЛП(ПараметрыМетода[Сч - 1]);\n\t\t\t\tОписаниеМетода[\"ИмяПараметра\" + Сч] = ИмяПараметра;\n\t\t\t\t\n\t\t\tКонецЦикла;\n\t\t\t\n\t\t\tСтрокиМетода = Новый Массив;\n\t\t\t\n\t\tИначеЕсли СтрНачинаетсяС(Буфер, МаркерКонецФункции) Тогда\n\t\t\t\n\t\t\tСтрокиМетода.Добавить(МеткаВыходаИзФункции);\n\t\t\t\n\t\t\tОписаниеМетода.ТелоМетода = СтрСоединить(СтрокиМетода, Символы.ПС);\n\t\t\tОписаниеМетодов.Вставить(ОписаниеМетода.ИмяМетода, ОписаниеМетода);\n\t\t\t\n\t\t\tСтрокиМетода = Неопределено;\n\t\t\tОписаниеМетода = Неопределено;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tЕсли СтрокиМетода = Неопределено Тогда\n\t\t\t\tПродолжить;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\t\tБуфер = СтрЗаменить(СтрокаКода, Символы.Таб, \" \");\n\t\t\tБуфер = СокрЛП(Буфер);\n\t\t\tБуфер = ВРег(Буфер);\n\t\t\tЕсли СтрНачинаетсяС(Буфер, МаркерВозврат) Тогда\n\t\t\t\t\n\t\t\t\tБуфер = ЗаменаВозврат + Сред(Буфер, СтрДлина(МаркерВозврат) + 1);\n\t\t\t\tСтрокиМетода.Добавить(Буфер);\n\t\t\t\tСтрокиМетода.Добавить(ДопСтрокаВозврат);\n\t\t\t\t\n\t\t\tИначе\n\t\t\t\t\n\t\t\t\tСтрокиМетода.Добавить(СтрокаКода);\n\t\t\t\t\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат (СериализацияJSON(ОписаниеМетодов));\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ВызовВебСервиса\n\nФункция ПараметрыМетода(Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено) Экспорт\n\t\n\tРезультат = Новый Массив;\n\tЕсли Параметр1 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр1);\n\tКонецЕсли;\n\tЕсли Параметр2 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр2);\n\tКонецЕсли;\n\tЕсли Параметр3 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр3);\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ВызватьМетодВебсервиса(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода) Экспорт\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЕсли ИмяМетода = \"GetData\" Тогда\n\t\tПараметрыДоВызова = СохранитьЗначенияПараметров(ПараметрыМетода[1]);\n\tКонецЕсли;\n\t\n\tНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\tРезультат = СтандартныйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tРезультат = ПодключаемыйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\tРезультат = ВебСервер_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\tДлительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;\n\t\n\tЕсли ИмяМетода = \"GetData\" Тогда\n\t\tПараметрыПослеВызова = СохранитьЗначенияПараметров(Результат);\n\t\tИзмененныеПараметры = ВычислитьИзмененныеПараметры(ПараметрыДоВызова, ПараметрыПослеВызова);\n\tИначе\n\t\tИзмененныеПараметры = Неопределено;\n\tКонецЕсли;\n\t\n\tЗаписатьВызовВЖурналОтладки(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода, Длительность, ИзмененныеПараметры);\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ФабрикаXDTO\n\nФункция ЛокальнаяФабрикаXDTO(НастройкиИнтеграции) Экспорт\n\t\n\t// Внимание! Здесь небольшое волшебство.\n\t// Почему то, если брать системную ФабрикаXDTO - платформа начинает ругаться на отсутствие\n\t// некоторых свойств объектов. Ранее для обхода этого глюка я рекомендовал править схему \n\t// пакета XDTO. Но после некоторого количества раскопок, удалось выяснить, что достаточно\n\t// создать собственную фабрику и загрузить в нее схемы из системной - и вуаля! Ругаться \n\t// перестает. Почему, зачем, что там внутри при этом происходит - науке это неизвестно.\n\t//\n\t// Но это работает только для чтения полученных данных. При записи же возникает обратная\n\t// ситуация - системная фабрика успешно все записывает, а вот наша повторно созданная -\n\t// начинает глючить. Поэтому кое-где используется локальная фабрика, созданная этой функцией, \n\t// а кое где - системная Фабрика XDTO.\n\t\n\tНаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML(НастройкиИнтеграции.ПространствоИменXDTO);\n\tФабрика = Новый ФабрикаXDTO(НаборСхемXML);\n\t\n\tВозврат(Фабрика);\n\t\nКонецФункции\n\n#КонецОбласти\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область НастройкаИнтеграции\n\nПроцедура ВосстановитьНастройкиПодключаемогоМодуля(НастройкиИнтеграции)\n\t\n\tВерсияШаблона = НастройкиИнтеграции.ПодключаемыйМодуль_Версия;\n\t\n\tЕсли ВерсияШаблона = \"РучнаяНастройка\" Тогда\n\t\t// Текст модуля уже находится в восстановленных настройках\n\t\t\n\tИначеЕсли ЗначениеЗаполнено(ВерсияШаблона) И ШаблоныМодулей_СуществуетШаблонДляВерсии(ВерсияШаблона) Тогда\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\t\t\n\tИначе\n\t\tВерсияШаблона = ПодобратьВерсиюШаблона();\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия = ВерсияШаблона;\n\t\t\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = ШаблоныМодулей_ОписаниеМетодовМодуля(НастройкиИнтеграции.ПодключаемыйМодуль_Текст);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ЖурналОтладки\n\nПроцедура ЗаписатьВызовВЖурналОтладки(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода, Длительность, ИзмененныеПараметры = Неопределено)\n\t\n\tЕсли ИмяМетода = \"StatusTSD\" Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\tЕсли ПараметрыОтладки = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\tЕсли Не ПараметрыОтладки.ОтладкаВключена Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tСтруктураЗаписи = Новый Структура();\n\tСтруктураЗаписи.Вставить(\"Время\", \t\t\tТекущаяДатаСеанса());\n\tСтруктураЗаписи.Вставить(\"Длительность\", \tДлительность);\n\tСтруктураЗаписи.Вставить(\"Тип\", \t\t\t\"Вызов\");\n\tСтруктураЗаписи.Вставить(\"Наименование\", \tИмяМетода);\n\tДля Сч = 1 По 3 Цикл\n\t\tЕсли ПараметрыМетода.Количество() >= Сч Тогда\n\t\t\tСтруктураЗаписи.Вставить(\"Параметр\" + Сч, Строка(ПараметрыМетода[Сч - 1]));\n\t\tИначе\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\tСтруктураЗаписи.Вставить(\"ИзмененныеПараметры\", СериализацияJSON(ИзмененныеПараметры));\n\t\n\tПараметрыОтладки.Журнал.Вставить(0, СтруктураЗаписи);\n\tПараметрыОтладки.Версия = ПараметрыОтладки.Версия + 1;\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыОтладки, КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\nКонецПроцедуры\n\nФункция СохранитьЗначенияПараметров(Параметры)\n\t\n\tРезультат = Новый Структура;\n\tДля Каждого Значение Из Параметры.Item Цикл \n\t\tРезультат.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\nФункция ВычислитьИзмененныеПараметры(ИсходныеПараметры, НовыеПараметры)\n\t\n\tСоответствиеПараметров = Новый Соответствие;\n\t\n\tДля Каждого ИсходныйПараметр Из ИсходныеПараметры Цикл\n\t\t\n\t\tЗначения = Новый Структура(\"Параметр, Старое, Новое\", ИсходныйПараметр.Ключ, ИсходныйПараметр.Значение);\n\t\tСоответствиеПараметров.Вставить(ИсходныйПараметр.Ключ, Значения);\n\t\t\n\tКонецЦикла;\n\t\n\tДля Каждого НовыйПараметр Из НовыеПараметры Цикл\n\t\tЕсли СоответствиеПараметров[НовыйПараметр.Ключ] = Неопределено Тогда\n\t\t\t\n\t\t\tЗначения = Новый Структура(\"Параметр, Старое, Новое\", НовыйПараметр.Ключ, , НовыйПараметр.Значение);\n\t\t\tСоответствиеПараметров.Вставить(НовыйПараметр.Ключ, Значения);\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tЗначения = СоответствиеПараметров[НовыйПараметр.Ключ];\n\t\t\tЗначения.Новое = НовыйПараметр.Значение;\n\t\t\t\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tРезультат = Новый Массив;\n\tДля Каждого ПараметрИЗначения Из СоответствиеПараметров Цикл\n\t\t\n\t\tЕсли ПараметрИЗначения.Значение.Старое = ПараметрИЗначения.Значение.Новое Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\n\t\t\n\t\tРезультат.Добавить(ПараметрИЗначения.Значение);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ШаблоныПодключаемыхМодулей\n\nФункция ШаблоныМодулей_ПрефиксМакета()\n\t\n\tВозврат (\"ПодключаемыйМодуль_\");\n\t\nКонецФункции\n\nФункция ПодобратьВерсиюШаблона()\n\n\tПоддерживаемыеВерсии = ШаблоныМодулей_ПолучитьСписокВерсий();\n\tВерсияТекущейКонфигурации = Метаданные.Версия;\n\t\n\tТаблицаВерсий = Новый ТаблицаЗначений();\n\tТаблицаВерсий.Колонки.Добавить(\"Версия\");\n\tТаблицаВерсий.Колонки.Добавить(\"ВерсияЧислом\");\n\tТаблицаВерсий.Колонки.Добавить(\"ТекущаяВерсия\");\n\t\n\tДля Каждого ПоддерживаемаяВерсия Из ПоддерживаемыеВерсии Цикл\n\t\t\n\t\tСтрокаВерсии = ТаблицаВерсий.Добавить();\n\t\tСтрокаВерсии.Версия = ПоддерживаемаяВерсия;\n\t\tСтрокаВерсии.ВерсияЧислом = ВерсияЧислом(ПоддерживаемаяВерсия);\n\t\tСтрокаВерсии.ТекущаяВерсия = Ложь;\n\t\t\n\tКонецЦикла;\n\t\n\tСтрокаВерсии = ТаблицаВерсий.Добавить();\n\tСтрокаВерсии.Версия = ВерсияТекущейКонфигурации;\n\tСтрокаВерсии.ВерсияЧислом = ВерсияЧислом(ВерсияТекущейКонфигурации);\n\tСтрокаВерсии.ТекущаяВерсия = Истина;\n\t\n\tТаблицаВерсий.Сортировать(\"ВерсияЧислом\");\n\tСтрокаТекущейВерсии = ТаблицаВерсий.Найти(Истина, \"ТекущаяВерсия\");\n\tИндексТекущейВерсии = ТаблицаВерсий.Индекс(СтрокаТекущейВерсии);\n\t\n\tЕсли ИндексТекущейВерсии <> (ТаблицаВерсий.Количество() - 1) Тогда\n\t\t\n\t\t// Мы не можем предсказать порядок одинаковых версйи при сортировке,\n\t\t// поэтому нужно проверить, нет ли строчкой выше той версии, которая\n\t\t// нам нужна.\n\t\tСледующаяВерсия = ТаблицаВерсий[ИндексТекущейВерсии + 1];\n\t\tЕсли СледующаяВерсия.ВерсияЧислом = СтрокаТекущейВерсии.ВерсияЧислом Тогда\n\t\t\tВозврат СледующаяВерсия.Версия;\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли ИндексТекущейВерсии > 0 Тогда\n\t\t\n\t\t// Здесь предыдущая версия будет либо полным совпадением, либо наилучшим\n\t\t// вариантом. Т.к. обычно новые версии модуля загружаются для той версии,\n\t\t// в которых они был иизменены, нужно брать ближайшую версию сверху.\n\t\tПредыдущаяВерсия = ТаблицаВерсий[ИндексТекущейВерсии - 1];\n\t\tВозврат ПредыдущаяВерсия.Версия;\n\t\t\n\tКонецЕсли;\n\t\n\t// В отсутствие лучших вариантов, попробуем самую первую доступную версию\n\tВозврат ТаблицаВерсий[0].Версия;\n\nКонецФункции\n\nФункция ШаблоныМодулей_СуществуетШаблонДляВерсии(Версия)\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\tИмяМакетаШаблона = ПрефиксМакета + СтрЗаменить(Версия, \".\", \"_\");\n\t\n\tМакеты = Метаданные().Макеты;\n\tЕсли Макеты.Найти(ИмяМакетаШаблона) = Неопределено Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\t\n\tВозврат Истина;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ВызовВебСервиса\n\nФункция СтандартныйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tМодуль = ОбщегоНазначения.ОбщийМодуль(\"усТСДВебСервис\");\n\tРезультат = ВычислитьЧерезМетодОбъекта(Модуль, ИмяМетода, ПараметрыМетода);\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ПодключаемыйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tОписаниеМетодов = ДесериализацияJSON(НастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов, , Истина);\n\tОписаниеМетода = ОписаниеМетодов[Врег(ИмяМетода)];\n\tЕсли ОписаниеМетода = Неопределено Тогда\n\t\tОписаниеОшибки = СтрШаблон(\n\t\t\"Ошибка интеграции с веб-сервисом TSD. Проверьте настройки веб-сервиса.\n\t\t|Подключаемый модуль: Вызов метода %1: Не найдено описание метода в подключаемом модуле\"\n\t\t, ИмяМетода);\n\t\tВызватьИсключение ОписаниеОшибки;\n\tКонецЕсли;\n\t\n\tСтрокиКодаВызова = Новый Массив;\n\tДля Сч = 1 По ОписаниеМетода[\"КоличествоПараметров\"] Цикл\n\t\t\n\t\tИндексПараметра = Сч - 1;\n\t\tИмяПараметра = ОписаниеМетода[\"ИмяПараметра\" + Сч];\n\t\tКодПрисвоенияПараметра = СтрШаблон(\"%1 = ПараметрыМетода[%2];\", ИмяПараметра, ИндексПараметра);\n\t\tСтрокиКодаВызова.Добавить(КодПрисвоенияПараметра);\n\t\t\n\tКонецЦикла;\n\t\n\tСтрокиКодаВызова.Добавить(ОписаниеМетода[\"ТелоМетода\"]);\t\n\tКодВызова = СтрСоединить(СтрокиКодаВызова, Символы.ПС);\n\t\n\tВебСервис_Результат = Неопределено;\n\t\n\t// Здесь конечно есть потенциальная уязвимость, т.к. текст ручной настройки подключаемого\n\t// модуля мжно ввести любой. Но выбора у нас нет - либо так, либо не получиться запустить \n\t// эмулятор в некоторых случаях.\n\t// BSLLS:ExecuteExternalCode-off\n\tВыполнить(КодВызова);\n\t// BSLLS:ExecuteExternalCode-on\n\t\n\tВозврат(ВебСервис_Результат);\n\t\nКонецФункции\n\nФункция ВебСервер_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tУРЛ = ДополнитьУРЛ(НастройкиИнтеграции.ВебСервер_УРЛ);\n\tОпределение = Новый WSОпределения(УРЛ, НастройкиИнтеграции.ВебСервер_Логин, НастройкиИнтеграции.ВебСервер_Пароль, , 5);\n\tПрокси = Новый WSПрокси(Определение, НастройкиИнтеграции.ПространствоИменXDTO, \"TSD\", \"TSDSoap12\", , 5);\n\tПрокси.Пользователь = НастройкиИнтеграции.ВебСервер_Логин;\n\tПрокси.Пароль = НастройкиИнтеграции.ВебСервер_Пароль;\n\t\n\tРезультат = ВычислитьЧерезМетодОбъекта(Прокси, ИмяМетода, ПараметрыМетода);\n\t\n\t// В некоторых релизах WMS были ошибки в XDTO пакете, которые проявляются только в Эмуляторе\n\t// и только в режиме работы через веб-сервис. Это еще какая-то черная магия внутри платформы,\n\t// и я убил огромное количество времени пытаясь её обойти - безуспешно.\n\t// Потому в отдельной функции проверяем, есть ли в пакете известные нам ошибки и исправляем их\n\t// вручную.\n\tРезультат = ИсправитьОшибкиXDTOПакета(Результат, Определение.ФабрикаXDTO, НастройкиИнтеграции.ПространствоИменXDTO, ИмяМетода);\n\t\n\t// Результат десериализуется в неведомую зверушку, которая не совпадает по формату\n\t// с объектами внутреннего типа, генерируемыми при работе с модулем интеграции.\n\t// Для того, чтобы не разводить лапшу с \"Если Режим = ВебСервер Тогда\" здесь\n\t// делаем хитрость - повторно сериализуем и десериализуем уже с указанием внутреннего\n\t// типа. Помогает.\n\t\n\tЗаписьXML = Новый ЗаписьXML;\n\tЗаписьXML.УстановитьСтроку();\n\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Результат);\n\tСтрокаXML = ЗаписьXML.Закрыть();\n\t\n\tЧтениеXML = Новый ЧтениеXML;\n\tЧтениеXML.УстановитьСтроку(СтрокаXML);\n\tИмяТипаXDTO = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, Результат.Тип().Имя);\n\tКонвертированныйРезультат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ИмяТипаXDTO);\n\t\n\tВозврат КонвертированныйРезультат;\n\t\nКонецФункции\n\nФункция ИсправитьОшибкиXDTOПакета(Объект, Фабрика, ПространствоИмен, ИмяМетода)\n\t\n\tИсправитьОшибку501_wmsForm_PictureCollection(Объект, Фабрика, ПространствоИмен, ИмяМетода);\n\t\n\tВозврат Объект;\n\t\nКонецФункции\n\nФункция ИсправитьОшибку501_wmsForm_PictureCollection(Объект, Фабрика, ПространствоИмен, ИмяМетода)\n\t\n\t// Ошибка с незаполнением якобы обязательного поля PictureCollection в объекте wmsForm\n\t// Релиз 5.0.1\n\tЕсли ИмяМетода = \"GetForms\" Тогда\n\t\tФорма = Объект.Operation[0].Form[0];\n\tИначеЕсли ИмяМетода = \"GetDynamicForm\" Тогда\n\t\tФорма = Объект;\n\tИначеЕсли ИмяМетода = \"LoadFormByName\" Тогда\n\t\tФорма = Объект;\n\tИначе\n\t\tВозврат Объект; // Корректировать нечего\n\tКонецЕсли;\n\t\n\tЕсли Форма.Свойства().Получить(\"PictureCollection\") <> Неопределено Тогда // Есть такое свойство\n\t\tЕсли Форма.PictureCollection = Неопределено Тогда // Но оно не заполнено\n\t\t\tТипЗначенияPictureCollection = Фабрика.Тип(ПространствоИмен, \"wmsPictureCollection\");\n\t\t\tФорма.PictureCollection = Фабрика.Создать(ТипЗначенияPictureCollection);\n\t\tКонецЕсли;\t\t\t\n\tКонецЕсли;\n\t\n\tВозврат Объект;\n\t\nКонецФункции\n\nФункция ДополнитьУРЛ(УРЛ)\n\t\n\t// Варианты задания УРЛ\n\t// http://localhost/wms/ws/tsd.1cws?wsdl\n\t// http://localhost/wms/ws/tsd.1cws\n\t// http://localhost/wms/ws/tsd\n\t// http://localhost/wms/ws/\n\t// http://localhost/wms/ws\n\t// http://localhost/wms/\n\t// http://localhost/wms\n\t\n\tЕсли СтрЗаканчиваетсяНа(УРЛ, \"?wsdl\") Тогда\n\t\tРезультат = УРЛ;\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \".1cws\") Тогда\n\t\tРезультат = УРЛ + \"?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"tsd\") Тогда\n\t\tРезультат = УРЛ + \".1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/ws/\") Тогда\n\t\tРезультат = УРЛ + \"tsd.1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/ws\") Тогда\n\t\tРезультат = УРЛ + \"/tsd.1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/\") Тогда\n\t\tРезультат = УРЛ + \"ws/tsd.1cws?wsdl\";\n\t\t\n\tИначе\n\t\tРезультат = УРЛ + \"/ws/tsd.1cws?wsdl\";\n\t\t\n\tКонецЕсли;\n\t\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ВычислитьЧерезМетодОбъекта(Объект, ИмяМетода, ПараметрыМетода)\n\t\n\tПараметрыСтрокой = \"\";\n\tЕсли ПараметрыМетода <> Неопределено И ПараметрыМетода.Количество() > 0 Тогда\n\t\tДля Индекс = 0 По ПараметрыМетода.ВГраница() Цикл \n\t\t\tПараметрыСтрокой = ПараметрыСтрокой + \"ПараметрыМетода[\" + Индекс + \"],\";\n\t\tКонецЦикла;\n\t\tПараметрыСтрокой = Сред(ПараметрыСтрокой, 1, СтрДлина(ПараметрыСтрокой) - 1);\n\tКонецЕсли;\n\t\n\tСтрокаЗапуска = СтрШаблон(\"Объект.%1(%2)\", ИмяМетода, ПараметрыСтрокой);\n\t\n\t// Строка запуска сгенерирована нами самостоятельно и гарантировано безопасна.\n\t// BSLLS:ExecuteExternalCode-off\n\tРезультат = Вычислить(СтрокаЗапуска);\n\t// BSLLS:ExecuteExternalCode-on\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти\n\nФункция ВерсияЧислом(Знач СтрокаВерсии)\n\t\n\tЧислоРазделовВерсии = 4;\t\t// Сколько разрядов мы ожидаем увидеть в строке версии\n\tМаксРазрядовВРазделеВерсии = 2; // Сколько цифр мы ожидаем увидеть в одном разряде\n\t\n\tСтрокаВерсии = ?(ПустаяСтрока(СтрокаВерсии), \"0.0.0.0\", СтрокаВерсии);\n\tВерсияМассивом = СтрРазделить(СтрокаВерсии, \".\");\n\tПока ВерсияМассивом.Количество() < ЧислоРазделовВерсии Цикл\n\t\tВерсияМассивом.Добавить(\"0\");\n\tКонецЦикла;\n\t\n\tРезультат = 0;\n\tОписаниеТиповЧисло = Новый ОписаниеТипов(\"Число\");\n\tДля Разряд = 1 По ЧислоРазделовВерсии Цикл\n\t\t\n\t\tОбратныйИндексРазряда = ЧислоРазделовВерсии - Разряд;\n\t\tРазрядЧислом = ОписаниеТиповЧисло.ПривестиЗначение(ВерсияМассивом[Разряд - 1]);\n\t\tВесРазряда = Pow(10, ОбратныйИндексРазряда * МаксРазрядовВРазделеВерсии);\n\t\tРезультат = Результат + (РазрядЧислом * ВесРазряда);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n// Копия функции БСП, скопирована для снижения связности\n// Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину.\n// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,\n// рекомендуется использовать функцию платформы СтрРазделить.\n//\n// Параметры:\n// Значение - Строка - текст с разделителями;\n// Разделитель - Строка - разделитель строк текста, минимум 1 символ;\n// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.\n// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:\n// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки\n// включаются в результат;\n// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в\n// случае разделителя-пробела результатом функции будет массив, содержащий одно значение \"\" (пустая строка), а\n// при других разделителях результатом функции будет пустой массив.\n// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок.\n//\n// Возвращаемое значение:\n// Массив - массив строк.\n//\n// Пример:\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\",один,,два,\", \",\")\n// - возвратит массив из 5 элементов, три из которых - пустые: \"\", \"один\", \"\", \"два\", \"\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\",один,,два,\", \",\", Истина)\n// - возвратит массив из двух элементов: \"один\", \"два\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\" один два \", \" \")\n// - возвратит массив из двух элементов: \"один\", \"два\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\")\n// - возвратит пустой массив;\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\",,Ложь)\n// - возвратит массив с одним элементом: \"\"(пустая строка);\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\", \" \")\n// - возвратит массив с одним элементом: \"\" (пустая строка).\n//\nФункция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = \",\", Знач ПропускатьПустыеСтроки = Неопределено,\n\t\tСокращатьНепечатаемыеСимволы = Ложь) Экспорт\n\t\n\tЕсли Разделитель = \",\"\n\t\tИ ПропускатьПустыеСтроки = Неопределено\n\t\tИ СокращатьНепечатаемыеСимволы Тогда\n\t\t\n\t\tРезультат = СтрРазделить(Значение, \",\", Ложь);\n\t\tДля Индекс = 0 По Результат.ВГраница() Цикл\n\t\t\tРезультат[Индекс] = СокрЛП(Результат[Индекс]);\n\t\t\tКонецЦикла;\n\t\tВозврат Результат;\n\t\t\n\tКонецЕсли;\n\t\n\tРезультат = Новый Массив;\n\t\n\t// Для обеспечения обратной совместимости.\n\tЕсли ПропускатьПустыеСтроки = Неопределено Тогда\n\t\tПропускатьПустыеСтроки = ?(Разделитель = \" \", Истина, Ложь);\n\t\tЕсли ПустаяСтрока(Значение) Тогда\n\t\t\tЕсли Разделитель = \" \" Тогда\n\t\t\t\tРезультат.Добавить(\"\");\n\t\t\tКонецЕсли;\n\t\t\tВозврат Результат;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t//\n\t\n\tПозиция = СтрНайти(Значение, Разделитель);\n\tПока Позиция > 0 Цикл\n\t\tПодстрока = Лев(Значение, Позиция - 1);\n\t\tЕсли Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда\n\t\t\tЕсли СокращатьНепечатаемыеСимволы Тогда\n\t\t\t\tРезультат.Добавить(СокрЛП(Подстрока));\n\t\t\tИначе\n\t\t\t\tРезультат.Добавить(Подстрока);\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\tЗначение = Сред(Значение, Позиция + СтрДлина(Разделитель));\n\t\tПозиция = СтрНайти(Значение, Разделитель);\n\tКонецЦикла;\n\t\n\tЕсли Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда\n\t\tЕсли СокращатьНепечатаемыеСимволы Тогда\n\t\t\tРезультат.Добавить(СокрЛП(Значение));\n\t\tИначе\n\t\t\tРезультат.Добавить(Значение);\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция СериализацияJSON(Знач ИсходныйОбъект)\n\t\n\tЗаписьJSON = Новый ЗаписьJSON;\n\tЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));\n\tЗаписатьJSON(ЗаписьJSON, ИсходныйОбъект);\n\tРезультат_JSON = ЗаписьJSON.Закрыть();\n\t\n\tВозврат (Результат_JSON);\n\t\nКонецФункции\n\nФункция ДесериализацияJSON(Знач СтрокаJSON, Знач СвойстваСДатой = Неопределено, СчитатьВСоответствие = Ложь)\n\t\n\tЧтениеJSON = Новый ЧтениеJSON;\n\tЧтениеJSON.УстановитьСтроку(СтрокаJSON);\n\tСчитанныйОбъект = ПрочитатьJSON(ЧтениеJSON, СчитатьВСоответствие, СвойстваСДатой);\n\t\n\tВозврат (СчитанныйОбъект);\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\Форма\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\Форма\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/fe5229c00d26a2dadebd8b088d83227db5a1f7a8/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%5CForm.obj.bsl",
+ "size": 27346,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tКонтекстЭмулятора = Новый Структура();\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровТСД\",\t\tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровОтладки\", \tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровИнтеграции\",\tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"РежимВнешнейОбработки\",\t\t\tНеопределено);\n\t\n\tИнициализироватьПараметрыИнтеграции();\n\t\n\tОбработкаМетаданные = Обработка.Метаданные();\n\tРасширениеРодитель = ОбработкаМетаданные.РасширениеКонфигурации();\n\tЕсли РасширениеРодитель = Неопределено Тогда\n\t\tПрефиксОписания = \"epf\";\n\t\tНомерВерсии = ОбработкаМетаданные.Комментарий;\n\t\tКонтекстЭмулятора.РежимВнешнейОбработки = Истина;\n\tИначе\n\t\tПрефиксОписания = \"cfe\";\n\t\tНомерВерсии = РасширениеРодитель.Версия;\n\t\tКонтекстЭмулятора.РежимВнешнейОбработки = Ложь;\n\tКонецЕсли;\n\t\n\tОсновнойЗаголовокФормы = СтрШаблон(\"Эмулятор ТСД (%1 v%2)\", ПрефиксОписания, НомерВерсии);\n\tЗаголовок = ОсновнойЗаголовокФормы;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\t\n\tЕсли РезультатПроверки.КритическаяОшибка Тогда\n\t\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияПредупрежденияОКритическойОшибке\", ЭтотОбъект);\n\t\tТекстОповещения = СтрШаблон(\n\t\t\"Текущая конфигурация не поддерживает работу эмулятора ТСД.\n\t\t|Причина: %1\"\n\t\t, РезультатПроверки.ОписаниеОшибки);\n\t\tПоказатьПредупреждение(Оповещение, ТекстОповещения);\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеЗакрытияПредупрежденияОКритическойОшибке(ДополнительныеПараметры) Экспорт\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)\n\t\n\t// По большому счету, единственная причина проверки - при завершении работы завершены\n\t// серверные вызовы. Поэтому здесь такая странная конструкция, мы проверяем одновременно\n\t// и на Неопределено и на Ложь\n\tЕсли (ЗавершениеРаботы = Неопределено)\t\t// На старых версиях платформы параметр ЗавершениеРаботы и все последующие опускаются\n\t\t\tИЛИ Не ЗавершениеРаботы Тогда\t\t// На новых версиях - серверные вызовы при завершении работы запрещены\n\t\tПередЗакрытиемНаСервере(КонтекстЭмулятора);\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура ПередЗакрытиемНаСервере(КонтекстЭмулятора)\n\t\n\tСохранитьПараметрыИнтеграции(КонтекстЭмулятора);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура НовоеУстройство(Команда)\n\t\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаНаименования\", ЭтотОбъект);\n\tПоказатьВводСтроки(Оповещение, \"\", \"Введите наименование устройства\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаНаименования(Результат, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли Результат = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tНовоеУстройство = СоздатьУстройствоНаСервере(Результат);\n\t\n\tНачатьСеанс(НовоеУстройство);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура БыстроеСозданиеНовогоУстройства(Команда)\n\t\n\tНовоеУстройство = СоздатьУстройствоНаСервере();\n\t\n\tНачатьСеанс(НовоеУстройство);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура НастройкаИнтеграции(Команда)\n\t\n\tОткрытьНастройкуИнтеграции();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСеансов\n\n&НаКлиенте\nПроцедура СписокСеансовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n\tНачатьСеанс(Элемент.ТекущиеДанные.НомерУстройства);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область НастройкиИнтеграции\n\n&НаСервереБезКонтекста\nФункция ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора)\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"КритическаяОшибка\", Ложь);\n\tРезультат.Вставить(\"ОписаниеОшибки\", \"\");\n\tРезультат.Вставить(\"ТребуетсяРучнаяНастройка\", Ложь);\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЕсли ПустаяСтрока(НастройкиИнтеграции.ПространствоИменXDTO) Тогда\n\t\t\n\t\tРезультат.КритическаяОшибка = Истина;\n\t\tРезультат.ОписаниеОшибки = \"В конфигурации отсутствует XDTO пакет TSD.\";\n\t\tВозврат Результат;\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\t// Проверки не требуются\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tЕсли ПустаяСтрока(НастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов) Тогда\n\t\t\tРезультат.ТребуетсяРучнаяНастройка = Истина;\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\tЕсли ПустаяСтрока(НастройкиИнтеграции.ВебСервер_УРЛ) Тогда\n\t\t\tРезультат.ТребуетсяРучнаяНастройка = Истина;\n\t\tКонецЕсли;\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ПредложитьРучнуюНастройкуИнтеграции()\n\t\n\tТекстВопроса =\n\t\"Для текущей конфигурации требуется ручная настройка интеграции.\n\t|Открыть форму настройки?\";\n\tОповещение = Новый ОписаниеОповещения(\"ПослеОтветаНаВопросРучнойНастройки\", ЭтотОбъект);\n\tПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , \"Требуется ручная настройка\");\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПредложитьНастройкуИнтеграцииПослеОшибки(ОписаниеОшибки)\n\t\n\tТекстВопроса = СтрШаблон(\n\t\"При подключении к базе возникла ошибка:\n\t| %1\n\t|\n\t|Скорее всего, это означает что неправльно выполнена настройка интеграции.\n\t|Открыть форму настройки?\"\n\t, ОписаниеОшибки);\n\tОповещение = Новый ОписаниеОповещения(\"ПослеОтветаНаВопросОНастройкеИнтеграции\", ЭтотОбъект);\n\tПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , \"Ошибка при подключении\");\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеОтветаНаВопросОНастройкеИнтеграции(РезультатВопроса, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли РезультатВопроса = КодВозвратаДиалога.Да Тогда\n\t\tОткрытьНастройкуИнтеграции();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьНастройкуИнтеграции()\n\t\n\tПараметрыФормы = Новый Структура();\n\tПараметрыФормы.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияНастройкиИнтеграции\", ЭтотОбъект);\n\tФормаНастройкиИнтеграции = ПолноеИмяФормы(\"ФормаНастройкиИнтеграции\");\n\tОткрытьФорму(ФормаНастройкиИнтеграции, ПараметрыФормы, ЭтотОбъект, , , Оповещение);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеЗакрытияНастройкиИнтеграции() Экспорт\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\t\tВозврат;\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ИнициализироватьПараметрыИнтеграции()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tНастройкиИнтеграции = Обработка.НоваяСтруктураНастроекИнтеграции();\n\t\n\tСохраненныеНастройкиИнтеграции = ХранилищеОбщихНастроек.Загрузить(\"ЭмуляторТСД\", \"НастройкиИнтеграции\");\n\t\n\tЕсли ЗначениеЗаполнено(СохраненныеНастройкиИнтеграции) Тогда\n\t\tЗаполнитьЗначенияСвойств(НастройкиИнтеграции, СохраненныеНастройкиИнтеграции);\n\tКонецЕсли;\n\t\n\tЕсли НастройкиИнтеграции.Режим = Неопределено Тогда\n\t\tОбработка.АвтоопределениеНастроекИнтеграции(НастройкиИнтеграции);\n\tИначе\n\t\tОбработка.ПослеВосстановленияСохраненныхНастроекИнтеграции(НастройкиИнтеграции);\n\tКонецЕсли;\n\t\n\tПакетXDTO = Метаданные.ПакетыXDTO.Найти(\"TSD\");\n\tЕсли ПакетXDTO <> Неопределено Тогда\n\t\tНастройкиИнтеграции.ПространствоИменXDTO = ПакетXDTO.ПространствоИмен;\n\tКонецЕсли;\n\t\n\tПоместитьВоВременноеХранилище(НастройкиИнтеграции, КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура СохранитьПараметрыИнтеграции(КонтекстЭмулятора)\n\t\n\tСохраняемыеНастройки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\tСохраняемыеНастройки.Удалить(\"ПодключаемыйМодуль_ОписаниеМетодов\");\n\tСохраняемыеНастройки.Удалить(\"ПространствоИменXDTO\");\n\t\n\tХранилищеОбщихНастроек.Сохранить(\"ЭмуляторТСД\", \"НастройкиИнтеграции\", СохраняемыеНастройки);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область НачалоРаботы\n\n&НаКлиенте\nПроцедура НачатьСеанс(НомерВыбранногоУстройства)\n\t\n\tНомерУстройства = НомерВыбранногоУстройства;\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПопытка\n\t\tОписаниеОсновнойФормы = ЗагрузитьОписанияФормНаСервере();\n\tИсключение\n\t\tПредложитьНастройкуИнтеграцииПослеОшибки(ОписаниеОшибки());\n\t\tВозврат;\n\tКонецПопытки;\n\t\n\tЗаголовок = СтрШаблон(\"%1 [%2]\", ОсновнойЗаголовокФормы, НомерУстройства);\n\t\n\tОткрытьФормыТСД(ОписаниеОсновнойФормы);\n\t\n\tПодключитьОбработчикОжидания(\"Подключаемый_ЗапроситьОбновлениеСтатуса\", 5);\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ЗагрузитьОписанияФормНаСервере(НачалоРаботы = Истина) Экспорт\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\tЛокальнаяФабрикаXDTO = Обработка.ЛокальнаяФабрикаXDTO(НастройкиИнтеграции);\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, НачалоРаботы);\n\tРезультат_GetForms = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetForms\", ПараметрыМетода);\n\tЕсли Результат_GetForms = Неопределено Тогда \n\t\tВызватьИсключение \"GetForms: Пустой результат. Не получены первоначальные формы.\";\n\tКонецЕсли;\t\n\t\n\tПолученныеПараметрыТСД = Результат_GetForms.ValuesForm.Item;\n\tПараметрыТСД = Новый Структура;\n\tДля Каждого ПолученныйПараметр Из ПолученныеПараметрыТСД Цикл \n\t\tПараметрыТСД.Вставить(ПолученныйПараметр.Name, ПолученныйПараметр.Text);\n\tКонецЦикла;\n\tПоместитьВоВременноеХранилище(ПараметрыТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tОписаниеОсновнойФормы = Новый Структура;\n\tОписаниеОсновнойФормы.Вставить(\"Операция\", \t\tРезультат_GetForms.StartOperation);\n\tОписаниеОсновнойФормы.Вставить(\"Страница\", \t\tРезультат_GetForms.StartStep);\n\tОписаниеОсновнойФормы.Вставить(\"Имя\", \t\t\tРезультат_GetForms.StartOperation + \"/\" + Формат(Результат_GetForms.StartStep, \"ЧН=0; ЧГ=\"));\n\tОписаниеОсновнойФормы.Вставить(\"КодФормыXML\",\t\"\");\n\t\n СписокФормТСД.Очистить();\n\tДля Каждого ОперацияТСД Из Результат_GetForms.Operation Цикл\n\t\t\n\t\tДля Каждого ФормаОперацииТСД Из ОперацияТСД.Form Цикл\n\t\t\t\n\t\t\tНазваниеФормы = ОперацияТСД.Name + \"/\" + Формат(ФормаОперацииТСД.Number, \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tЗаписьXML = Новый ЗаписьXML;\n\t\t\tЗаписьXML.УстановитьСтроку();\n\t\t\tЛокальнаяФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ФормаОперацииТСД);\n\t\t\tКодФормыXML = ЗаписьXML.Закрыть();\n\t\t\t\n\t\t\tНоваяСтрока = СписокФормТСД.Добавить();\n\t\t\tНоваяСтрока.Имя \t= НазваниеФормы;\n\t\t\tНоваяСтрока.КодФормыXML = КодФормыXML;\n\t\t\tНоваяСтрока.Операция \t= ОперацияТСД.Name;\n\t\t\tНоваяСтрока.Страница\t= ФормаОперацииТСД.Number;\n\t\t\t\n\t\tКонецЦикла;\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(ОписаниеОсновнойФормы);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ОткрытьФормыТСД(ОписаниеОсновнойФормы) Экспорт\n\t\n\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\n\tДля Каждого СтрокаФормыТСД Из СписокФормТСД Цикл \n\t\tЕсли НайтиФормуПоЗаголовку(СтрокаФормыТСД.Имя) = Неопределено Тогда \n\t\t\tОткрытьФорму(ФормаОперации, ПараметрыОткрытияФормыОперации(СтрокаФормыТСД), ЭтотОбъект, Истина, Окно);\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tОткрытаяОсновнаяФорма = НайтиФормуПоЗаголовку(ОписаниеОсновнойФормы.Имя);\n\tЕсли ОткрытаяОсновнаяФорма = Неопределено Тогда\n\t\tОткрытьФорму(ФормаОперации, ПараметрыОткрытияФормыОперации(ОписаниеОсновнойФормы), ЭтотОбъект, Истина, Окно);\n\tИначе\n\t\tОткрытаяОсновнаяФорма.ОбновитьСостояние();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция НайтиФормуПоЗаголовку(ИскомыйЗаголовок)\n\t\n\tНайденнаяФорма = Неопределено;\n\tДля Каждого ОткрытаяФорма Из Окно.Содержимое Цикл\n\t\tЕсли ОткрытаяФорма.Заголовок = ИскомыйЗаголовок Тогда \n\t\t\tНайденнаяФорма = ОткрытаяФорма;\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат(НайденнаяФорма);\n\t\nКонецФункции\n\n&НаКлиенте\nФункция ПараметрыОткрытияФормыОперации(СтрокаФормыТСД)\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"НомерУстройства\", НомерУстройства);\n\tРезультат.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\t\n\tРезультат.Вставить(\"ИмяСтраницы\", СтрокаФормыТСД.Имя);\n\tРезультат.Вставить(\"Операция\", СтрокаФормыТСД.Операция);\n\tРезультат.Вставить(\"Страница\", СтрокаФормыТСД.Страница);\n\t\n\tЕсли Не ПустаяСтрока(СтрокаФормыТСД.КодФормыXML) Тогда\n\t\tРезультат.Вставить(\"КодФормыXML\", СтрокаФормыТСД.КодФормыXML);\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура Подключаемый_ЗапроситьОбновлениеСтатуса()\n\t\n\tРезультат = ЗапроситьОбновлениеСтатусаНаСервере();\n\t\n\tЕсли Результат.ЗвуковойСигнал Тогда \n\t\t#Если Не ВебКлиент Тогда\t\t\n\t\t\tСигнал();\n\t\t#КонецЕсли\n\tКонецЕсли;\n\t\n\tЕсли Не Пустаястрока(Результат.Сообщение) Тогда\n\t\t\n\t\tЕсли Не ФормаСообщенияОткрыта Тогда\n\t\t\t\n\t\t\tПараметрыФормыСообщения = Новый Структура(\"ТекстСообщения\", Результат.Message);\n\t\t\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияФормыСообщения\", ЭтотОбъект);\n\t\t\tФормаСообщений = ПолноеИмяФормы(\"ФормаСообщений\");\n\t\t\tОткрытьФорму(ФормаСообщений, ПараметрыФормыСообщения, ЭтотОбъект, , , , Оповещение);\n\t\t\t\n\t\t\tФормаСообщенияОткрыта = Истина;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОповестить(\"НовоеСообщениеСтатуса\", Результат.Сообщение, \"ЭмуляторТСД\");\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ЗапроситьОбновлениеСтатусаНаСервере()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Истина);\n\tОтвет = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"StatusTSD\", ПараметрыМетода);\n\t\n\tРезультат = Новый Структура(\"ЗвуковойСигнал, Сообщение\", Ответ.Signal, Ответ.Message);\n\tВозврат(Результат);\n\nКонецФункции\n\n&НаКлиенте\nПроцедура ПослеЗакрытияФормыСообщения(РезультатЗакрытия, ДополнительныеПараметры) Экспорт\n\t\n\tФормаСообщенияОткрыта = Ложь;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область УправлениеУстройствами\n\n&НаСервереБезКонтекста\nФункция СоздатьУстройствоНаСервере(ИмяУстройства = \"\")\n\t\n\tЕсли ПустаяСтрока(ИмяУстройства) Тогда\n\t\tИмяУстройства = \"ЭТСД - \" + Строка(Новый УникальныйИдентификатор);\n\tКонецЕсли;\n\t\n\tОригинальноеИмя = ИмяУстройства;\n\tСч = 0;\n\tИмяУникально = Ложь;\n\tМенеджерЗаписи = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьМенеджерЗаписи();\n\t\n\tПока Не ИмяУникально Цикл\n\t\t\n\t\tМенеджерЗаписи.НомерУстройства = ИмяУстройства;\n\t\tМенеджерЗаписи.Прочитать();\n\t\tЕсли Не МенеджерЗаписи.Выбран() Тогда\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\t\t\n\t\tСч = Сч + 1;\n\t\tИмяУстройства = СтрШаблон(\"%1 (%2)\", ОригинальноеИмя, Формат(Сч, \"ЧГ=0\"));\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(ИмяУстройства);\n\t\nКонецФункции\n\n#КонецОбласти\n\n&НаКлиенте\nФункция ПолноеИмяФормы(ИмяФормы)\n\t\n\tЕсли КонтекстЭмулятора.РежимВнешнейОбработки Тогда\n\t\tПрефиксМетаданных = \"ВнешняяОбработка\";\n\tИначе\n\t\tПрефиксМетаданных = \"Обработка\";\n\tКонецЕсли;\n\t\n\tРезультат = СтрШаблон(\"%1.ЭмуляторТСД.Форма.%2\", ПрефиксМетаданных, ИмяФормы);\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\ФормаВводаШтрихкода\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\ФормаВводаШтрихкода\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/41e9fdeaf103fc1351ea8a1c70ff340434c610f2/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%92%D0%B2%D0%BE%D0%B4%D0%B0%D0%A8%D1%82%D1%80%D0%B8%D1%85%D0%BA%D0%BE%D0%B4%D0%B0%5CForm.obj.bsl",
+ "size": 7813,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tСохраненныеНастройки = ПрочитатьНастройкиНаСервере();\n\t\n\tМассивТиповШК = СохраненныеНастройки.МассивТиповШК;\n\tЕсли Не ЗначениеЗаполнено(МассивТиповШК) Тогда\n\t\tМассивТиповШК = МассивТиповШКПоУмолчанию();\n\tКонецЕсли;\n\tДля Каждого ТипШК Из МассивТиповШК Цикл\n\t\tЭлементы.ТипШК.СписокВыбора.Добавить(ТипШК, ТипШК);\n\tКонецЦикла;\n\tТипШК = МассивТиповШК[0];\n\t\n\tМаксДлинаОтображаемогоШК = 40;\n\tМассивШК = СохраненныеНастройки.МассивШК;\n\tЕсли ЗначениеЗаполнено(МассивШК) Тогда\n\t\tДля Каждого ШК Из МассивШК Цикл\n\t\t\t\n\t\t\tПредставление = ШК;\n\t\t\tЕсли СтрДлина(Представление) > МаксДлинаОтображаемогоШК Тогда \n\t\t\t\tПредставление = Лев(Представление, (МаксДлинаОтображаемогоШК - 1)) + \"...\";\n\t\t\tКонецЕсли;\n\t\t\tСписокШК.Добавить(ШК, Представление);\n\t\t\t\n\t\tКонецЦикла;\n\t\t\n\t\tШтрихкод = МассивШК[0];\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ОК(Команда)\n\t\n\tМаксЗаписейИсторииТиповШК = 20;\n\tМаксЗаписейИсторииШК = 10;\n\t\n\tМассивТиповШК = Элементы.ТипШК.СписокВыбора.ВыгрузитьЗначения();\n\tТекущийИндекс = МассивТиповШК.Найти(ТипШК);\n\tЕсли ТекущийИндекс = Неопределено Тогда\n\t\t\n\t\tМассивТиповШК.Вставить(0, ТипШК);\n\t\tЕсли МассивТиповШК.ВГраница() >= МаксЗаписейИсторииТиповШК Тогда\n\t\t\tМассивТиповШК.Удалить(МаксЗаписейИсторииТиповШК);\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t\n\t\tМассивТиповШК.Удалить(ТекущийИндекс);\n\t\tМассивТиповШК.Вставить(0, ТипШК);\n\t\t\n\tИначе\n\t\tВызватьИсключение(\"Ошибка обработки.\");\n\tКонецЕсли;\n\t\n\tМассивШК = СписокШК.ВыгрузитьЗначения();\n\tТекущийИндекс = МассивШК.Найти(Штрихкод);\n\tЕсли ТекущийИндекс = Неопределено Тогда\n\t\t\n\t\tМассивШК.Вставить(0, Штрихкод);\n\t\tЕсли МассивШК.ВГраница() >= МаксЗаписейИсторииШК Тогда\n\t\t\tМассивШК.Удалить(МаксЗаписейИсторииШК);\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t\n\t\tМассивШК.Удалить(ТекущийИндекс);\n\t\tМассивШК.Вставить(0, Штрихкод);\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t// Ничего делать не нужно\n\t\t\n\tИначе\n\t\tВызватьИсключение(\"Ошибка обработки.\");\n\tКонецЕсли;\n\t\n\tСохранитьНастройкиНаСервере(МассивТиповШК, МассивШК);\n\t\n\tРезультат = Новый Структура(\"ТипШК, Штрихкод\", ТипШК, Штрихкод);\n\tЗакрыть(Результат);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Отмена(Команда)\n\t\n\tЗакрыть(Неопределено);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьCR(Команда)\n\t\n\tВставитьТекст(Символ(13));\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьGS(Команда)\n\t\n\tВставитьТекст(\"\\x1d\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьLF(Команда)\n\t\n\tВставитьТекст(Символ(10));\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\n// BSLLS:Typo-off\nПроцедура ПослеВыбораШтрихкодаИзСписка(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт\n// BSLLS:Typo-on\n\t\n\tЕсли ВыбранныйЭлемент = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tШтрихкод = ВыбранныйЭлемент.Значение;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ШтрихкодНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n// BSLLS:Typo-off\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВыбораШтрихкодаИзСписка\", ЭтотОбъект);\n// BSLLS:Typo-on\n\tПоказатьВыборИзМеню(Оповещение, СписокШК, Элементы.Штрихкод);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервереБезКонтекста\nФункция ПрочитатьНастройкиНаСервере()\n\t\n\tМассивТиповШК = ХранилищеОбщихНастроек.Загрузить(\"ЭТСД_Эмулятор\", \"МассивТиповШК\");\n\tМассивШК = ХранилищеОбщихНастроек.Загрузить(\"ЭТСД_Эмулятор\", \"МассивШК\");\n\t\n\tРезультат = Новый Структура(\"МассивТиповШК, МассивШК\", МассивТиповШК, МассивШК);\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервереБезКонтекста\nПроцедура СохранитьНастройкиНаСервере(МассивТиповШК, МассивШК)\n\t\n\tХранилищеОбщихНастроек.Сохранить(\"ЭТСД_Эмулятор\", \"МассивТиповШК\", МассивТиповШК);\n\tХранилищеОбщихНастроек.Сохранить(\"ЭТСД_Эмулятор\", \"МассивШК\", МассивШК);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция МассивТиповШКПоУмолчанию()\n\t\n\tТипыШК = Новый Массив;\n\tТипыШК.Добавить(\"Code128\");\n\tТипыШК.Добавить(\"GS1_Databar\");\n\tТипыШК.Добавить(\"DataMatrix\");\n\tТипыШК.Добавить(\"QRCode\");\n\tТипыШК.Добавить(\"PDF417\");\n\tТипыШК.Добавить(\"EANJAN\");\n\tТипыШК.Добавить(\"UPC\");\n\tТипыШК.Добавить(\"MicroPDF417\");\n\tТипыШК.Добавить(\"DataMatrixInverse\");\n\tТипыШК.Добавить(\"QRCodeInverse\");\n\tТипыШК.Добавить(\"MicroQR\");\n\tТипыШК.Добавить(\"Aztec\");\n\t\n\tВозврат(ТипыШК);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ВставитьТекст(Текст)\n\t\n\tЭлементы.Штрихкод.ВыделенныйТекст = Текст;\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\ФормаНастройкиИнтеграции\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\ФормаНастройкиИнтеграции\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/91dd7a37fa6aa991601e96aaacd31ac50164db2e/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8%5CForm.obj.bsl",
+ "size": 12959,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tКонтекстЭмулятора = Параметры.КонтекстЭмулятора;\n\tЗаполнитьСписокВерсийПодключаемогоМодуля();\n\tПрочитатьПараметры();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tОбновитьОтображениеРежима();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\nПроцедура РежимИнтеграцииПриИзменении(Элемент)\n\t\n\tОбновитьОтображениеРежима();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПодключаемыйМодульПриИзменении(Элемент)\n\t\n\tЗагрузитьТекстМодуляНаСервере();\n\t\n\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура URLПубликацииПриИзменении(Элемент)\n\t\n\tОбновитьСтатус_WebСервер();\n\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ОК(Команда)\n\t\n\tСохранитьПараметры();\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Отмена(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВвестиТекстПодключаемогоМодуля(Команда)\n\t\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаРучнойНастройки\", ЭтотОбъект);\n\tПоказатьВводСтроки(Оповещение, ТекстПодключаемогоМодуля, \"Вставьте сюда текст модуля веб-сервиса TSD из вашей конфигурации\", , Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаРучнойНастройки(Текст, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли Текст = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tТекстПодключаемогоМодуля = Текст;\n\t\n\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗагрузитьТекстМодуляНаСервере()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" Тогда\n\t\t\n\t\tТекстПодключаемогоМодуля = \"\";\n\t\t\n\tИначе\n\t\t\n\t\tТекстПодключаемогоМодуля = Обработка.ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияПодключаемогоМодуля);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьОтображениеРежима()\n\t\n\tЕсли РежимИнтеграции = \"СтандартныйМодуль\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаСтандартныйМодуль;\n\t\tОбновитьСтатус_СтандартныйМодуль();\n\t\t\n\tИначеЕсли РежимИнтеграции = \"ПодключаемыйМодуль\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаПодключаемыйМодуль;\n\t\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\t\n\tИначеЕсли РежимИнтеграции = \"WebСервер\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаWebСервер;\n\t\tОбновитьСтатус_WebСервер();\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ЗаполнитьСписокВерсийПодключаемогоМодуля()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПоддерживаемыеВерсии = Обработка.ШаблоныМодулей_ПолучитьСписокВерсий();\n\tДля Каждого ПоддерживаемаяВерсия Из ПоддерживаемыеВерсии Цикл\n\t\tЭлементы.ПодключаемыйМодуль.СписокВыбора.Вставить(0, ПоддерживаемаяВерсия);\n\tКонецЦикла;\n\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПрочитатьПараметры()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tРежимИнтеграции = НастройкиИнтеграции.Режим;\n\tВерсияПодключаемогоМодуля \t= НастройкиИнтеграции.ПодключаемыйМодуль_Версия;\n\tТекстПодключаемогоМодуля \t= НастройкиИнтеграции.ПодключаемыйМодуль_Текст;\n\t\n\tURLПубликации\t= НастройкиИнтеграции.ВебСервер_УРЛ;\n\tЛогин\t\t\t= НастройкиИнтеграции.ВебСервер_Логин;\n\tПароль\t\t\t= НастройкиИнтеграции.ВебСервер_Пароль;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура СохранитьПараметры()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tНастройкиИнтеграции.Режим = РежимИнтеграции;\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия \t= ВерсияПодключаемогоМодуля;\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст \t= ТекстПодключаемогоМодуля;\n\t\n\tЕсли РежимИнтеграции = \"ПодключаемыйМодуль\" Тогда\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = Обработка.ШаблоныМодулей_ОписаниеМетодовМодуля(ТекстПодключаемогоМодуля);\n\tИначе\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = \"\";\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.ВебСервер_УРЛ \t\t= URLПубликации;\n\tНастройкиИнтеграции.ВебСервер_Логин \t= Логин;\n\tНастройкиИнтеграции.ВебСервер_Пароль \t= Пароль;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_СтандартныйМодуль()\n\t\n\tЕсли Не СтандартныйМодульДоступен() Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусСтандартныйМодуль, \"Стандартный модуль интеграции не найден\");\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусСтандартныйМодуль, \"Стандартный модуль интеграции доступен для использования\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_ПодключаемыйМодуль()\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" Тогда\n\t\tЭлементы.ВвестиТекстПодключаемогоМодуля.Видимость = Истина;\n\tИначе\n\t\tЭлементы.ВвестиТекстПодключаемогоМодуля.Видимость = Ложь;\n\tКонецЕсли;\n\t\t\n\tЕсли Не ЗначениеЗаполнено(ВерсияПодключаемогоМодуля) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Не выбрана версия подключаемого модуля\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" И ПустаяСтрока(ТекстПодключаемогоМодуля) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Не введен текст ручной настройки подключаемого модуля\");\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Подключаемый модуль интеграции доступен для использования\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_WebСервер()\n\t\n\tЕсли ПустаяСтрока(URLПубликации) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусWebСервер, \"Не введен URL публикации\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ПустаяСтрока(Логин) И Не ПустаяСтрока(Пароль) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусWebСервер, \"Не указан логин для доступа к публикации\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусWebСервер, \"Интеграция через web-сервер доступна для использования\");\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция СтандартныйМодульДоступен()\n\t\n\tСтандартныйМодуль = Метаданные.ОбщиеМодули.Найти(\"усТСДВебСервис\");\n\tЕсли СтандартныйМодуль = Неопределено Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\t\n\tВозврат Истина;\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура УстановитьСтатусОК(ГруппаСтатуса, Комментарий)\n\t\n\tУстановитьСтатус(ГруппаСтатуса, \"☑\", WebЦвета.ЗеленыйЛес, Комментарий);\n\t\n\tЭлементы.ФормаОК.Доступность = Истина;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура УстановитьСтатусОшибка(ГруппаСтатуса, Комментарий)\n\t\n\tУстановитьСтатус(ГруппаСтатуса, \"⚠\", WebЦвета.Красный, Комментарий);\n\t\n\tЭлементы.ФормаОК.Доступность = Ложь;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура УстановитьСтатус(ГруппаСтатуса, СимволИндикатора, ЦветИндикатора, Комментарий)\n\t\n\tЭлементИндикатор = ГруппаСтатуса.ПодчиненныеЭлементы.Получить(0);\n\tЭлементКомментарий = ГруппаСтатуса.ПодчиненныеЭлементы.Получить(1);\n\t\n\tЭлементИндикатор.Заголовок = СимволИндикатора;\n\tЭлементИндикатор.ЦветТекста = ЦветИндикатора;\n\t\n\tЭлементКомментарий.Заголовок = Комментарий;\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\ФормаОперации\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\ФормаОперации\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/309ff624d6e6d6f8277c30ffadf365f1384fcfcc/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8%5CForm.obj.bsl",
+ "size": 105239,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tОтложенныеДействияФормы = Новый Структура();\n\tОтложенныеДействияФормы.Вставить(\"ОткрытьДинамическуюФорму\",\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ДинамическаяФорма\", \t\t\"\");\n\tОтложенныеДействияФормы.Вставить(\"ДинамическаяОперация\",\t\"\");\n\t\n\tОтложенныеДействияФормы.Вставить(\"ОчиститьОперацию\",\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ОперацияДляОчистки\",\t\"\");\n\t\n\tОтложенныеДействияФормы.Вставить(\"ОткрытьСледующуюОперацию\", Ложь);\n\tОтложенныеДействияФормы.Вставить(\"СледующаяОперация\",\t\"\");\n\tОтложенныеДействияФормы.Вставить(\"СледующаяСтраница\", \t0);\n\t\n\tОтложенныеДействияФормы.Вставить(\"ЗакрытьФормы\", \t\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ОчиститьВсеФормы\",\tЛожь);\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tЭлементы.ДекорацияЗаглушка.Видимость = Ложь;\n\t\n\tНомерУстройства = Параметры.НомерУстройства;\n\tЗаголовок = Параметры.ИмяСтраницы;\n\tОперацияТекущейФормы = Параметры.Операция;\n\tСтраницаТекущейФормы = Параметры.Страница;\n\tКонтекстЭмулятора = Параметры.КонтекстЭмулятора;\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЛокальнаяФабрикаXDTO = Обработка.ЛокальнаяФабрикаXDTO(НастройкиИнтеграции);\n\tЭлементы.ИнфоКеш.Заголовок = Элементы.ИнфоКеш.Заголовок + ТекущаяДатаСеанса();\n\tЭлементы.ИнфоКеш.Видимость = Ложь;\n\t\n\tЕсли Параметры.Свойство(\"СтрокаXML\") Тогда \n\t\t\n\t\tЧтениеXML = Новый ЧтениеXML;\n\t\tЧтениеXML.УстановитьСтроку(Параметры.СтрокаXML);\n\t\tТипФорма = ЛокальнаяФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsForm\");\n\t\tФормаТСД = ЛокальнаяФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипФорма);\n\t\t\n\t\tИсходныйКодФормы = Параметры.СтрокаXML;\n\t\t\n\tИначе\n\t\t\n\t\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, ОперацияТекущейФормы, СтраницаТекущейФормы);\n\t\tФормаТСД = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"LoadFormByName\", ПараметрыМетода);\n\t\t\n\t\tЗаписьXML = Новый ЗаписьXML;\n\t\tЗаписьXML.УстановитьСтроку();\n\t\tЛокальнаяФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ФормаТСД);\n\t\tИсходныйКодФормы = ЗаписьXML.Закрыть();\n\t\t\n\tКонецЕсли;\n\t\n\tЭлементы.ГруппаФормаТСД.ЦветФона = ЦветИзHEXСтроки(ФормаТСД.BackColor);\n\t\n\tЕсли ФормаТСД.ScannerOn Тогда \n\t\tЭлементы.ФормаВвестиШтрихкод.Доступность = Истина;\n\tИначе\n\t\tЭлементы.ФормаВвестиШтрихкод.Доступность = Ложь;\n\tКонецЕсли;\t\n\t\n\tМассивРеквизитов = Новый Массив;\n\tПодготовитьРеквизиты(ФормаТСД.Последовательность(), МассивРеквизитов);\n\t\n\tЕсли МассивРеквизитов.Количество() Тогда \n\t\tИзменитьРеквизиты(МассивРеквизитов);\n\tКонецЕсли;\t\n\t\n\tОшибкиОтрисовкиФормы = \"\";\n\t\n\tДобавитьЭлементы(ФормаТСД.Последовательность(), Элементы.ГруппаФормаТСД);\n\t\n\tЕсли ЗначениеЗаполнено(ОшибкиОтрисовкиФормы) Тогда\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Видимость = Истина;\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Заголовок = \"Ошибка отрисовки формы. \" + ОшибкиОтрисовкиФормы;\n\tИначе\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Видимость = Ложь;\n\tКонецЕсли;\t\n\t\n\tЗаполнитьРеквизитыФормыПараметрами();\n\t\n\tПрочитатьПараметрыОтладки(ЭтотОбъект);\n\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\tПодключитьОбработчикОжидания(\"Подключаемый_ОбновитьРежимОтладки\", 1);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриПовторномОткрытии()\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)\n\t\n\tЕсли СтрНачинаетсяС(Заголовок, \"Устарела\") Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tЕсли ИмяСобытия = \"ЭмуляторТСД_ИзменениеРежимаОтладки\" Тогда\n\t\t\n\t\tЕсли ЖурналОтладкиВключен <> Параметр Тогда\n\t\t\t\n\t\t\tЖурналОтладкиВключен = Параметр;\n\t\t\tПриИзмененииРежимаОтладки();\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли;\t\n\t\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\nПроцедура ОбработкаВыбора(Элемент)\n\t\n\tРеквизит = Сред(Элемент.Имя, 8);\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tНомерСтроки = Элемент.ТекущиеДанные.Колонка1;\n\tОбработкаВыбораСервер(Реквизит, НомерСтроки);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ОбработкаВыбораСервер(Реквизит, НомерСтроки)\n\t\n\tПараметрыТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tПараметрыТСД.Вставить(Реквизит, НомерСтроки);\n\t\n\tОбработатьСобытие(\"Выбор\", \"Таблица\" + Реквизит, ПараметрыТСД);\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриИзмененииЭлемента(Элемент)\n\t\n\tРеквизит = Сред(Элемент.Имя, 9);\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриИзмененииЭлементаСервер(Реквизит);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПриИзмененииЭлементаСервер(Реквизит)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tЕсли ТипЗнч(ЭтотОбъект[\"Реквизит\" + Реквизит]) = Тип(\"Дата\") Тогда \n\t\tСтруктураПараметровТСД.Вставить(Реквизит, Формат(ЭтотОбъект[\"Реквизит\" + Реквизит], \"ДФ=dd.MM.yyyy\"));\n\tИначеЕсли ТипЗнч(ЭтотОбъект[\"Реквизит\" + Реквизит]) = Тип(\"Число\") Тогда \n\t\tСтруктураПараметровТСД.Вставить(Реквизит, Формат(ЭтотОбъект[\"Реквизит\" + Реквизит], \"ЧРД=.; ЧГ=\"));\n\tИначе\t\n\t\tСтруктураПараметровТСД.Вставить(Реквизит, ЭтотОбъект[\"Реквизит\" + Реквизит]);\n\tКонецЕсли;\n\t\n\tОбработатьСобытие(\"ПриИзменении\", \"Реквизит\" + Реквизит, СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовТаблицыФормыЖурналОтладки\n\n&НаКлиенте\nПроцедура ЖурналОтладкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tСтрокаЖурнала = ЖурналОтладки.НайтиПоИдентификатору(ВыбраннаяСтрока);\n\tЕсли СтрокаЖурнала.Наименование = \"GetData\" Тогда\n\t\t\n\t\tФормаПросмотрИзмененныхПараметров = ПолноеИмяФормы(\"ФормаПросмотрИзмененныхПараметров\");\n\t\tПараметрыФормы = Новый Структура(\"ИзмененныеПараметры\", СтрокаЖурнала.ИзмененныеПараметры);\n\t\tОткрытьФорму(ФормаПросмотрИзмененныхПараметров, ПараметрыФормы, ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ВвестиШтрихкод(Команда)\n\t\n\tФормаВводаШтрихкода = ПолноеИмяФормы(\"ФормаВводаШтрихкода\");\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаШтрихкода\", ЭтотОбъект);\n\tОткрытьФорму(ФормаВводаШтрихкода, , ЭтотОбъект, , , , Оповещение);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВыбратьТекущееЗначение(Команда)\n\t\n\tПриИзмененииЭлемента(ТекущийЭлемент);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьПараметры(Команда)\n\t\n\tФормаПросмотрПараметров = ПолноеИмяФормы(\"ФормаПросмотрПараметров\");\n\tПараметрыФормы = Новый Структура(\"НомерУстройства, АдресХранилищаПараметров\", НомерУстройства, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tОткрытьФорму(ФормаПросмотрПараметров, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьДанные(Команда)\n\t\n\tФормаПросмотрДанных = ПолноеИмяФормы(\"ФормаПросмотрДанных\");\n\tПараметрыФормы = Новый Структура(\"НомерУстройства\", НомерУстройства);\n\tОткрытьФорму(ФормаПросмотрДанных, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьТекущееДействие(Команда)\n\t\n\tКлючЗаписи = СоздатьКлючЗаписиТекущееДействиеПользователяТСД(НомерУстройства);\n\tПараметрыФормы = Новый Структура(\"Ключ\", КлючЗаписи);\n\tОткрытьФорму(\"РегистрСведений.усТекущееДействиеПользователяТСД.ФормаЗаписи\", ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция СоздатьКлючЗаписиТекущееДействиеПользователяТСД(НомерУстройства)\n\t\n\tКлючЗаписи = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьКлючЗаписи(Новый Структура(\"НомерУстройства\", НомерУстройства));\n\tВозврат КлючЗаписи;\n\t\nКонецФункции\t\n\n&НаКлиенте\nПроцедура СброситьКэш(Команда)\n\n\tСтартоваяФорма = Неопределено;\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tСтартоваяФорма = ВложеннаяФорма;\n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\t\n\tКонецЦикла;\n\t\n\tОписаниеОсновнойФормы = СтартоваяФорма.ЗагрузитьОписанияФормНаСервере(Ложь);\n\tСтартоваяФорма.ОткрытьФормыТСД(ОписаниеОсновнойФормы);\n\nКонецПроцедуры\t\n\n&НаКлиенте\nПроцедура ПосмотретьКодСтраницы(Команда)\n\t\n\tФормаПросмотрКода = ПолноеИмяФормы(\"ФормаПросмотрКода\");\n\tПараметрыФормы = Новый Структура(\"Текст\", ИсходныйКодФормы);\n\tОткрытьФорму(ФормаПросмотрКода, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПереключитьОтображениеОтладки(Команда)\n\t\n\tЖурналОтладкиОтображается = Не ЖурналОтладкиОтображается;\n\tЕсли Не ЖурналОтладкиОтображается Тогда \n\t\t\n\t\tЖурналОтладкиВключен = Ложь;\n\t\tЖурналОтладки.Очистить();\n\t\tПриИзмененииРежимаОтладки();\n\t\t\n\tИначе\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПереключитьРежимОтладки(Команда)\n\t\n\tЖурналОтладкиВключен = Не ЖурналОтладкиВключен;\n\tОповестить(\"ЭмуляторТСД_ИзменениеРежимаОтладки\", ЖурналОтладкиВключен, \"ЭмуляторТСД\");\n\t\n\tПриИзмененииРежимаОтладки();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОчиститьЖурналОтладки(Команда)\n\t\n\tЖурналОтладки.Очистить();\n\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаШтрихкода(РезультатЗакрытия, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли РезультатЗакрытия = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\tШтрихкодПриИзмененииНаСервере(РезультатЗакрытия.ТипШК, РезультатЗакрытия.Штрихкод);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ШтрихкодПриИзмененииНаСервере(Знач ТипШК, Знач Штрихкод)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tСтруктураПараметровТСД.Вставить(\"barcodetype\", ТипШК);\n\tСтруктураПараметровТСД.Вставить(\"barcode\", Штрихкод);\n\t\n\tОбработатьСобытие(\"ПриИзменении\", \"Штрихкод\", СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииПунктаМеню(Команда)\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииКнопки(Команда)\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииГиперссылки(Команда, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПриНажатииСервер(Команда)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tОбработатьСобытие(\"Нажатие\", Команда, СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область ОтрисовкаФормы\n\n&НаКлиенте\nПроцедура ВключитьВидимостьИнфоКеш() Экспорт\n\t\n\tЭлементы.ИнфоКеш.Видимость = Истина;\n\nКонецПроцедуры\t\n\n&НаСервере\nПроцедура ДобавитьЭлементы(ПоследовательностьЭлементов, Родитель)\n\t\n\tСобытия = Неопределено;\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Label\" Тогда \n\t\t\tДобавитьLabel(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TextBox\" Тогда \n\t\t\tДобавитьTextbox(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"DateTime\" Тогда \n\t\t\tДобавитьDateTime(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Button\" Тогда \n\t\t\tДобавитьButton(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Line\" Тогда \n\t\t\tГруппа = ДобавитьLine(текЭлемент, Родитель);\n\t\t\tДобавитьЭлементы(текЭлемент.Последовательность(), Группа);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TableItems\" Тогда \n\t\t\tДобавитьTable(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Menu\" Тогда \n\t\t\tДобавитьMenuItem(текЭлемент, Элементы.ГруппаКоманднаяПанельТСД);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Events\" Тогда \n\t\t\tСобытия = Сч;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"PictureCollection\" Тогда \n\t\t\tПродолжить; // Не поддерживается в текущей версии\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип элемента: %1\", ТипЭлемента);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\n\tЕсли События <> Неопределено Тогда\n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(События);\n\t\tДобавитьEvents(текЭлемент, ФабрикаXDTO);\n\t\t\n\tКонецЕсли;\t\n\t\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nФункция МасштабПоВысоте()\n\t\n\tВозврат(16);\n\t\nКонецФункции\n\n&НаКлиентеНаСервереБезКонтекста\nФункция МасштабПоШирине()\n\t\n\tВозврат(8);\n\t\nКонецФункции\n\n&НаСервере\nПроцедура УстановитьШрифтЭлемента(ЭлементФормы, ЭлементXDTO)\n\t\n\tЕсли Не ЗначениеЗаполнено(ЭлементXDTO.Font_Name) Тогда \n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПолужирный = СтрНайти(ЭлементXDTO.Font_Style, \"Bold\");\n\tНаклонный = СтрНайти(ЭлементXDTO.Font_Style, \"Italic\");\n\tПодчеркнутый = СтрНайти(ЭлементXDTO.Font_Style, \"Underline\");\n\tЗачеркнутый = СтрНайти(ЭлементXDTO.Font_Style, \"Line-through\");\n\t\n\t// Здесь мы должны брать оформление не из стиля, а из полученного пакета,\n\t// т.к. рендеринг форм должен совпадать с ТСД.\n\t// BSLLS:StyleElementConstructors-off\n\tЭлементФормы.Шрифт = Новый Шрифт(ЭлементXDTO.Font_Name, ЭлементXDTO.Font_Size, Полужирный, Наклонный, Подчеркнутый, Зачеркнутый);\n\t// BSLLS:StyleElementConstructors-on\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура УстановитьЦветаЭлемента(ЭлементФормы, ЭлементXDTO)\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.Font_Color) Тогда \n\t\tЭлементФормы.ЦветТекста = ЦветИзHEXСтроки(ЭлементXDTO.Font_Color);\n\tКонецЕсли;\t\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.BackColor) Тогда \n\t\tЭлементФормы.ЦветФона = ЦветИзHEXСтроки(ЭлементXDTO.BackColor);\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьLabel(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\tЕсли ВысотаЭлемента > 1 Тогда \n\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\t\tНовыйЭлемент.АвтоМаксимальнаяШирина = Ложь;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.TextAlign = \"TopCenter\" Тогда \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр;\n\tИначеЕсли ЭлементXDTO.TextAlign = \"TopRight\" Тогда \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право;\n\tИначе \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево;\n\tКонецЕсли;\t\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли Не ЭлементXDTO.Template Тогда \n\t\tЭтотОбъект[\"Реквизит\" + ЭлементXDTO.Name] = ЭлементXDTO.Value;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьTextbox(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tНовыйЭлемент.МногострочныйРежим = ЭлементXDTO.MultiLine;\n\tНовыйЭлемент.ТолькоПросмотр = ЭлементXDTO.ReadOnly;\n\tНовыйЭлемент.РежимПароля = ЭлементXDTO.Password;\n\t\n\tЕсли ЭлементXDTO.Height = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоВертикали = Истина;\n\tИначе\n\t\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\t\tЕсли ВысотаЭлемента > 1 Тогда \n\t\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Реквизит\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"ПриИзменении\", \"ПриИзмененииЭлемента\");\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьTable(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Таблица\" + ЭлементXDTO.Name, Тип(\"ТаблицаФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Таблица\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\tНовыйЭлемент.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;\n\tНовыйЭлемент.ИзменятьПорядокСтрок = Ложь;\n\tНовыйЭлемент.ИзменятьСоставСтрок = Ложь;\n\t\n\tСч = 1;\n\tДля Каждого Колонка Из ЭлементXDTO.Columns.Column Цикл \n\t\t\n\t\tНоваяКолонка = Элементы.Добавить(\"Колонка\" + Сч, Тип(\"ПолеФормы\"), НовыйЭлемент);\n\t\tНоваяКолонка.ПутьКДанным = \"Таблица\" + ЭлементXDTO.Name + \".Колонка\" + Сч;\n\t\tНоваяКолонка.ТолькоПросмотр = Истина;\n\t\t\n\t\tЕсли Колонка.Width = -1 Тогда \n\t\t\tНоваяКолонка.РастягиватьПоГоризонтали = Истина;\n\t\tИначе\n\t\t\tШиринаЭлемента = Окр(Колонка.Width / МасштабПоШирине());\n\t\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\t\tНоваяКолонка.Ширина = ШиринаЭлемента;\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\t\n\t\tНоваяКолонка.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево;\n\t\tСч = Сч + 1;\n\t\t\n\tКонецЦикла;\t\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Таблица\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"Выбор\", \"ОбработкаВыбора\");\n\t\n\tДля Каждого Строка Из ЭлементXDTO.RowTable Цикл\n\t\t\n\t\tНоваяСтрока = ЭтотОбъект[\"Таблица\" + ЭлементXDTO.Name].Добавить();\n\t\t \n\t\tСч = 1;\n\t\tДля Каждого Значение Из Строка.ItemColumn Цикл \n\t\t\tНоваяСтрока[\"Колонка\" + Сч] = Значение.Value;\n\t\t\tСч = Сч + 1;\n\t\tКонецЦикла;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьDateTime(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.Format) Тогда \n\t\tНовыйЭлемент.Формат = \"ДФ=\" + ЭлементXDTO.Format;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Height = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоВертикали = Истина;\n\tИначе\n\t\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\t\tЕсли ВысотаЭлемента > 1 Тогда \n\t\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Реквизит\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"ПриИзменении\", \"ПриИзмененииЭлемента\");\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьButton(ЭлементXDTO, Родитель)\n\t\n\tНоваяКоманда = Команды.Добавить(\"Кнопка\" + ЭлементXDTO.Name);\n\tНоваяКоманда.Заголовок = ЭлементXDTO.Value;\n\tНоваяКоманда.Действие = \"ПриНажатииКнопки\";\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Кнопка\" + ЭлементXDTO.Name, Тип(\"КнопкаФормы\"), Родитель);\n\tНовыйЭлемент.Заголовок = ЭлементXDTO.Value;\n\tНовыйЭлемент.ИмяКоманды = \"Кнопка\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидКнопкиФормы.ОбычнаяКнопка;\n\t\n\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\tЕсли ВысотаЭлемента > 1 Тогда \n\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Template Тогда \n\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\tНоваяСтрока.ИмяРеквизита = \"Кнопка\" + ЭлементXDTO.Name;\n\t\tНоваяСтрока.Значение = ЭлементXDTO.Value;\n\t\tНоваяСтрока.Кнопка = Истина;\n\tКонецЕсли;\t\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Кнопка\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ДобавитьLine(ЭлементXDTO, Родитель)\n\t\n\tИмяГруппы = \"ГруппаТСД\" + Формат(Элементы.Количество(), \"ЧН=0; ЧГ=\");\n\tНоваяГруппа = Элементы.Добавить(ИмяГруппы, Тип(\"ГруппаФормы\"), Родитель);\n\t\n\tНоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;\n\tНоваяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет;\n\tНоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;\n\tНоваяГруппа.РастягиватьПоВертикали = Ложь;\n\tНоваяГруппа.ОтображатьЗаголовок = Ложь;\n\n\tВозврат НоваяГруппа;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ДобавитьMenuItem(ЭлементXDTO, Родитель)\n\t\n\tПоследовательностьЭлементов = ЭлементXDTO.Последовательность();\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\t\n\t\tЕсли текЭлемент.Последовательность().Количество() = 0 Тогда \n\t\t\t\n\t\t\tНомерКоманды = Формат(Команды.Количество(), \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tНоваяКоманда = Команды.Добавить(\"Команда\" + НомерКоманды);\n\t\t\tНоваяКоманда.Заголовок = текЭлемент.Name;\n\t\t\tНоваяКоманда.Действие = \"ПриНажатииПунктаМеню\";\n\t\t\t\n\t\t\tНоваяКнопка = Элементы.Добавить(\"Команда\" + НомерКоманды, Тип(\"КнопкаФормы\"), Родитель);\n\t\t\tНоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;\n\t\t\tНоваяКнопка.Заголовок = текЭлемент.Name;\n\t\t\tНоваяКнопка.ИмяКоманды = \"Команда\" + НомерКоманды;\n\t\t\tНоваяКнопка.ТолькоВоВсехДействиях = Ложь;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tНовоеПодменю = Элементы.Добавить(\"Подменю\" + Формат(Элементы.Количество(), \"ЧН=0; ЧГ=\"), Тип(\"ГруппаФормы\"), Родитель);\n\t\t\tНовоеПодменю.Вид = ВидГруппыФормы.Подменю;\n\t\t\tНовоеПодменю.Заголовок = текЭлемент.Name;\n\t\t\t\n\t\t\tДобавитьMenuItem(текЭлемент, НовоеПодменю);\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция СтрокаСобытияXML(Событие, Фабрика)\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЗапись = Новый ЗаписьXML;\n\tЗапись.УстановитьСтроку();\n\tЗапись.ЗаписатьНачалоЭлемента(\"Event\");\n\tЗапись.ЗаписатьАтрибут(\"Name\", \"Test\");\n\t\n\tПоследовательностьЭлементов = Событие.Последовательность();\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\tШаг = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tФабрика.ЗаписатьXML(Запись, Шаг, ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя, НастройкиИнтеграции.ПространствоИменXDTO);\n\tКонецЦикла;\t\n\t\n\tЗапись.ЗаписатьКонецЭлемента();\n\tРезультат = Запись.Закрыть();\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервере\nФункция НайтиКомандуПоИмени(Событие)\n\t\n\tИмяЭлемента = \"Кнопка\" + Событие.ItemTarget;\n\t\n\tКоманда = Команды.Найти(ИмяЭлемента);\n\tЕсли Команда <> Неопределено Тогда\n\t\tВозврат(ИмяЭлемента);\n\tИначе\n\t\tВозврат(Неопределено);\n\tКонецЕсли;\n\t\nКонецФункции\n\n&НаСервере\nФункция НайтиКомандуПоЗаголовку(Событие)\n\t\n\tРезультат = Неопределено;\n\t\n\tДля Каждого Команда Из Команды Цикл \n\t\tЕсли Команда.Заголовок = Событие.ItemTarget Тогда \n\t\t\tРезультат = Команда.Имя;\n\t\t\tПрервать;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ЗаполнитьГорячиеКлавиши(Событие, ИсходныйКодСобытия)\n\t\n\tСтруктураПоиска = Новый Структура;\n\tСтруктураПоиска.Вставить(\"ОбработкаСобытия\", \tИсходныйКодСобытия);\n\tСтруктураПоиска.Вставить(\"ИмяСобытия\", \t\t\t\"Нажатие\");\n\tСтрокиСобытийНажатие = ТаблицаСобытий.НайтиСтроки(СтруктураПоиска);\n\t\n\tДля Каждого Реквизит Из СтрокиСобытийНажатие Цикл \n\t\t\n\t\tГорячаяКлавиша = КлавишаПоКоду(Событие.KeyChar);\n\t\tЕсли ГорячаяКлавиша = Неопределено Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\n\t\t\n\t\tСочетаниеКлавиш = Новый СочетаниеКлавиш(ГорячаяКлавиша, Событие.Alt = Истина, Событие.Ctrl = Истина, Событие.Shift = Истина);\n\t\t\n\t\tПопытка\n\t\t\tКоманда = Команды.Найти(Команды[Реквизит.ЭлементСобытия].Имя);\n\t\tИсключение\n\t\tКонецПопытки;\n\t\t\n\t\tЕсли Команда = Неопределено Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tКоманда.СочетаниеКлавиш = СочетаниеКлавиш;\n\t\t\n\tКонецЦикла;\t\n\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnScanBarCode(Событие, СтрокаСобытия)\n\t\n\tИмяСобытия = \"ПриИзменении\";\n\tЭлемент = \"Штрихкод\";\n\t\n\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\tНоваяСтрока.ЭлементСобытия = Элемент;\n\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnKeyPress(Событие, СтрокаСобытия)\n\t\n\tКодКлавишиEnter = 13;\n\tКодКлавишиВверх = 38;\t\n\tКодКлавишиВниз = 40;\t\n\t\n\tЕсли Событие.KeyChar = КодКлавишиВверх ИЛИ Событие.KeyChar = КодКлавишиВниз Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tЕсли Событие.KeyChar = КодКлавишиEnter Тогда\n\t\t\n\t\tРеквизит = Элементы.Найти(\"Реквизит\" + Событие.ItemTarget);\n\t\tТаблица = Элементы.Найти(\"Таблица\" + Событие.ItemTarget);\n\t\t\n\t\tЕсли Реквизит <> Неопределено Тогда \n\t\t\t\n\t\t\tИмяСобытия = \"ПриИзменении\";\n\t\t\tЭлемент = \"Реквизит\" + Событие.ItemTarget;\n\t\t\t\n\t\tИначеЕсли Таблица <> Неопределено Тогда \n\t\t\t\n\t\t\tИмяСобытия = \"Выбор\";\n\t\t\tЭлемент = \"Таблица\" + Событие.ItemTarget;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный реквизит события OnKeyPress: %1\", Событие.ItemTarget);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\t\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\t\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\t\tНоваяСтрока.ЭлементСобытия = Элемент;\n\t\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\t\n\tИначе\n\t\t\n\t\tЗаполнитьГорячиеКлавиши(Событие, СтрокаСобытия);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnClick(Событие, СтрокаСобытия)\n\t\n\tИмяСобытия = \"Нажатие\";\n\tКнопкаНайдена = Ложь;\n\t\n\tЭлемент = НайтиКомандуПоИмени(Событие);\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\tЭлемент = НайтиКомандуПоЗаголовку(Событие);\n\tКонецЕсли;\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tИмяЭлемента = \"Реквизит\" + Событие.ItemTarget;\n\t\tГиперссылка = Элементы.Найти(ИмяЭлемента);\n\t\tЕсли Гиперссылка <> Неопределено Тогда \n\t\t\t\n\t\t\tЭлемент = ИмяЭлемента;\n\t\t\t\n\t\t\tЕсли Гиперссылка.Вид = ВидПоляФормы.ПолеНадписи Тогда \n\t\t\t\tИмяСобытия = \"Нажатие\";\n\t\t\t\tГиперссылка.Гиперссылка = Истина;\n\t\t\t\tГиперссылка.УстановитьДействие(\"Нажатие\", \"ПриНажатииГиперссылки\");\n\t\t\tИначе\n\t ИмяСобытия = \"ПриИзменении\";\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли; \t\t\t\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tИмяТаблицы = \"Таблица\" + Событие.ItemTarget;\n\t\tЕсли Элементы.Найти(ИмяТаблицы) <> Неопределено Тогда \n\t\t\tИмяСобытия = \"Выбор\";\n\t\t\tЭлемент = ИмяТаблицы;\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Не удалось обработать событие OnClick - %1\", Событие.ItemTarget);\n\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\n\tКонецЕсли;\n\t\n\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\tНоваяСтрока.ЭлементСобытия = Элемент;\n\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьEvents(ЭлементXDTO, Фабрика)\n\t\n\tДля Каждого Событие Из ЭлементXDTO.Event Цикл\n\t\t\n\t\tСтрокаСобытия = СтрокаСобытияXML(Событие, Фабрика);\n\t\t\n\t\tЕсли Событие.Name = \"OnScanBarCode\" Тогда \n\t\t\tДобавитьСобытиеOnScanBarCode(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначеЕсли Событие.Name = \"OnKeyPress\" Тогда \n\t\t\tДобавитьСобытиеOnKeyPress(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначеЕсли Событие.Name = \"OnClick\" Тогда \n\t\t\tДобавитьСобытиеOnClick(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип события: %1\", Событие.Name);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработкаОтвета\n\n&НаКлиенте\nПроцедура ОбработатьОтвет()\n\t\n\tСобытиеОбрабатывается = Ложь;\n\t\n\tЕсли ПолученСигналОшибки Тогда \n\t\tПолученСигналОшибки = Ложь;\n\t\t#Если Не ВебКлиент Тогда\t\t\n\t\t\tСигнал();\n\t\t#КонецЕсли\n\tКонецЕсли;\t\n\t\n\tЕсли ОтложенныеДействияФормы.ЗакрытьФормы Тогда \n\t\tВладелецФормы.Закрыть();\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ОтложенныеДействияФормы.ОчиститьОперацию Тогда \n\t\tОбработатьОчисткуОперации();\n\tКонецЕсли;\n\t\t\n\tЕсли ОтложенныеДействияФормы.ОчиститьВсеФормы Тогда \n\t\tОбработатьОчисткуВсехФорм();\n\tКонецЕсли;\n\n\tЕсли ОтложенныеДействияФормы_ФормыКОткрытию.Количество() > 0 Тогда \n\t\tОткрытьПолученныеФормы();\n\tКонецЕсли;\n\t\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьСледующуюОперацию Тогда\n\t\tОткрытьФормуСледующейОперации();\n\tКонецЕсли;\n\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьДинамическуюФорму Тогда \n\t\tОткрытьДинамическуюФорму();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработатьОчисткуОперации()\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, ОтложенныеДействияФормы.ОперацияДляОчистки) Тогда \n\t\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОчиститьОперацию = Ложь;\n\tОтложенныеДействияФормы.ОперацияДляОчистки = \"\";\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработатьОчисткуВсехФорм()\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОчиститьВсеФормы = Ложь;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция НайтиОткрытуюФорму(ИмяФормы)\n\t\n\tНайденнаяФорма = Неопределено;\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\tЕсли ВложеннаяФорма.Заголовок = ИмяФормы Тогда \n\t\t\tНайденнаяФорма = ВложеннаяФорма;\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат(НайденнаяФорма);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ОткрытьПолученныеФормы()\n\t\n\tДля Каждого Полученнаяформа Из ОтложенныеДействияФормы_ФормыКОткрытию Цикл \n\t\t\n\t\tФормаСтраницы = НайтиОткрытуюФорму(Полученнаяформа.Имя);\n\t\t\n\t\tЕсли ФормаСтраницы = Неопределено Тогда \n\t\t\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\t\tПараметрыФормы = ПараметрыОткрытияФормыОперации(Полученнаяформа.Имя, Полученнаяформа.Операция, Полученнаяформа.Страница, Полученнаяформа.Строка);\n\t\t\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы_ФормыКОткрытию.Очистить();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьФормуСледующейОперации()\n\t\n\tИмяСтраницы = ОтложенныеДействияФормы.СледующаяОперация + \"/\" + Формат(ОтложенныеДействияФормы.СледующаяСтраница, \"ЧН=0; ЧГ=\");\n\t\n\tФормаСтраницы = НайтиОткрытуюФорму(ИмяСтраницы);\n\t\n\tЕсли ФормаСтраницы <> Неопределено Тогда\n\t\t\n\t\tФормаСтраницы.Активизировать();\n\t\tФормаСтраницы.ВключитьВидимостьИнфоКеш();\n\t\tФормаСтраницы.ОбновитьСостояние();\n\t\t\n\tИначе\n\t\t\n\t\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\tПараметрыФормы = ПараметрыОткрытияФормыОперации(ИмяСтраницы, ОтложенныеДействияФормы.СледующаяОперация, ОтложенныеДействияФормы.СледующаяСтраница);\n\t\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\t\n\tКонецЕсли;\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Ложь;\n\tОтложенныеДействияФормы.СледующаяОперация = \"\";\n\tОтложенныеДействияФормы.СледующаяСтраница = 0;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьДинамическуюФорму()\n\t\n\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\tПараметрыФормы = ПараметрыОткрытияФормыОперации(Строка(Новый УникальныйИдентификатор), ОтложенныеДействияФормы.ДинамическаяОперация, 0, ОтложенныеДействияФормы.ДинамическаяФорма);\n\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\n\tОтложенныеДействияФормы.ОткрытьДинамическуюФорму = Ложь;\n\tОтложенныеДействияФормы.ДинамическаяФорма\t\t= \"\";\n\tОтложенныеДействияФормы.ДинамическаяОперация\t= \"\";\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработкаСобытий\n\n&НаСервере\nФункция ОбработатьСобытие(Имя, Элемент, СтруктураПараметров, ФормаОбновлена = Ложь)\n\t\n\tЕсли СобытиеОбрабатывается Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\tСобытиеОбрабатывается = Истина;\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tСобытиеОбработано = Ложь;\n\tДля Каждого Событие Из ТаблицаСобытий Цикл \n\t\tЕсли Имя = Событие.ИмяСобытия И Элемент = Событие.ЭлементСобытия Тогда \n\t\t\t\n\t\t\tНаименованиеСобытия = СтрШаблон(\"%1 - %2\", Событие.ИмяСобытия, Событие.ЭлементСобытия);\n\t\t\tДобавитьСобытиеВЖурналОтладки(ЭтотОбъект, \"Событие\", НаименованиеСобытия);\n\t\t\t\n\t\t\tСобытиеОбработано = Истина;\n\t\t\t\n\t\t\tЧтениеХМЛ = Новый ЧтениеXML;\n\t\t\tЧтениеХМЛ.УстановитьСтроку(Событие.ОбработкаСобытия);\n\t\t\tТипСобытие = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsEvent\");\n\t\t\tСобытие = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ, ТипСобытие);\n\n\t\t\tПоследовательностьЭлементов = Событие.Последовательность();\n\t\t\tОбработатьПоследовательностьСобытия(ПоследовательностьЭлементов, СтруктураПараметров, ФормаОбновлена);\n\t\t\t\n\t\t\tПрервать;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\t\n\t\n\tВозврат СобытиеОбработано;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ОбработатьПоследовательностьСобытия(ПоследовательностьЭлементов, СтруктураПараметровТСД, ФормаОбновлена = Ложь)\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tЭлементДействия = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Action\" Тогда \n\t\t\t\n\t\t\tВыполнитьДействие(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Condition\" Тогда \n\t\t\t\n\t\t\tЕсли ПроверитьУсловие(ЭлементДействия, СтруктураПараметровТСД) Тогда \n\t\t\t\tОбработатьПоследовательностьСобытия(ЭлементДействия.Последовательность(), СтруктураПараметровТСД, ФормаОбновлена);\n\t\t\t\tПрервать;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип элемента события: %1\", ТипЭлемента);\n\t\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьСледующуюОперацию Тогда \n\t\tЕсли Заголовок = ОтложенныеДействияФормы.СледующаяОперация + \"/\" + Формат(ОтложенныеДействияФормы.СледующаяСтраница, \"ЧН=0; ЧГ=\") Тогда \n\t\t\t\n\t\t\tЗаполнитьРеквизитыФормыПараметрами();\n\t\t\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Ложь;\n\t\t\tОтложенныеДействияФормы.СледующаяОперация = \"\";\n\t\t\tОтложенныеДействияФормы.СледующаяСтраница = 0;\n\t\t\tФормаОбновлена = Истина;\n\t\t\t\n\t\tКонецЕсли;\t\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ПроверитьУсловие(Условие, СтруктураПараметров)\n\t\n\tРезультат = Ложь;\n\t\n\tЛевоеЗначение = ЗаполнитьШаблонПараметрами(Условие.LValue, СтруктураПараметров);\n\tПравоеЗначение = ЗаполнитьШаблонПараметрами(Условие.RValue, СтруктураПараметров);\n\t\n\tТипЗначения = НРег(Условие.TypeValue);\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tЕсли ТипЗначения = \"string\" Тогда\n\t\t\n\t\tЕсли ЛевоеЗначение = \"null\" Тогда \n\t\t\tЛевоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\t\tЕсли ПравоеЗначение = \"null\" Тогда \n\t\t\tПравоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТипЗначения = \"int\" ИЛИ ТипЗначения = \"float\" Тогда\n\t\t\n\t\tЛевоеЗначение = ТипЧисло.ПривестиЗначение(ЛевоеЗначение);\n\t\tПравоеЗначение = ТипЧисло.ПривестиЗначение(ПравоеЗначение);\n\t\t\n\tИначеЕсли ТипЗначения = \"date\" Тогда \n\t\t\n\t\tЛевоеЗначение = ПривестиСтрокуКДате(ЛевоеЗначение);\n\t\tПравоеЗначение = ПривестиСтрокуКДате(ПравоеЗначение);\n\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип значения: %1\", ТипЗначения);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли Условие.Expression = \"==\" Тогда \n\t\tВозврат ЛевоеЗначение = ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"!=\" Тогда \n\t\tВозврат ЛевоеЗначение <> ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \">\" Тогда \n\t\tВозврат ЛевоеЗначение > ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \">=\" Тогда \n\t\tВозврат ЛевоеЗначение >= ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"<\" Тогда \n\t\tВозврат ЛевоеЗначение < ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"<=\" Тогда \n\t\tВозврат ЛевоеЗначение <= ПравоеЗначение;\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип сравнения: %1\", Условие.Expression);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ВыполнитьДействие(ЭлементДействия, СтруктураПараметровТСД)\n\t\n\tТипДействия = НРег(ЭлементДействия.Type);\n\tЕсли ТипДействия = \"setvalue\" Тогда \n\t\tУстановитьЗначение(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"addvalue\" Тогда \n\t\tДобавитьЗначение(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"nextstep\" Тогда \n\t\tСледующаяСтраница(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"deletoperationforms\" Тогда \n\t\tОчиститьОперацию(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"eraseoperationform\" Тогда \n\t\tОтложенныеДействияФормы.ОчиститьВсеФормы = Истина;\n\t\t\n\tИначеЕсли ТипДействия = \"playsound\" Тогда \n\t\tПолученСигналОшибки = Истина;\n\t\t\n\tИначеЕсли ТипДействия = \"getnewdata\" Тогда \n\t\tПолучитьДанные(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"callwebservice\" Тогда \n\t\tПолучитьФормы(СтруктураПараметровТСД); \n\t\t\n\tИначеЕсли ТипДействия = \"getdynamicform\" Тогда \n\t\tПолучитьДинамическуюФорму(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"exit\" Тогда \n\t\tВызватьЗавершение(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"changelanguage\" Тогда \n\t\tИзменитьЯзык(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип действия: %1\", ТипДействия);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура УстановитьЗначение(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tсткПараметров.Вставить(Действие.ItemName, Значение);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьЗначение(Действие, СтруктураПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, СтруктураПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tЕсли Не СтруктураПараметров.Свойство(Действие.ItemName) Тогда \n\t\t\n\t\tСтруктураПараметров.Вставить(Действие.ItemName, Значение);\n\t\tВозврат;\n\t\t\n\tКонецЕсли;\n\t\n\tЛевоеЗначение = СтруктураПараметров[Действие.ItemName];\n\tПравоеЗначение = Значение;\n\t\n\tТипЗначения = НРег(Действие.TypeValue);\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tЕсли ТипЗначения = \"string\" Тогда \n\t\t\n\t\tЕсли ЛевоеЗначение = \"null\" Тогда \n\t\t\tЛевоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\t\tЕсли ПравоеЗначение = \"null\" Тогда \n\t\t\tПравоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТипЗначения = \"int\" ИЛИ ТипЗначения = \"float\" Тогда \n\t\t\n\t\tЛевоеЗначение = ТипЧисло.ПривестиЗначение(ЛевоеЗначение);\n\t\tПравоеЗначение = ТипЧисло.ПривестиЗначение(ПравоеЗначение);\n\t\t\n\tИначеЕсли ТипЗначения = \"date\" Тогда\n\t\t\n\t\tЛевоеЗначение = ПривестиСтрокуКДате(ЛевоеЗначение);\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип значения: %1\", ТипЗначения);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tСтруктураПараметров.Вставить(Действие.ItemName, ЛевоеЗначение + ПравоеЗначение);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура СледующаяСтраница(Действие, сткПараметров)\n\t\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Истина;\n\tЕсли Действие.Template Тогда \n\t\tОтложенныеДействияФормы.СледующаяОперация = ЗаполнитьШаблонПараметрами(Действие.ItemName, сткПараметров);\n\t\tОтложенныеДействияФормы.СледующаяСтраница = ТипЧисло.ПривестиЗначение(ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров));\n\tИначе\n\t\tОтложенныеДействияФормы.СледующаяОперация = Действие.ItemName;\n\t\tОтложенныеДействияФормы.СледующаяСтраница = ТипЧисло.ПривестиЗначение(Действие.Text);\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ОчиститьОперацию(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tОтложенныеДействияФормы.ОчиститьОперацию\t= Истина;\n\tОтложенныеДействияФормы.ОперацияДляОчистки\t= Значение;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьДанные(СтруктураПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\txdtoПараметрыТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsValuesForm\");\n\txdtoПараметрТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsItem\");\n\txdtoПараметры = ФабрикаXDTO.Создать(xdtoПараметрыТип);\n\t\t\n\tДля Каждого текЭлемент Из СтруктураПараметров Цикл\n\t\txdtoПараметр = ФабрикаXDTO.Создать(xdtoПараметрТип);\n\t\n\t\txdtoПараметр.Name = текЭлемент.Ключ;\n\t\txdtoПараметр.Text = текЭлемент.Значение;\n\t\txdtoПараметры.Item.Добавить(xdtoПараметр);\n\tКонецЦикла;\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, xdtoПараметры, Строка(Новый УникальныйИдентификатор));\n\tValuesForm = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetData\", ПараметрыМетода);\n\n\tСтруктураПараметров = Новый Структура;\n\tДля Каждого Значение Из ValuesForm.Item Цикл \n\t\tСтруктураПараметров.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьФормы(СтруктураПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Истина);\n\tФормы = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetForms\", ПараметрыМетода);\n\n\tСтруктураПараметров = Новый Структура;\n\tДля Каждого Значение Из Формы.ValuesForm.Item Цикл \n\t\tСтруктураПараметров.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Истина;\n\tОтложенныеДействияФормы.СледующаяОперация = Формы.StartOperation;\n\tОтложенныеДействияФормы.СледующаяСтраница = Формы.StartStep;\n\t\n\tДля Каждого ПолученнаяОперация Из Формы.Operation Цикл \n\t\tДля Каждого ПолученнаяФорма Из ПолученнаяОперация.Form Цикл \n\t\t\t\n\t\t\tНазваниеФормы = ПолученнаяОперация.Name + \"/\" + Формат(ПолученнаяФорма.Number, \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tЗаписьXML = Новый ЗаписьXML;\n\t\t\tЗаписьXML.УстановитьСтроку();\n\t\t\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ПолученнаяФорма);\n\t\t\tСтрока = ЗаписьXML.Закрыть();\n\t\t\t\n\t\t\tНоваяФорма = ОтложенныеДействияФормы_ФормыКОткрытию.Добавить();\n\t\t\tНоваяФорма.Имя = НазваниеФормы;\n\t\t\tНоваяФорма.Строка = Строка;\n\t\t\tНоваяФорма.Операция = ПолученнаяОперация.Name;\n\t\t\tНоваяФорма.Страница = ПолученнаяФорма.Number;\n\t\t\t\n\t\tКонецЦикла;\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьДинамическуюФорму(сткПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\txdtoПараметрыТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsValuesForm\");\n\txdtoПараметрТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsItem\");\n\txdtoПараметры = ФабрикаXDTO.Создать(xdtoПараметрыТип);\n\t\t\n\tДля Каждого текЭлемент Из сткПараметров Цикл\n\t\txdtoПараметр = ФабрикаXDTO.Создать(xdtoПараметрТип);\n\t\n\t\txdtoПараметр.Name = текЭлемент.Ключ;\n\t\txdtoПараметр.Text = текЭлемент.Значение;\n\t\txdtoПараметры.Item.Добавить(xdtoПараметр);\n\tКонецЦикла;\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, xdtoПараметры);\n\tФорма = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetDynamicForm\", ПараметрыМетода);\n\n\tЗаписьXML = Новый ЗаписьXML;\n\tЗаписьXML.УстановитьСтроку();\n\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Форма);\n\tКодДинамическойФормы = ЗаписьXML.Закрыть();\n\t\n\tОтложенныеДействияФормы.ОткрытьДинамическуюФорму = Истина;\n\tОтложенныеДействияФормы.ДинамическаяФорма = КодДинамическойФормы;\n\tОтложенныеДействияФормы.ДинамическаяОперация = сткПараметров.ДинамическаяФорма;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ВызватьЗавершение(сткПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Ложь);\n\tОбработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"StatusTSD\", ПараметрыМетода);\n\tОтложенныеДействияФормы.ЗакрытьФормы = Истина;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ИзменитьЯзык(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tПараметрыСеанса.Язык = Значение;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область КонвертацияЗначений\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ПривестиСтрокуКДате(ДатаСтрокой)\n\t\n\tПопытка\n\t\tРезультат = Дата(Сред(ДатаСтрокой, 7, 4) + Сред(ДатаСтрокой, 4, 2) + Лев(ДатаСтрокой, 2));\n\tИсключение\n\t\tРезультат = '00010101';\n\tКонецПопытки;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n// BSLLS:MagicNumber-off\n// Без кодов кнопок эту функцию не написать, подавляем\n&НаСервере\nФункция КлавишаПоКоду(КодКнопки)\t\n\t\n\tКлавишиПоКоду = Новый Соответствие;\n\tКлавишиПоКоду.Вставить(8 , Клавиша.BackSpace);\n\tКлавишиПоКоду.Вставить(19 , Клавиша.Break);\n\t\n\tКлавишиПоКоду.Вставить(48 , Клавиша._0);\n\tКлавишиПоКоду.Вставить(49 , Клавиша._1);\n\tКлавишиПоКоду.Вставить(50 , Клавиша._2);\n\tКлавишиПоКоду.Вставить(51 , Клавиша._3);\n\tКлавишиПоКоду.Вставить(52 , Клавиша._4);\n\tКлавишиПоКоду.Вставить(53 , Клавиша._5);\n\tКлавишиПоКоду.Вставить(54 , Клавиша._6);\n\tКлавишиПоКоду.Вставить(55 , Клавиша._7);\n\tКлавишиПоКоду.Вставить(56 , Клавиша._8);\n\tКлавишиПоКоду.Вставить(57 , Клавиша._9);\n\t\n\tКлавишиПоКоду.Вставить(112, Клавиша.F1);\n\tКлавишиПоКоду.Вставить(113, Клавиша.F2);\n\tКлавишиПоКоду.Вставить(114, Клавиша.F3);\n\tКлавишиПоКоду.Вставить(115, Клавиша.F4);\n\tКлавишиПоКоду.Вставить(116, Клавиша.F5);\n\tКлавишиПоКоду.Вставить(117, Клавиша.F6);\n\tКлавишиПоКоду.Вставить(118, Клавиша.F7);\n\tКлавишиПоКоду.Вставить(119, Клавиша.F8);\n\tКлавишиПоКоду.Вставить(120, Клавиша.F9);\n\tКлавишиПоКоду.Вставить(121, Клавиша.F10);\n\tКлавишиПоКоду.Вставить(122, Клавиша.F11);\n\tКлавишиПоКоду.Вставить(123, Клавиша.F12);\n\t\n\tКлавишиПоКоду.Вставить(65 , Клавиша.A);\n\tКлавишиПоКоду.Вставить(66 , Клавиша.B);\n\tКлавишиПоКоду.Вставить(67 , Клавиша.C);\n\tКлавишиПоКоду.Вставить(68 , Клавиша.D);\n\tКлавишиПоКоду.Вставить(69 , Клавиша.E);\n\tКлавишиПоКоду.Вставить(70 , Клавиша.F);\n\tКлавишиПоКоду.Вставить(71 , Клавиша.G);\n\tКлавишиПоКоду.Вставить(72 , Клавиша.H);\n\tКлавишиПоКоду.Вставить(73 , Клавиша.I);\n\tКлавишиПоКоду.Вставить(74 , Клавиша.J);\n\tКлавишиПоКоду.Вставить(75 , Клавиша.K);\n\tКлавишиПоКоду.Вставить(76 , Клавиша.L);\n\tКлавишиПоКоду.Вставить(77 , Клавиша.M);\n\tКлавишиПоКоду.Вставить(78 , Клавиша.N);\n\tКлавишиПоКоду.Вставить(79 , Клавиша.O);\n\tКлавишиПоКоду.Вставить(80 , Клавиша.P);\n\tКлавишиПоКоду.Вставить(81 , Клавиша.Q);\n\tКлавишиПоКоду.Вставить(82 , Клавиша.R);\n\tКлавишиПоКоду.Вставить(83 , Клавиша.S);\n\tКлавишиПоКоду.Вставить(84 , Клавиша.T);\n\tКлавишиПоКоду.Вставить(85 , Клавиша.U);\n\tКлавишиПоКоду.Вставить(86 , Клавиша.V);\n\tКлавишиПоКоду.Вставить(87 , Клавиша.W);\n\tКлавишиПоКоду.Вставить(88 , Клавиша.X);\n\tКлавишиПоКоду.Вставить(89 , Клавиша.Y);\n\tКлавишиПоКоду.Вставить(90 , Клавиша.Z);\n\t\n\tКлавишиПоКоду.Вставить(96 , Клавиша.Num0);\n\tКлавишиПоКоду.Вставить(97 , Клавиша.Num1);\n\tКлавишиПоКоду.Вставить(98 , Клавиша.Num2);\n\tКлавишиПоКоду.Вставить(99 , Клавиша.Num3);\n\tКлавишиПоКоду.Вставить(100, Клавиша.Num4);\n\tКлавишиПоКоду.Вставить(101, Клавиша.Num5);\n\tКлавишиПоКоду.Вставить(102, Клавиша.Num6);\n\tКлавишиПоКоду.Вставить(103, Клавиша.Num7);\n\tКлавишиПоКоду.Вставить(104, Клавиша.Num8);\n\tКлавишиПоКоду.Вставить(105, Клавиша.Num9);\n\tКлавишиПоКоду.Вставить(106, Клавиша.NumMultiply);\n\tКлавишиПоКоду.Вставить(107, Клавиша.NumAdd);\n\tКлавишиПоКоду.Вставить(109, Клавиша.NumSubtract);\n\tКлавишиПоКоду.Вставить(110, Клавиша.NumDecimal);\n\tКлавишиПоКоду.Вставить(111, Клавиша.NumDivide);\n\t\t\n\tВозврат(КлавишиПоКоду[КодКнопки]);\n\t\nКонецФункции\n// BSLLS:MagicNumber-on\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ЦветИзHEXСтроки(ЦветСтрокой)\n\t\n\tАльфаКанал = Лев(ЦветСтрокой, 2);\n\tКрасный = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 3, 2));\n\tЗеленый = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 5, 2));\n\tСиний = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 7, 2));\n\t\n\t// Здесь мы должны брать оформление не из стиля, а из полученного пакета,\n\t// т.к. рендеринг форм должен совпадать с ТСД.\n\t// BSLLS:StyleElementConstructors-off\n\tРезультат = Новый Цвет(Красный, Зеленый, Синий);\n\t// BSLLS:StyleElementConstructors-on\n\t\n\tВозврат Результат;\n\t\nКонецФункции // ПолучитьЦветПоСтроке()\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ЧислоИзСтрокиHEX(СтрокаHEX)\n\t\n\tБазаИсчисления = 16;\n\t\n\tРезультат = 0;\n\tДля Сч = 1 По СтрДлина(СтрокаHEX) Цикл \n\t\tЧисло = ПреобразоватьЦифруHEXвDEC(Сред(СтрокаHEX, Сч, 1));\n\t\tДля Степень = 1 По СтрДлина(СтрокаHEX) - Сч Цикл \n\t\t\tЧисло = Число * БазаИсчисления;\n\t\tКонецЦикла;\n\t\tРезультат = Результат + Число;\n\tКонецЦикла;\n\t\n\tВозврат Результат;\n\t\nКонецФункции // ПолучитьЧислоПоСтрокеHEX()\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ПреобразоватьЦифруHEXвDEC(Цифра)\n\t\n\tЕсли Цифра = \"1\" Тогда \n\t\tВозврат 1;\n\tИначеЕсли Цифра = \"2\" Тогда \n\t\tВозврат 2;\n\tИначеЕсли Цифра = \"3\" Тогда \n\t\tВозврат 3;\n\tИначеЕсли Цифра = \"4\" Тогда \n\t\tВозврат 4;\n\tИначеЕсли Цифра = \"5\" Тогда \n\t\tВозврат 5;\n\tИначеЕсли Цифра = \"6\" Тогда \n\t\tВозврат 6;\n\tИначеЕсли Цифра = \"7\" Тогда \n\t\tВозврат 7;\n\tИначеЕсли Цифра = \"8\" Тогда \n\t\tВозврат 8;\n\tИначеЕсли Цифра = \"9\" Тогда \n\t\tВозврат 9;\n\tИначеЕсли Цифра = \"A\" Тогда \n\t\tВозврат 10;\n\tИначеЕсли Цифра = \"B\" Тогда \n\t\tВозврат 11;\n\tИначеЕсли Цифра = \"C\" Тогда \n\t\tВозврат 12;\n\tИначеЕсли Цифра = \"D\" Тогда \n\t\tВозврат 13;\n\tИначеЕсли Цифра = \"E\" Тогда \n\t\tВозврат 14;\n\tИначеЕсли Цифра = \"F\" Тогда \n\t\tВозврат 15;\n\tИначе\t\n\t\tВозврат 0;\n КонецЕсли;\n\t\t\nКонецФункции // ПреобразоватьЦифруHEXвDEC()\n\n&НаСервере\nФункция ЗаполнитьШаблонПараметрами(Знач Значение, СтруктураПараметров)\n\t\n\tДля Каждого текЭлемент Из СтруктураПараметров Цикл \n\t\tЗначение = СтрЗаменить(Значение, \"[##\" + текЭлемент.Ключ + \"##]\", текЭлемент.Значение);\n\tКонецЦикла;\n\t\n\tВозврат Значение;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область РежимОтладки\n\n&НаКлиенте\nПроцедура ПриИзмененииРежимаОтладки()\n\t\n\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t \t\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура НастроитьФорму_РежимОтладки(ЭтотОбъект)\n\t\n\tЭтотОбъект.Элементы.ЖурналОтладкиПереключитьРежимОтладки.Пометка = ЭтотОбъект.ЖурналОтладкиВключен;\n\t\n\tЭтотОбъект.Элементы.ФормаПереключитьОтображениеОтладки.Пометка = ЭтотОбъект.ЖурналОтладкиОтображается;\n\tЭтотОбъект.Элементы.ГруппаЖурналОтладки.Видимость = ЭтотОбъект.ЖурналОтладкиОтображается;\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиОтображается Тогда\n\t\tЭтотОбъект.Ширина = 100;\n\tИначе\n\t\tЭтотОбъект.Ширина = 50;\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Подключаемый_ОбновитьРежимОтладки() Экспорт\n\t\n\tЕсли Не ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПрочитатьПараметрыОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ПрочитатьПараметрыОтладки(ЭтотОбъект)\n\t\n\tКонтекстЭмулятора = ЭтотОбъект.КонтекстЭмулятора;\n\t\n\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\tЕсли ПараметрыОтладки = Неопределено Тогда\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект); // Запишем параметры по умолчанию\n\t\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t \n\tКонецЕсли;\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиОтображается <> ПараметрыОтладки.ЖурналОтладкиОтображается Тогда\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиОтображается = ПараметрыОтладки.ЖурналОтладкиОтображается;\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли ПараметрыОтладки.ОтладкаВключена <> ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\tЭтотОбъект.ЖурналОтладкиВключен = ПараметрыОтладки.ОтладкаВключена;\n\tКонецЕсли;\n\t\n\tЕсли ПараметрыОтладки.ОтладкаВключена И (ЭтотОбъект.ЖурналОтладкиВерсия <> ПараметрыОтладки.Версия) Тогда\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиВерсия = ПараметрыОтладки.Версия;\n\t\tДесериализоватьЖурналОтладки(ЭтотОбъект, ПараметрыОтладки.Журнал);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ЗаписатьПараметрыОтладки(ЭтотОбъект)\n\t\n\tПараметрыОтладки = Новый Структура;\n\tПараметрыОтладки.Вставить(\"ОтладкаВключена\", ЭтотОбъект.ЖурналОтладкиВключен);\n\tПараметрыОтладки.Вставить(\"ЖурналОтладкиОтображается\", ЭтотОбъект.ЖурналОтладкиОтображается);\n\tПараметрыОтладки.Вставить(\"Журнал\", СериализоватьЖурналОтладки(ЭтотОбъект));\n\tПараметрыОтладки.Вставить(\"Версия\", ЭтотОбъект.ЖурналОтладкиВерсия);\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыОтладки, ЭтотОбъект.КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура ДобавитьСобытиеВЖурналОтладки(ЭтотОбъект, Тип, Наименование, МассивПараметров = Неопределено, ИзмененныеПараметры = Неопределено)\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\t\n\t\tНоваяЗапись = ЭтотОбъект.ЖурналОтладки.Вставить(0);\n\t\tНоваяЗапись.Время = ТекущаяДатаСеанса();\n\t\tНоваяЗапись.Тип = Тип;\n\t\tНоваяЗапись.Наименование = Наименование;\n\t\tНоваяЗапись.ИзмененныеПараметры = ИзмененныеПараметры;\n\t\t\n\t\tКоличествоПараметров = 0;\n\t\tЕсли МассивПараметров <> Неопределено Тогда\n\t\t\tКоличествоПараметров = МассивПараметров.Количество();\n\t\tКонецЕсли;\n\t\tДля Сч = 1 По КоличествоПараметров Цикл\n\t\t\tНоваяЗапись[\"Параметр\" + Сч] = МассивПараметров[Сч - 1];\n\t\tКонецЦикла;\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиВерсия = ЭтотОбъект.ЖурналОтладкиВерсия + 1;\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nФункция СериализоватьЖурналОтладки(ЭтотОбъект)\n\t\n\tСписокРеквизитов = \"Время, Длительность, Тип, Наименование, Параметр1, Параметр2, Параметр3, ИзмененныеПараметры\";\n\tРезультат = Новый Массив;\n\t\n\tДля Каждого СтрокаЖурнала Из ЭтотОбъект.ЖурналОтладки Цикл\n\t\t\n\t\tСтруктураСтроки = Новый Структура(СписокРеквизитов);\n\t\tЗаполнитьЗначенияСвойств(СтруктураСтроки, СтрокаЖурнала);\n\t\tРезультат.Добавить(СтруктураСтроки);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ДесериализоватьЖурналОтладки(ЭтотОбъект, СохраненныйЖурналОтладки)\n\t\n\tЭтотОбъект.ЖурналОтладки.Очистить();\n\t\n\tДля Каждого СтрокаЖурнала Из СохраненныйЖурналОтладки Цикл\n\t\tЗаполнитьЗначенияСвойств(ЭтотОбъект.ЖурналОтладки.Добавить(), СтрокаЖурнала);\n\tКонецЦикла;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n&НаСервере\nПроцедура ПодготовитьРеквизиты(ПоследовательностьЭлементов, МассивРеквизитов)\n\t\n\tТип_DateTime = Новый ОписаниеТипов(\"Дата\", , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));\n\tТип_int = Новый ОписаниеТипов(\"Число\", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный));\n\tТип_float = Новый ОписаниеТипов(\"Число\", Новый КвалификаторыЧисла(15, 6, ДопустимыйЗнак.Неотрицательный));\n\tТип_Date = Новый ОписаниеТипов(\"Дата\", , Новый КвалификаторыДаты(ЧастиДаты.Дата));\n\tТип_string = Новый ОписаниеТипов(\"Строка\");\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Label\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Новый ОписаниеТипов(\"Строка\"));\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tЕсли текЭлемент.Template Тогда \n\t\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\t\tНоваяСтрока.Значение = текЭлемент.Value;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"DateTime\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_DateTime);\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\tНоваяСтрока.Значение = \"[##\" + текЭлемент.Name + \"##]\";\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TextBox\" Тогда \n\t\t\tЕсли текЭлемент.TypeValue = \"int\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_int);\n\t\t\tИначеЕсли текЭлемент.TypeValue = \"float\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_float);\n\t\t\tИначеЕсли текЭлемент.TypeValue = \"Date\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_Date);\n\t\t\tИначе\t\n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_string);\n\t\t\tКонецЕсли;\t\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\tНоваяСтрока.Значение = \"[##\" + текЭлемент.Name + \"##]\";\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TableItems\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Таблица\" + текЭлемент.Name, Новый ОписаниеТипов(\"ТаблицаЗначений\"));\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tСч1 = 1;\n\t\t\tДля Каждого текКолонка Из текЭлемент.Columns.Column Цикл \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Колонка\" + Сч1, Тип_string, \"Таблица\" + текЭлемент.Name, текКолонка.Name);\n\t\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\t\n\t\t\t\tСч1 = Сч1 + 1;\n\t\t\tКонецЦикла;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Line\" Тогда \n\t\t\tПодготовитьРеквизиты(текЭлемент.Последовательность(), МассивРеквизитов);\n\t\t\t\n\t\tИначе\n\t\t\tПродолжить;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ЗаполнитьРеквизитыФормыПараметрами()\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tЕсли СтруктураПараметров = Неопределено Тогда \n\t\tСтруктураПараметров = Новый Структура;\n\tКонецЕсли;\n\t\n\tДля Каждого Реквизит Из ТаблицаЗначенийРеквизитов Цикл\n\t\t\n\t\tЗначение = ЗаполнитьШаблонПараметрами(Реквизит.Значение, СтруктураПараметров);\n\t\t\n\t\tЕсли Реквизит.Кнопка Тогда \n\t\t\t\n\t\t\tЭлементы[Реквизит.ИмяРеквизита].Заголовок = Значение;\n\t\t\tПродолжить;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\t\n\t\tЕсли ТипЗнч(ЭтотОбъект[Реквизит.ИмяРеквизита]) = Тип(\"Дата\") Тогда \n\t\t\t\n\t\t\tПопытка\n\t\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = Дата(Сред(Значение, 7, 4) + Сред(Значение, 4, 2) + Лев(Значение, 2));\n\t\t\tИсключение\t\n\t\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = '00010101';\n\t\t\tКонецПопытки;\n\t\t\t\n\t\tИначеЕсли ТипЗнч(ЭтотОбъект[Реквизит.ИмяРеквизита]) = Тип(\"Число\") Тогда \n\t\t\t\n\t\t\tОписаниеТипа = Новый ОписаниеТипов(\"Число\");\n\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = ОписаниеТипа.ПривестиЗначение(Значение);\n\t\t\t\n\t\tИначе\t\n\t\t\t\n\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = Значение;\n\t\t\t\n\t\t\tЭлементФормы = Элементы[Реквизит.ИмяРеквизита];\n\t\t\tЕсли ЭлементФормы.Вид = ВидПоляФормы.ПолеНадписи Тогда\n\t\t\t\tКоличествоСтрок = СтрРазделить(Значение, Символы.ПС, Истина).Количество();\n\t\t\t\tЭлементФормы.Высота = КоличествоСтрок;\n\t\t\t\tЭлементФормы.РастягиватьПоВертикали = Ложь;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСостояние() Экспорт\n\t\n\tАктивизировать();\n\t\n\tЗаполнитьРеквизитыФормыПараметрами();\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура АктивироватьЭлемент()\n\n\tЕсли ЗначениеЗаполнено(ОсновнойЭлемент) Тогда \n\t\tТекущийЭлемент = Элементы.Найти(ОсновнойЭлемент);\n\tИначе\n\t\tТекущийЭлемент = Элементы.ФормаВвестиШтрихкод;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция ПараметрыОткрытияФормыОперации(ИмяСтраницы, Операция, Страница, СтрокаXML = \"\")\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"НомерУстройства\", НомерУстройства);\n\tРезультат.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\t\t\n\tРезультат.Вставить(\"ИмяСтраницы\", ИмяСтраницы);\n\tРезультат.Вставить(\"Операция\", Операция);\n\tРезультат.Вставить(\"Страница\", Страница);\n\tЕсли Не ПустаяСтрока(СтрокаXML) Тогда\n\t\tРезультат.Вставить(\"СтрокаXML\", СтрокаXML);\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nФункция ПолноеИмяФормы(ИмяФормы)\n\t\n\tЕсли КонтекстЭмулятора.РежимВнешнейОбработки Тогда\n\t\tПрефиксМетаданных = \"ВнешняяОбработка\";\n\tИначе\n\t\tПрефиксМетаданных = \"Обработка\";\n\tКонецЕсли;\n\t\n\tРезультат = СтрШаблон(\"%1.ЭмуляторТСД.Форма.%2\", ПрефиксМетаданных, ИмяФормы);\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\ФормаПросмотрДанных\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\ФормаПросмотрДанных\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/ceb39267c6e5a861590035ceec23ba4fe159661c/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%94%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%5CForm.obj.bsl",
+ "size": 4912,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tНомерУстройства = Параметры.НомерУстройства;\n\t\n\tЗапрос = Новый Запрос;\n\tЗапрос.Текст = \"ВЫБРАТЬ\n\t |\tусТекущееДействиеПользователяТСД.Данные КАК Данные\n\t |ИЗ\n\t |\tРегистрСведений.усТекущееДействиеПользователяТСД КАК усТекущееДействиеПользователяТСД\n\t |ГДЕ\n\t |\tусТекущееДействиеПользователяТСД.НомерУстройства = &НомерУстройства\";\n\tЗапрос.УстановитьПараметр(\"НомерУстройства\", НомерУстройства);\n\tВыборка = Запрос.Выполнить().Выбрать();\n\t\n\tЕсли Выборка.Следующий() Тогда\n\t\t\n\t\tАдресХранилищаДанных = ПоместитьВоВременноеХранилище(Выборка.Данные.Получить(), Объект);\t\n\t\t\n\tКонецЕсли;\t\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаДанных);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ТолькоЗаполненныеПриИзменении(Элемент)\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаДанных);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗаполнитьПараметрыФормы(АдресХранилищаДанных)\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(АдресХранилищаДанных);\n\t\n\tПараметрыФормы.Очистить();\n\t\n\tДля Каждого Параметр Из СтруктураПараметров Цикл \n\t\tЕсли Не ТолькоЗаполненные ИЛИ ЗначениеЗаполнено(Параметр.Значение) Тогда\n\t\t\tНоваяСтрока = ПараметрыФормы.Добавить();\n\t\t\tНоваяСтрока.Ключ = Параметр.Ключ;\n\t\t\tНоваяСтрока.Значение = Параметр.Значение;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tПараметрыФормы.Сортировать(\"Ключ\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ДанныеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tДанныеСтроки = Элементы.ПараметрыФормы.ТекущиеДанные;\n\t\n\tЕсли ДанныеСтроки.Значение = \"ТаблицаЗначений\" Тогда\n\t\t\n\t\tПараметрыФормы = Новый Структура();\n\t\tПараметрыФормы.Вставить(\"НомерУстройства\", \tНомерУстройства);\n\t\tПараметрыФормы.Вставить(\"Ключ\", \t\t\tДанныеСтроки.Ключ);\n\t\t\n\t\tОткрытьФорму(\"РегистрСведений.усТекущееДействиеПользователяТСД.Форма.ФормаВыводаТаблиц\", ПараметрыФормы, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);\t\t\n\t\t\n\tИначе\n\t\t\n\t\tЗначениеДанных = ПрочитатьДанныеНаСервере(НомерУстройства, ДанныеСтроки.Ключ);\t\n\t\tПоказатьЗначение(Неопределено, ЗначениеДанных);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция ПрочитатьДанныеНаСервере(НомерУстройства, Ключ)\n\t\n\tтекЗапись = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьМенеджерЗаписи();\n\tтекЗапись.НомерУстройства = НомерУстройства;\n\tтекЗапись.Прочитать();\n\t\n\tПопытка\n\t\tВозврат текЗапись.Данные.Получить()[Ключ];\t\t\n\tИсключение\n\t\tВозврат Неопределено;\t\t\n\tКонецПопытки;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\ФормаПросмотрИзмененныхПараметров\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\ФормаПросмотрИзмененныхПараметров\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/ff3410141db686025fe21f44f915b7a16125f433/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2%5CForm.obj.bsl",
+ "size": 1833,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tМассивИзмененныхПараметров = ДесериализацияJSON(Параметры.ИзмененныеПараметры);\n\t\n\tДля Каждого Параметр Из МассивИзмененныхПараметров Цикл\n\t\t\n\t\tНоваяСтрока = ИзмененныеПараметры.Добавить();\n\t\tНоваяСтрока.Параметр = Параметр.Параметр;\n\t\tНоваяСтрока.Старое = Параметр.Старое;\n\t\tНоваяСтрока.Новое = Параметр.Новое;\n\t\t\n\tКонецЦикла;\n\t\n\tИзмененныеПараметры.Сортировать(\"Параметр\");\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервереБезКонтекста\nФункция ДесериализацияJSON(Знач СтрокаJSON, Знач СвойстваСДатой = Неопределено, СчитатьВСоответствие = Ложь)\n\t\n\tЧтениеJSON = Новый ЧтениеJSON;\n\tЧтениеJSON.УстановитьСтроку(СтрокаJSON);\n\tСчитанныйОбъект = ПрочитатьJSON(ЧтениеJSON, СчитатьВСоответствие, СвойстваСДатой);\n\t\n\tВозврат (СчитанныйОбъект);\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\ФормаПросмотрКода\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\ФормаПросмотрКода\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/d15bcb6bed28affa5c0186f40289cdf9dc099f31/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%9A%D0%BE%D0%B4%D0%B0%5CForm.obj.bsl",
+ "size": 518,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tТекст = Параметры.Текст;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\ФормаПросмотрПараметров\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\ФормаПросмотрПараметров\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/38b2d50ba02e91e93f0433f45a3d0d28a65c6807/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2%5CForm.obj.bsl",
+ "size": 1985,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tАдресХранилищаПараметров = Параметры.АдресХранилищаПараметров;\n\tЗаполнитьПараметрыФормы(АдресХранилищаПараметров);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ТолькоЗаполненныеПриИзменении(Элемент)\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаПараметров);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗаполнитьПараметрыФормы(АдресХранилищаПараметров)\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(АдресХранилищаПараметров);\n\t\n\tПараметрыФормы.Очистить();\n\t\n\tДля Каждого Параметр Из СтруктураПараметров Цикл \n\t\tЕсли Не ТолькоЗаполненные ИЛИ ЗначениеЗаполнено(Параметр.Значение) Тогда\n\t\t\tНоваяСтрока = ПараметрыФормы.Добавить();\n\t\t\tНоваяСтрока.Ключ = Параметр.Ключ;\n\t\t\tНоваяСтрока.Значение = Параметр.Значение;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tПараметрыФормы.Сортировать(\"Ключ\");\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598746\\Form\\ФормаСообщений\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598746\\Form\\ФормаСообщений\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/c0d319ba09c434734e5afef3679da32f49e0bb85/are_bsl%5Cunpack%5C726598746%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%A1%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9%5CForm.obj.bsl",
+ "size": 1011,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tЭлементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)\n\t\n\tЕсли ИмяСобытия = \"НовоеСообщениеСтатуса\" И Источник = \"ЭмуляторТСД\" Тогда\n\t\t\n\t\tЭлементы.ТекстСообщения.Заголовок = Параметр;\n\t\t\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\ExternalDataProcessor.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\ExternalDataProcessor.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/59e66388830ce92a9b981a85aeb50e956723331c/are_bsl%5Cunpack%5C726598759%5CExternalDataProcessor.obj.bsl",
+ "size": 44587,
+ "truncated": false,
+ "content": "#Область СлужебныйПрограммныйИнтерфейс\n\n#Область НастройкаИнтеграции\n\nФункция НоваяСтруктураНастроекИнтеграции() Экспорт\n\t\n\tНастройкиИнтеграции = Новый Структура();\n\t// Режим интеграции\n\tНастройкиИнтеграции.Вставить(\"Режим\");\n\t// Настройки режима \"Подключаемый модуль\"\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_Версия\");\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_Текст\");\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_ОписаниеМетодов\");\n\t// Настройки режима \"Web-сервер\"\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_УРЛ\");\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_Логин\");\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_Пароль\");\n\t// Дополнительные настройки\n\tНастройкиИнтеграции.Вставить(\"ПространствоИменXDTO\");\n\t\n\tВозврат(НастройкиИнтеграции);\n\t\nКонецФункции\n\nПроцедура АвтоопределениеНастроекИнтеграции(НастройкиИнтеграции) Экспорт\n\t\n\tСтандартныйМодуль = Метаданные.ОбщиеМодули.Найти(\"усТСДВебСервис\");\n\tЕсли СтандартныйМодуль <> Неопределено Тогда\n\t\tНастройкиИнтеграции.Режим = \"СтандартныйМодуль\";\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\";\n\tВерсияШаблона = ПодобратьВерсиюШаблона();\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия = ВерсияШаблона;\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = ШаблоныМодулей_ОписаниеМетодовМодуля(НастройкиИнтеграции.ПодключаемыйМодуль_Текст);\n\t\nКонецПроцедуры\n\nПроцедура ПослеВосстановленияСохраненныхНастроекИнтеграции(НастройкиИнтеграции) Экспорт\n\t\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\t// Нет настроек\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tВосстановитьНастройкиПодключаемогоМодуля(НастройкиИнтеграции);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\t// Нет настроек\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ШаблоныПодключаемыхМодулей\n\nФункция ШаблоныМодулей_ПолучитьСписокВерсий() Экспорт\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\tМассивВерсий = Новый Массив;\n\t\n\tМакеты = Метаданные().Макеты;\n\tДля Каждого Макет Из Макеты Цикл\n\t\tЕсли СтрНачинаетсяС(Макет.Имя, ПрефиксМакета) Тогда\n\t\t\tСтрокаВерсии = Сред(Макет.Имя, 1 + СтрДлина(ПрефиксМакета));\n\t\t\tСтрокаВерсии = СтрЗаменить(СтрокаВерсии, \"_\", \".\");\n\t\t\tМассивВерсий.Добавить(СтрокаВерсии);\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат (МассивВерсий);\n\t\nКонецФункции\n\nФункция ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона) Экспорт\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\t\n\tИмяМакетаШаблона = ПрефиксМакета + СтрЗаменить(ВерсияШаблона, \".\", \"_\");\n\t\n\tМакет = ПолучитьМакет(ИмяМакетаШаблона);\n\tТекстМодуля = Макет.ПолучитьТекст();\n\t\n\tВозврат (ТекстМодуля);\n\t\nКонецФункции\n\nФункция ШаблоныМодулей_ОписаниеМетодовМодуля(ТекстМодуля) Экспорт\n\t\n\tОписаниеПолейСтруктурыМетодов = \"ИмяМетода, КоличествоПараметров, ИмяПараметра1, ИмяПараметра2, ИмяПараметра3, ТелоМетода\";\n\tОписаниеМетодов = Новый Соответствие;\n\t\n\tМаркерНачалоФункции = \"ФУНКЦИЯ\";\n\tМаркерКонецФункции = \"КОНЕЦФУНКЦИИ\";\n\tМаркерВозврат = \"ВОЗВРАТ\";\n\tЗаменаВозврат = \"ВебСервис_Результат = \";\n\tДопСтрокаВозврат = \"Перейти ~ВЫХОД;\";\n\tМеткаВыходаИзФункции = \"~ВЫХОД:\";\n\t\n\tОписаниеМетода = Неопределено;\n\tСтрокиМетода = Неопределено;\n\t\n\tДля Каждого СтрокаКода Из СтрРазделить(ТекстМодуля, Символы.ПС) Цикл\n\t\t\n\t\tБуфер = СтрЗаменить(СтрокаКода, Символы.Таб, \" \");\n\t\tБуфер = СокрЛП(Буфер);\n\t\tБуфер = ВРег(Буфер);\n\t\t\n\t\tЕсли СтрНачинаетсяС(Буфер, МаркерНачалоФункции) Тогда\n\t\t\t\n\t\t\tОписаниеМетода = Новый Структура(ОписаниеПолейСтруктурыМетодов);\n\t\t\t\n\t\t\tБуфер = Сред(Буфер, СтрДлина(МаркерНачалоФункции) + 1);\n\t\t\tБуфер = СокрЛП(Буфер);\n\t\t\t\n\t\t\tЧастиСтроки = СтрРазделить(Буфер, \"()\");\n\t\t\tОписаниеМетода.ИмяМетода = ЧастиСтроки[0];\n\t\t\t\n\t\t\tПараметрыМетода = СтрРазделить(ЧастиСтроки[1], \",\", Ложь);\n\t\t\tОписаниеМетода.КоличествоПараметров = ПараметрыМетода.Количество();\n\t\t\tДля Сч = 1 По ОписаниеМетода.КоличествоПараметров Цикл\n\t\t\t\t\n\t\t\t\tИмяПараметра = СокрЛП(ПараметрыМетода[Сч - 1]);\n\t\t\t\tОписаниеМетода[\"ИмяПараметра\" + Сч] = ИмяПараметра;\n\t\t\t\t\n\t\t\tКонецЦикла;\n\t\t\t\n\t\t\tСтрокиМетода = Новый Массив;\n\t\t\t\n\t\tИначеЕсли СтрНачинаетсяС(Буфер, МаркерКонецФункции) Тогда\n\t\t\t\n\t\t\tСтрокиМетода.Добавить(МеткаВыходаИзФункции);\n\t\t\t\n\t\t\tОписаниеМетода.ТелоМетода = СтрСоединить(СтрокиМетода, Символы.ПС);\n\t\t\tОписаниеМетодов.Вставить(ОписаниеМетода.ИмяМетода, ОписаниеМетода);\n\t\t\t\n\t\t\tСтрокиМетода = Неопределено;\n\t\t\tОписаниеМетода = Неопределено;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tЕсли СтрокиМетода = Неопределено Тогда\n\t\t\t\tПродолжить;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\t\tБуфер = СтрЗаменить(СтрокаКода, Символы.Таб, \" \");\n\t\t\tБуфер = СокрЛП(Буфер);\n\t\t\tБуфер = ВРег(Буфер);\n\t\t\tЕсли СтрНачинаетсяС(Буфер, МаркерВозврат) Тогда\n\t\t\t\t\n\t\t\t\tБуфер = ЗаменаВозврат + Сред(Буфер, СтрДлина(МаркерВозврат) + 1);\n\t\t\t\tСтрокиМетода.Добавить(Буфер);\n\t\t\t\tСтрокиМетода.Добавить(ДопСтрокаВозврат);\n\t\t\t\t\n\t\t\tИначе\n\t\t\t\t\n\t\t\t\tСтрокиМетода.Добавить(СтрокаКода);\n\t\t\t\t\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат (СериализацияJSON(ОписаниеМетодов));\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ВызовВебСервиса\n\nФункция ПараметрыМетода(Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено) Экспорт\n\t\n\tРезультат = Новый Массив;\n\tЕсли Параметр1 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр1);\n\tКонецЕсли;\n\tЕсли Параметр2 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр2);\n\tКонецЕсли;\n\tЕсли Параметр3 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр3);\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ВызватьМетодВебсервиса(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода) Экспорт\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЕсли ИмяМетода = \"GetData\" Тогда\n\t\tПараметрыДоВызова = СохранитьЗначенияПараметров(ПараметрыМетода[1]);\n\tКонецЕсли;\n\t\n\tНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\tРезультат = СтандартныйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tРезультат = ПодключаемыйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\tРезультат = ВебСервер_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\tДлительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;\n\t\n\tЕсли ИмяМетода = \"GetData\" Тогда\n\t\tПараметрыПослеВызова = СохранитьЗначенияПараметров(Результат);\n\t\tИзмененныеПараметры = ВычислитьИзмененныеПараметры(ПараметрыДоВызова, ПараметрыПослеВызова);\n\tИначе\n\t\tИзмененныеПараметры = Неопределено;\n\tКонецЕсли;\n\t\n\tЗаписатьВызовВЖурналОтладки(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода, Длительность, ИзмененныеПараметры);\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ФабрикаXDTO\n\nФункция ЛокальнаяФабрикаXDTO(НастройкиИнтеграции) Экспорт\n\t\n\t// Внимание! Здесь небольшое волшебство.\n\t// Почему то, если брать системную ФабрикаXDTO - платформа начинает ругаться на отсутствие\n\t// некоторых свойств объектов. Ранее для обхода этого глюка я рекомендовал править схему \n\t// пакета XDTO. Но после некоторого количества раскопок, удалось выяснить, что достаточно\n\t// создать собственную фабрику и загрузить в нее схемы из системной - и вуаля! Ругаться \n\t// перестает. Почему, зачем, что там внутри при этом происходит - науке это неизвестно.\n\t//\n\t// Но это работает только для чтения полученных данных. При записи же возникает обратная\n\t// ситуация - системная фабрика успешно все записывает, а вот наша повторно созданная -\n\t// начинает глючить. Поэтому кое-где используется локальная фабрика, созданная этой функцией, \n\t// а кое где - системная Фабрика XDTO.\n\t\n\tНаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML(НастройкиИнтеграции.ПространствоИменXDTO);\n\tФабрика = Новый ФабрикаXDTO(НаборСхемXML);\n\t\n\tВозврат(Фабрика);\n\t\nКонецФункции\n\n#КонецОбласти\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область НастройкаИнтеграции\n\nПроцедура ВосстановитьНастройкиПодключаемогоМодуля(НастройкиИнтеграции)\n\t\n\tВерсияШаблона = НастройкиИнтеграции.ПодключаемыйМодуль_Версия;\n\t\n\tЕсли ВерсияШаблона = \"РучнаяНастройка\" Тогда\n\t\t// Текст модуля уже находится в восстановленных настройках\n\t\t\n\tИначеЕсли ЗначениеЗаполнено(ВерсияШаблона) И ШаблоныМодулей_СуществуетШаблонДляВерсии(ВерсияШаблона) Тогда\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\t\t\n\tИначе\n\t\tВерсияШаблона = ПодобратьВерсиюШаблона();\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия = ВерсияШаблона;\n\t\t\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = ШаблоныМодулей_ОписаниеМетодовМодуля(НастройкиИнтеграции.ПодключаемыйМодуль_Текст);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ЖурналОтладки\n\nПроцедура ЗаписатьВызовВЖурналОтладки(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода, Длительность, ИзмененныеПараметры = Неопределено)\n\t\n\tЕсли ИмяМетода = \"StatusTSD\" Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\tЕсли ПараметрыОтладки = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\tЕсли Не ПараметрыОтладки.ОтладкаВключена Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tСтруктураЗаписи = Новый Структура();\n\tСтруктураЗаписи.Вставить(\"Время\", \t\t\tТекущаяДатаСеанса());\n\tСтруктураЗаписи.Вставить(\"Длительность\", \tДлительность);\n\tСтруктураЗаписи.Вставить(\"Тип\", \t\t\t\"Вызов\");\n\tСтруктураЗаписи.Вставить(\"Наименование\", \tИмяМетода);\n\tДля Сч = 1 По 3 Цикл\n\t\tЕсли ПараметрыМетода.Количество() >= Сч Тогда\n\t\t\tСтруктураЗаписи.Вставить(\"Параметр\" + Сч, Строка(ПараметрыМетода[Сч - 1]));\n\t\tИначе\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\tСтруктураЗаписи.Вставить(\"ИзмененныеПараметры\", СериализацияJSON(ИзмененныеПараметры));\n\t\n\tПараметрыОтладки.Журнал.Вставить(0, СтруктураЗаписи);\n\tПараметрыОтладки.Версия = ПараметрыОтладки.Версия + 1;\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыОтладки, КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\nКонецПроцедуры\n\nФункция СохранитьЗначенияПараметров(Параметры)\n\t\n\tРезультат = Новый Структура;\n\tДля Каждого Значение Из Параметры.Item Цикл \n\t\tРезультат.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\nФункция ВычислитьИзмененныеПараметры(ИсходныеПараметры, НовыеПараметры)\n\t\n\tСоответствиеПараметров = Новый Соответствие;\n\t\n\tДля Каждого ИсходныйПараметр Из ИсходныеПараметры Цикл\n\t\t\n\t\tЗначения = Новый Структура(\"Параметр, Старое, Новое\", ИсходныйПараметр.Ключ, ИсходныйПараметр.Значение);\n\t\tСоответствиеПараметров.Вставить(ИсходныйПараметр.Ключ, Значения);\n\t\t\n\tКонецЦикла;\n\t\n\tДля Каждого НовыйПараметр Из НовыеПараметры Цикл\n\t\tЕсли СоответствиеПараметров[НовыйПараметр.Ключ] = Неопределено Тогда\n\t\t\t\n\t\t\tЗначения = Новый Структура(\"Параметр, Старое, Новое\", НовыйПараметр.Ключ, , НовыйПараметр.Значение);\n\t\t\tСоответствиеПараметров.Вставить(НовыйПараметр.Ключ, Значения);\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tЗначения = СоответствиеПараметров[НовыйПараметр.Ключ];\n\t\t\tЗначения.Новое = НовыйПараметр.Значение;\n\t\t\t\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tРезультат = Новый Массив;\n\tДля Каждого ПараметрИЗначения Из СоответствиеПараметров Цикл\n\t\t\n\t\tЕсли ПараметрИЗначения.Значение.Старое = ПараметрИЗначения.Значение.Новое Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\n\t\t\n\t\tРезультат.Добавить(ПараметрИЗначения.Значение);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ШаблоныПодключаемыхМодулей\n\nФункция ШаблоныМодулей_ПрефиксМакета()\n\t\n\tВозврат (\"ПодключаемыйМодуль_\");\n\t\nКонецФункции\n\nФункция ПодобратьВерсиюШаблона()\n\n\tПоддерживаемыеВерсии = ШаблоныМодулей_ПолучитьСписокВерсий();\n\tВерсияТекущейКонфигурации = Метаданные.Версия;\n\t\n\tТаблицаВерсий = Новый ТаблицаЗначений();\n\tТаблицаВерсий.Колонки.Добавить(\"Версия\");\n\tТаблицаВерсий.Колонки.Добавить(\"ВерсияЧислом\");\n\tТаблицаВерсий.Колонки.Добавить(\"ТекущаяВерсия\");\n\t\n\tДля Каждого ПоддерживаемаяВерсия Из ПоддерживаемыеВерсии Цикл\n\t\t\n\t\tСтрокаВерсии = ТаблицаВерсий.Добавить();\n\t\tСтрокаВерсии.Версия = ПоддерживаемаяВерсия;\n\t\tСтрокаВерсии.ВерсияЧислом = ВерсияЧислом(ПоддерживаемаяВерсия);\n\t\tСтрокаВерсии.ТекущаяВерсия = Ложь;\n\t\t\n\tКонецЦикла;\n\t\n\tСтрокаВерсии = ТаблицаВерсий.Добавить();\n\tСтрокаВерсии.Версия = ВерсияТекущейКонфигурации;\n\tСтрокаВерсии.ВерсияЧислом = ВерсияЧислом(ВерсияТекущейКонфигурации);\n\tСтрокаВерсии.ТекущаяВерсия = Истина;\n\t\n\tТаблицаВерсий.Сортировать(\"ВерсияЧислом\");\n\tСтрокаТекущейВерсии = ТаблицаВерсий.Найти(Истина, \"ТекущаяВерсия\");\n\tИндексТекущейВерсии = ТаблицаВерсий.Индекс(СтрокаТекущейВерсии);\n\t\n\tЕсли ИндексТекущейВерсии <> (ТаблицаВерсий.Количество() - 1) Тогда\n\t\t\n\t\t// Мы не можем предсказать порядок одинаковых версйи при сортировке,\n\t\t// поэтому нужно проверить, нет ли строчкой выше той версии, которая\n\t\t// нам нужна.\n\t\tСледующаяВерсия = ТаблицаВерсий[ИндексТекущейВерсии + 1];\n\t\tЕсли СледующаяВерсия.ВерсияЧислом = СтрокаТекущейВерсии.ВерсияЧислом Тогда\n\t\t\tВозврат СледующаяВерсия.Версия;\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли ИндексТекущейВерсии > 0 Тогда\n\t\t\n\t\t// Здесь предыдущая версия будет либо полным совпадением, либо наилучшим\n\t\t// вариантом. Т.к. обычно новые версии модуля загружаются для той версии,\n\t\t// в которых они был иизменены, нужно брать ближайшую версию сверху.\n\t\tПредыдущаяВерсия = ТаблицаВерсий[ИндексТекущейВерсии - 1];\n\t\tВозврат ПредыдущаяВерсия.Версия;\n\t\t\n\tКонецЕсли;\n\t\n\t// В отсутствие лучших вариантов, попробуем самую первую доступную версию\n\tВозврат ТаблицаВерсий[0].Версия;\n\nКонецФункции\n\nФункция ШаблоныМодулей_СуществуетШаблонДляВерсии(Версия)\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\tИмяМакетаШаблона = ПрефиксМакета + СтрЗаменить(Версия, \".\", \"_\");\n\t\n\tМакеты = Метаданные().Макеты;\n\tЕсли Макеты.Найти(ИмяМакетаШаблона) = Неопределено Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\t\n\tВозврат Истина;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ВызовВебСервиса\n\nФункция СтандартныйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tМодуль = ОбщегоНазначения.ОбщийМодуль(\"усТСДВебСервис\");\n\tРезультат = ВычислитьЧерезМетодОбъекта(Модуль, ИмяМетода, ПараметрыМетода);\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ПодключаемыйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tОписаниеМетодов = ДесериализацияJSON(НастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов, , Истина);\n\tОписаниеМетода = ОписаниеМетодов[Врег(ИмяМетода)];\n\tЕсли ОписаниеМетода = Неопределено Тогда\n\t\tОписаниеОшибки = СтрШаблон(\n\t\t\"Ошибка интеграции с веб-сервисом TSD. Проверьте настройки веб-сервиса.\n\t\t|Подключаемый модуль: Вызов метода %1: Не найдено описание метода в подключаемом модуле\"\n\t\t, ИмяМетода);\n\t\tВызватьИсключение ОписаниеОшибки;\n\tКонецЕсли;\n\t\n\tСтрокиКодаВызова = Новый Массив;\n\tДля Сч = 1 По ОписаниеМетода[\"КоличествоПараметров\"] Цикл\n\t\t\n\t\tИндексПараметра = Сч - 1;\n\t\tИмяПараметра = ОписаниеМетода[\"ИмяПараметра\" + Сч];\n\t\tКодПрисвоенияПараметра = СтрШаблон(\"%1 = ПараметрыМетода[%2];\", ИмяПараметра, ИндексПараметра);\n\t\tСтрокиКодаВызова.Добавить(КодПрисвоенияПараметра);\n\t\t\n\tКонецЦикла;\n\t\n\tСтрокиКодаВызова.Добавить(ОписаниеМетода[\"ТелоМетода\"]);\t\n\tКодВызова = СтрСоединить(СтрокиКодаВызова, Символы.ПС);\n\t\n\tВебСервис_Результат = Неопределено;\n\t\n\t// Здесь конечно есть потенциальная уязвимость, т.к. текст ручной настройки подключаемого\n\t// модуля мжно ввести любой. Но выбора у нас нет - либо так, либо не получиться запустить \n\t// эмулятор в некоторых случаях.\n\t// BSLLS:ExecuteExternalCode-off\n\tВыполнить(КодВызова);\n\t// BSLLS:ExecuteExternalCode-on\n\t\n\tВозврат(ВебСервис_Результат);\n\t\nКонецФункции\n\nФункция ВебСервер_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tУРЛ = ДополнитьУРЛ(НастройкиИнтеграции.ВебСервер_УРЛ);\n\tОпределение = Новый WSОпределения(УРЛ, НастройкиИнтеграции.ВебСервер_Логин, НастройкиИнтеграции.ВебСервер_Пароль, , 5);\n\tПрокси = Новый WSПрокси(Определение, НастройкиИнтеграции.ПространствоИменXDTO, \"TSD\", \"TSDSoap12\", , 5);\n\tПрокси.Пользователь = НастройкиИнтеграции.ВебСервер_Логин;\n\tПрокси.Пароль = НастройкиИнтеграции.ВебСервер_Пароль;\n\t\n\tРезультат = ВычислитьЧерезМетодОбъекта(Прокси, ИмяМетода, ПараметрыМетода);\n\t\n\t// В некоторых релизах WMS были ошибки в XDTO пакете, которые проявляются только в Эмуляторе\n\t// и только в режиме работы через веб-сервис. Это еще какая-то черная магия внутри платформы,\n\t// и я убил огромное количество времени пытаясь её обойти - безуспешно.\n\t// Потому в отдельной функции проверяем, есть ли в пакете известные нам ошибки и исправляем их\n\t// вручную.\n\tРезультат = ИсправитьОшибкиXDTOПакета(Результат, Определение.ФабрикаXDTO, НастройкиИнтеграции.ПространствоИменXDTO, ИмяМетода);\n\t\n\t// Результат десериализуется в неведомую зверушку, которая не совпадает по формату\n\t// с объектами внутреннего типа, генерируемыми при работе с модулем интеграции.\n\t// Для того, чтобы не разводить лапшу с \"Если Режим = ВебСервер Тогда\" здесь\n\t// делаем хитрость - повторно сериализуем и десериализуем уже с указанием внутреннего\n\t// типа. Помогает.\n\t\n\tЗаписьXML = Новый ЗаписьXML;\n\tЗаписьXML.УстановитьСтроку();\n\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Результат);\n\tСтрокаXML = ЗаписьXML.Закрыть();\n\t\n\tЧтениеXML = Новый ЧтениеXML;\n\tЧтениеXML.УстановитьСтроку(СтрокаXML);\n\tИмяТипаXDTO = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, Результат.Тип().Имя);\n\tКонвертированныйРезультат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ИмяТипаXDTO);\n\t\n\tВозврат КонвертированныйРезультат;\n\t\nКонецФункции\n\nФункция ИсправитьОшибкиXDTOПакета(Объект, Фабрика, ПространствоИмен, ИмяМетода)\n\t\n\tИсправитьОшибку501_wmsForm_PictureCollection(Объект, Фабрика, ПространствоИмен, ИмяМетода);\n\t\n\tВозврат Объект;\n\t\nКонецФункции\n\nФункция ИсправитьОшибку501_wmsForm_PictureCollection(Объект, Фабрика, ПространствоИмен, ИмяМетода)\n\t\n\t// Ошибка с незаполнением якобы обязательного поля PictureCollection в объекте wmsForm\n\t// Релиз 5.0.1\n\tЕсли ИмяМетода = \"GetForms\" Тогда\n\t\tФорма = Объект.Operation[0].Form[0];\n\tИначеЕсли ИмяМетода = \"GetDynamicForm\" Тогда\n\t\tФорма = Объект;\n\tИначеЕсли ИмяМетода = \"LoadFormByName\" Тогда\n\t\tФорма = Объект;\n\tИначе\n\t\tВозврат Объект; // Корректировать нечего\n\tКонецЕсли;\n\t\n\tЕсли Форма.Свойства().Получить(\"PictureCollection\") <> Неопределено Тогда // Есть такое свойство\n\t\tЕсли Форма.PictureCollection = Неопределено Тогда // Но оно не заполнено\n\t\t\tТипЗначенияPictureCollection = Фабрика.Тип(ПространствоИмен, \"wmsPictureCollection\");\n\t\t\tФорма.PictureCollection = Фабрика.Создать(ТипЗначенияPictureCollection);\n\t\tКонецЕсли;\t\t\t\n\tКонецЕсли;\n\t\n\tВозврат Объект;\n\t\nКонецФункции\n\nФункция ДополнитьУРЛ(УРЛ)\n\t\n\t// Варианты задания УРЛ\n\t// http://localhost/wms/ws/tsd.1cws?wsdl\n\t// http://localhost/wms/ws/tsd.1cws\n\t// http://localhost/wms/ws/tsd\n\t// http://localhost/wms/ws/\n\t// http://localhost/wms/ws\n\t// http://localhost/wms/\n\t// http://localhost/wms\n\t\n\tЕсли СтрЗаканчиваетсяНа(УРЛ, \"?wsdl\") Тогда\n\t\tРезультат = УРЛ;\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \".1cws\") Тогда\n\t\tРезультат = УРЛ + \"?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"tsd\") Тогда\n\t\tРезультат = УРЛ + \".1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/ws/\") Тогда\n\t\tРезультат = УРЛ + \"tsd.1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/ws\") Тогда\n\t\tРезультат = УРЛ + \"/tsd.1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/\") Тогда\n\t\tРезультат = УРЛ + \"ws/tsd.1cws?wsdl\";\n\t\t\n\tИначе\n\t\tРезультат = УРЛ + \"/ws/tsd.1cws?wsdl\";\n\t\t\n\tКонецЕсли;\n\t\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ВычислитьЧерезМетодОбъекта(Объект, ИмяМетода, ПараметрыМетода)\n\t\n\tПараметрыСтрокой = \"\";\n\tЕсли ПараметрыМетода <> Неопределено И ПараметрыМетода.Количество() > 0 Тогда\n\t\tДля Индекс = 0 По ПараметрыМетода.ВГраница() Цикл \n\t\t\tПараметрыСтрокой = ПараметрыСтрокой + \"ПараметрыМетода[\" + Индекс + \"],\";\n\t\tКонецЦикла;\n\t\tПараметрыСтрокой = Сред(ПараметрыСтрокой, 1, СтрДлина(ПараметрыСтрокой) - 1);\n\tКонецЕсли;\n\t\n\tСтрокаЗапуска = СтрШаблон(\"Объект.%1(%2)\", ИмяМетода, ПараметрыСтрокой);\n\t\n\t// Строка запуска сгенерирована нами самостоятельно и гарантировано безопасна.\n\t// BSLLS:ExecuteExternalCode-off\n\tРезультат = Вычислить(СтрокаЗапуска);\n\t// BSLLS:ExecuteExternalCode-on\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти\n\nФункция ВерсияЧислом(Знач СтрокаВерсии)\n\t\n\tЧислоРазделовВерсии = 4;\t\t// Сколько разрядов мы ожидаем увидеть в строке версии\n\tМаксРазрядовВРазделеВерсии = 2; // Сколько цифр мы ожидаем увидеть в одном разряде\n\t\n\tСтрокаВерсии = ?(ПустаяСтрока(СтрокаВерсии), \"0.0.0.0\", СтрокаВерсии);\n\tВерсияМассивом = СтрРазделить(СтрокаВерсии, \".\");\n\tПока ВерсияМассивом.Количество() < ЧислоРазделовВерсии Цикл\n\t\tВерсияМассивом.Добавить(\"0\");\n\tКонецЦикла;\n\t\n\tРезультат = 0;\n\tОписаниеТиповЧисло = Новый ОписаниеТипов(\"Число\");\n\tДля Разряд = 1 По ЧислоРазделовВерсии Цикл\n\t\t\n\t\tОбратныйИндексРазряда = ЧислоРазделовВерсии - Разряд;\n\t\tРазрядЧислом = ОписаниеТиповЧисло.ПривестиЗначение(ВерсияМассивом[Разряд - 1]);\n\t\tВесРазряда = Pow(10, ОбратныйИндексРазряда * МаксРазрядовВРазделеВерсии);\n\t\tРезультат = Результат + (РазрядЧислом * ВесРазряда);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n// Копия функции БСП, скопирована для снижения связности\n// Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину.\n// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,\n// рекомендуется использовать функцию платформы СтрРазделить.\n//\n// Параметры:\n// Значение - Строка - текст с разделителями;\n// Разделитель - Строка - разделитель строк текста, минимум 1 символ;\n// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.\n// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:\n// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки\n// включаются в результат;\n// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в\n// случае разделителя-пробела результатом функции будет массив, содержащий одно значение \"\" (пустая строка), а\n// при других разделителях результатом функции будет пустой массив.\n// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок.\n//\n// Возвращаемое значение:\n// Массив - массив строк.\n//\n// Пример:\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\",один,,два,\", \",\")\n// - возвратит массив из 5 элементов, три из которых - пустые: \"\", \"один\", \"\", \"два\", \"\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\",один,,два,\", \",\", Истина)\n// - возвратит массив из двух элементов: \"один\", \"два\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\" один два \", \" \")\n// - возвратит массив из двух элементов: \"один\", \"два\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\")\n// - возвратит пустой массив;\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\",,Ложь)\n// - возвратит массив с одним элементом: \"\"(пустая строка);\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\", \" \")\n// - возвратит массив с одним элементом: \"\" (пустая строка).\n//\nФункция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = \",\", Знач ПропускатьПустыеСтроки = Неопределено,\n\t\tСокращатьНепечатаемыеСимволы = Ложь) Экспорт\n\t\n\tЕсли Разделитель = \",\"\n\t\tИ ПропускатьПустыеСтроки = Неопределено\n\t\tИ СокращатьНепечатаемыеСимволы Тогда\n\t\t\n\t\tРезультат = СтрРазделить(Значение, \",\", Ложь);\n\t\tДля Индекс = 0 По Результат.ВГраница() Цикл\n\t\t\tРезультат[Индекс] = СокрЛП(Результат[Индекс]);\n\t\t\tКонецЦикла;\n\t\tВозврат Результат;\n\t\t\n\tКонецЕсли;\n\t\n\tРезультат = Новый Массив;\n\t\n\t// Для обеспечения обратной совместимости.\n\tЕсли ПропускатьПустыеСтроки = Неопределено Тогда\n\t\tПропускатьПустыеСтроки = ?(Разделитель = \" \", Истина, Ложь);\n\t\tЕсли ПустаяСтрока(Значение) Тогда\n\t\t\tЕсли Разделитель = \" \" Тогда\n\t\t\t\tРезультат.Добавить(\"\");\n\t\t\tКонецЕсли;\n\t\t\tВозврат Результат;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t//\n\t\n\tПозиция = СтрНайти(Значение, Разделитель);\n\tПока Позиция > 0 Цикл\n\t\tПодстрока = Лев(Значение, Позиция - 1);\n\t\tЕсли Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда\n\t\t\tЕсли СокращатьНепечатаемыеСимволы Тогда\n\t\t\t\tРезультат.Добавить(СокрЛП(Подстрока));\n\t\t\tИначе\n\t\t\t\tРезультат.Добавить(Подстрока);\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\tЗначение = Сред(Значение, Позиция + СтрДлина(Разделитель));\n\t\tПозиция = СтрНайти(Значение, Разделитель);\n\tКонецЦикла;\n\t\n\tЕсли Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда\n\t\tЕсли СокращатьНепечатаемыеСимволы Тогда\n\t\t\tРезультат.Добавить(СокрЛП(Значение));\n\t\tИначе\n\t\t\tРезультат.Добавить(Значение);\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция СериализацияJSON(Знач ИсходныйОбъект)\n\t\n\tЗаписьJSON = Новый ЗаписьJSON;\n\tЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));\n\tЗаписатьJSON(ЗаписьJSON, ИсходныйОбъект);\n\tРезультат_JSON = ЗаписьJSON.Закрыть();\n\t\n\tВозврат (Результат_JSON);\n\t\nКонецФункции\n\nФункция ДесериализацияJSON(Знач СтрокаJSON, Знач СвойстваСДатой = Неопределено, СчитатьВСоответствие = Ложь)\n\t\n\tЧтениеJSON = Новый ЧтениеJSON;\n\tЧтениеJSON.УстановитьСтроку(СтрокаJSON);\n\tСчитанныйОбъект = ПрочитатьJSON(ЧтениеJSON, СчитатьВСоответствие, СвойстваСДатой);\n\t\n\tВозврат (СчитанныйОбъект);\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\Форма\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\Форма\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/fe5229c00d26a2dadebd8b088d83227db5a1f7a8/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%5CForm.obj.bsl",
+ "size": 27346,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tКонтекстЭмулятора = Новый Структура();\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровТСД\",\t\tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровОтладки\", \tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровИнтеграции\",\tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"РежимВнешнейОбработки\",\t\t\tНеопределено);\n\t\n\tИнициализироватьПараметрыИнтеграции();\n\t\n\tОбработкаМетаданные = Обработка.Метаданные();\n\tРасширениеРодитель = ОбработкаМетаданные.РасширениеКонфигурации();\n\tЕсли РасширениеРодитель = Неопределено Тогда\n\t\tПрефиксОписания = \"epf\";\n\t\tНомерВерсии = ОбработкаМетаданные.Комментарий;\n\t\tКонтекстЭмулятора.РежимВнешнейОбработки = Истина;\n\tИначе\n\t\tПрефиксОписания = \"cfe\";\n\t\tНомерВерсии = РасширениеРодитель.Версия;\n\t\tКонтекстЭмулятора.РежимВнешнейОбработки = Ложь;\n\tКонецЕсли;\n\t\n\tОсновнойЗаголовокФормы = СтрШаблон(\"Эмулятор ТСД (%1 v%2)\", ПрефиксОписания, НомерВерсии);\n\tЗаголовок = ОсновнойЗаголовокФормы;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\t\n\tЕсли РезультатПроверки.КритическаяОшибка Тогда\n\t\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияПредупрежденияОКритическойОшибке\", ЭтотОбъект);\n\t\tТекстОповещения = СтрШаблон(\n\t\t\"Текущая конфигурация не поддерживает работу эмулятора ТСД.\n\t\t|Причина: %1\"\n\t\t, РезультатПроверки.ОписаниеОшибки);\n\t\tПоказатьПредупреждение(Оповещение, ТекстОповещения);\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеЗакрытияПредупрежденияОКритическойОшибке(ДополнительныеПараметры) Экспорт\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)\n\t\n\t// По большому счету, единственная причина проверки - при завершении работы завершены\n\t// серверные вызовы. Поэтому здесь такая странная конструкция, мы проверяем одновременно\n\t// и на Неопределено и на Ложь\n\tЕсли (ЗавершениеРаботы = Неопределено)\t\t// На старых версиях платформы параметр ЗавершениеРаботы и все последующие опускаются\n\t\t\tИЛИ Не ЗавершениеРаботы Тогда\t\t// На новых версиях - серверные вызовы при завершении работы запрещены\n\t\tПередЗакрытиемНаСервере(КонтекстЭмулятора);\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура ПередЗакрытиемНаСервере(КонтекстЭмулятора)\n\t\n\tСохранитьПараметрыИнтеграции(КонтекстЭмулятора);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура НовоеУстройство(Команда)\n\t\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаНаименования\", ЭтотОбъект);\n\tПоказатьВводСтроки(Оповещение, \"\", \"Введите наименование устройства\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаНаименования(Результат, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли Результат = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tНовоеУстройство = СоздатьУстройствоНаСервере(Результат);\n\t\n\tНачатьСеанс(НовоеУстройство);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура БыстроеСозданиеНовогоУстройства(Команда)\n\t\n\tНовоеУстройство = СоздатьУстройствоНаСервере();\n\t\n\tНачатьСеанс(НовоеУстройство);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура НастройкаИнтеграции(Команда)\n\t\n\tОткрытьНастройкуИнтеграции();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСеансов\n\n&НаКлиенте\nПроцедура СписокСеансовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n\tНачатьСеанс(Элемент.ТекущиеДанные.НомерУстройства);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область НастройкиИнтеграции\n\n&НаСервереБезКонтекста\nФункция ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора)\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"КритическаяОшибка\", Ложь);\n\tРезультат.Вставить(\"ОписаниеОшибки\", \"\");\n\tРезультат.Вставить(\"ТребуетсяРучнаяНастройка\", Ложь);\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЕсли ПустаяСтрока(НастройкиИнтеграции.ПространствоИменXDTO) Тогда\n\t\t\n\t\tРезультат.КритическаяОшибка = Истина;\n\t\tРезультат.ОписаниеОшибки = \"В конфигурации отсутствует XDTO пакет TSD.\";\n\t\tВозврат Результат;\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\t// Проверки не требуются\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tЕсли ПустаяСтрока(НастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов) Тогда\n\t\t\tРезультат.ТребуетсяРучнаяНастройка = Истина;\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\tЕсли ПустаяСтрока(НастройкиИнтеграции.ВебСервер_УРЛ) Тогда\n\t\t\tРезультат.ТребуетсяРучнаяНастройка = Истина;\n\t\tКонецЕсли;\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ПредложитьРучнуюНастройкуИнтеграции()\n\t\n\tТекстВопроса =\n\t\"Для текущей конфигурации требуется ручная настройка интеграции.\n\t|Открыть форму настройки?\";\n\tОповещение = Новый ОписаниеОповещения(\"ПослеОтветаНаВопросРучнойНастройки\", ЭтотОбъект);\n\tПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , \"Требуется ручная настройка\");\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПредложитьНастройкуИнтеграцииПослеОшибки(ОписаниеОшибки)\n\t\n\tТекстВопроса = СтрШаблон(\n\t\"При подключении к базе возникла ошибка:\n\t| %1\n\t|\n\t|Скорее всего, это означает что неправльно выполнена настройка интеграции.\n\t|Открыть форму настройки?\"\n\t, ОписаниеОшибки);\n\tОповещение = Новый ОписаниеОповещения(\"ПослеОтветаНаВопросОНастройкеИнтеграции\", ЭтотОбъект);\n\tПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , \"Ошибка при подключении\");\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеОтветаНаВопросОНастройкеИнтеграции(РезультатВопроса, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли РезультатВопроса = КодВозвратаДиалога.Да Тогда\n\t\tОткрытьНастройкуИнтеграции();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьНастройкуИнтеграции()\n\t\n\tПараметрыФормы = Новый Структура();\n\tПараметрыФормы.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияНастройкиИнтеграции\", ЭтотОбъект);\n\tФормаНастройкиИнтеграции = ПолноеИмяФормы(\"ФормаНастройкиИнтеграции\");\n\tОткрытьФорму(ФормаНастройкиИнтеграции, ПараметрыФормы, ЭтотОбъект, , , Оповещение);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеЗакрытияНастройкиИнтеграции() Экспорт\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\t\tВозврат;\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ИнициализироватьПараметрыИнтеграции()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tНастройкиИнтеграции = Обработка.НоваяСтруктураНастроекИнтеграции();\n\t\n\tСохраненныеНастройкиИнтеграции = ХранилищеОбщихНастроек.Загрузить(\"ЭмуляторТСД\", \"НастройкиИнтеграции\");\n\t\n\tЕсли ЗначениеЗаполнено(СохраненныеНастройкиИнтеграции) Тогда\n\t\tЗаполнитьЗначенияСвойств(НастройкиИнтеграции, СохраненныеНастройкиИнтеграции);\n\tКонецЕсли;\n\t\n\tЕсли НастройкиИнтеграции.Режим = Неопределено Тогда\n\t\tОбработка.АвтоопределениеНастроекИнтеграции(НастройкиИнтеграции);\n\tИначе\n\t\tОбработка.ПослеВосстановленияСохраненныхНастроекИнтеграции(НастройкиИнтеграции);\n\tКонецЕсли;\n\t\n\tПакетXDTO = Метаданные.ПакетыXDTO.Найти(\"TSD\");\n\tЕсли ПакетXDTO <> Неопределено Тогда\n\t\tНастройкиИнтеграции.ПространствоИменXDTO = ПакетXDTO.ПространствоИмен;\n\tКонецЕсли;\n\t\n\tПоместитьВоВременноеХранилище(НастройкиИнтеграции, КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура СохранитьПараметрыИнтеграции(КонтекстЭмулятора)\n\t\n\tСохраняемыеНастройки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\tСохраняемыеНастройки.Удалить(\"ПодключаемыйМодуль_ОписаниеМетодов\");\n\tСохраняемыеНастройки.Удалить(\"ПространствоИменXDTO\");\n\t\n\tХранилищеОбщихНастроек.Сохранить(\"ЭмуляторТСД\", \"НастройкиИнтеграции\", СохраняемыеНастройки);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область НачалоРаботы\n\n&НаКлиенте\nПроцедура НачатьСеанс(НомерВыбранногоУстройства)\n\t\n\tНомерУстройства = НомерВыбранногоУстройства;\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПопытка\n\t\tОписаниеОсновнойФормы = ЗагрузитьОписанияФормНаСервере();\n\tИсключение\n\t\tПредложитьНастройкуИнтеграцииПослеОшибки(ОписаниеОшибки());\n\t\tВозврат;\n\tКонецПопытки;\n\t\n\tЗаголовок = СтрШаблон(\"%1 [%2]\", ОсновнойЗаголовокФормы, НомерУстройства);\n\t\n\tОткрытьФормыТСД(ОписаниеОсновнойФормы);\n\t\n\tПодключитьОбработчикОжидания(\"Подключаемый_ЗапроситьОбновлениеСтатуса\", 5);\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ЗагрузитьОписанияФормНаСервере(НачалоРаботы = Истина) Экспорт\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\tЛокальнаяФабрикаXDTO = Обработка.ЛокальнаяФабрикаXDTO(НастройкиИнтеграции);\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, НачалоРаботы);\n\tРезультат_GetForms = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetForms\", ПараметрыМетода);\n\tЕсли Результат_GetForms = Неопределено Тогда \n\t\tВызватьИсключение \"GetForms: Пустой результат. Не получены первоначальные формы.\";\n\tКонецЕсли;\t\n\t\n\tПолученныеПараметрыТСД = Результат_GetForms.ValuesForm.Item;\n\tПараметрыТСД = Новый Структура;\n\tДля Каждого ПолученныйПараметр Из ПолученныеПараметрыТСД Цикл \n\t\tПараметрыТСД.Вставить(ПолученныйПараметр.Name, ПолученныйПараметр.Text);\n\tКонецЦикла;\n\tПоместитьВоВременноеХранилище(ПараметрыТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tОписаниеОсновнойФормы = Новый Структура;\n\tОписаниеОсновнойФормы.Вставить(\"Операция\", \t\tРезультат_GetForms.StartOperation);\n\tОписаниеОсновнойФормы.Вставить(\"Страница\", \t\tРезультат_GetForms.StartStep);\n\tОписаниеОсновнойФормы.Вставить(\"Имя\", \t\t\tРезультат_GetForms.StartOperation + \"/\" + Формат(Результат_GetForms.StartStep, \"ЧН=0; ЧГ=\"));\n\tОписаниеОсновнойФормы.Вставить(\"КодФормыXML\",\t\"\");\n\t\n СписокФормТСД.Очистить();\n\tДля Каждого ОперацияТСД Из Результат_GetForms.Operation Цикл\n\t\t\n\t\tДля Каждого ФормаОперацииТСД Из ОперацияТСД.Form Цикл\n\t\t\t\n\t\t\tНазваниеФормы = ОперацияТСД.Name + \"/\" + Формат(ФормаОперацииТСД.Number, \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tЗаписьXML = Новый ЗаписьXML;\n\t\t\tЗаписьXML.УстановитьСтроку();\n\t\t\tЛокальнаяФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ФормаОперацииТСД);\n\t\t\tКодФормыXML = ЗаписьXML.Закрыть();\n\t\t\t\n\t\t\tНоваяСтрока = СписокФормТСД.Добавить();\n\t\t\tНоваяСтрока.Имя \t= НазваниеФормы;\n\t\t\tНоваяСтрока.КодФормыXML = КодФормыXML;\n\t\t\tНоваяСтрока.Операция \t= ОперацияТСД.Name;\n\t\t\tНоваяСтрока.Страница\t= ФормаОперацииТСД.Number;\n\t\t\t\n\t\tКонецЦикла;\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(ОписаниеОсновнойФормы);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ОткрытьФормыТСД(ОписаниеОсновнойФормы) Экспорт\n\t\n\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\n\tДля Каждого СтрокаФормыТСД Из СписокФормТСД Цикл \n\t\tЕсли НайтиФормуПоЗаголовку(СтрокаФормыТСД.Имя) = Неопределено Тогда \n\t\t\tОткрытьФорму(ФормаОперации, ПараметрыОткрытияФормыОперации(СтрокаФормыТСД), ЭтотОбъект, Истина, Окно);\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tОткрытаяОсновнаяФорма = НайтиФормуПоЗаголовку(ОписаниеОсновнойФормы.Имя);\n\tЕсли ОткрытаяОсновнаяФорма = Неопределено Тогда\n\t\tОткрытьФорму(ФормаОперации, ПараметрыОткрытияФормыОперации(ОписаниеОсновнойФормы), ЭтотОбъект, Истина, Окно);\n\tИначе\n\t\tОткрытаяОсновнаяФорма.ОбновитьСостояние();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция НайтиФормуПоЗаголовку(ИскомыйЗаголовок)\n\t\n\tНайденнаяФорма = Неопределено;\n\tДля Каждого ОткрытаяФорма Из Окно.Содержимое Цикл\n\t\tЕсли ОткрытаяФорма.Заголовок = ИскомыйЗаголовок Тогда \n\t\t\tНайденнаяФорма = ОткрытаяФорма;\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат(НайденнаяФорма);\n\t\nКонецФункции\n\n&НаКлиенте\nФункция ПараметрыОткрытияФормыОперации(СтрокаФормыТСД)\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"НомерУстройства\", НомерУстройства);\n\tРезультат.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\t\n\tРезультат.Вставить(\"ИмяСтраницы\", СтрокаФормыТСД.Имя);\n\tРезультат.Вставить(\"Операция\", СтрокаФормыТСД.Операция);\n\tРезультат.Вставить(\"Страница\", СтрокаФормыТСД.Страница);\n\t\n\tЕсли Не ПустаяСтрока(СтрокаФормыТСД.КодФормыXML) Тогда\n\t\tРезультат.Вставить(\"КодФормыXML\", СтрокаФормыТСД.КодФормыXML);\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура Подключаемый_ЗапроситьОбновлениеСтатуса()\n\t\n\tРезультат = ЗапроситьОбновлениеСтатусаНаСервере();\n\t\n\tЕсли Результат.ЗвуковойСигнал Тогда \n\t\t#Если Не ВебКлиент Тогда\t\t\n\t\t\tСигнал();\n\t\t#КонецЕсли\n\tКонецЕсли;\n\t\n\tЕсли Не Пустаястрока(Результат.Сообщение) Тогда\n\t\t\n\t\tЕсли Не ФормаСообщенияОткрыта Тогда\n\t\t\t\n\t\t\tПараметрыФормыСообщения = Новый Структура(\"ТекстСообщения\", Результат.Message);\n\t\t\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияФормыСообщения\", ЭтотОбъект);\n\t\t\tФормаСообщений = ПолноеИмяФормы(\"ФормаСообщений\");\n\t\t\tОткрытьФорму(ФормаСообщений, ПараметрыФормыСообщения, ЭтотОбъект, , , , Оповещение);\n\t\t\t\n\t\t\tФормаСообщенияОткрыта = Истина;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОповестить(\"НовоеСообщениеСтатуса\", Результат.Сообщение, \"ЭмуляторТСД\");\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ЗапроситьОбновлениеСтатусаНаСервере()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Истина);\n\tОтвет = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"StatusTSD\", ПараметрыМетода);\n\t\n\tРезультат = Новый Структура(\"ЗвуковойСигнал, Сообщение\", Ответ.Signal, Ответ.Message);\n\tВозврат(Результат);\n\nКонецФункции\n\n&НаКлиенте\nПроцедура ПослеЗакрытияФормыСообщения(РезультатЗакрытия, ДополнительныеПараметры) Экспорт\n\t\n\tФормаСообщенияОткрыта = Ложь;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область УправлениеУстройствами\n\n&НаСервереБезКонтекста\nФункция СоздатьУстройствоНаСервере(ИмяУстройства = \"\")\n\t\n\tЕсли ПустаяСтрока(ИмяУстройства) Тогда\n\t\tИмяУстройства = \"ЭТСД - \" + Строка(Новый УникальныйИдентификатор);\n\tКонецЕсли;\n\t\n\tОригинальноеИмя = ИмяУстройства;\n\tСч = 0;\n\tИмяУникально = Ложь;\n\tМенеджерЗаписи = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьМенеджерЗаписи();\n\t\n\tПока Не ИмяУникально Цикл\n\t\t\n\t\tМенеджерЗаписи.НомерУстройства = ИмяУстройства;\n\t\tМенеджерЗаписи.Прочитать();\n\t\tЕсли Не МенеджерЗаписи.Выбран() Тогда\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\t\t\n\t\tСч = Сч + 1;\n\t\tИмяУстройства = СтрШаблон(\"%1 (%2)\", ОригинальноеИмя, Формат(Сч, \"ЧГ=0\"));\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(ИмяУстройства);\n\t\nКонецФункции\n\n#КонецОбласти\n\n&НаКлиенте\nФункция ПолноеИмяФормы(ИмяФормы)\n\t\n\tЕсли КонтекстЭмулятора.РежимВнешнейОбработки Тогда\n\t\tПрефиксМетаданных = \"ВнешняяОбработка\";\n\tИначе\n\t\tПрефиксМетаданных = \"Обработка\";\n\tКонецЕсли;\n\t\n\tРезультат = СтрШаблон(\"%1.ЭмуляторТСД.Форма.%2\", ПрефиксМетаданных, ИмяФормы);\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\ФормаВводаШтрихкода\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\ФормаВводаШтрихкода\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/41e9fdeaf103fc1351ea8a1c70ff340434c610f2/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%92%D0%B2%D0%BE%D0%B4%D0%B0%D0%A8%D1%82%D1%80%D0%B8%D1%85%D0%BA%D0%BE%D0%B4%D0%B0%5CForm.obj.bsl",
+ "size": 7813,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tСохраненныеНастройки = ПрочитатьНастройкиНаСервере();\n\t\n\tМассивТиповШК = СохраненныеНастройки.МассивТиповШК;\n\tЕсли Не ЗначениеЗаполнено(МассивТиповШК) Тогда\n\t\tМассивТиповШК = МассивТиповШКПоУмолчанию();\n\tКонецЕсли;\n\tДля Каждого ТипШК Из МассивТиповШК Цикл\n\t\tЭлементы.ТипШК.СписокВыбора.Добавить(ТипШК, ТипШК);\n\tКонецЦикла;\n\tТипШК = МассивТиповШК[0];\n\t\n\tМаксДлинаОтображаемогоШК = 40;\n\tМассивШК = СохраненныеНастройки.МассивШК;\n\tЕсли ЗначениеЗаполнено(МассивШК) Тогда\n\t\tДля Каждого ШК Из МассивШК Цикл\n\t\t\t\n\t\t\tПредставление = ШК;\n\t\t\tЕсли СтрДлина(Представление) > МаксДлинаОтображаемогоШК Тогда \n\t\t\t\tПредставление = Лев(Представление, (МаксДлинаОтображаемогоШК - 1)) + \"...\";\n\t\t\tКонецЕсли;\n\t\t\tСписокШК.Добавить(ШК, Представление);\n\t\t\t\n\t\tКонецЦикла;\n\t\t\n\t\tШтрихкод = МассивШК[0];\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ОК(Команда)\n\t\n\tМаксЗаписейИсторииТиповШК = 20;\n\tМаксЗаписейИсторииШК = 10;\n\t\n\tМассивТиповШК = Элементы.ТипШК.СписокВыбора.ВыгрузитьЗначения();\n\tТекущийИндекс = МассивТиповШК.Найти(ТипШК);\n\tЕсли ТекущийИндекс = Неопределено Тогда\n\t\t\n\t\tМассивТиповШК.Вставить(0, ТипШК);\n\t\tЕсли МассивТиповШК.ВГраница() >= МаксЗаписейИсторииТиповШК Тогда\n\t\t\tМассивТиповШК.Удалить(МаксЗаписейИсторииТиповШК);\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t\n\t\tМассивТиповШК.Удалить(ТекущийИндекс);\n\t\tМассивТиповШК.Вставить(0, ТипШК);\n\t\t\n\tИначе\n\t\tВызватьИсключение(\"Ошибка обработки.\");\n\tКонецЕсли;\n\t\n\tМассивШК = СписокШК.ВыгрузитьЗначения();\n\tТекущийИндекс = МассивШК.Найти(Штрихкод);\n\tЕсли ТекущийИндекс = Неопределено Тогда\n\t\t\n\t\tМассивШК.Вставить(0, Штрихкод);\n\t\tЕсли МассивШК.ВГраница() >= МаксЗаписейИсторииШК Тогда\n\t\t\tМассивШК.Удалить(МаксЗаписейИсторииШК);\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t\n\t\tМассивШК.Удалить(ТекущийИндекс);\n\t\tМассивШК.Вставить(0, Штрихкод);\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t// Ничего делать не нужно\n\t\t\n\tИначе\n\t\tВызватьИсключение(\"Ошибка обработки.\");\n\tКонецЕсли;\n\t\n\tСохранитьНастройкиНаСервере(МассивТиповШК, МассивШК);\n\t\n\tРезультат = Новый Структура(\"ТипШК, Штрихкод\", ТипШК, Штрихкод);\n\tЗакрыть(Результат);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Отмена(Команда)\n\t\n\tЗакрыть(Неопределено);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьCR(Команда)\n\t\n\tВставитьТекст(Символ(13));\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьGS(Команда)\n\t\n\tВставитьТекст(\"\\x1d\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьLF(Команда)\n\t\n\tВставитьТекст(Символ(10));\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\n// BSLLS:Typo-off\nПроцедура ПослеВыбораШтрихкодаИзСписка(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт\n// BSLLS:Typo-on\n\t\n\tЕсли ВыбранныйЭлемент = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tШтрихкод = ВыбранныйЭлемент.Значение;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ШтрихкодНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n// BSLLS:Typo-off\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВыбораШтрихкодаИзСписка\", ЭтотОбъект);\n// BSLLS:Typo-on\n\tПоказатьВыборИзМеню(Оповещение, СписокШК, Элементы.Штрихкод);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервереБезКонтекста\nФункция ПрочитатьНастройкиНаСервере()\n\t\n\tМассивТиповШК = ХранилищеОбщихНастроек.Загрузить(\"ЭТСД_Эмулятор\", \"МассивТиповШК\");\n\tМассивШК = ХранилищеОбщихНастроек.Загрузить(\"ЭТСД_Эмулятор\", \"МассивШК\");\n\t\n\tРезультат = Новый Структура(\"МассивТиповШК, МассивШК\", МассивТиповШК, МассивШК);\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервереБезКонтекста\nПроцедура СохранитьНастройкиНаСервере(МассивТиповШК, МассивШК)\n\t\n\tХранилищеОбщихНастроек.Сохранить(\"ЭТСД_Эмулятор\", \"МассивТиповШК\", МассивТиповШК);\n\tХранилищеОбщихНастроек.Сохранить(\"ЭТСД_Эмулятор\", \"МассивШК\", МассивШК);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция МассивТиповШКПоУмолчанию()\n\t\n\tТипыШК = Новый Массив;\n\tТипыШК.Добавить(\"Code128\");\n\tТипыШК.Добавить(\"GS1_Databar\");\n\tТипыШК.Добавить(\"DataMatrix\");\n\tТипыШК.Добавить(\"QRCode\");\n\tТипыШК.Добавить(\"PDF417\");\n\tТипыШК.Добавить(\"EANJAN\");\n\tТипыШК.Добавить(\"UPC\");\n\tТипыШК.Добавить(\"MicroPDF417\");\n\tТипыШК.Добавить(\"DataMatrixInverse\");\n\tТипыШК.Добавить(\"QRCodeInverse\");\n\tТипыШК.Добавить(\"MicroQR\");\n\tТипыШК.Добавить(\"Aztec\");\n\t\n\tВозврат(ТипыШК);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ВставитьТекст(Текст)\n\t\n\tЭлементы.Штрихкод.ВыделенныйТекст = Текст;\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\ФормаНастройкиИнтеграции\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\ФормаНастройкиИнтеграции\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/91dd7a37fa6aa991601e96aaacd31ac50164db2e/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8%5CForm.obj.bsl",
+ "size": 12959,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tКонтекстЭмулятора = Параметры.КонтекстЭмулятора;\n\tЗаполнитьСписокВерсийПодключаемогоМодуля();\n\tПрочитатьПараметры();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tОбновитьОтображениеРежима();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\nПроцедура РежимИнтеграцииПриИзменении(Элемент)\n\t\n\tОбновитьОтображениеРежима();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПодключаемыйМодульПриИзменении(Элемент)\n\t\n\tЗагрузитьТекстМодуляНаСервере();\n\t\n\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура URLПубликацииПриИзменении(Элемент)\n\t\n\tОбновитьСтатус_WebСервер();\n\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ОК(Команда)\n\t\n\tСохранитьПараметры();\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Отмена(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВвестиТекстПодключаемогоМодуля(Команда)\n\t\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаРучнойНастройки\", ЭтотОбъект);\n\tПоказатьВводСтроки(Оповещение, ТекстПодключаемогоМодуля, \"Вставьте сюда текст модуля веб-сервиса TSD из вашей конфигурации\", , Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаРучнойНастройки(Текст, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли Текст = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tТекстПодключаемогоМодуля = Текст;\n\t\n\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗагрузитьТекстМодуляНаСервере()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" Тогда\n\t\t\n\t\tТекстПодключаемогоМодуля = \"\";\n\t\t\n\tИначе\n\t\t\n\t\tТекстПодключаемогоМодуля = Обработка.ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияПодключаемогоМодуля);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьОтображениеРежима()\n\t\n\tЕсли РежимИнтеграции = \"СтандартныйМодуль\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаСтандартныйМодуль;\n\t\tОбновитьСтатус_СтандартныйМодуль();\n\t\t\n\tИначеЕсли РежимИнтеграции = \"ПодключаемыйМодуль\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаПодключаемыйМодуль;\n\t\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\t\n\tИначеЕсли РежимИнтеграции = \"WebСервер\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаWebСервер;\n\t\tОбновитьСтатус_WebСервер();\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ЗаполнитьСписокВерсийПодключаемогоМодуля()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПоддерживаемыеВерсии = Обработка.ШаблоныМодулей_ПолучитьСписокВерсий();\n\tДля Каждого ПоддерживаемаяВерсия Из ПоддерживаемыеВерсии Цикл\n\t\tЭлементы.ПодключаемыйМодуль.СписокВыбора.Вставить(0, ПоддерживаемаяВерсия);\n\tКонецЦикла;\n\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПрочитатьПараметры()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tРежимИнтеграции = НастройкиИнтеграции.Режим;\n\tВерсияПодключаемогоМодуля \t= НастройкиИнтеграции.ПодключаемыйМодуль_Версия;\n\tТекстПодключаемогоМодуля \t= НастройкиИнтеграции.ПодключаемыйМодуль_Текст;\n\t\n\tURLПубликации\t= НастройкиИнтеграции.ВебСервер_УРЛ;\n\tЛогин\t\t\t= НастройкиИнтеграции.ВебСервер_Логин;\n\tПароль\t\t\t= НастройкиИнтеграции.ВебСервер_Пароль;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура СохранитьПараметры()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tНастройкиИнтеграции.Режим = РежимИнтеграции;\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия \t= ВерсияПодключаемогоМодуля;\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст \t= ТекстПодключаемогоМодуля;\n\t\n\tЕсли РежимИнтеграции = \"ПодключаемыйМодуль\" Тогда\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = Обработка.ШаблоныМодулей_ОписаниеМетодовМодуля(ТекстПодключаемогоМодуля);\n\tИначе\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = \"\";\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.ВебСервер_УРЛ \t\t= URLПубликации;\n\tНастройкиИнтеграции.ВебСервер_Логин \t= Логин;\n\tНастройкиИнтеграции.ВебСервер_Пароль \t= Пароль;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_СтандартныйМодуль()\n\t\n\tЕсли Не СтандартныйМодульДоступен() Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусСтандартныйМодуль, \"Стандартный модуль интеграции не найден\");\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусСтандартныйМодуль, \"Стандартный модуль интеграции доступен для использования\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_ПодключаемыйМодуль()\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" Тогда\n\t\tЭлементы.ВвестиТекстПодключаемогоМодуля.Видимость = Истина;\n\tИначе\n\t\tЭлементы.ВвестиТекстПодключаемогоМодуля.Видимость = Ложь;\n\tКонецЕсли;\n\t\t\n\tЕсли Не ЗначениеЗаполнено(ВерсияПодключаемогоМодуля) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Не выбрана версия подключаемого модуля\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" И ПустаяСтрока(ТекстПодключаемогоМодуля) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Не введен текст ручной настройки подключаемого модуля\");\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Подключаемый модуль интеграции доступен для использования\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_WebСервер()\n\t\n\tЕсли ПустаяСтрока(URLПубликации) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусWebСервер, \"Не введен URL публикации\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ПустаяСтрока(Логин) И Не ПустаяСтрока(Пароль) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусWebСервер, \"Не указан логин для доступа к публикации\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусWebСервер, \"Интеграция через web-сервер доступна для использования\");\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция СтандартныйМодульДоступен()\n\t\n\tСтандартныйМодуль = Метаданные.ОбщиеМодули.Найти(\"усТСДВебСервис\");\n\tЕсли СтандартныйМодуль = Неопределено Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\t\n\tВозврат Истина;\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура УстановитьСтатусОК(ГруппаСтатуса, Комментарий)\n\t\n\tУстановитьСтатус(ГруппаСтатуса, \"☑\", WebЦвета.ЗеленыйЛес, Комментарий);\n\t\n\tЭлементы.ФормаОК.Доступность = Истина;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура УстановитьСтатусОшибка(ГруппаСтатуса, Комментарий)\n\t\n\tУстановитьСтатус(ГруппаСтатуса, \"⚠\", WebЦвета.Красный, Комментарий);\n\t\n\tЭлементы.ФормаОК.Доступность = Ложь;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура УстановитьСтатус(ГруппаСтатуса, СимволИндикатора, ЦветИндикатора, Комментарий)\n\t\n\tЭлементИндикатор = ГруппаСтатуса.ПодчиненныеЭлементы.Получить(0);\n\tЭлементКомментарий = ГруппаСтатуса.ПодчиненныеЭлементы.Получить(1);\n\t\n\tЭлементИндикатор.Заголовок = СимволИндикатора;\n\tЭлементИндикатор.ЦветТекста = ЦветИндикатора;\n\t\n\tЭлементКомментарий.Заголовок = Комментарий;\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\ФормаОперации\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\ФормаОперации\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/309ff624d6e6d6f8277c30ffadf365f1384fcfcc/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8%5CForm.obj.bsl",
+ "size": 105239,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tОтложенныеДействияФормы = Новый Структура();\n\tОтложенныеДействияФормы.Вставить(\"ОткрытьДинамическуюФорму\",\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ДинамическаяФорма\", \t\t\"\");\n\tОтложенныеДействияФормы.Вставить(\"ДинамическаяОперация\",\t\"\");\n\t\n\tОтложенныеДействияФормы.Вставить(\"ОчиститьОперацию\",\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ОперацияДляОчистки\",\t\"\");\n\t\n\tОтложенныеДействияФормы.Вставить(\"ОткрытьСледующуюОперацию\", Ложь);\n\tОтложенныеДействияФормы.Вставить(\"СледующаяОперация\",\t\"\");\n\tОтложенныеДействияФормы.Вставить(\"СледующаяСтраница\", \t0);\n\t\n\tОтложенныеДействияФормы.Вставить(\"ЗакрытьФормы\", \t\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ОчиститьВсеФормы\",\tЛожь);\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tЭлементы.ДекорацияЗаглушка.Видимость = Ложь;\n\t\n\tНомерУстройства = Параметры.НомерУстройства;\n\tЗаголовок = Параметры.ИмяСтраницы;\n\tОперацияТекущейФормы = Параметры.Операция;\n\tСтраницаТекущейФормы = Параметры.Страница;\n\tКонтекстЭмулятора = Параметры.КонтекстЭмулятора;\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЛокальнаяФабрикаXDTO = Обработка.ЛокальнаяФабрикаXDTO(НастройкиИнтеграции);\n\tЭлементы.ИнфоКеш.Заголовок = Элементы.ИнфоКеш.Заголовок + ТекущаяДатаСеанса();\n\tЭлементы.ИнфоКеш.Видимость = Ложь;\n\t\n\tЕсли Параметры.Свойство(\"СтрокаXML\") Тогда \n\t\t\n\t\tЧтениеXML = Новый ЧтениеXML;\n\t\tЧтениеXML.УстановитьСтроку(Параметры.СтрокаXML);\n\t\tТипФорма = ЛокальнаяФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsForm\");\n\t\tФормаТСД = ЛокальнаяФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипФорма);\n\t\t\n\t\tИсходныйКодФормы = Параметры.СтрокаXML;\n\t\t\n\tИначе\n\t\t\n\t\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, ОперацияТекущейФормы, СтраницаТекущейФормы);\n\t\tФормаТСД = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"LoadFormByName\", ПараметрыМетода);\n\t\t\n\t\tЗаписьXML = Новый ЗаписьXML;\n\t\tЗаписьXML.УстановитьСтроку();\n\t\tЛокальнаяФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ФормаТСД);\n\t\tИсходныйКодФормы = ЗаписьXML.Закрыть();\n\t\t\n\tКонецЕсли;\n\t\n\tЭлементы.ГруппаФормаТСД.ЦветФона = ЦветИзHEXСтроки(ФормаТСД.BackColor);\n\t\n\tЕсли ФормаТСД.ScannerOn Тогда \n\t\tЭлементы.ФормаВвестиШтрихкод.Доступность = Истина;\n\tИначе\n\t\tЭлементы.ФормаВвестиШтрихкод.Доступность = Ложь;\n\tКонецЕсли;\t\n\t\n\tМассивРеквизитов = Новый Массив;\n\tПодготовитьРеквизиты(ФормаТСД.Последовательность(), МассивРеквизитов);\n\t\n\tЕсли МассивРеквизитов.Количество() Тогда \n\t\tИзменитьРеквизиты(МассивРеквизитов);\n\tКонецЕсли;\t\n\t\n\tОшибкиОтрисовкиФормы = \"\";\n\t\n\tДобавитьЭлементы(ФормаТСД.Последовательность(), Элементы.ГруппаФормаТСД);\n\t\n\tЕсли ЗначениеЗаполнено(ОшибкиОтрисовкиФормы) Тогда\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Видимость = Истина;\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Заголовок = \"Ошибка отрисовки формы. \" + ОшибкиОтрисовкиФормы;\n\tИначе\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Видимость = Ложь;\n\tКонецЕсли;\t\n\t\n\tЗаполнитьРеквизитыФормыПараметрами();\n\t\n\tПрочитатьПараметрыОтладки(ЭтотОбъект);\n\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\tПодключитьОбработчикОжидания(\"Подключаемый_ОбновитьРежимОтладки\", 1);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриПовторномОткрытии()\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)\n\t\n\tЕсли СтрНачинаетсяС(Заголовок, \"Устарела\") Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tЕсли ИмяСобытия = \"ЭмуляторТСД_ИзменениеРежимаОтладки\" Тогда\n\t\t\n\t\tЕсли ЖурналОтладкиВключен <> Параметр Тогда\n\t\t\t\n\t\t\tЖурналОтладкиВключен = Параметр;\n\t\t\tПриИзмененииРежимаОтладки();\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли;\t\n\t\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\nПроцедура ОбработкаВыбора(Элемент)\n\t\n\tРеквизит = Сред(Элемент.Имя, 8);\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tНомерСтроки = Элемент.ТекущиеДанные.Колонка1;\n\tОбработкаВыбораСервер(Реквизит, НомерСтроки);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ОбработкаВыбораСервер(Реквизит, НомерСтроки)\n\t\n\tПараметрыТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tПараметрыТСД.Вставить(Реквизит, НомерСтроки);\n\t\n\tОбработатьСобытие(\"Выбор\", \"Таблица\" + Реквизит, ПараметрыТСД);\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриИзмененииЭлемента(Элемент)\n\t\n\tРеквизит = Сред(Элемент.Имя, 9);\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриИзмененииЭлементаСервер(Реквизит);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПриИзмененииЭлементаСервер(Реквизит)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tЕсли ТипЗнч(ЭтотОбъект[\"Реквизит\" + Реквизит]) = Тип(\"Дата\") Тогда \n\t\tСтруктураПараметровТСД.Вставить(Реквизит, Формат(ЭтотОбъект[\"Реквизит\" + Реквизит], \"ДФ=dd.MM.yyyy\"));\n\tИначеЕсли ТипЗнч(ЭтотОбъект[\"Реквизит\" + Реквизит]) = Тип(\"Число\") Тогда \n\t\tСтруктураПараметровТСД.Вставить(Реквизит, Формат(ЭтотОбъект[\"Реквизит\" + Реквизит], \"ЧРД=.; ЧГ=\"));\n\tИначе\t\n\t\tСтруктураПараметровТСД.Вставить(Реквизит, ЭтотОбъект[\"Реквизит\" + Реквизит]);\n\tКонецЕсли;\n\t\n\tОбработатьСобытие(\"ПриИзменении\", \"Реквизит\" + Реквизит, СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовТаблицыФормыЖурналОтладки\n\n&НаКлиенте\nПроцедура ЖурналОтладкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tСтрокаЖурнала = ЖурналОтладки.НайтиПоИдентификатору(ВыбраннаяСтрока);\n\tЕсли СтрокаЖурнала.Наименование = \"GetData\" Тогда\n\t\t\n\t\tФормаПросмотрИзмененныхПараметров = ПолноеИмяФормы(\"ФормаПросмотрИзмененныхПараметров\");\n\t\tПараметрыФормы = Новый Структура(\"ИзмененныеПараметры\", СтрокаЖурнала.ИзмененныеПараметры);\n\t\tОткрытьФорму(ФормаПросмотрИзмененныхПараметров, ПараметрыФормы, ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ВвестиШтрихкод(Команда)\n\t\n\tФормаВводаШтрихкода = ПолноеИмяФормы(\"ФормаВводаШтрихкода\");\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаШтрихкода\", ЭтотОбъект);\n\tОткрытьФорму(ФормаВводаШтрихкода, , ЭтотОбъект, , , , Оповещение);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВыбратьТекущееЗначение(Команда)\n\t\n\tПриИзмененииЭлемента(ТекущийЭлемент);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьПараметры(Команда)\n\t\n\tФормаПросмотрПараметров = ПолноеИмяФормы(\"ФормаПросмотрПараметров\");\n\tПараметрыФормы = Новый Структура(\"НомерУстройства, АдресХранилищаПараметров\", НомерУстройства, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tОткрытьФорму(ФормаПросмотрПараметров, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьДанные(Команда)\n\t\n\tФормаПросмотрДанных = ПолноеИмяФормы(\"ФормаПросмотрДанных\");\n\tПараметрыФормы = Новый Структура(\"НомерУстройства\", НомерУстройства);\n\tОткрытьФорму(ФормаПросмотрДанных, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьТекущееДействие(Команда)\n\t\n\tКлючЗаписи = СоздатьКлючЗаписиТекущееДействиеПользователяТСД(НомерУстройства);\n\tПараметрыФормы = Новый Структура(\"Ключ\", КлючЗаписи);\n\tОткрытьФорму(\"РегистрСведений.усТекущееДействиеПользователяТСД.ФормаЗаписи\", ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция СоздатьКлючЗаписиТекущееДействиеПользователяТСД(НомерУстройства)\n\t\n\tКлючЗаписи = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьКлючЗаписи(Новый Структура(\"НомерУстройства\", НомерУстройства));\n\tВозврат КлючЗаписи;\n\t\nКонецФункции\t\n\n&НаКлиенте\nПроцедура СброситьКэш(Команда)\n\n\tСтартоваяФорма = Неопределено;\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tСтартоваяФорма = ВложеннаяФорма;\n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\t\n\tКонецЦикла;\n\t\n\tОписаниеОсновнойФормы = СтартоваяФорма.ЗагрузитьОписанияФормНаСервере(Ложь);\n\tСтартоваяФорма.ОткрытьФормыТСД(ОписаниеОсновнойФормы);\n\nКонецПроцедуры\t\n\n&НаКлиенте\nПроцедура ПосмотретьКодСтраницы(Команда)\n\t\n\tФормаПросмотрКода = ПолноеИмяФормы(\"ФормаПросмотрКода\");\n\tПараметрыФормы = Новый Структура(\"Текст\", ИсходныйКодФормы);\n\tОткрытьФорму(ФормаПросмотрКода, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПереключитьОтображениеОтладки(Команда)\n\t\n\tЖурналОтладкиОтображается = Не ЖурналОтладкиОтображается;\n\tЕсли Не ЖурналОтладкиОтображается Тогда \n\t\t\n\t\tЖурналОтладкиВключен = Ложь;\n\t\tЖурналОтладки.Очистить();\n\t\tПриИзмененииРежимаОтладки();\n\t\t\n\tИначе\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПереключитьРежимОтладки(Команда)\n\t\n\tЖурналОтладкиВключен = Не ЖурналОтладкиВключен;\n\tОповестить(\"ЭмуляторТСД_ИзменениеРежимаОтладки\", ЖурналОтладкиВключен, \"ЭмуляторТСД\");\n\t\n\tПриИзмененииРежимаОтладки();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОчиститьЖурналОтладки(Команда)\n\t\n\tЖурналОтладки.Очистить();\n\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаШтрихкода(РезультатЗакрытия, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли РезультатЗакрытия = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\tШтрихкодПриИзмененииНаСервере(РезультатЗакрытия.ТипШК, РезультатЗакрытия.Штрихкод);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ШтрихкодПриИзмененииНаСервере(Знач ТипШК, Знач Штрихкод)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tСтруктураПараметровТСД.Вставить(\"barcodetype\", ТипШК);\n\tСтруктураПараметровТСД.Вставить(\"barcode\", Штрихкод);\n\t\n\tОбработатьСобытие(\"ПриИзменении\", \"Штрихкод\", СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииПунктаМеню(Команда)\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииКнопки(Команда)\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииГиперссылки(Команда, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПриНажатииСервер(Команда)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tОбработатьСобытие(\"Нажатие\", Команда, СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область ОтрисовкаФормы\n\n&НаКлиенте\nПроцедура ВключитьВидимостьИнфоКеш() Экспорт\n\t\n\tЭлементы.ИнфоКеш.Видимость = Истина;\n\nКонецПроцедуры\t\n\n&НаСервере\nПроцедура ДобавитьЭлементы(ПоследовательностьЭлементов, Родитель)\n\t\n\tСобытия = Неопределено;\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Label\" Тогда \n\t\t\tДобавитьLabel(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TextBox\" Тогда \n\t\t\tДобавитьTextbox(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"DateTime\" Тогда \n\t\t\tДобавитьDateTime(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Button\" Тогда \n\t\t\tДобавитьButton(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Line\" Тогда \n\t\t\tГруппа = ДобавитьLine(текЭлемент, Родитель);\n\t\t\tДобавитьЭлементы(текЭлемент.Последовательность(), Группа);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TableItems\" Тогда \n\t\t\tДобавитьTable(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Menu\" Тогда \n\t\t\tДобавитьMenuItem(текЭлемент, Элементы.ГруппаКоманднаяПанельТСД);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Events\" Тогда \n\t\t\tСобытия = Сч;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"PictureCollection\" Тогда \n\t\t\tПродолжить; // Не поддерживается в текущей версии\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип элемента: %1\", ТипЭлемента);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\n\tЕсли События <> Неопределено Тогда\n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(События);\n\t\tДобавитьEvents(текЭлемент, ФабрикаXDTO);\n\t\t\n\tКонецЕсли;\t\n\t\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nФункция МасштабПоВысоте()\n\t\n\tВозврат(16);\n\t\nКонецФункции\n\n&НаКлиентеНаСервереБезКонтекста\nФункция МасштабПоШирине()\n\t\n\tВозврат(8);\n\t\nКонецФункции\n\n&НаСервере\nПроцедура УстановитьШрифтЭлемента(ЭлементФормы, ЭлементXDTO)\n\t\n\tЕсли Не ЗначениеЗаполнено(ЭлементXDTO.Font_Name) Тогда \n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПолужирный = СтрНайти(ЭлементXDTO.Font_Style, \"Bold\");\n\tНаклонный = СтрНайти(ЭлементXDTO.Font_Style, \"Italic\");\n\tПодчеркнутый = СтрНайти(ЭлементXDTO.Font_Style, \"Underline\");\n\tЗачеркнутый = СтрНайти(ЭлементXDTO.Font_Style, \"Line-through\");\n\t\n\t// Здесь мы должны брать оформление не из стиля, а из полученного пакета,\n\t// т.к. рендеринг форм должен совпадать с ТСД.\n\t// BSLLS:StyleElementConstructors-off\n\tЭлементФормы.Шрифт = Новый Шрифт(ЭлементXDTO.Font_Name, ЭлементXDTO.Font_Size, Полужирный, Наклонный, Подчеркнутый, Зачеркнутый);\n\t// BSLLS:StyleElementConstructors-on\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура УстановитьЦветаЭлемента(ЭлементФормы, ЭлементXDTO)\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.Font_Color) Тогда \n\t\tЭлементФормы.ЦветТекста = ЦветИзHEXСтроки(ЭлементXDTO.Font_Color);\n\tКонецЕсли;\t\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.BackColor) Тогда \n\t\tЭлементФормы.ЦветФона = ЦветИзHEXСтроки(ЭлементXDTO.BackColor);\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьLabel(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\tЕсли ВысотаЭлемента > 1 Тогда \n\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\t\tНовыйЭлемент.АвтоМаксимальнаяШирина = Ложь;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.TextAlign = \"TopCenter\" Тогда \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр;\n\tИначеЕсли ЭлементXDTO.TextAlign = \"TopRight\" Тогда \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право;\n\tИначе \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево;\n\tКонецЕсли;\t\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли Не ЭлементXDTO.Template Тогда \n\t\tЭтотОбъект[\"Реквизит\" + ЭлементXDTO.Name] = ЭлементXDTO.Value;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьTextbox(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tНовыйЭлемент.МногострочныйРежим = ЭлементXDTO.MultiLine;\n\tНовыйЭлемент.ТолькоПросмотр = ЭлементXDTO.ReadOnly;\n\tНовыйЭлемент.РежимПароля = ЭлементXDTO.Password;\n\t\n\tЕсли ЭлементXDTO.Height = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоВертикали = Истина;\n\tИначе\n\t\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\t\tЕсли ВысотаЭлемента > 1 Тогда \n\t\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Реквизит\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"ПриИзменении\", \"ПриИзмененииЭлемента\");\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьTable(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Таблица\" + ЭлементXDTO.Name, Тип(\"ТаблицаФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Таблица\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\tНовыйЭлемент.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;\n\tНовыйЭлемент.ИзменятьПорядокСтрок = Ложь;\n\tНовыйЭлемент.ИзменятьСоставСтрок = Ложь;\n\t\n\tСч = 1;\n\tДля Каждого Колонка Из ЭлементXDTO.Columns.Column Цикл \n\t\t\n\t\tНоваяКолонка = Элементы.Добавить(\"Колонка\" + Сч, Тип(\"ПолеФормы\"), НовыйЭлемент);\n\t\tНоваяКолонка.ПутьКДанным = \"Таблица\" + ЭлементXDTO.Name + \".Колонка\" + Сч;\n\t\tНоваяКолонка.ТолькоПросмотр = Истина;\n\t\t\n\t\tЕсли Колонка.Width = -1 Тогда \n\t\t\tНоваяКолонка.РастягиватьПоГоризонтали = Истина;\n\t\tИначе\n\t\t\tШиринаЭлемента = Окр(Колонка.Width / МасштабПоШирине());\n\t\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\t\tНоваяКолонка.Ширина = ШиринаЭлемента;\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\t\n\t\tНоваяКолонка.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево;\n\t\tСч = Сч + 1;\n\t\t\n\tКонецЦикла;\t\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Таблица\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"Выбор\", \"ОбработкаВыбора\");\n\t\n\tДля Каждого Строка Из ЭлементXDTO.RowTable Цикл\n\t\t\n\t\tНоваяСтрока = ЭтотОбъект[\"Таблица\" + ЭлементXDTO.Name].Добавить();\n\t\t \n\t\tСч = 1;\n\t\tДля Каждого Значение Из Строка.ItemColumn Цикл \n\t\t\tНоваяСтрока[\"Колонка\" + Сч] = Значение.Value;\n\t\t\tСч = Сч + 1;\n\t\tКонецЦикла;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьDateTime(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.Format) Тогда \n\t\tНовыйЭлемент.Формат = \"ДФ=\" + ЭлементXDTO.Format;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Height = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоВертикали = Истина;\n\tИначе\n\t\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\t\tЕсли ВысотаЭлемента > 1 Тогда \n\t\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Реквизит\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"ПриИзменении\", \"ПриИзмененииЭлемента\");\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьButton(ЭлементXDTO, Родитель)\n\t\n\tНоваяКоманда = Команды.Добавить(\"Кнопка\" + ЭлементXDTO.Name);\n\tНоваяКоманда.Заголовок = ЭлементXDTO.Value;\n\tНоваяКоманда.Действие = \"ПриНажатииКнопки\";\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Кнопка\" + ЭлементXDTO.Name, Тип(\"КнопкаФормы\"), Родитель);\n\tНовыйЭлемент.Заголовок = ЭлементXDTO.Value;\n\tНовыйЭлемент.ИмяКоманды = \"Кнопка\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидКнопкиФормы.ОбычнаяКнопка;\n\t\n\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\tЕсли ВысотаЭлемента > 1 Тогда \n\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Template Тогда \n\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\tНоваяСтрока.ИмяРеквизита = \"Кнопка\" + ЭлементXDTO.Name;\n\t\tНоваяСтрока.Значение = ЭлементXDTO.Value;\n\t\tНоваяСтрока.Кнопка = Истина;\n\tКонецЕсли;\t\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Кнопка\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ДобавитьLine(ЭлементXDTO, Родитель)\n\t\n\tИмяГруппы = \"ГруппаТСД\" + Формат(Элементы.Количество(), \"ЧН=0; ЧГ=\");\n\tНоваяГруппа = Элементы.Добавить(ИмяГруппы, Тип(\"ГруппаФормы\"), Родитель);\n\t\n\tНоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;\n\tНоваяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет;\n\tНоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;\n\tНоваяГруппа.РастягиватьПоВертикали = Ложь;\n\tНоваяГруппа.ОтображатьЗаголовок = Ложь;\n\n\tВозврат НоваяГруппа;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ДобавитьMenuItem(ЭлементXDTO, Родитель)\n\t\n\tПоследовательностьЭлементов = ЭлементXDTO.Последовательность();\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\t\n\t\tЕсли текЭлемент.Последовательность().Количество() = 0 Тогда \n\t\t\t\n\t\t\tНомерКоманды = Формат(Команды.Количество(), \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tНоваяКоманда = Команды.Добавить(\"Команда\" + НомерКоманды);\n\t\t\tНоваяКоманда.Заголовок = текЭлемент.Name;\n\t\t\tНоваяКоманда.Действие = \"ПриНажатииПунктаМеню\";\n\t\t\t\n\t\t\tНоваяКнопка = Элементы.Добавить(\"Команда\" + НомерКоманды, Тип(\"КнопкаФормы\"), Родитель);\n\t\t\tНоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;\n\t\t\tНоваяКнопка.Заголовок = текЭлемент.Name;\n\t\t\tНоваяКнопка.ИмяКоманды = \"Команда\" + НомерКоманды;\n\t\t\tНоваяКнопка.ТолькоВоВсехДействиях = Ложь;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tНовоеПодменю = Элементы.Добавить(\"Подменю\" + Формат(Элементы.Количество(), \"ЧН=0; ЧГ=\"), Тип(\"ГруппаФормы\"), Родитель);\n\t\t\tНовоеПодменю.Вид = ВидГруппыФормы.Подменю;\n\t\t\tНовоеПодменю.Заголовок = текЭлемент.Name;\n\t\t\t\n\t\t\tДобавитьMenuItem(текЭлемент, НовоеПодменю);\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция СтрокаСобытияXML(Событие, Фабрика)\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЗапись = Новый ЗаписьXML;\n\tЗапись.УстановитьСтроку();\n\tЗапись.ЗаписатьНачалоЭлемента(\"Event\");\n\tЗапись.ЗаписатьАтрибут(\"Name\", \"Test\");\n\t\n\tПоследовательностьЭлементов = Событие.Последовательность();\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\tШаг = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tФабрика.ЗаписатьXML(Запись, Шаг, ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя, НастройкиИнтеграции.ПространствоИменXDTO);\n\tКонецЦикла;\t\n\t\n\tЗапись.ЗаписатьКонецЭлемента();\n\tРезультат = Запись.Закрыть();\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервере\nФункция НайтиКомандуПоИмени(Событие)\n\t\n\tИмяЭлемента = \"Кнопка\" + Событие.ItemTarget;\n\t\n\tКоманда = Команды.Найти(ИмяЭлемента);\n\tЕсли Команда <> Неопределено Тогда\n\t\tВозврат(ИмяЭлемента);\n\tИначе\n\t\tВозврат(Неопределено);\n\tКонецЕсли;\n\t\nКонецФункции\n\n&НаСервере\nФункция НайтиКомандуПоЗаголовку(Событие)\n\t\n\tРезультат = Неопределено;\n\t\n\tДля Каждого Команда Из Команды Цикл \n\t\tЕсли Команда.Заголовок = Событие.ItemTarget Тогда \n\t\t\tРезультат = Команда.Имя;\n\t\t\tПрервать;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ЗаполнитьГорячиеКлавиши(Событие, ИсходныйКодСобытия)\n\t\n\tСтруктураПоиска = Новый Структура;\n\tСтруктураПоиска.Вставить(\"ОбработкаСобытия\", \tИсходныйКодСобытия);\n\tСтруктураПоиска.Вставить(\"ИмяСобытия\", \t\t\t\"Нажатие\");\n\tСтрокиСобытийНажатие = ТаблицаСобытий.НайтиСтроки(СтруктураПоиска);\n\t\n\tДля Каждого Реквизит Из СтрокиСобытийНажатие Цикл \n\t\t\n\t\tГорячаяКлавиша = КлавишаПоКоду(Событие.KeyChar);\n\t\tЕсли ГорячаяКлавиша = Неопределено Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\n\t\t\n\t\tСочетаниеКлавиш = Новый СочетаниеКлавиш(ГорячаяКлавиша, Событие.Alt = Истина, Событие.Ctrl = Истина, Событие.Shift = Истина);\n\t\t\n\t\tПопытка\n\t\t\tКоманда = Команды.Найти(Команды[Реквизит.ЭлементСобытия].Имя);\n\t\tИсключение\n\t\tКонецПопытки;\n\t\t\n\t\tЕсли Команда = Неопределено Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tКоманда.СочетаниеКлавиш = СочетаниеКлавиш;\n\t\t\n\tКонецЦикла;\t\n\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnScanBarCode(Событие, СтрокаСобытия)\n\t\n\tИмяСобытия = \"ПриИзменении\";\n\tЭлемент = \"Штрихкод\";\n\t\n\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\tНоваяСтрока.ЭлементСобытия = Элемент;\n\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnKeyPress(Событие, СтрокаСобытия)\n\t\n\tКодКлавишиEnter = 13;\n\tКодКлавишиВверх = 38;\t\n\tКодКлавишиВниз = 40;\t\n\t\n\tЕсли Событие.KeyChar = КодКлавишиВверх ИЛИ Событие.KeyChar = КодКлавишиВниз Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tЕсли Событие.KeyChar = КодКлавишиEnter Тогда\n\t\t\n\t\tРеквизит = Элементы.Найти(\"Реквизит\" + Событие.ItemTarget);\n\t\tТаблица = Элементы.Найти(\"Таблица\" + Событие.ItemTarget);\n\t\t\n\t\tЕсли Реквизит <> Неопределено Тогда \n\t\t\t\n\t\t\tИмяСобытия = \"ПриИзменении\";\n\t\t\tЭлемент = \"Реквизит\" + Событие.ItemTarget;\n\t\t\t\n\t\tИначеЕсли Таблица <> Неопределено Тогда \n\t\t\t\n\t\t\tИмяСобытия = \"Выбор\";\n\t\t\tЭлемент = \"Таблица\" + Событие.ItemTarget;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный реквизит события OnKeyPress: %1\", Событие.ItemTarget);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\t\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\t\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\t\tНоваяСтрока.ЭлементСобытия = Элемент;\n\t\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\t\n\tИначе\n\t\t\n\t\tЗаполнитьГорячиеКлавиши(Событие, СтрокаСобытия);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnClick(Событие, СтрокаСобытия)\n\t\n\tИмяСобытия = \"Нажатие\";\n\tКнопкаНайдена = Ложь;\n\t\n\tЭлемент = НайтиКомандуПоИмени(Событие);\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\tЭлемент = НайтиКомандуПоЗаголовку(Событие);\n\tКонецЕсли;\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tИмяЭлемента = \"Реквизит\" + Событие.ItemTarget;\n\t\tГиперссылка = Элементы.Найти(ИмяЭлемента);\n\t\tЕсли Гиперссылка <> Неопределено Тогда \n\t\t\t\n\t\t\tЭлемент = ИмяЭлемента;\n\t\t\t\n\t\t\tЕсли Гиперссылка.Вид = ВидПоляФормы.ПолеНадписи Тогда \n\t\t\t\tИмяСобытия = \"Нажатие\";\n\t\t\t\tГиперссылка.Гиперссылка = Истина;\n\t\t\t\tГиперссылка.УстановитьДействие(\"Нажатие\", \"ПриНажатииГиперссылки\");\n\t\t\tИначе\n\t ИмяСобытия = \"ПриИзменении\";\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли; \t\t\t\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tИмяТаблицы = \"Таблица\" + Событие.ItemTarget;\n\t\tЕсли Элементы.Найти(ИмяТаблицы) <> Неопределено Тогда \n\t\t\tИмяСобытия = \"Выбор\";\n\t\t\tЭлемент = ИмяТаблицы;\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Не удалось обработать событие OnClick - %1\", Событие.ItemTarget);\n\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\n\tКонецЕсли;\n\t\n\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\tНоваяСтрока.ЭлементСобытия = Элемент;\n\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьEvents(ЭлементXDTO, Фабрика)\n\t\n\tДля Каждого Событие Из ЭлементXDTO.Event Цикл\n\t\t\n\t\tСтрокаСобытия = СтрокаСобытияXML(Событие, Фабрика);\n\t\t\n\t\tЕсли Событие.Name = \"OnScanBarCode\" Тогда \n\t\t\tДобавитьСобытиеOnScanBarCode(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначеЕсли Событие.Name = \"OnKeyPress\" Тогда \n\t\t\tДобавитьСобытиеOnKeyPress(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначеЕсли Событие.Name = \"OnClick\" Тогда \n\t\t\tДобавитьСобытиеOnClick(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип события: %1\", Событие.Name);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработкаОтвета\n\n&НаКлиенте\nПроцедура ОбработатьОтвет()\n\t\n\tСобытиеОбрабатывается = Ложь;\n\t\n\tЕсли ПолученСигналОшибки Тогда \n\t\tПолученСигналОшибки = Ложь;\n\t\t#Если Не ВебКлиент Тогда\t\t\n\t\t\tСигнал();\n\t\t#КонецЕсли\n\tКонецЕсли;\t\n\t\n\tЕсли ОтложенныеДействияФормы.ЗакрытьФормы Тогда \n\t\tВладелецФормы.Закрыть();\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ОтложенныеДействияФормы.ОчиститьОперацию Тогда \n\t\tОбработатьОчисткуОперации();\n\tКонецЕсли;\n\t\t\n\tЕсли ОтложенныеДействияФормы.ОчиститьВсеФормы Тогда \n\t\tОбработатьОчисткуВсехФорм();\n\tКонецЕсли;\n\n\tЕсли ОтложенныеДействияФормы_ФормыКОткрытию.Количество() > 0 Тогда \n\t\tОткрытьПолученныеФормы();\n\tКонецЕсли;\n\t\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьСледующуюОперацию Тогда\n\t\tОткрытьФормуСледующейОперации();\n\tКонецЕсли;\n\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьДинамическуюФорму Тогда \n\t\tОткрытьДинамическуюФорму();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработатьОчисткуОперации()\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, ОтложенныеДействияФормы.ОперацияДляОчистки) Тогда \n\t\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОчиститьОперацию = Ложь;\n\tОтложенныеДействияФормы.ОперацияДляОчистки = \"\";\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработатьОчисткуВсехФорм()\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОчиститьВсеФормы = Ложь;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция НайтиОткрытуюФорму(ИмяФормы)\n\t\n\tНайденнаяФорма = Неопределено;\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\tЕсли ВложеннаяФорма.Заголовок = ИмяФормы Тогда \n\t\t\tНайденнаяФорма = ВложеннаяФорма;\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат(НайденнаяФорма);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ОткрытьПолученныеФормы()\n\t\n\tДля Каждого Полученнаяформа Из ОтложенныеДействияФормы_ФормыКОткрытию Цикл \n\t\t\n\t\tФормаСтраницы = НайтиОткрытуюФорму(Полученнаяформа.Имя);\n\t\t\n\t\tЕсли ФормаСтраницы = Неопределено Тогда \n\t\t\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\t\tПараметрыФормы = ПараметрыОткрытияФормыОперации(Полученнаяформа.Имя, Полученнаяформа.Операция, Полученнаяформа.Страница, Полученнаяформа.Строка);\n\t\t\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы_ФормыКОткрытию.Очистить();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьФормуСледующейОперации()\n\t\n\tИмяСтраницы = ОтложенныеДействияФормы.СледующаяОперация + \"/\" + Формат(ОтложенныеДействияФормы.СледующаяСтраница, \"ЧН=0; ЧГ=\");\n\t\n\tФормаСтраницы = НайтиОткрытуюФорму(ИмяСтраницы);\n\t\n\tЕсли ФормаСтраницы <> Неопределено Тогда\n\t\t\n\t\tФормаСтраницы.Активизировать();\n\t\tФормаСтраницы.ВключитьВидимостьИнфоКеш();\n\t\tФормаСтраницы.ОбновитьСостояние();\n\t\t\n\tИначе\n\t\t\n\t\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\tПараметрыФормы = ПараметрыОткрытияФормыОперации(ИмяСтраницы, ОтложенныеДействияФормы.СледующаяОперация, ОтложенныеДействияФормы.СледующаяСтраница);\n\t\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\t\n\tКонецЕсли;\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Ложь;\n\tОтложенныеДействияФормы.СледующаяОперация = \"\";\n\tОтложенныеДействияФормы.СледующаяСтраница = 0;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьДинамическуюФорму()\n\t\n\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\tПараметрыФормы = ПараметрыОткрытияФормыОперации(Строка(Новый УникальныйИдентификатор), ОтложенныеДействияФормы.ДинамическаяОперация, 0, ОтложенныеДействияФормы.ДинамическаяФорма);\n\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\n\tОтложенныеДействияФормы.ОткрытьДинамическуюФорму = Ложь;\n\tОтложенныеДействияФормы.ДинамическаяФорма\t\t= \"\";\n\tОтложенныеДействияФормы.ДинамическаяОперация\t= \"\";\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработкаСобытий\n\n&НаСервере\nФункция ОбработатьСобытие(Имя, Элемент, СтруктураПараметров, ФормаОбновлена = Ложь)\n\t\n\tЕсли СобытиеОбрабатывается Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\tСобытиеОбрабатывается = Истина;\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tСобытиеОбработано = Ложь;\n\tДля Каждого Событие Из ТаблицаСобытий Цикл \n\t\tЕсли Имя = Событие.ИмяСобытия И Элемент = Событие.ЭлементСобытия Тогда \n\t\t\t\n\t\t\tНаименованиеСобытия = СтрШаблон(\"%1 - %2\", Событие.ИмяСобытия, Событие.ЭлементСобытия);\n\t\t\tДобавитьСобытиеВЖурналОтладки(ЭтотОбъект, \"Событие\", НаименованиеСобытия);\n\t\t\t\n\t\t\tСобытиеОбработано = Истина;\n\t\t\t\n\t\t\tЧтениеХМЛ = Новый ЧтениеXML;\n\t\t\tЧтениеХМЛ.УстановитьСтроку(Событие.ОбработкаСобытия);\n\t\t\tТипСобытие = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsEvent\");\n\t\t\tСобытие = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ, ТипСобытие);\n\n\t\t\tПоследовательностьЭлементов = Событие.Последовательность();\n\t\t\tОбработатьПоследовательностьСобытия(ПоследовательностьЭлементов, СтруктураПараметров, ФормаОбновлена);\n\t\t\t\n\t\t\tПрервать;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\t\n\t\n\tВозврат СобытиеОбработано;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ОбработатьПоследовательностьСобытия(ПоследовательностьЭлементов, СтруктураПараметровТСД, ФормаОбновлена = Ложь)\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tЭлементДействия = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Action\" Тогда \n\t\t\t\n\t\t\tВыполнитьДействие(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Condition\" Тогда \n\t\t\t\n\t\t\tЕсли ПроверитьУсловие(ЭлементДействия, СтруктураПараметровТСД) Тогда \n\t\t\t\tОбработатьПоследовательностьСобытия(ЭлементДействия.Последовательность(), СтруктураПараметровТСД, ФормаОбновлена);\n\t\t\t\tПрервать;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип элемента события: %1\", ТипЭлемента);\n\t\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьСледующуюОперацию Тогда \n\t\tЕсли Заголовок = ОтложенныеДействияФормы.СледующаяОперация + \"/\" + Формат(ОтложенныеДействияФормы.СледующаяСтраница, \"ЧН=0; ЧГ=\") Тогда \n\t\t\t\n\t\t\tЗаполнитьРеквизитыФормыПараметрами();\n\t\t\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Ложь;\n\t\t\tОтложенныеДействияФормы.СледующаяОперация = \"\";\n\t\t\tОтложенныеДействияФормы.СледующаяСтраница = 0;\n\t\t\tФормаОбновлена = Истина;\n\t\t\t\n\t\tКонецЕсли;\t\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ПроверитьУсловие(Условие, СтруктураПараметров)\n\t\n\tРезультат = Ложь;\n\t\n\tЛевоеЗначение = ЗаполнитьШаблонПараметрами(Условие.LValue, СтруктураПараметров);\n\tПравоеЗначение = ЗаполнитьШаблонПараметрами(Условие.RValue, СтруктураПараметров);\n\t\n\tТипЗначения = НРег(Условие.TypeValue);\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tЕсли ТипЗначения = \"string\" Тогда\n\t\t\n\t\tЕсли ЛевоеЗначение = \"null\" Тогда \n\t\t\tЛевоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\t\tЕсли ПравоеЗначение = \"null\" Тогда \n\t\t\tПравоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТипЗначения = \"int\" ИЛИ ТипЗначения = \"float\" Тогда\n\t\t\n\t\tЛевоеЗначение = ТипЧисло.ПривестиЗначение(ЛевоеЗначение);\n\t\tПравоеЗначение = ТипЧисло.ПривестиЗначение(ПравоеЗначение);\n\t\t\n\tИначеЕсли ТипЗначения = \"date\" Тогда \n\t\t\n\t\tЛевоеЗначение = ПривестиСтрокуКДате(ЛевоеЗначение);\n\t\tПравоеЗначение = ПривестиСтрокуКДате(ПравоеЗначение);\n\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип значения: %1\", ТипЗначения);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли Условие.Expression = \"==\" Тогда \n\t\tВозврат ЛевоеЗначение = ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"!=\" Тогда \n\t\tВозврат ЛевоеЗначение <> ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \">\" Тогда \n\t\tВозврат ЛевоеЗначение > ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \">=\" Тогда \n\t\tВозврат ЛевоеЗначение >= ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"<\" Тогда \n\t\tВозврат ЛевоеЗначение < ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"<=\" Тогда \n\t\tВозврат ЛевоеЗначение <= ПравоеЗначение;\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип сравнения: %1\", Условие.Expression);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ВыполнитьДействие(ЭлементДействия, СтруктураПараметровТСД)\n\t\n\tТипДействия = НРег(ЭлементДействия.Type);\n\tЕсли ТипДействия = \"setvalue\" Тогда \n\t\tУстановитьЗначение(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"addvalue\" Тогда \n\t\tДобавитьЗначение(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"nextstep\" Тогда \n\t\tСледующаяСтраница(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"deletoperationforms\" Тогда \n\t\tОчиститьОперацию(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"eraseoperationform\" Тогда \n\t\tОтложенныеДействияФормы.ОчиститьВсеФормы = Истина;\n\t\t\n\tИначеЕсли ТипДействия = \"playsound\" Тогда \n\t\tПолученСигналОшибки = Истина;\n\t\t\n\tИначеЕсли ТипДействия = \"getnewdata\" Тогда \n\t\tПолучитьДанные(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"callwebservice\" Тогда \n\t\tПолучитьФормы(СтруктураПараметровТСД); \n\t\t\n\tИначеЕсли ТипДействия = \"getdynamicform\" Тогда \n\t\tПолучитьДинамическуюФорму(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"exit\" Тогда \n\t\tВызватьЗавершение(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"changelanguage\" Тогда \n\t\tИзменитьЯзык(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип действия: %1\", ТипДействия);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура УстановитьЗначение(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tсткПараметров.Вставить(Действие.ItemName, Значение);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьЗначение(Действие, СтруктураПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, СтруктураПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tЕсли Не СтруктураПараметров.Свойство(Действие.ItemName) Тогда \n\t\t\n\t\tСтруктураПараметров.Вставить(Действие.ItemName, Значение);\n\t\tВозврат;\n\t\t\n\tКонецЕсли;\n\t\n\tЛевоеЗначение = СтруктураПараметров[Действие.ItemName];\n\tПравоеЗначение = Значение;\n\t\n\tТипЗначения = НРег(Действие.TypeValue);\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tЕсли ТипЗначения = \"string\" Тогда \n\t\t\n\t\tЕсли ЛевоеЗначение = \"null\" Тогда \n\t\t\tЛевоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\t\tЕсли ПравоеЗначение = \"null\" Тогда \n\t\t\tПравоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТипЗначения = \"int\" ИЛИ ТипЗначения = \"float\" Тогда \n\t\t\n\t\tЛевоеЗначение = ТипЧисло.ПривестиЗначение(ЛевоеЗначение);\n\t\tПравоеЗначение = ТипЧисло.ПривестиЗначение(ПравоеЗначение);\n\t\t\n\tИначеЕсли ТипЗначения = \"date\" Тогда\n\t\t\n\t\tЛевоеЗначение = ПривестиСтрокуКДате(ЛевоеЗначение);\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип значения: %1\", ТипЗначения);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tСтруктураПараметров.Вставить(Действие.ItemName, ЛевоеЗначение + ПравоеЗначение);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура СледующаяСтраница(Действие, сткПараметров)\n\t\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Истина;\n\tЕсли Действие.Template Тогда \n\t\tОтложенныеДействияФормы.СледующаяОперация = ЗаполнитьШаблонПараметрами(Действие.ItemName, сткПараметров);\n\t\tОтложенныеДействияФормы.СледующаяСтраница = ТипЧисло.ПривестиЗначение(ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров));\n\tИначе\n\t\tОтложенныеДействияФормы.СледующаяОперация = Действие.ItemName;\n\t\tОтложенныеДействияФормы.СледующаяСтраница = ТипЧисло.ПривестиЗначение(Действие.Text);\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ОчиститьОперацию(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tОтложенныеДействияФормы.ОчиститьОперацию\t= Истина;\n\tОтложенныеДействияФормы.ОперацияДляОчистки\t= Значение;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьДанные(СтруктураПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\txdtoПараметрыТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsValuesForm\");\n\txdtoПараметрТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsItem\");\n\txdtoПараметры = ФабрикаXDTO.Создать(xdtoПараметрыТип);\n\t\t\n\tДля Каждого текЭлемент Из СтруктураПараметров Цикл\n\t\txdtoПараметр = ФабрикаXDTO.Создать(xdtoПараметрТип);\n\t\n\t\txdtoПараметр.Name = текЭлемент.Ключ;\n\t\txdtoПараметр.Text = текЭлемент.Значение;\n\t\txdtoПараметры.Item.Добавить(xdtoПараметр);\n\tКонецЦикла;\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, xdtoПараметры, Строка(Новый УникальныйИдентификатор));\n\tValuesForm = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetData\", ПараметрыМетода);\n\n\tСтруктураПараметров = Новый Структура;\n\tДля Каждого Значение Из ValuesForm.Item Цикл \n\t\tСтруктураПараметров.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьФормы(СтруктураПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Истина);\n\tФормы = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetForms\", ПараметрыМетода);\n\n\tСтруктураПараметров = Новый Структура;\n\tДля Каждого Значение Из Формы.ValuesForm.Item Цикл \n\t\tСтруктураПараметров.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Истина;\n\tОтложенныеДействияФормы.СледующаяОперация = Формы.StartOperation;\n\tОтложенныеДействияФормы.СледующаяСтраница = Формы.StartStep;\n\t\n\tДля Каждого ПолученнаяОперация Из Формы.Operation Цикл \n\t\tДля Каждого ПолученнаяФорма Из ПолученнаяОперация.Form Цикл \n\t\t\t\n\t\t\tНазваниеФормы = ПолученнаяОперация.Name + \"/\" + Формат(ПолученнаяФорма.Number, \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tЗаписьXML = Новый ЗаписьXML;\n\t\t\tЗаписьXML.УстановитьСтроку();\n\t\t\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ПолученнаяФорма);\n\t\t\tСтрока = ЗаписьXML.Закрыть();\n\t\t\t\n\t\t\tНоваяФорма = ОтложенныеДействияФормы_ФормыКОткрытию.Добавить();\n\t\t\tНоваяФорма.Имя = НазваниеФормы;\n\t\t\tНоваяФорма.Строка = Строка;\n\t\t\tНоваяФорма.Операция = ПолученнаяОперация.Name;\n\t\t\tНоваяФорма.Страница = ПолученнаяФорма.Number;\n\t\t\t\n\t\tКонецЦикла;\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьДинамическуюФорму(сткПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\txdtoПараметрыТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsValuesForm\");\n\txdtoПараметрТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsItem\");\n\txdtoПараметры = ФабрикаXDTO.Создать(xdtoПараметрыТип);\n\t\t\n\tДля Каждого текЭлемент Из сткПараметров Цикл\n\t\txdtoПараметр = ФабрикаXDTO.Создать(xdtoПараметрТип);\n\t\n\t\txdtoПараметр.Name = текЭлемент.Ключ;\n\t\txdtoПараметр.Text = текЭлемент.Значение;\n\t\txdtoПараметры.Item.Добавить(xdtoПараметр);\n\tКонецЦикла;\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, xdtoПараметры);\n\tФорма = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetDynamicForm\", ПараметрыМетода);\n\n\tЗаписьXML = Новый ЗаписьXML;\n\tЗаписьXML.УстановитьСтроку();\n\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Форма);\n\tКодДинамическойФормы = ЗаписьXML.Закрыть();\n\t\n\tОтложенныеДействияФормы.ОткрытьДинамическуюФорму = Истина;\n\tОтложенныеДействияФормы.ДинамическаяФорма = КодДинамическойФормы;\n\tОтложенныеДействияФормы.ДинамическаяОперация = сткПараметров.ДинамическаяФорма;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ВызватьЗавершение(сткПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Ложь);\n\tОбработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"StatusTSD\", ПараметрыМетода);\n\tОтложенныеДействияФормы.ЗакрытьФормы = Истина;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ИзменитьЯзык(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tПараметрыСеанса.Язык = Значение;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область КонвертацияЗначений\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ПривестиСтрокуКДате(ДатаСтрокой)\n\t\n\tПопытка\n\t\tРезультат = Дата(Сред(ДатаСтрокой, 7, 4) + Сред(ДатаСтрокой, 4, 2) + Лев(ДатаСтрокой, 2));\n\tИсключение\n\t\tРезультат = '00010101';\n\tКонецПопытки;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n// BSLLS:MagicNumber-off\n// Без кодов кнопок эту функцию не написать, подавляем\n&НаСервере\nФункция КлавишаПоКоду(КодКнопки)\t\n\t\n\tКлавишиПоКоду = Новый Соответствие;\n\tКлавишиПоКоду.Вставить(8 , Клавиша.BackSpace);\n\tКлавишиПоКоду.Вставить(19 , Клавиша.Break);\n\t\n\tКлавишиПоКоду.Вставить(48 , Клавиша._0);\n\tКлавишиПоКоду.Вставить(49 , Клавиша._1);\n\tКлавишиПоКоду.Вставить(50 , Клавиша._2);\n\tКлавишиПоКоду.Вставить(51 , Клавиша._3);\n\tКлавишиПоКоду.Вставить(52 , Клавиша._4);\n\tКлавишиПоКоду.Вставить(53 , Клавиша._5);\n\tКлавишиПоКоду.Вставить(54 , Клавиша._6);\n\tКлавишиПоКоду.Вставить(55 , Клавиша._7);\n\tКлавишиПоКоду.Вставить(56 , Клавиша._8);\n\tКлавишиПоКоду.Вставить(57 , Клавиша._9);\n\t\n\tКлавишиПоКоду.Вставить(112, Клавиша.F1);\n\tКлавишиПоКоду.Вставить(113, Клавиша.F2);\n\tКлавишиПоКоду.Вставить(114, Клавиша.F3);\n\tКлавишиПоКоду.Вставить(115, Клавиша.F4);\n\tКлавишиПоКоду.Вставить(116, Клавиша.F5);\n\tКлавишиПоКоду.Вставить(117, Клавиша.F6);\n\tКлавишиПоКоду.Вставить(118, Клавиша.F7);\n\tКлавишиПоКоду.Вставить(119, Клавиша.F8);\n\tКлавишиПоКоду.Вставить(120, Клавиша.F9);\n\tКлавишиПоКоду.Вставить(121, Клавиша.F10);\n\tКлавишиПоКоду.Вставить(122, Клавиша.F11);\n\tКлавишиПоКоду.Вставить(123, Клавиша.F12);\n\t\n\tКлавишиПоКоду.Вставить(65 , Клавиша.A);\n\tКлавишиПоКоду.Вставить(66 , Клавиша.B);\n\tКлавишиПоКоду.Вставить(67 , Клавиша.C);\n\tКлавишиПоКоду.Вставить(68 , Клавиша.D);\n\tКлавишиПоКоду.Вставить(69 , Клавиша.E);\n\tКлавишиПоКоду.Вставить(70 , Клавиша.F);\n\tКлавишиПоКоду.Вставить(71 , Клавиша.G);\n\tКлавишиПоКоду.Вставить(72 , Клавиша.H);\n\tКлавишиПоКоду.Вставить(73 , Клавиша.I);\n\tКлавишиПоКоду.Вставить(74 , Клавиша.J);\n\tКлавишиПоКоду.Вставить(75 , Клавиша.K);\n\tКлавишиПоКоду.Вставить(76 , Клавиша.L);\n\tКлавишиПоКоду.Вставить(77 , Клавиша.M);\n\tКлавишиПоКоду.Вставить(78 , Клавиша.N);\n\tКлавишиПоКоду.Вставить(79 , Клавиша.O);\n\tКлавишиПоКоду.Вставить(80 , Клавиша.P);\n\tКлавишиПоКоду.Вставить(81 , Клавиша.Q);\n\tКлавишиПоКоду.Вставить(82 , Клавиша.R);\n\tКлавишиПоКоду.Вставить(83 , Клавиша.S);\n\tКлавишиПоКоду.Вставить(84 , Клавиша.T);\n\tКлавишиПоКоду.Вставить(85 , Клавиша.U);\n\tКлавишиПоКоду.Вставить(86 , Клавиша.V);\n\tКлавишиПоКоду.Вставить(87 , Клавиша.W);\n\tКлавишиПоКоду.Вставить(88 , Клавиша.X);\n\tКлавишиПоКоду.Вставить(89 , Клавиша.Y);\n\tКлавишиПоКоду.Вставить(90 , Клавиша.Z);\n\t\n\tКлавишиПоКоду.Вставить(96 , Клавиша.Num0);\n\tКлавишиПоКоду.Вставить(97 , Клавиша.Num1);\n\tКлавишиПоКоду.Вставить(98 , Клавиша.Num2);\n\tКлавишиПоКоду.Вставить(99 , Клавиша.Num3);\n\tКлавишиПоКоду.Вставить(100, Клавиша.Num4);\n\tКлавишиПоКоду.Вставить(101, Клавиша.Num5);\n\tКлавишиПоКоду.Вставить(102, Клавиша.Num6);\n\tКлавишиПоКоду.Вставить(103, Клавиша.Num7);\n\tКлавишиПоКоду.Вставить(104, Клавиша.Num8);\n\tКлавишиПоКоду.Вставить(105, Клавиша.Num9);\n\tКлавишиПоКоду.Вставить(106, Клавиша.NumMultiply);\n\tКлавишиПоКоду.Вставить(107, Клавиша.NumAdd);\n\tКлавишиПоКоду.Вставить(109, Клавиша.NumSubtract);\n\tКлавишиПоКоду.Вставить(110, Клавиша.NumDecimal);\n\tКлавишиПоКоду.Вставить(111, Клавиша.NumDivide);\n\t\t\n\tВозврат(КлавишиПоКоду[КодКнопки]);\n\t\nКонецФункции\n// BSLLS:MagicNumber-on\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ЦветИзHEXСтроки(ЦветСтрокой)\n\t\n\tАльфаКанал = Лев(ЦветСтрокой, 2);\n\tКрасный = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 3, 2));\n\tЗеленый = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 5, 2));\n\tСиний = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 7, 2));\n\t\n\t// Здесь мы должны брать оформление не из стиля, а из полученного пакета,\n\t// т.к. рендеринг форм должен совпадать с ТСД.\n\t// BSLLS:StyleElementConstructors-off\n\tРезультат = Новый Цвет(Красный, Зеленый, Синий);\n\t// BSLLS:StyleElementConstructors-on\n\t\n\tВозврат Результат;\n\t\nКонецФункции // ПолучитьЦветПоСтроке()\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ЧислоИзСтрокиHEX(СтрокаHEX)\n\t\n\tБазаИсчисления = 16;\n\t\n\tРезультат = 0;\n\tДля Сч = 1 По СтрДлина(СтрокаHEX) Цикл \n\t\tЧисло = ПреобразоватьЦифруHEXвDEC(Сред(СтрокаHEX, Сч, 1));\n\t\tДля Степень = 1 По СтрДлина(СтрокаHEX) - Сч Цикл \n\t\t\tЧисло = Число * БазаИсчисления;\n\t\tКонецЦикла;\n\t\tРезультат = Результат + Число;\n\tКонецЦикла;\n\t\n\tВозврат Результат;\n\t\nКонецФункции // ПолучитьЧислоПоСтрокеHEX()\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ПреобразоватьЦифруHEXвDEC(Цифра)\n\t\n\tЕсли Цифра = \"1\" Тогда \n\t\tВозврат 1;\n\tИначеЕсли Цифра = \"2\" Тогда \n\t\tВозврат 2;\n\tИначеЕсли Цифра = \"3\" Тогда \n\t\tВозврат 3;\n\tИначеЕсли Цифра = \"4\" Тогда \n\t\tВозврат 4;\n\tИначеЕсли Цифра = \"5\" Тогда \n\t\tВозврат 5;\n\tИначеЕсли Цифра = \"6\" Тогда \n\t\tВозврат 6;\n\tИначеЕсли Цифра = \"7\" Тогда \n\t\tВозврат 7;\n\tИначеЕсли Цифра = \"8\" Тогда \n\t\tВозврат 8;\n\tИначеЕсли Цифра = \"9\" Тогда \n\t\tВозврат 9;\n\tИначеЕсли Цифра = \"A\" Тогда \n\t\tВозврат 10;\n\tИначеЕсли Цифра = \"B\" Тогда \n\t\tВозврат 11;\n\tИначеЕсли Цифра = \"C\" Тогда \n\t\tВозврат 12;\n\tИначеЕсли Цифра = \"D\" Тогда \n\t\tВозврат 13;\n\tИначеЕсли Цифра = \"E\" Тогда \n\t\tВозврат 14;\n\tИначеЕсли Цифра = \"F\" Тогда \n\t\tВозврат 15;\n\tИначе\t\n\t\tВозврат 0;\n КонецЕсли;\n\t\t\nКонецФункции // ПреобразоватьЦифруHEXвDEC()\n\n&НаСервере\nФункция ЗаполнитьШаблонПараметрами(Знач Значение, СтруктураПараметров)\n\t\n\tДля Каждого текЭлемент Из СтруктураПараметров Цикл \n\t\tЗначение = СтрЗаменить(Значение, \"[##\" + текЭлемент.Ключ + \"##]\", текЭлемент.Значение);\n\tКонецЦикла;\n\t\n\tВозврат Значение;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область РежимОтладки\n\n&НаКлиенте\nПроцедура ПриИзмененииРежимаОтладки()\n\t\n\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t \t\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура НастроитьФорму_РежимОтладки(ЭтотОбъект)\n\t\n\tЭтотОбъект.Элементы.ЖурналОтладкиПереключитьРежимОтладки.Пометка = ЭтотОбъект.ЖурналОтладкиВключен;\n\t\n\tЭтотОбъект.Элементы.ФормаПереключитьОтображениеОтладки.Пометка = ЭтотОбъект.ЖурналОтладкиОтображается;\n\tЭтотОбъект.Элементы.ГруппаЖурналОтладки.Видимость = ЭтотОбъект.ЖурналОтладкиОтображается;\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиОтображается Тогда\n\t\tЭтотОбъект.Ширина = 100;\n\tИначе\n\t\tЭтотОбъект.Ширина = 50;\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Подключаемый_ОбновитьРежимОтладки() Экспорт\n\t\n\tЕсли Не ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПрочитатьПараметрыОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ПрочитатьПараметрыОтладки(ЭтотОбъект)\n\t\n\tКонтекстЭмулятора = ЭтотОбъект.КонтекстЭмулятора;\n\t\n\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\tЕсли ПараметрыОтладки = Неопределено Тогда\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект); // Запишем параметры по умолчанию\n\t\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t \n\tКонецЕсли;\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиОтображается <> ПараметрыОтладки.ЖурналОтладкиОтображается Тогда\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиОтображается = ПараметрыОтладки.ЖурналОтладкиОтображается;\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли ПараметрыОтладки.ОтладкаВключена <> ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\tЭтотОбъект.ЖурналОтладкиВключен = ПараметрыОтладки.ОтладкаВключена;\n\tКонецЕсли;\n\t\n\tЕсли ПараметрыОтладки.ОтладкаВключена И (ЭтотОбъект.ЖурналОтладкиВерсия <> ПараметрыОтладки.Версия) Тогда\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиВерсия = ПараметрыОтладки.Версия;\n\t\tДесериализоватьЖурналОтладки(ЭтотОбъект, ПараметрыОтладки.Журнал);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ЗаписатьПараметрыОтладки(ЭтотОбъект)\n\t\n\tПараметрыОтладки = Новый Структура;\n\tПараметрыОтладки.Вставить(\"ОтладкаВключена\", ЭтотОбъект.ЖурналОтладкиВключен);\n\tПараметрыОтладки.Вставить(\"ЖурналОтладкиОтображается\", ЭтотОбъект.ЖурналОтладкиОтображается);\n\tПараметрыОтладки.Вставить(\"Журнал\", СериализоватьЖурналОтладки(ЭтотОбъект));\n\tПараметрыОтладки.Вставить(\"Версия\", ЭтотОбъект.ЖурналОтладкиВерсия);\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыОтладки, ЭтотОбъект.КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура ДобавитьСобытиеВЖурналОтладки(ЭтотОбъект, Тип, Наименование, МассивПараметров = Неопределено, ИзмененныеПараметры = Неопределено)\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\t\n\t\tНоваяЗапись = ЭтотОбъект.ЖурналОтладки.Вставить(0);\n\t\tНоваяЗапись.Время = ТекущаяДатаСеанса();\n\t\tНоваяЗапись.Тип = Тип;\n\t\tНоваяЗапись.Наименование = Наименование;\n\t\tНоваяЗапись.ИзмененныеПараметры = ИзмененныеПараметры;\n\t\t\n\t\tКоличествоПараметров = 0;\n\t\tЕсли МассивПараметров <> Неопределено Тогда\n\t\t\tКоличествоПараметров = МассивПараметров.Количество();\n\t\tКонецЕсли;\n\t\tДля Сч = 1 По КоличествоПараметров Цикл\n\t\t\tНоваяЗапись[\"Параметр\" + Сч] = МассивПараметров[Сч - 1];\n\t\tКонецЦикла;\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиВерсия = ЭтотОбъект.ЖурналОтладкиВерсия + 1;\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nФункция СериализоватьЖурналОтладки(ЭтотОбъект)\n\t\n\tСписокРеквизитов = \"Время, Длительность, Тип, Наименование, Параметр1, Параметр2, Параметр3, ИзмененныеПараметры\";\n\tРезультат = Новый Массив;\n\t\n\tДля Каждого СтрокаЖурнала Из ЭтотОбъект.ЖурналОтладки Цикл\n\t\t\n\t\tСтруктураСтроки = Новый Структура(СписокРеквизитов);\n\t\tЗаполнитьЗначенияСвойств(СтруктураСтроки, СтрокаЖурнала);\n\t\tРезультат.Добавить(СтруктураСтроки);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ДесериализоватьЖурналОтладки(ЭтотОбъект, СохраненныйЖурналОтладки)\n\t\n\tЭтотОбъект.ЖурналОтладки.Очистить();\n\t\n\tДля Каждого СтрокаЖурнала Из СохраненныйЖурналОтладки Цикл\n\t\tЗаполнитьЗначенияСвойств(ЭтотОбъект.ЖурналОтладки.Добавить(), СтрокаЖурнала);\n\tКонецЦикла;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n&НаСервере\nПроцедура ПодготовитьРеквизиты(ПоследовательностьЭлементов, МассивРеквизитов)\n\t\n\tТип_DateTime = Новый ОписаниеТипов(\"Дата\", , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));\n\tТип_int = Новый ОписаниеТипов(\"Число\", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный));\n\tТип_float = Новый ОписаниеТипов(\"Число\", Новый КвалификаторыЧисла(15, 6, ДопустимыйЗнак.Неотрицательный));\n\tТип_Date = Новый ОписаниеТипов(\"Дата\", , Новый КвалификаторыДаты(ЧастиДаты.Дата));\n\tТип_string = Новый ОписаниеТипов(\"Строка\");\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Label\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Новый ОписаниеТипов(\"Строка\"));\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tЕсли текЭлемент.Template Тогда \n\t\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\t\tНоваяСтрока.Значение = текЭлемент.Value;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"DateTime\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_DateTime);\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\tНоваяСтрока.Значение = \"[##\" + текЭлемент.Name + \"##]\";\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TextBox\" Тогда \n\t\t\tЕсли текЭлемент.TypeValue = \"int\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_int);\n\t\t\tИначеЕсли текЭлемент.TypeValue = \"float\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_float);\n\t\t\tИначеЕсли текЭлемент.TypeValue = \"Date\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_Date);\n\t\t\tИначе\t\n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_string);\n\t\t\tКонецЕсли;\t\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\tНоваяСтрока.Значение = \"[##\" + текЭлемент.Name + \"##]\";\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TableItems\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Таблица\" + текЭлемент.Name, Новый ОписаниеТипов(\"ТаблицаЗначений\"));\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tСч1 = 1;\n\t\t\tДля Каждого текКолонка Из текЭлемент.Columns.Column Цикл \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Колонка\" + Сч1, Тип_string, \"Таблица\" + текЭлемент.Name, текКолонка.Name);\n\t\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\t\n\t\t\t\tСч1 = Сч1 + 1;\n\t\t\tКонецЦикла;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Line\" Тогда \n\t\t\tПодготовитьРеквизиты(текЭлемент.Последовательность(), МассивРеквизитов);\n\t\t\t\n\t\tИначе\n\t\t\tПродолжить;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ЗаполнитьРеквизитыФормыПараметрами()\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tЕсли СтруктураПараметров = Неопределено Тогда \n\t\tСтруктураПараметров = Новый Структура;\n\tКонецЕсли;\n\t\n\tДля Каждого Реквизит Из ТаблицаЗначенийРеквизитов Цикл\n\t\t\n\t\tЗначение = ЗаполнитьШаблонПараметрами(Реквизит.Значение, СтруктураПараметров);\n\t\t\n\t\tЕсли Реквизит.Кнопка Тогда \n\t\t\t\n\t\t\tЭлементы[Реквизит.ИмяРеквизита].Заголовок = Значение;\n\t\t\tПродолжить;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\t\n\t\tЕсли ТипЗнч(ЭтотОбъект[Реквизит.ИмяРеквизита]) = Тип(\"Дата\") Тогда \n\t\t\t\n\t\t\tПопытка\n\t\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = Дата(Сред(Значение, 7, 4) + Сред(Значение, 4, 2) + Лев(Значение, 2));\n\t\t\tИсключение\t\n\t\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = '00010101';\n\t\t\tКонецПопытки;\n\t\t\t\n\t\tИначеЕсли ТипЗнч(ЭтотОбъект[Реквизит.ИмяРеквизита]) = Тип(\"Число\") Тогда \n\t\t\t\n\t\t\tОписаниеТипа = Новый ОписаниеТипов(\"Число\");\n\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = ОписаниеТипа.ПривестиЗначение(Значение);\n\t\t\t\n\t\tИначе\t\n\t\t\t\n\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = Значение;\n\t\t\t\n\t\t\tЭлементФормы = Элементы[Реквизит.ИмяРеквизита];\n\t\t\tЕсли ЭлементФормы.Вид = ВидПоляФормы.ПолеНадписи Тогда\n\t\t\t\tКоличествоСтрок = СтрРазделить(Значение, Символы.ПС, Истина).Количество();\n\t\t\t\tЭлементФормы.Высота = КоличествоСтрок;\n\t\t\t\tЭлементФормы.РастягиватьПоВертикали = Ложь;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСостояние() Экспорт\n\t\n\tАктивизировать();\n\t\n\tЗаполнитьРеквизитыФормыПараметрами();\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура АктивироватьЭлемент()\n\n\tЕсли ЗначениеЗаполнено(ОсновнойЭлемент) Тогда \n\t\tТекущийЭлемент = Элементы.Найти(ОсновнойЭлемент);\n\tИначе\n\t\tТекущийЭлемент = Элементы.ФормаВвестиШтрихкод;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция ПараметрыОткрытияФормыОперации(ИмяСтраницы, Операция, Страница, СтрокаXML = \"\")\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"НомерУстройства\", НомерУстройства);\n\tРезультат.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\t\t\n\tРезультат.Вставить(\"ИмяСтраницы\", ИмяСтраницы);\n\tРезультат.Вставить(\"Операция\", Операция);\n\tРезультат.Вставить(\"Страница\", Страница);\n\tЕсли Не ПустаяСтрока(СтрокаXML) Тогда\n\t\tРезультат.Вставить(\"СтрокаXML\", СтрокаXML);\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nФункция ПолноеИмяФормы(ИмяФормы)\n\t\n\tЕсли КонтекстЭмулятора.РежимВнешнейОбработки Тогда\n\t\tПрефиксМетаданных = \"ВнешняяОбработка\";\n\tИначе\n\t\tПрефиксМетаданных = \"Обработка\";\n\tКонецЕсли;\n\t\n\tРезультат = СтрШаблон(\"%1.ЭмуляторТСД.Форма.%2\", ПрефиксМетаданных, ИмяФормы);\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\ФормаПросмотрДанных\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\ФормаПросмотрДанных\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/ceb39267c6e5a861590035ceec23ba4fe159661c/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%94%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%5CForm.obj.bsl",
+ "size": 4912,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tНомерУстройства = Параметры.НомерУстройства;\n\t\n\tЗапрос = Новый Запрос;\n\tЗапрос.Текст = \"ВЫБРАТЬ\n\t |\tусТекущееДействиеПользователяТСД.Данные КАК Данные\n\t |ИЗ\n\t |\tРегистрСведений.усТекущееДействиеПользователяТСД КАК усТекущееДействиеПользователяТСД\n\t |ГДЕ\n\t |\tусТекущееДействиеПользователяТСД.НомерУстройства = &НомерУстройства\";\n\tЗапрос.УстановитьПараметр(\"НомерУстройства\", НомерУстройства);\n\tВыборка = Запрос.Выполнить().Выбрать();\n\t\n\tЕсли Выборка.Следующий() Тогда\n\t\t\n\t\tАдресХранилищаДанных = ПоместитьВоВременноеХранилище(Выборка.Данные.Получить(), Объект);\t\n\t\t\n\tКонецЕсли;\t\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаДанных);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ТолькоЗаполненныеПриИзменении(Элемент)\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаДанных);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗаполнитьПараметрыФормы(АдресХранилищаДанных)\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(АдресХранилищаДанных);\n\t\n\tПараметрыФормы.Очистить();\n\t\n\tДля Каждого Параметр Из СтруктураПараметров Цикл \n\t\tЕсли Не ТолькоЗаполненные ИЛИ ЗначениеЗаполнено(Параметр.Значение) Тогда\n\t\t\tНоваяСтрока = ПараметрыФормы.Добавить();\n\t\t\tНоваяСтрока.Ключ = Параметр.Ключ;\n\t\t\tНоваяСтрока.Значение = Параметр.Значение;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tПараметрыФормы.Сортировать(\"Ключ\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ДанныеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tДанныеСтроки = Элементы.ПараметрыФормы.ТекущиеДанные;\n\t\n\tЕсли ДанныеСтроки.Значение = \"ТаблицаЗначений\" Тогда\n\t\t\n\t\tПараметрыФормы = Новый Структура();\n\t\tПараметрыФормы.Вставить(\"НомерУстройства\", \tНомерУстройства);\n\t\tПараметрыФормы.Вставить(\"Ключ\", \t\t\tДанныеСтроки.Ключ);\n\t\t\n\t\tОткрытьФорму(\"РегистрСведений.усТекущееДействиеПользователяТСД.Форма.ФормаВыводаТаблиц\", ПараметрыФормы, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);\t\t\n\t\t\n\tИначе\n\t\t\n\t\tЗначениеДанных = ПрочитатьДанныеНаСервере(НомерУстройства, ДанныеСтроки.Ключ);\t\n\t\tПоказатьЗначение(Неопределено, ЗначениеДанных);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция ПрочитатьДанныеНаСервере(НомерУстройства, Ключ)\n\t\n\tтекЗапись = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьМенеджерЗаписи();\n\tтекЗапись.НомерУстройства = НомерУстройства;\n\tтекЗапись.Прочитать();\n\t\n\tПопытка\n\t\tВозврат текЗапись.Данные.Получить()[Ключ];\t\t\n\tИсключение\n\t\tВозврат Неопределено;\t\t\n\tКонецПопытки;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\ФормаПросмотрИзмененныхПараметров\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\ФормаПросмотрИзмененныхПараметров\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/ff3410141db686025fe21f44f915b7a16125f433/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2%5CForm.obj.bsl",
+ "size": 1833,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tМассивИзмененныхПараметров = ДесериализацияJSON(Параметры.ИзмененныеПараметры);\n\t\n\tДля Каждого Параметр Из МассивИзмененныхПараметров Цикл\n\t\t\n\t\tНоваяСтрока = ИзмененныеПараметры.Добавить();\n\t\tНоваяСтрока.Параметр = Параметр.Параметр;\n\t\tНоваяСтрока.Старое = Параметр.Старое;\n\t\tНоваяСтрока.Новое = Параметр.Новое;\n\t\t\n\tКонецЦикла;\n\t\n\tИзмененныеПараметры.Сортировать(\"Параметр\");\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервереБезКонтекста\nФункция ДесериализацияJSON(Знач СтрокаJSON, Знач СвойстваСДатой = Неопределено, СчитатьВСоответствие = Ложь)\n\t\n\tЧтениеJSON = Новый ЧтениеJSON;\n\tЧтениеJSON.УстановитьСтроку(СтрокаJSON);\n\tСчитанныйОбъект = ПрочитатьJSON(ЧтениеJSON, СчитатьВСоответствие, СвойстваСДатой);\n\t\n\tВозврат (СчитанныйОбъект);\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\ФормаПросмотрКода\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\ФормаПросмотрКода\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/d15bcb6bed28affa5c0186f40289cdf9dc099f31/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%9A%D0%BE%D0%B4%D0%B0%5CForm.obj.bsl",
+ "size": 518,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tТекст = Параметры.Текст;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\ФормаПросмотрПараметров\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\ФормаПросмотрПараметров\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/38b2d50ba02e91e93f0433f45a3d0d28a65c6807/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2%5CForm.obj.bsl",
+ "size": 1985,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tАдресХранилищаПараметров = Параметры.АдресХранилищаПараметров;\n\tЗаполнитьПараметрыФормы(АдресХранилищаПараметров);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ТолькоЗаполненныеПриИзменении(Элемент)\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаПараметров);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗаполнитьПараметрыФормы(АдресХранилищаПараметров)\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(АдресХранилищаПараметров);\n\t\n\tПараметрыФормы.Очистить();\n\t\n\tДля Каждого Параметр Из СтруктураПараметров Цикл \n\t\tЕсли Не ТолькоЗаполненные ИЛИ ЗначениеЗаполнено(Параметр.Значение) Тогда\n\t\t\tНоваяСтрока = ПараметрыФормы.Добавить();\n\t\t\tНоваяСтрока.Ключ = Параметр.Ключ;\n\t\t\tНоваяСтрока.Значение = Параметр.Значение;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tПараметрыФормы.Сортировать(\"Ключ\");\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598759\\Form\\ФормаСообщений\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598759\\Form\\ФормаСообщений\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/c0d319ba09c434734e5afef3679da32f49e0bb85/are_bsl%5Cunpack%5C726598759%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%A1%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9%5CForm.obj.bsl",
+ "size": 1011,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tЭлементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)\n\t\n\tЕсли ИмяСобытия = \"НовоеСообщениеСтатуса\" И Источник = \"ЭмуляторТСД\" Тогда\n\t\t\n\t\tЭлементы.ТекстСообщения.Заголовок = Параметр;\n\t\t\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\ExternalDataProcessor.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\ExternalDataProcessor.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/59e66388830ce92a9b981a85aeb50e956723331c/are_bsl%5Cunpack%5C726598761%5CExternalDataProcessor.obj.bsl",
+ "size": 44587,
+ "truncated": false,
+ "content": "#Область СлужебныйПрограммныйИнтерфейс\n\n#Область НастройкаИнтеграции\n\nФункция НоваяСтруктураНастроекИнтеграции() Экспорт\n\t\n\tНастройкиИнтеграции = Новый Структура();\n\t// Режим интеграции\n\tНастройкиИнтеграции.Вставить(\"Режим\");\n\t// Настройки режима \"Подключаемый модуль\"\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_Версия\");\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_Текст\");\n\tНастройкиИнтеграции.Вставить(\"ПодключаемыйМодуль_ОписаниеМетодов\");\n\t// Настройки режима \"Web-сервер\"\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_УРЛ\");\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_Логин\");\n\tНастройкиИнтеграции.Вставить(\"ВебСервер_Пароль\");\n\t// Дополнительные настройки\n\tНастройкиИнтеграции.Вставить(\"ПространствоИменXDTO\");\n\t\n\tВозврат(НастройкиИнтеграции);\n\t\nКонецФункции\n\nПроцедура АвтоопределениеНастроекИнтеграции(НастройкиИнтеграции) Экспорт\n\t\n\tСтандартныйМодуль = Метаданные.ОбщиеМодули.Найти(\"усТСДВебСервис\");\n\tЕсли СтандартныйМодуль <> Неопределено Тогда\n\t\tНастройкиИнтеграции.Режим = \"СтандартныйМодуль\";\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\";\n\tВерсияШаблона = ПодобратьВерсиюШаблона();\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия = ВерсияШаблона;\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = ШаблоныМодулей_ОписаниеМетодовМодуля(НастройкиИнтеграции.ПодключаемыйМодуль_Текст);\n\t\nКонецПроцедуры\n\nПроцедура ПослеВосстановленияСохраненныхНастроекИнтеграции(НастройкиИнтеграции) Экспорт\n\t\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\t// Нет настроек\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tВосстановитьНастройкиПодключаемогоМодуля(НастройкиИнтеграции);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\t// Нет настроек\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ШаблоныПодключаемыхМодулей\n\nФункция ШаблоныМодулей_ПолучитьСписокВерсий() Экспорт\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\tМассивВерсий = Новый Массив;\n\t\n\tМакеты = Метаданные().Макеты;\n\tДля Каждого Макет Из Макеты Цикл\n\t\tЕсли СтрНачинаетсяС(Макет.Имя, ПрефиксМакета) Тогда\n\t\t\tСтрокаВерсии = Сред(Макет.Имя, 1 + СтрДлина(ПрефиксМакета));\n\t\t\tСтрокаВерсии = СтрЗаменить(СтрокаВерсии, \"_\", \".\");\n\t\t\tМассивВерсий.Добавить(СтрокаВерсии);\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат (МассивВерсий);\n\t\nКонецФункции\n\nФункция ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона) Экспорт\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\t\n\tИмяМакетаШаблона = ПрефиксМакета + СтрЗаменить(ВерсияШаблона, \".\", \"_\");\n\t\n\tМакет = ПолучитьМакет(ИмяМакетаШаблона);\n\tТекстМодуля = Макет.ПолучитьТекст();\n\t\n\tВозврат (ТекстМодуля);\n\t\nКонецФункции\n\nФункция ШаблоныМодулей_ОписаниеМетодовМодуля(ТекстМодуля) Экспорт\n\t\n\tОписаниеПолейСтруктурыМетодов = \"ИмяМетода, КоличествоПараметров, ИмяПараметра1, ИмяПараметра2, ИмяПараметра3, ТелоМетода\";\n\tОписаниеМетодов = Новый Соответствие;\n\t\n\tМаркерНачалоФункции = \"ФУНКЦИЯ\";\n\tМаркерКонецФункции = \"КОНЕЦФУНКЦИИ\";\n\tМаркерВозврат = \"ВОЗВРАТ\";\n\tЗаменаВозврат = \"ВебСервис_Результат = \";\n\tДопСтрокаВозврат = \"Перейти ~ВЫХОД;\";\n\tМеткаВыходаИзФункции = \"~ВЫХОД:\";\n\t\n\tОписаниеМетода = Неопределено;\n\tСтрокиМетода = Неопределено;\n\t\n\tДля Каждого СтрокаКода Из СтрРазделить(ТекстМодуля, Символы.ПС) Цикл\n\t\t\n\t\tБуфер = СтрЗаменить(СтрокаКода, Символы.Таб, \" \");\n\t\tБуфер = СокрЛП(Буфер);\n\t\tБуфер = ВРег(Буфер);\n\t\t\n\t\tЕсли СтрНачинаетсяС(Буфер, МаркерНачалоФункции) Тогда\n\t\t\t\n\t\t\tОписаниеМетода = Новый Структура(ОписаниеПолейСтруктурыМетодов);\n\t\t\t\n\t\t\tБуфер = Сред(Буфер, СтрДлина(МаркерНачалоФункции) + 1);\n\t\t\tБуфер = СокрЛП(Буфер);\n\t\t\t\n\t\t\tЧастиСтроки = СтрРазделить(Буфер, \"()\");\n\t\t\tОписаниеМетода.ИмяМетода = ЧастиСтроки[0];\n\t\t\t\n\t\t\tПараметрыМетода = СтрРазделить(ЧастиСтроки[1], \",\", Ложь);\n\t\t\tОписаниеМетода.КоличествоПараметров = ПараметрыМетода.Количество();\n\t\t\tДля Сч = 1 По ОписаниеМетода.КоличествоПараметров Цикл\n\t\t\t\t\n\t\t\t\tИмяПараметра = СокрЛП(ПараметрыМетода[Сч - 1]);\n\t\t\t\tОписаниеМетода[\"ИмяПараметра\" + Сч] = ИмяПараметра;\n\t\t\t\t\n\t\t\tКонецЦикла;\n\t\t\t\n\t\t\tСтрокиМетода = Новый Массив;\n\t\t\t\n\t\tИначеЕсли СтрНачинаетсяС(Буфер, МаркерКонецФункции) Тогда\n\t\t\t\n\t\t\tСтрокиМетода.Добавить(МеткаВыходаИзФункции);\n\t\t\t\n\t\t\tОписаниеМетода.ТелоМетода = СтрСоединить(СтрокиМетода, Символы.ПС);\n\t\t\tОписаниеМетодов.Вставить(ОписаниеМетода.ИмяМетода, ОписаниеМетода);\n\t\t\t\n\t\t\tСтрокиМетода = Неопределено;\n\t\t\tОписаниеМетода = Неопределено;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tЕсли СтрокиМетода = Неопределено Тогда\n\t\t\t\tПродолжить;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\t\tБуфер = СтрЗаменить(СтрокаКода, Символы.Таб, \" \");\n\t\t\tБуфер = СокрЛП(Буфер);\n\t\t\tБуфер = ВРег(Буфер);\n\t\t\tЕсли СтрНачинаетсяС(Буфер, МаркерВозврат) Тогда\n\t\t\t\t\n\t\t\t\tБуфер = ЗаменаВозврат + Сред(Буфер, СтрДлина(МаркерВозврат) + 1);\n\t\t\t\tСтрокиМетода.Добавить(Буфер);\n\t\t\t\tСтрокиМетода.Добавить(ДопСтрокаВозврат);\n\t\t\t\t\n\t\t\tИначе\n\t\t\t\t\n\t\t\t\tСтрокиМетода.Добавить(СтрокаКода);\n\t\t\t\t\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат (СериализацияJSON(ОписаниеМетодов));\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ВызовВебСервиса\n\nФункция ПараметрыМетода(Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено) Экспорт\n\t\n\tРезультат = Новый Массив;\n\tЕсли Параметр1 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр1);\n\tКонецЕсли;\n\tЕсли Параметр2 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр2);\n\tКонецЕсли;\n\tЕсли Параметр3 <> Неопределено Тогда\n\t\tРезультат.Добавить(Параметр3);\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ВызватьМетодВебсервиса(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода) Экспорт\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЕсли ИмяМетода = \"GetData\" Тогда\n\t\tПараметрыДоВызова = СохранитьЗначенияПараметров(ПараметрыМетода[1]);\n\tКонецЕсли;\n\t\n\tНачало = ТекущаяУниверсальнаяДатаВМиллисекундах();\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\tРезультат = СтандартныйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tРезультат = ПодключаемыйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\tРезультат = ВебСервер_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода);\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\tДлительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;\n\t\n\tЕсли ИмяМетода = \"GetData\" Тогда\n\t\tПараметрыПослеВызова = СохранитьЗначенияПараметров(Результат);\n\t\tИзмененныеПараметры = ВычислитьИзмененныеПараметры(ПараметрыДоВызова, ПараметрыПослеВызова);\n\tИначе\n\t\tИзмененныеПараметры = Неопределено;\n\tКонецЕсли;\n\t\n\tЗаписатьВызовВЖурналОтладки(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода, Длительность, ИзмененныеПараметры);\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ФабрикаXDTO\n\nФункция ЛокальнаяФабрикаXDTO(НастройкиИнтеграции) Экспорт\n\t\n\t// Внимание! Здесь небольшое волшебство.\n\t// Почему то, если брать системную ФабрикаXDTO - платформа начинает ругаться на отсутствие\n\t// некоторых свойств объектов. Ранее для обхода этого глюка я рекомендовал править схему \n\t// пакета XDTO. Но после некоторого количества раскопок, удалось выяснить, что достаточно\n\t// создать собственную фабрику и загрузить в нее схемы из системной - и вуаля! Ругаться \n\t// перестает. Почему, зачем, что там внутри при этом происходит - науке это неизвестно.\n\t//\n\t// Но это работает только для чтения полученных данных. При записи же возникает обратная\n\t// ситуация - системная фабрика успешно все записывает, а вот наша повторно созданная -\n\t// начинает глючить. Поэтому кое-где используется локальная фабрика, созданная этой функцией, \n\t// а кое где - системная Фабрика XDTO.\n\t\n\tНаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML(НастройкиИнтеграции.ПространствоИменXDTO);\n\tФабрика = Новый ФабрикаXDTO(НаборСхемXML);\n\t\n\tВозврат(Фабрика);\n\t\nКонецФункции\n\n#КонецОбласти\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область НастройкаИнтеграции\n\nПроцедура ВосстановитьНастройкиПодключаемогоМодуля(НастройкиИнтеграции)\n\t\n\tВерсияШаблона = НастройкиИнтеграции.ПодключаемыйМодуль_Версия;\n\t\n\tЕсли ВерсияШаблона = \"РучнаяНастройка\" Тогда\n\t\t// Текст модуля уже находится в восстановленных настройках\n\t\t\n\tИначеЕсли ЗначениеЗаполнено(ВерсияШаблона) И ШаблоныМодулей_СуществуетШаблонДляВерсии(ВерсияШаблона) Тогда\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\t\t\n\tИначе\n\t\tВерсияШаблона = ПодобратьВерсиюШаблона();\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст = ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияШаблона);\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия = ВерсияШаблона;\n\t\t\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = ШаблоныМодулей_ОписаниеМетодовМодуля(НастройкиИнтеграции.ПодключаемыйМодуль_Текст);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ЖурналОтладки\n\nПроцедура ЗаписатьВызовВЖурналОтладки(КонтекстЭмулятора, ИмяМетода, ПараметрыМетода, Длительность, ИзмененныеПараметры = Неопределено)\n\t\n\tЕсли ИмяМетода = \"StatusTSD\" Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\tЕсли ПараметрыОтладки = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\tЕсли Не ПараметрыОтладки.ОтладкаВключена Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tСтруктураЗаписи = Новый Структура();\n\tСтруктураЗаписи.Вставить(\"Время\", \t\t\tТекущаяДатаСеанса());\n\tСтруктураЗаписи.Вставить(\"Длительность\", \tДлительность);\n\tСтруктураЗаписи.Вставить(\"Тип\", \t\t\t\"Вызов\");\n\tСтруктураЗаписи.Вставить(\"Наименование\", \tИмяМетода);\n\tДля Сч = 1 По 3 Цикл\n\t\tЕсли ПараметрыМетода.Количество() >= Сч Тогда\n\t\t\tСтруктураЗаписи.Вставить(\"Параметр\" + Сч, Строка(ПараметрыМетода[Сч - 1]));\n\t\tИначе\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\tСтруктураЗаписи.Вставить(\"ИзмененныеПараметры\", СериализацияJSON(ИзмененныеПараметры));\n\t\n\tПараметрыОтладки.Журнал.Вставить(0, СтруктураЗаписи);\n\tПараметрыОтладки.Версия = ПараметрыОтладки.Версия + 1;\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыОтладки, КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\nКонецПроцедуры\n\nФункция СохранитьЗначенияПараметров(Параметры)\n\t\n\tРезультат = Новый Структура;\n\tДля Каждого Значение Из Параметры.Item Цикл \n\t\tРезультат.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\nФункция ВычислитьИзмененныеПараметры(ИсходныеПараметры, НовыеПараметры)\n\t\n\tСоответствиеПараметров = Новый Соответствие;\n\t\n\tДля Каждого ИсходныйПараметр Из ИсходныеПараметры Цикл\n\t\t\n\t\tЗначения = Новый Структура(\"Параметр, Старое, Новое\", ИсходныйПараметр.Ключ, ИсходныйПараметр.Значение);\n\t\tСоответствиеПараметров.Вставить(ИсходныйПараметр.Ключ, Значения);\n\t\t\n\tКонецЦикла;\n\t\n\tДля Каждого НовыйПараметр Из НовыеПараметры Цикл\n\t\tЕсли СоответствиеПараметров[НовыйПараметр.Ключ] = Неопределено Тогда\n\t\t\t\n\t\t\tЗначения = Новый Структура(\"Параметр, Старое, Новое\", НовыйПараметр.Ключ, , НовыйПараметр.Значение);\n\t\t\tСоответствиеПараметров.Вставить(НовыйПараметр.Ключ, Значения);\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tЗначения = СоответствиеПараметров[НовыйПараметр.Ключ];\n\t\t\tЗначения.Новое = НовыйПараметр.Значение;\n\t\t\t\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tРезультат = Новый Массив;\n\tДля Каждого ПараметрИЗначения Из СоответствиеПараметров Цикл\n\t\t\n\t\tЕсли ПараметрИЗначения.Значение.Старое = ПараметрИЗначения.Значение.Новое Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\n\t\t\n\t\tРезультат.Добавить(ПараметрИЗначения.Значение);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ШаблоныПодключаемыхМодулей\n\nФункция ШаблоныМодулей_ПрефиксМакета()\n\t\n\tВозврат (\"ПодключаемыйМодуль_\");\n\t\nКонецФункции\n\nФункция ПодобратьВерсиюШаблона()\n\n\tПоддерживаемыеВерсии = ШаблоныМодулей_ПолучитьСписокВерсий();\n\tВерсияТекущейКонфигурации = Метаданные.Версия;\n\t\n\tТаблицаВерсий = Новый ТаблицаЗначений();\n\tТаблицаВерсий.Колонки.Добавить(\"Версия\");\n\tТаблицаВерсий.Колонки.Добавить(\"ВерсияЧислом\");\n\tТаблицаВерсий.Колонки.Добавить(\"ТекущаяВерсия\");\n\t\n\tДля Каждого ПоддерживаемаяВерсия Из ПоддерживаемыеВерсии Цикл\n\t\t\n\t\tСтрокаВерсии = ТаблицаВерсий.Добавить();\n\t\tСтрокаВерсии.Версия = ПоддерживаемаяВерсия;\n\t\tСтрокаВерсии.ВерсияЧислом = ВерсияЧислом(ПоддерживаемаяВерсия);\n\t\tСтрокаВерсии.ТекущаяВерсия = Ложь;\n\t\t\n\tКонецЦикла;\n\t\n\tСтрокаВерсии = ТаблицаВерсий.Добавить();\n\tСтрокаВерсии.Версия = ВерсияТекущейКонфигурации;\n\tСтрокаВерсии.ВерсияЧислом = ВерсияЧислом(ВерсияТекущейКонфигурации);\n\tСтрокаВерсии.ТекущаяВерсия = Истина;\n\t\n\tТаблицаВерсий.Сортировать(\"ВерсияЧислом\");\n\tСтрокаТекущейВерсии = ТаблицаВерсий.Найти(Истина, \"ТекущаяВерсия\");\n\tИндексТекущейВерсии = ТаблицаВерсий.Индекс(СтрокаТекущейВерсии);\n\t\n\tЕсли ИндексТекущейВерсии <> (ТаблицаВерсий.Количество() - 1) Тогда\n\t\t\n\t\t// Мы не можем предсказать порядок одинаковых версйи при сортировке,\n\t\t// поэтому нужно проверить, нет ли строчкой выше той версии, которая\n\t\t// нам нужна.\n\t\tСледующаяВерсия = ТаблицаВерсий[ИндексТекущейВерсии + 1];\n\t\tЕсли СледующаяВерсия.ВерсияЧислом = СтрокаТекущейВерсии.ВерсияЧислом Тогда\n\t\t\tВозврат СледующаяВерсия.Версия;\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли ИндексТекущейВерсии > 0 Тогда\n\t\t\n\t\t// Здесь предыдущая версия будет либо полным совпадением, либо наилучшим\n\t\t// вариантом. Т.к. обычно новые версии модуля загружаются для той версии,\n\t\t// в которых они был иизменены, нужно брать ближайшую версию сверху.\n\t\tПредыдущаяВерсия = ТаблицаВерсий[ИндексТекущейВерсии - 1];\n\t\tВозврат ПредыдущаяВерсия.Версия;\n\t\t\n\tКонецЕсли;\n\t\n\t// В отсутствие лучших вариантов, попробуем самую первую доступную версию\n\tВозврат ТаблицаВерсий[0].Версия;\n\nКонецФункции\n\nФункция ШаблоныМодулей_СуществуетШаблонДляВерсии(Версия)\n\t\n\tПрефиксМакета = ШаблоныМодулей_ПрефиксМакета();\n\tИмяМакетаШаблона = ПрефиксМакета + СтрЗаменить(Версия, \".\", \"_\");\n\t\n\tМакеты = Метаданные().Макеты;\n\tЕсли Макеты.Найти(ИмяМакетаШаблона) = Неопределено Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\t\n\tВозврат Истина;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область ВызовВебСервиса\n\nФункция СтандартныйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tМодуль = ОбщегоНазначения.ОбщийМодуль(\"усТСДВебСервис\");\n\tРезультат = ВычислитьЧерезМетодОбъекта(Модуль, ИмяМетода, ПараметрыМетода);\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ПодключаемыйМодуль_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tОписаниеМетодов = ДесериализацияJSON(НастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов, , Истина);\n\tОписаниеМетода = ОписаниеМетодов[Врег(ИмяМетода)];\n\tЕсли ОписаниеМетода = Неопределено Тогда\n\t\tОписаниеОшибки = СтрШаблон(\n\t\t\"Ошибка интеграции с веб-сервисом TSD. Проверьте настройки веб-сервиса.\n\t\t|Подключаемый модуль: Вызов метода %1: Не найдено описание метода в подключаемом модуле\"\n\t\t, ИмяМетода);\n\t\tВызватьИсключение ОписаниеОшибки;\n\tКонецЕсли;\n\t\n\tСтрокиКодаВызова = Новый Массив;\n\tДля Сч = 1 По ОписаниеМетода[\"КоличествоПараметров\"] Цикл\n\t\t\n\t\tИндексПараметра = Сч - 1;\n\t\tИмяПараметра = ОписаниеМетода[\"ИмяПараметра\" + Сч];\n\t\tКодПрисвоенияПараметра = СтрШаблон(\"%1 = ПараметрыМетода[%2];\", ИмяПараметра, ИндексПараметра);\n\t\tСтрокиКодаВызова.Добавить(КодПрисвоенияПараметра);\n\t\t\n\tКонецЦикла;\n\t\n\tСтрокиКодаВызова.Добавить(ОписаниеМетода[\"ТелоМетода\"]);\t\n\tКодВызова = СтрСоединить(СтрокиКодаВызова, Символы.ПС);\n\t\n\tВебСервис_Результат = Неопределено;\n\t\n\t// Здесь конечно есть потенциальная уязвимость, т.к. текст ручной настройки подключаемого\n\t// модуля мжно ввести любой. Но выбора у нас нет - либо так, либо не получиться запустить \n\t// эмулятор в некоторых случаях.\n\t// BSLLS:ExecuteExternalCode-off\n\tВыполнить(КодВызова);\n\t// BSLLS:ExecuteExternalCode-on\n\t\n\tВозврат(ВебСервис_Результат);\n\t\nКонецФункции\n\nФункция ВебСервер_ВызватьМетодВебСервиса(НастройкиИнтеграции, ИмяМетода, ПараметрыМетода)\n\t\n\tУРЛ = ДополнитьУРЛ(НастройкиИнтеграции.ВебСервер_УРЛ);\n\tОпределение = Новый WSОпределения(УРЛ, НастройкиИнтеграции.ВебСервер_Логин, НастройкиИнтеграции.ВебСервер_Пароль, , 5);\n\tПрокси = Новый WSПрокси(Определение, НастройкиИнтеграции.ПространствоИменXDTO, \"TSD\", \"TSDSoap12\", , 5);\n\tПрокси.Пользователь = НастройкиИнтеграции.ВебСервер_Логин;\n\tПрокси.Пароль = НастройкиИнтеграции.ВебСервер_Пароль;\n\t\n\tРезультат = ВычислитьЧерезМетодОбъекта(Прокси, ИмяМетода, ПараметрыМетода);\n\t\n\t// В некоторых релизах WMS были ошибки в XDTO пакете, которые проявляются только в Эмуляторе\n\t// и только в режиме работы через веб-сервис. Это еще какая-то черная магия внутри платформы,\n\t// и я убил огромное количество времени пытаясь её обойти - безуспешно.\n\t// Потому в отдельной функции проверяем, есть ли в пакете известные нам ошибки и исправляем их\n\t// вручную.\n\tРезультат = ИсправитьОшибкиXDTOПакета(Результат, Определение.ФабрикаXDTO, НастройкиИнтеграции.ПространствоИменXDTO, ИмяМетода);\n\t\n\t// Результат десериализуется в неведомую зверушку, которая не совпадает по формату\n\t// с объектами внутреннего типа, генерируемыми при работе с модулем интеграции.\n\t// Для того, чтобы не разводить лапшу с \"Если Режим = ВебСервер Тогда\" здесь\n\t// делаем хитрость - повторно сериализуем и десериализуем уже с указанием внутреннего\n\t// типа. Помогает.\n\t\n\tЗаписьXML = Новый ЗаписьXML;\n\tЗаписьXML.УстановитьСтроку();\n\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Результат);\n\tСтрокаXML = ЗаписьXML.Закрыть();\n\t\n\tЧтениеXML = Новый ЧтениеXML;\n\tЧтениеXML.УстановитьСтроку(СтрокаXML);\n\tИмяТипаXDTO = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, Результат.Тип().Имя);\n\tКонвертированныйРезультат = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ИмяТипаXDTO);\n\t\n\tВозврат КонвертированныйРезультат;\n\t\nКонецФункции\n\nФункция ИсправитьОшибкиXDTOПакета(Объект, Фабрика, ПространствоИмен, ИмяМетода)\n\t\n\tИсправитьОшибку501_wmsForm_PictureCollection(Объект, Фабрика, ПространствоИмен, ИмяМетода);\n\t\n\tВозврат Объект;\n\t\nКонецФункции\n\nФункция ИсправитьОшибку501_wmsForm_PictureCollection(Объект, Фабрика, ПространствоИмен, ИмяМетода)\n\t\n\t// Ошибка с незаполнением якобы обязательного поля PictureCollection в объекте wmsForm\n\t// Релиз 5.0.1\n\tЕсли ИмяМетода = \"GetForms\" Тогда\n\t\tФорма = Объект.Operation[0].Form[0];\n\tИначеЕсли ИмяМетода = \"GetDynamicForm\" Тогда\n\t\tФорма = Объект;\n\tИначеЕсли ИмяМетода = \"LoadFormByName\" Тогда\n\t\tФорма = Объект;\n\tИначе\n\t\tВозврат Объект; // Корректировать нечего\n\tКонецЕсли;\n\t\n\tЕсли Форма.Свойства().Получить(\"PictureCollection\") <> Неопределено Тогда // Есть такое свойство\n\t\tЕсли Форма.PictureCollection = Неопределено Тогда // Но оно не заполнено\n\t\t\tТипЗначенияPictureCollection = Фабрика.Тип(ПространствоИмен, \"wmsPictureCollection\");\n\t\t\tФорма.PictureCollection = Фабрика.Создать(ТипЗначенияPictureCollection);\n\t\tКонецЕсли;\t\t\t\n\tКонецЕсли;\n\t\n\tВозврат Объект;\n\t\nКонецФункции\n\nФункция ДополнитьУРЛ(УРЛ)\n\t\n\t// Варианты задания УРЛ\n\t// http://localhost/wms/ws/tsd.1cws?wsdl\n\t// http://localhost/wms/ws/tsd.1cws\n\t// http://localhost/wms/ws/tsd\n\t// http://localhost/wms/ws/\n\t// http://localhost/wms/ws\n\t// http://localhost/wms/\n\t// http://localhost/wms\n\t\n\tЕсли СтрЗаканчиваетсяНа(УРЛ, \"?wsdl\") Тогда\n\t\tРезультат = УРЛ;\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \".1cws\") Тогда\n\t\tРезультат = УРЛ + \"?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"tsd\") Тогда\n\t\tРезультат = УРЛ + \".1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/ws/\") Тогда\n\t\tРезультат = УРЛ + \"tsd.1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/ws\") Тогда\n\t\tРезультат = УРЛ + \"/tsd.1cws?wsdl\";\n\t\t\n\tИначеЕсли СтрЗаканчиваетсяНа(УРЛ, \"/\") Тогда\n\t\tРезультат = УРЛ + \"ws/tsd.1cws?wsdl\";\n\t\t\n\tИначе\n\t\tРезультат = УРЛ + \"/ws/tsd.1cws?wsdl\";\n\t\t\n\tКонецЕсли;\n\t\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция ВычислитьЧерезМетодОбъекта(Объект, ИмяМетода, ПараметрыМетода)\n\t\n\tПараметрыСтрокой = \"\";\n\tЕсли ПараметрыМетода <> Неопределено И ПараметрыМетода.Количество() > 0 Тогда\n\t\tДля Индекс = 0 По ПараметрыМетода.ВГраница() Цикл \n\t\t\tПараметрыСтрокой = ПараметрыСтрокой + \"ПараметрыМетода[\" + Индекс + \"],\";\n\t\tКонецЦикла;\n\t\tПараметрыСтрокой = Сред(ПараметрыСтрокой, 1, СтрДлина(ПараметрыСтрокой) - 1);\n\tКонецЕсли;\n\t\n\tСтрокаЗапуска = СтрШаблон(\"Объект.%1(%2)\", ИмяМетода, ПараметрыСтрокой);\n\t\n\t// Строка запуска сгенерирована нами самостоятельно и гарантировано безопасна.\n\t// BSLLS:ExecuteExternalCode-off\n\tРезультат = Вычислить(СтрокаЗапуска);\n\t// BSLLS:ExecuteExternalCode-on\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти\n\nФункция ВерсияЧислом(Знач СтрокаВерсии)\n\t\n\tЧислоРазделовВерсии = 4;\t\t// Сколько разрядов мы ожидаем увидеть в строке версии\n\tМаксРазрядовВРазделеВерсии = 2; // Сколько цифр мы ожидаем увидеть в одном разряде\n\t\n\tСтрокаВерсии = ?(ПустаяСтрока(СтрокаВерсии), \"0.0.0.0\", СтрокаВерсии);\n\tВерсияМассивом = СтрРазделить(СтрокаВерсии, \".\");\n\tПока ВерсияМассивом.Количество() < ЧислоРазделовВерсии Цикл\n\t\tВерсияМассивом.Добавить(\"0\");\n\tКонецЦикла;\n\t\n\tРезультат = 0;\n\tОписаниеТиповЧисло = Новый ОписаниеТипов(\"Число\");\n\tДля Разряд = 1 По ЧислоРазделовВерсии Цикл\n\t\t\n\t\tОбратныйИндексРазряда = ЧислоРазделовВерсии - Разряд;\n\t\tРазрядЧислом = ОписаниеТиповЧисло.ПривестиЗначение(ВерсияМассивом[Разряд - 1]);\n\t\tВесРазряда = Pow(10, ОбратныйИндексРазряда * МаксРазрядовВРазделеВерсии);\n\t\tРезультат = Результат + (РазрядЧислом * ВесРазряда);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n// Копия функции БСП, скопирована для снижения связности\n// Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину.\n// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,\n// рекомендуется использовать функцию платформы СтрРазделить.\n//\n// Параметры:\n// Значение - Строка - текст с разделителями;\n// Разделитель - Строка - разделитель строк текста, минимум 1 символ;\n// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.\n// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:\n// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки\n// включаются в результат;\n// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в\n// случае разделителя-пробела результатом функции будет массив, содержащий одно значение \"\" (пустая строка), а\n// при других разделителях результатом функции будет пустой массив.\n// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок.\n//\n// Возвращаемое значение:\n// Массив - массив строк.\n//\n// Пример:\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\",один,,два,\", \",\")\n// - возвратит массив из 5 элементов, три из которых - пустые: \"\", \"один\", \"\", \"два\", \"\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\",один,,два,\", \",\", Истина)\n// - возвратит массив из двух элементов: \"один\", \"два\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\" один два \", \" \")\n// - возвратит массив из двух элементов: \"один\", \"два\";\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\")\n// - возвратит пустой массив;\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\",,Ложь)\n// - возвратит массив с одним элементом: \"\"(пустая строка);\n// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(\"\", \" \")\n// - возвратит массив с одним элементом: \"\" (пустая строка).\n//\nФункция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = \",\", Знач ПропускатьПустыеСтроки = Неопределено,\n\t\tСокращатьНепечатаемыеСимволы = Ложь) Экспорт\n\t\n\tЕсли Разделитель = \",\"\n\t\tИ ПропускатьПустыеСтроки = Неопределено\n\t\tИ СокращатьНепечатаемыеСимволы Тогда\n\t\t\n\t\tРезультат = СтрРазделить(Значение, \",\", Ложь);\n\t\tДля Индекс = 0 По Результат.ВГраница() Цикл\n\t\t\tРезультат[Индекс] = СокрЛП(Результат[Индекс]);\n\t\t\tКонецЦикла;\n\t\tВозврат Результат;\n\t\t\n\tКонецЕсли;\n\t\n\tРезультат = Новый Массив;\n\t\n\t// Для обеспечения обратной совместимости.\n\tЕсли ПропускатьПустыеСтроки = Неопределено Тогда\n\t\tПропускатьПустыеСтроки = ?(Разделитель = \" \", Истина, Ложь);\n\t\tЕсли ПустаяСтрока(Значение) Тогда\n\t\t\tЕсли Разделитель = \" \" Тогда\n\t\t\t\tРезультат.Добавить(\"\");\n\t\t\tКонецЕсли;\n\t\t\tВозврат Результат;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t//\n\t\n\tПозиция = СтрНайти(Значение, Разделитель);\n\tПока Позиция > 0 Цикл\n\t\tПодстрока = Лев(Значение, Позиция - 1);\n\t\tЕсли Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда\n\t\t\tЕсли СокращатьНепечатаемыеСимволы Тогда\n\t\t\t\tРезультат.Добавить(СокрЛП(Подстрока));\n\t\t\tИначе\n\t\t\t\tРезультат.Добавить(Подстрока);\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\tЗначение = Сред(Значение, Позиция + СтрДлина(Разделитель));\n\t\tПозиция = СтрНайти(Значение, Разделитель);\n\tКонецЦикла;\n\t\n\tЕсли Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда\n\t\tЕсли СокращатьНепечатаемыеСимволы Тогда\n\t\t\tРезультат.Добавить(СокрЛП(Значение));\n\t\tИначе\n\t\t\tРезультат.Добавить(Значение);\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\nФункция СериализацияJSON(Знач ИсходныйОбъект)\n\t\n\tЗаписьJSON = Новый ЗаписьJSON;\n\tЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));\n\tЗаписатьJSON(ЗаписьJSON, ИсходныйОбъект);\n\tРезультат_JSON = ЗаписьJSON.Закрыть();\n\t\n\tВозврат (Результат_JSON);\n\t\nКонецФункции\n\nФункция ДесериализацияJSON(Знач СтрокаJSON, Знач СвойстваСДатой = Неопределено, СчитатьВСоответствие = Ложь)\n\t\n\tЧтениеJSON = Новый ЧтениеJSON;\n\tЧтениеJSON.УстановитьСтроку(СтрокаJSON);\n\tСчитанныйОбъект = ПрочитатьJSON(ЧтениеJSON, СчитатьВСоответствие, СвойстваСДатой);\n\t\n\tВозврат (СчитанныйОбъект);\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\Форма\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\Форма\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/fe5229c00d26a2dadebd8b088d83227db5a1f7a8/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%5CForm.obj.bsl",
+ "size": 27346,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tКонтекстЭмулятора = Новый Структура();\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровТСД\",\t\tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровОтладки\", \tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"ХранилищеПараметровИнтеграции\",\tПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор));\n\tКонтекстЭмулятора.Вставить(\"РежимВнешнейОбработки\",\t\t\tНеопределено);\n\t\n\tИнициализироватьПараметрыИнтеграции();\n\t\n\tОбработкаМетаданные = Обработка.Метаданные();\n\tРасширениеРодитель = ОбработкаМетаданные.РасширениеКонфигурации();\n\tЕсли РасширениеРодитель = Неопределено Тогда\n\t\tПрефиксОписания = \"epf\";\n\t\tНомерВерсии = ОбработкаМетаданные.Комментарий;\n\t\tКонтекстЭмулятора.РежимВнешнейОбработки = Истина;\n\tИначе\n\t\tПрефиксОписания = \"cfe\";\n\t\tНомерВерсии = РасширениеРодитель.Версия;\n\t\tКонтекстЭмулятора.РежимВнешнейОбработки = Ложь;\n\tКонецЕсли;\n\t\n\tОсновнойЗаголовокФормы = СтрШаблон(\"Эмулятор ТСД (%1 v%2)\", ПрефиксОписания, НомерВерсии);\n\tЗаголовок = ОсновнойЗаголовокФормы;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\t\n\tЕсли РезультатПроверки.КритическаяОшибка Тогда\n\t\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияПредупрежденияОКритическойОшибке\", ЭтотОбъект);\n\t\tТекстОповещения = СтрШаблон(\n\t\t\"Текущая конфигурация не поддерживает работу эмулятора ТСД.\n\t\t|Причина: %1\"\n\t\t, РезультатПроверки.ОписаниеОшибки);\n\t\tПоказатьПредупреждение(Оповещение, ТекстОповещения);\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеЗакрытияПредупрежденияОКритическойОшибке(ДополнительныеПараметры) Экспорт\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)\n\t\n\t// По большому счету, единственная причина проверки - при завершении работы завершены\n\t// серверные вызовы. Поэтому здесь такая странная конструкция, мы проверяем одновременно\n\t// и на Неопределено и на Ложь\n\tЕсли (ЗавершениеРаботы = Неопределено)\t\t// На старых версиях платформы параметр ЗавершениеРаботы и все последующие опускаются\n\t\t\tИЛИ Не ЗавершениеРаботы Тогда\t\t// На новых версиях - серверные вызовы при завершении работы запрещены\n\t\tПередЗакрытиемНаСервере(КонтекстЭмулятора);\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура ПередЗакрытиемНаСервере(КонтекстЭмулятора)\n\t\n\tСохранитьПараметрыИнтеграции(КонтекстЭмулятора);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура НовоеУстройство(Команда)\n\t\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаНаименования\", ЭтотОбъект);\n\tПоказатьВводСтроки(Оповещение, \"\", \"Введите наименование устройства\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаНаименования(Результат, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли Результат = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tНовоеУстройство = СоздатьУстройствоНаСервере(Результат);\n\t\n\tНачатьСеанс(НовоеУстройство);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура БыстроеСозданиеНовогоУстройства(Команда)\n\t\n\tНовоеУстройство = СоздатьУстройствоНаСервере();\n\t\n\tНачатьСеанс(НовоеУстройство);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура НастройкаИнтеграции(Команда)\n\t\n\tОткрытьНастройкуИнтеграции();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокСеансов\n\n&НаКлиенте\nПроцедура СписокСеансовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n\tНачатьСеанс(Элемент.ТекущиеДанные.НомерУстройства);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область НастройкиИнтеграции\n\n&НаСервереБезКонтекста\nФункция ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора)\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"КритическаяОшибка\", Ложь);\n\tРезультат.Вставить(\"ОписаниеОшибки\", \"\");\n\tРезультат.Вставить(\"ТребуетсяРучнаяНастройка\", Ложь);\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЕсли ПустаяСтрока(НастройкиИнтеграции.ПространствоИменXDTO) Тогда\n\t\t\n\t\tРезультат.КритическаяОшибка = Истина;\n\t\tРезультат.ОписаниеОшибки = \"В конфигурации отсутствует XDTO пакет TSD.\";\n\t\tВозврат Результат;\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли НастройкиИнтеграции.Режим = \"СтандартныйМодуль\" Тогда\n\t\t// Проверки не требуются\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"ПодключаемыйМодуль\" Тогда\n\t\tЕсли ПустаяСтрока(НастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов) Тогда\n\t\t\tРезультат.ТребуетсяРучнаяНастройка = Истина;\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли НастройкиИнтеграции.Режим = \"WebСервер\" Тогда\n\t\tЕсли ПустаяСтрока(НастройкиИнтеграции.ВебСервер_УРЛ) Тогда\n\t\t\tРезультат.ТребуетсяРучнаяНастройка = Истина;\n\t\tКонецЕсли;\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ПредложитьРучнуюНастройкуИнтеграции()\n\t\n\tТекстВопроса =\n\t\"Для текущей конфигурации требуется ручная настройка интеграции.\n\t|Открыть форму настройки?\";\n\tОповещение = Новый ОписаниеОповещения(\"ПослеОтветаНаВопросРучнойНастройки\", ЭтотОбъект);\n\tПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , \"Требуется ручная настройка\");\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПредложитьНастройкуИнтеграцииПослеОшибки(ОписаниеОшибки)\n\t\n\tТекстВопроса = СтрШаблон(\n\t\"При подключении к базе возникла ошибка:\n\t| %1\n\t|\n\t|Скорее всего, это означает что неправльно выполнена настройка интеграции.\n\t|Открыть форму настройки?\"\n\t, ОписаниеОшибки);\n\tОповещение = Новый ОписаниеОповещения(\"ПослеОтветаНаВопросОНастройкеИнтеграции\", ЭтотОбъект);\n\tПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , \"Ошибка при подключении\");\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеОтветаНаВопросОНастройкеИнтеграции(РезультатВопроса, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли РезультатВопроса = КодВозвратаДиалога.Да Тогда\n\t\tОткрытьНастройкуИнтеграции();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьНастройкуИнтеграции()\n\t\n\tПараметрыФормы = Новый Структура();\n\tПараметрыФормы.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияНастройкиИнтеграции\", ЭтотОбъект);\n\tФормаНастройкиИнтеграции = ПолноеИмяФормы(\"ФормаНастройкиИнтеграции\");\n\tОткрытьФорму(ФормаНастройкиИнтеграции, ПараметрыФормы, ЭтотОбъект, , , Оповещение);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеЗакрытияНастройкиИнтеграции() Экспорт\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\t\tВозврат;\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ИнициализироватьПараметрыИнтеграции()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tНастройкиИнтеграции = Обработка.НоваяСтруктураНастроекИнтеграции();\n\t\n\tСохраненныеНастройкиИнтеграции = ХранилищеОбщихНастроек.Загрузить(\"ЭмуляторТСД\", \"НастройкиИнтеграции\");\n\t\n\tЕсли ЗначениеЗаполнено(СохраненныеНастройкиИнтеграции) Тогда\n\t\tЗаполнитьЗначенияСвойств(НастройкиИнтеграции, СохраненныеНастройкиИнтеграции);\n\tКонецЕсли;\n\t\n\tЕсли НастройкиИнтеграции.Режим = Неопределено Тогда\n\t\tОбработка.АвтоопределениеНастроекИнтеграции(НастройкиИнтеграции);\n\tИначе\n\t\tОбработка.ПослеВосстановленияСохраненныхНастроекИнтеграции(НастройкиИнтеграции);\n\tКонецЕсли;\n\t\n\tПакетXDTO = Метаданные.ПакетыXDTO.Найти(\"TSD\");\n\tЕсли ПакетXDTO <> Неопределено Тогда\n\t\tНастройкиИнтеграции.ПространствоИменXDTO = ПакетXDTO.ПространствоИмен;\n\tКонецЕсли;\n\t\n\tПоместитьВоВременноеХранилище(НастройкиИнтеграции, КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура СохранитьПараметрыИнтеграции(КонтекстЭмулятора)\n\t\n\tСохраняемыеНастройки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\tСохраняемыеНастройки.Удалить(\"ПодключаемыйМодуль_ОписаниеМетодов\");\n\tСохраняемыеНастройки.Удалить(\"ПространствоИменXDTO\");\n\t\n\tХранилищеОбщихНастроек.Сохранить(\"ЭмуляторТСД\", \"НастройкиИнтеграции\", СохраняемыеНастройки);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область НачалоРаботы\n\n&НаКлиенте\nПроцедура НачатьСеанс(НомерВыбранногоУстройства)\n\t\n\tНомерУстройства = НомерВыбранногоУстройства;\n\t\n\tРезультатПроверки = ПроверитьПравильностьНастроекИнтеграции(КонтекстЭмулятора);\n\tЕсли РезультатПроверки.ТребуетсяРучнаяНастройка Тогда\n\t\tПредложитьРучнуюНастройкуИнтеграции();\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПопытка\n\t\tОписаниеОсновнойФормы = ЗагрузитьОписанияФормНаСервере();\n\tИсключение\n\t\tПредложитьНастройкуИнтеграцииПослеОшибки(ОписаниеОшибки());\n\t\tВозврат;\n\tКонецПопытки;\n\t\n\tЗаголовок = СтрШаблон(\"%1 [%2]\", ОсновнойЗаголовокФормы, НомерУстройства);\n\t\n\tОткрытьФормыТСД(ОписаниеОсновнойФормы);\n\t\n\tПодключитьОбработчикОжидания(\"Подключаемый_ЗапроситьОбновлениеСтатуса\", 5);\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ЗагрузитьОписанияФормНаСервере(НачалоРаботы = Истина) Экспорт\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\tЛокальнаяФабрикаXDTO = Обработка.ЛокальнаяФабрикаXDTO(НастройкиИнтеграции);\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, НачалоРаботы);\n\tРезультат_GetForms = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetForms\", ПараметрыМетода);\n\tЕсли Результат_GetForms = Неопределено Тогда \n\t\tВызватьИсключение \"GetForms: Пустой результат. Не получены первоначальные формы.\";\n\tКонецЕсли;\t\n\t\n\tПолученныеПараметрыТСД = Результат_GetForms.ValuesForm.Item;\n\tПараметрыТСД = Новый Структура;\n\tДля Каждого ПолученныйПараметр Из ПолученныеПараметрыТСД Цикл \n\t\tПараметрыТСД.Вставить(ПолученныйПараметр.Name, ПолученныйПараметр.Text);\n\tКонецЦикла;\n\tПоместитьВоВременноеХранилище(ПараметрыТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tОписаниеОсновнойФормы = Новый Структура;\n\tОписаниеОсновнойФормы.Вставить(\"Операция\", \t\tРезультат_GetForms.StartOperation);\n\tОписаниеОсновнойФормы.Вставить(\"Страница\", \t\tРезультат_GetForms.StartStep);\n\tОписаниеОсновнойФормы.Вставить(\"Имя\", \t\t\tРезультат_GetForms.StartOperation + \"/\" + Формат(Результат_GetForms.StartStep, \"ЧН=0; ЧГ=\"));\n\tОписаниеОсновнойФормы.Вставить(\"КодФормыXML\",\t\"\");\n\t\n СписокФормТСД.Очистить();\n\tДля Каждого ОперацияТСД Из Результат_GetForms.Operation Цикл\n\t\t\n\t\tДля Каждого ФормаОперацииТСД Из ОперацияТСД.Form Цикл\n\t\t\t\n\t\t\tНазваниеФормы = ОперацияТСД.Name + \"/\" + Формат(ФормаОперацииТСД.Number, \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tЗаписьXML = Новый ЗаписьXML;\n\t\t\tЗаписьXML.УстановитьСтроку();\n\t\t\tЛокальнаяФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ФормаОперацииТСД);\n\t\t\tКодФормыXML = ЗаписьXML.Закрыть();\n\t\t\t\n\t\t\tНоваяСтрока = СписокФормТСД.Добавить();\n\t\t\tНоваяСтрока.Имя \t= НазваниеФормы;\n\t\t\tНоваяСтрока.КодФормыXML = КодФормыXML;\n\t\t\tНоваяСтрока.Операция \t= ОперацияТСД.Name;\n\t\t\tНоваяСтрока.Страница\t= ФормаОперацииТСД.Number;\n\t\t\t\n\t\tКонецЦикла;\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(ОписаниеОсновнойФормы);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ОткрытьФормыТСД(ОписаниеОсновнойФормы) Экспорт\n\t\n\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\n\tДля Каждого СтрокаФормыТСД Из СписокФормТСД Цикл \n\t\tЕсли НайтиФормуПоЗаголовку(СтрокаФормыТСД.Имя) = Неопределено Тогда \n\t\t\tОткрытьФорму(ФормаОперации, ПараметрыОткрытияФормыОперации(СтрокаФормыТСД), ЭтотОбъект, Истина, Окно);\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tОткрытаяОсновнаяФорма = НайтиФормуПоЗаголовку(ОписаниеОсновнойФормы.Имя);\n\tЕсли ОткрытаяОсновнаяФорма = Неопределено Тогда\n\t\tОткрытьФорму(ФормаОперации, ПараметрыОткрытияФормыОперации(ОписаниеОсновнойФормы), ЭтотОбъект, Истина, Окно);\n\tИначе\n\t\tОткрытаяОсновнаяФорма.ОбновитьСостояние();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция НайтиФормуПоЗаголовку(ИскомыйЗаголовок)\n\t\n\tНайденнаяФорма = Неопределено;\n\tДля Каждого ОткрытаяФорма Из Окно.Содержимое Цикл\n\t\tЕсли ОткрытаяФорма.Заголовок = ИскомыйЗаголовок Тогда \n\t\t\tНайденнаяФорма = ОткрытаяФорма;\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат(НайденнаяФорма);\n\t\nКонецФункции\n\n&НаКлиенте\nФункция ПараметрыОткрытияФормыОперации(СтрокаФормыТСД)\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"НомерУстройства\", НомерУстройства);\n\tРезультат.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\t\n\tРезультат.Вставить(\"ИмяСтраницы\", СтрокаФормыТСД.Имя);\n\tРезультат.Вставить(\"Операция\", СтрокаФормыТСД.Операция);\n\tРезультат.Вставить(\"Страница\", СтрокаФормыТСД.Страница);\n\t\n\tЕсли Не ПустаяСтрока(СтрокаФормыТСД.КодФормыXML) Тогда\n\t\tРезультат.Вставить(\"КодФормыXML\", СтрокаФормыТСД.КодФормыXML);\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура Подключаемый_ЗапроситьОбновлениеСтатуса()\n\t\n\tРезультат = ЗапроситьОбновлениеСтатусаНаСервере();\n\t\n\tЕсли Результат.ЗвуковойСигнал Тогда \n\t\t#Если Не ВебКлиент Тогда\t\t\n\t\t\tСигнал();\n\t\t#КонецЕсли\n\tКонецЕсли;\n\t\n\tЕсли Не Пустаястрока(Результат.Сообщение) Тогда\n\t\t\n\t\tЕсли Не ФормаСообщенияОткрыта Тогда\n\t\t\t\n\t\t\tПараметрыФормыСообщения = Новый Структура(\"ТекстСообщения\", Результат.Message);\n\t\t\tОповещение = Новый ОписаниеОповещения(\"ПослеЗакрытияФормыСообщения\", ЭтотОбъект);\n\t\t\tФормаСообщений = ПолноеИмяФормы(\"ФормаСообщений\");\n\t\t\tОткрытьФорму(ФормаСообщений, ПараметрыФормыСообщения, ЭтотОбъект, , , , Оповещение);\n\t\t\t\n\t\t\tФормаСообщенияОткрыта = Истина;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОповестить(\"НовоеСообщениеСтатуса\", Результат.Сообщение, \"ЭмуляторТСД\");\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ЗапроситьОбновлениеСтатусаНаСервере()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Истина);\n\tОтвет = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"StatusTSD\", ПараметрыМетода);\n\t\n\tРезультат = Новый Структура(\"ЗвуковойСигнал, Сообщение\", Ответ.Signal, Ответ.Message);\n\tВозврат(Результат);\n\nКонецФункции\n\n&НаКлиенте\nПроцедура ПослеЗакрытияФормыСообщения(РезультатЗакрытия, ДополнительныеПараметры) Экспорт\n\t\n\tФормаСообщенияОткрыта = Ложь;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область УправлениеУстройствами\n\n&НаСервереБезКонтекста\nФункция СоздатьУстройствоНаСервере(ИмяУстройства = \"\")\n\t\n\tЕсли ПустаяСтрока(ИмяУстройства) Тогда\n\t\tИмяУстройства = \"ЭТСД - \" + Строка(Новый УникальныйИдентификатор);\n\tКонецЕсли;\n\t\n\tОригинальноеИмя = ИмяУстройства;\n\tСч = 0;\n\tИмяУникально = Ложь;\n\tМенеджерЗаписи = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьМенеджерЗаписи();\n\t\n\tПока Не ИмяУникально Цикл\n\t\t\n\t\tМенеджерЗаписи.НомерУстройства = ИмяУстройства;\n\t\tМенеджерЗаписи.Прочитать();\n\t\tЕсли Не МенеджерЗаписи.Выбран() Тогда\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\t\t\n\t\tСч = Сч + 1;\n\t\tИмяУстройства = СтрШаблон(\"%1 (%2)\", ОригинальноеИмя, Формат(Сч, \"ЧГ=0\"));\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(ИмяУстройства);\n\t\nКонецФункции\n\n#КонецОбласти\n\n&НаКлиенте\nФункция ПолноеИмяФормы(ИмяФормы)\n\t\n\tЕсли КонтекстЭмулятора.РежимВнешнейОбработки Тогда\n\t\tПрефиксМетаданных = \"ВнешняяОбработка\";\n\tИначе\n\t\tПрефиксМетаданных = \"Обработка\";\n\tКонецЕсли;\n\t\n\tРезультат = СтрШаблон(\"%1.ЭмуляторТСД.Форма.%2\", ПрефиксМетаданных, ИмяФормы);\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\ФормаВводаШтрихкода\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\ФормаВводаШтрихкода\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/41e9fdeaf103fc1351ea8a1c70ff340434c610f2/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%92%D0%B2%D0%BE%D0%B4%D0%B0%D0%A8%D1%82%D1%80%D0%B8%D1%85%D0%BA%D0%BE%D0%B4%D0%B0%5CForm.obj.bsl",
+ "size": 7813,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tСохраненныеНастройки = ПрочитатьНастройкиНаСервере();\n\t\n\tМассивТиповШК = СохраненныеНастройки.МассивТиповШК;\n\tЕсли Не ЗначениеЗаполнено(МассивТиповШК) Тогда\n\t\tМассивТиповШК = МассивТиповШКПоУмолчанию();\n\tКонецЕсли;\n\tДля Каждого ТипШК Из МассивТиповШК Цикл\n\t\tЭлементы.ТипШК.СписокВыбора.Добавить(ТипШК, ТипШК);\n\tКонецЦикла;\n\tТипШК = МассивТиповШК[0];\n\t\n\tМаксДлинаОтображаемогоШК = 40;\n\tМассивШК = СохраненныеНастройки.МассивШК;\n\tЕсли ЗначениеЗаполнено(МассивШК) Тогда\n\t\tДля Каждого ШК Из МассивШК Цикл\n\t\t\t\n\t\t\tПредставление = ШК;\n\t\t\tЕсли СтрДлина(Представление) > МаксДлинаОтображаемогоШК Тогда \n\t\t\t\tПредставление = Лев(Представление, (МаксДлинаОтображаемогоШК - 1)) + \"...\";\n\t\t\tКонецЕсли;\n\t\t\tСписокШК.Добавить(ШК, Представление);\n\t\t\t\n\t\tКонецЦикла;\n\t\t\n\t\tШтрихкод = МассивШК[0];\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ОК(Команда)\n\t\n\tМаксЗаписейИсторииТиповШК = 20;\n\tМаксЗаписейИсторииШК = 10;\n\t\n\tМассивТиповШК = Элементы.ТипШК.СписокВыбора.ВыгрузитьЗначения();\n\tТекущийИндекс = МассивТиповШК.Найти(ТипШК);\n\tЕсли ТекущийИндекс = Неопределено Тогда\n\t\t\n\t\tМассивТиповШК.Вставить(0, ТипШК);\n\t\tЕсли МассивТиповШК.ВГраница() >= МаксЗаписейИсторииТиповШК Тогда\n\t\t\tМассивТиповШК.Удалить(МаксЗаписейИсторииТиповШК);\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t\n\t\tМассивТиповШК.Удалить(ТекущийИндекс);\n\t\tМассивТиповШК.Вставить(0, ТипШК);\n\t\t\n\tИначе\n\t\tВызватьИсключение(\"Ошибка обработки.\");\n\tКонецЕсли;\n\t\n\tМассивШК = СписокШК.ВыгрузитьЗначения();\n\tТекущийИндекс = МассивШК.Найти(Штрихкод);\n\tЕсли ТекущийИндекс = Неопределено Тогда\n\t\t\n\t\tМассивШК.Вставить(0, Штрихкод);\n\t\tЕсли МассивШК.ВГраница() >= МаксЗаписейИсторииШК Тогда\n\t\t\tМассивШК.Удалить(МаксЗаписейИсторииШК);\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t\n\t\tМассивШК.Удалить(ТекущийИндекс);\n\t\tМассивШК.Вставить(0, Штрихкод);\n\t\t\n\tИначеЕсли ТекущийИндекс > 0 Тогда\n\t\t// Ничего делать не нужно\n\t\t\n\tИначе\n\t\tВызватьИсключение(\"Ошибка обработки.\");\n\tКонецЕсли;\n\t\n\tСохранитьНастройкиНаСервере(МассивТиповШК, МассивШК);\n\t\n\tРезультат = Новый Структура(\"ТипШК, Штрихкод\", ТипШК, Штрихкод);\n\tЗакрыть(Результат);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Отмена(Команда)\n\t\n\tЗакрыть(Неопределено);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьCR(Команда)\n\t\n\tВставитьТекст(Символ(13));\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьGS(Команда)\n\t\n\tВставитьТекст(\"\\x1d\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВставитьLF(Команда)\n\t\n\tВставитьТекст(Символ(10));\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\n// BSLLS:Typo-off\nПроцедура ПослеВыбораШтрихкодаИзСписка(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт\n// BSLLS:Typo-on\n\t\n\tЕсли ВыбранныйЭлемент = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tШтрихкод = ВыбранныйЭлемент.Значение;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ШтрихкодНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n// BSLLS:Typo-off\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВыбораШтрихкодаИзСписка\", ЭтотОбъект);\n// BSLLS:Typo-on\n\tПоказатьВыборИзМеню(Оповещение, СписокШК, Элементы.Штрихкод);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервереБезКонтекста\nФункция ПрочитатьНастройкиНаСервере()\n\t\n\tМассивТиповШК = ХранилищеОбщихНастроек.Загрузить(\"ЭТСД_Эмулятор\", \"МассивТиповШК\");\n\tМассивШК = ХранилищеОбщихНастроек.Загрузить(\"ЭТСД_Эмулятор\", \"МассивШК\");\n\t\n\tРезультат = Новый Структура(\"МассивТиповШК, МассивШК\", МассивТиповШК, МассивШК);\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервереБезКонтекста\nПроцедура СохранитьНастройкиНаСервере(МассивТиповШК, МассивШК)\n\t\n\tХранилищеОбщихНастроек.Сохранить(\"ЭТСД_Эмулятор\", \"МассивТиповШК\", МассивТиповШК);\n\tХранилищеОбщихНастроек.Сохранить(\"ЭТСД_Эмулятор\", \"МассивШК\", МассивШК);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция МассивТиповШКПоУмолчанию()\n\t\n\tТипыШК = Новый Массив;\n\tТипыШК.Добавить(\"Code128\");\n\tТипыШК.Добавить(\"GS1_Databar\");\n\tТипыШК.Добавить(\"DataMatrix\");\n\tТипыШК.Добавить(\"QRCode\");\n\tТипыШК.Добавить(\"PDF417\");\n\tТипыШК.Добавить(\"EANJAN\");\n\tТипыШК.Добавить(\"UPC\");\n\tТипыШК.Добавить(\"MicroPDF417\");\n\tТипыШК.Добавить(\"DataMatrixInverse\");\n\tТипыШК.Добавить(\"QRCodeInverse\");\n\tТипыШК.Добавить(\"MicroQR\");\n\tТипыШК.Добавить(\"Aztec\");\n\t\n\tВозврат(ТипыШК);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ВставитьТекст(Текст)\n\t\n\tЭлементы.Штрихкод.ВыделенныйТекст = Текст;\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\ФормаНастройкиИнтеграции\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\ФормаНастройкиИнтеграции\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/91dd7a37fa6aa991601e96aaacd31ac50164db2e/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B8%5CForm.obj.bsl",
+ "size": 12959,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tКонтекстЭмулятора = Параметры.КонтекстЭмулятора;\n\tЗаполнитьСписокВерсийПодключаемогоМодуля();\n\tПрочитатьПараметры();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tОбновитьОтображениеРежима();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\nПроцедура РежимИнтеграцииПриИзменении(Элемент)\n\t\n\tОбновитьОтображениеРежима();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПодключаемыйМодульПриИзменении(Элемент)\n\t\n\tЗагрузитьТекстМодуляНаСервере();\n\t\n\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура URLПубликацииПриИзменении(Элемент)\n\t\n\tОбновитьСтатус_WebСервер();\n\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ОК(Команда)\n\t\n\tСохранитьПараметры();\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Отмена(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВвестиТекстПодключаемогоМодуля(Команда)\n\t\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаРучнойНастройки\", ЭтотОбъект);\n\tПоказатьВводСтроки(Оповещение, ТекстПодключаемогоМодуля, \"Вставьте сюда текст модуля веб-сервиса TSD из вашей конфигурации\", , Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаРучнойНастройки(Текст, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли Текст = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tТекстПодключаемогоМодуля = Текст;\n\t\n\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗагрузитьТекстМодуляНаСервере()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" Тогда\n\t\t\n\t\tТекстПодключаемогоМодуля = \"\";\n\t\t\n\tИначе\n\t\t\n\t\tТекстПодключаемогоМодуля = Обработка.ШаблоныМодулей_ЗагрузитьТекстИзШаблона(ВерсияПодключаемогоМодуля);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьОтображениеРежима()\n\t\n\tЕсли РежимИнтеграции = \"СтандартныйМодуль\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаСтандартныйМодуль;\n\t\tОбновитьСтатус_СтандартныйМодуль();\n\t\t\n\tИначеЕсли РежимИнтеграции = \"ПодключаемыйМодуль\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаПодключаемыйМодуль;\n\t\tОбновитьСтатус_ПодключаемыйМодуль();\n\t\t\n\tИначеЕсли РежимИнтеграции = \"WebСервер\" Тогда\n\t\tЭлементы.СтраницыРежимов.ТекущаяСтраница = Элементы.СтраницаWebСервер;\n\t\tОбновитьСтатус_WebСервер();\n\t\t\n\tИначе\n\t\tВызватьИсключение \"Неизвестный режим интеграции!\";\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ЗаполнитьСписокВерсийПодключаемогоМодуля()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПоддерживаемыеВерсии = Обработка.ШаблоныМодулей_ПолучитьСписокВерсий();\n\tДля Каждого ПоддерживаемаяВерсия Из ПоддерживаемыеВерсии Цикл\n\t\tЭлементы.ПодключаемыйМодуль.СписокВыбора.Вставить(0, ПоддерживаемаяВерсия);\n\tКонецЦикла;\n\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПрочитатьПараметры()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tРежимИнтеграции = НастройкиИнтеграции.Режим;\n\tВерсияПодключаемогоМодуля \t= НастройкиИнтеграции.ПодключаемыйМодуль_Версия;\n\tТекстПодключаемогоМодуля \t= НастройкиИнтеграции.ПодключаемыйМодуль_Текст;\n\t\n\tURLПубликации\t= НастройкиИнтеграции.ВебСервер_УРЛ;\n\tЛогин\t\t\t= НастройкиИнтеграции.ВебСервер_Логин;\n\tПароль\t\t\t= НастройкиИнтеграции.ВебСервер_Пароль;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура СохранитьПараметры()\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tНастройкиИнтеграции.Режим = РежимИнтеграции;\n\t\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Версия \t= ВерсияПодключаемогоМодуля;\n\tНастройкиИнтеграции.ПодключаемыйМодуль_Текст \t= ТекстПодключаемогоМодуля;\n\t\n\tЕсли РежимИнтеграции = \"ПодключаемыйМодуль\" Тогда\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = Обработка.ШаблоныМодулей_ОписаниеМетодовМодуля(ТекстПодключаемогоМодуля);\n\tИначе\n\t\tНастройкиИнтеграции.ПодключаемыйМодуль_ОписаниеМетодов = \"\";\n\tКонецЕсли;\n\t\n\tНастройкиИнтеграции.ВебСервер_УРЛ \t\t= URLПубликации;\n\tНастройкиИнтеграции.ВебСервер_Логин \t= Логин;\n\tНастройкиИнтеграции.ВебСервер_Пароль \t= Пароль;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_СтандартныйМодуль()\n\t\n\tЕсли Не СтандартныйМодульДоступен() Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусСтандартныйМодуль, \"Стандартный модуль интеграции не найден\");\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусСтандартныйМодуль, \"Стандартный модуль интеграции доступен для использования\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_ПодключаемыйМодуль()\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" Тогда\n\t\tЭлементы.ВвестиТекстПодключаемогоМодуля.Видимость = Истина;\n\tИначе\n\t\tЭлементы.ВвестиТекстПодключаемогоМодуля.Видимость = Ложь;\n\tКонецЕсли;\n\t\t\n\tЕсли Не ЗначениеЗаполнено(ВерсияПодключаемогоМодуля) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Не выбрана версия подключаемого модуля\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ВерсияПодключаемогоМодуля = \"РучнаяНастройка\" И ПустаяСтрока(ТекстПодключаемогоМодуля) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Не введен текст ручной настройки подключаемого модуля\");\n\t\tВозврат;\n\tКонецЕсли;\n\t\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусПодключаемыйМодуль, \"Подключаемый модуль интеграции доступен для использования\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСтатус_WebСервер()\n\t\n\tЕсли ПустаяСтрока(URLПубликации) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусWebСервер, \"Не введен URL публикации\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ПустаяСтрока(Логин) И Не ПустаяСтрока(Пароль) Тогда\n\t\tУстановитьСтатусОшибка(Элементы.ГруппаСтатусWebСервер, \"Не указан логин для доступа к публикации\");\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tУстановитьСтатусОК(Элементы.ГруппаСтатусWebСервер, \"Интеграция через web-сервер доступна для использования\");\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция СтандартныйМодульДоступен()\n\t\n\tСтандартныйМодуль = Метаданные.ОбщиеМодули.Найти(\"усТСДВебСервис\");\n\tЕсли СтандартныйМодуль = Неопределено Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\t\n\tВозврат Истина;\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура УстановитьСтатусОК(ГруппаСтатуса, Комментарий)\n\t\n\tУстановитьСтатус(ГруппаСтатуса, \"☑\", WebЦвета.ЗеленыйЛес, Комментарий);\n\t\n\tЭлементы.ФормаОК.Доступность = Истина;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура УстановитьСтатусОшибка(ГруппаСтатуса, Комментарий)\n\t\n\tУстановитьСтатус(ГруппаСтатуса, \"⚠\", WebЦвета.Красный, Комментарий);\n\t\n\tЭлементы.ФормаОК.Доступность = Ложь;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура УстановитьСтатус(ГруппаСтатуса, СимволИндикатора, ЦветИндикатора, Комментарий)\n\t\n\tЭлементИндикатор = ГруппаСтатуса.ПодчиненныеЭлементы.Получить(0);\n\tЭлементКомментарий = ГруппаСтатуса.ПодчиненныеЭлементы.Получить(1);\n\t\n\tЭлементИндикатор.Заголовок = СимволИндикатора;\n\tЭлементИндикатор.ЦветТекста = ЦветИндикатора;\n\t\n\tЭлементКомментарий.Заголовок = Комментарий;\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\ФормаОперации\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\ФормаОперации\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/309ff624d6e6d6f8277c30ffadf365f1384fcfcc/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8%5CForm.obj.bsl",
+ "size": 105239,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tОтложенныеДействияФормы = Новый Структура();\n\tОтложенныеДействияФормы.Вставить(\"ОткрытьДинамическуюФорму\",\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ДинамическаяФорма\", \t\t\"\");\n\tОтложенныеДействияФормы.Вставить(\"ДинамическаяОперация\",\t\"\");\n\t\n\tОтложенныеДействияФормы.Вставить(\"ОчиститьОперацию\",\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ОперацияДляОчистки\",\t\"\");\n\t\n\tОтложенныеДействияФормы.Вставить(\"ОткрытьСледующуюОперацию\", Ложь);\n\tОтложенныеДействияФормы.Вставить(\"СледующаяОперация\",\t\"\");\n\tОтложенныеДействияФормы.Вставить(\"СледующаяСтраница\", \t0);\n\t\n\tОтложенныеДействияФормы.Вставить(\"ЗакрытьФормы\", \t\tЛожь);\n\tОтложенныеДействияФормы.Вставить(\"ОчиститьВсеФормы\",\tЛожь);\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tЭлементы.ДекорацияЗаглушка.Видимость = Ложь;\n\t\n\tНомерУстройства = Параметры.НомерУстройства;\n\tЗаголовок = Параметры.ИмяСтраницы;\n\tОперацияТекущейФормы = Параметры.Операция;\n\tСтраницаТекущейФормы = Параметры.Страница;\n\tКонтекстЭмулятора = Параметры.КонтекстЭмулятора;\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЛокальнаяФабрикаXDTO = Обработка.ЛокальнаяФабрикаXDTO(НастройкиИнтеграции);\n\tЭлементы.ИнфоКеш.Заголовок = Элементы.ИнфоКеш.Заголовок + ТекущаяДатаСеанса();\n\tЭлементы.ИнфоКеш.Видимость = Ложь;\n\t\n\tЕсли Параметры.Свойство(\"СтрокаXML\") Тогда \n\t\t\n\t\tЧтениеXML = Новый ЧтениеXML;\n\t\tЧтениеXML.УстановитьСтроку(Параметры.СтрокаXML);\n\t\tТипФорма = ЛокальнаяФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsForm\");\n\t\tФормаТСД = ЛокальнаяФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипФорма);\n\t\t\n\t\tИсходныйКодФормы = Параметры.СтрокаXML;\n\t\t\n\tИначе\n\t\t\n\t\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, ОперацияТекущейФормы, СтраницаТекущейФормы);\n\t\tФормаТСД = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"LoadFormByName\", ПараметрыМетода);\n\t\t\n\t\tЗаписьXML = Новый ЗаписьXML;\n\t\tЗаписьXML.УстановитьСтроку();\n\t\tЛокальнаяФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ФормаТСД);\n\t\tИсходныйКодФормы = ЗаписьXML.Закрыть();\n\t\t\n\tКонецЕсли;\n\t\n\tЭлементы.ГруппаФормаТСД.ЦветФона = ЦветИзHEXСтроки(ФормаТСД.BackColor);\n\t\n\tЕсли ФормаТСД.ScannerOn Тогда \n\t\tЭлементы.ФормаВвестиШтрихкод.Доступность = Истина;\n\tИначе\n\t\tЭлементы.ФормаВвестиШтрихкод.Доступность = Ложь;\n\tКонецЕсли;\t\n\t\n\tМассивРеквизитов = Новый Массив;\n\tПодготовитьРеквизиты(ФормаТСД.Последовательность(), МассивРеквизитов);\n\t\n\tЕсли МассивРеквизитов.Количество() Тогда \n\t\tИзменитьРеквизиты(МассивРеквизитов);\n\tКонецЕсли;\t\n\t\n\tОшибкиОтрисовкиФормы = \"\";\n\t\n\tДобавитьЭлементы(ФормаТСД.Последовательность(), Элементы.ГруппаФормаТСД);\n\t\n\tЕсли ЗначениеЗаполнено(ОшибкиОтрисовкиФормы) Тогда\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Видимость = Истина;\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Заголовок = \"Ошибка отрисовки формы. \" + ОшибкиОтрисовкиФормы;\n\tИначе\n\t\tЭлементы.ОшибкиОтрисовкиФормы.Видимость = Ложь;\n\tКонецЕсли;\t\n\t\n\tЗаполнитьРеквизитыФормыПараметрами();\n\t\n\tПрочитатьПараметрыОтладки(ЭтотОбъект);\n\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриОткрытии(Отказ)\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\tПодключитьОбработчикОжидания(\"Подключаемый_ОбновитьРежимОтладки\", 1);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриПовторномОткрытии()\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)\n\t\n\tЕсли СтрНачинаетсяС(Заголовок, \"Устарела\") Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tЕсли ИмяСобытия = \"ЭмуляторТСД_ИзменениеРежимаОтладки\" Тогда\n\t\t\n\t\tЕсли ЖурналОтладкиВключен <> Параметр Тогда\n\t\t\t\n\t\t\tЖурналОтладкиВключен = Параметр;\n\t\t\tПриИзмененииРежимаОтладки();\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли;\t\n\t\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовШапкиФормы\n\n&НаКлиенте\nПроцедура ОбработкаВыбора(Элемент)\n\t\n\tРеквизит = Сред(Элемент.Имя, 8);\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tНомерСтроки = Элемент.ТекущиеДанные.Колонка1;\n\tОбработкаВыбораСервер(Реквизит, НомерСтроки);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ОбработкаВыбораСервер(Реквизит, НомерСтроки)\n\t\n\tПараметрыТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tПараметрыТСД.Вставить(Реквизит, НомерСтроки);\n\t\n\tОбработатьСобытие(\"Выбор\", \"Таблица\" + Реквизит, ПараметрыТСД);\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриИзмененииЭлемента(Элемент)\n\t\n\tРеквизит = Сред(Элемент.Имя, 9);\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриИзмененииЭлементаСервер(Реквизит);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПриИзмененииЭлементаСервер(Реквизит)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tЕсли ТипЗнч(ЭтотОбъект[\"Реквизит\" + Реквизит]) = Тип(\"Дата\") Тогда \n\t\tСтруктураПараметровТСД.Вставить(Реквизит, Формат(ЭтотОбъект[\"Реквизит\" + Реквизит], \"ДФ=dd.MM.yyyy\"));\n\tИначеЕсли ТипЗнч(ЭтотОбъект[\"Реквизит\" + Реквизит]) = Тип(\"Число\") Тогда \n\t\tСтруктураПараметровТСД.Вставить(Реквизит, Формат(ЭтотОбъект[\"Реквизит\" + Реквизит], \"ЧРД=.; ЧГ=\"));\n\tИначе\t\n\t\tСтруктураПараметровТСД.Вставить(Реквизит, ЭтотОбъект[\"Реквизит\" + Реквизит]);\n\tКонецЕсли;\n\t\n\tОбработатьСобытие(\"ПриИзменении\", \"Реквизит\" + Реквизит, СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиСобытийЭлементовТаблицыФормыЖурналОтладки\n\n&НаКлиенте\nПроцедура ЖурналОтладкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tСтрокаЖурнала = ЖурналОтладки.НайтиПоИдентификатору(ВыбраннаяСтрока);\n\tЕсли СтрокаЖурнала.Наименование = \"GetData\" Тогда\n\t\t\n\t\tФормаПросмотрИзмененныхПараметров = ПолноеИмяФормы(\"ФормаПросмотрИзмененныхПараметров\");\n\t\tПараметрыФормы = Новый Структура(\"ИзмененныеПараметры\", СтрокаЖурнала.ИзмененныеПараметры);\n\t\tОткрытьФорму(ФормаПросмотрИзмененныхПараметров, ПараметрыФормы, ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура ВвестиШтрихкод(Команда)\n\t\n\tФормаВводаШтрихкода = ПолноеИмяФормы(\"ФормаВводаШтрихкода\");\n\tОповещение = Новый ОписаниеОповещения(\"ПослеВводаШтрихкода\", ЭтотОбъект);\n\tОткрытьФорму(ФормаВводаШтрихкода, , ЭтотОбъект, , , , Оповещение);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ВыбратьТекущееЗначение(Команда)\n\t\n\tПриИзмененииЭлемента(ТекущийЭлемент);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьПараметры(Команда)\n\t\n\tФормаПросмотрПараметров = ПолноеИмяФормы(\"ФормаПросмотрПараметров\");\n\tПараметрыФормы = Новый Структура(\"НомерУстройства, АдресХранилищаПараметров\", НомерУстройства, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tОткрытьФорму(ФормаПросмотрПараметров, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьДанные(Команда)\n\t\n\tФормаПросмотрДанных = ПолноеИмяФормы(\"ФормаПросмотрДанных\");\n\tПараметрыФормы = Новый Структура(\"НомерУстройства\", НомерУстройства);\n\tОткрытьФорму(ФормаПросмотрДанных, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПосмотретьТекущееДействие(Команда)\n\t\n\tКлючЗаписи = СоздатьКлючЗаписиТекущееДействиеПользователяТСД(НомерУстройства);\n\tПараметрыФормы = Новый Структура(\"Ключ\", КлючЗаписи);\n\tОткрытьФорму(\"РегистрСведений.усТекущееДействиеПользователяТСД.ФормаЗаписи\", ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция СоздатьКлючЗаписиТекущееДействиеПользователяТСД(НомерУстройства)\n\t\n\tКлючЗаписи = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьКлючЗаписи(Новый Структура(\"НомерУстройства\", НомерУстройства));\n\tВозврат КлючЗаписи;\n\t\nКонецФункции\t\n\n&НаКлиенте\nПроцедура СброситьКэш(Команда)\n\n\tСтартоваяФорма = Неопределено;\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tСтартоваяФорма = ВложеннаяФорма;\n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\t\n\tКонецЦикла;\n\t\n\tОписаниеОсновнойФормы = СтартоваяФорма.ЗагрузитьОписанияФормНаСервере(Ложь);\n\tСтартоваяФорма.ОткрытьФормыТСД(ОписаниеОсновнойФормы);\n\nКонецПроцедуры\t\n\n&НаКлиенте\nПроцедура ПосмотретьКодСтраницы(Команда)\n\t\n\tФормаПросмотрКода = ПолноеИмяФормы(\"ФормаПросмотрКода\");\n\tПараметрыФормы = Новый Структура(\"Текст\", ИсходныйКодФормы);\n\tОткрытьФорму(ФормаПросмотрКода, ПараметрыФормы, ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПереключитьОтображениеОтладки(Команда)\n\t\n\tЖурналОтладкиОтображается = Не ЖурналОтладкиОтображается;\n\tЕсли Не ЖурналОтладкиОтображается Тогда \n\t\t\n\t\tЖурналОтладкиВключен = Ложь;\n\t\tЖурналОтладки.Очистить();\n\t\tПриИзмененииРежимаОтладки();\n\t\t\n\tИначе\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПереключитьРежимОтладки(Команда)\n\t\n\tЖурналОтладкиВключен = Не ЖурналОтладкиВключен;\n\tОповестить(\"ЭмуляторТСД_ИзменениеРежимаОтладки\", ЖурналОтладкиВключен, \"ЭмуляторТСД\");\n\t\n\tПриИзмененииРежимаОтладки();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОчиститьЖурналОтладки(Команда)\n\t\n\tЖурналОтладки.Очистить();\n\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПослеВводаШтрихкода(РезультатЗакрытия, ДополнительныеПараметры) Экспорт\n\t\n\tЕсли РезультатЗакрытия = Неопределено Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\tШтрихкодПриИзмененииНаСервере(РезультатЗакрытия.ТипШК, РезультатЗакрытия.Штрихкод);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ШтрихкодПриИзмененииНаСервере(Знач ТипШК, Знач Штрихкод)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tСтруктураПараметровТСД.Вставить(\"barcodetype\", ТипШК);\n\tСтруктураПараметровТСД.Вставить(\"barcode\", Штрихкод);\n\t\n\tОбработатьСобытие(\"ПриИзменении\", \"Штрихкод\", СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииПунктаМеню(Команда)\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииКнопки(Команда)\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ПриНажатииГиперссылки(Команда, СтандартнаяОбработка)\n\t\n\tСтандартнаяОбработка = Ложь;\n\t\n\tПодключитьОбработчикОжидания(\"ОбработатьОтвет\", 0.1, Истина);\n\t\n\tПриНажатииСервер(Команда.Имя);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПриНажатииСервер(Команда)\n\t\n\tСтруктураПараметровТСД = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tОбработатьСобытие(\"Нажатие\", Команда, СтруктураПараметровТСД);\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n#Область ОтрисовкаФормы\n\n&НаКлиенте\nПроцедура ВключитьВидимостьИнфоКеш() Экспорт\n\t\n\tЭлементы.ИнфоКеш.Видимость = Истина;\n\nКонецПроцедуры\t\n\n&НаСервере\nПроцедура ДобавитьЭлементы(ПоследовательностьЭлементов, Родитель)\n\t\n\tСобытия = Неопределено;\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Label\" Тогда \n\t\t\tДобавитьLabel(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TextBox\" Тогда \n\t\t\tДобавитьTextbox(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"DateTime\" Тогда \n\t\t\tДобавитьDateTime(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Button\" Тогда \n\t\t\tДобавитьButton(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Line\" Тогда \n\t\t\tГруппа = ДобавитьLine(текЭлемент, Родитель);\n\t\t\tДобавитьЭлементы(текЭлемент.Последовательность(), Группа);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TableItems\" Тогда \n\t\t\tДобавитьTable(текЭлемент, Родитель);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Menu\" Тогда \n\t\t\tДобавитьMenuItem(текЭлемент, Элементы.ГруппаКоманднаяПанельТСД);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Events\" Тогда \n\t\t\tСобытия = Сч;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"PictureCollection\" Тогда \n\t\t\tПродолжить; // Не поддерживается в текущей версии\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип элемента: %1\", ТипЭлемента);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\n\tЕсли События <> Неопределено Тогда\n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(События);\n\t\tДобавитьEvents(текЭлемент, ФабрикаXDTO);\n\t\t\n\tКонецЕсли;\t\n\t\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nФункция МасштабПоВысоте()\n\t\n\tВозврат(16);\n\t\nКонецФункции\n\n&НаКлиентеНаСервереБезКонтекста\nФункция МасштабПоШирине()\n\t\n\tВозврат(8);\n\t\nКонецФункции\n\n&НаСервере\nПроцедура УстановитьШрифтЭлемента(ЭлементФормы, ЭлементXDTO)\n\t\n\tЕсли Не ЗначениеЗаполнено(ЭлементXDTO.Font_Name) Тогда \n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПолужирный = СтрНайти(ЭлементXDTO.Font_Style, \"Bold\");\n\tНаклонный = СтрНайти(ЭлементXDTO.Font_Style, \"Italic\");\n\tПодчеркнутый = СтрНайти(ЭлементXDTO.Font_Style, \"Underline\");\n\tЗачеркнутый = СтрНайти(ЭлементXDTO.Font_Style, \"Line-through\");\n\t\n\t// Здесь мы должны брать оформление не из стиля, а из полученного пакета,\n\t// т.к. рендеринг форм должен совпадать с ТСД.\n\t// BSLLS:StyleElementConstructors-off\n\tЭлементФормы.Шрифт = Новый Шрифт(ЭлементXDTO.Font_Name, ЭлементXDTO.Font_Size, Полужирный, Наклонный, Подчеркнутый, Зачеркнутый);\n\t// BSLLS:StyleElementConstructors-on\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура УстановитьЦветаЭлемента(ЭлементФормы, ЭлементXDTO)\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.Font_Color) Тогда \n\t\tЭлементФормы.ЦветТекста = ЦветИзHEXСтроки(ЭлементXDTO.Font_Color);\n\tКонецЕсли;\t\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.BackColor) Тогда \n\t\tЭлементФормы.ЦветФона = ЦветИзHEXСтроки(ЭлементXDTO.BackColor);\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьLabel(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеНадписи;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\tЕсли ВысотаЭлемента > 1 Тогда \n\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\t\tНовыйЭлемент.АвтоМаксимальнаяШирина = Ложь;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.TextAlign = \"TopCenter\" Тогда \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Центр;\n\tИначеЕсли ЭлементXDTO.TextAlign = \"TopRight\" Тогда \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право;\n\tИначе \n\t\tНовыйЭлемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево;\n\tКонецЕсли;\t\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли Не ЭлементXDTO.Template Тогда \n\t\tЭтотОбъект[\"Реквизит\" + ЭлементXDTO.Name] = ЭлементXDTO.Value;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьTextbox(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tНовыйЭлемент.МногострочныйРежим = ЭлементXDTO.MultiLine;\n\tНовыйЭлемент.ТолькоПросмотр = ЭлементXDTO.ReadOnly;\n\tНовыйЭлемент.РежимПароля = ЭлементXDTO.Password;\n\t\n\tЕсли ЭлементXDTO.Height = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоВертикали = Истина;\n\tИначе\n\t\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\t\tЕсли ВысотаЭлемента > 1 Тогда \n\t\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Реквизит\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"ПриИзменении\", \"ПриИзмененииЭлемента\");\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьTable(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Таблица\" + ЭлементXDTO.Name, Тип(\"ТаблицаФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Таблица\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\tНовыйЭлемент.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;\n\tНовыйЭлемент.ИзменятьПорядокСтрок = Ложь;\n\tНовыйЭлемент.ИзменятьСоставСтрок = Ложь;\n\t\n\tСч = 1;\n\tДля Каждого Колонка Из ЭлементXDTO.Columns.Column Цикл \n\t\t\n\t\tНоваяКолонка = Элементы.Добавить(\"Колонка\" + Сч, Тип(\"ПолеФормы\"), НовыйЭлемент);\n\t\tНоваяКолонка.ПутьКДанным = \"Таблица\" + ЭлементXDTO.Name + \".Колонка\" + Сч;\n\t\tНоваяКолонка.ТолькоПросмотр = Истина;\n\t\t\n\t\tЕсли Колонка.Width = -1 Тогда \n\t\t\tНоваяКолонка.РастягиватьПоГоризонтали = Истина;\n\t\tИначе\n\t\t\tШиринаЭлемента = Окр(Колонка.Width / МасштабПоШирине());\n\t\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\t\tНоваяКолонка.Ширина = ШиринаЭлемента;\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\t\n\t\tНоваяКолонка.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Лево;\n\t\tСч = Сч + 1;\n\t\t\n\tКонецЦикла;\t\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Таблица\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"Выбор\", \"ОбработкаВыбора\");\n\t\n\tДля Каждого Строка Из ЭлементXDTO.RowTable Цикл\n\t\t\n\t\tНоваяСтрока = ЭтотОбъект[\"Таблица\" + ЭлементXDTO.Name].Добавить();\n\t\t \n\t\tСч = 1;\n\t\tДля Каждого Значение Из Строка.ItemColumn Цикл \n\t\t\tНоваяСтрока[\"Колонка\" + Сч] = Значение.Value;\n\t\t\tСч = Сч + 1;\n\t\tКонецЦикла;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьDateTime(ЭлементXDTO, Родитель)\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Реквизит\" + ЭлементXDTO.Name, Тип(\"ПолеФормы\"), Родитель);\n\tНовыйЭлемент.ПутьКДанным = \"Реквизит\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;\n\tНовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;\n\t\n\tЕсли ЗначениеЗаполнено(ЭлементXDTO.Format) Тогда \n\t\tНовыйЭлемент.Формат = \"ДФ=\" + ЭлементXDTO.Format;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Height = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоВертикали = Истина;\n\tИначе\n\t\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\t\tЕсли ВысотаЭлемента > 1 Тогда \n\t\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Реквизит\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\n\tНовыйЭлемент.УстановитьДействие(\"ПриИзменении\", \"ПриИзмененииЭлемента\");\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьButton(ЭлементXDTO, Родитель)\n\t\n\tНоваяКоманда = Команды.Добавить(\"Кнопка\" + ЭлементXDTO.Name);\n\tНоваяКоманда.Заголовок = ЭлементXDTO.Value;\n\tНоваяКоманда.Действие = \"ПриНажатииКнопки\";\n\t\n\tНовыйЭлемент = Элементы.Добавить(\"Кнопка\" + ЭлементXDTO.Name, Тип(\"КнопкаФормы\"), Родитель);\n\tНовыйЭлемент.Заголовок = ЭлементXDTO.Value;\n\tНовыйЭлемент.ИмяКоманды = \"Кнопка\" + ЭлементXDTO.Name;\n\tНовыйЭлемент.Вид = ВидКнопкиФормы.ОбычнаяКнопка;\n\t\n\tВысотаЭлемента = Окр(ЭлементXDTO.Height / МасштабПоВысоте());\n\tЕсли ВысотаЭлемента > 1 Тогда \n\t\tНовыйЭлемент.Высота = ВысотаЭлемента;\n\tКонецЕсли;\n\t\n\tЕсли ЭлементXDTO.Width = -1 Тогда \n\t\tНовыйЭлемент.РастягиватьПоГоризонтали = Истина;\n\tИначе\n\t\tШиринаЭлемента = Окр(ЭлементXDTO.Width / МасштабПоШирине());\n\t\tЕсли ШиринаЭлемента > 0 Тогда \n\t\t\tНовыйЭлемент.Ширина = ШиринаЭлемента;\n\t\tКонецЕсли;\n\tКонецЕсли;\n\t\n\tУстановитьШрифтЭлемента(НовыйЭлемент, ЭлементXDTO);\n\tУстановитьЦветаЭлемента(НовыйЭлемент, ЭлементXDTO);\n\t\n\tЕсли ЭлементXDTO.Template Тогда \n\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\tНоваяСтрока.ИмяРеквизита = \"Кнопка\" + ЭлементXDTO.Name;\n\t\tНоваяСтрока.Значение = ЭлементXDTO.Value;\n\t\tНоваяСтрока.Кнопка = Истина;\n\tКонецЕсли;\t\n\t\n\tЕсли ЭлементXDTO.Focus Тогда \n\t\tОсновнойЭлемент = \"Кнопка\" + ЭлементXDTO.Name;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ДобавитьLine(ЭлементXDTO, Родитель)\n\t\n\tИмяГруппы = \"ГруппаТСД\" + Формат(Элементы.Количество(), \"ЧН=0; ЧГ=\");\n\tНоваяГруппа = Элементы.Добавить(ИмяГруппы, Тип(\"ГруппаФормы\"), Родитель);\n\t\n\tНоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;\n\tНоваяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет;\n\tНоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;\n\tНоваяГруппа.РастягиватьПоВертикали = Ложь;\n\tНоваяГруппа.ОтображатьЗаголовок = Ложь;\n\n\tВозврат НоваяГруппа;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ДобавитьMenuItem(ЭлементXDTO, Родитель)\n\t\n\tПоследовательностьЭлементов = ЭлементXDTO.Последовательность();\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\t\n\t\tЕсли текЭлемент.Последовательность().Количество() = 0 Тогда \n\t\t\t\n\t\t\tНомерКоманды = Формат(Команды.Количество(), \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tНоваяКоманда = Команды.Добавить(\"Команда\" + НомерКоманды);\n\t\t\tНоваяКоманда.Заголовок = текЭлемент.Name;\n\t\t\tНоваяКоманда.Действие = \"ПриНажатииПунктаМеню\";\n\t\t\t\n\t\t\tНоваяКнопка = Элементы.Добавить(\"Команда\" + НомерКоманды, Тип(\"КнопкаФормы\"), Родитель);\n\t\t\tНоваяКнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;\n\t\t\tНоваяКнопка.Заголовок = текЭлемент.Name;\n\t\t\tНоваяКнопка.ИмяКоманды = \"Команда\" + НомерКоманды;\n\t\t\tНоваяКнопка.ТолькоВоВсехДействиях = Ложь;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tНовоеПодменю = Элементы.Добавить(\"Подменю\" + Формат(Элементы.Количество(), \"ЧН=0; ЧГ=\"), Тип(\"ГруппаФормы\"), Родитель);\n\t\t\tНовоеПодменю.Вид = ВидГруппыФормы.Подменю;\n\t\t\tНовоеПодменю.Заголовок = текЭлемент.Name;\n\t\t\t\n\t\t\tДобавитьMenuItem(текЭлемент, НовоеПодменю);\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция СтрокаСобытияXML(Событие, Фабрика)\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tЗапись = Новый ЗаписьXML;\n\tЗапись.УстановитьСтроку();\n\tЗапись.ЗаписатьНачалоЭлемента(\"Event\");\n\tЗапись.ЗаписатьАтрибут(\"Name\", \"Test\");\n\t\n\tПоследовательностьЭлементов = Событие.Последовательность();\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\tШаг = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tФабрика.ЗаписатьXML(Запись, Шаг, ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя, НастройкиИнтеграции.ПространствоИменXDTO);\n\tКонецЦикла;\t\n\t\n\tЗапись.ЗаписатьКонецЭлемента();\n\tРезультат = Запись.Закрыть();\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервере\nФункция НайтиКомандуПоИмени(Событие)\n\t\n\tИмяЭлемента = \"Кнопка\" + Событие.ItemTarget;\n\t\n\tКоманда = Команды.Найти(ИмяЭлемента);\n\tЕсли Команда <> Неопределено Тогда\n\t\tВозврат(ИмяЭлемента);\n\tИначе\n\t\tВозврат(Неопределено);\n\tКонецЕсли;\n\t\nКонецФункции\n\n&НаСервере\nФункция НайтиКомандуПоЗаголовку(Событие)\n\t\n\tРезультат = Неопределено;\n\t\n\tДля Каждого Команда Из Команды Цикл \n\t\tЕсли Команда.Заголовок = Событие.ItemTarget Тогда \n\t\t\tРезультат = Команда.Имя;\n\t\t\tПрервать;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ЗаполнитьГорячиеКлавиши(Событие, ИсходныйКодСобытия)\n\t\n\tСтруктураПоиска = Новый Структура;\n\tСтруктураПоиска.Вставить(\"ОбработкаСобытия\", \tИсходныйКодСобытия);\n\tСтруктураПоиска.Вставить(\"ИмяСобытия\", \t\t\t\"Нажатие\");\n\tСтрокиСобытийНажатие = ТаблицаСобытий.НайтиСтроки(СтруктураПоиска);\n\t\n\tДля Каждого Реквизит Из СтрокиСобытийНажатие Цикл \n\t\t\n\t\tГорячаяКлавиша = КлавишаПоКоду(Событие.KeyChar);\n\t\tЕсли ГорячаяКлавиша = Неопределено Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\n\t\t\n\t\tСочетаниеКлавиш = Новый СочетаниеКлавиш(ГорячаяКлавиша, Событие.Alt = Истина, Событие.Ctrl = Истина, Событие.Shift = Истина);\n\t\t\n\t\tПопытка\n\t\t\tКоманда = Команды.Найти(Команды[Реквизит.ЭлементСобытия].Имя);\n\t\tИсключение\n\t\tКонецПопытки;\n\t\t\n\t\tЕсли Команда = Неопределено Тогда\n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tКоманда.СочетаниеКлавиш = СочетаниеКлавиш;\n\t\t\n\tКонецЦикла;\t\n\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnScanBarCode(Событие, СтрокаСобытия)\n\t\n\tИмяСобытия = \"ПриИзменении\";\n\tЭлемент = \"Штрихкод\";\n\t\n\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\tНоваяСтрока.ЭлементСобытия = Элемент;\n\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnKeyPress(Событие, СтрокаСобытия)\n\t\n\tКодКлавишиEnter = 13;\n\tКодКлавишиВверх = 38;\t\n\tКодКлавишиВниз = 40;\t\n\t\n\tЕсли Событие.KeyChar = КодКлавишиВверх ИЛИ Событие.KeyChar = КодКлавишиВниз Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tЕсли Событие.KeyChar = КодКлавишиEnter Тогда\n\t\t\n\t\tРеквизит = Элементы.Найти(\"Реквизит\" + Событие.ItemTarget);\n\t\tТаблица = Элементы.Найти(\"Таблица\" + Событие.ItemTarget);\n\t\t\n\t\tЕсли Реквизит <> Неопределено Тогда \n\t\t\t\n\t\t\tИмяСобытия = \"ПриИзменении\";\n\t\t\tЭлемент = \"Реквизит\" + Событие.ItemTarget;\n\t\t\t\n\t\tИначеЕсли Таблица <> Неопределено Тогда \n\t\t\t\n\t\t\tИмяСобытия = \"Выбор\";\n\t\t\tЭлемент = \"Таблица\" + Событие.ItemTarget;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный реквизит события OnKeyPress: %1\", Событие.ItemTarget);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\t\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\t\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\t\tНоваяСтрока.ЭлементСобытия = Элемент;\n\t\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\t\n\tИначе\n\t\t\n\t\tЗаполнитьГорячиеКлавиши(Событие, СтрокаСобытия);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьСобытиеOnClick(Событие, СтрокаСобытия)\n\t\n\tИмяСобытия = \"Нажатие\";\n\tКнопкаНайдена = Ложь;\n\t\n\tЭлемент = НайтиКомандуПоИмени(Событие);\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\tЭлемент = НайтиКомандуПоЗаголовку(Событие);\n\tКонецЕсли;\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tИмяЭлемента = \"Реквизит\" + Событие.ItemTarget;\n\t\tГиперссылка = Элементы.Найти(ИмяЭлемента);\n\t\tЕсли Гиперссылка <> Неопределено Тогда \n\t\t\t\n\t\t\tЭлемент = ИмяЭлемента;\n\t\t\t\n\t\t\tЕсли Гиперссылка.Вид = ВидПоляФормы.ПолеНадписи Тогда \n\t\t\t\tИмяСобытия = \"Нажатие\";\n\t\t\t\tГиперссылка.Гиперссылка = Истина;\n\t\t\t\tГиперссылка.УстановитьДействие(\"Нажатие\", \"ПриНажатииГиперссылки\");\n\t\t\tИначе\n\t ИмяСобытия = \"ПриИзменении\";\n\t\t\tКонецЕсли;\n\t\tКонецЕсли;\n\t\t\n\tКонецЕсли; \t\t\t\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tИмяТаблицы = \"Таблица\" + Событие.ItemTarget;\n\t\tЕсли Элементы.Найти(ИмяТаблицы) <> Неопределено Тогда \n\t\t\tИмяСобытия = \"Выбор\";\n\t\t\tЭлемент = ИмяТаблицы;\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли Элемент = Неопределено Тогда\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Не удалось обработать событие OnClick - %1\", Событие.ItemTarget);\n\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\t\t\n\t\t\n\tКонецЕсли;\n\t\n\tНоваяСтрока = ТаблицаСобытий.Добавить();\n\tНоваяСтрока.ИмяСобытия = ИмяСобытия;\n\tНоваяСтрока.ЭлементСобытия = Элемент;\n\tНоваяСтрока.ОбработкаСобытия = СтрокаСобытия;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьEvents(ЭлементXDTO, Фабрика)\n\t\n\tДля Каждого Событие Из ЭлементXDTO.Event Цикл\n\t\t\n\t\tСтрокаСобытия = СтрокаСобытияXML(Событие, Фабрика);\n\t\t\n\t\tЕсли Событие.Name = \"OnScanBarCode\" Тогда \n\t\t\tДобавитьСобытиеOnScanBarCode(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначеЕсли Событие.Name = \"OnKeyPress\" Тогда \n\t\t\tДобавитьСобытиеOnKeyPress(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначеЕсли Событие.Name = \"OnClick\" Тогда \n\t\t\tДобавитьСобытиеOnClick(Событие, СтрокаСобытия);\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип события: %1\", Событие.Name);\n\t\t\tОшибкиОтрисовкиФормы = ОшибкиОтрисовкиФормы + ОписаниеОшибки + \". \";\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработкаОтвета\n\n&НаКлиенте\nПроцедура ОбработатьОтвет()\n\t\n\tСобытиеОбрабатывается = Ложь;\n\t\n\tЕсли ПолученСигналОшибки Тогда \n\t\tПолученСигналОшибки = Ложь;\n\t\t#Если Не ВебКлиент Тогда\t\t\n\t\t\tСигнал();\n\t\t#КонецЕсли\n\tКонецЕсли;\t\n\t\n\tЕсли ОтложенныеДействияФормы.ЗакрытьФормы Тогда \n\t\tВладелецФормы.Закрыть();\n\t\tВозврат;\n\tКонецЕсли;\t\n\t\n\tЕсли ОтложенныеДействияФормы.ОчиститьОперацию Тогда \n\t\tОбработатьОчисткуОперации();\n\tКонецЕсли;\n\t\t\n\tЕсли ОтложенныеДействияФормы.ОчиститьВсеФормы Тогда \n\t\tОбработатьОчисткуВсехФорм();\n\tКонецЕсли;\n\n\tЕсли ОтложенныеДействияФормы_ФормыКОткрытию.Количество() > 0 Тогда \n\t\tОткрытьПолученныеФормы();\n\tКонецЕсли;\n\t\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьСледующуюОперацию Тогда\n\t\tОткрытьФормуСледующейОперации();\n\tКонецЕсли;\n\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьДинамическуюФорму Тогда \n\t\tОткрытьДинамическуюФорму();\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработатьОчисткуОперации()\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, ОтложенныеДействияФормы.ОперацияДляОчистки) Тогда \n\t\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОчиститьОперацию = Ложь;\n\tОтложенныеДействияФормы.ОперацияДляОчистки = \"\";\n\t\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработатьОчисткуВсехФорм()\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\t\n\t\tЕсли СтрНачинаетсяС(ВложеннаяФорма.Заголовок, \"Эмулятор ТСД\") Тогда \n\t\t\tПродолжить;\n\t\tКонецЕсли;\t\n\t\t\n\t\tВложеннаяФорма.Заголовок = \"Устарела\" + ВложеннаяФорма.Заголовок;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОчиститьВсеФормы = Ложь;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция НайтиОткрытуюФорму(ИмяФормы)\n\t\n\tНайденнаяФорма = Неопределено;\n\t\n\tДля Каждого ВложеннаяФорма Из Окно.Содержимое Цикл \n\t\tЕсли ВложеннаяФорма.Заголовок = ИмяФормы Тогда \n\t\t\tНайденнаяФорма = ВложеннаяФорма;\n\t\t\tПрервать;\n\t\tКонецЕсли;\n\tКонецЦикла;\n\t\n\tВозврат(НайденнаяФорма);\n\t\nКонецФункции\n\n&НаКлиенте\nПроцедура ОткрытьПолученныеФормы()\n\t\n\tДля Каждого Полученнаяформа Из ОтложенныеДействияФормы_ФормыКОткрытию Цикл \n\t\t\n\t\tФормаСтраницы = НайтиОткрытуюФорму(Полученнаяформа.Имя);\n\t\t\n\t\tЕсли ФормаСтраницы = Неопределено Тогда \n\t\t\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\t\tПараметрыФормы = ПараметрыОткрытияФормыОперации(Полученнаяформа.Имя, Полученнаяформа.Операция, Полученнаяформа.Страница, Полученнаяформа.Строка);\n\t\t\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы_ФормыКОткрытию.Очистить();\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьФормуСледующейОперации()\n\t\n\tИмяСтраницы = ОтложенныеДействияФормы.СледующаяОперация + \"/\" + Формат(ОтложенныеДействияФормы.СледующаяСтраница, \"ЧН=0; ЧГ=\");\n\t\n\tФормаСтраницы = НайтиОткрытуюФорму(ИмяСтраницы);\n\t\n\tЕсли ФормаСтраницы <> Неопределено Тогда\n\t\t\n\t\tФормаСтраницы.Активизировать();\n\t\tФормаСтраницы.ВключитьВидимостьИнфоКеш();\n\t\tФормаСтраницы.ОбновитьСостояние();\n\t\t\n\tИначе\n\t\t\n\t\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\t\tПараметрыФормы = ПараметрыОткрытияФормыОперации(ИмяСтраницы, ОтложенныеДействияФормы.СледующаяОперация, ОтложенныеДействияФормы.СледующаяСтраница);\n\t\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\t\n\tКонецЕсли;\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Ложь;\n\tОтложенныеДействияФормы.СледующаяОперация = \"\";\n\tОтложенныеДействияФормы.СледующаяСтраница = 0;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОткрытьДинамическуюФорму()\n\t\n\tФормаОперации = ПолноеИмяФормы(\"ФормаОперации\");\n\tПараметрыФормы = ПараметрыОткрытияФормыОперации(Строка(Новый УникальныйИдентификатор), ОтложенныеДействияФормы.ДинамическаяОперация, 0, ОтложенныеДействияФормы.ДинамическаяФорма);\n\tОткрытьФорму(ФормаОперации, ПараметрыФормы, ВладелецФормы, Истина, Окно);\n\t\n\tОтложенныеДействияФормы.ОткрытьДинамическуюФорму = Ложь;\n\tОтложенныеДействияФормы.ДинамическаяФорма\t\t= \"\";\n\tОтложенныеДействияФормы.ДинамическаяОперация\t= \"\";\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработкаСобытий\n\n&НаСервере\nФункция ОбработатьСобытие(Имя, Элемент, СтруктураПараметров, ФормаОбновлена = Ложь)\n\t\n\tЕсли СобытиеОбрабатывается Тогда\n\t\tВозврат Ложь;\n\tКонецЕсли;\n\tСобытиеОбрабатывается = Истина;\n\t\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\tСобытиеОбработано = Ложь;\n\tДля Каждого Событие Из ТаблицаСобытий Цикл \n\t\tЕсли Имя = Событие.ИмяСобытия И Элемент = Событие.ЭлементСобытия Тогда \n\t\t\t\n\t\t\tНаименованиеСобытия = СтрШаблон(\"%1 - %2\", Событие.ИмяСобытия, Событие.ЭлементСобытия);\n\t\t\tДобавитьСобытиеВЖурналОтладки(ЭтотОбъект, \"Событие\", НаименованиеСобытия);\n\t\t\t\n\t\t\tСобытиеОбработано = Истина;\n\t\t\t\n\t\t\tЧтениеХМЛ = Новый ЧтениеXML;\n\t\t\tЧтениеХМЛ.УстановитьСтроку(Событие.ОбработкаСобытия);\n\t\t\tТипСобытие = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsEvent\");\n\t\t\tСобытие = ФабрикаXDTO.ПрочитатьXML(ЧтениеХМЛ, ТипСобытие);\n\n\t\t\tПоследовательностьЭлементов = Событие.Последовательность();\n\t\t\tОбработатьПоследовательностьСобытия(ПоследовательностьЭлементов, СтруктураПараметров, ФормаОбновлена);\n\t\t\t\n\t\t\tПрервать;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\t\n\t\n\tВозврат СобытиеОбработано;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ОбработатьПоследовательностьСобытия(ПоследовательностьЭлементов, СтруктураПараметровТСД, ФормаОбновлена = Ложь)\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tЭлементДействия = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Action\" Тогда \n\t\t\t\n\t\t\tВыполнитьДействие(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Condition\" Тогда \n\t\t\t\n\t\t\tЕсли ПроверитьУсловие(ЭлементДействия, СтруктураПараметровТСД) Тогда \n\t\t\t\tОбработатьПоследовательностьСобытия(ЭлементДействия.Последовательность(), СтруктураПараметровТСД, ФормаОбновлена);\n\t\t\t\tПрервать;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tИначе\n\t\t\t\n\t\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип элемента события: %1\", ТипЭлемента);\n\t\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\n\t\n\tПоместитьВоВременноеХранилище(СтруктураПараметровТСД, КонтекстЭмулятора.ХранилищеПараметровТСД);\n\t\n\tЕсли ОтложенныеДействияФормы.ОткрытьСледующуюОперацию Тогда \n\t\tЕсли Заголовок = ОтложенныеДействияФормы.СледующаяОперация + \"/\" + Формат(ОтложенныеДействияФормы.СледующаяСтраница, \"ЧН=0; ЧГ=\") Тогда \n\t\t\t\n\t\t\tЗаполнитьРеквизитыФормыПараметрами();\n\t\t\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Ложь;\n\t\t\tОтложенныеДействияФормы.СледующаяОперация = \"\";\n\t\t\tОтложенныеДействияФормы.СледующаяСтраница = 0;\n\t\t\tФормаОбновлена = Истина;\n\t\t\t\n\t\tКонецЕсли;\t\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nФункция ПроверитьУсловие(Условие, СтруктураПараметров)\n\t\n\tРезультат = Ложь;\n\t\n\tЛевоеЗначение = ЗаполнитьШаблонПараметрами(Условие.LValue, СтруктураПараметров);\n\tПравоеЗначение = ЗаполнитьШаблонПараметрами(Условие.RValue, СтруктураПараметров);\n\t\n\tТипЗначения = НРег(Условие.TypeValue);\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tЕсли ТипЗначения = \"string\" Тогда\n\t\t\n\t\tЕсли ЛевоеЗначение = \"null\" Тогда \n\t\t\tЛевоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\t\tЕсли ПравоеЗначение = \"null\" Тогда \n\t\t\tПравоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТипЗначения = \"int\" ИЛИ ТипЗначения = \"float\" Тогда\n\t\t\n\t\tЛевоеЗначение = ТипЧисло.ПривестиЗначение(ЛевоеЗначение);\n\t\tПравоеЗначение = ТипЧисло.ПривестиЗначение(ПравоеЗначение);\n\t\t\n\tИначеЕсли ТипЗначения = \"date\" Тогда \n\t\t\n\t\tЛевоеЗначение = ПривестиСтрокуКДате(ЛевоеЗначение);\n\t\tПравоеЗначение = ПривестиСтрокуКДате(ПравоеЗначение);\n\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип значения: %1\", ТипЗначения);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли Условие.Expression = \"==\" Тогда \n\t\tВозврат ЛевоеЗначение = ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"!=\" Тогда \n\t\tВозврат ЛевоеЗначение <> ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \">\" Тогда \n\t\tВозврат ЛевоеЗначение > ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \">=\" Тогда \n\t\tВозврат ЛевоеЗначение >= ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"<\" Тогда \n\t\tВозврат ЛевоеЗначение < ПравоеЗначение;\n\t\t\n\tИначеЕсли Условие.Expression = \"<=\" Тогда \n\t\tВозврат ЛевоеЗначение <= ПравоеЗначение;\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип сравнения: %1\", Условие.Expression);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tВозврат Результат;\n\t\nКонецФункции\n\n&НаСервере\nПроцедура ВыполнитьДействие(ЭлементДействия, СтруктураПараметровТСД)\n\t\n\tТипДействия = НРег(ЭлементДействия.Type);\n\tЕсли ТипДействия = \"setvalue\" Тогда \n\t\tУстановитьЗначение(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"addvalue\" Тогда \n\t\tДобавитьЗначение(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"nextstep\" Тогда \n\t\tСледующаяСтраница(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"deletoperationforms\" Тогда \n\t\tОчиститьОперацию(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"eraseoperationform\" Тогда \n\t\tОтложенныеДействияФормы.ОчиститьВсеФормы = Истина;\n\t\t\n\tИначеЕсли ТипДействия = \"playsound\" Тогда \n\t\tПолученСигналОшибки = Истина;\n\t\t\n\tИначеЕсли ТипДействия = \"getnewdata\" Тогда \n\t\tПолучитьДанные(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"callwebservice\" Тогда \n\t\tПолучитьФормы(СтруктураПараметровТСД); \n\t\t\n\tИначеЕсли ТипДействия = \"getdynamicform\" Тогда \n\t\tПолучитьДинамическуюФорму(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"exit\" Тогда \n\t\tВызватьЗавершение(СтруктураПараметровТСД);\n\t\t\n\tИначеЕсли ТипДействия = \"changelanguage\" Тогда \n\t\tИзменитьЯзык(ЭлементДействия, СтруктураПараметровТСД);\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип действия: %1\", ТипДействия);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура УстановитьЗначение(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tсткПараметров.Вставить(Действие.ItemName, Значение);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ДобавитьЗначение(Действие, СтруктураПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, СтруктураПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tЕсли Не СтруктураПараметров.Свойство(Действие.ItemName) Тогда \n\t\t\n\t\tСтруктураПараметров.Вставить(Действие.ItemName, Значение);\n\t\tВозврат;\n\t\t\n\tКонецЕсли;\n\t\n\tЛевоеЗначение = СтруктураПараметров[Действие.ItemName];\n\tПравоеЗначение = Значение;\n\t\n\tТипЗначения = НРег(Действие.TypeValue);\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tЕсли ТипЗначения = \"string\" Тогда \n\t\t\n\t\tЕсли ЛевоеЗначение = \"null\" Тогда \n\t\t\tЛевоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\t\tЕсли ПравоеЗначение = \"null\" Тогда \n\t\t\tПравоеЗначение = \"\";\n\t\tКонецЕсли;\n\t\t\n\tИначеЕсли ТипЗначения = \"int\" ИЛИ ТипЗначения = \"float\" Тогда \n\t\t\n\t\tЛевоеЗначение = ТипЧисло.ПривестиЗначение(ЛевоеЗначение);\n\t\tПравоеЗначение = ТипЧисло.ПривестиЗначение(ПравоеЗначение);\n\t\t\n\tИначеЕсли ТипЗначения = \"date\" Тогда\n\t\t\n\t\tЛевоеЗначение = ПривестиСтрокуКДате(ЛевоеЗначение);\n\t\t\n\tИначе\n\t\t\n\t\tОписаниеОшибки = СтрШаблон(\"Неизвестный тип значения: %1\", ТипЗначения);\n\t\tВызватьИсключение(ОписаниеОшибки);\n\t\t\n\tКонецЕсли;\n\t\n\tСтруктураПараметров.Вставить(Действие.ItemName, ЛевоеЗначение + ПравоеЗначение);\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура СледующаяСтраница(Действие, сткПараметров)\n\t\n\tТипЧисло = Новый ОписаниеТипов(\"Число\");\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Истина;\n\tЕсли Действие.Template Тогда \n\t\tОтложенныеДействияФормы.СледующаяОперация = ЗаполнитьШаблонПараметрами(Действие.ItemName, сткПараметров);\n\t\tОтложенныеДействияФормы.СледующаяСтраница = ТипЧисло.ПривестиЗначение(ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров));\n\tИначе\n\t\tОтложенныеДействияФормы.СледующаяОперация = Действие.ItemName;\n\t\tОтложенныеДействияФормы.СледующаяСтраница = ТипЧисло.ПривестиЗначение(Действие.Text);\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ОчиститьОперацию(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tОтложенныеДействияФормы.ОчиститьОперацию\t= Истина;\n\tОтложенныеДействияФормы.ОперацияДляОчистки\t= Значение;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьДанные(СтруктураПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\txdtoПараметрыТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsValuesForm\");\n\txdtoПараметрТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsItem\");\n\txdtoПараметры = ФабрикаXDTO.Создать(xdtoПараметрыТип);\n\t\t\n\tДля Каждого текЭлемент Из СтруктураПараметров Цикл\n\t\txdtoПараметр = ФабрикаXDTO.Создать(xdtoПараметрТип);\n\t\n\t\txdtoПараметр.Name = текЭлемент.Ключ;\n\t\txdtoПараметр.Text = текЭлемент.Значение;\n\t\txdtoПараметры.Item.Добавить(xdtoПараметр);\n\tКонецЦикла;\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, xdtoПараметры, Строка(Новый УникальныйИдентификатор));\n\tValuesForm = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetData\", ПараметрыМетода);\n\n\tСтруктураПараметров = Новый Структура;\n\tДля Каждого Значение Из ValuesForm.Item Цикл \n\t\tСтруктураПараметров.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьФормы(СтруктураПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Истина);\n\tФормы = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetForms\", ПараметрыМетода);\n\n\tСтруктураПараметров = Новый Структура;\n\tДля Каждого Значение Из Формы.ValuesForm.Item Цикл \n\t\tСтруктураПараметров.Вставить(Значение.Name, Значение.Text);\n\tКонецЦикла;\n\t\n\tОтложенныеДействияФормы.ОткрытьСледующуюОперацию = Истина;\n\tОтложенныеДействияФормы.СледующаяОперация = Формы.StartOperation;\n\tОтложенныеДействияФормы.СледующаяСтраница = Формы.StartStep;\n\t\n\tДля Каждого ПолученнаяОперация Из Формы.Operation Цикл \n\t\tДля Каждого ПолученнаяФорма Из ПолученнаяОперация.Form Цикл \n\t\t\t\n\t\t\tНазваниеФормы = ПолученнаяОперация.Name + \"/\" + Формат(ПолученнаяФорма.Number, \"ЧН=0; ЧГ=\");\n\t\t\t\n\t\t\tЗаписьXML = Новый ЗаписьXML;\n\t\t\tЗаписьXML.УстановитьСтроку();\n\t\t\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ПолученнаяФорма);\n\t\t\tСтрока = ЗаписьXML.Закрыть();\n\t\t\t\n\t\t\tНоваяФорма = ОтложенныеДействияФормы_ФормыКОткрытию.Добавить();\n\t\t\tНоваяФорма.Имя = НазваниеФормы;\n\t\t\tНоваяФорма.Строка = Строка;\n\t\t\tНоваяФорма.Операция = ПолученнаяОперация.Name;\n\t\t\tНоваяФорма.Страница = ПолученнаяФорма.Number;\n\t\t\t\n\t\tКонецЦикла;\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ПолучитьДинамическуюФорму(сткПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tНастройкиИнтеграции = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровИнтеграции);\n\t\n\txdtoПараметрыТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsValuesForm\");\n\txdtoПараметрТип = ФабрикаXDTO.Тип(НастройкиИнтеграции.ПространствоИменXDTO, \"wmsItem\");\n\txdtoПараметры = ФабрикаXDTO.Создать(xdtoПараметрыТип);\n\t\t\n\tДля Каждого текЭлемент Из сткПараметров Цикл\n\t\txdtoПараметр = ФабрикаXDTO.Создать(xdtoПараметрТип);\n\t\n\t\txdtoПараметр.Name = текЭлемент.Ключ;\n\t\txdtoПараметр.Text = текЭлемент.Значение;\n\t\txdtoПараметры.Item.Добавить(xdtoПараметр);\n\tКонецЦикла;\n\t\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, xdtoПараметры);\n\tФорма = Обработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"GetDynamicForm\", ПараметрыМетода);\n\n\tЗаписьXML = Новый ЗаписьXML;\n\tЗаписьXML.УстановитьСтроку();\n\tФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Форма);\n\tКодДинамическойФормы = ЗаписьXML.Закрыть();\n\t\n\tОтложенныеДействияФормы.ОткрытьДинамическуюФорму = Истина;\n\tОтложенныеДействияФормы.ДинамическаяФорма = КодДинамическойФормы;\n\tОтложенныеДействияФормы.ДинамическаяОперация = сткПараметров.ДинамическаяФорма;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ВызватьЗавершение(сткПараметров)\n\t\n\tОбработка = РеквизитФормыВЗначение(\"Объект\");\n\tПараметрыМетода = Обработка.ПараметрыМетода(НомерУстройства, Ложь);\n\tОбработка.ВызватьМетодВебсервиса(КонтекстЭмулятора, \"StatusTSD\", ПараметрыМетода);\n\tОтложенныеДействияФормы.ЗакрытьФормы = Истина;\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ИзменитьЯзык(Действие, сткПараметров)\n\t\n\tЕсли Действие.Template Тогда \n\t\tЗначение = ЗаполнитьШаблонПараметрами(Действие.Text, сткПараметров);\n\tИначе\n\t\tЗначение = Действие.Text;\n\tКонецЕсли;\n\t\n\tПараметрыСеанса.Язык = Значение;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область КонвертацияЗначений\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ПривестиСтрокуКДате(ДатаСтрокой)\n\t\n\tПопытка\n\t\tРезультат = Дата(Сред(ДатаСтрокой, 7, 4) + Сред(ДатаСтрокой, 4, 2) + Лев(ДатаСтрокой, 2));\n\tИсключение\n\t\tРезультат = '00010101';\n\tКонецПопытки;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n// BSLLS:MagicNumber-off\n// Без кодов кнопок эту функцию не написать, подавляем\n&НаСервере\nФункция КлавишаПоКоду(КодКнопки)\t\n\t\n\tКлавишиПоКоду = Новый Соответствие;\n\tКлавишиПоКоду.Вставить(8 , Клавиша.BackSpace);\n\tКлавишиПоКоду.Вставить(19 , Клавиша.Break);\n\t\n\tКлавишиПоКоду.Вставить(48 , Клавиша._0);\n\tКлавишиПоКоду.Вставить(49 , Клавиша._1);\n\tКлавишиПоКоду.Вставить(50 , Клавиша._2);\n\tКлавишиПоКоду.Вставить(51 , Клавиша._3);\n\tКлавишиПоКоду.Вставить(52 , Клавиша._4);\n\tКлавишиПоКоду.Вставить(53 , Клавиша._5);\n\tКлавишиПоКоду.Вставить(54 , Клавиша._6);\n\tКлавишиПоКоду.Вставить(55 , Клавиша._7);\n\tКлавишиПоКоду.Вставить(56 , Клавиша._8);\n\tКлавишиПоКоду.Вставить(57 , Клавиша._9);\n\t\n\tКлавишиПоКоду.Вставить(112, Клавиша.F1);\n\tКлавишиПоКоду.Вставить(113, Клавиша.F2);\n\tКлавишиПоКоду.Вставить(114, Клавиша.F3);\n\tКлавишиПоКоду.Вставить(115, Клавиша.F4);\n\tКлавишиПоКоду.Вставить(116, Клавиша.F5);\n\tКлавишиПоКоду.Вставить(117, Клавиша.F6);\n\tКлавишиПоКоду.Вставить(118, Клавиша.F7);\n\tКлавишиПоКоду.Вставить(119, Клавиша.F8);\n\tКлавишиПоКоду.Вставить(120, Клавиша.F9);\n\tКлавишиПоКоду.Вставить(121, Клавиша.F10);\n\tКлавишиПоКоду.Вставить(122, Клавиша.F11);\n\tКлавишиПоКоду.Вставить(123, Клавиша.F12);\n\t\n\tКлавишиПоКоду.Вставить(65 , Клавиша.A);\n\tКлавишиПоКоду.Вставить(66 , Клавиша.B);\n\tКлавишиПоКоду.Вставить(67 , Клавиша.C);\n\tКлавишиПоКоду.Вставить(68 , Клавиша.D);\n\tКлавишиПоКоду.Вставить(69 , Клавиша.E);\n\tКлавишиПоКоду.Вставить(70 , Клавиша.F);\n\tКлавишиПоКоду.Вставить(71 , Клавиша.G);\n\tКлавишиПоКоду.Вставить(72 , Клавиша.H);\n\tКлавишиПоКоду.Вставить(73 , Клавиша.I);\n\tКлавишиПоКоду.Вставить(74 , Клавиша.J);\n\tКлавишиПоКоду.Вставить(75 , Клавиша.K);\n\tКлавишиПоКоду.Вставить(76 , Клавиша.L);\n\tКлавишиПоКоду.Вставить(77 , Клавиша.M);\n\tКлавишиПоКоду.Вставить(78 , Клавиша.N);\n\tКлавишиПоКоду.Вставить(79 , Клавиша.O);\n\tКлавишиПоКоду.Вставить(80 , Клавиша.P);\n\tКлавишиПоКоду.Вставить(81 , Клавиша.Q);\n\tКлавишиПоКоду.Вставить(82 , Клавиша.R);\n\tКлавишиПоКоду.Вставить(83 , Клавиша.S);\n\tКлавишиПоКоду.Вставить(84 , Клавиша.T);\n\tКлавишиПоКоду.Вставить(85 , Клавиша.U);\n\tКлавишиПоКоду.Вставить(86 , Клавиша.V);\n\tКлавишиПоКоду.Вставить(87 , Клавиша.W);\n\tКлавишиПоКоду.Вставить(88 , Клавиша.X);\n\tКлавишиПоКоду.Вставить(89 , Клавиша.Y);\n\tКлавишиПоКоду.Вставить(90 , Клавиша.Z);\n\t\n\tКлавишиПоКоду.Вставить(96 , Клавиша.Num0);\n\tКлавишиПоКоду.Вставить(97 , Клавиша.Num1);\n\tКлавишиПоКоду.Вставить(98 , Клавиша.Num2);\n\tКлавишиПоКоду.Вставить(99 , Клавиша.Num3);\n\tКлавишиПоКоду.Вставить(100, Клавиша.Num4);\n\tКлавишиПоКоду.Вставить(101, Клавиша.Num5);\n\tКлавишиПоКоду.Вставить(102, Клавиша.Num6);\n\tКлавишиПоКоду.Вставить(103, Клавиша.Num7);\n\tКлавишиПоКоду.Вставить(104, Клавиша.Num8);\n\tКлавишиПоКоду.Вставить(105, Клавиша.Num9);\n\tКлавишиПоКоду.Вставить(106, Клавиша.NumMultiply);\n\tКлавишиПоКоду.Вставить(107, Клавиша.NumAdd);\n\tКлавишиПоКоду.Вставить(109, Клавиша.NumSubtract);\n\tКлавишиПоКоду.Вставить(110, Клавиша.NumDecimal);\n\tКлавишиПоКоду.Вставить(111, Клавиша.NumDivide);\n\t\t\n\tВозврат(КлавишиПоКоду[КодКнопки]);\n\t\nКонецФункции\n// BSLLS:MagicNumber-on\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ЦветИзHEXСтроки(ЦветСтрокой)\n\t\n\tАльфаКанал = Лев(ЦветСтрокой, 2);\n\tКрасный = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 3, 2));\n\tЗеленый = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 5, 2));\n\tСиний = ЧислоИзСтрокиHEX(Сред(ЦветСтрокой, 7, 2));\n\t\n\t// Здесь мы должны брать оформление не из стиля, а из полученного пакета,\n\t// т.к. рендеринг форм должен совпадать с ТСД.\n\t// BSLLS:StyleElementConstructors-off\n\tРезультат = Новый Цвет(Красный, Зеленый, Синий);\n\t// BSLLS:StyleElementConstructors-on\n\t\n\tВозврат Результат;\n\t\nКонецФункции // ПолучитьЦветПоСтроке()\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ЧислоИзСтрокиHEX(СтрокаHEX)\n\t\n\tБазаИсчисления = 16;\n\t\n\tРезультат = 0;\n\tДля Сч = 1 По СтрДлина(СтрокаHEX) Цикл \n\t\tЧисло = ПреобразоватьЦифруHEXвDEC(Сред(СтрокаHEX, Сч, 1));\n\t\tДля Степень = 1 По СтрДлина(СтрокаHEX) - Сч Цикл \n\t\t\tЧисло = Число * БазаИсчисления;\n\t\tКонецЦикла;\n\t\tРезультат = Результат + Число;\n\tКонецЦикла;\n\t\n\tВозврат Результат;\n\t\nКонецФункции // ПолучитьЧислоПоСтрокеHEX()\n\n&НаКлиентеНаСервереБезКонтекста\nФункция ПреобразоватьЦифруHEXвDEC(Цифра)\n\t\n\tЕсли Цифра = \"1\" Тогда \n\t\tВозврат 1;\n\tИначеЕсли Цифра = \"2\" Тогда \n\t\tВозврат 2;\n\tИначеЕсли Цифра = \"3\" Тогда \n\t\tВозврат 3;\n\tИначеЕсли Цифра = \"4\" Тогда \n\t\tВозврат 4;\n\tИначеЕсли Цифра = \"5\" Тогда \n\t\tВозврат 5;\n\tИначеЕсли Цифра = \"6\" Тогда \n\t\tВозврат 6;\n\tИначеЕсли Цифра = \"7\" Тогда \n\t\tВозврат 7;\n\tИначеЕсли Цифра = \"8\" Тогда \n\t\tВозврат 8;\n\tИначеЕсли Цифра = \"9\" Тогда \n\t\tВозврат 9;\n\tИначеЕсли Цифра = \"A\" Тогда \n\t\tВозврат 10;\n\tИначеЕсли Цифра = \"B\" Тогда \n\t\tВозврат 11;\n\tИначеЕсли Цифра = \"C\" Тогда \n\t\tВозврат 12;\n\tИначеЕсли Цифра = \"D\" Тогда \n\t\tВозврат 13;\n\tИначеЕсли Цифра = \"E\" Тогда \n\t\tВозврат 14;\n\tИначеЕсли Цифра = \"F\" Тогда \n\t\tВозврат 15;\n\tИначе\t\n\t\tВозврат 0;\n КонецЕсли;\n\t\t\nКонецФункции // ПреобразоватьЦифруHEXвDEC()\n\n&НаСервере\nФункция ЗаполнитьШаблонПараметрами(Знач Значение, СтруктураПараметров)\n\t\n\tДля Каждого текЭлемент Из СтруктураПараметров Цикл \n\t\tЗначение = СтрЗаменить(Значение, \"[##\" + текЭлемент.Ключ + \"##]\", текЭлемент.Значение);\n\tКонецЦикла;\n\t\n\tВозврат Значение;\n\t\nКонецФункции\n\n#КонецОбласти\n\n#Область РежимОтладки\n\n&НаКлиенте\nПроцедура ПриИзмененииРежимаОтладки()\n\t\n\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t \t\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура НастроитьФорму_РежимОтладки(ЭтотОбъект)\n\t\n\tЭтотОбъект.Элементы.ЖурналОтладкиПереключитьРежимОтладки.Пометка = ЭтотОбъект.ЖурналОтладкиВключен;\n\t\n\tЭтотОбъект.Элементы.ФормаПереключитьОтображениеОтладки.Пометка = ЭтотОбъект.ЖурналОтладкиОтображается;\n\tЭтотОбъект.Элементы.ГруппаЖурналОтладки.Видимость = ЭтотОбъект.ЖурналОтладкиОтображается;\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиОтображается Тогда\n\t\tЭтотОбъект.Ширина = 100;\n\tИначе\n\t\tЭтотОбъект.Ширина = 50;\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура Подключаемый_ОбновитьРежимОтладки() Экспорт\n\t\n\tЕсли Не ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\tВозврат;\n\tКонецЕсли;\n\t\n\tПрочитатьПараметрыОтладки(ЭтотОбъект);\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ПрочитатьПараметрыОтладки(ЭтотОбъект)\n\t\n\tКонтекстЭмулятора = ЭтотОбъект.КонтекстЭмулятора;\n\t\n\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\tЕсли ПараметрыОтладки = Неопределено Тогда\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект); // Запишем параметры по умолчанию\n\t\tПараметрыОтладки = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t \n\tКонецЕсли;\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиОтображается <> ПараметрыОтладки.ЖурналОтладкиОтображается Тогда\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиОтображается = ПараметрыОтладки.ЖурналОтладкиОтображается;\n\t\tНастроитьФорму_РежимОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\n\tЕсли ПараметрыОтладки.ОтладкаВключена <> ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\tЭтотОбъект.ЖурналОтладкиВключен = ПараметрыОтладки.ОтладкаВключена;\n\tКонецЕсли;\n\t\n\tЕсли ПараметрыОтладки.ОтладкаВключена И (ЭтотОбъект.ЖурналОтладкиВерсия <> ПараметрыОтладки.Версия) Тогда\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиВерсия = ПараметрыОтладки.Версия;\n\t\tДесериализоватьЖурналОтладки(ЭтотОбъект, ПараметрыОтладки.Журнал);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ЗаписатьПараметрыОтладки(ЭтотОбъект)\n\t\n\tПараметрыОтладки = Новый Структура;\n\tПараметрыОтладки.Вставить(\"ОтладкаВключена\", ЭтотОбъект.ЖурналОтладкиВключен);\n\tПараметрыОтладки.Вставить(\"ЖурналОтладкиОтображается\", ЭтотОбъект.ЖурналОтладкиОтображается);\n\tПараметрыОтладки.Вставить(\"Журнал\", СериализоватьЖурналОтладки(ЭтотОбъект));\n\tПараметрыОтладки.Вставить(\"Версия\", ЭтотОбъект.ЖурналОтладкиВерсия);\n\t\n\tПоместитьВоВременноеХранилище(ПараметрыОтладки, ЭтотОбъект.КонтекстЭмулятора.ХранилищеПараметровОтладки);\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nПроцедура ДобавитьСобытиеВЖурналОтладки(ЭтотОбъект, Тип, Наименование, МассивПараметров = Неопределено, ИзмененныеПараметры = Неопределено)\n\t\n\tЕсли ЭтотОбъект.ЖурналОтладкиВключен Тогда\n\t\t\n\t\tНоваяЗапись = ЭтотОбъект.ЖурналОтладки.Вставить(0);\n\t\tНоваяЗапись.Время = ТекущаяДатаСеанса();\n\t\tНоваяЗапись.Тип = Тип;\n\t\tНоваяЗапись.Наименование = Наименование;\n\t\tНоваяЗапись.ИзмененныеПараметры = ИзмененныеПараметры;\n\t\t\n\t\tКоличествоПараметров = 0;\n\t\tЕсли МассивПараметров <> Неопределено Тогда\n\t\t\tКоличествоПараметров = МассивПараметров.Количество();\n\t\tКонецЕсли;\n\t\tДля Сч = 1 По КоличествоПараметров Цикл\n\t\t\tНоваяЗапись[\"Параметр\" + Сч] = МассивПараметров[Сч - 1];\n\t\tКонецЦикла;\n\t\t\n\t\tЭтотОбъект.ЖурналОтладкиВерсия = ЭтотОбъект.ЖурналОтладкиВерсия + 1;\n\t\t\n\t\tЗаписатьПараметрыОтладки(ЭтотОбъект);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаКлиентеНаСервереБезКонтекста\nФункция СериализоватьЖурналОтладки(ЭтотОбъект)\n\t\n\tСписокРеквизитов = \"Время, Длительность, Тип, Наименование, Параметр1, Параметр2, Параметр3, ИзмененныеПараметры\";\n\tРезультат = Новый Массив;\n\t\n\tДля Каждого СтрокаЖурнала Из ЭтотОбъект.ЖурналОтладки Цикл\n\t\t\n\t\tСтруктураСтроки = Новый Структура(СписокРеквизитов);\n\t\tЗаполнитьЗначенияСвойств(СтруктураСтроки, СтрокаЖурнала);\n\t\tРезультат.Добавить(СтруктураСтроки);\n\t\t\n\tКонецЦикла;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиентеНаСервереБезКонтекста\nПроцедура ДесериализоватьЖурналОтладки(ЭтотОбъект, СохраненныйЖурналОтладки)\n\t\n\tЭтотОбъект.ЖурналОтладки.Очистить();\n\t\n\tДля Каждого СтрокаЖурнала Из СохраненныйЖурналОтладки Цикл\n\t\tЗаполнитьЗначенияСвойств(ЭтотОбъект.ЖурналОтладки.Добавить(), СтрокаЖурнала);\n\tКонецЦикла;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n&НаСервере\nПроцедура ПодготовитьРеквизиты(ПоследовательностьЭлементов, МассивРеквизитов)\n\t\n\tТип_DateTime = Новый ОписаниеТипов(\"Дата\", , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));\n\tТип_int = Новый ОписаниеТипов(\"Число\", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный));\n\tТип_float = Новый ОписаниеТипов(\"Число\", Новый КвалификаторыЧисла(15, 6, ДопустимыйЗнак.Неотрицательный));\n\tТип_Date = Новый ОписаниеТипов(\"Дата\", , Новый КвалификаторыДаты(ЧастиДаты.Дата));\n\tТип_string = Новый ОписаниеТипов(\"Строка\");\n\t\n\tДля Сч = 0 По ПоследовательностьЭлементов.Количество() - 1 Цикл \n\t\t\n\t\tтекЭлемент = ПоследовательностьЭлементов.ПолучитьЗначение(Сч);\n\t\tТипЭлемента = ПоследовательностьЭлементов.ПолучитьСвойство(Сч).Имя;\n\t\t\n\t\tЕсли ТипЭлемента = \"Label\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Новый ОписаниеТипов(\"Строка\"));\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tЕсли текЭлемент.Template Тогда \n\t\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\t\tНоваяСтрока.Значение = текЭлемент.Value;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"DateTime\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_DateTime);\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\tНоваяСтрока.Значение = \"[##\" + текЭлемент.Name + \"##]\";\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TextBox\" Тогда \n\t\t\tЕсли текЭлемент.TypeValue = \"int\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_int);\n\t\t\tИначеЕсли текЭлемент.TypeValue = \"float\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_float);\n\t\t\tИначеЕсли текЭлемент.TypeValue = \"Date\" Тогда \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_Date);\n\t\t\tИначе\t\n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Реквизит\" + текЭлемент.Name, Тип_string);\n\t\t\tКонецЕсли;\t\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tНоваяСтрока = ТаблицаЗначенийРеквизитов.Добавить();\n\t\t\tНоваяСтрока.ИмяРеквизита = \"Реквизит\" + текЭлемент.Name;\n\t\t\tНоваяСтрока.Значение = \"[##\" + текЭлемент.Name + \"##]\";\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"TableItems\" Тогда \n\t\t\tРеквизит = Новый РеквизитФормы(\"Таблица\" + текЭлемент.Name, Новый ОписаниеТипов(\"ТаблицаЗначений\"));\n\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\n\t\t\tСч1 = 1;\n\t\t\tДля Каждого текКолонка Из текЭлемент.Columns.Column Цикл \n\t\t\t\tРеквизит = Новый РеквизитФормы(\"Колонка\" + Сч1, Тип_string, \"Таблица\" + текЭлемент.Name, текКолонка.Name);\n\t\t\t\tМассивРеквизитов.Добавить(Реквизит);\n\t\t\t\t\n\t\t\t\tСч1 = Сч1 + 1;\n\t\t\tКонецЦикла;\n\t\t\t\n\t\tИначеЕсли ТипЭлемента = \"Line\" Тогда \n\t\t\tПодготовитьРеквизиты(текЭлемент.Последовательность(), МассивРеквизитов);\n\t\t\t\n\t\tИначе\n\t\t\tПродолжить;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаСервере\nПроцедура ЗаполнитьРеквизитыФормыПараметрами()\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(КонтекстЭмулятора.ХранилищеПараметровТСД);\n\tЕсли СтруктураПараметров = Неопределено Тогда \n\t\tСтруктураПараметров = Новый Структура;\n\tКонецЕсли;\n\t\n\tДля Каждого Реквизит Из ТаблицаЗначенийРеквизитов Цикл\n\t\t\n\t\tЗначение = ЗаполнитьШаблонПараметрами(Реквизит.Значение, СтруктураПараметров);\n\t\t\n\t\tЕсли Реквизит.Кнопка Тогда \n\t\t\t\n\t\t\tЭлементы[Реквизит.ИмяРеквизита].Заголовок = Значение;\n\t\t\tПродолжить;\n\t\t\t\n\t\tКонецЕсли;\n\t\t\t\n\t\tЕсли ТипЗнч(ЭтотОбъект[Реквизит.ИмяРеквизита]) = Тип(\"Дата\") Тогда \n\t\t\t\n\t\t\tПопытка\n\t\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = Дата(Сред(Значение, 7, 4) + Сред(Значение, 4, 2) + Лев(Значение, 2));\n\t\t\tИсключение\t\n\t\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = '00010101';\n\t\t\tКонецПопытки;\n\t\t\t\n\t\tИначеЕсли ТипЗнч(ЭтотОбъект[Реквизит.ИмяРеквизита]) = Тип(\"Число\") Тогда \n\t\t\t\n\t\t\tОписаниеТипа = Новый ОписаниеТипов(\"Число\");\n\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = ОписаниеТипа.ПривестиЗначение(Значение);\n\t\t\t\n\t\tИначе\t\n\t\t\t\n\t\t\tЭтотОбъект[Реквизит.ИмяРеквизита] = Значение;\n\t\t\t\n\t\t\tЭлементФормы = Элементы[Реквизит.ИмяРеквизита];\n\t\t\tЕсли ЭлементФормы.Вид = ВидПоляФормы.ПолеНадписи Тогда\n\t\t\t\tКоличествоСтрок = СтрРазделить(Значение, Символы.ПС, Истина).Количество();\n\t\t\t\tЭлементФормы.Высота = КоличествоСтрок;\n\t\t\t\tЭлементФормы.РастягиватьПоВертикали = Ложь;\n\t\t\tКонецЕсли;\n\t\t\t\n\t\tКонецЕсли;\t\n\t\t\n\tКонецЦикла;\t\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбновитьСостояние() Экспорт\n\t\n\tАктивизировать();\n\t\n\tЗаполнитьРеквизитыФормыПараметрами();\n\t\n\tПодключитьОбработчикОжидания(\"АктивироватьЭлемент\", 0.1, Истина);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура АктивироватьЭлемент()\n\n\tЕсли ЗначениеЗаполнено(ОсновнойЭлемент) Тогда \n\t\tТекущийЭлемент = Элементы.Найти(ОсновнойЭлемент);\n\tИначе\n\t\tТекущийЭлемент = Элементы.ФормаВвестиШтрихкод;\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n&НаКлиенте\nФункция ПараметрыОткрытияФормыОперации(ИмяСтраницы, Операция, Страница, СтрокаXML = \"\")\n\t\n\tРезультат = Новый Структура();\n\tРезультат.Вставить(\"НомерУстройства\", НомерУстройства);\n\tРезультат.Вставить(\"КонтекстЭмулятора\", КонтекстЭмулятора);\n\t\t\n\tРезультат.Вставить(\"ИмяСтраницы\", ИмяСтраницы);\n\tРезультат.Вставить(\"Операция\", Операция);\n\tРезультат.Вставить(\"Страница\", Страница);\n\tЕсли Не ПустаяСтрока(СтрокаXML) Тогда\n\t\tРезультат.Вставить(\"СтрокаXML\", СтрокаXML);\n\tКонецЕсли;\n\t\n\tВозврат(Результат);\n\t\nКонецФункции\n\n&НаКлиенте\nФункция ПолноеИмяФормы(ИмяФормы)\n\t\n\tЕсли КонтекстЭмулятора.РежимВнешнейОбработки Тогда\n\t\tПрефиксМетаданных = \"ВнешняяОбработка\";\n\tИначе\n\t\tПрефиксМетаданных = \"Обработка\";\n\tКонецЕсли;\n\t\n\tРезультат = СтрШаблон(\"%1.ЭмуляторТСД.Форма.%2\", ПрефиксМетаданных, ИмяФормы);\n\tВозврат Результат;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\ФормаПросмотрДанных\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\ФормаПросмотрДанных\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/ceb39267c6e5a861590035ceec23ba4fe159661c/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%94%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%5CForm.obj.bsl",
+ "size": 4912,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tНомерУстройства = Параметры.НомерУстройства;\n\t\n\tЗапрос = Новый Запрос;\n\tЗапрос.Текст = \"ВЫБРАТЬ\n\t |\tусТекущееДействиеПользователяТСД.Данные КАК Данные\n\t |ИЗ\n\t |\tРегистрСведений.усТекущееДействиеПользователяТСД КАК усТекущееДействиеПользователяТСД\n\t |ГДЕ\n\t |\tусТекущееДействиеПользователяТСД.НомерУстройства = &НомерУстройства\";\n\tЗапрос.УстановитьПараметр(\"НомерУстройства\", НомерУстройства);\n\tВыборка = Запрос.Выполнить().Выбрать();\n\t\n\tЕсли Выборка.Следующий() Тогда\n\t\t\n\t\tАдресХранилищаДанных = ПоместитьВоВременноеХранилище(Выборка.Данные.Получить(), Объект);\t\n\t\t\n\tКонецЕсли;\t\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаДанных);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ТолькоЗаполненныеПриИзменении(Элемент)\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаДанных);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗаполнитьПараметрыФормы(АдресХранилищаДанных)\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(АдресХранилищаДанных);\n\t\n\tПараметрыФормы.Очистить();\n\t\n\tДля Каждого Параметр Из СтруктураПараметров Цикл \n\t\tЕсли Не ТолькоЗаполненные ИЛИ ЗначениеЗаполнено(Параметр.Значение) Тогда\n\t\t\tНоваяСтрока = ПараметрыФормы.Добавить();\n\t\t\tНоваяСтрока.Ключ = Параметр.Ключ;\n\t\t\tНоваяСтрока.Значение = Параметр.Значение;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tПараметрыФормы.Сортировать(\"Ключ\");\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ДанныеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)\n\t\n\tДанныеСтроки = Элементы.ПараметрыФормы.ТекущиеДанные;\n\t\n\tЕсли ДанныеСтроки.Значение = \"ТаблицаЗначений\" Тогда\n\t\t\n\t\tПараметрыФормы = Новый Структура();\n\t\tПараметрыФормы.Вставить(\"НомерУстройства\", \tНомерУстройства);\n\t\tПараметрыФормы.Вставить(\"Ключ\", \t\t\tДанныеСтроки.Ключ);\n\t\t\n\t\tОткрытьФорму(\"РегистрСведений.усТекущееДействиеПользователяТСД.Форма.ФормаВыводаТаблиц\", ПараметрыФормы, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);\t\t\n\t\t\n\tИначе\n\t\t\n\t\tЗначениеДанных = ПрочитатьДанныеНаСервере(НомерУстройства, ДанныеСтроки.Ключ);\t\n\t\tПоказатьЗначение(Неопределено, ЗначениеДанных);\n\t\t\n\tКонецЕсли;\n\t\nКонецПроцедуры\n\n&НаСервереБезКонтекста\nФункция ПрочитатьДанныеНаСервере(НомерУстройства, Ключ)\n\t\n\tтекЗапись = РегистрыСведений.усТекущееДействиеПользователяТСД.СоздатьМенеджерЗаписи();\n\tтекЗапись.НомерУстройства = НомерУстройства;\n\tтекЗапись.Прочитать();\n\t\n\tПопытка\n\t\tВозврат текЗапись.Данные.Получить()[Ключ];\t\t\n\tИсключение\n\t\tВозврат Неопределено;\t\t\n\tКонецПопытки;\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\ФормаПросмотрИзмененныхПараметров\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\ФормаПросмотрИзмененныхПараметров\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/ff3410141db686025fe21f44f915b7a16125f433/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2%5CForm.obj.bsl",
+ "size": 1833,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tМассивИзмененныхПараметров = ДесериализацияJSON(Параметры.ИзмененныеПараметры);\n\t\n\tДля Каждого Параметр Из МассивИзмененныхПараметров Цикл\n\t\t\n\t\tНоваяСтрока = ИзмененныеПараметры.Добавить();\n\t\tНоваяСтрока.Параметр = Параметр.Параметр;\n\t\tНоваяСтрока.Старое = Параметр.Старое;\n\t\tНоваяСтрока.Новое = Параметр.Новое;\n\t\t\n\tКонецЦикла;\n\t\n\tИзмененныеПараметры.Сортировать(\"Параметр\");\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервереБезКонтекста\nФункция ДесериализацияJSON(Знач СтрокаJSON, Знач СвойстваСДатой = Неопределено, СчитатьВСоответствие = Ложь)\n\t\n\tЧтениеJSON = Новый ЧтениеJSON;\n\tЧтениеJSON.УстановитьСтроку(СтрокаJSON);\n\tСчитанныйОбъект = ПрочитатьJSON(ЧтениеJSON, СчитатьВСоответствие, СвойстваСДатой);\n\t\n\tВозврат (СчитанныйОбъект);\n\t\nКонецФункции\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\ФормаПросмотрКода\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\ФормаПросмотрКода\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/d15bcb6bed28affa5c0186f40289cdf9dc099f31/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%9A%D0%BE%D0%B4%D0%B0%5CForm.obj.bsl",
+ "size": 518,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tТекст = Параметры.Текст;\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\ФормаПросмотрПараметров\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\ФормаПросмотрПараметров\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/38b2d50ba02e91e93f0433f45a3d0d28a65c6807/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%9F%D1%80%D0%BE%D1%81%D0%BC%D0%BE%D1%82%D1%80%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2%5CForm.obj.bsl",
+ "size": 1985,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tАдресХранилищаПараметров = Параметры.АдресХранилищаПараметров;\n\tЗаполнитьПараметрыФормы(АдресХранилищаПараметров);\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ТолькоЗаполненныеПриИзменении(Элемент)\n\t\n\tЗаполнитьПараметрыФормы(АдресХранилищаПараметров);\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область СлужебныеПроцедурыИФункции\n\n&НаСервере\nПроцедура ЗаполнитьПараметрыФормы(АдресХранилищаПараметров)\n\t\n\tСтруктураПараметров = ПолучитьИзВременногоХранилища(АдресХранилищаПараметров);\n\t\n\tПараметрыФормы.Очистить();\n\t\n\tДля Каждого Параметр Из СтруктураПараметров Цикл \n\t\tЕсли Не ТолькоЗаполненные ИЛИ ЗначениеЗаполнено(Параметр.Значение) Тогда\n\t\t\tНоваяСтрока = ПараметрыФормы.Добавить();\n\t\t\tНоваяСтрока.Ключ = Параметр.Ключ;\n\t\t\tНоваяСтрока.Значение = Параметр.Значение;\n\t\tКонецЕсли;\t\n\tКонецЦикла;\n\t\n\tПараметрыФормы.Сортировать(\"Ключ\");\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ },
+ "are_bsl\\unpack\\726598761\\Form\\ФормаСообщений\\Form.obj.bsl": {
+ "filename": "are_bsl\\unpack\\726598761\\Form\\ФормаСообщений\\Form.obj.bsl",
+ "type": "text/plain",
+ "language": "1C Enterprise",
+ "raw_url": "https://gist.githubusercontent.com/Untru/a8ad35e99ff9f3aafd2b9c4364ae91b6/raw/c0d319ba09c434734e5afef3679da32f49e0bb85/are_bsl%5Cunpack%5C726598761%5CForm%5C%D0%A4%D0%BE%D1%80%D0%BC%D0%B0%D0%A1%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B9%5CForm.obj.bsl",
+ "size": 1011,
+ "truncated": false,
+ "content": "#Область ОбработчикиСобытийФормы\n\n&НаСервере\nПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)\n\t\n\tЭлементы.ТекстСообщения.Заголовок = Параметры.ТекстСообщения;\n\t\nКонецПроцедуры\n\n&НаКлиенте\nПроцедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)\n\t\n\tЕсли ИмяСобытия = \"НовоеСообщениеСтатуса\" И Источник = \"ЭмуляторТСД\" Тогда\n\t\t\n\t\tЭлементы.ТекстСообщения.Заголовок = Параметр;\n\t\t\n\tКонецЕсли;\t\n\t\nКонецПроцедуры\n\n#КонецОбласти\n\n#Область ОбработчикиКомандФормы\n\n&НаКлиенте\nПроцедура КомандаОК(Команда)\n\t\n\tЗакрыть();\n\t\nКонецПроцедуры\n\n#КонецОбласти",
+ "encoding": "utf-8"
+ }
+ },
+ "public": false,
+ "created_at": "2025-07-09T19:17:05Z",
+ "updated_at": "2025-07-09T19:37:07Z",
+ "description": "Gist создан из 1С 09.07.2025 22:37:06",
+ "comments": 0,
+ "user": null,
+ "comments_enabled": true,
+ "comments_url": "https://api.github.com/gists/a8ad35e99ff9f3aafd2b9c4364ae91b6/comments",
+ "owner": {
+ "login": "Untru",
+ "id": 60393326,
+ "node_id": "MDQ6VXNlcjYwMzkzMzI2",
+ "avatar_url": "https://avatars.githubusercontent.com/u/60393326?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Untru",
+ "html_url": "https://github.com/Untru",
+ "followers_url": "https://api.github.com/users/Untru/followers",
+ "following_url": "https://api.github.com/users/Untru/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Untru/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Untru/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Untru/subscriptions",
+ "organizations_url": "https://api.github.com/users/Untru/orgs",
+ "repos_url": "https://api.github.com/users/Untru/repos",
+ "events_url": "https://api.github.com/users/Untru/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Untru/received_events",
+ "type": "User",
+ "user_view_type": "public",
+ "site_admin": false
+ },
+ "forks": [],
+ "history": [
+ {
+ "user": {
+ "login": "Untru",
+ "id": 60393326,
+ "node_id": "MDQ6VXNlcjYwMzkzMzI2",
+ "avatar_url": "https://avatars.githubusercontent.com/u/60393326?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Untru",
+ "html_url": "https://github.com/Untru",
+ "followers_url": "https://api.github.com/users/Untru/followers",
+ "following_url": "https://api.github.com/users/Untru/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Untru/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Untru/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Untru/subscriptions",
+ "organizations_url": "https://api.github.com/users/Untru/orgs",
+ "repos_url": "https://api.github.com/users/Untru/repos",
+ "events_url": "https://api.github.com/users/Untru/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Untru/received_events",
+ "type": "User",
+ "user_view_type": "public",
+ "site_admin": false
+ },
+ "version": "4b83755d7d747a94ac79c388e27122db29eb508e",
+ "committed_at": "2025-07-09T19:37:07Z",
+ "change_status": {
+ "total": 4081,
+ "additions": 4081,
+ "deletions": 0
+ },
+ "url": "https://api.github.com/gists/a8ad35e99ff9f3aafd2b9c4364ae91b6/4b83755d7d747a94ac79c388e27122db29eb508e"
+ },
+ {
+ "user": {
+ "login": "Untru",
+ "id": 60393326,
+ "node_id": "MDQ6VXNlcjYwMzkzMzI2",
+ "avatar_url": "https://avatars.githubusercontent.com/u/60393326?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Untru",
+ "html_url": "https://github.com/Untru",
+ "followers_url": "https://api.github.com/users/Untru/followers",
+ "following_url": "https://api.github.com/users/Untru/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Untru/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Untru/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Untru/subscriptions",
+ "organizations_url": "https://api.github.com/users/Untru/orgs",
+ "repos_url": "https://api.github.com/users/Untru/repos",
+ "events_url": "https://api.github.com/users/Untru/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Untru/received_events",
+ "type": "User",
+ "user_view_type": "public",
+ "site_admin": false
+ },
+ "version": "8f38768e1b8e341b16e76bb0af597d7750940675",
+ "committed_at": "2025-07-09T19:26:40Z",
+ "change_status": {
+ "total": 4081,
+ "additions": 4081,
+ "deletions": 0
+ },
+ "url": "https://api.github.com/gists/a8ad35e99ff9f3aafd2b9c4364ae91b6/8f38768e1b8e341b16e76bb0af597d7750940675"
+ },
+ {
+ "user": {
+ "login": "Untru",
+ "id": 60393326,
+ "node_id": "MDQ6VXNlcjYwMzkzMzI2",
+ "avatar_url": "https://avatars.githubusercontent.com/u/60393326?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Untru",
+ "html_url": "https://github.com/Untru",
+ "followers_url": "https://api.github.com/users/Untru/followers",
+ "following_url": "https://api.github.com/users/Untru/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Untru/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Untru/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Untru/subscriptions",
+ "organizations_url": "https://api.github.com/users/Untru/orgs",
+ "repos_url": "https://api.github.com/users/Untru/repos",
+ "events_url": "https://api.github.com/users/Untru/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Untru/received_events",
+ "type": "User",
+ "user_view_type": "public",
+ "site_admin": false
+ },
+ "version": "5b764d3bfe389f3933061ec0b40227f00f0dc67f",
+ "committed_at": "2025-07-09T19:17:06Z",
+ "change_status": {
+ "total": 49,
+ "additions": 49,
+ "deletions": 0
+ },
+ "url": "https://api.github.com/gists/a8ad35e99ff9f3aafd2b9c4364ae91b6/5b764d3bfe389f3933061ec0b40227f00f0dc67f"
+ },
+ {
+ "user": {
+ "login": "Untru",
+ "id": 60393326,
+ "node_id": "MDQ6VXNlcjYwMzkzMzI2",
+ "avatar_url": "https://avatars.githubusercontent.com/u/60393326?v=4",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/Untru",
+ "html_url": "https://github.com/Untru",
+ "followers_url": "https://api.github.com/users/Untru/followers",
+ "following_url": "https://api.github.com/users/Untru/following{/other_user}",
+ "gists_url": "https://api.github.com/users/Untru/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/Untru/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/Untru/subscriptions",
+ "organizations_url": "https://api.github.com/users/Untru/orgs",
+ "repos_url": "https://api.github.com/users/Untru/repos",
+ "events_url": "https://api.github.com/users/Untru/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/Untru/received_events",
+ "type": "User",
+ "user_view_type": "public",
+ "site_admin": false
+ },
+ "version": "728bdac8420791a4e96e46b0f22f0a3810bad856",
+ "committed_at": "2025-07-09T19:17:04Z",
+ "change_status": {
+ "total": 4081,
+ "additions": 4081,
+ "deletions": 0
+ },
+ "url": "https://api.github.com/gists/a8ad35e99ff9f3aafd2b9c4364ae91b6/728bdac8420791a4e96e46b0f22f0a3810bad856"
+ }
+ ],
+ "truncated": false
}
\ No newline at end of file
diff --git "a/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\232\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\320\260.os" "b/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\232\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\320\260.os"
index 6e640ce..ffedf7b 100644
--- "a/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\232\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\320\260.os"
+++ "b/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\232\320\273\320\260\320\262\320\270\320\260\321\202\321\203\321\200\320\260.os"
@@ -6,6 +6,9 @@
&Пластилин
Перем МенеджерПубликаций;
+&ЛогПубликация
+Перем Лог;
+
&Желудь
&Прозвище("Команда")
Процедура ПриСозданииОбъекта()
@@ -21,29 +24,31 @@
Процедура Обработать(Сообщение) Экспорт
- Сообщить(OPI_Инструменты.JSONСтрокой(Сообщение, , Ложь, Ложь));
+ Лог.Отладка(OPI_Инструменты.JSONСтрокой(Сообщение, , Ложь, Ложь));
НомерСообщения = Сообщение["update_id"];
СообщениеНажатиеКнопки = Сообщение["callback_query"]["message"];
ЧатИД = СообщениеНажатиеКнопки["chat"]["id"];
- ПользовательИД = СообщениеНажатиеКнопки["from"]["id"];
+ ИДПользователя = СообщениеНажатиеКнопки["from"]["id"];
Клавиши = СообщениеНажатиеКнопки["reply_markup"]["inline_keyboard"];
КнопкаНовая = Клавиши[Клавиши.ВГраница()][0]["callback_data"];
- ИнформацияОФайле = МенеджерПубликаций.ИнформацияОФайлеПоИдентификатору(СтрЗаменить(КнопкаНовая, "NEW_", ""));
+ ИнформацияОФайле = МенеджерПубликаций.ИнформацияОФайлеПоИдентификатору(Число(СтрЗаменить(КнопкаНовая, "NEW_", "")));
НажатаяКнопка = Сообщение["callback_query"]["data"];
ДвоичныеДанные = OPI_Telegram.СкачатьФайл(Токен, ИнформацияОФайле.ИДФайла);
ДанныеДляРазбораФайла = МенеджерПубликаций.НовыйДанныеДляРазбораФайла();
- Если КнопкаНовая = НажатаяКнопка Тогда
+ Если КнопкаНовая <> НажатаяКнопка Тогда
+ ИнформацияОПубликации = МенеджерПубликаций.ИнформацияОПубликацииПоИдентификатору(Число(НажатаяКнопка));
ДанныеДляРазбораФайла.Обновление = Истина;
+ ДанныеДляРазбораФайла.ИДПубликации = ИнформацияОПубликации.ИДПубликации;
КонецЕсли;
- ДанныеДляРазбораФайла.ПользовательИД = ПользовательИД;
- ДанныеДляРазбораФайла.ИДПубликации = НомерСообщения;
+ ДанныеДляРазбораФайла.ИДПользователя = ИДПользователя;
+ ДанныеДляРазбораФайла.НомерСеанса = НомерСообщения;
ДанныеДляРазбораФайла.ДвоичныеДанные = ДвоичныеДанные;
ДанныеДляРазбораФайла.ИДФайла = ИнформацияОФайле.ИДФайла;
ДанныеДляРазбораФайла.ИмяФайла = ИнформацияОФайле.ИмяФайла;
diff --git "a/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\244\320\260\320\271\320\273.os" "b/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\244\320\260\320\271\320\273.os"
index 29c7f2a..4dca396 100644
--- "a/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\244\320\260\320\271\320\273.os"
+++ "b/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\244\320\260\320\271\320\273.os"
@@ -27,7 +27,7 @@
Процедура Обработать(Сообщение) Экспорт
ЧатИД = Сообщение["message"]["chat"]["id"];
- ПользовательИД = Сообщение["message"]["from"]["id"];
+ ИДПользователя = Сообщение["message"]["from"]["id"];
ИмяФайла = Сообщение["message"]["document"]["file_name"];
ИДФайла = Сообщение["message"]["document"]["file_id"];
@@ -39,7 +39,7 @@
КонецПопытки;
ОтправляемыйФайл = МенеджерПубликаций.НовыйОтправляемыйФайл();
- ОтправляемыйФайл.ПользовательИД = ПользовательИД;
+ ОтправляемыйФайл.ИДПользователя = ИДПользователя;
ОтправляемыйФайл.ИмяФайла = ИмяФайла;
ОтправляемыйФайл.ИДФайла = ИДФайла;
МенеджерПубликаций.СохранитьИнформациюОФайле(ОтправляемыйФайл);
@@ -59,9 +59,9 @@
НомерСообщения = Сообщение["update_id"];
ДанныеДляРазбораФайла = МенеджерПубликаций.НовыйДанныеДляРазбораФайла();
- ДанныеДляРазбораФайла.ПользовательИД = ПользовательИД;
+ ДанныеДляРазбораФайла.ИДПользователя = ИДПользователя;
ДанныеДляРазбораФайла.ИмяФайла = ИмяФайла;
- ДанныеДляРазбораФайла.ИДПубликации = НомерСообщения;
+ ДанныеДляРазбораФайла.НомерСеанса = НомерСообщения;
ДанныеДляРазбораФайла.ДвоичныеДанные = ДвоичныеДанные;
ДанныеДляРазбораФайла.ИДФайла = ИДФайла;
ДанныеДляРазбораФайла.Обновление = Ложь;
diff --git "a/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274\320\274\320\221\320\276\321\202.os" "b/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274\320\274\320\221\320\276\321\202.os"
index 962c1f2..bcbdc33 100644
--- "a/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274\320\274\320\221\320\276\321\202.os"
+++ "b/src/controller/\320\232\320\273\320\260\321\201\321\201\321\213/\320\242\320\265\320\273\320\265\320\263\321\200\320\260\320\274\320\274\320\221\320\276\321\202.os"
@@ -2,6 +2,7 @@
&Деталька("TELEGRAMM.TOKEN")
Перем Токен;
+
&Пластилин
Перем Поделка;
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\202\320\276\321\200.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\202\320\276\321\200.os"
index bc5b082..569cfd3 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\202\320\276\321\200.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\320\272\320\276\320\274\320\277\320\270\320\273\321\217\321\202\320\276\321\200.os"
@@ -1,37 +1,33 @@
#Использовать 1commands
&Деталька("UNPACK")
-Перем СпособРазбора; //py, exe
+Перем СпособРазбора; //Метод, разбирать через exe или через pythot, варианты exe, py
&ЛогПубликация
Перем Лог;
-&Пластилин
-Перем КомандаЗапуска;
-
&Желудь
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Процедура РазобратьФайл(ПутьКФайлу, ПапкаРазбора) Экспорт
-
- // Команда = Новый Команда;
-
- // Если СпособРазбора = "py" Тогда
- // ИсполняющийСкрипт = ТекущийКаталог() + "/src/v8unpack/v8u.py";
- // Команда.УстановитьКоманду("python3");
- // Команда.ДобавитьПараметр(ИсполняющийСкрипт);
- // Иначе
- // Команда.УстановитьКоманду("src/v8unpack/v8unpack.exe");
- // Команда.ДобавитьПараметр("-E");
- // КонецЕсли;
-
- КомандаЗапуска.ДобавитьПараметр(КомандаЗапуска.ОбернутьВКавычки(ПутьКФайлу));
- КомандаЗапуска.ДобавитьПараметр(ПапкаРазбора);
- КодВозврата = КомандаЗапуска.Исполнить();
- Лог.Отладка(КомандаЗапуска.ПолучитьВывод());
+ Команда = Новый Команда;
+
+ Если СпособРазбора = "py" Тогда
+ ИсполняющийСкрипт = ТекущийКаталог() + "/src/v8unpack/v8u.py";
+ Команда.УстановитьКоманду("python3");
+ Команда.ДобавитьПараметр(ИсполняющийСкрипт);
+ Иначе
+ Команда.УстановитьКоманду("src/v8unpack/v8unpack.exe");
+ Команда.ДобавитьПараметр("-E");
+ КонецЕсли;
+ Команда.ДобавитьПараметр(Команда.ОбернутьВКавычки(ПутьКФайлу));
+ Команда.ДобавитьПараметр(ПапкаРазбора);
+
+ КодВозврата = Команда.Исполнить();
+ Лог.Отладка(Команда.ПолучитьВывод());
Лог.Отладка(КодВозврата);
КонецПроцедуры
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\206\320\270\320\271.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\206\320\270\320\271.os"
index 842fab6..5a3be67 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\206\320\270\320\271.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\206\320\270\320\271.os"
@@ -16,6 +16,9 @@
&Пластилин
Перем ХранилищеСущностейИсторияФайлов;
+&ЛогПубликация
+Перем Лог;
+
&Желудь
Процедура ПриСозданииОбъекта()
@@ -30,17 +33,20 @@
//
Функция ОбработатьФайл(ДанныеДляРазбораФайла) Экспорт
- Каталог = "unpack/" + ДанныеДляРазбораФайла.ИДПубликации;
- КаталогИсходник = "bin/" + ДанныеДляРазбораФайла.ИДПубликации;
+ Каталог = "unpack/" + ДанныеДляРазбораФайла.НомерСеанса;
+ КаталогИсходник = "bin/" + ДанныеДляРазбораФайла.НомерСеанса;
СоздатьКаталог(Каталог);
СоздатьКаталог(КаталогИсходник);
ПутьКФайлу = СтрШаблон("%1/%2", КаталогИсходник, ДанныеДляРазбораФайла.ИмяФайла);
-
+ Сообщить("Записываем файл");
+ Лог.Информация("Записываем файл");
ДанныеДляРазбораФайла.ДвоичныеДанные.Записать(ПутьКФайлу);
-
+ Лог.Информация("Разбираем файл");
Декомпилятор.РазобратьФайл(ПутьКФайлу, Каталог);
+ Лог.Информация("Публикуем");
ТекстыМодулей = РаботаСМодулями.ТекстыМодулей(Каталог);
ДанныеПубликации = Опубликовать(ТекстыМодулей, ДанныеДляРазбораФайла);
+ ДанныеДляРазбораФайла.ИДПубликации = ДанныеПубликации.ИДПубликации;
СохранитьЗаписьОФайле(ДанныеДляРазбораФайла);
УдалитьФайлы(Каталог);
@@ -63,7 +69,7 @@
ИдентификаторИДФайла = ИнформацияОФайлеПоИД(ОтправляемыйФайл.ИДФайла);
ПрошлыеПубликации = Новый Соответствие;
- Сущности = НайтиЗаписьОФайле(ОтправляемыйФайл.ПользовательИД, ОтправляемыйФайл.ИмяФайла);
+ Сущности = НайтиЗаписьОФайле(ОтправляемыйФайл.ИДПользователя, ОтправляемыйФайл.ИмяФайла);
Если Сущности.Количество() Тогда
Для Каждого Сущность Из Сущности Цикл
@@ -81,7 +87,7 @@
Функция НовыйОтправляемыйФайл() Экспорт
Результат = Новый Структура();
- Результат.Вставить("ПользовательИД");
+ Результат.Вставить("ИДПользователя");
Результат.Вставить("ИмяФайла");
Результат.Вставить("ИДФайла");
Возврат Результат;
@@ -91,8 +97,9 @@
Функция НовыйДанныеДляРазбораФайла() Экспорт
Результат = Новый Структура();
- Результат.Вставить("ПользовательИД");
+ Результат.Вставить("ИДПользователя");
Результат.Вставить("ИмяФайла");
+ Результат.Вставить("НомерСеанса");
Результат.Вставить("ИДПубликации");
Результат.Вставить("ДвоичныеДанные");
Результат.Вставить("Обновление");
@@ -112,7 +119,7 @@
Продолжить;
КонецЕсли;
- Ссылки = Публикатор.Значение.Опубликовать(ТекстыМодулей);
+ Ссылки = Публикатор.Значение.Опубликовать(ТекстыМодулей, ДанныеДляРазбораФайла);
ТекстыОтправки = Новый Массив;
Если Ссылки.Количество() Тогда
Для Каждого Ссылка Из Ссылки Цикл
@@ -137,10 +144,10 @@
КонецПроцедуры
-Функция НайтиЗаписьОФайле(ПользовательИД, ИмяФайла)
+Функция НайтиЗаписьОФайле(ИДПользователя, ИмяФайла)
Отбор = Новый Соответствие;
- Отбор.Вставить("ПользовательИД", ПользовательИД);
+ Отбор.Вставить("ИДПользователя", ИДПользователя);
Отбор.Вставить("ИмяФайла", ИмяФайла);
Сущности = МенеджерСущностей.Получить(Тип("ИсторияПубликаций"), Отбор);
Возврат Сущности;
@@ -156,6 +163,14 @@
КонецФункции
+Функция ИнформацияОПубликацииПоИдентификатору(Идентификатор) Экспорт
+
+ Отбор = Новый Соответствие;
+ Отбор.Вставить("Идентификатор", Идентификатор);
+ Сущность = МенеджерСущностей.ПолучитьОдно(Тип("ИсторияПубликаций"), Отбор);
+ Возврат Сущность;
+
+КонецФункции
Функция ИнформацияОФайлеПоИД(ИДФайла) Экспорт
Отбор = Новый Соответствие;
@@ -168,7 +183,7 @@
Процедура СохранитьЗаписьОФайле(ДанныеФайла)
ИсторияПубликаций = ХранилищеСущностейИсторияПубликаций.СоздатьЭлемент();
- ИсторияПубликаций.ПользовательИД = ДанныеФайла.ПользовательИД;
+ ИсторияПубликаций.ИДПользователя = ДанныеФайла.ИДПользователя;
ИсторияПубликаций.ИмяФайла = ДанныеФайла.ИмяФайла;
ИсторияПубликаций.ДатаОтправки = ТекущаяДата();
ИсторияПубликаций.ИДПубликации = ДанныеФайла.ИДПубликации;
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\200\321\202\321\213\320\240\320\260\320\267\320\261\320\276\321\200\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\200\321\202\321\213\320\240\320\260\320\267\320\261\320\276\321\200\320\260.os"
index ecd0a8a..d7b96c9 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\200\321\202\321\213\320\240\320\260\320\267\320\261\320\276\321\200\320\260.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\320\260\320\274\320\265\321\200\321\202\321\213\320\240\320\260\320\267\320\261\320\276\321\200\320\260.os"
@@ -5,10 +5,13 @@
КонецПроцедуры
&Завязь(Тип = "Строка")
-Функция КомандаЗапуска(&Деталька(Значение = "UNPACK", ЗначениеПоУмолчанию = "") КомандаЗапуска) Экспорт
+&Характер("Компанейский")
+Функция КомандаЗапускаДекомпилятора(&Деталька(Значение = "UNPACK", ЗначениеПоУмолчанию = "py")
+ КомандаЗапускаДекомпилятора) Экспорт
+
Команда = Новый Команда;
- Если КомандаЗапуска = "py" Тогда
+ Если КомандаЗапускаДекомпилятора = "py" Тогда
ИсполняющийСкрипт = ТекущийКаталог() + "/src/v8unpack/v8u.py";
Команда.УстановитьКоманду("python3");
Команда.ДобавитьПараметр(ИсполняющийСкрипт);
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\202\320\276\321\200Gist.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\202\320\276\321\200Gist.os"
index e7a1d3a..ef50f84 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\202\320\276\321\200Gist.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\202\320\276\321\200Gist.os"
@@ -9,7 +9,7 @@
КонецПроцедуры
-Функция Опубликовать(ТекстыМодулей) Экспорт
+Функция Опубликовать(ТекстыМодулей, ДанныеДляРазбораФайла) Экспорт
Ссылки = Новый Соответствие();
АдресРесурса = АдресРесурса();
@@ -31,8 +31,15 @@
Тело.Вставить("public", Ложь);
Тело.Вставить("description", "Gist создан из 1С " + ТекущаяДата());
- Ответ = КоннекторHTTP.Post(АдресРесурса,, Тело, Новый Структура("Заголовки", Заголовки));
- Если Ответ.КодСостояния = 201 Тогда
+ Если ДанныеДляРазбораФайла.Обновление Тогда
+ Ответ = КоннекторHTTP.Patch(СтрШаблон("%1/%2", АдресРесурса, ДанныеДляРазбораФайла.ИДПубликации),
+ ОбъектВJson(Тело), Новый Структура("Заголовки", Заголовки)
+ );
+ Иначе
+ Ответ = КоннекторHTTP.Post(АдресРесурса,, Тело, Новый Структура("Заголовки", Заголовки));
+ КонецЕсли;
+
+ Если КодСостоянияУспешный(Ответ.КодСостояния) Тогда
ОтветJson = Ответ.Json();
КонецЕсли;
@@ -49,7 +56,7 @@
Тело.Вставить("description", "Gist создан из 1С " + ТекущаяДата());
Ответ = КоннекторHTTP.Patch(АдресРесурса, ОбъектВJson(Тело), Новый Структура("Заголовки", Заголовки));
- Если Ответ.КодСостояния = 200 Тогда
+ Если КодСостоянияУспешный(Ответ.КодСостояния) Тогда
ОтветJson = Ответ.Json();
Ссылки.Вставить(ОтветJson["id"], ОтветJson["html_url"] + "#file-contents-md");
КонецЕсли;
@@ -89,3 +96,12 @@
КонецПроцедуры
+Функция КодСостоянияУспешный(КодСостояния)
+
+ КодыОтвета = Новый Массив;
+ КодыОтвета.Добавить(200);
+ КодыОтвета.Добавить(201);
+
+ Возврат КодыОтвета.Найти(КодСостояния) <> Неопределено;
+
+КонецФункции
diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\202\320\276\321\200Paste1C.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\202\320\276\321\200Paste1C.os"
index 05a22c2..8582c2b 100644
--- "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\202\320\276\321\200Paste1C.os"
+++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\202\320\276\321\200Paste1C.os"
@@ -10,7 +10,7 @@
КонецПроцедуры
-Функция Опубликовать(ТекстыМодулей) Экспорт
+Функция Опубликовать(ТекстыМодулей, ДанныеДляРазбораФайла) Экспорт
//TODO Продумать удобный способ работы с paste1c, главная проблема в том что
//разные модули будут публиковаться по разным ссылкам, что не удобно для анализа
Ссылки = Новый Массив;
diff --git "a/src/data/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\321\202\320\276\321\200\320\270\321\217\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\206\320\270\320\271.os" "b/src/data/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\321\202\320\276\321\200\320\270\321\217\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\206\320\270\320\271.os"
index d0887cd..65899d4 100644
--- "a/src/data/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\321\202\320\276\321\200\320\270\321\217\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\206\320\270\320\271.os"
+++ "b/src/data/\320\232\320\273\320\260\321\201\321\201\321\213/\320\230\321\201\321\202\320\276\321\200\320\270\321\217\320\237\321\203\320\261\320\273\320\270\320\272\320\260\321\206\320\270\320\271.os"
@@ -4,8 +4,8 @@
&Колонка(Тип = "Целое") // Хранит целочисленные значения
Перем Идентификатор Экспорт; // Имя колонки в базе - `Идентификатор`
-&Колонка(Тип = "Строка")
-Перем ПользовательИД Экспорт; // Колонка `ПользовательИД`
+&Колонка(Тип = "Целое")
+Перем ИДПользователя Экспорт; // Колонка `ИДПользователя`
&Колонка(Тип = "Строка")
Перем ИмяФайла Экспорт; // Колонка `ИмяФайла`