Содержимое хранилища значений констант деревом, выгрузка в файл и правка констант

24.09.26

База данных - Инструменты администратора БД

В константе типа ХранилищеЗначения лежит что угодно — структура с соответствиями внутри, таблица значений, файл, — а посмотреть это без кода нечем. Обработка показывает все константы базы с синонимами, типами и значениями, а содержимое хранилища разбирает деревом до любой вложенности. Содержимое выгружается в файл — двоичные данные как есть, коллекции в XML — и загружается обратно. Значение обычной константы правится под списком полем её собственного типа, пределы длины и разрядности подписаны рядом. У константы видно, какую функциональную опцию она хранит и на какие объекты эта опция влияет. В статье разобран код главного: рекурсивный разбор хранилища, выгрузка в XML через поток в памяти и распознавание своей выгрузки при загрузке.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Константы и хранилища значений, версия 1.0
.epf 20,17Kb ver:1.0
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Обработка собирает все константы базы в один список и показывает то, чего не видно без кода: что лежит внутри константы типа ХранилищеЗначения. Содержимое хранилища раскрывается деревом до любой вложенности, выгружается в файл и загружается обратно. Обычная константа правится прямо под списком. Пишет обработка в базу только по кнопке «Записать» или при загрузке файла в хранилище.

 

Что умеет

  • Список всех констант — имя, синоним, тип, значение и функциональная опция, если константа её хранит. Поиск по имени, синониму и типу, отбор по типу и по заполненности.
  • Содержимое хранилища деревом — структуры, соответствия, массивы, списки, таблицы и деревья значений, хранилище внутри хранилища. У каждого узла значение и тип.
  • Выгрузка в файл — файл из константы уходит как есть (картинка, двоичные данные, текст, табличный документ), коллекции — в XML.
  • Загрузка из файла — положить в константу сертификат или картинку; вернуть поправленный XML обратно значением.
  • Правка значения — поле с типом самой константы, пределы длины и разрядности подписаны рядом.
  • Функциональная опция — какую опцию хранит константа и какими объектами эта опция управляет.

 

Список констант с отборами

 

Список констант: имя, синоним, тип и значение, отбор по типу и по заполненности

Значения всех констант читаются одним набором — Константы.СоздатьНабор(""), а не обращением к базе на каждую. Отбор «Пустые» сравнивает значение с пустым значением его типа — Тип.ПривестиЗначение(Неопределено): ЗначениеЗаполнено здесь не годится, у булева он и на Ложь отвечает «заполнено».

 

Что внутри хранилища

Хранилище при открытии не читается. Ни размера, ни типа содержимого у ХранилищеЗначения до вызова Получить() не узнать, а внутри бывает и строка, и файл на десятки мегабайт. Поэтому в списке у хранилища стоит «содержимое по кнопке», а раскрывается оно кнопкой «Показать содержимое».

Дерево строится рекурсией. Корень — само значение, под ним элементы коллекции, под каждым элементом — снова его содержимое:

&НаСервере
Процедура ДобавитьУзел(Строки, Имя, Значение, Глубина = 0)

    Узел = Строки.Добавить();
    Узел.Что = Имя;
    Узел.Содержимое = ПредставлениеСодержимого(Значение);
    Узел.ТипУзла = ?(Значение = Неопределено, "Неопределено", Строка(ТипЗнч(Значение)));

    Если Глубина >= ПределГлубины() Тогда
        Край = Узел.Строки.Добавить();
        Край.Что = "…";
        Край.Содержимое = "глубже не разбираем: предел " + ПределГлубины() + " уровней";
        Возврат;
    КонецЕсли;

    РазвернутьКоллекцию(Узел, Значение, Глубина);

КонецПроцедуры

Предел глубины обязателен: структура может лежать сама в себе (Кольцо.Вставить("Сама", Кольцо)), и без счётчика уровней обход такого значения не закончится никогда.

Каждая коллекция разворачивается по-своему, а для элементов снова вызывается ДобавитьУзел:

ТипКоллекции = ТипЗнч(Значение);

Если ТипКоллекции = Тип("Структура") ИЛИ ТипКоллекции = Тип("ФиксированнаяСтруктура")
    ИЛИ ТипКоллекции = Тип("Соответствие") ИЛИ ТипКоллекции = Тип("ФиксированноеСоответствие") Тогда

    Для Каждого Элемент Из Значение Цикл
        ДобавитьУзел(Узел.Строки, Строка(Элемент.Ключ), Элемент.Значение, Глубина + 1);
    КонецЦикла;

ИначеЕсли ТипКоллекции = Тип("Массив") ИЛИ ТипКоллекции = Тип("ФиксированныйМассив") Тогда

    Для Индекс = 0 По Значение.ВГраница() Цикл
        ДобавитьУзел(Узел.Строки, "[" + Индекс + "]", Значение[Индекс], Глубина + 1);
    КонецЦикла;

ИначеЕсли ТипКоллекции = Тип("ТаблицаЗначений") Тогда

    Номер = 0;
    Для Каждого СтрокаТаблицы Из Значение Цикл
        Номер = Номер + 1;
        СтрокаУзел = Узел.Строки.Добавить();
        СтрокаУзел.Что = "строка " + Номер;
        СтрокаУзел.Содержимое = "колонок: " + Значение.Колонки.Количество();
        СтрокаУзел.ТипУзла = "СтрокаТаблицыЗначений";
        Для Каждого Колонка Из Значение.Колонки Цикл
            ДобавитьУзел(СтрокаУзел.Строки, Колонка.Имя, СтрокаТаблицы[Колонка.Имя], Глубина + 2);
        КонецЦикла;
    КонецЦикла;

ИначеЕсли ТипКоллекции = Тип("ХранилищеЗначения") Тогда

    ДобавитьУзел(Узел.Строки, "внутри", Значение.Получить(), Глубина + 1);

КонецЕсли;

Список значений и дерево значений разбираются так же, у строк дерева номер идёт с путём — «строка 2.1.3», чтобы было видно, какая кому подчинена. У коллекции в колонке «Значение» стоит её размер — «полей: 2», «строк: 12», у файла — размер в байтах.

 

Содержимое хранилища деревом

 

Содержимое хранилища деревом: структура, в ней соответствие, в нём массив структур — у каждого узла значение и тип

 

Выгрузка в файл и загрузка обратно

Кнопки «Сохранить в файл» и «Загрузить из файла» закрывают три задачи:

  • достать файл из константы — сертификат, логотип, печатную форму: они уходят в своём формате, .bin, .png, .txt, .mxl;
  • посмотреть и поправить — коллекции выгружаются в XML, правятся в редакторе и загружаются обратно значением;
  • положить файл в константу — выбором файла, без строчки кода.

Коллекцию обработка выгружает сериализатором XDTO прямо в поток в памяти, без временного файла на диске:

Поток = Новый ПотокВПамяти;
Запись = Новый ЗаписьXML;
Запись.ОткрытьПоток(Поток);
Попытка
    СериализаторXDTO.ЗаписатьXML(Запись, Внутри);
Исключение
    Запись.Закрыть();
    Ответ.Причина = "В файл не выгружается: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    Возврат Ответ;
КонецПопытки;
Запись.Закрыть();
Двоичные = Поток.ЗакрытьИПолучитьДвоичныеДанные();

Двоичные данные кладутся во временное хранилище, а клиент забирает их асинхронным НачатьПолучениеФайлаССервера — в веб-клиенте файл уходит в загрузки браузера. Принимает файл так же асинхронный НачатьПомещениеФайлаНаСервер.

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

Значение = Неопределено;
Чтение = Новый ЧтениеXML;
Попытка
    Чтение.ОткрытьПоток(Двоичные.ОткрытьПотокДляЧтения());
    Чтение.Прочитать();
    Если СериализаторXDTO.ВозможностьЧтенияXML(Чтение) Тогда
        Значение = СериализаторXDTO.ПрочитатьXML(Чтение);
    КонецЕсли;
Исключение
    Значение = Неопределено;
КонецПопытки;

Строка Чтение.Прочитать() перед ВозможностьЧтенияXML обязательна. Сразу после открытия позиция стоит перед документом, и сериализатор отвечает «читать не могу» даже на собственную выгрузку — без ошибки, просто ложью. Чужой XML он читать не берётся, и такой файл ложится в хранилище как есть.

Ссылки в XML выгружаются идентификатором. В своей базе файл загрузится и вернёт тот же элемент справочника, в чужой — ссылку на несуществующий объект. Переносить так значения со ссылками между базами нельзя.

 

Правка значения

Значение правится в поле под списком, а не в ячейке: колонка одна на константы всех типов, а поле под списком подстраивается под тип выбранной — ПолеПравки.ОграничениеТипа = КонстантаМД.Тип. Вместе с типом поле берёт из метаданных и разрядность: у пятиразрядной числовой константы шестую цифру не ввести. Пределы подписаны рядом словами. Пока не нажата «Записать», база не меняется.

 

Правка значения константы

 

Правка значения: поле принимает только тип константы, рядом — ограничения по длине и разрядности

Очищенное поле отдаёт Неопределено, а константе нужно значение своего типа, поэтому перед записью оно приводится: КонстантаМД.Тип.ПривестиЗначение(ЭтотОбъект.Правка) — пустая ссылка, ноль или пустая строка.

 

Функциональная опция константы

Если константа хранит функциональную опцию, это видно в списке, а под ним — какими объектами опция управляет. Где лежит значение опции, говорит её свойство Хранение (не Хранилище), а на что она влияет — коллекция Состав, у элемента которой значимо свойство Объект.

 

Функциональная опция и её состав

 

Функциональная опция константы и объекты, на которые она влияет

 

Сценарии

  • Константа-хранилище с настройками или токеном: «Показать содержимое» раскрывает структуру до последнего поля.
  • Сертификат или картинка в константе: «Сохранить в файл» отдаёт файл, «Загрузить из файла» кладёт новый.
  • Настройки в хранилище нужно поправить: выгрузили в XML, исправили в редакторе, загрузили значением.
  • Отбор «Пустые» по типу «Булево» — какие признаки в базе выключены.
  • Перед тем как трогать константу функциональной опции — какими объектами эта опция управляет.

 

Поставка

Konstanty.epf — внешняя обработка; расширений и внешних компонент не требует. Код открыт и лежит в модуле формы.

Проверено на следующих конфигурациях и релизах:

  • Управление нашей фирмой, редакция 3.0, релизы 3.0.14.143

Вступайте в нашу телеграмм-группу Инфостарт

константы хранилище значений ХранилищеЗначения просмотр констант изменение констант функциональные опции выгрузка в XML СериализаторXDTO

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    80059    409    171    

343

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    4253    26    0    

19

Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26

22570 руб.

06.10.2023    42769    118    54    

131

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    14116    52    62    

63

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.

15250 руб.

25.08.2025    71642    142    41    

150

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14640 руб.

29.04.2020    52293    142    164    

96

Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки. 1.3.11 Доработан механизм контекстной подсказки по метаданным

9500 руб.

17.05.2024    56437    194    63    

222
Для отправки сообщения требуется регистрация/авторизация