Очень хочется в консоле кода и обработке строки результата консоли запросов иметь возможность генерации кода заполнения выбранного типа объекта, на основе его метаданных.
т.е. выбрали в всплывающем окне вид объекта (например справочник валюты)и в текстовом поле сформировался например такой код
Код
НОбъект=Справочники.ВалютыСоздатьЭлемент();
НОбъект.Код= ; //(Строка(3)) Цифровой код
НОбъект.Наименование= ; //(Строка(10)) Символьный код
НОбъект.ЗагружаетсяИзИнтернета= ; //(Булево) Загружается из Интернета
НОбъект.НаименованиеПолное= ; //(Строка(50)) Наименование валюты
НОбъект.Наценка= ; //(Число(10.2)) Наценка
НОбъект.ОсновнаяВалюта= ; //(Справочники.Валюты) Основная валюта
НОбъект.ПараметрыПрописи= ; //(Строка(200)) Параметры прописи
НОбъект.ФормулаРасчетаКурса= ; //(Строка(100)) Формула расчета курса
НОбъект.СпособУстановкиКурса= ; //(Перечисления.СпособыУстановкиКурсаВалюты) Способ установки курса
НстрПредставления = НОбъект.Представления.Добавить(); //Представления
НстрПредставления.КодЯзыка= ; //(Строка(10)) Код языка
НстрПредставления.ПараметрыПрописи= ; //(Строка(200)) Параметры прописи
НОбъект.Записать();
Во вложении файл с готовым кодом генерации подобной истории.Добавлено (16.08.2022, 17:54)
---------------------------------------------
В предыдущем сообщении не приложился файл с кодом. Попытка №2
Добавлено (16.08.2022, 17:56)
---------------------------------------------
В общем файл не прикладывается ( Выкладываю код в сообщении
Код
Функция ПолучитьПриведенноеПолноеИмяМетаданных(ПолноеИмяМетаданных)
ПозицияТочки=Найти(ПолноеИмяМетаданных,".");
Если ПозицияТочки=0 Тогда
_Возврат=ПолноеИмяМетаданных;
Иначе
ТипОбъекта=Лев(ПолноеИмяМетаданных,ПозицияТочки-1);
Если ТипОбъекта="Справочник" Тогда
_Возврат="Справочники";
ИначеЕсли ТипОбъекта="Документ" Тогда
_Возврат="Документы";
ИначеЕсли ТипОбъекта="Перечисление" Тогда
_Возврат="Перечисления";
ИначеЕсли ТипОбъекта="ПланВидовХарактеристик" Тогда
_Возврат="ПланыВидовХарактеристик";
ИначеЕсли ТипОбъекта="ПланСчетов" Тогда
_Возврат="ПланыСчетов";
ИначеЕсли ТипОбъекта="ПланВидовРасчета" Тогда
_Возврат="ПланыВидовРасчета";
ИначеЕсли ТипОбъекта="Задача" Тогда
_Возврат="Задачи";
ИначеЕсли ТипОбъекта="ПланОбмена" Тогда
_Возврат="ПланыОбмена";
Иначе
_Возврат=ТипОбъекта;
КонецЕсли;
_Возврат=_Возврат+Прав(ПолноеИмяМетаданных,СтрДлина(ПолноеИмяМетаданных)-ПозицияТочки+1);
КонецЕсли;
Возврат _Возврат;
КонецФункции
Функция ПолучитьТекстОписаниеТипа(ОписаниеТипа)
_Возврат="";
Типы=ОписаниеТипа.Типы();
КоличествоТипов=Типы.Количество();
Если КоличествоТипов<6 Тогда
Для Каждого Тип Из Типы Цикл
Если Тип=Тип("Строка") Тогда
_Возврат=_Возврат+"Строка("+ОписаниеТипа.КвалификаторыСтроки.Длина+"),";
ИначеЕсли Тип=Тип("Число") Тогда
_Возврат=_Возврат+"Число("+ОписаниеТипа.КвалификаторыЧисла.Разрядность+"."+ОписаниеТипа.КвалификаторыЧисла.РазрядностьДробнойЧасти+"),";
Иначе
МетаданныеТипа=Метаданные.НайтиПоТипу(Тип);
Если МетаданныеТипа<>Неопределено Тогда
_Возврат=_Возврат+ПолучитьПриведенноеПолноеИмяМетаданных(Метаданные.НайтиПоТипу(Тип).ПолноеИмя())+",";
Иначе
_Возврат=_Возврат+Тип+",";
КонецЕсли;
КонецЕсли;
КонецЦикла;
_Возврат=Лев(_Возврат,СтрДлина(_Возврат)-1);
Иначе
_Возврат=""+КоличествоТипов+" разных типов";
КонецЕсли;
Возврат _Возврат;
КонецФункции
Процедура ДобавитьСтрокуРеквизита(ТекстКода,ИмяПеременнойВладельца,МетаданныеРеквизита)
ТекстКода=ТекстКода+"
|"+ИмяПеременнойВладельца+"."+МетаданныеРеквизита.Имя+"="+
//"."+МетаданныеРеквизита.Имя+
" ; //("+ПолучитьТекстОписаниеТипа(МетаданныеРеквизита.Тип)+") "+МетаданныеРеквизита.Синоним;
КонецПроцедуры
Функция ПолучитьТекстЗаполненияОбъекта(МетаданныеОбъекта)
_Возврат="";
Если Метаданные.Справочники.Содержит(МетаданныеОбъекта) Тогда
_Возврат="НОбъект=Справочники."+МетаданныеОбъекта.Имя+".СоздатьЭлемент();";
Если МетаданныеОбъекта.ДлинаКода<>0 Тогда
ДобавитьСтрокуРеквизита(_Возврат,"НОбъект",МетаданныеОбъекта.СтандартныеРеквизиты.Код);
КонецЕсли;
Если МетаданныеОбъекта.ДлинаНаименования<>0 Тогда
ДобавитьСтрокуРеквизита(_Возврат,"НОбъект",МетаданныеОбъекта.СтандартныеРеквизиты.Наименование);
КонецЕсли;
Если МетаданныеОбъекта.Иерархический Тогда
ДобавитьСтрокуРеквизита(_Возврат,"НОбъект",МетаданныеОбъекта.СтандартныеРеквизиты.Родитель);
КонецЕсли;
Если МетаданныеОбъекта.Владельцы.Количество()>0 Тогда
ДобавитьСтрокуРеквизита(_Возврат,"НОбъект",МетаданныеОбъекта.СтандартныеРеквизиты.Владелец);
КонецЕсли;
ИначеЕсли Метаданные.Документы.Содержит(МетаданныеОбъекта) Тогда
_Возврат="НОбъект = Документы."+МетаданныеОбъекта.Имя+".СоздатьДокумент();";
ДобавитьСтрокуРеквизита(_Возврат,"НОбъект",МетаданныеОбъекта.СтандартныеРеквизиты.Номер);
ДобавитьСтрокуРеквизита(_Возврат,"НОбъект",МетаданныеОбъекта.СтандартныеРеквизиты.Дата);
КонецЕсли;
_Возврат=_Возврат+"
|";
Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл
ДобавитьСтрокуРеквизита(_Возврат,"НОбъект",Реквизит);
КонецЦикла;
Для Каждого ТабличнаяЧасть Из МетаданныеОбъекта.ТабличныеЧасти Цикл
_Возврат=_Возврат+"
|";
ИмяСтрокиТЧ="Нстр"+ТабличнаяЧасть.Имя;
_Возврат=_Возврат+"
|"+ИмяСтрокиТЧ+" = НОбъект."+ТабличнаяЧасть.Имя+".Добавить(); //"+ТабличнаяЧасть.Синоним;
Для Каждого РеквизитТЧ Из ТабличнаяЧасть.Реквизиты Цикл
ДобавитьСтрокуРеквизита(_Возврат,ИмяСтрокиТЧ,РеквизитТЧ);
КонецЦикла;
КонецЦикла;
_Возврат=_Возврат+"
|НОбъект.Записать();";
Возврат _Возврат;
КонецФункции
ТекстКода=ПолучитьТекстЗаполненияОбъекта(Метаданные.Документы.АвансовыйОтчет);