При работе с конфигурацией 1С:Управление торговлей 11 (УТ 11) многие разработчики и администраторы сталкиваются с тем, что в документе ЗаказКлиента доступен очень узкий перечень статусов. Часто возникает ситуация, когда для интеграции с интернет-магазином (например, на базе Битрикс) требуется передать специфическое состояние заказа, которого нет в стандартном списке. В этой статье мы разберем, как устроена логика статусов, почему их нельзя просто "дописать" в перечисление и какие альтернативные пути существуют для решения задачи.
Для начала проанализируем, как система формирует список доступных статусов. В типовом решении состав выпадающего списка в поле Статус зависит от включенных функциональных опций. Рассмотрим фрагмент программного кода процедуры ЗаполнитьСписокВыбора, которая отвечает за визуализацию доступных значений:
Процедура ЗаполнитьСписокВыбора(ДанныеВыбора, УстановленныйСтатус) Экспорт
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента") Тогда
Возврат
КонецЕсли;
ДанныеВыбора.Очистить();
ДанныеВыбора.Добавить(Перечисления.СтатусыЗаказовКлиентов.НеСогласован);
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента") Тогда
ДанныеВыбора.Добавить(Перечисления.СтатусыЗаказовКлиентов.КОбеспечению, НСтр("ru='В резерве'"));
ДанныеВыбора.Добавить(Перечисления.СтатусыЗаказовКлиентов.КОтгрузке);
Иначе
ДанныеВыбора.Добавить(Перечисления.СтатусыЗаказовКлиентов.КОбеспечению, НСтр("ru='К выполнению'"));
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("НеЗакрыватьЗаказыКлиентовБезПолнойОплаты")
ИЛИ ПолучитьФункциональнуюОпцию("НеЗакрыватьЗаказыКлиентовБезПолнойОтгрузки") Тогда
ДанныеВыбора.Добавить(Перечисления.СтатусыЗаказовКлиентов.Закрыт);
КонецЕсли;
КонецПроцедуры
Из этого кода мы видим несколько важных закономерностей:
ИспользоватьРасширенныеВозможностиЗаказаКлиента, статусы вообще могут не отображаться или быть крайне ограниченными.ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента, статус КОтгрузке пропадает из шапки документа. Это происходит потому, что при такой настройке управление отгрузкой переносится в табличную часть Товары, где для каждой строки отдельно выбирается действие: "Резервировать", "К обеспечению" или "Отгрузить".Закрыт появляется только в том случае, если включены контроли оплаты или отгрузки.Рассмотрим попытку "обмануть" систему и принудительно добавить статус КОтгрузке в список выбора с помощью расширения, как предложил автор темы:
&После("ЗаполнитьСписокВыбора")
Процедура дор_ЗаполнитьСписокВыбора(ДанныеВыбора, УстановленныйСтатус) Экспорт
Иск = Перечисления.СтатусыЗаказовКлиентов.КОтгрузке;
Если ДанныеВыбора.НайтиПоЗначению(Иск) = Неопределено Тогда
ДанныеВыбора.Добавить(Иск, Иск);
КонецЕсли;
КонецПроцедуры
Чем это грозит? Выясним причину, по которой 1С скрывает эти значения. Статус в УТ 11 — это не просто текстовая метка. Он напрямую влияет на алгоритмы проведения документа (процедуры в модуле объекта и менеджера). Если вы выберете статус КОтгрузке при включенной построчной отгрузке, система может:
СвободныеОстатки (товар не зарезервируется под конкретный заказ).ЗаказыКлиентов как готовый к выдаче, из-за чего складские документы (Расходный ордер) не увидят этот заказ.Выполняется (или аналогичный), а не КОтгрузке.Проанализируем ситуацию глубже. В УТ 11 существует два похожих, но принципиально разных механизма:
Статус — это жестко заданное значение реквизита в базе данных. Он определяет учетную логику: "должны ли мы резервировать товар?", "считается ли сделка закрытой?".
Состояние — это расчетный показатель, который вы видите в списке заказов (например, "Готов к отгрузке", "Ожидается оплата"). Он вычисляется "на лету" на основе анализа статуса, наличия товаров на складе по этому заказу и состояния взаиморасчетов. Состояние гораздо информативнее для пользователя и менеджера сайта.
Если ваша основная задача — передать в Битрикс или другую внешнюю систему информацию о том, на каком этапе находится заказ, лучшим решением будет использование механизма дополнительных реквизитов. Разберем по шагам, как это реализовать:
Администрирование — Общие настройки — Дополнительные реквизиты и сведения.Заказ клиента и добавьте новый реквизит, например, "Статус для сайта" с типом Дополнительное значение.ЗаказКлиента пропишите логику автоматической установки этого реквизита при записи, основываясь на данных 1С (наличии реализации, оплаты и т.д.).В модуле обмена с Битриксом вы можете легко настроить маппинг: передавать на сайт значение этого дополнительного реквизита вместо стандартного поля Статус. Это безопасно, не ломает типовую логику проведения и позволяет реализовать любую глубину детализации этапов заказа.
Посмотрим на ситуацию с точки зрения интеграции. Стандартный модуль обмена с Bitrix часто позволяет сопоставлять статусы 1С и сайта. Вместо того чтобы менять код 1С, проанализируйте возможности модуля обмена. Часто в нем можно указать условия:
Если Статус = "К выполнению" И ПроцентОплаты >= 100 Тогда СтатусНаСайте = "Оплачен, готовится к отправке"
Такой подход позволяет оставить типовую конфигурацию на поддержке и избежать ошибок в регистрах накопления.
Подводя итог, можно сказать: "куценький" выбор статусов в УТ 11 — это осознанное проектное решение разработчиков 1С для обеспечения жесткой целостности данных в регистрах.
Важно помнить:
СтатусыЗаказовКлиентов вручную, так как это потребует переписывания сотен строк кода в модулях проведения.КОтгрузке, скорее всего, у вас включена функциональная опция построчной отгрузки. В этом случае статусом управляет колонка Действие в табличной части.