Программное создание и расчет документов начисления зарплаты в конфигурации ЗУП 3.1 и ERP (по подразделениям)

06.04.23

Учетные задачи - Зарплата

Краткое описание типового механизма расчета зарплаты в конфигурации ЗУП 3.1 и ERP и описание разработанной обработки по программному расчету документов зарплаты в разрезе подразделений. Т.к. формирование документов происходит полностью программно, с минимумов параметров, его можно брать за основу для расчета документов по своим условиям, вплоть до создания по расписанию при необходимости.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Программное создание и расчет документов начисления зарплаты в конфигурации ЗУП 3.1 и ERP (по подразделениям):
.epf 19,69Kb ver:1.0
74
74 Скачать (10 SM) Купить за 4 550 руб.

В этой статье расскажу о подходе к программному созданию и расчету документов в ЗУП на примере документа "Начисление зарплаты и взносов". В ERP у нас блок расчета зарплаты тоже есть, поэтому актуально и для этой конфигурации.

Сначала кратко приведу как работает типовой механизм, потом опишу как я это реализовал в обработке. 

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

Как работает типовая логика.

При создании формы документа  для табличных частей, использующих показатели, создаются дополнительные колонки Показатель1...ПоказательN и Значение1...ЗначениеN, в которые переносятся данные из табличной части Показали, связанные по реквизиту ИдентификаторСтрокиВидаРасчета.

По команде "Заполнить" запускается расчет в фоновом задании, используется метод "ПодготовитьДанныеДляЗаполнения" из модуля менеджера. Думаю тут не нужно напоминать про существование параметра запуска "РежимОтладки", который позволяет не запускать выполнение в фоне, для удобства отладки.

Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
	УникальныйИдентификатор,
	"Документы.НачислениеЗарплаты.ПодготовитьДанныеДляЗаполнения",
	СтруктураПараметров,
	НаименованиеЗадания);

Но в модуле менеджера основной логики нет, тут вызывается функция из общего модуля "Расчет зарплаты расширенный".

ДанныеЗаполнения = РасчетЗарплатыРасширенный.ДанныеДляЗаполненияТаблицДокумента(ОписаниеДокумента, Организация, МесяцНачисления, ДополнительныеПараметры);

И уже в функции "ДанныеДляЗаполненияТаблицДокумента" происходит логика заполнения менеджера расчета, для расчета зарплаты. Ранее я уже описывал данный механизм в статье 

Использование менеджера расчета для расчета зарплаты в ЗУП 3.

Если кратко по этой функции, то мы получаем сотрудников для расчета

Сотрудники = СотрудникиДляНачисленияЗарплаты(Организация, Подразделение, МесяцНачисления, ПараметрыСотрудников);

Инициализируем менеджер расчета

МенеджерРасчета = СоздатьМенеджерРасчета(МесяцНачисления, Организация);

Рассчитываем начисления и переносим результаты расчета в данные заполнения, для возврата в документ.

МенеджерРасчета.РассчитатьЗарплату();

ДанныеЗаполнения.Начисления = МенеджерРасчета.Зарплата.Начисления;

После выполнения фонового задания происходит заполнение документа из рассчитанных данных

Если Результат.ЗаданиеВыполнено Тогда
	ЗаполнениеПослеВыполненияДлительнойОперации();
КонецЕсли;

Таблицы из формата менеджера расчета преобразуются в формат формы документа

ДанныеДляЗаполненияВДанныеФормы(ДанныеДляЗаполнения, Объект);

Все обработчики переноса находятся общем модуле РасчетЗарплатыРасширенныйФормы

РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНачисленияВДанныеФормы(ТаблицыНачислений, ДанныеЗаполнения.Начисления, Объект.Организация, Объект.МесяцНачисления, ПозицииВставки, Объект.РежимДоначисления);

В событии "ПередЗаписьюНаСервере" происходит перенос показателей из табличных частей в табличную часть "Показатели"

ЗарплатаКадрыРасширенный.ВводНачисленийРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблиц, 2);

