Обработки и отчеты разрабатывались для конфигурации Бухгалтерии Для Казахстана 2.0 это не окончательная их версия, но при желании можно взять идею
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)1cv828.2.14.537in1cv8.exe» ENTERPRISE /Salm-srv4uh_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)1cv828.2.14.537in1cv8.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. Дополнительно требуется удалять эти файлы , можете сделать новую обработку и запускать через планировщик.
))
(1) К моему удивлению тут обнаружилось немало людей именующих себя программистами и выдающие скачанные отсюда работы за свои труды. Причем это явление довольно распространено. Недавно испытал момент славы, в одной организации предприимчивый молодой человек, под видом весьма технологичной вещи загнал им выложенную мною на сайте простенькую печатную форму. За работу и внедрение(!!!) взял 5к. Такие дела 🙁
P.S. По теме чтобы не оффтопить — идея хорошая. Попробую завтра пощупать
(2) Артано, Да это так и есть , Я думаю может загружать только идеи как делать то или иное или просто наброски , а не готовый результат , обмен знаниями это хорошо.
Так же хотелось бы дополнить что после проверки каждый день требуется чистить эти файлы с фтп каталога , так как у меня свой сервер фтп я на нем запускаю батник с таким содержанием:
del /s d:
egions*.mxl
del /s d:
egions*.html
«d:
egions» каталог выгрузки ОСВ.
Идея супер, приходится время от времени проделывать тоже самое но в ручном режиме, по той же технологии…