You've already forked TemplatesNewObject1C
mirror of
https://github.com/Oxotka/TemplatesNewObject1C.git
synced 2025-09-16 09:26:15 +02:00
add info about documents
This commit is contained in:
295
README.md
295
README.md
@@ -1,7 +1,7 @@
|
||||
# Шаблоны новых объектов 1С для 1С:Бухгалтерия
|
||||
|
||||
Используется для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать.
|
||||
Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть похожие объекты.
|
||||
Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.
|
||||
|
||||
# Константы
|
||||
|
||||
@@ -115,35 +115,40 @@
|
||||
- **Привилегированный режим при отмене проведении** - Да
|
||||
|
||||
2. Документы, движения которых не удаляются автоматически, следует включить в подписку
|
||||
**ПередЗаписьюДокументаДляУдаленияДвижений**
|
||||
|
||||
- **ПередЗаписьюДокументаДляУдаленияДвижений**
|
||||
|
||||
3. Документы, которые при формировании движений обращаются к данным других документов или регистров, следует включить в последовательность **ДокументыОрганизации**, а также в подписки:
|
||||
**ЗарегистрироватьВПоследовательностиПередУдалением**
|
||||
**ЗарегистрироватьВПоследовательностиПриЗаписи**
|
||||
**ОтменитьРегистрациюПриОбменеПередЗаписью**
|
||||
|
||||
- **ЗарегистрироватьВПоследовательностиПередУдалением**
|
||||
- **ЗарегистрироватьВПоследовательностиПриЗаписи**
|
||||
- **ОтменитьРегистрациюПриОбменеПередЗаписью**
|
||||
|
||||
4. Для подготовки движений следует разделять методы подготовки данных и заполнение коллекции Движения. Код подготовки данных следует размещаться в модуле менеджера, код заполнения в коллекции Движения - в модуле менеджера или общем модуле.
|
||||
Перед кодом заполнения коллекции Движения следует вызвать:
|
||||
|
||||
```
|
||||
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
|
||||
```
|
||||
```
|
||||
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
|
||||
```
|
||||
|
||||
После
|
||||
|
||||
```
|
||||
ПроведениеСервер.УстановитьЗаписьОчищаемыхНаборовЗаписей(ЭтотОбъект);
|
||||
```
|
||||
```
|
||||
ПроведениеСервер.УстановитьЗаписьОчищаемыхНаборовЗаписей(ЭтотОбъект);
|
||||
```
|
||||
|
||||
5. Для удаления движений следует добавить обработчик в модуле объекта документа **ОбработчикУдаленияПроведения** с кодом:
|
||||
|
||||
```
|
||||
Процедура ОбработкаУдаленияПроведения(Отказ)
|
||||
ПроведениеСервер.ПодготовитьНаборыЗаписейКОтменеПроведения(ЭтотОбъект);
|
||||
Движения.Записать();
|
||||
РаботаСПоследовательностями.ОтменитьРегистрациюВПоследовательности(ЭтотОбъект, Отказ);
|
||||
КонецПроцедуры
|
||||
```
|
||||
```
|
||||
Процедура ОбработкаУдаленияПроведения(Отказ)
|
||||
ПроведениеСервер.ПодготовитьНаборыЗаписейКОтменеПроведения(ЭтотОбъект);
|
||||
Движения.Записать();
|
||||
РаботаСПоследовательностями.ОтменитьРегистрациюВПоследовательности(ЭтотОбъект, Отказ);
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
6. Документ, который формируют движения следует включить в подписку **ПроверитьКорректностьДаты**
|
||||
|
||||
Подписка запрещает запись документов с датой ранее 2000 или позднее 2020 года.
|
||||
|
||||

|
||||
|
||||
@@ -206,6 +211,258 @@
|
||||
КонецЕсли;
|
||||
```
|
||||
|
||||
## Функциональные опции
|
||||
|
||||
Функциональные опции используются как для скрытия всего документа, так и конкретных реквизитов.
|
||||
|
||||
1. Если документ не принадлежит основной функциональности (доступен всем пользователям), то его необходимо включить в состав функциональной опции.
|
||||
|
||||
Возможно придется добавить добавить ее в **Обработка.ФункциональностьПрограммы** по аналогии с другими опциями.
|
||||
|
||||
2. Если используются реквизиты из списка ниже, то их следует включить в состав функциональных опций:
|
||||
|
||||
| Реквизиты | Функциональные опции |
|
||||
|-----------|--------------------|
|
||||
| Организация | ИспользоватьНесколькоОрганизацийБухгалтерскийУчет |
|
||||
| ПодразделениеОрганизации | ВестиУчетПоПодразделениям |
|
||||
| Склад | ИспользоватьНесколькоСкладовБухгалтерскийУчет |
|
||||
| ВалютаДокумента, КурсВзаиморасчетов, КратностьВзаиморасчетов | ИспользоватьВалютныйУчет |
|
||||
| БанковскийСчетОрганизации | ИспользоватьНесколькоБанковскихСчетовОрганизации |
|
||||
| Ответственный | ИспользоватьНесколькоОтветственных |
|
||||
| РучнаяКорректировка | ИспользоватьРучнуюКорректировкуДвижений |
|
||||
| Патент, ДеятельностьНаПатенте | ПрименяетсяУСНПатент |
|
||||
| СуммаНУ | ПлательщикНалогаНаПрибыль |
|
||||
|
||||
3. Параметризуемые функциональные опции, например **ПлательщикНалогаНаПрибыль** или **ПрименяетсяУСН** зависят от двух реквизитов **Организация** и **Дата**, поэтому следует
|
||||
добавить вызов **ОбщегоНазначенияБПКлиентСервер.УстановитьПараметрыФункциональныхОпцийФормыДокумента**:
|
||||
|
||||
- в обработчики инициализации реквизитов формы:
|
||||
|
||||
- ПриСозданииНаСервере (при условии Параметры.Ключ.Пустая)
|
||||
- ПриЧтенииНаСервере
|
||||
- ПослеЗаписиНаСервереЦелесообразно
|
||||
|
||||
- в обработчики изменения реквизитов, от которых зависят функциональные опции, например **ПриИзмененииОрганизации**
|
||||
- в обработчик изменения реквизита **Дата**
|
||||
При изменении даты следует обратить внимание на методы выполняемые на сервере контекстно.
|
||||
|
||||
Для таких вызовов следует проверять **ОбщегоНазначенияБПКлиент.ТребуетсяВызовСервераПриИзмененииДатыДокумента**.
|
||||
|
||||
При этом реквизит формы, передаваемый в параметр **ПредыдущаяДата** метода следует называть **ТекущаяДатаДокумента** (потому что это дата, которой соответствуют остальные свойства формы)
|
||||
|
||||
**Важно:** метод не меняет значение этого реквизита формы, это нужно делать в форме, после вызова метода, вне зависимости от возвращенного результата.
|
||||
|
||||
```
|
||||
ТребуетсяВызовСервера = ОбщегоНазначенияБПКлиент.ТребуетсяВызовСервераПриИзмененииДатыДокумента(Объект.Дата, ТекущаяДатаДокумента);
|
||||
ТекущаяДатаДокумента = Объект.Дата;
|
||||
Если Не ТребуетсяВызовСервера Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
```
|
||||
|
||||
## Роли
|
||||
|
||||
1. Документ должен быть включен в следующие роли:
|
||||
|
||||
| Роль | Права |
|
||||
|------|-------|
|
||||
| ДобавлениеИзменениеДанныхБухгалтерии | Все права, кроме: Удаление, Интерактивное удаление |
|
||||
| ПолныеПрава | Все права, кроме: Интерактивное удаление |
|
||||
| ЧтениеДанныхБухгалтерии | Только права: Чтение, Просмотр, Ввод по строке |
|
||||
|
||||
|
||||
2. RLS - Ограничение на уровне записей
|
||||
Для документов нужно дополнительно выполнить следующее:
|
||||
- Добавить в процедуру общего модуля **УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа**
|
||||
- Добавить в определяемый тип **ВладелецЗначенийКлючейДоступа** ссылку - ДокументСсылка.%ТипОбъекта%
|
||||
- Добавить в определяемый тип **ВладелецЗначенийКлючейДоступаДокумент** объект - ДокументОбъект.%ТипОбъекта%
|
||||
- Добавить в модуль менеджера переопределяемый метод **ПриЗаполненииОграниченияДоступа**, в котором описать правила чтения и изменения для расчетной модели прав. Например,
|
||||
```
|
||||
#Область СтандартныеПодсистемы_УправлениеДоступом
|
||||
|
||||
// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа
|
||||
//
|
||||
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
|
||||
Ограничение.Текст =
|
||||
"РазрешитьЧтениеИзменение
|
||||
|ГДЕ
|
||||
| ЗначениеРазрешено(Организация)";
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
```
|
||||
|
||||
- В форме документа в процедуру **ПриЧтенииНаСервере** добавить код
|
||||
|
||||
```
|
||||
// СтандартныеПодсистемы.УправлениеДоступом
|
||||
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
|
||||
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
|
||||
МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
|
||||
КонецЕсли;
|
||||
// Конец СтандартныеПодсистемы.УправлениеДоступом
|
||||
```
|
||||
- Добавить в правах шаблоны RLS:
|
||||
|
||||
- В **ДобавлениеИзменениеДанныхБухгалтерии** следует добавить ограничения для **Чтения**, **Добавление** и **Изменение**
|
||||
```
|
||||
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
|
||||
#ДляОбъекта("")
|
||||
#Иначе
|
||||
#ПоЗначениям("Документ.%ИмяДокумента%",
|
||||
"", "","Организации", "Организация",
|
||||
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","")
|
||||
#КонецЕсли
|
||||
```
|
||||
- В **ЧтениеДанныхБухгалтерии** следует добавить огаринчения для **Чтения**
|
||||
```
|
||||
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
|
||||
#ДляОбъекта("")
|
||||
#Иначе
|
||||
#ПоЗначениям("Документ.%ИмяДокумента%",
|
||||
"", "","Организации", "Организация",
|
||||
"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","")
|
||||
#КонецЕсли
|
||||
```
|
||||
|
||||
3. Атомарные роли, адаптация по работе с неполным набором прав
|
||||
|
||||
Сейчас в Бухгалтерии есть профили: **Менеджер по продажам** и **Кладовщик**. Следует подумать нужно ли относить документ к этим профилям или нет.
|
||||
Для них следует добавить специальные роли **Чтение%ИмяДокумента%** и **ДобавлениеИзменение%ИмяДокумента%**
|
||||
|
||||
4. Стандарты по ограничению прав доступа:
|
||||
|
||||
- [Настройка ролей и прав доступа](https://its.1c.ru/db/v8std#content:689:hdoc)
|
||||
- [Проверка прав доступа](https://its.1c.ru/db/v8std#content:737:hdoc)
|
||||
- [Безопасность прикладного программного интерфейса сервера](https://its.1c.ru/db/v8std#content:678:hdoc)
|
||||
- [Использование привилегированного режима](https://its.1c.ru/db/v8std#content:485:hdoc)
|
||||
- [Использование модулей с повторным использованием возвращаемых значений](https://its.1c.ru/db/v8std#content:724:hdoc)
|
||||
- [Разработка ролей в библиотеках](https://its.1c.ru/db/v8std#content:668:hdoc)
|
||||
- [Стандартные роли](https://its.1c.ru/db/v8std#content:488:hdoc)
|
||||
- [Установка прав для новых объектов и полей объектов](https://its.1c.ru/db/v8std#content:532:hdoc)
|
||||
- [Ограничения на использование ключевого слова "РАЗРЕШЕННЫЕ" в запросах](https://its.1c.ru/db/v8std#content:415:hdoc)
|
||||
- [Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным](https://its.1c.ru/db/v8std#content:491:hdoc)
|
||||
|
||||
## Дополнительные сведения
|
||||
|
||||
1. Документ включить в определяемый тип **ВладелецДополнительныхСведений**
|
||||
// TODO - Дописать
|
||||
|
||||
## Печать
|
||||
|
||||
Документы, имеющие печатные формы, следует подключить к механзиму печати БСП:
|
||||
|
||||
1. Добавить объект в процедуру **УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати**
|
||||
2. В модуле менеджера добавить процедуру **ДобавитьКомандыПечати**, в процедуру добавить описание всех команд печати.
|
||||
3. Подключить все формы к подсистеме [Подключаемые команды](https://its.1c.ru/db/bsp302doc/content/54/hdoc).
|
||||
|
||||
Подробнее в документации БСП: [https://its.1c.ru/db/bsp301doc\#content:53:hdoc](https://its.1c.ru/db/bsp301doc%23content:53:hdoc)
|
||||
|
||||
## Присоединенные файлы
|
||||
|
||||
|
||||
## Версионирование
|
||||
|
||||
Документ необходимо включить:
|
||||
|
||||
- В состав определяемых типов **ВерсионируемыеДанные**
|
||||
- В подписку **ЗаписатьВерсиюДокументаБП**
|
||||
- В код менеджера и форм нужно добавить фрагменты из инструкции по встраиванию подсистемы.
|
||||
|
||||
Подробнее в документации БСП: [Версионирование объектов](https://its.1c.ru/db/bsp301doc#content:24:hdoc)
|
||||
|
||||
## Дополнительные отчеты и обработки
|
||||
|
||||
Документ необходимо включить в состав определяемых типов
|
||||
|
||||
- **ОбъектСДополнительнымиКомандами**
|
||||
|
||||
Подробнее в документации БСП: [Дополнительные отчеты и обработки](https://its.1c.ru/db/bsp301doc#content:31:hdoc)
|
||||
|
||||
|
||||
## Структура подчиненности (Связанные документы)
|
||||
|
||||
Для возможности показа структуры подчиненности документ необходимо включить в список типов параметра общей команды
|
||||
- **СвязанныеДокументы**
|
||||
Если сам документ может быть выбран в реквизитах других документов – документ необходимо включить в тип критерия отбора
|
||||
- **СвязанныеДокументы**
|
||||
Реквизиты документа, содержащие ссылки на другие документы, необходимо включить в состав критерия отбора
|
||||
- **СвязанныеДокументы**
|
||||
Реквизиты документа типа СубконтоN в состав критерия отбора не включаются.
|
||||
|
||||
Подробнее в документации БСП: [Структура подчиненности](https://its.1c.ru/db/bsp301doc#content:70:hdoc)~
|
||||
|
||||
## Журналы документов
|
||||
|
||||
Новый документ (кроме служебных документов типа **Документ расчетов с контрагентом** или **Партия**) необходимо включить в журнал:
|
||||
|
||||
- ЖурналОпераций
|
||||
|
||||
В остальные журналы документ включается исходя из раздела учета, к которому документ относится.
|
||||
|
||||
## Документы по контрагенту
|
||||
|
||||
Для показа документа в списке документов по контрагенту (открывается из панели навигации формы контрагента по ссылке **Документы**) реквизиты документа с типом **Справочник.Контрагенты** необходимо включить в критерий отбора **ДокументыПоКонтрагенту**
|
||||
|
||||
В список включаются документы, которые передаются контрагенту или получаются от него
|
||||
|
||||
## Документы по договору контрагента
|
||||
|
||||
|
||||
|
||||
В список включаются документы, которые передаются контрагенту или получаются от него
|
||||
|
||||
## Контрагент
|
||||
|
||||
Если предполагается, что в документе пользователь будет добавлять новых контрагентов, то для упрощения ввода контрагента у поля ввода создаются обработчики событий АвтоПодбор, ОкончаниеВводаТекста, Создание, ОбработкаВыбора со следующим кодом:
|
||||
|
||||
| &НаКлиенте <br>Процедура КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) <br> РаботаСКонтрагентамиБПКлиент.КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка); <br>КонецПроцедуры |
|
||||
|---|
|
||||
| &НаКлиенте <br>Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка) <br> РаботаСКонтрагентамиБПКлиент.КонтрагентОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка); <br>КонецПроцедуры |
|
||||
|
||||
Для простого интерфейса предусмотрена упрощенная форма ввода нового контрагента, поэтому, если планируется, что в открываемой упрощенной форме не будут отображаться поля для ввода банковского счета ("Банк" и "НомерСчета"),то обработчики имеют следующий вид:
|
||||
|
||||
| &НаКлиенте <br>Процедура КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) <br> РаботаСКонтрагентамиБПКлиент.КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); <br>КонецПроцедуры |
|
||||
|---|
|
||||
| &НаКлиенте <br>Процедура КонтрагентСоздание(Элемент, СтандартнаяОбработка) <br> РаботаСКонтрагентамиБПКлиент.КонтрагентСоздание(Элемент, Элемент.ТекстРедактирования, СтандартнаяОбработка); <br>КонецПроцедуры |
|
||||
|
||||
Если планируется, что в открываемой упрощенной форме будут отображаться поля для ввода банковского счета ("Банк" и "НомерСчета"), то обработчики имеют следующий вид:
|
||||
| &НаКлиенте <br>Процедура КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) <br> РаботаСКонтрагентамиБПКлиент.КонтрагентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка, ,Истина); <br>КонецПроцедуры |
|
||||
|---|
|
||||
| &НаКлиенте <br>Процедура КонтрагентСоздание(Элемент, СтандартнаяОбработка) <br> РаботаСКонтрагентамиБПКлиент.КонтрагентСоздание(Элемент, Элемент.ТекстРедактирования, СтандартнаяОбработка, ,Истина); <br>КонецПроцедуры |
|
||||
|
||||
## Договоры контрагентов
|
||||
|
||||
Если в документе есть реквизит **ДоговорКонтрагента**, то следует:
|
||||
1. Добавить этот документ в **РаботаСДоговорамиКонтрагентовБП.ВидДоговораПоОбъекту**
|
||||
2. Добавить договор контрагента в состав функциональной опции - **ВестиУчетПоДоговорам**
|
||||
3. Добавить код в модуль объекта в событии ПередЗаписью ```РаботаСДоговорамиКонтрагентовБП.ЗаполнитьДоговорПередЗаписью(ЭтотОбъект);```
|
||||
4. Для показа документа в списке документов по договору контрагента (открывается из панели навигации формы договора по ссылке **Документы**) реквизиты документа с типом **Справочник.ДоговорыКонтрагентов** необходимо включить в критерий отбора **ДокументыПоДоговоруКонтрагента**
|
||||
|
||||
## Данные первичных документов
|
||||
|
||||
Для возможности быстрого получения номера и даты документа в отчетах по полям составного типа документ необходимо включить в тип измерения Документ регистра сведений
|
||||
- **ДанныеПервичныхДокументов**
|
||||
Документ также должен быть включен в подписку
|
||||
- **ЗарегистрироватьДанныеПервичныхДокументов**
|
||||
|
||||
## Дата запрета изменения
|
||||
|
||||
Для подключения работы Даты запрета изменения следует Документ необходимо :
|
||||
|
||||
- Добавить в подписку **ПроверитьДатуЗапретаИзмененияПередЗаписьюДокументаБП**
|
||||
- Добавить в подписку **ПроверитьДатуЗапретаИзмененияПередУдалениемБП**
|
||||
- Добавить в процедуру **ДатыЗапретаИзмененияБП.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения**
|
||||
- Вставить в модуль формы объекта в процедуру обработчика события **ПриЧтенииНаСервере** вызов ```ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);```
|
||||
|
||||
Подробнее в документации БСП: [Даты запрета изменения](https://its.1c.ru/db/bsp301doc#content:785:hdoc)
|
||||
|
||||
## Контроль даты документов
|
||||
|
||||
Документы, которые формируют движения, необходимо включить в подписку
|
||||
· ПроверитьКорректностьДаты
|
||||
Подписка запрещает запись документов с датой ранее 2000 или позднее 2020 года.
|
||||
|
||||
|
||||
# Справочники
|
||||
|
||||
|
Reference in New Issue
Block a user