При сопровождении конфигураций на платформе 1С:Предприятие 8, таких как 1С:Комплексная автоматизация 1.1 или 1С:Управление производственным предприятием, разработчики нередко сталкиваются с ситуацией: при проведении документа выдается предупреждение вроде Не списано по партиям... (налоговый учет), однако при попытке отладить алгоритм конфигуратор не останавливается на точках останова. Сообщение появляется как будто само по себе в момент завершения процедуры проведения.
Разберем детально, почему так происходит, как правильно настроить отладку серверного кода и какими практическими методами можно выявить и исправить ошибку списания партий без риска для рабочей базы данных.
Проанализируем технические особенности архитектуры 1С. В конфигурациях поколения КА 1.1 и УПП модуль УправлениеЗапасамиПартионныйУчет имеет флаг выполнения только на стороне сервера. Если информационная база работает в клиент-серверном варианте, то при обычном запуске службы ragent режим отладки по умолчанию отключен.
В результате клиентское приложение (толстый клиент) отрабатывает код модуля формы и модуля объекта, но как только управление передается в общий серверный модуль, конфигуратор игнорирует любые установленные точки останова. Сообщение выводится на сервере и возвращается клиенту в общий стек сообщений только при завершении транзакции проведения.
Для того чтобы конфигуратор мог перехватывать выполнение серверных процедур и функций в клиент-серверной базе, необходимо запустить службу агента сервера 1С с ключом -debug. Разберем порядок действий:
regedit.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...).ImagePath. В строке вызова исполняемого файла службы допишем параметр -debug через пробел.Агент сервера 1С:Предприятия 8.3 через консоль services.msc. Перезагружать весь физический сервер не требуется — достаточно лишь перезапуска процесса службы.Обратите внимание на риски: постоянная работа рабочего сервера с параметром -debug несет скрытую угрозу. Если программист остановится на точке останова внутри открытой транзакции проведения документа на рабочей базе, все используемые таблицы базы данных окажутся заблокированными. Другие пользователи получат ошибки ожидания блокировок. Кроме того, этот режим открывает потенциальную возможность перехвата сессий, поэтому на высоконагруженных продуктивных базах использовать его на постоянной основе не рекомендуется.
Если вносить правки в реестр боевого сервера запрещено регламентом или политикой безопасности, наиболее простым и безопасным путем будет перенос отладки в локальную среду. Разберем по шагам, как это сделать:
.dt или сделаем резервную копию базы данных средствами СУБД.УправлениеЗапасамиПартионныйУчет (например, в процедуре списания партий или формирования движений). При проведении документа в толстом клиенте точка останова сработает гарантированно.Довольно часто ошибка Не списано по партиям... по налоговому учету возникает даже тогда, когда визуально остаток товара на складе есть. Рассмотрим основные учетные расхождения, которые приводят к отказу списания в регистре накопления Партии товаров на складах (налоговый учет):
Склад — проверка соответствия оптового или розничного склада;Характеристика и Серия номенклатуры (включая проверку на случайные дублирующие элементы справочников);Статус партии — товар может числиться со статусом Принятый на комиссию, в то время как документ пытается списать статус Купленный;Счет учета НУ — счет учета в документе списания должен строго соответствовать счету оприходования партии;Заказ — если в настройках базы включен обособленный партионный учет по заказам покупателей.Проведение по партиям, чтобы восстановить последовательность партионного учета по налоговому учету.Чтобы быстро локализовать расхождение без включения режима отладки, сформируем Универсальный отчет по регистру накопления Партии товаров на складах (налоговый учет) в режиме Остатки. Зададим дату остатков строго равной дате и времени проводимого документа (с точностью до секунды) и выведем в группировки отчета все измерения регистра: склад, номенклатуру, характеристику, серию, статус партии и документ партии. Сравнив полученную строку отчета с реквизитами списываемого документа, можно быстро выявить несовпадающее измерение.