Skip to content

arkuznetsov/SerLib1C

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

197 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Библиотека сериализации данных 1С (1C Serialization Library)

GitHub release GitHub license GitHub Releases GitHub All Releases

Build Status Quality Gate Coverage Tech debt

OpenYellow

Библиотека сериализации 1С (обработка)

Набор процедур и функций для сериализации/десериализации данных 1С и объектов СКД в простые структуры данных (Структура, соответствие, массив).

Варианты использования

  • замена платформенных функций сериализации, например, при сохранении версий объектов
  • передача данных по протоколу HTTP
  • основа для простых обработок обмена данными
  • основа для получения отчетов из внешних ИБ 1С

Особенности

  • разработка ведется в формате EDT
  • процедуры/функции поддерживают ограничение состава полей
  • табличные части преобразуются в служебный элемент структуры с ключом "__ТЧ"
  • при десериализации приоритетными являются метаданные, т.е. не возникает ошибок при изменении структуры данных конфигурации
  • поддерживается возможность назначения процедур дополнения ссылочных данных при выгрузке
  • поддерживается возможность переопределения функций поиска ссылочных данных

Особенности преобразования объектов СКД

  1. ПутьКДанным пользовательских полей СКД формируется системой автоматически, поэтому:

    • после загрузки СКД значение может отличаться на номер поля
    • если в исходной СКД значение было на языке, отличном от языка целевой, то новое значение будет на языке целевой СКД
  2. Поле "Обязательное" роли поля набора данных сейчас устанавливается принудительно, хотя в документации отмечено как "Только чтение" (EDT тоже ругается)

  3. Поле "Схема" вложенной схемы компоновки данных при добавлении имеет тип неопределено и принудительно устанавливается значение "Новый СхемаКомпоновкиДанных()", хотя в документации отмечено как "Только чтение" (EDT тоже ругается)

  4. В исходных настройках СКД в полях ТипЗначения составного типа могут встречаться дубли типов <БизнесПроцесс....> при загрузке дубли схлопываются

  5. В исходных настройках СКД иногда встречается некорректный тип элементов свойства "ПараметрыДанных" объекта "НастройкиКомпоновкиДанных", вместо "ЗначениеПараметраНастроекКомпоновкиДанных" используется "ЗначениеПараметраКомпоновкиДанных". После выгрузки загрузки СКД, все элементы поля "ПараметрыДанных" будут приведены к типу "ЗначениеПараметраНастроекКомпоновкиДанных".

  6. Если в исходных настройках поле типа "Дата" имеет значение Неопределено, то при загрузке будет установлена пустая дата

  7. Если в исходных настройках поле типа "Строка" имеет значение Неопределено, то при загрузке будет установлена пустая строка

  8. Не заполняется поле "Идентификатор" в элементах структуры настроек (Группировки, Таблицы, Диаграммы), т.к. имеет признак "Только чтение", а автоматического присвоения значения не происходит. Влияние на работоспособность СКД пока не проверялось.

Методы преобразования прикладных объектов 1С

Общие методы

  • ОбъектВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
  • ЗаполнитьОбъектИзСтруктуры(Объект, СтруктураОбъекта, СписокСвойств, ИсключаяСвойства)
  • СоздатьОбъектИзСтруктуры(СтруктураОбъекта, УстановитьСсылку, СписокСвойств, ИсключаяСвойства)

  • СсылкаВСтруктуру(Значение)
  • СсылкаИзСтруктуры(СтруктураЗначения)

  • НаборЗаписейРегистраВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)

  • ЗаполнитьНаборЗаписейРегистраИзСтруктуры(НаборЗаписей, СтруктураНабораЗаписей, СписокСвойств, ИсключаяСвойства)

  • СоздатьНаборЗаписейРегистраИзСтруктуры(СтруктураНабораЗаписей, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)


  • ДвиженияДокументаВСтруктуру(Объект, СписокРегистров, ИсключаяРегистры)
  • ДвиженияДокументаИзСтруктуры(Объект, СтруктураДвижений, СписокРегистров, ИсключаяРегистры)

  • ЗначениеВСтруктуру(Значение)
  • ЗначениеИзСтруктуры(СтруктураЗначения, ПолучатьБитыеСсылки)

Прикладные объекты (ссылочные)

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

  • Объект - преобразуемый/восстанавливаемый объект
  • СтруктураОбъекта - результат преобразования / источник для восстановления
  • СписокСвойств - список свойств, которые попадут в результат преобразования
  • ИсключаяСвойства - список свойств, которые не будут преобразованы (приоритет выше чем у СписокСвойств)

  • СправочникВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
  • СправочникИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • ПланСчетовВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
  • ПланСчетовИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • ПланВидовХарактеристикВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
  • ПланВидовХарактеристикИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • ПланВидовРасчетаВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
  • ПланВидовРасчетаИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • ДокументВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
  • ДокументИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • БизнесПроцессВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
  • БизнесПроцессИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • ЗадачаВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)
  • ЗадачаПроцессИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

Дополнение данных после сериализации

При сериализации данных возможно добавление обработчика, позволяющего выполнить дополнительную обработку или дополнение сериализованых данных, для этого необходимо в модуле из которого выполняется сериализация, создать процедуру вида:

&НаСервере
Процедура МойОбработчикПослеВыгрузкиТипа(Значение, СтруктураЗначения) Экспорт
    // Код обработки или дополнения
    // СтруктураЗначения.Вставить("КодЭлемента", Значение.Код);
КонецПроцедуры

где:

  • Значение (ЛюбаяСсылка, Объект, НаборЗаписей) - данные, для которых выполняется сериализация
  • СтруктураЗначения (Структура) - резальтат сериализации данных

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

// Библиотека.ДобавитьОбработчикПослеВыгрузкиТипа(ТипИсточника, ПроцедураОбработки, Модуль)
Библиотека.ДобавитьОбработчикПослеВыгрузкиТипа("СправочникОбъект.МойСправочник", "МойОбработчикПослеВыгрузкиТипа", ЭтотОбъект)

где:

  • Библиотека - Обработка-объект библиотеки преобразования данных (этой библиотеки)
  • ТипИсточника (Строка) - имя типа сериализуемого значения
  • ПроцедураОбработки (Строка) - имя процедуры обработки
  • Модуль (Модуль) - модуль, содержащий процедуру обработки
Переопределение поиска ссылочных данных при загрузке

При загрузке ссылочных данных возможно переопределение функции поиска ссылок, для этого необходимо в модуле, выполняющем загрузку, создать функцию вида:

&НаСервере
Функция МояФункцияПоискаСсылок(СтруктураЗначения) Экспорт
    // Код поиска ссылки
    // НайденнаяСсылка = Справочники.МойЗагружаемыйСправочник.НайтиПоКоду(СтруктураЗначения.КодЭлемента);
    // Возврат НайденнаяСсылка;
КонецФункции

где доступны параметры:

  • СтруктураЗначения (Структура) - структура содержащая поля описания искомой ссылки

И перед выполнением десериализации данных добавить обработчик поиска ссылок

// Библиотека.ДобавитьОбработчикПоискаСсылок(ТипИсточника, ТипПриемника, ФункцияПоиска, Модуль);
Библиотека.ДобавитьОбработчикПоискаСсылок("СправочникСсылка.МойСправочник", "СправочникСсылка.МойЗагружаемыйСправочник", "МояФункцияПоискаСсылок", ЭтотОбъект)

где:

  • Библиотека - Обработка-объект библиотеки преобразования данных (этой библиотеки)
  • ТипИсточника (Строка) - имя типа десериализуемой ссылки
  • ТипПриемника (Строка) - имя типа искомой ссылки
  • ФункцияПоиска (Строка) - имя функция поиска
  • Модуль (Модуль) - модуль, содержащий функцию поиска
Дополнение данных после десериализации

При десериализации данных возможно добавление обработчика, позволяющего выполнить дополнительную обработку десериализованых данных, для этого необходимо в модуле из которого выполняется десериализация, создать процедуру вида:

&НаСервере
Процедура МойОбработчикПослеЗагрузкиТипа(Объект, СтруктураОбъекта) Экспорт
    // Код обработки
    // Объект.Комментарий = "Объект загружен обработкой преобразования данных";
КонецПроцедуры

где:

  • Объект (Объект, НаборЗаписей) - десериализованый объект
  • СтруктураОбъекта (Структура) - данные объекта до десериализации

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

// Библиотека.ДобавитьОбработчикПослеЗагрузкиТипа(ТипИсточника, ПроцедураОбработки, Модуль)
Библиотека.ДобавитьОбработчикПослеЗагрузкиТипа("СправочникОбъект.МойСправочник", "МойОбработчикПослеЗагрузкиТипа", ЭтотОбъект)

где:

  • Библиотека - Обработка-объект библиотеки преобразования данных (этой библиотеки)
  • ТипИсточника (Строка) - имя типа десериализуемого значения
  • ПроцедураОбработки (Строка) - имя процедуры обработки
  • Модуль (Модуль) - модуль, содержащий процедуру обработки

Прикладные объекты (регистры)

При преобразовании регистров могут быть использованы фильтры свойств. Используется единый набор параметров:

  • НаборЗаписей - преобразуемый/восстанавливаемый набор записей регистра
  • СтруктураОбъекта - результат преобразования / источник для восстановления
  • СписокСвойств - список свойств, которые попадут в результат преобразования
  • ИсключаяСвойства - список свойств, которые не будут преобразованы (приоритет выше чем у СписокСвойств)

  • НаборЗаписейРегистраСведенийВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
  • НаборЗаписейРегистраСведенийИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • НаборЗаписейРегистраНакопленияВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
  • НаборЗаписейРегистраНакопленияИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • НаборЗаписейРегистраБухгалтерииВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
  • НаборЗаписейРегистраБухгалтерииИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

  • НаборЗаписейРегистраРасчетаВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)
  • НаборЗаписейРегистраРасчетаИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)

Коллекции

При преобразовании коллекций выполняется рекурсивное преобразование всех вложенных значений с использованием функций ЗначениеВСтруктуру()/ЗначениеИзСтруктуры().

  • СтруктураВСтруктуру(Значение)
  • СтруктураИзСтруктуры(СтруктураЗначения)

  • МассивВСтруктуру(Значение)
  • МассивИзСтруктуры(СтруктураЗначения)

  • СоответствиеВСтруктуру(Значение)
  • СоответствиеИзСтруктуры(СтруктураЗначения)

  • СписокЗначенийВСтруктуру(Значение)
  • СписокЗначенийИзСтруктуры(СтруктураЗначения)

  • ТаблицаЗначенийВСтруктуру(Значение, СписокСвойств, ИсключаяСвойства)
  • ТаблицаЗначенийИзСтруктуры(СтруктураЗначения, СписокСвойств, ИсключаяСвойства)

  • ДеревоЗначенийВСтруктуру(Значение, СписокСвойств, ИсключаяСвойства)
  • ДеревоЗначенийИзСтруктуры(СтруктураЗначения, СписокСвойств, ИсключаяСвойства)

Методы преобразования данных формы

  • ДанныеФормыВСтруктуру(Форма, ТолькоСохраняемые, СписокСвойств, ИсключаяСвойства)
  • ДанныеФормыИзСтруктуры(Форма, СтруктураДанных, ПроверятьИмяФормы, СоздаватьРеквизиты, СписокСвойств, ИсключаяСвойства)

Методы преобразования объектов СКД

  • СКДВСтруктуру(Объект)
  • СКДИзСтруктуры(Объект, СтруктураОбъекта)

  • НастройкиСКДВСтруктуру(Объект)
  • НастройкиСКДИзСтруктуры(Объект, СтруктураОбъекта)

Методы чтения/записи JSON

При чтении записи JSON выполняется преобразование типов не совместимых с JSON в/из строки. Для преобразования "неизвестных" типов используется ЗначениеВСтрокуВнутр(). Значения типа "Дата" записываются/читаются в формате Microsoft.

  • ЗаписатьОписаниеОбъектаВJSON(ОписаниеОбъекта)
  • ПрочитатьОписаниеОбъектаИзJSON(ТекстОписанияОбъекта, СвойстваСоЗначениемДата)

About

Data serialization for 1C / Библиотека сериализации / десериализации данных 1С

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors