А все началось с одной обработки на одной конфигурации
Существовала некая обработка для синхронизации 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, поподробней пожалуйста про
(2)
Кто стучишься в дверь моя?
Видишь, дома нет никто!
— это к Розенталю.
Лично я, когда вижу вижу программу с орфографическими ошибками — начинаю трижды перечитывать саму программу на предмет ее правильности.
Все такие красноречивы, сразу нельзя было написать, что в коде ошибка + орфография хромает???
Да, облажался немного, виноват! Во время перевода на рус. язык допустил несколько ошибок (изначально было на укр. языке).
Исправил, прошу лингвистов перепроверить.
(2)Ну «неграммотический» текст как-то приятнее воспринимается, а то надоело «Объект не найден, Документ не проведен». Вот вношу разнообразие. Например, в интерфейсе вместо «:» поставил «:)», вы не поверите из 10 человек, только 1 спросил, что это значит. Прикольно. )))
dropbox и я логи оперативно получаю…
но за код все равно +