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

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

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

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

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

Предисловие

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

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

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

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

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

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

Коллапс

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

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

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

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

// ........

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

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

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

// ........

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

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

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

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

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

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

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

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

// ........

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

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

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

// ........

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

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

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

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

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

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

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

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

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

// ........

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

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

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

// ........

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

53

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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


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

Пример отлично описали)
6. o.nikolaev 193 07.11.19 22:54 Сейчас в теме
:) Делал подобное, правда не столь капитальный подход был.
YPermitin; +1 Ответить
7. Rustig 1204 07.11.19 23:10 Сейчас в теме
Золотая середина : использовать выделение идентификаторов желтым цветом и конструкцию попытка исключение, без флагов и дополнительных процедур отключения флагов.
YPermitin; +1 Ответить
8. gorevg 8 07.11.19 23:11 Сейчас в теме
Мы делам доработки через "включатели". Во всех доработанных базах у нас есть справочник Доработки с одним предопределенным элементом, чтобы удобно было обращаться. Туда заносим флаги на доработанные функции, а также любые другие данные, которые нужно хранить для удобства.
YPermitin; wowik; acanta; +3 Ответить
9. tamepjlah 08.11.19 07:30 Сейчас в теме
Метод подходит только если добавляется что-то новое в одном месте. А если вы, например, в запрос добавляете новое условие или запрос в пакет запросов, а после используете это далее по коду? В каждом месте ставить Попытка - Исключение?
Мы во всех базах, где это возможно, используем расширения конфигурации. А где нельзя - тестирование пользователем на копии. А если и это невозможно (подразделения раскиданы территориально и в каждом своя база) - тестирование разработчиком на копии, затем алгоритм для разработчика "накатил на рабочку - протестируй" (и накатываем постепенно, а не на все сразу)
YPermitin; +1 Ответить
10. user1166203 08.11.19 09:29 Сейчас в теме
В - Ванесса. Покрыть критичные участки процессов. А ошибки в некритичных дождутся нашего пробуждения :)
YPermitin; +1 Ответить
11. Shmell 257 08.11.19 09:59 Сейчас в теме
Мы используем некий регистр с произвольными аналитиками (до 6 измерений аналитик), который заменяет нам хранение констант и прочих настроек, в том числе задействуем его в качестве "выключателя"
YPermitin; acanta; +2 Ответить
12. AlexCherdakov 19 08.11.19 11:10 Сейчас в теме
Уже как-то была статья на инфостарте про криворуких программистов в ней упоминалась конструкция попытка/исключение как показатель "криворукости", я тогда не согласился и не соглашусь сейчас. Да кувалда это не очень хороший инструмент но иногда без него никак. Мало того есть даже случаи когда такая конструкция оправдана с точки зрения уменьшения количество правок типовой конфигурации.
bulpi; YPermitin; +2 Ответить
15. YPermitin 5602 08.11.19 11:27 Сейчас в теме
(12) ну тут универсальных ответов нет, просто добавлять попытки везде подряд не разумно.
17. AlexCherdakov 19 08.11.19 11:52 Сейчас в теме
(15)согласен, но и брезгливо поглядывать в сторону этого инструмента только потому что "это не комильфо" и "пацаны не поймут" тоже не стоит
YPermitin; +1 Ответить
18. Fox-trot 106 08.11.19 16:15 Сейчас в теме
по аналогии с паскалем... теперь код рекомендуется начинать с
Попытка
lol
YPermitin; +1 Ответить
19. YPermitin 5602 08.11.19 17:48 Сейчас в теме
25. nocer 09.11.19 01:50 Сейчас в теме
Попытка исключение это зло
Оно только усложняет отладку
При исключении рушится транзакция, вложенных транзакций в 1с нет и если вы уже находитесь в транзакции на момент ошибки то никакой флаг уже не снимете. В данной транзакции уже происходили ошибки - вот сообщение которое вы увидите
А если попытка вложенная в другую попытку то отладка такого решения становится веселой задачей, такое любил рарус в своих конфигурациях альфа авто да будет вечно здоров тот кто там это придумал
В свое время чтобы побороть такие ошибки тот же рарус грозился написать внешнюю компоненту которая возьмёт на себя все сообщения в исключениях, отфильтрует их для пользователей и выведет только те которые являются важными\ключевыми в данный момент
Таким образом они выводили сообщения даже если транзакции уже нет в живых
Terve!R; acanta; YPermitin; +3 Ответить
26. Yashazz 2883 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 5602 10.11.19 18:57 Сейчас в теме
30. acanta 74 11.11.19 10:00 Сейчас в теме
По большому счету в обычных формах только одна проблема - в журналах/списках нет фильтров по проведен/помечен, что именно при риб с их попыткой проведения в центральной базе представляет неудобство. В такси все это есть (если не поубирали).
YPermitin; +1 Ответить
Оставьте свое сообщение

См. также

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

Инструменты и обработки Системный администратор Программист Внешний отчет (ert,erf) v8 Windows Абонемент ($m) Инструментарий разработчика Защита ПО

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

2 стартмани

21.10.2019    1978    4    YPermitin    10       

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

Статья no Нет файла Бесплатно (free) О жизни Управление персоналом (HRM)

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

16.10.2019    7379    1c-intelligence    113       

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

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

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

07.10.2019    1613    m-rv    8       

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

Отчеты и формы Системный администратор Программист Внешний отчет (ert,erf) v8 1cv8.cf Бесплатно (free) Производительность и оптимизация (HighLoad)

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

31.08.2019    3116    93    YPermitin    7       

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

Отчеты и формы Системный администратор Программист Внешний отчет (ert,erf) v8 1cv8.cf Абонемент ($m) WEB

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

2 стартмани

13.08.2019    3022    7    YPermitin    15       

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

Отчеты и формы Системный администратор Программист Внешний отчет (ert,erf) v8 v8::СКД 1cv8.cf Windows Абонемент ($m) Инструментарий разработчика

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

2 стартмани

24.07.2019    5750    80    YPermitin    25       

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

Статья Программист Руководитель проекта Нет файла v8 Бесплатно (free) Математика и алгоритмы Рефакторинг и качество кода

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

22.07.2019    7797    Stepa86    24       

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

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

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

09.07.2019    7446    ivanov660    110       

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

Инструменты и обработки Системный администратор Программист Конфигурация (md, cf) v8 Абонемент ($m) Инструментарий разработчика

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

1 стартмани

13.12.2018    2848    1    antonio_i    7       

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

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

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

30.10.2018    6039    eu_genij    34       

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

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Инструментарий разработчика

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

2 стартмани

29.10.2018    3204    1    bashinsky    12       

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

Инструменты и обработки Системный администратор Программист Расширение (cfe) v8 1cv8.cf Россия Windows Абонемент ($m) Обработка справочников

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

1 стартмани

24.10.2018    4164    13    mityushov.vv    6       

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

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

18.07.2018    6044    12    9-pm    93       

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

Инструменты и обработки Программист Конфигурация (md, cf) v8 1cv8.cf Windows Абонемент ($m) Универсальные функции

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

1 стартмани

19.02.2015    6854    3    pasha_m    2       

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

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

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

1 стартмани

07.08.2014    9411    9    Damian    2       

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

Отчеты и формы Системный администратор Программист Внешний отчет (ert,erf) v8::СКД 1cv8.cf Абонемент ($m) Журнал регистрации

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

2 стартмани

25.07.2013    52450    885    YPermitin    50       

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

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

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

04.11.2008    16173    poppy    32