Как исправить ошибку «Неизвестная команда: » при оформлении приказа о приеме на работу

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При обновлении платформы 1С:Предприятие до актуальных версий (8.3.15, 8.3.17 и выше) пользователи старых или сильно кастомизированных конфигураций (например, на базе «Бухгалтерия предприятия 2.0») часто сталкиваются с неприятной проблемой. При нажатии на привычные гиперссылки в формах, такие как «оформить приказ о приеме на работу», программа выдает лаконичную, но блокирующую работу ошибку: «Неизвестная команда: ». При этом отладчик может не фиксировать точку остановки, так как сбой происходит на уровне взаимодействия платформы и встроенного браузера.

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

Выясним причину: почему старый код ломается на новой платформе?

Основная причина кроется в архитектурных изменениях самой платформы 1С. Начиная с версии 8.3.14, компания 1С изменила встроенный движок для отображения HTML-документов в формах. Если раньше в ОС Windows для этих целей использовались компоненты Internet Explorer, то теперь используется движок на базе Chromium (или WebKit).

Многие старые конфигурации используют так называемые Поля HTML-документа для создания красивых интерактивных интерфейсов. Ссылка «оформить приказ» внутри такой формы — это не обычная кнопка 1С, а фрагмент HTML-кода с тегом <a>. Новый движок гораздо строже относится к синтаксису навигационных ссылок и обработке событий JavaScript. Если ссылка сформирована некорректно или использует устаревший протокол взаимодействия с формой 1С, платформа не может сопоставить это нажатие с конкретным действием в коде, выдавая ошибку «Неизвестная команда».

Шаг 1: Поиск места возникновения ошибки в конфигураторе

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

  1. Откроем конфигуратор и найдем справочник Сотрудники или ФизическиеЛица (в зависимости от того, в какой форме вы нажимаете кнопку).
  2. Перейдем на закладку «Формы» и откроем основную форму элемента.
  3. В дереве элементов формы нам нужно найти элемент с типом «Поле HTML документа». Часто программисты называют его ПолеИнформации, ИнфоПанель или просто ПолеHTML.
  4. Если визуально на форме в конфигураторе вы видите пустое белое поле, скорее всего, это оно и есть. Текст «оформить приказ...» формируется программно при открытии.

Шаг 2: Анализ формирования HTML-текста

Теперь нам нужно понять, какой именно URL или команда зашита в эту ссылку. Перейдем в модуль формы и проанализируем процедуру ПриОткрытии() или ПередОткрытием(). Также стоит обратить внимание на обработчик ПриЧтенииНаСервере() (если форма управляемая).

Ищите фрагмент кода, где переменной присваивается длинная строка текста с HTML-тегами. Это может выглядеть примерно так:


ТекстHTML = ТекстHTML + "<a href=""e1cib/command/Документ.ПриемНаРаботуВОрганизацию.Создать?ДанныеЗаполнения=" + СсылкаНаОбъект + """>оформить приказ о приеме на работу</a>";
ЭлементыФормы.ПолеИнформации.УстановитьТекст(ТекстHTML);

Проанализируем эту ситуацию: в старых версиях платформы такие прямые навигационные ссылки e1cib/command/... могли обрабатываться автоматически. В новых версиях, если формат ссылки не соответствует строгому стандарту или если в конфигурации используется режим совместимости с версиями 8.2 или 8.3.10, возникает конфликт интерпретации.

Шаг 3: Исправление через обработчик события «ПриНажатии»

Самый надежный способ решить проблему — перехватить нажатие на ссылку средствами 1С и выполнить команду открытия формы программно. Для этого выполним следующие действия:

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

Рассмотрим пример кода, который позволит избежать ошибки «Неизвестная команда»:


Процедура ПолеИнформацииПриНажатии(Элемент, ДанныеСобытия)
    // Отменяем стандартную обработку ссылки платформой
    ДанныеСобытия.СтандартнаяОбработка = Ложь;
    
    // Проверяем, содержит ли ссылка нужную нам команду
    Если Найти(ДанныеСобытия.Href, "ПриемНаРаботу") > 0 Тогда
        // Программно открываем форму нового документа
        ПараметрыЗаполнения = Новый Структура("ФизЛицо, Организация", Объект.Ссылка, Объект.Организация);
        ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ПараметрыЗаполнения);
        
        ОткрытьФорму("Документ.ПриемНаРаботуВОрганизацию.ФормаОбъекта", ПараметрыФормы);
    КонецЕсли;
КонецПроцедуры

Важный момент: Установка свойства СтандартнаяОбработка = Ложь критически важна. Она говорит платформе: «Не пытайся сама перейти по этой ссылке, я всё сделаю вручную в коде 1С». Это предотвратит появление окна с ошибкой.

Шаг 4: Радикальное, но эффективное решение

Если код формирования HTML слишком запутанный (что часто бывает в кастомных решениях вроде AzStandart), рассмотрим альтернативный вариант. Вместо того чтобы мучаться с отладкой HTML-движка, мы можем добавить обычную кнопку 1С прямо на форму.

Разберем, почему это часто лучше:

Для реализации просто добавьте на форму кнопку с заголовком «Оформить прием», а в её обработчике пропишите создание документа через ЗаполнитьЗначенияСвойств() или передачу параметров в ОткрытьФорму().

Дополнительные рекомендации по режиму совместимости

Проанализируем ситуацию с настройками самой конфигурации. Если ваша база основана на старой «Бухгалтерии 2.0», у неё в корне конфигурации наверняка установлен «Режим совместимости» (например, 8.2.13 или 8.3.10).

Попробуйте выполнить следующие действия в тестовой базе:

  1. Встаньте на корень дерева конфигурации, нажмите правой кнопкой — «Свойства».
  2. Найдите пункт «Режим совместимости».
  3. Если стоит версия ниже 8.3.12, попробуйте поднять её на один-два шага вверх.

Внимание! Это может привести к изменению поведения других механизмов (запросы, формы), поэтому данный метод требует полного тестирования всей системы. Однако часто именно «подъем» режима совместимости заставляет новый движок Chromium корректно понимать старые команды 1С.

Подведем итоги

Ошибка «Неизвестная команда» при работе с HTML-полями в 1С 8.3.17 — это следствие эволюции платформы. Чтобы её устранить, нам нужно либо нормализовать обработку навигационных ссылок через событие ПриНажатии, либо отказаться от использования гиперссылок внутри HTML в пользу стандартных элементов управления 1С. Мы рекомендуем второй путь как наиболее надежный для долгосрочной эксплуатации системы.

← На главную