Автоматическое обновление конфигурации в узлах РИБ

14.07.12

Интеграция - Перенос данных 1C

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

Информирование

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

Для этого в модуле приложения достаточно вставить периодически вызываемую функцию вида:

 

Функция ПостояннаяПроверкаРедкая() Экспорт
    //Раз в 5 минут
    Если ПланыОбмена.ГлавныйУзел() <> НеопределеноТогда
        Если КонфигурацияИзменена() Тогда
            ксПредупреждение("Конфигурация базы данных изменена, чтобы не образовался простой в обменах, обновите конфигурацию или свяжитесь с поддержкой 1с!" + Символы.ПС +
            "Для обновления конфигурации на точке достаточно перезайти в 1С под Администратор1, при этом будет выдан запрос на обновление. " + ТекущаяДата());
        КонецЕсли;
    КонецЕсли;
КонецФункции

 

Когда придут изменения, будет выдано окошко вида:

Обновление

Само обновление выполняется в функции ОбновитьКонфигурациюБазыДанных. Ее можно вставить при начале работы приложения или добавить в пункт меню интерфейса. Когда пользователь увидит предупреждение, он сможет выполнить обновление, когда ему будет удобно:

Функция ОбновитьКонфигурациюБазыДанных() Экспорт
    //Если конфигурация изменена, тогда нужно выполнить ее обновление...
    флКонфигурацияИзменена = КонфигурацияИзменена();
    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();//File="C:\1cv8\Base".
    ЭтоФайловая = Найти(СтрокаСоединения, "File="); //Заменить потом на типовую функцию.

    Если флКонфигурацияИзменена И ЭтоФайловая Тогда    
        //Смотрим, чтобы в базе никого не сидело

        ~ПовторнаяПопыткаОбновления:

        флОбновлять = истина;
        Если ксВопрос(
            "Внимание! Пришли изменения конфигурации. " + Символы.ПС +
            "Рекомендуется их принять." + Символы.ПС +
            "Закройте все остальные 1С на всех компьютерах точки и нажмите ""ДА"" для Обновления." + Символы.ПС +
            "Если после нажатия ""ДА"" выскочит красное окно ошибки, закройте его (кнопка ""Закрыть"")." + Символы.ПС +
            "Если вы хотите продолжать работу без обновления (не рекомендуется) нажмите ""НЕТ""." + Символы.ПС +
            "Если вы не обновляете конфигурацию, обязательно сделайте это позже в ближайшее время."+ Символы.ПС +
            "ОБНОВИТЬ КОНФИГУРАЦИЮ?", РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да) = КодВозвратаДиалога.Нет Тогда
            флОбновлять = ложь;
        КонецЕсли;

        Если флОбновлять Тогда
              
            Попытка
                УстановитьМонопольныйРежим(Истина); 
            Исключение
                ксПредупреждение("Кто-то еще работает в базе, не могу захватить базу монопольно, обновить не получается, попробуйте еще раз! " + Символы.ПС + ОписаниеОшибки());
                Перейти ~ПовторнаяПопыткаОбновления;
            КонецПопытки;

            //Создаем и запускаем скрипт на обновление базы
            СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();//File="C:\1cv8\Base".
            СтрокаСоединения = СтрЗаменить(СтрокаСоединения, "File=", "F");
            СтрокаСоединения = СтрЗаменить(СтрокаСоединения, ";", "");

            КаталогПрограммы = КаталогПрограммы();
            ИмяФайлаПрограммы = КаталогПрограммы + "\1cv8.exe";                       
            КоманднаяСтрокаОбновления = """" + ИмяФайлаПрограммы + """ config /Visible /NАвтообмен /P"""" /UpdateDBCfg /" +СтрокаСоединения;  
            //КоманднаяСтрокаЗапуска = """" + ИмяФайлаПрограммы + """ enterprise /NКассир /" +СтрокаСоединения;

            //Запускаем только несколько раз, должно помочь
            ТекстСкрипта = "";
            Для Инд = 1 по 10 Цикл //10 попыток обновить конфигурацию
                ТекстСкрипта = ТекстСкрипта + КоманднаяСтрокаОбновления + Символы.ПС;
                ТекстСкрипта = ТекстСкрипта + "if not errorlevel 1 goto pend " + Символы.ПС;
            КонецЦикла;

            ТекстСкрипта = ТекстСкрипта + "
            |:pend";

            //ТекстСкрипта = ТекстСкрипта + КоманднаяСтрока + Символы.ПС;
            //ИмяФайлаСкрипта = КаталогВременныхФайлов() + "update_1s_counter_sap.cmd";
            ИмяФайлаСкрипта = КаталогВременныхФайлов() + "run.bat";
            Ф = Новый ТекстовыйДокумент();
            Ф.УстановитьТекст(ТекстСкрипта);
            Ф.Записать(ИмяФайлаСкрипта, КодировкаТекста.OEM);

            Попытка
                ЗапуститьПриложение(ИмяФайлаСкрипта,,ложь);      
            Исключение
                ксПредупреждение("Произошла ошибка запуска скрипта обновления: " + ИмяФайлаСкрипта + " Ошибка: " + ОписаниеОшибки());
                Перейти ~ПовторнаяПопыткаОбновления;
            КонецПопытки;

            //Завершаем работу 1С
            ЗавершитьРаботуСистемы(истина);
        КонецЕсли;
    КонецЕсли;
КонецФункции

 

