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