Как решить проблему с отсутствием номеров ГТД в возвратах от комиссионера в 1С:Управление торговлей 11.4?

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

В процессе работы с комиссионной торговлей в программе 1С:Управление торговлей (редакция 11.4) (также может потребоваться выравнивание остатков после обновления УТ 11.4 на 11.5) пользователи часто сталкиваются с неприятной ситуацией: при оформлении возврата товара от комиссионера или при отражении возврата от конечного покупателя в Отчете комиссионера номера ГТД не заполняются автоматически. Даже ручная корректировка видов запасов в документе зачастую не спасает ситуацию — при проведении или перезаписи номера ГТД могут «обнуляться», что ведет к возникновению отрицательных остатков по номерам ГТД в регистрах. — есть готовая анализ и устранение отрицательных остатков в регистрах. Разберем детально причины этой проблемы и пути ее решения.

Анализируем причины возникновения проблемы

Прежде всего, проанализируем, почему типовой функционал дает сбой. В системе 1С:УТ 11.4 учет импортного товара ведется в разрезе номеров ГТД, которые хранятся в ключе аналитики ВидыЗапасов. Когда мы передаем товар комиссионеру, фиксируется конкретный номер ГТД. Однако при возврате система должна «понять», какой именно из ранее переданных товаров вернулся.

Проблема часто кроется в следующих моментах:

  1. Разрыв цепочки в Отчете комиссионера: Если комиссионер в одном отчете отражает продажу одного товара и возврат другого (ранее проданного), система может некорректно сопоставить партии. Особенно это заметно, когда возврат идет по товару, за который уже был предоставлен отчет в прошлых периодах.
  2. Особенности партионного учета: Если используется «Партионный учет 2.2», алгоритм списания и возврата ГТД опирается на остатки в регистре ТоварыПереданныеНаКомиссию, по которым часто возникают расхождения товаров на складах и товаров организаций. — здесь поможет контроль ошибок через сравнение регистров товаров организаций и складов. Если по какой-то причине (например, из-за ручных правок или пересортицы) остаток по конкретному ГТД не найден, поле остается пустым.
  3. Ошибки в Видах запасов: При записи документа 1С выполняет автоматический подбор видов запасов. — для решения проблемы подойдёт исправление типовых ошибок учета и видов запасов в УТ. Если настройки программы или текущие остатки не позволяют однозначно определить ГТД, система предпочитает оставить поле пустым, чтобы не нарушить общую логику ФИФО.

Выясним, как ведут себя регистры. Основным регистром, где фиксируется движение ГТД при комиссионной торговле, является ТоварыПереданныеНаКомиссию. Именно в нем мы видим «дырки» в колонке НомерГТД при возвратах.

Решение проблемы с помощью расширения конфигурации

Поскольку типовыми средствами (перезаполнением видов запасов) проблема решается не всегда, рассмотрим вариант программного исправления ситуации. Мы можем создать расширение, которое будет принудительно искать подходящий номер ГТД в истории движений и подставлять его в регистр при проведении документа ОтчетКомиссионера.

Для начала нам необходимо добавить в табличную часть Товары документа ОтчетКомиссионера реквизит _НомерГТД (тип СправочникСсылка.НомераГТД), чтобы пользователь мог видеть и, при необходимости, контролировать подбор. Рассмотрим процедуру, которая будет выводить это поле на форму:


&НаСервере
Процедура кгтд_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Добавляем колонку для визуального контроля номера ГТД на форме
    Элемент = Элементы.Добавить("_НомерГТД", Тип("ПолеФормы"), Элементы.Товары);
    Элемент.Вид = ВидПоляФормы.ПолеВвода;
    Элемент.ПутьКДанным = "Объект.Товары._НомерГТД";
КонецПроцедуры

Теперь перейдем к самому важному — обработке проведения. Нам нужно перехватить момент после того, как документ сформировал движения, проанализировать записи регистра ТоварыПереданныеНаКомиссию и, если там обнаружены строки с пустым ГТД при возврате (отрицательное количество или расход с видом «возврат»), заполнить их.

Проанализируем пример кода для расширения:


&После("ОбработкаПроведения")
Процедура кгтд_ОбработкаПроведения(Отказ, РежимПроведения)
    
    // Получаем текущие движения документа по нужному регистру
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
    |	ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
    |	ТоварыПереданныеНаКомиссию.Количество КАК Количество,
    |	ТоварыПереданныеНаКомиссию.Период КАК Период
    |ИЗ
    |	РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
    |ГДЕ
    |	ТоварыПереданныеНаКомиссию.Регистратор = &Ссылка
    |	И ТоварыПереданныеНаКомиссию.НомерГТД = ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
    НЗ = РегистрыНакопления.ТоварыПереданныеНаКомиссию.СоздатьНаборЗаписей();
    НЗ.Отбор.Регистратор.Установить(Ссылка);
    НЗ.Прочитать();
    
    НужноЗаписать = Ложь;
    
    Пока Выборка.Следующий() Цикл
        // Ищем последний подходящий номер ГТД для этой номенклатуры по этому соглашению/организации
        ЗапросГТД = Новый Запрос(
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |	Т.НомерГТД КАК НомерГТД
        |ИЗ
        |	РегистрНакопления.ТоварыПереданныеНаКомиссию КАК Т
        |ГДЕ
        |	Т.АналитикаУчетаНоменклатуры = &Аналитика
        |	И Т.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
        |УПОРЯДОЧИТЬ ПО
        |	Т.Период УБЫВ");
        
        ЗапросГТД.УстановитьПараметр("Аналитика", Выборка.АналитикаУчетаНоменклатуры);
        ВыборкаГТД = ЗапросГТД.Выполнить().Выбрать();
        
        Если ВыборкаГТД.Следующий() Тогда
            // Заполняем номер ГТД в наборе записей
            ЗаписьРегистра = НЗ[Выборка.НомерСтроки - 1];
            ЗаписьРегистра.НомерГТД = ВыборкаГТД.НомерГТД;
            НужноЗаписать = Истина;
            Сообщить("Для строки " + Выборка.НомерСтроки + " подобран ГТД: " + ВыборкаГТД.НомерГТД);
        КонецЕсли;
    КонецЦикла;
    
    Если НужноЗаписать Тогда
        НЗ.Записать();
    КонецЕсли;
    
КонецПроцедуры

Рассмотрим, что делает этот код. Он находит все строки движений текущего документа, где НомерГТД остался пустым. Затем для каждой такой строки выполняется поиск в истории того же регистра ТоварыПереданныеНаКомиссию. Мы ищем последнюю запись по данной АналитикеУчетаНоменклатуры, где ГТД был заполнен. Найденное значение подставляется в набор записей документа и сохраняется. Это гарантирует, что при возврате товар «встанет» на тот же номер ГТД, который фигурировал в последних операциях.

Альтернативные методы решения без программирования

Если вы не планируете вносить изменения в код программы, проанализируем другие способы исправления ситуации:

  1. Использование документа «Корректировка видов запасов»: Если после проведения Отчета комиссионера вы видите пустые ГТД, можно воспользоваться специализированным инструментом. Перейдите в раздел Финансовый результат и контроллинг -> Обслуживание -> Исправление данных. Документ Корректировка видов запасов позволяет вручную указать правильный номер ГТД для конкретной партии товара, зафиксированной документом.
  2. Проверка цепочки документов Интеркампани: В схемах, где товар передается между собственными организациями перед отправкой комиссионеру, ГТД может теряться, если не оформлены документы Передача товаров между организациями. — для этого есть выявление расхождений остатков на складах и организаций. Убедитесь, что все «цепочки» закрыты актуальными документами на дату отчета комиссионера.
  3. Разделение продаж и возвратов: Иногда алгоритмы 1С некорректно отрабатывают «свернутые» строки. Попробуйте разнести продажи и возвраты в Отчете комиссионера на разные документы или хотя бы убедиться, что они не схлопываются в одну строку с нулевым итогом по количеству.
  4. Помощник исправления остатков: В последних релизах УТ 11.4 доступен Помощник исправления остатков товаров. Он анализирует расхождения между регистром товаров на складах и регистром ГТД. — для этого подойдёт автоматическое исправление сальдо по видам запасов и номерам ГТД. Запуск этого помощника может помочь системе «увидеть» свободные номера ГТД и распределить их.

Важный момент: всегда проверяйте настройки учетной политики. Если включена опция Запретить операции с товарами без номеров ГТД, система будет вести себя более строго, и любые ошибки в подборе партий будут приводить к отказу в проведении документа. В ряде случаев временное отключение этой проверки позволяет провести документ и затем скорректировать ГТД вручную через Виды запасов.

Подводя итог, отметим, что проблема с ГТД в возвратах комиссионера часто является следствием сложности механизмов автоматического подбора видов запасов в 1С. Использование небольшого расширения для коррекции движений регистра — наиболее эффективный способ автоматизации процесса, если ручные корректировки занимают слишком много времени.

← На главную