При разработке интеграций, переносе данных или автоматизации процессов в 1С:ERP Управление предприятием 2.4 / 2.5 разработчики часто сталкиваются с крайне странным поведением платформы. Вы программно создаете документ ЗаказПоставщику, заполняете все необходимые реквизиты, документ успешно записывается и даже проводится без ошибок в коде. Однако при попытке найти его в интерфейсе начинаются «чудеса»:
В этой статье мы подробно разберем механизмы платформы «1С:Предприятие 8.3», которые приводят к подобному эффекту, выясним основную причину проблемы и рассмотрим лучшие практики программного создания документов в ERP, позволяющие избежать подобных ситуаций в будущем.
Основная причина такого поведения кроется в платформенном механизме контроля интерфейса с помощью функциональных опций (ФО). В сложных прикладных решениях, таких как 1С:ERP или 1С:Комплексная автоматизация, практически весь нетиповой или опциональный функционал привязан к конкретным константам.
Проанализируем, как ведет себя управляемая форма, когда связанная с ней функциональная опция отключена:
ЗаказПоставщику) или его ключевые реквизиты включены в состав функциональной опции (в данном случае это опция ИспользоватьЗаказыПоставщикам), и эта опция в настройках программы отключена (значение константы равно Ложь), платформа автоматически отключает видимость всех связанных элементов на управляемой форме. Форма инициализируется на сервере, но при выводе на клиент скрывает абсолютно все реквизиты. Разработчик видит только пустую рамку формы.При этом сама СУБД и объектная модель 1С никак не ограничивают запись или проведение документа программным путем. Код выполняется успешно, движения по регистрам формируются, но интерфейс системы блокирует доступ к документу.
Выясним, как включить необходимую функциональную опцию в режиме «1С:Предприятие». Для этого выполним следующие шаги:
После включения этой настройки функциональная опция ИспользоватьЗаказыПоставщикам примет значение Истина. Динамические списки обновятся, документы появятся в журналах, а при открытии по ссылке форма заказа отобразит все заполненные реквизиты и табличные части.
Чтобы избежать ситуаций, когда программный код создает документы, функционал которых отключен в текущей базе данных, рассмотрим правильный подход к разработке. Перед созданием любого опционального документа крайне важно делать программную проверку доступности функциональной опции.
Разберем пример кода, который предотвращает некорректное создание документа:
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам") Тогда
ВызватьИсключение "Внимание! В настройках системы отключено использование заказов поставщикам.
|Программное создание документов ""Заказ поставщику"" заблокировано.";
КонецЕсли;
// Если опция активна, переходим к созданию документа
НовыйЗаказ = Документы.ЗаказПоставщику.СоздатьДокумент();
// Заполнение реквизитов...
Внедрение таких проверок в обработчики интеграций или внешние обработки загрузки данных — признак хорошего тона в разработке на платформе 1С. Это убережет пользователей и администраторов системы от появления «невидимых» документов в базе данных.
Разберем сопутствующие технические нюансы. Помимо функциональных опций, при программном создании заказа поставщику в ERP 2.4 / 2.5 необходимо корректно заполнять системные реквизиты, несоблюдение правил заполнения которых может привести к ошибкам проведения или отсутствию документов в специализированных отчетах.
Проанализируем ключевые реквизиты, обязательные к заполнению:
ХозяйственнаяОперация): Этот реквизит определяет логику проведения документа и его участие в цепочках поставок. Для стандартной закупки обязательно указывайте значение Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика. Если оставить поле пустым, документ может провестись, но отчеты по закупкам его проигнорируют.Статус): Если в настройках закупок включено использование статусов, незаполненный статус может заблокировать дальнейшую работу с заказом. Рекомендуется программно устанавливать статус Перечисления.СтатусыЗаказовПоставщикам.Согласован или Подтвержден в зависимости от бизнес-логики процесса.Партнер) и регламентированного юридического лица (Контрагент). Программное заполнение только одного из этих реквизитов приведет к ошибкам проведения по регистрам взаиморасчетов.Рассмотрим комплексный пример правильного программного создания и заполнения документа:
Функция СоздатьЗаказПоставщикуПрограммно(СтруктураДанных) Экспорт
// 1. Обязательная проверка функциональной опции
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам") Тогда
ЗаписатьЛогОшибок("Использование заказов поставщикам отключено в настройках ERP.");
Возврат Неопределено;
КонецЕсли;
// 2. Инициализация объекта
ЗаказОбъект = Документы.ЗаказПоставщику.СоздатьДокумент();
ЗаказОбъект.Дата = ТекущаяДата();
// Заполнение основных реквизитов
ЗаказОбъект.Организация = СтруктураДанных.Организация;
ЗаказОбъект.Партнер = СтруктураДанных.Партнер;
ЗаказОбъект.Контрагент = СтруктураДанных.Контрагент;
ЗаказОбъект.Соглашение = СтруктураДанных.Соглашение;
ЗаказОбъект.Валюта = СтруктураДанных.Валюта;
ЗаказОбъект.Склад = СтруктураДанных.Склад;
// Заполнение хозяйственной операции и статуса
ЗаказОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыЗаказовПоставщикам") Тогда
ЗаказОбъект.Статус = Перечисления.СтатусыЗаказовПоставщикам.Согласован;
КонецЕсли;
// 3. Заполнение табличной части "Товары"
Для Каждого СтрокаТовара Из СтруктураДанных.ТаблицаТоваров Цикл
НоваяСтрока = ЗаказОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовара);
// Автоматический расчет сумм и НДС на основании настроек конфигурации
НоваяСтрока.ЗнаменательДирективы = 1;
КонецЦикла;
// Перед записью рекомендуется выполнить стандартные заполнения и проверки ERP
// Например, заполнить этапы оплаты, если это необходимо по условиям соглашения
// 4. Запись и проведение документа
Попытка
ЗаказОбъект.Записать(РежимЗаписиДокумента.Проведение);
Возврат ЗаказОбъект.Ссылка;
Исключение
ЗаписатьЛогОшибок("Ошибка при проведении заказа поставщику: " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Подведем итог. Если вы столкнулись с «исчезновением» программно созданных документов в 1С:ERP и открытием пустых форм, не спешите запускать глубокую отладку кода. В первую очередь проверьте настройки функциональных опций в пользовательском режиме. Включение соответствующего функционала мгновенно решит проблему отображения документов.