Автоматическое обновление отчетов/обработок

Что ни говорите товарищи, но лень — двигатель прогресса.

А все началось с одной обработки на одной конфигурации

Существовала некая обработка для синхронизации 1С с другой учетной системой. Изменялась раздва в неделю. Спустя некоторое время эта обработка начала изменяться, чуть ли не каждый день, а так как рабочая БД была периферийная, измененную обработку приходилось сохранять в каталог ИБ до следующего обновления (обновление происходило раз в неделю).

Все бы ничего, да вот таких конфигураций стало две, потом три и т.д., пришло время что-то изменить.

 

Что из этого всего получилось.


//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Перем Версия;
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Процедура ОбновитьВерсиюОбработки()

DialMail_Загружено = 0;
Если ФС.СуществуетФайл(КаталогПрограммы()+«DialMail.dll») = 1 Тогда

DialMail_Загружено = ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+«DialMail.dll»);

ИначеЕсли ФС.СуществуетФайл(КаталогИБ()+«DialMail.dll») = 1 Тогда

DialMail_Загружено = ЗагрузитьВнешнююКомпоненту(КаталогИБ()+«DialMail.dll»);

КонецЕсли;

Если DialMail_Загружено = 0 Тогда

Предупреждение(«Библиотеку DialMail.dll НЕ НАЙДЕНО!»);
Возврат;

КонецЕсли;

ИмяFTPСервера = «ftp.com»;
Порт = «»;
Пользователь = «ftp»;
Пароль = «qwerty»;
КаталогFTP = «Update»;
НазваниеФайла = «Sync.ert»;
ПолноеНазваниеФайлаНаФТП = КаталогFTP + «/» + НазваниеФайла;
ПолноеНазваниеФайлаВ1С = КаталогИБ() + НазваниеФайла;

FTP = СоздатьОбъект(«AddIn.FTP»);
Если ПустоеЗначение(Порт) = 1 Тогда

_Рез = FTP.Подключиться(ИмяFTPСервера,, Пользователь, Пароль, 1, 3);

Иначе

_Рез = FTP.Подключиться(ИмяFTPСервера, Порт, Пользователь, Пароль, 1, 3);

КонецЕсли;

Если _Рез = 0 Тогда

FTP = 0;
Возврат;

КонецЕсли;

Если FTP.Лист(«/» + КаталогFTP) = 0 Тогда

Сообщить(«Не удалось считать файлы с FTP-сервера», «!»);
FTP = 0;
Возврат;

КонецЕсли;

КвоФайлов = FTP.КоличествоФайлов();
Если КвоФайлов = 0 Тогда

FTP = 0;
Возврат;

КонецЕсли;

НомерФайлаНаФТП = 0;
Для н = 1 По КвоФайлов Цикл

Если FTP.ЭтоКаталог(н) = 1 Тогда

Продолжить;

КонецЕсли;

НазваниеФайлаНаФТП = FTP.ПолучитьИмяФайла(н);
Если НазваниеФайлаНаФТП = НазваниеФайла Тогда

НомерФайлаНаФТП = н;
Прервать;

Иначе

Продолжить;

КонецЕсли;

КонецЦикла;

Если НомерФайлаНаФТП = 0 Тогда

Сообщить(«Файл « + НазваниеФайла + » не найден на FTP-сервере», «!»);
FTP = 0;
Возврат;

КонецЕсли;

Если ФС.СуществуетФайл(ПолноеНазваниеФайлаВ1С) = 1 Тогда

ДатаВремяВ1С = «»; ДатаВремяНаФТП = «»;
ФС.АтрибутыФайла(ПолноеНазваниеФайлаВ1С,,,,,ДатаВремяВ1С);

ДатаНаФТП = FTP.ПолучитьДатуФайла(НомерФайлаНаФТП);
ВремяНаФТП = FTP.ПолучитьВремяФайла(НомерФайлаНаФТП);
ДатаВремяНаФТП = Шаблон(«[ДатаГод(ДатаНаФТП)].[Формат(ДатаМесяц(ДатаНаФТП),»»Ч(0)2″»)].[Формат(ДатаЧисло(ДатаНаФТП),»»Ч(0)2″»)] [ВремяНаФТП]»);

Если ДатаВремяНаФТП <= ДатаВремяВ1С Тогда

FTP = 0;
Возврат;

КонецЕсли;

КонецЕсли;

Если FTP.ПолучитьФайл(ПолноеНазваниеФайлаНаФТП, ПолноеНазваниеФайлаВ1С) = 0 Тогда

Сообщить(«Не удалось получить файл ‘»+ПолноеНазваниеФайлаВ1С+«‘ з FTP ‘»+ПолноеНазваниеФайлаНаФТП+«‘!»);
FTP = 0;
Возврат;

КонецЕсли;

FTP = 0;

КонецПроцедуры
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Процедура ПриОткрытии()

Версия = 1;
НазваниеФайла = «Sync.ert»;

// Определим, открывается ли внешняя обработка
// Если да, тогда не будем выполнять обновление, так как это приведет к циклической!
Путь = «»; Имя = «»;
РасположениеФайла(Путь, Имя);
Если ПустаяСтрока(Путь) = 1 Тогда

ОбновитьВерсиюОбработки();
Если ФС.СуществуетФайл(КаталогИБ() + НазваниеФайла) = 1 Тогда

Кт = «»;
ОткрытьФорму(«Отчет», Кт, КаталогИБ() + НазваниеФайла);
Если Кт.Версия > Версия Тогда

СтатусВозврата(0);
Возврат;

Иначе

Кт.Форма.Закрыть();

КонецЕсли;

КонецЕсли;

КонецЕсли;

КонецПроцедуры
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


Вот собственно и все. Как всегда надеюсь, что данная статья облегчит жизнь не только мне 🙂

Весь алгоритм заключен в одну процедуру ОбновитьВерсиюОбработки() и часть кода, который нужно вставить в процедуру ПриОткрытии()

Как это все работает ? При открытии «отчетаобработки» с конфигурации 1С происходит проверка на наличие новой версии обработки. Если обработка существует и ее версия выше, чем та,что в «КаталогИБ()конфигурации», она скачивается и запускается на выполнение.

Что бы это все заработало, требуется наличие внешней компоненты «DialMail.dll«

7 Comments

  1. Famza
    «Библиотеку DialMail.dll НЕ НАЙДЕНО!»

    Улыбнуло. Сам последнее время стал в описании ошибок использовать «неграммотический» текст

    Reply ↓
  2. ShEvOvIcH

    (1) Famza, поподробней пожалуйста про

    «неграммотический» текст
    Reply ↓
  3. Арчибальд

    (2)

    Кто стучишься в дверь моя?

    Видишь, дома нет никто!

    Reply ↓
  4. ShantinTD
    (1) Famza, поподробней пожалуйста про

    — это к Розенталю.

    Лично я, когда вижу вижу программу с орфографическими ошибками — начинаю трижды перечитывать саму программу на предмет ее правильности.

    Reply ↓
  5. ShEvOvIcH



    Все такие красноречивы, сразу нельзя было написать, что в коде ошибка + орфография хромает???

    Да, облажался немного, виноват! Во время перевода на рус. язык допустил несколько ошибок (изначально было на укр. языке).

    Исправил, прошу лингвистов перепроверить.

    Reply ↓
  6. Famza

    (2)Ну «неграммотический» текст как-то приятнее воспринимается, а то надоело «Объект не найден, Документ не проведен». Вот вношу разнообразие. Например, в интерфейсе вместо «:» поставил «:)», вы не поверите из 10 человек, только 1 спросил, что это значит. Прикольно. )))

    Reply ↓
  7. iov

    dropbox и я логи оперативно получаю…

    но за код все равно +

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *