10
Csar
19.06.13
✎
17:21
|
Если актуально, то вот обработка выгрузки из источника:
Перем одТипСтрока; // Тип("Строка")
Перем ПутьОбмена;
Перем МаскаФайловЗагрузки;
Перем МаскаФайловВыгрузки;
Перем ИмяФайлаПравилОбмена;
Перем ДлинаКодаПакета;
Перем СерверОбменаFTP;
Перем ПортОбменаFTP;
Перем ЛогинОбменаFTP;
Перем ПарольОбменаFTP;
Процедура Инициализация()Экспорт
ПутьОбмена = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("ПутьКПакетамОбменаСЛогистикойОС").Значение);
Если Прав(СокрЛП(ПутьОбмена),1) <> "\" Тогда
ПутьОбмена = СокрЛП(ПутьОбмена) + "\";
КонецЕсли;
МаскаФайловЗагрузки = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("МаскаФайловОбменаДляВыгрузкиБИБ8СохраннаяРасписка").Значение); // = Logistic8-BIB82-Data_*.xml
//МаскаФайловВыгрузки = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("МаскаФайловОбменаДляВыгрузки").Значение); // = V82DataExchanUpL_*.xml
ИмяФайлаПравилОбмена = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("ИмяФайлаПравилВыгрузкиВ_УИБ82_СохраннаяРасписка").Значение);//"C:\DBASES\Obmen\Logistic\Rules\Правила_Логистика82-БИБ82_СохраннаяЗаписка.xml";
ДлинаКодаПакета = 10;
ИмяФайлаПравилОбмена = "\\Tsdt3\dbases$\Obmen\Logistic\Rules\Правила_Логистика82-БИБ82_СохраннаяЗаписка.xml";
ПутьОбмена = "\\Tsdt3\dbases$\Obmen\Logistic\Packets\";
КонецПроцедуры
Процедура ВыполнитьЗагрузку() Экспорт
ЗаписьЖурналаРегистрации("Обмен.БИБ82.Загрузка.СохраннаяЗаписка",УровеньЖурналаРегистрации.Информация, , ,"Начало загрузки Сохранных записок");
Инициализация();
//=================================================================================================================================================================================
//============================================= ЗАГРУЗКА ИЗ Логистика8 ===============================================================
//=================================================================================================================================================================================
//
////Ищем новый не полученный файл
МассивФайлов = НайтиФайлы(ПутьОбмена,МаскаФайловЗагрузки);
Файл = Новый ЧтениеXML;
МассивФайлов = СортировкаПоДатеИзменения(МассивФайлов);
Если МассивФайлов.Количество() > 0 Тогда
//Получаем массив всех файлов и грузим всё
Загружен = Ложь;
Индекс = 0;
Пока (Не Загружен) И (Индекс <= МассивФайлов.ВГраница()) Цикл
ЭлементМассива = МассивФайлов[МассивФайлов.ВГраница() - Индекс];
Попытка
Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработка.ИмяФайлаОбмена = ПутьОбмена + ЭлементМассива.Имя;
Обработка.РежимОбмена = "Загрузка";
Обработка.ФлагРежимОтладки = Истина;
Обработка.ВыполнитьЗагрузку();
ТекстСообщения = "Загружен файл: "+ Обработка.ИмяФайлаОбмена;
Загружен = Истина;
ЗаписьЖурналаРегистрации("Обмен.БИБ82.Загрузка",УровеньЖурналаРегистрации.Информация, , ,ТекстСообщения);
Файл.ОткрытьФайл(ЭлементМассива.ПолноеИмя);
СодержимоеЗагруженного = ПолучитьСодержимоеФайла(Файл, Обработка);
Файл.Закрыть();
Если СодержимоеЗагруженного.Количество() > 0 Тогда
//Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль = Справочники.УчетныеЗаписиЭлектроннойПочты.НайтиПоНаименованию("sed@telros-telecom.ru");
ОбъектПрофиль = Профиль.ПолучитьОбъект();
Текст = "Вследствие обмена из Логистики были созданы следующие документы:
|";
Для каждого СтрокаСодержимого Из СодержимоеЗагруженного Цикл
Если ЗначениеЗаполнено(СтрокаСодержимого.Номер) И ЗначениеЗаполнено(СтрокаСодержимого.Дата) Тогда
Текст = Текст + Строка("Загружен документ №" + СтрокаСодержимого.Номер + " от " + СтрокаСодержимого.Дата + Символы.ПС);
КонецЕсли;
КонецЦикла;
//удалим последний символ
Текст = Лев(Текст, СтрДлина(Текст)-1);
Текст = Текст + Строка(""+ Символы.ПС + "Перечисленные выше документы нуждаются в обязательном проведении/перепроведении!");
Кому = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("АдресаРассылкиРезультатовОбменаЛогистики8-БИБ82_СохраннаяЗаписка").Значение);
СтруктураПисьма = Новый Структура("Кому, Тема, Тело, Пароль", Кому,
"Загружены акты ответственного хранения", Текст, ОбъектПрофиль.Пароль);
Попытка
ЭлектроннаяПочта.ОтправитьСообщение(Профиль, СтруктураПисьма);
ТекстСообщения = "Загружено " + СодержимоеЗагруженного.Количество()+ " документов";
ЗаписьЖурналаРегистрации("Обмен.БИБ82.Загружено",УровеньЖурналаРегистрации.Ошибка, , ,ТекстСообщения);
Исключение
Сообщить(ОписаниеОшибки());
ОбщегоНазначения.СообщитьОбОшибке();
//Предупреждение("Произошли ошибки при проверке настроек учетной записи и отправке письма.
//|Описание ошибки приведено в окне сообщения.");
Возврат;
КонецПопытки;
//ИнтернетПочта = Новый ИнтернетПочта;
//
//Попытка
// ИнтернетПочта.Подключиться(Профиль.Наименование, Профиль.Пароль);
//Исключение
// Сообщить(ОписаниеОшибки());
// Предупреждение("Произошли ошибки при проверке настроек учетной записи.
// |Описание ошибки приведено в окне сообщения.");
// Возврат;
//КонецПопытки;
//
//Письмо = Новый ИнтернетПочтовоеСообщение;
//Текст = "В следствие обмена из Логистики были созданы следующие документы:
//|";
//Для каждого СтрокаСодержимого Из СодержимоеЗагруженного Цикл
// Текст = Текст + Строка("Загружен документ №" + СтрокаСодержимого.Номер + " от " + СтрокаСодержимого.Дата + "|");
//КонецЦикла;
//Письмо.Текст = (Текст);
//Письмо.Получатели.Добавить("nosov@telros-telecom.ru");
//Письмо.Тема = "Загружены акты ответственного хранения";
//Письмо.Отправитель = Профиль.АдресЭлектроннойПочты;
////Письмо.ИмяОтправителя = Профиль.ИмяПользователя;
//
//ИнтернетПочта.Послать(Письмо);
//ИнтернетПочта.Отключиться();
//Сообщить("Загружены следующие документы ""Акт ответственного хранения"":");
//Для каждого СтрокаСодержимого Из СодержимоеЗагруженного Цикл
// Сообщить("Загружен документ №" + СтрокаСодержимого.Номер + " от " + СтрокаСодержимого.Дата);
//КонецЦикла;
КонецЕсли;
Исключение
ТекстСообщения = "Не загружен файл: "+ Обработка.ИмяФайлаОбмена+". "+ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Обмен.БИБ82.Загрузка",УровеньЖурналаРегистрации.Ошибка, , ,ТекстСообщения);
Загружен = Ложь;
Индекс = Индекс + 1;
КонецПопытки;
КонецЦикла;
//ПодключитьРасширениеРаботыСФайлами();
Для Каждого ЭлементМассива Из МассивФайлов Цикл
НомерПакета = ПолучитьНомерПакета(ЭлементМассива.Имя);
Попытка
УдалитьФайлы(ЭлементМассива.ПолноеИмя);
ТекстСообщения = "Файл с пакета обмена с номером "+ Строка(НомерПакета) +" удален!";
ЗаписьЖурналаРегистрации("Обмен.БИБ82",УровеньЖурналаРегистрации.Информация, , ,ТекстСообщения);
Исключение
ТекстСообщения = "Не удалось удалить Файл с пакета обмена "+ЭлементМассива.ПолноеИмя+"! "+ОписаниеОшибки();
ЗаписьЖурналаРегистрации("Обмен.БИБ82",УровеньЖурналаРегистрации.Ошибка, , ,ТекстСообщения);
Сообщить(ТекстСообщения);
КонецПопытки;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Функция ПолучитьНомерПакета(ИмяФайла)
Поз_ = Найти(ИмяФайла, "_");
ПозТочка = Найти(ИмяФайла, ".");
//СтрокаНомера = Сред(ИмяФайла, Поз_+1, ПозТочка-1 );
СтрокаНомера = Сред(ИмяФайла, Поз_+1, 10 );//ДлинаКодаПакета = 10;
//Убираем не значащие нули
Если Лев(СтрокаНомера, 1) = "0" Тогда
ЛевСимвол = Лев(СтрокаНомера, 1);
Пока ЛевСимвол = "0" Цикл
СтрокаНомераДлина = СтрДлина(СтрокаНомера);
СтрокаНомера = Прав(СтрокаНомера, СтрокаНомераДлина - 1);
ЛевСимвол = Лев(СтрокаНомера, 1);
КонецЦикла;
КонецЕсли;
//НомерЗагруженногоПакета = Число(Сред(ИмяФайла, Поз_+1, ПозТочка-1 ));
НомерЗагруженногоПакета = Число(СтрокаНомера);
Возврат НомерЗагруженногоПакета;
КонецФункции
Функция ПолучитьСодержимоеФайла(ФайлОбмена, Обработка)
ТаблицаДокументов = Новый ТаблицаЗначений;
ТаблицаДокументов.Колонки.Добавить("Дата");
ТаблицаДокументов.Колонки.Добавить("Номер");
// Типы
одТипСтрока = Тип("Строка");
одТипБулево = Тип("Булево");
одТипЧисло = Тип("Число");
одТипДата = Тип("Дата");
одТипХранилищеЗначения = Тип("ХранилищеЗначения");
одТипУникальныйИдентификатор = Тип("УникальныйИдентификатор");
одТипДвоичныеДанные = Тип("ДвоичныеДанные");
одТипВидДвиженияНакопления = Тип("ВидДвиженияНакопления");
одТипУдалениеОбъекта = Тип("УдалениеОбъекта");
одТипВидСчета = Тип("ВидСчета");
одТипТип = Тип("Тип");
одТипСоответствие = Тип("Соответствие");
ЗначениеПустаяДата = Дата('00010101');
// Типы узлов xml
одТипУзлаXML_КонецЭлемента = ТипУзлаXML.КонецЭлемента;
одТипУзлаXML_НачалоЭлемента = ТипУзлаXML.НачалоЭлемента;
одТипУзлаXML_Текст = ТипУзлаXML.Текст;
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
Если ИмяУзла = "Объект" Тогда
ТипОбъектаСтрокой = Обработка.одАтрибут(ФайлОбмена, одТипСтрока, "Тип");
Если ТипОбъектаСтрокой = "ДокументСсылка.ДТ_АктПриемаПередачиОборудованияКонтрагенту" Тогда
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
Если ИмяУзла = "Ссылка" Тогда
Пока ФайлОбмена.Прочитать() Цикл
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
Имя = Обработка.одАтрибут(ФайлОбмена, одТипСтрока, "Имя");
Если ИмяУзла = "Свойство" И Имя = "Дата" Тогда
ФайлОбмена.Прочитать();
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
ИскатьПоСвойству = Обработка.одАтрибут(ФайлОбмена, одТипСтрока, "Свойство");
Значение = Обработка.одЗначениеЭлемента(ФайлОбмена, одТипДата, ИскатьПоСвойству);
СтрокаТД = ТаблицаДокументов.Добавить();
СтрокаТД.Дата = Значение;
ФайлОбмена.Прочитать();
КонецЕсли;
Если ИмяУзла = "Свойство" И Имя = "Номер" Тогда
ФайлОбмена.Прочитать();
ИмяУзла = ФайлОбмена.ЛокальноеИмя;
ИскатьПоСвойству = Обработка.одАтрибут(ФайлОбмена, одТипСтрока, "Свойство");
Значение = Обработка.одЗначениеЭлемента(ФайлОбмена, одТипСтрока, ИскатьПоСвойству);
//СтрокаТД = ТаблицаДокументов.Добавить();
СтрокаТД.Номер = Значение;
ФайлОбмена.Прочитать();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат ТаблицаДокументов;
КонецФункции // ПолучитьСодержимоеФайла()
Функция СортировкаПоДатеИзменения(Массив)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Файл");
ТЗ.Колонки.Добавить("Дата");
Для каждого ЭлМассива Из Массив Цикл
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Файл = ЭлМассива;
СтрокаТЗ.Дата = ЭлМассива.ПолучитьУниверсальноеВремяИзменения();
КонецЦикла;
Массив.Очистить();
ТЗ.Сортировать("Дата");
Для каждого ЭлТЗ Из ТЗ Цикл
Массив.Добавить(ЭлТЗ.Файл);
КонецЦикла;
Возврат Массив;
КонецФункции // СортировкаПоДатеИзменения()
одТипСтрока = Тип("Строка");
|
|
12
Csar
19.06.13
✎
17:23
|
(10) перепутал, это код загрузки в приемник
а тут обработка выгрузки из источника
Перем ПутьОбмена;
Перем МаскаФайловЗагрузки;
Перем МаскаФайловВыгрузки;
Перем ИмяФайлаПравилОбмена;
Перем ДлинаКодаПакета;
Перем СерверОбменаFTP;
Перем ПортОбменаFTP;
Перем ЛогинОбменаFTP;
Перем ПарольОбменаFTP;
&НаСервере
Процедура Инициализация()Экспорт
//ПутьОбмена = "C:\DBASES\Obmen\Logistic\Packets\";
ПутьОбмена = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("ПутьКПакетамОбменаСЛогистикой").Значение);
Если Прав(СокрЛП(ПутьОбмена),1) <> "\" Тогда
ПутьОбмена = СокрЛП(ПутьОбмена) + "\";
КонецЕсли;
//МаскаФайловЗагрузки = "V81DataHRMDTExch_";//ххххх.xml
//МаскаФайловЗагрузки = СокрЛП(Справочники.ДТ_НастройкиОрганизации.МаскаФайловЗагрузки.Значение);
//МаскаФайловЗагрузки = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("МаскаФайловОбменаДляЗагрузкиУИБ8").Значение); // = UIB81_LOGISTIC_Data*.xml
МаскаФайловВыгрузки = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("МаскаФайловОбменаДляВыгрузкиБИБ8СохраннаяРасписка").Значение); // = Logistic8-BIB82-Data_*.xml
ИмяФайлаПравилОбмена = СокрЛП(Справочники.ДТ_НастройкиОрганизации.НайтиПоНаименованию("ИмяФайлаПравилВыгрузкиВ_УИБ82_СохраннаяРасписка").Значение);//"\\Tsdt3\dbases$\Obmen\Logistic\Rules\Правила_Логистика82-БИБ82_СохраннаяЗаписка.xml";
ДлинаКодаПакета = 10;
ПутьОбмена = "\\Tsdt3\dbases$\Obmen\Logistic\Packets\"
КонецПроцедуры
//*******************************************
&НаСервере
Функция ПолучитьНомерПакета(ИмяФайла)
Поз_ = Найти(ИмяФайла, "_");
ПозТочка = Найти(ИмяФайла, ".");
//СтрокаНомера = Сред(ИмяФайла, Поз_+1, ПозТочка-1 );
СтрокаНомера = Сред(ИмяФайла, Поз_+1, 10 );//ДлинаКодаПакета = 10;
//Убираем не значащие нули
Если Лев(СтрокаНомера, 1) = "0" Тогда
ЛевСимвол = Лев(СтрокаНомера, 1);
Пока ЛевСимвол = "0" Цикл
СтрокаНомераДлина = СтрДлина(СтрокаНомера);
СтрокаНомера = Прав(СтрокаНомера, СтрокаНомераДлина - 1);
ЛевСимвол = Лев(СтрокаНомера, 1);
КонецЦикла;
КонецЕсли;
//НомерЗагруженногоПакета = Число(Сред(ИмяФайла, Поз_+1, ПозТочка-1 ));
НомерЗагруженногоПакета = Число(СтрокаНомера);
Возврат НомерЗагруженногоПакета;
КонецФункции
&НаСервере
Процедура УстановитьУзелОбменаУСтрокДерева(Дерево, УзелОбмена)Экспорт
Для Каждого Строка Из Дерево Цикл
Если Строка.ЭтоГруппа Тогда
УстановитьУзелОбменаУСтрокДерева(Строка.Строки, УзелОбмена);
Иначе
Строка.СсылкаНаУзелОбмена = УзелОбмена;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВыполнитьВыгрузку() Экспорт
ЗаписьЖурналаРегистрации("ОбменСохранЗаписка.Выгрузка.Старт",УровеньЖурналаРегистрации.Информация);
Инициализация();
//=================================================================================================================================================================================
//============================================= ВЫГРУЗКА В БИБ 8.2 ==================================================================
//=================================================================================================================================================================================
//получим все наши файлы с выгрузками. Из них выберем наименьший и вытащим номер. От номера отнимем единицу и число запишем как НомерПоследнегоПолученного
МассивФайлов = НайтиФайлы(ПутьОбмена,МаскаФайловВыгрузки);
МассивФайлов = СортировкаПоДатеИзменения(МассивФайлов);
Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
УзелОбмена = ПланыОбмена.ОбменЛогистика8_БИБ82_СохраннаяРасписка.НайтиПоНаименованию("центр");
Если МассивФайлов.Количество() > 0 Тогда
НомерПоследнегоПолученного = ПолучитьНомерПакета(МассивФайлов[0].Имя) - 1;
НомерПоследнегоОтправленного = ПолучитьНомерПакета(МассивФайлов[МассивФайлов.ВГраница()].Имя);
Иначе
НомерПоследнегоПолученного = УзелОбмена.НомерОтправленного;
НомерПоследнегоОтправленного = УзелОбмена.НомерОтправленного;
КонецЕсли;
////временно, удалить.
//ОбъектУзелОбмена = УзелОбмена.ПолучитьОбъект();
//ОбъектУзелОбмена.НомерПринятого = НомерПоследнегоПолученного;
//ОбъектУзелОбмена.НомерПоследнегоОтправленного = НомерПоследнегоОтправленного;
//ОбъектУзелОбмена.Записать();
////
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, НомерПоследнегоПолученного);
ОбъектУзелОбмена = УзелОбмена.ПолучитьОбъект();
ОбъектУзелОбмена.НомерПринятого = НомерПоследнегоПолученного;
ОбъектУзелОбмена.Записать();
//Добиваем номер пакета не значащими нулями
СтрокаНомера = Строка(УзелОбмена.НомерОтправленного + 1);
//Убираем лишние символы из строки номера пакета
СтрокаНомера = СтрЗаменить(СтрокаНомера, Символ(160), "");
ДлинаКодаТек = СтрДлина(СтрокаНомера);
Для к=1 по (ДлинаКодаПакета-ДлинаКодаТек) Цикл
СтрокаНомера = "0"+ СтрокаНомера;
КонецЦикла;
Обработка.ИмяФайлаОбмена = ПутьОбмена + СтрЗаменить(МаскаФайловВыгрузки,"*",СтрокаНомера);
Обработка.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбмена;
Обработка.ЗагрузитьПравилаОбмена(Обработка.ИмяФайлаПравилОбмена);
УстановитьУзелОбменаУСтрокДерева(Обработка.ТаблицаПравилВыгрузки.Строки, УзелОбмена.Ссылка);
Обработка.ВыполнитьВыгрузку();
//Сообщить("Выгружен файл: "+ Обработка.ИмяФайлаОбмена);
ЗаписьЖурналаРегистрации("ОбменСохранЗаписка.Выгрузка.Файл",УровеньЖурналаРегистрации.Информация,,,"Выгружен файл:" + Обработка.ИмяФайлаОбмена);
ЗаписьЖурналаРегистрации("ОбменСохранЗаписка.Выгрузка.Финиш",УровеньЖурналаРегистрации.Информация);
КонецПроцедуры
Функция СортировкаПоДатеИзменения(Массив)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Файл");
ТЗ.Колонки.Добавить("Дата");
Для каждого ЭлМассива Из Массив Цикл
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Файл = ЭлМассива;
СтрокаТЗ.Дата = ЭлМассива.ПолучитьУниверсальноеВремяИзменения();
КонецЦикла;
Массив.Очистить();
ТЗ.Сортировать("Дата");
Для каждого ЭлТЗ Из ТЗ Цикл
Массив.Добавить(ЭлТЗ.Файл);
КонецЦикла;
Возврат Массив;
КонецФункции // СортировкаПоДатеИзменения()
|
|