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