Правильно упорядочить субсчета 41.2 и 41.10 по маске

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

Обычная строковая сортировка кода ставит 41.10 перед 41.2. ПолучитьПорядокКода выравнивает числовые части для сортировки; сравниваем два результата в собственной таблице.

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

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

Подготовка

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

  2. Планы видов характеристик → Добавить: УчебныеАналитики85. Тип значения только Строка 30. Элементы, дополнительные реквизиты, табличные части и предопределённые значения не создавайте.

  3. Планы счетов → Добавить: УчебныеСчета85. ДлинаКода 10, МаскаКода @@@.@@@.@@, ДлинаНаименования 100, ДлинаПорядка 20. АвтоПорядокПоКоду выключен, КонтрольУникальности включён. ВидыСубконто=УчебныеАналитики85, МаксКоличествоСубконто=2.

  4. У плана счетов не создавайте пользовательские реквизиты, табличные части, признаки учёта/субконто, предопределённые счета, формы, команды, макеты и дополнительные индексы. Модули оставьте пустыми. Историю данных и два флага обработки её версий выключите. Расширений нет.

  5. Обновите конфигурацию БД. Создайте серверный обработчик ВыполнитьПример() Экспорт в собственной обработке. Фрагмент вставляйте в тело; запускайте уроки по отдельности.

  6. Объекты создаются только в памяти: Записать/Удалить/Заблокировать не вызываются. Регистров бухгалтерии, проводок и фактических остатков в этом примере нет.

Описание = Метаданные.ПланыСчетов.Найти("УчебныеСчета85");
Если Описание = Неопределено Тогда
    ВызватьИсключение "Сначала создайте собственный план УчебныеСчета85";
КонецЕсли;
Если Описание.ДлинаКода <> 10 Или Описание.ДлинаНаименования <> 100
    Или Описание.ДлинаПорядка <> 20 Или Описание.МаскаКода <> "@@@.@@@.@@"
    Или Описание.АвтоПорядокПоКоду Или Описание.МаксКоличествоСубконто <> 2 Тогда
    ВызватьИсключение "Настройки учебного плана не соответствуют подготовке";
КонецЕсли;
Если Описание.ВидыСубконто = Неопределено Тогда
    ВызватьИсключение "Назначьте собственный план аналитик";
КонецЕсли;
Если Описание.ВидыСубконто.Имя <> "УчебныеАналитики85" Тогда
    ВызватьИсключение "Нужны только собственные учебные аналитики";
КонецЕсли;
Менеджер = ПланыСчетов.УчебныеСчета85;
Второй = Менеджер.СоздатьСчет();
Второй.Код = "41.2";
Второй.Наименование = "Учебный субсчёт 2";
Десятый = Менеджер.СоздатьСчет();
Десятый.Код = "41.10";
Десятый.Наименование = "Учебный субсчёт 10";
Второй.Порядок = Второй.ПолучитьПорядокКода();
Десятый.Порядок = Десятый.ПолучитьПорядокКода();
Сообщить(Второй.Порядок = " 41.  2");
Сообщить(Десятый.Порядок = " 41. 10");
Список = Новый ТаблицаЗначений;
Список.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
Список.Колонки.Добавить("Порядок", Новый ОписаниеТипов("Строка"));
СтрокаСписка = Список.Добавить();
СтрокаСписка.Код = Второй.Код;
СтрокаСписка.Порядок = Второй.Порядок;
СтрокаСписка = Список.Добавить();
СтрокаСписка.Код = Десятый.Код;
СтрокаСписка.Порядок = Десятый.Порядок;
Список.Сортировать("Код Возр");
Сообщить(Список[0].Код = "41.10");
Список.Сортировать("Порядок Возр");
Сообщить(Список[0].Код = "41.2");
Сообщить(Список[1].Код = "41.10");
Сообщить(Второй.ЭтоНовый() И Десятый.ЭтоНовый());

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

  1. Маска собственного плана содержит только @ и точки; этот метод предназначен именно для таких масок.

  2. Числовые части кодов прижимаются вправо пробелами; строка порядка сохраняется без СокрЛП, иначе выравнивание будет потеряно.

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

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

  5. Не записываем счета, не задаём Родитель и не объявляем код 41.2 сохранённым дочерним счётом 41.

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

  1. Шесть логических сообщений дают Истина; пробелы в двух строках порядка важны.

  2. Сортировка по Код начинается с 41.10, по Порядок — с 41.2. Оба счёта остаются новыми.

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

На двух конкретных кодах показано, зачем нужен порядок по маске и почему его нельзя обрезать.

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

  1. Код с точкой сам по себе не устанавливает иерархию через Родитель.

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

  3. ДлинаПорядка=0 и АвтоПорядокПоКоду влияют на стандартную сортировку списка; наша таблица сортируется явно.

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

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

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

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

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