wiki:1c:coding

Различия

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

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

Следующая версия
Предыдущая версия
wiki:1c:coding [2019/02/28 05:45]
anton создано
wiki:1c:coding [2024/05/08 02:04] (текущий)
anton
Строка 1: Строка 1:
-1+==== Кодинг ==== 
 +=== Методика тестирования внешних обработок (дополнительные отчеты и обработки) === 
 +<code> 
 +#Область Отладка  
 + 
 +// Процедура - Запуск отладки 
 +// 
 +// Параметры: 
 +//  АдресОбработки - "Y:\1c_support\КСК\итмс_ДополнительноСоглашение.epf" тип Строка  
 +// 
 +Процедура ЗапускОтладки(АдресОбработки,МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати) 
 +  
 + Если АдресОбработки <> ЭтотОбъект.ИспользуемоеИмяФайла Тогда 
 + Обр = ВнешниеОбработки.Создать(АдресОбработки); 
 + Обр.Печать(МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати); 
 + КонецЕсли; 
 +  
 +КонецПроцедуры 
 + 
 +#КонецОбласти 
 + 
 +#Область Печать 
 + 
 +Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати=Неопределено, ПараметрыВывода=Неопределено,СписокСотрудников = Неопределено) Экспорт 
 +  
 + // Отладка 
 + //ЗапускОтладки("Y:\1c_support\КСК\итмс_ДополнительноСоглашение.epf",МассивОбъектов,КоллекцияПечатныхФорм,ОбъектыПечати,ПараметрыПечати); 
 +КонецПроцедуры  
 +#КонецОбласти 
 +</code> 
 +=== Вывод ТЗ в печ форму === 
 +<code> 
 +// Возвращает табличный документ на основании таблицы значений 
 +// 
 +// Параметры: 
 +//  ДанныеВТабличныйДокумент - ТаблицаЗначений 
 +// 
 +&НаСервереБезКонтекста 
 +Функция ДанныеТаблицыЗначенийВТабличныйДокумент(ДанныеВТабличныйДокумент) 
 +  
 + ТабличныйДокумент = Новый ТабличныйДокумент; 
 + Построитель = Новый ПостроительОтчета; 
 + Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДанныеВТабличныйДокумент);        
 + Построитель.Вывести(ТабличныйДокумент); 
 +  
 + Возврат ТабличныйДокумент; 
 + 
 +КонецФункции // ДанныеТаблицыЗначенийВТабличныйДокумент() 
 +</code> 
 + 
 +=== Изменение имени переменной в цикле === 
 +<code> 
 +Функция ДобавитьСтрокиВТЗ(ТЗ,Строка,ТекстДок) 
 + стр = ТЗ.Добавить(); 
 + Для Каждого Колонка ИЗ ТЗ.Колонки Цикл 
 +  Стр[Колонка.Имя] = СокрЛП(ТекстДок.ПолучитьСтроку(Строка)); 
 +  Строка = Строка + 1
 + КонецЦикла;   
 + Возврат Строка 
 +КонецФункции 
 +</code> 
 + 
 +=== Запуск обработки из макета внешней обработки === 
 +  * Добавляем внешнюю обработку для запуска как макет с типом "Внешняя компонента".  
 +  * В модуле обработки пишем функцию: 
 +<code> 
 +&НаСервере 
 +Функция ПолучитьОбмен_Данными_XML_2_1_7()  Экспорт 
 + Обработка = ЭтотОбъект.ПолучитьМакет("EPF_Универсальный_Обмен_Данными_XML_2_1_7"); 
 + АдресОбработкиВХранилище = ПоместитьВоВременноеХранилище(Обработка); 
 +  
 + Возврат АдресОбработкиВХранилище 
 +  
 +КонецФункции 
 +</code> 
 +  * На форме обработки создаем событие :"При открытии", В его обработчике пишем: 
 +<code> 
 +&НаКлиенте 
 +Процедура ПриОткрытии(Отказ) 
 + ИмяОбработки = ПодключитьВнешнююОбработку(); 
 + // Откроем форму подключенной внешней обработки 
 + Форма = ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма.УправляемаяФорма"); 
 + //ЭтаФорма.Закрыть(); 
 +КонецПроцедуры 
 + 
 +&НаСервере 
 +Функция ПодключитьВнешнююОбработку() 
 + Возврат ВнешниеОбработки.Подключить(РеквизитФормыВЗначение("Объект").ПолучитьОбмен_Данными_XML_2_1_7(), , Ложь); 
 +КонецФункции 
 +</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.1551321917.txt.gz
  • Последнее изменение: 2019/02/28 05:45
  • anton