Почему в документе "Поступление комиссионных товаров" не заполняется хозяйственная операция и как это исправить?

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

В конфигурации "1С:Розница для Казахстана" пользователи иногда сталкиваются с ситуацией, когда в документах, связанных с комиссионной торговлей, поле "Хозяйственная операция" остается пустым. Попытка исправить это программно, особенно без глубокого понимания механизма работы конфигурации, часто приводит к ошибкам. Рассмотрим типичный случай: разработчик пытается дописать код для обработки поступления комиссионных товаров и получает ошибку {Справочник.АналитикаХозяйственныхОпераций.МодульОбъекта(...)}: Поле объекта не обнаружено. Разберемся, в чем причина проблемы и как ее правильно решить.

Анализ ситуации: откуда берется ошибка

Основная проблема заключается в том, что при поступлении комиссионных товаров не определяется соответствующая хозяйственная операция. Начинающий разработчик, обнаружив это, решает модифицировать код, который, по его мнению, отвечает за сопоставление аналитики и хозяйственной операции. Часто таким местом оказывается модуль объекта справочника АналитикаХозяйственныхОпераций.

Посмотрим на код функции, которую пользователь пытался исправить:


Функция ПолучитьПравильнуюХозяйственнуюОперацию(ИмяПредопределенногоЭлемента = "") Экспорт
    Если Ссылка = Справочники.АналитикаХозяйственныхОпераций.КомплектацияНоменклатуры Тогда
        ИмяПредопределенногоЭлемента = НСтр("ru = 'Комплектация номенклатуры'");
        Возврат Перечисления.ХозяйственныеОперации.КомплектацияНоменклатуры;
    ИначеЕсли Ссылка = Справочники.АналитикаХозяйственныхОпераций.ПеремещениеТоваров Тогда
        ИмяПредопределенногоЭлемента = НСтр("ru = 'Перемещение товаров'");
        Возврат Перечисления.ХозяйственныеОперации.ПеремещениеТоваров;
    // ... другие условия ...
    ИначеЕсли Ссылка = Справочники.АналитикаХозяйственныхОпераций.ОприходованиеКомиссионныхТоваров Тогда
        ИмяПредопределенногоЭлемента = НСтр("ru = 'Оприходование комиссионного товара'");
        Возврат Перечисления.ХозяйственныеОперации.ОприходованиеКомиссионныхТоваров;
    Иначе
        Возврат Перечисления.ХозяйственныеОперации.ПустаяСсылка;
    КонецЕсли;
КонецФункции

Пользователь заметил, что в этой функции есть обработка оприходования, но нет обработки поступления (приема) комиссионных товаров. Его логичным шагом было добавить недостающий блок кода:


ИначеЕсли Ссылка = Справочники.АналитикаХозяйственныхОпераций.ПриемНаКомиссию Тогда
    ИмяПредопределенногоЭлемента = НСтр("ru = 'Прием на комиссию'");
    Возврат Перечисления.ХозяйственныеОперации.ПриемНаКомиссию;

После этого и возникла ошибка "Поле объекта не обнаружено (ПриемНаКомиссию)". Давайте разберем, почему.

Причина ошибки кроется в обращении к несуществующему предопределенному элементу. Конструкция Справочники.АналитикаХозяйственныхОпераций.ПриемНаКомиссию пытается обратиться к предопределенному элементу справочника АналитикаХозяйственныхОпераций с именем "ПриемНаКомиссию". Такого элемента в стандартной конфигурации "Розница для Казахстана", скорее всего, нет. Имена предопределенных элементов жестко задаются в конфигураторе, и нельзя просто придумать имя и ожидать, что система его найдет.

Правильная логика работы с комиссионными товарами в 1С

Проблема не в том, что в функции не хватает строчки кода. Проблема в подходе. В типовых конфигурациях 1С логика комиссионной торговли чаще всего завязана не на отдельный элемент аналитики, а на вид операции самого документа.

Рассмотрим по шагам, как правильно отражать прием товаров на комиссию и где искать логику заполнения полей.

  1. Включите функциональность комиссионной торговли.

    Убедитесь, что в настройках программы (обычно раздел "Администрирование" или "НСИ и администрирование" → "Настройки номенклатуры" / "Закупки") включена опция, отвечающая за комиссионную торговлю.

  2. Используйте правильный документ и вид операции.

    Прием товаров на комиссию оформляется стандартным документом Поступление товаров. Ключевым моментом является выбор в нем вида операции "Прием на комиссию". Именно этот выбор переключает всю логику проведения документа на комиссионную схему.

  3. Проверьте договор с контрагентом.

    Для корректной работы необходимо, чтобы с контрагентом-комитентом был заключен договор, у которого установлен вид "С комитентом".

Где искать код, который заполняет хозяйственную операцию

Пустое значение в поле, с которого началось обсуждение, скорее всего, возникает из-за того, что при создании документа не отрабатывает логика его начального заполнения. Как правильно подсказали на форуме, такое поведение обычно определяется в серверной процедуре формы документа.

Что нужно сделать:

  1. Откройте в конфигураторе форму документа ПоступлениеТоваров.

  2. Перейдите в модуль формы и найдите процедуру-обработчик события ПриСозданииНаСервере.

  3. Изучите код в этой процедуре. Скорее всего, вы найдете там логику, которая анализирует параметры, с которыми создается документ (например, вид операции), и на основании этого заполняет реквизиты, включая "Хозяйственная операция".

Логика в процедуре ПриСозданииНаСервере должна выглядеть примерно так:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // ... прочий код ...

    Если Объект.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваров.ПриемНаКомиссию Тогда
        Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаКомиссию;
        // или ищется соответствующая аналитика и подставляется
        Объект.АналитикаХозяйственнойОперации = Справочники.АналитикаХозяйственныхОпераций.НайтиПоНаименованию("Прием на комиссию от комитента"); // Имя может быть другим!
    КонецЕсли;

    // ... прочий код ...

КонецПроцедуры

Важный момент: если вы все-таки хотите исправить функцию ПолучитьПравильнуюХозяйственнуюОперацию, вам сначала нужно найти в конфигураторе реальное имя предопределенного элемента, отвечающего за поступление комиссионных товаров (если он вообще существует), а не придумывать его самостоятельно.

Итоги и рекомендации

Подведем итог, как избежать подобных ошибок в будущем:

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

← На главную