Платформа, яка пережила все
4 / 21

Розділ 3. Над магазином автозапчастин

Частина I · Розділ 3

Над магазином автозапчастин

1

Олег зустрів мене внизу, перед склом, на якому написано «АВТОЗАПЧАСТИНИ. ОПТ І РОЗДРІБ». Вхід до офісу — з торця, через бічні двері, по вузьких сходах. Двері другого поверху без таблички, просто оббиті дерматином, з очком і ключем у замку.

— Сюди, — сказав Олег і відчинив.

Олегу за п'ятдесят. Поло-сорочка з логотипом BMW, джинси, кросівки. У дев'яностих він був інженером на заводі. У двохтисячному звільнили, відкрив із кумом точку запчастин на Лісовому, через п'ять років викупив частку кума і виріс до того, що тепер у нього вісім роздрібних точок по Києву й області, маленький оптовий склад на Троєщині й офіс над цим магазином, який він тримає радше з ностальгії, ніж за необхідністю.

В офісі — дві ІКЕА-шні стільниці, що стали столами, два комп'ютери, шафа з папками від підлоги до стелі, календар «Київстар» 2019 року на стіні, кулер з водою, кавоварка з білого пластику. За одним зі столів сиділа жінка років шістдесяти у синій кофті, дивилася в монітор. На моніторі — світло-сіра рамка, жовтий значок у кутку, дерево розділів ліворуч, форма документа праворуч. Я впізнав без розшифрування.

— Людмило Іванівно, це Денис, — сказав Олег. — Журналіст. Пише книжку про 1С. Я обіцяв йому, що ви розповісте.

Людмила Іванівна підняла очі.

— Я зараз закінчу проводити, — сказала вона. — Сядьте, чаю налию.

2

Я сів, дивлячись на монітор Людмили Іванівни. Документ «Реалізація товарів і послуг», номер під двадцять сьому тисячу. Контрагент — «СТО Динамо ФОП». Сума — сім тисяч триста. Вона переглядала рядки таблиці, щось гортала клавіатурою.

— Я тут двадцять років, — сказала вона, не відриваючись від екрана. — Раніше — на заводі, у бухгалтерії. Сорок років стажу. З них — двадцять на 1С. Перші двадцять — на папері і калькуляторі.

— А коли почали на 1С?
— У дві тисячі шостому. До цього на заводі ми ставили якісь свої програми, не дуже пам'ятаю, від місцевого інституту. Потім завод закрили, я пішла на пенсію, потім Олег покликав. Він мені приніс комп'ютер і сказав: «Людмило Іванівно, нам треба як у людей». Я кажу: «Як у людей — це як?». Він каже: «Як у всіх. 1С».

Вона нарешті закрила документ і повернула стілець до мене.

— Я тиждень плакала. Чесно. Тиждень не могла зрозуміти, що від мене хочуть. У мене в голові журнал-ордери, шахматка, головна книга. А тут — якісь регістри, якісь движення, якесь проведення. Я Олегу казала: «Або я, або ця 1С». Він сказав: «Ви — і 1С. Подивимось, хто кого». Я не люблю, коли мене так підпирають. Сіла й вивчила.

— А зараз?
— А зараз я її розумію краще за хлопців, які її писали. Бо я бачу, що вона думає не так, як бухгалтер. Бухгалтер думає: «Це проводка Дт 90 Кт 28». А 1С думає: «Це рух у двох регістрах». Я навчилася говорити з нею її мовою. Але всередині я досі думаю по-бухгалтерськи.

3

Олег приніс мені чай у склянці з підстаканником. На підстаканнику — герб Київського трамвайного депо, де він колись практикувався в інженерному коледжі.

— Слухайте, — сказав я. — Можна дурне питання? Ви двадцять років на одній програмі. Чому не переходите на щось інше?

Олег засміявся.

