Проверить общий нумератор реализации и форму собственного номера

Учебные задачи

В КА2 используется строковый номер длиной 11 с годовой периодичностью; форма номера не доказывает его свободность.

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

Полный серверный общий модуль собственной учебной копии КА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. При отличающейся версии или расширениях результат может отличаться от выгрузки. Сверяйте активную конфигурацию, а не исправляйте её ради зелёных сообщений.

Процедура ВыполнитьПример() Экспорт
    Нумератор = Метаданные.НумераторыДокументов.Найти("ДокументыРеализацииТоваров");
    Если Нумератор = Неопределено Тогда
        ВызватьИсключение "Нет подтверждённого нумератора ДокументыРеализацииТоваров";
    КонецЕсли;
    Реализация = Метаданные.Документы.Найти("РеализацияТоваровУслуг");
    Если Реализация = Неопределено Тогда
        ВызватьИсключение "Нет подтверждённого документа реализации";
    КонецЕсли;
    Сообщить(Реализация.Нумератор = Нумератор);
    Сообщить(Нумератор.ТипНомера = Метаданные.СвойстваОбъектов.ТипНомераДокумента.Строка);
    Сообщить(Нумератор.ДлинаНомера = 11);
    Сообщить(Нумератор.ДопустимаяДлинаНомера = ДопустимаяДлина.Фиксированная);
    Сообщить(Нумератор.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Год);
    Сообщить(Нумератор.КонтрольУникальности);
    Входные = Новый Массив;
    Входные.Добавить("КА-00000001");
    Входные.Добавить("1");
    ПодходитПоДлине = 0;
    НеПодходитПоДлине = 0;
    Для Каждого НомерИзОбмена Из Входные Цикл
        Если ТипЗнч(НомерИзОбмена) <> Тип("Строка") Тогда
            ВызватьИсключение "В этом опыте номер должен оставаться строкой";
        КонецЕсли;
        ДлинаПодходит = СтрДлина(НомерИзОбмена) <= Нумератор.ДлинаНомера;
        Если Нумератор.ДопустимаяДлинаНомера = ДопустимаяДлина.Фиксированная Тогда
            ДлинаПодходит = СтрДлина(НомерИзОбмена) = Нумератор.ДлинаНомера;
        КонецЕсли;
        Если ДлинаПодходит Тогда
            ПодходитПоДлине = ПодходитПоДлине + 1;
        Иначе
            НеПодходитПоДлине = НеПодходитПоДлине + 1;
        КонецЕсли;
    КонецЦикла;
    Сообщить(ПодходитПоДлине = 1 И НеПодходитПоДлине = 1);
    Сообщить("КА-00000001 проверен только по типу и длине; не присваивался документу и не проверялся на свободность");
КонецПроцедуры

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

  1. Нумератор найден в отдельной коллекции конфигурации. Свойство Нумератор документа реализации указывает на него согласно исходному XML.

  2. NumberType=String, NumberLength=11, NumberAllowedLength=Fixed, NumberPeriodicity=Year, CheckUnique=true проверяются отдельно.

  3. Собственный номер КА-00000001 содержит 11 символов; строка 1 — один символ. Не превращаем первый номер в Число и не удаляем префикс.

  4. Для фиксированной длины проверяется равенство, для переменной — верхний предел. Это предварительная проверка формы входа, не полный алгоритм назначения номера 1С.

  5. Годовая периодичность относится к контролю/повторению номеров, не обещает одинаковую свободность по всем документам и разделителям данных.

  6. Не вызываем УстановитьНовыйНомер и не резервируем номер. Уникальность, префиксы и конфигурационные проверки требуют отдельного транзакционного сценария записи.

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

  1. Семь сравнений ожидаются Истина: связь документа, пять правил схемы, один подходящий/один неподходящий собственный номер.

  2. Номер не появился в базе и не занят этим опытом.

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

На настоящем нумераторе проверена только структура двух входных номеров с явным отделением от уникальности.

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

  1. КонтрольУникальности=Истина не означает, что выдуманный номер уже проверен на свободность.

  2. Не рассчитывать новый номер по максимуму без учёта штатной нумерации и конкурентной записи.

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

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

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

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

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