Антипаттерны программирования в 1С

Публикация № 1477792 19.07.21

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

качество кода антипаттерн

Поговорим про плохой стиль программирования и рассмотрим 17 часто встречающихся антипаттернов.

Давайте сначала дадим трактовку понятию антипаттерн.

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

"Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку." - Мартин Фаулер.

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

Все эти антипаттерны затрудняют выполнение код-ревью или обзор кода в вашей команде! 

 

1. Название функций и процедур с большим количеством сокращений и аббревиатур

Процедура Док_МСТ_для_БЛМ()

//...

КонецПроцедуры

Функция Преобр_НСТ_в_СПТР()

// ...

КонецФункции

Или так:

Процедура Док_МСТ_для_БЛМ(Отказ)

   Массив = Преобр_НСТ_в_СПТР();
   
   Для каждого элемент из Массив Цикл
       Если ПР_На_ВЗ_и_КВД(элемент) Тогда
            Сооб_ПИОВД(элемент, Отказ);
       Иначе
            Обр_ДляСТР(элемент);
       КонецЕсли;
   КонецЦикла;

КонецПроцедуры

Верно же, что – краткость – сестра таланта. Ну и что что программисты коллеги, которые после Вас будут зависать на 30 минут пытаясь понять, что это значит и зачем нужно.

Запомните! Ни в коем случае не пользуемся встроенным в конфигуратор или EDT функционалом "Рефакторинг" и не добавляем описание функции. Помните, что не стоит кликать кнопкой мыши на функции, вызывать контекстное меню и выбирать команду "Создать описание функции".

 

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

 

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

 

ПользовательXml, пользовательxml, пользовательXML, ПользовАтельXML 


3. Необоснованное сокращение названий переменных

 

Зачем писать «АвторизованныеПользователи», когда можно просто написать «Пользователи», а еще лучше просто «Массив». Пусть кто-то другой напряжет мозги и полезет читать весь код функции выше и попробует понять, что же содержит все-таки эта переменная и зачем она нужна.

К примеру, у нас может быть несколько функций, возвращающих различные массивы данных о пользователях:

Функция ПолучитьАП()
	Пользователи = Новый Массив;
	мСоединения=ПолучитьСоединенияИнформационнойБазы();
	Для каждого ЭлементМассива Из мСоединения Цикл
		Пользователь = ЭлементМассива.Пользователь; 
		Пользователи.Добавить(Пользователь);
	КонецЦикла;
	Возврат Пользователи;
КонецФункции

Функция ПолучитьПБ()
	
	Пользователи = Новый Массив;
	Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей(); 
	Для Каждого ЭлементМассива Из Выборка Цикл 
		ИмяПользователя = ЭлементМассива.Имя; 
		Пользователи.Добавить(ИмяПользователя);
	КонецЦикла;
	Возврат Пользователи;	
КонецФункции

И далее где-то будет следующий код: 

//..
// много кода
//..
// где-то тут получаем данные о пользователях

Пользователи = ....

//..
// много кода
//..

Для каждого ЭлементМассива из Пользователи Цикл // ? что тут ищем вверху по коду
	//..	
КонецЦикла;

//..

 

4. Использование одной и той же переменной для всех действий в коде и присвоение им ничего не значащих имен

 

Это вносит небольшой элемент непредсказуемости, особенно когда у вас есть условия.


Для каждого тмп из ТаблицаТовары Цикл
    Если тмп.Цена=0 Тогда
        Сообщить("Внимание в таблице не заполнена цена!");
    КонецЕсли;
КонецЦикла;

Если ТаблицаТовары.Количество()=1 Тогда
    тмп = "Всего одна строка";
КонецЕсли;

Если НЕ тмп="" Тогда
     Сообщить(тмп);
КонецЕсли;

 

Или так:

Процедура ПрограммноеСозданиеТаблицы(Таблица)
    Для Каждого тмп из Таблица Цикл
       // создаем группу
       Перем1 = СозатьПрограммноЭлементФормы(тмп, Тип("ОбычнаяГруппаФормы"));
       // создаем поле надписи внутри группы родителя
       Элемент1 = СозатьПрограммноЭлементФормы(тмп, Тип("ПолеФормы"), Тип("ПолеНадписи"), Перем1);
       // создаем декораци внутри группы родителя
       Элемент2 = СозатьПрограммноЭлементФормы(тмп, Тип("ПолеДекорации"),,Перем1);
       Элемент2.Заголовок = "декорация";
       // создаем кнопку внутри группы родителя за декорацией
       Элемент =  СозатьПрограммноКомандуФормы(тмп,Перем1,Элемент2);
    КонецЦикла;
КонецПроцедуры

 

5. Нет форматирования. Разработчик никогда не использует авто форматирование, не знает про комбинацию "Shift+Alt+F"

 

Авто-форматирование кода убивает любую индивидуальность кода. Стремитесь к неповторимости. Так и только так можно стать великими разработчиками, которых будут помнить и всегда вспоминать "хорошим" словом коллеги программисты.

//...
МассивСтрок = Новый Массив;
Если ЗначениеЗаполнено(Организация) Тогда
Для Каждого тмп из ТаблицаТовары Цикл
    Если НЕ тмп.Организация=Организация Тогда
МассивСтрок.Добавить(Новый Структура("стр",тмп));
КонецЕсли;
    КонецЦикла;
КонецЕсли;
//...


6. Кодирование в одну строчку кода

 

Длина не важна, главное, чтобы текст помещался на экране и желательно в одну строчку. Кто-то будет отлаживать код? Зачем? Он же идеальный)

Попытка Объект.Записать(); тмп = истина; Исключение Сообщить(ОписаниеОшибки())  КонецПопытки;

Или так:

Если НЕ ЗначениеЗаполнено(Организация) Тогда Организация=ПолучитьОрганизациюПоУмолчанию(); КонецЕсли;

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


ТаблицаДанных = ПолучитьТаблицуДанных(ИсходнаяТаблицаУсловий, Параметры, Организация, Партнер, ИспользоватьДоговоры, Итина, СписокЗначений);

 

7. Ненужная усложненность, однострочные вложенные сокращения и оператор «?» вместо использования условий

 

Ну и что, что потом кто-то будет разбирать ваш код и у него начнет дергаться глаз, главное компактность.

Запрос = Новый Запрос(ПолучитьТекстЗапроса());
ИспользоватьКонтроль = ?(ЗначениеЗаполнено(Партнер),?(ЗначениеЗаполнено(Договор),?(Договор.Контроль=Истина,Истина,Ложь),Ложь),Истина)
Запрос.УстановитьПараметр("ИспользоватьКонтроль", ИспользоватьКонтроль);

Также всегда, где можете, инициализируйте переменные внутри процедур, это значительно сокращает количество строчек и количество ненужных переменных.

 МассивСтрок = Новый Массив;

Для каждого стр из ТаблицаТовары Цикл

    Если стр.Количество<>0 Тогда
        // добавим в массив строки по условию...
        МассивСтрок.Добавить(Новый Структура("стр,ключ",стр, Новый Структура(Новый УникальныйИдентификатор()))));
    КонецЕсли;

КонецЦила;

 

8. Большое количество параметров в функции 

 

Если стоит задача написать функцию или процедуру с входящими параметрами, то добавляем их все не задумываясь. Не надо останавливаться и переосмысливать функцию - это лишняя трата времени и сил.

