wiki:1c:coding

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:1c:coding [2019/02/28 06:11]
anton
wiki:1c:coding [2024/05/08 02:04] (текущий)
anton
Строка 1: Строка 1:
 ==== Кодинг ==== ==== Кодинг ====
 +=== Методика тестирования внешних обработок (дополнительные отчеты и обработки) ===
 +<code>
 +#Область Отладка 
 +
 +// Процедура - Запуск отладки
 +//
 +// Параметры:
 +//  АдресОбработки - "Y:\1c_support\КСК\итмс_ДополнительноСоглашение.epf" тип Строка 
 +//
 +Процедура ЗапускОтладки(АдресОбработки,МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати)
 +
 + Если АдресОбработки <> ЭтотОбъект.ИспользуемоеИмяФайла Тогда
 + Обр = ВнешниеОбработки.Создать(АдресОбработки);
 + Обр.Печать(МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати);
 + КонецЕсли;
 +
 +КонецПроцедуры
 +
 +#КонецОбласти
 +
 +#Область Печать
 +
 +Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати=Неопределено, ПараметрыВывода=Неопределено,СписокСотрудников = Неопределено) Экспорт
 +
 + // Отладка
 + //ЗапускОтладки("Y:\1c_support\КСК\итмс_ДополнительноСоглашение.epf",МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати);
 +КонецПроцедуры
 +#КонецОбласти
 +</code>
 +=== Вывод ТЗ в печ форму ===
 +<code>
 +// Возвращает табличный документ на основании таблицы значений
 +//
 +// Параметры:
 +//  ДанныеВТабличныйДокумент - ТаблицаЗначений
 +//
 +&НаСервереБезКонтекста
 +Функция ДанныеТаблицыЗначенийВТабличныйДокумент(ДанныеВТабличныйДокумент)
 +
 + ТабличныйДокумент = Новый ТабличныйДокумент;
 + Построитель = Новый ПостроительОтчета;
 + Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДанныеВТабличныйДокумент);       
 + Построитель.Вывести(ТабличныйДокумент);
 +
 + Возврат ТабличныйДокумент;
 +
 +КонецФункции // ДанныеТаблицыЗначенийВТабличныйДокумент()
 +</code>
  
 === Изменение имени переменной в цикле === === Изменение имени переменной в цикле ===
Строка 42: Строка 90:
 </code> </code>
  
 +=== Разбивка строки по разделителю на подстроки ===
 +<code>
 +#Если ТолстыйКлиентОбычноеПриложение Тогда
 +Если Счетчик % 100 = 0 Тогда
 +     Состояние("Загружается отчет № " + НомерОтчета + " с POS № " + ЛогНомерИзОтчета + ", строка " + Счетчик + "/" + ВсегоСтрок);
 +КонецЕсли;
 +#КонецЕсли
 +//Разделитель в этом случае ";"
 +Стр = СтрЗаменить(ФайлОтчета.ПолучитьСтроку(Счетчик), ";", Символы.ПС);
 +Дата = СтрПолучитьСтроку(Стр, 2);
 +Время = СтрПолучитьСтроку(Стр, 3);
 +НомерЧека        = СтрПолучитьСтроку(Стр, 6);
 +Сумма = СтрПолучитьСтроку(Стр, 12);
 +</code>
 +
 +=== Прибавляет Нужное количество рабочих дней к дате ===
 +[[https://helpf.pro/faq83/view/1727.html|Не совсем рабочая функция взята здесь]]
 +<code>
 + Функция РабочихДнейСДаты(НачДата,КолвоДней)  Экспорт
 + //Перем РабочихДней, ОбычныхДней, ДеньНедели;
 + РабочихДней = 0; 
 + ОбычныхДней = 0;
 + Пока РабочихДней <= Число(КолвоДней) Цикл 
 + ОбычныхДней = ОбычныхДней+ 1;          
 + // определим день недели 
 + ДеньНедели=ДеньНедели(НачДата+(ОбычныхДней*86400));           
 + // если не выходной, то прошел еще один рабочий день 
 + Если ДеньНедели < 6 Тогда
 + РабочихДней=РабочихДней+1;
 + КонецЕсли;
 + КонецЦикла;
 +
 + Возврат (НачДата + (ОбычныхДней*86400));
 +КонецФункции
 +</code>
 +=== Читает текст с разделителями в ТЗ ===
 + Разделитель в данном случае - ";"
 +<code>
 + Функция ПрочитатьТекстВТЗ(ПутьКФайлу,ИмяФайла)
 + Реализации = Новый ТаблицаЗначений;
 + Реализации.Колонки.Добавить("Номер");
 + Реализации.Колонки.Добавить("Дата");
 + Реализации.Колонки.Добавить("Сумма");
 + Реализации.Колонки.Добавить("ИНН");
 + // загрузим текст
 + Текст = Новый ТекстовыйДокумент;
 + Текст.Прочитать(ПутьКФайлу+"\"+ИмяФайла);
 + КоличествоСтрок = Текст.КоличествоСтрок();
 +        Инд = 1;
 + Пока Инд <= КоличествоСтрок Цикл
 + Стр = СтрЗаменить(Текст.ПолучитьСтроку(Инд),";",Символы.ПС);
 + СтрТЗ = Реализации.Добавить();
 + СтрТЗ.Номер = СокрЛП(СтрПолучитьСтроку(Стр,1));
 + СтрТЗ.Дата = СтрПолучитьСтроку(Стр,2);
 + СтрТЗ.Сумма = СтрПолучитьСтроку(Стр,3);
 + СтрТЗ.ИНН = СтрПолучитьСтроку(Стр,4);
 +                Инд = Инд + 1;
 + КонецЦикла;
 + Возврат Реализации // возвращаем ТЗ
 + КонецФункции
 +</code>
 +
 +=== Журналирование (Логирование) работы обработки в *.txt ===
 + В имени файла слова должны идти через "_", например: "Выгрузка_реализаций"
 +<code>
 + Функция ПолучитьЖурнал(ПутьКФайлу,ИмяФайла)
 + Путь = ПутьКФайлу+"\"+Формат(ТекущаяДата(),"ДФ=dd_MM_yyyy_hh_mm_ss")+"_"+ИмяФайла+".txt";
 + Журнал = Новый ТекстовыйДокумент;
 + Журнал.ДобавитьСтроку("Начало работы");
 + Журнал.Записать(Путь);
 + Возврат Журнал
 + КонецФункции
 +</code>
 +=== Генерация корректной ТЗ для запроса ===
 + В имени файла слова должны идти через "_", например: "Выгрузка_реализаций"
 +<code>
 + Функция СгенерироватьТЗ()
 + // описание типов в тз
 + КС50 = Новый КвалификаторыСтроки(50);
 + КС100 = Новый КвалификаторыСтроки(100);
 + КЧ = Новый КвалификаторыЧисла(3,0);
 + Массив = Новый Массив;
 + Массив.Добавить(Тип("Строка"));
 + ОписаниеТиповС50 = Новый ОписаниеТипов(Массив, , КС50);
 + Массив.Очистить();
 + Массив.Добавить(Тип("Строка"));
 + ОписаниеТиповС100 = Новый ОписаниеТипов(Массив, , КС100);
 + Массив.Очистить();
 + Массив.Добавить(Тип("Число"));
 + ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
 + Товар = Новый ТаблицаЗначений;
 + Товар.Колонки.Добавить("Арт",ОписаниеТиповС50);          // артикул
 + Товар.Колонки.Добавить("НазваниеРус",ОписаниеТиповС100); // Название по-русски
 + Товар.Колонки.Добавить("НазваниеАнг",ОписаниеТиповС100); // Название по-английски
 + Товар.Колонки.Добавить("ЕдИзм",ОписаниеТиповС50);        // единица измерения
 + Товар.Колонки.Добавить("ОстатокМск",ОписаниеТиповЧ);     // остаток на складе
 + Возврат Товар
 + КонецФункции
 +</code>
 +
 +=== Код модуля обработки/отчета для добавления в дополнительные отчеты/обработки  ===
 +Тестировалось на УТ 11.1 платформа 8.3. Нужно добавить код в модуль отчета/обработки.
 +<code>
 + Функция СведенияОВнешнейОбработке() Экспорт
 +
 + ПараметрыРегистрации = Новый Структура;
 + МассивНазначений = Новый Массив;
 + МассивНазначений.Добавить("");
 +
 + ИмяОтчета = Метаданные().Представление();
 +
 + ПараметрыРегистрации.Вставить("Вид", "ДополнительныйОтчет");
 + ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
 + ПараметрыРегистрации.Вставить("Наименование", "Поступления номенклатуры");
 + ПараметрыРегистрации.Вставить("Версия", "1.0");
 + ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
 + ПараметрыРегистрации.Вставить("Информация", "Прайс лист с возможностью вывода картинок. Автор ITMS");
 +
 + ТаблицаКоманд = ПолучитьТаблицуКоманд();
 +
 + ДобавитьКоманду(ТаблицаКоманд, ИмяОтчета, Метаданные().ПолноеИмя(), "ОткрытиеФормы", Истина);
 +
 + ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
 +
 + Возврат ПараметрыРегистрации;
 +КонецФункции
 +
 +Функция ПолучитьТаблицуКоманд()
 + Команды = Новый ТаблицаЗначений;
 + Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
 + Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
 + Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
 + Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
 + Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
 + Возврат Команды;
 +КонецФункции
 +
 +Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
 + НоваяКоманда = ТаблицаКоманд.Добавить();
 + НоваяКоманда.Представление = Представление;
 + НоваяКоманда.Идентификатор = Идентификатор;
 + НоваяКоманда.Использование = Использование;
 + НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
 + НоваяКоманда.Модификатор = Модификатор;
 +КонецПроцедуры
 +
 +</code>
 +=== Вывод в Word ===
 +
 +ПутьКФайлуМакетаНаКлиенте - путь к файлу Word для заполнения
 +РеквизитыДляПечати - структура, где имя совпадает с именем закладки в Word
 +<code>
 +
 +&НаСервере
 +Функция ПодготовкаПечати(ВидДоговораДляПечати)
 +
 + РеквизитыДляПечати = РеквизитФормыВЗначение("Объект").ПолучитьМакетыИРеквизитыДоговора(ЭтотОбъект,ВидДоговораДляПечати);
 +
 + Возврат  РеквизитыДляПечати
 +
 +КонецФункции
 +
 +&НаКлиенте
 +Процедура Печать(Команда)
 +  РеквизитыДляПечати = ПодготовкаПечати(ВидДоговора);
 +  // Выводим Договор ИТС
 +  ДвоичныеДанные = ПолучитьИзВременногоХранилища(РеквизитыДляПечати.Договор_ИТС);
 +  ПутьКФайлуМакетаНаКлиенте = КаталогВременныхФайлов()+"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();
 + КонецПопытки;
 +КонецПроцедуры
 +</code>
 +
 +Код в модуле обработки:
 +<code>
 +&НаСервере
 +Функция ПолучитьМакетыИРеквизитыДоговора(ФормаОбр,ВидДоговора) Экспорт
 + РеквизитыДляПечати = Новый Структура;
 + Если ВидДоговора = "ИТС" Тогда
 + ПодготовитьДанныеДоговора(РеквизитыДляПечати,ФормаОбр);
 +     ПолучитьМакеты(ВидДоговора,РеквизитыДляПечати);
 +     ЗаполнитьДанныеПоПриложению(РеквизитыДляПечати.ДанныеНаПечать,ФормаОбр);
 +КонецЕсли;
 +КонецФункции;
 +
 +&НаСервере
 +Процедура ПолучитьМакеты(ВидДоговора,РеквизитыДляПечати)
 + Если ВидДоговора = "ИТС" Тогда
 + // Получаем макет Договора ИТС
 + ИмяМакета = "ПФ_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].Представление;
 + Иначе
 + ПредставлениеАдреса = "";
 + КонецЕсли;
 +
 +
 + Возврат ПредставлениеАдреса
 +КонецФункции
 +
 +
 +#КонецОбласти
 +
 +</code>
 +
 +=== Изменение движений проведенного документа  ===
 +<code>
 +&НаСервере
 +Процедура Команда1НаСервере()
 + Запрос = Новый Запрос;
 + Запрос.Текст = 
 + "ВЫБРАТЬ
 + | ОперацияБух.Ссылка КАК Ссылка,
 + | ОперацияБух.Номер КАК Номер,
 + | ОперацияБух.Дата КАК Дата,
 + | ОперацияБух.Организация КАК Организация,
 + | ОперацияБух.Содержание КАК Содержание,
 + | ОперацияБух.ТиповаяОперация КАК ТиповаяОперация,
 + | ОперацияБух.СпособЗаполнения КАК СпособЗаполнения
 + |ИЗ
 + | Документ.ОперацияБух КАК ОперацияБух
 + |ГДЕ
 + | ОперацияБух.Дата МЕЖДУ &Дата1 И &Дата2";
 +
 + Запрос.УстановитьПараметр("Дата1", Дата('2020.01.01 00:00:00'));
 + Запрос.УстановитьПараметр("Дата2", Дата('2020.07.18 23:59:59'));
 +
 + РезультатЗапроса = Запрос.Выполнить();
 +
 + ВыборкаД = РезультатЗапроса.Выбрать();
 +
 + Пока ВыборкаД.Следующий() Цикл
 + // проверим что перед нами поступление
 + Если СтрНайти(ВыборкаД.Содержание,"Поступление ТМЦ") <> 0  И СтрНайти(ВыборкаД.Номер,"Ш") <> 0 Тогда
 + Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
 + Набор.Отбор.Регистратор.Установить(выборкаД.Ссылка);
 + Набор.Прочитать();
 + Инд = 0;
 + Для Каждого ДВ ИЗ Набор Цикл
 + Если ДВ.СчетКт = ПланыСчетов.Хозрасчетный.ТорговаяНаценкаНТТ Тогда
 + Набор.Удалить(Инд);
 + Набор.Записать(истина);
 + Сообщить(ДВ);
 + КонецЕсли;
 + Инд = Инд + 1;
 + КонецЦикла;
 + Иначе
 + Продолжить
 + КонецЕсли;
 +
 + КонецЦикла;
 +
 +
 +
 +КонецПроцедуры
 +
 +&НаКлиенте
 +Процедура Команда1(Команда)
 + Команда1НаСервере();
 +КонецПроцедуры
 +
 +</code>
 +
 +=== Вывод реквизитов документа на форму  ===
 +<code>
 +         нРеквизиты = Новый Массив;
 + // Страница Заказ с сайта
 + ДобавитьЭлементНаФорму(ЭтаФорма.Элементы,"ЗаказССайта",Тип("ГруппаФормы"),ЭтаФорма.Элементы.ГруппаСтраницы,ВидГруппыФормы.Страница,,,"Заказ с сайта");
 +   
 + ТЗ_РеквизитовОбъекта = Новый ТаблицаЗначений;
 + ТЗ_РеквизитовОбъекта.Колонки.Добавить("Имя");
 + ТЗ_РеквизитовОбъекта.Колонки.Добавить("Путь");
 + ТЗ_РеквизитовОбъекта.Колонки.Добавить("Заголовок");
 +
 + Стр = ТЗ_РеквизитовОбъекта.Добавить();
 + Стр.Имя = "итмс_Сайт";
 + Стр.Путь = "Объект."+Стр.Имя;
 + Стр.Заголовок = "Заказ загружен с сайта";
 +
 + Стр = ТЗ_РеквизитовОбъекта.Добавить();
 + Стр.Имя = "итмс_ЗаказССайта";
 + Стр.Путь = "Объект."+Стр.Имя;
 + Стр.Заголовок = "Заказ с сайта";
 +
 + Для Каждого Реквизит Из ТЗ_РеквизитовОбъекта Цикл
 + ДобавитьЭлементНаФорму(ЭтаФорма.Элементы,
 +                        Реквизит.Имя,
 +                        Тип("ПолеФормы"),
 +    ЭтаФорма.Элементы.ЗаказССайта,
 +    ВидПоляФормы.ПолеВвода,
 +    Реквизит.Путь,,
 +    Реквизит.Заголовок);
 + КонецЦикла;
 + // начинаем вывод реквизитов формы (не созданы в конфигураторе как реквизиты объекта)
 + ДобавитьРеквизит("Фамилия",
 + ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)),
 +      "Фамилия",,нРеквизиты);
 + ДобавитьРеквизит("Имя",
 + ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)),
 +      "Имя",,нРеквизиты); 
 + ДобавитьРеквизит("Отчество",
 + ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)),
 +      "Отчество",,нРеквизиты);
 + ДобавитьРеквизит("Телефон",
 + ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)),
 +      "Телефон",,нРеквизиты); 
 + ДобавитьРеквизит("НомерЗаказаНаСайте",
 + ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)),
 +      "Номер заказа на сайте",,нРеквизиты);
 + ДобавитьРеквизит("ИНН",
 + ПолучитьОписаниеТипа(Тип("Строка"),Новый КвалификаторыСтроки(60)),
 +      "ИНН",,нРеквизиты);
 + ЭтаФорма.ИзменитьРеквизиты(нРеквизиты);  
 + Для Каждого Реквизит Из нРеквизиты Цикл
 + ДобавитьЭлементНаФорму(ЭтаФорма.Элементы,
 +                        Реквизит.Имя,
 +                        Тип("ПолеФормы"),
 +    ЭтаФорма.Элементы.ЗаказССайта,
 +    ВидПоляФормы.ПолеВвода,
 +    Реквизит.Имя,,
 +    Реквизит.Заголовок);
 + КонецЦикла;
 +
 +
 +</code>
 +
 +=== Таблица значений в структуру  ===
 +<code>
 +&НаСервере
 +Процедура Команда1НаСервере()
 + ТЗ = Новый ТаблицаЗначений;
 + ТЗ.Колонки.Добавить("А");
 + ТЗ.Колонки.Добавить("Б");
 + ТЗ.Колонки.Добавить("В");
 + ТЗ.Колонки.Добавить("Г");
 + Стр = ТЗ.Добавить();
 + Стр.А = "оо";
 + Стр.Б = "о1о";
 + Стр.В = "о2";
 + Стр.Г = "о3";
 + ТестСтруктура = Новый Структура;
 + Для Каждого Кол Из ТЗ.Колонки Цикл
 + ТестСтруктура.Вставить(Кол.Имя,ТЗ[0][Кол.Имя]);
 + КонецЦикла;
 +КонецПроцедуры
 +</code>
  • wiki/1c/coding.1551323461.txt.gz
  • Последнее изменение: 2019/02/28 06:11
  • anton