Суть работы алгоритма обновления – сначала проверяется, что все пользователи вышли из 1С, потом закрывается текущий сеанс, формируется командный файл run.bat со скриптом обновления конфигуратора и вызывается 10 раз. Процесс вызова конфигуратора в режиме обновления визуализируется, чтобы пользователи полностью могли контролировать и осознавать процесс.

 

Информационное сообщение с инструкцией пользователю по обновлению имеет вид:

Если не получилось заблокировать 1С, выдается сообщение вида:

См. также

SALE! 10%

Перенос данных 1C Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    169491    352    281    

388

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    144395    837    297    

432

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.20.x), также подходят для релиза 11.5 (11.5.19.x).

35000 руб.

23.07.2020    54661    242    73    

197

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    73406    193    153    

130

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    37745    103    69    

98

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    196586    157    244    

287

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.240.x) и БП 3.0 (3.0.169.x). Правила подходят для версии ПРОФ и КОРП.

35000 руб.

15.12.2021    25396    179    52    

136

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    82191    338    253    

289
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dimk@a 14.07.12 20:41 Сейчас в теме
Здоровское решение. Недавно делал распределенную базу и уже довелось ее обновлять с подключением по удаленке к узлам. При слеюущем обновлении добавлю эту функцию. Спасибо!
2. fixin 4278 14.07.12 20:56 Сейчас в теме
(1) ндык, че мы только не пробовали. оказалось, самый простой вариант такой.
3. baldorc 4 15.07.12 01:30 Сейчас в теме
Хорошее решение, при случае использую не задумываясь :)
4. Kyrales 146 15.07.12 06:15 Сейчас в теме
Хорошая идея. Можно проверку немного модифицировать:

Функция ПостояннаяПроверкаРедкая() Экспорт

//Раз в 5 минут

Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда
Если КонфигурацияИзменена() Тогда

Если РольДоступна("ПолныеПрава") или РольДоступна("ПравоОбновленияКонфигурации") Тогда
ОбновитьКонфигурациюБазыДанных();
иначе
Предупреждение("Конфигурация базы данных изменена, чтобы не образовался простой в обменах, обновите конфигурацию!" + Символы.ПС +
"Для обновления конфигурации на точке достаточно перезайти в 1С под Администратор (или пользователем с администраторскими правами), при этом будет выдан запрос на обновление. " + ТекущаяДата());
КонецЕсли;
КонецЕсли;
КонецЕсли;

КонецФункции
5. fixin 4278 15.07.12 10:04 Сейчас в теме
(4) можно и автоматом. Но не всегда прокатит автоматика. Если открыто две 1с-ки, то конфа не обновится автоматом, а сообщение о том, что не удалось обновить, будет доставать.
хотя согласен, можно попытаться обновить, а если не получится монопольный доступ, уже тогда сообщать.
Но лучше решение об обновлении все же принимать пользователю. Не всегда обновление проходит автоматом, и запускающийся каждые 10 минут конфигуратор будет доставать.
6. WKBAPKA 215 16.07.12 08:54 Сейчас в теме
поставил плюс т.к. самому было в лом разбираться, в типовых предусмотрено авто. обновление...
но со стилистикой надо что то делать :)

Функция ПостояннаяПроверкаРедкая()

после редкая на ум приходит не хорошее слово :)

>Когда придут изменения будет выдано окошко вида

окошко вида )

> Закройте все остальные 1С на всех компьютерах точки :)

ну и использовать GoTo признак плохого тона в программировании...
vlasin; DrAku1a; yansen; +3 Ответить
11. fixin 4278 16.07.12 12:39 Сейчас в теме
(6) не буквоедствуйте.
Как сделано автообновление в типовых, не помню уже. У меня типовая ут 10.3, автообновления там нет, правда древний релиз.
Окошко вида - потому что текст там может быть другой, зависит от организации.
Использовать GoTo можно, нам об этом рассказывали в универе, где я учился на программиста. Альтернатива циклу while true в небольших участках кода - вполне.
23. sa1m0nn 28 18.07.12 09:28 Сейчас в теме
(11)

Хорошая идея, спасибо, +2.

ЗЫ: Но про ГоТо сказали правильно - это моветон (меня реально высаживает :)). Используйте вызов процедуры.
7. zamichnik 16.07.12 09:08 Сейчас в теме
Весьма симпатичная идея, большое спасибо!
Непременно воспользуюсь :)
8. Cyberboy 119 16.07.12 10:45 Сейчас в теме
А пользователь который делает обмен должен иметь полные права? У меня на РИБ узлах есть пользователь Обновление, при запуске этого пользователя, автоматом запускается обновление с главным узлом и после прохождения обновления сеанс пользователя завершается, у всех остальных пользователей стоит ограничение в правах. Будет при таком методе запускать "Автоматическое обновление конфигурации в узлах РИБ" у пользователя "Обновление"?
10. fixin 4278 16.07.12 12:36 Сейчас в теме
(8) есть два права. первое - это право на изменение конфы. без него файл с изменениями конфы не прочитается и дело до "ОбновитьКонфигурацию" даже не дойдет. Проще решить эту пролему, запуская обмен данными в привелигированном модуле, т.к. право на изменение конфы - весьма опасное, его нельзя давать на точках.

