Это старая версия документа!
Кодинг
Изменение имени переменной в цикле
Функция ДобавитьСтрокиВТЗ(ТЗ,Строка,ТекстДок) стр = ТЗ.Добавить(); Для Каждого Колонка ИЗ ТЗ.Колонки Цикл Стр[Колонка.Имя] = СокрЛП(ТекстДок.ПолучитьСтроку(Строка)); Строка = Строка + 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");
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, ИмяОтчета, Метаданные().ПолноеИмя(), "ОткрытиеФормы", Истина);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры