Стабильность превыше всего

07.11.19

Разработка - Рефакторинг и качество кода

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

Предисловие

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

Но вернемся с небес на землю! Во многих компаниях разработка / доработка конфигураций ведется в таком ритме, что бумага просто не поспевает за ними (или вместо бумаги Jira, Confluence, Redmine и т.д.). Когда в неделю выполняются десятки доработок и изменений - технические задания отпадают сами собой. Их, конечно, могут писать и в таких ситуациях, но в основном это делают только для фиксации результатов, когда задача уже вышла на рабочее окружение (ну или для "разведения бюрократии"), а также чтобы передать всю старую кипу бумаг новому программисту в будущем. Вникать в курс дела, так сказать. Но сами понимаете, что, если ТЗ писались только потому, что "так надо", никакой практической пользы они не принесут.

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

 
 ВНИМАНИЕ!!! Прочитайте, прежде чем продолжать

Мы не будем рассказывать о специфике работы таких компаний и о причинах происходящего. На эти темы отлично пишет Иван Белокаменцев. Очень интересной была одна из последних публикаций. Рассмотрим другую сторону вопроса. Что нужно сделать программисту / разработчику, чтобы сохранить стабильность работы системы при таком наплыве непротестированных на 100% доработок. Что необходимо сделать нам, разработчикам, чтобы снизить риски при высоких темпах разработки. Вот об этом и пойдет речь далее.

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

Коллапс

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

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

Плевое дело! В начале процедуры-обработчика команды "ПробитьЧек", связанной с одноименной кнопкой на форме, нам всего на всего нужно выводить сообщение с привязкой к текущему объекту документа и полю реквизита "СуммаДокумента" на форме. Что может быть проще!

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

// ........

// ++
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Сумма чека к оплате " 
	+ Объект.СумаДокумента // !!! ОПЕЧАТКА !!!
	+ "(руб.)";
Сообщение.УстановитьДанные(Объект);
Сообщение.Поле = "СуммаДокумента";
Сообщение.Сообщить();
// --

ЧекПробит = ПробитьЧекНаКлиенте();

Если ЧекПробит Тогда
	ТолькоПросмотр = Истина;
КонецЕсли;

// ........

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

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

Как же мы, разработчики, можем застраховать себя от подобных сюрпризов? Конечно, конечно! Вы можете сказать, что нужны прямые руки или тестировщики. Или и то и другое. Но что, если у нас есть только прямые руки, а руководство скупится на зарплаты тестировщика в штате? Вариант просыпаться в 8 утра, когда начинают работать магазины и исправлять баги - не для нас. А уж тем более по выходным!

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

Вся ответственность на разработчике

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

Скажи эксепшенам нет!

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

// ........

// ++
Попытка
	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = "Сумма чека к оплате " 
		+ Объект.СумаДокумента // !!! ОПЕЧАТКА !!!
		+ "(руб.)";
	Сообщение.УстановитьДанные(Объект);
	Сообщение.Поле = "СуммаДокумента";
	Сообщение.Сообщить();
Исключение
	// Ничего не делаем
КонецПопытки;
// --

ЧекПробит = ПробитьЧекНаКлиенте();

Если ЧекПробит Тогда
	ТолькоПросмотр = Истина;
КонецЕсли;

// ........

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

"Выключатели"

Еще один способ сохранения относительной стабильности - "выключатели". Покажу на примере.

В конфигурации создаем справочник "Разработка" с реквизитом "Флаг" булевого типа. Для всех пользователей добавим право на чтение / изменение этого справочника.

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

Для нашего примера добавим предопределенный элемент с именем "СообщитьОСуммеЧекаПриПробитии".

В соответствии с этим необходимо изменить программный код в обработчике команды "ПробитьЧек" и добавить кэширование значение реквизита "Флаг" для добавленного предопределенного элемента. Первым делом добавим реквизит формы "СообщитьОСуммеЧекаПриПробитии" с типом "булево", а в обработчике формы "ПриСозданииНаСервере" запишем в этот реквизит соответствующее значение.

Примечание: кэширование значения реквизита "Флаг" выполняем для того, чтобы исключить повторные обращения к серверу по команде "ПробитьЧек".

В соответствии с описанными изменениями программный код процедуры-обработчика команды "ПробитьЧек" примет следующий вид:

// ........

// ++
Если СообщитьОСуммеЧекаПриПробитии Тогда
	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = "Сумма чека к оплате " 
		+ Объект.СумаДокумента // !!! ОПЕЧАТКА !!!
		+ "(руб.)";
	Сообщение.УстановитьДанные(Объект);
	Сообщение.Поле = "СуммаДокумента";
	Сообщение.Сообщить();
КонецЕсли;
// --

ЧекПробит = ПробитьЧекНаКлиенте();

Если ЧекПробит Тогда
	ТолькоПросмотр = Истина;
КонецЕсли;

// ........

Таким образом, если будет обнаружена ошибка, то разработчик с легкостью уберет флаг в предопределенном элементе "СообщитьОСуммеЧекаПриПробитии" справочника "Разработки" и ветка с программным кодом вообще перестанет выполняться. Никаких экстренных обновлений базы не потребуется, работа нормализуется. Главное форму чека переоткрыть после отключения функционала.

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

Уже не плохо. Для временного исправления ситуации уже не нужно обновлять информационную базу, но вставать в 8 утра все же пришлось бы! Но у нас есть еще интересный вариант в копилке!

Полная автоматизация

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

&НаКлиенте
Процедура ПробитьЧек(Команда)

	// ++
	Если СообщитьОСуммеЧекаПриПробитии Тогда
		
		Попытка
		
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "Сумма чека к оплате " 
				+ Объект.СумаДокумента // !!! ОПЕЧАТКА !!!
				+ "(руб.)";
			Сообщение.УстановитьДанные(Объект);
			Сообщение.Поле = "СуммаДокумента";
			Сообщение.Сообщить();
		
		Исключение

			ИнформацияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());

			// Тут сохраняем каким-либо образом информацию об ошибке

			// Отключаем доработку с ошибкой
			ОтключитьФлаг("СообщитьОСуммеЧекаПриПробитии");

		КонецПопытки;
		
	КонецЕсли;
	// --

	ЧекПробит = ПробитьЧекНаКлиенте();

	Если ЧекПробит Тогда
		ТолькоПросмотр = Истина;
	КонецЕсли;

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

&НаСервереБезКонтекста
Процедура ОтключитьФлаг(ИмяПредопределенногоЭлемента)

	// Сбрасываем значение в кэше данных формы
	СообщитьОСуммеЧекаПриПробитии = Ложь;

	ОбъектФлаг = Справочники.Разработки[ИмяПредопределенногоЭлемента].ПолучитьОбъект();
	ОбъектФлаг.Флаг = Ложь;

	Попытка
		ОбъектФлаг.Записать();
	Исключение
	КонецПопытки;

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

К-к-к-к-к-к-комбо!

Теперь при возникновении ошибки флаг включения нового программного кода будет сброшен в ЛОЖЬ автоматически и при последующих вызовах команды "ПробитьЧек" ошибка вообще не будет воспроизводится.

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

А что, если ...

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

Если ЕстьОпечатки Тогда
    Сообщить("Ошибки в коде!");
Иначе
    Сообщить("Ошибок нет!");
КонецЕсли;

А если ошибка будет не синтаксическая, а логическая! Да, тогда автоматически алгоритм не отключится. Нужно будет руками отключить флаг использования разработки. Но никто не обещал создать на платформе 1С:Предприятие искусственный интеллект! Зачем же тогда мы нужны были бы!

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

А каков Ваш идеальных подход в такой ситуации?

 
 Ответы на все вопросы

Другие ссылки

Авторские разработки

стабильность разработка проверка гибкость оперативность изменения

См. также

Когда понадобился новый оператор

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Когда понадобился новый оператор, но его нет в синтакс-помощнике, что делать?

вчера в 08:00    679    ZhokhovM    2    

2

Когда разработчик платформы не добавил проверку препроцессоров

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

вчера в 07:00    1706    ZhokhovM    2    

4

Реструктуризация - бесконечная история

Рефакторинг и качество кода Платформа 1С v8.3 Бесплатно (free)

