Почему в расчетном листке 1С:ЗУП 3.1 не отображаются выплаты зарплаты из документа «Перенос данных»?

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

Приветствуем вас, уважаемые коллеги! Перенос исторических данных из старых версий программ (например, с платформы 1С:ЗУП 2.5) в новую редакцию 1С:Зарплата и управление персоналом 3.1 — это всегда ответственный и технически сложный процесс. Очень часто после успешного завершения сверки и начала полноценной работы в новой базе бухгалтеры сталкиваются с неожиданными трудностями. Одна из самых распространенных и пугающих проблем — внезапное исчезновение информации о выплатах прошлых периодов из расчетных листков сотрудников, хотя начисления и удержания при этом отображаются корректно.

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

Анализ механизма учета взаиморасчетов в 1С:ЗУП 3.1

Для того чтобы понять природу возникновения данной проблемы, нам необходимо заглянуть «под капот» конфигурации 1С:ЗУП 3.1 и проанализировать, как именно система хранит и выводит информацию о расчетах с персоналом. В отличие от старых версий программ, в современной редакции учет ведется параллельно в нескольких ключевых регистрах накопления:

  1. «Взаиморасчеты с сотрудниками» (техническое имя в конфигураторе — РегистрНакопления.ВзаиморасчетыССотрудниками). Этот регистр отвечает за формирование так называемого «зарплатного» сальдо. Данные здесь привязываются к месяцу, за который была начислена зарплата, вне зависимости от реальной даты выплаты денежных средств.
  2. «Бухгалтерские взаиморасчеты с сотрудниками» (техническое имя — РегистрНакопления.БухгалтерскиеВзаиморасчетыССотрудниками). Данный регистр предназначен для фиксации «бухгалтерского» сальдо. Движения по нему привязываются строго к фактической дате выплаты (дате платежного поручения или расходного кассового ордера).
  3. «Зарплата к выплате» (техническое имя — РегистрНакопления.ЗарплатаКВыплате). Этот регистр используется системой преимущественно для автоматического заполнения платежных ведомостей и контроля сумм, подлежащих перечислению сотрудникам.

Проанализируем ключевой параметр, который управляет поведением отчетов. Перейдем по пути Настройка — Дополнительные настройки. Здесь мы увидим переключатель «Показывать взаиморасчеты». Он имеет два возможных значения:

Почему пропадают выплаты после смены настроек?

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

Соответственно, при выполнении переноса заполняется регистр ВзаиморасчетыССотрудниками, но при этом регистр БухгалтерскиеВзаиморасчетыССотрудниками может остаться абсолютно пустым, либо содержать некорректно заполненные поля. Пока в настройках программы выбран первый вариант, расчетные листки выглядят идеально. Но стоит бухгалтеру (или системному администратору при обновлении/синхронизации баз) изменить настройку на «По данным бухучета» (например, для того, чтобы сальдо в ЗУП сходилось с 70 счетом в 1С:Бухгалтерии), как программа мгновенно перестает видеть выплаты по документу ПереносДанных. При этом начисления выводятся без проблем, так как они берутся из других регистров (таких как НачисленияУдержанияПоСотрудникам).

Способ 1. Ручное исправление через документ «Перенос данных»

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

Рассмотрим пошагово этот процесс:

  1. Перейдем в раздел Администрирование — Перенос данных (или найдем эти документы через меню «Все функции» / «Функции для технического специалиста»).
  2. Откроем документ ПереносДанных за тот период, в котором наблюдается проблема с выплатами. Обычно такие документы имеют буквенные префиксы в номерах (например, ЗП, ВЗ).
  3. В верхней части формы документа нажмем кнопку «Настройка состава регистров».
  4. В открывшемся окне перейдем на вкладку «Регистры накопления». Нам необходимо найти в списке регистр «Бухгалтерские взаиморасчеты с сотрудниками» и установить напротив него флаг активности. Нажмем кнопку «ОК».
  5. После выполнения этого действия в документе появится новая вкладка с соответствующим регистром. Нам необходимо заполнить ее записями, которые будут полностью дублировать движения из вкладки регистра «Взаиморасчеты с сотрудниками». Обратите особое внимание на заполнение реквизитов Период, Период взаиморасчетов, Сотрудник, Организация и Сумма.
  6. Запишем и проведем документ. После этого рекомендуется очистить кэш программы и перезапустить сеанс пользователя, чтобы новые глобальные настройки отчетов применились корректно.

Способ 2. Автоматическое заполнение регистра через обработку (для программистов)

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

Проанализируем структуру программного кода, который решает эту задачу:


