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

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%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

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

Обработка позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию. Переносятся документы, а также начальные остатки и справочная информация. Есть фильтр по организации и множество других опциональных параметров выгрузки. Наши правила переноса в продаже с 2015 года, постоянно работаем над их развитием. Более 360 предприятий выполнили переход с использованием этого продукта. Оказываем техническую поддержку по всем вопросам проекта переноса данных из УПП 1.3.

50722 45650 руб.

04.08.2015    159267    363    266    

345

SALE! 10%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    134598    718    291    

387

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

15.12.2021    20088    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2

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

Переносятся документы за выбранный период, нормативно-справочная информация и остатки по счетам бухгалтерского учета из программы "1С:БП 3.0" в "1С:УТ 11" или "1С:КА. 2" или "1С:ERP Управление предприятием, ред. 2".

50722 45650 руб.

31.10.2014    231092    124    326    

295

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3

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

Обработка позволяет не только перенести все документы, справочную информацию и начальные остатки из ERP 2 или КА 2 в ЗУП 3, но и организовать регулярный перенос данных между программами 1С:ERP 2 / КА 2 и 1С:ЗУП 3. Вы можете выбрать период отбора данных и установить фильтр по организациям, чтобы выгружать только необходимую информацию. Более того, перенос оперативно обновляется при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

48278 43450 руб.

03.12.2020    34033    80    57    

78

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0

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

Перенос позволяет настроить собственный обмен данными между указанными программами, альтернативный предлагаемому фирмой 1С. Перенос данных осуществляется из 1С:ERP 2 / 1С:КА 2 / 1С:УТ 11 в 1С:БП 3.0. Правила обмена оперативно обновляются при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

38500 34650 руб.

15.04.2019    68191    176    136    

108

Перенос данных из Парус 10 в ЗГУ ред.3

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9155    9    8    

10

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

23.07.2020    46019    194    64    

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

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

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

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

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

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

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

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

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

окошко вида )

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

ну и использовать GoTo признак плохого тона в программировании...
vlasin; DrAku1a; yansen; +3 Ответить
11. fixin 4252 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 4252 16.07.12 12:36 Сейчас в теме
(8) есть два права. первое - это право на изменение конфы. без него файл с изменениями конфы не прочитается и дело до "ОбновитьКонфигурацию" даже не дойдет. Проще решить эту пролему, запуская обмен данными в привелигированном модуле, т.к. право на изменение конфы - весьма опасное, его нельзя давать на точках.

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

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

Ваш случай очень удобен если обмен проходит по несколько раз в день , а если одного раза достаточно , то не обязательно трогать конфигурацию.
13. fixin 4252 16.07.12 14:08 Сейчас в теме
(12) в моем случае компьютеры на ночь выключаются, т.е. все должно происходить с выгоном пользователей...
но я думаю, можно и на скриптах написать, чтобы не менять конфу, почему бы нет... ;-)
14. ak0710 162 16.07.12 14:23 Сейчас в теме
(13) Я за то чтобы как можно меньше всего трогать в типовой конфигурации , можно добавить просто еще командную строку с отключением ПК после обмена , каждый сам выберет что ему надо , возможно ваш способ Я тоже когда нибудь использую
15. fixin 4252 16.07.12 15:09 Сейчас в теме
(14) у нас обновление конфы происходит не только ночью, а в любой момент.
16. kiros 52 16.07.12 15:52 Сейчас в теме
Да, идея очень достойная, мы реализовывали так, если динамическое обновление, то автоматически обновлялось, и стандартная обработка требовала от пользователей перезайти (со счетом до 3-х, т.е. не больше трех раз можно отказаться от пере захода в 1с). А в случае монопольного обновления инициировали блокировку подключения с отсрочкой 5 минут, и опять же стандартными средствами получалось выгнать, после чего спокойно обновлялись и снимали блокировку, как то так :)
17. fixin 4252 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 4252 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 4252 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 4252 18.07.12 10:37 Сейчас в теме
(22) и что, функция КаталогПрограммы() не вернет этот каталог? А что она вернет? Я по-прежнему не догоняю че-та... Ну даже если вернет базовый каталог, в нем можно замутить поиск EXE-файла, в чем проблема-то.

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

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

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

Тысяча извинений за офф...
Вероятно, я на сантехника учился...
Да и Эдсгеру Дейкстре, наверно, далеко до Ваших преподавателей...
http://ru.wikipedia.org/wiki/GOTO
Тысяча извинений, это всего лишь моё скромное мнение.
33. fixin 4252 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 4252 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 4252 18.07.12 12:42 Сейчас в теме
(25) я батник создаю при каждом запуске автоматически из кода программы, а не кидаю туда. Как-то так. Так что никаких проблем у меня с этим не возникнет. Так что у меня косяков нету. Пользователя задолбает напоминалка и он обновится. Проверено на пользователях.
27. fieryfist 15 19.07.12 10:42 Сейчас в теме
отличная публикация, как раз настраиваю РИБ искал что-то подобное. Подскажите как настроить вызов функции ПостояннаяПроверкаРедкая() каждые пять минут, я сделал это через регламентное задание, но это не удобно т.к. сообщение выдается только пользователю для регламентных заданий, а у нас всегда запущено два сеанса.
28. fixin 4252 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 4252 25.07.12 11:22 Сейчас в теме
(34) а зачем им полные права, не понял?
36. CnupT 69 27.07.12 06:23 Сейчас в теме
Не совсем понял, как согласуются
Для обновления конфигурации на точке достаточно перезайти в 1С под Администратор1

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

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


(37) через обработчик ожидания. запускается периодически проверка, если автообмена давно не было (по истории обмена смотрим), то создаем скрипт, сохраняем его во временный файл, запускаем скрипт, а из скрипта коннектимся к 1с по ком-соединению и выполняем в ком-соединении обмен. Только такой расклад позволяет запустить автообмен полностью в невидимом режиме, чтобы юзверь его не видел. и юзверь может его снять через диспетчер задач, если чё.
AfterEarth; +1 Ответить
37. CnupT 69 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 4252 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 4252 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 4252 06.09.12 12:24 Сейчас в теме
(43) оператор гото допустимо использовать, но не всегда. там где использовал я - допустимо
45. 1С_Мастер 61 06.09.12 13:03 Сейчас в теме
(44)А какова необходимость использовать goto там, где без него можно прекрасно обойтись?
46. fixin 4252 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 4252 26.05.15 13:38 Сейчас в теме
(50) Muppo, нету. Сами напишите, несложно.
52. Xershi 1473 19.04.16 10:19 Сейчас в теме
Я так понимаю уже тут спецы определили какой вариант самый лучший, чтобы эту операцию (выполнение обмена на автомате при изменении конфигурации в ЦБ) выполнять на автомате?

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

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


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

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

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

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

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

В статье нет разбора этого файла. Вот что более развернуто интересует.
57. fixin 4252 19.04.16 17:26 Сейчас в теме
(56) А что run.bat?
В нем несколько раз запускается обновление конфигурации базы данных, чтобы полученная конфа была принята (10 попыток вроде).
Командная строка вида:
config /Visible /NАвтообмен /P"""" /UpdateDBCfg /" +СтрокаСоединения;
58. Xershi 1473 21.04.16 09:42 Сейчас в теме
(57) а попытки для чего? Конфа же один раз обновляется для чего 10 раз?
59. fixin 4252 21.04.16 13:22 Сейчас в теме
(58) батник запускается после выхода из 1С.
вообще можно вместо батника юзать скрипт vbs, батник то туповат.
Повторение потому что 1с медленно освобождает файл базы, поэтому первые 1-2 прогона могут не сработать, файл базы еще заблокирован после выхода из 1с.
AfterEarth; +1 Ответить
60. Xershi 1473 21.04.16 14:51 Сейчас в теме
(59) у меня например 1С работает через компоненту с пауршел. Суть в том что в винде нужно скрипт написать, который отработает определенный сценарий запуска 1С?
61. fixin 4252 21.04.16 15:40 Сейчас в теме
(60) да. хоть пауэршелл, хоть bat, хоть vbs-скрипт, без разницы. Главное чтобы 1с после выхода запустила скрипт.
62. Xershi 1473 21.04.16 16:39 Сейчас в теме
(61) а текст скрипта ты в (57) написал полный?
Что туда конкретно запихнуть?
63. fixin 4252 22.04.16 13:57 Сейчас в теме
(62) да, там 10 раз запускается 1с с ключом "config /Visible /NАвтообмен /P"""" /UpdateDBCfg /" +СтрокаСоединения;", для того, чтобы принять изменения конфигурации. Т.е. чтобы обновить конфигу, ключ: UpdateDBCfg
64. Xershi 1473 29.04.16 09:47 Сейчас в теме
(63) посмотрел, как сделан механизм в БП2, сейчас вожусь с адаптацией для любой конфигурации. У нас просто конфа еще с 8.1 и там нет некоторых модулей. А так будет универсальный механизм, скачал подсистему поставил и не паришься!
65. Xershi 1473 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 1473 29.04.16 17:30 Сейчас в теме
/Visible

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


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

70. fixin 4252 03.05.16 10:23 Сейчас в теме
(69) запускай в цикле и анализируй ответ.
71. Xershi 1473 03.05.16 12:31 Сейчас в теме
(70) анализ через что делать. Пользователей много, а если что пойдет не так чем восстановить без участия администратора?
72. fixin 4252 03.05.16 21:36 Сейчас в теме
(71) а что там восстанавливать то? можно проанализировать ситуацию и предложить пользователю обновить конфигурацию или выйти, например.
73. sir 11 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);
		
		//ЗаписатьВЖурнал("Обновление ИБ", "ИмяФайлаСкрипта  "+ИмяФайлаСкрипта);
		
		Попытка
			ЗапуститьПриложение(ИмяФайлаСкрипта,,ложь);      
		Исключение
			//ЗаписатьВЖурнал("Обновление ИБ", ОписаниеОшибки(),Истина);
		КонецПопытки;
		
	
Показать
Оставьте свое сообщение