RDT1C/src/DataProcessors/ирИмитаторАлгоритмОбъект/Ext/ObjectModule.bsl
Администратор 6856e523bb .
2023-02-05 21:40:56 +03:00

230 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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