Массовое создание исправлений отпусков и командировок


Обработка для массового создания документов Исправления отпусков и командировок в связи с перерасчетом среднего.

В середине года выяснилось, что премия не вошла в средний заработок, т.к. не стояла галочка в виде начисления "Включать в базу начислений при расчете среднего заработка", в связи с чем и была написана данная обработка. Возможен поиск первоначальных документов по списку сотрудников и/ или по дате начала события большей чем заданная дата начала. По кнопке "Рассчитать отмеченные" считается сумма начислений нового документа (без записи документа исправления). Если сумма начислений нового документа не отличается от суммы начислений старого документа в поле ТЧ Результат выводится: "Нет изменений в расчете", иначе "Создать документ исправление". По кнопке "Исправить" создается документ исправление с сегодняшней датой. Обработка использует стандартные процедуры форм документов, как если бы мы нажали кнопки "Исправить" и "Рассчитать", поэтому работает не быстро. Код вызова этих процедур привожу:

&НаКлиенте
Процедура РассчитатьОтмеченные(Команда)
Для каждого стр из Таблица Цикл
Если стр.Исправить Тогда
Если ТипЗнч(стр.Ссылка) =  Тип("ДокументСсылка.Командировка") Тогда
ИмяТаблицы =  "Командировка";
ИначеЕсли ТипЗнч(стр.Ссылка) =Тип("ДокументСсылка.Отпуск") Тогда
ИмяТаблицы =  "Отпуск";
КонецЕсли;
Основание = Новый Структура("Ссылка, Действие", стр.Ссылка, "Исправить");

ПараметрыФормы = Новый Структура("Основание", Основание);


Форма = ПолучитьФорму("Документ." + ИмяТаблицы + ".ФормаОбъекта", ПараметрыФормы);
Структура = ПолучитьДанныеПервоначальногоДокумента(стр.Ссылка);
Форма.ПерезаполнитьНачисленияСотрудника();
НачисленоИтог = Форма.НачисленоИтог;
Если НЕ (Структура.СреднийЗаработок = Форма.Объект.СреднийЗаработок И стр.Начислено = НачисленоИтог) Тогда
стр.Результат = "Создать документ исправление";
стр.Исправить = Истина;
Иначе
стр.Результат = "Нет изменений в расчете";
стр.Исправить = Ложь;
КонецЕсли;
стр.НачисленоНовДок =  НачисленоИтог;
КонецЕсли;
КонецЦикла;
КонецПроцедуры


&НаКлиенте
Процедура Исправить(Команда)
Для каждого стр из Таблица Цикл
Если стр.Исправить Тогда
Если ТипЗнч(стр.Ссылка) =  Тип("ДокументСсылка.Командировка") Тогда
ИмяТаблицы =  "Командировка";
ИначеЕсли ТипЗнч(стр.Ссылка) =Тип("ДокументСсылка.Отпуск") Тогда
ИмяТаблицы =  "Отпуск";
КонецЕсли;
Основание = Новый Структура("Ссылка, Действие", стр.Ссылка, "Исправить");

ПараметрыФормы = Новый Структура("Основание", Основание);


Форма = ПолучитьФорму("Документ." + ИмяТаблицы + ".ФормаОбъекта", ПараметрыФормы);
Структура = ПолучитьДанныеПервоначальногоДокумента(стр.Ссылка);
Форма.РассчитатьНачисления(Форма.Команды.Рассчитать);

Если НЕ (Структура.СреднийЗаработок = Форма.Объект.СреднийЗаработок И Структура.НачисленоИтог = Форма.НачисленоИтог) Тогда
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);

Форма.Записать(ПараметрыЗаписи);

стр.СсылкаНов = Форма.Объект.Ссылка;
стр.Результат = "Создан документ исправление";
Иначе
стр.Результат = "Нет изменений в расчете";
КонецЕсли;
стр.ДокументИсправлен = Истина;
стр.Исправить = Ложь;

КонецЕсли;
КонецЦикла;
РаскраситьТаблицу();
КонецПроцедуры

В обработке кроме этого есть только отбор документов, если документ был исправлен, то отбирается его исправление, отбор по сотруднику, дате начала события, в случае необходимости. Возможно подключение обработки как внешней.

Тестировалось на ЗУП КОРП 3.1.10.174.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *