Путешествие реквизита справочника 1С из одной базы 1С в другую базу 1С через файловую систему
1. В глубине информационной базы «Управление торговлей», среди тесных таблиц и молчаливых индексов, жил тихий элемент справочника «Номенклатура» — гвоздь, тридцать пять миллиметров, оцинкованный.
2. Сердцем его было имя, записанное в реквизите «Наименование» строкой ровно в сто символов, и оно грело его больше, чем любой GUID.
3. Впрочем, и GUID у него имелся — честный, честнейший паспорт, выданный платформой при рождении и неизменный до самой смерти.
4. Пока данные скучали во тьме файла 1cv8.1cd, программист Мария скучала над задачей «Передать номенклатуру в бухгалтерскую базу».
5. Задача пульсировала в трекере, как нарыв, и однажды Мария всё-таки открыла конфигуратор.
6. Она задумала провести героя из мира в мир не по сети, не через веб-сервис, а старинным сухопутным путём — через файловую систему.
7. «Через файлы, — сказала она монитору, — файл не подведёт, файл не упадёт, файл всегда доедет».
8. Она нажала кнопку выгрузки, и платформа проснулась в ночной тишине сервера.
9. Первым делом платформа объявила трансакцию — светлую и строгую, чтобы никто из соседей по таблицам не дёрнулся и не испортил читаемое.
10. Трансакция взяла гвоздя за руку и повела его по таблицам: «Собирайся, путешественник, тебе открыта дальняя дорога».
11. Гвоздь стал прощаться с реквизитами-соседями: артикул, единица измерения, ставка НДС, вес брутто — все они выстроились, как провожающие на перроне.
12. Табличная часть «Штрихкоды» тихонько ухватилась за его полу: «Возьми и нас, мы без тебя ничьи».
13. И платформа начала записывать его существо в XML — неторопливо, буква за буквой, как летописец в монастырской келье.
14. Первой на бумагу легла шапка `<Объект>`, а за ней строгая `<Ссылка>` с UUID, как у человека — номер паспорта.
15. Дальше пошли свойства, и каждое честно назвало себя: Имя="Наименование", Имя="Артикул", Имя="ВесБрутто".
16. Гвоздь глядел на своё новое воплощение — уже не тёплый объект в памяти, а сухие угловые скобки — и не узнавал себя.
17. «Не бойся, — прошептал сериализатор, — скобки — тоже форма жизни, а обратную дорогу тебе покажут теги».
18. Типы данных стояли рядом, как таможенные клейма: String, Number, DateTime — без клейма никто не проходит.
19. Штрихкоды улеглись в `<ТабличнаяЧасть>`, и каждая строка пристроилась на своё место, как шпала под рельсы.
20. Когда закрылась последняя скобка, файл вырос и потяжелел: в нём теперь дышала вся душа гвоздя.
21. Назвали файл «Номенклатура_Гвоздь_35х120.xml», и имя ему досталось длинное, как чувство вины.
22. Мария положила файл в папку C:\Exchange\Outgoing и посмотрела на него так, как смотрят на вещи, которые уже нельзя исправить.
23. Но не была бы она инженером, если б отправила его голым: рядом лежал ZIP-архив, терпеливый и застёгнутый на все замки.
24. В архив гвоздь вошёл вместе с XML, сжался, как в тесной шинели, и стал в семь раз меньше собой.
25. «В тесноте, да не в обиде», — пробормотал компрессор и нарисовал на архиве контрольную сумму, как подпись на конверте.
26. Мария сменила имя на нейтральное: TB_20260415_144231.zip — безликий паспорт для безликой дороги.
27. Папка Outgoing попрощалась с архивом, как пристань с кораблём, и открыла ему двери файловой системы.
28. Файловая система встретила гостя прохладой NTFS и дотошным вопросом о правах: кто ты, чей ты, имеешь ли право и на чтение, и на запись.
29. Архив предъявил доменную учётную запись, и диск сделал его полноправным пассажиром.
30. Дальше путь лежал через сетевую папку \\fileserver\exchange\1c, где архив качало, как пассажира ночной электрички.
31. В пути его ощупывали антивирус, резервное копирование и синхронизация — каждый по-своему, каждый дотошно.
32. Антивирус понюхал ZIP, ничего запретного не нашёл и отступил: «Проходи, документ, шагом марш».
33. Резервная система скопировала его в тёмную даль снапшота — так матери кладут детям сухари в дорогу.
34. Синхронизация поставила зелёную галочку, и архив понял, что за ним следят, и был этому рад.
35. На пороге бухгалтерской базы его встретила другая программистка, Ольга, и привычка к порядку.
36. Ольга увидела файл в папке Incoming и сказала его прошлой жизни: «Путь твой был долог, но ты приехал вовремя».
37. Она сверила контрольную сумму — и цифры сошлись до последнего бита, как отпечаток пальца с отпечатком.
38. «Цел и невредим», — отозвался ZIP, и она его распаковала.
39. Из тесного архива гвоздь вылетел в XML и снова расправил угловые скобки, как крылья.
40. Теперь начиналась самая страшная часть пути — Загрузка.
41. Ольга открыла в бухгалтерской базе обработку импорта и положила руку на Enter, как на рычаг судьбы.
42. Платформа бухгалтерии объявила трансакцию приёма — светлую и строгую, как и у отправителя.
43. Сначала она прочитала `<Объект>` и спросила: «Кто ты есть и зачем ты явился?»
44. Гвоздь ответил UUID-ом, и бухгалтерская база пошла искать его в своих таблицах.
45. Ищет в «Номенклатура», ищет в индексах, ищет в кэше объектов — а его там нет, как в чужом городе не ищут знакомых.
46. «Нет его у нас, — заключила база, — значит, не наш, значит, новый».
47. И платформа объявила: будет создан новый элемент, и UUID его примется как родной, потому что по UUID и встречают, и провожают.
48. Здесь гвоздь едва не вздрогнул: имя «Гвоздь оцинкованный 35х120» в бухгалтерском справочнике было длиннее, чем длина строки реквизита «Наименование».
49. Но сериализатор оказался мягче закона: он бережно подрезал хвост, и никто не заметил утраты.
50. А реквизит «ВесБрутто» прошёл проверку типа, и Number остался Number, и точность сошлась до копейки.
51. Ставка НДС искала себя в чужих перечислениях и нашла — там она называлась иначе, но так же честно.
52. Одна лишь табличная часть «Штрихкоды» замялась: в бухгалтерском справочнике её не было, как стола в наёмной комнате.
53. Но у платформы было правило старое, как мир: не было такой части — образуем, ибо от детей не отказываются.
54. И штрихкоды расселись по новым строкам, получили свои учётные места и устроились ничуть не хуже прежнего.
55. А сам гвоздь ложился в таблицу, как путник в постель: осторожно, по листам, по индексам.
56. Индексы встали вдоль его полей, как полисмены вдоль улицы, чтобы поиск не бродил впотьмах.
57. Регистры сведений, что любили его ещё в прошлой жизни, теперь узнавали о нём заново — с чистого листа.
58. «Ты уже не тот, что был», — молвил старый регистр, и гвоздь понял, что это правда и ложь разом.
59. Правда — что UUID тот же; ложь — что сердце то же: отныне у него два дома и две записи в таблицах.
60. А в родной «Управлении торговлей» его двойник всё так же лежал в 1cv8.1cd и не знал, что у него появилась бухгалтерская жизнь.
61. Когда трансакция приёма закрылась словом «зафиксировано», Ольга выдохнула и отошла пить чай.
62. Чай был крепкий, а мысль была одна: «А вдруг есть ещё, кого выгрузить?»
63. И правда, были: у гвоздя в исходной базе жили сорок тысяч братьев, и каждому светила такая же дорога.
64. Мария не стала гонять их поодиночке — она написала регламентное задание, и оно работало по ночам, как добрый домовой.
65. Ночами папка Outgoing наполнялась архивами, и каждый архив дышал чьей-то товарной душой.
66. Утром Ольга приходила в Incoming и видела, как за ночь мир конвертации разродился очередным потомством.
67. Так лёг транспортный поток между двумя базами, как дорога между двумя городами: пыльная, но проверенная.
68. Впрочем, случались и коллизии: однажды архив не долетел, потому что антивирус держал его под карантином.
69. Тогда регламентное задание записало в журнал регистрации строку уровня «Ошибка», и ошибку Ольга нашла фильтром за секунды.
70. «Карантин, — вздыхала она, — как в аэропорту: то конфискация, то досмотр».
71. Во второй раз ошибку устроила блокировка объекта: гвоздя изменили в обеих базах сразу, и его UUID стал яблоком раздора.
72. Для таких случаев у платформы была целая стратегия: сравнить версии, показать пользователю и спросить — чью волю исполнить?
73. Ольга слушала главбуха, а главбух слушал остатки на складе — так и рождалась истина.
74. Иногда правда была на стороне отправителя, иногда — приёмника; файловая система в этих спорах оставалась судьёй беспристрастным.
75. Миновал месяц, и в журнале обмена уже теснились тысячи подтверждений — галочек «принято», как почтовых штемпелей.
76. И однажды случилось непредвиденное: диск переполнился, и архив с партией тазов прилёг спать посреди дороги.
77. Задание выгрузки упало с «Ошибкой записи файла», и Мария в три ночи открыла мониторинг и увидела красные строки.
78. Она почистила папку, освободила место, перезапустила задание — так машинист разгоняет затор на путях.
79. Архив с тазами поправил себя и поехал дальше, потому что контрольная сумма его не подвела.
80. За сутки он догнал очередь и встал на своё место, как вагон в состав.
81. Так и текла жизнь файла по расписанию: выгрузка — упаковка — отправка — приём — распаковка — загрузка — подтверждение.
82. Семь шагов обменного цикла, семь таинств перехода, как в старинной книге про данные.
83. Иногда вместо ZIP по дороге шли чистые XML — их любили меньше, но понимали быстрее.
84. Иногда вместо XML шли YXML, и платформа справлялась с ними молча, как с чужим акцентом.
85. Всё шло ровно, пока не пришло письмо от головного офиса: «Вынесите обмен в облако».
86. Облако пахло переменами, но Мария не спешила: старая дорога через файловую систему работала, а работающее не трогают.
87. Однако время шло, и однажды файловая система махнула архивам рукой: «Вы выросли, дети, — летайте теперь сами».
88. Архивы переехали в облако, но на прощание оставили в старых папках своих безымянных братьев — логи, контрольки, метафайлы.
89. На прежнем месте осталось пустое пространство, как след от чемодана, и Мария узнавала в нём свою молодость.
90. А гвоздь в бухгалтерской базе давно уже пожил второй жизнью: его находили поиском, продавали, списывали с остатков.
91. Его двойник в «Управлении торговлей» уходил всё дальше в историю: его правили, сворачивали, а под конец и вовсе пометили на удаление.
92. «Пометка — не смерть, — объяснили ему, — пометка — это отпуск за свой счёт».
93. Однажды ночью пришло регламентное задание и физически удалило двойника — тихо, без почестей, одним DELETE.
94. В бухгалтерской базе гвоздь остался один, и одиночество его было вдвойне: он хранил в себе память двух миров.
95. Его UUID пережил обе жизни, как номер в архивной описи, по которому можно отыскать любую судьбу.
96. Так и стоят теперь две базы на двух серверах, и между ними нет больше файлов — только память о файлах.
97. Память эта лежит в журналах регистрации, в резервных копиях и в тысячах XML, у которых давно вышел срок.
98. И если вам доведётся открывать старый обмен, найдите в папке Outgoing хоть один ZIP — и прислушайтесь: в нём, наверное, ещё кто-то едет.
99. Быть может, это гвоздь, тридцать пять миллиметров, оцинкованный, — тот самый, что вы когда-то выгружали, спеша закрыть смену.
100. И тогда у дороги будет честный финал, как у всех историй о данных: файл закрыт, объект записан, трансакция зафиксирована — и пусть всё это живёт долго и счастливо, пока не кончится диск.
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.