Каждому клиенту 1С — по его бюджету
Уже 3 года я фрилансер 1С. О том, как ушел на фриланс, писал ранее.
И вот заметил, что некоторые коллеги упрекают меня в том, что я многое в коде делаю «неправильно», «неэффективно», в общем, не по канонам.
Я веду свой блог geniy1s.ru где описываю свою практику работы с 1С. Поэтому недостатка в критиках у меня нет.
Хочу объяснить свою позицию.
Представьте, что фрилансер 1С — это ателье по индивидуальному пошиву одежды. Когда ты выходишь на рынок, ставишь самые низкие цены. Но постепенно весть об отличном мастере разносится сарафанным радио по округе и вот ты уже вынужден подымать цены на свои работы, чтобы как-то фильтровать и успевать обслуживать клиетнов. Так и я начинал с цены в 1.500 рублей в час, а сейчас, три года спустя, прошу уже 3.000 рублей в час (2х).
Если клиенты меня спрашивают, почему цены растут, честно рассказываю о большом спросе на свои услуги:
Но даже подобная фильтрация не спасает от авралов. Когда я уходил на фриланс, то думал, что буду работать 4 часа 5 дней в неделю, с выработкой 80 часов в месяц.
Так оно и было, пока я не взял вторую ипотеку с ежемесячным платежом 98 тысяч. Пришлось немного увеличить объем работы:
Теперь я работаю где-то 4–5 часов в день с единственным выходным в субботу. Правда, мне нравится. Моя жена говорит, что я вообще на работаю, а отдыхаю. Хобби, мол у меня такое — клиентов обслуживать. Возможно, ей со стороны виднее.
Я сторонник практики win-win — когда выигрывает клиент, выигрываю и я. Он будет доволен, посоветует меня своим знакомым и у меня всегда будет работа. Поэтому до сих пор я не пользуюсь никакими рекламными инструментами — клиенты приходят по сарафану или находят меня по моим статьям в блоге (по созвучным проблемам).
И для того, чтобы клиент доволен, нужно наступить на горло своей гордыне. Самое главное правило, которое я понял на фрилансе по программированию, что рабочее время программиста стоит дороже процессорного времени.
Поэтому клиенту лучше сделать быстрее и бюджетнее. Пусть это будет работать медленно и не идеально. Главное, чтобы работало хоть как-то.
Есть такой старый и уже немного подзабытый принцип программирования KISS, что в переводе обозначает — «делай это проще дурачок». А еще говорят, что дурачкам легче живется.
Поэтому я всегда стараюсь делать просто. Так, чтобы не только мне было понятно, но и тем, кто придет после меня. А клиенту выгода в простоте в бюджетности решения.
Понимаю, что есть сектора разработки, где трудятся большие коллективы программистов и там важно делать code review, оптимизировать каждую строчку кода. Но фрилансер — это о другом.
Вот, например, я писал о том, как я использую глобальную переменную, чтобы не менять количество параметров в процедурах. Это очень просто и эффективно.
1С сейчас использует механизм расширений для изменения типового кода от самой 1С.
Там есть два способа вмешательства — можно вставить код до или после типового кода, а можно заменить кусок типового кода.
Так вот, заменить кусок типового кода проще, но жить это решение будет недолго — как только типовой код изменится, придется переписывать. А вот вставки кода до или после типового кода живут дольше. Поэтому я их и применяю, в ущерб красоте решения.
К сожалению, 1С до сих пор использует огромные функции на несколько экранов, поэтому не всегда удается обойтись без замены кода.
У одного клиента в УТ 11 я полностью переписал неконтролируемый универсальный механизм расчета себестоимости на собственный. Я писал движения в типовые регистры, поэтому все отчеты не пришлось переписывать. Но рассчитывал себестоимость сам, так, как было нужно клиенту. И клиент был доволен, что так просо можно реализовать его желание.
Большой поток хейта вызвало моё мнение, что запросы в цикле — это не всегда плохо.
Как то мне нужно было для платежного календаря определять на какую сумму оплачен заказ, по которому планируется поступление денег, чтобы вычитать из планового поступления фактическое.
У клиента 20 заказов в день планируется на срок не более месяца, соответственно в плане может быть максимум 600 заказов.
Я написал получение суммы оплаты простым запросом. Этот запрос выполняется 0.5 секунд:
Максимальное время, которое может работать отчет за месяц — 300 секунд (5 минут).
Да, можно переписать запрос так, чтобы он работал по всем заказам в целым и это на 50% увеличит скорость работы отчета. Отчет выполнится за 150 секунд (2.5 минуты).
Но для этого нужно потратить 1.5 часа времени, т.к. 1С не позволяет использовать без изощрений в одном запросе плавающие диапазоны дат (привязанных к дате заказа).
На самом деле обычно этот отчет формируется за 1 минуту и объяснять клиенту лишних 4.500 рублей на написание отчета тягой к идеалу не хочется.
С каждым годом я наблюдаю, как 1С в угоду производительности делает код решений все более и более сложным и запутанным:
Печать документов реализована через запросы, хотя любая печать длится дольше, чем формирование печатной формы
Проведение документов также реализовано через запросы. Но фишка в том, что запросы не могут реализовать всю логику, поэтому используется страшный в своей сложности гибрид запросов и кода.
Аудиторы, которые принимают код в облачную 1С, тоже зачастую требуют каких-то формальных соблюдений правил написания кода в ущерб разумности использования этих правил.
Документации кода и алгоритмов нет и не планируется, даже на закрытых ресурсах.
Иногда я ощущаю себя доктором, который избавляет клиента от ужасов типового кода 1С через упрощение сложности. Я делаю прививку простоты. KISS, делай это проще, дурачок.