Добрый день, узнала о такой интересной штуке, как подписка на событие и задалась вопросом, как можно перед записью обрабатывать все документы, но что-то мало информации про этот объект конфигурации, вопрос заключается в том, что я создала РС, который должен хранить информацию (Товар, Автор, Дата, Категория товара и Ставка ндс на этот товар), то-есть подписка должна сохранять и записывать информацию о значениях реквизитов документов, только для уже существующих объектов, но вот тут проблема, не совсем понимаю, как это будет осуществляться, в условие я произвожу поиск по номеру, если такой документ есть, то подписка срабатывает и сохраняет все значения реквизитов(как должен выглядеть код для сохранения, этого я не понимаю) или просто записывает данные сразу в РС
---
В подписку приходит Источник - это документ, вызвавший событие подписки с типом ДокументОбъект, например, ДокументОбъект.ПоступлениеТоваров.
Так как это объект, все его данные уже считаны из БД и содержатся в самом объекте, не нужно делать запросы к нему для получения, например, табличной части.
Нужна табличная часть "Товары"?

```1c
    Источник.Товары
```

Нужны сами товары?

```1c
    Для каждого СтрокаТовара Из Источник.Товары Цикл
    ТекущийТовар = СтрокаТовара.Товар;
    КонецЦиккла;
```

Вообще, мне кажется неправильной идея с проверкой наличия нужного реквизита. Это говорит о непродуманности архитектуры.
Вы же сами создаёте эту подписку - либо делайте её только для тех объектов, у которых есть все нужные реквизиты, либо сделайте так, чтобы у всех нужных объектов были эти реквизиты.
---
почему вы решили, что именно подписка на событие подойдет для решения вашей задачи?
Исходя из ваших слов
в условие я произвожу поиск по номеру, если такой документ есть, то подписка срабатывает и сохраняет все значения реквизитов(как должен выглядеть код для сохранения, этого я не понимаю) или просто записывает данные сразу в РС
больше подходит обычное регламентное задание.
---
чтобы не засорять грубо говоря документы, я же могу это сделать просто подпиской на событие + хочется узнать побольше о этом объекте, а толковых задач с примерами я найти так и не смогла
---
Засорять документы каким образом? Можете, если изменится условие задачи и другого способа, кроме как синхронного действия, для решения задачи нет.

Еще раз: в озвученных вами условиях больше подойдет регламентное задание.

Подписка на событие будет отрабатывать при/перед записи/-ью каждого документа - это, грубо говоря, дополнительные действия, при возникновении определенного события с объектом, на который "навешана" подписка.
---
хм, я поняла, ну вообще на самом деле, т.к. это тестовая база и я хотела бы сделать подписку на событие именно, да я знаю, что подписки отрабатывают только при/перед записью./

А вообще хотелось бы реализовать, чтобы перед записью подписка проверяла новый или не новый документ, если это уже существующий, то она сохраняет информацию о значениях реквизитов документа после изменения, и записывает всё уже в РС, и сделать возможность открыть этот РС в отчете за нужный период, с отчетом проблем нет, проблема заключается в непонимании как именно будет выглядеть общий модуль данной подписки
---
проблема заключается в непонимании как именно будет выглядеть общий модуль данной подписки А вы попробуйте... И сразу поймете. Все необходимые параметры для обработчика сформируются сами.
---
Да, сейчас буду пробовать, потому что как я поняла все нужные данные будут в Источнике храниться :)
---
Не совсем так. Просто под источник - это и есть сам объект, с которым вы работаете в модуле объекта (если мы говорим про справочник или документ).
---
Как это вдруг мало информации о подписке на события?) Первая же ссылка гугла

Вкратце - просто добавляете этот объект. Затем выбираете источник - по сути, регистратор, на который будет смотреть подписка. Выбираете вид события - событие, на которое подписка будет реагировать по выбранному источнику. И ставите обработчик - код в общем модуле, который будет исполняться, когда наступит выбранное событие по выбранному источнику.

Как пример:
Источник: ДокументОбъект.ПриходныйКассовыйОрдер;
Событие: ПередЗаписью;
Обработчик: некоторый ваш код (нажатие на лупу позволит выбрать модуль, в котором будет размещена процедура - после выбора процедура сама создастся с необходимыми параметрами).
В итоге ваш указанный код будет исполняться каждый раз перед записью приходного кассового ордера.
---
Мало информации как именно в общем модуле отрабатывает код и как он эту всю информацию записывает допустим в РС, но все равно спасибо, сейчас буду пробовать
---
В РС всё запишется тем кодом, который вы напишете) Это уже не относится к подписке на событие) Если не знаете как написать этот код, то уже другой вопрос. Собсна, азы программирования
---
Не настолько всё плохо, к счатью я знаю, как записать данные в РС кодом)
---
Возникла небольшая проблема, не совсем понимаю, как мне с Документа вытащить данные о товаре(которые есть только в справочнике, это Категория товара и Ставка НДС его) + когда я проверяю (если документ не новый), то у меня запись не происходит, если не проверять, запись происходит, но автор указывается просто "Автор", а не значения реквизита, подскажите по какой причине?

