1. Для начала сохранил нужный мне отчет как внешний .
2. В модуле при открытии этого отчета прописал выгрузку результата отчета в файлы mxl и сохранение на FTP сервере организации, в моем случае изменение модуля формы отчета ОСВ выглядит так :
Функция СоединениеФТП() /// Айбек
Сервер = "192.168.1.59";
Пользователь = "region";
Пароль = "ht3214";
Порт = 21;
Попытка
Соединение = Новый FTPСоединение(Сервер, Порт, Пользователь, Пароль, ,Ложь);
Исключение
// ошибка при подключении к ftp
Сообщить("Ошибка при подключении к FTP : " + Сервер + " ! " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Возврат Соединение;
КонецФункции
Процедура ИзменитьОтбор(Код) Экспорт
Парам = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ОрганизацияПараметр");
Парам.Использование = Истина;
Парам.Значение = Справочники.Организации.НайтиПоКоду(Код);
КонецПроцедуры
Процедура ВыгрузитьОСВ(Соединение,КодОрганизации,КодУзла,Голова = Ложь)
ИзменитьОтбор(КодОрганизации);
Настроить();
СтандартныеОтчеты.ВосстановитьНастройкиФормы(ЭтаФорма);
ОбновитьПанельНастроек();
СтандартныеОтчеты.УправлениеОтображениемОбластейОтчета(ЭтотОбъект, ЭтаФорма);
СтандартныеОтчеты.УправлениеОтображениемПанелиПользователя(ЭтаФорма);
СтандартныеОтчеты.ЗаполнитьТаблицуЭлементов(ЭтаФорма);
ОбновитьОтчет();
ЭлементыФормы.Результат.Записать(КаталогВременныхФайлов()+"/КНС_"+КодУзла+".mxl");
Если Голова Тогда
Соединение.Записать(КаталогВременныхФайлов()+"/КНС_"+КодУзла+".mxl","КНС_"+КодУзла+".mxl");
Иначе
Соединение.Записать(КаталогВременныхФайлов()+"/КНС_"+КодУзла+".mxl","фКНС_"+КодУзла+".mxl");
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
Соединение = СоединениеФТП();
/// Айбек
НачалоПериода = НачалоМесяца(ТекущаяДата());
КонецПериода = КонецМесяца(ТекущаяДата());
Если ПланыОбмена.ПоОрганизации.ЭтотУзел().Код = "КНС" Тогда
ВыгрузитьОСВ(Соединение,"000000001","АЛМ",Истина);
ВыгрузитьОСВ(Соединение,"АБ0000002","АПФ",Истина);
ВыгрузитьОСВ(Соединение,"ТР0002 ","ЖПФ",Истина);
ВыгрузитьОСВ(Соединение,"УР0000001","ЗКП",Истина);
ВыгрузитьОСВ(Соединение,"КЗ0000001","КПФ",Истина);
ВыгрузитьОСВ(Соединение,"АК0000001","МПФ",Истина);
ВыгрузитьОСВ(Соединение,"000000002","ЮКП",Истина);
ИначеЕсли ПланыОбмена.ПоОрганизации.ЭтотУзел().Код = "АЛМ" Тогда
ВыгрузитьОСВ(Соединение,"000000001","АЛМ");
ИначеЕсли ПланыОбмена.ПоОрганизации.ЭтотУзел().Код = "АПФ" Тогда
ВыгрузитьОСВ(Соединение,"АБ0000002","АПФ");
ИначеЕсли ПланыОбмена.ПоОрганизации.ЭтотУзел().Код = "ЖПФ" Тогда
ВыгрузитьОСВ(Соединение,"ТР0002 ","ЖПФ");
ИначеЕсли ПланыОбмена.ПоОрганизации.ЭтотУзел().Код = "ЗКП" Тогда
ВыгрузитьОСВ(Соединение,"УР0000001","ЗКП");
ИначеЕсли ПланыОбмена.ПоОрганизации.ЭтотУзел().Код = "КПФ" Тогда
ВыгрузитьОСВ(Соединение,"КЗ0000001","КПФ");
ИначеЕсли ПланыОбмена.ПоОрганизации.ЭтотУзел().Код = "МПФ" Тогда
ВыгрузитьОСВ(Соединение,"АК0000001","МПФ");
Иначе
ВыгрузитьОСВ(Соединение,"000000002","ЮКП");
КонецЕсли;
ПрекратитьРаботуСистемы();
КонецПроцедуры
3. Cохранил этот отчет в справочнике внешние отчеты , конешно можно его запускать на прямую как внешний но Я решил чтобы сам отчет был в базе.
Создал обработку которая бы запускала этот отчет в форме ПриОткрытии() прописал:
СсылкаОтчет = Справочники.ВнешниеОбработки.НайтиПоКоду("ШМ0000003");// код отчета в справочнике ВнешниеОбработки
ХранОбъект = СсылкаОтчет.ХранилищеВнешнейОбработки.Получить();
ХранОбъект.Записать(КаталогВременныхФайлов()+"/otchet.ert");
Отчет = ВнешниеОтчеты.Создать(КаталогВременныхФайлов()+"/otchet.ert");
ФормаОтчета = Отчет.ПолучитьФорму("ФормаОтчета");
ФормаОтчета.Открыть();
Если без сохранения можно ограничиться тремя нижними строчками , и на прямую указать путь к отчету.
Далее добавил задание в планировщик которое запускало все это:
ДЛЯ КЛИЕНТ-СЕРВЕРНОЙ БАЗЫ 1С
"C:\Program Files (x86)\1cv82\8.2.14.537\bin\1cv8.exe" ENTERPRISE /Salm-srv4\buh_cons82 /NАдмин /P1й2ц /AppAutoCheckMode /Execute"C:\RunSaveOSV.epf" /DisableStartupMessages
Расшифровки для создания задания :
alm-srv4 – Имя Сервера на котором находиться база
buh_cons82 – Имя Базы на севере 1С Предприятие
Админ – Имя пользователя
1й2ц – Пароль пользователя
C:\RunSaveOSV.epf – Путь к файлу обработки
ДЛЯ ФАЙЛОВОЙ БАЗЫ 1С
"C:\Program Files (x86)\1cv82\8.2.14.537\bin\1cv8.exe" ENTERPRISE /F”C:\База1С” /NАдмин /P1й2ц /AppAutoCheckMode /Execute"C:\RunSaveOSV.epf" /DisableStartupMessages
Расшифровки для создания задания :
C:\База1С – Каталог базы данных 1С Предприятие
Админ – Имя пользователя
1й2ц – Пароль пользователя
C:\RunSaveOSV.epf – Путь к файлу обработки
Задание выполнено , файлы сохраняются на фтп сервере, задание должно быть запущено в главном узле и дочках
4 . Сверка данных файлов , для этого я воспользовался типовой фукцией 1С для сравнения файлов , и в случае если файлы не равны отправлялось сообщение на почтовый адрес.
МодульФормы обработки сравнения файлов:
Функция ОтправитьНаПочту(ТекстПисьма)
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.Пользователь = "asdasd@mail.ru";
Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
Профиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная;
Профиль.ПользовательSMTP = "asdasd@mail.ru";
Профиль.Пароль = "выфвыф";
Профиль.ПарольSMTP = "выфвыф";
Профиль.ПользовательSMTP = "asdasd";
Профиль.АдресСервераSMTP = "smtp.mail.ru";
Профиль.ПортSMTP = 25;
Письмо = Новый ИнтернетПочтовоеСообщение;
//Письмо.Получатели.Добавить("321@321.kz");
Письмо.Получатели.Добавить("вфыв@выф.kz");
Письмо.ИмяОтправителя = "Служба проверки ОСВ";
Письмо.Отправитель.ОтображаемоеИмя = "Служба проверки ОСВ";
Письмо.Отправитель.Адрес = "asdasd@mail.ru";
Письмо.Кодировка = "UTF-8";
Письмо.Тема = "Расхождение данных в ОСВ от " +Формат(ТекущаяДата(),"ДЛФ=DD") ;
ТекстПисьма = Письмо.Тексты.Добавить(ТекстПисьма,ТипТекстаПочтовогоСообщения.HTML);
Почта = Новый ИнтернетПочта;
Попытка
Почта.Подключиться(Профиль);
Почта.Послать(Письмо);
Почта.Отключиться();
Отправлено = Истина;
Исключение
Сообщить(НСтр("Ошибка отправки!") + ОписаниеОшибки());
Отправлено = Ложь;
КонецПопытки;
Возврат Отправлено;
КонецФункции
Функция СоединениеФТП() /// Айбек
Сервер = "192.168.1.59";
Пользователь = "region";
Пароль = "585858";
Порт = 21;
Попытка
Соединение = Новый FTPСоединение(Сервер, Порт, Пользователь, Пароль, ,Ложь);
Исключение
// ошибка при подключении к ftp
Сообщить("Ошибка при подключении к FTP : " + Сервер + " ! " + ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
Возврат Соединение;
КонецФункции
Процедура ПроверитьОСВ(КодУзла,Соединение,Ошибка,ТекстДобавление)
Попытка /// лень писать код с проверкой существования файлов на фтп
Соединение.Получить("КНС_"+КодУзла+".mxl", КаталогВременныхФайлов()+"/КНС_"+КодУзла+".mxl");
Соединение.Получить("фКНС_"+КодУзла+".mxl", КаталогВременныхФайлов()+"/фКНС_"+КодУзла+".mxl");
Сравнение = Новый СравнениеФайлов;
Сравнение.ПервыйФайл = КаталогВременныхФайлов()+"/КНС_"+КодУзла+".mxl";
Сравнение.ВторойФайл = КаталогВременныхФайлов()+"/фКНС_"+КодУзла+".mxl";
Если НЕ Сравнение.Сравнить() Тогда
ТекстДобавление = ТекстДобавление + КодУзла + "
"; // Символы.ПС можно было
Ошибка = Истина;
КонецЕсли;
Исключение
КонецПопытки;
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие(Кнопка) // можно было прописать сразу при открытии , но я сначала проверял потом так и осталось
Соединение = СоединениеФТП();
Ошибка = Ложь;
ТекстДобавление = "";
ПроверитьОСВ("АЛМ",Соединение,Ошибка,ТекстДобавление);
ПроверитьОСВ("АПФ",Соединение,Ошибка,ТекстДобавление);
ПроверитьОСВ("ЮКП",Соединение,Ошибка,ТекстДобавление);
ПроверитьОСВ("ЖПФ",Соединение,Ошибка,ТекстДобавление);
ПроверитьОСВ("МПФ",Соединение,Ошибка,ТекстДобавление);
ПроверитьОСВ("КПФ",Соединение,Ошибка,ТекстДобавление);
ПроверитьОСВ("ЗКП",Соединение,Ошибка,ТекстДобавление);
Если Ошибка Тогда
ТекстHTML =
"
|
|
|
|
|
|
|Добрый День!
|
|Данное письмо было посланно в автоматическом режиме , отвечать на него не требуется, расхождение
|наблюдается по следующим узлам :
"
+ ТекстДобавление +"
|С уважением №"№"№" Айбек
|Департамент информационных технологий
|АО ""№"№"№"к""
|Тел: 1267
|
|";
ЛогФайл = Новый ТекстовыйДокумент;
ЛогФайл.УстановитьТекст(ТекстHTML);
Если НЕ ОтправитьНаПочту(ТекстHTML) Тогда
ЛогФайл.Записать(КаталогВременныхФайлов()+"/log.html");
Соединение.Записать(КаталогВременныхФайлов()+"/log.html","mail_error"+Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy")+".html");
КонецЕсли;
ЛогФайл.Записать(КаталогВременныхФайлов()+"/log.html");
Соединение.Записать(КаталогВременныхФайлов()+"/log.html","mail_error"+Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy")+".html");
КонецЕсли;
Сообщить("Расхождение данных по :" + ТекстДобавление);
КонецПроцедуры
Процедура ПриОткрытии()
КнопкаВыполнитьНажатие(Неопределено);
ПрекратитьРаботуСистемы();
КонецПроцедуры
5. Требуется создать задание в планировщике с запуском обработки из пункта №4 , по времени после выгрузок всех файлов.
6. Дополнительно требуется удалять эти файлы , можете сделать новую обработку и запускать через планировщик.