ОбъектМетаданных: Документ.Команды

Свойства · Commands

Тип: КоллекцияОбъектовМетаданных. Коллекция объектов метаданных типа ОбъектМетаданных: Команда.

Полное описание, параметры и ограничения

ОбъектМетаданных: Документ.Команды (MetadataObject: Document.Commands)

ОбъектМетаданных: Документ (MetadataObject: Document)

Команды (Commands)

Доступен, начиная с версии 8.3.1.

Использование:
Только чтение.
Описание:
Тип: КоллекцияОбъектовМетаданных.
Коллекция объектов метаданных типа ОбъектМетаданных: Команда.
Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.1.

Методическая информация

Практические примеры

Проверить стандартные Номер/Дата и собственные поля заявки

Для документа стандартные реквизиты отличаются от справочника. Ищем их обходом описаний и отдельно проверяем Комментарий и табличную часть Товары.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.

  6. Документы → Добавить: имя УчебнаяЗаявка, тип номера Строка, длина 9, автонумерация включена. Проведение запретите: это только учебный документ без движений.

  7. Добавьте реквизит Комментарий (Строка, длина 100) и табличную часть Товары: Товар (СправочникСсылка.УчебныеТовары), Количество (Число, 9 цифр, 0 дробных, неотрицательное), Цена (Число, 12 цифр, 2 дробных, неотрицательное). Модуль документа пустой.

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

  9. Выполняйте только в новой базе Учебная85. Проверки читают настройки УчебнаяЗаявка; документы не создаются, не записываются и не проводятся.

  10. Не добавляйте документу свои команды, макеты, характеристики, дополнительные индексы или основания ввода. Расширения в учебную базу не устанавливайте.


Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;

Если Метаданные.Документы.Найти("УчебнаяЗаявка") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте УчебнаяЗаявка по подготовке";
КонецЕсли;
Описание = Метаданные.Документы.УчебнаяЗаявка;
ЕстьНомер = Ложь;
ЕстьДата = Ложь;
Для Каждого Стандартный Из Описание.СтандартныеРеквизиты Цикл
    Если Стандартный.Имя = "Номер" Тогда
        ЕстьНомер = Истина;
    КонецЕсли;
    Если Стандартный.Имя = "Дата" Тогда
        ЕстьДата = Истина;
    КонецЕсли;
КонецЦикла;
Сообщить(ЕстьНомер);
Сообщить(ЕстьДата);
Сообщить(Описание.Реквизиты.Найти("Комментарий") <> Неопределено);
Сообщить(Описание.ТабличныеЧасти.Найти("Товары") <> Неопределено);
Сообщить(Описание.ВводитсяНаОсновании.Количество() = 0);
Сообщить(Описание.ДополнительныеИндексы.Количество() = 0);
Сообщить(Описание.Характеристики.Количество() = 0);
Сообщить(Описание.Команды.Количество() = 0);
Сообщить(Описание.Макеты.Количество() = 0);
Сообщить("Число полей блокировки документа: " + Строка(Описание.ПоляБлокировкиДанных.Количество()));
Сообщить("Режим управления блокировкой: " + Строка(Описание.РежимУправленияБлокировкойДанных));

Разбор по шагам

  1. Описания стандартных реквизитов поддерживают обход; у коллекции нет Найти. Проверяем имена Номер и Дата через булевы признаки.

  2. Обычные реквизиты и табличные части — коллекции объектов метаданных, у них есть Найти. Ищем Комментарий и Товары, не значения конкретной заявки.

  3. Пустые дополнительные настройки ожидаются по подготовке. Ноль дополнительных индексов не означает отсутствие индексов платформы.

  4. Настройки блокировки читаются, но блокировки не устанавливаются и транзакции не начинаются.

Как проверить результат

  1. Девять проверок дают Истина; затем фактические настройки блокировки.

  2. В описании есть табличная часть Товары, но строки товаров и количество заявок базы не читались.

Ожидаемый результат

Контроль схемы заявки перед заполнением или импортом без операций с документами.

На что обратить внимание

  1. Не используйте одинаковый набор стандартных полей для справочника и документа: у заявки Номер/Дата, а не Код/Наименование.

  2. Поля блокировки не равны автоматически набору всех реквизитов.

  3. Пустая коллекция собственных команд не доказывает отсутствие стандартных действий платформы.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Проверить тип параметра команды акта без её выполнения

