Почему не добавляются услуги в заказ клиента в 1С:КА 2.4 / ERP 2.4 и как это исправить?

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

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

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

Выясняем причину: почему ломается стандартный механизм подбора

Для глубокого понимания проблемы необходимо заглянуть во внутреннюю архитектуру справочников 1С. В конфигурациях ERP-класса справочник Номенклатура тесно связан со справочником Виды номенклатуры, который выступает в роли шаблона настроек. Однако для оптимизации производительности запросов и динамических списков разработчики фирмы «1С» применили денормализацию базы данных — кэширование реквизитов.

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

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

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

---

Решение 1: Использование стандартной обработки «Групповое изменение реквизитов»

Если данные уже загружены в информационную базу и проблема носит массовый характер, наиболее простым интерактивным способом исправления является встроенная обработка группового изменения. Рассмотрим этот процесс по шагам:

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

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

---

Решение 2: Программная перезапись объектов (групповой программный метод)

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

Рассмотрим пример кода, который решает эту проблему путем «мягкой» перезаписи объектов справочника:


Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    // Пропускаем группы справочника, работаем только с элементами
    Если Выборка.ЭтоГруппа Тогда
        Продолжить;
    КонецЕсли;
    
    // Фильтруем элементы, у которых сбит тип номенклатуры
    Если Не ЗначениеЗаполнено(Выборка.ТипНоменклатуры) Тогда
        Попытка
            ОбъектНоменклатуры = Выборка.ПолучитьОбъект();
            // Стандартные механизмы платформы при записи сами заполнят
            // реквизиты ТипНоменклатуры и ВариантОформленияПродажи из Вида номенклатуры
            ОбъектНоменклатуры.Записать();
            ЗаписьЖурналаРегистрации("ИсправлениеНоменклатуры", УровеньЖурналаРегистрации.Информация, , , 
                "Успешно обновлен элемент: " + Выборка.Наименование);
        Исключение
            ЗаписьЖурналаРегистрации("ИсправлениеНоменклатуры", УровеньЖурналаРегистрации.Ошибка, , , 
                "Ошибка записи элемента: " + Выборка.Наименование + ". Описание: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Этот способ хорош тем, что вам не нужно вручную сопоставлять характеристики и варианты оформления продаж — бизнес-логика конфигурации сделает это за вас при вызове метода Записать().

---

Решение 3: Профилактика при импорте данных

Если вы только проектируете интеграцию или настраиваете правила переноса данных из сторонних систем (например, из 1С:УНФ или старой версии УТ 10.3), обязательно заложите в правила явное заполнение проблемных реквизитов.

В правилах конвертации объектов (ПКО) или в коде обработки загрузки необходимо жестко инициализировать следующие соответствия:

Пример заполнения структуры свойств непосредственно перед созданием нового элемента в коде загрузки:


НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
// Заполнение базовых реквизитов
НоваяНоменклатура.Наименование = "Услуга по доставке";
НоваяНоменклатура.ВидНоменклатуры = СсылкаНаВидУслуг;

// Явное заполнение кэшируемых реквизитов для исключения ошибок подбора
НоваяНоменклатура.ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Услуга");
НоваяНоменклатура.ВариантОформленияПродажи = ПредопределенноеЗначение("Перечисление.ВариантыОформленияПродажи.РеализацияТоваровУслуг");
НоваяНоменклатура.ИспользованиеХарактеристак = ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать");

НоваяНоменклатура.Записать();

---

Важные нюансы работы с услугами в заказах клиентов

После того как вы исправите реквизиты номенклатуры и услуги начнут успешно добавляться в документы, рекомендуем обратить внимание на еще две неочевидные особенности работы с ними в 1С:КА 2.4 / ERP 2.4:

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

Используя предложенные методы диагностики и исправления данных, вы сможете быстро локализовать проблему «тихого отказа» при подборе номенклатуры, восстановить корректную работу пользователей с заказами клиентов и не допускать подобных ошибок при последующих интеграциях.

← На главную