Что такое система стандартов и методик разработки конфигураций и зачем она нужна?
Основные аргументы для использования.
Система стандартов разработки конфигураций это общепринятые правила, описанные на сайте 1С, по которым рекомендуется вести разработку на платформе 1С. Также стал часто встречать на рынке труда требование к разработчикам на знание и применение стандартов разработки.
1С рекомендует, но многие ли из разработчиков соблюдают эти стандарты, особенно в начале карьеры или, например, когда горят сроки, а заказчику уже нужно что-то ставить, тогда не важно, что там под капотом, лишь бы работало по заявленным требованиям. Второй момент, а нужно ли вообще соблюдать эти стандарты, если и так все работает, квалифицированный специалист разберется и в таком коде.
Я все же склоняюсь к тому, что нужно соблюдать стандарты и методики разработки конфигураций от 1С, пришел к этому выводу исходя из личного опыта. Повидав много решений, "самописных" конфигураций, различных доработок еще начиная с обычных форм, тогда действительно немногим разработчикам были известны эти стандарты и каждый писал как мог, как умел. Со временем бизнес-требования усложнялись, как следствие усложнялась архитектура и код решения и, если он изначально написан не по стандартам и содержит много авторского кода, сопровождать и дорабатывать его становится сложнее и дольше, чем структурированный код с понятными названиями имен переменных, имен таблиц и реквизитов, имен функций и процедур, использования БСП и т.д. К тому же нельзя забывать про сменяемость кадров, и общепринятые правила со временем приобретут более массовый характер, поэтому применяйте их сейчас, чтобы быть востребованным завтра.
Вплотную столкнулся со стандартами и глубоким изучением их на одном из моих мест работы, где разработчики осуществляли перевод отраслевого решения с обычных форм на управляемые, на этом месте работы разработчиков обязали переводить код по системе стандартов. К тому моменту я знал некоторые стандарты, но далеко не все. Решил уделять в день в среднем по часу для изучения и закрепления на практике свод правил. Стандарты находятся в открытом доступе по ссылке 1С:Предприятие 8. Система стандартов и методик разработки конфигураций. Но свод правил немаленький, и все в голове не удержишь и не запомнишь, а постоянно бегать по закладкам такое себе удовольствие, и тогда возникла идея фиксировать изученные правила в шаблонах текста в конфигураторе. Суть в том, что во время разработки, когда необходимо применить стандарт, выбираешь нужный в контексте подсказки шаблон и адаптируешь его в участке своего кода.
Продемонстрирую, как это выглядит на практике, к примеру, создали новый объект метаданных, добавили управляемую форму и начали описывать логику работы формы. Чтобы это сделать по стандартам, нам сначала нужно будет изучить сам стандарт, например, по ссылке Соглашения при написании кода > Оформление модулей > Структура модуля, далее все это закрепляем в шаблонах текста, у меня получилось 4 отдельных стандарта по этому разделу. Создаем новые шаблоны текста в конфигураторе "Сервис - Шаблоны текста". Для удобства я создал новые шаблоны текста "Действия - Новый файл шаблонов", чтобы их легко можно было копировать на другие системы и применять в отдельности.
Первый шаблон - "Ст_РазделыМодулейФорм" (поставил префикс Ст_ вначале названия шаблона для более быстрого вызова в коде), содержание (скопировал из описания стандарта):
#Область ОписаниеПеременных
#КонецОбласти
#Область ОбработчикиСобытийФормы
// Код процедур и функций
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
// Код процедур и функций
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормы<ИмяТаблицыФормы>
// Код процедур и функций
#КонецОбласти
#Область ОбработчикиКомандФормы
// Код процедур и функций
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Код процедур и функций
#КонецОбласти
Второй шаблон - "Ст_РазделыМодулейКоманд", содержание:
#Область ОбработчикиСобытий
// Код процедур и функций
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Код процедур и функций
#КонецОбласти
Третий шаблон - "Ст_РазделыМодулейОбъектовМенеджеровНаборовЗаписейОбработокОтчетов", содержание:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
#КонецОбласти
#Область ПрограммныйИнтерфейс
// Код процедур и функций
#КонецОбласти
#Область ОбработчикиСобытий
// Код процедур и функций
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
// Код процедур и функций
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Код процедур и функций
#КонецОбласти
#Область Инициализация
#КонецОбласти
#КонецЕсли
Четвертый шаблон - "Ст_РазделыОбщихМодулей", содержание:
#Область ПрограммныйИнтерфейс
// Код процедур и функций
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
// Код процедур и функций
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Код процедур и функций
#КонецОбласти
Далее для формы объекта я вызываю шаблон -
"Ст_РазделыМодулейФорм" и формирую структуру модуля, далее по областям распределяю процедуры и функции (также написанные по стандартам). Что имею в итоге - более читаемый и структурированный код, который в дальнейшем легче отладить и сопровождать.
Или, например, мне нужно собрать несколько текстов запросов в пакет, открываю стандарт Реализация обработки данных > Работа с запросами > Оформление текстов запросов, сохраняю, например, такую конкатенацию:
Разделитель =
"
|;
|/////////////////////////////////////////////////////////////
|";
ТекстыЗапросовПакета = Новый Массив;
ТекстЗапроса =
"ВЫБРАТЬ
| Упаковки.Ссылка КАК Ссылка
|ИЗ
| Справочник.Упаковки КАК Упаковки";
ТекстыЗапросовПакета.Добавить(ТекстЗапроса);
ТекстЗапроса =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
ТекстыЗапросовПакета.Добавить(ТекстЗапроса);
ТекстЗапроса = СтрСоединить(ТекстыЗапросовПакета, Разделитель);
в новый шаблон текста "Ст_ЗапросыКонкатенация" и вызываю этот шаблон в дальнейшем, где это будет необходимо.
Также, например у вас разработка с учетом локализации, изучаем стандарт Требования по локализации и описываем, например, стандарт сообщения с учетом локализации "Ст_СообщениеСПараметрами" (стандарт ОбщегоНазначенияКлиентСервер.СообщитьПользователю устарел. С версии БСП выше 2.1.4 cледует использовать ОбщегоНазначенияКлиент.СообщитьПользователю или ОбщегоНазначения.СообщитьПользователю), с кодом:
ОбщегоНазначения.СообщитьПользователю(
СтрШаблон(НСтр(" ru = '<?> %1'"), Параметр));
Еще пример по стандартам Реализация обработки данных > Обработка и модификация данных > Транзакции: правила использования, хотим где-то явно открывать транзакцию, создаем шаблон "Ст_ТранзакцияЯвная" с содержанием:
НачатьТранзакцию();
Попытка
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Документ.ПриходнаяНакладная");
ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", СсылкаДляОбработки);
ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный;
БлокировкаДанных.Заблокировать();
// ... // чтение или запись данных
ДокументОбъект.Записать();
ЗафиксироватьТранзакцию(); // Пишем всегда перед словом Исключение
Исключение
ОтменитьТранзакцию(); // Пишем сразу после слова Исключение
ПодробноеПредставлениеОбОшибке = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), // записывать в ЖР с ВызватьИсключение не нужно
УровеньЖурналаРегистрации.Ошибка, // без ВызватьИсключение пишем в ЖР
,
,
СтрШаблон(НСтр(" ru = '%1'"), ПодробноеПредставлениеОбОшибке));
ВызватьИсключение; // есть внешняя транзакция
КонецПопытки;
Таким образом со временем я формирую помощник по всеми стандартам и при необходимости использую уже сохраненные шаблоны текста, вместо того чтобы бегать по разделам в браузере, выискивать подходящий стандарт и, в конце концов устав от поиска, написать так, как получилось :), в итоге забросив совсем эти стандарты и писать так, как можешь :). Вот такой небольшой кейс из своей практики, который лично мне экономит время и улучшает качество моего кода. Кроме того, я привыкаю писать по стандартам, стал лучше читать и выявлять потенциальные ошибки в своем и чужом коде, лучше стал разбираться в применении тех или иных методов. Например вместо метода ОписаниеОшибки() лучше использовать ИнформацияОбОшибке() более подробное описание тут Соглашения при написании кода > Использование конструкций встроенного языка > Перехват исключений в коде .
Спасибо за внимание, хорошего дня.
Также предлагаю решения вашему вниманию:
Шаблоны для применения cтандартов и методик разработки конфигураций 1С
Простой пример разработки регулярного обмена с использованием БСП на примере ERP 2.4 и УПП 1.3.
Универсальный отчет для сравнения записей регистров накопления между базами.
Универсальная выгрузка и загрузка зарегистрированных справочников и документов по узлу.