{"id":20019722,"url":"https://github.com/arkuznetsov/serlib1c","last_synced_at":"2025-04-04T22:08:34.153Z","repository":{"id":37773919,"uuid":"124633255","full_name":"arkuznetsov/SerLib1C","owner":"arkuznetsov","description":"Data serialization for 1C / Библиотека сериализации / десериализации данных 1С","archived":false,"fork":false,"pushed_at":"2025-02-24T08:48:08.000Z","size":1908,"stargazers_count":144,"open_issues_count":4,"forks_count":28,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-03-28T21:08:51.014Z","etag":null,"topics":["1c","1c-enterprise","bsl","hacktoberfest","json","serialization","serializer"],"latest_commit_sha":null,"homepage":"","language":"1C Enterprise","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arkuznetsov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-10T07:32:20.000Z","updated_at":"2025-03-24T13:43:25.000Z","dependencies_parsed_at":"2025-02-07T22:15:56.217Z","dependency_job_id":null,"html_url":"https://github.com/arkuznetsov/SerLib1C","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2FSerLib1C","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2FSerLib1C/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2FSerLib1C/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arkuznetsov%2FSerLib1C/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arkuznetsov","download_url":"https://codeload.github.com/arkuznetsov/SerLib1C/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247256115,"owners_count":20909240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["1c","1c-enterprise","bsl","hacktoberfest","json","serialization","serializer"],"created_at":"2024-11-13T08:28:33.101Z","updated_at":"2025-04-04T22:08:34.138Z","avatar_url":"https://github.com/arkuznetsov.png","language":"1C Enterprise","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# 1C Serialization Library\r\n\r\n\u003ca href=\"https://checkbsl.org\"\u003e\u003cimg alt=\"Checked by Silver Bulleters SonarQube BSL plugin\" src=\"https://web-files.do.bit-erp.ru/sonar/b_t.png\" align=\"right\" style=\"width:400px\"/\u003e\u003c/a\u003e\r\n\r\n[![GitHub release](https://img.shields.io/github/release/ArKuznetsov/SerLib1C.svg?style=flat-square)](https://github.com/ArKuznetsov/SerLib1C/releases)\r\n[![GitHub license](https://img.shields.io/github/license/ArKuznetsov/SerLib1C.svg?style=flat-square)](https://github.com/ArKuznetsov/SerLib1C/blob/develop/LICENSE)\r\n[![GitHub Releases](https://img.shields.io/github/downloads/ArKuznetsov/SerLib1C/latest/total?style=flat-square)](https://github.comArKuznetsov/SerLib1C/releases)\r\n[![GitHub All Releases](https://img.shields.io/github/downloads/ArKuznetsov/SerLib1C/total?style=flat-square)](https://github.com/ArKuznetsov/SerLib1C/releases)\r\n\r\n[![Build Status](https://img.shields.io/github/workflow/status/ArKuznetsov/SerLib1C/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%20%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0)](https://github.com/arkuznetsov/yard/actions/)\r\n[![Quality Gate](https://open.checkbsl.org/api/project_badges/measure?project=SerLib1C\u0026metric=alert_status)](https://open.checkbsl.org/dashboard/index/SerLib1C)\r\n[![Coverage](https://open.checkbsl.org/api/project_badges/measure?project=SerLib1C\u0026metric=coverage)](https://open.checkbsl.org/dashboard/index/SerLib1C)\r\n[![Tech debt](https://open.checkbsl.org/api/project_badges/measure?project=SerLib1C\u0026metric=sqale_index)](https://open.checkbsl.org/dashboard/index/SerLib1C)\r\n\r\n## Библиотека сериализации 1С (обработка)\r\n\r\nНабор процедур и функций для сериализации/десериализации данных 1С и объектов СКД в простые структуры данных (Структура, соответствие, массив).\r\n\r\n### Варианты использования\r\n\r\n- замена платформенных функций сериализации, например, при сохранении версий объектов\r\n- передача данных по протоколу HTTP\r\n- основа для простых обработок обмена данными\r\n- основа для получения отчетов из внешних ИБ 1С\r\n\r\n### Особенности\r\n\r\n- разработка ведется в формате EDT\r\n- процедуры/функции поддерживают ограничение состава полей\r\n- табличные части преобразуются в служебный элемент структуры с ключом \"__ТЧ\"\r\n- при десериализации приоритетными являются метаданные, т.е. не возникает ошибок при изменении структуры данных конфигурации\r\n- поддерживается возможность назначения процедур дополнения ссылочных данных при выгрузке\r\n- поддерживается возможность переопределения функций поиска ссылочных данных\r\n\r\n### Особенности преобразования объектов СКД\r\n\r\n1. ПутьКДанным пользовательских полей СКД формируется системой автоматически, поэтому:\r\n\r\n   - после загрузки СКД значение может отличаться на номер поля\r\n   - если в исходной СКД значение было на языке, отличном от языка целевой, то новое значение будет на языке целевой СКД\r\n\r\n2. Поле \"Обязательное\" роли поля набора данных сейчас устанавливается принудительно, хотя в документации отмечено как \"Только чтение\" (EDT тоже ругается)\r\n3. Поле \"Схема\" вложенной схемы компоновки данных при добавлении имеет тип неопределено и принудительно устанавливается значение \"Новый СхемаКомпоновкиДанных()\", хотя в документации отмечено как \"Только чтение\" (EDT тоже ругается)\r\n4. В исходных настройках СКД в полях ТипЗначения составного типа могут встречаться дубли типов \u003cБизнесПроцесс....\u003e при загрузке дубли схлопываются\r\n5. В исходных настройках СКД иногда встречается некорректный тип элементов свойства \"ПараметрыДанных\" объекта \"НастройкиКомпоновкиДанных\", вместо \"ЗначениеПараметраНастроекКомпоновкиДанных\" используется \"ЗначениеПараметраКомпоновкиДанных\". После выгрузки загрузки СКД, все элементы поля \"ПараметрыДанных\" будут приведены к типу \"ЗначениеПараметраНастроекКомпоновкиДанных\".\r\n6. Если в исходных настройках поле типа \"Дата\" имеет значение Неопределено, то при загрузке будет установлена пустая дата\r\n7. Если в исходных настройках поле типа \"Строка\" имеет значение Неопределено, то при загрузке будет установлена пустая строка\r\n8. Не заполняется поле \"Идентификатор\" в элементах структуры настроек (Группировки, Таблицы, Диаграммы), т.к. имеет признак \"Только чтение\", а автоматического присвоения значения не происходит. Влияние на работоспособность СКД пока не проверялось.\r\n\r\n### Методы преобразования прикладных объектов 1С\r\n\r\n#### Общие методы\r\n\r\n- ОбъектВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)\r\n- ЗаполнитьОбъектИзСтруктуры(Объект, СтруктураОбъекта, СписокСвойств, ИсключаяСвойства)\r\n- СоздатьОбъектИзСтруктуры(СтруктураОбъекта, УстановитьСсылку, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- СсылкаВСтруктуру(Значение)\r\n- СсылкаИзСтруктуры(СтруктураЗначения)\r\n\r\n___\r\n\r\n- НаборЗаписейРегистраВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)\r\n- ЗаполнитьНаборЗаписейРегистраИзСтруктуры(НаборЗаписей, СтруктураНабораЗаписей, СписокСвойств, ИсключаяСвойства)\r\n\r\n- СоздатьНаборЗаписейРегистраИзСтруктуры(СтруктураНабораЗаписей, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- ДвиженияДокументаВСтруктуру(Объект, СписокРегистров, ИсключаяРегистры)\r\n- ДвиженияДокументаИзСтруктуры(Объект, СтруктураДвижений, СписокРегистров, ИсключаяРегистры)\r\n\r\n___\r\n\r\n- ЗначениеВСтруктуру(Значение)\r\n- ЗначениеИзСтруктуры(СтруктураЗначения, ПолучатьБитыеСсылки)\r\n\r\n___\r\n\r\n#### Прикладные объекты (ссылочные)\r\n\r\nПри преобразовании ссылочных объектов могут быть использованы фильтры свойств. Используется единый набор параметров:\r\n\r\n- **Объект** - преобразуемый/восстанавливаемый объект\r\n- **СтруктураОбъекта** - результат преобразования / источник для восстановления\r\n- **СписокСвойств** - список свойств, которые попадут в результат преобразования\r\n- **ИсключаяСвойства** - список свойств, которые не будут преобразованы (приоритет выше чем у СписокСвойств)\r\n\r\n___\r\n\r\n- СправочникВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)\r\n- СправочникИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- ПланСчетовВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)\r\n- ПланСчетовИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- ПланВидовХарактеристикВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)\r\n- ПланВидовХарактеристикИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- ПланВидовРасчетаВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)\r\n- ПланВидовРасчетаИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- ДокументВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)\r\n- ДокументИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- БизнесПроцессВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)\r\n- БизнесПроцессИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- ЗадачаВСтруктуру(Объект, СписокСвойств, ИсключаяСвойства)\r\n- ЗадачаПроцессИзСтруктуры(Объект, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n##### Дополнение ссылочных данных при выгрузке\r\n\r\nПри выгрузке ссылочных данных возможно переопределение процедуры, дополняющей содержимое описания ссылки, для этого необходимо в модуле, выполняющем выгрузку, создать процедуру вида:\r\n\r\n```bsl\r\n\r\n\u0026НаСервере\r\nПроцедура МояПроцедураДополнения(ОписаниеЗначения, Значение) Экспорт\r\n    // Код дополнения\r\n    // ОписаниеЗначения.Вставить(\"КодЭлемента\", Значение.Код);\r\nКонецПроцедуры\r\n\r\n```\r\n\r\nгде:\r\n\r\n- ОписаниеЗначения - Структура   - Структура содержащая поля описания ссылки\r\n- Значение         - ЛюбаяСсылка - ссылка, для которой получено описание\r\n\r\nИ перед выполнением выгрузки данных добавить обработчик дополнения ссылок\r\n\r\n```bsl\r\n\r\nБиблиотека.ДобавитьПравилоВыгрузкиТипа(\"Справочник.МойСправочник\", \"МояПроцедураДополнения\", ЭтотОбъект)\r\n\r\n```\r\n\r\nгде:\r\n\r\n- Библиотека - Обработка-объект библиотеки преобразования данных (этой библиотеки)\r\n\r\n##### Переопределение поиска ссылочных данных при загрузке\r\n\r\nПри загрузке ссылочных данных возможно переопределение функции поиска ссылок, для этого необходимо в модуле, выполняющем загрузку, создать функцию вида:\r\n\r\n```bsl\r\n\r\n\u0026НаСервере\r\nФункция МояФункцияПоискаСсылок(ОписаниеВида, МетаОбъект, ОписаниеЗначения) Экспорт\r\n    // Код поиска ссылки\r\n    // НайденнаяСсылка = Справочники.МойЗагружаемыйСправочник.НайтиПоКоду(ОписаниеЗначения.КодЭлемента);\r\n    // Возврат НайденнаяСсылка;\r\nКонецФункции\r\n\r\n```\r\n\r\nгде доступны параметры:\r\n\r\n- ОписаниеВида     - Структура           - Структура содержащая описание вида загружаемой ссылки\r\n- МетаОбъект       - ОписаниеМетаданных  - Описание метаданных загружаемой ссылки\r\n- ОписаниеЗначения - Структура           - Структура содержащая поля описания искомой ссылки\r\n\r\nИ перед выполнением выгрузки данных добавить обработчик дополнения ссылок\r\n\r\n```bsl\r\n\r\nБиблиотека.ДобавитьПравилоЗагрузкиТипа(\"Справочник.МойСправочник\", \"Справочник.МойЗагружаемыйСправочник\", \"МояФункцияПоискаСсылок\", ЭтотОбъект)\r\n\r\n```\r\n\r\nгде:\r\n\r\n- Библиотека - Обработка-объект библиотеки преобразования данных (этой библиотеки)\r\n\r\n#### Прикладные объекты (регистры)\r\n\r\nПри преобразовании регистров могут быть использованы фильтры свойств. Используется единый набор параметров:\r\n\r\n- **НаборЗаписей** - преобразуемый/восстанавливаемый набор записей регистра\r\n- **СтруктураОбъекта** - результат преобразования / источник для восстановления\r\n- **СписокСвойств** - список свойств, которые попадут в результат преобразования\r\n- **ИсключаяСвойства** - список свойств, которые не будут преобразованы (приоритет выше чем у СписокСвойств)\r\n\r\n___\r\n\r\n- НаборЗаписейРегистраСведенийВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)\r\n- НаборЗаписейРегистраСведенийИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- НаборЗаписейРегистраНакопленияВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)\r\n- НаборЗаписейРегистраНакопленияИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- НаборЗаписейРегистраБухгалтерииВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)\r\n- НаборЗаписейРегистраБухгалтерииИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- НаборЗаписейРегистраРасчетаВСтруктуру(НаборЗаписей, СписокСвойств, ИсключаяСвойства)\r\n- НаборЗаписейРегистраРасчетаИзСтруктуры(НаборЗаписей, СтруктураОбъекта, ПолучатьБитыеСсылки, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n#### Коллекции\r\n\r\nПри преобразовании коллекций выполняется рекурсивное преобразование всех вложенных значений с использованием функций ЗначениеВСтруктуру()/ЗначениеИзСтруктуры().\r\n\r\n- СтруктураВСтруктуру(Значение)\r\n- СтруктураИзСтруктуры(СтруктураЗначения)\r\n\r\n___\r\n\r\n- МассивВСтруктуру(Значение)\r\n- МассивИзСтруктуры(СтруктураЗначения)\r\n\r\n___\r\n\r\n- СоответствиеВСтруктуру(Значение)\r\n- СоответствиеИзСтруктуры(СтруктураЗначения)\r\n\r\n___\r\n\r\n- СписокЗначенийВСтруктуру(Значение)\r\n- СписокЗначенийИзСтруктуры(СтруктураЗначения)\r\n\r\n___\r\n\r\n- ТаблицаЗначенийВСтруктуру(Значение, СписокСвойств, ИсключаяСвойства)\r\n- ТаблицаЗначенийИзСтруктуры(СтруктураЗначения, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n- ДеревоЗначенийВСтруктуру(Значение, СписокСвойств, ИсключаяСвойства)\r\n- ДеревоЗначенийИзСтруктуры(СтруктураЗначения, СписокСвойств, ИсключаяСвойства)\r\n\r\n___\r\n\r\n### Методы преобразования данных формы\r\n\r\n- ДанныеФормыВСтруктуру(Форма, ТолькоСохраняемые, СписокСвойств, ИсключаяСвойства)\r\n- ДанныеФормыИзСтруктуры(Форма, СтруктураДанных, ПроверятьИмяФормы, СоздаватьРеквизиты, СписокСвойств, ИсключаяСвойства)\r\n\r\n### Методы преобразования объектов СКД\r\n\r\n- СКДВСтруктуру(Объект)\r\n- СКДИзСтруктуры(Объект, СтруктураОбъекта)\r\n\r\n___\r\n\r\n- НастройкиСКДВСтруктуру(Объект)\r\n- НастройкиСКДИзСтруктуры(Объект, СтруктураОбъекта)\r\n\r\n___\r\n\r\n### Методы чтения/записи JSON\r\n\r\nПри чтении записи JSON выполняется преобразование типов не совместимых с JSON в/из строки. Для преобразования \"неизвестных\" типов используется ЗначениеВСтрокуВнутр().\r\nЗначения типа \"Дата\" записываются/читаются в формате Microsoft.\r\n\r\n- ЗаписатьОписаниеОбъектаВJSON(ОписаниеОбъекта)\r\n- ПрочитатьОписаниеОбъектаИзJSON(ТекстОписанияОбъекта, СвойстваСоЗначениемДата)\r\n\r\n___\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farkuznetsov%2Fserlib1c","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farkuznetsov%2Fserlib1c","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farkuznetsov%2Fserlib1c/lists"}