This commit is contained in:
wakadakawaka 2025-08-21 20:25:15 +05:00
parent 1da759a367
commit f054cce9fb
2 changed files with 178 additions and 2 deletions

View File

@ -0,0 +1,176 @@
---
title: Подключение к подсистеме Учет оригиналов первичных документов
slug: общие-бсп-подключение-к-подсистемам/подключение-к-подсистеме-учет-оригиналов-первичных-документов
---
## Настройка определяемых типов
Документы, являющиеся поставщиками оригиналов первичных документов, следует указать в составе определяемого типа `ОбъектСУчетомОригиналовПервичныхДокументов`
## Настройка формы списка
Формы списков, в которые должны выводиться команды учета оригиналов первичных документов, следует перечислить в процедуре `ПриОпределенииОбъектовСКомандамиУчетаОригиналов` общего модуля `УчетОригиналовПервичныхДокументовПереопределяемый`, пример:
```bsl
Процедура ПриОпределенииОбъектовСКомандамиУчетаОригиналов(СписокОбъектов) Экспорт
СписокОбъектов.Добавить("Документ._ДемоРеализацияТоваров.Форма.ФормаСписка");
СписокОбъектов.Добавить("Документ._ДемоПеремещениеТоваров.Форма.ФормаСписка");
СписокОбъектов.Добавить("Обработка._ДемоЖурналУчетаОригиналовПервичныхДокументов.Форма.СписокДокументов");
КонецПроцедуры
```
## Определение печатных форм
Подсистема может отслеживать состояния первичных документов по **определенным печатным формам**.
Необходимо определить состав печатных форм документов, для которых требуется вести учет оригиналов:
> Например, у документа `Отпуск` может быть 4 печатных формы, но только в одной требуется подпись сотрудника и, соответственно, только по ней требуется отслеживать состояние.
Документы, являющиеся поставщиками оригиналов первичных документов, и печатные формы по которым требуется отслеживание необходимо перечислить в процедуре `ЗаполнитьТаблицуУчетаОригиналовмодуля` `УчетОригиналовПервичныхДокументовПереопределяемый`, пример:
```bsl
Процедура ЗаполнитьТаблицуУчетаОригиналов(ТаблицаУчетаОригиналов) Экспорт
НоваяСтрока = ТаблицаУчетаОригиналов.Добавить();
НоваяСтрока.ОбъектМетаданных = Метаданные.Документы._ДемоРеализацияТоваров;
НоваяСтрока.Идентификатор = "РасходнаяНакладная";
КонецПроцедуры
```
Если документ подключен к подсистеме учета оригиналов и в данном переопределяемой процедуре:
- **ничего не указывать** по этому документу, то состояния будут отслеживаться **по всем печатным формам этого документа**;
- **указать печатные формы**, то состояния будут отслеживаться **только по указанным печатным формам документа**.
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">"Многосотрудниковые" документы</summary>
Поддерживается отслеживание состояний по "многосотрудниковым" документам. Пример см. документ `_ДемоОтпускаСотрудников`, в печатной форме `"Приказ о предоставлении отпуска работникам (T-6a)"` требуется подпись нескольких сотрудников (они хранятся в табличной части документа), поэтому состояния для таких документов отслеживается и в разрезе сотрудников.
Для подключения таких документов к учету оригиналов необходимо в составе определяемого типа `Сотрудник` указать соответствующие справочники. Как правило, это такие справочники, как `Физические лица`, `Сотрудники`. Необходимо определить состав документов, для которых требуется подпись нескольких сотрудников, и перечислить **их** и **наименование табличной части**, в которой хранится список сотрудников, в процедуре `ПриОпределенииМногосотрудниковыхДокументов` общего модуля `УчетОригиналовПервичныхДокументовПереопределяемый`, например:
```bsl
Процедура ПриОпределенииМногосотрудниковыхДокументов(СписокОбъектов) Экспорт
СписокОбъектов.Вставить(Метаданные.Документы._ДемоОтпускаСотрудников.ПолноеИмя(),"Сотрудники");
КонецПроцедуры
```
При этом, если документ подключен к подсистеме учета оригиналов и в данной переопределяемой процедуре:
- не указывать такой документ, то состояния будут отслеживаться в разрезе печатных форм, как и раньше;
- указать документ и табличную часть, то состояния будут отслеживаться по печатным формам документа в разрезе сотрудников.
</details>
## Настройка форм
Подключить формы к подсистеме `ПодключаемыеКоманды`
### Форма документа
Для подключения форм документов, в которых требуется выводить сведения о текущем состоянии оригинала первичного документа необходимо в формах документов, определенных на предыдущем шаге:
- в процедуре `ПриСозданииНаСервере` (обработчик события формы) вставить вызов по шаблону:
```bsl
// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
УчетОригиналовПервичныхДокументов.ПриСозданииНаСервереормаДокумента(ЭтотОбъект, Элемент.<ГруппаФормы>);
// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
```
Где второй параметр `Расположение` (необязательный) - указание группы формы, в которой будет размещена декорация с данными о текущем состоянии оригинала. В противном случае, без указания параметра, декорация будет размещена в **нижнем правом углу формы**.
- в процедуре `ОбработчикОповещения` (обработчик события формы) добавить код:
```bsl
// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
УчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия, ЭтотОбъект);
// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
```
- добавить вспомогательную процедуру:
```bsl
// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()
УчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтотОбъект);
КонецПроцедуры
//Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
```
> Примеры внедрения и настройки подсистемы в формах объектов см. в документах _ДемоПеремещениеТоваров и _ДемоРеализацияТоваров.
### Форма списка
- Для основного списка установить `ПроизвольныйЗапрос` и дополнить его выборкой трех строк: `СостояниеОригиналаПервичногоДокумента`, `ОбщееСостояние`, `СостояниеОригиналПолучен`
```bsl
ВЫБРАТЬ
...
<ВыбираемыеПоля>
...,
NULL КАК СостояниеОригиналаПервичногоДокумента,
ИСТИНА КАК ОбщееСостояние,
0 КАК СостояниеОригиналПолучен
ИЗ
...
```
для этих полей установить признак `ИспользоватьВсегда`
- В обработчике события `ПриСозданииНаСервере` формы вставить вызов по шаблону:
```bsl
// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
УчетОригиналовПервичныхДокументов.ПриСозданииНаСервереормаСписка(ЭтотОбъект, Элементы.<ТаблицаФормы>, Элементы.<КолонкаДинамическогоСписка>);
// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
```
Где третий параметр `Расположение` (необязательный) - указание колонки динамического списка, перед которой будет размещены колонки с данными о текущем состоянии оригинала. В противном случае, без указания параметра, новые колонки **будут размещены в списке последними**.
- В обработчике события `ОбработчикОповещения` формы добавить код:
```bsl
// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
УчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаСписка(ИмяСобытия, ЭтотОбъект, Элементы.<ТаблицаФормы>);
// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
```
- В обработчике события `Выбор` таблицы формы добавить код:
```bsl
// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
УчетОригиналовПервичныхДокументовКлиент.СписокВыбор(Поле.Имя, ЭтотОбъект, Элементы.<ТаблицаФормы>, СтандартнаяОбработка);
// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
```
- В обработчике события `СписокПриПолученииДанныхНаСервере` таблицы формы добавить код:
```bsl
// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
УчетОригиналовПервичныхДокументов.ПриПолученииДанныхНаСервере(Строки);
// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
```
- Добавить вспомогательные процедуры:
```bsl
// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
&НаКлиенте
Процедура Подключаемый_ОбновитьКомандыСостоянияОригинала()
ОбновитьКомандыСостоянияОригинала()
КонецПроцедуры
&НаСервере
Процедура ОбновитьКомандыСостоянияОригинала()
// Код из обработчика события ПриСозданииНаСервере этой формы по подключению команд:
//// СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
//УчетОригиналовПервичныхДокументов.ПриСозданииНаСервереормаСписка(ЭтотОбъект, Элементы.<ТаблицаФормы>, Элементы.<КолонкаДинамическогоСписка>);
//// Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
КонецПроцедуры
//Конец СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов
```
## Оптимизация
Опционально. Для целей оптимизации производительности при открытии формы рекомендуется добавить в командную панель
- подменю:
- Имя: ПодменюУстановитьНастроитьСостояниеОригинала;
- Заголовок: Состояние оригинала;
- Вид: Подменю;
- Отображение: Картинка и текст;
- Картинка: УстановитьСостояниеОригиналаПервичногоДокумента.
- группу для вывода команд установки состояния оригинала по шаблону:
- Имя: ГруппаУстановитьОригиналПолучен;
- Вид: Подменю;
- Отображение: Картинка;
- Картинка: СостояниеОригиналаПервичногоДокументаОригиналПолучен.
>Примеры внедрения и настройки подсистемы в формах списков см. в документах `_ДемоПеремещениеТоваров,` `_ДемоРеализацияТоваров` и обработке `_ДемоЖурналУчетаОригиналовПервичныхДокументов`.

View File

@ -54,9 +54,9 @@ slug: общие-подключаемые-команды-команды-запо
КонецПроцедуры
```
# Пример обработчика в модуле формы
# Пример обработчика в модуле менеджера
> Его также можно разместить и в модуле менеджера, и в общем модуле
> Его также можно разместить и в модуле формы, и в общем модуле
```bsl
&НаСервере