RDT1C/DataProcessors/ирИмитаторАлгоритмОбъект/Ext/ObjectModule.bsl
Администратор 01c083b00a Редактор объекта БД
*Переработан код для реализации принципа "события на сервере" при включенном флажке "Запись на сервере" в не портативных вариантах
        +Добавлена управляемая форма для тестирования (можно открыть интерфейсной панелью или назначить в качестве доп. формы обработки)
    Настройка техножурнала
        *Устранена несовместимость с режимом совместимости 8.3.11
    Конструктор запроса
        *Исправлена свежая ошибка при вводе фильтра доступных таблиц
        *Исправлено вычисление квалификаторов полей
        +Реализовано отображение квалификаторов полей
    Подбор и обработка объектов
        *Исправлена свежая ошибка закрытия формы с непустым списком выбранных обработок
    Консоль запросов
        *Исправлено обновление количества в строке дереве запросов при выполнении пакетного запроса кончающегося уничтожением таблицы
        *Работа таблицы свойств строки результата приведена к единообразию с редактором строки табличного поля
    Вывод строк табличного поля
        *Исправлен вывод пустого результат из динамического списка с флажком "Только выделенные строки"
    Редактор строки табличного поля
        *Исправлена ошибка открытия в портативном варианте
    Поиск дублей и замена ссылок
        *Исправлено низкое качество поиска нечетким сравнением новой внешней компонентой
2017-09-11 22:34:50 +03:00

205 lines
11 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.Вставить(""" + ИмяПеременной + """, " + ИмяПеременной + ");";
КонецЦикла;
Результат = Результат + "
| КонецЕсли;";
Возврат Результат;
КонецФункции // ПолучитьТелоМетода()
Функция ПолучитьТекстМакетаПараметров() Экспорт
Возврат "";
КонецФункции // ПолучитьТекстМакетаПараметров()
Функция ВыполнитьЛокально(ТекстДляВыполнения, ЛиСинтаксическийКонтроль = Ложь) Экспорт
мПлатформа = ирКэш.Получить();
#Если Сервер И Не Сервер Тогда
мПлатформа = Обработки.ирПлатформа.Создать();
#КонецЕсли
Возврат мПлатформа.ВыполнитьЛокально(ТекстДляВыполнения);
КонецФункции // ВыполнитьЛокально()
Функция ПроверитьДанные() Экспорт
ДанныеКорректны = ирОбщий.ЛиПараметрыАлгоритмыКорректныЛкс(Параметры.Выгрузить(, "Имя"));
Возврат ДанныеКорректны;
КонецФункции // ПроверитьДанные()
Процедура СобратьКонтекст() Экспорт
ДатаИзмененияКонтекста = ДатаИзменения;
КонецПроцедуры // ПрочитатьКонтекст()
Процедура ПередЗаписью(Отказ)
Если Не ОбменДанными.Загрузка Тогда
ДатаИзменения = ТекущаяДата();
СобратьКонтекст();
Отказ = Отказ Или Не ПроверитьДанные();
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если Не ОбменДанными.Загрузка Тогда
мТекстАлгоритмаСПараметрами = "";
мПлатформа = ирКэш.Получить();
Если мПлатформа <> Неопределено Тогда
#Если Клиент Тогда
мПлатформа.ОбновитьАлгоритмВКеше(ЭтотОбъект);
#КонецЕсли
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ДатаИзмененияКонтекста = ДатаИзменения;
мТекстАлгоритмаСПараметрами = "";
ИндивидуальнаяВнешняяОбработка = Истина;
ОбменДанными = Новый Структура("Загрузка", Ложь);