Перем мТелоПозиционногоМетода; Перем мТелоПоименногоМетода; Перем ДатаИзмененияКонтекста Экспорт; Перем мСтруктураВнешнейОбработки Экспорт; Перем ИндивидуальнаяВнешняяОбработка Экспорт; //Процедура ДобавитьПараметрыВСтруктуру(СтруктураПараметров) Экспорт // Для Каждого СтрокаПараметра Из Параметры Цикл // Если Не СтруктураПараметров.Свойство(СтрокаПараметра.Имя) Тогда // СтруктураПараметров.Вставить(СтрокаПараметра.Имя, СтрокаПараметра.Значение); // КонецЕсли; // КонецЦикла; // ИмяПараметра = "Результат"; // Если Не СтруктураПараметров.Свойство(ИмяПараметра) Тогда // СтруктураПараметров.Вставить(ИмяПараметра); // КонецЕсли; //КонецПроцедуры // ПолучитьСтруктуруПараметров() Функция ПолучитьСтартовуюСтрокуАлгоритмаВТексте() Экспорт Возврат Параметры.Количество(); КонецФункции // ПолучитьСтартовуюСтрокуАлгоритмаВМодуле() Функция ПолучитьСтартовуюСтрокуМетодаВМодуле() Экспорт Результат = 1 + СтрЧислоСтрок(ПолучитьШапкуОпределенияМетода() + ПолучитьШапкуТелаМетода()); Возврат Результат; КонецФункции // ПолучитьСтартовуюСтрокуАлгоритмаВМодуле() Функция ПолучитьОбъявлениеСлужебныхПеременных() МассивСлужебныхПеременных = Новый Массив; МассивСлужебныхПеременных.Добавить("ЭтотОбъект"); МассивСлужебныхПеременных.Добавить("ИспользуемоеИмяФайла"); МассивСлужебныхПеременных.Добавить("Результат"); Разделитель = ", "; Результат = ""; Для Каждого СлужебнаяПеременная Из МассивСлужебныхПеременных Цикл Результат = Результат + Разделитель + СлужебнаяПеременная; КонецЦикла; Результат = Сред(Результат, СтрДлина(Разделитель) + 1); Результат = "Перем " + Результат + ";"; Возврат Результат; КонецФункции // ПолучитьОбъявлениеСлужебныхПеременных() Функция ПолучитьТекстМодуляОбработки() Экспорт Результат = ""; Результат = Результат + "// " + Наименование + Символы.ПС; Результат = Результат + ПолучитьОпределениеМетода(); Возврат Результат; КонецФункции // ПолучитьТекстМодуляОбработки() Функция ПолучитьОпределениеМетода(УниверсальныеИменаПараметров = Ложь) Экспорт Результат = ПолучитьШапкуОпределенияМетода(); Результат = Результат + ПолучитьТелоМетода() + Символы.ПС; Результат = Результат + Символы.Таб + "Возврат Результат;" + Символы.ПС; Результат = Результат + "КонецФункции" + Символы.ПС; Возврат Результат; КонецФункции // ПолучитьОпределениеМетода() Функция ПолучитьШапкуОпределенияМетода() Результат = "Функция мМетод(_АлгоритмОбъект, _Режим"; Для Счетчик = 0 По 9 Цикл ИмяПараметра = "_П" + Счетчик; Результат = Результат + ", " + ИмяПараметра; КонецЦикла; Результат = Результат + ") Экспорт" + Символы.ПС; Результат = Результат + Символы.Таб + ПолучитьОбъявлениеСлужебныхПеременных(); Возврат Результат; КонецФункции // ПолучитьШапкуОпределенияМетода() Функция ПолучитьШапкуТелаМетода() Результат = ""; МассивТаблицПараметров = Новый Массив; Результат = Результат + " | _Параметры = _АлгоритмОбъект.Параметры;"; //Для Индекс = 0 ПО Параметры.Количество() - 1 Цикл // СтрокаПеременной = Параметры[Индекс]; // ИмяПеременной = СтрокаПеременной.Имя; // Результат = Результат + " // | " + ИмяПеременной + " = ?(_П0.Свойство(""" + ИмяПеременной + """), _П0." + ИмяПеременной + ", _Параметры[" + Индекс + "].Значение);"; //КонецЦикла; Результат = Результат + " | Если _Режим = 0 Тогда"; Для Индекс = 0 ПО Параметры.Количество() - 1 Цикл СтрокаПеременной = Параметры[Индекс]; Если Индекс < 10 Тогда ИмяПараметра = "_П" + Индекс; Иначе ИмяПараметра = "Null"; КонецЕсли; ИмяПеременной = СтрокаПеременной.Имя; Результат = Результат + " | " + ИмяПеременной + " = ?(" + ИмяПараметра + " = Null, _Параметры[" + (Индекс) + "].Значение, " + ИмяПараметра + ");"; КонецЦикла; Результат = Результат + " | Иначе"; Для Индекс = 0 ПО Параметры.Количество() - 1 Цикл СтрокаПеременной = Параметры[Индекс]; ИмяПеременной = СтрокаПеременной.Имя; Результат = Результат + " | " + ИмяПеременной + " = ?(_П0.Свойство(""" + ИмяПеременной + """), _П0." + ИмяПеременной + ", _Параметры[" + (Индекс) + "].Значение);"; КонецЦикла; Результат = Результат + " | КонецЕсли;"; Результат = Результат + Символы.ПС + ирКэш.Получить().МаркерНачалаАлгоритма; Возврат Результат; КонецФункции // ПолучитьШапкуТелаМетода() Функция ПолучитьТелоМетода(Кэшировать = Ложь) Экспорт Результат = ПолучитьШапкуТелаМетода(); Для Сч1 = 1 По СтрЧислоСтрок(ТекстАлгоритма) Цикл Результат = Результат + Символы.Таб + СтрПолучитьСтроку(ТекстАлгоритма, Сч1) + Символы.ПС; КонецЦикла; Результат = Результат + ирКэш.Получить().МаркерКонцаАлгоритма; Результат = Результат + Символы.Таб + "; ~Конец:"; //Для Каждого СтрокаПараметра Из Параметры Цикл // Индекс = Параметры.Индекс(СтрокаПараметра); // ИмяПеременной = СтрокаПараметра.Имя; // Результат = Результат + " // | _П0." + ИмяПеременной + " = " + ИмяПеременной + ";"; //КонецЦикла; Результат = Результат + " | Если _Режим = 0 Тогда"; Для Каждого СтрокаПараметра Из Параметры Цикл Индекс = Параметры.Индекс(СтрокаПараметра); Результат = Результат + " | _П" + Индекс + " = " + СтрокаПараметра.Имя + ";"; КонецЦикла; Результат = Результат + " | Иначе"; Для Каждого СтрокаПараметра Из Параметры Цикл Индекс = Параметры.Индекс(СтрокаПараметра); ИмяПеременной = СтрокаПараметра.Имя; Результат = Результат + " | _П0.Вставить(""" + ИмяПеременной + """, " + ИмяПеременной + ");"; КонецЦикла; Результат = Результат + " | КонецЕсли;"; Возврат Результат; КонецФункции // ПолучитьТелоМетода() Функция ПолучитьТекстМакетаПараметров() Экспорт Возврат ""; КонецФункции // ПолучитьТекстМакетаПараметров() Функция ВыполнитьЛокально(ТекстДляВыполнения, ЛиСинтаксическийКонтроль = Ложь) Экспорт Возврат ирКэш.Получить().ВыполнитьЛокально(ТекстДляВыполнения); КонецФункции // ВыполнитьЛокально() Функция ПроверитьДанные() Экспорт ДанныеКорректны = Истина; // Проверка шапки ЧистоеНаименование = СокрЛП(Наименование); ирОбщий.ПрисвоитьЕслиНеРавноЛкс(Наименование, ЧистоеНаименование); Если Не ирОбщий.ЛиИмяПеременнойЛкс(Наименование) Тогда ДанныеКорректны = Ложь; Сообщить("Имя алгоритма не отвечает правилам формирования имен переменных встроенного языка", СтатусСообщения.Важное); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Алгоритмы.Ссылка |ИЗ | " + Метаданные().ПолноеИмя() + " КАК Алгоритмы |ГДЕ | Алгоритмы.Наименование = &Наименование | И Алгоритмы.Ссылка <> &Ссылка"; Запрос.УстановитьПараметр("Наименование", Наименование); Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда ДанныеКорректны = Ложь; Сообщить("В справочнике """ + Метаданные().Имя + """ уже существует элемент с наименованием """ + Наименование + """", СтатусСообщения.Важное); КонецЕсли; ДанныеКорректны = ДанныеКорректны И ирОбщий.ЛиПараметрыАлгоритмыКорректныЛкс(Параметры.Выгрузить(, "Имя")); Возврат ДанныеКорректны; КонецФункции // ПроверитьДанные() //Функция ПроверитьТЧ(Параметры) // ДанныеКорректны = Истина; // МетаданныеТЧ = ирОбщий.ПолучитьМетаданныеЛкс(Параметры); // КопияТЧ = Параметры.Выгрузить(); // КопияТЧ.Свернуть("Имя"); // Если КопияТЧ.Количество() <> Параметры.Количество() Тогда // Параметры.Сортировать("Имя"); // Сообщить("Строки табличной части """ + МетаданныеТЧ.Представление() + """ должны иметь уникальные имена", // СтатусСообщения.Важное); // ДанныеКорректны = Ложь; // КонецЕсли; // Для Каждого СтрокаПараметра Из Параметры Цикл // Если Не ирОбщий.ЛиИмяПеременнойЛкс(СтрокаПараметра.Имя) Тогда // ДанныеКорректны = Ложь; // Сообщить("Имя параметра """ + СтрокаПараметра.Имя + """ не отвечает правилам формирования имен встроенного языка", // СтатусСообщения.Важное); // КонецЕсли; // КонецЦикла; // Возврат ДанныеКорректны; //КонецФункции // ПроверитьТЧ() Процедура СобратьКонтекст() Экспорт ДатаИзмененияКонтекста = ДатаИзменения; КонецПроцедуры // ПрочитатьКонтекст() Процедура ПередЗаписью(Отказ) Если Не ОбменДанными.Загрузка Тогда ДатаИзменения = ТекущаяДата(); СобратьКонтекст(); Отказ = Отказ Или Не ПроверитьДанные(); КонецЕсли; КонецПроцедуры Процедура ПриЗаписи(Отказ) Если Не ОбменДанными.Загрузка Тогда мТекстАлгоритмаСПараметрами = ""; мПлатформа = ирКэш.Получить(); Если мПлатформа <> Неопределено Тогда #Если Клиент Тогда мПлатформа.ОбновитьАлгоритмВКеше(ЭтотОбъект); #КонецЕсли КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриКопировании(ОбъектКопирования) Наименование = Наименование + "1"; КонецПроцедуры ДатаИзмененияКонтекста = ДатаИзменения; мТекстАлгоритмаСПараметрами = ""; ИндивидуальнаяВнешняяОбработка = Истина;