При переносе данных из устаревших систем, таких как «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С изменения в основном модуле могут быть затерты. В расширении можно использовать метод &Вместо("ДанныеДляПроведения") или, что более изящно, перехватить результат функции через &После и программно заменить значения в колонках полученных таблиц значений, не переписывая весь тяжелый запрос целиком.