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

14.01.25

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
ЧтениеЗаписьYAML:
.epf 8,55Kb
9
9 Скачать (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С.

12000 руб.

02.09.2020    172158    964    403    

925

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

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

8400 руб.

20.08.2024    14714    108    46    

108

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

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

22200 руб.

06.10.2023    17362    43    15    

75

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

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

9360 руб.

17.05.2024    27400    96    48    

139

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

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

15000 руб.

10.11.2023    11970    45    33    

67

SALE! %

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

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

4800 3840 руб.

14.01.2013    191388    1153    0    

920

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

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

20000 руб.

07.10.2021    18121    7    32    

42

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

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

3600 руб.

27.12.2024    1156    2    0    

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