Предисловие
Когда руководитель предложил мне обновить нашу УТ 11 на актуальный релиз – мне стало немного страшно. Три программиста три года пилили эту конфигурацию, чтобы двести спартанцев активных пользователей ежедневно в восьми часовых поясах, сменяясь и смеясь, могли собирать свои бесценные сокровища. Потом я вспомнил про замечательную фирму ИжТиСи, где шесть лет назад быстрый и надежный робот недорого обновлял всех нуждающихся. Координаты нашел на сайте, договорились, выслали копию нашей конфигурации. Нам составили смету с учетом наших доработок. Переход с 11.4.2 на 11.4.8 оценили 544 тысячи рублей, длительность работ – 108 рабочих дней. При этом со стороны заказчика остается постановка задач, настройка прав и RLS, тестирование и прочая-прочая. Взвесив все за и против, решили делать самостоятельно. Статью написал по итогам работы. Сроки работы получились примерно те же, но обновления происходили постепенно, каждые две недели – новый релиз. Я считаю, что это положительный момент: пользователи привыкали, ошибки возникали постепенно – их получалось решать оперативно. Согласитесь, что две ошибки в день исправить более реально, чем двадцать. Нам удалось организовать процесс непрерывного обновления, идущий параллельно с разработкой нового функционала.
Соглашения и определения
Дважды-измененные объекты (11) – это объекты на поддержке с возможностью изменения. В них когда-то были внесены доработки, теперь нужно добавить обновление от производителя конфигурации. Для краткости будем писать 2Измененные.
Обновление конфигурации базы данных из хранилища будем называть «актуализация», чтобы не смешивать термины.
База данных 2Измененных. Связана с хранилищем. Регламентные задания всегда отключены.
База данных Кандидат. Не связана с хранилищем, но можно актуализировать из хранилища. Регламентные задания всегда отключены.
Рабочая база данных. Не связана с хранилищем, но можно актуализировать из хранилища. (Обычно рабочая база данных связана с хранилищем постоянно, но наш вариант более гибкий).
К хранилищу подключены базы других программистов, которые непрерывно ведут свои разработки. Если Вы – единственный программист, то Вам не нужно ни хранилище, ни эта статья.
Подготовка
Переход к следующему релизу начинается с исправления ошибок предыдущего обновления. Слушаем пользователей, смотрим журнал регистрации, технологический журнал – события EXCP, ERR. Радуемся жизни и каждой выявленной ошибке. Цель – убрать все значимые ошибки. Если для вас это недостижимо – не начинайте обновления.
Если пользователям кажется, что вы часто ошибаетесь – покажите им баг лист с сайта 1С (тот, где более ста неисправленных ошибок).
Не берите на себя повышенных обязательств, обещайте что ошибки обязательно будут.
При возможности ставьте объекты на поддержку – в платформе 8.3.12 это удобно реализовано.
План перехода (рисунок)
Каждой фиолетовой стрелочке соответствует две недели моей жизни.
Список дважды измененных
Актуализируем конфигурации баз данных 2Измененных, Кандидат из хранилища. В базе данных Кандидат открываем окно обновления на новый релиз, выводим список дважды обновленных объектов (11), перемещаемся по нему по мере обработки (12). В списке видим измененные модули и реквизиты. Берем честное слово с других программистов, что они ничего не снимут с поддержки без уведомления или захватываем корень хранилища, если честное слово не работает. (Вспомнилась формула: Доброе слово плюс пистолет больше чем доброе слово). Таким образом, список объектов не дополняется. Список дважды измененных объектов может давать неверную информацию, смотрите комментарий №29, kosmo0. Но я считаю, что этот инструмент заслуживает доверия, вероятность ошибки находится на приемлемом уровне. Возможно, если бы я работал на АЭС, носил свинцовые шорты и шапочку из двойной фольги – думал бы иначе.
Обновление модуля (рисунок)
База 2Измененных
В базе 2Измененных для каждого объекта вносим изменения. Используем внешние программы сравнения. Удобно сравнивать три модуля: модуль рабочей конфигурации (13), модуль текущей конфигурации поставщика (14) (является общим предком), модуль будущей конфигурации поставщика (15). Результат слияния (обновления) модулей получается с помощью автоматической обработки, которая есть в некоторых программах сравнения (смотрите обзор).
Перед чтением модуля происходит захват в хранилище (16). Это обеспечивает актуальную версию модуля и не разрешает другим программистам изменять модуль после обновления.
Полученная конфигурация не содержит новые объекты, модули, типы данных и прочее — поэтому сообщения о синтаксических ошибках являются нормой, база 2Измененных не запускается в режиме Предприятие. Недостающие типы данных нужно контролировать отдельно. Если есть изменения поставщика, затрагивающие объекты, не находящиеся на поддержке – такие объекты также захватываем и изменяем. После обработки всех объектов, в базе 2Измененных запускаем актуализацию конфигурации из хранилища – получаем изменения коллег. Конфигурацию базы 2Измененных сохраняем в файл.
База Кандидат
Как правило, в базу — Кандидат напрямую изменений не вносим. Обновляем базу Кандидат на новый релиз. Основную конфигурацию сохраняем, но не применяем в конфигурацию базы данных. Выполняем сравнение – объединение с конфигурацией базы 2Измененных – получаем измененные объекты (кроме объектов на поддержке, которые находятся в режиме только чтение). После сравнения-объединения запускаем в режиме Предприятие. Происходят обработки обновления при первом запуске.
Проверки обновления
В базе Кандидат выполняем проверки конфигурации. Запускаем в режиме Предприятие. Ждем завершения регламентных процедур, переходим по надписи «Обновление не завершено», устанавливаем Приоритет работы программы, 8 потоков. Запускаем регламентное задание «Отложенное обновление». До 2025 года регламентное задание нужно было запускать вручную много раз (или разблокировать регламентные задания), не было многопоточного обновления.
После завершения обновления запускаем обработку автоматической проверки. Отдаем базу данных Кандидат на проверку тестировщикам. Проверка происходит по списку. Если найдена ошибка в базе — Кандидат, то исправляем ее в базе 2Измененных, потом исправленную конфигурацию объединяем в базу – кандидат. Причем, в базе – Кандидат в окне сравнения -объединения может быть много изменений. Сравнение основной конфигурации и конфигурации данных покажет только то, что действительно изменилось. После исправления ошибки, пункт списка тестируем повторно.
Возможные ошибки и проблемы
Может переполниться хранилище. «Ошибка при попытке помещения объекта в хранилище конфигурации. по причине: Превышен максимально допустимый размер внутреннего файла». Эта ошибка у меня встречалась дважды при переходе от УТ 11.4.1 до 11.4.9. В окне истории хранилища нужно выполнить команду «Сократить до версии». Ошибка решается быстро, если Вы администратор хранилища )).
Один раз у меня очистились ссылки из-за того, что изменился тип поля. Это был регистр сведений (на поддержке) Присоединенные файлы ЭД. Перенес из архивной копии с помощью xml. Если овладеть искусством переноса данных из одной базы в другую — многое становится легче.
Как правило, если в рабочей базе появлялась ошибка – значит, в ней есть отклонения от конфигурации базы — Кандидат.
При переходе от 11.4.7 на 11.4.9 разработчики внесли многочисленные изменения:
ОбщиеФормы — ФормаОтчета. Все внешние отчеты, форма которых была копирована из конфигурации пришлось переделывать.
Учет времени APDEX. Перестал учитываться по отчетам, в варианте которых не заполнено поле Предопределенный вариант.
Подсистема «Бизнес статистика». Информация о действиях и компьютерах пользователей собирается в регистр. Возможно, это полезно для фирмы 1С, но у нас за месяц этот регистр вырос на 2 млн. записей (!!), поэтому для нас это не полезно.
Объекты, которые необходимо обработать при первом запуске программы, (после 2025 года) регистрируются в плане обмена «ОбновлениеИнформационнойБазы». Поэтому для того, чтобы отменить их обработку, можно выбрать на форме Узел, соответствующий порядку очереди и выполнить (на сервере) ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Неопределено);
Приложение 1. Длительность работ по дням и часам
У нас обновления проходят спринтами, 10 рабочих дней. Подготовка 4 дня, создание базы – Кандидат 3 дня, проверки – 2 дня, обновление рабочей базы – 1 день (пятница):
12-00 База 2Измененных
Захватить корень конфигурации, рекурсивно.
Сохранить конфигурацию 2Измененных в файл
13-00 База Кандидат
Сохранить конфигурацию Кандидат в файл
Объединить сравнением с конфигурацией 2Измененных
(Получаем последние изменения хранилища)
Проверить изменения относительно сохраненной конфигурации
13-00 База 2Измененных
Конфигурация — Поддержка — Обновить конфигурацию. (Настройки по умолчанию.)
НЕ сохранять конфигурацию данных, но сохранить основную конфигурацию.
Сохранить конфигурацию 2Измененных
16-00 База 2Измененных
Объединить сравнением с конфигурацией Кандидат.
Поместить изменения в хранилище.
18-00 Переход от рабочего компьютера к домашнему ))
19-00 Рабочая база данных
Проверить существование бэкапов.
Отключить рестарт службы 1С (если он настроен)
19-00 Выгрузить конфигурацию до обновления, расширение до обновления
19-30 Получить из хранилища конфигурацию
20-00 Блокировать вход и регламентные задания.
Остановить регистрацию по планам обменов (если есть).
Отключить замеры производительности
20-10 Применить новую конфигурацию, запустить 1С Предприятие
21-00 Дождаться окончания запуска
Установить 8 потоков, приоритет — фоновые задания.
Запустить задание "Отложенное обновление"
22-00 дождаться выполнение регламентных заданий
Запустить регистрацию по планам обменов.
Включить замеры производительности.
Разблокировать вход и регламентные задания.
Приложение 2. План тестирования нового релиза УТ
Автоматический режим
- Для всех Документов, проведение существующего (автоматически);
- Для всех Справочников запись существующего(автоматически);
- Открыть формы существующих объектов, списков, новые формы для Справочников, Документов, Отчетов, Обработок (автоматически).
Ручной режим
- Создание Клиента, Контрагента
- Создание взаимодействий с клиентами (Телефонный звонок, Встреча и прочее)
- Создание Коммерческого предложения;
- Создание элемента справочника Сделка с клиентом (до Заказа с клиентом);
- Создание соглашения, договора;
- Создание Заказа клиента + Создание документа Счет на оплату (пользуются некоторые)
- Поступление денежных средств от клиента: безнал + ПКО+ Эквайринговая операция
- Реализация товара (печать)+Расходный ордер склад (создание на основании)+ Счет фактура (печать)
- Доверенности
- Заявка на возврат товара + Возврат товара от клиента + РКО/Эквайринг/Списание безналичных денежных средств на возврат клиенту;
- Корректировка реализации + корректировочной счет-фактуры;
- Закрытие и открытие кассовой смены;
- ПКО /РКО с операцией передача в другую кассу;
- РКО с операцией прочий расход;
- Зачет денег по заказу клиента;
- Заявка на транспорт, Задание на перевозку, Заявка на сервис;
- Установка цен номенклатуры;
- Заказ поставщику + Приобретение товаров и услуг + Приходный ордер (создание на основании) + Счет-фактура;
- Создание документа Взаимозачет
- Пересчет товаров + создание Инвентаризационной описи + Оприходование товаров + Списание товаров
- Пересортица товаров;
- Заказ на внутреннее потребление + списание на расходы;
- Заказ на сборку +Сборка товаров (сборка/ разборка) + Расходный ордер + Приходный ордер
- Создание номенклатуры + Создание складского состава или упаковок;
- Заказ на перемещение + Перемещение товаров + Расходный ордер + Приходный ордер
- Создание документа списание задолженности клиента;
- Создание документа Согласование уценки;
- Ордер на отражение порчи + порча товаров (создание позиций с новым качеством Годен/Не годен)
- Претензия + Исправление брака (документ)
- Тестирование рабочего места Приемка и Отгрузка (создание расходных и приходных ордеров)
- Листы кассовой книги, Отчет Кассовая книга
- Создание документов Передача товаров между организациями по Интеркампани;
- Документ итоги по закрытым заказам
Благодарности
Благодарю своих коллег, которые принимали прямое участие в проекте и без которых бы ничего не получилось:
Андрей (Князь ИТ)
Андрей (Маг 1С)
Варвара (Фея)
Дарья (Фея)
Евгений (Князь Князей ИТ)
Евгений (Князь ИТ)
Евгения (Маг 1С)
Ирина (Фея)
Сергей (Маг SQL)
Related Posts
- Получение логина и пароля техподдержки 1С из базы
- Класс для вывода отчета в Excel
- Счет-фактура для УПП
- Библиотека классов для создания внешней компоненты 1С на C#
- Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
- Прайс-лист с артикулом в отдельной колонке
как у вас так быстро рег задания отрабатывают, обновление данных первичных документов помню покоя не давало. Бесконечно крутилось такое чувство
(1) Здравствуйте !
Объем обновления данных при первом запуске изменяется от релиза к релизу.
За историю перехода от 11.4.1 до 11.4.9 два раза это время было больше 8 часов.
Обновление начиналось в 22-00 мск, Владивосток заметил.
Хорошо, что пользователи отнеслись с пониманием. Утро субботы.
Почему нельзя было сразу на последний релиз обновиться? Зачем проделывать 80% одной и той же работы на каждом релизе?
(3) Здравствуйте !
Если пользователей мало — можно установить новую базу и перенести данные, доработки.
У нас более 200 пользователей, поэтому все нужно делать аккуратно, возникающие ошибки приписывать производителю конфигурации УТ — фирме 1С.
При обновлении 1С производит обработку данных, по много часов. Пропустить несколько релизов, сделать свои обработки — затруднительно.
Спасибо за статью — интересные идеи
1) как вы оцениваете оценку обновления в миллион по сравнению с затраченными ресурсами? Завышена/занижена?
2) как вы успеваете перенести все доработки за 3 дня? Изменений / пересечений не так много?
3) насколько активно используются расширения? Какие изменения решили оставлять в основной конфигурации (хотя их можно было бы делать в расширениях)
4) в процессе обновления скорей всего находились ошибки разработчиков или появлялось желание все переделать — можете поделиться ключевыми? (Про форму отчета увидел)
5) почему решили обновиться на актуальный релиз? Будете ли проводить обновления дальше с выходами релизов или будете накапливать какую-то критическую массу изменений
(5) Здравствуйте !
1. Оценка ИжТиСи завышена на 20-30%. Наши затраты составили стоимость труда программиста за 4 месяца + промышленная эксплуатация + тестирование со стороны заказчика + затраты на менеджмент (администрирование). Но последние два пункта не входят в смету ИжТиСи.
https://infostart.ru/public/1058730/
2. Тексты модулей обновляем внешней программой, используя слияние в общий предок. Модуль в 10 тысяч строк обновляется 10 секунд, если нет конфликтов (участков кода, которые поменяли 1С и мы). Общие модули и модули форм обновляем за 2 дня, потом добавляем реквизиты. Количество пересечений (2Измененных модулей) можно оценить по слайду
3. У нас слишком много кода вынесено в расширение — не было плана развития программы. Расширение приходилось менять (обновлять), если изменились наименования модулей (реквизитов). Как правило, в расширение выносят только неизмененные в конфигурации объекты. Исключения — реже. Например, наш локальный объект (без модуля и форм) можно включить в расширение, чтобы он попал в интерфейс.
4. Про доработку типовой конфигурации для большого числа пользователей планирую отдельный цикл статей, первая
5. Будем обновляться раз в квартал, чтобы программа не превратилась в «болотце», соответствовала законодательству и могла взаимодействовать с современными программами.
Спасибо за вопросы.
(4) вопрос от (3) задают все пользователи, которые платят за обновления, и интересует многих внедренцев 1с…
…Сажая промежуточный релиз , вы уже знаете заранее, что он содержит ошибки, которые уже исправлены в следующих релизах… «Почему бы не поставить последний?» — логичный вопрос…
обновление сложной системы сложно описать двумя словами, особенно когда у нас три сложные системы: типовая новая, типовая старая, своя рабочая измененная.
Когда поставил последнюю версию, измененных объектов оказалось условно говоря 1000 штук, и стало сложно управлять обновлением.
После этого поставил ближайший релиз к рабочей базе — изменений стало в разы меньше, большинство из них собственные доработки, с которыми знаком… Управлять обновлением сало легко.
И так шаг за шагом, обновляя на ближайший промежуточный релиз — доработанная база приобрела в своем составе механизмы последнего релиза….
Удивительно бессмысленная трата ресурсов работодателем.
(8) Здравствуйте ! Отвечу стихотворением И.Бродского
Не выходи из комнаты, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно все, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.
О, не выходи из комнаты, не вызывай мотора.
Потому что пространство сделано из коридора
и кончается счетчиком. А если войдет живая
милка, пасть разевая, выгони не раздевая.
Не выходи из комнаты; считай, что тебя продуло.
Что интересней на свете стены и стула?
Зачем выходить оттуда, куда вернешься вечером
таким же, каким ты был, тем более — изувеченным?
О, не выходи из комнаты. Танцуй, поймав, боссанову
в пальто на голое тело, в туфлях на босу ногу.
В прихожей пахнет капустой и мазью лыжной.
Ты написал много букв; еще одна будет лишней.
Не выходи из комнаты. О, пускай только комната
догадывается, как ты выглядишь. И вообще инкогнито
эрго сум, как заметила форме в сердцах субстанция.
Не выходи из комнаты! На улице, чай, не Франция.
Не будь дураком! Будь тем, чем другие не были.
Не выходи из комнаты! То есть дай волю мебели,
слейся лицом с обоями. Запрись и забаррикадируйся
шкафом от хроноса, космоса, эроса, расы, вируса.
Спасибо за статью, интересно.
Хорошо, конечно, что так мало операций у пользователей, и все они внутри базы, а как быть с тестированием в копии базы функционала обмена или интеграции с внешними системами? Ведь если запускаешь обмен данными, то он должен быть непременно в рабочей базе, потому что во внешнюю систему должны уйти нужные достоверные не тестовые данные, и вернутся тоже измененные объекты. Это, например, касается всяческих систем маркировки.
(10) Здравствуйте !
Мне повезло участвовать в становлении ЕГАИС в крупнейшей алкогольной компании Северо-Запада (ФПК). Использовали тестовый контур, а в рабочем — делали на аффилированные фирмы тестовые накладные, которые можно было легко вернуть. Перед отправкой сообщения можно просматривать в xml. Если посылать продажи, которых нет на остатке — ФАС вернет отказ, ничего страшного.
В общем, с внешними программами есть свои сложности, но работать можно.
(12) Здравствуйте, Ирина !
Совместный проект у нас не получился,
но осталось обоюдное хорошее впечатление.
:-))