Информирование
Имеет смысл информировать пользователей о том, что с обменами пришло обновление конфигурации.
Для этого в модуле приложения достаточно вставить периодически вызываемую функцию вида:
Функция ПостояннаяПроверкаРедкая() Экспорт
//Раз в 5 минут
Если ПланыОбмена.ГлавныйУзел() <> НеопределеноТогда
Если КонфигурацияИзменена() Тогда
ксПредупреждение("Конфигурация базы данных изменена, чтобы не образовался простой в обменах, обновите конфигурацию или свяжитесь с поддержкой 1с!" + Символы.ПС +
"Для обновления конфигурации на точке достаточно перезайти в 1С под Администратор1, при этом будет выдан запрос на обновление. " + ТекущаяДата());
КонецЕсли;
КонецЕсли;
КонецФункции
Когда придут изменения, будет выдано окошко вида:
Обновление
Само обновление выполняется в функции ОбновитьКонфигурациюБазыДанных. Ее можно вставить при начале работы приложения или добавить в пункт меню интерфейса. Когда пользователь увидит предупреждение, он сможет выполнить обновление, когда ему будет удобно:
Функция ОбновитьКонфигурациюБазыДанных() Экспорт
//Если конфигурация изменена, тогда нужно выполнить ее обновление...
флКонфигурацияИзменена = КонфигурацияИзменена();
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();//File="C:1cv8Base".
ЭтоФайловая = Найти(СтрокаСоединения, "File="); //Заменить потом на типовую функцию.
Если флКонфигурацияИзменена И ЭтоФайловая Тогда
//Смотрим, чтобы в базе никого не сидело
~ПовторнаяПопыткаОбновления:
флОбновлять = истина;
Если ксВопрос(
"Внимание! Пришли изменения конфигурации. " + Символы.ПС +
"Рекомендуется их принять." + Символы.ПС +
"Закройте все остальные 1С на всех компьютерах точки и нажмите ""ДА"" для Обновления." + Символы.ПС +
"Если после нажатия ""ДА"" выскочит красное окно ошибки, закройте его (кнопка ""Закрыть"")." + Символы.ПС +
"Если вы хотите продолжать работу без обновления (не рекомендуется) нажмите ""НЕТ""." + Символы.ПС +
"Если вы не обновляете конфигурацию, обязательно сделайте это позже в ближайшее время."+ Символы.ПС +
"ОБНОВИТЬ КОНФИГУРАЦИЮ?", РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да) = КодВозвратаДиалога.Нет Тогда
флОбновлять = ложь;
КонецЕсли;
Если флОбновлять Тогда
Попытка
УстановитьМонопольныйРежим(Истина);
Исключение
ксПредупреждение("Кто-то еще работает в базе, не могу захватить базу монопольно, обновить не получается, попробуйте еще раз! " + Символы.ПС + ОписаниеОшибки());
Перейти ~ПовторнаяПопыткаОбновления;
КонецПопытки;
//Создаем и запускаем скрипт на обновление базы
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();//File="C:1cv8Base".
СтрокаСоединения = СтрЗаменить(СтрокаСоединения, "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С, выдается сообщение вида:
Здоровское решение. Недавно делал распределенную базу и уже довелось ее обновлять с подключением по удаленке к узлам. При слеюущем обновлении добавлю эту функцию. Спасибо!
(1) ндык, че мы только не пробовали. оказалось, самый простой вариант такой.
Хорошее решение, при случае использую не задумываясь 🙂
Хорошая идея. Можно проверку немного модифицировать:
Функция ПостояннаяПроверкаРедкая() Экспорт
//Раз в 5 минут
Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда
Если КонфигурацияИзменена() Тогда
Если РольДоступна(«ПолныеПрава») или РольДоступна(«ПравоОбновленияКонфигурации») Тогда
ОбновитьКонфигурациюБазыДанных();
иначе
Предупреждение(«Конфигурация базы данных изменена, чтобы не образовался простой в обменах, обновите конфигурацию!» + Символы.ПС +
«Для обновления конфигурации на точке достаточно перезайти в 1С под Администратор (или пользователем с администраторскими правами), при этом будет выдан запрос на обновление. » + ТекущаяДата());
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецФункции
(4) можно и автоматом. Но не всегда прокатит автоматика. Если открыто две 1с-ки, то конфа не обновится автоматом, а сообщение о том, что не удалось обновить, будет доставать.
хотя согласен, можно попытаться обновить, а если не получится монопольный доступ, уже тогда сообщать.
Но лучше решение об обновлении все же принимать пользователю. Не всегда обновление проходит автоматом, и запускающийся каждые 10 минут конфигуратор будет доставать.
поставил плюс т.к. самому было в лом разбираться, в типовых предусмотрено авто. обновление…
но со стилистикой надо что то делать 🙂
Функция ПостояннаяПроверкаРедкая()
после редкая на ум приходит не хорошее слово 🙂
>Когда придут изменения будет выдано окошко вида
окошко вида )
> Закройте все остальные 1С на всех компьютерах точки 🙂
ну и использовать GoTo признак плохого тона в программировании…
Весьма симпатичная идея, большое спасибо!
Непременно воспользуюсь 🙂
А пользователь который делает обмен должен иметь полные права? У меня на РИБ узлах есть пользователь Обновление, при запуске этого пользователя, автоматом запускается обновление с главным узлом и после прохождения обновления сеанс пользователя завершается, у всех остальных пользователей стоит ограничение в правах. Будет при таком методе запускать «Автоматическое обновление конфигурации в узлах РИБ» у пользователя «Обновление»?
Хорошее решение
(8) есть два права. первое — это право на изменение конфы. без него файл с изменениями конфы не прочитается и дело до «ОбновитьКонфигурацию» даже не дойдет. Проще решить эту пролему, запуская обмен данными в привелигированном модуле, т.к. право на изменение конфы — весьма опасное, его нельзя давать на точках.
Второе право — это право на обновление конфигурации БД. Его можно дать даже пользователю без пароля, как у меня, «Автообмен».
(6) не буквоедствуйте.
Как сделано автообновление в типовых, не помню уже. У меня типовая ут 10.3, автообновления там нет, правда древний релиз.
Окошко вида — потому что текст там может быть другой, зависит от организации.
Использовать GoTo можно, нам об этом рассказывали в универе, где я учился на программиста. Альтернатива циклу while true в небольших участках кода — вполне.
Ваш способ конечно хорош, у каждого это идея приходит по разному , год или два назад Я настраивал авто обмен в одной фирме у них была типовая ИБ , и не было смысла убирать замок с конфигурации.
Каждую ночь в головной базе производилась выгрузка планов обмена например в 23.00 (отключались все пользователи , делался бэкап перед этим)
В базе филиала :
В 01:00 в базе филиала запускалось чтение плана обмена (перед чтение отключение всех пользователей и бэкап)
В 01:30 1С с командной строкой /UpdateDBCfg
В 02:00 повторное чтение и выгрузка
Обмен с 6ти филиалами работает по сей день, здесь обновление проходило 1 раз ночью .
Ваш случай очень удобен если обмен проходит по несколько раз в день , а если одного раза достаточно , то не обязательно трогать конфигурацию.
(12) в моем случае компьютеры на ночь выключаются, т.е. все должно происходить с выгоном пользователей…
но я думаю, можно и на скриптах написать, чтобы не менять конфу, почему бы нет… 😉
(13) Я за то чтобы как можно меньше всего трогать в типовой конфигурации , можно добавить просто еще командную строку с отключением ПК после обмена , каждый сам выберет что ему надо , возможно ваш способ Я тоже когда нибудь использую
(14) у нас обновление конфы происходит не только ночью, а в любой момент.
Да, идея очень достойная, мы реализовывали так, если динамическое обновление, то автоматически обновлялось, и стандартная обработка требовала от пользователей перезайти (со счетом до 3-х, т.е. не больше трех раз можно отказаться от пере захода в 1с). А в случае монопольного обновления инициировали блокировку подключения с отсрочкой 5 минут, и опять же стандартными средствами получалось выгнать, после чего спокойно обновлялись и снимали блокировку, как то так 🙂
(16) ну дык печатайте на ИС и зарабатывайте плюсики. 😉 Я не претендую на идеал, но система рабочая.
Честно сказать — полная какашка!, но минус ставить не буду ибо как вариант имеет права на жизнь.
Во первых, это же : автоматическое обновление конфигурации!, какие нахрен окошки на «да» и «нет», какое нафиг «не могу захватить монопольно» — бред! У меня если пришли обновления, то всем сообщение о сохранении документов и баста — счётчик тикает, далее всех кидает и обновляет, причём во время обновления хрен кто зайдет.Обновилось, пожалуйста, работайте, вмешательство рук человека 0, особенно юзеров!
правда минус есть, пришлось внести изменения в конфу: добавлены 4 процедуры 1 константа и 1 форма и 1 роль
Во вторых, » КаталогПрограммы = КаталогПрограммы();» тоже бред. Обновил платформу и всё, приплыли, файл не найден!
У меня у юзеров тупо диск вставил запустил батник и всем 15м платформа новенькая легла без всяких там вопросов «могу» «не могу». Похер на антивири и фаерволы, за исключением вистовской попрошайки о том кто запустил файл, и то настраиваешь на низкий уровень и попёр!
обмен раз в 40 минут, тобишь всегда актуальная база и конфа.
(18) понты так и сверкают. Так где же ваша замечательная программма? В файловой версии конечно, можно поставить убивцу 1с на все компьютеры точки (2-3 штуки). Но нужно управление этим убивцем, короче задача излишне усложняется. Про КаталогПрограммы я ваш нюанс не понял, как бе. В общем, готов рассмотреть ваш супер-пупер-вариант, когда он тут появится. Пока это только проджэкт, который критиковать невозможно за его отсутствием в мире реальном.
(20) все равно про каталог программы не догнал. разве в 82 он не показывает на каталог, из которого запущен exe-файл?
Дядя, а если у пользователя запущен отчет или 1С повис, 1с у вас автоматом не выйдет. Это я так, на всякий случай намекаю как бе. Из практики.
(21) «все равно про каталог программы не догнал» —faspalm…Тяжелый случай, делаю последнюю попытку.При обновлении платформы каталог программы меняется, т.е. создается новый.
«разве в 82 он не показывает на каталог, из которого запущен exe-файл?» именно так! После обновления у вас будет новый каталог, а бантик останется в старом!
1.Если у юзера повис 1с, то да согласен,ни хрена не выйдет, НО обмен 1 раз в 40 минут, за 40 минут юзер перезапустит свой висяк, и обмен состоится.
2.Если «отчёт» и любая другая транзакция, то , в этом вся прелесть в отличии от штатной блокировки, она ждет когда закончится «отчёт», и врубает счетчик, и обмен, опять же таки, состоится. Это уже проверено на практике.
(11)
Хорошая идея, спасибо, +2.
ЗЫ: Но про ГоТо сказали правильно — это моветон (меня реально высаживает :)). Используйте вызов процедуры.
(22) и что, функция КаталогПрограммы() не вернет этот каталог? А что она вернет? Я по-прежнему не догоняю че-та… Ну даже если вернет базовый каталог, в нем можно замутить поиск EXE-файла, в чем проблема-то.
Юзверь может и перезапустит, а может и нет, может он ваще ушел домой с работы…
(23) Гото — не моветон. В умелых руках. Я вам как программист, получивший высшее образование по специальности, говорю.
ыыыы «и что, функция КаталогПрограммы() не вернет этот каталог? А что она вернет? » да все верно, она именно это и сделает. Вот что у тебя получится: текущая платформа 8.2.15.317. Ты туда кидаешь свой бантик. Юзаешь КаталогПрограммы() — результат: все работает. Далее проходит месяц. Устанавливаем платформу новую. И вуаля, Ты уже юзаешь новый каталог программы, а именно: 8.2.15.318, где нет твоего бантика, результат — ошибка.Так понятно?
Если и так не понятно, то снеси все платформы, установи одну сделай обмен, а затем обнови платформу и увидишь ошибку, если ошибки не будет, тогда ты гений, и тогда обязан поделится как ты такое провернул!
Далее:
«Юзверь может и перезапустит, а может и нет, может он ваще ушел домой с работы… » — 90% случаев перезапустит, ибо ему 1с нужна, а вот если зависло и он ушёл домой, это да — косяк. Дык я и говорю, что мое решение далеко от идеала, НО в твоем случае это тоже косяк )), тоже не пройдет обновление :))) у тя есть решение такой проблемы?
(25) я батник создаю при каждом запуске автоматически из кода программы, а не кидаю туда. Как-то так. Так что никаких проблем у меня с этим не возникнет. Так что у меня косяков нету. Пользователя задолбает напоминалка и он обновится. Проверено на пользователях.
отличная публикация, как раз настраиваю РИБ искал что-то подобное. Подскажите как настроить вызов функции ПостояннаяПроверкаРедкая() каждые пять минут, я сделал это через регламентное задание, но это не удобно т.к. сообщение выдается только пользователю для регламентных заданий, а у нас всегда запущено два сеанса.
(27) Через ПодключитьОбработчикОжидания
Спасибо, возьмем на заметку.
(24)
>> Я вам как программист, получивший высшее образование по специальности, говорю.
Вы, наверное, один тут программист с высшим образованием 🙂
(30) без понятия. речь идет о высшем профильном образовании.
(31)
Тысяча извинений за офф…
http://ru.wikipedia.org/wiki/GOTO
Вероятно, я на сантехника учился…
Да и Эдсгеру Дейкстре, наверно, далеко до Ваших преподавателей…
Тысяча извинений, это всего лишь моё скромное мнение.
(32) курите раздел «Оправданное применение» по вашей ссылке. Мы изучали GoTo в рамках курса «Структурное программирование». Вы бы еще на BREAK ополчились, это тот же скрытый GoTo. В своем коде я использую Goto вместо цикла Repeat Until, которого нет в 1С, и это его нормальное применение. Оно более наглядно, чем замена на While (true)
Да идея не плохая, но вот пользователям на удаленных точках полные права не могу дать, противоречит корпоративной безопасности…
(34) а зачем им полные права, не понял?
Не совсем понял, как согласуются
и
Т.е. они сначала заходят под Администратор1, потом программа заходит под Автообмен? Зачем так сложно?
И еще момент. Как у Вас на точках организован сам процесс периодического обмена?
Пользователи держат включенными 2 окна 1с, или планировщиком Windows запускается?
Просто 2 окна крайне неудобно, а раз в NN минут открывающееся и закрывающееся окно
1С и того хуже.
Всю голову сломал как бы это покрасивше реализовать. Пока что с помощью v82.Automation
добился того, чтобы 1С висела себе в памяти без видимых проявлений, но при обновлении
конфигурации ее же выгружать надо, потом опять как-то загружать…
(36) Администратор1 — это логин для работы под пользователем. Пароль пустой.
Автообмен — это пользователь, если зайти под которым, то произойдет автообмен и 1с сразу же выйдет. Сейчас думаю, что можно было бы и без этого обойтись, в принципе. Пароль пустой.
(37) через обработчик ожидания. запускается периодически проверка, если автообмена давно не было (по истории обмена смотрим), то создаем скрипт, сохраняем его во временный файл, запускаем скрипт, а из скрипта коннектимся к 1с по ком-соединению и выполняем в ком-соединении обмен. Только такой расклад позволяет запустить автообмен полностью в невидимом режиме, чтобы юзверь его не видел. и юзверь может его снять через диспетчер задач, если чё.
А у нас как:
Около 20 рибов, обмены идут раз в 15-20 минут.
Cтандартное назначенное задание средствами Windows Server 2003, которое инициирует вход в 1с под пользователем Obmen. В настройках обмена стоит: Выполнять обмен при входе в систему пользователя Obmen.
Назначенное задание инициирует два таких запуска, один с ключом /UpdateDBCfg, а второй без.
При динамическом обновлении никаких проблем не возникает, и в течение дня всегда актуальные обмены. Не динамические обновления стараемся делать ночью. Ночью все серваки перезагружаются и активных сеансов 1с не остается. (также можно обычным батником в одну строчку перезапускать службу 1с).
Если же надо срочно не динамически обновиться средь бела дня, в каталоге обмена валяется psexec.ехе. Через него рассылается сообщение пользователям (через netsend) о предупреждении завершения сеансов 1с. Через psexec же перезапускается служба (или через taskkill убиваются все процессы 1с.ехе) и выполняется вход в 1с с ключом /UpdateDBCfg. Миссия выполнена. Изменений в конфигурации никаких. Все сделано тройкой батников по паре строк в каждом батнике.
(39) много отличий у нас с вами. я тоже сначала делал батником.
Но у меня есть нюансы:
1. Машины работают только днем
2. Обновления конфы чаще всего тоже приходят днем
3. Из-за глюков 1с задания, запущенные под фоновым пользователем винды имеют свойство зависать и только перезагрузка спасает, а потом она опять стартует и опять виснет. Поэтому отказался от запуска под фоновым юзверем…
4. Прописывать в 1С ручками windows-пользователя root на каждой из 40 узлов РИБ как-то стремно. Проще назначить пользователя с авторизацией из 1с, а не винды.
… и еще много нюансов.
Как-то так… Так что я понимаю ваш ура-оптимизм, но в реальной жизни все сложнее бывает
1) Можно утром же обновлять, в 9 утра пришли на работу. В 9:01 обновление конфы, в 9:02 все радуются
2) У нас тоже днем идет в диапазоне 15-20 минут. С одним РИБом, и того каждые 2-3 минуты.
3) У нас за 4 года крайне редко случаются подобные проблемы, но легко мониторятся и лечатся обычным schtasks (запускаемым в пакетном режиме). Если перезагражать компьютер из-за зависшего назначенного задания — проблемы тогда надо искать в винде, а не в 1с.
4) В чем стремно? я не совсем понял, пользователь обмена то 1совский. Назначенное задание лишь под этим пользователем инициирует вход.
(41) ха, наивный чукотский юноша. у клиента 40 магазинов с самым разным временем открытия, к тому же обновления обычно происходят в середине дня, а не в начале и не в конце. Это как бы не проблема, можно предупреждать пользователя сделать обмен, тем же net send, как бы…
А как у тебя сделан выход из под пользователя obmen, или он так и болтается открытым после автообмена? или ты его насильно прибиваешь?
В том-то и дело, что разбираться с проблемами виндов на 40 точках не очень охота… Проще запускать невидимо под текущим виндовым пользователем, тогда всегда можно прибить через таски.
У меня не было задачи не менять конфу, поэтому я все сделал через 1с, в том числе и для того, чтобы не напрягать админов, ручные настройки заданий требуют времени, все задачи запускаются из самой 1с и все в шоколаде. Это возможно, потому что в течении дня 1с обычно открыта…
По поводу виндового пользователя — я подумал, что obmen у тебя виндовый пользователь, ну да ладно… 😉
Таки я дико извиняюсь, но при всем уважении к автору, за использование goto надо руки вырывать.
(43) оператор гото допустимо использовать, но не всегда. там где использовал я — допустимо
(44)А какова необходимость использовать goto там, где без него можно прекрасно обойтись?
(45) стилистическая необходимость. Т.к. в 1с отсутствует цикл UNTIL, а GOTO смотрится красивее и проще вместо замены цикла UNTIL бесконечным циклом с брик.
Никто не пробовал если запускать через скрипт в режиме обновления конфигурации, если есть возможность динамического обновления, если в базе работают пользователи отработает скрипт?
а как проверить пройдет ли динамическое обновление или нет?
(48) sdv88, проверить прошло ли обновление можно запустив обмен 😉
А есть вариант не с файловым обновлением а серверным с БД?
(50) Muppo, нету. Сами напишите, несложно.
Я так понимаю уже тут спецы определили какой вариант самый лучший, чтобы эту операцию (выполнение обмена на автомате при изменении конфигурации в ЦБ) выполнять на автомате?
Подскажите лучшее решение?
А то сегодня ручками все проделал. Не охота каждый день убивать на это 20 минут))
(52) ну у меня ваще автоматом делается.
1. отключается главный узел.
2. через командную строку загружается конфа целиком.
3. подключается главный узел.
но это если целиком конфу пихать.
а так все же описано, берите скрипт и юзайте.
(53) об этом и речь. У нас может и 2 раза на день конфа обновиться. А может быть день и не обновляем. Как разработки внедряем.
Как такой вариант обставить?
Пока в нашей удаленке пользователи не работают. Но в будущем планируется.
Ознакомился со статьей, но я так понимаю всю работу делает батник?
У вас есть более развернутая статья со всеми примерами? А то пока это задача на втором плане, но хотелось бы разобрать вопрос в кратчайшие сроки!
(54) куда уж развернутее. Если Вы не понимаете смысла этой статьи, боюсь у Вас не хватает понимания механизмов работы РИБ.
(55) речь идет об
В статье нет разбора этого файла. Вот что более развернуто интересует.
(56) А что run.bat?
В нем несколько раз запускается обновление конфигурации базы данных, чтобы полученная конфа была принята (10 попыток вроде).
Командная строка вида:
config /Visible /NАвтообмен /P»»»» /UpdateDBCfg /» +СтрокаСоединения;
(57) а попытки для чего? Конфа же один раз обновляется для чего 10 раз?
(58) батник запускается после выхода из 1С.
вообще можно вместо батника юзать скрипт vbs, батник то туповат.
Повторение потому что 1с медленно освобождает файл базы, поэтому первые 1-2 прогона могут не сработать, файл базы еще заблокирован после выхода из 1с.
(59) у меня например 1С работает через компоненту с пауршел. Суть в том что в винде нужно скрипт написать, который отработает определенный сценарий запуска 1С?
(60) да. хоть пауэршелл, хоть bat, хоть vbs-скрипт, без разницы. Главное чтобы 1с после выхода запустила скрипт.
(61) а текст скрипта ты в (57) написал полный?
Что туда конкретно запихнуть?
(62) да, там 10 раз запускается 1с с ключом «config /Visible /NАвтообмен /P»»»» /UpdateDBCfg /» +СтрокаСоединения;», для того, чтобы принять изменения конфигурации. Т.е. чтобы обновить конфигу, ключ: UpdateDBCfg
(63) посмотрел, как сделан механизм в БП2, сейчас вожусь с адаптацией для любой конфигурации. У нас просто конфа еще с 8.1 и там нет некоторых модулей. А так будет универсальный механизм, скачал подсистему поставил и не паришься!
В типовой выполняется такой код:
Почему он его с первого раза не обновляет?
Добавил ключ видимости, он получается что просто не успевает открыть конфигуратор?
Добавил /Out»+»D:РИБdump.txt»+» -NoTruncate, как и было в изначальной версии, с файлом не хотел мудрить, тогда операция идет долго и гарантировано обновляет конфигурацию.
В понедельник поиграюсь еще, но думаю я почти закончил подсистему.
(67) Поздравляю!
(68) кстати подскажи как правильно реализовать такую штуку:
Показать
Т.е. в чем вопрос: Как правильно запустить процедуру 1 раз в клиент-серверном варианте?
Делать проверку заблокирована ли база? Если она уже заблокирована, значит считать что обновление пошло? Но когда я отлаживал, скрипт вылетал в ошибки (криво 1С скрипт написали) и база будет заблокирована и не обновлена.
(69) запускай в цикле и анализируй ответ.
(70) анализ через что делать. Пользователей много, а если что пойдет не так чем восстановить без участия администратора?
(71) а что там восстанавливать то? можно проанализировать ситуацию и предложить пользователю обновить конфигурацию или выйти, например.
У меня вот что получилось , немного подредактировал процедуру
запускается в фоновом задании, если конфигурация изменена
Показать
(33) Программисту который использует GoTo нужно забить гвоздь в голову
(74) скорее програмисту, который не знает чем отличается плохой GOTO от хорошего.