Почему не срабатывает отладка при проведении документа и как найти причину ошибки «Не списано по партиям»?

Программист 1С v8.3 (Обычные формы) 1С:Комплексная автоматизация Налоговый учет IT и автоматизация бизнеса
← На главную

При сопровождении конфигураций на платформе 1С:Предприятие 8, таких как 1С:Комплексная автоматизация 1.1 или 1С:Управление производственным предприятием, разработчики нередко сталкиваются с ситуацией: при проведении документа выдается предупреждение вроде Не списано по партиям... (налоговый учет), однако при попытке отладить алгоритм конфигуратор не останавливается на точках останова. Сообщение появляется как будто само по себе в момент завершения процедуры проведения.

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

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

Проанализируем технические особенности архитектуры 1С. В конфигурациях поколения КА 1.1 и УПП модуль УправлениеЗапасамиПартионныйУчет имеет флаг выполнения только на стороне сервера. Если информационная база работает в клиент-серверном варианте, то при обычном запуске службы ragent режим отладки по умолчанию отключен.

В результате клиентское приложение (толстый клиент) отрабатывает код модуля формы и модуля объекта, но как только управление передается в общий серверный модуль, конфигуратор игнорирует любые установленные точки останова. Сообщение выводится на сервере и возвращается клиенту в общий стек сообщений только при завершении транзакции проведения.

Способ 1. Включение отладки на рабочем сервере 1С:Предприятия

Для того чтобы конфигуратор мог перехватывать выполнение серверных процедур и функций в клиент-серверной базе, необходимо запустить службу агента сервера 1С с ключом -debug. Разберем порядок действий:

  1. Откроем реестр операционной системы Windows на сервере приложений с помощью утилиты regedit.
  2. Перейдем к ветке реестра, где зарегистрирована служба агента сервера (обычно это ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...).
  3. Найдем строковый параметр ImagePath. В строке вызова исполняемого файла службы допишем параметр -debug через пробел.
  4. Перезапустим службу Агент сервера 1С:Предприятия 8.3 через консоль services.msc. Перезагружать весь физический сервер не требуется — достаточно лишь перезапуска процесса службы.

Обратите внимание на риски: постоянная работа рабочего сервера с параметром -debug несет скрытую угрозу. Если программист остановится на точке останова внутри открытой транзакции проведения документа на рабочей базе, все используемые таблицы базы данных окажутся заблокированными. Другие пользователи получат ошибки ожидания блокировок. Кроме того, этот режим открывает потенциальную возможность перехвата сессий, поэтому на высоконагруженных продуктивных базах использовать его на постоянной основе не рекомендуется.

Способ 2. Локальная отладка на файловой копии информационной базы

Если вносить правки в реестр боевого сервера запрещено регламентом или политикой безопасности, наиболее простым и безопасным путем будет перенос отладки в локальную среду. Разберем по шагам, как это сделать:

  1. Создадим выгрузку информационной базы в файл с расширением .dt или сделаем резервную копию базы данных средствами СУБД.
  2. Развернем полученную выгрузку в виде локальной файловой базы на рабочем компьютере разработчика.
  3. Откроем конфигуратор созданной файловой базы. В файловом варианте работы архитектура платформы выполняет весь серверный код внутри локального клиентского процесса.
  4. Установим точку останова в общем модуле УправлениеЗапасамиПартионныйУчет (например, в процедуре списания партий или формирования движений). При проведении документа в толстом клиенте точка останова сработает гарантированно.

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

Довольно часто ошибка Не списано по партиям... по налоговому учету возникает даже тогда, когда визуально остаток товара на складе есть. Рассмотрим основные учетные расхождения, которые приводят к отказу списания в регистре накопления Партии товаров на складах (налоговый учет):

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

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

← На главную