Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Как вы узнали о нашем сайте?

От друга, знакомого
Из печатных источников
Из поисковой машины
По ссылке с другого сайта
Случайно
Не знаю


Результаты
Другие опросы

Всего голосов: 966
Комментарии: 4


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Перепроведение документов (фоновое)


Универсальная обработка "Проведение документов" предназначена
для фонового проведения документов без включения монопольного
режима в информационной базе 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,МаксимальнаяПауза);

// Андрей_К Старт
//ОтменятьПроведение = Истина;
ЗакрыватьПрограммуПоОкончанииПроведения=Истина;
// Андрей_К Финиш

ПрерыватьПроведениеПриОшибке = Ложь;


Обработка


Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



Обработки Перепроведение документов фоновое Универсальная обработка & quot Проведение документов& предназначена для фонового проведения документов без включения монопольного режима информационной базе Предприятия Добавлена возможность завершения работы указанное время архиве также содержится пример bat-файла запуска ки возможностью сохранения сообщений выдаваемых при проведении log-файл Запуск bat- кА файловом варианте монопольно клиент- серверном