Источник: 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 параметр с типом Структура, в который включить все необходимые параметры. С помощью этого подхода легко менять состав параметров у метода.
|