Розділ 4. Кімната без вікон
Кімната без вікон
За три дні Артем написав мені у Telegram: «Пам'ятаєш, ти питав про старі версії? Слухай, у нас в офісі є кімната, ти такого ніде не побачиш. Заходь на Шулявку, у п'ятницю після п'ятої, я тебе проведу».
У п'ятницю після п'ятої я зайшов на Шулявку.
Офіс франчайзі стояв у одному з тих радянських адмінбудинків кінця сімдесятих, які кияни називають «Шулявка-діловий»: жовто-коричнева плитка ззовні, кахельні сходи всередині, по-радянськи широкі коридори, скляні двері з папером «ОБІД з 13:00 до 14:00». На третьому поверсі — стара вицвіла табличка «1С: Партнер. Впровадження. Супровід. Розробка», на яку поверх наклеєно свіжу: «BAS-Україна, авторизований центр». Перша — з нульових років. Друга — після сімнадцятого. Стара так і не зникла, нова просто наклалась.
Артем зустрів мене у приймальні. Сорочка-поло вже з логотипом фірми, а не толстовка.
— Ходімо. Тільки тихо. Володимир Васильович там працює, він не любить, коли йому на голову лазять із розмовами.
Кімната була у самому кінці коридору. Без вікон. На дверях — табличка, у якої навіть фон вицвів: «АРХІВ. ТЕХНІЧНИЙ ВІДДІЛ». Артем постукав, відчинив. Усередині горіло лише настільне світло у дальньому кутку — теплий жовтий відблиск на стелі. Артем намацав вимикач на стіні, увімкнув верхні лампи денного світла — вони загули не одразу, а через пару секунд.
Усередині — стелажі заввишки до стелі, заставлені тим, що з першого погляду нагадувало склад комп'ютерного магазину 2005 року. Системні блоки у бежевих корпусах, з ручками-кнопками і відкритими 3,5-дюймовими дисководами. Монітори ЕЛТ-епохи, з логотипами Samsung і LG, складені один на одного. Коробки з компакт-дисками — «1С:Підприємство 7.7», «1С:Підприємство 7.5», «1С:Бухгалтерія 6.0», ще нижче — пачка п'ятидюймових дискет у конверті із залишками клею.
У дальньому кутку, за столом із трьома моніторами, сидів чоловік. Худорлявий, років шістдесяти, у сірій безрукавці поверх сорочки, окуляри з товстою оправою, на стільниці перед ним — два ноутбуки, один старий ThinkPad, один новенький, і третій монітор, на якому крутилася якась схема в Конфігураторі.
— Володимире Васильовичу, — сказав Артем. — Це Денис, журналіст. Я вам казав.
Чоловік відірвався від екрана. Підняв окуляри на лоба.
— А, ти. Ну, сідай. Десять хвилин у мене є. Артеме, йди, не заважай.
Артем зник. Я сів навпроти Володимира Васильовича на скрипучий стілець.
— Я тут із дев'яносто восьмого, — сказав він, наливаючи мені чаю з електрочайника без кнопки (там був вмикач-смикач). — Прийшов одразу після кандидатської з обчислювальних систем. Я мав іти в інститут кібернетики. Не пішов, бо там зарплата була така, що я не міг утримувати сім'ю. А тут — тоді у дев'яносто восьмому — платили живими грошима. У долярах. Не білою зарплатою, звісно — у конверті раз на місяць. Але платили.
— А чим ви тут займаєтесь зараз?
— Зараз я роблю те, чого ніхто більше у фірмі не вміє. Підтримую старі бази. Клієнтів, які сидять на сьомій-сьомій. Або на ранніх вісімках. Або є один — досі на шостій. Не пишу нове. Реанімую старе.
— Скільки клієнтів?
— На повноцінний супровід — чотири. На «дзвоніть, якщо щось не запускається» — ще десь сорок. У нас в архіві у кожній коробці — це чийсь живий бізнес. Я не перебільшую. Я тобі покажу.
Він підвівся і повів мене вглиб стелажів.
— Ось, — сказав Володимир Васильович, відсуваючи коробку. — Шоста версія. Бухгалтерія. Дев'яносто шостий рік.
Він вийняв із коробки мішечок із десятком п'ятидюймових дискет, перев'язаний гумкою, і відкрив старий бежевий тауер у кутку.
— Він живий?
— Він живий. Я колись підвів сюди живлення, замінив батарейку CMOS, встановив свіжий DOS. Запускаю раз на півроку, щоб не подохнув. Зараз тобі покажу.
Він натиснув кнопку. Машина задудніла вентилятором, на моніторі з'явився білий курсор на чорному фоні, потім — рядки тестування пам'яті, потім — «Starting MS-DOS...».
Хвилину пізніше Володимир Васильович набирав щось на клавіатурі, з характерним клацанням механічних клавіш дев'яностих. Я бачив, як з'являється запрошення C:\\1C\\BUH\\>, потім — start.bat, потім — синій екран.
Той самий легендарний синій екран дев'яностих, який я знав лише з фотографій у старих посібниках. Якого я ще ніколи не бачив наживо.
Зверху — горизонтальна синя смуга з білими літерами: «1С:Бухгалтерія. Версія 6.0. Редакція 2.0». Меню — як у західних DOS-програмах: «File, Edit, View», тільки кирилицею: «Файл, Правка, Журнали, Документи, Звіти, Сервіс». Внизу — статусний рядок: «F1 — Допомога. F2 — Зберегти. F10 — Меню». У центрі — порожній бланк документа, синій фон, жовтий курсор.
— Ось так у дев'яносто шостому році виглядала вся бухгалтерія однієї радянської країни, — сказав Володимир Васильович. — Точніше, її пострадянського уламка. Ну, не вся. Десь третина. Можливо, половина. Я не вів статистику.
— А мова? — спитав я. — А якою мовою писав?
— Мова в шостій ще була примітивна. Більше схожа на конфігураційні скрипти. Ти тут не міг писати власну логіку як зараз — ти міг тільки описувати документи й проводки на спеціальній умовній мові. Конфігуратор у сучасному розумінні з'являється у сьомій версії.
Він закрив шосту, повернувся до стелажа, дістав іншу коробку — більшу, з компакт-дисками.
— Сьома-сім. Тисяча дев'ятсот дев'яносто дев'ятий рік. Це, по суті, перша версія, на якій ми можемо сказати — 1С стала платформою.
Він вставив диск в інший комп'ютер, на якому вже стояв Windows 98. Жовто-зелений інтерфейс — точно як казала Людмила Іванівна. Жовті панелі інструментів. Зелена смуга унизу. Іконки маленькі, з характерною піксельною графікою.
— Тут уже все, що ми любимо. Конфігуратор окремий, режим «1С:Підприємство» — окремий. Метадані як перший клас об'єкта. Власна мова з циклами, функціями, об'єктним API. Підтримка SQL Server для багатокористувацьких баз. OLE-інтеграція з Excel — половина бухгалтерських звітів двотисячних виходила саме через Excel-OLE, бо у самій 1С звіти були слабкі.
— А мова?
— Російські ключові слова. Если, Тогда, Цикл, Процедура. Це теж тема, я знаю. Окрема. Зараз про техніку.
Він прокрутив дерево метаданих у Конфігураторі 7.7. У дереві — Довідники, Документи, Журнали, Звіти, Обробки. Регістрів ще немає в тому вигляді, як зараз — тут вони називалися «Регистры оперативного учета», були пласкими таблицями і слабко зв'язаними з ядром.
— Тут уже все, на чому жила країна з дев'яносто дев'ятого до десь п'ятнадцятого. Сімка-сім стояла скрізь. Я знаю заводи, на яких вона стоїть досі. Я знаю клініки. Я знаю одне маленьке видавництво у Чернігові, у якого вся історія книг — у сімці-сім. Вони мене питають раз на рік: «Володимире Васильовичу, ще працює?». Я кажу: «Ще працює». Більше нічого не питають.
— А коли вісімка?
— Дві тисячі третій. І це — революція, від якої країна не оговталася досі.
Він знову поміняв машину. Тепер — окремий ноутбук, на якому стояв 1С:Підприємство 8.0. Інтерфейс — інший. Класичний MDI: ширші вікна, дерева об'єктів зліва, табличні вкладки, кнопки з рельєфом, сірувата палітра.
— У вісімці зробили п'ять речей. Перше — регістри як перший клас. Не «оперативного обліку», не «бухгалтерського» — а як архітектурний примітив. Регістр накопичення, регістр відомостей, регістр бухгалтерії, регістр розрахунку. Чотири типи. Усі — рівноправні, усі — структуровані однаково, усі — з повним API. Це фундамент усього сучасного обліку у 1С. Раніше це робилося руками й костилями.
— Друге — СКД. Система компонування даних. Це окремий механізм для звітів — декларативний, з налаштуваннями користувача, з компонуванням. Звітник більше не пише код звіту вручну. Він описує запит і структуру виводу — а платформа сама будує таблицю, групує, агрегує, форматує. Я перші три роки не міг повірити, що це працює.
— Третє — повноцінна клієнт-серверна архітектура. До цього багатокористувацька 1С робилася через SQL Server, але серверу 1С не було. Кожен клієнт сам ліз у БД. У вісімці з'явився сервер 1С — окремий процес, який тримає бізнес-логіку, кеш, блокування, фонові завдання, регламентні роботи. Це означало, що нарешті можна було масштабуватися на сто-двісті користувачів без того, щоб БД задихнулася.
— Четверте — DBMS-агностика. До цього все було жорстко на SQL Server. У вісімці платформа стала підтримувати PostgreSQL, Oracle, потім IBM DB2. Це окрема історія, але важлива. Завдяки цьому в Україні, у санкційні роки, BAS зміг повністю мігрувати на PostgreSQL без зміни конфігурацій.
— П'яте — нова мова. Розширений синтаксис, об'єктна модель, обробка виключень, повноцінні класи метаданих. Старі скрипти з сімки не запускалися. Кожна організація, яка переходила з 7.7 на 8.0, фактично переписувала конфігурацію.
Він зробив паузу.
— Це і була проблема. Перехід коштував стільки, що дуже багато компаній просто залишилися на сімці. Я кажу — десь до двадцятого року в Україні була критична маса клієнтів на 7.7. Зараз менше. Але є.
— А далі?
— Далі — 8.1 у дві тисячі сьомому, це косметика. А ось 8.2 у дев'ятому — це знову переломна точка. Тут з'являються керовані форми і тонкий клієнт.
Він пояснив. До цього форма виконувалася на клієнті — товстий клієнт, що тягнув на себе всю бізнес-логіку і інтерфейс. Це означало, що 1С не вміла нормально працювати через інтернет, через VPN. Працювало тільки у локальній мережі, бо клієнт постійно щось питав у бази.
У 8.2 архітектуру вивернули. Форма — тепер дві частини: серверна (логіка, дані) і клієнтська (тільки відображення). Серверна частина живе на сервері, клієнтська — мінімальна, як веб-сторінка. Тонкий клієнт можна було запустити з тонким каналом — наприклад, через GPRS у дві тисячі дев'ятому. Або через інтернет з-за кордону. Або в браузері — з'явився веб-клієнт.
— Це звучить, як технічна дрібниця, — сказав Володимир Васильович. — Але це не дрібниця. Це момент, коли 1С перестала бути «програмою на одному комп'ютері в офісі» і стала розподіленою системою. Сервер у Києві, клієнт у Львові, або в Берліні, або в смартфоні. Можна було. Раніше — не можна було.
— А 8.3?
— Тринадцятий рік. Три головні речі: мобільний клієнт для iOS і Android, режим сумісності, і Розширення. Мобільний — це окремо, для виїзних задач — кур'єри, продавці, агенти на місцях. Режим сумісності — це коли платформа 8.3 уміє запускати конфігурації, написані під 8.2 або 8.1, без переписування. Звучить як дрібниця, але це жахливо важливо: переважна більшість великих корпоративних баз досі живуть у режимі сумісності 8.2 або 8.3.10, бо переписувати під найновіший — це знов мільйонні витрати.
— А Розширення?
— Розширення — це окремий шар над типовою. Я тобі вже казав минулого тижня через Артема — це окремий пакет, у якому твої модифікації, який «накладається» на типову поверх, не змінюючи її код. Ідея — щоб оновлення типової не ламали твої правки. На практиці — допомагає відсотків на сімдесят. На тридцять — все одно болить.
Володимир Васильович закрив ноутбук. Поправив окуляри. Подивився на мене.
— Ось і вся історія платформи. Тридцять років. Шість мажорних версій. Кожна — краща за попередню. Кожна — з боргами попередньої, які ми тягнемо досі. Регістр накопичення — це 2003-й. Керовані форми — 2009-й. Розширення — 2013-й. Усе, що сучасний 1С-розробник вважає само собою зрозумілим, — це накопичений шар компромісів за тридцять років. І це шар, який не можна знести, бо під ним — мільйони робочих баз.
Я записав цю фразу окремо. «Шар, який не можна знести».
— Що б ви сказали хлопцю, який зараз сідає писати на сучасній 8.3 і знає лише її?
— Я б йому сказав: знай, що багато з того, що тобі здається дивним або зайвим у платформі, — це сліди старих версій, які не можна було прибрати. Щоразу, коли ти лаєш платформу — спочатку подумай, чому це там. Скоріше за все, причина у дев'яностих або двотисячних. А прибрати — значить зламати когось, хто на цьому досі живе. Ти навіть не дізнаєшся, що зламав, бо цей хтось — далеко, у іншому місті, у іншому клієнті. Але він є.
Він підвівся.
— Іди, мені треба ще одну базу полагодити. Сімка-сім, як завжди. Раз на місяць у них падає індекс — а у мене сценарій з дев'яносто дев'ятого, який його відновлює. Працює як годинник.
Я вийшов з кімнати без вікон, пройшов коридор, спустився сходами. На вулиці вже стемніло. Шулявка гула трамваями.
Я думав про одну річ.
Володимир Васильович — людина, у голові якої повна, безперервна історія платформи з 1996-го до 2026-го. Тридцять років. Вона ніде не описана цілісно. Десь у документації 1С є release notes до кожної версії. Десь у форумах — флейми про переходи з 7.7 на 8.0. Десь у спогадах окремих розробників — фрагменти. Але повної історії немає. Бо немає того, хто б її написав. Володимир Васильович не пише. Він лагодить.
Я думаю, що це теж частина проблеми платформи. 1С виросла без своїх літописців. Вона має армію практиків, які щоденно її використовують, але майже не має тих, хто описує її саму як феномен. Усе, що ти можеш знайти про її історію, — або корпоративна реклама, або форумна суб'єктивщина, або молодечі статті на Хабрі. Серйозної історії технології — немає.
Можливо, цю історію ще треба написати. Можливо — ця книга це початок. Можливо — ні.
Але одне я зрозумів у тій кімнаті без вікон, біля DOS-машин, що гули, і жовто-зелених скриншотів сімки-сім: історія 1С — це історія технології, яка постійно нашаровувалася сама на себе. Не зносила старе. Не очищувала борги. Тільки додавала. І саме тому досі жива. І саме тому досі болить.
У наступному розділі я піду глибше. У саму платформу. У те, що Володимир Васильович назвав «метадані як перший клас». У те, через що мова 1С думає не як C++ і не як Python, а зовсім інакше. У наступному розділі ми відкриваємо Анатомію платформи.