1с как обновить расширение программно
С развитием платформы 1с всё чаще для изменения типовых конфигураций используют расширения.
Я постарался добавить в обновлятор все необходимые возможности для их администрирования (при необходимости сразу в группе баз), в том числе обновление из хранилища, а также операции с расширениями по расписанию.
Меню управления расширениями для базы можно найти сразу в нескольких местах:
Вот как выглядит сам диалог для администрирования расширений:
Посмотрим его в действии.
Я покажу всё на примере одной базы, но вы знайте - можно проделывать то же самое сразу для нужного количества баз (выделив их через Ctrl или отметив галками).
Перед нами типовая бухгалтерия 3.0 без установленных расширений:
Добавляем новое расширение
В диалоге администрирования расширений переходим на закладку "Добавить" и указываем файл с расширением, уточнив его настройки (безопасный режим, защита от опасных действий и так далее):
Выводим уже добавленные расширения
Переходим на закладку "Вывести", чтобы получить список расширений (вместе с их свойствами), которые уже добавлены в базу:
Проверяем работоспособность (применимость) добавленных расширений
Это можно сделать сразу для всех расширений запустив операцию на закладке "Проверить":
И если расширение содержит ошибки - мы увидим их в отчёте обновлятора.
Обновляем уже существующее расширение
Предположим, вышла новая версия расширения и его нужно обновить в базе (записать поверх существующего).
В этом нам поможет закладка "Обновить".
Из файла
Я указал файл с новой версией расширения и указал имя уже существующего расширения в конфигураторе ("ПисьмоВПоддержку").
Это имя необходимо, чтобы обновлятор смог найти уже существующее расширение в базе и загрузить в него новую версию из файла.
Часто оно совпадает с именем файла из которого мы загружаем расширение. Но так бывает не всегда.
Чтобы узнать имя расширения наверняка - зайдём в конфигуратор после его установки:
Вот его имя: "ПисьмоВПоддержку".
Причём если мы не выбираем конкретные значения опций (например, оставляем закрашенными синим цветом "Безопасный режим", "Защита от опасных действий" и так далее), то они не меняются при обновлении расширения (остаются как были до обновления).
Из хранилища
При этом есть нюансы в зависимости от того подключено ли расширение в обновляемой рабочей (продуктовой) базе к хранилищу или нет.
Расширение НЕ подключено к хранилищу
Это самый желательный вариант, который позволит вам не беспокоиться о конфликте пользователей хранилища между собой.
А также даст вам возможность обновляться из хранилища не только на последнюю версию конфигурации, но и на любую необходимую (заполнив поле "Версия", об этом ниже).
Расширение подключено к хранилищу
Тогда оно должно быть подключено под тем же пользователем, которого вы указываете в обновляторе для доступа к хранилищу.
Причём в этом случае пользователь должен быть уникальным, то есть не использоваться для подключения этого же расширения в других базах.
Внимание! Чтобы обойти это ограничение вы можете параметризовать имя пользователя хранилища. Для этого укажите значение "%base_name%" (вместо "updater" у нас в примере). В этом случае при выполнении скрипта в качестве имени пользователя хранилища будет подставляться имя базы в обновляторе (наша задача предварительно создать пользователей с такими именами в хранилище).
Стоит также учитывать, что при этом варианте обновление всегда будет происходить на последнюю версию конфигурации в хранилище, даже если вы заполните поле "Версия" (о нём рассказывается ниже).
Именно поэтому я рекомендую держать расширение подключенным к хранилищу только в базах для разработки, а рабочие (продуктовые) базы к хранилищу не подключать.
Это поле отвечает за номер версии конфигурации расширения из хранилища, которую мы получаем.
Если оставить его пустым, то всегда будем получать актуальную (последнюю) версию конфигурации расширения из хранилища.
Не нужно путать эту версию с версией самого расширения. Речь идёт вот об этой колонке:
Внимание. Заполнять поле "версия" имеет смысл только в том случае, если обновляемое расширение не подключено к хранилищу. Если оно подключено к хранилищу, то будем всегда получать актуальную версию несмотря на настройки.
Выгружаем все расширения во внешнюю папку
Обновлятор может легко выгружать все (или конкретное) имеющиеся в базе расширения во внешнюю папку в виде отдельных файлов:
В нашем случае результат будет таким:
В xml-файле сохраняются все настройки расширения в базе (безопасный режим, защита от опасных действий и так далее).
Загружаем все расширения из внешней папки
Все выгруженные расширения (вместе с их настройками) можно легко загрузить назад в ту же или в другую базу:
Удаляем существующее расширение
Удалим расширение с именем "ПисьмоВПоддержку":
Выполняем эти же операции по расписанию
Мы также можем настроить запуск любой из перечисленных выше операций по расписанию для нужных нам баз.
Предположим, что нам требуется обновлять расширение с именем "ПисьмоВПоддержку" из хранилища в 3 базах каждую ночь.
Для этого переходим на закладку "Скрипты" в главном окне обновлятора:
Из шаблонов открываем диалог "Управление расширениями" и настраиваем его для обновления нужного расширения из хранилища:
Нажимаем на кнопку "Обновить. " и в редактор вставляется текст скрипта с нужными параметрами:
Внимание! Обычно для каждой базы в хранилище создают отдельного пользователя. Сейчас в скрипте мы указали одного и того же пользователя с именем "updater", но ничего не мешает нам параметризовать это имя и выбрать, например, из параметров скрипта значение "%base_name%". В этом случае при выполнении скрипта в качестве имени пользователя хранилища будет подставляться имя базы в обновляторе (наша задача предварительно создать пользователей с такими именами в хранилище).
Сохраняем скрипт (кнопка "Сохранить" на нижней панеле):
Далее в настройки программы, кнопка "Расписание":
Здесь создаём новую задачу с типом операции "Запуск скрипта" и выбираем файл с нашим скриптом ("x:\work\update_extension.cmd"):
Настраиваем и сохраняем остальные параметры задачи:
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
На днях вышла тестовая Бухгалтерия Предприятия с отключенным режимом совместимости с платформой 8.3.6.
А значит в этой версии используется новый движок, который по-новому отрисовывает формы.
Прочитать про это можно в Вместе с типовыми на новую платформу следует переделывать и свои расширения.
В процессе перевода сформировал для себя небольшой чек-лист или памятку о том, что нужно сделать.
Памятка:
1. Переводим расширение на новую платформу
Для этого следует привести режим совместимости расширения к режиму совместимости конфигурации.
В версии Бухгалтерия Предприятия установлены следующие свойства:
В расширении можно установить точно такие же свойства или снять все флажки.
Отсутствие флажков означает, что расширение не будет проверять эти свойства при подключении.
То если эти свойства изменятся в основной конфигурации, то расширение все равно запуститься:
2. Устраняем проблемы подключения
Для этого запускаем конфигурацию в режиме предприятия и смотрим взлетело или нет.
Ошибки, из-за которых не удалось подключить расширение, можно посмотреть в журнале регистрации
(Администрирование - Поддержка и обслуживание - Журнал регистрации)
Нас интересуют события - “Сеанс. Ошибка применения расширения конфигурации”:
Чаще всего проблема подключения решается удалением лишнего реквизита или объекта.
Основная сложность в том, что расширение не выдает сразу все ошибки (кстати, эта
3. Обновляем формы в расширении
Для этого в каждой измененной форме нажимаем на “Обновить расширение формы”
С помощью этой команды мы заново подгружаем форму основной конфигурации в расширение.
В принципе работать будет и без этого, но это нужно для того, чтобы в расширении форма выглядела также как и в основной конфигурации.
В версии 3.0.44 практически все формы подверглись изменениям, поэтому хорошо бы и в расширение подтянуть эти изменения.
4. Приводим форму к правилам нового движка.
- Убираем все декорации, которые использовались для отступов.
Вместо них теперь используются группы. - Смотрим, что все выглядит хорошо.
Если что-то пошло не так, то смотрим статью.
Если все хорошо, то двигаемся дальше. - Проверяем новые свойства платформы “Объединенная”, “АвтомаксимальнаяШирина” и “АвтомаксимальнаяВысота”.
Просто смотрим, что в этих свойства установлены умолчания платформы и форма из-за этого не разъезжается.
5. Проверяем расширение в режиме предприятия
Запускаем конфигурацию и радуемся тому, что все стало хорошо.
Полезные материалы по теме:
Специальные предложения
(2) Alex_E, это я-то не умею? Смешно. Я одним из первых, смею надеяться, занялся глубоким и всесторонним изучением этого уродства. Ибо наивно полагал, что какая-то польза всё ж будет. А потом я, знаешь ли, даже публикацию накатал о некоторых нюансах расширений. А потом эксплуатация показала, что более кривой и ненадёжной хрени в 1С трудно отыскать. И я вынужден был у трёх клиентов отказаться от расширений и перейти к нормальной куроченной конфе. И это было хотя бы прозрачно, однозначно и стабильно.
Так что всем минуснувшим мою реплику - ребятки, вы просто ещё не встали как следует на эти грабли. Встанете - будет вам урок)
(7) Yashazz, Я не минусовал, расширения использую со дня их появления, публикации то же есть, с что нравится и что нет на тот момент, и ни в одной конторе, где их использовал не отказался - вот такие мы разные, прикинь :-) (и во всех бухгалтериях сразу ставлю отключение регламента и пр. через расширение сразу - закрывать всякие окошки с "а Вы знаете. " хотца нет :-) Это пустяк, конечно, но решается через расширение на счет раз) (8) Alex_E, а что Вы будите делать, когда вызов открытия этих окошек переедет в другой модуль?т.к. при обновлении Вы проблем не знаете, то Вы даже не узнаете, что эти вызовы исчезли в одном модуле и появились в другом. (9) monkbest, вообще-то это вызовет ошибку - 1С таки бейсик - компилируется по мере открытия. А вы в продакшн без тестирование всё вываливаете? Я вот проверять пытаюсь. (1) Yashazz, с каждой версией платформы они расширяют возможности этого механизма, как по мне, это явно лучше чем "ломать" конфигурацию. (3) Solovyeff, пока не будет возможности переопределять любые модули и добавлять свои модули, к сожалению только расширениями не всегда можно обойтись (4) baracuda, в 8.3.9 реализовано, осталось подождать выхода версии платформы. (1) прошло 5 лет, все поменялось. Вы бы подписались сегодня пож этими словами? (13) Однозначно подписался бы. Я уже давно махнул рукой и не коллекционирую баги расширений, но они всё столь же грубые, критичные и опасные, даже ещё хуже кое-где стало. В некоторых случаях падают Предприятие или Конфигуратор, в некоторых теряются или искажаются данные, а уж мелких милых косячков не счесть. Я ж постоянно с расширениями дело имею, к сожалению. Я ж постоянно с расширениями дело имею, к сожалению. Так баги не только из-за них - в самой платформе их тоже хватает. Но расширения помогают быстро "и без дополнительной возни в гиперпространстве" сделать простые и нужные штуковины, не особо напрягаясь. Так что, имхо, Вы тут зря мнение не поменяли. Видел ситуации, когда даже внешняя обработка приводила к падению системы - я вот их использую, и расширения (хоть и меньше). Что, от обоих отказаться и только в конфигураторе пилить? )))
(15) С внешками даже после замутов с профилями безопасности и "защитой от опасных действий" на порядок меньше проблем и больше стабильности, чем с расширениями. А расширения - моё мнение такое: если надо слегка изменить/добавить форму, то можно. Во всех остальных случаях - ни-ни.
Из недавнего: делаю я, значит, расширение для БП, в рамках общеизвестного 534 новые СчФ и УПД. Заимствую из конфы макет 1137, и макет 981. Дорабатываю код. Запускаю: макет 981 видит, про 1137 говорит, что такого нету. Вот нет такого общего макета, совсем. Метод "ПолучитьОбщийМакет" даёт невосстановимую ошибку. Ладно, работаю с тем, что есть. Спустя часа полтора работы понадобилось мне обновить в расширении 981-й, жму "Добавить в расширение", он меня спрашивает, обновить ли в расширении, иии. и конфигуратор тихо рушится. Ситуация воссоздаваемая, пятый раз я ронял конфигуратор, уже показывая этот "эффект" в Энидеске заказчику, который спросил, фигли так долго.
Кончилось тем, что тупо добавил в расширении свои макеты-копии типовых. И что, это называется стабильная работа? Когда бишь макеты-то в расширениях появились. Ладно, я молчу, что мало кто копал, как именно они "расширяются" и как себя ведёт наследование а) именованных областей, б) примечаний, в) внедрённых объектов, типа компоненты штрихкода, г) элементов управления. Да, мало кто это знает.
Но сам факт таких косяков, и невозможности выполнить вроде бы простую и давно якобы работающую операцию - характеризует.
Один раз с этим столкнулся - просто просят иногда ерундой страдануть. Там очень древняя УТ (10.3.27, сейчас вроде уже 90-я). Да, в таком случае просто скопировал макет, добавил в него строку с документом реализации и поправил колонки (очень классное сочетание клавиш Ctrl + M - пользуйтесь) - 10 минут дел в конфигураторе, + 3 минуты на условие 01-07-2021. Скука ))(17) Мне ещё параллельно надо было другие старые доработки сохранить, они ранее были в ВПФ, меня попросили, раз уж так, загнать всё в расширение. Там слегка нетипично второстепенные поля СчФ формируются, основная фишка вообще не в макетах была.
Ах да, у заимствованных макетов не все изменения свойств объединённых ячеек применяются. А иногда она в конфигураторе объединённая, а в предприятии оказывается первая-одиночная, и спасает только программно Объединить() ещё раз. От так.
Наверное, не открою Америки, если скажу, что большую часть своего времени программист 1с тратит на обновление конфигураций. Хорошо, если это – типовые конфигурации. А как быть, если конфигурации были доработаны под потребности клиента? Проще, когда ты сам знаешь специфику клиента, особенности учета и сам дорабатывал конфигурацию. А если нет? В нашей стране не обновлять конфигурации 1с нельзя! Постоянно меняются формы документов, отчетность. Проблему представляет случай, когда доработка конфигурации затрагивает типовой функционал. До недавнего времени, не существовало способа разделить конфигурацию на постоянную и обновляемую части. К счастью, прогресс не стоит на месте, и в фирме «1С» наконец- то сделали расширение конфигурации. Начиная с версии 8.3.9 платформы, появилась возможность переопределять процедуры и функции типового решения, не снимая замка с конфигурации. В расширении можно вводить свои процедуры и функции. Но как быть, если у Вас уже есть работающая конфигурация. Клиента она полностью устраивает. Проблемы возникают у Вас, когда необходимо ее обновить. Открываются несколько сравнений /объединений конфигурации, тратится драгоценное время. Цирк повторяется по мере выхода очередного релиза. Мы сделали попытку помочь программисту упростить поддержку таких измененных конфигураций. Идея в том, чтобы разделить конфигурацию на две части. Первая будет максимально приближена к конфигурации поставщика. Обновление такой конфигурации будет проходить намного проще и безопаснее. Вторая часть будет содержать специфику текущей конфигурации, отличие от конфигурации поставщика, оформленное в виде расширения . Итак, вот наш легкий способ сделать труд программиста комфортнее:
На сервисе вы можете загрузить свою конфигурацию и получить файлы расширения конфигурации, содержащие Вашу специфику, и файл настроек объединения с конфигурацией поставщика. Там же Вы можете посмотреть подробное описание Ваших действий. На данный момент, сервис бесплатный. В дальнейшем, мы планируем платную подписку на наши услуги.
Как делаются расширения:
В качестве примера, рассмотрим адаптацию конфигурации Бухгалтерия предприятия КОРП, редакция 3.0. Предположим, мы внесли изменения в общий модуль "УчетНДС"
Этот модуль (частично) в исходной конфигурации имеет вид:
Первая функция была изменена, а второй, - нет в конфигурации поставщика.
Теперь, рассмотрим, что же получится в результате работы сервиса.
Расширение
Одновременно, делается файл настроек сравнения/объединения с конфигурацией поставщика, который позволит привести данный модуль к типовому виду .
Модифицированная конфигурация = типовая конфигурация
Таким образом, Вам гораздо проще будет обновлять конфигурацию, без риска затереть свои наработки.
С недавних пор, в расширении появилось возможность создавать собственные объекты метаданных. В версии 8.3.11 уже можно создавать собственные Справочники, Документы, Регистры Сведений. В нашем случае, мы не применяем данные возможности. Это связано с тем, что нашей конечной целью служит упрощение обновления конфигурации. Добавленные объекты не усложняют процесс обновления, поэтому мы не переносим их целиком как собственные объекты расширения. Кроме того, при удалении расширения, данные собственных объектов расширения теряются. Поэтому, по соображениям безопасности, мы не используем расширения данных и возможности 8.3.11+ версия платформы.
Мы предлагаем Вам самим оценить все удобства нашего сервиса! Мы открыты к Вашим конструктивным предложениям.
Перед отправкой файла конфигурации мы просим убедиться, что у Вас:
- Используется платформа не ниже 8.3.9
- Конфигурация находится на поддержке.
- Для конфигурации установлен режим совместимости платформы не ниже 8.3.9
- Версия конфигурации поставщика = версия основной конфигурации.
Причины купить
- Не вызывает привыкания
- Не зависит от степени сложности Ваших доработок
- Применяете один раз, пользуетесь постоянно.
- Избавляет от рутины
Достоинства
Сервис по созданию расширения конфигурации.
База обрабатывается только один раз, дальнейшие обновления базы делаются намного проще!
Всем привет. Имеем некую конфу. В ней - некий общий реквизит.
Подключено расширение. В расширении на формы объектов выводится в том числе тот самый реквизит.
Далее. Произошло обновление конфы, в результате чего состав общего реквизита был изменен. Теперь мне надо обновить состав общего реквизита в расширении и вытащить на формах этот самый общий реквизит там (в формах тех объектов), где он теперь присутствует после обновления.
Ищу в расширении у общего реквизита заветную кнопку "Обновить расширение" - и не могу найти. Открыл в расширении карточку состава общего реквизита. Ищу заветную кнопку. Нету.
Что же, увеличивать состав общего реквизита в расширении вручную, мышкой тыкая в составе в каждый объект, в котором теперь этот реквизит используется?
Или. ?
Вот я и спрашиваю: обновление в расширении автоматизировано таким же образом, как это работает, например, с обновлением в расширении заимствованных форм? Или же следует открыть в расширении состав общего реквизита и вручную по одному добавлять в состав мышкой те документы, которые были туда добавлены.
В режиме предприятие - да. В конфигураторе - нет.
Если посмотреть внимательно, то можно заметить, что в конфигураторе на скриншоте у основного реквизита ("Объект") заимствованной формы документа Документ2 в расширении нет реквизита ОбщийРеквизит1, хотя после "обновления" конфигурации Документ2 уже присутствует в составе объектов, для которых включено использование этого общего реквизита.
Это значит, что хотя в режиме предприятие в итоге у Объект'а (основного реквизита формы документа Документ2) уже будет среди реквизитов ОбщийРеквизит1, в режиме конфигуратора вытащить этот реквизит на форму не получится. В этом-то и сабж.
Поэтому все же надо как-то обновить состав общего реквизита в расширении. Тем более надо было бы, если бы для состава была включена проверка значения при подключении. Само оно не подтянется. Следовательно, либо мы нажимаем кнопку автоматического обновления в расширении всех свойств общего реквизита (в т.ч. состава) - если, конечно, такая кнопка существует, либо мы пыркаем каждый документ, добавленный в состав, вручную мышкой.
Читайте также: