1С 8.3 Переместить объект в соответствие
Данные > Примеры кода 1С > 1С 8.3 Соответствие
Перейти в раздел примеры кода 1С 8.3:
Функция, выполняющая перемещение объекта в соответствие. Есть также обратная функция - см.ссылку в шапке.
Конвертация объекта в соответствие в 1С 8.3 от avаlаkh:
Функция ПереместитьОбъектВСоответствие(Знач ТекущийОбъект, МассивЭлементов=Неопределено) Экспорт
// Функция ПроверкаНаЗначениеПростогоТипа: https://koder.by/proverka_na_znachenie_prostogo_tipa.php
Если МассивЭлементов<>Неопределено И МассивЭлементов.Найти(ТекущийОбъект)<>Неопределено И НЕ ПроверкаНаЗначениеПростогоТипа(ТекущийОбъект) Тогда
Возврат Строка(ТекущийОбъект.Метаданные().ПолноеИмя()+"^"+ТекущийОбъект.УникальныйИдентификатор());
ИначеЕсли МассивЭлементов = Неопределено Тогда
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить(ТекущийОбъект);
КонецЕсли;
МассивЭлементов.Добавить(ТекущийОбъект);
Если ТипЗнч(ТекущийОбъект) = Тип("УникальныйИдентификатор") Тогда
Возврат Строка(ТекущийОбъект);
ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(ТекущийОбъект)) Тогда
Возврат ТекущийОбъект.Метаданные().ПолноеИмя()+"."+Строка(ТекущийОбъект);
КонецЕсли;
Реквизиты = Новый Соответствие();
Для Каждого Реквизит Из ТекущийОбъект.Метаданные().Реквизиты Цикл
Если ПроверкаНаЗначениеПростогоТипа(ТекущийОбъект[Реквизит.Имя])Тогда
Реквизиты.Вставить(Реквизит.Имя, ТекущийОбъект[Реквизит.Имя]);
ИначеЕсли ТипЗнч(ТекущийОбъект[Реквизит.Имя]) = Тип("ХранилищеЗначения") Тогда
Реквизиты.Вставить(Реквизит.Имя, XMLСтрока(ТекущийОбъект[Реквизит.Имя]));
Иначе
Реквизиты.Вставить(Реквизит.Имя, ПереместитьОбъектВСоответствие(ТекущийОбъект[Реквизит.Имя],МассивЭлементов));
КонецЕсли;
КонецЦикла; // таблицы
Для Каждого ТабличнаяЧасть Из ТекущийОбъект.Метаданные().ТабличныеЧасти Цикл
МассивСтрок = Новый Массив;
Строки = Новый Соответствие;
Для Каждого ТекСтрока Из ТекущийОбъект[ТабличнаяЧасть.Имя] Цикл
Для Каждого ТекКолонка Из ТекущийОбъект.Метаданные().ТабличныеЧасти[ТабличнаяЧасть.Имя].Реквизиты Цикл
Если ПроверкаНаЗначениеПростогоТипа(ТекСтрока[ТекКолонка.Имя])Тогда
Строки.Вставить(ТекКолонка.Имя, ТекСтрока[ТекКолонка.Имя]);
ИначеЕсли ТипЗнч(ТекСтрока[ТекКолонка.Имя]) = Тип("ХранилищеЗначения") Тогда
Строки.Вставить(ТекКолонка.Имя, XMLСтрока(ТекСтрока[ТекКолонка.Имя]));
Иначе
Строки.Вставить(ТекКолонка.Имя, ПереместитьОбъектВСоответствие(ТекСтрока[ТекКолонка.Имя],МассивЭлементов));
КонецЕсли;
КонецЦикла;
МассивСтрок.Добавить(Строки);
КонецЦикла;
Реквизиты.Вставить(ТабличнаяЧасть.Имя,МассивСтрок);
КонецЦикла;
Реквизиты.Вставить("ИмяМетаданныеОбъекта",ТекущийОбъект.Метаданные().ПолноеИмя());
Реквизиты.Вставить("УникальныйИдентификатор",Строка(ТекущийОбъект.УникальныйИдентификатор()));
Для Каждого стрРеквизит Из ТекущийОбъект.Метаданные().СтандартныеРеквизиты Цикл
Если ЗначениеЗаполнено(ТекущийОбъект[стрРеквизит.Имя])
И стрРеквизит.Имя<>"Предопределенный" И стрРеквизит.Имя<>"Ссылка" Тогда
Реквизиты.Вставить(стрРеквизит.Имя,ТекущийОбъект[стрРеквизит.Имя]);
КонецЕсли;
КонецЦикла;
Возврат Реквизиты;
КонецФункции
// Функция ПроверкаНаЗначениеПростогоТипа: https://koder.by/proverka_na_znachenie_prostogo_tipa.php
Если МассивЭлементов<>Неопределено И МассивЭлементов.Найти(ТекущийОбъект)<>Неопределено И НЕ ПроверкаНаЗначениеПростогоТипа(ТекущийОбъект) Тогда
Возврат Строка(ТекущийОбъект.Метаданные().ПолноеИмя()+"^"+ТекущийОбъект.УникальныйИдентификатор());
ИначеЕсли МассивЭлементов = Неопределено Тогда
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить(ТекущийОбъект);
КонецЕсли;
МассивЭлементов.Добавить(ТекущийОбъект);
Если ТипЗнч(ТекущийОбъект) = Тип("УникальныйИдентификатор") Тогда
Возврат Строка(ТекущийОбъект);
ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(ТекущийОбъект)) Тогда
Возврат ТекущийОбъект.Метаданные().ПолноеИмя()+"."+Строка(ТекущийОбъект);
КонецЕсли;
Реквизиты = Новый Соответствие();
Для Каждого Реквизит Из ТекущийОбъект.Метаданные().Реквизиты Цикл
Если ПроверкаНаЗначениеПростогоТипа(ТекущийОбъект[Реквизит.Имя])Тогда
Реквизиты.Вставить(Реквизит.Имя, ТекущийОбъект[Реквизит.Имя]);
ИначеЕсли ТипЗнч(ТекущийОбъект[Реквизит.Имя]) = Тип("ХранилищеЗначения") Тогда
Реквизиты.Вставить(Реквизит.Имя, XMLСтрока(ТекущийОбъект[Реквизит.Имя]));
Иначе
Реквизиты.Вставить(Реквизит.Имя, ПереместитьОбъектВСоответствие(ТекущийОбъект[Реквизит.Имя],МассивЭлементов));
КонецЕсли;
КонецЦикла; // таблицы
Для Каждого ТабличнаяЧасть Из ТекущийОбъект.Метаданные().ТабличныеЧасти Цикл
МассивСтрок = Новый Массив;
Строки = Новый Соответствие;
Для Каждого ТекСтрока Из ТекущийОбъект[ТабличнаяЧасть.Имя] Цикл
Для Каждого ТекКолонка Из ТекущийОбъект.Метаданные().ТабличныеЧасти[ТабличнаяЧасть.Имя].Реквизиты Цикл
Если ПроверкаНаЗначениеПростогоТипа(ТекСтрока[ТекКолонка.Имя])Тогда
Строки.Вставить(ТекКолонка.Имя, ТекСтрока[ТекКолонка.Имя]);
ИначеЕсли ТипЗнч(ТекСтрока[ТекКолонка.Имя]) = Тип("ХранилищеЗначения") Тогда
Строки.Вставить(ТекКолонка.Имя, XMLСтрока(ТекСтрока[ТекКолонка.Имя]));
Иначе
Строки.Вставить(ТекКолонка.Имя, ПереместитьОбъектВСоответствие(ТекСтрока[ТекКолонка.Имя],МассивЭлементов));
КонецЕсли;
КонецЦикла;
МассивСтрок.Добавить(Строки);
КонецЦикла;
Реквизиты.Вставить(ТабличнаяЧасть.Имя,МассивСтрок);
КонецЦикла;
Реквизиты.Вставить("ИмяМетаданныеОбъекта",ТекущийОбъект.Метаданные().ПолноеИмя());
Реквизиты.Вставить("УникальныйИдентификатор",Строка(ТекущийОбъект.УникальныйИдентификатор()));
Для Каждого стрРеквизит Из ТекущийОбъект.Метаданные().СтандартныеРеквизиты Цикл
Если ЗначениеЗаполнено(ТекущийОбъект[стрРеквизит.Имя])
И стрРеквизит.Имя<>"Предопределенный" И стрРеквизит.Имя<>"Ссылка" Тогда
Реквизиты.Вставить(стрРеквизит.Имя,ТекущийОбъект[стрРеквизит.Имя]);
КонецЕсли;
КонецЦикла;
Возврат Реквизиты;
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник