При переходе с редакции 2.5 на 3.1 конфигурации «Зарплата и управление персоналом» одной из самых сложных задач является перенос специфических начислений, содержащих несколько показателей. В старой редакции документ ПремииРаботниковОрганизации позволял хранить значения до шести показателей непосредственно в строках табличной части. В новой редакции 3.1 архитектура хранения данных кардинально изменилась. Давайте подробно разберем, как состыковать эти данные и правильно организовать перенос.
Проанализируем ситуацию: в ЗУП 2.5 показатели жестко привязаны к плану видов расчета ДополнительныеНачисленияОрганизации. В документе премии они отображаются как колонки. В ЗУП 3.1 структура стала более гибкой, но и более сложной для понимания:
Премия (и многих других расчетных документах) показатели вынесены в отдельную табличную часть Показатели. Если у одного сотрудника в расчете участвуют шесть показателей, то в таблице Начисления будет одна строка, а в таблице Показатели — шесть строк.КлючСвязи. Это целое число, которое должно совпадать в обеих табличных частях.Перед тем как приступать к написанию кода переноса, нам необходимо составить таблицу соответствия. Рассмотрим рекомендуемый алгоритм подготовки:
Идентификатор, а не наименование. Идентификатор используется в формулах и остается неизменным, даже если пользователь переименует показатель в интерфейсе.При написании собственного алгоритма переноса данных нам нужно уделить особое внимание заполнению табличных частей. Разберем пример логики заполнения:
Сначала мы добавляем строку в таблицу Начисления, фиксируем КлючСвязи, а затем в цикле добавляем все связанные показатели в таблицу Показатели. Рассмотрим схематичный пример кода:
// Создаем новую строку начисления
НоваяСтрокаНачисления = ДокументОбъект.Начисления.Добавить();
НоваяСтрокаНачисления.Сотрудник = СсылкаНаСотрудника;
НоваяСтрокаНачисления.КлючСвязи = ТекущийКлюч; // Уникальное число в рамках документа
// Добавляем показатели для этой строки
Для Каждого ТекПоказатель Из СписокПоказателей25 Цикл
НоваяСтрокаПоказателя = ДокументОбъект.Показатели.Добавить();
НоваяСтрокаПоказателя.КлючСвязи = ТекущийКлюч;
НоваяСтрокаПоказателя.Показатель = НайтиПоказательПоИдентификатору(ТекПоказатель.Имя);
НоваяСтрокаПоказателя.Значение = ТекПоказатель.Значение;
КонецЦикла;
Чтобы показатели корректно отображались и рассчитывались в документе, выясним причины возможных ошибок в настройках справочника Начисления:
Показатель1 + Показатель2 + ...).Показатели расчета зарплаты должен быть установлен признак «Вводится непосредственно в документе расчета».Если структура премии слишком сложна, или вы хотите, чтобы интерфейс ввода был максимально похож на ЗУП 2.5 (где показатели идут колонками), рассмотрим механизм «Шаблоны ввода исходных данных»:
Данные для расчета зарплаты. В нем показатели будут отображаться горизонтально, что значительно упрощает визуальную сверку при переносе данных вручную или программно.При создании печатных форм в ЗУП 3.1 нам придется изменить подход к выборке данных. В 2.5 мы просто обращались к реквизитам строки. Теперь же нам нужно выполнять группировку. Проанализируем, как это сделать:
Данные из табличной части Показатели нужно «развернуть» обратно в горизонтальную строку. Для этого удобно использовать запрос с соединением таблицы Начисления и нескольких временных таблиц (или левых соединений) таблицы Показатели, где каждое соединение фильтруется по конкретному идентификатору показателя. Также можно использовать программную обработку результата запроса, обходя коллекцию строк и собирая соответствие КлючСвязи -> СтруктураПоказателей.
Помните, что платформа 1С v8.3 стабильно работает с большим количеством показателей, но для удобства пользователей старайтесь не перегружать одну формулу более чем 6-10 переменными, чтобы не затруднять проверку результатов через окно «Показать подробности расчета».