При разработке программ требуемый функционал ставят на первое место, но есть еще и архитектура программы. На горизонте 5-10 лет она становится важнее функционала, который должен работать при масштабировании и росте данных. Реструктуризация 5 терабайтной базы 1С 8.2 в формат 1С 8.3, складывает весь пазл архитектурных просчетов, которые сделали ради функционала. Как это исправить? - для разработки правильной архитектуры, нужно всего лишь сместить фокус с функционала и подумать о «вечном».

29.09.2023    1866    1CUnlimited    15    

22

Чистый код. Мой взгляд на жизнь в макаронных джунглях. Часть 2

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

27.09.2023    6867    Lemmonbri    136    

35

Чистый код. Мой взгляд на жизнь в макаронных джунглях. Часть 1

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

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

19.09.2023    4258    Lemmonbri    16    

31

5 подходов при доработке конфигурации 1С, чтобы в будущем не было мучительно больно её обновлять

Архитектура Рефакторинг и качество кода Обновление 1С Платформа 1С v8.3 Бесплатно (free)

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

10.08.2023    9511    0    1c-izhtc    37    

21

Задача на ошибки и неоптимальности при проведении приходной накладной

Рефакторинг и качество кода Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

11.07.2023    2183    magic1s    32    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. PerlAmutor 129 07.11.19 19:22 Сейчас в теме
У нас подобный подход встречается для крупных блоков доработок. Например есть приказ, что с 1 ноября все сотрудники работают по такой-то схеме бизнес-процесса. Чтобы эту новую логику заложить на старых метаданных требуется доработка, которая не должна влиять на работу до 1 ноября. Так вот подобный выключатель полезен первые пару дней после перехода. Просто сдвигаем дату с 1 ноября на 2 ноября, люди продолжают работать как и работали, пока разработчики в срочном порядке исправляют критичные баги, которые всплывают только у пользователей с ограниченными правами и только в тонком клиенте и когда созвездие Стрельца находится в Деве.
mrflatcher; Designer1C; Tikoven; CyberCerber; YPermitin; +5 Ответить
13. пользователь 08.11.19 11:16
(1)
Стрельца находится в Деве


Это частая причина. Возможно надо написать в фирму "1С", чтобы убрали эту связь с багами в конфигурациях.
16. starik-2005 3031 08.11.19 11:43 Сейчас в теме
(13) так созвездие Стрельца в Деве в принципе находиться не может - Солнце, там, Луна, планеты - да, а одно созвездие в другом - нонсенс... В общем надо правильно описывать баг, непротиворечиво.
YPermitin; +1 Ответить
21. PerlAmutor 129 08.11.19 18:33 Сейчас в теме
(16) В Астрономии может даже и быть, но если правильно выбрать точку (не на земле, а во вселенной). А в Астрологии так вообще любые чудеса могут происходить )) А так это скорее ситуация, которая по мнению программиста случиться никогда не должна была бы...
YPermitin; +1 Ответить
22. пользователь 08.11.19 18:43
(21) Мы похоже какой-то плавающий баг обсуждаем.
24. starik-2005 3031 08.11.19 23:47 Сейчас в теме
(21) если выбрать точку (этак в паре десятков световых лет, полагаю), то предположу, что звездный узор не будет похож уже ни на Деву, на на Стрельца (или кто там был?)

А в астро(логии? Правда?) - вообще любой бред может быть, и пытливый ум всегда найдет, как это притянуть за уши к окружающей действительности. Есть же универсальные рецепты, да?)))
2. acanta 07.11.19 19:45 Сейчас в теме
У нас такой подход использовался при независимой работе нескольких разработчиков без выделенного руководителя проекта. Можно предположить, что код вызова сообщения/комментария об ошибке например содержит информацию о разработчике данной доработки и "шквал звонков" или электронной почты обрушивается на автора доработки.
Когда есть руководитель проекта и у него есть возможность заменить накосячившего исполнителя этот подход теряет смысл.
YPermitin; +1 Ответить
3. Stepa86 1520 07.11.19 19:50 Сейчас в теме
Это теперь все более популярная тема. Гуглить "Feature flags" и "Feature Toggles"
YPermitin; o.nikolaev; +2 Ответить
4. kraynev-navi 647 07.11.19 20:26 Сейчас в теме
(3) надо по-русски гуглить "Функциональные опции"
АлександрВладимирович; kron.isant; YPermitin; +3 Ответить
5. Vladimir Litvinenko 2865 07.11.19 22:10 Сейчас в теме
Проблема понятна, и от опечаток никто не застрахован. Но фича-флаги (импровизированные "функциональные опции") при такой гонке за временем навсегда остаются в конфигурации. И конфигурация обрастает бесконечными вставками вида:

