Когда руководитель предложил мне обновить нашу УТ 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Измененных для каждого объекта вносим изменения. Используем внешние программы сравнения. Удобно сравнивать три модуля: модуль рабочей конфигурации (13), модуль текущей конфигурации поставщика (14) (является общим предком), модуль будущей конфигурации поставщика (15). Результат слияния (обновления) модулей получается с помощью автоматической обработки, которая есть в некоторых программах сравнения (смотрите обзор).
Перед чтением модуля происходит захват в хранилище (16). Это обеспечивает актуальную версию модуля и не разрешает другим программистам изменять модуль после обновления.
Полученная конфигурация не содержит новые объекты, модули, типы данных и прочее - поэтому сообщения о синтаксических ошибках являются нормой, база 2Измененных не запускается в режиме Предприятие. Недостающие типы данных нужно контролировать отдельно. Если есть изменения поставщика, затрагивающие объекты, не находящиеся на поддержке – такие объекты также захватываем и изменяем. После обработки всех объектов, в базе 2Измененных запускаем актуализацию конфигурации из хранилища – получаем изменения коллег. Конфигурацию базы 2Измененных иногда сохраняем в архивный файл.
Как правило, в базу - Кандидат напрямую изменений не вносим.
- Обновляем базу Кандидат на новый релиз. Основную конфигурацию сохраняем, но не применяем в конфигурацию базы данных.
- Выполняем сравнение – объединение с конфигурацией базы 2Измененных – получаем измененные объекты (кроме объектов на поддержке, которые находятся в режиме только чтение).
- Просматриваем список измененных реквизитов по статье "Уверенное обновление"
- меню Конфигурация - Проверка модулей и прочие аффторские проверки.
- Устанавливаем в журнале регистрации максимально подробный формат сообщений.
- Запускаем в режиме Предприятие. Происходят обработки обновления при первом запуске.
- Иногда необходимы дополнительные действия: обработать ссылки на переименованные модули, удалить снятые с поддержки объекты... Все записываем в "судовой журнал", чтобы повторить сначала на базе 2Измененных, а затем на Рабочей базе.
В базе Кандидат выполняем проверки конфигурации. Запускаем в режиме Предприятие. Ждем завершения регламентных процедур, переходим по надписи «Обновление не завершено», устанавливаем Приоритет работы программы, 8 потоков. Запускаем регламентное задание «Отложенное обновление». До 2019 года регламентное задание нужно было запускать вручную много раз (или разблокировать регламентные задания), не было многопоточного обновления.
После завершения обновления запускаем обработку автоматической проверки. Отдаем базу данных Кандидат на проверку тестировщикам. Проверка происходит по списку. Если найдена ошибка в базе - Кандидат, то исправляем ее в базе 2Измененных, потом исправленную конфигурацию объединяем в базу – кандидат. Причем, в базе – Кандидат в окне сравнения -объединения может быть много изменений. Сравнение основной конфигурации и конфигурации данных покажет только то, что действительно изменилось. После исправления ошибки, пункт списка тестируем повторно.
Может переполниться хранилище. «Ошибка при попытке помещения объекта в хранилище конфигурации. по причине: Превышен максимально допустимый размер внутреннего файла». Эта ошибка у меня встречалась дважды при переходе от УТ 11.4.1 до 11.4.9. В окне истории хранилища нужно выполнить команду «Сократить до версии». Ошибка решается быстро, если Вы администратор хранилища )).
Один раз у меня очистились ссылки из-за того, что изменился тип поля. Это был регистр сведений (на поддержке) Присоединенные файлы ЭД. Перенес из архивной копии с помощью xml. Если овладеть искусством переноса данных из одной базы в другую - многое становится легче.
Как правило, если в рабочей базе появлялась ошибка – значит, в ней есть отклонения от конфигурации базы - Кандидат.
При переходе от 11.4.7 на 11.4.9 разработчики внесли многочисленные изменения:
ОбщиеФормы - ФормаОтчета. Все внешние отчеты, форма которых была копирована из конфигурации пришлось переделывать.
Учет времени APDEX. Перестал учитываться по отчетам, в варианте которых не заполнено поле Предопределенный вариант.
Подсистема «Бизнес статистика». Информация о действиях и компьютерах пользователей собирается в регистр. Возможно, это полезно для фирмы 1С, но у нас за месяц этот регистр вырос на 2 млн. записей (!!), поэтому для нас это не полезно.
Объекты, которые необходимо обработать при первом запуске программы, (после 2019 года) регистрируются в плане обмена «ОбновлениеИнформационнойБазы». Поэтому для того, чтобы отменить их обработку, можно выбрать на форме Узел, соответствующий порядку очереди и выполнить (на сервере) ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Неопределено);
У нас обновления проходят спринтами, 10 рабочих дней. Подготовка 4 дня, создание базы – Кандидат 3 дня, проверки – 2 дня, обновление рабочей базы – 1 день (пятница):
12-00 База 2Измененных
Захватить корень конфигурации, рекурсивно.
Сохранить конфигурацию 2Измененных в файл (до обновления)
13-00 База 2Измененных
Конфигурация - Поддержка - Обновить конфигурацию. (Настройки по умолчанию.)
НЕ сохранять конфигурацию данных, но сохранить основную конфигурацию.
Сравнить, объединить с конфигурацией 2Измененных (до обновления). Изменить версию в свойствах конфигурации.
Выполнить дополнительные действия, зафиксированные в "судовом журнале"
Сохранить конфигурацию 2Измененных в файл (после обновления)
13-00 База Кандидат
Сохранить конфигурацию Кандидат в файл.
Сравнить конфигурацию с конфигурацией 2Измененных (после обновления).
Если изменения есть - разобраться в причинах.
16-00 База 2Измененных
Поместить изменения в хранилище.
18-00 Переход от рабочего компьютера к домашнему ))
19-00 Рабочая база данных
Проверить существование бэкапов SQL.
Отключить рестарт службы 1С (если он настроен)
19-00 Выгрузить конфигурацию до обновления, расширение до обновления
19-30 Получить из хранилища конфигурацию
20-00 Блокировать вход и регламентные задания.
Остановить регистрацию по планам обменов (если есть).
Отключить замеры производительности
20-10 Применить новую конфигурацию, запустить 1С Предприятие
21-00 Дождаться окончания запуска
Установить 8 потоков, приоритет - фоновые задания.
Запустить задание "Отложенное обновление"
22-00 дождаться выполнение регламентных заданий
Запустить регистрацию по планам обменов.
Включить замеры производительности.
Разблокировать вход и регламентные задания.
Автоматический режим
- Для всех Документов, проведение существующего (автоматически);
- Для всех Справочников запись существующего(автоматически);
- Открыть формы существующих объектов, списков, новые формы для Справочников, Документов, Отчетов, Обработок (автоматически).
Ручной режим
- Создание Клиента, Контрагента
- Создание взаимодействий с клиентами (Телефонный звонок, Встреча и прочее)
- Создание Коммерческого предложения;
- Создание элемента справочника Сделка с клиентом (до Заказа с клиентом);
- Создание соглашения, договора;
- Создание Заказа клиента + Создание документа Счет на оплату (пользуются некоторые)
- Поступление денежных средств от клиента: безнал + ПКО+ Эквайринговая операция
- Реализация товара (печать)+Расходный ордер склад (создание на основании)+ Счет фактура (печать)
- Доверенности
- Заявка на возврат товара + Возврат товара от клиента + РКО/Эквайринг/Списание безналичных денежных средств на возврат клиенту;
- Корректировка реализации + корректировочной счет-фактуры;
- Закрытие и открытие кассовой смены;
- ПКО /РКО с операцией передача в другую кассу;
- РКО с операцией прочий расход;
- Зачет денег по заказу клиента;
- Заявка на транспорт, Задание на перевозку, Заявка на сервис;
- Установка цен номенклатуры;
- Заказ поставщику + Приобретение товаров и услуг + Приходный ордер (создание на основании) + Счет-фактура;
- Создание документа Взаимозачет
- Пересчет товаров + создание Инвентаризационной описи + Оприходование товаров + Списание товаров
- Пересортица товаров;
- Заказ на внутреннее потребление + списание на расходы;
- Заказ на сборку +Сборка товаров (сборка/ разборка) + Расходный ордер + Приходный ордер
- Создание номенклатуры + Создание складского состава или упаковок;
- Заказ на перемещение + Перемещение товаров + Расходный ордер + Приходный ордер
- Создание документа списание задолженности клиента;
- Создание документа Согласование уценки;
- Ордер на отражение порчи + порча товаров (создание позиций с новым качеством Годен/Не годен)
- Претензия + Исправление брака (документ)
- Тестирование рабочего места Приемка и Отгрузка (создание расходных и приходных ордеров)
- Листы кассовой книги, Отчет Кассовая книга
- Создание документов Передача товаров между организациями по Интеркампани;
- Документ итоги по закрытым заказам
Благодарю своих коллег, которые принимали прямое участие в проекте и без которых бы ничего не получилось:
Андрей (Князь ИТ)
Андрей (Маг 1С)
Варвара (Фея)
Дарья (Фея)
Евгений (Князь Князей ИТ)
Евгений (Князь ИТ)
Евгения (Маг 1С)
Ирина (Фея)
Сергей (Маг SQL)