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

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

Методология - Рефакторинг и качество кода

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

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

Предисловие

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

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

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

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

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

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

Коллапс

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

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

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

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

// ........

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

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

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

// ........

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

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

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

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

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

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

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

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

// ........

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

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

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

// ........

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

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

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

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

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

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

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

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

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

// ........

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

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

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

// ........

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

А в астро(логии? Правда?) - вообще любой бред может быть, и пытливый ум всегда найдет, как это притянуть за уши к окружающей действительности. Есть же универсальные рецепты, да?)))
2. acanta 74 07.11.19 19:45 Сейчас в теме
У нас такой подход использовался при независимой работе нескольких разработчиков без выделенного руководителя проекта. Можно предположить, что код вызова сообщения/комментария об ошибке например содержит информацию о разработчике данной доработки и "шквал звонков" или электронной почты обрушивается на автора доработки.
Когда есть руководитель проекта и у него есть возможность заменить накосячившего исполнителя этот подход теряет смысл.
YPermitin; +1 Ответить
3. Stepa86 1356 07.11.19 19:50 Сейчас в теме
Это теперь все более популярная тема. Гуглить "Feature flags" и "Feature Toggles"
YPermitin; o.nikolaev; +2 Ответить
4. kraynev-navi 456 07.11.19 20:26 Сейчас в теме
(3) надо по-русски гуглить "Функциональные опции"
АлександрВладимирович; kron.isant; YPermitin; +3 Ответить
5. Vladimir Litvinenko 2294 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. YPermitin 8349 08.11.19 11:19 Сейчас в теме
(5) Полностью согласен со всем написанным.

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

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

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



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

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


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

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

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

Как делают гореавтоматизаторы:
Делают суперфичу, с кучей дыр и костылей. Быстро внедряют и потом латают дыры костылями. В итоге один-два прога постоянно что-то подделывают по этой задаче. На следующем блоке ещё один прог постоянно подделывает что-то и так до бесконечности. Помню более 40 айтишников сопровождали УПП (переписанную) и не успевали, поэтому несколько франей постоянно там работало. После применения рекомендуемых методов, через год не осталось никого, кроме одного малоопытного одинэсника, без потери функционала
Оставьте свое сообщение

См. также

Просмотр и анализ журнала регистрации (отчет на СКД) Промо

Журнал регистрации v8::УФ v8::СКД 1cv8.cf Абонемент ($m)

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

5 стартмани

25.07.2013    60210    540    YPermitin    52    

Молчание "best practices": тестовые и эталонные данные, структура и связность, падения и новая функциональность, и другие неудобные вопросы к сценарному тестированию

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

Непонимание некоторых базовых вопросов мешает программистам начать применять инструменты тестирования в процессе разработки для 1С. Как разобраться в терминологии и интегрировать процесс тестирования в разработку 1С-решений на конференции Infostart Event 2019 Inception рассказал руководитель отдела разработки компании C.T.Consultants Решитко Дмитрий.

29.05.2020    1407    0    grumagargler    14    

Рефакторинг в редакторе модулей

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

Для тех, кто не пользуется Ctrl+Alt+R. “Контролируемый процесс улучшения кода без написания новой функциональности”, “Равносильное преобразование алгоритмов” и т.п в данной статье не рассматриваются. Тема статьи: замечательные команды из подменю Рефакторинг контекстного меню редактора модулей в конфигураторе. В статье описано, как команды из подменю Рефакторинг помогают при написании кода

10.03.2020    3163    0    pparshin    2    

Качество кода: Поведенческие паттерны проектирования

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

Поговорим про применение паттернов проектирования в разработке на 1С.

03.03.2020    5726    0    ivanov660    0    

Боремся с запросами в циклах. Мой опыт рефакторинга запросов

Рефакторинг и качество кода v8::Запросы 1cv8.cf Бесплатно (free)

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

02.03.2020    5058    0    aximo    35    

Активный 2019 год на Инфостарт

О сообществе О жизни Бесплатно (free)

О прошедшем 2019 годе в 100 и 500 словах.

26.12.2019    4585    0    YPermitin    24    

Пакетная выгрузка / загрузка внешних отчетов и обработок

Прочие инструменты разработчика Менеджеры внешних отчетов v8 1cv8.cf Абонемент ($m)

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

2 стартмани

04.11.2019    7089    24    YPermitin    22    

Обозреватель криптографии

Инструментарий разработчика Защита ПО v8 Абонемент ($m)

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

2 стартмани

21.10.2019    8137    10    YPermitin    10    

Медвежьи услуги по требованию

О жизни Управление персоналом (HRM) Бесплатно (free)

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

16.10.2019    11934    0    1c-intelligence    116    

Оценка скорости кода. Сложность алгоритма

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

Эта тема одной из первых всплывает на собеседовании программистов языков вроде Java и C, но она почти неизвестна в "мире 1С". Поговорим о вычислительной сложности алгоритмов.

07.10.2019    4300    0    m-rv    10    

Анализ производительности APDEX

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

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

31.08.2019    9069    2    YPermitin    7    

Путеводитель по истории релизов

WEB v8 1cv8.cf Абонемент ($m)

Отчет по истории выпуска релизов и анализа информации по обновлениям.

5 стартмани

13.08.2019    10691    10    YPermitin    18    

Просмотр и анализ структуры базы данных (отчет на СКД)

Инструментарий разработчика v8 v8::СКД 1cv8.cf Абонемент ($m)

Отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.

5 стартмани

24.07.2019    17178    152    YPermitin    27    

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

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

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

22.07.2019    14636    0    Stepa86    33    

По следам код-ревью

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

Приведу примеры с картинками и небольшим пояснением по вопросам, связанным с код-ревью (обзором кода).

09.07.2019    11160    0    ivanov660    110    

В помощь разработчику и не только. Хранение констант, периодических констант, "динамических" констант - условно постоянных значений

Инструментарий разработчика v8 Абонемент ($m)

Настройка для хранения периодических условно постоянных значений. Удобное получение при помощи метода общего модуля с различными вариациями параметров. Настройка основана на регистре сведений и плане видов характеристик.

1 стартмани

13.12.2018    4549    3    antonio_i    16    

Что такое рефакторинг и в чем его цели

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

Что такое рефакторинг, и в каких случаях им стоит заниматься? Евгений Шумилов дает ответы на эти вопросы, а также рассказывает о признаках хорошего и плохого кода. Кроме того, в статье приведены основные проблемы рефакторинга и способы их решения.

30.10.2018    9108    0    eu_genij    34    

Динамические константы или избавляемся от поиска по наименованию

Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

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

2 стартмани

29.10.2018    4742    1    bashinsky    12    

[Расширение] Новый справочник "Константы", для хранения неизменяемых значений

Обработка справочников v8 1cv8.cf Россия Абонемент ($m)

Доработка выполнена через расширение, конфигурацию с поддержки снимать НЕ НУЖНО. Релиз платформы под который разрабатывалось 8.3.12.1529. На данный момент платформа 8.3.14.1630 и все работает. Проверена на конфигурациях БП (3.0.65.84), ЗУП (3.1.8.112) Очень часто необходимо в системе хранить какие-то постоянные данные, к которым необходимо периодически обращаться. Для этого была выполнена данная доработка, добавлен новый справочник "Константы" в расширение. Конечно, можно это реализовать через регистр сведений, но на мой взгляд справочник дает более широкий функционал по хранению данных.

1 стартмани

24.10.2018    6502    19    mityushov.vv    9    

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

Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

18.07.2018    7320    12    9-pm    93    

Механизм "быстрых констант"

Универсальные функции v8 1cv8.cf Абонемент ($m)

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

1 стартмани

19.02.2015    8203    3    pasha_m    2    

Альтернативная подсистема констант

Инструментарий разработчика v8 1cv8.cf Абонемент ($m)

Хранение значений и списков значений, в том числе периодических и упорядоченных. По мотивам публикации об отказе от использования функций НайтиПоНаименованию() и НайтиПоКоду()

1 стартмани

07.08.2014    10493    3    Damian    2    

Мастер-класс от Poppy (практикум по рефакторингу)

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

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

04.11.2008    18093    0    poppy    32