Вроде бы все просто, бери, копируй код в обработку, пиши свое решение. Сложность в том, что все механизмы переноса данных менеджера расчета в данные формы рассчитаны на форму. Все методы находятся в общем модуле РасчетЗарплатыРасширенныйФормы. В коде есть такие методы как Строка.Свойство(), что мы можем применить только к ДанныеФормыКоллекция.  

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

Собственно интерфейс обработки

 

Я максимально упростил условия. Т.е. в шапке у нас только месяц расчета организация и ответственный.

РежимНачисления - окончательный расчет, порядок выплаты - зарплата.

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

Расчет идентичный тому, что если вы создадите документ, укажите необходимы реквизиты и нажмете кнопку "Заполнить".

Расчет реализован через длительные операции, т.е. через фоновые задания. Естественно, т.к. это внешняя обработка, она должна быть подключена в дополнительные отчеты и обработки. При открытии напрямую, будет работать без фонового задания.

Выполнение команды через длительные операции отображением прогресса работы.

Возврат ДлительныеОперации.ВыполнитьПроцедуру(
	ПараметрыВыполнения, 
	"ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки", 
	ПараметрыЗадания,
	АдресХранилища);

Весь расчет, создание и заполнение документа проходит в модуле обработки. После выполнения на клиенте обновляется таблица подразделений с документами. Никаких заполнений документов не происходит.

В модуле мы обходим в цикле выбранные подразделения и для каждого делаем расчет, в процессе сообщая прогресс выполнения

Процедура РасчитатьЗарплату(Параметры, АдресРезультата) Экспорт

	Подразделения = Параметры.Подразделения;
	
	ПорядковыйНомер = 1;	                            
	КоличествоПодразделений = Подразделения.Количество();
	
	Для Каждого ПараметрыРасчета Из Подразделения Цикл
		
		Процент = Окр(ПорядковыйНомер / КоличествоПодразделений * 100, 0);
		
		ДлительныеОперации.СообщитьПрогресс(Процент, 
			СтрШаблон(
				НСтр("ru = 'Расчет подразделения %1 (%2 из %3)'"),
				ПараметрыРасчета.Подразделение,
				ПорядковыйНомер,
				КоличествоПодразделений));
			
		РасчитатьДокумент(Параметры, ПараметрыРасчета);

		ПорядковыйНомер = ПорядковыйНомер + 1;

	КонецЦикла;	

КонецПроцедуры

В процедуре РасчитатьДокумент создаем или получаем объект документа

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

Как уже писал, использую максимально типовые механизмы, поэтому расчет проходит так же через типовой метод

Документы.НачислениеЗарплаты.ПодготовитьДанныеДляЗаполнения(ПараметрыВыполнения, АдресХранилища);	

СтруктураДанных = ПолучитьИзВременногоХранилища(АдресХранилища);

Ну и заполнение документа

	Если СтруктураДанных.Свойство("ДанныеДляЗаполненияТаблицДокумента", ДанныеДляЗаполнения) Тогда

		// Заполнение табличных частей и вторичных данных коллекций, которые с ней связаны.
		ОчиститьТаблицыДокументаНаСервере(ДокументОбъект);
		
		//Эмуляция формы для удобства работы с типовыми механизмами 
		//Для использования максимально типового функциола смоделируем в объекте данные формы документа
		ЭтаФорма = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ПараметрыВыполнения);
		ЭтаФорма.Вставить("ВременныйОбъект", ДанныеДокументаВОбъект(ДокументОбъект));
		
		//Данные процедура полностью идентичная аналогичной процедуре формы документа НачислениеЗарплаты
		ДанныеДляЗаполненияВДанныеОбъекта(ДанныеДляЗаполнения, ЭтаФорма.ВременныйОбъект);
		
		//Окончательно перенесем данные объекта в данные документа
		ДанныеОбъектаВДанныеДокумента(ЭтаФорма, ДокументОбъект, ПараметрыВыполнения);

С учетом того, что мы в том числе перезаполняем документ, то чистим все таблицы документа