Второе право - это право на обновление конфигурации БД. Его можно дать даже пользователю без пароля, как у меня, "Автообмен".
9. glek 120 16.07.12 10:48 Сейчас в теме
12. ak0710 166 16.07.12 13:54 Сейчас в теме
Ваш способ конечно хорош, у каждого это идея приходит по разному , год или два назад Я настраивал авто обмен в одной фирме у них была типовая ИБ , и не было смысла убирать замок с конфигурации.
Каждую ночь в головной базе производилась выгрузка планов обмена например в 23.00 (отключались все пользователи , делался бэкап перед этим)
В базе филиала :
В 01:00 в базе филиала запускалось чтение плана обмена (перед чтение отключение всех пользователей и бэкап)
В 01:30 1С с командной строкой /UpdateDBCfg
В 02:00 повторное чтение и выгрузка

Обмен с 6ти филиалами работает по сей день, здесь обновление проходило 1 раз ночью .

Ваш случай очень удобен если обмен проходит по несколько раз в день , а если одного раза достаточно , то не обязательно трогать конфигурацию.
13. fixin 4278 16.07.12 14:08 Сейчас в теме
(12) в моем случае компьютеры на ночь выключаются, т.е. все должно происходить с выгоном пользователей...
но я думаю, можно и на скриптах написать, чтобы не менять конфу, почему бы нет... ;-)
14. ak0710 166 16.07.12 14:23 Сейчас в теме
(13) Я за то чтобы как можно меньше всего трогать в типовой конфигурации , можно добавить просто еще командную строку с отключением ПК после обмена , каждый сам выберет что ему надо , возможно ваш способ Я тоже когда нибудь использую
15. fixin 4278 16.07.12 15:09 Сейчас в теме
(14) у нас обновление конфы происходит не только ночью, а в любой момент.
16. kiros 52 16.07.12 15:52 Сейчас в теме
Да, идея очень достойная, мы реализовывали так, если динамическое обновление, то автоматически обновлялось, и стандартная обработка требовала от пользователей перезайти (со счетом до 3-х, т.е. не больше трех раз можно отказаться от пере захода в 1с). А в случае монопольного обновления инициировали блокировку подключения с отсрочкой 5 минут, и опять же стандартными средствами получалось выгнать, после чего спокойно обновлялись и снимали блокировку, как то так :)
17. fixin 4278 16.07.12 16:35 Сейчас в теме
(16) ну дык печатайте на ИС и зарабатывайте плюсики. ;-) Я не претендую на идеал, но система рабочая.
18. Программулькин 301 17.07.12 10:12 Сейчас в теме
Честно сказать - полная какашка!, но минус ставить не буду ибо как вариант имеет права на жизнь.

Во первых, это же : автоматическое обновление конфигурации!, какие нахрен окошки на "да" и "нет", какое нафиг "не могу захватить монопольно" - бред! У меня если пришли обновления, то всем сообщение о сохранении документов и баста - счётчик тикает, далее всех кидает и обновляет, причём во время обновления хрен кто зайдет.Обновилось, пожалуйста, работайте, вмешательство рук человека 0, особенно юзеров!
правда минус есть, пришлось внести изменения в конфу: добавлены 4 процедуры 1 константа и 1 форма и 1 роль

Во вторых, " КаталогПрограммы = КаталогПрограммы();" тоже бред. Обновил платформу и всё, приплыли, файл не найден!
У меня у юзеров тупо диск вставил запустил батник и всем 15м платформа новенькая легла без всяких там вопросов "могу" "не могу". Похер на антивири и фаерволы, за исключением вистовской попрошайки о том кто запустил файл, и то настраиваешь на низкий уровень и попёр!

обмен раз в 40 минут, тобишь всегда актуальная база и конфа.
AfterEarth; yoyoman; papami; +3 Ответить
19. fixin 4278 17.07.12 11:15 Сейчас в теме
(18) понты так и сверкают. Так где же ваша замечательная программма? В файловой версии конечно, можно поставить убивцу 1с на все компьютеры точки (2-3 штуки). Но нужно управление этим убивцем, короче задача излишне усложняется. Про КаталогПрограммы я ваш нюанс не понял, как бе. В общем, готов рассмотреть ваш супер-пупер-вариант, когда он тут появится. Пока это только проджэкт, который критиковать невозможно за его отсутствием в мире реальном.
20. Программулькин 301 17.07.12 12:24 Сейчас в теме
(19)
ниии, мой вариант далёк от идеала, просто он приближён к автоматизму и тоже имеет право на жизнь, тобишь влияние человеческого фактора 0. К вашему же варианту замечания я нарисовал, просто мне есть с чем сравнить, вот и всё.
Я тоже пробовал юзать КаталогПрограммы(), но не вышло. Она использует "C:\Program Files\1cv82\8.2.**.порядковый номер.", допустим "C:\Program Files\1cv82\8.2.15.317", при обновлении платформы в 1с8 старая платформа остается, и добавляется новая. Итог: в каталоге C:\Program Files\1cv82\8.2.15.317 имеем несколько папок 8.2.15.317, 8.2.15.318,8.2.15.319 и тд + common и conf. Так вот при обновлении платформы, Ваш путь к файлу слетит, и файл будет не найден. В 7ке такое прокатывало, но там по-моему было что-то вроде КаталогИБ() или как то так, тобишь каталог с базой, но тогда исключается клиент-серверный вариант, но это уже лирика. Свой метод пока выкладывать не намерен, ибо лень. В данном случае я использовал жёский путь:"C:\Program Files\1cv82\common\имя файла", ибо, при использовании автоматической установки платформы на клиенте, путь стандартный и не меняется.



вот кусок
Процедура СчетчикВремени() Экспорт

