1С 8.3 Переместить объект в соответствие - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Переместить объект в соответствие

Данные > Примеры кода 1С > 1С 8.3 Соответствие
Функция, выполняющая перемещение объекта в соответствие. Есть также обратная функция - см.ссылку в шапке.
Конвертация объекта в соответствие в 1С 8.3 от avаlаkh:
Функция ПереместитьОбъектВСоответствие(Знач ТекущийОбъект, МассивЭлементов=Неопределено) Экспорт

   // Функция ПроверкаНаЗначениеПростогоТипа: https://koder.by/proverka_na_znachenie_prostogo_tipa.php

   Если МассивЭлементов<>Неопределено И МассивЭлементов.Найти(ТекущийОбъект)<>Неопределено И НЕ ПроверкаНаЗначениеПростогоТипа(ТекущийОбъект) Тогда
       Возврат Строка(ТекущийОбъект.Метаданные().ПолноеИмя()+"^"+ТекущийОбъект.УникальныйИдентификатор());
   ИначеЕсли МассивЭлементов = Неопределено Тогда
       МассивЭлементов = Новый Массив;
       МассивЭлементов.Добавить(ТекущийОбъект);
   КонецЕсли;

   МассивЭлементов.Добавить(ТекущийОбъект);
   Если ТипЗнч(ТекущийОбъект) = Тип("УникальныйИдентификатор") Тогда
       Возврат Строка(ТекущийОбъект);
   ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(ТекущийОбъект)) Тогда
       Возврат ТекущийОбъект.Метаданные().ПолноеИмя()+"."+Строка(ТекущийОбъект);
   КонецЕсли;

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

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

   Реквизиты.Вставить("ИмяМетаданныеОбъекта",ТекущийОбъект.Метаданные().ПолноеИмя());
   Реквизиты.Вставить("УникальныйИдентификатор",Строка(ТекущийОбъект.УникальныйИдентификатор()));
   Для Каждого стрРеквизит Из ТекущийОбъект.Метаданные().СтандартныеРеквизиты Цикл
       Если ЗначениеЗаполнено(ТекущийОбъект[стрРеквизит.Имя])
           И стрРеквизит.Имя<>"Предопределенный" И стрРеквизит.Имя<>"Ссылка" Тогда
           Реквизиты.Вставить(стрРеквизит.Имя,ТекущийОбъект[стрРеквизит.Имя]);
       КонецЕсли;
   КонецЦикла;

   Возврат Реквизиты;

КонецФункции
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 15.11.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому