Шаблоны для применения cтандартов и методик разработки конфигураций 1С

23.03.24

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

Готовые шаблоны текста для применения cтандартов и методик разработки конфигураций 1С, инструментарий. Версия платформы 8.3.22.1851.

Скачать исходный код

Наименование Файл Версия Размер
Шаблоны для применения cтандартов и методик разработки конфигураций 1С.:
.rar 43,63Kb
38
.rar 1.1.2 43,63Kb 38 Скачать
Шаблоны для применения cтандартов и методик разработки конфигураций 1С:
.rar 45,79Kb
56
.rar 1.1.3 45,79Kb 56 Скачать

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

Часть шаблонов сгруппированы для быстрого поиска, например: 

Ст_Запрос(ы)<ДетальнаяРасшифровка>, Ст_Локализация<ДетальнаяРасшифровка>, Ст_Блокировки(а)<ДетальнаяРасшифровка> и т.д. скрины ниже:

 

 

Можно использовать как справочник-помощник:

 

 

Список шаблонов:

 

Добавлены шаблоны:

Ст_ОткрытиеФормыСОповещением

Ст_ИменаРолей

Ст_СообщениеИнформацияОбОшибке

Ст_СообщениеКлиентИнформацияОбОшибке

Ст_ЛокализацияНСтр

Ст_ЗакомментированныйКод

Ст_ЗапросИспользованиеСсылки

Ст_ИнициализацияПарамВложенныхМетодов

Ст_ПоказатьВыборИзСпискаСОповещением

Ст_ПоказатьВыборИзМенюСОповещением

Ст_ПоказатьПредупреждениеСОповещением

Ст_ПоказатьВопрос

Ст_УстановитьПривилегированныйРежим

Ст_ЗапросИспКомментарияДляПомещенияВоВремТаб

Ст_УдалениеЭлементаКоллекции

Ст_ТекущаяДатаСеанса

Ст_ОбменДаннымиОписание

Ст_ТранзакцияЯвнаяЗаписьВЖурналРегистрации

Ст_ТранзакцияЯвнаяВызватьИсключение

Ст_ЗаписьВЖурналРегистрацииБСП

Ст_ЗаписьВЖурналРегистрацииБезБСП

 

Обновления.

Версия 1.1.3 описание изменений:

    1. Укорочены названия в контекстной подсказке, для лучшей читаемости при подборе в коде.

    2. Добавлено окончание Описание в конец названия шаблона для описательных шаблонов с пояснением. Если шаблон  сразу применим в коде то он идет без окончания Описание.

    3. Исправлены ошибки.

Добавлены шаблоны:

Ст_ЗначенияРеквизитовОдногоОбъекта

Ст_ЗначениеОдногоРеквизитаОдногоОбъекта

Ст_ЗначенияНесколькихРеквизитовЭлементовОдногоТипа

Ст_ЗначениеОдногоРеквизитаЭлементовОдногоТипа

Ст_ЗапросРазыменованиеРегистрНакопления

Ст_ЗапросРазыменованиеРегистрСведений

Ст_ЗапросРазыменованиеРегистрБухгалтерии

Ст_ЗапросРазыменованиеРегистрРасчета

Ст_БлокировкаСправочникаУправляемая

Ст_БлокировкаДокументаУправляемая

Ст_БлокировкаОбъектаЗаблокироватьДанныеДляРедактирования

Ст_БлокировкаОбъектаЗаблокировать

Ст_СсылкаСуществует

Ст_ПоказатьПредупреждение

Ст_ЗагрузкаMXL_в_ТаблЗначений

Ст_ПоказатьПредупреждениеСПараметром

Ст_ПоказатьПредупреждениеСПараметромИОповещением

Ст_ИнструкцииПрепроцессораМодулейОбъектовМенеджеров

Ст_ПерехватИсключенийКлиент

Ст_БезопасноеХранениеПаролейЗапись