Не стоит использовать структуру для свертки параметров или использовать хранилище данных.

Функция ПолучитьДанныеПоЗадаче(МассивВходныхДанных, Организация, Контрагент, Соглашение=Неопределено, Договор=Неопределено, Валюта=Неопределено, ТипОтношений=Неопределено .... )
//...
// что-то делает
//...
КонецФункции

 

9. Использование вложенных вызовов большой глубины или слоеный пирог

 

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

//...
// вызываем для получения параметров функции, в которых также вызываем вложенные
// хорошо, что еще не в одну строчку записали)
РезультатОбработки = ПолучитьДанныеПоЗадаче(
          МассивВходныхДанных,
          ПолучитьОрганизациюИзДокумента(ДокСсылка, ПолучитьОрганизациюПоУмолчанию()),
          ПолучитьКонтрагентаИзДокумента(ДокСсылка),
          ПолучитьСоглашение(ДокСсылка,ПолучитьСоглашениеПоУмолчанию(ПолучитьОрганизациюПоУмолчанию())));
//...


10. Повсеместное дублирование кода 

 

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

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

 

11. Использование стиля "Рваный запрос" или "Рваная строка"

 

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

Функция ПолучитьРезультатОбработкиДанных(Ключ, Данные) Экспорт
	
	//...
	
	Запрос = Новый Запрос;
	// получаем данные из таблицы остатков товаров организаций
	Запрос.Текст = "ВЫБРАТЬ
	|	Т.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
	|	Т.Организация КАК Организация,
	|	Т.ВидЗапасов КАК ВидЗапасов,
	|	Т.НомерГТД КАК НомерГТД,
	|	Т.КоличествоОстаток КАК КоличествоОстаток
	|ИЗ
	|	РегистрНакопления.ТоварыОрганизаций.Остатки( ";
	// если требуется отбор периода
	Если ИспользоватьПериод=Истина Тогда
		Запрос.Текст = Запрос.Текст + " &Период ";
	КонецЕсли;
	Запрос.Текст = Запрос.Текст + " , ";
	// если требуется отбор по организации
	Если ИспользоватьПериод=Истина Тогда
		Запрос.Текст = Запрос.Текст + " Организация = &Организация ";
	КонецЕсли;
	Запрос.Текст = Запрос.Текст + ") КАК Т ";
	// если требуются только положительные остатки
	Если ИгнорироватьОтрицательныеОстатки=Истина Тогда
		Запрос.Текст = Запрос.Текст + " ГДЕ Т.КоличествоОстаток>0";
	КонецЕсли;	
	
	//...
	
КонецФункции

В этом случае не стоит как-либо продумывать структуру запроса, использовать "Схему Запроса" или специальные функции из БСП для установки параметров динамических списков (из общего модуля "ОбщегоНазначенияКлиентСервер" функции "УстановитьЭлементОтбораДинамическогоСписка") и т.п.

Также, если вам надо составить какое-либо сообщение для пользователя пишите именно так как есть соединяя все в одной строчке:

ТекстСобщения = "В строке №" + НомерСтроки + " не заполнена колонка " + ИмяКолонки.

И не в коем случае не пользуйтесь функцией "СтрШаблон" - предавая шаблонизированную строку ("В строке №%1 не заполнена колонка %2") и параметры. 

 

12. Возврат разных типов данных для функций

 

Примите за правило возвращать разные типы в результате функции. Внесите немного загадочности и всегда возвращайте в результате функции различные типы данных. Это заставит других программистов держаться "бодрячком" и всегда ожидать подвоха.

Функция ПолучитьРезультатОбработкиДанных(Ключ, Данные)
	
	РезультатФункции = Неопределено;
	
	Если Ключ=42 Тогда
		// вернем массив
		РезультатФункции = Новый Массив;
		Для каждого стр из Данные Цикл
			РезультатФункции.Добавить(стр);
		КонецЦикла;
	ИначеЕсли Ключ=Неопределено Тогда
		// вернем тип первого элемента данных
		РезультатФункции = Данные[0];
	Иначе
		// вернем строку
		РезультатФункции = "Не поддерживается обработка!";
	КонецЕсли;
	
	Возврат РезультатФункции;
	
КонецФункции

 

13. Использование магических цифр

 

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

ДеньКонтроля = ТекущаяДата()+60*60*24;

Или так:

Если Количество=42 Тогда
     Цена=Цена*2;
КонецЕсли;

 

14. Использование жесткого кодирования

 

Всегда где можете вставляйте данные об окружении в программный код. Например различные пути к файлам, пути к обработкам, пути к ресурсам. Этот антипаттерн всегда надо использовать совместно с "магическими числами".

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

    //Помещаем обработку во временном хранилище
    АдресХранилища = "";
    Результат = ПоместитьФайл(АдресХранилища, "C:\Temp\ВнешняяОбработка.epf", , Ложь);           
    ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
    
    // Откроем форму подключенной внешней обработки
    ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма");

КонецПроцедуры

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища)

    Возврат ВнешниеОбработки.Подключить(АдресХранилища);

КонецФункции 

 

15. Всегда все делаем свое или изобретаем велосипеды 

 

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

Также никогда не смотрите код, который создан коллегами программистами. Для этого необходимо тратить ваше драгоценное время. Это будет ваш личный код, даже если уже существует готовое проработанное и обкатанное решение. Это будут ваши баги и ваши костыли. Зачем учиться на чужом программном коде, когда можно писать свой?

Эта методика позволит максимально запутать Ваш программный код и тогда кроме вас поддерживать его уже никто не сможет.

 

16. Синдром 80-го уровня или чрезмерная сложность

 

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

"Для полноценной конфигурации достаточно 1-го справочника, 1-го документа и 1-го регистра" - автор неизвестен.

 

17. Не будем ничего удалять, а вдруг пригодиться

 

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

 

 

P.S. А если серьезно, то:

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

 

Ссылки на полезные статьи:

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. a_a_burlakov 121 19.07.21 10:04 Сейчас в теме
Просто хочу оставить комментарий светлой памяти людям, которые работали с запросом из п.16, земля вам пухом.
Рамзес; user798534; maksa2005; rovenko.n; Artios; user1211160; VladimirMelnychenko; ProgrammistC; +8 Ответить
5. lunjio 66 19.07.21 13:37 Сейчас в теме
(1)
которые работали с запросом из п.16, земля вам пухом.

Как-то доходилось разбираться в запросе на 6 тыс строк, УТ 10.3, парнишка был просто волшебник, сама процедура на 10 тыс строк, что там за муть творилась, в целом понял, а вот по деталям терпения не хватило разобраться )
10. ivanov660 2556 19.07.21 14:04 Сейчас в теме
(5)А что будет если придет задачка от бизнеса поправить алгоритм (очень надо), а парень уволился?
16. lunjio 66 19.07.21 14:39 Сейчас в теме
(10)
парень уволился?

Так и было, но проблема была в том, что алгоритм походу уже был рудинментом, в таких случаях легче было свой написать. По сути с таким часто и сталкиваешься и как правило такие волшебники, а чаще волшебницы хорошо ладят с всякими бухгалтерами и прочими и воспоминания о них у пользователей хорошие в большинстве ))))
JohnConnor; Рамзес; t278; +3 Ответить
73. TimkoNzt 21.07.21 00:27 Сейчас в теме
(5) Аналогично, 3000 строк. Работы - всего ничего - изменить алгоритмы некоторых полей и добавить новых на основе старых. Внезапно захотелось уволиться.

