Поиск несериализуемых значений при помещении в хранилище

02.03.16

Разработка - Групповая разработка (Git, хранилище)

В статье разобран пример, как найти несериализуемые значения в случае помещения в хранилище коллекций, содержащих вложенные элементы. В качестве хранилищ рассмотрены временное хранилище значений и переменные типа ХранилищеЗначения.

Введение

Платформа 8.3.7.1917.

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

При помещении во временное хранилище значений, сериализация которых не поддерживается, возникает ошибка. Текст ошибки зависит от типа переменной. Рассмотрим подробнее каждый из типов.

Хранилище значения

При помещении значения в хранилище конструктором Новый ХранилищеЗначения(<Значение>, <АлгоритмСжатияДанных>) может возникать ошибка "Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент".

Если в качестве помещаемого значения выступает несериализуемый элемент, то проблем не возникает - мы сразу видим, что он не сериализуется и предпринимаем необходимые действия в зависимости от потребности автоматизации.

Если в качестве помещаемого значения выступает сериализуемая коллекция (например, Структура) с вложенными элементами, то поиск конкретного не сериализуемого значения может принести немало хлопот.

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

Временное хранилище

При помещении значения во временное хранилище методом ПоместитьВоВременноеХранилище(<Данные>, <Адрес>) может возникать ошибка "Переданное значение не может быть помещено во временное хранилище".

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

Т.е. вот такой код выдает ошибку:

ПоместитьВоВременноеХранилище(Метаданные.Справочники);

А такой - нет:

ПоместитьВоВременноеХранилище(Новый Структура("мдСправочники", Метаданные.Справочники));

Не знаю, это баг или фича, пока отправил письмо на v8 с просьбой признать ошибку. По результатам ответа, пополню статью.

В нижепредставленной функции организована проверка и на помещение во временное хранилище. Т.к. механизм очевидно другой, то реализован специальный параметр, который явно указывает какое хранилище проверяем.

Функции поиска несериалиуемого значения

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

// Функция - Получить не сериализуемые объекты
//
// Параметры:
//  Объект				 - объект, для которого требуется найти несериализуемые объекты
//  ВариантСериализации	 - вариант сериализации при поиске значений. Может принимать значения:
//							"ХранилищеЗначения"  - используется конструктор объекта ХранилищеЗначения
//							"ВременноеХранилище" - используется метод ПоместитьВоВременноеХранилище
// 
// Возвращаемое значение:
//  Массив - массив путей до несериализуемых объектов
//
Функция ПолучитьНеСериализуемыеОбъекты(Объект, ВариантСериализации = "ХранилищеЗначения") Экспорт

	МассивПутей = Новый Массив();
	
	ДобавитьВМассивПутейНесериализуемыйОбъект(МассивПутей, Объект, ВариантСериализации);
	
	Возврат МассивПутей;

КонецФункции // ПолучитьНеСериализуемыеОбъекты()

Вторая - служебная рекурсия для определения путей несериализуемых объектов:

Процедура ДобавитьВМассивПутейНесериализуемыйОбъект(МассивПутей, Родитель, ВариантСериализации, ПутьКРодителю = "")

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

КонецПроцедуры // ДобавитьВМассивПутейНесериализуемыйОбъект()

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

хранилище значения временное хранилище сериализация

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

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

См. также

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    13460    115    0    

80

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Системный администратор Разработчик 1С 8.3 1С 8.5 Бесплатно (free)

В прошлой статье у ERP оставалось 89 отказов загрузки, у ЗУП — 19. Теперь обе конфигурации совпали с эталонами, а собранные файлы прошли круг через платформу. Развертка выделена в открытый репозиторий cf-unwrapper: библиотека на Rust и консольная утилита. Показываю результаты, объясняю границы «100%» и приглашаю к проверкам и развитию проекта.

02.11.2026    262    oyti    1    

1

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Россия Бесплатно (free)

Практическое руководство для команд, которые хотят уйти с хранилища конфигурации на git, не переходя на новую среду разработки. Подойдёт разработчикам и тимлидам, которые настраивают командную разработку на типовых и собственных конфигурациях.

02.11.2026    518    vanya_gonchar    2    

5

Файловый обмен (TXT, XML, DBF), FTP DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Системный администратор Разработчик 1С 8.5 Бесплатно (free)

В прошлой статье я выгрузил Бухгалтерию в XML байт в байт и спросил, на чем проверить дальше. Вы ответили: ERP, старые релизы, зарплата. Прогнал пять конфигураций, от клиента ЭДО до ERP на 120 тысяч файлов. Рассказываю, что сломалось после Бухгалтерии, почему эталону платформы нельзя верить на слово, как выгрузить одну конфигурацию в формат трех версий платформы - и почему cf-конвертер становится отдельным продуктом, Разверткой.

02.11.2026    342    oyti    2    

3

Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Стажер 1С 8.3 Абонемент ($m)

Два разработчика, по десять правок «Нано-УТ 2.0» в git: длинные ветки против слияния после каждой правки, 22 слияния с загрузкой main в чистую базу. ConfigDumpInfo.xml конфликтовал в 11 слияниях из 11, построчное объединение ломало XML и модули. Показываю, что убрать строкой в .gitattributes, что разбирать целыми вставками и как увидеть конфликты до слияния. Прилагаются инструмент с 38 тестами и материалы опыта.

1 стартмани

29.10.2026    366    Ninel_S    3    

-1

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С 8.5 Бесплатно (free)

Выгрузка типовой Бухгалтерии в XML через базу занимает больше четырёх минут. Я написал движок, который читает файл конфигурации напрямую и выгружает его за 35 секунд, совпадая с выгрузкой платформы байт в байт во всех 90 385 файлах. Загрузка обратно тоже работает: круг через платформу совпадает полностью. Рассказываю, как ускоряли, как проверяем и что при загрузке XML теряет сама платформа. А в конце спрашиваю, нужно ли это кому-то, кроме меня, и на какой конфигурации проверить следующей.

27.10.2026    908    oyti    20    

16

Рефакторинг и качество кода Групповая разработка (Git, хранилище) Разработчик 1С 8.3 Абонемент ($m)

Скрипт на Python посчитал метрики 2711 общих модулей УТ 11.5: 26 модулей длиннее 10 000 строк кода. Проверила счёт на синтетических модулях и показала, где рейтинг ошибается: самый длинный модуль оказался в нём ниже девяти коротких. Для разработчиков 1С. В архиве скрипт, тесты и журналы.

1 стартмани

26.10.2026    404    Ninel_S    8    

-3

Групповая разработка (Git, хранилище) Разработчик 1С 8.3 Абонемент ($m)

Общие модули 1С вынесла в подмодуль Git и подключила к двум проектам на выгрузке «Нано-УТ» и платформе 8.3.27. Подмодуль на весь каталог CommonModules загружается; клон без --recursive даёт код 1, а забытый указатель и смена ветки молча дают базу не той версии. Переименованная процедура прошла /CheckModules при 28 вызовах. В архиве скрипты, диагностика подмодулей, тесты и журналы.

1 стартмани

26.10.2026    380    Ninel_S    0    

-1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dtfmffff 16.01.17 10:20 Сейчас в теме
Долго экспериментировал с сохранением несериализуемых значений между серверными вызовами.
Спасибо, это работает: ПоместитьВоВременноеХранилище(Новый Структура("мдСправочники", Метаданные.Справочники));
2. valentinanb 18.08.17 15:04 Сейчас в теме
Спасибо огромное!
3. angabanga5 01.08.25 15:42 Сейчас в теме
у меня ругается на таблицу значений. а она сериализуется, в чем прикол не ясно, эта обработка не показывает
4. angabanga5 01.08.25 16:43 Сейчас в теме
(3) а понял в самой таблице приколы были
Для отправки сообщения требуется регистрация/авторизация