```1c
    Если НЕ Источник.ЭтоНовый() Тогда
    МенеджерЗаписи = РегистрыСведений.ТестовыйПодп.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Дата = ТекущаяДата();
    МенеджерЗаписи.Автор = Источник.Метаданные().Реквизиты.Найти("Автор");
    МенеджерЗаписи.Записать();
```
КонецЕсли;
---
МенеджерЗаписи.Автор = Источник.Метаданные().Реквизиты.Найти("Автор"); Никогда так не делайте!

```1c
    Если Источник.Метаданные().Реквизиты.Найти("Автор") = Неопределено Тогда
    МенеджерЗаписи.Автор = ПараметрыСеанса.ТекущийПользователь;
    Иначе
    МенеджерЗаписи.Автор = Источник.Автор;
    КонецЕсли;.
```
---
Учту, спасибо, но у меня почему-то запись происходит только 1 раз, и подскажите пожалуйста насчет как мне с Документа вытащить данные о товаре(которые есть только в справочнике, это Категория товара и Ставка НДС его) , не совсем понимаю, у меня же в документах нет такой информации, она только в справочнике Номенклатуры
---
Но в документе же есть ссылка на номенклатуру? Вот по ней и вытаскивайте.
---
Просто использовать в МенеджерЗаписи.Категория/МенеджерЗаписи.Ставка = Источник.Ссылка? просто не совсем понимаю как мне именно обратиться через источник
---
В подписку приходит Источник - это документ, вызвавший событие подписки с типом ДокументОбъект, например, ДокументОбъект.ПоступлениеТоваров.
Так как это объект, все его данные уже считаны из БД и содержатся в самом объекте, не нужно делать запросы к нему для получения, например, табличной части.
Нужна табличная часть "Товары"?

```1c
    Источник.Товары
```

Нужны сами товары?

```1c
    Для каждого СтрокаТовара Из Источник.Товары Цикл
    ТекущийТовар = СтрокаТовара.Товар;
    КонецЦиккла;
```

Вообще, мне кажется неправильной идея с проверкой наличия нужного реквизита. Это говорит о непродуманности архитектуры.
Вы же сами создаёте эту подписку - либо делайте её только для тех объектов, у которых есть все нужные реквизиты, либо сделайте так, чтобы у всех нужных объектов были эти реквизиты.
---
Все равно не получается вытащить у меня товар, который находится в табличной части самого документа, Источник.Ссылка... Источник.Номенклатура(это табличная часть)... не один метод не передает в РС мне какие-либо товары
---
а вы прорабатывали - что вы будете делать с вашими записями в РС
 - если в документе изменится состав ТЧ товары
- если документ отменят проведение /поставят пометку на удаление.

ТЧ можно обойти через цикл

получить через запрос

P.S.
Не пробовали читать книжки по 1С. Помогает.
---
Да, все моменты с изменением документа проработаны, в РС будут храниться новые и старые данные документа, думала про запрос, но думала, что можно обратиться как-нибудь и без обхода через цикл, а просто взять данные как и с обычных реквизитов.

Насчет книг, да, пробовала, читала 2 книги по разработке "Начинала" но в книгах книгах было много воды, если можете посоветовать что-то, то буду благодарна
---
Я начиснала с Радчено и Хрусталева
на ИТС есть бесплатные книги.

Что за задачу вам поставили ? Зачем что-то дополнительно хранить - дублирую данные из документов с отслеживанием изменений ? Про какую конфигурацию идеи речь?
---
Спасибо за книги, обязательно прочитаю, конфа своя, сама пишу понемногу, я не работаю, для себя, пока учусь только программировать
---
Еще проблема в том, что у меня подписка привязана ко всем Документам, запросом мне придётся перебирать тч у каждого документа
---
Когда подлиска срабатывает обрабатывается один конкретный документ. а не сразу все документы к которым вы привязали подписку.
---
Про как работает подписка понятно, я изменила на 1 конкретный документ, у меня должны проверяться все Реквизиты перед записью, остались они такими же или пользователь их поменял, если пользователь поменял, я должна в РС вносить все данные + измененные данные, вот всё работает, но проблема именно с получением Номенклатуры, которая была в табличной части, сейчас пыталась вытащить запросом из Документа Ссылку и Где - Документ.Ссылка = &Номенклатура, установила параметр и у меня выдаёт ошибку (Нельзя сравнивать поля неограниченной длины и поля несовместимого типа) все реквизиты у меня имеют нужные типы
---
все реквизиты у меня имеют нужные типы
выдаёт ошибку (Нельзя сравнивать поля неограниченной длины и поля несовместимого типа)
Не находите тут противоречие? Откуда уверенность в том, что "все реквизиты у меня имеют нужные типы"? В отладке смотрели?
Может быть приведёте код подписки, чтобы можно было оценить масштаб бедствия?
---
(27)
 Да была ошибка в одном реквизите, у которого не правильно был указан реквизит + неправильно подошла к методу решения данной задачи.
Насчет Документ.Ссылка = &Номенклатура уже тоже поняла в ходе решения
Всем спасибо кто откликнулся)
---
Документ.Ссылка = &Номенклатура

Это может быть только тогда когда значение параметра &Номенклатура на самом деле является ссылкой документа.