Каждому клиенту 1С — по его бюджету

Уже 3 года я фрилансер 1С. О том, как ушел на фриланс, писал ранее.

И вот заметил, что некоторые коллеги упрекают меня в том, что я многое в коде делаю «неправильно», «неэффективно», в общем, не по канонам.

Я веду свой блог geniy1s.ru где описываю свою практику работы с 1С. Поэтому недостатка в критиках у меня нет.

Хочу объяснить свою позицию.

Представьте, что фрилансер 1С — это ателье по индивидуальному пошиву одежды. Когда ты выходишь на рынок, ставишь самые низкие цены. Но постепенно весть об отличном мастере разносится сарафанным радио по округе и вот ты уже вынужден подымать цены на свои работы, чтобы как-то фильтровать и успевать обслуживать клиетнов. Так и я начинал с цены в 1.500 рублей в час, а сейчас, три года спустя, прошу уже 3.000 рублей в час (2х).

Если клиенты меня спрашивают, почему цены растут, честно рассказываю о большом спросе на свои услуги:

4b39ed3f1e845b786c00540235b68f30.png

Но даже подобная фильтрация не спасает от авралов. Когда я уходил на фриланс, то думал, что буду работать 4 часа 5 дней в неделю, с выработкой 80 часов в месяц.

Так оно и было, пока я не взял вторую ипотеку с ежемесячным платежом 98 тысяч. Пришлось немного увеличить объем работы:

159eeb5a2fd0def7185cfd53cfb439b2.png

Теперь я работаю где-то 4–5 часов в день с единственным выходным в субботу. Правда, мне нравится. Моя жена говорит, что я вообще на работаю, а отдыхаю. Хобби, мол у меня такое — клиентов обслуживать. Возможно, ей со стороны виднее.

Я сторонник практики win-win — когда выигрывает клиент, выигрываю и я. Он будет доволен, посоветует меня своим знакомым и у меня всегда будет работа. Поэтому до сих пор я не пользуюсь никакими рекламными инструментами — клиенты приходят по сарафану или находят меня по моим статьям в блоге (по созвучным проблемам).

И для того, чтобы клиент доволен, нужно наступить на горло своей гордыне. Самое главное правило, которое я понял на фрилансе по программированию, что рабочее время программиста стоит дороже процессорного времени.

Поэтому клиенту лучше сделать быстрее и бюджетнее. Пусть это будет работать медленно и не идеально. Главное, чтобы работало хоть как-то.

Есть такой старый и уже немного подзабытый принцип программирования KISS, что в переводе обозначает — «делай это проще дурачок». А еще говорят, что дурачкам легче живется.

Поэтому я всегда стараюсь делать просто. Так, чтобы не только мне было понятно, но и тем, кто придет после меня. А клиенту выгода в простоте в бюджетности решения.

Понимаю, что есть сектора разработки, где трудятся большие коллективы программистов и там важно делать code review, оптимизировать каждую строчку кода. Но фрилансер — это о другом.

Вот, например, я писал о том, как я использую глобальную переменную, чтобы не менять количество параметров в процедурах. Это очень просто и эффективно.

1С сейчас использует механизм расширений для изменения типового кода от самой 1С.

Там есть два способа вмешательства — можно вставить код до или после типового кода, а можно заменить кусок типового кода.

Так вот, заменить кусок типового кода проще, но жить это решение будет недолго — как только типовой код изменится, придется переписывать. А вот вставки кода до или после типового кода живут дольше. Поэтому я их и применяю, в ущерб красоте решения.

К сожалению, 1С до сих пор использует огромные функции на несколько экранов, поэтому не всегда удается обойтись без замены кода.

У одного клиента в УТ 11 я полностью переписал неконтролируемый универсальный механизм расчета себестоимости на собственный. Я писал движения в типовые регистры, поэтому все отчеты не пришлось переписывать. Но рассчитывал себестоимость сам, так, как было нужно клиенту. И клиент был доволен, что так просо можно реализовать его желание.

Большой поток хейта вызвало моё мнение, что запросы в цикле — это не всегда плохо.

Как то мне нужно было для платежного календаря определять на какую сумму оплачен заказ, по которому планируется поступление денег, чтобы вычитать из планового поступления фактическое.

У клиента 20 заказов в день планируется на срок не более месяца, соответственно в плане может быть максимум 600 заказов.

Я написал получение суммы оплаты простым запросом. Этот запрос выполняется 0.5 секунд:

a392be514ccd162fa18306cb00ed5838.png

Максимальное время, которое может работать отчет за месяц — 300 секунд (5 минут).

Да, можно переписать запрос так, чтобы он работал по всем заказам в целым и это на 50% увеличит скорость работы отчета. Отчет выполнится за 150 секунд (2.5 минуты).

Но для этого нужно потратить 1.5 часа времени, т.к. 1С не позволяет использовать без изощрений в одном запросе плавающие диапазоны дат (привязанных к дате заказа).

На самом деле обычно этот отчет формируется за 1 минуту и объяснять клиенту лишних 4.500 рублей на написание отчета тягой к идеалу не хочется.

С каждым годом я наблюдаю, как 1С в угоду производительности делает код решений все более и более сложным и запутанным:

  1. Печать документов реализована через запросы, хотя любая печать длится дольше, чем формирование печатной формы

  2. Проведение документов также реализовано через запросы. Но фишка в том, что запросы не могут реализовать всю логику, поэтому используется страшный в своей сложности гибрид запросов и кода.

  3. Аудиторы, которые принимают код в облачную 1С, тоже зачастую требуют каких-то формальных соблюдений правил написания кода в ущерб разумности использования этих правил.

  4. Документации кода и алгоритмов нет и не планируется, даже на закрытых ресурсах.

Иногда я ощущаю себя доктором, который избавляет клиента от ужасов типового кода 1С через упрощение сложности. Я делаю прививку простоты. KISS, делай это проще, дурачок.

c9ec26cff6f5059be78b97a59d08d81d.png

© Habrahabr.ru