Confstarter

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

Как обычно вносятся изменения в конфигурацию? Редко кто пишет прямо в живой базе. Обычно всю програмистскую работу (написание, отладку и т.п.) делают на копии, и только потом вносят изменения. И все бы ничего, но тут может добавиться ряд неприятных моментов:
1. Изменения можно вносить только тогда, когда никого в базе нет -> нужно либо выгонять пользователей, либо ждать окончания рабочего дня, когда они сами уйдут.
2. Часто на предприятии ведется не одна, а несколько баз идентичной конфигурации -> соответственно в каждую надо загружать изменения.
3. Наконец, базы могут быть на удаленных точках (филиалах). Соответственно там тоже должен быть кто-то, кто загрузит конфигурацию.

Все эти проблемы решались бы, если б 1С предусмотрела возможность пакетной загрузки конфигурации. Однако этого в версии 7.7 нет. И вот именно этот недостаток восполняет моя утилита.

Суть работы: утилита запускает 1С в режиме конфигуратора, и посылает его окну команды (сообщения WM_COMMAND, а также ввод текста в поля edit) как если бы это делал нажимающий на пункты менюшек админ 😉 .
При запуске конфигуратора утилите известен идентификатор его процесса, поэтому «запутаться» (послать сообщение не тому окну) она не может. О результате обработки команд узнается по тексту выскакивающих сообщений. Обработка прописана только для сообщений из русского интерфейса, соответственно с иными интерфейсами работать не будет.

Кроме этого, утилита позволяет перед загрузкой конфы сделать выгрузку данных. Имя файла выгрузки может включать форматные символы, задающие дату, день недели и «последний каталог пути» к базе.
Далее, чтобы не показывать пароль пользователя или конфигурации, в параметрах программы можно задавать «шифрованный пароль». Ну и наконец, даже если база еще не зарегистрирована в списке баз (либо регистрация слетела) — в предложенном 1Ской окне регистрации утилита нажмет «Ок», и база зарегистрится под стандартным «Информационная база #N». Насколько мне известно, пакетный режим конфигуратора на этом останавливался.

Параметры задаются ini-файлом, и/или ключами командной строки. В ini параметр представляет строку Ключ=Значение (например, user=Админ); в ком. строке — /Ключ Значение (например, /user Админ), пробел между ключем и значением обязателен! Параметры указанные в ком. строке имеют приоритет перед аналогичными в ini-файле (э
то позволяет, например, написав инишник с параметрами загрузки, использовать его для загрузки нескольких баз, указывая в строке запуска только ключ с путем к базе).

Краткую справку по ключам можно получить, введя в ком. строке /?.
Подробнее о работе утилиты см. в файле readme.

62 Comments

  1. 1Спополам

    Замечательная программа. Использовал для обновления 80 ЗиК баз — запустил и ушел, все обновилось 🙂

    Reply
  2. Sabron

    Отличная вещь.. скачивал правда не здесь.. Но успешно работает и облегчает жизнь….

    Reply
  3. dimm73

    Вещь

    Reply
  4. Вещь замечательная, но, сказав «а», можно и продолжить по алфавиту… При обновлении типовых, помимо мдшника, обновляются файлы v7plus.als, .dll и содержимое папки ExtForms. Если бы еще и это автоматизировать — вообще цены не сложишь.

    Reply
  5. alexqc

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

    Reply
  6. Ну да, выполнить 10-20 раз (а у 1Спополам — 80) раз копирование одного и того же — задача не требующая особого ума, но уж очень однообразная (плюс — можно одну-другую базу по запарке пропустить). В то же время, для автоматизации процесса можно дописать мелочевку, типа CopyFile(NewMDPath+’v7plus.als’, BasePath, False) и т.д. в текст программы с необходимыми проверками на сущесвование, да добавить ключ, включающий копирование этих файлов.

    Reply
  7. alexqc

    А конфстартер вы что, тоже руками 10-20….80 раз запускаете???? бат-файлы нынче отменили?

    Хинт: наберите в командной строке XCOPY /? — много интересного прочтете. Еще можете HELP в ком. строке набрать…

    Reply
  8. Нас не понимают :). Я ведь не в качестве претензии, просто было бы удобнее. Для себя я уже давно написал программку, которая делает все, что мне надо, в том числе и копирование.

    Reply
  9. alexqc

    Ну так раз уже есть — в чем проблемы? Я просто исхожу из того, что надо не заменять, а дополнять. И что стандартно позволяет система — незачем дублировать. К тому же, у разного народа разные каталоги/файлы копировать надо.

    Reply
  10. crs

    А нельзя ли добавить фукционал чтоб она только 1Сv7.md загружала но и вообще все данные?

    Reply
  11. salut

    Подскажите как шаблон имени задать? Необходимо обновить большое количество баз.

    Reply
  12. alexqc

    Шаблон имени выгрузки?

    Например так: /DownloadTo C:ackup?F-?YY-?MM-?DD

    ?YY-?MM-?DD — заменится на текущие год, месяц, день (для сегодня например 08-01-21), а ?F — на последний каталог в пути базы (например, для чего-то типа c:ases_1smybase будет mybase), итого получим C:ackupmybase-08-01-21

    Для загрузки шаблонов нет (собственно говоря, нечего шаблонить 🙂 ).

    Как вариант — можно воспользоваться командой FOR с ключем /D

    FOR /d %i in (c:ases_1s*) do confstarter /BasePath %i

    (внутри батника естественно вместо %i надо писать %%i)

    Reply
  13. vika64

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

    Reply
  14. мх

    Пользую, выручила, спасибо

    Reply
  15. DADdy

    Подскажите че не так?

    Пробую утилиту ConfStarter. Для начала хочу сделать бакап.

    создаю backup.ini файл:

    Debug=1

    BasePath=C: empoldbase

    Path1CExe=C: empin

    NewMDPath = NULL

    DownloadTo=C: empackupackup.zip

    запускаю ConfStarter.exe backup.ini

    Получаю ошибку:

    Подготовка командной строки…

    1С: C: empin

    База: C: empoldbase

    Пользователь:

    ОШИБКА! Ошибка запуска 1С: (5) Отказано в доступе.

    Что не так?

    Reply
  16. alexqc

    путь непосредственно к экзешнику, а не в его каталог

    типа так:

    Path1CExe=C: empin1cv7.exe

    Reply
  17. DADdy

    Ура спасибо!!!

    Reply
  18. DO_WHILE_LOOP

    Однозначно +, обновил 34 базы. Запускал в 4 потока, все обновилось без ошибок. Автору респект.

    Reply
  19. alexmal

    Хорошая программа! Однозначно +.

    Присоединяюсь к (10).

    Хотелось бы добавить возможность загрузки базы из выгруженой копии.

    Reply
  20. the1

    не очень понятно, выдает какое-то сообщение об ошибке, но кракозябрами. Судя по всему код ошибки (2). Что это?

    Reply
  21. alexqc

    (20) У вас есть варианты:

    1. Посмотреть документацию : ключ AnsiToOem — переводить (1) или нет (0) вывод из кодировки ANSI (CP-1251) в кодировку OEM (CP-866).

    Коды возврата — 0 — все нормально, 1 — ошибка, 2 — загружаемый файл старее текущего (при update=1).

    2. Использовать стандартное перенаправление вывода в файл ( > или >>), с последующим просмотром файла чем-либо что позволяет смотреть в разных кодировках (например, FAR, или встроенный вьювер тотал-коммандера)

    3. Использовать перед запуском системную команду смены кодовой страницы консоли CHCP (chcp 866)

    Reply
  22. the1

    Спасибо! Помогло AnsiToOem=1

    Теперь такие вопросы.

    1. Не происходит выбор Файла новой конфигурации. Из-за Опенконфа может быть? У меня плагин FDSubst1C заменяет окно выбора МД-файла на ХР-подобное (места, мой комп и т.п.)

    2. Выдается предупреждение «Загружаемая конфигурация не потомок текущей!» хотя 100% это потомок. При установке ForceReplace=1 происходит обновление конфы, но соответственно уже 1С выдает предупреждение, что, мол:

    Частичная потеря информации при преобразовании значений. К_ОплатыСверхУрочныхЧасовПоследующих/ВС_ДолжностнойОклад
    Частичная потеря информации при преобразовании значений. КПП/ВС_ОкладПоЗванию
    Частичная потеря информации при преобразовании значений. НДФЛ/ВС_ПНВЛ
    Частичная потеря информации при преобразовании значений. ПочтовыйСбор/КПП
    Частичная потеря информации при преобразовании значений. КодДоходаЕСН/КодДоходаЕСН
    Частичная потеря информации при преобразовании значений. РайонныйКоэффициент/Адрес
    Частичная потеря информации при преобразовании значений. Руководитель/КодОКАТО

    Это все константы, причем как видно, абсолютно разные… почему бы он их путал?

    И в финале 1С говорит: «Нет возможности удалить документ, по которому существуют движения! БольничныйЛист» (это первый в конфигурации)

    Подскажите, пожалуйста.

    Reply
  23. alexqc

    1. Да, скорее всего так и есть. Программа не может распознать диалог открытия файла.

    Встречный вопрос — если у вас стоит опенконф, то может использовать его средства? На сколько мне известно, есть плагины, которые распознают ключи командной строки, есть плагин который автоматом файл из буфера обмена открывает, и т.п. Посмотрите на сайте опенконфа, возможно есть и плагин для автозагрузки?

    2. Судя по всему, таки не потомок. 1Сочное предупреждение же свидетельствует что вероятно ваши конфы обновлялись слиянием (и счас у них не совпадают внутр. ИДы объектов). Соответственно и загружать лучше со слиянием (merge=1 forcereplace=0, при forcereplace=1 попытки объединения даже не делается). А лучше — сначала загрузить новый мд на копию основного, а потом уже, когда все ясно станет — загружать из копии в живую.

    И пожалуйста, разберитесь в механизме загрузки/объединения в 1С, тогда подобных вопросов возникать не будет.

    Reply
  24. the1

    Спасибо, все получилось! Оказывается у меня был старый ReadMe, поэтому использовал не все ключи.

    1. Опенконф то у меня стоит, но мне нужно наладить обновление у клиентов, порядка 100 машин. Поэтому не вариант.

    2. Конфа — точно потомок, помогла команда Merge=1

    Спасибище!

    Reply
  25. idw

    А нет ли такой программы и для 1С8?

    Reply
  26. alexqc

    Нет :). Я 8кой (пока?) не занимаюсь.

    Но насколько мне известно, у 8ки в плане регламентных процедур и пакетного режима гАраздо больше возможностей чем у 77. Посмотрите в доке по администрированию, возможно там есть и загрузка конфы.

    Reply
  27. idw

    Ксажелению я ничего такого там не видел. 😥

    Reply
  28. hibico

    (27)

    Посмотри внимательно: Параметры командной строки 1с8

    Жаль только, что там нет загрузки с выполнением регламентных заданий и последующим выходом из программы. А то приходится извращаться.

    А за Confstarter Спасибо!

    А the1 прав.

    Из-за Опенконфа файл новой конфигурации не выбирается. А насчет потомка, то в моем случае файл точно является потомком, но выводится сообщение о противном.

    Причем для эксперемента заменил МД, при первом обновлении сообщение «о не потомке» не выводилось, а при последующих снова — не потомок. Есть подозрение, что это связано с тем, что у меня подключен Опенконфа, а у пользователей нет.

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

    Reply
  29. nikk

    Спасибо! Полезная прога.

    Reply
  30. Ciceron

    Подскажите в чем дело. Работа программы останавливается на строках:

    Поиск окна конфигуратора

    Авторизация доступа

    и всё… обновление дальше не идет.

    Reply
  31. Franchiser

    Мега супер прога, есть только 1 вопрос. Что сделать чтобы можно было запускать от пользователя, имя которого на русском языке и можно ли добавить запись лога, чтобы знать что утилита смогла обновить а что нет. И еще опция merge почему то не срабатывает в командной строке, только из файла.

    Reply
  32. alexqc

    С параметрами в ком. строке работает точно также как в файле. Единственно, в ком. строке могут быть проблемы с кодировками, потому лучше русские имена писать в файле. Merge работает и там и там, может у вас что-то другое.

    В лог выдается ровно то, что сообщает 1С; если же речь идет о записи лога — для этого можно воспользоваться стандартными символами перенаправления «>» и «>>». См. комментарии, гдето такой пример был.

    Да, и еще. Прога писалась давно, так что как будет под вин7 работать — без понятия.

    Reply
  33. Franchiser

    (32) Спасибо, по кодировке понял!!! Наверно командную строку неправильно написал. У меня так было: ConfStarter merge=1 Load1S.ini /user Admin /password 007

    А нужно так, по справке не понятно?

    ConfStarter /merge 1 Load1S.ini /user Admin /password 007

    или

    ConfStarter Load1S.ini /user Admin /password 007 /merge 1

    как правильно вывести сообщение в файл, поправь пжл:

    @echo off

    ConfStarter Load1S.ini /user Админ /password 123

    >>c:log.txt

    Reply
  34. alexqc

    Да, ключ в ини-файле задается в виде «Ключ=Значение», в командной строке — «/Ключ Значение», т.е. имя ключа предваряется «/», значение ключа — следующий аргумент ком. строки, отделенный пробелом (пробелами). Аргументы, содержащие пробелы берутся в кавычки. Имя обрабатываемого настроечного файла идет как есть. Такова обычная практика построения ком. строки в винде.

    Reply
  35. Franchiser

    (34) на 64-разрядном сервере в терминале отказывается запускать 1с. Показывает Ид процесса и не может найти конфигуратор, процесс при этом не запускается.

    Reply
  36. alexqc

    Ничего не могу сказать про работу под 64х.

    Могу только посоветовать поиграться с режимом совместимости (в свойствах ЕХЕшника 1С и самого конфстартера).

    Reply
  37. Sod_a

    Я так и не поняла, как обновить несколько баз? Подскажите пожалуйста. Если прописать в INI-файле несколько, обновляется всё-равно только одна 🙁

    Reply
  38. Pashulick

    Подскажите, можно ли к маске имени файла выгрузке добавить время?

    Смысл в том, что бы при повторном обновлении в этот же день файл выгрузки не замещался новым!

    Reply
  39. Franchiser
    Sod_a пишет:

    Я так и не поняла, как обновить несколько баз? Подскажите пожалуйста. Если прописать в INI-файле несколько, обновляется всё-равно только одна

    Нужно создать несколько INI-файлов и в батники много раз вызывать их, либо использовать 1 ini-файл а все остальное (пути/пароли) прописать в батнике, там же можно использовать переменные.

    Reply
  40. Pashulick

    А есть тоже самое для 8-ки?

    Reply
  41. Маргоша

    Добрый день! У меня почему-то ошибка возникает <5> ОТКАЗАНО В ДОСТУПЕ. не могу понять, в чем дело. Текст файла настроек: Debug=1

    AnsiToOem=1

    BasePath=C:RW_Chpato

    Path1CExe=C:Program Files1Cv77_SQLBIN

    NewMDPath=C:1cv7.md

    ForceReplace=1

    DeleteAfter=0

    Update=0

    User=Admin

    Password=602564

    ConfigPassword=652218

    WorkTime=0

    DownLoadTo=null

    Помогите разобраться, пожалуйста. Что не так?

    Reply
  42. Маргоша

    Все, победила! путь к движку 1с надо указывать полностью с именем и расширением 😀

    Reply
  43. Myst_
  44. 1996oks

    (22) the1,

    Прошу прощения, но у меня точно такие же сообщения (только ссылки на документы другие) при обновлении ЗиК с 313 на 320 при загрузке обновленн конфигурации. Работала с 320 приводя ее к не типовой. Прошу подскажите пожалуйста что сделать, чтобы это победить поподробнее…

    Reply
  45. 1996oks

    (24) the1,

    И очень прошу поподробнее о «команда Merge=1». Уже четвертый день «колдую» без результатно……

    Reply
  46. alexqc
    Reply
  47. 1996oks

    (46) Спасибо большое. Очень понятно и познавательно. Поняла, что я не совсем того, потому что представления мои были аналогичны. Жаль только, что «дошла» до них сама. Я уже каажется справилась сама. В итоге пришла к тому, что если берешь конфу после «ОченьУмелых» ручек (не в обиду им будет сказано), которые без особых объяснений «спрыгивают» с предприятия, то помочь сможет только объединение и дотошная рутинная сверка. Надеется на автоматизацию процесса не приходиться. жаль только, что много времени потратила. Обновила, сегодня уже январь закрыли. Теперь предстоит в 8ку перенести….. Проанализировав ИБ, поняла, что опять «попала», но мы ж не ищем легких путей. Любой опыт-он бесценен:).

    Про конфстартер тоже спасибо еще раз. Думаю пригодиться.

    Reply
  48. Операция1Ы

    есть ли для восьмерке нечто подобное?

    Reply
  49. alexqc

    (48) В 8ке эта возможность встроена — см. ключи запуска конфигуратора (во встроенной справке — Запуск 1С:Предприятие 8 и параметры запуска Параметры командной строки пакетного режима запуска).

    Вот например как это сделано у меня в батнике


    set v8exe=»C:Program Files (x86)1cv828.2.15.2891cv8.exe»

    set user=admin

    set pass=пароль_админа

    set server=сервер_базы_данных

    set db=имя_БД_на_сервере

    set logfile=update.log

    set repo_dir=\путькхранилищу

    set repo_user=пользователь_хранилища

    set repo_pass=его пароль

    %v8exe% DESIGNER /Out%logfile% -NoTruncate /S%server%\%db% #k8SjZc9Dxk

    /n %user% /p %pass% #k8SjZc9Dxk

    /ConfigurationRepositoryUpdateCfg -force #k8SjZc9Dxk

    /ConfigurationRepositoryF %repo_dir% #k8SjZc9Dxk

    /ConfigurationRepositoryN %repo_user% #k8SjZc9Dxk

    /ConfigurationRepositoryP %repo_pass% #k8SjZc9Dxk

    /UpdateDBCfg

    Показать

    Это для загрузки конфы из хранилища. Для загрузки из файла вместо ключей хранилища (ключи со словом Repository) указывается /LoadCfg имя_файла_конфы

    Reply
  50. nikodim2012

    alexqc добрый день.

    Не совсем понятно, как конфстартер определяет, потомка базы?

    7.70.027

    1С Предприятие, Зарплата и Кадры, 7.70.321

    И вот еще вопрос: когда я обновляю вручную, я делаю: Открыть конфигурацию, Объединение конфигурации,

    в появившемся окне выбираю Загружаемая конф-я, Замещать объекты. Далее Да, Принять, ок.

    Всё обновляется без проблем.

    Если я использую конфстартер с инишкой:

    Debug=1

    BasePath=D: estase_zik

    Path1CExe=C:Program Files1Cv77BIN1cv7l.exe

    User=admin

    NewMDPath=D: estz3241cv7.md

    ForceReplace=1

    Merge=1

    DownloadTo=D: estackups?F-?DD-?MM-?YYYY

    На этапе объединения, появляется сообщение вида:

    [15:12] Конфигуратор :: Нет возможности удалить документ по которому существуют

    движения! ИзменениеУсловийОплатыОтпускаПоУходуЗаРебенком

    =OK=

    [15:12] Конфигуратор :: Реорганизация данных не выполнена

    =OK=

    И всё стопорится.

    А в чем же проблема? Вручную же обновляется вполне спокойно.

    Заранее спасибо

    Reply
  51. Ёпрст

    (50) пытаешься обновить разными мд-никами (не тем, что рученьками делал)

    Reply
  52. Ёпрст

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

    Reply
  53. nikodim2012

    Ёпрст

    Не совсем понимаю, что мне нужно сделать в конфстартере, чтобы всё гладко обновлялось, как и вручную?

    Убрать merge=1?

    Насчет обновления вручную — т.е. мд файл моей базы зик не типовой, или что?

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

    [16:16] Конфигуратор :: Невозможно изменить код счета 76.ЗП на 10.11, так как су

    ществует счет с данным кодом.

    =OK=

    [16:16] Конфигуратор :: Реорганизация данных не выполнена

    =OK=

    Reply
  54. alexqc

    (50) (53)

    Конфстартер не определяет потомка, это делает сам конфигуратор. Конфстартер только «на менюшки нажимает», и сообщения логгирует.

    Если не работает автомат — ну сделайте один раз вручную. Система не может за вас решить, что делать ей, например, со счетом который на место существующего втиснуть пытаетесь.

    Ключи ForceReplace=1 и Merge=1 несовместимы. Точнее, ForceReplace=1 заставляет принимать изменения даже если сообщено что конфа не потомок текущей — поэтому до объединения процесс вообще не доходит. Если нужно объединение — уберите ForceReplace=1.

    Reply
  55. nikodim2012

    Спасибо, я попробую без forcereplace.

    Но в теории — если конфстартер просто нажимает кнопки за меня, то почему при ручном обновлении 1с не задает дополнительных вопросов, а при обновлении именно через конфстартер задает?

    Получается, когда вручную, конфигуратор сам определяет, что сделать со счетем, а через конфстартер — не умеет?

    Reply
  56. alexqc

    Может потому что ты не загрузку измененной конфы, а сразу объединение делаешь?

    Чтобы так же делал конфстартер, надо написать merge=2 (естественно, без forceReplace).

    Reply
  57. nikodim2012

    Отлично, заработало.

    Т.е. теперь, если мне надо будет откатить базу на момент до обновления, я просто беру её из заранее выгруженного zip архива-бекапа, который делался командой DownloadTo=D: estackups?F-?DD-?MM-?YYYY?

    И больше ничего не нужно?

    Ещё вопрос — а можно обновлять базы комплексной и зика не по порядку, например, 321 и 322, а сразу с 321 на 324? Или это чревато чем-то?

    Reply
  58. roman_zzz

    Здравствуйте Уважаемые!

    работает ли эта прога на Windows 7 ???

    а то вот пробую — нифига! (в режиме совместимости тоже)

    Reply
  59. nikodim2012

    (58) roman_zzz, работает, я то как раз под вин 7 32 бита и сижу, и без всяких режимов совместимости, под админом.

    Опишите весь цикл действий, наверняка, где-то просто пропустили шаг.

    Reply
  60. roman_zzz

    сорри, все уже заработало — нехватало параметров, хотя в ХР все работало и так!

    Reply
  61. abc2000

    А с бухгалтерией 7.7 Базовой будет эта штука работать или она только для Проф?

    Reply
  62. Alex_1066

    Нормальная штука… Сделано то, что 1С в своё время не сделала…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *