Добро пожаловать,
Перепроведение документов (фоновое)
Универсальная обработка "Проведение документов" предназначена
для фонового проведения документов без включения монопольного
режима в информационной базе 1С:Предприятия. 1.Добавлена
возможность завершения работы в указанное время 2.В архиве также
содержится пример bat-файла для запуска 8 ки с возможностью
сохранения сообщений выдаваемых при проведении документов в
log-файл. Запуск bat- кА в файловом варианте – монопольно, клиент-
серверном – не монопольно
Код
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
//Описание Префиксов имен:
//Ш -Реквизит шапки
//Т -Реквизит Таблицы
//С -Свойство
//К -Категория
//Д -Допольнительный предопределенный
//О -Допольнительный из отбора
//Р -Действие Изменить реквизит: [...]
//П -Прочее
Перем ОписаниеТипаБулево;
Перем мСформированныйРежим;
Перем ПостроительЗапроса;
Перем ВКонфигурацииЕстьСвойства;
Перем ВКонфигурацииЕстьКатегории;
Перем ТипОбъекта;
Перем ОбрабатыватьТабличныеЧасти;
Перем ПаузаМеждуПроведениями;
////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
Процедура УстановитьВидимостьКолонок() Экспорт
Если мСформированныйРежим = Неопределено ИЛИ Не мСформированныйРежим.ДанныеОтобраны Тогда
Возврат;
КонецЕсли;
КолонкаДействия = Неопределено;
ТабличноеПоле = ЭлементыФормы.ТабличноеПолеДанных;
Для каждого Колонка Из ТабличноеПоле.Колонки Цикл
Колонка.Видимость = ПоказыватьВсеКолонки ИЛИ мСформированныйРежим.ОтображаемыеКолонки.Свойство
(Колонка.Имя) ;
Колонка.ЦветФонаПоля = ЦветаСтиля.ЦветФонаПоля;
КонецЦикла;
Если Не КолонкаДействия = Неопределено Тогда
ТабличноеПоле.Колонки.Сдвинуть(КолонкаДействия,2+2*
ОбрабатыватьТабличныеЧасти-ТабличноеПоле.Колонки.Индекс(КолонкаДействия));
// КолонкаДействия.ЦветФонаПоля = ЦветаСтиля.АльтернативныйЦветФонаПоля;
КонецЕсли;
КонецПроцедуры // ()
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
Функция КраткоеОписаниеОшибки(ОписаниеОшибки);
ПозКонцаСкобок = Найти(ОписаниеОшибки,"}");
Если ПозКонцаСкобок = 0 Тогда
Возврат ОписаниеОшибки;
Иначе
Возврат Сред(ОписаниеОшибки,ПозКонцаСкобок + 2);
КонецЕсли;
КонецФункции // ()
Функция ПолучитьПредставление(ЭлементПредставления)
Если Лев(ЭлементПредставления.Представление,2) = "К_" Тогда
Возврат "Категория:"+ЭлементПредставления.Значение;
ИначеЕсли Лев(ЭлементПредставления.Представление,2) = "С_" Тогда
Возврат "Свойство:"+ЭлементПредставления.Значение;
Иначе
Возврат ЭлементПредставления.Значение;
КонецЕсли;
КонецФункции
Функция ОчищатьРезультаты()
Если Не мСформированныйРежим = Неопределено И мСформированныйРежим.ДанныеОтобраны Тогда
Если Вопрос("Результат отбора будет очищен. Продолжить?", РежимДиалогаВопрос.ОКОтмена) = КодВозвратаДиалога.Отмена Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
ОчиститьРезультаты();
мСформированныйРежим = Неопределено;
Возврат Истина;
КонецФункции // ()
Процедура ОчиститьРезультаты()
ТаблицаДанных.Очистить();
ТабличноеПоле = ЭлементыФормы.ТабличноеПолеДанных;
Пока ТабличноеПоле.Колонки.Количество()>1 Цикл
ТабличноеПоле.Колонки.Удалить(ТабличноеПоле.Колонки
[ТабличноеПоле.Колонки.Количество()-1]);
КонецЦикла;
КонецПроцедуры // ()
Процедура СоздатьКолонкиТаблицыДанных()
ТабличноеПоле = ЭлементыФормы.ТабличноеПолеДанных;
Пока ТабличноеПоле.Колонки.Количество()>1 Цикл
ТабличноеПоле.Колонки.Удалить(ТабличноеПоле.Колонки
[ТабличноеПоле.Колонки.Количество()-1]);
КонецЦикла;
Для каждого Элемент Из мСформированныйРежим.СписокПредставлений Цикл
Если Элемент.Представление = "Ш_ВидПредставление" или Элемент.Представление = "Ш_Вид" Или Элемент.Представление = "Т_ТЧ" Тогда
Продолжить;
КонецЕсли;
КолонкаТаблицыДанных = ТаблицаДанных.Колонки.Найти(Элемент.Представление);
Если КолонкаТаблицыДанных = Неопределено Тогда
Продолжить;
КонецЕсли;
НоваяКолонка = ТабличноеПоле.Колонки.Добавить(Элемент.Представление, ПолучитьПредставление(Элемент));
Если КолонкаТаблицыДанных.ТипЗначения = ОписаниеТипаБулево Тогда
НоваяКолонка.ДанныеФлажка = Элемент.Представление;
НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
Иначе
НоваяКолонка.Данные = Элемент.Представление;
Если Лев(Элемент.Представление,2) = "С_" Тогда
НоваяКолонка.ЭлементУправления.ОграничениеТипа = Элемент.Значение.ТипЗначения;
КонецЕсли;
НоваяКолонка.ТолькоПросмотр = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ()
Процедура ОткрытьФормуВыбораТаблицы()
ФормаВыбораТаблицы = ПолучитьФорму("ФормаВыбораТаблицы",ЭтаФорма);
ФормаВыбораТаблицы.РежимВыбора = Истина;
ФормаВыбораТаблицы.СписокВыбранных.ЗагрузитьЗначения
(ТабличноеПолеВидыОбъектов.ВыгрузитьКолонку("ИмяТаблицы"));
ФормаВыбораТаблицы.ТипОбъекта = ТипОбъекта;
ФормаВыбораТаблицы.ОбрабатыватьТабличныеЧасти = ОбрабатыватьТабличныеЧасти;
ФормаВыбораТаблицы.Открыть();
КонецПроцедуры // ()
Процедура ИнициализацияЗапроса()
ВсегоСтрок = ТабличноеПолеВидыОбъектов.Количество();
Если ВсегоСтрок = 0 Тогда
Если Не ПостроительЗапроса = Неопределено И Не ПостроительЗапроса.Отбор = Неопределено Тогда
КоличествоОтборов = ПостроительЗапроса.Отбор.Количество();
Для Индекс = 1 По КоличествоОтборов Цикл
ПостроительЗапроса.Отбор.Удалить(КоличествоОтборов - Индекс);
КонецЦикла;
КонецЕсли;
ПостроительЗапроса = Неопределено;
Возврат;
КонецЕсли;
Если ПостроительЗапроса = Неопределено Тогда
ПостроительЗапроса = Новый ПостроительЗапроса;
КонецЕсли;
///============================= ИНИЦИАЛИЦАЗИЯ ПЕРЕМЕННЫХ
МетаданныеОбъектов = Метаданные[?(ТипОбъекта = 1,"Документы","Справочники")];
ИмяТипаТаблицы = ?(ТипОбъекта = 1,"Документ","Справочник");
Префикс = ?(ОбрабатыватьТабличныеЧасти,"Ссылка.","");
ТекстЗапроса = "";
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("ХранилищеЗначения"));
ОписаниеТипаХранилище = Новый ОписаниеТипов(МассивТипов);
МассивТипов = Новый Массив;
СписокПредставлений = Новый СписокЗначений;
СтруктураРеквизитовШапки = Новый Структура;
СтруктураРеквизитовТЧ = Новый Структура;
СтруктураТиповОбъектов = Новый Структура;
СтруктураКатегорий = Новый Структура;
СтруктураСвойств = Новый Структура;
МассивНастроекОтбора = Новый Массив;
ИмяВидаОдногоТипа = Неопределено;
ПрошлоеЗначение = Неопределено;
///============================= ПОДСЧЕТ ОДОИМЕННЫХ РЕКВИЗИТОВ
Для каждого Строка Из ТабличноеПолеВидыОбъектов Цикл
Если Не ОбрабатыватьТабличныеЧасти Тогда
ИмяВида = Строка.ИмяТаблицы;
Иначе
ПозТЧК = Найти(Строка.ИмяТаблицы,".");
ИмяВида = Лев(Строка.ИмяТаблицы,ПозТЧК-1);
ИмяТЧ = Сред(Строка.ИмяТаблицы,ПозТЧК+1);
МетаданныеРеквизитовТЧ = МетаданныеОбъектов[ИмяВида].ТабличныеЧасти[ИмяТЧ].Реквизиты;
КонецЕсли;
МетаданныеРеквизитов = МетаданныеОбъектов[ИмяВида].Реквизиты;
Если ТипОбъекта = 1 Тогда
Если МетаданныеОбъектов[ИмяВида].ДлинаНомера > 0 Тогда
СтруктураРеквизитовШапки.Вставить("Номер",
?(СтруктураРеквизитовШапки.Свойство("Номер",ПрошлоеЗначение)
,ПрошлоеЗначение+1,1));
КонецЕсли;
СтруктураРеквизитовШапки.Вставить("Дата",
?(СтруктураРеквизитовШапки.Свойство("Дата",ПрошлоеЗначение)
,ПрошлоеЗначение+1,1));
СтруктураРеквизитовШапки.Вставить("Проведен",
?(СтруктураРеквизитовШапки.Свойство("Проведен",
ПрошлоеЗначение)
,ПрошлоеЗначение+1,1));
Иначе
Если МетаданныеОбъектов[ИмяВида].ДлинаКода > 0 Тогда
СтруктураРеквизитовШапки.Вставить("Код",
?(СтруктураРеквизитовШапки.Свойство("Код",ПрошлоеЗначение)
,ПрошлоеЗначение+1,1));
КонецЕсли;
Если МетаданныеОбъектов[ИмяВида].ДлинаНаименования > 0 Тогда
СтруктураРеквизитовШапки.Вставить("Наименование",
?(СтруктураРеквизитовШапки.Свойство("Наименование",
ПрошлоеЗначение)
,ПрошлоеЗначение+1,1));
КонецЕсли;
КонецЕсли;
Если ИмяВидаОдногоТипа = Неопределено Тогда
ИмяВидаОдногоТипа = ИмяВида;
ИначеЕсли ИмяВидаОдногоТипа <> ИмяВида Тогда
ИмяВидаОдногоТипа = Ложь;
КонецЕсли;
Для каждого РеквизитМетаданного Из МетаданныеОбъектов[ИмяВида].Реквизиты Цикл
Если РеквизитМетаданного.Тип = ОписаниеТипаХранилище Тогда
Продолжить;
КонецЕсли;
СтруктураРеквизитовШапки.Вставить(РеквизитМетаданного.Имя,
?(СтруктураРеквизитовШапки.Свойство(РеквизитМетаданного.Имя,
ПрошлоеЗначение)
,ПрошлоеЗначение+1,1));
КонецЦикла;
Если ОбрабатыватьТабличныеЧасти Тогда
Для каждого РеквизитМетаданного Из МетаданныеРеквизитовТЧ Цикл
Если РеквизитМетаданного.Тип = ОписаниеТипаХранилище Тогда
Продолжить;
КонецЕсли;
СтруктураРеквизитовТЧ.Вставить(РеквизитМетаданного.Имя,
?(СтруктураРеквизитовТЧ.Свойство(РеквизитМетаданного.Имя,
ПрошлоеЗначение)
,ПрошлоеЗначение+1,1));
КонецЦикла;
КонецЕсли;
СтруктураТиповОбъектов.Вставить(МетаданныеОбъектов[ИмяВида].
Имя,Тип(ИмяТипаТаблицы+"Ссылка."+ИмяВида));
КонецЦикла;
Если ИмяВидаОдногоТипа = Ложь Тогда
ИмяВидаОдногоТипа = Неопределено;
КонецЕсли;
ВКонфигурацииЕстьОстаткиНоменклатуры = Не Метаданные.РегистрыНакопления.Найти("ТоварыНаСкладах") = Неопределено;
КонтрольОстатковНоменклатуры = (ТипОбъекта = 0) и (ИмяВидаОдногоТипа = "Номенклатура") И ВКонфигурацииЕстьОстаткиНоменклатуры;
///============================= ОПРЕДЕЛЕНИЕ ОБЩИХ СВОЙСТВ И КАТЕГОРИЙ
Для каждого КлючИЗначение Из СтруктураТиповОбъектов Цикл
МассивТипов.Добавить(КлючИЗначение.Значение);
КонецЦикла;
ОписаниеВсехТипов = Новый ОписаниеТипов(МассивТипов);
Если ВКонфигурацииЕстьКатегории Тогда
Счетчик = 0;
Выборка = Справочники.КатегорииОбъектов.Выбрать();
Пока Выборка.Следующий() Цикл
Счетчик = Счетчик + 1;
Если Не Выборка.ЭтоГруппа И Не Выборка.НазначениеКатегории.ТипЗначения = Неопределено Тогда
ТипРазницы = Новый ОписаниеТипов(ОписаниеВсехТипов,,Выборка.НазначениеКатегории.
ТипЗначения.Типы());
Если ТипРазницы.Типы().Количество() = 0 Тогда
СтруктураКатегорий.Вставить("К_"+Счетчик,Выборка.ссылка);
Если ОтборПоКатегориям Тогда
ПостроительЗапроса.Параметры.Вставить("К_"+Счетчик,Выборка.ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
///============================= ОПРЕДЕЛЕНИЕ СОСТАВА РЕКВИЗИТОВ
Счетчик = 0;
Для каждого КлючИЗначение Из СтруктураРеквизитовТЧ Цикл
Если Не КлючИЗначение.Значение = ВсегоСтрок Тогда
СтруктураРеквизитовТЧ.Удалить(КлючИЗначение.Ключ);
Иначе
Счетчик = Счетчик + 1;
СтруктураРеквизитовТЧ.Вставить(КлючИЗначение.Ключ,"Т_"+
КлючИЗначение.Ключ);
КонецЕсли;
КонецЦикла;
Счетчик = 0;
Для каждого КлючИЗначение Из СтруктураРеквизитовШапки Цикл
Если Не КлючИЗначение.Значение = ВсегоСтрок Тогда
СтруктураРеквизитовШапки.Удалить(КлючИЗначение.Ключ);
Иначе
Счетчик = Счетчик + 1;
СтруктураРеквизитовШапки.Вставить(КлючИЗначение.Ключ,"Ш_"+
КлючИЗначение.Ключ);
КонецЕсли;
КонецЦикла;
///============================= ОПРЕДЕЛЕНИЕ ПОРЯДКА И ПРЕДСТАВЛЕНИЯ РЕКВИЗИТОВ
СписокПредставлений.Добавить("Вид "+ИмяТипаТаблицы+"а","Ш_Вид");
СписокПредставлений.Добавить("Вид "+ИмяТипаТаблицы+"а","Ш_ВидПредставление");
СписокПредставлений.Добавить("Ссылка","Ш_Ссылка");
Если ОбрабатыватьТабличныеЧасти Тогда
СписокПредставлений.Добавить("Имя ТЧ","Т_ТЧ");
СписокПредставлений.Добавить("Имя ТЧ","Т_ТЧПредставление");
СписокПредставлений.Добавить("№ строки","Т_НомерСтроки");
Для каждого КлючИЗначение Из СтруктураРеквизитовТЧ
Цикл
СписокПредставлений.Добавить(МетаданныеРеквизитовТЧ
[КлючИЗначение.Ключ].Представление(),КлючИЗначение.Значение);
КонецЦикла;
КонецЕсли;
СписокПредставлений.Добавить(Префикс + "Пометка удаления","Ш_ПометкаУдаления");
Если ТипОбъекта = 0 И Не ИмяВидаОдногоТипа = Неопределено Тогда
Если МетаданныеОбъектов[ИмяВидаОдногоТипа].Владельцы.Количество() > 0 Тогда
СтруктураРеквизитовШапки.Вставить("Владелец","Ш_Владелец");
КонецЕсли;
Если МетаданныеОбъектов[ИмяВидаОдногоТипа].Иерархический Тогда
СтруктураРеквизитовШапки.Вставить("Родитель","Ш_Родитель");
КонецЕсли;
КонецЕсли;
Если КонтрольОстатковНоменклатуры Тогда
СписокПредставлений.Добавить(Префикс+"Остаток товара","Р_Остаток");
СписокПредставлений.Добавить(Префикс+"Остаток-Резерв товара","Р_Резерв");
КонецЕсли;
Для каждого КлючИЗначение Из СтруктураРеквизитовШапки Цикл
МетаданныеРеквизита = МетаданныеРеквизитов.Найти(КлючИЗначение.Ключ);
Если Не МетаданныеРеквизита = Неопределено Тогда
СписокПредставлений.Добавить(Префикс+МетаданныеРеквизита.
Представление(),КлючИЗначение.Значение);
Иначе
СписокПредставлений.Добавить(Префикс+КлючИЗначение.Ключ,
КлючИЗначение.Значение);
КонецЕсли;
КонецЦикла;
Для каждого КлючИЗначение Из СтруктураКатегорий Цикл
СписокПредставлений.Добавить(КлючИЗначение.Значение,
КлючИЗначение.Ключ);
КонецЦикла;
Для каждого КлючИЗначение Из СтруктураСвойств Цикл
СписокПредставлений.Добавить(КлючИЗначение.Значение,
КлючИЗначение.Ключ);
КонецЦикла;
///============================= ДОБАВЛЕНИЕ ОБЩИХ РЕКВИЗИТОВ
СтруктураРеквизитовШапки.Вставить("ПометкаУдаления",
"Ш_ПометкаУдаления");
Если ОбрабатыватьТабличныеЧасти Тогда
СтруктураРеквизитовТЧ.Вставить("НомерСтроки","Т_НомерСтроки");
КонецЕсли;
///============================= ФОРМИРОВАНИЕ ТЕКСТА ЗАПРОСА
Для каждого Строка Из ТабличноеПолеВидыОбъектов Цикл
Если Не ОбрабатыватьТабличныеЧасти Тогда
ИмяВида = Строка.ИмяТаблицы;
Иначе
ПозТЧК = Найти (Строка.ИмяТаблицы,".");
ИмяВида = Лев (Строка.ИмяТаблицы,ПозТЧК-1);
ИмяТЧ = Сред (Строка.ИмяТаблицы,ПозТЧК+1);
МетаданныеРеквизитовТЧ = МетаданныеОбъектов[ИмяВида].ТабличныеЧасти[ИмяТЧ].Реквизиты;
КонецЕсли;
МетаданныеРеквизитов = МетаданныеОбъектов[ИмяВида].Реквизиты;
ИмяТаблицы = ИмяТипаТаблицы + "." + Строка.ИмяТаблицы;
ПсевдонимТаблицы = СтрЗаменить(ИмяТаблицы,".","_");
///============================= ФОРМИРОВАНИЕ ТЕКСТА ЗАПРОСА ПО РЕКВИЗИТАМ
ТекстЗапроса = ?(ТекстЗапроса = "","Выбрать",ТекстЗапроса + Символы.ПС + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС + Символы.ПС + "ВЫБРАТЬ");
ТекстЗапроса = ТекстЗапроса + "" + Символы.ПС + " """ +ИмяВида+ """ КАК Ш_Вид";
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " """ +МетаданныеОбъектов[ИмяВида].Представление()+ """ КАК Ш_ВидПредставление";
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " " +ПсевдонимТаблицы+"."+Префикс+"Ссылка КАК Ш_Ссылка";
Для каждого КлючИЗначение Из СтруктураРеквизитовШапки Цикл
МетаданноеРеквизита = МетаданныеРеквизитов.Найти(КлючИЗначение.Ключ);
Если Не МетаданноеРеквизита = Неопределено И МетаданноеРеквизита.Тип.СодержитТип(Тип("Строка")) и МетаданноеРеквизита.Тип.КвалификаторыСтроки.Длина = 0 Тогда
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " ПОДСТРОКА("+ПсевдонимТаблицы+"."+Префикс+КлючИЗначение.Ключ
+",1,"+ОграничениеНаСтрокиНеограниченнойДлинны+")";
Иначе
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " "+ПсевдонимТаблицы+"."+Префикс+КлючИЗначение.Ключ;
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + " КАК " + КлючИЗначение.Значение;
КонецЦикла;
Если ОбрабатыватьТабличныеЧасти Тогда
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " """ +ИмяТЧ+ """ КАК Т_ТЧ";
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " """ +МетаданныеОбъектов[ИмяВида].ТабличныеЧасти[ИмяТЧ].
Представление()+ """ КАК Т_ТЧПредставление";
Для каждого КлючИЗначение Из СтруктураРеквизитовТЧ Цикл
МетаданноеРеквизита = МетаданныеРеквизитовТЧ.Найти(КлючИЗначение.Ключ);
Если Не МетаданноеРеквизита = Неопределено И МетаданноеРеквизита.Тип.СодержитТип(Тип("Строка")) и МетаданноеРеквизита.Тип.КвалификаторыСтроки.Длина = 0 Тогда
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " ПОДСТРОКА("+ПсевдонимТаблицы+"."+КлючИЗначение.Ключ+",1,"
+ОграничениеНаСтрокиНеограниченнойДлинны+")";
Иначе
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " "+ПсевдонимТаблицы+"."+КлючИЗначение.Ключ;
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + " КАК " + КлючИЗначение.Значение;
КонецЦикла;
КонецЕсли;
///============================= ФОРМИРОВАНИЕ ТЕКСТА ЗАПРОСА ПО СВОЙСТВАМ И КАТЕГОРИЯМ
Если ОтборПоКатегориям Тогда
Для каждого КлючИЗначение Из СтруктураКатегорий Цикл
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС +
" ВЫБОР КОГДА Таблица_"+КлючИЗначение.Ключ+".Категория ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК " + КлючИЗначение.Ключ;
КонецЦикла;
КонецЕсли;
Если ОтборПоСвойствам Тогда
Для каждого КлючИЗначение Из СтруктураСвойств Цикл
ТекстЗапроса = ТекстЗапроса + "," + Символы.ПС + " Таблица_"+КлючИЗначение.Ключ+".Значение КАК "+КлючИЗначение.Ключ;
КонецЦикла;
КонецЕсли;
///============================= ФОРМИРОВАНИЕ ТЕКСТА ЗАПРОСА ПО ОСТАТКАМ НОМЕНКЛАТУРЫ
Если КонтрольОстатковНоменклатуры Тогда
ТекстЗапроса = ТекстЗапроса + "," + "
| ЕСТЬNULL(Таблица_Р_Остаток.КоличествоОстаток,0) Как Р_Остаток,
| ЕСТЬNULL(Таблица_Р_Остаток.КоличествоОстаток, 0) - ЕСТЬNULL(Таблица_Р_Резерв.КоличествоОстаток, 0) КАК Р_Резерв";
КонецЕсли;
///============================= ФОРМИРОВАНИЕ ТЕКСТА ЗАПРОСА ПО "ИЗ" И "СОЕДИНЕНИЕ"
ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ИЗ" + Символы.ПС + " "+ИмяТаблицы + " КАК " + ПсевдонимТаблицы;
Если ОтборПоКатегориям Тогда
Для каждого КлючИЗначение Из СтруктураКатегорий Цикл
ТекстЗапроса = ТекстЗапроса + "
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КатегорииОбъектов КАК Таблица_"+КлючИЗначение.Ключ+"
| ПО " + ПсевдонимТаблицы + ".Ссылка = Таблица_"+КлючИЗначение.Ключ+".Объект
| И (Таблица_"+КлючИЗначение.Ключ+".Категория = &"+КлючИЗначение.Ключ+")";
КонецЦикла;
КонецЕсли;
Если ОтборПоСвойствам Тогда
Для каждого КлючИЗначение Из СтруктураСвойств Цикл
ТекстЗапроса = ТекстЗапроса + "
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК Таблица_"+КлючИЗначение.Ключ+"
| ПО " + ПсевдонимТаблицы + ".Ссылка = Таблица_"+КлючИЗначение.Ключ+".Объект
| И (Таблица_"+КлючИЗначение.Ключ+".Свойство = &"+КлючИЗначение.Ключ+")";
КонецЦикла;
КонецЕсли;
Если КонтрольОстатковНоменклатуры Тогда
ТекстЗапроса = ТекстЗапроса + "," + "
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Таблица_Р_Остаток
| ПО " + ПсевдонимТаблицы + ".Ссылка = Таблица_Р_Остаток.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК Таблица_Р_Резерв
| ПО " + ПсевдонимТаблицы + ".Ссылка = Таблица_Р_Резерв.Номенклатура";
КонецЕсли;
Если ТипОбъекта = 0 И МетаданныеОбъектов[ИмяВида].Иерархический И МетаданныеОбъектов[ИмяВида].ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда
ТекстЗапроса = ТекстЗапроса + "
|ГДЕ
| " + ПсевдонимТаблицы + ".Ссылка.ЭтоГруппа = ЛОЖЬ";
КонецЕсли;
КонецЦикла;
///============================= СОХРАНЕНИЕ НАСТРОЕК ОТБОРА ПРЕДЫДУЩЕГО ЗАПРОСА
Для Индекс = 0 По ПостроительЗапроса_Отбор.Количество() - 1 Цикл
МассивНастроекОтбора.Добавить(ПостроительЗапроса_Отбор.
Получить(Индекс));
КонецЦикла;
///============================= ИНИЦИАЛИЗАЦИЯ ТЕКСТА И ПОЛЕЙ ЗАПРОСА
Если ТипОбъекта = 1 Тогда
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Ш_Дата";
Иначе
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| Ш_Вид,
| Ш_Ссылка";
КонецЕсли;
Если ОбрабатыватьТабличныеЧасти Тогда
ТекстЗапроса = ТекстЗапроса + ",
| Т_ТЧ,
| Т_НомерСтроки";
КонецЕсли;
ПостроительЗапроса.Текст = ТекстЗапроса;
ПостроительЗапроса.ЗаполнитьНастройки();
КоличествоПолей = ПостроительЗапроса.ДоступныеПоля.Количество();
Для к = 0 По КоличествоПолей - 1 Цикл
ДоступноеПоле = ПостроительЗапроса.ДоступныеПоля[КоличествоПолей - к - 1];
Если ПостроительЗапроса.ВыбранныеПоля.Найти(ДоступноеПоле.Имя) = Неопределено Тогда
ПостроительЗапроса.ДоступныеПоля.Удалить(ДоступноеПоле);
КонецЕсли;
КонецЦикла;
КоличествоПолей = ПостроительЗапроса.ВыбранныеПоля.Количество();
Для к = 0 По КоличествоПолей - 1 Цикл
ИмяПоля = ПостроительЗапроса.ВыбранныеПоля[КоличествоПолей - к - 1].Имя;
ДоступноеПоле = ПостроительЗапроса.ДоступныеПоля.Найти(ИмяПоля);
ПостроительЗапроса.ДоступныеПоля.Сдвинуть(ДоступноеПоле,-1000);
КонецЦикла;
Для каждого ЭлементПредставления Из СписокПредставлений Цикл
ДоступноеПоле = ПостроительЗапроса.ДоступныеПоля.Найти(ЭлементПредставления.
Представление);
Если Не ДоступноеПоле = Неопределено Тогда
ДоступноеПоле.Представление = ПолучитьПредставление(ЭлементПредставления);
Если Лев(ДоступноеПоле.Имя , 2) = "С_" Тогда
ДоступноеПоле.ТипЗначения = СтруктураСвойств[ДоступноеПоле.Имя].ТипЗначения;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ДоступныеПоляОтбора = ПостроительЗапроса.Отбор.ПолучитьДоступныеПоля();
ДоступныеПоляОтбора.Удалить(ДоступныеПоляОтбора.
Ш_ВидПредставление);
ДоступныеПоляОтбора.Ш_Ссылка.Поля.Очистить();
//ДоступныеПоляОтбора.Удалить(ДоступныеПоляОтбора.Ш_Ссылка);
Если ОбрабатыватьТабличныеЧасти Тогда
ДоступныеПоляОтбора.Удалить(ДоступныеПоляОтбора.
Т_ТЧПредставление);
ДоступныеПоляОтбора.Удалить(ДоступныеПоляОтбора.Т_ТЧ);
КонецЕсли;
///============================= ВОССТАНОВЛЕНИЕ НАСТРОЕК ОТБОРА ПРЕДЫДУЩЕГО ЗАПРОСА
Для каждого ЭлементОтбора Из МассивНастроекОтбора Цикл
ДоступноеПоле = ДоступныеПоляОтбора.Найти(ЭлементОтбора.ПутьКДанным);
Попытка
НовыйЭлементОтбора = ПостроительЗапроса.Отбор.Добавить(ЭлементОтбора.ПутьКДанным);
НовыйЭлементОтбора.Использование = ЭлементОтбора.Использование;
НовыйЭлементОтбора.ВидСравнения = ЭлементОтбора.ВидСравнения;
НовыйЭлементОтбора.Значение = ЭлементОтбора.Значение;
НовыйЭлементОтбора.ЗначениеС = ЭлементОтбора.ЗначениеС;
НовыйЭлементОтбора.ЗначениеПо = ЭлементОтбора.ЗначениеПо;
Исключение
КонецПопытки;
КонецЦикла;
ПредопределенныеРеквизиты = Новый СписокЗначений;
Макет = ПолучитьМакет("ПредопределенныеРеквизиты");
Область = Макет.Области[?(ТипОбъекта = 0,"Справочники","Документы")];
Счетчик = 0;
ВидОбъекта = "*";
Для к = Область.Верх По Область.Низ Цикл
ТекВидОбъекта = СокрЛП(Макет.Область("R"+к+"C1").Текст);
Если ТекВидОбъекта <> "" Тогда
Если ТекВидОбъекта = "*" Тогда
ВидОбъекта = ТекВидОбъекта;
Иначе
ВидОбъекта = ТекВидОбъекта;
КонецЕсли;
КонецЕсли;
Если ИмяВидаОдногоТипа = ВидОбъекта ИЛИ ВидОбъекта = "*" Тогда
ПолноеИмяРеквизита = СокрЛП(Макет.Область("R"+к+"C2").Текст);
Описание = СокрЛП(Макет.Область("R"+к+"C3").Текст);
ЧерезТочку = Ложь;
ПозТЧК = Найти(ПолноеИмяРеквизита,".");
ЭтоСоставнойРеквизит = Не(ПозТЧК = 0);
ИмяКорня = "Ш_"+?(ПозТЧК = 0,ПолноеИмяРеквизита,Лев(ПолноеИмяРеквизита,ПозТЧК-1));
ПолеНастройки = ПостроительЗапроса.ДоступныеПоля.Найти(ИмяКорня);
Пока Не ПозТЧК = 0 И Не ПолеНастройки = Неопределено Цикл
ПолноеИмяРеквизита = Сред(ПолноеИмяРеквизита,ПозТЧК+1);
ПозТЧК = Найти(ПолноеИмяРеквизита,".");
ПолеНастройки = ПолеНастройки.Поля.Найти(?(ПозТЧК = 0,ПолноеИмяРеквизита,Лев(ПолноеИмяРеквизита,ПозТЧК-1)));
ЧерезТочку = Истина;
КонецЦикла;
Если Не ПолеНастройки = Неопределено Тогда
Если ЭтоСоставнойРеквизит Тогда
Счетчик = Счетчик+1;
ПостроительЗапроса.ВыбранныеПоля.Добавить(ПолеНастройки.
ПутьКДанным,"Д_"+Счетчик);
СписокПредставлений.Добавить(Описание,"Д_"+Счетчик);
ПредопределенныеРеквизиты.Добавить(Новый Структура("Имя,ПолеНастройки","Д_"+Счетчик,ПолеНастройки),
Описание);
Иначе
ПредопределенныеРеквизиты.Добавить(Новый Структура("Имя,ПолеНастройки",ПолеНастройки.Имя,ПолеНастройки),
Описание);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
///=============================
ПостроительЗапроса_Отбор = ПостроительЗапроса.Отбор;
ПостроительЗапроса.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ОтображаемыеКолонки = Новый Структура("Ш_ВидПредставление,Ш_Ссылка");
Если ОбрабатыватьТабличныеЧасти Тогда
ОтображаемыеКолонки.Вставить("Т_ТЧПредставление");
ОтображаемыеКолонки.Вставить("Т_НомерСтроки");
КонецЕсли;
мСформированныйРежим = Новый Структура("СписокПредставлений,ДанныеОтобраны,
ИмяВидаОдногоТипа,ПредопределенныеРеквизиты,
ОтображаемыеКолонки,СтруктураСвойств,СтруктураКатегорий",
СписокПредставлений,Ложь,ИмяВидаОдногоТипа,
ПредопределенныеРеквизиты,ОтображаемыеКолонки,
СтруктураСвойств,СтруктураКатегорий);
КонецПроцедуры // ИнициализацияЗапроса()
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
Если Не ОчищатьРезультаты() Тогда
Возврат;
КонецЕсли;
ТипОбъекта = Источник.ТипОбъекта;
ОбрабатыватьТабличныеЧасти = Источник.ОбрабатыватьТабличныеЧасти;
ТабличноеПолеВидыОбъектов.Очистить();
Для каждого Значение Из ЗначениеВыбора Цикл
Строка = ТабличноеПолеВидыОбъектов.Добавить();
Строка.ИмяТаблицы = Значение.Значение;
Строка.ПредставлениеТаблицы = Значение.Представление;
КонецЦикла;
ИнициализацияЗапроса();
КонецПроцедуры
Процедура ПослеВосстановленияЗначений()
Если ОчищатьРезультаты() Тогда
ИнициализацияЗапроса();
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Булево"));
МассивТипов.Добавить(Тип("Null"));
ОписаниеТипаБулево = Новый ОписаниеТипов(МассивТипов);
мСформированныйРежим = Неопределено;
Если ОграничениеНаСтрокиНеограниченнойДлинны = 0 Тогда
ОграничениеНаСтрокиНеограниченнойДлинны = 999;
КонецЕсли;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ
Процедура ОсновныеДействияФормыВыполнитьОтбор(Кнопка)
ОчиститьРезультаты();
ЭлементыФормы.Проведенные.Значение.Очистить();
ЭлементыФормы.НеПроведенные.Значение.Очистить();
Если мСформированныйРежим = Неопределено Тогда
ИнициализацияЗапроса();
КонецЕсли;
Если мСформированныйРежим = Неопределено Тогда
Предупреждение("Не выбрано ни одной таблицы");
Возврат;
КонецЕсли;
СоответствиеДанных = Новый Соответствие;
Для каждого ВыбранноеПоле Из ПостроительЗапроса.ВыбранныеПоля Цикл
СоответствиеДанных.Вставить(ВыбранноеПоле.ПутьКДанным,
ВыбранноеПоле.Имя);
КонецЦикла;
Счетчик = 0;
Для каждого Отбор Из ПостроительЗапроса_Отбор Цикл
Если Отбор.Использование И Не ПустаяСтрока(Отбор.ПутьКДанным) Тогда
Счетчик = Счетчик + 1;
ИмяДанных = СоответствиеДанных[Отбор.ПутьКДанным];
Если ИмяДанных = Неопределено Тогда
ИмяДанных = "О_"+Счетчик;
ПостроительЗапроса.ВыбранныеПоля.Добавить(Отбор.ПутьКДанным,
ИмяДанных);
мСформированныйРежим.СписокПредставлений.
Добавить(Отбор.Представление,ИмяДанных);
КонецЕсли;
мСформированныйРежим.ОтображаемыеКолонки.
Вставить(ИмяДанных,Отбор.ПутьКДанным)
КонецЕсли;
КонецЦикла;
мСформированныйРежим.ДанныеОтобраны = Истина;
ТаблицаДанных = ПостроительЗапроса.ПолучитьЗапрос().Выполнить().Выгрузить();
ТаблицаДанных.Колонки.Вставить(0,"Пометка",ОписаниеТипаБулево);
ТаблицаДанных.ЗаполнитьЗначения(Истина, "Пометка");
СоздатьКолонкиТаблицыДанных();
УстановитьВидимостьКолонок();
ЭлементыФормы.Панель.ТекущаяСтраница = ЭлементыФормы.Панель.Страницы.Обработка;
КонецПроцедуры
Процедура КоманднаяПанельФормыНастройка(Кнопка)
ПолучитьФорму("ФормаНастройки",ЭтаФорма).Открыть();
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ ФОРМЫ
Процедура ВыполнитьНажатие(Элемент)
ОчиститьСообщения();
// Андрей_К Старт
Если ВремяОстановки <> Дата(1,1,1) Тогда
Если ВремяОстановки < ТекущаяДата() Тогда
Предупреждение("Время остановки не может быть меньше текущего");
Возврат;
КонецЕсли;
КонецЕсли;
// Андрей_К Финиш
Если ВремяЗапуска <> Дата(1,1,1) Тогда
Если ВремяЗапуска < ТекущаяДата() Тогда
Предупреждение("Время запуска не может быть меньше текущего");
Возврат;
КонецЕсли;
Ответ = Вопрос("Проведение документов начнется в :" + ВремяЗапуска + Символы.ПС + Символы.ПС + "Для отмены нажмите кнопку <Отмена>" + Символы.ПС + "Для немедленного запуска нажмите кнопку <ОК>",РежимДиалогаВопрос.ОКОтмена,ВремяЗапуска-ТекущаяДата(),КодВозвратаДиалога.ОК,"Таймер включен");
Если Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
КонецЕсли;
МаксимальнаяПауза = ?(МаксимальнаяПауза=0,60,МаксимальнаяПауза);
ЭлементыФормы.Проведенные.Значение.Очистить();
ЭлементыФормы.НеПроведенные.Значение.Очистить();
ВремяСтарта = ТекущаяДата();
Сообщить("Проведение документов старт:" +ВремяСтарта , СтатусСообщения.Информация);
Сообщить("-----------------------------------------------------------", СтатусСообщения.БезСтатуса);
ИндикаторОбработки = 0;
МассивПомеченныхСтрок = ТаблицаДанных.НайтиСтроки(Новый Структура("Пометка",Истина));
ЭлементыФормы.ИндикаторОбработки.МаксимальноеЗначение = МассивПомеченныхСтрок.Количество();
ПрошлаяСсылка = Неопределено;
Объект = Неопределено;
СоответствиеОбъектов = Новый Соответствие;
ПрерватьПроведение = Ложь;
Для Каждого СтрокаДанных ИЗ МассивПомеченныхСтрок Цикл
Ссылка = ?(СтрокаДанных = Неопределено, Неопределено, СтрокаДанных.Ш_Ссылка);
Если Ссылка = Неопределено или Ссылка.Пустая() Тогда
Продолжить;
КонецЕсли;
ДокументНеПроведен = Истина;
Пока ДокументНеПроведен Цикл
Попытка
Объект = Ссылка.ПолучитьОбъект();
Объект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
// Андрей_К Старт
//Сообщить(""+Ссылка+" - Проведен в " + ТекущаяДата());
Если ВремяОстановки <> Дата(1,1,1) Тогда
Если ВремяОстановки < ТекущаяДата() Тогда
Сообщить("Обработка проведения документов остановлена", СтатусСообщения.Важное);
ПрерватьПроведение = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
// Андрей_К Финиш
ДокументНеПроведен = Ложь;
СтрокаДанных.Пометка = Ложь;
НовСтрока = ЭлементыФормы.Проведенные.Значение.Добавить();
НовСтрока.Ссылка = Ссылка;
ПаузаВыполнить(ПаузаМеждуПроведениями);
ПаузаМеждуПроведениями = ПаузаМеждуПроведениями - 1;
Если ПаузаМеждуПроведениями < МинимальнаяПауза Тогда
ПаузаМеждуПроведениями = МинимальнаяПауза;
КонецЕсли;
Исключение
ОписаниеОшибки = КраткоеОписаниеОшибки(ОписаниеОшибки());
Если Найти(ОписаниеОшибки,"Конфликт блокировок") > 0 Тогда
ПаузаМеждуПроведениями = ПаузаМеждуПроведениями + 5;
Если ПаузаМеждуПроведениями > МаксимальнаяПауза Тогда
ПаузаМеждуПроведениями = МаксимальнаяПауза;
КонецЕсли;
Сообщить("Конфликт блокировок. Пауза(с)="+ ПаузаМеждуПроведениями);
ПаузаВыполнить(ПаузаМеждуПроведениями);
Иначе
Сообщить(""+Ссылка+" - Не проведен - " + ОписаниеОшибки, СтатусСообщения.Важное);
НовСтрока = ЭлементыФормы.НеПроведенные.Значение.Добавить();
НовСтрока.Ссылка = Ссылка;
Если ПрерыватьПроведениеПриОшибке Тогда
Сообщить("Обработка проведения документов остановлена", СтатусСообщения.Важное);
ПрерватьПроведение = Истина;
Прервать;
КонецЕсли;
Если ОтменятьПроведение Тогда
ДокументНетОтменыПроведения = Истина;
Пока ДокументНетОтменыПроведения Цикл
Попытка
Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
ДокументНетОтменыПроведения = Ложь;
Исключение
ОписаниеОшибки = КраткоеОписаниеОшибки(ОписаниеОшибки());
Если Найти(ОписаниеОшибки,"Конфликт блокировок") > 0 Тогда
ПаузаМеждуПроведениями = ПаузаМеждуПроведениями + 5;
Если ПаузаМеждуПроведениями > МаксимальнаяПауза Тогда
ПаузаМеждуПроведениями = МаксимальнаяПауза;
КонецЕсли;
Сообщить("Конфликт блокировок. Пауза(с)="+ ПаузаМеждуПроведениями);
ПаузаВыполнить(ПаузаМеждуПроведениями);
Иначе
Сообщить(""+Ссылка+" - Невозможно отменить проведение - " + ОписаниеОшибки, СтатусСообщения.Важное);
ДокументНетОтменыПроведения = Ложь;
Если ПрерыватьПроведениеПриОшибке Тогда
Сообщить("Обработка проведения документов остановлена", СтатусСообщения.Важное);
ПрерватьПроведение = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецПопытки;
ОбработкаПрерыванияПользователя();
КонецЦикла;
Если ПрерватьПроведение Тогда
Прервать;
КонецЕсли;
КонецЕсли;
ДокументНеПроведен = Ложь;
КонецЕсли;
КонецПопытки;
ОбработкаПрерыванияПользователя();
КонецЦикла;
ЭлементыФормы.ТабличноеПолеДанных.ТекущаяСтрока = СтрокаДанных;
ЭлементыФормы.ТабличноеПолеДанных.ОбновитьСтроки(СтрокаДанных);
ИндикаторОбработки = ИндикаторОбработки + 1;
СкоростьПроведения = 1 + (ИндикаторОбработки/(ТекущаяДата()-ВремяСтарта+1));
// Андрей_К Старт
//Сообщить("Скорость(док/сек):" + формат(СкоростьПроведения,"ЧДЦ=2") + " Осталось времени - " + ОсталосьВремениСтрока((МассивПомеченныхСтрок.Количество()
-ИндикаторОбработки)/СкоростьПроведения) + " Пауза(с)=" + ПаузаМеждуПроведениями);
// Андрей_К Финиш
ОбработкаПрерыванияПользователя();
Если ПрерватьПроведение Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Сообщить("-----------------------------------------------------------", СтатусСообщения.БезСтатуса);
Сообщить("Выполнение обработки завершено в "+ТекущаяДата(), СтатусСообщения.БезСтатуса);
Сообщить("Время выполнения :"+ОсталосьВремениСтрока(ТекущаяДата()-ВремяСтарта), СтатусСообщения.БезСтатуса);
// Андрей_К Старт
Если ЗакрыватьПрограммуПоОкончанииПроведения=Истина Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
// Андрей_К финиш
КонецПроцедуры
// <Описание функции>
//
// Параметры
// <Параметр1> – <Тип.Вид> – <описание параметра>
// <продолжение описания параметра>
// <Параметр2> – <Тип.Вид> – <описание параметра>
// <продолжение описания параметра>
//
// Возвращаемое значение:
// <Тип.Вид> – <описание возвращаемого значения>
//
Функция ОсталосьВремениСтрока(Время)
Час = Цел(Время / 3600);
Мин = Цел((Время - (Час * 3600)) / 60);
Сек = Цел(Время - (Час * 3600) - (Мин * 60));
Возврат " час:"+Строка(СокрЛП(Час))+ " мин:"+Строка(СокрЛП(Мин)) + " сек:"+Строка(СокрЛП(Сек));
КонецФункции // ()
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЧНЫХ ЧАСТЕЙ
Процедура ТабличноеПолеВидыОбъектовПередНачаломДобавления(Элемент, Отказ, Копирование)
ОткрытьФормуВыбораТаблицы();
Отказ = Истина;
КонецПроцедуры
Процедура ТабличноеПолеВидыОбъектовПередНачаломИзменения(Элемент, Отказ)
ОткрытьФормуВыбораТаблицы();
Отказ = Истина;
КонецПроцедуры
Процедура ТабличноеПолеВидыОбъектовПослеУдаления(Элемент)
Если ОчищатьРезультаты() Тогда
ИнициализацияЗапроса();
КонецЕсли;
КонецПроцедуры
Процедура ТабличноеПолеВидыОбъектовПередУдалением(Элемент, Отказ)
Если Не ОчищатьРезультаты() Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Процедура ТабличноеПолеОтборПередНачаломИзменения(Элемент, Отказ)
Отказ = Не ОчищатьРезультаты();
КонецПроцедуры
Процедура ТабличноеПолеОтборПередНачаломДобавления(Элемент, Отказ, Копирование)
Отказ = Не ОчищатьРезультаты();
КонецПроцедуры
Процедура ТабличноеПолеДанныхВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
//Если Колонка.Имя = "Ш_Ссылка" Тогда
ВыбраннаяСтрока.Ш_Ссылка.ПолучитьФорму().Открыть();
//КонецЕсли;
КонецПроцедуры
Процедура ТабличноеПолеДанныхПриИзмененииФлажка(Элемент, Колонка)
ДанныеФлажка = Колонка.ДанныеФлажка;
Если Не ДанныеФлажка = "Пометка" Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
ТекущиеДанные[ДанныеФлажка] = Не ТекущиеДанные[ДанныеФлажка];
КонецЕсли;
КонецПроцедуры
Процедура КоманднаяПанельТабличногоПоляДанныхУстановитьФлажки(Кнопка)
Для каждого Строка Из ТаблицаДанных Цикл
Строка.Пометка = Истина;
КонецЦикла;
КонецПроцедуры
Процедура КоманднаяПанельТабличногоПоляДанныхСнятьФлажки(Кнопка)
Для каждого Строка Из ТаблицаДанных Цикл
Строка.Пометка = Ложь;
КонецЦикла;
КонецПроцедуры
Процедура ПаузаВыполнить_(Сек)
Если Сек = 0 Тогда
Возврат;
КонецЕсли;
нач=ТекущаяДата();
Пока ТекущаяДата() - нач < сек Цикл
ОбработкаПрерыванияПользователя();
КонецЦикла;
КонецПроцедуры
Процедура ПаузаВыполнить(чСекунд)
Если чСекунд = 0 Тогда
Возврат;
КонецЕсли;
cmdLine= "ping -n 1 -w " + Формат(1000*чСекунд, "ЧГ=0")+" 0.0.0.1";
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run(cmdLine, 0, -1);
КонецПроцедуры
Процедура ТабличноеПолеДанныхПриПолученииДанных(Элемент, ОформленияСтрок)
// Вставить содержимое обработчика.
Для каждого ОформлениеСтроки из ОформленияСтрок Цикл
Если Не ОформлениеСтроки.ДанныеСтроки.Пометка Тогда
Для каждого ОформлениеЯчейки из ОформлениеСтроки.Ячейки Цикл
ОформлениеЯчейки.ЦветФона = WebЦвета.Аквамарин;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ВКонфигурацииЕстьКатегории = Не Метаданные.Справочники.Найти("КатегорииОбъектов") = Неопределено;
ВКонфигурацииЕстьСвойства = Не Метаданные.ПланыВидовХарактеристик.Найти("СвойстваОбъектов") = Неопределено;
ТипОбъекта = 1;
ОбрабатыватьТабличныеЧасти = Ложь;
ПаузаМеждуПроведениями = 0;
МинимальнаяПауза = ?(МинимальнаяПауза=0,0,МинимальнаяПауза);
МаксимальнаяПауза = ?(МаксимальнаяПауза=0,60,МаксимальнаяПауза);
// Андрей_К Старт
//ОтменятьПроведение = Истина;
ЗакрыватьПрограммуПоОкончанииПроведения=Истина;
// Андрей_К Финиш
ПрерыватьПроведениеПриОшибке = Ложь;
Обработка Внимание! Если у вас не получилось найти нужную информацию, используйте
рубрикатор или воспользуйтесь
поиском .
Обработки 1С Перепроведение документов фоновое Универсальная обработка & quot Проведение документов& предназначена для фонового проведения документов без включения монопольного режима информационной базе Предприятия Добавлена возможность завершения работы указанное время архиве также содержится пример bat-файла запуска ки возможностью сохранения сообщений выдаваемых при проведении log-файл Запуск bat- кА файловом варианте монопольно клиент- серверном