==== Кодинг ====
=== Методика тестирования внешних обработок (дополнительные отчеты и обработки) ===
#Область Отладка
// Процедура - Запуск отладки
//
// Параметры:
// АдресОбработки - "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][Кол.Имя]);
КонецЦикла;
КонецПроцедуры