Константы.ВремяВСекундахДоВыбросаИзБазы.Установить(Константы.ВремяВСекундахДоВыбросаИзБазы.Получить()-1);

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

Процедура СообщенияОВремени() Экспорт

ОстСекунд = Константы.ВремяВСекундахДоВыбросаИзБазы.Получить();
//не скажу формулу перевода
чч = xx;
мм = xx;
сс = xx;

Если ОстСекунд > 0 Тогда
ФормаОстаткаВремени.ЭлементыФормы.КоличествоСекунд.Значение = "До конца работы сеанса осталось"+Символы.ПС+Дата(так фигню всякую можно вставить,чч,мм,сс);
Если ФормаОстаткаВремени.Открыта() Тогда
ФормаОстаткаВремени.Обновить();
Иначе
ФормаОстаткаВремени.Открыть();
КонецЕсли;
ИначеЕсли ОстСекунд <= 0 Тогда
ФормаОстаткаВремени.ЭлементыФормы.КоличествоСекунд.Значение = "БАЙ-БАЙ";
ОтключитьОбработчикОжидания("СообщенияОВремени");
// Если раньше выйти то блокировка установится "Истина"
Константы.БлокировкаВхода.Установить(Ложь);
//строка которая выкидывает
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;

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

Процедура ЗакрытиеСеанса() Экспорт

Если КонфигурацияИзменена() Тогда
Если РольДоступна("gvАвтообмен") тогда
Файл1 = Новый Файл("C:\Program Files\1cv82\common\UpdateDBCfg.bat");
Если Файл1.Существует() Тогда
//Проверка на последнего пользователя
ТекущийРежим = СоединенияИБ.ПараметрыБлокировкиСеансов(Истина);
КоличествоСеансов = ТекущийРежим.КоличествоСеансов;
Если КоличествоСеансов <= 1 Тогда
ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина;
ЗапуститьПриложение("C:\Program Files\1cv82\common\UpdateDBCfg.bat");
Иначе
Возврат;
КонецЕсли;

Иначе
ОтправитьПисьмо();
Сообщить("Файл UpdateDBCfg.bat не обнаружен!")
КонецЕсли;
Иначе
Если НЕ Константы.БлокировкаВхода.Получить() Тогда
Константы.БлокировкаВхода.Установить(Истина);
Константы.ВремяВСекундахДоВыбросаИзБазы.Установить(61);
КонецЕсли;
ПодключитьОбработчикОжидания("СчетчикВремени",1);
ПодключитьОбработчикОжидания("СообщенияОВремени",1);
ОтключитьОбработчикОжидания("ЗакрытиеСеанса");
КонецЕсли;
Иначе
//после сохранения снимается режим блокировки
Константы.БлокировкаВхода.Установить(Ложь);
КонецЕсли;

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

Процедура НачатьПроверкуНаРазличияКонфигураций() Экспорт
ПодключитьОбработчикОжидания("ЗакрытиеСеанса",15);
КонецПроцедуры

Процедура ОтправитьПисьмо()
Сообщить ("Письмо Отправлено");
//а пока пытаюсь обучит 8.2 обучить работать на ssl протоколах (stunel не предлагать)
КонецПроцедуры
21. fixin 4278 17.07.12 13:28 Сейчас в теме
(20) все равно про каталог программы не догнал. разве в 82 он не показывает на каталог, из которого запущен exe-файл?
Дядя, а если у пользователя запущен отчет или 1С повис, 1с у вас автоматом не выйдет. Это я так, на всякий случай намекаю как бе. Из практики.
22. Программулькин 301 18.07.12 04:00 Сейчас в теме
(21) "все равно про каталог программы не догнал" ---faspalm...Тяжелый случай, делаю последнюю попытку.При обновлении платформы каталог программы меняется, т.е. создается новый.
"разве в 82 он не показывает на каталог, из которого запущен exe-файл?" именно так! После обновления у вас будет новый каталог, а бантик останется в старом!
1.Если у юзера повис 1с, то да согласен,ни хрена не выйдет, НО обмен 1 раз в 40 минут, за 40 минут юзер перезапустит свой висяк, и обмен состоится.
2.Если "отчёт" и любая другая транзакция, то , в этом вся прелесть в отличии от штатной блокировки, она ждет когда закончится "отчёт", и врубает счетчик, и обмен, опять же таки, состоится. Это уже проверено на практике.
24. fixin 4278 18.07.12 10:37 Сейчас в теме
(22) и что, функция КаталогПрограммы() не вернет этот каталог? А что она вернет? Я по-прежнему не догоняю че-та... Ну даже если вернет базовый каталог, в нем можно замутить поиск EXE-файла, в чем проблема-то.

Юзверь может и перезапустит, а может и нет, может он ваще ушел домой с работы...

(23) Гото - не моветон. В умелых руках. Я вам как программист, получивший высшее образование по специальности, говорю.
30. sa1m0nn 28 23.07.12 10:55 Сейчас в теме
(24)
>> Я вам как программист, получивший высшее образование по специальности, говорю.

Вы, наверное, один тут программист с высшим образованием :)
31. fixin 4278 23.07.12 16:29 Сейчас в теме
(30) без понятия. речь идет о высшем профильном образовании.
32. sa1m0nn 28 24.07.12 08:36 Сейчас в теме
(31)

Тысяча извинений за офф...
Вероятно, я на сантехника учился...
Да и Эдсгеру Дейкстре, наверно, далеко до Ваших преподавателей...
http://ru.wikipedia.org/wiki/GOTO
Тысяча извинений, это всего лишь моё скромное мнение.
33. fixin 4278 24.07.12 11:33 Сейчас в теме
(32) курите раздел "Оправданное применение" по вашей ссылке. Мы изучали GoTo в рамках курса "Структурное программирование". Вы бы еще на BREAK ополчились, это тот же скрытый GoTo. В своем коде я использую Goto вместо цикла Repeat Until, которого нет в 1С, и это его нормальное применение. Оно более наглядно, чем замена на While (true)
daedal; vadimlp77; VZhulanov; +3 Ответить
74. rrustam11983 01.06.18 13:23 Сейчас в теме
(33) Программисту который использует GoTo нужно забить гвоздь в голову
75. fixin 4278 01.06.18 17:23 Сейчас в теме
(74) скорее програмисту, который не знает чем отличается плохой GOTO от хорошего.
25. Программулькин 301 18.07.12 12:22 Сейчас в теме
ыыыы "и что, функция КаталогПрограммы() не вернет этот каталог? А что она вернет? " да все верно, она именно это и сделает. Вот что у тебя получится: текущая платформа 8.2.15.317. Ты туда кидаешь свой бантик. Юзаешь КаталогПрограммы() - результат: все работает. Далее проходит месяц. Устанавливаем платформу новую. И вуаля, Ты уже юзаешь новый каталог программы, а именно: 8.2.15.318, где нет твоего бантика, результат - ошибка.Так понятно?
Если и так не понятно, то снеси все платформы, установи одну сделай обмен, а затем обнови платформу и увидишь ошибку, если ошибки не будет, тогда ты гений, и тогда обязан поделится как ты такое провернул!
Далее:
"Юзверь может и перезапустит, а может и нет, может он ваще ушел домой с работы... " - 90% случаев перезапустит, ибо ему 1с нужна, а вот если зависло и он ушёл домой, это да - косяк. Дык я и говорю, что мое решение далеко от идеала, НО в твоем случае это тоже косяк )), тоже не пройдет обновление :))) у тя есть решение такой проблемы?
26. fixin 4278 18.07.12 12:42 Сейчас в теме
(25) я батник создаю при каждом запуске автоматически из кода программы, а не кидаю туда. Как-то так. Так что никаких проблем у меня с этим не возникнет. Так что у меня косяков нету. Пользователя задолбает напоминалка и он обновится. Проверено на пользователях.
27. fieryfist 15 19.07.12 10:42 Сейчас в теме
отличная публикация, как раз настраиваю РИБ искал что-то подобное. Подскажите как настроить вызов функции ПостояннаяПроверкаРедкая() каждые пять минут, я сделал это через регламентное задание, но это не удобно т.к. сообщение выдается только пользователю для регламентных заданий, а у нас всегда запущено два сеанса.
28. fixin 4278 19.07.12 11:02 Сейчас в теме
(27) Через ПодключитьОбработчикОжидания
astraborz; fieryfist; +2 Ответить
29. Созинов 19.07.12 13:46 Сейчас в теме
Спасибо, возьмем на заметку.
34. maria7777777 14 25.07.12 09:00 Сейчас в теме
Да идея не плохая, но вот пользователям на удаленных точках полные права не могу дать, противоречит корпоративной безопасности...
35. fixin 4278 25.07.12 11:22 Сейчас в теме
(34) а зачем им полные права, не понял?
36. CnupT 70 27.07.12 06:23 Сейчас в теме
Не совсем понял, как согласуются
Для обновления конфигурации на точке достаточно перезайти в 1С под Администратор1

и
КоманднаяСтрокаОбновления = """" + ИмяФайлаПрограммы + """ config /Visible /NАвтообмен /P"""" /UpdateDBCfg /" +СтрокаСоединения;

Т.е. они сначала заходят под Администратор1, потом программа заходит под Автообмен? Зачем так сложно?
38. fixin 4278 27.07.12 08:21 Сейчас в теме
(36) Администратор1 - это логин для работы под пользователем. Пароль пустой.
Автообмен - это пользователь, если зайти под которым, то произойдет автообмен и 1с сразу же выйдет. Сейчас думаю, что можно было бы и без этого обойтись, в принципе. Пароль пустой.


(37) через обработчик ожидания. запускается периодически проверка, если автообмена давно не было (по истории обмена смотрим), то создаем скрипт, сохраняем его во временный файл, запускаем скрипт, а из скрипта коннектимся к 1с по ком-соединению и выполняем в ком-соединении обмен. Только такой расклад позволяет запустить автообмен полностью в невидимом режиме, чтобы юзверь его не видел. и юзверь может его снять через диспетчер задач, если чё.
AfterEarth; +1 Ответить
37. CnupT 70 27.07.12 06:29 Сейчас в теме
И еще момент. Как у Вас на точках организован сам процесс периодического обмена?
Пользователи держат включенными 2 окна 1с, или планировщиком Windows запускается?
Просто 2 окна крайне неудобно, а раз в NN минут открывающееся и закрывающееся окно
1С и того хуже.
Всю голову сломал как бы это покрасивше реализовать. Пока что с помощью v82.Automation
добился того, чтобы 1С висела себе в памяти без видимых проявлений, но при обновлении
конфигурации ее же выгружать надо, потом опять как-то загружать...
39. yoyoman 06.08.12 09:30 Сейчас в теме
А у нас как:
Около 20 рибов, обмены идут раз в 15-20 минут.
Cтандартное назначенное задание средствами Windows Server 2003, которое инициирует вход в 1с под пользователем Obmen. В настройках обмена стоит: Выполнять обмен при входе в систему пользователя Obmen.
Назначенное задание инициирует два таких запуска, один с ключом /UpdateDBCfg, а второй без.
При динамическом обновлении никаких проблем не возникает, и в течение дня всегда актуальные обмены. Не динамические обновления стараемся делать ночью. Ночью все серваки перезагружаются и активных сеансов 1с не остается. (также можно обычным батником в одну строчку перезапускать службу 1с).
Если же надо срочно не динамически обновиться средь бела дня, в каталоге обмена валяется psexec.ехе. Через него рассылается сообщение пользователям (через netsend) о предупреждении завершения сеансов 1с. Через psexec же перезапускается служба (или через taskkill убиваются все процессы 1с.ехе) и выполняется вход в 1с с ключом /UpdateDBCfg. Миссия выполнена. Изменений в конфигурации никаких. Все сделано тройкой батников по паре строк в каждом батнике.
40. fixin 4278 06.08.12 10:32 Сейчас в теме
(39) много отличий у нас с вами. я тоже сначала делал батником.
Но у меня есть нюансы:
1. Машины работают только днем
2. Обновления конфы чаще всего тоже приходят днем
3. Из-за глюков 1с задания, запущенные под фоновым пользователем винды имеют свойство зависать и только перезагрузка спасает, а потом она опять стартует и опять виснет. Поэтому отказался от запуска под фоновым юзверем...
4. Прописывать в 1С ручками windows-пользователя root на каждой из 40 узлов РИБ как-то стремно. Проще назначить пользователя с авторизацией из 1с, а не винды.
... и еще много нюансов.

Как-то так... Так что я понимаю ваш ура-оптимизм, но в реальной жизни все сложнее бывает
41. yoyoman 06.08.12 10:54 Сейчас в теме
1) Можно утром же обновлять, в 9 утра пришли на работу. В 9:01 обновление конфы, в 9:02 все радуются
2) У нас тоже днем идет в диапазоне 15-20 минут. С одним РИБом, и того каждые 2-3 минуты.
3) У нас за 4 года крайне редко случаются подобные проблемы, но легко мониторятся и лечатся обычным schtasks (запускаемым в пакетном режиме). Если перезагражать компьютер из-за зависшего назначенного задания - проблемы тогда надо искать в винде, а не в 1с.
4) В чем стремно? я не совсем понял, пользователь обмена то 1совский. Назначенное задание лишь под этим пользователем инициирует вход.
42. fixin 4278 06.08.12 11:07 Сейчас в теме
(41) ха, наивный чукотский юноша. у клиента 40 магазинов с самым разным временем открытия, к тому же обновления обычно происходят в середине дня, а не в начале и не в конце. Это как бы не проблема, можно предупреждать пользователя сделать обмен, тем же net send, как бы...

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

В том-то и дело, что разбираться с проблемами виндов на 40 точках не очень охота... Проще запускать невидимо под текущим виндовым пользователем, тогда всегда можно прибить через таски.

У меня не было задачи не менять конфу, поэтому я все сделал через 1с, в том числе и для того, чтобы не напрягать админов, ручные настройки заданий требуют времени, все задачи запускаются из самой 1с и все в шоколаде. Это возможно, потому что в течении дня 1с обычно открыта...

По поводу виндового пользователя - я подумал, что obmen у тебя виндовый пользователь, ну да ладно... ;-)
43. 1С_Мастер 61 06.09.12 12:05 Сейчас в теме
Перейти ~ПовторнаяПопыткаОбновления;


Таки я дико извиняюсь, но при всем уважении к автору, за использование goto надо руки вырывать.
44. fixin 4278 06.09.12 12:24 Сейчас в теме
(43) оператор гото допустимо использовать, но не всегда. там где использовал я - допустимо
45. 1С_Мастер 61 06.09.12 13:03 Сейчас в теме
(44)А какова необходимость использовать goto там, где без него можно прекрасно обойтись?
46. fixin 4278 06.09.12 13:32 Сейчас в теме
(45) стилистическая необходимость. Т.к. в 1с отсутствует цикл UNTIL, а GOTO смотрится красивее и проще вместо замены цикла UNTIL бесконечным циклом с брик.
47. relanium86 14 04.06.13 12:21 Сейчас в теме
Никто не пробовал если запускать через скрипт в режиме обновления конфигурации, если есть возможность динамического обновления, если в базе работают пользователи отработает скрипт?
48. sdv88 87 26.06.13 16:58 Сейчас в теме
а как проверить пройдет ли динамическое обновление или нет?
49. Linx-p 09.10.13 11:24 Сейчас в теме
(48) sdv88, проверить прошло ли обновление можно запустив обмен ;)
50. Muppo 26.05.15 09:45 Сейчас в теме
А есть вариант не с файловым обновлением а серверным с БД?
51. fixin 4278 26.05.15 13:38 Сейчас в теме
(50) Muppo, нету. Сами напишите, несложно.
52. Xershi 1564 19.04.16 10:19 Сейчас в теме
Я так понимаю уже тут спецы определили какой вариант самый лучший, чтобы эту операцию (выполнение обмена на автомате при изменении конфигурации в ЦБ) выполнять на автомате?

Подскажите лучшее решение?
А то сегодня ручками все проделал. Не охота каждый день убивать на это 20 минут))
53. fixin 4278 19.04.16 12:35 Сейчас в теме
(52) ну у меня ваще автоматом делается.
1. отключается главный узел.
2. через командную строку загружается конфа целиком.
3. подключается главный узел.

но это если целиком конфу пихать.


а так все же описано, берите скрипт и юзайте.
54. Xershi 1564 19.04.16 12:53 Сейчас в теме
(53) об этом и речь. У нас может и 2 раза на день конфа обновиться. А может быть день и не обновляем. Как разработки внедряем.

Как такой вариант обставить?

Пока в нашей удаленке пользователи не работают. Но в будущем планируется.

Ознакомился со статьей, но я так понимаю всю работу делает батник?

У вас есть более развернутая статья со всеми примерами? А то пока это задача на втором плане, но хотелось бы разобрать вопрос в кратчайшие сроки!
55. fixin 4278 19.04.16 14:11 Сейчас в теме
(54) куда уж развернутее. Если Вы не понимаете смысла этой статьи, боюсь у Вас не хватает понимания механизмов работы РИБ.
56. Xershi 1564 19.04.16 14:21 Сейчас в теме
(55) речь идет об
run.bat

В статье нет разбора этого файла. Вот что более развернуто интересует.
57. fixin 4278 19.04.16 17:26 Сейчас в теме
(56) А что run.bat?
В нем несколько раз запускается обновление конфигурации базы данных, чтобы полученная конфа была принята (10 попыток вроде).
Командная строка вида:
config /Visible /NАвтообмен /P"""" /UpdateDBCfg /" +СтрокаСоединения;
58. Xershi 1564 21.04.16 09:42 Сейчас в теме
(57) а попытки для чего? Конфа же один раз обновляется для чего 10 раз?
59. fixin 4278 21.04.16 13:22 Сейчас в теме
(58) батник запускается после выхода из 1С.
вообще можно вместо батника юзать скрипт vbs, батник то туповат.
Повторение потому что 1с медленно освобождает файл базы, поэтому первые 1-2 прогона могут не сработать, файл базы еще заблокирован после выхода из 1с.
AfterEarth; +1 Ответить
60. Xershi 1564 21.04.16 14:51 Сейчас в теме
(59) у меня например 1С работает через компоненту с пауршел. Суть в том что в винде нужно скрипт написать, который отработает определенный сценарий запуска 1С?
61. fixin 4278 21.04.16 15:40 Сейчас в теме
(60) да. хоть пауэршелл, хоть bat, хоть vbs-скрипт, без разницы. Главное чтобы 1с после выхода запустила скрипт.
62. Xershi 1564 21.04.16 16:39 Сейчас в теме
(61) а текст скрипта ты в (57) написал полный?
Что туда конкретно запихнуть?
63. fixin 4278 22.04.16 13:57 Сейчас в теме
(62) да, там 10 раз запускается 1с с ключом "config /Visible /NАвтообмен /P"""" /UpdateDBCfg /" +СтрокаСоединения;", для того, чтобы принять изменения конфигурации. Т.е. чтобы обновить конфигу, ключ: UpdateDBCfg
64. Xershi 1564 29.04.16 09:47 Сейчас в теме
(63) посмотрел, как сделан механизм в БП2, сейчас вожусь с адаптацией для любой конфигурации. У нас просто конфа еще с 8.1 и там нет некоторых модулей. А так будет универсальный механизм, скачал подсистему поставил и не паришься!
65. Xershi 1564 29.04.16 17:11 Сейчас в теме
В типовой выполняется такой код:
//Окончаение завершения работы пользователей
		//Обновление конфигурации ИБ                	
		Sh = Новый COMОбъект("WScript.Shell");
		//Обновим конфигурацию БД
		LineExe = """" + v8exe + """ CONFIG /S" + ServerName + ":" + Формат(KlasterPortNumber,"ЧГ=0") + "\" + InfoBaseName + " /N""" + InfoBasesAdminName + """ /P""" + InfoBasesAdminPass + """ /WA- /UpdateDBCfg /UC""" + LockPermissionCode;
		Sh.Run(LineExe, 5, True);
		


Почему он его с первого раза не обновляет?
66. Xershi 1564 29.04.16 17:30 Сейчас в теме
/Visible

Добавил ключ видимости, он получается что просто не успевает открыть конфигуратор?
67. Xershi 1564 29.04.16 17:41 Сейчас в теме
//Окончаение завершения работы пользователей
			//Обновление конфигурации ИБ                	
			Sh = Новый COMОбъект("WScript.Shell");
			//Обновим конфигурацию БД
			LineExe = """" + v8exe + """ CONFIG /Visible /S" + ServerName + ":" + Формат(KlasterPortNumber,"ЧГ=0") + "\" + InfoBaseName + " /N""" + InfoBasesAdminName + """ /P""" + InfoBasesAdminPass + """ /WA- /UpdateDBCfg /UC""" + LockPermissionCode+"/Out"+"D:\Bukanov\РИБ\dump.txt"+" -NoTruncate";
			Sh.Run(LineExe, 0, True);
			


Добавил /Out"+"D:\РИБ\dump.txt"+" -NoTruncate, как и было в изначальной версии, с файлом не хотел мудрить, тогда операция идет долго и гарантировано обновляет конфигурацию.
В понедельник поиграюсь еще, но думаю я почти закончил подсистему.
68. fixin 4278 30.04.16 00:38 Сейчас в теме
69. Xershi 1564 02.05.16 16:45 Сейчас в теме
(68) кстати подскажи как правильно реализовать такую штуку:
Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда
		
		Если КонфигурацияИзменена() Тогда			
			
			ОтключитьОбработчикОжидания("ПроверкаНаОбновлениеРИБ");
			
			СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
			Если СтрЧислоВхождений(ВРег(СтрокаСоединения), "FILE=") Тогда
				#Если Клиент Тогда
					Предупреждение("Конфигурация базы данных изменена, чтобы не образовался простой в обменах, обновите конфигурацию или свяжитесь с поддержкой 1с!" + Символы.ПС +
					"Для обновления конфигурации на точке достаточно перезайти в 1С под Администратором, при этом будет выдан запрос на обновление. " + ТекущаяДата());
				#КонецЕсли 				
				ОбработкаОбновлениеКонфигурации = Обработки.ОбновлениеКонфигурации.Создать();
				ФормаОбработки = ОбработкаОбновлениеКонфигурации.ПолучитьФорму();
				ФормаОбработки.Открыть(); 
			Иначе				
				МодульРегламентныхЗаданий.ОбновлениеКонфигурации();				
				#Если Клиент Тогда
					Предупреждение("Конфигурация базы данных изменена, чтобы не образовался простой в обменах, завершите работу!" + Символы.ПС +
					"Конфигурация будет обновлена автоматически: " + Строка(ТекущаяДата()+300));
				#КонецЕсли				
			КонецЕсли;			
			
		КонецЕсли;
		
	Иначе
		
		ОтключитьОбработчикОжидания("ПроверкаНаОбновлениеРИБ");
		
	КонецЕсли;
Показать


Т.е. в чем вопрос: Как правильно запустить процедуру 1 раз в клиент-серверном варианте?
Делать проверку заблокирована ли база? Если она уже заблокирована, значит считать что обновление пошло? Но когда я отлаживал, скрипт вылетал в ошибки (криво 1С скрипт написали) и база будет заблокирована и не обновлена.

70. fixin 4278 03.05.16 10:23 Сейчас в теме
(69) запускай в цикле и анализируй ответ.
71. Xershi 1564 03.05.16 12:31 Сейчас в теме
(70) анализ через что делать. Пользователей много, а если что пойдет не так чем восстановить без участия администратора?
72. fixin 4278 03.05.16 21:36 Сейчас в теме
(71) а что там восстанавливать то? можно проанализировать ситуацию и предложить пользователю обновить конфигурацию или выйти, например.
73. sir 18 20.02.17 12:50 Сейчас в теме
У меня вот что получилось , немного подредактировал процедуру

запускается в фоновом задании, если конфигурация изменена

СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
		
		Попытка
			УстановитьМонопольныйРежим(Истина); 
		Исключение
			//ЗаписатьВЖурнал("Обновление ИБ","Не удалось установить монопольный режим. "+ ОписаниеОшибки(),Истина);
		КонецПопытки;
					
		КаталогПрограммы  = КаталогПрограммы();
		ИмяФайлаПрограммы = КаталогПрограммы + "1cv8.exe";
		ИмяФайлаПрограммы = СтрЗаменить(ИмяФайлаПрограммы,"Program Files\","Program Files (x86)\");
							
		КоманднаяСтрокаОбновления = """" + ИмяФайлаПрограммы + """ DESIGNER /UpdateDBCfg -server /IBConnectionString" +СтрокаСоединения+" /N"+Пользователь+" /P"+Пароль; 
		СтрокаСоединения = СтрЗаменить(СтрокаСоединения,"""","""""");
		КомандаЗапускаПриложения  = " /RunEnterprise ""ENTERPRISE /IBConnectionString" +СтрокаСоединения+" /N"+Пользователь+" /P"+Пароль+" /DisableStartupMessages /CUpLoad"" "; 
		
		КоманднаяСтрокаОбновления = КоманднаяСтрокаОбновления +  КомандаЗапускаПриложения;
				
		//ЗаписатьВЖурнал("Обновление ИБ", "КоманднаяСтрокаОбновления  "+КоманднаяСтрокаОбновления);
		
		ТекстСкрипта = "chcp 1251"+Символы.ПС+"taskkill /F /IM 1cv8.exe"+Символы.ПС;
		Для Инд = 1 по 10 Цикл 
			ТекстСкрипта = ТекстСкрипта + КоманднаяСтрокаОбновления + Символы.ПС;
			ТекстСкрипта = ТекстСкрипта + "if not errorlevel 1 goto pend " + Символы.ПС;
		КонецЦикла;
		
		ТекстСкрипта = ТекстСкрипта + "
		|:pend";
		
		ИмяФайлаСкрипта = КаталогВременныхФайлов() + "UpdateDBCfg.bat";
		ФайлСкрипта = Новый ТекстовыйДокумент();
		ФайлСкрипта.УстановитьТекст(ТекстСкрипта);
		ФайлСкрипта.Записать(ИмяФайлаСкрипта,КодировкаТекста.OEM);
		
		//ЗаписатьВЖурнал("Обновление ИБ", "ИмяФайлаСкрипта  "+ИмяФайлаСкрипта);
		
		Попытка
			ЗапуститьПриложение(ИмяФайлаСкрипта,,ложь);      
		Исключение
			//ЗаписатьВЖурнал("Обновление ИБ", ОписаниеОшибки(),Истина);
		КонецПопытки;
		
	
Показать
Оставьте свое сообщение