Ст_БезопасноеХранениеПаролейЧтение

Ст_СообщениеСПараметрамиБезБСП

Ст_СообщениеПростоеБезБСП

Ст_СообщениеОшибкаБезБСП

Ст_НачатьПомещениеФайлаНаСервер

Ст_ПоказатьВводСтроки

Ст_НачатьЗапускПриложений

Ст_ОбменДаннымиЗагрузка

Ст_ПопыткаЗаписьВЖурнРегБСП

Ст_ПопыткаЗаписьВЖурнРегБезБСП

 

Примеры шаблонов:  

 
 Ст_ЗапросыРазыменованиеПолей

 

Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
|	ВЫБОР
|		КОГДА Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|			ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Номер
|		КОГДА Продажи.Регистратор ССЫЛКА Документ.ЗаказКлиента
|			ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ЗаказКлиента).Номер
|	КОНЕЦ КАК Номер,
|	ВЫБОР
|		КОГДА Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|			ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Дата
|		КОГДА Продажи.Регистратор ССЫЛКА Документ.ЗаказКлиента
|			ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ЗаказКлиента).Дата
|	КОНЕЦ КАК Дата,
|	Продажи.ВРезерве КАК ВРезерве,
|	Продажи.КОтгрузке КАК КОтгрузке
|ИЗ
|	РегистрНакопления.ТоварыКОтгрузке КАК Продажи
|ГДЕ
|	(Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|			ИЛИ Продажи.Регистратор ССЫЛКА Документ.ЗаказКлиента)";

 

 

 
 Ст_БезопасностьПОВызывЧерезОткрытыеИнтерфейсы

 

// В частности, перед программным открытием документов Microsoft Word и Microsoft Excel 
// через COM следует запрещать исполнение макросов. 
// Иначе это может привести к выполнению вредоносных макросов (вирусов),
// если таковые присутствуют в документе.
// НЕПРАВИЛЬНО открывать документ Microsoft Word по умолчанию:
ОбъектWord = Новый COMОбъект("Word.Application");
Документ = ОбъектWord.Documents.Open(ИмяФайла);
// ПРАВИЛЬНО открывать документ Microsoft Word с отключением макросов:
ОбъектWord = Новый COMОбъект("Word.Application");
ОбъектWord.WordBasic.DisableAutoMacros(1);
Документ = ОбъектWord.Documents.Open(ИмяФайла);
// ПРАВИЛЬНО открывать документ Microsoft Excel с отключением макросов:
ОбъектExcel = Новый COMОбъект("Excel.Application");
ОбъектExcel.AutomationSecurity = 3; // msoAutomationSecurityForceDisable = 3
Документ = ОбъектExcel.Workbooks.Open(ИмяФайла);
// Проверку наличия подписи макросов в документах Microsoft Word можно реализовать так:
ОбъектWord = Новый COMОбъект("Word.Application");
ОбъектWord.WordBasic.DisableAutoMacros(1); // Отключить автозапуск
Документ = ОбъектWord.Documents.Open(ФайлДокумента);
Если Документ.VBASigned Тогда
	ОбъектWord.WordBasic.DisableAutoMacros(0); // Включить автозапуск
	Документ.RunAutoMacro(2); // wdAutoOpen = 2
Иначе
	Документ.Close();
	ВызватьИсключение НСтр(" ru = 'Документ не подписан. Открытие отменено.'");
КонецЕсли;
// Проверку наличия подписи макросов в документах Microsoft Excel можно реализовать так:
ОбъектExcel = Новый COMОбъект("Excel.Application");
ИсходныйУровеньБезопасности = ОбъектExcel.AutomationSecurity;
ОбъектExcel.AutomationSecurity = 3; // msoAutomationSecurityForceDisable = 3
Документ = ОбъектExcel.Workbooks.Open(ФайлДокумента);
ОбъектExcel.AutomationSecurity = ИсходныйУровеньБезопасности;
Если Документ.VBASigned Тогда
	Документ.Close();
	Документ = ОбъектExcel.Workbooks.Open(ФайлДокумента);
Иначе
	Документ.Close();
	ВызватьИсключение НСтр(" ru = 'Документ не подписан. Открытие отменено.'");
КонецЕсли;

 

 
 
 Ст_БлокировкаОтветственноеЧтение

 

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

// Правильно:
// 1. Начать транзакцию для пакета из двух операций чтения и записи регистра
НачатьТранзакцию();
Попытка
	// 2. Установить исключительную блокировку на интересующий диапазон записей регистра,
	// для того чтобы гарантировать, что в момент записи количество заметок не изменилось с момента чтения в каком-либо другом сеансе.
	БлокировкаДанных = Новый БлокировкаДанных;
	ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("РегистрСведений.ЗаметкиПоПредмету");
	ЭлементБлокировкиДанных.УстановитьЗначение("Предмет", ПредметЗаметок);
	ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный;
	БлокировкаДанных.Заблокировать();
	// 3. Прочитать регистр сведений
	Запрос = Новый Запрос(
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	| ЗаметкиПоПредмету.КоличествоЗаметок КАК КоличествоЗаметок
	|ИЗ
	| РегистрСведений.ЗаметкиПоПредмету КАК ЗаметкиПоПредмету
	|ГДЕ
	| ЗаметкиПоПредмету.Предмет = &Предмет");
	Запрос.УстановитьПараметр("Предмет", ПредметЗаметок);
	Выборка = Запрос.Выполнить().Выбрать();
	КоличествоЗаметок = 0;
	Если Выборка.Следующий() Тогда
		КоличествоЗаметок = Выборка.КоличествоЗаметок;
	КонецЕсли;
	// 4. Записать в регистр сведений
	НаборЗаписей = РегистрыСведений.ЗаметкиПоПредмету.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Предмет.Установить(ПредметЗаметок);
	НоваяЗапись = НаборЗаписей.Добавить();
	НоваяЗапись.Предмет = ПредметЗаметок;
	НоваяЗапись.КоличествоЗаметок = КоличествоЗаметок + 1;
	НаборЗаписей.Записать();
	ЗафиксироватьТранзакцию(); // Пишем всегда перед словом Исключение
Исключение
	// 5. Если при установке блокировки возникла исключительная ситуация из-за того, что регистр уже заблокирован в другом сеансе (или по другим причинам),
	// отменить транзакцию и записать сведения об ошибке в журнал регистрации.
	ОтменитьТранзакцию(); // Пишем сразу после слова Исключение
	ПодробноеПредставлениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
        ЗаписьЖурналаРегистрации(НСтр(" ru = 'Заметки'", ОбщегоНазначения.КодОсновногоЯзыка()),       // записывать в ЖР с ВызватьИсключение не нужно 
	    УровеньЖурналаРегистрации.Ошибка,,, СтрШаблон(НСтр(" ru = '%1'"), ПодробноеПредставлениеОбОшибке)); // без ВызватьИсключение пишем в ЖР
	ВызватьИсключение; // есть внешняя транзакция
КонецПопытки;

 

 

 

Примечание.

В шаблоны не вошли некоторые стандарты, например, по проектированию интерфейсов.

 

Краткая инструкция по подключению шаблонов.    

Шаблоны тексты подключаются в конфигураторе через Сервис - Параметры, вкладка Модули - Контекстная подсказка, нужно включить флаг "Включить шаблоны в список подсказок", скрин:

 

   

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

 

 

 

Все готово к работе, вызываем в модуле, пишем префикс ст, ctrl + Пробел, в контекстном меню подбираем нужный шаблон.

Примечание.

Так же можно использовать шаблоны вместе со стандартными тогда флаг "Использовать стандартные шаблоны" снимать не нужно.

 

Также предлагаю решения вашему вниманию:

Простой пример разработки регулярного обмена с использованием БСП на примере ERP 2.4 и УПП 1.3.

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

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

Загрузка данных из унифицированных форм УПД и ТОРГ-12.

Список документов и их количество в базе.

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

См. также

Результаты ревью кода 1500+ решений каталога Инфостарт: наиболее частые ошибки разработчиков в коде

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

Поделюсь своим опытом аудита кода авторских продуктов с Infostart.ru как одним из элементов применения DevOps-практик внутри Инфостарт. Будет настоящий код, боевые скриншоты, внутренние мемы от команды ИТ-лаборатории Инфостарт и прочее мясо – все, что любят разработчики.

10.04.2024    6615    artbear    84    

81

Ниндзя-код

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

Предлагаю вашему вниманию советы мастеров древности. Программисты прошлого использовали их, чтобы заострить разум тех, кто после них будет поддерживать код. Гуру разработки при найме старательно ищут их применение в тестовых заданиях. Новички иногда используют их ещё лучше, чем матёрые ниндзя. Прочитайте их и решите, кто вы: ниндзя, новичок или, может быть, гуру? (Адаптация статьи "Ниндзя-код" из учебника JavaScript)

01.04.2024    2436    DrAku1a    15    

33

Практическое программирование: когда скорость важнее совершенства

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

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

01.04.2024    639    Prepod2003    6    

2

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

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

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

18.03.2024    1374    ZhokhovM    4    

4

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

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

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

18.03.2024    3051    ZhokhovM    4    

9

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

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

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

29.09.2023    2116    1CUnlimited    15    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1528 05.06.23 14:37 Сейчас в теме
Поставил минус за мега-цену в 5 стартмани за скопипащенный файл шаблонов и дублирование 2х публикаций
корум; stas_ganiev; wild83; Lemmonbri; buganov; CSiER; Rafaraf; IntellXeon; CTAC1287; Andreeei; itoptimum; +11 7 Ответить
2. kser87 2441 05.06.23 15:05 Сейчас в теме
(1) просто интересно, каким образом у вас ценообразование работает?
improg; PowerBoy; +2 Ответить
3. improg 575 05.06.23 16:14 Сейчас в теме
(1) Не совсем скопипащенного, в шаблонах идет выжимка основного материала с примерами, разработчику остается набрать шаблон, прочитать краткое описание (там где оно есть), адаптировать и удалить комменты. По поводу цены соизмеряю трудозатраты + временные затраты, не считаю что это мега-цена, можно месяц посидеть поизучать самому (с учетом того что еще работу делать надо), законспектировать.
ivnik; Global__IT; Светлый ум; +3 Ответить
4. Lemmonbri 120 05.06.23 16:36 Сейчас в теме
(1) Ну тут вечные 2 противостояния: те, кто за развитие комьюнити, и те, кто пытается заработать на комьюнити. Кто за развитие и опен сорс проекты делает, и на гитхаб выкладывает, это куча народу. А кто пытается заработать, тот "соизмеряет трудозатраты". Как хорошо что в 1С первых больше.
mrChOP93; RayCon; artbear; KereberoS; Kesak; Sancho-R; sdaf; user1876070; itoptimum; +9 1 Ответить
7. kser87 2441 07.06.23 14:36 Сейчас в теме
(4) кто хочет развития, тот развивает. Кто хочет заработать, тот зарабатывает. Почему последние вызывают негатив?
Global__IT; biimmap; improg; +3 Ответить
8. Lemmonbri 120 07.06.23 14:37 Сейчас в теме
(7)
(7) У меня не вызывает негатива, просто классифицировал так людей, чтобы убрать негатив с 1 коммента.
9. Lemmonbri 120 07.06.23 14:40 Сейчас в теме
(8) Возможно вы подумали что моя фраза "Как хорошо что в 1С первых больше." означает негатив, но это не так. Если тех, кто хочет развиваться больше - то и развитие идет быстрее. А если все будут зарабатывать то развиваться будем по крупинке в год. Наоборот, этой фразой я подчеркиваю что в компьюнити сейчас хороший баланс. Не забывают о коммерции, но и развивают. Отлично же!
11. kser87 2441 07.06.23 15:51 Сейчас в теме
(9) так и подумал. Я лично вообще не вижу связи между зарабатыванием и развитием. Ничего не мешает коммерциализировать развитие.
12. biimmap 1864 08.06.23 12:11 Сейчас в теме
(4) Заходите в мой профиль))) Там бесплатно, но плюсы надо ставить!)