Для Каждого ТабличнаяЧасть Из Метаданные.Документы.НачислениеЗарплаты.ТабличныеЧасти Цикл 
	ДокументОбъект[ТабличнаяЧасть.Имя].Очистить();
КонецЦикла;

Будем считать что в ТЧ ДополнительныеРеквизиты у нас пусто :)

Для переноса данных менеджера расчета в данные "формы", использую копию процедуры формы документа "ДанныеДляЗаполненияВДанныеОбъекта".

Так же в модуль перенесены и адаптированы функции модуля формы по описанию документа и таблиц начислений (льготы, взносы, налоги, удержания в зависимости от настроек программы).

Т.к. использую типовые механизмы переноса, но при этом не используя форму, то например в общем модуле ЗарплатаКадрыРасширенный.ВводНачисленийРеквизитВДанныеТаблицыРасчета пришлось обходить вот такое условие  

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

Для этого вместо таблиц значений использовал массивы структур

Форма.Объект.Вставить(Элемент.Ключ, ОбщегоНазначения.ТаблицаЗначенийВМассив(Элемент.Значение));

Тут форма - это структура. Сделано для удобства и "эмуляции" формы.

Показатели в таблицы добавляю програмно

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

 

Записываем документ с чисткой перерасчетов.

		ДокументОбъект.ДополнительныеСвойства.Вставить("УдалитьПерерасчетыТекущегоПериода", Истина);
		Попытка
			ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение); 
		Исключение
			ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
			ОбщегоНазначения.СообщитьПользователю(СтрШаблон(НСтр("ru = 'Не удалось провести расчетный документ %1 по причине:
				|%2'"), ДокументОбъект.Ссылка, КраткоеПредставлениеОшибки(ОписаниеОшибки())));
		КонецПопытки;


На будущее добавлено сохранения вида операции, если планируется разделять документы по видам операций.

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

 

Разработано в конфигурации 1С:Предприятие 8.3 (8.3.20.1613)

Код актуален для конфигурации Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.20.71). Дополнительно протестировал  работу в 1С:ERP Управление предприятием 2 (2.5.7.201) (В демо версии подразделения для теста есть в организации "Деловой союз").

В конфигурации очень много своей специфики. Например по нумерации ИдентификаторСтрокиВидаРасчета в зависимости от документа и табличной части. Или например менеджер расчета вычеты возвращает в ТЧ НДФЛ, которые потом переносятся в отдельную табличную часть. Показатели, которые в менеджере расчета хранятся для каждой строки в отдельной таблице значений, а в документа одна табличная часть Показатели для всех ТЧ, связанных по идентификатору.

К чему это я. Результаты работы данный обработки я сравнивал через выгрузку документа через обработку "Выгрузка загрузка данных в XML" и затем сравнивая результаты расчета через обработку и вручную.

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

Для данной обработки функциональная опция "Выполнять расчет зарплаты по подразделениям" должна быть включена. Это можно сделать в настройках сняв галку на пункте "Расчет и выплата зарплаты выполняется по организации в целом".

 

Программное создание документов расчеты зарплаты менеджер расчета механизмы ЗУП 3.1 разработка расчетных

См. также

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 7.хх учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

84000 руб.

24.04.2017    51862    104    165    

91

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

19.08.2020    25695    25    1    

27

Зарплата Роли и права Системный администратор Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5940 руб.

27.05.2021    38961    281    98    

215

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    6548    17    6    

27

Перенос данных 1C Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет зарплаты для бюджетных учреждений 3.5» и «КАМИН:Зарплата для бюджетных учреждений 5.5» на конфигурацию «Зарплата и кадры государственного учреждения».

12000 руб.

28.07.2016    61384    159    141    

133

Зарплата Производство готовой продукции (работ, услуг) Учет рабочего времени Рабочее место Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Торговля и склад 7.7 Бытовые услуги, сервис Оптовая торговля, дистрибуция, логистика Электротехника и микроэлектроника Управленческий учет Платные (руб)

Модуль или расширение «Сервисный центр для 1С» позволяет принимать в ремонт оборудование (компьютеры, бытовая техника и т.п.), оформлять заявки инженеров на посещение клиентов и вести начисление заработной платы для сотрудников. Позволяет наладить автоматизированный учет в сервисном центре на уже существующей базе.

16800 руб.

01.11.2012    95109    111    1    

119

Зарплата Программист Бизнес-аналитик Бухгалтер Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

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

33600 руб.

14.09.2022    16349    73    26    

74
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Komanda1C 1 27.12.21 09:56 Сейчас в теме
А зачем так нужно делать? Расчет обычно выполняется в рамках организации, а не подразделений.
2. ixijixi 1975 27.12.21 10:03 Сейчас в теме
(1) Шутить изволите? Если в организации сотни подразделений, физически невозможно все рассчитать в одном документе.
0x00; ubnkfl; +2 Ответить
3. maraty 466 27.12.21 10:17 Сейчас в теме
(1) Да банально возьмем ограничение в 99тыс строк в табличных частях документов.
Предположим в организации 10тыс сотрудников. Ведется учет по РК, СН. Еще несколько дополнительных начислений, надбавок. Добавим несколько удержаний. В общем в среднем на каждого сотрудника 4 начисления (Оклад, РК, СН, надбавка). Итого по 40тыс строк в ТЧ Начисления. А теперь на каждое начисление у нас по несколько показателей. Время, ставка, оклад, северный коэффициент, районный. В общем в крупной организации этого добра хватает. В табличной части "Показатели" у нас внезапно больше 99тыс строк и перестают сохраняться документы. Да и открывать документы где в табличных частях больше 10к строк то еще удовольствие для пользователя.
А если добавим сюда блокировки скуля по таблицам в РС ЗначенияПоказателейНачислений, то будет еще веселее.
4. Komanda1C 1 27.12.21 10:48 Сейчас в теме
(3)Коллега, а назовите хотя-бы одну организацию, где 10000 человек?
У нас в организации, например, 700 подразделений.
5. maraty 466 27.12.21 11:15 Сейчас в теме
(4) в яндексе запрос "top организаций по численности". Просто участвовал в некоторых организациях из этого топа в проектах, поэтому не хотелось бы их называть, а в особенности разглашать их численность.
10. biimmap 2024 05.01.22 13:10 Сейчас в теме
6. Komanda1C 1 27.12.21 11:21 Сейчас в теме
Топ численности персонала как и выручка компаний не является конфиденциальной информацией.
Например, Газпром, 500 000 тысяч сотрудников, но при этом 380 организаций. При этом самые крупные организации Газпрома имеют ОП.
По факту 10000 нет ни у кого.
7. maraty 466 27.12.21 11:35 Сейчас в теме
(6) Вот тут точно не скажу точных цифр. Да, согласен что в крупных компаниях идет дробление на организации. Пусть там 5 тыс. сотрудников, но проблемы указанные мной в (3) не выдуманы. Мы упирались в проекте в озвученные мной ограничения. Совокупное количество сотрудников, начислений и показателей фактически не давало сохранить документ в системе по одной организации.
8. Komanda1C 1 27.12.21 12:00 Сейчас в теме
(7)Обработка, в целом, полезная, но только для очень-очень крупных компаний...
9. maraty 466 27.12.21 12:57 Сейчас в теме
(8) да, так и есть. Организациям, у которых все рассчитывается в одном документе, это не нужно.
Разве что будет интересен сам принцип расчета без форм. Я по этому же принципу писал обработки по автоматическому расчету отпусков.
36. Alex65rus 01.04.22 18:14 Сейчас в теме
(7) Спасибо за статью. Запросов на ЗУП все больше, и 10к+ сотрудников сейчас - объективная реальность.
11. biimmap 2024 05.01.22 13:12 Сейчас в теме
(6) это заблуждение. И главное, что данная обработка актуальна при численности свыше 3х тысяч.
Alex65rus; +1 Ответить
15. maraty 466 09.01.22 12:35 Сейчас в теме
(11) Вообще целью было показать программное создание и расчет документа Начисления зарплаты. Пожалуй неудачно выбрал такой относительно узкий пример, как расчет по подразделениям, который используют только крупные организации. Можно сделать пример, как рассчитать зарплату автоматически, через регламентное задание по расписанию. Но это так себе будет решение, с точки зрения практического применения. Можно рассчитывать автоматически кадровые документы, например отпуск. Но тут тоже для каждой компании своя практика и опять же оправданно только при большом количестве сотрудников.
12. biimmap 2024 05.01.22 13:34 Сейчас в теме
Здесь аналогично про форму недостаточно написано. Без формы превратить результаты расчета в документ не представляется возможным типовым программным интерфейсом. Собственно это и не обязательно. Результат из Менеджера расчета зарплаты можно напрямую в ТЧ положить. Хотя придётся циклом пройтись по его строкам)

Вообще плохо сейчас сделано, что без формы не работают многие алгоритмы заполнения и расчета. Такая же проблема в кадровом учете в таблицах начислений и показателей.
ixijixi; RealSurfer; +2 Ответить
13. ixijixi 1975 07.01.22 22:48 Сейчас в теме
Какова бы ни была численность, один расчетчик просто не в состоянии рассчитать более 400-500, ну пусть и 1000 сотрудников. Поэтому при достижении этой численности нанимается второй расчетчик, и о расчете всей организации в одном документе приходится забыть.
14. maraty 466 09.01.22 11:22 Сейчас в теме
(12) В моей обработке расчет и заполнение документа проходят в модуле обработки, соответственно на сервере и без форм. Да, типовые методы в РасчетЗарплатыРасширенныйФормы подразумевают работу исключительно с формой. Но это можно обойти, передав в общий модуль структуру со свойством Объект, а вместо таблиц - массив структур, имитирующих строки (чтобы обойти вызов метода "Свойства"). Да, конечно эти таблицы еще модифицировать, добавив колонки показателей и их значений. Об этом писал в статье. Если вы используете результаты распределения, то нужно не забыть корректно перенести результаты в документ.

Метод прямого перекладывания результатов расчета их менеджера расчета в документ тоже допустим, но тут нужно просто быть внимательным. Например вручную перенести реквизит ТЧ ИдентификаторСтроки в ИдентификаторСтрокиВидаРасчета. Не забыть исключить показатели, у которых есть признак "ОтображатьВДокументахНачисления" стоит в ложь. Если у нас не только начисления, а еще удержания, перерасчеты, то не забыть для идентификатора строки ввести модификатор, чтобы показатели корректно были связаны со строкой расчета. Ну и еще по мелочам. Не забываем что результаты расчета для ТЧ "ПримененныеВычетыНаДетейИИмущественные" в менеджере расчета возвращаются в НДФЛ.

В общем всё зависит от требуемого конечного результата. Мой респект всем разработчикам, кто в ЗУП все таки дошел до прямого использования менеджера расчета и его результатов.
16. biimmap 2024 09.01.22 12:48 Сейчас в теме
(14) я в нескольких обработках все нужные табличные части и реквизиты формы создаю на форме обработки. и потом запускаю весь программный интерфейс как будто из документа. удобно и меньше думать надо над последствиями.
user_2010; +1 Ответить
17. maraty 466 09.01.22 13:01 Сейчас в теме
(16) Тоже решение, согласен, но часть функционала требует работы на клиенте. Хотя зарплата она такая, в большинстве случаев, пользователи хотят контролировать процесс.
18. SlavaKron 11.01.22 13:34 Сейчас в теме
(16) А в общих модулях используются какие-то методы и свойства исключительно управляемой формы или данных формы? Что если вместо формы передать структуру, содержащую прикладной объект с ключом "Объект"?
19. maraty 466 11.01.22 14:02 Сейчас в теме
(18)
1. У объекта должны быть табличные части, идентичные по структуре документу.
2. ТЧ должны быть дополнены колонками Показатель1...N, и Значение1...N
3. Строки ТЧ должны иметь метод "Свойства". В форме это обеспечивается, что ТЧ имеют тип "ДанныеФормыКоллекция". В моем случае, я ТЧ сделал через массив структур.
Так, это сходу что помню.
Ну минус, что приходится сначала переносить данные из менеджера в "форму", а затем уже в документ. Это нужно чтобы максимально сохранить всю типовую логику по переносу данных. Прямой перенос из менеджера расчета в документ тоже возможен, но уже через собственные методы.
20. biimmap 2024 11.01.22 14:23 Сейчас в теме
(18) да ничего особенного, просто зачем этот велосипед? Коллега ранее Вам ответил, что должен быть определенный набор реквизитов и табличных частей. Их элементарно скопировать из типовой формы. А в структуру их нужно создавать. Вот и вся разница. Я за то, чтоб копировать типовое, а не городить велосипеды.
корум; +1 Ответить
21. maraty 466 11.01.22 15:01 Сейчас в теме
(20) Куда скопировать? В другую форму которой у меня нет? А типовые реквизиты, которые создаются программно на форме как элементарно скопировать? Мы по моему говорим о разных задачах. Мой способ полностью работает на сервере. Ваш способ требует наличия формы и работы на клиенте.
22. biimmap 2024 11.01.22 15:11 Сейчас в теме
(21) форма обработки есть!!! в неё всё и копирую. а потом форму обработки использую как параметр для программного интерфейса
23. maraty 466 11.01.22 15:21 Сейчас в теме
(22) моя реализация допускает выполнения расчета в регламентном задании. без формы соответственно. Правда сомневаюсь что такой расчет кому то нужен, но тем не менее можно :)
И потом с формой нужно смотреть как это будет работать на большом объеме данных. Просто когда дойдет до оптимизации производительности, в первую очередь будут избавляться от перекладывания данных в форму и обратно.
24. biimmap 2024 11.01.22 15:23 Сейчас в теме
(23) В таких задачах речь про производительность обычно не идёт! Важно добиться цели, которая нормальным путём не достигается. Идею с формой обработки уже несколько раз использовал. Очень удобно.
25. maraty 466 11.01.22 15:31 Сейчас в теме
(24) Просто мне достаются задачи, когда писать нужно именно с учетом требований по производительности.
Когда есть пара десятков организаций, в каждой организации десятки и сотни подразделений и в целом несколько тысяч сотрудников, к сожалению простые способы не работают.
26. biimmap 2024 11.01.22 15:33 Сейчас в теме
(25) на ночь запускаются такие обработки + попробуйте через фоновые задания реализовать многопоточную обработку данных. Коллега в Роснефти таким образом добивался классных результатов!
27. maraty 466 11.01.22 15:44 Сейчас в теме
(26) Тот проект, где я реализовывал подобное, уже давно закончился. Правда в отличии от реализации в статье, я там адаптировал типовые модули заполнения, это был действительно велосипед. А как реализовано в Роснефти при случае посмотрю.
28. user_2010 964 11.01.22 17:01 Сейчас в теме
Интересно! Такая реализация где-то используется в бою?
Нет ошибок в таком расчете начислений, удержаний, взносов?
Код же постоянно меняется. Насколько сложно поддерживать такую разработку? Предполагаю, что для каждого релиза приходится что-то дорабатывать/перелопачивать?
30. maraty 466 11.01.22 17:20 Сейчас в теме
(28) Именно эта реализация нет. Я реализовывал похожее решение, но вместо использования методов РасчетЗарплатыРасширенныйФормы, я переносил нужные процедуры в обработку и переписывал их на использование без форм. Такое решение как раз было сложнее поддерживать. А так фактически используем типовой метод расчета Документы.НачислениеЗарплаты.ПодготовитьДанныеДляЗаполнения, данные переносим в документ с помощью типовых методов РасчетЗарплатыРасширенныйФормы. Тут особо ничего не меняется.
29. user_2010 964 11.01.22 17:05 Сейчас в теме
(28) Тоже работала в большой компании 5.5 тыс сотрудников. Тоже многие операции автоматизировали. Но! Недостатком автоматизации - являются проблемы, которые никто не видит... и визуализируются проблемы только в момент подготовки отчетности...
31. maraty 466 11.01.22 17:23 Сейчас в теме
(29) Да, встречал такое что какая то мелочь не перенеслась в документ, что-то не провелось по регистрам и все. Отчеты работают не корректно. Поэтому и тестировал через выгрузку документа в XML и сравнение типового расчета и расчета обработкой.
32. user_2010 964 11.01.22 18:25 Сейчас в теме
33. vladir 115 04.03.22 15:35 Сейчас в теме
Добрый день. Скачал обработку. Проверял на конф. Зарплата и управление персоналом, редакция 3.1 (3.1.21.36) (не КОРП). В модуле формы Функция РезультатЗаполненияВДлительнойОперации() закомментировал строку: //СтруктураПараметров.Вставить("ВидОперации", Справочники.ВидыОперацийРасчетаЗарплаты.ПустаяСсылка()); (Такого справочника нет). В остальном все хорошо! Однако обнаружилась проблема: При повторном расчете ЗП по подразделению все таблицы документа очищаются, документ проводится с пустыми таблицами. Т. е. получается чередование, первый расчет - все Ок, второй расчет - очистка таблиц. Как обойти, пока не понял. Буду благодарен если подскажете, как устранить проблему.
35. maraty 466 09.03.22 16:04 Сейчас в теме
(33)
1. в ПРОФ ВидОперации можно закомментировать или убрать в условие
	Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ОперацииРасчетаЗарплаты") Тогда
		СтруктураПараметров.Вставить("ВидОперации",				Справочники.ВидыОперацийРасчетаЗарплаты.ПустаяСсылка());
	КонецЕсли;

