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

23.09.15

База данных - Архивирование (backup)

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

Скачать файлы

Наименование Файл Версия Размер
Обновление
.epf 30,54Kb
14
.epf 30,54Kb 14 Скачать

    Работая в франчайзи столкнулся с тем, что много времени тратится на то, чтобы обновить нетиповые конфигурации (хоть их и не сильно изменили), особенно в отчетный период. Бухгалтеру нужно сдавать отчеты, обновление только вышло и всем надо ставить срочно, знакомо, думаю, многим. И вот однажды как-то всё надоело, и стал задумываться, а как бы их автоматически обновлять.  Первым делом выделил группы однотипно измененных конфигураций, получилось порядка 10 групп. Создал файлы обновления и поставки (материалов куча, не буду описывать). Для опыта выбрал по базе из каждой группы и поставил их на поддержку уже своей поставки (вроде так это называется, взял файл поставки того же релиза, что и конфигурация, и загрузил его). Вот теперь наши конфигурации "типовые", и теперь нам надо обновить уже не ....цать конфигураций, а всего 10, и сделать файлы обновлений. И теперь любой может обновлять как типовые. Идем дальше.  

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

1) где хранить файлы обновлений

2) как их скачивать

3) как организовать автообновление конфигурации

1) По поводу хранения файлов обновления остановился на ftp сервере ([хорошая скорость отдачи, легкий доступ, ...). Нашел инструкцию по настройке ftp  сервера на Windows 7, благо был внешний статический ip. Если нет такового, то провайдер может его предоставить или же воспользоваться специальной программкой DynDNS.  Но для доступа к ftp серверу нужен логин и пароль, да и сам адрес, хранить его в коде не хотелось, сохранил во внешнем файле и, когда нужно, получал их. Также встал вопрос, как проверить релиз, ну тут просто имя файла сделал (2.0.64.5.cfu). 

    Так как не всем клиентам можно автоматически обновляться, а только тем, у кого есть действующая подписка ИТС, под каждого клиента была создана папка, в которой будет лежать обновление (и обновление мы будем проверять именно в этой папке). Отсюда вытекло, что хранить имя папки также где-то надо, сначала хотел хранить в константе, но потом решил хранить вне программы. 

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

2) Сначала попробовал скачивать файл средствами 1С, но программа при этом зависала до окончания скачивания файла. Решил сделать через bat файл, но при его запуске висело окно командной панели, решено было его скрыть, написали скрипт. Протестировав загрузку файла, невозможно было понять, когда он загрузился полностью. Тестируя на Windows XP, решил проверять загрузку файла по размеру файла. Уже не помню почему, но размер файла указал в имени файла, в итоге имя файла обновлений  стало выглядеть примерно так 2.0.64.5_12586125.cfu.