Если ХранилищеНашихНастроек.ПолучитьНастройку("Сообщения о цене при пробитии чека по просьбе бабы Маши включены") Тогда
   // Две строки полезного кода
КонецЕсли

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


С другой стороны вот всего за две минуты почти автоматически записал сценарий, который избавит от необходимости обрамлять этот код. И с высокой долей вероятности любой другой код, связанный с пробитием чека. Стабилизация и установка нужной цены для товара заняла бы еще 2 минуты. Сложно придумать аргументы, чтобы сэкономить 4 минуты, если стабильность действительно является ценностью. И никаких бессмысленных условных операторов в коде. Разве что однажды написанные механизмы, позволяющие автоматически запускать тесты. Да и то, сохраняется возможность полениться и не делать автоматический запуск, а запускать сценарии один раз перед релизом вручную )) Хотелось бы чтобы больше в этом направлении коллеги смотрели. 2020 год близится как никак ))

Функционал: Отображение суммы чека после его пробития в панели сообщений пользователю

Как     Продавец розничного магазина
Я хочу  Видеть сумму чека при пробитии в панели сообщений пользователю
Чтобы   Иметь вомзожность быстро сравнить сумму чека на бумажном корешке с суммой чека в 1С

Контекст:
    Дано я подключаю TestClient "Этот клиент" логин "Продавец1" пароль ""

Сценарий: Пробитие чека с сообщением суммы

    Когда Я открываю смену

        Когда В командном интерфейсе я выбираю 'Продажи' 'Чеки ККМ'
        Тогда открылось окно 'Чеки ККМ'
        И из выпадающего списка с именем "КассаККМОтбор" я выбираю точное значение 'Фискальный регистратор (Торговый зал)'
        И я нажимаю на кнопку 'Открыть смену'

    И Выполняю продажу товара по цене двести одинадцать рублей

        Тогда В панели разделов я выбираю 'Продажи'
        И В панели функций я выбираю 'Рабочее место кассира'	
        И я выбираю пункт контекстного меню "Добавить" на элементе формы с именем "Товары"
        И в таблице "Товары" из выпадающего списка "Номенклатура" я выбираю по строке 'Товар по цене 211 рублей'
        И в таблице "Товары" в поле 'Количество' я ввожу текст '1,000'	
        И я нажимаю на кнопку с именем 'ОплатитьНаличнымиДубль'
        Тогда открылось окно 'Оплата наличными'
        И я перехожу к закладке "Группа страница прочее"
        И я нажимаю на кнопку 'Команда2'
        И я нажимаю на кнопку 'Команда1'
        И я нажимаю на кнопку 'Команда1'
        И я нажимаю на кнопку 'Пробить чек (Alt+F2)'

    Тогда в логе сообщений TestClient есть строка "Продан товар за 211 рублей"
Показать

Free1CforAll; PLAstic; CyberCerber; le0nid; YPermitin; litonchik; wowik; ltfriend; stopa85; Артано; Бэнни; +11 Ответить
14. пользователь 08.11.19 11:19
(5) Полностью согласен со всем написанным.

А выгребать "флаги" из конфигурации, я такого вообще не видел.
20. kwazi 614 08.11.19 17:48 Сейчас в теме
(5) а что за технология? где почитать?
23. Vladimir Litvinenko 2865 08.11.19 23:29 Сейчас в теме
(20) Сейчас уже можно найти очень много полезной информации по этой теме по ключевым словам "Тест менеджер" , "Тест клиент", "Vensssa-Automation" , "Vanessa-ADD". Можно еще в качестве альтернативы посмотреть "Тестер".
TerveRus; +1 Ответить
31. bulpi 215 11.11.19 13:13 Сейчас в теме
(5)
Что-то я вообще не понял. К чему это сочинение на вольную тему и как оно поможет вывести сообщение ?
32. TerveRus 11.11.19 15:14 Сейчас в теме
(5) ну уж это полнейший абсурд и ложь про две минуты. До этого пришлось сколько недель/месяцев изучать этот функционал тестирования?
Тем более, текст был уже готов, за две минуты разве что пару строк там подправить можно было, но не все с нуля писать.

Что это такое вообще? Для чего скрипт?
33. Vladimir Litvinenko 2865 11.11.19 22:52 Сейчас в теме
(32) Две минуты занимает запись и воспроизведение. Ну еще описать фичу понятными человеку словами и сделать отступы секунд 30-60. Это серьезно то, о чём нужно спорить?

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



А то что технологии и инструменты требуют обучения и навыка... Ну как бы да, есть такой большой недостаток у этих гадких технологий и инструментов.
Среди пришедших в 1С за легким заработком ходят слухи, что для 1С-ника вообще достаточно навыка два раза кликать на ярлыке конфигуратора. Но даже после его открытия нужен навык набора на клавиатуре )) Хотя... можно обойтись и без него. Достаточно обернуть весь написанный код в Попытку - Исключение. Всё равно половину никто проверять не будет )) Довольно частый случай кстати на наших предприятиях. Не раз уже видел как так работают сторонники мнения "ревью и тесты не для нас, они только мешают ломать работать".

Уф, хорошо, что в этот раз статья про код в попытках, а не про всякие бесполезные планы запросов )) Чтоб тут началось..... )
mvxyz; PLAstic; _slava_; acanta; YPermitin; +5 Ответить
34. пользователь 11.11.19 23:48
(33)
Уф, хорошо, что в этот раз статья про код в попытках, а не про всякие бесполезные планы запросов )) Чтоб тут началось..... )


Спасибо за идею для публикации :)))))

Пример отлично описали)
6. o.nikolaev 211 07.11.19 22:54 Сейчас в теме
:) Делал подобное, правда не столь капитальный подход был.
YPermitin; +1 Ответить
7. RustIG 1301 07.11.19 23:10 Сейчас в теме
Золотая середина : использовать выделение идентификаторов желтым цветом и конструкцию попытка исключение, без флагов и дополнительных процедур отключения флагов.
YPermitin; +1 Ответить
8. gorevg 16 07.11.19 23:11 Сейчас в теме
Мы делам доработки через "включатели". Во всех доработанных базах у нас есть справочник Доработки с одним предопределенным элементом, чтобы удобно было обращаться. Туда заносим флаги на доработанные функции, а также любые другие данные, которые нужно хранить для удобства.
YPermitin; wowik; acanta; +3 Ответить
9. tamepjlah 3 08.11.19 07:30 Сейчас в теме
Метод подходит только если добавляется что-то новое в одном месте. А если вы, например, в запрос добавляете новое условие или запрос в пакет запросов, а после используете это далее по коду? В каждом месте ставить Попытка - Исключение?
Мы во всех базах, где это возможно, используем расширения конфигурации. А где нельзя - тестирование пользователем на копии. А если и это невозможно (подразделения раскиданы территориально и в каждом своя база) - тестирование разработчиком на копии, затем алгоритм для разработчика "накатил на рабочку - протестируй" (и накатываем постепенно, а не на все сразу)
PLAstic; YPermitin; +2 Ответить
10. user1166203 08.11.19 09:29 Сейчас в теме
В - Ванесса. Покрыть критичные участки процессов. А ошибки в некритичных дождутся нашего пробуждения :)
PLAstic; YPermitin; +2 Ответить
11. Shmell 532 08.11.19 09:59 Сейчас в теме
Мы используем некий регистр с произвольными аналитиками (до 6 измерений аналитик), который заменяет нам хранение констант и прочих настроек, в том числе задействуем его в качестве "выключателя"
YPermitin; acanta; +2 Ответить
12. AlexCherdakov 20 08.11.19 11:10 Сейчас в теме
Уже как-то была статья на инфостарте про криворуких программистов в ней упоминалась конструкция попытка/исключение как показатель "криворукости", я тогда не согласился и не соглашусь сейчас. Да кувалда это не очень хороший инструмент но иногда без него никак. Мало того есть даже случаи когда такая конструкция оправдана с точки зрения уменьшения количество правок типовой конфигурации.
PLAstic; bulpi; YPermitin; +3 Ответить
15. пользователь 08.11.19 11:27
(12) ну тут универсальных ответов нет, просто добавлять попытки везде подряд не разумно.
17. AlexCherdakov 20 08.11.19 11:52 Сейчас в теме
(15)согласен, но и брезгливо поглядывать в сторону этого инструмента только потому что "это не комильфо" и "пацаны не поймут" тоже не стоит
YPermitin; +1 Ответить
18. Fox-trot 156 08.11.19 16:15 Сейчас в теме
по аналогии с паскалем... теперь код рекомендуется начинать с
Попытка
lol
YPermitin; +1 Ответить
19. пользователь 08.11.19 17:48
25. nocer 09.11.19 01:50 Сейчас в теме
Попытка исключение это зло
Оно только усложняет отладку
При исключении рушится транзакция, вложенных транзакций в 1с нет и если вы уже находитесь в транзакции на момент ошибки то никакой флаг уже не снимете. В данной транзакции уже происходили ошибки - вот сообщение которое вы увидите
А если попытка вложенная в другую попытку то отладка такого решения становится веселой задачей, такое любил рарус в своих конфигурациях альфа авто да будет вечно здоров тот кто там это придумал
В свое время чтобы побороть такие ошибки тот же рарус грозился написать внешнюю компоненту которая возьмёт на себя все сообщения в исключениях, отфильтрует их для пользователей и выведет только те которые являются важными\ключевыми в данный момент
Таким образом они выводили сообщения даже если транзакции уже нет в живых
Aleskey_K; TerveRus; acanta; YPermitin; +4 Ответить
26. Yashazz 4707 10.11.19 15:30 Сейчас в теме
Тот случай, когда комментарии ценнее публикации. Потому что публикация очевидна, как набор утверждений "2*2=4", банальна и нового ничего не содержит (ну разве только для совсем нубов, но их на боевые важные участки обычно не ставят). А вот комменты имеют шанс раскрыть вопрос по-настоящему.
27. acanta 10.11.19 17:58 Сейчас в теме
Я помню ещё со времён комплексной 7.7 константы, которые отключают бухгалтерский учёт и расчет в конфигурации. В идеале они должны превратить комплексную в однокомпонентную конфигурацию (торговля? бухгалтерия? - и главное зачем?)
В 8 ке от компонент отказались, но константы использовать или нет склады, партнёров, кассы или зарплату остались даже в ерп.
Причем ответственность за их использование возлагается на программиста, поскольку после включения функциональных опций (а если предприятие несколько лет работало с единственным складом а теперь решило добавить такую аналитику?) требуется вмешательство программиста с изменением данных задним числом, что в ерп системах просто недопустимо, или по меньшей мере не по таким банальным причинам.
Сами функциональные опции это очень крутой функционал, но имхо он в качестве таких регуляторов использоваться не должен, а комплексная или ерп вовсе не обязаны повторять болезнь роста торговли.
YPermitin; +1 Ответить
28. acanta 10.11.19 18:47 Сейчас в теме
В 7ке, обсуждая эти возможности с коллегами мы предполагали, что можно предлагать клиентам риб с предприятием и комплексной в центре и той же конфигурацией в периферии, но на одной компоненте. С ЗУП в качестве нагрузки или без него (как настроено в миграции). Так могло работать если размигрировать константы( т.е. отключить все типы учёта в периферии), но я не помню ни одного реального проекта, где бы эти идеи оказались востребованы или могли составить конкуренцию нетленкам.
Авторизацию приходилось делать независимую от платформенной, это удобно. Выбор принтеров и хранение их с привязкой к пользователям вместо оси, поскольку не всегда большая сеть была доменной, а печать по одной кнопке это всем нравилось.
YPermitin; +1 Ответить
29. пользователь 10.11.19 18:57
30. acanta 11.11.19 10:00 Сейчас в теме
По большому счету в обычных формах только одна проблема - в журналах/списках нет фильтров по проведен/помечен, что именно при риб с их попыткой проведения в центральной базе представляет неудобство. В такси все это есть (если не поубирали).
YPermitin; +1 Ответить
35. Doom2w 23 13.11.19 14:10 Сейчас в теме
18+ Вынос нового функционала в модуль дополнительных обработок..
YPermitin; +1 Ответить
37. пользователь 15.11.19 08:50
36. PLAstic 295 15.11.19 08:49 Сейчас в теме
Есть такие хорошие понятия как "технический долг" и "TCO".
Подобные методы реализации "подстраховки" растят нам необходимость внесения в дальнейшем изменений по удалению лишних блоков кода и функциональности. Как правильно было сказано выше, такая подстраховка нужна только первые пару дней. Значит, нам предстоит ещё один релиз с новыми изменениями: удаление нашей подстраховки. И как все мы знаем, даже такая простая операция может повлечь за собой ошибки.
Итого получается: более частые подготовка, тестирование и выкатывание релизов и бОльшие риски возникновения ошибок.
Второй приведённый мной термин намекает лично мне, что для собственника дешевле нанять тестера или наложить функцию тестирования на консультантов (что у нас на предприятии успешно работает уже несколько лет), чем подобная реализация.
YPermitin; +1 Ответить
38. пользователь 15.11.19 08:50
(36) да, но обычно собственнику вообще не до этого :)
39. Cyberhawk 135 18.11.19 09:04 Сейчас в теме
Теперь при возникновении ошибки флаг включения нового программного кода будет сброшен в ЛОЖЬ автоматически
Не будет, ибо &НаСервереБезКонтекста
40. strange2007 144 23.01.20 08:53 Сейчас в теме
Что если, да как быть... Если программист работает в режиме цейтнота, то гоните руководителей по автоматизации в шею мокрыми тряпками. Нашлись, блин, зарабатывальщики денег - сами себе проблемы создаёте, и доблестно же их решаете (это театрально возмущаюсь)

