1
0
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:
Арипов Никита
2023-11-05 14:18:06 +03:00
parent 31f1ca720a
commit cc355e061a

295
README.md
View File

@@ -1,7 +1,7 @@
# Шаблоны новых объектов 1С для 1С:Бухгалтерия
Используется для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать.
Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть похожие объекты.
Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.
# Константы
@@ -115,35 +115,40 @@
- **Привилегированный режим при отмене проведении** - Да
2. Документы, движения которых не удаляются автоматически, следует включить в подписку
**ПередЗаписьюДокументаДляУдаленияДвижений**
- **ПередЗаписьюДокументаДляУдаленияДвижений**
3. Документы, которые при формировании движений обращаются к данным других документов или регистров, следует включить в последовательность **ДокументыОрганизации**, а также в подписки:
**ЗарегистрироватьВПоследовательностиПередУдалением**
**ЗарегистрироватьВПоследовательностиПриЗаписи**
**ОтменитьРегистрациюПриОбменеПередЗаписью**
- **ЗарегистрироватьВПоследовательностиПередУдалением**
- **ЗарегистрироватьВПоследовательностиПриЗаписи**
- **ОтменитьРегистрациюПриОбменеПередЗаписью**
4. Для подготовки движений следует разделять методы подготовки данных и заполнение коллекции Движения. Код подготовки данных следует размещаться в модуле менеджера, код заполнения в коллекции Движения - в модуле менеджера или общем модуле.
Перед кодом заполнения коллекции Движения следует вызвать:
```
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
```
```
ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
```
После
```
ПроведениеСервер.УстановитьЗаписьОчищаемыхНаборовЗаписей(ЭтотОбъект);
```
```
ПроведениеСервер.УстановитьЗаписьОчищаемыхНаборовЗаписей(ЭтотОбъект);
```
5. Для удаления движений следует добавить обработчик в модуле объекта документа **ОбработчикУдаленияПроведения** с кодом:
```
Процедура ОбработкаУдаленияПроведения(Отказ)
  ПроведениеСервер.ПодготовитьНаборыЗаписейКОтменеПроведения(ЭтотОбъект);
Движения.Записать();  
РаботаСПоследовательностями.ОтменитьРегистрациюВПоследовательности(ЭтотОбъект, Отказ); 
КонецПроцедуры
```
```
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеСервер.ПодготовитьНаборыЗаписейКОтменеПроведения(ЭтотОбъект);
Движения.Записать();  
РаботаСПоследовательностями.ОтменитьРегистрациюВПоследовательности(ЭтотОбъект, Отказ); 
КонецПроцедуры
```
6. Документ, который формируют движения следует включить в подписку **ПроверитьКорректностьДаты**
Подписка запрещает запись документов с датой ранее 2000 или позднее 2020 года.
![Posting](img/Posting.png)
@@ -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 года.
# Справочники