Процедура ЗаполнитьБухгалтерскиеВзаиморасчеты() Экспорт
    
    // Выбираем данные из регистра "Взаиморасчеты с сотрудниками", 
    // где регистратором является документ "Перенос данных"
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Взаиморасчеты.Регистратор КАК Регистратор,
        |	Взаиморасчеты.Период КАК Период,
        |	Взаиморасчеты.Организация КАК Организация,
        |	Взаиморасчеты.ФизическоеЛицо КАК ФизическоеЛицо,
        |	Взаиморасчеты.Сотрудник КАК Сотрудник,
        |	Взаиморасчеты.Подразделение КАК Подразделение,
        |	Взаиморасчеты.СтатьяФинансирования КАК СтатьяФинансирования,
        |	Взаиморасчеты.СтатьяРасходов КАК СтатьяРасходов,
        |	Взаиморасчеты.ЗупРегистратор КАК ЗупРегистратор,
        |	Взаиморасчеты.ПериодВзаиморасчетов КАК ПериодВзаиморасчетов,
        |	Взаиморасчеты.ВидВзаиморасчетов КАК ВидВзаиморасчетов,
        |	Взаиморасчеты.Сумма КАК Сумма,
        |	Взаиморасчеты.ГруппаНачисленияУдержанияВыплаты КАК ГруппаНачисленияУдержанияВыплаты
        |ИЗ
        |	РегистрНакопления.ВзаиморасчетыССотрудниками КАК Взаиморасчеты
        |ГДЕ
        |	Взаиморасчеты.Регистратор ССЫЛКА Документ.ПереносДанных
        |УПОРЯДОЧИТЬ ПО
        |	Регистратор";
        
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    ТекущийРегистратор = Неопределено;
    НаборБухВзаиморасчетов = Неопределено;
    
    Пока Выборка.Следующий() Цикл
        
        // Организуем группировку записей по регистраторам для транзакционной записи
        Если ТекущийРегистратор <> Выборка.Регистратор Тогда
            
            Если НаборБухВзаиморасчетов <> Неопределено Тогда
                Попытка
                    НаборБухВзаиморасчетов.Записать();
                Исключение
                    ЗаписьЖурналаРегистрации("ПереносДанных.ОшибкаЗаписи", 
                        УровеньЖурналаРегистрации.Ошибка, , , 
                        ОписаниеОшибки());
                КонецПопытки;
            КонецЕсли;
            
            ТекущийРегистратор = Выборка.Регистратор;
            
            // Создаем набор записей для целевого регистра
            НаборБухВзаиморасчетов = РегистрыНакопления.БухгалтерскиеВзаиморасчетыССотрудниками.СоздатьНаборЗаписей();
            НаборБухВзаиморасчетов.Отбор.Регистратор.Установить(ТекущийРегистратор);
            НаборБухВзаиморасчетов.Прочитать();
            
            // Очищаем старые движения в целевом регистре, если они существовали
            НаборБухВзаиморасчетов.Очистить();
            
        КонецЕсли;
        
        // Добавляем новую строку движения
        НоваяСтрока = НаборБухВзаиморасчетов.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
        НоваяСтрока.Регистратор = ТекущийРегистратор;
        
        // В бухгалтерском регистре поле "Период" должно соответствовать дате выплаты.
        // Если дата выплаты не определена, заполняем ее началом месяца периода взаиморасчетов
        Если Не ЗначениеЗаполнено(НоваяСтрока.Период) Тогда
            НоваяСтрока.Период = НачалоМесяца(Выборка.ПериодВзаиморасчетов);
        КонецЕсли;
        
    КонецЦикла;
    
    // Записываем последний обработанный набор записей
    Если НаборБухВзаиморасчетов <> Неопределено Тогда
        НаборБухВзаиморасчетов.Записать();
    КонецЕсли;
    
    Сообщить("Обработка успешно завершена! Данные регистра бухгалтерских взаиморасчетов синхронизированы.");
    
КонецПроцедуры

Использование данной обработки позволяет полностью автоматизировать рутинный процесс. Обратите внимание, что перед выполнением любых обработок, совершающих групповое изменение данных напрямую в регистрах информационной базы, в обязательном порядке необходимо создать резервную копию базы данных (файловый вариант — скопировать файл 1Cv8.1CD, клиент-серверный — выполнить бэкап средствами СУБД).

Важные нюансы при заполнении регистров

Рассмотрим несколько специфических моментов, о которых часто забывают даже опытные специалисты при переносе или ручной корректировке данных:

Резюме и рекомендации

Подводя итоги нашего разбора, сформируем краткий чек-лист действий, который поможет оперативно решить проблему пропавших выплат и не допустить ее повторения в будущем:

  1. При обнаружении пустых полей выплат проверьте текущие настройки системы в разделе Настройка — Дополнительные настройки — Показывать взаиморасчеты.
  2. Если там установлен вариант «По данным бухучета», временно верните переключатель в положение «По месяцам расчета зарплаты». Если выплаты появились — вы гарантированно столкнулись с проблемой недозаполнения регистра бухгалтерских взаиморасчетов в документах переноса данных.
  3. Примите решение о способе исправления: ручное заполнение подходит для единичных исправлений, программное (с использованием написанной обработки) — для массового восстановления данных.
  4. Всегда тестируйте изменения на копии информационной базы перед их применением в рабочей среде.

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

← На главную