А если серьёзно, то я, например, действую так:
1. Кормёжка заказчика мелкими полезностями
2. Приучение пользователей к тому, что им хочется работать и они обожают свой участок
3. Плавное исключение всех контейнеров самодурства
И только потом всё приводится к стандартным решениям, с небольшими внешними доработками. Т.о. получаю нормальный ритм работы, довольных директоров и много позитива. И да, этот вариант относится к предприятиям, где 24 часа в сутки, 7 дней в неделю, всё кипит-бурлит и меняется.

Как делают гореавтоматизаторы:
Делают суперфичу, с кучей дыр и костылей. Быстро внедряют и потом латают дыры костылями. В итоге один-два прога постоянно что-то подделывают по этой задаче. На следующем блоке ещё один прог постоянно подделывает что-то и так до бесконечности. Помню более 40 айтишников сопровождали УПП (переписанную) и не успевали, поэтому несколько франей постоянно там работало. После применения рекомендуемых методов, через год не осталось никого, кроме одного малоопытного одинэсника, без потери функционала
41. glek 119 07.09.22 15:31 Сейчас в теме
Абсолютно нормальная практика. У нас на предприятии практически непрерывный цикл, обновлять можно только в обед. И выгонять пользователей и останавливать отгрузку так себе идея.
Правда, у нас реализован следующий метод:
1. Есть перечисление и РС используемых механизмов.
2. Для каждого критического изменения определяем срок жизни механизма, когда мы убеждаемся, что изменение работает нормально.
После завершения указанного срока ссылки в коде на механизм вычищается и само значение перечисления удаляется.
42. Aphanas 92 05.06.23 04:35 Сейчас в теме
А теперь посмотрите, сколько кода было в начале, и сколько получилось в конце. Программист, который находится в режиме цейтнота вдруг должен начать писать в два раза больше. Допустим, подобный подход применить не только к доработке чека ККМ, а вообще ко всем делам. Ведь так же лучше!
Вообще во всем начать делать двойную работу - вот решение, однако.. :-\
Идея хорошая, но не взлетит. Не приживется и в жизни использоваться не будет.
Оставьте свое сообщение