Почему не создается «Приходный ордер на товары» из формы списка и как обойти ошибку «Операция недоступна» в 1С?

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

Каждый специалист, работающий с конфигурациями на платформе 1С:Предприятие 8.3 (такими как 1С:Управление торговлей 11, 1С:Комплексная автоматизация 2 или 1С:ERP Управление предприятием 2), рано или поздно сталкивается с ситуациями, когда стандартные механизмы ведут себя не так, как ожидается. Одной из таких классических загадок является блокировка создания документа ПриходныйОрдерНаТовары напрямую из его динамического списка. При нажатии на стандартную кнопку «Создать» пользователь получает лаконичное системное окно с предупреждением: «Операция недоступна».

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

Выясняем причину: почему это системное поведение, а не ошибка в коде?

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

  1. Глобальный поиск по конфигурации пуст, так как данное сообщение генерируется не кодом конфигурации, а непосредственно ядром платформы 1С:Предприятие.
  2. Точка останова в ОбработкаЗаполнения не срабатывает, потому что платформа блокирует выполнение операции еще до того, как управление передается коду конфигурации и начинается создание нового объекта.

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

ОткрытьФорму("Документ.ПриходныйОрдерНаТовары.ФормаОбъекта");

Этот факт часто сбивает с толку. Почему программный метод работает, а интерактивная кнопка в динамическом списке — нет? Дело в том, что метод ОткрытьФорму() обращается к форме объекта напрямую, минуя командный интерфейс платформы. В то же время стандартная кнопка «Создать» в динамическом списке жестко привязана к стандартной команде создания объекта, доступность которой контролируется платформой через механизм функциональных опций.

Разберем механизм работы параметризованных функциональных опций

Давайте разберем по шагам, как платформа определяет, доступна ли команда создания документа. В типовых конфигурациях 1С документ ПриходныйОрдерНаТовары тесно связан с функциональной опцией ИспользоватьОрдернуюСхемуПриПоступлении (или аналогичной ей ФО ОрдерныеСклады).

Эта функциональная опция является параметризованной. Это означает, что её значение (Истина или Ложь) зависит от конкретного контекста — в данном случае от выбранного склада (параметр Склад). Платформа работает по следующему алгоритму:

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

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

Как исправить проблему в режиме «1С:Предприятие»?

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

  1. Перейдем в раздел НСИ и администрирование, далее выберем пункт Настройка НСИ и разделов -> Склад и доставка.
  2. В открывшемся окне найдем группу настроек Склад и установим флаг напротив опции Ордерные склады.
  3. После включения глобальной опции необходимо настроить хотя бы один конкретный склад. Перейдем в справочник Склады и магазины (раздел НСИ и администрирование -> НСИ).
  4. Откроем карточку нужного нам склада и перейдем на вкладку Ордерная схема и структура.
  5. В секции Использовать ордерную схему документооборота установим флаг При поступлении.

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

Методологически верный подход к оформлению приходных ордеров

Несмотря на то, что мы разобрались, как активировать кнопку «Создать», с точки зрения методологии учета 1С:Управление торговлей 11 ручной ввод документа ПриходныйОрдерНаТовары непосредственно из общего списка документов крайне не рекомендуется.

Рассмотрим подробнее, почему разработчики 1С советуют использовать специализированные инструменты:

Использование АРМ гарантирует автоматическое заполнение табличной части документа актуальными данными из распоряжения и предотвращает расхождения между складским и финансовым учетом.

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

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


// Проверим доступность ордерной схемы для конкретного склада
ПараметрыОпции = Новый Структура;
ПараметрыОпции.Вставить("Склад", ВыбранныйСклад);

ОрдернаяСхемаАктивна = ПолучитьФункциональнуюОпцию("ИспользоватьОрдернуюСхемуПриПоступлении", ПараметрыОпции);

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

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

← На главную