Константы
-
Новую константу следует включить в план обмена "МиграцияПриложений", при этом авторегистрация должна быть выключена.
-
Для работы в распределенной информационной базе константу следует включить в соответствующие подписки и планы обменов. Названия обычно заканчиваются на "РегистрацияКонстанты", например, АвтономнаяРаботаРегистрацияКонстанты. Для Бухгалтерии предприятия это:
Константы:
-
АвтономнаяРаботаРегистрацияКонстанты
-
ПолныйРегистрацияКонстанты
-
ПоОрганизацииРегистрацияКонстанты
Планы Обменов:
-
АвтономнаяРабота
-
Полный
-
ПоОрганизации
Документы
Основные свойства
- Имя. Имя дается в единственном числе, например ЗаказПокупателя, ПеремещениеТоваров, Анкета.
Подробнее в стандарте Имена объектов метаданных в конфигурациях
Ссылка на стандарт - Имена объектов метаданных в конфигурациях
Имена документов, напротив, даются в единственном числе. Например: ЗаказПокупателя, ПеремещениеТоваров, Анкета.
При этом следует избегать в именах документов слов, от удаления которых смысл не меняется, например: «Документ…».
При выборе имени документа следует различать два случая:
- В первую очередь, следует стараться отразить в имени документа суть процесса, который отражается в системе этим документом. При этом само имя должно быть максимально лаконичным, рекомендуется избегать слов «Накладная…», «Акт…» и т.п.
Например, в системе автоматизирован процесс «Сверка взаиморасчетов», который завершается подписанием сторонами, участвующими в сверке, печатного документа «Акт сверки товаров». Поскольку в данном случае в системе документом фиксируется именно процесс, то документ называется СверкаВзаиморасчетов.
- Если документ не отражает какой-либо процесс в системе, а предназначен только для получения соответствующей печатной формы, то допустимо образовывать имя документа от имени печатной формы. В этом случае допустимо использовать слова «Накладная», «Акт» и т.п. в имени документа. Как правило, у такого документа нет статусов, по нему не вводятся на основании другие документы, а сам процесс получения печатной формы может быть автоматизирован другими документами.
Например, для получения печатной формы «Товарно транспортная накладная» (ТТН) в системе имеется документ, который содержит реквизиты, специфичные для данного печатного документа. При этом поскольку весь процесс формирования ТТН связан с другими документами («Реализация товаров и услуг», «Перемещение товаров»), то документ целесообразно назвать от имени печатной формы: ТоварноТранспортнаяНакладная.
- Синоним. Синоним объекта должен быть определен так, чтобы осмысленно, лаконично описывать объект. Заполняется обязательно
Подробнее в стандарте Имя, синоним, комментарий
Ссылка на стандарт - Имя, синоним, комментарий
1.1. Синоним объекта должен быть определен так, чтобы осмысленно, лаконично описывать объект. Заполняется обязательно.
Данное требование продиктовано тем, что синонимы непосредственно участвуют в формировании пользовательского интерфейса (отображаются в формах, отчетах, командном интерфейсе и т.д.) и поэтому должны корректно и одинаково во всех местах пользовательского интерфейса идентифицировать ту сущность, к которой они относятся. Помимо объектов метаданных, требование распостраняется также и на реквизиты объектов метаданных, табличные части, реквизиты табличных частей, измерения регистров, ресурсы и другие объекты конфигурации, у которых имеется синоним.
1.2. Не рекомендуется в синонимах объектов использовать сокращения. Исключением являются только общеупотребительные и соответствующие целевой аудитории сокращения (например, Сумма (регл.) ) и аббревиатуры (например, НДС или МСФО).
-
Комментарий. Не заполняется
-
Представление объекта. Заполняется в единственном числе, например, Заказ покупателя или Реализация услуг. Представления объекта не задается, если совпадает с синонимом. Слова типа «Поступление», «Реализация», «Инвентаризация» используются без изменения и для объекта, и для списка
-
Представление списка. Заполняется во множественном числе, например, Заказы покупателя. Представления списка не задается, если совпадает с синонимом. Слова типа «Поступление», «Реализация», «Инвентаризация» используются без изменения и для объекта, и для списка
Длина свойства, которое отображается в командном интерфейсе (Представление списка или синоним) должна быть не более 38 символов. Идеально, если они уместятся в 30 символов
Нумерация
- Для установки нумерации необходимо установить свойства документа:
- Тип номера - Строка
- Длина номера - 11
- Допустимая длина номера - Переменная
- Периодичность - В пределах года
- Контроль уникальности - Да
- Автонумерация - Да
- Для установки номера документ нужно включить в один из наборов подписок, например для Бухгалтерии предприятия:
-
Если у документа есть реквизиты Организация и ПодразделениеОрганизация, то включить в подписки:
- ПередЗаписьюДокументаПроверкаНомераПоДатеОрганизацииПодразделению
- УстановитьПрефиксИнформационнойБазыОрганизацииПодразделенияНомеруДокумента
-
Если у документа есть реквизит Организация, но нет реквизита ПодразделениеОрганизации, то включить в подписки:
- ПередЗаписьюДокументаПроверкаНомераПоДатеИОрганизации
- УстановитьПрефиксИнформационнойБазыИОрганизацииНомеруДокумента
-
Если у документа нет реквизита Организация, то включить в подписки:
- ПередЗаписьюДокументаПроверкаНомераПоДате
- УстановитьПрефиксИнформационнойБазыНомеруДокумента
Проведение документа (Движения)
- Необходимо установить свойства документа:
- Проведение - Разрешить, если документ формирует движения
- Оперативное проведение - Запретить
- Удаление движений - Не удалять автоматически
- Запись движений при проведении - Записывать выбранные
- Заполнение последовательностей - Не заполнять автометически
- Привилегированный режим при проведении - Да
- Привилегированный режим при отмене проведении - Да
-
Документы, движения которых не удаляются автоматически, следует включить в подписку ПередЗаписьюДокументаДляУдаленияДвижений
-
Документы, которые при формировании движений обращаются к данным других документов или регистров, следует включить в последовательность ДокументыОрганизации, а также в подписки:
- ЗарегистрироватьВПоследовательностиПередУдалением
- ЗарегистрироватьВПоследовательностиПриЗаписи
- ОтменитьРегистрациюПриОбменеПередЗаписью
-
Для подготовки движений следует разделять методы подготовки данных и заполнение коллекции Движения. Код подготовки данных следует размещаться в модуле менеджера, код заполнения в коллекции Движения - в модуле менеджера или общем модуле. Перед кодом заполнения коллекции Движения следует вызвать:
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
После
ПроведениеСервер.УстановитьЗаписьОчищаемыхНаборовЗаписей(ЭтотОбъект);
-
Для удаления движений следует добавить обработчик в модуле объекта документа ОбработчикУдаленияПроведения с кодом:
Процедура ОбработкаУдаленияПроведения(Отказ) ПроведениеСервер.ПодготовитьНаборыЗаписейКОтменеПроведения(ЭтотОбъект); Движения.Записать(); РаботаСПоследовательностями.ОтменитьРегистрациюВПоследовательности(ЭтотОбъект, Отказ); КонецПроцедуры
-
Документ, который формируют движения следует включить в подписку ПроверитьКорректностьДаты
Подписка запрещает запись документов с датой ранее 2000 или позднее 2030 года.
Реквизиты документа
- Значение заполнения. Заполняется значением по умолчанию, например, Курс = 1 или ВидОперации = Основной вид операции
- Заполнять из данных заполнения. Да, если требуется заполнить реквизит при создании нового документа из формы списка с установленными отборами
- Проверка заполнения. Выдавать ошибку, если хотя бы в одном сценарии требуется обязательное заполнение реквизита.
Подробнее в стандарте Подсказка и проверка заполнения
Ссылка на стандарт - Подсказка и проверка заполнения 2.1. Свойство «Проверка заполнения». Для всех типизированных объектов метаданных, а также для стандартных реквизитов и табличных частей, которые в соответствии с логикой объекта являются обязательными к заполнению, свойство "Проверка заполнения" должно быть установлено в "Выдавать ошибку".
В ряде случаев проведение документа с незаполненными реквизитами и табличными частями не имеет смысла с точки зрения отражения документа в учете. Например, документ Заказ клиента является запросом клиента на поставку определенного количества товара. Из определения понятно, что методически заказ с незаполненным клиентом и незаполненной табличной частью Товары не имеет смысла, поэтому у реквизита Клиент и табличной части Товары свойство "Проверка заполнения" должно быть установлено в "Выдавать ошибку".
2.2. При установке свойства «Проверка заполнения» следует исходить из того, что все ограничения и проверки должны быть (насколько это возможно полно) описаны в метаданных конфигурации. Поэтому если хотя бы один из сценариев работы с объектом требует обязательного заполнения реквизита, то свойство «Проверка заполнения» устанавливается в «Выдавать ошибку». Если в других сценариях работы заполнять реквизит не обязательно, то такие случаи должны быть предусмотрены в обработчике события модуля объекта ОбработкаПроверкиЗаполнения.
При этом не следует придерживаться обратной схемы, когда свойство «Проверка заполнения» установлено в «Не проверять», а в обработчике ОбработкаПроверкиЗаполнения дописаны какие-либо проверки заполнения. Такая схема затрудняет анализ логики работы конфигурации.
2.3. Если проверка заполнения реквизита зависит от тех или иных условий, рекомендуется управлять автопометкой незаполненного значения с помощью условного оформления форм объектов. Убирать ее в случае, если при данном состоянии объекта заполнение реквизита проверять не требуется.
-
Связи параметров выбора. Заполняется, если значение реквизита зависит от значений других реквизитов документа, например: для ДоговорКонтрагента задаются связи: Отбор.Владелец(Контрагент), Отбор.Организация(Организация)
-
Параметры выбора. Заполняется, если значение ограничено заранее известными условиями отбора, например, если ДоговорКонтрагента можно выбрать только вида СПоставщиком – вид договора задается в параметрах выбора. Для счетов учета устанавливается Отбор.ЗапретитьИспользоватьВПроводках(Ложь)
Подразделение организации
Если в документе есть реквизит ПодразделениеОрганизации, который используется только в версии КОРП, то документ следует включить в подписку УстановитьПустоеПодразделениеПередЗаписьюДокумента
Контрагент
Если в документе есть реквизит Контрагент, то следует:
-
Если в документе можно добавлять новых контрагентов, то следует добавить обработчики событий АвтоПодбор, ОкончаниеВводаТекста, Создание, ОбработкаВыбора со следующим кодом:
- Если при создании контрагента не используется Банк и НомерСчета (основной сценарий), то:
&НаКлиенте Процедура КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) РаботаСКонтрагентамиБПКлиент.КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) РаботаСКонтрагентамиБПКлиент.КонтрагентОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) РаботаСКонтрагентамиБПКлиент.КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура КонтрагентСоздание(Элемент, СтандартнаяОбработка) РаботаСКонтрагентамиБПКлиент.КонтрагентСоздание(Элемент, Элемент.ТекстРедактирования, СтандартнаяОбработка); КонецПроцедуры
- Если при создании контрагента требуется еще указать Банк и НомерСчета, то:
&НаКлиенте Процедура КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) РаботаСКонтрагентамиБПКлиент.КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) РаботаСКонтрагентамиБПКлиент.КонтрагентОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) РаботаСКонтрагентамиБПКлиент.КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ,Истина); КонецПроцедуры &НаКлиенте Процедура КонтрагентСоздание(Элемент, СтандартнаяОбработка) РаботаСКонтрагентамиБПКлиент.КонтрагентСоздание(Элемент, Элемент.ТекстРедактирования, СтандартнаяОбработка, ,Истина); КонецПроцедуры
-
Для показа документа в списке документов по контрагенту (открывается из панели навигации формы контрагента по ссылке Документы) реквизиты документа с типом Справочник.Контрагенты необходимо включить в критерий отбора ДокументыПоКонтрагенту
Договоры контрагентов
Если в документе есть реквизит ДоговорКонтрагента, то следует:
- Добавить этот документ в РаботаСДоговорамиКонтрагентовБП.ВидДоговораПоОбъекту
- Добавить договор контрагента в состав функциональной опции - ВестиУчетПоДоговорам
- Добавить код в модуль объекта в событии ПередЗаписью
РаботаСДоговорамиКонтрагентовБП.ЗаполнитьДоговорПередЗаписью(ЭтотОбъект);
- Для показа документа в списке документов по договору контрагента (открывается из панели навигации формы договора по ссылке Документы) реквизиты документа с типом Справочник.ДоговорыКонтрагентов необходимо включить в критерий отбора ДокументыПоДоговоруКонтрагента
Ручная корректировка движений
Для использования ручной корректировки движений требуется:
- Добавить реквизит документа РучнаяКорректировка с типом Булево
- Документ включить в подписку на событие ПриКопированииДокументаСВозможностьюРучногоРедактирования
- В ОбработкаПроведения документа после вызова кода
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
следует разместить код
Если РучнаяКорректировка Тогда
Возврат;
КонецЕсли;
Функциональные опции
Функциональные опции используются как для скрытия всего документа, так и конкретных реквизитов.
-
Если документ не принадлежит основной функциональности (доступен всем пользователям), то его необходимо включить в состав функциональной опции.
Возможно придется добавить добавить ее в Обработка.ФункциональностьПрограммы по аналогии с другими опциями.
-
Если используются реквизиты из списка ниже, то их следует включить в состав функциональных опций:
Реквизиты | Функциональные опции |
---|---|
Организация | ИспользоватьНесколькоОрганизацийБухгалтерскийУчет |
ПодразделениеОрганизации | ВестиУчетПоПодразделениям |
Склад | ИспользоватьНесколькоСкладовБухгалтерскийУчет |
ВалютаДокумента, КурсВзаиморасчетов, КратностьВзаиморасчетов | ИспользоватьВалютныйУчет |
БанковскийСчетОрганизации | ИспользоватьНесколькоБанковскихСчетовОрганизации |
Ответственный | ИспользоватьНесколькоОтветственных |
РучнаяКорректировка | ИспользоватьРучнуюКорректировкуДвижений |
Патент, ДеятельностьНаПатенте | ПрименяетсяУСНПатент |
СуммаНУ | ПлательщикНалогаНаПрибыль |
- Параметризуемые функциональные опции, например ПлательщикНалогаНаПрибыль или ПрименяетсяУСН зависят от двух реквизитов Организация и Дата, поэтому следует добавить вызов ОбщегоНазначенияБПКлиентСервер.УстановитьПараметрыФункциональныхОпцийФормыДокумента:
-
в обработчики инициализации реквизитов формы:
- ПриСозданииНаСервере (при условии Параметры.Ключ.Пустая)
- ПриЧтенииНаСервере
- ПослеЗаписиНаСервереЦелесообразно
-
в обработчики изменения реквизитов, от которых зависят функциональные опции, например ПриИзмененииОрганизации
-
в обработчик изменения реквизита Дата При изменении даты следует обратить внимание на методы выполняемые на сервере контекстно.
Для таких вызовов следует проверять ОбщегоНазначенияБПКлиент.ТребуетсяВызовСервераПриИзмененииДатыДокумента.
При этом реквизит формы, передаваемый в параметр ПредыдущаяДата метода следует называть ТекущаяДатаДокумента (потому что это дата, которой соответствуют остальные свойства формы)
Важно: метод не меняет значение этого реквизита формы, это нужно делать в форме, после вызова метода, вне зависимости от возвращенного результата.
ТребуетсяВызовСервера = ОбщегоНазначенияБПКлиент.ТребуетсяВызовСервераПриИзмененииДатыДокумента(Объект.Дата, ТекущаяДатаДокумента);
ТекущаяДатаДокумента = Объект.Дата;
Если Не ТребуетсяВызовСервера Тогда
Возврат;
КонецЕсли;
Показ движений документа
Для использования типовой команды показа движения по кнопке "ДтКт":
-
Документ необходимо включить в список типов параметра общей команды ПоказатьДвиженияДокумента
-
В модуле формы объекта добавить в ОбработкаОповещения код:
ОбщегоНазначенияБПКлиент.ОбработкаОповещенияФормыДокумента(ЭтотОбъект, Объект.Ссылка, ИмяСобытия, Параметр, Источник);
Структура подчиненности (Связанные документы)
- Для возможности показа структуры подчиненности документ необходимо включить в список типов параметра общей команды СвязанныеДокументы
- Если сам документ может быть выбран в реквизитах других документов – документ необходимо включить в тип критерия отбора СвязанныеДокументы
- Реквизиты документа, содержащие ссылки на другие документы, необходимо включить в состав критерия отбора СвязанныеДокументы При этом реквизиты документа типа СубконтоN в состав критерия отбора не включаются.
Подробнее в документации БСП: Структура подчиненности
Роли
-
Документ должен быть включен в следующие роли:
Роль Права ДобавлениеИзменениеДанныхБухгалтерии Все права, кроме: Удаление, Интерактивное удаление ПолныеПрава Все права, кроме: Интерактивное удаление ЧтениеДанныхБухгалтерии Только права: Чтение, Просмотр, Ввод по строке -
RLS - Ограничение на уровне записей Для документов нужно дополнительно выполнить следующее:
- Добавить в процедуру общего модуля УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа
- Добавить в определяемый тип ВладелецЗначенийКлючейДоступа ссылку - ДокументСсылка.%ТипОбъекта%
- Добавить в определяемый тип ВладелецЗначенийКлючейДоступаДокумент объект - ДокументОбъект.%ТипОбъекта%
- Добавить в модуль менеджера переопределяемый метод ПриЗаполненииОграниченияДоступа, в котором описать правила чтения и изменения для расчетной модели прав. Например,
#Область СтандартныеПодсистемы_УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа // Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(Организация)"; КонецПроцедуры #КонецОбласти
- В форме документа в процедуру ПриЧтенииНаСервере добавить код
// СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом
-
Добавить в правах шаблоны RLS:
- В ДобавлениеИзменениеДанныхБухгалтерии следует добавить ограничения для Чтения, Добавление и Изменение
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда #ДляОбъекта("") #Иначе #ПоЗначениям("Документ.%ИмяДокумента%", "", "","Организации", "Организация", "","","","","","","","","","","","","","","","","","","","","","","","","","","","","","") #КонецЕсли
- В ЧтениеДанныхБухгалтерии следует добавить огаринчения для Чтения
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда #ДляОбъекта("") #Иначе #ПоЗначениям("Документ.%ИмяДокумента%", "", "","Организации", "Организация", "","","","","","","","","","","","","","","","","","","","","","","","","","","","","","") #КонецЕсли
- В ДобавлениеИзменениеДанныхБухгалтерии следует добавить ограничения для Чтения, Добавление и Изменение
-
Атомарные роли, адаптация по работе с неполным набором прав
Сейчас в Бухгалтерии есть профили: Менеджер по продажам и Кладовщик. Следует подумать нужно ли относить документ к этим профилям или нет. Для них следует добавить специальные роли Чтение%ИмяДокумента% и ДобавлениеИзменение%ИмяДокумента%
- Стандарты по ограничению прав доступа:
- Настройка ролей и прав доступа
- Проверка прав доступа
- Безопасность прикладного программного интерфейса сервера
- Использование привилегированного режима
- Использование модулей с повторным использованием возвращаемых значений
- Разработка ролей в библиотеках
- Стандартные роли
- Установка прав для новых объектов и полей объектов
- Ограничения на использование ключевого слова "РАЗРЕШЕННЫЕ" в запросах
- Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным
Планы обмена (Работа в распределенной базе - РИБ)
Документ необходимо включить в состав всех обменов РИБ и в соответствующие подписки на события. При это следует Запретить Авторегистрацию
План обмена | Подписки |
---|---|
АвтономнаяРабота | АвтономнаяРаботаРегистрацияДокумента АвтономнаяРаботаРегистрацияУдаления |
Полный | ПолныйРегистрацияДокумента ПолныйРегистрацияУдаления |
ПоОрганизации | ПоОрганизацииРегистрацияДокумента ПоОрганизацииРегистрацияУдаления |
Печать
Документы, имеющие печатные формы, следует подключить к механзиму печати БСП:
- Добавить объект в процедуру УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати
- В модуле менеджера добавить процедуру ДобавитьКомандыПечати, в процедуру добавить описание всех команд печати.
- Подключить все формы к подсистеме Подключаемые команды.
Подробнее в документации БСП: https://its.1c.ru/db/bsp301doc#content:53:hdoc
Дополнительные отчеты и обработки
Документ необходимо включить в состав определяемых типов ОбъектСДополнительнымиКомандами
Подробнее в документации БСП: Дополнительные отчеты и обработки
Журналы документов
Новый документ (кроме служебных документов типа Документ расчетов с контрагентом или Партия) необходимо включить в журнал ЖурналОпераций В остальные журналы документ включается исходя из раздела учета, к которому документ относится.
Данные первичных документов
Для возможности быстрого получения номера и даты документа в отчетах и печатных формах:
- Документ необходимо включить в тип измерения Документ РегистрСведений.ДанныеПервичныхДокументов
- Документ включить в подписку ЗарегистрироватьДанныеПервичныхДокументов
Дата запрета изменения
Для подключения работы Даты запрета изменения следует Документ необходимо :
- Добавить в подписку ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаБП
- Добавить в подписку ПроверитьДатуЗапретаИзмененияПередУдалениемБП
- Добавить в процедуру ДатыЗапретаИзмененияБП.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения
- Вставить в модуль формы объекта в процедуру обработчика события ПриЧтенииНаСервере вызов
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Подробнее в документации БСП: Даты запрета изменения
Модуль объекта
-
В ОбработкаЗаполнения следует поместить вызов
ЗаполнениеДокументов.Заполнить(ЭтотОбъект, ДанныеЗаполнения);
-
В ПриКопировании следует заменить значения отдельных реквизитов на актуальные, например:
Дата = НачалоДня(ОбщегоНазначения.ТекущаяДатаПользователя()); Ответственный = Пользователи.ТекущийПользователь();
Форма списка и Форма выбора
1. Чтобы в Простом интерфейсе помеченные на удаление не отображались в списке документов, в форму списка и форму выбора необходимо:
-
Добавить реквизит формы ОтслеживатьПометкуУдаления (Булево).
-
Добавить следующие обработчики (либо дополнить имеющиеся):
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ПомеченныеНаУдалениеСервер.СкрытьПомеченныеНаУдаление(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура СписокПриИзменении(Элемент) ПомеченныеНаУдалениеКлиент.ПриИзмененииСписка(ЭтотОбъект, Элемент); КонецПроцедуры &НаСервере Процедура СписокПередЗагрузкойПользовательскихНастроекНаСервере(Элемент, Настройки) ПомеченныеНаУдалениеСервер.УдалитьОтборПометкаУдаления(Настройки); КонецПроцедуры
-
В формах списка и выбора документа с ручной корректировкой движений:
- переопределить текст запроса динамического списка - добавить поле СостояниеДокумента
ВЫБОР КОГДА ДанныеСписка.РучнаяКорректировка ТОГДА ВЫБОР КОГДА ДанныеСписка.ПометкаУдаления ТОГДА 10 КОГДА НЕ ДанныеСписка.Проведен ТОГДА 9 ИНАЧЕ 8 КОНЕЦ ИНАЧЕ ВЫБОР КОГДА ДанныеСписка.ПометкаУдаления ТОГДА 2 КОГДА ДанныеСписка.Проведен ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КОНЕЦ КАК СостояниеДокумента,
- указать это поле в свойстве ПутьКДаннымКартинкиСтроки таблицы
- указать общую картинку в свойстве КартинкаСтрок
-
Над списком следует разместить новую пустую группу ГруппаБыстрыеОтборы (свойство группы «группировка» – Горизонтальная) и указать ее в свойстве табличного поля. Автоматически создаваемую группу с отборами (СписокКомпоновщикНастроекПользовательскиеНастройки) следует переименовать в ГруппаДополнительныеОтборы
-
Чтобы корректно работал отбор по основной организации, в настройках динамического списка должен быть добавлен отбор по организации. В обработчиках формы должны быть вызовы:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбщегоНазначенияБПВызовСервера.УстановитьОтборПоОсновнойОрганизации(ЭтотОбъект); КонецПроцедуры: &НаСервере Процедура ОбработкаОповещения(ИмяСобытия, Параметр) Если ИмяСобытия = "ИзменениеОсновнойОрганизации" Тогда ОбщегоНазначенияБПКлиент.ИзменитьОтборПоОсновнойОрганизации(Список, ,Параметр); КонецЕсли; КонецПроцедуры: &НаСервере Процедура СписокПередЗагрузкойПользовательскихНастроекНаСервере(Элемент, Настройки) ОбщегоНазначенияБП.ВосстановитьОтборСписка(Список, Настройки, "Организация"); КонецПроцедуры
-
Колонки в списках
- Для сумм или количества ширина должна быть указана 10
- Заголовок колонки должен полностью помещаться в шапку колонки
- Колонкам, в которых выводятся бухгалтерские счета следует установить свойство Растягивать по горизонтали - Нет
- Дату следует выводить без времени (только дату). Формат колонки Дата ДЛФ=D, ширина колонки - 7
- В заголовках колонок текст нужно выравнивать по содержанию, например, суммы по правому краю.
- Командную панель следует переделать в группу, чтобы был правильный порядок с группой отборов по организации. См. пример в форме списка Документ.СчетНаОплату
Форма документа
-
В форме проводимого документа добавить реквизит СостояниеДокумента (Число, 10, 0) и связанное поле картинки (после даты).
- Установить для этого поля ВертикальноеПоложениеВГруппе = Центр Можно копировать реквизит и поле из ранее созданной формы.
- Добавить вызов
ОбщегоНазначенияБП.СостояниеДокумента()
в обработчики инициализации реквизитов формы. Пример кодаСостояниеДокумента = СостояниеДокумента(Объект);
- ПриСозданииНаСервере (при условии Параметры.Ключ.Пустая)
- ПриЧтенииНаСервере
- ПослеЗаписиНаСервере:
-
Поле Комментарий и Ответственный следует размещать Горизонтально, если возможно
-
Колонки в табличных частях
- Для сумм или количества ширина должна быть указана 10
- Для Номер строки установить ширину 3
- Заголовок колонки должен полностью помещаться в шапку колонки
- Колонкам, в которых выводятся бухгалтерские счета следует установить свойство Растягивать по горизонтали - Нет
- Дату следует выводить без времени (только дату). Формат колонки Дата ДЛФ=D, ширина колонки - 7
- В заголовках колонок текст нужно выравнивать по содержанию, например, суммы по правому краю.
- Командную панель следует переделать в группу, чтобы был правильный порядок с группой отборов по организации. См. пример в форме списка Документ.СчетНаОплату
Дополнительные сведения
-
Документ включить в определяемый тип ВладелецДополнительныхСведений
-
Настроить набор свойств объектов
- В процедуре УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств описать предопределенный набор свойств с именем по шаблону Документ_<ИмяОбъекта>, например, Документ_АвансовыйОтчет, а также указать уникальный идентификатор. Здесь можно получить уникальный идентификатор, например:
Набор = Наборы.Строки.Добавить(); Набор.Имя = "Справочник_ВнешниеПользователи"; Набор.Идентификатор = Новый УникальныйИдентификатор("<УникальныйИдентификатор>");
-
Для объектов, входящих в состав функциональных опций, выполнить требования раздела Отключение неиспользуемых наборов свойств
-
Настроить характеристики документа по образцу из документации БСП: Подсистема Свойства, раздел Настройка дополнительных характеристик объектов метаданных
Версионирование
Документ необходимо включить:
- В состав определяемых типов ВерсионируемыеДанные
- В подписку ЗаписатьВерсиюДокументаБП
- В код менеджера и форм нужно добавить фрагменты из инструкции по встраиванию подсистемы.
Подробнее в документации БСП: Версионирование объектов
Присоединенные файлы
Присоединенные файлы нужны, если документ может поступать от сторонней организации или создаваться на основе рукописных документов (служебных записок и т.п.) или внешних файлов.
Подключать по инструкции БСП, создавая отдельный справочник для хранения файлов.
-
Создать справочник для хранения присоединенных файлов. Можно скопировать существующий справочник ПоступлениеТоваровУслугПрисоединенныеФайлы по шаблону: <Префикс>ПрисоединенныеФайлы, где <Префикс> – имя объекта метаданных, для которого настраиваются присоединенные файлы. Задать синоним, например: Присоединенные файлы (Поступление (акт, накладная)).
-
У реквизита ВладелецФайла установить тип – «объект с файлами». Например, ДокументСсылка.ПоступлениеТоваровУслуг.
-
Включить в состав определяемых типов ПрисоединенныйФайл (ссылки) и ПрисоединенныйФайлОбъект (объекты) справочник, созданный на шаге 1. Например, ДокументСсылка.ПоступлениеТоваровУслугПрисоединенныеФайлы.
-
Расширить состав определяемых типов ВладелецПрисоединенныхФайлов (ссылки), добавив в него тип «объект с файлами». Например ДокументСсылка.ПоступлениеТоваровУслуг.
-
Расширить состав типов свойства Источник у подписки ПереопределитьПолучаемуюФормуПрисоединенногоФайла, включив в него тип – справочник с файлами, созданный на шаге 1. Например, СправочникМенеджер.ПоступлениеТоваровУслугПрисоединенныеФайлы.
-
Расширить состав типов свойства Источник подписки УстановитьПометкуУдаленияПрисоединенныхФайловДокументов, включив в него тип – «объект с файлами» (только документы). Например, ДокументОбъект.ПоступлениеТоваровУслуг.
-
Если при интерактивном копировании объекта, содержащего присоединенные файлы, требуется их автоматическое копирование в новый объект, то в форме объекта необходимо:
- в параметры формы добавить ключевой параметр ЗначениеКопирования такого же типа, как и сам объект;
- в модуле формы в процедуру ПриЗаписиНаСервере вставить следующий код:
ПрисоединенныеФайлы.ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, Параметры);
-
Подписка на событие получения формы называется у нас "ПереопределитьПолучаемуюФормуПрисоединенногоФайла"
-
Отобразить скрепку в списке
-
Дополнительно к инструкции БСП, нужно:
- для нового справочника присоединенных файлов выполнить шаблон нового справочника (включая регистрацию в планах обмана)
- включить новый справочник в подсистему ПрисоединенныеФайлыБП
- Добавить в команду ПрисоединенныеФайлыБП
- На панели формы корректно разместить кнопку с этой командой
Справочники
Основные свойства
- Имена, синонимы и представления должны соответствовать стандартам:
-
Комментарий - Не заполняется
-
Представление объекта - В единственном числе
-
Представление списка - Во множественном числе. Представление списка не задается, если совпадает с синонимом.
-
Свойства реквизитов справочника:
- Значение заполнения - Может быть задано заведомо известное значение по умолчанию, например: СтавкаНДС = НДС18
- Заполнять из данных заполнения - Да, если при создании нового элемента справочника из формы списка с установленными отборами требуется заполнить реквизит значением отбора
- Проверка заполнения - Выдавать ошибку, если хотя бы в одном сценарии требуется обязательное заполнение реквизита. См. стандарты:
- Связи параметров выбора - Заполняется, если значение реквизита зависит от значений других реквизитов
- Параметры выбора - Заполняется, если значение ограничено заранее известными условиями отбора
Нумерация
Если код справочника не имеет никакого прикладного смысла, рекомендуется его не использовать – задать длину кода 0. Если код используется – приципы кодирования определяются прикладным смыслом (например, код справочника ГосКонтракты – это уникальный номер контракта, длина кода равна 25 символам).
Функциональные опции
Если справочник не принадлежит основной функциональности – необходимо включить справочник в состав нужных функциональных опций. Кроме того, при необходимости отдельные реквизиты справочника и его табличных частей также могут быть включены в функциональные опции.
Подразделение организации
Если в справочнике есть реквизит ПодразделениеОрганизации, который используется только в версии КОРП, справочник необходимо включить в подписку УстановитьПустоеПодразделениеПередЗаписьюСправочника
Роли
- Набор ролей у справочника может отличаться в зависимости от его назначения. Ни у одной роли не должно быть прав:
- Интерактивное удаление
- Интерактивное удаление предопределенных
- Интерактивная пометка удаления предопределенных
- Интерактивное снятие пометки удаления предопределенных
- Интерактивное удаление помеченных предопределенных.
-
Справочник, просматривать и редактировать который могут все пользователи, должен быть включен в следующие роли:
Роль Права ДобавлениеИзменениеДанныхБухгалтерии Все права, кроме Удаление, Интерактивное удаление, Интерактивная пометка удаления предопределенных, Интерактивное снятие пометки удаления предопределенных, Интерактивное удаление помеченных предопределенных ПолныеПрава Все права, кроме Интерактивное удаление, Интерактивное удаление предопределенных, Интерактивная пометка удаления предопределенных, Интерактивное снятие пометки удаления предопределенных, Интерактивное удаление помеченных предопределенных ЧтениеДанныхБухгалтерии Только права: Чтение, Просмотр, Ввод по строке
-
Справочник, содержащий классификаторы или другие «поставляемые» данные, которые могут обновляться автоматически и в модели сервиса меняются только централизованно, включается в следующие роли:
Роль Права АдминистраторСистемы Все права, кроме Удаление, Интерактивное удаление, Интерактивная пометка удаления предопределенных, Интерактивное снятие пометки удаления предопределенных, Интерактивное удаление помеченных предопределенных ДобавлениеИзменениеДанныхБухгалтерии Только права: Чтение, Просмотр, Ввод по строке ПолныеПрава Только права: Чтение, Просмотр, Ввод по строке ЧтениеДанныхБухгалтерии Только права: Чтение, Просмотр, Ввод по строке -
RLS устанавливается на справочники, подчиненные организациям, или у которых есть реквизит Организация:
- Добавить его в переопределяемый модуль УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа
- Добавить в модуль менеджера переопределяемый метод ПриЗаполненииОграниченияДоступа, в котором описать правила чтения и изменения для расчетной модели прав.
- Добавить в определяемый тип ВладелецЗначенийКлючейДоступа СправочникСсылка.%ТипОбъекта%
- Добавить в определяемый тип ВладелецЗначенийКлючейДоступаОбъект СправочникОбъект.%ТипОбъекта%
- В процедуре ПриЧтенииНаСервере формы элемента (если есть), добавить вставку кода:
// СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом
Печать
Справочники, имеющие печатные формы, необходимо подключить к механизму печати БСП. см. Печать
Для поддержки подключения дополнительных печатных форм справочник необходимо добавить в Тип параметра команды ДополнительныеПечатныеФормыОбъекта Подробнее в документации БСП: https://its.1c.ru/db/bsp301doc#content:53:hdoc
Работа в распределенной базе (РИБ)
Если изменения элементов справочника должны автоматически синхронизироваться между узлами распределенной базы. Справочник необходимо включить в состав планов обменов РИБ и в соответствующие подписки на события. При этом свойство Авторегистрация планов обмена необходимо установить в значение Запретить.
План обмена | Подписки |
---|---|
АвтономнаяРабота | АвтономнаяРаботаРегистрация, АвтономнаяРаботаРегистрацияУдаления |
Полный | ПолныйРегистрация, ПолныйРегистрацияУдаления |
ПоОрганизации | ПоОрганизацииРегистрация, ПоОрганизацииРегистрацияУдаления |
Версионирование
Справочник необходимо включить:
- В состав определяемых типов ВерсионируемыеДанные
- В подписку ЗаписатьВерсиюДокументаБП
- В код менеджера и форм нужно добавить фрагменты из инструкции по встраиванию подсистемы.
Подробнее в документации БСП: Версионирование объектов
Отображение помеченных на удаление объектов
Чтобы в Простом интерфейсе помеченные на удаление не отображались в списке, в форму списка и форму выбора необходимо:
-
Добавить реквизит формы ОтслеживатьПометкуУдаления (Булево).
-
Добавить следующие обработчики (либо дополнить имеющиеся):
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ПомеченныеНаУдалениеСервер.СкрытьПомеченныеНаУдаление(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура СписокПриИзменении(Элемент) ПомеченныеНаУдалениеКлиент.ПриИзмененииСписка(ЭтотОбъект, Элемент); КонецПроцедуры &НаСервере Процедура СписокПередЗагрузкойПользовательскихНастроекНаСервере(Элемент, Настройки) ПомеченныеНаУдалениеСервер.УдалитьОтборПометкаУдаления(Настройки); КонецПроцедуры
Регистры сведений
Основные свойства
- Имена, синонимы и представления должны соответствовать стандартам:
-
Комментарий - Не заполняется
-
Представление записи - В единственном числе
-
Представление списка - Во множественном числе. Представление списка не задается, если совпадает с синонимом.
-
Свойства реквизитов регистра - Под «реквизитами» в этом пункте понимаются измерения, ресурсы и собственно реквизиты регистра:
- Значение заполнения - Может быть задано заведомо известное значение по умолчанию, например: СтавкаНДС = НДС18
- Заполнять из данных заполнения - Да, если при создании новой записи независимого регистра сведений из формы списка с установленными отборами требуется заполнить реквизит значением отбора
- Проверка заполнения - Выдавать ошибку, если хотя бы в одном сценарии требуется обязательное заполнение реквизита. См. стандарты:
- Связи параметров выбора - Заполняется, если значение реквизита зависит от значений других реквизитов
- Параметры выбора - Заполняется, если значение ограничено заранее известными условиями отбора
Подразделение организации
Если в регистре есть измерение ПодразделениеОрганизации, который используется только в версии КОРП, регистр необходимо включить в подписку УстановитьПустоеПодразделениеПередЗаписьюНабораЗаписей
Командный интерфейс
- В командный интерфейс включаются только независимые регистры сведений
- Регистры, подчиненные регистратору, в интерфейс не выводятся
- Регистр должен быть включен, как минимум, в одну подсистему с флагом «Включать в командный интерфейс».
- Видимость регистра в командном интерфейсе по умолчанию может быть выключена.
Функциональные опции
Если регистр выводится в командный интерфейс и не принадлежит основной функциональности – необходимо включить его в состав нужных функциональных опций.Кроме того, при необходимости отдельные измерения, ресурсы и реквизиты регистра также могут быть включены в функциональные опции
Роли
- Набор ролей у регистра может отличаться в зависимости от его назначения. Регистр, просматривать и редактировать который могут все пользователи, должен быть включен в следующие роли:
- ДобавлениеИзменениеДанныхБухгалтерии
- ПолныеПрава
- ЧтениеДанныхБухгалтерии
Роль | Права |
---|---|
ДобавлениеИзменениеДанныхБухгалтерии | Все права, кроме Управление итогами |
ПолныеПрава | Все права |
ЧтениеДанныхБухгалтерии | Только права: Чтение, Просмотр |
Регистры, содержащие классификаторы или другие «поставляемые» данные, которые могут обновляться автоматически и в модели сервиса меняются только централизованно, включаются в следующие роли:
- АдминистраторСистемы
- ДобавлениеИзменениеДанныхБухгалтерии
- ПолныеПрава
- ЧтениеДанныхБухгалтерии
Роль | Права |
---|---|
АдминистраторСистемы | Все права |
ДобавлениеИзменениеДанныхБухгалтерии | Права: Чтение, Просмотр |
ПолныеПрава | Права: Чтение, Просмотр |
ЧтениеДанныхБухгалтерии | Права: Чтение, Просмотр |
- RLS устанавливается на регистры, у которых есть измерение или реквизит Организация. Для регистров, участвующих в RLS, нужно дополнительно выполнить следующее:
-
Создать предопределенный элемент в справочнике ИдентификаторыОбъектовМетаданных с именем РегистрСведений%ИмяРегистра%, где %ИмяРегистра% - имя регистра, как оно задано в конфигураторе
-
Добавить его в переопределяемый модуль УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа
-
Добавить в модуль менеджера переопределяемый метод ПриЗаполненииОграниченияДоступа, в котором описать правила чтения и изменения для расчетной модели прав.
-
Добавить в определяемый тип ВладелецЗначенийКлючейДоступаНаборЗаписей РегистрСведенийНаборЗаписей.%ТипОбъекта%
-
В процедуре ПриЧтенииНаСервере формы элемента (если есть), добавить вставку кода:
// СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом
Дата запрета изменения
Периодический регистр сведений необходимо включить:
- в подписку ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписей
- в процедуру ДатыЗапретаИзмененияБП.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения
Подробнее в документации БСП: Даты запрета изменения
Работа в распределенной базе (РИБ)
- Если изменения записей регистра должны автоматически синхронизироваться между узлами распределенной базы, регистр необходимо включить в состав всех обменов РИБ и в соответствующие подписки на события. При этом свойство Авторегистрация планов обмена необходимо установить в значение Запретить.
- Регистр следует включить в подписки:
План обмена | Подписки |
---|---|
АвтономнаяРабота | АвтономнаяРаботаРегистрацияНабора |
Полный | ПолныйРегистрацияНабора |
ПоОрганизации | ПоОрганизацииРегистрацияНабора |
Регистры накопления
Основные свойства
- Имена, синонимы и представления должны соответствовать стандартам:
- Комментарий - Не заполняется
- Представление списка - Во множественном числе. Представление списка не задается, если совпадает с синонимом.
Роли
- Новый регистр следует добавить в комплексные роли:
- ДобавлениеИзменениеДанныхБухгалтерии
- ПолныеПрава
- ЧтениеДанныхБухгалтерии
Роль | Права |
---|---|
ДобавлениеИзменениеДанныхБухгалтерии | Все права, кроме Управление итогами |
ПолныеПрава | Все права |
ЧтениеДанныхБухгалтерии | Только права: Чтение, Просмотр |
-
RLS устанавливается на регистры, у которых есть измерение Организация. Для регистров, участвующих в RLS, нужно дополнительно выполнить следующее:
-
Создать предопределенный элемент в справочнике ИдентификаторыОбъектовМетаданных с именем РегистрНакопления%ИмяРегистра%, где %ИмяРегистра% - имя регистра, как оно задано в конфигураторе
-
Добавить его в переопределяемый модуль УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа
-
Добавить в модуль менеджера переопределяемый метод ПриЗаполненииОграниченияДоступа, в котором описать правила чтения и изменения для расчетной модели прав.
-
Добавить в определяемый тип ВладелецЗначенийКлючейДоступаНаборЗаписей РегистрНакопленияНаборЗаписей.%ТипОбъекта%
-
В процедуре ПриЧтенииНаСервере формы элемента (если есть), добавить вставку кода:
// СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом
-
Дата запрета изменения
Регистр необходимо включить:
- в подписку ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписей
- в процедуру ДатыЗапретаИзмененияБП.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения
Подробнее в документации БСП: Даты запрета изменения
Работа в распределенной базе (РИБ)
- Если изменения записей регистра должны автоматически синхронизироваться между узлами распределенной базы, регистр необходимо включить в состав всех обменов РИБ и в соответствующие подписки на события. При этом свойство Авторегистрация планов обмена необходимо установить в значение Запретить.
- Регистр накопления следует включить в подписки:
План обмена | Подписки |
---|---|
АвтономнаяРабота | АвтономнаяРаботаРегистрацияНабора |
Полный | ПолныйРегистрацияНабора |
ПоОрганизации | ПоОрганизацииРегистрацияНабора |
Статья на GitHub
Эта статья есть на GitHub - TemplatesNewObject1C
↑ В начало
Благодарность
Если статья была полезная или просто хотите поддержать автора, то можете купить мне кофе
↑ В начало