Добавить в корзинуПозвонить
Найти в Дзене

Один на 300. Дневник 1С-разработчика

Когда меня спрашивают чем я занимаюсь, я говорю "программирую на 1С". Люди кивают с видом понимания и спрашивают: "это типа как Excel?". Нет. Не типа как Excel. Это 300 гигабайт живой истории предприятия, километры кода на встроенном языке, который выглядит как русский, но думает как что-то среднее между Паскалем и загадкой природы. Организация — 300 человек. Я — один. База крутится на MS SQL, написана частично ещё в нулевых, частично мной, частично кем-то, кто уволился до моего прихода и чей код я разбираю как египетские иероглифы без розеттского камня. Комментариев нет. Переменные называются Перем1, ТемпЗнач и, однажды, просто АААаа. Я не знаю в каком контексте человек это написал. Мне страшно предполагать. Процедура называлась "РасчётЗарплаты_Новая2_ФинальнаяВерсия_ТочноЭта". Под ней была ещё одна — "РасчётЗарплаты_Новая2_ФинальнаяВерсия_ТочноЭтаV2". Обе рабочие. Обе используются. Зачем — выяснить не удалось. Самый частый запрос, с которым ко мне приходят: "сделай отчёт". Звучит про

Когда меня спрашивают чем я занимаюсь, я говорю "программирую на 1С". Люди кивают с видом понимания и спрашивают: "это типа как Excel?". Нет. Не типа как Excel. Это 300 гигабайт живой истории предприятия, километры кода на встроенном языке, который выглядит как русский, но думает как что-то среднее между Паскалем и загадкой природы.

Организация — 300 человек. Я — один. База крутится на MS SQL, написана частично ещё в нулевых, частично мной, частично кем-то, кто уволился до моего прихода и чей код я разбираю как египетские иероглифы без розеттского камня. Комментариев нет. Переменные называются Перем1, ТемпЗнач и, однажды, просто АААаа. Я не знаю в каком контексте человек это написал. Мне страшно предполагать.

Процедура называлась "РасчётЗарплаты_Новая2_ФинальнаяВерсия_ТочноЭта". Под ней была ещё одна — "РасчётЗарплаты_Новая2_ФинальнаяВерсия_ТочноЭтаV2". Обе рабочие. Обе используются. Зачем — выяснить не удалось.

Самый частый запрос, с которым ко мне приходят: "сделай отчёт". Звучит просто. На деле это квест. Сначала выясняется, что отчёт нужен "как тот, что был раньше, только немного другой". Какой был раньше — никто не помнит, его удалили в 2019-м. Потом выясняется, что данные для отчёта хранятся в трёх разных регистрах, один из которых заполняется криво с декабря прошлого года, но "все знали, просто не говорили". Потом я сдаю отчёт, его смотрят пять минут и говорят: "а можно ещё колонку вот сюда". Колонка требует переписать запрос с нуля.

Был случай — позвали потому что "документы проводятся медленно". Медленно — это пять секунд вместо одной. Открываю план запроса, смотрю на таблицу движений: индекс не используется, полное сканирование, 40 миллионов строк. Начинаю разбираться. Выясняется, что три года назад кто-то добавил в форму документа дополнительный реквизит и повесил на него обработчик, который при каждом проведении делает запрос без отбора. Три года. 300 человек. Каждый день. Никто не замечал, потому что "ну медленновато, бывает".

Убрал лишний запрос, добавил индекс. Документ стал проводиться за 0.3 секунды. Меня похвалили. Я не стал говорить, что на это ушло полдня.

Любимый жанр задач — "срочно, всё горит". Горит обычно потому что нужно было ещё в прошлом месяце, но об этом вспомнили сегодня утром. Я уже научился отличать настоящее "горит" (не работает расчёт зарплаты перед выплатой) от ненастоящего (поменяй шрифт в печатной форме, у директора встреча через час). Второе я тоже делаю. Но с другим выражением лица.

Один раз пришел баг, который воспроизводился только в полнолуние. Не шучу. Ошибка в расчёте округления вылезала только в конце месяца при закрытии периода, когда база нагружена под завязку и транзакции начинают конфликтовать. Полтора месяца я не мог поймать её на тестовой базе. Поймал только когда подключился прямо к проду в момент закрытия и смотрел план выполнения в реальном времени. Это было как охота. Я даже немного расстроился когда нашёл — всё, приключение кончилось.

300 гигабайт базы — это не просто цифра. Это значит, что бэкап идёт три часа, что любой криво написанный запрос может положить сервер на несколько минут, что перед каждым обновлением я молча сижу и думаю о жизни. Регрессионного тестирования нет. Тестовая среда есть, но данные в ней трёхмесячной давности. Каждый деплой — это немного экстрим.

Однажды я нашёл в коде строку с комментарием: "не трогать, непонятно почему работает, но работает". Я не тронул. Работает до сих пор.

Но вот что интересно: мне нравится. По-настоящему. Задача бывает такая, что сидишь час, смотришь в запрос и не понимаешь — а потом раз, и видишь. Или копаешь старый чужой код и находишь там решение, которое реально изящно сделано, и немного уважаешь того незнакомца. Или закрываешь баг, который ловил две недели, и это лучше любого кофе.

Один на 300 — это, конечно, пиздец по нагрузке. Но зато я знаю эту базу как собственный карман. Каждый регистр, каждый кривой индекс, каждую процедуру с именем ТочноЭтаV2. Это моё. Немного страшное, местами загадочное, но моё.