From 30ea25ebdf2bc1c37899779d7bd602a8b7be72c2 Mon Sep 17 00:00:00 2001 From: salexdv Date: Thu, 25 Aug 2022 12:08:29 +0300 Subject: [PATCH] tree.js --- src/test_compare.html | 18526 +++++++++++++++++++++++++++++++ src/test_snip.js | 3197 ++++++ src/tree/icons/array.png | Bin 0 -> 183 bytes src/tree/icons/binary.png | Bin 0 -> 203 bytes src/tree/icons/boolean.png | Bin 0 -> 351 bytes src/tree/icons/bprocess.png | Bin 0 -> 179 bytes src/tree/icons/catalog.png | Bin 0 -> 180 bytes src/tree/icons/close.png | Bin 0 -> 282 bytes src/tree/icons/close_hover.png | Bin 0 -> 284 bytes src/tree/icons/date.png | Bin 0 -> 198 bytes src/tree/icons/document.png | Bin 0 -> 213 bytes src/tree/icons/empty.png | Bin 0 -> 126 bytes src/tree/icons/enum.png | Bin 0 -> 189 bytes src/tree/icons/int.png | Bin 0 -> 272 bytes src/tree/icons/keyvalue.png | Bin 0 -> 179 bytes src/tree/icons/null.png | Bin 0 -> 201 bytes src/tree/icons/open.png | Bin 0 -> 281 bytes src/tree/icons/open_hover.png | Bin 0 -> 282 bytes src/tree/icons/picture.png | Bin 0 -> 231 bytes src/tree/icons/query.png | Bin 0 -> 422 bytes src/tree/icons/storage.png | Bin 0 -> 180 bytes src/tree/icons/string.png | Bin 0 -> 248 bytes src/tree/icons/structure.png | Bin 0 -> 180 bytes src/tree/icons/table.png | Bin 0 -> 181 bytes src/tree/icons/tabular.png | Bin 0 -> 201 bytes src/tree/icons/task.png | Bin 0 -> 180 bytes src/tree/icons/text.png | Bin 0 -> 434 bytes src/tree/icons/tree.png | Bin 0 -> 191 bytes src/tree/icons/undefined.png | Bin 0 -> 269 bytes src/tree/icons/uuid.png | Bin 0 -> 175 bytes src/tree/loading.gif | Bin 0 -> 1849 bytes src/tree/tree.css | 235 + src/tree/tree.html | 114 + src/tree/tree.js | 100 + 34 files changed, 22172 insertions(+) create mode 100644 src/test_compare.html create mode 100644 src/test_snip.js create mode 100644 src/tree/icons/array.png create mode 100644 src/tree/icons/binary.png create mode 100644 src/tree/icons/boolean.png create mode 100644 src/tree/icons/bprocess.png create mode 100644 src/tree/icons/catalog.png create mode 100644 src/tree/icons/close.png create mode 100644 src/tree/icons/close_hover.png create mode 100644 src/tree/icons/date.png create mode 100644 src/tree/icons/document.png create mode 100644 src/tree/icons/empty.png create mode 100644 src/tree/icons/enum.png create mode 100644 src/tree/icons/int.png create mode 100644 src/tree/icons/keyvalue.png create mode 100644 src/tree/icons/null.png create mode 100644 src/tree/icons/open.png create mode 100644 src/tree/icons/open_hover.png create mode 100644 src/tree/icons/picture.png create mode 100644 src/tree/icons/query.png create mode 100644 src/tree/icons/storage.png create mode 100644 src/tree/icons/string.png create mode 100644 src/tree/icons/structure.png create mode 100644 src/tree/icons/table.png create mode 100644 src/tree/icons/tabular.png create mode 100644 src/tree/icons/task.png create mode 100644 src/tree/icons/text.png create mode 100644 src/tree/icons/tree.png create mode 100644 src/tree/icons/undefined.png create mode 100644 src/tree/icons/uuid.png create mode 100644 src/tree/loading.gif create mode 100644 src/tree/tree.css create mode 100644 src/tree/tree.html create mode 100644 src/tree/tree.js diff --git a/src/test_compare.html b/src/test_compare.html new file mode 100644 index 0000000..cdd1de0 --- /dev/null +++ b/src/test_compare.html @@ -0,0 +1,18526 @@ + + + + + Test BSL-editor + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/src/test_snip.js b/src/test_snip.js new file mode 100644 index 0000000..695e472 --- /dev/null +++ b/src/test_snip.js @@ -0,0 +1,3197 @@ + +describe("Проверка автокомлита и подсказок редактора кода", function () { + + let urlParams = new URLSearchParams(window.location.search); + let slow = urlParams.get('slow'); + + if (slow) + mocha.slow(parseInt(slow)); + + let st1 = [ + '{1,', + '{3,', + '{"Стандартные",1,0,"",""},', + '{18,', + '{"Управляющие",1,0,"",""},', + '{0,', + '{"Если",0,0,"Если","Если Тогда', + '', + ' ', + '', + 'КонецЕсли;"}', + '},', + '{0,', + '{"ЕслиИначе",0,0,"Если","Если Тогда', + '', + ' ', + '', + 'Иначе', + '', + ' ', + '', + 'КонецЕсли;"}', + '},', + '{0,', + '{"Пока",0,0,"Пока","Пока Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Для",0,0,"Для","Для По Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Для каждого",0,0,"Для[ Каждого]","Для каждого Из Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Процедура",0,0,"Проц[едура]","Процедура ()', + '', + ' ', + '', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Процедура (с заголовком)",0,0,"Проц[едура]","// <Описание процедуры>', + '//', + '// Параметры:', + '// <Параметр1> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '// <Параметр2> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '//', + 'Процедура ()', + '', + ' ', + '', + 'КонецПроцедуры // ()', + '"}', + '},', + '{0,', + '{"Процедура модуля формы",0,0,"Проц[едура]","// <Описание процедуры>', + '//', + '// Параметры:', + '// <Параметр1> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '// <Параметр2> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '//', + '&', + 'Процедура ()', + '', + ' ', + '', + 'КонецПроцедуры // ()', + '"}', + '},', + '{0,', + '{"Процедура модуля команды",0,0,"Проц[едура]","// <Описание процедуры>', + '//', + '// Параметры:', + '// <Параметр1> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '// <Параметр2> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '//', + '&', + 'Процедура ()', + '', + ' ', + '', + 'КонецПроцедуры // ()', + '"}', + '},', + '{0,', + '{"Функция",0,0,"Функ[ция]","Функция ()', + '', + ' ', + '', + 'КонецФункции // ()', + '"}', + '},', + '{0,', + '{"Функция (с заголовком)",0,0,"Функ[ция]","// <Описание функции>', + '//', + '// Параметры:', + '// <Параметр1> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '// <Параметр2> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '//', + '// Возвращаемое значение:', + '// <Тип.Вид> - <описание возвращаемого значения>', + '//', + 'Функция ()', + '', + ' ', + '', + 'КонецФункции // ()', + '"}', + '},', + '{0,', + '{"Функция модуля формы",0,0,"Функ[ция]","// <Описание функции>', + '//', + '// Параметры:', + '// <Параметр1> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '// <Параметр2> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '//', + '// Возвращаемое значение:', + '// <Тип.Вид> - <описание возвращаемого значения>', + '//', + '&', + 'Функция ()', + '', + ' ', + '', + 'КонецФункции // ()', + '"}', + '},', + '{0,', + '{"Функция модуля команды",0,0,"Функ[ция]","// <Описание функции>', + '//', + '// Параметры:', + '// <Параметр1> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '// <Параметр2> - <Тип.Вид> - <описание параметра>', + '// <продолжение описания параметра>', + '//', + '// Возвращаемое значение:', + '// <Тип.Вид> - <описание возвращаемого значения>', + '//', + '&', + 'Функция ()', + '', + ' ', + '', + 'КонецФункции // ()', + '"}', + '},', + '{0,', + '{"Возврат",0,0,"","Возврат;"}', + '},', + '{0,', + '{"Попытка",0,0,"Попы[тка]","Попытка', + '', + ' ', + '', + 'Исключение', + '', + 'КонецПопытки;"}', + '},', + '{0,', + '{"Директива компиляции",0,0,"Дирек[тива]","&"}', + '},', + '{0,', + '{"Инструкция Если",0,0,"Инстр[укция]","#Если Тогда', + ' ', + '#КонецЕсли"}', + '},', + '{0,', + '{"Инструкция Область",0,0,"#Обл[асть]","#Область ', + ' ', + '#КонецОбласти"}', + '}', + '},', + '{18,', + '{"Прикладные",1,0,"",""},', + '{0,', + '{"Перечисление",0,1,"Переч[исление]","ПредопределенноеЗначение(""Перечисление."")"}', + '},', + '{2,', + '{"Функциональные опции",1,0,"",""},', + '{0,', + '{"Получить функциональную опцию",0,1,"Функ[циональная опция]","ПолучитьФункциональнуюОпцию("""")"}', + '},', + '{0,', + '{"Получить функциональную опцию интерфейса",0,1,"Функ[циональная опция]","ПолучитьФункциональнуюОпциюИнтерфейса("""")"}', + '}', + '},', + '{4,', + '{"Общие формы",1,0,"",""},', + '{0,', + '{"Открыть общую форму",0,0,"Открыть[Форму]","ОткрытьФорму(""ОбщаяФорма."");"}', + '},', + '{0,', + '{"Открыть общую форму (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""ОбщаяФорма."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить общую форму",0,0,"Получить[Форму]","ПолучитьФорму(""ОбщаяФорма."");"}', + '},', + '{0,', + '{"Получить общую форму (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""ОбщаяФорма."");', + '"}', + '}', + '},', + '{5,', + '{"Планы обмена",1,0,"",""},', + '{0,', + '{"Открыть форму плана обмена",0,0,"Открыть[Форму]","ОткрытьФорму(""ПланОбмена.."");"}', + '},', + '{0,', + '{"Открыть форму плана обмена (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""ПланОбмена.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму плана обмена",0,0,"Получить[Форму]","ПолучитьФорму(""ПланОбмена.."");"}', + '},', + '{0,', + '{"Получить форму плана обмена (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""ПланОбмена.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Обход элементов",0,0,"","Выборка = ПланыОбмена..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '}', + '},', + '{3,', + '{"Константы",1,0,"",""},', + '{0,', + '{"Получить/установить",0,0,"Конст[анты]","Константы..()"}', + '},', + '{0,', + '{"Установить",0,0,"","Константы..Установить();"}', + '},', + '{0,', + '{"Получить",0,0,"","Константы..Получить()"}', + '}', + '},', + '{6,', + '{"Справочники",1,0,"",""},', + '{0,', + '{"Открыть форму справочника",0,0,"Открыть[Форму]","ОткрытьФорму(""Справочник.."");"}', + '},', + '{0,', + '{"Открыть форму справочника (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""Справочник.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму справочника",0,0,"Получить[Форму]","ПолучитьФорму(""Справочник.."");"}', + '},', + '{0,', + '{"Получить форму справочника (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""Справочник.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Обход элементов",0,0,"","Выборка = Справочники..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Обход элементов иерархически",0,0,"","Выборка = Справочники..ВыбратьИерархически();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '}', + '},', + '{6,', + '{"Документы",1,0,"",""},', + '{0,', + '{"Открыть форму документа",0,0,"Открыть[Форму]","ОткрытьФорму(""Документ.."");"}', + '},', + '{0,', + '{"Открыть форму документа (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""Документ.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму документа",0,0,"Получить[Форму]","ПолучитьФорму(""Документ.."");"}', + '},', + '{0,', + '{"Получить форму документа (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""Документ.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Обход документов",0,0,"","Выборка = Документы..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Движения",0,0,"","Движения."}', + '}', + '},', + '{4,', + '{"Отчеты",1,0,"",""},', + '{0,', + '{"Открыть форму отчета",0,0,"Открыть[Форму]","ОткрытьФорму(""Отчет.."");"}', + '},', + '{0,', + '{"Открыть форму отчета (с параметрами)",0,0,"Открыть[Форму]","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""Отчет.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму отчета",0,0,"Получить[Форму]","ПолучитьФорму(""Отчет.."");"}', + '},', + '{0,', + '{"Получить форму отчета (с параметрами)",0,0,"Получить[Форму]","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""Отчет.."", ПараметрыФормы);', + '"}', + '}', + '},', + '{4,', + '{"Обработки",1,0,"",""},', + '{0,', + '{"Открыть форму обработки",0,0,"Открыть[Форму]","ОткрытьФорму(""Обработка.."");"}', + '},', + '{0,', + '{"Открыть форму обработки (с параметрами)",0,0,"Открыть[Форму]","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""Обработка.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму обработки",0,0,"Получить[Форму]","ПолучитьФорму(""Обработка.."");"}', + '},', + '{0,', + '{"Получить форму обработки (с параметрами)",0,0,"Получить[Форму]","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""Обработка.."", ПараметрыФормы);', + '"}', + '}', + '},', + '{5,', + '{"Планы видов характеристик",1,0,"",""},', + '{0,', + '{"Открыть форму плана видов характеристик",0,0,"Открыть[Форму]","ОткрытьФорму(""ПланВидовХарактеристик.."");"}', + '},', + '{0,', + '{"Открыть форму плана видов характеристик (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""ПланВидовХарактеристик.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму плана видов характеристик",0,0,"Получить[Форму]","ПолучитьФорму(""ПланВидовХарактеристик.."");"}', + '},', + '{0,', + '{"Получить форму плана видов характеристик (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""ПланВидовХарактеристик.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Обход видов характеристик",0,0,"","Выборка = ПланыВидовХарактеристик..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '}', + '},', + '{5,', + '{"Планы счетов",1,0,"",""},', + '{0,', + '{"Открыть форму плана счетов",0,0,"Открыть[Форму]","ОткрытьФорму(""ПланСчетов.."");"}', + '},', + '{0,', + '{"Открыть форму плана счетов (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""ПланСчетов.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму плана счетов",0,0,"Получить[Форму]","ПолучитьФорму(""ПланСчетов.."");"}', + '},', + '{0,', + '{"Получить форму плана счетов (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""ПланСчетов.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Найти по коду",0,0,"","ПланыСчетов..НайтиПоКоду()"}', + '}', + '},', + '{5,', + '{"Планы видов расчета",1,0,"",""},', + '{0,', + '{"Открыть форму плана видов расчета",0,0,"Открыть[Форму]","ОткрытьФорму(""ПланВидовРасчета.."");"}', + '},', + '{0,', + '{"Открыть форму плана видов расчета (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""ПланВидовРасчета.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму плана видов расчета",0,0,"Получить[Форму]","ПолучитьФорму(""ПланВидовРасчета.."");"}', + '},', + '{0,', + '{"Получить форму плана видов расчета (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""ПланВидовРасчета.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Обход видов расчета",0,0,"","Выборка = ПланыВидовРасчета..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '}', + '},', + '{5,', + '{"Бизнес-процессы",1,0,"",""},', + '{0,', + '{"Открыть форму бизнес-процесса",0,0,"Открыть[Форму]","ОткрытьФорму(""БизнесПроцесс.."");"}', + '},', + '{0,', + '{"Открыть форму бизнес-процесса (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""БизнесПроцесс.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму бизнес-процесса",0,0,"Получить[Форму]","ПолучитьФорму(""БизнесПроцесс.."");"}', + '},', + '{0,', + '{"Получить форму бизнес-процесса (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""БизнесПроцесс.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Обход бизнес-процессов",0,0,"","Выборка = БизнесПроцессы..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '}', + '},', + '{4,', + '{"Задачи",1,0,"",""},', + '{0,', + '{"Открыть форму задачи",0,0,"Открыть[Форму]","ОткрытьФорму(""Задача.."");"}', + '},', + '{0,', + '{"Открыть форму задачи (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""Задача.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму задачи",0,0,"Получить[Форму]","ПолучитьФорму(""Задача.."");"}', + '},', + '{0,', + '{"Получить форму задачи (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""Задача.."", ПараметрыФормы);', + '"}', + '}', + '},', + '{6,', + '{"Регистры сведений",1,0,"",""},', + '{0,', + '{"Открыть форму регистра сведений",0,0,"Открыть[Форму]","ОткрытьФорму(""РегистрСведений.."");"}', + '},', + '{0,', + '{"Открыть форму регистра сведений (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""РегистрСведений.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму регистра сведений",0,0,"Получить[Форму]","ПолучитьФорму(""РегистрСведений.."");"}', + '},', + '{0,', + '{"Получить форму регистра сведений (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""РегистрСведений.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Выборка записей регистра сведений",0,0,"","Выборка = РегистрСведений..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Выборка записей регистра сведений (по регистратору)",0,0,"","Выборка = РегистрСведений..ВыбратьПоРегистратору();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + '', + 'КонецЦикла;"}', + '}', + '},', + '{6,', + '{"Регистры накопления",1,0,"",""},', + '{0,', + '{"Открыть форму регистра накопления",0,0,"Открыть[Форму]","ОткрытьФорму(""РегистрНакопления.."");"}', + '},', + '{0,', + '{"Открыть форму регистра накопления (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""РегистрНакопления.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму регистра накопления",0,0,"Получить[Форму]","ПолучитьФорму(""РегистрНакопления.."");"}', + '},', + '{0,', + '{"Получить форму регистра накопления (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""РегистрНакопления.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Выборка записей регистра накопления",0,0,"","Выборка = РегистрСведений..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Выборка записей регистра накопления (по регистратору)",0,0,"","Выборка = РегистрСведений..ВыбратьПоРегистратору();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + '', + 'КонецЦикла;"}', + '}', + '},', + '{6,', + '{"Регистры бухгалтерии",1,0,"",""},', + '{0,', + '{"Открыть форму регистра бухгалтерии",0,0,"Открыть[Форму]","ОткрытьФорму(""РегистрБухгалтерии.."");"}', + '},', + '{0,', + '{"Открыть форму регистра бухгалтерии (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""РегистрБухгалтерии.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму регистра бухгалтерии",0,0,"Получить[Форму]","ПолучитьФорму(""РегистрБухгалтерии.."");"}', + '},', + '{0,', + '{"Получить форму регистра бухгалтерии (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""РегистрБухгалтерии.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Выборка записей регистра бухгалтерии",0,0,"","Выборка = РегистрСведений..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Выборка записей регистра бухгалтерии (по регистратору)",0,0,"","Выборка = РегистрСведений..ВыбратьПоРегистратору();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + '', + 'КонецЦикла;"}', + '}', + '},', + '{6,', + '{"Регистры расчета",1,0,"",""},', + '{0,', + '{"Открыть форму регистра расчета",0,0,"Открыть[Форму]","ОткрытьФорму(""РегистрРасчета.."");"}', + '},', + '{0,', + '{"Открыть форму регистра расчета (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'ОткрытьФорму(""РегистрРасчета.."", ПараметрыФормы);"}', + '},', + '{0,', + '{"Получить форму регистра расчета",0,0,"Получить[Форму]","ПолучитьФорму(""РегистрРасчета.."");"}', + '},', + '{0,', + '{"Получить форму регистра расчета (с параметрами)",0,0,"","ПараметрыФормы = Новый Структура;', + 'ПараметрыФормы.Вставить("""", );', + 'Форма = ПолучитьФорму(""РегистрРасчета.."", ПараметрыФормы);', + '"}', + '},', + '{0,', + '{"Выборка записей регистра расчета",0,0,"","Выборка = РегистрСведений..Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Выборка записей регистра расчета (по регистратору)",0,0,"","Выборка = РегистрСведений..ВыбратьПоРегистратору();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + '', + 'КонецЦикла;"}', + '}', + '}', + '},', + '{11,', + '{"Прочие",1,0,"",""},', + '{0,', + '{"Сообщение",0,1,"Сообщ[ение]","Сообщение = Новый СообщениеПользователю;', + 'Сообщение.Текст = """";', + 'Сообщение.Поле = """";', + 'Сообщение.УстановитьДанные();', + 'Сообщение.Сообщить();"}', + '},', + '{0,', + '{"Предупреждение",0,0,"Предупр[еждение]","Предупреждение();"}', + '},', + '{0,', + '{"Формат",0,0,"Формат","Формат(, """")"}', + '},', + '{0,', + '{"Форматная строка",0,1,"",""""""}', + '},', + '{0,', + '{"Создать структуру",0,0,"Струк[тура]","Новый Структура("""", )"}', + '},', + '{0,', + '{"Запрос",0,0,"","Запрос = Новый Запрос;', + 'Запрос.Текст = """";', + '', + 'Результат = Запрос.Выполнить();', + 'Выборка = Результат.Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;', + '"}', + '},', + '{0,', + '{"Запрос с параметром",0,0,"","Запрос = Новый Запрос;', + 'Запрос.Текст = """";', + '', + 'Запрос.УстановитьПараметр("""", );', + '', + 'Результат = Запрос.Выполнить();', + 'Выборка = Результат.Выбрать();', + '', + 'Пока Выборка.Следующий() Цикл', + '', + ' ', + '', + 'КонецЦикла;', + '"}', + '},', + '{0,', + '{"Вопрос",0,0,"Вопр[ос]","Вопрос("""", )"}', + '},', + '{0,', + '{"Вопрос с анализом результата",0,0,"Вопр[ос]","Вопрос("""", ) = "}', + '},', + '{0,', + '{"Проверка типа",0,0,"","Если ТипЗнч() = Тип("""") Тогда', + '', + ' ', + '', + 'КонецЕсли;"}', + '},', + '{0,', + '{"КонструкторОписанияТипов",0,0,"",""}', + '}', + '}', + '}', + '}'].join('\n'); + + let st2 = [ + '{1,', + '{21,', + '{"GROOVY (v8.3.21.12 от 15.03.21) ",1,0,"",""},', + '{0,', + '{"Есть мысли по развитию шаблонов? Телеграмм: https://t.me/st1c8",0,0,"","//Есть мысли по развитию шаблонов? https://t.me/st1c8"}', + '},', + '{0,', + '{"Описание",0,0,"","// Шаблоны для работы в конфигураторе с системами 1С:Предприятие версии 8.3', + '', + '// Последнюю версию шаблонов всегда можно найти тут: 1c.chistov.pro', + '', + '// С уважением, Павел Чистов"}', + '},', + '{0,', + '{"История изменений",0,0,"","#Область 2021_03_15', + ' //Добавлен шаблон модуля менеджера', + '#КонецОбласти ', + '', + '#Область 2021_02_25', + ' //Добавлен раздел ""Полезняшки"". В разделе нет автозамены.', + ' //Будет добавляться полезным кодом', + '#КонецОбласти ', + '', + '#Область 2020_06_23', + ' //Добавлен раздел Расширения', + ' //В раздел добавлены аннотации: Перед После, Вместо, ИзменениеИКонтроль', + '#КонецОбласти ', + '', + '#Область 2020_06_12', + ' //Добавлено сокращение ЗЗ (ЗаполнитьЗначенияСвойств)', + ' //Добавлен раздел Асинхронные вызовы, в раздео добавлены шаблоны описания оповещения', + ' //Добавлен шаблон помещения файла во временное хранилище (надоело набивать руками 4 процедуры)', + '#КонецОбласти ', + '', + '#Область 2018_08_06', + ' //ИсточникДанных заменен на ИсточникДанныхСКД, из-за конкуренции с объектом БлокировкаДанных', + '#КонецОбласти ', + '', + '#Область 2014_10_09', + ' //Добавлены шаблоны описывающие структуру модулей, Комментарии-Структура модулей, в автозамену не подключены', + ' //Изменен шаблон отчерка, вместо символов ""_"" используется ""="" и курсор помещается в начало отчерка, на основе рекомендации 1С', + ' //В шаблоне ""ТекущаяДата"" курсор устанавливается в конце метода, ранее устанавливался после пробела', + ' //Группы ""Комментарии"" и ""Области"" объединены', + ' //Начат раздел по СКД', + '#КонецОбласти ', + '', + '#Область 2014_02_13', + ' //Текст запроса в соответствующих шаблонах теперь начинается с новой строки', + '#КонецОбласти ', + '', + '#Область 2014_01_26', + ' //Изменен ""Отчерк"", теперь длина комментария 120 символов, по стандарту оформления 1С', + ' ', + ' //Добавлен шаблон ""нСтр""', + ' //Добавлен шаблон ""Фрагмент добавлен""', + ' //Добавлен шаблон ""Фрагмент удален""', + ' //Добавлен шаблон ""Комментарий модуля""', + '#КонецОбласти ', + '', + '#Область 2013_11_19', + ' //Исправлена ошибка в шаблоне ""Обл=""', + '#КонецОбласти ', + '', + '#Область 2013_10_02', + ' //Убран отчерк перед областью', + ' ', + ' //Добавлен прикладной шаблон ""ВидДвижения""', + ' // При наборе ВидДвижения= срабатывает шаблон на выбор видов движения регистров накопления и регистров бухгалтерии', + '#КонецОбласти ', + '', + '#Область 2013_09_15', + ' //Первая версия', + '#КонецОбласти ', + '"}', + '},', + '{8,', + '{"Управляющие",1,0,"",""},', + '{0,', + '{"Если",0,0,"Если","Если Тогда', + ' ', + 'КонецЕсли;"}', + '},', + '{0,', + '{"ИначеЕсли",0,0,"ИначеЕсли","ИначеЕсли Тогда"}', + '},', + '{0,', + '{"Пока",0,0,"Пока","Пока Цикл', + ' ', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Для",0,0,"Для","Для По Цикл', + ' ', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Для каждого",0,0,"Для[ Каждого]","Для каждого Из Цикл', + ' ', + 'КонецЦикла;"}', + '},', + '{0,', + '{"Попытка",0,0,"Попы[тка]","Попытка', + ' ', + 'Исключение', + ' //ОписаниеОшибки()', + 'КонецПопытки;"}', + '},', + '{7,', + '{"Процедура",1,0,"",""},', + '{0,', + '{"Процедура",0,0,"Проц[едура]","Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Процедура с заголовком",0,0,"Процедура","////////////////////////////////////////////////////////////////////////////////', + '//', + '// Процедура ', + '//', + '// Описание:', + '//', + '//', + '// Параметры (название, тип, дифференцированное значение)', + '//', + 'Процедура ()', + ' ', + 'КонецПроцедуры //', + '', + '"}', + '},', + '{0,', + '{"Процедура НаКлиенте",0,0,"Проц[едура]","&НаКлиенте', + 'Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Процедура НаСервереБезКонтекста",0,0,"Проц[едура]","&НаСервереБезКонтекста', + 'Процедура ()', + '', + 'КонецПроцедуры"}', + '},', + '{0,', + '{"Процедура НаСервере",0,0,"Проц[едура]","&НаСервере', + 'Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Процедура НаКлиентеНаСервереБезКонтекста (только модули упр.форм)",0,0,"Проц[едура]","&НаКлиентеНаСервереБезКонтекста', + 'Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Процедура НаКлиентеНаСервере (только модули команд)",0,0,"Проц[едура]","&НаКлиентеНаСервере', + 'Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '}', + '},', + '{7,', + '{"Функция",1,0,"",""},', + '{0,', + '{"Функция",0,0,"Функ[ция]","Функция ()', + ' ', + 'КонецФункции', + '"}', + '},', + '{0,', + '{"Функция с заголовком",0,0,"Функция","////////////////////////////////////////////////////////////////////////////////', + '//', + '// Функция ', + '//', + '// Описание:', + '//', + '//', + '// Параметры (название, тип, дифференцированное значение)', + '//', + '// Возвращаемое значение: ', + '//', + 'Функция ()', + ' ', + 'КонецФункции //', + '"}', + '},', + '{0,', + '{"Функция НаКлиенте",0,0,"Функ[ция]","&НаКлиенте', + 'Функция ()', + ' ', + 'КонецФункции', + '"}', + '},', + '{0,', + '{"Функция НаСервереБезКонтекста",0,0,"Функ[ция]","&НаСервереБезКонтекста', + 'Функция ()', + ' ', + 'КонецФункции', + '"}', + '},', + '{0,', + '{"Функция НаСервере",0,0,"Функ[ция]","&НаСервере', + 'Функция ()', + ' ', + 'КонецФункции', + '"}', + '},', + '{0,', + '{"Функция НаКлиентеНаСервереБезКонтекста (только модули упр.форм)",0,0,"Функ[ция]","&НаКлиентеНаСервереБезКонтекста', + 'Функция ()', + ' ', + 'КонецФункции"}', + '},', + '{0,', + '{"Функция НаКлиентеНаСервере (только модули команд)",0,0,"Функ[ция]","&НаКлиентеНаСервере', + 'Функция ()', + ' ', + 'КонецФункции"}', + '}', + '}', + '},', + '{8,', + '{"Прикладные",1,0,"",""},', + '{0,', + '{"Значение перечисления",0,0,"Переч[исления.]","Перечисления."}', + '},', + '{0,', + '{"ВыборСчетаДт",0,0,"СчетДт=","СчетДт = ;"}', + '},', + '{0,', + '{"ВыборСчетаКт",0,0,"СчетКт=","СчетКт = ;"}', + '},', + '{0,', + '{"Движение",0,0,"Движение=","Движение = Движения', + 'Движение.Период = Дата;"}', + '},', + '{0,', + '{"СубконтоДт",0,0,"СубконтоДт","СубконтоДт[] = ;"}', + '},', + '{0,', + '{"СубконтоКт",0,0,"СубконтоКт","СубконтоКт[] = ;"}', + '},', + '{0,', + '{"Граница",0,0,"Граница=","Граница = Новый Граница(, );"}', + '},', + '{2,', + '{"ВидДвижения",1,0,"",""},', + '{0,', + '{"РегистрыНакопления",0,0,"ВидД[вижения=]","ВидДвижения = ;"}', + '},', + '{0,', + '{"РегистрыБухгалтерии",0,0,"ВидД[вижения=]","ВидДвижения = ;', + '"}', + '}', + '}', + '},', + '{16,', + '{"Раскладка клавиатуры",1,0,"",""},', + '{0,', + '{">",0,0,"Ю",">"}', + '},', + '{0,', + '{"<",0,0,"Б","<"}', + '},', + '{0,', + '{"<>",0,0,"БЮ","<>"}', + '},', + '{0,', + '{"<=",0,0,"Б=","<="}', + '},', + '{0,', + '{">=",0,0,"Ю=",">="}', + '},', + '{0,', + '{"ЕстьТгдд",0,0,"ЕстьТгдд","ЕСТЬNULL("}', + '},', + '{0,', + '{"NULL",0,0,"тгдд","NULL"}', + '},', + '{0,', + '{"[]",0,0,"хъ","[]"}', + '},', + '{0,', + '{"|",0,0,"\ ","| "}', + '},', + '{0,', + '{"\'",0,0,"ээ","\'\'"}', + '},', + '{0,', + '{"&",0,0,"? ","&"}', + '},', + '{0,', + '{"WebЦвета",0,0,"цуицвета","WebЦвета"}', + '},', + '{0,', + '{"?НаКлиенте",0,0,"?наКлиенте","&НаКлиенте"}', + '},', + '{0,', + '{"?НаСервере",0,0,"?НаСер[вере]","&НаСервере"}', + '},', + '{0,', + '{"?НаСервереБезКонтекста",0,0,"?НаСер[вереБезКонтекста]","&НаСервереБезКонтекста"}', + '},', + '{0,', + '{"?НаКлиентеНаСервереБезКонтекста",0,0,"?НаКлиенте[НаСервереБезКонтекста]","&НаКлиентеНаСервереБезКонтекста"}', + '}', + '},', + '{6,', + '{"Коллекции значений",1,0,"",""},', + '{0,', + '{"ТЗ",0,0,"ТЗ=","ТЗ = Новый ТаблицаЗначений;', + '"}', + '},', + '{0,', + '{"СЗ",0,0,"СЗ=","СЗ = Новый СписокЗначений;', + '"}', + '},', + '{0,', + '{"Структура",0,0,"Структура=","Структура = Новый Структура;', + '"}', + '},', + '{0,', + '{"Соответствие",0,0,"Соответствие=","Соответствие = Новый Соответствие;', + '"}', + '},', + '{0,', + '{"ДеревоЗначений",0,0,"ДеревоЗначений=","ДеревоЗначений = Новый ДеревоЗначений;', + '"}', + '},', + '{0,', + '{"Массив",0,0,"Массив=","Массив = Новый Массив();"}', + '}', + '},', + '{10,', + '{"Запросы",1,0,"",""},', + '{0,', + '{"Запрос с конструктором",0,0,"Запрос=","Запрос = Новый Запрос;', + 'Запрос.Текст = ', + '"""";', + 'Запрос.УстановитьПараметр("""", );', + 'РезультатЗапроса = Запрос.Выполнить();', + '', + '"}', + '},', + '{0,', + '{"Запрос вручную",0,0,"Запрос=","Запрос = Новый Запрос;', + 'Запрос.Текст = ', + '""ВЫБРАТЬ', + '| ', + '|', + '|', + '|', + '|', + '|', + '|', + '|', + '|"";', + '', + 'Запрос.УстановитьПараметр("""", );', + 'РезультатЗапроса = Запрос.Выполнить();', + '"}', + '},', + '{0,', + '{"Документ",0,0,"Документ.","Документ."}', + '},', + '{0,', + '{"Справочник",0,0,"Справочник.","Справочник."}', + '},', + '{0,', + '{"РегистрСведений",0,0,"Рег[истрСведений.Справочник]","РегистрСведений."", ""СрезПервых"", "".СрезПервых()"", ""СрезПоследних"", "".СрезПоследних()"">"}', + '},', + '{0,', + '{"РегистрСведений",0,0,"Рег[истрСведений.]","РегистрСведений."", ""СрезПервых"", "".СрезПервых()"", ""СрезПоследних"", "".СрезПоследних()"">"}', + '},', + '{0,', + '{"РегистрНакопления",0,0,"Рег[истрНакопления.]","РегистрНакопления."", ""Остатки"", "".Остатки()"", ""Обороты"", "".Обороты()"", ""ОстаткиИОбороты"", "".ОстаткиИОбороты()"">"}', + '},', + '{0,', + '{"РегистрБухгалтерии",0,0,"Рег[истрБухгалтерии.]","РегистрБухгалтерии."", ""Субконто"", "".Субконто"", ""ДвиженияССубконто"", "".ДвиженияССубконто()"", ""Остатки"", "".Остатки()"", ""Обороты"", "".Обороты()"", ""ОстаткиИОбороты"", "".ОстаткиИОбороты()"", ""ОборотыДтКт"", "".ОборотыДтКт()"">"}', + '},', + '{0,', + '{"РегистрРасчета",0,0,"Рег[истрРасчета.]","РегистрРасчета."}', + '},', + '{0,', + '{"ЛЕВОЕ СОЕДИНЕНИЕ",0,0,"ЛЕВОЕ","ЛЕВОЕ СОЕДИНЕНИЕ"}', + '},', + '{0,', + '{"ПРАВОЕ СОЕДИНЕНИЕ",0,0,"ПРАВОЕ","ПРАВОЕ СОЕДИНЕНИЕ"}', + '}', + '},', + '{5,', + '{"Диалоговые",1,0,"",""},', + '{0,', + '{"НастройкаПериода",0,0,"НастройкаПериода=","НастройкаПериода = Новый НастройкаПериода;', + 'НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода=\'0001-01-01\', КонПериода, КонецДня(КонПериода)));', + 'НастройкаПериода.РедактироватьКакИнтервал = Истина;', + 'НастройкаПериода.РедактироватьКакПериод = Истина;', + 'НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;', + 'Если НастройкаПериода.Редактировать() Тогда', + ' НачПериода = НастройкаПериода.ПолучитьДатуНачала();', + ' КонПериода = НастройкаПериода.ПолучитьДатуОкончания();', + 'КонецЕсли;', + '"}', + '},', + '{3,', + '{"Предупреждение",1,0,"",""},', + '{0,', + '{"Предупреждение",0,0,"Пр[едупреждение]","ПоказатьПредупреждение(,, 60);"}', + '},', + '{0,', + '{"Предупреждение",0,0,"ПоказатьПр[едупреждение]","ПоказатьПредупреждение(,, 60);"}', + '},', + '{0,', + '{"Предупреждение c обработкой оповещения",0,0,"ПоказатьПр[едупреждение]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'ПоказатьПредупреждение(ОписаниеОповещения, , 60);', + '', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (ДополнительныеПараметры) Экспорт', + ' ', + 'КонецПроцедуры', + '"}', + '}', + '},', + '{6,', + '{"Вопрос",1,0,"",""},', + '{0,', + '{"Вопрос",0,0,"Ответ=","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'ПоказатьВопрос(ОписаниеОповещения, """",, 60);', + '', + ' ', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (РезультатВопроса, ДополнительныеПараметры) Экспорт', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Вопрос",0,0,"ПоказатьВо[прос]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'ПоказатьВопрос(ОписаниеОповещения, """",, 60);', + '', + ' ', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (РезультатВопроса, ДополнительныеПараметры) Экспорт', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Вопрос",0,0,"Воп[рос]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'ПоказатьВопрос(ОписаниеОповещения, """",, 60);', + '', + ' ', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (РезультатВопроса, ДополнительныеПараметры) Экспорт', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Вопрос с анализом результата",0,0,"Ответ=","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'ПоказатьВопрос(ОписаниеОповещения, """",, 60);', + '', + ' ', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (РезультатВопроса, ДополнительныеПараметры) Экспорт', + ' ', + ' Если РезультатВопроса ""> Тогда', + ' ', + ' КонецЕсли; ', + ' ', + 'КонецПроцедуры"}', + '},', + '{0,', + '{"Вопрос с анализом результата",0,0,"ПоказатьВо[прос]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'ПоказатьВопрос(ОписаниеОповещения, """",, 60);', + '', + ' ', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (РезультатВопроса, ДополнительныеПараметры) Экспорт', + ' ', + ' Если РезультатВопроса ""> Тогда', + ' ', + ' КонецЕсли; ', + ' ', + 'КонецПроцедуры"}', + '},', + '{0,', + '{"Вопрос с анализом результата",0,0,"Воп[рос]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'ПоказатьВопрос(ОписаниеОповещения, """",, 60);', + '', + ' ', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (РезультатВопроса, ДополнительныеПараметры) Экспорт', + ' ', + ' Если РезультатВопроса ""> Тогда', + ' ', + ' КонецЕсли; ', + ' ', + 'КонецПроцедуры"}', + '}', + '},', + '{2,', + '{"СообщениеПользователю",1,0,"",""},', + '{0,', + '{"Сообщение пользователю",0,0,"Сооб[щение]","Сообщение = Новый СообщениеПользователю;', + 'Сообщение.Текст = """";', + 'Сообщение.Сообщить();"}', + '},', + '{0,', + '{"Сообщение пользователю с привязкой к реквизитам",0,0,"Сооб[щение]","Сообщение = Новый СообщениеПользователю;', + 'Сообщение.Текст = """";', + 'Сообщение.Поле = """"; //имя реквизита ', + 'Сообщение.УстановитьДанные(); //Ссылка на объект ИБ', + 'Сообщение.Сообщить();"}', + '}', + '},', + '{2,', + '{"НачатьПомещениеФайла",1,0,"",""},', + '{0,', + '{"ПоместитьФайл",0,0,"ПоместитьФ[айл]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'НачатьПомещениеФайла(ОписаниеОповещения, , ,Истина, УникальныйИдентификатор);', + '', + '', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"ПоместитьФайл",0,0,"НачатьПо[мещениеФайла]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + 'НачатьПомещениеФайла(ОписаниеОповещения, , ,Истина, УникальныйИдентификатор);', + '', + '', + '//Вынести в отдельную процедуру', + '&НаКлиенте', + 'Процедура (Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт', + ' ', + 'КонецПроцедуры', + '"}', + '}', + '}', + '},', + '{3,', + '{"Табличный документ",1,0,"",""},', + '{0,', + '{"ТабДок",0,0,"ТабДок=","ТабДок = ;', + '"}', + '},', + '{0,', + '{"ПолучитьОбласть",0,0,"Обл=","Обл = .ПолучитьОбласть("""");"}', + '},', + '{0,', + '{"Макет",0,0,"Макет=","Макет = ПолучитьМакет(""Макет"");"}', + '}', + '},', + '{21,', + '{"Сокращения",1,0,"",""},', + '{0,', + '{"НачалоМесяца",0,0,"НМ","НачалоМесяца()"}', + '},', + '{0,', + '{"КонецМесяца",0,0,"КМ","КонецМесяца()"}', + '},', + '{0,', + '{"НачалоДня",0,0,"НД","НачалоДня()"}', + '},', + '{0,', + '{"КонецДня",0,0,"КД","КонецДня()"}', + '},', + '{0,', + '{"ТекущаяДата",0,0,"ТД","ТекущаяДата()"}', + '},', + '{0,', + '{"ПериодДействияНачало",0,0,"ПДН","ПериодДействияНачало"}', + '},', + '{0,', + '{"ПериодДействияКонец",0,0,"ПДК","ПериодДействияКонец"}', + '},', + '{0,', + '{"БазовыйПериодНачало",0,0,"БПН","БазовыйПериодНачало"}', + '},', + '{0,', + '{"БазовыйПериодКонец",0,0,"БПК","БазовыйПериодКонец"}', + '},', + '{0,', + '{"ПланыВидовХарактеристик",0,0,"ПВХ",""}', + '},', + '{0,', + '{"ПланыВидовРасчета",0,0,"ПВР",""}', + '},', + '{0,', + '{"ДобавитьМесяц",0,0,"ДМ","ДобавитьМесяц(,)"}', + '},', + '{0,', + '{"Неопределено",0,0,"Неоп[ределено]","Неопределено"}', + '},', + '{0,', + '{"УстановитьПараметр",0,0,"УП","УстановитьПараметр("""",);"}', + '},', + '{0,', + '{"Контрагент",0,0,"Конт[рагент]","Контрагент"}', + '},', + '{0,', + '{"Номенклатура",0,0,"Номе[нклатура]","Номенклатура"}', + '},', + '{0,', + '{"Количество",0,0,"Коли[чество]","Количество"}', + '},', + '{0,', + '{"Стоимость",0,0,"Стои[мость]","Стоимость"}', + '},', + '{0,', + '{"УстановитьЗначениеПараметра",0,0,"УЗП","УстановитьЗначениеПараметра("""",);"}', + '},', + '{0,', + '{"МоментВремени",0,0,"МВ","МоментВремени()"}', + '},', + '{0,', + '{"ЗаполнитьЗначенияСвойств",0,0,"ЗЗ","заполнитьЗначенияСвойств(, );"}', + '}', + '},', + '{4,', + '{"НаборЗаписей",1,0,"",""},', + '{0,', + '{"РегистрСведений",0,0,"НаборЗаписей=","НаборЗаписей = РегистрыСведений..СоздатьНаборЗаписей();', + '"}', + '},', + '{0,', + '{"РегистрНакопления",0,0,"НаборЗаписей=","НаборЗаписей = РегистрыНакопления..СоздатьНаборЗаписей();', + 'НаборЗаписей.Отбор.Регистратор.Установить();', + 'НаборЗаписей.Прочитать();"}', + '},', + '{0,', + '{"РегистрБухгалтерии",0,0,"НаборЗаписей=","НаборЗаписей = РегистрыБухгалтерии..СоздатьНаборЗаписей();', + 'НаборЗаписей.Отбор.Регистратор.Установить();', + 'НаборЗаписей.Прочитать();"}', + '},', + '{0,', + '{"РегистрРасчета",0,0,"НаборЗаписей=","НаборЗаписей = РегистрыРасчета..СоздатьНаборЗаписей();', + 'НаборЗаписей.Отбор.Регистратор.Установить();', + 'НаборЗаписей.Прочитать();"}', + '}', + '},', + '{7,', + '{"Прочие",1,0,"",""},', + '{0,', + '{"Формат",0,0,"Формат","Формат(, """")"}', + '},', + '{0,', + '{"Конструктор описания типов",0,1,"",""}', + '},', + '{0,', + '{"Проверка типа",0,1,"","Если ТипЗнч() = Тип("""") Тогда', + '', + ' ', + '', + 'КонецЕсли;"}', + '},', + '{0,', + '{"Шрифт",0,0,"Шрифт=","// КОНСТРУКТОР Имя шрифта, Размер, Жирный, Наклонный, Подчеркнутый, Зачеркнутый', + 'Шрифт = Новый Шрифт( , , , , , );"}', + '},', + '{0,', + '{"ЧислоПрописью",0,0,"Число[Прописью]","ЧислоПрописью(,,""рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"")"}', + '},', + '{0,', + '{"Выборка",0,0,"Выборка=","Выборка = .Выбрать();', + 'Пока Выборка.Следующий() Цикл', + '', + 'КонецЦикла; "}', + '},', + '{0,', + '{"нСтр",0,0,"нСтр","нСтр(""ru=\'\'"", ""ru"")"}', + '}', + '},', + '{2,', + '{"Инструкции предпроцессору",1,0,"",""},', + '{0,', + '{"#Если",0,0,"№Если","#Если Тогда', + ' ', + '#КонецЕсли"}', + '},', + '{0,', + '{"#Если",0,0,"#Если","#Если Тогда', + ' ', + '#КонецЕсли"}', + '}', + '},', + '{4,', + '{"Блокировки",1,0,"",""},', + '{0,', + '{"Блокировка РегистрНакопления",0,0,"Блокировка=","Блокировка = Новый БлокировкаДанных;', + 'ЭлементБлокировки = Блокировка.Добавить(""РегистрНакопления."");', + 'ЭлементБлокировки.Режим = ;', + '//ЭлементБлокировки.ИсточникДанных = ;', + '//ЭлементБлокировки.ИспользоватьИзИсточникаДанных("""", """");', + '//ЭлементБлокировки.УстановитьЗначение("""", );', + 'Блокировка.Заблокировать(); ', + '"}', + '},', + '{0,', + '{"Блокировка РегистрБухгалтерии",0,0,"Блокировка=","Блокировка = Новый БлокировкаДанных;', + 'ЭлементБлокировки = Блокировка.Добавить(""РегистрБухгалтерии."");', + 'ЭлементБлокировки.Режим = ;', + '//ЭлементБлокировки.УстановитьЗначение(""Период"", Новый Диапазон( , ));', + '//ЭлементБлокировки.УстановитьЗначение(""Счет"", );', + 'Блокировка.Заблокировать(); ', + '"}', + '},', + '{0,', + '{"Блокировка РегистрСведений",0,0,"Блокировка=","Блокировка = Новый БлокировкаДанных;', + 'ЭлементБлокировки = Блокировка.Добавить(""РегистрСведений."");', + 'ЭлементБлокировки.Режим = ;', + '//ЭлементБлокировки.ИсточникДанных = ;', + '//ЭлементБлокировки.ИспользоватьИзИсточникаДанных("""", """");', + '//ЭлементБлокировки.УстановитьЗначение("""", );', + 'Блокировка.Заблокировать(); ', + '"}', + '},', + '{0,', + '{"Блокировка РегистрРасчета",0,0,"Блокировка=","Блокировка = Новый БлокировкаДанных;', + 'ЭлементБлокировки = Блокировка.Добавить(""РегистрРасчета."");', + 'ЭлементБлокировки.Режим = ;', + '//ЭлементБлокировки.ИсточникДанных = ;', + '//ЭлементБлокировки.ИспользоватьИзИсточникаДанных("""", """");', + '//ЭлементБлокировки.УстановитьЗначение("""", );', + 'Блокировка.Заблокировать(); ', + '"}', + '}', + '},', + '{1,', + '{"Запись",1,0,"",""},', + '{0,', + '{"ЗаписьРегистраРасчетов",0,0,"Запись=","Запись = Движения..Добавить();', + 'Запись.ПериодРегистрации = Дата;', + 'Запись.ПериодДействияНачало = ;', + 'Запись.ПериодДействияКонец = ;', + 'Запись.Сторно = Ложь;', + 'Запись.Сотрудник = ;', + 'Запись.Подразделение = ;', + 'Запись.График = ;', + 'Запись.Параметр = ;', + 'Запись.БазовыйПериодНачало = ;', + 'Запись.БазовыйПериодКонец = ;"}', + '}', + '},', + '{10,', + '{"Комментарии и области",1,0,"",""},', + '{0,', + '{"Отчерк",0,0,"/*","//======================================================================================================================"}', + '},', + '{0,', + '{"Группировка с комментарием ",0,0,"\хъ","//{', + '//}"}', + '},', + '{0,', + '{"Группировка с комментарием Открыть",0,0,"\х","//{"}', + '},', + '{0,', + '{"Группировка с комментарием Закрыть",0,0,"\ъ","//}"}', + '},', + '{0,', + '{"Фрагмент добавлен",0,0,"/+","//{[+](фрагмент ДОБАВЛЕН), ', + '', + '//} "}', + '},', + '{0,', + '{"Фрагмент удален",0,0,"/-","//{[-](фрагмент УДАЛЕН) ', + '', + '//} ', + '"}', + '},', + '{0,', + '{"Фрагмент ИЗМЕНЕН",0,1,"","//{[*](фрагмент ИЗМЕНЕН), ', + '', + '//} "}', + '},', + '{0,', + '{"Заголовок модуля",0,0,"/ЗМ","////////////////////////////////////////////////////////////////////////////////', + '// МОДУЛЬ :', + '//', + '// -', + '//', + '//', + '////////////////////////////////////////////////////////////////////////////////"}', + '},', + '{5,', + '{"Структура модулей",1,0,"",""},', + '{0,', + '{"Общий модуль",0,0,"","////////////////////////////////////////////////////////////////////////////////', + '// <Заголовок модуля: краткое описание и условия применения модуля.>', + '// ', + '////////////////////////////////////////////////////////////////////////////////', + '#Область ПрограммныйИнтерфейс', + '', + '#КонецОбласти', + '', + '#Область СлужебныеПроцедурыИФункции', + '', + '#КонецОбласти"}', + '},', + '{0,', + '{"Модуль объекта",0,0,"","', + '////////////////////////////////////////////////////////////////////////////////', + '// <Заголовок модуля: краткое описание и условия применения модуля.>', + '// ', + '////////////////////////////////////////////////////////////////////////////////', + '', + '#Область ПрограммныйИнтерфейс', + '', + '#КонецОбласти', + '', + '#Область ОбработчикиПроведения', + '', + '#КонецОбласти', + '', + '#Область ОбработчикиСобытий', + '', + '#КонецОбласти', + '', + '#Область СлужебныеПроцедурыИФункции', + '', + '#КонецОбласти', + '', + '', + '"}', + '},', + '{0,', + '{"Модуль формы",0,0,"","////////////////////////////////////////////////////////////////////////////////', + '// <Заголовок модуля: краткое описание и условия применения модуля.>', + '// ', + '////////////////////////////////////////////////////////////////////////////////', + '', + '', + '#Область ОбработчикиСобытийФормы', + '', + '#КонецОбласти', + '', + '#Область ОбработчикиСобытийЭлементовШапкиФормы', + '', + '#КонецОбласти', + '', + '#Область ОбработчикиСобытийЭлементовТаблицыФормы<ИмяТаблицыФормы>', + '', + '#КонецОбласти', + '', + '#Область ОбработчикиКомандФормы', + '', + '#КонецОбласти', + '', + '#Область СлужебныеПроцедурыИФункции', + '', + '#КонецОбласти"}', + '},', + '{0,', + '{"Модуль бизнес-процесса",0,0,"","', + '////////////////////////////////////////////////////////////////////////////////', + '// <Заголовок модуля: краткое описание и условия применения модуля.>', + '// ', + '////////////////////////////////////////////////////////////////////////////////', + '', + '#Область ОбработчикиСобытийКартыМаршрута', + '', + '#КонецОбласти', + '', + '#Область ОбработчикиСобытийМодуля', + '', + '#КонецОбласти', + '', + '#Область ПрограммныйИнтерфейс', + '', + '#КонецОбласти', + '', + '#Область СлужебныеПроцедурыИФункции', + '', + '#КонецОбласти', + '"}', + '},', + '{0,', + '{"Модуль менеджера",0,0,"","////////////////////////////////////////////////////////////////////////////////', + '// <Заголовок модуля: краткое описание и условия применения модуля.>', + '// ', + '////////////////////////////////////////////////////////////////////////////////', + '', + '#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда', + '', + '#Область ПрограммныйИнтерфейс', + '', + '#КонецОбласти', + '', + '#Область СлужебныеПроцедурыИФункции', + '', + '#КонецОбласти', + '', + '#КонецЕсли', + '"}', + '}', + '},', + '{0,', + '{"Область",0,0,"Обла[сть]","#Область ', + '', + '#КонецОбласти"}', + '}', + '},', + '{4,', + '{"СКД - альфа версия",1,0,"",""},', + '{6,', + '{"НаборыДанных",1,0,"",""},', + '{0,', + '{"СхемаКомпоновки",0,0,"СКД=","СхемаКомпоновки = Новый СхемаКомпоновкиДанных;"}', + '},', + '{0,', + '{"ИсточникДанныхСКД",0,0,"Источник[ДанныхСКД]=","ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить();', + 'ИсточникДанных.Имя = ""local"";', + 'ИсточникДанных.ТипИсточникаДанных = ""local"";', + '"}', + '},', + '{0,', + '{"Набор данных Запрос",0,0,"НаборД[анных=]","НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип(""НаборДанныхЗапросСхемыКомпоновкиДанных""));', + 'НаборДанных.Имя = ""НаборДанных1"";', + 'НаборДанных.ИсточникДанных = ИсточникДанных.Имя;', + 'НаборДанных.Запрос = ;', + '"}', + '},', + '{0,', + '{"Набор данных Объект",0,0,"НаборД[анных=]","НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип(""НаборДанныхОбъектСхемыКомпоновкиДанных""));', + 'НаборДанных.Имя = ""НаборДанных1"";', + 'НаборДанных.ИсточникДанных = ИсточникДанных.Имя;', + 'НаборДанных.ИмяОбъекта = ;', + '"}', + '},', + '{0,', + '{"Набор данных Объединение",0,0,"НаборД[анных=]","НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип(""НаборДанныхОбъединениеСхемыКомпоновкиДанных""));', + 'НаборДанных.Имя = ""НаборДанных1"";', + 'НаборДанных.Элементы = ;', + '"}', + '},', + '{0,', + '{"ПолеСКД",0,0,"ПолеСКД=","ПолеСКД = НаборДанных.Поля.Добавить(Тип(""ПолеНабораДанныхСхемыКомпоновкиДанных""));', + 'ПолеСКД.Поле = """";', + 'ПолеСКД.ПутьКДанным = """";', + 'ПолеСКД.Роль.Измерение = Истина;', + '"}', + '}', + '},', + '{1,', + '{"Ресурсы",1,0,"",""},', + '{0,', + '{"РесурсСКД",0,0,"РесурсСКД=","РесурсСКД = СхемаКомпоновки.ПоляИтога.Добавить();', + 'РесурсСКД.ПутьКДанным = """"; ', + 'РесурсСКД.Выражение = ""Сумма()"";"}', + '}', + '},', + '{1,', + '{"Параметры",1,0,"",""},', + '{0,', + '{"ПараметрСКД",0,0,"ПараметрСКД=","ПараметрСКД = СхемаКомпоновки.Параметры.Добавить(); //Разные параметры надо описывать разными переменными!', + 'ПараметрСКД.Имя = ;', + 'ПараметрСКД.Заголовок = ;', + 'ПараметрСКД.ТипЗначения = ;', + 'ПараметрСКД.ВключатьВДоступныеПоля = Истина;', + 'ПараметрСКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;', + '"}', + '}', + '},', + '{10,', + '{"Настройки",1,0,"",""},', + '{0,', + '{"НастройкиСКД Новый вариант",0,0,"НастройкиСКД=","НастройкиСКД = СхемаКомпоновки.ВариантыНастроек.Добавить();"}', + '},', + '{0,', + '{"НастройкиСКД Настройки по умолчанию",0,0,"НастройкиСКД=","НастройкиСКД = СхемаКомпоновки.НастройкиПоУмолчанию;', + '"}', + '},', + '{0,', + '{"ГруппировкаСКД - новая группировка в корень",0,0,"ГруппировкаСКД=","ГруппировкаСКД = НастройкиСКД.Структура.Добавить(Тип(""""));', + 'ГруппировкаСКД.Использование = Истина;', + 'ПолеГруппировки = ГруппировкаСКД.ПоляГруппировки.Элементы.Добавить(Тип(""ПолеГруппировкиКомпоновкиДанных""));', + 'ПолеГруппировки.Использование = Истина;', + 'ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("""");', + '"}', + '},', + '{0,', + '{"ГруппировкаСКД - вложенная группировка",0,0,"ГруппировкаСКД=","ГруппировкаСКД = ГруппировкаСКД.Структура.Добавить(Тип(""""));', + 'ГруппировкаСКД.Использование = Истина;', + 'ПолеГруппировки = ГруппировкаСКД.ПоляГруппировки.Элементы.Добавить(Тип(""ПолеГруппировкиКомпоновкиДанных""));', + 'ПолеГруппировки.Использование = Истина;', + 'ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("""");', + '"}', + '},', + '{0,', + '{"ВыбранноеПолеСКД - АвтоПоле",0,0,"ВыбранноеПолеСКД=","ВыбранноеПолеСКД = ГруппировкаСКД.Выбор.Элементы.Добавить(Тип(""АвтоВыбранноеПолеКомпоновкиДанных""));', + 'ВыбранноеПолеСКД.Использование = Истина;', + '"}', + '},', + '{0,', + '{"ВыбранноеПолеСКД - Произольное поле",0,0,"ВыбранноеПолеСКД=","ВыбранноеПолеСКД = ГруппировкаСКД.Выбор.Элементы.Добавить(Новый ПолеКомпоновкиДанных(""""));', + 'ВыбранноеПолеСКД.Использование = Истина;', + '"}', + '},', + '{0,', + '{"ПолеСортировкиСКД - Авто",0,0,"ПолеСортировкиСКД=","ПолеСортировки = НастройкиСКД.Порядок.Элементы.Добавить(Тип(""АвтоЭлементПорядкаКомпоновкиДанных""));', + 'ПолеСортировки.Использование = Истина;', + '"}', + '},', + '{0,', + '{"ПолеСортировкиСКД - Произольное поле",0,0,"ПолеСортировкиСКД=","ПолеСортировки = НастройкиСКД.Порядок.Элементы.Добавить(Новый ПолеКомпоновкиДанных(""""));', + 'ПолеСортировки.Использование = Истина;', + '"}', + '},', + '{0,', + '{"ЗначениеПараметраСКД",0,0,"","ЗначениеПараметраСКД = НастройкиСКД.ПараметрыДанных.Элементы.Добавить();', + 'ЗначениеПараметраСКД.Использование = Истина;', + 'ЗначениеПараметраСКД.Параметр = Новый ПараметрКомпоновкиДанных("""");', + 'ЗначениеПараметраСКД.Значение = ;"}', + '},', + '{0,', + '{"ОтборСКД",0,0,"","ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип(""ЭлементОтбораКомпоновкиДанных""));', + 'ЭлементОтбора.Использование = Истина;', + 'ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("""");', + 'ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;', + 'ЭлементОтбора.ПравоеЗначение = ;', + '"}', + '}', + '}', + '},', + '{11,', + '{"Асинхронные вызовы",1,0,"",""},', + '{0,', + '{"Описание оповещения",0,0,"Опис[ание]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + '"}', + '},', + '{0,', + '{"Описание оповещения (с описанием обработчика)",0,0,"Опис[ание]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект);', + '', + '//==========Вынести в отдельную процедуру========', + '//', + '//Список аргументов зависит от контекста вызова!', + '//&НаКлиенте', + '//Процедура (ДополнительныеПараметры) Экспорт', + '// ', + '//КонецПроцедуры', + ' "}', + '},', + '{0,', + '{"Описание оповещения с обработчиком ошибки",0,0,"Опис[ание]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект, ,""ОбработкаОшибки"", ЭтотОбъект);', + '"}', + '},', + '{0,', + '{"Описание оповещения с обработчиком ошибки (с описанем обработчика)",0,0,"Опис[ание]","ОписаниеОповещения = Новый ОписаниеОповещения("""", ЭтотОбъект, ,""ОбработкаОшибки"", ЭтотОбъект);', + '', + '//==========Вынести в отдельную процедуру========', + '//', + '//Список аргументов зависит от контекста вызова!', + '//&НаКлиенте', + '//Процедура (ДополнительныеПараметры) Экспорт', + '// ', + '//КонецПроцедуры', + '', + '//&НаКлиенте', + '//Процедура ОбработкаОшибки(ДополнительныеПараметры) Экспорт', + '// ', + '//КонецПроцедуры', + ' "}', + '},', + '{2,', + '{"Помещение файла во временное хранилище",1,0,"",""},', + '{0,', + '{"Поместить файл",0,1,"","&НаКлиенте', + 'Процедура ПоместитьФайлКоманда(Команда)', + ' ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;', + ' ПараметрыДиалога.Заголовок = ""НачатьПомещениеФайлаНаСервер"";', + ' ПараметрыДиалога.МножественныйВыбор = Истина;', + ' ПараметрыДиалога.Фильтр = ""Все файлы|*.*"";', + ' //НСтр(""en = \'Excel (*.XLS, *.xlsx)|*.XLS;*.xlsx|\'; ru = \'Файл таблицы Excel (*.XLS, *.xlsx)|*.XLS;*.xlsx|\'"");', + ' //НСтр(""en = \'Text (*.txt)|*.txt|\'; ru = \'текстовый файл (*.txt)|*.txt|\'"");', + ' ЗавершениеОбратныйВызов = Новый ОписаниеОповещения(""ЗавершениеОбратныйВызов"", ЭтотОбъект);', + ' ПрогрессОбратныйВызов = Новый ОписаниеОповещения(""ПрогрессОбратныйВызов"", ЭтотОбъект);', + ' ПередНачалоОбратныйВызов = Новый ОписаниеОповещения(""ПередНачалоОбратныйВызов"", ЭтотОбъект);', + ' НачатьПомещениеФайлаНаСервер(ЗавершениеОбратныйВызов, ПрогрессОбратныйВызов, ПередНачалоОбратныйВызов, , ПараметрыДиалога);', + 'КонецПроцедуры', + '&НаКлиенте', + 'Процедура ЗавершениеОбратныйВызов(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт', + ' Сообщить(""Помещение файла "" + ?(ОписаниеПомещенногоФайла.ПомещениеФайлаОтменено, ""отменено"", ""выполнено успешно""));', + ' Сообщить(""Адрес во временном хранилище: "" + ОписаниеПомещенногоФайла.Адрес);', + ' Сообщить(""Имя файла: "" + ОписаниеПомещенногоФайла.СсылкаНаФайл.Имя);', + ' Сообщить(""Размер файла, байт: "" + ОписаниеПомещенногоФайла.СсылкаНаФайл.Размер());', + 'КонецПроцедуры', + '&НаКлиенте', + 'Процедура ПрогрессОбратныйВызов(ПомещаемыйФайл, Помещено, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт', + ' Состояние(""Файл "" + ПомещаемыйФайл.Имя, Помещено, ""Файл имеет размер "" + ПомещаемыйФайл.Размер() + "" байт"", БиблиотекаКартинок.Документ);', + 'КонецПроцедуры', + '&НаКлиенте', + 'Процедура ПередНачалоОбратныйВызов(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт', + ' Сообщить(""Помещаемый файл - "" + ПомещаемыйФайл.Имя + "", размер = "" + ПомещаемыйФайл.Размер());', + 'КонецПроцедуры"}', + '},', + '{0,', + '{"Поместить файл АСИНХ",0,1,"","&НаКлиенте', + 'АСИНХ Процедура ПоместитьФайлКоманда(Команда)', + ' ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;', + ' ПараметрыДиалога.Заголовок = ""НачатьПомещениеФайлаНаСервер"";', + ' ПараметрыДиалога.МножественныйВыбор = Истина;', + ' ПараметрыДиалога.Фильтр = ""Все файлы|*.*"";', + ' //НСтр(""en = \'Excel (*.XLS, *.xlsx)|*.XLS;*.xlsx|\'; ru = \'Файл таблицы Excel (*.XLS, *.xlsx)|*.XLS;*.xlsx|\'"");', + ' //НСтр(""en = \'Text (*.txt)|*.txt|\'; ru = \'текстовый файл (*.txt)|*.txt|\'"");', + ' ПрогрессОбратныйВызов = Новый ОписаниеОповещения(""ПрогрессОбратныйВызов"", ЭтотОбъект);', + ' ПередНачалоОбратныйВызов = Новый ОписаниеОповещения(""ПередНачалоОбратныйВызов"", ЭтотОбъект);', + ' ОписаниеПомещенногоФайла = ЖДАТЬ НачатьПомещениеФайлаНаСервер(ПрогрессОбратныйВызов, ПередНачалоОбратныйВызов, , ПараметрыДиалога);', + ' Если ОписаниеПомещенногоФайла = Неопределено Тогда', + ' Возврат;', + ' КонецЕсли; ', + ' ', + ' Сообщить(""Помещение файла "" + ?(ОписаниеПомещенногоФайла.ПомещениеФайлаОтменено, ""отменено"", ""выполнено успешно""));', + ' Сообщить(""Адрес во временном хранилище: "" + ОписаниеПомещенногоФайла.Адрес);', + ' Сообщить(""Имя файла: "" + ОписаниеПомещенногоФайла.СсылкаНаФайл.Имя);', + ' Сообщить(""Размер файла, байт: "" + ОписаниеПомещенногоФайла.СсылкаНаФайл.Размер());', + '', + 'КонецПроцедуры', + '', + '&НаКлиенте', + 'Процедура ПрогрессОбратныйВызов(ПомещаемыйФайл, Помещено, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт', + ' Состояние(""Файл "" + ПомещаемыйФайл.Имя, Помещено, ""Файл имеет размер "" + ПомещаемыйФайл.Размер() + "" байт"", БиблиотекаКартинок.Документ);', + 'КонецПроцедуры', + '&НаКлиенте', + 'Процедура ПередНачалоОбратныйВызов(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт', + ' Сообщить(""Помещаемый файл - "" + ПомещаемыйФайл.Имя + "", размер = "" + ПомещаемыйФайл.Размер());', + 'КонецПроцедуры"}', + '}', + '},', + '{7,', + '{"Процедура",1,0,"",""},', + '{0,', + '{"Асинх Процедура",0,0,"Проц[едура]","Асинх Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Асинх Процедура с заголовком",0,0,"Процедура","////////////////////////////////////////////////////////////////////////////////', + '//', + '// Процедура ', + '//', + '// Описание:', + '//', + '//', + '// Параметры (название, тип, дифференцированное значение)', + '//', + 'Асинх Процедура ()', + ' ', + 'КонецПроцедуры //', + '', + '"}', + '},', + '{0,', + '{"Асинх Процедура НаКлиенте",0,0,"Проц[едура]","&НаКлиенте', + 'Асинх Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Асинх Процедура НаСервереБезКонтекста",0,0,"Проц[едура]","&НаСервереБезКонтекста', + 'Асинх Процедура ()', + '', + 'КонецПроцедуры"}', + '},', + '{0,', + '{"Асинх Процедура НаСервере",0,0,"Проц[едура]","&НаСервере', + 'Асинх Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Асинх Процедура НаКлиентеНаСервереБезКонтекста (только модули упр.форм)",0,0,"Проц[едура]","&НаКлиентеНаСервереБезКонтекста', + 'Асинх Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '},', + '{0,', + '{"Асинх Процедура НаКлиентеНаСервере (только модули команд)",0,0,"Проц[едура]","&НаКлиентеНаСервере', + 'Асинх Процедура ()', + ' ', + 'КонецПроцедуры', + '"}', + '}', + '},', + '{7,', + '{"Функция",1,0,"",""},', + '{0,', + '{"Асинх Функция",0,0,"Функ[ция]","Асинх Функция ()', + ' ', + 'КонецФункции', + '"}', + '},', + '{0,', + '{"Асинх Функция с заголовком",0,0,"Функция","////////////////////////////////////////////////////////////////////////////////', + '//', + '// Функция ', + '//', + '// Описание:', + '//', + '//', + '// Параметры (название, тип, дифференцированное значение)', + '//', + '// Возвращаемое значение: ', + '//', + 'Асинх Функция ()', + ' ', + 'КонецФункции //', + '"}', + '},', + '{0,', + '{"Асинх Функция НаКлиенте",0,0,"Функ[ция]","&НаКлиенте', + 'Асинх Функция ()', + ' ', + 'КонецФункции', + '"}', + '},', + '{0,', + '{"Асинх Функция НаСервереБезКонтекста",0,0,"Функ[ция]","&НаСервереБезКонтекста', + 'Асинх Функция ()', + ' ', + 'КонецФункции', + '"}', + '},', + '{0,', + '{"Асинх Функция НаСервере",0,0,"Функ[ция]","&НаСервере', + 'Асинх Функция ()', + ' ', + 'КонецФункции', + '"}', + '},', + '{0,', + '{"Асинх Функция НаКлиентеНаСервереБезКонтекста (только модули упр.форм)",0,0,"Функ[ция]","&НаКлиентеНаСервереБезКонтекста', + 'Асинх Функция ()', + ' ', + 'КонецФункции"}', + '},', + '{0,', + '{"Асинх Функция НаКлиентеНаСервере (только модули команд)",0,0,"Функ[ция]","&НаКлиентеНаСервере', + 'Асинх Функция ()', + ' ', + 'КонецФункции"}', + '}', + '},', + '{0,', + '{"(Асинх) Процедура",0,0,"Асинх[ Процедура]","Асинх Процедура ()', + ' ', + 'КонецПроцедуры', + ' "}', + '},', + '{0,', + '{"(Асинх) Функция",0,0,"Асинх[ Функция]","Асинх Функция ()', + ' ', + 'КонецПроцедуры', + ' "}', + '},', + '{0,', + '{"Обещание",0,0,"Обещание=","Обещание = Ждать ;"}', + '},', + '{6,', + '{"Вопрос",1,0,"",""},', + '{0,', + '{"Асинх Вопрос",0,0,"Ответ=","Ответ = Ждать ВопросАсинх("""",, 60);', + ' "}', + '},', + '{0,', + '{"Асинх Вопрос",0,0,"ПоказатьВо[прос]","Ответ = Ждать ВопросАсинх("""",, 60);', + '"}', + '},', + '{0,', + '{"Асинх Вопрос",0,0,"Воп[рос]","Ответ = Ждать ВопросАсинх("""",, 60);', + '"}', + '},', + '{0,', + '{"Асинх Вопрос с анализом результата",0,0,"Ответ=","Ответ = Ждать ВопросАсинх("""",, 60);', + ' ', + 'Если Ответ ""> Тогда', + ' ', + 'КонецЕсли; ', + '"}', + '},', + '{0,', + '{"Асинх Вопрос с анализом результата",0,0,"ПоказатьВо[прос]","Ответ = Ждать ВопросАсинх("""",, 60);', + ' ', + 'Если Ответ ""> Тогда', + ' ', + 'КонецЕсли; ', + '"}', + '},', + '{0,', + '{"Асинх Вопрос с анализом результата",0,0,"Воп[рос]","Ответ = Ждать ВопросАсинх("""",, 60);', + ' ', + 'Если Ответ ""> Тогда', + ' ', + 'КонецЕсли; ', + '"}', + '}', + '}', + '},', + '{4,', + '{"Расширения",1,0,"",""},', + '{0,', + '{"Расширения Удаление",0,0,"Уд[аление]","#Удаление', + ' ', + '#КонецУдаления"}', + '},', + '{0,', + '{"Расширения Вставка",0,0,"Вст[авка]","#Вставка', + ' ', + '#КонецВставки"}', + '},', + '{4,', + '{"Процедуры",1,0,"",""},', + '{0,', + '{"Расширения &Перед",0,0,"Проц[едура]","&Перед("""")', + 'Процедура ()', + ' ', + 'КонецПроцедуры"}', + '},', + '{0,', + '{"Расширения &После",0,0,"Проц[едура]","&После("""")', + 'Процедура ()', + ' ', + 'КонецПроцедуры"}', + '},', + '{0,', + '{"Расширения &Вместо",0,0,"Проц[едура]","&Вместо("""")', + 'Процедура ()', + ' ', + ' //ПродолжитьВызов();', + 'КонецПроцедуры"}', + '},', + '{0,', + '{"Расширения &ИзменениеИКонтроль",0,0,"Проц[едура]","&ИзменениеИКонтроль("""")', + 'Процедура ПРЕФИКС_()', + ' ', + 'КонецПроцедуры"}', + '}', + '},', + '{4,', + '{"Функции",1,0,"",""},', + '{0,', + '{"Расширения &Перед",0,0,"Функ[ция]","&Перед("""")', + 'Функция ()', + ' ', + 'Конецфункции"}', + '},', + '{0,', + '{"Расширения &После",0,0,"Функ[ция]","&После("""")', + 'Функция ()', + ' ', + 'Конецфункции"}', + '},', + '{0,', + '{"Расширения &Вместо",0,0,"Функ[ция]","&Вместо("""")', + 'Функция ()', + ' ', + ' //ПродолжитьВызов();', + 'Конецфункции"}', + '},', + '{0,', + '{"Расширения &ИзменениеИКонтроль",0,0,"Проц[едура]","&ИзменениеИКонтроль("""")', + 'Функция ПРЕФИКС_()', + ' ', + 'Конецфункции"}', + '}', + '}', + '},', + '{1,', + '{"Полезняшки",1,0,"",""},', + '{0,', + '{"Загрузка данных из Excel АСИНХ",0,0,"","&НаКлиенте', + 'АСИНХ Процедура ПоместитьФайлКоманда(Команда)', + ' ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;', + ' ПараметрыДиалога.Заголовок = ""НачатьПомещениеФайлаНаСервер"";', + ' ПараметрыДиалога.МножественныйВыбор = Истина;', + ' ПараметрыДиалога.Фильтр = НСтр(""en = \'Excel (*.XLS, *.xlsx)|*.XLS;*.xlsx|\'; ru = \'Файл таблицы Excel (*.XLS, *.xlsx)|*.XLS;*.xlsx|\'"");', + ' ПрогрессОбратныйВызов = Новый ОписаниеОповещения(""ПрогрессОбратныйВызов"", ЭтотОбъект);', + ' ПередНачалоОбратныйВызов = Новый ОписаниеОповещения(""ПередНачалоОбратныйВызов"", ЭтотОбъект);', + ' ОписаниеПомещенногоФайла = ЖДАТЬ ПоместитьФайлНаСерверАсинх(ПрогрессОбратныйВызов, ПередНачалоОбратныйВызов, , ПараметрыДиалога);', + ' Если ОписаниеПомещенногоФайла = Неопределено Тогда', + ' Возврат;', + ' КонецЕсли; ', + ' ', + ' Сообщить(""Помещение файла "" + ?(ОписаниеПомещенногоФайла.ПомещениеФайлаОтменено, ""отменено"", ""выполнено успешно""));', + ' Сообщить(""Адрес во временном хранилище: "" + ОписаниеПомещенногоФайла.Адрес);', + ' Сообщить(""Имя файла: "" + ОписаниеПомещенногоФайла.СсылкаНаФайл.Имя);', + ' Сообщить(""Размер файла, байт: "" + ОписаниеПомещенногоФайла.СсылкаНаФайл.Размер());', + '', + ' ОбработатьЗагруженныйФайл(ОписаниеПомещенногоФайла.Адрес);', + 'КонецПроцедуры', + '', + '&НаСервереБезКонтекста', + 'Процедура ОбработатьЗагруженныйФайл(Адрес)', + ' ', + ' ФайлНаДиске = ПолучитьИмяВременногоФайла(""xlsx""); ', + ' ДанныеФайла = ПолучитьИзВременногоХранилища(Адрес); ', + ' ДанныеФайла.Записать(ФайлНаДиске) ; ', + ' ', + ' ТабДок = Новый ТабличныйДокумент;', + ' ТабДок.Прочитать(ФайлНаДиске, СпособЧтенияЗначенийТабличногоДокумента.Значение);', + ' ', + ' ПостроительЗапроса = Новый ПостроительЗапроса;', + ' ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных (ТабДок.Область(""Лист1"")); //Здесть Лист1 - название листа экселя.', + ' ПостроительЗапроса.Выполнить();', + ' //В файле первой строчкой должны идти названия колонок. Если этого не будет, то построитель не вернет ТЗ, т.к. не будут заданы имена колонок.', + ' //Также нужно смотреть на типы ячеек файла. Типизация нормально отрабатывает, если заданы соответствующие типы. Иначе ""10.08.2017"" в экселе - это строка, а не дата.', + ' СтрокиТЗ = ПостроительЗапроса.Результат.Выгрузить(); //Выполняем запрос к источнику данных, автоматически выбирая все поля и получаем таблицу значений', + '', + ' Для каждого СтрокаТЗ Из СтрокиТЗ Цикл', + ' //Полученные данные', + ' КонецЦикла; ', + 'КонецПроцедуры ', + '', + '&НаКлиенте', + 'Процедура ПрогрессОбратныйВызов(ПомещаемыйФайл, Помещено, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт', + ' Состояние(""Файл "" + ПомещаемыйФайл.Имя, Помещено, ""Файл имеет размер "" + ПомещаемыйФайл.Размер() + "" байт"", БиблиотекаКартинок.Документ);', + 'КонецПроцедуры', + '', + '&НаКлиенте', + 'Процедура ПередНачалоОбратныйВызов(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт', + ' Сообщить(""Помещаемый файл - "" + ПомещаемыйФайл.Имя + "", размер = "" + ПомещаемыйФайл.Размер());', + 'КонецПроцедуры"}', + '}', + '}', + '}', + '}' + ].join('\n'); + + require(['editor'], function () { + + init('8.3.18.1'); + showStatusBar(true); + + parseSnippets(st1); + parseSnippets(st2, true); + + var assert = chai.assert; + var expect = chai.expect; + chai.should(); + + function getPosition(model) { + + let strings = model.getValue().split('\n'); + return new monaco.Position(strings.length, strings[strings.length - 1].length + 1); + + } + + function getModel(string) { + + return monaco.editor.createModel(string, 'bsl'); + + } + + function helper(string) { + let model = getModel(string); + let position = getPosition(model); + return new bslHelper(model, position); + } + + function helperToConsole(helper) { + + console.log('line number:', helper.column); + console.log('column:', helper.lineNumber); + console.log('word:', helper.word); + console.log('last operator:', helper.lastOperator); + console.log('whitespace:', helper.hasWhitespace); + console.log('last expr:', helper.lastExpression); + console.log('expr array:', helper.getExpressioArray()); + console.log('last raw expr:', helper.lastRawExpression); + console.log('raw array:', helper.getRawExpressioArray()); + console.log('text before:', helper.textBeforePosition); + + } + + function getModuleText() { + + return [ + '// Значение реквизита, прочитанного из информационной базы по ссылке на объект.', + '//', + '// Если необходимо зачитать реквизит независимо от прав текущего пользователя,', + '// то следует использовать предварительный переход в привилегированный режим.', + '//', + '// Параметры:', + '// Ссылка - ЛюбаяСсылка - объект, значения реквизитов которого необходимо получить.', + '// - Строка - полное имя предопределенного элемента, значения реквизитов которого необходимо получить.', + '// ИмяРеквизита - Строка - имя получаемого реквизита.', + '// ВыбратьРазрешенные - Булево - если Истина, то запрос к объекту выполняется с учетом прав пользователя, и в случае,', + '// - если есть ограничение на уровне записей, то возвращается Неопределено;', + '// - если нет прав для работы с таблицей, то возникнет исключение.', + '// - если Ложь, то возникнет исключение при отсутствии прав на таблицу', + '// или любой из реквизитов.', + '//', + '// Возвращаемое значение:', + '// Произвольный - зависит от типа значения прочитанного реквизита.', + '// - если в параметр Ссылка передана пустая ссылка, то возвращается Неопределено.', + '// - если в параметр Ссылка передана ссылка несуществующего объекта (битая ссылка), ', + '// то возвращается Неопределено.', + '//', + 'Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные = Ложь) Экспорт', + ' ', + ' Если ПустаяСтрока(ИмяРеквизита) Тогда ', + ' ВызватьИсключение НСтр("ru = \'Неверный второй параметр ИмяРеквизита: ', + ' |- Имя реквизита должно быть заполнено\'");', + ' КонецЕсли;', + ' ', + ' Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные);', + ' Возврат Результат[СтрЗаменить(ИмяРеквизита, ".", "")];', + ' ', + 'КонецФункции ', + '', + '// Проверяет наличие ссылок на объект в базе данных.', + '//', + '// Параметры:', + '// СсылкаИлиМассивСсылок - ЛюбаяСсылка, Массив - объект или список объектов.', + '// ИскатьСредиСлужебныхОбъектов - Булево - если Истина, то не будут учитываться', + '// исключения поиска ссылок, заданные при разработке конфигурации.', + '// Про исключение поиска ссылок подробнее', + '// см. ОбщегоНазначенияПереопределяемый.ПриДобавленииИсключенийПоискаСсылок', + '// ДругиеИсключения - Массив - полные имена объектов метаданных, которые также', + '// требуется исключить из поиска ссылок.', + '//', + '// Возвращаемое значение:', + '// Булево - Истина, если есть ссылки на объект.', + '//', + 'Функция ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь, ДругиеИсключения = Неопределено) Экспорт', + ' ', + ' УстановитьПривилегированныйРежим(Истина);', + ' ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);', + ' Возврат ТаблицаСсылок.Количество() > 0;', + ' ', + 'КонецФункции', + '', + '// Производит замену ссылок во всех данных. После замены неиспользуемые ссылки опционально удаляются.', + '// Замена ссылок происходит с транзакциями по изменяемому объекту и его связям, не по анализируемой ссылке.', + '//', + '// Параметры:', + '// ПарыЗамен - Соответствие - Пары замен.', + '// * Ключ - ЛюбаяСсылка - Что ищем (дубль).', + '// * Значение - ЛюбаяСсылка - На что заменяем (оригинал).', + '// Ссылки сами на себя и пустые ссылки для поиска будут проигнорированы.', + '// ', + '// Параметры - Структура - Необязательный. Параметры замены.', + '// ', + '// * СпособУдаления - Строка - Необязательный. Что делать с дублем после успешной замены.', + '// "" - По умолчанию. Не предпринимать никаких действий.', + '// "Пометка" - Помечать на удаление.', + '// "Непосредственно" - Удалять непосредственно.', + '// ', + '// * УчитыватьПрикладныеПравила - Булево - Необязательный. Режим проверки параметра ПарыЗамен.', + '// Истина - По умолчанию. Проверять каждую пару "дубль-оригинал" (вызывается функция', + '// ВозможностьЗаменыЭлементов модуля менеджера).', + '// Ложь - Отключить прикладные проверки пар.', + '// ', + '// * ВключатьБизнесЛогику - Булево - Необязательный. Режим записи мест использования при замене дублей на оригиналы.', + '// Истина - По умолчанию. Места использования дублей записываются в режиме ОбменДанными.Загрузка = Ложь.', + '// Ложь - Запись ведется в режиме ОбменДанными.Загрузка = Истина.', + '// ', + '// * ЗаменаПарыВТранзакции - Булево - Необязательный. Определяет размер транзакции.', + '// Истина - По умолчанию. Транзакция охватывает все места использования одного дубля. Может быть очень ресурсоемко ', + '// в случае большого количества мест использований.', + '// Ложь - Замена каждого места использования выполняется в отдельной транзакции.', + '// ', + '// * ПривилегированнаяЗапись - Булево - Необязательный. Требуется ли устанавливать привилегированный режим перед запись.', + '// Ложь - По умолчанию. Записывать с текущими правами.', + '// Истина - Записывать в привилегированном режиме.', + '//', + '// Возвращаемое значение:', + '// ТаблицаЗначений - Неуспешные замены (ошибки).', + '// * Ссылка - ЛюбаяСсылка - Ссылка, которую заменяли.', + '// * ОбъектОшибки - Произвольный - Объект - причина ошибки.', + '// * ПредставлениеОбъектаОшибки - Строка - Строковое представление объекта ошибки.', + '// * ТипОшибки - Строка - Тип ошибки:', + '// "ОшибкаБлокировки" - при обработке ссылки некоторые объекты были заблокированы.', + '// "ДанныеИзменены" - в процессе обработки данные были изменены другим пользователем.', + '// "ОшибкаЗаписи" - не смогли записать объект, или метод ВозможностьЗаменыЭлементов вернул отказ.', + '// "ОшибкаУдаления" - не смогли удалить объект.', + '// "НеизвестныеДанные" - при обработке были найдены данные, которые не планировались к анализу, замена не реализована.', + '// * ТекстОшибки - Строка - Подробное описание ошибки.', + '//', + 'Функция ЗаменитьСсылки(Знач ПарыЗамен, Знач Параметры = Неопределено) Экспорт', + '', + ' Результат = Новый Структура;', + ' Результат.Вставить("ЕстьОшибки", Ложь);', + ' Результат.Вставить("Ошибки", ОшибкиЗамены);', + ' ', + ' Возврат Результат.Ошибки;', + '', + 'КонецФункции'].join('\n'); + + } + + let bsl = helper(''); + let bslLoaded = (bslGlobals != undefined); + + it("проверка загрузки bslGlobals", function () { + assert.equal(bslLoaded, true); + }); + + if (bslLoaded) { + + it("проверка существования глобальной переменной editor", function () { + assert.notEqual(editor, undefined); + }); + + it("проверка определения русского языка", function () { + assert.equal(bsl.hasRu('тест'), true); + }); + + it("проверка автокомплита для глобальной функции Найти", function () { + bsl = helper('най'); + let suggestions = []; + bsl.getCommonCompletion(suggestions, bslGlobals.globalfunctions, monaco.languages.CompletionItemKind.Function) + expect(suggestions).to.be.an('array').that.not.is.empty; + }); + + it("проверка автокомплита для глобальной функции Найти обернутой в функцию", function () { + bsl = helper('СтрНайти(Най'); + let suggestions = []; + bsl.getCommonCompletion(suggestions, bslGlobals.globalfunctions, monaco.languages.CompletionItemKind.Function) + expect(suggestions).to.be.an('array').that.not.is.empty; + }); + + it("проверка подсказки параметров для глобальной функции Найти(", function () { + bsl = helper('Найти('); + let suggestions = []; + let help = bsl.getCommonSigHelp(bslGlobals.globalfunctions); + expect(help).to.have.property('activeParameter'); + }); + + it("проверка подсказки параметров для глобальной функции Найти обернутой в функцию", function () { + bsl = helper('СтрНайти(Найти('); + let suggestions = []; + let help = bsl.getCommonSigHelp(bslGlobals.globalfunctions); + expect(help).to.have.property('activeParameter'); + }); + + it("проверка автокомплита для конструктора HTTPЗапрос", function () { + bsl = helper('Запрос = Новый HTTPЗа'); + assert.equal(bsl.requireClass(), true); + let suggestions = []; + bsl.getCommonCompletion(suggestions, bslGlobals.classes, monaco.languages.CompletionItemKind.Constructor) + expect(suggestions).to.be.an('array').that.not.is.empty; + expect(suggestions).to.have.deep.property('[0].label', 'HTTPЗапрос'); + }); + + it("проверка автокомплита для конструктора HTTPЗапрос обернутого в функцию", function () { + bsl = helper('СтрНайти(Новый HTTPЗа'); + assert.equal(bsl.requireClass(), true); + let suggestions = []; + bsl.getCommonCompletion(suggestions, bslGlobals.classes, monaco.languages.CompletionItemKind.Constructor) + expect(suggestions).to.be.an('array').that.not.is.empty; + expect(suggestions).to.have.deep.property('[0].label', 'HTTPЗапрос'); + }); + + it("проверка подсказки параметров для конструктора HTTPЗапрос", function () { + bsl = helper('Новый HTTPЗапрос('); + let suggestions = []; + let help = bsl.getClassSigHelp(bslGlobals.classes); + expect(help).to.have.property('activeParameter'); + }); + + it("проверка подсказки параметров для конструктора HTTPЗапрос обернутого в функцию", function () { + bsl = helper('СтрНайти(Новый HTTPЗапрос('); + let suggestions = []; + let help = bsl.getClassSigHelp(bslGlobals.classes); + expect(help).to.have.property('activeParameter'); + }); + + it("проверка автокомплита объекта HTTPЗапрос (список свойств и методов)", function () { + bsl = helper('HTTPЗапрос.'); + let suggestions = []; + bsl.getClassCompletion(suggestions, bslGlobals.classes); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "УстановитьПараметр"), false); + }); + + it("проверка автокомплита для экземпляра объекта HTTPЗапрос (список свойств и методов)", function () { + bsl = helper('Запрос = Новый HTTPЗапрос();\nЗапрос.'); + let suggestions = []; + bsl.getClassCompletion(suggestions, bslGlobals.classes); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "УстановитьПараметр"), false); + }); + + it("проверка автокомплита объекта HTTPЗапрос (список свойств и методов) обернутого в функцию", function () { + bsl = helper('Найти(HTTPЗапрос.'); + let suggestions = []; + bsl.getClassCompletion(suggestions, bslGlobals.classes); + expect(suggestions).to.be.an('array').that.not.is.empty; + }); + + it("проверка автокомплита метода УстановитьИмяФайлаТела объекта HTTPЗапрос", function () { + bsl = helper('HTTPЗапрос.УстановитьИмя'); + let suggestions = []; + bsl.getClassCompletion(suggestions, bslGlobals.classes); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "УстановитьИмяФайлаТела"), true); + }); + + it("проверка автокомплита метода УстановитьИмяФайлаТела объекта HTTPЗапрос обернутого в функцию", function () { + bsl = helper('Найти(HTTPЗапрос.УстановитьИмя'); + let suggestions = []; + bsl.getClassCompletion(suggestions, bslGlobals.classes); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "УстановитьИмяФайлаТела"), true); + }); + + it("проверка автокомплита для объекта метаданных 'Справочники'", function () { + bsl = helper('Товар = Справоч'); + let suggestions = []; + bsl.getCommonCompletion(suggestions, bslGlobals.globalvariables, monaco.languages.CompletionItemKind.Class) + expect(suggestions).to.be.an('array').that.not.is.empty; + expect(suggestions).to.have.deep.property('[0].label', 'Справочники'); + }); + + it("проверка автокомплита для объекта метаданных 'Справочники.' обернутого в функцию", function () { + bsl = helper('Найти(Справочн'); + let suggestions = []; + bsl.getCommonCompletion(suggestions, bslGlobals.globalvariables, monaco.languages.CompletionItemKind.Class) + expect(suggestions).to.be.an('array').that.not.is.empty; + expect(suggestions).to.have.deep.property('[0].label', 'Справочники'); + }); + + it("проверка автокомплита для объекта метаданных 'Справочники.' (список справочников)", function () { + bsl = helper('Товар = Справочники.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + }); + + it("проверка автокомплита для объекта метаданных 'Справочники.' (список справочников) обернутого в функцию", function () { + bsl = helper('Найти(Справочники.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + }); + + it("проверка автокомплита для объекта метаданных 'Справочники.Товары.' (список функций менеджера)", function () { + bsl = helper('Товар = Справочники.Товары.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + }); + + it("проверка автокомплита для объекта метаданных 'Справочники.Товары.' (список функций менеджера) обернутого в функцию", function () { + bsl = helper('Найти(Справочники.Товары.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + }); + + it("проверка автокомплита для элемента справочника 'Товары.' (список реквизитов и функций объекта)", function () { + bsl = helper('Товар = Справочники.Товары.НайтиПоКоду(1);\nТовар.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Цена"), true); + }); + + it("проверка автокомплита для элемента справочника 'Товары.' (список предопределенных)", function () { + bsl = helper('Товар = Справочники.Товары.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Услуга"), true); + }); + + it("проверка автокомплита для элемента справочника 'Товары.' (список реквизитов и функций объекта) обернутого в функцию", function () { + bsl = helper('Товар = Справочники.Товары.НайтиПоКоду(1);\nНайти(Товар.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Цена"), true); + }); + + it("проверка подсказки параметров для метода 'Записать' документа 'АвансовыйОтчет'", function () { + bsl = helper('Док = Документы.АвансовыйОтчет.НайтиПоНомеру(1);\nДок.Записать('); + let suggestions = []; + let help = bsl.getMetadataSigHelp(bslMetadata); + expect(help).to.have.property('activeParameter'); + }); + + it("проверка получения существующего текста запроса", function () { + editor.setPosition(new monaco.Position(10, 1)); + assert.notEqual(getQuery(), null); + }); + + it("проверка получения несуществующего текста запроса", function () { + editor.setPosition(new monaco.Position(1, 1)); + assert.equal(getQuery(), null); + }); + + it("проверка очистки всего текста", function () { + let text = editor.getValue(); + eraseText(); + assert.equal(editor.getValue(), getText()); + editor.setValue(text); + assert.equal(text, getText()); + }); + + it("проверка обновления метаданных", function () { + let mCopy = JSON.parse(JSON.stringify(bslMetadata)); + assert.notEqual(updateMetadata(123), true); + let strJSON = '{"catalogs": {"АвансовыйОтчетПрисоединенныеФайлы": {"properties": {"Автор": "Автор","ВладелецФайла": "Размещение","ДатаМодификацииУниверсальная": "Дата изменения (универсальное время)","ДатаСоздания": "Дата создания","Зашифрован": "Зашифрован","Изменил": "Отредактировал","ИндексКартинки": "Индекс значка","Описание": "Описание","ПодписанЭП": "Подписан электронно","ПутьКФайлу": "Путь к файлу","Размер": "Размер (байт)","Расширение": "Расширение","Редактирует": "Редактирует","СтатусИзвлеченияТекста": "Статус извлечения текста","ТекстХранилище": "Текст","ТипХраненияФайла": "Тип хранения файла","Том": "Том","ФайлХранилище": "Временное хранилище файла","ДатаЗаема": "Дата заема","ХранитьВерсии": "Хранить версии","ИмяПредопределенныхДанных": "","Предопределенный": "","Ссылка": "","ПометкаУдаления": "","Наименование": ""}}}}'; + assert.equal(updateMetadata(strJSON), true); + bsl = helper('Отчет = Справочники.АвансовыйОтчетПрисоединенныеФайлы.НайтиПоКоду(1);\nОтчет.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ДатаМодификацииУниверсальная"), true); + bslMetadata = JSON.parse(JSON.stringify(mCopy)); + }); + + it("проверка обновления сниппетов", function () { + let sCopy = JSON.parse(JSON.stringify(snippets)); + assert.notEqual(updateSnippets(123), true); + let strJSON = '{"snippets": { "ЕслиЧто": { "prefix": "Если", "body": "Если ${1:Условие} Тогда\n\t$0\nКонецЕсли;", "description": "ЕслиЧто"}}}'; + assert.equal(updateSnippets(strJSON), true); + bsl = helper('ЕслиЧто'); + let suggestions = []; + bsl.getSnippets(suggestions, snippets, false); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.detail === "ЕслиЧто"), true); + snippets = JSON.parse(JSON.stringify(sCopy)); + }); + + it("проверка замены сниппетов", function () { + let sCopy = JSON.parse(JSON.stringify(snippets)); + let strJSON = '{"snippets": { "ЕслиЧто": { "prefix": "Если", "body": "Если ${1:Условие} Тогда\n\t$0\nКонецЕсли;", "description": "ЕслиЧто"}}}'; + assert.equal(updateSnippets(strJSON, true), true); + bsl = helper('Если'); + let suggestions = []; + bsl.getSnippets(suggestions, snippets, false); + assert.equal(suggestions.length, 1); + snippets = JSON.parse(JSON.stringify(sCopy)); + }); + + it("проверка всплывающей подсказки", function () { + let model = getModel("Найти("); + let position = new monaco.Position(1, 2); + bsl = new bslHelper(model, position); + assert.notEqual(bsl.getHover(), null); + model = getModel("НайтиЧтоНибудь("); + bsl = new bslHelper(model, position); + assert.equal(bsl.getHover(), null); + }); + + it("проверка получения существующей форматной строки", function () { + editor.setPosition(new monaco.Position(47, 33)); + assert.notEqual(getFormatString(), null); + }); + + it("проверка получения несуществующей форматной строки", function () { + editor.setPosition(new monaco.Position(47, 21)); + assert.equal(getFormatString(), null); + editor.setPosition(new monaco.Position(10, 1)); + assert.equal(getFormatString(), null); + }); + + it("проверка загрузки пользовательских функций", function () { + let strJSON = '{ "customFunctions":{ "МояФункция1":{ "name":"МояФункция1", "name_en":"MyFuntion1", "description":"Получает из строки закодированной по алгоритму base64 двоичные данные.", "returns":"Тип: ДвоичныеДанные. ", "signature":{ "default":{ "СтрокаПараметров":"(Строка: Строка): ДвоичныеДанные", "Параметры":{ "Строка":"Строка, закодированная по алгоритму base64." } } } }, "МояФункция2":{ "name":"МояФункция2", "name_en":"MyFuntion2", "description":"Выполняет сериализацию значения в формат XML.", "template":"МояФункция2(ВызовЗависимойФункции(${1:ПервыйЗависимыйПараметр}, ${2:ВторойЗависимыйПараметр}), ${0:ПараметрМоейФункции}))", "signature":{ "ЗаписатьБезИмени":{ "СтрокаПараметров":"(ЗаписьXML: ЗаписьXML, Значение: Произвольный, НазначениеТипа?: НазначениеТипаXML)", "Параметры":{ "ЗаписьXML":"Объект, через который осуществляется запись XML, полученный через зависимою функцию", "Значение":"Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация." } }, "ЗаписатьСПолнымИменем":{ "СтрокаПараметров":"(ЗаписьXML: ЗаписьXML, Значение: Произвольный, ПолноеИмя: Строка, НазначениеТипа?: НазначениеТипаXML)", "Параметры":{ "ЗаписьXML":"Объект, через который осуществляется запись XML.", "Значение":"Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация.", "ПолноеИмя":"Полное имя элемента XML, в который будет записано значение.", "НазначениеТипа":"Определяет необходимость назначения типа элементу XML. Значение по умолчанию: Неявное." } }, "ЗаписатьСЛокальнымИменемИПространствомИмен":{ "СтрокаПараметров":"(ЗаписьXML: ЗаписьXML, Значение: Произвольный, ЛокальноеИмя: Строка, URIПространстваИмен: Строка, НазначениеТипа?: НазначениеТипаXML)", "Параметры":{ "ЗаписьXML":"Объект, через который осуществляется запись XML.", "Значение":"Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация.", "ЛокальноеИмя":"Локальное имя элемента XML, в который будет записано значение.", "URIПространстваИмен":"URI пространства имен, к которому принадлежит указанное ЛокальноеИмя.", "НазначениеТипа":"Определяет необходимость назначения типа элементу XML. Значение по умолчанию: Неявное." } } } } } }'; + assert.notEqual(updateCustomFunctions(123), true); + assert.equal(updateCustomFunctions(strJSON), true); + }); + + it("проверка автокомплита для пользовательской функции МояФункция2", function () { + bsl = helper('мояфу'); + let suggestions = []; + bsl.getCommonCompletion(suggestions, bslGlobals.customFunctions, monaco.languages.CompletionItemKind.Function) + expect(suggestions).to.be.an('array').that.not.is.empty; + }); + + it("проверка подсказки параметров для пользовательской функции МояФункция2", function () { + bsl = helper('МояФункция2'); + let suggestions = []; + let help = bsl.getCommonSigHelp(bslGlobals.customFunctions); + expect(help).to.have.property('activeParameter'); + }); + + it("проверка подсказки переопределенных параметров для функции Состояние", function () { + let strJSON = '{ "Состояние": [ { "label": "(Первый, Второй)", "documentation": "Описание сигнатуры", "parameters": [ { "label": "Первый", "documentation": "Описание первого" }, { "label": "Второй", "documentation": "Описание второго" } ] } ] }'; + assert.equal(setCustomSignatures(strJSON), true); + let position = new monaco.Position(28, 12); + let model = editor.getModel(); + editor.setPosition(position); + bsl = new bslHelper(model, position); + let help = bsl.getCustomSigHelp(); + expect(help).to.have.property('activeParameter'); + assert.equal(setCustomSignatures('{}'), true); + }); + + it("проверка автокомплита для функции 'Тип'", function () { + bsl = helper('Тип("'); + assert.equal(bsl.requireType(), true); + let suggestions = []; + bsl.getTypesCompletion(suggestions, bslGlobals.types, monaco.languages.CompletionItemKind.Enum) + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "СправочникСсылка"), true); + }); + + it("проверка автокомплита для функции 'Тип' обернутой в функцию", function () { + bsl = helper('Поиск = Найти(Тип("'); + assert.equal(bsl.requireType(), true); + let suggestions = []; + bsl.getTypesCompletion(suggestions, bslGlobals.types, monaco.languages.CompletionItemKind.Enum) + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "СправочникСсылка"), true); + }); + + it("проверка автокомплита для функции 'Тип' с указанием конкретного вида метаданных", function () { + bsl = helper('Тип("СправочникСсылка.'); + assert.equal(bsl.requireType(), true); + let suggestions = []; + bsl.getTypesCompletion(suggestions, bslGlobals.types, monaco.languages.CompletionItemKind.Enum) + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Товары"), true); + }); + + it("проверка загрузки пользовательских объектов", function () { + let strJSON = `{ + "customObjects":{ + "_СтруктураВыгрузки":{ + "ref": "classes.Структура", + "properties":{ + "Номенклатура":{ + "name":"Номенклатура", + "detail":"Ссылка на справочник номенклатуры", + "description":"Подбробное описание поля номенклатуры пользовательского объекта", + "ref":"catalogs.Товары" + }, + "Остаток":{ + "name":"Остаток" + } + }, + "methods":{ + "ВставитьВСтруктуру": { + "name": "ВставитьВСтруктуру", + "name_en": "InsertToStructure", + "description": "Устанавливает значение элемента структуры по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.", + "signature": { + "default": { + "СтрокаПараметров": "(Ключ: Строка, Значение?: Произвольный)", + "Параметры": { + "Ключ": "Ключ устанавливаемого элемента. Ключ должен соответствовать правилам, установленным для идентификаторов: - Первым символом ключа должна быть буква или символ подчеркивания (_). - Каждый из последующих символов может быть буквой, цифрой или символом подчеркивания (_).", + "Значение": "Значение устанавливаемого элемента." + } + } + } + }, + "КоличествоЗаписейВВыгрузке": { + "name": "КоличествоЗаписейВВыгрузке", + "name_en": "CountItemsToUpload", + "description": "Получает количество элементов структуры.", + "returns": "Тип: Число. " + } + }, + "detail":"Пользовательская структура выгрузка", + "description":"Подробное описание пользовательской структуры выгрузки" + }, + "_ОстаткиТовара":{ + "properties":{ + "Партия":{ + "name":"Партия", + "description":"Ссылка на приходный документ", + "ref":"documents.ПриходнаяНакладная" + }, + "Номенклатура":{ + "name":"Номенклатура", + "ref":"catalogs.Товары" + }, + "Оборот":{ + "name":"Оборот" + } + } + }, + "_ОбъектСВложениями":{ + "ref": "classes.Структура", + "properties":{ + "Товар":{ + "name":"Товар", + "description":"Ссылка на справочник номенклатуры", + "ref":"catalogs.Товары" + }, + "ВложенныйОбъект":{ + "name":"ВложенныйОбъект", + "description":"Вложенный объект", + "ref":"catalogs.Структура", + "properties":{ + "ПервыйРеквизитОбъекта":{ + "name":"ПервыйРеквизитОбъекта", + "ref":"documents.ПриходнаяНакладная" + }, + "ВторойРеквизитОбъекта":{ + "name":"ВторойРеквизитОбъекта", + "ref":"classes.Соответствие" + }, + "ТретийРеквизитОбъекта":{ + "name":"ТретийРеквизитОбъекта", + "ref":"classes.Структура", + "properties":{ + "Партия":{ + "name":"Партия", + "description":"Ссылка на приходный документ", + "ref":"documents.ПриходнаяНакладная" + }, + "Номенклатура":{ + "name":"Номенклатура", + "ref":"catalogs.Товары" + } + } + } + }, + "methods":{ + "ВложенныйМетод": { + "name": "ВложенныйМетод", + "name_en": "NestedMethod", + "description": "Устанавливает значение элемента структуры по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.", + "ref": "customObjects._СтруктураВыгрузки", + "signature": { + "default": { + "СтрокаПараметров": "(Ключ: Строка, Значение?: Произвольный)", + "Параметры": { + "Ключ": "Ключ устанавливаемого элемента. Ключ должен соответствовать правилам, установленным для идентификаторов: - Первым символом ключа должна быть буква или символ подчеркивания (_). - Каждый из последующих символов может быть буквой, цифрой или символом подчеркивания (_).", + "Значение": "Значение устанавливаемого элемента." + } + } + } + } + } + } + } + } + } + }`; + let res = updateMetadata(strJSON); + assert.equal(res, true); + bsl = helper('_ОстаткиТ'); + let suggestions = []; + bsl.getCustomObjectsCompletion(suggestions, bslMetadata.customObjects, monaco.languages.CompletionItemKind.Enum); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "_ОстаткиТовара"), true); + }); + + it("проверка подсказки для вложенного пользовательского объекта", function () { + bsl = helper('_ОбъектСВложениями.'); + let suggestions = []; + bsl.getCustomObjectsCompletion(suggestions, bslMetadata.customObjects, monaco.languages.CompletionItemKind.Enum); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ВложенныйОбъект"), true); + suggestions.forEach(function (suggestion) { + if (suggestion.label == "ВложенныйОбъект") { + let command = suggestion.command.arguments[0]; + contextData = new Map([ + [1, new Map([[command.name.toLowerCase(), command.data]])] + ]); + suggestions = []; + bsl = helper('_ОбъектСВложениями.ВложенныйОбъект.'); + bsl.getRefCompletion(suggestions); + assert.equal(suggestions.some(suggest => suggest.label === "ПервыйРеквизитОбъекта"), true); + contextData = new Map(); + } + }); + }); + + it("проверка подсказки методов, когда у пользовательского объекта явна задана ссылка", function () { + bsl = helper('_СтруктураВыгрузки.'); + let suggestions = []; + bsl.getCustomObjectsCompletion(suggestions, bslMetadata.customObjects, monaco.languages.CompletionItemKind.Enum); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Вставить"), true); + }); + + it("проверка подсказки собственных методов для пользовательского объекта", function () { + bsl = helper('_СтруктураВыгрузки.'); + let suggestions = []; + bsl.getCustomObjectsCompletion(suggestions, bslMetadata.customObjects, monaco.languages.CompletionItemKind.Enum); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "КоличествоЗаписейВВыгрузке"), true); + }); + + it("проверка подсказки ссылочных реквизитов", function () { + bsl = helper('_ОстаткиТовара.Номенклатура.'); + let suggestions = []; + contextData = new Map([ + [1, new Map([["номенклатура", { "ref": "catalogs.Товары", "sig": null }]])] + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "СтавкаНДС"), true); + suggestions = []; + bsl = helper('_ОстаткиТовара.Наминклатура.'); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.is.empty; + contextData = new Map(); + }); + + it("проверка подсказки для таблицы, полученной из результата запроса", function () { + bsl = helper('ОбъектЗапрос = Новый Запрос();\nРезультат = ОбъектЗапрос.Выполнить();\nТаблица = Результат.Выгрузить();\nТаблица.'); + let suggestions = []; + contextData = new Map([ + [2, new Map([["выполнить", { "ref": "types.РезультатЗапроса", "sig": null }]])], + [3, new Map([["выгрузить", { "ref": "classes.ТаблицаЗначений", "sig": null }]])] + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ВыгрузитьКолонку"), true); + contextData = new Map(); + }); + + it("проверка подсказки параметров для функции ВыгрузитьКолонку таблицы значений, полученной из другой таблицы", function () { + bsl = helper('Таблица1 = Новый ТаблицаЗначений();\nТаблица2 = Таблица1.Скопировать();\nТаблица2.ВыгрузитьКолонку('); + let suggestions = []; + let signature = { + "default": { + "СтрокаПараметров": "(Колонка: Число): Массив", + "Параметры": { + "Колонка": "Колонка, из которой нужно выгрузить значения. В качестве значения параметра может быть передан индекс колонки, имя колонки, либо колонка дерева значений." + } + } + }; + contextData = new Map([ + [2, new Map([["скопировать", { "ref": "classes.ТаблицаЗначений", "sig": null }]])], + [3, new Map([["выгрузитьколонку", { "ref": "classes.Массив", "sig": signature }]])] + ]); + let help = bsl.getRefSigHelp(); + expect(help).to.have.property('activeParameter'); + contextData = new Map(); + }); + + it("проверка подсказки для таблицы, полученной функцией НайтиПоСсылкам", function () { + bsl = helper('Таблица = НайтиПоСсылкам();\nТаблица.'); + let suggestions = []; + contextData = new Map([ + [1, new Map([["найтипоссылкам", { "ref": "classes.ТаблицаЗначений", "sig": null }]])] + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ВыгрузитьКолонку"), true); + contextData = new Map(); + }); + + it("проверка подсказки для таблицы, полученной из результата запроса в одну строку", function () { + bsl = helper('ОбъектЗапрос = Новый Запрос();\nТаблица = ОбъектЗапрос.Выполнить().Выгрузить().'); + let suggestions = []; + contextData = new Map([ + [2, new Map([["выполнить", { "ref": "types.РезультатЗапроса", "sig": null }]])], + [2, new Map([["выгрузить", { "ref": "classes.ТаблицаЗначений", "sig": null }]])] + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Скопировать"), true); + contextData = new Map(); + }); + + it("проверка подсказки переменных из параметров функции", function () { + bsl = helper('Функция МояФункция(Парам1, Парам2, Парам3)\nПар'); + let suggestions = []; + bsl.getVariablesCompetition(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Парам1"), true); + }); + + it("проверка подсказки для реквизитов составного типа", function () { + bsl = helper('_ОстаткиТовара.Номенклатура.'); + let suggestions = []; + contextData = new Map([ + [1, new Map([["номенклатура", { "ref": "catalogs.Товары, documents.ПриходнаяНакладная", "sig": null }]])] + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "СтавкаНДС") && suggestions.some(suggest => suggest.label === "СуммаДокумента"), true); + contextData = new Map(); + }); + + it("проверка подсказки объекта, полученного методом ПолучитьОбъект()", function () { + bsl = helper('СправочникСсылка = Справочник.Товары.НайтиПоКоду(1);\nСправочникОбъект = СправочникСсылка.ПолучитьОбъект();\nСправочникОбъект.'); + let suggestions = []; + contextData = new Map([ + [2, new Map([["получитьобъект", { "ref": "catalogs.Товары.obj", "sig": null }]])], + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Заблокирован"), true); + contextData = new Map(); + }); + + it("проверка подсказки ресурсов регистра", function () { + bsl = helper('Рег = РегистрыНакопления.ОстаткиТоваров.СоздатьНаборЗаписей();(1);\nРег.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Себестоимость"), true); + }); + + it("проверка подсказки определяемой по стеку для метаданных (первый потомок)", function () { + + let position = new monaco.Position(95, 17); + let model = editor.getModel(); + editor.setPosition(position); + bsl = new bslHelper(model, position); + let suggestions = []; + bsl.getStackCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ПодотчетноеЛицо"), true); + assert.equal(suggestions.some(suggest => suggest.label === "Заблокировать"), true); + + }); + + it("проверка подсказки определяемой по стеку для метаданных (второй потомок)", function () { + + let position = new monaco.Position(100, 19); + let model = editor.getModel(); + editor.setPosition(position); + let bsl = new bslHelper(model, position); + let suggestions = []; + bsl.getStackCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "СуммаДокумента"), true); + assert.equal(suggestions.some(suggest => suggest.label === "Заблокировать"), true); + + }); + + it("проверка подсказки определяемой по стеку для метаданных через ранее определенную ссылку", function () { + + let map = new Map(); + map.set('товарссылка', {list:[], ref: 'catalogs.Товары', sig: null}); + contextData.set(102, map); + + let position = new monaco.Position(104, 18); + let model = editor.getModel(); + editor.setPosition(position); + let bsl = new bslHelper(model, position); + let suggestions = []; + bsl.getStackCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Ставка"), true); + assert.equal(suggestions.some(suggest => suggest.label === "Заблокировать"), true); + + }); + + it("проверка подсказки определяемой по стеку для пользовательских объектов", function () { + + let position = new monaco.Position(107, 24); + let model = editor.getModel(); + editor.setPosition(position); + let bsl = new bslHelper(model, position); + let suggestions = []; + bsl.getStackCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "СтавкаНДС"), true); + + }); + + it("проверка подсказки определяемой по стеку для классов", function () { + + let position = new monaco.Position(114, 12); + let model = editor.getModel(); + editor.setPosition(position); + bsl = new bslHelper(model, position); + let suggestions = []; + bsl.getStackCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Следующий"), true); + + }); + + it("проверка подсказки свойтва объекта 'ОбменДанными'", function () { + + bsl = helper('Спр = Справочники.Товары.НайтиПоКоду(1);\nСпр2 = Спр.ПолучитьОбъект();\nСпр2.'); + let suggestions = []; + contextData = new Map([ + [2, new Map([["получитьобъект", { "ref": "catalogs.Товары.obj", "sig": null }]])], + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ОбменДанными"), true); + + bsl = helper('Спр = Справочники.Товары.НайтиПоКоду(1);\nСпр2 = Спр.ПолучитьОбъект();\nСпр2.ОбменДанными.'); + suggestions = []; + contextData = new Map([ + [3, new Map([["обменданными", { "ref": "types.ПараметрыОбменаДанными", "sig": null }]])], + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Загрузка"), true); + + }); + + it("проверка подсказки методов менеджера справочника", function () { + bsl = helper('Справочники.Товары.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ПервыйМетодМенеджера"), true); + }); + + it("проверка подсказки параметров для метода менеджера справочника", function () { + bsl = helper('Справочники.Товары.ПервыйМетодМенеджера('); + let help = bsl.getMetadataSigHelp(bslMetadata); + expect(help).to.have.property('activeParameter'); + }); + + it("проверка подсказки методов объекта справочника", function () { + + bsl = helper('Спр = Справочники.Товары.НайтиПоКоду(1);\nСпр2 = Спр.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ПервыйМетодМенеджера"), false); + + bsl = helper('Спр = Справочники.Товары.НайтиПоКоду(1);\nСпр2 = Спр.ПолучитьОбъект();\nСпр2.'); + suggestions = bsl.getCodeCompletion({triggerCharacter: ''}); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ПервыйМетодОбъекта"), true); + + }); + + it("проверка загрузки общего модуля (обычный и глобальный)", function () { + + let text = getModuleText(); + bslHelper.parseCommonModule('ОбщегоНазначения', text, false); + + bsl = helper('ОбщегоНазначения.'); + suggestions = bsl.getCodeCompletion({triggerCharacter: ''}); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ЗначениеРеквизитаОбъекта"), true); + + bsl = helper('ЗначениеРеквиз'); + suggestions = bsl.getCodeCompletion({triggerCharacter: ''}); + expect(suggestions).to.be.an('array').that.is.empty; + + bslHelper.parseCommonModule('ОбщегоНазначения', text, true); + + suggestions = bsl.getCodeCompletion({triggerCharacter: ''}); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ЗначениеРеквизитаОбъекта"), true); + + }); + + it("проверка загрузки модуля менеджера объекта метаданных", function () { + + let text = getModuleText(); + bslHelper.parseMetadataModule(text, 'documents.items.АвансовыйОтчет.manager'); + + bsl = helper('Документы.АвансовыйОтчет.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ЗаменитьСсылки"), true); + + }); + + it("проверка подсказки описания метаданных", function () { + + let position = new monaco.Position(151, 13); + let model = editor.getModel(); + editor.setPosition(position); + bsl = new bslHelper(model, position); + let suggestions = bsl.getCodeCompletion({triggerCharacter: ''}); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Автонумерация"), true); + assert.equal(suggestions.some(suggest => suggest.label === "ПолучитьИменаПредопределенных"), true); + + }); + + it("проверка подсказки по глобальной структуре метаданных", function () { + + bsl = helper('Структура.Метаданные.'); + let suggestions = []; + bsl.getMetadataDescription(suggestions); + expect(suggestions).to.be.an('array').that.is.empty; + + bsl = helper('(Метаданные.'); + suggestions = []; + bsl.getMetadataDescription(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "Справочники"), true); + + }); + + it("проверка подсказки табличных частей для справочника 'Товары.' ", function () { + + bsl = helper('Товар = Справочники.Товары.НайтиПоКоду(1);\nТовар.'); + let suggestions = []; + bsl.getMetadataCompletion(suggestions, bslMetadata) + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ДополнительныеРеквизиты"), true); + + }); + + it("проверка подсказки методов табличных частей для справочника 'Товары.' по ссылке", function () { + + bsl = helper('Спр = Справочники.Товары.НайтиПоКоду(1);\nСпр.ДополнительныеРеквизиты.'); + let suggestions = []; + contextData = new Map([ + [2, new Map([["дополнительныереквизиты", { "ref": "universalObjects.ТабличнаяЧасть", "sig": null }]])], + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ВыгрузитьКолонки"), true); + + }); + + it("проверка подсказки реквизитов строки табличной частей для справочника 'Товары.' по ссылке", function () { + + bsl = helper('Спр = Справочники.Товары.НайтиПоКоду(1);\nСтрокаТЧ = Спр.ДополнительныеРеквизиты.Добавить();\nСтрокаТЧ.'); + let suggestions = []; + contextData = new Map([ + [2, new Map([["добавить", { "ref": "catalogs.Товары.tabulars.ДополнительныеРеквизиты,universalObjects.СтрокаТабличнойЧасти", "sig": null }]])], + ]); + bsl.getRefCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ЗначениеРеквизита"), true); + assert.equal(suggestions.some(suggest => suggest.label === "НомерСтроки"), true); + + }); + + it("проверка подсказки реквизитов строки табличной части определяемой по стеку", function () { + + bsl = helper('Спр = Справочники.Товары.НайтиПоКоду(1);\nСтрокаТЧ = Спр.ДополнительныеРеквизиты.Добавить();\nСтрокаТЧ.'); + contextData.clear(); + let suggestions = []; + bsl.getStackCompletion(suggestions); + expect(suggestions).to.be.an('array').that.not.is.empty; + assert.equal(suggestions.some(suggest => suggest.label === "ЗначениеРеквизита"), true); + assert.equal(suggestions.some(suggest => suggest.label === "НомерСтроки"), true); + + }); + + + } + + mocha.run(); + + }); + +}); \ No newline at end of file diff --git a/src/tree/icons/array.png b/src/tree/icons/array.png new file mode 100644 index 0000000000000000000000000000000000000000..28e1ce8ea65ff5fbca56aa214841e9907e243a37 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufG}g$wN6f;ppU1EV~B-+@&XY9r_46Jw&wo}eHJ-LHrqz% z3(s(8JYcZk%YIpj#mq5}B4RI`t>8H2#E_Gu;83eSfy<3|!BoZ_LPBN+A1WK24gigv YZ!Gkf=lk?qKyw*9UHx3vIVCg!0IbNS%G}c0G|-o1q&7cnLyB`7=I2(F_#4S1^@rgaQzf7P%Q&zfk$L90|VcF5N5Ps z4ORgP+IYG+hG+!W_D1tD7_hM1{4KvrOf&P;k-8Zb9CAJ$$wFDFJDu+49Qu93Gw@6k nw~z0KLs~ytR(3wow>rR>lfiH%qVxGtpg9blu6{1-oD!M<(K9-) literal 0 HcmV?d00001 diff --git a/src/tree/icons/boolean.png b/src/tree/icons/boolean.png new file mode 100644 index 0000000000000000000000000000000000000000..83713fa0fd3618116f43e856622e6c278363d0db GIT binary patch literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f?qsc978Pp*G@F#YjO~9b7A7*` zMup^hM+;Ha)>iimLBib87iUB~{QssQQc;`LzOp8*EbS1V(Ox6r=2o|`o|*C&V(w}g zbIw!M*rj-lJK)t$0`xzFr>mdKI;Vst0L58|WB>pF literal 0 HcmV?d00001 diff --git a/src/tree/icons/bprocess.png b/src/tree/icons/bprocess.png new file mode 100644 index 0000000000000000000000000000000000000000..974ca3c65c1678006fe9a18703004108c08c0daa GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f*zhOjv*HQ$qPgboHE<~NAmn%=(C97u}Mdq znn6F4!3VYg9yew|O&*D5f1WpNN@)An{AhoG6q`d;gk+IK{UM74gIPi+S$TLEBz6dh UU**~f}Wl(jv*HQ$qPgboHE&-MIZm?JkzCde^yw+ zUY`Ux)`SPV3nY5jl!7D-e14v1Og+f+m;Gq{LKB{bFB^=W82oD~Jdj|bI*D6CfO`W-MU$5RgA0&L-usM>d0l zqxnVz<1XD=(C#O<~zYnVIQ-g6YC4MhD!__0#`VgB{ni#Il%E$h?OleO-a_kfPsN& XvwoyN!GC?A(-}Nn{an^LB{Ts5F_=@e literal 0 HcmV?d00001 diff --git a/src/tree/icons/close_hover.png b/src/tree/icons/close_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2979301b8160c097fd5dd8d0847be4391ad4c3 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!Hu3Sjv*HQ$xog=OIyHV;F!6Iv5T>{xA*@- zpGAya;tgyy>_PSoJH$HDuUxclemEK$nD0q z27``X(FN6v@e(?0kLEh$>$VmsHcW}=V11M+pvE*I=|H?f9DAY?gB^2%A;ThZhK+0& zes(4ZsvKZiI+4+X*+*u{M$r`?`C7U;FYq!fWt<@4*lW-r$nD_U6QCEEFds{tL);OXk;vd$@?2>>RFT<-t? literal 0 HcmV?d00001 diff --git a/src/tree/icons/date.png b/src/tree/icons/date.png new file mode 100644 index 0000000000000000000000000000000000000000..ef875f2bfb49126f5efb22c9c4c95c7d16ea7e17 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0G|-o|5*(G|NjT_suvl10x9N_AirRs!1YtSK(!2<1s;*b3=Dh+K$tP> zS|=w^(A?9-F+?LcIl+n9fssw6A-F-1X9BCkrV3UEnGFgt3>jQA4(T?mV?DztSio3P get>Zz(}@P4&RkoD({{_hgUn^{boFyt=akR{0Q@&JVgLXD literal 0 HcmV?d00001 diff --git a/src/tree/icons/document.png b/src/tree/icons/document.png new file mode 100644 index 0000000000000000000000000000000000000000..3b77e454034d012f17a320255e3ed8e5e34b026a GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f?1v}jv*HQPbWBXH5l-)1iOaV{0N-?*xz-{ zf@{8K6cs!a+vQ{=cD0r%D(XA>FS1nit@LsH7gkglu-yIub61rHSZ?3Y zsQhGm4zIPwjV9mN&~w%{4^nLsTb#~u%%7rP;8enVCR#+&GJh?|X$+pOelF{r5}E+A CYDAC# literal 0 HcmV?d00001 diff --git a/src/tree/icons/empty.png b/src/tree/icons/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..62fda8e7819f22b20beab9ebdc41498233e9c1b5 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXP}tMOF~q_@S%P(Of=CaOK|%shqW}Zra+jK9 PpfrQ0tDnm{r-UW|FFhKw literal 0 HcmV?d00001 diff --git a/src/tree/icons/enum.png b/src/tree/icons/enum.png new file mode 100644 index 0000000000000000000000000000000000000000..258eac370cc3d07c531aeb0456ea1b770c225f56 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~fbTT_yeXLBDKwz e4zn8=Ffgda3iDslv6~Jwox#)9&t;ucLK6VcFEwQV literal 0 HcmV?d00001 diff --git a/src/tree/icons/int.png b/src/tree/icons/int.png new file mode 100644 index 0000000000000000000000000000000000000000..83f48d4b60e8681292b6efef4390ccab0068eca4 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}x0G|+7wR(nEpPqmJ_3i)v|Ns8|d-mbcuRp&&|M>Lj`-h*ufBydS`~BCq zKY#yt^ZDhMAD<0dd4c+V*Z5`wDZ!E;zhIy)6u_Xmc4iV#lC!`gvY3H^?*IrhW?k## z1PXe3x;Tbt1TQ`9&DCJQ<9c!R)oZ`JzwM8@+@xY9wC4kxrNEb|j0@!rdM2o~-}F1d z$11jhPdjIWwai~thL>AX4@*}meQLSp-mx;yZV8*klU}pQKtmZkUHx3vIVCg!08=M- AivR!s literal 0 HcmV?d00001 diff --git a/src/tree/icons/keyvalue.png b/src/tree/icons/keyvalue.png new file mode 100644 index 0000000000000000000000000000000000000000..c39ddbe9444eeac7c6181c0d78bd0fcd1b6437d6 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DX(8JTkF~q_@d4Y(5Q)Zi9Tl4>gK8qYAn{6ZX zg=e_4X#CA*KYk+N3hS2w#$CNH7>+XJoO_dI!;+fFe&s8ZnYaMc;RCE9Ol)inouOv4 Urg%l)1)9m=>FVdQ&MBb@0BvA0v;Y7A literal 0 HcmV?d00001 diff --git a/src/tree/icons/null.png b/src/tree/icons/null.png new file mode 100644 index 0000000000000000000000000000000000000000..45e8f477c091468f23cdeddfe8e855b1b141edc8 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sEXgD|57Yp@DXFwWD(F~q_@d4Y(5Q)Zhn56}OFK8qSSL-d7b zxHCE!9{6E@Nbtx8M~1_!FSs}ud6>@`8BI#zxMsj0*~F93mSkKZaGc5LfVkR~Qbtz> qk&YJ(DsA2}t8xX7Fts)`GBTv9yH?k230V!aiNVv=&t;ucLK6TlN;e4r literal 0 HcmV?d00001 diff --git a/src/tree/icons/open.png b/src/tree/icons/open.png new file mode 100644 index 0000000000000000000000000000000000000000..5a23f1b07d2b43cf8dd9d82fdb75e9944dc6df76 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enaGj@%V~BF}(5vE6VgGbi)SUrYMuy8QeV=90SBG@L`RVC~OnhmDN=5BA1iIDcVo z`Q;Bgi`Ol3HEGJZx4?X@@tNDHy>bs(Cwlg^U*X98(4yg}b(G=f*503z3imoDd0%{B zV|nkN=r)mAeABI8^1HBUwJw`DD`kGe0+IP!O?7=T|LL$ZdtP)BzH<4VWc>$y5h;n! ZtPLT$Pr~`_*8^S7;OXk;vd$@?2>?fzY0Urt literal 0 HcmV?d00001 diff --git a/src/tree/icons/open_hover.png b/src/tree/icons/open_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..f362c0b5184bb86f282e4d831139ba45d4dd297e GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enaJ{FCV~B-+@{?!J(iGTh{{9m6F>dtaVmQjy zu=m1^8$aYv{9`;KlMwiZK_@;w{yfK{1r>~1Czy`ZJJiTLVD~XLa`<*gNP$hViTjFE zrbt7MgSJ3(Ov71G^M(qxmQJn*Yz%YD**zW>xhe+8t^R%?neiD{$_C~YmF!b`83TA6 zidc;_S}sK}?&5Y}c+$0BK<#kSf`tnIAG1iXImB+1=&)z}=r=*a&Vc6=Q!AT+0RzJW X4g;QdoGf}kr!#oE`njxgN@xNAroUQ| literal 0 HcmV?d00001 diff --git a/src/tree/icons/picture.png b/src/tree/icons/picture.png new file mode 100644 index 0000000000000000000000000000000000000000..2282c5e57fd671b90f76b732c696aea3fe7d3d01 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}H0G|-odSeELDgQfnl>WcLu*aLh!NKAG|Njj2d}{ST6%1mscjf>ou96_X zV4yezFl;)ba~>$lS>O>_%)r36AA}h#Sc6r7f;OHmjv*Ssy{F8D7!)`d99?<-{6EY# zfsy;`skz)GCJHko7O`ApR@otQVoAe^O^WAbrm%Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!2kdb!2!6DYwZ940Xs=VK~y+TrIRr) z1W^#jAEDDq6e3EkL_%n`RrnBk-Q_w$D{+b9dLKk#iz`TU8l~_Ru8@%M`#o>g%CZUm z$?s-w-kaHZ^Jde3HB)S(s;U++2e1hn`p_-hz__mKY4#L-NkDLgxq#K|=;{IXNm76O zO=-5+2)+V?C$I;L1)mLa?UJoq*sNRu4$Hm+H=M%|UZAacIEF*Ghjj{hjtV?;ym`pN ztIoFc!I6)!2F9d0e~=ARrxA?pG`MI49(M=MqJrr5b+I1ntxa*O*pp+LCjM2Cz~=KF zvVF6Alryu<(Wbv0*~f}Wl(jv*HQ$qPgboHE;(+4=so8+9`A@$n_> z^+}LpO?be&K%$3DDM-S==jVCG)Pp>K*^kyQG~sFZvcc$y!M~Qm0|_Rolei@$80rOu V#s56J^#f=qgQu&X%Q~loCIG*MG@t+g literal 0 HcmV?d00001 diff --git a/src/tree/icons/string.png b/src/tree/icons/string.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6724a82735e9f7ee8dfd26897d213d0bd65909 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufG}g$wN6f;V6Uf(V~B-+vP8iFj-`nT(j9XZedZ)+3A}GL zFm$vQxX!eZMc^~z$9jc(3`dw8)-WCU+-SkkQP}h{K#I+QZB3iO!3Oq@$BI6W4#+FS zu_Y$4`vgddGe~}rK6HeSLz3Z=&qPKA@jtBw8<~@M4sdsTWQub*!7$*~f}Wl(jv*HQ$qPgboHE-~+RFbg^jUPkhD~up zoSH#DlfehJ03J7HK}{ZsWq+PGY)WYR*ZgRIfE1fURfJ@bMExO)1cO;ZCs}!T7}!?` Vh-+MWkp(oA!PC{xWt~$(6967DGxGod literal 0 HcmV?d00001 diff --git a/src/tree/icons/table.png b/src/tree/icons/table.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e052ce60907491caa0cc8f370f86d2e82d4cd1 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f?l33jv*HQ$qPgboHE(i+1vjIs9k(;ppm)Y zZvykb`w0xmNjDX0eG=}9FoZB)X>4mU*qEcRph&`jabwN|yRO3tSGW(K=6=G+#>Vj7 XVq498_QflKrZRZC`njxgN@xNA&cQdM literal 0 HcmV?d00001 diff --git a/src/tree/icons/tabular.png b/src/tree/icons/tabular.png new file mode 100644 index 0000000000000000000000000000000000000000..a5772446a45d1bb4cbd0eb9c9acde9d886bbecfa GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G~10G|+7hAIDn%sqSdG&D4T)Wm(L0#d9cL4Lvifq>!nHa?I+oCO|{#S9F5 z`$3q|f;CtLC}`yA;uxY4oSfju?7+yz#^$EM_OU}S!G)*~f}Wl(jv*HQ$qPgboHE;P&;Iwn-KdjkRb5ZQ zUY`Ux)`SPV3nY5jl!7D-e14v1Og+f+m;Gq{LKB{bFB^=W82oD~Jdj|bI*D6Cf??%F WVR5Dqlb=9C89ZJ6T-G@yGywqEem6n@ literal 0 HcmV?d00001 diff --git a/src/tree/icons/text.png b/src/tree/icons/text.png new file mode 100644 index 0000000000000000000000000000000000000000..02c6d48b9643bc078ec3819fc04bba7312a0c2d6 GIT binary patch literal 434 zcmV;j0ZsmiP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGizW@LZzX3P}QzQTY0Y^zhK~y+TrIEc( z0#Oi!@8w4zYDf%XY%GX`7%K}Kp1}e;u9 zoaD&0QSFsf8tx_p8p7w=h?lrZqT&ipBD#`6XOI70$zgHFK9F$&ZDF zqA03j`gjJfuz+V+7L~J+aCP(nd$4bD9opdp8+RZv$uTwoO>n`qPpfuNO7Ob@Ll{9H zb}Ziwn^nxUgM|(RQeNF2;T~S#fV`Ug!m>Er1#SNpuAu{Z1#Mo_9D?@H3nvI);lsjA z+`Ep=L0y~h4bq!=Sya}BdvF6MmQzPfpvm+Sici<=KzIAX@9=(>znb4JzObpni_@%07*qoM6N<$f>F%25&!@I literal 0 HcmV?d00001 diff --git a/src/tree/icons/tree.png b/src/tree/icons/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4b9f4d106cb18f4c48cddf7651cff75abd974c GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBuf-vKbiP>*~f+3zRjv*HQ$qPgboHE(i+1vjIs9k(;ppm)Y zZvykb`w0xmJZ2&bHaq^BabTAwgNU@lQ-cO3gV`M)7+y-BiECiuF`HEG@T+Z+_yUHs hhYFvVDjOOZ8TgA=Gt67UrUW#f!PC{xWt~$(695OuIza#c literal 0 HcmV?d00001 diff --git a/src/tree/icons/undefined.png b/src/tree/icons/undefined.png new file mode 100644 index 0000000000000000000000000000000000000000..c33197dc4a2b725f347b76d6f29916b9a67f024c GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!9|`fjv*HQ$r1$zIF=qgTe~DWM4fn8z%v literal 0 HcmV?d00001 diff --git a/src/tree/loading.gif b/src/tree/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b33f7e54f4e55b6b8774d86d96895db9af044b4 GIT binary patch literal 1849 zcma*odr(tX9tZI2z31lM+(&YVk%mZ}5P~KlG2s=WSbGzm0!x7^P##Mnh7t-jP!X0Q zk_SQ}Po-L1tlDK;6l?(>v)e5ZBQx4|Y-Q?nr@Px3?9h(3ZWr3^tj=`TP57gKr87N$ zp2wWee1GRRCwo_xahnw)5cxNPJbCg2L6DV|6`#+yw6v6!mDS$f9-JvFD^n;GQ&UrZ zzh5jCkByB101O60U0q#p_1BM>Cv-vP?&s4@g_((4_1L=L$(a91)0=J91Gas#R{McE znYG^9*0A5YZ>#;~+Wkn(W5B0^yELIYLP!K}mB~<)AM@1&nqekynuaEGqPrzoH|KodRXJy)%+w_fu3nE5>@Bd_b zqC$EQ;{c`T&?EsNO|igL9gC7Ygxv?aQUEXMq?~>wg{EyW;VcJ37CUF#HjrT=KQO_* zS>M9yydXk18D(+QDJ1>r);Lav_uYKp$T?4vr{Q$lTo&pKv^?(>L-)G2*lwH!Ah7k? z7oH<8h-(KTKt5V6$8gF)C7Io&P5=SjTh)=zV=E2EUhQZP##L8S{d%UK>>+y82>+FV+#^BzW7u3F)Bb>=lYQ%%j`F>ASe zo*cw@V#u6T`A2He;70mR(V&iV&-7{qP~=SRf&jm9-T{*ZeZ}$rd0#6c&fLG^xJcf5 z+p<`wJYgW+_s*V{uI$nMB;%8`S_3>PfGOj3Rq}@Cx^+j?rk92fANSFDBYnOqQ>Vdj z)(|$AhP4t&Lb=Gvo2#3Gl%9<=Gv`Mz?Po@P4iLF!x}GUWJICDlFk-hS^Whyh7x~VH z@0vD1>HYD4&e+~yzS*-sFR{9`{QEEZO1zg7>R&7cHts-6j!xHVdA8eI+ZlVzd%`es zJT@$#GX(gvCJ1oJN%yLBK}{V=V;seo;!w|Yte!W1%5qLNFWqvZW>h&IiH+oPT=b@E zPhGzv5=(Un*X>v`>%8h_nj^NdYcE6NHS_ifkCV$*D)Tqrbu`s;<=t<4 zAHNqNV?6(g<1PY-w@#I-WYFViz?9TrkMr)u0g`O`u|>T;k|2sV*YF^punvT;$SuTy{j3Gv)yqD!R_CF>yR)MzmmYS5v+~R zXAdD%ng9?df;wd8GxR#%3O+gz};Vo;)sK%Bj-q>Oq%R7JU-KD?vYu>#2UjaDo z&8$>5xW~?KPD_#XFToU1hIb*VOMidUr6iYiO0N|i-7s`T8!cFT`rN!^1Pt78J93i6 z5HI1wIM$94m{3SLDvISDe6$ZG1;eq_D9RTaaC>=cO{@Bs>$IlPCPJJ$h$)-3vzNUQ6OsN#_zWxey!_9%hxwH2_dEJi=yY|1c7nDm2_Lm!Cof8-R_+9UkS zcBE(o47yE)oMR(Q=dp1a2wTX5KvvGyLqlWTa7V&!A*|w|)ax~1_~aJ0=_Lilg*0iQk7#ZD EAHN$8j{pDw literal 0 HcmV?d00001 diff --git a/src/tree/tree.css b/src/tree/tree.css new file mode 100644 index 0000000..af71663 --- /dev/null +++ b/src/tree/tree.css @@ -0,0 +1,235 @@ +#display { + height: 0; + display: none; + font-family: "Courier new"; +} + +#display.dark { + background-color: #1e1e1e; +} + +#display-header { + position: relative; + height: 22px; + width: 100%; + border-top: solid 1px #ddd; + border-bottom: solid 1px #ddd; + background-color: #fff; +} + +#display.dark > #display-header { + background-color: #1e1e1e; + border-color: #000; +} + +#display-title { + font-size: 12px; + color: #161616; + margin-left: 10px; + line-height: 22px; + cursor: pointer; +} + +#display.dark #display-title { + color: #d4d4d4; +} + +#variables-display { + overflow: auto; + height: 100%; +} + +#variables-display::-webkit-scrollbar { + width: 13px; +} + +#variables-display::-webkit-scrollbar-thumb { + border-radius: 100px; + background-color: #aaa; + border: 4px solid rgba(0, 0, 0, 0); + background-clip: padding-box; +} + +#variables-tree { + padding: 15px; + width: 100%; + font-size: 10pt; + overflow: auto; + cursor: pointer; + box-sizing: border-box; +} + +#variables-tree details > summary { + list-style: none; + padding: 3px; + margin: 2px 0; + color: #720501; +} + +#display.dark #variables-tree details > summary { + color: #c3602c; +} + +#variables-tree details > summary:hover { + background-color: #b8d9ff; + transition: all .1s +} + +#display.dark #variables-tree details > summary:hover { + background-color: #424242; +} + +#variables-tree details > summary::marker, #variables-tree details > summary::-webkit-details-marker { + display: none; +} + +#variables-tree summary::marker, #variables-tree summary::-webkit-details-marker { + width: 16px; + height: 16px; + color: transparent; +} + +#variables-tree summary.final:before { + background-image: url('./icons/empty.png'); +} + +#variables-tree summary:before { + content: '.'; + padding-left: 7px; + background-image: url('./icons/close.png'); + background-repeat: no-repeat; + width: 16px; + height: 16px; + color: transparent; + margin: 0 5px 0 5px; +} + +#variables-tree summary.final:hover:before { + background-image: url('./icons/empty.png'); +} + +#variables-tree summary:hover:before { + background-image: url('./icons/close_hover.png'); +} + +#variables-tree details > summary.loading:before { + background-image: url("./loading.gif") !important; +} + +#variables-tree details[open] > summary:before { + background-image: url('./icons/open.png'); +} + +#variables-tree details[open] > summary:hover:before { + background-image: url('./icons/open_hover.png'); +} + +#variables-tree summary .icon { + width: 16px; + height: 16px; + vertical-align: middle; +} + +#variables-tree summary:only-child::-webkit-details-marker { + color: transparent; +} + +#variables-tree details details { + margin-left: 20px; + display: block; +} + +#variables-tree .label { + font-size: 14pt; + font-weight:bold; +} + +#variables-tree a { + color: #0000ee; + text-decoration: none; + padding: 3px; +} + +#variables-tree a:hover, #variables-tree a:visited:hover { + color: #ad0404; +} + +#variables-tree a:visited { + color: #0000ee; + text-decoration: none; +} + +#display.dark #variables-tree a { + color: #9acd32; +} + +#display.dark #variables-tree a:visited { + color: #9acd32; +} + +#display.dark #variables-tree a:hover, #display.dark #variables-tree a:visited:hover { + color: #ff2c2c; +} + +#variables-tree .value, .equal { + color: black; +} + +#variables-tree .value, .equal { + color: black; +} + +#display.dark #variables-tree .value { + color: #b8d9ff; +} + +#display.dark #variables-tree .equal { + color: #959595; +} + +#variables-tree .type { + color: #959595; +} + +#variables-tree .type:before { + content: '{'; +} + +#variables-tree .type:after { + content: '}'; +} + +#display-close { + position: absolute; + right: 0; + top: 3px; + width: 15px; + height: 20px; + opacity: 0.3; + cursor: pointer; +} + +#display-close:hover { + opacity: 1; +} + +#display-close:before, #display-close:after { + position: absolute; + content: ' '; + height: 12px; + width: 2px; + top: 2px; + background-color: #333; +} + +.dark #display-close:before, .dark #display-close:after { + background-color: #fff; +} + +#display-close:before { + transform: rotate(45deg); +} + +#display-close:after { + transform: rotate(-45deg); +} \ No newline at end of file diff --git a/src/tree/tree.html b/src/tree/tree.html new file mode 100644 index 0000000..8476e3b --- /dev/null +++ b/src/tree/tree.html @@ -0,0 +1,114 @@ + + + + + Treeview + + + + + + + +

Variables tree

+
+
+
+ + + \ No newline at end of file diff --git a/src/tree/tree.js b/src/tree/tree.js new file mode 100644 index 0000000..6c7f51f --- /dev/null +++ b/src/tree/tree.js @@ -0,0 +1,100 @@ +class Treeview { + constructor(treeviewId, editor, imageBase) { + this.treeviewId = treeviewId; + this.editor = editor; + this.selected = null; + this.imageBase = imageBase; + document.querySelector(this.treeviewId).addEventListener("click", (event) => { + this.on("click", event); + }); + document.querySelector(this.treeviewId) + }; + on(eventName, eventData) { + switch (eventName) { + case "click": { + if (eventData.target.tagName == 'A') { + eventData.preventDefault(); + let element = eventData.target; + if (this.editor) { + this.editor.sendEvent("EVENT_ON_LINK_CLICK", { label: element.innerText, href: element.getAttribute('href') }); + } + } + else if (eventData.target.nodeName == 'SUMMARY' && !eventData.target.parentNode.hasAttribute("open")) { + if (eventData.target.dataset.requested == "false" && !eventData.target.classList.contains('final')) { + eventData.target.classList.add('loading'); + eventData.preventDefault(); + if (this.editor) { + let request = { + variableName: eventData.target.dataset.label, + variableId: eventData.target.id, + variablePath: eventData.target.dataset.path + }; + this.editor.sendEvent("EVENT_GET_VARIABLE_DATA", request); + } + else { + setTimeout(() => { + eventData.target.dataset.requested = true; + this.open(eventData.target.id); + }, 500); + } + } + } + break; + } + } + } + appendData(data, targetId) { + if (targetId != null) { + let target = document.getElementById(targetId); + target.parentNode.innerHTML += this.parseData(data) + } + else { + let target = document.querySelector(this.treeviewId); + target.innerHTML += this.parseData(data); + } + }; + replaceData(data, targetId) { + if (targetId != null) { + let target = document.getElementById(targetId); + target.parentNode.outerHTML = this.parseData(data) + target.dataset.requested = true; + } + else { + let target = document.querySelector(this.treeviewId); + target.innerHTML = this.parseData(data); + } + }; + parseData(data) { + let me = this; + let buf = Object.keys(data).map((key) => + `
+ + ${data[key].label} = + ${Object.keys(data[key]).map((subkey) => { + return subkey == 'type' || subkey == 'value' ? `${data[key][subkey]}` : ' ' + }).join(' ')} + + ${data[key].children ? me.parseData(data[key].children) : ""}
` + ); + return buf.join("\n") + }; + open(id) { + let node = document.getElementById(id); + while (node.parentNode.nodeName == "DETAILS") { + node.classList.remove('loading'); + node = node.parentNode; + node.setAttribute("open", "true"); + } + }; + close(id) { + let node = document.getElementById(id).parentNode; + node.removeAttribute("open"); + let detailNodes = node.querySelectorAll("DETAILS"); + console.log(detailNodes); detailNodes.forEach((node) => node.removeAttribute("open")); + }; + select(id) { + this.open(id); + document.getElementById(id).focus(); + document.getElementById(id).click(); + } +} \ No newline at end of file