Содержание

Кодинг

Методика тестирования внешних обработок (дополнительные отчеты и обработки)

#Область Отладка 

// Процедура - Запуск отладки
//
// Параметры:
//  АдресОбработки	 - 	"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);

Прибавляет Нужное количество рабочих дней к дате

Не совсем рабочая функция взята здесь

 Функция РабочихДнейСДаты(НачДата,КолвоДней)  Экспорт
	//Перем РабочихДней, ОбычныхДней, ДеньНедели;
	РабочихДней = 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][Кол.Имя]);
	КонецЦикла;
КонецПроцедуры