История эта началась в понедельник, день, как известно, тяжелый, но неизбежный, как обновление Windows в разгар презентации. Семен, системный администратор с бородой, в которой можно было спрятать небольшую точку доступа, получил задачу. Маркетингу срочно, вот прям «вчера», потребовалось, чтобы при выгрузке заказов на сайт в XML-файл попадало одно маленькое, но гордое поле: «Дополнительный комментарий менеджера по логистике».
- Плевое дело, - подумал Семен, отхлебывая остывший кофе. - Там же стандартный обмен. Галочку поставил, правила обмена подкрутил, и полетело.
Как же он ошибался. Это было не поле. Это был Фантом.
Семен открыл конфигуратор. 1С:Предприятие смотрело на него своим желто-красным интерфейсом, словно намекая: «Не лезь, она тебя сожрет». Семен, человек опытный, быстро нашел нужную настройку, поставил галочку «Выгружать пользовательские доп. реквизиты», сохранил, обновил конфигурацию БД и нажал «Выполнить обмен».
Файл `orders.xml` упал в папку. Семен открыл его.
Теги были. Заказы были. Даже сумма была.
Тэга <ManagerComment> не было.
- Хм, - сказал Семен. - Кеш?
Он почистил кеш. Не помогло.
Он перезагрузил службу сервера 1С. Не помогло.
Он сплясал с бубном и постучал по системному блоку. Не помогло.
Выяснилось, что стандартная обработка обмена считает это поле недостойным своего внимания, так как оно было добавлено через расширение, написанное программистом, который уволился три года назад и ушел в монастырь (или в DevOps, что почти одно и то же).
Семен составил ТЗ для компании-франчайзи, которая обслуживала их 1С.
«Требуется: добавить в схему XDTO выгрузку реквизита Х. Срок: вчера. Оплата: едой и слезами».
Через два дня пришел ответ: «Готово. Обновитесь».
Семен, полный надежд, накатил файл конфигурации. Синяя полоска обновления ползла мучительно медленно, как улитка, осознавшая тщетность бытия.
- Принято! - радостно сообщила 1С.
Семен запустил выгрузку. Открыл XML.
Поля не было. Была только звенящая тишина и запах озона от перегретого сервера.
- Алло, Франчайзи? - голос Семена был ласков, как наждачная бумага. - Оно не работает.
- Не может быть! - удивился программист на том конце. - У меня на тестовой базе всё работает. Вы кеш чистили?
- Я чистил кеш, карму и историю браузера за пять лет. Поля нет.
Франчайзи ушли думать. Вернулись через сутки.
«Нашли ошибку. Там в модуле объекта была проверка на права доступа. Исправили. Обновляйтесь».
Семен вздохнул. Снова выгнал пользователей из базы (тетка из бухгалтерии кричала, что у неё годовой отчет, но Семен был неумолим). Снова синяя полоска. Снова «Реструктуризация таблиц».
В этот момент Семен начал подозревать, что поле обладает искусственным интеллектом и просто не хочет на сайт. Оно интроверт.
- Алло, - сказал Семен. - Это снова я. Если вы сейчас спросите про кеш, я приеду и съем ваш желтый свитер.
- Странно, - пробормотал программист. - А, точно! Мы же забыли включить реквизит в состав плана обмена! Теперь точно всё.
Третья итерация. Семен обновлялся с чувством обреченности, как самурай перед сэппуку.
В файле красовалось: <ManagerComment>Клиент просит не звонить, у него злая собака</ManagerComment>.
- ПОБЕДА! - заорал Семен так, что уронил фикус. Маркетинг счастлив. Логистика счастлива. Семен - герой.
Прошел месяц. Жизнь наладилась. 1С выпустила очередное плановое обновление релиза - «Управление Торговлей 11.5.Сильно.Улучшенная».
Семен, как ответственный админ, в ночь с субботы на воскресенье накатил обновление. Всё прошло гладко. Утром в понедельник он пришел на работу, предвкушая спокойный просмотр логов.
В 10:00 дверь открылась с удара ноги. На пороге стоял начальник маркетинга.
- Где комментарии?! Сайт пустой!
Семен похолодел. Он открыл XML. Тега <ManagerComment> не было.
Он исчез. Испарился. Как будто его никогда и не существовало.
Семен набрал номер франчайзи.
- Ребята, вы же дорабатывали выгрузку?
- Ну... мы внесли изменения в общий модуль обмена.
- А при обновлении релиза этот модуль...
- ...затерся типовым модулем от 1С, - закончил фразу программист. Повисшая тишина была тяжелее, чем база данных «Почты России».
- Вы. Внесли. Изменения. В. Типовой. Модуль. Без. Расширения? - процедил Семен.
Семен был упорным. Он был злым. Он заставил их переделать всё.
- Сделайте через Расширение Конфигурации! Используйте подписки на события! Сделайте так, чтобы оно пережило ядерную войну и обновление платформы!
Франчайзи кряхтели, сопротивлялись, но сделали.
Поле вернулось. Мир был спасен. Ошибка ушла.
Шесть месяцев пролетели как один миг. Поле выгружалось. Комментарии про злых собак, домофоны и «оставить у консьержа» исправно летели на сайт.
Франчайзи сменили менеджера.
Семен получил оффер от крутой международной компании, где 1С видели только в страшных снах, а работали в SAP (что, по сути, те же яйца, только в профиль и на немецком, но Семен этого еще не знал).
Семен уволился. На его место пришел молодой стажер Вадик. Вадик был полон энтузиазма и веры в светлое будущее.
- О, вышло обновление 1С! - обрадовался Вадик. - «Критические исправления безопасности». Надо срочно ставить!
Он не знал предыстории. Он не знал про кровавую битву за <ManagerComment>. Он просто нажал «Обновить».
1С, хитрая бестия, в этом релизе решила кардинально изменить структуру метаданных. Разработчики платформы переименовали процедуру ВыгрузитьРеквизиты() в ВыгрузитьРеквизиты_С_Уважением(). Или просто поменяли количество параметров в функции, что для 1С - святое дело.
Расширение, которое с таким трудом выбивал Семен, при попытке примениться к новой конфигурации, сказало: «Извините, метод не найден» и молча отвалилось (отключилось в режиме «Безопасный режим: Истина»).
Полоска доползла до конца.
В 10:00 дверь открылась с удара ноги.
Вадик посмотрел в XML. Поля не было.
Круг замкнулся. Колесо Сансары сделало оборот. 1С победила.
P.S. Основано на реальных событиях