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