# Стандарты разработки 1С - полный корпус > Очищенный Markdown/plain-text корпус сайта для LLM и локальной индексации. ## standard ### std396 - Обработчик события ОбработкаЗаполнения #std396 URL: https://v8std.ru/std/396/ Markdown URL: https://v8std.ru/std/396.md Source path: std/396.md Aliases: std396, #std396, std 396, стандарт 396 Related: standard:std499 External sources: https://its.1c.ru/db/v8std#content:396 ID: #std396 # Обработчик события ОбработкаЗаполнения #### 1. Если нужно ограничить ввод по команде `Создать на основании`, выполняйте проверку в обработчике `ОбработкаЗаполнения` модуля объекта (или набора записей). Типовые проверки: - запрет ввода на основании группы, когда команда `Создать на основании` одинаково доступна для групп и элементов справочника или плана видов характеристик; - запрет ввода на основании непроведенного документа. #### 2. Чтобы объяснить пользователю причину отказа, используйте `ВызватьИсключение` в обработчике `ОбработкаЗаполнения`. #### Пример ```bsl Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда Если ПолучитьЗначениеРеквизита(ДанныеЗаполнения, "ЭтоГруппа") Тогда ВызватьИсключение "Ввод приказа о приеме на основании группы сотрудников невозможен! |Выберите сотрудника. Для раскрытия группы используйте клавиши Ctrl и стрелку вниз"; КонецЕсли; // Обработка заполнения объекта по данным заполнения. КонецЕсли; КонецПроцедуры ``` Не выносите такую проверку в отдельные команды ввода на основании и их обработчики. #### 3. Рекомендуется придерживаться единой логической структуры обработчика `ОбработкаЗаполнения`. #### 3.1. Сначала выполняйте специальное заполнение в зависимости от типа `ДанныеЗаполнения`. #### Пример ```bsl ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения); Если ТипДанныхЗаполнения = Тип("Структура") Тогда ЗаполнитьДокументПоОтбору(ДанныеЗаполнения); ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаказКлиента") Тогда ЗаполнитьДокументНаОснованииЗаказаКлиента(ДанныеЗаполнения); // ... КонецЕсли; ``` #### 3.2. После специального заполнения выполняйте общее заполнение: присваивайте значения по умолчанию только тем реквизитам, которые еще не заполнены. Перед присвоением проверяйте заполненность реквизита через `ЗначениеЗаполнено()`. #### Пример ```bsl Если Не ЗначениеЗаполнено(Подразделение) Тогда Подразделение = ЗначениеНастроекПовтИсп.ПодразделениеПоУмолчанию(); КонецЕсли; ``` При возможности используйте свойство метаданных `Значение заполнения`. Если `СтандартнаяОбработка = Истина` и реквизит не был заполнен в обработчике, значение из этого свойства будет присвоено автоматически при выходе из `ОбработкаЗаполнения`. Такая структура снижает количество логических ошибок заполнения и повышает читаемость кода. #### См. также - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) #### Источник https://its.1c.ru/db/v8std#content:396 ### std402 - Настройка расписания регламентных заданий #std402 URL: https://v8std.ru/std/402/ Markdown URL: https://v8std.ru/std/402.md Source path: std/402.md Aliases: std402, #std402, std 402, стандарт 402 Related: diagnostic:acc:319, diagnostic:v8cs:scheduled-job-periodicity-too-short, standard:std539, standard:std540 External sources: https://its.1c.ru/db/v8std#content:402 ID: #std402 # Настройка расписания регламентных заданий При разработке регламентных заданий выбирайте время и интервал запуска по прикладному назначению. Учитывайте, что слишком частый запуск может негативно влиять на производительность сервера 1С:Предприятие. Рекомендации по расписанию: - регламентное задание не должно выполняться чаще, чем это требуется прикладной задачей; - для большинства заданий нормальным является интервал выполнения 1 раз в день; - исключения возможны, если для прикладной задачи критично частое обновление данных; - ни в каких случаях не задавайте периодичность меньше одной минуты; - для частых заданий (чаще 1 раза в день) периодичность должна быть сбалансирована со временем выполнения. Например, если типичное время выполнения 20 секунд, запуск раз в минуту обычно избыточен; - ресурсоемкие операции по возможности переносите на периоды минимальной загрузки сервера (нерабочее время, выходные); - несколько ресурсоемких заданий лучше разносить по времени, учитывая ожидаемую длительность каждого. #### См. также - [#std540: Общие требования к регламентным заданиям](https://v8std.ru/std/540/) - [#std539: Запуск регламентных заданий](https://v8std.ru/std/539/) #### Проверки [#v8cs:scheduled-job-periodicity-too-short](https://v8std.ru/diagnostics/v8-code-style/scheduled-job-periodicity-too-short/) [#acc:319](https://v8std.ru/diagnostics/acc/319/) #### Источник https://its.1c.ru/db/v8std#content:402 ### std407 - Применение параметров отчета в СКД #std407 URL: https://v8std.ru/std/407/ Markdown URL: https://v8std.ru/std/407.md Source path: std/407.md Aliases: std407, #std407, std 407, стандарт 407 Related: нет External sources: https://its.1c.ru/db/v8std#content:407 ID: #std407 # Применение параметров отчета в СКД #### 1. При использовании параметров в отчетах на СКД: - Избегайте параметров отчета, если можно обойтись обычным управлением элементами отбора. Например, не задавайте условие: ```sdbl ГДЕ Организация = &Организация ``` Вместо этого дайте пользователю управлять элементом отбора `Организация`. - Избегайте обязательных параметров, чтобы пользователь не получал ошибку `Не задан параметр отчета` при отключении параметров. Для этого используйте элементы расширения языка запросов СКД вида `{ГДЕ...}`. ```sdbl {ГДЕ Сведения.Период >= &ДатаНачала, Сведения.Период <= &ДатаОкончания} ``` В этом случае параметры `&ДатаНачала` и `&ДатаОкончания` становятся необязательными. Если пользователь их отключит, соответствующие фрагменты условия также будут отключены. #### Источник https://its.1c.ru/db/v8std#content:407 ### std409 - Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение #std409 URL: https://v8std.ru/std/409/ Markdown URL: https://v8std.ru/std/409.md Source path: std/409.md Aliases: std409, #std409, std 409, стандарт 409 Related: diagnostic:acc:68, diagnostic:bslls:FormDataToValue, diagnostic:v8cs:using-form-data-to-value External sources: https://its.1c.ru/db/v8std#content:409 ID: #std409 # Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение #### 1. В большинстве случаев в модулях форм используйте метод формы `РеквизитФормыВЗначение()` вместо метода `ДанныеФормыВЗначение()`. Это упрощает код и снижает вероятность ошибок. Синтаксис `РеквизитФормыВЗначение()` проще, чем у `ДанныеФормыВЗначение()`. В `ДанныеФормыВЗначение()` нужно дополнительно передавать тип значения: ```bsl ТаблицаПодписей = ДанныеФормыВЗначение(ТаблицаПодписей, Тип("ТаблицаЗначений")); ``` Для `РеквизитФормыВЗначение()` это не нужно: ```bsl ТаблицаПодписей = РеквизитФормыВЗначение("ТаблицаПодписей"); ``` Метод формы `РеквизитФормыВЗначение()` добавлен в платформу для удобства. По эффективности и результату оба метода эквивалентны. #### Проверки [#bslls:FormDataToValue](https://v8std.ru/diagnostics/bslls/FormDataToValue/) [#v8cs:using-form-data-to-value](https://v8std.ru/diagnostics/v8-code-style/using-form-data-to-value/) [#acc:68](https://v8std.ru/diagnostics/acc/68/) #### Источник https://its.1c.ru/db/v8std#content:409 ### std411 - Установка параметров выбора и связей параметров выбора для объектов метаданных #std411 URL: https://v8std.ru/std/411/ Markdown URL: https://v8std.ru/std/411.md Source path: std/411.md Aliases: std411, #std411, std 411, стандарт 411 Related: нет External sources: https://its.1c.ru/db/v8std#content:411 ID: #std411 # Установка параметров выбора и связей параметров выбора для объектов метаданных #### 1. Ограничения бизнес-логики, например ограничения выбора, обычно должны работать одинаково во всех формах редактирования объекта. Поэтому параметры выбора и связи параметров выбора рекомендуется задавать в свойствах объектов метаданных: реквизитов справочников, документов и т.п. #### 2. В отдельных сценариях ограничения выбора зависят от конкретной формы. В таких случаях параметры выбора можно уточнять по месту, в форме. Например, в конфигурации есть: - справочник `Сотрудники` с реквизитами `Организация` и `ВидСотрудника` (перечисление со значениями `Основной` и `Совместитель`); - документ `ПриказОПриеме` с реквизитами `Организация` и `Сотрудник`. Для реквизита `Сотрудник` документа `ПриказОПриеме` задана связь параметра выбора `Отбор.Организация` с реквизитом `Организация`. Нужно реализовать выбор только основных сотрудников в зависимости от функциональной опции `ВыбратьТолькоИзОсновыхСотрудников`. Для этого: - в форме документа `ПриказОПриеме` добавляют реквизит формы `ВидыСотрудников`; - для поля формы `Сотрудник` задают связь параметра выбора `Отбор.ВидСотрудника` с реквизитом формы `ВидыСотрудников`; - реквизит формы `ВидыСотрудников` заполняют по значению функциональной опции. Связь `Отбор.ВидСотрудника` нельзя задать в свойствах реквизита `Сотрудник` самого документа `ПриказОПриеме`, потому что у документа нет реквизита `ВидСотрудника`. В результате будут работать обе связи параметров выбора: - по `Отбор.Организация` (из свойств реквизита документа); - по `Отбор.ВидСотрудника` (из поля формы). Это дает отбор сотрудников одновременно по организации документа и по виду сотрудника, вычисленному по функциональной опции. #### Источник https://its.1c.ru/db/v8std#content:411 ### std412 - Упорядочивание результатов запроса #std412 URL: https://v8std.ru/std/412/ Markdown URL: https://v8std.ru/std/412.md Source path: std/412.md Aliases: std412, #std412, std 412, стандарт 412 Related: diagnostic:acc:540, diagnostic:bslls:SelectTopWithoutOrderBy, standard:std781 External sources: https://its.1c.ru/db/v8310doc/bookmark/dev/TI000001285, https://its.1c.ru/db/v8std#content:412 ID: #std412 # Упорядочивание результатов запроса #### 1.1. Если алгоритм обработки зависит от порядка записей или результат показывается пользователю, в тексте запроса следует использовать `УПОРЯДОЧИТЬ ПО`. Без `УПОРЯДОЧИТЬ ПО` нельзя делать предположений о порядке строк результата. Типичные проблемы без явной сортировки: - разная последовательность строк табличной части при заполнении по запросу; - разный порядок вывода строк и колонок в отчетах; - разное заполнение движений документа по результатам запроса. Вероятность расхождений возрастает: - при переносе на другую СУБД; - при смене версии СУБД; - при изменении параметров СУБД. #### Примечание Для запросов, по которым формируются движения, сортировка оправдана только если она является частью алгоритма (например, FIFO). Иначе сортировка создает лишнюю нагрузку на СУБД. #### 1.2. При сортировке по полю, которое может содержать `NULL`, учитывайте: на разных СУБД порядок может отличаться. #### Неправильно ```sdbl ВЫБРАТЬ СправочникНоменклатура.Ссылка КАК НоменклатураСсылка, ЗапасыОстатки.КоличествоОстаток КАК КоличествоОстаток ИЗ Справочник.Номенклатура КАК СправочникНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки ПО (ЗапасыОстатки.Номенклатура = СправочникНоменклатура.Ссылка) УПОРЯДОЧИТЬ ПО КоличествоОстаток ``` #### Правильно ```sdbl ВЫБРАТЬ СправочникНоменклатура.Ссылка КАК НоменклатураСсылка, ЕСТЬNULL(ЗапасыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток ИЗ Справочник.Номенклатура КАК СправочникНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки ПО (ЗапасыОстатки.Номенклатура = СправочникНоменклатура.Ссылка) УПОРЯДОЧИТЬ ПО КоличествоОстаток ``` #### См. также [Особенности работы с различными СУБД](https://its.1c.ru/db/v8310doc/bookmark/dev/TI000001285). #### 1.3. Если результаты запроса отображаются пользователю: - сортируйте по полям примитивных типов; - сортировку по ссылочным полям заменяйте сортировкой по их строковым представлениям. Иначе порядок строк для пользователя будет выглядеть случайным. #### См. также [#std781: Особенности сортировки в таблице значений](https://v8std.ru/std/781/) #### 1.4. Отсутствие `УПОРЯДОЧИТЬ ПО` допустимо только если одновременно верно: - алгоритм не зависит от порядка строк; - результат не показывается пользователю; - результат всегда содержит одну запись. В этих случаях сортировку лучше не добавлять, чтобы не увеличивать время выполнения запроса. ## Совместное использование с конструкцией РАЗЛИЧНЫЕ #### 2. Если используется `РАЗЛИЧНЫЕ`, сортируйте только по полям, включенным в `ВЫБРАТЬ`. Причина: поля сортировки неявно попадают в выборку и это может привести к появлению нескольких строк с одинаковыми значениями основных полей выборки. ## Ограничения на использование конструкции АВТОУПОРЯДОЧИВАНИЕ #### 3. Использование `ПЕРВЫЕ` совместно с `АВТОУПОРЯДОЧИВАНИЕ` запрещено. В остальных случаях `АВТОУПОРЯДОЧИВАНИЕ` также не рекомендуется, так как разработчик не контролирует поля сортировки. Такая конструкция оправдана только когда конкретный порядок не важен, но должен быть одинаковым на разных СУБД. Причины использования `АВТОУПОРЯДОЧИВАНИЕ` нужно указывать в комментарии непосредственно перед текстом запроса. #### Проверки [#bslls:SelectTopWithoutOrderBy](https://v8std.ru/diagnostics/bslls/SelectTopWithoutOrderBy/) [#acc:540](https://v8std.ru/diagnostics/acc/540/) #### Источник https://its.1c.ru/db/v8std#content:412 ### std413 - Использование параметров сеанса #std413 URL: https://v8std.ru/std/413/ Markdown URL: https://v8std.ru/std/413.md Source path: std/413.md Aliases: std413, #std413, std 413, стандарт 413 Related: standard:std491 External sources: https://its.1c.ru/db/v8std#content:413 ID: #std413 # Использование параметров сеанса #### 1.1. Параметры сеанса используйте для хранения значений определенных типов в рамках клиентского сеанса. Инициализируйте параметры сеанса в модуле сеанса (см. [п. 2.1](https://v8std.ru/std/413/#21)) Их значения используйте в запросах и в условиях ограничения доступа к данным текущего сеанса. #### Примеры параметров сеанса - `ТекущийПроект` - тип `СправочникСсылка.Проекты`; - `ОбменДаннымиВключен` - тип `Булево`; - `РабочееМестоКлиента` - тип `СправочникСсылка.РабочиеМеста`. Параметры сеанса доступны из встроенного языка: ```bsl Проект = ПараметрыСеанса.ТекущийПроект; ``` Для чтения и установки параметра через встроенный язык у пользователя должно быть соответствующее право. Параметры сеанса также используйте в текстах ограничений доступа, например: ```sdbl ГДЕ Документ.Автор = &ТекущийПользователь ``` В этом случае отдельное право на получение значения параметра сеанса не требуется. #### 1.2. Не используйте параметры сеанса для значений, которые нужны только клиентской логике. В клиент-серверном варианте параметры сеанса хранятся на сервере. Поэтому каждое чтение или изменение такого параметра с клиента вызывает дополнительный серверный вызов и увеличивает сетевой трафик. В таких сценариях используйте глобальные переменные модуля управляемого приложения (для режима обычного приложения - глобальные переменные модуля обычного приложения). #### 1.3. Не используйте параметры сеанса для кеширования вычисленных значений, которые многократно применяются в серверной бизнес-логике. Для таких значений используйте функцию в серверном общем модуле с повторным использованием возвращаемых значений. Исключение: когда время вычисления результата сопоставимо с периодом сброса платформенного кеша. ## Установка параметров сеанса "по требованию" #### 2.1. Не инициализируйте параметры сеанса при запуске программы: - не все параметры реально запрашиваются при старте; - часть параметров может намеренно обнуляться в коде во время работы. Правильный способ - устанавливать параметры "по требованию" в обработчике `УстановкаПараметровСеанса` модуля сеанса. Параметр инициализируйте только в момент первого обращения к нему как к неустановленному. ```bsl Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Если ИменаПараметровСеанса = Неопределено Тогда // Установка параметров сеанса при начале сеанса. // Здесь инициализируются параметры, которые можно установить сразу. Иначе // Установка параметров сеанса "по требованию". // Если несколько параметров используют одни и те же данные, // инициализируйте их группой. УстановленныеПараметры = Новый Массив; Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры); КонецЦикла; КонецЕсли; КонецПроцедуры // Устанавливает значения параметров сеанса и добавляет имена // установленных параметров в массив УстановленныеПараметры. // // Параметры: // ИмяПараметра - Строка - имя параметра сеанса для инициализации; // УстановленныеПараметры - Массив - имена уже инициализированных параметров. Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры) // Если параметр уже установлен в текущем вызове, // повторно его не инициализируем. Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда Возврат; КонецЕсли; Если ИмяПараметра = "ТекущийПользователь" Тогда ПараметрыСеанса.ТекущийПользователь = <Значение>; ПараметрыСеанса.<ДругойПараметрСеанса> = <Значение>; УстановленныеПараметры.Добавить(ИмяПараметра); УстановленныеПараметры.Добавить("<ДругойПараметрСеанса>"); КонецЕсли; КонецПроцедуры ``` #### См. также - [#std491: Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным](https://v8std.ru/std/491/) #### Источник https://its.1c.ru/db/v8std#content:413 ### std415 - Ограничения на использование ключевого слова РАЗРЕШЕННЫЕ в запросах #std415 URL: https://v8std.ru/std/415/ Markdown URL: https://v8std.ru/std/415.md Source path: std/415.md Aliases: std415, #std415, std 415, стандарт 415, ВЫБРАТЬ РАЗРЕШЕННЫЕ, выбрать разрешенные, Новый Запрос ВЫБРАТЬ РАЗРЕШЕННЫЕ, ключевое слово РАЗРЕШЕННЫЕ Related: нет External sources: https://its.1c.ru/db/v8std#content:415 ID: #std415 # Ограничения на использование ключевого слова `РАЗРЕШЕННЫЕ` в запросах `РАЗРЕШЕННЫЕ` скрывает недоступные пользователю данные. Это может исказить результат запроса и нарушить бизнес-логику. #### 1. Не используйте `РАЗРЕШЕННЫЕ` в запросах, которые влияют на расчеты и проведение операций. Если для выполнения операции нужны данные, к которым у пользователя нет доступа: - либо предоставьте права чтения на требуемые данные; - либо прервите операцию с сообщением о недостатке прав. #### Например В механизмах расчета списания себестоимости использование `РАЗРЕШЕННЫЕ` может дать разный результат у разных пользователей. #### Неправильно ```bsl // Влияющий на расчет запрос: данные скрываются и результат искажается. Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Партии.Номенклатура, | Партии.СтоимостьОстаток |ИЗ | РегистрНакопления.ПартииТоваровОрганизаций.Остатки КАК Партии"); ``` #### Правильно ```bsl // Если доступ к данным для расчета отсутствует, операцию нужно прервать. Если Не ЕстьПраваДляРасчетаСебестоимости Тогда ВызватьИсключение НСтр("ru='Недостаточно прав для расчета себестоимости.'"); КонецЕсли; Запрос = Новый Запрос( "ВЫБРАТЬ | Партии.Номенклатура, | Партии.СтоимостьОстаток |ИЗ | РегистрНакопления.ПартииТоваровОрганизаций.Остатки КАК Партии"); ``` #### 2. `РАЗРЕШЕННЫЕ` допустимо, когда скрываемые данные не участвуют в бизнес-процессах. #### Например Если у пользователя нет доступа к контактной информации контактных лиц контрагентов, это допустимо, когда эта информация не влияет на выполнение операций. #### Источник https://its.1c.ru/db/v8std#content:415 ### std432 - Использование реквизитов строкового типа #std432 URL: https://v8std.ru/std/432/ Markdown URL: https://v8std.ru/std/432.md Source path: std/432.md Aliases: std432, #std432, std 432, стандарт 432 Related: diagnostic:acc:1205, standard:std531 External sources: https://its.1c.ru/db/files/1CITS/EXE/V8Std/СтрокиНеограниченнойДлины/СтрокиНеограниченнойДлины.zip, https://its.1c.ru/db/v8std#content:432 ID: #std432 # Использование реквизитов строкового типа #### 1.1. Для реквизитов строкового типа используйте переменную длину строки: `Допустимая длина = Переменная`. При этом обязательно задавайте максимально допустимую длину. `Допустимая длина = Фиксированная` допустима только тогда, когда действительно нужна гарантия одинаковой длины строки (за счет автоматического дополнения пробелами справа). #### 1.2. Если максимальная длина строки заранее известна (например, регламентирована), указывайте ее в свойстве `Длина` (или `Длина наименования` для стандартного реквизита `Наименование`). Например, длина реквизита `ИНН` справочника `ФизическиеЛица` должна быть `12 символов`. #### 1.3. Если строка получается конкатенацией других строк, определяйте ее длину как сумму длин исходных строк. Например, длина представления адреса должна равняться сумме длин полей, в которых хранятся части адреса. #### 1.4. Если длина строки не регламентирована, выбирайте разумный лимит, которого достаточно в большинстве случаев. Например: - полное наименование контрагента - `250 символов`; - максимальная длина имени файла в большинстве файловых систем - `260`; - полное имя физического лица - `100`. #### 2. В отдельных случаях допустимо использовать строки неограниченной длины. #### 2.1. Когда в строковый реквизит может попадать пользовательский текст большого объема. Обычно это многострочные поля формы. Например, поле `Дополнительное описание` в заказе клиента или [#std531: поле `Комментарий`](https://v8std.ru/std/531/) #### 2.2. Когда в строковом реквизите хранится техническая информация, которая генерируется программами. Такие данные чаще всего не предназначены для чтения пользователем, а используются в алгоритмах обработки. Например, XML-документы, заголовки почтовых сообщений. #### 3. Если используются строковые реквизиты неограниченной длины, учитывайте ограничения языка запросов. #### 3.1. Для сравнения значений, группировки и получения `РАЗЛИЧНЫЕ` приводите такие реквизиты к строке определенной длины, достаточной для корректного вычисления выражения. Для этого используйте в запросе конструкцию: ```sdbl ВЫРАЗИТЬ(... КАК СТРОКА(1000)) ``` #### 3.2. В отчетах СКД для таких полей вместо этого задавайте параметр `Тип значения` поля (вкладка `Наборы данных`). Учитывайте, что частое приведение неограниченной строки к определенной длине в запросах и отчетах СКД может указывать на неправильное проектное решение. В таком случае пересмотрите тип реквизита в пользу строки ограниченной длины. #### 3.3. В остальных случаях обрезать строку в запросах не требуется. #### 4. Если строковое поле выводится в печатной форме, обеспечьте полный вывод значения, независимо от назначенной длины строки. Иначе можно потерять значимую часть информации. Например, номер дома и квартиры в адресе доставки. Чтобы быстро найти в конфигурации строковые реквизиты неограниченной длины, используйте обработку с ИТС [СтрокиНеограниченнойДлины.erf](https://its.1c.ru/db/files/1CITS/EXE/V8Std/СтрокиНеограниченнойДлины/СтрокиНеограниченнойДлины.zip). #### См. также #### Проверки [#acc:1205](https://v8std.ru/diagnostics/acc/1205/) #### Источник https://its.1c.ru/db/v8std#content:432 ### std434 - Использование ключевых слов "ОБЪЕДИНИТЬ" и "ОБЪЕДИНИТЬ ВСЕ" в запросах #std434 URL: https://v8std.ru/std/434/ Markdown URL: https://v8std.ru/std/434.md Source path: std/434.md Aliases: std434, #std434, std 434, стандарт 434 Related: diagnostic:acc:96, diagnostic:bslls:UnionAll External sources: https://its.1c.ru/db/v8std#content:434 ID: #std434 # Использование ключевых слов "ОБЪЕДИНИТЬ" и "ОБЪЕДИНИТЬ ВСЕ" в запросах В общем случае при объединении результатов нескольких запросов используйте `ОБЪЕДИНИТЬ ВСЕ`, а не `ОБЪЕДИНИТЬ`. Причина: `ОБЪЕДИНИТЬ` удаляет полностью одинаковые строки, и это требует дополнительного времени даже тогда, когда одинаковых строк заведомо быть не может. Исключение: ситуации, когда удаление дубликатов является обязательным условием корректного результата запроса. #### Неправильно ```sdbl ВЫБРАТЬ ПоступлениеТоваровУслуг.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ОБЪЕДИНИТЬ ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ``` #### Правильно ```sdbl ВЫБРАТЬ ПоступлениеТоваровУслуг.Ссылка ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ``` #### Проверки [#bslls:UnionAll](https://v8std.ru/diagnostics/bslls/UnionAll/) [#acc:96](https://v8std.ru/diagnostics/acc/96/) #### Источник https://its.1c.ru/db/v8std#content:434 ### std435 - Ограничение на использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах #std435 URL: https://v8std.ru/std/435/ Markdown URL: https://v8std.ru/std/435.md Source path: std/435.md Aliases: std435, #std435, std 435, стандарт 435 Related: diagnostic:acc:70, diagnostic:bslls:FullOuterJoinQuery, standard:std467 External sources: https://its.1c.ru/db/v8std#content:435 ID: #std435 # Ограничение на использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах #### 1.1. При разработке запросов учитывайте, что в клиент-серверном варианте с СУБД **PostgreSQL** производительность запросов с конструкцией `ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ` существенно снижается. Особенно если таких конструкций две и более. Поэтому в общем случае эту конструкцию использовать не рекомендуется. Там, где возможно, переписывайте запрос без нее. Например, исходный запрос: ```sdbl ВЫБРАТЬ ЕСТЬNULL(ПланПродаж.Номенклатура, ФактическиеПродажи.Номенклатура) КАК Номенклатура, ЕСТЬNULL(ПланПродаж.Сумма, 0) КАК СуммаПлан, ЕСТЬNULL(ФактическиеПродажи.Сумма, 0) КАК СуммаФакт ИЗ ПланПродаж КАК ПланПродаж ПОЛНОЕ СОЕДИНЕНИЕ ФактическиеПродажи КАК ФактическиеПродажи ПО ПланПродаж.Номенклатура = ФактическиеПродажи.Номенклатура ``` может быть реализован без `ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ` так: ```sdbl ВЫБРАТЬ ПланФактПродаж.Номенклатура КАК Номенклатура, СУММА(ПланФактПродаж.СуммаПлан) КАК СуммаПлан, СУММА(ПланФактПродаж.СуммаФакт) КАК СуммаФакт ИЗ (ВЫБРАТЬ ПланПродаж.Номенклатура КАК Номенклатура, ПланПродаж.Сумма КАК СуммаПлан, 0 КАК СуммаФакт ИЗ ПланПродаж КАК ПланПродаж ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ФактическиеПродажи.Номенклатура, 0, ФактическиеПродажи.Сумма ИЗ ФактическиеПродажи КАК ФактическиеПродажи) КАК ПланФактПродаж СГРУППИРОВАТЬ ПО ПланФактПродаж.Номенклатура ``` #### 1.2. Исключение: случаи, когда запрос объективно нельзя переписать без `ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ`. Для СУБД **PostgreSQL** платформа 1С:Предприятие автоматически заменяет эту конструкцию на эквивалентную исполнимую форму, сохраняя атрибуты запроса: `ПЕРВЫЕ`, `РАЗЛИЧНЫЕ`, `УПОРЯДОЧИТЬ ПО`. В таких случаях не нужно механически убирать `ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ` только ради самого запрета. #### 2. Недопустимо одновременно использовать `ПОЛНОЕ СОЕДИНЕНИЕ` и обращение к табличным частям из раздела `ВЫБРАТЬ`. Требование связано с особенностями выполнения таких запросов на **PostgreSQL** и необходимостью переносимости прикладных решений на эту СУБД. #### См. также - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Проверки [#bslls:FullOuterJoinQuery](https://v8std.ru/diagnostics/bslls/FullOuterJoinQuery/) [#acc:70](https://v8std.ru/diagnostics/acc/70/) #### Источник https://its.1c.ru/db/v8std#content:435 ### std436 - Многократное выполнение однотипных запросов #std436 URL: https://v8std.ru/std/436/ Markdown URL: https://v8std.ru/std/436.md Source path: std/436.md Aliases: std436, #std436, std 436, стандарт 436 Related: нет External sources: https://its.1c.ru/db/v8std#content:436 ID: #std436 # Многократное выполнение однотипных запросов #### 1. Старайтесь получать однотипные данные одним запросом, а не серией запросов в цикле. Это ускоряет работу с базой данных. Для объединения используйте, например, условие `В`, `ОБЪЕДИНИТЬ ВСЕ` или пакет запросов. #### Неправильно ```bsl ЧастныйЗапрос = Новый Запрос(" |ВЫБРАТЬ | БанковскиеСчета.Ссылка КАК Счет |ИЗ | Справочник.БанковскиеСчета КАК БанковскиеСчета |ГДЕ | БанковскиеСчета.Банк = &Банк"); Для каждого Банк Из БанкиДляОбработки Цикл ЧастныйЗапрос.УстановитьПараметр("Банк", Банк); ВыборкаСчетов = ЧастныйЗапрос.Выполнить().Выбрать(); Пока ВыборкаСчетов.Следующий() Цикл ОбработатьСчетаВБанке(ВыборкаСчетов.Счет); КонецЦикла; КонецЦикла; ``` #### Правильно ```bsl ОбщийЗапрос = Новый Запрос(" |ВЫБРАТЬ | БанковскиеСчета.Ссылка КАК Счет |ИЗ | Справочник.БанковскиеСчета КАК БанковскиеСчета |ГДЕ | БанковскиеСчета.Банк В(&БанкиДляОбработки)"); ОбщийЗапрос.УстановитьПараметр("БанкиДляОбработки", БанкиДляОбработки); ВыборкаСчетов = ОбщийЗапрос.Выполнить().Выбрать(); Пока ВыборкаСчетов.Следующий() Цикл ОбработатьСчетаВБанке(ВыборкаСчетов.Счет); КонецЦикла; ``` Если используется БСП, вызывайте интерфейсы для работы со списками объектов: `ОбщегоНазначения.ЗначениеРеквизитаОбъектов()` вместо `ЗначениеРеквизитаОбъекта()` в цикле, `УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов()` вместо `КонтактнаяИнформацияОбъекта()` в цикле. #### 2. Допускается разделение запроса на серию запросов в следующих случаях: - заметно усложняется разработка запроса, который выбирает сразу все однотипные данные; - ухудшается производительность запроса. Например, когда есть обращения к виртуальным таблицам, формируемым на определенную дату (остатки регистра накопления, срез последних периодического регистра сведений и т.п.); - нужна порционная обработка большого объема данных: в обработчиках обновления, при групповом проведении или изменении данных, удалении помеченных объектов, контроле ведения учета, загрузке данных из файла или внешних источников, получении почты. В этих случаях запросы в цикле: - необходимы для порционности; - либо незначительно замедляют обработку по сравнению с записью данных; - либо неустранимы на текущих средствах платформы (например, чтение и запись наборов регистра в цикле по значениям измерения). #### 3. Запросы к разным таблицам тоже рекомендуется объединять в один с помощью `ОБЪЕДИНИТЬ ВСЕ` или пакета запросов. При этом выигрыш по времени выполнения может быть незначительным. #### Источник https://its.1c.ru/db/v8std#content:436 ### std437 - Оформление текстов запросов #std437 URL: https://v8std.ru/std/437/ Markdown URL: https://v8std.ru/std/437.md Source path: std/437.md Aliases: std437, #std437, std 437, стандарт 437 Related: diagnostic:acc:254, diagnostic:bslls:AssignAliasFieldsInQuery, diagnostic:bslls:QueryParseError, standard:std762 External sources: https://its.1c.ru/db/v8std#content:437 ID: #std437 # Оформление текстов запросов #### 1. Все ключевые слова языка запросов пишутся заглавными буквами. #### 2. Указывайте необязательные части запроса. Явно задавайте псевдонимы полям. Так запрос проще читать, а код, который использует результат, меньше зависит от названий реквизитов. #### Неправильно ```sdbl Касса.Валюта ``` При изменении имени реквизита придется менять и код, который обращается к свойству `Валюта` в выборке. #### Правильно ```sdbl Касса.Валюта КАК Валюта ``` Изменение имени реквизита приведет только к изменению текста запроса. #### Проверки [#bslls:AssignAliasFieldsInQuery](https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery/) #### 2а. Для полей – реквизитов других полей, например `Касса.Валюта.Наименование` автоматически присваиваемые псевдонимы собираются как `ВалютаНаименование`, а не `Наименование`. #### Проверки [#bslls:AssignAliasFieldsInQuery](https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery/) #### 2б. Пишите ключевое слово `КАК` перед псевдонимом поля источника. #### Проверки [#bslls:AssignAliasFieldsInQuery](https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery/) #### 3. Текст запроса должен быть структурирован. Не пишите запрос в одну строку, даже короткий. Наглядная структура упрощает чтение и поддержку другими разработчиками. #### Неправильно ```sdbl ВЫБРАТЬ Т.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Т ``` #### Правильно ```sdbl ВЫБРАТЬ Т.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Т ``` #### 4. В сложных запросах используйте комментарии. Это особенно полезно при вложенных запросах, объединениях и соединениях. Комментарии помогают понять, зачем нужна таблица или блок запроса. Помните: при использовании конструктора запросов все комментарии удаляются автоматически без предупреждения. #### 5. При создании объекта `Запрос` указывайте комментарий о цели запроса: какие данные нужны или для чего они используются. #### 6.1. При программной "сборке" текста запроса комментируйте все этапы. #### 6.2. Старайтесь, чтобы каждая часть формируемого запроса открывалась в конструкторе запросов: - можно быстро проверить синтаксис - проще разрабатывать и сопровождать конфигурацию, в том числе сторонним разработчикам #### Проверки [#bslls:QueryParseError](https://v8std.ru/diagnostics/bslls/QueryParseError/) #### 7. Типичные случаи программной модификации текста запроса. #### 7.1. Изменение имени поля выборки. #### Неправильно ```bsl ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Наименование КАК Наименование , | Номенклатура. " + ИмяПоляКод + " КАК КодАртикул |ИЗ | Справочник.Номенклатура КАК Номенклатура"; ``` #### Правильно ```bsl ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Наименование КАК Наименование, | &ИмяПоляКод КАК КодАртикул |ИЗ | Справочник.Номенклатура КАК Номенклатура"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяПоляКод", "Номенклатура." + ИмяПоляКод); ``` Изменение имени таблицы. #### Правильно ```bsl ТекстЗапроса = "ВЫБРАТЬ | ТаблицаСправочника.Наименование КАК Наименование, | ТаблицаСправочника.Код КАК Код |ИЗ | &ТаблицаСправочника КАК ТаблицаСправочника"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТаблицаСправочника", "Справочник." + ИмяСправочника); ``` Изменение имени таблицы. Вариант 2. #### Правильно ```bsl ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Наименование КАК НаименованиеТовара, | ЕСТЬNULL(ТаблицаОстатков.ВНаличииОстаток, 0) КАК ОстатокТовара |ИЗ | Справочник.Номенклатура КАК Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ #ТаблицаОстатков КАК ТаблицаОстатков | ПО Номенклатура.Ссылка= ТаблицаОстатков.Номенклатура"; Если ИспользуетсяАдресноеХранение Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаОстатков", "РегистрНакопления.ТоварыВЯчейках.Остатки"); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаОстатков", "РегистрНакопления.ТоварыНаСкладах.Остатки"); КонецЕсли; ``` #### 7.2. Использование комментария для помещения во временную таблицу результата запроса. #### Неправильно ```bsl ТекстЗапроса = "ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка | // ПОМЕСТИТЬ втКонтрагенты |ИЗ | Справочник.Контрагенты КАК Контрагенты"; Если ВыгрузитьВоВременнуюТаблицу Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ПОМЕСТИТЬ", "ПОМЕСТИТЬ"); КонецЕсли; ``` #### Правильно ```bsl ТекстЗапроса = "ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка |ПОМЕСТИТЬ втКонтрагенты |ИЗ | Справочник.Контрагенты КАК Контрагенты"; Если Не ВыгрузитьВоВременнуюТаблицу Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПОМЕСТИТЬ втКонтрагенты", ""); КонецЕсли; ``` #### 7.3. Конкатенация нескольких текстов запросов в пакет. #### Неправильно ```bsl ТекстЗапроса = " "; Если ИспользоватьУпаковки Тогда ТекстЗапроса = "ВЫБРАТЬ | Упаковки.Ссылка КАК Ссылка |ИЗ | Справочник.Упаковки КАК Упаковки; |///////////////////////////////////////////////////////////// |"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник. Номенклатура КАК Номенклатура"; ``` #### Правильно ```bsl ТекстЗапроса = " "; Если ИспользоватьУпаковки Тогда ТекстЗапроса = "ВЫБРАТЬ | Упаковки.Ссылка КАК Ссылка |ИЗ | Справочник.Упаковки КАК Упаковки"; ТекстЗапроса = ТекстЗапроса + " |; |///////////////////////////////////////////////////////////// |"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура"; ``` Или #### Правильно ```bsl Разделитель = " |; |///////////////////////////////////////////////////////////// |"; ТекстыЗапросовПакета = Новый Массив; ТекстЗапроса = "ВЫБРАТЬ | Упаковки.Ссылка КАК Ссылка |ИЗ | Справочник.Упаковки КАК Упаковки"; ТекстыЗапросовПакета.Добавить(ТекстЗапроса); ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура"; ТекстыЗапросовПакета.Добавить(ТекстЗапроса); ТекстЗапроса = СтрСоединить(ТекстыЗапросовПакета, Разделитель); ``` #### См. также - [Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) #### Проверки [#acc:254](https://v8std.ru/diagnostics/acc/254/) #### Источник https://its.1c.ru/db/v8std#content:437 ### std438 - Проверка на пустой результат выполнения запроса #std438 URL: https://v8std.ru/std/438/ Markdown URL: https://v8std.ru/std/438.md Source path: std/438.md Aliases: std438, #std438, std 438, стандарт 438 Related: нет External sources: https://its.1c.ru/db/v8std#content:438 ID: #std438 # Проверка на пустой результат выполнения запроса #### 1. Используйте метод `Пустой`, чтобы проверить, есть ли выбранные строки в результате запроса. Так не будет тратиться время на выгрузку результата в таблицу значений. #### Неправильно ```bsl Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли; ``` #### Правильно ```bsl Возврат Не Запрос.Выполнить().Пустой() ``` #### 2. Не используйте метод `Пустой` для проверки, когда собираетесь выбирать или выгружать данные из результата запроса. #### Неправильно ```bsl РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда // избыточный вызов Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл ... ``` #### Правильно ```bsl Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ... ``` #### Источник https://its.1c.ru/db/v8std#content:438 ### std439 - Использование директив компиляции и инструкций препроцессора #std439 URL: https://v8std.ru/std/439/ Markdown URL: https://v8std.ru/std/439.md Source path: std/439.md Aliases: std439, #std439, std 439, стандарт 439 Related: - diagnostic:acc:104 - diagnostic:acc:547 - diagnostic:bslls:CompilationDirectiveNeedLess - diagnostic:bslls:ParseError - diagnostic:v8cs:form-module-pragma - standard:std440 - standard:std469 External sources: http://v8.1c.ru/overview/release_IDE_beta/, https://its.1c.ru/db/v8std#content:439 ID: #std439 # Использование директив компиляции и инструкций препроцессора #### 1. Директивы компиляции: - `&НаКлиенте` (`&AtClient`); - `&НаСервере` (`&AtServer`); - `&НаСервереБезКонтекста` (`&AtServerNoContext`). Используйте только в модулях управляемых форм и модулей команд. В остальных модулях предпочитайте инструкции препроцессора. В серверных или клиентских общих модулях контекст выполнения очевиден, поэтому директивы компиляции там обычно не нужны. В модулях с признаками клиент/сервер директивы затрудняют понимание того, какие процедуры будут доступны фактически. #### Проверки [#v8cs:form-module-pragma](https://v8std.ru/diagnostics/v8-code-style/form-module-pragma/) #### 2. Не используйте проверки `#Если Сервер` / `#Если Клиент` внутри [#std469: клиент-серверных общих модулей](https://v8std.ru/std/469/) Надежно определить контекст выполнения в таком варианте нельзя. Если логика должна различаться между клиентом и сервером, размещайте ее в отдельных общих модулях с постфиксами `Клиент` и `Сервер`, а не в `КлиентСервер`. #### Неправильно ```bsl Функция КодОсновногоЯзыка() Экспорт #Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда Возврат Метаданные.ОсновнойЯзык.КодЯзыка; #Иначе Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"); #КонецЕсли КонецФункции ``` ```bsl Функция КодОсновногоЯзыка() Экспорт #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Возврат Метаданные.ОсновнойЯзык.КодЯзыка; #Иначе Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка"); #КонецЕсли КонецФункции ``` #### Правильно ```bsl // ОбщийМодуль.ЛокализацияСервер Функция КодОсновногоЯзыка() Экспорт Возврат ЛокализацияКлиентСервер.КодОсновногоЯзыкаСервер(); КонецФункции ``` ```bsl // ОбщийМодуль.ЛокализацияКлиент Функция КодОсновногоЯзыка() Экспорт Возврат ЛокализацияКлиентСервер.КодОсновногоЯзыкаКлиент(); КонецФункции ``` Правильно: разделить на две одноименные функции (клиент/сервер), а общую часть оставить в клиент-серверном модуле. Так достигается надежное различие поведения без инструкций препроцессора в спорном контексте. При этом в обычных клиентских модулях допустимо ветвление по режимам клиента (например, `#Если ВебКлиент`). #### 3. Не разрывайте инструкциями препроцессора и областями: - грамматические конструкции; - выражения; - объявления процедур/функций; - места вызова процедур/функций. #### Неправильно ```bsl Процедура Пример1() а = 1 #Область ИмяОбласти + 2; #КонецОбласти // разрыв выражения КонецПроцедуры ``` ```bsl #Область ИмяОбласти Процедура Пример2() // ... #КонецОбласти // разрыв процедуры КонецПроцедуры ``` ```bsl Если <...> Тогда // ... #Если ВебКлиент Тогда // разрыв блока Если Иначе // ... #КонецЕсли КонецЕсли; ``` ```bsl Результат = Пример4(Параметр1, #Если Клиент Тогда Параметр2, // некорректный вызов функции #КонецЕсли Параметр3); ``` #### Правильно ```bsl Процедура Пример1() а = 1 + 2; КонецПроцедуры ``` ```bsl #Область ИмяОбласти Процедура Пример2() // ... КонецПроцедуры #КонецОбласти ``` ```bsl Если <...> Тогда // ... Иначе #Если ВебКлиент Тогда // код для веб-клиента #Иначе // код для остальных клиентов #КонецЕсли КонецЕсли; ``` ```bsl #Если Клиент Тогда Параметр2 = ЗначениеДляКлиента; #Иначе Параметр2 = ЗначениеПоУмолчанию; #КонецЕсли Результат = Пример4(Параметр1, Параметр2, Параметр3); ``` Эти ошибки автоматически диагностируются средой [1C:Enterprise Development Tools (EDT)](http://v8.1c.ru/overview/release_IDE_beta/). #### См. также - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) - [#std440: Использование дублирующего кода](https://v8std.ru/std/440/) #### Проверки [#bslls:CompilationDirectiveNeedLess](https://v8std.ru/diagnostics/bslls/CompilationDirectiveNeedLess/) [#bslls:ParseError](https://v8std.ru/diagnostics/bslls/ParseError/) [#acc:104](https://v8std.ru/diagnostics/acc/104/) [#acc:547](https://v8std.ru/diagnostics/acc/547/) #### Источник https://its.1c.ru/db/v8std#content:439 ### std440 - Использование дублирующего кода #std440 URL: https://v8std.ru/std/440/ Markdown URL: https://v8std.ru/std/440.md Source path: std/440.md Aliases: std440, #std440, std 440, стандарт 440 Related: diagnostic:acc:1343, diagnostic:acc:1344, standard:std439, standard:std551 External sources: https://its.1c.ru/db/v8std#content:440 ID: #std440 # Использование дублирующего кода #### 1. Дублирование кода — это копирование существующих фрагментов, процедур или функций без изменений при разработке нового функционала, когда логика должна оставаться одинаковой. Такой подход усложняет сопровождение: - в копию попадают исходные ошибки; - при исправлении легко пропустить часть вхождений; - растут затраты на поддержку; - ухудшается читаемость структуры программы. Частая причина дублирования — исходный код недоступен из места нового использования (например, код находится в модуле формы, а нужен в другой форме). Старайтесь избегать дублирования и по возможности перерабатывайте существующий код. Обычно это означает вынос повторно используемой логики из модулей объектов и форм в общие модули. #### 2. Дублирование допустимо, если в будущем ожидается заметное расхождение логики в двух вариантах кода. #### Пример В функции `СообщитьПользователю()` общего модуля `ОбщегоНазначенияКлиентСервер` понадобилась дополнительная обработка входных параметров на сервере. #### Неправильно Использовать [#std439: инструкции препроцессора](https://v8std.ru/std/439/) для разделения серверной и клиентской логики: ```bsl Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач КлючДанных = Неопределено, Знач Поле = "", Отказ = Ложь) Экспорт Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ТекстСообщенияПользователю; Сообщение.Поле = Поле; ЭтоОбъект = Ложь; #Если Не ТонкийКлиент И Не ВебКлиент Тогда Если КлючДанных <> Неопределено И XMLТипЗнч(КлючДанных) <> Неопределено Тогда ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; КонецЕсли; #КонецЕсли Если ЭтоОбъект Тогда Сообщение.УстановитьДанные(КлючДанных); Иначе Сообщение.КлючДанных = КлючДанных; КонецЕсли; Сообщение.Сообщить(); Отказ = Истина; КонецПроцедуры ``` #### Правильно Разделить процедуру на серверную и клиентскую, а общую часть оставить в отдельном клиент-серверном модуле. 1) Серверная процедура: ```bsl Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач КлючДанных = Неопределено, Знач Поле = "", Отказ = Ложь) Экспорт ЭтоОбъект = Ложь; Если КлючДанных <> Неопределено И XMLТипЗнч(КлючДанных) <> Неопределено Тогда ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа; ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0; КонецЕсли; ОбщегоНазначенияСлужебныйКлиентСервер.СообщитьПользователю(ТекстСообщенияПользователю, КлючДанных, Поле, Отказ, ЭтоОбъект); КонецПроцедуры ``` 2) Клиентская процедура: ```bsl Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач КлючДанных = Неопределено, Знач Поле = "", Отказ = Ложь) Экспорт ОбщегоНазначенияСлужебныйКлиентСервер.СообщитьПользователю(ТекстСообщенияПользователю, КлючДанных, Поле, Отказ); КонецПроцедуры ``` 3) Общая служебная реализация: ```bsl Процедура СообщитьПользователю(Знач ТекстСообщенияПользователю, Знач КлючДанных, Знач Поле, Отказ = Ложь, ЭтоОбъект = Ложь) Экспорт Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ТекстСообщенияПользователю; Сообщение.Поле = Поле; Если ЭтоОбъект Тогда Сообщение.УстановитьДанные(КлючДанных); Иначе Сообщение.КлючДанных = КлючДанных; КонецЕсли; Сообщение.Сообщить(); Отказ = Истина; КонецПроцедуры ``` #### См. также - [#std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных](https://v8std.ru/std/551/) #### Проверки [#acc:1343](https://v8std.ru/diagnostics/acc/1343/) [#acc:1344](https://v8std.ru/diagnostics/acc/1344/) #### Источник https://its.1c.ru/db/v8std#content:440 ### std441 - Общие требования к построению конструкций встроенного языка #std441 URL: https://v8std.ru/std/441/ Markdown URL: https://v8std.ru/std/441.md Source path: std/441.md Aliases: std441, #std441, std 441, стандарт 441 Related: diagnostic:acc:1248, diagnostic:bslls:CanonicalSpellingKeywords, diagnostic:v8cs:bsl-canonical-pragma, standard:std444, standard:std456 External sources: https://its.1c.ru/db/v8std#content:441 ID: #std441 # Общие требования к построению конструкций встроенного языка #### 1. Ключевые слова встроенного языка пишите канонически, как в документации и Синтакс-помощнике. #### Неправильно ```bsl конецЕсли КОНЕЦЕСЛИ конецесли Конецесли ``` #### Правильно ```bsl КонецЕсли ``` #### Проверки [#bslls:CanonicalSpellingKeywords](https://v8std.ru/diagnostics/bslls/CanonicalSpellingKeywords/) #### 2. Когда подряд идут несколько присваиваний, допускается локально выравнивать `=` для лучшей читаемости. ```bsl ДиалогВыбора.ПолноеИмяФайла = ИмяФайла; ДиалогВыбора.Каталог = ИмяПути; ДиалогВыбора.Заголовок = НСтр("ru = 'Выберите файл со списком запросов'"); ДиалогВыбора.Фильтр = НСтр("ru = 'Файлы запросов (*.sel)|*.sel|Все файлы (*.*)|*.*'"); ДиалогВыбора.Расширение = "sel"; ``` Не выравнивайте операторы таким образом по всему модулю. Делайте это только для соседних строк, где это действительно улучшает чтение. #### 3. Составные логические выражения в `Если... КонецЕсли` переносите по [#std444: правилам переноса выражений](https://v8std.ru/std/444/) #### 4. Логические выражения и значения типа `Булево` не сравнивайте с литералами `Истина` и `Ложь`. #### Неправильно ```bsl Если ЭтоНовый() = Истина Тогда ``` #### Правильно ```bsl Если ЭтоНовый() Тогда ``` #### 5. Если нужно сравнить результат выражения, сначала присвойте его промежуточной переменной, а затем сравнивайте переменную. #### Неправильно ```bsl Если Вопрос(НСтр("ru = 'Данные еще не записаны. Записать?'"), РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да) = КодВозвратаДиалога.Да Тогда Записать(); Иначе Возврат; КонецЕсли; ``` #### Правильно ```bsl Ответ = Вопрос(НСтр("ru = 'Данные еще не записаны. Записать?'"), РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); Если Ответ = КодВозвратаДиалога.Да Тогда Записать(); Иначе Возврат; КонецЕсли; ``` #### 6. Используйте системные наборы значений везде, где это возможно. Например, вместо `Символ(10)` используйте `Символы.ПС`. #### См. также - [#std444: Перенос выражений](https://v8std.ru/std/444/) - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Проверки [#v8cs:bsl-canonical-pragma](https://v8std.ru/diagnostics/v8-code-style/bsl-canonical-pragma/) [#acc:1248](https://v8std.ru/diagnostics/acc/1248/) #### Источник https://its.1c.ru/db/v8std#content:441 ### std442 - Определение типа значения переменной #std442 URL: https://v8std.ru/std/442/ Markdown URL: https://v8std.ru/std/442.md Source path: std/442.md Aliases: std442, #std442, std 442, стандарт 442 Related: нет External sources: https://its.1c.ru/db/v8std#content:442 ID: #std442 # Определение типа значения переменной Определяйте тип значения сравнением с типом, а не косвенными проверками. #### Неправильно ```bsl Если Ссылка.Метаданные().Имя = "ПоступлениеТоваровУслуг" Тогда ``` #### Правильно ```bsl Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда ``` #### Источник https://its.1c.ru/db/v8std#content:442 ### std443 - Получение предопределенных значений на клиенте #std443 URL: https://v8std.ru/std/443/ Markdown URL: https://v8std.ru/std/443.md Source path: std/443.md Aliases: std443, #std443, std 443, стандарт 443 Related: standard:std487, standard:std697 External sources: https://its.1c.ru/db/v83doc/bookmark/dev/TI000000158, https://its.1c.ru/db/v8std#content:443 ID: #std443 # Получение предопределенных значений на клиенте #### 1. В клиентском коде (тонкий клиент, веб-клиент), где недоступны менеджеры вида `СправочникМенеджер.` и `ПеречислениеМенеджер.`, для получения ссылок на предопределенные элементы используйте `ПредопределенноеЗначение`. #### Пример ```bsl ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо"); ``` #### 2. Если используется БСП версии `2.1.4` и выше, предпочтительно применять `ПредопределенныйЭлемент` из модулей `ОбщегоНазначения` или `ОбщегоНазначенияКлиент`. Этот API возвращает `Неопределено`, если элемент отсутствует в ИБ, и не требует дополнительного клиентского кеширования. #### См. также - [#std487: Минимизация количества серверных вызовов и трафика](https://v8std.ru/std/487/) - [#std697: Использование предопределенных элементов](https://v8std.ru/std/697/) - [Работа с предопределенными значениями (документация платформы)](https://its.1c.ru/db/v83doc/bookmark/dev/TI000000158) #### Источник https://its.1c.ru/db/v8std#content:443 ### std444 - Перенос выражений #std444 URL: https://v8std.ru/std/444/ Markdown URL: https://v8std.ru/std/444.md Source path: std/444.md Aliases: std444, #std444, std 444, стандарт 444 Related: diagnostic:acc:101, diagnostic:acc:102, diagnostic:acc:103, diagnostic:bslls:IncorrectLineBreak External sources: https://its.1c.ru/db/v8std#content:444 ID: #std444 # Перенос выражений #### 1. Если длина строки больше 120 символов, используйте переносы. Строки длиннее 120 символов не оставляйте, кроме случаев, когда перенос невозможен. #### 2. Длинные арифметические выражения переносите по правилам: - в одной строке может быть больше одного операнда; - знак операции при переносе ставьте в начале новой строки; - операнды новой строки выравнивайте либо стандартным отступом, либо по началу первого операнда без учета знаков операции. #### Правильно ```bsl СуммаДокумента = СуммаБезСкидки + СуммаРучнойСкидки + СуммаАвтоматическойСкидки; ``` #### Правильно ```bsl СуммаДокумента = СуммаБезСкидки + СуммаРучнойСкидки + СуммаАвтоматическойСкидки; ``` #### 3.1. Длинные строковые константы переносите с помощью символа перевода строки `|`. #### Правильно ```bsl ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗаметкиПоПредмету.КоличествоЗаметок КАК КоличествоЗаметок |ИЗ | РегистрСведений.ЗаметкиПоПредмету КАК ЗаметкиПоПредмету |ГДЕ | ЗаметкиПоПредмету.Предмет = &Предмет"; ``` #### Правильно ```bsl ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Обновление адресного классификатора не требуется. |В программе уже загружены актуальные адресные сведения от %1.'"), Формат(ДатаПоследнегоОбновленияКЛАДР, "ДЛФ=D")); ПоказатьПредупреждение(, ТекстПредупреждения); ``` Не переносите строки, содержащие текст сообщения пользователю (объект `СообщениеПользователю`). #### 3.2. При конкатенации строк используйте `+` в начале новой строки, как и в арифметических выражениях. #### Правильно ```bsl ПоляОтбора = "Номенклатура,Характеристика,Склад" + ДополнительныеПоляОтбора; ``` #### 3.3. При конкатенации длинных строк допускается ставить `+` в конце строки, чтобы не ломать общее форматирование текста. #### Правильно ```bsl ТекстЗапроса = ТекстЗапроса + "ВЫБРАТЬ | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура"; ``` #### 4. Параметры процедур, функций и методов переносите по правилам: - параметры выравнивайте по началу первого параметра или используйте стандартный отступ; - закрывающую скобку `)` и разделитель операторов `;` ставьте в строке с последним параметром; - также допустим формат, который предлагает автоформатирование конфигуратора. #### Правильно ```bsl ИменаДокументов.Добавить(Метаданные.Документы.СтрокаВыпискиРасход.Имя, Метаданные.Документы.СтрокаВыпискиРасход.Синоним); ``` #### Правильно ```bsl ИменаДокументов.Добавить( Метаданные.Документы.СтрокаВыпискиРасход.Имя, Метаданные.Документы.СтрокаВыпискиРасход.Синоним); ``` #### Правильно ```bsl ИменаДокументов.Добавить(Метаданные.Документы.СтрокаВыпискиРасход.Имя, Метаданные.Документы.СтрокаВыпискиРасход.Синоним); ``` #### 5. Сложные условия в `Если ... ИначеЕсли ... КонецЕсли` переносите по правилам: - каждое элементарное условие начинайте с новой строки, если выражение длиннее 120 символов; - операторы `И` и `ИЛИ` ставьте в начале строки; - условия выравнивайте стандартным отступом или по началу первого условия без учета логических операторов. #### Правильно ```bsl Если (ВидОперации = Перечисления.ВидыОперацийПоступлениеМПЗ.ПоступлениеРозница) ИЛИ (ВидОперации = Перечисления.ВидыОперацийПоступлениеМПЗ.ПоступлениеРозницаКомиссия) Тогда Возврат Истина; КонецЕсли; ``` #### Правильно ```bsl Если ((СтруктураМодуля[Индекс].Блок = Перечисления.ТипыБлоковМодулей.ЗаголовокПроцедуры) ИЛИ (СтруктураМодуля[Индекс].Блок = Перечисления.ТипыБлоковМодулей.ЗаголовокФункции)) И (Найти(ВРег(СтруктураМодуля[Индекс].Текст), КлючБлока) > 0) Тогда ... КонецЕсли; ``` #### 6. Используйте автоформатирование текста программного модуля. #### Подсказка В конфигураторе: - сочетанием Alt+Shift+F - или через меню `Текст -> Блок -> Форматировать`. В EDT: - сочетанием Ctrl+Shift+F - или нажать правую кнопку мыши и выбрать `Source (Исходный код) -> Format (Форматировать)`. #### Проверки [#bslls:IncorrectLineBreak](https://v8std.ru/diagnostics/bslls/IncorrectLineBreak/) [#acc:101](https://v8std.ru/diagnostics/acc/101/) [#acc:102](https://v8std.ru/diagnostics/acc/102/) [#acc:103](https://v8std.ru/diagnostics/acc/103/) #### Источник https://its.1c.ru/db/v8std#content:444 ### std445 - Получение метаданных объектов #std445 URL: https://v8std.ru/std/445/ Markdown URL: https://v8std.ru/std/445.md Source path: std/445.md Aliases: std445, #std445, std 445, стандарт 445 Related: нет External sources: https://its.1c.ru/db/v8std#content:445 ID: #std445 # Получение метаданных объектов #### 1. Если тип объекта метаданных заранее известен (справочник, документ и т.д.), получайте метаданные через метод `Метаданные()` у самого объекта (или ссылки). Доступ через глобальное свойство `Метаданные` в таком случае работает заметно медленнее. #### Неправильно ```bsl Метаданные.Справочники[ИмяСправочника] Метаданные.НайтиПоПолномуИмени("Справочник." + ИмяСправочника) ``` #### Правильно ```bsl СправочникОбъект.Метаданные() ``` #### 2. Если тип заранее неизвестен, используйте метод `НайтиПоТипу`. ```bsl // Получить полное имя объекта метаданных вида // "Справочник.Номенклатура", "Документ.ПриходнаяНакладная" по переданной ссылке. ИмяОбъектаМетаданного = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя(); ``` #### Источник https://its.1c.ru/db/v8std#content:445 ### std447 - Использование объекта РегистрСведенийМенеджерЗаписи #std447 URL: https://v8std.ru/std/447/ Markdown URL: https://v8std.ru/std/447.md Source path: std/447.md Aliases: std447, #std447, std 447, стандарт 447 Related: нет External sources: https://its.1c.ru/db/v8std#content:447 ID: #std447 # Использование объекта РегистрСведенийМенеджерЗаписи #### 1. Чтение записи (или набора записей) из регистра сведений без последующей модификации выполняйте запросом. #### 2. `РегистрСведенийМенеджерЗаписи` применяйте только когда нужен отбор одновременно по всем измерениям регистра. При записи через менеджер записи платформа использует два набора записей и устанавливает им соответствующие отборы. Из-за этого обработчики событий набора записей вызываются и при записи через менеджер записи. #### 3. В остальных случаях используйте `РегистрСведенийНаборЗаписей`. По производительности менеджер записи иногда сопоставим с набором записей, но в части сценариев медленнее из-за лишних действий. #### Неправильно ```bsl Для Каждого СтрокаТаблицы Из ТаблицаЗначенийПрав Цикл ЭлементРегистраСведений = РегистрыСведений.ЗначенияПравПользователя.СоздатьМенеджерЗаписи(); ЭлементРегистраСведений.НаборПрав = ЗначениеНабораПрав; ЭлементРегистраСведений.Право = СтрокаТаблицы.Право; ЭлементРегистраСведений.Значение = СтрокаТаблицы.Значение; ЭлементРегистраСведений.Записать(); КонецЦикла; ``` #### Правильно ```bsl Набор = РегистрыСведений.ЗначенияПравПользователя.СоздатьНаборЗаписей(); Набор.Отбор.НаборПрав.Установить(ЗначениеНабораПрав); Для Каждого СтрокаТаблицы Из ТаблицаЗначенийПрав Цикл Запись = Набор.Добавить(); Запись.НаборПрав = ЗначениеНабораПрав; Запись.Право = СтрокаТаблицы.Право; Запись.Значение = СтрокаТаблицы.Значение; КонецЦикла; Набор.Записать(); ``` #### Источник https://its.1c.ru/db/v8std#content:447 ### std448 - Копирование строк между таблицами значений (табличными частями и т.п.) произвольной структуры #std448 URL: https://v8std.ru/std/448/ Markdown URL: https://v8std.ru/std/448.md Source path: std/448.md Aliases: std448, #std448, std 448, стандарт 448 Related: нет External sources: https://its.1c.ru/db/v8std#content:448 ID: #std448 # Копирование строк между таблицами значений (табличными частями и т.п.) произвольной структуры #### 1. При копировании строк между разными таблицами значений (табличными частями и т.п.) со схожим составом колонок используйте метод глобального контекста `ЗаполнитьЗначенияСвойств()`. Такой алгоритм заметно эффективнее, чем многократный перебор колонок для определения состава таблиц. #### Неправильно ```bsl Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить(); Для каждого Колонка Из ТаблицаПриемник.Колонки Цикл КолонкаТаблицыИсточника = ТаблицаИсточник.Колонки.Найти(Колонка.Имя); Если КолонкаТаблицыИсточника <> Неопределено Тогда СтрокаТаблицыПриемника[Колонка.Имя] = СтрокаТаблицыИсточника[Колонка.Имя]; КонецЕсли; КонецЦикла; КонецЦикла; ``` #### Правильно ```bsl Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника); КонецЦикла; ``` #### Источник https://its.1c.ru/db/v8std#content:448 ### std449 - Получение представлений для ссылочных значений в табличном документе #std449 URL: https://v8std.ru/std/449/ Markdown URL: https://v8std.ru/std/449.md Source path: std/449.md Aliases: std449, #std449, std 449, стандарт 449 Related: нет External sources: https://its.1c.ru/db/metod81/content/2655/hdoc, https://its.1c.ru/db/metod81/content/2656/hdoc, https://its.1c.ru/db/v8std#content:449 ID: #std449 # Получение представлений для ссылочных значений в табличном документе При формировании табличного документа не указывайте ссылочные значения в параметрах ячеек с типом заполнения `Параметр`. Иначе при выводе данных система многократно обращается к базе данных, чтобы получить представления ссылок. Поэтому в параметры передавайте уже готовые представления значений. Исключение возможно, если получение представлений заранее приведет к тем же многократным обращениям к базе данных. Также учитывайте особенности получения представлений в запросе через поле `Представление` или функцию `Представление()`: - выполняется неявное соединение с таблицей объекта, для которого получается представление; - для полей составного типа выполняется несколько соединений, по числу типов в составе; - запрос может выполняться существенно дольше; - при большом количестве типов в клиент-серверном варианте возможен выход за ограничение `Microsoft SQL Server 2005` (не более 256 таблиц в запросе). В таких случаях допустимо получать представления ссылок при выводе в табличный документ. Универсального выбора «лучшего» способа нет: его определяют разработчики по результатам измерений на реальных данных. #### См. также - [Особенности работы с полем Представление и функцией Представление() языка запросов (статья на ИТС)](https://its.1c.ru/db/metod81/content/2655/hdoc) - [Вывод ссылочных полей](https://its.1c.ru/db/metod81/content/2656/hdoc) #### Источник https://its.1c.ru/db/v8std#content:449 ### std450 - Порядок записи движений документов #std450 URL: https://v8std.ru/std/450/ Markdown URL: https://v8std.ru/std/450.md Source path: std/450.md Aliases: std450, #std450, std 450, стандарт 450 Related: diagnostic:acc:105, standard:std477, standard:std603, standard:std633 External sources: https://its.1c.ru/db/v8std#content:450 ID: #std450 # Порядок записи движений документов #### 1. Не используйте явную запись наборов записей регистров методом `Записать()` в процедуре обработки проведения документа. Запись должна выполняться системой неявно, при завершении процедуры проведения. Иначе при параллельной работе пользователей возможны взаимные блокировки при проведении документов. #### 2. Исключение: данные из регистров нужны в последующих алгоритмах, которые выполняются до выхода из процедуры проведения. #### См. также - [#std603: Требования к проведению документов](https://v8std.ru/std/603/) - [#std477: Самодостаточность регистров](https://v8std.ru/std/477/) - [#std633: Использование активности движений](https://v8std.ru/std/633/) #### Проверки [#acc:105](https://v8std.ru/diagnostics/acc/105/) #### Источник https://its.1c.ru/db/v8std#content:450 ### std451 - Программное создание прикладных объектов #std451 URL: https://v8std.ru/std/451/ Markdown URL: https://v8std.ru/std/451.md Source path: std/451.md Aliases: std451, #std451, std 451, стандарт 451 Related: diagnostic:acc:99 External sources: https://its.1c.ru/db/v8std#content:451 ID: #std451 # Программное создание прикладных объектов #### 1. Для программного создания прикладных объектов используйте методы соответствующих менеджеров (`СоздатьЭлемент()`, `СоздатьДокумент()`, `СоздатьНаборЗаписей()` и т.п.). Если для объекта есть менеджер, использование конструктора `Новый` запрещено. #### Неправильно ```bsl ДокументПриходная = Новый("ДокументОбъект.ПоступлениеТоваровУслуг"); ``` #### Правильно ```bsl ДокументПриходная = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); ``` #### 2. При программном создании объекта явно вызывайте метод `Заполнить()`. Если данных для заполнения нет, передавайте `Неопределено`. Тогда корректно сработают: - свойства реквизитов объекта `Значение заполнения`; - обработчик `ОбработкаЗаполнения`; - подписки на событие заполнения. Поведение будет таким же, как при интерактивной работе с объектом. #### Неправильно ```bsl Папка = Справочники.ПапкиФайлов.СоздатьЭлемент(); // ... Папка.Записать(); ``` #### Правильно ```bsl Папка = Справочники.ПапкиФайлов.СоздатьЭлемент(); // ... Папка.Заполнить(Неопределено); // ... Папка.Записать(); ``` Исключение возможно, когда объект полностью загружается из внешнего источника при обмене данными или при восстановлении базы из резервной копии (загрузка из XML). #### Проверки [#acc:99](https://v8std.ru/diagnostics/acc/99/) #### Источник https://its.1c.ru/db/v8std#content:451 ### std452 - Поиск в коллекциях значений #std452 URL: https://v8std.ru/std/452/ Markdown URL: https://v8std.ru/std/452.md Source path: std/452.md Aliases: std452, #std452, std 452, стандарт 452 Related: нет External sources: https://its.1c.ru/db/v8std#content:452 ID: #std452 # Поиск в коллекциях значений #### 1. При двух и более операциях поиска в объекте `ТаблицаЗначений` с большим количеством строк рекомендуется: - индексировать колонки, по которым выполняется поиск; - индексировать только колонки с хорошей селективностью: каждому значению соответствует небольшое число строк. Иначе индексирование может не дать эффекта и даже ухудшить производительность из-за лишних затрат на построение индекса. Под `большим количеством строк` обычно понимайте `1000 строк` и более. Учитывайте не только размер таблицы, но и число поисков. Например, таблицу на `100 строк` имеет смысл индексировать, если поиск по ней выполняется `100 раз`. Для единичного поиска индекс обычно не нужен. #### 2. Для поиска в `ТаблицаЗначений` предусмотрены методы: - `Найти()`; - `НайтиСтроки()`. При поиске по одной колонке оба метода эффективно используют индекс, если он задан (см. п. 1). При поиске сразу по нескольким колонкам учитывайте ограничения ниже. #### 2.1. Не используйте `Найти()` для поиска по нескольким колонкам в больших таблицах значений. Этот метод применяет индекс только по одному полю. #### Пример ```bsl ТЗ.Индексы.Добавить("Колонка1"); ТЗ.Индексы.Добавить("Колонка2"); ... = ТЗ.Найти("найдется все", "Колонка1, Колонка2"); // Индекс НЕ используется! ``` Даже при наличии индексов по `Колонка1` и `Колонка2` поиск выполняется полным перебором строк. #### 2.2. Для `НайтиСтроки()` список полей индекса должен точно совпадать со списком полей в структуре поиска (порядок полей не важен). Если поля не совпадают, индекс не используется и выполняется полный перебор. #### Пример ```bsl ТЗ.Индексы.Добавить("Колонка1"); // Индекс1 ТЗ.Индексы.Добавить("Колонка2"); // Индекс2 ... = ТЗ.НайтиСтроки(Новый Структура("Колонка1, Колонка2 ", "Ищу1", "Ищу2")); // Индекс НЕ используется! ... = ТЗ.НайтиСтроки(Новый Структура("Колонка1", "Ищу1")); // OK - используется Индекс1 ... = ТЗ.НайтиСтроки(Новый Структура("Колонка2", "Ищу2")); // OK - используется Индекс2 ``` #### Другой пример ```bsl ТЗ.Индексы.Добавить("Колонка1,Колонка2"); ... = ТЗ.НайтиСтроки(Новый Структура("Колонка1, Колонка2", "Ищу1", "Ищу2")); // OK - индекс используется ... = ТЗ.НайтиСтроки(Новый Структура("Колонка2, Колонка1", "Ищу2", "Ищу1")); // OK - индекс используется ... = ТЗ.НайтиСтроки(Новый Структура("Колонка1", "Ищу1")); // Индекс НЕ используется! ... = ТЗ.НайтиСтроки(Новый Структура("Колонка2", "Ищу2")); // Индекс НЕ используется! ``` #### 2.3. То же ограничение действует для метода `Скопировать()` таблицы значений при вызове с параметром `ПараметрыОтбора` типа `Структура`. #### 3. При сортировке таблицы значений по колонкам со ссылочными значениями система для каждой такой колонки получает представления ссылок из базы данных по всем строкам таблицы. Поэтому рекомендуется: - если нужна сортировка по наименованию, заранее добавлять колонки с представлениями и сортировать по ним; - в остальных случаях сортировать «по ссылке», а не по представлению. Для этого в `Сортировать()` передавайте `СравнениеЗначений`. ```bsl ОбъектСравнения = Новый СравнениеЗначений; ТаблицаДокументов.Сортировать("Дата,Ссылка", ОбъектСравнения); ``` Это особенно важно для таблиц на сотни и тысячи строк в алгоритмах, критичных ко времени выполнения. #### 3.1. При поиске в `Массив` с большим количеством элементов лучше отказаться от массива в пользу: - `Соответствие`, если порядок элементов не важен; - индексированной `ТаблицаЗначений`, если порядок элементов значим. В этих вариантах поиск обычно выполняется за константное время, а в массиве — перебором, то есть пропорционально числу элементов. Ориентир по размеру — 1000 элементов и более. Также учитывайте число поисков. Если поиск выполняется многократно (например, в цикле), рекомендация актуальна и для меньших массивов. Особенно внимательно проверяйте универсальные механизмы, которые могут работать на больших объемах данных. #### 3.2. Чтобы обеспечить уникальность элементов в большом массиве, однократно в конце алгоритма вызывайте `СвернутьМассив()` или `ДополнитьМассив()` с параметром `ТолькоУникальныеЗначения = Истина` (модуль `ОбщегоНазначения` БСП). #### 4. Аналогичный недостаток есть у `ДеревоЗначений`: индексов нет, поиск выполняется перебором. В описанных выше случаях заменяйте `ДеревоЗначений` на индексированную `ТаблицаЗначений`. #### Источник https://its.1c.ru/db/v8std#content:452 ### std453 - Описание процедур и функций #std453 URL: https://v8std.ru/std/453/ Markdown URL: https://v8std.ru/std/453.md Source path: std/453.md Aliases: std453, #std453, std 453, стандарт 453 Related: - diagnostic:acc:1242 - diagnostic:acc:1243 - diagnostic:acc:1334 - diagnostic:acc:1335 - diagnostic:acc:1336 - diagnostic:acc:1360 - diagnostic:acc:1381 - diagnostic:acc:1382 - diagnostic:acc:222 - diagnostic:acc:223 - diagnostic:acc:288 - diagnostic:acc:289 - diagnostic:acc:388 - diagnostic:acc:389 - diagnostic:acc:399 - diagnostic:acc:400 - diagnostic:acc:401 - diagnostic:acc:402 - diagnostic:acc:403 - diagnostic:acc:404 - diagnostic:acc:405 - diagnostic:acc:406 - diagnostic:acc:407 - diagnostic:acc:408 - diagnostic:acc:409 - diagnostic:acc:410 - diagnostic:acc:416 - diagnostic:acc:417 - diagnostic:acc:459 - diagnostic:acc:466 - diagnostic:bslls:MissingParameterDescription - diagnostic:bslls:MissingReturnedValueDescription - diagnostic:bslls:PublicMethodsDescription - diagnostic:v8cs:doc-comment-export-procedure-description-section - diagnostic:v8cs:export-procedure-missing-comment - standard:std544 External sources: https://its.1c.ru/db/v8std#content:453 ID: #std453 # Описание процедур и функций #### 1. Описывайте процедуры и функции в комментарии к ним. Текст комментария отображается в контекстной подсказке процедур, функций и их параметров. При разработке в 1C:Enterprise Development Tools (EDT) комментарий также используется для уточнения типизации параметров и возвращаемого значения процедур и функций и помогает выявлять ошибки кодирования на этапе разработки. #### 2. Комментируйте процедуры и функции, входящие в программный интерфейс модулей. Эти процедуры и функции используют другие подсистемы или приложения, за которые могут отвечать другие разработчики, поэтому они должны быть хорошо документированы. #### Проверки [#v8cs:doc-comment-export-procedure-description-section](https://v8std.ru/diagnostics/v8-code-style/doc-comment-export-procedure-description-section/) [#v8cs:export-procedure-missing-comment](https://v8std.ru/diagnostics/v8-code-style/export-procedure-missing-comment/) #### См. также - [#std544: Ограничения на использование экспортных процедур и функций](https://v8std.ru/std/544/) #### 3. Прочие процедуры и функции (в том числе обработчики событий модулей форм, объектов, наборов записей, менеджеров значений и т.п.) комментируйте, если нужно пояснить назначение или особенности работы. Также описывайте причины невыполнения действий, если они неочевидны. Если процедура (функция) проста для понимания и ее назначение и порядок работы следуют из названия и имен формальных параметров, комментарий можно не писать. #### 4. Избегайте комментариев, которые не дают дополнительных пояснений о работе неэкспортной процедуры (функции). Например, неправильно: #### Неправильно ```bsl // Обработчик события "ПриОткрытии" формы // &НаКлиенте Процедура ПриОткрытии() ... // Обработчик команды "Рассчитать" // &НаКлиенте Процедура Рассчитать() ... // Обработчик события "ПриИзменении" элемента формы "РедактированиеТолькоВДиалоге" // &НаКлиенте Процедура РедактированиеТолькоВДиалогеПриИзменении(Элемент) ... // Функция возвращает статью движения денежных средств по данным документа // Функция СтатьяДвиженияДенежныхСредств(ДанныеДокумента) ... ``` В этих примерах комментарии избыточны: из названий процедур очевидно, что это обработчики событий, а с назначением параметров можно ознакомиться в синтакс-помощнике. Комментарий к функции не дает дополнительной информации. #### 5. Размещайте комментарий перед объявлением процедуры (функции) и используйте следующий формат. #### 5.1. Секция `// Описание`» (англ. `// Description`) содержит назначение процедуры (функции), достаточное для понимания сценариев использования без просмотра исходного кода. Также может содержать краткое описание принципов работы и перекрестные ссылки на связанные процедуры и функции. Может быть единственной секцией для процедур без параметров. Описание не должно совпадать с именем процедуры (функции). Для процедур и функций секция должна начинаться с глагола. Для функций это, как правило, «Возвращает…». Если возвращаемый результат не основной в работе функции, начинайте с основного действия: «Проверяет…», «Сравнивает…», «Вычисляет…» и т.п. Не начинайте описание с избыточных слов «Процедура...», «Функция...» или с имени самой процедуры (функции), если смысл от удаления не меняется. Например, неправильно: #### Неправильно ```bsl // Конструктор объекта WSПрокси. // ... Функция WSПрокси(ПараметрыПрокси) Экспорт ... // Функция СтрокаТаблицыЗначенийВСтруктуру создает структуру со свойствами, соответствующими... Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт ... ``` Правильно: #### Правильно ```bsl // Создает прокси на основе определения веб-сервиса и связывает // его с точкой подключения веб-сервиса. // В дополнении к платформенному конструктору Новый WSПрокси: // - включает в себя вызов конструктора WSОпределения; // - на время сеанса кэширует файл WSDL для оптимизации частых обращений к веб-сервису; // - не требует явного указания ИнтернетПрокси (он подставляется автоматически, если настроен); // - выполняет быструю проверку доступности веб-сервиса с помощью операции Ping. // ... Функция WSПрокси(ПараметрыПрокси) Экспорт ... // Создает структуру со свойствами, соответствующими... Функция СтрокаТаблицыЗначенийВСтруктуру(СтрокаТаблицыЗначений) Экспорт ... ``` #### 5.2. Секция `// Параметры:` (англ. `// Parameters:`) описывает параметры процедуры (функции). Если параметров нет, секцию пропускайте. Секция начинается строкой «Параметры:», затем с новой строки размещаются описания всех параметров. #### 5.2.1. Описание параметра начинается с новой строки: имя параметра, затем дефис и список типов (*), затем дефис и текстовое описание параметра. Выбирайте имя параметра так, чтобы назначение было понятно в контексте функции без дополнительных пояснений. Описание типа обязательно. Тип указывайте явно: один тип или список типов. Под «списком типов» понимаются имена типов, разделенные запятыми. Имя типа может быть простым (в одно слово) или составным — в два слова, разделенных точкой. Например: `Строка`, `Структура`, `Произвольный`, `СправочникСсылка.Сотрудники`. В качестве типов значений используйте только существующие в платформе типы, а также специальные типы, предусмотренные в EDT: `ОпределяемыйТип.`, `СправочникСсылка`, `ОбъектМетаданныхОтчет`, `РасширениеДекорацииФормыДляНадписи` и т.п. Например, неправильно: #### Неправильно ```bsl // КоллекцияСтрок - КоллекцияЗначений – коллекция для сравнения; // ФормируемыйОтчет - ОбъектМетаданных: Отчет // ПрисоединенныйФайлОбъект - элемент справочника файлов. ``` Правильно: #### Правильно ```bsl // КоллекцияСтрок – ТаблицаЗначений, Массив, СписокЗначений – коллекция для сравнения. // ФормируемыйОтчет – ОбъектМетаданныхОтчет // ПрисоединенныйФайлОбъект - ОпределяемыйТип.ПрисоединенныйФайлОбъект - элемент справочника файлов. ``` Текстовое описание параметра заполняйте, если одного имени недостаточно для понимания назначения, если нужна дополнительная информация о типе, пояснение назначения параметра или наглядный пример ожидаемого значения. Например, неправильно: #### Неправильно ```bsl // Проверяет, что переданные адреса включены в задачу. Если проверка не проходит – генерируется исключение. // // Параметры: // Адреса - Строка - строка, содержащая электронные адреса // ЗадачаИсполнителя - ЗадачаСсылка.ЗадачаИсполнителя – проверяемая задача // Процедура ПроверитьАдресаЗадачи(Адреса, ЗадачаИсполнителя) ... ``` Правильно: #### Правильно ```bsl // Проверяет, что переданные адреса включены в задачу. Если проверка не проходит – генерируется исключение. // // Параметры: // Адреса - Строка - содержит электронные адреса, разделенные запятой. Например, support@mycorp.ru,v8@localdomain. // ЗадачаИсполнителя - ЗадачаСсылка.ЗадачаИсполнителя // Процедура ПроверитьАдресаЗадачи(Адреса, ЗадачаИсполнителя) ... ``` В данном примере текстовое описание для параметра `Адреса` нужно, чтобы: - указать правило передачи нескольких адресов (через запятую); - привести пример. Для параметра `ЗадачаИсполнителя` описание не требуется. #### 5.2.2. Для параметров типа `Структура` и `ТаблицаЗначений` (`ДеревоЗначений`) в описании типа указывайте ссылку на функцию, выходным значением которой является эта структура или таблица значений. Например, ссылку на функцию-конструктор. Пример: #### Пример ```bsl // Заполняет цены в строке табличной части // Параметры: // ТекущаяСтрока – СтрокаТабличнойЧасти // ПараметрыЗаполненияЦен – см. ЦенообразованиеСервер.ПараметрыЗаполненияЦен // Процедура ЗаполнитьЦеныВСтрокеТЧ(ТекущаяСтрока, ПараметрыЗаполненияЦен); ``` В редких случаях, когда метод обрабатывает коллекции универсальным образом, не описывайте свойства и колонки параметра. Достаточно указать тип `Структура` или `ТаблицаЗначений` (`ДеревоЗначений`). #### 5.2.3. Для параметров типа `Массив` указывайте тип элементов с помощью ключевого слова `Из` (англ. `Of`). Например, неправильно: #### Неправильно ```bsl // МассивПеренаправленныхЗадач - Массив - массив перенаправленных задач. // МассивПеренаправленныхЗадач - Массив - задачи (ЗадачаСсылка.ЗадачаИсполнителя), перенаправленные другому исполнителю. ``` Правильно: #### Правильно ```bsl // СведенияОбОбновлении - Массив из см. ОбновлениеИнформационнойБазы.ПараметрыОбновления ``` Не указывайте тип элементов массивов только в методах, которые работают с массивами универсальным образом. Например, в Библиотеке стандартных подсистем есть методы `ДополнитьМассив`, `УдалитьВсеВхожденияЗначенияИзМассива` и т.д. #### 5.2.4. Для параметра типа `СтрокаТаблицыЗначений` (`СтрокаДереваЗначений`) можно задать состав свойств, соответствующий колонкам его таблицы-владельца (дерева-владельца). Например: #### Пример ```bsl // СведенияОРегионе – СтрокаТаблицыЗначений: см. РегистрыСведений.АдресныеОбъекты.КлассификаторСубъектовРФ ``` `КлассификаторСубъектовРФ` — экспортная функция модуля менеджера регистра сведений АдресныеОбъекты, которая возвращает таблицу значений. #### 5.2.5. Для каждого параметра можно задать одно или несколько дополнительных описаний типов. Каждое дополнительное описание начинается с новой строки, затем обязательный дефис, далее список типов параметра, дефис и текстовое описание. Например: #### Пример ```bsl // Параметры: // Реквизиты - Строка - имена реквизитов, перечисленные через запятую. // Например, "Код, Наименование, Родитель". // - Структура, ФиксированнаяСтруктура - в качестве ключа передается // псевдоним поля для возвращаемой структуры с результатом, // а в качестве значения (опционально) фактическое имя поля в таблице. // Если значение не определено, то имя поля берется из ключа. // - Массив Из Строка, ФиксированныйМассив Из Строка - имена реквизитов. ``` #### 5.2.6. Описания также могут задаваться с помощью ссылки на функцию-конструктор в формате `// см. ПутьКФункции` (англ. `// see MethodPath`). Например: #### Пример ```bsl // ПараметрыУказанияСерий - см. НоменклатураКлиентСервер.ПараметрыУказанияСерий // Дубли - см. ОбработкаОбъект.ПоискИУдалениеДублей.ГруппыДублей // РеквизитыКомпонент - Массив из см. ВнешниеКомпоненты.РеквизитыКомпоненты ``` При разработке кода, обращающегося к реквизитам конкретного объекта метаданных или формы, можно ссылаться на типы реквизитов этого объекта (формы): #### Пример ```bsl // Запросы - см. Обработка.КонсольЗапросов.ТабличнаяЧасть.Запросы // ТипыДанных - см. Обработка.КонсольЗапросов.Реквизит.ДоступныеТипыДанных // Вложения - см. Справочник.ШаблоныСообщений.ФормаЭлемента.Вложения // КонтактнаяИнформация - см. Документ.ЗаказПокупателя.ФормаДокумента.Объект.КонтактнаяИнформация ``` В редких случаях, когда подходящей функции-конструктора нет и ее нельзя создать, допускается указывать ссылку на другую процедуру (при полном совпадении параметров) или на параметр другой процедуры или функции. Например: #### Пример ```bsl // См. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту // Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт // Параметры: // НастройкиФормы - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.НастройкиФормы // Источники - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Источники // ПодключенныеОтчетыИОбработки - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.ПодключенныеОтчетыИОбработки // Команды - см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту.Команды // Процедура ПриОпределенииКомандПодключенныхКОбъекту(НастройкиФормы, Источники, ПодключенныеОтчетыИОбработки, Команды) Экспорт ``` #### 5.3. Секция `// Возвращаемое значение:` (англ. `// Returns:`) описывает тип и содержание возвращаемого значения функции. Для процедур секция отсутствует. Секция начинается строкой «Возвращаемое значение:». Затем с новой строки указывается тип возвращаемого значения, дефис и текст описания. Если возвращаемое значение составного типа, каждый тип пишется с новой строки и с дефиса. Например: #### Пример ```bsl // Возвращаемое значение: // Строка // Возвращаемое значение: // Булево - Истина, если хотя бы одна из переданных ролей доступна текущему пользователю, // либо у него есть административные права. // Возвращаемое значение: // - ЛюбаяСсылка - ссылка на предопределенный элемент. // - Неопределено - если предопределенный элемент есть в метаданных, но не создан в ИБ. // Возвращаемое значение: // - СправочникСсылка.Пользователи // - СправочникСсылка.ВнешниеПользователи ``` Текстовое описание возвращаемого значения заполняйте, если одного описания функции недостаточно или нужна дополнительная информация о типе, например, о составе свойств или колонок. Также можно привести пример ожидаемого значения или сквозной пример в секции «Пример» ниже. Формат описания возвращаемого значения с типом Массив аналогичен п. 5.2.3. Формат описания возвращаемого значения с типом `Структура` и `ТаблицаЗначений` описан в стандарте «Структуры и таблицы значений в качестве параметров процедур и функций». #### 5.4. Секция `// Пример:`» (англ. `// Example:`) содержит пример использования процедуры или функции. Секция начинается строкой «Пример:». Далее с новой строки приводится пример использования. Имя процедуры (функции) пишите вместе с именем общего модуля, в котором она расположена. Из примера должно быть понятно, что передается на входе и что возвращается на выходе. Например, неправильно: #### Неправильно ```bsl // Пример: // ПодставитьПараметрыВСтроку(ШаблонСтроки, СтрокаЗамены); ``` Правильно: #### Правильно ```bsl // Пример: // СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел в Зоопарк". ``` #### 5.4.1. В переопределяемых модулях в секции «Пример» приводите пример реализации переопределяемой процедуры, а не пример ее вызова. Например, для процедуры ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры): #### Пример ```bsl // Пример: // ОбщиеПараметры.МинимальноНеобходимаяВерсияПлатформы = "8.3.4.365"; // ОбщиеПараметры.РекомендуемыйОбъемОперативнойПамяти = 2; ``` #### 5.5. В редких случаях, когда сразу несколько параметров имеют дополнительные типы, добавляйте секцию `// Варианты вызова:` (англ. `// Call options:`. Секция начинается фразой «Варианты вызова:», затем идут описания вариантов, каждое с новой строки. Каждый вариант вызова представляется в виде имени функции со списком типов, перечисленных через запятую в круглых скобках, затем следует дефис и текстовое описание варианта. Например: #### Пример ```bsl // ... // // Параметры: // Параметр1 - Тип11, Тип12 - ... // Параметр2 - Тип21, Тип22, Тип23 - ... // // Варианты вызова: // УниверсальнаяПроцедура(Тип11, Тип21) - описание ... // УниверсальнаяПроцедура(Тип12, Тип22) - описание ... // УниверсальнаяПроцедура(Тип11, Тип23) - описание ... // Процедура УниверсальнаяПроцедура(Параметр1, Параметр2) Экспорт ``` #### 5.6. В любом месте документирующего комментария можно добавить переход к другим объектам конфигурации, процедурам и функциям (в том числе к функциям-конструкторам структур). В 1C:Enterprise Development Tools среда оформит такие переходы в виде гиперссылки. Например: #### Пример ```bsl // Описание универсальной процедуры. // // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа // // Параметры: // Параметр1 – Произвольный – описание параметра см. Справочник.Контрагенты. // Процедура УниверсальнаяПроцедура(Параметр1) ``` #### 5.7. Если нужно пометить процедуру (функцию) как устаревшую, в первой строке описания используйте слово `// Устарела` (англ. `// Deprecated`). Например: #### Пример ```bsl // Устарела. Следует использовать ОбщегоНазначения.РазделениеВключено и // ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных // ... Функция ИспользованиеРазделителяСеанса() Экспорт ``` #### 6. Если требуется прокомментировать процедуру или функцию с директивой компиляции, сначала размещайте комментарий, а затем директиву компиляции. Например: #### Пример ```bsl // Процедура-обработчик события формы ПриСозданииНаСервере. // Обрабатывает параметры формы и заполняет реквизиты формы значениями. // А также выполняет следующие действия: // ... // &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ``` Такой порядок помогает в первую очередь видеть определение функции и директиву компиляции, а затем — комментарий, который может быть достаточно длинным. #### 7. Код процедур и функций отделяйте друг от друга пустыми строками. Примеры описания процедур и функций Пример описания функции с одним параметром: #### Пример ```bsl // Определяет доступность ролей ИменаРолей текущему пользователю, // а также доступность административных прав. // // Параметры: // ИменаРолей - Строка - имена ролей, доступность которых проверяется, разделенные запятыми. // // Возвращаемое значение: // Булево - Истина, если хотя бы одна из переданных ролей доступна текущему пользователю, // либо у него есть административные права. // // Пример: // Если РолиДоступны("ИспользованиеРассылокОтчетов,ОтправкаПоПочте") Тогда ... // Функция РолиДоступны(ИменаРолей) Экспорт ``` Пример описания процедуры без параметров: #### Пример ```bsl // В обработчике события ПередЗаписью документа выполняется; // - очистка табличной части услуги, в случае если указан договор с комиссионером; // - проверка заполнения реквизита ЕдиницаИзмеренияМест табл. части Товары; // - синхронизация с "подчиненным" счетом-фактурой; // - заполнение склада и заказа покупателя в табличных частях Товары и ВозвратнаяТара; // - удаление неиспользуемых строк табличной части "Серийные номера"; // - заполнение переменной модуля объекта УдалятьДвижение. // Процедура ПередЗаписью() КонецПроцедуры ``` #### Проверки [#bslls:MissingParameterDescription](https://v8std.ru/diagnostics/bslls/MissingParameterDescription/) [#bslls:MissingReturnedValueDescription](https://v8std.ru/diagnostics/bslls/MissingReturnedValueDescription/) [#bslls:PublicMethodsDescription](https://v8std.ru/diagnostics/bslls/PublicMethodsDescription/) [#acc:222](https://v8std.ru/diagnostics/acc/222/) [#acc:223](https://v8std.ru/diagnostics/acc/223/) [#acc:288](https://v8std.ru/diagnostics/acc/288/) [#acc:289](https://v8std.ru/diagnostics/acc/289/) [#acc:388](https://v8std.ru/diagnostics/acc/388/) [#acc:389](https://v8std.ru/diagnostics/acc/389/) [#acc:399](https://v8std.ru/diagnostics/acc/399/) [#acc:400](https://v8std.ru/diagnostics/acc/400/) [#acc:401](https://v8std.ru/diagnostics/acc/401/) [#acc:402](https://v8std.ru/diagnostics/acc/402/) [#acc:403](https://v8std.ru/diagnostics/acc/403/) [#acc:404](https://v8std.ru/diagnostics/acc/404/) [#acc:405](https://v8std.ru/diagnostics/acc/405/) [#acc:406](https://v8std.ru/diagnostics/acc/406/) [#acc:407](https://v8std.ru/diagnostics/acc/407/) [#acc:408](https://v8std.ru/diagnostics/acc/408/) [#acc:409](https://v8std.ru/diagnostics/acc/409/) [#acc:410](https://v8std.ru/diagnostics/acc/410/) [#acc:416](https://v8std.ru/diagnostics/acc/416/) [#acc:417](https://v8std.ru/diagnostics/acc/417/) [#acc:459](https://v8std.ru/diagnostics/acc/459/) [#acc:466](https://v8std.ru/diagnostics/acc/466/) [#acc:1242](https://v8std.ru/diagnostics/acc/1242/) [#acc:1243](https://v8std.ru/diagnostics/acc/1243/) [#acc:1334](https://v8std.ru/diagnostics/acc/1334/) [#acc:1335](https://v8std.ru/diagnostics/acc/1335/) [#acc:1336](https://v8std.ru/diagnostics/acc/1336/) [#acc:1360](https://v8std.ru/diagnostics/acc/1360/) [#acc:1381](https://v8std.ru/diagnostics/acc/1381/) [#acc:1382](https://v8std.ru/diagnostics/acc/1382/) #### Источник https://its.1c.ru/db/v8std#content:453 ### std454 - Правила образования имен переменных #std454 URL: https://v8std.ru/std/454/ Markdown URL: https://v8std.ru/std/454.md Source path: std/454.md Aliases: std454, #std454, std 454, стандарт 454 Related: diagnostic:acc:247, diagnostic:acc:248, diagnostic:bslls:ReservedParameterNames, diagnostic:v8cs:bsl-variable-name-invalid, standard:std639 External sources: https://its.1c.ru/db/v8std#content:454 ID: #std454 # Правила образования имен переменных #### 1. Имена переменных берите от терминов предметной области. Из имени должно быть понятно назначение. #### 2. Формируйте имена так: - Удалите пробелы между словами. - Каждое новое слово напишите с большой буквы. - Предлоги и местоимения пишите большими буквами. #### Неправильно ```bsl масРеквизитов, соотвВидИмя, новСтр ``` #### Правильно ```bsl Перем ДиалогРаботыСКаталогом; // Диалог работы с каталогом Перем КоличествоПачекВКоробке; // Количество пачек в коробке ``` #### 3. Не начинайте имена переменных с подчеркивания `_ИмяПеременной`. #### Проверки [#v8cs:bsl-variable-name-invalid](https://v8std.ru/diagnostics/v8-code-style/bsl-variable-name-invalid/) #### 4. Не делайте имена переменных из одного символа. Хотя это допускается для счетчиков цикла. #### 5. Названия булевых переменных пишутся так, как пишется истинное значение, хранимое в переменной. #### Правильно ```bsl Перем ЕстьОшибки; // Признак наличия ошибок в процедуре. Перем ЭтоТоварТара; // Признак, что товар относится к возвратной таре. ``` #### См. также - [#std639: Использование переменных в программных модулях](https://v8std.ru/std/639/) #### Проверки [#bslls:ReservedParameterNames](https://v8std.ru/diagnostics/bslls/ReservedParameterNames/) [#acc:247](https://v8std.ru/diagnostics/acc/247/) [#acc:248](https://v8std.ru/diagnostics/acc/248/) #### Источник https://its.1c.ru/db/v8std#content:454 ### std455 - Структура модуля #std455 URL: https://v8std.ru/std/455/ Markdown URL: https://v8std.ru/std/455.md Source path: std/455.md Aliases: std455, #std455, std 455, стандарт 455 Related: - diagnostic:acc:1340 - diagnostic:acc:1341 - diagnostic:acc:1387 - diagnostic:acc:239 - diagnostic:acc:240 - diagnostic:acc:241 - diagnostic:acc:273 - diagnostic:acc:274 - diagnostic:acc:286 - diagnostic:acc:425 - diagnostic:acc:426 - diagnostic:acc:427 - diagnostic:acc:428 - diagnostic:acc:429 - diagnostic:acc:430 - diagnostic:bslls:CodeOutOfRegion - diagnostic:bslls:CommonModuleMissingAPI - diagnostic:bslls:DuplicateRegion - diagnostic:bslls:EmptyRegion - diagnostic:bslls:MissingVariablesDescription - diagnostic:bslls:NonExportMethodsInApiRegion - diagnostic:bslls:NonStandardRegion - diagnostic:v8cs:invocation-form-event-handler - diagnostic:v8cs:module-region-empty - diagnostic:v8cs:module-structure-event-regions - diagnostic:v8cs:module-structure-form-event-regions - diagnostic:v8cs:module-structure-init-code-in-region - diagnostic:v8cs:module-structure-method-in-regions - diagnostic:v8cs:module-structure-top-region - diagnostic:v8cs:module-structure-var-in-region - standard:std453 - standard:std454 - standard:std639 External sources: https://its.1c.ru/db/v8std#content:455 ID: #std455 #### Шаблоны модулей: - [Общего](https://v8std.ru/std/455/#14) - [Объектов, менеджеров, наборов записей, обработок, отчетов](https://v8std.ru/std/455/#15) - [Форм](https://v8std.ru/std/455/#16) - [Команд](https://v8std.ru/std/455/#17) # Структура модуля #### 1.1. Старайтесь выделить из модуля следующие разделы: - заголовок модуля; - раздел описания переменных; - экспортные процедуры и функции модуля, составляющие его программный интерфейс; - обработчики событий объекта (формы); - служебные процедуры и функции модуля; - раздел инициализации переменных. Некоторые разделы могут присутствовать только в модулях определенного вида. Например, обработчики событий элементов форм могут присутствовать только в модулях форм, а раздел описания переменных и раздел инициализации не могут быть определены в неглобальных общих модулях, модулях менеджеров объектов, наборов записей, значений констант и модуле сеанса. Помогите другим разработчикам понять ваш код. Так будет проще ориентироваться всем. Ведь ты будешь заранее знать где и что искать. Как в типовой, так и в доработанной конфигурации. #### 1.2. Не делайте очень большие разделы, разделяйте на подразделы. Так будет проще ориентироваться в коде. #### 1.3. Разделы и подразделы оформляйте в виде областей. Называйте области так же, как и переменные. См. [#std454: Правила образования имен переменных](https://v8std.ru/std/454/) #### 1.4. Шаблон общего модуля: #### Паттерн ```bsl #Область ПрограммныйИнтерфейс // Код процедур и функций (1) #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс // Код процедур и функций (2) #КонецОбласти #Область СлужебныеПроцедурыИФункции // Код процедур и функций (3) #КонецОбласти ``` 1. Содержит экспортные процедуры и функции для использования другими объектами конфигурации или другими программами (например, через внешнее соединение). 2. Содержит экспортные процедуры и функции для модулей этой же библиотеки. В нем размещайте экспортные процедуры и функции, которые допустимо вызывать только из других подсистем этой же библиотеки. 3. Содержит внутреннюю реализацию общего модуля. ; ; Если общий модуль это часть некоторой подсистемы, здесь допустимо размещать служебные экспортные процедуры и функции, предназначенные только для вызова из других объектов данной подсистемы. ```bsl #Region Public // Enter code here. #EndRegion #Region Internal // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion ``` Для больших модулей разбивайте на подразделы по функциональности: #### Пример ```bsl #Область ОбновлениеИнформационнойБазы // Код процедур и функций #КонецОбласти ``` ```bsl #Region InfobaseUpdate // Enter code here. #EndRegion ``` #### 1.5. Шаблон модулей объектов, менеджеров, наборов записей, обработок, отчетов: #### Паттерн ```bsl #Область ОписаниеПеременных #КонецОбласти #Область ПрограммныйИнтерфейс // Код процедур и функций (1) #КонецОбласти #Область ОбработчикиСобытий // Код процедур и функций (2) #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс // Код процедур и функций (3) #КонецОбласти #Область СлужебныеПроцедурыИФункции // Код процедур и функций (4) #КонецОбласти #Область Инициализация #КонецОбласти ``` 1. Содержит экспортные процедуры и функции для использования в других модулях конфигурации или другими программами (например, через внешнее соединение). ; ; Не помещайте сюда методы, которые нужны только для вызова из модулей самого объекта, его форм и команд. ; ; Например, процедуры заполнения табличной части документа, вызываемые из обработки заполнения в модуле объекта или из формы документа в обработчике команды формы - **не являются программным интерфейсом модуля объекта**. Они вызываются только в самом модуле и из форм этого же объекта. Размещайте их в разделе `Служебные процедуры и функции`. 2. Содержит обработчики событий модуля объекта `ПриЗаписи`, `ПриПроведении` и др. 3. Такое же предназначение, как и в общих модулях [1.4.](https://v8std.ru/std/455/#14) 4. Такое же предназначение, как и в общих модулях [1.4.](https://v8std.ru/std/455/#14) ```bsl #Region Variables #EndRegion #Region Public // Enter code here. #EndRegion #Region EventHandlers // Enter code here. #EndRegion #Region Internal // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion #Region Initialize #EndRegion ``` #### 1.6. Шаблон модулей форм: #### Паттерн ```bsl #Область ОписаниеПеременных #КонецОбласти #Область ОбработчикиСобытийФормы // Код процедур и функций (1) #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы // Код процедур и функций (2) #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормы<ИмяТаблицыФормы> // Код процедур и функций (3) #КонецОбласти #Область ОбработчикиКомандФормы // Код процедур и функций (4) #КонецОбласти #Область СлужебныеПроцедурыИФункции // Код процедур и функций (5) #КонецОбласти ``` 1. Содержит обработчики событий формы: `ПриСозданииНаСервере`, `ПриОткрытии` и др. 2. Содержит обработчики событий элементов, расположенных в основной части формы, которые не связаны с таблицами на форме. 3. Таких разделов может быть несколько. Для каждой таблицы свой раздел. Для обработчиков таблиц формы и элементов формы. 4. Для обработчиков команд формы. 5. Такое же предназначение, как и в общих модулях [1.4.](https://v8std.ru/std/455/#14) ```bsl #Region Variables #EndRegion #Region FormEventHandlers // Enter code here. #EndRegion #Region FormHeaderItemsEventHandlers // Enter code here. #EndRegion #Region FormTableItemsEventHandlers // Enter code here. #EndRegion #Region FormCommandsEventHandlers // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion ``` #### 1.7. Шаблон модулей команд: #### Паттерн ```bsl #Область ОбработчикиСобытий // Код процедур и функций (1) #КонецОбласти #Область СлужебныеПроцедурыИФункции // Код процедур и функций (2) #КонецОбласти ``` 1. Содержит обработчик команды: `ОбработкаКоманды`. 2. Такое же предназначение, как и в общих модулях [1.4.](https://v8std.ru/std/455/#14) ```bsl #Region EventHandlers // Enter code here. #EndRegion #Region Private // Enter code here. #EndRegion ``` #### 1.8. Не оставляйте пустых областей в модуле. #### Проверки [#v8cs:module-region-empty](https://v8std.ru/diagnostics/v8-code-style/module-region-empty/) #### 2.1. Модуль может содержать заголовок модуля с описанием состава модуля. Описывайте в заголовке модулей форм параметры формы. #### Пример ```bsl //////////////////////////////////////////////////////////////////////////////// // Клиентские процедуры и функции общего назначения: // - для работы со списками в формах; // - для работы с журналом регистрации; // - для обработки действий пользователя в процессе редактирования // многострочного текста, например комментария в документах; // - прочее. // //////////////////////////////////////////////////////////////////////////////// ``` #### 2.2. Пример описания переменных: #### Пример ```bsl #Область ОписаниеПеременных Перем ВалютаУчета; Перем АдресПоддержки; ... #КонецОбласти ``` ```bsl #Region Variables Var PresentationCurrency; Var SupportEmail; ... #EndRegion ``` Все переменные в разделе глобальных переменных модуля должны быть прокомментированы. Комментировать лучше в той же строке, где объявлена переменная. - См. [#std454: Правила образования имен переменных](https://v8std.ru/std/454/) - См. [#std639: Использование переменных в программных модулях](https://v8std.ru/std/639/) #### 2.3. Программный интерфейс располагается сразу после описания переменных. Так методы будет проще найти тем, кто открыл модуль впервые. - См. [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### 2.4.1. Обработчики событий формы, команд и элементов формы располагайте до служебных методов. Читать код приятнее когда можно читать сверху вниз. #### 2.4.2. Старайтесь обработчики одного элемента формы располагать рядом. Придерживайтесь порядка следования в панели редактора формы. #### 2.4.3. Для каждого события создавайте свой обработчик. Если одинаковые действия ожидаются для событий разных элементов, то: - Создайте отдельную процедуру, выполняющую действие. - Для каждого элемент формы создайте свой обработчик с именем по умолчанию. - В каждом обработчике вызовите общую процедуру. #### Неправильно ```bsl &НаКлиенте Процедура ПоИсполнителюПриИзменении(Элемент) ПараметрыОтбора = Новый Соответствие(); ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору); ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю); УстановитьОтборСписка(Список, ПараметрыОтбора); КонецПроцедуры &НаКлиенте Процедура ПоАвторуПриИзменении(Элемент) ПоИсполнителюПриИзменении(Неопределено); КонецПроцедуры ``` #### Правильно ```bsl &НаКлиенте Процедура ПоИсполнителюПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаКлиенте Процедура ПоАвторуПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаСервере Процедура УстановитьОтбор() ПараметрыОтбора = Новый Соответствие(); ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору); ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю); УстановитьОтборСписка(Список, ПараметрыОтбора); КонецПроцедуры ``` Не вызывайте процедуры обработчики из кода напрямую. Оставьте их вызов только платформе. Смешение сценариев вызова неоправдано усложняет логику работы и в один прекрасный момент программа может стать очень сложной и развалиться. #### 2.5. Обработчики событий модулей объекта и менеджера объекта размещайте после раздела с программным интерфейсом, но до служебных процедур и функций модуля. #### 2.5.1. Располагайте обработчики в модулях объекта и менеджера по порядку следования в описании встроенного языка. #### 2.6. Служебные процедуры и функции модуля размещайте в модуле следом за обработчиками событий. Если общий модуль это часть некоторой подсистемы, здесь допустимо размещать служебные экспортные процедуры и функции, предназначенные только для вызова из других объектов данной подсистемы. Методы, связанные между собой по характеру или по логике работы, располагайте рядом. Не группируйте методы по месту исполнения, как на серверные, клиентские, функции без контекста. Такое упорядочивание усложняет понимание логики модуля отвлекая разработчика от ее реализации. #### 2.7. Пример инициализации переменных: #### Пример ```bsl #Область Инициализация АдресПоддержки = "v8@1c.ru"; ВыполнитьИнициализацию(); ... #КонецОбласти ``` ```bsl #Region Initialize SupportEmail = "v8@1c.ru"; Ctor(); ... #EndRegion ``` #### Проверки [#bslls:CodeOutOfRegion](https://v8std.ru/diagnostics/bslls/CodeOutOfRegion/) [#bslls:CommonModuleMissingAPI](https://v8std.ru/diagnostics/bslls/CommonModuleMissingAPI/) [#bslls:DuplicateRegion](https://v8std.ru/diagnostics/bslls/DuplicateRegion/) [#bslls:EmptyRegion](https://v8std.ru/diagnostics/bslls/EmptyRegion/) [#bslls:MissingVariablesDescription](https://v8std.ru/diagnostics/bslls/MissingVariablesDescription/) [#bslls:NonExportMethodsInApiRegion](https://v8std.ru/diagnostics/bslls/NonExportMethodsInApiRegion/) [#bslls:NonStandardRegion](https://v8std.ru/diagnostics/bslls/NonStandardRegion/) [#v8cs:invocation-form-event-handler](https://v8std.ru/diagnostics/v8-code-style/invocation-form-event-handler/) [#v8cs:module-structure-event-regions](https://v8std.ru/diagnostics/v8-code-style/module-structure-event-regions/) [#v8cs:module-structure-form-event-regions](https://v8std.ru/diagnostics/v8-code-style/module-structure-form-event-regions/) [#v8cs:module-structure-init-code-in-region](https://v8std.ru/diagnostics/v8-code-style/module-structure-init-code-in-region/) [#v8cs:module-structure-method-in-regions](https://v8std.ru/diagnostics/v8-code-style/module-structure-method-in-regions/) [#v8cs:module-structure-top-region](https://v8std.ru/diagnostics/v8-code-style/module-structure-top-region/) [#v8cs:module-structure-var-in-region](https://v8std.ru/diagnostics/v8-code-style/module-structure-var-in-region/) [#acc:239](https://v8std.ru/diagnostics/acc/239/) [#acc:240](https://v8std.ru/diagnostics/acc/240/) [#acc:241](https://v8std.ru/diagnostics/acc/241/) [#acc:273](https://v8std.ru/diagnostics/acc/273/) [#acc:274](https://v8std.ru/diagnostics/acc/274/) [#acc:286](https://v8std.ru/diagnostics/acc/286/) [#acc:425](https://v8std.ru/diagnostics/acc/425/) [#acc:426](https://v8std.ru/diagnostics/acc/426/) [#acc:427](https://v8std.ru/diagnostics/acc/427/) [#acc:428](https://v8std.ru/diagnostics/acc/428/) [#acc:429](https://v8std.ru/diagnostics/acc/429/) [#acc:430](https://v8std.ru/diagnostics/acc/430/) [#acc:1340](https://v8std.ru/diagnostics/acc/1340/) [#acc:1341](https://v8std.ru/diagnostics/acc/1341/) [#acc:1387](https://v8std.ru/diagnostics/acc/1387/) #### Источник https://its.1c.ru/db/v8std#content:455 ### std456 - Тексты модулей #std456 URL: https://v8std.ru/std/456/ Markdown URL: https://v8std.ru/std/456.md Source path: std/456.md Aliases: std456, #std456, std 456, стандарт 456 Related: - diagnostic:acc:1244 - diagnostic:acc:1339 - diagnostic:acc:1353 - diagnostic:acc:163 - diagnostic:acc:217 - diagnostic:acc:244 - diagnostic:acc:246 - diagnostic:acc:282 - diagnostic:acc:284 - diagnostic:acc:285 - diagnostic:acc:433 - diagnostic:bslls:ExcessiveAutoTestCheck - diagnostic:bslls:InvalidCharacterInFile - diagnostic:bslls:LineLength - diagnostic:bslls:OneStatementPerLine - diagnostic:bslls:SpaceAtStartComment - diagnostic:bslls:UnsafeFindByCode - diagnostic:bslls:UnusedLocalMethod - diagnostic:bslls:YoLetterUsage - standard:std437 - standard:std444 - standard:std454 - standard:std455 - standard:std469 External sources: https://its.1c.ru/db/v8std#content:456 ID: #std456 # Тексты модулей #### 1. Пишите код на русском языке. На английском языке можно писать имена веб-сервисов, названия их методов и параметров. Еще на английском можно писать название полей внешних структур данных. #### В стандарте не указано Вместо обращений к полям внешних структур на английском лучше обращаться к ключам через строковые литералы. Так будет очевидно, что внешний ключ именно внешний. #### Неправильно ```bsl Количество = Результат.Count; ``` #### Правильно ```bsl Количество = Результат["Count"]; ``` #### 1.1. Не используйте букву `ё` в коде программы. Используйте `ё` в том, что выводится пользователю: текстах, справке, если без `ё` будет неправильное прочтение слова. #### В стандарте не указано Если использовать букву `ё`, то очень сложно искать по кодовой базе. Придется искать во всех вариантах написания. #### Проверки [#bslls:YoLetterUsage](https://v8std.ru/diagnostics/bslls/YoLetterUsage/) #### 1.2. Не используйте в коде программы неразрывные пробелы ` ` и знак минус `-` `−` в других начертаниях (короткое `–` `–`, длинное тире `—` `—`). При копировании текста из офисных документов такие символы часто оказываются в тексте модулей и приводят к проблемам: - Не работает поиск фрагментов текста - Ошибается подсказка типов параметров процедур и функций в конфигураторе и в 1С:EDT - Минуса в выражениях приводят к синтаксической ошибке #### 2. Удаляйте мертвый код. Программа должна содержать только используемые процедуры и функции. Неиспользуемые - удалите. #### 3. Удалите закомментированный код и код связанный с процессом разработки (отладочный код, служебные отметки: #### Неправильно ```bsl // TODO: Сделать Процедура ПередУдалением(Отказ) // {{MRG[ <-> ] // }}MRG[ --> ] КонецПроцедуры ``` #### Неправильно ```bsl Процедура ПередУдалением(Отказ) // Если Истина Тогда // Сообщение("Для отладки"); // КонецЕсли; КонецПроцедуры ``` #### Неправильно ```bsl Процедура ПередУдалением(Отказ) Если Истина Тогда // Иванов: доделать КонецЕсли; КонецПроцедуры ``` #### Правильно Удалить обработчик **ПередУдалением** Не используйте комментарии в текстах запросов для патча запросов #### Неправильно ```bsl ТекстЗапроса = "ВЫБРАТЬ | Контрагенты.Ссылка КАК Ссылка |// ПОМЕСТИТЬ Контрагенты |ИЗ | Справочник.Контрагенты КАК Контрагенты" ; Если ВыгрузитьВоВременнуюТаблицу Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "// ПОМЕСТИТЬ", "ПОМЕСТИТЬ"); КонецЕсли; ``` [#std437: Оформление текстов запросов](https://v8std.ru/std/437/) #### 4. Пишите один оператор на одной строке. #### Правильно ```bsl НачальныйИндекс = 0; Индекс = 0; Результат = 0; ``` На одной строке несколько операторов можно писать для простых операторов присваивания #### Сомнительно, но ОК ```bsl НачальныйИндекс = 0; Индекс = 0; Результат = 0; ``` #### 5. Код программы оформляйте отступом. Для отступа используется табуляция, а не пробелы. Размер табуляции: 4 символа. В конфигураторе можно сменить размер табуляции. Код надо оформлять так, чтобы при смене размера табуляции выравнивание сохранялось. #### 5.1. С крайней левой позиции без отступов пишем: - операторы `Процедура`, `КонецПроцедуры`, `Функция`, `КонецФункции` - заголовки (описания) процедур и функций - объявление переменных модуля - код вне процедур и функций - директивы компилятора `&НаКлиенте`, `&НаСервере`... - аннотации `&Перед`, `&После`... - инструкции препроцессора `#Если Сервер Тогда`, `#Область`... #### В стандарте не указано Автоматическое форматирование платформы не выравнивает директивы препроцессора по левому краю. После автоформатирования придется довыравнивать руками. #### 5.2. Текст внутри блока процедур `НачатьТранзакцию()` и `ЗафиксироватьТранзакцию()` не сдвигается. #### 6. Длина строки: 120 символов. Табуляция считается за 4 символа. Строки длиннее 120 пишутся только в случае, когда перенос невозможен. #### В стандарте не указано Ограничение длины строк важно. Когда выполняем сравнение модулей, особенно для трехстороннего сравнения: приходится высматривать сразу три редактора кода. Даже широкие экраны не помогут при более 120 символах. [#std444: Перенос выражений](https://v8std.ru/std/444/) #### 7.1. Тексты комментариев должны составляться: - по правилам русского языка - в деловом стиле - быть эмоционально сдержанными - не содержать слов, не относящихся к функциональности программы #### В стандарте не указано Чтобы научиться писать хорошие комментарии прочитайте - Роберт Мартин, Чистый код, Глава 4. Комментарии - Стив Макконнелл, Совершенный код, Раздел 32. Самодокументирующийся код #### 7.2. Небольшие комментарии пишите в конце строки #### Правильно ```bsl НайденныеОшибки.Колонки.Добавить("Номер"); // для совместимости ``` #### 7.3. Большие комментарии или комментарии к фрагменту кода пишите перед кодом отдельной строкой. Текст выравнивайте по левому краю. Между символами комментария `//` и началом комментария должен быть пробел. #### Правильно ```bsl // Инициализируем переменные для выполнения расчетов, // которые выполняются далее по тексту модуля. ТекущаяДата = ОбщегоНазначения.ПолучитьРабочуюДату(); ТекущийГод = Год(ТекущаяДата); ТекущийМесяц = Месяц(ТекущаяДата); ТекущаяНеделя = НеделяГода(ТекущаяДата); ТекущийДень = День(ТекущаяДата); ``` #### 8. Тексты больших процедур и функций разбивайте на отдельные сворачиваемые области. Имена областей называются так же, как имена переменных из стандарта [правила образования имен переменных](https://v8std.ru/std/454/) #### См. также - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Проверки [#bslls:ExcessiveAutoTestCheck](https://v8std.ru/diagnostics/bslls/ExcessiveAutoTestCheck/) [#bslls:InvalidCharacterInFile](https://v8std.ru/diagnostics/bslls/InvalidCharacterInFile/) [#bslls:LineLength](https://v8std.ru/diagnostics/bslls/LineLength/) [#bslls:OneStatementPerLine](https://v8std.ru/diagnostics/bslls/OneStatementPerLine/) [#bslls:SpaceAtStartComment](https://v8std.ru/diagnostics/bslls/SpaceAtStartComment/) [#bslls:UnsafeFindByCode](https://v8std.ru/diagnostics/bslls/UnsafeFindByCode/) [#bslls:UnusedLocalMethod](https://v8std.ru/diagnostics/bslls/UnusedLocalMethod/) [#acc:163](https://v8std.ru/diagnostics/acc/163/) [#acc:217](https://v8std.ru/diagnostics/acc/217/) [#acc:244](https://v8std.ru/diagnostics/acc/244/) [#acc:246](https://v8std.ru/diagnostics/acc/246/) [#acc:282](https://v8std.ru/diagnostics/acc/282/) [#acc:284](https://v8std.ru/diagnostics/acc/284/) [#acc:285](https://v8std.ru/diagnostics/acc/285/) [#acc:433](https://v8std.ru/diagnostics/acc/433/) [#acc:1244](https://v8std.ru/diagnostics/acc/1244/) [#acc:1339](https://v8std.ru/diagnostics/acc/1339/) [#acc:1353](https://v8std.ru/diagnostics/acc/1353/) #### Источник https://its.1c.ru/db/v8std#content:456 ### std458 - Общие требования по локализации конфигурации #std458 URL: https://v8std.ru/std/458/ Markdown URL: https://v8std.ru/std/458.md Source path: std/458.md Aliases: std458, #std458, std 458, стандарт 458 Related: standard:std761, standard:std762, standard:std763, standard:std764, standard:std765, standard:std766, standard:std767, standard:std769, standard:std784 External sources: https://its.1c.ru/db/v8std#content:458 ID: #std458 # Общие требования по локализации конфигурации При разработке ориентируйтесь на сценарии, когда: - в конфигурации предусмотрено несколько языков интерфейса пользователя; - данные в базе вводятся на одном языке, который отличается от основного языка конфигурации (свойство метаданных `ОсновнойЯзык`). При этом стандарт не регламентирует: - ввод данных сразу на нескольких языках; - многоязычное представление метаданных, которые хранятся в данных (например, предопределенные элементы, дополнительные реквизиты и т.п.). #### См. также - [#std769: Поставка международной версии конфигурации](https://v8std.ru/std/769/) - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) - [#std763: Форматирование даты, числа, Булево: требования по локализации](https://v8std.ru/std/763/) - [#std764: Строковые константные выражения в коде: требования по локализации](https://v8std.ru/std/764/) - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) - [#std767: Регламентные задания: требования по локализации](https://v8std.ru/std/767/) - [#std766: Макеты: требования по локализации](https://v8std.ru/std/766/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник https://its.1c.ru/db/v8std#content:458 ### std459 - Использование значений, влияющих на поведение клиентского приложения #std459 URL: https://v8std.ru/std/459/ Markdown URL: https://v8std.ru/std/459.md Source path: std/459.md Aliases: std459, #std459, std 459, стандарт 459 Related: standard:std487, standard:std724 External sources: https://its.1c.ru/db/v8std#content:459 ID: #std459 # Использование значений, влияющих на поведение клиентского приложения #### 1. Если поведение многих форм или команд зависит от одних и тех же значений, для минимизации клиент-серверного взаимодействия используйте [#std724: общие модули с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) со свойством `Повторное использование возвращаемых значений = На время сеанса`. Такой подход применяйте, когда изменение этих значений в течение сеанса некритично, и в рамках сеанса можно использовать один раз полученное значение. #### 2. Функция общего модуля должна возвращать за один вызов сразу весь набор значений, которые нужны в разных сценариях. #### Пример ```bsl Настройки = НастройкиПодсистемыРегистрации(); ВремяНачала = Настройки.ВремяНачалаРабочегоДня; ВремяОкончания = Настройки.ВремяОкончанияРабочегоДня; ``` #### 3. Ограничивайте применение клиентских модулей с повторным использованием возвращаемых значений. Если данные влияют только на одну форму или небольшой набор форм, храните их в реквизитах формы и получайте в `ПриСозданииНаСервере`. Если от значения зависит поведение команд или большого числа форм, используйте подход с общим модулем и кешированием на сеанс. Не используйте переменные модуля управляемого приложения и модуля обычного приложения как способ уменьшения клиент-серверного взаимодействия. #### См. также - [#std487: Минимизация количества серверных вызовов и трафика](https://v8std.ru/std/487/) - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник https://its.1c.ru/db/v8std#content:459 ### std460 - Использование управляемого режима блокировки #std460 URL: https://v8std.ru/std/460/ Markdown URL: https://v8std.ru/std/460.md Source path: std/460.md Aliases: std460, #std460, std 460, стандарт 460 Related: diagnostic:acc:66, diagnostic:acc:67, diagnostic:v8cs:ql-using-for-update, standard:std648, standard:std659 External sources: http://kb.1c.ru/articleView.jsp?id=30, https://its.1c.ru/db/v8std#content:460 ID: #std460 # Использование управляемого режима блокировки В конфигурациях следует использовать управляемый режим блокировок (свойство конфигурации `Режим управления блокировкой данных` устанавливается в значение `Управляемый`) и учитывать его особенности. - чтение данных другими транзакциями будет невозможно только при несовместимых управляемых блокировках в текущей и других транзакциях; - явную управляемую блокировку нужно устанавливать перед чтением данных: - если считанные данные затем будут изменяться; - если нужно обеспечить неизменность считанных данных до конца транзакции; - при установке управляемой блокировки стремитесь блокировать только те записи, которые реально будут обрабатываться; - не следует применять конструкцию `ДЛЯ ИЗМЕНЕНИЯ`, так как в этом режиме она не имеет смысла. При работе в автоматическом режиме управления блокировками платформа 1С:Предприятие устанавливает высокий уровень изоляции на уровне СУБД, что позволяет исключить получение нецелостных или некорректных данных без специальных действий со стороны разработчика. Одновременно могут возникать избыточные блокировки на уровне СУБД. Они связаны с особенностями механизмов блокировок в самой СУБД и с тем, что СУБД не учитывает физический смысл и структуру объектов метаданных 1С:Предприятия. #### См. также - [#std648: Ответственное чтение данных](https://v8std.ru/std/648/) - [#std659: Общие сведения об избыточных блокировках](https://v8std.ru/std/659/) - Методика перевода приложений в управляемый режим блокировки: [Блокировки данных в 1С:Предприятии 8](http://kb.1c.ru/articleView.jsp?id=30) #### Проверки [#v8cs:ql-using-for-update](https://v8std.ru/diagnostics/v8-code-style/ql-using-for-update/) [#acc:66](https://v8std.ru/diagnostics/acc/66/) [#acc:67](https://v8std.ru/diagnostics/acc/67/) #### Источник https://its.1c.ru/db/v8std#content:460 ### std463 - Обработчик события ОбработкаПроверкиЗаполнения #std463 URL: https://v8std.ru/std/463/ Markdown URL: https://v8std.ru/std/463.md Source path: std/463.md Aliases: std463, #std463, std 463, стандарт 463 Related: standard:std464, standard:std465, standard:std478, standard:std686 External sources: https://its.1c.ru/db/v8std#content:463 ID: #std463 # Обработчик события ОбработкаПроверкиЗаполнения #### 1.1. В обработчике `ОбработкаПроверкиЗаполнения` модуля объекта выполняйте проверки корректности заполнения реквизитов объекта: - реквизитов шапки; - измерений и ресурсов; - реквизитов табличных частей; - других данных объекта, проверяемых до записи. #### 1.2. Используйте этот обработчик, когда обычной проверки на заполненность недостаточно: - значение реквизита зависит от других реквизитов; - обязательность заполнения зависит от условий или функциональных опций. Если проверка заполнения условная, в коде удаляйте такие реквизиты из массива `ПроверяемыеРеквизиты`. Рекомендуемая схема: - создать массив `НепроверяемыеРеквизиты`; - в процессе проверки добавлять в него имена реквизитов (и табличных частей), которые сейчас не нужно проверять; - в конце удалить эти реквизиты из `ПроверяемыеРеквизиты`. Не используйте альтернативные схемы. Иначе условные проверки скрываются от анализа свойства `Проверка заполнения`. #### Неправильно ```bsl Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) // Проверка значения реквизита на соответствие требованиям. Если Не ИННСоответствуетТребованиям(ИНН) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = НСтр("ru = 'ИНН задан неверно.'"); Сообщение.Поле = "ИНН"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; // Условная обязательность реквизита. Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда ПроверяемыеРеквизиты.Добавить("ИндивидуальныйПредприниматель"); КонецЕсли; КонецПроцедуры ``` #### Правильно ```bsl Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) НепроверяемыеРеквизиты = Новый Массив; // Проверка значения реквизита на соответствие требованиям. Если Не ИННСоответствуетТребованиям(ИНН) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = НСтр("ru = 'ИНН задан неверно.'"); Сообщение.Поле = "ИНН"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; НепроверяемыеРеквизиты.Добавить("ИНН"); КонецЕсли; // Условная обязательность реквизита. Если ЮрФизЛицо <> Перечисления.ЮрФизЛицо.ФизЛицо Тогда НепроверяемыеРеквизиты.Добавить("ИндивидуальныйПредприниматель"); КонецЕсли; УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты); КонецПроцедуры Процедура УдалитьНепроверяемыеРеквизитыИзМассива(МассивРеквизитов, МассивНепроверяемыхРеквизитов) Экспорт Для Каждого ЭлементМассива Из МассивНепроверяемыхРеквизитов Цикл ПорядковыйНомер = МассивРеквизитов.Найти(ЭлементМассива); Если ПорядковыйНомер <> Неопределено Тогда МассивРеквизитов.Удалить(ПорядковыйНомер); КонецЕсли; КонецЦикла; КонецПроцедуры ``` #### 1.3. Учитывайте, что `ОбработкаПроверкиЗаполнения` вызывается не при каждой записи объекта. Например, обработчик не вызывается при программной записи. #### 1.4. Если в конфигурации используется подсистема `Обмен данными` БСП, обработчик `ОбработкаПроверкиЗаполнения` может вызываться при проведении документов после загрузки из сообщения обмена. Чтобы отключать отдельные проверки в этом режиме, анализируйте `ДополнительныеСвойства.ОтложенноеПроведение`. ## Проверки, выполняемые в и вне транзакции записи объекта #### 2.1. Проверки в `ОбработкаПроверкиЗаполнения` выполняются вне транзакции записи. Это эффективно: при ошибке заполнения операция прерывается до записи в базу. При таких проверках помните, что новое состояние объекта еще не записано. Если нужна проверка по данным системы с опорой на текущий объект, используйте сохранение данных во временные таблицы. #### 2.2. Не размещайте в `ОбработкаПроверкиЗаполнения` проверки, которые должны гарантировать целостность объекта и зависимых данных (например, движений). Для таких проверок используйте обработчики, работающие в транзакции записи: - [#std464: `ПередЗаписью`](https://v8std.ru/std/464/) - [#std465: `ПриЗаписи`](https://v8std.ru/std/465/) - `ОбработкаПроведения` (для документов). Для транзакционных проверок выделяют два случая: #### 2.2.1. Проверка состояния движений документов оперативного учета. Проверку остатка ресурса в транзакции записи имеет смысл делать только если все документы, меняющие этот ресурс, проверяют его так же. Если хотя бы один документ меняет ресурс без проверки, такие проверки обычно нужно выносить из транзакции. Исключения допустимы, но должны быть обоснованы. #### 2.2.2. Проверка состояния других объектов базы, на которые ссылается текущий объект. Если правило может быть нарушено при записи разных объектов, проверка должна быть симметричной. Например, если при записи подразделения проверяется, что выбранный руководитель имеет должность `Руководитель`, то при записи сотрудника должна быть встречная проверка этого же правила. Иначе правило следует проверять вне транзакции у обоих объектов. #### См. также - [#std478: Подсказка и проверка заполнения](https://v8std.ru/std/478/) - [#std464: Обработчик события ПередЗаписью](https://v8std.ru/std/464/) - [#std465: Обработчик события ПриЗаписи](https://v8std.ru/std/465/) - [#std686: Работа с параметром "Отказ" в обработчиках событий](https://v8std.ru/std/686/) #### Источник https://its.1c.ru/db/v8std#content:463 ### std464 - Обработчик события ПередЗаписью #std464 URL: https://v8std.ru/std/464/ Markdown URL: https://v8std.ru/std/464.md Source path: std/464.md Aliases: std464, #std464, std 464, стандарт 464 Related: diagnostic:acc:75, diagnostic:bslls:DataExchangeLoading, diagnostic:v8cs:data-exchange-load, standard:std463, standard:std773 External sources: https://its.1c.ru/db/v8std#content:464 ID: #std464 # Обработчик события ПередЗаписью #### 1. В обработчике `ПередЗаписью` выполняйте: - заполнение реквизитов объекта (набора записей, значения константы); - проверку правильности заполнения; - проверки связанности состояния объекта с внешними данными; - работу со «старыми» значениями реквизитов, уже сохраненными в базе. Этот обработчик особенно полезен при редактировании уже записанных объектов. #### 2. Все действия в обработчике `ПередЗаписью` выполняйте только после проверки `ОбменДанными.Загрузка`. #### Пример ```bsl Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // Предпроверки и дозаполнение реквизитов объекта. ... КонецПроцедуры ``` #### См. также - [#std773: Использование признака ОбменДанными.Загрузка в обработчиках событий объекта](https://v8std.ru/std/773/) - [#std463: Проверки, выполняемые в и вне транзакции записи объекта](https://v8std.ru/std/463/) #### Проверки [#bslls:DataExchangeLoading](https://v8std.ru/diagnostics/bslls/DataExchangeLoading/) [#v8cs:data-exchange-load](https://v8std.ru/diagnostics/v8-code-style/data-exchange-load/) [#acc:75](https://v8std.ru/diagnostics/acc/75/) #### Источник https://its.1c.ru/db/v8std#content:464 ### std465 - Обработчик события ПриЗаписи #std465 URL: https://v8std.ru/std/465/ Markdown URL: https://v8std.ru/std/465.md Source path: std/465.md Aliases: std465, #std465, std 465, стандарт 465 Related: diagnostic:acc:75, diagnostic:bslls:DataExchangeLoading, diagnostic:v8cs:data-exchange-load, standard:std463, standard:std773 External sources: https://its.1c.ru/db/v8std#content:465 ID: #std465 # Обработчик события ПриЗаписи #### 1. В обработчике `ПриЗаписи` модуля объекта (набора записей, значения константы) выполняйте действия, связанные с уже записанным объектом: - запись связанных данных в другие объекты конфигурации; - другие действия после изменения объекта. Не изменяйте данные самого записываемого объекта. К моменту вызова `ПриЗаписи` объект уже записан в базе данных. #### 2. Все действия в обработчике `ПриЗаписи` выполняйте только после проверки `ОбменДанными.Загрузка`. #### Пример ```bsl Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // Постобработка после записи объекта. ОбновитьСвязанныеДанные(); КонецПроцедуры ``` #### См. также - [#std463: Проверки, выполняемые в и вне транзакции записи объекта](https://v8std.ru/std/463/) - [#std773: Использование признака ОбменДанными.Загрузка в обработчиках событий объекта](https://v8std.ru/std/773/) #### Проверки [#bslls:DataExchangeLoading](https://v8std.ru/diagnostics/bslls/DataExchangeLoading/) [#v8cs:data-exchange-load](https://v8std.ru/diagnostics/v8-code-style/data-exchange-load/) [#acc:75](https://v8std.ru/diagnostics/acc/75/) #### Источник https://its.1c.ru/db/v8std#content:465 ### std466 - Обработчик события ПриКопировании #std466 URL: https://v8std.ru/std/466/ Markdown URL: https://v8std.ru/std/466.md Source path: std/466.md Aliases: std466, #std466, std 466, стандарт 466 Related: нет External sources: https://its.1c.ru/db/v8std#content:466 ID: #std466 # Обработчик события ПриКопировании В обработчике модуля объекта `ПриКопировании` выполняются действия, связанные с созданием нового объекта путем копирования. В частности, здесь очищают реквизиты, значения которых не должны сохраняться в новом объекте после копирования. #### Источник https://its.1c.ru/db/v8std#content:466 ### std467 - Общие требования к конфигурации #std467 URL: https://v8std.ru/std/467/ Markdown URL: https://v8std.ru/std/467.md Source path: std/467.md Aliases: std467, #std467, std 467, стандарт 467 Related: - diagnostic:acc:1026 - diagnostic:acc:1027 - diagnostic:acc:1028 - diagnostic:acc:1030 - diagnostic:acc:1032 - diagnostic:acc:1033 - diagnostic:acc:1034 - diagnostic:acc:1035 - diagnostic:acc:1036 - diagnostic:acc:1037 - diagnostic:acc:1038 - diagnostic:acc:1108 - diagnostic:acc:1349 - diagnostic:acc:1350 - diagnostic:acc:1351 - diagnostic:acc:1352 - diagnostic:acc:1374 - diagnostic:acc:216 - diagnostic:acc:235 - diagnostic:acc:265 - diagnostic:acc:277 - diagnostic:acc:278 - diagnostic:acc:299 - diagnostic:acc:321 - diagnostic:acc:323 - diagnostic:acc:324 - diagnostic:acc:355 - diagnostic:acc:376 - diagnostic:acc:377 - diagnostic:acc:379 - diagnostic:acc:380 - diagnostic:acc:470 - diagnostic:acc:524 - diagnostic:acc:525 - diagnostic:acc:526 - diagnostic:acc:527 - diagnostic:acc:531 - diagnostic:acc:557 - diagnostic:acc:558 - diagnostic:acc:559 - diagnostic:acc:561 - diagnostic:acc:562 - diagnostic:acc:563 - diagnostic:acc:564 - diagnostic:acc:565 - diagnostic:acc:566 - diagnostic:acc:567 - diagnostic:acc:568 - diagnostic:acc:569 - diagnostic:acc:570 - diagnostic:acc:571 - diagnostic:acc:572 - diagnostic:acc:573 - diagnostic:acc:574 - diagnostic:acc:580 - diagnostic:acc:581 - diagnostic:acc:8 - diagnostic:acc:82 - diagnostic:acc:87 - diagnostic:bslls:OrdinaryAppSupport - diagnostic:bslls:WrongDataPathForFormElements - diagnostic:v8cs:form-module-missing-pragma - diagnostic:v8cs:ql-like-expression-with-field - diagnostic:v8cs:redundant-export-method - standard:std469 - standard:std492 - standard:std534 - standard:std677 - standard:std679 - standard:std723 - standard:std759 External sources: https://v8.1c.ru/tekhnologii/sistemnye-trebovaniya-1s-predpriyatiya-8/, https://its.1c.ru/db/v83doc/bookmark/dev/TI000001285, https://its.1c.ru/db/v8std#content:467 ID: #std467 # Общие требования к конфигурации #### 1.1. Используйте только штатные и документированные возможности платформы. Если вы нашли какой-то трюк, который не описан в документации - не используйте его. Нет никаких гарантий, что этот трюк будет работать в следующей версии платформы. #### 1.2. Платформа может работать в различных СУБД, операционных системах, браузерах. Рассчитывайте на работу в разной среде. - [#std723: Требуется поддерживать работу в Linux и macOS](https://v8std.ru/std/723/) - [Системные требования 1С:Предприятия 8](https://v8.1c.ru/tekhnologii/sistemnye-trebovaniya-1s-predpriyatiya-8/) - [Приложение 7. Особенности поведения системы в различных режимах](https://its.1c.ru/db/v83doc/bookmark/dev/TI000001285) - [Приложение 8. Особенности работы с различными СУБД](https://its.1c.ru/db/v83doc/bookmark/dev/TI000001285) #### 1.3. Исправляйте ошибки обнаруженные при проверке конфигурации. Чтобы запустить статический анализ, откройте конфигуратор и перейдите в меню `Конфигурация` – `Проверка конфигурации...`. Исключения: - [#std492: Обработчики событий модуля формы, подключаемые из кода](https://v8std.ru/std/492/) - [#std679: Ограничение на установку признака Вызов сервера у общих модулей](https://v8std.ru/std/679/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### 1.4. Поддержите работу в режиме толстого клиента обычного приложения в минимальном виде для администраторов. Старые технологии могли использоваться во внешних обработках или отчетах, которые внедрялись много лет назад. Отказаться от них совсем будет нечестно по отношению к администраторам. Администраторы могут рассчитывать что их старые инструменты запустятся, как и раньше. - Переключите свойство конфигурации `Использовать управляемые формы в обычном приложении` в `Истина`. - Переключите свойство конфигурации `Использовать обычные формы в управляемом режиме` в `Ложь`. - Создавайте общие модули по стандарту [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) - Пользуйтесь режимом редактирования для режимов запуска `управляемое и обычное приложение`. Включите в меню `Сервис` – `Параметры` – закладка `Общие`. #### 1.5. Не делайте пользовательские интерфейсы сильно отличающимися от интерфейса по умолчанию. Это может пугать пользователей. #### 2.1. Пишите тексты грамотно. Не допускайте ошибок. #### 2.2. Не оставляйте после себя мертвый код и мертвые объекты метаданных. Все, что не используется - удалите. #### 2.3. Метаданные верхнего уровня сортируйте по имени. Подчиненные метаданные, реквизиты, измерения, формы - располагайте в соответствии со своим проектным решением. Исключения: - Общим реквизитам разделителям установите порядок в дереве метаданных в зависимости от требуемого порядка установки параметров сеанса. [#std677: Использование общих реквизитов](https://v8std.ru/std/677/) - Устаревшие объекты размещайте в конце ветки метаданных. [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) #### Проверки [#bslls:OrdinaryAppSupport](https://v8std.ru/diagnostics/bslls/OrdinaryAppSupport/) [#bslls:WrongDataPathForFormElements](https://v8std.ru/diagnostics/bslls/WrongDataPathForFormElements/) [#v8cs:form-module-missing-pragma](https://v8std.ru/diagnostics/v8-code-style/form-module-missing-pragma/) [#v8cs:ql-like-expression-with-field](https://v8std.ru/diagnostics/v8-code-style/ql-like-expression-with-field/) [#v8cs:redundant-export-method](https://v8std.ru/diagnostics/v8-code-style/redundant-export-method/) [#acc:8](https://v8std.ru/diagnostics/acc/8/) [#acc:82](https://v8std.ru/diagnostics/acc/82/) [#acc:87](https://v8std.ru/diagnostics/acc/87/) [#acc:216](https://v8std.ru/diagnostics/acc/216/) [#acc:235](https://v8std.ru/diagnostics/acc/235/) [#acc:265](https://v8std.ru/diagnostics/acc/265/) [#acc:277](https://v8std.ru/diagnostics/acc/277/) [#acc:278](https://v8std.ru/diagnostics/acc/278/) [#acc:299](https://v8std.ru/diagnostics/acc/299/) [#acc:321](https://v8std.ru/diagnostics/acc/321/) [#acc:323](https://v8std.ru/diagnostics/acc/323/) [#acc:324](https://v8std.ru/diagnostics/acc/324/) [#acc:355](https://v8std.ru/diagnostics/acc/355/) [#acc:376](https://v8std.ru/diagnostics/acc/376/) [#acc:377](https://v8std.ru/diagnostics/acc/377/) [#acc:379](https://v8std.ru/diagnostics/acc/379/) [#acc:380](https://v8std.ru/diagnostics/acc/380/) [#acc:470](https://v8std.ru/diagnostics/acc/470/) [#acc:524](https://v8std.ru/diagnostics/acc/524/) [#acc:525](https://v8std.ru/diagnostics/acc/525/) [#acc:526](https://v8std.ru/diagnostics/acc/526/) [#acc:527](https://v8std.ru/diagnostics/acc/527/) [#acc:531](https://v8std.ru/diagnostics/acc/531/) [#acc:557](https://v8std.ru/diagnostics/acc/557/) [#acc:558](https://v8std.ru/diagnostics/acc/558/) [#acc:559](https://v8std.ru/diagnostics/acc/559/) [#acc:561](https://v8std.ru/diagnostics/acc/561/) [#acc:562](https://v8std.ru/diagnostics/acc/562/) [#acc:563](https://v8std.ru/diagnostics/acc/563/) [#acc:564](https://v8std.ru/diagnostics/acc/564/) [#acc:565](https://v8std.ru/diagnostics/acc/565/) [#acc:566](https://v8std.ru/diagnostics/acc/566/) [#acc:567](https://v8std.ru/diagnostics/acc/567/) [#acc:568](https://v8std.ru/diagnostics/acc/568/) [#acc:569](https://v8std.ru/diagnostics/acc/569/) [#acc:570](https://v8std.ru/diagnostics/acc/570/) [#acc:571](https://v8std.ru/diagnostics/acc/571/) [#acc:572](https://v8std.ru/diagnostics/acc/572/) [#acc:573](https://v8std.ru/diagnostics/acc/573/) [#acc:574](https://v8std.ru/diagnostics/acc/574/) [#acc:580](https://v8std.ru/diagnostics/acc/580/) [#acc:581](https://v8std.ru/diagnostics/acc/581/) [#acc:1026](https://v8std.ru/diagnostics/acc/1026/) [#acc:1027](https://v8std.ru/diagnostics/acc/1027/) [#acc:1028](https://v8std.ru/diagnostics/acc/1028/) [#acc:1030](https://v8std.ru/diagnostics/acc/1030/) [#acc:1032](https://v8std.ru/diagnostics/acc/1032/) [#acc:1033](https://v8std.ru/diagnostics/acc/1033/) [#acc:1034](https://v8std.ru/diagnostics/acc/1034/) [#acc:1035](https://v8std.ru/diagnostics/acc/1035/) [#acc:1036](https://v8std.ru/diagnostics/acc/1036/) [#acc:1037](https://v8std.ru/diagnostics/acc/1037/) [#acc:1038](https://v8std.ru/diagnostics/acc/1038/) [#acc:1108](https://v8std.ru/diagnostics/acc/1108/) [#acc:1349](https://v8std.ru/diagnostics/acc/1349/) [#acc:1350](https://v8std.ru/diagnostics/acc/1350/) [#acc:1351](https://v8std.ru/diagnostics/acc/1351/) [#acc:1352](https://v8std.ru/diagnostics/acc/1352/) [#acc:1374](https://v8std.ru/diagnostics/acc/1374/) #### Источник https://its.1c.ru/db/v8std#content:467 ### std469 - Правила создания общих модулей #std469 URL: https://v8std.ru/std/469/ Markdown URL: https://v8std.ru/std/469.md Source path: std/469.md Aliases: std469, #std469, std 469, стандарт 469 Related: - diagnostic:acc:1245 - diagnostic:acc:125 - diagnostic:acc:363 - diagnostic:acc:547 - diagnostic:acc:73 - diagnostic:acc:80 - diagnostic:acc:83 - diagnostic:acc:84 - diagnostic:acc:85 - diagnostic:acc:90 - diagnostic:bslls:CommonModuleInvalidType - diagnostic:bslls:CommonModuleNameCached - diagnostic:bslls:CommonModuleNameClient - diagnostic:bslls:CommonModuleNameClientServer - diagnostic:bslls:CommonModuleNameFullAccess - diagnostic:bslls:CommonModuleNameGlobal - diagnostic:bslls:CommonModuleNameGlobalClient - diagnostic:bslls:CommonModuleNameServerCall - diagnostic:bslls:CommonModuleNameWords - diagnostic:v8cs:common-module-name-cached - diagnostic:v8cs:common-module-name-client-cached - diagnostic:v8cs:common-module-name-full-access - diagnostic:v8cs:common-module-name-global-client - diagnostic:v8cs:common-module-name-server-call - diagnostic:v8cs:common-module-name-server-call-cached - diagnostic:v8cs:extension-md-object-prefix - standard:std455 - standard:std456 - standard:std474 - standard:std543 - standard:std553 - standard:std644 - standard:std679 External sources: - https://its.1c.ru/db/v8std/content/629/hdoc - https://its.1c.ru/db/v8std/content/440/hdoc - https://its.1c.ru/db/v8std/content/439/hdoc - https://its.1c.ru/db/v8std/content/769/hdoc - https://its.1c.ru/db/v8std#content:469 ID: #std469 # Правила создания общих модулей #### 1.1. Общие модули создавайте для процедур и функций, объединенных по одному признаку. Обычно в один модуль попадает код: - одной [подсистемы конфигурации](https://v8std.ru/std/543/) - или одного функционального назначения (например, работа со строками, общие сервисные функции). #### 1.2. При разработке общих модулей выбирайте один из четырех контекстов выполнения. #### Серверный Свойства: - [ ] `Клиент (управляемое приложение)` - [x] `Сервер` - [x] `Внешнее соединение` - [x] `Клиент (обычное приложение)` - [ ] `Вызов сервера` Назначение: внутренняя серверная бизнес-логика, недоступная клиентскому коду. Пример имени: `ОбщегоНазначения` (или `ОбщегоНазначенияСервер`). #### Серверный для вызова с клиента Свойства: - [ ] `Клиент (управляемое приложение)` - [x] `Сервер` - [ ] `Внешнее соединение` - [ ] `Клиент (обычное приложение)` - [x] `Вызов сервера` Назначение: серверные процедуры и функции, доступные из клиентского кода. Пример имени: `ОбщегоНазначенияВызовСервера`. #### Клиентский Свойства: - [x] `Клиент (управляемое приложение)` - [ ] `Сервер` - [ ] `Внешнее соединение` - [x] `Клиент (обычное приложение)` - [ ] `Вызов сервера` Назначение: клиентская бизнес-логика. Пример имени: `ОбщегоНазначенияКлиент` (или `ОбщегоНазначенияГлобальный`). #### Клиент-серверный Свойства: - [x] `Клиент (управляемое приложение)` - [x] `Сервер` - [x] `Внешнее соединение` - [x] `Клиент (обычное приложение)` - [ ] `Вызов сервера` Назначение: единый код, одинаково выполняемый на клиенте и сервере. Пример имени: `ОбщегоНазначенияКлиентСервер`. #### 2.1. **Серверные общие модули** используйте для внутренней серверной бизнес-логики, которая недоступна клиентскому коду. Модули должны быть доступны в управляемом приложении, обычном приложении и внешнем соединении. - [ ] `Вызов сервера` выключен чтобы обеспечить корректный вызов процедур и функций, которые работают с мутабельными типами (`СправочникОбъект`, `ДокументОбъект` и т.п.). Типовые случаи: - обработчики подписок на события, принимающие объект; - серверные процедуры и функции, которым объект передается из модулей объектов, подписок на события и аналогичных серверных сценариев. Именуйте такие модули по [общим правилам именования](https://v8std.ru/std/474/) #### Примеры `РаботаСФайлами`, `FilesOperations`. Если возможен конфликт имен с глобальным контекстом, допускается постфикс `Сервер` (`Server`). #### Примеры `РегламентныеЗаданияСервер`, `ScheduledJobsServer`. #### 2.2. **Серверные общие модули для вызова с клиента** содержат серверные процедуры и функции, которые образуют клиентский API сервера. - [x] `Вызов сервера` включен - [ ] `Внешнее соединение` выключен - [ ] `Клиент (обычное приложение)` выключен Именуйте по [общим правилам именования](https://v8std.ru/std/474/) с обязательным постфиксом `ВызовСервера` (`ServerCall`). #### Примеры `РаботаСФайламиСлужебныйВызовСервера`, `FilesOperationsInternalServerCall`. Экспортные процедуры и функции в таких модулях не должны принимать мутабельные типы (`СправочникОбъект`, `ДокументОбъект` и т.п.), потому что их нельзя передавать между клиентом и сервером. #### Проверки [#v8cs:common-module-name-cached](https://v8std.ru/diagnostics/v8-code-style/common-module-name-cached/) [#v8cs:common-module-name-client-cached](https://v8std.ru/diagnostics/v8-code-style/common-module-name-client-cached/) [#v8cs:common-module-name-server-call-cached](https://v8std.ru/diagnostics/v8-code-style/common-module-name-server-call-cached/) [#v8cs:common-module-name-server-call](https://v8std.ru/diagnostics/v8-code-style/common-module-name-server-call/) [#v8cs:extension-md-object-prefix](https://v8std.ru/diagnostics/v8-code-style/extension-md-object-prefix/) #### См. также - [#std679: Ограничение на установку признака «Вызов сервера» у общих модулей](https://v8std.ru/std/679/) - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### 2.3. **Клиентские общие модули** содержат клиентскую бизнес-логику. - [x] `Клиент (управляемое приложение)` - [x] `Клиент (обычное приложение)` Исключения допустимы, если код должен быть доступен только в одном режиме (только управляемое, только обычное, только внешнее соединение). Используйте постфикс `Клиент` (`Client`). #### Примеры `РаботаСФайламиКлиент`, `FilesOperationsClient`. См. также: [минимизация кода, выполняемого на клиенте](https://its.1c.ru/db/v8std/content/629/hdoc). #### 2.4. Чтобы [избежать дублирования кода](https://its.1c.ru/db/v8std/content/440/hdoc), используйте **клиент-серверные общие модули** для процедур и функций, чей код одинаков на сервере и на клиенте. - [ ] `Вызов сервера` выключен Используйте постфикс `КлиентСервер` (`ClientServer`). #### Примеры `РаботаСФайламиКлиентСервер`, `FilesOperationsClientServer`. Если в таком модуле появляется ветвление клиент/сервер, не используйте для этого инструкции препроцессора. Разделяйте отличающуюся функциональность по модулям соответствующего типа (по правилам п. [2.1](https://v8std.ru/std/469/#21) и [2.3](https://v8std.ru/std/469/#23)) Такой подход повышает модульность, упрощает контроль клиент-серверного взаимодействия и снижает риск ошибок из-за различий клиентского и серверного кода. Подробнее: [Использование директив компиляции и инструкций препроцессора](https://its.1c.ru/db/v8std/content/439/hdoc). Особый случай смешанных модулей:, где клиентская и серверная логика осознанно расположены в одном модуле. #### 3.1. Имена общих модулей формируйте по общим правилам именования. Название модуля должно совпадать с названием подсистемы или механизма, который он реализует. Избегайте общих слов: - `Процедуры`; - `Функции`; - `Обработчики`; - `Модуль`; - `Функциональность`. Используйте такие слова только в исключительных случаях, когда они реально уточняют назначение. Чтобы различать модули одной подсистемы в разных контекстах, применяйте постфиксы из пп. [2.1](https://v8std.ru/std/469/#21)-[2.4](https://v8std.ru/std/469/#24) #### 3.2. Дополнительно к базовым постфиксам допускаются уточняющие постфиксы. #### 3.2.1. Для глобальных модулей используйте постфикс `Глобальный` (`Global`). Постфикс `Клиент` в этом случае не добавляйте. Свойства: - [x] `Глобальный` #### Примеры `РаботаСФайламиСлужебныйГлобальный`, `FilesOperationsInternalGlobal`. #### Проверки [#v8cs:common-module-name-global-client](https://v8std.ru/diagnostics/v8-code-style/common-module-name-global-client/) #### 3.2.2. Для модулей с признаком `Привилегированный` используйте постфикс `ПолныеПрава` (`FullAccess`). Свойства: - [x] `Привилегированный` #### Примеры `РаботаСФайламиСлужебныйПолныеПрава`, `FilesOperationsInternalFullAccess`. #### Проверки [#v8cs:common-module-name-full-access](https://v8std.ru/diagnostics/v8-code-style/common-module-name-full-access/) #### 3.2.3. Для модулей с функциями повторного использования возвращаемых значений используйте постфиксы: - `ПовтИсп` (`Cached`) — для серверного варианта; - `КлиентПовтИсп` (`ClientCached`) — для клиентского варианта. Свойства: - [x] `Повторное использование возвращаемых значений` #### Примеры `РаботаСФайламиСлужебныйКлиентПовтИсп`, `FilesOperationsInternalClientCached`. #### См. также - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### 3.2.4. В библиотечных конфигурациях для модулей, чью реализацию допускается изменять, используйте постфиксы: - `Переопределяемый` (`Overridable`); - `КлиентПереопределяемый` (`ClientOverridable`). #### Примеры `РаботаСФайламиКлиентПереопределяемый`, `FilesOperationsClientOverridable`. #### См. также - [#std553: Переопределяемые и поставляемые объекты библиотеки](https://v8std.ru/std/553/) #### 3.2.5. В [локализуемых конфигурациях](https://its.1c.ru/db/v8std/content/769/hdoc), которые выпускаются для разных стран и регионов, модули национальной специфики именуйте с постфиксами: - `Локализация` (`Localization`); - `КлиентЛокализация` (`ClientLocalization`). #### Примеры `ЭлектроннаяПодписьСлужебныйЛокализация`, `ElectronicSignatureInternalLocalization`. #### См. также - [#std456: Тексты модулей](https://v8std.ru/std/456/) - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Проверки [#bslls:CommonModuleInvalidType](https://v8std.ru/diagnostics/bslls/CommonModuleInvalidType/) [#bslls:CommonModuleNameCached](https://v8std.ru/diagnostics/bslls/CommonModuleNameCached/) [#bslls:CommonModuleNameClientServer](https://v8std.ru/diagnostics/bslls/CommonModuleNameClientServer/) [#bslls:CommonModuleNameClient](https://v8std.ru/diagnostics/bslls/CommonModuleNameClient/) [#bslls:CommonModuleNameFullAccess](https://v8std.ru/diagnostics/bslls/CommonModuleNameFullAccess/) [#bslls:CommonModuleNameGlobalClient](https://v8std.ru/diagnostics/bslls/CommonModuleNameGlobalClient/) [#bslls:CommonModuleNameGlobal](https://v8std.ru/diagnostics/bslls/CommonModuleNameGlobal/) [#bslls:CommonModuleNameServerCall](https://v8std.ru/diagnostics/bslls/CommonModuleNameServerCall/) [#bslls:CommonModuleNameWords](https://v8std.ru/diagnostics/bslls/CommonModuleNameWords/) [#acc:73](https://v8std.ru/diagnostics/acc/73/) [#acc:80](https://v8std.ru/diagnostics/acc/80/) [#acc:83](https://v8std.ru/diagnostics/acc/83/) [#acc:84](https://v8std.ru/diagnostics/acc/84/) [#acc:85](https://v8std.ru/diagnostics/acc/85/) [#acc:90](https://v8std.ru/diagnostics/acc/90/) [#acc:125](https://v8std.ru/diagnostics/acc/125/) [#acc:363](https://v8std.ru/diagnostics/acc/363/) [#acc:547](https://v8std.ru/diagnostics/acc/547/) [#acc:1245](https://v8std.ru/diagnostics/acc/1245/) #### Источник https://its.1c.ru/db/v8std#content:469 ### std470 - Использование функциональных опций #std470 URL: https://v8std.ru/std/470/ Markdown URL: https://v8std.ru/std/470.md Source path: std/470.md Aliases: std470, #std470, std 470, стандарт 470 Related: standard:std491, standard:std724 External sources: https://its.1c.ru/db/v8std#content:470 ID: #std470 # Использование функциональных опций #### 1.1. Если часть функциональности конфигурации может быть необязательной, управляйте ее доступностью через функциональные опции. Значения функциональных опций храните в данных информационной базы (например, в константах). #### Пример настройки для опционального версионирования - Создать функциональную опцию `ИспользоватьВерсионированиеОбъектов`. - Создать константу `ИспользоватьВерсионированиеОбъектов` типа `Булево`. - В свойстве `Хранение` функциональной опции указать эту константу. После этого объекты конфигурации можно включать в состав функциональной опции, а в коде использовать `ПолучитьФункциональнуюОпцию()`: ```bsl ИспользуетсяМеханизмВерсионирования = ПолучитьФункциональнуюОпцию("ИспользоватьВерсионированиеОбъектов"); ``` Функциональные опции автоматически влияют на доступность элементов интерфейса. Также они могут управлять бизнес-логикой, и не только для типа `Булево`. #### 1.2. Доступность функциональности можно задавать не только для всей базы, но и по контексту (например, по организации). #### Пример параметризованной функциональной опции Для управления сложным учетом НДС по организациям: - создать функциональную опцию `УчетнаяПолитикаСложныйУчетНДС`; - создать параметр функциональной опции `Организация`; - создать регистр сведений `УчетнаяПолитикаНалоговыйУчет` с измерением `Организация` и нужными ресурсами; - в свойстве `Хранение` функциональной опции указать ресурс `СложныйУчетНДС`; - для параметра `Организация` в свойстве `Использование` указать измерение `Организация` регистра `УчетнаяПолитикаНалоговыйУчет`. #### Пример структуры хранения Изображение: Пример регистра сведений для хранения функциональной опции (470.option-storage-example.jpg) Чтобы значение опции соответствовало контексту формы, устанавливайте параметры функциональных опций формы: ```bsl УстановитьПараметрыФункциональныхОпцийФормы( Новый Структура("Организация", <ТребуемаяОрганизация>)); ``` Для управления доступностью кода по такой опции получайте значения с параметрами: ```bsl ПараметрыУчетнойПолитики = Новый Структура("УчетнаяПолитикаОрганизация", <ТребуемаяОрганизация>); СложныйУчетНДС = ПолучитьФункциональнуюОпцию("УчетнаяПолитикаСложныйУчетНДС", ПараметрыУчетнойПолитики); МоментОпределенияНалоговойБазыНДС = ПолучитьФункциональнуюОпцию( "УчетнаяПолитикаМоментОпределенияНалоговойБазыНДС", ПараметрыУчетнойПолитики); ``` #### Примечание Приведенный вариант не является единственным. Для сложных сценариев сверяйтесь с документацией платформы `1С:Предприятие`. #### 1.3. Не используйте функциональные опции не по назначению. - Не создавайте их только для видимости элементов одной конкретной формы. Функциональные опции управляют доступностью функциональности в конфигурации целиком. - Не используйте их для оптимизации доступа к данным (как серверное хранилище значений). Для этого используйте [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) ## Установка и получение значений функциональных опций #### 2.1. Платформа не предоставляет отдельного механизма установки функциональных опций. Значение функциональной опции задается изменением хранимых данных: констант, элементов справочников или записей регистров сведений. В конфигурации нужно реализовать соответствующий интерфейс настройки. #### 2.2. Для параметризованных опций учитывайте правила вычисления значения: - если записи, соответствующей параметру, нет, опция считается выключенной; - если подходящих записей несколько, итоговое значение складывается по `ИЛИ`. #### 2.3. Если опция хранится в ресурсе периодического регистра сведений, значение берется через срез последних. Если нужно получать значение на другую дату, устанавливайте параметр функциональной опции `Период` типа `Дата`: ```bsl УстановитьПараметрыФункциональныхОпцийФормы( Новый Структура("Организация, Период", <ТребуемаяОрганизация>, <ТребуемаяДата>)); ``` При этом: - значение `Период` предварительно приводите к интервалу периодичности регистра (для выполнения [п. 2.5](https://v8std.ru/std/470/#25)) - параметр `Период` в метаданных не создавайте, он предоставляется платформой автоматически. ```bsl НачалоМесяца(<ТребуемаяДата>) ``` #### 2.4. Изменение значения функциональной опции не обновляет командный интерфейс автоматически. После изменения вызывайте `ОбновитьИнтерфейс`. #### 2.5. Значения функциональных опций кешируются на сервере. Слишком большой кеш может ухудшить производительность. Не параметризуйте функциональные опции данными с очень большим числом значений (например, конкретным контрагентом или товаром). Рекомендуется параметризовать по признакам, например по `ВидКонтрагента`, а не по самому контрагенту. ## Зависимые функциональные опции #### 3.1. Если одна функциональность зависит от других, обеспечьте непротиворечивость связанных данных. #### Пример Функциональность `Перевод сотрудников` доступна, когда одновременно включены `Многофирменный учет` и `Кадровый учет`. В таком случае: - введите отдельную функциональную опцию `ПереводСотрудников`; - привяжите нужные объекты к ней; - реализуйте зависимость ее значения от двух других опций (например, при записи соответствующих констант). Показывайте администратору в форме настройки значения всех зависимых опций. При этом производную опцию (например, `ПереводСотрудников`) делайте недоступной для ручного редактирования. Для булевых опций используйте элемент управления `Поле` вида `Поле флажка` с заголовком, совпадающим с названием опции. #### 3.2. Для взаимоисключающих функциональных опций используйте элементы, позволяющие выбрать одно значение из нескольких: - `Поле переключателя`; - `Поле ввода` со списком выбора; - другой аналогичный элемент выбора. Заголовки переключателей или значения списка должны совпадать с названиями опций. #### 3.3. Если незначительная функциональность сложно зависит от нескольких опций и ее нельзя назвать понятно для пользователя, лучше не вводить отдельную функциональную опцию. В таких случаях зависимость элементов формы реализуйте в коде (например, при создании формы на сервере), анализируя значения существующих опций. ## Ограничения на использование параметров функциональных опций #### 4.1. По соображениям производительности не рекомендуется иметь более `10` параметров функциональных опций. Не создавайте разные параметры для одной смысловой нагрузки. #### Пример Вместо двух параметров: - `ТипВерсионируемогоОбъекта` (связан с `РегистрСведений.НастройкаВерсионированияОбъектов.Измерение.ТипОбъекта`); - `ТипОбъектаСДополнительнымиОтчетамиИОбработками` (связан с `РегистрСведений.НазначениеДополнительныхОбработок.Измерение.ТипОбъекта`); используйте один параметр `ТипОбъектаКонфигурации`, связанный с измерениями обоих регистров. #### 4.2. При проектировании состава функциональных опций и их параметров придерживайтесь схемы: - определить, какая функциональность действительно опциональна; - определить, где нужен один общий выключатель, а где параметризация по контексту; - составить список всех параметризованных опций и их параметров; - исключить дубли параметров одного типа и назначения; - если параметров слишком много, ранжировать их по востребованности и важности; - исключить менее востребованные параметры; - для опций без параметров принять решение: сделать их непараметризованными (включение по базе в целом) или удалить. Итогом должен быть ограниченный и управляемый набор параметров функциональных опций. #### См. также - [#std491: Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным](https://v8std.ru/std/491/) #### Источник https://its.1c.ru/db/v8std#content:470 ### std473 - Использование кодов (номеров) объектов конфигурации #std473 URL: https://v8std.ru/std/473/ Markdown URL: https://v8std.ru/std/473.md Source path: std/473.md Aliases: std473, #std473, std 473, стандарт 473 Related: diagnostic:acc:1206, diagnostic:acc:1209 External sources: https://its.1c.ru/db/bspdoc, https://its.1c.ru/db/v8std#content:473 ID: #std473 # Использование кодов (номеров) объектов конфигурации Длины кодов (номеров) объектов конфигурации задавайте по их прикладному смыслу. #### 1. Необходимость применения кодов (номеров) объектов конфигурации определяйте из прикладной задачи. #### 1.1. Пользователям предстоит работать со списками, содержащими большое количество элементов. Пример: справочник **Номенклатура**. #### 1.2. Искать данные по коду (номеру) удобнее, чем по другим свойствам. Например, для справочника **Статьи расходов** пользователю проще запомнить код, чем каждый раз вчитываться в название статьи. Кроме того, названия статей могут меняться. #### 1.3. Код имеет прикладной смысл, продиктованный спецификой автоматизируемой области. Например, код справочника **Единицы измерения** соответствует коду единицы измерения в ОКЕИ, код справочника **Номера ГТД** соответствует номеру грузовой таможенной декларации. #### 2. Автонумерация объектов конфигурации не нужна в следующих случаях. #### 2.1. Код используется как краткое строковое представление элемента данных. Например, для справочника **Пользователи** автонумерация не применяется, так как в коде хранится краткое имя пользователя (логин). #### 2.2. Код (номер) приходит из внешних источников (входящие данные). Например, это классификаторы. Другой пример: справочник **Номера ГТД**, где код вводится по входящим документам. #### 3. Длину кода (номера) устанавливайте в зависимости от назначения кода и способа его получения. #### 3.1. Для объектов с автонумерацией длину кода (номера) выбирайте исходя из потенциального количества: - всех объектов в базе; - объектов в периоде (для документов и бизнес-процессов); - объектов в пределах владельца (иерархические и подчиненные справочники, задачи). В длине номера учитывайте длину префиксов нумерации: префикс информационной базы, префикс организации и другие префиксы, если они предусмотрены конфигурацией. Для типовых конфигураций рекомендуемыми, но не обязательными, являются длины кодов (номеров): `3`, `5`, `9`, `11`. Если в конфигурации используется подсистема **Префиксация объектов** из **Библиотеки стандартных подсистем**, совокупную длину (с учетом префикса) номеров документов и кодов справочников рекомендуется устанавливать не менее 11 символов (`11`, `13`, `15`, ...). Подробнее см. [документацию к подсистеме «Префиксация объектов» на ИТС](https://its.1c.ru/db/bspdoc). #### 3.2. Для объектов, где код используется как краткое строковое представление (см. п. 2.1), длина кода должна быть достаточной для хранения этого представления. #### 3.3. Для объектов, где код (номер) приходит из внешних источников (см. п. 2.2), длина зависит от соответствующего источника. #### 3.4. Рекомендуется использовать переменную допустимую длину кода (номера). #### 4. Если прикладное решение работает с данными, которые могут вводиться параллельно из нескольких мест (в рамках РИБ или в других программах), должна быть реализована автоматическая префиксация объектов конфигурации. Требование относится к объектам, для которых одновременно выполняются условия: - используется строковый код (номер); - используется автонумерация; - данные в области уникальности кодов (номеров) могут вводиться параллельно в разных местах (узлы РИБ, разные программы) и потом консолидироваться, например при синхронизации данных. Пример области уникальности для большинства документов: организация и период. Если конфигурация использует **Библиотеку стандартных подсистем**, это требование реализуется подсистемой **Префиксация объектов**. #### Проверки [#acc:1206](https://v8std.ru/diagnostics/acc/1206/) [#acc:1209](https://v8std.ru/diagnostics/acc/1209/) #### Источник https://its.1c.ru/db/v8std#content:473 ### std474 - Имя, синоним, комментарий #std474 URL: https://v8std.ru/std/474/ Markdown URL: https://v8std.ru/std/474.md Source path: std/474.md Aliases: std474, #std474, std 474, стандарт 474 Related: - diagnostic:acc:1151 - diagnostic:acc:1207 - diagnostic:acc:1208 - diagnostic:acc:1218 - diagnostic:acc:347 - diagnostic:acc:349 - diagnostic:acc:350 - diagnostic:acc:351 - diagnostic:acc:352 - diagnostic:acc:353 - diagnostic:acc:354 - diagnostic:acc:381 - diagnostic:acc:5 - diagnostic:acc:58 - diagnostic:acc:6 - diagnostic:acc:7 - diagnostic:acc:8 - diagnostic:acc:86 - diagnostic:bslls:ForbiddenMetadataName - diagnostic:bslls:MetadataObjectNameLength - diagnostic:bslls:SameMetadataObjectAndChildNames - diagnostic:v8cs:md-standard-attribute-synonym-empty - diagnostic:v8cs:mdo-ru-name-unallowed-letter - standard:std478 - standard:std531 - standard:std534 - standard:std550 - standard:std644 External sources: https://its.1c.ru/db/v8std#content:474 ID: #std474 # Имя, синоним, комментарий #### 1.1. Синоним объекта заполняйте обязательно. Он должен быть осмысленным и лаконичным, чтобы одинаково понятно отображаться в формах, отчетах и командном интерфейсе. Требование относится не только к объектам метаданных, но и к их реквизитам, табличным частям, измерениям, ресурсам и другим объектам, где есть синоним. #### Неправильно `Что` #### Правильно `Предмет контроля` #### 1.2. Не используйте в синонимах сокращения, кроме общеупотребительных и понятных целевой аудитории, например: - `Сумма (регл.)`; - `НДС`; - `МСФО`. #### 1.3. В синонимах и пользовательских сообщениях используйте общепринятые термины. Не используйте сленг, искаженные названия, русские слова латиницей и англоязычные фразы русскими буквами. Если для англоязычного термина нет общепринятого русского эквивалента, используйте оригинальный термин. #### Неправильно `Загрузка данных из Эксель` `Загрузка данных из MS Excel` #### Правильно `Загрузка данных из Microsoft Excel` #### 1.4. Если у объекта есть стандартные реквизиты и табличные части, задавайте для них синонимы по прикладному смыслу. #### 1.5. Для стандартных реквизитов `Родитель` и `Владелец` всегда задавайте синонимы, отличные от значений по умолчанию. #### Неправильно Для реквизита `Владелец` в справочнике `Файлы` оставить синоним `Владелец`. #### Правильно Для того же реквизита задать синоним `Папка` или `Папка с файлом`. Синоним `Наименование` может подходить не всегда. Например, для справочника `Файлы` лучше `Имя файла`, для `ФизическиеЛица` - `ФИО`. #### 1.6. Если есть два и более схожих объекта, синонимы должны полностью различать их назначение. Пользователь не должен гадать по названию, о каких данных идет речь. #### Неправильно - `Банковские счета` - `Банковские счета контрагентов` #### Правильно - `Банковские счета организаций` - `Банковские счета контрагентов` Пример с реквизитами табличной части `Товары` документа `Пересчет товаров`. #### Неправильно - `Количество` - `Количество (по учету)` #### Правильно - `Количество (в наличии)` - `Количество (по учету)` Пример со стандартным реквизитом `Наименование` и еще одним реквизитом справочника `Номенклатура`. #### Неправильно - `Наименование` - `Полное наименование` #### Правильно - `Рабочее наименование` - `Наименование для печати` Это правило действует и для подчиненных объектов: реквизитов, табличных частей, измерений, ресурсов. #### 2.1. Имя объекта рекомендуется строить на основе синонима: - убрать пробелы и другие недопустимые в имени символы; - первые буквы слов сделать прописными. #### Неправильно - у справочника `Дополнительные свойства` задано имя `НаборыДополнительныхРеквизитовИСведений`; - у общей команды `Файлы присоединенные` задано имя `ПрисоединенныеФайлы`. #### Правильно - у справочника `Наборы дополнительных реквизитов и сведений` задано имя `НаборыДополнительныхРеквизитовИСведений`; - у общей команды `Присоединенные файлы` задано имя `ПрисоединенныеФайлы`. Допустимо, когда имя короче синонима и не включает одно или несколько последних малозначащих слов. #### Примеры - `Длительность ожидания сервера (сек)` - `ДлительностьОжиданияСервера`; - `Количество единиц измерения` - `КоличествоЕдиниц`; - `Имя реквизита (свойство)` - `Обработки.ГрупповоеИзменениеОбъектов.Операции.ИмяРеквизита`. Имя также может не включать союзы и предлоги из синонима. #### Пример Для реквизита `Значение скидки или наценки` имя `ЗначениеСкидкиНаценки`. Допустима и обратная ситуация: синоним короче имени, если в синониме убраны последние технические слова. Это требование нужно для узнаваемости объектов и их представлений в интерфейсе, в том числе на внедрениях, где с конфигурацией работают не разработчики, а технические специалисты. #### 2.2. Исключение: объекты метаданных с префиксом `Удалить`. Не переименовывайте объекты, реквизиты и формы при корректировке синонимов, если действует требование обратной совместимости. #### 2.3. Имена объектов метаданных не должны превышать `80` символов. #### 2.4. Для подчиненных объектов (реквизиты, измерения, ресурсы) не используйте имена, совпадающие с именами объектов-владельцев. Имя должно раскрывать прикладной смысл. #### 2.5. Не используйте имена, совпадающие с именами таблиц языка запросов (`Документ`, `Справочник`, `РегистрСведений` и т.п.). Это приводит к ошибкам выполнения и ухудшает читаемость запроса. #### Пример ошибки ```sdbl ВЫБРАТЬ Сведения.Сведения ИЗ РегистрСведений.Сведения КАК Сведения ``` #### 3.1. Комментарий задавайте только когда нужно дать разработчику важное пояснение по объекту. #### Пример `Индексирование поставлено для оптимизации отчетов с отбором по виду контрагента.` #### 3.2. Комментарий начинайте с прописной буквы. Точки ставьте только после сокращений. #### 4. В именах, синонимах и комментариях не используйте букву `ё`. #### См. также - [#std478: Подсказка и проверка заполнения](https://v8std.ru/std/478/) - [#std531: Реквизит "Комментарий" у документов](https://v8std.ru/std/531/) - [#std550: Имена объектов метаданных в конфигурациях](https://v8std.ru/std/550/) - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Проверки [#bslls:ForbiddenMetadataName](https://v8std.ru/diagnostics/bslls/ForbiddenMetadataName/) [#bslls:MetadataObjectNameLength](https://v8std.ru/diagnostics/bslls/MetadataObjectNameLength/) [#bslls:SameMetadataObjectAndChildNames](https://v8std.ru/diagnostics/bslls/SameMetadataObjectAndChildNames/) [#v8cs:md-standard-attribute-synonym-empty](https://v8std.ru/diagnostics/v8-code-style/md-standard-attribute-synonym-empty/) [#v8cs:mdo-ru-name-unallowed-letter](https://v8std.ru/diagnostics/v8-code-style/mdo-ru-name-unallowed-letter/) [#acc:5](https://v8std.ru/diagnostics/acc/5/) [#acc:6](https://v8std.ru/diagnostics/acc/6/) [#acc:7](https://v8std.ru/diagnostics/acc/7/) [#acc:8](https://v8std.ru/diagnostics/acc/8/) [#acc:58](https://v8std.ru/diagnostics/acc/58/) [#acc:86](https://v8std.ru/diagnostics/acc/86/) [#acc:347](https://v8std.ru/diagnostics/acc/347/) [#acc:349](https://v8std.ru/diagnostics/acc/349/) [#acc:350](https://v8std.ru/diagnostics/acc/350/) [#acc:351](https://v8std.ru/diagnostics/acc/351/) [#acc:352](https://v8std.ru/diagnostics/acc/352/) [#acc:353](https://v8std.ru/diagnostics/acc/353/) [#acc:354](https://v8std.ru/diagnostics/acc/354/) [#acc:381](https://v8std.ru/diagnostics/acc/381/) [#acc:1151](https://v8std.ru/diagnostics/acc/1151/) [#acc:1207](https://v8std.ru/diagnostics/acc/1207/) [#acc:1208](https://v8std.ru/diagnostics/acc/1208/) [#acc:1218](https://v8std.ru/diagnostics/acc/1218/) #### Источник https://its.1c.ru/db/v8std#content:474 ### std477 - Самодостаточность регистров #std477 URL: https://v8std.ru/std/477/ Markdown URL: https://v8std.ru/std/477.md Source path: std/477.md Aliases: std477, #std477, std 477, стандарт 477 Related: diagnostic:acc:123, standard:std654, standard:std701 External sources: https://its.1c.ru/db/v8std#content:477 ID: #std477 # Самодостаточность регистров При проектировании структуры регистров придерживайтесь правила: регистр должен быть логически независим от регистраторов. Любая логика по данным регистра и любые отчеты по нему не должны обращаться к полям регистратора. Для работы должно быть достаточно данных самого регистра. Обращение к полям регистратора через точку приводит к неявным соединениям с дополнительными таблицами. Кроме того, в распределенной информационной базе регистратора может не быть: движения регистров могут мигрировать между узлами, а регистраторы - нет. #### См. также - [#std654: Разыменование ссылочных полей составного типа в языке запросов](https://v8std.ru/std/654/) - [#std701: Разработка планов обмена с отборами](https://v8std.ru/std/701/) #### Проверки [#acc:123](https://v8std.ru/diagnostics/acc/123/) #### Источник https://its.1c.ru/db/v8std#content:477 ### std478 - Подсказка и проверка заполнения #std478 URL: https://v8std.ru/std/478/ Markdown URL: https://v8std.ru/std/478.md Source path: std/478.md Aliases: std478, #std478, std 478, стандарт 478 Related: diagnostic:acc:447, diagnostic:acc:59, standard:std463, standard:std474 External sources: https://its.1c.ru/db/v8std#content:478 ID: #std478 # Подсказка и проверка заполнения #### 1.1. Свойство `Подсказка` задавайте только для тех реквизитов и объектов, которые пользователь видит в интерфейсе и для которых действительно нужно пояснение. Не добавляйте подсказки для реквизитов, с которыми пользователь работает ежедневно. В тексте подсказки не пишите инструкции по работе. Вместо этого улучшайте сценарий использования реквизита. Удаляйте бессмысленные автосгенерированные подсказки элементов формы, например `Группа шапка`. #### См. также #### 2.1. Для типизированных объектов метаданных, стандартных реквизитов и табличных частей, которые обязательны по логике объекта, устанавливайте свойство `Проверка заполнения = Выдавать ошибку`. #### Пример Для документа `Заказ клиента` реквизит `Клиент` и табличная часть `Товары` должны быть обязательными. Заказ без этих данных методически не имеет смысла. #### 2.2. Описывайте ограничения максимально в метаданных. Если хотя бы один сценарий требует обязательного заполнения, ставьте `Проверка заполнения = Выдавать ошибку`. Сценарии, где реквизит может быть необязательным, обрабатывайте в [#std463: Обработчик события ОбработкаПроверкиЗаполнения](https://v8std.ru/std/463/) #### Неправильно Устанавливать `Проверка заполнения = Не проверять` и реализовывать обязательность только кодом в `ОбработкаПроверкиЗаполнения`. #### Правильно Устанавливать `Проверка заполнения = Выдавать ошибку`, а условные исключения задавать в `ОбработкаПроверкиЗаполнения`. #### 2.3. Если проверка заполнения зависит от условий, управляйте автопометкой незаполненного значения через условное оформление формы. Убирайте пометку, когда для текущего состояния объекта заполнение не требуется. #### См. также - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Проверки [#acc:59](https://v8std.ru/diagnostics/acc/59/) [#acc:447](https://v8std.ru/diagnostics/acc/447/) #### Источник https://its.1c.ru/db/v8std#content:478 ### std480 - Оформление карты маршрута бизнес-процесса #std480 URL: https://v8std.ru/std/480/ Markdown URL: https://v8std.ru/std/480.md Source path: std/480.md Aliases: std480, #std480, std 480, стандарт 480 Related: нет External sources: https://its.1c.ru/db/v8std#content:480 ID: #std480 # Оформление карты маршрута бизнес-процесса Пример оформления бизнес-процесса: Изображение: Пример карты маршрута (480.img1.jpg) #### 1. ## Общие рекомендации #### 1.1. Бизнес-процессы рисуйте сверху вниз. Другая ориентация (например, слева направо) допустима, если так процесс получается нагляднее. #### 1.2. Используйте стандартную сетку: шаг 20 точек, линии сетки включены. #### 1.3. Не используйте жирные и разноцветные шрифты. #### 1.4. Количество изгибов соединительных линий должно быть минимальным. Если точки можно соединить линией с одним изгибом, выбирайте этот вариант, подгоняя размеры и положение точек. #### 1.5. При размещении декораций и точек маршрута соблюдайте отступ в одну клетку от левого и верхнего края карты маршрута. #### 1.6. Ширину точек маршрута делайте равной четному количеству клеток. Это нужно, чтобы соединительные линии сходились без лишних изгибов. Размеры точек и декораций старайтесь приближать к пропорциям спичечного коробка (например, 3х6 клеток). Избегайте сильно вытянутых по вертикали или горизонтали точек: они ухудшают восприятие схемы. #### 1.7. Текст в точках маршрута и декорациях выравнивайте по центру (по умолчанию). Исключение: комментарии, для них лучше использовать выравнивание влево. #### 1.8. Размещайте декорации и точки маршрута так, чтобы они не пересекали границы печатного листа (меню **Графическая схема - Режим просмотра страниц**). #### 2. ## Рекомендации по оформлению отдельных элементов #### 2.1. Точки **Старт** и **Завершение** устанавливайте размером 2х2 клетки, без наименования. Количество таких точек определяется логикой бизнес-процесса. Отступ от точки старта или завершения до ближайшей точки бизнес-процесса рекомендуется делать в две клетки. Изображение: Точки старт и завершение (480.img2.jpg) #### 2.2. Точки **Действие**, **Автоматическая обработка**, **Вложенный бизнес-процесс** должны иметь размер, достаточный для размещаемого текста. Текст в этих точках должен быть короткой директивой и отвечать на вопрос «Что нужно сделать?» (например, «Выписать счет», а не «Выписка счета»). Слева от этих точек располагайте декорации входящих данных, необходимых для выполнения действия. Справа располагайте декорации результирующих (исходящих) данных. #### 2.3. Изображения входящих документов располагайте слева от точки на расстоянии двух клеток и соединяйте с точкой пунктирной линией со стрелкой. Изображения исходящих документов располагайте справа от точки на расстоянии двух клеток и соединяйте с точкой пунктирной линией со стрелкой. Документы оформляйте фигурой вида «Документ». Изображение: Оформление входящих и исходящих документов (480.img3.jpg) Пропорции декорации документа по возможности приближайте к формату А4 (например, 4х5 или 3х4 клетки стандартной сетки). #### 2.4. Комментарии к точкам маршрута размещайте на расстоянии двух клеток: - слева от точки, если комментарий относится к входящему документу; - справа от точки, если комментарий относится к исходящему документу. Комментарий оформляйте фигурой **Скобки вертикальные** или **Скобки горизонтальные** и соединяйте с гранью точки маршрута пунктирной линией без стрелки. Изображение: Оформление комментариев (480.img4.jpg) #### 2.5. Точки условного перехода должны содержать короткий вопрос, заканчивающийся знаком вопроса. Вопрос формулируйте так, чтобы ответ был только **Да** или **Нет** (например, **Счет есть?**, **Отгрузка разрешена?**, **ОК?**). Точки условия делайте максимально компактными, но без потери наглядности: это точки перехода, а не точки действия. Соединительные линии точек условия (входящие и исходящие) должны иметь суммарную длину не менее двух клеток, чтобы надписи **Да** и **Нет** читались нормально. Изображение: Оформление условного перехода (480.img5.jpg) #### Источник https://its.1c.ru/db/v8std#content:480 ### std482 - Заполнение свойств конфигурации информацией о выпуске #std482 URL: https://v8std.ru/std/482/ Markdown URL: https://v8std.ru/std/482.md Source path: std/482.md Aliases: std482, #std482, std 482, стандарт 482 Related: - diagnostic:acc:1201 - diagnostic:acc:1202 - diagnostic:acc:1203 - diagnostic:acc:60 - diagnostic:acc:61 - diagnostic:acc:62 - diagnostic:acc:63 - diagnostic:acc:64 - diagnostic:acc:72 - diagnostic:acc:76 - standard:std483 External sources: - https://its.1c.ru/db/v83doc/bookmark/dev/TI000002041 - https://www.1c.ru](https://www.1c.ru - https://v8.1c.ru/<короткое - https://v8.1c.ru/trade/](https://v8.1c.ru/trade/ - https://downloads.v8.1c.ru/tmplts/](https://downloads.v8.1c.ru/tmplts/ - https://its.1c.ru/db/v8std#content:482 ID: #std482 # Заполнение свойств конфигурации информацией о выпуске #### 1. **Синоним**. В синониме указывается официальное название конфигурации, которое будет идентифицировать конфигурацию в документации, на коробке с продуктом, прайс-листе, рекламе, в информационных и методических материалах. В конце официального названия через запятую указывается слово "редакция" и номер редакции. Например: `Бухгалтерия предприятия, редакция 1.6` #### 2. **Имя**. Имя образуется по правилам образования имен из синонима; слово "редакция", номер редакции (и подредакции) – не указываются. Например: `БухгалтерияПредприятия` #### 3. **Краткая информация**. Краткая информация повторяет синоним. #### 4. **Подробная информация**. Подробная информация повторяет синоним. #### 5. **Логотип**. Для типовых конфигураций фирмы "1С" картинка логотипа не заполняется. #### 6. **Заставка**. В качестве заставки устанавливается картинка одного из типов, поддерживаемых системой 1С:Предприятие. Требования к размеру картинки см. в [документации](https://its.1c.ru/db/v83doc/bookmark/dev/TI000002041). #### 7. **Авторские права**. Указывается строка вида: ``` Copyright (C) <разработчик>, хххх-хххх. Все права защищены. ``` Для конфигураций на английском языке: ``` Copyright (C) <разработчик>, хххх-хххх. All rights reserved. ``` Вместо "хххх-хххх" указываются конкретные годы выпуска конфигурации. Например: ``` Copyright (C) ООО "1С-Софт", 2009-2025. Все права защищены ``` #### 8. **Адрес информации о поставщике**. Для типовых конфигураций фирмы "1С" указывается строка: [https://www.1c.ru](https://www.1c.ru) #### 9. **Адрес информации о конфигурации**. Для типовых конфигураций фирмы "1С" указывается строка: `https://v8.1c.ru//`, где вместо ** указывается англоязычное короткое имя конкретной конфигурации, например: [https://v8.1c.ru/trade/](https://v8.1c.ru/trade/) #### 10. **Поставщик**. Для типовых конфигураций фирмы "1С" в качестве поставщика указывается: Фирма "1С" #### 11. **Версия**. Указывается полный номер версии конфигурации. Например, 1.6.4.7 Подробнее об образовании номера версии см. раздел [#std483: Нумерация редакций и версий](https://v8std.ru/std/483/) #### 12. **Адрес каталога обновлений**. Для типовых конфигураций фирмы "1С" указывается строка: [https://downloads.v8.1c.ru/tmplts/](https://downloads.v8.1c.ru/tmplts/) #### Проверки [#acc:60](https://v8std.ru/diagnostics/acc/60/) [#acc:61](https://v8std.ru/diagnostics/acc/61/) [#acc:62](https://v8std.ru/diagnostics/acc/62/) [#acc:63](https://v8std.ru/diagnostics/acc/63/) [#acc:64](https://v8std.ru/diagnostics/acc/64/) [#acc:72](https://v8std.ru/diagnostics/acc/72/) [#acc:76](https://v8std.ru/diagnostics/acc/76/) [#acc:1201](https://v8std.ru/diagnostics/acc/1201/) [#acc:1202](https://v8std.ru/diagnostics/acc/1202/) [#acc:1203](https://v8std.ru/diagnostics/acc/1203/) #### Источник https://its.1c.ru/db/v8std#content:482 ### std483 - Нумерация редакций и версий #std483 URL: https://v8std.ru/std/483/ Markdown URL: https://v8std.ru/std/483.md Source path: std/483.md Aliases: std483, #std483, std 483, стандарт 483 Related: diagnostic:acc:1200, diagnostic:acc:71, standard:std484 External sources: https://its.1c.ru/db/v8std#content:483 ID: #std483 # Нумерация редакций и версий #### 1. Новая редакция получает следующий целый номер относительно предыдущей. Формат обозначения: `Редакция.Подредакция` (например, `1.5`, `1.6`). Для новой конфигурации стартовая редакция: `1.0`. #### 2. В пределах одной подредакции используйте сквозную нумерацию версий, включая альфа, ознакомительные, бета и финальные выпуски. Нумерация версий начинается с: `1`. #### 3. Полный номер версии указывается в свойстве `Версия` конфигурации в формате: `{Р|РР}.{П|ПП}.{З|ЗЗ}.{С|СС}` ```mermaid %%{init: {"flowchart": {"nodeSpacing": 4, "rankSpacing": 22, "curve": "linear"}} }%% flowchart LR D1["2"]:::digit --> P1["."]:::dot --> D2["3"]:::digit --> P2["."]:::dot --> D3["5"]:::digit --> P3["."]:::dot --> D4["2"]:::digit H1["Редакция"]:::hint --> S1[" "]:::spacer --> H2["Подредакция"]:::hint --> S2[" "]:::spacer --> H3["Версия"]:::hint --> S3[" "]:::spacer --> H4["Сборка"]:::hint classDef digit font-weight:400,font-size:24px,padding:0px classDef dot fill:transparent,stroke:transparent,font-weight:900,font-size:64px classDef hint fill:transparent,stroke:transparent,font-size:12px,font-weight:600 classDef spacer fill:transparent,stroke:transparent,color:transparent linkStyle 0,1,2,3,4,5,6,7,8,9,10,11 stroke:transparent,stroke-width:0px,fill:transparent ``` Каждая часть содержит минимум одну цифру и при необходимости может быть длиннее. #### Пример `1.6.4.7` — `7`-я сборка `4`-й версии редакции `1.6`. #### См. также - [#std484: Общие сведения о выпуске конфигураций](https://v8std.ru/std/484/) #### Проверки [#acc:71](https://v8std.ru/diagnostics/acc/71/) [#acc:1200](https://v8std.ru/diagnostics/acc/1200/) #### Источник https://its.1c.ru/db/v8std#content:483 ### std484 - Общие сведения о выпуске конфигураций #std484 URL: https://v8std.ru/std/484/ Markdown URL: https://v8std.ru/std/484.md Source path: std/484.md Aliases: std484, #std484, std 484, стандарт 484 Related: standard:std483 External sources: https://its.1c.ru/db/v8std#content:484 ID: #std484 # Общие сведения о выпуске конфигураций #### 1. Конфигурации выпускаются **версиями** и **редакциями**. #### 2. **Версия** — выпуск с исправлением ошибок и небольшими улучшениями. Новая версия должна обеспечивать переход с предыдущей с сохранением данных. #### 3. **Редакция** — выпуск с существенными изменениями структуры учета, которые могут требовать преобразования данных. Формальный (но не обязательный) признак новой редакции — необходимость переноса данных через конвертацию. При выпуске новой редакции желательно обеспечивать переход с сохранением данных. Если это невозможно, опишите процедуру перехода: - с чего начинать работу в новой редакции; - как переносить начальные остатки; - какие ограничения действуют при переходе. #### См. также - [#std483: Нумерация редакций и версий](https://v8std.ru/std/483/) #### Источник https://its.1c.ru/db/v8std#content:484 ### std485 - Использование привилегированного режима #std485 URL: https://v8std.ru/std/485/ Markdown URL: https://v8std.ru/std/485.md Source path: std/485.md Aliases: std485, #std485, std 485, стандарт 485, привилегированный режим, использование привилегированного режима, отключаем проверку прав Related: standard:std415, standard:std470, standard:std488, standard:std499, standard:std678 External sources: https://its.1c.ru/db/v8std#content:485 ID: #std485 # Использование привилегированного режима #### 1.1. Привилегированный режим позволяет: - выполнять операции с данными от имени пользователей, которым эти данные напрямую недоступны; - повышать производительность, так как при его использовании не применяются ограничения доступа к данным. #### 1.2. Используйте привилегированный режим, когда: - проверку прав нужно логически отключить для конкретной операции; - проверку прав можно безопасно отключить для ускорения, не нарушая фактические права пользователя. #### 2. Ниже приведены типовые сценарии использования привилегированного режима. #### 2.1. Если подчиненные регистры (движения документов) нужны пользователю только для отчетов: - оставляйте для них права только на чтение; - запись выполняйте в привилегированном режиме. Так проверка прав на запись требуется только для регистратора. #### Пример Есть объекты: - `Документ.ОприходованиеТоваров`; - `РегистрНакопления.ОстаткиНаСкладах`; - `Отчет.ОстаткиНаСкладах`. Документ делает движения по регистру при проведении в привилегированном режиме. Пользователь формирует отчет по регистру, но не должен изменять регистр напрямую. Достаточно права чтения регистра. #### 2.2. Если регистры не нужны пользователю ни в отчетах, ни в командном интерфейсе, не выдавайте права даже на чтение. Чтение/запись в такие регистры выполняйте только в привилегированном режиме. #### Пример Регистр сведений `ВерсииПодсистем` используется только через служебные функции общего модуля. Пользователям права на регистр не выдаются. #### 2.3. Если для разрешенной операции требуются заранее недоступные пользователю данные, получайте эти данные в привилегированном режиме, но соблюдайте два ограничения: - не передавайте такие данные на клиент; - используйте их на сервере только в рамках запланированной операции. #### Пример Есть объекты: - `Документ.РеализацияТоваровИУслуг`; - `РегистрНакопления.Продажи`; - `РегистрНакопления.Взаиморасчеты`. Требования: - кладовщик проводит документ, который меняет регистр `Продажи`, но сам регистр кладовщику недоступен; - при проведении выполняется проверка по `Взаиморасчеты`, при этом доступ к регистру пользователю не открывается. #### 2.4. Привилегированный режим можно использовать для повышения производительности, если это не открывает пользователю неразрешенные действия и данные. #### Пример Если параметры запроса уже проверены ограничениями прав на уровне записей, сам запрос можно выполнить в привилегированном режиме, но только после проверки, что результат не раскрывает лишние данные. #### Пример Параметр сеанса `ТекущийПользователь` не доступен в ролях, поэтому он читается через привилегированный режим: ```bsl Функция ТекущийПользователь() Экспорт УстановитьПривилегированныйРежим(Истина); Возврат ПараметрыСеанса.ТекущийПользователь; КонецФункции ``` #### 3. Неоправданное использование привилегированного режима создает риски безопасности. #### 3.1. Опасны экспортные серверные процедуры и функции, которые безусловно включают привилегированный режим: это отключает проверку прав текущего пользователя. Особенно внимательно проверяйте экспортный API сервера (см. [#std678](https://v8std.ru/std/678/)) #### Неправильно ```bsl Процедура ИзменитьИлиУдалитьДанные(...) Экспорт УстановитьПривилегированныйРежим(Истина); // Отключаем проверку прав // Изменяем данные ... КонецПроцедуры ``` #### Правильно ```bsl Процедура ИзменитьИлиУдалитьДанные(...) Экспорт // Изменяем данные // Если прав недостаточно, платформа вызовет исключение ... КонецПроцедуры ``` Исключение: действия (или значения), которые действительно должны быть доступны всем категориям пользователей. #### 3.2. Если к экспортной процедуре/функции обращается пользователь с недостаточными правами, должно возникать стандартное исключение (см. `ВыполнитьПроверкуПравДоступа()`). Чаще всего дополнительный код не нужен: при корректно настроенных ролях и `RLS` исключение возникнет автоматически, например: - запрос без ключевого слова `РАЗРЕШЕННЫЕ`; - `ПолучитьОбъект()` по недоступной ссылке; - вызов недоступного метода глобального контекста. Если нужна явная проверка, используйте `ВыполнитьПроверкуПравДоступа()`. #### Пример ```bsl Процедура ИзменитьИлиУдалитьДанные(...) Экспорт ВыполнитьПроверкуПравДоступа(...); УстановитьПривилегированныйРежим(Истина); // Изменяем данные в привилегированном режиме ... КонецПроцедуры ``` #### См. также - [#std415: Ограничения на использование ключевого слова "РАЗРЕШЕННЫЕ" в запросах](https://v8std.ru/std/415/) - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) #### 3.3. Включайте привилегированный режим точечно: - включить прямо перед критическим действием; - выполнить действие; - сразу отключить; - продолжить код в обычном режиме. #### Неправильно ```bsl Процедура ПодготовитьДанные() УстановитьПривилегированныйРежим(Истина); // Подготовка запроса, где нужна проверка прав // Выполнение запроса Выборка = Запрос.Выполнить().Выбрать(); // Обработка результатов, где тоже нужна проверка прав КонецПроцедуры ``` #### Правильно ```bsl Процедура ПодготовитьДанные() // Подготовка запроса УстановитьПривилегированныйРежим(Истина); Выборка = Запрос.Выполнить().Выбрать(); УстановитьПривилегированныйРежим(Ложь); // Обработка результатов КонецПроцедуры ``` #### 4. Для перехода в привилегированный режим используйте возможности платформы: 1. В обработчиках документа `ОбработкаПроведения` и `ОбработкаУдаленияПроведения`: - через свойства документа `Привилегированный режим при проведении` и `Привилегированный режим при отмене проведения`; - если состав выборки должен ограничиваться правами пользователя, эти свойства не используйте, а включайте режим точечно через `УстановитьПривилегированныйРежим()`. 2. Свойство бизнес-процесса `Привилегированный режим` (для создания задач в привилегированном режиме). 3. Свойство функциональной опции `Привилегированный режим при получении`. 4. Процедуру глобального контекста `УстановитьПривилегированныйРежим()` в нужной точке кода: ```bsl УстановитьПривилегированныйРежим(Истина); // Фрагмент кода в привилегированном режиме ...; УстановитьПривилегированныйРежим(Ложь); ``` 5. Общий модуль со свойством `Привилегированный`. #### См. также - [#std678: Безопасность прикладного программного интерфейса сервера](https://v8std.ru/std/678/) - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std470: Использование функциональных опций](https://v8std.ru/std/470/) #### Источник https://its.1c.ru/db/v8std#content:485 ### std486 - Использование модуля объекта, модуля менеджера объекта и общих модулей #std486 URL: https://v8std.ru/std/486/ Markdown URL: https://v8std.ru/std/486.md Source path: std/486.md Aliases: std486, #std486, std 486, стандарт 486 Related: standard:std496 External sources: https://its.1c.ru/db/v8std#content:486 ID: #std486 # Использование модуля объекта, модуля менеджера объекта и общих модулей #### 1. `Модуль объекта` отвечает за поведение конкретного экземпляра объекта (`СправочникОбъект`, `ДокументОбъект` и т.п.). Размещайте в нем процедуры и функции, которые работают с данными объекта (`ЭтотОбъект` и переменные модуля), в том числе когда объект еще не записан в базу. Например: - обработчики событий объекта; - процедуры заполнения экземпляра. Учитывайте, что для вызова экспортных процедур и функций из других модулей обычно нужно сначала получить экземпляр через `ПолучитьОбъект()`. Это загружает объект целиком вместе с табличными частями и может быть ресурсоемко. #### 2. `Модуль менеджера` предназначен для "статической" логики, которая относится к объекту метаданных, но не зависит от состояния конкретного экземпляра. Это могут быть процедуры и функции: - относящиеся к совокупности объектов: печать списка, общая информация для всех экземпляров, обновление данных, связанное с объектом метаданных; - работающие с уже записанным объектом, когда на вход передается ссылка: печатная форма по ссылке, формирование движений по ссылке. Для функций модуля менеджера не должен требоваться экземпляр объекта данных (`СправочникОбъект`, `ДокументОбъект` и т.п.). #### 3. Если функциональность нельзя однозначно отнести к одному объекту метаданных, она считается общей для нескольких объектов. В таком случае размещайте ее в `общем модуле`. #### См. также - [#std496: Чтение отдельных реквизитов объекта из базы данных](https://v8std.ru/std/496/) #### Источник https://its.1c.ru/db/v8std#content:486 ### std487 - Минимизация количества серверных вызовов и трафика #std487 URL: https://v8std.ru/std/487/ Markdown URL: https://v8std.ru/std/487.md Source path: std/487.md Aliases: std487, #std487, std 487, стандарт 487 Related: diagnostic:bslls:MissingTempStorageDeletion, related:metod8dev:4105, standard:std459, standard:std724 External sources: https://its.1c.ru/db/v8std#content:487 ID: #std487 # Минимизация количества серверных вызовов и трафика #### 1.1. Контролируйте количество серверных вызовов из клиентского кода. В ряде сценариев дополнительно контролируйте объем передаваемых данных между клиентом и сервером. Общее количество серверных вызовов складывается из: - обращений, которые выполняет сама платформа; - вызовов из клиентского кода конфигурации. Ориентир по умолчанию: одно действие пользователя не должно порождать дополнительные серверные вызовы из кода конфигурации. Если отступление необходимо, его нужно обосновать. #### Исключение Первый вызов клиентского общего модуля может привести к неявному серверному вызову, если модуль еще не скомпилирован. #### 1.2. Для мобильного клиента и медленных соединений оптимизируйте не только число вызовов, но и трафик. Отладку клиент-серверного взаимодействия проводите в режиме имитации задержек серверных вызовов. ## Запуск клиентского приложения #### 2.1. Код обработчиков `ПередНачаломРаботыСистемы` и `ПриНачалеРаботыСистемы` в простом сценарии не должен обращаться к серверу. Если без сервера не обойтись: - не вызывайте серверные процедуры и функции напрямую из модуля приложения, модуля управляемого приложения и модуля внешнего соединения; - передавайте на клиент все стартовые параметры за один серверный вызов. Если одни и те же параметры старта нужны в разных местах клиентского кода, используйте [#std724: модуль с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) Тогда сервер вызывается один раз, а затем результат кешируется на клиенте. #### Пример ```bsl // Общий серверный модуль ПараметрыПовтИсп (с повторным использованием возвращаемых значений) Функция ПараметрыРаботыКлиента() Экспорт Параметры = Новый Структура; Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); // Инициализация других параметров, необходимых на клиенте при запуске приложения // Параметры.Вставить(ИмяПараметра, ЗначениеПараметра); Возврат Параметры; КонецФункции ``` ```bsl // Код обработчика ПриНачалеРаботыСистемы ИнформационнаяБазаФайловая = ПараметрыПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая; Если ИнформационнаяБазаФайловая Тогда // обработка этого случая в клиентском коде КонецЕсли; ``` #### 2.2. Если в конфигурации используется БСП, применяйте ее программный интерфейс: - размещайте серверный код запуска в процедурах `ПриДобавленииПараметровРаботыКлиентаПриЗапуске` и/или `ПриДобавленииПараметровРаботыКлиента` модуля `ОбщегоНазначенияПереопределяемый`; - на клиенте вызывайте `ПараметрыРаботыКлиентаПриЗапуске` или `ПараметрыРаботыКлиента` модуля `СтандартныеПодсистемыКлиент`, их результат кешируется после первого вызова. #### См. также - [#std459: Использование значений, влияющих на поведение клиентского приложения](https://v8std.ru/std/459/) ## Периодические серверные вызовы #### 3.1. Когда нужно периодически передавать данные с клиента на сервер или проверять состояние сервера, объединяйте проверки в один вызов и выбирайте период как можно реже, обычно не чаще одного раза в `20` минут. Типовые сценарии: - отправка данных о производительности и параметрах клиента; - контроль динамического обновления конфигурации или прав пользователя; - контроль завершения работы пользователей; - проверка актуальности курсов валют; - проверка напоминаний пользователя. По возможности используйте уведомления клиентам через `МенеджерУведомленийКлиента`, а не периодический опрос сервера с клиента. #### 3.2. Если используется БСП, реализуйте периодическое взаимодействие через ее программный интерфейс. #### 3.2.1. Для длительных операций ожидайте результат через `ДлительныеОперацииКлиент.ОжидатьЗавершение`. #### 3.2.2. Для отдельной формы без длительных операций допустимы бесконтекстные периодические вызовы, но интервал выбирайте максимально большим для решаемой задачи. Для форм на начальной странице периодические вызовы по возможности заменяйте кнопкой `Обновить`. Если периодический вызов нужен, делайте его выключенным по умолчанию и с интервалом не чаще раза в минуту. #### 3.2.3. Для периодической проверки состояния сервера и отправки оповещений клиентам: - описывайте серверные оповещения в `ПриДобавленииСерверныхОповещений` модуля `ОбщегоНазначенияПереопределяемый`; - реализуйте отправку из регламентного задания `ОтправкаСерверныхОповещенийКлиентам` в `ПриОтправкеСерверногоОповещения` нужного общего модуля; - реализуйте обработку на клиенте в `ПриПолученииСерверногоОповещения` этого же модуля. #### 3.2.4. Для периодической отправки данных с клиента на сервер: - добавляйте клиентские данные в `ПередПериодическойОтправкойДанныхКлиентаНаСервер` модуля `ОбщегоНазначенияКлиентПереопределяемый`; - обрабатывайте данные на сервере в `ПриПериодическомПолученииДанныхКлиентаНаСервере` модуля `ОбщегоНазначенияПереопределяемый`; - обрабатывайте ответ сервера на клиенте в `ПослеПериодическогоПолученияДанныхКлиентаНаСервере` модуля `ОбщегоНазначенияКлиентПереопределяемый`. ## Открытие управляемой формы #### 4.1. Если форма открывается из кода, выполняйте это за один вызов `ОткрытьФорму`. (Для платформы `8.2` и более ранних версий также `ОткрытьФормуМодально`). Параметры передавайте через параметр `Параметры` этого метода. #### 4.2. При открытии формы не вызывайте сервер из клиентских обработчиков `ПриОткрытии` и `ПриПовторномОткрытии`. Если нужны серверные данные, заполните реквизиты формы заранее в `ПриСозданииНаСервере`. #### Пример Фоновое задание длительного расчета запускайте в `ПриСозданииНаСервере`, а проверку готовности стартуйте в `ПриОткрытии`. См.. #### Неправильно ```bsl НастройкаПроксиСервера = СерверныйМодуль.НастройкаПроксиСервера(); ПараметрыОткрытия = Новый Структура("Настройка", НастройкаПроксиСервера); ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера", ПараметрыОткрытия); ``` #### Правильно ```bsl ОткрытьФорму("ОбщаяФорма.ПараметрыПроксиСервера"); ``` Значение константы получайте в `ПриСозданииНаСервере` формы `ПараметрыПроксиСервера`. Также при открытии формы не вызывайте серверные функции с повторным использованием возвращаемых значений: при первом вызове кеш еще не прогрет и возникает лишний вызов сервера. #### 4.3. Не подключайте несколько разных обработчиков ожидания (`ПодключитьОбработчикОжидания`) для проверки готовности фоновых заданий одной формы. Это создает избыточные серверные вызовы. Объединяйте проверки в один обработчик, который за один вызов получает все нужные статусы и результаты. По возможности объединяйте и сами фоновые задания, если это не противоречит логике. Если используется БСП, запускайте длительные операции через `ДлительныеОперации` и `ДлительныеОперацииКлиент`. В них уже реализовано объединение обработчиков и оптимальные интервалы ожидания. ## Выполнение локальной команды управляемой формы #### 5.1. Локальная команда формы должна приводить максимум к одному серверному вызову. Если команда делает только клиентские действия (открывает форму, меняет отбор, оформление и т.д.), нужные данные заранее передавайте на клиент: готовьте их в `ПриСозданииНаСервере` и сохраняйте в реквизитах формы. #### Пример При выборе номенклатуры нужно запретить выбор групп. Для этого не вызывайте серверную функцию проверки группы, а добавьте признак `ЭтоГруппа` в таблицу, связанную с полем списка. ```bsl ТекущаяСтрока = Элемент.ТекущиеДанные; Если ТекущаяСтрока.ЭтоГруппа Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = НСтр("ru = 'Выбор группы запрещен.'"); Сообщение.Сообщить(); Возврат; КонецЕсли; ``` Если команда запускает бизнес-логику, доступную только на сервере, выполняйте ее целиком за один серверный вызов. ## Выбор из справочника #### 5.2. В общем случае выбор из справочника должен вызывать только один серверный вызов из кода: вызов, который возникает при `ОткрытьФорму` (или `ОткрытьФормуМодально`). #### 6.3. Если после выбора нужна бизнес-логика, выполняемая только на сервере, допустим один дополнительный серверный вызов. ## Выполнение глобальной команды #### 6.1. Глобальная команда должна приводить максимум к одному серверному вызову из кода. Если команда открывает форму, этот вызов должен происходить при `ОткрытьФорму` (или `ОткрытьФормуМодально`). ## Выполнение команды формирования отчета #### 7.1. При выполнении команды формирования отчета не делайте дополнительных серверных вызовов из кода конфигурации. В частности, при открытии формы отчета не обращайтесь к серверу в `ПриОткрытии` и `ПриПовторномОткрытии`. #### Неправильно ```bsl &НаКлиенте Процедура ПриОткрытии(Отказ) ВывестиОтчет(); КонецПроцедуры &НаСервере Процедура ВывестиОтчет() // Код формирования отчета КонецПроцедуры ``` #### Правильно - открывать форму отчета с параметром `СформироватьПриОткрытии = Истина`; - или устанавливать `СформироватьПриОткрытии = Истина` в `ПриСозданииНаСервере`. ## Выполнение подбора элементов #### 8.1. При подборе элементов между формой объекта и формой подбора передается список выбранных элементов. Объем таких данных может быть большим. Не передавайте потенциально большой массив напрямую параметром формы подбора. Если массив хранится как `ДанныеФормыКоллекция`, форма может передать его неполностью, и платформа выполнит дополнительное дочитывание данных с сервера. #### 8.2. Для оптимизации передачи данных между формами используйте временное хранилище, а чтение и запись выполняйте на сервере. Ниже пример подбора товаров в документ `РасходТовара`: - при открытии формы подбора: первый вызов на сервер для помещения данных во временное хранилище, второй вызов для открытия формы; - при закрытии формы подбора: первый вызов для записи результата в хранилище, второй вызов для загрузки результата в форму документа. ```bsl // Форма документа &НаКлиенте Процедура ОбработчикКомандыПодбора() АдресТоваровВХранилище = ПоместитьТоварыВХранилище(); ПараметрыПодбора = Новый Структура; ПараметрыПодбора.Вставить("АдресТоваровДокумента", АдресТоваровВХранилище); ПараметрыПодбора.Вставить("ВидЦен", Объект.ВидЦен); ПараметрыПодбора.Вставить("Склад", Объект.Склад); ОткрытьФорму("Документ.РасходТовара.Форма.ФормаПодбора", ПараметрыПодбора, Элементы.Товары); КонецПроцедуры &НаСервере Функция ПоместитьТоварыВХранилище() Возврат ПоместитьВоВременноеХранилище( Объект.Товары.Выгрузить(, "Товар,Цена,Количество"), УникальныйИдентификатор ); КонецФункции ``` ```bsl // Форма подбора &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Экспорт АдресТоваровДокумента = Параметры.АдресТоваровДокумента; Объект.Товары.Загрузить(ПолучитьИзВременногоХранилища(АдресТоваровДокумента)); КонецПроцедуры ``` ```bsl // Закрытие формы подбора &НаКлиенте Процедура ОКВыполнить() АдресТоваровВоВременномХранилище = ЗаписатьПодборВХранилище(); ОповеститьОВыборе(АдресТоваровВоВременномХранилище); КонецПроцедуры &НаСервере Функция ЗаписатьПодборВХранилище() Возврат ПоместитьВоВременноеХранилище(Товары.Выгрузить(), АдресТоваровДокумента); КонецФункции ``` ```bsl // Форма документа: обработка результата подбора &НаКлиенте Процедура ПриОбработкеПодобранныхТоваров(Элемент, АдресТоваровВХранилище, СтандартнаяОбработка) Экспорт Если АдресТоваровВХранилище = Неопределено Тогда Возврат; КонецЕсли; ПолучитьТоварыИзХранилища(АдресТоваровВХранилище); КонецПроцедуры &НаСервере Процедура ПолучитьТоварыИзХранилища(АдресТоваровВХранилище) ПодобранныеТовары = ПолучитьИзВременногоХранилища(АдресТоваровВХранилище); Объект.Товары.Загрузить(ПодобранныеТовары); УдалитьИзВременногоХранилища(АдресТоваровДокумента); // освобождаем память КонецПроцедуры ``` #### 8.3. При работе с временным хранилищем используйте один из двух вариантов: - хранение на время жизни формы (по `УникальныйИдентификатор`) с последующей очисткой; - предварительная инициализация и переиспользование одного адреса. Если этого не делать, при многократном выполнении действия (например, повторный подбор) растет расход оперативной памяти. ```bsl &НаСервере Процедура ПриСозданииНаСервере(Отказ) АдресТоваров = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); КонецПроцедуры &НаСервере Функция ТоварыВоВременномХранилище() Возврат ПоместитьВоВременноеХранилище(Товары.Выгрузить(), АдресТоваров); КонецФункции ``` При переиспользовании одного адреса удалять значение из хранилища после каждого вызова не требуется. ```bsl &НаСервере Процедура ПолучитьТоварыИзХранилища(АдресТоваровВХранилище) ПодобранныеТовары = ПолучитьИзВременногоХранилища(АдресТоваровВХранилище); Объект.Товары.Загрузить(ПодобранныеТовары); КонецПроцедуры ``` ## Запись формы #### 9. Не добавляйте отдельный серверный вызов из клиентских `ПередЗаписью` и `ПослеЗаписи`. Размещайте серверную логику в `ПередЗаписьюНаСервере`, `ПриЗаписиНаСервере`, `ПослеЗаписиНаСервере`. Данные передавайте на клиент через `ПараметрыЗаписи` или реквизиты формы. #### Неправильно ```bsl &НаКлиенте Процедура ПослеЗаписи() УправлениеФормой(); КонецПроцедуры &НаСервере Процедура УправлениеФормой() ... КонецПроцедуры ``` #### Правильно Вызывайте `УправлениеФормой` в `ПослеЗаписиНаСервере`. Перед вызовом проверяйте, будет ли форма закрыта: если форма закрывается, управлять ею не нужно. ## Неявные серверные вызовы #### 10. Учитывайте клиентские методы и свойства, которые могут вызывать сервер: - `ПолучитьИзВременногоХранилища`, `УдалитьИзВременногоХранилища`; - свойства поля формы, например `Заголовок`, `Доступность`, `Подсказка`, `ТолькоПросмотр`; - `ПолучитьФункциональнуюОпциюИнтерфейса`, `ПолучитьФункциональнуюОпциюФормы`; - другие методы и свойства из синтаксис-помощника с аналогичным поведением. Избегайте многократных вызовов таких методов из клиентского кода. Объединяйте их в один серверный вызов: используйте одно временное хранилище или переносите логику в одну серверную процедуру. Также не вызывайте серверные функции с повторным использованием возвращаемых значений в сценариях, где первый вызов приходится на открытие формы или другой критичный путь. Используйте подходы из [п. 4.2](https://v8std.ru/std/487/#42) для модулей форм и из [п. 2.1](https://v8std.ru/std/487/#21) для прочего клиентского кода ## Передача данных между клиентом и сервером #### 11. Не передавайте на сервер больше данных, чем нужно для задачи. Если на сервере требуется одно значение реквизита, не выполняйте контекстный вызов. #### Неправильно ```bsl &НаКлиенте Процедура ПриАктивизацииСтрокиСпискаКонтрагентов() ОбновитьПанельКонтактнойИнформацииСервер(); КонецПроцедуры &НаСервере Процедура ОбновитьПанельКонтактнойИнформацииСервер() КонтактнаяИнформацияПанель.ОбновитьДанныеПанели(ЭтотОбъект, ТекущийКонтрагент); КонецПроцедуры ``` #### Правильно ```bsl &НаКлиенте Процедура ПриАктивизацииСтрокиСпискаКонтрагентов() ОбновитьПанельКонтактнойИнформации(); КонецПроцедуры &НаКлиенте Процедура ОбновитьПанельКонтактнойИнформации() ДанныеПанели = ДанныеПанелиКонтактнойИнформации(ТекущийКонтрагент); КонтактнаяИнформацияПанельКлиент.ЗаполнитьДанныеПанелиКИ(ЭтотОбъект, ДанныеПанели); КонецПроцедуры &НаСервереБезКонтекста Функция ДанныеПанелиКонтактнойИнформации(Контрагент) Возврат КонтактнаяИнформацияПанель.ДанныеПанелиКонтактнойИнформации(Контрагент); КонецФункции ``` #### 12. Не возвращайте с сервера обратно параметры, которые пришли с клиента. Вместо этого делайте серверную функцию, которая возвращает только нужный результат. В параметрах серверных процедур и функций, вызываемых с клиента, рекомендуется использовать префикс `Знач`. Это снижает объем обратной передачи параметров, особенно для сложных типов (`Структура`, `Массив` и т.д.). Правило относится к: - экспортным процедурам и функциям общих модулей с признаком `Вызов сервера`; - процедурам модулей форм и команд с директивами `&НаСервере`, `&НаСервереБезКонтекста`; - процедурам без директив (неявное `&НаСервере`). #### Пример ```bsl &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) НовоеОбсуждение = НовоеОбсуждение(ПараметрКоманды); ... КонецПроцедуры ``` #### Неправильно ```bsl &НаСервере Функция НовоеОбсуждение(ПользовательСсылка) ... Возврат ПолучитьНавигационнуюСсылку(Обсуждение.Идентификатор); КонецФункции ``` #### Правильно ```bsl &НаСервере Функция НовоеОбсуждение(Знач ПользовательСсылка) ... Возврат ПолучитьНавигационнуюСсылку(Обсуждение.Идентификатор); КонецФункции ``` #### См. также - [#std459: Использование значений, влияющих на поведение клиентского приложения](https://v8std.ru/std/459/) - [#metod4105: Оптимизация клиент-серверного взаимодействия прикладных решений](https://v8std.ru/metod8dev/4105/) #### Проверки [#bslls:MissingTempStorageDeletion](https://v8std.ru/diagnostics/bslls/MissingTempStorageDeletion/) #### Источник https://its.1c.ru/db/v8std#content:487 ### std488 - Стандартные роли #std488 URL: https://v8std.ru/std/488/ Markdown URL: https://v8std.ru/std/488.md Source path: std/488.md Aliases: std488, #std488, std 488, стандарт 488 Related: - diagnostic:acc:1046 - diagnostic:acc:1149 - diagnostic:acc:1150 - diagnostic:acc:162 - diagnostic:acc:164 - diagnostic:acc:165 - diagnostic:acc:192 - diagnostic:acc:193 - diagnostic:acc:194 - diagnostic:acc:195 - diagnostic:acc:218 - diagnostic:acc:219 - diagnostic:acc:220 - diagnostic:acc:224 - diagnostic:acc:251 - diagnostic:acc:419 - diagnostic:acc:420 - diagnostic:v8cs:right-active-users - diagnostic:v8cs:right-administration - diagnostic:v8cs:right-all-functions-mode - diagnostic:v8cs:right-configuration-extensions-administration - diagnostic:v8cs:right-data-administration - diagnostic:v8cs:right-delete - diagnostic:v8cs:right-exclusive-mode - diagnostic:v8cs:right-interactive-open-external-data-processors - diagnostic:v8cs:right-interactive-open-external-reports - diagnostic:v8cs:right-output-to-printer-file-clipboard - diagnostic:v8cs:right-save-user-data - diagnostic:v8cs:right-start-automation - diagnostic:v8cs:right-start-external-connection - diagnostic:v8cs:right-start-thick-client - diagnostic:v8cs:right-start-thin-client - diagnostic:v8cs:right-start-web-client - diagnostic:v8cs:right-update-database-configuration - diagnostic:v8cs:right-view-event-log - standard:std485 - standard:std658 - standard:std669 - standard:std689 External sources: https://its.1c.ru/db/v8std#content:488 ID: #std488 # Стандартные роли #### 1.1. Если в конфигурации есть разграничение прав доступа, настраивайте доступ только ролями. Состав ролей определяйте от бизнес-задач, а не от технического удобства реализации. #### 1.2. Роли можно строить двумя способами: - по должностям (`Директор`, `Бухгалтер`, `Кладовщик`); - по функциям с назначением комбинаций ролей. Для функционального подхода поставляйте типовые комбинации ролей (профили доступа). #### 2. В конфигурации должны быть обязательные роли: - `ПолныеПрава`; - `АдминистраторСистемы`; - `ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок`. #### 2.1. `ПолныеПрава` (`FullAccess`) должна: - назначаться пользователям как самостоятельная роль; - давать неограниченный доступ к прикладным данным области; - позволять прикладное администрирование (настройка программы, администрирование пользователей в области и т.п.); - не включать интерактивное удаление (см. [раздел 5](https://v8std.ru/std/488/#5)) Также роль должна включать следующие права: - [x] `Администрирование данных` - [x] `Активные пользователи` - [x] `Журнал регистрации` - [x] `Монопольный режим` - [x] `Тонкий клиент` - [x] `Веб-клиент` - [x] `Сохранение данных пользователя` - [x] `Вывод` - [ ] `Интерактивное открытие внешних отчетов` - [ ] `Интерактивное открытие внешних обработок` Назначение роли зависит от режима работы конфигурации: - если конфигурация работает в модели сервиса, роль `ПолныеПрава` назначайте администраторам абонентов (администраторам областей данных); - если конфигурация работает в локальном режиме, назначайте `ПолныеПрава` только вместе с `АдминистраторСистемы`, так как в этом режиме функции системного и прикладного администрирования обычно совмещены. #### 2.2. `АдминистраторСистемы` (`SystemAdministrator`) — роль системного администрирования. Она должна: - назначаться только вместе с `ПолныеПрава`; - давать доступ к системному администрированию информационной базы; - предоставлять неограниченный доступ ко всем общим данным всех областей данных в модели сервиса; - не включать интерактивное удаление (см. [раздел 5](https://v8std.ru/std/488/#5)) По правам к корню конфигурации: - [x] `Администрирование` - [x] `Администрирование данных` - [ ] `Интерактивное открытие внешних отчетов` - [ ] `Интерактивное открытие внешних обработок` #### 2.3. `ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок` дает право интерактивно открывать внешние отчеты и обработки. - [x] `Интерактивное открытие внешних отчетов` - [x] `Интерактивное открытие внешних обработок` Назначение роли зависит от режима работы конфигурации: - в локальном режиме роль `ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок` назначайте администраторам, но при необходимости администратор может запретить ее использование для повышения безопасности информационной базы; - в модели сервиса роли `АдминистраторСистемы`, `ПолныеПрава` и `ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок` назначаются администраторам сервиса. #### 2.4. Роли `ПолныеПрава`, `АдминистраторСистемы` и `ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок` должны входить в свойство конфигурации `ОсновныеРоли`. #### 2.5. Если нужно дать «неполноправным» пользователям право на удаление, добавьте отдельную роль `УдалениеПомеченныхОбъектов` (`DeleteMarkedObjects`). Такую роль используйте только совместно с другими ролями. #### 3. Для общих прав работы с информационной базой используйте отдельные роли, которые назначаются в комбинации с прикладными ролями. #### 3.1. `Администрирование` (`Administration`) предоставляет права: - [x] `Администрирование` - [x] `Администрирование данных` - [x] `Администрирование расширений конфигурации` - [x] `Активные пользователи` #### 3.2. `ВыводНаПринтерФайлБуферОбмена` (`OutputToPrinterFileClipboard`) предоставляет право: - [x] `Вывод` #### 3.3. `ЗапускAutomation` (`StartAutomation`) предоставляет право: - [x] `Automation` #### 3.4. `ЗапускВебКлиента` (`StartWebClient`) предоставляет право: - [x] `Веб-клиент` #### 3.5. `ЗапускВнешнегоСоединения` (`StartExternalConnection`) предоставляет право: - [x] `Внешнее соединение` #### 3.6. `ЗапускТолстогоКлиента` (`StartThickClient`) предоставляет право: - [x] `Толстый клиент` #### 3.7. `ЗапускТонкогоКлиента` (`StartThinClient`) предоставляет право: - [x] `Тонкий клиент` #### 3.8. `ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок` предоставляет права: - [x] `Интерактивное открытие внешних обработок` - [x] `Интерактивное открытие внешних отчетов` #### 3.9. `ОбновлениеКонфигурацииБазыДанных` (`UpdateDatabaseConfiguration`) предоставляет право: - [x] `Обновление конфигурации базы данных` #### 3.10. `ПросмотрЖурналаРегистрации` (`ViewEventLog`) предоставляет право: - [x] `Журнал регистрации` #### 3.11. `РежимТехническогоСпециалиста` (`TechnicalSpecialistMode`) предоставляет право: - [x] `Режим технического специалиста` Этот режим нужен только для разбора нештатных ситуаций. Пользователи должны работать корректно и без него: стандартные обработки (удаление помеченных, управление итогами и агрегатами и т.п.) должны быть доступны в интерфейсе по обычным ролям. #### 3.12. `СохранениеДанныхПользователя` (`SaveUserData`) предоставляет право: - [x] `Сохранение данных пользователя` Обычно эту роль назначают всем пользователям. Исключения: - нужно явно запретить любые персональные настройки, чтобы работа пользователя не оставляла следов в информационной базе; - внешние или временные пользователи; - пользователи, которые работают под общей учетной записью. Конфигурация должна корректно работать и без права `СохранениеДанныхПользователя`. Если код обращается к: - пользовательским настройкам и хранилищам настроек (`ХранилищеОбщихНастроек`, `ХранилищеВариантовОтчетов`, `ХранилищеНастроекДанныхФорм`, `ХранилищеПользовательскихНастроекОтчетов`, `ХранилищеСистемныхНастроек`); - истории работы пользователя и избранному (`ИсторияРаботыПользователя`, `ИзбранноеРаботыПользователя`); - пользовательским настройкам отчетов (метод `УстановитьТекущиеПользовательскиеНастройки` расширения управляемой формы отчета); то при отсутствии права `СохранениеДанныхПользователя` этот код должен пропускаться без влияния на основные сценарии работы пользователя. Если в конфигурации есть отдельные элементы интерфейса для пользовательских настроек (история вводимых значений, флажки `Запомнить мой выбор` и т.п.), они не должны быть доступны пользователям без этого права. Если используется БСП, для работы с общими настройками используйте функции `ХранилищеОбщихНастроекЗагрузить` и `ХранилищеОбщихНастроекСохранить` общего модуля `ОбщегоНазначения`. #### 4.1. Если отдельным пользователям нужен временный или постоянный доступ на просмотр всех данных информационной базы без ограничений, поставляйте отдельные роли для такого сценария. Типовые примеры: - временный доступ для аудитора; - постоянный доступ для собственника или директора. #### 4.2. Если роли в конфигурации построены по должностям (`Директор`, `Бухгалтер`, `Кладовщик` и т.п.), добавьте отдельную роль `ТолькоПросмотр` (`ViewOnly`). Роль `ТолькоПросмотр` должна включать: - [x] `Чтение` - [x] `Использование` - [x] `Просмотр` - [x] `Ввод по строке` (если применимо) Эти права задавайте для большинства объектов метаданных. Исключение: технологические данные, которые не показываются пользователю и всегда используются в привилегированном режиме. #### 4.3. Если роли построены по отдельным функциям, назначайте пользователям комбинации ролей, которые дают доступ только на чтение. Примеры функциональных ролей: - `ЧтениеПроизводственныхДокументов`; - `ЧтениеСкладскихДокументов`; - `ЧтениеКассовыхДокументов`. В составе конфигурации поставляйте типовые комбинации таких ролей (например, готовые профили для аудитора, собственника, директора). Если пользователю нужен неограниченный просмотр всех данных, для него отключайте (не задавайте) условия ограничения доступа на уровне записей (`RLS`). #### 5. Ни в одной роли, включая `ПолныеПрава` и `АдминистраторСистемы`, не должны быть установлены следующие права (кроме отдельных обоснованных случаев): - [ ] `Интерактивное удаление` - [ ] `Интерактивное удаление предопределенных данных` - [ ] `Интерактивная пометка удаления предопределенных данных` - [ ] `Интерактивное снятие пометки удаления предопределенных данных` - [ ] `Интерактивное удаление помеченных предопределенных данных` Право `Удаление` рекомендуется оставлять только в ролях `ПолныеПрава` и `АдминистраторСистемы`. - [x] `Удаление` #### Проверки [#v8cs:right-delete](https://v8std.ru/diagnostics/v8-code-style/right-delete/) ## Стандартные роли в расширениях конфигурации #### 6. При разработке расширений не рекомендуется заимствовать и изменять роли `АдминистраторСистемы` и `ПолныеПрава`. Добавляйте в расширение собственные роли по описанному ниже принципу. #### 6.1. Если права на все объекты расширения одинаковые для всех категорий пользователей: - создайте роль `ОбщиеПрава`; - настройте в ней нужные права на объекты расширения; - включите роль в `Основные роли` расширения. #### 6.2. Если права на объекты расширения различаются для администратора и пользователей, создайте две роли: - `ПолныеПрава` (включается в `Основные роли` расширения); - `БазовыеПрава`. #### 6.3. Если права различаются для администратора, пользователей и внешних пользователей, создайте три роли: - `ПолныеПрава` (включается в `Основные роли` расширения); - `БазовыеПрава`; - `БазовыеПраваВнешнихПользователей`. Подробнее про внешних пользователей см. в документации БСП. #### 6.4.1. В конфигурациях на базе БСП роли из пп. [6.1](https://v8std.ru/std/488/#61)-[6.3](https://v8std.ru/std/488/#63) автоматически включаются в профили групп доступа при установке расширения: - роль `ОбщиеПрава` включается во все профили с ролями `БазовыеПраваБСП`, `БазовыеПраваВнешнихПользователейБСП`, `ПолныеПрава`; - роль `БазовыеПрава` включается в профили с ролью `БазовыеПраваБСП`; - роль `БазовыеПраваВнешнихПользователей` включается в профили с ролью `БазовыеПраваВнешнихПользователейБСП`; - роль `ПолныеПрава` включается в профили с ролью `ПолныеПрава`. #### 6.4.2. Если в расширении нужна гибкая настройка прав доступа, дополнительно проектируйте и создавайте прикладные роли. Такие роли автоматически в профили не включаются. Их можно: - программно добавлять в поставляемые профили; - интерактивно назначать в справочнике `Профили групп доступа`. #### 6.5. В конфигурациях без БСП (или без использования профилей) роли расширений из пп. [6.1](https://v8std.ru/std/488/#61)-[6.3](https://v8std.ru/std/488/#63) назначайте пользователям ИБ: - программно средствами встроенного языка; - интерактивно. Так расширение можно единообразно подключать как в конфигурациях на БСП, так и в конфигурациях без БСП, без изменения состава ролей расширения. #### См. также - [#std485: Использование привилегированного режима](https://v8std.ru/std/485/) - [#std658: Эффективные условия запросов](https://v8std.ru/std/658/) - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Проверки [#v8cs:right-active-users](https://v8std.ru/diagnostics/v8-code-style/right-active-users/) [#v8cs:right-administration](https://v8std.ru/diagnostics/v8-code-style/right-administration/) [#v8cs:right-all-functions-mode](https://v8std.ru/diagnostics/v8-code-style/right-all-functions-mode/) [#v8cs:right-configuration-extensions-administration](https://v8std.ru/diagnostics/v8-code-style/right-configuration-extensions-administration/) [#v8cs:right-data-administration](https://v8std.ru/diagnostics/v8-code-style/right-data-administration/) [#v8cs:right-exclusive-mode](https://v8std.ru/diagnostics/v8-code-style/right-exclusive-mode/) [#v8cs:right-interactive-open-external-data-processors](https://v8std.ru/diagnostics/v8-code-style/right-interactive-open-external-data-processors/) [#v8cs:right-interactive-open-external-reports](https://v8std.ru/diagnostics/v8-code-style/right-interactive-open-external-reports/) [#v8cs:right-output-to-printer-file-clipboard](https://v8std.ru/diagnostics/v8-code-style/right-output-to-printer-file-clipboard/) [#v8cs:right-save-user-data](https://v8std.ru/diagnostics/v8-code-style/right-save-user-data/) [#v8cs:right-start-automation](https://v8std.ru/diagnostics/v8-code-style/right-start-automation/) [#v8cs:right-start-external-connection](https://v8std.ru/diagnostics/v8-code-style/right-start-external-connection/) [#v8cs:right-start-thick-client](https://v8std.ru/diagnostics/v8-code-style/right-start-thick-client/) [#v8cs:right-start-thin-client](https://v8std.ru/diagnostics/v8-code-style/right-start-thin-client/) [#v8cs:right-start-web-client](https://v8std.ru/diagnostics/v8-code-style/right-start-web-client/) [#v8cs:right-update-database-configuration](https://v8std.ru/diagnostics/v8-code-style/right-update-database-configuration/) [#v8cs:right-view-event-log](https://v8std.ru/diagnostics/v8-code-style/right-view-event-log/) [#acc:162](https://v8std.ru/diagnostics/acc/162/) [#acc:164](https://v8std.ru/diagnostics/acc/164/) [#acc:165](https://v8std.ru/diagnostics/acc/165/) [#acc:192](https://v8std.ru/diagnostics/acc/192/) [#acc:193](https://v8std.ru/diagnostics/acc/193/) [#acc:194](https://v8std.ru/diagnostics/acc/194/) [#acc:195](https://v8std.ru/diagnostics/acc/195/) [#acc:218](https://v8std.ru/diagnostics/acc/218/) [#acc:219](https://v8std.ru/diagnostics/acc/219/) [#acc:220](https://v8std.ru/diagnostics/acc/220/) [#acc:224](https://v8std.ru/diagnostics/acc/224/) [#acc:251](https://v8std.ru/diagnostics/acc/251/) [#acc:419](https://v8std.ru/diagnostics/acc/419/) [#acc:420](https://v8std.ru/diagnostics/acc/420/) [#acc:1046](https://v8std.ru/diagnostics/acc/1046/) [#acc:1149](https://v8std.ru/diagnostics/acc/1149/) [#acc:1150](https://v8std.ru/diagnostics/acc/1150/) #### Источник https://its.1c.ru/db/v8std#content:488 ### std490 - Блокировка данных объекта для редактирования из кода #std490 URL: https://v8std.ru/std/490/ Markdown URL: https://v8std.ru/std/490.md Source path: std/490.md Aliases: std490, #std490, std 490, стандарт 490 Related: diagnostic:acc:1327, diagnostic:acc:1328, standard:std648 External sources: https://its.1c.ru/db/v8std#content:490 ID: #std490 # Блокировка данных объекта для редактирования из кода #### 1.1. Перед изменением существующего объекта информационной базы из встроенного языка предварительно устанавливайте блокировку данных для редактирования (объектную блокировку). Это позволяет: - проверить, не заблокирован ли объект в другом месте; - снизить риск конкурентного изменения данных в других сеансах или экземплярах объекта. Если не устанавливать блокировку на время изменения и записи, пользователь может не сохранить свои правки из-за конкурентной записи тех же данных в другом сеансе. Блокировка данных для редактирования не запрещает запись этих данных в других сеансах полностью. Она только не позволяет нескольким объектам одновременно установить блокировку одних и тех же данных. В отличие от [#std648: транзакционных блокировок данных](https://v8std.ru/std/648/), такая блокировка предназначена для конкурентной работы пользователей с объектами ИБ (документами, элементами справочников и т.д.) Подробнее о механизме блокировки данных для редактирования см. в документации платформы `1С:Предприятие 8`. #### 1.2. Для блокировки из встроенного языка используйте метод `Заблокировать()` у объекта или метод глобального контекста `ЗаблокироватьДанныеДляРедактирования()`. #### Пример 1 Нужно заблокировать объект и, если блокировка получена, изменить данные. Если объект уже заблокирован, платформа выдаст исключение с информацией о блокирующем сеансе. ```bsl ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); // Выполнить блокировку объекта от изменения другими режимами // или пользователями; в случае блокировки - // вывести пользователю сообщение об исключении. ФайлОбъект.Заблокировать(); // Затем изменить и записать объект ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); ФайлОбъект.Записать(); ``` Аналогично через глобальный метод: ```bsl ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); // Выполнить блокировку объекта от изменения другими режимами // или пользователями; в случае блокировки - // вывести пользователю сообщение об исключении. ЗаблокироватьДанныеДляРедактирования(ДанныеФайла.Ссылка); // Затем изменить и записать объект ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); ФайлОбъект.Записать(); ``` #### Пример 2 Нужно пропускать обработку объекта, если он заблокирован, и повторять попытку при следующем запуске (например, из фонового или регламентного задания). ```bsl ФайлОбъект = ТекущаяВерсия.ПолучитьОбъект(); // Выполнить блокировку объекта от изменения другими режимами или пользователями. УстановитьПолноеНаименование = Истина; Попытка ФайлОбъект.Заблокировать(); Исключение // в случае блокировки - не выполнять изменение объекта УстановитьПолноеНаименование = Ложь; // записать предупреждение в журнал регистрации ЗаписьЖурналаРегистрации(НСтр("ru = 'Фоновое обновление имен файлов'", Метаданные.ОсновнойЯзык.КодЯзыка), УровеньЖурналаРегистрации.Предупреждение,, ФайлОбъект, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; // Пропустить обработку объекта, если он заблокирован. Если УстановитьПолноеНаименование Тогда ФайлОбъект.ПолноеНаименование = ПолноеНаименование; ФайлОбъект.Записать(); КонецЕсли; ``` #### 1.3. При редактировании данных в формах платформа `1С:Предприятие` автоматически устанавливает блокировку объекта, который указан как основной реквизит формы. #### 2. Не проверяйте блокировку объектов для редактирования в случаях: - выполнения операций с более высоким приоритетом относительно интерактивных действий пользователя (например, загрузка данных при обмене); - действий, которые гарантированно выполняются в монопольном режиме (например, процедуры обновления и первоначального заполнения ИБ). #### См. также - [#std648: Ответственное чтение данных](https://v8std.ru/std/648/) #### Проверки [#acc:1327](https://v8std.ru/diagnostics/acc/1327/) [#acc:1328](https://v8std.ru/diagnostics/acc/1328/) #### Источник https://its.1c.ru/db/v8std#content:490 ### std491 - Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным #std491 URL: https://v8std.ru/std/491/ Markdown URL: https://v8std.ru/std/491.md Source path: std/491.md Aliases: std491, #std491, std 491, стандарт 491 Related: standard:std413, standard:std470 External sources: https://its.1c.ru/db/v8std#content:491 ID: #std491 # Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным При работе с ограничениями доступа к данным платформа формирует кеш запросов ограничений. Кеш содержит запросы со значениями параметров сеанса и функциональных опций на момент формирования. Если менять значения параметров сеанса или функциональных опций, которые участвуют в запросах ограничений доступа, накопленный кеш очищается. Это приводит к заметному снижению производительности запросов к данным. Рекомендации: - устанавливайте значения параметров сеанса `по требованию` в обработчике `УстановкаПараметровСеанса` модуля сеанса; - не изменяйте часто значения функциональных опций в процессе работы системы. #### См. также - [#std413: Использование параметров сеанса](https://v8std.ru/std/413/) - [#std470: Использование функциональных опций](https://v8std.ru/std/470/) #### Источник https://its.1c.ru/db/v8std#content:491 ### std492 - Обработчики событий модуля формы, подключаемые из кода #std492 URL: https://v8std.ru/std/492/ Markdown URL: https://v8std.ru/std/492.md Source path: std/492.md Aliases: std492, #std492, std 492, стандарт 492 Related: diagnostic:acc:100, diagnostic:v8cs:module-attachable-event-handler-name External sources: https://its.1c.ru/db/v8std#content:492 ID: #std492 # Обработчики событий модуля формы, подключаемые из кода Если обработчик формы назначается программно через `УстановитьДействие`, у процедуры должен быть префикс `Подключаемый_` (англ. `Attachable_`). #### 1. Используйте префикс `Подключаемый_` для всех обработчиков, которые подключаются из кода. Это помогает при проверке конфигурации с флажком "Поиск неиспользуемых процедур и функций": - быстро отделять реально неиспользуемые процедуры от подключаемых динамически; - меньше тратить времени на анализ ложных срабатываний. #### 2. Если подключение обработчика делается прямо в модуле формы, предупреждение о неиспользуемой процедуре обычно не возникает. #### Неправильно ```bsl Элементы.КонтактнаяИнформация.УстановитьДействие("НачалоВыбора", "КонтактнаяИнформацияНачалоВыбора"); Процедура КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ... КонецПроцедуры ``` При подключении обработчика из другого модуля проверка `Поиск неиспользуемых процедур и функций` может показать: ```log Справочник._ДемоПартнеры.Форма.ФормаЭлемента.Форма: Не обнаружено ссылок на процедуру "КонтактнаяИнформацияНачалоВыбора" ``` #### Правильно ```bsl Элементы.КонтактнаяИнформация.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ... КонецПроцедуры ``` #### Проверки [#v8cs:module-attachable-event-handler-name](https://v8std.ru/diagnostics/v8-code-style/module-attachable-event-handler-name/) [#acc:100](https://v8std.ru/diagnostics/acc/100/) #### Источник https://its.1c.ru/db/v8std#content:492 ### std494 - Предварительная инициализация локальных переменных #std494 URL: https://v8std.ru/std/494/ Markdown URL: https://v8std.ru/std/494.md Source path: std/494.md Aliases: std494, #std494, std 494, стандарт 494 Related: нет External sources: https://its.1c.ru/db/v8std#content:494 ID: #std494 # Предварительная инициализация локальных переменных В блоках, где вычисляются локальные переменные, явно задавайте начальные значения. Это снижает риск ошибок времени выполнения, когда переменная остается `Неопределено`, а следующий код ожидает конкретный тип. #### Неправильно ```bsl Если ЧтоТоТам Тогда МояПеременная = 10; ИначеЕсли // ряд следующих веток … КонецЕсли; ... = МояПеременная; // если ЧтоТоТам не ИСТИНА, переменная может быть Неопределено ``` #### Правильно ```bsl МояПеременная = 0; // значение по умолчанию Если ЧтоТоТам Тогда МояПеременная = 10; ИначеЕсли // ряд следующих веток … КонецЕсли; ... = МояПеременная; // переменная всегда имеет числовое значение ``` Эта рекомендация особенно важна для больших блоков `Если / ИначеЕсли / Иначе`, где визуально сложно проверить все ветки инициализации. #### Источник https://its.1c.ru/db/v8std#content:494 ### std496 - Чтение отдельных реквизитов объекта из базы данных #std496 URL: https://v8std.ru/std/496/ Markdown URL: https://v8std.ru/std/496.md Source path: std/496.md Aliases: std496, #std496, std 496, стандарт 496 Related: нет External sources: http://v8.1c.ru/libraries/ssl/index.htm, https://its.1c.ru/db/v8std#content:496 ID: #std496 # Чтение отдельных реквизитов объекта из базы данных При чтении отдельных реквизитов из базы учитывайте: вызов `ПолучитьОбъект` или обращение к реквизитам через точку от ссылки загружает объект целиком, включая табличные части. Поэтому для чтения отдельных реквизитов используйте запрос. #### Неправильно ```bsl Процедура ЗаполнитьКодИНаименованиеСтраны() СтранаСсылка = ... // получаем ссылку на элемент справочника КодСтраны = СтранаСсылка.Код; // первое обращение загружает объект целиком НаименованиеСтраны = СтранаСсылка.Наименование; КонецПроцедуры ``` #### Правильно ```bsl Процедура ЗаполнитьКодИНаименованиеСтраны() Запрос = Новый Запрос( "ВЫБРАТЬ | СтраныМира.Код, | СтраныМира.Наименование |ИЗ | Справочник.СтраныМира КАК СтраныМира |ГДЕ | СтраныМира.Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка", Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); КодСтраны = Выборка.Код; НаименованиеСтраны = Выборка.Наименование; КонецПроцедуры ``` Для упрощения синтаксиса можно использовать функции `ЗначенияРеквизитовОбъекта` и `ЗначениеРеквизитаОбъекта` из [Библиотеки стандартных подсистем](http://v8.1c.ru/libraries/ssl/index.htm). Тогда пример можно записать так: ```bsl Процедура ЗаполнитьКодИНаименованиеСтраны() ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтранаСсылка, "Код, Наименование"); КодСтраны = ЗначенияРеквизитов.Код; НаименованиеСтраны = ЗначенияРеквизитов.Наименование; КонецПроцедуры ``` #### Источник https://its.1c.ru/db/v8std#content:496 ### std497 - Запись событий в историю работы пользователя #std497 URL: https://v8std.ru/std/497/ Markdown URL: https://v8std.ru/std/497.md Source path: std/497.md Aliases: std497, #std497, std 497, стандарт 497 Related: нет External sources: https://its.1c.ru/db/v8std#content:497 ID: #std497 # Запись событий в историю работы пользователя В историю работы пользователя автоматически попадают события интерактивного добавления и изменения объектов информационной базы (документы, элементы справочников и т.д.). Дополнительно рекомендуется записывать и другие события, которые приводят к записи объектов в результате действий пользователя. Например, команду `Поместить файл` для элемента справочника `Файлы`. Для добавления событий используется объект `ИсторияРаботыПользователя` типа `МенеджерИсторииРаботыПользователя`. #### Пример ```bsl &НаКлиенте Процедура ПоместитьФайл(Команда) // Поместить файл в базу. // ... // Добавить событие в историю работы пользователя. ИсторияРаботыПользователя.Добавить(ПолучитьНавигационнуюСсылку(Объект.Ссылка)); КонецПроцедуры ``` #### Источник https://its.1c.ru/db/v8std#content:497 ### std498 - Использование Журнала регистрации #std498 URL: https://v8std.ru/std/498/ Markdown URL: https://v8std.ru/std/498.md Source path: std/498.md Aliases: std498, #std498, std 498, стандарт 498, журнал регистрации, запись журнала регистрации, UsageWriteLogEvent Related: - diagnostic:acc:152 - diagnostic:acc:153 - diagnostic:acc:154 - diagnostic:acc:156 - diagnostic:acc:157 - diagnostic:acc:161 - diagnostic:acc:370 - diagnostic:acc:371 - diagnostic:bslls:UsageWriteLogEvent - standard:std761 - standard:std784 External sources: https://its.1c.ru/db/v8std#content:498 ID: #std498 # Использование Журнала регистрации #### 1. Журнал регистрации хранит события, которые возникают в работе пользователей с информационной базой. При администрировании журнал анализируют в разных разрезах: какие события были в момент времени, что делал конкретный пользователь и т.д. #### 2. Пишите события в журнал регистрации из встроенного языка, когда администратору нужна дополнительная диагностика, которую платформа не пишет автоматически. Это актуально и для интерактивной бизнес-логики, и для фоновых/регламентных заданий. Одна запись журнала должна соответствовать одному событию. #### 2.1. Используйте строковый идентификатор типа события. Типы событий группируйте по функциональному признаку: `НазваниеГруппыСобытий.НазваниеСобытия`. Например, лучше: - `Поручения.Уведомление о новых задачах`; - `Поручения.Уведомление о зависших задачах`. Хуже: - `Уведомление о новых задачах`; - `Уведомление о зависших задачах`. Не включайте в тип события конкретные данные из ИБ или внешних систем. Например, неправильно: - `Не удалось отменить проведение документа `; - `В информационной базе не найден сотрудник Найденова, банковская карта 3333`. Метаданные события передавайте в параметр `Метаданные`, данные — в параметр `Данные` метода `ЗаписьЖурналаРегистрации`. Типы событий делайте более общими, например: - `Проведение документов.Не удалось отменить проведение`; - `Сотрудники.В информационной базе не найден сотрудник`. Текст типа события должен быть локализуемым и задаваться на основном языке конфигурации. #### 2.2. Выбирайте уровень важности события по смыслу: - `Ошибка` — критичные события и сбои; - `Предупреждение` — потенциальные проблемы и нефатальные ошибки; - `Информация` — успешные действия; - `Примечание` — менее значимые сообщения. #### 2.3. Комментарий — это текстовая неструктурированная информация о событии. Не объединяйте в один комментарий несколько событий. #### Неправильно Один комментарий содержит целую последовательность разных событий: ```text [01.01.2010 00:00:01] Начало инициализации обмена данными... [01.01.2010 00:00:02] Окончание инициализации обмена данными... [01.01.2010 00:00:03] Начало процесса обмена данными... [01.01.2010 00:00:04] Начало записи изменений... [01.01.2010 00:00:05] Окончание записи изменений... [01.01.2010 00:00:06] Окончание процесса обмена данными... [01.01.2010 00:00:07] Выполнено, выгрузка данных... ``` Пишите столько записей, сколько событий реально произошло. Не помещайте в комментарий текстовые данные неизвестного объема (содержимое файлов, ответы веб-сервисов и т.п.). Ориентир по размеру — до `10 Кб`. Для записи данных об исключении используйте: ```bsl ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ``` Пример регистрации дополнительных событий подсистемы: ```bsl Попытка ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие с возможной ошибкой'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начато действие'")); ДействиеСВозможнойОшибкой(ОбъектДействия); ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие с возможной ошибкой'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Завершено действие'")); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие с возможной ошибкой'", КодОсновногоЯзыка), УровеньЖурналаРегистрации.Ошибка, , , НСтр("ru = 'Во время выполнения действия произошла неизвестная ошибка.'") + Символы.ПС + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ``` Переменная `КодОсновногоЯзыка` должна содержать код языка хранения данных. См. [#std784: Автогенерированные данные в информационной базе: требования по локализации, п. 1](https://v8std.ru/std/784/) #### 3. Не используйте выборки из журнала регистрации там, где критична высокая скорость. С ростом объема журнала скорость выборки снижается пропорционально. Для протоколирования производительных сценариев лучше: - использовать отдельный регистр; - обращаться к специализированным объектам платформы (например, `МенеджерФоновыхЗаданий` для истории фоновых заданий). Это же учитывайте при разработке отчетов по журналу регистрации. #### См. также - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) #### Проверки [#bslls:UsageWriteLogEvent](https://v8std.ru/diagnostics/bslls/UsageWriteLogEvent/) [#acc:152](https://v8std.ru/diagnostics/acc/152/) [#acc:153](https://v8std.ru/diagnostics/acc/153/) [#acc:154](https://v8std.ru/diagnostics/acc/154/) [#acc:156](https://v8std.ru/diagnostics/acc/156/) [#acc:157](https://v8std.ru/diagnostics/acc/157/) [#acc:161](https://v8std.ru/diagnostics/acc/161/) [#acc:370](https://v8std.ru/diagnostics/acc/370/) [#acc:371](https://v8std.ru/diagnostics/acc/371/) #### Источник https://its.1c.ru/db/v8std#content:498 ### std499 - Перехват исключений в коде #std499 URL: https://v8std.ru/std/499/ Markdown URL: https://v8std.ru/std/499.md Source path: std/499.md Aliases: std499, #std499, std 499, стандарт 499 Related: - diagnostic:acc:1319 - diagnostic:acc:1320 - diagnostic:acc:280 - diagnostic:bslls:MissingCodeTryCatchEx - diagnostic:bslls:TryNumber - diagnostic:bslls:UsageWriteLogEvent - diagnostic:v8cs:begin-transaction - diagnostic:v8cs:commit-transaction - diagnostic:v8cs:empty-except-statement - diagnostic:v8cs:lock-out-of-try - diagnostic:v8cs:rollback-transaction - standard:std783 External sources: https://its.1c.ru/db/v8std#content:542, https://its.1c.ru/db/v8std#content:499 ID: #std499 # Перехват исключений в коде #### 1. Не перехватывайте исключения без необходимости. Необработанное исключение: - выводится пользователю; - записывается в журнал регистрации; - при необходимости отправляется в сервис регистрации ошибок. Для распространенных ошибок платформа уже содержит категории и шаблоны сообщений. В сервис регистрации обычно отправляются ошибки программного кода, например: `Значение не является значением объектного типа`, `Поле объекта не обнаружено`, `Слишком много фактических параметров`, `Ошибка при вызове метода контекста`. #### 2. Если технологический текст исключения непонятен пользователю, дополняйте его прикладным пояснением, типовыми причинами и рекомендациями. Это особенно важно для ошибок интеграции и внешних ресурсов: - почтовые серверы; - веб-сервисы; - принтеры; - криптопровайдеры; - каналы связи. #### Проверки [#v8cs:empty-except-statement](https://v8std.ru/diagnostics/v8-code-style/empty-except-statement/) #### 2.1. В таких случаях допустимо перехватить и перевызвать исключение с уточнением, но без потери исходной информации об ошибке. Блоки `Попытка ... Исключение` размещайте локально, только вокруг потенциально проблемного вызова. Не открывайте широкий блок `Попытка` вокруг большого участка кода, чтобы не перехватывать несвязанные ошибки соседнего кода. #### Правильно ```bsl Попытка ЗагрузитьФайлИзИнтернета(...); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстСообщения = ОбработкаОшибок.СообщениеОбОшибкеДляПользователя(ИнформацияОбОшибке); ТекстСообщения = НСтр("ru = 'Не удалось загрузить файл классификатора АУЦ:'") + Символы.ПС + ТекстСообщения + Символы.ПС + НСтр("ru = 'Возможные причины: | • Нет подключения к Интернету; | • На веб-узле возникли неполадки; | • Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету; | • Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.'"); ДляАдминистратора = ДиагностикаСоединенияСИнтернет(); ВызватьИсключение(ТекстСообщения, , , ДляАдминистратора, ИнформацияОбОшибке); КонецПопытки; ``` #### Рекомендация Проверяйте, как исключение выглядит для пользователя, без отладки и без режима технического специалиста. В этих режимах поведение и внешний вид окна исключения различаются. #### 2.2. В особых сценариях (например, обработчики обновления информационной базы) допустима собственная обработка исключения без `ВызватьИсключение`. В таком случае исключение не перевызывается, а обрабатывается. #### Правильно - фильтруйте и отправляйте ошибки программного кода в сервис регистрации ошибок (см. `ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории()` и `ОтчетОбОшибке.Отправить()`); - фиксируйте причину ошибки в журнале регистрации для диагностики администратором; - записывайте в журнал подробное представление исключения, а пользовательское сообщение добавляйте в текст ошибки (см. `ОбработкаОшибок.ПодробноеПредставлениеОшибки()` и `ОбработкаОшибок.СообщениеОбОшибкеДляПользователя()`). #### Неправильно не используйте `ОписаниеОшибки()`; #### Правильно `ОбработкаОшибок.ПодробноеПредставлениеОшибки()` #### Неправильно не используйте `ОбработкаОшибок.КраткоеПредставлениеОшибки()` #### Правильно `ОбработкаОшибок.СообщениеОбОшибкеДляПользователя()`. #### 3. Частные случаи некорректного перехвата исключений. #### 3.1. Не анализируйте текст исключения для интерпретации причины ошибки. Текст исключения может меняться в зависимости от локализации и версии платформы или конфигурации. Текст пользователю выводите «как есть». При необходимости добавляйте прикладное пояснение операции и возможные причины. #### Пример ```bsl Попытка ЗагрузитьФайлИзИнтернета(...); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстСообщения = ОбработкаОшибок.СообщениеОбОшибкеДляПользователя(ИнформацияОбОшибке); ТекстСообщения = НСтр("ru = 'Не удалось загрузить файл классификатора АУЦ:'") + Символы.ПС + ТекстСообщения + Символы.ПС + НСтр("ru = 'Возможные причины: | • Нет подключения к Интернету; | • На веб-узле возникли неполадки; | • Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету; | • Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.'"); ДляАдминистратора = ДиагностикаСоединенияСИнтернет(); ВызватьИсключение(ТекстСообщения, , , ДляАдминистратора, ИнформацияОбОшибке); КонецПопытки; ``` Если в конфигурации используется БСП, применяйте `ОбщегоНазначенияКлиентСервер.УточнениеИсключения()`: #### Пример с БСП ```bsl Попытка ЗагрузитьФайлИзИнтернета(...); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); Уточнение = ОбщегоНазначенияКлиентСервер.УточнениеИсключения( ИнформацияОбОшибке, НСтр("ru = 'Не удалось загрузить файл классификатора АУЦ:'")); Уточнение.Текст = Уточнение.Текст + Символы.ПС + НСтр("ru = 'Возможные причины: | • Нет подключения к Интернету; | • На веб-узле возникли неполадки; | • Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют попытки программы подключиться к Интернету; | • Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.'"); ДляАдминистратора = ДиагностикаСоединенияСИнтернет(); ВызватьИсключение(Уточнение.Текст, Уточнение.Категория, , ДляАдминистратора, ИнформацияОбОшибке); КонецПопытки; ``` #### Иллюстрация Изображение: Пример окна исключения с уточненным сообщением (499.exception-dialog.png) #### 3.2. Недопустимо перехватывать любые исключения бесследно для системного администратора. #### Неправильно ```bsl Попытка // код, приводящий к вызову исключения ... Исключение // перехват любых исключений КонецПопытки; ``` Как правило, такая конструкция скрывает реальную проблему, которую потом невозможно диагностировать. #### Правильно ```bsl Попытка // код, приводящий к вызову исключения ... Исключение // Пояснение причин перехвата всех исключений «незаметно» от пользователя. // ... // И запись события в журнал регистрации для системного администратора. ЗаписьЖурналаРегистрации( НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ``` #### 4. Порядок обработки исключений при использовании транзакций описан в стандарте [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### См. также - [#std542: Доступ к файловой системе из кода конфигурации](https://its.1c.ru/db/v8std#content:542), удаление временных файлов. - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Проверки [#bslls:MissingCodeTryCatchEx](https://v8std.ru/diagnostics/bslls/MissingCodeTryCatchEx/) [#bslls:TryNumber](https://v8std.ru/diagnostics/bslls/TryNumber/) [#bslls:UsageWriteLogEvent](https://v8std.ru/diagnostics/bslls/UsageWriteLogEvent/) [#v8cs:begin-transaction](https://v8std.ru/diagnostics/v8-code-style/begin-transaction/) [#v8cs:commit-transaction](https://v8std.ru/diagnostics/v8-code-style/commit-transaction/) [#v8cs:lock-out-of-try](https://v8std.ru/diagnostics/v8-code-style/lock-out-of-try/) [#v8cs:rollback-transaction](https://v8std.ru/diagnostics/v8-code-style/rollback-transaction/) [#acc:280](https://v8std.ru/diagnostics/acc/280/) [#acc:1319](https://v8std.ru/diagnostics/acc/1319/) [#acc:1320](https://v8std.ru/diagnostics/acc/1320/) #### Источник https://its.1c.ru/db/v8std#content:499 ### std531 - Реквизит «Комментарий» у документов #std531 URL: https://v8std.ru/std/531/ Markdown URL: https://v8std.ru/std/531.md Source path: std/531.md Aliases: std531, #std531, std 531, стандарт 531 Related: diagnostic:acc:108, diagnostic:acc:109, diagnostic:v8cs:md-object-attribute-comment-incorrect-type, diagnostic:v8cs:md-object-attribute-comment-not-exist External sources: https://its.1c.ru/db/v8std#content:531 ID: #std531 # Реквизит «Комментарий» у документов #### 1. Для всех документов рекомендуется создавать реквизит `Комментарий` (строка неограниченной длины). Используйте его для служебных заметок, которые не относятся к прикладной сути документа. Например, для фиксации причины пометки на удаление. Права доступа к реквизиту `Комментарий` должны соответствовать правам на сам документ: - если документ только для чтения, комментарий тоже только для чтения; - если документ можно изменять, комментарий тоже можно изменять. #### Проверки [#v8cs:md-object-attribute-comment-incorrect-type](https://v8std.ru/diagnostics/v8-code-style/md-object-attribute-comment-incorrect-type/) [#v8cs:md-object-attribute-comment-not-exist](https://v8std.ru/diagnostics/v8-code-style/md-object-attribute-comment-not-exist/) #### 2. Если рабочий сценарий предполагает ввод произвольного прикладного текста, создавайте отдельные реквизиты прикладного назначения. #### Пример В документе `Заказ клиента` для фиксации договоренностей с клиентом используйте реквизит `Дополнительная информация`, а не служебный реквизит `Комментарий`. #### 3. В простом варианте для внешнего редактирования комментария используйте функцию `ВвестиСтроку`. Если в конфигурации используется БСП, можно применять специализированную процедуру `ПоказатьФормуРедактированияКомментария` общего модуля `ОбщегоНазначенияКлиент`. #### См. также #### Проверки [#acc:108](https://v8std.ru/diagnostics/acc/108/) [#acc:109](https://v8std.ru/diagnostics/acc/109/) #### Источник https://its.1c.ru/db/v8std#content:531 ### std532 - Установка прав для новых объектов и полей объектов #std532 URL: https://v8std.ru/std/532/ Markdown URL: https://v8std.ru/std/532.md Source path: std/532.md Aliases: std532, #std532, std 532, стандарт 532 Related: diagnostic:acc:145, diagnostic:acc:146 External sources: https://its.1c.ru/db/v8std#content:532 ID: #std532 # Установка прав для новых объектов и полей объектов #### 1. При разработке ролей выбирайте методику установки прав, которая не допускает появления ролей с доступом к полям объекта без доступа к самому объекту. Это помогает избежать проблем на внедрении, когда пользователю по ошибке выдают роль с доступом ко всем реквизитам объекта метаданных. #### 2. - [x] `Устанавливать права для новых объектов` должен быть установлен только у роли `ПолныеПрава`. #### 3. При добавлении новой роли: - [x] `Устанавливать права для реквизитов и табличных частей по умолчанию` должен быть установлен; - [ ] `Независимые права подчиненных объектов` должен быть снят. #### 4. Если нужно дать права только на поля объекта метаданных (просмотр/редактирование реквизитов, табличных частей, измерений, команд и т.п.) без прав на сам объект, сначала: - [x] `Независимые права подчиненных объектов` установите флажок; - [ ] `Устанавливать права для реквизитов и табличных частей по умолчанию` снимите флажок с очисткой прав на все реквизиты и табличные части. #### 5. При добавлении новых объектов или новых полей существующих объектов обязательно настраивайте права на них в соответствующих ролях. #### Пример Пример настройки прав в роли `ДобавлениеИзменениеВидовКонтактнойИнформации`: Изображение: Пример настройки прав в роли (532.roles-rights-example.png) #### Проверки [#acc:145](https://v8std.ru/diagnostics/acc/145/) [#acc:146](https://v8std.ru/diagnostics/acc/146/) #### Источник https://its.1c.ru/db/v8std#content:532 ### std534 - Удаление устаревших объектов метаданных из конфигурации #std534 URL: https://v8std.ru/std/534/ Markdown URL: https://v8std.ru/std/534.md Source path: std/534.md Aliases: std534, #std534, std 534, стандарт 534 Related: diagnostic:acc:1338, diagnostic:acc:1370, diagnostic:acc:1371, diagnostic:acc:236, diagnostic:acc:259, diagnostic:acc:375, standard:std689 External sources: https://its.1c.ru/db/v8std#content:534 ID: #std534 # Удаление устаревших объектов метаданных из конфигурации #### 1. При изменении структуры метаданных, если объект связан с данными ИБ, заранее решите: переносить данные или удалять. #### 1.1. Не удаляйте устаревшие объекты и реквизиты сразу. Пометьте их как устаревшие, добавив префикс `Удалить` (англ. `Obsolete`) к имени. Пример: `ОсновнойДоговор` → `УдалитьОсновнойДоговор` (`ObsoleteMainContract`). В синоним добавляйте префикс **(не используется)** (англ. **(not used)**). Это относится и к стандартным реквизитам. #### 1.2. После изменения структуры обеспечьте перенос данных из устаревших объектов и реквизитов в новую структуру. #### 1.3. Если удаляемый объект — документ-регистратор, а регистры остаются, решите вопрос сохранения движений. Рекомендуется: - запретить формирование движений при проведении таких документов; - запретить снятие пометки удаления; - заменить регистратора в существующих движениях на замещающие документы (например, **Перенос данных**, **Операция**); - пометить все документы этого вида на удаление. #### 1.4. Замените по всей конфигурации обращения к устаревшим объектам и реквизитам на новые. Удалите лишние формы, команды, макеты и код. Исключите устаревшие объекты из ролей (кроме `ПолныеПрава` и `АдминистраторСистемы` см [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/)), подписок и т.п Исключение — код переноса данных (см. п. [1.2](https://v8std.ru/std/534/#12)) #### 1.5. Сортируйте устаревшие объекты и реквизиты в дереве метаданных по общим требованиям к конфигурации. #### 1.6. Рекомендуется очистить устаревшие данные, чтобы они не влияли на размер базы и не потребляли ресурсы. Если перенос сложный и рискованный, очистку можно отложить на один или несколько релизов. Это дает возможность выпустить внеплановый релиз при ошибках переноса. #### 2. Перенос данных требуется также при изменении структуры измерений регистров сведений, если: - удаляется измерение; - сокращается тип измерения (уменьшается длина `Число`/`Строка`/`Дата`, заменяется тип, удаляется тип в составе, удаляется значение перечисления). В этих случаях при реструктуризации возможна ошибка **Записи регистра стали неуникальными**. Решение: - создать новый регистр с правильной структурой, старый пометить как устаревший и перенести записи; - или установить у измерения свойство **Режим сокращения типа** = **Удалять данные**, если перенос не нужен. Устанавливайте **Удалять данные** для измерения регистра сведений, если: - используется универсальный тип (`СправочникСсылка`, `ДокументСсылка` и т.п.); - измерение настраивается в типовых решениях (напрямую, через определяемый тип или через изменения состава значений перечисления). Новый регистр не требуется, если: - добавляется новое измерение; - расширяется состав типов у измерения составного типа. #### 3. Удаляйте устаревшие объекты и реквизиты с префиксом `Удалить` (`Obsolete`) только при выпуске новых версий и при одном из условий: - обновление всегда выполняется последовательно через версию с переносом данных; - вероятность использования старой версии стала нулевой или пренебрежимо малой. #### Пример В версии 1.1 реквизит `ОсновнойДоговор` помечен как устаревший. Тогда обновление с версии 1.0 на 2.0 идет в два шага: - сначала на 1.1, - потом на 2.0. Переход напрямую с 1.0 на 2.0 запрещен. При необходимости выпустите промежуточный релиз для очистки устаревших данных (см. [п. 1.6](https://v8std.ru/std/534/#16)) Иначе реструктуризация регистров может завершиться ошибкой из-за ссылок на устаревшие данные. #### Проверки [#acc:236](https://v8std.ru/diagnostics/acc/236/) [#acc:259](https://v8std.ru/diagnostics/acc/259/) [#acc:375](https://v8std.ru/diagnostics/acc/375/) [#acc:1338](https://v8std.ru/diagnostics/acc/1338/) [#acc:1370](https://v8std.ru/diagnostics/acc/1370/) [#acc:1371](https://v8std.ru/diagnostics/acc/1371/) #### Источник https://its.1c.ru/db/v8std#content:534 ### std535 - Округление результатов арифметических операций в запросах #std535 URL: https://v8std.ru/std/535/ Markdown URL: https://v8std.ru/std/535.md Source path: std/535.md Aliases: std535, #std535, std 535, стандарт 535 Related: нет External sources: https://its.1c.ru/db/metod81/content/2665/hdoc, https://its.1c.ru/db/v8std#content:535 ID: #std535 # Округление результатов арифметических операций в запросах #### 1. Если в операции деления заранее известны порядки числителя и знаменателя, по возможности избегайте деления заведомо маленького числа на заведомо большое. #### Неправильно ```sdbl 0.02 / 28346 * 9287492 ``` #### Правильно ```sdbl 0.02 * 9287492 / 28346 ``` #### 2. При арифметических операциях в запросах платформа обычно поддерживает точность до 8 знаков после запятой. Но из-за особенностей разных СУБД реальная точность может отличаться. Подробнее: [Разрядность результатов выражений и агрегатных функций в языке запросов](https://its.1c.ru/db/metod81/content/2665/hdoc). Если на разных СУБД получается разная точность в операциях: - деления; - `СРЕДНЕЕ`; - умножения (когда у каждого множителя может быть дробная часть), рекомендуется явно задавать разрядность оператором: ```sdbl ВЫРАЗИТЬ(... КАК Число(m, n)) ``` `ВЫРАЗИТЬ` применяйте к операндам, если на какой-то СУБД точность недостаточна. ```sdbl ВЫБРАТЬ ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель КАК Число(25,10)) / ВЫРАЗИТЬ(Таблица.Знаменатель КАК Число(15,10)) КАК Результат ИЗ Таблица КАК Таблица ``` Разрядность операндов задавайте минимально достаточной. Избыточно большая разрядность может ухудшить точность последующих вычислений и снизить скорость выполнения. `ВЫРАЗИТЬ` применяйте к результату, если точность на всех СУБД достаточна, но отличается. ```sdbl ВЫБРАТЬ ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель / Таблица.Знаменатель КАК Число(30,10)) КАК Результат ИЗ Таблица КАК Таблица ``` В ряде случаев целесообразно приводить и операнды, и результат: ```sdbl ВЫБРАТЬ ВЫРАЗИТЬ( ВЫРАЗИТЬ(Таблица.Множитель * Таблица.Числитель КАК Число(25,10)) / ВЫРАЗИТЬ(Таблица.Знаменатель КАК Число(15,10)) КАК Число(30,10) ) КАК Результат ИЗ Таблица КАК Таблица ``` #### Источник https://its.1c.ru/db/v8std#content:535 ### std539 - Запуск регламентных заданий #std539 URL: https://v8std.ru/std/539/ Markdown URL: https://v8std.ru/std/539.md Source path: std/539.md Aliases: std539, #std539, std 539, стандарт 539 Related: standard:std402, standard:std540, standard:std760 External sources: https://its.1c.ru/db/v8std#content:539 ID: #std539 # Запуск регламентных заданий #### 1. Рекомендуется давать пользователю альтернативную возможность выполнять регламентные задания вручную. Например, предлагать запускать «по кнопке» обработку данных, которая обычно выполняется регламентным заданием в фоне. Работа системы не должна зависеть от автоматического выполнения регламентных заданий. В частности: - выполнение регламентных заданий может быть осознанно отключено на кластере серверов `1С:Предприятия`; - в файловом режиме отсутствовала возможность автоматического выполнения регламентных и фоновых заданий (в отличие от клиент-серверного режима `1С:Предприятия` версии `8.2` и ранее, где они выполняются на сервере). Способ ручного запуска зависит от специфики задания. #### 1.1. Если **регламентное задание изменяет в системе данные**, которые нужны конкретному бизнес-процессу или показываются в конкретном рабочем месте (форме), то в этом рабочем месте рекомендуется размещать команду для выполнения этого действия. Например: - в форме поиска в данных выводится дата актуальности индекса, и если индекс неактуален, доступна команда `Обновить`; - в списке входящих писем показывается время последнего приема, и доступна команда `Получить почту`; - в рабочем месте ответственного за партионный учет показывается момент времени последнего распределения по партиям, и доступна команда `Выполнить` для распределения по партиям. Такие рабочие места должны информировать пользователя о дате актуальности данных и предоставлять команду для обновления или обработки (которая выполняет то же действие, что и регламентное задание). Команда должна быть доступна только пользователям с нужными правами. #### Пример Пример ручного запуска задания по очистке устаревших версий объектов: ```bsl &НаСервере Процедура ЗапуститьРегламентноеЗадание() ИмяМетода = Метаданные.РегламентныеЗадания.ОчисткаУстаревшихВерсийОбъектов.ИмяМетода; // Проверка, выполняется ли фоновое задание по очистке устаревших версий. Отбор = Новый Структура; Отбор.Вставить("ИмяМетода", ИмяМетода); Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); ФоновыеЗаданияОчистки = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); Если ФоновыеЗаданияОчистки.Количество() = 0 Тогда НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Запуск вручную: %1'"), РегламентноеЗаданиеМетаданные.Синоним); ФоновыеЗадания.Выполнить(ИмяМетода,,, НаименованиеФоновогоЗадания); КонецЕсли; КонецПроцедуры ``` #### 1.2. Если **регламентное задание влияет на данные, которые отображаются в заранее неизвестном количестве рабочих мест, или влияет на информационную базу в целом**, то нельзя выделить одно конкретное рабочее место для запуска всех таких заданий. Примеры таких заданий: - обновление и перестроение агрегатов; - установка периода рассчитанных итогов. Результат выполнения этих заданий влияет сразу на множество внутренних и внешних отчетов, которые опираются на итоги и агрегаты. В этом случае рекомендуется создавать отдельное рабочее место для выполнения таких заданий. Если в конфигурации используется **Библиотека стандартных подсистем**, такое рабочее место уже входит в подсистему `Регламентные задания` (форма `Регламентные и фоновые задания`). #### 1.3. Если **регламентное задание не изменяет данные в системе**, а формирует отчеты или рассылки, также рекомендуется предусматривать отдельное рабочее место для выполнения таких заданий. Примеры заданий, которые не изменяют данные в базе: - рассылка по почтовым адресатам информации об ошибках из журнала регистрации; - рассылка информации о новых и просроченных задачах; - периодический запуск внешних обработок для рассылки отчетов. Если в конфигурации используется **Библиотека стандартных подсистем**, такое рабочее место уже входит в подсистему `Регламентные задания` (форма `Регламентные и фоновые задания`). #### 2. Для администраторов информационных баз рекомендуется: на время обновления ИБ блокировать выполнение регламентных заданий. Если обновление запускает неподготовленный пользователь, особенно в файловом режиме, рекомендуется дополнительно: - в файловом режиме, при неудачной попытке установки монопольного режима для обновления данных ИБ, предлагать автоматически блокировать работу регламентных заданий (перезапуск программы с ключом `/AllowExecuteScheduledJobs -Off`); - в начале обработчиков регламентных заданий проверять режим работы и прерывать выполнение вызовом исключения, если обновление ИБ еще не завершено. Если в конфигурации используется **Библиотека стандартных подсистем**, первая рекомендация уже реализована в подсистеме `Обновление версии ИБ`. Для второй рекомендации предусмотрена процедура `ПриНачалеВыполненияРегламентногоЗадания()` общего модуля `ОбщегоНазначения`. Ее вызов нужно размещать в начале кода обработчиков регламентных заданий. #### См. также - [#std402: Настройка расписания регламентных заданий](https://v8std.ru/std/402/) - [#std540: Предопределенные регламентные задания](https://v8std.ru/std/540/) - [#std760: Ограничения на регламентные задания при работе в режиме сервиса](https://v8std.ru/std/760/) #### Источник https://its.1c.ru/db/v8std#content:539 ### std540 - Общие требования к регламентным заданиям #std540 URL: https://v8std.ru/std/540/ Markdown URL: https://v8std.ru/std/540.md Source path: std/540.md Aliases: std540, #std540, std 540, стандарт 540 Related: diagnostic:acc:302, diagnostic:acc:496, standard:std402, standard:std539, standard:std760, standard:std767 External sources: https://its.1c.ru/db/v8std#content:540 ID: #std540 # Общие требования к регламентным заданиям #### 1. В общем случае регламентные задания используйте, когда нужно выполнять периодические или однократные действия по расписанию. #### 2. Если регламентные задания не нужно добавлять или удалять в зависимости от действий пользователя или логики конфигурации, используйте предопределенные регламентные задания. Такие задания автоматически создаются в информационной базе с расписанием и состоянием, заданными разработчиком в конфигураторе. Примеры предопределенных заданий: - загрузка курсов валют; - извлечение текста для полнотекстового индексирования; - обновление агрегатов. #### 3.1. Регламентные задания нельзя выполнять, если соответствующая функциональность в программе отключена. Иначе они будут запускать сеансы и расходовать ресурсы сервера `1С:Предприятия`. Поэтому нужно программно управлять признаком предопределенного задания `Использование` в зависимости от включенных функциональных опций (`ФО`). Пример: есть регламентное задание `ПолучениеИОтправкаЭлектронныхПисем` (с установленным флажком `Использование`), которое должно выполняться только при включенной ФО `ИспользоватьПочтовыйКлиент`. #### Неправильно Создавать предопределенное регламентное задание, зависящее от ФО, с установленным флажком `Использование`. #### Правильно Снять флажок `Использование` и управлять использованием задания в зависимости от включения/выключения ФО. Если в конфигурации используется подсистема `Регламентные задания` БСП, для настройки используйте процедуру `ПриОпределенииНастроекРегламентныхЗаданий()` общего модуля `РегламентныеЗаданияПереопределяемый`. #### Пример для БСП ```bsl Настройка = Настройки.Добавить(); Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS; Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент; Настройка.ДоступноВМоделиСервиса = Ложь; ``` После этого в состав определяемого типа `МестоХраненияФункциональныхОпций` добавьте константы, соответствующие ФО, которые используются для управления регламентными заданиями. Для конфигураций без БСП управляйте использованием задания, например, в модуле менеджера значения константы `ИспользоватьПочтовыйКлиент`. #### Пример без БСП ```bsl Процедура ПриЗаписи(Отказ) Задание = РегламентныеЗадания.НайтиПредопределенное( Метаданные.РегламентныеЗадания.ПолучениеИОтправкаЭлектронныхПисем); Если Задание.Использование <> Значение Тогда Задание.Использование = Значение; Задание.Записать(); КонецЕсли; КонецПроцедуры ``` #### 3.2. Дополнительно обезопасьте выполнение регламентного задания, которое могли включить через консоль или другим способом, минуя включение ФО. Для этого в начало процедуры-обработчика добавьте проверку: ```bsl ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(); Если Не ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент") Тогда ВызватьИсключение НСтр("ru = 'Регламентное задание недоступно по функциональным опциям.'"); КонецЕсли; ``` Если используется подсистема `Регламентные задания` БСП и настроены зависимости заданий от ФО (как в п. `3.1`), достаточно вызова, показанного в п. `6`. #### 4.1. Если выполнение регламентного задания зависит от данных информационной базы, флажок `Предопределенное` у регламентного задания следует отключать. Например: - обмен с другими информационными базами должен выполняться с каждой базой по индивидуальному расписанию; - запуск каждой дополнительной обработки должен выполняться по отдельному расписанию. В таких случаях создавайте экземпляры регламентных заданий и параметризуйте их объектами ИБ (например, узлами ИБ, элементами справочника `Дополнительные обработки` и т.п.) из кода встроенного языка через метод `РегламентныеЗадания.СоздатьРегламентноеЗадание()`. В свойстве `Наименование` указывайте представление объекта, на основании которого создается задание. #### Пример Для рассылки отчетов, если настроены расписание и автор: ```bsl // Снимаем ограничение, что только администратор может создавать регламентные задания. УстановитьПривилегированныйРежим(Истина); Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание( Метаданные.РегламентныеЗадания.РассылкаОтчетов); ПараметрыЗадания = Новый Массив; ПараметрыЗадания.Добавить(РассылкаОтчетов); Задание.Параметры = ПараметрыЗадания; Задание.ИмяПользователя = АвторРассылки; Задание.Использование = Истина; Задание.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Рассылка отчетов: %1'"), СокрЛП(РассылкаОтчетов)); Задание.Расписание = РасписаниеРассылки; Задание.Записать(); ``` #### 4.2. Если в конфигурации используется подсистема `Регламентные задания` БСП, нужно запрещать интерактивное создание и запуск параметризованных заданий из формы `Регламентные и фоновые задания`. Для этого укажите такое задание в процедуре `ПриОпределенииНастроекРегламентныхЗаданий()` общего модуля `РегламентныеЗаданияПереопределяемый`. #### Пример ```bsl Настройка = Настройки.Добавить(); Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов; Настройка.Параметризуется = Истина; ``` Также выполните п. `6`. #### 5. Чтобы избежать конфликтных ситуаций, в копиях информационной базы рекомендуется автоматически блокировать все регламентные задания, которые обращаются к внешним ресурсам (рассылка почты, синхронизация с другими программами и т.п.). Это важно, например, если копия ИБ развернута для тестирования или передана в службу технической поддержки. Если используется подсистема `Регламентные задания` БСП, перечислите такие задания в процедуре `ПриОпределенииНастроекРегламентныхЗаданий()` общего модуля `РегламентныеЗаданияПереопределяемый`. #### Пример ```bsl Настройка = Настройки.Добавить(); Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов; Настройка.РаботаетСВнешнимиРесурсами = Истина; ``` И выполните п. `6`. В этом случае при перемещении информационной базы администратору будет задан вопрос об отключении таких заданий. #### 6. Если регламентное задание подпадает под требования п. `3.1`, `4.2`, `5` и используется подсистема `Регламентные задания` БСП, в начало обработчика задания добавляйте вызов: ```bsl ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.<ИмяЗадания>); ``` Первый параметр заполняйте обязательно. #### См. также - [#std402: Настройка расписания регламентных заданий](https://v8std.ru/std/402/) - [#std539: Запуск регламентных заданий](https://v8std.ru/std/539/) - [#std767: Регламентные задания: требования по локализации](https://v8std.ru/std/767/) - [#std760: Ограничения на регламентные задания при работе в режиме сервиса](https://v8std.ru/std/760/) #### Проверки [#acc:302](https://v8std.ru/diagnostics/acc/302/) [#acc:496](https://v8std.ru/diagnostics/acc/496/) #### Источник https://its.1c.ru/db/v8std#content:540 ### std541 - Уточнение сущности объекта метаданных #std541 URL: https://v8std.ru/std/541/ Markdown URL: https://v8std.ru/std/541.md Source path: std/541.md Aliases: std541, #std541, std 541, стандарт 541 Related: нет External sources: https://its.1c.ru/db/v8std#content:541 ID: #std541 # Уточнение сущности объекта метаданных #### 1. Используйте разные типы объектов метаданных для разных сущностей. Например, сущность «организация» описывайте справочником `Организации`, а сущность «подразделение» - отдельным справочником `Подразделения`. #### 2. Для уточнения сущности объекта используйте отдельные реквизиты, которые явно задают вид или состояние. Это могут быть реквизиты типа `Булево` или перечисления. Не определяйте вид объекта по косвенным признакам, например по заполненности другого реквизита. #### Неправильно В справочнике `Организации` использовать только реквизит `ГоловнаяОрганизация` и по его заполненности определять вид организации: «обычная» или обособленное подразделение. #### Правильно Помимо реквизита `ГоловнаяОрганизация` добавить в справочник `Организации` булев реквизит `ОбособленноеПодразделение`. По его значению (`Истина` или `Ложь`) однозначно определять вид организации и необходимость заполнения `ГоловнаяОрганизация`. #### 3. Если у сущности несколько состояний, не заводите несколько булевых реквизитов для каждого состояния. Например, для справочника `Сотрудники` при наличии реквизитов `ДатаПриема` и `ДатаУвольнения` не стоит добавлять пару `ПринятНаРаботу` и `Уволен`. Вместо этого используйте один реквизит типа перечисление со статусами, например: `Работает`, `Уволен`. При необходимости состав статусов можно расширить. #### Источник https://its.1c.ru/db/v8std#content:541 ### std542 - Доступ к файловой системе из кода конфигурации #std542 URL: https://v8std.ru/std/542/ Markdown URL: https://v8std.ru/std/542.md Source path: std/542.md Aliases: std542, #std542, std 542, стандарт 542 Related: - diagnostic:acc:441 - diagnostic:acc:495 - diagnostic:bslls:FileSystemAccess - diagnostic:bslls:MissingTemporaryFileDeletion - diagnostic:bslls:TempFilesDir - diagnostic:v8cs:missing-temporary-file-deletion - standard:std467 - standard:std498 - standard:std761 External sources: https://its.1c.ru/db/v8doc/content/26/hdoc/issogl1_3.20.swpuser.ini, https://its.1c.ru/db/v8std#content:542 ID: #std542 # Доступ к файловой системе из кода конфигурации #### 1. При обращении к файлам и каталогам из кода конфигурации учитывайте права пользователя ОС, от имени которого запущено приложение. #### 1.1. Если код выполняется на клиенте, доступ к файловой системе идет под правами пользователя, который запустил приложение (тонкий, толстый или веб-клиент). Обычно это текущий пользователь ОС. #### 1.2. Если код выполняется на сервере: - в клиент-серверном варианте доступ ограничен правами пользователя, от имени которого запущен сервер `1С:Предприятия`; - в файловом варианте, опубликованном на веб-сервере, доступ ограничен правами пользователя веб-сервера. Рабочие процессы могут быть запущены от имени пользователя, отличного от пользователя агента сервера. Подробно: [описание служебного файла `swpuser.ini`](https://its.1c.ru/db/v8doc/content/26/hdoc/issogl1_3.20.swpuser.ini). #### 2. Запрещено записывать файлы в каталог исполняемых файлов платформы, получаемый через `КаталогПрограммы()`. `КаталогПрограммы()` допустимо использовать только для чтения или запуска файлов. Например, в Windows допустим запуск копии тонкого клиента текущей версии: ```bsl ЗапуститьПриложение(КаталогПрограммы() + "1cv8s.exe"); ``` #### 3. Даже если [#std761: локализация конфигурации на другие языки](https://v8std.ru/std/761/) не планируется, обеспечивайте переносимость автоматически сформированных файлов между ОС с разными кодировками #### 3.1. В именах файлов, которые формируются системой, используйте только английские буквы и цифры. Для текстовых файлов используйте только UTF-8. Это особенно важно для macOS. Ограничение распространяется на файлы обмена, выгрузки, электронные документы и т.п., включая файлы внутри архивов (например, `zip`). Исключение: вы не можете повлиять на формат файла (например, формат внешней системы). #### 3.2. Если имя файла вводит пользователь, разрешайте русскоязычные имена, но дайте возможность транслитерации в латиницу. По умолчанию, если это не ухудшает UX, предлагайте англоязычное имя файла и UTF-8 для текстовых файлов. Рекомендации по имени и кодировке разместите в справке в местах, где пользователь сохраняет файлы и выбирает кодировку. Если конфигурация использует БСП, для транслитерации имен файлов применяйте `СтроковыеФункцииКлиентСервер.СтрокаЛатиницей()`. ## Работа с временными файлами и каталогами При работе с временными файлами и каталогами соблюдайте правила ниже. #### 1. Для получения имени временного файла используйте `ПолучитьИмяВременногоФайла()` (исключение: веб-клиент, см. п. `3.1`). Иначе возможны: - ошибки в многопользовательском режиме; - проблемы с профилями безопасности и правами ОС; - неконтролируемый рост временных файлов. #### Неправильно ```bsl ИмяПромежуточногоФайла = "C:\Временные файлы 1С\TempFile.xml"; Данные.Записать(ИмяПромежуточногоФайла); ``` #### Правильно ```bsl ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("xml"); Данные.Записать(ИмяПромежуточногоФайла); ``` У пользователя может не быть прав на запись в каталог, а при одновременном запуске кода из разных сеансов возникнут конфликты. Если использовать `ПолучитьИмяВременногоФайла()`, платформа контролирует временные файлы и удаляет их автоматически: - при перезапуске рабочего процесса (если файл создан на сервере) или клиентского приложения (если файл создан на клиенте); - через `20` минут после серверного вызова или сеанса, где создан файл (клиент-серверный вариант, платформа `8.3.17` и выше). Если имя временного файла сформировано другим способом и код его не удалил, файл останется в системе на неопределенное время. В больших базах это создает заметную нагрузку. #### Неправильно ```bsl Каталог = КаталогВременныхФайлов(); ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml"; ИмяПромежуточногоФайла = Каталог + ИмяФайла; Данные.Записать(ИмяПромежуточногоФайла); ``` #### Правильно ```bsl ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("xml"); Данные.Записать(ИмяПромежуточногоФайла); ``` Если между созданием и удалением произойдет ошибка, файл останется в каталоге временных файлов. #### 2. Для временного каталога также используйте имя, полученное через `ПолучитьИмяВременногоФайла()` (исключение: веб-клиент, см. п. `3.1`). Это обеспечивает уникальность имени в многопользовательском режиме и автоматическое удаление каталога после перезапуска рабочего процесса сервера или клиента. Внутри такого каталога можно создавать подкаталоги и файлы без дополнительных ограничений. #### 3.1. В веб-клиенте `ПолучитьИмяВременногоФайла()` недоступен. Используйте `КаталогВременныхФайлов()` и `УникальныйИдентификатор`. #### Неправильно ```bsl Каталог = КаталогВременныхФайлов(); ИмяФайла = "TempDataFile.xml"; ИмяПромежуточногоФайла = Каталог + ИмяФайла; Данные.Записать(ИмяПромежуточногоФайла); ``` #### Правильно ```bsl Каталог = КаталогВременныхФайлов(); ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml"; ИмяПромежуточногоФайла = Каталог + ИмяФайла; Данные.Записать(ИмяПромежуточногоФайла); ``` #### 3.2. Если в конфигурацию встроена БСП, для создания временных каталогов на клиенте используйте `ФайловаяСистемаКлиент.СоздатьВременныйКаталог()`. #### 4. После завершения работы временный файл или каталог удаляйте явно. Нельзя рассчитывать только на удаление при следующем запуске платформы: это может привести к исчерпанию свободного места. ```bsl ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("xml"); Данные.Записать(ИмяПромежуточногоФайла); // Работа с файлом ... // Удаляем временный файл Попытка УдалитьФайлы(ИмяПромежуточногоФайла); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие'"), УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; ``` #### Проверки [#v8cs:missing-temporary-file-deletion](https://v8std.ru/diagnostics/v8-code-style/missing-temporary-file-deletion/) #### См. также [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) #### 5. Если временные файлы или каталоги используются на сервере, завершайте работу с ними в рамках одного серверного вызова. В кластере следующий вызов может выполниться на другом компьютере, и файл станет недоступен. Если данные должны жить между серверными вызовами в рамках одного сеанса, используйте временное хранилище платформы (`ПоместитьВоВременноеХранилище()`, `ПолучитьИзВременногоХранилища()`). #### 5.1. В редких случаях временные файлы нужно передавать между сеансами (например, подготовка данных для фонового задания или длительный процесс из нескольких вызовов web-сервиса). Тогда обеспечьте: - общее место хранения, доступное всем серверам кластера; - регистрацию имен файлов и времени создания во вспомогательном регистре сведений; - удаление файлов и записей при штатном завершении процесса; - регламентную очистку просроченных файлов и записей при аварийных сценариях. ## Передача файлов между клиентом и сервером #### 1. Если один и тот же файл обрабатывается и на клиенте, и на сервере, передавайте его через временное хранилище. Используйте `ПоместитьФайлы()`, `ПолучитьФайл()`, `ПолучитьФайлы()`, `НачатьПомещениеФайла()`, `ПоместитьВоВременноеХранилище()`, `ПолучитьИзВременногоХранилища()`. Обычно клиент и сервер кластера работают на разных компьютерах и под разными пользователями ОС, поэтому прямой путь к файлу ненадежен. #### Неправильно ```bsl &НаКлиенте Процедура ОбработатьФайл() ... ИмяФайла = "C:\Файлы для обработки\Загрузка.xml"; Результат = ПроизвестиОбработкуНаСервере(ИмяФайла); ... КонецПроцедуры &НаСервере Функция ПроизвестиОбработкуНаСервере(ИмяФайла) Чтение = Новый ЧтениеТекста(ИмяФайла); ... Результат = Чтение.Прочитать(); Возврат Результат; КонецФункции ``` #### Правильно ```bsl &НаКлиенте Процедура ОбработатьФайл() ... ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml"; ОписаниеОповещения = Новый ОписаниеОповещения( "ОбработатьФайлЗавершение", ЭтотОбъект); НачатьПомещениеФайла(ОписаниеОповещения,, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) ... Результат = ПроизвестиОбработкуНаСервере(Адрес); ... КонецПроцедуры &НаСервере Функция ПроизвестиОбработкуНаСервере(Адрес) Данные = ПолучитьИзВременногоХранилища(Адрес); ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt"); Данные.Записать(ИмяПромежуточногоФайла); Чтение = Новый ЧтениеТекста(ИмяПромежуточногоФайла); ... Результат = Чтение.Прочитать(); ... УдалитьФайлы(ИмяПромежуточногоФайла); Возврат Результат; КонецФункции ``` #### 2. Если данные файла должны храниться между несколькими серверными вызовами, при помещении в хранилище передавайте `УникальныйИдентификаторФормы` в `ПоместитьФайл()`. Такие данные удаляются из временного хранилища только при закрытии формы. При повторном помещении того же файла предыдущее значение удаляйте вручную. #### Неправильно ```bsl &НаКлиенте Процедура ОбработатьФайл() ... // Первый серверный вызов ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml"; ОписаниеОповещения = Новый ОписаниеОповещения( "ОбработатьФайлЗавершение", ЭтотОбъект); НачатьПомещениеФайла(ОписаниеОповещения,, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); ... КонецПроцедуры &НаКлиенте Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) ... Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес); ПродолжитьОбработкуФайла(); ... КонецПроцедуры &НаКлиенте Процедура ПродолжитьОбработкуФайла() ... // Второй серверный вызов с той же версией файла Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес); ... // Третий серверный вызов с новой версией файла ОписаниеОповещения = Новый ОписаниеОповещения( "ПродолжитьОбработкуФайлаЗавершение", ЭтотОбъект); НачатьПомещениеФайла(ОписаниеОповещения,, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) ... Результат = ПроизвестиКонечнуюОбработкуНаСервере(Адрес); ... КонецПроцедуры ``` #### Правильно ```bsl &НаКлиенте Процедура ОбработатьФайл() ... // Первый серверный вызов ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml"; ОписаниеОповещения = Новый ОписаниеОповещения( "ОбработатьФайлЗавершение", ЭтотОбъект); НачатьПомещениеФайла(ОписаниеОповещения,, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); ... КонецПроцедуры &НаКлиенте Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) ... Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес); ПродолжитьОбработкуФайла(); ... КонецПроцедуры &НаКлиенте Процедура ПродолжитьОбработкуФайла() ... // Второй серверный вызов с той же версией файла Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес); ... // Третий серверный вызов с новой версией файла УдалитьИзВременногоХранилища(Адрес); ОписаниеОповещения = Новый ОписаниеОповещения( "ПродолжитьОбработкуФайлаЗавершение", ЭтотОбъект); НачатьПомещениеФайла(ОписаниеОповещения,, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) ... Результат = ПроизвестиКонечнуюОбработкуНаСервере(Адрес); ... КонецПроцедуры ``` В неправильном варианте в хранилище останутся две копии файла: адрес первой копии будет потерян, что приведет к лишнему расходу ресурсов и замедлению работы. #### 3. Если в конфигурацию встроена БСП, для помещения файлов во временное хранилище используйте `ЗагрузитьФайл()` и `ЗагрузитьФайлы()` общего модуля `ФайловаяСистемаКлиент`. Чтобы сохранить данные файла между несколькими серверными вызовами, используйте свойство `ИдентификаторФормы` параметра `ПараметрыЗагрузки`. ```bsl &НаКлиенте Процедура ОбработатьФайл() ... ИмяФайлаДляОбработки = "C:\Файлы для обработки\Загрузка.xml"; ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьФайлЗавершение", ЭтотОбъект); ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла(); ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор; ПараметрыЗагрузки.Интерактивно = Ложь; ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения, ПараметрыЗагрузки, ИмяФайлаДляОбработки); КонецПроцедуры &НаКлиенте Процедура ОбработатьФайлЗавершение(ПомещенныйФайл, ДополнительныеПараметры) ... Результат = ПроизвестиОбработкуНаСервере(Адрес); ... КонецПроцедуры ``` #### См. также - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Проверки [#bslls:FileSystemAccess](https://v8std.ru/diagnostics/bslls/FileSystemAccess/) [#bslls:MissingTemporaryFileDeletion](https://v8std.ru/diagnostics/bslls/MissingTemporaryFileDeletion/) [#bslls:TempFilesDir](https://v8std.ru/diagnostics/bslls/TempFilesDir/) [#acc:441](https://v8std.ru/diagnostics/acc/441/) [#acc:495](https://v8std.ru/diagnostics/acc/495/) #### Источник https://its.1c.ru/db/v8std#content:542 ### std543 - Использование подсистем #std543 URL: https://v8std.ru/std/543/ Markdown URL: https://v8std.ru/std/543.md Source path: std/543.md Aliases: std543, #std543, std 543, стандарт 543 Related: diagnostic:acc:263, diagnostic:acc:264, diagnostic:acc:538 External sources: https://its.1c.ru/db/v8std#content:567:hdoc, https://its.1c.ru/db/v8std#content:543 ID: #std543 # Использование подсистем #### 1. Подсистемы решают две задачи: - формируют разделы командного интерфейса; - группируют объекты метаданных по функциональному признаку для разработки. #### 1.1. Если структура интерфейса и функциональная структура совпадают, можно использовать одну и ту же иерархию подсистем. Для таких подсистем флажок `Включать в командный интерфейс` должен быть установлен. Изображение: Иллюстрация 1 (543.img1.png) Например, разделы интерфейса `Закупки`, `Продажи` и т.д. можно одновременно использовать для отбора объектов в Конфигураторе, переноса объектов и ограничения области глобального поиска. #### 1.2. Если логическая группировка объектов не совпадает с разделами интерфейса, создавайте отдельную иерархию «функциональных» подсистем. Для таких подсистем флажок `Включать в командный интерфейс` должен быть снят. Примеры: - справочник `Номенклатура` логически относится к подсистеме `Нормативно-справочная информация`, но в интерфейсе может использоваться в нескольких разделах; - в раздел `Настройка и администрирование` выносите команды открытия списков объектов из «функциональных» подсистем, отвечающих за администрирование. #### 1.3. Объекты без визуального представления в командном интерфейсе (общие модули, регламентные задания, константы, подписки на события и т.п.) включайте только в «функциональные» подсистемы. #### См. также - [Панель разделов](https://its.1c.ru/db/v8std#content:567:hdoc) #### Проверки [#acc:263](https://v8std.ru/diagnostics/acc/263/) [#acc:264](https://v8std.ru/diagnostics/acc/264/) [#acc:538](https://v8std.ru/diagnostics/acc/538/) #### Источник https://its.1c.ru/db/v8std#content:543 ### std544 - Ограничения на использование экспортных процедур и функций #std544 URL: https://v8std.ru/std/544/ Markdown URL: https://v8std.ru/std/544.md Source path: std/544.md Aliases: std544, #std544, std 544, стандарт 544 Related: diagnostic:acc:250, diagnostic:v8cs:export-method-in-command-form-module External sources: https://its.1c.ru/db/v8std#content:544 ID: #std544 # Ограничения на использование экспортных процедур и функций Не следует размещать экспортные процедуры и функции в модулях команд и общих команд. К этим модулям нет возможности обращаться из внешнего по отношению к ним кода, поэтому экспортные процедуры и функции в этих модулях не имеют смысла. #### Проверки [#v8cs:export-method-in-command-form-module](https://v8std.ru/diagnostics/v8-code-style/export-method-in-command-form-module/) [#acc:250](https://v8std.ru/diagnostics/acc/250/) #### Источник https://its.1c.ru/db/v8std#content:544 ### std547 - Ограничение на использование оператора Перейти #std547 URL: https://v8std.ru/std/547/ Markdown URL: https://v8std.ru/std/547.md Source path: std/547.md Aliases: std547, #std547, std 547, стандарт 547 Related: diagnostic:acc:249, diagnostic:acc:89, diagnostic:v8cs:use-goto-operator External sources: https://its.1c.ru/db/v8std#content:547 ID: #std547 # Ограничение на использование оператора Перейти #### 1. Не используйте оператор `Перейти`. Запутаете себя и других запутаете. Используйте другие способы ветвления кода. #### Неправильно ```bsl Если ПланВидовРасчета = Объект.ПланВидовРасчета Тогда Перейти ~ПланВидовРасчета; КонецЕсли; ``` #### Правильно ```bsl Если ПланВидовРасчета = Объект.ПланВидовРасчета Тогда ОбработатьПланВидовРасчета(); КонецЕсли; ``` #### Проверки [#v8cs:use-goto-operator](https://v8std.ru/diagnostics/v8-code-style/use-goto-operator/) #### 2. Оператор `Перейти` не поддерживается в веб-клиенте. Можно получить ошибку в режиме исполнения. #### Проверки [#acc:89](https://v8std.ru/diagnostics/acc/89/) [#acc:249](https://v8std.ru/diagnostics/acc/249/) #### Источник https://its.1c.ru/db/v8std#content:547 ### std550 - Имена объектов метаданных в конфигурациях #std550 URL: https://v8std.ru/std/550/ Markdown URL: https://v8std.ru/std/550.md Source path: std/550.md Aliases: std550, #std550, std 550, стандарт 550 Related: standard:std413, standard:std469, standard:std470, standard:std474, standard:std488, standard:std543, standard:std706 External sources: - https://its.1c.ru/db/v8std/content/704/hdoc - https://its.1c.ru/db/v8std/content/500/hdoc - https://its.1c.ru/db/v8std/content/501/hdoc - https://its.1c.ru/db/v8std/content/667/hdoc - https://its.1c.ru/db/v8std#content:550 ID: #std550 # Имена объектов метаданных в конфигурациях Стандарт дополняет общие правила именования: [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### 1. Подсистемы именуйте по общим правилам наименования метаданных. #### Примеры `Финансы`, `Маркетинг`, `НастройкаИАдминистирование`. См. также: [#std543: Использование подсистем](https://v8std.ru/std/543/) #### 2. Для именования общих модулей используйте [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### 3. Параметры сеанса именуйте по общим правилам наименования метаданных. #### Примеры `ТекущийПользователь`, `ОбменДаннымиВключен`, `РаботаСВнешнимиРесурсамиЗаблокирована`. См. также: [#std413: Использование параметров сеанса](https://v8std.ru/std/413/) #### 4. Для ролей используйте одну из двух схем: - прикладные роли именуйте по должности: `Бухгалтер`, `Кассир`, `Администратор`; - технические роли (для точной настройки прав) именуйте по разрешаемому действию: `ДобавлениеИзменениеНСИ`, `ЧтениеДополнительныхСведений`. См. также: [#std488: Стандартные роли](https://v8std.ru/std/488/) #### 5. Общие реквизиты именуйте по общим правилам наименования метаданных. #### 6. Для планов обмена используйте такие правила: - для РИБ (`Распределенная ИБ = Истина`) имя должно кратко описывать правило синхронизации: `Полный`, `ПоОрганизациям`, `ПоСкладамИОрганизациям`; - для обмена между конфигурациями имя формируйте из источника и приемника, и в обеих базах имя должно быть одинаковым: `ОбменУправлениеНебольшойФирмойБухгалтерияПредприятия`; - если обмен выполняется между разными редакциями, добавляйте номера редакций: `ОбменУправлениеТорговлей110РозничнаяТорговля10`. #### 7. Критерии отбора именуйте во множественном числе, по списку отбираемых объектов. #### Примеры `СвязанныеДокументы`, `ФайлыВТоме`. #### 8. Подписки на события именуйте от сути действия и образуйте от неопределенной формы глагола. #### Неправильно `ЗапретРедактированияРеквизитовОбъектовПередЗаписьюОбъекта` `НастройкаПорядкаЭлементовПередЗаписью` #### Правильно `ПроверитьИзменениеРеквизитовОбъекта` `ПересчитатьПорядковыйНомерЭлемента` #### 9. Регламентные задания именуйте в единственном числе, от существительного. #### Неправильно `УстановитьПериодРасчитанныхИтогов` `УведомитьИсполнителейОНовыхЗадачах` #### Правильно `УстановкаПериодаРасчитанныхИтогов` `УведомлениеИсполнителейОНовыхЗадачах` #### 10. Функциональные опции, связанные с константами, именуйте по включаемой или выключаемой функциональности. #### Примеры Для типа `Булево`: `ИспользоватьБизнесПроцессыИЗадачи`, `ИспользоватьВерсионированиеОбъектов`. Для других типов: `ПрефиксИнформационнойБазы`, `ВариантыВерсионированияОбъектов`. См. также: [#std470: Использование функциональных опций](https://v8std.ru/std/470/) #### 11. Параметры функциональных опций именуйте по смыслу параметра. Имя параметра не обязано совпадать с именами реквизитов, на которые он ссылается. #### Примеры `Организация` (связан со справочником `Организации`). `ТипОбъектаКонфигурации` (связан, например, с `РегистрСведений.НазначениеДополнительныхОбработок.Измерение.ТипОбъекта` и `РегистрСведений.НастройкаВерсионированияОбъектов.Измерение.ТипОбъекта`). См. также: [#std470: Использование функциональных опций](https://v8std.ru/std/470/) #### 12. Определяемые типы именуйте в единственном числе, по назначению. Не используйте: - названия стандартных типов (`Строка`, `Число`); - технические слова, не влияющие на смысл (`Тип...`, `Объект...`, `Ссылка...`). #### Неправильно `Строка25` `СсылкиНаКонтактыВзаимодействий` #### Правильно `АртикулНоменклатуры` `КонтактВзаимодействий` См. также: [Использование определяемых типов](https://its.1c.ru/db/v8std/content/704/hdoc). #### 13. Хранилища настроек именуйте по общим правилам наименования метаданных. #### Пример `ХранилищеВариантовОтчетов`. #### 14. Общие формы именуйте от существительных. Не используйте в имени слова, удаление которых не меняет смысл (`Форма...`, `Окно...`, `Диалог...`). #### Примеры `НастройкаСистемы`, `МоиНастройки`, `ПараметрыПроксиСервера`, `ВыборОбъектовМетаданных`. #### 15. Для общих команд используйте такие правила: - если команда размещается в панели навигации формы или раздела, имя должно описывать открываемый список: `ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта`, `ЗадачиПоБизнесПроцессу`; - в остальных случаях имя обычно задают от неопределенной формы глагола: `ВыполнитьСопоставление`, `УстановитьРасширениеРаботыСФайлами`. #### 16. Группы команд именуйте от существительных. #### Примеры `ПараметрыОбменаДанными`, `Печать`. #### 17. Интерфейсы именуйте по общим правилам наименования метаданных. Правило относится к обычному приложению. См. также: - [Общие правила построения интерфейсов](https://its.1c.ru/db/v8std/content/500/hdoc), - [Общие интерфейсы](https://its.1c.ru/db/v8std/content/501/hdoc). #### 18. Общие макеты именуйте от существительных, которые кратко описывают назначение или содержимое. Не используйте слова, удаление которых не меняет смысл (`Макет...`). #### Примеры `ДополнительнаяОбработка`, `КомпонентаTWAIN`, `ОписаниеИзмененийСистемы`. #### 19. Общие картинки именуйте по общим правилам наименования метаданных. Дополнительно: - можно указывать размер в имени: `УправлениеПоиском32`, `ДлительнаяОперация48`; - для картинок-коллекций добавляйте префикс `Коллекция`: `КоллекцияВариантыВажностиЗадачи`; - не используйте лишние слова: `Картинка...`, `Изображение...`, `Пиктограмма...`. #### Примеры `Найти`, `ЗакрепитьВариантОтчета`, `Папка`. #### 20. `XDTO`-пакеты именуйте на русском языке, от существительных, которые кратко описывают содержимое или назначение. Не используйте лишние слова (`Пакет...`, `XDTO...`). #### Пример `Файлы`. #### 21. `Web`-сервисы именуйте на английском языке, от существительных. Не используйте кириллицу и лишние слова (`Service`, `WebService`). Операции и параметры `Web`-сервисов также именуйте на английском языке. #### Примеры `Files`, `Accounts`, `FlightStatus`, `GetCurrencyRate`. #### 22. `WS`-ссылки именуйте от существительных по назначению сервиса. Не используйте лишние слова (`WebСервис...`, `Сервис...`, `Ссылка...`). #### Примеры `ДанныеОтгрузки`, `КонверторВалют`. #### 23. Элементы стиля именуйте от существительных по назначению. В имени допустимо уточнение параметра стиля. #### Примеры `ВыполненнаяЗадача`, `ПоясняющийТекст`, `НеСтартованныйБизнесПроцесс`, `УдаленныйДополнительныйРеквизитЦвет`, `УдаленныйДополнительныйРеквизитШрифт`. См. также: - [Элементы стиля](https://its.1c.ru/db/v8std/content/667/hdoc), -. #### 24. Стили именуйте по общим правилам наименования метаданных. Правило относится к обычному приложению. См. также:. #### 25. Языки именуйте по наименованию языка интерфейса. #### Примеры `Русский`, `Английский`. #### 26. Константы именуйте по таким правилам: - если константа связана с функциональной опцией, имя делайте созвучным опции; - в остальных случаях имя давайте по объекту, значение которого хранится в константе; - для типа `Булево` имя можно образовывать от неопределенной формы глагола. #### Примеры `ТипХраненияФайлов`, `НастройкаПроксиСервера`, `ВыполнятьПроверкуЭЦПНаСервере`, `ИзменятьЗаданияЗаднимЧислом`. Не используйте лишние слова (`Константа...`). #### 27. Справочники именуйте во множественном числе, по списку хранимых объектов. #### Примеры `Валюты`, `ГруппыИсполнителейЗадач`, `ПрофилиГруппДоступа`, `Пользователи`. Не используйте лишние слова (`Справочник...`). #### 28. Документы именуйте в единственном числе. #### Примеры `ЗаказПокупателя`, `ПеремещениеТоваров`, `Анкета`. Не используйте лишние слова (`Документ...`). #### 28.1. Если документ отражает процесс в системе, имя должно описывать именно процесс. Используйте лаконичное имя, без слов `Накладная...`, `Акт...`, если они не несут прикладного смысла. #### Пример Для процесса сверки взаиморасчетов: `СверкаВзаиморасчетов`. #### 28.2. Если документ нужен только для получения печатной формы и не отражает отдельный процесс, допустимо именовать его по названию печатной формы. #### Пример `ТоварноТранспортнаяНакладная`. #### 29. Журналы документов именуйте во множественном числе, по списку содержащихся документов. #### Примеры `СкладскиеДокументы`, `КорректировкиНДС`. Не используйте лишние слова (`Документы...`). #### 30. Перечисления именуйте во множественном числе. #### Неправильно `ДействиеСДокументамиПоДвойномуЩелчку` `ВажностьЗадачи` `SMTPАутентификация` #### Правильно `ДействияСДокументамиПоДвойномуЩелчку` `ВариантыВажностиЗадачи` `ВидыSMTPАутентификации` Исключения допустимы, но должны быть обоснованы. #### Пример `ПолФизическогоЛица`. #### 31. Для отчетов и вариантов отчетов применяйте отдельные правила. #### 31.1. Имена отчетов и вариантов отчетов образуйте от существительного. #### Примеры `ДинамикаИзмененийФайлов`, `СписокЗависшихЗадач`, `СправкаОбИсполнительскойДисциплине`. #### 31.2. Если отчет или вариант отчета предназначен для печати, предусмотрите вывод заголовка. #### Методическая рекомендация Для отчетов с макетом заголовок размещайте в макете. Для вариантов отчетов без макета используйте свойство `Заголовок` на закладке `Дополнительные настройки`. #### 31.3. Представление варианта отчета: - должно лаконично и однозначно описывать данные варианта; - должно совпадать с заголовком печатной формы, если заголовок выводится; - не должно быть образовано как имя отчета + уточнение в скобках или через разделители. #### Неправильно Для отчета `Валовая прибыль`: `Основной`, `По заказам`. #### Правильно Для отчета `Валовая прибыль`: `Валовая прибыль по контрагентам`, `Валовая прибыль по заказам`. #### 31.4. Не используйте в именах отчетов и вариантов отчетов лишние слова (`Отчет...`). #### 32. Обработки именуйте от существительного. #### Примеры `КонтрольЖурналаРегистрации`, `РегламентныеИФоновыеЗадания`, `УправлениеИтогамиИАгрегатами`. Не используйте лишние слова (`Обработка...`). Если обработка открывается из панели навигации формы или раздела, ее имя должно совпадать с именем команды открытия. #### 33. Планы видов характеристик именуйте во множественном числе, по списку объектов, которые они описывают. #### Примеры `ВидыДоступа`, `ВопросыДляАнкетирования`, `ДополнительныеРеквизитыИСведения`. #### 34. Планы счетов именуйте в единственном числе, от существительного по назначению. Не используйте лишние слова (`ПланСчетов...`). При этом в синониме можно использовать полное наименование. #### Примеры (имя - синоним) - `ЕПСБУ` - `ЕПСБУ` - `БухгалтерскийУчет` - `План счетов бухгалтерского учета` - `УправленческийУчет` - `План счетов управленческого учета` - `МеждународныйУчет` - `План счетов международного учета` Для уточнений используйте свойство `Пояснение`. #### Примеры с пояснением `НалоговыйУчет`: `План счетов налогового учета` Пояснение: `План счетов налогового учета (по налогу на прибыль)` `ЕПСБУ`: `ЕПСБУ` Пояснение: `Единый план счетов бюджетного учета` #### 35. Планы видов расчета именуйте во множественном числе, по списку объектов, которые в них перечисляются. #### Примеры `ОсновныеНачисления`, `УправленческиеНачисления`, `Удержания`. #### 36. Регистры сведений и регистры накопления именуйте во множественном числе, по списку записей, которые в них хранятся. #### Примеры `ДокументыФизическихЛиц`, `ФайлыВРабочемКаталоге`, `ДвиженияДенежныхСредств`. #### 37. Регистры бухгалтерии и регистры расчета именуйте по списку записей, которые в них хранятся. #### Примеры `Хозрасчетный`, `Начисления`. #### 38. Бизнес-процессы именуйте так же, как документы: в единственном числе. #### Примеры `Задание`, `Согласование`, `Утверждение`, `Поручение`. #### 39. Задачи бизнес-процессов именуйте в единственном числе. #### Пример `ЗадачаИсполнителя`. #### 40. Внешние источники данных именуйте по описанию импортируемых данных. Не используйте лишние слова (`Данные...`, `ИсточникДанных...`). #### Примеры `ДоговорыУправленческойУчетнойСистемы`, `ФайлыОсновнойСЭД`. Таблицы внешних источников данных именуйте по общим правилам наименования метаданных. #### Примеры `Договоры`, `Номенклатура`. #### См. также - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) - [#std706: Ограничения на переименование объектов метаданных](https://v8std.ru/std/706/) #### Источник https://its.1c.ru/db/v8std#content:550 ### std551 - Разработка конфигураций с повторным использованием общего кода и объектов метаданных #std551 URL: https://v8std.ru/std/551/ Markdown URL: https://v8std.ru/std/551.md Source path: std/551.md Aliases: std551, #std551, std 551, стандарт 551 Related: diagnostic:acc:277, diagnostic:acc:278, standard:std644 External sources: https://its.1c.ru/db/v8std#content:551 ID: #std551 # Разработка конфигураций с повторным использованием общего кода и объектов метаданных #### 1. При разработке нескольких конфигураций (например, линейки продуктов) общий код и общие объекты метаданных выносите в библиотеки. Библиотека — это конфигурация, которая не предназначена для конечных пользователей. Она нужна для поддержки других конфигураций и содержит общую функциональность. Библиотечный подход позволяет: - разрабатывать общий функционал централизованно; - выпускать его как отдельный продукт (дистрибутив или файл поставки библиотеки); - повторно использовать код и объекты библиотеки через механизм поддержки платформы 1С:Предприятие; - унифицировать конфигурации по набору общих объектов метаданных и функциональных подсистем. #### 2. Библиотека может стоять на поддержке у другой библиотеки. Так формируется иерархия библиотек. Библиотека, которая стоит на поддержке у другой библиотеки (библиотеки-родителя), называется библиотекой-наследником. Обычно библиотеки разрабатываются не как самостоятельные прикладные решения, а как основа для них. Поэтому прикладные решения выступают конечными конфигурациями-потребителями в иерархии библиотек. #### 3. При взаимодействии библиотек, конфигураций-потребителей и внешних систем разделяйте области видимости программного кода. **Программный интерфейс** содержит экспортные процедуры и функции для внешних потребителей. Выделяйте две категории: - а) интерфейс для любых внешних потребителей, который можно вызывать из произвольного места в коде; - б) интерфейс для конкретных потребителей, который должен располагаться в документированном месте и вызываться только указанным потребителем. Интерфейс для конкретных потребителей рекомендуется размещать в отдельном подразделе `Для вызова из других подсистем`. **Служебный программный интерфейс** включает экспортные процедуры и функции, которые можно вызывать только из других функциональных подсистем этой же библиотеки (конфигурации). **Служебные процедуры и функции** содержат внутреннюю реализацию функциональной подсистемы. Экспортные процедуры и функции этого раздела предназначены только для вызова из других объектов этой же подсистемы. Изображение: Иллюстрация 1 (551.img1.png) #### См. также - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Проверки [#acc:277](https://v8std.ru/diagnostics/acc/277/) [#acc:278](https://v8std.ru/diagnostics/acc/278/) #### Источник https://its.1c.ru/db/v8std#content:551 ### std552 - Имена объектов метаданных в иерархии библиотек #std552 URL: https://v8std.ru/std/552/ Markdown URL: https://v8std.ru/std/552.md Source path: std/552.md Aliases: std552, #std552, std 552, стандарт 552 Related: standard:std551 External sources: https://its.1c.ru/db/v8std#content:552 ID: #std552 # Имена объектов метаданных в иерархии библиотек #### 1. Если конфигурация использует одну или несколько [#std551: библиотек](https://v8std.ru/std/551/), избегайте конфликтов имен объектов метаданных (справочников, документов, общих модулей и др.) между библиотеками и самой конфигурацией Для разрешения конфликтов рекомендуется закреплять приоритет выбора имени за библиотекой более низкого уровня. Если в конфигурации-потребителе уже есть объект с таким именем, переименовывайте объект потребителя в более предметное название. Пример: если в «Управлении предприятием» есть группа команд `Настройки`, конфликтующая с группой `Настройки` из библиотеки «Базовая функциональность», в потребителе нужно выбрать более точное имя, например `НастройкиУправленческогоУчета` или `НастройкиРасчетаСебестоимости`. #### 2. Для независимых одноуровневых библиотек конфликты имен могут обнаружиться поздно - при внедрении или после него. Чтобы снизить риск конфликтов, называйте объекты метаданных предметно: - название должно кратко описывать сущность объекта; - название не должно быть излишне универсальным. #### 2.1. Наиболее универсальные имена используйте в библиотеках нижнего уровня иерархии. Примеры: `ОбщегоНазначения`, `СтроковыеФункции`, `РаботаСФормами`. #### 2.2. В конечных конфигурациях-потребителях и библиотеках более высокого уровня используйте более специфичные названия предметной области. Примеры: `ТорговыйУчет`, `ЗарплатаКадры`, `ПроведениеСкладскихДокументов`. #### 2.3. Если функционал расширяет аналогичный функционал библиотеки нижнего уровня или конфликтует с соседней одноуровневой библиотекой, добавляйте уточняющий постфикс - имя библиотеки или конфигурации-потребителя. Примеры: - `ОбновлениеИнформационнойБазыМФ` - функции обновления ИБ, специфичные для конфигурации «Мои финансы»; - `СтроковыеФункцииРегл` - функции общего назначения для библиотеки регламентированного учета; - `РаботаСФормамиЗарплатаКадры` - функции работы с формами библиотеки зарплатно-кадровой функциональности; - `УстановитьПометкуУдаленияПрисоединенныхФайловЗарплатаКадры` - подписка на событие из зарплатно-кадровой библиотеки. #### Источник https://its.1c.ru/db/v8std#content:552 ### std553 - Переопределяемые и поставляемые объекты библиотеки #std553 URL: https://v8std.ru/std/553/ Markdown URL: https://v8std.ru/std/553.md Source path: std/553.md Aliases: std553, #std553, std 553, стандарт 553 Related: standard:std551, standard:std644 External sources: https://its.1c.ru/db/v8std#content:553 ID: #std553 # Переопределяемые и поставляемые объекты библиотеки #### 1. Для настройки библиотеки в конфигурации-потребителе делите объекты на три категории: - **Непереопределяемые объекты**: готовые объекты, которые используются «как есть». Их не следует менять в конфигурации-потребителе. Такие объекты должны присутствовать во всех конфигурациях, использующих библиотеку. Пример: справочник `Пользователи`. - **Переопределяемые объекты**: объекты для настройки библиотеки под конкретную конфигурацию. Они могут или должны изменяться в конфигурации-потребителе. Через них настраивают поведение библиотечных подсистем и подключают библиотечную функциональность к объектам конфигурации-потребителя. - **Определители типов**: объекты-классификаторы без базовой реализации. Они формируют единое пространство имен, но конкретная реализация в конфигурациях-потребителях может отличаться. Пример: сущность «организация» везде представлена справочником с именем `Организации`. #### 2. Рекомендуемые правила поставки: - для непереопределяемых объектов: `изменения не рекомендуются`; - для переопределяемых объектов и определителей типов: `изменения разрешены`. Почему это важно: - непереопределяемые объекты — зона ответственности разработчиков библиотеки; - при срочной необходимости (например, критичная ошибка) изменение непереопределяемого объекта в конфигурации-потребителе допустимо; - такие изменения могут потеряться при следующем обновлении библиотеки, если заранее не принять меры (сообщить разработчикам библиотеки и/или задокументировать отклонение в инструкции обновления); - переопределяемые объекты и определители типов меняются в конфигурации-потребителе по их назначению. #### 3. Чтобы упростить настройку библиотеки и обновления в конфигурации-потребителе, минимизируйте количество переопределяемых объектов. Используйте для этого: - настройку состава типов переопределяемых реквизитов (свойств), чтобы подключать библиотечные механизмы к объектам конфигурации-потребителя; - предопределенные элементы, чтобы параметризовать библиотечную функциональность под специфику конфигурации-потребителя; - переопределяемые общие модули, чтобы менять поведение через обработчики, которые библиотека специально предоставляет для расширения. Примеры обработчиков: - `ПриПодготовкеМакетаОписанияОбновлений`; - `ПриЗаписиСпискаБизнесПроцессов`; - `ПриОпределенииБазовойВерсииКонфигурации`; - `ПриДобавленииОбработчиковОбновления`. #### 3.1. Переопределяемые общие модули называйте с постфиксом `Переопределяемый`. #### 3.2. Переопределяемые общие модули должны содержать только экспортные процедуры, которые вызываются из кода библиотеки. Не вызывайте процедуры переопределяемых модулей напрямую из кода конфигурации-потребителя. Это снижает устойчивость прикладного кода к обновлениям. К программному интерфейсу библиотеки относите только экспортные процедуры и функции непереопределяемых общих модулей. #### Правильно ```bsl Функция ПапкаФайлов(ВладелецФайловСсылка) Экспорт СтандартнаяОбработка = Истина; Результат = Неопределено; ПапкиФайловПереопределяемый.ПриПолученииПапкиФайлов(ВладелецФайловСсылка, Результат, СтандартнаяОбработка); Если СтандартнаяОбработка Тогда // реализация по умолчанию Результат = ... КонецЕсли; Возврат Результат; КонецФункции // Вызывается из библиотеки при необходимости получить папку файлов для указанного владельца. // // Параметры: // ВладелецФайловСсылка – ЛюбаяСсылка - владелец файлов, для которого нужно вернуть папку. // ПапкаФайлов – СправочникСсылка.ПапкиФайлов - в этот параметр нужно записать результат. // СтандартнаяОбработка – Булево - по умолчанию, Истина. В этом случае папка будет получена способом по умолчанию. // Если значение параметра установить в Ложь, то в этой процедуре можно реализовать свой способ, // которым в конфигурации получают папки файлов. Процедура ПриПолученииПапкиФайлов(ВладелецФайловСсылка, ПапкаФайлов, СтандартнаяОбработка) Экспорт КонецПроцедуры ``` #### 3.3. В переопределяемом модуле оставляйте только экспортные процедуры с пустой реализацией. Не добавляйте туда неэкспортные процедуры и функции. Базовую реализацию размещайте в непереопределяемом коде библиотеки. Так снижается трудоемкость обновлений в конфигурации-потребителе. #### Неправильно ```bsl // Модуль МояБиблиотекаПереопределяемый // Базовая логика не должна находиться здесь. Функция НастройкаПараметровРаботы() Экспорт ПараметрыРаботы = Новый Структура; ПараметрыРаботы.Вставить("ПоказыватьЕдинственныйРаздел", Ложь); Возврат ПараметрыРаботы; КонецФункции ``` #### Правильно ```bsl // Модуль МояБиблиотека (непереопределяемый) Функция НастройкаПараметровРаботы() Экспорт ПараметрыРаботы = Новый Структура; // Настройки по умолчанию. ПараметрыРаботы.Вставить("ПоказыватьЕдинственныйРаздел", Ложь); ПараметрыРаботы.Вставить("ЗадаватьДатуДляПрочихРазделов", Ложь); ПараметрыРаботы.Вставить("ИспользоватьВнешнихПользователей", Ложь); // Передаем управление расширению конфигурации-потребителя. МояБиблиотекаПереопределяемый.ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы); Возврат ПараметрыРаботы; КонецФункции // Модуль МояБиблиотекаПереопределяемый Процедура ПриПолученииНастроекПараметровРаботы(ПараметрыРаботы) Экспорт КонецПроцедуры ``` #### 3.4. При обновлении библиотеки в конфигурации-потребителе особого внимания требуют: - модули корневого объекта конфигурации; - переопределяемые общие модули. Автоматически обновить такие участки нельзя, поэтому используйте общий порядок: - при первичной настройке переопределяемого модуля изучите документацию по его экспортным процедурам и функциям (комментарии в библиотеке); - добавьте собственную реализацию только там, где это действительно требуется; - при каждом обновлении переносите новые экспортные процедуры и функции, удаляйте устаревшие; - проверяйте, что комментарии, имена параметров и их количество совпадают с библиотечной поставкой; - при изменении назначения или состава параметров актуализируйте реализацию в конфигурации-потребителе. #### См. также - [#std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных](https://v8std.ru/std/551/) - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник https://its.1c.ru/db/v8std#content:553 ### std554 - Переопределение общих модулей в условиях иерархии библиотек #std554 URL: https://v8std.ru/std/554/ Markdown URL: https://v8std.ru/std/554.md Source path: std/554.md Aliases: std554, #std554, std 554, стандарт 554 Related: diagnostic:acc:499, diagnostic:acc:500, diagnostic:acc:501, diagnostic:acc:502, diagnostic:acc:503, diagnostic:acc:505, diagnostic:acc:506, standard:std469, standard:std553 External sources: https://its.1c.ru/db/v8std#content:554 ID: #std554 # Переопределение общих модулей в условиях иерархии библиотек При разработке нескольких библиотек, стоящих на поддержке друг у друга, снижайте трудоемкость обновления [#std553: переопределяемых общих модулей](https://v8std.ru/std/553/) #### 1. В библиотеке нижнего уровня (базовой) объявляйте переопределяемый модуль по правилам [#std469: создания общих модулей](https://v8std.ru/std/469/) Пример имени: `БазоваяБиблиотекаПереопределяемый`. #### 2. В библиотеках более высокого уровня реализацию процедур и функций базового переопределяемого модуля доопределяйте при необходимости. В самом переопределяемом модуле размещайте не реализацию, а только вызов. #### Пример: библиотека верхнего уровня «Базовая библиотека» ```bsl Процедура НастроитьИнтерфейс(Знач ПараметрыРаботы) Экспорт // Начало: Базовая библиотека МодульБазовойБиблиотеки.НастроитьИнтерфейс(ПараметрыРаботы); // Конец: Базовая библиотека КонецПроцедуры ``` #### Пример: библиотека следующего уровня ```bsl Процедура НастроитьИнтерфейс(Знач ПараметрыРаботы) Экспорт // Начало: Базовая библиотека МодульБазовойБиблиотеки.НастроитьИнтерфейс(ПараметрыРаботы); // Конец: Базовая библиотека // Начало: Библиотека второго уровня МодульБиблиотекиВторогоУровня.НастроитьИнтерфейс(ПараметрыРаботы); // Конец: Библиотека второго уровня КонецПроцедуры ``` #### 3. В конечной конфигурации-потребителе реализация переопределяемого модуля строится как цепочка вызовов библиотек плюс прикладная часть. #### Пример: конфигурация-потребитель ```bsl Процедура НастроитьИнтерфейс(Знач ПараметрыРаботы) Экспорт // Начало: Базовая библиотека МодульБазовойБиблиотеки.НастроитьИнтерфейс(ПараметрыРаботы); // Конец: Базовая библиотека // Начало: Библиотека второго уровня МодульБиблиотекиВторогоУровня.НастроитьИнтерфейс(ПараметрыРаботы); // Конец: Библиотека второго уровня // Настройки конфигурации-потребителя. // ... КонецПроцедуры ``` Такой подход позволяет: - скрыть от библиотек верхнего уровня и конфигураций-потребителей детали реализации библиотек нижних уровней; - снизить риск ошибок при обновлении кода переопределяемого общего модуля; - при необходимости сохранить возможность отказаться от части библиотечной реализации. #### Проверки [#acc:499](https://v8std.ru/diagnostics/acc/499/) [#acc:500](https://v8std.ru/diagnostics/acc/500/) [#acc:501](https://v8std.ru/diagnostics/acc/501/) [#acc:502](https://v8std.ru/diagnostics/acc/502/) [#acc:503](https://v8std.ru/diagnostics/acc/503/) [#acc:505](https://v8std.ru/diagnostics/acc/505/) [#acc:506](https://v8std.ru/diagnostics/acc/506/) #### Источник https://its.1c.ru/db/v8std#content:554 ### std556 - Начальные действия при работе конфигурации #std556 URL: https://v8std.ru/std/556/ Markdown URL: https://v8std.ru/std/556.md Source path: std/556.md Aliases: std556, #std556, std 556, стандарт 556 Related: нет External sources: https://v8.1c.ru/ssl/, https://its.1c.ru/db/v8std#content:556 ID: #std556 # Начальные действия при работе конфигурации #### 1. В конфигурации должен быть механизм, который автоматически: - определяет первый запуск конфигурации и выполняет первичное заполнение ИБ минимально нужными данными; - определяет первый запуск нового релиза и выполняет необходимые изменения данных ИБ. Если в конфигурации используется [Библиотека стандартных подсистем](https://v8.1c.ru/ssl/), применяйте подсистему `Обновление версии ИБ`. Если БСП не используется, соблюдайте правила ниже. #### 2. Первичное заполнение ИБ можно разделять на: - обязательное - без него конфигурация не работает; - необязательное - упрощает старт работы, но не является критичным. #### 3. После обработки ИБ при первом запуске конфигурации или при первом запуске нового релиза рекомендуется показывать администратору: - описание конфигурации; - или описание изменений текущей версии. #### 4. Ситуации, когда обработка выполнена не полностью, должны контролироваться конфигурацией. Пользователю нужно показывать предупреждение о проблеме. Для подробного протокола выполненных операций и ошибок используйте журнал регистрации. #### 5. Если конфигурация работает с распределенной информационной базой (`РИБ`), обновление данных в подчиненных узлах должно: - выполняться после загрузки уже обновленных данных из главного узла; - исключать повторную обработку тех же данных и повторное создание новых данных. Повторная обработка ИБ должна быть корректной. Иначе: - при безусловном создании новых данных в подчиненном узле они будут многократно создаваться и размножаться по всем узлам при обмене; - при безусловном изменении данных в подчиненном узле они будут зарегистрированы к выгрузке в главный узел, что даст лишнюю нагрузку на канал связи. #### Неправильно ```bsl ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); ПрофильОбъект.Наименование = НСтр("ru = 'Бухгалтер'"); ПрофильОбъект.Предустановленный = Истина; ПрофильОбъект.Записать(); ``` #### Правильно ```bsl НаименованиеПрофиля = НСтр("ru = 'Бухгалтер'"); Запрос = Новый Запрос( "ВЫБРАТЬ | ИСТИНА |ИЗ | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа |ГДЕ | ПрофилиГруппДоступа.Наименование = &Наименование И | ПрофилиГруппДоступа.Предустановленный = ИСТИНА"); Запрос.УстановитьПараметр("Наименование", НаименованиеПрофиля); // Если элемента нет, только тогда нужно создать новый. Если Запрос.Выполнить().Пустой() Тогда ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); ПрофильОбъект.Наименование = НаименованиеПрофиля; ПрофильОбъект.Предустановленный = Истина; ПрофильОбъект.Записать(); КонецЕсли; ``` #### Источник https://its.1c.ru/db/v8std#content:556 ### std557 - Работа с пользовательскими настройками #std557 URL: https://v8std.ru/std/557/ Markdown URL: https://v8std.ru/std/557.md Source path: std/557.md Aliases: std557, #std557, std 557, стандарт 557 Related: standard:std488 External sources: https://its.1c.ru/db/v8std#content:557 ID: #std557 # Работа с пользовательскими настройками #### 1.1. Для хранения персональных настроек пользователя используйте `ХранилищеОбщихНастроек`. #### Пример ```bsl ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить("НастройкиПрограммы", "ЗадаватьВопросПриВыходе"); ХранилищеОбщихНастроек.Сохранить("НастройкиПрограммы", "ЗадаватьВопросПриВыходе", ЗначениеНастройки); ``` Не храните пользовательские настройки в других объектах метаданных (регистрах, реквизитах, табличных частях), во внешних файлах и т.п. #### 1.2. Для работы с пользовательскими настройками у пользователя должно быть право `СохранениеДанныхПользователя`. См. [#std488: Стандартные роли](https://v8std.ru/std/488/) #### 1.3. Для каждой настройки в хранилище общих настроек используйте уникальный строковый ключ. #### Пример Для двух разных настроек пользователя используйте разные ключи: - `ОсновнаяОрганизация`; - `ОсновнойСклад`. Допустимо объединять несколько значений в одну структуру, массив или соответствие, если они всегда читаются и сохраняются вместе. Например, параметры прокси-сервера можно хранить как одну структуру. #### 2.1. В конфигурации должно быть общее место для редактирования всех пользовательских настроек. Обычно это общая форма персональных настроек пользователя. #### Пример Пример формы «Мои настройки» есть в демонстрационной конфигурации Библиотеки стандартных подсистем. Изображение: Форма «Мои настройки» (557.demo.png) #### 2.2. Форма персональных настроек может быть не единственным местом для редактирования. Для удобства поля отдельных настроек можно размещать прямо в тех рабочих местах, к которым они относятся. Например, флажок «Больше не показывать подсказки при редактировании файла» можно разместить на форме самой подсказки. #### 2.3. Форма персональных настроек, другие формы (рабочие места) и отдельные элементы форм для работы с персональными настройками должны быть доступны только пользователям с правом `СохранениеДанныхПользователя`. См. [#std488: Стандартные роли](https://v8std.ru/std/488/) #### 3.1. Настройки из хранилища общих настроек не мигрируют между узлами информационной базы. Они специфичны для конкретного узла. При необходимости перенос настроек между узлами реализуйте отдельно средствами встроенного языка. #### 3.2. Все настройки в хранилище общих настроек сохраняются в разрезе пользователей по строковому имени пользователя. Поэтому при переименовании пользователя прежние настройки теряются. Если позже будет создан пользователь с прежним именем, он получит ранее сохраненные настройки. Чтобы этого избежать, переносите настройки при переименовании пользователя и очищайте их при удалении пользователя. При использовании БСП можно использовать обработчики `ПриЗаписиПользователяИнформационнойБазы()` и `ПослеУдаленияПользователяИнформационнойБазы()` в общем модуле `ПользователиПереопределяемый`. #### См. также - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://its.1c.ru/db/v8std#content:557 ### std603 - Требования к проведению документов #std603 URL: https://v8std.ru/std/603/ Markdown URL: https://v8std.ru/std/603.md Source path: std/603.md Aliases: std603, #std603, std 603, стандарт 603 Related: standard:std450, standard:std477, standard:std550, standard:std633, standard:std690 External sources: https://its.1c.ru/db/v8std#content:603 ID: #std603 # Требования к проведению документов #### 1. Документы нужны для ввода первичной информации о событиях, которые влияют на учетные показатели. Примеры: - в финансово-хозяйственном учете - хозяйственные операции; - в производственных системах - производственные операции. #### 2.1. Регистрация события в учете выполняется через проведение документа. Поэтому большинство документов должны проводиться (свойство `Проведение` = `Разрешить`). Непроведенный документ - это черновик: - он может быть заполнен не полностью или не заполнен вовсе; - к нему не применяются проверки и ограничения бизнес-логики; - его данные не отражаются в учете. Проведенный документ - это чистовик: - документ сформирован и обработан; - принято решение, что он участвует в учете. #### 2.2. Если у документа есть этапы жизненного цикла, для них можно использовать статусы. Примеры: - документ `Заказ клиента`: `Не согласован`, `К обеспечению`, `Закрыт`; - документ `Расходный кассовый ордер`: - регистрация в журнале кассовых ордеров (`КО-3`); - подпись главного бухгалтера (руководителя); - передача в кассу; - регистрация в кассовой книге; - подпись главного бухгалтера (руководителя). В этой модели проведение документа фиксирует первичное отражение события в учете, а статусы проведенного документа уточняют, как именно событие отражается в учете. После проведения при смене статуса можно: - требовать дозаполнение отдельных полей; - применять проверки и ограничения для конкретного этапа. До проведения перевод черновика по статусам системой не контролируется. Примеры поведения: - для проведенного документа `Заказ клиента`: - при переводе в статус `Не согласован` контролируются только основные параметры заказа; - при переводе в статус `К обеспечению` обязательно поле `Дата отгрузки` (логисту нужна дата поставки); - для проведенного документа `Расходный кассовый ордер` перевод в финальный статус `Зарегистрирован в Кассовой книге и подписан главным бухгалтером (руководителем)` означает создание бухгалтерских записей и регистрацию отчета кассира в журнале-ордере (или другом регистре, например в бюджетных организациях - в журнале операций). #### 2.3. Исключения из правила «большинство документов должны проводиться»: - документы, которые не отражают события в учете, а только фиксируют факт события во времени (входящая корреспонденция, звонки, встречи и т.п.); - документы, для которых технология проведения сильно отличается от возможностей платформы, но визуально для пользователя они должны выглядеть как проводимые. Например: `Операция (бухгалтерский и налоговый учет)`, `Регламентная операция`. Такие документы не проводятся. #### 2.4. Если пользователь должен одним действием и зарегистрировать событие, и отразить его в учете, новый документ нужно записывать сразу в режиме проведения. Нельзя решать эту задачу отключением проведения у документа. #### 3. Для отражения события в учете часто нужны вторичные данные со сложной привязкой к времени, периодам и другим объектам. Такие данные храните в регистрах. Движения по регистрам формируйте при проведении: - автоматически; - вручную. Автоматический вариант: - пользователь вводит данные события в документ; - при проведении система генерирует движения по регистрам; - пример: формирование бухгалтерских проводок. Ручной вариант: - пользователь вводит данные прямо в регистры; - такие документы обычно называют ручными операциями; - их используют для ввода начальных остатков и операций, не предусмотренных разработчиком. #### 4. Иногда движения должны формироваться отдельным документом. Это нужно, когда: - по-разному обрабатываются разные виды документов; - нужна групповая обработка; - в сложном процессе требуется явное разделение ролей исполнителей. Тогда этапы отражения события реализуются не статусами одного документа, а цепочкой документов, введенных на основании друг друга. В этой цепочке движения формируют только отдельные документы. Пример: - `Платежное поручение` формируется в финансовом отделе; - бухгалтер при проведении не должен менять первичный документ; - поэтому `Платежное поручение` движений не делает; - движения формирует отдельный документ `Списание с расчетного счета`. #### 5. Непроведенные и помеченные на удаление документы не должны иметь [#std633: активных движений](https://v8std.ru/std/633/) #### 6. Даже если документ не формирует движений, его нужно проводить, чтобы логически отличать его от черновика. #### 7.1.1. Если в документе не изменялись данные, влияющие на проведение (например, изменили только реквизит `Комментарий`), повторное проведение ранее проведенного документа не должно изменять его движения. Исключение: движения по регистру полностью или частично формируются внешними по отношению к документу алгоритмами (см. п. `4`). #### 7.1.2. При разработке алгоритмов формирования движений старайтесь не зависеть от текущего состояния регистров (например, от остатков). Иначе результат проведения будет зависеть от последовательности ввода документов. Исключение: обоснованные случаи, где анализ последовательности - часть сути алгоритма (например, партионный учет). #### 7.2. Чтобы выполнить требования п. `7.1`, формируйте движения максимально на данных самого документа. Данные, которые в документе не хранятся, должны быть защищены от изменения. #### 7.2.1. Если пользователь может изменять внешние по отношению к документу данные (например, реквизиты НСИ), которые влияют на движения, значения этих реквизитов нужно сохранять в документе. Если это не делается, изменение таких данных нужно блокировать. В конфигурациях на базе БСП для этого рекомендуется механизм `Запрет редактирования реквизитов`. Исключения - см. п. `7.1.2`. #### 7.2.2. Стремитесь минимизировать влияние настроек программы (например, функциональных опций) на формирование движений. Тогда пользователь сможет безопасно менять настройки. Практические приемы: - задавать дату начала действия настройки и учитывать ее в алгоритмах; - заполнять обязательные поля, отключенные настройкой, значениями по умолчанию; - формировать движения без учета настройки и компенсировать это в объектах отображения данных. Пример: измерение регистра всегда пишется одинаково, но в отчетах скрывается, если настройка отключена. #### 7.2.3. Если исключить зависимость движений от настроек не удалось, нужно реализовать один из вариантов: - автоматическую фоновую обработку после изменения настройки; - ручной запуск обработки пользователем; - если обработка невозможна - предупреждать, что менять настройку после начала учета не рекомендуется. Перед редактированием настройки пользователя нужно предупреждать о запуске обработки или о связанных ограничениях. В интерфейсах, работающих с необработанными данными (например, в отчетах), также показывайте предупреждение. Допустимо, что реакция на включение и отключение настройки различается. Например, включение проходит без предупреждения, а отключение не рекомендуется. #### 7.3. При изменении логики формирования движений, чтобы выполнить п. `7.1`, нужно либо предусмотреть [#std690: обработчики обновления информационной базы](https://v8std.ru/std/690/) либо сохранить старые алгоритмы формирования движений для документов, существовавших на момент обновления. #### 8. Для большинства событий отражение в учете обратимо. В таких случаях используйте механизм отмены проведения документов. #### См. также - [#std550: Имена объектов метаданных в конфигурациях](https://v8std.ru/std/550/) - [#std450: Порядок записи движений документов](https://v8std.ru/std/450/) - [#std477: Самодостаточность регистров](https://v8std.ru/std/477/) #### Источник https://its.1c.ru/db/v8std#content:603 ### std629 - Минимизация кода, выполняемого на клиенте #std629 URL: https://v8std.ru/std/629/ Markdown URL: https://v8std.ru/std/629.md Source path: std/629.md Aliases: std629, #std629, std 629, стандарт 629 Related: standard:std487 External sources: https://its.1c.ru/db/v8std#content:629 ID: #std629 # Минимизация кода, выполняемого на клиенте #### 1.1. Минимизируйте объем кода, который выполняется на клиенте. Не выполняйте на клиенте сложные алгоритмы, требующие значительных ресурсов компьютера. В таких сценариях выполнение на клиенте может занимать больше времени, чем передача управления на сервер, выполнение алгоритма на сервере и возврат результата. Размещайте такие алгоритмы на сервере и делайте минимально необходимое число вызовов с клиента. Это требование связано с тем, что: - клиентский компьютер обычно менее производителен, чем сервер; - в веб-клиенте клиентский код выполняется интерпретатором встроенного языка заметно медленнее, чем в тонком или толстом клиенте. #### См. также [#std487: Минимизация количества серверных вызовов и трафика](https://v8std.ru/std/487/) #### 1.2. На клиенте оставляйте алгоритмы, которые гарантированно выполняются быстрее, чем стоит один серверный вызов. Например, пересчет доступности элементов формы при изменении данных пользователем выполняют на клиенте, так как для сложной формы может сделать работу пользователя неприемлемой. #### См. также . #### 2.1. Исключение: подсистема предназначена для работы с ПО, установленным на клиентском компьютере. Например: - работа с торговым оборудованием; - интеграция с клиент-банком; - формирование печатных форм в офисные программы. #### 2.2. Если подсистема работает с клиентским ПО только в отдельных режимах клиента, используйте директивы препроцессора. Например, для кода, недоступного в веб-клиенте: ```bsl #Если ВебКлиент Тогда Предупреждение(НСтр("ru = 'Загрузка адресного классификатора не доступна в веб-клиенте.'")); #Иначе ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ФормаЗагрузкиАдресногоКлассификатора"); #КонецЕсли ``` #### Источник https://its.1c.ru/db/v8std#content:629 ### std632 - Использование констант #std632 URL: https://v8std.ru/std/632/ Markdown URL: https://v8std.ru/std/632.md Source path: std/632.md Aliases: std632, #std632, std 632, стандарт 632 Related: standard:std413, standard:std724 External sources: http://kb.1c.ru, https://its.1c.ru/db/v8std#content:632 ID: #std632 # Использование констант Запись константы следует выполнять вне транзакций, так как запись может стать узким местом при конкурентной работе. #### Неправильно ```bsl // Увеличиваем счетчик проведенных документов в константе Процедура ОбработкаПроведения(Отказ, РежимПроведения) ТекущееЗначение = Константы.СчетчикПроведенныхДокументов.Получить(); Константы.СчетчикПроведенныхДокументов.Установить(ТекущееЗначение + 1); КонецПроцедуры ``` Во время записи константы работа других сеансов приостанавливается, если они одновременно пытаются записать эту же константу. Подробнее о причинах избыточных блокировок и методах оптимизации см. базу знаний [«Технологические вопросы крупных внедрений»](http://kb.1c.ru). При этом недопустимо решать проблему блокировок тотальным кешированием констант: - в [#std413: параметрах сеанса](https://v8std.ru/std/413/) - в [#std724: общих модулях с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник https://its.1c.ru/db/v8std#content:632 ### std633 - Использование активности движений #std633 URL: https://v8std.ru/std/633/ Markdown URL: https://v8std.ru/std/633.md Source path: std/633.md Aliases: std633, #std633, std 633, стандарт 633 Related: standard:std450, standard:std603 External sources: https://its.1c.ru/db/v8std#content:633 ID: #std633 # Использование активности движений Если в конфигурации используются механизмы переключения активности движений регистров (например, для ручной корректировки движений), соблюдайте следующие правила. #### 1. Активность записей таких регистров должна учитываться во всех запросах и отчетах. Чтобы исключать неактивные записи, добавляйте условие: ```sdbl ГДЕ Активность = ИСТИНА ``` Если запрос обращается к виртуальным таблицам регистров, это условие учитывается платформой автоматически: виртуальные таблицы содержат только активные записи. #### 2. Активность записей регистров должна учитываться и в универсальных отчетах (или универсальной бизнес-логике), которые работают с произвольными регистрами конфигурации. #### 3. При отмене проведения документов, в которых разрешено прямое редактирование движений (ручная корректировка), активность движений нужно отключать, а не удалять сами движения. Пример: документ **Операция (бухгалтерский и налоговый учет)** с возможностью ручного ввода операций. #### См. также - [#std603: Требования к проведению документов](https://v8std.ru/std/603/) - [#std450: Порядок записи движений документов](https://v8std.ru/std/450/) #### Источник https://its.1c.ru/db/v8std#content:633 ### std637 - Настройка обмена данными для классификаторов между различными информационными базами #std637 URL: https://v8std.ru/std/637/ Markdown URL: https://v8std.ru/std/637.md Source path: std/637.md Aliases: std637, #std637, std 637, стандарт 637 Related: нет External sources: https://its.1c.ru/db/metod81/content/2943/hdoc, https://its.1c.ru/db/v8std#content:637 ID: #std637 # Настройка обмена данными для классификаторов между различными информационными базами #### 1. К классификаторам относятся справочники и регистры сведений с условно-постоянной информацией, одинаковой для всех совместно используемых баз. Примеры: классификаторы банков, стран мира, валют, ОКЕИ, адресный классификатор. Если для обмена между разными конфигурациями используется инструмент «Конвертация данных», придерживайтесь правил синхронизации классификаторов. #### 2. Данные классификаторов объектного типа (например, страны мира, ОКЕИ) должны сопоставляться: - сначала по уникальным идентификаторам ссылок; - если не найдено совпадение - по полям поиска (автоматическое сопоставление). Для этого: - в ПКО классификатора установите признаки: - `Искать объект приемника по внутреннему идентификатору объекта источника`; - `Продолжить поиск по полям поиска, если по идентификатору объект приемник не найден`; - задайте ПКС, используемые как поля поиска (например, `БИК` для банков); - при сложном сценарии идентификации задайте обработчик ПКО `Поля поиска`. Иначе возможны дубли классификаторов: одинаковые с прикладной точки зрения элементы обычно имеют разные уникальные идентификаторы в разных базах. #### 3. Классификаторы в виде наборов записей (например, адресный классификатор) не должны участвовать в обмене. Такие данные нужно заполнять и поддерживать отдельно в каждой базе, между которыми настроен обмен. Это предотвращает избыточную миграцию таких данных. #### См. также - [Описание инструмента «Конвертация данных»](https://its.1c.ru/db/metod81/content/2943/hdoc) #### Источник https://its.1c.ru/db/v8std#content:637 ### std638 - Работа с неактуальными (недействительными) объектами #std638 URL: https://v8std.ru/std/638/ Markdown URL: https://v8std.ru/std/638.md Source path: std/638.md Aliases: std638, #std638, std 638, стандарт 638 Related: нет External sources: https://its.1c.ru/db/v8std#content:638 ID: #std638 # Работа с неактуальными (недействительными) объектами #### 1. Эта рекомендация применяется, когда объект информационной базы становится неактуальным временно или постоянно (например, сотрудник уволился или ушел в декрет). Такие объекты не удаляйте из базы, чтобы не нарушать ссылочную целостность. Ранее созданные данные должны сохранять ссылки на них. #### 2. Чтобы запретить выбор неактуальных объектов через автоподбор и быстрый выбор в полях ввода, используйте один из двух подходов: - задавать ограничение по умолчанию (п. 2.1); - задавать ограничение в зависимости от контекста (п. 2.2). Пример в этом стандарте: учет пользователей ведется в справочнике `Пользователи`, у которого есть реквизит `Недействителен` (`Булево`, по умолчанию `Ложь`). #### 2.1. Если ограничение должно действовать во всех или в большинстве полей ввода, задавайте его по умолчанию. #### 2.1.1. В модуле менеджера справочника `Пользователи` реализуйте обработчики `ОбработкаПолученияДанныхВыбора` и `ОбработкаПолученияФормы`, которые устанавливают параметры отбора. #### Пример реализации ```bsl Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Если Не Параметры.Отбор.Свойство("Недействителен") Тогда Параметры.Отбор.Вставить("Недействителен", Ложь); КонецЕсли; КонецПроцедуры Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Если ВидФормы = "ФормаВыбора" Тогда ПараметрИзменен = Ложь; Если Не Параметры.Свойство("Отбор") Тогда Параметры.Вставить("Отбор", Новый Структура("Недействителен", Ложь)); ПараметрИзменен = Истина; ИначеЕсли Не Параметры.Отбор.Свойство("Недействителен") Тогда Параметры.Отбор.Вставить("Недействителен", Ложь); ПараметрИзменен = Истина; КонецЕсли; // Этот код нужен, чтобы были использованы измененные нами значения параметров. Если ПараметрИзменен Тогда СтандартнаяОбработка = Ложь; ВыбраннаяФорма = "ФормаВыбора"; // Передаем имя формы выбора. КонецЕсли; КонецЕсли; КонецПроцедуры ``` #### 2.1.2. Для реквизитов, где поведение нужно изменить, явно задавайте свойства `Параметры выбора` и `Связи параметров выбора`: - если нужен отбор по признаку недействительности, задайте в `Параметры выбора` значение `Отбор.Недействителен(Ложь)`; - если ограничение не требуется, используйте оба значения: `Истина` и `Ложь`. #### 2.2. Если запрет на выбор неактуальных объектов сильно зависит от контекста, не задавайте его по умолчанию. - не реализуйте модуль менеджера справочника `Пользователи`; - в объектах с реквизитами типа `СправочникСсылка.Пользователи` задавайте `Параметры выбора` и `Связи параметров выбора` по месту; - если критерий нельзя описать параметрами выбора, реализуйте в форме обработчики `ОбработкаПолученияДанныхВыбора`, `ОбработкаВыбора`, `ОкончаниеВводаТекста` и используйте отдельную форму выбора с нужной логикой ограничения. #### 3. В формах списка и выбора пользователей рекомендуется добавить флажок `Показывать недействительных пользователей`. Он позволяет: - выбирать и открывать карточку недействительного пользователя; - снова сделать пользователя действительным (например, при выходе сотрудника из декретного отпуска). #### 4. Для отображения неактуальных объектов в списках используйте элемент стиля `ТекстЗапрещеннойЯчейкиЦвет` (`192,192,192`). Изображение: Пример отображения неактуальных объектов (638.users.png) #### Источник https://its.1c.ru/db/v8std#content:638 ### std639 - Использование переменных в программных модулях #std639 URL: https://v8std.ru/std/639/ Markdown URL: https://v8std.ru/std/639.md Source path: std/639.md Aliases: std639, #std639, std 639, стандарт 639 Related: diagnostic:bslls:ExportVariables, standard:std413, standard:std443, standard:std455, standard:std459, standard:std640 External sources: https://its.1c.ru/db/v8std#content:639 ID: #std639 # Использование переменных в программных модулях #### 1. В большинстве случаев вместо переменных программного модуля используйте более подходящие средства платформы 1С:Предприятие. Область видимости таких переменных сложно контролировать. Из-за этого они часто становятся источником трудновоспроизводимых ошибок. Примеры некорректного использования и допустимые исключения приведены ниже. Рекомендации по структуре кода см. в [#std455: Структура модуля](https://v8std.ru/std/455/) #### 2. Неоправданные варианты использования переменных в модулях объектов (справочников, документов, наборов записей, обработок, отчетов и т.д.). #### 2.1. Чтобы передавать параметры между подписками на события и обработчиками событий модуля объекта из внешнего кода, используйте свойство `ДополнительныеСвойства`. #### Неправильно ```bsl Перем КонвертацияФайлов Экспорт; Процедура ПередЗаписью(Отказ) Если КонвертацияФайлов Тогда ... КонецЕсли; КонецПроцедуры // Вызывающий код ФайлОбъект.КонвертацияФайлов = Истина; ФайлОбъект.Записать(); ``` #### Правильно ```bsl Процедура ПередЗаписью(Отказ) Если ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда ... КонецЕсли; КонецПроцедуры // Вызывающий код ФайлОбъект.ДополнительныеСвойства.Вставить("КонвертацияФайлов", Истина); ФайлОбъект.Записать(); ``` Для передачи внутренних параметров между обработчиками событий модуля объекта допустимо использовать неэкспортные переменные модуля, недоступные из внешнего кода. #### Пример ```bsl Перем ПредыдущееЗначениеОрганизации; // Значение реквизита "Организация" до записи объекта в базу. Процедура ПередЗаписью(Отказ) ПредыдущееЗначениеОрганизации = ...; КонецПроцедуры Процедура ПриЗаписи(Отказ) Если ПредыдущееЗначениеОрганизации <> Организация Тогда // Отрабатываем изменение реквизита при записи. ... КонецЕсли; КонецПроцедуры ``` #### 2.2. Для обработки кодов возврата (ошибок) в логике программного модуля используйте строковые константы. #### Неправильно ```bsl Перем НетОшибок; Перем Ошибка_ОбработкиПроверкиЗаполнения; Перем Ошибка_ЗаписиОбъекта; Перем Ошибка_БлокировкиОбъекта; НетОшибок = 1; Ошибка_ОбработкиПроверкиЗаполнения = 2; Ошибка_ЗаписиОбъекта = 3; Ошибка_БлокировкиОбъекта = 4; Процедура ВыполнитьПерерасчет() ... Результат = ОбработатьДокументы(...); Если Результат = Ошибка_ЗаписиОбъекта Тогда ... ИначеЕсли Результат = Ошибка_БлокировкиОбъекта Тогда ... КонецЕсли; КонецПроцедуры ``` #### Правильно ```bsl Процедура ВыполнитьПерерасчет() ... Результат = ОбработатьДокументы(...); Если Результат = "ОшибкаЗаписиОбъекта" Тогда ... ИначеЕсли Результат = "ОшибкаБлокировкиОбъекта" Тогда ... КонецЕсли; КонецПроцедуры ``` #### 2.3. Для кеширования долго вычисляемых и часто используемых значений в процедурах и функциях применяйте [#std459: Использование значений, влияющих на поведение клиентского приложения](https://v8std.ru/std/459/) Исключение: если по требованиям безопасности нельзя возвращать результат вычисления из экспортной функции. В этом случае допустимо размещать такие значения в локальной переменной модуля. #### 3. Неоправданные варианты использования переменных в модулях форм. #### 3.1. Для кеширования долго вычисляемых и часто используемых значений в процедурах и функциях используйте [#std459: Использование значений, влияющих на поведение клиентского приложения](https://v8std.ru/std/459/) Не кешируйте статическую и легко вычисляемую информацию. В частности, не кешируйте в клиентских переменных модуля формы предопределенные элементы и перечисления. На клиенте получайте их через [#std443: Получение предопределенных значений на клиенте](https://v8std.ru/std/443/) #### 3.2. Для хранения и передачи промежуточных результатов между процедурами и функциями формы используйте: - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/): для передачи результатов по цепочке вызовов в рамках одного вызова - реквизиты формы: если значения нужно сохранять между разными клиентскими вызовами. Учитывайте, что значения серверных переменных модуля формы не сохраняются между вызовами с клиента. Исключение: клиентские переменные формы допустимы для хранения промежуточных результатов в обработчиках ожидания формы, внешних событий и клиентских обработчиках событий элементов формы. #### Пример ```bsl &НаКлиенте Перем ПорядковыйНомерИзображения; // Счетчик для имен файлов при сканировании нескольких изображений. &НаКлиенте Процедура ВнешнееСобытие(Источник, Событие, Данные) Если Источник = "TWAIN" И Событие = "ImageAcquired" Тогда Если ПорядковыйНомерИзображения = Неопределено Тогда ПорядковыйНомерИзображения = 1; КонецЕсли; ПорядковыйНомерИзображения = ПорядковыйНомерИзображения + 1; ... КонецЕсли; КонецПроцедуры ``` #### 4. Переменные управляемого и обычного приложения используйте для хранения клиентских параметров сеанса. Подробности: [#std413: Использование параметров сеанса](https://v8std.ru/std/413/) #### См. также - [#std455: Структура модуля](https://v8std.ru/std/455/) - [#std459: Использование значений, влияющих на поведение клиентского приложения](https://v8std.ru/std/459/) - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) - [#std413: Использование параметров сеанса](https://v8std.ru/std/413/) - [#std443: Получение предопределенных значений на клиенте](https://v8std.ru/std/443/) #### Проверки [#bslls:ExportVariables](https://v8std.ru/diagnostics/bslls/ExportVariables/) #### Источник https://its.1c.ru/db/v8std#content:639 ### std640 - Параметры процедур и функций #std640 URL: https://v8std.ru/std/640/ Markdown URL: https://v8std.ru/std/640.md Source path: std/640.md Aliases: std640, #std640, std 640, стандарт 640 Related: - diagnostic:acc:134 - diagnostic:acc:1383 - diagnostic:acc:1386 - diagnostic:acc:141 - diagnostic:acc:142 - diagnostic:acc:267 - diagnostic:acc:269 - diagnostic:acc:271 - diagnostic:acc:287 - diagnostic:acc:293 - diagnostic:acc:294 - diagnostic:acc:295 - diagnostic:acc:548 - diagnostic:acc:549 - diagnostic:bslls:ExtraCommas - diagnostic:bslls:MissedRequiredParameter - diagnostic:bslls:NestedFunctionInParameters - diagnostic:bslls:NumberOfOptionalParams - diagnostic:bslls:NumberOfParams - diagnostic:bslls:OrderOfParams - diagnostic:v8cs:method-optional-parameter-before-required - diagnostic:v8cs:method-too-many-params - standard:std454 - standard:std641 External sources: https://its.1c.ru/db/metod8dev/content/2606/hdoc, https://its.1c.ru/db/v8327doc#bookmark:dev:ti000000151, https://its.1c.ru/db/v8std#content:640 ID: #std640 # Параметры процедур и функций #### 1. Параметры методов надо именовать так же, как переменные. См. [#std454: Правила образования имен переменных](https://v8std.ru/std/454/) #### 2. Используйте параметры методов. Избегайте неявную передачу, такую как переменные модулей или реквизиты формы. #### 3. Используйте порядок параметров: от общего к частному. #### Неправильно ```bsl Процедура ПересчитатьСуммуДокумента(ИмяПоляСумма, ДокументОбъект, СуммаВключаетНДС = Истина) Процедура ПоменятьЦветПоляФормы(Цвет, ИмяПоля, Форма) ``` #### Правильно `ДокументОбъект` и `Форма` разместить впереди: ```bsl Процедура ПересчитатьСуммуДокумента(ДокументОбъект, ИмяПоляСумма, СуммаВключаетНДС = Истина) Процедура ПоменятьЦветПоляФормы(Форма, ИмяПоля, Цвет) ``` #### 4. Необязательные параметры (параметров по-умолчанию) располагайте после обязательных. #### Правильно ```bsl Функция КурсВалютыНаДату(Валюта, Дата = Неопределено) Экспорт ``` #### Проверки [#v8cs:method-optional-parameter-before-required](https://v8std.ru/diagnostics/v8-code-style/method-optional-parameter-before-required/) #### 5. Не делайте больше 7 параметров. Не делайте больше 3 необязательных параметров (параметров по-умолчанию). Вместо большого количества параметров: - группируйте похожие параметры в один типа `Структура`, такие как `ДанныеЗаполнения`, `ПараметрыПроведения`, `ДанныеФайла` - пересмотрите логику работы метода, разбейте логику на несколько методов #### Неправильно ```bsl // Добавляет новое поле на форму, инициализирует его значениями по умолчанию. Функция ДобавитьПолеФормы(ИмяПоля, Заголовок = Неопределено, ОбработчикПриИзменении = "", ОбработчикНачалоВыбора = "", ШиринаПоля, ЦветФона = Неопределено, ЦветФонаЗаголовка = Неопределено, Родитель = Неопределено, КартинкаШапки = Неопределено, ПутьКДанным = Неопределено, ТолькоПросмотрПоля = Ложь, СвязиПараметровВыбора = Неопределено) … КонецФункции // вызывающий код НовоеПоле = ДобавитьПолеФормы("СтараяЦена", НСтр("ru='Цена'"),,, 12, ЦветФона, ЦветЗаголовка, НоваяГруппа,,,Истина); НовоеПоле.ЦветТекста = WebЦвета.Серый; ``` ```bsl // Создает элемент справочника "Номенклатура" Процедура СоздатьЭлементНоменклатуры(Наименование, ТоварУслуга, ЕдиницаИзмерения, ВесНетто, ПроверятьУникальность = Истина) … КонецПроцедуры ``` #### Правильно `ИмяПоля` оставить как ключевой параметр, логику пересмотреть: ```bsl // Добавляет новое поле на форму, инициализирует его значениями по умолчанию. Функция НовоеПолеФормы(ИмяПоля) … КонецФункции // вызывающий код НовоеПоле = НовоеПолеФормы("СтараяЦена"); НовоеПоле.Заголовок = НСтр("ru='Цена'"); НовоеПоле.ЦветФона = ЦветФона; НовоеПоле.ЦветТекста = WebЦвета.Серый; НовоеПоле…. = … ``` #### Проверки [#v8cs:method-too-many-params](https://v8std.ru/diagnostics/v8-code-style/method-too-many-params/) #### 6. Избегайте громоздких конструкций. #### 6.1. Избегайте вложенные вызовы. Передавайте параметры явно. #### Неправильно ```bsl СтруктураВложений.Вставить(ПрисоединенныйФайл.Наименование, Новый Картинка(ПолучитьИзВременногоХранилища( ПрисоединенныеФайлы.ПолучитьДанныеФайла(ПрисоединенныйФайл.Ссылка).СсылкаНаДвоичныеДанныеФайла))); ``` #### Правильно Разбивайте параметры с помощью логических переменных: ```bsl АдресФайлаИзображения = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ПрисоединенныйФайл.Ссылка).СсылкаНаДвоичныеДанныеФайла; ДанныеИзображения = Новый Картинка(ПолучитьИзВременногоХранилища(АдресФайлаИзображения)); СтруктураВложений.Вставить(ПрисоединенныйФайл.Наименование, ДанныеИзображения); ``` Чувствуете легкость и компактность? Оставьте как есть! ```bsl Предупреждение(НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'")); ПеречитатьСуммуПоКурсу(Сумма, КурсВалютыНаДату(Валюта)); ``` #### 6.2. Избегайте вложенные конструкторы. Вложенные структуры создавайте только если свойств структуры 3 и меньше. #### Неправильно ```bsl ЗаполнитьЦены(Объект.Товары, , Новый Структура("Дата, Валюта, Соглашение, ПоляЗаполнения", Объект.Дата, Объект.Валюта, Объект.Соглашение, "Цена, СтавкаНДС, ВидЦены, СрокПоставки"), Новый Структура("ПересчитатьСумму, ПересчитатьСуммуСНДС, ПересчитатьСуммуНДС, ПересчитатьСуммуРучнойСкидки, ОчиститьАвтоматическуюСкидку, ОчиститьСуммуВзаиморасчетов", "КоличествоУпаковок", СтруктураПересчетаСуммы, СтруктураПересчетаСуммы, "КоличествоУпаковок", Неопределено, Неопределено)); ``` #### Правильно ```bsl ПараметрыЗаполнения = Новый Структура; ПараметрыЗаполнения.Вставить("Дата", Объект.Дата); ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта); ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение); ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС, ВидЦены, СрокПоставки"); ДействияСИзмененнымиСтроками = Новый Структура; ДействияСИзмененнымиСтроками.Вставить("ПересчитатьСумму","КоличествоУпаковок"); ДействияСИзмененнымиСтроками.Вставить("ПересчитатьСуммуСНДС", ПараметрыПересчетыСуммы); ДействияСИзмененнымиСтроками.Вставить("ПересчитатьСуммуНДС", ПараметрыПересчетыСуммы); ДействияСИзмененнымиСтроками.Вставить("ПересчитатьСуммуРучнойСкидки","КоличествоУпаковок"); ДействияСИзмененнымиСтроками.Вставить("ОчиститьАвтоматическуюСкидку"); ДействияСИзмененнымиСтроками.Вставить("ОчиститьСуммуВзаиморасчетов "); ЗаполнитьЦены(Объект.Товары, ПараметрыЗаполнения, ДействияСИзмененнымиСтроками); ``` #### 6.3. Избегайте лишних пробелов: - перед открывающей скобкой - после открывающей скобки - перед закрывающей скобкой - перед запятыми #### Неправильно ```bsl НовоеПоле = НовоеПолеФормы ( ИмяПоля , ТипПоля ); ``` #### Правильно ```bsl НовоеПоле = НовоеПолеФормы(ИмяПоля, ТипПоля); ``` #### В стандарте не указано Полную формулировку __"перед запятыми при размещении параметров в одной строке и если параметры не опущены"__ можно трактовать как разрешения писать слитно запятые у необязательных параметров ```bsl Форма = ПолучитьФорму(ИмяФормы, , , , , , Параметр); Форма = ПолучитьФорму(ИмяФормы,,,,,, Параметр); ``` равносильно допустимы #### 7. При вызове методов не пропускайте обязательные параметры. Пропущенный обязательный параметр получит значение `Неопределено`, а метод может не уметь с ним работать. Для вызова методы: ```bsl Процедура ПоменятьЦветПоляФормы(Форма, ИмяПоля, Цвет) ``` #### Неправильно ```bsl ПоменятьЦветПоляФормы(,"РезультатПроверки", ЦветаСтиля.ПоясняющийОшибкуТекст); // пропущен первый параметр Форма ПоменятьЦветПоляФормы(,,); // пропущены все обязательные параметры ``` #### Правильно ```bsl ПоменятьЦветПоляФормы(ЭтотОбъект, "РезультатПроверки", Цвет); // указаны все обязательные параметры ``` #### См. также - СОВЕРШЕННЫЙ КОД Стив Макконнелл ГЛАВА 7. Высококачественные методы - ЧИСТЫЙ КОД Роберт Мартин ГЛАВА 3. Функции - Чистый дизайн Кент Бек ГЛАВА 8. Пояснительные переменные - Чистый дизайн Кент Бек ГЛАВА 10. Явная передача параметров - [Передача параметров по ссылке и по значению при вызове процедур и функций](https://its.1c.ru/db/metod8dev/content/2606/hdoc) - [Руководство разработчика 4.7.4. Передача параметров процедур и функций](https://its.1c.ru/db/v8327doc#bookmark:dev:ti000000151) - [#std641: Структуры и таблицы значений в качестве параметров процедур и функций](https://v8std.ru/std/641/) #### Проверки [#bslls:ExtraCommas](https://v8std.ru/diagnostics/bslls/ExtraCommas/) [#bslls:MissedRequiredParameter](https://v8std.ru/diagnostics/bslls/MissedRequiredParameter/) [#bslls:NestedFunctionInParameters](https://v8std.ru/diagnostics/bslls/NestedFunctionInParameters/) [#bslls:NumberOfOptionalParams](https://v8std.ru/diagnostics/bslls/NumberOfOptionalParams/) [#bslls:NumberOfParams](https://v8std.ru/diagnostics/bslls/NumberOfParams/) [#bslls:OrderOfParams](https://v8std.ru/diagnostics/bslls/OrderOfParams/) [#acc:134](https://v8std.ru/diagnostics/acc/134/) [#acc:141](https://v8std.ru/diagnostics/acc/141/) [#acc:142](https://v8std.ru/diagnostics/acc/142/) [#acc:267](https://v8std.ru/diagnostics/acc/267/) [#acc:269](https://v8std.ru/diagnostics/acc/269/) [#acc:271](https://v8std.ru/diagnostics/acc/271/) [#acc:287](https://v8std.ru/diagnostics/acc/287/) [#acc:293](https://v8std.ru/diagnostics/acc/293/) [#acc:294](https://v8std.ru/diagnostics/acc/294/) [#acc:295](https://v8std.ru/diagnostics/acc/295/) [#acc:548](https://v8std.ru/diagnostics/acc/548/) [#acc:549](https://v8std.ru/diagnostics/acc/549/) [#acc:1383](https://v8std.ru/diagnostics/acc/1383/) [#acc:1386](https://v8std.ru/diagnostics/acc/1386/) #### Источник https://its.1c.ru/db/v8std#content:640 ### std641 - Структуры и таблицы значений в качестве параметров процедур и функций #std641 URL: https://v8std.ru/std/641/ Markdown URL: https://v8std.ru/std/641.md Source path: std/641.md Aliases: std641, #std641, std 641, стандарт 641 Related: standard:std453, standard:std640, standard:std693 External sources: https://its.1c.ru/db/v8std#content:641 ID: #std641 # Структуры и таблицы значений в качестве параметров процедур и функций Основная статья: [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) Для процедур и функций (далее по тексту: функций) с параметрами типа `Структура`, `ТаблицаЗначений`, а также `ДеревоЗначений` (далее по тексту рекомендации для таблицы значений также относятся к дереву значений) придерживайтесь следующего подхода к разработке. #### 1.1. Помимо функции, которая реализует прикладную функциональность (далее по тексту: вызываемая функция), определите функцию-конструктор параметров, возвращающую: - структуру-заготовку со свойствами; - или пустую таблицу значений (дерево значений) с типизированными колонками. Вызывающий код должен проинициализировать параметры конкретными значениями и передать их в вызываемую функцию. Пример вызывающего кода: #### Пример ```bsl Процедура ПриИзмененииНоменклатурыСервер(ИдентификаторТекущейСтроки) // Получаем новую структуру параметров. ПараметрыЗаполненияЦен = ЦенообразованиеКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(); // Заполняем параметры. ПараметрыЗаполненияЦен.Дата = Объект.Дата; ПараметрыЗаполненияЦен.Валюта = Объект.Валюта; ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ИдентификаторТекущейСтроки); // Передаем структуру параметров в прикладную функцию. ЦенообразованиеСервер.ЗаполнитьЦеныВСтрокеТЧ(ТекущаяСтрока, ПараметрыЗаполненияЦен); КонецПроцедуры ``` Пример функции-конструктора параметров в модуле ЦенообразованиеКлиентСервер: #### Пример ```bsl // Функция-конструктор параметров процедуры ЦенообразованиеСервер.ЗаполнитьЦеныВСтрокеТЧ. // // Возвращаемое значение: // Структура: // * Дата – Дата // * Валюта - СправочникСсылка.Валюты // * ПересчитыватьСумму - Булево // Функция ПараметрыЗаполненияЦеныВСтрокеТЧ() Экспорт ПараметрыЗаполненияЦен = Новый Структура; ПараметрыЗаполненияЦен.Вставить("Дата", ТекущаяДатаСеанса()); ПараметрыЗаполненияЦен.Вставить("Валюта", ОсновнаяВалюта()); ПараметрыЗаполненияЦен.Вставить("ПересчитыватьСумму", Истина); Возврат ПараметрыЗаполненияЦен; КонецФункции ``` #### 1.2. Имена свойств структуры должны соответствовать параметрам вызываемой функции. Параметры со значениями по умолчанию нужно явно проинициализировать в структуре. #### 1.3. Для параметра с типом `ТаблицаЗначений` допустимо не создавать отдельную функцию-конструктор, если таблица значений — результат расчетов в прикладном коде. Например, есть функция, которая делает запрос к информационной базе и передает результат в другую функцию в виде таблицы значений. #### 1.4. При разработке программного интерфейса библиотек все функции, возвращающие значения в виде структур и таблиц значений, в том числе функции-конструкторы, должны иметь описание типа возвращаемого значения. При этом описывайте свойства структур и колонки таблиц значений начиная с новой строки и предваряя символом `*`. Например: #### Пример ```bsl // Возвращаемое значение: // ТаблицаЗначений: // * Серия - СправочникСсылка.СерииНоменклатуры - если серия указана и она может // использоваться с новым значением номенклатуры на указанном складе, // то возвращается переданное значение; если нет - пустая ссылка. // * СтатусУказанияСерий - Число - если серии указываются в ТЧ "Товары", то // возвращается рассчитанный статус; если для переданной // номенклатуры/склада серии не используется - возвращается 0, // иначе возвращается переданный статус. ``` #### 1.5. В описании структур и таблиц значений могут быть вложенные описания. Перед именами вложенных свойств увеличивайте число звездочек: для первого уровня вложенности — 2 звездочки, для второго — 3 и т.д. Например: #### Пример ```bsl // Параметры: // СведенияОбОбновлении - Структура: // * КодАдресногоОбъекта - Структура: // ** КодРегиона - Число - код региона (длина - 2). // ** КодНаселенногоПункта - Число - код населенного пункта (длина - 3). // ** КодУлицы - Число - код улицы (длина - 4). // * Наименование - Строка // * ОбновлениеДоступно - Булево ``` #### 2. В вызывающем коде не инициализируйте структуру параметров или не добавляйте в нее другие свойства, не изменяйте состав и тип колонок таблицы значений. Во избежание неоднозначности и скрытых ошибок все допустимые параметры вызываемой функции должны быть определены явно в функции-конструкторе параметров. #### См. также - [#std693: Использование объектов типа Структура](https://v8std.ru/std/693/) - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник https://its.1c.ru/db/v8std#content:641 ### std643 - Работа в разных часовых поясах #std643 URL: https://v8std.ru/std/643/ Markdown URL: https://v8std.ru/std/643.md Source path: std/643.md Aliases: std643, #std643, std 643, стандарт 643 Related: diagnostic:acc:143, diagnostic:v8cs:use-non-recommended-method External sources: https://its.1c.ru/db/v8std#content:643 ID: #std643 # Работа в разных часовых поясах #### 1. Сервер может работать в одном часовом поясе, пользователи в другом. Операции должны выполняться по местному времени пользователей. #### Например Сервер в Москве, пользователи во Владивостоке. Операции - по времени Владивостока. #### В стандарте не указано Работа пользователей предполагается только из одного часового пояса. Сервер может быть не в том часовом поясе, что пользователи, но все пользователи должны быть в одном часовом поясе. Работа системы в случае, когда пользователи работают из разных часовых поясов, не стандартизирована. #### 2.1. Используйте `ТекущаяДатаСеанса` вместо `ТекущаяДата` в серверном контексте. `ТекущаяДатаСеанса` приводит время к часовому поясу пользовательского сеанса. `ТекущаяДата` возвращает дату и время серверного компьютера. #### Проверки [#v8cs:use-non-recommended-method](https://v8std.ru/diagnostics/v8-code-style/use-non-recommended-method/) #### 2.2. Когда требуется учесть время, не зависящее от часового пояса текущего сеанса пользователя, используйте `УниверсальноеВремя`. #### Например Получить время последнего выполнения фонового задания или момента устаревания кеша. #### 2.3. Если метод платформы возвращает время в часовом поясе сервера, а время надо показать пользователю, приведите время к часовому поясу пользователя. #### Правильно ```bsl ДатаАктуальностиУниверсальная = УниверсальноеВремя(ПолнотекстовыйПоиск.ДатаАктуальности()); ДатаАктуальности = МестноеВремя(ДатаАктуальностиУниверсальная, ЧасовойПоясСеанса()); ``` #### 3.1. Не используйте `ТекущаяДата` на клиенте. Это может привести к сложно расследуемому неожиданному поведению. Попробуйте вместо этого: - Передайте с сервера на клиент время и дату, приведенную к часовому поясу пользователя. - При работе с документами на клиенте используйте дату документа. #### 3.2. #### Неправильно ```bsl &НаКлиенте Процедура КомандаОткрытьЗакрытиеМесяца(Команда) ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда ТекДата = ТекущаяДата(); // вызов ТекущаяДата() на клиенте Иначе ТекДата = ТекущиеДанные.Дата; КонецЕсли; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ПериодРегистрации", ТекДата); ОткрытьФорму("Обработка.ЗакрытиеМесяца.Форма.Форма", ПараметрыФормы, ЭтотОбъект); ... ``` ```bsl &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ЗаполнитьЗначенияСвойств(Объект, Параметры); Если Не ЗначениеЗаполнено(Объект.ПериодРегистрации) Тогда Объект.ПериодРегистрации = НачалоМесяца(ТекущаяДата()); КонецЕсли; ... ``` #### Правильно ```bsl &НаКлиенте Процедура КомандаОткрытьЗакрытиеМесяца(Команда) ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Тогда ТекДата = Неопределено; // нет вызова ТекущаяДата() на клиенте Иначе ТекДата = ТекущиеДанные.Дата; КонецЕсли; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ПериодРегистрации", ТекДата); ОткрытьФорму("Обработка.ЗакрытиеМесяца.Форма.Форма", ПараметрыФормы, ЭтотОбъект); ... ``` ```bsl &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ЗаполнитьЗначенияСвойств(Объект, Параметры); Если Не ЗначениеЗаполнено(Объект.ПериодРегистрации) Тогда Объект.ПериодРегистрации = НачалоМесяца(ТекущаяДатаСеанса()); КонецЕсли; ... ``` #### 3.3. При работе с документами используйте дату документа вместо текущей даты. #### Неправильно ```bsl &НаКлиенте Процедура ПодборТовары(Команда) ПараметрыПодбора = Новый Структура; ДатаРасчетов = ?(НачалоДня(Объект.Дата) = НачалоДня(ТекущаяДата()), Неопределено, Объект.Дата); // вызов ТекущаяДата() на клиенте ПараметрыПодбора.Вставить("ДатаРасчетов", ДатаРасчетов); ... ОткрытьФорму("Обработка.ПодборНоменклатуры.Форма.Форма", ПараметрыПодбора, ЭтотОбъект, УникальныйИдентификатор); ... ``` #### Правильно ```bsl &НаКлиенте Процедура ПодборТовары(Команда) ПараметрыПодбора = Новый Структура; ПараметрыПодбора.Вставить("ДатаРасчетов", Объект.Дата); ... ОткрытьФорму("Обработка.ПодборНоменклатуры.Форма.Форма", ПараметрыПодбора, ЭтотОбъект, УникальныйИдентификатор); ... ``` #### Неправильно ```bsl &НаКлиенте Процедура ЗачетАвансовДокументАвансаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("КонецПериода", ?(ЗначениеЗаполнено(Параметры.Ключ), Объект.Дата - 1, КонецДня(ТекущаяДата()))); // вызов ТекущаяДата() на клиенте ... ОткрытьФорму("Документ.ДокументРасчетовСКонтрагентом.ФормаВыбора", ПараметрыФормы, Элемент); ... ``` #### Правильно ```bsl &НаКлиенте Процедура ЗачетАвансовДокументАвансаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("КонецПериода", ?(ЗначениеЗаполнено(Параметры.Ключ), Объект.Дата - 1, КонецДня(Объект.Дата))); ... ОткрытьФорму("Документ.ДокументРасчетовСКонтрагентом.ФормаВыбора", ПараметрыФормы, Элемент); ... ``` #### 3.4. При использовании БСП используйте `ОбщегоНазначенияКлиент.ДатаСеанса` там, где не смогли отказаться от расчета даты на клиенте. #### 4. Могут появиться исключения из правил, описанных выше. Если это произошло, оставьте в коде подробные комментарии, зачем это сделано: это поможет другим разработчикам, читающим ваш код, понять почему системы статического анализа выдают предупреждение на вашем коде. #### 5. Не вызывайте подряд несколько раз функции `ТекущаяДатаСеанса` (`ТекущаяДата`). Возвращаемые значения будут отличаться - это может привести к ошибкам. #### Неправильно ```bsl ДатаПоследнегоОповещения = ТекущаяДатаСеанса(); ДатаСледующегоОповещения = РассчитатьДату() + ТекущаяДатаСеанса(); ``` #### Правильно ```bsl ДатаПоследнегоОповещения = ТекущаяДатаСеанса(); ДатаСледующегоОповещения = РассчитатьДату() + ДатаПоследнегоОповещения; ``` #### Проверки [#acc:143](https://v8std.ru/diagnostics/acc/143/) #### Источник https://its.1c.ru/db/v8std#content:643 ### std644 - Обеспечение совместимости библиотек #std644 URL: https://v8std.ru/std/644/ Markdown URL: https://v8std.ru/std/644.md Source path: std/644.md Aliases: std644, #std644, std 644, стандарт 644 Related: - diagnostic:acc:277 - diagnostic:acc:278 - diagnostic:acc:458 - diagnostic:acc:468 - diagnostic:acc:469 - diagnostic:acc:473 - diagnostic:acc:474 - diagnostic:acc:475 - diagnostic:acc:476 - diagnostic:bslls:CachedPublic - diagnostic:v8cs:deprecated-procedure-outside-deprecated-region - standard:std455 - standard:std469 - standard:std474 - standard:std483 - standard:std487 - standard:std543 - standard:std551 - standard:std553 - standard:std647 - standard:std678 External sources: https://its.1c.ru/db/files/1CITS/EXE/V8Std/Контрольизмененияпрограммногоинтерфейса/Контрольизмененияпрограммногоинтерфейса.zip, https://its.1c.ru/db/v8std#content:644 ID: #std644 # Обеспечение совместимости библиотек #### 1. При разработке библиотек обеспечивайте обратную совместимость между версиями в пределах одной [#std483: подредакции](https://v8std.ru/std/483/) Например, версии `2.0.1`, `2.0.2`, `2.0.5` должны быть совместимы друг с другом. Следующая подредакция (`2.1`) может содержать изменения, которые нарушают совместимость. Совместимость снижает затраты на обновление библиотек в конфигурациях-потребителях: - прикладным разработчикам не нужно часто пересматривать код; - конфигурация-потребитель может безопасно использовать старые возможности, даже если на новые еще не перешли; - при разработке нескольких взаимозависимых библиотек можно развивать «соседние» библиотеки на разных версиях базовой, без частого обновления всего дерева библиотек. #### 1.1. Полный номер версии библиотеки должен однозначно показывать характер изменений и совместимость. Что изменилось в новой версии Редакция Подредакция Версия Сборка Архитектурные изменения, нарушена совместимость (есть инструкция по переходу) Да Да Нет Нет Новые функции Да Да Да Нет Исправлены ошибки Да Да Да Да Номер версии: ```mermaid %%{init: {"flowchart": {"nodeSpacing": 4, "rankSpacing": 1, "curve": "linear"}} }%% flowchart LR D1["2"]:::digit --> P1["."]:::dot --> D2["3"]:::digit --> P2["."]:::dot --> D3["5"]:::digit --> P3["."]:::dot --> D4["2"]:::digit H1["Редакция"]:::hint --> S1[" "]:::spacer --> H2["Подредакция"]:::hint --> S2[" "]:::spacer --> H3["Версия"]:::hint --> S3[" "]:::spacer --> H4["Сборка"]:::hint classDef digit font-weight:400,font-size:24px,padding:0px classDef dot fill:transparent,stroke:transparent,font-weight:900,font-size:64px classDef hint fill:transparent,stroke:transparent,font-size:32px,font-weight:600 classDef spacer fill:transparent,stroke:transparent,color:transparent linkStyle 0,1,2,3,4,5,6,7,8,9,10,11 stroke:transparent,stroke-width:0px,fill:transparent ``` Расшифровка: 1. `Редакция` (1-я цифра) — существенно нарушена совместимость, есть серьезные архитектурные или «знаковые» изменения. 2. `Подредакция` (2-я цифра) — нарушена совместимость, требуется инструкция по переходу, без адаптации конфигурация неработоспособна; также допускается удаление устаревших объектов метаданных. 3. `Версия` (3-я цифра) — только новые возможности для пользователей и/или разработчиков; возможна механическая автозаливка метаданных; инструкция по переходу не обязательна, без нее работоспособность сохраняется. 4. `Сборка` (4-я цифра) — только исправления ошибок; возможна механическая автозаливка метаданных. Исключения, которые можно согласовать заранее с потребителями: - изменения законодательства: если следующая версия еще не опубликована, допускается выпуск исправительных сборок для всех поддерживаемых веток, даже при добавлении функций или нарушении совместимости; вынужденное нарушение должно быть описано в документации по правилам [раздела 1.8](https://v8std.ru/std/644/#18) и обязательно к отработке; - LTS-версии: в исправительные релизы таких версий могут входить не только исправления ошибок и законодательные изменения, но и отдельные важные доработки, даже если они добавляют функции или нарушают совместимость. Удаление устаревших объектов метаданных выполняйте по графику: - не чаще одного раза в год; - в версиях, запланированных ближе к концу года; - удаляемые объекты должны существовать не менее двух лет. В документации к «концу года» отмечайте, что версия обязательна для перехода, чтобы гарантировать перенос или очистку данных для реструктуризации. Недопустимо требовать от типовых решений обязательный переход чаще одного раза в год суммарно по всем библиотекам. #### 1.2. Если библиотека содержит несколько [#std543: функциональных подсистем](https://v8std.ru/std/543/) нарушение совместимости хотя бы в одной из них требует увеличения номера подредакции (вторая цифра). #### 1.3. Если совместимость незапланированно нарушена в третьей или четвертой цифре версии, релиз следует отозвать, устранить нарушение и выпустить исправленный релиз. #### 1.4. Аналогично, незапланированное добавление новых функций в четвертой цифре версии также требует отзыва релиза и выпуска исправленного. #### 1.5. Для обеспечения совместимости: - выделяйте программный интерфейс библиотеки, скрывая от потребителей детали реализации; - не изменяйте программный интерфейс и поведение, его допустимо только расширять. Требования обратной совместимости имеют приоритет над стандартами: - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) - [#std647: Имена процедур и функций](https://v8std.ru/std/647/) #### 1.6. К программному интерфейсу библиотеки относятся объекты, предназначенные для использования в прикладном коде: - имена, состав параметров и поведение экспортных процедур и функций, размещенных в [#std455: разделе «Программный интерфейс»](https://v8std.ru/std/455/) - имена, состав параметров и поведение всех экспортных процедур [#std553: переопределяемых общих модулей](https://v8std.ru/std/553/) - имена ролей и элементов стилей; - имена объектов метаданных (включая реквизиты, табличные части и т.п.), к которым допускается прямое обращение из прикладного кода или запросов. #### 1.7. Совместимость не нарушается при расширении интерфейса в третьей цифре версии. Допустимо: - добавить новую функцию в программный модуль; - добавить процедуру в переопределяемый модуль; - добавить новый необязательный параметр в конец списка параметров; - добавить новый реквизит в справочник, регистр и т.п., если библиотека допускает к ним прямые обращения. При этом: - новое API и расширение параметров существующего API недопустимы в исправительных релизах (четвертая цифра); - даже при неизменной сигнатуре, изменение поведения процедуры/функции — это нарушение совместимости (допустимо только во второй цифре). Пример: функция `Сумма(а, б)` начала вычислять разность. #### 1.8. Во всех случаях, когда по [разделу 1](https://v8std.ru/std/644/#1) допустим отказ от совместимости документируйте все изменения, которые нарушают совместимость. Сопроводительная документация должна содержать инструкции по адаптации конфигураций-потребителей. Примеры формулировок: - общий модуль `ВнешниеЗадачиСервер` переименован в `ВнешниеЗадачи`; нужно заменить обращения к модулю в коде конфигурации; - процедура `УстановитьПроизвольныйЗаголовокПриложения` общего модуля `СтандартныеПодсистемыКлиент` переименована в `УстановитьРасширенныйЗаголовокПриложения`; нужно заменить обращения в коде; - отчет `СправкаПоИсполнительскойДисциплине` удален; вместо него используйте одноименный вариант отчета `Задачи`; нужно заменить обращения в коде и метаданных; - в общий модуль `ЗащитаПерсональныхДанныхПереопределяемый` нужно добавить процедуру `ДополнитьДанныеОрганизацииОператораПерсональныхДанных`, перенеся ее из поставки библиотеки; - хранение предмета взаимодействий перенесено из реквизита документа в реквизит `Предмет` регистра сведений `ПредметыПапкиВзаимодействий`; нужно заменить обращения к реквизиту `Предмет` документов на реквизит `Предмет` регистра. #### 1.9. Размещайте программный интерфейс библиотеки только в общих модулях, а не в модулях объектов, менеджеров, наборов записей и т.п. #### 2.1. Разделяйте программный интерфейс и служебные процедуры/функции: - в разных разделах одного модуля; - или в разных общих модулях. Если интерфейс и служебная реализация разнесены по разным модулям, для служебного модуля используйте постфикс `Служебный` (`Internal`). Например: - `ОбменСообщениями`, `ОбменСообщениямиКлиент` — программный интерфейс подсистемы; - `ОбменСообщениямиСлужебный` — служебная реализация, не предназначенная для использования в коде конфигурации-потребителя. Такой подход позволяет: - сосредоточить API в небольшом и обозримом наборе модулей; - показывать в контекстной подсказке только то, что действительно относится к API. #### 2.2. Раздел `Программный интерфейс` может содержать процедуры и функции для конкретных потребителей из других подсистем или библиотек. Выделяйте их в отдельный подраздел `Для вызова из других подсистем`, оформленный областью `ДляВызоваИзДругихПодсистем` (англ. `InterfaceImplementation`). Внутри подраздела группируйте код комментариями по имени потребителя. Подробнее: [#std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных](https://v8std.ru/std/551/) Пример: ```bsl #Область ПрограммныйИнтерфейс // Код процедур и функций #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Код процедур и функций // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // ТехнологияСервиса.ВыгрузкаЗагрузкаДанных // Код процедур и функций // Конец ТехнологияСервиса.ВыгрузкаЗагрузкаДанных #КонецОбласти #КонецОбласти ``` Англоязычный вариант: ```bsl #Region Public // Enter code here. #Region InterfaceImplementation // StandardSubsystems.BatchObjectModification // Enter code here. // End StandardSubsystems.BatchObjectModification // SaaSTechnology.DataExportImport // Enter code here. // End SaaSTechnology.DataExportImport #EndRegion #EndRegion ``` #### 3. Практические рекомендации для сохранения совместимости API при активном развитии библиотеки. #### 3.1. Если нужно переименовать или удалить экспортную функцию/процедуру, оставьте прежнюю реализацию, пометьте ее как устаревшую (англоязычный маркер — `Deprecated`), и добавьте новую функцию с новым именем. ```bsl #Область УстаревшиеПроцедурыИФункции // Устарела: Следует использовать функцию ПересчитатьПоКурсу // ... Функция ПересчитатьИзВалютыВВалюту( Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон, ПоКратностьНач = 1, ПоКратностьКон = 1) Экспорт ... #КонецОбласти ``` Устаревшие функции переносите в область `УстаревшиеПроцедурыИФункции` (`Deprecated`) внутри `ПрограммныйИнтерфейс`. Для процедур и функций в области `УстаревшиеПроцедурыИФункции` допустимы отклонения от других стандартов разработки. По каждой устаревшей функции добавляйте в сопроводительную документацию рекомендацию по замене. #### Проверки [#v8cs:deprecated-procedure-outside-deprecated-region](https://v8std.ru/diagnostics/v8-code-style/deprecated-procedure-outside-deprecated-region/) #### 3.2. Если исправление ошибки меняет поведение экспортной функции, часто лучше оставить старую реализацию как устаревшую, а исправленную вынести в новый API. Это сохраняет работоспособность прикладного кода, который уже опирается на старое поведение. Даже изменение поведения в нештатных или незадокументированных сценариях может вызвать массовые ошибки у потребителей. Типовой риск: вызывающий код при некорректных параметрах ожидает `Неопределено`, а после «исправления» функция начинает выбрасывать исключение. #### 3.3. Если нужно пересмотреть состав параметров, используйте опциональные параметры и добавляйте их в конец списка. ```bsl Функция ПересчитатьИзВалютыВВалюту( Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон, ПоКратностьНач = 1, ПоКратностьКон = 1) Экспорт ``` Если параметров много, используйте последним параметр типа `Структура`: ```bsl Функция ПересчитатьИзВалютыВВалюту( Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон, ПараметрыПересчета = Неопределено) Экспорт ``` #### 3.4. Параметры типа `Структура` используйте также для совместимости интерфейса, через который библиотека обращается к объектам конфигурации-потребителя. ```bsl Процедура ПриОпределенииНастроек(Настройки) Экспорт Настройки.ВыводитьОписания = Истина; Настройки.События.ПриСозданииНаСервере = Истина; Настройки.... = ...; КонецПроцедуры ``` Так библиотека может добавлять новые режимы и события без обязательного добавления «пустых заглушек» во всех конфигурациях-потребителях. #### 3.5. Чтобы прикладной код не зависел от деталей реализации библиотеки, избегайте прямых обращений к ее объектам метаданных. Предоставляйте специализированные экспортные функции API, через которые потребитель получает нужные данные. Вместо прямого запроса к библиотечному регистру в коде конфигурации-потребителя: ```bsl Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОбластиДанных.Представление |ИЗ | РегистрСведений.ОбластиДанных КАК ОбластиДанных |ГДЕ | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; Запрос.УстановитьПараметр("ОбластьДанных", ПараметрыСеанса.ОбластьДанныхЗначение); ТаблицаОбластейДанных = Запрос.Выполнить().Выгрузить(); ИмяПриложения = ?(ТаблицаОбластейДанных.Количество() = 0, "", ТаблицаОбластейДанных.Получить(0).Получить(0)); ``` используйте библиотечную функцию: ```bsl ИмяПриложения = РаботаВМоделиСервиса.ИмяПриложения(); ``` Если в текущей версии нужной функции еще нет, в прикладном коде допустима временная обертка, которую при следующем обновлении можно заменить на библиотечный эквивалент. #### 3.6. Чтобы скрывать детали реализации от потребителя, размещайте программный интерфейс в обычном общем модуле, а не в специализированном (`ПовтИсп`, `ВызовСервера`). Например, если экспортная функция сначала была в `ПовтИсп`, а позже переносится в обычный модуль, потребителю придется менять вызовы. Чтобы этого избежать, сразу размещайте экспортную функцию в обычном модуле (в разделе `ПрограммныйИнтерфейс`), а специализированные модули используйте как внутренние. Также модули `ВызовСервера` должны отвечать требованиям: - [#std678: безопасности](https://v8std.ru/std/678/) - [#std487: минимизации данных, передаваемых между клиентом и сервером](https://v8std.ru/std/487/) Их проще развивать, когда они служебные, не содержат программный интерфейс и не являются переопределяемыми. #### 4. Для контроля изменений программного интерфейса в новых версиях библиотек используйте приложенную обработку: - [Контроль изменения программного интерфейса на ИТС(zip)](https://its.1c.ru/db/files/1CITS/EXE/V8Std/Контрольизмененияпрограммногоинтерфейса/Контрольизмененияпрограммногоинтерфейса.zip) #### См. также - [#std483: Нумерация редакций и версий](https://v8std.ru/std/483/) - [#std455: Структура модуля](https://v8std.ru/std/455/) - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) - [#std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных](https://v8std.ru/std/551/) - [#std553: Переопределяемые и поставляемые объекты библиотеки](https://v8std.ru/std/553/) - [#std647: Имена процедур и функций](https://v8std.ru/std/647/) #### Проверки [#bslls:CachedPublic](https://v8std.ru/diagnostics/bslls/CachedPublic/) [#acc:277](https://v8std.ru/diagnostics/acc/277/) [#acc:278](https://v8std.ru/diagnostics/acc/278/) [#acc:458](https://v8std.ru/diagnostics/acc/458/) [#acc:468](https://v8std.ru/diagnostics/acc/468/) [#acc:469](https://v8std.ru/diagnostics/acc/469/) [#acc:473](https://v8std.ru/diagnostics/acc/473/) [#acc:474](https://v8std.ru/diagnostics/acc/474/) [#acc:475](https://v8std.ru/diagnostics/acc/475/) [#acc:476](https://v8std.ru/diagnostics/acc/476/) #### Источник https://its.1c.ru/db/v8std#content:644 ### std647 - Имена процедур и функций #std647 URL: https://v8std.ru/std/647/ Markdown URL: https://v8std.ru/std/647.md Source path: std/647.md Aliases: std647, #std647, std 647, стандарт 647 Related: diagnostic:acc:307, diagnostic:bslls:FunctionNameStartsWithGet, standard:std453, standard:std640 External sources: https://its.1c.ru/db/v8std#content:647 ID: #std647 # Имена процедур и функций #### 1. Чем лучше имена - тем проще читать код. Хорошо выбранное имя процедуры и имена параметров описывают её смысл лучше, чем комментарии. Если имя подобрать сложно - возможно, уже есть проблема в архитектуре решения. Если самодокументирующееся имя придумать легко - все спроектировано верно. См. [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### 2. Имена процедур, функций и параметров берите от терминов предметной области. Из имени должно быть понятно назначение. Старайтесь выбирать говорящие (самодокументирующиеся) имена. См. [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Неправильно ```bsl Функция ВыполнитьПроверку(Параметр1, Рекв, ТЗ) Функция ПолучитьМассивыРеквизитов(ХозяйственнаяОперация, МассивВсехРеквизитов, МассивРеквизитовОперации) ``` #### Правильно ```bsl Функция РеквизитОбъектаЗаданногоТипа(Объект, ИмяРеквизита, ТипЗначения) Функция ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(ХозяйственнаяОперация, ИменаВсеРеквизиты, ИменаРеквизитыОперации) ``` #### 3. Формируйте имена так: - Удалите пробелы между словами. - Каждое новое слово напишите с большой буквы. - Предлоги и местоимения пишите большими буквами. #### 4. Не используйте типы в названиях процедур и функций. Использовать можно только если без использования неясно название метода. #### Неправильно ```bsl Функция ПолучитьМассивРолейСПравомДобавления() Функция ПолучитьСтруктуруДополнительныхНастроек() ``` #### Правильно ```bsl Функция ИменаРолейСПравомДобавления() Функция ДополнительныеНастройки() ``` #### 5. Имена процедур берите от неопределенной формы глагола. От сути выполняемого действия. #### Неправильно ```bsl Процедура ЗагрузкаКонтрагента() ``` #### Правильно ```bsl Процедура ЗагрузитьКонтрагента() ``` #### 6.1. Имена функций берите от описания возвращаемого значения. #### Неправильно ```bsl Функция ПолучитьПолноеИмя() Функция СоздатьПараметрыЗаполненияЦенПоставщика() Функция ОпределитьДатуНачалаСеанса() ``` #### Правильно ```bsl Функция ПолноеИмя() Функция НовыеПараметрыЗаполненияЦенПоставщика() Функция ДатаНачалаСеанса() ``` #### 6.2. Если функция создает какой-то объект, назовите его со слова `Новый`. #### Неправильно ```bsl Функция ДобавитьПолеФормы() Функция СоздатьЭлементСправочникаФайлы() Функция ПолучитьТаблицуКоманд() ``` #### Правильно ```bsl Функция НовоеПолеФормы() Функция НовыйЭлементСправочникаФайлы() Функция НоваяТаблицаКоманд() ``` #### 6.3. Если функция выполняет проверку, назовите ее со слова `Это` или используйте причастие. #### Неправильно ```bsl Функция ПроверитьПроведенностьДокумента() Функция ПроверитьИзменениеРеквизитовДокумента() Функция ВнешняяЗадача() ``` #### Правильно ```bsl Функция ДокументПроведен() Функция РеквизитыДокументыИзменены() Функция ЭтоВнешняяЗадача() ``` #### 6.4. Если для понимания назначения функции важно каким образом было получено возвращаемое значение, назовите ее от глагола в неопределенной форме. #### Правильно ```bsl Функция ВыбратьДанныеПоПравилу(Правило, ПользовательскиеНастройки) Функция ПреобразоватьДанныеПоПравилу(НаборыДанных, ПараметрыПреобразования) ``` #### 6.5. Если функция используется как процедура, ее действие - основная задача, ее результат - побочный эффект, называйте функции как процедуры. Используйте глагол неопределенной формы. Например, возвращает признак выполненного действия. #### Правильно ```bsl Функция РазрешитьРедактированиеРеквизитовОбъекта(Форма) ``` #### Проверки [#bslls:FunctionNameStartsWithGet](https://v8std.ru/diagnostics/bslls/FunctionNameStartsWithGet/) [#acc:307](https://v8std.ru/diagnostics/acc/307/) #### Источник https://its.1c.ru/db/v8std#content:647 ### std648 - Ответственное чтение данных #std648 URL: https://v8std.ru/std/648/ Markdown URL: https://v8std.ru/std/648.md Source path: std/648.md Aliases: std648, #std648, std 648, стандарт 648 Related: diagnostic:acc:1327, diagnostic:acc:1328, standard:std460, standard:std464, standard:std465, standard:std490, standard:std659, standard:std752, standard:std783 External sources: https://its.1c.ru/db/v8std#content:648 ID: #std648 # Ответственное чтение данных #### 1. Ответственным считается любое чтение, по результатам которого: - изменяются данные в информационной базе; - принимаются бизнес-решения, влияющие на последующие изменения. #### 1.1. Если чтение должно быть ответственным, выполняйте его в транзакции с предварительной установкой управляемых блокировок. Типичные сценарии: - чтение данных при проведении с последующим формированием движений; - чтение для целостной передачи во внешнюю систему; - групповая обработка и реструктуризация данных при обновлениях. Для ссылочных объектов перед изменением данных, как правило, дополнительно используйте объектные блокировки. См. [#std490: Блокировка данных объекта для редактирования из кода](https://v8std.ru/std/490/) #### Неправильно ```bsl // 1. Прочитать регистр сведений Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗаметкиПоПредмету.КоличествоЗаметок КАК КоличествоЗаметок |ИЗ | РегистрСведений.ЗаметкиПоПредмету КАК ЗаметкиПоПредмету |ГДЕ | ЗаметкиПоПредмету.Предмет = &Предмет"); Запрос.УстановитьПараметр("Предмет", ПредметЗаметок); Выборка = Запрос.Выполнить().Выбрать(); КоличествоЗаметок = 0; Если Выборка.Следующий() Тогда КоличествоЗаметок = Выборка.КоличествоЗаметок; КонецЕсли; // 2. Записать в регистр сведений НаборЗаписей = РегистрыСведений.ЗаметкиПоПредмету.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Предмет.Установить(ПредметЗаметок); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Предмет = ПредметЗаметок; НоваяЗапись.КоличествоЗаметок = КоличествоЗаметок + 1; НаборЗаписей.Записать(); ``` #### Правильно ```bsl // 1. Начать транзакцию для пакета из чтения и записи НачатьТранзакцию(); Попытка // 2. Установить исключительную блокировку на интересующий диапазон записей БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрСведений.ЗаметкиПоПредмету"); ЭлементБлокировки.УстановитьЗначение("Предмет", ПредметЗаметок); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); // 3. Прочитать данные Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ЗаметкиПоПредмету.КоличествоЗаметок КАК КоличествоЗаметок |ИЗ | РегистрСведений.ЗаметкиПоПредмету КАК ЗаметкиПоПредмету |ГДЕ | ЗаметкиПоПредмету.Предмет = &Предмет"); Запрос.УстановитьПараметр("Предмет", ПредметЗаметок); Выборка = Запрос.Выполнить().Выбрать(); КоличествоЗаметок = 0; Если Выборка.Следующий() Тогда КоличествоЗаметок = Выборка.КоличествоЗаметок; КонецЕсли; // 4. Записать данные НаборЗаписей = РегистрыСведений.ЗаметкиПоПредмету.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Предмет.Установить(ПредметЗаметок); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Предмет = ПредметЗаметок; НоваяЗапись.КоличествоЗаметок = КоличествоЗаметок + 1; НаборЗаписей.Записать(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; ``` #### 1.2. В ряде задач ответственное чтение не требуется. Например: - получение данных динамическими списками; - поиск данных; - формирование большинства отчетов; - чтение условно постоянной информации (например, учетной политики, служебных констант); - действия в монопольных сценариях (обновление и первичное заполнение ИБ); - действия с персональными данными, где конкурентный доступ практически исключен; - мобильное приложение, где конкурентная работа маловероятна. #### 1.3. Во многих обработчиках событий модификации данных платформа уже открывает системную транзакцию. Отдельную транзакцию в этих случаях обычно открывать не нужно. Это относится, например, к обработчикам: - [#std464: Обработчик события ПередЗаписью](https://v8std.ru/std/464/) - [#std465: Обработчик события ПриЗаписи](https://v8std.ru/std/465/) - [#std752: Обработчик события ПередУдалением](https://v8std.ru/std/752/) #### 2. Выбор между исключительной и разделяемой блокировкой зависит от того, будут ли изменяться прочитанные данные. #### 2.1. Если после ответственного чтения данные изменяются, устанавливайте исключительную управляемую блокировку до чтения. Это снижает риск взаимоблокировок. #### Пример исключительной блокировки ```bsl // 1. Установить исключительную блокировку для ответственного чтения Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.Приказы"); ЭлементБлокировки.УстановитьЗначение("Ссылка", ПриказСсылка); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); // 2. Получить объект для дальнейшей модификации Объект = ПриказСсылка.ПолучитьОбъект(); Если Объект = Неопределено Тогда Возврат; КонецЕсли; // 3. Заблокировать объект от изменения и записать ЗаблокироватьДанныеДляРедактирования(ПриказСсылка); Объект.Реквизит = ...; Объект.Записать(); ``` #### 2.2. Если данные читаются ответственно, но не изменяются (например, только для формирования движений), используйте: - разделяемую блокировку для читаемых данных; - исключительную блокировку для данных, которые будут изменяться. #### Пример разделяемой блокировки ```bsl // 1. Установить разделяемую блокировку для чтения связанных объектов Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.Приказы"); ЭлементБлокировки.УстановитьЗначение("Ссылка", ПриказСсылка); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; Блокировка.Заблокировать(); // 2. Прочитать приказ ПриказОбъект = ПриказСсылка.ПолучитьОбъект(); // 3. Прочитать автора приказа Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); ЭлементБлокировки.УстановитьЗначение("Ссылка", ПриказОбъект.Автор); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; Блокировка.Заблокировать(); АвторПриказа = ПриказОбъект.Автор.ПолучитьОбъект(); ``` #### См. также - [#std460: Использование управляемого режима блокировки](https://v8std.ru/std/460/) - [#std659: Общие сведения об избыточных блокировках](https://v8std.ru/std/659/) - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Проверки [#acc:1327](https://v8std.ru/diagnostics/acc/1327/) [#acc:1328](https://v8std.ru/diagnostics/acc/1328/) #### Источник https://its.1c.ru/db/v8std#content:648 ### std652 - Несоответствие индексов и условий запроса #std652 URL: https://v8std.ru/std/652/ Markdown URL: https://v8std.ru/std/652.md Source path: std/652.md Aliases: std652, #std652, std 652, стандарт 652 Related: related:metod8dev:1590, standard:std658 External sources: https://its.1c.ru/db/v8std#content:652 ID: #std652 # Несоответствие индексов и условий запроса #### 1.1. Проверяйте, что для всех условий запроса есть подходящие индексы. Условия встречаются в секциях: - `ВЫБРАТЬ ... ИЗ ... ГДЕ `; - `СОЕДИНЕНИЕ ... ПО `; - `ВЫБРАТЬ ... ИЗ (, )`; - `ИМЕЮЩИЕ `. Подходящий индекс должен: 1. содержать все поля из условия; 2. содержать эти поля в начале индекса; 3. содержать эти поля подряд, без «вклинивания» других полей. #### 1.2. Если подходящего индекса нет, СУБД будет сканировать таблицу или один из ее индексов. Это увеличивает время выполнения запроса и может снижать параллельность из-за роста количества блокировок. Требования связаны с физической структурой индекса. Индекс - это дерево, где значения полей идут по уровням: сначала первое поле, потом второе и далее. Быстрый поиск возможен, когда фильтрация идет по непрерывному префиксу полей индекса. Если условия по первому полю нет, индекс теряет эффективность. Если между используемыми полями есть пропуски, индекс применяется только частично. #### 2. При создании объектов метаданных `1С:Предприятие` автоматически создает индексы, которые покрывают большинство запросов. Основные автоматически создаваемые индексы: - по уникальному идентификатору (ссылке) для объектных сущностей; - по регистратору для таблиц движений регистров, подчиненных регистратору; - по периоду и всем измерениям для итоговых таблиц регистров накопления; - по периоду, счету и всем измерениям для итоговых таблиц регистров бухгалтерии. #### 3. Если автоматических индексов недостаточно, можно дополнительно индексировать реквизиты объектов метаданных. Реквизиты справочников и документов рекомендуется индексировать с дополнительным упорядочиванием. Так индекс учитывает сортировку по полям основного представления и эффективнее работает, например, когда в списке есть отбор по реквизиту, а сам список упорядочен по полям основного представления. Учитывайте компромисс: индекс ускоряет поиск, но может замедлить добавление, изменение и удаление данных. Индексы добавляйте осознанно, под конкретные запросы. Не создавайте индексы «на всякий случай» и заведомо избыточные индексы. В частности: - не индексируйте дополнительно первое измерение регистра: для него уже есть основной индекс итоговой таблицы, автоматически создаваемый платформой; - не индексируйте низкоселективные поля (например, реквизит типа `Булево`), кроме специальных случаев, когда незначительная часть записей всегда имеет одно значение, и запросы всегда выбирают записи именно по нему. #### Примеры В конфигурации описан регистр накопления **ТоварыНаСкладах**: Изображение: Измерения регистра (652.img1.png) Платформа автоматически создаст для таблицы остатков этого регистра индекс по периоду и всем измерениям в порядке, заданном в конфигураторе. #### Запрос 1: Неправильно ```bsl Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.Качество |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки"; ``` Нарушено требование `2` из п. `1.1`: в условии нет отбора по первому полю индекса (`Склад`). СУБД придется перебирать весь индекс или таблицу. Варианты оптимизации: - проиндексировать измерение **Номенклатура**; - поставить **Номенклатура** первым измерением (осторожно, это может замедлить другие запросы). #### Запрос 2: Неправильно ```bsl Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры | И Номенклатура = &Номенклатура | И Склад = &Склад) КАК ТоварыНаСкладахОстатки"; ``` Нарушено требование `3` из п. `1.1`: между **Номенклатура** и **ХарактеристикаНоменклатуры** в структуре регистра находится поле **Качество**, которого нет в условии. Варианты оптимизации: - проиндексировать **ХарактеристикаНоменклатуры**; - поменять местами **Качество** и **ХарактеристикаНоменклатуры** (только если выигрыш критичен, так как это может ухудшить другие запросы). #### Запрос 3: Правильно ```bsl Запрос.Текст = "ВЫБРАТЬ | ТоварыНаСкладахОстатки.Склад, | ТоварыНаСкладахОстатки.Номенклатура, | ТоварыНаСкладахОстатки.Качество, | ТоварыНаСкладахОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Номенклатура = &Номенклатура | И Склад = &Склад) КАК ТоварыНаСкладахОстатки"; ``` Здесь требования соответствия индекса и условий не нарушены, поэтому запрос может выполняться оптимально. Порядок условий в тексте запроса не обязан совпадать с порядком полей в индексе. #### См. также - [#metod1590: Индексы таблиц базы данных](https://v8std.ru/metod8dev/1590/) - [#std658: Эффективные условия запросов](https://v8std.ru/std/658/) #### Источник https://its.1c.ru/db/v8std#content:652 ### std654 - Разыменование ссылочных полей составного типа в языке запросов #std654 URL: https://v8std.ru/std/654/ Markdown URL: https://v8std.ru/std/654.md Source path: std/654.md Aliases: std654, #std654, std 654, стандарт 654 Related: diagnostic:acc:1377, standard:std437, standard:std477, standard:std657, standard:std658, standard:std728 External sources: https://its.1c.ru/db/v8std#content:654 ID: #std654 # Разыменование ссылочных полей составного типа в языке запросов #### 1.1. В языке запросов можно обращаться не только к полям таблиц из раздела `ИЗ`, но и к полям объектов, на которые ссылаются ссылочные поля. Обращение к полям через точку (`ПолеСсылка.Реквизит`) добавляет неявные соединения с дополнительными таблицами. Это относится и к ограничениям доступа на уровне записей (`RLS`): в запрос могут добавляться таблицы, участвующие в проверках прав к неявно подключенным объектам. #### Пример ```sdbl ВЫБРАТЬ ТоварныеЗапасы.Товар КАК Товар, ТоварныеЗапасы.Количество КАК Количество, ТоварныеЗапасы.Товар.Артикул КАК Артикул ИЗ РегистрНакопления.ТоварныеЗапасы КАК ТоварныеЗапасы ``` #### 1.2. Чем больше неявных соединений, тем сложнее и медленнее запрос. Особенно это критично для ссылочных полей [#std728: составного типа](https://v8std.ru/std/728/): платформа может соединять запрос со всеми таблицами, которые входят в состав типа, а также с таблицами из `RLS` этих объектов #### Неправильно ```sdbl ВЫБРАТЬ ТоварныеЗапасы.Регистратор.Дата КАК ДатаРегистратора ИЗ РегистрНакопления.ТоварныеЗапасы КАК ТоварныеЗапасы ``` Подобное получение данных через точку от ссылочных полей составного типа крайне нежелательно. Каждое исключение из этого правила нужно отдельно анализировать. #### 2.1. Избегайте избыточных составных типов ссылочных полей. Указывайте только те типы ссылок, которые действительно нужны бизнес-логике. Без необходимости не применяйте варианты вида «любая ссылка». Сначала анализируйте прикладную логику, затем оставляйте только реально используемые типы. #### 2.2. Чтобы не строить запросы с большим числом соединений, жертвуйте компактностью хранения данных ради производительности и переносите нужные поля в исходную таблицу запроса. Например, можно добавить в регистр реквизит `ДатаРегистратора`, заполнять его при проведении и использовать в запросах напрямую. #### Правильно ```sdbl ВЫБРАТЬ ТоварныеЗапасы.ДатаРегистратора ИЗ РегистрНакопления.ТоварныеЗапасы КАК ТоварныеЗапасы ``` Это приведет к дублированию данных и небольшому росту объема хранения, но может существенно повысить производительность и стабильность запроса. #### 2.3. При необходимости жертвуйте компактностью и универсальностью кода ради производительности. - Для конкретного запроса обычно не нужны все возможные типы составной ссылки. Ограничивайте их через `ВЫРАЗИТЬ`. - Если один и тот же запрос используется в разных сценариях, формируйте его текст динамически и подставляйте в `ВЫРАЗИТЬ` нужный тип в зависимости от контекста. Это увеличит объем кода и может снизить универсальность, но обычно заметно повышает производительность и стабильность. #### Неправильно ```sdbl ВЫБРАТЬ Продажи.Регистратор.Номер КАК Номер, Продажи.Регистратор.Дата КАК Дата, Продажи.Контрагент КАК Контрагент, Продажи.Количество КАК Количество, Продажи.Стоимость КАК Стоимость ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ ... ``` В этом примере поле `Регистратор` может быть ссылкой на один из десятков типов документов. В таком случае SQL-текст развернется в большое число соединений (в исходном стандарте показан пример с `56` соединениями), что резко ухудшает производительность. #### Правильно ```sdbl ВЫБРАТЬ ВЫБОР КОГДА Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Номер КОГДА Продажи.Регистратор ССЫЛКА Документ.ЗаказПокупателя ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ЗаказПокупателя).Номер КОНЕЦ КАК Номер, ВЫБОР КОГДА Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Дата КОГДА Продажи.Регистратор ССЫЛКА Документ.ЗаказПокупателя ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ЗаказПокупателя).Дата КОНЕЦ КАК Дата, Продажи.Контрагент КАК Контрагент, Продажи.Количество КАК Количество, Продажи.Стоимость КАК Стоимость ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг ИЛИ Продажи.Регистратор ССЫЛКА Документ.ЗаказПокупателя ``` В таком варианте SQL формируется с небольшим числом соединений по реально используемым типам, поэтому запрос работает быстрее и стабильнее. #### См. также - [#std477: Самодостаточность регистров](https://v8std.ru/std/477/) - [#std437: Оформление текстов запросов](https://v8std.ru/std/437/) - [#std657: Обращения к виртуальным таблицам](https://v8std.ru/std/657/) - [#std658: Эффективные условия запросов](https://v8std.ru/std/658/) - [#std728: Ограничения на использование реквизитов составного типа](https://v8std.ru/std/728/) #### Проверки [#acc:1377](https://v8std.ru/diagnostics/acc/1377/) #### Источник https://its.1c.ru/db/v8std#content:654 ### std655 - Ограничения на соединения с вложенными запросами и виртуальными таблицами #std655 URL: https://v8std.ru/std/655/ Markdown URL: https://v8std.ru/std/655.md Source path: std/655.md Aliases: std655, #std655, std 655, стандарт 655 Related: diagnostic:acc:494, diagnostic:bslls:JoinWithSubQuery, diagnostic:bslls:JoinWithVirtualTable, standard:std656, standard:std777 External sources: https://its.1c.ru/db/v8std#content:655 ID: #std655 # Ограничения на соединения с вложенными запросами и виртуальными таблицами #### 1.1. В запросах не используйте соединения с вложенными запросами. Соединяйте только объекты метаданных или временные таблицы. Если в запросе есть соединение с вложенным запросом, переписывайте его с [#std777: использованием временных таблиц](https://v8std.ru/std/777/) Это правило действует независимо от того, с какой стороны соединения находится вложенный запрос. Исключение: вложенный запрос гарантированно сканирует мало записей. Соединение с вложенным запросом может привести к проблемам: - крайне медленное выполнение даже при слабой загрузке сервера (вплоть до замедления на несколько порядков); - нестабильная скорость (в одних условиях быстро, в других - очень медленно); - существенная разница времени выполнения на разных СУБД; - чувствительность к актуальности и полноте статистик (после обновления статистик быстро, затем снова медленно). #### Потенциально опасный запрос ```sdbl ВЫБРАТЬ ... ИЗ Документ.РеализацияТоваровУслуг ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ ИЗ РегистрСведений.Лимиты ГДЕ ... СГРУППИРОВАТЬ ПО ... ) ПО ... ``` #### Уточнение Оптимизатор СУБД (независимо от конкретной СУБД) не всегда корректно оптимизирует такие запросы. Ключевая сложность - выбор способа соединения. Для соединения выборок существует несколько алгоритмов. Правильный выбор зависит от того, сколько строк ожидается в каждой выборке. Если соединяются две физические таблицы, СУБД обычно может оценить их объем по статистике. Если одна из выборок - вложенный запрос, оценка его объема становится намного менее точной. Из-за этого СУБД может выбрать неверный план, что приводит к резкому падению производительности. #### 1.2. Для ситуации из п. `1.1` используйте пакетный запрос и временную таблицу: #### Правильно ```bsl // Создать менеджер временных таблиц МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; // Текст пакетного запроса Запрос.Текст = " | // Заполняем временную таблицу. Запрос к регистру лимитов. | ВЫБРАТЬ ... | ПОМЕСТИТЬ Лимиты | ИЗ РегистрСведений.Лимиты | ГДЕ ... | СГРУППИРОВАТЬ ПО ... | ИНДЕКСИРОВАТЬ ПО ...; | | // Выполняем основной запрос с использованием временной таблицы | ВЫБРАТЬ ... | ИЗ Документ.РеализацияТоваровУслуг | ЛЕВОЕ СОЕДИНЕНИЕ Лимиты | ПО ...;"; ``` Такой подход: - упрощает работу оптимизатора (в соединении участвуют физические таблицы с понятным объемом); - повышает стабильность плана выполнения; - дает более предсказуемую производительность на разных СУБД; - улучшает читаемость и упрощает отладку запроса. #### 2. Если запрос соединяется с виртуальной таблицей языка запросов `1С:Предприятия` (например, `РегистрНакопления.Товары.Остатки`) и работает медленно, вынесите обращение к виртуальной таблице в отдельный запрос с сохранением результата во временную таблицу (см. п. `1.1`). #### 3. Избегайте неявных подзапросов, которые появляются из-за вложенных соединений. #### Неправильно ```sdbl ВЫБРАТЬ ... ИЗ Справочник.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций ПО ... ПО ... ``` По сути это эквивалентно соединению с подзапросом: ```sdbl ВЫБРАТЬ ... ИЗ Справочник.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ ... ИЗ РегистрНакопления.ТоварыНаСкладах ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций ПО ...) ПО ... ``` Используйте последовательные соединения: #### Правильно ```sdbl ВЫБРАТЬ ... ИЗ Справочник.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах ПО ... ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций ПО ... ``` Важно: вложенные и последовательные соединения - разные запросы, они могут давать разный результат. - если вложенное соединение использовано по ошибочной аналогии, перепишите его на последовательное; - если вложенное соединение использовано осознанно, от него лучше отказаться, так как оно может существенно снизить производительность; - при необходимости можно заменить его соединением с временной таблицей, но сначала проверьте вариант с последовательным соединением - обычно он эффективнее. #### См. также - [#std656: Ограничения на использование вложенных запросов в условии соединения](https://v8std.ru/std/656/) - [#std777: Использование временных таблиц](https://v8std.ru/std/777/) #### Проверки [#bslls:JoinWithSubQuery](https://v8std.ru/diagnostics/bslls/JoinWithSubQuery/) [#bslls:JoinWithVirtualTable](https://v8std.ru/diagnostics/bslls/JoinWithVirtualTable/) [#acc:494](https://v8std.ru/diagnostics/acc/494/) #### Источник https://its.1c.ru/db/v8std#content:655 ### std656 - Ограничения на использование вложенных запросов в условии соединения #std656 URL: https://v8std.ru/std/656/ Markdown URL: https://v8std.ru/std/656.md Source path: std/656.md Aliases: std656, #std656, std 656, стандарт 656 Related: standard:std655, standard:std777 External sources: https://its.1c.ru/db/v8std#content:656 ID: #std656 # Ограничения на использование вложенных запросов в условии соединения Не используйте вложенные запросы в условии соединения. Это может существенно замедлить запрос и в ряде случаев сделать его неработоспособным на отдельных СУБД. Типовой проблемный сценарий: в условии соединения используется вложенный запрос, чтобы получить «срез последних» на конец предыдущего периода, причем для каждой номенклатуры период может отличаться. #### Неправильно ```sdbl ВЫБРАТЬ ОстаткиТоваров.Номенклатура КАК Номенклатура, Цены.Цена КАК ЦенаПрошлогоМесяца ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(...) КАК ОстаткиТоваров ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цена КАК Цены ПО Цены.Номенклатура = ОстаткиТоваров.Номенклатура И Цены.Период В ( ВЫБРАТЬ МАКСИМУМ(ЦеныПрошлогоМесяца.Период) ИЗ РегистрСведений.Цена КАК ЦеныПрошлогоМесяца ГДЕ ЦеныПрошлогоМесяца.Период < НАЧАЛОПЕРИОДА(ОстаткиТоваров.Период, МЕСЯЦ) И ЦеныПрошлогоМесяца.Номенклатура = ОстаткиТоваров.Номенклатура ) ГДЕ ОстаткиТоваров.Склад = &Склад ``` #### Правильно ```sdbl // Максимальные даты установки цен в прошлом периоде для данных номенклатур ВЫБРАТЬ ОстаткиТоваров.Номенклатура КАК Номенклатура, МАКСИМУМ(Цены.Период) КАК Период ПОМЕСТИТЬ ДатыПоНоменклатурам ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(..., Склад = &Склад) КАК ОстаткиТоваров ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цена КАК Цены ПО Цены.Номенклатура = ОстаткиТоваров.Номенклатура И Цены.Период < НАЧАЛОПЕРИОДА(ОстаткиТоваров.Период, МЕСЯЦ) СГРУППИРОВАТЬ ПО ОстаткиТоваров.Номенклатура ; // Выбрать данные по цене за найденный период ВЫБРАТЬ ДатыПоНоменклатурам.Номенклатура КАК Номенклатура, Цены.Цена КАК ЦенаПрошлогоМесяца ИЗ ДатыПоНоменклатурам ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цена КАК Цены ПО Цены.Номенклатура = ДатыПоНоменклатурам.Номенклатура И Цены.Период = ДатыПоНоменклатурам.Период ``` Рекомендуемый подход - вынести вычисления во временную таблицу и затем соединять уже готовый результат. Так запрос обычно работает стабильнее и предсказуемее. #### См. также - [#std655: Ограничения на соединения с вложенными запросами и виртуальными таблицами](https://v8std.ru/std/655/) - [#std777: Использование временных таблиц](https://v8std.ru/std/777/) #### Источник https://its.1c.ru/db/v8std#content:656 ### std657 - Обращения к виртуальным таблицам #std657 URL: https://v8std.ru/std/657/ Markdown URL: https://v8std.ru/std/657.md Source path: std/657.md Aliases: std657, #std657, std 657, стандарт 657 Related: diagnostic:bslls:VirtualTableCallWithoutParameters, diagnostic:v8cs:ql-virtual-table-filters, standard:std654, standard:std733 External sources: https://its.1c.ru/db/metod8dev#content:5457:hdoc, https://its.1c.ru/db/v8std#content:657 ID: #std657 # Обращения к виртуальным таблицам #### 1. Передавайте в параметры виртуальной таблицы все условия, относящиеся к ней. Не переносите такие условия в секцию `ГДЕ`. Так запрос будет работать быстрее: СУБД сможет выбрать лучший план выполнения и не будет обрабатывать лишние записи. #### Неправильно ```sdbl ВЫБРАТЬ Номенклатура ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки() ГДЕ Склад = &Склад ``` #### Правильно ```sdbl ВЫБРАТЬ Номенклатура ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) ``` #### 2.1. В параметрах виртуальной таблицы используйте простые условия вида `Измерение = Значение`. Не используйте подзапросы и соединения. #### Примечание Под соединениями понимаются: - явные соединения в подзапросах; - неявные соединения при обращении к полям через точку; - соединения, добавляемые из ограничений доступа к данным (RLS). #### 2.2. Если подзапросы нужны, соблюдайте условия: - в подзапросе только одна таблица, без соединений с другими таблицами; - если таблица подзапроса - табличная часть, не обращайтесь к реквизитам шапки документа; - если таблица подзапроса - документ с табличными частями, не обращайтесь к табличным частям; - если таблица подзапроса - временная, не используйте раздел `ГДЕ`; - если таблица подзапроса - постоянная, раздел `ГДЕ` допустим только если условие выполняется в 80% случаев и более; - если таблица подзапроса - постоянная, в RLS не должно быть подзапросов и соединений (допустимы только простые условия). #### Неправильно ```sdbl ... ИЗ РегистрНакопления.ТоварыКОтгрузке.Остатки( &ДатаОтгрузки, &ОтображениеРаспоряжений И ДокументОтгрузки.Склад = &Склад // (1) ИЛИ ДокументОтгрузки В (ВЫБРАТЬ // (2) Распоряжения.Распоряжение КАК ДокументОтгрузки ИЗ Документ.ЗаданиеНаПеревозку.Распоряжения КАК Распоряжения // (3) ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаПеревозку.СкладыПогрузки КАК СкладыПогрузки ПО Распоряжения.Ссылка = СкладыПогрузки.Ссылка И СкладыПогрузки.Склад = &Склад И Распоряжения.Ссылка.Проведен // (4) И Распоряжения.Ссылка.Статус В (...))) ``` 1. Неявное соединение через точку 2. Подзапрос с соединением 3. Доступ к этому документу ограничен по сложному RLS, который неявно добавляет еще пару соединений 4. Здесь и ниже обращения к реквизитам шапки #### Правильно ```sdbl ... ИЗ РегистрНакопления.ТоварыКОтгрузке.Остатки( &ДатаОтгрузки, Склад = &Склад // (1) ИЛИ ДокументОтгрузки В (ВЫБРАТЬ ЗаданияНаПеревозку.Распоряжение ИЗ ВременнаяТаблицаЗаданийНаПеревозку КАК ЗаданияНаПеревозку)) // (2) ``` 1. Теперь это реквизит регистра 2. Выборка из временной таблицы без условий #### 2.3. Если нужно несколько условий с подзапросами, выберите одно, которое удовлетворяет требованиям выше и отфильтровывает максимум записей. Остальные условия накладывайте на внешний запрос. В ряде случаев вместо нескольких условий можно использовать временную таблицу. #### Неправильно ```sdbl Номенклатура В (...) И Характеристика В (...) И Серия В (...) ``` #### Правильно ```sdbl (Номенклатура, Характеристика, Серия) В (ВЫБРАТЬ Номенклатура, Характеристика, Серия ИЗ ВременнаяТаблицаТоваров) ``` #### См. также - [#std654: Разыменование ссылочных полей составного типа в языке запросов](https://v8std.ru/std/654/) - [#std733: Эффективное обращение к виртуальной таблице "Остатки"](https://v8std.ru/std/733/) - [Использование параметра Условие при обращении к виртуальной таблице (статья на ИТС)](https://its.1c.ru/db/metod8dev#content:5457:hdoc) #### Проверки [#bslls:VirtualTableCallWithoutParameters](https://v8std.ru/diagnostics/bslls/VirtualTableCallWithoutParameters/) [#v8cs:ql-virtual-table-filters](https://v8std.ru/diagnostics/v8-code-style/ql-virtual-table-filters/) #### Источник https://its.1c.ru/db/v8std#content:657 ### std658 - Эффективные условия запросов #std658 URL: https://v8std.ru/std/658/ Markdown URL: https://v8std.ru/std/658.md Source path: std/658.md Aliases: std658, #std658, std 658, стандарт 658 Related: diagnostic:v8cs:ql-constants-in-binary-operation, standard:std488, standard:std689 External sources: https://its.1c.ru/db/metod8dev#content:1590:hdoc, https://its.1c.ru/db/v8std#content:652, https://its.1c.ru/db/metod8dev#content:5842:hdoc, https://its.1c.ru/db/v8std#content:658 ID: #std658 # Эффективные условия запросов #### 1. Условия запросов пишите с учетом производительности. Цель: не допускать существенного роста времени выполнения при увеличении объема данных. Поля основного условия в секциях `ГДЕ`, `ПО` и в параметрах виртуальных таблиц должны быть проиндексированы. Основное условие можно уточнять дополнительным условием, но объединять их нужно через `И`. Важно учитывать структуру индексов: - для разных полей метаданных создаются разные индексы; - в одном запросе обычно используется только один индекс в основном условии; - основное условие лучше строить на автоматически создаваемых платформой индексах. **Основное условие** — это условие, которое сильнее всего сокращает выборку. Его составляющие объединяются по `И`. **Дополнительное условие** — это уточнение основного условия. Оно тоже объединяется с основным по `И`, но внутри может быть сложным: `НЕ`, `<>`, арифметика, функции и т.п. В основном условии используйте только операции, которые позволяют поиск по индексу: - для первого и всех используемых полей индекса, кроме последнего: только `=` и `И`; - для последнего (или единственного) используемого поля индекса допустимы: `=`, `>`, `=`, `<=`, `ПОДОБНО`, `МЕЖДУ`, `В`, `ИЛИ` (если приводится к `В`); - нельзя использовать арифметику, функции, отрицания и неравенства в основном условии. Для индексации ориентируйтесь на место условия: - условия в `ГДЕ` и параметрах виртуальной таблицы: индексируйте поля основной таблицы выборки; - условия в `ПО` левого соединения: индексируйте поля правой таблицы; - условия в `ПО` внутреннего соединения: индексируйте поля таблицы с большим числом записей. См. также: - [Индексы таблиц базы данных](https://its.1c.ru/db/metod8dev#content:1590:hdoc) - [#std652: Несоответствие индексов и условий запроса](https://its.1c.ru/db/v8std#content:652) #### 1.1. Требования раздела `1` можно не применять, если: - в таблицах всегда мало данных (менее `1000` записей); - запросы с такими условиями выполняются редко. #### 1.2. Если записей много и требования раздела `1` выполнить невозможно: - преобразуйте условия (см. разделы [3](https://v8std.ru/std/658/#3) и [4](https://v8std.ru/std/658/#4)) - добавьте заранее вычисляемые индексируемые поля и заполняйте их при записи; - если это не помогло, пересмотрите архитектуру решения. #### 2. Оператор `ИЛИ`. #### 2.1. В основном условии `ИЛИ` допустим только для последнего (или единственного) поля индекса, когда выражение можно привести к `В`. #### Правильно ```sdbl ГДЕ Таблица.Поле = &Значение1 ИЛИ Таблица.Поле = &Значение2 ``` #### Правильно / Эквивалентно (переписывать необязательно): ```sdbl ГДЕ Таблица.Поле В (&Значения) ``` #### Неправильно ```sdbl ГДЕ Таблица.Поле1 = &Значение1 ИЛИ Таблица.Поле2 = &Значение2 ``` Такое выражение к `В` не приводится. В ряде случаев его можно заменить на `ОБЪЕДИНИТЬ ВСЕ` (если это сохраняет семантику): ```sdbl ... ГДЕ Таблица.Поле1 = &Значение1 ОБЪЕДИНИТЬ ВСЕ ... ГДЕ Таблица.Поле2 = &Значение2 ``` #### Примечание Замена `ИЛИ` на `ОБЪЕДИНИТЬ ВСЕ` применима не всегда. Перед заменой проверьте, что результат выборки не изменится. #### 2.2. В дополнительном условии оператор `ИЛИ` можно использовать без ограничений. #### Правильно ```sdbl ГДЕ Таблица.Поле1 = &Значение1 // Основное условие (индекс) И (Таблица.Поле2 = &Значение2 ИЛИ Таблица.Поле3 = &Значение3) // Дополнительное условие ``` #### Правильно ```sdbl ГДЕ (Таблица.Поле1 = &Значение1 ИЛИ Таблица.Поле1 = &Значение2) И (Таблица.Поле2 = &Значение3 ИЛИ Таблица.Поле2 = &Значение4) ``` #### Правильно / Эквивалентно (переписывать необязательно): ```sdbl ГДЕ Таблица.Поле1 В (&Значения1) // Основное условие И Таблица.Поле2 В (&Значения2) // Дополнительное условие ``` #### 3. Оператор `ПОДОБНО`. В основном условии `ПОДОБНО` можно применять для последнего (или единственного) используемого поля индекса. Функции обработки строк по возможности приводите к `ПОДОБНО`. #### Неправильно ```sdbl ГДЕ ПОДСТРОКА(Таблица.Поле, 1, 6) = "строка" ``` #### Правильно ```sdbl ГДЕ Таблица.Поле ПОДОБНО "строка%" ``` #### Неправильно ```sdbl ГДЕ ПОДСТРОКА(Таблица.Поле, 3, 6) = "строка" ``` #### Неправильно ```sdbl ГДЕ Таблица.Поле ПОДОБНО "__строка%" ``` Литерал не должен начинаться с `_` или `%`. #### Правильно Добавьте вычисляемое при записи поле, например с фрагментом `ПОДСТРОКА(Таблица.Поле, 3, 6)`, проиндексируйте его и ищите по нему: ```sdbl ГДЕ Таблица.ВычисляемоеПоле ПОДОБНО "строка%" ``` #### 4. Оператор `МЕЖДУ`. В основном условии `МЕЖДУ` можно использовать для последнего (или единственного) поля индекса. Функции работы с датами по возможности приводите к `МЕЖДУ`. #### Неправильно ```sdbl ГДЕ МЕСЯЦ(Таблица.Поле) = 1 ``` #### Правильно ```sdbl ГДЕ Таблица.Поле МЕЖДУ &ДатаНачалаМесяца И &ДатаКонцаМесяца ``` Пример границ: - `ДатаНачалаМесяца = 01.01.2016`; - `ДатаКонцаМесяца = 31.01.2016 23:59:59`. #### 5. Выражение `ВЫБОР` используйте только в дополнительных условиях. #### Правильно ```sdbl ГДЕ Таблица.Поле1 = &Значение1 // Основное условие (индекс) И ВЫБОР КОГДА Таблица.Поле2 = &Значение2 ТОГДА Таблица.Поле3 = &Значение3 ИНАЧЕ Таблица.Поле4 = &Значение4 КОНЕЦ ``` #### Неправильно ```sdbl ГДЕ ВЫБОР // Основное условие (индекс использоваться не будет) КОГДА Таблица.Поле2 = &Значение2 ТОГДА Таблица.Поле3 = &Значение3 ИНАЧЕ Таблица.Поле4 = &Значение4 КОНЕЦ ``` #### 6. Арифметические операции над полями выполняйте только в дополнительных условиях. #### Правильно ```sdbl ГДЕ Таблица.Поле1 = &Значение1 // Основное условие (индекс) И Таблица.Поле2 - 1 > 0 // Дополнительное условие ``` #### Неправильно ```sdbl ГДЕ Таблица.Поле1 - 1 > 0 // Основное условие (поиск по индексу невозможен) ``` #### 7. Если для одного объекта и одного права пользователю назначены несколько ролей с разными условиями `RLS`, итоговый запрос к СУБД получит объединение условий через `ИЛИ`. Это может ухудшить производительность и увеличить блокировки, даже если в исходном тексте запроса оператора `ИЛИ` не было. Чтобы этого избежать: - проектируйте роли так, чтобы доступ к объекту для конкретного права давала одна роль; - если ролей несколько, задавайте одинаковые условия `RLS` для одного и того же права объекта. #### См. также - [Типичные причины неоптимальной работы запросов и методы оптимизации](https://its.1c.ru/db/metod8dev#content:5842:hdoc) - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Проверки [#v8cs:ql-constants-in-binary-operation](https://v8std.ru/diagnostics/v8-code-style/ql-constants-in-binary-operation/) #### Источник https://its.1c.ru/db/v8std#content:658 ### std659 - Общие сведения об избыточных блокировках #std659 URL: https://v8std.ru/std/659/ Markdown URL: https://v8std.ru/std/659.md Source path: std/659.md Aliases: std659, #std659, std 659, стандарт 659 Related: standard:std460, standard:std652, standard:std654, standard:std655, standard:std656, standard:std657, standard:std658, standard:std661 External sources: https://its.1c.ru/db/v8std#content:659 ID: #std659 # Общие сведения об избыточных блокировках #### 1. Ошибки в проектировании структуры объектов метаданных могут привести к большому количеству избыточных блокировок и заметному падению производительности системы. Ожидание блокировки возникает, когда разные сеансы `1С:Предприятия` пытаются захватить один и тот же ресурс. В этом контексте ресурсом считается неделимая совокупность данных, которая блокируется только целиком. Поэтому при проектировании важно понимать, какие ресурсы захватываются при каждой операции и насколько «мелко» нарезаны данные. При анализе структуры метаданных в первую очередь проверяйте: - последовательности; - регистры бухгалтерии; - регистры накопления. #### См. также - [#std661: Блокирующее чтение остатков в начале транзакции](https://v8std.ru/std/661/) - [#std460: Использование управляемого режима блокировки](https://v8std.ru/std/460/) - [#std652: Несоответствие индексов и условий запроса](https://v8std.ru/std/652/) - [#std654: Разыменование ссылочных полей составного типа в языке запросов](https://v8std.ru/std/654/) - [#std655: Ограничения на соединения с вложенными запросами и виртуальными таблицами](https://v8std.ru/std/655/) - [#std656: Ограничения на использование вложенных запросов в условии соединения](https://v8std.ru/std/656/) - [#std657: Обращения к виртуальным таблицам](https://v8std.ru/std/657/) - [#std658: Эффективные условия запросов](https://v8std.ru/std/658/) #### Источник https://its.1c.ru/db/v8std#content:659 ### std661 - Блокирующее чтение остатков в начале транзакции #std661 URL: https://v8std.ru/std/661/ Markdown URL: https://v8std.ru/std/661.md Source path: std/661.md Aliases: std661, #std661, std 661, стандарт 661 Related: standard:std648, standard:std663 External sources: https://its.1c.ru/db/v8std#content:661 ID: #std661 # Блокирующее чтение остатков в начале транзакции #### 1.1. В ряде задач нужно выполнять блокирующее чтение итогов. Типовой случай - контроль остатков при проведении документа. Если после проведения остатки становятся отрицательными, транзакцию нужно отменять. Проводить такой документ нельзя. #### 1.2. Чтение остатков в этом сценарии должно быть блокирующим. Нужно запретить двум пользователям одновременно читать один и тот же остаток за период, счет и значения измерений. Если чтение неблокирующее, два пользователя могут одновременно прочитать один и тот же остаток и независимо принять решение о списании. Пример: оба пользователя видят `10` единиц остатка. Первый списывает `8`, второй списывает `6`. Итоговый остаток становится `-4`, что недопустимо для прикладной логики. #### 2. Обычно контроль остатков делают запросом в модуле набора записей перед записью набора. У такого подхода есть две проблемы: - разработчик, как правило, не управляет порядком записи движений в разные регистры (платформа пишет их автоматически); - в части сценариев контроль не нужен, потому что движения заведомо не могут дать отрицательные остатки. Если регистр с контролем записывается в начале транзакции, блокировка держится долго и мешает другим пользователям, пока пишутся остальные регистры. Чтобы минимизировать влияние блокирующего чтения на производительность: - заранее анализируйте, какие остатки нужно контролировать и в каких случаях; - учитывайте сценарии, где контроль не нужен: - приходный документ может только увеличить остатки; - при перепроведении документ может списывать не больше, чем списал при первом проведении; - в начале транзакции (например, в `ОбработкаПроведения`) явно записывайте движения по регистрам, где контроль не нужен; - всегда используйте одинаковый порядок записи регистров (например, алфавитный); - для этих наборов записей ставьте `БлокироватьДляИзменения = Ложь`; - убедитесь, что у всех записываемых регистров накопления и бухгалтерии включен режим разделения итогов; - выполните остальную логику транзакции; - в самом конце транзакции явно запишите движения по регистрам, где контроль нужен; - для наборов записей этих регистров ставьте `БлокироватьДляИзменения = Истина` (это снижает риск взаимоблокировок); - после записи выполняйте запросы контроля остатков по отрицательным остаткам для нужного набора измерений; - если отрицательные остатки найдены, отменяйте транзакцию; если запрос пустой, фиксируйте. Явную управляемую блокировку (`ДЛЯ ИЗМЕНЕНИЯ` в автоматическом режиме) в этом месте обычно не используют, потому что нужные остатки уже заблокированы записью на предыдущем шаге. #### Пример В процедуре `ПередЗаписью` модуля набора записей регистра бухгалтерии `Хозрасчетный` выполняется запрос: #### Пример запроса ```bsl Запрос.Текст = "ВЫБРАТЬ | СуммаОстаток, | СуммаОстатокДт, | СуммаОстатокКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, &Счет, , Организация = &Организация)"; ``` Такой запрос читает и блокирует остатки по условию для всех пользовательских подключений. Ресурсы, созданные разделением итогов, фактически объединяются в один. В результате параллельность становится такой же, как если бы разделение итогов было отключено. Чтобы снизить влияние этой блокировки, переносите проверку как можно ближе к концу транзакции. Например, в модуль документа, в `ПриПроведении`, после явной записи всех движений по всем регистрам. #### См. также - [#std648: Ответственное чтение данных](https://v8std.ru/std/648/) - [#std663: Режим разделения итогов для регистров бухгалтерии](https://v8std.ru/std/663/) #### Источник https://its.1c.ru/db/v8std#content:661 ### std662 - Сдвиг границы последовательности документов #std662 URL: https://v8std.ru/std/662/ Markdown URL: https://v8std.ru/std/662.md Source path: std/662.md Aliases: std662, #std662, std 662, стандарт 662 Related: standard:std659 External sources: https://its.1c.ru/db/v8std#content:662 ID: #std662 # Сдвиг границы последовательности документов #### 1. Не рекомендуется сдвигать границу последовательности при проведении документов. Это может вызывать ожидания на блокировках и снижать общую производительность системы. Сдвиг границы последовательности лучше выносить из оперативных операций в регламентные. Например, выполнять его периодической обработкой с заданной частотой. Граница последовательности по одному набору значений измерений - это один ресурс. Если несколько пользователей одновременно сдвигают границу по одному и тому же набору значений, они блокируют друг друга. #### Пример В системе на базе `УПП 1.x` может использоваться учетная политика с оперативным расчетом себестоимости списания (в момент проведения документа). #### Пример настройки в УПП Изображение: Флажок оперативного расчета себестоимости в УПП (662.upp-operational-costing.png) Алгоритмы партионного учета в `УПП 1.x` используют последовательность `Партионный учет` с одним измерением `Организация`. Чтобы рассчитать себестоимость при проведении расходного документа, нужно сдвигать границу последовательности для организации на момент этого документа. Если два пользователя одновременно проводят расходные документы по одной организации, они будут блокировать друг друга. Это не особенность механизма последовательностей `1С:Предприятия`, а следствие требований самого алгоритма: конкурирующие по времени документы должны выстроиться в строгом порядке. Из-за этого оперативный сдвиг границы может значительно снизить производительность. В таком сценарии корректнее отказаться от оперативного расчета себестоимости и выполнять расчет регламентной обработкой с заданной частотой. #### См. также - [#std659: Общие сведения об избыточных блокировках](https://v8std.ru/std/659/) #### Источник https://its.1c.ru/db/v8std#content:662 ### std663 - Режим разделения итогов для регистров бухгалтерии #std663 URL: https://v8std.ru/std/663/ Markdown URL: https://v8std.ru/std/663.md Source path: std/663.md Aliases: std663, #std663, std 663, стандарт 663 Related: standard:std661, standard:std733 External sources: https://its.1c.ru/db/metod81/content/1393/hdoc, https://its.1c.ru/db/v8std#content:663 ID: #std663 # Режим разделения итогов для регистров бухгалтерии #### 1. Если движения по бухгалтерскому регистру записываются оперативно в многопользовательском режиме, рекомендуется включить разделение итогов. При включенном режиме пользователи могут параллельно обновлять таблицу остатков даже при совпадении периода, счета и значений измерений. Без разделения итогов таблица остатков может стать узким местом при конкурентной работе большого числа пользователей. Если одновременно выполняется контроль остатков, ориентируйтесь на рекомендации [#std661: блокирующего чтения остатков](https://v8std.ru/std/661/) #### Пример 1 В конфигурации есть регистр `Хозрасчетный` с измерениями `Организация` и `Валюта`. #### Регистр без разделения итогов Изображение: Регистр бухгалтерии без разделения итогов (663.mode-disabled-reg.png) Изображение: Настройки регистра без разделения итогов (663.example-no-split.png) Если два пользователя одновременно проводят документы, они блокируют друг друга, когда движения: - относятся к одному периоду; - относятся к одному счету; - имеют одинаковые значения измерений (организация и валюта). В реальных сценариях такое совпадение происходит часто, поэтому возникают ожидания блокировок и снижается производительность. #### Пример 2 Для того же регистра включите разделение итогов. #### Включение разделения итогов Изображение: Разрешение разделения итогов в конфигураторе (663.mode-enabled-config.png) Изображение: Включение разделения итогов в режиме 1С:Предприятие (663.mode-enabled-runtime.png) После включения пользователи смогут параллельно записывать движения даже при совпадении периода, счета и всех измерений. Если при этом выполняется контроль остатков, эффект от разделения итогов ограничен. #### См. также - [#std661: Блокирующее чтение остатков в начале транзакции](https://v8std.ru/std/661/) - [Устройство и использование режима разделения итогов регистров (статья на ИТС)](https://its.1c.ru/db/metod81/content/1393/hdoc) - [#std733: Эффективное обращение к виртуальной таблице «Остатки»](https://v8std.ru/std/733/) #### Источник https://its.1c.ru/db/v8std#content:663 ### std664 - Режим разделения итогов для регистров накопления #std664 URL: https://v8std.ru/std/664/ Markdown URL: https://v8std.ru/std/664.md Source path: std/664.md Aliases: std664, #std664, std 664, стандарт 664 Related: standard:std661, standard:std663, standard:std733 External sources: https://its.1c.ru/db/metod81/content/1393/hdoc, https://its.1c.ru/db/v8std#content:664 ID: #std664 # Режим разделения итогов для регистров накопления #### 1. При проектировании регистра накопления учитывайте, что остатки по одному набору измерений хранятся в одном ресурсе. Из-за этого реальная степень параллельности зависит от состава измерений. Состав измерений нужно подбирать под прикладную задачу и требуемую «гранулярность» остатков. #### 2. Если текущий состав измерений не дает нужной параллельности, используйте разделение итогов (по аналогии с [#std663: регистрами бухгалтерии](https://v8std.ru/std/663/)) Разделение итогов не дает нужного эффекта в части контроля остатков. Если контроль обязателен, переносите его как можно ближе к концу транзакции (см. [#std661: блокирующее чтение остатков](https://v8std.ru/std/661/)) Рассмотрим регистр `ТоварыНаСкладах`. #### Состав измерений Изображение: Состав измерений регистра накопления (664.register-measurements.png) #### Пример 1 Два пользователя одновременно записывают движения в регистр. Первый пользователь записывает: | № | Склад | Номенклатура | | - | --------------- | ---------------------------- | | 1 | Основной склад | Кресло-качалка | | 2 | Основной склад | Кухонный гарнитур "Тинга-2" | | 3 | Склад №2 | Мебельный гарнитур "Торэ" | Второй пользователь записывает: | № | Склад | Номенклатура | | - | -------------- | -------------------------- | | 1 | Основной склад | Мебельный гарнитур "Торэ" | | 2 | Склад №2 | Кресло-качалка | В этих наборах нет строк, совпадающих по всем измерениям, поэтому ожидания блокировки не будет. #### Пример 2 Теперь второй пользователь записывает: | № | Склад | Номенклатура | | - | -------------- | ---------------------------- | | 1 | Основной склад | Кухонный гарнитур "Тинга-2" | | 2 | Склад №2 | Кресло-качалка | | 3 | Оптовый склад | Спальный гарнитур "Инга-М" | Этот набор содержит строку, совпадающую по всем измерениям со строкой первого пользователя. В результате возникает ожидание блокировки, и один пользователь ждет завершения операции другого. #### Пример 3 Если включить разделение итогов, обе записи смогут выполняться параллельно даже при совпадении строк по измерениям. Но при включенном контроле остатков разделение итогов не даст ожидаемого прироста, и контроль остатков нужно переносить к концу транзакции. #### См. также - [#std663: Режим разделения итогов для регистров бухгалтерии](https://v8std.ru/std/663/) - [#std661: Блокирующее чтение остатков в начале транзакции](https://v8std.ru/std/661/) - [Устройство и использование режима разделения итогов регистров (статья на ИТС)](https://its.1c.ru/db/metod81/content/1393/hdoc) - [#std733: Эффективное обращение к виртуальной таблице «Остатки»](https://v8std.ru/std/733/) #### Источник https://its.1c.ru/db/v8std#content:664 ### std668 - Разработка ролей в библиотеках #std668 URL: https://v8std.ru/std/668/ Markdown URL: https://v8std.ru/std/668.md Source path: std/668.md Aliases: std668, #std668, std 668, стандарт 668 Related: standard:std488, standard:std553, standard:std689 External sources: https://its.1c.ru/db/v8std#content:668 ID: #std668 # Разработка ролей в библиотеках #### 1. При проектировании ролей в библиотеках придерживайтесь общего подхода к границам функциональности библиотеки: - в библиотеку включайте объекты метаданных, которые в неизменном или переопределенном виде войдут в конфигурации-потребители; - объекты, специфичные для конкретной конфигурации-потребителя, не разрабатывайте в библиотеке, а создавайте на этапе внедрения и настройки. #### 2. В большинстве случаев библиотека должна поставлять готовый набор ролей для работы со своими данными (справочники, регистры и т.п.). Пример: вместе с универсальной подсистемой анкетирования поставляются роли для добавления и изменения шаблонов, опросов, ответов на вопросы и для администрирования подсистемы. Исключения: - библиотечный объект не является самостоятельным и всегда подчинен объекту-владельцу конфигурации; - библиотечный объект не является полностью завершенным и предполагает существенное переопределение в прикладном решении; - библиотека содержит только алгоритмы и не содержит данных. #### 3. В ролях допустимо задавать не только права к объектам, но и ограничения доступа на уровне записей (RLS). Поставляемый RLS разрабатывайте так, чтобы его можно было использовать «как есть» без доработки в прикладном решении. Тогда библиотечные роли можно переносить при обновлении без изменений. Исключения: - в прикладном решении нет настройки прав на уровне записей: тогда тексты RLS на этапе внедрения (обновления) удаляются из библиотечных ролей; - в прикладном решении есть дополнительные прикладные сущности ограничения доступа (например, проекты, грифы доступа): тогда соответствующую логику добавляют в RLS библиотечных ролей или принимают решение не поставлять роли для таких объектов из библиотеки. #### 4. Если для библиотечных ролей используются правила поставки, для всех ролей задавайте правило `Изменения разрешены`. Это связано с особенностями платформы: при добавлении или удалении метаданных роли изменяются неявно. #### См. также - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std553: Переопределяемые и поставляемые объекты библиотеки](https://v8std.ru/std/553/) - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник https://its.1c.ru/db/v8std#content:668 ### std669 - Ограничение на выполнение внешнего кода #std669 URL: https://v8std.ru/std/669/ Markdown URL: https://v8std.ru/std/669.md Source path: std/669.md Aliases: std669, #std669, std 669, стандарт 669 Related: - diagnostic:acc:1324 - diagnostic:acc:472 - diagnostic:acc:552 - diagnostic:acc:553 - diagnostic:acc:554 - diagnostic:acc:555 - diagnostic:acc:556 - diagnostic:bslls:UsingExternalCodeTools - standard:std485 - standard:std488 - standard:std678 - standard:std770 - standard:std774 - standard:std775 External sources: - https://1c.ru/news/info.jsp?id=21537 - https://its.1c.ru/db/v8327doc/bookmark/dev/ti000001873 - https://v8.1c.ru/platforma/oblachnye-tehnologii/ - https://its.1c.ru/db/v8std#content:669 ID: #std669 # Ограничение на выполнение внешнего кода Внешний код может быть подключен с помощью: - внешних отчетов - внешних обработок - расширений конфигурации - внешних компонент - другими способами (какими?) Внешний код может содержать деструктивные действия: - в самом коде выполнить действие - запустить внешнее приложение - внешнюю компоненту - создать COM-объект Пример уязвимости [Информация для пользователей и партнеров №21537 от 22.06.2016](https://1c.ru/news/info.jsp?id=21537) #### 1. Запрещено выполнение на сервере в небезопасном режиме любого кода, который не является частью программы. Запускать можно код, прошедший аудит. Или код на клиенте. #### Например - внешние отчеты и обработки, расширения, внешние компоненты, любые аналоги подключения внешнего кода - алгоритмы на встроенном языке, тексты запросов и фрагменты текстов запросов, используемые в методах `Выполнить` и `Вычислить`. См. [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) - изменение схем компоновки данных, в которых разрешено использование внешних функций, а так же загрузку схем компоновки данных из файлов При использовании БСП внешний код надо подключать только средствами БСП: - расширения - через механизм базовой функциональности - внешние отчеты и обработки - через подсистему "Дополнительные отчеты и обработки" - внешние компоненты - через подсистему "Внешние компоненты" - для запуска внешних программ - См. [#std774: Безопасность запуска приложений](https://v8std.ru/std/774/) #### 2. По умолчанию требуется отключить интерактивное открытие внешних отчетов и обработок через меню __Файл - Открыть__. В том числе у администратора. См. пп. 2.2 и 2.3 [#std488: Стандартные роли](https://v8std.ru/std/488/) Администратор может разрешить интерактивное открытие. #### При интерактивном открытии надо уведомлять об опасности действия Изображение: Пример предупреждения из БСП (669.alert1.png) #### 3. Предупреждайте администратора об опасности подключения любого внешнего кода. #### 3.1. Предупреждение должно содержать: #### Цитата Внешний код, полученный из недостоверных источников (с которыми, например, нет договоренности о разработке такого кода), может нанести вред компьютерам пользователей, серверным компьютерам, а также данным в программе. Дайте возможность администратору прервать загрузку, провести аудит, а потом заново повторить загрузку. #### При загрузке расширения Изображение: Предупреждение при загрузке расширения (669.alert2.png) #### При загрузке дополнительной обработки Изображение: Предупреждение при загрузке дополнительной обработки (669.alert3.png) #### При загрузке внешней компоненты Изображение: Предупреждение при загрузке внешней компоненты (669.alert4.png) #### 3.2. Подключенный администратором внешний код другие пользователи могут использовать без предупреждений. Механизм защиты от опасных действий платформы во всех случаях отключать запрещено. [Руководство разработчика 7.10.2. Отключение механизма защиты от опасных действий](https://its.1c.ru/db/v8327doc/bookmark/dev/ti000001873) #### 4. Средства обновления конфигурации (из файлов .cf или .cfu), средства восстановления из резервной копии или загрузки из dt-файла - должны быть доступны только администратору - должно выполняться только интерактивно - администратору надо показать предупреждение - при получении обновления из сети Интернет, надо использовать защищенное соединение #### 5. Произвольные файлы могут содержать вредоносный код. Предусмотрите блокировку загрузки файлов по списку разрешенных (запрещенных) расширений. Открывать исполняемые файлы из программы запрещено. Даже если их разрешено загрузить и хранить в программе. Вредоносный код может содержаться в макросах Microsoft Office. При работе с такими файлами используйте средства безопасности, заложенные в их программы просмотра. См [#std775: Безопасность программного обеспечения, вызываемого через открытые интерфейсы](https://v8std.ru/std/775/) Используйте БСП подсистему "Работа с файлами". #### 6. Безопасность внешних компонент. #### 6.1. Внешние компоненты можно размещать: - в макетах конфигурации - они являются частью конфигурации - сторонние - они потенциально опасны Сторонние внешние компоненты, предназначенные для подключения на сервере, устанавливать должен только администратор. Внешние компоненты, предназначенные для подключения на клиенте, устанавливать может любой пользователь, с показом предупреждения. #### 6.2. Сторонние внешние компоненты должны храниться в специальном справочнике. Запись в такой справочник должен иметь только администратор. Подключать сторонние внешние компоненты допустимо только по навигационной ссылке на реквизит справочника. Не подключайте сторонние внешние компоненты по имени файла или по идентификатору программы. Так компоненту легко подменить. #### 6.3. Внешние компоненты в составе конфигурации должны хранится в макетах типа "Внешняя компонента". Макет не локализуется. Компоненты должны локализовываться через интерфейс компоненты. #### 6.4. Используйте БСП для подключение внешних компонент. #### Неправильно ```bsl ПодключитьВнешнююКомпоненту(...) НачатьУстановкуВнешнейКомпоненты(...) УстановитьВнешнююКомпоненту(...) НачатьПодключениеВнешнейКомпоненты(...) ЗагрузитьВнешнююКомпоненту(...) ``` #### Для подключения компоненты из макета ```bsl ОбщегоНазначенияКлиент.ПодключитьКомпонентуИзМакета ``` #### Для подключения компоненты из макета на сервере ```bsl ОбщегоНазначения.ПодключитьКомпонентуИзМакета ``` #### Для подключения компонент из хранилища внешних компонент ```bsl ВнешниеКомпонентыКлиент.ПодключитьКомпоненту ``` #### Для подключения компонент из хранилища внешних компонент на сервере ```bsl ВнешниеКомпоненты.ПодключитьКомпоненту ``` #### 7. Загружать код из внешнего удаленного источника следует: - если источник надежен, когда ему доверяем - только по защищенным каналам - защищенный канал должен быть с проверкой подлинности сервера #### Пример установки защищенного соединения с проверкой подлинности сервера ```bsl ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровОС); Соединение = Новый HTTPСоединение(Сервер,,,,,, ЗащищенноеСоединение); ``` Вне зависимости от протокола и типа канала, канал должен быть защищенным: `HTTPСоединение`, `FTPСоединение`, `WSПрокси`, `WSОпределения`, `WSСсылкаМенеджер.СоздатьWSПрокси`. #### В БСП есть конструктор защищенного соединения ```bsl ЗащищенноеСоединение = ОбщегоНазначенияКлиентСервер.НовоеЗащищенноеСоединение(); Соединение = Новый HTTPСоединение(Сервер,,,,,, ЗащищенноеСоединение); ``` #### 8. Регламентные задания по-умолчанию запускаются под полными правами. Установка безопасного режима не уменьшает прав пользователя. Ограничивайте права в сеансе регламентного задания. Для этого программно создайте и укажите служебного пользователя. Стратегии ограничения прав: - пустой список ролей, вычисления без прав, чтение и изменение выполнять в привилегированном режиме установленном вручную, исполнение произвольного кода производить в безопасном режиме - назначить реального пользователя (для одноразовых заданий ок) - создавать специальный профиль и специальные роли для чтения таблиц Для БСП в подсистеме "Регламентные задания" в начале обработчика регламентного задания разместите код: #### В БСП есть установка служебного пользователя ```bsl РегламентныеЗаданияСервер.УстановитьСлужебногоПользователяРегламентногоЗадания ``` #### См. также - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) - [Облачные технологии](https://v8.1c.ru/platforma/oblachnye-tehnologii/) - [#std678: Безопасность прикладного программного интерфейса сервера](https://v8std.ru/std/678/) - [#std485: Использование привилегированного режима](https://v8std.ru/std/485/) #### Проверки [#bslls:UsingExternalCodeTools](https://v8std.ru/diagnostics/bslls/UsingExternalCodeTools/) [#acc:472](https://v8std.ru/diagnostics/acc/472/) [#acc:552](https://v8std.ru/diagnostics/acc/552/) [#acc:553](https://v8std.ru/diagnostics/acc/553/) [#acc:554](https://v8std.ru/diagnostics/acc/554/) [#acc:555](https://v8std.ru/diagnostics/acc/555/) [#acc:556](https://v8std.ru/diagnostics/acc/556/) [#acc:1324](https://v8std.ru/diagnostics/acc/1324/) #### Источник https://its.1c.ru/db/v8std#content:669 ### std677 - Использование общих реквизитов #std677 URL: https://v8std.ru/std/677/ Markdown URL: https://v8std.ru/std/677.md Source path: std/677.md Aliases: std677, #std677, std 677, стандарт 677 Related: standard:std413, standard:std668 External sources: https://its.1c.ru/db/v8std#content:677 ID: #std677 # Использование общих реквизитов #### 1. Общие реквизиты применяйте для двух задач: - разделение данных (`Разделение данных = Разделять`); - добавление служебного реквизита сразу в несколько объектов (`Разделение данных = Не использовать`). #### 2. Общие реквизиты без разделения данных используйте только для инфраструктурных задач конфигурации, когда данные нужно хранить прямо в прикладных объектах. Не переносите в общие реквизиты обычные прикладные поля вроде `Ответственный`, `Комментарий`, `Организация` только ради удобства. Учитывайте, что права на общие реквизиты настраиваются отдельно от прав на объекты, куда они добавлены. #### 3. Порядок общих реквизитов-разделителей в дереве метаданных выбирайте в соответствии с порядком установки связанных параметров сеанса. Подробности: [#std413: Использование параметров сеанса](https://v8std.ru/std/413/) #### См. также - [#std413: Использование параметров сеанса](https://v8std.ru/std/413/) - [#std668: Разработка ролей в библиотеках](https://v8std.ru/std/668/) #### Источник https://its.1c.ru/db/v8std#content:677 ### std678 - Безопасность прикладного программного интерфейса сервера #std678 URL: https://v8std.ru/std/678/ Markdown URL: https://v8std.ru/std/678.md Source path: std/678.md Aliases: std678, #std678, std 678, стандарт 678 Related: diagnostic:bslls:SetPrivilegedMode, standard:std485, standard:std669, standard:std679 External sources: https://its.1c.ru/db/v8std#content:678 ID: #std678 # Безопасность прикладного программного интерфейса сервера #### 1. Злоумышленник может вызвать серверный код с клиента. Например, он может выполнять запросы по HTTP, пытаясь повторить поведение клиента платформы. Своими действиями злоумышленник не должен получить несанкционированный доступ к данным пользователей или нарушить работоспособность сервера. #### 1.1. Все серверные функции, доступные для вызова с клиента представляют потенциальную угрозу. - Экспортные процедуры и функции из общих модулей с флажками `Сервер` и `Вызов сервера`. Такие функции можно вызывать напрямую с клиента. [#std679: Ограничение на установку признака «Вызов сервера» у общих модулей](https://v8std.ru/std/679/) - Функции модулей форм с директивами компиляции `&НаСервере`, `&НаСервереБезКонтекста`. Такие функции можно вызывать в контексте клиента после получения формы, даже когда функции не экспортные. #### Уязвимость ```bsl &НаКлиенте Процедура УволитьСотрудника(Команда) Если ДатаРегистрацииУвольнения > ДатаЗапрета Тогда ЗарегистрироватьУвольнение(); КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗарегистрироватьУвольнение() ... КонецПроцедуры ``` ```bsl ПараметрыФормы = Новый Структура("Ключ", ВыбранныйСотрудник); Форма = ПолучитьФорму("Справочник.Сотрудники.ФормаЭлемента", ПараметрыФормы); Форма.ЗарегистрироватьУвольнение(); ``` #### 1.2. При разработке формы исключите из кода ее модуля бизнес-логику. Код формы должен содержать только клиент-серверное взаимодействие и обработку реквизитов формы. #### 1.3. Тщательно тестируйте код, в котором устанавливается привилегированный режим или который расположен в общих модулях с флажком `Привилегированный`. [#std485: Использование привилегированного режима](https://v8std.ru/std/485/) #### 2. Любые возможности конфигурации исполнить "внешний" код или произвольные тексты запросов на сервере, не являющиеся частью программы, потенциально опасны. - Внешние отчеты и обработки - COM-объекты - Внешние компоненты Внешние отчеты и обработки могут обращаться ко всем общим модулям без флажка `Вызов сервера`, к модулям объектов и менеджеров объектов конфигурации, пытаться установить привилегированный режим. Такие возможности создают угрозы [#std669: Ограничение на выполнение «внешнего» кода](https://v8std.ru/std/669/) - Работоспособности сервера - Порчу или хищение данных - Зависание или зацикливание рабочего процесса - Утечки памяти - Ресурсоемкие операции и запросы #### 3. Клиентское приложение (тонкий клиент, веб-браузер) не гарантирует безопасность данных, переданных на сторону клиента. Вредоносные программы (вирусы, зловреды) могут перехватить и прочитать данные, полученные клиентом. Серверные процедуры и функции должны возвращать в форму только окончательный результат расчета. Не передавайте в форму исходных или промежуточных данных, которые могут раскрывать побочную, возможно приватную информацию бизнес-процесса. #### Проверки [#bslls:SetPrivilegedMode](https://v8std.ru/diagnostics/bslls/SetPrivilegedMode/) #### Источник https://its.1c.ru/db/v8std#content:678 ### std679 - Ограничение на установку признака «Вызов сервера» у общих модулей #std679 URL: https://v8std.ru/std/679/ Markdown URL: https://v8std.ru/std/679.md Source path: std/679.md Aliases: std679, #std679, std 679, стандарт 679 Related: standard:std469, standard:std678, standard:std680 External sources: https://its.1c.ru/db/v8std#content:679 ID: #std679 # Ограничение на установку признака «Вызов сервера» у общих модулей #### 1. Не устанавливайте признак `Вызов сервера` у всех серверных общих модулей «по умолчанию». В модулях с `Вызов сервера` размещайте только API, который действительно вызывается с клиента и: - не раскрывает пользователю лишние данные; - не выполняет действия, которые ему не разрешены. Например, серверная функция расчета должна передавать на клиент итоговый результат, а не исходные или промежуточные данные, которые могут быть недоступны текущему пользователю. Серверные процедуры и функции, не предназначенные для вызова с клиента, размещайте в серверных модулях без признака `Вызов сервера`. Особого внимания требует код: - который устанавливает привилегированный режим; - который размещен в модулях с признаком `Привилегированный`. #### 2.1. В управляемом приложении работа с экземплярами объектов (`СправочникОбъект`, `ДокументОбъект` и т.п.) должна выполняться на сервере. Поэтому в клиентском коде не создавайте и не получайте такие объекты: - в клиентских общих модулях (в том числе при использовании директивы `ТолстыйКлиентУправляемоеПриложение`); - в обычных формах, запущенных в управляемом режиме. В частности, это важно для толстого клиента в режиме управляемого приложения. Так вы исключаете: - выполнение кода модулей объектов и подписок на события на клиенте; - избыточные серверные вызовы из этого кода. #### 2.2. Если конфигурация не рассчитана на работу в толстом клиенте (управляемое приложение, клиент-сервер), снимите в свойствах конфигурации флажок `Толстый клиент (управляемое приложение, режим клиент-сервер)`. Это уменьшает ложные ошибки при проверке конфигурации. #### См. также - [#std678: Безопасность прикладного программного интерфейса сервера](https://v8std.ru/std/678/) - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) - [#std680: Поддержка толстого клиента, управляемое приложение, клиент-сервер](https://v8std.ru/std/680/) #### Источник https://its.1c.ru/db/v8std#content:679 ### std680 - Поддержка толстого клиента, управляемое приложение, клиент-сервер #std680 URL: https://v8std.ru/std/680/ Markdown URL: https://v8std.ru/std/680.md Source path: std/680.md Aliases: std680, #std680, std 680, стандарт 680 Related: diagnostic:acc:256, diagnostic:acc:361, diagnostic:acc:362, diagnostic:v8cs:module-accessibility-at-client, related:metod8dev:3266, standard:std469, standard:std679 External sources: - https://its.1c.ru/db/files/1CITS/EXE/V8Std/%D0%90%D0%B2%D1%82%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%9A%D0%BE%D0%B4%D0%B0%D0%98%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/%D0%90%D0%B2%D1%82%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%9A%D0%BE%D0%B4%D0%B0%D0%98%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.zip - https://its.1c.ru/db/v8std/content/746/hdoc - https://its.1c.ru/db/v8std#content:680 ID: #std680 # Поддержка толстого клиента, управляемое приложение, клиент-сервер #### 1. В управляемом режиме иногда требуется поддержка запуска толстого клиента (режим управляемого приложения). Причина — часть возможностей, которые есть в обычном приложении, но отсутствуют в управляемом. Подробнее: [#metod3266: Функциональность обычного приложения, отсутствующая в управляемом приложении](https://v8std.ru/metod8dev/3266/) #### 2. В конфигурациях для управляемого приложения обычно предполагается, что в клиент-серверном режиме код модулей: - менеджера; - объекта; - сеанса; компилируется и выполняется только на сервере. В этих модулях часто есть обращения к общим модулям, доступным только на сервере. Однако в толстом клиенте (управляемое приложение, клиент-сервер) эти модули могут компилироваться и выполняться на клиенте. Например: - при явном создании объекта в клиентском коде; - при неявных вызовах платформой обработчиков модулей менеджера и модуля сеанса на клиенте. Из-за этого возникают ошибки и лишние сообщения проверки конфигурации. Чтобы исключить незапланированную компиляцию и выполнение на клиенте: - в модулях объектов полностью исключайте клиентский контекст инструкцией препроцессора; - в модуле сеанса полностью исключайте клиентский контекст инструкцией препроцессора; - в модулях менеджеров всех объектов метаданных полностью исключайте клиентский контекст инструкцией препроцессора. #### Пример для модуля объекта ```bsl #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ... #Иначе ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'"); #КонецЕсли ``` #### Пример для модуля сеанса ```bsl #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ... #КонецЕсли ``` #### Пример для модуля менеджера ```bsl #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ... #КонецЕсли ``` Если в модуле менеджера формируется представление через обработчики `ОбработкаПолученияПредставления` и `ОбработкаПолученияПолейПредставления`, то в толстом клиенте (управляемое приложение, клиент-сервер) представление будет формироваться по умолчанию, без вызова этих обработчиков. Обработчики `ОбработкаПолученияДанныхВыбора` и `ОбработкаПолученияФормы` вызываются только на сервере, и это ограничение на них не распространяется. #### Проверки [#v8cs:module-accessibility-at-client](https://v8std.ru/diagnostics/v8-code-style/module-accessibility-at-client/) #### 3. Если это ограничение нужно снять, обеспечьте работу на клиенте: - обработчиков `ОбработкаПолученияПредставления` и `ОбработкаПолученияПолейПредставления`; - кода подписок на эти события. Для этого: - вынесите код обработчиков за инструкции препроцессора из п. 2; - разместите обработчики подписок в клиент-серверных модулях; - при переходе на сервер используйте общие модули с признаком `Вызов сервера`; - не передавайте мутабельные типы (`СправочникОбъект`, `ДокументОбъект` и т.п.) через параметры и возвращаемые значения. Не устанавливайте признак `Вызов сервера` всем модулям с признаком `Сервер`. См. [#std679: Ограничение на установку признака «Вызов сервера» у общих модулей](https://v8std.ru/std/679/) #### Неправильно ```bsl Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) Взаимодействия.ОбработкаПолученияПредставления(Данные, Представление); СтандартнаяОбработка = Ложь; КонецПроцедуры ``` #### Правильно ```bsl Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) ВзаимодействияВызовСервера.ОбработкаПолученияПредставления(Данные, Представление); СтандартнаяОбработка = Ложь; КонецПроцедуры ``` #### 4. Для расстановки фрагментов кода с инструкциями препроцессора можно использовать [обработку с ИТС](https://its.1c.ru/db/files/1CITS/EXE/V8Std/%D0%90%D0%B2%D1%82%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%9A%D0%BE%D0%B4%D0%B0%D0%98%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/%D0%90%D0%B2%D1%82%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%9A%D0%BE%D0%B4%D0%B0%D0%98%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F.zip). #### См. также - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) - [#std679: Ограничение на установку признака «Вызов сервера» у общих модулей](https://v8std.ru/std/679/) - [Обработчики событий получения представления объектов](https://its.1c.ru/db/v8std/content/746/hdoc) #### Проверки [#acc:256](https://v8std.ru/diagnostics/acc/256/) [#acc:361](https://v8std.ru/diagnostics/acc/361/) [#acc:362](https://v8std.ru/diagnostics/acc/362/) #### Источник https://its.1c.ru/db/v8std#content:680 ### std683 - Общие сведения об организации хранения данных #std683 URL: https://v8std.ru/std/683/ Markdown URL: https://v8std.ru/std/683.md Source path: std/683.md Aliases: std683, #std683, std 683, стандарт 683 Related: нет External sources: - https://buh.ru/books/detail.php?ID=42696 - https://its.1c.ru/db/garant/content/10036812/hdoc/1 - https://its.1c.ru/db/v8devgloss/content/28/hdoc/01 - https://its.1c.ru/db/garant/content/12025268/hdoc/1020 - https://its.1c.ru/db/v8devgloss/content/28/hdoc/03 - https://its.1c.ru/db/v8devgloss/content/28/hdoc/02 - https://its.1c.ru/db/v8devgloss/content/26/hdoc - https://its.1c.ru/db/v8devgloss/content/62/hdoc - https://its.1c.ru/db/v8devgloss/content/22/hdoc - https://its.1c.ru/db/v8devgloss/content/94/hdoc - https://its.1c.ru/db/v8devgloss/content/42/hdoc - https://its.1c.ru/db/v8devgloss/content/23/hdoc - https://its.1c.ru/db/v8devgloss/content/20/hdoc/04 - https://its.1c.ru/db/v8devgloss/content/20/hdoc/05 - https://its.1c.ru/db/v8devgloss/content/151/hdoc - https://its.1c.ru/db/v8devgloss/content/152/hdoc - https://its.1c.ru/db/v8std#content:683 ID: #std683 # Общие сведения об организации хранения данных #### 1. При проектировании системы одна из ключевых задач - выбрать типы объектов метаданных для хранения сущностей предметной области. Неправильный выбор типов объектов приводит к неэффективности решения, усложняет развитие и мешает адаптации к изменению состава задач. #### 2. При выборе типа объектов метаданных в общем случае используйте следующую схему прикладного решения: ```mermaid flowchart TB subgraph STORAGE["Хранение данных"] BLOCK1["1. Условно-постоянная информация
────────────────────────
Константы
Справочники
Перечисления
Планы видов характеристик
Планы счетов
Планы видов расчета"] BLOCK2["2. События процессов предметной области
────────────────────────
Документы
Бизнес-процессы
Задачи"] BLOCK3["3. Накопленные сведения, значения показателей
────────────────────────
Регистры сведений
Регистры накопления
Регистры бухгалтерии
Регистры расчета"] BLOCK2 --> BLOCK1 BLOCK3 --> BLOCK1 BLOCK3 --> BLOCK2 end REPORTS["Получение отчетности и обработка данных
────────────────────────
Отчеты
Обработки"] STORAGE <--> REPORTS ``` *Стрелки на схеме обозначают взаимосвязи между данными (взаимные ссылки).* На схеме выделяются три блока: 1. **Условно-постоянная информация**. Информация вводится один раз, сравнительно редко меняется и многократно используется. Примеры: классификаторы, настройки, перечни, реестры, нормативно-справочная информация. 2. **События процессов предметной области**. События привязаны ко времени и при регистрации могут порождать сведения или изменять значения показателей. Примеры: документооборот, учетные события, регистрация заявок и звонков. 3. **Накопленные сведения, значения показателей**. Данные характеризуют процессы и текущее состояние прикладной области. В отличие от первых двух блоков, это данные необъектной природы: они не являются самостоятельными сущностями. Примеры: история продаж, остатки на складах, текущий баланс, история курсов валют. Отдельно выделяются средства анализа и обработки данных: отчеты и механизмы, которые опираются на данные всех блоков, но сами данные не хранят. Подробнее о задачах и принципах хранения информации: книга [«Профессиональная разработка в системе 1С Предприятие 8»](https://buh.ru/books/detail.php?ID=42696), глава 6. #### 2.1. Упрощенно, для каждой сущности предметной области сначала выберите блок: - если нужно хранить сравнительно редко изменяющуюся информацию, не привязанную ко времени, выбирайте блок условно-постоянной информации (`1`); - если нужно регистрировать события, требующие документального подтверждения, и отслеживать последовательность на временной оси, выбирайте блок событий процессов (`2`); - в остальных случаях относите сущность к блоку сведений и значений показателей (`3`). Развернутые критерии выбора блока: #### Условно-постоянная информация | Критерий | Значение | | --- | --- | | Основное предназначение | Хранение нормативно-справочной информации и реестров. | | Отслеживание изменения состояния | Не требуется. | | Иерархия и группировка данных | Требуется, в том числе между разными сущностями. | | Ключевые свойства | Нужны `Наименование` и `Код`. | | Хранение значений дополнительных реквизитов сущности | Нужно хранить редко изменяемые реквизиты произвольных данных. | | Нумерация | Нужны серии кодов по всем элементам типа или в пределах иерархии. | #### События процессов предметной области | Критерий | Значение | | --- | --- | | Основное предназначение | Регистрация событий процессов и документальное подтверждение сведений. | | Отслеживание изменения состояния | Требуется. Например: регистрация/отмена регистрации документа, учет запусков и окончаний процесса, смена состояния задач, формирование движений. | | Иерархия и группировка данных | Не требуется. | | Ключевые свойства | Нужно учитывать дату события и его номер. | | Хранение значений дополнительных реквизитов сущности | Нужно хранить ссылки на другие объекты и параметры, характеризующие событие. | | Нумерация | Нужны серии номеров по всем элементам данного типа или в пределах периода по дате, включая сквозную нумерацию объектов разных типов. | #### Накопленные сведения, значения показателей | Критерий | Значение | | --- | --- | | Основное предназначение | Хранение данных, характеризующих процессы и текущее состояние прикладной области. | | Отслеживание изменения состояния | Не требуется. | | Иерархия и группировка данных | Не требуется. | | Ключевые свойства | Не требуется. | | Хранение значений дополнительных реквизитов сущности | Нужно хранить только значения реквизитов для других объектов базы. | | Нумерация | Не требуется. | #### 2.2. После выбора блока примите решение о конкретном типе объекта метаданных внутри этого блока. #### Уточнение Для пп. `2.2.1`-`2.2.3` область применения: `управляемое приложение`, `обычное приложение`. #### 2.2.1. Для хранения условно-постоянной информации: 1. Для хранения плана счетов по [принципам двойной записи](https://its.1c.ru/db/garant/content/10036812/hdoc/1) используйте объект метаданных [«План счетов»](https://its.1c.ru/db/v8devgloss/content/28/hdoc/01). 2. Для хранения перечня видов расчета для [учета начислений и удержаний](https://its.1c.ru/db/garant/content/12025268/hdoc/1020) используйте объект метаданных [«План видов расчета»](https://its.1c.ru/db/v8devgloss/content/28/hdoc/03). 3. Для хранения списка характеристик, когда состав списка, тип характеристик и их состав определяет пользователь, используйте [«План видов характеристик»](https://its.1c.ru/db/v8devgloss/content/28/hdoc/02). 4. Для хранения одиночного значения, редактируемого пользователем (обычно администратором) и не требующего ссылок из других данных, используйте [«Константа»](https://its.1c.ru/db/v8devgloss/content/26/hdoc). 5. Для фиксированного списка значений, который не редактируется пользователем и не имеет дополнительных реквизитов, используйте [«Перечисление»](https://its.1c.ru/db/v8devgloss/content/62/hdoc). 6. В остальных случаях, как правило, используйте [«Справочник»](https://its.1c.ru/db/v8devgloss/content/22/hdoc). Развернутые критерии выбора типа объекта: #### Константа | Критерий | Значение | | --- | --- | | Основное предназначение | Хранение одиночных значений, предопределенных данных. | | Добавление и редактирование пользователем | Требуется только изменение значения. | | Иерархия и группировка данных | Не требуется. | | Хранение значений дополнительных реквизитов сущности | Не требуется. | | Хранение списков значений дополнительных реквизитов | Не требуется. | | Возможность ввода на основании других объектов | Не требуется. | | Нумерация | Не требуется. | #### Перечисление | Критерий | Значение | | --- | --- | | Основное предназначение | Хранение списка неизменных представлений без дополнительных атрибутов. | | Добавление и редактирование пользователем | Не требуется. | | Иерархия и группировка данных | Не требуется. | | Хранение значений дополнительных реквизитов сущности | Не требуется. | | Хранение списков значений дополнительных реквизитов | Не требуется. | | Возможность ввода на основании других объектов | Не требуется. | | Нумерация | Не требуется. | #### План видов характеристик | Критерий | Значение | | --- | --- | | Основное предназначение | Хранение списка сущностей и значений характеристик экземпляров сущности. | | Добавление и редактирование пользователем | Требуется добавление, удаление, изменение элементов, редактирование состава и значений характеристик сущности. | | Иерархия и группировка данных | Требуется в пределах одной сущности. | | Хранение значений дополнительных реквизитов сущности | Нужно хранить произвольные данные для атрибутов сущности. | | Хранение списков значений дополнительных реквизитов | Требуется хранение списков наборов значений реквизитов для сущности. | | Возможность ввода на основании других объектов | Нужен ввод новых элементов с использованием информации других объектов. | | Нумерация | Нужны серии кодов по всем элементам одного типа или в пределах группировки. | #### Справочник | Критерий | Значение | | --- | --- | | Основное предназначение | Хранение списка объектов и значений их атрибутов. | | Добавление и редактирование пользователем | Требуется добавление, удаление и изменение элементов. | | Иерархия и группировка данных | Требуется в пределах одной сущности или между разными сущностями. | | Хранение значений дополнительных реквизитов сущности | Нужно хранить произвольные данные для атрибутов сущности. | | Хранение списков значений дополнительных реквизитов | Требуется хранение списков наборов значений реквизитов для сущности. | | Возможность ввода на основании других объектов | Нужен ввод новых элементов с использованием информации других объектов. | | Нумерация | Нужны серии кодов по всем элементам одного типа, в пределах группировки или подчинения. | #### 2.2.2. Для хранения событий процессов предметной области: 1. Если нужен учет одиночных событий, адресованных исполнителю (пользователю, сотруднику, группе, роли) и не требующих формирования движений, используйте [«Задача»](https://its.1c.ru/db/v8devgloss/content/94/hdoc). 2. Если нужно регистрировать возникновение и ход регулярного процесса как последовательность действий, используйте [«Бизнес-процесс»](https://its.1c.ru/db/v8devgloss/content/42/hdoc). Для учета событий в рамках процесса используйте [«Задача»](https://its.1c.ru/db/v8devgloss/content/94/hdoc). 3. В остальных случаях, как правило, используйте [«Документ»](https://its.1c.ru/db/v8devgloss/content/23/hdoc). Развернутые критерии выбора типа объекта: #### Задача | Критерий | Значение | | --- | --- | | Основное предназначение | Учет одиночных событий, адресованных исполнителям. | | Вложенность | Не требуется. | | Объединение в журналы | Не требуется. | | Состояние объекта | Нужны состояния `новый`, `выполнено`. | | Нумерация | Нужны серии номеров по всем задачам данного вида или в пределах периода по дате. | #### Бизнес-процесс (с задачами) | Критерий | Значение | | --- | --- | | Основное предназначение | Учет последовательности событий, адресованных исполнителям. | | Вложенность | Нужен учет процессов, вложенных в другие процессы (иерархия задач). | | Объединение в журналы | Не требуется. | | Состояние объекта | Нужны состояния `новый`, `в работе`, `завершен`. | | Нумерация | Нужны серии номеров по всем процессам данного вида или в пределах периода по дате, плюс нумерация событий внутри процесса. | #### Документ | Критерий | Значение | | --- | --- | | Основное предназначение | Регистрация событий во времени и генерация вторичных данных, соответствующих этим событиям. | | Вложенность | Не требуется. | | Объединение в журналы | Нужно объединение документов разных видов в одном журнале. | | Состояние объекта | Нужны состояния `проведен`, `не проведен`. | | Нумерация | Нужны серии номеров для документов разных видов: сквозные или в пределах периода по дате. | #### 2.2.3. Для хранения накопленных сведений и значений показателей: 1. Для хранения данных учета с использованием [принципа двойной записи](https://its.1c.ru/db/garant/content/10036812/hdoc/1) используйте [«Регистр бухгалтерии»](https://its.1c.ru/db/v8devgloss/content/20/hdoc/04). 2. Для хранения результатов расчета [учета начислений и удержаний](https://its.1c.ru/db/garant/content/12025268/hdoc/1020) используйте [«Регистр расчета»](https://its.1c.ru/db/v8devgloss/content/20/hdoc/05). 3. Если требуется хранить изменения показателей (приход/расход) и получать остатки и обороты за период, используйте [«Регистр накопления»](https://its.1c.ru/db/v8devgloss/content/151/hdoc). 4. Во всех остальных случаях используйте [«Регистр сведений»](https://its.1c.ru/db/v8devgloss/content/152/hdoc). Развернутые критерии выбора типа объекта: #### Регистр накопления | Критерий | Значение | | --- | --- | | Основное предназначение | Хранение изменений данных (приход и расход значений показателей). | | Получение данных | Нужно получать остатки и обороты. | | Подтверждение происхождения данных | Требуется обязательная связь с регистрирующим документом. | #### Регистр сведений | Критерий | Значение | | --- | --- | | Основное предназначение | Хранение информации в виде наборов записей, регистрация сведений и значений. | | Получение данных | Нужно получать срез на момент времени или текущее значение показателей. | | Подтверждение происхождения данных | Связь с регистрирующим документом не обязательна. | #### 3. Пример выбора типов объектов метаданных. Пусть организация периодически проводит анкетирование. При заполнении анкеты указывается дата анкетирования, набор вопросов и набор ответов. Сущность `Анкета` привязана к дате и порождает статистику (ответы на вопросы). Следовательно: - это периодическое событие, привязанное ко времени, которое порождает значения параметров, то есть второй блок «события предметной области»; - внутри второго блока это должен быть `Документ`, потому что анкета формирует вторичные данные (результаты ответов на вопросы). #### Источник https://its.1c.ru/db/v8std#content:683 ### std686 - Работа с параметром "Отказ" в обработчиках событий #std686 URL: https://v8std.ru/std/686/ Markdown URL: https://v8std.ru/std/686.md Source path: std/686.md Aliases: std686, #std686, std 686, стандарт 686 Related: diagnostic:acc:144, diagnostic:bslls:UsingCancelParameter, diagnostic:v8cs:event-heandler-boolean-param, standard:std499 External sources: https://its.1c.ru/db/v8std#content:686 ID: #std686 # Работа с параметром "Отказ" в обработчиках событий #### 1. Параметру `Отказ` не присваивайте `Ложь`. Если ему присвоить `Ложь`, то можно случайно сбросить ранее установленный `Истина`. Установка `Ложь` может быть неявной: через булеву функцию. Потому и результат функции тоже не присваивайте. #### Неправильно ```bsl Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ... Отказ = ЕстьОшибки(); ... КонецПроцедуры ``` и ```bsl Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ... Отказ = Ложь; ... КонецПроцедуры ``` #### Правильно ```bsl Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ... Если ЕстьОшибки() Тогда Отказ = Истина; КонецЕсли; ... КонецПроцедуры ``` или ```bsl Отказ = Отказ Или ЕстьОшибки(); ``` #### Проверки [#v8cs:event-heandler-boolean-param](https://v8std.ru/diagnostics/v8-code-style/event-heandler-boolean-param/) #### 2. Вообще это правило подходит для любых возвращаемых булевых параметров, например `СтандартнаяОбработка`, `Выполнение`. #### 3. Если устанавливаете параметр `Отказ` в `Истина`, то объясняйте пользователю что случилось. Платформа покажет сообщение об ошибке с текстом, например `Не удалось записать "Заказ покупателя"!`, из которого пользователь не поймет что именно произошло. Уведомлять пользователя надо по стандарту с помощью сообщения, или отказаться от установки параметра `Отказ` и вызвать исключение. #### См. также - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) #### Проверки [#bslls:UsingCancelParameter](https://v8std.ru/diagnostics/bslls/UsingCancelParameter/) [#acc:144](https://v8std.ru/diagnostics/acc/144/) #### Источник https://its.1c.ru/db/v8std#content:686 ### std689 - Настройка ролей и прав доступа #std689 URL: https://v8std.ru/std/689/ Markdown URL: https://v8std.ru/std/689.md Source path: std/689.md Aliases: std689, #std689, std 689, стандарт 689 Related: - diagnostic:acc:1375 - diagnostic:acc:226 - diagnostic:acc:227 - diagnostic:acc:228 - diagnostic:acc:229 - diagnostic:acc:232 - diagnostic:acc:233 - diagnostic:acc:234 - diagnostic:acc:290 - diagnostic:acc:291 - diagnostic:acc:336 - diagnostic:acc:359 - diagnostic:acc:360 - diagnostic:acc:375 - diagnostic:acc:419 - diagnostic:acc:420 - diagnostic:acc:421 - diagnostic:acc:422 - diagnostic:acc:423 - diagnostic:acc:424 - diagnostic:acc:442 - diagnostic:acc:443 - diagnostic:acc:507 - diagnostic:acc:508 - diagnostic:acc:510 - diagnostic:acc:511 - diagnostic:acc:512 - diagnostic:acc:513 - diagnostic:acc:541 - diagnostic:v8cs:document-post-in-privileged-mode - diagnostic:v8cs:functional-option-privileged-get-mode - diagnostic:v8cs:using-isinrole - standard:std485 - standard:std488 - standard:std534 - standard:std658 - standard:std668 - standard:std705 - standard:std737 External sources: https://its.1c.ru/db/v8std#content:689 ID: #std689 # Настройка ролей и прав доступа Действует для конфигураций УП (ERP), УТ 11 и входящих в них библиотек. Для других конфигураций рекомендуется к применению. #### 1. Общие положения. #### 1.1. Стройте роли атомарно: одна роль должна покрывать одну элементарную функцию. Из атомарных ролей формируйте профили пользователей. Профили назначайте пользователям средствами БСП. #### 1.2. Роли `ПолныеПрава` и `АдминистраторСистемы` обеспечивают максимальный доступ. Подробности: [#std488: Стандартные роли](https://v8std.ru/std/488/) #### 1.3. Ни одна роль, включая `ПолныеПрава` и `АдминистраторСистемы`, не должна давать интерактивное удаление ссылочных объектов. После добавления нового объекта проверяйте это в роли `ПолныеПрава`. #### 1.4. Права на удаление ссылочных объектов должны быть только у ролей `ПолныеПрава` и `АдминистраторСистемы`. #### 1.5. Флаг «Устанавливать права для новых объектов» оставляйте только у роли `ПолныеПрава`. Для остальных ролей флаг должен быть снят. #### 1.6. Если право нужно только администратору (например, запуск служебной обработки), отдельную роль создавать не нужно. Достаточно `ПолныеПрава` или `АдминистраторСистемы`. #### 1.7. Для документов с проведением обычно включайте привилегированный режим проведения и отмены проведения. Из-за этого обычно не нужны отдельные роли с правом изменения регистров, подчиненных регистратору. Исключение: документы, предназначенные для прямой корректировки регистров. #### Проверки [#v8cs:document-post-in-privileged-mode](https://v8std.ru/diagnostics/v8-code-style/document-post-in-privileged-mode/) #### 1.8. Для функциональных опций обычно включайте привилегированный режим получения. Исключение: параметризованные функциональные опции, где различие по правам заложено в бизнес-логике. #### Проверки [#v8cs:functional-option-privileged-get-mode](https://v8std.ru/diagnostics/v8-code-style/functional-option-privileged-get-mode/) #### 1.9. Кроме стандартных ролей БСП не создавайте роли, дающие общие системные права (`Администрирование`, `ТонкийКлиент` и т.п.). #### 1.10. Для неконфиденциальных и общедоступных данных права чтения включайте в: - `БазовыеПрава`; - `БазовыеПраваВнешнихПользователей` (если есть внешние пользователи). #### 1.11. Одна роль не должна объединять права на объекты разных библиотек и разных подсистем. Подробности: [#std668: Разработка ролей в библиотеках](https://v8std.ru/std/668/) #### 2. Правила создания ролей к элементарным функциям. #### 2.1. При проектировании доступа сначала объединяйте объекты в элементарные функции. Если объекты в одной функции, должно быть невозможно корректно настроить доступ к ним раздельно. #### 2.2. Если есть сомнение, относятся ли два объекта к одной функции, разделяйте их. #### 2.3. Каждый объект должен быть отнесен ровно к одной элементарной функции. #### 2.4. Объекты разных библиотек не объединяйте в одну элементарную функцию. #### 3. Ссылочные объекты и регистры. #### 3.1. Для функций со ссылочными объектами и независимыми регистрами сведений обычно создавайте две роли: - `Чтение` (`Read`); - `ДобавлениеИзменение` или `Изменение`. Роль изменения должна включать права роли чтения плюс права изменения. #### 3.2. Для регистров, подчиненных регистратору, права изменения обычно не назначают (см. п. 1.7). #### 4. Журналы документов. #### 4.1. Если все документы журнала относятся к одной элементарной функции, права чтения и просмотра журнала включайте в роли этой функции. #### 4.2. Отдельная роль только для журнала в большинстве случаев бесполезна. Если нет прав на чтение хотя бы одного документа журнала, платформа ограничит отображение граф журнала. #### 5. Константы. #### 5.1. Если константу должен менять только администратор, права изменения должны быть только у `ПолныеПрава` и/или `АдминистраторСистемы`. #### 5.2. Если константу может менять пользователь, добавляйте права в существующую настроечную роль или создавайте отдельную роль `Изменение`. #### 5.3. Для большинства неконфиденциальных констант права чтения и просмотра назначайте базовым ролям библиотеки. Это позволяет не включать привилегированный режим при каждом чтении. #### 5.4. Для конфиденциальных констант создавайте отдельную роль чтения, если это действительно нужно. #### 6. Подсистемы, отображаемые в главном командном интерфейсе. #### 6.1. Для каждой подсистемы верхнего уровня создавайте роль `Подсистема` (`Subsystem`) с правом просмотра. #### 6.2. Если часть функций подсистемы вынесена в отдельную форму (например, «Настройки и справочники»), роль подсистемы должна включать права просмотра этой формы. #### 7. Отчеты. #### 7.1. Если отчет построен на данных одной элементарной функции, права на отчет можно включать в роли этой функции. #### 7.2. Если на внедрении может понадобиться отдельная настройка доступа к отчету, создавайте отдельную роль `ПросмотрОтчета`. #### 7.3. Если отчет использует данные из нескольких элементарных функций, создавайте отдельную роль `ПросмотрОтчета`. #### 7.4. Однотипные отчеты можно объединять в одну элементарную функцию, если: - отчеты не входят в другие элементарные функции; - на внедрении не требуется различная настройка доступа к этим отчетам. #### 8. Обработки и общие формы. #### 8.1. Для каждой обработки-рабочего места (есть отдельная команда в интерфейсе) создавайте роль `ИспользованиеОбработки` (`UseDataProcessor`). #### 8.2. Права на вспомогательные обработки и обработки с общим служебным кодом назначайте в роли `БазовыеПрава`. #### 8.3. Права к обработкам только для администратора назначайте только через `ПолныеПрава` и/или `АдминистраторСистемы`. #### 8.4. Те же правила применяются к общим формам. Для общих форм используйте роль `ИспользованиеОбщейФормы`. #### 8.5. Исключения из этого подхода допустимы только в явно обоснованных сценариях проектирования интерфейса (см. п. 6.2). #### 9. Команды. #### 9.1. Для команды без изменения данных назначайте право просмотра тем же ролям, которые дают чтение соответствующего объекта. Права на печатные команды в общих обработках назначайте базовым ролям библиотеки. #### 9.2. Для команды, которая изменяет данные, право просмотра назначайте роли, дающей право изменения соответствующих объектов. #### 10. Права, не связанные с доступом к объектам. #### 10.1. Если нужно выдать дополнительное прикладное право, создавайте отдельную роль ``, которая не дает доступ к объектам метаданных. В имени роли не используйте слово `Право`. #### 10.2. В коде проверяйте наличие такой роли. Пользователь с ролью `ПолныеПрава` должен проходить проверку без добавления этой роли в профиль. Для проверки используйте `Пользователи.РолиДоступны`. #### 10.3. Не используйте альтернативные механизмы (настройки, константы, служебные флаги) вместо проверки ролей для реализации дополнительных прав. #### 11. Права для внешних пользователей. Роли, предназначенные только для внешних пользователей, именуйте с отдельным функциональным префиксом. Например: - `СамообслуживаниеОформлениеПретензий`; - `СамообслуживаниеПросмотрОтчетаСостояниеВыполненияЗаказа`; - `СамообслуживаниеДобавлениеИзменениеКонтрагентов`. #### 12. Права к устаревшим объектам. Объекты метаданных с префиксом `Удалить` исключайте из всех ролей, кроме `ПолныеПрава` и `АдминистраторСистемы`. #### См. также - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std485: Использование привилегированного режима](https://v8std.ru/std/485/) - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) - [#std658: Эффективные условия запросов](https://v8std.ru/std/658/) - [#std668: Разработка ролей в библиотеках](https://v8std.ru/std/668/) - [#std705: Отнесение библиотечных объектов к подсистемам](https://v8std.ru/std/705/) - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Проверки [#v8cs:using-isinrole](https://v8std.ru/diagnostics/v8-code-style/using-isinrole/) [#acc:226](https://v8std.ru/diagnostics/acc/226/) [#acc:227](https://v8std.ru/diagnostics/acc/227/) [#acc:228](https://v8std.ru/diagnostics/acc/228/) [#acc:229](https://v8std.ru/diagnostics/acc/229/) [#acc:232](https://v8std.ru/diagnostics/acc/232/) [#acc:233](https://v8std.ru/diagnostics/acc/233/) [#acc:234](https://v8std.ru/diagnostics/acc/234/) [#acc:290](https://v8std.ru/diagnostics/acc/290/) [#acc:291](https://v8std.ru/diagnostics/acc/291/) [#acc:336](https://v8std.ru/diagnostics/acc/336/) [#acc:359](https://v8std.ru/diagnostics/acc/359/) [#acc:360](https://v8std.ru/diagnostics/acc/360/) [#acc:375](https://v8std.ru/diagnostics/acc/375/) [#acc:419](https://v8std.ru/diagnostics/acc/419/) [#acc:420](https://v8std.ru/diagnostics/acc/420/) [#acc:421](https://v8std.ru/diagnostics/acc/421/) [#acc:422](https://v8std.ru/diagnostics/acc/422/) [#acc:423](https://v8std.ru/diagnostics/acc/423/) [#acc:424](https://v8std.ru/diagnostics/acc/424/) [#acc:442](https://v8std.ru/diagnostics/acc/442/) [#acc:443](https://v8std.ru/diagnostics/acc/443/) [#acc:507](https://v8std.ru/diagnostics/acc/507/) [#acc:508](https://v8std.ru/diagnostics/acc/508/) [#acc:510](https://v8std.ru/diagnostics/acc/510/) [#acc:511](https://v8std.ru/diagnostics/acc/511/) [#acc:512](https://v8std.ru/diagnostics/acc/512/) [#acc:513](https://v8std.ru/diagnostics/acc/513/) [#acc:541](https://v8std.ru/diagnostics/acc/541/) [#acc:1375](https://v8std.ru/diagnostics/acc/1375/) #### Источник https://its.1c.ru/db/v8std#content:689 ### std690 - Обработчики обновления информационной базы #std690 URL: https://v8std.ru/std/690/ Markdown URL: https://v8std.ru/std/690.md Source path: std/690.md Aliases: std690, #std690, std 690, стандарт 690 Related: diagnostic:acc:1363, standard:std556, standard:std701, standard:std784 External sources: https://its.1c.ru/db/bspdoc, https://its.1c.ru/db/v8std#content:690 ID: #std690 # Обработчики обновления информационной базы Стандарт действует для конфигураций на базе Библиотеки стандартных подсистем (БСП) и уточняет требования других стандартов. Подробности по подсистеме см. в документации ИТС: https://its.1c.ru/db/bspdoc. #### 1. Основные сведения о библиотеке (основной конфигурации) #### 1.1. При разработке конфигураций на базе библиотек каждая библиотека должна сообщать сведения, необходимые для корректного обновления информационной базы: - имя; - версию; - список обработчиков обновления; - зависимости от других библиотек. Эти сведения размещайте в специальном общем модуле, имя которого начинается с `ОбновлениеИнформационнойБазы...`. Пример: в УТ 11 модуль называется `ОбновлениеИнформационнойБазыУТ`. Имена модулей всех используемых библиотек явно перечисляйте в общем модуле `ПодсистемыКонфигурацииПереопределяемый`: ```bsl Процедура ПриДобавленииПодсистем(МодулиПодсистем) Экспорт МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыУТ"); КонецПроцедуры ``` Аналогичный модуль должен быть определен и для основной конфигурации. При создании общего модуля `ОбновлениеИнформационнойБазы...` используйте шаблон: #### Шаблон модуля ```bsl //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы <библиотеки или конфигурации>. // ///////////////////////////////////////////////////////////////////////////// #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ОбновлениеВерсииИБ #Область СведенияОБиблиотекеИлиКонфигурации // Заполняет основные сведения о библиотеке или основной конфигурации. // Библиотека, имя которой имя совпадает с именем конфигурации в метаданных, определяется как основная конфигурация. // // Параметры: // Описание - Структура: // // * Имя - Строка - имя библиотеки, например, "СтандартныеПодсистемы". // * Версия - Строка - версия в формате из 4-х цифр, например, "2.1.3.1". // // * ИдентификаторИнтернетПоддержки - Строка - уникальное имя программы в сервисах Интернет-поддержки. // * ТребуемыеПодсистемы - Массив - имена других библиотек (Строка), от которых зависит данная библиотека. // Обработчики обновления таких библиотек должны быть вызваны ранее // обработчиков обновления данной библиотеки. // При циклических зависимостях или, напротив, отсутствии каких-либо зависимостей, // порядок вызова обработчиков обновления определяется порядком добавления модулей // в процедуре ПриДобавленииПодсистем общего модуля // ПодсистемыКонфигурацииПереопределяемый. // * РежимВыполненияОтложенныхОбработчиков - Строка - "Последовательно" - отложенные обработчики обновления выполняются // последовательно в интервале от номера версии информационной базы до номера // версии конфигурации включительно или "Параллельно" - отложенный обработчик после // обработки первой порции данных передает управление следующему обработчику, а после // выполнения последнего обработчика цикл повторяется заново. // * ЗаполнятьДанныеНовыхПодсистемПриПереходеСДругойПрограммы - Булево - если установить Истина, то при переходе с // другой программы будут автоматически выполнены обработчики начального заполнения // новых подсистем. При описании обработчика обновления можно при необходимости // отключить его выполнение, указав свойство НеВыполнятьПриПереходеСДругойПрограммы. // Процедура ПриДобавленииПодсистемы(Описание) Экспорт Описание.Имя = "<Имя библиотеки>"; Описание.Версия = "XX.XX.XX.XX"; Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы"); Описание.РежимВыполненияОтложенныхОбработчиков = "Последовательно"; КонецПроцедуры #КонецОбласти #Область ОбработчикиОбновленияИнформационнойБазы // Добавляет в список процедуры-обработчики обновления данных ИБ // для всех поддерживаемых версий библиотеки или конфигурации. // Вызывается перед началом обновления данных ИБ для построения плана обновления. // // Параметры: // Обработчики - см. ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления // // Пример: // Для добавления своей процедуры-обработчика в список: // Обработчик = Обработчики.Добавить(); // Обработчик.Версия = "1.1.0.0"; // Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_1_0_0"; // Обработчик.РежимВыполнения = "Оперативно"; // Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт // Обработчики, выполняемые при каждом обновлении ИБ // Обработчики, выполняемые при переходе на определенную версию // Обработчики, выполняемые при заполнении пустой ИБ КонецПроцедуры // См. ОбновлениеИнформационнойБазыПереопределяемый.ПередОбновлениемИнформационнойБазы. Процедура ПередОбновлениемИнформационнойБазы() Экспорт КонецПроцедуры // Вызывается после завершения обновления данных ИБ. // В зависимости от тех или иных условий можно отключить штатное открытие формы // с описанием изменений в новой версии программы при первом входе в нее (после обновления), // а также выполнить другие действия. // // Не рекомендуется выполнять в данной процедуре какую-либо обработку данных. // Такие процедуры следует оформлять штатными обработчиками обновления, выполняемыми на каждую версию "*". // // Параметры: // ПредыдущаяВерсия - Строка - версия до обновления. "0.0.0.0" для "пустой" ИБ. // ТекущаяВерсия - Строка - версия после обновления. Как правило, соответствует Метаданные.Версия. // ВыполненныеОбработчики - ДеревоЗначений: // * НачальноеЗаполнение - Булево - если Истина, то обработчик должен срабатывать при запуске на "пустой" базе. // * Версия - Строка - например, "2.1.3.39". Номер версии конфигурации, при переходе // на которую должна быть выполнена процедура-обработчик обновления. // Если указана пустая строка, то это обработчик только для начального заполнения // (должно быть указано свойство НачальноеЗаполнение). // * Процедура - Строка - полное имя процедуры-обработчика обновления/начального заполнения. // Например, "ОбновлениеИнформационнойБазыУПП.ЗаполнитьНовыйРеквизит" // Обязательно должна быть экспортной. // * РежимВыполнения - Строка - режим выполнения обработчика обновления. Допустимые значения: // Монопольно, Отложенно, Оперативно. Если значение не заполнено, обработчик // считается монопольным. // * ОбщиеДанные - Булево - если Истина, то обработчик должен срабатывать до // выполнения любых обработчиков, использующих разделенные данные. // Допустимо указывать только для обработчиков с режимом выполнения Монопольно и Оперативно. // Если указать значение Истина для обработчика с режимом // выполнения Отложенно, будет выдано исключение. // * УправлениеОбработчиками - Булево - если Истина, то обработчик должен иметь параметр типа Структура, в котором // есть свойство РазделенныеОбработчики - таблица значений со структурой, // возвращаемой этой функцией. // При этом колонка Версия игнорируется. В случае необходимости выполнения // разделенного обработчика в данную таблицу необходимо добавить строку с // описанием процедуры обработчика. // Имеет смысл только для обязательных (Версия = *) обработчиков обновления // с установленным флагом ОбщиеДанные. // * Комментарий - Строка - описание действий, выполняемых обработчиком обновления. // * Идентификатор - УникальныйИдентификатор - необходимо заполнять для обработчиков отложенного обновления, // для остальных заполнение не требуется. Требуется для идентификации // обработчика в случае его переименования. // // * БлокируемыеОбъекты - Строка - необходимо заполнять для обработчиков отложенного обновления, // для остальных заполнение не требуется. Полные имена объектов через запятую, // которые следует блокировать от изменения до завершения процедуры обработки данных. // Если заполнено, то также требуется заполнить и свойство ПроцедураПроверки. // * ПроцедураПроверки - Строка - необходимо заполнять для обработчиков отложенного обновления, // для остальных заполнение не требуется. Имя функции, которая для переданного объекта // определяет, завершена ли для него процедура обработки данных. // Если переданный объект обработан, то следует вернуть значение Истина. // Вызывается из процедуры ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан. // Параметры, передаваемые в функцию: // Параметры - см. ОбновлениеИнформационнойБазы.МетаданныеИОтборПоДанным. // * ПроцедураЗаполненияДанныхОбновления - Строка - указывается процедура, которая регистрирует данные, // подлежащие обновлению данным обработчиком. // * ЗапускатьТолькоВГлавномУзле - Булево - только для обработчиков отложенного обновления с режимом выполнения Параллельно. // Указать Истина, если обработчик обновления должен выполняться только в главном // узле РИБ. // * ЗапускатьИВПодчиненномУзлеРИБСФильтрами - Булево - только для обработчиков отложенного обновления с режимом // выполнения Параллельно. // Указать Истина, если обработчик обновления должен также выполняться в // подчиненном узле РИБ с фильтрами. // * ЧитаемыеОбъекты - Строка - объекты, которые обработчик обновления будет читать при обработке данных. // * ИзменяемыеОбъекты - Строка - объекты, которые обработчик обновления будет изменять при обработке данных. // * ПриоритетыВыполнения - ТаблицаЗначений - таблица приоритетов выполнения между отложенными обработчиками, // изменяющими или читающими одни и те же данные. Подробнее см. в комментарии // к функции ОбновлениеИнформационнойБазы.ПриоритетыВыполненияОбработчика. // * ВыполнятьВГруппеОбязательных - Булево - следует указывать, если обработчик требуется // выполнять в одной группе с обработчиками на версии "*". // При этом возможно менять порядок выполнения обработчика // относительно других путем изменения приоритета. // * Приоритет - Число - для внутреннего использования. // * МонопольныйРежим - Неопределено // - Булево - если указано Неопределено, то обработчик // должен безусловно выполняться в монопольном режиме. // Для обработчиков перехода на конкретную версию (версия <> *): // Ложь - обработчик не требует монопольного режима для выполнения. // Истина - обработчик требует монопольного режима для выполнения. // Для обязательных обработчиков обновления (Версия = "*"): // Ложь - обработчик не требует монопольного режима. // Истина - обработчик может требовать монопольного режима для выполнения. // В такие обработчики передается параметр типа структура // со свойством МонопольныйРежим (типа Булево). // При запуске обработчика в монопольном режиме передается // значение Истина. В этом случае обработчик должен выполнить // требуемые действия по обновлению. Изменение параметра // в теле обработчика игнорируется. // При запуске обработчика в немонопольном режиме передается // значение Ложь. В этом случае обработчик не должен вносить никакие // изменения в ИБ. // Если в результате анализа выясняется, что обработчику требуется // изменить данные ИБ, следует установить значение параметра в Истина // и прекратить выполнение обработчика. // В этом случае оперативное (немонопольное) обновление ИБ будет // отменено и будет выдана ошибка с требованием выполнить обновление в // монопольном режиме. // ВыводитьОписаниеОбновлений - Булево - если установить Ложь, то не будет открыта форма // с описанием изменений в новой версии программы. По умолчанию Истина. // МонопольныйРежим - Булево - признак того, что обновление выполнилось в монопольном режиме. // Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия, Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, Знач МонопольныйРежим) Экспорт КонецПроцедуры // См. ОбновлениеИнформационнойБазыПереопределяемый.ПриПодготовкеМакетаОписанияОбновлений. Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт КонецПроцедуры // Позволяет переопределить режим обновления данных информационной базы. // Для использования в редких (нештатных) случаях перехода, не предусмотренных в // стандартной процедуре определения режима обновления. // // Параметры: // РежимОбновленияДанных - Строка - в обработчике можно присвоить одно из значений: // "НачальноеЗаполнение" - если это первый запуск пустой базы (области данных); // "ОбновлениеВерсии" - если выполняется первый запуск после обновление конфигурации базы данных; // "ПереходСДругойПрограммы" - если выполняется первый запуск после обновление конфигурации базы данных, // в которой изменилось имя основной конфигурации. // // СтандартнаяОбработка - Булево - если присвоить Ложь, то стандартная процедура // определения режима обновления не выполняется, // а используется значение РежимОбновленияДанных. // Процедура ПриОпределенииРежимаОбновленияДанных(РежимОбновленияДанных, СтандартнаяОбработка) Экспорт КонецПроцедуры // Добавляет в список процедуры-обработчики перехода с другой программы (с другим именем конфигурации). // Например, для перехода между разными, но родственными конфигурациями: базовая -> проф -> корп. // Вызывается перед началом обновления данных ИБ. // // Параметры: // Обработчики - ТаблицаЗначений: // * ПредыдущееИмяКонфигурации - Строка - имя конфигурации, с которой выполняется переход; // или "*", если нужно выполнять при переходе с любой конфигурации. // * Процедура - Строка - полное имя процедуры-обработчика перехода с программы // ПредыдущееИмяКонфигурации. // Например, "ОбновлениеИнформационнойБазыУПП.ЗаполнитьУчетнуюПолитику" // Обязательно должна быть экспортной. // // Пример: // Обработчик = Обработчики.Добавить(); // Обработчик.ПредыдущееИмяКонфигурации = "УправлениеТорговлей"; // Обработчик.Процедура = "ОбновлениеИнформационнойБазыУПП.ЗаполнитьУчетнуюПолитику"; // Процедура ПриДобавленииОбработчиковПереходаСДругойПрограммы(Обработчики) Экспорт КонецПроцедуры // Вызывается после выполнения всех процедур-обработчиков перехода с другой программы (с другим именем конфигурации), // и до начала выполнения обновления данных ИБ. // // Параметры: // ПредыдущееИмяКонфигурации - Строка - имя конфигурации до перехода. // ПредыдущаяВерсияКонфигурации - Строка - имя предыдущей конфигурации (до перехода). // Параметры - Структура: // * ВыполнитьОбновлениеСВерсии - Булево - по умолчанию Истина. Если установить Ложь, // то будут выполнена только обязательные обработчики обновления (с версией "*"). // * ВерсияКонфигурации - Строка - номер версии после перехода. // По умолчанию, равен значению версии конфигурации в свойствах метаданных. // Для того чтобы выполнить, например, все обработчики обновления с версии ПредыдущаяВерсияКонфигурации, // следует установить значение параметра в ПредыдущаяВерсияКонфигурации. // Для того чтобы выполнить вообще все обработчики обновления, установить значение "0.0.0.1". // * ОчиститьСведенияОПредыдущейКонфигурации - Булево - по умолчанию Истина. // Для случаев когда предыдущая конфигурация совпадает по имени с подсистемой текущей конфигурации, следует // указать Ложь. // Процедура ПриЗавершенииПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации, ПредыдущаяВерсияКонфигурации, Параметры) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ #КонецОбласти #КонецОбласти #КонецОбласти ``` #### 1.2. Обработчики обновления данных ИБ предназначены для дополнительной обработки данных после реструктуризации базы: - инициализация новых констант, новых реквизитов и реквизитов новых предопределенных элементов; - перенос данных из устаревших структур метаданных в новые; - генерация новых данных; - другие операции подготовки данных. Для автогенерируемых строк, записываемых в ИБ программно (например, при заполнении наименований предопределенных элементов), руководствуйтесь [#std784: требованиями по локализации автогенерированных данных](https://v8std.ru/std/784/) #### 1.3. Обработчик обновления состоит из двух частей: - описательной: когда обработчик должен выполняться и где находится в конфигурации; - программной: код модификации данных ИБ в экспортной процедуре. Описание нового обработчика добавляйте в `ПриДобавленииОбработчиковОбновления` по шаблону: ```bsl Обработчик = Обработчики.Добавить(); Обработчик.Версия = "<номер версии>"; Обработчик.Процедура = "<полное имя экспортной процедуры>"; Обработчик.НачальноеЗаполнение = {Истина|Ложь}; Обработчик.РежимВыполнения = {"Монопольно"|"Оперативно"|"Отложенно"}; ``` Поля строки таблицы `Обработчики`: - `Версия` (`Строка`): номер версии конфигурации, при обновлении на которую вызывается обработчик. - Формат: `Р.П.В.С` (редакция, подредакция, версия, сборка). - Если указано `*`, обработчик выполняется при каждом обновлении ИБ (обычно для служебных системных данных). - Если `Версия` не задана, `НачальноеЗаполнение` должно быть `Истина`. - `Процедура` (`Строка`): полный путь к процедуре-обработчику, например `"Справочник.Валюты.ЗаполнитьКодДляПоиска"`. - `НачальноеЗаполнение` (`Булево`): если `Истина`, обработчик вызывается при первом запуске пустой ИБ (`0.0.0.0`), созданной из поставки. - `РежимВыполнения` (`Строка`): `Монопольно`, `Оперативно`, `Отложенно`. - `Монопольно`: без активных пользовательских сеансов, регламентных заданий, внешних соединений и веб-сервисов. - `Оперативно`: в редких случаях, когда важно минимизировать ожидание пользователей при динамическом переходе на исправительные релизы без изменения структуры данных. - `Отложенно`: в фоне, после завершения монопольных/оперативных обработчиков, когда пользователи уже могут входить в программу. Если обязательный обработчик (`Версия = "*"`) требует определить необходимость монопольного режима программно, учитывайте двухфазный вызов: - первый вызов: `Параметры.МонопольныйРежим = Ложь`, данные ИБ модифицировать нельзя; - если требуется изменение данных, обработчик ставит `Параметры.МонопольныйРежим = Истина` и завершает выполнение; - второй вызов: `Параметры.МонопольныйРежим = Истина`, данные можно модифицировать. Если используется параллельный режим отложенного обновления (`РежимВыполненияОтложенныхОбработчиков = "Параллельно"`), применяйте отдельные требования к таким обработчикам. #### Пример описания обработчика ```bsl Обработчик = Обработчики.Добавить(); Обработчик.РежимВыполнения = "Монопольно"; Обработчик.Версия = "11.1.0.0"; Обработчик.Процедура = "Справочник.МойСправочник.ЗаполнитьКодДляПоиска"; ``` #### Пример реализации обработчика ```bsl // Обработчик обновления УТ 11.1.0.0 // // Перебираются все элементы справочника, в которых не заполнен код для поиска, // и заполняется кодом справочника без лидирующих нулей и префиксов. // Процедура ЗаполнитьКодДляПоиска() Экспорт ... ``` #### 2. Расположение обработчиков обновления #### 2.1. Процедура-обработчик должна быть экспортной. Размещайте ее в модуле менеджера объекта метаданных, который она обновляет. Пример: если в справочник `Подразделения` добавлен новый реквизит, обработчик заполнения этого реквизита размещается в модуле менеджера этого справочника. #### 2.2. Если обработчик нельзя однозначно связать с конкретным объектом метаданных, допускается размещение в серверном общем модуле, тематически связанном с обработкой. В этом случае процедура должна находиться в служебной части модуля, в подразделе `Обновление ИБ`. #### 3. Реализация обработчиков обновления #### 3.1. К процедуре-обработчику предъявляются требования: - не должно быть интерактивного взаимодействия с пользователем; - алгоритм не должен прерывать или зацикливать обработку, не должен оставлять необработанные данные и не должен требовать действий пользователя для продолжения; - в параллельных отложенных обработчиках нельзя вызывать исключения, которые остановят всю процедуру обновления; - в остальных обработчиках исключение допустимо только при критической ошибке, когда другие способы обхода проблемы исчерпаны; - обработчик должен быть идемпотентным: повторный запуск на тех же данных дает тот же результат и не создает дубликаты; - в пределах одной версии обработчики не должны зависеть от порядка выполнения; если зависимость есть, обработчики объединяют; - при использовании [#std701: планов обмена РИБ с отборами](https://v8std.ru/std/701/) учитывайте, что в подчиненном узле могут быть неполные данные (например, есть движения, но нет регистратора), и такие данные нужно пропускать #### 3.2. Обработчик обновления не должен содержать лишних действий с данными. Он должен выполняться максимально быстро. #### 3.2.1. Отключайте бизнес-логику при обработке данных. В большинстве случаев используйте признак `ОбменДанными.Загрузка`: ```bsl ДокументОбъект.ОбменДанными.Загрузка = Истина; ``` При необходимости частичного отключения логики допустим дополнительный признак: ```bsl ДокументОбъект.ДополнительныеСвойства.Вставить("ОтключитьМоюБизнесЛогику"); ``` #### 3.2.2. Для большинства данных отключайте регистрацию изменений на узлах планов обмена, чтобы не отправлять весь объем обработанных данных во все узлы. - В РИБ обработка данных должна выполняться независимо в каждом узле. - При обмене между произвольными конфигурациями обработка не должна сама по себе инициировать выгрузку в базы-получатели. Исключение: создание ссылочных объектов, которые должны переноситься механизмами обмена в другие узлы РИБ с тем же значением реквизита `Ссылка`. #### 3.2.3. Вместо простого вызова: ```bsl ДокументОбъект.Записать(); ``` используйте: ```bsl ДокументОбъект.ОбменДанными.Загрузка = Истина; // отключить всю бизнес-логику при записи ДокументОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); ДокументОбъект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; ДокументОбъект.Записать(); ``` Для БСП 2.1.4 и выше используйте процедуру `ЗаписатьДанные` общего модуля `ОбновлениеИнформационнойБазы`: ```bsl ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект); ``` #### 3.3. Перед процедурой-обработчиком должен быть комментарий. Первая строка комментария должна содержать версию конфигурации, для которой предназначен обработчик. Следующие строки должны отвечать на вопросы: - какие данные будут изменены; - какие изменения будут внесены. #### Пример комментария ```bsl // Обработчик обновления УТ 11.1.0.0 // // Перебираются все элементы справочника, в которых не заполнен код для поиска, // и заполняется кодом справочника без лидирующих нулей и префиксов. // Процедура ЗаполнитьКодДляПоиска() Экспорт ``` #### 4. Переход на новые версии библиотек #### 4.1. При постановке конфигурации на поддержку новой версии библиотеки увеличивайте номер версии конфигурации. Это необходимо, чтобы запускались обработчики обновления информационной базы. #### См. также - [#std556: Начальные действия при работе конфигурации](https://v8std.ru/std/556/) #### Проверки [#acc:1363](https://v8std.ru/diagnostics/acc/1363/) #### Источник https://its.1c.ru/db/v8std#content:690 ### std693 - Использование объектов типа Структура #std693 URL: https://v8std.ru/std/693/ Markdown URL: https://v8std.ru/std/693.md Source path: std/693.md Aliases: std693, #std693, std 693, стандарт 693 Related: diagnostic:acc:293, diagnostic:acc:294, diagnostic:acc:295, diagnostic:bslls:NumberOfValuesInStructureConstructor, standard:std640, standard:std641 External sources: https://its.1c.ru/db/v8std#content:693 ID: #std693 # Использование объектов типа Структура Требования направлены на читаемость кода и удобство сопровождения. Читабельный код снижает риск ошибок и упрощает работу команды. #### 1. Не передавайте в конструктор структуры более 3 значений. Для остальных значений используйте `Вставить` или присваивание свойствам. #### Неправильно ```bsl ПараметрыФормыКомпоновки = Новый Структура( "НеПомещатьНастройкиВСхемуКомпоновкиДанных, |НеРедактироватьСхемуКомпоновкиДанных, |НеНастраиватьУсловноеОформление, |НеНастраиватьВыбор, |НеНастраиватьПорядок, |АдресСхемыКомпоновкиДанных, |АдресНастроекКомпоновкиДанных, |УникальныйИдентификатор, |Заголовок", Истина, Истина, Истина, Истина, Истина, ТекущиеДанные.АдресСхемыКомпоновкиДанных, ?(АдресНастроекСхемыКомпоновкиДанных <> Неопределено, АдресНастроекСхемыКомпоновкиДанных, ТекущиеДанные.АдресНастроекСхемыКомпоновкиДанных), УникальныйИдентификатор, ЗаголовокФормыНастройкиСхемыКомпоновкиДанных); ``` #### Правильно ```bsl ПараметрыФормыКомпоновки = Новый Структура; ПараметрыФормыКомпоновки.Вставить("НеПомещатьНастройкиВСхемуКомпоновкиДанных", Истина); ПараметрыФормыКомпоновки.Вставить("НеРедактироватьСхемуКомпоновкиДанных", Истина); ПараметрыФормыКомпоновки.Вставить("НеНастраиватьУсловноеОформление", Истина); ПараметрыФормыКомпоновки.Вставить("НеНастраиватьВыбор", Истина); ПараметрыФормыКомпоновки.Вставить("НеНастраиватьПорядок", Истина); ПараметрыФормыКомпоновки.Вставить("АдресСхемыКомпоновкиДанных", ТекущиеДанные.АдресСхемыКомпоновкиДанных); ПараметрыФормыКомпоновки.Вставить("АдресНастроекКомпоновкиДанных", ?(АдресНастроекСхемыКомпоновкиДанных <> Неопределено, АдресНастроекСхемыКомпоновкиДанных, ТекущиеДанные.АдресНастроекСхемыКомпоновкиДанных)); ПараметрыФормыКомпоновки.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); ПараметрыФормыКомпоновки.Вставить("Заголовок", ЗаголовокФормыНастройкиСхемыКомпоновкиДанных); ``` #### 2. Не используйте в конструкторе структуры конструкторы других объектов, если они принимают параметры. Особенно избегайте вложенных структур с заполнением свойств. #### Неправильно ```bsl НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции( Объект.Товары, Новый Структура( "ЗаполнитьПризнакХарактеристикиИспользуются, |ЗаполнитьПризнакТипНоменклатуры, |ЗаполнитьПризнакВариантОформленияПродажи", Новый Структура("Номенклатура", "ХарактеристикиИспользуются"), Новый Структура("Номенклатура", "ТипНоменклатуры"), Новый Структура("Номенклатура", "ВариантОформленияПродажи") ) ); ``` #### Правильно ```bsl ПараметрыЗаполненияРеквизитов = Новый Структура; ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются", Новый Структура("Номенклатура", "ХарактеристикиИспользуются")); ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакВариантОформленияПродажи", Новый Структура("Номенклатура", "ВариантОформленияПродажи")); НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции( Объект.Товары, ПараметрыЗаполненияРеквизитов); ``` #### 3. Не вызывайте в конструкторе структуры функции с большим числом параметров (более 3). #### Неправильно ```bsl СведенияОТоваре = Новый Структура("ПараметрыТовара, ЦенаПродажиИОстаткиТовара, ЦенаЗакупкиИОстаткиТовара", ПодборТоваровКлиентСервер.ПараметрыТовара(), ПодборТоваровВызовСервера.ЦенаПродажиИОстаткиТовара( Номенклатура, Характеристика, Соглашение, Валюта, ВидыЦен), ПодборТоваровВызовСервера.ЦенаЗакупкиИОстаткиТовара( Номенклатура, Характеристика, Соглашение, Валюта, ВидыЦен)); ``` #### Правильно ```bsl СведенияОТоваре = Новый Структура("ПараметрыТовара, ЦенаПродажиИОстаткиТовара, ЦенаЗакупкиИОстаткиТовара"); СведенияОТоваре.ПараметрыТовара = ПодборТоваровКлиентСервер.ПараметрыТовара(); СведенияОТоваре.ЦенаПродажиИОстаткиТовара = ПодборТоваровВызовСервера.ЦенаПродажиИОстаткиТовара( Номенклатура, Характеристика, Соглашение, Валюта, ВидыЦен); СведенияОТоваре.ЦенаЗакупкиИОстаткиТовара = ПодборТоваровВызовСервера.ЦенаЗакупкиИОстаткиТовара( Номенклатура, Характеристика, Соглашение, Валюта, ВидыЦен); ``` #### 4.1. Не добавляйте свойства структуры в разных местах кода с последующей проверкой их наличия. Создавайте структуру со значениями по умолчанию сразу. #### Неправильно ```bsl ПараметрыВыполнения = Новый Структура; ... УникальныйИдентификатор = ?(ПараметрыВыполнения.Свойство("УникальныйИдентификатор"), ПараметрыВыполнения.УникальныйИдентификатор, Неопределено); ``` #### Правильно ```bsl ПараметрыВыполнения = ПараметрыВыполнения(); УникальныйИдентификатор = ПараметрыВыполнения.УникальныйИдентификатор; ... Функция ПараметрыВыполнения() Результат = Новый Структура; Результат.Вставить("УникальныйИдентификатор", Неопределено); Возврат Результат; КонецФункции ``` #### 4.2. Исключение — структуры с нефиксированным форматом: - структуры из внешних источников (HTTP-ответ, данные сканера штрихкодов, терминала сбора данных); - системные параметры формы, параметры выбора в параметрах формы; Пользовательские параметры формы, объявленные на закладке «Параметры» редактора формы. #### См. также - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) - [#std641: Структуры и таблицы значений в качестве параметров процедур и функций](https://v8std.ru/std/641/) #### Проверки [#bslls:NumberOfValuesInStructureConstructor](https://v8std.ru/diagnostics/bslls/NumberOfValuesInStructureConstructor/) [#acc:293](https://v8std.ru/diagnostics/acc/293/) [#acc:294](https://v8std.ru/diagnostics/acc/294/) [#acc:295](https://v8std.ru/diagnostics/acc/295/) #### Источник https://its.1c.ru/db/v8std#content:693 ### std697 - Использование предопределенных элементов #std697 URL: https://v8std.ru/std/697/ Markdown URL: https://v8std.ru/std/697.md Source path: std/697.md Aliases: std697, #std697, std 697, стандарт 697 Related: - diagnostic:acc:1149 - diagnostic:acc:192 - diagnostic:acc:193 - diagnostic:acc:194 - diagnostic:acc:195 - diagnostic:acc:304 - diagnostic:acc:305 - standard:std443 - standard:std488 - standard:std638 External sources: https://its.1c.ru/db/v8std#content:697 ID: #std697 # Использование предопределенных элементов #### Для информации Стандарт действует для платформы `8.3.3` и выше без режима совместимости с `8.2`. #### 1.1. В справочниках, планах счетов, планах видов характеристик и планах видов расчета предопределенные элементы можно создавать автоматически или программно. #### 1.2. В большинстве случаев создавайте предопределенные элементы автоматически. Так проще и безопаснее работать с ними в коде. Примеры: страна `Россия` в справочнике `СтраныМира`, профиль групп доступа `Администратор`. Для этого: - оставляйте свойство `ОбновлениеПредопределенныхДанных = Авто`; - не переключайте режим в коде через `УстановитьОбновлениеПредопределенныхДанных`; - запретите пользователям интерактивное удаление предопределенных данных. Отключите следующие права ролей (по умолчанию они выключены): - `ИнтерактивноеУдалениеПредопределенныхДанных`; - `ИнтерактивнаяПометкаУдаленияПредопределенныхДанных`; - `ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных`; - `ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных`. См. [#std488: Стандартные роли](https://v8std.ru/std/488/) #### 1.3. #### Для информации Уточнение действует для управляемого и обычного приложения. Исключение: подчиненные узлы РИБ. В подчиненном узле предопределенные элементы: - не создаются автоматически; - не обновляются автоматически при изменении метаданных; - должны приходить из главного узла вместе с изменениями конфигурации. В этом режиме: 1. Загружайте сообщение обмена в подчиненный узел до выполнения прикладного кода, который обращается к предопределенным элементам. 2. В логике загрузки данных из главного узла (обработчик `ПриПолученииДанныхОтГлавного`, правила регистрации объектов) избегайте обращений к предопределенным элементам. Нет гарантии, что они уже пришли из сообщения обмена. 3. Код обработчиков обновления ИБ, который заполняет предопределенные элементы, выполняйте только в главном узле. #### Пример ```bsl Если ПланыОбмена.ГлавныйУзел() = Неопределено Тогда // Заполняем предопределенные элементы. ... КонецЕсли; ``` При использовании подсистемы `Обмен данными` БСП версии `2.1.4` и выше требования 1 и 2 снимаются. #### 1.4. Для таблиц с предопределенными элементами, которые: - не входят в состав плана обмена РИБ; - не связаны с таблицами, входящими в план обмена РИБ; устанавливайте свойство `ОбновлениеПредопределенныхДанных = ОбновлятьАвтоматически`. Значение `Авто` здесь не подходит: в подчиненном узле `Авто` означает `НеОбновлятьАвтоматически`, и элементы автоматически не создаются. Если включен режим совместимости с `8.3.3`, при первом запуске подчиненного узла РИБ (сразу после обновления конфигурации) также устанавливайте автоматическое обновление данных программно: ```bsl Справочники.<ИмяСправочника>.УстановитьОбновлениеПредопределенныхДанных( ОбновлениеПредопределенныхДанных.ОбновлятьАвтоматически); ``` #### 2. Если наличие предопределенного элемента зависит от условий (функциональные опции, режим работы и т. п.), автоматическое создание не требуется. Пример: предопределенные виды расчета в плане видов расчета `Начисления` зависят от функциональных опций `ИспользоватьУчетВремениСотрудниковВЧасах`, `ИспользоватьСдельныйЗаработок` и др. В этом случае: - устанавливайте `ОбновлениеПредопределенныхДанных = Не обновлять автоматически`; - реализуйте в прикладном коде создание элемента и, при необходимости, [#std638: пометку недействительным](https://v8std.ru/std/638/) - учитывайте в коде, что элемент может отсутствовать. #### Пример ```bsl Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетВремениСотрудниковВЧасах") Тогда НачислениеОбъект = ПланыВидовРасчета.Начисления.СоздатьВидРасчета(); НачислениеОбъект.ИмяПредопределенныхДанных = "ОкладПоЧасам"; ... НачислениеОбъект.Записать(); КонецЕсли; ``` Если не учитывать отсутствие такого элемента, обращение из кода или запроса вызовет исключение. #### Неправильно ```bsl ... = ПланВидовРасчета.Начисления.ОкладПоЧасам; ... = ПредопределенноеЗначение("ПланВидовРасчета.Начисления.ОкладПоЧасам"); ``` При использовании БСП версии `2.1.4` и выше применяйте функцию `ПредопределенныйЭлемент()` общих модулей `ОбщегоНазначения` или `ОбщегоНазначенияКлиент`. Она возвращает `Неопределено`, если элемента нет в ИБ. #### Правильно ```bsl ... = ОбщегоНазначенияКлиент.ПредопределенныйЭлемент( "ПланВидовРасчета.Начисления.ОкладПоЧасам"); ``` #### См. также - [#std443: Получение предопределенных значений на клиенте](https://v8std.ru/std/443/) #### Проверки [#acc:192](https://v8std.ru/diagnostics/acc/192/) [#acc:193](https://v8std.ru/diagnostics/acc/193/) [#acc:194](https://v8std.ru/diagnostics/acc/194/) [#acc:195](https://v8std.ru/diagnostics/acc/195/) [#acc:304](https://v8std.ru/diagnostics/acc/304/) [#acc:305](https://v8std.ru/diagnostics/acc/305/) [#acc:1149](https://v8std.ru/diagnostics/acc/1149/) #### Источник https://its.1c.ru/db/v8std#content:697 ### std701 - Разработка планов обмена с отборами #std701 URL: https://v8std.ru/std/701/ Markdown URL: https://v8std.ru/std/701.md Source path: std/701.md Aliases: std701, #std701, std 701, стандарт 701 Related: standard:std464, standard:std477, standard:std654, standard:std752 External sources: https://its.1c.ru/db/v8std#content:701 ID: #std701 # Разработка планов обмена с отборами #### 1.1. Для синхронизации между конфигурациями и для РИБ обычно используют планы обмена. Часто требуется передавать не всю базу, а только часть данных, например в разрезе организаций, складов или подразделений. Узлы-получатели определяйте в событиях [#std464: ПередЗаписью](https://v8std.ru/std/464/) и [#std752: ПередУдалением](https://v8std.ru/std/752/) В этих событиях реализуйте логику регистрации изменений на узлах плана обмена (далее - логика регистрации). #### Для информации Если используется подсистема `Обмен данными` БСП, логику регистрации можно задать декларативно в правилах регистрации объектов (ПРО), которые разрабатываются в конфигурации `Конвертация данных`. Подробнее см. документацию к подсистеме `Обмен данными`. #### 1.2. При проектировании логики регистрации учитывайте особенности: - данные из сообщения обмена загружаются в произвольном порядке, поэтому к моменту регистрации нужных данных может еще не быть; - логика регистрации выполняется и при загрузке данных, в транзакции записи объекта; признак `ОбменДанными.Загрузка` игнорируется, и любая ошибка логики регистрации аварийно завершает загрузку; - в РИБ участвуют не все данные: например, движения регистров могут мигрировать между узлами, а регистраторы (документы) - нет; - обращение к связанным таблицам «через точку» приводит к неявным соединениям и снижает производительность. #### Для информации При синхронизации с другими программами (не РИБ, по правилам конвертации) через подсистему `Обмен данными` БСП первые два пункта можно не учитывать в правилах регистрации для ссылочных типов (`СправочникСсылка`, `ДокументСсылка` и т. п.). Причина: регистрация ссылочных объектов выполняется отложенно, отдельной операцией, после загрузки всех данных из сообщения обмена. #### 2. С учетом этих особенностей придерживайтесь следующих правил. #### 2.1. Обеспечивайте самодостаточность данных, участвующих в обмене. Таблицы обмена (справочники, документы, регистры и т. п.) должны содержать все данные, необходимые для логики регистрации. Логика регистрации должна работать только с данными основной таблицы и не обращаться к полям связанных таблиц. Пример: - данные регистрируются в разрезе организаций; - в обмене участвуют две таблицы: документ и регистр накопления с движениями документа; - обе таблицы самодостаточны, потому что содержат ссылку на организацию; - при записи пользователем и при загрузке логика регистрации срабатывает отдельно для документа и для набора записей регистра. Если самодостаточность нельзя обеспечить по другим соображениям, рассмотрите варианты из п. 2.2 и 2.3. #### 2.2. Исключайте из обмена вторичные данные. Если данные можно независимо вычислить в каждой базе, исключайте их из плана обмена. Тогда не нужна логика регистрации, которая иначе обращалась бы к связанным таблицам. Пример: - данные регистрируются в разрезе организаций; - в обмене участвует только одна таблица - документы поступления товаров; - регистр сведений, который определяет права доступа к документам поступления, не самодостаточен (нет ссылки на организацию), поэтому в обмен не включается; - данные этого регистра вычисляются независимо в каждом узле РИБ при загрузке документов поступления. #### 2.3. Регистрируйте изменения связанных данных. Если в обмене участвуют несколько логически связанных таблиц, логика регистрации должна регистрировать к выгрузке данные всех таких таблиц, независимо от того, для какой таблицы она выполняется сейчас. Логика регистрации не должна аварийно прерываться, если нужные ей данные временно отсутствуют. Пример: - регистрация идет в разрезе организаций; - в обмене участвуют справочник `Основные средства` и регистр сведений `Основные средства организаций`, где хранится связь основного средства и организации; - при записи элемента справочника и набора записей регистра к выгрузке регистрируются оба объекта; - если при загрузке данных сначала загружается элемент справочника, он записывается, но не регистрируется к выгрузке, потому что набор записей регистра еще не загружен; - когда позже загружается набор записей регистра, регистрируются изменения и самого набора, и соответствующего элемента справочника. #### См. также - [#std477: Самодостаточность регистров](https://v8std.ru/std/477/) - [#std654: Разыменование ссылочных полей составного типа в языке запросов](https://v8std.ru/std/654/) #### Источник https://its.1c.ru/db/v8std#content:701 ### std704 - Использование определяемых типов #std704 URL: https://v8std.ru/std/704/ Markdown URL: https://v8std.ru/std/704.md Source path: std/704.md Aliases: std704, #std704, std 704, стандарт 704 Related: standard:std728 External sources: https://its.1c.ru/db/v83doc/bookmark/dev/TI000000236, https://its.1c.ru/db/v8std#content:704 ID: #std704 # Использование определяемых типов #### 1. Определяемые типы используйте для данных, которые: - часто применяются в конфигурации; - могут меняться при внедрении прикладного решения. Такой тип задается один раз и многократно используется в разных местах: в реквизитах объектов, свойствах, реквизитах форм, параметрах макетов. #### См также [Объекты конфигурации - Определяемые типы](https://its.1c.ru/db/v83doc/bookmark/dev/TI000000236) #### 2. Определяемые типы рекомендуется использовать в следующих случаях. #### 2.1. Для определения простого типа и его квалификаторов, если тип имеет прикладной смысл и используется в разных реквизитах, ресурсах, реквизитах форм, макетах и т.д. Это обеспечивает одинаковую длину и точность данных во всех местах использования и упрощает доработку при изменении требований. #### Примеры - `НомерСчетаФактуры`: строка, длина `30`. Единый формат номера счета-фактуры в документах `ПоступлениеТоваровИУслуг`, `ЗаписьКнигиПокупок`, `ВозвратТоваровОтКлиента` и др. - `АдресДоставки`: строка, длина `500`. Текст адреса доставки в документах `ЗаказПоставщику`, `ЗаявкаНаВозвратТоваровОтКлиента`, в обработке `ПомощникПродаж` и др. #### 2.2. Для определения [#std728: составного типа](https://v8std.ru/std/728/), который массово используется в объектах подсистемы или во всем прикладном решении Определяемый тип фиксирует единый состав типов во всех местах использования и упрощает доработку и внедрение подсистемы в прикладные конфигурации. #### Пример В подсистеме `Взаимодействия` задан определяемый тип `КонтактВзаимодействий`: `ФизическиеЛица`, `Партнеры`, `КонтактныеЛицаПартнеров`. Этот тип используется в документах (`Встреча`, `ЗапланированноеВзаимодействие`, `СообщениеSMS`, `ТелефонныйЗвонок`), общих формах (`АдреснаяКнига`, `ВыборКонтакта`) и в параметрах макетов. Без определяемого типа пришлось бы задавать состав типов во всех этих местах вручную и снимать объекты подсистемы с поддержки. #### 2.3. При разработке внедряемой подсистемы: когда прикладной тип будет уточняться при внедрении. #### Пример Тип подсистемы `Поставщики` при внедрении может быть заменен на прикладной тип конфигурации `Контрагенты`. #### 3. Не используйте определяемые типы: - как «синоним» уже существующего типа; - для «подмены» сущностей; - для локального (немассового) использования без реальной потребности внедрения в другие конфигурации; - только ради гипотетического удобства будущей доработки. Обычно это признак ошибки проектирования или некорректного выбора исходного имени типа. #### Неправильно В конфигурации есть справочник `Контрагенты`, который используется в нескольких регистрах сведений, реквизитах форм и других объектах. Если это не внедряемая подсистема и тип не предполагается расширять, не нужно создавать отдельный определяемый тип из единственного типа `Контрагенты` «на всякий случай». Это размывает прикладной смысл сущности. #### См. также - [#std728: Ограничения на использование реквизитов составного типа](https://v8std.ru/std/728/) - [Объекты конфигурации - Определяемые типы (документация)](https://its.1c.ru/db/v83doc/bookmark/dev/TI000000236) #### Источник https://its.1c.ru/db/v8std#content:704 ### std705 - Отнесение объектов библиотек к подсистемам #std705 URL: https://v8std.ru/std/705/ Markdown URL: https://v8std.ru/std/705.md Source path: std/705.md Aliases: std705, #std705, std 705, стандарт 705 Related: diagnostic:acc:1147, standard:std543 External sources: https://its.1c.ru/db/v8std#content:705 ID: #std705 # Отнесение объектов библиотек к подсистемам #### 1. Все объекты библиотеки должны относиться к одной корневой подсистеме. Например, для объектов БСП это подсистема `СтандартныеПодсистемы`. Корневая подсистема из этого пункта не должна содержать командный интерфейс. #### 2. Допустимо наличие нескольких дополнительных корневых подсистем, которые содержат командный интерфейс. #### См. также - [#std543: Использование подсистем](https://v8std.ru/std/543/) #### Проверки [#acc:1147](https://v8std.ru/diagnostics/acc/1147/) #### Источник https://its.1c.ru/db/v8std#content:705 ### std706 - Ограничения на переименование объектов метаданных #std706 URL: https://v8std.ru/std/706/ Markdown URL: https://v8std.ru/std/706.md Source path: std/706.md Aliases: std706, #std706, std 706, стандарт 706 Related: standard:std534, standard:std550 External sources: https://its.1c.ru/db/bspdoc, https://its.1c.ru/db/v8std#content:706 ID: #std706 # Ограничения на переименование объектов метаданных #### 1. Не переименовывайте общий модуль с последующим созданием нового модуля с тем же именем. Если модуль нужно переименовать, создайте новый общий модуль с новым именем и перенесите в него код исходного модуля. Иначе при сравнении и объединении с новой конфигурацией поставщика ссылки по имени (например, в подписках на события) могут связаться с новым модулем, где нет нужных процедур. #### 2. Если при изменении структуры метаданных нужно удалить объект и создать новый объект с тем же именем, сначала переименуйте устаревший объект, добавив префикс `Удалить`. #### Пример Такое переименование часто требуется при сужении состава измерений регистра. Если удалить объект и сразу создать новый с тем же именем, обновление конфигурации на поддержке может завершиться ошибкой. Причина: если в старом объекте были изменения с сохранением поддержки, старый объект может не удалиться при объединении, и в конфигурации окажутся два объекта с одинаковым именем. См. также: [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) #### 3. Если в конфигурации нужно хранить ссылки на объекты метаданных, применяйте правила ниже. #### 3.1. Если БСП не используется, храните полные имена объектов метаданных в строковых реквизитах (`Строка`, `255`). #### Примеры В справочнике `ШаблоныСообщений`: реквизит `ПолноеИмяТипаПараметраВводаНаОсновании`. В регистре сведений `НастройкиПечатиОбъектов`: измерение `ТипОбъекта`. При переименовании или удалении объектов метаданных в обновлении ИБ обязательно заменяйте или удаляйте соответствующие имена в данных. Иначе ссылки на имена объектов станут рассогласованными, и подсистемы, которые на них опираются, начнут работать с ошибками. #### 3.2. Если используется БСП, храните ссылки на объекты метаданных через справочник `ИдентификаторыОбъектовМетаданных`. Преимущества: - централизованное хранение ссылок на имена объектов с автоматическим учетом переименований, удалений и добавлений; - меньший объем данных (ссылка вместо строки длиной `255`), что улучшает производительность. Исключение: для ролей и подсистем автоматическое отслеживание переименований не выполняется. Для них переименования нужно описывать явно. Подробнее: [Документация к БСП](https://its.1c.ru/db/bspdoc). Если не описать переименование ролей и подсистем, ссылки в `ИдентификаторыОбъектовМетаданных` рассогласуются (старый элемент будет помечен на удаление, вместо него появится новый), что приведет к ошибкам. #### Примеры последствий Варианты отчетов, связанные с переименованной подсистемой, исчезнут из панели отчетов. Дополнительные отчеты и обработки, выведенные пользователями в раздел переименованной подсистемы, пропадут из списка. Переименованные роли из профилей групп доступа не будут назначаться пользователям. #### 3.3. Справочник `ИдентификаторыОбъектовМетаданных` не предназначен для ссылок на объекты метаданных других конфигураций (например, в интеграционных механизмах). Для таких сценариев используйте строковые реквизиты и отдельные механизмы поддержания актуальности значений. #### 3.4. Если ведется две и более параллельных ветки разработки (например, `2.0` и `3.0`): - в текущей и младших версиях запрещены переименование с последующим созданием нового объекта с тем же полным именем; - в текущей и младших версиях запрещено двойное переименование; - такие переименования выполняйте только в самой старшей версии. Иначе при переходе с младшей версии на старшую переименование может быть учтено дважды, что приведет к рассогласованию ссылок на объекты метаданных. Если используются ссылки через `ИдентификаторыОбъектовМетаданных` БСП, этот запрет действует только для ролей и подсистем. Подробнее: [Документация к БСП](https://its.1c.ru/db/bspdoc). #### См. также - [#std550: Имена объектов метаданных в конфигурациях](https://v8std.ru/std/550/) - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) #### Источник https://its.1c.ru/db/v8std#content:706 ### std708 - Разрешение итогов для периодических регистров сведений #std708 URL: https://v8std.ru/std/708/ Markdown URL: https://v8std.ru/std/708.md Source path: std/708.md Aliases: std708, #std708, std 708, стандарт 708 Related: нет External sources: https://its.1c.ru/db/v83doc/content/63/hdoc/IssOgl3_5.14.1.1.Общаяинформацияорегистрахсведений, https://its.1c.ru/db/v8std#content:708 ID: #std708 # Разрешение итогов для периодических регистров сведений #### 1.1. Для периодических регистров сведений рекомендуется разрешать итоги, если одновременно выполняются все условия: - в регистре ожидается большой объем данных (например, это оправдано для регистра цен номенклатуры, но обычно не имеет смысла для регистра курсов валют); - в конфигурации есть частотные запросы к `СрезПоследних` на текущий момент и/или `СрезПервых` для получения актуальных данных (без задания периода в параметрах виртуальных таблиц); - остальные условия для `СрезПервых` и `СрезПоследних` задаются только по измерениям и разделителям в режиме `Независимо и совместно`; - в ограничениях доступа к данным регистра используются только измерения и разделители в режиме `Независимо и совместно`. Полный перечень случаев, когда используются итоги регистра сведений, см. в [документации к платформе 1С:Предприятие](https://its.1c.ru/db/v83doc/content/63/hdoc/IssOgl3_5.14.1.1.Общаяинформацияорегистрахсведений). #### Пример Частотный запрос к регистру `ЦеныНоменклатуры` для получения текущих цен: ```sdbl ВЫБРАТЬ Номенклатура.Артикул КАК Артикул, ЦеныНоменклатуры.Цена КАК Цена, ... ИЗ Справочник.Номенклатура КАК Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ВидЦены) КАК ЦеныНоменклатуры ПО ЦеныНоменклатуры.Номенклатура = Номенклатура.Ссылка ... ``` Если все условия выше выполняются, включение свойства `Разрешить итоги: срез последних` может существенно ускорить такие запросы: выборка идет из дополнительных таблиц с первыми/последними значениями. #### 1.2. Также следует рассматривать пересмотр запросов к регистру, чтобы условия для использования итогов выполнялись. Пример: если иногда данные в регистр `ЦеныНоменклатуры` записываются будущей датой, а в форме подбора всегда выполняется запрос к `СрезПоследних` с явно заданной текущей датой, итоги такой запрос не ускорят. Однако, если при открытии формы подбора проверять наличие регистраторов с будущей датой и при их отсутствии выполнять альтернативный запрос к `СрезПоследних` без даты, запрос может работать быстрее. #### 2. Во всех остальных случаях итоги для периодических регистров сведений разрешать не следует. В первую очередь, если: - чаще всего к `СрезПервых`/`СрезПоследних` выполняются запросы на конкретный период (например, на дату документа); - в условиях для `СрезПервых`/`СрезПоследних` чаще всего используются подзапросы и соединения (обращение через точку к связанным таблицам). #### Пример ```sdbl ВЫБРАТЬ ... ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта.Код = &КодВалютыСклада) КАК КурсыВалют ``` #### 3. Отдельный механизм пересчета итогов в конфигурации обычно не требуется: таблицы итогов актуализируются автоматически при каждой записи набора записей в регистр. Исключение: случаи, когда актуализация итогов при записи была отключена вызовом `РегистрСведенийМенеджер.УстановитьИспользованиеИтогов(Ложь)`. #### Источник https://its.1c.ru/db/v8std#content:708 ### std709 - Технология разветвленной разработки конфигураций #std709 URL: https://v8std.ru/std/709/ Markdown URL: https://v8std.ru/std/709.md Source path: std/709.md Aliases: std709, #std709, std 709, стандарт 709 Related: standard:std483 External sources: https://its.1c.ru/db/v8std#content:709 ID: #std709 # Технология разветвленной разработки конфигураций Цели внедрения технологии: - повышение качества разрабатываемой конфигурации; - повышение культуры разработки и тестирования; - обеспечение непрерывного развития конфигураций в условиях жестких сроков разработки. #### 1. Определения **Плановая версия конфигурации** - версия, содержащая существенное развитие функционала, с заранее назначенным сроком выпуска. **Исправительная версия** - версия, которая выпускается при необходимости срочной публикации исправлений критичных ошибок. В исключительных случаях исправительная версия может содержать новый функционал (например, изменения для поддержки законодательства). Срок выпуска определяется по количеству и критичности ошибок, обнаруженных в плановой версии. **Технический проект** - задание на доработку конфигурации. Каждый технический проект должен иметь четко сформулированную цель и конечный список изменений, которые нужно выполнить для ее достижения. Для организации разработки и сопровождения конфигураций (в том числе для ведения технических проектов и списка ошибок) рекомендуется использовать **Систему проектирования прикладных решений (СППР)**. #### 2. Разработка исправительных версий #### 2.1. Для выпуска каждой исправительной версии создавайте новое хранилище на основе конфигурации последней выпущенной версии. #### Важно Создавайте новое хранилище, а не копируйте основное. #### 2.2. В исправительной версии не должно быть объемных доработок конфигурации. Иначе нужно пересматривать сроки выпуска плановой версии. #### 2.3. Все закладки в хранилище исправительной версии должны содержать комментарий. Требования к комментариям аналогичны требованиям к закладкам в хранилище плановой версии (см. п. 3.4). #### 2.4. Все изменения, которые выполняются в исправительном релизе, должны синхронно повторяться в основном хранилище. Если в исправительном релизе добавляются новые объекты (или реквизиты объектов), переносите изменения только через сравнение и объединение конфигураций. Это нужно, чтобы не расходились внутренние идентификаторы объектов. #### 2.5. При сборке исправительной версии рекомендуется устанавливать метку с номером сборки на закладке той версии хранилища, которая идет в сборку. Обычно это последняя закладка на момент сборки. #### 3. Разработка плановой версии #### 3.1. Плановые версии разрабатываются в основном хранилище конфигурации. #### 3.2. Закладки в основное хранилище нужно выполнять так, чтобы каждая закладка переводила конфигурацию из одного рабочего (готового к выпуску) состояния в другое. **Не закладывайте не полностью отлаженный функционал.** Основное хранилище должно всегда оставаться в «неразваленном» состоянии, чтобы в любой момент можно было начать сборку плановой версии. #### 3.3. В основном хранилище разрешается выполнять: - исправление ошибок, не требующих перепроектирования, объемного кодирования и тестирования. Если ошибка требует крупных переработок и/или пересмотра проектных решений, исправляйте ее в рамках технического проекта. Порядок работы с основным хранилищем в этом случае должен быть таким же, как для других технических проектов; - встраивание новых версий библиотек; - встраивание полностью отлаженных проектов, прошедших отладочное тестирование; - в исключительных случаях разработку некоторых проектов (например, проектов массового рефакторинга). Рекомендуется использовать возможности **СППР** для автоматической генерации комментариев к закладкам, связанным с исправлением ошибок и встраиванием технических проектов. #### 3.4. Все закладки в основное хранилище должны содержать комментарий. Содержание комментария зависит от характера выполненных работ: - при исправлении ошибки обязательно указывайте номер и краткое наименование ошибки в системе баг-трекинга; - при встраивании новой версии библиотеки указывайте название библиотеки и точный номер ее версии; - при встраивании технических проектов указывайте номер проекта в системе ведения проектной документации и краткое наименование; - при выполнении работ по техническому проекту в основном хранилище комментарий, помимо номера и краткого наименования проекта, должен содержать краткое описание изменений, сделанных в этой закладке. #### 3.5. Все изменения по техническому проекту переносите в основное хранилище за одну закладку. Если нужно переносить изменения несколько раз, открывайте несколько проектов. #### 3.6. После переноса изменений в основном хранилище можно исправлять ошибки, наведенные техническим проектом. Для пересмотра проектных решений нужно открывать новый проект. #### 3.7. При сборке плановой версии рекомендуется устанавливать метку с номером сборки на закладке той версии хранилища, конфигурация которой идет в сборку. Обычно это последняя закладка на момент сборки. #### 4. Разработка технических проектов #### 4.1. Каждый технический проект разрабатывайте в отдельном хранилище. При использовании **СППР** хранилище технического проекта может создаваться автоматически. Если **СППР** не используется, хранилище технического проекта нужно создавать вручную по порядку, описанному в приложении 1. #### 4.2. При постановке хранилища технического проекта на поддержку от основного хранилища платформа устанавливает для всех объектов правило: «Объект поставщика, не редактируется». Для работы над техническим проектом измените это правило на «Объект поставщика редактируется с сохранением поддержки». Устанавливайте это правило только для тех объектов, которые изменяются в проекте. Делайте это максимально точечно. Например, если в проекте меняется только форма, измените правило только для формы, а для объекта, к которому она относится, оставьте правило «Объект поставщика, не редактируется». Чтобы изменить правила поддержки, захватывайте только корень конфигурации. Сами объекты захватывать не нужно. Это упрощает перенос изменений между основным хранилищем и хранилищем технического проекта. #### 4.3. Ответственный за технический проект может периодически обновлять конфигурацию хранилища проекта. Периодичность он определяет самостоятельно. На частоту обновления влияют, например, такие факторы: - затрагивает ли проект объекты других ответственных; - проводится ли в это время рефакторинг общих механизмов; - ведется ли сейчас массовое исправление ошибок в основном хранилище. Порядок обновления хранилища описан в приложении 2. #### 4.4. После окончания разработки ответственный согласует: - сроки завершения отладочного тестирования; - сроки внесения технического проекта в основное хранилище. Проекты, затрагивающие большое количество объектов, рекомендуется вносить в основное хранилище ближе к завершению разработки, чтобы снизить влияние на другие проекты. Ответственные за другие проекты могут попросить перенести сроки внесения. В **СППР** сроки встраивания можно согласовывать через функциональность контрольных точек по техническому проекту. #### 4.5. Вносите проект в основное хранилище только после завершения отладочного тестирования. Рекомендуется после исправления ошибок, выявленных отладочным тестированием, сформировать файл сравнения конфигурации проекта и конфигурации основного хранилища. #### 4.6. Внесение наработок технического проекта в основное хранилище не должно приводить к длительному захвату объектов основного хранилища. Для этого сначала обновляйте хранилище технического проекта до состояния основного хранилища (по методике из приложения 2). Если изменений много, обновление может занимать достаточно долгое время (до нескольких дней). За это время конфигурация основного хранилища может измениться. Поэтому обновление может быть итеративным: на каждой итерации отличия конфигураций становятся ближе к фактическому объему изменений проекта. После каждой итерации целесообразно выполнять быструю проверку работоспособности функционала, который разрабатывается в проекте. Начинайте перенос изменений в основное хранилище (с захватом объектов в основном хранилище) только когда конфигурация технического проекта отличается от конфигурации основного хранилища почти исключительно на изменения проекта. #### 4.7. Ответственный за технический проект должен внимательно относиться к внесению изменений в основное хранилище. Помните: основное хранилище в любой момент времени должно быть готово к выпуску плановой версии. После внесения изменений разработчики технического проекта совместно с тестировщиками должны быстро проверить, что изменения перенесены корректно и не повлияли на работоспособность смежного функционала. Объем и порядок проверок определяет ответственный за проект. #### 4.8. После проверки переноса изменений и до закладки в основное хранилище ответственный обязан запустить проверку конфигурации с максимальными настройками. Закладка в основное хранилище допускается только после исправления всех ошибок, выявленных проверкой конфигурации, которые были привнесены проектом. #### 4.9. После переноса изменений в основное хранилище ответственный за технический проект удаляет хранилище проекта. #### 5. Нумерация сборок Изменение номеров версий регламентируется стандартом [#std483: Нумерация редакций и версий](https://v8std.ru/std/483/) Ниже приведены правила изменения номера сборки (четвертое число в номере версии). #### 5.1. Номер сборки следует увеличивать как в основном хранилище, так и в хранилище исправительного релиза, в двух случаях: - непосредственно перед сборкой релиза. Это нужно, чтобы полный номер собранного релиза гарантированно отличался от полного номера предыдущего релиза; - при закладке в хранилище обработчика обновления информационной базы. Это нужно, чтобы после обновления из хранилища у всех участников разработки добавленный обработчик запускался автоматически (только для конфигураций, основанных на **Библиотеке стандартных подсистем**). #### 5.2.1. При добавлении в хранилище обработчиков обновления информационной базы рекомендуется повышать номер сборки в рамках этой же закладки. Возможны два сценария: - обработчик добавляется при разработке технического проекта в хранилище технического проекта. В этом случае при переносе изменений в основное хранилище увеличивайте номер сборки основного хранилища; - обработчик добавляется в рамках исправления ошибки. Если ошибка исправляется только в одном хранилище (основном или исправительном), номер сборки повышается только в нем. Если в двух, номер нужно увеличить в обоих хранилищах. #### 5.2.2. Обработчик и изменение номера сборки должны помещаться в хранилище в рамках одной закладки. Обработчик обновления должен быть «привязан» к тому номеру сборки, который вместе с ним помещается в хранилище. #### 5.2.3. Если в одной конфигурации обработчики обновления разбиты по технологическим подсистемам (например, в конфигурации **1С:ERP** обработчики разбиты на подсистемы `УправлениеПредприятием` и `УправлениеТорговлей`), повышайте номер сборки как подсистемы, к которой относится обработчик, так и конфигурации. #### 5.3. Номер сборки нужно изменять: 1. в свойствах конфигурации; 2. в процедуре `ОбновлениеИнформационнойБазы.ПриДобавленииПодсистемы` (только для конфигураций, основанных на **Библиотеке стандартных подсистем**). #### Приложение 1. Порядок создания хранилища технического проекта 1. Обновите из хранилища конфигурацию информационной базы, подключенную к основному хранилищу. 2. Создайте файл поставки конфигурации основного хранилища (`*.cf`). 3. В информационную базу, которая будет использоваться для работы над техническим проектом, **загрузите** конфигурацию из файла поставки. После загрузки конфигурация будет находиться на поддержке без возможности изменения. 4. Создайте хранилище конфигурации в соответствующей общей папке. При создании хранилища платформа включит в конфигурации возможность изменения. 5. Добавьте пользователя `ТолькоПросмотр` (без пароля, без права захвата объектов). Этого пользователя не нужно использовать для подключения базы к хранилищу. Он нужен только для обновления из хранилища (получения конфигурации хранилища). 6. Добавьте в хранилище пользователей, перечисленных в проекте (логин - фамилия сотрудника, без пароля, с правом захвата объектов). Не используйте для работы логин пользователя `ТолькоПросмотр`. #### Приложение 2. Порядок обновления хранилища технического проекта до состояния основного хранилища Перед переносом изменений из *хранилища технического проекта* (далее - ХТП) в *основное хранилище* (далее - ОХ) обновите ХТП до состояния ОХ. Для этого выполните следующие действия: 1. Обновите информационную базу, подключенную к ОХ. 2. Создайте файл поставки конфигурации ОХ. 3. Захватите все объекты в ХТП. 4. Запустите сравнение основной конфигурации и конфигурации поставщика (`Конфигурация - Сравнить конфигурации`). Сохраните результаты сравнения в файл: это изменения, внесенные в конфигурацию при работе над техническим проектом. В меню `Действия` выберите пункт `Отчет о сравнении конфигураций`. Для дальнейшего использования лучше сохранить отчет и в текстовом формате, и в формате табличного документа. Изображение: Отчет о сравнении конфигураций (709.img1.png) 5. Обновите конфигурацию (`Конфигурация - Поддержка - Обновить конфигурацию - Выбор файла обновления`) и укажите файл поставки, созданный на шаге 2. В окне сравнения и объединения конфигураций нажмите кнопку `Фильтр` и установите флажок `Показывать только дважды измененные свойства`. Изображение: Фильтр в окне сравнения и объединения конфигураций (709.img2.png) На эти объекты нужно обратить внимание при объединении. Остальные изменения можно объединять без проверки. Изображение: Результат фильтрации дважды измененных свойств (709.img3.png) 6. В диалоге, который появляется при нажатии на кнопку `Выполнить` окна сравнения и объединения конфигураций, для новых объектов поставщика установите правило `Объект не редактируется` как для объектов с правилом `Изменения разрешены`, так и для объектов с правилом `Изменения не рекомендуются`. Для всех остальных установите флаг `Сохранять текущий режим` (по умолчанию он установлен). Изображение: Параметры выполнения объединения конфигураций (709.img4.png) 7. После завершения объединения исправьте объекты, затрагиваемые техническим проектом, изменения в которых затерлись при обновлении. По сути это означает, что нужно повторно внести доработки, реализованные в рамках проекта, в объекты конфигурации. 8. Запустите сравнение обновленной основной конфигурации технического проекта и обновленной конфигурации поставщика (`Конфигурация - Сравнить конфигурации`). Изображение: Сравнение обновленной конфигурации проекта с конфигурацией поставщика (709.img5.png) 9. Сохраните результаты сравнения в файл. Имя файла должно отличаться от имени файла, созданного на шаге 6. В меню `Действия` выберите пункт `Отчет о сравнении конфигураций`. Для дальнейшего использования лучше сохранить отчет в текстовом формате. 10. Сравните файлы, созданные на шагах 4 и 9. При корректном обновлении сравнение не должно показать отличий. #### Источник https://its.1c.ru/db/v8std#content:709 ### std723 - Особенности разработки конфигураций для ОС Linux и macOS #std723 URL: https://v8std.ru/std/723/ Markdown URL: https://v8std.ru/std/723.md Source path: std/723.md Aliases: std723, #std723, std 723, стандарт 723 Related: diagnostic:acc:1365, diagnostic:acc:1366, standard:std467 External sources: https://its.1c.ru/db/v8std#content:723 ID: #std723 # Особенности разработки конфигураций для ОС Linux и macOS #### 1. В большинстве случаев платформа сама обеспечивает кроссплатформенную работу клиентского и серверного кода. Дополнительные меры нужны только в отдельных сценариях. #### 2. Для ключевых функций прикладного решения используйте кроссплатформенные механизмы платформы. #### 2.1. Вместо Windows-технологии COM (`COMОбъект`) используйте кроссплатформенные механизмы. Например: - для администрирования кластера вместо `v83.ComConnector` применяйте `ras`/`rac`; - для путей к рабочим каталогам используйте `РабочийКаталогДанныхПользователя`, `КаталогДокументов`, `КаталогВременныхФайлов`. #### 2.2. Внешние компоненты, поставляемые с конфигурацией, разрабатывайте на технологии Native API. Это обеспечивает поддержку Linux, macOS и веб-клиента. #### 2.3. Для механизмов, использующих объект `Почта`, рассмотрите переход на `ИнтернетПочта` или внешнюю компоненту с поддержкой почтовых клиентов Linux/macOS. #### 2.4. Если в составе конфигурации есть изображения WMF/EMF, замените их на PNG/JPG. #### 2.5. Используйте кроссплатформенные средства платформы для работы с файловой системой. #### 2.5.1. В Linux имена файлов регистрозависимы. Указывайте пути в коде строго в одном регистре. #### 2.5.2. Не формируйте вручную разделители пути и маску всех файлов. Используйте `ПолучитьРазделительПути` и `ПолучитьМаскуВсеФайлы`. Если применяется БСП, используйте функции модулей `ОбщегоНазначения` и `ОбщегоНазначенияКлиент`. #### 3. Для второстепенных сервисных функций допустимо отключать функциональность в Linux/macOS. Например, скрывать команду или выводить понятное сообщение, что операция доступна только в Windows. #### Пример ```bsl &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Информация = Новый СистемнаяИнформация; Если Информация.ТипПлатформы <> ТипПлатформы.Windows_x86 И Информация.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Печать в Microsoft Word доступна только при работе в ОС Windows.'")); Возврат; КонецЕсли; ... КонецПроцедуры ``` #### См. также - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Проверки [#acc:1365](https://v8std.ru/diagnostics/acc/1365/) [#acc:1366](https://v8std.ru/diagnostics/acc/1366/) #### Источник https://its.1c.ru/db/v8std#content:723 ### std724 - Использование модулей с повторным использованием возвращаемых значений #std724 URL: https://v8std.ru/std/724/ Markdown URL: https://v8std.ru/std/724.md Source path: std/724.md Aliases: std724, #std724, std 724, стандарт 724 Related: diagnostic:acc:435, diagnostic:acc:436, diagnostic:acc:437, diagnostic:acc:438, diagnostic:acc:439, diagnostic:acc:444, standard:std470, standard:std487, standard:std725 External sources: https://its.1c.ru/db/v83doc/bookmark/dev/ti000000181, https://its.1c.ru/bmk/std/common_values, https://its.1c.ru/db/v8std#content:724 ID: #std724 # Использование модулей с повторным использованием возвращаемых значений #### 1. Общие модули с повторным использованием возвращаемых значений (кеш) применяйте для кеширования результатов функций: - на время сеанса; - или на время вызова. Используйте их для экономии вычислительных ресурсов сервера и для [#std487: минимизации количества серверных вызовов и трафика](https://v8std.ru/std/487/) #### См. также - [Документация платформы: «Повторное использование возвращаемых значений»](https://its.1c.ru/db/v83doc/bookmark/dev/ti000000181) - [Использование значений, влияющих на поведение клиентского приложения](https://its.1c.ru/bmk/std/common_values) #### 2. Чрезмерное применение модулей с повторным использованием возвращаемых значений может приводить к [излишнему потреблению памяти](https://v8std.ru/std/725/) #### 2.1. Не кешируйте данные, которые вычисляются быстрее, чем извлекаются из кеша. #### Неправильно ```bsl Функция ИмяПакетаУправления() Экспорт Возврат "ManagementPackage"; КонецФункции ``` Имеет смысл кешировать данные, которые получаются: - из базы данных; - из внешних источников; - в результате ресурсоемких вычислений. Даже значения из базы не всегда нужно кешировать. Если выгода неочевидна, кеш может только расходовать память. #### 2.2. Помещайте в кеш только данные, к которым будут часто обращаться. Учитывайте, что кеш не бессрочный: - значение удаляется через `20` минут после вычисления; - или через `6` минут после последнего использования, в зависимости от того, что наступит раньше; - значение также удаляется при нехватке памяти, перезапуске рабочего процесса и переключении клиента на другой рабочий процесс. Если закешированным значением никто не воспользовался, ресурс потрачен впустую. #### Примечание Конкретные интервалы жизни кеша могут отличаться в разных версиях платформы. #### 2.3. Не делайте слишком широкий диапазон входных параметров у кешируемых функций. #### Пример Если функция принимает контрагента, а контрагентов очень много, и повторное обращение к тому же контрагенту маловероятно, кеширование такой функции обычно неэффективно. При большом числе одновременных пользователей такие «пустые» кеши создают заметные лишние расходы ресурсов. #### 3. Не изменяйте данные, полученные из кеша. Иначе возникают скрытые ошибки и лишние расходы памяти. В возвращаемых значениях используйте неизменяемые структуры данных, например: `ФиксированныйМассив`, `ФиксированнаяСтруктура`. Причина: кеш возвращает не копию, а ссылку на один и тот же объект в памяти. #### 4. Если в модуле с повторным использованием экспортные функции вызывают друг друга, результат внутренних вызовов не кешируется. #### Неправильно ```bsl Функция АвтономнаяРаботаПоддерживается() Экспорт Возврат ...; КонецФункции Функция ЭтоАвтономноеРабочееМесто() Экспорт Возврат АвтономнаяРаботаПоддерживается() И ...; КонецФункции ``` ```bsl ... = ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается(); ... = ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто(); ``` В этом сценарии `АвтономнаяРаботаПоддерживается` вычисляется дважды. Чтобы получить значение из кеша, вызывайте функцию через имя модуля явно. #### Правильно ```bsl Функция ЭтоАвтономноеРабочееМесто() Экспорт Возврат ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() И ...; КонецФункции ``` #### 5. Если у общего модуля свойство `Повторное использование возвращаемых значений` установлено в `На время сеанса`, не возвращайте из его функций значения типов: - `МенеджерВременныхТаблиц`; - `Запрос`; - объекты базы данных (`ДокументОбъект`, `ОтчетОбъект` и т.п.); - любые коллекции, которые содержат такие значения. Ограничение связано с тем, что эти значения можно использовать только в том серверном вызове, где они получены. Платформа не проверяет это ограничение автоматически. Нарушение может приводить к трудно диагностируемой остановке работы программы (признаки остаются только в технологическом журнале). Ограничение также распространяется на использование таких значений во временном хранилище. #### См. также - [#std470: Использование функциональных опций](https://v8std.ru/std/470/) - [#std725: Оптимизация использования оперативной памяти](https://v8std.ru/std/725/) #### Проверки [#acc:435](https://v8std.ru/diagnostics/acc/435/) [#acc:436](https://v8std.ru/diagnostics/acc/436/) [#acc:437](https://v8std.ru/diagnostics/acc/437/) [#acc:438](https://v8std.ru/diagnostics/acc/438/) [#acc:439](https://v8std.ru/diagnostics/acc/439/) [#acc:444](https://v8std.ru/diagnostics/acc/444/) #### Источник https://its.1c.ru/db/v8std#content:724 ### std725 - Оптимизация использования оперативной памяти #std725 URL: https://v8std.ru/std/725/ Markdown URL: https://v8std.ru/std/725.md Source path: std/725.md Aliases: std725, #std725, std 725, стандарт 725 Related: standard:std724 External sources: https://its.1c.ru/db/v83doc/content/27/hdoc, https://its.1c.ru/db/metod8dev/content/5859, https://its.1c.ru/db/v8std#content:725 ID: #std725 # Оптимизация использования оперативной памяти #### Методическая рекомендация Не проектируйте решение из предположения о неограниченной оперативной памяти. #### 1. Неэффективное использование памяти в многопользовательских системах быстро снижает стабильность работы. Избегайте формирования больших структур данных в памяти. Если объем данных потенциально не ограничен, обрабатывайте данные порциями и сохраняйте промежуточные результаты в базу или файл. #### 2. При потенциально неограниченных выборках из ИБ получайте данные порциями фиксированного размера. #### Неправильно Результат запроса целиком загружается в память: ```bsl Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Наименование, | Номенклатура.ВидНоменклатуры |ИЗ | Справочник.Номенклатура КАК Номенклатура"; // Выгрузка всего справочника в таблицу значений Номенклатура = Запрос.Выполнить().Выгрузить(); Для Каждого ПозицияНоменклатуры Из Номенклатура Цикл // Обработка элемента справочника КонецЦикла; ``` #### Неправильно Неверно полагаться, что `Выбрать()` всегда решает проблему объема: ```bsl Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.Наименование, | Номенклатура.ВидНоменклатуры |ИЗ | Справочник.Номенклатура КАК Номенклатура"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Обработка элемента выборки КонецЦикла; ``` #### Правильно Используйте искусственное ограничение порции, например `ПЕРВЫЕ 1000`: ```bsl Пока Истина Цикл Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1000 | Номенклатура.Ссылка, | Номенклатура.Наименование, | Номенклатура.ВидНоменклатуры |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | <условие выборки необработанных записей>"; РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Прервать; КонецЕсли; ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Обработка элемента выборки КонецЦикла; КонецЦикла; ``` #### Правильно Допустим поэлементный обход через `Выбрать` объекта метаданных: ```bsl Выборка = Справочники.Номенклатура.Выбрать(..., Отбор); Пока Выборка.Следующий() Цикл // Обработка элемента выборки КонецЦикла; ``` В этом случае платформа получает данные порциями фиксированного размера. #### Примечание В 32-битной версии платформы при нехватке памяти большие результаты могут временно выгружаться на диск, что дополнительно снижает производительность. #### 3. Не обрабатывайте большие XML/HTML/текстовые файлы объектами, которые загружают файл целиком в память: - `ТекстовыйДокумент`; - `ДокументDOM`; - `ДокументHTML`; - целиковая загрузка больших `XDTO`-пакетов. Исключение: когда нужен произвольный доступ к конкретным частям документа. Для экономного расхода памяти используйте потоковые объекты: - `ЧтениеXML`, `ЧтениеТекста`; - `ЗаписьXML`, `ЗаписьТекста`. Для XDTO читайте файл последовательно через `ЧтениеXML`, а отдельные фрагменты десериализуйте фабрикой XDTO. #### 4. Избегайте утечек памяти из-за циклических ссылок. #### Неправильно Упрощенный пример циклической ссылки: ```bsl Данные = Новый Структура; Данные.Вставить("Ключ", Данные); ``` #### Правильно Разрывайте ссылку, когда объект больше не нужен: ```bsl Данные.Ключ = Неопределено; ``` Для выявления утечек используйте технологический журнал, добавив в `logcfg.xml` элемент ``. См. также: - [Документация платформы: Приложение 3. Описание и расположение служебных файлов (`logcfg.xml`)](https://its.1c.ru/db/v83doc/content/27/hdoc) - [Поиск циклических ссылок](https://its.1c.ru/db/metod8dev/content/5859) #### 5. Чрезмерное применение общих модулей с повторным использованием возвращаемых значений тоже приводит к излишнему потреблению памяти. #### См. также - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник https://its.1c.ru/db/v8std#content:725 ### std726 - Особенности использования в запросах оператора ПОДОБНО #std726 URL: https://v8std.ru/std/726/ Markdown URL: https://v8std.ru/std/726.md Source path: std/726.md Aliases: std726, #std726, std 726, стандарт 726 Related: diagnostic:bslls:UsingLikeInQuery, diagnostic:v8cs:ql-constants-in-binary-operation External sources: https://its.1c.ru/db/v851doc#bookmark:dev:TI000001291, https://its.1c.ru/db/v8std#content:726 ID: #std726 # Особенности использования в запросах оператора ПОДОБНО #### 1. Оператор `ПОДОБНО` в тексте запроса используйте только - с константным строковым литералом, например: `Реквизит ПОДОБНО "123%"` - с параметром запроса, например: `Реквизит ПОДОБНО &Шаблон` Не создавайте строку шаблона вычислениями или конкатенацией. #### Неправильно ```sdbl Реквизит ПОДОБНО "123" + "%" Реквизит ПОДОБНО &Шаблон + "%" Реквизит ПОДОБНО Таблица.Шаблон ``` #### Правильно ```sdbl Реквизит ПОДОБНО "123%" Реквизит ПОДОБНО &Шаблон ``` #### В стандарте не указано PostgreSQL и Oracle Database: Квадратные скобки `[…]` в шаблоне работают как спецсимволы в строковом литерале, и не работают в выражении. ```sdbl ВЫБРАТЬ * Справочник.Товары ГДЕ Артикул ПОДОБНО "123[АБ]%" ``` ```sdbl ВЫБРАТЬ * Справочник.Товары ГДЕ Артикул ПОДОБНО &Шаблон + "%" ``` ```sdbl ВЫБРАТЬ * Справочник.Товары ГДЕ Артикул ПОДОБНО &Шаблон ``` - [Приложение 8. Особенности работы с различными СУБД](https://its.1c.ru/db/v851doc#bookmark:dev:TI000001291) #### 2. Используйте такие шаблоны оператора `ПОДОБНО`, которые работают одинаково на всех поддерживаемых СУБД. Допустимо: - `%` (процент) – последовательность, содержащая любое количество произвольных символов; - `_` (подчеркивание) – один произвольный символ. Не работает в IBM DB2: - `[…]` (в квадратных скобках один или несколько символов) – любой одиночный символ из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например `[a-z]`, означающие произвольный символ, входящий в диапазон, включая концы диапазона; - `[^…]` (в квадратных скобках значок отрицания, за которым следует один или несколько символов) – любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания. Ограничение в MS SQL 2005: - Длина строки шаблона не должна превышать `1024` символа #### 3. В шаблонах подобия используются спецсимволы `_%[]^`. Шаблоны подобия могут формироваться динамически, по введенным данным пользователя. В введенных пользователю данных могут использоваться спецсимволы, которые необходимо трактовать как данные пользователя. Для того, чтобы спецсимвол трактовался как обычный символ его необходимо экранировать. #### Например Пользователь вводит текст: `Кефир 15% жирности`. Программа должны этот `%` трактовать как часть строки, а не как спецсимвол последовательности произвольных символов. #### Ошибка При работе на PostgreSQL можно встретить ошибку `ERROR: invalid regular expression: invalid character range` при выполнении запроса с некорректно собранным фрагментом содержащим `[]`. Для экранирования: - выберите спецсимвол экранирования, например `~`; - установите спецсимвол перед символами операнда, например `~%`. Чтобы экранировать выбранный спецсимвол, его необходимо задвоить, например `~~`. - дополните шаблон ключевым словом `СПЕЦСИМВОЛ`. #### Например Для поиск по строке `100%` ```sdbl "100~%" СПЕЦСИМВОЛ "~" ``` Для поиск по строке `Кефир 15% жирности` ```sdbl "Кефир 15~% жирности" СПЕЦСИМВОЛ "~" ``` Для поиск по строке `Шуруп_10[21] медь~4%` ```sdbl "Шуруп~_10~[21~] медь~~4~%" СПЕЦСИМВОЛ "~" ``` Установка параметров запроса с помощью `Запрос.УстановитьПараметр()` не экранирует спецсимволы шаблона подобия. Для экранирования используйте функцию `СформироватьСтрокуДляПоискаВЗапросе()` #### Например ```sdbl ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование ПОДОБНО &Шаблон СПЕЦСИМВОЛ "~" ``` ```bsl Запрос.УстановитьПараметр("Шаблон", "%" + ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(ИскомыйТекст) + "%"); ``` #### Паттерн ```bsl Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт Результат = СтрокаПоиска; Результат = СтрЗаменить(Результат, "~", "~~"); Результат = СтрЗаменить(Результат, "%", "~%"); Результат = СтрЗаменить(Результат, "_", "~_"); Результат = СтрЗаменить(Результат, "[", "~["); Результат = СтрЗаменить(Результат, "]", "~]"); Результат = СтрЗаменить(Результат, "^", "~^"); Возврат Результат; КонецФункции ``` В 1С:БСП реализован в `ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе()`. #### 4. Сравнение выполняется без учета регистра символов. #### Проверки [#bslls:UsingLikeInQuery](https://v8std.ru/diagnostics/bslls/UsingLikeInQuery/) [#v8cs:ql-constants-in-binary-operation](https://v8std.ru/diagnostics/v8-code-style/ql-constants-in-binary-operation/) #### Источник https://its.1c.ru/db/v8std#content:726 ### std728 - Ограничения на использование реквизитов составного типа #std728 URL: https://v8std.ru/std/728/ Markdown URL: https://v8std.ru/std/728.md Source path: std/728.md Aliases: std728, #std728, std 728, стандарт 728 Related: diagnostic:acc:1329, diagnostic:acc:1330, diagnostic:v8cs:db-object-anyref-type, diagnostic:v8cs:db-object-ref-non-ref-type, standard:std654, standard:std704 External sources: https://its.1c.ru/db/metod81/content/1828/hdoc, https://its.1c.ru/db/v8std#content:728 ID: #std728 # Ограничения на использование реквизитов составного типа #### 1.1. Если реквизит составного типа используется в соединениях, отборах или сортировке, оставляйте в его составе только ссылочные типы: `СправочникСсылка.[…]`, `ДокументСсылка.[…]` и т. п. Не включайте в такой составной тип нессылочные значения: `Строка`, `Число`, `Дата`, `УникальныйИдентификатор`, `Булево`, `ХранилищеЗначения`. Иначе производительность запросов заметно снижается из-за особенностей физического хранения составных типов в таблицах СУБД. Подробности: [Особенности хранения составных типов данных](https://its.1c.ru/db/metod81/content/1828/hdoc). #### 1.2. Если требуется совместить ссылку и произвольный ввод, используйте отдельный справочник вместо примитивного типа. Пример: в документе есть реквизит `Адрес` составного типа, который включает ссылку на справочник `Контакты` и `Строку`. Вместо этого создайте отдельный справочник `ПроизвольныеАдреса` и включите его в тип реквизита `Адрес` вместо строки. Новые элементы справочника `ПроизвольныеАдреса` добавляйте автоматически при записи документа, без участия пользователя. Удаление неиспользуемых элементов выполняйте регламентным заданием. #### 1.3. Исключение могут составлять таблицы, в которых заведомо мало данных (до 1000 записей). #### 2.1. Для типизированных объектов метаданных, которые хранятся в ИБ, не используйте составные типы `ЛюбаяСсылка`, `СправочникСсылка`, `ДокументСсылка` и аналогичные. Состав типов каждого такого объекта задавайте явно. Исключение составляют универсальные механизмы (алгоритмы), действительно рассчитанные на работу с произвольными ссылочными объектами. Проблемы избыточно широких составных типов: - при обращении «через точку» к реквизиту такого типа без `ВЫРАЗИТЬ` выполняется неявное соединение со всеми таблицами из состава типа, что существенно ухудшает производительность; - возникают лишние реструктуризации при удалении ссылочных объектов метаданных (например, значений перечислений или точек маршрута бизнес-процесса, которые тоже входят в `ЛюбаяСсылка`); - неоправданно усложняются алгоритмы, которые начинают поддерживать широкий набор типов, не нужный для прикладной задачи; - сложнее анализировать работу механизма внедренцам и сторонним разработчикам; - пользователю неудобно выбирать значение в форме из слишком большого списка типов (когда реально нужно 3-5 типов); - при удалении помеченных объектов растут издержки анализа и блокировок таблиц при поиске ссылок. #### 2.2. Если составной тип массово используется в объектах подсистемы или всей конфигурации, применяйте [#std704: определяемые типы](https://v8std.ru/std/704/) Исключение: типы ведущих измерений регистров универсальных (библиотечных) механизмов, рассчитанных на произвольные ссылочные объекты. Если в этом случае сужать определяемый тип в конфигурации, придется пересоздавать библиотечный регистр, что недопустимо. Поэтому здесь использование `ЛюбаяСсылка`, `СправочникСсылка`, `ДокументСсылка` и аналогичных типов оправдано. #### См. также - [#std654: Разыменование ссылочных полей составного типа в языке запросов](https://v8std.ru/std/654/) #### Проверки [#v8cs:db-object-anyref-type](https://v8std.ru/diagnostics/v8-code-style/db-object-anyref-type/) [#v8cs:db-object-ref-non-ref-type](https://v8std.ru/diagnostics/v8-code-style/db-object-ref-non-ref-type/) [#acc:1329](https://v8std.ru/diagnostics/acc/1329/) [#acc:1330](https://v8std.ru/diagnostics/acc/1330/) #### Источник https://its.1c.ru/db/v8std#content:728 ### std729 - Общие требования по разработке оптимальных запросов #std729 URL: https://v8std.ru/std/729/ Markdown URL: https://v8std.ru/std/729.md Source path: std/729.md Aliases: std729, #std729, std 729, стандарт 729 Related: standard:std436, standard:std655, standard:std656 External sources: https://its.1c.ru/db/v8std#content:729 ID: #std729 # Общие требования по разработке оптимальных запросов Прежде чем переходить к продвинутым приемам оптимизации, убедитесь, что сам запрос адекватен задаче. #### 1.1. Минимизируйте объем выборки: выбирайте только данные, необходимые для решения задачи. Если нужны конкретные поля, не используйте `ВЫБРАТЬ *`. Если нужно выполнять свертку, сортировку или вычисления, сначала проверьте, можно ли переложить эти операции на СУБД и сразу получить готовый результат. #### 1.2. В большинстве случаев следует минимизировать и общее количество запросов к СУБД. #### См. также [#std436: Многократное выполнение однотипных запросов](https://v8std.ru/std/436/) #### 2. Не следует любой ценой переносить выполнение задачи в СУБД: простые запросы СУБД обычно выполняет эффективнее, чем избыточно сложные универсальные. #### 2.1. Рассматривайте альтернативы: - подготавливайте несколько более простых запросов под разные предусловия и параметры вместо одного большого универсального запроса; - выполняйте часть постобработки на сервере 1С:Предприятия средствами встроенного языка. #### 2.2. Для сложных запросов проверяйте, что СУБД выбирает эффективный план выполнения. Для DB2, PostgreSQL и Oracle вероятность неудачного плана для сложного запроса выше, поэтому не усложняйте запрос без необходимости. В первую очередь: - не добавляйте [#std655: вложенные запросы](https://v8std.ru/std/655/) только ради читаемости - избегайте сложных условий в `ПО` и `ГДЕ`, особенно с [#std656: подзапросами в условиях соединения](https://v8std.ru/std/656/) и конструкцией `ВЫБОР` - используйте минимально необходимое число таблиц в запросе. План выполнения можно смотреть через консоль запросов, технологический журнал или средства СУБД. Признак проблемного сложного запроса: в плане присутствует `timeout warning` — оптимизатору не хватило времени выбрать лучший план. См. также:. #### Источник https://its.1c.ru/db/v8std#content:729 ### std731 - Требования к установке и обновлению прикладных решений #std731 URL: https://v8std.ru/std/731/ Markdown URL: https://v8std.ru/std/731.md Source path: std/731.md Aliases: std731, #std731, std 731, стандарт 731 Related: нет External sources: https://its.1c.ru/db/v83doc/content/88/hdoc, https://its.1c.ru/db/v8std#content:731 ID: #std731 # Требования к установке и обновлению прикладных решений #### 1. Подготовка дистрибутивов установки и обновления прикладных решений (конфигураций) системы 1С:Предприятие 8 должна выполняться в соответствии с рекомендациями, изложенными в [главе 30 «Поставка и поддержка конфигурации»](https://its.1c.ru/db/v83doc/content/88/hdoc) Руководства разработчика из комплекта документации к программным продуктам системы 1С:Предприятие 8. #### 2. Исходя из данных требований, полный путь к каталогу поставляемых разработчиком шаблонов конфигурации (информационных баз), в общем случае, имеет вид: ```cmd <Каталог шаблонов>\<каталог разработчика>\<каталог конфигурации>\<каталог версии> ``` При этом в каталоге версии вместо точек должны использоваться подчеркивания. Например, версия 11.1.3.6 конфигурации «Управление торговлей», редакция 11.1, будет устанавливаться в каталог: ```cmd <Каталог шаблонов>\1C\Trade\11_1_3_6\ ``` #### 3. В каталоге версии должен быть расположен `файл-манифест 1cv8.mft`, в котором описываются установленные `шаблоны конфигурации (.cf)` и `демонстрационные информационные базы (.dt)`. Например, файл-манифест конфигурации «Управление торговлей», редакция 11.1, при установке которой устанавливаются 2 шаблона информационных баз - пустой (рабочей) и демонстрационной базы. ```ini Vendor=Фирма "1С" Name=УправлениеТорговлей Version=11.1.3.6 AppVersion=8.3 [Config1] Catalog=1С:Управление торговлей/Управление торговлей Destination=1C\Trade Source=1cv8.cf [Config2] Catalog=1С:Управление торговлей/Управление торговлей (демо) Destination=1C\DemoTrd Source=1Cv8.dt ``` #### 4.1. В целях исключения совпадения названий конфигураций и возможных в таком случае коллизий при отображении шаблонов информационных баз в диалоге создания ИБ, рекомендуется. - В строке **Catalog** файла-манифеста, в наименование шаблона конфигурации (часть значения до символа «/») следует включать в явном виде название разработчика. Название разработчика может присутствовать в любом месте наименования шаблона конфигурации, например: - **1С:Управление торговлей** - **Управление торговлей (1С)** - В строке **Destination** рекомендуемый каталог создания информационной базы следует указывать в виде: ```ini Destination = <каталог разработчика>\<каталог информационной базы> ``` ** должен содержать название разработчика, но в этом случае - адаптированное для использования в именах файловых каталогов. Например: 1C\Trade #### 4.2. Для исключения повторений названия разработчиков – поставщиков прикладных решений (конфигураций) должны быть глобально уникальными: название для использования в наименованиях шаблонов конфигураций и название для использования в именах файловых каталогов. Название разработчика выбирается один раз и в дальнейшем может использоваться разработчиком при установке и регистрации шаблонов всех разработанных им прикладных решений для системы программ 1С:Предприятие 8. #### 5. Для обновления версий прикладных решений (конфигураций) выпускаются отдельные дистрибутивы обновлений, которые включают в себя файл обновления конфигурации (.cfu). Основным рекомендуемым способом обновления с помощью конфигуратора является поиск подходящих файлов обновления (меню **Конфигурация – Поддержка – Обновить конфигурацию**). Кроме того, в конфигурациях могут быть предусмотрены и другие средства для обновления версий. При использовании в конфигурации **Библиотеки стандартных подсистем** (БСП) такая возможность предусмотрена в подсистеме «Обновление конфигурации». #### Источник https://its.1c.ru/db/v8std#content:731 ### std733 - Эффективное обращение к виртуальной таблице «Остатки» #std733 URL: https://v8std.ru/std/733/ Markdown URL: https://v8std.ru/std/733.md Source path: std/733.md Aliases: std733, #std733, std 733, стандарт 733 Related: diagnostic:bslls:VirtualTableCallWithoutParameters, standard:std657, standard:std663, standard:std664 External sources: https://its.1c.ru/db/v8std#content:733 ID: #std733 # Эффективное обращение к виртуальной таблице «Остатки» Эта рекомендация дополняет [#std657: Обращения к виртуальным таблицам](https://v8std.ru/std/657/) и описывает практики для виртуальной таблицы `Остатки` регистров накопления и бухгалтерии При обращении к виртуальной таблице платформа формирует вложенный SQL-запрос. Самый эффективный вариант — чтение хранимой таблицы текущих остатков без группировки по измерениям. Чтобы платформа построила такой вариант, одновременно выполняйте условия: - получайте остатки без указания даты; - не используйте режим разделения итогов; - во внешнем запросе используйте все измерения виртуальной таблицы (в `ВЫБРАТЬ` и/или в условиях соединения). #### Неправильно ```sdbl ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Товар, ЕСТЬNULL(ОстаткиТоваров.Остаток, 0) КАК Остаток ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&СегодняшняяДата, Склад = &Склад) КАК ОстаткиТоваров ПО ОстаткиТоваров.Номенклатура = СпрНоменклатура.Ссылка ``` В этом варианте передана дата и не использовано измерение `Склад` во внешнем запросе. #### Правильно ```sdbl ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Товар, ЕСТЬNULL(ОстаткиТоваров.Остаток, 0) КАК Остаток ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(, Склад = &Склад) КАК ОстаткиТоваров ПО ОстаткиТоваров.Номенклатура = СпрНоменклатура.Ссылка И ОстаткиТоваров.Склад = &Склад ``` #### См. также - [#std657: Обращения к виртуальным таблицам](https://v8std.ru/std/657/) - [#std664: Режим разделения итогов для регистров накопления](https://v8std.ru/std/664/) - [#std663: Режим разделения итогов для регистров бухгалтерии](https://v8std.ru/std/663/) #### Проверки [#bslls:VirtualTableCallWithoutParameters](https://v8std.ru/diagnostics/bslls/VirtualTableCallWithoutParameters/) #### Источник https://its.1c.ru/db/v8std#content:733 ### std737 - Проверка прав доступа #std737 URL: https://v8std.ru/std/737/ Markdown URL: https://v8std.ru/std/737.md Source path: std/737.md Aliases: std737, #std737, std 737, стандарт 737 Related: - diagnostic:acc:336 - diagnostic:acc:341 - diagnostic:acc:393 - diagnostic:acc:394 - diagnostic:acc:395 - diagnostic:acc:457 - diagnostic:acc:460 - diagnostic:acc:461 - diagnostic:acc:514 - diagnostic:acc:515 - diagnostic:bslls:IsInRoleMethod - diagnostic:v8cs:form-item-visible-settings-by-roles - diagnostic:v8cs:using-isinrole - standard:std485 - standard:std488 - standard:std668 External sources: https://its.1c.ru/db/v8std#content:737 ID: #std737 # Проверка прав доступа #### 1. Если в конфигурации много ролей (от нескольких десятков), не используйте ролевую настройку видимости в элементах форм: - просмотр/редактирование реквизитов по ролям; - пользовательскую видимость полей формы по ролям; - использование команд по ролям. Рекомендуемые подходы: - при больших различиях вида и функциональности формы делайте отдельные формы под нужные наборы прав; - при небольших различиях выполняйте проверку прав в коде. Учитывайте, что программное управление видимостью может замедлить открытие формы. Это позволяет: - упростить работу с элементами, которые могут исчезать из коллекции `Элементы`; - повысить устойчивость кода к изменению состава ролей; - упростить контроль использования ролей в конфигурации. #### Проверки [#v8cs:form-item-visible-settings-by-roles](https://v8std.ru/diagnostics/v8-code-style/form-item-visible-settings-by-roles/) #### 2. Не используйте ролевую настройку видимости в командном интерфейсе конфигурации, интерфейсе основного раздела и рабочей области начальной страницы. Вместо этого настраивайте права на: - разделы командного интерфейса; - общие формы; - объекты, включенные в командный интерфейс или рабочую область. Это повышает предсказуемость интерфейса и упрощает расследование ошибок. #### 3. Для проверки прав в коде используйте метод `ПравоДоступа`. #### Неправильно ```bsl Если РольДоступна("ДобавлениеИзменениеСтранМира") Тогда ... Если РольДоступна("ПросмотрОтчетаПопулярныеСтраны") Тогда ... ``` #### Правильно ```bsl Если ПравоДоступа("Редактирование", Метаданные.Справочники.СтраныМира) Тогда ... Если ПравоДоступа("Просмотр", Метаданные.Отчеты.ПопулярныеСтраны) Тогда ... ``` Такой подход повышает устойчивость кода к пересмотру состава ролей. #### Проверки [#v8cs:using-isinrole](https://v8std.ru/diagnostics/v8-code-style/using-isinrole/) #### 4.1. Если роль не дает прав на объекты метаданных и служит только маркером дополнительного права, используйте `РольДоступна`. При использовании БСП рекомендуется `Пользователи.РолиДоступны`. Пример без БСП: ```bsl Если РольДоступна(...) Или <ЭтоПолноправныйПользователь> Или ПривилегированныйРежим() Тогда ... ``` Пример с БСП: ```bsl Если Пользователи.РолиДоступны(...) Тогда ... ``` #### 4.2. Проектируйте роли с учетом влияния на командный интерфейс. Если чтение/запись идет в [#std485: привилегированном режиме](https://v8std.ru/std/485/), не задавайте в роли права с RLS-условием `ГДЕ ЛОЖЬ` В таких случаях проверяйте наличие роли. Пример: на общую форму `Заметка` права дают роли `ДобавлениеИзменениеЗаметок` и `ЧтениеЗаметок`, а доступ к данным выполняется в привилегированном режиме. Тогда по `ПравоДоступа` нельзя надежно определить право добавления заметок. #### Неправильно Добавлять в роль `ДобавлениеИзменениеЗаметок` фиктивные права на регистр `Заметки` с `ГДЕ ЛОЖЬ` и проверять: ```bsl Если ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.Заметки) Тогда ``` #### Правильно ```bsl Если РольДоступна("ДобавлениеИзменениеЗаметок") Или <ЭтоПолноправныйПользователь> Или ПривилегированныйРежим() Тогда ``` Либо с БСП: ```bsl Если Пользователи.РолиДоступны("ДобавлениеИзменениеЗаметок") Тогда ``` #### См. также - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std668: Разработка ролей в библиотеках](https://v8std.ru/std/668/) #### Проверки [#bslls:IsInRoleMethod](https://v8std.ru/diagnostics/bslls/IsInRoleMethod/) [#acc:336](https://v8std.ru/diagnostics/acc/336/) [#acc:341](https://v8std.ru/diagnostics/acc/341/) [#acc:393](https://v8std.ru/diagnostics/acc/393/) [#acc:394](https://v8std.ru/diagnostics/acc/394/) [#acc:395](https://v8std.ru/diagnostics/acc/395/) [#acc:457](https://v8std.ru/diagnostics/acc/457/) [#acc:460](https://v8std.ru/diagnostics/acc/460/) [#acc:461](https://v8std.ru/diagnostics/acc/461/) [#acc:514](https://v8std.ru/diagnostics/acc/514/) [#acc:515](https://v8std.ru/diagnostics/acc/515/) #### Источник https://its.1c.ru/db/v8std#content:737 ### std739 - Размещение сведений о настройках подсистемы #std739 URL: https://v8std.ru/std/739/ Markdown URL: https://v8std.ru/std/739.md Source path: std/739.md Aliases: std739, #std739, std 739, стандарт 739 Related: standard:std499, standard:std551, standard:std553, standard:std644 External sources: https://its.1c.ru/db/v8std#content:739 ID: #std739 # Размещение сведений о настройках подсистемы Для настройки функциональности [#std551: библиотеки](https://v8std.ru/std/551/) в конфигурации-потребителе используют [#std553: переопределяемые объекты](https://v8std.ru/std/553/) Настройки подсистемы обычно делятся на: - общие для всех объектов подсистемы или для группы объектов; - специфичные для конкретного объекта. #### 1. Общие настройки подсистемы задавайте в переопределяемом модуле. Для этого создайте процедуру `ПриОпределенииНастроек` с параметром `Настройки` типа `Структура`, который заранее заполнен значениями по умолчанию. Использование структуры в параметре позволяет расширять программный интерфейс добавлением новых свойств без нарушения [#std644: обратной совместимости](https://v8std.ru/std/644/) #### Пример ```bsl Процедура ПриОпределенииНастроек(Настройки) Экспорт Настройки.ВыводитьОтчетыВместоВариантов = Истина; Настройки.ВыводитьОписания = Истина; Настройки.ДругиеОтчеты.ПоказыватьФлажок = Истина; КонецПроцедуры ``` #### 1.1. Для определения списка объектов, с которыми работает подсистема, не используйте перебор метаданных с конструкцией [#std499: `Попытка... Исключение`](https://v8std.ru/std/499/) Вместо этого создавайте отдельную процедуру переопределяемого модуля с явным списком объектов. Пример: `ПриОпределенииПодключенныхОтчетов`. #### 1.2. Процедуры, которые переопределяют бизнес-логику сразу для всех объектов подсистемы, также размещайте в переопределяемом модуле. Имена процедур выбирайте по выполняемому действию. Пример: `ПриРегистрацииИзмененийКлючейВариантовОтчетов`. Для каждого действия создавайте отдельную процедуру. #### 2. Настройки и обработчики, специфичные для отдельного объекта, размещайте в модуле менеджера этого объекта. Для процедуры со сведениями о свойствах, реквизитах или методах используйте имя вида `ПриОпределенииНастроек`. Пример: `ПриОпределенииНастроекВариантовОтчетов`. Переопределяемую бизнес-логику для конкретного объекта также размещайте в модуле менеджера. Наличие конкретных процедур задавайте в `ПриОпределенииНастроек`, чтобы не проверять наличие процедур через [#std499: `Попытка... Исключение`](https://v8std.ru/std/499/) #### Пример ```bsl Процедура ПриОпределенииНастроекВариантовОтчетов(Настройки) Экспорт Настройки.ОпределитьНастройкиФормы = Истина; Настройки.Размещение.Вставить(ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(), "Важный"); Настройки.ПриПолученииДанныхОтчета = Истина; // Наличие процедуры. КонецПроцедуры Процедура ПриПолученииДанныхОтчета(Данные) Экспорт Данные.Очистить(); // Своя процедура получения данных. КонецПроцедуры ``` Процедура `ПриОпределенииНастроекВариантовОтчетов` задает настройки конкретного отчета и сообщает о наличии процедуры `ПриПолученииДанныхОтчета`, в которой реализована переопределяемая обработка данных. #### Источник https://its.1c.ru/db/v8std#content:739 ### std740 - Безопасное хранение паролей #std740 URL: https://v8std.ru/std/740/ Markdown URL: https://v8std.ru/std/740.md Source path: std/740.md Aliases: std740, #std740, std 740, стандарт 740 Related: diagnostic:acc:345, diagnostic:bslls:UsingHardcodeSecretInformation, diagnostic:v8cs:unsafe-password-ib-storage External sources: https://its.1c.ru/db/v8std#content:740 ID: #std740 # Безопасное хранение паролей #### 1. При разработке подсистем, которые работают с внешними ресурсами (почта, веб-сервисы, FTP и т. п.), обычно нужно передавать данные аутентификации: логин и пароль. #### 2. Чтобы минимизировать риск перехвата, не храните пароли и другую конфиденциальную информацию в информационной базе. Минимальный уровень защищенности - в файловых базах: файл базы может целиком скопировать любой пользователь ИБ. В клиент-серверных базах доступ к данным обычно есть только у администраторов СУБД. Базовый подход: запрашивать логин и пароль у пользователя и сразу использовать их без сохранения в ИБ. #### Проверки [#v8cs:unsafe-password-ib-storage](https://v8std.ru/diagnostics/v8-code-style/unsafe-password-ib-storage/) #### 3. Иногда это неудобно или невозможно: - интерактивный запрос логина и пароля на каждую операцию сильно мешает работе, а временного сохранения на клиенте недостаточно; - доступ к внешним ресурсам должен выполняться на сервере независимо от действий пользователей. В этих случаях допустимо хранение паролей в ИБ, но пользователей нужно предупредить о рисках. Такое хранение не убирает риски полностью, а только усложняет задачу злоумышленнику. #### 3.1. Не храните пароли и другие конфиденциальные данные в реквизитах тех же объектов метаданных, с которыми ведется повседневная работа. Для конфиденциальных данных используйте отдельный объект метаданных (например, регистр сведений) с безопасной настройкой прав доступа. #### 3.2. Если используется БСП, применяйте безопасное хранилище паролей. Оно решает ключевые задачи: - доступ к объекту метаданных не должен давать чтение пароля; - чтение и запись данных выполняются только в привилегированном режиме; - данные хранятся в закрытом виде; - данные исключаются из планов обмена, что снижает риск утечки при обменах. Для работы с безопасным хранилищем используются процедуры и функции модуля `ОбщегоНазначения`: - `ЗаписатьДанныеВБезопасноеХранилище()`; - `ПрочитатьДанныеИзБезопасногоХранилища()`; - `УдалитьДанныеИзБезопасногоХранилища()`. Подробнее см. комментарии к этим функциям в БСП и раздел `3.4. Базовая функциональность - Использование при разработке конфигурации - Безопасное хранилище паролей` документации БСП. #### 3.3. Не храните пароль в реквизитах формы. Извлекайте его на сервере непосредственно перед использованием. Иначе при открытии формы с маскированным вводом пароль передается с сервера на клиент в открытом виде и может быть перехвачен. Привилегированный режим включайте в вызывающем коде непосредственно перед вызовом функций чтения и записи, а не внутри этих функций. Это снижает риск чтения или записи произвольных паролей в сеансе с любыми правами. Безопасность вызова должен обеспечивать код, который запрашивает конкретные пароли. #### Пример Маскировка пароля в обработчике формы `ПриСозданииНаСервере()`: ```bsl УстановитьПривилегированныйРежим(Истина); Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища( Объект.Ссылка, "Пароль, ПарольSMTP"); // Ключи соответствия данных в безопасном хранилище. УстановитьПривилегированныйРежим(Ложь); Пароль = ?(ЗначениеЗаполнено(Пароли.Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); ПарольSMTP = ?(ЗначениеЗаполнено(Пароли.ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, ""); ``` Запись пароля в обработчике формы `ПриЗаписиНаСервере()`: ```bsl Если ПарольИзменен Тогда УстановитьПривилегированныйРежим(Истина); ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, Пароль); УстановитьПривилегированныйРежим(Ложь); Пароль = ?(ЗначениеЗаполнено(Пароль), ЭтотОбъект.УникальныйИдентификатор, ""); КонецЕсли; Если ПарольSMTPИзменен Тогда УстановитьПривилегированныйРежим(Истина); ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольSMTP, "ПарольSMTP"); УстановитьПривилегированныйРежим(Ложь); ПарольSMTP = ?(ЗначениеЗаполнено(ПарольSMTP), ЭтотОбъект.УникальныйИдентификатор, ""); КонецЕсли; ``` `Пароль` и `ПарольSMTP` в примере - реквизиты формы. Если пароль уже сохранен, в реквизит формы записывается уникальный идентификатор, который эмулирует наличие пароля. После записи объекта пароль сохраняется в безопасном хранилище, а реквизит формы снова затирается уникальным идентификатором. #### Проверки [#bslls:UsingHardcodeSecretInformation](https://v8std.ru/diagnostics/bslls/UsingHardcodeSecretInformation/) [#acc:345](https://v8std.ru/diagnostics/acc/345/) #### Источник https://its.1c.ru/db/v8std#content:740 ### std746 - Обработчики событий ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления #std746 URL: https://v8std.ru/std/746/ Markdown URL: https://v8std.ru/std/746.md Source path: std/746.md Aliases: std746, #std746, std 746, стандарт 746 Related: diagnostic:v8cs:module-accessibility-at-client, standard:std449, standard:std680, standard:std697, standard:std701 External sources: https://its.1c.ru/db/v8std#content:746 ID: #std746 # Обработчики событий ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления #### 1. С помощью данных обработчиков модуля менеджера объекта можно переопределить представление объекта информационной базы, которое выводится в полях форм и в списках. Пример реализации: ```bsl Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) Поля.Добавить("Наименование"); СтандартнаяОбработка = Ложь; КонецПроцедуры ``` ```bsl Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) Представление = ?( ПустаяСтрока(Данные.Наименование), НСтр("ru = 'Без описания'"), Данные.Наименование); СтандартнаяОбработка = Ложь; КонецПроцедуры ``` #### 2. Обработчики вызываются при любой необходимости получения представления какого-либо объекта информационной базы. Поэтому избыточные данные или неправильный выбор данных для формирования представления могут привести к существенному замедлению работы системы. Также не следует выполнять в этих обработчиках запросы или получение объектов информационной базы (в том числе, запрещены обращения к реквизитам объектов ссылочных типов через точку, что приводит к чтению всего объекта целиком из базы данных). Также нежелательно использовать получение представления и реквизитов ссылок. #### 3. Обработчики могут быть также вызваны, в том числе, при записи и удалении объекта в режиме обмена данными. Представление объекта при этом запрашивается для формирования записи в журнал регистрации. Поэтому к ним предъявляются те же требования, что и к логике регистрации объектов - см. п. 1.2 [#std701: Разработка планов обмена с отборами](https://v8std.ru/std/701/) Эти требования также справедливы при разработке планов обмена для синхронизации с другими программами (не РИБ, по правилам конвертации) с помощью подсистемы «Обмен данными» Библиотеки стандартных подсистем. Например, недопустимо [#std697: обращаться к предопределенным элементам](https://v8std.ru/std/697/), которые еще могли быть не загружены в базу или, наоборот, уже удалены в ходе обмена данными: ```bsl Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; // Недопустимо: обращение к предопределенному элементу. Если Данные.ВидОбразования = Справочники.ВидыОбразованияФизическихЛиц.ПослевузовскоеОбразование Тогда Представление = НСтр("ru = 'Послевузовское образование'"); КонецЕсли; КонецПроцедуры ``` #### 4. При реализации обработчиков следует также учитывать требования о поддержке [#std680: толстого клиента, управляемое приложение, клиент-сервер](https://v8std.ru/std/680/) #### См. также - [#std449: Получение представлений для ссылочных значений в табличном документе](https://v8std.ru/std/449/) #### Проверки [#v8cs:module-accessibility-at-client](https://v8std.ru/diagnostics/v8-code-style/module-accessibility-at-client/) #### Источник https://its.1c.ru/db/v8std#content:746 ### std748 - Таймауты при работе с внешними ресурсами #std748 URL: https://v8std.ru/std/748/ Markdown URL: https://v8std.ru/std/748.md Source path: std/748.md Aliases: std748, #std748, std 748, стандарт 748 Related: diagnostic:acc:397, diagnostic:acc:398, diagnostic:bslls:TimeoutsInExternalResources External sources: https://its.1c.ru/db/v8std#content:748 ID: #std748 # Таймауты при работе с внешними ресурсами #### 1. При работе с внешними ресурсами через объекты `WSОпределения`, `WSПрокси`, `HTTPСоединение`, `FTPСоединение`, `ИнтернетПочтовыйПрофиль` обязательно задавайте таймаут, то есть предельное время ожидания операции. Иначе программа может зависнуть, а часть функциональности станет недоступной. Таймаут защищает от внешних проблем: - нестабильного интернет-соединения; - влияния антивирусов и неверных настроек брандмауэра; - неверной настройки прокси-сервера; - нестабильной работы веб-сервера под нагрузкой или из-за ошибок скриптов. Например, если удаленная сторона не отвечает (выключена, на обслуживании, есть временная неисправность), ожидание ответа может быть бесконечным. При интерактивном вызове это выглядит как «зависание» приложения. При вызове из регламентного задания недоступным может стать связанный функционал. #### 2. Время операции с внешним ресурсом обычно состоит из шести этапов: - `DNS Lookup` - определение IP по доменному имени; - `Connect` - установка соединения с сервером; - `Send` - отправка данных; - `Wait` - ожидание обработки на стороне сервера; - `Receive` - получение ответа; - `Cache Read` - получение данных от веб-сервера. Таймаут должен покрывать все этапы. Если операция не успела завершиться в заданный срок, соединение разрывается. Выбирайте таймаут по ожидаемой длительности операции: - для быстрых операций (например, проверка доступности сервера) задавайте небольшой таймаут; - в общем случае не выбирайте таймаут более 3 минут, чтобы не создавать эффект «зависания» при недоступности удаленной стороны; - для длительных передач больших объемов данных (этапы `Send`/`Cache Read`) задавайте увеличенный таймаут, но не более 12 часов. #### 3. Чтобы снизить таймауты и повысить отзывчивость, используйте рекомендации ниже. #### 3.1. Для веб-сервисов с операциями дольше ~20 секунд рекомендуется: - добавить контрольную операцию `Ping`; - предварительно вызывать `Ping` с малым таймаутом (например, 7 секунд); - основной прокси получать только после успешного `Ping`. #### Неправильно Реализация модуля веб-сервиса `PingPong`: ```bsl Функция Pong(Знач Параметр) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Привет, %1'"), Параметр); КонецФункции ``` Вызывающая сторона (без БСП): ```bsl // Ждем не более минуты PingPong = Новый WSПрокси(АдресВебСервиса, , , , , 60); Результат = PingPong.Pong(НСтр("ru = 'Мяч'")); ``` #### Правильно Реализация модуля веб-сервиса `PingPong`: ```bsl Функция Ping() Возврат Истина; // Проверка связи КонецФункции Функция Pong(Знач Параметр) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Привет, %1'"), Параметр); КонецФункции ``` Вызывающая сторона (без БСП): ```bsl // Ждем не более 3 секунд PingPong = Новый WSПрокси(АдресВебСервиса, , , , , 3); PingPong.Ping(); // проверка связи // Сервис жив, далее работаем с ним и ждем не более минуты PingPong = Новый WSПрокси(АдресВебСервиса, , , , , 60); Результат = PingPong.Pong(НСтр("ru = 'Мяч'")); ``` Если используется БСП: - для веб-сервисов применяйте `ОбщегоНазначения.WSПрокси` (поддерживает контрольный `Ping`); - для HTTP(S)/FTP(S) применяйте подсистему «Получение файлов через Интернет». Пример с БСП: ```bsl // Сделать контрольный вызов Ping и ждать не более минуты на дальнейших операциях. PingPong = ОбщегоНазначения.WSПрокси(АдресВебСервиса, ..., 60, Истина); // Сервис точно жив, далее работаем с ним. Результат = PingPong.Pong(НСтр("ru = 'Мяч'")); ``` #### 3.2. Для невеб-сервисных ресурсов используйте аналоги `Ping`: - для REST API - тестовая команда (обычно код 200 означает доступность); - для FTP/WebDAV - тестовая загрузка (или отправка) файла-пустышки. #### 3.3. Если веб-сервис объективно долго работает на этапе `Wait` и ускорить это нельзя, переводите взаимодействие в асинхронный режим: - запускайте фоновое задание для «тяжелой» операции; - добавляйте отдельные операции проверки готовности и получения результата. #### Неправильно Реализация модуля веб-сервиса `Long`: ```bsl Функция GetData() Результат = <очень длительные вычисления>; Возврат Результат; КонецФункции ``` Вызывающая сторона: ```bsl Long = Новый WSПрокси(АдресВебСервиса, , , , , 600); // ждем 10 мин Результат = Long.GetData(); ``` #### Правильно Реализация модуля веб-сервиса `Long`: ```bsl Функция StartDoLong() // запуск фонового задания ИдентификаторОперации = ... // возвращаем идентификатор операции для отслеживания ее готовности Возврат ИдентификаторОперации; КонецФункции Функция IsReady(Знач ИдентификаторОперации) // проверяем, завершено ли фоновое задание Готовность = ... Возврат Готовность; КонецФункции Функция GetData(Знач ИдентификаторОперации) Результат = <получаем уже готовый результат по переданному идентификатору>; Возврат Результат; КонецФункции ``` Вызывающая сторона: ```bsl Long = Новый WSПрокси(АдресВебСервиса, , , , , 600); // ждем 10 мин ИдентификаторОперации = Long.StartDoLong(); Пока Не Long.IsReady(ИдентификаторОперации) Цикл <ждем определенный интервал времени> КонецЦикла; Результат = Long.GetData(ИдентификаторОперации); ``` Код вызывающей стороны также должен быть асинхронным: через регламентное задание или периодический обработчик ожидания на клиенте. #### 4. Рекомендуемые значения таймаутов: | Операция | Таймаут (секунд) | | --- | --- | | Получение описания веб-сервиса | 7 | | Проверка корректности адреса, работа с менеджером сервиса в модели сервиса, другие быстрые операции | 10-20 | | Получение сведений по одному контрагенту, обмен сообщениями, отправка SMS, удаленное администрирование ИБ в модели сервиса | 60-120 (1) | | Передача сообщений обмена через веб-сервис или получение файла до 1 Мб | 120-180 (1) | | Загрузка файлов более 1 Мб | Если известен размер файла: `размер_в_Мб * 128` (2); иначе предельное время загрузки, но не более `43200` (3) | (1) Вызывать после контрольной операции `Ping`. (2) 1 Мб при скорости 64 кбит/с загружается примерно 128 секунд; в ряде сценариев сотовые операторы ограничивают скорость до этого уровня. (3) 43200 секунд (12 часов) - компромисс: в нештатной ситуации процесс «отвиснет» и вернет управление, а не зависнет бесконечно. #### Проверки [#bslls:TimeoutsInExternalResources](https://v8std.ru/diagnostics/bslls/TimeoutsInExternalResources/) [#acc:397](https://v8std.ru/diagnostics/acc/397/) [#acc:398](https://v8std.ru/diagnostics/acc/398/) #### Источник https://its.1c.ru/db/v8std#content:748 ### std752 - Обработчик события ПередУдалением #std752 URL: https://v8std.ru/std/752/ Markdown URL: https://v8std.ru/std/752.md Source path: std/752.md Aliases: std752, #std752, std 752, стандарт 752 Related: diagnostic:acc:75, diagnostic:bslls:DataExchangeLoading, diagnostic:v8cs:data-exchange-load, standard:std465, standard:std773 External sources: https://its.1c.ru/db/v8std#content:752 ID: #std752 # Обработчик события ПередУдалением #### 1. В обработчике `ПередУдалением` модуля объекта выполняйте действия, которые должны быть сделаны до удаления объекта. Например, перед удалением присоединенного файла может потребоваться очистить ссылки на этот файл в объекте-владельце. #### В стандарте не указано В некоторых случаях удаление связанных данных выполняется автоматически. Например, когда ссылка на удаляемый объект является ведущим измерением. #### 2. Все действия в обработчике `ПередУдалением` выполняйте только после проверки `ОбменДанными.Загрузка`. При удалении через механизм обмена данными код обработчика не должен выполняться, так как это может приводить к ошибкам. Например, к обращению к предопределенным объектам после очистки области данных. #### Пример ```bsl Процедура ПередУдалением(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // Действия перед удалением объекта. ОчиститьСсылкиНаУдаляемыйФайл(); КонецПроцедуры ``` #### См. также - [#std465: Обработчик события ПриЗаписи](https://v8std.ru/std/465/) - [#std773: Использование признака ОбменДанными.Загрузка в обработчиках событий объекта](https://v8std.ru/std/773/) #### Проверки [#bslls:DataExchangeLoading](https://v8std.ru/diagnostics/bslls/DataExchangeLoading/) [#v8cs:data-exchange-load](https://v8std.ru/diagnostics/v8-code-style/data-exchange-load/) [#acc:75](https://v8std.ru/diagnostics/acc/75/) #### Источник https://its.1c.ru/db/v8std#content:752 ### std758 - Псевдонимы источников данных в запросах #std758 URL: https://v8std.ru/std/758/ Markdown URL: https://v8std.ru/std/758.md Source path: std/758.md Aliases: std758, #std758, std 758, стандарт 758 Related: standard:std454 External sources: https://its.1c.ru/db/v8std#content:758 ID: #std758 # Псевдонимы источников данных в запросах #### 1. Псевдоним источника данных должен быть осмысленным и отражать назначение источника в текущем контексте. Требования к псевдонимам близки к требованиям к [#std454: именам переменных в коде](https://v8std.ru/std/454/) - образуйте псевдонимы от терминов предметной области; - пишите слитно, с заглавной буквы в каждом слове (например, `ТоварыНаСкладах`); - не начинайте псевдоним с подчеркивания; - не используйте псевдоним из одного символа. #### Неправильно ```sdbl ВЫБРАТЬ Таблица1.Ссылка КАК Товар, ЕстьNULL(Таблица2.КоличествоОстаток, 0) КАК Остаток ИЗ Справочник.Номенклатура КАК Таблица1 ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Таблица2 ПО Таблица1.Ссылка = Таблица2.Номенклатура ``` #### Правильно ```sdbl ВЫБРАТЬ ВсяНоменклатура.Ссылка КАК Товар, ЕстьNULL(ОстаткиНаСкладах.КоличествоОстаток, 0) КАК Остаток ИЗ Справочник.Номенклатура КАК ВсяНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ОстаткиНаСкладах ПО ВсяНоменклатура.Ссылка = ОстаткиНаСкладах.Номенклатура ``` Не рекомендуется использовать в качестве псевдонимов имена классов метаданных (`Справочник`, `Документ` и т.д.), так как они обычно не описывают роль источника в конкретном запросе. #### 2. Для универсальных механизмов, работающих с произвольными таблицами, допустимы универсальные псевдонимы. #### Пример ```bsl "ВЫБРАТЬ | Таблица.Наименование КАК Наименование, | Таблица.Код КАК Код |ИЗ | &Таблица КАК Таблица"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", "Справочник." + ИмяСправочника); ``` #### Источник https://its.1c.ru/db/v8std#content:758 ### std759 - Несущественные предупреждения проверки конфигурации #std759 URL: https://v8std.ru/std/759/ Markdown URL: https://v8std.ru/std/759.md Source path: std/759.md Aliases: std759, #std759, std 759, стандарт 759 Related: - diagnostic:acc:561 - diagnostic:acc:562 - diagnostic:acc:563 - diagnostic:acc:564 - diagnostic:acc:565 - diagnostic:acc:566 - diagnostic:acc:567 - diagnostic:acc:568 - diagnostic:acc:569 - diagnostic:acc:570 - diagnostic:acc:571 - diagnostic:acc:572 - diagnostic:acc:573 - diagnostic:acc:574 - standard:std467 External sources: https://its.1c.ru/db/v8std#content:759 ID: #std759 # Несущественные предупреждения проверки конфигурации #### 1. Следующие предупреждения проверки конфигурации обычно не являются критичными для работоспособности и не требуют обязательного исправления: - пустой обработчик (для обработчиков оповещений в модулях); - неразрешимые ссылки на объекты метаданных (в формах и справке); - неразрешимые ссылки на картинки (в формах); - неправильные пути к данным (в формах). Для этих случаев часто отсутствует надежная массовая методика поиска и исправления без побочных эффектов. #### 2. В регламентной проверке конфигурации обычно не включайте флажок `Поиск использования синхронных вызовов`. Иначе в результаты попадет и корректный код, который не исполняется в веб-клиенте (например, серверные модули). Сценарии разбора таких предупреждений описаны в. #### См. также - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Проверки [#acc:561](https://v8std.ru/diagnostics/acc/561/) [#acc:562](https://v8std.ru/diagnostics/acc/562/) [#acc:563](https://v8std.ru/diagnostics/acc/563/) [#acc:564](https://v8std.ru/diagnostics/acc/564/) [#acc:565](https://v8std.ru/diagnostics/acc/565/) [#acc:566](https://v8std.ru/diagnostics/acc/566/) [#acc:567](https://v8std.ru/diagnostics/acc/567/) [#acc:568](https://v8std.ru/diagnostics/acc/568/) [#acc:569](https://v8std.ru/diagnostics/acc/569/) [#acc:570](https://v8std.ru/diagnostics/acc/570/) [#acc:571](https://v8std.ru/diagnostics/acc/571/) [#acc:572](https://v8std.ru/diagnostics/acc/572/) [#acc:573](https://v8std.ru/diagnostics/acc/573/) [#acc:574](https://v8std.ru/diagnostics/acc/574/) #### Источник https://its.1c.ru/db/v8std#content:759 ### std760 - Ограничения на регламентные задания при работе в модели сервиса #std760 URL: https://v8std.ru/std/760/ Markdown URL: https://v8std.ru/std/760.md Source path: std/760.md Aliases: std760, #std760, std 760, стандарт 760 Related: diagnostic:acc:453, diagnostic:acc:454, diagnostic:acc:455 External sources: https://v8.1c.ru/platforma/tekhnologiya-1cfresh/, https://its.1c.ru/db/v8std#content:760 ID: #std760 # Ограничения на регламентные задания при работе в модели сервиса #### 1. В прикладных решениях, ориентированных на работу в модели сервиса по [Технологии 1cFresh](https://v8.1c.ru/platforma/tekhnologiya-1cfresh/), не должно быть регламентных заданий, включенных в состав любого из разделителей. Иначе при большом количестве областей данных в одной ИБ разделенные регламентные задания перегружают рабочие процессы и существенно затрудняют работу пользователей сервиса. #### 2. Если нужно регулярно выполнять программный код в приложениях пользователя в разделенной ИБ, используйте подсистему БТС `Очередь заданий` или аналогичный механизм очереди. #### 2.1. Пример № 1. Нужно в начале каждого месяца во всех приложениях выполнять пересчет итогов регистров накопления. Расписание единое для всей информационной базы и может изменяться администратором сервиса. Добавьте в конфигурацию предопределенное регламентное задание `ПересчетИтогов`. #### Неправильно Включить добавленное задание в состав общих реквизитов, разделяющих данные. #### Правильно - Исключить добавленное задание из состава общих реквизитов, разделяющих данные. - В общем модуле `ОчередьЗаданийПереопределяемый` в процедуру `ПриПолученииСпискаШаблонов` добавить: ```bsl Шаблоны.Добавить(Метаданные.РегламентныеЗадания.ПересчетИтогов.ИмяМетода); ``` #### 2.2. Пример № 2. При включенной функциональной опции `Обмен с сайтом` нужно ежедневно выполнять обмен с сайтом из настроек. При этом для каждого приложения (области данных) должно настраиваться индивидуальное расписание. #### Неправильно - Добавить в конфигурацию предопределенное регламентное задание `ОбменССайтом`. - Включить это задание в состав общих реквизитов, разделяющих данные. #### Правильно - Добавить в конфигурацию непредопределенное регламентное задание `ОбменССайтом`. - Исключить это задание из состава общих реквизитов, разделяющих данные. - В общем модуле `ОчередьЗаданийПереопределяемый` в процедуру `ПриОпределенииПсевдонимовОбработчиков` добавить: ```bsl СоответствиеИменПсевдонимам.Вставить(Метаданные.РегламентныеЗадания.ОбменССайтом.ИмяМетода); ``` - При включении функциональной опции `Обмен с сайтом` добавить задание или включить его использование через: - `РегламентныеЗаданияСервер.ДобавитьЗадание` - если задания еще нет; - `РегламентныеЗаданияСервер.ИзменитьЗадание` - если задание есть, но использование выключено. - При выключении функциональной опции удалить задание или отключить его использование через: - `РегламентныеЗаданияСервер.УдалитьЗадание` - если задание существует; - `РегламентныеЗаданияСервер.ИзменитьЗадание` - если задание существует и использование включено. #### 2.3. Пример № 3. Задание из примера № 2 нужно выполнять от имени определенного пользователя. #### Неправильно - Добавить в конфигурацию регламентное задание, включенное в состав общих реквизитов, разделяющих данные. - Добавить задание через менеджер регламентных заданий и установить имя пользователя, от которого задание будет выполняться. #### Правильно - Добавить в конфигурацию регламентное задание, исключенное из состава общих реквизитов, разделяющих данные. - Создать задание через `РегламентныеЗаданияСервер.ДобавитьЗадание`, передав в параметрах имя пользователя. #### 3. В прикладных решениях, ориентированных на режим сервиса по Технологии 1cFresh, не должно быть участков кода с прямым управлением регламентными заданиями. Для управления заданиями используйте программный интерфейс БСП из модуля `РегламентныеЗаданияСервер`. #### Неправильно ```bsl // Ищем задание по наименованию. Отбор = Новый Структура(); Отбор.Вставить("Метаданные", "ПроверкаЦен"); Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор); // Проверяем, что задание найдено. Если Задания.Количество() <> 1 Тогда // Запись в журнал ошибки опущена. Возврат; КонецЕсли; // Включаем найденное задание. НашеЗадание = Задания[0]; НашеЗадание.Использование = Истина; НашеЗадание.Записать(); ``` #### Правильно ```bsl // Ищем задание по наименованию. Отбор = Новый Структура(); Отбор.Вставить("Метаданные", "ПроверкаЦен"); Задания = РегламентныеЗаданияСервер.НайтиЗадания(Отбор); // Проверяем, что задание найдено. Если Задания.Количество() <> 1 Тогда // Запись в журнал ошибки опущена. Возврат; КонецЕсли; // Включаем найденное задание. НашеЗадание = Задания[0]; Параметры = Новый Структура(); Параметры.Вставить("Использование", Истина); РегламентныеЗаданияСервер.ИзменитьЗадание(НашеЗадание.УникальныйИдентификатор, Параметры); ``` #### 4. Подсистема `Очередь заданий` не гарантирует выполнение задания строго по расписанию. Точность зависит от: - общего количества запланированных заданий; - длительности их выполнения; - количества исполняющих потоков (регулируется константой `Максимальное количество исполняющихся фоновых заданий`). #### 4.1. Обычно в режиме сервиса не следует давать пользователям настройку расписания регламентных заданий. #### 4.2. Если по сценарию нужна оперативная реакция системы (обновление информации), а очередь регламентных заданий ее не обеспечивает, рассмотрите другие решения. - Если можно настроить push-уведомления от внешней системы, не используйте регламентное задание: - загружайте данные только при получении уведомления; - отправляйте данные только при реальной потребности. Пример push-доставки есть в Системе взаимодействий при приеме входящего SIP-звонка. - В остальных случаях оставьте регламентное задание (через очередь заданий), но оперативное получение и отправку данных выполняйте тогда, когда пользователь фактически работает в нужном рабочем месте. Пример: отправка и получение почты должны выполняться раз в 5 минут, но в нагруженной сервисной базе задание запускается раз в 1 ч. 40 мин, что неприемлемо. В таком случае организуйте оперативную работу с почтой так: - регламентное задание отправки и получения почты работает с периодичностью, которую дает очередь заданий; - при открытии списка писем выполняется разовая дозагрузка и отправка писем для доступных пользователю учетных записей (*); - клиентский обработчик ожидания выполняет регулярную отправку и получение писем с нужной периодичностью независимо от очереди заданий (*). Так при начале работы с почтой пользователю не приходится долго ждать, потому что значительная часть новых писем уже получена через очередь заданий. Оперативный обмен с почтовыми серверами выполняется только когда он действительно нужен - при фактической работе со списком писем. #### Для информации * Чтобы не создавать длительные задержки для пользователя, серверный вызов рекомендуется выполнять в. Серверная логика также должна работать максимально быстро и только в объеме, который нужен конкретному пользователю, чтобы не перегружать сервер и не затруднять работу других пользователей сервиса. #### Проверки [#acc:453](https://v8std.ru/diagnostics/acc/453/) [#acc:454](https://v8std.ru/diagnostics/acc/454/) [#acc:455](https://v8std.ru/diagnostics/acc/455/) #### Источник https://its.1c.ru/db/v8std#content:760 ### std761 - Интерфейсные тексты в коде: требования по локализации #std761 URL: https://v8std.ru/std/761/ Markdown URL: https://v8std.ru/std/761.md Source path: std/761.md Aliases: std761, #std761, std 761, стандарт 761 Related: - diagnostic:acc:1297 - diagnostic:acc:1298 - diagnostic:acc:1299 - diagnostic:acc:1354 - diagnostic:acc:1355 - diagnostic:acc:1356 - diagnostic:acc:1357 - diagnostic:acc:1358 - diagnostic:acc:1359 - diagnostic:acc:492 - standard:std454 - standard:std498 External sources: https://its.1c.ru/db/v8std#content:761 ID: #std761 # Интерфейсные тексты в коде: требования по локализации #### 1. Если в модулях конфигурации есть строки для интерфейса пользователя (сообщения, надписи на формах, тексты команд, выражения в настройках СКД и т.п.), обеспечивайте их локализацию. Для этого используйте `НСтр` вместо прямых строковых литералов. #### Неправильно ```bsl ПоказатьПредупреждение(, "Для выполнения операции необходимо установить расширение работы с файлами."); ``` #### Правильно ```bsl ПоказатьПредупреждение(, НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'")); ``` Также важно корректно использовать `НСтр`. #### Неправильно ```bsl ТекстСообщения = "ru='Для выполнения операции необходимо установить расширение работы с файлами.'"; ПоказатьПредупреждение(, НСтр(ТекстСообщения)); ``` #### Правильно ```bsl ТекстСообщения = НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'"); ПоказатьПредупреждение(, ТекстСообщения); ``` #### 2. Для составных строк, где части зависят от условий, используйте логически завершенные фразы и подстановку параметров через `СтрШаблон`. Это нужно из-за разного порядка слов, знаков препинания и грамматики в разных языках. #### Неправильно ```bsl СообщениеОНехватке = "Не хватает товара " + НаименованиеТовара + " на складе " + НаименованиеСклада + "."; ``` #### Правильно ```bsl ТекстСообщения = НСтр("ru = 'Не хватает товара %1 на складе %2.'"); СообщениеОНехватке = СтрШаблон(ТекстСообщения, НаименованиеТовара, НаименованиеСклада); ``` Не разрывайте одну фразу параметром действия (`Включить`, `Копировать`, `Удалить` и т.п.). #### Неправильно ```bsl НСтр("ru = '%1 пользователя ""%2"" в группу ""%3""?'") ``` #### Правильно ```bsl НСтр("ru = 'Включить пользователя ""%2"" в группу ""%3""?'"); НСтр("ru = 'Копировать пользователя ""%2"" в группу ""%3""?'"); НСтр("ru = 'Удалить пользователя ""%2"" из группы ""%3""?'"); ``` Допустимо: - формировать сообщение из нескольких предложений, если каждое предложение отдельно локализуется через `НСтр`; - использовать предложения с двоеточием (например, `НСтр("ru = 'Создание каталога не выполнено по причине:'")`). Именованные параметры подстановки используйте только в вариантах `[Параметр]` и `%Параметр%`. Имя параметра должно соответствовать [#std454: Правилам образования имен переменных](https://v8std.ru/std/454/) #### Правильно ```bsl СообщениеОНехватке = НСтр("ru='Не хватает товара %Товар% на складе %Склад%.'"); СообщениеОНехватке = СтрЗаменить(СообщениеОНехватке, "%Товар%", НаименованиеТовара); СообщениеОНехватке = СтрЗаменить(СообщениеОНехватке, "%Склад%", НаименованиеСклада); ``` #### 3. Если в конфигурации используется БСП, для составных форматированных строк вместо объекта `ФорматированнаяСтрока` применяйте функцию `ФорматированнаяСтрока` модулей `СтроковыеФункции` или `СтроковыеФункцииКлиент`. #### Неправильно ```bsl Текст = Новый Массив; Текст.Добавить(НСтр("ru = 'Перед удалением расширения рекомендуется'")); Текст.Добавить(" "); Текст.Добавить(Новый ФорматированнаяСтрока(НСтр("ru = 'выполнить резервное копирование информационной базы.'"), ШрифтыСтиля.ПолужирныйШрифт)); ТекстПредупреждения = Новый ФорматированнаяСтрока(Текст); ``` #### Правильно ```bsl ТекстПредупреждения = СтроковыеФункцииКлиент.ФорматированнаяСтрока( НСтр("ru = 'Перед удалением расширения рекомендуется выполнить резервное копирование информационной базы.'")); ``` #### 4. В `НСтр` строку ограничивайте одинарными кавычками. #### Неправильно ```bsl ПоказатьПредупреждение(, НСтр("ru=Переменная типа ""Строка""")); ПоказатьПредупреждение(, НСтр("ru=""Переменная типа ""Строка""""")); ``` #### Правильно ```bsl ПоказатьПредупреждение(, НСтр("ru='Переменная типа ""Строка""'")); ``` #### 5. Не выводите пользователю имена объектов метаданных и внутренние идентификаторы из кода. Выводите синонимы (представления), и по возможности получайте их напрямую из метаданных через `Представление`. #### Неправильно ```bsl СообщениеОшибка = НСтр("ru='Обнаружены отрицательные остатки по регистру ТоварыОрганизаций.'"); ``` #### Правильно ```bsl СообщениеОшибка = СтрШаблон( НСтр("ru = 'Обнаружены отрицательные остатки по регистру ""%1"".'"), Метаданные.РегистрыНакопления.ТоварыОрганизаций.Представление()); ``` Сокращенный вариант тоже допустим: ```bsl СообщениеОшибка = СтрШаблон( НСтр("ru = 'Обнаружены отрицательные остатки по регистру ""%1"".'"), Метаданные.РегистрыНакопления.ТоварыОрганизаций); ``` #### 5.1. Исключение: сообщения для разработчиков и интерфейсы инструментов разработчика/внедренца. Там допустимо выводить имена объектов и идентификаторы, но имена процедур и функций выводите в полном виде (с именем общего модуля или модуля менеджера). #### Неправильно ```bsl СообщениеОшибка = НСтр("ru = 'Ошибка в функции ЕстьРоль модуля УправлениеДоступом.'"); ``` #### Правильно ```bsl ИмяФункции = "УправлениеДоступом.ЕстьРоль"; СообщениеОшибка = СтрШаблон(НСтр("ru = 'Ошибка в функции %1.'"), ИмяФункции); ``` #### Правильно ```bsl ИмяФункции = "Документы.АвансовыйОтчет.АдаптированныйТекстЗапросаДвиженийПоРегистру"; СообщениеОшибка = СтрШаблон( НСтр("ru = 'Для исправления движений документа необходимо вызвать функцию %1.'"), ИмяФункции); ``` Для имен объектов метаданных предпочтительно использовать `ПолноеИмя`. #### Неправильно ```bsl СообщениеОшибка = НСтр("ru='Подсистема некорректно встроена в регистр ТоварыОрганизаций.'"); ``` #### Правильно ```bsl СообщениеОшибка = СтрШаблон( НСтр("ru = 'Подсистема некорректно встроена в регистр %1.'"), Метаданные.РегистрыНакопления.ТоварыОрганизаций.ПолноеИмя()); ``` #### 6. При использовании функций `ЧислоПрописью`, `ПредставлениеПериода`, `СтрокаСЧислом` не указывайте параметр `Л=` (`L=`) в строке форматирования. #### Неправильно ```bsl СуммаПрописью = ЧислоПрописью(2341.56, "Л = ru_RU; ДП = Истина", НСтр("ru='доллар,доллара,долларов,м,цент,цента,центов,м,2'")); ``` #### Правильно ```bsl СуммаПрописью = ЧислоПрописью(2341.56, "ДП = Истина", НСтр("ru='доллар,доллара,долларов,м,цент,цента,центов,м,2'")); ``` #### 7. Не вызывайте функцию `ПолучитьСклоненияСтрокиПоЧислу`, так как она предназначена только для русскоязычного интерфейса. Используйте: - `СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка`; - `РаботаСКурсамиВалют.СформироватьСуммуПрописью`; - `СтрокаСЧислом`; - `ЧислоПрописью`. Либо реализуйте собственные прикладные функции. #### 8. В редких случаях (например, длинный лог действий пользователя) допустимо собирать сообщение конкатенацией, а не шаблоном. Но неязыковые символы (обычно перевод строки) в начале/конце текста выделяйте в отдельные строковые литералы. #### Неправильно ```bsl ТекстСообщения = НСтр("ru = 'Не удалось сохранить файл документа по причине: |'") + ИнформацияОбОшибке; ``` #### Правильно ```bsl ТекстСообщения = НСтр("ru = 'Не удалось сохранить файл документа по причине:'") + Символы.ПС + ИнформацияОбОшибке; ``` Иначе при переводе легко потерять хвостовые пробелы или исказить фразу, потому что переводчик не видит полный контекст продолжения. #### 9. При вызове `ПоказатьВопрос` с указанием кнопок в параметре `Кнопки`: - по возможности используйте системное перечисление `КодВозвратаДиалога`; - если в перечислении нет нужной кнопки, задавайте ее представление через `НСтр`. #### Неправильно ```bsl Кнопки = Новый СписокЗначений; Кнопки.Добавить("Отключить"); Кнопки.Добавить("Нет"); ПоказатьВопрос(..., Кнопки); ``` #### Правильно ```bsl Кнопки = Новый СписокЗначений; Кнопки.Добавить("Отключить", НСтр("ru='Отключить'")); Кнопки.Добавить(КодВозвратаДиалога.Нет); ПоказатьВопрос(..., Кнопки); ``` #### См. также - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) #### Проверки [#acc:492](https://v8std.ru/diagnostics/acc/492/) [#acc:1297](https://v8std.ru/diagnostics/acc/1297/) [#acc:1298](https://v8std.ru/diagnostics/acc/1298/) [#acc:1299](https://v8std.ru/diagnostics/acc/1299/) [#acc:1354](https://v8std.ru/diagnostics/acc/1354/) [#acc:1355](https://v8std.ru/diagnostics/acc/1355/) [#acc:1356](https://v8std.ru/diagnostics/acc/1356/) [#acc:1357](https://v8std.ru/diagnostics/acc/1357/) [#acc:1358](https://v8std.ru/diagnostics/acc/1358/) [#acc:1359](https://v8std.ru/diagnostics/acc/1359/) #### Источник https://its.1c.ru/db/v8std#content:761 ### std762 - Запросы, динамические списки и отчеты на СКД: требования по локализации #std762 URL: https://v8std.ru/std/762/ Markdown URL: https://v8std.ru/std/762.md Source path: std/762.md Aliases: std762, #std762, std 762, стандарт 762 Related: - diagnostic:acc:1297 - diagnostic:acc:1298 - diagnostic:acc:1299 - diagnostic:acc:1300 - diagnostic:acc:1354 - diagnostic:acc:320 - diagnostic:acc:462 - diagnostic:acc:463 - diagnostic:acc:465 - diagnostic:acc:491 - standard:std437 - standard:std454 External sources: https://its.1c.ru/db/v8std#content:762 ID: #std762 # Запросы, динамические списки и отчеты на СКД: требования по локализации #### 1. Если строковые литералы из текста запроса выводятся пользователю, не оставляйте их в тексте `#!`. Передавайте такие значения через параметры запроса и задавайте через `НСтр`. #### Неправильно ```sdbl ВЫБРАТЬ Версии.Ссылка, ВЫБОР КОГДА Версии.Выпущена = ИСТИНА ТОГДА "выпущена" ИНАЧЕ "в разработке" КОНЕЦ КАК ТекстПояснения ИЗ Справочник.Версии КАК Версии ``` #### Также неправильно ```bsl ТекстЗапроса = "ВЫБРАТЬ | ВЫБОР | КОГДА Версии.Выпущена = ИСТИНА ТОГДА &ТекстВыпущеннойВерсии | ИНАЧЕ &ТекстНеВыпущеннойВерсии | КОНЕЦ"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстВыпущеннойВерсии", НСтр("ru='выпущена'")); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстНеВыпущеннойВерсии", НСтр("ru='в разработке'")); ``` #### Правильно ```bsl ЗапросПоВерсиям = Новый Запрос( "ВЫБРАТЬ | Версии.Ссылка, | ВЫБОР | КОГДА Версии.Выпущена = ИСТИНА ТОГДА &ТекстВыпущеннойВерсии | ИНАЧЕ &ТекстНеВыпущеннойВерсии | КОНЕЦ КАК ТекстПояснения |ИЗ | Справочник.Версии КАК Версии"); ЗапросПоВерсиям.УстановитьПараметр("ТекстВыпущеннойВерсии", НСтр("ru='выпущена'")); ЗапросПоВерсиям.УстановитьПараметр("ТекстНеВыпущеннойВерсии", НСтр("ru='в разработке'")); ``` #### 2. Те же требования применяйте к выражениям СКД и запросам наборов данных СКД, если они формируют интерфейсный текст. - Для параметров СКД с текстовыми значениями используйте технические ключи по правилам [#std454: Правила образования имен переменных](https://v8std.ru/std/454/), а человекочитаемый текст задавайте локализуемо Изображение: Пример локализации параметров СКД (762.img1.png) - Если значение параметра зависит от прикладной логики, задавайте его в модуле отчета в `ПриКомпоновкеРезультата`, а не в колонке `Выражение`. - В выражениях настройки СКД (`Выражение представления`, `Выражение упорядочивания` и др.) используйте `НСтр`, аналогично модульному коду. #### Неправильно ```sdbl ВЫБОР КОГДА ВидОперации = "Отгрузка клиентам" ТОГДА 1 КОГДА ВидОперации = "Возвраты товаров от клиентов" ТОГДА 2 КОГДА ВидОперации = "Приемка от поставщиков" ТОГДА 3 КОНЕЦ ``` #### Правильно ```sdbl ВЫБОР КОГДА ВидОперации = &ВидОперацииОтгрузкаКлиентам ТОГДА 1 КОГДА ВидОперации = &ВидОперацииВозвратыТоваровОтКлиентов ТОГДА 2 КОГДА ВидОперации = &ВидОперацииПриемкаОтПоставщиков ТОГДА 3 КОНЕЦ ``` #### Правильно ```sdbl Выбор Когда Объект = Раздел Тогда Выбор Когда Раздел = Значение(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) Тогда НСтр("ru='<Для всех разделов и объектов, кроме указанных>'") Иначе НСтр("ru='<Для всех объектов, кроме указанных>'") Конец Иначе Объект Конец ``` #### 3. Для поля выборки отчета СКД, полученного вычислением с псевдонимом, задавайте синоним явно. Не используйте автоматически сгенерированный заголовок по имени или псевдониму. #### Неправильно Изображение: Автосгенерированный заголовок (762.img2.png) #### Правильно Изображение: Явно заданный синоним (762.img3.png) Если не установить синоним, такие поля хуже обнаруживаются при поиске интерфейсных текстов. #### 4. В заголовках отчетов СКД, полей, вычисляемых полей и параметров допускаются параметры подстановки `СтрШаблон`: - `%1`, `%2` и т.д.; - `[Параметр]`; - `%Параметр%`. Имя параметра должно соответствовать правилам [#std454: Правила образования имен переменных](https://v8std.ru/std/454/) | Заменяйте параметры в `ПриКомпоновкеРезультата`, когда заголовки зависят от прикладной логики. | | --- | | Изображение: Параметры в макете СКД (762.img4.png) | | Изображение: Параметры в вычисляемых полях (762.img5.png) | | Изображение: Параметры в представлении (762.img6.png) | | Изображение: Параметры в упорядочивании (762.img7.png) | | Изображение: Результат подстановки (762.img8.png) | #### См. также - [#std437: Оформление текстов запросов](https://v8std.ru/std/437/) #### Проверки [#acc:320](https://v8std.ru/diagnostics/acc/320/) [#acc:462](https://v8std.ru/diagnostics/acc/462/) [#acc:463](https://v8std.ru/diagnostics/acc/463/) [#acc:465](https://v8std.ru/diagnostics/acc/465/) [#acc:491](https://v8std.ru/diagnostics/acc/491/) [#acc:1297](https://v8std.ru/diagnostics/acc/1297/) [#acc:1298](https://v8std.ru/diagnostics/acc/1298/) [#acc:1299](https://v8std.ru/diagnostics/acc/1299/) [#acc:1300](https://v8std.ru/diagnostics/acc/1300/) [#acc:1354](https://v8std.ru/diagnostics/acc/1354/) #### Источник https://its.1c.ru/db/v8std#content:762 ### std763 - Форматирование даты, числа, Булево: требования по локализации #std763 URL: https://v8std.ru/std/763/ Markdown URL: https://v8std.ru/std/763.md Source path: std/763.md Aliases: std763, #std763, std 763, стандарт 763 Related: diagnostic:acc:1367, diagnostic:acc:1368, diagnostic:acc:1369, diagnostic:acc:335 External sources: http://www.w3.org/TR/xmlschema-2/#dateTime, https://its.1c.ru/db/v8std#content:763 ID: #std763 # Форматирование даты, числа, Булево: требования по локализации #### 1. При использовании функции `Формат` в ряде случаев применяйте `НСтр` для форматной строки. Форматная строка, заданная в свойствах метаданных (форм), всегда подлежит локализации, как и синоним. #### 1.1. При выводе дат учитывайте, что в разных странах различаются порядок и разделители компонентов даты. Поэтому вместо явного формата даты используйте локальный формат даты `ДЛФ`. Если нужен произвольный формат (`ДФ`) или представление пустой даты (`ДП`), оборачивайте форматную строку в `НСтр`, чтобы она могла переводиться. #### Неправильно ```bsl Формат(ДатаУтверждения, "ДФ=дд.ММ.гггг"); Формат(ДатаУтверждения, "ДФ=ММММ гггг") + " г."; ``` #### Правильно ```bsl Формат(ДатаУтверждения, "ДЛФ=ДД"); Формат(ДатаУтверждения, НСтр("ru='ДФ=''ММММ гггг ""г.""'''")); ``` #### 1.2. Для чисел применяйте `НСтр` к форматной строке, когда: - задается нечисловое представление нулевого значения (`ЧН`); - задан шаблон форматирования числа (`ЧФ`); - переопределяется разделитель дробной части (`ЧРД`). #### Неправильно ```bsl Предупреждение(Формат(100, "ЧН=Отсутствует")); Предупреждение(Формат(100, "ЧФ=""$Ч' / Час'""")); ``` #### Правильно ```bsl Предупреждение(Формат(100, НСтр("ru = 'ЧН=Отсутствует'"))); Предупреждение(Формат(100, НСтр("ru = 'ЧФ=""$Ч'' / Час''""'"))); // "$100 / Час" ``` #### 1.3. Для вывода пользователю значений `Булево` всегда применяйте `НСтр` к форматной строке. #### Неправильно ```bsl Предупреждение(Формат(Истина, "БЛ=Нет; БИ=Да")); ``` #### Правильно ```bsl Предупреждение(Формат(Истина, НСтр("ru='БЛ=Нет; БИ=Да'"))); ``` #### 1.4. Не переопределяйте локализацию отображения данных по умолчанию (формат ОС). При использовании `Формат` избегайте параметра `L=`. #### 2. При задании формата в полях ввода форм и полях отчетов на СКД также предпочитайте локальный формат даты. Другой формат допустим, если локальный формат не подходит по смыслу задачи. В этом случае форматная строка должна переводиться при локализации конфигурации. #### 3. При переопределении стандартных представлений полей в отчетах на СКД соблюдайте те же правила, что и в модульном коде. #### Неправильно ```bsl "N " + ВОтветНаНомер + " от " + Формат(ВОтветНаДата, "ДФ=dd.MM.yyyy") ``` #### Правильно ```bsl СтрШаблон( НСтр("ru = 'N%1 от %2'"), ВОтветНаНомер, Формат(ВОтветНаДата, "ДЛФ=D")) ``` #### 4. Если значение нужно передать в машиночитаемом виде независимо от настроек локализации, вместо локализации выполняйте сериализацию. Локализацию дат используйте всегда, когда это возможно. Отказ от нее допустим только по технической необходимости (например, генерация XML для внешней специфичной системы). В общем случае для сериализации используйте `XMLСтрока`, для десериализации `XMLЗначение` или `ПривестиЗначение` объекта `ОписаниеТипов`. #### 4.1. Для собственных форматов обмена рекомендуется сериализация дат в формате ISO `ГГГГ-ММ-ДДTЧЧ:ММ:ССZ` (тип `dateTime` XML Schema): http://www.w3.org/TR/xmlschema-2/#dateTime. #### Неправильно ```bsl Строка = Формат(Дата, "ДФ=гггг-ММ-ддTЧЧ:мм:сс"); // Сериализация ``` #### Правильно ```bsl // Сериализация Строка = XMLСтрока(Дата); // Или Строка = ЗаписатьДатуJSON(Дата, ФорматДатыJSON.ISO); // Десериализация ОписаниеТипа = Новый ОписаниеТипов("Дата"); Дата = ОписаниеТипа.ПривестиЗначение(Строка); // Или Дата = XMLЗначение(Тип("Дата"), Строка); // Или Дата = ПрочитатьДатуJSON(Строка, ФорматДатыJSON.ISO); ``` #### 4.2. Для чисел: #### Неправильно ```bsl // Сериализация Строка = Строка(Число); // Или Строка = Формат(Число); ``` #### Правильно ```bsl Строка = XMLСтрока(Число); // Сериализация Число = XMLЗначение(Тип("Число"), Строка); // Десериализация ``` #### 4.3. Для `Булево`: #### Неправильно ```bsl // Сериализация Строка = Строка(Булево); // Или Строка = Формат(Булево); // Или Строка = Формат(Булево, "БЛ=off; БИ=on"); ``` #### Правильно ```bsl // Сериализация Строка = XMLСтрока(Булево); // Десериализация Булево = XMLЗначение(Тип("Булево"), Строка); // Либо явное преобразование в прикладной формат Строка = ?(Булево, "on", "off"); ``` #### Проверки [#acc:335](https://v8std.ru/diagnostics/acc/335/) [#acc:1367](https://v8std.ru/diagnostics/acc/1367/) [#acc:1368](https://v8std.ru/diagnostics/acc/1368/) [#acc:1369](https://v8std.ru/diagnostics/acc/1369/) #### Источник https://its.1c.ru/db/v8std#content:763 ### std764 - Строковые константные выражения в коде: требования по локализации #std764 URL: https://v8std.ru/std/764/ Markdown URL: https://v8std.ru/std/764.md Source path: std/764.md Aliases: std764, #std764, std 764, стандарт 764 Related: diagnostic:acc:1297, diagnostic:acc:1298, diagnostic:acc:1299, diagnostic:acc:1354, diagnostic:acc:334 External sources: https://its.1c.ru/db/v838doc/bookmark/dev/TI000000158, https://its.1c.ru/db/v8std#content:764 ID: #std764 # Строковые константные выражения в коде: требования по локализации #### 1. Не локализуйте строковые константы с внутренними идентификаторами, которые не выводятся пользователю. К таким строкам не применяйте `НСтр`. Строковые идентификаторы именуйте по правилам идентификаторов встроенного языка. #### Пример ```bsl Возврат "ОперацияВыполненаУспешно"; Оповестить("ЗаписьФайл", Новый Структура("Событие", "ВерсияСохранена"), ФайлСсылка); ``` #### Неправильно ```bsl Если Статус = "Отгрузка клиентам" Тогда ... ``` #### Правильно ```bsl Если Статус = "ОтгрузкаКлиентам" Тогда ... ``` Это требование действует и для строковых идентификаторов в текстах запросов и выражениях СКД. При работе со строковыми константами допустимо и часто предпочтительно использовать функции, которые возвращают такие константы. Это упрощает отладку и рефакторинг. #### Правильно ```bsl РезультатЗагрузки = ЗагрузитьФайлИзИнтернета(...); Если РезультатЗагрузки = РезультатЗагрузкиУспешно() Тогда ... ИначеЕсли ... КонецЕсли; Функция РезультатЗагрузкиУспешно() Возврат "Успешно"; КонецФункции ``` Так снимается неоднозначность, когда идентификатор в коде визуально выглядит как пользовательская строка без `НСтр`. #### 2. Не используйте в алгоритмах строковые представления объектов и типов. Представления предназначены только для вывода пользователю и зависят от текущего языка интерфейса. Если использовать их в логике, это приводит к ошибкам при локализации и интеграции с системами на другом языке. #### 2.1. Чтобы получить предопределенное значение на клиенте, указывайте его строковое имя так, как оно задано в конфигураторе. #### Неправильно ```bsl Если Строка(ЮрФизЛицо) = "Юридическое лицо" Тогда ``` #### Правильно ```bsl Если ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо") Тогда ``` Подробнее: [Работа с предопределенными значениями](https://its.1c.ru/db/v838doc/bookmark/dev/TI000000158). #### Проверки [#acc:334](https://v8std.ru/diagnostics/acc/334/) [#acc:1297](https://v8std.ru/diagnostics/acc/1297/) [#acc:1298](https://v8std.ru/diagnostics/acc/1298/) [#acc:1299](https://v8std.ru/diagnostics/acc/1299/) [#acc:1354](https://v8std.ru/diagnostics/acc/1354/) #### Источник https://its.1c.ru/db/v8std#content:764 ### std765 - Элементы форм: требования по локализации #std765 URL: https://v8std.ru/std/765/ Markdown URL: https://v8std.ru/std/765.md Source path: std/765.md Aliases: std765, #std765, std 765, стандарт 765 Related: - diagnostic:acc:445 - diagnostic:acc:446 - diagnostic:acc:447 - diagnostic:acc:448 - diagnostic:acc:464 - diagnostic:v8cs:form-dynamic-list-item-title - diagnostic:v8cs:input-field-list-choice-mode - standard:std456 - standard:std478 External sources: https://its.1c.ru/db/files/1CITS/EXE/V8Std/АвтоформатированиеКодаИЛокализация/АвтоформатированиеКодаИЛокализация.zip, https://its.1c.ru/db/v8std#content:765 ID: #std765 # Элементы форм: требования по локализации #### 1. Не присваивайте реквизитам, которые используются в элементах формы, строковые значения без локализации. Для таких значений используйте: - списки значений, где у каждого значения есть локализуемое представление; - перечисления, если значения используются в таблицах базы данных. #### Неправильно Изображение: Нелокализуемые строковые значения в реквизите формы (765.image6.png) ```bsl Если Режим = "Рабочий" Тогда Режим = "Демо"; Иначе Режим = "Рабочий"; КонецЕсли; ``` #### Правильно Изображение: Список значений с локализуемыми представлениями (765.image7.png) #### Правильно Изображение: Использование перечисления для режима работы (765.image8.png) ```bsl Если Режим = Перечисления.РежимыРаботы.Рабочий Тогда Режим = Перечисления.РежимыРаботы.Демо; Иначе Режим = Перечисления.РежимыРаботы.Рабочий; КонецЕсли; ``` #### 2. Для всех таблиц и групп на форме задавайте заголовки. Если заголовок не должен отображаться пользователю, явно отключайте показ заголовка в свойствах элемента формы. Иначе в команде `Изменить форму` пользователь увидит автоматически сгенерированные заголовки из имен элементов. Такие заголовки не переводятся: в выгрузку на перевод они попадают как пустые. #### Неправильно Изображение: Группа без явного заголовка в свойствах формы (765.image9.png) Изображение: Автосгенерированный заголовок при изменении формы (765.image10.png) #### Правильно Изображение: Заголовок задан явно (765.image11.png) Изображение: Корректный заголовок при изменении формы (765.image12.png) Для автоматической расстановки заголовков можно использовать обработку с ИТС: [Автоформатирование кода и локализации](https://its.1c.ru/db/files/1CITS/EXE/V8Std/АвтоформатированиеКодаИЛокализация/АвтоформатированиеКодаИЛокализация.zip). #### 3. Сокращайте количество незначащей информации, которая попадает в локализацию. #### 3.1. Удаляйте бессмысленные подсказки у групп форм. См. стандарт [#std478: Подсказка и проверка заполнения](https://v8std.ru/std/478/) Это снижает затраты на перевод и исключает лишний шум для пользователя, в том числе в режиме `Изменить форму`. #### Неправильно Изображение: Бессмысленные подсказки у групп формы (765.image13.png) Изображение: Лишние подсказки в пользовательском режиме (765.image14.png) #### Правильно Изображение: Подсказки удалены из групп формы (765.image15.png) Изображение: Форма без лишних подсказок (765.image16.png) #### 3.2. У реквизитов формы, которые не размещены на форме как элементы управления, очищайте заголовки. Обычно это служебные реквизиты для технологических задач. Для удаления бессмысленных подсказок можно использовать обработку из статьи [#std456: Тексты модулей](https://v8std.ru/std/456/) #### 4. Задавайте заголовок для колонок динамического списка, которые: - получаются в запросе комбинацией других колонок; - имеют собственный псевдоним. Не полагайтесь на автоматически сгенерированный заголовок по имени или псевдониму. #### Неправильно Изображение: Автоматический заголовок колонки динамического списка (765.image2.png) #### Правильно Изображение: Явно заданный заголовок колонки динамического списка (765.image3.png) Примеры, когда заголовок колонки нужно задавать явно: ```sdbl ВЫБРАТЬ Таблица.Поле1 КАК Поле2, ВЫРАЗИТЬ(Таблица.Поле1 КАК СТРОКА(100)) КАК Поле3 ``` Если поле создается в запросе и получает псевдоним, синоним из метаданных не подставляется автоматически. Инструмент редактирования интерфейсных текстов не находит заголовки таких колонок. Имя колонки задавайте даже если заголовок не выводится в форме. Пользователь все равно видит эти имена в настройке формы (`Еще` -> `Изменить форму...`). #### Проверки [#v8cs:form-dynamic-list-item-title](https://v8std.ru/diagnostics/v8-code-style/form-dynamic-list-item-title/) #### 5. Для полей формы со списками выбора всегда устанавливайте свойство `РежимВыбораИзСписка` в значение `Истина`. Тогда поле выводит корректное локализуемое представление, а не внутреннее значение списка выбора. #### См. также #### Проверки [#v8cs:input-field-list-choice-mode](https://v8std.ru/diagnostics/v8-code-style/input-field-list-choice-mode/) [#acc:445](https://v8std.ru/diagnostics/acc/445/) [#acc:446](https://v8std.ru/diagnostics/acc/446/) [#acc:447](https://v8std.ru/diagnostics/acc/447/) [#acc:448](https://v8std.ru/diagnostics/acc/448/) [#acc:464](https://v8std.ru/diagnostics/acc/464/) #### Источник https://its.1c.ru/db/v8std#content:765 ### std766 - Макеты: требования по локализации и поддержке разных языков интерфейса #std766 URL: https://v8std.ru/std/766/ Markdown URL: https://v8std.ru/std/766.md Source path: std/766.md Aliases: std766, #std766, std 766, стандарт 766 Related: diagnostic:acc:1361, diagnostic:acc:450, diagnostic:acc:497, related:metod8dev:3221, standard:std761 External sources: https://its.1c.ru/db/v8std#content:766 ID: #std766 # Макеты: требования по локализации и поддержке разных языков интерфейса #### 1. Обычно перевод табличных, текстовых и HTML-макетов не требует специальных подготовительных действий. Исключение: двоичные макеты, которые нужно переводить, и HTML-макеты с изображениями, где текст внутри изображений должен отличаться по языкам. Такие макеты помечайте постфиксом в имени: `_кодЯзыка`, где код совпадает со свойством `Код языка` в метаданных. Для русского языка это `_ru`. #### Неправильно Макет `ПФ_ODT_СчетНаОплату` #### Правильно Макет `ПФ_ODT_СчетНаОплату_ru` При добавлении языков интерфейса добавляйте макеты с соответствующими постфиксами и выбирайте их в коде по языку. #### Неправильно ```bsl ... = ПолучитьОбщийМакет("ПФ_ODT_СчетНаОплату"); ``` #### Правильно ```bsl ... = ПолучитьОбщийМакет("ПФ_ODT_СчетНаОплату" + "_" + ТекущийЯзык()); ``` Чтобы снизить риск ошибок при частичном переводе, получайте макет в три этапа: - сначала по `ИмяМакета + "_" + ТекущийЯзык()`; - если не найден, по `ИмяМакета + "_" + Метаданные.ОсновнойЯзык.КодЯзыка`; - если не найден, по исходному имени `ИмяМакета`; - затем устанавливайте `КодЯзыка` (для табличного документа) или `КодЯзыкаМакета` (для текстового документа и HTML-макета), как в п. 2. #### 2. В многоязычной конфигурации может потребоваться в одном сеансе формировать печатные формы на языке, отличном от текущего языка интерфейса. Например, в англоязычном сеансе формировать счет на русском языке. Для получения данных из табличного, текстового или HTML-макета на заданном языке используйте: - `КодЯзыка` у табличного документа; - `КодЯзыкаМакета` у текстового документа и HTML-макета. #### Правильно ```bsl Макет = ПолучитьОбщийМакет("ПечатнаяФорма"); Макет.КодЯзыкаМакета = "ru"; HTMLДокумент = Макет.ПолучитьДокументHTML(); ``` #### 3. В многоязычной конфигурации может понадобиться формировать печатные формы строго на одном языке независимо от текущего языка интерфейса. Пример: регламентированная отчетность для госучреждений. Для табличных и HTML-макетов такого типа: - указывайте постфикс кода языка в имени (как в п. 1); - при программном получении устанавливайте код языка макета (как в п. 2). Такие макеты не переводите на другие языки интерфейса. При программном формировании текстов для заполнения макета явно задавайте второй параметр в `НСтр()`, чтобы строки были на том же языке, что и макет. #### Неправильно ```bsl Макет = ПолучитьМакет("ПФ_MXL_СчетФактура"); ... Область.Текст = НСтр("ru='Заголовок печати';"); ``` #### Правильно ```bsl Макет = ПолучитьМакет("ПФ_MXL_СчетФактура_ru"); Макет.КодЯзыка = Метаданные.Языки.Русский.КодЯзыка; ... Область.Текст = НСтр("ru='Заголовок печати';", Метаданные.Языки.Русский.КодЯзыка); ``` При использовании БСП и подсистемы `Печать` получение макета через `УправлениеПечатью.МакетПечатнойФормы("ПФ_MXL_СчетФактура")` возвращает форму `ПФ_MXL_СчетФактура_ru` и устанавливает у макета свойство `КодЯзыка`. #### 4. Если в текстах макетов используются именованные параметры подстановки, соблюдайте требования [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) #### 5. Используйте в макетах кодировку UTF-8. #### 6. По возможности группируйте однотипные макеты: используйте один макет вместо нескольких. Например, если несколько однотипных сообщений записываются в один справочник, их лучше хранить в одном макете. #### Неправильно Изображение: Несколько однотипных макетов (766.image19.png) ```bsl Макет = Обработки.ПереключениеРежимов.ПолучитьМакет("Сообщение"); ``` #### Правильно Изображение: Один макет для однотипных сообщений (766.image20.png) ```bsl Макет = Обработки.ПереключениеРежимов.ПолучитьМакет( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( "Сообщения_%1", ОбщегоНазначения.КодОсновногоЯзыка())); ``` #### 7. Внешние компоненты размещайте в макетах с типом `внешняя компонента`. При разработке внешней компоненты обрабатывайте метод `SetLocale` для локализации по полученному коду локали. Подробнее: [#metod3221: Технология создания внешних компонент](https://v8std.ru/metod8dev/3221/) Если полученный код локали не поддерживается, компонент должен настроить свое окружение на использование английского языка. #### Проверки [#acc:450](https://v8std.ru/diagnostics/acc/450/) [#acc:497](https://v8std.ru/diagnostics/acc/497/) [#acc:1361](https://v8std.ru/diagnostics/acc/1361/) #### Источник https://its.1c.ru/db/v8std#content:766 ### std767 - Регламентные задания: требования по локализации #std767 URL: https://v8std.ru/std/767/ Markdown URL: https://v8std.ru/std/767.md Source path: std/767.md Aliases: std767, #std767, std 767, стандарт 767 Related: diagnostic:acc:449, diagnostic:v8cs:mdo-scheduled-job-description, standard:std540 External sources: https://its.1c.ru/db/v8std#content:767 ID: #std767 # Регламентные задания: требования по локализации #### 1. Для предопределенных регламентных заданий не задавайте наименование в конфигураторе. Достаточно указать синоним предопределенного регламентного задания. #### Неправильно Изображение: Наименование задано вручную (767.image17.png) #### Правильно Изображение: Используется только синоним (767.image18.png) Для непредопределенных (параметризованных) регламентных заданий наименование задавайте программно. Оформляйте его через `НСтр`, при необходимости учитывайте контекст выполнения. #### Правильно ```bsl Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.РассылкаОтчетов); Задание.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Рассылка отчетов: %1'"), РассылкаОтчетов); Задание.Записать(); ``` Если наименование не задано, платформа берет его из локализуемого синонима. Если наименование задано вручную, будет использоваться именно оно, а оно не поддерживает локализацию. #### Проверки [#v8cs:mdo-scheduled-job-description](https://v8std.ru/diagnostics/v8-code-style/mdo-scheduled-job-description/) #### См. также - [#std540: Общие требования к регламентным заданиям](https://v8std.ru/std/540/) #### Проверки [#acc:449](https://v8std.ru/diagnostics/acc/449/) #### Источник https://its.1c.ru/db/v8std#content:767 ### std769 - Поставка международной версии конфигурации #std769 URL: https://v8std.ru/std/769/ Markdown URL: https://v8std.ru/std/769.md Source path: std/769.md Aliases: std769, #std769, std 769, стандарт 769 Related: standard:std761, standard:std762, standard:std763, standard:std764, standard:std765, standard:std766, standard:std767 External sources: - https://releases.1c.ru - https://app.box.com/files/0/ - https://disk.yandex.ru/client/disk/ - https://www.dropbox.com/home/ - https://its.1c.ru/db/files/1CITS/EXE/V8Std/ПодготовкаФайлаНастроекОбъединения/ПодготовкаФайлаНастроекОбъединения.zip - https://its.1c.ru/db/v8std#content:769 ID: #std769 # Поставка международной версии конфигурации Стандарт применим к локализуемым конфигурациям (и входящим в них библиотекам), на базе которых выпускаются национальные решения для разных стран или регионов. Для упрощения работы локализаторов при первичной локализации и последующих обновлениях выпускайте международную версию конфигурации, подготовленную для создания национальных версий. Локализованные версии рекомендуется разрабатывать на базе международной версии. Требования группы стандартов по локализации одинаково применяются и к международной, и к национальным версиям. Например, национальная версия также может поставляться с несколькими языками интерфейса. Для снижения трудозатрат на выделение национальной специфики в первую очередь анализируйте зарубежные версии, опубликованные на портале 1С: https://releases.1c.ru. #### 1. Национальную (российскую) специфику в программном коде и формах выделяйте в отдельные объекты метаданных, которые отсутствуют в международной версии. #### Неправильно Изображение: Национальная специфика смешана с международной (769.localization-wrong.png) #### Правильно Изображение: Национальная специфика вынесена в отдельные объекты (769.localization-correct.png) #### 1.1. Реквизиты объектов, относящиеся к национальной специфике, можно оставлять в объектах, но конфигурация должна сохранять работоспособность при их удалении. #### 1.2. Если в форме к национальной специфике относится только часть элементов, выносите эти элементы в отдельную форму. #### Пример Изображение: Выделение национальных элементов формы (769.form-split.png) #### 1.3. К национальной специфике могут относиться и алгоритмы (например, загрузка курсов валют). Такие алгоритмы также выделяйте в отдельные объекты метаданных. #### 1.4. Если подсистема или объект в основном международные, но нужно добавить национальную специфику, создавайте общие модули с постфиксом `Локализация`. В алгоритмах, где нужно дополнить или переопределить поведение, делайте вызов в эти модули. Процедуры размещайте в области `ПрограммныйИнтерфейс`. В международной поставке модули с постфиксом `Локализация` не должны содержать прикладной код. В национальной конфигурации код внутри процедур обрамляйте комментариями `Локализация` и `Конец Локализация`. Если международная поставка изготавливается из национальной, такие фрагменты удаляются вместе с обрамляющими комментариями. #### Пример: национальная конфигурация ```bsl Процедура ПриОпределенииСимволовНациональногоАлфавита(СимволыНациональногоАлфавита, ДополнительныеДопустимыеСимволы) Экспорт // Локализация СимволыНациональногоАлфавита = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; // Конец Локализация КонецПроцедуры ``` #### Пример: международная поставка ```bsl Процедура ПриОпределенииСимволовНациональногоАлфавита(СимволыНациональногоАлфавита, ДополнительныеДопустимыеСимволы) Экспорт КонецПроцедуры ``` Не обрамляйте комментариями `Локализация` и `Конец Локализация` фрагменты кода в любых других объектах и модулях. Иначе разработчик не сможет при необходимости доопределить национальную специфику. #### Неправильно ```bsl Функция АдресВОблачномСервисе(Сервис, Href) Экспорт АдресОбъекта = ""; Если Сервис = "Box" Тогда АдресОбъекта = "https://app.box.com/files/0/"; // Локализация ИначеЕсли Сервис = "Yandex" Тогда АдресОбъекта = "https://disk.yandex.ru/client/disk/"; // Конец Локализация ИначеЕсли Сервис = "Dropbox" Тогда АдресОбъекта = "https://www.dropbox.com/home/"; КонецЕсли; Возврат АдресОбъекта + Href; КонецФункции ``` #### Правильно ```bsl Функция АдресВОблачномСервисе(Сервис, Href) Экспорт АдресОбъекта = ""; Если Сервис = "Box" Тогда АдресОбъекта = "https://app.box.com/files/0/"; ИначеЕсли Сервис = "Dropbox" Тогда АдресОбъекта = "https://www.dropbox.com/home/"; Иначе РаботаСФайламиЛокализация.ПриОпределенииАдресаОблачногоСервиса(Сервис, АдресОбъекта); КонецЕсли; Возврат АдресОбъекта + Href; КонецФункции ``` В модуле `РаботаСФайламиЛокализация`: ```bsl Процедура ПриОпределенииАдресаОблачногоСервиса(Сервис, АдресОбъекта) // Локализация Если Сервис = "Yandex" Тогда АдресОбъекта = "https://disk.yandex.ru/client/disk/"; КонецЕсли; // Конец Локализация КонецПроцедуры ``` Пример применения: функциональность закрытия месяца международная, но список этапов нужно дополнять национальными этапами. Для этого добавляют общий модуль `ЗакрытиеМесяцаЛокализация`, а из процедуры `ЗакрытиеМесяца.ДобавитьЭтапыЗакрытияМесяца` вызывают его метод. В международной поставке модуль `ЗакрытиеМесяцаЛокализация` содержит только определение метода `ДобавитьЭтапыЗакрытияМесяца`. #### 1.5. Если национальная специфика занимает большую часть подсистемы, относите к национальной специфике всю подсистему. Пример: подсистема «Склонение представлений объектов». #### 1.6. Перечисляйте объекты метаданных с национальной спецификой в файле `ЛокализуемыеОбъекты.txt` и включайте файл в дистрибутив типовой конфигурации. Файл содержит имена объектов в том виде, в котором их возвращает функция `ОбъектМетаданных.ПолноеИмя()`. Каждый объект указывается с новой строки. Допускаются комментарии, как в коде конфигурации. #### Пример ```bsl // Банки Обработка.ЗагрузкаКлассификатораБанков РегламентноеЗадание.ЗагрузкаКлассификатораБанков Справочник.КлассификаторБанков.Реквизит.ИНН // Валюты Обработка.ЗагрузкаКурсовВалют РегламентноеЗадание.ЗагрузкаКурсовВалют ``` #### 2. Соблюдение требования п. 1 не должно ухудшать удобство интерфейса. Если из-за переноса части формы в отдельные формы юзабилити существенно ухудшается, относите к национальной специфике всю форму. #### 3. В процедурах переопределяемых модулей размещайте только вызовы процедур конфигурации, содержащих прикладной код. Это упрощает доработку переопределяемых модулей при локализации. #### Неправильно ```bsl // В модуле ВариантыОтчетовПереопределяемый Процедура ОпределитьРазделыСВариантамиОтчетов(Разделы) Экспорт Разделы.Добавить(ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(), НСтр("ru = 'Главное'")); Разделы.Добавить(Метаданные.Подсистемы.CRMИМаркетинг, НСтр("ru= 'Отчеты по CRM и маркетингу'")); Разделы.Добавить(Метаданные.Подсистемы.Закупки, НСтр("ru= 'Отчеты по закупкам'")); Разделы.Добавить(Метаданные.Подсистемы.Казначейство, НСтр("ru= 'Отчеты по казначейству'")); Разделы.Добавить(Метаданные.Подсистемы.Продажи, НСтр("ru= 'Отчеты по продажам'")); Разделы.Добавить(Метаданные.Подсистемы.Склад, НСтр("ru= 'Отчеты по складу'")); Разделы.Добавить(Метаданные.Подсистемы.ФинансовыйРезультатИКонтроллинг, НСтр("ru= 'Отчеты по финансовому результату'")); КонецПроцедуры ``` #### Правильно ```bsl // В модуле ВариантыОтчетовПереопределяемый Процедура ОпределитьРазделыСВариантамиОтчетов(Разделы) Экспорт ВариантыОтчетовУТ.ОпределитьРазделыСВариантамиОтчетов(Разделы); КонецПроцедуры // В модуле ВариантыОтчетовУТ Процедура ОпределитьРазделыСВариантамиОтчетов(Разделы) Экспорт Разделы.Добавить(ВариантыОтчетовКлиентСервер.ИдентификаторНачальнойСтраницы(), НСтр("ru = 'Главное'")); Разделы.Добавить(Метаданные.Подсистемы.CRMИМаркетинг, НСтр("ru= 'Отчеты по CRM и маркетингу'")); Разделы.Добавить(Метаданные.Подсистемы.Закупки, НСтр("ru= 'Отчеты по закупкам'")); Разделы.Добавить(Метаданные.Подсистемы.Казначейство, НСтр("ru= 'Отчеты по казначейству'")); Разделы.Добавить(Метаданные.Подсистемы.Продажи, НСтр("ru= 'Отчеты по продажам'")); Разделы.Добавить(Метаданные.Подсистемы.Склад, НСтр("ru= 'Отчеты по складу'")); Разделы.Добавить(Метаданные.Подсистемы.ФинансовыйРезультатИКонтроллинг, НСтр("ru= 'Отчеты по финансовому результату'")); КонецПроцедуры ``` #### 4. Обеспечивайте работоспособность международной конфигурации. #### 5. Международную и российскую версии выпускайте синхронно. Для этого используйте одну из схем разработки: - `a.` разработка российской версии в одном хранилище и автоматическая сборка международной версии удалением объектов национальной специфики и кода внутри процедур модулей с постфиксом `Локализация`; - `b.` разработка российской и международной версий в двух хранилищах, где российская версия стоит на поддержке международной и содержит добавленные объекты национальной специфики. Если локализатор берет за основу международную версию, рекомендуется: - поставить национальную конфигурацию на поддержку международной; - по мере необходимости добавить объекты из файла `ЛокализуемыеОбъекты.txt`, ориентируясь на аналогичные объекты российской версии; - при необходимости добавить реализацию в процедуры общих модулей с постфиксом `Локализация`. Если локализатор берет за основу российскую версию, рекомендуется: - поставить национальную конфигурацию на поддержку российской; - снять с поддержки и локализовать объекты из файла `ЛокализуемыеОбъекты.txt`; - снять с поддержки и локализовать алгоритмы модулей с постфиксом `Локализация`. Подготовку файла поставки международной версии можно упростить файлом настроек объединения. #### Подсказка Для автоматизации используйте обработку подготовки файла настроек объединения: https://its.1c.ru/db/files/1CITS/EXE/V8Std/ПодготовкаФайлаНастроекОбъединения/ПодготовкаФайлаНастроекОбъединения.zip #### См. также - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) - [#std763: Форматирование даты, числа, Булево: требования по локализации](https://v8std.ru/std/763/) - [#std764: Строковые константные выражения в коде: требования по локализации](https://v8std.ru/std/764/) - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) - [#std767: Регламентные задания: требования по локализации](https://v8std.ru/std/767/) - [#std766: Макеты: требования по локализации](https://v8std.ru/std/766/) #### Источник https://its.1c.ru/db/v8std#content:769 ### std770 - Ограничения на использование Выполнить и Вычислить на сервере #std770 URL: https://v8std.ru/std/770/ Markdown URL: https://v8std.ru/std/770.md Source path: std/770.md Aliases: std770, #std770, std 770, стандарт 770 Related: - diagnostic:acc:486 - diagnostic:acc:487 - diagnostic:acc:488 - diagnostic:acc:489 - diagnostic:acc:490 - diagnostic:bslls:DisableSafeMode - diagnostic:bslls:ExecuteExternalCode - diagnostic:bslls:ExecuteExternalCodeInCommonModule - diagnostic:v8cs:server-execution-safe-mode - standard:std669 - standard:std678 External sources: https://v8.1c.ru/platforma/oblachnye-tehnologii/, https://its.1c.ru/db/v8std#content:770 ID: #std770 # Ограничения на использование Выполнить и Вычислить на сервере #### 1. Опасность представляет не только прямое выполнение кода пользователя, но и выполнение строк, собранных из параметров и переданных в серверные процедуры/функции. Ограничение относится к серверному коду. Если в серверном методе используется `Выполнить` или `Вычислить` для строки из параметров, злоумышленник может подменить эту строку и запустить вредоносный код на сервере. Риск выше, если такой метод доступен из модуля с признаком - [x] `ВызовСервера` #### 2. Перед вызовом `Выполнить`/`Вычислить` в серверном коде включайте безопасный режим. В модели сервиса учитывайте разделение данных: безопасный режим включайте и для разделителей. #### Пример ```bsl УстановитьБезопасныйРежим(Истина); Выполнить Алгоритм; ``` #### Пример (модель сервиса) ```bsl УстановитьБезопасныйРежим(Истина); Для каждого ИмяРазделителя Из РазделителиКонфигурации() Цикл УстановитьБезопасныйРежимРазделенияДанных(ИмяРазделителя, Истина); КонецЦикла; Выполнить Алгоритм; ``` Если используется БСП, применяйте: - `ОбщегоНазначения.ВыполнитьВБезопасномРежиме()` вместо `Выполнить`; - `ОбщегоНазначения.ВычислитьВБезопасномРежиме()` вместо `Вычислить`; - `ОбщегоНазначения.ВыполнитьМетодКонфигурации()` и `ОбщегоНазначения.ВыполнитьМетодОбъекта()` вместо формирования строк вызова. #### Проверки [#v8cs:server-execution-safe-mode](https://v8std.ru/diagnostics/v8-code-style/server-execution-safe-mode/) #### 3. Если код нельзя выполнить в безопасном режиме (например, есть доступ к файлам), запускайте его только после аудита и только из контролируемого источника. Рекомендуемый сценарий: - передать внешний код администратору на аудит; - хранить одобренный код в объекте, доступном на запись только администратору; - выполнять код только через централизованную процедуру/функцию. При использовании БСП для этого применяйте подсистему дополнительных отчетов и обработок. #### 4. Если конфигурация работает в модели сервиса и поддерживает перенос из локальной версии, отключайте пользовательские фрагменты кода и тексты запросов, пришедшие из локальной базы. #### См. также - [#std669: Ограничение на выполнение "внешнего" кода](https://v8std.ru/std/669/) - [#std678: Безопасность прикладного программного интерфейса сервера](https://v8std.ru/std/678/) - [Облачные технологии](https://v8.1c.ru/platforma/oblachnye-tehnologii/) #### Проверки [#bslls:DisableSafeMode](https://v8std.ru/diagnostics/bslls/DisableSafeMode/) [#bslls:ExecuteExternalCodeInCommonModule](https://v8std.ru/diagnostics/bslls/ExecuteExternalCodeInCommonModule/) [#bslls:ExecuteExternalCode](https://v8std.ru/diagnostics/bslls/ExecuteExternalCode/) [#acc:486](https://v8std.ru/diagnostics/acc/486/) [#acc:487](https://v8std.ru/diagnostics/acc/487/) [#acc:488](https://v8std.ru/diagnostics/acc/488/) [#acc:489](https://v8std.ru/diagnostics/acc/489/) [#acc:490](https://v8std.ru/diagnostics/acc/490/) #### Источник https://its.1c.ru/db/v8std#content:770 ### std771 - Интеграция прикладных решений через формат EnterpriseData #std771 URL: https://v8std.ru/std/771/ Markdown URL: https://v8std.ru/std/771.md Source path: std/771.md Aliases: std771, #std771, std 771, стандарт 771 Related: diagnostic:acc:518, diagnostic:acc:519, diagnostic:acc:520 External sources: https://its.1c.ru/db/metod8dev/content/5851/hdoc, https://its.1c.ru/db/v8std#content:771 ID: #std771 # Интеграция прикладных решений через формат EnterpriseData #### 1. Переходы с одной конфигурации на другую разрабатывайте на основе правил конвертации. Обмен между конфигурациями, использующими БСП, выполняйте на основе формата `EnterpriseData`. Новые обмены на основе правил конвертации не разрабатывайте. Исключение: решения для бюджетных организаций, которые не охватываются форматом `EnterpriseData`. #### 2. Актуальные версии `EnterpriseData` берите из последней опубликованной версии БСП. Они поставляются в виде объектов метаданных `Пакет XDTO` с именами вида `EnterpriseData_{X|XX}_{Y|YY}_{Z|ZZ}`, где `X`, `Y` - Major-версия, `Z` - Minor-версия. Список поддерживаемых версий формируется так, чтобы сохранять баланс между: - затратами на поддержку обменов; - совместимостью прикладных решений. Например, версии `1.0` и `1.1` сняты с поддержки, так как интервала `1.2-1.4` достаточно для обмена между широким диапазоном версий прикладных решений. #### 3. При разработке новых версий прикладных решений стремитесь поддерживать в обменах все актуальные версии `EnterpriseData`. Это обеспечивает асинхронный выпуск версий у разработчиков и асинхронный переход пользователей. Запрещается выпускать версию конфигурации, которая не поддерживает какую-либо из версий формата, поддерживаемых во встроенной версии БСП. Например, если в конфигурацию встроена БСП `2.4.1`, необходимо поддерживать версии формата `1.2`, `1.3` и `1.4`. #### 4. Не поддерживайте в обмене версию `EnterpriseData`, если она не соответствует функциональным требованиям обмена. Например, для интеграции двух конфигураций нужен обмен документами `Чек ККМ`. Поддержка передачи этих данных есть только в версии `1.4`, значит в таком обмене поддерживаемые версии формата должны быть не ниже `1.4`. #### 5. В редких случаях обмен между прикладными решениями невозможен из-за отсутствия совместно поддерживаемых версий `EnterpriseData`. Например, когда одна из конфигураций сильно устарела и требует обновления. #### Рекомендация Информируйте пользователей, какие версии `EnterpriseData` поддерживаются в прикладном решении. #### 6. При разработке типовых обменов не используйте свойство объектов формата `AdditionalInfo` для передачи сведений между информационными базами. Чтобы расширить состав свойств формата, вносите согласованные изменения в формат. Это позволяет всем группам разработки типовых конфигураций поддерживать новые возможности синхронизации. `AdditionalInfo` разрешается использовать только в случаях: - поддержки законодательства, когда не остается времени на выпуск новой версии формата; - обхода критических ошибок, блокирующих синхронизацию из-за исключений. #### Для информации Данные, добавленные в `AdditionalInfo`, придется поддерживать длительное время для совместимости с прошлыми версиями. #### См. также - [Обмен данными с прикладными решениями на платформе «1С:Предприятие» в формате EnterpriseData](https://its.1c.ru/db/metod8dev/content/5851/hdoc) #### Проверки [#acc:518](https://v8std.ru/diagnostics/acc/518/) [#acc:519](https://v8std.ru/diagnostics/acc/519/) [#acc:520](https://v8std.ru/diagnostics/acc/520/) #### Источник https://its.1c.ru/db/v8std#content:771 ### std773 - Использование признака ОбменДанными.Загрузка в обработчиках событий объекта #std773 URL: https://v8std.ru/std/773/ Markdown URL: https://v8std.ru/std/773.md Source path: std/773.md Aliases: std773, #std773, std 773, стандарт 773 Related: diagnostic:acc:75, diagnostic:bslls:DataExchangeLoading, diagnostic:v8cs:data-exchange-load, standard:std464, standard:std465, standard:std752, standard:std771 External sources: https://its.1c.ru/db/v8std#content:773 ID: #std773 # Использование признака ОбменДанными.Загрузка в обработчиках событий объекта #### 1. В обработчиках событий `ПередЗаписью`, `ПриЗаписи`, `ПередУдалением` сначала проверяйте признак `ОбменДанными.Загрузка`. ```bsl Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // Код обработчика. ... КонецПроцедуры ``` Это нужно, чтобы при обмене данными бизнес-логика объекта не выполнялась повторно. Объект должен загружаться в базу «как есть»: без дополнительных проверок, изменений и действий, которые могут исказить данные или помешать загрузке. Такой же подход применяйте и в других механизмах загрузки: ```bsl Объект.ОбменДанными.Загрузка = Истина; Объект.Записать(); ``` Если механизм не учитывает особенности конкретной конфигурации, он должен иметь возможность записать объект так, как будто обработчика нет. #### 2. Исключение: обмен, который при загрузке регистрирует изменения для выгрузки на другие узлы плана обмена. Если используется подсистема `Обмен данными` БСП и нужно отключить регистрацию объектов, добавляйте дополнительное свойство `ОтключитьМеханизмРегистрацииОбъектов`: ```bsl Объект.ОбменДанными.Загрузка = Истина; Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); Объект.Записать(); ``` Если в конфигурации есть другие исключения из этого правила, обязательно поясняйте причину в комментарии к коду. #### 3. Требования этого стандарта действуют и для обработчиков подписок на те же события. #### 4. Если вызывающий код устанавливает `ОбменДанными.Загрузка = Истина`, он берет на себя ответственность за целостность данных объекта. Например, в РИБ корректность обеспечивается в том узле, где объект был создан или изменен. В остальных случаях вызывающая сторона должна сама обеспечить корректное заполнение объекта. При загрузке по правилам конвертации или формату `EnterpriseData` выполняйте все необходимые действия по заполнению и дозаполнению объекта. Рекомендуется выносить такие действия в экспортные процедуры самого объекта и вызывать их до записи в режиме обмена. #### См. также - [#std464: Обработчик события ПередЗаписью](https://v8std.ru/std/464/) - [#std465: Обработчик события ПриЗаписи](https://v8std.ru/std/465/) - [#std752: Обработчик события ПередУдалением](https://v8std.ru/std/752/) - [#std771: Формат EnterpriseData](https://v8std.ru/std/771/) #### Проверки [#bslls:DataExchangeLoading](https://v8std.ru/diagnostics/bslls/DataExchangeLoading/) [#v8cs:data-exchange-load](https://v8std.ru/diagnostics/v8-code-style/data-exchange-load/) [#acc:75](https://v8std.ru/diagnostics/acc/75/) #### Источник https://its.1c.ru/db/v8std#content:773 ### std774 - Безопасность запуска приложений #std774 URL: https://v8std.ru/std/774/ Markdown URL: https://v8std.ru/std/774.md Source path: std/774.md Aliases: std774, #std774, std 774, стандарт 774 Related: diagnostic:acc:534, diagnostic:bslls:FileSystemAccess, standard:std770, standard:std775 External sources: https://1c.ru, https://its.1c.ru/db/v8std#content:774 ID: #std774 # Безопасность запуска приложений #### 1. При запуске внешней программы из кода собирайте командную строку только из проверенных частей. Если любая часть команды получена из: - базы данных; - пользовательского ввода в форме; - хранилища настроек, перед запуском проверяйте безопасность значения. Небезопасными считайте строки, содержащие символы: `$` `` ` `` `|` `||` `;` `&` `&&` Требование распространяется на все способы запуска, включая: - `КомандаСистемы()`; - `ЗапуститьПриложение()`; - `НачатьЗапускПриложения()`; - `ПерейтиПоНавигационнойСсылке()`; - COM-объекты `Wscript.Shell` и `Shell.Application`. #### 2. При использовании БСП для запуска внешних программ применяйте профильный API. #### 2.1. Чтобы открыть проводник с фокусом на каталоге/файле, используйте `ФайловаяСистемаКлиент.ОткрытьПроводник`. #### Пример ```bsl // Windows ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Users"); ФайловаяСистемаКлиент.ОткрытьПроводник("C:\Program Files\1cv8\common\1cestart.exe"); // Linux ФайловаяСистемаКлиент.ОткрытьПроводник("/home/"); ФайловаяСистемаКлиент.ОткрытьПроводник("/opt/1C/v8.3/x86_64/1cv8c"); ``` #### 2.2. Чтобы открыть файл в ассоциированной программе, используйте `ФайловаяСистемаКлиент.ОткрытьФайл()`. Метод блокирует запуск исполняемых файлов (`*.exe`, `*.bin`, `*.apk` и т.п.). #### Пример ```bsl ФайловаяСистемаКлиент.ОткрытьФайл(КаталогДокументов() + "test.pdf"); ФайловаяСистемаКлиент.ОткрытьФайл("D:\test.xlsx"); ``` #### 2.3. Чтобы открыть веб-страницу, вызвать программу по протоколу (`mailto:`, `skype:`, `tel:` и т.д.) или открыть навигационную ссылку ИБ, используйте `ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку()`. Для открытия файловой системы не формируйте `file://`-ссылки. Для этого применяйте только `ОткрытьПроводник()` и `ОткрытьФайл()`. #### Пример ```bsl ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://1c.ru"); ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("e1cib/navigationpoint/startpage"); ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("mailto:help@1c.ru"); ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("skype:echo123?call"); ``` #### 2.4. Для запуска исполняемых файлов, системных команд и серверных команд, а также для получения `stdout`/`stderr` используйте: - `ФайловаяСистемаКлиент.ЗапуститьПрограмму()` в клиентском коде; - `ФайловаяСистема.ЗапуститьПрограмму()` в серверном коде. #### Пример ```bsl ФайловаяСистемаКлиент.ЗапуститьПрограмму("calc"); ПараметрыЗапуска = ФайловаяСистема.ПараметрыЗапускаПрограммы(); ПараметрыЗапуска.ДождатьсяЗавершения = Истина; ПараметрыЗапуска.ПолучитьПотокВывода = Истина; ПараметрыЗапуска.ПолучитьПотокОшибок = Истина; Результат = ФайловаяСистема.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыЗапуска); КодВозврата = Результат.КодВозврата; ПотокВывода = Результат.ПотокВывода; ПотокОшибок = Результат.ПотокОшибок; ``` #### 2.5. Не формируйте динамически исполняемые файлы во временном каталоге (например, `bat`-файлы с последующим запуском). Это усложняет политику белых списков и создает дополнительный вектор атаки. Вместо этого: - передавайте команду напрямую в `ФайловаяСистема.ЗапуститьПрограмму()`; - или используйте статический доверенный исполняемый файл и передавайте параметры через аргументы командной строки или неисполняемый файл параметров. #### 3. Если операция требует запуска внешней программы с повышением прав (например, UAC в Windows), реализуйте ее как отдельную команду формы и отображайте на кнопке значок щита. Изображение: Команда с повышением прав (774.img1.png) Изображение: Пример кнопки с щитом (774.img2.png) #### См. также - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) - [#std775: Безопасность программного обеспечения, вызываемого через открытые интерфейсы](https://v8std.ru/std/775/) #### Проверки [#bslls:FileSystemAccess](https://v8std.ru/diagnostics/bslls/FileSystemAccess/) [#acc:534](https://v8std.ru/diagnostics/acc/534/) #### Источник https://its.1c.ru/db/v8std#content:774 ### std775 - Безопасность программного обеспечения, вызываемого через открытые интерфейсы #std775 URL: https://v8std.ru/std/775/ Markdown URL: https://v8std.ru/std/775.md Source path: std/775.md Aliases: std775, #std775, std 775, стандарт 775 Related: diagnostic:acc:536, diagnostic:acc:537 External sources: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-automationsecurity-property-excel?f=255&MSPPError=-2147217396, https://its.1c.ru/db/v8std#content:775 ID: #std775 # Безопасность программного обеспечения, вызываемого через открытые интерфейсы #### 1. При интеграции со сторонними приложениями через открытые интерфейсы (в частности, COM) отключайте исполнение произвольного кода средствами вызываемого приложения. #### 2. Перед программным открытием документов Microsoft Word и Microsoft Excel через COM запрещайте исполнение макросов. Иначе документ может выполнить вредоносный макрос. #### Неправильно ```bsl ОбъектWord = Новый COMОбъект("Word.Application"); Документ = ОбъектWord.Documents.Open(ИмяФайла); ``` #### Правильно (Word) ```bsl ОбъектWord = Новый COMОбъект("Word.Application"); ОбъектWord.WordBasic.DisableAutoMacros(1); Документ = ОбъектWord.Documents.Open(ИмяФайла); ``` #### Правильно (Excel) ```bsl ОбъектExcel = Новый COMОбъект("Excel.Application"); ОбъектExcel.AutomationSecurity = 3; // msoAutomationSecurityForceDisable = 3 Документ = ОбъектExcel.Workbooks.Open(ИмяФайла); ``` #### 3. Если по прикладной задаче требуется разрешать автозапуск макросов, реализуйте явные настройки безопасности. Настройки делайте отдельно для клиентского и серверного кода. Варианты настроек: - `Запретить автоматический запуск`; - `Разрешить запуск подписанных макросов (рекомендуется)` (по умолчанию); - `Разрешить запуск не подписанных макросов (опасно)`. Требования к форме клиентских настроек: - доступна каждому пользователю; - настройки хранятся в разрезе пользователей; - каждый пользователь видит только свои настройки. Требования к форме серверных настроек: - доступна только администратору; - изменяется только администратором. При программном открытии документов всегда учитывайте выбранные настройки. #### 3.1. Проверку подписи макросов в документах Microsoft Word можно реализовать так: #### Пример (Word) ```bsl ОбъектWord = Новый COMОбъект("Word.Application"); ОбъектWord.WordBasic.DisableAutoMacros(1); // Отключить автозапуск Документ = ОбъектWord.Documents.Open(ФайлДокумента); Если Документ.VBASigned Тогда ОбъектWord.WordBasic.DisableAutoMacros(0); // Включить автозапуск Документ.RunAutoMacro(2); // wdAutoOpen = 2 Иначе Документ.Close(); ВызватьИсключение НСтр("ru = 'Документ не подписан. Открытие отменено.'"); КонецЕсли; ``` #### 3.2. Проверку подписи макросов в документах Microsoft Excel можно реализовать так: #### Пример (Excel) ```bsl ОбъектExcel = Новый COMОбъект("Excel.Application"); ИсходныйУровеньБезопасности = ОбъектExcel.AutomationSecurity; ОбъектExcel.AutomationSecurity = 3; // msoAutomationSecurityForceDisable = 3 Документ = ОбъектExcel.Workbooks.Open(ФайлДокумента); ОбъектExcel.AutomationSecurity = ИсходныйУровеньБезопасности; Если Документ.VBASigned Тогда Документ.Close(); Документ = ОбъектExcel.Workbooks.Open(ФайлДокумента); Иначе Документ.Close(); ВызватьИсключение НСтр("ru = 'Документ не подписан. Открытие отменено.'"); КонецЕсли; ``` #### См. также - [О параметрах исполнения макросов в Microsoft Excel](https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-automationsecurity-property-excel?f=255&MSPPError=-2147217396) #### Проверки [#acc:536](https://v8std.ru/diagnostics/acc/536/) [#acc:537](https://v8std.ru/diagnostics/acc/537/) #### Источник https://its.1c.ru/db/v8std#content:775 ### std777 - Использование временных таблиц #std777 URL: https://v8std.ru/std/777/ Markdown URL: https://v8std.ru/std/777.md Source path: std/777.md Aliases: std777, #std777, std 777, стандарт 777 Related: standard:std652, standard:std655, standard:std656 External sources: https://its.1c.ru/db/v8std#content:777 ID: #std777 # Использование временных таблиц #### 1. В общем случае временные таблицы рекомендуется использовать для повышения производительности и стабильности запросов. Их можно применять и для других целей (например, для улучшения архитектуры кода), но это в некоторых сценариях может снижать производительность. #### 2. Есть ситуации, когда временные таблицы не следует создавать или их создание нужно минимизировать. #### 2.1. Не следует создавать временные таблицы с очень большим объемом данных (сотни тысяч записей). Это может приводить к существенному замедлению при записи и к исчерпанию свободного места на диске. Если алгоритму нужен большой объем данных, обработку следует выполнять порциями. #### 2.2. Максимально ограничивайте объем данных, выбираемых во временную таблицу: помещайте только то, что действительно нужно последующим запросам. #### 2.3. Не помещайте во временную таблицу поля, которые не используются в следующих запросах: это лишние затраты времени и места. #### 2.4. Не создавайте и не удаляйте временные таблицы в цикле, если можно создать одну таблицу до цикла. #### 2.5. Не копируйте одну временную таблицу в другую только ради переименования. Вместо этого передавайте имя таблицы. #### 3. Временные таблицы следует индексировать, когда это дает прирост производительности. #### 3.1. Индекс следует строить в случаях: #### 3.1.1. Большая временная таблица участвует в соединении (с любой стороны). В индекс включайте поля, используемые в условии `ПО`. #### 3.1.2. Есть обращение к временной таблице в подзапросе конструкции логического оператора `В (...)`. В индекс включайте поля временной таблицы из списка выбора, соответствующие полям слева от `В (...)`. См. также: [#std652: Несоответствие индексов и условий запроса](https://v8std.ru/std/652/) #### 3.2. Маленькие временные таблицы (менее 1000 записей) индексировать не нужно. #### 3.3. Если условий выборки/соединения с временной таблицей несколько, и часто проверяется только одно из них, индекс следует строить по наиболее часто проверяемому условию. #### См. также - [#std656: Ограничения на использование вложенных запросов в условии соединения](https://v8std.ru/std/656/) - [#std655: Ограничения на соединения с вложенными запросами и виртуальными таблицами](https://v8std.ru/std/655/) #### Источник https://its.1c.ru/db/v8std#content:777 ### std778 - Денежные поля: требования по локализации #std778 URL: https://v8std.ru/std/778/ Markdown URL: https://v8std.ru/std/778.md Source path: std/778.md Aliases: std778, #std778, std 778, стандарт 778 Related: standard:std535 External sources: https://its.1c.ru/db/v8std#content:778 ID: #std778 # Денежные поля: требования по локализации #### 1. Чтобы конфигурация корректно работала в странах с низким курсом национальной валюты, увеличивайте разрядность целой части числовых полей с денежным эквивалентом. Примеры денежных полей: `Сумма`, `Цена`, `Себестоимость`. В метаданных: - для денежных полей, где возможны только положительные значения, вместо фиксированного типа `Число(15,2)` используйте определяемый тип `ДенежнаяСуммаНеотрицательная`; - для денежных полей, где возможны отрицательные значения, используйте тип `ДенежнаяСуммаЛюбогоЗнака` со снятым флагом `Неотрицательное`. Если определяемый тип указать нельзя (например, для параметра формы или в составном типе), задавайте `Число(31,2)`. В отдельных случаях эту длину нужно уменьшать из-за ограничений СУБД, например в ресурсах регистров. #### 2. Если используется БСП, не применяйте конструктор типа `Число` для описания типа денежного поля. Используйте функцию, которая возвращает описание на основе определяемого типа. #### Неправильно ```bsl ОписаниеТиповСумма = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)); ``` #### Правильно ```bsl ОписаниеТиповСумма = РаботаСКурсамиВалют.ОписаниеТипаДенежногоПоля(); ``` #### 3. При [#std535: использовании `ВЫРАЗИТЬ` в запросах](https://v8std.ru/std/535/) для денежных полей применяйте приведение к типу `ЧИСЛО(31,2)` Так поддерживается максимальная длина целой части 29. Ограничение на 29 связано с поддержкой сервера DB2. #### Неправильно ```sdbl ВЫРАЗИТЬ(Т.Сумма / Т.Количество КАК ЧИСЛО(15,2)) ``` #### Правильно ```sdbl ВЫРАЗИТЬ(Т.Сумма / Т.Количество КАК ЧИСЛО(31,2)) ``` #### 4. При использовании функции `Формат`, а также при задании формата в свойствах элементов формы, полей наборов СКД и т.п. не задавайте общую длину числа. #### Неправильно ```bsl Формат(Выборка.СуммаДокумента, "ЧЦ=15; ЧДЦ=2") ``` #### Правильно ```bsl Формат(Выборка.СуммаДокумента, "ЧДЦ=2") ``` #### Неправильно Изображение: Формат с заданной общей длиной (778.1.png) #### Правильно Изображение: Формат без общей длины (778.2.png) #### Источник https://its.1c.ru/db/v8std#content:778 ### std781 - Особенности сортировки в таблице значений #std781 URL: https://v8std.ru/std/781/ Markdown URL: https://v8std.ru/std/781.md Source path: std/781.md Aliases: std781, #std781, std 781, стандарт 781 Related: standard:std412 External sources: https://its.1c.ru/db/v8std#content:781 ID: #std781 # Особенности сортировки в таблице значений #### 1. Если таблица значений сортируется по колонкам со ссылочными значениями, учитывайте: для каждой такой колонки по всем строкам система получает представление ссылки из информационной базы. Поэтому рекомендуется: - если нужна сортировка по наименованию, заранее добавлять в таблицу отдельные колонки с представлениями и сортировать по ним; - в остальных случаях сортировать по ссылке, а не по представлению. Для этого в метод `Сортировать()` передавайте объект `СравнениеЗначений`. ```bsl ОбъектСравнения = Новый СравнениеЗначений; ТаблицаДокументов.Сортировать("Дата,Ссылка", ОбъектСравнения); ``` Это особенно важно для таблиц с сотнями и тысячами строк, когда алгоритм критичен ко времени выполнения. #### См. также - [#std412: Упорядочивание результатов запроса](https://v8std.ru/std/412/) #### Источник https://its.1c.ru/db/v8std#content:781 ### std782 - Массовая конкатенация строк #std782 URL: https://v8std.ru/std/782/ Markdown URL: https://v8std.ru/std/782.md Source path: std/782.md Aliases: std782, #std782, std 782, стандарт 782 Related: standard:std437 External sources: https://its.1c.ru/db/v8std#content:782 ID: #std782 # Массовая конкатенация строк #### 1. При массовых операциях конкатенации строк используйте методы платформы `СтрРазделить()` и `СтрСоединить()`. #### Неправильно ```bsl Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл ИзвлеченныйТекст = ИзвлеченныйТекст + Символы.ПС + ТекстОбласти; … ``` #### Правильно ```bsl ИзвлеченныеТексты = Новый Массив; Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл ИзвлеченныеТексты.Добавить(ТекстОбласти); … ИзвлеченныйТекст = СтрСоединить(ИзвлеченныеТексты, Символы.ПС); ``` Такой подход обычно быстрее и снижает потребление оперативной памяти. Ориентир для «массовых» операций: `1000 конкатенаций и более`. При увеличении длины строк порог может быть ниже. Особенно внимательно проверяйте конкатенацию в циклах и универсальных механизмах, работающих на больших объемах данных. В остальных случаях отказываться от обычной конкатенации не нужно: она повышает читаемость кода. #### См. также - [#std437: Оформление текстов запросов, раздел «Конкатенация нескольких текстов запросов в пакет»](https://v8std.ru/std/437/) #### Источник https://its.1c.ru/db/v8std#content:782 ### std783 - Транзакции: правила использования #std783 URL: https://v8std.ru/std/783/ Markdown URL: https://v8std.ru/std/783.md Source path: std/783.md Aliases: std783, #std783, std 783, стандарт 783 Related: - diagnostic:acc:1319 - diagnostic:acc:1320 - diagnostic:acc:325 - diagnostic:acc:326 - diagnostic:acc:327 - diagnostic:acc:328 - diagnostic:acc:329 - diagnostic:acc:330 - diagnostic:acc:331 - diagnostic:acc:332 - diagnostic:acc:415 - diagnostic:acc:478 - diagnostic:acc:521 - diagnostic:bslls:PairingBrokenTransaction - diagnostic:bslls:WrongUseOfRollbackTransactionMethod - diagnostic:v8cs:begin-transaction - diagnostic:v8cs:commit-transaction - diagnostic:v8cs:lock-out-of-try - diagnostic:v8cs:rollback-transaction - standard:std463 - standard:std648 External sources: - https://its.1c.ru/db/metod8dev/content/2334 - https://its.1c.ru/db/metod8dev/content/2313 - https://its.1c.ru/db/v8std#content:783 - https://its.1c.ru/db/v83doc/bookmark/dev/TI000000527 - https://its.1c.ru/db/v83doc#bookmark:dev:TI000000529 - https://www.youtube.com/watch?v=egJOPTDAgUQ - https://wonderland.v8.1c.ru/blog/razvitie-mekhanizma-otobrazheniya-oshibok/ - https://its.1c.ru/db/metod8dev/content/2274/hdoc ID: #std783 # Транзакции: правила использования Транзакция - это действие, которое может быть выполнено только целиком. Если часть действия не выполнена - все действие отменяется. #### 1. Ошибка `В этой транзакции уже происходили ошибки` возникает из-за несоблюдения требований к написанию кода. Такие ошибки сложно воспроизводить и отлаживать их исправление. Особенности работы с транзакциями в платформе: - Не поддерживаются вложенные транзакции ([Вложенность транзакций](https://its.1c.ru/db/metod8dev/content/2334)). - Если в транзакции возникло исключение транзакция может не завершится, даже если перехватить это исключение [Ошибки базы данных и транзакции](https://its.1c.ru/db/metod8dev/content/2313), [Особенности работы объектов при отмене транзакции](https://its.1c.ru/db/v8std#content:783). - Платформа может начинать транзакции сама. Это называется неявные транзакции. [Глава 9.2. Механизм транзакций](https://its.1c.ru/db/v83doc/bookmark/dev/TI000000527). #### 1.1. Исключение не отменяет транзакцию. Оно взводит служебный флажок транзакции `Запрет успешного завершения`. Реальная отмена произойдет тогда, когда код дойдет до функции `ЗафиксироватьТранзакцию` или `ОтменитьТранзакцию`. Для каждого метода `НачатьТранзакцию` должны быть парные методы `ЗафиксироватьТранзакцию` и `ОтменитьТранзакцию`. #### В стандарте не указано О том что такое флажки транзакции и как работает платформа смотрите в: - Профессиональная разработка в системе 1С Предприятие, Том 1, стр 107-108 - [Ошибки базы данных и транзакции](https://its.1c.ru/db/metod8dev/content/2313). - [Глава 9.2.3. Вложенный вызов транзакций](https://its.1c.ru/db/v83doc#bookmark:dev:TI000000529) - [ YouTube: Транзакции и блокировки: как их готовить программисту 1С?](https://www.youtube.com/watch?v=egJOPTDAgUQ) #### 1.2. Начало транзакции и ее завершение (фиксацию) выполняйте в одном методе. Не должно быть разнесения начала и конца на несколько функций. Тот, кто будет расследовать ошибку, скажет спасибо! #### Неправильно ```bsl Процедура ЗаписатьДанныеВИБ() НачатьТранзакцию(); ЗаписатьДокумент(); КонецПроцедуры; Процедура ЗаписатьДокумент() Попытка ... // чтение или запись данных ДокументОбъект.Записать() ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ... // дополнительные действия по обработке исключения КонецПопытки; КонецПроцедуры ``` #### Правильно ```bsl Процедура ЗаписатьДанныеВИБ() НачатьТранзакцию(); Попытка ... // чтение или запись данных ДокументОбъект.Записать() ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ... // дополнительные действия по обработке исключения КонецПопытки; КонецПроцедуры ``` #### 1.3. Используйте следующий паттерн для работы с транзакциями: #### Паттерн ```bsl НачатьТранзакцию(); // (1) Попытка БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Документ.ПриходнаяНакладная"); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", СсылкаДляОбработки); ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаДанных.Заблокировать(); ... // чтение или запись данных (2) ДокументОбъект.Записать(); ЗафиксироватьТранзакцию(); // (3) Исключение ОтменитьТранзакцию(); // (4) ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), // (5) УровеньЖурналаРегистрации.Ошибка, , , ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; // (6) КонецПопытки; ``` 1. Метод `НачатьТранзакцию` должен быть вне блока `Попытка-Исключение` перед оператором `Попытка` и ничего между ними; 2. Все действия, выполняемые после метода `НачатьТранзакцию`, должны находиться в одном блоке `Попытка`, в том числе чтение, блокировка и обработка данных; 3. Метод `ЗафиксироватьТранзакцию` должен идти последним в блоке `Попытка` перед оператором `Исключение`, чтобы гарантировать, что после `ЗафиксироватьТранзакцию` не возникнет исключение; 4. До обработки исключений в блоке `Исключение` сначала вызовите метод `ОтменитьТранзакцию`, а затем выполняйте другие действия, если они требуются; 5. В блоке `Исключение` делайте запись в журнал регистрации; 6. В конце блока `Исключение` добавляйте оператор `ВызватьИсключение`. В противном случае исключение не будет передано выше по стеку вызовов, там не сработает обработка исключения, внешняя транзакция не будет отменена и платформа вызовет исключение `В данной транзакции происходила ошибка`. #### Проверки [#v8cs:begin-transaction](https://v8std.ru/diagnostics/v8-code-style/begin-transaction/) [#v8cs:commit-transaction](https://v8std.ru/diagnostics/v8-code-style/commit-transaction/) [#v8cs:lock-out-of-try](https://v8std.ru/diagnostics/v8-code-style/lock-out-of-try/) [#v8cs:rollback-transaction](https://v8std.ru/diagnostics/v8-code-style/rollback-transaction/) #### Проверки [#bslls:WrongUseOfRollbackTransactionMethod](https://v8std.ru/diagnostics/bslls/WrongUseOfRollbackTransactionMethod/) #### 1.4. Если можно избежать использования вложенных транзакций - постарайтесь избежать. #### 1.4.1. Не вызывайте `НачатьТранзакцию` если кроме записи объекта других действий не требуется. Платформа сделает все неявно сама, а читать код станет сложнее. Избегайте открытия транзакции, если не требуется ответственное чтение данных [#std648: Ответственное чтение данных](https://v8std.ru/std/648/) Например, при записи нового объекта или набора записей регистра обычно ответственное чтение не требуется. При вызове методов `ПолучитьОбъект` (или `Прочитать` для наборов записей) анализируйте должно ли происходить чтение ответственно. Если не должно - не вызывайте `НачатьТранзакцию`. #### Неправильно ```bsl НачатьТранзакцию(); Попытка ДокументОбъект = Документы.ПриходнаяНакладная.СоздатьДокумент(); ... // действия по заполнению объекта ДокументОбъект.Записать(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); КонецПопытки; ``` #### Правильно ```bsl Попытка ДокументОбъект = Документы.ПриходнаяНакладная.СоздатьДокумент(); ... // действия по заполнению объекта ДокументОбъект.Записать(); Исключение ... // действия по обработке исключения КонецПопытки; ``` #### 1.4.2. Если вы разрабатываете метод, который предназначен только для вызова из событий `ПередЗаписью`, `ОбработкаПроведения` и т.п., не открывайте внутри метода транзакций. Они гарантированно будут вложенными. #### В стандарте не указано Имеет смысл добавить проверку, гарантирующую, что метод выполняется внутри транзакции, или описать это формально в описании к методу. ```bsl Если Не ТранзакцияАктивна() Тогда ВызватьИсключение НСтр("ru = 'Метод предназначен для вызова внутри транзакции.'"); КонецЕсли; ``` #### 1.4.3. Для детализации сообщений об ошибках предусмотрите свою обработку исключений. Так текст исключений можно сделать понятнее. #### В стандарте не указано С развитием [механизма отображения ошибок](https://wonderland.v8.1c.ru/blog/razvitie-mekhanizma-otobrazheniya-oshibok/) скорее всего подход будет изменен. #### 1.4.4. Не обращайтесь к базе данных, пока активна транзакция, в которой возникло исключение. Это приведет к ошибке вида `В этой транзакции уже происходили ошибки`. Помните о неявных обращениях, например для получения представления ссылки. #### 2. Не делайте транзакции длинными. #### 2.1. Выполняйте вместе только неделимые операции с точки зрения бизнес-логики. #### Например При проведении документа записывается документ и его движения в регистрах. Если не прошла запись хотя бы в один регистр вся операция проведения должна быть отменена. #### 2.1.1. Не объединяйте в одну транзакцию такие действия, которые с точки зрения бизнес-логики могут быть выполнены раздельно. #### 2.1.2. Исключения: - Обработать несколько несвязных объектов вместе можно для оптимизации скорости работы. - Надо правильно подобрать порции. - Стремиться достигнуть золотую середину между длительностью одной транзакции и объемом фиксируемых данных с одной стороны и количеством транзакций с другой стороны. #### 2.2. Избегайте транзакций, которые выполняются долго. #### Неправильно При загрузке адресного классификатора записывать все данные, относящиеся к одной версии классификатора в одной транзакции. В случае ошибки откатить целиком загружаемую версию классификатора. Данных по одной версии классификатора много (объем около 1 Гб). Для выполнения такой транзакции, - может не хватить оперативной памяти (особенно при использовании файловой информационной базы на 32-разрядной ОС) - такая операция будет выполняться достаточно долго и ее не получится оптимизировать за счет выполнения в несколько потоков #### Правильно Разбить загрузку новой версии классификатора на небольшие транзакции и реализовать функциональность по откату к предыдущей версии в случае ошибки. - См. [Особенности использования транзакций при обмене данными](https://its.1c.ru/db/metod8dev/content/2274/hdoc) #### 2.2.1. Чем дольше выполняется транзакция, тем большее время будут заняты ресурсы сервера и СУБД. Долгий захват ресурсов снизит эффективность работы системы: - журнал транзакций: в него пишутся все изменения в базе данных, выполненные в транзакции, чтобы их правильно отменить; - блокировки, установленные внутри транзакции, будут действовать до конца транзакции; - на сервере блокировки занимают оперативную память; - другие ресурсы, необходимые бизнес-логике, которая выполняет транзакцию. #### 2.2.2. Если транзакция пересеклась по блокировкам с другой транзакцией, она будет ждать возможности установить блокировку. Время ожидания по умолчанию - 20 секунд. Когда время ожидания истекло, транзакция будет завершена с исключением `Превышено время ожидания установки блокировки`. Поэтому длинные транзакции снижают удобство параллельной работы нескольких пользователей. Проведите анализ, обращая внимание на следующее: - возможно, какие-то действия можно вынести за транзакцию [2.1.1](https://v8std.ru/std/783/#211) - постарайтесь оптимизировать алгоритм выполнения действия; - проанализируйте оптимальность устанавливаемых блокировок #### 2.3. Выполняйте вместе только неделимые операции с точки зрения бизнес-логики. #### В стандарте не указано Дополняет [2.1.](https://v8std.ru/std/783/#21) - сложные, ресурсоемкие расчеты нужно стремиться делать до начала транзакции, если это позволяет бизнес-логика; - если расчет должен выполняться в транзакции, то нужно стремиться сделать его как можно более простым; #### Например Контроль остатков можно делать уже после записи простым запросом к записываемому регистру; - проверка заполнения объекта должна делаться вне транзакции (см. [#std463: Проверки, выполняемые в и вне транзакции записи объекта](https://v8std.ru/std/463/)) - запросы, перед выполнением которых не нужно устанавливать блокировку данных, нужно стремиться выполнять до начала транзакции (см. [#std648: Ответственное чтение данных](https://v8std.ru/std/648/)) - запросы, выполняемые в рамках транзакций нужно стремиться оптимизировать (см. группу стандартов Оптимизация запросов) #### 3. Операции, в которых отключаются итоги регистра, выполняйте в транзакции. #### 3.1. Если для ускорения записи в регистр вы отключаете итоги, саму запись вместе с отключением и последующим включением итогов обязательно оборачивайте в транзакцию. Иначе в других сеансах возможны ошибки при получении среза последних. #### Неправильно ```bsl РегистрыСведений.КурсыВалют.УстановитьИспользованиеИтогов(Ложь); НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(ВалютаСсылка); НаборЗаписей.Загрузить(ТаблицаКурсов); НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(); РегистрыСведений.КурсыВалют.УстановитьИспользованиеИтогов(Истина); РегистрыСведений.КурсыВалют.ПересчитатьИтоги(); ``` #### Правильно ```bsl НачатьТранзакцию(); Попытка РегистрыСведений.КурсыВалют.УстановитьИспользованиеИтогов(Ложь); НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Валюта.Установить(ВалютаСсылка); НаборЗаписей.Загрузить(ТаблицаКурсов); НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(); РегистрыСведений.КурсыВалют.УстановитьИспользованиеИтогов(Истина); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; РегистрыСведений.КурсыВалют.ПересчитатьИтоги(); ``` #### Проверки [#bslls:PairingBrokenTransaction](https://v8std.ru/diagnostics/bslls/PairingBrokenTransaction/) [#acc:325](https://v8std.ru/diagnostics/acc/325/) [#acc:326](https://v8std.ru/diagnostics/acc/326/) [#acc:327](https://v8std.ru/diagnostics/acc/327/) [#acc:328](https://v8std.ru/diagnostics/acc/328/) [#acc:329](https://v8std.ru/diagnostics/acc/329/) [#acc:330](https://v8std.ru/diagnostics/acc/330/) [#acc:331](https://v8std.ru/diagnostics/acc/331/) [#acc:332](https://v8std.ru/diagnostics/acc/332/) [#acc:415](https://v8std.ru/diagnostics/acc/415/) [#acc:478](https://v8std.ru/diagnostics/acc/478/) [#acc:521](https://v8std.ru/diagnostics/acc/521/) [#acc:1319](https://v8std.ru/diagnostics/acc/1319/) [#acc:1320](https://v8std.ru/diagnostics/acc/1320/) #### Источник https://its.1c.ru/db/v8std#content:783 ### std784 - Автогенерированные данные в информационной базе: требования по локализации #std784 URL: https://v8std.ru/std/784/ Markdown URL: https://v8std.ru/std/784.md Source path: std/784.md Aliases: std784, #std784, std 784, стандарт 784 Related: - diagnostic:acc:1385 - diagnostic:acc:152 - diagnostic:acc:153 - diagnostic:acc:154 - diagnostic:acc:156 - diagnostic:acc:157 - diagnostic:acc:161 - diagnostic:acc:370 - diagnostic:acc:371 - standard:std498 - standard:std690 External sources: https://its.1c.ru/db/bspdoc, https://its.1c.ru/db/v8std#content:784 ID: #std784 # Автогенерированные данные в информационной базе: требования по локализации #### 1. Автогенерируемые строки, которые программно записываются в информационную базу и выводятся пользователям, формируйте не на языке текущего пользователя, а на языке информационной базы. Это относится, например, к: - начальному заполнению базы из макета; - автогенерации комментария к проводке; - определению значения параметра `ИмяСобытия` метода [#std498: ЗаписьЖурналаРегистрации](https://v8std.ru/std/498/) Иначе один и тот же объект может получить разные строковые данные при работе пользователей с разными языками интерфейса. Такие места в коде рекомендуется сопровождать комментарием, что строка является данными, а не интерфейсным текстом. #### Неправильно ```bsl Комментарий = НСтр("ru = 'Комментарий к проводке'"); ``` #### Правильно ```bsl Комментарий = НСтр("ru = 'Комментарий к проводке'", КодОсновногоЯзыка); // строка записывается в ИБ ``` `КодОсновногоЯзыка` это код языка хранения данных в ИБ. Он выбирается при первом запуске из языков интерфейса конфигурации и сохраняется в константе `ОсновнойЯзык`. При использовании БСП код языка хранения данных получайте через `ОбщегоНазначения.КодОсновногоЯзыка()`. ```bsl Комментарий = НСтр("ru = 'Комментарий к проводке'", ОбщегоНазначения.КодОсновногоЯзыка()); // строка записывается в ИБ ``` #### 2. Это же требование действует для обработчиков начального заполнения, которые заполняют строковые реквизиты предопределенных элементов справочников, ПВХ и т.п. #### Правильно ```bsl Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); Обработчик.НачальноеЗаполнение = Истина; Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьНаименованиеПредопределенныхГруппПользователей"; КонецПроцедуры Процедура ЗаполнитьНаименованиеПредопределенныхГруппПользователей() Экспорт ГруппаПользователей = Справочники.ГруппыПользователей.ВсеПользователи.ПолучитьОбъект(); ГруппаПользователей.Наименование = НСтр("ru='Все пользователи'", КодОсновногоЯзыка); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаПользователей); КонецПроцедуры ``` При добавлении новых предопределенных элементов создавайте новый обработчик начального заполнения с указанием версии или дополняйте существующий. См. стандарт [#std690: Обработчики обновления информационной базы](https://v8std.ru/std/690/) Если используется БСП, не создавайте собственные обработчики начального заполнения. Первоначальные данные размещайте в процедуре `ПриНачальномЗаполненииЭлементов` модуля менеджера объекта. Для объектов, зарегистрированных в `ОбновлениеИнформационнойБазыПереопределяемый.ПриОпределенииНастроек`, эти процедуры вызываются автоматически. При добавлении нового или изменении существующего элемента создавайте обработчик обновления перехода на версию и дублируйте изменения в `ПриНачальномЗаполненииЭлементов` модуля менеджера. Подробнее: [документация к БСП](https://its.1c.ru/db/bspdoc). #### Проверки [#acc:152](https://v8std.ru/diagnostics/acc/152/) [#acc:153](https://v8std.ru/diagnostics/acc/153/) [#acc:154](https://v8std.ru/diagnostics/acc/154/) [#acc:156](https://v8std.ru/diagnostics/acc/156/) [#acc:157](https://v8std.ru/diagnostics/acc/157/) [#acc:161](https://v8std.ru/diagnostics/acc/161/) [#acc:370](https://v8std.ru/diagnostics/acc/370/) [#acc:371](https://v8std.ru/diagnostics/acc/371/) [#acc:1385](https://v8std.ru/diagnostics/acc/1385/) #### Источник https://its.1c.ru/db/v8std#content:784 ### std785 - Версия платформы 1С:Предприятие для разработки #std785 URL: https://v8std.ru/std/785/ Markdown URL: https://v8std.ru/std/785.md Source path: std/785.md Aliases: std785, #std785, std 785, стандарт 785 Related: нет External sources: http://online.1c.ru/catalog/files/13352/, https://solutions.1c.ru/news/314012/, https://its.1c.ru/db/v8std#content:785 ID: #std785 # Версия платформы 1С:Предприятие для разработки #### 1. Минимальная версия платформы, на которой обеспечивается работа прикладного решения, устанавливается: - не выше версии платформы, на которой основан последний сертифицированный релиз платформы, для прикладных решений государственных учреждений, оборонных предприятий и корпоративных клиентов, а также для библиотек, которые потенциально могут входить в такие решения; - на усмотрение ответственных за конфигурацию для остальных прикладных решений. Для решений из первой группы ориентируйтесь на последний сертифицированный релиз 1С:Предприятие 8.3z. Номер релиза и версия платформы, принимаемая как минимальная, публикуются на [странице 1С:Предприятие 8.3z](http://online.1c.ru/catalog/files/13352/). См. также [защищенный программный комплекс 1С:Предприятие 8.3z](https://solutions.1c.ru/news/314012/). #### Пример Если прикладное решение для государственных учреждений выпускается на версии платформы 1С:Предприятие 8.3.15 в режиме совместимости с 8.3.14, и последний сертифицированный релиз 8.3.14.2032 основан на версии 8.3.14.1976, то минимальной версией платформы должна быть 8.3.14.1976. #### 1.1. Если ошибку нельзя обойти на уровне прикладного решения, минимальную версию платформы можно увеличить. Для решений государственных учреждений при этом новый релиз платформы должен быть сертифицирован в короткие сроки. #### 1.2. В исправительных релизах библиотек нельзя увеличивать минимальную версию платформы. Такое решение принимают отдельно для каждого прикладного решения с учетом всех последствий. #### 2. Рекомендуемая версия платформы устанавливается: - в прикладных конфигурациях на усмотрение ответственного за конфигурацию; ориентир — последний опубликованный релиз платформы, на котором ведутся разработка и тестирование; - в исправительных релизах библиотек не повышается, так как решение должно приниматься с учетом последствий для каждого прикладного решения. #### Пример Прикладное решение выпускается на минимальной версии платформы 1С:Предприятие 8.3.14. В качестве рекомендуемой версии указывается последний опубликованный релиз 8.3.15, если в нем улучшены функции, важные для пользователей. В прикладных решениях для государственных учреждений, оборонных предприятий и корпоративных клиентов рекомендуемая версия может быть выше версии, на которой основан последний сертифицированный релиз. В этом случае пользователи могут продолжать работу на текущем сертифицированном релизе и одновременно получают рекомендацию по обновлению. #### 3. Запуск на платформе ниже минимальной версии блокируется средствами БСП. Минимальная и рекомендуемая версии задаются в процедуре `ПриОпределенииОбщихПараметровБазовойФункциональности` общего модуля `ОбщегоНазначенияПереопределяемый`. Минимальная и рекомендуемая версии также указываются в файле `readme.txt` из состава дистрибутива. #### Пример для readme.txt Минимальная версия платформы 1С:Предприятие для использования конфигурации: 8.3.14.1976. Рекомендуемая версия платформы: 8.3.15.1700 (или больше). #### Источник https://its.1c.ru/db/v8std#content:785 ### std787 - Вычисление количества записей в запросах #std787 URL: https://v8std.ru/std/787/ Markdown URL: https://v8std.ru/std/787.md Source path: std/787.md Aliases: std787, #std787, std 787, стандарт 787 Related: standard:std535 External sources: https://its.1c.ru/db/v8std#content:787 ID: #std787 # Вычисление количества записей в запросах #### 1. При вычислении количества записей в запросе всегда используйте функцию `КОЛИЧЕСТВО`, а не `СУММА`. Иначе при количестве записей 10 млн и более возможно переполнение, связанное с разрядностью чисел по умолчанию, используемых СУБД платформой 1С:Предприятие. #### Правильно ```sdbl КОЛИЧЕСТВО(*) КОЛИЧЕСТВО(<Поле>) ``` #### Неправильно ```sdbl СУММА(1) ЕСТЬNULL(СУММА(1), 0) ``` #### 2. Если количество нужно вычислять условно и `КОЛИЧЕСТВО` применить нельзя, расширяйте разрядность числа по умолчанию через `ВЫРАЗИТЬ` (например, до 17 разрядов). #### Правильно ```sdbl ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Количество, СУММА(ВЫБОР КОГДА Номенклатура.ЭтоГруппа ТОГДА ВЫРАЗИТЬ(1 КАК ЧИСЛО(17, 0)) ИНАЧЕ 0 КОНЕЦ) КАК КоличествоГрупп, СУММА(ВЫБОР КОГДА НЕ Номенклатура.ЭтоГруппа ТОГДА ВЫРАЗИТЬ(1 КАК ЧИСЛО(17, 0)) ИНАЧЕ 0 КОНЕЦ) КАК КоличествоЭлементов ИЗ Справочник.Номенклатура КАК Номенклатура ``` #### Неправильно ```sdbl ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Количество, СУММА(ВЫБОР КОГДА Номенклатура.ЭтоГруппа ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК КоличествоГрупп, СУММА(ВЫБОР КОГДА НЕ Номенклатура.ЭтоГруппа ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) КАК КоличествоЭлементов ИЗ Справочник.Номенклатура КАК Номенклатура ``` #### См. также - [#std535: Округление результатов арифметических операций в запросах](https://v8std.ru/std/535/) #### Источник https://its.1c.ru/db/v8std#content:787 ### std790 - Вызов исключений в коде #std790 URL: https://v8std.ru/std/790/ Markdown URL: https://v8std.ru/std/790.md Source path: std/790.md Aliases: std790, #std790, std 790, стандарт 790 Related: нет External sources: https://its.1c.ru/db/v8std#content:790 ID: #std790 # Вызов исключений в коде #### 1. В общем случае исключения в коде вызывать не требуется. При ошибках в выполнении кода исключение формирует платформа, после чего: - пользователю выводится сообщение с рекомендацией; - в журнал регистрации пишется подробная диагностика со стеком вызовов; - при необходимости данные отправляются в сервис регистрации ошибок платформы. #### Пример 1 Исключение платформы с категорией `ОшибкаДоступаКЛокальномуФайлу`. Изображение: Исключение платформы: ошибка доступа к локальному файлу (790.platform-exception-file.png) Запись журнала регистрации с событием `Ошибка выполнения` и комментарием: ```log Ошибка при вызове метода контекста (Открыть) {Обработка.ПримерИсключения.Форма.Форма.Форма(14)}:Текст.Открыть("C:\not_exists_path\doc.txt"); [ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине: Каталог не обнаружен 'C:\not_exists_path\doc.txt' [ОшибкаДоступаКЛокальномуФайлу] ``` #### Пример 2 Исключение платформы с категорией `ПрочаяОшибка`. Изображение: Исключение платформы: прочая ошибка (790.platform-exception-generic.png) Запись журнала регистрации с событием `Ошибка выполнения` и комментарием: ```log Поле объекта не обнаружено (Организация) {Обработка.ПримерИсключения.Форма.Форма.Форма(22)}:Если ЗначениеЗаполнено(Свойства.Организация) Тогда [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка] ``` #### 2. Тем не менее, иногда исключение нужно вызывать программно. Для исключений бизнес-логики, которые выводятся пользователю, категорию ошибки можно не указывать (`ИсключениеВызванноеИзВстроенногоЯзыка`). Для остальных случаев рекомендуется задавать категорию (`ОшибкаРаботыСПринтером`, `ОшибкаСети`, `НарушениеПравДоступа` и т.п.). Тогда пользователь получает не только технический текст, но и типовую рекомендацию по решению. Проверяйте внешний вид исключений без отладки и без режима технического специалиста: поведение окна исключения зависит от режима запуска. #### 2.1. Обычно для проверки прав доступа используйте `ВыполнитьПроверкуПравДоступа`. В редких случаях, когда проверяется наличие конкретной роли, исключение можно вызывать вручную. #### Неправильно ```bsl Если Не РольДоступна("ПодключениеИнтернетПоддержки") Тогда ТекстОшибки = НСтр("ru = 'Недостаточно прав для записи данных аутентификации Интернет-поддержки.'"); ВызватьИсключение ТекстОшибки; КонецЕсли; ``` Сообщение пользователю: Изображение: Сообщение пользователю без категории ошибки (790.message-rights-no-category.png) #### Правильно ```bsl Если Не РольДоступна("ПодключениеИнтернетПоддержки") Тогда ТекстОшибки = НСтр("ru = 'Недостаточно прав для записи данных аутентификации Интернет-поддержки.'"); ДляАдминистратора = НСтр("ru = 'Нет роли:'") + " " + Метаданные.Роли.ПодключениеИнтернетПоддержки.Представление(); ВызватьИсключение(ТекстОшибки, КатегорияОшибки.НарушениеПравДоступа,, ДляАдминистратора); КонецЕсли; ``` Сообщение пользователю: Изображение: Сообщение пользователю с категорией нарушения прав доступа (790.message-rights-with-category.png) #### 2.2. Для диагностики программных ошибок (некорректные параметры, неверно встроенная подсистема и т.п.) используйте категорию `ОшибкаКонфигурации`. Такие ошибки адресованы разработчику, а не пользователю. #### Пример ```bsl Если ТипЗнч(Количество) <> Тип("Число") Тогда ТекстОшибки = НСтр("ru = 'Недопустимое значение параметра'") + " " + "Количество"; ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации); КонецЕсли; ``` Сообщение пользователю: Изображение: Сообщение о непредвиденной ошибке (ОшибкаКонфигурации) (790.message-config-error.png) #### 2.3. Если анализ типа исключения критичен для бизнес-логики, используйте один из подходов: - не вызывать исключения, а возвращать строковые коды ошибок; - анализировать категорию ошибки исключения, вызванного платформой; - вызывать исключение со строковым кодом ошибки (параметр `Код` у `ВызватьИсключение`). Числовые коды ошибок использовать не рекомендуется: их сложнее читать и сопровождать. #### 2.3.1. #### Пример ```bsl РезультатЗагрузки = ЗагрузитьФайлИзИнтернета(...); Если РезультатЗагрузки = "Успешно" Тогда ... ИначеЕсли ... ``` #### 2.3.2. #### Пример ```bsl НомерПопытки = 1; Пока НомерПопытки < 4 Цикл Попытка HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); Если ИнформацияОбОшибке.ЯвляетсяОшибкойКатегории(КатегорияОшибки.ОшибкаСети) Тогда НомерПопытки = НомерПопытки + 1; Продолжить; КонецЕсли; ВызватьИсключение; КонецПопытки; КонецЦикла; ``` #### 2.3.3. #### Пример вызова исключения со строковым кодом ```bsl Если КонфигурацияБазыДанныхИзмененаДинамически() Тогда ВызватьИсключение(НСтр("ru = 'Версия приложения обновлена, требуется перезапустить сеанс.'"),, "СтандартныеПодсистемы.БазоваяФункциональность.КонфигурацияИзмененаДинамически"); КонецЕсли; ``` Для уникальности кода включайте префикс подсистемы, например: - `СтандартныеПодсистемы.БазоваяФункциональность.КонфигурацияИзмененаДинамически`; - `СтандартныеПодсистемы.БазоваяФункциональность.РасширенияИзмененыДинамически`. #### Пример обработки такого исключения ```bsl Попытка ВыполнитьОбновление(); Исключение КодОшибки = ИнформацияОбОшибке().Код; Если КодОшибки = "СтандартныеПодсистемы.БазоваяФункциональность.КонфигурацияИзмененаДинамически" Или КодОшибки = "СтандартныеПодсистемы.БазоваяФункциональность.РасширенияИзмененыДинамически" Тогда ПерезапуститьЗаданиеОбновления(); Возврат; КонецЕсли; ВызватьИсключение; КонецПопытки; ``` Если используется БСП, удобно применять `ОбщегоНазначенияКлиентСервер.ЭтоИсключениеСКодомОшибки()`. Метод рекурсивно ищет коды в цепочке вложенных исключений (`ИнформацияОбОшибке().Причина`). #### Пример с использованием БСП ```bsl Попытка ВыполнитьОбновление(); Исключение Если ОбщегоНазначенияКлиентСервер.ЭтоИсключениеСКодомОшибки(ИнформацияОбОшибке(), "СтандартныеПодсистемы.БазоваяФункциональность.КонфигурацияИзмененаДинамически |СтандартныеПодсистемы.БазоваяФункциональность.РасширенияИзмененыДинамически") Тогда ПерезапуститьЗаданиеОбновления(); Возврат; КонецЕсли; ВызватьИсключение; КонецПопытки; ``` #### 3. Не используйте исключения в обработчиках `ОбработкаПроверкиЗаполнения`, `ОбработкаПроведения`, `ПередЗаписью`, `ПриЗаписи`, `ПередУдалением` и т.п. для обычных блокирующих предупреждений пользователю. Вместо этого устанавливайте `Отказ = Истина` и выводите сообщение. Пользователь должен видеть все блокирующие причины сразу, а не по одной. #### Исключение Если пользователь не может обработать предупреждение в рамках текущей операции или ошибка имеет исключительный характер и делает остальные проверки бессмысленными. ```bsl Процедура ПередЗаписью(Отказ) Если Не ЗарегистрироватьИзмененияНаУзлахПлановОбмена() Тогда ТекстОшибки = НСтр("ru = 'Не удалось зарегистрировать изменения на узлах планов обмена. Обратитесь к администратору.'"); ВызватьИсключение ТекстОшибки; КонецЕсли; ... КонецПроцедуры ``` Подробнее:. #### Источник https://its.1c.ru/db/v8std#content:790 ### std791 - Дополнительные индексы #std791 URL: https://v8std.ru/std/791/ Markdown URL: https://v8std.ru/std/791.md Source path: std/791.md Aliases: std791, #std791, std 791, стандарт 791 Related: нет External sources: - https://its.1c.ru/db/v8326doc#bookmark:dev:TI000002802 - https://its.1c.ru/db/metod8dev#content:1590:hdoc - https://its.1c.ru/db/v8326doc#bookmark:adm:TI000001232 - https://its.1c.ru/db/v8std#content:791 ID: #std791 # Дополнительные индексы **Дополнительный индекс** – это индекс сразу по нескольким полям объекта метаданных. #### 1 Дополнительные индексы доступны только для КОРП платформы. Для ПРОФ платформы использовать не получится. #### 2 При разработке надо тестировать производительность в двух случаях: - доп. индексы включены - доп. индексы выключены Для таблиц до 1 млн записей должно работать быстро без доп. индексов. Для больших таблиц - производительность должна гарантироваться доп. индексами. #### В стандарте не указано Доп. индексы управляются параметром информационной базы `Использовать дополнительные индексы`. Его можно изменить через конфигуратор или программно `УстановитьИспользованиеДополнительныхИндексов()`. Реальное перестроение индекса произойдет при следующем обновлении конфигурации с реструктуризацией или запуском тестирования и исправления в режиме включения КОРП функций. #### 3 Не используйте доп. индексы если можно достичь хорошей производительности без них. #### 4 Не делайте несколько веток кода в зависимости от использования доп. индексов. #### Неправильно ```bsl Если ПолучитьИспользованиеДополнительныхИндексов() Тогда // Особенности при включенных доп. индексах КонецЕсли; ``` #### 4.1 Все, что написано выше, можно игнорировать, потому что если очень хочется, то на небольшом объеме можно и доп. индексы использовать, и делать ветки в коде. #### В стандарте не указано Не понятно зачем нужен этот пункт "подстилка", ведь для того чтобы не исполнить стандарт разрешение стандарта не нужно :) #### 5 Поле в доп. индекс добавляют в двух случаях: - чтобы использовать в условиях запросов - как индексируемое (ключевое) поле - чтобы исключить обращение к таблице - как дополнительное (неключевое) поле #### В стандарте не указано Подход с дополнительными (неключевыми) полями называют **покрывающий индекс**. Его суть в том, что дополнительные данные можно извлечь прям из индекса, и делать обращение к реальной таблице с данными не придется. #### См. также - [Индексы объектов метаданных](https://its.1c.ru/db/v8326doc#bookmark:dev:TI000002802) - [Индексы таблиц базы данных](https://its.1c.ru/db/metod8dev#content:1590:hdoc) - [Серверная лицензия](https://its.1c.ru/db/v8326doc#bookmark:adm:TI000001232) #### Источник https://its.1c.ru/db/v8std#content:791 ### std792 - Многократная запись регистров сведений и накопления #std792 URL: https://v8std.ru/std/792/ Markdown URL: https://v8std.ru/std/792.md Source path: std/792.md Aliases: std792, #std792, std 792, стандарт 792 Related: нет External sources: https://its.1c.ru/db/v8std#content:792 ID: #std792 # Многократная запись регистров сведений и накопления #### 1. Не записывайте наборы записей регистров сведений и накопления в цикле по одной или нескольким записям. Это в несколько раз медленнее, чем запись одним набором. В большинстве сценариев ориентируйтесь на порционную запись наборов примерно по `1000` записей. #### 2. Избегайте перезаписи большого набора, если меняется не более `30%` записей. В этом случае эффективнее записывать только изменения. Перезапись удаляет все записи по отбору и вставляет весь новый набор, включая неизмененные строки. Это обычно медленнее добавления, обновления и удаления только измененных строк. Кроме падения скорости, такой подход избыточно увеличивает журнал транзакций СУБД. #### 3. Для оптимальной записи используйте режимы замещения вместе с вычислением измененных записей. Если нужно только добавить записи в пустой регистр, в методе `Записать` задайте параметру `РежимЗамещения` значение `Ложь`. В остальных случаях применяйте `Слияние`, `Удаление` (с `1С:Предприятие 8.3.26`) и `Обновление` (с `1С:Предприятие 8.3.27`). Эти режимы позволяют обрабатывать записи пакетно, порциями. #### 4. #### 4.1. Состав добавляемых, обновляемых и удаляемых записей уже известен, и его нужно применить к базе. #### Неправильно Наборы записей записываются в цикле: ```bsl Блокировка = Новый БлокировкаДанных(); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПользовательскиеНастройки"); ЭлементБлокировки.УстановитьЗначение("Пользователь", ПользовательСсылка); НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Для Каждого ЗначениеНастройки Из Настройки Цикл УдаляемыеЗаписи = РегистрыСведений.ПользовательскиеНастройки.СоздатьНаборЗаписей(); УдаляемыеЗаписи.Отбор.ИдентификаторКоманды.Установить(ЗначениеНастройки.ИдентификаторКоманды); УдаляемыеЗаписи.Отбор.Пользователь.Установить(ПользовательСсылка); УдаляемыеЗаписи.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки ``` #### Правильно Изменения записываются в регистр одним набором записей: ```bsl Блокировка = Новый БлокировкаДанных(); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ПользовательскиеНастройки"); ЭлементБлокировки.УстановитьЗначение("Пользователь", ПользовательСсылка); НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); УдаляемыеЗаписи = РегистрыСведений.ПользовательскиеНастройки.СоздатьНаборЗаписей(); Для Каждого ЗначениеНастройки Из Настройки Цикл УдаляемаяЗапись = УдаляемыеЗаписи.Добавить(); УдаляемаяЗапись.ИдентификаторКоманды = ЗначениеНастройки.ИдентификаторКоманды; УдаляемаяЗапись.Пользователь = ПользовательСсылка; КонецЦикла; УдаляемыеЗаписи.Записать(РежимЗамещения.Удаление); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки ``` #### 4.2. Заполняется новый реквизит (или ресурс) регистра в отложенном обработчике обновления. Обрабатывается порция зарегистрированных данных: если значение не заполнено, его нужно заполнить; если заполнено — не менять. #### Неправильно Наборы читаются и записываются в цикле: ```bsl Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт ПорцияЗначенийИзмерений = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры); ПолноеИмяРегистра = Метаданные.РегистрыСведений.ДанныеБизнесПроцессов.ПолноеИмя(); Для Каждого Данные Из ПорцияЗначенийИзмерений Цикл Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяРегистра); ЭлементБлокировки.УстановитьЗначение("Владелец", Данные.Владелец); НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); НаборЗаписей = РегистрыСведений.ДанныеБизнесПроцессов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Владелец.Установить(Данные.Владелец); НаборЗаписей.Прочитать(); // Установка новых значений в набор записей. ... ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ... КонецПопытки; КонецЦикла; ... КонецПроцедуры ``` #### Правильно Изменения рассчитываются одним запросом и записываются одним набором: ```bsl Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт ПорцияЗначенийИзмерений = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры); ПолноеИмяРегистра = Метаданные.РегистрыСведений.ДанныеБизнесПроцессов.ПолноеИмя(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяРегистра); ЭлементБлокировки.ИсточникДанных = ПорцияЗначенийИзмерений; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Владелец", "Владелец"); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПорцияЗначенийИзмерений", ПорцияЗначенийИзмерений); Запрос.Текст = "ВЫБРАТЬ | *, | ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Активен) КАК Состояние |ИЗ | РегистрСведений.ДанныеБизнесПроцессов КАК ДанныеБизнесПроцессов |ГДЕ | ДанныеБизнесПроцессов.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.ПустаяСсылка) | И (ДанныеБизнесПроцессов.Владелец) В (&ПорцияЗначенийИзмерений)"; НачатьТранзакцию(); Попытка БлокировкаДанных.Заблокировать(); Выгрузка = Запрос.Выполнить().Выгрузить(); НаборЗаписей = РегистрыСведений.ДанныеБизнесПроцессов.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(Выгрузка); ОбновлениеИнформационнойБазы.ЗаписатьНаборЗаписей(НаборЗаписей, РежимЗамещения.Обновление); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ... КонецПопытки; ... КонецПроцедуры ``` #### 4.3. Обновление части записей в независимом регистре сведений при записи карточки объекта. Объект уже записан в базу (транзакция может быть еще не зафиксирована), поэтому запрос используется чтобы: - вычислить новые записи без выгрузки исходных данных из СУБД в сервер `1С:Предприятия`; - сравнить новые записи с текущими в обновляемом регистре; - выделить различия; - выбрать лишние записи для удаления; - выбрать недостающие и измененные записи для слияния. #### Неправильно ```bsl Процедура ОбновитьСоставыИерархическихГруппПользователей(ГруппыПользователей) Экспорт ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ГруппыДляОбновления.Родитель КАК ГруппаПользователей, | ГруппыПользователейСостав.Пользователь КАК Пользователь, | НЕ ГруппыДляОбновления.Родитель.ПометкаУдаления | И НЕ ГруппыПользователейСостав.Пользователь.ПометкаУдаления | И НЕ ГруппыПользователейСостав.Пользователь.Недействителен КАК Используется |ИЗ | РегистрСведений.ИерархияГруппПользователей КАК ГруппыДляОбновления | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияГруппПользователей КАК НижестоящиеГруппы | ПО (НижестоящиеГруппы.Родитель = ГруппыДляОбновления.Родитель) | И (ГруппыДляОбновления.ГруппаПользователей В (&ГруппыПользователей)) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав | ПО (ГруппыПользователейСостав.Ссылка = НижестоящиеГруппы.ГруппаПользователей)"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ГруппыПользователей", ГруппыПользователей); Блокировка = Новый БлокировкаДанных; Для Каждого ГруппаПользователей Из ГруппыПользователей Цикл ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); ЭлементБлокировки.УстановитьЗначение("ГруппаПользователей", ГруппаПользователей); КонецЦикла; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Выгрузка = Запрос.Выполнить().Выгрузить(); Для Каждого ГруппаПользователей Из ГруппыПользователей Цикл НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ГруппаПользователей.Установить(ГруппаПользователей); Отбор = Новый Структура("ГруппаПользователей", ГруппаПользователей); НайденныеСтроки = Выгрузка.НайтиСтроки(Отбор); НаборЗаписей.Загрузить(Выгрузка.Скопировать(НайденныеСтроки)); НаборЗаписей.Записать(); // Замена всех записей группы на новые. КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры ``` #### Правильно ```bsl Процедура ОбновитьСоставыИерархическихГруппПользователей(ГруппыПользователей) Экспорт ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СоставыГруппПользователей.ГруппаПользователей КАК ГруппаПользователей, | СоставыГруппПользователей.Пользователь КАК Пользователь |ИЗ | РегистрСведений.ИерархияГруппПользователей КАК ГруппыДляОбновления1 | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей | ПО (СоставыГруппПользователей.ГруппаПользователей = ГруппыДляОбновления1.Родитель) | И (ГруппыДляОбновления1.ГруппаПользователей В (&ГруппыПользователей)) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияГруппПользователей КАК ГруппыДляОбновления2 | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияГруппПользователей КАК НижестоящиеГруппы | ПО (НижестоящиеГруппы.Родитель = ГруппыДляОбновления2.Родитель) | И (ГруппыДляОбновления2.ГруппаПользователей В (&ГруппыПользователей)) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав | ПО (ГруппыПользователейСостав.Ссылка = НижестоящиеГруппы.ГруппаПользователей) | ПО (ГруппыДляОбновления2.Родитель = СоставыГруппПользователей.ГруппаПользователей) | И (ГруппыПользователейСостав.Пользователь = СоставыГруппПользователей.Пользователь) |ГДЕ | ГруппыПользователейСостав.Пользователь ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ГруппыДляОбновления.Родитель КАК ГруппаПользователей, | ГруппыПользователейСостав.Пользователь КАК Пользователь, | НЕ ГруппыДляОбновления.Родитель.ПометкаУдаления | И НЕ ГруппыПользователейСостав.Пользователь.ПометкаУдаления | И НЕ ГруппыПользователейСостав.Пользователь.Недействителен КАК Используется |ИЗ | РегистрСведений.ИерархияГруппПользователей КАК ГруппыДляОбновления | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ИерархияГруппПользователей КАК НижестоящиеГруппы | ПО (НижестоящиеГруппы.Родитель = ГруппыДляОбновления.Родитель) | И (ГруппыДляОбновления.ГруппаПользователей В (&ГруппыПользователей)) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав | ПО (ГруппыПользователейСостав.Ссылка = НижестоящиеГруппы.ГруппаПользователей) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей | ПО (СоставыГруппПользователей.ГруппаПользователей = ГруппыДляОбновления.Родитель) | И (СоставыГруппПользователей.Пользователь = ГруппыПользователейСостав.Пользователь) |ГДЕ | (СоставыГруппПользователей.Пользователь ЕСТЬ NULL | ИЛИ ЕСТЬNULL(СоставыГруппПользователей.Используется, ЛОЖЬ) <> (НЕ ГруппыДляОбновления.Родитель.ПометкаУдаления | И НЕ ГруппыПользователейСостав.Пользователь.ПометкаУдаления | И НЕ ГруппыПользователейСостав.Пользователь.Недействителен))"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ГруппыПользователей", ГруппыПользователей); РезультатыЗапроса = Запрос.ВыполнитьПакет(); Если РезультатыЗапроса[0].Пустой() И РезультатыЗапроса[1].Пустой() Тогда Возврат; КонецЕсли; Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); ЭлементБлокировки.ИсточникДанных = РезультатыЗапроса[0]; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ГруппаПользователей", "ГруппаПользователей"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Пользователь", "Пользователь"); ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СоставыГруппПользователей"); ЭлементБлокировки.ИсточникДанных = РезультатыЗапроса[1]; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("ГруппаПользователей", "ГруппаПользователей"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Пользователь", "Пользователь"); НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); РезультатыЗапроса = Запрос.ВыполнитьПакет(); Если Не РезультатыЗапроса[0].Пустой() Тогда НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(РезультатыЗапроса[0].Выгрузить()); НаборЗаписей.Записать(РежимЗамещения.Удаление); КонецЕсли; Если Не РезультатыЗапроса[1].Пустой() Тогда НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); НаборЗаписей.Загрузить(РезультатыЗапроса[1].Выгрузить()); НаборЗаписей.Записать(РежимЗамещения.Слияние); КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры ``` #### 4.4. Обновление части записей в регистрах, подчиненных регистратору, при частичном изменении данных при перепроведении. Это похоже на обновление независимых регистров сведений, но есть важные отличия: - из-за регистратора ключ строки жестко задается полями `Регистратор` и `НомерСтроки`, режим `Слияние` недоступен; - в режиме `Удаление` платформа автоматически перенумеровывает `НомерСтроки` у оставшихся записей в рамках регистратора; - поле `НомерСтроки` следует использовать как счетчик строк в пределах регистратора, а не как прикладной порядок; - при вычислении изменений поле `НомерСтроки` нужно исключать из сравнения; - сначала формируйте набор (со сброшенным отбором) для `Обновление` из добавляемых и обновляемых строк в количестве не более числа удаляемых строк, с номерами удаляемых строк; - если после этого остались удаляемые строки, формируйте отдельный набор для `Удаление` из ключей этих строк; - если удаляемых строк не осталось, формируйте набор для `Добавление` (или `Ложь`) из оставшихся добавляемых и обновляемых строк без заполнения `НомерСтроки` (доступно с `1С:Предприятие 8.3.26`). Оптимизируйте запись движений во всех случаях, кроме специальных сценариев (например, закрытие месяца или восстановление последовательности взаиморасчетов). Если запись движений выполняется долго (например, очень большая табличная часть при небольшом изменении), можно оптимизировать обновление по принципу примера `4.3`. #### Обычное решение ```bsl Процедура ОбработкаПроведения(Отказ, РежимПроведения) Движения._ДемоОстаткиТоваровВМестахХранения.Записывать = Истина; Для Каждого СтрокаТовары Из Товары Цикл Движение = Движения._ДемоОстаткиТоваровВМестахХранения.Добавить(); Движение.Период = Дата; Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Организация = Организация; Движение.МестоХранения = МестоХранения; Движение.Номенклатура = СтрокаТовары.Номенклатура; Движение.Количество = СтрокаТовары.Количество; КонецЦикла; КонецПроцедуры ``` #### Оптимальное решение ```bsl Процедура ОбработкаПроведения(Отказ, РежимПроведения) Запрос = Новый Запрос; Запрос.УстановитьПараметр("Документ", Ссылка); Запрос.Текст = "ВЫБРАТЬ | ТекущийРегистр.Регистратор КАК Регистратор, | ТекущийРегистр.НомерСтроки КАК НомерСтроки |ИЗ | РегистрНакопления._ДемоОстаткиТоваровВМестахХранения КАК ТекущийРегистр | ЛЕВОЕ СОЕДИНЕНИЕ Документ._ДемоОприходованиеТоваров КАК ТекущийДокумент | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ._ДемоОприходованиеТоваров.Товары КАК ТекущийДокументТовары | ПО (ТекущийДокумент.Ссылка = &Документ) | И (ТекущийДокументТовары.Ссылка = ТекущийДокумент.Ссылка) | ПО (ТекущийРегистр.Активность) | И (ТекущийРегистр.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)) | И (ТекущийДокумент.Дата = ТекущийРегистр.Период) | И (ТекущийДокумент.Организация = ТекущийРегистр.Организация) | И (ТекущийДокумент.МестоХранения = ТекущийРегистр.МестоХранения) | И (ТекущийДокументТовары.Номенклатура = ТекущийРегистр.Номенклатура) | И (ТекущийДокументТовары.Количество = ТекущийРегистр.Количество) |ГДЕ | ТекущийРегистр.Регистратор = &Документ | И ТекущийДокумент.Ссылка ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТекущийДокумент.Ссылка КАК Регистратор, | ТекущийДокумент.Дата КАК Период, | ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) КАК ВидДвижения, | ТекущийДокумент.Организация КАК Организация, | ТекущийДокумент.МестоХранения КАК МестоХранения, | ТекущийДокументТовары.Номенклатура КАК Номенклатура, | ТекущийДокументТовары.Количество КАК Количество |ИЗ | Документ._ДемоОприходованиеТоваров КАК ТекущийДокумент | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ._ДемоОприходованиеТоваров.Товары КАК ТекущийДокументТовары | ПО (ТекущийДокумент.Ссылка = &Документ) | И (ТекущийДокументТовары.Ссылка = ТекущийДокумент.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления._ДемоОстаткиТоваровВМестахХранения КАК ТекущийРегистр | ПО (ТекущийРегистр.Активность) | И (ТекущийРегистр.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)) | И (ТекущийРегистр.Период = ТекущийДокумент.Дата) | И (ТекущийРегистр.Организация = ТекущийДокумент.Организация) | И (ТекущийРегистр.МестоХранения = ТекущийДокумент.МестоХранения) | И (ТекущийРегистр.Номенклатура = ТекущийДокументТовары.Номенклатура) | И (ТекущийРегистр.Количество = ТекущийДокументТовары.Количество) |ГДЕ | ТекущийРегистр.ВидДвижения ЕСТЬ NULL"; РезультатыЗапроса = Запрос.ВыполнитьПакет(); КлючиЛишнихЗаписей = РезультатыЗапроса[0].Выгрузить(); НедостающиеЗаписи = РезультатыЗапроса[1].Выгрузить(); КоличествоЛишнихЗаписей = КлючиЛишнихЗаписей.Количество(); КоличествоНедостающихЗаписей = НедостающиеЗаписи.Количество(); Если КоличествоЛишнихЗаписей > КоличествоНедостающихЗаписей Тогда КоличествоОбновляемыхЗаписей = КоличествоНедостающихЗаписей; Иначе КоличествоОбновляемыхЗаписей = КоличествоЛишнихЗаписей; КонецЕсли; Если КоличествоОбновляемыхЗаписей > 0 Тогда НаборЗаписей = РегистрыНакопления._ДемоОстаткиТоваровВМестахХранения.СоздатьНаборЗаписей(); НаборЗаписей.РасширенныеРежимыЗамещения = Истина; НаборЗаписей.Отбор.Сбросить(); Для Индекс = 0 По КоличествоОбновляемыхЗаписей - 1 Цикл НоваяЗапись = НаборЗаписей.Добавить(); ЗаполнитьЗначенияСвойств(НоваяЗапись, НедостающиеЗаписи[Индекс]); НоваяЗапись.НомерСтроки = КлючиЛишнихЗаписей[Индекс].НомерСтроки; КонецЦикла; НаборЗаписей.Записать(РежимЗамещения.Обновление); КонецЕсли; Если КоличествоЛишнихЗаписей > КоличествоНедостающихЗаписей Тогда НаборЗаписей = РегистрыНакопления._ДемоОстаткиТоваровВМестахХранения.СоздатьНаборЗаписей(); НаборЗаписей.РасширенныеРежимыЗамещения = Истина; НаборЗаписей.Отбор.Сбросить(); Для Индекс = КоличествоОбновляемыхЗаписей По КоличествоЛишнихЗаписей - 1 Цикл ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), КлючиЛишнихЗаписей[Индекс]); КонецЦикла; НаборЗаписей.Записать(РежимЗамещения.Удаление); ИначеЕсли КоличествоЛишнихЗаписей < КоличествоНедостающихЗаписей Тогда НаборЗаписей = РегистрыНакопления._ДемоОстаткиТоваровВМестахХранения.СоздатьНаборЗаписей(); НаборЗаписей.РасширенныеРежимыЗамещения = Истина; НаборЗаписей.Отбор.Сбросить(); Для Индекс = КоличествоОбновляемыхЗаписей По КоличествоНедостающихЗаписей - 1 Цикл ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), НедостающиеЗаписи[Индекс]); КонецЦикла; НаборЗаписей.Записать(РежимЗамещения.Добавление); КонецЕсли; КонецПроцедуры ``` #### Источник https://its.1c.ru/db/v8std#content:792 ### std794 - Ограничения на использование внешних ресурсов #std794 URL: https://v8std.ru/std/794/ Markdown URL: https://v8std.ru/std/794.md Source path: std/794.md Aliases: std794, #std794, std 794, стандарт 794 Related: нет External sources: https://its.1c.ru/db/bsp3111doc/content/2970/hdoc, https://its.1c.ru/db/v8std#content:794 ID: #std794 # Ограничения на использование внешних ресурсов #### 1. Используйте средства платформы вместо внешних компонент, приложений операционной системы или COM. #### Например Используйте метод `ВызватьПаузу` вместо средств операционной системы, внешних компонент или COM. #### 2. Для настроек профилей безопасности используйте соответствующую подсистему БСП. [Библиотека стандартных подсистем. Пользовательская документация. 5.51 Профили безопасности](https://its.1c.ru/db/bsp3111doc/content/2970/hdoc) Все внешние ресурсы заявите в `РаботаВБезопасномРежимеПереопределяемый`. Внешние ресурсы могут быть статичными или их состав может динамически меняться по настройкам и функциональным опциям. Когда функциональность приложения, использующая внешние ресурсы, включается или выключается, необходимо запросить у администратора разрешение на включение доступа к ним. Для этого можно использовать БСП `РаботаВБезопасномРежимеКлиент`. #### В стандарте не указано Идея помочь сконфигурировать профили безопасности кластера такая: что конфигурация рассказывает, чем она принципиально обладает - она правильная. Идея, что управлять этим должен администратор приложения - не правильная. Профили безопасности придуманы, чтобы защитить кластер от недобросовестного приложения и недобросовестного администратора приложения. Потому принимать профиль ВСЕГДА должен администратор кластера. К сожалению, на текущий момент готовых механизмов общих не существует. Идеологически верно работает только модель сервиса (фрешик). #### Источник https://its.1c.ru/db/v8std#content:794 ### std798 - Использование ботов системы взаимодействия #std798 URL: https://v8std.ru/std/798/ Markdown URL: https://v8std.ru/std/798.md Source path: std/798.md Aliases: std798, #std798, std 798, стандарт 798 Related: standard:std499 External sources: https://v8.1c.ru/platforma/tekhnologiya-1cfresh/, https://its.1c.ru/db/v85doc/bookmark/dev/TI000002350, https://its.1c.ru/db/v8std#content:798 ID: #std798 # Использование ботов системы взаимодействия #### 1. В конфигурации должно быть регламентное задание, которое вызывает `СистемаВзаимодействия.ВыполнитьОбработкуБотов()`. Метод имеет особенности: - работает без учета разделителей; - обращается к данным о регистрации системы взаимодействия в каждой области разделенной ИБ и к системной таблице экземпляров ботов этой области; - при наличии регистрации и ботов запускает системный процесс с WebSocket-соединением; - системный процесс запускается по одному на область, независимо от числа экземпляров ботов; - предопределенные боты создаются при первом вызове `ВыполнитьОбработкуБотов()`. Для решений в модели сервиса ([Технология 1cFresh](https://v8.1c.ru/platforma/tekhnologiya-1cfresh/)) соблюдайте рекомендации ниже. #### 1.1. Не создавайте предопределенных ботов. Предусмотрите настройки включения и отключения бота. При включении создавайте бота программно, при отключении — удаляйте. #### 1.2. Регламентное задание, вызывающее `ВыполнитьОбработкуБотов()`: - должно быть одно, независимо от числа объектов метаданных `БотСистемыВзаимодействия`; - должно быть неразделенным (не входить в состав разделителей). Несоблюдение требований приводит к лишней нагрузке на сервер 1С:Предприятие и сервер системы взаимодействия. #### 2. При создании бота указывайте пользователя системы взаимодействия, не связанного с пользователем информационной базы. Иначе пользователь информационной базы не сможет работать с системой взаимодействия. #### 3. Если создаете несколько экземпляров ботов для одного объекта метаданных, связывайте их с разными пользователями системы взаимодействия. Иначе будет работать только последний созданный экземпляр. #### 4. Обработчик сообщений ботов должен работать без необработанных исключений (см [#std499: Перехват исключений в коде](https://v8std.ru/std/499/)) Сообщения сохраняются в системную очередь, затем для каждого вызывается `ОбработкаСообщенияСистемыВзаимодействия`. Сообщение удаляется из очереди только после успешной обработки. Если при обработке возникает исключение, сообщение останется в очереди и будет обрабатываться повторно. Это блокирует обработку следующих сообщений. #### См. также - [Документация разработчика: 29.4.6.3.4. Схема обработки сообщений от системы взаимодействия](https://its.1c.ru/db/v85doc/bookmark/dev/TI000002350) #### Источник https://its.1c.ru/db/v8std#content:798 ## diagnostic ### acc:100 - Использован обработчик событий, подключаемый из кода и не содержащий префикса "Подключаемый_". АПК:100 URL: https://v8std.ru/diagnostics/acc/100/ Markdown URL: https://v8std.ru/diagnostics/acc/100.md Source path: diagnostics/acc/100.md Aliases: acc:100, #acc:100, acc 100, acc100, апк 100, АПК:100 Related: standard:std492 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/392 ID: acc:100 # Использован обработчик событий, подключаемый из кода и не содержащий префикса "Подключаемый_". (ACC 100) - Код АПК: `100` #### Стандарт - [#std492: Обработчики событий модуля формы, подключаемые из кода](https://v8std.ru/std/492/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/392) ### acc:101 - Длина выражения превышает 120 символов. АПК:101 URL: https://v8std.ru/diagnostics/acc/101/ Markdown URL: https://v8std.ru/diagnostics/acc/101.md Source path: diagnostics/acc/101.md Aliases: acc:101, #acc:101, acc 101, acc101, апк 101, АПК:101 Related: standard:std444 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/482 ID: acc:101 # Длина выражения превышает 120 символов. (ACC 101) - Код АПК: `101` #### Стандарт - [#std444: Перенос выражений](https://v8std.ru/std/444/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/482) ### acc:102 - Неправильный перенос текста в выражении. АПК:102 URL: https://v8std.ru/diagnostics/acc/102/ Markdown URL: https://v8std.ru/diagnostics/acc/102.md Source path: diagnostics/acc/102.md Aliases: acc:102, #acc:102, acc 102, acc102, апк 102, АПК:102 Related: standard:std444 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/483 ID: acc:102 # Неправильный перенос текста в выражении. (ACC 102) - Код АПК: `102` #### Стандарт - [#std444: Перенос выражений](https://v8std.ru/std/444/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/483) ### acc:1026 - Орфографическая ошибка в заголовке формы. АПК:1026 URL: https://v8std.ru/diagnostics/acc/1026/ Markdown URL: https://v8std.ru/diagnostics/acc/1026.md Source path: diagnostics/acc/1026.md Aliases: acc:1026, #acc:1026, acc 1026, acc1026, апк 1026, АПК:1026 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/68 ID: acc:1026 # Орфографическая ошибка в заголовке формы. (ACC 1026) - Код АПК: `1026` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/68) ### acc:1027 - Орфографическая ошибка в заголовке элемента формы. АПК:1027 URL: https://v8std.ru/diagnostics/acc/1027/ Markdown URL: https://v8std.ru/diagnostics/acc/1027.md Source path: diagnostics/acc/1027.md Aliases: acc:1027, #acc:1027, acc 1027, acc1027, апк 1027, АПК:1027 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/691 ID: acc:1027 # Орфографическая ошибка в заголовке элемента формы. (ACC 1027) - Код АПК: `1027` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/691) ### acc:1028 - Орфографическая ошибка в колонке табличного поля. АПК:1028 URL: https://v8std.ru/diagnostics/acc/1028/ Markdown URL: https://v8std.ru/diagnostics/acc/1028.md Source path: diagnostics/acc/1028.md Aliases: acc:1028, #acc:1028, acc 1028, acc1028, апк 1028, АПК:1028 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/692 ID: acc:1028 # Орфографическая ошибка в колонке табличного поля. (ACC 1028) - Код АПК: `1028` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/692) ### acc:103 - Строка должна находиться в конце предыдущей. АПК:103 URL: https://v8std.ru/diagnostics/acc/103/ Markdown URL: https://v8std.ru/diagnostics/acc/103.md Source path: diagnostics/acc/103.md Aliases: acc:103, #acc:103, acc 103, acc103, апк 103, АПК:103 Related: standard:std444 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/389 ID: acc:103 # Строка должна находиться в конце предыдущей. (ACC 103) - Код АПК: `103` #### Стандарт - [#std444: Перенос выражений](https://v8std.ru/std/444/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/389) ### acc:1030 - Орфографическая ошибка в подсказке элемента управления. АПК:1030 URL: https://v8std.ru/diagnostics/acc/1030/ Markdown URL: https://v8std.ru/diagnostics/acc/1030.md Source path: diagnostics/acc/1030.md Aliases: acc:1030, #acc:1030, acc 1030, acc1030, апк 1030, АПК:1030 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/75 ID: acc:1030 # Орфографическая ошибка в подсказке элемента управления. (ACC 1030) - Код АПК: `1030` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/75) ### acc:1032 - Орфографическая ошибка в синониме объекта метаданных. АПК:1032 URL: https://v8std.ru/diagnostics/acc/1032/ Markdown URL: https://v8std.ru/diagnostics/acc/1032.md Source path: diagnostics/acc/1032.md Aliases: acc:1032, #acc:1032, acc 1032, acc1032, апк 1032, АПК:1032 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/694 ID: acc:1032 # Орфографическая ошибка в синониме объекта метаданных. (ACC 1032) - Код АПК: `1032` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/694) ### acc:1033 - Орфографическая ошибка в комментарии объекта метаданных. АПК:1033 URL: https://v8std.ru/diagnostics/acc/1033/ Markdown URL: https://v8std.ru/diagnostics/acc/1033.md Source path: diagnostics/acc/1033.md Aliases: acc:1033, #acc:1033, acc 1033, acc1033, апк 1033, АПК:1033 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/695 ID: acc:1033 # Орфографическая ошибка в комментарии объекта метаданных. (ACC 1033) - Код АПК: `1033` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/695) ### acc:1034 - Орфографическая ошибка в тексте встроенной справки. АПК:1034 URL: https://v8std.ru/diagnostics/acc/1034/ Markdown URL: https://v8std.ru/diagnostics/acc/1034.md Source path: diagnostics/acc/1034.md Aliases: acc:1034, #acc:1034, acc 1034, acc1034, апк 1034, АПК:1034 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/76 ID: acc:1034 # Орфографическая ошибка в тексте встроенной справки. (ACC 1034) - Код АПК: `1034` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/76) ### acc:1035 - Орфографическая ошибка в тексте макета. АПК:1035 URL: https://v8std.ru/diagnostics/acc/1035/ Markdown URL: https://v8std.ru/diagnostics/acc/1035.md Source path: diagnostics/acc/1035.md Aliases: acc:1035, #acc:1035, acc 1035, acc1035, апк 1035, АПК:1035 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/73 ID: acc:1035 # Орфографическая ошибка в тексте макета. (ACC 1035) - Код АПК: `1035` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/73) ### acc:1036 - Орфографическая ошибка в тексте модуля. АПК:1036 URL: https://v8std.ru/diagnostics/acc/1036/ Markdown URL: https://v8std.ru/diagnostics/acc/1036.md Source path: diagnostics/acc/1036.md Aliases: acc:1036, #acc:1036, acc 1036, acc1036, апк 1036, АПК:1036 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/74 ID: acc:1036 # Орфографическая ошибка в тексте модуля. (ACC 1036) - Код АПК: `1036` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/74) ### acc:1037 - Орфографическая ошибка в видимой колонке табличного поля. АПК:1037 URL: https://v8std.ru/diagnostics/acc/1037/ Markdown URL: https://v8std.ru/diagnostics/acc/1037.md Source path: diagnostics/acc/1037.md Aliases: acc:1037, #acc:1037, acc 1037, acc1037, апк 1037, АПК:1037 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/699 ID: acc:1037 # Орфографическая ошибка в видимой колонке табличного поля. (ACC 1037) - Код АПК: `1037` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/699) ### acc:1038 - Орфографическая ошибка в тексте видимого элемента формы. АПК:1038 URL: https://v8std.ru/diagnostics/acc/1038/ Markdown URL: https://v8std.ru/diagnostics/acc/1038.md Source path: diagnostics/acc/1038.md Aliases: acc:1038, #acc:1038, acc 1038, acc1038, апк 1038, АПК:1038 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/72 ID: acc:1038 # Орфографическая ошибка в тексте видимого элемента формы. (ACC 1038) - Код АПК: `1038` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/72) ### acc:104 - Использована директива компиляции. АПК:104 URL: https://v8std.ru/diagnostics/acc/104/ Markdown URL: https://v8std.ru/diagnostics/acc/104.md Source path: diagnostics/acc/104.md Aliases: acc:104, #acc:104, acc 104, acc104, апк 104, АПК:104 Related: standard:std439 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/390 ID: acc:104 # Использована директива компиляции. (ACC 104) - Код АПК: `104` #### Стандарт - [#std439: Использование директив компиляции и инструкций препроцессора](https://v8std.ru/std/439/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/390) ### acc:1046 - Отсутствует обязательная роль. АПК:1046 URL: https://v8std.ru/diagnostics/acc/1046/ Markdown URL: https://v8std.ru/diagnostics/acc/1046.md Source path: diagnostics/acc/1046.md Aliases: acc:1046, #acc:1046, acc 1046, acc1046, апк 1046, АПК:1046 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/701 ID: acc:1046 # Отсутствует обязательная роль. (ACC 1046) - Код АПК: `1046` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/701) ### acc:105 - Использована явная запись наборов записей регистров (с помощью метода Записать) в процедуре обработки проведения. АПК:105 URL: https://v8std.ru/diagnostics/acc/105/ Markdown URL: https://v8std.ru/diagnostics/acc/105.md Source path: diagnostics/acc/105.md Aliases: acc:105, #acc:105, acc 105, acc105, апк 105, АПК:105 Related: standard:std450 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/400 ID: acc:105 # Использована явная запись наборов записей регистров (с помощью метода Записать) в процедуре обработки проведения. (ACC 105) - Код АПК: `105` #### Стандарт - [#std450: Порядок записи движений документов](https://v8std.ru/std/450/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/400) ### acc:108 - Документ не имеет реквизита "Комментарий". АПК:108 URL: https://v8std.ru/diagnostics/acc/108/ Markdown URL: https://v8std.ru/diagnostics/acc/108.md Source path: diagnostics/acc/108.md Aliases: acc:108, #acc:108, acc 108, acc108, апк 108, АПК:108 Related: standard:std531 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/487 ID: acc:108 # Документ не имеет реквизита "Комментарий". (ACC 108) - Код АПК: `108` #### Стандарт - [#std531: Реквизит «Комментарий» у документов](https://v8std.ru/std/531/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/487) ### acc:109 - Реквизит "Комментарий" имеет недопустимый тип. АПК:109 URL: https://v8std.ru/diagnostics/acc/109/ Markdown URL: https://v8std.ru/diagnostics/acc/109.md Source path: diagnostics/acc/109.md Aliases: acc:109, #acc:109, acc 109, acc109, апк 109, АПК:109 Related: standard:std531 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/133 ID: acc:109 # Реквизит "Комментарий" имеет недопустимый тип. (ACC 109) - Код АПК: `109` #### Стандарт - [#std531: Реквизит «Комментарий» у документов](https://v8std.ru/std/531/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/133) ### acc:1108 - Нарушена сортировка объектов метаданных верхнего уровня по имени по возрастанию в дереве метаданных. АПК:1108 URL: https://v8std.ru/diagnostics/acc/1108/ Markdown URL: https://v8std.ru/diagnostics/acc/1108.md Source path: diagnostics/acc/1108.md Aliases: acc:1108, #acc:1108, acc 1108, acc1108, апк 1108, АПК:1108 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/78 ID: acc:1108 # Нарушена сортировка объектов метаданных верхнего уровня по имени по возрастанию в дереве метаданных. (ACC 1108) - Код АПК: `1108` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/78) ### acc:1125 - В форме неверно установлен стиль. АПК:1125 URL: https://v8std.ru/diagnostics/acc/1125/ Markdown URL: https://v8std.ru/diagnostics/acc/1125.md Source path: diagnostics/acc/1125.md Aliases: acc:1125, #acc:1125, acc 1125, acc1125, апк 1125, АПК:1125 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/278 ID: acc:1125 # В форме неверно установлен стиль. (ACC 1125) - Код АПК: `1125` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/278) ### acc:1126 - Не определен обязательный элемент стиля "Цвет: ТекстПредупреждающейНадписи". АПК:1126 URL: https://v8std.ru/diagnostics/acc/1126/ Markdown URL: https://v8std.ru/diagnostics/acc/1126.md Source path: diagnostics/acc/1126.md Aliases: acc:1126, #acc:1126, acc 1126, acc1126, апк 1126, АПК:1126 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/704 ID: acc:1126 # Не определен обязательный элемент стиля "Цвет: ТекстПредупреждающейНадписи". (ACC 1126) - Код АПК: `1126` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/704) ### acc:1127 - Не определен обязательный элемент стиля "Шрифт: ШрифтВажнойНадписи". АПК:1127 URL: https://v8std.ru/diagnostics/acc/1127/ Markdown URL: https://v8std.ru/diagnostics/acc/1127.md Source path: diagnostics/acc/1127.md Aliases: acc:1127, #acc:1127, acc 1127, acc1127, апк 1127, АПК:1127 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/575 ID: acc:1127 # Не определен обязательный элемент стиля "Шрифт: ШрифтВажнойНадписи". (ACC 1127) - Код АПК: `1127` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/575) ### acc:1128 - Не определен обязательный элемент стиля "Цвет: ФонГруппировкиВерхнегоУровня". АПК:1128 URL: https://v8std.ru/diagnostics/acc/1128/ Markdown URL: https://v8std.ru/diagnostics/acc/1128.md Source path: diagnostics/acc/1128.md Aliases: acc:1128, #acc:1128, acc 1128, acc1128, апк 1128, АПК:1128 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/578 ID: acc:1128 # Не определен обязательный элемент стиля "Цвет: ФонГруппировкиВерхнегоУровня". (ACC 1128) - Код АПК: `1128` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/578) ### acc:1129 - Не определен обязательный элемент стиля "Цвет: ФонГруппировкиПромежуточногоУровня". АПК:1129 URL: https://v8std.ru/diagnostics/acc/1129/ Markdown URL: https://v8std.ru/diagnostics/acc/1129.md Source path: diagnostics/acc/1129.md Aliases: acc:1129, #acc:1129, acc 1129, acc1129, апк 1129, АПК:1129 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/579 ID: acc:1129 # Не определен обязательный элемент стиля "Цвет: ФонГруппировкиПромежуточногоУровня". (ACC 1129) - Код АПК: `1129` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/579) ### acc:113 - Размер элемента управления типа "Кнопка" меньше 60х19. АПК:113 URL: https://v8std.ru/diagnostics/acc/113/ Markdown URL: https://v8std.ru/diagnostics/acc/113.md Source path: diagnostics/acc/113.md Aliases: acc:113, #acc:113, acc 113, acc113, апк 113, АПК:113 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/491 ID: acc:113 # Размер элемента управления типа "Кнопка" меньше 60х19. (ACC 113) - Код АПК: `113` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/491) ### acc:1130 - Не определен обязательный элемент стиля "Цвет: ТекстИнформационнойНадписи". АПК:1130 URL: https://v8std.ru/diagnostics/acc/1130/ Markdown URL: https://v8std.ru/diagnostics/acc/1130.md Source path: diagnostics/acc/1130.md Aliases: acc:1130, #acc:1130, acc 1130, acc1130, апк 1130, АПК:1130 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/276 ID: acc:1130 # Не определен обязательный элемент стиля "Цвет: ТекстИнформационнойНадписи". (ACC 1130) - Код АПК: `1130` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/276) ### acc:1131 - Неверно определен основной стиль для конфигурации. АПК:1131 URL: https://v8std.ru/diagnostics/acc/1131/ Markdown URL: https://v8std.ru/diagnostics/acc/1131.md Source path: diagnostics/acc/1131.md Aliases: acc:1131, #acc:1131, acc 1131, acc1131, апк 1131, АПК:1131 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/705 ID: acc:1131 # Неверно определен основной стиль для конфигурации. (ACC 1131) - Код АПК: `1131` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/705) ### acc:1132 - Не установлен основной стиль для конфигурации. АПК:1132 URL: https://v8std.ru/diagnostics/acc/1132/ Markdown URL: https://v8std.ru/diagnostics/acc/1132.md Source path: diagnostics/acc/1132.md Aliases: acc:1132, #acc:1132, acc 1132, acc1132, апк 1132, АПК:1132 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/275 ID: acc:1132 # Не установлен основной стиль для конфигурации. (ACC 1132) - Код АПК: `1132` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/275) ### acc:1133 - Установлен признак переключения для интерфейса "Общий". АПК:1133 URL: https://v8std.ru/diagnostics/acc/1133/ Markdown URL: https://v8std.ru/diagnostics/acc/1133.md Source path: diagnostics/acc/1133.md Aliases: acc:1133, #acc:1133, acc 1133, acc1133, апк 1133, АПК:1133 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/707 ID: acc:1133 # Установлен признак переключения для интерфейса "Общий". (ACC 1133) - Код АПК: `1133` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/707) ### acc:1134 - В конфигурации отсутствует обязательный интерфейс "Общий". АПК:1134 URL: https://v8std.ru/diagnostics/acc/1134/ Markdown URL: https://v8std.ru/diagnostics/acc/1134.md Source path: diagnostics/acc/1134.md Aliases: acc:1134, #acc:1134, acc 1134, acc1134, апк 1134, АПК:1134 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/708 ID: acc:1134 # В конфигурации отсутствует обязательный интерфейс "Общий". (ACC 1134) - Код АПК: `1134` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/708) ### acc:1135 - В конфигурации отсутствует обязательный интерфейс "Полный". АПК:1135 URL: https://v8std.ru/diagnostics/acc/1135/ Markdown URL: https://v8std.ru/diagnostics/acc/1135.md Source path: diagnostics/acc/1135.md Aliases: acc:1135, #acc:1135, acc 1135, acc1135, апк 1135, АПК:1135 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/273 ID: acc:1135 # В конфигурации отсутствует обязательный интерфейс "Полный". (ACC 1135) - Код АПК: `1135` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/273) ### acc:1136 - Не заполнена всплывающая подсказка. АПК:1136 URL: https://v8std.ru/diagnostics/acc/1136/ Markdown URL: https://v8std.ru/diagnostics/acc/1136.md Source path: diagnostics/acc/1136.md Aliases: acc:1136, #acc:1136, acc 1136, acc1136, апк 1136, АПК:1136 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/710 ID: acc:1136 # Не заполнена всплывающая подсказка. (ACC 1136) - Код АПК: `1136` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/710) ### acc:114 - Элемент управления типа "Кнопка" содержит многострочный заголовок. АПК:114 URL: https://v8std.ru/diagnostics/acc/114/ Markdown URL: https://v8std.ru/diagnostics/acc/114.md Source path: diagnostics/acc/114.md Aliases: acc:114, #acc:114, acc 114, acc114, апк 114, АПК:114 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/492 ID: acc:114 # Элемент управления типа "Кнопка" содержит многострочный заголовок. (ACC 114) - Код АПК: `114` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/492) ### acc:1143 - Длина комментария превышает 120 символов. АПК:1143 URL: https://v8std.ru/diagnostics/acc/1143/ Markdown URL: https://v8std.ru/diagnostics/acc/1143.md Source path: diagnostics/acc/1143.md Aliases: acc:1143, #acc:1143, acc 1143, acc1143, апк 1143, АПК:1143 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/292 ID: acc:1143 # Длина комментария превышает 120 символов. (ACC 1143) - Код АПК: `1143` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/292) ### acc:1145 - Отсутствует справочная информация. АПК:1145 URL: https://v8std.ru/diagnostics/acc/1145/ Markdown URL: https://v8std.ru/diagnostics/acc/1145.md Source path: diagnostics/acc/1145.md Aliases: acc:1145, #acc:1145, acc 1145, acc1145, апк 1145, АПК:1145 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/290 ID: acc:1145 # Отсутствует справочная информация. (ACC 1145) - Код АПК: `1145` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/290) ### acc:1146 - У основного объекта справка не включена в содержание. АПК:1146 URL: https://v8std.ru/diagnostics/acc/1146/ Markdown URL: https://v8std.ru/diagnostics/acc/1146.md Source path: diagnostics/acc/1146.md Aliases: acc:1146, #acc:1146, acc 1146, acc1146, апк 1146, АПК:1146 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/288 ID: acc:1146 # У основного объекта справка не включена в содержание. (ACC 1146) - Код АПК: `1146` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/288) ### acc:1147 - Не задана принадлежность объекта к подсистемам. АПК:1147 URL: https://v8std.ru/diagnostics/acc/1147/ Markdown URL: https://v8std.ru/diagnostics/acc/1147.md Source path: diagnostics/acc/1147.md Aliases: acc:1147, #acc:1147, acc 1147, acc1147, апк 1147, АПК:1147 Related: standard:std705 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/230 ID: acc:1147 # Не задана принадлежность объекта к подсистемам. (ACC 1147) - Код АПК: `1147` #### Стандарт - [#std705: Отнесение объектов библиотек к подсистемам](https://v8std.ru/std/705/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/230) ### acc:1149 - Установлено право "Интерактивное удаление". АПК:1149 URL: https://v8std.ru/diagnostics/acc/1149/ Markdown URL: https://v8std.ru/diagnostics/acc/1149.md Source path: diagnostics/acc/1149.md Aliases: acc:1149, #acc:1149, acc 1149, acc1149, апк 1149, АПК:1149 Related: edt_check:v8cs:right-interactive-delete, standard:std488, standard:std697 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/580 ID: acc:1149 # Установлено право "Интерактивное удаление". (ACC 1149) - Код АПК: `1149` - Код проверки EDT: [right-interactive-delete](https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete/) #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std697: Использование предопределенных элементов](https://v8std.ru/std/697/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/580) ### acc:115 - Элемент управления типа "Кнопка" находится на командной панели. АПК:115 URL: https://v8std.ru/diagnostics/acc/115/ Markdown URL: https://v8std.ru/diagnostics/acc/115.md Source path: diagnostics/acc/115.md Aliases: acc:115, #acc:115, acc 115, acc115, апк 115, АПК:115 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/284 ID: acc:115 # Элемент управления типа "Кнопка" находится на командной панели. (ACC 115) - Код АПК: `115` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/284) ### acc:1150 - Не установлено право в роли "ПолныеПрава". АПК:1150 URL: https://v8std.ru/diagnostics/acc/1150/ Markdown URL: https://v8std.ru/diagnostics/acc/1150.md Source path: diagnostics/acc/1150.md Aliases: acc:1150, #acc:1150, acc 1150, acc1150, апк 1150, АПК:1150 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/581 ID: acc:1150 # Не установлено право в роли "ПолныеПрава". (ACC 1150) - Код АПК: `1150` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/581) ### acc:1151 - Не задан синоним объекта метаданных. АПК:1151 URL: https://v8std.ru/diagnostics/acc/1151/ Markdown URL: https://v8std.ru/diagnostics/acc/1151.md Source path: diagnostics/acc/1151.md Aliases: acc:1151, #acc:1151, acc 1151, acc1151, апк 1151, АПК:1151 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/582 ID: acc:1151 # Не задан синоним объекта метаданных. (ACC 1151) - Код АПК: `1151` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/582) ### acc:117 - Ширина вертикального разделителя не соответствует требованиям. АПК:117 URL: https://v8std.ru/diagnostics/acc/117/ Markdown URL: https://v8std.ru/diagnostics/acc/117.md Source path: diagnostics/acc/117.md Aliases: acc:117, #acc:117, acc 117, acc117, апк 117, АПК:117 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/494 ID: acc:117 # Ширина вертикального разделителя не соответствует требованиям. (ACC 117) - Код АПК: `117` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/494) ### acc:118 - Высота горизонтального разделителя не соответствует требованиям. АПК:118 URL: https://v8std.ru/diagnostics/acc/118/ Markdown URL: https://v8std.ru/diagnostics/acc/118.md Source path: diagnostics/acc/118.md Aliases: acc:118, #acc:118, acc 118, acc118, апк 118, АПК:118 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/283 ID: acc:118 # Высота горизонтального разделителя не соответствует требованиям. (ACC 118) - Код АПК: `118` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/283) ### acc:120 - Расположение закладок у панели не соответствует требованиям. АПК:120 URL: https://v8std.ru/diagnostics/acc/120/ Markdown URL: https://v8std.ru/diagnostics/acc/120.md Source path: diagnostics/acc/120.md Aliases: acc:120, #acc:120, acc 120, acc120, апк 120, АПК:120 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/282 ID: acc:120 # Расположение закладок у панели не соответствует требованиям. (ACC 120) - Код АПК: `120` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/282) ### acc:1200 - Неверно установлен номер версии. Правильный формат "РР.ПП.ЗЗ.СС". АПК:1200 URL: https://v8std.ru/diagnostics/acc/1200/ Markdown URL: https://v8std.ru/diagnostics/acc/1200.md Source path: diagnostics/acc/1200.md Aliases: acc:1200, #acc:1200, acc 1200, acc1200, апк 1200, АПК:1200 Related: standard:std483 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/712 ID: acc:1200 # Неверно установлен номер версии. Правильный формат "РР.ПП.ЗЗ.СС". (ACC 1200) - Код АПК: `1200` #### Стандарт - [#std483: Нумерация редакций и версий](https://v8std.ru/std/483/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/712) ### acc:1201 - Краткая информация отличается от синонима. АПК:1201 URL: https://v8std.ru/diagnostics/acc/1201/ Markdown URL: https://v8std.ru/diagnostics/acc/1201.md Source path: diagnostics/acc/1201.md Aliases: acc:1201, #acc:1201, acc 1201, acc1201, апк 1201, АПК:1201 Related: standard:std482 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/713 ID: acc:1201 # Краткая информация отличается от синонима. (ACC 1201) - Код АПК: `1201` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/713) ### acc:1202 - Подробная информация отличается от синонима. АПК:1202 URL: https://v8std.ru/diagnostics/acc/1202/ Markdown URL: https://v8std.ru/diagnostics/acc/1202.md Source path: diagnostics/acc/1202.md Aliases: acc:1202, #acc:1202, acc 1202, acc1202, апк 1202, АПК:1202 Related: standard:std482 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/714 ID: acc:1202 # Подробная информация отличается от синонима. (ACC 1202) - Код АПК: `1202` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/714) ### acc:1203 - Неверно указан поставщик. Должен быть "Фирма "1С"". АПК:1203 URL: https://v8std.ru/diagnostics/acc/1203/ Markdown URL: https://v8std.ru/diagnostics/acc/1203.md Source path: diagnostics/acc/1203.md Aliases: acc:1203, #acc:1203, acc 1203, acc1203, апк 1203, АПК:1203 Related: standard:std482 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/715 ID: acc:1203 # Неверно указан поставщик. Должен быть "Фирма "1С"". (ACC 1203) - Код АПК: `1203` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/715) ### acc:1205 - Реквизит имеет тип фиксированной строки. АПК:1205 URL: https://v8std.ru/diagnostics/acc/1205/ Markdown URL: https://v8std.ru/diagnostics/acc/1205.md Source path: diagnostics/acc/1205.md Aliases: acc:1205, #acc:1205, acc 1205, acc1205, апк 1205, АПК:1205 Related: standard:std432 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/343 ID: acc:1205 # Реквизит имеет тип фиксированной строки. (ACC 1205) - Код АПК: `1205` #### Стандарт - [#std432: Использование реквизитов строкового типа](https://v8std.ru/std/432/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/343) ### acc:1206 - Нестандартная длина кода (номера), проверьте оправданность использования такой длины. АПК:1206 URL: https://v8std.ru/diagnostics/acc/1206/ Markdown URL: https://v8std.ru/diagnostics/acc/1206.md Source path: diagnostics/acc/1206.md Aliases: acc:1206, #acc:1206, acc 1206, acc1206, апк 1206, АПК:1206 Related: standard:std473 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/340 ID: acc:1206 # Нестандартная длина кода (номера), проверьте оправданность использования такой длины. (ACC 1206) - Код АПК: `1206` #### Стандарт - [#std473: Использование кодов (номеров) объектов конфигурации](https://v8std.ru/std/473/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/340) ### acc:1207 - Совпадают имена у объекта метаданных и его составляющей. АПК:1207 URL: https://v8std.ru/diagnostics/acc/1207/ Markdown URL: https://v8std.ru/diagnostics/acc/1207.md Source path: diagnostics/acc/1207.md Aliases: acc:1207, #acc:1207, acc 1207, acc1207, апк 1207, АПК:1207 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/718 ID: acc:1207 # Совпадают имена у объекта метаданных и его составляющей. (ACC 1207) - Код АПК: `1207` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/718) ### acc:1208 - Присвоено нерекомендуемое имя. АПК:1208 URL: https://v8std.ru/diagnostics/acc/1208/ Markdown URL: https://v8std.ru/diagnostics/acc/1208.md Source path: diagnostics/acc/1208.md Aliases: acc:1208, #acc:1208, acc 1208, acc1208, апк 1208, АПК:1208 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/719 ID: acc:1208 # Присвоено нерекомендуемое имя. (ACC 1208) - Код АПК: `1208` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/719) ### acc:1209 - Нестандартная длина номера, проверьте оправданность использования такой длины. АПК:1209 URL: https://v8std.ru/diagnostics/acc/1209/ Markdown URL: https://v8std.ru/diagnostics/acc/1209.md Source path: diagnostics/acc/1209.md Aliases: acc:1209, #acc:1209, acc 1209, acc1209, апк 1209, АПК:1209 Related: standard:std473 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/127 ID: acc:1209 # Нестандартная длина номера, проверьте оправданность использования такой длины. (ACC 1209) - Код АПК: `1209` #### Стандарт - [#std473: Использование кодов (номеров) объектов конфигурации](https://v8std.ru/std/473/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/127) ### acc:1210 - Представление объекта совпадает с синонимом. В этом случае оно не заполняется. АПК:1210 URL: https://v8std.ru/diagnostics/acc/1210/ Markdown URL: https://v8std.ru/diagnostics/acc/1210.md Source path: diagnostics/acc/1210.md Aliases: acc:1210, #acc:1210, acc 1210, acc1210, апк 1210, АПК:1210 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/433 ID: acc:1210 # Представление объекта совпадает с синонимом. В этом случае оно не заполняется. (ACC 1210) - Код АПК: `1210` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/433) ### acc:1211 - Расширенное представление объекта совпадает с представлением объекта. В этом случае оно не заполняется. АПК:1211 URL: https://v8std.ru/diagnostics/acc/1211/ Markdown URL: https://v8std.ru/diagnostics/acc/1211.md Source path: diagnostics/acc/1211.md Aliases: acc:1211, #acc:1211, acc 1211, acc1211, апк 1211, АПК:1211 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/722 ID: acc:1211 # Расширенное представление объекта совпадает с представлением объекта. В этом случае оно не заполняется. (ACC 1211) - Код АПК: `1211` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/722) ### acc:1213 - Расширенное представление объекта совпадает с синонимом при незаполненном представлении объекта. В этом случае оно не заполняется. АПК:1213 URL: https://v8std.ru/diagnostics/acc/1213/ Markdown URL: https://v8std.ru/diagnostics/acc/1213.md Source path: diagnostics/acc/1213.md Aliases: acc:1213, #acc:1213, acc 1213, acc1213, апк 1213, АПК:1213 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/434 ID: acc:1213 # Расширенное представление объекта совпадает с синонимом при незаполненном представлении объекта. В этом случае оно не заполняется. (ACC 1213) - Код АПК: `1213` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/434) ### acc:1214 - Представление списка совпадает с синонимом. В этом случае оно не заполняется. АПК:1214 URL: https://v8std.ru/diagnostics/acc/1214/ Markdown URL: https://v8std.ru/diagnostics/acc/1214.md Source path: diagnostics/acc/1214.md Aliases: acc:1214, #acc:1214, acc 1214, acc1214, апк 1214, АПК:1214 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/435 ID: acc:1214 # Представление списка совпадает с синонимом. В этом случае оно не заполняется. (ACC 1214) - Код АПК: `1214` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/435) ### acc:1215 - Расширенное представление списка совпадает с представлением списка. В этом случае оно не заполняется. АПК:1215 URL: https://v8std.ru/diagnostics/acc/1215/ Markdown URL: https://v8std.ru/diagnostics/acc/1215.md Source path: diagnostics/acc/1215.md Aliases: acc:1215, #acc:1215, acc 1215, acc1215, апк 1215, АПК:1215 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/725 ID: acc:1215 # Расширенное представление списка совпадает с представлением списка. В этом случае оно не заполняется. (ACC 1215) - Код АПК: `1215` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/725) ### acc:1216 - Расширенное представление списка совпадает с синонимом при незаполненном представлении списка. В этом случае оно не заполняется. АПК:1216 URL: https://v8std.ru/diagnostics/acc/1216/ Markdown URL: https://v8std.ru/diagnostics/acc/1216.md Source path: diagnostics/acc/1216.md Aliases: acc:1216, #acc:1216, acc 1216, acc1216, апк 1216, АПК:1216 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/436 ID: acc:1216 # Расширенное представление списка совпадает с синонимом при незаполненном представлении списка. В этом случае оно не заполняется. (ACC 1216) - Код АПК: `1216` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/436) ### acc:1217 - Расширенное представление совпадает с синонимом. В этом случае оно не заполняется. АПК:1217 URL: https://v8std.ru/diagnostics/acc/1217/ Markdown URL: https://v8std.ru/diagnostics/acc/1217.md Source path: diagnostics/acc/1217.md Aliases: acc:1217, #acc:1217, acc 1217, acc1217, апк 1217, АПК:1217 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/257 ID: acc:1217 # Расширенное представление совпадает с синонимом. В этом случае оно не заполняется. (ACC 1217) - Код АПК: `1217` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/257) ### acc:1218 - Объект метаданных является демонстрационным. АПК:1218 URL: https://v8std.ru/diagnostics/acc/1218/ Markdown URL: https://v8std.ru/diagnostics/acc/1218.md Source path: diagnostics/acc/1218.md Aliases: acc:1218, #acc:1218, acc 1218, acc1218, апк 1218, АПК:1218 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/118 ID: acc:1218 # Объект метаданных является демонстрационным. (ACC 1218) - Код АПК: `1218` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/118) ### acc:1219 - Неверно сброшен флажок "Включать в содержание справки". Для основной формы его нужно включить. АПК:1219 URL: https://v8std.ru/diagnostics/acc/1219/ Markdown URL: https://v8std.ru/diagnostics/acc/1219.md Source path: diagnostics/acc/1219.md Aliases: acc:1219, #acc:1219, acc 1219, acc1219, апк 1219, АПК:1219 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/729 ID: acc:1219 # Неверно сброшен флажок "Включать в содержание справки". Для основной формы его нужно включить. (ACC 1219) - Код АПК: `1219` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/729) ### acc:1220 - Неверно установлен флажок "Включать в содержание справки". Для не основной формы его нужно выключить. АПК:1220 URL: https://v8std.ru/diagnostics/acc/1220/ Markdown URL: https://v8std.ru/diagnostics/acc/1220.md Source path: diagnostics/acc/1220.md Aliases: acc:1220, #acc:1220, acc 1220, acc1220, апк 1220, АПК:1220 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/289 ID: acc:1220 # Неверно установлен флажок "Включать в содержание справки". Для не основной формы его нужно выключить. (ACC 1220) - Код АПК: `1220` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/289) ### acc:1221 - Не определен обязательный элемент стиля "Цвет: ТекстВторостепеннойНадписи". АПК:1221 URL: https://v8std.ru/diagnostics/acc/1221/ Markdown URL: https://v8std.ru/diagnostics/acc/1221.md Source path: diagnostics/acc/1221.md Aliases: acc:1221, #acc:1221, acc 1221, acc1221, апк 1221, АПК:1221 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/731 ID: acc:1221 # Не определен обязательный элемент стиля "Цвет: ТекстВторостепеннойНадписи". (ACC 1221) - Код АПК: `1221` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/731) ### acc:1222 - Не определен обязательный элемент стиля "Цвет: ЦветГиперссылки". АПК:1222 URL: https://v8std.ru/diagnostics/acc/1222/ Markdown URL: https://v8std.ru/diagnostics/acc/1222.md Source path: diagnostics/acc/1222.md Aliases: acc:1222, #acc:1222, acc 1222, acc1222, апк 1222, АПК:1222 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/277 ID: acc:1222 # Не определен обязательный элемент стиля "Цвет: ЦветГиперссылки". (ACC 1222) - Код АПК: `1222` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/277) ### acc:1223 - Сообщение содержит нерекомендуемое местоимение ("Вы", "Вас" и пр.). АПК:1223 URL: https://v8std.ru/diagnostics/acc/1223/ Markdown URL: https://v8std.ru/diagnostics/acc/1223.md Source path: diagnostics/acc/1223.md Aliases: acc:1223, #acc:1223, acc 1223, acc1223, апк 1223, АПК:1223 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/441 ID: acc:1223 # Сообщение содержит нерекомендуемое местоимение ("Вы", "Вас" и пр.). (ACC 1223) - Код АПК: `1223` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/441) ### acc:1224 - Превышена максимально допустимая ширина формы 1256. АПК:1224 URL: https://v8std.ru/diagnostics/acc/1224/ Markdown URL: https://v8std.ru/diagnostics/acc/1224.md Source path: diagnostics/acc/1224.md Aliases: acc:1224, #acc:1224, acc 1224, acc1224, апк 1224, АПК:1224 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/734 ID: acc:1224 # Превышена максимально допустимая ширина формы 1256. (ACC 1224) - Код АПК: `1224` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/734) ### acc:1225 - Превышена максимально допустимая высота формы 580. АПК:1225 URL: https://v8std.ru/diagnostics/acc/1225/ Markdown URL: https://v8std.ru/diagnostics/acc/1225.md Source path: diagnostics/acc/1225.md Aliases: acc:1225, #acc:1225, acc 1225, acc1225, апк 1225, АПК:1225 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/280 ID: acc:1225 # Превышена максимально допустимая высота формы 580. (ACC 1225) - Код АПК: `1225` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/280) ### acc:123 - Обращение к полям регистратора. АПК:123 URL: https://v8std.ru/diagnostics/acc/123/ Markdown URL: https://v8std.ru/diagnostics/acc/123.md Source path: diagnostics/acc/123.md Aliases: acc:123, #acc:123, acc 123, acc123, апк 123, АПК:123 Related: standard:std477 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/131 ID: acc:123 # Обращение к полям регистратора. (ACC 123) - Код АПК: `123` #### Стандарт - [#std477: Самодостаточность регистров](https://v8std.ru/std/477/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/131) ### acc:1238 - Не заполнена всплывающая подсказка в шапке колонки табличного поля. АПК:1238 URL: https://v8std.ru/diagnostics/acc/1238/ Markdown URL: https://v8std.ru/diagnostics/acc/1238.md Source path: diagnostics/acc/1238.md Aliases: acc:1238, #acc:1238, acc 1238, acc1238, апк 1238, АПК:1238 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/444 ID: acc:1238 # Не заполнена всплывающая подсказка в шапке колонки табличного поля. (ACC 1238) - Код АПК: `1238` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/444) ### acc:1239 - Для полей ввода с установленным флагом "Автоотметка незаполненного", необходимо устанавливать флаг "Автовыбор незаполненного". АПК:1239 URL: https://v8std.ru/diagnostics/acc/1239/ Markdown URL: https://v8std.ru/diagnostics/acc/1239.md Source path: diagnostics/acc/1239.md Aliases: acc:1239, #acc:1239, acc 1239, acc1239, апк 1239, АПК:1239 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/281 ID: acc:1239 # Для полей ввода с установленным флагом "Автоотметка незаполненного", необходимо устанавливать флаг "Автовыбор незаполненного". (ACC 1239) - Код АПК: `1239` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/281) ### acc:1240 - Колонки с заведомо известной требуемой шириной не должны изменять размер. АПК:1240 URL: https://v8std.ru/diagnostics/acc/1240/ Markdown URL: https://v8std.ru/diagnostics/acc/1240.md Source path: diagnostics/acc/1240.md Aliases: acc:1240, #acc:1240, acc 1240, acc1240, апк 1240, АПК:1240 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/279 ID: acc:1240 # Колонки с заведомо известной требуемой шириной не должны изменять размер. (ACC 1240) - Код АПК: `1240` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/279) ### acc:1241 - У элемента формы неверное имя. АПК:1241 URL: https://v8std.ru/diagnostics/acc/1241/ Markdown URL: https://v8std.ru/diagnostics/acc/1241.md Source path: diagnostics/acc/1241.md Aliases: acc:1241, #acc:1241, acc 1241, acc1241, апк 1241, АПК:1241 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/443 ID: acc:1241 # У элемента формы неверное имя. (ACC 1241) - Код АПК: `1241` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/443) ### acc:1242 - Отсутствует комментарий к экспортной процедуре (функции). АПК:1242 URL: https://v8std.ru/diagnostics/acc/1242/ Markdown URL: https://v8std.ru/diagnostics/acc/1242.md Source path: diagnostics/acc/1242.md Aliases: acc:1242, #acc:1242, acc 1242, acc1242, апк 1242, АПК:1242 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/740 ID: acc:1242 # Отсутствует комментарий к экспортной процедуре (функции). (ACC 1242) - Код АПК: `1242` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/740) ### acc:1243 - Отсутствует или неверно описана секция "Описание" в комментарии к экспортной процедуре (функции). АПК:1243 URL: https://v8std.ru/diagnostics/acc/1243/ Markdown URL: https://v8std.ru/diagnostics/acc/1243.md Source path: diagnostics/acc/1243.md Aliases: acc:1243, #acc:1243, acc 1243, acc1243, апк 1243, АПК:1243 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/741 ID: acc:1243 # Отсутствует или неверно описана секция "Описание" в комментарии к экспортной процедуре (функции). (ACC 1243) - Код АПК: `1243` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/741) ### acc:1244 - Обращение к несуществующему объекту метаданных. АПК:1244 URL: https://v8std.ru/diagnostics/acc/1244/ Markdown URL: https://v8std.ru/diagnostics/acc/1244.md Source path: diagnostics/acc/1244.md Aliases: acc:1244, #acc:1244, acc 1244, acc1244, апк 1244, АПК:1244 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/366 ID: acc:1244 # Обращение к несуществующему объекту метаданных. (ACC 1244) - Код АПК: `1244` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/366) ### acc:1245 - Общий модуль, доступный на сервере и на клиенте, должен именоваться с постфиксом "КлиентСервер". АПК:1245 URL: https://v8std.ru/diagnostics/acc/1245/ Markdown URL: https://v8std.ru/diagnostics/acc/1245.md Source path: diagnostics/acc/1245.md Aliases: acc:1245, #acc:1245, acc 1245, acc1245, апк 1245, АПК:1245 Related: edt_check:v8cs:common-module-name-client-server, standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/743 ID: acc:1245 # Общий модуль, доступный на сервере и на клиенте, должен именоваться с постфиксом "КлиентСервер". (ACC 1245) - Код АПК: `1245` - Код проверки EDT: [common-module-name-client-server](https://v8std.ru/diagnostics/v8-code-style/common-module-name-client-server/) #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/743) ### acc:1248 - Ключевое слово написано не канонически. АПК:1248 URL: https://v8std.ru/diagnostics/acc/1248/ Markdown URL: https://v8std.ru/diagnostics/acc/1248.md Source path: diagnostics/acc/1248.md Aliases: acc:1248, #acc:1248, acc 1248, acc1248, апк 1248, АПК:1248 Related: standard:std441 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/387 ID: acc:1248 # Ключевое слово написано не канонически. (ACC 1248) - Код АПК: `1248` #### Стандарт - [#std441: Общие требования к построению конструкций встроенного языка](https://v8std.ru/std/441/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/387) ### acc:125 - Общий модуль недопустимого типа. АПК:125 URL: https://v8std.ru/diagnostics/acc/125/ Markdown URL: https://v8std.ru/diagnostics/acc/125.md Source path: diagnostics/acc/125.md Aliases: acc:125, #acc:125, acc 125, acc125, апк 125, АПК:125 Related: edt_check:v8cs:common-module-type, standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/469 ID: acc:125 # Общий модуль недопустимого типа. (ACC 125) - Код АПК: `125` - Код проверки EDT: [common-module-type](https://v8std.ru/diagnostics/v8-code-style/common-module-type/) #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/469) ### acc:127 - Отсутствует описание у экспортной переменной. АПК:127 URL: https://v8std.ru/diagnostics/acc/127/ Markdown URL: https://v8std.ru/diagnostics/acc/127.md Source path: diagnostics/acc/127.md Aliases: acc:127, #acc:127, acc 127, acc127, апк 127, АПК:127 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/470 ID: acc:127 # Отсутствует описание у экспортной переменной. (ACC 127) - Код АПК: `127` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/470) ### acc:128 - Отсутствует описание у переменной. АПК:128 URL: https://v8std.ru/diagnostics/acc/128/ Markdown URL: https://v8std.ru/diagnostics/acc/128.md Source path: diagnostics/acc/128.md Aliases: acc:128, #acc:128, acc 128, acc128, апк 128, АПК:128 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/291 ID: acc:128 # Отсутствует описание у переменной. (ACC 128) - Код АПК: `128` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/291) ### acc:1297 - Строка не локализована. Возможно, она видна пользователю. АПК:1297 URL: https://v8std.ru/diagnostics/acc/1297/ Markdown URL: https://v8std.ru/diagnostics/acc/1297.md Source path: diagnostics/acc/1297.md Aliases: acc:1297, #acc:1297, acc 1297, acc1297, апк 1297, АПК:1297 Related: standard:std761, standard:std762, standard:std764 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/745 ID: acc:1297 # Строка не локализована. Возможно, она видна пользователю. (ACC 1297) - Код АПК: `1297` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) - [#std764: Строковые константные выражения в коде: требования по локализации](https://v8std.ru/std/764/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/745) ### acc:1298 - Нарушен синтаксис описания локализованной строки. Должен быть "НСтр("ru='...'")" или "NStr("en='...'")". АПК:1298 URL: https://v8std.ru/diagnostics/acc/1298/ Markdown URL: https://v8std.ru/diagnostics/acc/1298.md Source path: diagnostics/acc/1298.md Aliases: acc:1298, #acc:1298, acc 1298, acc1298, апк 1298, АПК:1298 Related: standard:std761, standard:std762, standard:std764 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/746 ID: acc:1298 # Нарушен синтаксис описания локализованной строки. Должен быть "НСтр("ru='...'")" или "NStr("en='...'")". (ACC 1298) - Код АПК: `1298` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) - [#std764: Строковые константные выражения в коде: требования по локализации](https://v8std.ru/std/764/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/746) ### acc:1299 - Локализуемая строка начинается или заканчивается непечатаемым символом (например: пробел, таб, перенос). АПК:1299 URL: https://v8std.ru/diagnostics/acc/1299/ Markdown URL: https://v8std.ru/diagnostics/acc/1299.md Source path: diagnostics/acc/1299.md Aliases: acc:1299, #acc:1299, acc 1299, acc1299, апк 1299, АПК:1299 Related: standard:std761, standard:std762, standard:std764 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/747 ID: acc:1299 # Локализуемая строка начинается или заканчивается непечатаемым символом (например: пробел, таб, перенос). (ACC 1299) - Код АПК: `1299` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) - [#std764: Строковые константные выражения в коде: требования по локализации](https://v8std.ru/std/764/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/747) ### acc:1300 - В тексте запроса находится строковый литерал. АПК:1300 URL: https://v8std.ru/diagnostics/acc/1300/ Markdown URL: https://v8std.ru/diagnostics/acc/1300.md Source path: diagnostics/acc/1300.md Aliases: acc:1300, #acc:1300, acc 1300, acc1300, апк 1300, АПК:1300 Related: edt_check:v8cs:ql-camel-case-string-literal, standard:std762 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/748 ID: acc:1300 # В тексте запроса находится строковый литерал. (ACC 1300) - Код АПК: `1300` - Код проверки EDT: [ql-camel-case-string-literal](https://v8std.ru/diagnostics/v8-code-style/ql-camel-case-string-literal/) #### Стандарт - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/748) ### acc:1308 - Назначение расширения имеет ошибочное значение. АПК:1308 URL: https://v8std.ru/diagnostics/acc/1308/ Markdown URL: https://v8std.ru/diagnostics/acc/1308.md Source path: diagnostics/acc/1308.md Aliases: acc:1308, #acc:1308, acc 1308, acc1308, апк 1308, АПК:1308 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/323 ID: acc:1308 # Назначение расширения имеет ошибочное значение. (ACC 1308) - Код АПК: `1308` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/323) ### acc:1310 - Наименование объекта расширения не содержит префикса, соответствующего префиксу самого расширения. АПК:1310 URL: https://v8std.ru/diagnostics/acc/1310/ Markdown URL: https://v8std.ru/diagnostics/acc/1310.md Source path: diagnostics/acc/1310.md Aliases: acc:1310, #acc:1310, acc 1310, acc1310, апк 1310, АПК:1310 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/324 ID: acc:1310 # Наименование объекта расширения не содержит префикса, соответствующего префиксу самого расширения. (ACC 1310) - Код АПК: `1310` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/324) ### acc:1311 - Процедура (функция) в модуле объекта расширения не имеет префикса, соответствующего префиксу самого расширения. АПК:1311 URL: https://v8std.ru/diagnostics/acc/1311/ Markdown URL: https://v8std.ru/diagnostics/acc/1311.md Source path: diagnostics/acc/1311.md Aliases: acc:1311, #acc:1311, acc 1311, acc1311, апк 1311, АПК:1311 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/751 ID: acc:1311 # Процедура (функция) в модуле объекта расширения не имеет префикса, соответствующего префиксу самого расширения. (ACC 1311) - Код АПК: `1311` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/751) ### acc:1312 - Переменная в модуле объекта расширения не имеет префикса, соответствующего префиксу самого расширения. АПК:1312 URL: https://v8std.ru/diagnostics/acc/1312/ Markdown URL: https://v8std.ru/diagnostics/acc/1312.md Source path: diagnostics/acc/1312.md Aliases: acc:1312, #acc:1312, acc 1312, acc1312, апк 1312, АПК:1312 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/107 ID: acc:1312 # Переменная в модуле объекта расширения не имеет префикса, соответствующего префиксу самого расширения. (ACC 1312) - Код АПК: `1312` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/107) ### acc:1314 - Описание расширяющего метода в модуле объекта расширения отличается от расширяемого метода в модуле объекта основной конфигурации. АПК:1314 URL: https://v8std.ru/diagnostics/acc/1314/ Markdown URL: https://v8std.ru/diagnostics/acc/1314.md Source path: diagnostics/acc/1314.md Aliases: acc:1314, #acc:1314, acc 1314, acc1314, апк 1314, АПК:1314 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/108 ID: acc:1314 # Описание расширяющего метода в модуле объекта расширения отличается от расширяемого метода в модуле объекта основной конфигурации. (ACC 1314) - Код АПК: `1314` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/108) ### acc:1316 - Ошибка проверки возможности применения расширения. АПК:1316 URL: https://v8std.ru/diagnostics/acc/1316/ Markdown URL: https://v8std.ru/diagnostics/acc/1316.md Source path: diagnostics/acc/1316.md Aliases: acc:1316, #acc:1316, acc 1316, acc1316, апк 1316, АПК:1316 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/110 ID: acc:1316 # Ошибка проверки возможности применения расширения. (ACC 1316) - Код АПК: `1316` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/110) ### acc:1317 - Для объекта метаданных назначено несколько отложенных обработчиков обновления в последовательном режиме. АПК:1317 URL: https://v8std.ru/diagnostics/acc/1317/ Markdown URL: https://v8std.ru/diagnostics/acc/1317.md Source path: diagnostics/acc/1317.md Aliases: acc:1317, #acc:1317, acc 1317, acc1317, апк 1317, АПК:1317 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/755 ID: acc:1317 # Для объекта метаданных назначено несколько отложенных обработчиков обновления в последовательном режиме. (ACC 1317) - Код АПК: `1317` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/755) ### acc:1318 - Отложенный обработчик обновления в последовательном режиме для объекта одной подсистемы обрабатывает данные другой подсистемы. АПК:1318 URL: https://v8std.ru/diagnostics/acc/1318/ Markdown URL: https://v8std.ru/diagnostics/acc/1318.md Source path: diagnostics/acc/1318.md Aliases: acc:1318, #acc:1318, acc 1318, acc1318, апк 1318, АПК:1318 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/237 ID: acc:1318 # Отложенный обработчик обновления в последовательном режиме для объекта одной подсистемы обрабатывает данные другой подсистемы. (ACC 1318) - Код АПК: `1318` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/237) ### acc:1319 - После инициализации блокировки отсутствует вызов "Заблокировать()". АПК:1319 URL: https://v8std.ru/diagnostics/acc/1319/ Markdown URL: https://v8std.ru/diagnostics/acc/1319.md Source path: diagnostics/acc/1319.md Aliases: acc:1319, #acc:1319, acc 1319, acc1319, апк 1319, АПК:1319 Related: standard:std499, standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/757 ID: acc:1319 # После инициализации блокировки отсутствует вызов "Заблокировать()". (ACC 1319) - Код АПК: `1319` #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/757) ### acc:1320 - Вызов "Заблокировать()" находится вне попытки. АПК:1320 URL: https://v8std.ru/diagnostics/acc/1320/ Markdown URL: https://v8std.ru/diagnostics/acc/1320.md Source path: diagnostics/acc/1320.md Aliases: acc:1320, #acc:1320, acc 1320, acc1320, апк 1320, АПК:1320 Related: standard:std499, standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/396 ID: acc:1320 # Вызов "Заблокировать()" находится вне попытки. (ACC 1320) - Код АПК: `1320` #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/396) ### acc:1324 - Использован конструктор "Новый ЗащищенноеСоединениеOpenSSL". АПК:1324 URL: https://v8std.ru/diagnostics/acc/1324/ Markdown URL: https://v8std.ru/diagnostics/acc/1324.md Source path: diagnostics/acc/1324.md Aliases: acc:1324, #acc:1324, acc 1324, acc1324, апк 1324, АПК:1324 Related: standard:std669 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/416 ID: acc:1324 # Использован конструктор "Новый ЗащищенноеСоединениеOpenSSL". (ACC 1324) - Код АПК: `1324` #### Стандарт - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/416) ### acc:1326 - Неверно установлено значение стиля АПК:1326 URL: https://v8std.ru/diagnostics/acc/1326/ Markdown URL: https://v8std.ru/diagnostics/acc/1326.md Source path: diagnostics/acc/1326.md Aliases: acc:1326, #acc:1326, acc 1326, acc1326, апк 1326, АПК:1326 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/272 ID: acc:1326 # Неверно установлено значение стиля (ACC 1326) - Код АПК: `1326` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/272) ### acc:1327 - Отсутствует исключительная управляемая блокировка на записываемые (удаляемые) данные. АПК:1327 URL: https://v8std.ru/diagnostics/acc/1327/ Markdown URL: https://v8std.ru/diagnostics/acc/1327.md Source path: diagnostics/acc/1327.md Aliases: acc:1327, #acc:1327, acc 1327, acc1327, апк 1327, АПК:1327 Related: standard:std490, standard:std648 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/761 ID: acc:1327 # Отсутствует исключительная управляемая блокировка на записываемые (удаляемые) данные. (ACC 1327) - Код АПК: `1327` #### Стандарт - [#std490: Блокировка данных объекта для редактирования из кода](https://v8std.ru/std/490/) - [#std648: Ответственное чтение данных](https://v8std.ru/std/648/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/761) ### acc:1328 - Отсутствует разделяемая управляемая блокировка на читаемые данные. АПК:1328 URL: https://v8std.ru/diagnostics/acc/1328/ Markdown URL: https://v8std.ru/diagnostics/acc/1328.md Source path: diagnostics/acc/1328.md Aliases: acc:1328, #acc:1328, acc 1328, acc1328, апк 1328, АПК:1328 Related: standard:std490, standard:std648 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/397 ID: acc:1328 # Отсутствует разделяемая управляемая блокировка на читаемые данные. (ACC 1328) - Код АПК: `1328` #### Стандарт - [#std490: Блокировка данных объекта для редактирования из кода](https://v8std.ru/std/490/) - [#std648: Ответственное чтение данных](https://v8std.ru/std/648/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/397) ### acc:1329 - Недопустимое одновременное использование ссылочных и нессылочных типов в составном типе. АПК:1329 URL: https://v8std.ru/diagnostics/acc/1329/ Markdown URL: https://v8std.ru/diagnostics/acc/1329.md Source path: diagnostics/acc/1329.md Aliases: acc:1329, #acc:1329, acc 1329, acc1329, апк 1329, АПК:1329 Related: standard:std728 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/763 ID: acc:1329 # Недопустимое одновременное использование ссылочных и нессылочных типов в составном типе. (ACC 1329) - Код АПК: `1329` #### Стандарт - [#std728: Ограничения на использование реквизитов составного типа](https://v8std.ru/std/728/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/763) ### acc:1330 - Недопустимое использование универсального составного типа (ЛюбаяСсылка, СправочникСсылка и т.п.). АПК:1330 URL: https://v8std.ru/diagnostics/acc/1330/ Markdown URL: https://v8std.ru/diagnostics/acc/1330.md Source path: diagnostics/acc/1330.md Aliases: acc:1330, #acc:1330, acc 1330, acc1330, апк 1330, АПК:1330 Related: standard:std728 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/346 ID: acc:1330 # Недопустимое использование универсального составного типа (ЛюбаяСсылка, СправочникСсылка и т.п.). (ACC 1330) - Код АПК: `1330` #### Стандарт - [#std728: Ограничения на использование реквизитов составного типа](https://v8std.ru/std/728/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/346) ### acc:1331 - Задано конкретное значение цвета для элемента управления формы. АПК:1331 URL: https://v8std.ru/diagnostics/acc/1331/ Markdown URL: https://v8std.ru/diagnostics/acc/1331.md Source path: diagnostics/acc/1331.md Aliases: acc:1331, #acc:1331, acc 1331, acc1331, апк 1331, АПК:1331 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/765 ID: acc:1331 # Задано конкретное значение цвета для элемента управления формы. (ACC 1331) - Код АПК: `1331` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/765) ### acc:1332 - Задано конкретное значение шрифта (либо изменен параметр шрифта из стиля) для элемента управления формы. АПК:1332 URL: https://v8std.ru/diagnostics/acc/1332/ Markdown URL: https://v8std.ru/diagnostics/acc/1332.md Source path: diagnostics/acc/1332.md Aliases: acc:1332, #acc:1332, acc 1332, acc1332, апк 1332, АПК:1332 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/326 ID: acc:1332 # Задано конкретное значение шрифта (либо изменен параметр шрифта из стиля) для элемента управления формы. (ACC 1332) - Код АПК: `1332` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/326) ### acc:1333 - Для элемента стиля задано конкретное значение шрифта, цвета или рамки. АПК:1333 URL: https://v8std.ru/diagnostics/acc/1333/ Markdown URL: https://v8std.ru/diagnostics/acc/1333.md Source path: diagnostics/acc/1333.md Aliases: acc:1333, #acc:1333, acc 1333, acc1333, апк 1333, АПК:1333 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/327 ID: acc:1333 # Для элемента стиля задано конкретное значение шрифта, цвета или рамки. (ACC 1333) - Код АПК: `1333` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/327) ### acc:1334 - Устаревшая процедура (функция) ссылается на несуществующую процедуру (функцию). АПК:1334 URL: https://v8std.ru/diagnostics/acc/1334/ Markdown URL: https://v8std.ru/diagnostics/acc/1334.md Source path: diagnostics/acc/1334.md Aliases: acc:1334, #acc:1334, acc 1334, acc1334, апк 1334, АПК:1334 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/768 ID: acc:1334 # Устаревшая процедура (функция) ссылается на несуществующую процедуру (функцию). (ACC 1334) - Код АПК: `1334` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/768) ### acc:1335 - Устаревшая процедура (функция) ссылается на другую устаревшую процедуру (функцию). АПК:1335 URL: https://v8std.ru/diagnostics/acc/1335/ Markdown URL: https://v8std.ru/diagnostics/acc/1335.md Source path: diagnostics/acc/1335.md Aliases: acc:1335, #acc:1335, acc 1335, acc1335, апк 1335, АПК:1335 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/769 ID: acc:1335 # Устаревшая процедура (функция) ссылается на другую устаревшую процедуру (функцию). (ACC 1335) - Код АПК: `1335` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/769) ### acc:1336 - Устаревшая процедура (функция) ссылается на процедуру (функцию), расположенную вне области "ПрограммныйИнтерфейс". АПК:1336 URL: https://v8std.ru/diagnostics/acc/1336/ Markdown URL: https://v8std.ru/diagnostics/acc/1336.md Source path: diagnostics/acc/1336.md Aliases: acc:1336, #acc:1336, acc 1336, acc1336, апк 1336, АПК:1336 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/112 ID: acc:1336 # Устаревшая процедура (функция) ссылается на процедуру (функцию), расположенную вне области "ПрограммныйИнтерфейс". (ACC 1336) - Код АПК: `1336` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/112) ### acc:1338 - Неиспользуемый (с префиксом "Удалить") объект метаданных содержит подчиненные объекты, не относящиеся к переносу данных. АПК:1338 URL: https://v8std.ru/diagnostics/acc/1338/ Markdown URL: https://v8std.ru/diagnostics/acc/1338.md Source path: diagnostics/acc/1338.md Aliases: acc:1338, #acc:1338, acc 1338, acc1338, апк 1338, АПК:1338 Related: standard:std534 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/328 ID: acc:1338 # Неиспользуемый (с префиксом "Удалить") объект метаданных содержит подчиненные объекты, не относящиеся к переносу данных. (ACC 1338) - Код АПК: `1338` #### Стандарт - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/328) ### acc:1339 - Избыточная проверка параметра "АвтоТест". АПК:1339 URL: https://v8std.ru/diagnostics/acc/1339/ Markdown URL: https://v8std.ru/diagnostics/acc/1339.md Source path: diagnostics/acc/1339.md Aliases: acc:1339, #acc:1339, acc 1339, acc1339, апк 1339, АПК:1339 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/329 ID: acc:1339 # Избыточная проверка параметра "АвтоТест". (ACC 1339) - Код АПК: `1339` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/329) ### acc:134 - Количество параметров более 7. АПК:134 URL: https://v8std.ru/diagnostics/acc/134/ Markdown URL: https://v8std.ru/diagnostics/acc/134.md Source path: diagnostics/acc/134.md Aliases: acc:134, #acc:134, acc 134, acc134, апк 134, АПК:134 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/474 ID: acc:134 # Количество параметров более 7. (ACC 134) - Код АПК: `134` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/474) ### acc:1340 - Процедура (функция), не являющаяся обработчиком события, расположена в стандартной области обработчиков событий. АПК:1340 URL: https://v8std.ru/diagnostics/acc/1340/ Markdown URL: https://v8std.ru/diagnostics/acc/1340.md Source path: diagnostics/acc/1340.md Aliases: acc:1340, #acc:1340, acc 1340, acc1340, апк 1340, АПК:1340 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/773 ID: acc:1340 # Процедура (функция), не являющаяся обработчиком события, расположена в стандартной области обработчиков событий. (ACC 1340) - Код АПК: `1340` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/773) ### acc:1341 - Процедура (функция), являющаяся обработчиком события, расположена вне стандартной области обработчиков событий АПК:1341 URL: https://v8std.ru/diagnostics/acc/1341/ Markdown URL: https://v8std.ru/diagnostics/acc/1341.md Source path: diagnostics/acc/1341.md Aliases: acc:1341, #acc:1341, acc 1341, acc1341, апк 1341, АПК:1341 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/330 ID: acc:1341 # Процедура (функция), являющаяся обработчиком события, расположена вне стандартной области обработчиков событий (ACC 1341) - Код АПК: `1341` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/330) ### acc:1343 - Дублируется картинка. АПК:1343 URL: https://v8std.ru/diagnostics/acc/1343/ Markdown URL: https://v8std.ru/diagnostics/acc/1343.md Source path: diagnostics/acc/1343.md Aliases: acc:1343, #acc:1343, acc 1343, acc1343, апк 1343, АПК:1343 Related: standard:std440 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/775 ID: acc:1343 # Дублируется картинка. (ACC 1343) - Код АПК: `1343` #### Стандарт - [#std440: Использование дублирующего кода](https://v8std.ru/std/440/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/775) ### acc:1344 - Дублируется наименование картинки. АПК:1344 URL: https://v8std.ru/diagnostics/acc/1344/ Markdown URL: https://v8std.ru/diagnostics/acc/1344.md Source path: diagnostics/acc/1344.md Aliases: acc:1344, #acc:1344, acc 1344, acc1344, апк 1344, АПК:1344 Related: standard:std440 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/113 ID: acc:1344 # Дублируется наименование картинки. (ACC 1344) - Код АПК: `1344` #### Стандарт - [#std440: Использование дублирующего кода](https://v8std.ru/std/440/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/113) ### acc:1345 - Использование конструкции "Новый Шрифт" АПК:1345 URL: https://v8std.ru/diagnostics/acc/1345/ Markdown URL: https://v8std.ru/diagnostics/acc/1345.md Source path: diagnostics/acc/1345.md Aliases: acc:1345, #acc:1345, acc 1345, acc1345, апк 1345, АПК:1345 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/777 ID: acc:1345 # Использование конструкции "Новый Шрифт" (ACC 1345) - Код АПК: `1345` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/777) ### acc:1346 - Использование конструкции "Новый Цвет" АПК:1346 URL: https://v8std.ru/diagnostics/acc/1346/ Markdown URL: https://v8std.ru/diagnostics/acc/1346.md Source path: diagnostics/acc/1346.md Aliases: acc:1346, #acc:1346, acc 1346, acc1346, апк 1346, АПК:1346 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/778 ID: acc:1346 # Использование конструкции "Новый Цвет" (ACC 1346) - Код АПК: `1346` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/778) ### acc:1347 - Использование конструкции "Новый Рамка" АПК:1347 URL: https://v8std.ru/diagnostics/acc/1347/ Markdown URL: https://v8std.ru/diagnostics/acc/1347.md Source path: diagnostics/acc/1347.md Aliases: acc:1347, #acc:1347, acc 1347, acc1347, апк 1347, АПК:1347 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/331 ID: acc:1347 # Использование конструкции "Новый Рамка" (ACC 1347) - Код АПК: `1347` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/331) ### acc:1348 - Использован метод глобального контекста вместо процедуры общего модуля "ФайловаяСистемаКлиент" АПК:1348 URL: https://v8std.ru/diagnostics/acc/1348/ Markdown URL: https://v8std.ru/diagnostics/acc/1348.md Source path: diagnostics/acc/1348.md Aliases: acc:1348, #acc:1348, acc 1348, acc1348, апк 1348, АПК:1348 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/333 ID: acc:1348 # Использован метод глобального контекста вместо процедуры общего модуля "ФайловаяСистемаКлиент" (ACC 1348) - Код АПК: `1348` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/333) ### acc:1349 - В качестве параметра обработчика оповещения указана несуществующая процедура. АПК:1349 URL: https://v8std.ru/diagnostics/acc/1349/ Markdown URL: https://v8std.ru/diagnostics/acc/1349.md Source path: diagnostics/acc/1349.md Aliases: acc:1349, #acc:1349, acc 1349, acc1349, апк 1349, АПК:1349 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/781 ID: acc:1349 # В качестве параметра обработчика оповещения указана несуществующая процедура. (ACC 1349) - Код АПК: `1349` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/781) ### acc:1350 - В качестве параметра обработчика оповещения указана функция. АПК:1350 URL: https://v8std.ru/diagnostics/acc/1350/ Markdown URL: https://v8std.ru/diagnostics/acc/1350.md Source path: diagnostics/acc/1350.md Aliases: acc:1350, #acc:1350, acc 1350, acc1350, апк 1350, АПК:1350 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/584 ID: acc:1350 # В качестве параметра обработчика оповещения указана функция. (ACC 1350) - Код АПК: `1350` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/584) ### acc:1351 - В качестве параметра обработчика оповещения указана неэкспортная процедура. АПК:1351 URL: https://v8std.ru/diagnostics/acc/1351/ Markdown URL: https://v8std.ru/diagnostics/acc/1351.md Source path: diagnostics/acc/1351.md Aliases: acc:1351, #acc:1351, acc 1351, acc1351, апк 1351, АПК:1351 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/585 ID: acc:1351 # В качестве параметра обработчика оповещения указана неэкспортная процедура. (ACC 1351) - Код АПК: `1351` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/585) ### acc:1352 - В качестве параметра обработчика оповещения указана процедура без параметров. АПК:1352 URL: https://v8std.ru/diagnostics/acc/1352/ Markdown URL: https://v8std.ru/diagnostics/acc/1352.md Source path: diagnostics/acc/1352.md Aliases: acc:1352, #acc:1352, acc 1352, acc1352, апк 1352, АПК:1352 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/588 ID: acc:1352 # В качестве параметра обработчика оповещения указана процедура без параметров. (ACC 1352) - Код АПК: `1352` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/588) ### acc:1353 - Английский идентификатор в коде модуля на русском языке. АПК:1353 URL: https://v8std.ru/diagnostics/acc/1353/ Markdown URL: https://v8std.ru/diagnostics/acc/1353.md Source path: diagnostics/acc/1353.md Aliases: acc:1353, #acc:1353, acc 1353, acc1353, апк 1353, АПК:1353 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/115 ID: acc:1353 # Английский идентификатор в коде модуля на русском языке. (ACC 1353) - Код АПК: `1353` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/115) ### acc:1354 - Локализуемая строка состоит из нелокализуемых символов. АПК:1354 URL: https://v8std.ru/diagnostics/acc/1354/ Markdown URL: https://v8std.ru/diagnostics/acc/1354.md Source path: diagnostics/acc/1354.md Aliases: acc:1354, #acc:1354, acc 1354, acc1354, апк 1354, АПК:1354 Related: standard:std761, standard:std762, standard:std764 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/246 ID: acc:1354 # Локализуемая строка состоит из нелокализуемых символов. (ACC 1354) - Код АПК: `1354` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) - [#std764: Строковые константные выражения в коде: требования по локализации](https://v8std.ru/std/764/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/246) ### acc:1355 - Конкатенация локализуемых строк. АПК:1355 URL: https://v8std.ru/diagnostics/acc/1355/ Markdown URL: https://v8std.ru/diagnostics/acc/1355.md Source path: diagnostics/acc/1355.md Aliases: acc:1355, #acc:1355, acc 1355, acc1355, апк 1355, АПК:1355 Related: standard:std761 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/117 ID: acc:1355 # Конкатенация локализуемых строк. (ACC 1355) - Код АПК: `1355` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/117) ### acc:1356 - В качестве параметра конструктора "Новый ФорматированнаяСтрока" использована составная форматированная строка. АПК:1356 URL: https://v8std.ru/diagnostics/acc/1356/ Markdown URL: https://v8std.ru/diagnostics/acc/1356.md Source path: diagnostics/acc/1356.md Aliases: acc:1356, #acc:1356, acc 1356, acc1356, апк 1356, АПК:1356 Related: standard:std761 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/342 ID: acc:1356 # В качестве параметра конструктора "Новый ФорматированнаяСтрока" использована составная форматированная строка. (ACC 1356) - Код АПК: `1356` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/342) ### acc:1357 - В качестве параметра метода "ЧислоПрописью" используется форматированная строка с параметром "Л="("L=") . АПК:1357 URL: https://v8std.ru/diagnostics/acc/1357/ Markdown URL: https://v8std.ru/diagnostics/acc/1357.md Source path: diagnostics/acc/1357.md Aliases: acc:1357, #acc:1357, acc 1357, acc1357, апк 1357, АПК:1357 Related: standard:std761 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/590 ID: acc:1357 # В качестве параметра метода "ЧислоПрописью" используется форматированная строка с параметром "Л="("L=") . (ACC 1357) - Код АПК: `1357` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/590) ### acc:1358 - В качестве параметра метода "ПредставлениеПериода" используется форматированная строка с параметром "Л="("L=") . АПК:1358 URL: https://v8std.ru/diagnostics/acc/1358/ Markdown URL: https://v8std.ru/diagnostics/acc/1358.md Source path: diagnostics/acc/1358.md Aliases: acc:1358, #acc:1358, acc 1358, acc1358, апк 1358, АПК:1358 Related: standard:std761 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/591 ID: acc:1358 # В качестве параметра метода "ПредставлениеПериода" используется форматированная строка с параметром "Л="("L=") . (ACC 1358) - Код АПК: `1358` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/591) ### acc:1359 - В качестве параметра метода "СтрокаСЧислом" используется форматированная строка с параметром "Л="("L=") . АПК:1359 URL: https://v8std.ru/diagnostics/acc/1359/ Markdown URL: https://v8std.ru/diagnostics/acc/1359.md Source path: diagnostics/acc/1359.md Aliases: acc:1359, #acc:1359, acc 1359, acc1359, апк 1359, АПК:1359 Related: standard:std761 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/128 ID: acc:1359 # В качестве параметра метода "СтрокаСЧислом" используется форматированная строка с параметром "Л="("L=") . (ACC 1359) - Код АПК: `1359` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/128) ### acc:1360 - Некорректно описан тип элементов массива. АПК:1360 URL: https://v8std.ru/diagnostics/acc/1360/ Markdown URL: https://v8std.ru/diagnostics/acc/1360.md Source path: diagnostics/acc/1360.md Aliases: acc:1360, #acc:1360, acc 1360, acc1360, апк 1360, АПК:1360 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/592 ID: acc:1360 # Некорректно описан тип элементов массива. (ACC 1360) - Код АПК: `1360` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/592) ### acc:1361 - В макете с типом "ВнешняяКомпонента" размешен файл с другим типом. АПК:1361 URL: https://v8std.ru/diagnostics/acc/1361/ Markdown URL: https://v8std.ru/diagnostics/acc/1361.md Source path: diagnostics/acc/1361.md Aliases: acc:1361, #acc:1361, acc 1361, acc1361, апк 1361, АПК:1361 Related: standard:std766 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/129 ID: acc:1361 # В макете с типом "ВнешняяКомпонента" размешен файл с другим типом. (ACC 1361) - Код АПК: `1361` #### Стандарт - [#std766: Макеты: требования по локализации и поддержке разных языков интерфейса](https://v8std.ru/std/766/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/129) ### acc:1363 - В обработчике обновления информационной базы при записи объекта не используется метод "Библиотеки стандартных подсистем". АПК:1363 URL: https://v8std.ru/diagnostics/acc/1363/ Markdown URL: https://v8std.ru/diagnostics/acc/1363.md Source path: diagnostics/acc/1363.md Aliases: acc:1363, #acc:1363, acc 1363, acc1363, апк 1363, АПК:1363 Related: standard:std690 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/344 ID: acc:1363 # В обработчике обновления информационной базы при записи объекта не используется метод "Библиотеки стандартных подсистем". (ACC 1363) - Код АПК: `1363` #### Стандарт - [#std690: Обработчики обновления информационной базы](https://v8std.ru/std/690/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/344) ### acc:1365 - Разделитель пути файла указан вручную (необходимо использовать метод "ПолучитьРазделительПути()"). АПК:1365 URL: https://v8std.ru/diagnostics/acc/1365/ Markdown URL: https://v8std.ru/diagnostics/acc/1365.md Source path: diagnostics/acc/1365.md Aliases: acc:1365, #acc:1365, acc 1365, acc1365, апк 1365, АПК:1365 Related: standard:std723 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/594 ID: acc:1365 # Разделитель пути файла указан вручную (необходимо использовать метод "ПолучитьРазделительПути()"). (ACC 1365) - Код АПК: `1365` #### Стандарт - [#std723: Особенности разработки конфигураций для ОС Linux и macOS](https://v8std.ru/std/723/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/594) ### acc:1366 - Маска всех файлов указана вручную (необходимо использовать метод "ПолучитьМаскуВсеФайлы()"). АПК:1366 URL: https://v8std.ru/diagnostics/acc/1366/ Markdown URL: https://v8std.ru/diagnostics/acc/1366.md Source path: diagnostics/acc/1366.md Aliases: acc:1366, #acc:1366, acc 1366, acc1366, апк 1366, АПК:1366 Related: standard:std723 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/345 ID: acc:1366 # Маска всех файлов указана вручную (необходимо использовать метод "ПолучитьМаскуВсеФайлы()"). (ACC 1366) - Код АПК: `1366` #### Стандарт - [#std723: Особенности разработки конфигураций для ОС Linux и macOS](https://v8std.ru/std/723/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/345) ### acc:1367 - Отсутствует локализация при форматировании даты. АПК:1367 URL: https://v8std.ru/diagnostics/acc/1367/ Markdown URL: https://v8std.ru/diagnostics/acc/1367.md Source path: diagnostics/acc/1367.md Aliases: acc:1367, #acc:1367, acc 1367, acc1367, апк 1367, АПК:1367 Related: standard:std763 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/597 ID: acc:1367 # Отсутствует локализация при форматировании даты. (ACC 1367) - Код АПК: `1367` #### Стандарт - [#std763: Форматирование даты, числа, Булево: требования по локализации](https://v8std.ru/std/763/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/597) ### acc:1368 - Отсутствует локализация при форматировании числа. АПК:1368 URL: https://v8std.ru/diagnostics/acc/1368/ Markdown URL: https://v8std.ru/diagnostics/acc/1368.md Source path: diagnostics/acc/1368.md Aliases: acc:1368, #acc:1368, acc 1368, acc1368, апк 1368, АПК:1368 Related: standard:std763 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/604 ID: acc:1368 # Отсутствует локализация при форматировании числа. (ACC 1368) - Код АПК: `1368` #### Стандарт - [#std763: Форматирование даты, числа, Булево: требования по локализации](https://v8std.ru/std/763/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/604) ### acc:1369 - Отсутствует локализация при форматировании Булево. АПК:1369 URL: https://v8std.ru/diagnostics/acc/1369/ Markdown URL: https://v8std.ru/diagnostics/acc/1369.md Source path: diagnostics/acc/1369.md Aliases: acc:1369, #acc:1369, acc 1369, acc1369, апк 1369, АПК:1369 Related: standard:std763 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/134 ID: acc:1369 # Отсутствует локализация при форматировании Булево. (ACC 1369) - Код АПК: `1369` #### Стандарт - [#std763: Форматирование даты, числа, Булево: требования по локализации](https://v8std.ru/std/763/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/134) ### acc:1370 - В модуле устаревшего объекта содержится код. АПК:1370 URL: https://v8std.ru/diagnostics/acc/1370/ Markdown URL: https://v8std.ru/diagnostics/acc/1370.md Source path: diagnostics/acc/1370.md Aliases: acc:1370, #acc:1370, acc 1370, acc1370, апк 1370, АПК:1370 Related: standard:std534 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/135 ID: acc:1370 # В модуле устаревшего объекта содержится код. (ACC 1370) - Код АПК: `1370` #### Стандарт - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/135) ### acc:1371 - Устаревший объект включен в свойство другого объекта. АПК:1371 URL: https://v8std.ru/diagnostics/acc/1371/ Markdown URL: https://v8std.ru/diagnostics/acc/1371.md Source path: diagnostics/acc/1371.md Aliases: acc:1371, #acc:1371, acc 1371, acc1371, апк 1371, АПК:1371 Related: standard:std534 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/136 ID: acc:1371 # Устаревший объект включен в свойство другого объекта. (ACC 1371) - Код АПК: `1371` #### Стандарт - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/136) ### acc:1374 - Некорректное использование платформенного метода "Тип()". АПК:1374 URL: https://v8std.ru/diagnostics/acc/1374/ Markdown URL: https://v8std.ru/diagnostics/acc/1374.md Source path: diagnostics/acc/1374.md Aliases: acc:1374, #acc:1374, acc 1374, acc1374, апк 1374, АПК:1374 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/350 ID: acc:1374 # Некорректное использование платформенного метода "Тип()". (ACC 1374) - Код АПК: `1374` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/350) ### acc:1375 - В правах роли установлены ограничения (RLS) для устаревшего объекта метаданных. АПК:1375 URL: https://v8std.ru/diagnostics/acc/1375/ Markdown URL: https://v8std.ru/diagnostics/acc/1375.md Source path: diagnostics/acc/1375.md Aliases: acc:1375, #acc:1375, acc 1375, acc1375, апк 1375, АПК:1375 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/139 ID: acc:1375 # В правах роли установлены ограничения (RLS) для устаревшего объекта метаданных. (ACC 1375) - Код АПК: `1375` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/139) ### acc:1377 - Разыменование ссылочного поля составного типа АПК:1377 URL: https://v8std.ru/diagnostics/acc/1377/ Markdown URL: https://v8std.ru/diagnostics/acc/1377.md Source path: diagnostics/acc/1377.md Aliases: acc:1377, #acc:1377, acc 1377, acc1377, апк 1377, АПК:1377 Related: standard:std654 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/142 ID: acc:1377 # Разыменование ссылочного поля составного типа (ACC 1377) - Код АПК: `1377` #### Стандарт - [#std654: Разыменование ссылочных полей составного типа в языке запросов](https://v8std.ru/std/654/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/142) ### acc:1381 - В качестве объекта переадресации из гиперссылки "См. ..." указана устаревшая процедура (функция). АПК:1381 URL: https://v8std.ru/diagnostics/acc/1381/ Markdown URL: https://v8std.ru/diagnostics/acc/1381.md Source path: diagnostics/acc/1381.md Aliases: acc:1381, #acc:1381, acc 1381, acc1381, апк 1381, АПК:1381 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/605 ID: acc:1381 # В качестве объекта переадресации из гиперссылки "См. ..." указана устаревшая процедура (функция). (ACC 1381) - Код АПК: `1381` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/605) ### acc:1382 - В качестве объекта переадресации из гиперссылки "См. ..." указана процедура (функция), расположенная вне области "ПрограммныйИнтерфейс". АПК:1382 URL: https://v8std.ru/diagnostics/acc/1382/ Markdown URL: https://v8std.ru/diagnostics/acc/1382.md Source path: diagnostics/acc/1382.md Aliases: acc:1382, #acc:1382, acc 1382, acc1382, апк 1382, АПК:1382 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/606 ID: acc:1382 # В качестве объекта переадресации из гиперссылки "См. ..." указана процедура (функция), расположенная вне области "ПрограммныйИнтерфейс". (ACC 1382) - Код АПК: `1382` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/606) ### acc:1383 - Имя переменной, содержащей модуль, не соответствует формату "Модуль". АПК:1383 URL: https://v8std.ru/diagnostics/acc/1383/ Markdown URL: https://v8std.ru/diagnostics/acc/1383.md Source path: diagnostics/acc/1383.md Aliases: acc:1383, #acc:1383, acc 1383, acc1383, апк 1383, АПК:1383 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/611 ID: acc:1383 # Имя переменной, содержащей модуль, не соответствует формату "Модуль". (ACC 1383) - Код АПК: `1383` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/611) ### acc:1385 - Отсутствует обработчик начального заполнения предопределенных элементов (ПриНачальномЗаполненииЭлементов и др.). АПК:1385 URL: https://v8std.ru/diagnostics/acc/1385/ Markdown URL: https://v8std.ru/diagnostics/acc/1385.md Source path: diagnostics/acc/1385.md Aliases: acc:1385, #acc:1385, acc 1385, acc1385, апк 1385, АПК:1385 Related: standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/353 ID: acc:1385 # Отсутствует обработчик начального заполнения предопределенных элементов (ПриНачальномЗаполненииЭлементов и др.). (ACC 1385) - Код АПК: `1385` #### Стандарт - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/353) ### acc:1386 - Модуль не входит в подсистему, указанную в функции "ПодсистемаСуществует()". АПК:1386 URL: https://v8std.ru/diagnostics/acc/1386/ Markdown URL: https://v8std.ru/diagnostics/acc/1386.md Source path: diagnostics/acc/1386.md Aliases: acc:1386, #acc:1386, acc 1386, acc1386, апк 1386, АПК:1386 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/613 ID: acc:1386 # Модуль не входит в подсистему, указанную в функции "ПодсистемаСуществует()". (ACC 1386) - Код АПК: `1386` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/613) ### acc:1387 - Обнаружено дублирование стандартной области. АПК:1387 URL: https://v8std.ru/diagnostics/acc/1387/ Markdown URL: https://v8std.ru/diagnostics/acc/1387.md Source path: diagnostics/acc/1387.md Aliases: acc:1387, #acc:1387, acc 1387, acc1387, апк 1387, АПК:1387 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/614 ID: acc:1387 # Обнаружено дублирование стандартной области. (ACC 1387) - Код АПК: `1387` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/614) ### acc:141 - Необязательные параметры расположены перед обязательными. АПК:141 URL: https://v8std.ru/diagnostics/acc/141/ Markdown URL: https://v8std.ru/diagnostics/acc/141.md Source path: diagnostics/acc/141.md Aliases: acc:141, #acc:141, acc 141, acc141, апк 141, АПК:141 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/498 ID: acc:141 # Необязательные параметры расположены перед обязательными. (ACC 141) - Код АПК: `141` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/498) ### acc:142 - Количество необязательных параметров более 3. АПК:142 URL: https://v8std.ru/diagnostics/acc/142/ Markdown URL: https://v8std.ru/diagnostics/acc/142.md Source path: diagnostics/acc/142.md Aliases: acc:142, #acc:142, acc 142, acc142, апк 142, АПК:142 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/206 ID: acc:142 # Количество необязательных параметров более 3. (ACC 142) - Код АПК: `142` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/206) ### acc:143 - Использование функции "ТекущаяДата()". АПК:143 URL: https://v8std.ru/diagnostics/acc/143/ Markdown URL: https://v8std.ru/diagnostics/acc/143.md Source path: diagnostics/acc/143.md Aliases: acc:143, #acc:143, acc 143, acc143, апк 143, АПК:143 Related: standard:std643 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/100 ID: acc:143 # Использование функции "ТекущаяДата()". (ACC 143) - Код АПК: `143` #### Стандарт - [#std643: Работа в разных часовых поясах](https://v8std.ru/std/643/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/100) ### acc:144 - Присвоение параметру "Отказ" значения, отличного от "Истина". АПК:144 URL: https://v8std.ru/diagnostics/acc/144/ Markdown URL: https://v8std.ru/diagnostics/acc/144.md Source path: diagnostics/acc/144.md Aliases: acc:144, #acc:144, acc 144, acc144, апк 144, АПК:144 Related: standard:std686 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/386 ID: acc:144 # Присвоение параметру "Отказ" значения, отличного от "Истина". (ACC 144) - Код АПК: `144` #### Стандарт - [#std686: Работа с параметром "Отказ" в обработчиках событий](https://v8std.ru/std/686/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/386) ### acc:145 - Выключен флаг "Устанавливать права для новых объектов" или "Устанавливать права для реквизитов и табличных частей по умолчанию" у роли "Полные права". АПК:145 URL: https://v8std.ru/diagnostics/acc/145/ Markdown URL: https://v8std.ru/diagnostics/acc/145.md Source path: diagnostics/acc/145.md Aliases: acc:145, #acc:145, acc 145, acc145, апк 145, АПК:145 Related: standard:std532 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/475 ID: acc:145 # Выключен флаг "Устанавливать права для новых объектов" или "Устанавливать права для реквизитов и табличных частей по умолчанию" у роли "Полные права". (ACC 145) - Код АПК: `145` #### Стандарт - [#std532: Установка прав для новых объектов и полей объектов](https://v8std.ru/std/532/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/475) ### acc:146 - Флаг "Устанавливать права для новых объектов" должен быть включен только у роли "ПолныеПрава". АПК:146 URL: https://v8std.ru/diagnostics/acc/146/ Markdown URL: https://v8std.ru/diagnostics/acc/146.md Source path: diagnostics/acc/146.md Aliases: acc:146, #acc:146, acc 146, acc146, апк 146, АПК:146 Related: standard:std532 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/218 ID: acc:146 # Флаг "Устанавливать права для новых объектов" должен быть включен только у роли "ПолныеПрава". (ACC 146) - Код АПК: `146` #### Стандарт - [#std532: Установка прав для новых объектов и полей объектов](https://v8std.ru/std/532/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/218) ### acc:148 - Реквизит "Ссылка" динамического списка не выведен в таблицу на форме. АПК:148 URL: https://v8std.ru/diagnostics/acc/148/ Markdown URL: https://v8std.ru/diagnostics/acc/148.md Source path: diagnostics/acc/148.md Aliases: acc:148, #acc:148, acc 148, acc148, апк 148, АПК:148 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/503 ID: acc:148 # Реквизит "Ссылка" динамического списка не выведен в таблицу на форме. (ACC 148) - Код АПК: `148` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/503) ### acc:149 - У поля "Ссылка" таблицы динамического списка не отключена пользовательская видимость. АПК:149 URL: https://v8std.ru/diagnostics/acc/149/ Markdown URL: https://v8std.ru/diagnostics/acc/149.md Source path: diagnostics/acc/149.md Aliases: acc:149, #acc:149, acc 149, acc149, апк 149, АПК:149 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/504 ID: acc:149 # У поля "Ссылка" таблицы динамического списка не отключена пользовательская видимость. (ACC 149) - Код АПК: `149` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/504) ### acc:150 - Использована неправильная конструкция при установке внешней компоненты. АПК:150 URL: https://v8std.ru/diagnostics/acc/150/ Markdown URL: https://v8std.ru/diagnostics/acc/150.md Source path: diagnostics/acc/150.md Aliases: acc:150, #acc:150, acc 150, acc150, апк 150, АПК:150 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/269 ID: acc:150 # Использована неправильная конструкция при установке внешней компоненты. (ACC 150) - Код АПК: `150` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/269) ### acc:152 - В параметре "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()" имеется лишний пробел после точки. АПК:152 URL: https://v8std.ru/diagnostics/acc/152/ Markdown URL: https://v8std.ru/diagnostics/acc/152.md Source path: diagnostics/acc/152.md Aliases: acc:152, #acc:152, acc 152, acc152, апк 152, АПК:152 Related: standard:std498, standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/505 ID: acc:152 # В параметре "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()" имеется лишний пробел после точки. (ACC 152) - Код АПК: `152` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/505) ### acc:153 - Не локализован параметр "Комментарий" метода "ЗаписьЖурналаРегистрации()". АПК:153 URL: https://v8std.ru/diagnostics/acc/153/ Markdown URL: https://v8std.ru/diagnostics/acc/153.md Source path: diagnostics/acc/153.md Aliases: acc:153, #acc:153, acc 153, acc153, апк 153, АПК:153 Related: standard:std498, standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/506 ID: acc:153 # Не локализован параметр "Комментарий" метода "ЗаписьЖурналаРегистрации()". (ACC 153) - Код АПК: `153` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/506) ### acc:154 - Если в параметре "Комментарий" метода "ЗаписьЖурналаРегистрации()" указано подробное описание ошибки, то уровень журнала должен быть "Ошибка". АПК:154 URL: https://v8std.ru/diagnostics/acc/154/ Markdown URL: https://v8std.ru/diagnostics/acc/154.md Source path: diagnostics/acc/154.md Aliases: acc:154, #acc:154, acc 154, acc154, апк 154, АПК:154 Related: standard:std498, standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/507 ID: acc:154 # Если в параметре "Комментарий" метода "ЗаписьЖурналаРегистрации()" указано подробное описание ошибки, то уровень журнала должен быть "Ошибка". (ACC 154) - Код АПК: `154` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/507) ### acc:156 - Не локализован параметр "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()". АПК:156 URL: https://v8std.ru/diagnostics/acc/156/ Markdown URL: https://v8std.ru/diagnostics/acc/156.md Source path: diagnostics/acc/156.md Aliases: acc:156, #acc:156, acc 156, acc156, апк 156, АПК:156 Related: standard:std498, standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/476 ID: acc:156 # Не локализован параметр "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()". (ACC 156) - Код АПК: `156` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/476) ### acc:157 - Для параметра "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()" не задан основной язык конфигурации. АПК:157 URL: https://v8std.ru/diagnostics/acc/157/ Markdown URL: https://v8std.ru/diagnostics/acc/157.md Source path: diagnostics/acc/157.md Aliases: acc:157, #acc:157, acc 157, acc157, апк 157, АПК:157 Related: standard:std498, standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/508 ID: acc:157 # Для параметра "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()" не задан основной язык конфигурации. (ACC 157) - Код АПК: `157` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/508) ### acc:160 - У реквизита "Ссылка" динамического списка выключен признак "Использовать всегда". АПК:160 URL: https://v8std.ru/diagnostics/acc/160/ Markdown URL: https://v8std.ru/diagnostics/acc/160.md Source path: diagnostics/acc/160.md Aliases: acc:160, #acc:160, acc 160, acc160, апк 160, АПК:160 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/266 ID: acc:160 # У реквизита "Ссылка" динамического списка выключен признак "Использовать всегда". (ACC 160) - Код АПК: `160` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/266) ### acc:161 - Параметр "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()" инициализируется функцией, возращающей нелокализованную строку. АПК:161 URL: https://v8std.ru/diagnostics/acc/161/ Markdown URL: https://v8std.ru/diagnostics/acc/161.md Source path: diagnostics/acc/161.md Aliases: acc:161, #acc:161, acc 161, acc161, апк 161, АПК:161 Related: standard:std498, standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/477 ID: acc:161 # Параметр "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()" инициализируется функцией, возращающей нелокализованную строку. (ACC 161) - Код АПК: `161` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/477) ### acc:162 - Не установлено право. АПК:162 URL: https://v8std.ru/diagnostics/acc/162/ Markdown URL: https://v8std.ru/diagnostics/acc/162.md Source path: diagnostics/acc/162.md Aliases: acc:162, #acc:162, acc 162, acc162, апк 162, АПК:162 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/509 ID: acc:162 # Не установлено право. (ACC 162) - Код АПК: `162` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/509) ### acc:163 - Строка текста модуля содержит букву "ё". АПК:163 URL: https://v8std.ru/diagnostics/acc/163/ Markdown URL: https://v8std.ru/diagnostics/acc/163.md Source path: diagnostics/acc/163.md Aliases: acc:163, #acc:163, acc 163, acc163, апк 163, АПК:163 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/193 ID: acc:163 # Строка текста модуля содержит букву "ё". (ACC 163) - Код АПК: `163` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/193) ### acc:164 - Установлено право "Удаление". АПК:164 URL: https://v8std.ru/diagnostics/acc/164/ Markdown URL: https://v8std.ru/diagnostics/acc/164.md Source path: diagnostics/acc/164.md Aliases: acc:164, #acc:164, acc 164, acc164, апк 164, АПК:164 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/215 ID: acc:164 # Установлено право "Удаление". (ACC 164) - Код АПК: `164` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/215) ### acc:165 - Установлено лишнее право. АПК:165 URL: https://v8std.ru/diagnostics/acc/165/ Markdown URL: https://v8std.ru/diagnostics/acc/165.md Source path: diagnostics/acc/165.md Aliases: acc:165, #acc:165, acc 165, acc165, апк 165, АПК:165 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/216 ID: acc:165 # Установлено лишнее право. (ACC 165) - Код АПК: `165` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/216) ### acc:192 - Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных". АПК:192 URL: https://v8std.ru/diagnostics/acc/192/ Markdown URL: https://v8std.ru/diagnostics/acc/192.md Source path: diagnostics/acc/192.md Aliases: acc:192, #acc:192, acc 192, acc192, апк 192, АПК:192 Related: edt_check:v8cs:right-interactive-delete-predefined-data, standard:std488, standard:std697 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/513 ID: acc:192 # Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных". (ACC 192) - Код АПК: `192` - Код проверки EDT: [right-interactive-delete-predefined-data](https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete-predefined-data/) #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std697: Использование предопределенных элементов](https://v8std.ru/std/697/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/513) ### acc:193 - Установлено право "ИнтерактивнаяПометкаУдаленияПредопределенныхДанных". АПК:193 URL: https://v8std.ru/diagnostics/acc/193/ Markdown URL: https://v8std.ru/diagnostics/acc/193.md Source path: diagnostics/acc/193.md Aliases: acc:193, #acc:193, acc 193, acc193, апк 193, АПК:193 Related: edt_check:v8cs:right-interactive-set-deletion-mark-predefined-data, standard:std488, standard:std697 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/514 ID: acc:193 # Установлено право "ИнтерактивнаяПометкаУдаленияПредопределенныхДанных". (ACC 193) - Код АПК: `193` - Код проверки EDT: [right-interactive-set-deletion-mark-predefined-data](https://v8std.ru/diagnostics/v8-code-style/right-interactive-set-deletion-mark-predefined-data/) #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std697: Использование предопределенных элементов](https://v8std.ru/std/697/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/514) ### acc:194 - Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных". АПК:194 URL: https://v8std.ru/diagnostics/acc/194/ Markdown URL: https://v8std.ru/diagnostics/acc/194.md Source path: diagnostics/acc/194.md Aliases: acc:194, #acc:194, acc 194, acc194, апк 194, АПК:194 Related: edt_check:v8cs:right-interactive-clear-deletion-mark-predefined-data, standard:std488, standard:std697 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/515 ID: acc:194 # Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных". (ACC 194) - Код АПК: `194` - Код проверки EDT: [right-interactive-clear-deletion-mark-predefined-data](https://v8std.ru/diagnostics/v8-code-style/right-interactive-clear-deletion-mark-predefined-data/) #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std697: Использование предопределенных элементов](https://v8std.ru/std/697/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/515) ### acc:195 - Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных". АПК:195 URL: https://v8std.ru/diagnostics/acc/195/ Markdown URL: https://v8std.ru/diagnostics/acc/195.md Source path: diagnostics/acc/195.md Aliases: acc:195, #acc:195, acc 195, acc195, апк 195, АПК:195 Related: edt_check:v8cs:right-interactive-delete-marked-predefined-data, standard:std488, standard:std697 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/351 ID: acc:195 # Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных". (ACC 195) - Код АПК: `195` - Код проверки EDT: [right-interactive-delete-marked-predefined-data](https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete-marked-predefined-data/) #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std697: Использование предопределенных элементов](https://v8std.ru/std/697/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/351) ### acc:216 - Слово содержит кириллицу и латиницу. АПК:216 URL: https://v8std.ru/diagnostics/acc/216/ Markdown URL: https://v8std.ru/diagnostics/acc/216.md Source path: diagnostics/acc/216.md Aliases: acc:216, #acc:216, acc 216, acc216, апк 216, АПК:216 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/341 ID: acc:216 # Слово содержит кириллицу и латиницу. (ACC 216) - Код АПК: `216` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/341) ### acc:217 - Неправильная кодировка символа "минус". АПК:217 URL: https://v8std.ru/diagnostics/acc/217/ Markdown URL: https://v8std.ru/diagnostics/acc/217.md Source path: diagnostics/acc/217.md Aliases: acc:217, #acc:217, acc 217, acc217, апк 217, АПК:217 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/518 ID: acc:217 # Неправильная кодировка символа "минус". (ACC 217) - Код АПК: `217` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/518) ### acc:218 - Установлены все права в роли "ПолныеПрава" для объекта, не входящего в состав разделителя. АПК:218 URL: https://v8std.ru/diagnostics/acc/218/ Markdown URL: https://v8std.ru/diagnostics/acc/218.md Source path: diagnostics/acc/218.md Aliases: acc:218, #acc:218, acc 218, acc218, апк 218, АПК:218 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/519 ID: acc:218 # Установлены все права в роли "ПолныеПрава" для объекта, не входящего в состав разделителя. (ACC 218) - Код АПК: `218` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/519) ### acc:219 - Установлены все права в роли "АдминистраторСистемы" для объекта, входящего в состав разделителя. АПК:219 URL: https://v8std.ru/diagnostics/acc/219/ Markdown URL: https://v8std.ru/diagnostics/acc/219.md Source path: diagnostics/acc/219.md Aliases: acc:219, #acc:219, acc 219, acc219, апк 219, АПК:219 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/520 ID: acc:219 # Установлены все права в роли "АдминистраторСистемы" для объекта, входящего в состав разделителя. (ACC 219) - Код АПК: `219` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/520) ### acc:220 - Не установлено право в роли "АдминистраторСистемы". АПК:220 URL: https://v8std.ru/diagnostics/acc/220/ Markdown URL: https://v8std.ru/diagnostics/acc/220.md Source path: diagnostics/acc/220.md Aliases: acc:220, #acc:220, acc 220, acc220, апк 220, АПК:220 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/430 ID: acc:220 # Не установлено право в роли "АдминистраторСистемы". (ACC 220) - Код АПК: `220` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/430) ### acc:222 - Использование устаревшей процедуры. АПК:222 URL: https://v8std.ru/diagnostics/acc/222/ Markdown URL: https://v8std.ru/diagnostics/acc/222.md Source path: diagnostics/acc/222.md Aliases: acc:222, #acc:222, acc 222, acc222, апк 222, АПК:222 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/522 ID: acc:222 # Использование устаревшей процедуры. (ACC 222) - Код АПК: `222` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/522) ### acc:223 - Использование устаревшей функции. АПК:223 URL: https://v8std.ru/diagnostics/acc/223/ Markdown URL: https://v8std.ru/diagnostics/acc/223.md Source path: diagnostics/acc/223.md Aliases: acc:223, #acc:223, acc 223, acc223, апк 223, АПК:223 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/379 ID: acc:223 # Использование устаревшей функции. (ACC 223) - Код АПК: `223` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/379) ### acc:224 - Для обязательной роли установлен неправильный синоним. АПК:224 URL: https://v8std.ru/diagnostics/acc/224/ Markdown URL: https://v8std.ru/diagnostics/acc/224.md Source path: diagnostics/acc/224.md Aliases: acc:224, #acc:224, acc 224, acc224, апк 224, АПК:224 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/429 ID: acc:224 # Для обязательной роли установлен неправильный синоним. (ACC 224) - Код АПК: `224` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/429) ### acc:226 - В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении". АПК:226 URL: https://v8std.ru/diagnostics/acc/226/ Markdown URL: https://v8std.ru/diagnostics/acc/226.md Source path: diagnostics/acc/226.md Aliases: acc:226, #acc:226, acc 226, acc226, апк 226, АПК:226 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/525 ID: acc:226 # В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении". (ACC 226) - Код АПК: `226` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/525) ### acc:227 - В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при отмене проведения". АПК:227 URL: https://v8std.ru/diagnostics/acc/227/ Markdown URL: https://v8std.ru/diagnostics/acc/227.md Source path: diagnostics/acc/227.md Aliases: acc:227, #acc:227, acc 227, acc227, апк 227, АПК:227 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/420 ID: acc:227 # В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при отмене проведения". (ACC 227) - Код АПК: `227` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/420) ### acc:228 - В функциональной опции не установлен флаг "Привилегированный режим при получении". АПК:228 URL: https://v8std.ru/diagnostics/acc/228/ Markdown URL: https://v8std.ru/diagnostics/acc/228.md Source path: diagnostics/acc/228.md Aliases: acc:228, #acc:228, acc 228, acc228, апк 228, АПК:228 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/207 ID: acc:228 # В функциональной опции не установлен флаг "Привилегированный режим при получении". (ACC 228) - Код АПК: `228` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/207) ### acc:229 - В роли есть право на изменение регистра, подчиненного регистратору. АПК:229 URL: https://v8std.ru/diagnostics/acc/229/ Markdown URL: https://v8std.ru/diagnostics/acc/229.md Source path: diagnostics/acc/229.md Aliases: acc:229, #acc:229, acc 229, acc229, апк 229, АПК:229 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/421 ID: acc:229 # В роли есть право на изменение регистра, подчиненного регистратору. (ACC 229) - Код АПК: `229` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/421) ### acc:232 - Неверно установлены права на константу. АПК:232 URL: https://v8std.ru/diagnostics/acc/232/ Markdown URL: https://v8std.ru/diagnostics/acc/232.md Source path: diagnostics/acc/232.md Aliases: acc:232, #acc:232, acc 232, acc232, апк 232, АПК:232 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/528 ID: acc:232 # Неверно установлены права на константу. (ACC 232) - Код АПК: `232` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/528) ### acc:233 - Для подсистемы верхнего уровня, отображаемой в командном интерфейсе, не найдено роли. АПК:233 URL: https://v8std.ru/diagnostics/acc/233/ Markdown URL: https://v8std.ru/diagnostics/acc/233.md Source path: diagnostics/acc/233.md Aliases: acc:233, #acc:233, acc 233, acc233, апк 233, АПК:233 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/529 ID: acc:233 # Для подсистемы верхнего уровня, отображаемой в командном интерфейсе, не найдено роли. (ACC 233) - Код АПК: `233` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/529) ### acc:234 - В роли не установлено право просмотра для подсистемы. АПК:234 URL: https://v8std.ru/diagnostics/acc/234/ Markdown URL: https://v8std.ru/diagnostics/acc/234.md Source path: diagnostics/acc/234.md Aliases: acc:234, #acc:234, acc 234, acc234, апк 234, АПК:234 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/210 ID: acc:234 # В роли не установлено право просмотра для подсистемы. (ACC 234) - Код АПК: `234` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/210) ### acc:235 - Орфографическая ошибка в имени элемента формы. АПК:235 URL: https://v8std.ru/diagnostics/acc/235/ Markdown URL: https://v8std.ru/diagnostics/acc/235.md Source path: diagnostics/acc/235.md Aliases: acc:235, #acc:235, acc 235, acc235, апк 235, АПК:235 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/71 ID: acc:235 # Орфографическая ошибка в имени элемента формы. (ACC 235) - Код АПК: `235` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/71) ### acc:236 - Неверно образован синоним объекта с префиксом "Удалить". АПК:236 URL: https://v8std.ru/diagnostics/acc/236/ Markdown URL: https://v8std.ru/diagnostics/acc/236.md Source path: diagnostics/acc/236.md Aliases: acc:236, #acc:236, acc 236, acc236, апк 236, АПК:236 Related: standard:std534 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/478 ID: acc:236 # Неверно образован синоним объекта с префиксом "Удалить". (ACC 236) - Код АПК: `236` #### Стандарт - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/478) ### acc:239 - В модуле должны быть определены стандартные области. АПК:239 URL: https://v8std.ru/diagnostics/acc/239/ Markdown URL: https://v8std.ru/diagnostics/acc/239.md Source path: diagnostics/acc/239.md Aliases: acc:239, #acc:239, acc 239, acc239, апк 239, АПК:239 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/532 ID: acc:239 # В модуле должны быть определены стандартные области. (ACC 239) - Код АПК: `239` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/532) ### acc:240 - Код в модуле с (возможным) программным интерфейсом размещен вне стандартных областей. АПК:240 URL: https://v8std.ru/diagnostics/acc/240/ Markdown URL: https://v8std.ru/diagnostics/acc/240.md Source path: diagnostics/acc/240.md Aliases: acc:240, #acc:240, acc 240, acc240, апк 240, АПК:240 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/533 ID: acc:240 # Код в модуле с (возможным) программным интерфейсом размещен вне стандартных областей. (ACC 240) - Код АПК: `240` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/533) ### acc:241 - Код размещен вне стандартных областей. АПК:241 URL: https://v8std.ru/diagnostics/acc/241/ Markdown URL: https://v8std.ru/diagnostics/acc/241.md Source path: diagnostics/acc/241.md Aliases: acc:241, #acc:241, acc 241, acc241, апк 241, АПК:241 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/373 ID: acc:241 # Код размещен вне стандартных областей. (ACC 241) - Код АПК: `241` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/373) ### acc:242 - Не установлен признак переключения для интерфейса. АПК:242 URL: https://v8std.ru/diagnostics/acc/242/ Markdown URL: https://v8std.ru/diagnostics/acc/242.md Source path: diagnostics/acc/242.md Aliases: acc:242, #acc:242, acc 242, acc242, апк 242, АПК:242 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/274 ID: acc:242 # Не установлен признак переключения для интерфейса. (ACC 242) - Код АПК: `242` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/274) ### acc:244 - Длинные комментарии должны начинаться с большой буквы. АПК:244 URL: https://v8std.ru/diagnostics/acc/244/ Markdown URL: https://v8std.ru/diagnostics/acc/244.md Source path: diagnostics/acc/244.md Aliases: acc:244, #acc:244, acc 244, acc244, апк 244, АПК:244 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/536 ID: acc:244 # Длинные комментарии должны начинаться с большой буквы. (ACC 244) - Код АПК: `244` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/536) ### acc:246 - Нет пробела в начале комментария. АПК:246 URL: https://v8std.ru/diagnostics/acc/246/ Markdown URL: https://v8std.ru/diagnostics/acc/246.md Source path: diagnostics/acc/246.md Aliases: acc:246, #acc:246, acc 246, acc246, апк 246, АПК:246 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/368 ID: acc:246 # Нет пробела в начале комментария. (ACC 246) - Код АПК: `246` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/368) ### acc:247 - Имена переменных не должны состоять из одного символа. АПК:247 URL: https://v8std.ru/diagnostics/acc/247/ Markdown URL: https://v8std.ru/diagnostics/acc/247.md Source path: diagnostics/acc/247.md Aliases: acc:247, #acc:247, acc 247, acc247, апк 247, АПК:247 Related: standard:std454 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/538 ID: acc:247 # Имена переменных не должны состоять из одного символа. (ACC 247) - Код АПК: `247` #### Стандарт - [#std454: Правила образования имен переменных](https://v8std.ru/std/454/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/538) ### acc:248 - Имена переменных не должны начинаться с подчеркивания. АПК:248 URL: https://v8std.ru/diagnostics/acc/248/ Markdown URL: https://v8std.ru/diagnostics/acc/248.md Source path: diagnostics/acc/248.md Aliases: acc:248, #acc:248, acc 248, acc248, апк 248, АПК:248 Related: standard:std454 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/385 ID: acc:248 # Имена переменных не должны начинаться с подчеркивания. (ACC 248) - Код АПК: `248` #### Стандарт - [#std454: Правила образования имен переменных](https://v8std.ru/std/454/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/385) ### acc:249 - Оператор "Перейти" не поддерживается платформой "1С:Предприятие" в режиме веб-клиента. АПК:249 URL: https://v8std.ru/diagnostics/acc/249/ Markdown URL: https://v8std.ru/diagnostics/acc/249.md Source path: diagnostics/acc/249.md Aliases: acc:249, #acc:249, acc 249, acc249, апк 249, АПК:249 Related: standard:std547 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/399 ID: acc:249 # Оператор "Перейти" не поддерживается платформой "1С:Предприятие" в режиме веб-клиента. (ACC 249) - Код АПК: `249` #### Стандарт - [#std547: Ограничение на использование оператора Перейти](https://v8std.ru/std/547/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/399) ### acc:250 - Найдена экспортная процедура или функция в модуле команды. АПК:250 URL: https://v8std.ru/diagnostics/acc/250/ Markdown URL: https://v8std.ru/diagnostics/acc/250.md Source path: diagnostics/acc/250.md Aliases: acc:250, #acc:250, acc 250, acc250, апк 250, АПК:250 Related: standard:std544 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/402 ID: acc:250 # Найдена экспортная процедура или функция в модуле команды. (ACC 250) - Код АПК: `250` #### Стандарт - [#std544: Ограничения на использование экспортных процедур и функций](https://v8std.ru/std/544/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/402) ### acc:251 - Обязательная роль не установлена как основная роль конфигурации. АПК:251 URL: https://v8std.ru/diagnostics/acc/251/ Markdown URL: https://v8std.ru/diagnostics/acc/251.md Source path: diagnostics/acc/251.md Aliases: acc:251, #acc:251, acc 251, acc251, апк 251, АПК:251 Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/542 ID: acc:251 # Обязательная роль не установлена как основная роль конфигурации. (ACC 251) - Код АПК: `251` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/542) ### acc:254 - Ключевое слово запроса написано не канонически. АПК:254 URL: https://v8std.ru/diagnostics/acc/254/ Markdown URL: https://v8std.ru/diagnostics/acc/254.md Source path: diagnostics/acc/254.md Aliases: acc:254, #acc:254, acc 254, acc254, апк 254, АПК:254 Related: standard:std437 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/152 ID: acc:254 # Ключевое слово запроса написано не канонически. (ACC 254) - Код АПК: `254` #### Стандарт - [#std437: Оформление текстов запросов](https://v8std.ru/std/437/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/152) ### acc:256 - В объекте "Подписка на событие" использован обработчик из общего модуля, не являющегося клиент-серверным. АПК:256 URL: https://v8std.ru/diagnostics/acc/256/ Markdown URL: https://v8std.ru/diagnostics/acc/256.md Source path: diagnostics/acc/256.md Aliases: acc:256, #acc:256, acc 256, acc256, апк 256, АПК:256 Related: standard:std680 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/544 ID: acc:256 # В объекте "Подписка на событие" использован обработчик из общего модуля, не являющегося клиент-серверным. (ACC 256) - Код АПК: `256` #### Стандарт - [#std680: Поддержка толстого клиента, управляемое приложение, клиент-сервер](https://v8std.ru/std/680/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/544) ### acc:259 - Имя неверно образовано из синонима с префиксом "(не используется)". АПК:259 URL: https://v8std.ru/diagnostics/acc/259/ Markdown URL: https://v8std.ru/diagnostics/acc/259.md Source path: diagnostics/acc/259.md Aliases: acc:259, #acc:259, acc 259, acc259, апк 259, АПК:259 Related: standard:std534 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/137 ID: acc:259 # Имя неверно образовано из синонима с префиксом "(не используется)". (ACC 259) - Код АПК: `259` #### Стандарт - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/137) ### acc:263 - Неверно снят флажок "Включать в командный интерфейс". Для подсистемы, включенной в пользовательский командный интерфейс, он должен быть установлен. АПК:263 URL: https://v8std.ru/diagnostics/acc/263/ Markdown URL: https://v8std.ru/diagnostics/acc/263.md Source path: diagnostics/acc/263.md Aliases: acc:263, #acc:263, acc 263, acc263, апк 263, АПК:263 Related: standard:std543 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/479 ID: acc:263 # Неверно снят флажок "Включать в командный интерфейс". Для подсистемы, включенной в пользовательский командный интерфейс, он должен быть установлен. (ACC 263) - Код АПК: `263` #### Стандарт - [#std543: Использование подсистем](https://v8std.ru/std/543/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/479) ### acc:264 - Неверно установлен флажок "Включать в командный интерфейс". Для функциональной подсистемы он должен быть снят. АПК:264 URL: https://v8std.ru/diagnostics/acc/264/ Markdown URL: https://v8std.ru/diagnostics/acc/264.md Source path: diagnostics/acc/264.md Aliases: acc:264, #acc:264, acc 264, acc264, апк 264, АПК:264 Related: standard:std543 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/480 ID: acc:264 # Неверно установлен флажок "Включать в командный интерфейс". Для функциональной подсистемы он должен быть снят. (ACC 264) - Код АПК: `264` #### Стандарт - [#std543: Использование подсистем](https://v8std.ru/std/543/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/480) ### acc:265 - Орфографическая ошибка в имени объекта метаданных. АПК:265 URL: https://v8std.ru/diagnostics/acc/265/ Markdown URL: https://v8std.ru/diagnostics/acc/265.md Source path: diagnostics/acc/265.md Aliases: acc:265, #acc:265, acc 265, acc265, апк 265, АПК:265 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/79 ID: acc:265 # Орфографическая ошибка в имени объекта метаданных. (ACC 265) - Код АПК: `265` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/79) ### acc:267 - Количество параметров вызова процедуры или функции не соответствует количеству параметров ее определения. АПК:267 URL: https://v8std.ru/diagnostics/acc/267/ Markdown URL: https://v8std.ru/diagnostics/acc/267.md Source path: diagnostics/acc/267.md Aliases: acc:267, #acc:267, acc 267, acc267, апк 267, АПК:267 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/481 ID: acc:267 # Количество параметров вызова процедуры или функции не соответствует количеству параметров ее определения. (ACC 267) - Код АПК: `267` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/481) ### acc:269 - Обращение к несуществующей подсистеме. АПК:269 URL: https://v8std.ru/diagnostics/acc/269/ Markdown URL: https://v8std.ru/diagnostics/acc/269.md Source path: diagnostics/acc/269.md Aliases: acc:269, #acc:269, acc 269, acc269, апк 269, АПК:269 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/484 ID: acc:269 # Обращение к несуществующей подсистеме. (ACC 269) - Код АПК: `269` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/484) ### acc:271 - Обращение к несуществующему общему модулю. АПК:271 URL: https://v8std.ru/diagnostics/acc/271/ Markdown URL: https://v8std.ru/diagnostics/acc/271.md Source path: diagnostics/acc/271.md Aliases: acc:271, #acc:271, acc 271, acc271, апк 271, АПК:271 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/485 ID: acc:271 # Обращение к несуществующему общему модулю. (ACC 271) - Код АПК: `271` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/485) ### acc:273 - В структуре модуля присутствуют пустые области. АПК:273 URL: https://v8std.ru/diagnostics/acc/273/ Markdown URL: https://v8std.ru/diagnostics/acc/273.md Source path: diagnostics/acc/273.md Aliases: acc:273, #acc:273, acc 273, acc273, апк 273, АПК:273 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/486 ID: acc:273 # В структуре модуля присутствуют пустые области. (ACC 273) - Код АПК: `273` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/486) ### acc:274 - Неправильный порядок стандартных областей в коде. АПК:274 URL: https://v8std.ru/diagnostics/acc/274/ Markdown URL: https://v8std.ru/diagnostics/acc/274.md Source path: diagnostics/acc/274.md Aliases: acc:274, #acc:274, acc 274, acc274, апк 274, АПК:274 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/488 ID: acc:274 # Неправильный порядок стандартных областей в коде. (ACC 274) - Код АПК: `274` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/488) ### acc:275 - Обращение к несуществующему элементу формы. АПК:275 URL: https://v8std.ru/diagnostics/acc/275/ Markdown URL: https://v8std.ru/diagnostics/acc/275.md Source path: diagnostics/acc/275.md Aliases: acc:275, #acc:275, acc 275, acc275, апк 275, АПК:275 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/264 ID: acc:275 # Обращение к несуществующему элементу формы. (ACC 275) - Код АПК: `275` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/264) ### acc:277 - Недопустимый вызов служебной процедуры или функции другой подсистемы. АПК:277 URL: https://v8std.ru/diagnostics/acc/277/ Markdown URL: https://v8std.ru/diagnostics/acc/277.md Source path: diagnostics/acc/277.md Aliases: acc:277, #acc:277, acc 277, acc277, апк 277, АПК:277 Related: standard:std467, standard:std551, standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/489 ID: acc:277 # Недопустимый вызов служебной процедуры или функции другой подсистемы. (ACC 277) - Код АПК: `277` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных](https://v8std.ru/std/551/) - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/489) ### acc:278 - Недопустимый вызов служебного программного интерфейса. АПК:278 URL: https://v8std.ru/diagnostics/acc/278/ Markdown URL: https://v8std.ru/diagnostics/acc/278.md Source path: diagnostics/acc/278.md Aliases: acc:278, #acc:278, acc 278, acc278, апк 278, АПК:278 Related: standard:std467, standard:std551, standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/98 ID: acc:278 # Недопустимый вызов служебного программного интерфейса. (ACC 278) - Код АПК: `278` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных](https://v8std.ru/std/551/) - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/98) ### acc:280 - Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении. АПК:280 URL: https://v8std.ru/diagnostics/acc/280/ Markdown URL: https://v8std.ru/diagnostics/acc/280.md Source path: diagnostics/acc/280.md Aliases: acc:280, #acc:280, acc 280, acc280, апк 280, АПК:280 Related: edt_check:v8cs:empty-except-statement, standard:std499 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/394 ID: acc:280 # Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении. (ACC 280) - Код АПК: `280` - Код проверки EDT: [empty-except-statement](https://v8std.ru/diagnostics/v8-code-style/empty-except-statement/) #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/394) ### acc:282 - Закомментированный код или отсутствие пробела в комментарии после знака "//". АПК:282 URL: https://v8std.ru/diagnostics/acc/282/ Markdown URL: https://v8std.ru/diagnostics/acc/282.md Source path: diagnostics/acc/282.md Aliases: acc:282, #acc:282, acc 282, acc282, апк 282, АПК:282 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/490 ID: acc:282 # Закомментированный код или отсутствие пробела в комментарии после знака "//". (ACC 282) - Код АПК: `282` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/490) ### acc:283 - Обращение к несуществующей роли. АПК:283 URL: https://v8std.ru/diagnostics/acc/283/ Markdown URL: https://v8std.ru/diagnostics/acc/283.md Source path: diagnostics/acc/283.md Aliases: acc:283, #acc:283, acc 283, acc283, апк 283, АПК:283 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/546 ID: acc:283 # Обращение к несуществующей роли. (ACC 283) - Код АПК: `283` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/546) ### acc:284 - В тексте модуля содержатся служебные комментарии. АПК:284 URL: https://v8std.ru/diagnostics/acc/284/ Markdown URL: https://v8std.ru/diagnostics/acc/284.md Source path: diagnostics/acc/284.md Aliases: acc:284, #acc:284, acc 284, acc284, апк 284, АПК:284 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/195 ID: acc:284 # В тексте модуля содержатся служебные комментарии. (ACC 284) - Код АПК: `284` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/195) ### acc:285 - Закомментированный код содержит запрещенный символ. АПК:285 URL: https://v8std.ru/diagnostics/acc/285/ Markdown URL: https://v8std.ru/diagnostics/acc/285.md Source path: diagnostics/acc/285.md Aliases: acc:285, #acc:285, acc 285, acc285, апк 285, АПК:285 Related: standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/197 ID: acc:285 # Закомментированный код содержит запрещенный символ. (ACC 285) - Код АПК: `285` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/197) ### acc:286 - Стандартная область является вложенной. АПК:286 URL: https://v8std.ru/diagnostics/acc/286/ Markdown URL: https://v8std.ru/diagnostics/acc/286.md Source path: diagnostics/acc/286.md Aliases: acc:286, #acc:286, acc 286, acc286, апк 286, АПК:286 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/374 ID: acc:286 # Стандартная область является вложенной. (ACC 286) - Код АПК: `286` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/374) ### acc:287 - Обращение к несуществующей процедуре (функции). АПК:287 URL: https://v8std.ru/diagnostics/acc/287/ Markdown URL: https://v8std.ru/diagnostics/acc/287.md Source path: diagnostics/acc/287.md Aliases: acc:287, #acc:287, acc 287, acc287, апк 287, АПК:287 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/380 ID: acc:287 # Обращение к несуществующей процедуре (функции). (ACC 287) - Код АПК: `287` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/380) ### acc:288 - Устаревшая функция содержит код. АПК:288 URL: https://v8std.ru/diagnostics/acc/288/ Markdown URL: https://v8std.ru/diagnostics/acc/288.md Source path: diagnostics/acc/288.md Aliases: acc:288, #acc:288, acc 288, acc288, апк 288, АПК:288 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/549 ID: acc:288 # Устаревшая функция содержит код. (ACC 288) - Код АПК: `288` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/549) ### acc:289 - Устаревшая процедура содержит код. АПК:289 URL: https://v8std.ru/diagnostics/acc/289/ Markdown URL: https://v8std.ru/diagnostics/acc/289.md Source path: diagnostics/acc/289.md Aliases: acc:289, #acc:289, acc 289, acc289, апк 289, АПК:289 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/205 ID: acc:289 # Устаревшая процедура содержит код. (ACC 289) - Код АПК: `289` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/205) ### acc:290 - Неверно установлены права в роли для чтения. АПК:290 URL: https://v8std.ru/diagnostics/acc/290/ Markdown URL: https://v8std.ru/diagnostics/acc/290.md Source path: diagnostics/acc/290.md Aliases: acc:290, #acc:290, acc 290, acc290, апк 290, АПК:290 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/551 ID: acc:290 # Неверно установлены права в роли для чтения. (ACC 290) - Код АПК: `290` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/551) ### acc:291 - Неверно установлены права в роли для изменения. АПК:291 URL: https://v8std.ru/diagnostics/acc/291/ Markdown URL: https://v8std.ru/diagnostics/acc/291.md Source path: diagnostics/acc/291.md Aliases: acc:291, #acc:291, acc 291, acc291, апк 291, АПК:291 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/422 ID: acc:291 # Неверно установлены права в роли для изменения. (ACC 291) - Код АПК: `291` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/422) ### acc:293 - В конструкторе объекта типа "Структура" указано более 3-х значений свойств. АПК:293 URL: https://v8std.ru/diagnostics/acc/293/ Markdown URL: https://v8std.ru/diagnostics/acc/293.md Source path: diagnostics/acc/293.md Aliases: acc:293, #acc:293, acc 293, acc293, апк 293, АПК:293 Related: edt_check:v8cs:structure-consructor-too-many-keys, standard:std640, standard:std693 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/553 ID: acc:293 # В конструкторе объекта типа "Структура" указано более 3-х значений свойств. (ACC 293) - Код АПК: `293` - Код проверки EDT: [structure-consructor-too-many-keys](https://v8std.ru/diagnostics/v8-code-style/structure-consructor-too-many-keys/) #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) - [#std693: Использование объектов типа Структура](https://v8std.ru/std/693/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/553) ### acc:294 - В конструкторе объекта типа "Структура" использован конструктор другого объекта с параметрами. АПК:294 URL: https://v8std.ru/diagnostics/acc/294/ Markdown URL: https://v8std.ru/diagnostics/acc/294.md Source path: diagnostics/acc/294.md Aliases: acc:294, #acc:294, acc 294, acc294, апк 294, АПК:294 Related: standard:std640, standard:std693 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/554 ID: acc:294 # В конструкторе объекта типа "Структура" использован конструктор другого объекта с параметрами. (ACC 294) - Код АПК: `294` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) - [#std693: Использование объектов типа Структура](https://v8std.ru/std/693/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/554) ### acc:295 - В конструкторе объекта типа "Структура" использован вызов функции с количеством параметров более 3-х. АПК:295 URL: https://v8std.ru/diagnostics/acc/295/ Markdown URL: https://v8std.ru/diagnostics/acc/295.md Source path: diagnostics/acc/295.md Aliases: acc:295, #acc:295, acc 295, acc295, апк 295, АПК:295 Related: standard:std640, standard:std693 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/382 ID: acc:295 # В конструкторе объекта типа "Структура" использован вызов функции с количеством параметров более 3-х. (ACC 295) - Код АПК: `295` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) - [#std693: Использование объектов типа Структура](https://v8std.ru/std/693/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/382) ### acc:299 - Возможно, неиспользуемая экспортная процедура (функция). АПК:299 URL: https://v8std.ru/diagnostics/acc/299/ Markdown URL: https://v8std.ru/diagnostics/acc/299.md Source path: diagnostics/acc/299.md Aliases: acc:299, #acc:299, acc 299, acc299, апк 299, АПК:299 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/493 ID: acc:299 # Возможно, неиспользуемая экспортная процедура (функция). (ACC 299) - Код АПК: `299` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/493) ### acc:302 - В начале процедуры обработки регламентного задания отсутствует вызов процедуры "ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();". АПК:302 URL: https://v8std.ru/diagnostics/acc/302/ Markdown URL: https://v8std.ru/diagnostics/acc/302.md Source path: diagnostics/acc/302.md Aliases: acc:302, #acc:302, acc 302, acc302, апк 302, АПК:302 Related: standard:std540 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/557 ID: acc:302 # В начале процедуры обработки регламентного задания отсутствует вызов процедуры "ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();". (ACC 302) - Код АПК: `302` #### Стандарт - [#std540: Общие требования к регламентным заданиям](https://v8std.ru/std/540/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/557) ### acc:304 - Неверно установлено значение свойства "ОбновлениеПредопределенныхДанных". АПК:304 URL: https://v8std.ru/diagnostics/acc/304/ Markdown URL: https://v8std.ru/diagnostics/acc/304.md Source path: diagnostics/acc/304.md Aliases: acc:304, #acc:304, acc 304, acc304, апк 304, АПК:304 Related: standard:std697 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/495 ID: acc:304 # Неверно установлено значение свойства "ОбновлениеПредопределенныхДанных". (ACC 304) - Код АПК: `304` #### Стандарт - [#std697: Использование предопределенных элементов](https://v8std.ru/std/697/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/495) ### acc:305 - Программный вызов метода "УстановитьОбновлениеПредопределенныхДанных" используется для переключения режима "ОбновлениеПредопределенныхДанных". АПК:305 URL: https://v8std.ru/diagnostics/acc/305/ Markdown URL: https://v8std.ru/diagnostics/acc/305.md Source path: diagnostics/acc/305.md Aliases: acc:305, #acc:305, acc 305, acc305, апк 305, АПК:305 Related: standard:std697 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/141 ID: acc:305 # Программный вызов метода "УстановитьОбновлениеПредопределенныхДанных" используется для переключения режима "ОбновлениеПредопределенныхДанных". (ACC 305) - Код АПК: `305` #### Стандарт - [#std697: Использование предопределенных элементов](https://v8std.ru/std/697/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/141) ### acc:307 - Название процедуры (функции) содержит описание типов принимаемых параметров или возвращаемых значений. АПК:307 URL: https://v8std.ru/diagnostics/acc/307/ Markdown URL: https://v8std.ru/diagnostics/acc/307.md Source path: diagnostics/acc/307.md Aliases: acc:307, #acc:307, acc 307, acc307, апк 307, АПК:307 Related: standard:std647 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/203 ID: acc:307 # Название процедуры (функции) содержит описание типов принимаемых параметров или возвращаемых значений. (ACC 307) - Код АПК: `307` #### Стандарт - [#std647: Имена процедур и функций](https://v8std.ru/std/647/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/203) ### acc:311 - Длина названия раздела превышает 35 символов. АПК:311 URL: https://v8std.ru/diagnostics/acc/311/ Markdown URL: https://v8std.ru/diagnostics/acc/311.md Source path: diagnostics/acc/311.md Aliases: acc:311, #acc:311, acc 311, acc311, апк 311, АПК:311 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/432 ID: acc:311 # Длина названия раздела превышает 35 символов. (ACC 311) - Код АПК: `311` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/432) ### acc:313 - Длина названия команды превышает 38 символов. АПК:313 URL: https://v8std.ru/diagnostics/acc/313/ Markdown URL: https://v8std.ru/diagnostics/acc/313.md Source path: diagnostics/acc/313.md Aliases: acc:313, #acc:313, acc 313, acc313, апк 313, АПК:313 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/256 ID: acc:313 # Длина названия команды превышает 38 символов. (ACC 313) - Код АПК: `313` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/256) ### acc:319 - Периодичность выполнения регламентного задания меньше одной минуты. АПК:319 URL: https://v8std.ru/diagnostics/acc/319/ Markdown URL: https://v8std.ru/diagnostics/acc/319.md Source path: diagnostics/acc/319.md Aliases: acc:319, #acc:319, acc 319, acc319, апк 319, АПК:319 Related: standard:std402 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/151 ID: acc:319 # Периодичность выполнения регламентного задания меньше одной минуты. (ACC 319) - Код АПК: `319` #### Стандарт - [#std402: Настройка расписания регламентных заданий](https://v8std.ru/std/402/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/151) ### acc:320 - НСтр() в выражении параметра макета. Значение параметра нужно задавать с помощью НСтр() не в колонке "Выражение", а в модуле отчета. АПК:320 URL: https://v8std.ru/diagnostics/acc/320/ Markdown URL: https://v8std.ru/diagnostics/acc/320.md Source path: diagnostics/acc/320.md Aliases: acc:320, #acc:320, acc 320, acc320, апк 320, АПК:320 Related: standard:std762 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/242 ID: acc:320 # НСтр() в выражении параметра макета. Значение параметра нужно задавать с помощью НСтр() не в колонке "Выражение", а в модуле отчета. (ACC 320) - Код АПК: `320` #### Стандарт - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/242) ### acc:321 - Термин "1C:Предприятие" ошибочно задан с латинской "C". АПК:321 URL: https://v8std.ru/diagnostics/acc/321/ Markdown URL: https://v8std.ru/diagnostics/acc/321.md Source path: diagnostics/acc/321.md Aliases: acc:321, #acc:321, acc 321, acc321, апк 321, АПК:321 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/560 ID: acc:321 # Термин "1C:Предприятие" ошибочно задан с латинской "C". (ACC 321) - Код АПК: `321` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/560) ### acc:323 - Орфографическая ошибка в заголовке команды формы. АПК:323 URL: https://v8std.ru/diagnostics/acc/323/ Markdown URL: https://v8std.ru/diagnostics/acc/323.md Source path: diagnostics/acc/323.md Aliases: acc:323, #acc:323, acc 323, acc323, апк 323, АПК:323 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/561 ID: acc:323 # Орфографическая ошибка в заголовке команды формы. (ACC 323) - Код АПК: `323` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/561) ### acc:324 - Орфографическая ошибка в подсказке команды формы. АПК:324 URL: https://v8std.ru/diagnostics/acc/324/ Markdown URL: https://v8std.ru/diagnostics/acc/324.md Source path: diagnostics/acc/324.md Aliases: acc:324, #acc:324, acc 324, acc324, апк 324, АПК:324 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/562 ID: acc:324 # Орфографическая ошибка в подсказке команды формы. (ACC 324) - Код АПК: `324` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/562) ### acc:325 - Нарушена схема работы с транзакциями: отсутствует вызов "НачатьТранзакцию()", хотя вызываются "ЗафиксироватьТранзакцию()"/"ОтменитьТранзакцию()". АПК:325 URL: https://v8std.ru/diagnostics/acc/325/ Markdown URL: https://v8std.ru/diagnostics/acc/325.md Source path: diagnostics/acc/325.md Aliases: acc:325, #acc:325, acc 325, acc325, апк 325, АПК:325 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/563 ID: acc:325 # Нарушена схема работы с транзакциями: отсутствует вызов "НачатьТранзакцию()", хотя вызываются "ЗафиксироватьТранзакцию()"/"ОтменитьТранзакцию()". (ACC 325) - Код АПК: `325` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/563) ### acc:326 - Нарушена схема работы с транзакциями: для вызова "НачатьТранзакцию()" отсутствует парный вызов "ЗафиксироватьТранзакцию()". АПК:326 URL: https://v8std.ru/diagnostics/acc/326/ Markdown URL: https://v8std.ru/diagnostics/acc/326.md Source path: diagnostics/acc/326.md Aliases: acc:326, #acc:326, acc 326, acc326, апк 326, АПК:326 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/564 ID: acc:326 # Нарушена схема работы с транзакциями: для вызова "НачатьТранзакцию()" отсутствует парный вызов "ЗафиксироватьТранзакцию()". (ACC 326) - Код АПК: `326` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/564) ### acc:327 - Нарушена схема работы с транзакциями: для вызова "НачатьТранзакцию()" отсутствует парный вызов "ОтменитьТранзакцию()". АПК:327 URL: https://v8std.ru/diagnostics/acc/327/ Markdown URL: https://v8std.ru/diagnostics/acc/327.md Source path: diagnostics/acc/327.md Aliases: acc:327, #acc:327, acc 327, acc327, апк 327, АПК:327 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/565 ID: acc:327 # Нарушена схема работы с транзакциями: для вызова "НачатьТранзакцию()" отсутствует парный вызов "ОтменитьТранзакцию()". (ACC 327) - Код АПК: `327` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/565) ### acc:328 - Нарушена схема работы с транзакциями: не найден оператор "Попытка" после вызова "НачатьТранзакцию()". АПК:328 URL: https://v8std.ru/diagnostics/acc/328/ Markdown URL: https://v8std.ru/diagnostics/acc/328.md Source path: diagnostics/acc/328.md Aliases: acc:328, #acc:328, acc 328, acc328, апк 328, АПК:328 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/566 ID: acc:328 # Нарушена схема работы с транзакциями: не найден оператор "Попытка" после вызова "НачатьТранзакцию()". (ACC 328) - Код АПК: `328` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/566) ### acc:329 - Нарушена схема работы с транзакциями: вызов "ЗафиксироватьТранзакцию()" находится вне конструкции "Попытка... Исключение". АПК:329 URL: https://v8std.ru/diagnostics/acc/329/ Markdown URL: https://v8std.ru/diagnostics/acc/329.md Source path: diagnostics/acc/329.md Aliases: acc:329, #acc:329, acc 329, acc329, апк 329, АПК:329 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/567 ID: acc:329 # Нарушена схема работы с транзакциями: вызов "ЗафиксироватьТранзакцию()" находится вне конструкции "Попытка... Исключение". (ACC 329) - Код АПК: `329` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/567) ### acc:330 - Нарушена схема работы с транзакциями: между "ЗафиксироватьТранзакцию()" и "Исключение" есть исполняемый код, который может вызвать исключение. АПК:330 URL: https://v8std.ru/diagnostics/acc/330/ Markdown URL: https://v8std.ru/diagnostics/acc/330.md Source path: diagnostics/acc/330.md Aliases: acc:330, #acc:330, acc 330, acc330, апк 330, АПК:330 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/568 ID: acc:330 # Нарушена схема работы с транзакциями: между "ЗафиксироватьТранзакцию()" и "Исключение" есть исполняемый код, который может вызвать исключение. (ACC 330) - Код АПК: `330` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/568) ### acc:331 - Нарушена схема работы с транзакциями: между "НачатьТранзакцию()" и "Попытка" есть исполняемый код. АПК:331 URL: https://v8std.ru/diagnostics/acc/331/ Markdown URL: https://v8std.ru/diagnostics/acc/331.md Source path: diagnostics/acc/331.md Aliases: acc:331, #acc:331, acc 331, acc331, апк 331, АПК:331 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/569 ID: acc:331 # Нарушена схема работы с транзакциями: между "НачатьТранзакцию()" и "Попытка" есть исполняемый код. (ACC 331) - Код АПК: `331` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/569) ### acc:332 - Нарушена схема работы с транзакциями: вызов "ОтменитьТранзакцию()" отсутствует в конструкции "Исключение... КонецПопытки". АПК:332 URL: https://v8std.ru/diagnostics/acc/332/ Markdown URL: https://v8std.ru/diagnostics/acc/332.md Source path: diagnostics/acc/332.md Aliases: acc:332, #acc:332, acc 332, acc332, апк 332, АПК:332 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/570 ID: acc:332 # Нарушена схема работы с транзакциями: вызов "ОтменитьТранзакцию()" отсутствует в конструкции "Исключение... КонецПопытки". (ACC 332) - Код АПК: `332` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/570) ### acc:334 - Функция НСтр() использована для локализации внутренних идентификаторов. АПК:334 URL: https://v8std.ru/diagnostics/acc/334/ Markdown URL: https://v8std.ru/diagnostics/acc/334.md Source path: diagnostics/acc/334.md Aliases: acc:334, #acc:334, acc 334, acc334, апк 334, АПК:334 Related: standard:std764 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/248 ID: acc:334 # Функция НСтр() использована для локализации внутренних идентификаторов. (ACC 334) - Код АПК: `334` #### Стандарт - [#std764: Строковые константные выражения в коде: требования по локализации](https://v8std.ru/std/764/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/248) ### acc:335 - Обнаружена нелокализованная дата. АПК:335 URL: https://v8std.ru/diagnostics/acc/335/ Markdown URL: https://v8std.ru/diagnostics/acc/335.md Source path: diagnostics/acc/335.md Aliases: acc:335, #acc:335, acc 335, acc335, апк 335, АПК:335 Related: standard:std763 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/247 ID: acc:335 # Обнаружена нелокализованная дата. (ACC 335) - Код АПК: `335` #### Стандарт - [#std763: Форматирование даты, числа, Булево: требования по локализации](https://v8std.ru/std/763/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/247) ### acc:336 - Использован метод "РольДоступна()". АПК:336 URL: https://v8std.ru/diagnostics/acc/336/ Markdown URL: https://v8std.ru/diagnostics/acc/336.md Source path: diagnostics/acc/336.md Aliases: acc:336, #acc:336, acc 336, acc336, апк 336, АПК:336 Related: standard:std689, standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/427 ID: acc:336 # Использован метод "РольДоступна()". (ACC 336) - Код АПК: `336` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/427) ### acc:341 - Использована ролевая настройка видимости для элемента формы. АПК:341 URL: https://v8std.ru/diagnostics/acc/341/ Markdown URL: https://v8std.ru/diagnostics/acc/341.md Source path: diagnostics/acc/341.md Aliases: acc:341, #acc:341, acc 341, acc341, апк 341, АПК:341 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/219 ID: acc:341 # Использована ролевая настройка видимости для элемента формы. (ACC 341) - Код АПК: `341` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/219) ### acc:345 - Небезопасное хранение паролей в информационной базе. АПК:345 URL: https://v8std.ru/diagnostics/acc/345/ Markdown URL: https://v8std.ru/diagnostics/acc/345.md Source path: diagnostics/acc/345.md Aliases: acc:345, #acc:345, acc 345, acc345, апк 345, АПК:345 Related: standard:std740 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/412 ID: acc:345 # Небезопасное хранение паролей в информационной базе. (ACC 345) - Код АПК: `345` #### Стандарт - [#std740: Безопасное хранение паролей](https://v8std.ru/std/740/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/412) ### acc:346 - Обращение к несуществующему параметру формы. АПК:346 URL: https://v8std.ru/diagnostics/acc/346/ Markdown URL: https://v8std.ru/diagnostics/acc/346.md Source path: diagnostics/acc/346.md Aliases: acc:346, #acc:346, acc 346, acc346, апк 346, АПК:346 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/439 ID: acc:346 # Обращение к несуществующему параметру формы. (ACC 346) - Код АПК: `346` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/439) ### acc:347 - Не задан синоним стандартного реквизита "Родитель". АПК:347 URL: https://v8std.ru/diagnostics/acc/347/ Markdown URL: https://v8std.ru/diagnostics/acc/347.md Source path: diagnostics/acc/347.md Aliases: acc:347, #acc:347, acc 347, acc347, апк 347, АПК:347 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/576 ID: acc:347 # Не задан синоним стандартного реквизита "Родитель". (ACC 347) - Код АПК: `347` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/576) ### acc:349 - Синоним стандартного реквизита "Владелец" совпадает с наименованием. АПК:349 URL: https://v8std.ru/diagnostics/acc/349/ Markdown URL: https://v8std.ru/diagnostics/acc/349.md Source path: diagnostics/acc/349.md Aliases: acc:349, #acc:349, acc 349, acc349, апк 349, АПК:349 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/577 ID: acc:349 # Синоним стандартного реквизита "Владелец" совпадает с наименованием. (ACC 349) - Код АПК: `349` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/577) ### acc:350 - Синоним стандартного реквизита "Родитель" совпадает с наименованием. АПК:350 URL: https://v8std.ru/diagnostics/acc/350/ Markdown URL: https://v8std.ru/diagnostics/acc/350.md Source path: diagnostics/acc/350.md Aliases: acc:350, #acc:350, acc 350, acc350, апк 350, АПК:350 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/496 ID: acc:350 # Синоним стандартного реквизита "Родитель" совпадает с наименованием. (ACC 350) - Код АПК: `350` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/496) ### acc:351 - Бессмысленное (автосгенерированное) имя элемента формы. АПК:351 URL: https://v8std.ru/diagnostics/acc/351/ Markdown URL: https://v8std.ru/diagnostics/acc/351.md Source path: diagnostics/acc/351.md Aliases: acc:351, #acc:351, acc 351, acc351, апк 351, АПК:351 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/121 ID: acc:351 # Бессмысленное (автосгенерированное) имя элемента формы. (ACC 351) - Код АПК: `351` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/121) ### acc:352 - Бессмысленное (автосгенерированное) имя реквизита формы. АПК:352 URL: https://v8std.ru/diagnostics/acc/352/ Markdown URL: https://v8std.ru/diagnostics/acc/352.md Source path: diagnostics/acc/352.md Aliases: acc:352, #acc:352, acc 352, acc352, апк 352, АПК:352 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/123 ID: acc:352 # Бессмысленное (автосгенерированное) имя реквизита формы. (ACC 352) - Код АПК: `352` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/123) ### acc:353 - Бессмысленное (автосгенерированное) имя команды формы. АПК:353 URL: https://v8std.ru/diagnostics/acc/353/ Markdown URL: https://v8std.ru/diagnostics/acc/353.md Source path: diagnostics/acc/353.md Aliases: acc:353, #acc:353, acc 353, acc353, апк 353, АПК:353 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/335 ID: acc:353 # Бессмысленное (автосгенерированное) имя команды формы. (ACC 353) - Код АПК: `353` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/335) ### acc:354 - Бессмысленное (автосгенерированное) имя параметра формы. АПК:354 URL: https://v8std.ru/diagnostics/acc/354/ Markdown URL: https://v8std.ru/diagnostics/acc/354.md Source path: diagnostics/acc/354.md Aliases: acc:354, #acc:354, acc 354, acc354, апк 354, АПК:354 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/336 ID: acc:354 # Бессмысленное (автосгенерированное) имя параметра формы. (ACC 354) - Код АПК: `354` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/336) ### acc:355 - Орфографическая ошибка в имени команды формы. АПК:355 URL: https://v8std.ru/diagnostics/acc/355/ Markdown URL: https://v8std.ru/diagnostics/acc/355.md Source path: diagnostics/acc/355.md Aliases: acc:355, #acc:355, acc 355, acc355, апк 355, АПК:355 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/70 ID: acc:355 # Орфографическая ошибка в имени команды формы. (ACC 355) - Код АПК: `355` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/70) ### acc:356 - Орфографическая ошибка в имени реквизита формы. АПК:356 URL: https://v8std.ru/diagnostics/acc/356/ Markdown URL: https://v8std.ru/diagnostics/acc/356.md Source path: diagnostics/acc/356.md Aliases: acc:356, #acc:356, acc 356, acc356, апк 356, АПК:356 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/583 ID: acc:356 # Орфографическая ошибка в имени реквизита формы. (ACC 356) - Код АПК: `356` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/583) ### acc:357 - Орфографическая ошибка в заголовке реквизита формы. АПК:357 URL: https://v8std.ru/diagnostics/acc/357/ Markdown URL: https://v8std.ru/diagnostics/acc/357.md Source path: diagnostics/acc/357.md Aliases: acc:357, #acc:357, acc 357, acc357, апк 357, АПК:357 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/285 ID: acc:357 # Орфографическая ошибка в заголовке реквизита формы. (ACC 357) - Код АПК: `357` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/285) ### acc:358 - Орфографическая ошибка в имени параметра формы. АПК:358 URL: https://v8std.ru/diagnostics/acc/358/ Markdown URL: https://v8std.ru/diagnostics/acc/358.md Source path: diagnostics/acc/358.md Aliases: acc:358, #acc:358, acc 358, acc358, апк 358, АПК:358 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/286 ID: acc:358 # Орфографическая ошибка в имени параметра формы. (ACC 358) - Код АПК: `358` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/286) ### acc:359 - Ограничения на уровне записей в разных ролях не совпадает для той же таблицы и права. АПК:359 URL: https://v8std.ru/diagnostics/acc/359/ Markdown URL: https://v8std.ru/diagnostics/acc/359.md Source path: diagnostics/acc/359.md Aliases: acc:359, #acc:359, acc 359, acc359, апк 359, АПК:359 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/586 ID: acc:359 # Ограничения на уровне записей в разных ролях не совпадает для той же таблицы и права. (ACC 359) - Код АПК: `359` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/586) ### acc:360 - Ограничения для права "Добавление" не совпадает с ограничением права "Изменение". АПК:360 URL: https://v8std.ru/diagnostics/acc/360/ Markdown URL: https://v8std.ru/diagnostics/acc/360.md Source path: diagnostics/acc/360.md Aliases: acc:360, #acc:360, acc 360, acc360, апк 360, АПК:360 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/587 ID: acc:360 # Ограничения для права "Добавление" не совпадает с ограничением права "Изменение". (ACC 360) - Код АПК: `360` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/587) ### acc:361 - Серверный код не заключен в инструкцию препроцессора: "#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда...". АПК:361 URL: https://v8std.ru/diagnostics/acc/361/ Markdown URL: https://v8std.ru/diagnostics/acc/361.md Source path: diagnostics/acc/361.md Aliases: acc:361, #acc:361, acc 361, acc361, апк 361, АПК:361 Related: standard:std680 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/497 ID: acc:361 # Серверный код не заключен в инструкцию препроцессора: "#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда...". (ACC 361) - Код АПК: `361` #### Стандарт - [#std680: Поддержка толстого клиента, управляемое приложение, клиент-сервер](https://v8std.ru/std/680/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/497) ### acc:362 - Обработчик события заключен в инструкцию препроцессора: "#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда...". АПК:362 URL: https://v8std.ru/diagnostics/acc/362/ Markdown URL: https://v8std.ru/diagnostics/acc/362.md Source path: diagnostics/acc/362.md Aliases: acc:362, #acc:362, acc 362, acc362, апк 362, АПК:362 Related: standard:std680 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/319 ID: acc:362 # Обработчик события заключен в инструкцию препроцессора: "#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда...". (ACC 362) - Код АПК: `362` #### Стандарт - [#std680: Поддержка толстого клиента, управляемое приложение, клиент-сервер](https://v8std.ru/std/680/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/319) ### acc:363 - Не следует добавлять постфикс "Клиент" в наименование глобального общего модуля с постфиксом "Глобальный". АПК:363 URL: https://v8std.ru/diagnostics/acc/363/ Markdown URL: https://v8std.ru/diagnostics/acc/363.md Source path: diagnostics/acc/363.md Aliases: acc:363, #acc:363, acc 363, acc363, апк 363, АПК:363 Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/499 ID: acc:363 # Не следует добавлять постфикс "Клиент" в наименование глобального общего модуля с постфиксом "Глобальный". (ACC 363) - Код АПК: `363` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/499) ### acc:370 - Параметр "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()" инициализируется переменной, содержащей нелокализованную строку. АПК:370 URL: https://v8std.ru/diagnostics/acc/370/ Markdown URL: https://v8std.ru/diagnostics/acc/370.md Source path: diagnostics/acc/370.md Aliases: acc:370, #acc:370, acc 370, acc370, апк 370, АПК:370 Related: standard:std498, standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/589 ID: acc:370 # Параметр "ИмяСобытия" метода "ЗаписьЖурналаРегистрации()" инициализируется переменной, содержащей нелокализованную строку. (ACC 370) - Код АПК: `370` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/589) ### acc:371 - При локализации параметра "ИмяСобытия" для получения кода языка следует использовать функцию ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(). АПК:371 URL: https://v8std.ru/diagnostics/acc/371/ Markdown URL: https://v8std.ru/diagnostics/acc/371.md Source path: diagnostics/acc/371.md Aliases: acc:371, #acc:371, acc 371, acc371, апк 371, АПК:371 Related: standard:std498, standard:std784 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/393 ID: acc:371 # При локализации параметра "ИмяСобытия" для получения кода языка следует использовать функцию ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка(). (ACC 371) - Код АПК: `371` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std784: Автогенерированные данные в информационной базе: требования по локализации](https://v8std.ru/std/784/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/393) ### acc:374 - Сообщение содержит восклицательный знак. АПК:374 URL: https://v8std.ru/diagnostics/acc/374/ Markdown URL: https://v8std.ru/diagnostics/acc/374.md Source path: diagnostics/acc/374.md Aliases: acc:374, #acc:374, acc 374, acc374, апк 374, АПК:374 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/270 ID: acc:374 # Сообщение содержит восклицательный знак. (ACC 374) - Код АПК: `374` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/270) ### acc:375 - Избыточно установлены права на устаревший объект метаданных (с префиксом "Удалить"). АПК:375 URL: https://v8std.ru/diagnostics/acc/375/ Markdown URL: https://v8std.ru/diagnostics/acc/375.md Source path: diagnostics/acc/375.md Aliases: acc:375, #acc:375, acc 375, acc375, апк 375, АПК:375 Related: standard:std534, standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/425 ID: acc:375 # Избыточно установлены права на устаревший объект метаданных (с префиксом "Удалить"). (ACC 375) - Код АПК: `375` #### Стандарт - [#std534: Удаление устаревших объектов метаданных из конфигурации](https://v8std.ru/std/534/) - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/425) ### acc:376 - Превышена максимальная длина числовых данных (31 знак). АПК:376 URL: https://v8std.ru/diagnostics/acc/376/ Markdown URL: https://v8std.ru/diagnostics/acc/376.md Source path: diagnostics/acc/376.md Aliases: acc:376, #acc:376, acc 376, acc376, апк 376, АПК:376 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/82 ID: acc:376 # Превышена максимальная длина числовых данных (31 знак). (ACC 376) - Код АПК: `376` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/82) ### acc:377 - Превышена максимальная длина ресурса регистра накопления или бухгалтерии (25 знаков). АПК:377 URL: https://v8std.ru/diagnostics/acc/377/ Markdown URL: https://v8std.ru/diagnostics/acc/377.md Source path: diagnostics/acc/377.md Aliases: acc:377, #acc:377, acc 377, acc377, апк 377, АПК:377 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/84 ID: acc:377 # Превышена максимальная длина ресурса регистра накопления или бухгалтерии (25 знаков). (ACC 377) - Код АПК: `377` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/84) ### acc:379 - В качестве правого операнда операции сравнения "ПОДОБНО" указано поле таблицы. АПК:379 URL: https://v8std.ru/diagnostics/acc/379/ Markdown URL: https://v8std.ru/diagnostics/acc/379.md Source path: diagnostics/acc/379.md Aliases: acc:379, #acc:379, acc 379, acc379, апк 379, АПК:379 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/86 ID: acc:379 # В качестве правого операнда операции сравнения "ПОДОБНО" указано поле таблицы. (ACC 379) - Код АПК: `379` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/86) ### acc:380 - Длина индекса составляет больше 900 байт. АПК:380 URL: https://v8std.ru/diagnostics/acc/380/ Markdown URL: https://v8std.ru/diagnostics/acc/380.md Source path: diagnostics/acc/380.md Aliases: acc:380, #acc:380, acc 380, acc380, апк 380, АПК:380 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/87 ID: acc:380 # Длина индекса составляет больше 900 байт. (ACC 380) - Код АПК: `380` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/87) ### acc:381 - Длина имени объекта метаданных превышает 80 символов. АПК:381 URL: https://v8std.ru/diagnostics/acc/381/ Markdown URL: https://v8std.ru/diagnostics/acc/381.md Source path: diagnostics/acc/381.md Aliases: acc:381, #acc:381, acc 381, acc381, апк 381, АПК:381 Related: edt_check:v8cs:mdo-name-length, standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/124 ID: acc:381 # Длина имени объекта метаданных превышает 80 символов. (ACC 381) - Код АПК: `381` - Код проверки EDT: [mdo-name-length](https://v8std.ru/diagnostics/v8-code-style/mdo-name-length/) #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/124) ### acc:384 - Установлено нулевое поле у табличного документа АПК:384 URL: https://v8std.ru/diagnostics/acc/384/ Markdown URL: https://v8std.ru/diagnostics/acc/384.md Source path: diagnostics/acc/384.md Aliases: acc:384, #acc:384, acc 384, acc384, апк 384, АПК:384 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/438 ID: acc:384 # Установлено нулевое поле у табличного документа (ACC 384) - Код АПК: `384` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/438) ### acc:386 - В свойствах формы настроено условное оформление. АПК:386 URL: https://v8std.ru/diagnostics/acc/386/ Markdown URL: https://v8std.ru/diagnostics/acc/386.md Source path: diagnostics/acc/386.md Aliases: acc:386, #acc:386, acc 386, acc386, апк 386, АПК:386 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/593 ID: acc:386 # В свойствах формы настроено условное оформление. (ACC 386) - Код АПК: `386` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/593) ### acc:387 - В свойствах динамического списка настроено условное оформление. АПК:387 URL: https://v8std.ru/diagnostics/acc/387/ Markdown URL: https://v8std.ru/diagnostics/acc/387.md Source path: diagnostics/acc/387.md Aliases: acc:387, #acc:387, acc 387, acc387, апк 387, АПК:387 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/262 ID: acc:387 # В свойствах динамического списка настроено условное оформление. (ACC 387) - Код АПК: `387` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/262) ### acc:388 - Неэкспортная процедура (функция) в разделе "ПрограммныйИнтерфейс". АПК:388 URL: https://v8std.ru/diagnostics/acc/388/ Markdown URL: https://v8std.ru/diagnostics/acc/388.md Source path: diagnostics/acc/388.md Aliases: acc:388, #acc:388, acc 388, acc388, апк 388, АПК:388 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/595 ID: acc:388 # Неэкспортная процедура (функция) в разделе "ПрограммныйИнтерфейс". (ACC 388) - Код АПК: `388` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/595) ### acc:389 - Неэкспортная процедура (функция) в разделе "СлужебныйПрограммныйИнтерфейс". АПК:389 URL: https://v8std.ru/diagnostics/acc/389/ Markdown URL: https://v8std.ru/diagnostics/acc/389.md Source path: diagnostics/acc/389.md Aliases: acc:389, #acc:389, acc 389, acc389, апк 389, АПК:389 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/378 ID: acc:389 # Неэкспортная процедура (функция) в разделе "СлужебныйПрограммныйИнтерфейс". (ACC 389) - Код АПК: `389` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/378) ### acc:393 - Использована ролевая настройка просмотра для реквизита формы. АПК:393 URL: https://v8std.ru/diagnostics/acc/393/ Markdown URL: https://v8std.ru/diagnostics/acc/393.md Source path: diagnostics/acc/393.md Aliases: acc:393, #acc:393, acc 393, acc393, апк 393, АПК:393 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/596 ID: acc:393 # Использована ролевая настройка просмотра для реквизита формы. (ACC 393) - Код АПК: `393` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/596) ### acc:394 - Использована ролевая настройка редактирования для реквизита формы. АПК:394 URL: https://v8std.ru/diagnostics/acc/394/ Markdown URL: https://v8std.ru/diagnostics/acc/394.md Source path: diagnostics/acc/394.md Aliases: acc:394, #acc:394, acc 394, acc394, апк 394, АПК:394 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/220 ID: acc:394 # Использована ролевая настройка редактирования для реквизита формы. (ACC 394) - Код АПК: `394` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/220) ### acc:395 - Использована ролевая настройка использования для команды формы. АПК:395 URL: https://v8std.ru/diagnostics/acc/395/ Markdown URL: https://v8std.ru/diagnostics/acc/395.md Source path: diagnostics/acc/395.md Aliases: acc:395, #acc:395, acc 395, acc395, апк 395, АПК:395 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/221 ID: acc:395 # Использована ролевая настройка использования для команды формы. (ACC 395) - Код АПК: `395` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/221) ### acc:397 - Не задан таймаут для объекта при работе с внешними ресурсами. АПК:397 URL: https://v8std.ru/diagnostics/acc/397/ Markdown URL: https://v8std.ru/diagnostics/acc/397.md Source path: diagnostics/acc/397.md Aliases: acc:397, #acc:397, acc 397, acc397, апк 397, АПК:397 Related: standard:std748 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/500 ID: acc:397 # Не задан таймаут для объекта при работе с внешними ресурсами. (ACC 397) - Код АПК: `397` #### Стандарт - [#std748: Таймауты при работе с внешними ресурсами](https://v8std.ru/std/748/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/500) ### acc:398 - Задан нулевой таймаут для объекта при работе с внешними ресурсами. АПК:398 URL: https://v8std.ru/diagnostics/acc/398/ Markdown URL: https://v8std.ru/diagnostics/acc/398.md Source path: diagnostics/acc/398.md Aliases: acc:398, #acc:398, acc 398, acc398, апк 398, АПК:398 Related: standard:std748 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/410 ID: acc:398 # Задан нулевой таймаут для объекта при работе с внешними ресурсами. (ACC 398) - Код АПК: `398` #### Стандарт - [#std748: Таймауты при работе с внешними ресурсами](https://v8std.ru/std/748/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/410) ### acc:399 - Отсутствует или неверно описана секция "Параметры" в комментарии к экспортной процедуре (функции). АПК:399 URL: https://v8std.ru/diagnostics/acc/399/ Markdown URL: https://v8std.ru/diagnostics/acc/399.md Source path: diagnostics/acc/399.md Aliases: acc:399, #acc:399, acc 399, acc399, апк 399, АПК:399 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/501 ID: acc:399 # Отсутствует или неверно описана секция "Параметры" в комментарии к экспортной процедуре (функции). (ACC 399) - Код АПК: `399` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/501) ### acc:400 - Отсутствует или неверно описана секция "Возвращаемое значение" в комментарии к экспортной функции. АПК:400 URL: https://v8std.ru/diagnostics/acc/400/ Markdown URL: https://v8std.ru/diagnostics/acc/400.md Source path: diagnostics/acc/400.md Aliases: acc:400, #acc:400, acc 400, acc400, апк 400, АПК:400 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/598 ID: acc:400 # Отсутствует или неверно описана секция "Возвращаемое значение" в комментарии к экспортной функции. (ACC 400) - Код АПК: `400` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/598) ### acc:401 - Не описаны некоторые параметры в секции "Параметры" в комментарии к экспортной процедуре (функции). АПК:401 URL: https://v8std.ru/diagnostics/acc/401/ Markdown URL: https://v8std.ru/diagnostics/acc/401.md Source path: diagnostics/acc/401.md Aliases: acc:401, #acc:401, acc 401, acc401, апк 401, АПК:401 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/599 ID: acc:401 # Не описаны некоторые параметры в секции "Параметры" в комментарии к экспортной процедуре (функции). (ACC 401) - Код АПК: `401` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/599) ### acc:402 - Секция "Возвращаемое значение" находится перед секцией "Параметры" в комментарии к экспортной функции. АПК:402 URL: https://v8std.ru/diagnostics/acc/402/ Markdown URL: https://v8std.ru/diagnostics/acc/402.md Source path: diagnostics/acc/402.md Aliases: acc:402, #acc:402, acc 402, acc402, апк 402, АПК:402 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/600 ID: acc:402 # Секция "Возвращаемое значение" находится перед секцией "Параметры" в комментарии к экспортной функции. (ACC 402) - Код АПК: `402` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/600) ### acc:403 - Некорректно оформлена гиперссылка "См. ..." в комментарии к экспортной процедуре (функции). АПК:403 URL: https://v8std.ru/diagnostics/acc/403/ Markdown URL: https://v8std.ru/diagnostics/acc/403.md Source path: diagnostics/acc/403.md Aliases: acc:403, #acc:403, acc 403, acc403, апк 403, АПК:403 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/601 ID: acc:403 # Некорректно оформлена гиперссылка "См. ..." в комментарии к экспортной процедуре (функции). (ACC 403) - Код АПК: `403` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/601) ### acc:404 - Не найден объект переадресации из гиперссылки "См. ..." в комментарии к экспортной процедуре (функции). АПК:404 URL: https://v8std.ru/diagnostics/acc/404/ Markdown URL: https://v8std.ru/diagnostics/acc/404.md Source path: diagnostics/acc/404.md Aliases: acc:404, #acc:404, acc 404, acc404, апк 404, АПК:404 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/502 ID: acc:404 # Не найден объект переадресации из гиперссылки "См. ..." в комментарии к экспортной процедуре (функции). (ACC 404) - Код АПК: `404` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/502) ### acc:405 - Описаны лишние параметры в секции "Параметры" в комментарии к экспортной процедуре (функции). АПК:405 URL: https://v8std.ru/diagnostics/acc/405/ Markdown URL: https://v8std.ru/diagnostics/acc/405.md Source path: diagnostics/acc/405.md Aliases: acc:405, #acc:405, acc 405, acc405, апк 405, АПК:405 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/510 ID: acc:405 # Описаны лишние параметры в секции "Параметры" в комментарии к экспортной процедуре (функции). (ACC 405) - Код АПК: `405` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/510) ### acc:406 - Некорректно описаны некоторые параметры в секции "Параметры" в комментарии к экспортной процедуре (функции). АПК:406 URL: https://v8std.ru/diagnostics/acc/406/ Markdown URL: https://v8std.ru/diagnostics/acc/406.md Source path: diagnostics/acc/406.md Aliases: acc:406, #acc:406, acc 406, acc406, апк 406, АПК:406 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/511 ID: acc:406 # Некорректно описаны некоторые параметры в секции "Параметры" в комментарии к экспортной процедуре (функции). (ACC 406) - Код АПК: `406` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/511) ### acc:407 - Некорректно описан тип некоторых параметров в секции "Параметры" в комментарии к экспортной процедуре (функции). АПК:407 URL: https://v8std.ru/diagnostics/acc/407/ Markdown URL: https://v8std.ru/diagnostics/acc/407.md Source path: diagnostics/acc/407.md Aliases: acc:407, #acc:407, acc 407, acc407, апк 407, АПК:407 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/512 ID: acc:407 # Некорректно описан тип некоторых параметров в секции "Параметры" в комментарии к экспортной процедуре (функции). (ACC 407) - Код АПК: `407` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/512) ### acc:408 - Описание параметров в секции "Параметры" должно начинаться с новой строки в комментарии к экспортной процедуре (функции). АПК:408 URL: https://v8std.ru/diagnostics/acc/408/ Markdown URL: https://v8std.ru/diagnostics/acc/408.md Source path: diagnostics/acc/408.md Aliases: acc:408, #acc:408, acc 408, acc408, апк 408, АПК:408 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/516 ID: acc:408 # Описание параметров в секции "Параметры" должно начинаться с новой строки в комментарии к экспортной процедуре (функции). (ACC 408) - Код АПК: `408` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/516) ### acc:409 - Описание возвращаемого значения в секции "Возвращаемое значение" должно начинаться с новой строки в комментарии к экспортной функции. АПК:409 URL: https://v8std.ru/diagnostics/acc/409/ Markdown URL: https://v8std.ru/diagnostics/acc/409.md Source path: diagnostics/acc/409.md Aliases: acc:409, #acc:409, acc 409, acc409, апк 409, АПК:409 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/517 ID: acc:409 # Описание возвращаемого значения в секции "Возвращаемое значение" должно начинаться с новой строки в комментарии к экспортной функции. (ACC 409) - Код АПК: `409` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/517) ### acc:410 - Описана секция "Параметры" в комментарии к экспортной процедуре (функции), не имеющей параметров. АПК:410 URL: https://v8std.ru/diagnostics/acc/410/ Markdown URL: https://v8std.ru/diagnostics/acc/410.md Source path: diagnostics/acc/410.md Aliases: acc:410, #acc:410, acc 410, acc410, апк 410, АПК:410 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/521 ID: acc:410 # Описана секция "Параметры" в комментарии к экспортной процедуре (функции), не имеющей параметров. (ACC 410) - Код АПК: `410` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/521) ### acc:412 - Значение свойства "История выбора при вводе" у документа не равно "Не использовать". АПК:412 URL: https://v8std.ru/diagnostics/acc/412/ Markdown URL: https://v8std.ru/diagnostics/acc/412.md Source path: diagnostics/acc/412.md Aliases: acc:412, #acc:412, acc 412, acc412, апк 412, АПК:412 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/523 ID: acc:412 # Значение свойства "История выбора при вводе" у документа не равно "Не использовать". (ACC 412) - Код АПК: `412` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/523) ### acc:413 - Присутствует обработчик "ОбработкаПолученияДанныхВыбора", а свойство "История выбора при вводе" не равно "Не использовать". АПК:413 URL: https://v8std.ru/diagnostics/acc/413/ Markdown URL: https://v8std.ru/diagnostics/acc/413.md Source path: diagnostics/acc/413.md Aliases: acc:413, #acc:413, acc 413, acc413, апк 413, АПК:413 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/263 ID: acc:413 # Присутствует обработчик "ОбработкаПолученияДанныхВыбора", а свойство "История выбора при вводе" не равно "Не использовать". (ACC 413) - Код АПК: `413` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/263) ### acc:414 - Неверно установлены свойства поля формы, которое ссылается на объект метаданных с отключенной историей выбора при вводе. АПК:414 URL: https://v8std.ru/diagnostics/acc/414/ Markdown URL: https://v8std.ru/diagnostics/acc/414.md Source path: diagnostics/acc/414.md Aliases: acc:414, #acc:414, acc 414, acc414, апк 414, АПК:414 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/440 ID: acc:414 # Неверно установлены свойства поля формы, которое ссылается на объект метаданных с отключенной историей выбора при вводе. (ACC 414) - Код АПК: `414` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/440) ### acc:415 - Нарушена схема работы с транзакциями: отличаются условия "Если ... Тогда" у методов работы с транзакциями. АПК:415 URL: https://v8std.ru/diagnostics/acc/415/ Markdown URL: https://v8std.ru/diagnostics/acc/415.md Source path: diagnostics/acc/415.md Aliases: acc:415, #acc:415, acc 415, acc415, апк 415, АПК:415 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/602 ID: acc:415 # Нарушена схема работы с транзакциями: отличаются условия "Если ... Тогда" у методов работы с транзакциями. (ACC 415) - Код АПК: `415` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/602) ### acc:416 - Отсутствует или некорректно описан тип возвращаемого значения в комментарии к экспортной функции. АПК:416 URL: https://v8std.ru/diagnostics/acc/416/ Markdown URL: https://v8std.ru/diagnostics/acc/416.md Source path: diagnostics/acc/416.md Aliases: acc:416, #acc:416, acc 416, acc416, апк 416, АПК:416 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/524 ID: acc:416 # Отсутствует или некорректно описан тип возвращаемого значения в комментарии к экспортной функции. (ACC 416) - Код АПК: `416` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/524) ### acc:417 - Некорректно описан тип некоторых свойств возвращаемого значения в комментарии к экспортной функции. АПК:417 URL: https://v8std.ru/diagnostics/acc/417/ Markdown URL: https://v8std.ru/diagnostics/acc/417.md Source path: diagnostics/acc/417.md Aliases: acc:417, #acc:417, acc 417, acc417, апк 417, АПК:417 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/526 ID: acc:417 # Некорректно описан тип некоторых свойств возвращаемого значения в комментарии к экспортной функции. (ACC 417) - Код АПК: `417` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/526) ### acc:419 - В правах роли установлены ограничения (RLS) для объекта метаданных. АПК:419 URL: https://v8std.ru/diagnostics/acc/419/ Markdown URL: https://v8std.ru/diagnostics/acc/419.md Source path: diagnostics/acc/419.md Aliases: acc:419, #acc:419, acc 419, acc419, апк 419, АПК:419 Related: edt_check:v8cs:role-right-has-rls, standard:std488, standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/426 ID: acc:419 # В правах роли установлены ограничения (RLS) для объекта метаданных. (ACC 419) - Код АПК: `419` - Код проверки EDT: [role-right-has-rls](https://v8std.ru/diagnostics/v8-code-style/role-right-has-rls/) #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/426) ### acc:420 - В праве "Удаление" роли установлены ограничения (RLS) для объекта метаданных. АПК:420 URL: https://v8std.ru/diagnostics/acc/420/ Markdown URL: https://v8std.ru/diagnostics/acc/420.md Source path: diagnostics/acc/420.md Aliases: acc:420, #acc:420, acc 420, acc420, апк 420, АПК:420 Related: standard:std488, standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/211 ID: acc:420 # В праве "Удаление" роли установлены ограничения (RLS) для объекта метаданных. (ACC 420) - Код АПК: `420` #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/211) ### acc:421 - Права на константу установлены в обеих ролях: "Полные права" и "Администратор системы". АПК:421 URL: https://v8std.ru/diagnostics/acc/421/ Markdown URL: https://v8std.ru/diagnostics/acc/421.md Source path: diagnostics/acc/421.md Aliases: acc:421, #acc:421, acc 421, acc421, апк 421, АПК:421 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/527 ID: acc:421 # Права на константу установлены в обеих ролях: "Полные права" и "Администратор системы". (ACC 421) - Код АПК: `421` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/527) ### acc:422 - Права на константу не установлены ни в одной из ролей: "Полные права" и "Администратор системы". АПК:422 URL: https://v8std.ru/diagnostics/acc/422/ Markdown URL: https://v8std.ru/diagnostics/acc/422.md Source path: diagnostics/acc/422.md Aliases: acc:422, #acc:422, acc 422, acc422, апк 422, АПК:422 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/423 ID: acc:422 # Права на константу не установлены ни в одной из ролей: "Полные права" и "Администратор системы". (ACC 422) - Код АПК: `422` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/423) ### acc:423 - Для роли "Изменение" установлены права на другой объект метаданных. АПК:423 URL: https://v8std.ru/diagnostics/acc/423/ Markdown URL: https://v8std.ru/diagnostics/acc/423.md Source path: diagnostics/acc/423.md Aliases: acc:423, #acc:423, acc 423, acc423, апк 423, АПК:423 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/530 ID: acc:423 # Для роли "Изменение" установлены права на другой объект метаданных. (ACC 423) - Код АПК: `423` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/530) ### acc:424 - Для роли "Чтение" установлены права на другой объект метаданных. АПК:424 URL: https://v8std.ru/diagnostics/acc/424/ Markdown URL: https://v8std.ru/diagnostics/acc/424.md Source path: diagnostics/acc/424.md Aliases: acc:424, #acc:424, acc 424, acc424, апк 424, АПК:424 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/209 ID: acc:424 # Для роли "Чтение" установлены права на другой объект метаданных. (ACC 424) - Код АПК: `424` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/209) ### acc:425 - Отсутствует область "ОписаниеПеременных" в тексте модуля. АПК:425 URL: https://v8std.ru/diagnostics/acc/425/ Markdown URL: https://v8std.ru/diagnostics/acc/425.md Source path: diagnostics/acc/425.md Aliases: acc:425, #acc:425, acc 425, acc425, апк 425, АПК:425 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/531 ID: acc:425 # Отсутствует область "ОписаниеПеременных" в тексте модуля. (ACC 425) - Код АПК: `425` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/531) ### acc:426 - Переменная объявлена в области, содержащей процедуру или функцию. АПК:426 URL: https://v8std.ru/diagnostics/acc/426/ Markdown URL: https://v8std.ru/diagnostics/acc/426.md Source path: diagnostics/acc/426.md Aliases: acc:426, #acc:426, acc 426, acc426, апк 426, АПК:426 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/534 ID: acc:426 # Переменная объявлена в области, содержащей процедуру или функцию. (ACC 426) - Код АПК: `426` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/534) ### acc:427 - Отсутствует область "Инициализация" в тексте модуля. АПК:427 URL: https://v8std.ru/diagnostics/acc/427/ Markdown URL: https://v8std.ru/diagnostics/acc/427.md Source path: diagnostics/acc/427.md Aliases: acc:427, #acc:427, acc 427, acc427, апк 427, АПК:427 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/535 ID: acc:427 # Отсутствует область "Инициализация" в тексте модуля. (ACC 427) - Код АПК: `427` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/535) ### acc:428 - Операторы раздела инициализации расположены в области, содержащей процедуры или функции. АПК:428 URL: https://v8std.ru/diagnostics/acc/428/ Markdown URL: https://v8std.ru/diagnostics/acc/428.md Source path: diagnostics/acc/428.md Aliases: acc:428, #acc:428, acc 428, acc428, апк 428, АПК:428 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/603 ID: acc:428 # Операторы раздела инициализации расположены в области, содержащей процедуры или функции. (ACC 428) - Код АПК: `428` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/603) ### acc:429 - Переменная объявлена вне области "ОписаниеПеременных". АПК:429 URL: https://v8std.ru/diagnostics/acc/429/ Markdown URL: https://v8std.ru/diagnostics/acc/429.md Source path: diagnostics/acc/429.md Aliases: acc:429, #acc:429, acc 429, acc429, апк 429, АПК:429 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/200 ID: acc:429 # Переменная объявлена вне области "ОписаниеПеременных". (ACC 429) - Код АПК: `429` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/200) ### acc:430 - Операторы раздела инициализации расположены вне области "Инициализация". АПК:430 URL: https://v8std.ru/diagnostics/acc/430/ Markdown URL: https://v8std.ru/diagnostics/acc/430.md Source path: diagnostics/acc/430.md Aliases: acc:430, #acc:430, acc 430, acc430, апк 430, АПК:430 Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/375 ID: acc:430 # Операторы раздела инициализации расположены вне области "Инициализация". (ACC 430) - Код АПК: `430` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/375) ### acc:433 - Неэкспортная переменная не используется в модуле. АПК:433 URL: https://v8std.ru/diagnostics/acc/433/ Markdown URL: https://v8std.ru/diagnostics/acc/433.md Source path: diagnostics/acc/433.md Aliases: acc:433, #acc:433, acc 433, acc433, апк 433, АПК:433 Related: edt_check:v8cs:module-unused-local-variable, standard:std456 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/369 ID: acc:433 # Неэкспортная переменная не используется в модуле. (ACC 433) - Код АПК: `433` - Код проверки EDT: [module-unused-local-variable](https://v8std.ru/diagnostics/v8-code-style/module-unused-local-variable/) #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/369) ### acc:435 - Возврат константы типа Строка в модуле с повторным использованием. АПК:435 URL: https://v8std.ru/diagnostics/acc/435/ Markdown URL: https://v8std.ru/diagnostics/acc/435.md Source path: diagnostics/acc/435.md Aliases: acc:435, #acc:435, acc 435, acc435, апк 435, АПК:435 Related: standard:std724 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/607 ID: acc:435 # Возврат константы типа Строка в модуле с повторным использованием. (ACC 435) - Код АПК: `435` #### Стандарт - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/607) ### acc:436 - Возврат константы типа Число в модуле с повторным использованием. АПК:436 URL: https://v8std.ru/diagnostics/acc/436/ Markdown URL: https://v8std.ru/diagnostics/acc/436.md Source path: diagnostics/acc/436.md Aliases: acc:436, #acc:436, acc 436, acc436, апк 436, АПК:436 Related: standard:std724 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/608 ID: acc:436 # Возврат константы типа Число в модуле с повторным использованием. (ACC 436) - Код АПК: `436` #### Стандарт - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/608) ### acc:437 - Возврат константы типа Дата в модуле с повторным использованием. АПК:437 URL: https://v8std.ru/diagnostics/acc/437/ Markdown URL: https://v8std.ru/diagnostics/acc/437.md Source path: diagnostics/acc/437.md Aliases: acc:437, #acc:437, acc 437, acc437, апк 437, АПК:437 Related: standard:std724 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/609 ID: acc:437 # Возврат константы типа Дата в модуле с повторным использованием. (ACC 437) - Код АПК: `437` #### Стандарт - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/609) ### acc:438 - Возврат константы типа Булево в модуле с повторным использованием. АПК:438 URL: https://v8std.ru/diagnostics/acc/438/ Markdown URL: https://v8std.ru/diagnostics/acc/438.md Source path: diagnostics/acc/438.md Aliases: acc:438, #acc:438, acc 438, acc438, апк 438, АПК:438 Related: standard:std724 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/610 ID: acc:438 # Возврат константы типа Булево в модуле с повторным использованием. (ACC 438) - Код АПК: `438` #### Стандарт - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/610) ### acc:439 - Возврат предопределенного элемента в модуле с повторным использованием. АПК:439 URL: https://v8std.ru/diagnostics/acc/439/ Markdown URL: https://v8std.ru/diagnostics/acc/439.md Source path: diagnostics/acc/439.md Aliases: acc:439, #acc:439, acc 439, acc439, апк 439, АПК:439 Related: standard:std724 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/537 ID: acc:439 # Возврат предопределенного элемента в модуле с повторным использованием. (ACC 439) - Код АПК: `439` #### Стандарт - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/537) ### acc:441 - Отсутствует удаление временного файла после использования. АПК:441 URL: https://v8std.ru/diagnostics/acc/441/ Markdown URL: https://v8std.ru/diagnostics/acc/441.md Source path: diagnostics/acc/441.md Aliases: acc:441, #acc:441, acc 441, acc441, апк 441, АПК:441 Related: standard:std542 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/409 ID: acc:441 # Отсутствует удаление временного файла после использования. (ACC 441) - Код АПК: `441` #### Стандарт - [#std542: Доступ к файловой системе из кода конфигурации](https://v8std.ru/std/542/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/409) ### acc:442 - Ошибка выполнения проверки: не удалось получить версию БСП. АПК:442 URL: https://v8std.ru/diagnostics/acc/442/ Markdown URL: https://v8std.ru/diagnostics/acc/442.md Source path: diagnostics/acc/442.md Aliases: acc:442, #acc:442, acc 442, acc442, апк 442, АПК:442 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/612 ID: acc:442 # Ошибка выполнения проверки: не удалось получить версию БСП. (ACC 442) - Код АПК: `442` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/612) ### acc:443 - Ошибка выполнения проверки: не удалось получить назначение ролей пользователей. АПК:443 URL: https://v8std.ru/diagnostics/acc/443/ Markdown URL: https://v8std.ru/diagnostics/acc/443.md Source path: diagnostics/acc/443.md Aliases: acc:443, #acc:443, acc 443, acc443, апк 443, АПК:443 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/424 ID: acc:443 # Ошибка выполнения проверки: не удалось получить назначение ролей пользователей. (ACC 443) - Код АПК: `443` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/424) ### acc:444 - Экспортная процедура в модуле с повторным использованием. АПК:444 URL: https://v8std.ru/diagnostics/acc/444/ Markdown URL: https://v8std.ru/diagnostics/acc/444.md Source path: diagnostics/acc/444.md Aliases: acc:444, #acc:444, acc 444, acc444, апк 444, АПК:444 Related: standard:std724 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/407 ID: acc:444 # Экспортная процедура в модуле с повторным использованием. (ACC 444) - Код АПК: `444` #### Стандарт - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/407) ### acc:445 - В реквизит формы присвоена нелокализованная строка. АПК:445 URL: https://v8std.ru/diagnostics/acc/445/ Markdown URL: https://v8std.ru/diagnostics/acc/445.md Source path: diagnostics/acc/445.md Aliases: acc:445, #acc:445, acc 445, acc445, апк 445, АПК:445 Related: standard:std765 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/249 ID: acc:445 # В реквизит формы присвоена нелокализованная строка. (ACC 445) - Код АПК: `445` #### Стандарт - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/249) ### acc:446 - У элемента формы не заполнен заголовок. АПК:446 URL: https://v8std.ru/diagnostics/acc/446/ Markdown URL: https://v8std.ru/diagnostics/acc/446.md Source path: diagnostics/acc/446.md Aliases: acc:446, #acc:446, acc 446, acc446, апк 446, АПК:446 Related: standard:std765 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/250 ID: acc:446 # У элемента формы не заполнен заголовок. (ACC 446) - Код АПК: `446` #### Стандарт - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/250) ### acc:447 - У элемента формы бессмысленная подсказка. АПК:447 URL: https://v8std.ru/diagnostics/acc/447/ Markdown URL: https://v8std.ru/diagnostics/acc/447.md Source path: diagnostics/acc/447.md Aliases: acc:447, #acc:447, acc 447, acc447, апк 447, АПК:447 Related: standard:std478, standard:std765 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/125 ID: acc:447 # У элемента формы бессмысленная подсказка. (ACC 447) - Код АПК: `447` #### Стандарт - [#std478: Подсказка и проверка заполнения](https://v8std.ru/std/478/) - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/125) ### acc:448 - У элемента формы с заполненным списком выбора отключено свойство "Режим выбора из списка". АПК:448 URL: https://v8std.ru/diagnostics/acc/448/ Markdown URL: https://v8std.ru/diagnostics/acc/448.md Source path: diagnostics/acc/448.md Aliases: acc:448, #acc:448, acc 448, acc448, апк 448, АПК:448 Related: edt_check:v8cs:input-field-list-choice-mode, standard:std765 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/251 ID: acc:448 # У элемента формы с заполненным списком выбора отключено свойство "Режим выбора из списка". (ACC 448) - Код АПК: `448` - Код проверки EDT: [input-field-list-choice-mode](https://v8std.ru/diagnostics/v8-code-style/input-field-list-choice-mode/) #### Стандарт - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/251) ### acc:449 - Задано наименование предопределенного регламентного задания. АПК:449 URL: https://v8std.ru/diagnostics/acc/449/ Markdown URL: https://v8std.ru/diagnostics/acc/449.md Source path: diagnostics/acc/449.md Aliases: acc:449, #acc:449, acc 449, acc449, апк 449, АПК:449 Related: standard:std767 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/431 ID: acc:449 # Задано наименование предопределенного регламентного задания. (ACC 449) - Код АПК: `449` #### Стандарт - [#std767: Регламентные задания: требования по локализации](https://v8std.ru/std/767/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/431) ### acc:450 - В макете используется кодировка, отличная от "UTF-8". АПК:450 URL: https://v8std.ru/diagnostics/acc/450/ Markdown URL: https://v8std.ru/diagnostics/acc/450.md Source path: diagnostics/acc/450.md Aliases: acc:450, #acc:450, acc 450, acc450, апк 450, АПК:450 Related: standard:std766 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/253 ID: acc:450 # В макете используется кодировка, отличная от "UTF-8". (ACC 450) - Код АПК: `450` #### Стандарт - [#std766: Макеты: требования по локализации и поддержке разных языков интерфейса](https://v8std.ru/std/766/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/253) ### acc:453 - Обращение к менеджеру регламентных заданий при наличии подсистемы "Технология сервиса". АПК:453 URL: https://v8std.ru/diagnostics/acc/453/ Markdown URL: https://v8std.ru/diagnostics/acc/453.md Source path: diagnostics/acc/453.md Aliases: acc:453, #acc:453, acc 453, acc453, апк 453, АПК:453 Related: standard:std760 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/360 ID: acc:453 # Обращение к менеджеру регламентных заданий при наличии подсистемы "Технология сервиса". (ACC 453) - Код АПК: `453` #### Стандарт - [#std760: Ограничения на регламентные задания при работе в модели сервиса](https://v8std.ru/std/760/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/360) ### acc:454 - Регламентное задание включено в состав разделителя. АПК:454 URL: https://v8std.ru/diagnostics/acc/454/ Markdown URL: https://v8std.ru/diagnostics/acc/454.md Source path: diagnostics/acc/454.md Aliases: acc:454, #acc:454, acc 454, acc454, апк 454, АПК:454 Related: standard:std760 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/622 ID: acc:454 # Регламентное задание включено в состав разделителя. (ACC 454) - Код АПК: `454` #### Стандарт - [#std760: Ограничения на регламентные задания при работе в модели сервиса](https://v8std.ru/std/760/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/622) ### acc:455 - Регламентное задание с включенным использованием отсутствует в процедуре "ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов". АПК:455 URL: https://v8std.ru/diagnostics/acc/455/ Markdown URL: https://v8std.ru/diagnostics/acc/455.md Source path: diagnostics/acc/455.md Aliases: acc:455, #acc:455, acc 455, acc455, апк 455, АПК:455 Related: standard:std760 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/361 ID: acc:455 # Регламентное задание с включенным использованием отсутствует в процедуре "ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов". (ACC 455) - Код АПК: `455` #### Стандарт - [#std760: Ограничения на регламентные задания при работе в модели сервиса](https://v8std.ru/std/760/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/361) ### acc:456 - Использование метода "СтрШаблон()". АПК:456 URL: https://v8std.ru/diagnostics/acc/456/ Markdown URL: https://v8std.ru/diagnostics/acc/456.md Source path: diagnostics/acc/456.md Aliases: acc:456, #acc:456, acc 456, acc456, апк 456, АПК:456 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/254 ID: acc:456 # Использование метода "СтрШаблон()". (ACC 456) - Код АПК: `456` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/254) ### acc:457 - Использована ролевая настройка видимости в командном интерфейсе конфигурации. АПК:457 URL: https://v8std.ru/diagnostics/acc/457/ Markdown URL: https://v8std.ru/diagnostics/acc/457.md Source path: diagnostics/acc/457.md Aliases: acc:457, #acc:457, acc 457, acc457, апк 457, АПК:457 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/222 ID: acc:457 # Использована ролевая настройка видимости в командном интерфейсе конфигурации. (ACC 457) - Код АПК: `457` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/222) ### acc:458 - Устаревшая процедура (функция) расположена вне области "УстаревшиеПроцедурыИФункции". АПК:458 URL: https://v8std.ru/diagnostics/acc/458/ Markdown URL: https://v8std.ru/diagnostics/acc/458.md Source path: diagnostics/acc/458.md Aliases: acc:458, #acc:458, acc 458, acc458, апк 458, АПК:458 Related: standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/232 ID: acc:458 # Устаревшая процедура (функция) расположена вне области "УстаревшиеПроцедурыИФункции". (ACC 458) - Код АПК: `458` #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/232) ### acc:459 - Описание процедуры (функции) размещено в середине, а не в начале комментария; либо описание параметра без отступа. АПК:459 URL: https://v8std.ru/diagnostics/acc/459/ Markdown URL: https://v8std.ru/diagnostics/acc/459.md Source path: diagnostics/acc/459.md Aliases: acc:459, #acc:459, acc 459, acc459, апк 459, АПК:459 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/626 ID: acc:459 # Описание процедуры (функции) размещено в середине, а не в начале комментария; либо описание параметра без отступа. (ACC 459) - Код АПК: `459` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/626) ### acc:460 - Использована ролевая настройка видимости в рабочей области начальной страницы. АПК:460 URL: https://v8std.ru/diagnostics/acc/460/ Markdown URL: https://v8std.ru/diagnostics/acc/460.md Source path: diagnostics/acc/460.md Aliases: acc:460, #acc:460, acc 460, acc460, апк 460, АПК:460 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/223 ID: acc:460 # Использована ролевая настройка видимости в рабочей области начальной страницы. (ACC 460) - Код АПК: `460` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/223) ### acc:461 - Использована ролевая настройка видимости в командном интерфейсе основного раздела. АПК:461 URL: https://v8std.ru/diagnostics/acc/461/ Markdown URL: https://v8std.ru/diagnostics/acc/461.md Source path: diagnostics/acc/461.md Aliases: acc:461, #acc:461, acc 461, acc461, апк 461, АПК:461 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/224 ID: acc:461 # Использована ролевая настройка видимости в командном интерфейсе основного раздела. (ACC 461) - Код АПК: `461` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/224) ### acc:462 - Для строковой константы запроса СКД не установлено представление доступного значения. АПК:462 URL: https://v8std.ru/diagnostics/acc/462/ Markdown URL: https://v8std.ru/diagnostics/acc/462.md Source path: diagnostics/acc/462.md Aliases: acc:462, #acc:462, acc 462, acc462, апк 462, АПК:462 Related: standard:std762 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/539 ID: acc:462 # Для строковой константы запроса СКД не установлено представление доступного значения. (ACC 462) - Код АПК: `462` #### Стандарт - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/539) ### acc:463 - Строковая константа в запросе СКД не соответствует правилам образования имен переменных. АПК:463 URL: https://v8std.ru/diagnostics/acc/463/ Markdown URL: https://v8std.ru/diagnostics/acc/463.md Source path: diagnostics/acc/463.md Aliases: acc:463, #acc:463, acc 463, acc463, апк 463, АПК:463 Related: edt_check:v8cs:ql-camel-case-string-literal, standard:std762 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/243 ID: acc:463 # Строковая константа в запросе СКД не соответствует правилам образования имен переменных. (ACC 463) - Код АПК: `463` - Код проверки EDT: [ql-camel-case-string-literal](https://v8std.ru/diagnostics/v8-code-style/ql-camel-case-string-literal/) #### Стандарт - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/243) ### acc:464 - Не заполнен заголовок поля динамического списка. АПК:464 URL: https://v8std.ru/diagnostics/acc/464/ Markdown URL: https://v8std.ru/diagnostics/acc/464.md Source path: diagnostics/acc/464.md Aliases: acc:464, #acc:464, acc 464, acc464, апк 464, АПК:464 Related: standard:std765 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/244 ID: acc:464 # Не заполнен заголовок поля динамического списка. (ACC 464) - Код АПК: `464` #### Стандарт - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/244) ### acc:465 - Не заполнен заголовок поля выборки в запросе СКД. АПК:465 URL: https://v8std.ru/diagnostics/acc/465/ Markdown URL: https://v8std.ru/diagnostics/acc/465.md Source path: diagnostics/acc/465.md Aliases: acc:465, #acc:465, acc 465, acc465, апк 465, АПК:465 Related: standard:std762 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/245 ID: acc:465 # Не заполнен заголовок поля выборки в запросе СКД. (ACC 465) - Код АПК: `465` #### Стандарт - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/245) ### acc:466 - Нестандартные секции в описании экспортной процедуры (функции). АПК:466 URL: https://v8std.ru/diagnostics/acc/466/ Markdown URL: https://v8std.ru/diagnostics/acc/466.md Source path: diagnostics/acc/466.md Aliases: acc:466, #acc:466, acc 466, acc466, апк 466, АПК:466 Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/204 ID: acc:466 # Нестандартные секции в описании экспортной процедуры (функции). (ACC 466) - Код АПК: `466` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/204) ### acc:467 - Использование монопольного или оперативного обработчика обновления. АПК:467 URL: https://v8std.ru/diagnostics/acc/467/ Markdown URL: https://v8std.ru/diagnostics/acc/467.md Source path: diagnostics/acc/467.md Aliases: acc:467, #acc:467, acc 467, acc467, апк 467, АПК:467 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/238 ID: acc:467 # Использование монопольного или оперативного обработчика обновления. (ACC 467) - Код АПК: `467` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/238) ### acc:468 - Экспортная процедура (функция) в области "ПрограммныйИнтерфейс" в общем модуле с повторным использованием. АПК:468 URL: https://v8std.ru/diagnostics/acc/468/ Markdown URL: https://v8std.ru/diagnostics/acc/468.md Source path: diagnostics/acc/468.md Aliases: acc:468, #acc:468, acc 468, acc468, апк 468, АПК:468 Related: standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/234 ID: acc:468 # Экспортная процедура (функция) в области "ПрограммныйИнтерфейс" в общем модуле с повторным использованием. (ACC 468) - Код АПК: `468` #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/234) ### acc:469 - В служебном общем модуле присутствует область "ПрограммныйИнтерфейс". АПК:469 URL: https://v8std.ru/diagnostics/acc/469/ Markdown URL: https://v8std.ru/diagnostics/acc/469.md Source path: diagnostics/acc/469.md Aliases: acc:469, #acc:469, acc 469, acc469, апк 469, АПК:469 Related: standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/233 ID: acc:469 # В служебном общем модуле присутствует область "ПрограммныйИнтерфейс". (ACC 469) - Код АПК: `469` #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/233) ### acc:470 - Превышена максимальная длина числовых данных в запросе (31 знак). АПК:470 URL: https://v8std.ru/diagnostics/acc/470/ Markdown URL: https://v8std.ru/diagnostics/acc/470.md Source path: diagnostics/acc/470.md Aliases: acc:470, #acc:470, acc 470, acc470, апк 470, АПК:470 Related: edt_check:v8cs:ql-cast-to-max-number, standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/89 ID: acc:470 # Превышена максимальная длина числовых данных в запросе (31 знак). (ACC 470) - Код АПК: `470` - Код проверки EDT: [ql-cast-to-max-number](https://v8std.ru/diagnostics/v8-code-style/ql-cast-to-max-number/) #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/89) ### acc:472 - Небезопасное подключение внешних компонент. АПК:472 URL: https://v8std.ru/diagnostics/acc/472/ Markdown URL: https://v8std.ru/diagnostics/acc/472.md Source path: diagnostics/acc/472.md Aliases: acc:472, #acc:472, acc 472, acc472, апк 472, АПК:472 Related: standard:std669 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/413 ID: acc:472 # Небезопасное подключение внешних компонент. (ACC 472) - Код АПК: `472` #### Стандарт - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/413) ### acc:473 - Область "ДляВызоваИзДругихПодсистем" не входит в область "ПрограммныйИнтерфейс". АПК:473 URL: https://v8std.ru/diagnostics/acc/473/ Markdown URL: https://v8std.ru/diagnostics/acc/473.md Source path: diagnostics/acc/473.md Aliases: acc:473, #acc:473, acc 473, acc473, апк 473, АПК:473 Related: standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/632 ID: acc:473 # Область "ДляВызоваИзДругихПодсистем" не входит в область "ПрограммныйИнтерфейс". (ACC 473) - Код АПК: `473` #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/632) ### acc:474 - В комментарии внутри области "ДляВызоваИзДругихПодсистем" не указана подсистема-потребитель. АПК:474 URL: https://v8std.ru/diagnostics/acc/474/ Markdown URL: https://v8std.ru/diagnostics/acc/474.md Source path: diagnostics/acc/474.md Aliases: acc:474, #acc:474, acc 474, acc474, апк 474, АПК:474 Related: standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/633 ID: acc:474 # В комментарии внутри области "ДляВызоваИзДругихПодсистем" не указана подсистема-потребитель. (ACC 474) - Код АПК: `474` #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/633) ### acc:475 - В комментарии внутри области "ДляВызоваИзДругихПодсистем" указана несуществующая подсистема. АПК:475 URL: https://v8std.ru/diagnostics/acc/475/ Markdown URL: https://v8std.ru/diagnostics/acc/475.md Source path: diagnostics/acc/475.md Aliases: acc:475, #acc:475, acc 475, acc475, апк 475, АПК:475 Related: standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/634 ID: acc:475 # В комментарии внутри области "ДляВызоваИзДругихПодсистем" указана несуществующая подсистема. (ACC 475) - Код АПК: `475` #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/634) ### acc:476 - Внутри области "ДляВызоваИзДругихПодсистем" не найден закрывающий комментарий "// Конец ... ". АПК:476 URL: https://v8std.ru/diagnostics/acc/476/ Markdown URL: https://v8std.ru/diagnostics/acc/476.md Source path: diagnostics/acc/476.md Aliases: acc:476, #acc:476, acc 476, acc476, апк 476, АПК:476 Related: standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/235 ID: acc:476 # Внутри области "ДляВызоваИзДругихПодсистем" не найден закрывающий комментарий "// Конец ... ". (ACC 476) - Код АПК: `476` #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/235) ### acc:478 - Нарушена схема работы с транзакциями: между "Исключение" и "ОтменитьТранзакцию()" есть исполняемый код. АПК:478 URL: https://v8std.ru/diagnostics/acc/478/ Markdown URL: https://v8std.ru/diagnostics/acc/478.md Source path: diagnostics/acc/478.md Aliases: acc:478, #acc:478, acc 478, acc478, апк 478, АПК:478 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/540 ID: acc:478 # Нарушена схема работы с транзакциями: между "Исключение" и "ОтменитьТранзакцию()" есть исполняемый код. (ACC 478) - Код АПК: `478` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/540) ### acc:482 - Запрос динамического списка, не содержащий секции "ИЗ", не переопределен в модуле формы. АПК:482 URL: https://v8std.ru/diagnostics/acc/482/ Markdown URL: https://v8std.ru/diagnostics/acc/482.md Source path: diagnostics/acc/482.md Aliases: acc:482, #acc:482, acc 482, acc482, апк 482, АПК:482 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/636 ID: acc:482 # Запрос динамического списка, не содержащий секции "ИЗ", не переопределен в модуле формы. (ACC 482) - Код АПК: `482` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/636) ### acc:483 - Псевдоним таблицы запроса динамического списка, переопределяемого программно, не заканчивается постфиксом "Переопределяемый". АПК:483 URL: https://v8std.ru/diagnostics/acc/483/ Markdown URL: https://v8std.ru/diagnostics/acc/483.md Source path: diagnostics/acc/483.md Aliases: acc:483, #acc:483, acc 483, acc483, апк 483, АПК:483 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/637 ID: acc:483 # Псевдоним таблицы запроса динамического списка, переопределяемого программно, не заканчивается постфиксом "Переопределяемый". (ACC 483) - Код АПК: `483` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/637) ### acc:484 - Программная установка свойств динамического списка выполняется без помощи процедуры "ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка()". АПК:484 URL: https://v8std.ru/diagnostics/acc/484/ Markdown URL: https://v8std.ru/diagnostics/acc/484.md Source path: diagnostics/acc/484.md Aliases: acc:484, #acc:484, acc 484, acc484, апк 484, АПК:484 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/267 ID: acc:484 # Программная установка свойств динамического списка выполняется без помощи процедуры "ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка()". (ACC 484) - Код АПК: `484` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/267) ### acc:486 - Отсутствует включение безопасного режима перед вызовом метода "Выполнить" или "Вычислить". АПК:486 URL: https://v8std.ru/diagnostics/acc/486/ Markdown URL: https://v8std.ru/diagnostics/acc/486.md Source path: diagnostics/acc/486.md Aliases: acc:486, #acc:486, acc 486, acc486, апк 486, АПК:486 Related: standard:std770 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/639 ID: acc:486 # Отсутствует включение безопасного режима перед вызовом метода "Выполнить" или "Вычислить". (ACC 486) - Код АПК: `486` #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/639) ### acc:487 - Обнаружен вызов метода "Выполнить" вместо "ОбщегоНазначения.ВыполнитьВБезопасномРежиме()". АПК:487 URL: https://v8std.ru/diagnostics/acc/487/ Markdown URL: https://v8std.ru/diagnostics/acc/487.md Source path: diagnostics/acc/487.md Aliases: acc:487, #acc:487, acc 487, acc487, апк 487, АПК:487 Related: standard:std770 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/640 ID: acc:487 # Обнаружен вызов метода "Выполнить" вместо "ОбщегоНазначения.ВыполнитьВБезопасномРежиме()". (ACC 487) - Код АПК: `487` #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/640) ### acc:488 - Обнаружен вызов метода "Вычислить" вместо "ОбщегоНазначения.ВычислитьВБезопасномРежиме()". АПК:488 URL: https://v8std.ru/diagnostics/acc/488/ Markdown URL: https://v8std.ru/diagnostics/acc/488.md Source path: diagnostics/acc/488.md Aliases: acc:488, #acc:488, acc 488, acc488, апк 488, АПК:488 Related: standard:std770 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/641 ID: acc:488 # Обнаружен вызов метода "Вычислить" вместо "ОбщегоНазначения.ВычислитьВБезопасномРежиме()". (ACC 488) - Код АПК: `488` #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/641) ### acc:489 - Обнаружен вызов метода "Выполнить" вместо "РаботаВБезопасномРежиме.ВыполнитьВБезопасномРежиме()". АПК:489 URL: https://v8std.ru/diagnostics/acc/489/ Markdown URL: https://v8std.ru/diagnostics/acc/489.md Source path: diagnostics/acc/489.md Aliases: acc:489, #acc:489, acc 489, acc489, апк 489, АПК:489 Related: standard:std770 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/541 ID: acc:489 # Обнаружен вызов метода "Выполнить" вместо "РаботаВБезопасномРежиме.ВыполнитьВБезопасномРежиме()". (ACC 489) - Код АПК: `489` #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/541) ### acc:490 - Обнаружен вызов метода "Вычислить" вместо "РаботаВБезопасномРежиме.ВычислитьВБезопасномРежиме()". АПК:490 URL: https://v8std.ru/diagnostics/acc/490/ Markdown URL: https://v8std.ru/diagnostics/acc/490.md Source path: diagnostics/acc/490.md Aliases: acc:490, #acc:490, acc 490, acc490, апк 490, АПК:490 Related: standard:std770 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/417 ID: acc:490 # Обнаружен вызов метода "Вычислить" вместо "РаботаВБезопасномРежиме.ВычислитьВБезопасномРежиме()". (ACC 490) - Код АПК: `490` #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/417) ### acc:491 - Некорректная локализация фрагмента текста запроса. АПК:491 URL: https://v8std.ru/diagnostics/acc/491/ Markdown URL: https://v8std.ru/diagnostics/acc/491.md Source path: diagnostics/acc/491.md Aliases: acc:491, #acc:491, acc 491, acc491, апк 491, АПК:491 Related: standard:std762 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/241 ID: acc:491 # Некорректная локализация фрагмента текста запроса. (ACC 491) - Код АПК: `491` #### Стандарт - [#std762: Запросы, динамические списки и отчеты на СКД: требования по локализации](https://v8std.ru/std/762/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/241) ### acc:492 - Неверно задан именованный параметр подстановки. АПК:492 URL: https://v8std.ru/diagnostics/acc/492/ Markdown URL: https://v8std.ru/diagnostics/acc/492.md Source path: diagnostics/acc/492.md Aliases: acc:492, #acc:492, acc 492, acc492, апк 492, АПК:492 Related: standard:std761 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/240 ID: acc:492 # Неверно задан именованный параметр подстановки. (ACC 492) - Код АПК: `492` #### Стандарт - [#std761: Интерфейсные тексты в коде: требования по локализации](https://v8std.ru/std/761/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/240) ### acc:494 - Использование запроса, выполняющего соединение с вложенным запросом. АПК:494 URL: https://v8std.ru/diagnostics/acc/494/ Markdown URL: https://v8std.ru/diagnostics/acc/494.md Source path: diagnostics/acc/494.md Aliases: acc:494, #acc:494, acc 494, acc494, апк 494, АПК:494 Related: edt_check:v8cs:ql-join-to-sub-query, standard:std655 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/168 ID: acc:494 # Использование запроса, выполняющего соединение с вложенным запросом. (ACC 494) - Код АПК: `494` - Код проверки EDT: [ql-join-to-sub-query](https://v8std.ru/diagnostics/v8-code-style/ql-join-to-sub-query/) #### Стандарт - [#std655: Ограничения на соединения с вложенными запросами и виртуальными таблицами](https://v8std.ru/std/655/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/168) ### acc:495 - Вызов функции "КаталогВременныхФайлов()". АПК:495 URL: https://v8std.ru/diagnostics/acc/495/ Markdown URL: https://v8std.ru/diagnostics/acc/495.md Source path: diagnostics/acc/495.md Aliases: acc:495, #acc:495, acc 495, acc495, апк 495, АПК:495 Related: standard:std542 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/408 ID: acc:495 # Вызов функции "КаталогВременныхФайлов()". (ACC 495) - Код АПК: `495` #### Стандарт - [#std542: Доступ к файловой системе из кода конфигурации](https://v8std.ru/std/542/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/408) ### acc:496 - Не заполнен параметр "РегламентноеЗадание" при вызове процедуры "ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();". АПК:496 URL: https://v8std.ru/diagnostics/acc/496/ Markdown URL: https://v8std.ru/diagnostics/acc/496.md Source path: diagnostics/acc/496.md Aliases: acc:496, #acc:496, acc 496, acc496, апк 496, АПК:496 Related: standard:std540 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/150 ID: acc:496 # Не заполнен параметр "РегламентноеЗадание" при вызове процедуры "ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();". (ACC 496) - Код АПК: `496` #### Стандарт - [#std540: Общие требования к регламентным заданиям](https://v8std.ru/std/540/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/150) ### acc:497 - В имени макета отсутствует суффикс (например, "_ru"). АПК:497 URL: https://v8std.ru/diagnostics/acc/497/ Markdown URL: https://v8std.ru/diagnostics/acc/497.md Source path: diagnostics/acc/497.md Aliases: acc:497, #acc:497, acc 497, acc497, апк 497, АПК:497 Related: standard:std766 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/252 ID: acc:497 # В имени макета отсутствует суффикс (например, "_ru"). (ACC 497) - Код АПК: `497` #### Стандарт - [#std766: Макеты: требования по локализации и поддержке разных языков интерфейса](https://v8std.ru/std/766/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/252) ### acc:499 - Процедура переопределяемого общего модуля содержит лишний код (должен быть только код вида ".();"). АПК:499 URL: https://v8std.ru/diagnostics/acc/499/ Markdown URL: https://v8std.ru/diagnostics/acc/499.md Source path: diagnostics/acc/499.md Aliases: acc:499, #acc:499, acc 499, acc499, апк 499, АПК:499 Related: standard:std554 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/543 ID: acc:499 # Процедура переопределяемого общего модуля содержит лишний код (должен быть только код вида ".();"). (ACC 499) - Код АПК: `499` #### Стандарт - [#std554: Переопределение общих модулей в условиях иерархии библиотек](https://v8std.ru/std/554/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/543) ### acc:5 - Комментарий должен начинаться с прописной буквы. АПК:5 URL: https://v8std.ru/diagnostics/acc/5/ Markdown URL: https://v8std.ru/diagnostics/acc/5.md Source path: diagnostics/acc/5.md Aliases: acc:5, #acc:5, acc 5, acc5, апк 5, АПК:5 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/114 ID: acc:5 # Комментарий должен начинаться с прописной буквы. (ACC 5) - Код АПК: `5` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/114) ### acc:500 - Имя вызываемой процедуры отличается от имени переопределяемой процедуры. АПК:500 URL: https://v8std.ru/diagnostics/acc/500/ Markdown URL: https://v8std.ru/diagnostics/acc/500.md Source path: diagnostics/acc/500.md Aliases: acc:500, #acc:500, acc 500, acc500, апк 500, АПК:500 Related: standard:std554 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/545 ID: acc:500 # Имя вызываемой процедуры отличается от имени переопределяемой процедуры. (ACC 500) - Код АПК: `500` #### Стандарт - [#std554: Переопределение общих модулей в условиях иерархии библиотек](https://v8std.ru/std/554/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/545) ### acc:501 - Отличается состав или порядок параметров вызываемой и переопределяемой процедуры. АПК:501 URL: https://v8std.ru/diagnostics/acc/501/ Markdown URL: https://v8std.ru/diagnostics/acc/501.md Source path: diagnostics/acc/501.md Aliases: acc:501, #acc:501, acc 501, acc501, апк 501, АПК:501 Related: standard:std554 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/547 ID: acc:501 # Отличается состав или порядок параметров вызываемой и переопределяемой процедуры. (ACC 501) - Код АПК: `501` #### Стандарт - [#std554: Переопределение общих модулей в условиях иерархии библиотек](https://v8std.ru/std/554/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/547) ### acc:502 - Неверный комментарий у процедуры, вызываемой в переопределяемом модуле (должен быть "См. .."). АПК:502 URL: https://v8std.ru/diagnostics/acc/502/ Markdown URL: https://v8std.ru/diagnostics/acc/502.md Source path: diagnostics/acc/502.md Aliases: acc:502, #acc:502, acc 502, acc502, апк 502, АПК:502 Related: standard:std554 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/548 ID: acc:502 # Неверный комментарий у процедуры, вызываемой в переопределяемом модуле (должен быть "См. .."). (ACC 502) - Код АПК: `502` #### Стандарт - [#std554: Переопределение общих модулей в условиях иерархии библиотек](https://v8std.ru/std/554/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/548) ### acc:503 - В переопределяемом общем модуле описана функция. АПК:503 URL: https://v8std.ru/diagnostics/acc/503/ Markdown URL: https://v8std.ru/diagnostics/acc/503.md Source path: diagnostics/acc/503.md Aliases: acc:503, #acc:503, acc 503, acc503, апк 503, АПК:503 Related: standard:std554 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/550 ID: acc:503 # В переопределяемом общем модуле описана функция. (ACC 503) - Код АПК: `503` #### Стандарт - [#std554: Переопределение общих модулей в условиях иерархии библиотек](https://v8std.ru/std/554/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/550) ### acc:505 - В переопределяемом общем модуле описана неэкспортная процедура (функция). АПК:505 URL: https://v8std.ru/diagnostics/acc/505/ Markdown URL: https://v8std.ru/diagnostics/acc/505.md Source path: diagnostics/acc/505.md Aliases: acc:505, #acc:505, acc 505, acc505, апк 505, АПК:505 Related: standard:std554 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/552 ID: acc:505 # В переопределяемом общем модуле описана неэкспортная процедура (функция). (ACC 505) - Код АПК: `505` #### Стандарт - [#std554: Переопределение общих модулей в условиях иерархии библиотек](https://v8std.ru/std/554/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/552) ### acc:506 - В переопределяемом общем модуле описана лишняя внешняя область (должна быть только область "ПрограммныйИнтерфейс"). АПК:506 URL: https://v8std.ru/diagnostics/acc/506/ Markdown URL: https://v8std.ru/diagnostics/acc/506.md Source path: diagnostics/acc/506.md Aliases: acc:506, #acc:506, acc 506, acc506, апк 506, АПК:506 Related: standard:std554 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/231 ID: acc:506 # В переопределяемом общем модуле описана лишняя внешняя область (должна быть только область "ПрограммныйИнтерфейс"). (ACC 506) - Код АПК: `506` #### Стандарт - [#std554: Переопределение общих модулей в условиях иерархии библиотек](https://v8std.ru/std/554/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/231) ### acc:507 - Роль дает права на объекты других подсистем. АПК:507 URL: https://v8std.ru/diagnostics/acc/507/ Markdown URL: https://v8std.ru/diagnostics/acc/507.md Source path: diagnostics/acc/507.md Aliases: acc:507, #acc:507, acc 507, acc507, апк 507, АПК:507 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/212 ID: acc:507 # Роль дает права на объекты других подсистем. (ACC 507) - Код АПК: `507` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/212) ### acc:508 - Неверно заданы права на обработку (должны быть у ИспользованиеОбработки, БазовыеПрава или Подсистема). АПК:508 URL: https://v8std.ru/diagnostics/acc/508/ Markdown URL: https://v8std.ru/diagnostics/acc/508.md Source path: diagnostics/acc/508.md Aliases: acc:508, #acc:508, acc 508, acc508, апк 508, АПК:508 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/213 ID: acc:508 # Неверно заданы права на обработку (должны быть у ИспользованиеОбработки, БазовыеПрава или Подсистема). (ACC 508) - Код АПК: `508` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/213) ### acc:510 - Ни в одной роли нет прав на просмотр команды. АПК:510 URL: https://v8std.ru/diagnostics/acc/510/ Markdown URL: https://v8std.ru/diagnostics/acc/510.md Source path: diagnostics/acc/510.md Aliases: acc:510, #acc:510, acc 510, acc510, апк 510, АПК:510 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/644 ID: acc:510 # Ни в одной роли нет прав на просмотр команды. (ACC 510) - Код АПК: `510` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/644) ### acc:511 - Неверно заданы права на команду (есть права на просмотр команды, но нет прав на чтение или просмотр объекта). АПК:511 URL: https://v8std.ru/diagnostics/acc/511/ Markdown URL: https://v8std.ru/diagnostics/acc/511.md Source path: diagnostics/acc/511.md Aliases: acc:511, #acc:511, acc 511, acc511, апк 511, АПК:511 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/645 ID: acc:511 # Неверно заданы права на команду (есть права на просмотр команды, но нет прав на чтение или просмотр объекта). (ACC 511) - Код АПК: `511` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/645) ### acc:512 - Неверно заданы права на команду (есть права на чтение или просмотр объекта, но нет прав на просмотр команды). АПК:512 URL: https://v8std.ru/diagnostics/acc/512/ Markdown URL: https://v8std.ru/diagnostics/acc/512.md Source path: diagnostics/acc/512.md Aliases: acc:512, #acc:512, acc 512, acc512, апк 512, АПК:512 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/646 ID: acc:512 # Неверно заданы права на команду (есть права на чтение или просмотр объекта, но нет прав на просмотр команды). (ACC 512) - Код АПК: `512` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/646) ### acc:513 - Неверно заданы права на команду (права на команды печати должны быть назначены роли "БазовыеПрава"). АПК:513 URL: https://v8std.ru/diagnostics/acc/513/ Markdown URL: https://v8std.ru/diagnostics/acc/513.md Source path: diagnostics/acc/513.md Aliases: acc:513, #acc:513, acc 513, acc513, апк 513, АПК:513 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/214 ID: acc:513 # Неверно заданы права на команду (права на команды печати должны быть назначены роли "БазовыеПрава"). (ACC 513) - Код АПК: `513` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/214) ### acc:514 - Роль не дает прав ни на один объект метаданных, и к ней нет обращения в коде модулей. АПК:514 URL: https://v8std.ru/diagnostics/acc/514/ Markdown URL: https://v8std.ru/diagnostics/acc/514.md Source path: diagnostics/acc/514.md Aliases: acc:514, #acc:514, acc 514, acc514, апк 514, АПК:514 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/225 ID: acc:514 # Роль не дает прав ни на один объект метаданных, и к ней нет обращения в коде модулей. (ACC 514) - Код АПК: `514` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/225) ### acc:515 - Использована функция "Пользователи.РолиДоступны()". АПК:515 URL: https://v8std.ru/diagnostics/acc/515/ Markdown URL: https://v8std.ru/diagnostics/acc/515.md Source path: diagnostics/acc/515.md Aliases: acc:515, #acc:515, acc 515, acc515, апк 515, АПК:515 Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/226 ID: acc:515 # Использована функция "Пользователи.РолиДоступны()". (ACC 515) - Код АПК: `515` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/226) ### acc:518 - Планом обмена поддерживается версия формата обмена EnterpriseData, не входящая в состав конфигурации. АПК:518 URL: https://v8std.ru/diagnostics/acc/518/ Markdown URL: https://v8std.ru/diagnostics/acc/518.md Source path: diagnostics/acc/518.md Aliases: acc:518, #acc:518, acc 518, acc518, апк 518, АПК:518 Related: standard:std771 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/650 ID: acc:518 # Планом обмена поддерживается версия формата обмена EnterpriseData, не входящая в состав конфигурации. (ACC 518) - Код АПК: `518` #### Стандарт - [#std771: Интеграция прикладных решений через формат EnterpriseData](https://v8std.ru/std/771/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/650) ### acc:519 - Планом обмена не поддерживается более высокая версия формата обмена EnterpriseData. АПК:519 URL: https://v8std.ru/diagnostics/acc/519/ Markdown URL: https://v8std.ru/diagnostics/acc/519.md Source path: diagnostics/acc/519.md Aliases: acc:519, #acc:519, acc 519, acc519, апк 519, АПК:519 Related: standard:std771 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/651 ID: acc:519 # Планом обмена не поддерживается более высокая версия формата обмена EnterpriseData. (ACC 519) - Код АПК: `519` #### Стандарт - [#std771: Интеграция прикладных решений через формат EnterpriseData](https://v8std.ru/std/771/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/651) ### acc:520 - Планом обмена не поддерживается более низкая версия формата обмена EnterpriseData. АПК:520 URL: https://v8std.ru/diagnostics/acc/520/ Markdown URL: https://v8std.ru/diagnostics/acc/520.md Source path: diagnostics/acc/520.md Aliases: acc:520, #acc:520, acc 520, acc520, апк 520, АПК:520 Related: standard:std771 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/229 ID: acc:520 # Планом обмена не поддерживается более низкая версия формата обмена EnterpriseData. (ACC 520) - Код АПК: `520` #### Стандарт - [#std771: Интеграция прикладных решений через формат EnterpriseData](https://v8std.ru/std/771/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/229) ### acc:521 - Нарушена схема работы с транзакциями: преждевременный выход из блока "Попытка..Исключение" без завершения или отмены транзакции. АПК:521 URL: https://v8std.ru/diagnostics/acc/521/ Markdown URL: https://v8std.ru/diagnostics/acc/521.md Source path: diagnostics/acc/521.md Aliases: acc:521, #acc:521, acc 521, acc521, апк 521, АПК:521 Related: standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/395 ID: acc:521 # Нарушена схема работы с транзакциями: преждевременный выход из блока "Попытка..Исключение" без завершения или отмены транзакции. (ACC 521) - Код АПК: `521` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/395) ### acc:524 - Некорректно заполнено свойство "Путь к данным" у поля динамического списка. АПК:524 URL: https://v8std.ru/diagnostics/acc/524/ Markdown URL: https://v8std.ru/diagnostics/acc/524.md Source path: diagnostics/acc/524.md Aliases: acc:524, #acc:524, acc 524, acc524, апк 524, АПК:524 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/555 ID: acc:524 # Некорректно заполнено свойство "Путь к данным" у поля динамического списка. (ACC 524) - Код АПК: `524` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/555) ### acc:525 - Некорректно заполнено свойство "Данные" у кнопки, связанной с полем динамического списка. АПК:525 URL: https://v8std.ru/diagnostics/acc/525/ Markdown URL: https://v8std.ru/diagnostics/acc/525.md Source path: diagnostics/acc/525.md Aliases: acc:525, #acc:525, acc 525, acc525, апк 525, АПК:525 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/90 ID: acc:525 # Некорректно заполнено свойство "Данные" у кнопки, связанной с полем динамического списка. (ACC 525) - Код АПК: `525` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/90) ### acc:526 - У процедуры (функции) в модуле формы отсутствует директива компиляции. АПК:526 URL: https://v8std.ru/diagnostics/acc/526/ Markdown URL: https://v8std.ru/diagnostics/acc/526.md Source path: diagnostics/acc/526.md Aliases: acc:526, #acc:526, acc 526, acc526, апк 526, АПК:526 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/92 ID: acc:526 # У процедуры (функции) в модуле формы отсутствует директива компиляции. (ACC 526) - Код АПК: `526` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/92) ### acc:527 - В качестве параметра обработчика оповещения указана серверная процедура. АПК:527 URL: https://v8std.ru/diagnostics/acc/527/ Markdown URL: https://v8std.ru/diagnostics/acc/527.md Source path: diagnostics/acc/527.md Aliases: acc:527, #acc:527, acc 527, acc527, апк 527, АПК:527 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/94 ID: acc:527 # В качестве параметра обработчика оповещения указана серверная процедура. (ACC 527) - Код АПК: `527` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/94) ### acc:529 - Для объекта метаданных назначено несколько отложенных обработчиков обновления в параллельном режиме. АПК:529 URL: https://v8std.ru/diagnostics/acc/529/ Markdown URL: https://v8std.ru/diagnostics/acc/529.md Source path: diagnostics/acc/529.md Aliases: acc:529, #acc:529, acc 529, acc529, апк 529, АПК:529 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/657 ID: acc:529 # Для объекта метаданных назначено несколько отложенных обработчиков обновления в параллельном режиме. (ACC 529) - Код АПК: `529` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/657) ### acc:530 - Отложенный обработчик обновления в параллельном режиме для объекта одной подсистемы обрабатывает данные другой подсистемы. АПК:530 URL: https://v8std.ru/diagnostics/acc/530/ Markdown URL: https://v8std.ru/diagnostics/acc/530.md Source path: diagnostics/acc/530.md Aliases: acc:530, #acc:530, acc 530, acc530, апк 530, АПК:530 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/239 ID: acc:530 # Отложенный обработчик обновления в параллельном режиме для объекта одной подсистемы обрабатывает данные другой подсистемы. (ACC 530) - Код АПК: `530` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/239) ### acc:531 - Избыточное обращение внутри модуля через его имя или псевдоним ЭтотОбъект (к методу, свойству или реквизиту). АПК:531 URL: https://v8std.ru/diagnostics/acc/531/ Markdown URL: https://v8std.ru/diagnostics/acc/531.md Source path: diagnostics/acc/531.md Aliases: acc:531, #acc:531, acc 531, acc531, апк 531, АПК:531 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/310 ID: acc:531 # Избыточное обращение внутри модуля через его имя или псевдоним ЭтотОбъект (к методу, свойству или реквизиту). (ACC 531) - Код АПК: `531` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/310) ### acc:534 - Небезопасный запуск приложения. АПК:534 URL: https://v8std.ru/diagnostics/acc/534/ Markdown URL: https://v8std.ru/diagnostics/acc/534.md Source path: diagnostics/acc/534.md Aliases: acc:534, #acc:534, acc 534, acc534, апк 534, АПК:534 Related: standard:std774 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/418 ID: acc:534 # Небезопасный запуск приложения. (ACC 534) - Код АПК: `534` #### Стандарт - [#std774: Безопасность запуска приложений](https://v8std.ru/std/774/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/418) ### acc:536 - Отсутствует отключение макросов при работе с документом Microsoft Word. АПК:536 URL: https://v8std.ru/diagnostics/acc/536/ Markdown URL: https://v8std.ru/diagnostics/acc/536.md Source path: diagnostics/acc/536.md Aliases: acc:536, #acc:536, acc 536, acc536, апк 536, АПК:536 Related: standard:std775 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/661 ID: acc:536 # Отсутствует отключение макросов при работе с документом Microsoft Word. (ACC 536) - Код АПК: `536` #### Стандарт - [#std775: Безопасность программного обеспечения, вызываемого через открытые интерфейсы](https://v8std.ru/std/775/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/661) ### acc:537 - Отсутствует отключение макросов при работе с документом Microsoft Excel. АПК:537 URL: https://v8std.ru/diagnostics/acc/537/ Markdown URL: https://v8std.ru/diagnostics/acc/537.md Source path: diagnostics/acc/537.md Aliases: acc:537, #acc:537, acc 537, acc537, апк 537, АПК:537 Related: standard:std775 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/419 ID: acc:537 # Отсутствует отключение макросов при работе с документом Microsoft Excel. (ACC 537) - Код АПК: `537` #### Стандарт - [#std775: Безопасность программного обеспечения, вызываемого через открытые интерфейсы](https://v8std.ru/std/775/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/419) ### acc:538 - Объект, не имеющий визуального представления, входит в состав подсистемы, включенной в командный интерфейс. АПК:538 URL: https://v8std.ru/diagnostics/acc/538/ Markdown URL: https://v8std.ru/diagnostics/acc/538.md Source path: diagnostics/acc/538.md Aliases: acc:538, #acc:538, acc 538, acc538, апк 538, АПК:538 Related: standard:std543 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/317 ID: acc:538 # Объект, не имеющий визуального представления, входит в состав подсистемы, включенной в командный интерфейс. (ACC 538) - Код АПК: `538` #### Стандарт - [#std543: Использование подсистем](https://v8std.ru/std/543/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/317) ### acc:540 - В запросе отсутствует проверка на NULL для поля, которое может потенциально содержать NULL. АПК:540 URL: https://v8std.ru/diagnostics/acc/540/ Markdown URL: https://v8std.ru/diagnostics/acc/540.md Source path: diagnostics/acc/540.md Aliases: acc:540, #acc:540, acc 540, acc540, апк 540, АПК:540 Related: standard:std412 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/163 ID: acc:540 # В запросе отсутствует проверка на NULL для поля, которое может потенциально содержать NULL. (ACC 540) - Код АПК: `540` #### Стандарт - [#std412: Упорядочивание результатов запроса](https://v8std.ru/std/412/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/163) ### acc:541 - Неверно установлены права базовой роли на объект метаданных. АПК:541 URL: https://v8std.ru/diagnostics/acc/541/ Markdown URL: https://v8std.ru/diagnostics/acc/541.md Source path: diagnostics/acc/541.md Aliases: acc:541, #acc:541, acc 541, acc541, апк 541, АПК:541 Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/428 ID: acc:541 # Неверно установлены права базовой роли на объект метаданных. (ACC 541) - Код АПК: `541` #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/428) ### acc:543 - В отложенном обработчике обновления не указан идентификатор. АПК:543 URL: https://v8std.ru/diagnostics/acc/543/ Markdown URL: https://v8std.ru/diagnostics/acc/543.md Source path: diagnostics/acc/543.md Aliases: acc:543, #acc:543, acc 543, acc543, апк 543, АПК:543 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/666 ID: acc:543 # В отложенном обработчике обновления не указан идентификатор. (ACC 543) - Код АПК: `543` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/666) ### acc:544 - В отложенном обработчике обновления не указан комментарий. АПК:544 URL: https://v8std.ru/diagnostics/acc/544/ Markdown URL: https://v8std.ru/diagnostics/acc/544.md Source path: diagnostics/acc/544.md Aliases: acc:544, #acc:544, acc 544, acc544, апк 544, АПК:544 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/667 ID: acc:544 # В отложенном обработчике обновления не указан комментарий. (ACC 544) - Код АПК: `544` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/667) ### acc:545 - В отложенном обработчике обновления обнаружен неуникальный идентификатор. АПК:545 URL: https://v8std.ru/diagnostics/acc/545/ Markdown URL: https://v8std.ru/diagnostics/acc/545.md Source path: diagnostics/acc/545.md Aliases: acc:545, #acc:545, acc 545, acc545, апк 545, АПК:545 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/668 ID: acc:545 # В отложенном обработчике обновления обнаружен неуникальный идентификатор. (ACC 545) - Код АПК: `545` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/668) ### acc:546 - В отложенном обработчике обновления обнаружен неуникальный комментарий. АПК:546 URL: https://v8std.ru/diagnostics/acc/546/ Markdown URL: https://v8std.ru/diagnostics/acc/546.md Source path: diagnostics/acc/546.md Aliases: acc:546, #acc:546, acc 546, acc546, апк 546, АПК:546 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/236 ID: acc:546 # В отложенном обработчике обновления обнаружен неуникальный комментарий. (ACC 546) - Код АПК: `546` #### Стандарт - Нет прямой привязки к стандарту #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/236) ### acc:547 - Использована инструкция препроцессора в клиент-серверном общем модуле. АПК:547 URL: https://v8std.ru/diagnostics/acc/547/ Markdown URL: https://v8std.ru/diagnostics/acc/547.md Source path: diagnostics/acc/547.md Aliases: acc:547, #acc:547, acc 547, acc547, апк 547, АПК:547 Related: standard:std439, standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/391 ID: acc:547 # Использована инструкция препроцессора в клиент-серверном общем модуле. (ACC 547) - Код АПК: `547` #### Стандарт - [#std439: Использование директив компиляции и инструкций препроцессора](https://v8std.ru/std/439/) - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/391) ### acc:548 - Параметры вызова функции скопированы из определения вызываемой процедуры (функции). АПК:548 URL: https://v8std.ru/diagnostics/acc/548/ Markdown URL: https://v8std.ru/diagnostics/acc/548.md Source path: diagnostics/acc/548.md Aliases: acc:548, #acc:548, acc 548, acc548, апк 548, АПК:548 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/671 ID: acc:548 # Параметры вызова функции скопированы из определения вызываемой процедуры (функции). (ACC 548) - Код АПК: `548` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/671) ### acc:549 - Выполняется неявная передача обязательного параметра. АПК:549 URL: https://v8std.ru/diagnostics/acc/549/ Markdown URL: https://v8std.ru/diagnostics/acc/549.md Source path: diagnostics/acc/549.md Aliases: acc:549, #acc:549, acc 549, acc549, апк 549, АПК:549 Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/383 ID: acc:549 # Выполняется неявная передача обязательного параметра. (ACC 549) - Код АПК: `549` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/383) ### acc:552 - Небезопасное подключение внешней обработки. АПК:552 URL: https://v8std.ru/diagnostics/acc/552/ Markdown URL: https://v8std.ru/diagnostics/acc/552.md Source path: diagnostics/acc/552.md Aliases: acc:552, #acc:552, acc 552, acc552, апк 552, АПК:552 Related: standard:std669 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/673 ID: acc:552 # Небезопасное подключение внешней обработки. (ACC 552) - Код АПК: `552` #### Стандарт - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/673) ### acc:553 - Небезопасное подключение внешнего отчета. АПК:553 URL: https://v8std.ru/diagnostics/acc/553/ Markdown URL: https://v8std.ru/diagnostics/acc/553.md Source path: diagnostics/acc/553.md Aliases: acc:553, #acc:553, acc 553, acc553, апк 553, АПК:553 Related: standard:std669 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/674 ID: acc:553 # Небезопасное подключение внешнего отчета. (ACC 553) - Код АПК: `553` #### Стандарт - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/674) ### acc:554 - Небезопасное подключение расширения конфигурации. АПК:554 URL: https://v8std.ru/diagnostics/acc/554/ Markdown URL: https://v8std.ru/diagnostics/acc/554.md Source path: diagnostics/acc/554.md Aliases: acc:554, #acc:554, acc 554, acc554, апк 554, АПК:554 Related: standard:std669 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/675 ID: acc:554 # Небезопасное подключение расширения конфигурации. (ACC 554) - Код АПК: `554` #### Стандарт - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/675) ### acc:555 - Создание объекта типа "ОписаниеЗащитыОтОпасныхДействий". АПК:555 URL: https://v8std.ru/diagnostics/acc/555/ Markdown URL: https://v8std.ru/diagnostics/acc/555.md Source path: diagnostics/acc/555.md Aliases: acc:555, #acc:555, acc 555, acc555, апк 555, АПК:555 Related: standard:std669 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/414 ID: acc:555 # Создание объекта типа "ОписаниеЗащитыОтОпасныхДействий". (ACC 555) - Код АПК: `555` #### Стандарт - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/414) ### acc:556 - Вызов функции БСП "ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()". АПК:556 URL: https://v8std.ru/diagnostics/acc/556/ Markdown URL: https://v8std.ru/diagnostics/acc/556.md Source path: diagnostics/acc/556.md Aliases: acc:556, #acc:556, acc 556, acc556, апк 556, АПК:556 Related: standard:std669 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/415 ID: acc:556 # Вызов функции БСП "ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений()". (ACC 556) - Код АПК: `556` #### Стандарт - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/415) ### acc:557 - Экспортная процедура (функция) из модуля с признаком "ВызовСервера" не вызывается на клиенте. АПК:557 URL: https://v8std.ru/diagnostics/acc/557/ Markdown URL: https://v8std.ru/diagnostics/acc/557.md Source path: diagnostics/acc/557.md Aliases: acc:557, #acc:557, acc 557, acc557, апк 557, АПК:557 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/312 ID: acc:557 # Экспортная процедура (функция) из модуля с признаком "ВызовСервера" не вызывается на клиенте. (ACC 557) - Код АПК: `557` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/312) ### acc:558 - Экспортная процедура (функция) из модуля с признаком "КлиентСервер" не вызывается на клиенте. АПК:558 URL: https://v8std.ru/diagnostics/acc/558/ Markdown URL: https://v8std.ru/diagnostics/acc/558.md Source path: diagnostics/acc/558.md Aliases: acc:558, #acc:558, acc 558, acc558, апк 558, АПК:558 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/679 ID: acc:558 # Экспортная процедура (функция) из модуля с признаком "КлиентСервер" не вызывается на клиенте. (ACC 558) - Код АПК: `558` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/679) ### acc:559 - Экспортная процедура (функция) из модуля с признаком "КлиентСервер" не вызывается на сервере. АПК:559 URL: https://v8std.ru/diagnostics/acc/559/ Markdown URL: https://v8std.ru/diagnostics/acc/559.md Source path: diagnostics/acc/559.md Aliases: acc:559, #acc:559, acc 559, acc559, апк 559, АПК:559 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/680 ID: acc:559 # Экспортная процедура (функция) из модуля с признаком "КлиентСервер" не вызывается на сервере. (ACC 559) - Код АПК: `559` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/680) ### acc:561 - Ошибка платформенной проверки конфигурации. АПК:561 URL: https://v8std.ru/diagnostics/acc/561/ Markdown URL: https://v8std.ru/diagnostics/acc/561.md Source path: diagnostics/acc/561.md Aliases: acc:561, #acc:561, acc 561, acc561, апк 561, АПК:561 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/681 ID: acc:561 # Ошибка платформенной проверки конфигурации. (ACC 561) - Код АПК: `561` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/681) ### acc:562 - Ошибка платформенной проверки конфигурации: Возможно ошибочное свойство. АПК:562 URL: https://v8std.ru/diagnostics/acc/562/ Markdown URL: https://v8std.ru/diagnostics/acc/562.md Source path: diagnostics/acc/562.md Aliases: acc:562, #acc:562, acc 562, acc562, апк 562, АПК:562 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/556 ID: acc:562 # Ошибка платформенной проверки конфигурации: Возможно ошибочное свойство. (ACC 562) - Код АПК: `562` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/556) ### acc:563 - Ошибка платформенной проверки конфигурации: Возможно ошибочный метод. АПК:563 URL: https://v8std.ru/diagnostics/acc/563/ Markdown URL: https://v8std.ru/diagnostics/acc/563.md Source path: diagnostics/acc/563.md Aliases: acc:563, #acc:563, acc 563, acc563, апк 563, АПК:563 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/558 ID: acc:563 # Ошибка платформенной проверки конфигурации: Возможно ошибочный метод. (ACC 563) - Код АПК: `563` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/558) ### acc:564 - Ошибка платформенной проверки конфигурации: Возможно ошибочный параметр. АПК:564 URL: https://v8std.ru/diagnostics/acc/564/ Markdown URL: https://v8std.ru/diagnostics/acc/564.md Source path: diagnostics/acc/564.md Aliases: acc:564, #acc:564, acc 564, acc564, апк 564, АПК:564 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/559 ID: acc:564 # Ошибка платформенной проверки конфигурации: Возможно ошибочный параметр. (ACC 564) - Код АПК: `564` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/559) ### acc:565 - Ошибка платформенной проверки конфигурации: Использование модального вызова. АПК:565 URL: https://v8std.ru/diagnostics/acc/565/ Markdown URL: https://v8std.ru/diagnostics/acc/565.md Source path: diagnostics/acc/565.md Aliases: acc:565, #acc:565, acc 565, acc565, апк 565, АПК:565 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/571 ID: acc:565 # Ошибка платформенной проверки конфигурации: Использование модального вызова. (ACC 565) - Код АПК: `565` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/571) ### acc:566 - Ошибка платформенной проверки конфигурации: Использование синхронного вызова. АПК:566 URL: https://v8std.ru/diagnostics/acc/566/ Markdown URL: https://v8std.ru/diagnostics/acc/566.md Source path: diagnostics/acc/566.md Aliases: acc:566, #acc:566, acc 566, acc566, апк 566, АПК:566 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/572 ID: acc:566 # Ошибка платформенной проверки конфигурации: Использование синхронного вызова. (ACC 566) - Код АПК: `566` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/572) ### acc:567 - Ошибка платформенной проверки конфигурации: Не обнаружено ссылок на процедуру. АПК:567 URL: https://v8std.ru/diagnostics/acc/567/ Markdown URL: https://v8std.ru/diagnostics/acc/567.md Source path: diagnostics/acc/567.md Aliases: acc:567, #acc:567, acc 567, acc567, апк 567, АПК:567 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/573 ID: acc:567 # Ошибка платформенной проверки конфигурации: Не обнаружено ссылок на процедуру. (ACC 567) - Код АПК: `567` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/573) ### acc:568 - Ошибка платформенной проверки конфигурации: Не обнаружено ссылок на функцию. АПК:568 URL: https://v8std.ru/diagnostics/acc/568/ Markdown URL: https://v8std.ru/diagnostics/acc/568.md Source path: diagnostics/acc/568.md Aliases: acc:568, #acc:568, acc 568, acc568, апк 568, АПК:568 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/682 ID: acc:568 # Ошибка платформенной проверки конфигурации: Не обнаружено ссылок на функцию. (ACC 568) - Код АПК: `568` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/682) ### acc:569 - Ошибка платформенной проверки конфигурации: Неразрешимые ссылки на объекты метаданных. АПК:569 URL: https://v8std.ru/diagnostics/acc/569/ Markdown URL: https://v8std.ru/diagnostics/acc/569.md Source path: diagnostics/acc/569.md Aliases: acc:569, #acc:569, acc 569, acc569, апк 569, АПК:569 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/574 ID: acc:569 # Ошибка платформенной проверки конфигурации: Неразрешимые ссылки на объекты метаданных. (ACC 569) - Код АПК: `569` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/574) ### acc:570 - Ошибка платформенной проверки конфигурации: Отсутствует обработчик. АПК:570 URL: https://v8std.ru/diagnostics/acc/570/ Markdown URL: https://v8std.ru/diagnostics/acc/570.md Source path: diagnostics/acc/570.md Aliases: acc:570, #acc:570, acc 570, acc570, апк 570, АПК:570 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/683 ID: acc:570 # Ошибка платформенной проверки конфигурации: Отсутствует обработчик. (ACC 570) - Код АПК: `570` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/683) ### acc:571 - Ошибка платформенной проверки конфигурации: Переменная не определена. АПК:571 URL: https://v8std.ru/diagnostics/acc/571/ Markdown URL: https://v8std.ru/diagnostics/acc/571.md Source path: diagnostics/acc/571.md Aliases: acc:571, #acc:571, acc 571, acc571, апк 571, АПК:571 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/684 ID: acc:571 # Ошибка платформенной проверки конфигурации: Переменная не определена. (ACC 571) - Код АПК: `571` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/684) ### acc:572 - Ошибка платформенной проверки конфигурации: Процедура или функция с указанным именем не определена. АПК:572 URL: https://v8std.ru/diagnostics/acc/572/ Markdown URL: https://v8std.ru/diagnostics/acc/572.md Source path: diagnostics/acc/572.md Aliases: acc:572, #acc:572, acc 572, acc572, апк 572, АПК:572 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/685 ID: acc:572 # Ошибка платформенной проверки конфигурации: Процедура или функция с указанным именем не определена. (ACC 572) - Код АПК: `572` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/685) ### acc:573 - Ошибка платформенной проверки конфигурации: Пустой обработчик. АПК:573 URL: https://v8std.ru/diagnostics/acc/573/ Markdown URL: https://v8std.ru/diagnostics/acc/573.md Source path: diagnostics/acc/573.md Aliases: acc:573, #acc:573, acc 573, acc573, апк 573, АПК:573 Related: edt_check:v8cs:module-empty-method, standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/686 ID: acc:573 # Ошибка платформенной проверки конфигурации: Пустой обработчик. (ACC 573) - Код АПК: `573` - Код проверки EDT: [module-empty-method](https://v8std.ru/diagnostics/v8-code-style/module-empty-method/) #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/686) ### acc:574 - Ошибка платформенной проверки конфигурации: (Проверка: Мобильный клиент). АПК:574 URL: https://v8std.ru/diagnostics/acc/574/ Markdown URL: https://v8std.ru/diagnostics/acc/574.md Source path: diagnostics/acc/574.md Aliases: acc:574, #acc:574, acc 574, acc574, апк 574, АПК:574 Related: standard:std467, standard:std759 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/66 ID: acc:574 # Ошибка платформенной проверки конфигурации: (Проверка: Мобильный клиент). (ACC 574) - Код АПК: `574` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std759: Несущественные предупреждения проверки конфигурации](https://v8std.ru/std/759/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/66) ### acc:58 - Имя неверно образовано из синонима. АПК:58 URL: https://v8std.ru/diagnostics/acc/58/ Markdown URL: https://v8std.ru/diagnostics/acc/58.md Source path: diagnostics/acc/58.md Aliases: acc:58, #acc:58, acc 58, acc58, апк 58, АПК:58 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/332 ID: acc:58 # Имя неверно образовано из синонима. (ACC 58) - Код АПК: `58` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/332) ### acc:580 - Нет вызовов служебной экспортной процедуры (функции). АПК:580 URL: https://v8std.ru/diagnostics/acc/580/ Markdown URL: https://v8std.ru/diagnostics/acc/580.md Source path: diagnostics/acc/580.md Aliases: acc:580, #acc:580, acc 580, acc580, апк 580, АПК:580 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/314 ID: acc:580 # Нет вызовов служебной экспортной процедуры (функции). (ACC 580) - Код АПК: `580` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/314) ### acc:581 - Избыточное ключевое слово "Экспорт". АПК:581 URL: https://v8std.ru/diagnostics/acc/581/ Markdown URL: https://v8std.ru/diagnostics/acc/581.md Source path: diagnostics/acc/581.md Aliases: acc:581, #acc:581, acc 581, acc581, апк 581, АПК:581 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/311 ID: acc:581 # Избыточное ключевое слово "Экспорт". (ACC 581) - Код АПК: `581` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/311) ### acc:59 - Подсказка совпадает с синонимом. АПК:59 URL: https://v8std.ru/diagnostics/acc/59/ Markdown URL: https://v8std.ru/diagnostics/acc/59.md Source path: diagnostics/acc/59.md Aliases: acc:59, #acc:59, acc 59, acc59, апк 59, АПК:59 Related: standard:std478 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/338 ID: acc:59 # Подсказка совпадает с синонимом. (ACC 59) - Код АПК: `59` #### Стандарт - [#std478: Подсказка и проверка заполнения](https://v8std.ru/std/478/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/338) ### acc:6 - Комментарий содержит букву "ё". АПК:6 URL: https://v8std.ru/diagnostics/acc/6/ Markdown URL: https://v8std.ru/diagnostics/acc/6.md Source path: diagnostics/acc/6.md Aliases: acc:6, #acc:6, acc 6, acc6, апк 6, АПК:6 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/461 ID: acc:6 # Комментарий содержит букву "ё". (ACC 6) - Код АПК: `6` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/461) ### acc:60 - Не заполнен синоним конфигурации. АПК:60 URL: https://v8std.ru/diagnostics/acc/60/ Markdown URL: https://v8std.ru/diagnostics/acc/60.md Source path: diagnostics/acc/60.md Aliases: acc:60, #acc:60, acc 60, acc60, апк 60, АПК:60 Related: standard:std482 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/460 ID: acc:60 # Не заполнен синоним конфигурации. (ACC 60) - Код АПК: `60` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/460) ### acc:61 - В имени конфигурации запрещено использовать слова "редакция" или "подредакция". АПК:61 URL: https://v8std.ru/diagnostics/acc/61/ Markdown URL: https://v8std.ru/diagnostics/acc/61.md Source path: diagnostics/acc/61.md Aliases: acc:61, #acc:61, acc 61, acc61, апк 61, АПК:61 Related: standard:std482 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/463 ID: acc:61 # В имени конфигурации запрещено использовать слова "редакция" или "подредакция". (ACC 61) - Код АПК: `61` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/463) ### acc:62 - Неверно указан адрес информации о поставщике. Должен быть "http://www.1c.ru". АПК:62 URL: https://v8std.ru/diagnostics/acc/62/ Markdown URL: https://v8std.ru/diagnostics/acc/62.md Source path: diagnostics/acc/62.md Aliases: acc:62, #acc:62, acc 62, acc62, апк 62, АПК:62 Related: standard:std482 External sources: http://www.1c.ru, https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/464 ID: acc:62 # Неверно указан адрес информации о поставщике. Должен быть "http://www.1c.ru". (ACC 62) - Код АПК: `62` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/464) ### acc:63 - Неверно указан адрес информации о конфигурации. Должен начинаться с "http://v8.1c.ru/". АПК:63 URL: https://v8std.ru/diagnostics/acc/63/ Markdown URL: https://v8std.ru/diagnostics/acc/63.md Source path: diagnostics/acc/63.md Aliases: acc:63, #acc:63, acc 63, acc63, апк 63, АПК:63 Related: standard:std482 External sources: http://v8.1c.ru/, https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/465 ID: acc:63 # Неверно указан адрес информации о конфигурации. Должен начинаться с "http://v8.1c.ru/". (ACC 63) - Код АПК: `63` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/465) ### acc:64 - Неверно указан адрес каталога обновлений. Должен быть "http://downloads.v8.1c.ru/tmplts/". АПК:64 URL: https://v8std.ru/diagnostics/acc/64/ Markdown URL: https://v8std.ru/diagnostics/acc/64.md Source path: diagnostics/acc/64.md Aliases: acc:64, #acc:64, acc 64, acc64, апк 64, АПК:64 Related: standard:std482 External sources: http://downloads.v8.1c.ru/tmplts/, https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/466 ID: acc:64 # Неверно указан адрес каталога обновлений. Должен быть "http://downloads.v8.1c.ru/tmplts/". (ACC 64) - Код АПК: `64` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/466) ### acc:65 - Использован метод "ПолучитьФорму()". АПК:65 URL: https://v8std.ru/diagnostics/acc/65/ Markdown URL: https://v8std.ru/diagnostics/acc/65.md Source path: diagnostics/acc/65.md Aliases: acc:65, #acc:65, acc 65, acc65, апк 65, АПК:65 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/260 ID: acc:65 # Использован метод "ПолучитьФорму()". (ACC 65) - Код АПК: `65` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/260) ### acc:66 - Использована конструкция "ДЛЯ ИЗМЕНЕНИЯ". АПК:66 URL: https://v8std.ru/diagnostics/acc/66/ Markdown URL: https://v8std.ru/diagnostics/acc/66.md Source path: diagnostics/acc/66.md Aliases: acc:66, #acc:66, acc 66, acc66, апк 66, АПК:66 Related: standard:std460 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/178 ID: acc:66 # Использована конструкция "ДЛЯ ИЗМЕНЕНИЯ". (ACC 66) - Код АПК: `66` #### Стандарт - [#std460: Использование управляемого режима блокировки](https://v8std.ru/std/460/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/178) ### acc:67 - Для конфигурации не установлен управляемый режим блокировки данных. АПК:67 URL: https://v8std.ru/diagnostics/acc/67/ Markdown URL: https://v8std.ru/diagnostics/acc/67.md Source path: diagnostics/acc/67.md Aliases: acc:67, #acc:67, acc 67, acc67, апк 67, АПК:67 Related: edt_check:v8cs:configuration-data-lock-mode, standard:std460 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/177 ID: acc:67 # Для конфигурации не установлен управляемый режим блокировки данных. (ACC 67) - Код АПК: `67` - Код проверки EDT: [configuration-data-lock-mode](https://v8std.ru/diagnostics/v8-code-style/configuration-data-lock-mode/) #### Стандарт - [#std460: Использование управляемого режима блокировки](https://v8std.ru/std/460/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/177) ### acc:68 - Использована конструкция "ДанныеФормыВЗначение()". АПК:68 URL: https://v8std.ru/diagnostics/acc/68/ Markdown URL: https://v8std.ru/diagnostics/acc/68.md Source path: diagnostics/acc/68.md Aliases: acc:68, #acc:68, acc 68, acc68, апк 68, АПК:68 Related: standard:std409 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/403 ID: acc:68 # Использована конструкция "ДанныеФормыВЗначение()". (ACC 68) - Код АПК: `68` #### Стандарт - [#std409: Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение](https://v8std.ru/std/409/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/403) ### acc:69 - Использован метод "Сообщить()". АПК:69 URL: https://v8std.ru/diagnostics/acc/69/ Markdown URL: https://v8std.ru/diagnostics/acc/69.md Source path: diagnostics/acc/69.md Aliases: acc:69, #acc:69, acc 69, acc69, апк 69, АПК:69 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/268 ID: acc:69 # Использован метод "Сообщить()". (ACC 69) - Код АПК: `69` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/268) ### acc:7 - Синоним содержит букву "ё". АПК:7 URL: https://v8std.ru/diagnostics/acc/7/ Markdown URL: https://v8std.ru/diagnostics/acc/7.md Source path: diagnostics/acc/7.md Aliases: acc:7, #acc:7, acc 7, acc7, апк 7, АПК:7 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/462 ID: acc:7 # Синоним содержит букву "ё". (ACC 7) - Код АПК: `7` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/462) ### acc:70 - Использована конструкция "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ". АПК:70 URL: https://v8std.ru/diagnostics/acc/70/ Markdown URL: https://v8std.ru/diagnostics/acc/70.md Source path: diagnostics/acc/70.md Aliases: acc:70, #acc:70, acc 70, acc70, апк 70, АПК:70 Related: standard:std435 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/157 ID: acc:70 # Использована конструкция "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ". (ACC 70) - Код АПК: `70` #### Стандарт - [#std435: Ограничение на использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах](https://v8std.ru/std/435/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/157) ### acc:71 - Неверно установлен номер версии. Он не должен быть вида 0.0.0.0, N.0.0.0, N.0.N.0 или N.0.0.N. АПК:71 URL: https://v8std.ru/diagnostics/acc/71/ Markdown URL: https://v8std.ru/diagnostics/acc/71.md Source path: diagnostics/acc/71.md Aliases: acc:71, #acc:71, acc 71, acc71, апк 71, АПК:71 Related: standard:std483 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/109 ID: acc:71 # Неверно установлен номер версии. Он не должен быть вида 0.0.0.0, N.0.0.0, N.0.N.0 или N.0.0.N. (ACC 71) - Код АПК: `71` #### Стандарт - [#std483: Нумерация редакций и версий](https://v8std.ru/std/483/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/109) ### acc:72 - Синоним должен оканчиваться на номер редакции.подредакции. АПК:72 URL: https://v8std.ru/diagnostics/acc/72/ Markdown URL: https://v8std.ru/diagnostics/acc/72.md Source path: diagnostics/acc/72.md Aliases: acc:72, #acc:72, acc 72, acc72, апк 72, АПК:72 Related: standard:std482 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/287 ID: acc:72 # Синоним должен оканчиваться на номер редакции.подредакции. (ACC 72) - Код АПК: `72` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/287) ### acc:73 - Рекомендуется избегать в названии общего модуля таких общих слов как "Процедуры", "Функции", "Обработчики", "Модуль", "Функциональность" и т.п. АПК:73 URL: https://v8std.ru/diagnostics/acc/73/ Markdown URL: https://v8std.ru/diagnostics/acc/73.md Source path: diagnostics/acc/73.md Aliases: acc:73, #acc:73, acc 73, acc73, апк 73, АПК:73 Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/468 ID: acc:73 # Рекомендуется избегать в названии общего модуля таких общих слов как "Процедуры", "Функции", "Обработчики", "Модуль", "Функциональность" и т.п. (ACC 73) - Код АПК: `73` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/468) ### acc:75 - Отсутствует обязательная конструкция "Если ОбменДанными.Загрузка Тогда ...". АПК:75 URL: https://v8std.ru/diagnostics/acc/75/ Markdown URL: https://v8std.ru/diagnostics/acc/75.md Source path: diagnostics/acc/75.md Aliases: acc:75, #acc:75, acc 75, acc75, апк 75, АПК:75 Related: edt_check:v8cs:data-exchange-load, standard:std464, standard:std465, standard:std752, standard:std773 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/356 ID: acc:75 # Отсутствует обязательная конструкция "Если ОбменДанными.Загрузка Тогда ...". (ACC 75) - Код АПК: `75` - Код проверки EDT: [data-exchange-load](https://v8std.ru/diagnostics/v8-code-style/data-exchange-load/) #### Стандарт - [#std464: Обработчик события ПередЗаписью](https://v8std.ru/std/464/) - [#std465: Обработчик события ПриЗаписи](https://v8std.ru/std/465/) - [#std752: Обработчик события ПередУдалением](https://v8std.ru/std/752/) - [#std773: Использование признака ОбменДанными.Загрузка в обработчиках событий объекта](https://v8std.ru/std/773/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/356) ### acc:76 - Неверно указана информация об авторских правах. Должно начинаться с "Copyright © ООО "1С-Софт"". АПК:76 URL: https://v8std.ru/diagnostics/acc/76/ Markdown URL: https://v8std.ru/diagnostics/acc/76.md Source path: diagnostics/acc/76.md Aliases: acc:76, #acc:76, acc 76, acc76, апк 76, АПК:76 Related: standard:std482 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/111 ID: acc:76 # Неверно указана информация об авторских правах. Должно начинаться с "Copyright © ООО "1С-Софт"". (ACC 76) - Код АПК: `76` #### Стандарт - [#std482: Заполнение свойств конфигурации информацией о выпуске](https://v8std.ru/std/482/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/111) ### acc:78 - Найдена экспортная процедура или функция в модуле формы. АПК:78 URL: https://v8std.ru/diagnostics/acc/78/ Markdown URL: https://v8std.ru/diagnostics/acc/78.md Source path: diagnostics/acc/78.md Aliases: acc:78, #acc:78, acc 78, acc78, апк 78, АПК:78 Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/261 ID: acc:78 # Найдена экспортная процедура или функция в модуле формы. (ACC 78) - Код АПК: `78` #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/261) ### acc:8 - Имя содержит букву "ё". АПК:8 URL: https://v8std.ru/diagnostics/acc/8/ Markdown URL: https://v8std.ru/diagnostics/acc/8.md Source path: diagnostics/acc/8.md Aliases: acc:8, #acc:8, acc 8, acc8, апк 8, АПК:8 Related: standard:std467, standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/116 ID: acc:8 # Имя содержит букву "ё". (ACC 8) - Код АПК: `8` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/116) ### acc:80 - Общий модуль, доступный только на клиенте, должен именоваться с постфиксом "Клиент". АПК:80 URL: https://v8std.ru/diagnostics/acc/80/ Markdown URL: https://v8std.ru/diagnostics/acc/80.md Source path: diagnostics/acc/80.md Aliases: acc:80, #acc:80, acc 80, acc80, апк 80, АПК:80 Related: edt_check:v8cs:common-module-name-client, standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/471 ID: acc:80 # Общий модуль, доступный только на клиенте, должен именоваться с постфиксом "Клиент". (ACC 80) - Код АПК: `80` - Код проверки EDT: [common-module-name-client](https://v8std.ru/diagnostics/v8-code-style/common-module-name-client/) #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/471) ### acc:82 - Не установлено свойство "Использовать управляемые формы в обычном приложении" для конфигурации. АПК:82 URL: https://v8std.ru/diagnostics/acc/82/ Markdown URL: https://v8std.ru/diagnostics/acc/82.md Source path: diagnostics/acc/82.md Aliases: acc:82, #acc:82, acc 82, acc82, апк 82, АПК:82 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/67 ID: acc:82 # Не установлено свойство "Использовать управляемые формы в обычном приложении" для конфигурации. (ACC 82) - Код АПК: `82` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/67) ### acc:83 - Глобальный общий модуль должен именоваться с постфиксом "Глобальный". АПК:83 URL: https://v8std.ru/diagnostics/acc/83/ Markdown URL: https://v8std.ru/diagnostics/acc/83.md Source path: diagnostics/acc/83.md Aliases: acc:83, #acc:83, acc 83, acc83, апк 83, АПК:83 Related: edt_check:v8cs:common-module-name-global, standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/472 ID: acc:83 # Глобальный общий модуль должен именоваться с постфиксом "Глобальный". (ACC 83) - Код АПК: `83` - Код проверки EDT: [common-module-name-global](https://v8std.ru/diagnostics/v8-code-style/common-module-name-global/) #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/472) ### acc:84 - Привилегированный общий модуль должен именоваться с постфиксом "ПолныеПрава". АПК:84 URL: https://v8std.ru/diagnostics/acc/84/ Markdown URL: https://v8std.ru/diagnostics/acc/84.md Source path: diagnostics/acc/84.md Aliases: acc:84, #acc:84, acc 84, acc84, апк 84, АПК:84 Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/473 ID: acc:84 # Привилегированный общий модуль должен именоваться с постфиксом "ПолныеПрава". (ACC 84) - Код АПК: `84` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/473) ### acc:85 - Общий модуль с повторно используемыми значениями должен именоваться с постфиксом "ПовтИсп". АПК:85 URL: https://v8std.ru/diagnostics/acc/85/ Markdown URL: https://v8std.ru/diagnostics/acc/85.md Source path: diagnostics/acc/85.md Aliases: acc:85, #acc:85, acc 85, acc85, апк 85, АПК:85 Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/467 ID: acc:85 # Общий модуль с повторно используемыми значениями должен именоваться с постфиксом "ПовтИсп". (ACC 85) - Код АПК: `85` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/467) ### acc:86 - Не задан синоним стандартного реквизита "Владелец". АПК:86 URL: https://v8std.ru/diagnostics/acc/86/ Markdown URL: https://v8std.ru/diagnostics/acc/86.md Source path: diagnostics/acc/86.md Aliases: acc:86, #acc:86, acc 86, acc86, апк 86, АПК:86 Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/119 ID: acc:86 # Не задан синоним стандартного реквизита "Владелец". (ACC 86) - Код АПК: `86` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/119) ### acc:87 - Орфографическая ошибка в подсказке объекта метаданных. АПК:87 URL: https://v8std.ru/diagnostics/acc/87/ Markdown URL: https://v8std.ru/diagnostics/acc/87.md Source path: diagnostics/acc/87.md Aliases: acc:87, #acc:87, acc 87, acc87, апк 87, АПК:87 Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/69 ID: acc:87 # Орфографическая ошибка в подсказке объекта метаданных. (ACC 87) - Код АПК: `87` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/69) ### acc:89 - Использован оператор "Перейти". АПК:89 URL: https://v8std.ru/diagnostics/acc/89/ Markdown URL: https://v8std.ru/diagnostics/acc/89.md Source path: diagnostics/acc/89.md Aliases: acc:89, #acc:89, acc 89, acc89, апк 89, АПК:89 Related: standard:std547 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/398 ID: acc:89 # Использован оператор "Перейти". (ACC 89) - Код АПК: `89` #### Стандарт - [#std547: Ограничение на использование оператора Перейти](https://v8std.ru/std/547/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/398) ### acc:90 - Общий модуль, для которого предусмотрен вызов сервера, должен именоваться с постфиксом "ВызовСервера". АПК:90 URL: https://v8std.ru/diagnostics/acc/90/ Markdown URL: https://v8std.ru/diagnostics/acc/90.md Source path: diagnostics/acc/90.md Aliases: acc:90, #acc:90, acc 90, acc90, апк 90, АПК:90 Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/318 ID: acc:90 # Общий модуль, для которого предусмотрен вызов сервера, должен именоваться с постфиксом "ВызовСервера". (ACC 90) - Код АПК: `90` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/318) ### acc:93 - Не заполнено ни представление объекта, ни представление списка. АПК:93 URL: https://v8std.ru/diagnostics/acc/93/ Markdown URL: https://v8std.ru/diagnostics/acc/93.md Source path: diagnostics/acc/93.md Aliases: acc:93, #acc:93, acc 93, acc93, апк 93, АПК:93 Related: edt_check:v8cs:md-list-object-presentation External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/437 ID: acc:93 # Не заполнено ни представление объекта, ни представление списка. (ACC 93) - Код АПК: `93` - Код проверки EDT: [md-list-object-presentation](https://v8std.ru/diagnostics/v8-code-style/md-list-object-presentation/) #### Стандарт #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/437) ### acc:96 - Использована конструкция "ОБЪЕДИНИТЬ". АПК:96 URL: https://v8std.ru/diagnostics/acc/96/ Markdown URL: https://v8std.ru/diagnostics/acc/96.md Source path: diagnostics/acc/96.md Aliases: acc:96, #acc:96, acc 96, acc96, апк 96, АПК:96 Related: standard:std434 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/158 ID: acc:96 # Использована конструкция "ОБЪЕДИНИТЬ". (ACC 96) - Код АПК: `96` #### Стандарт - [#std434: Использование ключевых слов "ОБЪЕДИНИТЬ" и "ОБЪЕДИНИТЬ ВСЕ" в запросах](https://v8std.ru/std/434/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/158) ### acc:99 - Прикладной объект создан с помощью оператора Новый. АПК:99 URL: https://v8std.ru/diagnostics/acc/99/ Markdown URL: https://v8std.ru/diagnostics/acc/99.md Source path: diagnostics/acc/99.md Aliases: acc:99, #acc:99, acc 99, acc99, апк 99, АПК:99 Related: standard:std451 External sources: https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md, https://github.com/1C-Company/v8-code-style/issues/401 ID: acc:99 # Прикладной объект создан с помощью оператора Новый. (ACC 99) - Код АПК: `99` #### Стандарт - [#std451: Программное создание прикладных объектов](https://v8std.ru/std/451/) #### Источник - [acc_index.md](https://github.com/1C-Company/v8-code-style/blob/master/docs/checks/acc_index.md) - [Описание проверки (issue)](https://github.com/1C-Company/v8-code-style/issues/401) ### bslls:AllFunctionPathMustHaveReturn - Все возможные пути выполнения функции должны содержать оператор Возврат BSLLS:AllFunctionPathMustHaveReturn URL: https://v8std.ru/diagnostics/bslls/AllFunctionPathMustHaveReturn/ Markdown URL: https://v8std.ru/diagnostics/bslls/AllFunctionPathMustHaveReturn.md Source path: diagnostics/bslls/AllFunctionPathMustHaveReturn.md Aliases: bslls:AllFunctionPathMustHaveReturn, #bslls:AllFunctionPathMustHaveReturn, AllFunctionPathMustHaveReturn Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/AllFunctionPathMustHaveReturn/ ID: bslls:AllFunctionPathMustHaveReturn # Все возможные пути выполнения функции должны содержать оператор Возврат (AllFunctionPathMustHaveReturn) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `unpredictable`, `badpractice`, `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/AllFunctionPathMustHaveReturn/ ### bslls:AssignAliasFieldsInQuery - Назначение псевдонимов выбранным полям в запросе BSLLS:AssignAliasFieldsInQuery URL: https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery/ Markdown URL: https://v8std.ru/diagnostics/bslls/AssignAliasFieldsInQuery.md Source path: diagnostics/bslls/AssignAliasFieldsInQuery.md Aliases: bslls:AssignAliasFieldsInQuery, #bslls:AssignAliasFieldsInQuery, AssignAliasFieldsInQuery Related: standard:std437 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/AssignAliasFieldsInQuery/ ID: bslls:AssignAliasFieldsInQuery # Назначение псевдонимов выбранным полям в запросе (AssignAliasFieldsInQuery) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `sql`, `badpractice` #### Стандарт - [#std437: Оформление текстов запросов](https://v8std.ru/std/437/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/AssignAliasFieldsInQuery/ ### bslls:BadWords - Запрещенные слова BSLLS:BadWords URL: https://v8std.ru/diagnostics/bslls/BadWords/ Markdown URL: https://v8std.ru/diagnostics/bslls/BadWords.md Source path: diagnostics/bslls/BadWords.md Aliases: bslls:BadWords, #bslls:BadWords, BadWords Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/BadWords/ ID: bslls:BadWords # Запрещенные слова (BadWords) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Нет - Теги: `design` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/BadWords/ ### bslls:BeginTransactionBeforeTryCatch - Нарушение правил работы с транзакциями для метода 'НачатьТранзакцию' BSLLS:BeginTransactionBeforeTryCatch URL: https://v8std.ru/diagnostics/bslls/BeginTransactionBeforeTryCatch/ Markdown URL: https://v8std.ru/diagnostics/bslls/BeginTransactionBeforeTryCatch.md Source path: diagnostics/bslls/BeginTransactionBeforeTryCatch.md Aliases: bslls:BeginTransactionBeforeTryCatch, #bslls:BeginTransactionBeforeTryCatch, BeginTransactionBeforeTryCatch Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/BeginTransactionBeforeTryCatch/ ID: bslls:BeginTransactionBeforeTryCatch # Нарушение правил работы с транзакциями для метода 'НачатьТранзакцию' (BeginTransactionBeforeTryCatch) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/BeginTransactionBeforeTryCatch/ ### bslls:CachedPublic - Кеширование программного интерфейса BSLLS:CachedPublic URL: https://v8std.ru/diagnostics/bslls/CachedPublic/ Markdown URL: https://v8std.ru/diagnostics/bslls/CachedPublic.md Source path: diagnostics/bslls/CachedPublic.md Aliases: bslls:CachedPublic, #bslls:CachedPublic, CachedPublic Related: standard:std644 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CachedPublic/ ID: bslls:CachedPublic # Кеширование программного интерфейса (CachedPublic) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `design` #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CachedPublic/ ### bslls:CanonicalSpellingKeywords - Каноническое написание ключевых слов BSLLS:CanonicalSpellingKeywords URL: https://v8std.ru/diagnostics/bslls/CanonicalSpellingKeywords/ Markdown URL: https://v8std.ru/diagnostics/bslls/CanonicalSpellingKeywords.md Source path: diagnostics/bslls/CanonicalSpellingKeywords.md Aliases: bslls:CanonicalSpellingKeywords, #bslls:CanonicalSpellingKeywords, CanonicalSpellingKeywords Related: standard:std441 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CanonicalSpellingKeywords/ ID: bslls:CanonicalSpellingKeywords # Каноническое написание ключевых слов (CanonicalSpellingKeywords) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std441: Общие требования к построению конструкций встроенного языка](https://v8std.ru/std/441/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CanonicalSpellingKeywords/ ### bslls:CodeAfterAsyncCall - После вызова асинхронного метода есть строки кода BSLLS:CodeAfterAsyncCall URL: https://v8std.ru/diagnostics/bslls/CodeAfterAsyncCall/ Markdown URL: https://v8std.ru/diagnostics/bslls/CodeAfterAsyncCall.md Source path: diagnostics/bslls/CodeAfterAsyncCall.md Aliases: bslls:CodeAfterAsyncCall, #bslls:CodeAfterAsyncCall, CodeAfterAsyncCall Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CodeAfterAsyncCall/ ID: bslls:CodeAfterAsyncCall # После вызова асинхронного метода есть строки кода (CodeAfterAsyncCall) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Нет - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CodeAfterAsyncCall/ ### bslls:CodeBlockBeforeSub - Определения методов должны размещаться перед операторами тела модуля BSLLS:CodeBlockBeforeSub URL: https://v8std.ru/diagnostics/bslls/CodeBlockBeforeSub/ Markdown URL: https://v8std.ru/diagnostics/bslls/CodeBlockBeforeSub.md Source path: diagnostics/bslls/CodeBlockBeforeSub.md Aliases: bslls:CodeBlockBeforeSub, #bslls:CodeBlockBeforeSub, CodeBlockBeforeSub Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CodeBlockBeforeSub/ ID: bslls:CodeBlockBeforeSub # Определения методов должны размещаться перед операторами тела модуля (CodeBlockBeforeSub) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CodeBlockBeforeSub/ ### bslls:CodeOutOfRegion - Код расположен вне области BSLLS:CodeOutOfRegion URL: https://v8std.ru/diagnostics/bslls/CodeOutOfRegion/ Markdown URL: https://v8std.ru/diagnostics/bslls/CodeOutOfRegion.md Source path: diagnostics/bslls/CodeOutOfRegion.md Aliases: bslls:CodeOutOfRegion, #bslls:CodeOutOfRegion, CodeOutOfRegion Related: standard:std455 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CodeOutOfRegion/ ID: bslls:CodeOutOfRegion # Код расположен вне области (CodeOutOfRegion) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CodeOutOfRegion/ ### bslls:CognitiveComplexity - Когнитивная сложность BSLLS:CognitiveComplexity URL: https://v8std.ru/diagnostics/bslls/CognitiveComplexity/ Markdown URL: https://v8std.ru/diagnostics/bslls/CognitiveComplexity.md Source path: diagnostics/bslls/CognitiveComplexity.md Aliases: bslls:CognitiveComplexity, #bslls:CognitiveComplexity, CognitiveComplexity Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CognitiveComplexity/ ID: bslls:CognitiveComplexity # Когнитивная сложность (CognitiveComplexity) - Тип: Дефект кода - Важность: Критичный - Включена по умолчанию: Да - Теги: `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CognitiveComplexity/ ### bslls:CommandModuleExportMethods - Экспортные методы в модулях команд и общих команд BSLLS:CommandModuleExportMethods URL: https://v8std.ru/diagnostics/bslls/CommandModuleExportMethods/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommandModuleExportMethods.md Source path: diagnostics/bslls/CommandModuleExportMethods.md Aliases: bslls:CommandModuleExportMethods, #bslls:CommandModuleExportMethods, CommandModuleExportMethods Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommandModuleExportMethods/ ID: bslls:CommandModuleExportMethods # Экспортные методы в модулях команд и общих команд (CommandModuleExportMethods) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard`, `clumsy` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommandModuleExportMethods/ ### bslls:CommentedCode - Закомментированный фрагмент кода BSLLS:CommentedCode URL: https://v8std.ru/diagnostics/bslls/CommentedCode/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommentedCode.md Source path: diagnostics/bslls/CommentedCode.md Aliases: bslls:CommentedCode, #bslls:CommentedCode, CommentedCode Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommentedCode/ ID: bslls:CommentedCode # Закомментированный фрагмент кода (CommentedCode) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommentedCode/ ### bslls:CommitTransactionOutsideTryCatch - Нарушение правил работы с транзакциями для метода 'ЗафиксироватьТранзакцию' BSLLS:CommitTransactionOutsideTryCatch URL: https://v8std.ru/diagnostics/bslls/CommitTransactionOutsideTryCatch/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommitTransactionOutsideTryCatch.md Source path: diagnostics/bslls/CommitTransactionOutsideTryCatch.md Aliases: bslls:CommitTransactionOutsideTryCatch, #bslls:CommitTransactionOutsideTryCatch, CommitTransactionOutsideTryCatch Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommitTransactionOutsideTryCatch/ ID: bslls:CommitTransactionOutsideTryCatch # Нарушение правил работы с транзакциями для метода 'ЗафиксироватьТранзакцию' (CommitTransactionOutsideTryCatch) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommitTransactionOutsideTryCatch/ ### bslls:CommonModuleAssign - Присвоение общему модулю BSLLS:CommonModuleAssign URL: https://v8std.ru/diagnostics/bslls/CommonModuleAssign/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleAssign.md Source path: diagnostics/bslls/CommonModuleAssign.md Aliases: bslls:CommonModuleAssign, #bslls:CommonModuleAssign, CommonModuleAssign Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleAssign/ ID: bslls:CommonModuleAssign # Присвоение общему модулю (CommonModuleAssign) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleAssign/ ### bslls:CommonModuleInvalidType - Общий модуль недопустимого типа BSLLS:CommonModuleInvalidType URL: https://v8std.ru/diagnostics/bslls/CommonModuleInvalidType/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleInvalidType.md Source path: diagnostics/bslls/CommonModuleInvalidType.md Aliases: bslls:CommonModuleInvalidType, #bslls:CommonModuleInvalidType, CommonModuleInvalidType Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleInvalidType/ ID: bslls:CommonModuleInvalidType # Общий модуль недопустимого типа (CommonModuleInvalidType) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `unpredictable`, `design` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleInvalidType/ ### bslls:CommonModuleMissingAPI - Общий модуль должен иметь программный интерфейс BSLLS:CommonModuleMissingAPI URL: https://v8std.ru/diagnostics/bslls/CommonModuleMissingAPI/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleMissingAPI.md Source path: diagnostics/bslls/CommonModuleMissingAPI.md Aliases: bslls:CommonModuleMissingAPI, #bslls:CommonModuleMissingAPI, CommonModuleMissingAPI Related: standard:std455 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleMissingAPI/ ID: bslls:CommonModuleMissingAPI # Общий модуль должен иметь программный интерфейс (CommonModuleMissingAPI) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `brainoverload`, `suspicious` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleMissingAPI/ ### bslls:CommonModuleNameCached - Пропущен постфикс "ПовтИсп" BSLLS:CommonModuleNameCached URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameCached/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameCached.md Source path: diagnostics/bslls/CommonModuleNameCached.md Aliases: bslls:CommonModuleNameCached, #bslls:CommonModuleNameCached, CommonModuleNameCached Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameCached/ ID: bslls:CommonModuleNameCached # Пропущен постфикс "ПовтИсп" (CommonModuleNameCached) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `unpredictable` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameCached/ ### bslls:CommonModuleNameClient - Пропущен постфикс "Клиент" BSLLS:CommonModuleNameClient URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameClient/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameClient.md Source path: diagnostics/bslls/CommonModuleNameClient.md Aliases: bslls:CommonModuleNameClient, #bslls:CommonModuleNameClient, CommonModuleNameClient Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameClient/ ID: bslls:CommonModuleNameClient # Пропущен постфикс "Клиент" (CommonModuleNameClient) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `unpredictable` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameClient/ ### bslls:CommonModuleNameClientServer - Пропущен постфикс "КлиентСервер" BSLLS:CommonModuleNameClientServer URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameClientServer/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameClientServer.md Source path: diagnostics/bslls/CommonModuleNameClientServer.md Aliases: bslls:CommonModuleNameClientServer, #bslls:CommonModuleNameClientServer, CommonModuleNameClientServer Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameClientServer/ ID: bslls:CommonModuleNameClientServer # Пропущен постфикс "КлиентСервер" (CommonModuleNameClientServer) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `unpredictable` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameClientServer/ ### bslls:CommonModuleNameFullAccess - Пропущен постфикс "ПолныеПрава" BSLLS:CommonModuleNameFullAccess URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameFullAccess/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameFullAccess.md Source path: diagnostics/bslls/CommonModuleNameFullAccess.md Aliases: bslls:CommonModuleNameFullAccess, #bslls:CommonModuleNameFullAccess, CommonModuleNameFullAccess Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameFullAccess/ ID: bslls:CommonModuleNameFullAccess # Пропущен постфикс "ПолныеПрава" (CommonModuleNameFullAccess) - Тип: Потенциальная уязвимость - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `unpredictable` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameFullAccess/ ### bslls:CommonModuleNameGlobal - Пропущен постфикс "Глобальный" BSLLS:CommonModuleNameGlobal URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameGlobal/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameGlobal.md Source path: diagnostics/bslls/CommonModuleNameGlobal.md Aliases: bslls:CommonModuleNameGlobal, #bslls:CommonModuleNameGlobal, CommonModuleNameGlobal Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameGlobal/ ID: bslls:CommonModuleNameGlobal # Пропущен постфикс "Глобальный" (CommonModuleNameGlobal) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `brainoverload` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameGlobal/ ### bslls:CommonModuleNameGlobalClient - Глобальный модуль с постфиксом "Клиент" BSLLS:CommonModuleNameGlobalClient URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameGlobalClient/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameGlobalClient.md Source path: diagnostics/bslls/CommonModuleNameGlobalClient.md Aliases: bslls:CommonModuleNameGlobalClient, #bslls:CommonModuleNameGlobalClient, CommonModuleNameGlobalClient Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameGlobalClient/ ID: bslls:CommonModuleNameGlobalClient # Глобальный модуль с постфиксом "Клиент" (CommonModuleNameGlobalClient) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameGlobalClient/ ### bslls:CommonModuleNameServerCall - Пропущен постфикс "ВызовСервера" BSLLS:CommonModuleNameServerCall URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameServerCall/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameServerCall.md Source path: diagnostics/bslls/CommonModuleNameServerCall.md Aliases: bslls:CommonModuleNameServerCall, #bslls:CommonModuleNameServerCall, CommonModuleNameServerCall Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameServerCall/ ID: bslls:CommonModuleNameServerCall # Пропущен постфикс "ВызовСервера" (CommonModuleNameServerCall) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `unpredictable` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameServerCall/ ### bslls:CommonModuleNameWords - Нерекомендуемое имя общего модуля BSLLS:CommonModuleNameWords URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameWords/ Markdown URL: https://v8std.ru/diagnostics/bslls/CommonModuleNameWords.md Source path: diagnostics/bslls/CommonModuleNameWords.md Aliases: bslls:CommonModuleNameWords, #bslls:CommonModuleNameWords, CommonModuleNameWords Related: standard:std469 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameWords/ ID: bslls:CommonModuleNameWords # Нерекомендуемое имя общего модуля (CommonModuleNameWords) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CommonModuleNameWords/ ### bslls:CompilationDirectiveLost - Директивы компиляции методов BSLLS:CompilationDirectiveLost URL: https://v8std.ru/diagnostics/bslls/CompilationDirectiveLost/ Markdown URL: https://v8std.ru/diagnostics/bslls/CompilationDirectiveLost.md Source path: diagnostics/bslls/CompilationDirectiveLost.md Aliases: bslls:CompilationDirectiveLost, #bslls:CompilationDirectiveLost, CompilationDirectiveLost Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CompilationDirectiveLost/ ID: bslls:CompilationDirectiveLost # Директивы компиляции методов (CompilationDirectiveLost) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CompilationDirectiveLost/ ### bslls:CompilationDirectiveNeedLess - Лишняя директива компиляции BSLLS:CompilationDirectiveNeedLess URL: https://v8std.ru/diagnostics/bslls/CompilationDirectiveNeedLess/ Markdown URL: https://v8std.ru/diagnostics/bslls/CompilationDirectiveNeedLess.md Source path: diagnostics/bslls/CompilationDirectiveNeedLess.md Aliases: bslls:CompilationDirectiveNeedLess, #bslls:CompilationDirectiveNeedLess, CompilationDirectiveNeedLess Related: standard:std439 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CompilationDirectiveNeedLess/ ID: bslls:CompilationDirectiveNeedLess # Лишняя директива компиляции (CompilationDirectiveNeedLess) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `clumsy`, `standard`, `unpredictable` #### Стандарт - [#std439: Использование директив компиляции и инструкций препроцессора](https://v8std.ru/std/439/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CompilationDirectiveNeedLess/ ### bslls:ConsecutiveEmptyLines - Подряд идущие пустые строки BSLLS:ConsecutiveEmptyLines URL: https://v8std.ru/diagnostics/bslls/ConsecutiveEmptyLines/ Markdown URL: https://v8std.ru/diagnostics/bslls/ConsecutiveEmptyLines.md Source path: diagnostics/bslls/ConsecutiveEmptyLines.md Aliases: bslls:ConsecutiveEmptyLines, #bslls:ConsecutiveEmptyLines, ConsecutiveEmptyLines Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ConsecutiveEmptyLines/ ID: bslls:ConsecutiveEmptyLines # Подряд идущие пустые строки (ConsecutiveEmptyLines) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ConsecutiveEmptyLines/ ### bslls:CrazyMultilineString - Безумные многострочные литералы BSLLS:CrazyMultilineString URL: https://v8std.ru/diagnostics/bslls/CrazyMultilineString/ Markdown URL: https://v8std.ru/diagnostics/bslls/CrazyMultilineString.md Source path: diagnostics/bslls/CrazyMultilineString.md Aliases: bslls:CrazyMultilineString, #bslls:CrazyMultilineString, CrazyMultilineString Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CrazyMultilineString/ ID: bslls:CrazyMultilineString # Безумные многострочные литералы (CrazyMultilineString) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `badpractice`, `suspicious`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CrazyMultilineString/ ### bslls:CreateQueryInCycle - Выполнение запроса в цикле BSLLS:CreateQueryInCycle URL: https://v8std.ru/diagnostics/bslls/CreateQueryInCycle/ Markdown URL: https://v8std.ru/diagnostics/bslls/CreateQueryInCycle.md Source path: diagnostics/bslls/CreateQueryInCycle.md Aliases: bslls:CreateQueryInCycle, #bslls:CreateQueryInCycle, CreateQueryInCycle Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CreateQueryInCycle/ ID: bslls:CreateQueryInCycle # Выполнение запроса в цикле (CreateQueryInCycle) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `performance` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CreateQueryInCycle/ ### bslls:CyclomaticComplexity - Цикломатическая сложность BSLLS:CyclomaticComplexity URL: https://v8std.ru/diagnostics/bslls/CyclomaticComplexity/ Markdown URL: https://v8std.ru/diagnostics/bslls/CyclomaticComplexity.md Source path: diagnostics/bslls/CyclomaticComplexity.md Aliases: bslls:CyclomaticComplexity, #bslls:CyclomaticComplexity, CyclomaticComplexity Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/CyclomaticComplexity/ ID: bslls:CyclomaticComplexity # Цикломатическая сложность (CyclomaticComplexity) - Тип: Дефект кода - Важность: Критичный - Включена по умолчанию: Да - Теги: `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/CyclomaticComplexity/ ### bslls:DataExchangeLoading - Отсутствует проверка признака ОбменДанными.Загрузка в обработчике событий объекта BSLLS:DataExchangeLoading URL: https://v8std.ru/diagnostics/bslls/DataExchangeLoading/ Markdown URL: https://v8std.ru/diagnostics/bslls/DataExchangeLoading.md Source path: diagnostics/bslls/DataExchangeLoading.md Aliases: bslls:DataExchangeLoading, #bslls:DataExchangeLoading, DataExchangeLoading Related: standard:std464, standard:std465, standard:std752, standard:std773 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DataExchangeLoading/ ID: bslls:DataExchangeLoading # Отсутствует проверка признака ОбменДанными.Загрузка в обработчике событий объекта (DataExchangeLoading) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `unpredictable` #### Стандарт - [#std464: Обработчик события ПередЗаписью](https://v8std.ru/std/464/) - [#std465: Обработчик события ПриЗаписи](https://v8std.ru/std/465/) - [#std752: Обработчик события ПередУдалением](https://v8std.ru/std/752/) - [#std773: Использование признака ОбменДанными.Загрузка в обработчиках событий объекта](https://v8std.ru/std/773/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DataExchangeLoading/ ### bslls:DeletingCollectionItem - Удаление элемента при обходе коллекции посредством оператора "Для каждого ... Из ... Цикл" BSLLS:DeletingCollectionItem URL: https://v8std.ru/diagnostics/bslls/DeletingCollectionItem/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeletingCollectionItem.md Source path: diagnostics/bslls/DeletingCollectionItem.md Aliases: bslls:DeletingCollectionItem, #bslls:DeletingCollectionItem, DeletingCollectionItem Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeletingCollectionItem/ ID: bslls:DeletingCollectionItem # Удаление элемента при обходе коллекции посредством оператора "Для каждого ... Из ... Цикл" (DeletingCollectionItem) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeletingCollectionItem/ ### bslls:DenyIncompleteValues - Запрет незаполненных значений у измерений регистров BSLLS:DenyIncompleteValues URL: https://v8std.ru/diagnostics/bslls/DenyIncompleteValues/ Markdown URL: https://v8std.ru/diagnostics/bslls/DenyIncompleteValues.md Source path: diagnostics/bslls/DenyIncompleteValues.md Aliases: bslls:DenyIncompleteValues, #bslls:DenyIncompleteValues, DenyIncompleteValues Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DenyIncompleteValues/ ID: bslls:DenyIncompleteValues # Запрет незаполненных значений у измерений регистров (DenyIncompleteValues) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Нет - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DenyIncompleteValues/ ### bslls:DeprecatedAttributes8312 - Устаревшие объекты платформы 8.3.12 BSLLS:DeprecatedAttributes8312 URL: https://v8std.ru/diagnostics/bslls/DeprecatedAttributes8312/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeprecatedAttributes8312.md Source path: diagnostics/bslls/DeprecatedAttributes8312.md Aliases: bslls:DeprecatedAttributes8312, #bslls:DeprecatedAttributes8312, DeprecatedAttributes8312 Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedAttributes8312/ ID: bslls:DeprecatedAttributes8312 # Устаревшие объекты платформы 8.3.12 (DeprecatedAttributes8312) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `deprecated` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedAttributes8312/ ### bslls:DeprecatedCurrentDate - Использование устаревшего метода "ТекущаяДата" BSLLS:DeprecatedCurrentDate URL: https://v8std.ru/diagnostics/bslls/DeprecatedCurrentDate/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeprecatedCurrentDate.md Source path: diagnostics/bslls/DeprecatedCurrentDate.md Aliases: bslls:DeprecatedCurrentDate, #bslls:DeprecatedCurrentDate, DeprecatedCurrentDate Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedCurrentDate/ ID: bslls:DeprecatedCurrentDate # Использование устаревшего метода "ТекущаяДата" (DeprecatedCurrentDate) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `deprecated`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedCurrentDate/ ### bslls:DeprecatedFind - Использование устаревшего метода "Найти" BSLLS:DeprecatedFind URL: https://v8std.ru/diagnostics/bslls/DeprecatedFind/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeprecatedFind.md Source path: diagnostics/bslls/DeprecatedFind.md Aliases: bslls:DeprecatedFind, #bslls:DeprecatedFind, DeprecatedFind Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedFind/ ID: bslls:DeprecatedFind # Использование устаревшего метода "Найти" (DeprecatedFind) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `deprecated` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedFind/ ### bslls:DeprecatedMessage - Ограничение на использование устаревшего метода "Сообщить" BSLLS:DeprecatedMessage URL: https://v8std.ru/diagnostics/bslls/DeprecatedMessage/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeprecatedMessage.md Source path: diagnostics/bslls/DeprecatedMessage.md Aliases: bslls:DeprecatedMessage, #bslls:DeprecatedMessage, DeprecatedMessage Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedMessage/ ID: bslls:DeprecatedMessage # Ограничение на использование устаревшего метода "Сообщить" (DeprecatedMessage) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `deprecated` #### Стандарт #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedMessage/ ### bslls:DeprecatedMethodCall - Устаревшие методы не должны использоваться BSLLS:DeprecatedMethodCall URL: https://v8std.ru/diagnostics/bslls/DeprecatedMethodCall/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeprecatedMethodCall.md Source path: diagnostics/bslls/DeprecatedMethodCall.md Aliases: bslls:DeprecatedMethodCall, #bslls:DeprecatedMethodCall, DeprecatedMethodCall Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedMethodCall/ ID: bslls:DeprecatedMethodCall # Устаревшие методы не должны использоваться (DeprecatedMethodCall) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `deprecated`, `design` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedMethodCall/ ### bslls:DeprecatedMethods8310 - Использование устаревшего метода клиентского приложения BSLLS:DeprecatedMethods8310 URL: https://v8std.ru/diagnostics/bslls/DeprecatedMethods8310/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeprecatedMethods8310.md Source path: diagnostics/bslls/DeprecatedMethods8310.md Aliases: bslls:DeprecatedMethods8310, #bslls:DeprecatedMethods8310, DeprecatedMethods8310 Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedMethods8310/ ID: bslls:DeprecatedMethods8310 # Использование устаревшего метода клиентского приложения (DeprecatedMethods8310) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `deprecated` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedMethods8310/ ### bslls:DeprecatedMethods8317 - Использование устаревших глобальных методов платформы 8.3.17 BSLLS:DeprecatedMethods8317 URL: https://v8std.ru/diagnostics/bslls/DeprecatedMethods8317/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeprecatedMethods8317.md Source path: diagnostics/bslls/DeprecatedMethods8317.md Aliases: bslls:DeprecatedMethods8317, #bslls:DeprecatedMethods8317, DeprecatedMethods8317 Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedMethods8317/ ID: bslls:DeprecatedMethods8317 # Использование устаревших глобальных методов платформы 8.3.17 (DeprecatedMethods8317) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `deprecated` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedMethods8317/ ### bslls:DeprecatedTypeManagedForm - Устаревшее использование типа "УправляемаяФорма" BSLLS:DeprecatedTypeManagedForm URL: https://v8std.ru/diagnostics/bslls/DeprecatedTypeManagedForm/ Markdown URL: https://v8std.ru/diagnostics/bslls/DeprecatedTypeManagedForm.md Source path: diagnostics/bslls/DeprecatedTypeManagedForm.md Aliases: bslls:DeprecatedTypeManagedForm, #bslls:DeprecatedTypeManagedForm, DeprecatedTypeManagedForm Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedTypeManagedForm/ ID: bslls:DeprecatedTypeManagedForm # Устаревшее использование типа "УправляемаяФорма" (DeprecatedTypeManagedForm) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard`, `deprecated` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DeprecatedTypeManagedForm/ ### bslls:DisableSafeMode - Отключение безопасного режима BSLLS:DisableSafeMode URL: https://v8std.ru/diagnostics/bslls/DisableSafeMode/ Markdown URL: https://v8std.ru/diagnostics/bslls/DisableSafeMode.md Source path: diagnostics/bslls/DisableSafeMode.md Aliases: bslls:DisableSafeMode, #bslls:DisableSafeMode, DisableSafeMode Related: standard:std770 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DisableSafeMode/ ID: bslls:DisableSafeMode # Отключение безопасного режима (DisableSafeMode) - Тип: Уязвимость - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DisableSafeMode/ ### bslls:DoubleNegatives - Двойные отрицания BSLLS:DoubleNegatives URL: https://v8std.ru/diagnostics/bslls/DoubleNegatives/ Markdown URL: https://v8std.ru/diagnostics/bslls/DoubleNegatives.md Source path: diagnostics/bslls/DoubleNegatives.md Aliases: bslls:DoubleNegatives, #bslls:DoubleNegatives, DoubleNegatives Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DoubleNegatives/ ID: bslls:DoubleNegatives # Двойные отрицания (DoubleNegatives) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `brainoverload`, `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DoubleNegatives/ ### bslls:DuplicateRegion - Повторяющиеся разделы модуля BSLLS:DuplicateRegion URL: https://v8std.ru/diagnostics/bslls/DuplicateRegion/ Markdown URL: https://v8std.ru/diagnostics/bslls/DuplicateRegion.md Source path: diagnostics/bslls/DuplicateRegion.md Aliases: bslls:DuplicateRegion, #bslls:DuplicateRegion, DuplicateRegion Related: standard:std455 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DuplicateRegion/ ID: bslls:DuplicateRegion # Повторяющиеся разделы модуля (DuplicateRegion) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DuplicateRegion/ ### bslls:DuplicateStringLiteral - Повторное использование строкового литерала BSLLS:DuplicateStringLiteral URL: https://v8std.ru/diagnostics/bslls/DuplicateStringLiteral/ Markdown URL: https://v8std.ru/diagnostics/bslls/DuplicateStringLiteral.md Source path: diagnostics/bslls/DuplicateStringLiteral.md Aliases: bslls:DuplicateStringLiteral, #bslls:DuplicateStringLiteral, DuplicateStringLiteral Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DuplicateStringLiteral/ ID: bslls:DuplicateStringLiteral # Повторное использование строкового литерала (DuplicateStringLiteral) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DuplicateStringLiteral/ ### bslls:DuplicatedInsertionIntoCollection - Повторное добавление/вставка значений в коллекцию BSLLS:DuplicatedInsertionIntoCollection URL: https://v8std.ru/diagnostics/bslls/DuplicatedInsertionIntoCollection/ Markdown URL: https://v8std.ru/diagnostics/bslls/DuplicatedInsertionIntoCollection.md Source path: diagnostics/bslls/DuplicatedInsertionIntoCollection.md Aliases: bslls:DuplicatedInsertionIntoCollection, #bslls:DuplicatedInsertionIntoCollection, DuplicatedInsertionIntoCollection Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/DuplicatedInsertionIntoCollection/ ID: bslls:DuplicatedInsertionIntoCollection # Повторное добавление/вставка значений в коллекцию (DuplicatedInsertionIntoCollection) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `brainoverload`, `suspicious`, `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/DuplicatedInsertionIntoCollection/ ### bslls:EmptyCodeBlock - Пустой блок кода BSLLS:EmptyCodeBlock URL: https://v8std.ru/diagnostics/bslls/EmptyCodeBlock/ Markdown URL: https://v8std.ru/diagnostics/bslls/EmptyCodeBlock.md Source path: diagnostics/bslls/EmptyCodeBlock.md Aliases: bslls:EmptyCodeBlock, #bslls:EmptyCodeBlock, EmptyCodeBlock Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/EmptyCodeBlock/ ID: bslls:EmptyCodeBlock # Пустой блок кода (EmptyCodeBlock) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `badpractice`, `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/EmptyCodeBlock/ ### bslls:EmptyRegion - Область не должна быть пустой BSLLS:EmptyRegion URL: https://v8std.ru/diagnostics/bslls/EmptyRegion/ Markdown URL: https://v8std.ru/diagnostics/bslls/EmptyRegion.md Source path: diagnostics/bslls/EmptyRegion.md Aliases: bslls:EmptyRegion, #bslls:EmptyRegion, EmptyRegion Related: standard:std455 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/EmptyRegion/ ID: bslls:EmptyRegion # Область не должна быть пустой (EmptyRegion) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/EmptyRegion/ ### bslls:EmptyStatement - Пустой оператор BSLLS:EmptyStatement URL: https://v8std.ru/diagnostics/bslls/EmptyStatement/ Markdown URL: https://v8std.ru/diagnostics/bslls/EmptyStatement.md Source path: diagnostics/bslls/EmptyStatement.md Aliases: bslls:EmptyStatement, #bslls:EmptyStatement, EmptyStatement Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/EmptyStatement/ ID: bslls:EmptyStatement # Пустой оператор (EmptyStatement) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/EmptyStatement/ ### bslls:ExcessiveAutoTestCheck - Избыточная проверка параметра АвтоТест BSLLS:ExcessiveAutoTestCheck URL: https://v8std.ru/diagnostics/bslls/ExcessiveAutoTestCheck/ Markdown URL: https://v8std.ru/diagnostics/bslls/ExcessiveAutoTestCheck.md Source path: diagnostics/bslls/ExcessiveAutoTestCheck.md Aliases: bslls:ExcessiveAutoTestCheck, #bslls:ExcessiveAutoTestCheck, ExcessiveAutoTestCheck Related: standard:std456 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ExcessiveAutoTestCheck/ ID: bslls:ExcessiveAutoTestCheck # Избыточная проверка параметра АвтоТест (ExcessiveAutoTestCheck) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `deprecated` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ExcessiveAutoTestCheck/ ### bslls:ExecuteExternalCode - Выполнение произвольного кода на сервере BSLLS:ExecuteExternalCode URL: https://v8std.ru/diagnostics/bslls/ExecuteExternalCode/ Markdown URL: https://v8std.ru/diagnostics/bslls/ExecuteExternalCode.md Source path: diagnostics/bslls/ExecuteExternalCode.md Aliases: bslls:ExecuteExternalCode, #bslls:ExecuteExternalCode, ExecuteExternalCode Related: standard:std770 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ExecuteExternalCode/ ID: bslls:ExecuteExternalCode # Выполнение произвольного кода на сервере (ExecuteExternalCode) - Тип: Уязвимость - Важность: Критичный - Включена по умолчанию: Да - Теги: `error`, `standard` #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ExecuteExternalCode/ ### bslls:ExecuteExternalCodeInCommonModule - Выполнение произвольного кода в общем модуле на сервере BSLLS:ExecuteExternalCodeInCommonModule URL: https://v8std.ru/diagnostics/bslls/ExecuteExternalCodeInCommonModule/ Markdown URL: https://v8std.ru/diagnostics/bslls/ExecuteExternalCodeInCommonModule.md Source path: diagnostics/bslls/ExecuteExternalCodeInCommonModule.md Aliases: bslls:ExecuteExternalCodeInCommonModule, #bslls:ExecuteExternalCodeInCommonModule, ExecuteExternalCodeInCommonModule Related: standard:std770 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ExecuteExternalCodeInCommonModule/ ID: bslls:ExecuteExternalCodeInCommonModule # Выполнение произвольного кода в общем модуле на сервере (ExecuteExternalCodeInCommonModule) - Тип: Потенциальная уязвимость - Важность: Критичный - Включена по умолчанию: Да - Теги: `badpractice`, `standard` #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ExecuteExternalCodeInCommonModule/ ### bslls:ExportVariables - Запрет экспортных глобальных переменных модуля BSLLS:ExportVariables URL: https://v8std.ru/diagnostics/bslls/ExportVariables/ Markdown URL: https://v8std.ru/diagnostics/bslls/ExportVariables.md Source path: diagnostics/bslls/ExportVariables.md Aliases: bslls:ExportVariables, #bslls:ExportVariables, ExportVariables Related: standard:std639 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ExportVariables/ ID: bslls:ExportVariables # Запрет экспортных глобальных переменных модуля (ExportVariables) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `design`, `unpredictable` #### Стандарт - [#std639: Использование переменных в программных модулях](https://v8std.ru/std/639/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ExportVariables/ ### bslls:ExternalAppStarting - Запуск внешних приложений BSLLS:ExternalAppStarting URL: https://v8std.ru/diagnostics/bslls/ExternalAppStarting/ Markdown URL: https://v8std.ru/diagnostics/bslls/ExternalAppStarting.md Source path: diagnostics/bslls/ExternalAppStarting.md Aliases: bslls:ExternalAppStarting, #bslls:ExternalAppStarting, ExternalAppStarting Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ExternalAppStarting/ ID: bslls:ExternalAppStarting # Запуск внешних приложений (ExternalAppStarting) - Тип: Потенциальная уязвимость - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ExternalAppStarting/ ### bslls:ExtraCommas - Запятые без указания параметра в конце вызова метода BSLLS:ExtraCommas URL: https://v8std.ru/diagnostics/bslls/ExtraCommas/ Markdown URL: https://v8std.ru/diagnostics/bslls/ExtraCommas.md Source path: diagnostics/bslls/ExtraCommas.md Aliases: bslls:ExtraCommas, #bslls:ExtraCommas, ExtraCommas Related: standard:std640 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ExtraCommas/ ID: bslls:ExtraCommas # Запятые без указания параметра в конце вызова метода (ExtraCommas) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ExtraCommas/ ### bslls:FieldsFromJoinsWithoutIsNull - Отсутствие проверки на NULL для полей из присоединяемых таблиц BSLLS:FieldsFromJoinsWithoutIsNull URL: https://v8std.ru/diagnostics/bslls/FieldsFromJoinsWithoutIsNull/ Markdown URL: https://v8std.ru/diagnostics/bslls/FieldsFromJoinsWithoutIsNull.md Source path: diagnostics/bslls/FieldsFromJoinsWithoutIsNull.md Aliases: bslls:FieldsFromJoinsWithoutIsNull, #bslls:FieldsFromJoinsWithoutIsNull, FieldsFromJoinsWithoutIsNull Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/FieldsFromJoinsWithoutIsNull/ ID: bslls:FieldsFromJoinsWithoutIsNull # Отсутствие проверки на NULL для полей из присоединяемых таблиц (FieldsFromJoinsWithoutIsNull) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Нет - Теги: `sql`, `suspicious`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/FieldsFromJoinsWithoutIsNull/ ### bslls:FileSystemAccess - Доступ к файловой системе BSLLS:FileSystemAccess URL: https://v8std.ru/diagnostics/bslls/FileSystemAccess/ Markdown URL: https://v8std.ru/diagnostics/bslls/FileSystemAccess.md Source path: diagnostics/bslls/FileSystemAccess.md Aliases: bslls:FileSystemAccess, #bslls:FileSystemAccess, FileSystemAccess Related: standard:std542, standard:std774 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/FileSystemAccess/ ID: bslls:FileSystemAccess # Доступ к файловой системе (FileSystemAccess) - Тип: Уязвимость - Важность: Важный - Включена по умолчанию: Нет - Теги: `suspicious` #### Стандарт - [#std542: Доступ к файловой системе из кода конфигурации](https://v8std.ru/std/542/) - [#std774: Безопасность запуска приложений](https://v8std.ru/std/774/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/FileSystemAccess/ ### bslls:ForbiddenMetadataName - Объекту метаданных присвоено запрещенное имя BSLLS:ForbiddenMetadataName URL: https://v8std.ru/diagnostics/bslls/ForbiddenMetadataName/ Markdown URL: https://v8std.ru/diagnostics/bslls/ForbiddenMetadataName.md Source path: diagnostics/bslls/ForbiddenMetadataName.md Aliases: bslls:ForbiddenMetadataName, #bslls:ForbiddenMetadataName, ForbiddenMetadataName Related: standard:std474 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ForbiddenMetadataName/ ID: bslls:ForbiddenMetadataName # Объекту метаданных присвоено запрещенное имя (ForbiddenMetadataName) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `standard`, `sql`, `design` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ForbiddenMetadataName/ ### bslls:FormDataToValue - Использование метода ДанныеФормыВЗначение BSLLS:FormDataToValue URL: https://v8std.ru/diagnostics/bslls/FormDataToValue/ Markdown URL: https://v8std.ru/diagnostics/bslls/FormDataToValue.md Source path: diagnostics/bslls/FormDataToValue.md Aliases: bslls:FormDataToValue, #bslls:FormDataToValue, FormDataToValue Related: standard:std409 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/FormDataToValue/ ID: bslls:FormDataToValue # Использование метода ДанныеФормыВЗначение (FormDataToValue) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - [#std409: Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение](https://v8std.ru/std/409/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/FormDataToValue/ ### bslls:FullOuterJoinQuery - Использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах BSLLS:FullOuterJoinQuery URL: https://v8std.ru/diagnostics/bslls/FullOuterJoinQuery/ Markdown URL: https://v8std.ru/diagnostics/bslls/FullOuterJoinQuery.md Source path: diagnostics/bslls/FullOuterJoinQuery.md Aliases: bslls:FullOuterJoinQuery, #bslls:FullOuterJoinQuery, FullOuterJoinQuery Related: standard:std435 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/FullOuterJoinQuery/ ID: bslls:FullOuterJoinQuery # Использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах (FullOuterJoinQuery) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `sql`, `standard`, `performance` #### Стандарт - [#std435: Ограничение на использование конструкции "ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ" в запросах](https://v8std.ru/std/435/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/FullOuterJoinQuery/ ### bslls:FunctionNameStartsWithGet - Имя функции не должно начинаться с "Получить" BSLLS:FunctionNameStartsWithGet URL: https://v8std.ru/diagnostics/bslls/FunctionNameStartsWithGet/ Markdown URL: https://v8std.ru/diagnostics/bslls/FunctionNameStartsWithGet.md Source path: diagnostics/bslls/FunctionNameStartsWithGet.md Aliases: bslls:FunctionNameStartsWithGet, #bslls:FunctionNameStartsWithGet, FunctionNameStartsWithGet Related: standard:std647 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/FunctionNameStartsWithGet/ ID: bslls:FunctionNameStartsWithGet # Имя функции не должно начинаться с "Получить" (FunctionNameStartsWithGet) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Нет - Теги: `standard` #### Стандарт - [#std647: Имена процедур и функций](https://v8std.ru/std/647/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/FunctionNameStartsWithGet/ ### bslls:FunctionOutParameter - Исходящий параметр функции BSLLS:FunctionOutParameter URL: https://v8std.ru/diagnostics/bslls/FunctionOutParameter/ Markdown URL: https://v8std.ru/diagnostics/bslls/FunctionOutParameter.md Source path: diagnostics/bslls/FunctionOutParameter.md Aliases: bslls:FunctionOutParameter, #bslls:FunctionOutParameter, FunctionOutParameter Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/FunctionOutParameter/ ID: bslls:FunctionOutParameter # Исходящий параметр функции (FunctionOutParameter) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Нет - Теги: `design` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/FunctionOutParameter/ ### bslls:FunctionReturnsSamePrimitive - Функция всегда возвращает одно и то же примитивное значение BSLLS:FunctionReturnsSamePrimitive URL: https://v8std.ru/diagnostics/bslls/FunctionReturnsSamePrimitive/ Markdown URL: https://v8std.ru/diagnostics/bslls/FunctionReturnsSamePrimitive.md Source path: diagnostics/bslls/FunctionReturnsSamePrimitive.md Aliases: bslls:FunctionReturnsSamePrimitive, #bslls:FunctionReturnsSamePrimitive, FunctionReturnsSamePrimitive Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/FunctionReturnsSamePrimitive/ ID: bslls:FunctionReturnsSamePrimitive # Функция всегда возвращает одно и то же примитивное значение (FunctionReturnsSamePrimitive) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `design`, `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/FunctionReturnsSamePrimitive/ ### bslls:FunctionShouldHaveReturn - Функция должна содержать возврат BSLLS:FunctionShouldHaveReturn URL: https://v8std.ru/diagnostics/bslls/FunctionShouldHaveReturn/ Markdown URL: https://v8std.ru/diagnostics/bslls/FunctionShouldHaveReturn.md Source path: diagnostics/bslls/FunctionShouldHaveReturn.md Aliases: bslls:FunctionShouldHaveReturn, #bslls:FunctionShouldHaveReturn, FunctionShouldHaveReturn Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/FunctionShouldHaveReturn/ ID: bslls:FunctionShouldHaveReturn # Функция должна содержать возврат (FunctionShouldHaveReturn) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/FunctionShouldHaveReturn/ ### bslls:GetFormMethod - Использование метода ПолучитьФорму BSLLS:GetFormMethod URL: https://v8std.ru/diagnostics/bslls/GetFormMethod/ Markdown URL: https://v8std.ru/diagnostics/bslls/GetFormMethod.md Source path: diagnostics/bslls/GetFormMethod.md Aliases: bslls:GetFormMethod, #bslls:GetFormMethod, GetFormMethod Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/GetFormMethod/ ID: bslls:GetFormMethod # Использование метода ПолучитьФорму (GetFormMethod) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/GetFormMethod/ ### bslls:GlobalContextMethodCollision8312 - Конфликт имен методов с методами глобального контекста BSLLS:GlobalContextMethodCollision8312 URL: https://v8std.ru/diagnostics/bslls/GlobalContextMethodCollision8312/ Markdown URL: https://v8std.ru/diagnostics/bslls/GlobalContextMethodCollision8312.md Source path: diagnostics/bslls/GlobalContextMethodCollision8312.md Aliases: bslls:GlobalContextMethodCollision8312, #bslls:GlobalContextMethodCollision8312, GlobalContextMethodCollision8312 Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/GlobalContextMethodCollision8312/ ID: bslls:GlobalContextMethodCollision8312 # Конфликт имен методов с методами глобального контекста (GlobalContextMethodCollision8312) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/GlobalContextMethodCollision8312/ ### bslls:IdenticalExpressions - Одинаковые выражения слева и справа от "foo" оператора BSLLS:IdenticalExpressions URL: https://v8std.ru/diagnostics/bslls/IdenticalExpressions/ Markdown URL: https://v8std.ru/diagnostics/bslls/IdenticalExpressions.md Source path: diagnostics/bslls/IdenticalExpressions.md Aliases: bslls:IdenticalExpressions, #bslls:IdenticalExpressions, IdenticalExpressions Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IdenticalExpressions/ ID: bslls:IdenticalExpressions # Одинаковые выражения слева и справа от "foo" оператора (IdenticalExpressions) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IdenticalExpressions/ ### bslls:IfConditionComplexity - Использование сложных выражений в условии оператора "Если" BSLLS:IfConditionComplexity URL: https://v8std.ru/diagnostics/bslls/IfConditionComplexity/ Markdown URL: https://v8std.ru/diagnostics/bslls/IfConditionComplexity.md Source path: diagnostics/bslls/IfConditionComplexity.md Aliases: bslls:IfConditionComplexity, #bslls:IfConditionComplexity, IfConditionComplexity Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IfConditionComplexity/ ID: bslls:IfConditionComplexity # Использование сложных выражений в условии оператора "Если" (IfConditionComplexity) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IfConditionComplexity/ ### bslls:IfElseDuplicatedCodeBlock - Повторяющиеся блоки кода в синтаксической конструкции Если...Тогда...ИначеЕсли... BSLLS:IfElseDuplicatedCodeBlock URL: https://v8std.ru/diagnostics/bslls/IfElseDuplicatedCodeBlock/ Markdown URL: https://v8std.ru/diagnostics/bslls/IfElseDuplicatedCodeBlock.md Source path: diagnostics/bslls/IfElseDuplicatedCodeBlock.md Aliases: bslls:IfElseDuplicatedCodeBlock, #bslls:IfElseDuplicatedCodeBlock, IfElseDuplicatedCodeBlock Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IfElseDuplicatedCodeBlock/ ID: bslls:IfElseDuplicatedCodeBlock # Повторяющиеся блоки кода в синтаксической конструкции Если...Тогда...ИначеЕсли... (IfElseDuplicatedCodeBlock) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IfElseDuplicatedCodeBlock/ ### bslls:IfElseDuplicatedCondition - Повторяющиеся условия в синтаксической конструкции Если...Тогда...ИначеЕсли... BSLLS:IfElseDuplicatedCondition URL: https://v8std.ru/diagnostics/bslls/IfElseDuplicatedCondition/ Markdown URL: https://v8std.ru/diagnostics/bslls/IfElseDuplicatedCondition.md Source path: diagnostics/bslls/IfElseDuplicatedCondition.md Aliases: bslls:IfElseDuplicatedCondition, #bslls:IfElseDuplicatedCondition, IfElseDuplicatedCondition Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IfElseDuplicatedCondition/ ID: bslls:IfElseDuplicatedCondition # Повторяющиеся условия в синтаксической конструкции Если...Тогда...ИначеЕсли... (IfElseDuplicatedCondition) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IfElseDuplicatedCondition/ ### bslls:IfElseIfEndsWithElse - Использование синтаксической конструкции Если...Тогда...ИначеЕсли... BSLLS:IfElseIfEndsWithElse URL: https://v8std.ru/diagnostics/bslls/IfElseIfEndsWithElse/ Markdown URL: https://v8std.ru/diagnostics/bslls/IfElseIfEndsWithElse.md Source path: diagnostics/bslls/IfElseIfEndsWithElse.md Aliases: bslls:IfElseIfEndsWithElse, #bslls:IfElseIfEndsWithElse, IfElseIfEndsWithElse Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IfElseIfEndsWithElse/ ID: bslls:IfElseIfEndsWithElse # Использование синтаксической конструкции Если...Тогда...ИначеЕсли... (IfElseIfEndsWithElse) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IfElseIfEndsWithElse/ ### bslls:IncorrectLineBreak - Неправильный перенос выражения BSLLS:IncorrectLineBreak URL: https://v8std.ru/diagnostics/bslls/IncorrectLineBreak/ Markdown URL: https://v8std.ru/diagnostics/bslls/IncorrectLineBreak.md Source path: diagnostics/bslls/IncorrectLineBreak.md Aliases: bslls:IncorrectLineBreak, #bslls:IncorrectLineBreak, IncorrectLineBreak Related: standard:std444 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IncorrectLineBreak/ ID: bslls:IncorrectLineBreak # Неправильный перенос выражения (IncorrectLineBreak) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std444: Перенос выражений](https://v8std.ru/std/444/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IncorrectLineBreak/ ### bslls:IncorrectUseLikeInQuery - Некорректное использование 'ПОДОБНО' BSLLS:IncorrectUseLikeInQuery URL: https://v8std.ru/diagnostics/bslls/IncorrectUseLikeInQuery/ Markdown URL: https://v8std.ru/diagnostics/bslls/IncorrectUseLikeInQuery.md Source path: diagnostics/bslls/IncorrectUseLikeInQuery.md Aliases: bslls:IncorrectUseLikeInQuery, #bslls:IncorrectUseLikeInQuery, IncorrectUseLikeInQuery Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IncorrectUseLikeInQuery/ ID: bslls:IncorrectUseLikeInQuery # Некорректное использование 'ПОДОБНО' (IncorrectUseLikeInQuery) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `sql`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IncorrectUseLikeInQuery/ ### bslls:IncorrectUseOfStrTemplate - Неверное использование "СтрШаблон" BSLLS:IncorrectUseOfStrTemplate URL: https://v8std.ru/diagnostics/bslls/IncorrectUseOfStrTemplate/ Markdown URL: https://v8std.ru/diagnostics/bslls/IncorrectUseOfStrTemplate.md Source path: diagnostics/bslls/IncorrectUseOfStrTemplate.md Aliases: bslls:IncorrectUseOfStrTemplate, #bslls:IncorrectUseOfStrTemplate, IncorrectUseOfStrTemplate Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IncorrectUseOfStrTemplate/ ID: bslls:IncorrectUseOfStrTemplate # Неверное использование "СтрШаблон" (IncorrectUseOfStrTemplate) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `brainoverload`, `suspicious`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IncorrectUseOfStrTemplate/ ### bslls:InternetAccess - Обращение к Интернет-ресурсам BSLLS:InternetAccess URL: https://v8std.ru/diagnostics/bslls/InternetAccess/ Markdown URL: https://v8std.ru/diagnostics/bslls/InternetAccess.md Source path: diagnostics/bslls/InternetAccess.md Aliases: bslls:InternetAccess, #bslls:InternetAccess, InternetAccess Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/InternetAccess/ ID: bslls:InternetAccess # Обращение к Интернет-ресурсам (InternetAccess) - Тип: Уязвимость - Важность: Важный - Включена по умолчанию: Нет - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/InternetAccess/ ### bslls:InvalidCharacterInFile - Недопустимый символ BSLLS:InvalidCharacterInFile URL: https://v8std.ru/diagnostics/bslls/InvalidCharacterInFile/ Markdown URL: https://v8std.ru/diagnostics/bslls/InvalidCharacterInFile.md Source path: diagnostics/bslls/InvalidCharacterInFile.md Aliases: bslls:InvalidCharacterInFile, #bslls:InvalidCharacterInFile, InvalidCharacterInFile Related: standard:std456 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/InvalidCharacterInFile/ ID: bslls:InvalidCharacterInFile # Недопустимый символ (InvalidCharacterInFile) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `error`, `standard`, `unpredictable` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/InvalidCharacterInFile/ ### bslls:IsInRoleMethod - Использование метода РольДоступна BSLLS:IsInRoleMethod URL: https://v8std.ru/diagnostics/bslls/IsInRoleMethod/ Markdown URL: https://v8std.ru/diagnostics/bslls/IsInRoleMethod.md Source path: diagnostics/bslls/IsInRoleMethod.md Aliases: bslls:IsInRoleMethod, #bslls:IsInRoleMethod, IsInRoleMethod Related: standard:std737 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/IsInRoleMethod/ ID: bslls:IsInRoleMethod # Использование метода РольДоступна (IsInRoleMethod) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `error` #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/IsInRoleMethod/ ### bslls:JoinWithSubQuery - Соединение с вложенными запросами BSLLS:JoinWithSubQuery URL: https://v8std.ru/diagnostics/bslls/JoinWithSubQuery/ Markdown URL: https://v8std.ru/diagnostics/bslls/JoinWithSubQuery.md Source path: diagnostics/bslls/JoinWithSubQuery.md Aliases: bslls:JoinWithSubQuery, #bslls:JoinWithSubQuery, JoinWithSubQuery Related: standard:std655 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/JoinWithSubQuery/ ID: bslls:JoinWithSubQuery # Соединение с вложенными запросами (JoinWithSubQuery) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `sql`, `standard`, `performance` #### Стандарт - [#std655: Ограничения на соединения с вложенными запросами и виртуальными таблицами](https://v8std.ru/std/655/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/JoinWithSubQuery/ ### bslls:JoinWithVirtualTable - Соединение с виртуальными таблицами BSLLS:JoinWithVirtualTable URL: https://v8std.ru/diagnostics/bslls/JoinWithVirtualTable/ Markdown URL: https://v8std.ru/diagnostics/bslls/JoinWithVirtualTable.md Source path: diagnostics/bslls/JoinWithVirtualTable.md Aliases: bslls:JoinWithVirtualTable, #bslls:JoinWithVirtualTable, JoinWithVirtualTable Related: standard:std655 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/JoinWithVirtualTable/ ID: bslls:JoinWithVirtualTable # Соединение с виртуальными таблицами (JoinWithVirtualTable) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `sql`, `standard`, `performance` #### Стандарт - [#std655: Ограничения на соединения с вложенными запросами и виртуальными таблицами](https://v8std.ru/std/655/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/JoinWithVirtualTable/ ### bslls:LatinAndCyrillicSymbolInWord - Смешивание латинских и кириллических символов в одном идентификаторе BSLLS:LatinAndCyrillicSymbolInWord URL: https://v8std.ru/diagnostics/bslls/LatinAndCyrillicSymbolInWord/ Markdown URL: https://v8std.ru/diagnostics/bslls/LatinAndCyrillicSymbolInWord.md Source path: diagnostics/bslls/LatinAndCyrillicSymbolInWord.md Aliases: bslls:LatinAndCyrillicSymbolInWord, #bslls:LatinAndCyrillicSymbolInWord, LatinAndCyrillicSymbolInWord Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/LatinAndCyrillicSymbolInWord/ ID: bslls:LatinAndCyrillicSymbolInWord # Смешивание латинских и кириллических символов в одном идентификаторе (LatinAndCyrillicSymbolInWord) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `brainoverload`, `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/LatinAndCyrillicSymbolInWord/ ### bslls:LineLength - Ограничение на длину строки BSLLS:LineLength URL: https://v8std.ru/diagnostics/bslls/LineLength/ Markdown URL: https://v8std.ru/diagnostics/bslls/LineLength.md Source path: diagnostics/bslls/LineLength.md Aliases: bslls:LineLength, #bslls:LineLength, LineLength Related: standard:std456 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/LineLength/ ID: bslls:LineLength # Ограничение на длину строки (LineLength) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/LineLength/ ### bslls:LogicalOrInJoinQuerySection - Логическое 'ИЛИ' в соединениях запроса BSLLS:LogicalOrInJoinQuerySection URL: https://v8std.ru/diagnostics/bslls/LogicalOrInJoinQuerySection/ Markdown URL: https://v8std.ru/diagnostics/bslls/LogicalOrInJoinQuerySection.md Source path: diagnostics/bslls/LogicalOrInJoinQuerySection.md Aliases: bslls:LogicalOrInJoinQuerySection, #bslls:LogicalOrInJoinQuerySection, LogicalOrInJoinQuerySection Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/LogicalOrInJoinQuerySection/ ID: bslls:LogicalOrInJoinQuerySection # Логическое 'ИЛИ' в соединениях запроса (LogicalOrInJoinQuerySection) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `sql`, `performance`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/LogicalOrInJoinQuerySection/ ### bslls:LogicalOrInTheWhereSectionOfQuery - Использование логического "ИЛИ" в секции "ГДЕ" запроса BSLLS:LogicalOrInTheWhereSectionOfQuery URL: https://v8std.ru/diagnostics/bslls/LogicalOrInTheWhereSectionOfQuery/ Markdown URL: https://v8std.ru/diagnostics/bslls/LogicalOrInTheWhereSectionOfQuery.md Source path: diagnostics/bslls/LogicalOrInTheWhereSectionOfQuery.md Aliases: bslls:LogicalOrInTheWhereSectionOfQuery, #bslls:LogicalOrInTheWhereSectionOfQuery, LogicalOrInTheWhereSectionOfQuery Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/LogicalOrInTheWhereSectionOfQuery/ ID: bslls:LogicalOrInTheWhereSectionOfQuery # Использование логического "ИЛИ" в секции "ГДЕ" запроса (LogicalOrInTheWhereSectionOfQuery) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `sql`, `performance`, `standard` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/LogicalOrInTheWhereSectionOfQuery/ ### bslls:MagicDate - Магические даты BSLLS:MagicDate URL: https://v8std.ru/diagnostics/bslls/MagicDate/ Markdown URL: https://v8std.ru/diagnostics/bslls/MagicDate.md Source path: diagnostics/bslls/MagicDate.md Aliases: bslls:MagicDate, #bslls:MagicDate, MagicDate Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MagicDate/ ID: bslls:MagicDate # Магические даты (MagicDate) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `badpractice`, `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MagicDate/ ### bslls:MagicNumber - Магические числа BSLLS:MagicNumber URL: https://v8std.ru/diagnostics/bslls/MagicNumber/ Markdown URL: https://v8std.ru/diagnostics/bslls/MagicNumber.md Source path: diagnostics/bslls/MagicNumber.md Aliases: bslls:MagicNumber, #bslls:MagicNumber, MagicNumber Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MagicNumber/ ID: bslls:MagicNumber # Магические числа (MagicNumber) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MagicNumber/ ### bslls:MetadataObjectNameLength - Имена объектов метаданных не должны превышать допустимой длины наименования BSLLS:MetadataObjectNameLength URL: https://v8std.ru/diagnostics/bslls/MetadataObjectNameLength/ Markdown URL: https://v8std.ru/diagnostics/bslls/MetadataObjectNameLength.md Source path: diagnostics/bslls/MetadataObjectNameLength.md Aliases: bslls:MetadataObjectNameLength, #bslls:MetadataObjectNameLength, MetadataObjectNameLength Related: standard:std474 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MetadataObjectNameLength/ ID: bslls:MetadataObjectNameLength # Имена объектов метаданных не должны превышать допустимой длины наименования (MetadataObjectNameLength) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MetadataObjectNameLength/ ### bslls:MethodSize - Ограничение на размер метода BSLLS:MethodSize URL: https://v8std.ru/diagnostics/bslls/MethodSize/ Markdown URL: https://v8std.ru/diagnostics/bslls/MethodSize.md Source path: diagnostics/bslls/MethodSize.md Aliases: bslls:MethodSize, #bslls:MethodSize, MethodSize Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MethodSize/ ID: bslls:MethodSize # Ограничение на размер метода (MethodSize) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MethodSize/ ### bslls:MissedRequiredParameter - Пропущен обязательный параметр метода BSLLS:MissedRequiredParameter URL: https://v8std.ru/diagnostics/bslls/MissedRequiredParameter/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissedRequiredParameter.md Source path: diagnostics/bslls/MissedRequiredParameter.md Aliases: bslls:MissedRequiredParameter, #bslls:MissedRequiredParameter, MissedRequiredParameter Related: standard:std640 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissedRequiredParameter/ ID: bslls:MissedRequiredParameter # Пропущен обязательный параметр метода (MissedRequiredParameter) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `error` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissedRequiredParameter/ ### bslls:MissingCodeTryCatchEx - Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении BSLLS:MissingCodeTryCatchEx URL: https://v8std.ru/diagnostics/bslls/MissingCodeTryCatchEx/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingCodeTryCatchEx.md Source path: diagnostics/bslls/MissingCodeTryCatchEx.md Aliases: bslls:MissingCodeTryCatchEx, #bslls:MissingCodeTryCatchEx, MissingCodeTryCatchEx Related: standard:std499 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingCodeTryCatchEx/ ID: bslls:MissingCodeTryCatchEx # Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении (MissingCodeTryCatchEx) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingCodeTryCatchEx/ ### bslls:MissingCommonModuleMethod - Обращение к отсутствующему методу общего модуля BSLLS:MissingCommonModuleMethod URL: https://v8std.ru/diagnostics/bslls/MissingCommonModuleMethod/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingCommonModuleMethod.md Source path: diagnostics/bslls/MissingCommonModuleMethod.md Aliases: bslls:MissingCommonModuleMethod, #bslls:MissingCommonModuleMethod, MissingCommonModuleMethod Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingCommonModuleMethod/ ID: bslls:MissingCommonModuleMethod # Обращение к отсутствующему методу общего модуля (MissingCommonModuleMethod) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingCommonModuleMethod/ ### bslls:MissingEventSubscriptionHandler - Отсутствует обработчик подписки на событие BSLLS:MissingEventSubscriptionHandler URL: https://v8std.ru/diagnostics/bslls/MissingEventSubscriptionHandler/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingEventSubscriptionHandler.md Source path: diagnostics/bslls/MissingEventSubscriptionHandler.md Aliases: bslls:MissingEventSubscriptionHandler, #bslls:MissingEventSubscriptionHandler, MissingEventSubscriptionHandler Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingEventSubscriptionHandler/ ID: bslls:MissingEventSubscriptionHandler # Отсутствует обработчик подписки на событие (MissingEventSubscriptionHandler) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingEventSubscriptionHandler/ ### bslls:MissingParameterDescription - Отсутствует описание параметров метода BSLLS:MissingParameterDescription URL: https://v8std.ru/diagnostics/bslls/MissingParameterDescription/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingParameterDescription.md Source path: diagnostics/bslls/MissingParameterDescription.md Aliases: bslls:MissingParameterDescription, #bslls:MissingParameterDescription, MissingParameterDescription Related: standard:std453 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingParameterDescription/ ID: bslls:MissingParameterDescription # Отсутствует описание параметров метода (MissingParameterDescription) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingParameterDescription/ ### bslls:MissingReturnedValueDescription - Отсутствует описание возвращаемого значения функции BSLLS:MissingReturnedValueDescription URL: https://v8std.ru/diagnostics/bslls/MissingReturnedValueDescription/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingReturnedValueDescription.md Source path: diagnostics/bslls/MissingReturnedValueDescription.md Aliases: bslls:MissingReturnedValueDescription, #bslls:MissingReturnedValueDescription, MissingReturnedValueDescription Related: standard:std453 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingReturnedValueDescription/ ID: bslls:MissingReturnedValueDescription # Отсутствует описание возвращаемого значения функции (MissingReturnedValueDescription) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingReturnedValueDescription/ ### bslls:MissingSpace - Пропущены пробелы слева или справа от операторов + - * / = % <> = , от ключевых слов, а так же справа от , и ; BSLLS:MissingSpace URL: https://v8std.ru/diagnostics/bslls/MissingSpace/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingSpace.md Source path: diagnostics/bslls/MissingSpace.md Aliases: bslls:MissingSpace, #bslls:MissingSpace, MissingSpace Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingSpace/ ID: bslls:MissingSpace # Пропущены пробелы слева или справа от операторов + - * / = % <> = , от ключевых слов, а так же справа от , и ; (MissingSpace) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingSpace/ ### bslls:MissingTempStorageDeletion - Отсутствует удаление данных из временного хранилища после использования BSLLS:MissingTempStorageDeletion URL: https://v8std.ru/diagnostics/bslls/MissingTempStorageDeletion/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingTempStorageDeletion.md Source path: diagnostics/bslls/MissingTempStorageDeletion.md Aliases: bslls:MissingTempStorageDeletion, #bslls:MissingTempStorageDeletion, MissingTempStorageDeletion Related: standard:std487 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingTempStorageDeletion/ ID: bslls:MissingTempStorageDeletion # Отсутствует удаление данных из временного хранилища после использования (MissingTempStorageDeletion) - Тип: Дефект кода - Важность: Критичный - Включена по умолчанию: Нет - Теги: `standard`, `performance`, `badpractice` #### Стандарт - [#std487: Минимизация количества серверных вызовов и трафика](https://v8std.ru/std/487/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingTempStorageDeletion/ ### bslls:MissingTemporaryFileDeletion - Отсутствует удаление временного файла после использования BSLLS:MissingTemporaryFileDeletion URL: https://v8std.ru/diagnostics/bslls/MissingTemporaryFileDeletion/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingTemporaryFileDeletion.md Source path: diagnostics/bslls/MissingTemporaryFileDeletion.md Aliases: bslls:MissingTemporaryFileDeletion, #bslls:MissingTemporaryFileDeletion, MissingTemporaryFileDeletion Related: standard:std542 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingTemporaryFileDeletion/ ID: bslls:MissingTemporaryFileDeletion # Отсутствует удаление временного файла после использования (MissingTemporaryFileDeletion) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `badpractice`, `standard` #### Стандарт - [#std542: Доступ к файловой системе из кода конфигурации](https://v8std.ru/std/542/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingTemporaryFileDeletion/ ### bslls:MissingVariablesDescription - Все объявления переменных должны иметь описание BSLLS:MissingVariablesDescription URL: https://v8std.ru/diagnostics/bslls/MissingVariablesDescription/ Markdown URL: https://v8std.ru/diagnostics/bslls/MissingVariablesDescription.md Source path: diagnostics/bslls/MissingVariablesDescription.md Aliases: bslls:MissingVariablesDescription, #bslls:MissingVariablesDescription, MissingVariablesDescription Related: standard:std455 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingVariablesDescription/ ID: bslls:MissingVariablesDescription # Все объявления переменных должны иметь описание (MissingVariablesDescription) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MissingVariablesDescription/ ### bslls:MultilineStringInQuery - Многострочный литерал в запросе BSLLS:MultilineStringInQuery URL: https://v8std.ru/diagnostics/bslls/MultilineStringInQuery/ Markdown URL: https://v8std.ru/diagnostics/bslls/MultilineStringInQuery.md Source path: diagnostics/bslls/MultilineStringInQuery.md Aliases: bslls:MultilineStringInQuery, #bslls:MultilineStringInQuery, MultilineStringInQuery Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MultilineStringInQuery/ ID: bslls:MultilineStringInQuery # Многострочный литерал в запросе (MultilineStringInQuery) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `badpractice`, `suspicious`, `unpredictable` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MultilineStringInQuery/ ### bslls:MultilingualStringHasAllDeclaredLanguages - Есть локализованный текст для всех заявленных в конфигурации языков BSLLS:MultilingualStringHasAllDeclaredLanguages URL: https://v8std.ru/diagnostics/bslls/MultilingualStringHasAllDeclaredLanguages/ Markdown URL: https://v8std.ru/diagnostics/bslls/MultilingualStringHasAllDeclaredLanguages.md Source path: diagnostics/bslls/MultilingualStringHasAllDeclaredLanguages.md Aliases: bslls:MultilingualStringHasAllDeclaredLanguages, #bslls:MultilingualStringHasAllDeclaredLanguages, MultilingualStringHasAllDeclaredLanguages Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MultilingualStringHasAllDeclaredLanguages/ ID: bslls:MultilingualStringHasAllDeclaredLanguages # Есть локализованный текст для всех заявленных в конфигурации языков (MultilingualStringHasAllDeclaredLanguages) - Тип: Ошибка - Важность: Незначительный - Включена по умолчанию: Да - Теги: `error`, `localize` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MultilingualStringHasAllDeclaredLanguages/ ### bslls:MultilingualStringUsingWithTemplate - Частично локализованный текст используется в функции СтрШаблон BSLLS:MultilingualStringUsingWithTemplate URL: https://v8std.ru/diagnostics/bslls/MultilingualStringUsingWithTemplate/ Markdown URL: https://v8std.ru/diagnostics/bslls/MultilingualStringUsingWithTemplate.md Source path: diagnostics/bslls/MultilingualStringUsingWithTemplate.md Aliases: bslls:MultilingualStringUsingWithTemplate, #bslls:MultilingualStringUsingWithTemplate, MultilingualStringUsingWithTemplate Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/MultilingualStringUsingWithTemplate/ ID: bslls:MultilingualStringUsingWithTemplate # Частично локализованный текст используется в функции СтрШаблон (MultilingualStringUsingWithTemplate) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `error`, `localize` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/MultilingualStringUsingWithTemplate/ ### bslls:NestedConstructorsInStructureDeclaration - Использование конструкторов с параметрами при объявлении структуры BSLLS:NestedConstructorsInStructureDeclaration URL: https://v8std.ru/diagnostics/bslls/NestedConstructorsInStructureDeclaration/ Markdown URL: https://v8std.ru/diagnostics/bslls/NestedConstructorsInStructureDeclaration.md Source path: diagnostics/bslls/NestedConstructorsInStructureDeclaration.md Aliases: bslls:NestedConstructorsInStructureDeclaration, #bslls:NestedConstructorsInStructureDeclaration, NestedConstructorsInStructureDeclaration Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedConstructorsInStructureDeclaration/ ID: bslls:NestedConstructorsInStructureDeclaration # Использование конструкторов с параметрами при объявлении структуры (NestedConstructorsInStructureDeclaration) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `badpractice`, `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedConstructorsInStructureDeclaration/ ### bslls:NestedFunctionInParameters - Инициализация параметров методов и конструкторов вызовом вложенных методов BSLLS:NestedFunctionInParameters URL: https://v8std.ru/diagnostics/bslls/NestedFunctionInParameters/ Markdown URL: https://v8std.ru/diagnostics/bslls/NestedFunctionInParameters.md Source path: diagnostics/bslls/NestedFunctionInParameters.md Aliases: bslls:NestedFunctionInParameters, #bslls:NestedFunctionInParameters, NestedFunctionInParameters Related: standard:std640 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedFunctionInParameters/ ID: bslls:NestedFunctionInParameters # Инициализация параметров методов и конструкторов вызовом вложенных методов (NestedFunctionInParameters) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `brainoverload`, `badpractice` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedFunctionInParameters/ ### bslls:NestedStatements - Управляющие конструкции не должны быть вложены слишком глубоко BSLLS:NestedStatements URL: https://v8std.ru/diagnostics/bslls/NestedStatements/ Markdown URL: https://v8std.ru/diagnostics/bslls/NestedStatements.md Source path: diagnostics/bslls/NestedStatements.md Aliases: bslls:NestedStatements, #bslls:NestedStatements, NestedStatements Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedStatements/ ID: bslls:NestedStatements # Управляющие конструкции не должны быть вложены слишком глубоко (NestedStatements) - Тип: Дефект кода - Важность: Критичный - Включена по умолчанию: Да - Теги: `badpractice`, `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedStatements/ ### bslls:NestedTernaryOperator - Вложенный тернарный оператор BSLLS:NestedTernaryOperator URL: https://v8std.ru/diagnostics/bslls/NestedTernaryOperator/ Markdown URL: https://v8std.ru/diagnostics/bslls/NestedTernaryOperator.md Source path: diagnostics/bslls/NestedTernaryOperator.md Aliases: bslls:NestedTernaryOperator, #bslls:NestedTernaryOperator, NestedTernaryOperator Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedTernaryOperator/ ID: bslls:NestedTernaryOperator # Вложенный тернарный оператор (NestedTernaryOperator) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NestedTernaryOperator/ ### bslls:NonExportMethodsInApiRegion - Неэкспортные методы в областях ПрограммныйИнтерфейс и СлужебныйПрограммныйИнтерфейс BSLLS:NonExportMethodsInApiRegion URL: https://v8std.ru/diagnostics/bslls/NonExportMethodsInApiRegion/ Markdown URL: https://v8std.ru/diagnostics/bslls/NonExportMethodsInApiRegion.md Source path: diagnostics/bslls/NonExportMethodsInApiRegion.md Aliases: bslls:NonExportMethodsInApiRegion, #bslls:NonExportMethodsInApiRegion, NonExportMethodsInApiRegion Related: standard:std455 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NonExportMethodsInApiRegion/ ID: bslls:NonExportMethodsInApiRegion # Неэкспортные методы в областях ПрограммныйИнтерфейс и СлужебныйПрограммныйИнтерфейс (NonExportMethodsInApiRegion) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NonExportMethodsInApiRegion/ ### bslls:NonStandardRegion - Нестандартные разделы модуля BSLLS:NonStandardRegion URL: https://v8std.ru/diagnostics/bslls/NonStandardRegion/ Markdown URL: https://v8std.ru/diagnostics/bslls/NonStandardRegion.md Source path: diagnostics/bslls/NonStandardRegion.md Aliases: bslls:NonStandardRegion, #bslls:NonStandardRegion, NonStandardRegion Related: standard:std455 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NonStandardRegion/ ID: bslls:NonStandardRegion # Нестандартные разделы модуля (NonStandardRegion) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NonStandardRegion/ ### bslls:NumberOfOptionalParams - Ограничение на количество не обязательных параметров метода BSLLS:NumberOfOptionalParams URL: https://v8std.ru/diagnostics/bslls/NumberOfOptionalParams/ Markdown URL: https://v8std.ru/diagnostics/bslls/NumberOfOptionalParams.md Source path: diagnostics/bslls/NumberOfOptionalParams.md Aliases: bslls:NumberOfOptionalParams, #bslls:NumberOfOptionalParams, NumberOfOptionalParams Related: standard:std640 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NumberOfOptionalParams/ ID: bslls:NumberOfOptionalParams # Ограничение на количество не обязательных параметров метода (NumberOfOptionalParams) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `brainoverload` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NumberOfOptionalParams/ ### bslls:NumberOfParams - Ограничение на количество параметров метода BSLLS:NumberOfParams URL: https://v8std.ru/diagnostics/bslls/NumberOfParams/ Markdown URL: https://v8std.ru/diagnostics/bslls/NumberOfParams.md Source path: diagnostics/bslls/NumberOfParams.md Aliases: bslls:NumberOfParams, #bslls:NumberOfParams, NumberOfParams Related: standard:std640 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NumberOfParams/ ID: bslls:NumberOfParams # Ограничение на количество параметров метода (NumberOfParams) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `brainoverload` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NumberOfParams/ ### bslls:NumberOfValuesInStructureConstructor - Ограничение на количество значений свойств, передаваемых в конструктор структуры BSLLS:NumberOfValuesInStructureConstructor URL: https://v8std.ru/diagnostics/bslls/NumberOfValuesInStructureConstructor/ Markdown URL: https://v8std.ru/diagnostics/bslls/NumberOfValuesInStructureConstructor.md Source path: diagnostics/bslls/NumberOfValuesInStructureConstructor.md Aliases: bslls:NumberOfValuesInStructureConstructor, #bslls:NumberOfValuesInStructureConstructor, NumberOfValuesInStructureConstructor Related: standard:std693 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/NumberOfValuesInStructureConstructor/ ID: bslls:NumberOfValuesInStructureConstructor # Ограничение на количество значений свойств, передаваемых в конструктор структуры (NumberOfValuesInStructureConstructor) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `brainoverload` #### Стандарт - [#std693: Использование объектов типа Структура](https://v8std.ru/std/693/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/NumberOfValuesInStructureConstructor/ ### bslls:OSUsersMethod - Использование метода ПользователиОС BSLLS:OSUsersMethod URL: https://v8std.ru/diagnostics/bslls/OSUsersMethod/ Markdown URL: https://v8std.ru/diagnostics/bslls/OSUsersMethod.md Source path: diagnostics/bslls/OSUsersMethod.md Aliases: bslls:OSUsersMethod, #bslls:OSUsersMethod, OSUsersMethod Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/OSUsersMethod/ ID: bslls:OSUsersMethod # Использование метода ПользователиОС (OSUsersMethod) - Тип: Потенциальная уязвимость - Важность: Критичный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/OSUsersMethod/ ### bslls:OneStatementPerLine - Одно выражение в одной строке BSLLS:OneStatementPerLine URL: https://v8std.ru/diagnostics/bslls/OneStatementPerLine/ Markdown URL: https://v8std.ru/diagnostics/bslls/OneStatementPerLine.md Source path: diagnostics/bslls/OneStatementPerLine.md Aliases: bslls:OneStatementPerLine, #bslls:OneStatementPerLine, OneStatementPerLine Related: standard:std456 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/OneStatementPerLine/ ID: bslls:OneStatementPerLine # Одно выражение в одной строке (OneStatementPerLine) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `design` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/OneStatementPerLine/ ### bslls:OrderOfParams - Порядок параметров метода BSLLS:OrderOfParams URL: https://v8std.ru/diagnostics/bslls/OrderOfParams/ Markdown URL: https://v8std.ru/diagnostics/bslls/OrderOfParams.md Source path: diagnostics/bslls/OrderOfParams.md Aliases: bslls:OrderOfParams, #bslls:OrderOfParams, OrderOfParams Related: standard:std640 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/OrderOfParams/ ID: bslls:OrderOfParams # Порядок параметров метода (OrderOfParams) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `design` #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/OrderOfParams/ ### bslls:OrdinaryAppSupport - Поддержка обычного приложения BSLLS:OrdinaryAppSupport URL: https://v8std.ru/diagnostics/bslls/OrdinaryAppSupport/ Markdown URL: https://v8std.ru/diagnostics/bslls/OrdinaryAppSupport.md Source path: diagnostics/bslls/OrdinaryAppSupport.md Aliases: bslls:OrdinaryAppSupport, #bslls:OrdinaryAppSupport, OrdinaryAppSupport Related: standard:std467 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/OrdinaryAppSupport/ ID: bslls:OrdinaryAppSupport # Поддержка обычного приложения (OrdinaryAppSupport) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `unpredictable` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/OrdinaryAppSupport/ ### bslls:PairingBrokenTransaction - Нарушение парности использования методов "НачатьТранзакцию()" и "ЗафиксироватьТранзакцию()" / "ОтменитьТранзакцию()" BSLLS:PairingBrokenTransaction URL: https://v8std.ru/diagnostics/bslls/PairingBrokenTransaction/ Markdown URL: https://v8std.ru/diagnostics/bslls/PairingBrokenTransaction.md Source path: diagnostics/bslls/PairingBrokenTransaction.md Aliases: bslls:PairingBrokenTransaction, #bslls:PairingBrokenTransaction, PairingBrokenTransaction Related: standard:std783 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/PairingBrokenTransaction/ ID: bslls:PairingBrokenTransaction # Нарушение парности использования методов "НачатьТранзакцию()" и "ЗафиксироватьТранзакцию()" / "ОтменитьТранзакцию()" (PairingBrokenTransaction) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/PairingBrokenTransaction/ ### bslls:ParseError - Ошибка разбора исходного кода BSLLS:ParseError URL: https://v8std.ru/diagnostics/bslls/ParseError/ Markdown URL: https://v8std.ru/diagnostics/bslls/ParseError.md Source path: diagnostics/bslls/ParseError.md Aliases: bslls:ParseError, #bslls:ParseError, ParseError Related: standard:std439 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ParseError/ ID: bslls:ParseError # Ошибка разбора исходного кода (ParseError) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `error` #### Стандарт - [#std439: Использование директив компиляции и инструкций препроцессора](https://v8std.ru/std/439/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ParseError/ ### bslls:PrivilegedModuleMethodCall - Обращение к методам привилегированных модулей BSLLS:PrivilegedModuleMethodCall URL: https://v8std.ru/diagnostics/bslls/PrivilegedModuleMethodCall/ Markdown URL: https://v8std.ru/diagnostics/bslls/PrivilegedModuleMethodCall.md Source path: diagnostics/bslls/PrivilegedModuleMethodCall.md Aliases: bslls:PrivilegedModuleMethodCall, #bslls:PrivilegedModuleMethodCall, PrivilegedModuleMethodCall Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/PrivilegedModuleMethodCall/ ID: bslls:PrivilegedModuleMethodCall # Обращение к методам привилегированных модулей (PrivilegedModuleMethodCall) - Тип: Потенциальная уязвимость - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/PrivilegedModuleMethodCall/ ### bslls:ProcedureReturnsValue - Процедура не должна возвращать значение BSLLS:ProcedureReturnsValue URL: https://v8std.ru/diagnostics/bslls/ProcedureReturnsValue/ Markdown URL: https://v8std.ru/diagnostics/bslls/ProcedureReturnsValue.md Source path: diagnostics/bslls/ProcedureReturnsValue.md Aliases: bslls:ProcedureReturnsValue, #bslls:ProcedureReturnsValue, ProcedureReturnsValue Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ProcedureReturnsValue/ ID: bslls:ProcedureReturnsValue # Процедура не должна возвращать значение (ProcedureReturnsValue) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ProcedureReturnsValue/ ### bslls:ProtectedModule - Защищенные модули BSLLS:ProtectedModule URL: https://v8std.ru/diagnostics/bslls/ProtectedModule/ Markdown URL: https://v8std.ru/diagnostics/bslls/ProtectedModule.md Source path: diagnostics/bslls/ProtectedModule.md Aliases: bslls:ProtectedModule, #bslls:ProtectedModule, ProtectedModule Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ProtectedModule/ ID: bslls:ProtectedModule # Защищенные модули (ProtectedModule) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `badpractice`, `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ProtectedModule/ ### bslls:PublicMethodsDescription - Все методы программного интерфейса должны иметь описание BSLLS:PublicMethodsDescription URL: https://v8std.ru/diagnostics/bslls/PublicMethodsDescription/ Markdown URL: https://v8std.ru/diagnostics/bslls/PublicMethodsDescription.md Source path: diagnostics/bslls/PublicMethodsDescription.md Aliases: bslls:PublicMethodsDescription, #bslls:PublicMethodsDescription, PublicMethodsDescription Related: standard:std453 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/PublicMethodsDescription/ ID: bslls:PublicMethodsDescription # Все методы программного интерфейса должны иметь описание (PublicMethodsDescription) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard`, `brainoverload`, `badpractice` #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/PublicMethodsDescription/ ### bslls:QueryNestedFieldsByDot - Разыменование ссылочных полей запроса через точку BSLLS:QueryNestedFieldsByDot URL: https://v8std.ru/diagnostics/bslls/QueryNestedFieldsByDot/ Markdown URL: https://v8std.ru/diagnostics/bslls/QueryNestedFieldsByDot.md Source path: diagnostics/bslls/QueryNestedFieldsByDot.md Aliases: bslls:QueryNestedFieldsByDot, #bslls:QueryNestedFieldsByDot, QueryNestedFieldsByDot Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/QueryNestedFieldsByDot/ ID: bslls:QueryNestedFieldsByDot # Разыменование ссылочных полей запроса через точку (QueryNestedFieldsByDot) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `sql`, `performance` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/QueryNestedFieldsByDot/ ### bslls:QueryParseError - Ошибка разбора текста запроса BSLLS:QueryParseError URL: https://v8std.ru/diagnostics/bslls/QueryParseError/ Markdown URL: https://v8std.ru/diagnostics/bslls/QueryParseError.md Source path: diagnostics/bslls/QueryParseError.md Aliases: bslls:QueryParseError, #bslls:QueryParseError, QueryParseError Related: standard:std437 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/QueryParseError/ ID: bslls:QueryParseError # Ошибка разбора текста запроса (QueryParseError) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `sql`, `badpractice` #### Стандарт - [#std437: Оформление текстов запросов](https://v8std.ru/std/437/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/QueryParseError/ ### bslls:QueryToMissingMetadata - Обращение к несуществующим метаданным в запросе BSLLS:QueryToMissingMetadata URL: https://v8std.ru/diagnostics/bslls/QueryToMissingMetadata/ Markdown URL: https://v8std.ru/diagnostics/bslls/QueryToMissingMetadata.md Source path: diagnostics/bslls/QueryToMissingMetadata.md Aliases: bslls:QueryToMissingMetadata, #bslls:QueryToMissingMetadata, QueryToMissingMetadata Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/QueryToMissingMetadata/ ID: bslls:QueryToMissingMetadata # Обращение к несуществующим метаданным в запросе (QueryToMissingMetadata) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `suspicious`, `sql` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/QueryToMissingMetadata/ ### bslls:RedundantAccessToObject - Избыточное обращение к объекту BSLLS:RedundantAccessToObject URL: https://v8std.ru/diagnostics/bslls/RedundantAccessToObject/ Markdown URL: https://v8std.ru/diagnostics/bslls/RedundantAccessToObject.md Source path: diagnostics/bslls/RedundantAccessToObject.md Aliases: bslls:RedundantAccessToObject, #bslls:RedundantAccessToObject, RedundantAccessToObject Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/RedundantAccessToObject/ ID: bslls:RedundantAccessToObject # Избыточное обращение к объекту (RedundantAccessToObject) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard`, `clumsy` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/RedundantAccessToObject/ ### bslls:RefOveruse - Избыточное использование "Ссылка" в запросе BSLLS:RefOveruse URL: https://v8std.ru/diagnostics/bslls/RefOveruse/ Markdown URL: https://v8std.ru/diagnostics/bslls/RefOveruse.md Source path: diagnostics/bslls/RefOveruse.md Aliases: bslls:RefOveruse, #bslls:RefOveruse, RefOveruse Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/RefOveruse/ ID: bslls:RefOveruse # Избыточное использование "Ссылка" в запросе (RefOveruse) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `sql`, `performance` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/RefOveruse/ ### bslls:ReservedParameterNames - Зарезервированные имена параметров BSLLS:ReservedParameterNames URL: https://v8std.ru/diagnostics/bslls/ReservedParameterNames/ Markdown URL: https://v8std.ru/diagnostics/bslls/ReservedParameterNames.md Source path: diagnostics/bslls/ReservedParameterNames.md Aliases: bslls:ReservedParameterNames, #bslls:ReservedParameterNames, ReservedParameterNames Related: standard:std454 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ReservedParameterNames/ ID: bslls:ReservedParameterNames # Зарезервированные имена параметров (ReservedParameterNames) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std454: Правила образования имен переменных](https://v8std.ru/std/454/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ReservedParameterNames/ ### bslls:RewriteMethodParameter - Перезапись параметров метода BSLLS:RewriteMethodParameter URL: https://v8std.ru/diagnostics/bslls/RewriteMethodParameter/ Markdown URL: https://v8std.ru/diagnostics/bslls/RewriteMethodParameter.md Source path: diagnostics/bslls/RewriteMethodParameter.md Aliases: bslls:RewriteMethodParameter, #bslls:RewriteMethodParameter, RewriteMethodParameter Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/RewriteMethodParameter/ ID: bslls:RewriteMethodParameter # Перезапись параметров метода (RewriteMethodParameter) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/RewriteMethodParameter/ ### bslls:SameMetadataObjectAndChildNames - Совпадает имя объекта метаданного и его дочернего BSLLS:SameMetadataObjectAndChildNames URL: https://v8std.ru/diagnostics/bslls/SameMetadataObjectAndChildNames/ Markdown URL: https://v8std.ru/diagnostics/bslls/SameMetadataObjectAndChildNames.md Source path: diagnostics/bslls/SameMetadataObjectAndChildNames.md Aliases: bslls:SameMetadataObjectAndChildNames, #bslls:SameMetadataObjectAndChildNames, SameMetadataObjectAndChildNames Related: standard:std474 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SameMetadataObjectAndChildNames/ ID: bslls:SameMetadataObjectAndChildNames # Совпадает имя объекта метаданного и его дочернего (SameMetadataObjectAndChildNames) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard`, `sql`, `design` #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SameMetadataObjectAndChildNames/ ### bslls:ScheduledJobHandler - Обработчик регламентного задания BSLLS:ScheduledJobHandler URL: https://v8std.ru/diagnostics/bslls/ScheduledJobHandler/ Markdown URL: https://v8std.ru/diagnostics/bslls/ScheduledJobHandler.md Source path: diagnostics/bslls/ScheduledJobHandler.md Aliases: bslls:ScheduledJobHandler, #bslls:ScheduledJobHandler, ScheduledJobHandler Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ScheduledJobHandler/ ID: bslls:ScheduledJobHandler # Обработчик регламентного задания (ScheduledJobHandler) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ScheduledJobHandler/ ### bslls:SelectTopWithoutOrderBy - Использование 'ВЫБРАТЬ ПЕРВЫЕ' без 'УПОРЯДОЧИТЬ ПО' BSLLS:SelectTopWithoutOrderBy URL: https://v8std.ru/diagnostics/bslls/SelectTopWithoutOrderBy/ Markdown URL: https://v8std.ru/diagnostics/bslls/SelectTopWithoutOrderBy.md Source path: diagnostics/bslls/SelectTopWithoutOrderBy.md Aliases: bslls:SelectTopWithoutOrderBy, #bslls:SelectTopWithoutOrderBy, SelectTopWithoutOrderBy Related: standard:std412 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SelectTopWithoutOrderBy/ ID: bslls:SelectTopWithoutOrderBy # Использование 'ВЫБРАТЬ ПЕРВЫЕ' без 'УПОРЯДОЧИТЬ ПО' (SelectTopWithoutOrderBy) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `sql`, `suspicious` #### Стандарт - [#std412: Упорядочивание результатов запроса](https://v8std.ru/std/412/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SelectTopWithoutOrderBy/ ### bslls:SelfAssign - Присвоение переменной самой себе BSLLS:SelfAssign URL: https://v8std.ru/diagnostics/bslls/SelfAssign/ Markdown URL: https://v8std.ru/diagnostics/bslls/SelfAssign.md Source path: diagnostics/bslls/SelfAssign.md Aliases: bslls:SelfAssign, #bslls:SelfAssign, SelfAssign Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SelfAssign/ ID: bslls:SelfAssign # Присвоение переменной самой себе (SelfAssign) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SelfAssign/ ### bslls:SelfInsertion - Вставка коллекции в саму себя BSLLS:SelfInsertion URL: https://v8std.ru/diagnostics/bslls/SelfInsertion/ Markdown URL: https://v8std.ru/diagnostics/bslls/SelfInsertion.md Source path: diagnostics/bslls/SelfInsertion.md Aliases: bslls:SelfInsertion, #bslls:SelfInsertion, SelfInsertion Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SelfInsertion/ ID: bslls:SelfInsertion # Вставка коллекции в саму себя (SelfInsertion) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `unpredictable`, `performance` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SelfInsertion/ ### bslls:SemicolonPresence - Выражение должно заканчиваться символом ";" BSLLS:SemicolonPresence URL: https://v8std.ru/diagnostics/bslls/SemicolonPresence/ Markdown URL: https://v8std.ru/diagnostics/bslls/SemicolonPresence.md Source path: diagnostics/bslls/SemicolonPresence.md Aliases: bslls:SemicolonPresence, #bslls:SemicolonPresence, SemicolonPresence Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SemicolonPresence/ ID: bslls:SemicolonPresence # Выражение должно заканчиваться символом ";" (SemicolonPresence) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SemicolonPresence/ ### bslls:ServerCallsInFormEvents - Серверные вызовы в событиях форм BSLLS:ServerCallsInFormEvents URL: https://v8std.ru/diagnostics/bslls/ServerCallsInFormEvents/ Markdown URL: https://v8std.ru/diagnostics/bslls/ServerCallsInFormEvents.md Source path: diagnostics/bslls/ServerCallsInFormEvents.md Aliases: bslls:ServerCallsInFormEvents, #bslls:ServerCallsInFormEvents, ServerCallsInFormEvents Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ServerCallsInFormEvents/ ID: bslls:ServerCallsInFormEvents # Серверные вызовы в событиях форм (ServerCallsInFormEvents) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `design` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ServerCallsInFormEvents/ ### bslls:ServerSideExportFormMethod - Серверный экспортный метод формы BSLLS:ServerSideExportFormMethod URL: https://v8std.ru/diagnostics/bslls/ServerSideExportFormMethod/ Markdown URL: https://v8std.ru/diagnostics/bslls/ServerSideExportFormMethod.md Source path: diagnostics/bslls/ServerSideExportFormMethod.md Aliases: bslls:ServerSideExportFormMethod, #bslls:ServerSideExportFormMethod, ServerSideExportFormMethod Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ServerSideExportFormMethod/ ID: bslls:ServerSideExportFormMethod # Серверный экспортный метод формы (ServerSideExportFormMethod) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error`, `unpredictable`, `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ServerSideExportFormMethod/ ### bslls:SetPermissionsForNewObjects - Флажок «Устанавливать права для новых объектов» должен быть установлен только у роли ПолныеПрава BSLLS:SetPermissionsForNewObjects URL: https://v8std.ru/diagnostics/bslls/SetPermissionsForNewObjects/ Markdown URL: https://v8std.ru/diagnostics/bslls/SetPermissionsForNewObjects.md Source path: diagnostics/bslls/SetPermissionsForNewObjects.md Aliases: bslls:SetPermissionsForNewObjects, #bslls:SetPermissionsForNewObjects, SetPermissionsForNewObjects Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SetPermissionsForNewObjects/ ID: bslls:SetPermissionsForNewObjects # Флажок «Устанавливать права для новых объектов» должен быть установлен только у роли ПолныеПрава (SetPermissionsForNewObjects) - Тип: Уязвимость - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `design` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SetPermissionsForNewObjects/ ### bslls:SetPrivilegedMode - Использование привилегированного режима BSLLS:SetPrivilegedMode URL: https://v8std.ru/diagnostics/bslls/SetPrivilegedMode/ Markdown URL: https://v8std.ru/diagnostics/bslls/SetPrivilegedMode.md Source path: diagnostics/bslls/SetPrivilegedMode.md Aliases: bslls:SetPrivilegedMode, #bslls:SetPrivilegedMode, SetPrivilegedMode Related: standard:std678 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SetPrivilegedMode/ ID: bslls:SetPrivilegedMode # Использование привилегированного режима (SetPrivilegedMode) - Тип: Потенциальная уязвимость - Важность: Важный - Включена по умолчанию: Да - Теги: `suspicious` #### Стандарт - [#std678: Безопасность прикладного программного интерфейса сервера](https://v8std.ru/std/678/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SetPrivilegedMode/ ### bslls:SeveralCompilerDirectives - Ошибочное указание нескольких директив компиляции BSLLS:SeveralCompilerDirectives URL: https://v8std.ru/diagnostics/bslls/SeveralCompilerDirectives/ Markdown URL: https://v8std.ru/diagnostics/bslls/SeveralCompilerDirectives.md Source path: diagnostics/bslls/SeveralCompilerDirectives.md Aliases: bslls:SeveralCompilerDirectives, #bslls:SeveralCompilerDirectives, SeveralCompilerDirectives Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SeveralCompilerDirectives/ ID: bslls:SeveralCompilerDirectives # Ошибочное указание нескольких директив компиляции (SeveralCompilerDirectives) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `unpredictable`, `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SeveralCompilerDirectives/ ### bslls:SpaceAtStartComment - Пробел в начале комментария BSLLS:SpaceAtStartComment URL: https://v8std.ru/diagnostics/bslls/SpaceAtStartComment/ Markdown URL: https://v8std.ru/diagnostics/bslls/SpaceAtStartComment.md Source path: diagnostics/bslls/SpaceAtStartComment.md Aliases: bslls:SpaceAtStartComment, #bslls:SpaceAtStartComment, SpaceAtStartComment Related: standard:std456 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/SpaceAtStartComment/ ID: bslls:SpaceAtStartComment # Пробел в начале комментария (SpaceAtStartComment) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/SpaceAtStartComment/ ### bslls:StyleElementConstructors - Конструктор элемента стиля BSLLS:StyleElementConstructors URL: https://v8std.ru/diagnostics/bslls/StyleElementConstructors/ Markdown URL: https://v8std.ru/diagnostics/bslls/StyleElementConstructors.md Source path: diagnostics/bslls/StyleElementConstructors.md Aliases: bslls:StyleElementConstructors, #bslls:StyleElementConstructors, StyleElementConstructors Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/StyleElementConstructors/ ID: bslls:StyleElementConstructors # Конструктор элемента стиля (StyleElementConstructors) - Тип: Ошибка - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/StyleElementConstructors/ ### bslls:TempFilesDir - Вызов функции КаталогВременныхФайлов() BSLLS:TempFilesDir URL: https://v8std.ru/diagnostics/bslls/TempFilesDir/ Markdown URL: https://v8std.ru/diagnostics/bslls/TempFilesDir.md Source path: diagnostics/bslls/TempFilesDir.md Aliases: bslls:TempFilesDir, #bslls:TempFilesDir, TempFilesDir Related: standard:std542 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/TempFilesDir/ ID: bslls:TempFilesDir # Вызов функции КаталогВременныхФайлов() (TempFilesDir) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std542: Доступ к файловой системе из кода конфигурации](https://v8std.ru/std/542/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/TempFilesDir/ ### bslls:TernaryOperatorUsage - Использование тернарного оператора BSLLS:TernaryOperatorUsage URL: https://v8std.ru/diagnostics/bslls/TernaryOperatorUsage/ Markdown URL: https://v8std.ru/diagnostics/bslls/TernaryOperatorUsage.md Source path: diagnostics/bslls/TernaryOperatorUsage.md Aliases: bslls:TernaryOperatorUsage, #bslls:TernaryOperatorUsage, TernaryOperatorUsage Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/TernaryOperatorUsage/ ID: bslls:TernaryOperatorUsage # Использование тернарного оператора (TernaryOperatorUsage) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Нет - Теги: `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/TernaryOperatorUsage/ ### bslls:ThisObjectAssign - Присвоение значения свойству ЭтотОбъект BSLLS:ThisObjectAssign URL: https://v8std.ru/diagnostics/bslls/ThisObjectAssign/ Markdown URL: https://v8std.ru/diagnostics/bslls/ThisObjectAssign.md Source path: diagnostics/bslls/ThisObjectAssign.md Aliases: bslls:ThisObjectAssign, #bslls:ThisObjectAssign, ThisObjectAssign Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/ThisObjectAssign/ ID: bslls:ThisObjectAssign # Присвоение значения свойству ЭтотОбъект (ThisObjectAssign) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/ThisObjectAssign/ ### bslls:TimeoutsInExternalResources - Таймауты при работе с внешними ресурсами BSLLS:TimeoutsInExternalResources URL: https://v8std.ru/diagnostics/bslls/TimeoutsInExternalResources/ Markdown URL: https://v8std.ru/diagnostics/bslls/TimeoutsInExternalResources.md Source path: diagnostics/bslls/TimeoutsInExternalResources.md Aliases: bslls:TimeoutsInExternalResources, #bslls:TimeoutsInExternalResources, TimeoutsInExternalResources Related: standard:std748 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/TimeoutsInExternalResources/ ID: bslls:TimeoutsInExternalResources # Таймауты при работе с внешними ресурсами (TimeoutsInExternalResources) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `unpredictable`, `standard` #### Стандарт - [#std748: Таймауты при работе с внешними ресурсами](https://v8std.ru/std/748/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/TimeoutsInExternalResources/ ### bslls:TooManyReturns - Метод не должен содержать много возвратов BSLLS:TooManyReturns URL: https://v8std.ru/diagnostics/bslls/TooManyReturns/ Markdown URL: https://v8std.ru/diagnostics/bslls/TooManyReturns.md Source path: diagnostics/bslls/TooManyReturns.md Aliases: bslls:TooManyReturns, #bslls:TooManyReturns, TooManyReturns Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/TooManyReturns/ ID: bslls:TooManyReturns # Метод не должен содержать много возвратов (TooManyReturns) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Нет - Теги: `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/TooManyReturns/ ### bslls:TransferringParametersBetweenClientAndServer - Передача параметров между клиентом и сервером BSLLS:TransferringParametersBetweenClientAndServer URL: https://v8std.ru/diagnostics/bslls/TransferringParametersBetweenClientAndServer/ Markdown URL: https://v8std.ru/diagnostics/bslls/TransferringParametersBetweenClientAndServer.md Source path: diagnostics/bslls/TransferringParametersBetweenClientAndServer.md Aliases: bslls:TransferringParametersBetweenClientAndServer, #bslls:TransferringParametersBetweenClientAndServer, TransferringParametersBetweenClientAndServer Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/TransferringParametersBetweenClientAndServer/ ID: bslls:TransferringParametersBetweenClientAndServer # Передача параметров между клиентом и сервером (TransferringParametersBetweenClientAndServer) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `badpractice`, `performance`, `standard` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/TransferringParametersBetweenClientAndServer/ ### bslls:TryNumber - Приведение к числу в попытке BSLLS:TryNumber URL: https://v8std.ru/diagnostics/bslls/TryNumber/ Markdown URL: https://v8std.ru/diagnostics/bslls/TryNumber.md Source path: diagnostics/bslls/TryNumber.md Aliases: bslls:TryNumber, #bslls:TryNumber, TryNumber Related: standard:std499 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/TryNumber/ ID: bslls:TryNumber # Приведение к числу в попытке (TryNumber) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/TryNumber/ ### bslls:Typo - Опечатка BSLLS:Typo URL: https://v8std.ru/diagnostics/bslls/Typo/ Markdown URL: https://v8std.ru/diagnostics/bslls/Typo.md Source path: diagnostics/bslls/Typo.md Aliases: bslls:Typo, #bslls:Typo, Typo Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/Typo/ ID: bslls:Typo # Опечатка (Typo) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/Typo/ ### bslls:UnaryPlusInConcatenation - Унарный плюс в конкатенации строк BSLLS:UnaryPlusInConcatenation URL: https://v8std.ru/diagnostics/bslls/UnaryPlusInConcatenation/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnaryPlusInConcatenation.md Source path: diagnostics/bslls/UnaryPlusInConcatenation.md Aliases: bslls:UnaryPlusInConcatenation, #bslls:UnaryPlusInConcatenation, UnaryPlusInConcatenation Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnaryPlusInConcatenation/ ID: bslls:UnaryPlusInConcatenation # Унарный плюс в конкатенации строк (UnaryPlusInConcatenation) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `suspicious`, `brainoverload` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnaryPlusInConcatenation/ ### bslls:UnionAll - Использование ключевого слова "ОБЪЕДИНИТЬ" в запросах BSLLS:UnionAll URL: https://v8std.ru/diagnostics/bslls/UnionAll/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnionAll.md Source path: diagnostics/bslls/UnionAll.md Aliases: bslls:UnionAll, #bslls:UnionAll, UnionAll Related: standard:std434 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnionAll/ ID: bslls:UnionAll # Использование ключевого слова "ОБЪЕДИНИТЬ" в запросах (UnionAll) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `sql`, `performance` #### Стандарт - [#std434: Использование ключевых слов "ОБЪЕДИНИТЬ" и "ОБЪЕДИНИТЬ ВСЕ" в запросах](https://v8std.ru/std/434/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnionAll/ ### bslls:UnknownPreprocessorSymbol - Неизвестный символ препроцессора BSLLS:UnknownPreprocessorSymbol URL: https://v8std.ru/diagnostics/bslls/UnknownPreprocessorSymbol/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnknownPreprocessorSymbol.md Source path: diagnostics/bslls/UnknownPreprocessorSymbol.md Aliases: bslls:UnknownPreprocessorSymbol, #bslls:UnknownPreprocessorSymbol, UnknownPreprocessorSymbol Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnknownPreprocessorSymbol/ ID: bslls:UnknownPreprocessorSymbol # Неизвестный символ препроцессора (UnknownPreprocessorSymbol) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard`, `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnknownPreprocessorSymbol/ ### bslls:UnreachableCode - Недостижимый код BSLLS:UnreachableCode URL: https://v8std.ru/diagnostics/bslls/UnreachableCode/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnreachableCode.md Source path: diagnostics/bslls/UnreachableCode.md Aliases: bslls:UnreachableCode, #bslls:UnreachableCode, UnreachableCode Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnreachableCode/ ID: bslls:UnreachableCode # Недостижимый код (UnreachableCode) - Тип: Ошибка - Важность: Незначительный - Включена по умолчанию: Да - Теги: `design`, `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnreachableCode/ ### bslls:UnsafeFindByCode - Небезопасное использование метода НайтиПоКоду() BSLLS:UnsafeFindByCode URL: https://v8std.ru/diagnostics/bslls/UnsafeFindByCode/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnsafeFindByCode.md Source path: diagnostics/bslls/UnsafeFindByCode.md Aliases: bslls:UnsafeFindByCode, #bslls:UnsafeFindByCode, UnsafeFindByCode Related: standard:std456 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnsafeFindByCode/ ID: bslls:UnsafeFindByCode # Небезопасное использование метода НайтиПоКоду() (UnsafeFindByCode) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `design`, `suspicious` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnsafeFindByCode/ ### bslls:UnsafeSafeModeMethodCall - Небезопасное использование функции БезопасныйРежим() BSLLS:UnsafeSafeModeMethodCall URL: https://v8std.ru/diagnostics/bslls/UnsafeSafeModeMethodCall/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnsafeSafeModeMethodCall.md Source path: diagnostics/bslls/UnsafeSafeModeMethodCall.md Aliases: bslls:UnsafeSafeModeMethodCall, #bslls:UnsafeSafeModeMethodCall, UnsafeSafeModeMethodCall Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnsafeSafeModeMethodCall/ ID: bslls:UnsafeSafeModeMethodCall # Небезопасное использование функции БезопасныйРежим() (UnsafeSafeModeMethodCall) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `deprecated`, `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnsafeSafeModeMethodCall/ ### bslls:UnusedLocalMethod - Неиспользуемый локальный метод BSLLS:UnusedLocalMethod URL: https://v8std.ru/diagnostics/bslls/UnusedLocalMethod/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnusedLocalMethod.md Source path: diagnostics/bslls/UnusedLocalMethod.md Aliases: bslls:UnusedLocalMethod, #bslls:UnusedLocalMethod, UnusedLocalMethod Related: standard:std456 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnusedLocalMethod/ ID: bslls:UnusedLocalMethod # Неиспользуемый локальный метод (UnusedLocalMethod) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `suspicious`, `unused` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnusedLocalMethod/ ### bslls:UnusedLocalVariable - Неиспользуемая локальная переменная BSLLS:UnusedLocalVariable URL: https://v8std.ru/diagnostics/bslls/UnusedLocalVariable/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnusedLocalVariable.md Source path: diagnostics/bslls/UnusedLocalVariable.md Aliases: bslls:UnusedLocalVariable, #bslls:UnusedLocalVariable, UnusedLocalVariable Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnusedLocalVariable/ ID: bslls:UnusedLocalVariable # Неиспользуемая локальная переменная (UnusedLocalVariable) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `brainoverload`, `badpractice`, `unused` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnusedLocalVariable/ ### bslls:UnusedParameters - Неиспользуемый параметр BSLLS:UnusedParameters URL: https://v8std.ru/diagnostics/bslls/UnusedParameters/ Markdown URL: https://v8std.ru/diagnostics/bslls/UnusedParameters.md Source path: diagnostics/bslls/UnusedParameters.md Aliases: bslls:UnusedParameters, #bslls:UnusedParameters, UnusedParameters Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UnusedParameters/ ID: bslls:UnusedParameters # Неиспользуемый параметр (UnusedParameters) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `design`, `unused` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UnusedParameters/ ### bslls:UsageWriteLogEvent - Неверное использование метода "ЗаписьЖурналаРегистрации" BSLLS:UsageWriteLogEvent URL: https://v8std.ru/diagnostics/bslls/UsageWriteLogEvent/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsageWriteLogEvent.md Source path: diagnostics/bslls/UsageWriteLogEvent.md Aliases: bslls:UsageWriteLogEvent, #bslls:UsageWriteLogEvent, UsageWriteLogEvent Related: standard:std498, standard:std499 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsageWriteLogEvent/ ID: bslls:UsageWriteLogEvent # Неверное использование метода "ЗаписьЖурналаРегистрации" (UsageWriteLogEvent) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std498: Использование Журнала регистрации](https://v8std.ru/std/498/) - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsageWriteLogEvent/ ### bslls:UseLessForEach - Бесполезный перебор коллекции BSLLS:UseLessForEach URL: https://v8std.ru/diagnostics/bslls/UseLessForEach/ Markdown URL: https://v8std.ru/diagnostics/bslls/UseLessForEach.md Source path: diagnostics/bslls/UseLessForEach.md Aliases: bslls:UseLessForEach, #bslls:UseLessForEach, UseLessForEach Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UseLessForEach/ ID: bslls:UseLessForEach # Бесполезный перебор коллекции (UseLessForEach) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `clumsy` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UseLessForEach/ ### bslls:UseSystemInformation - Использование системной информации BSLLS:UseSystemInformation URL: https://v8std.ru/diagnostics/bslls/UseSystemInformation/ Markdown URL: https://v8std.ru/diagnostics/bslls/UseSystemInformation.md Source path: diagnostics/bslls/UseSystemInformation.md Aliases: bslls:UseSystemInformation, #bslls:UseSystemInformation, UseSystemInformation Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UseSystemInformation/ ID: bslls:UseSystemInformation # Использование системной информации (UseSystemInformation) - Тип: Потенциальная уязвимость - Важность: Критичный - Включена по умолчанию: Нет - Теги: `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UseSystemInformation/ ### bslls:UselessTernaryOperator - Бесполезный тернарный оператор BSLLS:UselessTernaryOperator URL: https://v8std.ru/diagnostics/bslls/UselessTernaryOperator/ Markdown URL: https://v8std.ru/diagnostics/bslls/UselessTernaryOperator.md Source path: diagnostics/bslls/UselessTernaryOperator.md Aliases: bslls:UselessTernaryOperator, #bslls:UselessTernaryOperator, UselessTernaryOperator Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UselessTernaryOperator/ ID: bslls:UselessTernaryOperator # Бесполезный тернарный оператор (UselessTernaryOperator) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `badpractice`, `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UselessTernaryOperator/ ### bslls:UsingCancelParameter - Работа с параметром "Отказ" BSLLS:UsingCancelParameter URL: https://v8std.ru/diagnostics/bslls/UsingCancelParameter/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingCancelParameter.md Source path: diagnostics/bslls/UsingCancelParameter.md Aliases: bslls:UsingCancelParameter, #bslls:UsingCancelParameter, UsingCancelParameter Related: standard:std686 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingCancelParameter/ ID: bslls:UsingCancelParameter # Работа с параметром "Отказ" (UsingCancelParameter) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - [#std686: Работа с параметром "Отказ" в обработчиках событий](https://v8std.ru/std/686/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingCancelParameter/ ### bslls:UsingExternalCodeTools - Использование возможностей выполнения внешнего кода BSLLS:UsingExternalCodeTools URL: https://v8std.ru/diagnostics/bslls/UsingExternalCodeTools/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingExternalCodeTools.md Source path: diagnostics/bslls/UsingExternalCodeTools.md Aliases: bslls:UsingExternalCodeTools, #bslls:UsingExternalCodeTools, UsingExternalCodeTools Related: standard:std669 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingExternalCodeTools/ ID: bslls:UsingExternalCodeTools # Использование возможностей выполнения внешнего кода (UsingExternalCodeTools) - Тип: Потенциальная уязвимость - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard`, `design` #### Стандарт - [#std669: Ограничение на выполнение внешнего кода](https://v8std.ru/std/669/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingExternalCodeTools/ ### bslls:UsingFindElementByString - Использование методов "НайтиПоНаименованию", "НайтиПоКоду" и "НайтиПоНомеру" BSLLS:UsingFindElementByString URL: https://v8std.ru/diagnostics/bslls/UsingFindElementByString/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingFindElementByString.md Source path: diagnostics/bslls/UsingFindElementByString.md Aliases: bslls:UsingFindElementByString, #bslls:UsingFindElementByString, UsingFindElementByString Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingFindElementByString/ ID: bslls:UsingFindElementByString # Использование методов "НайтиПоНаименованию", "НайтиПоКоду" и "НайтиПоНомеру" (UsingFindElementByString) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard`, `badpractice`, `performance` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingFindElementByString/ ### bslls:UsingGoto - Оператор "Перейти" не должен использоваться BSLLS:UsingGoto URL: https://v8std.ru/diagnostics/bslls/UsingGoto/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingGoto.md Source path: diagnostics/bslls/UsingGoto.md Aliases: bslls:UsingGoto, #bslls:UsingGoto, UsingGoto Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingGoto/ ID: bslls:UsingGoto # Оператор "Перейти" не должен использоваться (UsingGoto) - Тип: Дефект кода - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard`, `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingGoto/ ### bslls:UsingHardcodeNetworkAddress - Хранение ip-адресов в коде BSLLS:UsingHardcodeNetworkAddress URL: https://v8std.ru/diagnostics/bslls/UsingHardcodeNetworkAddress/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingHardcodeNetworkAddress.md Source path: diagnostics/bslls/UsingHardcodeNetworkAddress.md Aliases: bslls:UsingHardcodeNetworkAddress, #bslls:UsingHardcodeNetworkAddress, UsingHardcodeNetworkAddress Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingHardcodeNetworkAddress/ ID: bslls:UsingHardcodeNetworkAddress # Хранение ip-адресов в коде (UsingHardcodeNetworkAddress) - Тип: Уязвимость - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingHardcodeNetworkAddress/ ### bslls:UsingHardcodePath - Хранение путей к файлам в коде BSLLS:UsingHardcodePath URL: https://v8std.ru/diagnostics/bslls/UsingHardcodePath/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingHardcodePath.md Source path: diagnostics/bslls/UsingHardcodePath.md Aliases: bslls:UsingHardcodePath, #bslls:UsingHardcodePath, UsingHardcodePath Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingHardcodePath/ ID: bslls:UsingHardcodePath # Хранение путей к файлам в коде (UsingHardcodePath) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingHardcodePath/ ### bslls:UsingHardcodeSecretInformation - Хранение конфиденциальной информации в коде BSLLS:UsingHardcodeSecretInformation URL: https://v8std.ru/diagnostics/bslls/UsingHardcodeSecretInformation/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingHardcodeSecretInformation.md Source path: diagnostics/bslls/UsingHardcodeSecretInformation.md Aliases: bslls:UsingHardcodeSecretInformation, #bslls:UsingHardcodeSecretInformation, UsingHardcodeSecretInformation Related: standard:std740 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingHardcodeSecretInformation/ ID: bslls:UsingHardcodeSecretInformation # Хранение конфиденциальной информации в коде (UsingHardcodeSecretInformation) - Тип: Уязвимость - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std740: Безопасное хранение паролей](https://v8std.ru/std/740/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingHardcodeSecretInformation/ ### bslls:UsingLikeInQuery - Использование 'ПОДОБНО' в запросе BSLLS:UsingLikeInQuery URL: https://v8std.ru/diagnostics/bslls/UsingLikeInQuery/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingLikeInQuery.md Source path: diagnostics/bslls/UsingLikeInQuery.md Aliases: bslls:UsingLikeInQuery, #bslls:UsingLikeInQuery, UsingLikeInQuery Related: standard:std726 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingLikeInQuery/ ID: bslls:UsingLikeInQuery # Использование 'ПОДОБНО' в запросе (UsingLikeInQuery) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Нет - Теги: `sql`, `unpredictable` #### Стандарт - [#std726: Особенности использования в запросах оператора ПОДОБНО](https://v8std.ru/std/726/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingLikeInQuery/ ### bslls:UsingModalWindows - Использование модальных окон BSLLS:UsingModalWindows URL: https://v8std.ru/diagnostics/bslls/UsingModalWindows/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingModalWindows.md Source path: diagnostics/bslls/UsingModalWindows.md Aliases: bslls:UsingModalWindows, #bslls:UsingModalWindows, UsingModalWindows, модальные окна, модальное окно, использование модальных окон Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingModalWindows/ ID: bslls:UsingModalWindows # Использование модальных окон (UsingModalWindows) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingModalWindows/ ### bslls:UsingObjectNotAvailableUnix - Использование объектов недоступных в Unix системах BSLLS:UsingObjectNotAvailableUnix URL: https://v8std.ru/diagnostics/bslls/UsingObjectNotAvailableUnix/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingObjectNotAvailableUnix.md Source path: diagnostics/bslls/UsingObjectNotAvailableUnix.md Aliases: bslls:UsingObjectNotAvailableUnix, #bslls:UsingObjectNotAvailableUnix, UsingObjectNotAvailableUnix Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingObjectNotAvailableUnix/ ID: bslls:UsingObjectNotAvailableUnix # Использование объектов недоступных в Unix системах (UsingObjectNotAvailableUnix) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard`, `lockinos` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingObjectNotAvailableUnix/ ### bslls:UsingServiceTag - Использование служебных тегов BSLLS:UsingServiceTag URL: https://v8std.ru/diagnostics/bslls/UsingServiceTag/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingServiceTag.md Source path: diagnostics/bslls/UsingServiceTag.md Aliases: bslls:UsingServiceTag, #bslls:UsingServiceTag, UsingServiceTag Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingServiceTag/ ID: bslls:UsingServiceTag # Использование служебных тегов (UsingServiceTag) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `badpractice` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingServiceTag/ ### bslls:UsingSynchronousCalls - Использование синхронных вызовов BSLLS:UsingSynchronousCalls URL: https://v8std.ru/diagnostics/bslls/UsingSynchronousCalls/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingSynchronousCalls.md Source path: diagnostics/bslls/UsingSynchronousCalls.md Aliases: bslls:UsingSynchronousCalls, #bslls:UsingSynchronousCalls, UsingSynchronousCalls Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingSynchronousCalls/ ID: bslls:UsingSynchronousCalls # Использование синхронных вызовов (UsingSynchronousCalls) - Тип: Дефект кода - Важность: Важный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingSynchronousCalls/ ### bslls:UsingThisForm - Использование устаревшего свойства "ЭтаФорма" BSLLS:UsingThisForm URL: https://v8std.ru/diagnostics/bslls/UsingThisForm/ Markdown URL: https://v8std.ru/diagnostics/bslls/UsingThisForm.md Source path: diagnostics/bslls/UsingThisForm.md Aliases: bslls:UsingThisForm, #bslls:UsingThisForm, UsingThisForm Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingThisForm/ ID: bslls:UsingThisForm # Использование устаревшего свойства "ЭтаФорма" (UsingThisForm) - Тип: Дефект кода - Важность: Незначительный - Включена по умолчанию: Да - Теги: `standard`, `deprecated` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/UsingThisForm/ ### bslls:VirtualTableCallWithoutParameters - Обращение к виртуальной таблице без параметров BSLLS:VirtualTableCallWithoutParameters URL: https://v8std.ru/diagnostics/bslls/VirtualTableCallWithoutParameters/ Markdown URL: https://v8std.ru/diagnostics/bslls/VirtualTableCallWithoutParameters.md Source path: diagnostics/bslls/VirtualTableCallWithoutParameters.md Aliases: bslls:VirtualTableCallWithoutParameters, #bslls:VirtualTableCallWithoutParameters, VirtualTableCallWithoutParameters Related: standard:std657, standard:std733 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/VirtualTableCallWithoutParameters/ ID: bslls:VirtualTableCallWithoutParameters # Обращение к виртуальной таблице без параметров (VirtualTableCallWithoutParameters) - Тип: Ошибка - Важность: Важный - Включена по умолчанию: Да - Теги: `sql`, `standard`, `performance` #### Стандарт - [#std657: Обращения к виртуальным таблицам](https://v8std.ru/std/657/) - [#std733: Эффективное обращение к виртуальной таблице «Остатки»](https://v8std.ru/std/733/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/VirtualTableCallWithoutParameters/ ### bslls:WrongDataPathForFormElements - У полей формы не указан путь к данным BSLLS:WrongDataPathForFormElements URL: https://v8std.ru/diagnostics/bslls/WrongDataPathForFormElements/ Markdown URL: https://v8std.ru/diagnostics/bslls/WrongDataPathForFormElements.md Source path: diagnostics/bslls/WrongDataPathForFormElements.md Aliases: bslls:WrongDataPathForFormElements, #bslls:WrongDataPathForFormElements, WrongDataPathForFormElements Related: standard:std467 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongDataPathForFormElements/ ID: bslls:WrongDataPathForFormElements # У полей формы не указан путь к данным (WrongDataPathForFormElements) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `unpredictable` #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongDataPathForFormElements/ ### bslls:WrongHttpServiceHandler - Неверно задан обработчик метода http-сервиса BSLLS:WrongHttpServiceHandler URL: https://v8std.ru/diagnostics/bslls/WrongHttpServiceHandler/ Markdown URL: https://v8std.ru/diagnostics/bslls/WrongHttpServiceHandler.md Source path: diagnostics/bslls/WrongHttpServiceHandler.md Aliases: bslls:WrongHttpServiceHandler, #bslls:WrongHttpServiceHandler, WrongHttpServiceHandler Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongHttpServiceHandler/ ID: bslls:WrongHttpServiceHandler # Неверно задан обработчик метода http-сервиса (WrongHttpServiceHandler) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `suspicious`, `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongHttpServiceHandler/ ### bslls:WrongUseFunctionProceedWithCall - Некорректное использование функции ПродолжитьВызов() BSLLS:WrongUseFunctionProceedWithCall URL: https://v8std.ru/diagnostics/bslls/WrongUseFunctionProceedWithCall/ Markdown URL: https://v8std.ru/diagnostics/bslls/WrongUseFunctionProceedWithCall.md Source path: diagnostics/bslls/WrongUseFunctionProceedWithCall.md Aliases: bslls:WrongUseFunctionProceedWithCall, #bslls:WrongUseFunctionProceedWithCall, WrongUseFunctionProceedWithCall Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongUseFunctionProceedWithCall/ ID: bslls:WrongUseFunctionProceedWithCall # Некорректное использование функции ПродолжитьВызов() (WrongUseFunctionProceedWithCall) - Тип: Ошибка - Важность: Блокирующий - Включена по умолчанию: Да - Теги: `error`, `suspicious` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongUseFunctionProceedWithCall/ ### bslls:WrongUseOfRollbackTransactionMethod - Некорректное использование метода ОтменитьТранзакцию() BSLLS:WrongUseOfRollbackTransactionMethod URL: https://v8std.ru/diagnostics/bslls/WrongUseOfRollbackTransactionMethod/ Markdown URL: https://v8std.ru/diagnostics/bslls/WrongUseOfRollbackTransactionMethod.md Source path: diagnostics/bslls/WrongUseOfRollbackTransactionMethod.md Aliases: bslls:WrongUseOfRollbackTransactionMethod, #bslls:WrongUseOfRollbackTransactionMethod, WrongUseOfRollbackTransactionMethod Related: standard:std783 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongUseOfRollbackTransactionMethod/ ID: bslls:WrongUseOfRollbackTransactionMethod # Некорректное использование метода ОтменитьТранзакцию() (WrongUseOfRollbackTransactionMethod) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongUseOfRollbackTransactionMethod/ ### bslls:WrongWebServiceHandler - Неверно задан обработчик операции web-сервиса BSLLS:WrongWebServiceHandler URL: https://v8std.ru/diagnostics/bslls/WrongWebServiceHandler/ Markdown URL: https://v8std.ru/diagnostics/bslls/WrongWebServiceHandler.md Source path: diagnostics/bslls/WrongWebServiceHandler.md Aliases: bslls:WrongWebServiceHandler, #bslls:WrongWebServiceHandler, WrongWebServiceHandler Related: нет External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongWebServiceHandler/ ID: bslls:WrongWebServiceHandler # Неверно задан обработчик операции web-сервиса (WrongWebServiceHandler) - Тип: Ошибка - Важность: Критичный - Включена по умолчанию: Да - Теги: `suspicious`, `error` #### Стандарт - Нет прямой привязки к стандарту #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/WrongWebServiceHandler/ ### bslls:YoLetterUsage - Использование буквы "ё" в текстах модулей BSLLS:YoLetterUsage URL: https://v8std.ru/diagnostics/bslls/YoLetterUsage/ Markdown URL: https://v8std.ru/diagnostics/bslls/YoLetterUsage.md Source path: diagnostics/bslls/YoLetterUsage.md Aliases: bslls:YoLetterUsage, #bslls:YoLetterUsage, YoLetterUsage Related: standard:std456 External sources: https://1c-syntax.github.io/bsl-language-server/diagnostics/YoLetterUsage/ ID: bslls:YoLetterUsage # Использование буквы "ё" в текстах модулей (YoLetterUsage) - Тип: Дефект кода - Важность: Информационный - Включена по умолчанию: Да - Теги: `standard` #### Стандарт - [#std456: Тексты модулей](https://v8std.ru/std/456/) #### Источник https://1c-syntax.github.io/bsl-language-server/diagnostics/YoLetterUsage/ ### v8cs:begin-transaction - После начала транзакции отсуствует блок Попытка-Исключение (begin-transaction) URL: https://v8std.ru/diagnostics/v8-code-style/begin-transaction/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/begin-transaction.md Source path: diagnostics/v8-code-style/begin-transaction.md Aliases: v8cs:begin-transaction, #v8cs:begin-transaction, begin-transaction, edt begin-transaction, edt:begin-transaction Related: standard:std499, standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/begin-transaction.md ID: v8cs:begin-transaction - Категория: `bsl` Mежду "НачатьТранзакцию()" и "Попытка" есть исполняемый код, который может вызвать исключение, после "НачатьТранзакцию()" не найден оператор "Попытка" #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/begin-transaction.md ### v8cs:bsl-canonical-pragma - Аннотация написана канонически (bsl-canonical-pragma) URL: https://v8std.ru/diagnostics/v8-code-style/bsl-canonical-pragma/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/bsl-canonical-pragma.md Source path: diagnostics/v8-code-style/bsl-canonical-pragma.md Aliases: v8cs:bsl-canonical-pragma, #v8cs:bsl-canonical-pragma, bsl-canonical-pragma, edt bsl-canonical-pragma, edt:bsl-canonical-pragma Related: standard:std441 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-canonical-pragma.md ID: v8cs:bsl-canonical-pragma - Категория: `bsl` Аннотации пишутся канонически (как в документации или Синтакс-помощнике). #### Стандарт - [#std441: Общие требования к построению конструкций встроенного языка](https://v8std.ru/std/441/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-canonical-pragma.md ### v8cs:bsl-nstr-string-literal-format - НСтр формат строкового литерала (bsl-nstr-string-literal-format) URL: https://v8std.ru/diagnostics/v8-code-style/bsl-nstr-string-literal-format/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/bsl-nstr-string-literal-format.md Source path: diagnostics/v8-code-style/bsl-nstr-string-literal-format.md Aliases: v8cs:bsl-nstr-string-literal-format, #v8cs:bsl-nstr-string-literal-format, bsl-nstr-string-literal-format, edt bsl-nstr-string-literal-format, edt:bsl-nstr-string-literal-format Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-nstr-string-literal-format.md ID: v8cs:bsl-nstr-string-literal-format - Категория: `bsl` ## Неправильно В первый параметр функции НСтр необходимо передавать только строковый литерал. Строковый литерал в первом параметре функции не должен быть пустым. Формат строкового литерала должен быть правильным: `"Ключ1 = 'значение 1'; Ключ2 = 'значение 2';"`. Должен использоваться существующий код языка из списка языков конфигурации. Сообщение для кода языка не должно быть пустым. Сообщение для кода языка не должно оканчиваться пробелом. Сообщение для кода языка не должно оканчиваться новой строкой. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-nstr-string-literal-format.md ### v8cs:bsl-variable-name-invalid - Правила образования имен переменных (bsl-variable-name-invalid) URL: https://v8std.ru/diagnostics/v8-code-style/bsl-variable-name-invalid/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/bsl-variable-name-invalid.md Source path: diagnostics/v8-code-style/bsl-variable-name-invalid.md Aliases: v8cs:bsl-variable-name-invalid, #v8cs:bsl-variable-name-invalid, bsl-variable-name-invalid, edt bsl-variable-name-invalid, edt:bsl-variable-name-invalid Related: standard:std454 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-variable-name-invalid.md ID: v8cs:bsl-variable-name-invalid - Категория: `bsl` 1. Имена переменных следует образовывать от терминов предметной области таким образом, чтобы из имени переменной было понятно ее назначение. 2. Имена следует образовывать путем удаления пробелов между словами. При этом, каждое слово в имени пишется с прописной буквы. Предлоги и местоимения из одной буквы также пишутся прописными буквами. 3. Имена переменных запрещается начинать с подчеркивания. 4. Имена переменных не должны состоять из одного символа. Использование односимвольных имен переменных допускается только для счетчиков циклов.. 5. Переменные, отражающие состояние некоторого флага, следует называть так, как пишется истинное значение этого флага. #### Стандарт - [#std454: Правила образования имен переменных](https://v8std.ru/std/454/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/bsl-variable-name-invalid.md ### v8cs:change-and-validate-instead-of-around - Используется аннотация &ИзменениеИКонтроль вместо &Вместо (change-and-validate-instead-of-around) URL: https://v8std.ru/diagnostics/v8-code-style/change-and-validate-instead-of-around/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/change-and-validate-instead-of-around.md Source path: diagnostics/v8-code-style/change-and-validate-instead-of-around.md Aliases: - v8cs:change-and-validate-instead-of-around - #v8cs:change-and-validate-instead-of-around - change-and-validate-instead-of-around - edt change-and-validate-instead-of-around - edt:change-and-validate-instead-of-around Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/change-and-validate-instead-of-around.md ID: v8cs:change-and-validate-instead-of-around - Категория: `bsl` Начиная с релиза платформы 8.3.16, можно использовать аннотацию &ИзменениеИКонтроль вместо аннотации &Вместо в тех случаях, когда внутри метода отсутствует вызов ПродолжитьВызов #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/change-and-validate-instead-of-around.md ### v8cs:code-after-async-call - Код расположен после асинхронного вызова (code-after-async-call) URL: https://v8std.ru/diagnostics/v8-code-style/code-after-async-call/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/code-after-async-call.md Source path: diagnostics/v8-code-style/code-after-async-call.md Aliases: v8cs:code-after-async-call, #v8cs:code-after-async-call, code-after-async-call, edt code-after-async-call, edt:code-after-async-call Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/code-after-async-call.md ID: v8cs:code-after-async-call - Категория: `bsl` При асинхронном подходе вызов метода выполняется как обычно, но управление возвращается вызывающему коду до того, как асинхронный метод завершит свою работу. После этого вызывающий код продолжает свое выполнение. Особенность асинхронного выполнения: исполнение на стороне вызывающего кода продолжится до того, как полностью закончилось исполнение вызванного метода. Для правильного решения нужно вынести весь код, который должен быть выполнен после выполнения асинхронного действия, в экспортный метод и указать его имя в обработке оповещения, которая будет вызвана после завершения асинхронного действия. Или использовать асинхронность через обещания, например, Ждать ПредупреждениеАсинх(Текст). #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/code-after-async-call.md ### v8cs:commit-transaction - Проверка нарушения схемы работы с транзакциями (commit-transaction) URL: https://v8std.ru/diagnostics/v8-code-style/commit-transaction/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/commit-transaction.md Source path: diagnostics/v8-code-style/commit-transaction.md Aliases: v8cs:commit-transaction, #v8cs:commit-transaction, commit-transaction, edt commit-transaction, edt:commit-transaction Related: standard:std499, standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/commit-transaction.md ID: v8cs:commit-transaction - Категория: `bsl` Вызов "ЗафиксироватьТранзакцию()" находится вне конструкции "Попытка... Исключение" Отсутствует вызов "НачатьТранзакцию()", хотя вызываются "ЗафиксироватьТранзакцию()" Для вызова "НачатьТранзакцию()" отсутствует парный вызов "ОтменитьТранзакцию()" Mежду "ЗафиксироватьТранзакцию()" и "Исключение" есть исполняемый код, который может вызвать исключение #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/commit-transaction.md ### v8cs:common-module-missing-api - Общий модуль должен иметь хотя бы один экспортный метод (common-module-missing-api) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-missing-api/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-missing-api.md Source path: diagnostics/v8-code-style/common-module-missing-api.md Aliases: v8cs:common-module-missing-api, #v8cs:common-module-missing-api, common-module-missing-api, edt common-module-missing-api, edt:common-module-missing-api Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/common-module-missing-api.md ID: v8cs:common-module-missing-api - Категория: `bsl` Общий модуль должен иметь программный интерфейс. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/common-module-missing-api.md ### v8cs:common-module-name-cached - Общий модуль с повторно используемыми значениями (common-module-name-cached) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-cached/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-cached.md Source path: diagnostics/v8-code-style/common-module-name-cached.md Aliases: v8cs:common-module-name-cached, #v8cs:common-module-name-cached, common-module-name-cached, edt common-module-name-cached, edt:common-module-name-cached Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-cached.md ID: v8cs:common-module-name-cached - Категория: `md` Общий модуль с повторно используемыми значениями должен именоваться с постфиксом "ПовтИсп" #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-cached.md ### v8cs:common-module-name-client-cached - Клиентский общий модуль с повторно используемыми значениями (common-module-name-client-cached) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-client-cached/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-client-cached.md Source path: diagnostics/v8-code-style/common-module-name-client-cached.md Aliases: - v8cs:common-module-name-client-cached - #v8cs:common-module-name-client-cached - common-module-name-client-cached - edt common-module-name-client-cached - edt:common-module-name-client-cached Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client-cached.md ID: v8cs:common-module-name-client-cached - Категория: `md` Клиентский общий модуль с повторно используемыми значениями должен именоваться с постфиксом "КлиентПовтИсп" #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client-cached.md ### v8cs:common-module-name-client-server - Клиент-серверный общий модуль должен оканчиваться на суффикс КлиентСервер (common-module-name-client-server) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-client-server/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-client-server.md Source path: diagnostics/v8-code-style/common-module-name-client-server.md Aliases: - v8cs:common-module-name-client-server - #v8cs:common-module-name-client-server - common-module-name-client-server - edt common-module-name-client-server - edt:common-module-name-client-server Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client-server.md ID: v8cs:common-module-name-client-server - Категория: `md` Клиент-серверный общий модуль должен оканчиваться на суффикс КлиентСервер #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client-server.md ### v8cs:common-module-name-client - Клиентский общий модуль должен оканчиваться на суффикс Клиент (common-module-name-client) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-client/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-client.md Source path: diagnostics/v8-code-style/common-module-name-client.md Aliases: v8cs:common-module-name-client, #v8cs:common-module-name-client, common-module-name-client, edt common-module-name-client, edt:common-module-name-client Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client.md ID: v8cs:common-module-name-client - Категория: `md` Клиентский общий модуль должен оканчиваться на суффикс Клиент #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-client.md ### v8cs:common-module-name-full-access - Привилегированный общий модуль должен оканчиваться на суффикс ПолныеПрава (common-module-name-full-access) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-full-access/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-full-access.md Source path: diagnostics/v8-code-style/common-module-name-full-access.md Aliases: v8cs:common-module-name-full-access, #v8cs:common-module-name-full-access, common-module-name-full-access, edt common-module-name-full-access, edt:common-module-name-full-access Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-full-access.md ID: v8cs:common-module-name-full-access - Категория: `md` Привилегированный общий модуль должен оканчиваться на суффикс ПолныеПрава #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-full-access.md ### v8cs:common-module-name-global-client - Глобальный клиентский общий модуль должен оканчиваться на суффикс Глобальный без суффикса Клиент (common-module-name-global-client) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-global-client/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-global-client.md Source path: diagnostics/v8-code-style/common-module-name-global-client.md Aliases: - v8cs:common-module-name-global-client - #v8cs:common-module-name-global-client - common-module-name-global-client - edt common-module-name-global-client - edt:common-module-name-global-client Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-global-client.md ID: v8cs:common-module-name-global-client - Категория: `md` 3.2.1. Для глобальных модулей добавляется постфикс «Глобальный», в этом случае постфикс «Клиент» добавлять не следует. #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-global-client.md ### v8cs:common-module-name-global - Глобальный общий модуль должен оканчиваться на суффикс Глобальный (common-module-name-global) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-global/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-global.md Source path: diagnostics/v8-code-style/common-module-name-global.md Aliases: v8cs:common-module-name-global, #v8cs:common-module-name-global, common-module-name-global, edt common-module-name-global, edt:common-module-name-global Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-global.md ID: v8cs:common-module-name-global - Категория: `md` Глобальный общий модуль должен оканчиваться на суффикс Глобальный #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-global.md ### v8cs:common-module-name-server-call-cached - Общий модуль с повторно используемыми значениями (common-module-name-server-call-cached) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-server-call-cached/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-server-call-cached.md Source path: diagnostics/v8-code-style/common-module-name-server-call-cached.md Aliases: - v8cs:common-module-name-server-call-cached - #v8cs:common-module-name-server-call-cached - common-module-name-server-call-cached - edt common-module-name-server-call-cached - edt:common-module-name-server-call-cached Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-server-call-cached.md ID: v8cs:common-module-name-server-call-cached - Категория: `md` Общий модуль с признаком ВызовСервер и повторно используемыми значениями должен именоваться с постфиксом "ВызовСервераПовтИсп" #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-server-call-cached.md ### v8cs:common-module-name-server-call - Общий модуль, для которого предусмотрен вызов сервера (common-module-name-server-call) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-server-call/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-name-server-call.md Source path: diagnostics/v8-code-style/common-module-name-server-call.md Aliases: v8cs:common-module-name-server-call, #v8cs:common-module-name-server-call, common-module-name-server-call, edt common-module-name-server-call, edt:common-module-name-server-call Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-server-call.md ID: v8cs:common-module-name-server-call - Категория: `md` Общий модуль, для которого предусмотрен вызов сервера, должен именоваться с постфиксом "ВызовСервера" #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-name-server-call.md ### v8cs:common-module-named-self-reference - Избыточное обращение по собственному имени внутри общего модуля (common-module-named-self-reference) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-named-self-reference/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-named-self-reference.md Source path: diagnostics/v8-code-style/common-module-named-self-reference.md Aliases: - v8cs:common-module-named-self-reference - #v8cs:common-module-named-self-reference - common-module-named-self-reference - edt common-module-named-self-reference - edt:common-module-named-self-reference Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/common-module-named-self-reference.md ID: v8cs:common-module-named-self-reference - Категория: `bsl` Избыточное обращение по собственному имени внутри общего модуля (к методу, свойству или реквизиту) Для модулей с повторным использованием возвращаемых значений обращение по собственному имени разрешено #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/common-module-named-self-reference.md ### v8cs:common-module-type - Общий модуль имеет некорректный тип (common-module-type) URL: https://v8std.ru/diagnostics/v8-code-style/common-module-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/common-module-type.md Source path: diagnostics/v8-code-style/common-module-type.md Aliases: v8cs:common-module-type, #v8cs:common-module-type, common-module-type, edt common-module-type, edt:common-module-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-type.md ID: v8cs:common-module-type - Категория: `md` Общий модуль имеет некорректный тип #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/common-module-type.md ### v8cs:configuration-data-lock-mode - Режим блокировки данных конфигурации (configuration-data-lock-mode) URL: https://v8std.ru/diagnostics/v8-code-style/configuration-data-lock-mode/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/configuration-data-lock-mode.md Source path: diagnostics/v8-code-style/configuration-data-lock-mode.md Aliases: v8cs:configuration-data-lock-mode, #v8cs:configuration-data-lock-mode, configuration-data-lock-mode, edt configuration-data-lock-mode, edt:configuration-data-lock-mode Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/configuration-data-lock-mode.md ID: v8cs:configuration-data-lock-mode - Категория: `md` Приложение должно использовать управляемый режим блокировки данных #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/configuration-data-lock-mode.md ### v8cs:constructor-function-return-section - Секция возвращаемого значения функции-конструктора данных (constructor-function-return-section) URL: https://v8std.ru/diagnostics/v8-code-style/constructor-function-return-section/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/constructor-function-return-section.md Source path: diagnostics/v8-code-style/constructor-function-return-section.md Aliases: - v8cs:constructor-function-return-section - #v8cs:constructor-function-return-section - constructor-function-return-section - edt constructor-function-return-section - edt:constructor-function-return-section Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/constructor-function-return-section.md ID: v8cs:constructor-function-return-section - Категория: `bsl` Система строгой типизации кода проверяет что поле документирующего комментария имеет описание типа #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/constructor-function-return-section.md ### v8cs:data-composition-conditional-appearance-use - Условное оформление в формах (data-composition-conditional-appearance-use) URL: https://v8std.ru/diagnostics/v8-code-style/data-composition-conditional-appearance-use/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/data-composition-conditional-appearance-use.md Source path: diagnostics/v8-code-style/data-composition-conditional-appearance-use.md Aliases: - v8cs:data-composition-conditional-appearance-use - #v8cs:data-composition-conditional-appearance-use - data-composition-conditional-appearance-use - edt data-composition-conditional-appearance-use - edt:data-composition-conditional-appearance-use Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/data-composition-conditional-appearance-use.md ID: v8cs:data-composition-conditional-appearance-use - Категория: `form` Настройку условного оформления рекомендуется делать в коде формы (а не в свойствах формы). #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/data-composition-conditional-appearance-use.md ### v8cs:data-exchange-load - Проверка ОбменДанными.Загрузка в обработчике события (data-exchange-load) URL: https://v8std.ru/diagnostics/v8-code-style/data-exchange-load/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/data-exchange-load.md Source path: diagnostics/v8-code-style/data-exchange-load.md Aliases: v8cs:data-exchange-load, #v8cs:data-exchange-load, data-exchange-load, edt data-exchange-load, edt:data-exchange-load Related: standard:std464, standard:std465, standard:std752, standard:std773 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/data-exchange-load.md ID: v8cs:data-exchange-load - Категория: `bsl` Все действия в процедурах-обработчиков событий ПередЗаписью, ПриЗаписи, ПередУдалением должны выполняться после проверки на ОбменДанными.Загрузка. Это необходимо для того, чтобы никакая бизнес-логика объекта не выполнялась при записи объекта через механизм обмена данными, поскольку она уже была выполнена для объекта в том узле, где он был создан. В этом случае все данные загружаются в ИБ «как есть», без искажений (изменений), проверок или каких-либо других дополнительных действий, препятствующих загрузке данных. #### Стандарт - [#std773: Использование признака ОбменДанными.Загрузка в обработчиках событий объекта](https://v8std.ru/std/773/) - [#std752: Обработчик события ПередУдалением](https://v8std.ru/std/752/) - [#std464: Обработчик события ПередЗаписью](https://v8std.ru/std/464/) - [#std465: Обработчик события ПриЗаписи](https://v8std.ru/std/465/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/data-exchange-load.md ### v8cs:db-object-anyref-type - Реквизиты составного типа, такие как ЛюбаяСсылка и аналогичные (db-object-anyref-type) URL: https://v8std.ru/diagnostics/v8-code-style/db-object-anyref-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/db-object-anyref-type.md Source path: diagnostics/v8-code-style/db-object-anyref-type.md Aliases: v8cs:db-object-anyref-type, #v8cs:db-object-anyref-type, db-object-anyref-type, edt db-object-anyref-type, edt:db-object-anyref-type Related: standard:std728 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/db-object-anyref-type.md ID: v8cs:db-object-anyref-type - Категория: `md` Для типизированных объектов метаданных, хранящихся в информационной базе, не следует использовать составные типы ЛюбаяСсылка, СправочникСсылка, ДокументСсылка и аналогичные. Состав типов того или иного типизированного объекта должен определяться явным образом. #### Стандарт - [#std728: Ограничения на использование реквизитов составного типа](https://v8std.ru/std/728/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/db-object-anyref-type.md ### v8cs:db-object-ref-non-ref-type - Реквизиты составного типа (db-object-ref-non-ref-type) URL: https://v8std.ru/diagnostics/v8-code-style/db-object-ref-non-ref-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/db-object-ref-non-ref-type.md Source path: diagnostics/v8-code-style/db-object-ref-non-ref-type.md Aliases: v8cs:db-object-ref-non-ref-type, #v8cs:db-object-ref-non-ref-type, db-object-ref-non-ref-type, edt db-object-ref-non-ref-type, edt:db-object-ref-non-ref-type Related: standard:std728 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/db-object-ref-non-ref-type.md ID: v8cs:db-object-ref-non-ref-type - Категория: `md` Реквизиты составного типа, используемые в условиях соединений, отборах, а также для упорядочивания, должны содержать только ссылочные типы (СправочникСсылка.…, ДокументСсылка.… и пр.). В состав их типов не рекомендуется включать никаких других нессылочных типов, например: Строка, Число, Дата, УникальныйИдентификатор, Булево, а также ХранилищеЗначения. #### Стандарт - [#std728: Ограничения на использование реквизитов составного типа](https://v8std.ru/std/728/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/db-object-ref-non-ref-type.md ### v8cs:deprecated-procedure-outside-deprecated-region - Устаревшая процедура (функция) расположена вне области "УстаревшиеПроцедурыИФункции" (deprecated-procedure-outside-deprecated-region) URL: https://v8std.ru/diagnostics/v8-code-style/deprecated-procedure-outside-deprecated-region/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/deprecated-procedure-outside-deprecated-region.md Source path: diagnostics/v8-code-style/deprecated-procedure-outside-deprecated-region.md Aliases: - v8cs:deprecated-procedure-outside-deprecated-region - #v8cs:deprecated-procedure-outside-deprecated-region - deprecated-procedure-outside-deprecated-region - edt deprecated-procedure-outside-deprecated-region - edt:deprecated-procedure-outside-deprecated-region Related: standard:std644 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/deprecated-procedure-outside-deprecated-region.md ID: v8cs:deprecated-procedure-outside-deprecated-region - Категория: `bsl` Устаревшую **экспортную** процедуру (функцию) следует перенести в область общего модуля **УстаревшиеПроцедурыИФункции**, которая размещена внутри области **ПрограммныйИнтерфейс**. В процедурах и функциях, размещенных в области **УстаревшиеПроцедурыИФункции**, допустимы отклонения от других стандартов разработки согласно п.1.1. В этом случае существующий прикладной код не потребуется переписывать. При этом если при выпуске новой редакции библиотеки будет принято решение удалить все устаревшие функции, то такие функции могут быть легко выявлены в коде библиотеки и удалены. #### Стандарт - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/deprecated-procedure-outside-deprecated-region.md ### v8cs:doc-comment-collection-item-type - Тип коллекций в документирующем комментарии содержит тип элемента коллекции (doc-comment-collection-item-type) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-collection-item-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-collection-item-type.md Source path: diagnostics/v8-code-style/doc-comment-collection-item-type.md Aliases: - v8cs:doc-comment-collection-item-type - #v8cs:doc-comment-collection-item-type - doc-comment-collection-item-type - edt doc-comment-collection-item-type - edt:doc-comment-collection-item-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-collection-item-type.md ID: v8cs:doc-comment-collection-item-type - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-collection-item-type.md ### v8cs:doc-comment-complex-type-with-link - Поле документирующего комментария использует объявление сложного типа вместо ссылки на тип (doc-comment-complex-type-with-link) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-complex-type-with-link/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-complex-type-with-link.md Source path: diagnostics/v8-code-style/doc-comment-complex-type-with-link.md Aliases: - v8cs:doc-comment-complex-type-with-link - #v8cs:doc-comment-complex-type-with-link - doc-comment-complex-type-with-link - edt doc-comment-complex-type-with-link - edt:doc-comment-complex-type-with-link Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-complex-type-with-link.md ID: v8cs:doc-comment-complex-type-with-link - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-complex-type-with-link.md ### v8cs:doc-comment-description-ends-on-dot - Многострочное описание документирующего комментария оканчивается на точку (doc-comment-description-ends-on-dot) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-description-ends-on-dot/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-description-ends-on-dot.md Source path: diagnostics/v8-code-style/doc-comment-description-ends-on-dot.md Aliases: - v8cs:doc-comment-description-ends-on-dot - #v8cs:doc-comment-description-ends-on-dot - doc-comment-description-ends-on-dot - edt doc-comment-description-ends-on-dot - edt:doc-comment-description-ends-on-dot Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-description-ends-on-dot.md ID: v8cs:doc-comment-description-ends-on-dot - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-description-ends-on-dot.md ### v8cs:doc-comment-export-function-return-section - Секция возвращаемого значения документирующего комментария для экспортной функции (doc-comment-export-function-return-section) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-export-function-return-section/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-export-function-return-section.md Source path: diagnostics/v8-code-style/doc-comment-export-function-return-section.md Aliases: - v8cs:doc-comment-export-function-return-section - #v8cs:doc-comment-export-function-return-section - doc-comment-export-function-return-section - edt doc-comment-export-function-return-section - edt:doc-comment-export-function-return-section Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-export-function-return-section.md ID: v8cs:doc-comment-export-function-return-section - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-export-function-return-section.md ### v8cs:doc-comment-export-procedure-description-section - Документирующий комментарий не содержит секцию "Описание" для экспортной процедуры (функции) (doc-comment-export-procedure-description-section) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-export-procedure-description-section/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-export-procedure-description-section.md Source path: diagnostics/v8-code-style/doc-comment-export-procedure-description-section.md Aliases: - v8cs:doc-comment-export-procedure-description-section - #v8cs:doc-comment-export-procedure-description-section - doc-comment-export-procedure-description-section - edt doc-comment-export-procedure-description-section - edt:doc-comment-export-procedure-description-section Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-export-procedure-description-section.md ID: v8cs:doc-comment-export-procedure-description-section - Категория: `bsl` **Секция "Описание"** содержит описание назначения процедуры (функции), достаточное для понимания сценариев ее использования без просмотра ее исходного кода. Также может содержать краткое описание принципов работы и перекрестные ссылки на связанные процедуры и функции. Может быть единственной секцией для процедур без параметров. Описание не должно совпадать с именем процедуры (функции). Для процедур и функций секция должна начинаться с глагола. Для функций это, как правило: «Возвращает…». В тех случаях, когда возвращаемый результат является не основным в работе функции, – то с основного действия, например: «Проверяет…», «Сравнивает…», «Вычисляет…» и т.п. Не рекомендуется начинать описание с избыточных слов «Процедура...», «Функция...», а также с имени самой процедуры (функции), от удаления которых смысл не меняется. #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-export-procedure-description-section.md ### v8cs:doc-comment-field-in-description-suggestion - Многострочное описание документирующего комментария содержит определение поля (doc-comment-field-in-description-suggestion) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-field-in-description-suggestion/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-field-in-description-suggestion.md Source path: diagnostics/v8-code-style/doc-comment-field-in-description-suggestion.md Aliases: - v8cs:doc-comment-field-in-description-suggestion - #v8cs:doc-comment-field-in-description-suggestion - doc-comment-field-in-description-suggestion - edt doc-comment-field-in-description-suggestion - edt:doc-comment-field-in-description-suggestion Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-in-description-suggestion.md ID: v8cs:doc-comment-field-in-description-suggestion - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-in-description-suggestion.md ### v8cs:doc-comment-field-name - Поле документирующего комментария является корректным именем (doc-comment-field-name) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-field-name/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-field-name.md Source path: diagnostics/v8-code-style/doc-comment-field-name.md Aliases: v8cs:doc-comment-field-name, #v8cs:doc-comment-field-name, doc-comment-field-name, edt doc-comment-field-name, edt:doc-comment-field-name Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-name.md ID: v8cs:doc-comment-field-name - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-name.md ### v8cs:doc-comment-field-type-strict - Поле документирующего комментария имеет описание типа (doc-comment-field-type-strict) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-field-type-strict/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-field-type-strict.md Source path: diagnostics/v8-code-style/doc-comment-field-type-strict.md Aliases: v8cs:doc-comment-field-type-strict, #v8cs:doc-comment-field-type-strict, doc-comment-field-type-strict, edt doc-comment-field-type-strict, edt:doc-comment-field-type-strict Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-type-strict.md ID: v8cs:doc-comment-field-type-strict - Категория: `bsl` Система строгой типизации кода проверяет, что поле документирующего комментария имеет описание типа #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-type-strict.md ### v8cs:doc-comment-field-type - Поле документирующего комментария не имеет определения типа (doc-comment-field-type) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-field-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-field-type.md Source path: diagnostics/v8-code-style/doc-comment-field-type.md Aliases: v8cs:doc-comment-field-type, #v8cs:doc-comment-field-type, doc-comment-field-type, edt doc-comment-field-type, edt:doc-comment-field-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-type.md ID: v8cs:doc-comment-field-type - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-field-type.md ### v8cs:doc-comment-parameter-in-description-suggestion - Многострочное описание документирующего комментария содержит определение параметра (doc-comment-parameter-in-description-suggestion) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-parameter-in-description-suggestion/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-parameter-in-description-suggestion.md Source path: diagnostics/v8-code-style/doc-comment-parameter-in-description-suggestion.md Aliases: - v8cs:doc-comment-parameter-in-description-suggestion - #v8cs:doc-comment-parameter-in-description-suggestion - doc-comment-parameter-in-description-suggestion - edt doc-comment-parameter-in-description-suggestion - edt:doc-comment-parameter-in-description-suggestion Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-parameter-in-description-suggestion.md ID: v8cs:doc-comment-parameter-in-description-suggestion - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-parameter-in-description-suggestion.md ### v8cs:doc-comment-parameter-section - В секции параметров документирующего комментария пропущено определение параметра (doc-comment-parameter-section) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-parameter-section/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-parameter-section.md Source path: diagnostics/v8-code-style/doc-comment-parameter-section.md Aliases: v8cs:doc-comment-parameter-section, #v8cs:doc-comment-parameter-section, doc-comment-parameter-section, edt doc-comment-parameter-section, edt:doc-comment-parameter-section Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-parameter-section.md ID: v8cs:doc-comment-parameter-section - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-parameter-section.md ### v8cs:doc-comment-procedure-return-section - Документирующий комментарий содежрит секцию возвращаемого значения для процедуры (doc-comment-procedure-return-section) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-procedure-return-section/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-procedure-return-section.md Source path: diagnostics/v8-code-style/doc-comment-procedure-return-section.md Aliases: - v8cs:doc-comment-procedure-return-section - #v8cs:doc-comment-procedure-return-section - doc-comment-procedure-return-section - edt doc-comment-procedure-return-section - edt:doc-comment-procedure-return-section Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-procedure-return-section.md ID: v8cs:doc-comment-procedure-return-section - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-procedure-return-section.md ### v8cs:doc-comment-redundant-parameter-section - Секция параметров документирующего комментария избыточная (doc-comment-redundant-parameter-section) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-redundant-parameter-section/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-redundant-parameter-section.md Source path: diagnostics/v8-code-style/doc-comment-redundant-parameter-section.md Aliases: - v8cs:doc-comment-redundant-parameter-section - #v8cs:doc-comment-redundant-parameter-section - doc-comment-redundant-parameter-section - edt doc-comment-redundant-parameter-section - edt:doc-comment-redundant-parameter-section Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-redundant-parameter-section.md ID: v8cs:doc-comment-redundant-parameter-section - Категория: `bsl` Документирующий комментарий для метода без параметров не должен иметь секции параметров, и она должна быть удалена. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-redundant-parameter-section.md ### v8cs:doc-comment-ref-link - Ссылка документирующего комментария на существующий объект (doc-comment-ref-link) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-ref-link/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-ref-link.md Source path: diagnostics/v8-code-style/doc-comment-ref-link.md Aliases: v8cs:doc-comment-ref-link, #v8cs:doc-comment-ref-link, doc-comment-ref-link, edt doc-comment-ref-link, edt:doc-comment-ref-link Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-ref-link.md ID: v8cs:doc-comment-ref-link - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-ref-link.md ### v8cs:doc-comment-return-section-type - Секция возвращаемого значения документирующего комментария содержит корректные типы (doc-comment-return-section-type) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-return-section-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-return-section-type.md Source path: diagnostics/v8-code-style/doc-comment-return-section-type.md Aliases: - v8cs:doc-comment-return-section-type - #v8cs:doc-comment-return-section-type - doc-comment-return-section-type - edt doc-comment-return-section-type - edt:doc-comment-return-section-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-return-section-type.md ID: v8cs:doc-comment-return-section-type - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-return-section-type.md ### v8cs:doc-comment-type - Определение типа документирующего комментария (doc-comment-type) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-type.md Source path: diagnostics/v8-code-style/doc-comment-type.md Aliases: v8cs:doc-comment-type, #v8cs:doc-comment-type, doc-comment-type, edt doc-comment-type, edt:doc-comment-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-type.md ID: v8cs:doc-comment-type - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-type.md ### v8cs:doc-comment-use-minus - Использование только дефис-минуса в документирующем комментарии (doc-comment-use-minus) URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-use-minus/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/doc-comment-use-minus.md Source path: diagnostics/v8-code-style/doc-comment-use-minus.md Aliases: v8cs:doc-comment-use-minus, #v8cs:doc-comment-use-minus, doc-comment-use-minus, edt doc-comment-use-minus, edt:doc-comment-use-minus Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-use-minus.md ID: v8cs:doc-comment-use-minus - Категория: `bsl` В описании в модели документирующего комментария необходимо использовать только символ дефис-минус вместо обычного дефиса или различных вариантов тире. Эта проверка анализирует неправильные "минусы" в первом текстовом элементе в описании, идущем после декларации поля, чтобы найти возможное неправильное построение модели документирующего комментария. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/doc-comment-use-minus.md ### v8cs:document-post-in-privileged-mode - В документе, предполагающем проведение, не установлен флаг "Привилегированный режим при проведении / отмене проведения" (document-post-in-privileged-mode) URL: https://v8std.ru/diagnostics/v8-code-style/document-post-in-privileged-mode/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/document-post-in-privileged-mode.md Source path: diagnostics/v8-code-style/document-post-in-privileged-mode.md Aliases: - v8cs:document-post-in-privileged-mode - #v8cs:document-post-in-privileged-mode - document-post-in-privileged-mode - edt document-post-in-privileged-mode - edt:document-post-in-privileged-mode Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/document-post-in-privileged-mode.md ID: v8cs:document-post-in-privileged-mode - Категория: `md` 1.7. Во всех документах, предполагающих проведение, должны быть выставлены флаги «Привилегированный режим при проведении» и «Привилегированный режим при отмене проведения», поэтому не нужно создавать роли, дающие права на изменение регистров, подчиненных регистраторам. Исключение: документы, предназначенные для непосредственной корректировки записей регистров, могут проводиться с проверкой прав доступа, но в этом случае необходимо предусмотреть роли, дающие права на изменение регистров. #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/document-post-in-privileged-mode.md ### v8cs:dynamic-access-method-not-found - Метод в объекте не найден (dynamic-access-method-not-found) URL: https://v8std.ru/diagnostics/v8-code-style/dynamic-access-method-not-found/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/dynamic-access-method-not-found.md Source path: diagnostics/v8-code-style/dynamic-access-method-not-found.md Aliases: - v8cs:dynamic-access-method-not-found - #v8cs:dynamic-access-method-not-found - dynamic-access-method-not-found - edt dynamic-access-method-not-found - edt:dynamic-access-method-not-found Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/dynamic-access-method-not-found.md ID: v8cs:dynamic-access-method-not-found - Категория: `bsl` Система строгой типизации кода проверяет что динамически вызываемый метод существует в объекте #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/dynamic-access-method-not-found.md ### v8cs:empty-except-statement - Конструкция "Попытка...Исключение...КонецПопытки" не содержит кода в исключении (empty-except-statement) URL: https://v8std.ru/diagnostics/v8-code-style/empty-except-statement/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/empty-except-statement.md Source path: diagnostics/v8-code-style/empty-except-statement.md Aliases: v8cs:empty-except-statement, #v8cs:empty-except-statement, empty-except-statement, edt empty-except-statement, edt:empty-except-statement Related: standard:std499 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/empty-except-statement.md ID: v8cs:empty-except-statement - Категория: `bsl` Недопустимо перехватывать любые исключения, бесследно для системного администратора. Как правило, подобная конструкция скрывает реальную проблему, которую впоследствии невозможно диагностировать. #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/empty-except-statement.md ### v8cs:event-heandler-boolean-param - Использование булевого параметра обработчика события (event-heandler-boolean-param) URL: https://v8std.ru/diagnostics/v8-code-style/event-heandler-boolean-param/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/event-heandler-boolean-param.md Source path: diagnostics/v8-code-style/event-heandler-boolean-param.md Aliases: v8cs:event-heandler-boolean-param, #v8cs:event-heandler-boolean-param, event-heandler-boolean-param, edt event-heandler-boolean-param, edt:event-heandler-boolean-param Related: standard:std686 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/event-heandler-boolean-param.md ID: v8cs:event-heandler-boolean-param - Категория: `bsl` 1. В обработчиках событий модулей объектов, наборов записей, форм и т.п., содержащих параметр `Отказ` (`ПриЗаписи`, `ОбработкаПроверкиЗаполнения`, `ТоварыПередНачаломДобавления` и т.п.), не следует присваивать этому параметру значение `Ложь`. Это требование обусловлено тем, что, как правило, в коде обработчиков событий параметр `Отказ` может устанавливаться сразу в нескольких последовательных проверках (или в нескольких подписках на одно и то же событие). В таком случае к моменту выполнения очередной проверки параметр `Отказ` уже может заранее содержать значение `Истина`, и можно ошибочно сбросить его обратно в `Ложь`. Кроме того, при доработках конфигурации на внедрении число этих проверок может увеличиться. #### Стандарт - [#std686: Работа с параметром "Отказ" в обработчиках событий](https://v8std.ru/std/686/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/event-heandler-boolean-param.md ### v8cs:export-method-in-command-form-module - Ограничения на использование экспортных процедур и функций в модуле команд и форм (export-method-in-command-form-module) URL: https://v8std.ru/diagnostics/v8-code-style/export-method-in-command-form-module/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/export-method-in-command-form-module.md Source path: diagnostics/v8-code-style/export-method-in-command-form-module.md Aliases: - v8cs:export-method-in-command-form-module - #v8cs:export-method-in-command-form-module - export-method-in-command-form-module - edt export-method-in-command-form-module - edt:export-method-in-command-form-module Related: standard:std544 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/export-method-in-command-form-module.md ID: v8cs:export-method-in-command-form-module - Категория: `bsl` Не следует размещать экспортные процедуры и функции в модулях команд и форм. Для реализации экспортных процедур и функций рекомендуется использовать модули объектов, модули менеджеров объектов или общие модули. Так же, рекомендуется избегать обращения к методам и свойствам формы после ее открытия. Исключения из этого правила составляют экспортные процедуры-обработчики оповещений (ОписаниеОповещения.ИмяПроцедуры). #### Стандарт - [#std544: Ограничения на использование экспортных процедур и функций](https://v8std.ru/std/544/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/export-method-in-command-form-module.md ### v8cs:export-procedure-missing-comment - Отсутствует комментарий к экспортной процедуре (функции) (export-procedure-missing-comment) URL: https://v8std.ru/diagnostics/v8-code-style/export-procedure-missing-comment/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/export-procedure-missing-comment.md Source path: diagnostics/v8-code-style/export-procedure-missing-comment.md Aliases: - v8cs:export-procedure-missing-comment - #v8cs:export-procedure-missing-comment - export-procedure-missing-comment - edt export-procedure-missing-comment - edt:export-procedure-missing-comment Related: standard:std453 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/export-procedure-missing-comment.md ID: v8cs:export-procedure-missing-comment - Категория: `bsl` Описание **процедур и функций** рекомендуется выполнять в виде комментария к ним. Необходимость комментирования отдельных участков кода процедур и функций должна определяться разработчиком исходя из сложности и нестандартности конкретного участка кода. Обязательного комментирования требуют процедуры и функции входящие в **программный интерфейс модулей** - такие процедуры и функции предназначены для использования в других функциональных подсистемах (или в других приложениях), за которые могут отвечать другие разработчики, поэтому они должны быть хорошо документированы. #### Стандарт - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/export-procedure-missing-comment.md ### v8cs:extension-md-object-prefix - У имени объекта отсутствует префикс расширения (extension-md-object-prefix) URL: https://v8std.ru/diagnostics/v8-code-style/extension-md-object-prefix/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/extension-md-object-prefix.md Source path: diagnostics/v8-code-style/extension-md-object-prefix.md Aliases: v8cs:extension-md-object-prefix, #v8cs:extension-md-object-prefix, extension-md-object-prefix, edt extension-md-object-prefix, edt:extension-md-object-prefix Related: standard:std469 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/extension-md-object-prefix.md ID: v8cs:extension-md-object-prefix - Категория: `md` Все добавленные объекты (методы и объекты, отчеты, обработки и подсистемы, а также обработчики событий) расширения, а также имена собственных методов и переменных расширяющих модулей, должны иметь префикс, соответствующий префиксу самого расширения. #### Стандарт - [#std469: Правила создания общих модулей](https://v8std.ru/std/469/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/extension-md-object-prefix.md ### v8cs:extension-method-prefix - У метода отсутствует префикс расширения (extension-method-prefix) URL: https://v8std.ru/diagnostics/v8-code-style/extension-method-prefix/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/extension-method-prefix.md Source path: diagnostics/v8-code-style/extension-method-prefix.md Aliases: v8cs:extension-method-prefix, #v8cs:extension-method-prefix, extension-method-prefix, edt extension-method-prefix, edt:extension-method-prefix Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/extension-method-prefix.md ID: v8cs:extension-method-prefix - Категория: `bsl` Все добавленные объекты (методы и объекты, отчеты, обработки и подсистемы, а также обработчики событий) расширения, а также имена собственных методов и переменных расширяющих модулей, должны иметь префикс, соответствующий префиксу самого расширения. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/extension-method-prefix.md ### v8cs:extension-variable-prefix - У имени переменной отсутствует префикс расширения (extension-variable-prefix) URL: https://v8std.ru/diagnostics/v8-code-style/extension-variable-prefix/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/extension-variable-prefix.md Source path: diagnostics/v8-code-style/extension-variable-prefix.md Aliases: v8cs:extension-variable-prefix, #v8cs:extension-variable-prefix, extension-variable-prefix, edt extension-variable-prefix, edt:extension-variable-prefix Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/extension-variable-prefix.md ID: v8cs:extension-variable-prefix - Категория: `bsl` Все добавленные объекты (методы и объекты, отчеты, обработки и подсистемы, а также обработчики событий) расширения, а также имена собственных методов и переменных расширяющих модулей, должны иметь префикс, соответствующий префиксу самого расширения. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/extension-variable-prefix.md ### v8cs:form-commands-single-action-handler - У каждого действия команды должна быть назначена своя процедура-обработчик (form-commands-single-action-handler) URL: https://v8std.ru/diagnostics/v8-code-style/form-commands-single-action-handler/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-commands-single-action-handler.md Source path: diagnostics/v8-code-style/form-commands-single-action-handler.md Aliases: - v8cs:form-commands-single-action-handler - #v8cs:form-commands-single-action-handler - form-commands-single-action-handler - edt form-commands-single-action-handler - edt:form-commands-single-action-handler Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-commands-single-action-handler.md ID: v8cs:form-commands-single-action-handler - Категория: `form` У каждого действия команды должна быть назначена своя процедура-обработчик. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-commands-single-action-handler.md ### v8cs:form-dynamic-list-item-title - Пустой заголовок для колонок динамического списка (form-dynamic-list-item-title) URL: https://v8std.ru/diagnostics/v8-code-style/form-dynamic-list-item-title/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-dynamic-list-item-title.md Source path: diagnostics/v8-code-style/form-dynamic-list-item-title.md Aliases: v8cs:form-dynamic-list-item-title, #v8cs:form-dynamic-list-item-title, form-dynamic-list-item-title, edt form-dynamic-list-item-title, edt:form-dynamic-list-item-title Related: standard:std765 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-dynamic-list-item-title.md ID: v8cs:form-dynamic-list-item-title - Категория: `form` Следует задавать заголовок для колонок динамического списка, получающихся в запросе комбинацией других колонок или для которых задан свой псевдоним. Нельзя опираться на автоматически сгенерированный заголовок по имени/псевдониму. Примеры, когда заголовок колонок следует задавать в явном виде: В таком случае, когда поле создается в запросе и ему присваивается имя, то синоним не "подтягивается" автоматически из метаданных, т.к. не существует реквизита, связанного с этим полем. Инструментом редактирования текстов интерфейсов не находится заголовок для колонок в динамическом списке, которым задан псевдоним в запросе. Имя колонки динамического списка должно быть задано, даже если заголовок поля не выводится на форму, так как имена колонок выводятся пользователю при настройке полей формы (команда Еще - Изменить форму...). #### Стандарт - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-dynamic-list-item-title.md ### v8cs:form-item-visible-settings-by-roles - Использована ролевая настройка видимости (редактирования, использования) для элемента формы (form-item-visible-settings-by-roles) URL: https://v8std.ru/diagnostics/v8-code-style/form-item-visible-settings-by-roles/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-item-visible-settings-by-roles.md Source path: diagnostics/v8-code-style/form-item-visible-settings-by-roles.md Aliases: - v8cs:form-item-visible-settings-by-roles - #v8cs:form-item-visible-settings-by-roles - form-item-visible-settings-by-roles - edt form-item-visible-settings-by-roles - edt:form-item-visible-settings-by-roles Related: standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-item-visible-settings-by-roles.md ID: v8cs:form-item-visible-settings-by-roles - Категория: `form` В случае большого количества ролей в конфигурации (от нескольких десятков) не рекомендуется использовать ролевую настройку видимости в элементах форм (просмотр и редактирование реквизитов по ролям, пользовательскую видимость полей формы по ролям, использование команд по ролям). #### Стандарт - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-item-visible-settings-by-roles.md ### v8cs:form-items-single-event-handler - У каждого события должна быть назначена своя процедура-обработчик (form-items-single-event-handler) URL: https://v8std.ru/diagnostics/v8-code-style/form-items-single-event-handler/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-items-single-event-handler.md Source path: diagnostics/v8-code-style/form-items-single-event-handler.md Aliases: - v8cs:form-items-single-event-handler - #v8cs:form-items-single-event-handler - form-items-single-event-handler - edt form-items-single-event-handler - edt:form-items-single-event-handler Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-items-single-event-handler.md ID: v8cs:form-items-single-event-handler - Категория: `form` У каждого события должна быть назначена своя процедура-обработчик #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-items-single-event-handler.md ### v8cs:form-list-field-ref-not-added - Реквизит "Ссылка" динамического списка не выведен в таблицу на форме (form-list-field-ref-not-added) URL: https://v8std.ru/diagnostics/v8-code-style/form-list-field-ref-not-added/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-list-field-ref-not-added.md Source path: diagnostics/v8-code-style/form-list-field-ref-not-added.md Aliases: v8cs:form-list-field-ref-not-added, #v8cs:form-list-field-ref-not-added, form-list-field-ref-not-added, edt form-list-field-ref-not-added, edt:form-list-field-ref-not-added Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-list-field-ref-not-added.md ID: v8cs:form-list-field-ref-not-added - Категория: `form` С помощью команды **Еще - Изменить форму** пользователь может добавить отображение любых реквизитов объектов в динамическом списке. Для того чтобы пользователь смог воспользоваться этой возможностью, в динамических списках объектов ссылочных типов (справочников, документов и т.п.) рекомендуется добавлять в список поле **Ссылка**. #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-list-field-ref-not-added.md ### v8cs:form-list-ref-use-always-flag-disabled - У реквизита "Ссылка" динамического списка выключен признак "Использовать всегда" (form-list-ref-use-always-flag-disabled) URL: https://v8std.ru/diagnostics/v8-code-style/form-list-ref-use-always-flag-disabled/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-list-ref-use-always-flag-disabled.md Source path: diagnostics/v8-code-style/form-list-ref-use-always-flag-disabled.md Aliases: - v8cs:form-list-ref-use-always-flag-disabled - #v8cs:form-list-ref-use-always-flag-disabled - form-list-ref-use-always-flag-disabled - edt form-list-ref-use-always-flag-disabled - edt:form-list-ref-use-always-flag-disabled Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-list-ref-use-always-flag-disabled.md ID: v8cs:form-list-ref-use-always-flag-disabled - Категория: `form` Наличие реквизита **Ссылка** с признаком **"Использовать всегда"** является обязательным при разработке команд печати (подсистема "Печать" **Библиотеки стандартных подсистем**) для корректной работы этих команд. #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-list-ref-use-always-flag-disabled.md ### v8cs:form-list-ref-user-visibility-enabled - У поля "Ссылка" таблицы динамического списка не отключена пользовательская видимость (form-list-ref-user-visibility-enabled) URL: https://v8std.ru/diagnostics/v8-code-style/form-list-ref-user-visibility-enabled/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-list-ref-user-visibility-enabled.md Source path: diagnostics/v8-code-style/form-list-ref-user-visibility-enabled.md Aliases: - v8cs:form-list-ref-user-visibility-enabled - #v8cs:form-list-ref-user-visibility-enabled - form-list-ref-user-visibility-enabled - edt form-list-ref-user-visibility-enabled - edt:form-list-ref-user-visibility-enabled Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-list-ref-user-visibility-enabled.md ID: v8cs:form-list-ref-user-visibility-enabled - Категория: `form` С помощью команды **Еще - Изменить форму** пользователь может добавить отображение любых реквизитов объектов в динамическом списке. Для того чтобы пользователь смог воспользоваться этой возможностью, в динамических списках объектов ссылочных типов (справочников, документов и т.п.) рекомендуется добавлять в список поле ***Ссылка***, у которого отключать пользовательскую видимость. #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/form-list-ref-user-visibility-enabled.md ### v8cs:form-module-missing-pragma - Всегда использовать директивы компиляции в модуле формы (form-module-missing-pragma) URL: https://v8std.ru/diagnostics/v8-code-style/form-module-missing-pragma/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-module-missing-pragma.md Source path: diagnostics/v8-code-style/form-module-missing-pragma.md Aliases: v8cs:form-module-missing-pragma, #v8cs:form-module-missing-pragma, form-module-missing-pragma, edt form-module-missing-pragma, edt:form-module-missing-pragma Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-missing-pragma.md ID: v8cs:form-module-missing-pragma - Категория: `bsl` 1.1. Конфигурация должна использовать только штатные и документированные возможности платформы 1С:Предприятие. ... Платформа позволяет в модулях форм реализовывать процедуры без директив компиляции (&НаСервере и т.п.). Такие процедуры не работают в веб-клиенте и приводят к лишнему серверному вызову. #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-missing-pragma.md ### v8cs:form-module-pragma - Использование директив компиляции модуля формы (form-module-pragma) URL: https://v8std.ru/diagnostics/v8-code-style/form-module-pragma/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-module-pragma.md Source path: diagnostics/v8-code-style/form-module-pragma.md Aliases: v8cs:form-module-pragma, #v8cs:form-module-pragma, form-module-pragma, edt form-module-pragma, edt:form-module-pragma Related: standard:std439 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-pragma.md ID: v8cs:form-module-pragma - Категория: `bsl` Директивы компиляции следует применять только в коде модулей управляемых форм и в коде модулей команд. В остальных модулях рекомендуется применять инструкции препроцессора. В серверных или клиентских общих модулях контекст исполнения очевиден, поэтому смысла в директивах компиляции нет. В общих модулях с признаками клиент и сервер применение директив компиляции затрудняет понимание - какие же процедуры (функции) доступны в конечном итоге. #### Стандарт - [#std439: Использование директив компиляции и инструкций препроцессора](https://v8std.ru/std/439/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-module-pragma.md ### v8cs:form-self-reference - Использование устаревшего псевдонима (form-self-reference) URL: https://v8std.ru/diagnostics/v8-code-style/form-self-reference/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/form-self-reference.md Source path: diagnostics/v8-code-style/form-self-reference.md Aliases: v8cs:form-self-reference, #v8cs:form-self-reference, form-self-reference, edt form-self-reference, edt:form-self-reference Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-self-reference.md ID: v8cs:form-self-reference - Категория: `bsl` Следует использовать псевдоним "ЭтотОбъект" вместо устаревшего "ЭтаФорма" в модуле формы #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/form-self-reference.md ### v8cs:function-return-value-type - Функция возвращает типизированное значение (function-return-value-type) URL: https://v8std.ru/diagnostics/v8-code-style/function-return-value-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/function-return-value-type.md Source path: diagnostics/v8-code-style/function-return-value-type.md Aliases: v8cs:function-return-value-type, #v8cs:function-return-value-type, function-return-value-type, edt function-return-value-type, edt:function-return-value-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/function-return-value-type.md ID: v8cs:function-return-value-type - Категория: `bsl` Система строгой типизации кода проверяет что каждая функция возвращает типизированное значение #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/function-return-value-type.md ### v8cs:functional-option-privileged-get-mode - В функциональной опции не установлен флаг "Привилегированный режим при получении" (functional-option-privileged-get-mode) URL: https://v8std.ru/diagnostics/v8-code-style/functional-option-privileged-get-mode/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/functional-option-privileged-get-mode.md Source path: diagnostics/v8-code-style/functional-option-privileged-get-mode.md Aliases: - v8cs:functional-option-privileged-get-mode - #v8cs:functional-option-privileged-get-mode - functional-option-privileged-get-mode - edt functional-option-privileged-get-mode - edt:functional-option-privileged-get-mode Related: standard:std689 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/functional-option-privileged-get-mode.md ID: v8cs:functional-option-privileged-get-mode - Категория: `md` Во всех функциональных опциях должны быть выставлены флаги «Привилегированный режим при получении». Исключение: в конфигурации могут быть предусмотрены параметризированные ФО, для которых разработчик специально предусматривает различия в получаемых значениях пользователями с разными правами. Пример: Есть параметризованная ФО ИспользватьВалютуПриРасчетеСПерсоналом, которая параметризуется организацией. Если пользователь будет получать ее значение в контексте своих прав, то он не увидит поле «валюта» в документе, если у него нет ни одной организации, где применяется валютный учет. #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/functional-option-privileged-get-mode.md ### v8cs:input-field-list-choice-mode - В полях форм со списками выбора следует всегда устанавливать свойство РежимВыбораИзСписка в значение Истина (input-field-list-choice-mode) URL: https://v8std.ru/diagnostics/v8-code-style/input-field-list-choice-mode/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/input-field-list-choice-mode.md Source path: diagnostics/v8-code-style/input-field-list-choice-mode.md Aliases: v8cs:input-field-list-choice-mode, #v8cs:input-field-list-choice-mode, input-field-list-choice-mode, edt input-field-list-choice-mode, edt:input-field-list-choice-mode Related: standard:std765 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/input-field-list-choice-mode.md ID: v8cs:input-field-list-choice-mode - Категория: `form` В полях форм со списками выбора следует всегда устанавливать свойство **РежимВыбораИзСписка** в значение Истина. В этом случае, в поле будет корректно выводиться локализуемое представление, а не значение из списка выбора. #### Стандарт - [#std765: Элементы форм: требования по локализации](https://v8std.ru/std/765/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.form/markdown/ru/input-field-list-choice-mode.md ### v8cs:invocation-form-event-handler - Программный вызов обработчика события формы (invocation-form-event-handler) URL: https://v8std.ru/diagnostics/v8-code-style/invocation-form-event-handler/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/invocation-form-event-handler.md Source path: diagnostics/v8-code-style/invocation-form-event-handler.md Aliases: v8cs:invocation-form-event-handler, #v8cs:invocation-form-event-handler, invocation-form-event-handler, edt invocation-form-event-handler, edt:invocation-form-event-handler Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/invocation-form-event-handler.md ID: v8cs:invocation-form-event-handler - Категория: `bsl` У каждого события должна быть назначена своя процедура-обработчик. Если одинаковые действия должны выполняться при возникновении событий в разных элементах формы следует: - создать отдельную процедуру (функцию), выполняющую необходимые действия - для каждого элемента формы создать отдельный обработчик с именем, назначаемым по умолчанию - из каждого обработчика вызвать требуемую процедуру (функцию). #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/invocation-form-event-handler.md ### v8cs:invocation-parameter-type-intersect - Вызываемый тип пересекается с типом параметра (invocation-parameter-type-intersect) URL: https://v8std.ru/diagnostics/v8-code-style/invocation-parameter-type-intersect/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/invocation-parameter-type-intersect.md Source path: diagnostics/v8-code-style/invocation-parameter-type-intersect.md Aliases: - v8cs:invocation-parameter-type-intersect - #v8cs:invocation-parameter-type-intersect - invocation-parameter-type-intersect - edt invocation-parameter-type-intersect - edt:invocation-parameter-type-intersect Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/invocation-parameter-type-intersect.md ID: v8cs:invocation-parameter-type-intersect - Категория: `bsl` Система строгой типизации кода проверяет что тип вызываемого выражения пересекается с типом параметра вызываемого метода #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/invocation-parameter-type-intersect.md ### v8cs:lock-out-of-try - Вызов "Заблокировать()" находится вне попытки (lock-out-of-try) URL: https://v8std.ru/diagnostics/v8-code-style/lock-out-of-try/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/lock-out-of-try.md Source path: diagnostics/v8-code-style/lock-out-of-try.md Aliases: v8cs:lock-out-of-try, #v8cs:lock-out-of-try, lock-out-of-try, edt lock-out-of-try, edt:lock-out-of-try Related: standard:std499, standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/lock-out-of-try.md ID: v8cs:lock-out-of-try - Категория: `bsl` Правило проверяет наличие инициализации блокировки данных. В случае если найдено создание блокировки, проверяется вызов метода "Заблокировать()", при этом вызов должен быть в попытке. #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/lock-out-of-try.md ### v8cs:manager-module-named-self-reference - Избыточное обращение по собственному имени внутри модуля менеджера (manager-module-named-self-reference) URL: https://v8std.ru/diagnostics/v8-code-style/manager-module-named-self-reference/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/manager-module-named-self-reference.md Source path: diagnostics/v8-code-style/manager-module-named-self-reference.md Aliases: - v8cs:manager-module-named-self-reference - #v8cs:manager-module-named-self-reference - manager-module-named-self-reference - edt manager-module-named-self-reference - edt:manager-module-named-self-reference Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/manager-module-named-self-reference.md ID: v8cs:manager-module-named-self-reference - Категория: `bsl` Избыточное обращение по собственному имени внутри модуля менеджера (к методу, свойству или реквизиту) #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/manager-module-named-self-reference.md ### v8cs:md-list-object-presentation - Не заполнено ни представление объекта, ни представление списка (md-list-object-presentation) URL: https://v8std.ru/diagnostics/v8-code-style/md-list-object-presentation/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/md-list-object-presentation.md Source path: diagnostics/v8-code-style/md-list-object-presentation.md Aliases: v8cs:md-list-object-presentation, #v8cs:md-list-object-presentation, md-list-object-presentation, edt md-list-object-presentation, edt:md-list-object-presentation Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/md-list-object-presentation.md ID: v8cs:md-list-object-presentation - Категория: `md` Для каждого объекта метаданных (справочник, документ и т.д.) для свойства представления объекта и свойства представление списка проверяется наличие заполненного текста для одной из фич, для кода из основного языка конфигурации (свойство в корне конфигурации). ### Представление объекта (для регистра - представление записи) Задается название объекта в единственном числе, например, "Валюта". Название должно быть лаконичным и понятным. Например, вместо "Версия проверяемой конфигурации" нужно использовать "Версия". Представление объекта заполняется в случае, если синоним не может быть использован, как название объекта в единственном числе. ### Представление списка Задается название объектов во множественном числе, например, "Валюты". Кроме этого, в некоторых случаях может указываться название списка, если оно является самостоятельным термином, например, «Классификатор единиц измерения». Название должно быть лаконичным и понятным. Например, вместо "Общероссийский классификатор основных фондов" нужно использовать "Классификатор ОКОФ". Заполняется в случае, если синоним не может быть использован, как название списка объектов. #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/md-list-object-presentation.md ### v8cs:md-object-attribute-comment-incorrect-type - Реквизит «Комментарий» у документов (md-object-attribute-comment-incorrect-type) URL: https://v8std.ru/diagnostics/v8-code-style/md-object-attribute-comment-incorrect-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/md-object-attribute-comment-incorrect-type.md Source path: diagnostics/v8-code-style/md-object-attribute-comment-incorrect-type.md Aliases: - v8cs:md-object-attribute-comment-incorrect-type - #v8cs:md-object-attribute-comment-incorrect-type - md-object-attribute-comment-incorrect-type - edt md-object-attribute-comment-incorrect-type - edt:md-object-attribute-comment-incorrect-type Related: standard:std531 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/md-object-attribute-comment-incorrect-type.md ID: v8cs:md-object-attribute-comment-incorrect-type - Категория: `md` Для всех документов рекомендуется создавать реквизит Комментарий (строка неограниченной длины). В этом реквизите пользователи могут записывать по документу различные заметки служебного характера, которые не относятся к прикладной специфике документа (например, причина пометки на удаления и т.п.). Доступ к реквизиту для пользователей должен быть настроен также как и к самому документу (если документ доступен только для чтения, то и комментарий – только для чтения; если же есть право записи документа, то и значение реквизита также можно изменять). Свойство "Многострочный режим" у реквизита должно быть включено. быть включено. #### Стандарт - [#std531: Реквизит «Комментарий» у документов](https://v8std.ru/std/531/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/md-object-attribute-comment-incorrect-type.md ### v8cs:md-object-attribute-comment-not-exist - Документ не имеет реквизита "Комментарий" (md-object-attribute-comment-not-exist) URL: https://v8std.ru/diagnostics/v8-code-style/md-object-attribute-comment-not-exist/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/md-object-attribute-comment-not-exist.md Source path: diagnostics/v8-code-style/md-object-attribute-comment-not-exist.md Aliases: - v8cs:md-object-attribute-comment-not-exist - #v8cs:md-object-attribute-comment-not-exist - md-object-attribute-comment-not-exist - edt md-object-attribute-comment-not-exist - edt:md-object-attribute-comment-not-exist Related: standard:std531 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/md-object-attribute-comment-not-exist.md ID: v8cs:md-object-attribute-comment-not-exist - Категория: `md` Для всех документов рекомендуется создавать реквизит Комментарий (строка неограниченной длины). В этом реквизите пользователи могут записывать по документу различные заметки служебного характера, которые не относятся к прикладной специфике документа (например, причина пометки на удаления и т.п.). Доступ к реквизиту для пользователей должен быть настроен также как и к самому документу (если документ доступен только для чтения, то и комментарий – только для чтения; если же есть право записи документа, то и значение реквизита также можно изменять). #### Стандарт - [#std531: Реквизит «Комментарий» у документов](https://v8std.ru/std/531/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/md-object-attribute-comment-not-exist.md ### v8cs:md-standard-attribute-synonym-empty - Не задан синоним стандартного реквизита "Родитель" или "Владелец". (md-standard-attribute-synonym-empty) URL: https://v8std.ru/diagnostics/v8-code-style/md-standard-attribute-synonym-empty/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/md-standard-attribute-synonym-empty.md Source path: diagnostics/v8-code-style/md-standard-attribute-synonym-empty.md Aliases: - v8cs:md-standard-attribute-synonym-empty - #v8cs:md-standard-attribute-synonym-empty - md-standard-attribute-synonym-empty - edt md-standard-attribute-synonym-empty - edt:md-standard-attribute-synonym-empty Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/md-standard-attribute-synonym-empty.md ID: v8cs:md-standard-attribute-synonym-empty - Категория: `md` 1.5. При этом для стандартных реквизитов Родитель и Владелец, следует всегда указывать синонимы, отличные от синонимов по умолчанию. Например, в конфигурации имеется справочник Файлы со стандартным реквизитом Владелец типа СправочникСсылка.ПапкиФайлов. В этом случае неправильно * оставлять синоним стандартного реквизита Владелец по умолчанию: «Владелец»; правильно * вложить в синоним прикладной смысл: «Папка» или «Папка с файлом». #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/md-standard-attribute-synonym-empty.md ### v8cs:mdo-name-length - Длина имени объекта метаданных (mdo-name-length) URL: https://v8std.ru/diagnostics/v8-code-style/mdo-name-length/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/mdo-name-length.md Source path: diagnostics/v8-code-style/mdo-name-length.md Aliases: v8cs:mdo-name-length, #v8cs:mdo-name-length, mdo-name-length, edt mdo-name-length, edt:mdo-name-length Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-name-length.md ID: v8cs:mdo-name-length - Категория: `md` Длина имени объекта метаданного должна быть меньше чем 80 #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-name-length.md ### v8cs:mdo-ru-name-unallowed-letter - Проверка наличия буквы "ё" в имени, синониме или комментарии объекта метаданных (mdo-ru-name-unallowed-letter) URL: https://v8std.ru/diagnostics/v8-code-style/mdo-ru-name-unallowed-letter/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/mdo-ru-name-unallowed-letter.md Source path: diagnostics/v8-code-style/mdo-ru-name-unallowed-letter.md Aliases: v8cs:mdo-ru-name-unallowed-letter, #v8cs:mdo-ru-name-unallowed-letter, mdo-ru-name-unallowed-letter, edt mdo-ru-name-unallowed-letter, edt:mdo-ru-name-unallowed-letter Related: standard:std474 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-ru-name-unallowed-letter.md ID: v8cs:mdo-ru-name-unallowed-letter - Категория: `md` В именах, синонимах и комментариях объектов метаданных не допускается использовать букву "ё". #### Стандарт - [#std474: Имя, синоним, комментарий](https://v8std.ru/std/474/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-ru-name-unallowed-letter.md ### v8cs:mdo-scheduled-job-description - Задано наименование предопределенного регламентного задания (mdo-scheduled-job-description) URL: https://v8std.ru/diagnostics/v8-code-style/mdo-scheduled-job-description/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/mdo-scheduled-job-description.md Source path: diagnostics/v8-code-style/mdo-scheduled-job-description.md Aliases: v8cs:mdo-scheduled-job-description, #v8cs:mdo-scheduled-job-description, mdo-scheduled-job-description, edt mdo-scheduled-job-description, edt:mdo-scheduled-job-description Related: standard:std767 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-scheduled-job-description.md ID: v8cs:mdo-scheduled-job-description - Категория: `md` Предопределенным регламентным заданиям не следует задавать наименования в конфигураторе. Вместо этого, достаточно задать синоним предопределенного регламентного задания. #### Стандарт - [#std767: Регламентные задания: требования по локализации](https://v8std.ru/std/767/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/mdo-scheduled-job-description.md ### v8cs:method-isinrole-role-exist - Обращение к несуществующей роли (method-isinrole-role-exist) URL: https://v8std.ru/diagnostics/v8-code-style/method-isinrole-role-exist/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/method-isinrole-role-exist.md Source path: diagnostics/v8-code-style/method-isinrole-role-exist.md Aliases: v8cs:method-isinrole-role-exist, #v8cs:method-isinrole-role-exist, method-isinrole-role-exist, edt method-isinrole-role-exist, edt:method-isinrole-role-exist Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-isinrole-role-exist.md ID: v8cs:method-isinrole-role-exist - Категория: `bsl` В параметре функции "РольДоступна" должна быть указана существующая роль. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-isinrole-role-exist.md ### v8cs:method-optional-parameter-before-required - Необязательные параметры процедуры/функции расположены перед обязательными (method-optional-parameter-before-required) URL: https://v8std.ru/diagnostics/v8-code-style/method-optional-parameter-before-required/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/method-optional-parameter-before-required.md Source path: diagnostics/v8-code-style/method-optional-parameter-before-required.md Aliases: - v8cs:method-optional-parameter-before-required - #v8cs:method-optional-parameter-before-required - method-optional-parameter-before-required - edt method-optional-parameter-before-required - edt:method-optional-parameter-before-required Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-optional-parameter-before-required.md ID: v8cs:method-optional-parameter-before-required - Категория: `bsl` Необязательные параметры (параметры со значениями по умолчанию) должны располагаться после параметров без значений по умолчанию. #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-optional-parameter-before-required.md ### v8cs:method-param-value-type - Параметр метода имеет тип (method-param-value-type) URL: https://v8std.ru/diagnostics/v8-code-style/method-param-value-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/method-param-value-type.md Source path: diagnostics/v8-code-style/method-param-value-type.md Aliases: v8cs:method-param-value-type, #v8cs:method-param-value-type, method-param-value-type, edt method-param-value-type, edt:method-param-value-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-param-value-type.md ID: v8cs:method-param-value-type - Категория: `bsl` Система строгой типизации кода проверяет что каждый параметр метода имеет тип значения #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-param-value-type.md ### v8cs:method-too-many-params - Метод содержит слишком много параметров (method-too-many-params) URL: https://v8std.ru/diagnostics/v8-code-style/method-too-many-params/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/method-too-many-params.md Source path: diagnostics/v8-code-style/method-too-many-params.md Aliases: v8cs:method-too-many-params, #v8cs:method-too-many-params, method-too-many-params, edt method-too-many-params, edt:method-too-many-params Related: standard:std640 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-too-many-params.md ID: v8cs:method-too-many-params - Категория: `bsl` Не рекомендуется объявлять в функциях много параметров (нужно ориентироваться на количество не более семи параметров), при этом не должно быть много параметров со значениями по умолчанию (нужно ориентироваться на количество не более трех таких параметров). В противном случае, читаемость вызывающего кода сильно снижается. Например, можно легко ошибиться в количестве запятых при передаче необязательных параметров. #### Стандарт - [#std640: Параметры процедур и функций](https://v8std.ru/std/640/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/method-too-many-params.md ### v8cs:missing-temporary-file-deletion - Отсутствует удаление временного файла после использования. (missing-temporary-file-deletion) URL: https://v8std.ru/diagnostics/v8-code-style/missing-temporary-file-deletion/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/missing-temporary-file-deletion.md Source path: diagnostics/v8-code-style/missing-temporary-file-deletion.md Aliases: - v8cs:missing-temporary-file-deletion - #v8cs:missing-temporary-file-deletion - missing-temporary-file-deletion - edt missing-temporary-file-deletion - edt:missing-temporary-file-deletion Related: standard:std542 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/missing-temporary-file-deletion.md ID: v8cs:missing-temporary-file-deletion - Категория: `bsl` После окончания работы с временным файлом или каталогом, его необходимо удалить самостоятельно. Нельзя рассчитывать на автоматическое удаление файлов и каталогов при следующем запуске платформы, это может привести к исчерпанию свободного места в каталоге временных файлов. #### Стандарт - [#std542: Доступ к файловой системе из кода конфигурации](https://v8std.ru/std/542/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/missing-temporary-file-deletion.md ### v8cs:module-accessibility-at-client - Метод или переменная доступны НаКлиенте (module-accessibility-at-client) URL: https://v8std.ru/diagnostics/v8-code-style/module-accessibility-at-client/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-accessibility-at-client.md Source path: diagnostics/v8-code-style/module-accessibility-at-client.md Aliases: v8cs:module-accessibility-at-client, #v8cs:module-accessibility-at-client, module-accessibility-at-client, edt module-accessibility-at-client, edt:module-accessibility-at-client Related: standard:std680, standard:std746 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-accessibility-at-client.md ID: v8cs:module-accessibility-at-client - Категория: `bsl` Метод или переменная доступны НаКлиенте в модулях менеджера или объекта #### Стандарт - [#std680: Поддержка толстого клиента, управляемое приложение, клиент-сервер](https://v8std.ru/std/680/) - [#std746: Обработчики событий ОбработкаПолученияПредставления и ОбработкаПолученияПолейПредставления](https://v8std.ru/std/746/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-accessibility-at-client.md ### v8cs:module-attachable-event-handler-name - Имя подключаемого обработчка события (module-attachable-event-handler-name) URL: https://v8std.ru/diagnostics/v8-code-style/module-attachable-event-handler-name/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-attachable-event-handler-name.md Source path: diagnostics/v8-code-style/module-attachable-event-handler-name.md Aliases: - v8cs:module-attachable-event-handler-name - #v8cs:module-attachable-event-handler-name - module-attachable-event-handler-name - edt module-attachable-event-handler-name - edt:module-attachable-event-handler-name Related: standard:std492 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-attachable-event-handler-name.md ID: v8cs:module-attachable-event-handler-name - Категория: `bsl` Имя программно добавленного обработчика события должно соответствать шаблону: префикс **Подключаемый_** #### Стандарт - [#std492: Обработчики событий модуля формы, подключаемые из кода](https://v8std.ru/std/492/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-attachable-event-handler-name.md ### v8cs:module-consecutive-blank-lines - Проверка максимального количства пустых строк (module-consecutive-blank-lines) URL: https://v8std.ru/diagnostics/v8-code-style/module-consecutive-blank-lines/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-consecutive-blank-lines.md Source path: diagnostics/v8-code-style/module-consecutive-blank-lines.md Aliases: v8cs:module-consecutive-blank-lines, #v8cs:module-consecutive-blank-lines, module-consecutive-blank-lines, edt module-consecutive-blank-lines, edt:module-consecutive-blank-lines Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-consecutive-blank-lines.md ID: v8cs:module-consecutive-blank-lines - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-consecutive-blank-lines.md ### v8cs:module-empty-method - Проверка пустых методов (module-empty-method) URL: https://v8std.ru/diagnostics/v8-code-style/module-empty-method/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-empty-method.md Source path: diagnostics/v8-code-style/module-empty-method.md Aliases: v8cs:module-empty-method, #v8cs:module-empty-method, module-empty-method, edt module-empty-method, edt:module-empty-method Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-empty-method.md ID: v8cs:module-empty-method - Категория: `bsl` Проверка модуля на наличие пустых методов #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-empty-method.md ### v8cs:module-region-empty - Область пустая (module-region-empty) URL: https://v8std.ru/diagnostics/v8-code-style/module-region-empty/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-region-empty.md Source path: diagnostics/v8-code-style/module-region-empty.md Aliases: v8cs:module-region-empty, #v8cs:module-region-empty, module-region-empty, edt module-region-empty, edt:module-region-empty Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-region-empty.md ID: v8cs:module-region-empty - Категория: `bsl` Проверяет что область модуля пустая #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-region-empty.md ### v8cs:module-self-reference - Избыточное использование псевдонима "ЭтотОбъект" (module-self-reference) URL: https://v8std.ru/diagnostics/v8-code-style/module-self-reference/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-self-reference.md Source path: diagnostics/v8-code-style/module-self-reference.md Aliases: v8cs:module-self-reference, #v8cs:module-self-reference, module-self-reference, edt module-self-reference, edt:module-self-reference Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-self-reference.md ID: v8cs:module-self-reference - Категория: `bsl` Избыточное обращение внутри модуля через псевдоним "ЭтотОбъект" (к методу, свойству или реквизиту). Проверяются общие модули, модули объектов, наборов записей, модули менеджеров значений и модули форм. Проверку модулей объектов, наборов записей и менеджеров значений можно отключить через параметр `Проверять модули объектов (наборов записей, менеджеров значений)`. Для модулей форм проверяется только обращение к методам и существующим свойствам (в случае если установлен параметр `Проверять только существовующие свойства в форме`, иначе проверяются все случаи). #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-self-reference.md ### v8cs:module-structure-event-regions - Раздел «Обработчики событий» содержит только методы являющиеся обработчиками событий (module-structure-event-regions) URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-event-regions/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-event-regions.md Source path: diagnostics/v8-code-style/module-structure-event-regions.md Aliases: v8cs:module-structure-event-regions, #v8cs:module-structure-event-regions, module-structure-event-regions, edt module-structure-event-regions, edt:module-structure-event-regions Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-event-regions.md ID: v8cs:module-structure-event-regions - Категория: `bsl` Проверяет регион обработчиков событий на методов относящихся только к обработчикам #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-event-regions.md ### v8cs:module-structure-form-event-regions - Проверяет регион обработчиков событий формы (module-structure-form-event-regions) URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-form-event-regions/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-form-event-regions.md Source path: diagnostics/v8-code-style/module-structure-form-event-regions.md Aliases: - v8cs:module-structure-form-event-regions - #v8cs:module-structure-form-event-regions - module-structure-form-event-regions - edt module-structure-form-event-regions - edt:module-structure-form-event-regions Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-form-event-regions.md ID: v8cs:module-structure-form-event-regions - Категория: `bsl` Раздел «Обработчики событий формы» содержит процедуры-обработчики событий формы: ПриСозданииНаСервере, ПриОткрытии и т.п. Раздел «Обработчики событий элементов шапки формы» содержит процедуры-обработчики элементов, расположенных в основной части формы (все, что не связано с таблицами на форме). В разделах «Обработчики событий элементов таблицы формы » размещаются процедуры-обработчики таблиц формы и элементов таблиц. Для процедур-обработчиков каждой таблицы должен быть создан свой раздел. Раздел «Обработчики команд формы» содержит процедуры-обработчики команд формы (имена которых задаются в свойстве Действие команд формы). #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-form-event-regions.md ### v8cs:module-structure-init-code-in-region - Раздел инициализации содержит код инициализации (module-structure-init-code-in-region) URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-init-code-in-region/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-init-code-in-region.md Source path: diagnostics/v8-code-style/module-structure-init-code-in-region.md Aliases: - v8cs:module-structure-init-code-in-region - #v8cs:module-structure-init-code-in-region - module-structure-init-code-in-region - edt module-structure-init-code-in-region - edt:module-structure-init-code-in-region Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-init-code-in-region.md ID: v8cs:module-structure-init-code-in-region - Категория: `bsl` Раздел инициализации содержит операторы, инициализирующие переменные модуля или объект (форму). #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-init-code-in-region.md ### v8cs:module-structure-method-in-regions - Проверяет что метод находится в области (module-structure-method-in-regions) URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-method-in-regions/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-method-in-regions.md Source path: diagnostics/v8-code-style/module-structure-method-in-regions.md Aliases: - v8cs:module-structure-method-in-regions - #v8cs:module-structure-method-in-regions - module-structure-method-in-regions - edt module-structure-method-in-regions - edt:module-structure-method-in-regions Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-method-in-regions.md ID: v8cs:module-structure-method-in-regions - Категория: `bsl` Метод находится в области Раздел «Программный интерфейс» содержит экспортные процедуры и функции, предназначенные для использования другими объектами конфигурации или другими программами (например, через внешнее соединение). Раздел «Служебный программный интерфейс» предназначен для модулей, которые являются частью некоторой функциональной подсистемы. В нем должны быть размещены экспортные процедуры и функции, которые допустимо вызывать только из других функциональных подсистем этой же библиотеки. Раздел «Служебные процедуры и функции» содержит процедуры и функции, составляющие внутреннюю реализацию общего модуля. В тех случаях, когда общий модуль является частью некоторой функциональной подсистемы, включающей в себя несколько объектов метаданных, в этом разделе также могут быть размещены служебные экспортные процедуры и функции, предназначенные только для вызова из других объектов данной подсистемы. #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-method-in-regions.md ### v8cs:module-structure-top-region - Стандартные области структуры модуля верхнего уровня (module-structure-top-region) URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-top-region/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-top-region.md Source path: diagnostics/v8-code-style/module-structure-top-region.md Aliases: v8cs:module-structure-top-region, #v8cs:module-structure-top-region, module-structure-top-region, edt module-structure-top-region, edt:module-structure-top-region Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-top-region.md ID: v8cs:module-structure-top-region - Категория: `bsl` В программном модуле (общие модули, модули объектов, модули менеджеров объектов, модули форм, команд и т.п.) в общем случае могут присутствовать следующие разделы в приведенной ниже последовательности: - заголовок модуля - раздел описания переменных - экспортные процедуры и функции модуля, составляющие его программный интерфейс - обработчики событий объекта (формы) - служебные процедуры и функции модуля - раздел инициализации Некоторые разделы могут присутствовать только в модулях определенного вида. Например, обработчики событий элементов форм могут присутствовать только в модулях форм, а раздел описания переменных и раздел инициализации не могут быть определены в неглобальных общих модулях, модулях менеджеров объектов, наборов записей, значений констант и модуле сеанса. Требование о разделении кода модуля на разделы призвано повысить читаемость кода и упростить внесение изменений в код разными авторами (разработчиками) как при коллективной разработке, так и при доработке прикладных решений на конкретных внедрениях. #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-top-region.md ### v8cs:module-structure-var-in-region - Раздел описания переменных (module-structure-var-in-region) URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-var-in-region/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-structure-var-in-region.md Source path: diagnostics/v8-code-style/module-structure-var-in-region.md Aliases: v8cs:module-structure-var-in-region, #v8cs:module-structure-var-in-region, module-structure-var-in-region, edt module-structure-var-in-region, edt:module-structure-var-in-region Related: standard:std455 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-var-in-region.md ID: v8cs:module-structure-var-in-region - Категория: `bsl` Раздел описания переменных. Имена переменных назначаются согласно общим правилам образования имен переменных, а их использование описывается в статье Использование глобальных переменных в программных модулях. Все переменные модуля должны быть снабжены комментарием, достаточным для понимания их назначения. Комментарий рекомендуется размещать в той же строке, где объявляется переменная. #### Стандарт - [#std455: Структура модуля](https://v8std.ru/std/455/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-structure-var-in-region.md ### v8cs:module-undefined-function - Функция не определена (module-undefined-function) URL: https://v8std.ru/diagnostics/v8-code-style/module-undefined-function/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-undefined-function.md Source path: diagnostics/v8-code-style/module-undefined-function.md Aliases: v8cs:module-undefined-function, #v8cs:module-undefined-function, module-undefined-function, edt module-undefined-function, edt:module-undefined-function Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-undefined-function.md ID: v8cs:module-undefined-function - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-undefined-function.md ### v8cs:module-undefined-method - Метод не определен (module-undefined-method) URL: https://v8std.ru/diagnostics/v8-code-style/module-undefined-method/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-undefined-method.md Source path: diagnostics/v8-code-style/module-undefined-method.md Aliases: v8cs:module-undefined-method, #v8cs:module-undefined-method, module-undefined-method, edt module-undefined-method, edt:module-undefined-method Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-undefined-method.md ID: v8cs:module-undefined-method - Категория: `bsl` Функция или процедура не определена #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-undefined-method.md ### v8cs:module-undefined-variable - Переменная не определена (module-undefined-variable) URL: https://v8std.ru/diagnostics/v8-code-style/module-undefined-variable/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-undefined-variable.md Source path: diagnostics/v8-code-style/module-undefined-variable.md Aliases: v8cs:module-undefined-variable, #v8cs:module-undefined-variable, module-undefined-variable, edt module-undefined-variable, edt:module-undefined-variable Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-undefined-variable.md ID: v8cs:module-undefined-variable - Категория: `bsl` ## Неправильно #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-undefined-variable.md ### v8cs:module-unused-local-variable - Проверка неиспользуемых локальных переменных (module-unused-local-variable) URL: https://v8std.ru/diagnostics/v8-code-style/module-unused-local-variable/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-unused-local-variable.md Source path: diagnostics/v8-code-style/module-unused-local-variable.md Aliases: v8cs:module-unused-local-variable, #v8cs:module-unused-local-variable, module-unused-local-variable, edt module-unused-local-variable, edt:module-unused-local-variable Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-unused-local-variable.md ID: v8cs:module-unused-local-variable - Категория: `bsl` Проверка модуля на наличие неиспользуемых локальных переменных #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-unused-local-variable.md ### v8cs:module-unused-method - Проверка неиспользуемых методов (module-unused-method) URL: https://v8std.ru/diagnostics/v8-code-style/module-unused-method/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/module-unused-method.md Source path: diagnostics/v8-code-style/module-unused-method.md Aliases: v8cs:module-unused-method, #v8cs:module-unused-method, module-unused-method, edt module-unused-method, edt:module-unused-method Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-unused-method.md ID: v8cs:module-unused-method - Категория: `bsl` Проверка модуля на наличие неиспользуемых методов #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/module-unused-method.md ### v8cs:new-color - Использование конструкции "Новый Цвет" (new-color) URL: https://v8std.ru/diagnostics/v8-code-style/new-color/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/new-color.md Source path: diagnostics/v8-code-style/new-color.md Aliases: v8cs:new-color, #v8cs:new-color, new-color, edt new-color, edt:new-color Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/new-color.md ID: v8cs:new-color - Категория: `bsl` Для изменения оформления следует использовать элементы стиля, а не задавать конкретные значения непосредственно в элементах управления. #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/new-color.md ### v8cs:new-font - Использование конструкции "Новый Шрифт" (new-font) URL: https://v8std.ru/diagnostics/v8-code-style/new-font/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/new-font.md Source path: diagnostics/v8-code-style/new-font.md Aliases: v8cs:new-font, #v8cs:new-font, new-font, edt new-font, edt:new-font Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/new-font.md ID: v8cs:new-font - Категория: `bsl` Для изменения оформления следует использовать элементы стиля, а не задавать конкретные значения непосредственно в элементах управления. #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/new-font.md ### v8cs:notify-description-to-server-procedure - Описание оповещения на серверную процедуру (notify-description-to-server-procedure) URL: https://v8std.ru/diagnostics/v8-code-style/notify-description-to-server-procedure/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/notify-description-to-server-procedure.md Source path: diagnostics/v8-code-style/notify-description-to-server-procedure.md Aliases: - v8cs:notify-description-to-server-procedure - #v8cs:notify-description-to-server-procedure - notify-description-to-server-procedure - edt notify-description-to-server-procedure - edt:notify-description-to-server-procedure Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/notify-description-to-server-procedure.md ID: v8cs:notify-description-to-server-procedure - Категория: `bsl` В качестве параметра обработчика оповещения указана серверная процедура. Такой вызов оповещения не поддерживается в веб-клиенте. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/notify-description-to-server-procedure.md ### v8cs:object-module-export-variable - Использование переменных в программных модулях (object-module-export-variable) URL: https://v8std.ru/diagnostics/v8-code-style/object-module-export-variable/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/object-module-export-variable.md Source path: diagnostics/v8-code-style/object-module-export-variable.md Aliases: v8cs:object-module-export-variable, #v8cs:object-module-export-variable, object-module-export-variable, edt object-module-export-variable, edt:object-module-export-variable Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/object-module-export-variable.md ID: v8cs:object-module-export-variable - Категория: `bsl` В большинстве случаев, вместо переменных программных модулей следует использовать более подходящие средства разработки платформы 1С:Предприятие. Поскольку область видимости (использования) таких переменных сложно контролировать, то они зачастую становятся источником трудновоспроизводимых ошибок. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/object-module-export-variable.md ### v8cs:optional-form-parameter-access - Обращение к опциональному параметру формы (optional-form-parameter-access) URL: https://v8std.ru/diagnostics/v8-code-style/optional-form-parameter-access/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/optional-form-parameter-access.md Source path: diagnostics/v8-code-style/optional-form-parameter-access.md Aliases: v8cs:optional-form-parameter-access, #v8cs:optional-form-parameter-access, optional-form-parameter-access, edt optional-form-parameter-access, edt:optional-form-parameter-access Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/optional-form-parameter-access.md ID: v8cs:optional-form-parameter-access - Категория: `bsl` Параметры формы следует объявлять явно на закладке Параметры редактора формы. В таком случае в коде обработчика ПриСозданииНаСервере не требуется проверять наличие свойств у структуры Параметры, а сам состав параметров формы явно задекларирован (поэтому их не требуется восстанавливать, изучая весь код обработчика ПриСозданииНаСервере). #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/optional-form-parameter-access.md ### v8cs:property-return-type - Свойство объекта имеет тип возвращаемого значения (property-return-type) URL: https://v8std.ru/diagnostics/v8-code-style/property-return-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/property-return-type.md Source path: diagnostics/v8-code-style/property-return-type.md Aliases: v8cs:property-return-type, #v8cs:property-return-type, property-return-type, edt property-return-type, edt:property-return-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/property-return-type.md ID: v8cs:property-return-type - Категория: `bsl` Система строгой типизации кода проверяет что динамическое свойство объекта имеет тип возвращаемого значения #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/property-return-type.md ### v8cs:public-method-caching - Проверка кэширования программного интерфейса (public-method-caching) URL: https://v8std.ru/diagnostics/v8-code-style/public-method-caching/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/public-method-caching.md Source path: diagnostics/v8-code-style/public-method-caching.md Aliases: v8cs:public-method-caching, #v8cs:public-method-caching, public-method-caching, edt public-method-caching, edt:public-method-caching Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/public-method-caching.md ID: v8cs:public-method-caching - Категория: `bsl` Не следует создавать программный интерфейс в модулях с повторным использованием возвращаемых значений. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/public-method-caching.md ### v8cs:ql-camel-case-string-literal - Строковый литерал в запросе содержит не КемелКейс контент (ql-camel-case-string-literal) URL: https://v8std.ru/diagnostics/v8-code-style/ql-camel-case-string-literal/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/ql-camel-case-string-literal.md Source path: diagnostics/v8-code-style/ql-camel-case-string-literal.md Aliases: v8cs:ql-camel-case-string-literal, #v8cs:ql-camel-case-string-literal, ql-camel-case-string-literal, edt ql-camel-case-string-literal, edt:ql-camel-case-string-literal Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-camel-case-string-literal.md ID: v8cs:ql-camel-case-string-literal - Категория: `ql` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-camel-case-string-literal.md ### v8cs:ql-cast-to-max-number - Выражение к максимальному числу в запросе (ql-cast-to-max-number) URL: https://v8std.ru/diagnostics/v8-code-style/ql-cast-to-max-number/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/ql-cast-to-max-number.md Source path: diagnostics/v8-code-style/ql-cast-to-max-number.md Aliases: v8cs:ql-cast-to-max-number, #v8cs:ql-cast-to-max-number, ql-cast-to-max-number, edt ql-cast-to-max-number, edt:ql-cast-to-max-number Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-cast-to-max-number.md ID: v8cs:ql-cast-to-max-number - Категория: `ql` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-cast-to-max-number.md ### v8cs:ql-constants-in-binary-operation - В запросе в бинарной операции используются константные значения или параметры. (ql-constants-in-binary-operation) URL: https://v8std.ru/diagnostics/v8-code-style/ql-constants-in-binary-operation/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/ql-constants-in-binary-operation.md Source path: diagnostics/v8-code-style/ql-constants-in-binary-operation.md Aliases: - v8cs:ql-constants-in-binary-operation - #v8cs:ql-constants-in-binary-operation - ql-constants-in-binary-operation - edt ql-constants-in-binary-operation - edt:ql-constants-in-binary-operation Related: standard:std658, standard:std726 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-constants-in-binary-operation.md ID: v8cs:ql-constants-in-binary-operation - Категория: `ql` Запрещается формировать строку шаблона при помощи вычислений, использовать конкатенацию строк средствами языка запросов. Данное требование продиктовано необходимостью переносимости прикладных решений на различные СУБД. #### Стандарт - [#std658: Эффективные условия запросов](https://v8std.ru/std/658/) - [#std726: Особенности использования в запросах оператора ПОДОБНО](https://v8std.ru/std/726/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-constants-in-binary-operation.md ### v8cs:ql-join-to-sub-query - Соединение запроса с подзапросом (ql-join-to-sub-query) URL: https://v8std.ru/diagnostics/v8-code-style/ql-join-to-sub-query/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/ql-join-to-sub-query.md Source path: diagnostics/v8-code-style/ql-join-to-sub-query.md Aliases: v8cs:ql-join-to-sub-query, #v8cs:ql-join-to-sub-query, ql-join-to-sub-query, edt ql-join-to-sub-query, edt:ql-join-to-sub-query Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-join-to-sub-query.md ID: v8cs:ql-join-to-sub-query - Категория: `ql` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-join-to-sub-query.md ### v8cs:ql-like-expression-with-field - В качестве правого операнда операции сравнения "ПОДОБНО" указано поле таблицы. (ql-like-expression-with-field) URL: https://v8std.ru/diagnostics/v8-code-style/ql-like-expression-with-field/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/ql-like-expression-with-field.md Source path: diagnostics/v8-code-style/ql-like-expression-with-field.md Aliases: v8cs:ql-like-expression-with-field, #v8cs:ql-like-expression-with-field, ql-like-expression-with-field, edt ql-like-expression-with-field, edt:ql-like-expression-with-field Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-like-expression-with-field.md ID: v8cs:ql-like-expression-with-field - Категория: `ql` Правым операндом операции сравнения ПОДОБНО (LIKE) и СПЕЦСИМВОЛ (ESCAPE) может быть только литерал (параметр) или выражение над литералами. Шаблонными символами являются только «_» – любой символ и «%» – последовательность любых символов. #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-like-expression-with-field.md ### v8cs:ql-temp-table-index - Временная таблица должна содержать индексы (ql-temp-table-index) URL: https://v8std.ru/diagnostics/v8-code-style/ql-temp-table-index/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/ql-temp-table-index.md Source path: diagnostics/v8-code-style/ql-temp-table-index.md Aliases: v8cs:ql-temp-table-index, #v8cs:ql-temp-table-index, ql-temp-table-index, edt ql-temp-table-index, edt:ql-temp-table-index Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-temp-table-index.md ID: v8cs:ql-temp-table-index - Категория: `ql` 1. Индекс следует строить если: 1.1 Большая временная таблица участвует в соединении (не важно, с какой стороны). В индекс следует добавлять поля, участвующие в условии ПО. 1.2 Обращение к временной таблице выполняется в подзапросе конструкции логического оператора В (...). В индекс следует добавлять поля временной таблицы из списка выбора, соответствующие перечисленным с левой стороны логического оператора В (...). 2. Маленькие временные таблицы индексировать не нужно (менее 1000 записей). #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-temp-table-index.md ### v8cs:ql-using-for-update - Запрос содержит конструкцию "ДЛЯ ИЗМЕНЕНИЯ" (ql-using-for-update) URL: https://v8std.ru/diagnostics/v8-code-style/ql-using-for-update/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/ql-using-for-update.md Source path: diagnostics/v8-code-style/ql-using-for-update.md Aliases: v8cs:ql-using-for-update, #v8cs:ql-using-for-update, ql-using-for-update, edt ql-using-for-update, edt:ql-using-for-update Related: standard:std460 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-using-for-update.md ID: v8cs:ql-using-for-update - Категория: `ql` Конструкция ДЛЯ ИЗМЕНЕНИЯ позволяет заблаговременно заблокировать некоторые данные (которые могут читаться транзакцией другого соединения) уже при считывании, чтобы исключить взаимные блокировки при записи. Однако, при использовании в конфигурации управляемого режима блокировок, данная конструкция игнорируется и следовательно, не имеет смысла. #### Стандарт - [#std460: Использование управляемого режима блокировки](https://v8std.ru/std/460/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-using-for-update.md ### v8cs:ql-virtual-table-filters - Отбор виртуальной таблицы должен быть в параметрах (ql-virtual-table-filters) URL: https://v8std.ru/diagnostics/v8-code-style/ql-virtual-table-filters/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/ql-virtual-table-filters.md Source path: diagnostics/v8-code-style/ql-virtual-table-filters.md Aliases: v8cs:ql-virtual-table-filters, #v8cs:ql-virtual-table-filters, ql-virtual-table-filters, edt ql-virtual-table-filters, edt:ql-virtual-table-filters Related: standard:std657 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-virtual-table-filters.md ID: v8cs:ql-virtual-table-filters - Категория: `ql` При использовании виртуальных таблиц в запросах, следует передавать в параметры таблиц все условия, относящиеся к данной виртуальной таблице. Не рекомендуется обращаться к виртуальным таблицам при помощи условий в секции ГДЕ и т.п. Такой запрос будет возвращать правильный (с точки зрения функциональности) результат, но СУБД будет намного сложнее выбрать оптимальный план для его выполнения. В некоторых случаях это может привести к ошибкам оптимизатора СУБД и значительному замедлению работы запроса. #### Стандарт - [#std657: Обращения к виртуальным таблицам](https://v8std.ru/std/657/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.ql/markdown/ru/ql-virtual-table-filters.md ### v8cs:query-in-loop - Запрос в цикле (query-in-loop) URL: https://v8std.ru/diagnostics/v8-code-style/query-in-loop/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/query-in-loop.md Source path: diagnostics/v8-code-style/query-in-loop.md Aliases: v8cs:query-in-loop, #v8cs:query-in-loop, query-in-loop, edt query-in-loop, edt:query-in-loop Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/query-in-loop.md ID: v8cs:query-in-loop - Категория: `bsl` Рекомендуется получать все необходимые однотипные данные одним запросом, вместо выполнения серии запросов. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/query-in-loop.md ### v8cs:reading-attribute-from-database - Чтение отдельного реквизита объекта из базы данных (reading-attribute-from-database) URL: https://v8std.ru/diagnostics/v8-code-style/reading-attribute-from-database/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/reading-attribute-from-database.md Source path: diagnostics/v8-code-style/reading-attribute-from-database.md Aliases: - v8cs:reading-attribute-from-database - #v8cs:reading-attribute-from-database - reading-attribute-from-database - edt reading-attribute-from-database - edt:reading-attribute-from-database Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/reading-attribute-from-database.md ID: v8cs:reading-attribute-from-database - Категория: `bsl` При чтении отдельных реквизитов объекта из базы данных следует иметь в виду, что вызов метода ПолучитьОбъект или обращение к реквизитам объекта через точку от ссылки приводит к загрузке объекта из базы целиком, вместе с его табличными частями. Поэтому для чтения значений отдельных реквизитов из базы данных следует использовать запрос. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/reading-attribute-from-database.md ### v8cs:redundant-export-method - Тексты модулей конфигурации не должны содержать неиспользуемые экспортные процедуры и функции. (redundant-export-method) URL: https://v8std.ru/diagnostics/v8-code-style/redundant-export-method/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/redundant-export-method.md Source path: diagnostics/v8-code-style/redundant-export-method.md Aliases: v8cs:redundant-export-method, #v8cs:redundant-export-method, redundant-export-method, edt redundant-export-method, edt:redundant-export-method Related: standard:std467 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/redundant-export-method.md ID: v8cs:redundant-export-method - Категория: `bsl` Исключением являются экспортные методы, расположенные в области "ПрограммныйИнтерфейс", т.к. эти методы часто могут использоваться другими конфигурациями (библиотеками). Проверка выполняет поиск всех ссылок на метод, поэтому может выполняться длительное время. #### Стандарт - [#std467: Общие требования к конфигурации](https://v8std.ru/std/467/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/redundant-export-method.md ### v8cs:register-resource-precision - Длина ресурса регистра накопления или бухгалтерии (register-resource-precision) URL: https://v8std.ru/diagnostics/v8-code-style/register-resource-precision/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/register-resource-precision.md Source path: diagnostics/v8-code-style/register-resource-precision.md Aliases: v8cs:register-resource-precision, #v8cs:register-resource-precision, register-resource-precision, edt register-resource-precision, edt:register-resource-precision Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/register-resource-precision.md ID: v8cs:register-resource-precision - Категория: `md` Длина ресурса регистра накопления или бухгалтерии должна быть не больше 25 знаков #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/register-resource-precision.md ### v8cs:right-active-users - Право установлено: Активные пользователи (right-active-users) URL: https://v8std.ru/diagnostics/v8-code-style/right-active-users/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-active-users.md Source path: diagnostics/v8-code-style/right-active-users.md Aliases: v8cs:right-active-users, #v8cs:right-active-users, right-active-users, edt right-active-users, edt:right-active-users Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-active-users.md ID: v8cs:right-active-users - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-active-users.md ### v8cs:right-administration - Право установлено: Администрирование (right-administration) URL: https://v8std.ru/diagnostics/v8-code-style/right-administration/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-administration.md Source path: diagnostics/v8-code-style/right-administration.md Aliases: v8cs:right-administration, #v8cs:right-administration, right-administration, edt right-administration, edt:right-administration Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-administration.md ID: v8cs:right-administration - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-administration.md ### v8cs:right-all-functions-mode - Право установлено: Режим "Все функции" (right-all-functions-mode) URL: https://v8std.ru/diagnostics/v8-code-style/right-all-functions-mode/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-all-functions-mode.md Source path: diagnostics/v8-code-style/right-all-functions-mode.md Aliases: v8cs:right-all-functions-mode, #v8cs:right-all-functions-mode, right-all-functions-mode, edt right-all-functions-mode, edt:right-all-functions-mode Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-all-functions-mode.md ID: v8cs:right-all-functions-mode - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-all-functions-mode.md ### v8cs:right-configuration-extensions-administration - Право установлено: Администрирование расширений конфигурации (right-configuration-extensions-administration) URL: https://v8std.ru/diagnostics/v8-code-style/right-configuration-extensions-administration/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-configuration-extensions-administration.md Source path: diagnostics/v8-code-style/right-configuration-extensions-administration.md Aliases: - v8cs:right-configuration-extensions-administration - #v8cs:right-configuration-extensions-administration - right-configuration-extensions-administration - edt right-configuration-extensions-administration - edt:right-configuration-extensions-administration Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-configuration-extensions-administration.md ID: v8cs:right-configuration-extensions-administration - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-configuration-extensions-administration.md ### v8cs:right-data-administration - Право установлено: Администрирование данных (right-data-administration) URL: https://v8std.ru/diagnostics/v8-code-style/right-data-administration/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-data-administration.md Source path: diagnostics/v8-code-style/right-data-administration.md Aliases: v8cs:right-data-administration, #v8cs:right-data-administration, right-data-administration, edt right-data-administration, edt:right-data-administration Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-data-administration.md ID: v8cs:right-data-administration - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-data-administration.md ### v8cs:right-delete - Установлено право "Удаление" (right-delete) URL: https://v8std.ru/diagnostics/v8-code-style/right-delete/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-delete.md Source path: diagnostics/v8-code-style/right-delete.md Aliases: v8cs:right-delete, #v8cs:right-delete, right-delete, edt right-delete, edt:right-delete Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-delete.md ID: v8cs:right-delete - Категория: `right` Право удаления рекомендуется оставить только в ролях ПолныеПрава и АдминистраторСистемы. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-delete.md ### v8cs:right-exclusive-mode - Право установлено: Монопольный режим (right-exclusive-mode) URL: https://v8std.ru/diagnostics/v8-code-style/right-exclusive-mode/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-exclusive-mode.md Source path: diagnostics/v8-code-style/right-exclusive-mode.md Aliases: v8cs:right-exclusive-mode, #v8cs:right-exclusive-mode, right-exclusive-mode, edt right-exclusive-mode, edt:right-exclusive-mode Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-exclusive-mode.md ID: v8cs:right-exclusive-mode - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-exclusive-mode.md ### v8cs:right-interactive-clear-deletion-mark-predefined-data - Установлено право "ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных" (right-interactive-clear-deletion-mark-predefined-data) URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-clear-deletion-mark-predefined-data/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-clear-deletion-mark-predefined-data.md Source path: diagnostics/v8-code-style/right-interactive-clear-deletion-mark-predefined-data.md Aliases: - v8cs:right-interactive-clear-deletion-mark-predefined-data - #v8cs:right-interactive-clear-deletion-mark-predefined-data - right-interactive-clear-deletion-mark-predefined-data - edt right-interactive-clear-deletion-mark-predefined-data - edt:right-interactive-clear-deletion-mark-predefined-data Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-clear-deletion-mark-predefined-data.md ID: v8cs:right-interactive-clear-deletion-mark-predefined-data - Категория: `right` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-clear-deletion-mark-predefined-data.md ### v8cs:right-interactive-delete-marked-predefined-data - Установлено право "ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных" (right-interactive-delete-marked-predefined-data) URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete-marked-predefined-data/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete-marked-predefined-data.md Source path: diagnostics/v8-code-style/right-interactive-delete-marked-predefined-data.md Aliases: - v8cs:right-interactive-delete-marked-predefined-data - #v8cs:right-interactive-delete-marked-predefined-data - right-interactive-delete-marked-predefined-data - edt right-interactive-delete-marked-predefined-data - edt:right-interactive-delete-marked-predefined-data Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete-marked-predefined-data.md ID: v8cs:right-interactive-delete-marked-predefined-data - Категория: `right` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete-marked-predefined-data.md ### v8cs:right-interactive-delete-predefined-data - Установлено право "ИнтерактивноеУдалениеПредопределенныхДанных" (right-interactive-delete-predefined-data) URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete-predefined-data/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete-predefined-data.md Source path: diagnostics/v8-code-style/right-interactive-delete-predefined-data.md Aliases: - v8cs:right-interactive-delete-predefined-data - #v8cs:right-interactive-delete-predefined-data - right-interactive-delete-predefined-data - edt right-interactive-delete-predefined-data - edt:right-interactive-delete-predefined-data Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete-predefined-data.md ID: v8cs:right-interactive-delete-predefined-data - Категория: `right` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete-predefined-data.md ### v8cs:right-interactive-delete - Установлено право "ИнтерактивноеУдаление" (right-interactive-delete) URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-delete.md Source path: diagnostics/v8-code-style/right-interactive-delete.md Aliases: v8cs:right-interactive-delete, #v8cs:right-interactive-delete, right-interactive-delete, edt right-interactive-delete, edt:right-interactive-delete Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete.md ID: v8cs:right-interactive-delete - Категория: `right` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-delete.md ### v8cs:right-interactive-open-external-data-processors - Право установлено: Интерактивное открытие внешних обработок (right-interactive-open-external-data-processors) URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-open-external-data-processors/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-open-external-data-processors.md Source path: diagnostics/v8-code-style/right-interactive-open-external-data-processors.md Aliases: - v8cs:right-interactive-open-external-data-processors - #v8cs:right-interactive-open-external-data-processors - right-interactive-open-external-data-processors - edt right-interactive-open-external-data-processors - edt:right-interactive-open-external-data-processors Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-open-external-data-processors.md ID: v8cs:right-interactive-open-external-data-processors - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-open-external-data-processors.md ### v8cs:right-interactive-open-external-reports - Право установлено: Интерактивное открытие внешних отчетов (right-interactive-open-external-reports) URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-open-external-reports/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-open-external-reports.md Source path: diagnostics/v8-code-style/right-interactive-open-external-reports.md Aliases: - v8cs:right-interactive-open-external-reports - #v8cs:right-interactive-open-external-reports - right-interactive-open-external-reports - edt right-interactive-open-external-reports - edt:right-interactive-open-external-reports Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-open-external-reports.md ID: v8cs:right-interactive-open-external-reports - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-open-external-reports.md ### v8cs:right-interactive-set-deletion-mark-predefined-data - Установлено право "ИнтерактивноеПометкаУдаленияПредопределенныхДанных" (right-interactive-set-deletion-mark-predefined-data) URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-set-deletion-mark-predefined-data/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-interactive-set-deletion-mark-predefined-data.md Source path: diagnostics/v8-code-style/right-interactive-set-deletion-mark-predefined-data.md Aliases: - v8cs:right-interactive-set-deletion-mark-predefined-data - #v8cs:right-interactive-set-deletion-mark-predefined-data - right-interactive-set-deletion-mark-predefined-data - edt right-interactive-set-deletion-mark-predefined-data - edt:right-interactive-set-deletion-mark-predefined-data Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-set-deletion-mark-predefined-data.md ID: v8cs:right-interactive-set-deletion-mark-predefined-data - Категория: `right` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-interactive-set-deletion-mark-predefined-data.md ### v8cs:right-output-to-printer-file-clipboard - Право установлено: Вывод (right-output-to-printer-file-clipboard) URL: https://v8std.ru/diagnostics/v8-code-style/right-output-to-printer-file-clipboard/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-output-to-printer-file-clipboard.md Source path: diagnostics/v8-code-style/right-output-to-printer-file-clipboard.md Aliases: - v8cs:right-output-to-printer-file-clipboard - #v8cs:right-output-to-printer-file-clipboard - right-output-to-printer-file-clipboard - edt right-output-to-printer-file-clipboard - edt:right-output-to-printer-file-clipboard Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-output-to-printer-file-clipboard.md ID: v8cs:right-output-to-printer-file-clipboard - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-output-to-printer-file-clipboard.md ### v8cs:right-save-user-data - Право установлено: Сохранение данных пользователя (right-save-user-data) URL: https://v8std.ru/diagnostics/v8-code-style/right-save-user-data/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-save-user-data.md Source path: diagnostics/v8-code-style/right-save-user-data.md Aliases: v8cs:right-save-user-data, #v8cs:right-save-user-data, right-save-user-data, edt right-save-user-data, edt:right-save-user-data Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-save-user-data.md ID: v8cs:right-save-user-data - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-save-user-data.md ### v8cs:right-start-automation - Право установлено: Automation (right-start-automation) URL: https://v8std.ru/diagnostics/v8-code-style/right-start-automation/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-start-automation.md Source path: diagnostics/v8-code-style/right-start-automation.md Aliases: v8cs:right-start-automation, #v8cs:right-start-automation, right-start-automation, edt right-start-automation, edt:right-start-automation Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-automation.md ID: v8cs:right-start-automation - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-automation.md ### v8cs:right-start-external-connection - Право установлено: Внешнее соединение (right-start-external-connection) URL: https://v8std.ru/diagnostics/v8-code-style/right-start-external-connection/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-start-external-connection.md Source path: diagnostics/v8-code-style/right-start-external-connection.md Aliases: - v8cs:right-start-external-connection - #v8cs:right-start-external-connection - right-start-external-connection - edt right-start-external-connection - edt:right-start-external-connection Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-external-connection.md ID: v8cs:right-start-external-connection - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-external-connection.md ### v8cs:right-start-thick-client - Право установлено: Толстый клиент (right-start-thick-client) URL: https://v8std.ru/diagnostics/v8-code-style/right-start-thick-client/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-start-thick-client.md Source path: diagnostics/v8-code-style/right-start-thick-client.md Aliases: v8cs:right-start-thick-client, #v8cs:right-start-thick-client, right-start-thick-client, edt right-start-thick-client, edt:right-start-thick-client Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-thick-client.md ID: v8cs:right-start-thick-client - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-thick-client.md ### v8cs:right-start-thin-client - Право установлено: Тонкий клиент (right-start-thin-client) URL: https://v8std.ru/diagnostics/v8-code-style/right-start-thin-client/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-start-thin-client.md Source path: diagnostics/v8-code-style/right-start-thin-client.md Aliases: v8cs:right-start-thin-client, #v8cs:right-start-thin-client, right-start-thin-client, edt right-start-thin-client, edt:right-start-thin-client Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-thin-client.md ID: v8cs:right-start-thin-client - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-thin-client.md ### v8cs:right-start-web-client - Право установлено: Веб-клиент (right-start-web-client) URL: https://v8std.ru/diagnostics/v8-code-style/right-start-web-client/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-start-web-client.md Source path: diagnostics/v8-code-style/right-start-web-client.md Aliases: v8cs:right-start-web-client, #v8cs:right-start-web-client, right-start-web-client, edt right-start-web-client, edt:right-start-web-client Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-web-client.md ID: v8cs:right-start-web-client - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-start-web-client.md ### v8cs:right-update-database-configuration - Право установлено: Обновление конфигурации базы данных (right-update-database-configuration) URL: https://v8std.ru/diagnostics/v8-code-style/right-update-database-configuration/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-update-database-configuration.md Source path: diagnostics/v8-code-style/right-update-database-configuration.md Aliases: - v8cs:right-update-database-configuration - #v8cs:right-update-database-configuration - right-update-database-configuration - edt right-update-database-configuration - edt:right-update-database-configuration Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-update-database-configuration.md ID: v8cs:right-update-database-configuration - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-update-database-configuration.md ### v8cs:right-view-event-log - Право установлено: Журнал регистрации (right-view-event-log) URL: https://v8std.ru/diagnostics/v8-code-style/right-view-event-log/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/right-view-event-log.md Source path: diagnostics/v8-code-style/right-view-event-log.md Aliases: v8cs:right-view-event-log, #v8cs:right-view-event-log, right-view-event-log, edt right-view-event-log, edt:right-view-event-log Related: standard:std488 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-view-event-log.md ID: v8cs:right-view-event-log - Категория: `right` В случае если в конфигурации для пользователей необходимо настраивать общие права работы с информационной базой (такие как «Тонкий клиент», «Толстый клиент», «Интерактивное открытие внешних обработок» и т.д.), то в конфигурации должны быть определены отдельные роли для предоставления этих прав. Такие роли не предназначены для самостоятельного использования, их следует назначать пользователям совместно с остальными ролями конфигурации. #### Стандарт - [#std488: Стандартные роли](https://v8std.ru/std/488/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/right-view-event-log.md ### v8cs:role-right-has-rls - Право роли содержит текст ограничения доступа (RLS) (role-right-has-rls) URL: https://v8std.ru/diagnostics/v8-code-style/role-right-has-rls/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/role-right-has-rls.md Source path: diagnostics/v8-code-style/role-right-has-rls.md Aliases: v8cs:role-right-has-rls, #v8cs:role-right-has-rls, role-right-has-rls, edt role-right-has-rls, edt:role-right-has-rls Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/role-right-has-rls.md ID: v8cs:role-right-has-rls - Категория: `right` #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.right/markdown/ru/role-right-has-rls.md ### v8cs:rollback-transaction - Проверка нарушения схемы работы с транзакциями (rollback-transaction) URL: https://v8std.ru/diagnostics/v8-code-style/rollback-transaction/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/rollback-transaction.md Source path: diagnostics/v8-code-style/rollback-transaction.md Aliases: v8cs:rollback-transaction, #v8cs:rollback-transaction, rollback-transaction, edt rollback-transaction, edt:rollback-transaction Related: standard:std499, standard:std783 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/rollback-transaction.md ID: v8cs:rollback-transaction - Категория: `bsl` Вызов "ОтменитьТранзакцию()" находится вне конструкции "Попытка... Исключение" Отсутствует вызов "НачатьТранзакцию()", хотя вызываются "ОтменитьТранзакцию()" Для вызова "НачатьТранзакцию()" отсутствует парный вызов "ЗафиксироватьТранзакцию()" Mежду "Исключение" и "ОтменитьТранзакцию()" есть исполняемый код, который может вызвать исключение #### Стандарт - [#std499: Перехват исключений в коде](https://v8std.ru/std/499/) - [#std783: Транзакции: правила использования](https://v8std.ru/std/783/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/rollback-transaction.md ### v8cs:scheduled-job-periodicity-too-short - Периодичность выполнения регламентного задания меньше одной минуты. (scheduled-job-periodicity-too-short) URL: https://v8std.ru/diagnostics/v8-code-style/scheduled-job-periodicity-too-short/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/scheduled-job-periodicity-too-short.md Source path: diagnostics/v8-code-style/scheduled-job-periodicity-too-short.md Aliases: - v8cs:scheduled-job-periodicity-too-short - #v8cs:scheduled-job-periodicity-too-short - scheduled-job-periodicity-too-short - edt scheduled-job-periodicity-too-short - edt:scheduled-job-periodicity-too-short Related: standard:std402 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/scheduled-job-periodicity-too-short.md ID: v8cs:scheduled-job-periodicity-too-short - Категория: `md` Периодичность выполнения регламентного задания меньше одной минуты. #### Стандарт - [#std402: Настройка расписания регламентных заданий](https://v8std.ru/std/402/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/scheduled-job-periodicity-too-short.md ### v8cs:server-execution-safe-mode - Отсутствует включение безопасного режима перед вызовом метода "Выполнить" или "Вычислить" (server-execution-safe-mode) URL: https://v8std.ru/diagnostics/v8-code-style/server-execution-safe-mode/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/server-execution-safe-mode.md Source path: diagnostics/v8-code-style/server-execution-safe-mode.md Aliases: v8cs:server-execution-safe-mode, #v8cs:server-execution-safe-mode, server-execution-safe-mode, edt server-execution-safe-mode, edt:server-execution-safe-mode Related: standard:std770 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/server-execution-safe-mode.md ID: v8cs:server-execution-safe-mode - Категория: `bsl` Для исключения описанных уязвимостей, нужно в серверных процедурах и функциях вызов методов Выполнить или Вычислить предварять включением безопасного режима. В режиме сервиса, включение безопасного режима должно учитывать разделение данных. #### Стандарт - [#std770: Ограничения на использование Выполнить и Вычислить на сервере](https://v8std.ru/std/770/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/server-execution-safe-mode.md ### v8cs:statement-type-change - Утверждение меняет тип (statement-type-change) URL: https://v8std.ru/diagnostics/v8-code-style/statement-type-change/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/statement-type-change.md Source path: diagnostics/v8-code-style/statement-type-change.md Aliases: v8cs:statement-type-change, #v8cs:statement-type-change, statement-type-change, edt statement-type-change, edt:statement-type-change Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/statement-type-change.md ID: v8cs:statement-type-change - Категория: `bsl` Система строгой типизации кода проверяет что утверждение (строка присвоения значения) меняет тип #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/statement-type-change.md ### v8cs:structure-consructor-too-many-keys - Конструктор структуры содержит слишком много ключей (structure-consructor-too-many-keys) URL: https://v8std.ru/diagnostics/v8-code-style/structure-consructor-too-many-keys/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/structure-consructor-too-many-keys.md Source path: diagnostics/v8-code-style/structure-consructor-too-many-keys.md Aliases: - v8cs:structure-consructor-too-many-keys - #v8cs:structure-consructor-too-many-keys - structure-consructor-too-many-keys - edt structure-consructor-too-many-keys - edt:structure-consructor-too-many-keys Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-too-many-keys.md ID: v8cs:structure-consructor-too-many-keys - Категория: `bsl` Проверка конструктора структуры, содержащего больше 3х ключей #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-too-many-keys.md ### v8cs:structure-consructor-value-type - Типизация значений в конструкторе структуры (structure-consructor-value-type) URL: https://v8std.ru/diagnostics/v8-code-style/structure-consructor-value-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/structure-consructor-value-type.md Source path: diagnostics/v8-code-style/structure-consructor-value-type.md Aliases: - v8cs:structure-consructor-value-type - #v8cs:structure-consructor-value-type - structure-consructor-value-type - edt structure-consructor-value-type - edt:structure-consructor-value-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-value-type.md ID: v8cs:structure-consructor-value-type - Категория: `bsl` Проверяет строковый литерал в конструкторе структуры что каждый ключ имеет типзированное значение. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/structure-consructor-value-type.md ### v8cs:subsystem-synonym-too-long - Длина названия раздела превышает 35 символов (subsystem-synonym-too-long) URL: https://v8std.ru/diagnostics/v8-code-style/subsystem-synonym-too-long/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/subsystem-synonym-too-long.md Source path: diagnostics/v8-code-style/subsystem-synonym-too-long.md Aliases: v8cs:subsystem-synonym-too-long, #v8cs:subsystem-synonym-too-long, subsystem-synonym-too-long, edt subsystem-synonym-too-long, edt:subsystem-synonym-too-long Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/subsystem-synonym-too-long.md ID: v8cs:subsystem-synonym-too-long - Категория: `md` Общая длина названия раздела не должна превышать 35 знаков с учетом пробелов (это позволяет разместить название в 2 строки, при дальнейшем увеличении количества знаков появится многоточие). Лучше выбирать названия примерно одного размеры по ширине, чтобы они смотрелись единообразно и ровно. #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/subsystem-synonym-too-long.md ### v8cs:typed-value-adding-to-untyped-collection - Добавление типизированного значения в не типизированную коллекцию (typed-value-adding-to-untyped-collection) URL: https://v8std.ru/diagnostics/v8-code-style/typed-value-adding-to-untyped-collection/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/typed-value-adding-to-untyped-collection.md Source path: diagnostics/v8-code-style/typed-value-adding-to-untyped-collection.md Aliases: - v8cs:typed-value-adding-to-untyped-collection - #v8cs:typed-value-adding-to-untyped-collection - typed-value-adding-to-untyped-collection - edt typed-value-adding-to-untyped-collection - edt:typed-value-adding-to-untyped-collection Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/typed-value-adding-to-untyped-collection.md ID: v8cs:typed-value-adding-to-untyped-collection - Категория: `bsl` Проверяет, что вызов метода происходит для типизированной коллекции. #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/typed-value-adding-to-untyped-collection.md ### v8cs:unknown-form-parameter-access - Обращение к несуществующему параметру формы (unknown-form-parameter-access) URL: https://v8std.ru/diagnostics/v8-code-style/unknown-form-parameter-access/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/unknown-form-parameter-access.md Source path: diagnostics/v8-code-style/unknown-form-parameter-access.md Aliases: v8cs:unknown-form-parameter-access, #v8cs:unknown-form-parameter-access, unknown-form-parameter-access, edt unknown-form-parameter-access, edt:unknown-form-parameter-access Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/unknown-form-parameter-access.md ID: v8cs:unknown-form-parameter-access - Категория: `bsl` Параметры формы следует объявлять явно на закладке Параметры редактора формы. В таком случае в коде обработчика ПриСозданииНаСервере не требуется проверять наличие свойств у структуры Параметры, а сам состав параметров формы явно задекларирован (поэтому их не требуется восстанавливать, изучая весь код обработчика ПриСозданииНаСервере). #### Стандарт #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/unknown-form-parameter-access.md ### v8cs:unsafe-password-ib-storage - Небезопасное хранение паролей в информационной базе (unsafe-password-ib-storage) URL: https://v8std.ru/diagnostics/v8-code-style/unsafe-password-ib-storage/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/unsafe-password-ib-storage.md Source path: diagnostics/v8-code-style/unsafe-password-ib-storage.md Aliases: v8cs:unsafe-password-ib-storage, #v8cs:unsafe-password-ib-storage, unsafe-password-ib-storage, edt unsafe-password-ib-storage, edt:unsafe-password-ib-storage Related: standard:std740 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/unsafe-password-ib-storage.md ID: v8cs:unsafe-password-ib-storage - Категория: `md` Для сведения к минимуму возможности перехвата пароля злоумышленниками не следует хранить пароли и другую конфиденциальную информацию в информационной базе. #### Стандарт - [#std740: Безопасное хранение паролей](https://v8std.ru/std/740/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.md/markdown/ru/unsafe-password-ib-storage.md ### v8cs:use-goto-operator - Используется оператор Перейти (use-goto-operator) URL: https://v8std.ru/diagnostics/v8-code-style/use-goto-operator/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/use-goto-operator.md Source path: diagnostics/v8-code-style/use-goto-operator.md Aliases: v8cs:use-goto-operator, #v8cs:use-goto-operator, use-goto-operator, edt use-goto-operator, edt:use-goto-operator Related: standard:std547 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/use-goto-operator.md ID: v8cs:use-goto-operator - Категория: `bsl` В коде на встроенном языке не рекомендуется использовать оператор Перейти, так как необдуманное использование данного оператора приводит к получению запутанных, плохо структурированных модулей, по тексту которых затруднительно понять порядок исполнения и взаимозависимость фрагментов. Вместо оператора Перейти рекомендуется использовать другие конструкции встроенного языка. #### Стандарт - [#std547: Ограничение на использование оператора Перейти](https://v8std.ru/std/547/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/use-goto-operator.md ### v8cs:use-non-recommended-method - Использование не рекомендуемых методов (use-non-recommended-method) URL: https://v8std.ru/diagnostics/v8-code-style/use-non-recommended-method/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/use-non-recommended-method.md Source path: diagnostics/v8-code-style/use-non-recommended-method.md Aliases: v8cs:use-non-recommended-method, #v8cs:use-non-recommended-method, use-non-recommended-method, edt use-non-recommended-method, edt:use-non-recommended-method Related: standard:std643 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/use-non-recommended-method.md ID: v8cs:use-non-recommended-method - Категория: `bsl` Существуют не рекомендуемые методы, вместо которых следует использовать либо методы БСП, либо другие методы. #### Стандарт - [#std643: Работа в разных часовых поясах](https://v8std.ru/std/643/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/use-non-recommended-method.md ### v8cs:using-form-data-to-value - Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение (using-form-data-to-value) URL: https://v8std.ru/diagnostics/v8-code-style/using-form-data-to-value/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/using-form-data-to-value.md Source path: diagnostics/v8-code-style/using-form-data-to-value.md Aliases: v8cs:using-form-data-to-value, #v8cs:using-form-data-to-value, using-form-data-to-value, edt using-form-data-to-value, edt:using-form-data-to-value Related: standard:std409 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/using-form-data-to-value.md ID: v8cs:using-form-data-to-value - Категория: `bsl` В большинстве случаев в модулях форм следует использовать метод формы РеквизитФормыВЗначение вместо метода ДанныеФормыВЗначение. Рекомендация обусловлена соображениями унификации прикладного кода и тем, что синтаксис метода РеквизитФормыВЗначение проще, чем у ДанныеФормыВЗначение (а следовательно, меньше вероятность ошибки). В ДанныеФормыВЗначение необходимо дополнительно передавать тип значения, а для РеквизитФормыВЗначение это не обязательно, а в практическом плане - избыточно. Наличие в платформе 1С:Предприятие метода формы РеквизитФормыВЗначение (наряду с методом глобального контекста ДанныеФормыВЗначение) объясняется только удобством его применения. С точки зрения эффективности и результата методы работают одинаково. #### Стандарт - [#std409: Использование РеквизитФормыВЗначение и ДанныеФормыВЗначение](https://v8std.ru/std/409/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/using-form-data-to-value.md ### v8cs:using-isinrole - Использован метод "РольДоступна" (using-isinrole) URL: https://v8std.ru/diagnostics/v8-code-style/using-isinrole/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/using-isinrole.md Source path: diagnostics/v8-code-style/using-isinrole.md Aliases: v8cs:using-isinrole, #v8cs:using-isinrole, using-isinrole, edt using-isinrole, edt:using-isinrole Related: standard:std689, standard:std737 External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/using-isinrole.md ID: v8cs:using-isinrole - Категория: `bsl` Для проверки прав доступа в коде следует использовать метод ПравоДоступа. #### Стандарт - [#std689: Настройка ролей и прав доступа](https://v8std.ru/std/689/) - [#std737: Проверка прав доступа](https://v8std.ru/std/737/) #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/using-isinrole.md ### v8cs:variable-value-type - Переменная имеет тип значения (variable-value-type) URL: https://v8std.ru/diagnostics/v8-code-style/variable-value-type/ Markdown URL: https://v8std.ru/diagnostics/v8-code-style/variable-value-type.md Source path: diagnostics/v8-code-style/variable-value-type.md Aliases: v8cs:variable-value-type, #v8cs:variable-value-type, variable-value-type, edt variable-value-type, edt:variable-value-type Related: нет External sources: https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/variable-value-type.md ID: v8cs:variable-value-type - Категория: `bsl` Система строгой типизации кода проверяет что каждая переменная имеет тип значения #### Стандарт - Нет прямой привязки к v8std в описании проверки #### Источник https://github.com/1C-Company/v8-code-style/blob/master/bundles/com.e1c.v8codestyle.bsl/markdown/ru/variable-value-type.md ## pattern ### patterns:engineering:dry - DRY URL: https://v8std.ru/patterns/engineering/dry/ Markdown URL: https://v8std.ru/patterns/engineering/dry/index.md Source path: patterns/engineering/dry/index.md Aliases: patterns:engineering:dry Related: нет External sources: нет # DRY (`Don't Repeat Yourself`) `DRY` означает: не дублируйте одно и то же знание, правило или алгоритм в нескольких местах. ## Что означает в 1С Для 1С это особенно важно в: - расчетах; - валидациях; - текстах запросов; - правилах заполнения документов; - интеграционных маппингах. Если одно бизнес-правило описано в трех местах, рано или поздно они разъедутся. ## Пример на 1С #### До ```bsl // In module A VATAmount = Amount * 0.20; // In module B VATAmount = Amount * 0.20; ``` #### После ```bsl Function CalculateVAT(Amount) Export Return Amount * 0.20; EndFunction ``` ## Когда полезен - если повторяется именно правило, а не просто похожая строка; - если изменение должно происходить в одном месте; - если дублирование уже приводит к расхождениям. ## Когда применяют неправильно - когда абстракцию вводят после первого же повтора; - когда объединяют похожие, но не одинаковые сценарии; - когда ради `DRY` код становится менее читаемым. ### patterns:engineering - Инженерные принципы URL: https://v8std.ru/patterns/engineering/ Markdown URL: https://v8std.ru/patterns/engineering/index.md Source path: patterns/engineering/index.md Aliases: patterns:engineering Related: - related:patterns:engineering:dry - related:patterns:engineering:kiss - related:patterns:engineering:rule_of_three - related:patterns:engineering:separation_of_concerns - related:patterns:engineering:yagni External sources: нет Это раздел про практические инженерные правила, которые постоянно всплывают в ревью и проектировании: `DRY`, `KISS`, `YAGNI` и похожие. Они не описывают объектную модель напрямую, как `SOLID`, и не распределяют ответственность, как `GRASP`. Их задача проще: не дать архитектуре и коду усложниться без причины. ## Что внутри | Принцип | Что означает | На что смотреть | | --- | --- | --- | | [DRY](https://v8std.ru/patterns/engineering/dry/) (`Don't Repeat Yourself`) | Не дублируйте знание и правило в нескольких местах. | Не придется ли синхронно править один и тот же смысл в трех модулях. | | [KISS](https://v8std.ru/patterns/engineering/kiss/) (`Keep It Simple, Stupid`) | Выбирайте простое решение, если оно уже закрывает задачу. | Не появился ли паттерн там, где достаточно процедуры или запроса. | | [YAGNI](https://v8std.ru/patterns/engineering/yagni/) (`You Aren't Gonna Need It`) | Не стройте расширение заранее без подтвержденной потребности. | Не проектируете ли вы "на будущее", которого пока нет. | | [Rule of Three](https://v8std.ru/patterns/engineering/rule-of-three/) | Обобщать стоит после устойчивого повторения. | Не выносите ли абстракцию слишком рано. | | [Separation of Concerns](https://v8std.ru/patterns/engineering/separation-of-concerns/) | Разделяйте разные типы задач по слоям и контекстам. | Не смешаны ли UI, orchestration, доменная логика и интеграции. | ### patterns:engineering:kiss - KISS URL: https://v8std.ru/patterns/engineering/kiss/ Markdown URL: https://v8std.ru/patterns/engineering/kiss/index.md Source path: patterns/engineering/kiss/index.md Aliases: patterns:engineering:kiss Related: нет External sources: нет # KISS (`Keep It Simple, Stupid`) `KISS` требует выбирать самое простое решение, которое уже решает задачу. ## Что означает в 1С В 1С это обычно защита от ненужной архитектурной роскоши: - не вводить паттерн там, где хватает одной процедуры; - не строить многоуровневый сервис вокруг простого запроса; - не плодить лишние абстракции в прикладном коде. ## Пример на 1С Если есть ровно один способ отправки уведомления, то простой модуль: ```bsl Procedure SendNotification(User, MessageText) Export // Send by email. EndProcedure ``` часто лучше, чем преждевременно вводить `Strategy`, фабрики и контейнер из трех слоев. ## Когда полезен - в небольших задачах; - в прикладном коде без устойчивой вариативности; - в ранней фазе реализации, когда система еще не требует расширения. ## Когда применяют неправильно - когда под видом простоты игнорируют реальные точки изменения; - когда "простое" решение уже перестало помещаться в голове; - когда `KISS` используют как оправдание для плохой структуры. ### patterns:engineering:rule_of_three - Rule of Three URL: https://v8std.ru/patterns/engineering/rule-of-three/ Markdown URL: https://v8std.ru/patterns/engineering/rule-of-three/index.md Source path: patterns/engineering/rule-of-three/index.md Aliases: patterns:engineering:rule_of_three Related: нет External sources: нет `Rule of Three` говорит: обобщать и выносить абстракцию обычно стоит после устойчивого третьего повторения. ## Что означает в 1С Для 1С это удобный практический фильтр между `DRY` и `YAGNI`: - первый повтор еще может быть случайным; - второй уже настораживает; - третий обычно показывает устойчивый шаблон. После этого абстракция уже основана не на догадке, а на повторяющемся факте. ## Пример на 1С - первый документ получил похожую валидацию; - второй документ получил почти ту же валидацию; - третий документ повторяет тот же подход. После этого уже разумно выделить общий сервис проверки или общий контракт, а не держать три почти одинаковых куска кода. ## Когда полезен - при выносе общих модулей и сервисов; - при решении, пора ли делать паттерн или еще рано; - при борьбе с преждевременным обобщением. ## Когда применяют неправильно - когда ждут третьего случая там, где обобщение очевидно уже сейчас; - когда считают число повторов механически, без анализа смысла; - когда упускают момент и оставляют четыре-пять копий "на потом". ### patterns:engineering:separation_of_concerns - Separation of Concerns URL: https://v8std.ru/patterns/engineering/separation-of-concerns/ Markdown URL: https://v8std.ru/patterns/engineering/separation-of-concerns/index.md Source path: patterns/engineering/separation-of-concerns/index.md Aliases: - patterns:engineering:separation_of_concerns - форма не должна содержать бизнес-логику - форма не должна содержать доступ к данным - форма не должна содержать бизнес-логику и доступ к данным - бизнес-логика в форме - доступ к данным в форме - разделение ответственности - разделение ответственностей - separation of concerns Related: нет External sources: нет `Separation of Concerns` требует разделять разные типы задач по отдельным слоям и контекстам. ## Что означает в 1С В 1С это обычно означает, что стоит различать: - форму и UI; - orchestration сценария; - доменную логику; - интеграцию; - инфраструктурные детали. Если все это смешано в одном модуле формы или в одном общем модуле, код быстро перестает быть управляемым. ## Пример на 1С #### CommonForms.SalesOrderForm ```bsl &AtClient Procedure PostCommand(Command) CommonModules.SalesOrderController.Post(Object.Ref); EndProcedure ``` #### CommonModules.SalesOrderController ```bsl Procedure Post(SalesOrderRef) Export SalesOrder = SalesOrderRef.GetObject(); SalesOrderValidation.CheckBeforePosting(SalesOrder); SalesOrder.Write(DocumentWriteMode.Posting); EndProcedure ``` Здесь форма отвечает за UI, контроллер за orchestration, а объект документа и сервисы проверки — за свою часть доменной логики. ## Когда полезен - в формах с большим количеством действий; - в интеграционных сценариях; - в больших прикладных модулях, где все перемешалось. ## Когда применяют неправильно - когда разделение слоев становится формальным и бесполезным; - когда между слоями появляется слишком много пустых прокладок; - когда из-за "чистоты" теряется понимание сквозного сценария. ### patterns:engineering:yagni - YAGNI URL: https://v8std.ru/patterns/engineering/yagni/ Markdown URL: https://v8std.ru/patterns/engineering/yagni/index.md Source path: patterns/engineering/yagni/index.md Aliases: patterns:engineering:yagni Related: нет External sources: нет # YAGNI (`You Aren't Gonna Need It`) `YAGNI` говорит: не реализуйте то, в чем нет подтвержденной потребности прямо сейчас. ## Что означает в 1С Для 1С это особенно полезно в прикладной архитектуре, где легко начать проектировать: - "универсальный" механизм; - набор расширений "на будущее"; - поддержку пяти каналов, хотя сейчас есть только один; - сложную иерархию сервисов без живого сценария использования. ## Пример на 1С Если в системе есть только один провайдер печати, то: - один модуль печати часто достаточно; - фабрика провайдеров, реестр расширений и стратегия выбора могут подождать до реального второго варианта. ## Когда полезен - когда команда начинает проектировать на годы вперед; - когда требования пока не подтверждают вариативность; - когда хочется сократить объем лишнего кода и поддержки. ## Когда применяют неправильно - когда игнорируют уже известные, подтвержденные требования; - когда "не нужно сейчас" путают с "точно никогда не понадобится"; - когда из-за `YAGNI` убирают даже простую точку расширения, которая уже назрела. ### patterns:gof:abstract_factory - Abstract Factory URL: https://v8std.ru/patterns/gof/abstract-factory/ Markdown URL: https://v8std.ru/patterns/gof/abstract-factory/index.md Source path: patterns/gof/abstract-factory/index.md Aliases: patterns:gof:abstract_factory Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/AbstractFactory # Абстрактная фабрика (`Abstract Factory`) `Abstract Factory` создает не один объект, а семейство совместимых объектов через общий контракт. ## Опора на ООП Этот паттерн в первую очередь опирается на [полиморфизм, интерфейсы и инкапсуляцию](https://v8std.ru/patterns/principles/): клиент знает только общий контракт фабрики, а выбор конкретного семейства реализаций спрятан внутри ## Что показывает пример на 1С - `CommonModules.WindowsFactory` и `CommonModules.LinuxFactory` экспортируют одинаковые методы `CreateProcess()` и `CreateTempFile()`. - `DataProcessors.Application` принимает фабрику в `Init()` и потом работает только через `Factory.CreateProcess()` и `Factory.CreateTempFile()`. - Клиентский код переключает сразу целое семейство реализаций, а не выбирает каждый объект по отдельности. ## Пример #### CommonModules.WindowsFactory ```bsl #Region Public Function CreateProcess() Export Return True; // TODO: Implement it! Return concreate object EndFunction Function CreateTempFile() Export Return False; // TODO: Implement it! Return concreate object EndFunction #EndRegion ``` #### CommonModules.LinuxFactory ```bsl #Region Public Function CreateProcess() Export Return False; // TODO: Implement it! Return concreate object EndFunction Function CreateTempFile() Export Return True; // TODO: Implement it! Return concreate object EndFunction #EndRegion ``` #### DataProcessors.Application ```bsl Var Factory; Function Init(Factory_) Export Factory = Factory_; EndFunction Function RunTempProcess() Export Process = Factory.CreateProcess(); TempFile = Factory.CreateTempFile(); EndFunction ``` ## Где полезен в 1С - когда нужно подменять набор интеграционных объектов под разную среду; - когда один и тот же сценарий должен работать с разными поставщиками инфраструктуры; - когда важно держать совместимость объектов внутри одной "платформы" или режима работы. ## Когда паттерн лишний - если семейство реализаций всего одно; - если меняется только один объект и достаточно `Factory Method`; - если клиенту проще прямо создать нужный объект без дополнительного слоя. ## Источник примера - [zeegin/DesignPatterns: AbstractFactory](https://github.com/zeegin/DesignPatterns/tree/master/AbstractFactory) ### patterns:gof:adapter - Adapter URL: https://v8std.ru/patterns/gof/adapter/ Markdown URL: https://v8std.ru/patterns/gof/adapter/index.md Source path: patterns/gof/adapter/index.md Aliases: patterns:gof:adapter Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Adapter # Адаптер (`Adapter`) `Adapter` переводит неудобный или устаревший интерфейс в тот контракт, который нужен клиентскому коду. ## Опора на ООП `Adapter` в первую очередь опирается на [интерфейсы и инкапсуляцию](https://v8std.ru/patterns/principles/): несовместимый контракт прячется внутри адаптера, а наружу отдается ожидаемый API. Полиморфизм появляется, когда адаптер подменяет обычную реализацию по тому же контракту ## Что показывает пример на 1С - `CommonModules.Adapter` экспортирует понятный клиенту метод `BeautyMethod2WTF(Parameters)`. - Внутри адаптер преобразует входные данные через `Convert()`, вызывает `Legacy.WTFMethod(Input, Output)` и потом собирает ответ через `Extract(Output)`. - Код, который использует адаптер, не знает деталей старого контракта и не размазывает их по системе. ## Пример #### CommonModules.Adapter ```bsl #Region Public Function BeautyMethod2WTF(Parameters) Export Input = Convert(Parameters); Output = Undefined; Legacy.WTFMethod(Input, Output); Result = Extract(Output); Return Result; EndFunction #EndRegion #Region Private Function Convert(Parameters) Return Parameters; EndFunction Function Extract(Output) Return Output; EndFunction #EndRegion ``` #### CommonModules.Legacy ```bsl #Region Public Procedure WTFMethod(Input, Output) Export Output = "Shit"; EndProcedure #EndRegion ``` ## Где полезен в 1С - при оборачивании старых общих модулей с неудачным API; - при интеграции с внешними компонентами, COM или HTTP-клиентами; - когда нужно перейти на новый интерфейс без массовой переписи прикладного кода. ## Когда паттерн лишний - если старый код можно безопасно переделать без слоя совместимости; - если различия между интерфейсами минимальны; - если адаптер начинает содержать слишком много бизнес-логики и превращается в фасад или сервис. ## Источник примера - [zeegin/DesignPatterns: Adapter](https://github.com/zeegin/DesignPatterns/tree/master/Adapter) ### patterns:gof:bridge - Bridge URL: https://v8std.ru/patterns/gof/bridge/ Markdown URL: https://v8std.ru/patterns/gof/bridge/index.md Source path: patterns/gof/bridge/index.md Aliases: patterns:gof:bridge Related: related:patterns:principles External sources: нет # Мост (`Bridge`) `Bridge` разделяет абстракцию и реализацию так, чтобы их можно было развивать независимо. ## Опора на ООП `Bridge` опирается на [композицию, интерфейсы и полиморфизм](https://v8std.ru/patterns/principles/): абстракция не вшивает реализацию внутрь себя, а держит ссылку на отдельный объект с общим контрактом ## Что показывает пример на 1С - `DataProcessors.DocumentExporter` отвечает за прикладной сценарий экспорта, но не знает деталей конкретного формата. - `CommonModules.PdfRenderer` и `CommonModules.HtmlRenderer` реализуют единый контракт `Render(Data)`. - Клиент может менять реализацию рендера независимо от того, какой именно объект он экспортирует. ## Пример #### DataProcessors.Application ```bsl Exporter = DataProcessors.DocumentExporter.Create(); Exporter.SetRenderer(CommonModules.PdfRenderer); PdfResult = Exporter.Export(SalesOrderRef); Exporter.SetRenderer(CommonModules.HtmlRenderer); HtmlResult = Exporter.Export(SalesOrderRef); ``` #### DataProcessors.DocumentExporter ```bsl Var Renderer; #Region Public Procedure SetRenderer(Renderer_) Export Renderer = Renderer_; EndProcedure Function Export(DocumentRef) Export Data = PrepareData(DocumentRef); Return Renderer.Render(Data); EndFunction #EndRegion #Region Private Function PrepareData(DocumentRef) Data = New Structure; Data.Insert("Number", DocumentRef.Number); Data.Insert("Date", DocumentRef.Date); Return Data; EndFunction #EndRegion ``` #### CommonModules.PdfRenderer ```bsl Function Render(Data) Export Return "PDF:" + Data.Number; EndFunction ``` #### CommonModules.HtmlRenderer ```bsl Function Render(Data) Export Return "" + Data.Number + ""; EndFunction ``` ## Где полезен в 1С - когда прикладной объект и способ его представления меняются по разным причинам; - когда один и тот же сценарий должен работать с несколькими форматами вывода; - когда не хочется размножать комбинации вида `SalesOrderPdfExporter`, `SalesOrderHtmlExporter`, `InvoicePdfExporter`. ## Когда паттерн лишний - если реализация одна и не будет меняться; - если второй оси вариативности пока нет; - если композиция добавляет больше абстракции, чем дает реальной гибкости. ### patterns:gof:builder - Builder URL: https://v8std.ru/patterns/gof/builder/ Markdown URL: https://v8std.ru/patterns/gof/builder/index.md Source path: patterns/gof/builder/index.md Aliases: patterns:gof:builder Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Builder # Строитель (`Builder`) `Builder` отделяет сценарий сборки объекта от конкретного представления результата. ## Опора на ООП `Builder` опирается на [инкапсуляцию](https://v8std.ru/patterns/principles/): процесс сборки и промежуточное состояние объекта прячутся внутри строителя. Когда у строителей есть общий контракт шагов, подключается и полиморфизм ## Что показывает пример на 1С - `DataProcessors.Director` хранит ссылку на строителя и в `Make(Type, Manager)` выполняет общий сценарий: `Reset()`, `SetTelephone()`, `SetManager()`, при необходимости `SetDebt()`. - `LeadsBuilder` и `PartnersBuilder` реализуют одинаковые шаги, но собирают разные объекты метаданных. - В результате один и тот же алгоритм сборки порождает разные прикладные объекты без `Если ... Тогда` по типам во внешнем коде. ## Пример #### DataProcessors.Director ```bsl Var Builder; #Region Public Procedure Init(Builder_) Export Builder = Builder_; EndProcedure Function Make(Type, Manager) Export Builder.Reset(); Builder.SetTelephone(); Builder.SetManager(Manager); If Type = "CleanDebt" Then Builder.SetDebt(0); EndIf; Return Builder.GetResult(); EndFunction #EndRegion ``` #### DataProcessors.LeadsBuilder ```bsl Var Object; #Region Public Procedure Reset() Export Object = Catalogs.Leads.CreateItem(); EndProcedure Procedure SetTelephone(Tel) Export Object.Telephone = Tel; Object.CountryCode = ExtractCountryCode(Tel); EndProcedure Procedure SetManager(Manager) Export Object.ResponsiblePerson = Manager; EndProcedure Function GetResult() Return Object; EndFunction #EndRegion ``` #### DataProcessors.PartnersBuilder ```bsl Var Object; #Region Public Procedure Reset() Export Object = Catalogs.Partners.CreateItem(); EndProcedure Procedure SetTelephone(Tel) Export Object.Tel = Tel; EndProcedure Procedure SetManager(Manager) Export Object.Manager = Manager; EndProcedure Procedure SetDebt(Debt) Export Object.Debt = Debt; EndProcedure Function GetResult() Return Object; EndFunction #EndRegion ``` ## Вариации У `Builder` есть несколько распространенных форм. ### С директором и без директора - `С директором`: отдельный объект управляет шагами сборки и знает правильный порядок вызовов. Именно такой вариант показан в примере через `DataProcessors.Director`. - `Без директора`: клиент сам вызывает шаги строителя в нужном порядке. Это проще по структуре, если сценарий сборки короткий и не требует отдельной оркестрации. ### Классический и fluent-builder - `Классический builder`: методы вроде `Reset()`, `SetTelephone()` и `SetManager()` ничего не возвращают, а результат забирается отдельным `GetResult()`. - `Fluent builder`: каждый шаг возвращает самого строителя, чтобы можно было писать цепочки вызовов. Пример fluent-подхода на 1С: ```bsl Builder .Reset() .SetTelephone(Телефон) .SetManager(Менеджер) .SetDebt(0); Result = Builder.GetResult(); ``` В 1С fluent-вариант удобен для компактных сценариев, но классический builder обычно проще читать и отлаживать, особенно если шаги сборки связаны с побочными эффектами или клиент-серверным разделением. ## Где полезен в 1С - когда объект собирается в несколько этапов из разных источников данных; - когда есть несколько вариантов итогового результата при общем сценарии подготовки; - когда важно централизовать обязательные шаги создания объекта. ## Когда паттерн лишний - если объект создается одной строкой; - если различия между вариантами минимальны; - если строители только проксируют присваивания и не дают архитектурной пользы. ## Источник примера - [zeegin/DesignPatterns: Builder](https://github.com/zeegin/DesignPatterns/tree/master/Builder) ### patterns:gof:chain_of_responsibility - Chain of Responsibility URL: https://v8std.ru/patterns/gof/chain-of-responsibility/ Markdown URL: https://v8std.ru/patterns/gof/chain-of-responsibility/index.md Source path: patterns/gof/chain-of-responsibility/index.md Aliases: patterns:gof:chain_of_responsibility Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/ChainOfResponsibility # Цепочка обязанностей (`Chain of Responsibility`) `Chain of Responsibility` передает запрос по цепочке обработчиков, пока один из них не возьмет его на себя. ## Опора на ООП `Chain of Responsibility` опирается на [полиморфизм и интерфейсы](https://v8std.ru/patterns/principles/): каждое звено реализует общий контракт обработки, а клиент не знает, какое именно звено сработает. Инкапсуляция помогает локализовать отдельный шаг обработки внутри конкретного звена ## Что показывает пример на 1С - `DataProcessors.BaseHandler` хранит `NextHandler`, умеет делать `SetNext()` и по умолчанию делегирует `Handle(Request)` дальше. - `DeserializePartnerHandler`, `DeserializeProductsHandler` и `DeserializeWarehouseHandler` проверяют, их ли это запрос, и либо обрабатывают его, либо отдают следующему звену. - Такая структура особенно понятна в сценариях разбора входящих сообщений или каскадной валидации. ## Пример #### DataProcessors.BaseHandler ```bsl Var NextHandler; #Region Public Function SetNext(Handler) Export NextHandler = Handler; Return Handler; EndFunction Function Handle(Request) Export If NextHandler <> Undefined Then NextHandler.Handle(Request); EndIf; Return Undefined; EndFunction #EndRegion ``` #### DataProcessors.DeserializePartnerHandler ```bsl Var Super; #Region Public Function Init(Super_) Export Super = Super_; Return ThisObject; EndFunction Function Handle(Request) Export If IsPartner(Request) Then Return Deserialize(Request); EndIf; Return Super.Handle(Request); EndFunction #EndRegion ``` ## Вариации У `Chain of Responsibility` на практике есть как минимум две очень разные формы. ### 1. Цепочка выбора обработчика Это классический вариант: каждый обработчик решает, его это запрос или нет. - если обработчик подходит, он забирает запрос себе; - если не подходит, передает дальше; - в нормальном случае реальную работу выполняет только одно звено цепочки. Именно такой вариант показан в текущем примере с `DeserializePartnerHandler`, `DeserializeProductsHandler` и `DeserializeWarehouseHandler`: цепочка ищет, кто именно должен разобрать входящие данные. Такой стиль полезен, когда: - нужно определить тип входящего сообщения; - выбор зависит от правил или формата данных; - важна расширяемость без большого `Если ... ИначеЕсли`. ### 2. Цепочка обязательного pipeline Во второй вариации звенья не выбирают "кто из нас обработает запрос", а последовательно прогоняют его через обязательные шаги. - каждое звено делает свою часть работы; - после этого почти всегда передает управление дальше; - итоговый результат формируется после прохождения всей цепочки. Для 1С это может быть, например: - валидация данных; - нормализация входного пакета; - обогащение служебными полями; - проверка прав; - только потом основная обработка или запись. Такой вариант ближе не к маршрутизации, а к pipeline. Он полезен, когда все условия обязательны и их нужно проходить в фиксированном порядке до основной операции. Частный случай такого pipeline в 1С можно увидеть в обработке подписок на события объектов метаданных. По сути, объект последовательно проходит через несколько обязательных обработчиков, каждый из которых выполняет свою часть проверки, подготовки или синхронизации данных. ### Как различать эти варианты - `Цепочка выбора` отвечает на вопрос: кто должен это обработать? - `Цепочка-pipeline` отвечает на вопрос: какие обязательные шаги нужно пройти до обработки? Снаружи они могут выглядеть похоже, но архитектурно это разные сценарии. В первом случае обычно ищется одно подходящее звено, во втором почти вся цепочка должна отработать целиком. ## Где полезен в 1С - при маршрутизации входящих пакетов из интеграций; - при многошаговой проверке данных перед записью; - при последовательной попытке разных способов обработки. ## Когда паттерн лишний - если обработчиков один-два и порядок не меняется; - если проще и яснее оставить таблицу соответствий или `Если ... ИначеЕсли`; - если поведение цепочки непрозрачно и трудно отлаживается. ## Источник примера - [zeegin/DesignPatterns: ChainOfResponsibility](https://github.com/zeegin/DesignPatterns/tree/master/ChainOfResponsibility) ### patterns:gof:command - Command URL: https://v8std.ru/patterns/gof/command/ Markdown URL: https://v8std.ru/patterns/gof/command/index.md Source path: patterns/gof/command/index.md Aliases: patterns:gof:command Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Command # Команда (`Command`) `Command` превращает действие в отдельный объект или значение, которое можно передать, сохранить и выполнить позже. ## Опора на ООП `Command` в первую очередь опирается на [инкапсуляцию](https://v8std.ru/patterns/principles/): действие и его контекст упаковываются в отдельный объект или описание вызова. Полиморфизм появляется там, где разные команды исполняются через единый механизм ## Что показывает пример на 1С - `CommonModules.BackgroundWorker` выступает как `Invoker`: создает структуру работника и потом вызывает `ExecuteNotifyProcessing()` для команд завершения и прогресса. - В `CommonModules.Initialize` команды собираются через `NotifyDescription`, причем одна из них получает дополнительный `Context`. - В результате код фонового исполнителя не знает, что именно будет происходить по завершении или во время прогресса. ## Пример #### CommonModules.Initialize ```bsl #Region Public Procedure Init() Export // Note! NotifyDescription is a command object! UserName = "Harry"; // Some specifics context Worker = BackgroundWorker.NewWorker(); Worker.OnFinish = NewCommandOnFinish(); Worker.OnProgress = NewCommandOnProgress(UserName); BackgroundWorker.Run(Worker); EndProcedure #EndRegion #Region Internal #Region CommandOnFinish Function NewCommandOnFinish() Export Return New NotifyDescription("ExecCommandOnFinish", ThisObject); EndFunction Procedure ExecCommandOnFinish(Result, Context) Export // Do something... EndProcedure #EndRegion #Region CommandOnProgress Function NewCommandOnProgress(UserName) Export Context = New Structure; Context.Insert("UserName", UserName); Return New NotifyDescription("ExecCommandOnProgress", ThisObject, Context); EndFunction Procedure ExecCommandOnProgress(Result, Context) Export // Do something with Context.UserName EndProcedure #EndRegion #EndRegion ``` #### CommonModules.BackgroundWorker ```bsl #Region Public Function NewWorker() Export Self = New Structure; Self.Insert("OnFinish", Undefined); Self.Insert("OnProgress", Undefined); Return Self; EndFunction Procedure Run(Worker) Export // Invoker! ExecuteNotifyProcessing(Worker.OnProgress, "Specific Args 1"); ExecuteNotifyProcessing(Worker.OnFinish, "Specific Args 2"); EndProcedure #EndRegion ``` ## Где полезен в 1С - в фоновых заданиях и асинхронных сценариях; - в UI-обработчиках, где нужно передать действие вместе с контекстом; - в очередях операций, отложенных вызовах и повторном выполнении действий. ## Когда паттерн лишний - если можно прямо вызвать одну процедуру; - если команды ничем не отличаются и не живут дольше одного вызова; - если передача действий только усложняет трассировку. ## Источник примера - [zeegin/DesignPatterns: Command](https://github.com/zeegin/DesignPatterns/tree/master/Command) ### patterns:gof:composite - Composite URL: https://v8std.ru/patterns/gof/composite/ Markdown URL: https://v8std.ru/patterns/gof/composite/index.md Source path: patterns/gof/composite/index.md Aliases: patterns:gof:composite Related: related:patterns:principles External sources: нет # Компоновщик (`Composite`) `Composite` позволяет работать с одиночными объектами и деревьями объектов через единый контракт. ## Опора на ООП `Composite` опирается на [полиморфизм и интерфейсы](https://v8std.ru/patterns/principles/): и лист, и группа реализуют один и тот же контракт, поэтому клиенту не нужно знать, перед ним один узел или целая ветка ## Что показывает пример на 1С - `DataProcessors.ValidationGroup` хранит дочерние узлы и сам реализует тот же метод `Validate(Context)`, что и листья. - `RequiredFieldRule` и `PositiveAmountRule` выступают как листья дерева правил. - Клиент может запускать одну и ту же проверку и для одного правила, и для целой группы правил. ## Пример #### DataProcessors.Application ```bsl Rules = DataProcessors.ValidationGroup.Create(); RequiredRule = DataProcessors.RequiredFieldRule.Create(); RequiredRule.Init("Partner"); AmountRule = DataProcessors.PositiveAmountRule.Create(); AmountRule.Init("Amount"); Rules.Add(RequiredRule); Rules.Add(AmountRule); If Rules.Validate(DocumentData) Then Message("Validation passed"); EndIf; ``` #### DataProcessors.ValidationGroup ```bsl Var Children; #Region Public Procedure Add(Node) Export Children.Add(Node); EndProcedure Function Validate(Context) Export For Each Child In Children Do If Not Child.Validate(Context) Then Return False; EndIf; EndDo; Return True; EndFunction #EndRegion Children = New Array; ``` #### DataProcessors.RequiredFieldRule ```bsl Var FieldName; #Region Public Procedure Init(FieldName_) Export FieldName = FieldName_; EndProcedure Function Validate(Context) Export Return Context.Property(FieldName) And Context.Get(FieldName) <> Undefined; EndFunction #EndRegion ``` #### DataProcessors.PositiveAmountRule ```bsl Var FieldName; #Region Public Procedure Init(FieldName_) Export FieldName = FieldName_; EndProcedure Function Validate(Context) Export Return Context.Get(FieldName) > 0; EndFunction #EndRegion ``` ## Где полезен в 1С - для деревьев проверок, фильтров и маршрутов согласования; - для меню, настроек и иерархий команд; - когда одинаковая операция должна работать и на листе, и на группе элементов. ## Когда паттерн лишний - если структура не образует дерево; - если листья и группы ведут себя слишком по-разному; - если плоский список правил читается проще. ### patterns:gof:decorator - Decorator URL: https://v8std.ru/patterns/gof/decorator/ Markdown URL: https://v8std.ru/patterns/gof/decorator/index.md Source path: patterns/gof/decorator/index.md Aliases: patterns:gof:decorator Related: related:patterns:gof:proxy, related:patterns:principles External sources: нет # Декоратор (`Decorator`) `Decorator` добавляет объекту новое поведение через обертку, не меняя исходную реализацию. ## Опора на ООП `Decorator` опирается на [интерфейсы, композицию и полиморфизм](https://v8std.ru/patterns/principles/): декоратор реализует тот же контракт, что и оборачиваемый компонент, и делегирует ему базовую работу, добавляя свой слой поведения ## Что показывает пример на 1С - `CommonModules.HttpSender` реализует базовую отправку запроса. - `LoggingSenderDecorator` и `RetrySenderDecorator` оборачивают отправителя и добавляют логирование и повторные попытки. - Клиент собирает нужную цепочку поведения без изменения исходного отправителя. ## Пример #### DataProcessors.Application ```bsl Sender = CommonModules.HttpSender; SenderWithLog = DataProcessors.LoggingSenderDecorator.Create(); SenderWithLog.Init(Sender); SenderWithRetry = DataProcessors.RetrySenderDecorator.Create(); SenderWithRetry.Init(SenderWithLog); Response = SenderWithRetry.Send(Request); ``` #### CommonModules.HttpSender ```bsl Function Send(Request) Export Return Request.Body; EndFunction ``` #### DataProcessors.LoggingSenderDecorator ```bsl Var Component; #Region Public Procedure Init(Component_) Export Component = Component_; EndProcedure Function Send(Request) Export WriteLogEvent("Integration", EventLogLevel.Information, , , "Sending request"); Return Component.Send(Request); EndFunction #EndRegion ``` #### DataProcessors.RetrySenderDecorator ```bsl Var Component; #Region Public Procedure Init(Component_) Export Component = Component_; EndProcedure Function Send(Request) Export For Counter = 1 To 3 Do Try Return Component.Send(Request); Except EndTry; EndDo; Raise "Request failed"; EndFunction #EndRegion ``` ## Близость к Proxy `Decorator` очень похож на [Proxy](https://v8std.ru/patterns/gof/proxy/), потому что оба паттерна строятся как обертка вокруг компонента с тем же контрактом Из-за этого их легко спутать: - и там, и там есть внутренний компонент; - и там, и там вызов проходит через дополнительный слой; - и клиент часто не видит разницы по сигнатуре методов. Но смысл различается. - `Decorator` наращивает поведение; - `Proxy` контролирует доступ, создание или способ обращения к объекту. Поэтому для 1С полезно разделять их по намерению: - если слой добавляет логирование, ретраи, метрики или кэш вокруг вызова, это обычно `Decorator`; - если слой проверяет права, скрывает удаленный вызов или лениво создает тяжелый объект, это обычно `Proxy`. ## Где полезен в 1С - для логирования, кэширования, ретраев и профилирования вокруг сервиса; - для постепенного наращивания технического поведения без переписывания базовой логики; - когда один и тот же компонент нужно оборачивать разными комбинациями технических слоев. ## Когда паттерн лишний - если поведение проще явно вызвать рядом; - если оберток становится слишком много и цепочка трудно читается; - если декоратор начинает менять бизнес-смысл исходного компонента. ### patterns:gof:facade - Facade URL: https://v8std.ru/patterns/gof/facade/ Markdown URL: https://v8std.ru/patterns/gof/facade/index.md Source path: patterns/gof/facade/index.md Aliases: patterns:gof:facade Related: related:patterns:principles External sources: нет # Фасад (`Facade`) `Facade` дает простой внешний вход к сложной подсистеме. ## Опора на ООП `Facade` опирается прежде всего на [инкапсуляцию](https://v8std.ru/patterns/principles/): сложная координация нескольких модулей и объектов прячется за компактным внешним API ## Что показывает пример на 1С - `CommonModules.SalesOrderFacade` собирает в одной точке создание документа, заполнение, контроль остатков и проведение. - Клиентский код вызывает один понятный метод вместо серии обращений к разным подсистемам. - При этом фасад не отменяет внутренние сервисы, а только упрощает типовой сценарий работы с ними. ## Пример #### DataProcessors.Application ```bsl SalesOrder = CommonModules.SalesOrderFacade.CreateAndPost(Partner, Items); ``` #### CommonModules.SalesOrderFacade ```bsl Function CreateAndPost(Partner, Items) Export SalesOrder = Documents.SalesOrder.CreateDocument(); SalesOrderFilling.FillHeader(SalesOrder, Partner); SalesOrderFilling.FillItems(SalesOrder, Items); StockControl.CheckAvailability(SalesOrder); SalesOrder.Write(DocumentWriteMode.Posting); Return SalesOrder; EndFunction ``` #### CommonModules.StockControl ```bsl Procedure CheckAvailability(SalesOrder) Export // Check stock balances. EndProcedure ``` ## Где полезен в 1С - для типовых сценариев работы с документами, обменами и расчетами; - когда внутренняя подсистема состоит из нескольких сервисов и объектов; - когда внешнему коду нужен короткий и устойчивый API. ## Когда паттерн лишний - если фасад просто переименовывает один вызов; - если под фасадом начинает скапливаться вся бизнес-логика системы; - если разным клиентам нужны слишком разные сценарии и один вход их только запутывает. ### patterns:gof:factory_method - Factory Method URL: https://v8std.ru/patterns/gof/factory-method/ Markdown URL: https://v8std.ru/patterns/gof/factory-method/index.md Source path: patterns/gof/factory-method/index.md Aliases: patterns:gof:factory_method Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/FactoryMethod # Фабричный метод (`Factory Method`) `Factory Method` делегирует создание конкретного объекта специальному методу. ## Опора на ООП `Factory Method` классически построен прежде всего на [полиморфизме](https://v8std.ru/patterns/principles/): клиент вызывает общий способ создания, а конкретная реализация сама решает, какой объект вернуть. В этом смысле паттерн напрямую вырастает из идеи полиморфизма ## Что показывает пример на 1С - `CommonModules.ClientSpecific` экспортирует `CreateWrapper()` и возвращает `DataProcessors.COMWrapper.Create()`. - Идея в том, что другой создатель, например для веб-клиента, может вернуть другую обертку при том же клиентском контракте. - Внешний код просит "создай подходящий wrapper", а не выбирает конкретный `DataProcessor` сам. ## Пример #### CommonModules.ClientSpecific ```bsl #Region Public Function CreateWrapper() Export Return DataProcessors.COMWrapper.Create(); EndFunction #EndRegion ``` #### DataProcessors.COMWrapper ```bsl #Region Public Function Init(COMObject) Export Return "Transformation"; EndFunction #EndRegion ``` ## Где полезен в 1С - когда создание зависит от типа клиента или канала интеграции; - когда нужно изолировать логику выбора конкретной реализации; - когда важен единый вход для создания однотипных оберток и адаптеров. ## Когда паттерн лишний - если тип реализации не меняется; - если выбор делается один раз и проще описывается простым условием; - если фабричный метод превращается в склад разрозненных `Если`. ## Источник примера - [zeegin/DesignPatterns: FactoryMethod](https://github.com/zeegin/DesignPatterns/tree/master/FactoryMethod) ### patterns:gof:flyweight - Flyweight URL: https://v8std.ru/patterns/gof/flyweight/ Markdown URL: https://v8std.ru/patterns/gof/flyweight/index.md Source path: patterns/gof/flyweight/index.md Aliases: patterns:gof:flyweight Related: related:patterns:principles External sources: нет # Приспособленец (`Flyweight`) `Flyweight` выносит общую часть состояния, чтобы не хранить одинаковые данные в большом количестве однотипных объектов. ## Опора на ООП `Flyweight` опирается на [инкапсуляцию и композицию](https://v8std.ru/patterns/principles/): неизменяемая общая часть состояния живет в разделяемом объекте, а внешний контекст передается отдельно в момент использования ## Что показывает пример на 1С - `CommonModules.CellStyleFactory` кэширует небольшое число объектов стиля по коду. - `ReportCellPainter` получает стиль как разделяемую часть, а конкретный текст и ячейку как внешнее состояние. - Один и тот же объект стиля можно переиспользовать для множества строк отчета или табличного документа. ## Пример #### DataProcessors.Application ```bsl ErrorStyle = CommonModules.CellStyleFactory.GetStyle("Error"); WarningStyle = CommonModules.CellStyleFactory.GetStyle("Warning"); Painter = DataProcessors.ReportCellPainter.Create(); Painter.DrawCell(Cell1, ErrorStyle, "Over limit"); Painter.DrawCell(Cell2, ErrorStyle, "Missing data"); Painter.DrawCell(Cell3, WarningStyle, "Close to threshold"); ``` #### CommonModules.CellStyleFactory ```bsl Var Cache; #Region Public Function GetStyle(Code) Export If Cache.ContainsKey(Code) Then Return Cache.Get(Code); EndIf; Style = CreateStyle(Code); Cache.Insert(Code, Style); Return Style; EndFunction #EndRegion #Region Private Function CreateStyle(Code) If Code = "Error" Then Return New Structure("Color,Bold", "Red", True); EndIf; Return New Structure("Color,Bold", "Orange", False); EndFunction #EndRegion Cache = New Map; ``` #### DataProcessors.ReportCellPainter ```bsl Procedure DrawCell(Cell, Style, Text) Export Cell.Text = Text; Cell.TextColor = Style.Color; Cell.FontBold = Style.Bold; EndProcedure ``` ## Где полезен в 1С - при большом количестве однотипных настроек оформления; - в кэшах метаданных, описаний колонок, шаблонов и справочных структур; - когда общих комбинаций мало, а объектов применения много. ## Когда паттерн лишний - если объектов немного и экономия несущественна; - если разделяемое состояние часто меняется; - если внешнее состояние становится слишком сложным и неудобным для передачи. ### patterns:gof - GOF URL: https://v8std.ru/patterns/gof/ Markdown URL: https://v8std.ru/patterns/gof/index.md Source path: patterns/gof/index.md Aliases: patterns:gof Related: - related:patterns:gof:abstract_factory - related:patterns:gof:adapter - related:patterns:gof:bridge - related:patterns:gof:builder - related:patterns:gof:chain_of_responsibility - related:patterns:gof:command - related:patterns:gof:composite - related:patterns:gof:decorator - related:patterns:gof:facade - related:patterns:gof:factory_method - related:patterns:gof:flyweight - related:patterns:gof:interpreter - related:patterns:gof:iterator - related:patterns:gof:mediator - related:patterns:gof:memento - related:patterns:gof:observer - related:patterns:gof:prototype - related:patterns:gof:proxy - related:patterns:gof:singleton - related:patterns:gof:state - related:patterns:gof:strategy - related:patterns:gof:template_method - related:patterns:gof:visitor External sources: - https://github.com/zeegin/DesignPatterns/tree/master/AbstractFactory - https://github.com/zeegin/DesignPatterns/tree/master/Builder - https://github.com/zeegin/DesignPatterns/tree/master/FactoryMethod - https://github.com/zeegin/DesignPatterns/tree/master/Prototype - https://github.com/zeegin/DesignPatterns/tree/master/Singleton - https://github.com/zeegin/DesignPatterns/tree/master/Adapter - https://github.com/zeegin/DesignPatterns/tree/master/ChainOfResponsibility - https://github.com/zeegin/DesignPatterns/tree/master/Command - https://github.com/zeegin/DesignPatterns/tree/master/Iterator - https://github.com/zeegin/DesignPatterns/tree/master/Mediator - https://github.com/zeegin/DesignPatterns/tree/master/Memento - https://github.com/zeegin/DesignPatterns/tree/master/Observer - https://github.com/zeegin/DesignPatterns/tree/master/State - https://github.com/zeegin/DesignPatterns/tree/master/Strategy - https://github.com/zeegin/DesignPatterns/tree/master/TemplateMethod - https://github.com/zeegin/DesignPatterns/tree/master/Visitor `GOF` — это набор из 23 классических паттернов проектирования из книги *Design Patterns: Elements of Reusable Object-Oriented Software*. ## Как читать раздел 1. Сначала понять намерение паттерна, а не копировать форму. 2. Потом посмотреть, как эта идея раскладывается на объекты метаданных, общие модули, формы и обработчики в 1С. 3. И только после этого решать, нужен ли паттерн в прикладной задаче или достаточно более простого кода. ## Порождающие паттерны | Паттерн | Коротко | Пример | | --- | --- | --- | | [Абстрактная фабрика](https://v8std.ru/patterns/gof/abstract-factory/) (`Abstract Factory`) | Создает семейства связанных объектов через единый интерфейс. | [AbstractFactory](https://github.com/zeegin/DesignPatterns/tree/master/AbstractFactory) | | [Строитель](https://v8std.ru/patterns/gof/builder/) (`Builder`) | Разделяет процесс пошаговой сборки сложного объекта и его итоговое представление. | [Builder](https://github.com/zeegin/DesignPatterns/tree/master/Builder) | | [Фабричный метод](https://v8std.ru/patterns/gof/factory-method/) (`Factory Method`) | Делегирует создание объектов специализированному методу или подклассу. | [FactoryMethod](https://github.com/zeegin/DesignPatterns/tree/master/FactoryMethod) | | [Прототип](https://v8std.ru/patterns/gof/prototype/) (`Prototype`) | Создает новые объекты копированием заранее настроенного экземпляра. | [Prototype](https://github.com/zeegin/DesignPatterns/tree/master/Prototype) | | [Одиночка](https://v8std.ru/patterns/gof/singleton/) (`Singleton`) | Ограничивает создание класса одним экземпляром и дает глобальную точку доступа. | [Singleton](https://github.com/zeegin/DesignPatterns/tree/master/Singleton) | ## Структурные паттерны | Паттерн | Коротко | Пример | | --- | --- | --- | | [Адаптер](https://v8std.ru/patterns/gof/adapter/) (`Adapter`) | Приводит несовместимый интерфейс к ожидаемому клиентом виду. | [Adapter](https://github.com/zeegin/DesignPatterns/tree/master/Adapter) | | [Мост](https://v8std.ru/patterns/gof/bridge/) (`Bridge`) | Разделяет абстракцию и реализацию, чтобы их можно было развивать независимо. | | | [Компоновщик](https://v8std.ru/patterns/gof/composite/) (`Composite`) | Позволяет работать с одиночными объектами и их деревьями единообразно. | | | [Декоратор](https://v8std.ru/patterns/gof/decorator/) (`Decorator`) | Добавляет объекту поведение через обертку, не меняя исходный класс. | | | [Фасад](https://v8std.ru/patterns/gof/facade/) (`Facade`) | Дает простой внешний вход к сложной подсистеме. | | | [Приспособленец](https://v8std.ru/patterns/gof/flyweight/) (`Flyweight`) | Выносит общую часть состояния, чтобы экономить память на большом числе однотипных объектов. | | | [Заместитель](https://v8std.ru/patterns/gof/proxy/) (`Proxy`) | Подставляет специальный объект вместо реального и контролирует доступ к нему. | | ## Поведенческие паттерны | Паттерн | Коротко | Пример | | --- | --- | --- | | [Цепочка обязанностей](https://v8std.ru/patterns/gof/chain-of-responsibility/) (`Chain of Responsibility`) | Передает запрос по цепочке обработчиков, пока кто-то не возьмет его на себя. | [ChainOfResponsibility](https://github.com/zeegin/DesignPatterns/tree/master/ChainOfResponsibility) | | [Команда](https://v8std.ru/patterns/gof/command/) (`Command`) | Представляет действие как отдельный объект. | [Command](https://github.com/zeegin/DesignPatterns/tree/master/Command) | | [Интерпретатор](https://v8std.ru/patterns/gof/interpreter/) (`Interpreter`) | Описывает грамматику языка и интерпретирует выражения этого языка. | | | [Итератор](https://v8std.ru/patterns/gof/iterator/) (`Iterator`) | Дает способ обходить коллекцию, не раскрывая ее внутреннее устройство. | [Iterator](https://github.com/zeegin/DesignPatterns/tree/master/Iterator) | | [Посредник](https://v8std.ru/patterns/gof/mediator/) (`Mediator`) | Централизует взаимодействие между объектами и уменьшает прямые связи между ними. | [Mediator](https://github.com/zeegin/DesignPatterns/tree/master/Mediator) | | [Снимок](https://v8std.ru/patterns/gof/memento/) (`Memento`) | Сохраняет и восстанавливает внутреннее состояние объекта. | [Memento](https://github.com/zeegin/DesignPatterns/tree/master/Memento) | | [Наблюдатель](https://v8std.ru/patterns/gof/observer/) (`Observer`) | Подписчики получают уведомление об изменении состояния издателя. | [Observer](https://github.com/zeegin/DesignPatterns/tree/master/Observer) | | [Состояние](https://v8std.ru/patterns/gof/state/) (`State`) | Перекладывает поведение по состояниям в отдельные объекты-состояния. | [State](https://github.com/zeegin/DesignPatterns/tree/master/State) | | [Стратегия](https://v8std.ru/patterns/gof/strategy/) (`Strategy`) | Инкапсулирует взаимозаменяемые алгоритмы за единым интерфейсом. | [Strategy](https://github.com/zeegin/DesignPatterns/tree/master/Strategy) | | [Шаблонный метод](https://v8std.ru/patterns/gof/template-method/) (`Template Method`) | Задает каркас алгоритма, оставляя отдельные шаги на расширение. | [TemplateMethod](https://github.com/zeegin/DesignPatterns/tree/master/TemplateMethod) | | [Посетитель](https://v8std.ru/patterns/gof/visitor/) (`Visitor`) | Выносит операции над структурой объектов в отдельный объект-посетитель. | [Visitor](https://github.com/zeegin/DesignPatterns/tree/master/Visitor) | ### patterns:gof:interpreter - Interpreter URL: https://v8std.ru/patterns/gof/interpreter/ Markdown URL: https://v8std.ru/patterns/gof/interpreter/index.md Source path: patterns/gof/interpreter/index.md Aliases: patterns:gof:interpreter Related: related:patterns:principles External sources: нет # Интерпретатор (`Interpreter`) `Interpreter` описывает грамматику небольшого языка и выполняет выражения этого языка над заданным контекстом. ## Опора на ООП `Interpreter` опирается на [полиморфизм и композицию](https://v8std.ru/patterns/principles/): каждое выражение реализует общий контракт интерпретации, а сложные выражения собираются из более простых ## Что показывает пример на 1С - `EqualsStatusExpression` и `AmountGreaterExpression` интерпретируют простые правила над одним и тем же контекстом. - `AndExpression` собирает из них составное выражение. - Клиент работает уже не с длинным `Если`, а с объектным представлением простого DSL. ## Пример #### DataProcessors.Application ```bsl Context = New Structure; Context.Insert("Status", "Ready"); Context.Insert("Amount", 1500); StatusExpression = DataProcessors.EqualsStatusExpression.Create(); StatusExpression.Init("Ready"); AmountExpression = DataProcessors.AmountGreaterExpression.Create(); AmountExpression.Init(1000); Rule = DataProcessors.AndExpression.Create(); Rule.Init(StatusExpression, AmountExpression); If Rule.Interpret(Context) Then Message("Rule matched"); EndIf; ``` #### DataProcessors.EqualsStatusExpression ```bsl Var ExpectedStatus; #Region Public Procedure Init(ExpectedStatus_) Export ExpectedStatus = ExpectedStatus_; EndProcedure Function Interpret(Context) Export Return Context.Get("Status") = ExpectedStatus; EndFunction #EndRegion ``` #### DataProcessors.AmountGreaterExpression ```bsl Var Limit; #Region Public Procedure Init(Limit_) Export Limit = Limit_; EndProcedure Function Interpret(Context) Export Return Context.Get("Amount") > Limit; EndFunction #EndRegion ``` #### DataProcessors.AndExpression ```bsl Var LeftExpression; Var RightExpression; #Region Public Procedure Init(LeftExpression_, RightExpression_) Export LeftExpression = LeftExpression_; RightExpression = RightExpression_; EndProcedure Function Interpret(Context) Export Return LeftExpression.Interpret(Context) And RightExpression.Interpret(Context); EndFunction #EndRegion ``` ## Где полезен в 1С - для небольших DSL правил, фильтров и формул; - для интерпретации настроек маршрутов, условий скидок и выражений отбора; - когда предметная область уже оперирует собственным маленьким языком. ## Когда паттерн лишний - если правило проще записать обычным кодом; - если язык быстро становится слишком большим и требует полноценного парсера; - если объектная модель выражений сложнее самой задачи. ### patterns:gof:iterator - Iterator URL: https://v8std.ru/patterns/gof/iterator/ Markdown URL: https://v8std.ru/patterns/gof/iterator/index.md Source path: patterns/gof/iterator/index.md Aliases: patterns:gof:iterator Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Iterator # Итератор (`Iterator`) `Iterator` позволяет обходить коллекцию, не раскрывая клиенту ее внутреннее устройство. ## Опора на ООП `Iterator` опирается на [инкапсуляцию и интерфейсы](https://v8std.ru/patterns/principles/): внутренняя структура коллекции скрыта, а наружу выставлен только контракт обхода. Полиморфизм полезен, когда у одной коллекции есть несколько взаимозаменяемых обходчиков ## Что показывает пример на 1С - `DataProcessors.WordsCollection` скрывает внутренний `Array` и отдает обходчик через `Iterator(Reverse = False)`. - `DataProcessors.AlphabeticalOrderIterator` хранит `Collection`, `Position`, `Reverse` и предоставляет методы `Next()` и `Value()`. - Клиент работает с обходом как с отдельным объектом и не зависит от способа хранения коллекции. ## Пример #### DataProcessors.Application ```bsl WordsCollection = DataProcessors.WordsCollection.Create(); WordsCollection.Add("Gamma"); WordsCollection.Add("Alpha"); WordsCollection.Add("Beta"); Iterator = WordsCollection.Iterator(); While Iterator.Next() Do Message(Iterator.Value()); EndDo; ``` #### DataProcessors.WordsCollection ```bsl Var Collection; #Region Public Procedure Add(Value) Export Collection.Add(Value); EndProcedure Function Iterator(Reverse = False) Export Iterator = DataProcessors.AlphabeticalOrderIterator.Create(); Iterator.Init(Collection, Reverse); Return Iterator; EndFunction #EndRegion Collection = New Array; ``` #### DataProcessors.AlphabeticalOrderIterator ```bsl Var Collection; Var Reverse; Var Position; #Region Public Procedure Init(Collection_, Reverse_) Export Collection = Collection_; Reverse = Reverse_; Position = ?(Reverse, -1, 0); EndProcedure Function Next() Export Try Position = Position + ?(Reverse, -1, 1); Except Return False; EndTry; Return True; EndFunction Function Value() Export Return Collection[Position]; EndFunction #EndRegion ``` ## Вариации У `Iterator` есть близкая вариация, которую часто называют `генератором`. ### Классический итератор В классическом варианте коллекция уже существует целиком, а итератор только знает, как по ней пройти. - данные уже лежат в `Array`, `ValueTable`, выборке или другой структуре; - итератор хранит позицию обхода; - следующий элемент берется из уже подготовленного источника. Именно такой вариант показан в примере выше: `WordsCollection` хранит массив, а `AlphabeticalOrderIterator` только управляет позицией и направлением обхода. ### Генератор `Генератор` похож на итератор по внешнему контракту, но отличается источником данных. - элементы не обязательно существуют заранее; - следующий элемент может вычисляться, подгружаться или строиться на лету; - объект хранит состояние не только обхода, но и самого процесса порождения значений. Если упростить: - `Iterator` отвечает на вопрос: как пройти уже существующую коллекцию? - `Generator` отвечает на вопрос: как выдавать следующий элемент по требованию? Для 1С это особенно полезно, когда не хочется сначала собирать всю коллекцию в память, а потом отдельно обходить ее. Например: - построчное чтение файла; - поэтапная обработка большой выборки; - чтение данных из внешнего API страницами; - последовательное построение команд, задач или событий. В 1С нет встроенного `yield`, как в Python или C#, поэтому генератор обычно оформляется как обычный объект с состоянием. Снаружи он нередко выглядит почти так же, как итератор: ```bsl While Generator.Next() Do Process(Generator.Value()); EndDo; ``` Практический пример для 1С: получение списка через HTTP API с пагинацией. Представим, что внешний сервис отдает клиентов не целиком, а страницами по `100` записей: - первый запрос получает первую страницу и `nextPageToken`; - второй запрос получает следующую страницу по этому токену; - и так далее, пока страницы не закончатся. Если собирать все страницы заранее, то внешний код сначала скачает весь список, потом сложит его в `Array` или `ValueTable`, и только после этого начнет обработку. Для больших выборок это лишняя память и лишняя задержка. Генератор позволяет оформить это лениво: - объект хранит `HttpClient`, `NextPageToken`, текущий буфер элементов и признак завершения; - при `Next()` он проверяет, есть ли элемент в текущем буфере; - если буфер пуст, делает следующий HTTP-запрос, заполняет буфер новой страницей и только потом отдает очередной элемент; - если сервис больше не вернул `nextPageToken`, генератор понимает, что данные закончились. Снаружи клиентский код при этом остается простым: ```bsl While CustomersGenerator.Next() Do ProcessCustomer(CustomersGenerator.Value()); EndDo; ``` В этом и ценность генератора: клиент обходит поток элементов одинаково, хотя внутри объект может в любой момент: - сходить в HTTP; - дочитать следующую страницу; - остановиться после последней страницы; - прекратить работу раньше, если клиенту уже достаточно данных. Но внутри он уже не берет элемент из готового массива, а сам: - вычисляет следующее значение; - дочитывает очередную порцию данных; - при необходимости завершает выдачу, когда источник исчерпан. Поэтому генератор можно считать ленивой вариацией итератора. В терминах архитектуры разница простая: итератор обходит, генератор порождает. ## Где полезен в 1С - когда у одной коллекции нужно несколько вариантов обхода; - когда коллекция сложная и не хочется раскрывать ее внутреннюю структуру наружу; - когда обход должен быть независимым объектом с собственным состоянием. ## Когда паттерн лишний - если достаточно обычного `Для Каждого`; - если коллекция не меняет способ хранения; - если отдельный объект обхода выглядит тяжелее самой задачи. ## Источник примера - [zeegin/DesignPatterns: Iterator](https://github.com/zeegin/DesignPatterns/tree/master/Iterator) ### patterns:gof:mediator - Mediator URL: https://v8std.ru/patterns/gof/mediator/ Markdown URL: https://v8std.ru/patterns/gof/mediator/index.md Source path: patterns/gof/mediator/index.md Aliases: patterns:gof:mediator Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Mediator # Посредник (`Mediator`) `Mediator` централизует взаимодействие между объектами, чтобы они меньше зависели друг от друга напрямую. ## Опора на ООП `Mediator` в первую очередь опирается на [инкапсуляцию](https://v8std.ru/patterns/principles/): связи и координация выносятся из участников в отдельный объект. Если посредников несколько и они взаимозаменяемы, подключается и полиморфизм общего контракта ## Что показывает пример на 1С - В `CommonForms.Initialize` обработчики `UserOnChange`, `EmailOnChange`, `CountryOnChange`, `OK()` и `Cancel()` не вызывают друг друга напрямую, а только посылают `Notify(...)`. - `NotificationProcessing(EventName, Parameter, Source)` - это обработчик стандартного события формы, который принимает уведомления и решает, как на них реагировать. - `Notify(...)` в этом примере - не вспомогательная функция из проекта, а платформенный метод 1С. - Это типичный 1С-сценарий для сложной формы, где много элементов могут влиять друг на друга. ## Пример #### CommonForms.Initialize ```bsl #Region FormEventHandlers &AtClient Procedure NotificationProcessing(EventName, Parameter, Source) If Source <> ThisObject Then Return; EndIf; If EventName = "UserChanged" Then // Do something... EndIf; EndProcedure #EndRegion #Region FormHeaderItemsEventHandlers &AtClient Procedure UserOnChange(Item) Notify("UserChanged", Item, ThisObject); EndProcedure #EndRegion ``` ## Особенность 1С Для 1С здесь важен практический момент: паттерн `Mediator` во многих UI-сценариях уже реализован самой платформой. - `Notify(...)` отправляет уведомление; - `NotificationProcessing(...)` как стандартный обработчик события формы централизованно его обрабатывает; - элементы формы не обязаны знать друг о друге напрямую. То есть в управляемых формах 1С посредника часто не нужно проектировать с нуля отдельными классами. Обычно его уже дает платформа, и задача разработчика - использовать этот механизм по назначению: - развязывать взаимозависимые элементы формы; - не строить прямые вызовы между обработчиками; - держать координацию в одном понятном месте. Поэтому `Mediator` в 1С - это не только учебный паттерн из GOF, но и практический встроенный инструмент, который уже есть в платформе и которым нужно пользоваться осознанно. ## Где полезен в 1С - в формах с большим количеством взаимосвязанных реквизитов; - в мастерах, редакторах и настройках с несколькими зависимыми областями; - когда хаотичные прямые вызовы между элементами формы уже стали неуправляемыми. ## Когда паттерн лишний - если в форме только одна-две зависимости; - если посредник превращается в огромный `NotificationProcessing` на сотни строк; - если взаимодействие проще локализовать в одном обработчике. ## Источник примера - [zeegin/DesignPatterns: Mediator](https://github.com/zeegin/DesignPatterns/tree/master/Mediator) ### patterns:gof:memento - Memento URL: https://v8std.ru/patterns/gof/memento/ Markdown URL: https://v8std.ru/patterns/gof/memento/index.md Source path: patterns/gof/memento/index.md Aliases: patterns:gof:memento Related: related:patterns:principles External sources: - https://v8.1c.ru/platforma/istoriya-dannyh/ - https://1c-dn.com/library/v8update_2079252602_new_functionality_and_changes/ - https://downloads.v8.1c.ru/content/Platform/8_3_14_1494/1cv8upd_8_3_14_1494.htm - https://1c-dn.com/library/v8update_2079252604_new_functionality_and_changes/ - https://github.com/zeegin/DesignPatterns/tree/master/Memento # Снимок (`Memento`) `Memento` сохраняет состояние объекта так, чтобы потом можно было откатиться назад, не раскрывая наружу все внутренние детали. ## Опора на ООП `Memento` опирается прежде всего на [инкапсуляцию](https://v8std.ru/patterns/principles/): внутреннее состояние сохраняется во внешнем снимке без раскрытия всей внутренней структуры объекта ## Что показывает пример на 1С - `DataProcessors.Editor` в `CreateSnapshot()` сам снимает свое состояние в `Structure`: простые значения, массив сериализованных строк таблицы и остальные данные состояния. - `DataProcessors.SnapshotSpace` хранит снимки и умеет восстанавливать объект из выбранного источника снимка. - Снимок хранит не ссылки на внутренние структуры редактора, а отдельное представление, пригодное для восстановления. - Для 1С это особенно полезно там, где пользователь долго редактирует объект и ожидает отката или истории изменений. ## Пример #### DataProcessors.Application ```bsl Editor = DataProcessors.Editor.Create(); SnapshotSpace = DataProcessors.SnapshotSpace.Create(); SnapshotSpace.Save("draft-1", Editor.CreateSnapshot()); Editor.SetValue("Changed value"); Editor.SetData("Changed data"); SnapshotSpace.Save("draft-2", Editor.CreateSnapshot()); SnapshotSpace.Restore(Editor, "draft-1"); ``` #### DataProcessors.Editor ```bsl #Region Public Procedure SetValue(NewValue) Export Value = NewValue; EndProcedure Procedure SetData(NewData) Export Data = NewData; EndProcedure Function CreateSnapshot() Export Self = New Structure; Self.Insert("Value", Value); Self.Insert("Data", Data); SerializedTable = New Array; For Each RowTable In Table Do Row = New Structure; Row.Insert("Key", RowTable.Key); Row.Insert("Val", RowTable.Val); SerializedTable.Add(Row); EndDo; Self.Insert("Table", SerializedTable); Return Self; EndFunction Procedure Restore(Snapshot) Export Value = Snapshot.Value; Data = Snapshot.Data; Table = New ValueTable; Table.Columns.Add("Key"); Table.Columns.Add("Val"); For Each SnapshotRow In Snapshot.Table Do Row = Table.Add(); Row.Key = SnapshotRow.Key; Row.Val = SnapshotRow.Val; EndDo; EndProcedure #EndRegion ``` #### DataProcessors.SnapshotSpace ```bsl Var Snapshots; #Region Public Procedure Save(Key, Snapshot) Export Snapshots.Insert(Key, Snapshot); EndProcedure Function GetSnapshot(Key) Export Return Snapshots.Get(Key); EndFunction Procedure Restore(Target, Key) Export Snapshot = GetSnapshot(Key); If Snapshot = Undefined Then Return; EndIf; Target.Restore(Snapshot); EndProcedure #EndRegion Snapshots = New Map; ``` ## Как обычно распределяются роли У `Memento` важно не только хранение снимка, но и распределение ответственности. - `Originator` сам снимает снимок с себя, потому что только он знает, какие данные действительно составляют его корректное внутреннее состояние; - `Caretaker` или пространство снимков не лезет внутрь объекта, а только хранит версии и решает, какую из них нужно вернуть; - восстановление часто инициируется именно из пространства истории, а не из самого объекта. Поэтому на практике часто получается такая схема: - объект делает `CreateSnapshot()`; - пространство истории сохраняет снимок; - позже пространство истории вызывает `Restore(...)` для выбранной версии. Именно это показано в примере выше через `SnapshotSpace.Restore(Editor, "draft-1")`. ## Платформенный пример в 1С: история данных У платформы 1С этот паттерн во многом уже реализован встроенным механизмом [История данных](https://v8.1c.ru/platforma/istoriya-dannyh/). Официальное описание платформы прямо говорит, что механизм хранит версии данных, позволяет сравнивать версии и восстанавливать данные в состояние выбранной версии. Архитектурно это очень близко к `Memento`: - прикладной объект выступает источником состояния; - платформа хранит версии в собственном пространстве истории; - восстановление идет не "изнутри" прикладного кода, а через механизм истории и переход на выбранную версию. В документации это видно по нескольким точкам расширения и вызовам: - в версии `8.3.11` появился глобальный доступ к механизму через свойство `ИсторияДанных` / `DataHistory`, то есть пространство снимков стало доступно из встроенного языка ([1C:DN](https://1c-dn.com/library/v8update_2079252602_new_functionality_and_changes/)); - для анализа двух версий платформа использует вызовы вида `ИсторияДанных.ПолучитьРазличиеВерсий(...)`, что прямо показывает работу не с живым объектом, а с двумя сохраненными снимками ([V8Update 8.3.14](https://downloads.v8.1c.ru/content/Platform/8_3_14_1494/1cv8upd_8_3_14_1494.htm)); - при переходе на выбранную историческую версию разработчик может подключиться через обработчик `ОбработкаФормированияПоВерсииИсторииДанных()`, а номер версии передается в форму через параметр `НомерВерсииПереходаНаВерсиюИсторииДанных` ([1C:DN, версия 8.3.13](https://1c-dn.com/library/v8update_2079252604_new_functionality_and_changes/)); - для конкретного объекта документация также описывает принудительное обновление истории через метод `DataHistory.UpdateHistory()`, если нужно добрать версии именно для выбранного объекта ([1C:DN, версия 8.3.13](https://1c-dn.com/library/v8update_2079252604_new_functionality_and_changes/)). Из этого следует важный практический вывод для 1С: сам снимок обычно относится к объекту, а выбор версии и восстановление чаще относятся уже к пространству истории. Это ровно та роль, которую в паттерне `Memento` играет внешний хранитель снимков. ## Где полезен в 1С - в редакторах документов и настроек; - в мастерах, где нужен шаг назад; - в сценариях локального undo без записи промежуточных состояний в базу. ## Когда паттерн лишний - если состояние дешево пересчитать заново; - если история не нужна; - если копирование больших структур становится слишком дорогим. ## Источник примера - [zeegin/DesignPatterns: Memento](https://github.com/zeegin/DesignPatterns/tree/master/Memento) ### patterns:gof:observer - Observer URL: https://v8std.ru/patterns/gof/observer/ Markdown URL: https://v8std.ru/patterns/gof/observer/index.md Source path: patterns/gof/observer/index.md Aliases: patterns:gof:observer Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Observer # Наблюдатель (`Observer`) `Observer` позволяет издателю уведомлять подписчиков об изменениях, не зная деталей их реакции. ## Опора на ООП `Observer` опирается на [интерфейсы и полиморфизм](https://v8std.ru/patterns/principles/): издатель работает с общим контрактом подписчика, а конкретные реакции распределены по разным наблюдателям. Инкапсуляция при этом удерживает слабую связанность между сторонами ## Что показывает пример на 1С - `DataProcessors.EventManager` хранит подписчиков в `Map`, умеет `Subscribe()`, `Unsubscribe()` и `NotifySubscribers(Data)`. - `DataProcessors.Subject` выполняет свою логику и затем вызывает `EventManager.NotifySubscribers("Success")`. - `Documents.SalesOrder` и `Catalogs.Partner` реализуют метод `Update(Data)` и могут выступать подписчиками. ## Пример #### DataProcessors.Application ```bsl Subject = DataProcessors.Subject.Create(); SalesOrder = Documents.SalesOrder.CreateDocument(); Partner = Catalogs.Partner.CreateItem(); Subject.EventManager.Subscribe(SalesOrder); Subject.EventManager.Subscribe(Partner); Subject.BusinessLogic(); ``` #### DataProcessors.EventManager ```bsl Var Listeners; Procedure Subscribe(Subscriber) Export Listeners.Insert(Subscriber, True); EndProcedure Procedure Unsubscribe(Subscriber) Export Listeners.Delete(Subscriber); EndProcedure Procedure NotifySubscrbers(Data) Export For Each Listener In Listeners Do Listener.Update(Data); EndDo; EndProcedure Listeners = New Map; ``` #### DataProcessors.Subject ```bsl Var EventManager Export; #Region Public Function BusinessLogic() Export // Some logic EventManager.NotifySubscribers("Success"); EndFunction #EndRegion EventManager = DataProcessors.EventManager.Create(); ``` #### Documents.SalesOrder ```bsl Procedure Update(Data) Export Message("Sales order received event: " + Data); EndProcedure ``` #### Catalogs.Partner ```bsl Procedure Update(Data) Export Message("Partner received event: " + Data); EndProcedure ``` ## Где полезен в 1С - для реакций на доменные события; - для отделения публикации события от действий подписчиков; - для уведомлений, синхронизации витрин, логирования и вспомогательных процессов. ## Когда паттерн лишний - если получатель всегда один и известен заранее; - если цепочка подписчиков скрывает важную бизнес-логику; - если нет дисциплины в управлении подписками и жизненным циклом объектов. ## Источник примера - [zeegin/DesignPatterns: Observer](https://github.com/zeegin/DesignPatterns/tree/master/Observer) ### patterns:gof:prototype - Prototype URL: https://v8std.ru/patterns/gof/prototype/ Markdown URL: https://v8std.ru/patterns/gof/prototype/index.md Source path: patterns/gof/prototype/index.md Aliases: patterns:gof:prototype Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Prototype # Прототип (`Prototype`) `Prototype` создает новый объект копированием уже подготовленного образца. ## Опора на ООП `Prototype` в первую очередь опирается на [инкапсуляцию состояния](https://v8std.ru/patterns/principles/): объект сам определяет, что именно будет копироваться как образец. Полиморфизм полезен, если разные прототипы клонируются через единый контракт ## Что показывает пример на 1С - В `CommonModules.Initialize` собирается `ValueTable`-прототип с заранее настроенными колонками `Name`, `Value` и `Hash`. - Затем новые таблицы создаются не с нуля, а через `Prototype.Copy()`. - Даже такой компактный пример хорошо показывает главную идею: сначала готовим шаблон, потом быстро клонируем его под конкретные задачи. ## Пример #### CommonModules.Initialize ```bsl #Region Public Function Init() Export Prototype = New ValueTable(); Prototype.Columns.Add("Name"); Prototype.Columns.Add("Value"); Prototype.Columns.Add("Hash"); Table1 = Prototype.Copy(); Table2 = Prototype.Copy(); EndFunction #EndRegion ``` ## Особенность платформы Для 1С это важное практическое замечание: `Prototype` не всегда нужно реализовывать вручную, потому что для некоторых объектов платформы он уже встроен. Самый понятный пример - `ValueTable`. - разработчик один раз подготавливает таблицу-образец; - затем получает новые экземпляры через `Copy()` / `Скопировать()`; - то есть механизм клонирования уже дан самой платформой. Поэтому в ряде задач `Prototype` в 1С - это не отдельный самописный паттерн, а грамотное использование уже готового платформенного API. Именно поэтому `ValueTable` так хорошо подходит для объяснения паттерна: - таблица выступает как подготовленный образец; - `Copy()` создает новый объект на основе этого образца; - клиентский код работает с копией, а не пересобирает структуру заново. Практически это означает простое правило: если платформа уже умеет безопасно копировать объект, сначала стоит использовать встроенный механизм, а не проектировать собственный `Clone()`. ## Где полезен в 1С - для повторного создания однотипных `ValueTable`, структур и настроек; - когда шаблон содержит много заранее определенных полей; - когда копирование проще и безопаснее, чем повторная ручная сборка. ## Когда паттерн лишний - если объект примитивен и собирается в несколько строк; - если копия должна сильно отличаться от оригинала; - если трудно контролировать глубокое и поверхностное копирование. ## Источник примера - [zeegin/DesignPatterns: Prototype](https://github.com/zeegin/DesignPatterns/tree/master/Prototype) ### patterns:gof:proxy - Proxy URL: https://v8std.ru/patterns/gof/proxy/ Markdown URL: https://v8std.ru/patterns/gof/proxy/index.md Source path: patterns/gof/proxy/index.md Aliases: patterns:gof:proxy Related: related:patterns:gof:decorator, related:patterns:principles External sources: нет # Заместитель (`Proxy`) `Proxy` подставляет специальный объект вместо реального и контролирует доступ к нему. ## Опора на ООП `Proxy` опирается на [интерфейсы, композицию и инкапсуляцию](https://v8std.ru/patterns/principles/): клиент работает с тем же контрактом, что и с реальным объектом, а детали контроля доступа, ленивой инициализации или удаленного вызова скрыты внутри заместителя ## Что показывает пример на 1С - `DataProcessors.SalesReportProxy` выглядит для клиента как обычный сервис отчета. - Внутри proxy проверяет доступ и создает тяжелый сервис только при первом реальном обращении. - Клиент не знает, работает ли он с реальным объектом напрямую или через заместителя. ## Пример #### DataProcessors.Application ```bsl ReportService = DataProcessors.SalesReportProxy.Create(); Data = ReportService.GetData(DateFrom, DateTo); ``` #### DataProcessors.SalesReportProxy ```bsl Var RealService; #Region Public Function GetData(DateFrom, DateTo) Export EnsureAccess(); EnsureInitialized(); Return RealService.GetData(DateFrom, DateTo); EndFunction #EndRegion #Region Private Procedure EnsureAccess() If Not Rights.CanRead("SalesReport") Then Raise "Access denied"; EndIf; EndProcedure Procedure EnsureInitialized() If RealService = Undefined Then RealService = DataProcessors.HeavySalesReportService.Create(); EndIf; EndProcedure #EndRegion ``` #### DataProcessors.HeavySalesReportService ```bsl Function GetData(DateFrom, DateTo) Export Return New ValueTable; EndFunction ``` ## Близость к Decorator `Proxy` очень похож на [Decorator](https://v8std.ru/patterns/gof/decorator/), потому что снаружи оба паттерна выглядят как обертка над тем же самым контрактом В обоих случаях: - клиент работает с тем же интерфейсом; - внутри есть ссылка на другой объект; - вызов делегируется дальше. Но задача у них разная. - `Decorator` отвечает на вопрос: как добавить новое поведение поверх существующего объекта? - `Proxy` отвечает на вопрос: как контролировать доступ к объекту или отложить работу с ним? Для 1С это различие удобно помнить так: - логирование, ретраи и кэширование вокруг отправителя - это чаще `Decorator`; - проверка прав, ленивая инициализация тяжелого сервиса или проксирование удаленного вызова - это чаще `Proxy`. ## Где полезен в 1С - для ленивой инициализации тяжелых сервисов; - для проверки прав и технического контроля доступа; - для удаленных, внешних и потенциально дорогих по времени вызовов. ## Когда паттерн лишний - если заместитель ничего не добавляет поверх реального объекта; - если прямой вызов и так безопасен и дешев; - если proxy начинает превращаться в фасад с новой бизнес-логикой. ### patterns:gof:singleton - Singleton URL: https://v8std.ru/patterns/gof/singleton/ Markdown URL: https://v8std.ru/patterns/gof/singleton/index.md Source path: patterns/gof/singleton/index.md Aliases: patterns:gof:singleton Related: related:patterns:principles External sources: https://v8.1c.ru/platforma/arkhitektura-klastera/, https://1c-dn.com/library/getting_object_metadata/, https://github.com/zeegin/DesignPatterns/tree/master/Singleton # Одиночка (`Singleton`) `Singleton` дает единственную точку доступа к экземпляру или состоянию, которое в приложении должно быть уникальным. ## Опора на ООП `Singleton` опирается на [инкапсуляцию](https://v8std.ru/patterns/principles/): паттерн прячет управление жизненным циклом и единственную точку доступа к экземпляру. Полиморфизм здесь обычно не является основной опорой ## Что показывает пример на 1С - `CommonModules.Users.CurrentUser()` возвращает `SessionParameters.CurrentUser`. - В мире 1С это чаще выглядит не как классический объект-одиночка, а как общий сервис-доступ к уникальному для сеанса состоянию. - Условно `stateless singleton` в 1С можно увидеть в общем модуле: у него нет собственного экземпляра с управляемым жизненным циклом, но есть единая точка входа в логику. - Платформенный пример более "настоящего" singleton-подобного объекта - глобальный объект `Metadata`, который уже предоставлен платформой и используется как единая точка доступа к метаданным. - Такой пример полезен именно как архитектурная оговорка: в 1С паттерн часто проявляется через общие модули, глобальные объекты платформы и параметры сеанса, а не через конструкторы классов. ## Пример #### CommonModules.Users ```bsl Function CurrentUser() Export SetPrivilegedMode(True); Return SessionParameters.CurrentUser; EndFunction ``` #### GlobalContext.Metadata ```bsl ProductsMetadata = Metadata.Catalogs.Products; ProductAttributes = ProductsMetadata.Attributes; ``` ## Вариации singleton в 1С В 1С почти всегда нужно сначала договориться, в каком именно масштабе объект должен быть "одним". - `Singleton уровня бизнеса`: например, текущая учетная политика, активный релиз обмена или единственный набор правил, который в предметной области должен существовать в одном экземпляре. - `Singleton уровня сеанса`: текущий пользователь, параметры сеанса, технический контекст конкретного подключения. - `Singleton уровня процесса`: объект или кэш, живущий только внутри одного рабочего процесса `rphost`. - `Singleton уровня приложения в целом`: единый экземпляр для всей информационной базы или всего кластера. Проблема в том, что это четыре очень разные трактовки "одиночки". Без такой оговорки слово `Singleton` в 1С слишком легко вводит в заблуждение. ## Особенность платформы С практической точки зрения собственный строгий singleton в прикладном коде 1С обычно не создать. Причина в архитектуре платформы: в клиент-серверном варианте кластер серверов состоит из одного или нескольких рабочих процессов, а серверный код выполняется внутри `rphost` ([архитектура кластера](https://v8.1c.ru/platforma/arkhitektura-klastera/)). Платформа распределяет клиентские соединения по рабочим процессам кластера. Из этого следует важное ограничение: - даже если вы где-то закешировали "единственный экземпляр" в серверной памяти; - это будет singleton максимум уровня конкретного рабочего процесса; - но не всего приложения и не всего кластера. То есть архитектурно вы не контролируете единый глобальный процесс, в котором исполняется весь код. В многопроцессной схеме нельзя просто объявить объект и считать, что он единственный "на всю систему". Поэтому в 1С чаще встречаются такие практические варианты: - `общий модуль` как stateless singleton, то есть единая точка входа без собственного состояния экземпляра; - `SessionParameters` как singleton уровня сеанса; - `Metadata` как платформенный глобальный объект, который уже дан средой выполнения; - отдельные данные в базе как "бизнес-singelton", если уникальность гарантируется не памятью процесса, а моделью данных. Для `Metadata` это особенно наглядно: разработчик не создает его вручную, а получает от платформы готовую единую точку доступа к метаданным. Это прямо видно и в официальных рекомендациях по получению метаданных, где используется глобальный объект `Metadata` и его методы ([1C:DN](https://1c-dn.com/library/getting_object_metadata/)). ## Где полезен в 1С - для доступа к состоянию сеанса; - для инфраструктурных сервисов, которые действительно должны быть единственными в контексте приложения; - как единая точка чтения технического контекста. ## Когда паттерн лишний - если это просто глобальная переменная под другим именем; - если не определен уровень уникальности: бизнес, сеанс, процесс или приложение; - если объект лучше передавать явно как зависимость; - если единый доступ начинает скрывать слишком много неявных связей. ## Источник примера - [zeegin/DesignPatterns: Singleton](https://github.com/zeegin/DesignPatterns/tree/master/Singleton) ### patterns:gof:state - State URL: https://v8std.ru/patterns/gof/state/ Markdown URL: https://v8std.ru/patterns/gof/state/index.md Source path: patterns/gof/state/index.md Aliases: patterns:gof:state Related: related:patterns:gof:strategy, related:patterns:principles, standard:std603 External sources: https://github.com/zeegin/DesignPatterns/tree/master/State # Состояние (`State`) `State` выносит поведение по состояниям в отдельные объекты или модули, чтобы не держать всю логику в одном длинном условии. ## Опора на ООП `State` в первую очередь опирается на [полиморфизм](https://v8std.ru/patterns/principles/): поведение выбирается не через длинные ветвления, а через объект или модуль текущего состояния. Общий контракт состояний обычно оформляется через интерфейс ## Что показывает пример на 1С - `Documents.Stocktaking` в `OnWrite()` получает реализацию через `Enums.StocktakingState.GetModule(State)` и делегирует поведение конкретному модулю состояния. - Для каждого состояния есть свой модуль: `StocktakingStateDraft`, `StocktakingStateReady`, `StocktakingStateInProcess`, `StocktakingStateLocked`. - В итоге документ знает текущее состояние, но не держит всю матрицу поведения внутри одного `Если`. ## Пример #### Documents.Stocktaking ```bsl Procedure OnWrite() Module = Enums.StocktakingState.GetModule(State); Module.DeclareSomething(ThisObject); EndProcedure ``` #### Enums.StocktakingState ```bsl #If Server Then #Region Public Function GetModule(State) Export If State = Draft Then Return StocktakingStateDraft; ElsIf State = Ready Then Return StocktakingStateReady; ElsIf State = InProcess Then Return StocktakingStateInProcess; ElsIf State = Locked Then Return StocktakingStateLocked; Else Raise "Unknown state"; EndIf; EndFunction #EndRegion #EndIf ``` ## Близость к Strategy `State` очень близок к [Strategy](https://v8std.ru/patterns/gof/strategy/), и это не случайно: оба паттерна строятся на полиморфизме и общем контракте Снаружи они часто выглядят почти одинаково: - есть контекст; - есть набор реализаций с общим интерфейсом; - контекст делегирует поведение выбранному объекту или модулю. Но смысл у них разный. - `Strategy` отвечает на вопрос: какой алгоритм мы хотим выбрать? - `State` отвечает на вопрос: в каком состоянии сейчас находится объект и как он должен вести себя из-за этого? То есть `Strategy` чаще выбирается снаружи как способ выполнения задачи, а `State` обычно определяется внутренним жизненным циклом самого объекта. Для 1С это различие особенно полезно: - если документ ведет себя по-разному в статусах `Черновик`, `Готов`, `Заблокирован`, это `State`; - если один и тот же сценарий можно выполнить через `Email`, `SMS` или `Telegram`, это `Strategy`. Связанный стандарт для 1С: [#std603: Требования к проведению документов](https://v8std.ru/std/603/). В нем прямо описана модель, где непроведенный документ выступает как черновик, а после проведения дальнейшее поведение может уточняться статусами уже проведенного документа. Это очень близкий практический пример применения `State` в прикладной архитектуре 1С Поэтому `State` можно считать очень близким родственником `Strategy`, но с акцентом не на внешнем выборе алгоритма, а на внутреннем состоянии объекта. ## Где полезен в 1С - в жизненном цикле документов и бизнес-процессов; - когда набор состояний стабилен, а правила по ним заметно отличаются; - когда ветвления по состоянию уже мешают читать объектный модуль. ## Когда паттерн лишний - если состояний мало и логика тривиальна; - если переходы постоянно меняются и разъезжаются по модулям; - если из-за паттерна простая проверка превращается в сеть маленьких модулей без выгоды. ## Источник примера - [zeegin/DesignPatterns: State](https://github.com/zeegin/DesignPatterns/tree/master/State) ### patterns:gof:strategy - Strategy URL: https://v8std.ru/patterns/gof/strategy/ Markdown URL: https://v8std.ru/patterns/gof/strategy/index.md Source path: patterns/gof/strategy/index.md Aliases: patterns:gof:strategy Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Strategy # Стратегия (`Strategy`) `Strategy` прячет несколько взаимозаменяемых алгоритмов за единым контрактом. ## Опора на ООП `Strategy` — один из самых прямых паттернов на [полиморфизм и интерфейсы](https://v8std.ru/patterns/principles/): контекст вызывает общий контракт стратегии и не знает, какой конкретный алгоритм сейчас подставлен ## Что показывает пример на 1С - `DataProcessors.Context` умеет `SetStrategy(Strategy_)` и затем в `SendMessage(Message)` делегирует вызовы объекту стратегии. - `EmailStrategy`, `SMSStrategy` и `TelegramStrategy` реализуют общий набор действий: `SetRecipient()` и `SendMessage()`. - Это прямой и очень узнаваемый для 1С пример выбора канала без условий в клиентском коде. ## Пример #### DataProcessors.Context ```bsl Var Strategy; #Region Public Procedure SetStrategy(Strategy_) Export Strategy = Strategy_; EndProcedure Function SendMessage(Message) Export Strategy.SetRecipient(Partner); Strategy.SendMessage(Message); EndFunction #EndRegion ``` #### DataProcessors.EmailStrategy ```bsl Var EmailAdress; #Region Public Function SetRecipient(Recipient) Export EmailAdress = Recipient.GetEmailAdressr(); // Implement it! EndFunction Function SendMessage(Message) Export // Implement it! Return True; EndFunction #EndRegion ``` ## Где полезен в 1С - для выбора канала уведомлений; - для разных алгоритмов расчета, экспорта или подбора данных; - когда бизнес-сценарий стабилен, а способы его выполнения меняются. ## Когда паттерн лишний - если вариантов алгоритма мало и они почти не отличаются; - если стратегии знают слишком много о контексте; - если обычная функция с параметром читается проще. ## Источник примера - [zeegin/DesignPatterns: Strategy](https://github.com/zeegin/DesignPatterns/tree/master/Strategy) ### patterns:gof:template_method - Template Method URL: https://v8std.ru/patterns/gof/template-method/ Markdown URL: https://v8std.ru/patterns/gof/template-method/index.md Source path: patterns/gof/template-method/index.md Aliases: patterns:gof:template_method Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/TemplateMethod # Шаблонный метод (`Template Method`) `Template Method` фиксирует общий каркас алгоритма и оставляет отдельные шаги на конкретную реализацию. ## Опора на ООП Классический `Template Method` строится на [наследовании и полиморфизме](https://v8std.ru/patterns/principles/): базовый алгоритм задается один раз, а отдельные шаги переопределяются в потомках. В 1С эту идею часто имитируют несколькими модулями с одинаковым публичным контрактом ## Что показывает пример на 1С - В репозитории рядом лежат `CommonModules.COMConnector` и `CommonModules.RASConnector` с одинаковым публичным контрактом `GetSessions()` и `GetLocks()`. - Пример компактный, но он хорошо показывает направление: есть общий сценарий работы с коннектором, а конкретные детали скрыты в специализированном модуле. - Для 1С это типичная основа для унификации разных поставщиков или транспортов под одним API. ## Пример #### CommonModules.COMConnector ```bsl #Region Public Function GetSessions() Export Return "Specific"; // Implement it! EndFunction Function GetLocks() Export Return "Specific"; // Implement it! EndFunction #EndRegion ``` #### CommonModules.RASConnector ```bsl #Region Public Function GetSessions() Export Return "Specific"; // Implement it! EndFunction Function GetLocks() Export Return "Specific"; // Implement it! EndFunction #EndRegion ``` ## Где полезен в 1С - когда несколько интеграций проходят одинаковую последовательность шагов; - когда хочется выровнять контракт для нескольких коннекторов; - когда общая часть алгоритма стабильна, а детали различаются. ## Когда паттерн лишний - если общего каркаса фактически нет; - если отличий между реализациями больше, чем общего; - если проще использовать `Strategy`. ## Источник примера - [zeegin/DesignPatterns: TemplateMethod](https://github.com/zeegin/DesignPatterns/tree/master/TemplateMethod) ### patterns:gof:visitor - Visitor URL: https://v8std.ru/patterns/gof/visitor/ Markdown URL: https://v8std.ru/patterns/gof/visitor/index.md Source path: patterns/gof/visitor/index.md Aliases: patterns:gof:visitor Related: related:patterns:principles External sources: https://github.com/zeegin/DesignPatterns/tree/master/Visitor # Посетитель (`Visitor`) `Visitor` выносит операции над набором объектов в отдельный объект-посетитель, чтобы не распихивать новые операции по самим элементам. ## Опора на ООП `Visitor` опирается на [полиморфизм и интерфейсы](https://v8std.ru/patterns/principles/), а в классическом виде еще и на двойную диспетчеризацию: элемент принимает посетителя по общему контракту, а конкретная операция выбирается по типу элемента ## Что показывает пример на 1С - `CommonModules.ProductsTableVisitor.GetTable(DocumentObject)` вызывает `DocumentObject.Accept(ThisObject)`, а конкретные действия живут в `DoForSalesOrder()` и `DoForPicklist()`. - `DataProcessors.ManagerVisitor` по тому же принципу назначает менеджера разным типам документов. - Один и тот же набор документов можно обходить разными посетителями, не меняя код самих операций в каждом месте заново. ## Пример #### CommonModules.ProductsTableVisitor ```bsl #Region Public Function GetTable(DocumentObject) Export Return DocumentObject.Accept(ThisObject); EndFunction #EndRegion #Region Internal Function DoForSalesOrder(DocumentObject) Export Table = New ValueTable; Table.Columns.Add("Products"); Table.Columns.Add("Quantity"); For Each Row In DocumentObject.Products Do TableRow = Table.Add(); TableRow.Products = Row.Products; TableRow.Quantity = Row.Quantity; EndDo; Return Table; EndFunction #EndRegion ``` #### DataProcessors.ManagerVisitor ```bsl Var Manager; #Region Public Function SetManager(DocumentObject, Manager_) Export Manager = Manager_; Return DocumentObject.Accept(ThisObject); EndFunction #EndRegion #Region Internal Function DoForSalesOrder(DocumentObject) Export DocumentObject.ResponsiblePerson = Manager; Return True; EndFunction Function DoForPicklist(DocumentObject) Export DocumentObject.Manager = Manager; Return True; EndFunction #EndRegion ``` ## Где полезен в 1С - когда есть стабильный набор типов документов или объектов; - когда над ними нужно регулярно добавлять новые операции; - когда хочется собрать логику преобразований и выгрузок в отдельные объекты. ## Когда паттерн лишний - если типов элементов много и они часто меняются; - если операция всего одна; - если двойная диспетчеризация делает код сложнее, чем простой условный разбор. ## Источник примера - [zeegin/DesignPatterns: Visitor](https://github.com/zeegin/DesignPatterns/tree/master/Visitor) ### patterns:grasp:controller - Controller URL: https://v8std.ru/patterns/grasp/controller/ Markdown URL: https://v8std.ru/patterns/grasp/controller/index.md Source path: patterns/grasp/controller/index.md Aliases: patterns:grasp:controller Related: related:patterns:principles External sources: нет # Контроллер (`Controller`) `Controller` рекомендует принимать внешний запрос через объект-координатор сценария, а не размазывать orchestration по низкоуровневым участникам. Важно: это не то же самое, что контроллер в `MVC`. В `GRASP` речь идет не о конкретном UI-слое и не об элементе фреймворка, а о роли объекта, который принимает внешний запрос и координирует выполнение use case. ## Опора на ООП `Controller` опирается на [инкапсуляцию и низкую связанность](https://v8std.ru/patterns/principles/): координация use case отделяется от доменной логики и от деталей интерфейса ## Что показывает пример на 1С - форма вызывает `SalesOrderController.Post(...)`, а не пытается сама загрузить объект, проверить данные и провести документ. - контроллер управляет сценарием целиком: загрузка, заполнение, проверка, запись. - доменные объекты и форма остаются проще и не смешивают UI с orchestration. ## Пример #### CommonForms.SalesOrderForm ```bsl &AtClient Procedure PostCommand(Command) CommonModules.SalesOrderController.Post(Object.Ref); EndProcedure ``` #### CommonModules.SalesOrderController ```bsl Procedure Post(SalesOrderRef) Export SalesOrder = SalesOrderRef.GetObject(); SalesOrderValidation.CheckBeforePosting(SalesOrder); SalesOrder.Write(DocumentWriteMode.Posting); EndProcedure ``` ## Близость к MVC Controller Термины похожи, но смысл разный. - `MVC Controller` обычно относится к архитектуре пользовательского интерфейса и управляет взаимодействием между представлением и моделью. - `GRASP Controller` отвечает на вопрос: кто должен принять внешний системный запрос и собрать сценарий выполнения. В 1С это особенно важно, потому что роль `GRASP Controller` могут играть очень разные точки входа: - общий модуль, который координирует проведение документа; - обработчик HTTP-сервиса; - серверная процедура команды формы; - координатор фонового задания. То есть `GRASP Controller` не обязан быть "контроллером экрана". Это просто объект или модуль, которому доверили orchestration конкретного сценария. ## Где полезен в 1С - в командах форм, HTTP-сервисах и фоновых заданиях; - для сценариев `создать / проверить / провести / отправить`; - когда важно отделить use case от деталей интерфейса и хранилища. ## Когда принцип применяют неправильно - если контроллер превращается в "бог-объект"; - если он начинает хранить доменное состояние вместо координации сценария; - если вся бизнес-логика выносится только в контроллер, а доменные объекты пустеют. ### patterns:grasp:creator - Creator URL: https://v8std.ru/patterns/grasp/creator/ Markdown URL: https://v8std.ru/patterns/grasp/creator/index.md Source path: patterns/grasp/creator/index.md Aliases: patterns:grasp:creator Related: related:patterns:principles External sources: нет # Создатель (`Creator`) `Creator` рекомендует поручать создание объекта тому, кто тесно связан с ним по данным, композиции или жизненному циклу. ## Опора на ООП `Creator` опирается на [инкапсуляцию и низкую связанность](https://v8std.ru/patterns/principles/): объект создается там, где уже есть все данные для корректной инициализации ## Что показывает пример на 1С - `Documents.SalesOrder` сам создает `PostingContext`. - Документ уже содержит организацию, склад и строки товаров, поэтому именно он может корректно подготовить контекст проведения. - Клиент не собирает этот объект вручную из разрозненных полей. ## Пример #### DataProcessors.Application ```bsl SalesOrder = Documents.SalesOrder.GetRef("...").GetObject(); PostingContext = SalesOrder.CreatePostingContext(); ``` #### Documents.SalesOrder ```bsl Function CreatePostingContext() Export PostingContext = DataProcessors.PostingContext.Create(); PostingContext.Organization = Organization; PostingContext.Warehouse = Warehouse; PostingContext.Items = Items.Unload(); Return PostingContext; EndFunction ``` #### DataProcessors.PostingContext ```bsl Var Organization Export; Var Warehouse Export; Var Items Export; ``` ## Где полезен в 1С - при создании контекстов проведения, печати, обмена и расчета; - когда один объект агрегирует данные, нужные для инициализации другого; - когда хочется убрать внешнюю ручную сборку служебных структур. ## Когда принцип применяют неправильно - когда создатель ничего не знает о создаваемом объекте и просто "назначен" случайно; - когда создание требует зависимостей из другой подсистемы; - когда объект начинает производить слишком много чужих сущностей и превращается в фабрику всего подряд. ### patterns:grasp:high_cohesion - High Cohesion URL: https://v8std.ru/patterns/grasp/high-cohesion/ Markdown URL: https://v8std.ru/patterns/grasp/high-cohesion/index.md Source path: patterns/grasp/high-cohesion/index.md Aliases: patterns:grasp:high_cohesion Related: related:patterns:principles External sources: нет # Высокая связность (`High Cohesion`) `High Cohesion` означает, что у модуля, объекта или сервиса должна быть узкая и понятная зона ответственности. ## Опора на ООП `High Cohesion` опирается на [инкапсуляцию](https://v8std.ru/patterns/principles/): каждая единица кода отвечает за близкие по смыслу задачи, а не за все подряд ## Что показывает пример на 1С - `SalesOrderTotals` занимается только расчетом итогов. - В нем нет проверки прав, печати, отправки уведомлений и клиентской логики формы. - Благодаря этому модуль проще читать, тестировать и переиспользовать. ## Пример #### DataProcessors.Application ```bsl TotalAmount = CommonModules.SalesOrderTotals.Calculate(SalesOrder); ``` #### CommonModules.SalesOrderTotals ```bsl Function Calculate(SalesOrder) Export TotalAmount = 0; For Each ItemRow In SalesOrder.Items Do TotalAmount = TotalAmount + ItemRow.Amount; EndDo; Return TotalAmount; EndFunction ``` ## Где полезен в 1С - при проектировании общих модулей и сервисов; - когда модуль уже начал совмещать расчет, запись, уведомления и UI; - при разбиении "комбайнов" на отдельные понятные компоненты. ## Когда принцип применяют неправильно - когда ради высокой связности код дробят до бессмысленно мелких кусочков; - когда единая операция искусственно разрывается между множеством модулей; - когда за "чистотой" теряется целостность use case. ### patterns:grasp - GRASP URL: https://v8std.ru/patterns/grasp/ Markdown URL: https://v8std.ru/patterns/grasp/index.md Source path: patterns/grasp/index.md Aliases: patterns:grasp Related: - related:patterns:grasp:controller - related:patterns:grasp:creator - related:patterns:grasp:high_cohesion - related:patterns:grasp:indirection - related:patterns:grasp:information_expert - related:patterns:grasp:low_coupling - related:patterns:grasp:polymorphism - related:patterns:grasp:protected_variations - related:patterns:grasp:pure_fabrication External sources: нет `GRASP` — это набор принципов, которые помогают распределять ответственность между объектами и модулями. В отличие от `GOF`, это не каталог готовых шаблонов, а набор вопросов: кто должен знать, кто должен создавать, кто должен координировать и как не связать систему в узел. ## Принципы GRASP | Принцип | Описание | На что смотреть | | --- | --- | --- | | [Информационный эксперт](https://v8std.ru/patterns/grasp/information-expert/) (`Information Expert`) | Ответственность получает тот, у кого уже есть нужные данные для ее выполнения. | Не тянуть логику в случайный общий модуль, если нужный контекст уже рядом. | | [Создатель](https://v8std.ru/patterns/grasp/creator/) (`Creator`) | Объект создает тот, кто тесно связан с создаваемым объектом или владеет его данными. | Кто агрегирует, хранит или инициализирует создаваемую сущность. | | [Контроллер](https://v8std.ru/patterns/grasp/controller/) (`Controller`) | Внешние запросы принимает объект-координатор сценария, а не низкоуровневые участники. | Кто управляет use case целиком и не смешивает orchestration с деталями. | | [Низкая связанность](https://v8std.ru/patterns/grasp/low-coupling/) (`Low Coupling`) | Зависимостей между частями системы должно быть как можно меньше. | Насколько дорого менять один модуль из-за устройства другого. | | [Высокая связность](https://v8std.ru/patterns/grasp/high-cohesion/) (`High Cohesion`) | Каждый модуль должен иметь узкую и понятную зону ответственности. | Не превращается ли модуль в склад разнородной логики. | | [Полиморфизм](https://v8std.ru/patterns/grasp/polymorphism/) (`Polymorphism`) | Поведение по вариантам лучше раскладывать по реализациям, а не по длинным веткам условий. | Можно ли заменить `Если... ИначеЕсли...` на общий контракт и набор реализаций. | | [Чистая выдумка](https://v8std.ru/patterns/grasp/pure-fabrication/) (`Pure Fabrication`) | Иногда стоит ввести отдельный служебный объект, если это уменьшает связанность и упрощает модель. | Где вспомогательный сервис полезнее, чем перегрузка доменных объектов чужой логикой. | | [Посредничество](https://v8std.ru/patterns/grasp/indirection/) (`Indirection`) | Между подсистемами вводят промежуточный слой, чтобы ослабить прямую зависимость. | Нужен ли адаптер, фасад, шина или сервис-обертка для развязки модулей. | | [Защищенные вариации](https://v8std.ru/patterns/grasp/protected-variations/) (`Protected Variations`) | Точки возможных изменений закрывают стабильным интерфейсом. | Где стоит отделить контракт от реализации, чтобы изменения не разносились по всей системе. | ### patterns:grasp:indirection - Indirection URL: https://v8std.ru/patterns/grasp/indirection/ Markdown URL: https://v8std.ru/patterns/grasp/indirection/index.md Source path: patterns/grasp/indirection/index.md Aliases: patterns:grasp:indirection Related: related:patterns:gof:adapter, related:patterns:gof:decorator, related:patterns:gof:proxy, related:patterns:principles External sources: нет # Посредничество (`Indirection`) `Indirection` предлагает ввести промежуточный слой между подсистемами, чтобы ослабить прямую зависимость. ## Опора на ООП `Indirection` опирается на [интерфейсы, инкапсуляцию и низкую связанность](https://v8std.ru/patterns/principles/): вместо прямой связи два участника работают через промежуточный объект или слой ## Что показывает пример на 1С - прикладной код работает с `NotificationGateway`. - шлюз уже сам решает, какой отправитель использовать: email, Telegram или другой канал. - доменный код не зависит напрямую от конкретного канала доставки. ## Пример #### DataProcessors.Application ```bsl CommonModules.NotificationGateway.NotifyManager(SalesOrder); ``` #### CommonModules.NotificationGateway ```bsl Procedure NotifyManager(SalesOrder) Export Sender = CommonModules.TelegramSender; Sender.Send(SalesOrder.Manager, SalesOrder.Number); EndProcedure ``` #### CommonModules.TelegramSender ```bsl Procedure Send(User, MessageText) Export // Telegram integration. EndProcedure ``` ## Близость к Adapter, Proxy и Decorator `Indirection` близок к [Adapter](https://v8std.ru/patterns/gof/adapter/), [Proxy](https://v8std.ru/patterns/gof/proxy/) и [Decorator](https://v8std.ru/patterns/gof/decorator/), потому что во всех четырех случаях между клиентом и реальной реализацией появляется промежуточный слой Снаружи это действительно похоже: - клиент не идет напрямую к конечному объекту; - появляется дополнительный объект или модуль между слоями; - часть зависимости скрывается за более удобной точкой входа. Но у `Indirection` намерение шире и архитектурнее. - `Indirection` нужен, чтобы развязать две части системы через промежуточный слой. - `Adapter` нужен, чтобы перевести один контракт в другой. - `Proxy` нужен, чтобы контролировать доступ, создание или способ обращения к объекту. - `Decorator` нужен, чтобы нарастить поведение поверх существующего компонента. Для 1С это удобно различать так: - `NotificationGateway` между прикладным кодом и каналами доставки - это `Indirection`; - обертка над старым общим модулем с неудобным API - это `Adapter`; - модуль, который проверяет права или лениво создает тяжелый сервис - это `Proxy`; - слой логирования, ретраев или метрик вокруг отправителя - это `Decorator`. ## Где полезен в 1С - между прикладной логикой и внешними интеграциями; - при переходе на новую подсистему без массовой правки клиентов; - когда нужна точка развязки между двумя нестабильными частями системы. ## Когда принцип применяют неправильно - если промежуточный слой ничего не упрощает; - если из-за лишней прослойки архитектура становится мутнее; - если `Indirection` превращается в бесконечную матрешку сервисов. ### patterns:grasp:information_expert - Information Expert URL: https://v8std.ru/patterns/grasp/information-expert/ Markdown URL: https://v8std.ru/patterns/grasp/information-expert/index.md Source path: patterns/grasp/information-expert/index.md Aliases: patterns:grasp:information_expert Related: related:patterns:principles External sources: нет # Информационный эксперт (`Information Expert`) `Information Expert` говорит: ответственность стоит отдавать тому объекту, у которого уже есть нужные данные для ее выполнения. ## Опора на ООП `Information Expert` опирается на [инкапсуляцию и высокую связность](https://v8std.ru/patterns/principles/): логика живет рядом с данными, для которых она естественна ## Что показывает пример на 1С - `Documents.SalesOrder` сам считает итог по своей табличной части. - Клиентский код не вытаскивает строки документа наружу и не пересчитывает сумму во внешнем модуле. - Ответственность остается у объекта, который и так владеет нужными данными. ## Пример #### DataProcessors.Application ```bsl SalesOrder = Documents.SalesOrder.GetRef("...").GetObject(); TotalAmount = SalesOrder.GetTotalAmount(); ``` #### Documents.SalesOrder ```bsl Function GetTotalAmount() Export TotalAmount = 0; For Each ItemRow In Items Do TotalAmount = TotalAmount + ItemRow.Amount; EndDo; Return TotalAmount; EndFunction ``` ## Где полезен в 1С - для расчетов по данным документа, формы или регистра; - для проверок, которые напрямую опираются на внутреннее состояние объекта; - когда внешний модуль начинает тянуть слишком много чужих данных только ради одной операции. ## Когда принцип применяют неправильно - когда в объект заталкивают логику, требующую много внешних зависимостей; - когда данные распределены по нескольким подсистемам и одного "эксперта" просто нет; - когда ради формального следования принципу объект превращается в перегруженный модуль. ### patterns:grasp:low_coupling - Low Coupling URL: https://v8std.ru/patterns/grasp/low-coupling/ Markdown URL: https://v8std.ru/patterns/grasp/low-coupling/index.md Source path: patterns/grasp/low-coupling/index.md Aliases: patterns:grasp:low_coupling Related: related:patterns:principles External sources: нет # Низкая связанность (`Low Coupling`) `Low Coupling` требует уменьшать количество и жесткость зависимостей между частями системы. ## Опора на ООП `Low Coupling` опирается на [интерфейсы, композицию и инкапсуляцию](https://v8std.ru/patterns/principles/): модуль зависит от контракта, а не от устройства конкретной реализации ## Что показывает пример на 1С - `PaymentService` зависит от абстрактного шлюза оплаты. - Конкретный `BankGateway` подставляется снаружи. - Сервис не вшивает внутрь себя детали конкретного банка или API. ## Пример #### DataProcessors.Application ```bsl PaymentService = DataProcessors.PaymentService.Create(); PaymentService.SetGateway(CommonModules.BankGateway); PaymentService.Pay(InvoiceRef, 1000); ``` #### DataProcessors.PaymentService ```bsl Var Gateway; #Region Public Procedure SetGateway(Gateway_) Export Gateway = Gateway_; EndProcedure Procedure Pay(InvoiceRef, Amount) Export Gateway.Pay(InvoiceRef, Amount); EndProcedure #EndRegion ``` #### CommonModules.BankGateway ```bsl Procedure Pay(InvoiceRef, Amount) Export // Bank-specific integration. EndProcedure ``` ## Где полезен в 1С - при интеграции с банками, API, внешними сервисами и обменами; - когда реализация инфраструктуры может меняться; - когда модуль хочется тестировать и заменять без каскадных правок. ## Когда принцип применяют неправильно - когда интерфейсы вводятся "на всякий случай" без реальной точки изменения; - когда низкая связанность покупается ценой чрезмерной фрагментации; - когда ради отвязки скрывается важный смысл предметной области. ### patterns:grasp:polymorphism - Polymorphism URL: https://v8std.ru/patterns/grasp/polymorphism/ Markdown URL: https://v8std.ru/patterns/grasp/polymorphism/index.md Source path: patterns/grasp/polymorphism/index.md Aliases: patterns:grasp:polymorphism Related: related:patterns:principles External sources: нет # Полиморфизм (`Polymorphism`) `Polymorphism` в `GRASP` говорит: если поведение зависит от варианта, лучше распределить его по реализациям, а не держать в длинной цепочке условий. Важно: это не то же самое, что [полиморфизм как принцип ООП](https://v8std.ru/patterns/principles/). В `GRASP` это уже архитектурное правило распределения ответственности, которое построено на полиморфизме как механизме языка и объектной модели ## Опора на ООП `Polymorphism` напрямую опирается на [полиморфизм и интерфейсы](https://v8std.ru/patterns/principles/): разные реализации отвечают на один и тот же запрос по-своему ## Что показывает пример на 1С - `DiscountCalculator` работает с политикой скидки через общий контракт. - `RetailDiscountPolicy` и `WholesaleDiscountPolicy` реализуют разные правила. - Контекст не содержит длинного `Если ... ИначеЕсли` по типу клиента. ## Пример #### DataProcessors.Application ```bsl Calculator = DataProcessors.DiscountCalculator.Create(); If Counterparty.IsWholesale Then Calculator.SetPolicy(DataProcessors.WholesaleDiscountPolicy.Create()); Else Calculator.SetPolicy(DataProcessors.RetailDiscountPolicy.Create()); EndIf; DiscountAmount = Calculator.Calculate(SalesOrder); ``` #### DataProcessors.DiscountCalculator ```bsl Var Policy; #Region Public Procedure SetPolicy(Policy_) Export Policy = Policy_; EndProcedure Function Calculate(SalesOrder) Export Return Policy.Calculate(SalesOrder); EndFunction #EndRegion ``` #### DataProcessors.RetailDiscountPolicy ```bsl Function Calculate(SalesOrder) Export Return SalesOrder.TotalAmount * 0.03; EndFunction ``` #### DataProcessors.WholesaleDiscountPolicy ```bsl Function Calculate(SalesOrder) Export If SalesOrder.TotalAmount >= 100000 Then Return SalesOrder.TotalAmount * 0.10; EndIf; Return SalesOrder.TotalAmount * 0.05; EndFunction ``` ## Где полезен в 1С - для разных правил расчета, обмена, печати и маршрутизации; - когда ветвления по типам уже начинают дублироваться; - как принцип, на котором потом строятся `Strategy`, `State` и похожие паттерны. ## Когда принцип применяют неправильно - если вариантов один-два и они почти не меняются; - если полиморфизм вводится без ясного общего контракта; - если внешняя система все равно требует большого условного диспетчера. ### patterns:grasp:protected_variations - Protected Variations URL: https://v8std.ru/patterns/grasp/protected-variations/ Markdown URL: https://v8std.ru/patterns/grasp/protected-variations/index.md Source path: patterns/grasp/protected-variations/index.md Aliases: patterns:grasp:protected_variations Related: related:patterns:principles External sources: нет # Защищенные вариации (`Protected Variations`) `Protected Variations` рекомендует изолировать точки изменений стабильным контрактом, чтобы изменения не расходились по всей системе. ## Опора на ООП `Protected Variations` опирается на [интерфейсы, инкапсуляцию и полиморфизм](https://v8std.ru/patterns/principles/): внешние клиенты знают стабильный контракт, а изменяющиеся реализации прячутся за ним ## Что показывает пример на 1С - `CurrencyRateService` зависит от контракта поставщика курсов. - конкретный `ExternalRateProvider` можно заменить без переписывания сервиса. - нестабильная часть системы изолирована в одном месте. ## Пример #### DataProcessors.Application ```bsl RateService = DataProcessors.CurrencyRateService.Create(); RateService.SetProvider(CommonModules.ExternalRateProvider); Rate = RateService.GetRate("USD", CurrentDate()); ``` #### DataProcessors.CurrencyRateService ```bsl Var Provider; #Region Public Procedure SetProvider(Provider_) Export Provider = Provider_; EndProcedure Function GetRate(CurrencyCode, RateDate) Export Return Provider.GetRate(CurrencyCode, RateDate); EndFunction #EndRegion ``` #### CommonModules.ExternalRateProvider ```bsl Function GetRate(CurrencyCode, RateDate) Export Return 100; EndFunction ``` ## Частый вариант в 1С `Protected Variations` в 1С часто выражается не только через интерфейс или модуль-обертку, но и через справочники и регистры настроек, в которых варианты поведения задаются параметрами. Идея такая: - возможные способы работы алгоритма заранее описываются как допустимые варианты; - прикладной код не переписывают под каждый новый сценарий, а читает параметры выбранного варианта; - точка изменения переносится из кода в управляемую настройку. Хороший пример - учетная политика. В ней бизнес заранее фиксирует допустимые варианты расчета и отражения операций: - способ оценки запасов; - порядок признания расходов; - варианты распределения затрат; - правила налогового учета. Тогда прикладной алгоритм работает не с россыпью `Если ... ИначеЕсли ...` по всей системе, а с параметризуемым элементом настройки: ```bsl Policy = AccountingPolicyService.GetPolicy(Organization, Period); If Policy.InventoryWriteOffMethod = Enums.InventoryWriteOffMethods.FIFO Then Return CalculateFifoCost(DocumentItems); EndIf; If Policy.InventoryWriteOffMethod = Enums.InventoryWriteOffMethods.AverageCost Then Return CalculateAverageCost(DocumentItems); EndIf; ``` Здесь защищенной вариацией становится не только контракт сервиса `GetPolicy(...)`, но и сам набор допустимых настроек: система знает, какие варианты разрешены, и новые изменения старается вносить через расширение параметров, а не через хаотичную перепись всех клиентов. ## Где полезен в 1С - для внешних API, платежных систем, обменов и провайдеров данных; - для учетной политики, справочников настроек и параметризуемых алгоритмов; - в зонах, где ожидаются смена реализации или разные поставщики; - как архитектурная страховка от каскадных изменений. ## Когда принцип применяют неправильно - если защищать просто нечего и точка изменения не просматривается; - если ради гипотетической гибкости плодятся лишние абстракции; - если стабильный контракт сам оказывается нестабильным и часто меняется. ### patterns:grasp:pure_fabrication - Pure Fabrication URL: https://v8std.ru/patterns/grasp/pure-fabrication/ Markdown URL: https://v8std.ru/patterns/grasp/pure-fabrication/index.md Source path: patterns/grasp/pure-fabrication/index.md Aliases: patterns:grasp:pure_fabrication Related: related:patterns:principles External sources: нет # Чистая выдумка (`Pure Fabrication`) `Pure Fabrication` разрешает ввести отдельный служебный объект, если это снижает связанность и не перегружает доменную модель чужой логикой. ## Опора на ООП `Pure Fabrication` опирается на [низкую связанность и высокую связность](https://v8std.ru/patterns/principles/): иногда лучше создать специальный сервис, чем заставлять доменный объект делать неестественную для него работу ## Что показывает пример на 1С - сериализация документа для обмена вынесена в `ExchangePayloadSerializer`. - логика подготовки JSON не попадает в объект документа. - доменная модель и интеграционная логика остаются разделены. ## Пример #### DataProcessors.Application ```bsl Payload = CommonModules.ExchangePayloadSerializer.Serialize(SalesOrder); ``` #### CommonModules.ExchangePayloadSerializer ```bsl Function Serialize(SalesOrder) Export Payload = New Structure; Payload.Insert("Number", SalesOrder.Number); Payload.Insert("Date", SalesOrder.Date); Payload.Insert("Partner", SalesOrder.Partner); Return WriteJSON(Payload); EndFunction ``` ## Где полезен в 1С - для сериализации, маппинга, интеграций, кэширования и служебных вычислений; - когда доменные объекты начали обрастать техническими обязанностями; - когда нужен отдельный сервис, не отражающий бизнес-сущность напрямую. ## Когда принцип применяют неправильно - если под видом `Pure Fabrication` создают случайные "утилиты на все случаи"; - если служебный сервис становится новой свалкой логики; - если вынесенная обязанность на самом деле естественно принадлежала доменному объекту. ### patterns - Паттерны проектирования URL: https://v8std.ru/patterns/ Markdown URL: https://v8std.ru/patterns/index.md Source path: patterns/index.md Aliases: patterns Related: related:patterns:engineering, related:patterns:gof, related:patterns:grasp, related:patterns:principles, related:patterns:solid External sources: нет Этот раздел собирает классические паттерны проектирования, которые можно аккуратно приземлять на 1С-разработку. Сейчас здесь лежит базовый каркас: - базовые принципы объектного подхода; - `SOLID` и инженерные принципы проектирования; - краткие определения паттернов и отдельные практические страницы; - разбивка на `GOF` и `GRASP`; - опорные формулировки, от которых можно дальше переходить к 1С-примерам и ограничениям платформы. Дальше в этот раздел можно постепенно добавлять: - примеры реализации на встроенном языке и в конфигурации; - антипримеры, когда паттерн только усложняет решение; - привязку к стандартам разработки и типовым сценариям сопровождения. ## Что читать | Раздел | Что внутри | Зачем нужен | | --- | --- | --- | | [Принципы ООП](https://v8std.ru/patterns/principles/) | Полиморфизм, инкапсуляция и наследование | Чтобы сначала выровнять базовый язык проектирования | | [SOLID](https://v8std.ru/patterns/solid/) | Пять принципов устойчивой объектной архитектуры | Чтобы проверять, не расползается ли архитектура по обязанностям, контрактам и зависимостям | | [GOF](https://v8std.ru/patterns/gof/) | 23 классических паттерна и практические разборы по части из них | Чтобы говорить о типовых решениях на одном языке и сразу видеть 1С-приземление | | [GRASP](https://v8std.ru/patterns/grasp/) | Принципы распределения ответственности | Чтобы понимать, куда класть логику и как не раздувать связанность | | [Инженерные принципы](https://v8std.ru/patterns/engineering/) | DRY, KISS, YAGNI и соседние правила | Чтобы не переусложнять код и архитектуру без причины | ## Как использовать раздел 1. Сначала пройти базовые принципы и выровнять термины. 2. Потом понять намерение паттерна, а не копировать форму. 3. Затем проверить, решает ли он реальную проблему в 1С-коде или архитектуре конфигурации. 4. Только после этого подбирать конкретную реализацию под ограничения платформы, модулей, форм и клиент-серверного разделения. ### patterns:principles - Принципы ООП URL: https://v8std.ru/patterns/principles/ Markdown URL: https://v8std.ru/patterns/principles/index.md Source path: patterns/principles/index.md Aliases: patterns:principles Related: - related:patterns:gof:facade - related:patterns:gof:factory_method - related:patterns:gof:strategy - standard:std453 - standard:std455 - standard:std477 - standard:std544 - standard:std551 - standard:std603 - standard:std644 - standard:std678 External sources: нет Базовые идеи объектного подхода. Они дают язык, на котором потом проще обсуждать архитектурные решения. Для 1С это особенно важно: часть архитектурных понятий закреплена не отдельными конструкциями языка, а стандартами разработки. Например: - [#std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных](https://v8std.ru/std/551/) и [#std455: Структура модуля](https://v8std.ru/std/455/) формализуют понятия программного интерфейса, служебного программного интерфейса и внутренней реализации - [#std453: Описание процедур и функций](https://v8std.ru/std/453/) требует документировать методы программного интерфейса - [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) рассматривает API как контракт совместимости - [#std678: Безопасность прикладного программного интерфейса сервера](https://v8std.ru/std/678/) показывает, что серверный интерфейс — это еще и граница безопасности ## Интерфейсы Интерфейс — это контракт, который описывает, **какие операции доступны снаружи**, но не раскрывает, **как именно** они реализованы внутри. Практический смысл: - вызывающий код зависит от набора возможностей, а не от устройства реализации; - разные реализации можно подменять без переписывания всего клиентского кода; - границы между подсистемами становятся более явными и проверяемыми. Во многих ООП-языках интерфейс — отдельная языковая конструкция. В повседневном коде 1С такого механизма в явном виде обычно нет, поэтому роль интерфейса часто выполняют: - документированный набор экспортных методов; - согласованный контракт между модулями; - общий набор методов у разных объектов платформы. В 1С понятие интерфейса дополнительно формализуют стандарты: - [#std551](https://v8std.ru/std/551/) разделяет код на `Программный интерфейс`, `Служебный программный интерфейс` и служебную реализацию - [#std455](https://v8std.ru/std/455/) закрепляет это разделение в структуре модуля и шаблонах областей - [#std453](https://v8std.ru/std/453/) требует документировать методы программного интерфейса - и [#std544: Ограничения на использование экспортных процедур и функций](https://v8std.ru/std/544/) объясняют, где интерфейс не должен жить: в формах и командах - [#std644](https://v8std.ru/std/644/) требует не ломать API библиотек и не смешивать контракт с деталями реализации ```bsl Процедура СохранитьОбъект(Объект) // Для этой процедуры интерфейс объекта - обладание методом Записать(). Объект.Записать(); КонецПроцедуры ``` Для вызывающего кода интерфейс здесь очень простой: переданный объект должен поддерживать метод `Записать()`. Это важно для 1С по двум причинам: - контракт часто не зафиксирован синтаксисом языка и держится на договоренности; - поэтому интерфейс нужно явно документировать, проверять и не размывать случайными зависимостями. На что смотреть в 1С: - понятен ли публичный API общего модуля или объекта; - не зависит ли вызывающий код от лишних внутренних деталей; - можно ли заменить реализацию, не переписывая всех потребителей. ## Клиент как роль в паттернах В описаниях ООП и паттернов слово `Client` обычно означает не сетевого клиента и не место выполнения кода, а **код-потребитель интерфейса**. То есть `Client` в паттернах: - создает объект сам или получает его через фабрику, параметр или внедрение зависимости; - вызывает методы через контракт, а не через внутренние детали реализации; - связывает участников паттерна в рабочий сценарий. Именно поэтому в книгах по паттернам часто пишут `client code`: это просто код, который пользуется абстракцией. Например: - в [`Strategy`](https://v8std.ru/patterns/gof/strategy/) клиент выбирает конкретную стратегию и передает ее контексту - в [`Factory Method`](https://v8std.ru/patterns/gof/factory-method/) клиент просит фабрику создать объект, не зная конкретный класс - в [`Facade`](https://v8std.ru/patterns/gof/facade/) клиент работает с фасадом вместо прямой координации нескольких подсистем Это не то же самое, что клиент в клиент-серверной архитектуре. В клиент-серверной архитектуре клиент — это сторона взаимодействия, которая обращается к серверу по сети или выполняется в клиентском контексте. В 1С сюда относятся, например, клиентское приложение, форма или код с `&НаКлиенте`. В паттернах `Client` может быть любым потребителем API: - другим объектом; - общим модулем; - подсистемой; - отдельной процедурой в том же процессе. То есть один и тот же модуль в 1С может быть серверным по месту выполнения, но при этом оставаться `Client` по роли относительно другого объекта или интерфейса. ## Полиморфизм Полиморфизм позволяет работать с разными реализациями через общий контракт. Обычно полезно различать два вида полиморфизма: - `ad-hoc` полиморфизм; - классический полиморфизм по подтипу или контракту. Практический смысл: - вызывающий код знает, **что** нужно сделать, но не зависит от того, **как именно** это сделано; - разные варианты поведения можно подменять без переписывания всего сценария; - длинные ветки `Если ... ИначеЕсли ...` часто можно заменить на набор согласованных реализаций. Когда это полезно: - есть несколько способов выполнить одну и ту же операцию; - алгоритм зависит от типа объекта, режима работы или бизнес-сценария; - нужно уменьшить связанность между вызывающим кодом и конкретной реализацией. ### `Ad-hoc` полиморфизм `Ad-hoc` полиморфизм означает, что одна и та же операция ведет себя по-разному в зависимости от типов аргументов. В 1С это особенно заметно на встроенных операциях и универсальных функциях языка. ```bsl ЧисловойРезультат = 2 + 3; ТекстовыйРезультат = "Заказ №" + "15"; НоваяДата = '20240101' + 60; ``` Здесь один и тот же оператор `+`: - складывает числа; - конкатенирует строки; - сдвигает дату на число секунд. Это и есть `ad-hoc` полиморфизм: синтаксис один, а конкретное поведение выбирается по типам значений. Похожий прием можно реализовать и в собственной функции, когда поведение выбирается через разбор типа параметра: ```bsl Функция ПолучитьКраткоеПредставление(Значение) Экспорт ТипЗначения = ТипЗнч(Значение); Если ТипЗначения = Тип("Строка") Тогда Возврат СокрЛП(Значение); ИначеЕсли ТипЗначения = Тип("Число") Тогда Возврат Формат(Значение, "ЧГ=0"); ИначеЕсли ТипЗначения = Тип("Дата") Тогда Возврат Формат(Значение, "ДФ=dd.MM.yyyy"); Иначе Возврат Строка(Значение); КонецЕсли; КонецФункции ``` Здесь интерфейс вызова один и тот же, но результат зависит от того, что именно передали в параметр `Значение`. Это тоже `ad-hoc` полиморфизм, только реализованный вручную в коде прикладного решения. ### Классический полиморфизм Классический полиморфизм означает, что код работает с разными объектами через один и тот же ожидаемый набор операций. В прикладной разработке на 1С это чаще проявляется не через собственные пользовательские классы, а через: - общий набор методов у разных объектов платформы; - договоренность о публичном API; - единый контракт, который соблюдают разные реализации. Пример на 1С: ```bsl Процедура СохранитьОбъект(Объект) Объект.Записать(); КонецПроцедуры Заказ = Документы.ЗаказКлиента.СоздатьДокумент(); Реализация = Документы.РеализацияТоваровУслуг.СоздатьДокумент(); СохранитьОбъект(Заказ); СохранитьОбъект(Реализация); ``` Для процедуры `СохранитьОбъект` не так важно, какой именно это документ. Ей важен контракт: объект должен уметь выполнять `Записать()`. Именно это и есть классический полиморфизм: вызывающий код опирается на общее поведение, а не на конкретный тип реализации. В 1С такой контракт часто делают явным организационно: методы, на которые должны опираться другие подсистемы, выносят в раздел `Программный интерфейс` по [#std455](https://v8std.ru/std/455/) и [#std551](https://v8std.ru/std/551/), а их назначение документируют по [#std453](https://v8std.ru/std/453/) На что смотреть в 1С: - не разрастается ли код условиями по типу объекта или режиму выполнения; - можно ли вынести различающееся поведение за стабильный интерфейс; - не превращается ли общий модуль в диспетчер из десятков веток. ## Инкапсуляция Инкапсуляция означает, что объект или модуль скрывает внутреннее устройство и наружу отдает только нужный контракт. Практический смысл: - внешний код меньше знает о внутреннем состоянии и шагах обработки; - изменение внутренней реализации меньше затрагивает соседние части системы; - проще держать инварианты и проверять корректность данных в одном месте. Когда это полезно: - у сущности есть важные правила изменения состояния; - внутренние детали легко испортить прямым доступом из разных мест; - хочется сократить число неявных зависимостей между модулями. В прикладной архитектуре 1С эту идею поддерживают и стандарты: выносит программный интерфейс из модулей форм, а [#std678](https://v8std.ru/std/678/) требует не держать бизнес-логику в форме и не раскрывать на клиент лишние серверные детали Хороший прикладной признак инкапсуляции в 1С — самодостаточность данных внутри того объекта, который за них отвечает. Для регистров это закрепляет [#std477: Самодостаточность регистров](https://v8std.ru/std/477/): логика и отчеты по регистру не должны зависеть от полей регистратора, а должны работать на данных самого регистра Для документов ту же идею фиксирует [#std603: Требования к проведению документов](https://v8std.ru/std/603/): движения нужно формировать максимально на данных самого документа, а изменяемые внешние данные, влияющие на движения, следует сохранять в документе. Это и есть практическое “замыкание данных в документе”, чтобы результат проведения не зависел от того, как позже изменились НСИ или другие внешние объекты Дополнительно требует при создании на основании заполнять все наследуемые реквизиты, что тоже помогает не терять нужный контекст внутри самого документа. На что смотреть в 1С: - не читает ли внешний код слишком много внутренних полей напрямую; - не дублируются ли проверки и подготовка данных в нескольких местах; - можно ли собрать связанную логику в один понятный API вместо россыпи процедур. ## Наследование Наследование позволяет строить новую реализацию на основе существующей, переиспользуя общее поведение и уточняя различия. Обычно полезно различать несколько близких, но не одинаковых сценариев: - наследование от базового класса; - многоуровневое наследование; - множественное наследование; - реализацию интерфейса. Практический смысл: - можно вынести общий каркас поведения в базовый уровень; - дочерние реализации получают общий контракт и общую часть логики; - различия концентрируются в переопределяемых частях, а не копируются целиком. Когда это полезно: - есть устойчивое отношение `общее -> частное`; - несколько реализаций действительно разделяют существенную общую логику; - модель становится проще, а не сложнее, если ввести базовый уровень абстракции. ### Наследование от базового класса Это самый привычный вариант: есть базовый тип с общим поведением, а конкретные типы уточняют его под свою предметную область. В 1С такой механизм редко оформляется как пользовательское наследование классов, но архитектурно он хорошо читается в платформенных типах, которые порождаются метаданными. Например, платформа строит конкретные типы объектов метаданных: - `СправочникОбъект.Номенклатура`; - `СправочникОбъект.Контрагенты`; - `ДокументОбъект.ЗаказКлиента`. У них есть конкретная предметная семантика, но при этом они получают общий набор возможностей своего семейства: запись, удаление, работа с реквизитами, стандартные операции менеджера и объекта. В этом смысле конкретный справочник можно рассматривать как порожденный из более общего “базового” конструктора платформы для объектов метаданных. Пример на 1С: ```bsl Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); Контрагент = Справочники.Контрагенты.СоздатьЭлемент(); Номенклатура.Наименование = "Товар"; Контрагент.Наименование = "Покупатель"; Номенклатура.Записать(); Контрагент.Записать(); ``` Для прикладного кода это выглядит как работа с разными конкретными сущностями, которые унаследовали общий набор действий своего семейства. ### Многоуровневое наследование Многоуровневое наследование означает, что тип наследуется не напрямую только от одного базового класса, а через цепочку уровней: например, `БазовыйТип -> ПромежуточныйТип -> КонкретныйТип`. Такой прием позволяет накапливать общее поведение по слоям, но в других языках от него тоже часто стараются уходить, особенно когда цепочка становится глубокой: - поведение размазывается по нескольким уровням и его трудно собирать в голове; - изменение базового уровня неожиданно ломает дальних потомков; - переопределения и `super`-вызовы быстро делают код хрупким; - иерархия начинает жить своей жизнью и хуже отражает предметную модель. Поэтому даже там, где многоуровневое наследование технически доступно, обычно предпочитают держать иерархии короткими или заменять их: - композицией; - стратегиями; - явными интерфейсами и делегированием. В прикладной 1С такой прием применять нельзя: платформа не дает строить собственные пользовательские цепочки наследования классов уровня `базовый -> промежуточный -> конечный`. То есть разработчик 1С не может осознанно спроектировать многоуровневую объектную иерархию так, как это делают в Java, C# или C++. Если в 1С возникает желание выстроить несколько уровней “общего поведения”, это обычно признак того, что задачу лучше решить через: - общий модуль с понятным API; - композицию нескольких объектов или сервисов; - полиморфизм по согласованному контракту. ### Множественное наследование Множественное наследование означает, что один тип наследует поведение сразу от нескольких базовых типов. В мире в целом от него часто стараются уходить, потому что оно быстро приводит к конфликтам поведения и неочевидным зависимостям: - становится трудно понять, откуда пришел конкретный метод; - возникают конфликты одинаковых имен и правил переопределения; - иерархия становится хрупкой и плохо читаемой. В 1С такого пользовательского механизма архитектурно нет, и это скорее плюс: платформа не подталкивает к сложным иерархиям, которые потом тяжело сопровождать. Поэтому в прикладной архитектуре 1С обычно выбирают не множественное наследование, а: - композицию; - явный программный интерфейс модуля; - разделение ответственности по подсистемам и областям API. ### Реализация интерфейса Во многих языках это отдельный механизм: тип явно пишет, какой интерфейс он реализует. В 1С такого синтаксиса обычно нет, но архитектурно похожий прием используется постоянно: реализация не объявляется ключевым словом, а организуется через согласованный контракт. Обычно это выражается так: - модуль или объект предоставляет ожидаемый набор экспортных методов; - эти методы выносятся в область `ПрограммныйИнтерфейс`; - при необходимости методы для внутренних потребителей выносятся в `СлужебныйПрограммныйИнтерфейс`; - назначение интерфейса документируется по [#std453](https://v8std.ru/std/453/), а сама структура закрепляется по [#std455](https://v8std.ru/std/455/) и [#std551](https://v8std.ru/std/551/) То есть в 1С реализация интерфейса чаще всего не объявляется явно, а описывается организационно: через специальную область и соблюдение контрактов между модулями и подсистемами. На что смотреть в 1С: - не пытаемся ли мы смоделировать сложную иерархию там, где достаточно композиции; - не подменяем ли отсутствие явных интерфейсов хаотичным набором экспортных процедур; - оформлен ли контракт в `ПрограммномИнтерфейсе` так, чтобы им реально могли безопасно пользоваться другие подсистемы; - не используется ли наследование там, где достаточно композиции или стратегии; - не появляется ли хрупкая иерархия, где изменение базового поведения ломает все частные случаи; - не маскирует ли наследование обычное копирование кода под “архитектуру”. ## Как читать этот раздел дальше 1. Сначала понять базовый смысл принципа. 2. Потом проверить, какую реальную проблему он решает в прикладной конфигурации. 3. Только после этого переходить к более конкретным паттернам `GOF` и принципам `GRASP`. ### patterns:solid:dependency_inversion - Dependency Inversion Principle URL: https://v8std.ru/patterns/solid/dependency-inversion/ Markdown URL: https://v8std.ru/patterns/solid/dependency-inversion/index.md Source path: patterns/solid/dependency-inversion/index.md Aliases: patterns:solid:dependency_inversion Related: нет External sources: нет # Dependency Inversion Principle (`DIP`) `DIP` требует, чтобы высокоуровневая логика зависела от абстракций, а не от конкретных деталей инфраструктуры. ## Что означает в 1С Бизнес-сервису лучше знать про контракт поставщика курсов, уведомлений или оплаты, чем напрямую зависеть от конкретного HTTP-клиента, банка или внешней системы. В 1С это часто проявляется в двух очень практических местах. - При работе с внешними компонентами прикладной код стараются завязывать не на конкретный COM-объект или бинарную компоненту, а на общий модуль или подсистему-обертку. - В механизмах печати роль стабильной границы часто играет `ТабличныйДокумент`: прикладной код зависит от факта, что на выходе есть готовое табличное представление, а не от конкретного устройства печати, формата файла или способа показа пользователю. То есть `DIP` в 1С не всегда выглядит как "классический интерфейс" в коде. Иногда роль абстракции выполняет: - общий модуль с контрактом поверх внешней компоненты; - подсистема, которая централизует подключение внешнего кода; - промежуточное представление вроде `ТабличныйДокумент`. Это хорошо видно в: - и по сути закрепляют разделение между получением данных и выводом печатной формы. ## Пример на 1С #### DataProcessors.PaymentService ```bsl Var Gateway; Procedure SetGateway(Gateway_) Export Gateway = Gateway_; EndProcedure Procedure Pay(InvoiceRef, Amount) Export Gateway.Pay(InvoiceRef, Amount); EndProcedure ``` #### CommonModules.BankGateway ```bsl Procedure Pay(InvoiceRef, Amount) Export // Specific bank integration. EndProcedure ``` ## Частый пример с печатью В печатных механизмах `DIP` часто выглядит так: прикладной код подготавливает `ТабличныйДокумент`, а уже другой слой решает, показать его, распечатать, сохранить или отправить дальше. В этом смысле `ТабличныйДокумент` выступает как инвертирующая граница между бизнес-логикой подготовки печати и конкретным способом вывода. ```bsl Функция СформироватьПечатнуюФорму(ДокументСсылка) Экспорт ТабДок = Новый ТабличныйДокумент; // Заполнение областей и вывод данных. Возврат ТабДок; КонецФункции Процедура Печать(ДокументСсылка) Экспорт ТабДок = СформироватьПечатнуюФорму(ДокументСсылка); ТабДок.Показать(); КонецПроцедуры ``` Если позже форма будет не показываться на экране, а, например, сохраняться в файл или уходить во внешний сервис печати, высокоуровневый код, который отвечает за состав печатной формы, можно оставить прежним. ## Где полезен - в интеграциях с банками, API и внешними сервисами; - при работе с внешними компонентами через обертки и подсистемы; - в механизмах печати, где `ТабличныйДокумент` служит стабильным контрактом; - в прикладных сервисах, которые должны переживать смену провайдера; - в тестируемой бизнес-логике. ## Когда применяют неправильно - когда абстракции вводятся без реальной точки изменения; - когда высокий уровень по-прежнему знает слишком много о деталях; - когда простую зависимость усложняют ради формального следования принципу. ### patterns:solid - SOLID URL: https://v8std.ru/patterns/solid/ Markdown URL: https://v8std.ru/patterns/solid/index.md Source path: patterns/solid/index.md Aliases: patterns:solid Related: - related:patterns:solid:dependency_inversion - related:patterns:solid:interface_segregation - related:patterns:solid:liskov_substitution - related:patterns:solid:open_closed - related:patterns:solid:single_responsibility External sources: нет `SOLID` — это набор из пяти принципов, которые помогают делать объектную архитектуру расширяемой и предсказуемой. В 1С они полезны не как догма, а как набор проверочных вопросов: - не перегружен ли модуль лишними обязанностями; - можно ли расширять поведение без постоянной правки старого кода; - не ломает ли замена реализации ожидания клиента; - не стал ли контракт слишком широким; - не зависит ли бизнес-логика напрямую от инфраструктуры. ## Принципы SOLID | Принцип | Что означает | На что смотреть | | --- | --- | --- | | [Single Responsibility Principle](https://v8std.ru/patterns/solid/single-responsibility/) (`SRP`) | У модуля должна быть одна причина для изменения. | Не смешаны ли в одном месте расчет, проведение, печать и интеграции. | | [Open/Closed Principle](https://v8std.ru/patterns/solid/open-closed/) (`OCP`) | Систему лучше расширять, чем постоянно переписывать. | Можно ли добавить новый вариант без правки стабильного кода. | | [Liskov Substitution Principle](https://v8std.ru/patterns/solid/liskov-substitution/) (`LSP`) | Подстановка реализации не должна ломать ожидания клиента. | Можно ли безопасно заменить одну реализацию другой. | | [Interface Segregation Principle](https://v8std.ru/patterns/solid/interface-segregation/) (`ISP`) | Контракты должны быть узкими и целевыми. | Не заставляем ли клиентов зависеть от лишних методов. | | [Dependency Inversion Principle](https://v8std.ru/patterns/solid/dependency-inversion/) (`DIP`) | Высокоуровневая логика должна зависеть от абстракций, а не от деталей. | Не знает ли бизнес-модуль слишком много о конкретной интеграции или хранилище. | ### patterns:solid:interface_segregation - Interface Segregation Principle URL: https://v8std.ru/patterns/solid/interface-segregation/ Markdown URL: https://v8std.ru/patterns/solid/interface-segregation/index.md Source path: patterns/solid/interface-segregation/index.md Aliases: patterns:solid:interface_segregation Related: standard:std455, standard:std551, standard:std644 External sources: нет # Interface Segregation Principle (`ISP`) `ISP` говорит: лучше несколько узких контрактов, чем один широкий интерфейс, от которого всем достается лишнее. ## Что означает в 1С Для 1С это обычно означает, что не нужно заставлять клиента зависеть от общего модуля или объекта, где рядом лежат: - чтение; - запись; - печать; - отправка; - администрирование. Если клиенту нужна только одна часть, контракт лучше сузить. В 1С такая сегрегация часто выполняется не отдельной конструкцией языка, а организацией модуля через области. Например: - методы для внешних потребителей выносят в `Программный интерфейс`; - более узкие точки входа для других подсистем могут оформляться областью `ДляВызоваИзДругихПодсистем`; - методы для внутренних технических потребителей оставляют в `СлужебныйПрограммныйИнтерфейс`. То есть сегрегация здесь выражается не только в "разных интерфейсах" как в классическом ООП, но и в том, что модуль явно показывает: какой набор методов предназначен для какого круга клиентов. Это поддерживают и стандарты: [#std455: Структура модуля](https://v8std.ru/std/455/), [#std551: Разработка конфигураций с повторным использованием общего кода и объектов метаданных](https://v8std.ru/std/551/) и [#std644: Обеспечение совместимости библиотек](https://v8std.ru/std/644/) ## Пример на 1С #### CommonModules.InvoicePrintProvider ```bsl Function GetPrintData(InvoiceRef) Export Return New Structure; EndFunction ``` #### CommonModules.InvoiceExportProvider ```bsl Function Export(InvoiceRef) Export Return "Exported"; EndFunction ``` #### CommonModules.InvoiceServices ```bsl #Region Program interface Function GetPrintData(InvoiceRef) Export Return New Structure; EndFunction #EndRegion #Region ДляВызоваИзДругихПодсистем Function ExportForExchange(InvoiceRef) Export Return "Exported"; EndFunction #EndRegion #Region Service interface Procedure ResetCache() Export EndProcedure #EndRegion ``` Клиент печати зависит только от `GetPrintData()`, а клиент экспорта только от `Export()`. Им не нужен общий "супер-интерфейс", в котором перемешаны обе обязанности. ## Где полезен - в общих модулях прикладных сервисов; - в интеграционных шлюзах; - в коде форм, которым нужна только узкая часть большого API. ## Когда применяют неправильно - когда дробление уходит слишком далеко и интерфейсов становится больше, чем смысла; - когда разделение не отражает реальных сценариев использования; - когда клиентам почти всегда нужен полный набор операций. ### patterns:solid:liskov_substitution - Liskov Substitution Principle URL: https://v8std.ru/patterns/solid/liskov-substitution/ Markdown URL: https://v8std.ru/patterns/solid/liskov-substitution/index.md Source path: patterns/solid/liskov-substitution/index.md Aliases: patterns:solid:liskov_substitution Related: standard:std463 External sources: нет # Liskov Substitution Principle (`LSP`) `LSP` требует, чтобы одну реализацию можно было заменить другой без поломки ожиданий клиента. ## Что означает в 1С Если модуль или объект объявлен как реализация общего контракта, клиент должен иметь возможность работать с ним одинаково: - без неожиданных исключений; - без изменения смысла результата; - без скрытых ограничений, о которых контракт не предупреждает. ## Пример на 1С #### DataProcessors.ReportSourceConsumer ```bsl Function Load(Source) Export Return Source.GetRows(); EndFunction ``` #### CommonModules.QueryReportSource ```bsl Function GetRows() Export Return New ValueTable; EndFunction ``` #### CommonModules.InteractiveOnlySource ```bsl Function GetRows() Export Raise "Can be used only from form"; EndFunction ``` `InteractiveOnlySource` формально похож на подходящую реализацию, но фактически нарушает `LSP`: клиент ожидает, что `GetRows()` можно вызвать по контракту, а получает ограничение, о котором контракт ничего не сказал. ## Типичный пример в 1С В 1С нарушение `LSP` часто проявляется не только в возвращаемых значениях, но и в способе сигнализации об ошибках. Например, для сценария проверки заполнения обычно ожидается, что обработчик: - установит `Отказ = Истина`; - добавит понятные сообщения пользователю; - завершит проверку без исключения. Именно на такой стиль работы завязаны и платформа, и рекомендации по, и по [#std463: Проверки, выполняемые в и вне транзакции записи объекта](https://v8std.ru/std/463/) Если все клиенты и инфраструктурный код рассчитывают на такое поведение, а одна реализация вместо этого бросает исключение, она нарушает `LSP`: формально событие то же самое, но контракт поведения для клиента уже другой. Условно: ```bsl Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если Не ЗначениеЗаполнено(Контрагент) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не заполнен контрагент."; Сообщение.Сообщить(); Отказ = Истина; Возврат; КонецЕсли; КонецПроцедуры ``` И проблемный вариант: ```bsl Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если Не ЗначениеЗаполнено(Контрагент) Тогда ВызватьИсключение "Не заполнен контрагент"; КонецЕсли; КонецПроцедуры ``` Во втором случае обработчик уже нельзя безопасно подставить туда, где ожидается обычная логика проверки заполнения с отказом и пользовательскими сообщениями. ## Где полезен - в семействах взаимозаменяемых сервисов; - в расширяемых точках конфигурации; - там, где один и тот же клиент работает с несколькими реализациями. ## Когда применяют неправильно - когда общий контракт слишком расплывчат; - когда разные реализации на самом деле решают разные задачи; - когда ограничения реализации не выражены в контракте. ### patterns:solid:open_closed - Open/Closed Principle URL: https://v8std.ru/patterns/solid/open-closed/ Markdown URL: https://v8std.ru/patterns/solid/open-closed/index.md Source path: patterns/solid/open-closed/index.md Aliases: patterns:solid:open_closed Related: нет External sources: нет # Open/Closed Principle (`OCP`) `OCP` говорит: модуль должен быть открыт для расширения, но закрыт для постоянной правки базового кода. ## Что означает в 1С Если новый вариант поведения появляется регулярно, лучше подготовить точку расширения, чем каждый раз дописывать еще одну ветку `Если ... ИначеЕсли`. ## Пример на 1С #### DataProcessors.ExportService ```bsl Var Provider; Procedure SetProvider(Provider_) Export Provider = Provider_; EndProcedure Function Export(DocumentRef) Export Return Provider.Export(DocumentRef); EndFunction ``` #### CommonModules.PdfExportProvider ```bsl Function Export(DocumentRef) Export Return "PDF"; EndFunction ``` #### CommonModules.ExcelExportProvider ```bsl Function Export(DocumentRef) Export Return "XLSX"; EndFunction ``` ## Где полезен - для вариантов печати, обмена, расчета и интеграции; - когда список реализаций растет; - в устойчивых прикладных сервисах, куда часто добавляют новые режимы. ## Когда применяют неправильно - когда точку расширения строят заранее без реальной потребности; - когда ради гипотетической гибкости вводят лишние абстракции; - когда проще и понятнее оставить обычное условие. ### patterns:solid:single_responsibility - Single Responsibility Principle URL: https://v8std.ru/patterns/solid/single-responsibility/ Markdown URL: https://v8std.ru/patterns/solid/single-responsibility/index.md Source path: patterns/solid/single-responsibility/index.md Aliases: patterns:solid:single_responsibility Related: нет External sources: нет # Single Responsibility Principle (`SRP`) `SRP` говорит: у модуля, объекта или сервиса должна быть одна причина для изменения. Про этот принцип часто говорят и по-другому: у модуля должна быть одна ось изменений. Важно правильно понимать слово "ответственность". В `SRP` это не "кто отвечает за код" и не "какой разработчик владеет модулем". Ответственность здесь - это код, который нужен для одной причины изменения, одного сценария или одного use case. Если один и тот же модуль меняют: - из-за изменения расчета; - из-за изменения печатной формы; - из-за нового сценария обмена; - из-за нового UI-поведения; то у него уже несколько осей изменений, а значит `SRP` нарушен. ## Что означает в 1С Для 1С это почти всегда вопрос о том, не превратился ли один общий модуль или объект документа в комбайн, где одновременно живут: - расчет; - проведение; - печать; - обмен; - уведомления; - работа формы. Если эти части меняются по разным причинам, их лучше развести. То есть полезно спрашивать не "про что этот модуль вообще", а "по какой причине мы будем его менять". Если ответов несколько, модуль, скорее всего, собран слишком широко. ## Пример на 1С #### CommonModules.SalesOrderTotals ```bsl Function Calculate(DocumentObject) Export TotalAmount = 0; For Each ItemRow In DocumentObject.Items Do TotalAmount = TotalAmount + ItemRow.Amount; EndDo; Return TotalAmount; EndFunction ``` #### CommonModules.SalesOrderPrinting ```bsl Function GetPrintData(DocumentObject) Export PrintData = New Structure; PrintData.Insert("Number", DocumentObject.Number); PrintData.Insert("TotalAmount", DocumentObject.TotalAmount); Return PrintData; EndFunction ``` ## Где полезен - при проектировании общих модулей; - в объектных модулях документов и справочников; - при разбиении слишком больших форм и сервисов. ## Когда применяют неправильно - когда ради чистоты модуль режут на десятки бессмысленно мелких файлов; - когда одна целостная операция искусственно распадается на фрагменты; - когда вместо простой структуры появляется лишняя бюрократия. ## service ### lang - Описание возможностей и особенностей встроенного языка URL: https://v8std.ru/lang/ Markdown URL: https://v8std.ru/lang/index.md Source path: lang/index.md Aliases: lang Related: нет External sources: нет Данный раздел является **справочно-учебным**. Он описывает язык целиком: синтаксис, семантику, ограничения и типовые особенности. Разделы можно читать выборочно. --- ## 1. Лексика и базовые правила языка (символы, ключевые слова, формат кода) ### 1.1 Регистр и язык ключевых слов Язык **регистронезависим**: - `Если`, `ЕСЛИ`, `если` — эквивалентны. Язык **двуязычный**: - почти все ключевые слова имеют русское и английское написание; - можно смешивать языки в одном модуле. ### 1.2 Идентификаторы Имена переменных, процедур и функций: - начинаются с буквы или `_`; - содержат буквы, цифры и `_`; - не должны совпадать с ключевыми словами языка; - не должны совпадать с именами свойств/методов, доступных в текущем контексте. Примеры корректных идентификаторов: ```bsl Сумма _ВнутреннийФлаг СформироватьОтчет2024 ``` ### 1.3 Комментарии Комментарий начинается с `//` и заканчивается концом строки. ```bsl // Это комментарий Сумма = 10; // Комментарий после оператора ``` После `//` на той же строке **нельзя** продолжать писать код. ### 1.4 Разделитель операторов Операторы отделяются **точкой с запятой** `;`. Конец строки **не завершает** оператор. Оператор может переноситься. ```bsl Сумма = 1 + 2 + 3; ``` Можно писать несколько операторов в одной строке: ```bsl A = 1; B = 2; C = A + B; ``` ### 1.5 Метки и переходы Метка — это специальный идентификатор, начинающийся с `~` и заканчивающийся `:`. ```bsl ~Начало: A = 1; ``` Метки используются оператором `Перейти` (аналог `Goto`). Это редкий инструмент, применяйте только при реальной необходимости. ### 1.6 Специальные символы (что означает каждый) - `//` — комментарий до конца строки - `|` — перенос строки в многострочной строке (строка-продолжение) - `~` — начало метки - `:` — конец метки - `;` — разделитель операторов - `()` — параметры вызова и управление приоритетом - `[]` — доступ к свойству по имени / доступ к элементу коллекции - `,` — разделитель параметров - `""` — строковый литерал - `''` — литерал даты - `.` — доступ к свойствам/методам - `+ - * / %` — арифметика и/или конкатенация - `> >= ` — сравнение ### 1.7 Ключевые слова (зарезервированные) Эти слова нельзя использовать как имена переменных/процедур/функций. Управление потоком: - `Если/If`, `Тогда/Then`, `ИначеЕсли/ElsIf`, `Иначе/Else`, `КонецЕсли/EndIf` - `Для/For`, `Каждого/Each`, `Из/In`, `По/To` - `Пока/While`, `Цикл/Do`, `КонецЦикла/EndDo` - `Продолжить/Continue`, `Прервать/Break`, `Возврат/Return` - `Перейти/Goto` Процедуры/функции и переменные: - `Процедура/Procedure`, `КонецПроцедуры/EndProcedure` - `Функция/Function`, `КонецФункции/EndFunction` - `Перем/Var` Логика: - `И/And`, `Или/Or`, `Не/Not` Исключения: - `Попытка/Try`, `Исключение/Except`, `КонецПопытки/EndTry`, `ВызватьИсключение/Raise` Прочее: - `Новый/New` - `Выполнить/Execute` - `Ждать/Await` --- ## 2. Типы данных и значения ### 2.1 Примитивные типы **Число** - десятичное; - до 38 значащих цифр; **Строка** - Unicode; - произвольной длины; - поддерживает многострочные литералы. **Дата** - дата и время; - точность до 1 секунды; - арифметика с секундами. **Булево** - `Истина` / `Ложь`; - результат логических выражений. **`Неопределено`** - отсутствие значения; - используется по умолчанию. **`Null`** - отсутствие данных БД; - применяется при соединениях и запросах. ### 2.2 Тип Используется для: - проверки типов; - сравнения типов; - динамической логики. --- ## 3. Выражения и вычисления (все операции с примерами) Выражение — это формула, которая вычисляет значение. Выражения состоят из литералов, переменных, вызовов функций и операций. ### 3.1 Арифметические операции > Ниже перечислены **все арифметические операции**, доступные в языке. **Сложение `+`** ```bsl Сумма = 2 + 3; // 5 ``` Определено для: - `Число + Число` - `Дата + Число` (число — секунды) - ```bsl НоваяДата = '20240101' + 60; // +60 секунд ``` **Вычитание `-`** ```bsl Разница = 10 - 4; // 6 ``` Определено для: - `Число - Число` - `Дата - Число` (число — секунды) - `Дата - Дата` (результат — секунды) ```bsl Дата1 = '20240101'; Дата2 = '20240101'; Секунды = Дата1 - Дата2; // 0 ``` **Умножение `*`** ```bsl Итог = 6 * 7; // 42 ``` **Деление `/`** ```bsl Частное = 10 / 4; // 2.5 ``` **Остаток от деления `%`** ```bsl Остаток = 10 % 3; // 1 ``` **Унарный минус `-`** ```bsl X = -5; Y = -(2 + 3); // -5 ``` > Примечание: семантика операции определяется типом **первого операнда**. Если тип второго операнда не подходит, платформа пытается привести тип автоматически; если нельзя — возникает ошибка выполнения. ### 3.2 Операция конкатенации строк Конкатенация использует тот же оператор `+`. ```bsl ФИО = Фамилия + " " + Имя + " " + Отчество; ``` Если правый операнд не строка, он будет преобразован к строке по правилам преобразования типов. ### 3.3 Операции сравнения Операции сравнения возвращают **Булево**: `Истина` или `Ложь`. **Больше `>`** ```bsl Результат = (10 > 5); // Истина ``` **Больше или равно `>=`** ```bsl Результат = (10 >= 10); // Истина ``` **Меньше `<`** ```bsl Результат = (3 < 2); // Ложь ``` **Меньше или равно `<=`** ```bsl Результат = (3 <= 3); // Истина ``` **Равно `=`** ```bsl Результат = ("A" = "A"); // Истина ``` **Не равно `<>`** ```bsl Результат = ("A" <> "B"); // Истина ``` Операции сравнения определены для: - `Число`, `Строка`, `Дата` (для `> >= < <=`) - любых типов (для `=` и `<>`) ### 3.4 Булевы операции (логика) **`И` / `And`** ```bsl Результат = (Цена > 0) И (Количество > 0); ``` **`Или` / `Or`** ```bsl Результат = (ЭтоАдмин) Или (ЭтоМенеджер); ``` **`Не` / `Not`** ```bsl Результат = Не ЭтоАдмин; ``` **Короткое замыкание** Вычисляются только необходимые части выражения. ```bsl Если (Цена > 0) И ПроверкаСуммы() Тогда // Если Цена <= 0, функция ПроверкаСуммы() не вызовется КонецЕсли; ``` ### 3.5 Приоритет операций Операторы с одинаковым приоритетом вычисляются слева направо. 1. Скобки: `()` 2. `Не` 3. `И` 4. `Или` 5. Сравнение: `= > <>` 6. `+ -` 7. `* / %` 8. Унарные: `- +` 9. Доступ/вызов: `.` и `()` Практическое правило: - если есть сомнения — ставьте скобки. --- ## 4. Операторы управления (все базовые конструкции с примерами) ### 4.1 Условие: `Если` / `ИначеЕсли` / `Иначе` ```bsl Если Сумма > 1000 Тогда Сообщить("Скидка применена"); ИначеЕсли Сумма > 0 Тогда Сообщить("Без скидки"); Иначе Сообщить("Сумма не задана"); КонецЕсли; ``` ### 4.2 Цикл `Для ... По ...` Числовой цикл. ```bsl Для i = 1 По 5 Цикл Сообщить(i); КонецЦикла; ``` Шаг цикла задать невозможно, шак всегда равен `1`; ### 4.3 Цикл `Для Каждого ... Из ...` Обход коллекций. ```bsl Для Каждого Элемент Из Коллекция Цикл Сообщить(Элемент); КонецЦикла; ``` ### 4.4 Цикл `Пока ...` Цикл с предусловием. ```bsl Пока Счетчик < 3 Цикл Счетчик = Счетчик + 1; КонецЦикла; ``` ### 4.5 Управление циклом **`Продолжить`** — перейти к следующей итерации: ```bsl Для Индекс = 1 По 5 Цикл Если Индекс = 3 Тогда Продолжить; КонецЕсли; Сообщить(Индекс); // выведет 1,2,4,5 КонецЦикла; ``` **`Прервать`** — выйти из цикла: ```bsl Для Индекс = 1 По 5 Цикл Если Индекс = 3 Тогда Прервать; КонецЕсли; КонецЦикла; ``` ### 4.6 Возврат из функции `Возврат` завершает функцию и возвращает значение. ```bsl Функция Макс(А, Б) Если А > Б Тогда Возврат А; Иначе Возврат Б; КонецЕсли; КонецФункции ``` ### 4.7 Переход `Перейти` (`Goto`) Используйте только если действительно нужен линейный сценарий с редкими ветвлениями. ```bsl A = 0; Перейти ~Конец; A = 1; // не выполнится ~Конец: Сообщить(A); // 0 ``` ### 4.8 Исключения: `Попытка` / `Исключение` / `ВызватьИсключение` ```bsl Попытка // потенциально опасный код Рез = 10 / 0; Исключение Сообщить("Произошла ошибка"); КонецПопытки; ``` Явный выброс исключения: ```bsl Если Сумма <= 0 Тогда ВызватьИсключение "Сумма должна быть больше 0"; КонецЕсли; ``` ### 4.9 `Новый` (создание объекта) `Новый` создает объект указанного типа. ```bsl М = Новый Массив; ``` > Конкретные имена типов объектов зависят от доступного контекста (платформа и конфигурация). ### 4.10 `Выполнить` (`Execute`) Выполняет строку как код. ```bsl ТекстКода = "A = 1;"; Выполнить(ТекстКода); ``` > Используйте осторожно: ухудшает читаемость, сложнее отлаживать, повышает риск ошибок. ### 4.11 `Асинх` (`Async`) Ключевое слово языка для определения процедур и функций на клиенте как асинхронных. Асинхронное исполнение возможно только у асинхронных функций. Ждать асинхронные функции можно, а асинхронные процедуры нельзя. Из асинхронных процедур можно вызывать асинхронные функции. Из простых процедур нельзя вызывать асинхронные функции. При добавлении `Асинх` к процедуре или функции все ее параметры начинают передаваться по значению, так, как будто перед ними стояло бы ключевое слово `Знач`. ### 4.12 `Ждать` (`Await`) Ключевое слово языка для ожидания (использование зависит от поддерживаемых механизмов в окружении). --- ## 5. Процедуры и функции ### 5.1 Процедуры - выполняют действие; - не возвращают значение; - могут быть экспортируемыми. ### 5.2 Функции - возвращают значение через `Возврат`; - могут использоваться в выражениях; - допускают досрочный возврат. ### 5.3 Параметры - по значению (при использовании `Знач` и в асинхронных методах); - по ссылке (по умолчанию); - значения по умолчанию. --- ## 6. Программный модуль ### 6.1 Разделы модуля 1. Переменные (`Перем`) 2. Процедуры и функции 3. Основной код (инициализация) --- ## 7. Контекст выполнения ### 7.1 Глобальный контекст - функции платформы; - системные перечисления; - глобальные общие модули. ### 7.2 Локальный контекст Зависит от: - типа модуля; - объекта конфигурации; - режима запуска. --- ## 8. Клиент-серверная модель ### 8.1 Среды выполнения - клиентское приложение; - сервер приложения. ### 8.2 Директивы компиляции - `&НаКлиенте` - `&НаСервере` - `&НаСервереБезКонтекста` - `&НаКлиентеНаСервере` Директива: - определяет место выполнения; - влияет на доступные данные; - влияет на сетевые вызовы. --- ## 9. Препроцессор ### 9.1 Назначение - исключение кода; - платформозависимая логика; - группировка. ### 9.2 Инструкции - `#Если / #Иначе / #КонецЕсли` - `#Область / #КонецОбласти` - `#Вставка / #Удаление` Препроцессор выполняется **до компиляции**. --- ## 10. Аннотации - `&Перед` - `&После` - `&Вместо` - `&ИзменениеИКонтроль` Используются только в расширениях. --- ## 11. Особенности и ограничения языка - динамическая типизация; - отсутствие классов в классическом смысле; - сильная зависимость от контекста; - ориентация на бизнес-логику; - высокая роль архитектурных решений. --- ## Итог Встроенный язык: - прост синтаксически; - сложен контекстуально; - требует архитектурного мышления. - ориентирован на бизнес-логику. Его нужно изучать **не как язык общего назначения**, а как инструмент платформы. Главное для начинающего: - понимать, **где выполняется код**; - понимать, **в каком контексте** он работает; - писать простой и читаемый код. ### mcp - MCP для ИИ-инструментов URL: https://v8std.ru/mcp/ Markdown URL: https://v8std.ru/mcp.md Source path: mcp.md Aliases: mcp Related: нет External sources: - https://github.com/itrous/bsl-analyzer - https://github.com/1c-syntax/bsl-language-server - https://ai.v8std.ru/mcp - https://ai.v8std.ru/healthz - https://ai.v8std.ru/version - https://ai.v8std.ru/mcp` - https://github.com/zeegin/v8std.git - http://127.0.0.1:8765/mcp - http://127.0.0.1:8765/healthz MCP (Model Context Protocol) — протокол, через который среда разработки или ИИ-агент получает доступ к внешним инструментам и источникам данных. Для `v8std.ru` MCP-сервер дает агенту структурированный доступ к стандартам, диагностикам и связям между ними. Вместо того чтобы искать страницы через браузер, агент вызывает методы MCP: ищет стандарт, получает страницу по идентификатору, переходит к связанным диагностикам или объясняет предупреждение анализатора. Основной сценарий — совместная работа с локальными инструментами анализа кода, например с [`bsl-analyzer`](https://github.com/itrous/bsl-analyzer) или [BSL Language Server](https://github.com/1c-syntax/bsl-language-server): 1. локальный анализатор проверяет исходный код проекта и находит диагностику; 2. агент запрашивает в MCP описание диагностики и связанные стандарты; 3. агент предлагает исправление с учетом причины нарушения, а не только текста предупреждения. MCP-сервер `v8std` не анализирует исходный код пользователя и не принимает файлы конфигурации. Он работает как read-only банк знаний по публичным материалам сайта. ## Подключение готового сервиса Публичный MCP-сервер доступен по адресу: ```text https://ai.v8std.ru/mcp ``` Подключение к Codex: ```bash codex mcp add v8std --url https://ai.v8std.ru/mcp ``` Подключение к Claude Code: ```bash claude mcp add --transport http v8std https://ai.v8std.ru/mcp ``` Проверочные endpoint'ы: ```text https://ai.v8std.ru/healthz https://ai.v8std.ru/version ``` Готовый сервис использует опубликованный индекс сайта и подходит для обычной работы в IDE: поиск стандартов, объяснение диагностики, подбор связанных страниц. ## Безопасность и приватность Публичный `https://ai.v8std.ru/mcp` работает только с публичным индексом сайта и не выполняет пользовательский код. При этом все параметры MCP-вызовов передаются на сервер в HTTP body, поэтому публичный сервис не предназначен для приватных фрагментов исходного кода в `v8std.explain_snippet`. Для закрытого кода используйте локальный MCP-контейнер и передавайте на публичный сервис только поисковые фразы, идентификаторы стандартов и коды диагностик. Продакшен-контур должен держать MCP-процесс на `127.0.0.1`, проксировать его через nginx и ограничивать `/mcp`: `client_max_body_size 256k`, rate limit и логи без тел запросов. ## Локальный запуск Локальный вариант нужен, если требуется полностью автономный запуск по файлам репозитория или нужно проверить изменения сайта до публикации. ```bash git clone https://github.com/zeegin/v8std.git cd v8std docker compose -f docker-compose/docker-compose.yml up -d v8std-mcp ``` MCP будет доступен только с этой машины: ```text http://127.0.0.1:8765/mcp ``` Подключение к Codex: ```bash codex mcp add v8std-local --url http://127.0.0.1:8765/mcp ``` Подключение к Claude Code: ```bash claude mcp add --transport http v8std-local http://127.0.0.1:8765/mcp ``` Локальный контейнер монтирует репозиторий в `/docs` и читает файлы `/docs/docs/ai/pages.jsonl` и `/docs/docs/ai/search-vectors.jsonl`. При `V8STD_MCP_GENERATE_INDEX=auto` индекс и векторы генерируются при старте контейнера, если файлы отсутствуют. Полезные команды: ```bash curl http://127.0.0.1:8765/healthz docker logs v8std-mcp docker compose -f docker-compose/docker-compose.yml restart v8std-mcp ``` ## Инструменты MCP ### `v8std.search` Ищет страницы гибридным ранжированием: точные алиасы и коды диагностик, BM25 по заголовкам и тексту, статический векторный индекс и доменные правила. Подходит для сценариев: - найти стандарт по `std437`, `#std437`, `стандарт 437`; - найти диагностику по `acc:1245`, `апк 1245`, `AssignAliasFieldsInQuery`; - найти материалы по теме: `запросы`, `регламентные задания`, `права`; - найти смысловой запрос: `форма не должна содержать бизнес-логику и доступ к данным`; - разобрать кодовый фрагмент: `Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ...")`. Основные параметры: | Параметр | Назначение | | --- | --- | | `query` | Строка поиска | | `types` | Необязательный список типов: `standard`, `diagnostic`, `pattern`, `service` | | `mode` | `hybrid`, `exact`, `bm25` или `semantic` | | `limit` | Количество результатов, не больше 50 | ### `v8std.page` Возвращает страницу по идентификатору, алиасу, пути или URL. Подходит для сценариев: - получить полный текст стандарта перед исправлением кода; - открыть Markdown-версию страницы по HTML-ссылке; - получить описание диагностики по точному коду. Основные параметры: | Параметр | Назначение | | --- | --- | | `id_or_alias_or_url` | Идентификатор, алиас, путь, HTML URL или Markdown URL | | `body_limit` | Ограничение размера возвращаемого Markdown | ### `v8std.related` Возвращает связанные стандарты, диагностики и проверки EDT. Подходит для сценариев: - от стандарта перейти к диагностике анализатора; - от диагностики перейти к стандарту, объясняющему причину; - собрать контекст для code review или автоисправления. Основные параметры: | Параметр | Назначение | | --- | --- | | `id_or_alias_or_url` | Исходная страница | | `relations` | Необязательный список связей: `standard`, `diagnostic`, `edt_check`, `related` | | `limit` | Количество связей | ### `v8std.explain_snippet` Разбирает короткий фрагмент BSL/SDBL и возвращает распознанные токены, сигналы, вероятные диагностики, стандарты и confidence. Подходит для сценариев: - передать `Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ...")` и получить `std415`; - передать `ОткрытьФормуМодально("...")`, `Предупреждение("...")`, `Вопрос("...")` и получить `bslls:UsingModalWindows`; - отделить кодовые токены от обычного текстового поиска. `explain_snippet` ориентирован на фрагменты кода. Для обычной фразы вроде `модальные окна` используйте `v8std.search`. Основные параметры: | Параметр | Назначение | | --- | --- | | `snippet` | Фрагмент кода до 4000 символов | | `language` | `auto`, `bsl` или `sdbl` | | `limit` | Количество вероятных страниц | ### `v8std.explain_diagnostics` Объясняет список диагностик и группирует связанные стандарты. Подходит для сценариев: - после запуска [`bsl-analyzer`](https://github.com/itrous/bsl-analyzer) объяснить пачку предупреждений; - сгруппировать отчет BSL Language Server по стандартам; - выбрать исправления, которые устраняют причины нарушений. Основные параметры: | Параметр | Назначение | | --- | --- | | `codes` | Список кодов: `acc 1245`, `bslls:AssignAliasFieldsInQuery`, `v8cs:...`; максимум 500 | ## Файлы для ИИ-инструментов Сайт генерирует несколько статических файлов, которые можно использовать без MCP. | Файл | Назначение | | --- | --- | | [`/llms.txt`](https://v8std.ru/llms.txt) | Компактная карта сайта: разделы, страницы, ссылки на корпус и индекс | | [`/llms-full.txt`](https://v8std.ru/llms-full.txt) | Полный очищенный Markdown-корпус страниц без front matter и служебной разметки темы | | [`/ai/pages.jsonl`](https://v8std.ru/ai/pages.jsonl) | Машинный JSONL-индекс страниц, алиасов, связей, источников и очищенного Markdown | | [`/ai/search-vectors.jsonl`](https://v8std.ru/ai/search-vectors.jsonl) | Статический векторный индекс для semantic-слоя MCP | | `/*.md` | Очищенная Markdown-версия публичной страницы по исходному пути, например [`/std/437.md`](https://v8std.ru/std/437.md) | `/ai/pages.jsonl` является основным источником данных для MCP. Каждая строка — отдельная страница со следующими полями: | Поле | Назначение | | --- | --- | | `id` | Стабильный идентификатор: `std437`, `acc:1245`, `bslls:AssignAliasFieldsInQuery` | | `type` | Тип страницы: `standard`, `diagnostic`, `pattern`, `service` | | `title` | Заголовок страницы | | `description` | Краткое описание | | `url` | Канонический HTML URL | | `markdown_url` | URL очищенной Markdown-версии | | `source_path` | Исходный путь страницы в репозитории | | `aliases` | Поисковые алиасы и варианты записи идентификатора | | `related` | Связанные стандарты, диагностики и проверки | | `source_urls` | Внешние источники страницы | | `body_markdown` | Очищенное содержимое страницы | `/ai/search-vectors.jsonl` строится из `pages.jsonl`. MCP читает этот файл как готовый read-only индекс; если файл временно недоступен, сервер продолжает работать через точные правила и BM25, а `/healthz` показывает `semantic_enabled: false`. Через MCP resources доступны: ```text v8std://llms.txt v8std://llms-full.txt v8std://ai/pages.jsonl ``` Страницы с front matter `llms.ignore: true` исключаются из `/llms.txt`, `/llms-full.txt` и `/ai/pages.jsonl`, но остаются обычными страницами сайта. ## Детали для разработчиков Код локального MCP находится в репозитории: | Файл | Назначение | | --- | --- | | `scripts/v8std_mcp_index.py` | Загрузка индекса, нормализация алиасов, поиск, связи | | `scripts/v8std_mcp_server.py` | HTTP MCP-сервер и регистрация инструментов | | `scripts/generate_search_vectors.py` | Генерация статического векторного индекса | | `scripts/search_benchmark.py` | Регрессионный benchmark поиска | | `scripts/run_v8std_mcp.sh` | Docker-entrypoint для автономного локального запуска | | `retrieval-rules.yml` | Доменные алиасы, синонимы и code-aware mappings | | `requirements-mcp.txt` | Зависимости MCP-сервера | | `tests/test_v8std_mcp_index.py` | Unit-тесты поиска и нормализации | Переменные локального Docker-запуска: | Переменная | Значение по умолчанию | Назначение | | --- | --- | --- | | `V8STD_MCP_PAGES` | `/docs/docs/ai/pages.jsonl` | Локальный JSONL-индекс | | `V8STD_MCP_VECTORS` | `/docs/docs/ai/search-vectors.jsonl` | Локальный векторный индекс | | `V8STD_MCP_GENERATE_INDEX` | `auto` | `auto` генерирует индекс только при отсутствии файла, `always` всегда обновляет | | `V8STD_MCP_HOST` | `0.0.0.0` | Адрес, на котором слушает контейнер | | `V8STD_MCP_PORT` | `8765` | Порт MCP-сервера | | `V8STD_MCP_PATH` | `/mcp` | HTTP path MCP endpoint'а | В `docker-compose` порт опубликован как `127.0.0.1:8765:8765`, поэтому контейнер слушает `0.0.0.0` только внутри Docker-сети и не открывает MCP наружу. Локальная проверка MCP без Docker: ```bash python3.12 -m venv .venv source .venv/bin/activate pip install -r requirements.txt -r requirements-mcp.txt python scripts/generate_ai_artifacts.py python scripts/generate_search_vectors.py python scripts/v8std_mcp_server.py \ --pages docs/ai/pages.jsonl \ --vectors docs/ai/search-vectors.jsonl \ --host 127.0.0.1 \ --port 8765 ``` Проверка качества поиска: ```bash python -m unittest tests.test_v8std_mcp_index python scripts/search_benchmark.py ``` MCP-сервер intentionally read-only: он не изменяет код пользователя, не запускает анализаторы и не принимает файлы исходников. Для анализа проекта подключайте локальный [`bsl-analyzer`](https://github.com/itrous/bsl-analyzer) или другой анализатор отдельным инструментом, а `v8std` используйте как источник стандартов, связей и объяснений. ### metod8dev:1590 - 1590 URL: https://v8std.ru/metod8dev/1590/ Markdown URL: https://v8std.ru/metod8dev/1590.md Source path: metod8dev/1590.md Aliases: metod8dev:1590, 1590 Related: нет External sources: https://its.1c.ru/db/metod8dev#content:1590 Redirect: https://its.1c.ru/db/metod8dev#content:1590 ### metod8dev:3221 - 3221 URL: https://v8std.ru/metod8dev/3221/ Markdown URL: https://v8std.ru/metod8dev/3221.md Source path: metod8dev/3221.md Aliases: metod8dev:3221, 3221 Related: нет External sources: https://its.1c.ru/db/metod8dev#content:3221 Redirect: https://its.1c.ru/db/metod8dev#content:3221 ### metod8dev:3266 - Функциональность обычного приложения, отсутствующая в управляемом приложении URL: https://v8std.ru/metod8dev/3266/ Markdown URL: https://v8std.ru/metod8dev/3266.md Source path: metod8dev/3266.md Aliases: metod8dev:3266, 3266 Related: standard:std680 External sources: https://its.1c.ru/db/metod8dev/content/3266/hdoc #### #metod3266 #### 1. Возможности обычного приложения, которые не реализованы в управляемом приложении #### 2. Управляемая форма | Возможность | Реализовано | Рекомендация | | --- | --- | --- | | Редактирование непосредственно в динамических списках | Нет | Использовать для редактирования форму объекта. | | Команда перехода к списку из формы объекта или записи | Нет | Проектировать интерфейс без этой возможности. Нужные команды размещать прямо в форме объекта. | | События табличного поля `ПриВыводеСтроки`, `ПриПолученииДанных` | Нет | Использовать условное оформление формы. | | Событие формы `ОбновлениеОтображения` | Нет | Использовать обработчики событий изменения данных. | | Механизм оповещения об изменении данных формы | Нет | Использовать обработчики событий изменения данных. | | Ввод на основании в журналах документов | Нет | Не использовать. При необходимости реализовывать программно. | | Команды изменения времени в формах | Нет | Не включать в прикладное решение. | | Команды активизации и выполнения задач в формах списков задач и бизнес-процессов | Нет | Использовать аналогичные команды в формах или реализовывать программно. | | ActiveX в форме | Нет | Использовать другие возможности. | | Интерактивные обработчики бизнес-процессов и задач | Нет | Реализовать программную методику с анализом бизнес-процесса, точки маршрута и задачи. | | Механизм проверки отображения новой строки в списках | Нет | Ориентировать пользователей на оповещения о записи данных. | | Картинка в поле надписи | Нет | Использовать другие возможности. | | Картинка в поле ввода | Нет | Не использовать данную возможность. | | Настройка вертикального положения в поле ввода, поле надписи и т. д. | Нет | Не использовать данную возможность. | | Режим бегущей строки в поле надписи | Нет | Не использовать данную возможность. | | Прозрачный фон поля ввода, поля надписи, поля флажка и т. д. | Нет | Не использовать данную возможность. | | Цвет фона и рамки поля переключателя | Нет | Не использовать данную возможность. | | Установка картинки заголовка формы | Нет | Не использовать данную возможность. | | Фиксация строк при прокрутке таблицы | Нет | Не использовать данную возможность. | | Фоновая картинка формы | Нет | Не использовать данную возможность. | | Группировка колонок при выводе таблицы в табличный документ | Нет | Не использовать данную возможность. | #### 3. Динамический список | Возможность | Реализовано | Рекомендация | | --- | --- | --- | | Хранение отборов и история отборов в динамическом списке | Добавленные отборы запоминаются, но с выключенным признаком использования | В отдельных случаях реализовывать программно. | | Отбор по текущей колонке в динамическом списке | За счет функциональности поиска | Рекомендовать пользователям использовать поиск. Поиск по умолчанию предлагает значение текущей колонки. | | Команда отключения отбора в динамических списках | Нет | Для оперативного отбора использовать поиск, для остальных случаев — режим настройки списка. | | Команда сортировки в динамических списках | Нет | Использовать сортировку в шапке таблицы и режим настройки списка. | | Установка сортировки при открытии в динамических списках | Нет | Не использовать данную возможность. | | Пользовательские настройки в динамическом списке (режим иерархического списка при открытии) | Нет | Не использовать. Для поиска по всему списку рекомендовать режим поиска. | | Установка отбора по значению критерия отбора | Нет | Использовать другие отборы или форму критерия отбора. | #### 4. Командный интерфейс | Возможность | Реализовано | Рекомендация | | --- | --- | --- | | Использование альтернативных сочетаний клавиш для системных команд | Нет | Не использовать данную возможность. | #### 5. Прочее | Возможность | Реализовано | Рекомендация | | --- | --- | --- | | Сводная таблица и сводная диаграмма | Нет | Использовать возможности системы компоновки данных. | | Построитель отчета анализа данных | Нет | Реализовывать программно. | | Макет типа ActiveDocument на клиенте | Нет | Работать с макетами типа ActiveDocument на сервере. | | Рабочая дата | Нет | Не использовать данную возможность. | | Использование стилей в управляемом приложении | Имеется возможность создавать элементы стиля | Использовать единообразное оформление прикладных решений. | | Автоматическое смещение окон при открытии | Нет | Не использовать данную возможность. | | Конструктор запроса для клиента управляемого приложения | Нет | Не использовать данную возможность. | | Конструктор схемы компоновки данных для клиента управляемого приложения | Нет | Использовать варианты отчета. | | Использование объекта `СравнениеФайлов` в тонком клиенте и на сервере | Нет | Не использовать данную возможность. | #### См. также - [#std680: Поддержка толстого клиента, управляемое приложение, клиент-сервер](https://v8std.ru/std/680/) #### Источник https://its.1c.ru/db/metod8dev/content/3266/hdoc ### metod8dev:4105 - Оптимизация клиент-серверного взаимодействия прикладных решений URL: https://v8std.ru/metod8dev/4105/ Markdown URL: https://v8std.ru/metod8dev/4105.md Source path: metod8dev/4105.md Aliases: metod8dev:4105, 4105 Related: standard:std459, standard:std487, standard:std724 External sources: https://its.1c.ru/db/metod81/content/4105/hdoc #### #metod4105 #### 1. Цель: обеспечить предсказуемую и быструю работу при обычных и низкоскоростных каналах связи. #### 2. Оптимизируйте два показателя: - количество серверных вызовов; - объем передаваемых данных (трафик). Даже при небольшом трафике большое число вызовов может заметно замедлять работу. #### 3. Для анализа и контроля используйте три инструмента: - `Показатели производительности` в режиме `1С:Предприятие`; - `Замер производительности` в конфигураторе; - режим `Имитация задержек при вызовах сервера`. `Показатели производительности` удобны для регулярного контроля в ходе разработки. `Замер производительности` полезен для анализа конкретных строк модулей. `Имитация задержек` помогает оценить комфортность пользовательских сценариев. #### 4. Учитывайте, что итоговые показатели формируются совместно платформой и конфигурацией. Платформа минимизирует нагрузку за счет следующих принципов: - передает на клиент только нужные данные; - по возможности передает данные «по требованию»; - передает данные порциями; - использует многоуровневое кеширование. Эти принципы иногда противоречат друг другу, поэтому в реальных сценариях платформа применяет компромиссы. #### 4.1. Упрощенно можно выделить уровни кеширования: - между сеансами; - в пределах сеанса; - в пределах формы. Из-за кеширования один и тот же сценарий может давать разные результаты при первом и повторном выполнении. #### 5. Проводите проверки на реалистичных сценариях и объемах данных. Например, табличную часть тестируйте на типичном и на редком «тяжелом» объеме строк. #### 5.1. Используйте три уровня испытаний: 1. первое действие после изменения конфигурации; 2. первое действие в сеансе (когда в прошлых сеансах оно уже выполнялось); 3. повторное действие в текущем сеансе. Обычно наиболее важны уровни `2` и `3`. При ограниченном времени анализа приоритет чаще у уровня `3`. #### 5.2. Для уровня `3` повторяйте действие с новыми прикладными данными, а не с полностью идентичными. Так оценка ближе к реальной работе пользователей. #### 6. Режим имитации задержек используйте отдельно от базовых проверок. Он нужен для оценки времени и удобства сценариев, а не для анализа числа вызовов. Не путайте: - `Низкая скорость соединения` — меняет поведение платформы для медленных каналов; - `Имитация задержек` — воспроизводит внешние условия работы канала. #### 7. Интерпретируйте результаты аккуратно: - часть вызовов инициирует код конфигурации; - часть вызовов выполняет сама платформа вне кода модулей. Полезные приемы анализа: - сравнить сценарий с включенным фрагментом конфигурации и без него; - сравнить показатели со «стендовой» конфигурацией на настройках по умолчанию; - зафиксировать нормативы по критичным сценариям и отслеживать их в динамике. #### 8. Ориентиры по числу вызовов (уровень `3`; значения уровня `2` указаны в скобках, если отличаются): | Операция | Обычная скорость | Низкая скорость | Примечание | | --- | --- | --- | --- | | Переход на подсистему в панели разделов | `0` | `0` | | | Открытие списка справочника | `1` | `1` | | | Открытие формы выбора справочника | `1` | `0 (1)` | Повторное открытие формы выбора с теми же параметрами | | Выбор из формы выбора справочника и закрытие формы выбора | `0` | `0` | | | Открытие формы элемента справочника | `1` | `1` | | | Закрытие формы элемента справочника | `0` | `0` | | | Запись и закрытие формы элемента справочника после редактирования | `2` | `1` | Тест со закрытым списком справочника | | Запись, проведение и закрытие формы документа после редактирования | `2` | `1` | Тест со закрытым списком документов | | Установка отбора в таблице, связанной с динамическим списком | `1` | `1` | | | Получение списка выбора при вводе по строке | `1` | `0 (1)` | Повторный ввод с теми же условиями поиска | | Формирование отчета | `1` | `1` | | #### 9. При выработке решений по оптимизации задавайте два вопроса: - можно ли убрать этот вызов; - можно ли сократить объем передаваемых данных. Типовые приемы: - объединять несколько вызовов в один; - исключать лишние вызовы; - использовать повторно используемые возвращаемые значения там, где это оправдано. Если цели оптимизации конфликтуют, выбирайте компромисс на основе замеров в максимально близком к эксплуатации стенде. #### См. также - [#std487: Минимизация количества серверных вызовов и трафика](https://v8std.ru/std/487/) - [#std724: Использование модулей с повторным использованием возвращаемых значений](https://v8std.ru/std/724/) - [#std459: Использование значений, влияющих на поведение клиентского приложения](https://v8std.ru/std/459/) #### Источник https://its.1c.ru/db/metod81/content/4105/hdoc ### search_help - Поиск по сайту URL: https://v8std.ru/search-help/ Markdown URL: https://v8std.ru/search-help.md Source path: search-help.md Aliases: search_help, search-help Related: нет External sources: нет ## Форматы запросов | Что нужно найти | Примеры запросов | | --- | --- | | Стандарт | `#std437`, `std 437`, `стандарт 437` | | Диагностику BSLLS | `bslls:AssignAliasFieldsInQuery`, `AssignAliasFieldsInQuery` | | Диагностику АПК | `acc:1245`, `апк 1245`, `ACC 1245` | | Диагностику EDT / v8-code-style | `v8cs:common-module-name-client-server`, `edt common-module-name-client-server` | | Тему | `транзакции`, `запросы`, `общие модули`, `права` | ## Индексы для LLM | Файл | Назначение | | --- | --- | | [/llms.txt](https://v8std.ru/llms.txt) | Компактная карта сайта со стандартами, диагностиками и ссылками на машинный индекс | | [/llms-full.txt](https://v8std.ru/llms-full.txt) | Очищенный полный Markdown-корпус страниц без front matter и служебной разметки темы | | [/ai/pages.jsonl](https://v8std.ru/ai/pages.jsonl) | JSONL-индекс страниц, алиасов, связей и очищенного Markdown | | [/std/437.md](https://v8std.ru/std/437.md) | Пример очищенной Markdown-версии страницы; для публичных страниц используется исходный путь `.md` | Страницы с front matter `llms.ignore: true` исключаются из всех публичных LLM-артефактов: `/llms.txt`, `/llms-full.txt` и `/ai/pages.jsonl`. Это не влияет на обычные страницы сайта и поиск Zensical. ### support - Поддержка URL: https://v8std.ru/support/ Markdown URL: https://v8std.ru/support.md Source path: support.md Aliases: support Related: related:search_help External sources: - https://github.com/zeegin/v8std/issues/new - https://github.com/zeegin/v8std/blob/main/zensical.toml - https://github.com/zeegin/v8std.git - https://github.com/zeegin/v8std/blob/main/scripts/install_zensical.sh - https://github.com/zeegin/v8std/blob/main/requirements.txt - https://github.com/zeegin/v8std/blob/main/scripts/zensical_docs.sh - http://127.0.0.1:8000` ### Нашли ошибку? [Пожаловаться или предложить идею](https://github.com/zeegin/v8std/issues/new) ### Хотите внести исправление? Можно просто нажать на иконку `Редактировать` и прислать Pull Request. Основной конфиг проекта: [`zensical.toml`](https://github.com/zeegin/v8std/blob/main/zensical.toml). ### Как развернуть локально? Для локального запуска без Docker требуется `Python 3.12`. Zensical устанавливается из PyPI в зафиксированной версии. #### mac ```bash git clone https://github.com/zeegin/v8std.git cd v8std python3.12 -m venv .venv source .venv/bin/activate ./scripts/install_zensical.sh ./scripts/zensical_docs.sh serve ``` #### windows ```bash git clone https://github.com/zeegin/v8std.git cd v8std python3.12 -m venv .venv source .venv/bin/activate ./scripts/install_zensical.sh ./scripts/zensical_docs.sh serve ``` Рекомендуется `WSL 2`: установочные и служебные скрипты репозитория написаны на Bash. #### linux ```bash git clone https://github.com/zeegin/v8std.git cd v8std python3.12 -m venv .venv source .venv/bin/activate ./scripts/install_zensical.sh ./scripts/zensical_docs.sh serve ``` #### docker ```bash git clone https://github.com/zeegin/v8std.git cd v8std docker compose -f docker-compose/docker-compose.yml up --build ``` Статическая сборка и проверка через `nginx`: ```bash docker compose -f docker-compose/docker-compose.ngnix.yml up --build ``` Скрипт [`./scripts/install_zensical.sh`](https://github.com/zeegin/v8std/blob/main/scripts/install_zensical.sh) устанавливает зафиксированную версию Zensical из PyPI и Python-зависимости проекта из [`requirements.txt`](https://github.com/zeegin/v8std/blob/main/requirements.txt). Скрипт [`./scripts/zensical_docs.sh`](https://github.com/zeegin/v8std/blob/main/scripts/zensical_docs.sh) перед `serve` и `build` обновляет временные social cards и AI-артефакты. Пример production-сборки: ```bash ./scripts/zensical_docs.sh build --strict ``` Документация будет доступна по адресу `http://127.0.0.1:8000`. ### Поиск и LLM-индексы Форматы запросов описаны на странице [Поиск по сайту](https://v8std.ru/search-help/) При `serve` и `build` автоматически генерируются статические AI-артефакты: - [`/llms.txt`](https://v8std.ru/llms.txt) — компактная карта сайта для LLM - [`/llms-full.txt`](https://v8std.ru/llms-full.txt) — очищенный полный Markdown-корпус - [`/ai/pages.jsonl`](https://v8std.ru/ai/pages.jsonl) — индекс страниц, алиасов, связей и очищенного Markdown Чтобы исключить страницу из публичных LLM-артефактов (`/llms.txt`, `/llms-full.txt`, `/ai/pages.jsonl`), добавьте в её front matter: ```yaml llms: ignore: true ``` Это не влияет на обычную сборку сайта, навигацию и поиск Zensical.