Как писать неподдерживаемый код

Публикация № 391560

Разработка - Практика программирования

GTD коддинг

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

Данная статья является переводом (с большой долей подсматривания в 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 интерфейса, параметры сеанса, директивы препроцессора, отвлекающие маневры)
  • Документация (ложь во имя времени, только очевидное, "как" (а не "почему"), шаблоны, баги, унижение других, устаревший код)

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Ibrogim 1186 25.08.15 13:37 Сейчас в теме
И что, вас примут на работу обратно устав копаться в говнокоде? И ЗП поднимут, да и рекомендации раздадут )
Или я юмора не понял? а ведь может ещё кто нибудь не понять...
kaliuzhnyi; Bukaska; Baksheev-Nikita; +3 Ответить
15. vandalsvq 1197 25.08.15 17:26 Сейчас в теме
(1) Ibrogim, в детстве "Вредные советы" Остера читал? Если нет почитай ))))
На самом деле я почти все приведенные примеры в жизни видел и каждый раз мне не понятно было как реагировать, плакать, смеяться или рукава закатывать и по локоток залазить. Каждый увидит и вынесет что-то свое.
xantif_2000; +1 Ответить
16. qwinter 629 25.08.15 17:37 Сейчас в теме
(1) Ibrogim, зря иронизируете. С несколькими такими "специалистами" я реально сталкивался. Они просили повышение зп, их увольняли, принимали других которые не могли разобраться в их "гениальном" творении, и начальство всерьез считало новых тупыми (программист на предприятиях был в единственном числе), и через какое то время просили вернутся этих "гениев".
andreypahov; xantif_2000; METAL; dyuha; Terve!R; cleaner_it; shalimski; boln; Designer1C; +9 Ответить
2. boln 1031 25.08.15 13:51 Сейчас в теме
Если ты единственный прогер на фирме, то можно рискнуть так шифрануться :)
Если нет, то выкинут за порог и размер ботинок не спросят. И ведь не поспоришь.

Конечно же, юмор, из серии "вредные советы".
3. Swetlana 20 25.08.15 14:00 Сейчас в теме
Всё зависит от начальства :)
4. dgolovanov 25.08.15 14:13 Сейчас в теме
О да, знакомо. Уволили "коллегу", остался код. Он очень любит переменные с циферками. Отбор1, Реализация1, ажтрисёт меня от этого.
Bukaska; pavlov_dv; +2 Ответить
5. velll111 35 25.08.15 15:00 Сейчас в теме
Чел, просто молодец!!!!!!! Классная статья. Иногда есть клиенты, которым так и хочется сделать все правильно (деньги никто не отменял), но с одним противным НО!))))
Обязательно пиши продолжение!!
6. Yury1001 1449 25.08.15 15:05 Сейчас в теме
Да, да, был такой опыт, много лет назад: длинные строки (больше 500 знаков) не открываются в конфигураторе 7.7; переменные из русских и латинских букв ОООО в разных последовательностях и тому подобное, но особо этим никому ничего не докажешь – можно применять в исключительных случаях.
+1
7. METAL 120 25.08.15 15:25 Сейчас в теме
8. newtype 25.08.15 16:02 Сейчас в теме
Прекрасная статья и язык,с удовольствием прочитал, долго смеялся.Спасибо. Интересно прочитать продолжение.
9. boln 1031 25.08.15 16:17 Сейчас в теме
10. boln 1031 25.08.15 16:22 Сейчас в теме
Как-то давно, лет 10 назад, видел серьезный код на 7.7 - а имена переменных и процедур сплошь матерные :)
11. wunderland 201 25.08.15 16:23 Сейчас в теме
Даже не знаю чего от этой статьи больше - вреда или пользы...
nkp14108; +1 Ответить
12. baton_pk 409 25.08.15 16:28 Сейчас в теме
10. Повторное использование переменных

Ага, заходишь в модуль и пишешь в первых строчках:
Перем Запрос, Результат, Выборка;


прямо #define true false по-одинэсовски
13. antz 25.08.15 16:42 Сейчас в теме
14. ya.Avoronov 110 25.08.15 16:46 Сейчас в теме
Беглое чтение таких статей может доставлять: сперва начал читать с пункта 1. С некоторыми пунктами даже согласился)). Дошел до комментариев, осознал, что это юмор и упрек мне по тем самым пунктам. Буду читать сначала... ЭХХ
dyuha; echo77; Terve!R; +3 Ответить
17. oleg212 25.08.15 19:26 Сейчас в теме
Замечательно и с юмором. В каждой шутке есть доля шутки... )))
18. CheBurator 3443 26.08.15 01:14 Сейчас в теме
Детский лепет
Подавляющая часть таких творений при необходимости выкидывается нафиг и пишется заново в том числе благодаря тому что по сути реализованного функционала находятся на уровне сложности средней школы
Yashazz; Alex17; for-elenak; +3 Ответить
40. dyuha 23 27.08.15 04:08 Сейчас в теме
(18) CheBurator, На прошлой работе ковырял самописку на 77 аля ЕРП+БИТ;Финанс+ЦРМ+... ее с нуля четыре года писал "Спец каких больше не родит земля русская" (с) ФинДир. Потом два прогера два года (спасибо им, очень помогли с разбором кода) лепили заплатки, потому что срочно, лишь бы работало, без разрешения ничего не менять - это наша интеллектуальная собственность.
Коротко по памяти:
- Если переменная две буквы - она 34-ая.
- Если комментарий - Код из типовой, лишний кусок.
- Если Иванов или глМонопольно тогда ф="admin@nashamail.ru
- В 80% документов обработка проведения начинается с очистки табличной части, которая потом заполняется по правильному и документ проводится.
- Дт ПланСчетов.Бюджетирование .............. Кт.ПланСчетов.Бухгалтерский.
- Если ВШтуках(ТЧ.Товар)=0 тогда ТЧ.Работа = 1;
- Если о=1 Тогда Сообщить("Позвоните Алексею, он проведет");

... Аж поплохело опять.
d.zhukov; andreypahov; METAL; Дмитрий74Чел; AzagTot; Fox-trot; vladir; KrivosheevEV; bulpi; dgolovanov; qwinter; charushkin; +12 Ответить
41. qwinter 629 27.08.15 08:51 Сейчас в теме
(40) dyuha,
Если о=1 Тогда Сообщить("Позвоните Алексею, он проведет");
это пять!!!!!!!!!!!!!!!!!
sogesti; andreypahov; bulpi; dgolovanov; +4 Ответить
19. speshuric 1208 26.08.15 02:27 Сейчас в теме
Не круто.
  • Имена переменных (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. Если производительность позволяет, то можно устроить замечательный ад с отладкой.
  • Используйте библиотеки/компоненты которых нет в конфигурации и обычно нет на ПК.
  • Для интеграции нужно использовать самоизобретённые неидемпотентныевелосипеды.
Это только собственно про сам код. Про архитектуру я даже начинать писать боюсь. Мои рекомендации интересны тем, что они большинство из них видны только после погружения. Т.е. уже после того, как бедняга согласовал сумму и сроки, бгг.

А если серьёзно, то к сожалению большая часть из предложенного мной уже скорее всего есть в вашем коде. Ну и как было отмечено наш "многоуважаемый вендор" тоже подкинул в топку этого паравозика не одно полено (правда из лучших побуждений и поленья эти лицензионные и выполнены в интерфейсе Такси).
andreypahov; izidakg; jif; METAL; json; _also; VitaliyCeban; ffgnebel; atomskxs; almierm; K_A_O; xavi; 1v7; orfos; peshitepisma; worker1c; Irwin; TreeDogNight; Fox-trot; Mick2iS; Yashazz; dj_serega; A_Max; garik80; vladir; dachnik; bulpi; dgolovanov; mtv:); Enot; dyuha; Redokov; miralisssa; ivazzz82; the1; 1cNike; Дмитрий74Чел; weissfeuer; Karmerruk; Krio2; sergelemon; Bukaska; DeD MustDie; dour-dead; AlecoZAV; Gesperid; MSChe; baton_pk; KapasMordorov; kuntashov; fancy; PowerBoy; pavlov_dv; vandalsvq; Артано; +55 Ответить
20. vandalsvq 1197 26.08.15 05:35 Сейчас в теме
(19) speshuric, спасибо за дополнение. У вас конечно более прикладной к 1С вариант, хотя кое-что из описанного есть в следующих главах ("камуфляж" например).
Если вы не против, следующую статью могу начать с дополнения вашими советами. И они у вас реально "вредные". Как правильно отмечено, замечаются они после "погружения" и всех согласований. Но почему то не оставляет мысль что собраны они с реальных примеров. А если такая конфа действительно существует, то страна должна знать своих героев.
22. speshuric 1208 26.08.15 06:19 Сейчас в теме
(20) Я не жадный (и вообще как бы не одинэсник считаюсь). Так что мои советы можете использовать как хотите.
2 примера "своих героев" я привел. Как минимум это БСП и служебные сообщения в ней (отладка - ад, по крайней мере 2 года назад была адом). УПП с замечательными именами типов (чем отличается тип от вида от группы и от категории - я внятно пользователю если что не объясню). Примеры кода с копипастой тоже там же в типовых найти можно. Запросы в модулях документов (в модуле менеджера, если память моя не врёт) тоже собираются (оно отчасти хорошо и не совсем про мой пример, они над форматированием стараются не колдовать).
А 1С еще честно пытается сделать поддерживаемый продукт. Любое "отраслевое" Г берём и там перечисленные проблемы во весь рост.
heavymetal; knight2007; +2 Ответить
31. heavymetal 86 26.08.15 11:42 Сейчас в теме
(19) speshuric, Ваши советы не просто вредны для других программистов, но и для самой программы тоже. Для тормозной без этого 1С это может быть трудно для переваривания
33. speshuric 1208 26.08.15 14:58 Сейчас в теме
(31) heavymetal, Неа. Там лишь пара вредных для производительности советов (и я их специально отметил). А некоторые так даже еще и ускорить помогут: "Однонаправленные" блоки могут быть важным костылём в оптимизации, "библиотеки/компоненты которых нет в конфигурации и обычно нет на ПК" - тоже (например банальный вызов bulk copy), неидемпотентные велосипеды - тоже могут оптимизировать производительность (жертвуем затратами на поддержание логической целостности). Эх! И как я мог забыть! Есть же еще один способ: навкрячивать в конфу прямых запросов к SQL!!!! Следующий сопровождатель может себе глаза на этом вырвать! И типа же оправдание есть "штобы быстро"

А вот "Null, неопределено и пустая ссылка в одном условии (да еще и в запросе)" - верный способ попасть в мою любимую мышеловку, тут, да, не пометил.
34. vandalsvq 1197 26.08.15 15:15 Сейчас в теме
(33) speshuric,
навкрячивать в конфу прямых запросов к SQL
а в 7.7 я это ой как любил, даже целый класс накатал чтобы было проще :)
35. speshuric 1208 26.08.15 15:41 Сейчас в теме
(34) там это было вполне оправдано. В 8.0 уже спорно. В 8.3 уже только очень специфические сценарии.
21. RealEscander 835 26.08.15 05:55 Сейчас в теме
>Если вы называете свои переменные "и", "а", "к", их будет невозможно искать в редакторе

Да, конечно...
"Х = "
23. vandalsvq 1197 26.08.15 06:24 Сейчас в теме
(21) RealEscander, не забудь что пробел там может быть не один и не два, а целый таб или вообще нет, в общем голь на выдумку хитра.
(22) видать мне "везет" с отраслевыми не работать, и видимо мое мнение о большинстве из них не так далеко от правды. ОК. Принято, дополню когда буду писать далее.
24. speshuric 1208 26.08.15 06:34 Сейчас в теме
(23) отраслевые обычно тоже противные, но их авторы себе не враги, они тоже хотят сделать поддерживаемый продукт (при смене разработчиков внутри себя). Это общая беда. Часто кривые решения рождаются из самых лучших побуждений. И не всегда плохие технические решения - плохо. Иногда они зато реализуются настолько быстро что дают критичное рыночное преимущество.
Хотя, конечно, бывает и (полу)сознательное приведение проекта в непередаваемый вид.
25. vandalsvq 1197 26.08.15 06:46 Сейчас в теме
(24) speshuric, ну если честно взглянуть на себя со стороны, то подобные проблемы можно обнаружить и у себя, причем часто делаешь их не столько осознанно, сколько под давлением обстоятельств. В основном конечно время больше всего давит, но это уже другой разговор.
26. vandalsvq 1197 26.08.15 09:17 Сейчас в теме
(24) и в продолжение...
Относительно "отраслевых"... Нормальные отраслевые решения будут только тогда, когда компании занимающиеся их разработкой кроме трат на агрессивный маркетинг и "втюхивание" начнут тратить средства на постановку методологии разработки. Я уже не говорю о том, чтобы менять не только себя, но и мир вокруг себя.
Вообще давно хотел бы исследовать вопрос, что крупные игроки мира 1С предложили в плане методологии разработки (ну окромя самой 1С). Есть хорошие примеры из мира web: Bootstrap by Twitter; AngularJS by Google. А что у нас есть от наших "крупных игроков"? Возможно я просто плохо исследовал этот вопрос?
27. qwinter 629 26.08.15 09:24 Сейчас в теме
(26) все отраслевые пишутся на коленке, под клиента. Какие стандарты, вы вообще о чем?
28. Makushimo 157 26.08.15 09:31 Сейчас в теме
Автора видать сильно достало текущее положение дел с говнокодом.-)))
Посреди ночи я тоже ловлю себя на мысли о написании подобной статьи.

29. berezdetsky 592 26.08.15 10:26 Сейчас в теме
Гораздо интереснее, когда, относительно красивый код сочетается с совершенно невменяемой структурой данных. Например, когда то, что должно решаться добавлением строки в справочнике, требует в итоге создания новой подсистемы. Вот где простор для того, "Чтобы Вас носили на руках". :)
30. heavymetal 86 26.08.15 11:14 Сейчас в теме
Классная статья! Вспомнил несколько таких обрывков кода, забавно с одной стороны, но с другой стороны охота встать и уе..ть такого кодера. Только я думал, что он просто так выпендривался, типа крутой, я даже не знал, что это целая наука
32. testik_vzv 11 26.08.15 11:54 Сейчас в теме
И не забудьте реализовать rls, зависящее от регистров сведений, где для объектов и для пользователей присваиваются категории, а потом устанавливается соответствие одних категорий другим, причем заполнение регистров выполняется порциями, с помощью регламентных заданий.
Ровно так реализован доступ к объектам в 1С: Документообороте с его адским регистром "ДескрипторыДоступаКОбъектам"
Это гарантирует бесконечный процесс отладки и жалкие попытки разработчика воспроизвести ситуации с ошибкой доступа к объектам, возникающие в процессе настройки прав пользователей и доработке конфигурации.
bulpi; the1; fomix; +3 Ответить
36. Pirat-37 2 26.08.15 15:41 Сейчас в теме
МоЛоДеЦ ХоРоШо НаПиСаЛ!!!
37. ya.Avoronov 110 26.08.15 18:33 Сейчас в теме
Коллега сегодня целый день потратил на поиск аномалий в документе:
Один и тот же документ проводится то в один регистр, то сразу в два.
Оказалась типовой отчет при формировании делает вторую проводку в регистр!

Зло-советы работают и они среди нас!
38. Alex 98 26.08.15 20:41 Сейчас в теме
Как то попахивает плохо... Если ты не сработался с конторой, то зачем приемнику жизнь портить? Может лучше понять почему ты ушел?
39. vandalsvq 1197 26.08.15 21:53 Сейчас в теме
Интересно, а минусят те кто не понял юмора? Ну что ж, бывает ))))
42. qwinter 629 27.08.15 11:32 Сейчас в теме
Да что там нетленки. Вот результат буквально сегодняшнего моего разбирательства с УТ11. Надо переносить из доработанной семерки проценты минимальных остатков. Знаю что в УТ это в "Параметрах обеспечения потребностей". Думаю ну это наверняка регистр сведений. Ищу... Нахожу только с пометкой не используется. Думаю хрен с вами, иду в форму смотрю в командный интерфейс. Вижу там обработку Параметры обеспечения потребностей. Лезу в нее, ищу куда она там записывает. Пишет она в три регистра: "ВариантыОбеспеченияТоварами", "ВариантыОбеспеченияРаботами", "ТоварныеОграничения". Думаю нужен мне первый. Посмотрел его в конфигураторе, ищу в пользовательском. Не нахожу... Смотрю синоним в конфигураторе. Оп ля: "Порядок применения способов обеспечения товарами". Уже влегкую ругаясь ищу его в пользовательском режиме... Он пустой... Уже внимательно изучаю код обработки, и узнаю, что параметры обеспечения записываются в регистр "Товарные ограничения"!!!
dyuha; pisarevEV; +2 Ответить
43. bulpi 180 27.08.15 12:52 Сейчас в теме
Все типовые конфигурации так написаны. Но самое большое впечатление в жизни произвела на меня конфигурация комплексная для 7.7 (Украина) , доработанная фирмой Фаворит, с идентификатором Dynamics by idea Favorit 7.7.
Это просто какие-то агенты сатаны на Земле. Любимая функция - шаблон с недокументированными свойствами. Любимое хранение данных - глобальный кеш с использованием внешних dbf файлов! Как же хочется кого-то из разработчиков поймать и сжечь! А руководство очень удивляется, что любые изменения стоят им так дорого.
Люди, кто знает, кто ее делал, откликнитесь!
44. Yashazz 3726 27.08.15 19:09 Сейчас в теме
Моё любимое развлечение - имена переменных, состоящие из русских и латинских букв вперемешку. Имена достаточно короткие, чтобы не тянуло их постоянно копипастить, и расположенные так, чтобы Ctrl+Пробел обломался.
Остальное уж всё рассказали.

Есть, правда, ещё один вариант: написать сверхгибкий гиперуниверсал, где вся механика, логика и структура вынесены на уровень абстракций, реализованных в режиме "Предприятие". Тогда вы единственный держатель ноу-хау, и только зубр методист-внедренец вам конкурент. И главное, никаких подлянок, сплошь позитив, но какие где надо сделать перенастройки, уже не знание 1С решает, или там типовых нетленок, а исключительно знание вашей логики "шаблонов-для-образцов-типовых-логических-этапов".
45. Krasnyj 1267 29.08.15 01:16 Сейчас в теме
Это еще что... а вот, например, табличное поле на форме документа (8.2), информация в которое каждый раз собирается из пяти справочников, и при изменениях - сохраняется в них же - вместо табличной части - это да.
46. TreeDogNight 19 29.08.15 11:17 Сейчас в теме
(45) Krasnyj, Между прочем классный способ, если нужно сделать нестандартный интерфейс для редактирования данных.
48. palsergeich 29.08.15 14:37 Сейчас в теме
(46) TreeDogNight, Приходится постоянно так делать, потому что на моем текущем месте работы хотят интерфейс как у Iphone(с), простой и понятный, а так как в 1с нет вложенных форм, то часто а формах по 2 объекта и 3 записи с хитрож... ми связями. Конкретно - многоступенчатый ввод разнородной информации, который должен быть на уровень абстракции выше, чем существующие сейчас механизмы в самописке.
Я честно пытался сделать на стандартных вводах все, но реально удобства 0 (за один проход бизнес процесса нужно открыть около 10 форм и думать что и в каких случаях туда вводить, сейчас это реализовано на 1 форме, со свистелками и перделками).
Но заказчик доволен интерфейсом, тем что сотрудникам рядового звена вообще сейчас не надо думать, ввел 2-3 поля и нажал кнопку.
То что раньше на низших уровнях вводилось по 5-10 минут + параллельно частично велось в Excel сейчас занимает 2 минуты + отпала необходимость в Excel.
Да поддерживать такой код в разы сложнее, но в любой операции где проводится что то нестандартное есть подробное описание зачем это + описание этого куска процесса. + весь код с модулей форм процессов родителей перенесен в общие модули и отрефакторен (говнокод, костыли, велосипеды все это все равно есть, но их присутствие я постарался сделать минимальным). По сути дела проблемы могут возникнуть только в одном случае - если полностью изменится текущий бизнес процесс, но это произойдет вряд ли.
По сути дела получилась целая подсистема на одной форме, и именно этого и хотел заказчик. А то что для реализации этого пришлось крайне попотеть это нормально.
TreeDogNight; qwinter; +2 Ответить
49. Yashazz 3726 29.08.15 23:51 Сейчас в теме
(46) TreeDogNight, да, табличный документ вообще отличная штука, если нестандартно заюзать.
TreeDogNight; +1 Ответить
47. qwinter 629 29.08.15 11:47 Сейчас в теме
(45) Krasnyj, это очень даже правильная штука. Вот простой пример. Есть заявки, у которых есть разделы. На эти заявки устанавливают статусы, при этом в какой то момент статусы могут разветвлятся (на каждый раздел может быть свой статус). Как вы это реализуете без динамического списка и справочников? Никак.
TreeDogNight; +1 Ответить
50. capone 22 31.08.15 10:09 Сейчас в теме
Бред... Залезешь потом в свой код через пару месяцев и сам же замучаешься в этом говне ковыряться.
51. vicmos 42 01.09.15 18:19 Сейчас в теме
не заменимых людей НЕТ, любого можно заменить, просто цена вопроса у всех разная
52. 01.09.15 20:20 Сейчас в теме
Если вспомнить, что при написание "типового" кода, возможны скрытые баги. То, что можно говорить об такой писанине? Как не как, все форумы завалены, сообщениями, об той или иной ошибке в программе.
Сам недавно ковырял такой код в 7.7, модули дописанные, такое ощущение что кто-то пишет как курица лапой, я даже когда начинал так не писал) Еще умудрился, засечь пару ошибок в итого. Но исправлять не стал, меня не это просили делать)) К тому-же все эти шалости проходят только с новичками. В конце концов, есть специалисты которые ломают защищенные программы на самом высоком уровне, для них такая умышленная путаница, что семечки погрызть)) Думаю и в 1С таких спецов немало.
А по теме, можно заявить об таком специалисте, и в полне авторитетно, что он некомпетентный в данной профессии и все признаки будут на лицо, все то что вы перечислили, в не правильном виде изложенный код, могут стать вашим приговором в этой профессии и поди потом докажи обратное другим работодателям)) Так что палка как всегда это бывает о 2 концах;-)
В конце, концов...вы не увидели в своих высказываниях такой конец, значит мыслите вы крайне субъективно, а для программиста это роскошь) Ибо все должно быть логично от начала и конца. И не наступать на собственные-же услужливо разложенные самим-же грабли;-)
53. ZOMI 434 01.09.15 23:34 Сейчас в теме
До рассказов о чужих косяках неплохо было бы представляться -
"-Я, Стив Программулькин, всегда пишу идеальный код, разработал десять тиражных решений... Пишу быстро и качественно одновременно для 3-5 проектов, попутно разруливая техподдержку ранее наваяных идеальных решений."

Все косячат, но не все рефакторят.

Разговоры о качестве кодинга мне понятны среди разработчиков тиражных решений... Лично у меня есть опыт участия в разработке нескольких тиражных решений. Так вот, ребята, когда все сроки прошли, а проект должен быть сдан - костыли и просто невероятно замысловатые велосипеды рождены часто недосыпом и передозировкой кофе... А нубы потом хватают такой кусочек и бегут на мистапомойки.
Если брать конкретно разработчиков типовых - я вижу, что много и очень много рефакторится. И это хорошо.
54. 02.09.15 04:52 Сейчас в теме
(53) ZOMI, извени дружище...я обычно балду пинаю хотя до сроков выполнения 2-3дня...а занимаюсь чем нибудь другим. Потому что я знаю, что я сделаю, все решения есть, нет только реализации. И вот приходит срок, сегодня. Я его и делаю, сегодня. Баги есть, но некогда нет громоздкого кода. Нас в свое время не так учили кодить. Можно написать гору кода, а можно обойтись и парой строк. И дело не в идеальности. А вот нубы которые нынче переквалифицировались! откуда-то в ЭТО этим и страдают. И поверь я много видел чужого кода, кроме иронии и смеха он нечего вызвать не может. Хотя очень редко, вызывает уважение у некоторых индивидов и даже некоторую зависть. Но оно и понятно почему редко.
Замечу по теме...в свое время когда появились Спектрумы с ограниченной памятью, многие наоборот применяли трюки в рамках жесточайшей экономии памяти. Например сканировали ПЗУ на предмет нужного машиного кода для своего кода и делали переходы на эти участки, так как его писать не надо он уже есть в памяти. А языки высокого уровня - это для лентяев и прикладников, которым все эти тонкости и нюансы не к чему, они просто не знают данного предмета. Так что и понятно почему появляются такие статьи, если учесть что в машинном коде нет, не Идентификаторов не переменных и постоянные ГОУ-ТУ) А от себя добавлю, разбираться в таком коде, о котором говорит автор согласен возникает чувство брезгливости и неинтересности, как заметили некоторые от такого гавнокода. Чем вероятно и пользуется автор, чисто из психологических настроений новичков.
И это давно не секрет такие примочки - возьмите софт небезызвестной фирмы Рарус, там этого дерьма предостаточно и в более коварном виде)

PS: не проект "красит" человека, а код) Обезьяны то-же палку в руках держат, о двух концах;-)
И все это откорячки на нехватку времени и попытка оправдать такой говнокод в своих-же глазах. Имейте уважение к тем кто будет читать ваши произведения "искусства". Хотя я знаю очень много прогеров, которые не заморачиваются таким чтивом, а просто переписывают его, для некоторых это быстрее, чем разобраться в чужом говнокоде.
55. qwinter 629 02.09.15 09:08 Сейчас в теме
(53) ZOMI, ну расскажите какое тиражное решение Вы разрабатывали изначально как тиражное?))
56. vandalsvq 1197 02.09.15 10:20 Сейчас в теме
(53), в самом начале я говорил - это перевод. Ну, а если есть претензии лично ко мне, то кто я - это в профиле. Мои разработки - там же. Их качество - пусть судит общественность.
Пы.сы. собственно сам автор исходной статьи - Роуди Гринн, чем он может быть известен? Да боюсь ничем, ибо даже в цитатах на данную статью редко вспоминают кто ее написал и где ее исходники. Да и что-то мне подсказывает что не важно это, ибо она для всего мира программирования пригодна. ))))))))
57. 02.09.15 10:49 Сейчас в теме
(56) не го-же новичков учить плохому))
Да то-же думаю неважно кто написал - если она имеет такой отклик, значит кем-то востребована и имеет общую тенденцию мышления многих в этом вопросе. Хотя сам наверное знаешь насколько нынче ценят нашего брата;-) От туда и ноги растут у этой статьи.
Хотя я думаю иначе, прогер если сам ценит себя и так найдет работу где угодно.
58. adapter 555 14.09.15 16:53 Сейчас в теме
нам нужно больше говнокода!

А то какой ты нафиг, танкист, программист, если в модуле документа на 50 страниц разобраться не можешь пока клиент ждет :)
andreypahov; +1 Ответить
59. 15.09.15 02:39 Сейчас в теме
(58) adapter, не знаю...до сих-пор не осилил "Унесенные ветром", как только начинаю так сразу засыпаю, такое чтиво нужно только на ночь, для хорошего сна)) Ибо только такая смертная скука способствует хорошему сну))
Меня удивляет другое, как писатели такого не заснут вечным сном сами блин)
60. mxs89 3 16.10.17 16:50 Сейчас в теме
61. vap_pig 31 13.07.19 11:30 Сейчас в теме
Это удобно только если у человека явно проблемы с трудоустройством из-за квалификации, что заставляет держаться за одну должность, а также если его начальство безобразно тупое. В противном случае сработает против программиста по следующим причинам:
1) самому сложно работать с таким кодом - будут ошибки, потеря времени и сил;
2) если вдруг сам надумает уволиться на повышение - будут постоянно доставать с прошлой работы;
3) если начальство возьмется за ум, либо придется работать с другими программистами в команде - рискует быть уволенным с треском.

PS: Сам в свое время работал над "творениями" подобного товарища. Его боялись уволить, но сильно хотели, т.к. он сильно всех достал. Не только качеством кода, но и поведением. Меня пригласили проанализировать его код и оценить, смогу ли я с ним работать. После недельного анализа сказал, что смогу. После этого товарищ был выгнан с треском и занесен в черные списки всех знакомых. Код после него, конечно, переписывался долго, но ничего фатального не случилось.
62. Pawlick 10 18.12.20 14:03 Сейчас в теме
Именно по такому принципу написанна БСП, и половина внутренностей всех современных поделкок от 1С
63. vld1973 02.04.21 11:22 Сейчас в теме
Ещё высший пилотаж применять в названии общих переменных, процедур и функций как русские, так и латинские символы, причем похожие например а и a
Оставьте свое сообщение

См. также

Звуковое управление в 1С 8.3 Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021    2582    velemir    28    

Как контролировать качество внешних обработок, отчетов, правил обмена, расширений 1С и поставить это на поток

Рефакторинг и качество кода Бесплатно (free)

Если код написан качественно, его легче развивать и дешевле поддерживать. О том, как организовать контроль качества кода в ручном и автоматическом режиме, и какие инструменты могут в этом помочь, на INFOSTART MEETUP Новосибирск.Online рассказал Олег Тымко.

09.04.2021    1058    olegtymko    16    

Полезные примеры СКД, ч.1

Практика программирования v8::СКД Бесплатно (free)

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021    4352    Neti    17    

Обзор полезных методов БСП 3.1.4

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Бесплатно (free)

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

25.03.2021    10010    rayastar    45    

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

Универсальные функции Практика программирования v8 Бесплатно (free)

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020    5042    comol    26    

Повышение качества разработки. Статья 4. Почему код становится плохим, и как с этим бороться

Практика программирования Методология управления разработкой Бесплатно (free)

Учебный курс по теории и практике программирования. Бесплатно. В виде структурированного текста. Статья 4. Эта статья посвящена причинам возникновения проблем с качеством кода и методикам их преодоления.

22.03.2021    823    Артано    5    

Telegram бот на PHP

Практика программирования Бесплатно (free)

Сделаем простого Telegram бота на PHP.

01.03.2021    2415    John_d    8    

«Варп-двигатель» для «среза последних»

Практика программирования Бесплатно (free)

Решение, позволяющее получить данные, аналогичные "срезу последних" на два порядка быстрее.

10.08.2020    3352    hobi    47    

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    38793    unichkin    74    

Не спеша, эффективно и правильно – путь разработки. Часть 3. Практика

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

29.06.2020    11266    WildHare    33    

Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

22.06.2020    11614    WildHare    23    

Не спеша, эффективно и правильно – путь разработки. Часть 1. Парадигма

Практика программирования Бесплатно (free)

Черновой вариант книги Никиты Зайцева, a.k.a.WildHare. Разработкой на платформе 1С автор занимается с 1996-го года, специализация — большие и по-хорошему страшные системы. Квалификация “Эксперт”, несколько успешных проектов класса “сверхтяжелая”. Успешные проекты ЦКТП. Четыре года работал в самой “1С”, из них два с половиной архитектором и ведущим разработчиком облачной Технологии 1cFresh. Ну — и так далее. Не хвастовства ради, а понимания для. Текст написан не фантазером-теоретиком, а экспертом, у которого за плечами почти двадцать три года инженерной практики на больших проектах.

15.06.2020    17532    WildHare    34    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    32528    tormozit    105    

JSON в запросах DaJet QL

Практика программирования Бесплатно (free)

Практические примеры работы с JSON непосредственно в языке запросов. Перенос курсов валют между УТ и БП. Требуется SQL Server 2016 и выше.

24.04.2020    4169    zhichkin    6    

Визионное программирование

Практика программирования Бесплатно (free)

Новый способ программирования и его практическая демонстрация.

22.04.2020    4858    mkalimulin    111    

Использование машинного обучения для решения инцидентов. Практическое применение

Практика программирования Бесплатно (free)

Продолжаю (и заканчиваю) тему с автоматическим решением инцидентов. Перейдем от теории к практике.

25.02.2020    4592    Repich    9    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    79681    tormozit    131    

Использование машинного обучения для решения инцидентов

Практика программирования Бесплатно (free)

История о том, как я с помощью машинного обучения сокращал затраты на техподдержку.

18.02.2020    7370    Repich    17    

Качество кода: слабое связывание и высокая сопряженность (Low coupling and High Cohesion)

