Как перепровести ведомость в банк в 1С:ЗУП 3.1, если она заблокирована из-за передачи для выплаты?

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

При работе в программе 1С:Зарплата и управление персоналом 3.1 бухгалтеры и расчетчики часто сталкиваются с необходимостью скорректировать или перепровести прошлые платежные документы. Однако при попытке провести документ ВедомостьНаВыплатуВБанк система нередко выдает ошибку: "Документ Ведомость в банк недоступен для редактирования, т.к. он был ранее передан для выплаты". При этом ручное снятие флага «Передан для выплаты» через меню «Еще» для десятков или сотен документов превращается в рутину.

В этой статье мы подробно разберем внутреннее устройство механизма блокировки ведомостей, проанализируем различные способы массового обхода этого ограничения (как программные, так и интерактивные) и выясним, почему популярные быстрые решения могут безвозвратно испортить учет НДФЛ и взаиморасчетов.

Разберем внутреннее устройство: где хранится признак блокировки?

Прежде чем приступать к активным действиям, выясним причину блокировки. Многие разработчики и администраторы ошибочно полагают, что в самом документе ВедомостьНаВыплатуВБанк (или аналогичных ведомостях в кассу и на счета) существует реквизит вроде ВыплатаЗарплатыВыполнена или ПереданДляВыплаты, который достаточно сбросить в значение Ложь.

На самом деле в структуре метаданных этих документов такого реквизита нет. Механизм защиты реализован иначе:

  1. Когда пользователь нажимает кнопку «Передан для выплаты» (или система делает это автоматически при выгрузке файла в банк), запись о блокировке фиксируется в специальном регистре.
  2. Этот регистр называется «Ограниченные документы» (РегистрСведений.ОграниченныеДокументы).
  3. При попытке изменения или проведения ведомости подписка на события проверяет наличие ссылки на документ в этом регистре. Если запись найдена — транзакция проведения блокируется платформой на уровне бизнес-логики конфигурации.

Зная этот нюанс, мы можем эффективно управлять блокировкой ведомостей.

Способ 1. Временное отключение контроля в настройках (без программирования)

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

Выполним следующие шаги:

  1. Перейдем в раздел «Настройка» и выберем пункт «Расчет зарплаты».
  2. В открывшемся окне найдем флаг «Автоматически защищать платежные документы от редактирования после выгрузки из системы».
  3. Снимем этот флажок. После этого блокировка со всех ведомостей будет временно снята.
  4. Теперь мы можем спокойно выполнить массовое перепроведение документов (например, стандартной обработкой «Групповое изменение реквизитов» или вручную).
  5. После завершения корректировок обязательно вернем флажок на место, чтобы пользователи случайно не изменили уже оплаченные ведомости в будущем.

Способ 2. Программное управление блокировками через удаление записей регистра

Если вам необходимо решить задачу точечно, только для определенного списка документов по сложному условию, и вы не хотите отключать общую настройку системы для других пользователей, напишем простую обработку на встроенном языке 1С.

Рассмотрим пример кода, который снимает блокировку с выбранных ведомостей путем очистки записей из регистра сведений ОграниченныеДокументы:


// Шаг 1. Формируем массив ведомостей, которые нужно перепровести
МассивВедомостей = Новый Массив;
// Здесь должен быть ваш алгоритм отбора документов, например, запрос к базе данных
// МассивВедомостей.Добавить(СсылкаНаВедомость);

// Шаг 2. Программное снятие блокировки
Для Каждого ТекущаяВедомость Из МассивВедомостей Цикл
    НаборЗаписей = РегистрыСведений.ОграниченныеДокументы.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Документ.Установить(ТекущаяВедомость);
    
    // Очищаем набор записей для конкретного документа
    НаборЗаписей.Записать(); 
КонецЦикла;

// Шаг 3. Перепроводим документы
Для Каждого ТекущаяВедомость Из МассивВедомостей Цикл
    ДокументОбъект = ТекущаяВедомость.ПолучитьОбъект();
    Попытка
        ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        Сообщить("Не удалось провести документ: " + ТекущаяВедомость + " по причине: " + ОписаниеОшибки());
    КонецПопытки;
КонецЦикла;

После проведения ведомостей хорошим тоном будет вернуть блокировку обратно, чтобы восстановить статус документов «Передан для выплаты». Напишем код для восстановления ограничений:


// Шаг 4. Восстановление блокировки в регистре сведений
Для Каждого ТекущаяВедомость Из МассивВедомостей Цикл
    НаборЗаписей = РегистрыСведений.ОграниченныеДокументы.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Документ.Установить(ТекущаяВедомость);
    
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Документ = ТекущаяВедомость;
    
    НаборЗаписей.Записать();
КонецЦикла;

Способ 3. Ручное редактирование регистра «Ограниченные документы»

Если проблемных документов немного (до нескольких десятков), мы можем исключить их из списка блокировки вручную через стандартный интерфейс платформы 1С:

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

Почему метод «ОбменДанными.Загрузка = Истина» крайне опасен?

На многих технических форумах для решения подобных проблем советуют использовать обработку «Групповое изменение реквизитов» с установленным параметром «Обмен данными = Истина» (в коде это соответствует свойству ОбменДанными.Загрузка = Истина).

Проанализируем ситуацию и выясним, почему этот совет вреден в контексте зарплатного учета:

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

Еще одна скрытая причина блокировки: «Подтверждение выплаты доходов»

Если вы применили все способы работы с регистром ОграниченныеДокументы, но ведомость все равно выдает ошибку редактирования, обратите внимание на связанные документы.

В ЗУП 3.1 ведомость блокируется от любых изменений, если на ее основании введен и проведен документ «Подтверждение выплаты доходов» (вкладка «Выплаты» — «Подтверждения выплаты доходов»). Этот документ фиксирует реальное списание денежных средств банком.

В этом случае алгоритм действий должен быть следующим:

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

Соблюдение этой последовательности гарантирует полную сохранность взаиморасчетов и отсутствие расхождений в регистрах учета выплаты доходов сотрудникам.

← На главную