В целом можно так снегативить и в отношении раздела обучение. Целый отдел зарабатывает деньги на сообществе. Но это нормально!
improg; mrChOP93; +2 Ответить
6. artbear 1528 07.06.23 12:25 Сейчас в теме
(1) я написал комментарий, чтобы было понятно, за что и как я поставил минус.
без комментария минусовать неправильно.

минус - это моя личная субъективная оценка. ее причины я привел.
с моей оценкой не обязательно соглашаться )

указанные стартмани - это цена, которую выставляет автор\продавец товара
я как возможный потребитель товара с этой ценой не согласен и потому не куплю.
mrChOP93; Lemmonbri; +2 Ответить
13. biimmap 1864 08.06.23 12:20 Сейчас в теме
(1) Артур, никто ж не говорит про мега-цену для Infostart-toolkit? Вот мне непонятно почему он стоит дороже косаря...

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

У меня эти 2 публикации вызывают смешанные чувства.
-- С одной стороны человек зашел в стандарты, крепенько их изучил, собрал инфу оттуда и перенес в шаблоны, чтоб можно было быстро использовать нужный шаблон.
-- С другой стороны непонятно зачем 2 публикации
-- С третьей брать деньги за материал с ИТС для меня странно. Понимаю, что автор берет деньги за потраченное время... Но ведь за статью же начислили $m за плюсы и объём? Меня это обычно удовлетворяет.

