Молочников Олег Spb. 2024.
Генератор кода .
Продолжаю серию публикаций, призванных облегчить жизнь программистам .
Часто возникает необходимость написания кода, создающего новые элементы справочников, или новые объекты документов программно, например, при написании обмена данными.
Я предлагаю обработку, которая при указании вида соответствующего справочника на основании метаданных конфигурации, последовательно перебирая реквизиты и табличные части, создаст болванку кода.
Если реквизит Объект Данных не заполнен, то болванку кода удобна для программного копирования существующего объекта:
Обработка оптимизирована по результатам многочисленного написания обработчиков по переносу данных для конвертации данных и брокеров сообщений.
В этой версии добавлены:
- Быстрое открытие документа или справочника по гиперссылке (только управляемые формы).
- Для конфигураций на БСП появилась возможность зарегистрировать обработку в дополнительных обработках что дает возможность получить код создания элемента
или справочника одним нажатием кнопки из любого открытого объекта.
-Для справочников добавляется строка вида:
СсылкаОбъект = Справочники.Должности.ПолучитьСсылку(Новый УникальныйИдентификатор("8183748b-cd62-11e4-869d-0050568b35ac"));
Очень удобно если нужна быстро найти элемент по УИ.
Пример заполнения когда выбран объект (справочник):
СсылкаОбъект = Справочники.ГрафикиОплаты.ПолучитьСсылку(Новый УникальныйИдентификатор("b49127da-752b-11df-b338-0011955cba6b"));
НовыйОбъект = Справочники.ГрафикиОплаты.СоздатьОбъект();
НовыйОбъект.ФормаОплаты=Перечисления.ФормыОплаты.ПустаяСсылка(); //Формы оплаты
НовыйОбъект.ТолькоКредитныеЭтапы=Истина; //Булево
НовыйОбъект.Календарь=Справочники.ПроизводственныеКалендари.ПустаяСсылка(); //Производственный календарь
//---------------------------- ТЧ Этапы-----------------------------------------
//------------ строка 1----------------
НоваяСтрока = НовыйОбъект.Этапы.Добавить();
НоваяСтрока.ВариантОплаты=Перечисления.ВариантыКонтроляОплатыКлиентом.КредитПослеОтгрузки; //Контроль
НоваяСтрока.Сдвиг=21; //Число
НоваяСтрока.ПроцентПлатежа=100; //Число
НоваяСтрока.ПроцентЗалогаЗаТару=0; //Число
НоваяСтрока.ВариантОтсчета=Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки; //Варианты отсчета даты платежа
Пример заполнения когда не выбран объект (справочник):
НовыйОбъект = Справочники.ВнешниеОбработки.СоздатьОбъект();
СтарыйОбъект = НовыйОбъект; // заглушка, поменяйте.
НовыйОбъект.ХранилищеВнешнейОбработки=неопределено; //Хранилище значения
НовыйОбъект.ВидОбработки=Перечисления.ВидыДополнительныхВнешнихОбработок.ПустаяСсылка(); //Виды дополнительных внешних обработок
НовыйОбъект.Комментарий=""; //Строка
НовыйОбъект.КомментарийКФайлуИсточнику=""; //Строка
//ЗаполнитьЗначенияСвойств(НовыйОбъект,СтарыйОбъект," ХранилищеВнешнейОбработки, ВидОбработки, Комментарий, КомментарийКФайлуИсточнику");
Для каждого СтараяСтрока из СтарыйОбъект.Принадлежность цикл
НоваяСтрока = НовыйОбъект.Принадлежность.Добавить();
НоваяСтрока.ПредставлениеОбъекта=""; //Строка
НоваяСтрока.СсылкаОбъекта=неопределено; //Все документы
НоваяСтрока.ТабличнаяЧастьИмя=""; //Строка
НоваяСтрока.ТабличнаяЧастьПредставление=""; //Строка
НоваяСтрока.НастройкиПостроителяДляОтбора=неопределено; //Хранилище значения
НоваяСтрока.ХранилищеВнешнейОбработки=неопределено; //Хранилище значения
НоваяСтрока.ЗаменяемаяПечатнаяФорма=неопределено; //Внешние обработки, Строка
НоваяСтрока.ИмяФайлаПечатнойФормы=""; //Строка
НоваяСтрока.ПредставлениеОтбораПостроителя=""; //Строка
НоваяСтрока.ПредставлениеКнопки=""; //Строка
НоваяСтрока.ДополнительныеПараметрыОбработки=неопределено; //Хранилище значения
НоваяСтрока.МетаданныеОбъекта=""; //Строка
НоваяСтрока.СпособЗапуска=Перечисления.СпособыЗапускаВнешнихОбработокВОтчетахНаБазеУниверсального.ПустаяСсылка(); //Способы запуска внешних обработок в отчетах на базе универсального
НоваяСтрока.ПредставлениеНастроекОбработки=""; //Строка
//ЗаполнитьЗначенияСвойств(НоваяСтрока,СтараяСтрока," ПредставлениеОбъекта, СсылкаОбъекта, ТабличнаяЧастьИмя, ТабличнаяЧастьПредставление, НастройкиПостроителяДляОтбора, ХранилищеВнешнейОбработки, ЗаменяемаяПечатнаяФорма, ИмяФайлаПечатнойФормы, ПредставлениеОтбораПостроителя, ПредставлениеКнопки, ДополнительныеПараметрыОбработки, МетаданныеОбъекта, СпособЗапуска, ПредставлениеНастроекОбработки");
КонецЦикла;
//НовыйОбъект.Принадлежность.Свернуть(" ПредставлениеОбъекта, СсылкаОбъекта, ТабличнаяЧастьИмя, ТабличнаяЧастьПредставление, НастройкиПостроителяДляОтбора, ХранилищеВнешнейОбработки, ЗаменяемаяПечатнаяФорма, ИмяФайлаПечатнойФормы, ПредставлениеОтбораПостроителя, ПредставлениеКнопки, ДополнительныеПараметрыОбработки, МетаданныеОбъекта, СпособЗапуска, ПредставлениеНастроекОбработки","");
Пример заполнения когда не выбран объект (документ):
НовыйДокумент = Документы.Доверенность.СоздатьДокумент();
СтарыйДокумент = НовыйДокумент; // заглушка, поменяйте.
НовыйДокумент.Дата='00010101000000'; //Дата документа
НовыйДокумент.Номер=""; //Номер документа
НовыйДокумент.Организация=Справочники.Организации.ПустаяСсылка(); //Организация
НовыйДокумент.ФизЛицо=Справочники.ФизическиеЛица.ПустаяСсылка(); //Физические лица
НовыйДокумент.БанковскийСчетОрганизации=Справочники.БанковскиеСчета.ПустаяСсылка(); //Банковский счет
НовыйДокумент.Контрагент=Справочники.Контрагенты.ПустаяСсылка(); //Контрагент
НовыйДокумент.ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); //Договор контрагента
НовыйДокумент.Сделка=неопределено; //Счет на оплату поставщика, Заказ поставщику, Заказ покупателя, Счет на оплату покупателю
НовыйДокумент.ДатаДействия='00010101000000'; //Дата
НовыйДокумент.НаПолучениеОт=""; //Строка
НовыйДокумент.ПоДокументу=""; //Строка
НовыйДокумент.Подразделение=Справочники.Подразделения.ПустаяСсылка(); //Подразделение
НовыйДокумент.Комментарий=""; //Строка
НовыйДокумент.Ответственный=Справочники.Пользователи.ПустаяСсылка(); //Пользователь
//ЗаполнитьЗначенияСвойств(НовыйДокумент,СтарыйДокумент," Организация, ФизЛицо, БанковскийСчетОрганизации, Контрагент, ДоговорКонтрагента, Сделка, ДатаДействия, НаПолучениеОт, ПоДокументу, Подразделение, Комментарий, Ответственный");
Для каждого СтараяСтрока из СтарыйДокумент.Товары цикл
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.НаименованиеТовара=""; //Строка
НоваяСтрока.ЕдиницаПоКлассификатору=Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка(); //Классификатор единиц измерения
НоваяСтрока.Количество=0; //Число
//ЗаполнитьЗначенияСвойств(НоваяСтрока,СтараяСтрока," НаименованиеТовара, ЕдиницаПоКлассификатору, Количество");
КонецЦикла;
//НовыйДокумент.Товары.Свернуть(" НаименованиеТовара, ЕдиницаПоКлассификатору, Количество","");
После чего программисту остается лишь удалить лишний для него код, и заменить «неопределено” на фактические значения. Только что с помощью этого генератора за 16 минут ( с отладкой) создал код для формирования трех документов давальческой схемы при выгрузке в бухгалтерию.
Если реквизит Объект данных заполнен, то болванка удобна для программного заполнения копии выбранного объекта, данными выбранного объекта. Удобно, когда мы создаем свои объекты, похожие по заполнению на объекты, которые уже есть в системе.
Пример заполнения когда выбран объект (справочник):
НовыйДокумент = Документы.АктВыполненныхРабот.СоздатьДокумент();
НовыйДокумент.Дата=Дата(2024, 08, 02, 12, 00, 00); //Дата документа
НовыйДокумент.Номер="ДС00-000001"; //Номер документа
НовыйДокумент.АктПоЗаказам=Ложь; //
НовыйДокумент.БанковскийСчетКонтрагента=Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка(); // // Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка()
НовыйДокумент.БанковскийСчетОрганизации=Справочники.БанковскиеСчетаОрганизаций.ПустаяСсылка(); // // Справочники.БанковскиеСчетаОрганизаций.ПустаяСсылка()
НовыйДокумент.Валюта=Справочники.Валюты.ПолучитьСсылку(Новый УникальныйИдентификатор("26093579-c180-11e4-a7a9-000d884fd00d")); // // Справочники.Валюты.НайтиПоНаименованию("RUB"); // (643)
НовыйДокумент.ВалютаВзаиморасчетов=Справочники.Валюты.ПолучитьСсылку(Новый УникальныйИдентификатор("26093579-c180-11e4-a7a9-000d884fd00d")); // // Справочники.Валюты.НайтиПоНаименованию("RUB"); // (643)
НовыйДокумент.ДополнительнаяИнформация=""; //
НовыйДокумент.ДополнительнаяИнформацияШапки=""; //
НовыйДокумент.ЗаказКлиента=Документы.ЗаказКлиента.ПустаяСсылка(); // // Документы.ЗаказКлиента.ПустаяСсылка()
НовыйДокумент.Касса=Справочники.Кассы.ПолучитьСсылку(Новый УникальныйИдентификатор("49549df2-c402-11e4-946e-bcaec56cc144")); // // Справочники.Кассы.НайтиПоНаименованию("Деловой союз (RUB)"); // ()
НовыйДокумент.Комментарий=""; //
НовыйДокумент.Контрагент=Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор("45631ad8-1bf7-11e1-afc4-0015e9b8c48d")); // // Справочники.Контрагенты.НайтиПоНаименованию("Протон-Сервис"); // ()
НовыйДокумент.Менеджер=Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор("0b18043c-8804-11ed-83f2-edad5095601b")); // // Справочники.Пользователи.НайтиПоНаименованию("Администратор"); // ()
НовыйДокумент.НалогообложениеНДС=Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС; // // Продажа облагается НДС
НовыйДокумент.Организация=Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор("c58c98b1-c3e6-11e4-946e-bcaec56cc144")); // // Справочники.Организации.НайтиПоНаименованию("Деловой союз"); // ()
НовыйДокумент.Партнер=Справочники.Партнеры.ПолучитьСсылку(Новый УникальныйИдентификатор("45631ad7-1bf7-11e1-afc4-0015e9b8c48d")); // // Справочники.Партнеры.НайтиПоНаименованию("Альфа-Протон"); // (ЦУ-00000009)
НовыйДокумент.Подразделение=Справочники.СтруктураПредприятия.ПустаяСсылка(); // // Справочники.СтруктураПредприятия.ПустаяСсылка()
НовыйДокумент.Сделка=Справочники.СделкиСКлиентами.ПустаяСсылка(); // // Справочники.СделкиСКлиентами.ПустаяСсылка()
НовыйДокумент.СкидкиРассчитаны=Истина; //
НовыйДокумент.Согласован=Истина; //
НовыйДокумент.Соглашение=Справочники.СоглашенияСКлиентами.ПолучитьСсылку(Новый УникальныйИдентификатор("f9b4a7ed-e3ae-11e6-b139-0050568b35ac")); // // Справочники.СоглашенияСКлиентами.НайтиПоНаименованию("ДС Оптовые продажи"); // ()
НовыйДокумент.СуммаВзаиморасчетов=12000; //
НовыйДокумент.СуммаДокумента=12000; //
НовыйДокумент.ФормаОплаты=Перечисления.ФормыОплаты.Наличная; // // Наличная
НовыйДокумент.ЦенаВключаетНДС=Ложь; //
НовыйДокумент.ГруппаФинансовогоУчета=Справочники.ГруппыФинансовогоУчетаРасчетов.ПустаяСсылка(); // // Справочники.ГруппыФинансовогоУчетаРасчетов.ПустаяСсылка()
НовыйДокумент.КартаЛояльности=Справочники.КартыЛояльности.ПустаяСсылка(); // // Справочники.КартыЛояльности.ПустаяСсылка()
НовыйДокумент.Договор=Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(Новый УникальныйИдентификатор("47a7668f-7e45-11ef-ae45-c42360c5ca82")); // // Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("йыыы"); // ()
НовыйДокумент.Автор=Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор("0b18043c-8804-11ed-83f2-edad5095601b")); // // Справочники.Пользователи.НайтиПоНаименованию("Администратор"); // ()
НовыйДокумент.КонтактноеЛицо=Справочники.КонтактныеЛицаПартнеров.ПолучитьСсылку(Новый УникальныйИдентификатор("45631ad9-1bf7-11e1-afc4-0015e9b8c48d")); // // Справочники.КонтактныеЛицаПартнеров.НайтиПоНаименованию("Петров Олег Васильевич"); // ()
НовыйДокумент.Руководитель=Справочники.ОтветственныеЛицаОрганизаций.ПолучитьСсылку(Новый УникальныйИдентификатор("5bd8133b-f3bb-11e4-92f1-0050568b35ac")); // // Справочники.ОтветственныеЛицаОрганизаций.НайтиПоНаименованию("Новиков В.В."); // ()
НовыйДокумент.ГлавныйБухгалтер=Справочники.ОтветственныеЛицаОрганизаций.ПустаяСсылка(); // // Справочники.ОтветственныеЛицаОрганизаций.ПустаяСсылка()
НовыйДокумент.ПорядокРасчетов=Перечисления.ПорядокРасчетов.ПоНакладным; // // По расчетным документам
НовыйДокумент.ИдентификаторПлатежа="АКТ2408ДС00000001001"; //
НовыйДокумент.НаправлениеДеятельности=Справочники.НаправленияДеятельности.ПустаяСсылка(); // // Справочники.НаправленияДеятельности.ПустаяСсылка()
НовыйДокумент.КурсЧислитель=1; //
НовыйДокумент.КурсЗнаменатель=1; //
НовыйДокумент.Основание=""; //
НовыйДокумент.ОснованиеДата=Дата(1, 1, 1, 0, 0, 0); //
НовыйДокумент.ОснованиеНомер=""; //
НовыйДокумент.ОплатаВВалюте=Ложь; //
НовыйДокумент.ЭтапГосконтрактаЕИС=""; //
НовыйДокумент.ГрафикОплаты=Справочники.ГрафикиОплаты.ПолучитьСсылку(Новый УникальныйИдентификатор("f0e40f8d-7390-11df-b338-0011955cba6b")); // // Справочники.ГрафикиОплаты.НайтиПоНаименованию("Частичная предоплата"); // ()
//---------------------------- ТЧ Услуги-----------------------------------------
//------------ строка 1----------------
НоваяСтрока = НовыйДокумент.Услуги.Добавить();
НоваяСтрока.Номенклатура=Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор("5ca073eb-8661-11da-9aea-000d884f5d77")); // // Справочники.Номенклатура.НайтиПоНаименованию("Аренда офиса"); // (000000122 )
НоваяСтрока.Характеристика=Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(); // // Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()
НоваяСтрока.Содержание="Аренда офиса"; //
НоваяСтрока.Количество=1; //
НоваяСтрока.ВидЦены=Справочники.ВидыЦен.ПустаяСсылка(); // // Справочники.ВидыЦен.ПустаяСсылка()
НоваяСтрока.Цена=10000; //
НоваяСтрока.Сумма=10000; //
НоваяСтрока.СтавкаНДС=Справочники.СтавкиНДС.ПолучитьСсылку(Новый УникальныйИдентификатор("6c3079c7-80c7-11ea-80e1-60a44ccf99dc")); // // Справочники.СтавкиНДС.НайтиПоНаименованию("20%"); // ()
НоваяСтрока.СуммаНДС=2000; //
НоваяСтрока.СуммаСНДС=12000; //
НоваяСтрока.КодСтроки=0; //
НоваяСтрока.СуммаРучнойСкидки=0; //
НоваяСтрока.СуммаАвтоматическойСкидки=0; //
НоваяСтрока.ПроцентРучнойСкидки=0; //
НоваяСтрока.ПроцентАвтоматическойСкидки=0; //
НоваяСтрока.СуммаВзаиморасчетов=12000; //
НоваяСтрока.КлючСвязи=1; //
НоваяСтрока.ЗаказКлиента=Неопределено; //
НоваяСтрока.ИдентификаторСтроки="26503d18-3b1a-4721-b8af-38097fb5c2bd"; //
НоваяСтрока.НоменклатураНабора=Справочники.Номенклатура.ПустаяСсылка(); // // Справочники.Номенклатура.ПустаяСсылка()
НоваяСтрока.ХарактеристикаНабора=Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(); // // Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()
НоваяСтрока.АналитикаУчетаНаборов=Справочники.КлючиАналитикиУчетаНаборов.ПустаяСсылка(); // // Справочники.КлючиАналитикиУчетаНаборов.ПустаяСсылка()
НоваяСтрока.Назначение=Справочники.Назначения.ПустаяСсылка(); // // Справочники.Назначения.ПустаяСсылка()
НоваяСтрока.ОбъектРасчетов=Справочники.ОбъектыРасчетов.ПолучитьСсылку(Новый УникальныйИдентификатор("47a76694-7e45-11ef-ae45-c42360c5ca82")); // // Справочники.ОбъектыРасчетов.НайтиПоНаименованию("Акт выполненных работ ДС00-000001 от 02.08.2024 12:00:00"); // ()
НоваяСтрока.Подразделение=Справочники.СтруктураПредприятия.ПустаяСсылка(); // // Справочники.СтруктураПредприятия.ПустаяСсылка()
НоваяСтрока.НоменклатураПартнера=Справочники.НоменклатураКонтрагентов.ПустаяСсылка(); // // Справочники.НоменклатураКонтрагентов.ПустаяСсылка()
НоваяСтрока.СуммаБонусныхБалловКСписанию=0; //
НоваяСтрока.СуммаБонусныхБалловКСписаниюВВалюте=0; //
НоваяСтрока.СуммаНачисленныхБонусныхБалловВВалюте=0; //
//---------------------------- ТЧ СкидкиНаценки-----------------------------------------
//---------------------------- ТЧ ДополнительныеРеквизиты-----------------------------------------
//---------------------------- ТЧ РасшифровкаПлатежа-----------------------------------------
//------------ строка 1----------------
НоваяСтрока = НовыйДокумент.РасшифровкаПлатежа.Добавить();
НоваяСтрока.Сумма=12000; //
НоваяСтрока.СуммаВзаиморасчетов=12000; //
НоваяСтрока.ОбъектРасчетов=Справочники.ОбъектыРасчетов.ПолучитьСсылку(Новый УникальныйИдентификатор("47a76694-7e45-11ef-ae45-c42360c5ca82")); // // Справочники.ОбъектыРасчетов.НайтиПоНаименованию("Акт выполненных работ ДС00-000001 от 02.08.2024 12:00:00"); // ()
//---------------------------- ТЧ ЭтапыГрафикаОплаты-----------------------------------------
//------------ строка 1----------------
НоваяСтрока = НовыйДокумент.ЭтапыГрафикаОплаты.Добавить();
НоваяСтрока.Заказ=Неопределено; //
НоваяСтрока.СверхЗаказа=Ложь; //
НоваяСтрока.ВариантОплаты=Перечисления.ВариантыКонтроляОплатыКлиентом.ПредоплатаДоОтгрузки; // // Оплата до отгрузки
НоваяСтрока.ДатаПлатежа=Дата(2024, 08, 02, 00, 00, 00); //
НоваяСтрока.СуммаПлатежа=3600; //
НоваяСтрока.ПроцентПлатежа=30; //
НоваяСтрока.СуммаВзаиморасчетов=3600; //
НоваяСтрока.Сдвиг=0; //
НоваяСтрока.ОбъектРасчетов=Справочники.ОбъектыРасчетов.ПолучитьСсылку(Новый УникальныйИдентификатор("47a76694-7e45-11ef-ae45-c42360c5ca82")); // // Справочники.ОбъектыРасчетов.НайтиПоНаименованию("Акт выполненных работ ДС00-000001 от 02.08.2024 12:00:00"); // ()
НоваяСтрока.СуммаЗалогаЗаТару=0; //
НоваяСтрока.СуммаВзаиморасчетовПоТаре=0; //
НоваяСтрока.ПроцентЗалогаЗаТару=0; //
НоваяСтрока.ВариантОтсчета=Перечисления.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки; // // до даты отгрузки
//---------------------------- ТЧ НачислениеБонусныхБаллов-----------------------------------------
Другие разработки автора:
Акция! Вы можете скачать эту разработку в составе архива всех моих разработок, которые я предлагаю за StartMone, по Специальной цене: //infostart.ru/public/960899/#archive
Обновление от 15.02.2017
Добавил управляемую форму
Обновление от 21.06.2012
Теперь вместо 'неопределено' реквизитам присваивается пустое значение типа. Что позволяет сэкономить еще некотрое количества времени при написании кода.
Для документов добавились "Дата" и "Номер".
PS: Надеюсь вам понравится эта и другие мои разработки на //infostart.ru/profile/48714/.
Очень жду ваших комментариев и пожеланий.
Молочников Олег Spb. 2021.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.19.63, 2.5.12.73
- Комплексная автоматизация, редакция 1.1, релизы 1.0.2.3