Чтение/запись YML

14.01.25

Разработка - Инструментарий разработчика

Парсер текста простых экземпляров YAML формата.

Файлы

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

Наименование Скачано Купить файл
ЧтениеЗаписьYAML:
.epf 8,55Kb
12 2 500 руб. Купить

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

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

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

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

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

Похожая публикация: Парсер YAML

Небольшой парсер для чтения примитивных YML файлов.

Важно! Строки с символом ":" должны экранироваться кавычками, пример:

Ссылки:
  - "Авансовый отчет 0000-000001 от 01.08.2023 16:21:36"
 
 Про экранирование
 
 Массив массивов в yml
ArraysOfArrays:
 - trade1:
     - док1
     - док2
 - trade3:
     - док3
     - док4

Код для преобразования строки yml в соответствие:

&НаКлиентеНаСервереБезКонтекста
Функция ДесериализоватьYML(Текст)
	ТекущийОбъект = Неопределено;
	
	ТекущийТекст = "";
	Отступ       = "";
	Для Каждого Строка Из СтрРазделить(Текст, Символы.ПС) Цикл
		
		Если СтрНачинаетсяС(СокрЛ(Строка), "#") Тогда
			Продолжить;
		КонецЕсли; 
		
		СтрокаБезОтступа = СокрЛ(Строка);
		ТекущийОтступ = Сред(Строка, 0, СтрДлина(Строка) - СтрДлина(СтрокаБезОтступа));
		
		Если Отступ = ТекущийОтступ И ЗначениеЗаполнено(ТекущийТекст) Тогда
			Обработать(ТекущийОбъект, ТекущийТекст);
			ТекущийТекст = Строка;
		Иначе 
			ТекущийТекст = ТекущийТекст + ?(ЗначениеЗаполнено(ТекущийТекст), Символы.ПС, "") + Строка;
		КонецЕсли; 
		
	КонецЦикла; 
	
	Если ЗначениеЗаполнено(ТекущийТекст) Тогда
		Обработать(ТекущийОбъект, ТекущийТекст);
	КонецЕсли; 
	
	Возврат ТекущийОбъект;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура Обработать(ТекущийОбъект, ТекущийТекст)
	
	Если ТекущийОбъект = Неопределено Тогда
		НачинаетсяСДефиса = СтрНачинаетсяС(СокрЛ(ТекущийТекст), "-");
		ТекущийОбъект = ?(НачинаетсяСДефиса, Новый Массив, Новый Соответствие);
	КонецЕсли; 
	
	Если ТипЗнч(ТекущийОбъект) = Тип("Массив") Тогда
		
		ПозицияЭлементаМассива = СтрНайти(ТекущийТекст, "-");
		ЗначениеЭлементаМассива = Лев(ТекущийТекст, ПозицияЭлементаМассива - 1) + " " + Сред(ТекущийТекст, ПозицияЭлементаМассива + 1);
		ЗначениеЭлементаМассива = УбратьОбщийОтступ(ЗначениеЭлементаМассива);
		
		Если СтрНайти(ЗначениеЭлементаМассива, Символы.ПС) = 0 И (СтрНайти(ЗначениеЭлементаМассива, ":") = 0 ИЛИ СтрНачинаетсяС(СокрЛ(ЗначениеЭлементаМассива), """")) Тогда
			ТекущийОбъект.Добавить(ЗначениеЭлементаМассива);
		Иначе
			ТекущийОбъект.Добавить(ДесериализоватьYML(ЗначениеЭлементаМассива));
		КонецЕсли; 
		
	Иначе
		
		ПозицияРазделителя = СтрНайти(ТекущийТекст, ":");
		ПозицияПереводаСтроки = СтрНайти(ТекущийТекст, Символы.ПС);
		КлючСтруктуры = Сред(ТекущийТекст, 0, ПозицияРазделителя - 1);
		
		Если ПозицияПереводаСтроки = 0 Тогда
			ТекущийОбъект.Вставить(КлючСтруктуры, Сред(ТекущийТекст, ПозицияРазделителя + 2));
		Иначе
			ТекстБезОтступа = УбратьОбщийОтступ(Сред(ТекущийТекст, ПозицияПереводаСтроки + 1));
			ТекущийОбъект.Вставить(КлючСтруктуры, ДесериализоватьYML(ТекстБезОтступа));
		КонецЕсли; 
		
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция УбратьОбщийОтступ(Текст)
	
	Отступ = СтрДлина(Текст);
	МассивСтрок = СтрРазделить(Текст, Символы.ПС);
	Для Каждого Строка Из МассивСтрок Цикл
		СтрокаБезОтступа = СокрЛ(Строка);
		Отступ = Мин(Отступ, СтрДлина(Строка) - СтрДлина(СтрокаБезОтступа))
	КонецЦикла; 
	
	Для Счетчик = 0 По МассивСтрок.ВГраница() Цикл
		МассивСтрок[Счетчик] = Сред(МассивСтрок[Счетчик], Отступ + 1);
	КонецЦикла; 
	
	Возврат СтрСоединить(МассивСтрок, Символы.ПС);
	
КонецФункции

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

 
 Код для преобразования строки yml в список значений
 
 Функция преобразования Соответствия/Структуры в строку YML
 
 Тестировалось на следующих входных данных:
Регистры:
  - РегистрНакопления.АвансовыеПлатежиИностранцевПоНДФЛ
Ссылки:
  - "(56d0d36f-306e-11ee-841a-e16e604b2373) Авансовый отчет 0000-000001 от 01.08.2023 16:21:36"
  
doe: "a deer, a female deer"
ray: "a drop of golden sun"
pi: 3.14159
xmas: true
french-hens: 3
calling-birds:
  - huey
  - dewey
  - louie
  - fred
xmas-fifth-day:
  calling-birds: four
  french-hens: 3
  golden-rings: 5
  partridges:
    count: 1
    location: "a pear tree"
  turtle-doves: two
  
foo: bar
pleh: help
stuff:
  foo: bar
  bar: foo
  
name: AWS-CD

on:
  push:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest
      steps:
        - uses: actions/checkout@v1
        - name: Install Node packages
          run: npm install
        - name: Build the project
          run: npm run build
        - name: Deploy to S3
          run: AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY}
		  
# This is a comment
title: This is some YAML
publisher: ConvertSimple Books
pages: 250
chapters: 21
time_to_read: 12 hours
descriptors:
  - fun
  - entertaining
  - exciting
contributors:
  author: Mark Templeton
  editor: Cindy Johnson

 

Если на каких-то данных не работает - предлагайте ваш вариант решения проблемы...

Исходный код: https://github.com/kuzyara/1c-yaml-parser

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

  • 1С:ERP Управление предприятием 2, релизы 2.5.16.78

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

загрузка yaml чтение yml экранирование

См. также

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

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

24900 руб.

20.08.2024    73415    373    170    

321

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    265251    1476    421    

1175

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

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

22570 руб.

06.10.2023    39469    111    48    

125

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

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

15250 руб.

25.08.2025    60844    123    36    

135

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

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

14000 руб.

17.04.2026    7525    31    42    

46

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

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

17000 руб.

10.11.2023    26056    97    46    

104

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

6000 руб.

25.02.2026    4415    16    1    

20

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2315    6    0    

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