mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 13:14:11 +00:00
1085 lines
90 KiB
Plaintext
1085 lines
90 KiB
Plaintext
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
Перем мИмяКолонкиПометки Экспорт; // НеИзменяется
|
||
Перем мИмяКолонкиРезультатаОбработки Экспорт; // НеИзменяется
|
||
Перем мИмяКолонкиСообщенияОбработки Экспорт; // НеИзменяется
|
||
Перем мИмяКолонкиПолногоИмениТаблицы Экспорт; // НеИзменяется
|
||
Перем мИмяКолонкиОтсутствияСтрокиВБД Экспорт; // НеИзменяется
|
||
Перем мЗапрос Экспорт;
|
||
Перем мПлатформа Экспорт;
|
||
Перем мРезультатЗапроса Экспорт;
|
||
Перем мСхемаКолонок Экспорт;
|
||
Перем мВопросНаОбновлениеСтрокДляОбработкиЗадавался Экспорт; //Используется на сервере
|
||
Перем мИменаВозвращаемыхСвойств Экспорт; // НеИзменяется
|
||
Перем мСоставПланаОбмена;
|
||
Перем мИмяНастройкиПоУмолчанию Экспорт;
|
||
Перем мКоличествоЗаписанныхАвтоматически;
|
||
|
||
Функция ОбщиеПараметрыОбработки() Экспорт
|
||
|
||
Результат = Новый Структура(мИменаВозвращаемыхСвойств);
|
||
ЗаполнитьЗначенияСвойств(Результат, ЭтотОбъект, мИменаВозвращаемыхСвойств);
|
||
Для Каждого МетаРеквизит Из Метаданные().Реквизиты Цикл
|
||
Результат.Вставить(МетаРеквизит.Имя, ЭтотОбъект[МетаРеквизит.Имя]);
|
||
КонецЦикла;
|
||
Результат.Вставить("СтрокиДляОбработки", СтрокиДляОбработки);
|
||
СтруктураЗапроса = Новый Структура("Текст, Параметры");
|
||
Если мЗапрос <> Неопределено Тогда
|
||
ЗаполнитьЗначенияСвойств(СтруктураЗапроса, мЗапрос);
|
||
КонецЕсли;
|
||
Результат.Вставить("Запрос", СтруктураЗапроса);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ВернутьПараметрыПослеОбработки(ОбщиеПараметрыОбработки, ВладелецФормы) Экспорт
|
||
|
||
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ОбщиеПараметрыОбработки, мИменаВозвращаемыхСвойств);
|
||
СтрокиДляОбработки.ЗагрузитьКолонку(ОбщиеПараметрыОбработки.СтрокиДляОбработки.ВыгрузитьКолонку(мИмяКолонкиРезультатаОбработки), мИмяКолонкиРезультатаОбработки);
|
||
СтрокиДляОбработки.ЗагрузитьКолонку(ОбщиеПараметрыОбработки.СтрокиДляОбработки.ВыгрузитьКолонку(мИмяКолонкиСообщенияОбработки), мИмяКолонкиСообщенияОбработки);
|
||
//ГлавнаяФорма = ПолучитьФорму(); // Главная форма может открываться с ключом уникальности
|
||
ВладелецФормы.ЭлементыФормы.СтрокиДляОбработки.Колонки[мИмяКолонкиСообщенияОбработки].Видимость = ВыполнятьНаСервере;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура СохранитьНастройкуОбработки(Знач ФормаОбработки) Экспорт
|
||
|
||
НоваяНастройка = ФормаОбработки.ПолучитьНастройкуЛкс();
|
||
Если ФормаОбработки.ТекущаяНастройка.Родитель = Неопределено Тогда
|
||
НоваяСтрока = ФормаОбработки.ТекущаяНастройка.Строки.Добавить();
|
||
НоваяСтрока.Обработка = ФормаОбработки.ЭлементыФормы.ТекущаяНастройка.Значение;
|
||
ФормаОбработки.ТекущаяНастройка = НоваяСтрока;
|
||
ФормаОбработки.ВладелецФормы.ЭлементыФормы.ДоступныеОбработки.ТекущаяСтрока = НоваяСтрока;
|
||
ИначеЕсли ФормаОбработки.ТекущаяНастройка.Обработка <> ФормаОбработки.ЭлементыФормы.ТекущаяНастройка.Значение Тогда
|
||
НоваяСтрока = ФормаОбработки.ТекущаяНастройка.Родитель.Строки.Добавить();
|
||
НоваяСтрока.Обработка = ФормаОбработки.ЭлементыФормы.ТекущаяНастройка.Значение;
|
||
ФормаОбработки.ТекущаяНастройка = НоваяСтрока;
|
||
ФормаОбработки.ВладелецФормы.ЭлементыФормы.ДоступныеОбработки.ТекущаяСтрока = НоваяСтрока;
|
||
КонецЕсли;
|
||
ФормаОбработки.ТекущаяНастройка.Настройка = НоваяНастройка;
|
||
ФормаОбработки.Модифицированность = Ложь;
|
||
ирОбщий.СохранитьНастройкуФормыЛкс(ФормаОбработки.ВладелецФормы);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Разбирает строку выделяя из нее префикс и числовую часть
|
||
//
|
||
// Параметры:
|
||
// Стр - Строка. Разбираемая строка
|
||
// ЧисловаяЧасть - Число. Переменная в которую возвратится числовая часть строки
|
||
// Режим - Строка. Если "Число", то возвратит числовую часть иначе - префикс
|
||
//
|
||
// Возвращаемое значение:
|
||
// Префикс строки
|
||
//
|
||
Функция вПолучитьПрефиксЧислоНомера(Знач Стр, ЧисловаяЧасть="", Режим="") Экспорт
|
||
|
||
Стр = СокрЛП(Стр);
|
||
Префикс = Стр;
|
||
Длина = СтрДлина(Стр);
|
||
|
||
Для Сч = 1 По Длина Цикл
|
||
Попытка
|
||
ЧисловаяЧасть = Число(Стр);
|
||
Исключение
|
||
Стр = Прав(Стр, Длина - Сч);
|
||
Продолжить;
|
||
КонецПопытки;
|
||
|
||
Если (ЧисловаяЧасть > 0) И (СтрДлина(Формат(ЧисловаяЧасть, "ЧГ=0")) = Длина - Сч + 1) Тогда
|
||
Префикс = Лев(Префикс, Сч - 1);
|
||
|
||
Пока Прав(Префикс, 1) = "0" Цикл
|
||
Префикс = Лев(Префикс, СтрДлина(Префикс)-1);
|
||
КонецЦикла;
|
||
|
||
Прервать;
|
||
Иначе
|
||
Стр = Прав(Стр, Длина - Сч);
|
||
КонецЕсли;
|
||
|
||
Если ЧисловаяЧасть < 0 Тогда ЧисловаяЧасть = - ЧисловаяЧасть КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Если Режим = "Число" Тогда
|
||
Возврат(ЧисловаяЧасть);
|
||
Иначе
|
||
Возврат(Префикс);
|
||
КонецЕсли;
|
||
|
||
КонецФункции // вПолучитьПрефиксЧислоНомера()
|
||
|
||
// Приводит номер (код) к требуемой длине. При этом выделяется префикс
|
||
// и числовая часть номера, остальное пространство между префиксом и
|
||
// номером заполняется нулями
|
||
//
|
||
// Параметры:
|
||
// Стр - Преобразовываемая строка
|
||
// Длина - Требуемая длина строки
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - код или номер, приведенная к требуемой длине
|
||
//
|
||
Функция вПривестиНомерКДлине(Знач Стр, Длина) Экспорт
|
||
|
||
Стр = СокрЛП(Стр);
|
||
|
||
ЧисловаяЧасть = "";
|
||
Результат = вПолучитьПрефиксЧислоНомера(Стр, ЧисловаяЧасть);
|
||
Пока Длина - СтрДлина(Результат) - СтрДлина(Формат(ЧисловаяЧасть, "ЧГ=0")) > 0 Цикл
|
||
Результат = Результат + "0";
|
||
КонецЦикла;
|
||
Результат = Результат + Формат(ЧисловаяЧасть, "ЧГ=0");
|
||
|
||
Возврат(Результат);
|
||
|
||
КонецФункции // вПривестиНомерКДлине()
|
||
|
||
// Добавляет к префиксу номера или кода подстроку
|
||
//
|
||
// Параметры:
|
||
// Стр - Строка. Номер или код
|
||
// Добавок - Добаляемая к префиксу подстрока
|
||
// Длина - Требуемая результрирубщая длина строки
|
||
// Режим - "Слева" - подстрока добавляется слева к префиксу, иначе - справа
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - номер или код, к префиксу которого добавлена указанная подстрока
|
||
//
|
||
Функция вДобавитьКПрефиксу(Знач Стр, Добавок="", Длина="", Режим="Слева") Экспорт
|
||
|
||
Стр = СокрЛП(Стр);
|
||
|
||
Если ПустаяСтрока(Длина) Тогда
|
||
Длина = СтрДлина(Стр);
|
||
КонецЕсли;
|
||
|
||
ЧисловаяЧасть = "";
|
||
Префикс = вПолучитьПрефиксЧислоНомера(Стр, ЧисловаяЧасть);
|
||
Если Режим="Слева" Тогда
|
||
Результат = СокрЛП(Добавок) + Префикс;
|
||
Иначе
|
||
Результат = Префикс + СокрЛП(Добавок);
|
||
КонецЕсли;
|
||
|
||
Пока Длина - СтрДлина(Результат) - СтрДлина(Формат(ЧисловаяЧасть, "ЧГ=0")) > 0 Цикл
|
||
Результат = Результат + "0";
|
||
КонецЦикла;
|
||
Результат = Результат + Формат(ЧисловаяЧасть, "ЧГ=0");
|
||
|
||
Возврат(Результат);
|
||
|
||
КонецФункции // вДобавитьКПрефиксу()
|
||
|
||
// Дополняет строку указанным символом до указанной длины
|
||
//
|
||
// Параметры:
|
||
// Стр - Дополняемая строка
|
||
// Длина - Требуемая длина результирующей строки
|
||
// Чем - Символ, которым дополняется строка
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка дополненная указанным символом до указанной длины
|
||
//
|
||
Функция вДополнитьСтрокуСимволами(Стр = "", Длина, Чем = " ") Экспорт
|
||
Результат = СокрЛП(Стр);
|
||
Пока Длина - СтрДлина(Результат) > 0 Цикл
|
||
Результат = Результат + Чем;
|
||
КонецЦикла;
|
||
Возврат(Результат);
|
||
КонецФункции
|
||
|
||
// Выполняет обработку объектов.
|
||
//
|
||
// Параметры:
|
||
// ПараметрыОбработки - Структура, Форма
|
||
//
|
||
Функция ВыполнитьГрупповуюОбработку(ПараметрыОбработки) Экспорт
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
ПараметрыОбработки = Новый Структура;
|
||
#КонецЕсли
|
||
ТранзакцииРазрешены = Истина;
|
||
Отказ = Ложь;
|
||
ИмяМетода = "ПередОбработкойВсех";
|
||
Если ПараметрыОбработки.Свойство("ФормаОбработки") Тогда
|
||
Если ирОбщий.МетодРеализованЛкс(ПараметрыОбработки.ФормаОбработки, ИмяМетода) Тогда
|
||
Выполнить("ПараметрыОбработки.ФормаОбработки." + ИмяМетода + "(ПараметрыОбработки, Отказ)");
|
||
КонецЕсли;
|
||
Иначе
|
||
ИмяМетода = ПараметрыОбработки.ИмяОбработки + "_" + ИмяМетода;
|
||
Если ирОбщий.МетодРеализованЛкс(ЭтотОбъект, ИмяМетода) Тогда
|
||
Выполнить("ЭтотОбъект." + ИмяМетода + "(ПараметрыОбработки, Отказ)");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Отказ Тогда
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
|
||
ИмяМетодаОбработкиОбъекта = "ОбработатьОбъект";
|
||
Если ПараметрыОбработки.Свойство("ФормаОбработки") Тогда
|
||
Если ирОбщий.МетодРеализованЛкс(ПараметрыОбработки.ФормаОбработки, ИмяМетодаОбработкиОбъекта) Тогда
|
||
ИмяОбъектаОбработкиОбъекта = "ПараметрыОбработки.ФормаОбработки";
|
||
Иначе
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
Иначе
|
||
ИмяМетодаОбработкиОбъекта = ПараметрыОбработки.ИмяОбработки + "_" + ИмяМетодаОбработкиОбъекта;
|
||
Если ирОбщий.МетодРеализованЛкс(ЭтотОбъект, ИмяМетодаОбработкиОбъекта) Тогда
|
||
ИмяОбъектаОбработкиОбъекта = "ЭтотОбъект";
|
||
Иначе
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
СтрокиДляОбработки.ЗаполнитьЗначения("", мИмяКолонкиРезультатаОбработки + "," + мИмяКолонкиСообщенияОбработки);
|
||
#Если Сервер И Не Сервер Тогда
|
||
ЗагрузитьРезультатОбработкиОбъекта();
|
||
ОбработатьЭлементыОбъекта();
|
||
#КонецЕсли
|
||
СтруктураПотоков = ирОбщий.НоваяСтруктураМногопоточнойОбработкиЛкс("ОбработатьЭлементыОбъекта", ЭтотОбъект, "ЗагрузитьРезультатОбработкиОбъекта", КоличествоОбъектовВПорции,
|
||
ВыполнятьНаСервере, КоличествоПотоков);
|
||
мКоличествоЗаписанныхАвтоматически = 0;
|
||
Если СтруктураПотоков.ФактическоеКоличествоПотоков = 1 И ОбщаяТранзакция Тогда
|
||
НачатьТранзакцию();
|
||
КонецЕсли;
|
||
Попытка
|
||
мСоставПланаОбмена = Неопределено;
|
||
Если ЗначениеЗаполнено(УзелОтбораОбъектов) Тогда
|
||
мСоставПланаОбмена = УзелОтбораОбъектов.Метаданные().Состав;
|
||
КонецЕсли;
|
||
ТипТаблицы = ирОбщий.ТипТаблицыБДЛкс(?(МноготабличнаяВыборка, ОбластьПоиска[0], ОбластьПоиска));
|
||
СтруктураКлючаОбъектаДоп = ирОбщий.СтруктураКлючаТаблицыБДЛкс(?(МноготабличнаяВыборка, ОбластьПоиска[0], ОбластьПоиска), Ложь);
|
||
СтруктураКлючаОбъекта = ирОбщий.СтруктураКлючаТаблицыБДЛкс(?(МноготабличнаяВыборка, ОбластьПоиска[0], ОбластьПоиска), Ложь);
|
||
СтруктураКлючаСтроки = ирОбщий.СтруктураКлючаТаблицыБДЛкс(?(МноготабличнаяВыборка, ОбластьПоиска[0], ОбластьПоиска), Истина);
|
||
Если МноготабличнаяВыборка Тогда
|
||
СтруктураКлючаОбъектаДоп.Вставить(мИмяКолонкиПолногоИмениТаблицы);
|
||
СтруктураКлючаСтроки.Вставить(мИмяКолонкиПолногоИмениТаблицы);
|
||
КонецЕсли;
|
||
СтрокаКлюча = "";
|
||
Для Каждого КлючИЗначение Из СтруктураКлючаОбъектаДоп Цикл
|
||
Если СтрокаКлюча <> "" Тогда
|
||
СтрокаКлюча = СтрокаКлюча + ", ";
|
||
КонецЕсли;
|
||
СтрокаКлюча = СтрокаКлюча + КлючИЗначение.Ключ;
|
||
КонецЦикла;
|
||
Если ДинамическаяВыборка Тогда
|
||
мРезультатЗапроса = мЗапрос.Выполнить();
|
||
Если СтруктураКлючаСтроки.Количество() = СтруктураКлючаОбъектаДоп.Количество() Тогда
|
||
ВыборкаКлючей = мРезультатЗапроса.Выбрать();
|
||
КоличествоОбъектов = ВыборкаКлючей.Количество();
|
||
КоличествоСтрок = КоличествоОбъектов;
|
||
Индикатор = ИндикаторОбработкиОбъектов(КоличествоОбъектов, СтруктураПотоков.ФактическоеКоличествоПотоков);
|
||
Пока ВыборкаКлючей.Следующий() Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
|
||
КопияСтрокОбъекта = СтрокиДляОбработки.СкопироватьКолонки();
|
||
ЗаполнитьЗначенияСвойств(КопияСтрокОбъекта.Добавить(), ВыборкаКлючей);
|
||
КлючОбъекта = ВыборкаКлючей[КлючИЗначение.Ключ];
|
||
ЗаполнитьЗначенияСвойств(СтруктураКлючаОбъектаДоп, КлючОбъекта);
|
||
ЗаполнитьЗначенияСвойств(СтруктураКлючаОбъекта, КлючОбъекта);
|
||
ЭтоПоследнийОбъектБД = Индикатор.Счетчик = КоличествоОбъектов;
|
||
ДобавитьОбъектВОчередьОбработки(ТипТаблицы, СтруктураКлючаОбъектаДоп, СтруктураКлючаОбъекта, СтруктураКлючаСтроки, КопияСтрокОбъекта, ПараметрыОбработки, ТранзакцииРазрешены,
|
||
Индикатор.Счетчик = 1, ЭтоПоследнийОбъектБД, ИмяОбъектаОбработкиОбъекта, ИмяМетодаОбработкиОбъекта,, СтруктураПотоков);
|
||
КонецЦикла;
|
||
Иначе
|
||
Если СтруктураКлючаОбъектаДоп.Количество() > 1 Тогда
|
||
ирОбщий.СообщитьЛкс("Динамическая выборка по сложному ключу не поддерживается. Загрузите выборку полностью.", СтатусСообщения.Внимание);
|
||
Возврат 0;
|
||
КонецЕсли;
|
||
ЗапросКлючей = Новый Запрос();
|
||
Фрагменты = ирОбщий.СтрРазделитьЛкс(мЗапрос.Текст, "//Секция_Упорядочить");
|
||
ИсключаемоеПоле = Неопределено;
|
||
//Если СтруктураКлючаСтроки <> СтруктураКлючаОбъектаСПометкой Тогда
|
||
ИсключаемоеПоле = ирОбщий.ПеревестиСтроку("НомерСтроки");
|
||
//КонецЕсли;
|
||
СтрокаПорядка = ирОбщий.ВыражениеПорядкаКомпоновкиНаЯзыкеЛкс(Компоновщик.Настройки.Порядок, ИсключаемоеПоле);
|
||
СтрокаПолейПорядка = "";
|
||
Для Каждого Колонка Из мРезультатЗапроса.Колонки Цикл
|
||
Если Ложь
|
||
Или СтруктураКлючаОбъектаДоп.Свойство(Колонка.Имя)
|
||
Или ирОбщий.СтрокиРавныЛкс(ИсключаемоеПоле, Колонка.Имя)
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрокаПолейПорядка = ", " + Колонка.Имя;
|
||
КонецЦикла;
|
||
Если ЗначениеЗаполнено(СтрокаПорядка) Тогда
|
||
СтрокаПорядка = " УПОРЯДОЧИТЬ ПО " + СтрокаПорядка;
|
||
КонецЕсли;
|
||
Если Ложь
|
||
Или Не БезАвтоупорядочивания
|
||
//Или ЗначениеЗаполнено(СтрокаПорядка)
|
||
Тогда
|
||
СтрокаПорядка = СтрокаПорядка + "
|
||
|АВТОУПОРЯДОЧИВАНИЕ";
|
||
КонецЕсли;
|
||
ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ " + СтрокаКлюча + СтрокаПолейПорядка + "
|
||
| ИЗ (" + Фрагменты[0] + ") КАК Т " + СтрокаПорядка; // Доделать имя таблицы (Т.) у полей
|
||
ЗапросКлючей.Текст = ТекстЗапроса;
|
||
ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(мЗапрос.Параметры, ЗапросКлючей.Параметры);
|
||
РезультатЗапроса = ЗапросКлючей.Выполнить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
_Запрос = Новый Запрос;
|
||
ВыборкаЗапроса = _Запрос.Выполнить().Выбрать();
|
||
#КонецЕсли
|
||
ВыборкаКлючей = РезультатЗапроса.Выбрать();
|
||
//Построитель = Новый ПостроительЗапроса;
|
||
//Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(мРезультатЗапроса);
|
||
//Для Каждого КлючИЗначение Из СтруктураКлючаОбъекта Цикл
|
||
// Построитель.ИсточникДанных.Колонки[ИмяПоляСсылка].Измерение = Истина;
|
||
//КонецЦикла;
|
||
//Построитель.ЗаполнитьНастройки();
|
||
//Для Каждого КлючИЗначение Из СтруктураКлючаОбъекта Цикл
|
||
// Построитель.Измерения.Добавить(КлючИЗначение.Ключ);
|
||
//КонецЦикла;
|
||
//ВыборкаКлючей = Построитель.Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
|
||
ПостроительЗапросаДеталей = Новый ПостроительЗапроса();
|
||
ПостроительЗапросаДеталей.Текст = мЗапрос.Текст;
|
||
ПостроительЗапросаДеталей.ЗаполнитьНастройки();
|
||
Для Каждого КлючИЗначение Из СтруктураКлючаОбъектаДоп Цикл
|
||
ЭлементОтбора = ПостроительЗапросаДеталей.Отбор.Добавить(КлючИЗначение.Ключ);
|
||
ЭлементОтбора.Использование = Истина;
|
||
КонецЦикла;
|
||
КоличествоОбъектов = ВыборкаКлючей.Количество();
|
||
КоличествоСтрок = 0;
|
||
Индикатор = ИндикаторОбработкиОбъектов(КоличествоОбъектов, СтруктураПотоков.ФактическоеКоличествоПотоков);
|
||
ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(мЗапрос.Параметры, ПостроительЗапросаДеталей.Параметры);
|
||
ИндексКлюча = 0;
|
||
Пока ВыборкаКлючей.Следующий() Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
|
||
Для Каждого КлючИЗначение Из СтруктураКлючаОбъектаДоп Цикл
|
||
ПостроительЗапросаДеталей.Отбор[КлючИЗначение.Ключ].Значение = ВыборкаКлючей[КлючИЗначение.Ключ];
|
||
КонецЦикла;
|
||
ТаблицаРезультатаДеталей = ПостроительЗапросаДеталей.Результат.Выгрузить();
|
||
КопияСтрокОбъекта = СтрокиДляОбработки.СкопироватьКолонки();
|
||
ирОбщий.ЗагрузитьВТаблицуЗначенийЛкс(ТаблицаРезультатаДеталей, КопияСтрокОбъекта);
|
||
КлючОбъекта = ВыборкаКлючей[КлючИЗначение.Ключ];
|
||
ЗаполнитьЗначенияСвойств(СтруктураКлючаОбъектаДоп, КлючОбъекта);
|
||
ЗаполнитьЗначенияСвойств(СтруктураКлючаОбъекта, КлючОбъекта);
|
||
ЭтоПоследнийОбъектБД = ИндексКлюча = КоличествоОбъектов - 1;
|
||
ДобавитьОбъектВОчередьОбработки(ТипТаблицы, СтруктураКлючаОбъектаДоп, СтруктураКлючаОбъекта, СтруктураКлючаСтроки, КопияСтрокОбъекта, ПараметрыОбработки, ТранзакцииРазрешены,
|
||
ИндексКлюча = 0, ЭтоПоследнийОбъектБД, ИмяОбъектаОбработкиОбъекта, ИмяМетодаОбработкиОбъекта,, СтруктураПотоков);
|
||
КоличествоСтрок = КоличествоСтрок + КопияСтрокОбъекта.Количество();
|
||
ИндексКлюча = ИндексКлюча + 1;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Иначе
|
||
// Порядок обработки строк таблицы БД сохраняется только в случае, если на каждый объект БД приходится только одна строка
|
||
КлючиДляОбработки = СтрокиДляОбработки.Скопировать(Новый Структура(мИмяКолонкиПометки, Истина), СтрокаКлюча);
|
||
КоличествоСтрок = КлючиДляОбработки.Количество();
|
||
КлючиДляОбработки.Колонки.Добавить("_ПорядокСтроки");
|
||
Для Индекс = 0 По КлючиДляОбработки.Количество() - 1 Цикл
|
||
СтрокаТаблицы = КлючиДляОбработки[Индекс];
|
||
СтрокаТаблицы._ПорядокСтроки = Индекс;
|
||
КонецЦикла;
|
||
КлючиДляОбработки.Свернуть(СтрокаКлюча, "_ПорядокСтроки");
|
||
КлючиДляОбработки.Сортировать("_ПорядокСтроки");
|
||
КоличествоОбъектов = КлючиДляОбработки.Количество();
|
||
Индикатор = ИндикаторОбработкиОбъектов(КоличествоОбъектов, СтруктураПотоков.ФактическоеКоличествоПотоков);
|
||
СтруктураКлючаОбъектаДоп.Вставить(мИмяКолонкиПометки, Истина);
|
||
|
||
СтрокаИндекса = СтрокаКлюча;
|
||
СтрокаИндекса = СтрокаИндекса + ", " + мИмяКолонкиПометки;
|
||
Если МноготабличнаяВыборка Тогда
|
||
СтрокаИндекса = СтрокаИндекса + ", "+ мИмяКолонкиПолногоИмениТаблицы;
|
||
КонецЕсли;
|
||
ирОбщий.ДобавитьИндексВТаблицуЛкс(СтрокиДляОбработки, СтрокаИндекса);
|
||
|
||
ПроверитьДобавитьИндексВСтрокиДляОбработки();
|
||
Для ИндексКлюча = 0 По КоличествоОбъектов - 1 Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(Индикатор);
|
||
КлючОбъекта = ирОбщий.СтруктураИзСтрокиТаблицыИлиДереваИлиВыборкиЛкс(КлючиДляОбработки[ИндексКлюча]);
|
||
ЗаполнитьЗначенияСвойств(СтруктураКлючаОбъектаДоп, КлючОбъекта);
|
||
ЗаполнитьЗначенияСвойств(СтруктураКлючаОбъекта, КлючОбъекта);
|
||
СтрокиОбъекта = СтрокиДляОбработки.НайтиСтроки(СтруктураКлючаОбъектаДоп);
|
||
КопияСтрокОбъекта = СтрокиДляОбработки.Скопировать(СтрокиОбъекта);
|
||
ЭтоПоследнийОбъектБД = ИндексКлюча = КоличествоОбъектов - 1;
|
||
ДобавитьОбъектВОчередьОбработки(ТипТаблицы, СтруктураКлючаОбъектаДоп, СтруктураКлючаОбъекта, СтруктураКлючаСтроки, КопияСтрокОбъекта, ПараметрыОбработки, ТранзакцииРазрешены,
|
||
ИндексКлюча = 0, ЭтоПоследнийОбъектБД, ИмяОбъектаОбработкиОбъекта, ИмяМетодаОбработкиОбъекта, СтрокиОбъекта, СтруктураПотоков);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
ирОбщий.ОжидатьЗавершенияВсехПотоковОбработкиЛкс(СтруктураПотоков);
|
||
Если КоличествоСтрок > 0 Тогда
|
||
ОтборУспешных = Новый Структура(мИмяКолонкиПометки, Истина);
|
||
ОтборУспешных.Вставить(мИмяКолонкиРезультатаОбработки, "Успех");
|
||
СтрокиУспешных = СтрокиДляОбработки.НайтиСтроки(ОтборУспешных);
|
||
КоличествоНеуспешно = КоличествоСтрок - СтрокиУспешных.Количество();
|
||
ирОбщий.СообщитьЛкс("Строк обработано успешно - " + СтрокиУспешных.Количество() + ", неуспешно - " + КоличествоНеуспешно + ". "
|
||
+ "Объектов обработано - " + КоличествоОбъектов + ", записано автоматически - " + мКоличествоЗаписанныхАвтоматически + ".");
|
||
КонецЕсли;
|
||
Если СтруктураПотоков.ФактическоеКоличествоПотоков = 1 И ОбщаяТранзакция Тогда
|
||
ЗафиксироватьТранзакцию();
|
||
КонецЕсли;
|
||
Исключение
|
||
Если СтруктураПотоков.ФактическоеКоличествоПотоков = 1 И ОбщаяТранзакция Тогда
|
||
ОтменитьТранзакцию();
|
||
КонецЕсли;
|
||
ВызватьИсключение;
|
||
КонецПопытки;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс(, Истина);
|
||
Результат = Неопределено;
|
||
ИмяМетода = "ПослеОбработкиВсех";
|
||
Если ПараметрыОбработки.Свойство("ФормаОбработки") Тогда
|
||
Если ирОбщий.МетодРеализованЛкс(ПараметрыОбработки.ФормаОбработки, ИмяМетода) Тогда
|
||
Выполнить("ПараметрыОбработки.ФормаОбработки." + ИмяМетода + "(ПараметрыОбработки)");
|
||
КонецЕсли;
|
||
Иначе
|
||
ИмяМетода = ПараметрыОбработки.ИмяОбработки + "_" + ИмяМетода;
|
||
Если ирОбщий.МетодРеализованЛкс(ЭтотОбъект, ИмяМетода) Тогда
|
||
Результат = Вычислить("ЭтотОбъект." + ИмяМетода + "(ПараметрыОбработки)");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
мВопросНаОбновлениеСтрокДляОбработкиЗадавался = Ложь;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ИндикаторОбработкиОбъектов(Знач КоличествоОбъектов, ФактическоеКоличествоПотоков)
|
||
|
||
Индикатор = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоличествоОбъектов, "Обработка " + ФактическоеКоличествоПотоков + " потоков");
|
||
Возврат Индикатор;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ДобавитьОбъектВОчередьОбработки(ТипТаблицы, СтруктураКлючаОбъектаСПометкой, СтруктураКлючаОбъекта, СтруктураКлючаСтроки, КопияСтрокОбъекта, ПараметрыОбработки,
|
||
ТранзакцииРазрешены, ЭтоПервыйОбъектБД, ЭтоПоследнийОбъектБД, ИмяОбъектаОбработкиОбъекта, ИмяМетодаОбработкиОбъекта, СтрокиРезультатовОбъекта = Неопределено, СтруктураПотоков)
|
||
|
||
ПараметрыОбработкиОбъекта = Новый Структура;
|
||
ПараметрыОбработкиОбъекта.Вставить("ИмяОбъектаОбработкиОбъекта", ИмяОбъектаОбработкиОбъекта);
|
||
ПараметрыОбработкиОбъекта.Вставить("ИмяМетодаОбработкиОбъекта", ИмяМетодаОбработкиОбъекта);
|
||
ПараметрыОбработкиОбъекта.Вставить("ТипТаблицы", ТипТаблицы);
|
||
ПараметрыОбработкиОбъекта.Вставить("СтруктураКлючаОбъектаСПометкой", ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураКлючаОбъектаСПометкой));
|
||
ПараметрыОбработкиОбъекта.Вставить("СтруктураКлючаОбъекта", ирОбщий.СкопироватьУниверсальнуюКоллекциюЛкс(СтруктураКлючаОбъекта));
|
||
ПараметрыОбработкиОбъекта.Вставить("СтруктураКлючаСтроки", СтруктураКлючаСтроки);
|
||
ПараметрыОбработкиОбъекта.Вставить("КопияСтрокОбъекта", КопияСтрокОбъекта);
|
||
ПараметрыОбработкиОбъекта.Вставить("ПараметрыОбработки", ПараметрыОбработки);
|
||
ПараметрыОбработкиОбъекта.Вставить("ТранзакцииРазрешены", ТранзакцииРазрешены);
|
||
ПараметрыОбработкиОбъекта.Вставить("ЭтоПервыйОбъектБД", ЭтоПервыйОбъектБД);
|
||
ПараметрыОбработкиОбъекта.Вставить("ЭтоПоследнийОбъектБД", ЭтоПоследнийОбъектБД);
|
||
ирОбщий.ДобавитьОбъектВОчередьМногопоточнойОбработкиЛкс(СтруктураПотоков, ПараметрыОбработкиОбъекта, СтрокиРезультатовОбъекта);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗагрузитьРезультатОбработкиОбъекта(Знач РезультатОбработки, Знач СтрокиРезультатов) Экспорт
|
||
|
||
Для Каждого СтрокаДанных Из СтрокиРезультатов Цикл
|
||
СтрокаДанных[мИмяКолонкиРезультатаОбработки] = РезультатОбработки.Результат;
|
||
КонецЦикла;
|
||
СтрокиРезультатов[0][мИмяКолонкиСообщенияОбработки] = РезультатОбработки.ТекстСообщений;
|
||
Если РезультатОбработки.ЗаписанАвтоматически Тогда
|
||
мКоличествоЗаписанныхАвтоматически = мКоличествоЗаписанныхАвтоматически + 1;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Функция - Обработать элементы объекта
|
||
//
|
||
// Параметры:
|
||
// ПараметрыОбработкиОбъекта - Структура -
|
||
//
|
||
// Возвращаемое значение:
|
||
// -
|
||
//
|
||
Функция ОбработатьЭлементыОбъекта(ПараметрыОбработкиОбъекта) Экспорт
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
ПараметрыОбработкиОбъекта = Новый Структура;
|
||
#КонецЕсли
|
||
ТипТаблицы = ПараметрыОбработкиОбъекта.ТипТаблицы;
|
||
СтруктураКлючаОбъектаСПометкой = ПараметрыОбработкиОбъекта.СтруктураКлючаОбъектаСПометкой;
|
||
СтруктураКлючаОбъекта = ПараметрыОбработкиОбъекта.СтруктураКлючаОбъекта;
|
||
СтруктураКлючаСтроки = ПараметрыОбработкиОбъекта.СтруктураКлючаСтроки;
|
||
КопияСтрокОбъекта = ПараметрыОбработкиОбъекта.КопияСтрокОбъекта;
|
||
ПараметрыОбработки = ПараметрыОбработкиОбъекта.ПараметрыОбработки;
|
||
//ТранзакцииРазрешены = ПараметрыОбработкиОбъекта.ТранзакцииРазрешены;
|
||
ЭтоПервыйОбъектБД = ПараметрыОбработкиОбъекта.ЭтоПервыйОбъектБД;
|
||
ЭтоПоследнийОбъектБД = ПараметрыОбработкиОбъекта.ЭтоПоследнийОбъектБД;
|
||
ИмяОбъектаОбработкиОбъекта = ПараметрыОбработкиОбъекта.ИмяОбъектаОбработкиОбъекта;
|
||
ИмяМетодаОбработкиОбъекта = ПараметрыОбработкиОбъекта.ИмяМетодаОбработкиОбъекта;
|
||
#Если Сервер И Не Сервер Тогда
|
||
ПараметрыОбработки = Новый Структура;
|
||
#КонецЕсли
|
||
#Если Не Клиент Тогда
|
||
ПолучитьСообщенияПользователю(Истина);
|
||
#КонецЕсли
|
||
ИмяПоляСсылка = ирОбщий.ПеревестиСтроку("Ссылка");
|
||
ИмяПоляНомерСтроки = ирОбщий.ПеревестиСтроку("НомерСтроки");
|
||
ИмяПоляПериод = ирОбщий.ПеревестиСтроку("Период");
|
||
Если РежимОбходаДанных = "Строки" Тогда
|
||
Если КопияСтрокОбъекта.Колонки.Найти(ИмяПоляНомерСтроки) <> Неопределено Тогда
|
||
КопияСтрокОбъекта.Сортировать(ИмяПоляНомерСтроки + " Убыв");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если МноготабличнаяВыборка Тогда
|
||
ПолноеИмяТаблицыСтроки = СтруктураКлючаОбъектаСПометкой[мИмяКолонкиПолногоИмениТаблицы];
|
||
Иначе
|
||
ПолноеИмяТаблицыСтроки = ирОбщий.ИмяТаблицыИзМетаданныхЛкс(ОбластьПоиска);
|
||
КонецЕсли;
|
||
//ЭтоРегистрБухгалтерии = ирОбщий.ЛиПолноеИмяРегистраБухгалтерииЛкс(ПолноеИмяТаблицыСтроки);
|
||
ОбъектМДЗаписи = ирОбщий.ОбъектМДПоПолномуИмениТаблицыБДЛкс(ПолноеИмяТаблицыСтроки);
|
||
ПроводитьПроведенные = Истина
|
||
И ПроводитьПроведенныеДокументыПриЗаписи
|
||
И ирОбщий.ЛиКорневойТипДокументаЛкс(ирОбщий.ПервыйФрагментЛкс(ПолноеИмяТаблицыСтроки))
|
||
И ОбъектМДЗаписи.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить;
|
||
КоллекцияСтрок = Неопределено;
|
||
ЗагрузитьСтрокиПослеОбработки = Ложь;
|
||
ЭлементыОбъекта = Новый Массив();
|
||
ПрименятьПообъектныеТранзакции = Ложь
|
||
Или ПообъектныеТранзакции
|
||
Или (Истина
|
||
И ПараметрыОбработкиОбъекта.Свойство("ИзменятьИзмерения")
|
||
И ПараметрыОбработкиОбъекта.ИзменятьИзмерения
|
||
И ирОбщий.ЛиМетаданныеНезависимогоРегистраЛкс(ОбъектМДЗаписи));
|
||
//Если Не ТранзакцииРазрешены Тогда
|
||
// ПрименятьПообъектныеТранзакции = Ложь;
|
||
//КонецЕсли;
|
||
ЗаписанАвтоматически = Ложь;
|
||
Если ПрименятьПообъектныеТранзакции Тогда
|
||
НачатьТранзакцию();
|
||
КонецЕсли;
|
||
Попытка
|
||
Если Ложь
|
||
Или ирОбщий.ЛиМетаданныеСсылочногоОбъектаЛкс(ОбъектМДЗаписи, Ложь, Истина)
|
||
Или ирОбщий.ЛиКорневойТипЖурналаДокументовЛкс(ТипТаблицы)
|
||
Тогда
|
||
Если РежимОбходаДанных = "КлючиОбъектов" Тогда
|
||
//ОбъектДляОбработки = СтрокаКлюча[ИмяПоляСсылка];
|
||
ОбъектДляОбработки = Новый Структура;
|
||
ОбъектДляОбработки.Вставить("Методы", СтруктураКлючаОбъекта[ИмяПоляСсылка]);
|
||
ОбъектДляОбработки.Вставить("Данные", СтруктураКлючаОбъекта[ИмяПоляСсылка]);
|
||
Иначе
|
||
ирОбщий.ЗаблокироватьСсылкуВТранзакцииЛкс(СтруктураКлючаОбъекта[ИмяПоляСсылка], Истина);
|
||
ОбъектДляОбработки = ирОбщий.ОбъектБДПоКлючуЛкс(ПолноеИмяТаблицыСтроки, СтруктураКлючаОбъекта[ИмяПоляСсылка]);
|
||
КонецЕсли;
|
||
ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
|
||
ИначеЕсли ирОбщий.ЛиКорневойТипКонстантыЛкс(ТипТаблицы) Тогда
|
||
ОбъектДляОбработки = ирОбщий.ОбъектБДПоКлючуЛкс(ПолноеИмяТаблицыСтроки);
|
||
Если РежимОбходаДанных = "КлючиОбъектов" Тогда
|
||
//
|
||
Иначе
|
||
ирОбщий.ЗаблокироватьКонстантуЛкс(ОбъектДляОбработки.Методы, Истина);
|
||
ОбъектДляОбработки.Методы.Прочитать();
|
||
КонецЕсли;
|
||
ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
|
||
ИначеЕсли ирОбщий.ЛиКорневойТипПеречисленияЛкс(ТипТаблицы) Тогда
|
||
//ОбъектДляОбработки = СтрокаКлюча[ИмяПоляСсылка];
|
||
ОбъектДляОбработки = Новый Структура;
|
||
ОбъектДляОбработки.Вставить("Методы", СтруктураКлючаОбъекта[ИмяПоляСсылка]);
|
||
ОбъектДляОбработки.Вставить("Данные", СтруктураКлючаОбъекта[ИмяПоляСсылка]);
|
||
ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
|
||
ИначеЕсли ирОбщий.ЛиТипВложеннойТаблицыБДЛкс(ТипТаблицы) Тогда
|
||
ирОбщий.ЗаблокироватьСсылкуВТранзакцииЛкс(СтруктураКлючаОбъекта[ИмяПоляСсылка], Истина);
|
||
ОбъектДляОбработки = ирОбщий.ОбъектБДПоКлючуЛкс(ирОбщий.СтрокаБезПоследнегоФрагментаЛкс(ПолноеИмяТаблицыСтроки), СтруктураКлючаОбъекта[ИмяПоляСсылка]);
|
||
Если РежимОбходаДанных = "Строки" Тогда
|
||
ИмяТЧ = ирОбщий.СтрРазделитьЛкс(ирОбщий.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяТаблицыСтроки))[2];
|
||
КоллекцияСтрок = ОбъектДляОбработки.Данные[ИмяТЧ];
|
||
Для Каждого СтрокаДляОбработки Из КопияСтрокОбъекта Цикл
|
||
Если КоллекцияСтрок.Количество() < СтрокаДляОбработки[ИмяПоляНомерСтроки] Тогда
|
||
ВызватьИсключение "Строка таблицы с номером " + СтрокаДляОбработки[ИмяПоляНомерСтроки] + " не найдена в объекте БД";
|
||
КонецЕсли;
|
||
ЭлементыОбъекта.Добавить(КоллекцияСтрок[СтрокаДляОбработки[ИмяПоляНомерСтроки] - 1]);
|
||
КонецЦикла;
|
||
Иначе
|
||
ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
|
||
КонецЕсли;
|
||
ИначеЕсли ирОбщий.ЛиМетаданныеРегистраЛкс(ОбъектМДЗаписи) Тогда
|
||
ОбъектДляОбработки = ирОбщий.ОбъектБДПоКлючуЛкс(ПолноеИмяТаблицыСтроки, СтруктураКлючаОбъекта,, Ложь);
|
||
Если РежимОбходаДанных <> "КлючиОбъектов" Тогда
|
||
КоллекцияСтрок = ирОбщий.ПрочитатьНаборЗаписейВТаблицуЛкс(ОбъектДляОбработки.Методы, РежимБлокировкиДанных.Исключительный);
|
||
КонецЕсли;
|
||
Если РежимОбходаДанных = "Строки" Тогда
|
||
СтараяКоллекцияСтрок = КоллекцияСтрок.Скопировать();
|
||
ЗагрузитьСтрокиПослеОбработки = Истина;
|
||
Если СтруктураКлючаСтроки.Свойство(ИмяПоляНомерСтроки) Тогда
|
||
ИмяКлюча = ИмяПоляНомерСтроки;
|
||
КлючСтроки = Новый Структура(ИмяКлюча);
|
||
ИначеЕсли СтруктураКлючаСтроки.Свойство(ИмяПоляПериод) Тогда
|
||
ИмяКлюча = ИмяПоляПериод;
|
||
КлючСтроки = Новый Структура(ИмяКлюча);
|
||
Иначе
|
||
КлючСтроки = Неопределено;
|
||
КонецЕсли;
|
||
Для Каждого СтрокаДляОбработки Из КопияСтрокОбъекта Цикл
|
||
Если КлючСтроки = Неопределено Тогда
|
||
Если КоллекцияСтрок.Количество() = 0 Тогда
|
||
ВызватьИсключение "Строка таблицы не найдена в объекте БД. Возможно она уже была удалена.";
|
||
КонецЕсли;
|
||
СтрокаОбъекта = КоллекцияСтрок[0];
|
||
Иначе
|
||
ЗаполнитьЗначенияСвойств(КлючСтроки, СтрокаДляОбработки);
|
||
НайденныеСтроки = КоллекцияСтрок.НайтиСтроки(КлючСтроки);
|
||
Если НайденныеСтроки.Количество() = 0 Тогда
|
||
ВызватьИсключение "Строка таблицы по ключу " + КлючСтроки[ИмяКлюча] + " не найдена в объекте БД";
|
||
КонецЕсли;
|
||
//Если ЭтоРегистрБухгалтерии Тогда
|
||
СтрокаОбъекта = НайденныеСтроки[0];
|
||
//Иначе
|
||
// ИндексСтрокиНабора = КоллекцияСтрок.Индекс(НайденныеСтроки[0]);
|
||
// СтрокаОбъекта = ОбъектДляЗаписи[ИндексСтрокиНабора];
|
||
//КонецЕсли;
|
||
КонецЕсли;
|
||
ЭлементыОбъекта.Добавить(СтрокаОбъекта);
|
||
КонецЦикла;
|
||
Иначе
|
||
КоллекцияСтрок = Неопределено;
|
||
ЭлементыОбъекта.Добавить(ОбъектДляОбработки.Данные);
|
||
КонецЕсли;
|
||
Иначе
|
||
ВызватьИсключение "Неподдерживаемый тип таблицы """ + ТипТаблицы + """";
|
||
КонецЕсли;
|
||
//Если РежимОбходаДанных <> "КлючиОбъектов" Тогда
|
||
// ирОбщий.УстановитьПараметрыЗаписиОбъектаЛкс(ОбъектДляОбработки.Методы, ОтключатьКонтрольЗаписи, БезАвторегистрацииИзменений);
|
||
//КонецЕсли;
|
||
Если ОбъектДляОбработки = Неопределено Тогда
|
||
РезультатОбработки = "Пропущен";
|
||
Если ВыводитьСообщения Тогда
|
||
ирОбщий.СообщитьЛкс("Пропущен удаленный """ + СтруктураКлючаОбъекта[ИмяПоляСсылка] + """");
|
||
КонецЕсли;
|
||
Иначе
|
||
ТекстСообщенияОбОбработкеОбъекта = "Обработка объекта " + ирОбщий.XMLКлючОбъектаБДЛкс(ОбъектДляОбработки.Методы);
|
||
Если ВыводитьСообщения Тогда
|
||
ирОбщий.СообщитьЛкс(ТекстСообщенияОбОбработкеОбъекта);
|
||
КонецЕсли;
|
||
СчетчикЭлемента = 0;
|
||
КоличествоЭлементов = ЭлементыОбъекта.Количество();
|
||
Если ПараметрыОбработки.Свойство("ПринудительнаяЗапись") Тогда
|
||
ПринудительнаяЗапись = ПараметрыОбработки.ПринудительнаяЗапись;
|
||
Иначе
|
||
ПринудительнаяЗапись = Ложь;
|
||
КонецЕсли;
|
||
Для Каждого ЭлементОбъекта Из ЭлементыОбъекта Цикл
|
||
СчетчикЭлемента = СчетчикЭлемента + 1;
|
||
ПараметрыОбработки.Вставить("ЭтоПервыйОбъектБД", ЭтоПервыйОбъектБД);
|
||
ПараметрыОбработки.Вставить("ЭтоПоследнийОбъектБД", ЭтоПоследнийОбъектБД);
|
||
ПараметрыОбработки.Вставить("ЭтоПервыйЭлемент", СчетчикЭлемента = 1);
|
||
ПараметрыОбработки.Вставить("ЭтоПоследнийЭлемент", СчетчикЭлемента = КоличествоЭлементов);
|
||
Выполнить(ИмяОбъектаОбработкиОбъекта + "." + ИмяМетодаОбработкиОбъекта + "(ЭлементОбъекта, КоллекцияСтрок, ОбъектДляОбработки.Данные, ПараметрыОбработки, ОбъектДляОбработки.Методы, ПринудительнаяЗапись)");
|
||
КонецЦикла;
|
||
Если ЗагрузитьСтрокиПослеОбработки Тогда
|
||
Если ПринудительнаяЗапись Или Не ирОбщий.ТаблицыЗначенийРавныЛкс(СтараяКоллекцияСтрок, КоллекцияСтрок) Тогда
|
||
ОбъектДляОбработки.Методы.Загрузить(КоллекцияСтрок);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Не ирОбщий.ЛиКорневойТипПеречисленияЛкс(ТипТаблицы) Тогда
|
||
Попытка
|
||
Модифицированность = ОбъектДляОбработки.Методы.Модифицированность() Или ПринудительнаяЗапись;
|
||
Исключение
|
||
// Объект мог быть удален
|
||
Модифицированность = Ложь;
|
||
КонецПопытки;
|
||
Если Модифицированность Тогда
|
||
РежимЗаписи = Неопределено;
|
||
Если Истина
|
||
И ПроводитьПроведенные
|
||
И ОбъектДляОбработки.Данные.Проведен
|
||
Тогда
|
||
РежимЗаписи = РежимЗаписиДокумента.Проведение;
|
||
КонецЕсли;
|
||
ирОбщий.ЗаписатьОбъектЛкс(ОбъектДляОбработки.Методы,, РежимЗаписи);
|
||
ЗаписанАвтоматически = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
РезультатОбработки = "Успех";
|
||
Если ВыводитьСообщения Тогда
|
||
ирОбщий.СообщитьЛкс(Символы.Таб + РезультатОбработки);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ПрименятьПообъектныеТранзакции Тогда
|
||
ЗафиксироватьТранзакцию();
|
||
КонецЕсли;
|
||
Исключение
|
||
Если ПрименятьПообъектныеТранзакции Тогда
|
||
ОтменитьТранзакцию();
|
||
КонецЕсли;
|
||
РезультатОбработки = ОписаниеОшибки();
|
||
Если Не ВыводитьСообщения Тогда
|
||
ирОбщий.СообщитьЛкс(ТекстСообщенияОбОбработкеОбъекта);
|
||
КонецЕсли;
|
||
ирОбщий.СообщитьЛкс(Символы.Таб + РезультатОбработки, СтатусСообщения.Внимание);
|
||
Если Не ПропускатьОшибки Или ТранзакцияАктивна() Тогда
|
||
ВызватьИсключение;
|
||
КонецЕсли;
|
||
КонецПопытки;
|
||
Если Истина
|
||
И РезультатОбработки = "Успех"
|
||
И УдалятьРегистрациюНаУзлеПослеОбработкиОбъекта
|
||
И ЗначениеЗаполнено(УзелОтбораОбъектов)
|
||
Тогда
|
||
ОбъектМД = Метаданные.НайтиПоТипу(ирОбщий.ТипОбъектаБДЛкс(ОбъектДляОбработки.Методы));
|
||
Если мСоставПланаОбмена.Содержит(ОбъектМД) Тогда
|
||
ирОбщий.ПланыОбменаИзменитьРегистрациюЛкс(УзелОтбораОбъектов, ОбъектДляОбработки, Ложь);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ТекстСообщений = "";
|
||
#Если Не Клиент Тогда
|
||
СообщенияОбъекта = ПолучитьСообщенияПользователю(Истина);
|
||
ТекстСообщений = ирОбщий.СоединитьСообщенияПользователюЛкс(СообщенияОбъекта);
|
||
#КонецЕсли
|
||
РезультатОбработки = Новый Структура("Результат, ТекстСообщений, ЗаписанАвтоматически", РезультатОбработки, ТекстСообщений, ЗаписанАвтоматически);
|
||
Возврат РезультатОбработки;
|
||
|
||
КонецФункции
|
||
|
||
Процедура ПроверитьДобавитьИндексВСтрокиДляОбработки() Экспорт
|
||
|
||
Если СтрокиДляОбработки.Индексы.Количество() = 0 Тогда
|
||
//СтрокаИндекса = "";
|
||
//Для Каждого ЭлементКлюча Из мСтруктураКлюча Цикл
|
||
// СтрокаИндекса = СтрокаИндекса + "," + ЭлементКлюча.Ключ;
|
||
//КонецЦикла;
|
||
//СтрокаИндекса = Сред(СтрокаИндекса, 2);
|
||
//СтрокиДляОбработки.Индексы.Добавить(СтрокаИндекса); // Закомментирвано из-за высоких расходов времени
|
||
//СтрокаИндексаОбъекта = мИмяКолонкиПометки;
|
||
СтрокаИндексаОбъекта = "";
|
||
СтруктураКлючаОбъекта = ирОбщий.СтруктураКлючаТаблицыБДЛкс(?(МноготабличнаяВыборка, ОбластьПоиска[0].Значение, ОбластьПоиска), Ложь);
|
||
Для Каждого КлючИЗначение Из СтруктураКлючаОбъекта Цикл
|
||
СтрокаИндексаОбъекта = СтрокаИндексаОбъекта + "," + КлючИЗначение.Ключ;
|
||
КонецЦикла;
|
||
СтрокиДляОбработки.Индексы.Добавить(СтрокаИндексаОбъекта); // Для регистров с большим числом измерений тут будут высокие, но оправданные расходы
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ПолучитьОписаниеТиповОбрабатываемогоЭлементаИлиОбъекта(ИскомыйОбъект, НуженТипОбъекта = Ложь, выхПолноеИмяТаблицы = "") Экспорт
|
||
|
||
МассивИлиИмяТаблицыБД = Новый Массив();
|
||
Если ИскомыйОбъект <> Неопределено Тогда
|
||
ТипТаблицы = ИскомыйОбъект.ТипТаблицы;
|
||
Если МноготабличнаяВыборка Тогда
|
||
МассивИлиИмяТаблицыБД = ОбластьПоиска.ВыгрузитьЗначения();
|
||
Иначе
|
||
МассивИлиИмяТаблицыБД.Добавить(ОбластьПоиска);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Результат = ирОбщий.ОписаниеТиповОбъектаИлиСтрокиБДПоИменамТаблицЛкс(МассивИлиИмяТаблицыБД, НуженТипОбъекта, РежимОбходаДанных, ТипТаблицы, выхПолноеИмяТаблицы);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Процедура Шаблон_ПередОбработкойВсех(ПараметрыОбработки, Отказ) Экспорт
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура Шаблон_ПослеОбработкиВсех(ПараметрыОбработки) Экспорт
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура Шаблон_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ИзменитьДобавитьСтроку_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
Если ЗначениеЗаполнено(ПараметрыОбработки.ИмяТабличнойЧасти) Тогда
|
||
КлючПоиска = Новый Структура;
|
||
Для Каждого РеквизитПоиска Из ПараметрыОбработки.РеквизитыДляСохранения.НайтиСтроки(Новый Структура("Пометка, КлючПоиска, ТипИзменения", Истина, Истина, "УстановитьЗначение")) Цикл
|
||
КлючПоиска.Вставить(РеквизитПоиска.Идентификатор, РеквизитПоиска.Значение);
|
||
КонецЦикла;
|
||
НайденныеСтрокиТЧ = Объект[ПараметрыОбработки.ИмяТабличнойЧасти].НайтиСтроки(КлючПоиска);
|
||
Если НайденныеСтрокиТЧ.Количество() > 1 Тогда
|
||
ВызватьИсключение "Найдено более одной строки по реквизитам поиска";
|
||
Возврат;
|
||
ИначеЕсли НайденныеСтрокиТЧ.Количество() = 0 Тогда
|
||
Объект = Объект[ПараметрыОбработки.ИмяТабличнойЧасти].Добавить();
|
||
ЗаполнитьЗначенияСвойств(Объект, КлючПоиска);
|
||
ИначеЕсли Не ПараметрыОбработки.ОбрабатыватьСуществующую Тогда
|
||
Возврат;
|
||
Иначе
|
||
Объект = НайденныеСтрокиТЧ[0];
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИмяПоляЭтоГруппа = ирОбщий.ПеревестиСтроку("ЭтоГруппа");
|
||
ИмяПоляСсылка = "";
|
||
ТипОбъектаДанных = ирОбщий.ТипОбъектаБДЛкс(ОбъектБДМетоды);
|
||
ЭтоНаборЗаписей = ирОбщий.ЛиНаборЗаписейРегистраЛкс(ТипОбъектаДанных);
|
||
СтарыйНаборЗаписей = Неопределено;
|
||
ОбъектМодифицирован = Ложь;
|
||
Для каждого СтрокаРеквизита из ПараметрыОбработки.РеквизитыДляСохранения Цикл
|
||
#Если Сервер И Не Сервер Тогда
|
||
СтрокаРеквизита = Обработки.ирПодборИОбработкаОбъектов.Создать().ЗначенияРеквизитов.Добавить();
|
||
#КонецЕсли
|
||
Если Ложь
|
||
Или СтрокаРеквизита.Использование = ""
|
||
Или СтрокаРеквизита.Использование = "ДляГруппыИЭлемента"
|
||
Или (Объект[ИмяПоляЭтоГруппа] И СтрокаРеквизита.Использование = "ДляГруппы")
|
||
Или (Не Объект[ИмяПоляЭтоГруппа] И СтрокаРеквизита.Использование = "ДляЭлемента")
|
||
Тогда
|
||
НовоеЗначение = СтрокаРеквизита.Значение;
|
||
ДопРеквизит = СтрокаРеквизита.ДопРеквизит;
|
||
#Если Сервер И Не Сервер Тогда
|
||
ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПустаяСсылка();
|
||
#КонецЕсли
|
||
Если СтрокаРеквизита.ТипИзменения <> "УстановитьЗначение" Тогда
|
||
Если ЗначениеЗаполнено(ДопРеквизит) Тогда
|
||
ТекущееЗначение = ирОбщий.ЗначениеДопРеквизитаБСПЛкс(Объект, ДопРеквизит, ИмяПоляСсылка);
|
||
Иначе
|
||
ТекущееЗначение = Объект[СтрокаРеквизита.Идентификатор];
|
||
КонецЕсли;
|
||
Если СтрокаРеквизита.ТипИзменения = "Округлить" Тогда
|
||
НовоеЗначение = Окр(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "УстановитьЦелуюЧасть" Тогда
|
||
НовоеЗначение = Цел(НовоеЗначение) + ТекущееЗначение - Цел(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "УстановитьДробнуюЧасть" Тогда
|
||
НовоеЗначение = НовоеЗначение - Цел(НовоеЗначение) + Цел(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "УстановитьВремя" Тогда
|
||
НовоеЗначение = Дата(Год(ТекущееЗначение), Месяц(ТекущееЗначение), День(ТекущееЗначение), Час(НовоеЗначение), Минута(НовоеЗначение), Секунда(НовоеЗначение));
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "УстановитьДату" Тогда
|
||
НовоеЗначение = Дата(Год(НовоеЗначение), Месяц(НовоеЗначение), День(НовоеЗначение), Час(ТекущееЗначение), Минута(ТекущееЗначение), Секунда(ТекущееЗначение));
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВНачалоДня" Тогда
|
||
НовоеЗначение = НачалоДня(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВКонецДня" Тогда
|
||
НовоеЗначение = КонецДня(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВНачалоМесяца" Тогда
|
||
НовоеЗначение = НачалоМесяца(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВКонецМесяца" Тогда
|
||
НовоеЗначение = КонецМесяца(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВНачалоГода" Тогда
|
||
НовоеЗначение = НачалоГода(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "СдвинутьВКонецГода" Тогда
|
||
НовоеЗначение = КонецГода(ТекущееЗначение);
|
||
ИначеЕсли СтрокаРеквизита.ТипИзменения = "ИнвертироватьЗначение" Тогда
|
||
НовоеЗначение = Не ТекущееЗначение;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ЗначениеЗаполнено(ДопРеквизит) Тогда
|
||
ирОбщий.УстановитьЗначениеДопРеквизитаБСПЛкс(Объект, ДопРеквизит, НовоеЗначение, ИмяПоляСсылка);
|
||
Иначе
|
||
ирОбщий.ПрисвоитьЕслиНеРавноЛкс(Объект[СтрокаРеквизита.Идентификатор], НовоеЗначение, ОбъектМодифицирован);
|
||
Если Истина
|
||
И ОбъектМодифицирован
|
||
И ЭтоНаборЗаписей
|
||
И ПараметрыОбработки.ИзменятьИзмерения
|
||
Тогда
|
||
#Если Сервер И Не Сервер Тогда
|
||
ОбъектБДМетоды = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
|
||
#КонецЕсли
|
||
ЭлементОтбора = ОбъектБДМетоды.Отбор.Найти(СтрокаРеквизита.Идентификатор);
|
||
Если ЭлементОтбора <> Неопределено Тогда
|
||
Если СтарыйНаборЗаписей = Неопределено Тогда
|
||
ОбъектМД = Метаданные.НайтиПоТипу(ТипОбъектаДанных);
|
||
ИмяТаблицыРегистра = ирОбщий.ИмяТаблицыИзМетаданныхЛкс(ОбъектМД);
|
||
СтруктураКлючаЗаписи = ирОбщий.СтруктураКлючаТаблицыБДЛкс(ИмяТаблицыРегистра);
|
||
ЗаполнитьЗначенияСвойств(СтруктураКлючаЗаписи, ОбъектБДДанные[0]);
|
||
СтарыйНаборЗаписей = ирОбщий.ОбъектБДПоКлючуЛкс(ИмяТаблицыРегистра, СтруктураКлючаЗаписи,, Ложь);
|
||
КонецЕсли;
|
||
ЭлементОтбора.Значение = НовоеЗначение;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
// Антибаг 8.2.15 http://partners.v8.1c.ru/forum/thread.jsp?id=1034144#1034144
|
||
Если ОбъектМодифицирован И ЭтоНаборЗаписей И ПараметрыОбработки.РеквизитыДляСохранения.Количество() > 0 Тогда
|
||
ИмяПоляПериод = ирОбщий.ПеревестиСтроку("Период");
|
||
ИмяПоляРегистратор = ирОбщий.ПеревестиСтроку("Регистратор");
|
||
Попытка
|
||
Объект[ИмяПоляПериод] = Объект[ИмяПоляПериод];
|
||
Исключение
|
||
Попытка
|
||
Объект[ИмяПоляРегистратор] = Объект[ИмяПоляРегистратор];
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
Если СтарыйНаборЗаписей <> Неопределено Тогда
|
||
Если Не ТранзакцияАктивна() Тогда
|
||
ВызватьИсключение "Изменять измерения регистра можно только в транзакции";
|
||
КонецЕсли;
|
||
Если Не ПараметрыОбработки.ЗаменятьСуществующие Тогда
|
||
ирОбщий.ЗаблокироватьНаборЗаписейПоОтборуЛкс(ОбъектБДМетоды);
|
||
ЗаполнитьЗначенияСвойств(СтруктураКлючаЗаписи, Объект);
|
||
НаборУдаляемыхЗаписей = ирОбщий.ОбъектБДПоКлючуЛкс(ИмяТаблицыРегистра, СтруктураКлючаЗаписи,, Истина);
|
||
Если НаборУдаляемыхЗаписей.Методы.Количество() > 0 Тогда
|
||
ВызватьИсключение "Уже существует строка регистра " + ирОбщий.XMLКлючОбъектаБДЛкс(НаборУдаляемыхЗаписей.Методы);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ирОбщий.ЗаписатьОбъектЛкс(СтарыйНаборЗаписей.Методы);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ИзменитьРегистрациюНаУзле_ПередОбработкойВсех(ПараметрыОбработки, Отказ) Экспорт
|
||
|
||
Если Не ЗначениеЗаполнено(ПараметрыОбработки.Узел) Тогда
|
||
ирОбщий.СообщитьЛкс("Обработка не может быть выполнена, т.к. не заполнен узел", СтатусСообщения.Внимание);
|
||
Отказ = Истина;
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ИзменитьРегистрациюНаУзле_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
ирОбщий.ПланыОбменаИзменитьРегистрациюЛкс(ПараметрыОбработки.Узел, ОбъектБДМетоды, ПараметрыОбработки.НовоеЗначениеРегистрации, ПараметрыОбработки.ВместеСДвижениями, ПараметрыОбработки.ДвиженияВместеСПоследовательностями);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура Удалить_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
Если КоллекцияСтрок <> Неопределено Тогда
|
||
КоллекцияСтрок.Удалить(Объект);
|
||
Иначе
|
||
ирОбщий.УдалитьОбъектЛкс(ОбъектБДМетоды);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПроизвольныйАлгоритм_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
ТекстАлгоритма = ПараметрыОбработки.ТекстПроизвольногоАлгоритма;
|
||
ТекстАлгоритма = "Объект = _П0; ОбъектБД = _П1; ОбъектБДМетоды = _П2; Параметры = _П3; ЭтоПервыйОбъектБД = _П4; ЭтоПоследнийОбъектБД = _П5; ЭтоПервыйЭлемент = _П6; ЭтоПоследнийЭлемент = _П7; ПринудительнаяЗапись = _П8;
|
||
|" + ТекстАлгоритма;
|
||
Для Каждого СтрокаПараметра Из ПараметрыОбработки.Параметры Цикл
|
||
ТекстАлгоритма = СтрокаПараметра.Имя + " = _АлгоритмОбъект[" + ПараметрыОбработки.Параметры.Индекс(СтрокаПараметра) + "];
|
||
|" + ТекстАлгоритма;
|
||
КонецЦикла;
|
||
ТекстАлгоритма = ТекстАлгоритма + "
|
||
|;
|
||
|_П8 = ПринудительнаяЗапись;
|
||
|";
|
||
ирОбщий.ВыполнитьАлгоритм(ТекстАлгоритма, ПараметрыОбработки.Параметры.ВыгрузитьКолонку("Значение")
|
||
, , Объект, ОбъектБДДанные, ОбъектБДМетоды, ПараметрыОбработки, ПараметрыОбработки.ЭтоПервыйОбъектБД, ПараметрыОбработки.ЭтоПоследнийОбъектБД, ПараметрыОбработки.ЭтоПервыйЭлемент,
|
||
ПараметрыОбработки.ЭтоПоследнийЭлемент, выхПринудительнаяЗапись);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ПровестиДокументы_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
Если Истина
|
||
И ПараметрыОбработки.ПропускатьНепроведенные
|
||
И Не Объект.Проведен
|
||
Тогда
|
||
Если ВыводитьСообщения Тогда
|
||
ТекстСообщения = "Документ " + Объект + " пропущен, т.к. является непроведенным";
|
||
ирОбщий.СообщитьЛкс(ТекстСообщения);
|
||
КонецЕсли;
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если Истина
|
||
И ПараметрыОбработки.СниматьПометкиУдаления
|
||
И Объект.ПометкаУдаления
|
||
Тогда
|
||
Объект.ПометкаУдаления = Ложь;
|
||
КонецЕсли;
|
||
ОбъектМД = Метаданные.НайтиПоТипу(ирОбщий.ТипОбъектаБДЛкс(ОбъектБДМетоды));
|
||
Если ОбъектМД.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда
|
||
ирОбщий.ЗаписатьОбъектЛкс(ОбъектБДМетоды, , РежимЗаписиДокумента.Проведение);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ОтменитьПроведениеДокументов_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
ОбъектМД = Метаданные.НайтиПоТипу(ирОбщий.ТипОбъектаБДЛкс(ОбъектБДМетоды));
|
||
Если ОбъектМД.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда
|
||
ирОбщий.ЗаписатьОбъектЛкс(ОбъектБДМетоды, , РежимЗаписиДокумента.ОтменаПроведения);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ОчиститьДвиженияДокументов_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
ирОбщий.ОчиститьДвиженияДокументаЛкс(Объект.Ссылка);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ИзменитьПометкуНаУдаление_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
ирОбщий.УстановитьПометкуУдаленияОбъектаЛкс(ОбъектБДМетоды, , ПараметрыОбработки.НовоеЗначениеПометки);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура Записать_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
выхПринудительнаяЗапись = Истина;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаписатьВерсию_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
ИсторияДанныхМоя = Вычислить("ИсторияДанных");
|
||
#Если Сервер И Не Сервер Тогда
|
||
ИсторияДанныхМоя = ИсторияДанных;
|
||
#КонецЕсли
|
||
ИсторияДанныхМоя.ЗаписатьВерсию(Объект, ПараметрыОбработки.Дата, ПараметрыОбработки.ПользовательИдентификатор, ПараметрыОбработки.ПользовательИмя, ПараметрыОбработки.ПользовательПолноеИмя,
|
||
ВидИзмененияДанных.Изменение, ПараметрыОбработки.Комментарий, , ПараметрыОбработки.Узел);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ВыгрузкаВФайл_ПередОбработкойВсех(ПараметрыОбработки, Отказ) Экспорт
|
||
|
||
ВыгрузкаЗагрузкаДанныхЧерезФайл = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирВыгрузкаЗагрузкаДанныхЧерезФайл");
|
||
ПараметрыОбработки.Вставить("ВыгрузкаЗагрузкаДанныхЧерезФайл", ВыгрузкаЗагрузкаДанныхЧерезФайл);
|
||
ВыгрузкаЗагрузкаДанныхЧерезФайл.ПередВыгрузкойВсех(ПараметрыОбработки);
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ВыгрузкаВФайл_ОбработатьОбъект(Знач Объект, Знач КоллекцияСтрок = Неопределено, Знач ОбъектБДДанные = Неопределено, Знач ПараметрыОбработки = Неопределено, Знач ОбъектБДМетоды = Неопределено, выхПринудительнаяЗапись = Ложь) Экспорт
|
||
|
||
ВыгрузкаЗагрузкаДанныхЧерезФайл = ПараметрыОбработки.ВыгрузкаЗагрузкаДанныхЧерезФайл;
|
||
#Если Сервер И Не Сервер Тогда
|
||
ВыгрузкаЗагрузкаДанныхЧерезФайл = Обработки.ирВыгрузкаЗагрузкаДанныхЧерезФайл.Создать();
|
||
#КонецЕсли
|
||
ВыгрузкаЗагрузкаДанныхЧерезФайл.ВыгрузитьОбъектВыборки(ОбъектБДМетоды, ПараметрыОбработки);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ВыгрузкаВФайл_ПослеОбработкиВсех(ПараметрыОбработки) Экспорт
|
||
|
||
ВыгрузкаЗагрузкаДанныхЧерезФайл = ПараметрыОбработки.ВыгрузкаЗагрузкаДанныхЧерезФайл;
|
||
#Если Сервер И Не Сервер Тогда
|
||
ВыгрузкаЗагрузкаДанныхЧерезФайл = Обработки.ирВыгрузкаЗагрузкаДанныхЧерезФайл.Создать();
|
||
#КонецЕсли
|
||
ДвоичныеДанные = ВыгрузкаЗагрузкаДанныхЧерезФайл.ПослеВыгрузкиВсех(ПараметрыОбработки);
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("ДвоичныеДанные", ДвоичныеДанные);
|
||
Возврат ДвоичныеДанные;
|
||
|
||
КонецФункции
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////
|
||
//// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
|
||
|
||
//ирПортативный лФайл = Новый Файл(ИспользуемоеИмяФайла);
|
||
//ирПортативный ПолноеИмяФайлаБазовогоМодуля = Лев(лФайл.Путь, СтрДлина(лФайл.Путь) - СтрДлина("Модули\")) + "ирПортативный.epf";
|
||
//ирПортативный #Если Клиент Тогда
|
||
//ирПортативный Контейнер = Новый Структура();
|
||
//ирПортативный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
|
||
//ирПортативный Если Не Контейнер.Свойство("ирПортативный", ирПортативный) Тогда
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
|
||
//ирПортативный ирПортативный.Открыть();
|
||
//ирПортативный КонецЕсли;
|
||
//ирПортативный #Иначе
|
||
//ирПортативный ирПортативный = ВнешниеОбработки.Создать(ПолноеИмяФайлаБазовогоМодуля, Ложь); // Это будет второй экземпляр объекта
|
||
//ирПортативный #КонецЕсли
|
||
//ирПортативный ирОбщий = ирПортативный.ПолучитьОбщийМодульЛкс("ирОбщий");
|
||
//ирПортативный ирКэш = ирПортативный.ПолучитьОбщийМодульЛкс("ирКэш");
|
||
//ирПортативный ирСервер = ирПортативный.ПолучитьОбщийМодульЛкс("ирСервер");
|
||
//ирПортативный ирПривилегированный = ирПортативный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
|
||
|
||
#Если Клиент Тогда
|
||
мПлатформа = ирКэш.Получить(); // Используется в форме ПроизвольныйАлгоритм, на сервере отключаем для ускорения многопоточной обработки
|
||
#КонецЕсли
|
||
ЭтотОбъект.НастройкиКомпоновки = Новый Соответствие;
|
||
ЭтотОбъект.АвтовВыбранныеПоляИзОтбора = Истина;
|
||
//ЭтотОбъект.ВыводитьСообщения = Истина;
|
||
ЭтотОбъект.ПообъектныеТранзакции = Истина;
|
||
ЭтотОбъект.ПропускатьОшибки = Истина;
|
||
ЭтотОбъект.РежимОбходаДанных = "Строки";
|
||
ЭтотОбъект.ОбластьПоиска = "";
|
||
ЭтотОбъект.КоличествоПотоков = 1;
|
||
ЭтотОбъект.КоличествоОбъектовВПорции = 10;
|
||
ЭтотОбъект.ВыполнятьНаСервере = ирОбщий.ПолучитьРежимОбъектыНаСервереПоУмолчаниюЛкс(Ложь);
|
||
мИмяКолонкиПометки = "_ПометкаСлужебная9261";
|
||
мИмяКолонкиРезультатаОбработки = "_РезультатОбработки9261";
|
||
мИмяКолонкиСообщенияОбработки = "_СообщенияОбработки9261";
|
||
мИмяКолонкиОтсутствияСтрокиВБД = "_СтрокаОтсутствуетВБД9261";
|
||
мИмяКолонкиПолногоИмениТаблицы = "_ПолноеИмяТаблицы9261";
|
||
мВопросНаОбновлениеСтрокДляОбработкиЗадавался = Истина;
|
||
мИмяНастройкиПоУмолчанию = "Новая настройка";
|
||
мИменаВозвращаемыхСвойств = "мВопросНаОбновлениеСтрокДляОбработкиЗадавался";
|