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