Почему программно созданный заказ поставщику в 1С:ERP не виден в списке и открывается с пустой формой?

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

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

  1. В форме списка или журнале документов созданный заказ отсутствует (даже под учетной записью с полными правами и без установленных интерактивных отборов).
  2. Если открыть документ по прямой ссылке, то вместо привычного интерфейса открывается абсолютно пустая, «голая» управляемая форма без каких-либо полей, реквизитов или табличных частей.
  3. При этом документ физически существует в базе данных, его можно найти через консоль запросов, программно отменить проведение или снова провести.

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

В чем причина: механизм работы функциональных опций (ФО)

Основная причина такого поведения кроется в платформенном механизме контроля интерфейса с помощью функциональных опций (ФО). В сложных прикладных решениях, таких как 1С:ERP или 1С:Комплексная автоматизация, практически весь нетиповой или опциональный функционал привязан к конкретным константам.

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

При этом сама СУБД и объектная модель 1С никак не ограничивают запись или проведение документа программным путем. Код выполняется успешно, движения по регистрам формируются, но интерфейс системы блокирует доступ к документу.

Как исправить проблему в настройках 1С:ERP

Выясним, как включить необходимую функциональную опцию в режиме «1С:Предприятие». Для этого выполним следующие шаги:

  1. Перейдем в раздел НСИ и администрирование.
  2. В блоке Настройка НСИ и разделов выберем пункт Закупки.
  3. Развернем подраздел Заказы поставщикам.
  4. Установим флаг (активируем опцию) Заказы поставщикам. В зависимости от потребностей учета также можно настроить использование статусов заказов и согласование.

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

Как предотвратить проблему на уровне программного кода

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

Разберем пример кода, который предотвращает некорректное создание документа:


Если Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам") Тогда
    ВызватьИсключение "Внимание! В настройках системы отключено использование заказов поставщикам. 
                      |Программное создание документов ""Заказ поставщику"" заблокировано.";
КонецЕсли;

// Если опция активна, переходим к созданию документа
НовыйЗаказ = Документы.ЗаказПоставщику.СоздатьДокумент();
// Заполнение реквизитов...

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

Особенности программного заполнения документа «Заказ поставщику»

Разберем сопутствующие технические нюансы. Помимо функциональных опций, при программном создании заказа поставщику в ERP 2.4 / 2.5 необходимо корректно заполнять системные реквизиты, несоблюдение правил заполнения которых может привести к ошибкам проведения или отсутствию документов в специализированных отчетах.

Проанализируем ключевые реквизиты, обязательные к заполнению:

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


Функция СоздатьЗаказПоставщикуПрограммно(СтруктураДанных) Экспорт

    // 1. Обязательная проверка функциональной опции
    Если Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам") Тогда
        ЗаписатьЛогОшибок("Использование заказов поставщикам отключено в настройках ERP.");
        Возврат Неопределено;
    КонецЕсли;

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

    // 3. Заполнение табличной части "Товары"
    Для Каждого СтрокаТовара Из СтруктураДанных.ТаблицаТоваров Цикл
        НоваяСтрока = ЗаказОбъект.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовара);
        // Автоматический расчет сумм и НДС на основании настроек конфигурации
        НоваяСтрока.ЗнаменательДирективы = 1; 
    КонецЦикла;

    // Перед записью рекомендуется выполнить стандартные заполнения и проверки ERP
    // Например, заполнить этапы оплаты, если это необходимо по условиям соглашения
    
    // 4. Запись и проведение документа
    Попытка
        ЗаказОбъект.Записать(РежимЗаписиДокумента.Проведение);
        Возврат ЗаказОбъект.Ссылка;
    Исключение
        ЗаписатьЛогОшибок("Ошибка при проведении заказа поставщику: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;

КонецФункции

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

← На главную