В КА2 команда АктНаПередачуПрав принимает ссылки заказа клиента или заявки на возврат. UUID не подменяет ни одну из них.

Где и как запускать

Полный серверный общий модуль собственной учебной копии КА2 Progress 2.5.20.75, только чтение схемы.

Подготовка

  1. Используйте отдельную учебную копию КА2 Progress из C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS, конфигурация КомплекснаяАвтоматизация 2.5.20.75, платформа 8.5.1.1343. Это не инструкция запуска в рабочей базе.

  2. Создайте серверный общий модуль УчебныеКонтрактыИнтерфейса с флагом Сервер. Вставьте полный модуль одного урока и вызовите УчебныеКонтрактыИнтерфейса.ВыполнитьПример() из серверной учебной команды.

  3. Команды подтверждены в Catalogs\Номенклатура.xml и Documents\РеализацияТоваровУслуг.xml; форма — в Catalogs\Номенклатура\Forms\ФормаСписка.xml; нумератор — в DocumentNumerators\ДокументыРеализацииТоваров.xml.

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

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

Процедура ВыполнитьПример() Экспорт
    ДокументМетаданных = Метаданные.Документы.Найти("РеализацияТоваровУслуг");
    Если ДокументМетаданных = Неопределено Тогда
        ВызватьИсключение "Нет подтверждённого документа РеализацияТоваровУслуг";
    КонецЕсли;
    КомандаМетаданных = ДокументМетаданных.Команды.Найти("АктНаПередачуПрав");
    Если КомандаМетаданных = Неопределено Тогда
        ВызватьИсключение "Нет команды АктНаПередачуПрав";
    КонецЕсли;
    ТипыПараметра = КомандаМетаданных.ТипПараметраКоманды;
    Сообщить(КомандаМетаданных.РежимИспользованияПараметра = РежимИспользованияПараметраКоманды.Одиночный);
    Сообщить(ТипыПараметра.СодержитТип(Тип("ДокументСсылка.ЗаказКлиента")));
    Сообщить(ТипыПараметра.СодержитТип(Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента")));
    Значения = Новый Массив;
    Значения.Добавить(Документы.ЗаказКлиента.ПустаяСсылка());
    Значения.Добавить(Документы.ЗаявкаНаВозвратТоваровОтКлиента.ПустаяСсылка());
    Значения.Добавить(Новый УникальныйИдентификатор("ff31d687-1a25-4ebc-af9d-b405c247cc9a"));
    ТипПодходит = 0;
    ТипНеПодходит = 0;
    Для Каждого Значение Из Значения Цикл
        Если ТипыПараметра.СодержитТип(ТипЗнч(Значение)) Тогда
            ТипПодходит = ТипПодходит + 1;
        Иначе
            ТипНеПодходит = ТипНеПодходит + 1;
        КонецЕсли;
    КонецЦикла;
    Сообщить(ТипПодходит = 2 И ТипНеПодходит = 1);
    Сообщить("Две пустые ссылки подходят только по типу: это не существующие документы и не разрешение выполнять команду");
КонецПроцедуры

Разбор по шагам

  1. Находим именно команду дочерней коллекции документа, а не одноимённую команду управляемой формы или общую команду конфигурации.

  2. ТипПараметраКоманды — ОписаниеТипов. В XML этой команды два cfg:DocumentRef, а режим Single соответствует Одиночный.

  3. ПустаяСсылка создаёт значение нужного ссылочного типа без чтения/создания документа. Она специально пустая: результат подходит по типу не означает заполненность или существование записи.

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

  5. Режим Множественный потребовал бы обработки массива даже при одном выбранном элементе. Здесь реальный режим Одиночный; штатный обработчик не вызывается.

Как проверить результат

  1. Четыре проверки ожидаются Истина на исходной схеме: Single, два допустимых типа, два подходящих и один неподходящий тип собственного набора.

  2. Ни один акт или заказ не создан. Пустые ссылки нельзя выдавать за допустимые бизнес-основания акта.

Ожидаемый результат

Разобран настоящий контракт параметра команды КА2 с безопасными значениями и явной границей проверки типа.

На что обратить внимание

  1. СодержитТип не проверяет существование ссылки, права, состояние документа или заполненность.

  2. Ссылка на РеализацияТоваровУслуг не становится правильным параметром только потому, что команда принадлежит этому документу.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.