Сами по себе запросы на 80 уровней очень даже читаемы, если на каждом уровне нет избытка логики. Но вот такое... это просто мрак.
Прикрепленные файлы:
Рамзес; triviumfan; raider-rec@ya.ru; +3 Ответить
79. zawal 15 21.07.21 14:46 Сейчас в теме
(73)ООО это 18 пункт, делать расчеты и вычисления в запросе!!!
20. rpgshnik 2591 19.07.21 15:43 Сейчас в теме
(1) главное чтобы в этом запросе временные таблицы хотя бы имели смысл какой-то, а не просто Т из Т... и Т1 из Т1 погоняет. А так обычное дело зависит от задачи и портянки, которую хочет собрать ПЭО в одном окне. Они такое любят. Мне потом ещё подходил и говорил, а можно в каждой ячейке ещё диаграммы вывести?)) А так самое страшное был отчёт с запросом, который написал и назвал в честь АК-47 : )))
eLeMeNtaLe; +1 Ответить
33. eLeMeNtaLe 19.07.21 17:37 Сейчас в теме
(20)А ещё очень нравится когда в таких пакетных запросах создают кучу временных таблиц, дают им имена красивые. А потом когда их в следующих пакетах используют, то там им уже дают не менее красивые псевдонимы. И ты как дурак ищешь в списке эту таблицу, а её там нет, и начинаешь тыкать по ним правой кнопкой мыши -> исправить, чтоб понять откуда данные. Спрашивается зачем, чем тебя не устроило назначенное тобой же имя временной таблицы? Х))
JohnConnor; Рамзес; TimkoNzt; borodatii; +4 Ответить
86. rpgshnik 2591 22.07.21 08:39 Сейчас в теме
(33) Привет, Олег :) Тут уже нужен опыт читать запросы без конструктора, раньше тоже смотрел через правую кнопку изменить таблицу)
88. eLeMeNtaLe 22.07.21 09:12 Сейчас в теме
(86)Дак я и не спорю, если запрос пакетов пять, то не проблема прочесть без конструктора и понять что он делает. А если в нем пакетов так десять? Уже сложно держать в голове что откуда пришло и как используется, приходится идти в конструктор, чтоб пошагово пробежать по запросу. Да и опять же, в чем сакральный смысл использовать псевдонимы виртуальных таблиц? Назови её изначально как нужно и используй, а тут такое ощущение что автор запроса страдает неуверенностью. ))
ivanov660; +1 Ответить
63. olololeg 20.07.21 13:35 Сейчас в теме
(1)Типичный запрос из ЗУПа)
Alexsh_kz; Сто27001; shalupov61; +3 Ответить
108. DVP 23.07.21 15:34 Сейчас в теме
2. rpgshnik 2591 19.07.21 11:46 Сейчас в теме
Коричневый код :) было кстати подобное тут у же не раз) топ конечно был https://infostart.ru/1c/articles/966234/
for_sale; +1 Ответить
3. ivanov660 2556 19.07.21 11:52 Сейчас в теме
(2) Что-то было, чего-то не было.
Но освежать в памяти подобные вещи требуется обязательно, т.к. к сожалению подобные приемы продолжают встречаться повсеместно.
rpgshnik; +1 Ответить
4. ildary 19.07.21 13:20 Сейчас в теме
Самое неприятное - находить антипаттерны в своём старом коде, когда уже давно исправился и пишешь правильно - лицо становится как у капитана на иконке статьи.
Рамзес; maksa2005; rabota.v8.1c; zawal; olololeg; oleganatolievich; rpgshnik; ivanov660; Климов Сергей; +9 Ответить
7. CheBurator 3456 19.07.21 13:59 Сейчас в теме
(4) ну ведь работало пару лет? и никто не приставал с вопросами по операторам кода?
rpgshnik; +1 Ответить
9. ivanov660 2556 19.07.21 14:01 Сейчас в теме
(4)Если совсем правильно, то создаем задачу на рефакторинг и избавляемся от технического долга. Мы так стараемся делать)
6. CheBurator 3456 19.07.21 13:58 Сейчас в теме
"Использование вложенных вызовов большой глубины или слоеный пирог"
- здесь читатели кода типовых ржут или плачут...?
Рамзес; so-quest; GatoDelgado; Сто27001; v3rter; raider-rec@ya.ru; lmm; maksa2005; semagin@gmail.com; unknown181538; Trucker; user1485342; dusha0020; bulpi; Birby; hamka; zhuntovda; kembrik; oleganatolievich; axelerleo; Ta_Da; user1346935; Yashazz; +23 Ответить
8. ivanov660 2556 19.07.21 14:00 Сейчас в теме
(6)Я верю, что взойдет она.... Что когда-нибудь они причешут свой код.
По факту лучше так стараться не делать на своих проектах и в своем коде.
15. CheBurator 3456 19.07.21 14:39 Сейчас в теме
(8) "когда-нибудь они..."
- спасибо, поржал.
у них времени не хватает ошибки выявлеямые фиксить. куда тут до рефакторинга
oleganatolievich; Ta_Da; +2 Ответить
11. Yashazz 3879 19.07.21 14:09 Сейчас в теме
Самоочевидный баян, сто раз уж было. А половина, как минимум, перечисленного - является постоянной практикой БСП, и ничего, всем норм.

На самом деле фигня, ибо про код только ленивый не писал. А вот разобрать аналогичным образом интерфейс, архитектуру (метаданные), да хоть рукодельные отчёты либо встроенную справку, итд - вот это было б куда как оригинальнее.

Нечто в духе:
1. Назовите ваш реквизит формы "РеквизитФормы" или "СписокЗначений". Тогда коллеги точно поймут, что это за фигня, ну и пусть, что при очередном обновлении платформы компилятор начнёт выдавать чудеса, а сторонние программы парсинга кода затупят - ничо!
2. Обязательно вкладывайте области в области, старайтесь выдерживать единообразие имён. Называйте области одинаково - тогда тот, кто попробует рефакторить, остро поймёт, что от перестановки фрагментов кода сумма (т.е. результат) весьма меняется!
3. Накрутите побольше групп-в-группах-в-группах, намутите декораций. Любое вмешательство в такую УФ резко исказит её и добавит здорового интереса даже при попытке подравнять кривое выравнивание. Используйте всю ширь монитора - у кого ноуты, пусть сами разбираются. Юзайте имена своих групп "Группа1" итд. в коде, массово программно меняйте всё, что можно - тогда никто не соскучится!
4. Запилите 90 ресурсов в регистре сведений, 50 реквизитов в таб.части документа, и побольше параметров сеанса да ролей. Много не мало, сразу будет ощутим масштаб, замах и глобальность! Назовите реквизит справочника "Ресурс" или "ТипЗначения". Обязательно сделайте несколько разделителей учёта, разделяйте и властвуйте!
5. Забабахайте ПФ из одноячейных секций, собирайте "по кирпичикам". Гибкость и шикарный внешний вид! А, и тоже меняйте программно после вывода в таб.документ, пост-обработкой. Можно насовать картинок. Смело юзайте объединённые ячейки, копируйте из эксельчиков, как оно там - вам быстрее, другим прикольнее!
6. Обязательно пишите справочную информацию. Фразы "Приход денег - это документ, отражающий денежный приход" или "Себестоимость должна рассчитываться согласно алгоритму расчёта себестоимости" - обязательные мантры для просветления, вас и всех соучастников.

Так вот, коллеги, каждый из нас в таком духе может нагнать пурги на стопицот килограммов. Но зачем?..
sulfur17; papami; rovenko.n; semagin@gmail.com; pogroleg; Dorosh; vano-ekt; bulpi; dhurricane; lunjio; Ygich; oleganatolievich; rpgshnik; +13 2 Ответить
13. brr 179 19.07.21 14:19 Сейчас в теме
(11) К п.5. всю логику разместите в одном методе, ну и что что в нём 10000 строк.
46. dhurricane 20.07.21 08:54 Сейчас в теме
(11) А что за боль с областями модулей и печатными формами? Я, видимо, с таким не сталкивался, потому не смог прочувствовать, но стало любопытно.
78. biimmap 118 21.07.21 14:38 Сейчас в теме
(11) Оно может и баян, но количество говнокодеров не уменьшается почему-то... Значит надо включать принцип "повторение - мать заикания". Доводить говнокодеров до этого состояния, чтоб они боялись писать такой код. А повторять после 3 раза лучше матом! Так будет страшнее.
Рамзес; zqzq; ivanov660; +3 Ответить
83. Yashazz 3879 21.07.21 17:09 Сейчас в теме
(78) эти статьи, скорее, крик души после наблюдения очередных килотонн говнокода и говноархитектуры... Но да, согласен.
87. zqzq 21 22.07.21 08:47 Сейчас в теме
(78) Это вечный процесс... Новички лучше всего учатся на собственных граблях...

Также, напомнило:
https://weblogs.sqlteam.com/jeffs/2006/03/30/9471/
https://habr.com/ru/post/347166/
111. ivanov660 2556 23.07.21 18:10 Сейчас в теме
(11)
1. Сеньоры, конечно могут нагнать подобной "пурги" и должны знать все это. Но вот начинающие точно нет и мидлы не уверен что все.
2. Вот возьмите и напишите статью, тезис у вас уже заготовлен. Судя по плюсам она хорошо "выстрелит", от меня точно будет звезда.
112. Yashazz 3879 23.07.21 18:19 Сейчас в теме
(111) Статьи такого рода - трепотня "за жисть" и вода, я предпочитаю более по делу публиковать.
113. ivanov660 2556 23.07.21 18:23 Сейчас в теме
(112)Позиция ясна, чисто практически подход тоже хороший вариант.
12. brr 179 19.07.21 14:16 Сейчас в теме
Забыли про методы на многие тысячи строк, с цикломатической сложностью около 300.
14. Hans 1 19.07.21 14:26 Сейчас в теме
Где антипатерн использования процедур и функций размером больше 2-3х экранов.
for_sale; +1 Ответить
84. biimmap 118 21.07.21 17:35 Сейчас в теме
(14) в сложных доработках этого нельзя избежать. Точнее код будет трудно читабельным.
89. Hans 1 22.07.21 09:28 Сейчас в теме
(84) Есть пример сложной процедуры которую нельзя разбить на более мелкие?
for_sale; +1 Ответить
93. biimmap 118 22.07.21 10:03 Сейчас в теме
(89) У меня есть 2 огромные обработки по 6000 строк кода. Одна - это конструктор выгрузки данных из ЗУП, вторая преобразование управленческих табелей в регламентированные. и там и там есть по несколько процедур, из которых часть кода если убрать то станет нечитабельно. Одна из процедур например получается кадровые данные. Казалось бы чё сложного))) Но даже с использованием программных интерфейсов, потом запросами данные обрабатываются и получается много кода.
95. Hans 1 22.07.21 11:41 Сейчас в теме
(93) Дай посмотреть обработки что бы определить, бывают ли такие случаи, а то я не верю, что в некоторых случаях надо делать функции большими.
for_sale; +1 Ответить
99. Areal 13 22.07.21 21:46 Сейчас в теме
(93) Вообще, любую задачу, имеющую более одной логически обособленной строки кода, можно декомпозировать. Просто, иногда, задачи(функции) слишком маленькие и теряется смысл разбивки. Боюсь, что если программист убежден, что функция на 6000 строк это нормально - нужно декомпозировать уже его.
100. biimmap 118 22.07.21 21:55 Сейчас в теме
(99) Вы не внимательно читаете. Написано не про функцию, а про обработку. аргументы приведены. Выпендрёжь не к месту.
114. Areal 13 25.07.21 01:37 Сейчас в теме
(100) "Выпендрёж", как Вы выразились - фраза, свидетельствующая о грубости оппонента. Во первых - вся статья о кодинге, а не обработках, во вторых - тред начинается с

"Где антипатерн использования процедур и функций размером больше 2-3х экранов."

и продолжается

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

что явно говорит о его процедурном/"функционном" контексте. Но в любом случае, удачи Вам с Вашими процедурами/обработками на 6000 строк
17. Aftee 19.07.21 14:52 Сейчас в теме
п. 16 - типичный отчет в ЗУП 3.1
75. Sardukar 55 21.07.21 08:50 Сейчас в теме
18. Yashazz 3879 19.07.21 14:54 Сейчас в теме
А ещё есть отличные переменные, "МояУправляющаяПеременнаяДляОднократногоХраненияВременногоЗн­аченияИмениНуралиеваБГ"

А ещё есть функциональные опции "ИспользоватьМеханизм" и "НеИспользоватьМеханизм", строго по заветам БСП

Ну и понятное дело, самые нужные переключатели надо запихнуть на такую форму, найти которую на просторах интерфейса - мегаквест)
32. brr 179 19.07.21 17:36 Сейчас в теме
(18)Ахах, точно НовыйМеханизмКонтроляОстатков, НовыйОтчетПоОстаткам, НовыйОтчетПоОстаткам_NEW.
TimkoNzt; +1 Ответить
19. rpgshnik 2591 19.07.21 15:33 Сейчас в теме
Я бы пожалуй ещё добавил обязательно пункт писать то на латинице, то на русском. Вот реально бесит когда видишь, что человек не вынужденно использует латиницу, это №18.
ivanov660; +1 Ответить
21. amd1986 19.07.21 15:43 Сейчас в теме
Некоторые пункты спорные.

4. Возможно будет меньше потребления памяти для выполнения процедуры/функции
6. Не вижу сложности, если конструкция небольшая. Также вроде как быстрее выполняется код.
6. Непонятна нелюбовь к ?. Вполне себе рабочая функция
11. Зависит от задачи. Возможно так сделать оптимальнее. Но есть еще определенные хаки, упрощающие жизнь.
12. Как бы да, но не смертельно.
15. В БСП может и есть нужный функционал, но не факт что он выполняется быстро и не факт что через пару релизов этот функционал будет работать. Поэтому тут все зависит от задачи.
16. Зависит от запроса и опыта
Alex1c; v3rter; Sardukar; zhuntovda; +4 Ответить
29. dhurricane 19.07.21 17:10 Сейчас в теме
(21) Давайте попробуем поспорить. :-)