И немного название публикации второй не соответствует описанному. Ведь практика - это не инструкция как скопировать кусок кода, надо ж описать реальную задачу, которую решает этот кусок кода.
15. artbear 1528 08.06.23 13:40 Сейчас в теме
(13)
Артур, никто ж не говорит про мега-цену для Infostart-toolkit? Вот мне непонятно почему он стоит дороже косаря...

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

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

еще раз - я поставил минус и прокомментировал, почему я минусанул, т.к. минусовать без комментария считаю некорректным
14. biimmap 1864 08.06.23 12:24 Сейчас в теме
(1) И кстати, я вот 2 статьи по контактной информации опубликовал... Вообще бесплатно! И куча кода в придачу... Но ты даже не читал)
Это к тому, что раз ты ценишь адекватное соотношение цена-качество, то почему даже не смотришь?)
16. artbear 1528 08.06.23 13:41 Сейчас в теме
(14)
И кстати, я вот 2 статьи по контактной информации опубликовал... Вообще бесплатно! И куча кода в придачу... Но ты даже не читал)
Это к тому, что раз ты ценишь адекватное соотношение цена-качество, то почему даже не смотришь?)

а мне пока неинтересны знания по контактной информации, поэтому и не читаю )
17. biimmap 1864 08.06.23 13:56 Сейчас в теме
(16)
а мне пока неинтересны знания по контактной информации,


)))
5. improg 575 07.06.23 12:08 Сейчас в теме
Опубликуйте тогда шкалу оценки своих публикаций на ИС, как оценивать, какая публикация стоит 1 см, какая 2 см, а какая 10 см, оценил субъективно, модерацию прошла, публикацию создал по запросам предыдущей публикации.
10. Lemmonbri 120 07.06.23 14:43 Сейчас в теме
(5) У меня подход следующий: если я выкладываю для развития компьюнити, либо бесплатно, либо 1 см. Если хочу заработать, то по трудозатратам минус процент за тиражность (10-20%). Я полагаю что по трудозатратам у вас намного больше сумма вышла, чем 5 см. Но вы так же хотели и помочь комьюнити. Вы где то посерединке решили расположиться, как мне кажется) Для меня промежуточного состояния не существует. Но это опять же только мой субъективный подход.
18. improg 575 11.06.23 12:52 Сейчас в теме
Поясню что авторы минусов статьи не скачивали шаблоны. Я всегда их использую в работе, они реально помогают написать мне наиболее качественный и читабельный код.
19. biimmap 1864 11.06.23 19:34 Сейчас в теме
(18) По своему опыту могу сказать, что все кто ставит минусы не вникают в написанное и не скачивают файлы если они есть)))

Для того, чтоб их не расстраивать своим творчеством, я их заблокировал)))
"честного" минуса на моих публикациях пока что нет!
20. kuzyara 1914 16.06.23 06:33 Сейчас в теме
Исключение
	// 5. Если при установке блокировки возникла исключительная ситуация из-за того, что регистр уже заблокирован в другом сеансе (или по другим причинам),
	// отменить транзакцию и записать сведения об ошибке в журнал регистрации.
	ОтменитьТранзакцию();
	ЗаписьЖурналаРегистрации(НСтр("ru = 'Заметки'", ОбщегоНазначения.КодОсновногоЯзыка()), 
	    УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	ВызватьИсключение;
КонецПопытки;
Нужна ли запись в ЖР при использовании метода ВызватьИсключение? Не вызовет ли это дублирование сообщения об ошибке?
21. improg 575 16.06.23 08:42 Сейчас в теме
(20) ВызватьИсключение рекомендуют писать если есть внешняя транзакция если ее нет данная строчка не нужна, напишу коммент в шаблонах. Запись в ЖР думаю нужна всегда прежде всего самому разработчику или поддержке для того чтобы понять причину.

при использовании вложенных транзакций (см. п. 1.4) в конце блока Исключение рекомендуется добавить оператор ВызватьИсключение. В противном случае исключение не будет передано выше по стеку вызовов, там не сработает обработка исключения, внешняя транзакция не будет явным образом отменена и платформа вызовет исключение «В данной транзакции происходила ошибка»
22. kuzyara 1914 16.06.23 09:42 Сейчас в теме
(21) Тогда почему в типовых при пробросе исключения после отмены транзакции запись в ЖР не делают?
В большинстве случаев используется:
Исключение
    ОтменитьТранзакцию();
    ВызватьИсключение;
КонецПопытки;
24. improg 575 16.06.23 11:11 Сейчас в теме
(22) Опять таки шаблон это некая заготовка которую разработчик может отредактировать, например если он убирает ВызватьИсключение, тогда запись в ЖР нужно оставить + вывести ИнформациюОбОшибке пользователю и наоборот.
23. improg 575 16.06.23 10:24 Сейчас в теме
(22) Согласен, видимо в последних версиях платформы пишется неявно в ЖР, тогда да запись в ЖР не обязательно писать с ВызватьИсключение, в частности версия платформы 8.3.22.1851. Возможно на более ранних релизах этого не было. Спасибо.
25. kuzyara 1914 19.06.23 08:52 Сейчас в теме
(23) причем тут версия платформы? неперехваченные ошибки всегда писались в ЖР
26. improg 575 19.06.23 09:04 Сейчас в теме
(25) Это я уже понял, вот только не пойму почему в документации пишут так:

Правильно записывать в журнал регистрации подробное представление исключения, а краткое представление добавлять в текст сообщения пользователю:

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


ссылка на источник Перехват исключений в коде.
27. kuzyara 1914 19.06.23 09:13 Сейчас в теме
(26) потому что на клиенте нет метода "ЗаписьЖурналаРегистрации",
&НаКлиенте
Попытка
    ВыполнитьОперацию();
Исключение
    ТекстСообщения = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    ПоказатьПредупреждение(,НСтр("ru = 'Операция не может быть выполнена по причине:'") + Символы.ПС + ТекстСообщения);
КонецПопытки;
чтобы можно было записать полный текст ошибки, перед тем как подавим и изменим на текст на понятный пользователю.

Информация с этой страницы ИТС: Перехват исключений в коде содержит редкий кейс когда исключение перехватывается на клиенте - что вводит в заблуждение и только усугубляет неразбериху
28. improg 575 19.06.23 09:16 Сейчас в теме
(27) То что на клиенте нет записи ЖР это понятно, пишет то на сервере он ее. И у себя я тоже этот момент проверил на форме. Вообщем на практике я понял что если писать ВызватьИсключение то в ЖР дублировать запись не имеет смысла, если без ВызватьИсключение то тогда нужно производить запись в ЖР с подробным представлением об ошибке.

Вот еще источник Транзакции: правила использования
предпоследний пункт (рекомендуется в блоке Исключение делать запись в журнал регистрации;):

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

метод НачатьТранзакцию должен быть за пределами блока Попытка-Исключение непосредственно перед оператором Попытка;
все действия, выполняемые после вызова метода НачатьТранзакцию, должны находиться в одном блоке Попытка, в том числе чтение, блокировка и обработка данных;
метод ЗафиксироватьТранзакцию должен идти последним в блоке Попытка перед оператором Исключение, чтобы гарантировать, что после ЗафиксироватьТранзакцию не возникнет исключение;
необходимо предусмотреть обработку исключений – в блоке Исключение нужно сначала вызвать метод ОтменитьТранзакцию, а затем выполнять другие действия, если они требуются;
рекомендуется в блоке Исключение делать запись в журнал регистрации;
при использовании вложенных транзакций (см. п. 1.4) в конце блока Исключение рекомендуется добавить оператор ВызватьИсключение. В противном случае исключение не будет передано выше по стеку вызовов, там не сработает обработка исключения, внешняя транзакция не будет явным образом отменена и платформа вызовет исключение «В данной транзакции происходила ошибка»


и ниже кусок кода

Пример

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

... // чтение или запись данных

ДокументОбъект.Записать();

ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();

ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"),
УровеньЖурналаРегистрации.Ошибка,
,
,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

ВызватьИсключение; // есть внешняя транзакция

КонецПопытки;
Показать


и далее еще кусок кода:

Правильно

НачатьТранзакцию();
Попытка
РегистрыСведений.КурсыВалют.УстановитьИспользованиеИтогов(Ложь);

НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Валюта.Установить(ВалютаСсылка);
НаборЗаписей.Загрузить(ТаблицаКурсов);
НаборЗаписей.ОбменДанными.Загрузка = Истина;

НаборЗаписей.Записать();

РегистрыСведений.КурсыВалют.УстановитьИспользованиеИтогов(Истина);

ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;

РегистрыСведений.КурсыВалют.ПересчитатьИтоги();
Показать
32. improg 575 17.07.23 09:42 Сейчас в теме
(27) да это редкий случай и работает правильно т.к. описан в примере Перехват исключений в коде, хороший кейс нужно взять на вооружение.
29. untru 13 26.06.23 01:10 Сейчас в теме
есть 2 см а очень хочется, выложите вариант для не имущих))))))
30. improg 575 26.06.23 18:33 Сейчас в теме
(29) Таких нет, если только эту цену снизить, предлагаю середину 3 см?
31. untru 13 05.07.23 14:36 Сейчас в теме
(30) так нет 3х то))) есть только 2)
34. improg 575 18.07.23 09:58 Сейчас в теме
33. improg 575 17.07.23 09:49 Сейчас в теме
(28) Тут при проверке не совсем как в примере проверил Перехват исключений в коде, не обернул в исключение на клиенте, если оборачивать на клиенте в попытку то в попытке на сервере нужно писать в ЖР.
Оставьте свое сообщение