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