4. Копейки. Больше памяти будет отнято у разработчика, читающего код.
6. Сложно анализировать изменения такого кода. Сложно выцеплять из всего листинга программы привычные конструкции. Быстрее будет работать только под отладкой.
7. Нелюбовь не столько к оператору, сколько к монструозным конструкциям, которые с помощью него пишут.
12. Ни один из 17-ти приведенных пунктов не является смертельным. :-)
15. Если быстродействия действительно не хватает, то может и стоит писать свое. С другой стороны не факт, что и Ваш код будет выполняться быстро. Что касается неработающего функционала, то не стоит так переживать сильно, если Вы, во-первых, используете только публичные методы, и во-вторых, используете инструменты стат. анализа, либо читаете документацию по переходу на новые релизы. В конце концов устаревшие методы в БСП живут очень долго.
16. О чем и речь. Более опытных разработчиков призывают писать запросы, перевариваемые даже менее опытными коллегами.
v3rter; dvissarov5; ivanov660; +3 Ответить
40. amd1986 19.07.21 18:57 Сейчас в теме
(29)
4. Все зависит от требований. Хотя я также придерживаюсь такой рекомендации, т.к. сложнее отлаживать.
6. Кому как
7. Когда большая конструкция, то да. Когда нет - то нет(если, конечно, оплата не по строкам кода)).
15. Я уже более 10 лет пишу различные решения для типовых конфигураций и подстав от БСП словил массу, поэтому, конечно, БСП использую, но аккуратно. Основная проблема - клиент установил и настроил интеграцию с сайтом/облаком. А затем обновил конфигурацию. обновилась БСП, где пропал/переименовался метод. В итоге клиенту нужно заново ставить интеграцию(если такая есть).А это время/деньги/ресурсы.
16. Опытные разработчики по определению должны писать сложные запросы простым языком.
44. dhurricane 20.07.21 00:22 Сейчас в теме
(40) Ну вот. Почти во всем договорились. :-)

4. Не представляю, какие требования могут здесь повлиять на принятие решения. Я понимаю, когда мы с большими коллекциями работаем. Но вот наличие переменных аукнуться может ну разве что при глубокой рекурсии.
6. Допустим, что Вы действительно с легкостью читаете листинг вне зависимости от того, "лесенкой" там циклы или в одну строку. Но изменения то? Вот при обновлении сравниваете два модуля. И видите изменение лишь в одной строке. Соответственно надо чуть больше сосредоточить внимание, дабы понять, что именно там поменялось: условие цикла или условного оператора, какой-либо из операторов тела или вообще пробел/точку с запятой удалили. Неужели такой подход не будет раздражать все больше и больше с ростом количества подобных конструкций?
15. Я в профессии раза в 1.5 меньше. И считаю, что да, БСП следует использовать аккуратно - в моем понимании это значит стараться использовать только публичный интерфейс. И да, при обновлении конфигурации логично ожидать изменений в ее библиотеках, то бишь обновление конфигурации должно повлечь за собой проверку и обновление интеграций. Ну и как я сказал, устаревшие методы долго живут. Проблемы вдруг всплывают, если делать очень большой шаг в обновлении, либо в промежуточные не проверять использование устаревших методов и не читать документацию по обновлению библиотеки. Странно ожидать от библиотеки сохранения API пятилетней давности в неизменном виде.
16. Ну вот статья как раз и осуждает чрезмерную сложность, созданную искусственно. Значит здесь мы вовсе не спорим. :-)
115. triviumfan 26 26.07.21 11:08 Сейчас в теме
(44) Постоянно пишу
Если Условие Тогда Продолжить; КонецЕсли;

Зачем растягивать это на три строки? Вполне читаемо, тут перегнули палку.
ya.Avoronov; +1 Ответить
116. dhurricane 26.07.21 11:15 Сейчас в теме
(115) Правильно ли я понял, что Вы так пишете исключительно для сжатия листинга кода? Просто в моем представлении, написать в одну строку на толику усилий больше, нежели писать как обычно. Потому и возникает вопрос "зачем?"
117. triviumfan 26 26.07.21 11:37 Сейчас в теме
(116) Лаконично + быстрее читается.
усилий больше, нежели писать как обычно
Прикрепленные файлы:
119. dhurricane 26.07.21 12:14 Сейчас в теме
(117) Ну что непонятного то? :-)

На своем примере: я использую шаблоны текста в конфигураторе. Они мне сразу после ввода "Если" расставляют "Тогда" и "КонецЕсли" на нужных позициях плюс отступ для тела условного оператора. Стало быть, если я захочу вписать все в одну строку, мне потребуется выполнить дополнительные телодвижения, дабы удалить лишние отступы и переносы строк.

Если же шаблоны не используются, будет чуть проще. Я предполагаю, что при наборе "Если ... Тогда.." уже на уровне мышечной памяти мизинец хочет ударить по клавише "Enter" :-) И его нужно вовремя остановить, в противном случае также придется удалять лишние пробельные символы.

Вот эти дополнительные мысли и действия я имел ввиду, когда писал про "толику усилий". :-)

Это что касалось картинки. Что касается объяснения: "лаконично" - безусловно, "быстрее читается" - не представляю даже, как это померить или хотя бы обосновать.
41. zhuntovda 19.07.21 19:54 Сейчас в теме
(21) Абсолютно согласен! Хотел подобное написать!
22. kser87 2143 19.07.21 15:57 Сейчас в теме
Количество различных объектов метаданных и сложность запросов определяются предметной областью все же. А в остальном хорошо сказано. Добавил бы ещё странную манеру в результат всех функций пихать структуру.
27. oleganatolievich 148 19.07.21 16:50 Сейчас в теме
(22)
в результат всех функций пихать структуру

как жаль, что в 1С не завезли кортежей, поэтому и пихают в хеш-таблицу или недокласс результат работы функции.
это имхо гораздо лучше, чем в один параметр забубенить все
28. AntonProgma 29 19.07.21 17:04 Сейчас в теме
(27) они думают, что завели и назвали Фиксированный массив. Ироды.
34. brr 179 19.07.21 17:37 Сейчас в теме
(22)А как возвращать несколько значений?
42. kser87 2143 19.07.21 22:56 Сейчас в теме
(34) я же не говорю, что структуру в принципе нельзя использовать. Есть люди, которые ее всегда юзают. Типа на всякий случай
74. TimkoNzt 21.07.21 01:26 Сейчас в теме
(42)

А что? Хорошая привычка. Попробуйте, вам понравится)

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

Если функция вызывается из другой функции, то банально, кроме результата, нужно передавать из неё сообщения об ошибках. Тут хорошим тоном считается выводить информацию для пользователя, в т.ч. об ошибках, на уровне интерфейса, а не кидать сообщения где попало.
98. raider-rec@ya.ru 22.07.21 18:31 Сейчас в теме
(74) Я именно так и делаю, но не везде, а при проектировании сложных агрегатов. Использую ключи: Успех, Результат и СписокОшибок.
56. zqzq 21 20.07.21 11:03 Сейчас в теме
(34)
А как возвращать несколько значений?
Использовать параметры функции/процедуры. По Макконелу, сначала идут выходные параметры (передавать туда пустые переменные), потом входные (можно со Знач объявлять для наглядности).
68. brr 179 20.07.21 16:34 Сейчас в теме
(56На мой взгляд это тоже антипаттерн. Процедура ничего не должна возвращать в принципе, только обрабатывать переданные параметры, функция должна возвращать только то что указано после служебного слова Возврат.
Сто27001; raider-rec@ya.ru; +2 Ответить
23. frkbvfnjh 609 19.07.21 16:11 Сейчас в теме
Вы про Синдром 80-го уровня или чрезмерная сложность расскажите разработчикам типовых конфигурации и БСП!
v3rter; Сто27001; raider-rec@ya.ru; papami; dvissarov5; Jestery; +6 Ответить
102. ivanov660 2556 23.07.21 10:47 Сейчас в теме
(23)Разработчики 1С сидят на этом сайте (не все конечно), т.ч. рассказал и даже призвал к рефакторингу.
24. axelerleo 308 19.07.21 16:34 Сейчас в теме
Ну вот смотрите. Развернул я Сонар Куб, выгрузил в него Документооборот, и словил over9000 более 84000 ошибок и дефектов кода.
Когнитивная и цикломатическая сложность? О чем вы, это же БСП :)
Длина строки 120 символов? Ага, счас! у наших разработчиков большие мониторы, можем себе позволить!
Писать код в блоке Исключение? Зачем? Ошибку экранировали, и этого довольно!
Вместо ЭтаФорма нужно писать ЭтотОбъект? Кто это сказал? Может, это и наши рекомендации, но мы их соблюдать не обязаны!

И так по очень многим пунктам тех самых Стандартов и Методик, на которые все кивают при размещении вакансий :)

ЗУП с непрозрачным "API", как они это называют, так и вовсе рептилоиды писали. Цепочки вызовов по 10-15 штук - ну а что, зато модульно!

Так что тут никаких статей даже не надо, достаточно просто пару лет поплеваться от типового кода, чтобы выработался рефлекс самому так не писать :)
Alex1c; lmm; rpgshnik; Sardukar; Dorosh; user1485342; dvissarov5; brr; +8 Ответить
35. Yashazz 3879 19.07.21 17:42 Сейчас в теме
(24) вот поэтому, когда мне пеняют на мой стиль, я напоминаю, что БСП многократнейшим и наглейшим образом плюёт на стандарты 1С и просто культуру кода, проектирования, разработки и документации.
Alex1c; papami; Sardukar; dvissarov5; bulpi; brr; rds_tomsk; +7 Ответить
36. dhurricane 19.07.21 17:47 Сейчас в теме
(35) При всем моем уважении к Вам, но это плохой аргумент. В стиле "А у них негров линчуют".
39. Yashazz 3879 19.07.21 17:55 Сейчас в теме
37. ivanov660 2556 19.07.21 17:48 Сейчас в теме
(35)Все же я считаю, что не стоит равняться на "плохо кодеров", кодеров компании 1С (у них там много новичков, которые и пилят эти перлы). Правильно стремится держать качество кода, особенно внутри своей команды.
Мои антипаттерны ближе будут коллегам выполняющим в команде обзор кода.
53. dvissarov5 11 20.07.21 11:01 Сейчас в теме
(35) Просто культуру кода когда то взяли у западных ребят, которые на этом уже много раз набили шишку и создали на основании опыта. Ее перенесли в 1с умные люди.
А пишут совсем другие люди и порой совсем с разными мыслями об этом.
Такое ощущение, что им 1с в целом неинтересно соблюдение стандартов, ибо надо быстрее шпарить новые релизы и фитчи, а культура кода и проектировании это на потом на рефакторинг, который может случится а может нет))
Вопрос к наличию кодревь, и вроде как пишут о новинках автотестирования и всяких прелестях жизни качественного продукта. А на деле неочевидно что применяется.
25. oleganatolievich 148 19.07.21 16:47 Сейчас в теме
баянище... наверное будет открытием для тех, кто не читал Макконнелла или Мартина.

1, 2, 3, 5, 6 - про форматирование, можно объединить в 1, мол читай стандарты кодирования от 1С.
7 - про сложность, можно объединить с 16.
но тогда бы писанины было меньше и плюсов тоже :)
8 - когда мало параметров, ими легко манипулировать в дальнейшем коде, это же азы.
9 - тут можно было уточнить про "спагетти-код" и "лазанья-код".
10 - переиспользование кода рулит, и это тоже азы.
11 - боль в отладке.
12 - в БСП такое любят, им влом влепить структуру с флагом ошибки и возвращаемым значением.
13 - про magic numbers. ТекущаяДата() всегда возвращает секунды, неужто кто-то еще не знает, что 86400 = 1 день? а вот про Цена = 42 соглашусь.
14 - перекликается с 13. а еще есть "мягкое кодирование", когда слишком много настроек.
16 - такие запросы чаще всего являются следствием ошибок на этапе архитектуры. видел такой запрос в одной дописанной конфигурации.
17 - это у всяких паттерн-наци все всегда правильно, а иногда бизнесу надо "вернуть все взад" и закомментированный код может пригодиться.

есть такой антипаттерн, как поток лавы - 1Сники его в типовых часто сами применяют.
когда сначала пишется механизм, на него завязываются другие механизмы, а потом в основном находят ошибку и правят, а в зависимых местах иногда не правят.
dvissarov5; zqzq; +2 Ответить
103. ivanov660 2556 23.07.21 10:58 Сейчас в теме
(25)
1. Читайте стандарты - не так информативно, да и никто не полезет читать ИТС (скучно). Я разложил на конкретные ситуации с примерами и описанием. Эта информация позволит упростить код-ревью и повысить внутреннюю культуру разработчика (не у всех конечно).
2. Все примеры относительно простые и банальные (кроме обобщенных последних) ,поэтому легко запоминаются и легко исправляются. Стандартные антипаттерны для других языков не всегда применимы, иногда через какое-то обобщение и абстракцию.
3. Про 1С-ников из корпорации "зла" я уже говорил, что не стоит равняться на плохой стиль. "Единственный путь стать умнее — играть с более сильным противником" - Эмануэль Ласкер.
Мы в команде стараемся придерживаться стандартов и хорошего стиля. Как раз - эта статья результат нашего вебинара по качеству кода, которым мы решили поделиться с сообществом.
104. oleganatolievich 148 23.07.21 11:34 Сейчас в теме
(103)
1. Читайте стандарты - не так информативно, да и никто не полезет читать ИТС (скучно). Я разложил на конкретные ситуации с примерами и описанием. Эта информация позволит упростить код-ревью и повысить внутреннюю культуру разработчика (не у всех конечно).

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

ок.
3. Про 1С-ников из корпорации "зла" я уже говорил, что не стоит равняться на плохой стиль. "Единственный путь стать умнее — играть с более сильным противником" - Эмануэль Ласкер.

какие противники, вы о чем? я вам бизнес-кейс, а вы мне мотивации. ладно, я тоже помотивирую - "выбирай выбирать, не выбирай не выбирать"...
Мы в команде стараемся придерживаться стандартов и хорошего стиля. Как раз - эта статья результат нашего вебинара по качеству кода, которым мы решили поделиться с сообществом.

классная у вас команда, время есть на вебинары и статьи на инфорстарте. иногда времени на рефакторинг не очень много.
105. ivanov660 2556 23.07.21 12:03 Сейчас в теме
(104)
1. Про поток лавы 1С спасибо, сейчас перечитал (много комментариев перегрузился).
2. Вебинар на 40-60 минут, приносит достаточно много пользы и поддерживает команду в тонусе. Но они не такие частые, к сожалению, не чаще 1 раза в неделю и может 1-2 раза в месяц. Это нормальная много где использующаяся практика, которая согласована с руководством. А статьи для сообщества я пишу в обычно свободное время, поэтому довольно большие интервалы.
Время на рефакторинг или технический долг тоже надо выбивать у руководства, к сожалению это также идет со скрипом, поэтому стараемся пресекать превентивно - код-ревью, архитект-ревью.
26. AntonProgma 29 19.07.21 16:47 Сейчас в теме
Ну это не только к 1с можно отнести. А вот одиэсовские приколы архитектуры:
1. Сотни подписок на события.
2. Куча невидимых реквизитов объекта формы.
Yashazz; Serg O.; +2 Ответить
30. diocon 19.07.21 17:16 Сейчас в теме
Также всегда, где можете, инициализируйте переменные внутри процедур, это значительно сокращает количество строчек и количество ненужных переменных.