2. Спасибо, увидел ошибку. Для исправления в начале процедуры РасчитатьДокумент(ПараметрыВыполнения, ПараметрыРасчета)
добавить код
	ПараметрыВыполнения.ДокументСсылка	= ПараметрыРасчета.Документ;
.
37. AlMedvedev 22.04.22 13:43 Сейчас в теме
(35)
ПараметрыВыполнения.ДокументСсылка = ПараметрыРасчета.Документ;


Добавил указанную строчку в начало процедуры. Документ заполняется, но данными без изменений.
34. user728230 08.03.22 07:28 Сейчас в теме
Есть моменты, когда сотрудники кадровым переводом туда-сюда в течение месяца (и даже иногда не один раз) переводятся.
Есть при этом суммированный учет времени. Есть моменты, когда необходимо соблюдать последовательность при начислении по подразделениям- сначала одни, именно ПОТОМ другие..... В общем идея хороша- автоматизировать.. Но не всем подойдет.
38. user728230 28.06.22 06:45 Сейчас в теме
У нас нет так много сотрудников -400-450 чел.. Но около 50 подразделений. Есть и суммированный, и РК, и РКС, и ещё куча всего. И один расчетчик. Тоже было желание начислять всем подразделениям сразу по кнопке Начислить. И формировать ведомости всем сразу по кнопке Выплатить ( возможно по отбору).. На самом деле рутина еще та два раза в месяц... Огромная экономия рабочего времени.
39. GeterX 1374 13.07.22 20:09 Сейчас в теме
Обработка не работает на релизе ЗУП 3.1.22.77
Поле объекта не обнаружено (ВидыОперацийРасчетаЗарплаты)
{ВнешняяОбработка.РасчетЗарплатыПоПодразделениям.Форма.Форма.Форма(302)}:СтруктураПараметров.Вставить("ВидОперации", Справочники.ВидыОперацийРасчетаЗарплаты.ПустаяСсылка());
{ВнешняяОбработка.РасчетЗарплатыПоПодразделениям.Форма.Форма.Форма(146)}:ДлительнаяОперация = РезультатЗаполненияВДлительнойОперации();


Не в той базе запустил, на КОРП работает.
40. bpirate999 25 06.07.23 17:23 Сейчас в теме
Запись должно тоже в фоновом задании быть
41. yhor 10.10.23 07:40 Сейчас в теме
Мне оказалось проще сделать так.
Прикрепленные файлы:
Оставьте свое сообщение