Приветствую Вас ГостьСреда, 08.05.2024, 17:30

Каталог статей


Система стандартов и методик разработки конфигурации

Источник: https://its.1c.ru/db/v8std

Более подробно о том, что точно забуду.

1. Именование объектов конфигурации.

Следует избегать в наименовании объектов слов, исключение которых не повлияет на смысл. Например в название отчета не стоит употреблять слово "Отчет".

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

2. Стараться не использовать метод ТекущаяДата() в клиентских модулях. ТекущаяДата() - определяет текущую (системную) дату на компьютере. В случаях, когда пользователи конфигурации будут работать в разных часовых поясах, использование этого метода на клиенте не допустимо. во всех серверных процедурах следует использовать метод ТекущаяДатаСеанса(), который получает текущую дату сервера, приведенную к часовому поясу сеанса.

Все вычисление текущего времени надо перенести на сервер. Если работаем с документами, то надо использовать дату документа. При использовании метода ТекущаяДатаСеанса(), следует избегать его многократного вызова, так как значения будут отличаться друг от друга. Более корректно поместить значение в переменную и использовать её в дальнейшем.

Если используем БСП, то на клиенте рекомендуется использовать метод ОбщегоНазначенияКлиент.ДатаСеанса().

Можно использовать универсальное время:

// преобразуем текущую дату в универсальное время (-4 часа для МСК)
UTC = УниверсальноеВремя(ТекущаяДата());
 
// обратное предобразование (+4 часа для МСК)
НашеВремя = МестноеВремя(UTC);  

3. Изменение параметров сеанса или функциональных опций приводит к очистке накопленного кэша запросов, что приводит к существенному снижению производительности. В связи с этим рекомендуется использовать установку параметров сеанса "по требованию", т.е. они должны быть установлены только при первом обращении, как к неустановленному (https://its.1c.ru/db/v8std#content:413:hdoc).

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

5. Общие модули.

  Тип общего модуля Пример наименования Вызов сервера Сервер Внешнее соединение Клиент
(обычное приложение)
Клиент
(управляемое приложение)
1. Серверный ОбщегоНазначения (или ОбщегоНазначенияСервер)

 

+

+

+

 

2. Серверный для вызова с клиента ОбщегоНазначенияВызовСервера

+

+

 

 

 
3. Клиентский ОбщегоНазначенияКлиент (или ОбщегоНазначенияГлобальный)

 

 

 

+

+

4. Клиент-серверный ОбщегоНазначенияКлиентСервер

 

+

+

+

+

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

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

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

Другие уточняющие постфиксы:

  • Для глобальных модулей добавляется постфикс "Глобальный", в этом случае постфикс "Клиент" добавлять не следует. Например: РаботаСФайламиГлобальный, InfobaseUpdateGlobal.
  • Модули, выполняющиеся в привилегированном режиме, имеющие признак Привилегированный, именуются с постфиксом "ПолныеПрава". Например: РаботаСФайламиПолныеПрава.
  • Модули, предназначенные для реализации на сервере или на клиенте функций с повторным использованием возвращаемых значений (на время вызова или на время сеанса), именуются с постфиксом "ПовтИсп" и "КлиентПовтИсп" соответственно. Например: РаботаСФайламиКлиентПовтИсп, UsersInternalCached.
  • Серверные и клиентские модули библиотечных конфигураций (которые предназначены не для самостоятельного использования, а для разработки других конфигураций) с процедурами и функциями, допускающие изменение своей реализации, именуются с постфиксами "Переопределяемый". 

6. Пользовательские настройки

Для хранения персональных настроек пользователя следует использовать хранилище общих настроек. Например, чтение и запись значения настройки «Задавать вопрос при выходе из программы» для текущего пользователя реализуется на встроенном языке с помощью объекта ХранилищеОбщихНастроек:

ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить("НастройкиПрограммы", "ЗадаватьВопросПриВыходе");
ХранилищеОбщихНастроек.Сохранить("НастройкиПрограммы", "ЗадаватьВопросПриВыходе", ЗначениеНастройки);

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

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

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

 

Перенос выражений. Можно выделить одно общее правило: если выражение слишком длинное (для строки более 120 символов), то для лучшей читабельности кода его лучше перенести на несколько строк. Новая часть выражения должна начинаться с оператора "связи" ("+", "|", "И" и т.д.). Для любителей эстетики перенесенные строки можно выровнять по началу первого операнда.

Примеры:

СуммаДокумента = СуммаБезСкидки
    + СуммаРучнойСкидки
    + СуммаАвтоматическойСкидки;

Если (ВидОперации = Перечисления.ВидыОперацийПоступлениеМПЗ.ПоступлениеРозница)
  ИЛИ (ВидОперации = Перечисления.ВидыОперацийПоступлениеМПЗ.ПоступлениеРозницаКомиссия) Тогда
  Возврат Истина;
КонецЕсли;

ТекстЗапроса = ТекстЗапроса +
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник. Номенклатура КАК Номенклатура";

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

ИменаДокументов = Новый СписокЗначений;
ИменаДокументов.Добавить(Метаданные.Документы.СтрокаВыпискиРасход.Имя, 
                         Метаданные.Документы.СтрокаВыпискиРасход.Синоним);

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

Категория: Программирование | Добавил: leshic (02.05.2023)
Просмотров: 230 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [40]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0