Что здесь не так? Вполне норм.

15. БСП не всегда логично работает, в частности, приходилось свое распределение числа на массив писать, БСП-вариант плохо относит погрешность округления...
38. ivanov660 2556 19.07.21 17:51 Сейчас в теме
(30)Они стараются, изо всех сил допиливают и улучшают БСП, хотя приходится тянуть отголоски старого плохого кода.
Кстати если все же перепишут на асинхронные вызовы, то часть жутчайшего кода можно будет выкинуть.
31. Serg O. 191 19.07.21 17:30 Сейчас в теме
поддержу (25) читайте рекомендации 1С
и "классику"...
очень полезна книга Роберта Мартина "Чистая архитектура. Искусство разработки программного обеспечения"
https://market.yandex.ru/product--martin-r-chistaia-arkhitektura-iskusstvo-razrabotki-programmnogo-obespecheniia/560253695

Чистый код - больше для программистов на Java (и всех Си-подобных языков)

кто не хочет читать - посмотрите видео...
например от Немчинского - про правильные названия
https://www.youtube.com/watch?v=5vsfYifNqzk

Принцип DRY - (очень часто нарушается в 1С ! )
дублирование кода прям везде даже в типовых конфигурациях
https://www.youtube.com/watch?v=NWemqNMCesQ

Принцип KISS
https://www.youtube.com/watch?v=rix-fkrloq4

а так же про составные принципы SOLID
sulfur17; EMelihoff; +2 Ответить
90. Hans 1 22.07.21 09:33 Сейчас в теме
(31) Немчинскому и толстому незалежная хорошо промыла мозги. Нерекомендую к просмотру ура патриотам.
43. starik-2005 2349 20.07.21 00:06 Сейчас в теме
Как не стоит делать - да, миллион статей. Как стоит делать - обычно чуть-чуть в самом конце, общие фразы.

Вот я не нашел статьи про то, как читать код. Как писать и как не стоит писать - да, а вот как читать?
vano-ekt; dvissarov5; rds_tomsk; +3 Ответить
80. biimmap 118 21.07.21 14:48 Сейчас в теме
(43) а чего сложного? на русском же)))

Если серьёзно, то чтение кода упрощает только большой опыт, знание инструментов (т.е. объектов метаданных), знание стандартов разработки и много много написанного тобою лично кода.

Если через слово смотреть в синтаксис-помощник, то читать код конечно будет трудновато.

Надо задуматься... может правда статью написать про это
v3rter; zqzq; +2 Ответить
82. ivanov660 2556 21.07.21 14:59 Сейчас в теме
91. Hans 1 22.07.21 09:35 Сейчас в теме
(80) Пиши статью. Действительно никто не пишет как читать эффективно и быстро. Многие программисты большинство времени читают код, а не пишут, особенно в 1С на доработках каких то.
106. v3rter 23.07.21 12:08 Сейчас в теме
(80) Зачем только статью? Натренируйте нейросеть - с руками оторвут)
107. ivanov660 2556 23.07.21 13:06 Сейчас в теме
(106)Чтобы натренировать нужны мастер данные. А где их взять? Из типовых конфигураций - там средненький код. Т.е. мы зашли в тупик.
45. d.samsonov92y 20.07.21 07:09 Сейчас в теме
Очень много воды, много странных примеров для описания проблем. Например однострочный трай где в попытке Записать, а в исключения сообщить описание ошибки - никаких проблем никогда не вызывает. А вот чтобы в одну строку писали трай где вызывается 2-3 процедуры или функции я никогда не встречал за 10 лет и никто так не делает.

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

14 пункт тоже странный. Если путь на 100% определен и не будет меняться, то что в этом неправильного? Это с точки некой этики конечно неправильно, но ничего "анти" в этом нет.

Практических советов крупицы, количество полезной информации на общий объем текста стремится к нулю. Я уже не говорю что с паттернами тут вообще никакой связи нет.
serg-666; +1 Ответить
47. dhurricane 20.07.21 09:24 Сейчас в теме
(45)
никаких проблем никогда не вызывает.
До тех пор, пока не придется доработать этот кусок кода: вставить что-нибудь в дополнительные свойства, дополнить диагностику ошибки. Чтобы в первоначальном виде кто-то писал 2-3 процедуры или функции внутри блока в одну строку, я тоже никогда не видел. Но много раз видел, как дорабатывали чужой код слепо придерживаясь исходному стилю написания. Так что появление новых деталей в одной строке вполне возможно. Потом при сравнении модулей сиди, высматривай, что именно изменилось в этой строке.

Если путь на 100% определен и не будет меняться
Такое вообще бывает?
dvissarov5; +1 Ответить
48. d.samsonov92y 20.07.21 09:40 Сейчас в теме
(47) Так если нужно доработать, что сложного проставить пару переносов строк? Ты же уже дорабатываешь.

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


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


(47)
Такое вообще бывает?

К сожалению да. Видел древнейшие базы которые при начале работы системы обращались во внешние обработки. Конкретно с этим проблем никогда не случалось. Если кто-то в коде указывает путь до обработки на рабочем столе, то это скорее говорит о слабых навыках, а не о том что он все знает, но делает именно вот так.
49. dhurricane 20.07.21 10:11 Сейчас в теме
(48)
что сложного проставить пару переносов строк?
Так я о том же. :-) Почему бы сразу не написать в несколько строк? Плохо себе представляю, как ввод в одну строку может быть удобен. В моем представлении, в одну строку пишут исключительно осознанно, не на автомате.

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