Рефакторинг и качество кода Бесплатно (free)

Поговорим о некоторых общепринятых подходах и принципах разработки кода.

10.02.2020    9203    ivanov660    90    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    42638    ids79    26    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    50563    tormozit    48    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    32312    John_d    22    

Часовой на страже логов

Практика программирования Инструментарий разработчика Бесплатно (free)

При поддержке решений, которые установлены у большого количества пользователей на различных системах, очень важно вовремя получать подробную информацию о возникших проблемах. О том, как собирать логи и анализировать полученные данные в трекере ошибок Sentry на конференции Infostart Event 2019 Inception рассказал Андрей Крапивин.

13.01.2020    8083    Scorpion4eg    8    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    24818    kuzyara    38    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    47410    tormozit    74    

Как управлять качеством кода 1С, используя платформу SonarQube

Рефакторинг и качество кода Инструментарий разработчика Бесплатно (free)

При быстром росте функциональности проводить визуальный Code-Review для обнаружения некачественного кода проблематично. О том, как автоматизировать проверку качества кода 1С с помощью платформы SonarQube на конференции Infostart Event 2019 Inception рассказал ведущий разработчик компании «Командор» Олег Тымко.

30.12.2019    9799    olegtymko    10    

Полезные процедуры и функции для программиста

Практика программирования Универсальные функции v8 1cv8.cf Россия Бесплатно (free)

Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.

07.10.2019    34150    HostHost    41    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    42279    Yashazz    50    

Развитие 1С программиста Промо

Практика программирования Личная эффективность Бесплатно (free)

Делюсь своим опытом и видением развития 1С программиста.

17.10.2018    23041    pashamak    64    

СКД. Отчеты с картинками

Практика программирования Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    26003    YPermitin    41    

СКД не только для отчетов

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

СКД позволяет получать данные из информационной базы не только для вывода в отчеты, но и для других целей. Пример такого использования рассматривается в настоящей статье.

18.09.2019    20525    YPermitin    36    

Оповещения боту из 1С за 31 минуту

Практика программирования Интеграция v8::УФ 1cv8.cf Бесплатно (free)

Поделюсь опытом, как быстро сделать бота с оповещениями в Телеграмм из 1С без лишних затрат.

18.09.2019    18503    feva    42    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16569    m-rv    2    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    72021    rpgshnik    70    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    60769    ids79    55    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    34622    YPermitin    25    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    21192    m-rv    17    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    27473    YPermitin    81    

Приватный блокчейн и 1С популярно

Практика программирования Блокчейн Бесплатно (free)

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

02.09.2019    6513    mkalimulin    140    

Кодогенерация и метагенерация в 1С

Практика программирования Инструментарий разработчика Бесплатно (free)

В своем докладе на конференции INFOSTART EVENT 2018 EDUCATION Дмитрий Белозеров рассказал о разработке инструмента, позволяющего программно работать с метаданными 1С и писать скрипты для выполнения тех же действий, которые выполняет разработчик в конфигураторе –  с какими сложностями и нюансами пришлось столкнуться, и что получилось в итоге.

26.08.2019    9316    kirovsbis    28    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    32881    m-rv    22    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    37642    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    113588    ids79    67    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.08.2019    46452    avalakh    26    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Вариант решения задач с проведением по типовым регистрам нетиповыми регистраторами. Зачем - чтобы при сравнении конфигурации не обращать внимание на свойства регистров и исключить вероятность допущения горькой оплошности при обновлении информационных баз, заменив типы регистраторов основной конфигурации типами конфигурации поставщика. Для программных продуктов, имеющих в своем составе метаданных документ "Корректировка регистров"("Корректировка записей регистров").

05.12.2017    28986    itriot11    34    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    80647    ids79    14    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Практика программирования Разработка v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    31226    skv_79    35    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    41061    ids79    27    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    78972    Serginio    113    

Как завести у себя в команде код-ревью. Отвечаем на вопросы

Рефакторинг и качество кода Бесплатно (free)

Дадим советы как начать использовать у себя в команде код-ревью (code-review), а также ответим на вопросы читателей.

17.07.2019    10769    ivanov660    30    

Интеграция сценарного тестирования в процесс разработки

Практика программирования Инструментарий разработчика Бесплатно (free)

Разработчик системы «Тестер» Дмитрий Решитко в своем докладе на конференции INFOSTART EVENT 2018 EDUCATION показывает, что процесс тестирования можно очень плотно интегрировать в процесс разработки, что внедрение тестирования – это возможность развития программиста как такового, позволяющая ему упорядочивать ход мыслей и оставаться «в фокусе». Навыки построения процесса кодирования на стыке с тестированием сокращают время на концентрацию, освобождают от страха перед изменениями и улучшают память разработчика.

08.07.2019    9698    grumagargler    7