3) Обновление сделал в пакетном режиме (часть кода взял тут //infostart.ru/public/147253/, Спасибо!). Позже появилась идея использовать типовой механизм обновления конфигураций, подсунуть ему свой файл обновления, но руки так и не дошли.

Общий порядок получился такой:

В процедуре ПриНачалеРаботыСистемы проверяем наличие обновления:

ИмяFTPСервера               = Адрес;//
ПортFTPСоединения           = "21";
ПользовательFTPСоединения   = Логин;//
ПарольFTPСоединения         =  Пароль;
ПассивноеFTPСоединение      =  Ложь;
Соединение = Новый FTPСоединение(ИмяFTPСервера, ПортFTPСоединения,ПользовательFTPСоединения,ПарольFTPСоединения, ,ПассивноеFTPСоединение);
//Путь на сервере в формате /OOO_Birka/
Массив = Соединение.НайтиФайлы(СокрЛП(ПутьНаСервере), "*.cfu");
			
Если Массив.Количество() <> 0 Тогда
    Для Каждого Стр Из Массив Цикл
        //Получаем релиз и сравниваем
        ВерсияКонф = Метаданные.Версия;
        ВерсияНаСервере = Стр.ИмяБезРасширения;
        //проверить может уже скачан (вынесено выше до проверки обновления на ftp)  
        Если Число(Сред(ВерсияКонф,5,2)) < Число(Сред(ВерсияНаСервере,5,2)) Тогда 
            Режим = РежимДиалогаВопрос.ДаНет;
            //Текст = "Вышло очередное обновление" + Символы.ПС + "Скачать??";
            //Ответ = Вопрос(Текст, Режим, 0);
            СформироватьБатникНаСкачивание(Стр.Имя);
            ЭтотОбъект.ПолучитьФорму("Форма").Открыть();
						
         ИначеЕсли Число(Сред(ВерсияКонф,5,2)) = Число(Сред(ВерсияНаСервере,5,2)) и Число(Сред(ВерсияКонф,8,1)) < Число(Сред(ВерсияНаСервере,8,1)) Тогда
             Режим = РежимДиалогаВопрос.ДаНет;
             //Текст = "Вышло очередное обновление" + Символы.ПС + "Скачать??";
             //Ответ = Вопрос(Текст, Режим, 0);
             //Если Ответ = КодВозвратаДиалога.Да Тогда
                 СформироватьБатникНаСкачивание(Стр.Имя);
                 ЭтотОбъект.ПолучитьФорму("Форма").Открыть();
             //КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

 

Процедура СформироватьБатникНаСкачивание(ИмяФайла)
	ПутьДляОбновлений = "";
	ПутьДляОбновлений = "D:\papka\";
	Если ПутьДляОбновлений = Null или ПутьДляОбновлений = "" Тогда
		Возврат;  
	КонецЕсли;

	ПутьНаСервере = "/OOO_Birka/";

	//vbs
	тек = Новый ТекстовыйДокумент;
	тек.ДобавитьСтроку("Dim oShell ");
	тек.ДобавитьСтроку("Set oShell = WScript.CreateObject (""WSCript.shell"") ");
	тек.ДобавитьСтроку("oShell.run """+ СокрЛП(ПутьДляОбновлений) + "1.bat"", 0 ");
	тек.ДобавитьСтроку("Set oShell = Nothing");
	тек.Записать(СокрЛП(ПутьДляОбновлений) + "start.vbs",КодировкаТекста.OEM,);
	
	//txt
	тек = Новый ТекстовыйДокумент;
 
	тек.ДобавитьСтроку("open " + Адрес);
	тек.ДобавитьСтроку(Логин);
	тек.ДобавитьСтроку(Пароль);
	тек.ДобавитьСтроку("get " + СокрЛП(ПутьНаСервере) + ИмяФайла + " " + СокрЛП(ПутьДляОбновлений) + ИмяФайла);
	тек.ДобавитьСтроку("bye");
	тек.Записать(СокрЛП(ПутьДляОбновлений) + "conf.txt",КодировкаТекста.OEM,);
	
	//bat
	тек = Новый ТекстовыйДокумент;
	тек.ДобавитьСтроку("ftp -i -s:conf.txt");
	тек.ДобавитьСтроку("timeout /t 3 ");
	тек.ДобавитьСтроку("REN | RENAME " + СокрЛП(ПутьДляОбновлений) + ИмяФайла + " ok" + ИмяФайла);
	тек.ДобавитьСтроку(СокрЛП(ПутьДляОбновлений) + "del.bat");
	тек.Записать(СокрЛП(ПутьДляОбновлений) + "1.bat",КодировкаТекста.OEM,);
	
	
	тек = Новый ТекстовыйДокумент;
	тек.ДобавитьСтроку("del " + СокрЛП(ПутьДляОбновлений) + "conf.txt");
	тек.ДобавитьСтроку("del " + СокрЛП(ПутьДляОбновлений) + "start.vbs");
	тек.ДобавитьСтроку("del " + СокрЛП(ПутьДляОбновлений) + "1.bat");	тек.ДобавитьСтроку("del %0");
	тек.Записать(СокрЛП(ПутьДляОбновлений) + "del.bat",КодировкаТекста.OEM,);

	Запустить(ПутьДляОбновлений);
КонецПроцедуры

процедура Запустить(ПутьДляОбновлений)
	КомандаСистемы(СокрЛП(ПутьДляОбновлений) + "start.vbs",СокрЛП(ПутьДляОбновлений));
КонецПроцедуры

В открываемой форме ( ЭтотОбъект.ПолучитьФорму("Форма").Открыть(); , код был в модуле обработки, в процедуре ПриОткрытии формы подключаем обработчик ожидания. Она проверяет окончание загрузки файла и открывает следующую форму:

Процедура Ожидать() Экспорт
	ПодключитьОбработчикОжидания("ЖдатьЗагрузки",10);
Конецпроцедуры

Процедура ЖдатьЗагрузки()
   Завершена = ОжиданиеЗагрузки();	/// процедура в модуле обработки
   Если Завершена Тогда
	   ОтключитьОбработчикОжидания("ЖдатьЗагрузки");
	   ЭтотОбъект.ПолучитьФорму("Форма1").ОткрытьМодально();
	   ЭтаФорма.Закрыть();
   Конецесли;   
Конецпроцедуры

Процедура ПриОткрытии()
	Ожидать();
КонецПроцедуры



Функция ОжиданиеЗагрузки() Экспорт	
	ПутьДляОбновлений = ""; ///каталог где хранится наш файл
	ПутьДляОбновлений = "D:\papka\"; ///
	Если ПутьДляОбновлений = Null или ПутьДляОбновлений = "" Тогда
		Возврат ЛОЖЬ;
	КонецЕсли;
	Массив = НайтиФайлы(СокрЛП(ПутьДляОбновлений),"*.cfu");
	Если  Массив.Количество() = 0 Тогда
		Массив = НайтиФайлы(СокрЛП(ПутьДляОбновлений), "*.cf");
	КонецЕсли;
	
	Если Массив.Количество() <> 0 Тогда
		Для каждого стр из Массив Цикл
			Если Найти(Стр.имя,"ok") Тогда
				Позиц = Найти(Стр.ИмяБезРасширения,"_"); 
				Размер = Число(Сред(Стр.ИмяБезРасширения,Позиц + 1 ));
				Если  Размер = Стр.Размер() Тогда
					//Сообщить("Загрузка завершена");
					тек = Новый ТекстовыйДокумент;
					тек.ДобавитьСтроку(Стр.Имя);
					тек.Записать(СокрЛП(ПутьДляОбновлений) + "imya.txt",КодировкаТекста.OEM,);
					Возврат Истина;
				Иначе 
					Возврат ЛОЖЬ;
				конецЕсли;
			Иначе
				Возврат ЛОЖЬ;
			КонецЕсли;
		КонецЦикла;	
	Иначе
		Возврат ЛОЖЬ;
	КонецЕсли;
	
КонецФункции

Следующие формы проверяют активные сеансы и, если есть такие, просит их закрыть. Если активных сеансов нет, формирует bat файл для обновления, запускает его и закрывает программу. Процедура формирования bat файла:

Процедура СоздатьФайлобновления() Экспорт
	ПутьДляОбновлений = "";
	ПутьДляОбновлений = "D"\papka\";
	Если ПутьДляОбновлений = Null или ПутьДляОбновлений = "" Тогда
		Возврат;
	КонецЕсли;
	ПутьДляОбновлений = Лев(ПутьДляОбновлений,СтрДлина(ПутьДляОбновлений) - 1) + "ZIK\";
	ПутьАрхива = "D:\Arhiv\";
	Если ПутьАрхива = Null или ПутьАрхива = "" Тогда
		Возврат;
	КонецЕсли;
	ПутьДля1СПредприятия = "C:\Program Files (x86)\1cv82\8.2.19.76\bin\1cv8.exe"; 
	
	тек = Новый ТекстовыйДокумент;
	тек.ДобавитьСтроку("timeout /t 10 ");
	
	ЗапускПред = """"+СокрЛП(ПутьДля1СПредприятия)+""" enterprise";
	ЗапускКонф = """"+СокрЛП(ПутьДля1СПредприятия)+""" config";
	
	Пароль = "";
	Подсказка = "Введите пароль своего пользователя в 1С (Если Он есть), "+ Символы.ПС +"  если пароль не задан нажмите ОК";
	ВвестиСтроку(Пароль, Подсказка, 0, Истина);
	
	
	ПодклБаза = " /F"""+НСтр(СтрокаСоединенияИнформационнойБазы(), "File")+"""" +?(СокрЛП(ПараметрыСеанса.ТекущийПользователь.Наименование)="" или СокрЛП(ПараметрыСеанса.ТекущийПользователь.Наименование) = "<Не указан>",""," /N"""+СокрЛП(ПараметрыСеанса.ТекущийПользователь.Наименование)+"""") + ?(СокрЛП(Пароль)="",""," /P"""+СокрЛП(Пароль)+"""");
	
	РезервКоп = " /DumpIB"""+СокрЛП(ПутьАрхива)
	+СтрЗаменить(СтрЗаменить("Было","  "," ")," ","_")+"_"
	+СтрЗаменить(Формат(ТекущаяДата(),"ДЛФ=Д"),".","_")+"Бух.dt""";
	
	РезервКоп2 = " /DumpIB"""+СокрЛП(ПутьАрхива)
	+СтрЗаменить(СтрЗаменить("стало","  "," ")," ","_")+"_"
	+СтрЗаменить(Формат(ТекущаяДата(),"ДЛФ=Д"),".","_")+"Бух.dt""";
	Массив = НайтиФайлы(СокрЛП(ПутьДляОбновлений),"imya.txt");
	Если Массив.Количество() <> 0 Тогда
		Текст = Новый ТекстовыйДокумент; 
		Текст.Прочитать(СокрЛП(ПутьДляОбновлений) + "imya.txt"); 
		ФайлОбновление = СОКРЛП(Текст.ПолучитьСтроку(1));
	Иначе
		ФайлОбновление = "";
		Возврат;
	КонецЕсли;
	ОбновлКонф = " /UpdateCfg"""+СокрЛП(ПутьДляОбновлений) + ФайлОбновление+"""";
	ОбновлБазы = " /UpdateDBCfg";
	стр = ЗапускКонф+ПодклБаза+РезервКоп;
	Если стр<>"" тогда тек.ДобавитьСтроку(стр); стр=""; конецесли;
	
	стр = ЗапускКонф+ПодклБаза+ОбновлКонф;
	стр = стр+ОбновлБазы;
	Если стр<>"" тогда тек.ДобавитьСтроку(стр); стр=""; конецесли;
	стр = ЗапускКонф+ПодклБаза+РезервКоп2;
	Если стр<>"" тогда тек.ДобавитьСтроку(стр); стр=""; конецесли;
	тек.ДобавитьСтроку("del " + СокрЛП(ПутьДляОбновлений) + ФайлОбновление);
	тек.ДобавитьСтроку("del " + СокрЛП(ПутьДляОбновлений) + "imya.txt");
	стр = ЗапускПред+ПодклБаза;
	Если стр<>"" тогда тек.ДобавитьСтроку(стр); стр=""; конецесли;
	тек.ДобавитьСтроку("del %0");
	тек.ДобавитьСтроку("");
	тек.Записать(СокрЛП(ПутьДляОбновлений) + "Obnov.bat",КодировкаТекста.OEM,);
	
	
Конецпроцедуры

процедура ЗапуститьОбновление(Форма) Экспорт
	ПутьДляОбновлений = "D:\Papka\";

	ЗапуститьПриложение(СокрЛП(ПутьДляОбновлений) + "Obnov.bat"); 
	
	ПрекратитьРаботуСистемы();

КонецПроцедуры

Позже переделал это всё в обработку (её и выкладываю) и указывал дополнительные параметры запуска "/Execute "C:\Загрузка.epf", обновляем типовые конфигурации. Нам только необходимо определиться с местом хранения параметров: адрес ftp, логин, пароль, папка клиента на ftp и папка, куда мы будем скачивать обновления. Велись работы по изменению окна обновления, чтобы не висело окно командной панели, заменить чем-нибудь красивым. И вроде как бы получилось, если кому-то надо, поищу исходники. Проблемные места:

1) Блокирует скачивание брэндмауер, Kaspersky, Avira. 

2) При наличии 2 сетевых подключений загрузка не происходит.

3) Требуется участие пользователя.

4) Иногда процесс обновления конфигурации не происходит, пользователь видит сообщение "конфигурация базы данных не соответствует сохраненной конфигурации" и звонит вам.

5) Паранормальные случаи.

Проверял только на файловых версиях. Операционные системы: Windows XP, Windows 7, Windows 8, Windows Vista. Код открытый, обработку необходимо немного изменить (решить, где хранить параметры и прописать их получение). С вводом и настройкой автоматического обновления. Обновление готовлю в свободное время (иногда поздно вечером) и терерь, сделав 10 файлов обновления, обновляем ими более 250 клиентов. Мы не привязаны к временным рамкам работы бухгалтера.

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

См. также

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    2757    11    1    

30

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    3246    10    1    

31

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177341    1070    0    

846

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

19200 руб.

15.05.2017    42470    10    24    

38

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27157    78    146    

59

"Менеджер потоков 2.1": УПП: "Восстановление партий"

Инструменты администратора БД Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет Управленческий учет Платные (руб)

Как оптимизировать то, что, считалось, не поддается оптимизации? Как повысить доступность базы данных? Как проводить самую «времяемкую» операцию не по паре раз в неделю, а по несколько раз в день*? Ответ есть!

20000 руб.

12.09.2019    11706    5    9    

7

Брандмауэр для сервера 1С Предприятие 8 - внешнее управление сеансами

Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Управление возможностью начала и возобновления сеансов пользователей по различным условиям, ограничение общего числа возможных сеансов для работы с информационной базой, резервирование возможности работы с информационной базой определенных польззователей, запрет запуска нескольких сеансов для пользователя, журнализация событий начала (возобновления) и завершения (гибернации) сеансов, ведение списка активных сеансов для информационных баз кластера серверов

3600 руб.

06.02.2017    31041    31    18    

47

Система хранения присоединенных файлов в томах на диске

Инструменты администратора БД Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    61228    87    59    

72
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3119 24.09.15 11:48 Сейчас в теме
2. fzt 18.04.16 12:26 Сейчас в теме
(1) CheBurator, за баблос нынче фулверсия. Тут сорцы есть.
3. u_n_k_n_o_w_n 34 09.01.19 16:39 Сейчас в теме
Неплохой вариант в случае, если у клиента стоит даже доработанная версия.
4. Xershi 1473 09.01.19 16:45 Сейчас в теме
(3) как сказал автор у него 10 групп, а если таких будет 100500?)
5. DmitriyPopow 33 09.01.19 20:13 Сейчас в теме
(4)
сказал автор у него 10 групп, а если таких будет 100500?

если будет 100500 то их в любом случае можно привести к некой группе. и из 100500 получить 200. и все равно это лучше обновить спокойно 200 чем 100500 ..
а если нельзя ... то тогда штат сотрудников должен быть огого чтобы успеть всех обновить.
6. DmitriyPopow 33 09.01.19 20:14 Сейчас в теме
с выходом расширений потеряло актуальность все таки. но имеет право на жизнь.
7. u_n_k_n_o_w_n 34 11.01.19 21:50 Сейчас в теме
Если бы они еще не глючили, им бы цены не было.
Оставьте свое сообщение