Как писать неподдерживаемый код
Разработка - Рефакторинг и качество кода
Данная статья является переводом (с большой долей подсматривания в megamozg) известной статьи с небольшим приложением на мир 1С.
Если бы строители строили дома так же, как программисты пишут программы, первый залетевший дятел разрушил бы всю цивилизацию. Gerald M. Weinberg
Миром правит не тайная ложа, а явная лажа. В. Пелевин
В целях возможности трудоустройства я передаю эти советы из уст мастеров о том, как писать код, который трудно поддерживать, сложно изменить и невозможно понять. Любой программист, который придет после вас, потратит многие месяцы, чтобы сделать простейшие изменения. Более того, следуя этим правилам вы гарантируете себе пожизненную занятость, потому что никто кроме вас, даже находясь в адских агониях, не захочет поддерживать код.
Но вы же не хотите переусердствовать? Ваш код не должен выглядеть безнадежно, хотя является по факту таковым. Ведь существует риск попасть под рефакторинг, а нам оно совершенно ни к чему.
Содержание
Общие правила. Соглашения.
Чтобы помешать другому программисту, вы должны думать как обычный программист. Перед ним ваш гигантский труд. У него нет времени, чтобы прочитать все это и уж точно, чтобы понять. Он хочет быстро найти проблему, внести изменения и уйти, не ожидая побочных эффектов от вмешательства. Он рассматривает ваш код маленькими кусочками, и ваша задача - добиться того, чтобы он даже не смог представить общую картину ваших действий. Но куда важнее, чтобы он не смог игнорировать ни строчки вашего творения.
Программисты тешат себя иллюзиями наличия соглашений. Но каждый раз, слегка нарушая общие правила, вы заставляете его читать каждую букву вашего кода через увеличительное стекло. Хотя, вам может показаться, что любое отклонение делает код неподдерживаемым - но это не совсем правда. Все хорошо в меру. Тщательно разбросанные по коду нарушения имеют даже лучший эффект, чем явное игнорирование правил.
Пример:
Как правило, предполагается что процелура с названием ДополнитьСтруктуруНаСервере(Структура) дополняет некоторые данные в переданную структуру. Достаточно слегка изменить процедуру с учетом особенной платформы и у программиста уже будет некоторая непонятка происходящего:
&НаКлиенте
Процедура Тест_1(Команда)
Структура = Новый Структура;
Структура.Вставить("А", 1);
ДополнитьСтруктуруКлючомБ(Структура);
Структура.Вставить("В", 3);
КонецПроцедуры
&НаСервере
Процедура ДополнитьСтруктуруКлючомБ(знач Структура)
Структура.Вставить("Б", 2);
КонецПроцедуры
Прочитав только процедуру "Тест_1" можно ожидать что на выходе вы получите структуру с ключами А, Б и В. Но не тут то было. На первый взгляд все сделано верно, даже объявление переменной с использованием знач соответствует правилам. В тоже время, вы можете подобный код писать с директивой &НаКлиенте и получить абсолютно ожидаемое поведение и структуру с тремя ключами. Возможно именно подобный пример сделает пару часов работы вашего коллеги особенно приятными.
Ничего лишнего
Значительная часть искусства написания неподдерживаемого кода в именовании объектов метаданных, переменных и методов. Они ничего не значат для платформы и следовательно, предоставляют вам неограниченные возможности для того, чтобы поставить в тупик не одного сопровождающего.
1. Имена детей
Возможно вам стоит приобрести книгу "Как правильно назвать ребенка. 40000 русских и иностанных имен" и у вас никога не будет проблем с именованием переменных. В тоже время "Йцук" прекрасное имя и легко набирается. Если тем не менее вы до сих пор придумываете имена переменных, попробуйте "авыф", "апро", ну или наконец купите себе клавиатуру Дворака.
2. Однобуквенные имена переменных
Если вы называете свои переменные "и", "а", "к", их будет невозможно искать в редакторе. Кроме того, никто не догадается для чего они нужны. Если кто-нибудь упомянет о нарушении традиции называть счетчики циклов простыми буквами, чтимой со времен Fortran, напомните о том, что испанская инквизиция делала с еретиками. Более того, используйте однобуквенные переменные где угодно, кроме счетчиков циклов.
3. "Случайные" опечатки
Если же вы вынуждены использовать описательные переменные, просто "очепятайте" их. Поверьте, неправильное написание в какой-то функции или имени переменной способно свести на нет все удобства использования, не без этого, неудобного редактора от 1С. Добавляйте интернационализацию по вкусу.
4. Будьте абстракты
Используйте абстрактные слова и понятия, вроде "все", "это", "данные", "ссылка" и т.п, аналогично можете использовать цифры: Заполнить1(), ПосчитатьВсе(), ПроверитьЭто().
5. Сокращения (Акронимы)
Настоящие мачо не бояться сокращений, их понимание в крови и передается с молоком матери. Если же вы не знаете как сокращать, называйте ваши переменные осмысленно, а потом используйте глобальную замену, чтобы дать вашим переменным и методам непонятные имена и сокращения, подобно тому как делает обфускатор.
6. Синонимы
Пролистайте словарь или воспользуйтесь фантазией в поисках максимально возможного количества синонимов для одного и того же действия (например: показать, открыть, представить). Используйте их, когда хотите намекнуть, что есть тонкие различия между использованием методов. В тоже время, две подобных функции, которые могут иметь решающее значение, всегда называйте одинаковым словом. Например: "Печать" может означать: вывод печатной формы на экран, скрытую отправку на принтер или даже предварительную запись объекта.
7. Избегайте глоссария проекта
Запомните: написания глоссария - непрофессиональное нарушение принципа структурного дизайна, известного как "сокрытие информации". Если же вы вынуждены его писать, постарайтесь использовать рекурсивные определения. Дразните своего читателя, притворяясь, что вы даете информацию там, где ее нет ни грамма. Формулируйте ваши пустопорожние сентенции так, чтобы читатель испытывал чувство вины за неспособность понять что вы хотите сказать.
И никогда не используется конкретные примеры. Можете вполне оправдываться, что наличие примера будет вводить в заблуждение, будто это и есть все возможности, заложенные в программу. Запомните: люди уважают только то, что слишком абстрактно, чтобы легко понять. В конце концов еще ни одного академика не застали за приведением примеров.
8. Используйте правила других языков
Отлично подойдет любой язык: Клингонский, Вестрон, Дотракийский и даже родной язык ближайшего гоп-стоп района. Вполне можно вспомнить как в детстве вы придумывали слова разбивая на слоги и добавляя любой понравившийся вам слог. Таким образом, вы поддерживаете мир во всем мире.
9. Использование регистра
Можно сколько угодно спорить о правилах 1С относительно прописных букв, но намного лучше ввести собственное правило. Например: выделять псевдослова в переменных или случайным образом выделять прописные буквы. Например: ПараллелоГрамм.
10. Повторное использование переменных
Во всех случаях, допускаемых платформой, давайте переменным, глобальным, клиентским или серверным методам одинаковые имена. Желательно повторно использовать имена реквизитов внутри процедур в качестве имен параметров, переданных для обработки. Это делается для того, чтобы сопровождающий внимательно изучил область действия каждой переменной. Особенно приятно, передавая в функцию переменные А и Б, в объявлении функции поменять их местами; использовать одну переменную для разных целей или просто слегка менять назначение.
11. Подчеркивание, ваш надежный друг
Используйте _и__ в качестве имен переменных. Особенно неплохо работает приписывание их в начало или конец имени переменных, реквизитов или методов. Более того, это в целом не противоречит стандартам 1С.
12. Смешивайте
Пишите на разных языках. Если все в вашей организации пишут на русском, пишите на английском. Можете применять смешанно, например переменные называть на русском, а методы на английском.
13. Специальные или эмоциональные имена
Отлично подходят имена которые выдают себя за определенные объекты: Параметр = (счетфактура - накладная) / проценты. Также можно выбирать имена переменных с неуместным эмоциональным оттенком: Хрень = (половинаХрени - втораяПоловина) / СуперДоля.
14. Игнорируйте соглашения
Это самое простое, компилятор на это не отреагирует. Также можно предложить свои собственные правила, тогда можно обвинять окружающих в их несоблюдении.
15. Ложные имена
Убедитесь, что каждый метод делает чуть больше (или меньше), чем предполагает его название. В качестве простого примера метод ПроверитьЗаполнениеСчетФактуры(СчетФактура) в качестве побочного эффекта может записывать текущую версию документа в базу данных.
16. Ограничения возможностей человека
Просто запомните, человеческий мозг может комфортно обрабатывать не более 7 фрагментов информации одновременно. Пользуйтесь этим. Я думаю вы сами все поняли.
Продолжение следует...
Когда у меня будет в следующий раз хорошее настроение, мы рассмотрим главы:
- Камуфляж (эффективный код, пространства имен, вымышленные функции, имена кода vs интерфейса, параметры сеанса, директивы препроцессора, отвлекающие маневры)
- Документация (ложь во имя времени, только очевидное, "как" (а не "почему"), шаблоны, баги, унижение других, устаревший код)
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Нейросети Рефакторинг и качество кода Запросы Разработчик 1С 8.3 Абонемент ($m)
Нейросеть написала запрос или процедуру для вашей базы 1С, и непонятно, все ли имена в нём настоящие. Обработка компилирует текст без выполнения, сверяет его с метаданными этой базы и к каждой ошибке пишет настоящее имя, например ВНаличииОстаток вместо выдуманного КоличествоОстаток. Список ошибок с подсказками одной кнопкой копируется обратно в чат с моделью.
10 стартмани
02.11.2026 270 1 nedomolkov.ivan 1
Рефакторинг и качество кода Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
Одна проверка в обработчике кнопки может выглядеть достаточной, пока ту же операцию не вызовут из другого места. На примере управляемой формы разберём, почему так происходит, как разместить проверку в общей серверной функции и чем отличается удобная проверка ввода от обязательного условия выполнения операции.
29.10.2026 314 YA_777378709 0
Рефакторинг и качество кода Разработчик Бесплатно (free)
Рассказываем, почему качественный код – это не техническая прихоть, а актив, который помогает бизнесу быстрее адаптироваться к изменениям и запускать новые фичи без бесконечного преодоления техдолга. Показываем, как объяснить бизнесу ценность рефакторинга через понятные признаки: замедление разработки, неточные оценки, страх перед legacy и хрупкость системы. Разбираем, почему неправильный рефакторинг может быть дороже его отсутствия, какие анти-паттерны ломают процесс и как не превратить улучшения в бесконечную переделку ради переделки. Объясняем, как сделать рефакторинг частью культуры команды: договориться с бизнесом, научить разработчиков видеть проблемные места, закрепить правила и поддерживать улучшения на уровне тимлидов, архитекторов и всей команды.
28.10.2026 410 Pavel791 0
Рефакторинг и качество кода HighLoad оптимизация Системный администратор Разработчик Стажер 1С 8.3 Абонемент ($m)
Если к HTTP-сервису 1С обращаются сразу несколько программ, сколько запросов в секунду он успеет обработать? Я опубликовала простой HTTP-сервис на нашей "подопытной" конфигурации «Нано-УТ» (файловая база, Apache, без прав администратора) и нагрузила его скриптом на Python. Ответ: около 15-16 запросов в секунду, сколько бы клиентов ни обращалось одновременно. Запросы ждут своей очереди, и при 32 клиентах ответ приходит через 2 секунды вместо 64 мс. Заодно разобрала скрипт из первого варианта статьи: он «проверял» сервер, который отвечал по одному, и считал ошибки вместе с успешными ответами. В архиве исправленный скрипт, учебный сервер, HTTP-сервис для 1С и инструкция по запуску.
1 стартмани
23.10.2026 475 Ninel_S 3
Рефакторинг и качество кода Разработчик 1С 8.3 Абонемент ($m)
Запустили Analyzer 1C 2.7.65 на промышленной конфигурации (596 модулей, 13 669 функций) и исследовали перегруженные функции (до 1887 строк), циклические зависимости и экран «Циклы» (кольцо из 64 модулей). Разобрали, почему популярные метрики (McCabe, связность) не представлены в продукте вендора, и составили пошаговый план разделения модуля. Привели проверенный платформой 8.3.27 пример до и после рефакторинга и выявили скрытую ловушку загрузки модулей с точкой в имени.
9 стартмани
19.10.2026 426 Ninel_S 2
Рефакторинг и качество кода EDT СКД Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)
Одиннадцать граблей схем компоновки, которые не видно в конструкторе и не ловит EDT, на реальных отчетах БП КОРП. Формат числа задается в двух местах, и условное оформление варианта перебивает формат поля. Ресурс складывает штуки с часами, и помогает выражение «только когда единица одна». Ресурс пуст в детальных записях, параметр не появляется в шапке без userSettingID, valueListAllowed ломает границы периода, Остатки и СрезПоследних с параметром периода падают с «Несоответствием типов», title без xsi:type дает «Исключение XDTO» при загрузке. В конце код проверки схемы из файла до обновления базы, сводная таблица и чеклист.
16.10.2026 446 Konstmax13 2
Инструментарий разработчика Нейросети Рефакторинг и качество кода EDT Разработчик 1С 8.3 1С 8.5 1С:Бухгалтерия 3.0 Бесплатно (free)
Как ИИ-агент (Claude Code) работает в живом EDT-проекте 1С:Бухгалтерии КОРП 3.0: из чего собрать стенд с MCP-сервером для EDT, как ставить задачи агенту, где он ломает проект и какие проверки это ловят. Реальные случаи: рукописные метаданные, ронявшие конфигуратор; четыре дня зависшего обновления из-за порядка блоков в Rights.rights; ошибки, которые EDT пропускает, а платформа нет; сплошная сверка вместо «вроде работает». В приложении шаблон CLAUDE.md, шаблон правила, чеклист перед обновлением базы и скрипты проверки ролей и схем СКД.
15.10.2026 3344 Konstmax13 11
Рефакторинг и качество кода Тестирование QA Разработчик 1С 8.3 Абонемент ($m)
Инженерный анализ влияния (Impact Analysis) при изменении общего метода в 1С:Предприятии: почему штатный поиск ссылок скрывает 99% зависимостей и как обратный обход графа вызовов выявляет 370 скрытых потребителей на глубине 3 уровней. В статье — верификация сквозной цепочки обмена с маркетплейсом; в архиве-компаньоне — автономный BFS-анализатор на Python, слепки графа и план регрессионного тестирования.
1 стартмани
12.10.2026 282 Ninel_S 0
На самом деле я почти все приведенные примеры в жизни видел и каждый раз мне не понятно было как реагировать, плакать, смеяться или рукава закатывать и по локоток залазить. Каждый увидит и вынесет что-то свое.
+1
Подавляющая часть таких творений при необходимости выкидывается нафиг и пишется заново в том числе благодаря тому что по сути реализованного функционала находятся на уровне сложности средней школы
Коротко по памяти:
- Если переменная две буквы - она 34-ая.
- Если комментарий - Код из типовой, лишний кусок.
- Если Иванов или глМонопольно тогда ф="admin@nashamail.ru
- В 80% документов обработка проведения начинается с очистки табличной части, которая потом заполняется по правильному и документ проводится.
- Дт ПланСчетов.Бюджетирование .............. Кт.ПланСчетов.Бухгалтерский.
- Если ВШтуках(ТЧ.Товар)=0 тогда ТЧ.Работа = 1;
- Если о=1 Тогда Сообщить("Позвоните Алексею, он проведет");
... Аж поплохело опять.
- Имена переменных (1,2,3) слишком легко рефакторятся в нынешнем конфигураторе. Имена объектов метаданных могут запутать больше, но тоже относительно легко рефакторятся.
- 4,5 - Эти советы могут даже упростить разбор при хорошем архитекторе. В самом деле ДлинныеМногосложныеНиОЧемНеГоворящиеИмена1С давно уже притча во языцех. А в других языках и платформах вполне успешно находят компактные, но читаемые имена методов и свойств. Ну а во многих SQL-разработках очень часто используются алиасы к таблицам из первых букв таблиц. что-то типа
sel ect ST.code, ST.description fr om SomeTable ST
- 7 очень сложно реализовать. Как ни крути в каждом проекте устаканивается свой язык. И как ни крути этот язык с одной стороны придётся изучать новому программисту, с другой - он проникает не только в код, но и как минимум крутится у пользователей. Не обязательно его прописывать где-то, он всё равно есть. А постоянно писать называя в коде черное уайтом тоже не вариант, неоправданно усложняет жизнь самому себе. Но интересно, что противоречия в языке проекта возникают и без участия разработчика, тут достаточно не мешать (вспоминаем УПП и группы номенклатуры, номенклатурные группы, типы номерклатуры, виды номенклатуры и т.п.).
- 8 С удивлением узнал, что клингонский в uniocode (но они вроде как не воспримутся как буквы, например это видно из моей , да и из понимания utf-8 вроде как почти следует). У дотракийского нет своих символов. Немецкие идентификаторы и русскоязычная фонетическая калька с немецкого вполне читабильна (см. замечание про язык проекта).
- 9 самоеэффективноевообщеничегорегистромневыделять. А если еще и сокращать, то точно не читается.
- 10 - да, хороший совет, особенно, если дополнить, что области видимости этих переменных должны плотно перемешиваться. Желательно до самого верха. И использование глобальных переменных в разных частях программы окончательно выбьет энтузиаста рефакторинга.
- 11, 12 - слишком легко отрефакторить.
... и т.п.
Да и вобще для тех, кто перечитал всю УПП и пару самописок на ТиС 8.6 (да, я старый) эти шалости уже вряд ли усложнят жизнь.
А вот что усложнит (если говорить именно про код, а не про решение в целом):
- Яростно смешивать использование объектов разных областей видимости. Желательно объектов с состояниями (переменных в частности). Желательно не только в вертикальном смысле, но и в клиент-серверном. При этом посолить разным использованием в разных частях.
- goto. Не забываем. Он есть.
- Копипаст кусков по 10-100 строк, обильно поперчённый мелкими изменениями этого копи-паста. Рефакторинг становится невыносимо тяжёлым, кода становится много, способов отстрелить коленку по самые гениталии - масса.
- Обильно смешать в одном модуле директивы компиляции и инструкции препроцессора. Инструкции препроцессора сделать так, чтобы начало было в одной функции, окончание в другой. Интересно поведение платформы в опечатках в инструкции . Ошибку не выводит (ну или когда я это видел - не выводило).
#Если Клинт Тогда
- Имена переменных делать либо Пер2254, либо оченьдлинныебестолковыеимена. При этом длинные имена лучше. Никто не обвинит в том, что имена не говорящие.
- Как и предлагает автор - игнорировать и перевирать рекомендации по именованию от 1С. Методы и функции писать от существительных, переменные - от глаголов.
- Динамическое формирование кода и его Выполнить() - уничтожит надежду на рефакторинг, а отладку сделает пыткой, запрещённой гаагской конвенцией. Вон, эти сра... странные Служебные события из БСП тому неплохой пример (хотя, да, тому кто их уже разобрал будет проще). Безусловно, часть кода надо хранить и в объектах данных. Причем в конфигурации не должно быть интерфейса для редактирования (только внешними обработками).
- Запросы тоже надо генерировать сборкой в коде, где можно. Особенно эффективно с нестандартным форматированием запроса (отформатировать нельзя из-за сборки запроса в коде). Разумеется заполнение временной таблиц не должно быть рядом с её использованием.
- Процедуры и функции. Они должны быть длинными. 3000 строк - хорошее начало. Функции с побочными эффектами. Передача данных - где возможно через глобальные объекты (переменные и другие). Активно использовать изменение параметров переданных по ссылке. Желательно такое изменение делать через 2-3 уровня вложенности. Имена переменных, передаваемых, как параметры не должны быть похожими на имена параметров или должен быть изменен порядок процедура А(б,в,г) должна вызываться как А(в, б, г)
- Старый добрый хардкод. Не забываем его, он нам пригодится. Найти по коду 1367 должно быть раскидано по конфигурации и причем желательно, чтобы это относилось к нескольким разным справочникам. Прямое указание имен серверов/пользователей/IP и т.п. в коде не позволят другим безопасно отлаживаться (тестовые данные отлично уйдут в боевую систему)
- Null, неопределено и пустая ссылка в одном условии (да еще и в запросе) позволят отлично провести последний вечер в этой компании не очень опытному преемнику.
- Рекурсия, но не прямая, а через 1-2 уровня (особенно с динамическим кодом). Полезно от любителей отладки.
- При неправильном поведении программы и при недопустимых параметрах ошибка должна отлавливаться и прятаться.
- Если производительность позволяет, то должны быть транзакции, которые откатываются в неочевидных местах. ("мамой клянусь, что записывал!!!")
- Зависимости между сущностями. Код должен быть как можно более зависим. Зависимости должны быть циклическими. Неочевидными (в модуле менеджера одного объекта операции по другому). Плохоразрываемыми (напрмер, если есть зависимости А, Б, В и В, Г, Е, причем в "В" куча логики для обеих, то на это уже сложнее разорвать). Все процедуры и функции делать с Экспорт (неиспользуемые станут не видны). Всё максимально должно быть stateful. Причем этот state не должен быть очевиден Отличный прием - разные проводки в зависимости от времени суток. Перепроводи, коллега, документы за неделю, мы утром посмеёмся.
- Некоторые блоки должны быть "однонаправленными". Т.е. провести документ можно, а чтобы отменить проведение нужно поменять аккуратно десяток-другой объектов данных. При проведении можно менять реквизиты других объектов (при отмене не возвращать!)
- Сложные но частые операции обслуживание не должны быть в конфигурации. Только внешними. Ну и конечно, SCM и хранилище конфигурации не должны быть. В принципе.
- Используйте нестандартные и недокументированные возможности (без пояснений в коде, конечно!).
- RLS. Если производительность позволяет, то можно устроить замечательный ад с отладкой.
- Используйте библиотеки/компоненты которых нет в конфигурации и обычно нет на ПК.
- Для интеграции нужно использовать самоизобретённые велосипеды.
А если серьёзно, то к сожалению большая часть из предложенного мной уже скорее всего есть в вашем коде. Ну и как было отмечено наш "многоуважаемый вендор" тоже подкинул в топку этого паравозика не одно полено (правда из лучших побуждений и поленья эти лицензионные и выполнены в интерфейсе Такси).
Если вы не против, следующую статью могу начать с дополнения вашими советами. И они у вас реально "вредные". Как правильно отмечено, замечаются они после "погружения" и всех согласований. Но почему то не оставляет мысль что собраны они с реальных примеров. А если такая конфа действительно существует, то страна должна знать своих героев.
2 примера "своих героев" я привел. Как минимум это БСП и служебные сообщения в ней (отладка - ад, по крайней мере 2 года назад была адом). УПП с замечательными именами типов (чем отличается тип от вида от группы и от категории - я внятно пользователю если что не объясню). Примеры кода с копипастой тоже там же в типовых найти можно. Запросы в модулях документов (в модуле менеджера, если память моя не врёт) тоже собираются (оно отчасти хорошо и не совсем про мой пример, они над форматированием стараются не колдовать).
А 1С еще честно пытается сделать поддерживаемый продукт. Любое "отраслевое" Г берём и там перечисленные проблемы во весь рост.
А вот "Null, неопределено и пустая ссылка в одном условии (да еще и в запросе)" - верный способ попасть в мою любимую , тут, да, не пометил.
Да, конечно...
"Х = "
Хотя, конечно, бывает и (полу)сознательное приведение проекта в непередаваемый вид.
Относительно "отраслевых"... Нормальные отраслевые решения будут только тогда, когда компании занимающиеся их разработкой кроме трат на агрессивный маркетинг и "втюхивание" начнут тратить средства на постановку методологии разработки. Я уже не говорю о том, чтобы менять не только себя, но и мир вокруг себя.
Вообще давно хотел бы исследовать вопрос, что крупные игроки мира 1С предложили в плане методологии разработки (ну окромя самой 1С). Есть хорошие примеры из мира web: Bootstrap by Twitter; AngularJS by Google. А что у нас есть от наших "крупных игроков"? Возможно я просто плохо исследовал этот вопрос?
Ровно так реализован доступ к объектам в 1С: Документообороте с его адским регистром "ДескрипторыДоступаКОбъектам"
Это гарантирует бесконечный процесс отладки и жалкие попытки разработчика воспроизвести ситуации с ошибкой доступа к объектам, возникающие в процессе настройки прав пользователей и доработке конфигурации.
Один и тот же документ проводится то в один регистр, то сразу в два.
Оказалась типовой отчет при формировании делает вторую проводку в регистр!
Зло-советы работают и они среди нас!
Это просто какие-то агенты сатаны на Земле. Любимая функция - шаблон с недокументированными свойствами. Любимое хранение данных - глобальный кеш с использованием внешних dbf файлов! Как же хочется кого-то из разработчиков поймать и сжечь! А руководство очень удивляется, что любые изменения стоят им так дорого.
Люди, кто знает, кто ее делал, откликнитесь!
Остальное уж всё рассказали.
Есть, правда, ещё один вариант: написать сверхгибкий гиперуниверсал, где вся механика, логика и структура вынесены на уровень абстракций, реализованных в режиме "Предприятие". Тогда вы единственный держатель ноу-хау, и только зубр методист-внедренец вам конкурент. И главное, никаких подлянок, сплошь позитив, но какие где надо сделать перенастройки, уже не знание 1С решает, или там типовых нетленок, а исключительно знание вашей логики "шаблонов-для-образцов-типовых-логических-этапов".
Я честно пытался сделать на стандартных вводах все, но реально удобства 0 (за один проход бизнес процесса нужно открыть около 10 форм и думать что и в каких случаях туда вводить, сейчас это реализовано на 1 форме, со свистелками и перделками).
Но заказчик доволен интерфейсом, тем что сотрудникам рядового звена вообще сейчас не надо думать, ввел 2-3 поля и нажал кнопку.
То что раньше на низших уровнях вводилось по 5-10 минут + параллельно частично велось в Excel сейчас занимает 2 минуты + отпала необходимость в Excel.
Да поддерживать такой код в разы сложнее, но в любой операции где проводится что то нестандартное есть подробное описание зачем это + описание этого куска процесса. + весь код с модулей форм процессов родителей перенесен в общие модули и отрефакторен (говнокод, костыли, велосипеды все это все равно есть, но их присутствие я постарался сделать минимальным). По сути дела проблемы могут возникнуть только в одном случае - если полностью изменится текущий бизнес процесс, но это произойдет вряд ли.
По сути дела получилась целая подсистема на одной форме, и именно этого и хотел заказчик. А то что для реализации этого пришлось крайне попотеть это нормально.
Сам недавно ковырял такой код в 7.7, модули дописанные, такое ощущение что кто-то пишет как курица лапой, я даже когда начинал так не писал) Еще умудрился, засечь пару ошибок в итого. Но исправлять не стал, меня не это просили делать)) К тому-же все эти шалости проходят только с новичками. В конце концов, есть специалисты которые ломают защищенные программы на самом высоком уровне, для них такая умышленная путаница, что семечки погрызть)) Думаю и в 1С таких спецов немало.
А по теме, можно заявить об таком специалисте, и в полне авторитетно, что он некомпетентный в данной профессии и все признаки будут на лицо, все то что вы перечислили, в не правильном виде изложенный код, могут стать вашим приговором в этой профессии и поди потом докажи обратное другим работодателям)) Так что палка как всегда это бывает о 2 концах;-)
В конце, концов...вы не увидели в своих высказываниях такой конец, значит мыслите вы крайне субъективно, а для программиста это роскошь) Ибо все должно быть логично от начала и конца. И не наступать на собственные-же услужливо разложенные самим-же грабли;-)
"-Я, Стив Программулькин, всегда пишу идеальный код, разработал десять тиражных решений... Пишу быстро и качественно одновременно для 3-5 проектов, попутно разруливая техподдержку ранее наваяных идеальных решений."
Все косячат, но не все рефакторят.
Разговоры о качестве кодинга мне понятны среди разработчиков тиражных решений... Лично у меня есть опыт участия в разработке нескольких тиражных решений. Так вот, ребята, когда все сроки прошли, а проект должен быть сдан - костыли и просто невероятно замысловатые велосипеды рождены часто недосыпом и передозировкой кофе... А нубы потом хватают такой кусочек и бегут на мистапомойки.
Если брать конкретно разработчиков типовых - я вижу, что много и очень много рефакторится. И это хорошо.
Замечу по теме...в свое время когда появились Спектрумы с ограниченной памятью, многие наоборот применяли трюки в рамках жесточайшей экономии памяти. Например сканировали ПЗУ на предмет нужного машиного кода для своего кода и делали переходы на эти участки, так как его писать не надо он уже есть в памяти. А языки высокого уровня - это для лентяев и прикладников, которым все эти тонкости и нюансы не к чему, они просто не знают данного предмета. Так что и понятно почему появляются такие статьи, если учесть что в машинном коде нет, не Идентификаторов не переменных и постоянные ГОУ-ТУ) А от себя добавлю, разбираться в таком коде, о котором говорит автор согласен возникает чувство брезгливости и неинтересности, как заметили некоторые от такого гавнокода. Чем вероятно и пользуется автор, чисто из психологических настроений новичков.
И это давно не секрет такие примочки - возьмите софт небезызвестной фирмы Рарус, там этого дерьма предостаточно и в более коварном виде)
PS: не проект "красит" человека, а код) Обезьяны то-же палку в руках держат, о двух концах;-)
И все это откорячки на нехватку времени и попытка оправдать такой говнокод в своих-же глазах. Имейте уважение к тем кто будет читать ваши произведения "искусства". Хотя я знаю очень много прогеров, которые не заморачиваются таким чтивом, а просто переписывают его, для некоторых это быстрее, чем разобраться в чужом говнокоде.
Пы.сы. собственно сам автор исходной статьи - , чем он может быть известен? Да боюсь ничем, ибо даже в цитатах на данную статью редко вспоминают кто ее написал и где ее исходники. Да и что-то мне подсказывает что не важно это, ибо она для всего мира программирования пригодна. ))))))))
Да то-же думаю неважно кто написал - если она имеет такой отклик, значит кем-то востребована и имеет общую тенденцию мышления многих в этом вопросе. Хотя сам наверное знаешь насколько нынче ценят нашего брата;-) От туда и ноги растут у этой статьи.
Хотя я думаю иначе, прогер если сам ценит себя и так найдет работу где угодно.
Меня удивляет другое, как писатели такого не заснут вечным сном сами блин)
1) самому сложно работать с таким кодом - будут ошибки, потеря времени и сил;
2) если вдруг сам надумает уволиться на повышение - будут постоянно доставать с прошлой работы;
3) если начальство возьмется за ум, либо придется работать с другими программистами в команде - рискует быть уволенным с треском.
PS: Сам в свое время работал над "творениями" подобного товарища. Его боялись уволить, но сильно хотели, т.к. он сильно всех достал. Не только качеством кода, но и поведением. Меня пригласили проанализировать его код и оценить, смогу ли я с ним работать. После недельного анализа сказал, что смогу. После этого товарищ был выгнан с треском и занесен в черные списки всех знакомых. Код после него, конечно, переписывался долго, но ничего фатального не случилось.
1. Все писать в одной максимум двух процедурах, зачем делить, когда одна процедура может делать всё.
2. В 1 пакетном запросе вытащить все что может или могло бы пригодится.
3. Никогда не удалять лишний код, просто комментируй, а еще лучше, просто делай другую процедуру и меняй вызов на неё
4. не используй менеджеры модули и тд. все пиши в форме элемента или общем модуле
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 391560
Создание 25.08.15 12:42
Обновление 25.08.15 12:42
Просмотры 27153
Загрузки 0
Рейтинг
99
Комментарии 65
Код открыт Не указано
Рубрики Рефакторинг и качество кода
Кому Разработчик
Тип файла Нет файла
Платформа Не имеет значения
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)