— А куди?
— Ну, наприклад. Odoo. Або SaaS-облік. Або щось українське.
— А мені там буде ось ця Людмила Іванівна?
— У сенсі?
— У сенсі, мені треба, щоб ця жінка, яка двадцять років веде мою бухгалтерію, відкрила нову програму і працювала в ній. Не вмерла мені на руках, не звільнилася, не сказала: «Олежик, я пенсіонерка, я цього не буду». Розумієте? Я не куплю програму. Я куплю переучування людини, яка цю програму ненавидить заздалегідь. І вона має право ненавидіти, бо їй шістдесят, і її ніхто не може звільнити, бо її замінити нікого. Бухгалтер з мого сегмента — це підвид, який вимирає.

Він зробив паузу, відсьорбнув з власної склянки.

— Друге. У мене в базі — все, що було за двадцять років. Усі контрагенти. Усі поставки. Усі акти. Усі повернення. Якщо мене перевірятиме податкова за дві тисячі шістнадцятий рік, я мушу їй це показати. Перенести базу — це не імпорт CSV. Це втрата історії. А історія мені дорожча за програму.

— А якщо все-таки доведеться?
— Доведеться — переживу. Знайду людей. Заплачу. Але я не буду цього робити, поки не доведеться. Я не люблю міняти те, що працює.

Я записав цю фразу окремо у блокноті. «Я не люблю міняти те, що працює». Це не консерватизм. Це економіка. У світі малого українського бізнесу зміна облікової системи — це не апгрейд. Це операція на серці без анестезії.

4

О пів на одинадцяту в двері подзвонили. Олег пішов відчиняти.

— Артем, — гукнув він з коридору. — Заходь, у мене тут журналіст, ти йому покажеш Конфігуратор, а потім зробиш своє.

Артем — хлопець років тридцяти дев'яти, спортивна сумка через плече, толстовка з капюшоном, окуляри. На обличчі — той специфічний вираз, який буває у людей, що ходять по клієнтах із ноутбуком п'ятнадцять годин на день. Втомлений ввічливістю.

— Здоров, — сказав він. — Журналіст? Окей. Що показувати?

— Я хочу зрозуміти, — сказав я, — що таке «платформа і конфігурація». Як це насправді влаштовано. Не у статтях. На вашому реальному прикладі.

Артем зняв толстовку, сів за вільний стіл, відкрив ноутбук. На екрані — те саме знайоме мені середовище, але вже в іншому режимі: меню зверху, дерево об'єктів ліворуч, властивості праворуч.

— Це Конфігуратор, — сказав він. — Те, що бачить Людмила Іванівна — це 1С:Підприємство, режим виконання. А це — режим розробки. Як IDE. Тільки IDE, у якій код, дані й інтерфейс — одне ціле.

Він розгорнув дерево. У дереві — пункти: Загальні, Константи, Довідники, Документи, Журнали документів, Перелічення, Звіти, Обробки, Плани видів характеристик, Плани рахунків, Плани видів розрахунку, Регістри відомостей, Регістри накопичення, Регістри бухгалтерії, Регістри розрахунку, Бізнес-процеси, Завдання...

— Що це все? — спитав я.
— Це типи об'єктів метаданих. Платформа знає про всі ці типи. Кожен тип має свої правила, свою поведінку, своє місце у БД. Коли я хочу додати новий документ — я не пишу клас, не пишу таблицю, не пишу форму. Я додаю об'єкт у дерево і кажу: «Це Документ. Він має такі-то реквізити. Він рухає такі-то регістри. Він має таку-то форму».

Він клікнув правою кнопкою на «Документи», додав новий — «ДокументТестовий». Платформа автоматично створила під нього таблицю в базі, заготовку форми, заготовку модуля об'єкта.

— Усе, документ існує. Я не торкався SQL. Я не торкався HTML. Я не торкався класового коду. Я тільки сказав платформі: «Тут має бути документ». Платформа сама зробила решту.

5

Я попросив його зробити крок назад.

— А чим це відрізняється від, наприклад, Symfony з Doctrine? Там теж є моделі, є міграції, є форми.
— Тим, — сказав Артем, — що там у тебе є код, у якому ти описуєш модель, і потім є код, у якому ти описуєш форму, і потім є код, у якому ти описуєш контролер. Три шари. У 1С — один. Об'єкт і є модель. Об'єкт і є форма. Об'єкт і є контролер. Ти просто описуєш, що має бути, а як воно буде показуватися, зберігатися й оброблятися — вирішує платформа.

Він трохи задумався.

— Інша річ. У Symfony ти пишеш на PHP. Це універсальна мова, у ній є все що завгодно. У мене мова обмежена тим, що про неї знає платформа. Я не можу написати щось абсолютно довільне. Я можу написати тільки те, що вписується у модель платформи. З одного боку — це обмеження. З іншого — це причина, чому я пишу швидко. Я не маю вибору, як саме робити. Я роблю так, як вирішила платформа. А вона вирішила за мене ще у дев'яностих.

— То це програмування у глибокій клітці.
— Так. Тільки клітка така велика, що в ній уся бухгалтерія країни. Усі типи документів, які бувають у бізнесі. Усі регістри обліку, які потрібні. У ній є все, що ти зазвичай хочеш. Якщо ти хочеш чогось, чого нема, — у тебе проблеми. Але таке буває рідше, ніж здається.

6

Тепер варто на хвилину покинути офіс і скласти технічну картину. Сухо, але коротко — потім повернемось.

«Платформа» — це те, що поставляє компанія 1С. Виконуване середовище, інтерпретатор мови, шар доступу до бази, рушій форм, рушій звітів, мережевий протокол. Це коробка, у яку нічого не пишеш ти. Ти її лише оновлюєш, коли виходить нова версія.

«Конфігурація» — це проект, який запускається у платформі. Це XML-описи об'єктів метаданих, плюс модулі коду на мові 1С, плюс форми, плюс звіти, плюс підсистеми. Усе це разом — файл .cf або, у роботі, набір XML-файлів у репозиторії.

Конфігурації бувають трьох видів. Типова — її поставляє 1С (або в Україні — постачальник BAS). Це готова бізнес-логіка для конкретного типу бізнесу: бухгалтерія, торгівля, виробництво, зарплата. Доопрацьована типова — це коли клієнт або франчайзі взяв типову і вніс зміни прямо в неї. Власна — коли все написано з нуля під конкретний бізнес.

Перший варіант — найпростіший в експлуатації, бо оновлення прилітають від постачальника. Другий — найпоширеніший, бо реальний бізнес не вкладається у типову на сто відсотків. Третій — рідкісний і дорогий.

Друга деталь, важлива технічно: з версії 8.3 платформа підтримує «Розширення». Це окремий шар, який дозволяє змінювати поведінку типової, не торкаючись її коду. Концептуально схоже на патчі у Linux чи плагіни у WordPress. Це частково розв'язало біль «доопрацьованих типових», але не повністю — про що окремо.

Тепер повернемось до Артема. Він якраз відкрив «Порівняння-об'єднання конфігурацій».

7

На екрані — таблиця у три колонки. Ліва — поточна конфігурація Олега. Середня — нова версія типової, яку треба накотити. Права — те, що вийде в результаті.

— Ось дивися, — сказав Артем. — У них тут новий реквізит у документі «Реалізація» — «Код УКТ ЗЕД». Усі мають. Стандартний. У нашого Олега цей документ доопрацьований — у нього свій реквізит «Тип точки продажу». Платформа бачить обидва. Каже мені: «Приймай рішення».

— І ти приймаєш?
— І я приймаю. Тут — клацаю «з нової конфігурації», тут — «з поточної», тут — «об'єднати». На сорока об'єктах це півгодини. На чотирьохстах — пів дня. На двох тисячах — день клацання плюс ще день-два на тестування і виправлення регресій.

Він повернув ноутбук назад до себе, продовжив клацати.

— У Олега тут небагато змін. Я в нього тільки звіт «Виторг по точках» дописав, поле в довіднику номенклатури і два прапорці у документі надходження. На цій базі. Бо я з ним з дві тисячі сьомого, я знаю всі його модифікації, я їх сам і робив. Інші бази, які приходять до мене на оновлення з вулиці, — там жах. Хтось десять років тому дописав у модуль документа сто рядків коду, той хтось — уже у Канаді або помер, що це за код — ніхто не пам'ятає, а він блокує оновлення. Тоді я дивлюся на клієнта і кажу: «Ось ціна оновлення. Або ми це з'ясовуємо, або ми залишаємось на старій версії».

— І як часто залишаєтесь?
— Часто. Дуже часто. Половина моїх клієнтів — на конфігураціях п'ятирічної давнини. Бо оновлення коштує дорожче, ніж жити зі старою.

8

Я довго дивлюся на цю таблицю порівняння-об'єднання. У ній — головний парадокс архітектури 1С.

З одного боку — це геніально. Один рушій, тисячі бізнес-логік, кожна — налаштовується під клієнта. Жоден ентерпрайз-софт не дав цього малому бізнесу так дешево. SAP вимагав армію консультантів. Oracle — те саме. Salesforce — пізніше, інакше, з іншими передумовами. 1С зробила це у дев'яностих, для людей, які платять у гривнях, а не у валюті.

З іншого боку — це боргова яма. Кожна модифікація — це борг, який ти будеш платити при кожному оновленні. Через п'ять років борг такий, що оновлюватися не вигідно. Через десять — ти на конфігурації, яку ніхто, крім твого франчайзі, не пам'ятає. Через п'ятнадцять — твій франчайзі помер або поїхав, а ти сидиш на базі, з якою ніхто не може працювати.

Це парадокс гнучкості. Дозвіл усе змінювати — означає згоду на те, що з часом ніхто не знатиме, що саме змінено. Платформа дала зброю в руки тисяч франчайзі по всій країні. Зброю якісну. Інструкції — мінімальні. Результат — тридцять років по тому в Україні мільйони баз, кожна з яких — унікальна, кожна з яких — наполовину сирота.

Артем закрив ноутбук, потягнувся.

— Олежик, я піду, у мене ще Поляковський на дванадцяту.
— Іди-іди.

Артем вискочив на сходи. Знизу почулися кроки.

Олег повернувся до мене.

— То ви зрозуміли?
— Що саме?
— Чому ми всі тут. Усе це. — Він жестом обвів кімнату. — Не тому що ми не знаємо про SAP. Знаємо. Я навіть на конференції одній був, років десять тому. Не тому що ми не любимо нове. Любимо. А тому що ця штука росла разом із нами. Вона неідеальна. У ній багато дурні. Але вона наша. У ній — наша Людмила Іванівна, наші двадцять років, наш Артем, наш борг. Її прибрати — означає прибрати все це. Ніхто не наважиться.

9

Я попрощався з Олегом і Людмилою Іванівною, спустився сходами, вийшов на вулицю. Над магазином «АВТОЗАПЧАСТИНИ» горів неон. Перед входом стояла машина клієнта з відкритим капотом, у руках у власника — згорнута роздруківка прайсу.

У цей момент я зрозумів — щось важливе. Усе, що було сказано в цьому розділі, — і Олег, і Людмила Іванівна, і Артем, і тисячі франчайзі по всій країні, і тисячі баз із сиротами-модифікаціями — це прямий наслідок одного архітектурного рішення, прийнятого в Москві у середині дев'яностих. Рішення «платформа і конфігурація» здавалося технічним. Воно виявилося соціальним.

У наступному розділі я повернусь до самої платформи. До того, як вона технічно розвивалася від синього інтерфейсу Norton Commander дев'яностих, через жовто-зелену 7.7 двохтисячних — на якій Людмила Іванівна вперше відкрила «1С:Бухгалтерію» у дві тисячі шостому, — до сучасних керованих форм 8.3. Це історія мови, інтерфейсу, моделі клієнт-серверу і, мабуть, головна технічна історія всієї книги.

Артем уже їхав на наступний виклик. Олег зачинив за мною двері. Я пішов до метро.