==== Кодинг ==== === Методика тестирования внешних обработок (дополнительные отчеты и обработки) === #Область Отладка // Процедура - Запуск отладки // // Параметры: // АдресОбработки - "Y:\1c_support\КСК\итмс_ДополнительноСоглашение.epf" тип Строка // Процедура ЗапускОтладки(АдресОбработки,МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати) Если АдресОбработки <> ЭтотОбъект.ИспользуемоеИмяФайла Тогда Обр = ВнешниеОбработки.Создать(АдресОбработки); Обр.Печать(МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати); КонецЕсли; КонецПроцедуры #КонецОбласти #Область Печать Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати=Неопределено, ПараметрыВывода=Неопределено,СписокСотрудников = Неопределено) Экспорт // Отладка //ЗапускОтладки("Y:\1c_support\КСК\итмс_ДополнительноСоглашение.epf",МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати); КонецПроцедуры #КонецОбласти === Вывод ТЗ в печ форму === // Возвращает табличный документ на основании таблицы значений // // Параметры: // ДанныеВТабличныйДокумент - ТаблицаЗначений // &НаСервереБезКонтекста Функция ДанныеТаблицыЗначенийВТабличныйДокумент(ДанныеВТабличныйДокумент) ТабличныйДокумент = Новый ТабличныйДокумент; Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДанныеВТабличныйДокумент); Построитель.Вывести(ТабличныйДокумент); Возврат ТабличныйДокумент; КонецФункции // ДанныеТаблицыЗначенийВТабличныйДокумент() === Изменение имени переменной в цикле === Функция ДобавитьСтрокиВТЗ(ТЗ,Строка,ТекстДок) стр = ТЗ.Добавить(); Для Каждого Колонка ИЗ ТЗ.Колонки Цикл Стр[Колонка.Имя] = СокрЛП(ТекстДок.ПолучитьСтроку(Строка)); Строка = Строка + 1; КонецЦикла; Возврат Строка КонецФункции === Запуск обработки из макета внешней обработки === * Добавляем внешнюю обработку для запуска как макет с типом "Внешняя компонента". * В модуле обработки пишем функцию: &НаСервере Функция ПолучитьОбмен_Данными_XML_2_1_7() Экспорт Обработка = ЭтотОбъект.ПолучитьМакет("EPF_Универсальный_Обмен_Данными_XML_2_1_7"); АдресОбработкиВХранилище = ПоместитьВоВременноеХранилище(Обработка); Возврат АдресОбработкиВХранилище КонецФункции * На форме обработки создаем событие :"При открытии", В его обработчике пишем: &НаКлиенте Процедура ПриОткрытии(Отказ) ИмяОбработки = ПодключитьВнешнююОбработку(); // Откроем форму подключенной внешней обработки Форма = ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма.УправляемаяФорма"); //ЭтаФорма.Закрыть(); КонецПроцедуры &НаСервере Функция ПодключитьВнешнююОбработку() Возврат ВнешниеОбработки.Подключить(РеквизитФормыВЗначение("Объект").ПолучитьОбмен_Данными_XML_2_1_7(), , Ложь); КонецФункции === Разбивка строки по разделителю на подстроки === #Если ТолстыйКлиентОбычноеПриложение Тогда Если Счетчик % 100 = 0 Тогда Состояние("Загружается отчет № " + НомерОтчета + " с POS № " + ЛогНомерИзОтчета + ", строка " + Счетчик + "/" + ВсегоСтрок); КонецЕсли; #КонецЕсли //Разделитель в этом случае ";" Стр = СтрЗаменить(ФайлОтчета.ПолучитьСтроку(Счетчик), ";", Символы.ПС); Дата = СтрПолучитьСтроку(Стр, 2); Время = СтрПолучитьСтроку(Стр, 3); НомерЧека = СтрПолучитьСтроку(Стр, 6); Сумма = СтрПолучитьСтроку(Стр, 12); === Прибавляет Нужное количество рабочих дней к дате === [[https://helpf.pro/faq83/view/1727.html|Не совсем рабочая функция взята здесь]] Функция РабочихДнейСДаты(НачДата,КолвоДней) Экспорт //Перем РабочихДней, ОбычныхДней, ДеньНедели; РабочихДней = 0; ОбычныхДней = 0; Пока РабочихДней <= Число(КолвоДней) Цикл ОбычныхДней = ОбычныхДней+ 1; // определим день недели ДеньНедели=ДеньНедели(НачДата+(ОбычныхДней*86400)); // если не выходной, то прошел еще один рабочий день Если ДеньНедели < 6 Тогда РабочихДней=РабочихДней+1; КонецЕсли; КонецЦикла; Возврат (НачДата + (ОбычныхДней*86400)); КонецФункции === Читает текст с разделителями в ТЗ === Разделитель в данном случае - ";" Функция ПрочитатьТекстВТЗ(ПутьКФайлу,ИмяФайла) Реализации = Новый ТаблицаЗначений; Реализации.Колонки.Добавить("Номер"); Реализации.Колонки.Добавить("Дата"); Реализации.Колонки.Добавить("Сумма"); Реализации.Колонки.Добавить("ИНН"); // загрузим текст Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ПутьКФайлу+"\"+ИмяФайла); КоличествоСтрок = Текст.КоличествоСтрок(); Инд = 1; Пока Инд <= КоличествоСтрок Цикл Стр = СтрЗаменить(Текст.ПолучитьСтроку(Инд),";",Символы.ПС); СтрТЗ = Реализации.Добавить(); СтрТЗ.Номер = СокрЛП(СтрПолучитьСтроку(Стр,1)); СтрТЗ.Дата = СтрПолучитьСтроку(Стр,2); СтрТЗ.Сумма = СтрПолучитьСтроку(Стр,3); СтрТЗ.ИНН = СтрПолучитьСтроку(Стр,4); Инд = Инд + 1; КонецЦикла; Возврат Реализации // возвращаем ТЗ КонецФункции === Журналирование (Логирование) работы обработки в *.txt === В имени файла слова должны идти через "_", например: "Выгрузка_реализаций" Функция ПолучитьЖурнал(ПутьКФайлу,ИмяФайла) Путь = ПутьКФайлу+"\"+Формат(ТекущаяДата(),"ДФ=dd_MM_yyyy_hh_mm_ss")+"_"+ИмяФайла+".txt"; Журнал = Новый ТекстовыйДокумент; Журнал.ДобавитьСтроку("Начало работы"); Журнал.Записать(Путь); Возврат Журнал КонецФункции === Генерация корректной ТЗ для запроса === В имени файла слова должны идти через "_", например: "Выгрузка_реализаций" Функция СгенерироватьТЗ() // описание типов в тз КС50 = Новый КвалификаторыСтроки(50); КС100 = Новый КвалификаторыСтроки(100); КЧ = Новый КвалификаторыЧисла(3,0); Массив = Новый Массив; Массив.Добавить(Тип("Строка")); ОписаниеТиповС50 = Новый ОписаниеТипов(Массив, , КС50); Массив.Очистить(); Массив.Добавить(Тип("Строка")); ОписаниеТиповС100 = Новый ОписаниеТипов(Массив, , КС100); Массив.Очистить(); Массив.Добавить(Тип("Число")); ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ); Товар = Новый ТаблицаЗначений; Товар.Колонки.Добавить("Арт",ОписаниеТиповС50); // артикул Товар.Колонки.Добавить("НазваниеРус",ОписаниеТиповС100); // Название по-русски Товар.Колонки.Добавить("НазваниеАнг",ОписаниеТиповС100); // Название по-английски Товар.Колонки.Добавить("ЕдИзм",ОписаниеТиповС50); // единица измерения Товар.Колонки.Добавить("ОстатокМск",ОписаниеТиповЧ); // остаток на складе Возврат Товар КонецФункции === Код модуля обработки/отчета для добавления в дополнительные отчеты/обработки === Тестировалось на УТ 11.1 платформа 8.3. Нужно добавить код в модуль отчета/обработки. Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить(""); ИмяОтчета = Метаданные().Представление(); ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет"); ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", "Поступления номенклатуры"); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ); ПараметрыРегистрации.Вставить("Информация", "Прайс лист с возможностью вывода картинок. Автор ITMS"); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, ИмяОтчета, Метаданные().ПолноеИмя(), "ОткрытиеФормы", Истина); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры === Вывод в Word === ПутьКФайлуМакетаНаКлиенте - путь к файлу Word для заполнения РеквизитыДляПечати - структура, где имя совпадает с именем закладки в Word &НаСервере Функция ПодготовкаПечати(ВидДоговораДляПечати) РеквизитыДляПечати = РеквизитФормыВЗначение("Объект").ПолучитьМакетыИРеквизитыДоговора(ЭтотОбъект,ВидДоговораДляПечати); Возврат РеквизитыДляПечати КонецФункции &НаКлиенте Процедура Печать(Команда) РеквизитыДляПечати = ПодготовкаПечати(ВидДоговора); // Выводим Договор ИТС ДвоичныеДанные = ПолучитьИзВременногоХранилища(РеквизитыДляПечати.Договор_ИТС); ПутьКФайлуМакетаНаКлиенте = КаталогВременныхФайлов()+"contract_its.doc"; ДвоичныеДанные.Записать(ПутьКФайлуМакетаНаКлиенте); ПечатьПФ_DOC(ПутьКФайлуМакетаНаКлиенте,РеквизитыДляПечати.ДанныеНаПечать); КонецПроцедуры &НаКлиенте Процедура ПечатьПФ_DOC(ПутьКФайлуМакетаНаКлиенте,РеквизитыДляПечати) Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); ОбъектВорд.Documents.Open(ПутьКФайлуМакетаНаКлиенте); Док = ОбъектВорд.Application.Documents(1); Док.Activate(); Для каждого Закладка Из Док.Bookmarks Цикл Значение = РеквизитыДляПечати.Получить(Закладка.Name); Док.Bookmarks(Закладка.Name).Select(); Док.Application.Selection.TypeText(Значение); КонецЦикла; ОбъектВорд.Application.Visible = Истина; ОбъектВорд.Activate(); Исключение Док.Application.Quit(); КонецПопытки; КонецПроцедуры Код в модуле обработки: &НаСервере Функция ПолучитьМакетыИРеквизитыДоговора(ФормаОбр,ВидДоговора) Экспорт РеквизитыДляПечати = Новый Структура; Если ВидДоговора = "ИТС" Тогда ПодготовитьДанныеДоговора(РеквизитыДляПечати,ФормаОбр); ПолучитьМакеты(ВидДоговора,РеквизитыДляПечати); ЗаполнитьДанныеПоПриложению(РеквизитыДляПечати.ДанныеНаПечать,ФормаОбр); КонецЕсли; КонецФункции; &НаСервере Процедура ПолучитьМакеты(ВидДоговора,РеквизитыДляПечати) Если ВидДоговора = "ИТС" Тогда // Получаем макет Договора ИТС ИмяМакета = "ПФ_DOC_ИТС_Договор"; ИмяШаблона = "contract_its.doc"; АдресМакетаВХранилище = ПолучитьАдресМакетаВХранилище(ИмяМакета,ИмяШаблона); РеквизитыДляПечати.Вставить("Договор_ИТС",АдресМакетаВХранилище); // Получаем макет Приложения 1 ИмяМакета = "ПФ_DOC_ИТС_Договор_Приложение_1"; ИмяШаблона = "attachment_1.doc"; АдресМакетаВХранилище = ПолучитьАдресМакетаВХранилище(ИмяМакета,ИмяШаблона); РеквизитыДляПечати.Вставить("Приложение1",АдресМакетаВХранилище); КонецПроцедуры #Область Служебные_Процедуры // Функция - Получить адрес макета в хранилище // // Параметры: // ИмяМакета - Имя макета, который нужно получить // // Возвращаемое значение: Адрес файла макета в виде двоичных // данных во временном хранилище // &НаСервере Функция ПолучитьАдресМакетаВХранилище(ИмяМакета,ИмяШаблона) МакетДанные = ЭтотОбъект.ПолучитьМакет(ИмяМакета); Имя = КаталогВременныхФайлов()+ИмяШаблона; МакетДанные.Записать(Имя); ДвоичДанные = Новый ДвоичныеДанные(Имя); АдресМакетаВХранилище = ПоместитьВоВременноеХранилище(ДвоичДанные); Возврат АдресМакетаВХранилище КонецФункции &НаСервере Функция Склонение(СтрокаФИО,ПолКонтактногоЛица,Падеж,NameDecl) Если ПолКонтактногоЛица = Перечисления.ПолФизическогоЛица.Мужской Тогда РезультатСклонения = NameDecl.Просклонять(СтрокаФИО, Падеж,1); ИначеЕсли ПолКонтактногоЛица = Перечисления.ПолФизическогоЛица.Женский Тогда РезультатСклонения = NameDecl.Просклонять(СтрокаФИО, Падеж,0); Иначе РезультатСклонения = NameDecl.Просклонять(СтрокаФИО, Падеж); КонецЕсли; Возврат РезультатСклонения КонецФункции // Процедура - Получить Объект NameDecl // Получает NameDecl.dll - библиотека склонения из макета &НаСервере Функция ПолучитьNameDecl() Данные = ЭтотОбъект.ПолучитьМакет("NameDecl_zip"); АдресNameDecl = ПоместитьВоВременноеХранилище(Данные); Попытка // Загружаем внешнюю компоненту ПодключитьВнешнююКомпоненту(АдресNameDecl, "Component"); NameDecl = Новый("AddIn.Component.CNameDecl"); Исключение // Не удалось выполнить операции с внешней компонентой Сообщить("Не удалось загрузить внешнюю компоненту по причине: " + ОписаниеОшибки()); КонецПопытки; Возврат NameDecl КонецФункции // Формирует фамилию и инициалы либо по переданным строкам. // // Параметры: // ФИОСтрокой - Строка - если указан это параметр, то остальные игнорируются. // Фамилия - Строка - фамилия физического лица. // Имя - Строка - имя физического лица. // Отчество - Строка - отчество физического лица. // // Возвращаемое значение: // Строка - фамилия и инициалы одной строкой. // В параметрах Фамилия, Имя и Отчество записываются вычисленные части. // // Пример: // Результат = ФамилияИнициалыФизЛица("Иванов Иван Иванович"); // Результат = "Иванов И. И." // Функция ФамилияИнициалыФизЛица(ФИОСтрокой = "", Фамилия = " ", Имя = " ", Отчество = " ") ТипОбъекта = ТипЗнч(ФИОСтрокой); Если ТипОбъекта = Тип("Строка") Тогда ФИО = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(ФИОСтрокой), " "); Иначе // Используем возможно переданные отдельные строки. Возврат ?(Не ПустаяСтрока(Фамилия), Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя,1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество,1) + ".", ""), ""), ""); КонецЕсли; КоличествоПодстрок = ФИО.Количество(); Фамилия = ?(КоличествоПодстрок > 0, ФИО[0], ""); Имя = ?(КоличествоПодстрок > 1, ФИО[1], ""); Отчество = ?(КоличествоПодстрок > 2, ФИО[2], ""); Если КоличествоПодстрок > 3 Тогда ДополнительныеЧастиОтчества = Новый Массив; ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'оглы'")); ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'улы'")); ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'уулу'")); ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'кызы'")); ДополнительныеЧастиОтчества.Добавить(НСтр("ru = 'гызы'")); Если ДополнительныеЧастиОтчества.Найти(НРег(ФИО[3])) <> Неопределено Тогда Отчество = Отчество + " " + ФИО[3]; КонецЕсли; КонецЕсли; Возврат ?(Не ПустаяСтрока(Фамилия), Фамилия + ?(Не ПустаяСтрока(Имя), " " + Лев(Имя, 1) + "." + ?(Не ПустаяСтрока(Отчество), Лев(Отчество, 1) + ".", ""), ""), ""); КонецФункции // Получение адреса отработка ошибок // // Возвращаемое значение: // вид адреса // 1 - юридический // 2 - фактический Функция ПолучитьпредставлениеАдреса(ВидАдреса,Контрагент) МассивКонтрагентов = Новый Массив; МассивКонтрагентов.Добавить(Контрагент); МассивАдресов = Новый Массив; Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; // вид адреса Если ВидАдреса = 1 Тогда Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента; ИначеЕсли ВидАдреса = 2 Тогда Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента; КонецЕсли; МассивАдресов = КонтактнаяИнформацияУНФ.КонтактнаяИнформацияОбъектов(МассивКонтрагентов,Тип,Вид); Если МассивАдресов.Количество()>0 Тогда ПредставлениеАдреса = МассивАдресов[0].Представление; Иначе ПредставлениеАдреса = ""; КонецЕсли; Возврат ПредставлениеАдреса КонецФункции #КонецОбласти === Изменение движений проведенного документа === &НаСервере Процедура Команда1НаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОперацияБух.Ссылка КАК Ссылка, | ОперацияБух.Номер КАК Номер, | ОперацияБух.Дата КАК Дата, | ОперацияБух.Организация КАК Организация, | ОперацияБух.Содержание КАК Содержание, | ОперацияБух.ТиповаяОперация КАК ТиповаяОперация, | ОперацияБух.СпособЗаполнения КАК СпособЗаполнения |ИЗ | Документ.ОперацияБух КАК ОперацияБух |ГДЕ | ОперацияБух.Дата МЕЖДУ &Дата1 И &Дата2"; Запрос.УстановитьПараметр("Дата1", Дата('2020.01.01 00:00:00')); Запрос.УстановитьПараметр("Дата2", Дата('2020.07.18 23:59:59')); РезультатЗапроса = Запрос.Выполнить(); ВыборкаД = РезультатЗапроса.Выбрать(); Пока ВыборкаД.Следующий() Цикл // проверим что перед нами поступление Если СтрНайти(ВыборкаД.Содержание,"Поступление ТМЦ") <> 0 И СтрНайти(ВыборкаД.Номер,"Ш") <> 0 Тогда Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(выборкаД.Ссылка); Набор.Прочитать(); Инд = 0; Для Каждого ДВ ИЗ Набор Цикл Если ДВ.СчетКт = ПланыСчетов.Хозрасчетный.ТорговаяНаценкаНТТ Тогда Набор.Удалить(Инд); Набор.Записать(истина); Сообщить(ДВ); КонецЕсли; Инд = Инд + 1; КонецЦикла; Иначе Продолжить КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры === Вывод реквизитов документа на форму === нРеквизиты = Новый Массив; // Страница Заказ с сайта ДобавитьЭлементНаФорму(ЭтаФорма.Элементы,"ЗаказССайта",Тип("ГруппаФормы"),ЭтаФорма.Элементы.ГруппаСтраницы,ВидГруппыФормы.Страница,,,"Заказ с сайта"); ТЗ_РеквизитовОбъекта = Новый ТаблицаЗначений; ТЗ_РеквизитовОбъекта.Колонки.Добавить("Имя"); ТЗ_РеквизитовОбъекта.Колонки.Добавить("Путь"); ТЗ_РеквизитовОбъекта.Колонки.Добавить("Заголовок"); Стр = ТЗ_РеквизитовОбъекта.Добавить(); Стр.Имя = "итмс_Сайт"; Стр.Путь = "Объект."+Стр.Имя; Стр.Заголовок = "Заказ загружен с сайта"; Стр = ТЗ_РеквизитовОбъекта.Добавить(); Стр.Имя = "итмс_ЗаказССайта"; Стр.Путь = "Объект."+Стр.Имя; Стр.Заголовок = "Заказ с сайта"; Для Каждого Реквизит Из ТЗ_РеквизитовОбъекта Цикл ДобавитьЭлементНаФорму(ЭтаФорма.Элементы, Реквизит.Имя, Тип("ПолеФормы"), ЭтаФорма.Элементы.ЗаказССайта, ВидПоляФормы.ПолеВвода, Реквизит.Путь,, Реквизит.Заголовок); КонецЦикла; // начинаем вывод реквизитов формы (не созданы в конфигураторе как реквизиты объекта) ДобавитьРеквизит("Фамилия", ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)), "Фамилия",,нРеквизиты); ДобавитьРеквизит("Имя", ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)), "Имя",,нРеквизиты); ДобавитьРеквизит("Отчество", ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)), "Отчество",,нРеквизиты); ДобавитьРеквизит("Телефон", ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)), "Телефон",,нРеквизиты); ДобавитьРеквизит("НомерЗаказаНаСайте", ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)), "Номер заказа на сайте",,нРеквизиты); ДобавитьРеквизит("ИНН", ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)), "ИНН",,нРеквизиты); ЭтаФорма.ИзменитьРеквизиты(нРеквизиты); Для Каждого Реквизит Из нРеквизиты Цикл ДобавитьЭлементНаФорму(ЭтаФорма.Элементы, Реквизит.Имя, Тип("ПолеФормы"), ЭтаФорма.Элементы.ЗаказССайта, ВидПоляФормы.ПолеВвода, Реквизит.Имя,, Реквизит.Заголовок); КонецЦикла; === Таблица значений в структуру === &НаСервере Процедура Команда1НаСервере() ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("А"); ТЗ.Колонки.Добавить("Б"); ТЗ.Колонки.Добавить("В"); ТЗ.Колонки.Добавить("Г"); Стр = ТЗ.Добавить(); Стр.А = "оо"; Стр.Б = "о1о"; Стр.В = "о2"; Стр.Г = "о3"; ТестСтруктура = Новый Структура; Для Каждого Кол Из ТЗ.Колонки Цикл ТестСтруктура.Вставить(Кол.Имя,ТЗ[0][Кол.Имя]); КонецЦикла; КонецПроцедуры