Видел древнейшие базы которые при начале работы системы обращались во внешние обработки. Конкретно с этим проблем никогда не случалось.
Ну да, представляю. Видимо, я слишком много работаю с постоянно меняющимися требованиями. И подобных решений пока не наблюдал.
50. bulpi 184 20.07.21 10:34 Сейчас в теме
Практически все используется в типовых конфигурациях. И эти люди запрещают мне ковыряться в носу (С) !
51. serg-666 20.07.21 10:49 Сейчас в теме
Хотелось бы спросить, а какое все написанное в этой статье имеет отношение к паттернам?
Это все тянет на какие-то рекомендации оформления кода (местами спорные), но паттернами тут даже не пахнет.
Сначала бы хотелось увидеть руководство по паттернам проектирования от вендора, а то, судя по типовому коду, в самой желтой цитадели нет единого понимания, что такое шаблоны проектирования в 1С.
52. ivanov660 2556 20.07.21 11:00 Сейчас в теме
(51) Как я писал выше паттренами называются повторяющиеся из раза в раз однотипные действия, которые можно представить как шаблон. И эти повторяющиеся действия я выделил анализируя код различных команд, конфигураций, обработок.
58. serg-666 20.07.21 11:28 Сейчас в теме
(52) На сколько я понимаю, есть вполне устоявшееся понятие - design patterns, реже programing patterns. Зачем такое громкое название Антипаттерны? Это вводит в заблуждение. Я начал читать эту статью в надежде увидеть хоть что-то о правильном проектировании в 1С, а увидел вот это... Вот, например, пункт 5. Это паттерн? Давайте дадим ему имя "паттерн Shift+Alt+F". У меня нет цели Вас обидеть. Просто название статьи не отражает содержание. Хотя, ладно, Вам виднее.
vano-ekt; +1 Ответить
61. ivanov660 2556 20.07.21 12:41 Сейчас в теме
(58)
1. anti-pattern также устоявшееся понятие en.wikipedia.org/wiki/Anti-pattern.
2. Согласен без обид, но название статьи отражает информацию, которая в ней изложена. Возьмите определения. Для некоторых антипаттернов есть устоявшиеся выражения, для некоторых нет.
3. Кроме приемов успешного кода, также нужно смотреть как не нужно делать. Это также важная информация, но с другой стороны баррикад. Использовать правильные практики одно, а вот найти у себя анти хорошую практику - другое. Т.е. вы можете использовать десять правильных подходов, но не замечать пару плохих.
55. ivanov660 2556 20.07.21 11:02 Сейчас в теме
(51)У вендора есть рекомендации на ИТС. Но судя по всему у них отсутствует или хромает процедура код-ревью или обзора кода, либо - это делают джуны.
81. biimmap 118 21.07.21 14:53 Сейчас в теме
(55) я пока там работал мой код смотрели на предмет соблюдения стандартов. Довольно много ошибок нашли в коде. На тот момент я ещё мало знал и использовал стандарты разработки. Но там проверяют друг друга. Нет отдельной компетенции по проверке кода. В целом люди грамотные но очень занятые. Это может накладывать некоторые недочёты при проверке.
54. Гость 20.07.21 11:02
Сообщение было скрыто модератором.
...
57. ipoloskov 148 20.07.21 11:13 Сейчас в теме
18. Пишите большие процедуры. Если в вашей процедуре меньше 1000 строк, никто не поверит, что вы крутой программист. Вот в компании 1С - крутые программисты. Особенно это доставляет, когда вы хотите изменить какую-то одну строку, и для этого приходится тащить всю такую процедуру в расширение.
19. Чем больше параметров в процедуре - тем лучше. Забудьте про СообщитьПользователю(Текст, Отказ, ПараметрыВывода). Гораздо лучше смотрится СообщитьПользователю(Текст, КлючДанных, Поле, ПутьКДанным, Отказ). Наиболее часто используемый параметр - Отказ - ставьте последним. Поверьте, другим программистам очень приятно считать запятые при написании вызова вашей функции.
67. stvorl 995 20.07.21 16:07 Сейчас в теме
(57) Не подсказывайте. В очередной версии БСП переставят, будем всю кодовую базу править под новую сигнатуру этого, весьма часто используемого, вызова.
lmm; unknown181538; +2 Ответить
69. ipoloskov 148 20.07.21 17:12 Сейчас в теме
(67) просто это то, что сразу вспомнилось. В конфигурациях 1С не редкость процедуры с 10 параметрами. Между тем, Роберт Мартин пишет, что 3 параметра должно быть максимумом. Разработчики не читали Роберта Мартина, или сознательно игнорируют принципы чистого кода? А возвращаемые через параметры значения? О, как это помогает читать код!
Оставьте свое сообщение

См. также

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

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

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

27.01.2016    82758    Serginio    113    

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

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

Еще несколько примеров решения задач в СКД.

06.04.2021    7686    Neti    8    

Неочевидные нюансы записи управляемой формы

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

Разберем несколько нюансов записи управляемой формы.

02.04.2021    8717    SeiOkami    52    

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

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

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

25.03.2021    27975    rayastar    49    

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

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

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

16.03.2021    5336    velemir    31    

Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)

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

Покажу точки входа для доработки "типового" проведения документов в ERP для регистров оперативного учета. Рассмотрим три основные ситуации: нужно изменить имеющееся проведение документа; нужно сделать записи в существующие регистры; нужно с нуля описать алгоритм проведения в добавленный регистр. Пример реализован на 1С:ERP Управление предприятием 2 (2.5.4.120)

10.01.2021    8712    BuriyLesha    9    

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

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

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

28.12.2020    7082    comol    31    

Базовые вещи БСП, которые облегчат жизнь программисту 1С

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

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

30.08.2020    16754    quazare    34    

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

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

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

10.12.2016    39783    unichkin    74    

Форма выбора (подбор) в управляемых формах

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

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    58831    user5300    18    

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

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

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

27.01.2020    54482    ids79    26    

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

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

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

15.10.2018    34423    tormozit    106    

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

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

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

15.01.2020    38118    John_d    22    

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

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

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

30.12.2019    30179    kuzyara    38    

30 задач. Странных и не очень

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

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    21713    YPermitin    62    

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

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

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

20.09.2012    81331    tormozit    131    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

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

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    11281    Sibars    19    

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

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

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

07.10.2019    36962    HostHost    41    

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

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

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

01.10.2019    48181    Yashazz    55    

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

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

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

11.07.2007    52502    tormozit    51    

О программе Postman для тестирования API и для чего она нужна 1С-нику

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

Для чего нужна программа Postman для тестирования API и какая от него польза для 1С-программиста.

24.09.2019    17925    budidich    29    

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

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

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

06.09.2019    86729    rpgshnik    71    

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

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

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

05.09.2019    69337    ids79    55    

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

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

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

10.09.2017    49112    tormozit    74    

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

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

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

05.09.2019    40972    YPermitin    25    

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

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

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

03.09.2019    28910    YPermitin    81    

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

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

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

17.08.2019    41725    ids79    19    

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

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

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

25.04.2019    17073    m-rv    3    

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

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

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

08.08.2019    133003    ids79    75    

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

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

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

02.08.2019    53964    avalakh    26    

Разбираемся с параметрами редактирования СКД

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

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    36531    json    15    

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

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

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

16.04.2019    22134    m-rv    17    

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

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

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

26.07.2019    93890    ids79    15    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода SonarQube EDT v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    18816    Stepa86    40    

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

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

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

17.07.2019    44638    ids79    27    

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

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

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

01.06.2018    34913    m-rv    22    

Регистры сведений. За кулисами

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

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    31671    YPermitin    14    

"Меньше копипаста!", или как Вася универсальную процедуру писал

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

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    21490    SeiOkami    52    

Работа с настройками системы компоновки данных

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

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    74244    ids79    17    

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

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

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

05.12.2017    29962    itriot11    34    

Создание отчетов с помощью СКД - основные понятия и элементы

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

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    69797    ids79    27    

Регистры накопления. Виртуальные таблицы. Часть №2: "Остатки" и "Остатки и обороты"

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

Описание работы платформы 1С:Предприятие 8.2 с виртуальными таблицами регистров накопления "Остатки" и "Остатки и обороты". Анализ SQL-запрос при работе с виртуальными таблицами

22.05.2019    39051    YPermitin    8    

Регистры накопления. Структура хранения в базе данных

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

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    57764    YPermitin    30    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

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

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    41863    ids79    45    

О расширениях замолвите слово...

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    40861    ellavs    131    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

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

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

28.03.2019    30574    ellavs    90    

Трюки с внешними источниками данных

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

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    38505    YPermitin    53    

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

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

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    59813    Смешной 1С    32