gifts2017

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

Опубликовал Имя Фамилия (ShEvOvIcH) в раздел Администрирование - Системное

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

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


Существовала некая обработка для синхронизации 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"

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Иван Иванов (Famza) 17.01.12 08:18
"Библиотеку DialMail.dll НЕ НАЙДЕНО!"

Улыбнуло. Сам последнее время стал в описании ошибок использовать "неграммотический" текст
2. Имя Фамилия (ShEvOvIcH) 17.01.12 09:14
(1) Famza, поподробней пожалуйста про
"неграммотический" текст
3. Александр Рытов (Арчибальд) 17.01.12 09:43
(2)
Кто стучишься в дверь моя?
Видишь, дома нет никто!
ShantinTD; rom-x; +2 Ответить
4. Тимофей Шантин (ShantinTD) 17.01.12 18:49
(1) Famza, поподробней пожалуйста про
- это к Розенталю.
Лично я, когда вижу вижу программу с орфографическими ошибками - начинаю трижды перечитывать саму программу на предмет ее правильности.
5. Имя Фамилия (ShEvOvIcH) 17.01.12 23:00

Все такие красноречивы, сразу нельзя было написать, что в коде ошибка + орфография хромает???
Да, облажался немного, виноват! Во время перевода на рус. язык допустил несколько ошибок (изначально было на укр. языке).
Исправил, прошу лингвистов перепроверить.
6. Иван Иванов (Famza) 17.01.12 23:38
(2)Ну "неграммотический" текст как-то приятнее воспринимается, а то надоело "Объект не найден, Документ не проведен". Вот вношу разнообразие. Например, в интерфейсе вместо ":" поставил ":)", вы не поверите из 10 человек, только 1 спросил, что это значит. Прикольно. )))
7. Александр Зубцов (iov) 17.01.12 23:55
dropbox и я логи оперативно получаю...
но за код все равно +
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа