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

14.01.25

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
ЧтениеЗаписьYAML:
.epf 8,55Kb
10
10 Скачать (1 SM) Купить за 1 850 руб.

Похожая публикация: Парсер 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С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

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

15500 руб.

02.09.2020    178893    990    403    

949

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

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

8400 руб.

20.08.2024    20388    134    75    

137

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    19064    51    19    

83

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

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

15000 руб.

10.11.2023    13012    53    33    

72

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    29248    100    48    

146

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

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

20000 руб.

07.10.2021    18729    7    32    

43

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1851    2    0    

5
Оставьте свое сообщение