Что такое ИдентификаторСтрокиВидаРасчета в ЗУП 3.1 и как его программно заполнить?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Управленческий учет
← На главную

При работе с конфигурацией 1С:Зарплата и Управление Персоналом 3.1 (ЗУП 3.1) разработчики и программисты часто сталкиваются с необходимостью программного заполнения документов. Одним из реквизитов, который вызывает вопросы, является ИдентификаторСтрокиВидаРасчета. Мы разберем, что это за реквизит, каково его назначение и как корректно его заполнять при создании документов, таких как «Начальная штатная расстановка».

Реквизит ИдентификаторСтрокиВидаРасчета имеет тип «Число» и встречается в различных табличных частях документов, например, в табличной части Показатели документа НачальнаяШтатнаяРасстановка. Его правильное заполнение критически важно для корректной работы системы расчета зарплаты.

Назначение ИдентификатораСтрокиВидаРасчета

Прежде всего, давайте выясним, для чего предназначен ИдентификаторСтрокиВидаРасчета. Мы можем с уверенностью сказать, что этот реквизит служит для связывания табличных частей различных документов в запросах. Это основной механизм, который позволяет системе устанавливать соответствие между строками в одной табличной части и связанными с ними данными в другой.

Рассмотрим подробнее: в документах ЗУП 3.1, особенно тех, которые участвуют в механизме расчета зарплаты, часто присутствуют две взаимосвязанные табличные части:

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

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

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

Принцип работы на конкретном примере

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

Табличная часть «Начисления»

  1. Сотрудник1, Начисление1, Идент = 1
  2. Сотрудник2, Начисление2, Идент = 2

Табличная часть «Показатели»

  1. Сотрудник1, Показатель1 (например, Оклад), Идент = 1
  2. Сотрудник1, Показатель2 (например, ПроцентПремии), Идент = 1
  3. Сотрудник2, Показатель1 (например, Оклад), Идент = 2

В этом примере мы видим, что строка начисления для Сотрудник1 имеет ИдентификаторСтрокиВидаРасчета = 1. С этой же строкой начисления связаны две строки показателей (Оклад и ПроцентПремии) в табличной части Показатели, и обе они также имеют ИдентификаторСтрокиВидаРасчета = 1. Аналогично, для Сотрудник2 начисление и связанный с ним показатель Оклад объединены ИдентификаторомСтрокиВидаРасчета = 2.

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

Как программно заполнить ИдентификаторСтрокиВидаРасчета

Теперь, когда мы понимаем назначение и принцип работы этого реквизита, перейдем к вопросу его программного заполнения. Основной подход заключается в следующем: мы присваиваем уникальный идентификатор каждой строке в табличной части Начисления, а затем используем этот же идентификатор для всех связанных показателей в табличной части Показатели.

Шаг 1: Заполнение табличной части «Начисления»

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

Рассмотрим пример кода:


// Предполагаем, что "Объект" - это объект документа (например, НачальнаяШтатнаяРасстановка)
// и у него есть табличная часть "Начисления".

ИндексСтроки = 0; // Инициализируем счетчик идентификаторов

// ИсходныеДанныеНачислений - это какая-то коллекция или таблица,
// откуда мы берем данные для заполнения ТЧ Начисления.
Для Каждого СтрокаИсходныхДанныхНачисления Из ИсходныеДанныеНачислений Цикл
    // Увеличиваем счетчик для каждой новой строки начисления
    ИндексСтроки = ИндексСтроки + 1;

    // Добавляем новую строку в табличную часть "Начисления" документа
    НоваяСтрокаНачисления = Объект.Начисления.Добавить();

    // Заполняем основные реквизиты начисления
    НоваяСтрокаНачисления.Сотрудник = СтрокаИсходныхДанныхНачисления.Сотрудник;
    НоваяСтрокаНачисления.ВидРасчета = СтрокаИсходныхДанныхНачисления.ВидРасчета;
    // ... заполняем другие необходимые реквизиты, такие как ДатаНачала, ДатаОкончания, Размер, и т.д.

    // *** Ключевой момент: присваиваем уникальный идентификатор строке начисления ***
    НоваяСтрокаНачисления.ИдентификаторСтрокиВидаРасчета = ИндексСтроки;

КонецЦикла;

В этом блоке кода переменная ИндексСтроки выступает в роли уникального идентификатора. Каждой новой строке начисления мы присваиваем свой уникальный, последовательный номер.

Шаг 2: Заполнение табличной части «Показатели»

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

Важный аспект, на который мы хотим обратить ваше внимание, касается того, какие показатели вообще должны попасть в табличную часть документа. В ЗУП 3.1 для видов расчета, которые используют показатели, существуют настройки. В частности, у самого элемента справочника Справочники.ПоказателиРасчетаЗарплаты есть реквизит ОтображатьВДокументахНачисления (или аналогичный). Только те показатели, у которых этот флаг установлен в значение Истина, должны попадать в табличную часть Показатели документов. Эта настройка находится не в табличной части вида расчета (ПланВидовРасчета.Начисления), а непосредственно в самом элементе справочника ПоказателиРасчетаЗарплаты.

Теперь рассмотрим, как это реализовать программно:


// Продолжаем работу с тем же объектом документа.
// Мы уже заполнили Объект.Начисления на Шаге 1.

// Проходим по каждой строке в уже заполненной табличной части "Начисления"
Для Каждого СтрокаНачисленияДокумента Из Объект.Начисления Цикл

    // Для каждой строки начисления мы должны определить, какие показатели
    // к ней относятся. Эти данные могут быть получены из различных источников:
    // - Из заранее подготовленных исходных данных;
    // - Путем анализа настроек самого ВидаРасчета (ПланВидовРасчета.Начисления);
    // - Из других таблиц или регистров.

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

        // Проверяем, нужно ли отображать этот показатель в документе.
        // Доступ к реквизиту Справочники.ПоказателиРасчетаЗарплаты.ОтображатьВДокументахНачисления
        Если ПоказательИсходныеДанные.Показатель.ОтображатьВДокументахНачисления Тогда

            // Добавляем новую строку в табличную часть "Показатели" документа
            НоваяСтрокаПоказателя = Объект.Показатели.Добавить();

            // Заполняем основные реквизиты показателя
            НоваяСтрокаПоказателя.Сотрудник = СтрокаНачисленияДокумента.Сотрудник; // Сотрудник часто дублируется для удобства
            НоваяСтрокаПоказателя.Показатель = ПоказательИсходныеДанные.Показатель;
            НоваяСтрокаПоказателя.Значение = ПоказательИсходныеДанные.Значение;
            // ... заполняем другие специфичные для показателя реквизиты

            // *** Ключевой момент: связываем показатель с начислением по идентификатору ***
            НоваяСтрокаПоказателя.ИдентификаторСтрокиВидаРасчета = СтрокаНачисленияДокумента.ИдентификаторСтрокиВидаРасчета;

        КонецЕсли;
    КонецЦикла;
КонецЦикла;

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

Дополнение к примеру из обсуждения

Вернемся к примеру кода, который был представлен в обсуждении на форуме (сообщение 8):


Если НЕ флНашли Тогда
    стрОбД = обД.Показатели.Добавить;
    стрОбД.Сотрудник = обД.Сотрудники[ кк].Сотрудник;
    стрОбД.Показатель = Справочники.ПоказателиРасчетаЗарплаты.Оклад;
    стрОбД.Значение = Оклад;
    стрОбД.ИдентификаторСтрокиВидаРасчета = ????; // Здесь был вопрос
    флНашли = Истина;
КонецЕсли;

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


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

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

Дополнительные рекомендации и потенциальные сложности

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

  1. Бизнес-логика на форме документа: Мы знаем, что часть бизнес-логики в типовых конфигурациях 1С может быть реализована непосредственно на форме документа, а не в общих серверных модулях. Это означает, что при программном создании документов в фоновом режиме или без открытия формы, нам может потребоваться имитировать работу формы или переносить необходимую логику из клиентских обработчиков в серверные модули для обеспечения корректного заполнения всех связанных данных, включая ИдентификаторСтрокиВидаРасчета.
  2. Анализ существующих связей: Если нам необходимо проанализировать или получить данные о связях между плановыми начислениями и показателями расчета зарплаты на определенную дату, рекомендуем использовать типовой менеджер расчета зарплаты, который реализован в ЗУП. Этот менеджер предоставляет удобные инструменты для работы с данными расчета.
  3. Работа с регистрами расчета: Для глубокого понимания того, как собираются и хранятся данные расчета заработной платы, необходимо изучить принципы работы регистров расчета, таких как Начисления и Удержания. Они являются основой для хранения информации о начислениях и используют План видов расчета с его периодическим характером. Понимание структуры этих регистров и того, как данные из документов (в том числе с использованием ИдентификаторСтрокиВидаРасчета) попадают в них, будет критически важным для разработки собственных механизмов.
  4. Использование типовых процедур: Всегда предпочтительно по возможности использовать типовые процедуры и функции, которые уже существуют в конфигурации для заполнения и расчета документов. Это снижает вероятность ошибок и упрощает поддержку решения в будущем. Если же типовой функциональности недостаточно, то описанный выше подход к заполнению ИдентификаторСтрокиВидаРасчета является правильным направлением.

Заключение

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

Для успешной работы с этим реквизитом мы рекомендуем придерживаться следующего алгоритма:

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

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

← На главную