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