Как исправить модуль проведения документа Начальная штатная расстановка для разделения организаций при переносе из ЗиК 7.7

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

При переносе данных из устаревших систем, таких как «1С:Зарплата и Кадры 7.7» (ЗиК), в современные конфигурации «1С:Зарплата и кадры государственного учреждения 3.1» (ЗКГУ) или «1С:Зарплата и управление персоналом 3.1» (ЗУП), специалисты часто сталкиваются с архитектурными различиями. Типичная ситуация: в 7.7 учет велся по нескольким организациям в одной базе (через обособленные подразделения), а в 3.1 их необходимо разделить на независимые юридические лица.

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

Анализ проблемы и постановка задачи

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

Важный нюанс: простое исправление записей в регистрах с помощью обработок типа «Групповое изменение реквизитов» поможет лишь до первого перепроведения документа. Чтобы решение было стабильным, необходимо внести изменения в логику формирования данных для проведения.

Модификация модуля объекта документа

Для реализации этой логики нам потребуется изменить функцию ДанныеДляПроведения в модуле объекта документа НачальнаяШтатнаяРасстановка. Основная цель — заменить в запросах получение поля Сотрудник.ГоловнаяОрганизация на Ссылка.Организация.

Разберем основные блоки изменений по шагам. Рассмотрим первый запрос, формирующий временную таблицу ВТСотрудники:


// В функции ДанныеДляПроведения меняем текст запроса
Запрос.Текст = "ВЫБРАТЬ 
| НачальнаяШтатнаяРасстановкаСотрудники.Ссылка.Месяц КАК ДатаСобытия, 
| ДАТАВРЕМЯ(1, 1, 1) КАК ДействуетДо, 
| НачальнаяШтатнаяРасстановкаСотрудники.Сотрудник КАК Сотрудник, 
// Было: НачальнаяШтатнаяРасстановкаСотрудники.Сотрудник.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
// Стало:
| НачальнаяШтатнаяРасстановкаСотрудники.Ссылка.Организация КАК ГоловнаяОрганизация, 
| НачальнаяШтатнаяРасстановкаСотрудники.ДолжностьПоШтатномуРасписанию КАК Позиция, 
// ... остальные поля запроса ...
|ПОМЕСТИТЬ ВТСотрудники 
|ИЗ 
| Документ.НачальнаяШтатнаяРасстановка.Сотрудники КАК НачальнаяШтатнаяРасстановкаСотрудники 
|ГДЕ 
| НачальнаяШтатнаяРасстановкаСотрудники.Ссылка = &Ссылка";

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

Корректировка блока плановых начислений и льгот

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


// В части запроса по начислениям и льготам производим аналогичную подмену
Запрос.Текст = "ВЫБРАТЬ 
// ... поля выбора дат ...
| НачисленияДокумента.Сотрудник КАК Сотрудник, 
| НачисленияДокумента.Начисление КАК Начисление, 
| ИСТИНА КАК Используется, 
| НачисленияДокумента.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, 
// Заменяем источник организации:
// Было: НачисленияДокумента.Сотрудник.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
| НачисленияДокумента.Ссылка.Организация КАК ГоловнаяОрганизация, 
| НачисленияДокумента.Размер КАК Размер 
|ИЗ 
| ВТНачисленияДокумента КАК НачисленияДокумента 
// ... условия соединения ...
|ОБЪЕДИНИТЬ ВСЕ 
|ВЫБРАТЬ 
| ЛьготыДокумента.Ссылка.Месяц, 
| ДАТАВРЕМЯ(1, 1, 1), 
| ЛьготыДокумента.Сотрудник, 
| ЛьготыДокумента.Льгота, 
| ИСТИНА, 
| ИСТИНА, 
| ЛьготыДокумента.Сотрудник.ФизическоеЛицо, 
// Аналогично для льгот:
| ЛьготыДокумента.Ссылка.Организация, 
| ЛьготыДокумента.Размер 
|ИЗ 
| ВТЛьготыДокумента КАК ЛьготыДокумента";

После внесения этих правок документ при проведении будет игнорировать старую привязку сотрудника к «общей» организации из 7.7 и запишет данные согласно текущей настройке документа.

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

Несмотря на успешное изменение кода проведения, мы должны учитывать, что архитектура 1С:ЗУП/ЗКГУ 3.1 требует синхронности данных в регистрах и справочниках. Если вы изменили организацию только в движениях документа, могут возникнуть следующие проблемы:

  1. Отчетность по НДФЛ и взносам: Некоторые отчеты (например, 6-НДФЛ) могут брать данные о регистрации в ИФНС, исходя из карточки сотрудника, а не только из регистра кадровой истории.
  2. Подбор сотрудников: В новых документах (отпусках, больничных) при выборе организации программа может не показать сотрудников, если в их основной карточке (справочник Сотрудники) все еще указана старая организация.
  3. Штатное расписание: Если в базе ведется история штатного расписания, позиции ШР должны соответствовать организации. Проверьте, что Подразделения и Позиции уже переподчинены новой организации, иначе документ выдаст ошибку несоответствия при проведении.

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

Использование расширений предпочтительнее, так как при обновлении конфигурации 1С изменения в основном модуле могут быть затерты. В расширении можно использовать метод &Вместо("ДанныеДляПроведения") или, что более изящно, перехватить результат функции через &После и программно заменить значения в колонках полученных таблиц значений, не переписывая весь тяжелый запрос целиком.

← На главную