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