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

23.09.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обновление
.epf 30,54Kb
14
14 Скачать (1 SM) Купить за 1 850 руб.

    Работая в франчайзи столкнулся с тем, что много времени тратится на то, чтобы обновить нетиповые конфигурации (хоть их и не сильно изменили), особенно в отчетный период. Бухгалтеру нужно сдавать отчеты, обновление только вышло и всем надо ставить срочно, знакомо, думаю, многим. И вот однажды как-то всё надоело, и стал задумываться, а как бы их автоматически обновлять.  Первым делом выделил группы однотипно измененных конфигураций, получилось порядка 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 клиентов. Мы не привязаны к временным рамкам работы бухгалтера.

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

См. также

SALE! 15%

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7881    59    23    

69

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 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, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

16800 руб.

06.12.2023    8886    42    5    

74

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10465    36    25    

61

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    188062    1140    0    

912

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

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

14400 руб.

29.04.2020    32709    106    152    

73

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

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    72806    627    45    

85

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

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

4200 руб.

10.11.2015    62840    94    59    

79

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

Программа позволяет выполнять автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    15712    21    6    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 2712 24.09.15 11:48 Сейчас в теме
2. fzt 18.04.16 12:26 Сейчас в теме
(1) CheBurator, за баблос нынче фулверсия. Тут сорцы есть.
3. u_n_k_n_o_w_n 35 09.01.19 16:39 Сейчас в теме
Неплохой вариант в случае, если у клиента стоит даже доработанная версия.
4. Xershi 1555 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 35 11.01.19 21:50 Сейчас в теме
Если бы они еще не глючили, им бы цены не было.
Оставьте свое сообщение