Есть документ с табличной частью Номенклатура,СерииНоменклатуры,Установить( тип Булево),Количество.

Надо,чтобы при проведении документа,если стоит галочка в Установить, то в справочнике СерииНоменклатуры на форме элемента у соответствующей серии Ставилась эта галочка тоже в Истина.

Как это реализовать ? или может поделитесь ссылкой с примером.

В правильном ли направлении думаю?:

```1c
    Процедура ПослеЗаписи
    Серии = Справочники.СерииНоменклатуры.ПустаяСсылка();
    НовСтр = ЭтотОбъект.ТЧ.Добавить();
    Если НовСтр.Установить = Истина Тогда
    Упс = Серии.ПолучитьОбъект();
    Упс.ТребуетсяДооформление = Истина;
    Упс.Записать(РежимЗаписиДокумента.Запись);

    КонецЕсли;
    КонецПроцедуры;
```

Что использовать вместое РежимЗаписиДокумента. Надо запись справочника.
---
Странная задача. Но если её всё-таки нужно решить, то я механизм вижу примерно так:

```1c
    Процедура ПослеЗаписи()

    Для каждого строка из Объект.ТабЧастьТовары цикл
    СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект(); // получили элемент справочника
    Если строка.Установить тогда
    СерияОбъект.ТребуетсяДооформление = истина;
    // необходимо оставить информацию о том, что именно этот документ
    // изменил реквизит (для отмены проведения), либо придумайте свой реквизит для механизма:
    СерияОбъект.Комментарий = "ИзмененДокументом № " + Строка(Объект.Номер);
    СерияОбъект.Записать(); // это справочник, никакой режим записи не нужен!
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры

    // Если при отмене проведения галку необходимо снимать
    Процедура ПриЗаписи() // возможно нужна другая процедура, тут нужно проверять

    Если РежимЗаписиДокумента.ОтменаПроведения тогда
    Для каждого строка из Объект.ТабЧастьТовары цикл
    СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект();
    Если строка.Установить тогда
    Коммент = СерияОбъект.Комментарий;
    // если элемент справочника изменён именно этим документом тогда убираем признак
    Если Прав(Коммент, СтрДлина(СерияОбъект.Комментарий) - 20) = Объект.Номер тогда
    СерияОбъект.ТребуетсяДооформление = ложь;
    СерияОбъект.Комментарий = "; // удалили признак изменения документом
    СерияОбъект.Записать();
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;

    КонецПроцедуры;
```
---
а при отмене проведения галку снимать?
---
Интересный момент,уточню уже только завтра у пользователя.
---
все это похоже на попытку использовать справочник в виде регистра сведений, а может и оборотов
---
Надо,чтобы при проведении документа

```1c
    Процедура ПослеЗаписи
```

обработка проведения есть такая процедура? в ней и нужно делать всё
---
Хорошо,подскажите как это реализовать в обработчике проведения ?
---
Встречал подобную реализацию.
Особенно весело, если один и тот же элемент справочника есть в разных документах.
Взял пользователь и перепровел старый документ.
И справочник перезаписался по данным старого документа.
---
Остался пример и обход этого веселого случая?)
---
У данной реализации нет обхода.

При проведении документа записывались для справочника новые значения.
В ОбработкаУдаленияПроведения - возвращались старые.

Но это дичь.
---
Странная задача. Но если её всё-таки нужно решить, то я механизм вижу примерно так:

```1c
    Процедура ПослеЗаписи()

    Для каждого строка из Объект.ТабЧастьТовары цикл
    СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект(); // получили элемент справочника
    Если строка.Установить тогда
    СерияОбъект.ТребуетсяДооформление = истина;
    // необходимо оставить информацию о том, что именно этот документ
    // изменил реквизит (для отмены проведения), либо придумайте свой реквизит для механизма:
    СерияОбъект.Комментарий = "ИзмененДокументом № " + Строка(Объект.Номер);
    СерияОбъект.Записать(); // это справочник, никакой режим записи не нужен!
    КонецЕсли;
    КонецЦикла;

    КонецПроцедуры

    // Если при отмене проведения галку необходимо снимать
    Процедура ПриЗаписи() // возможно нужна другая процедура, тут нужно проверять

    Если РежимЗаписиДокумента.ОтменаПроведения тогда
    Для каждого строка из Объект.ТабЧастьТовары цикл
    СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект();
    Если строка.Установить тогда
    Коммент = СерияОбъект.Комментарий;
    // если элемент справочника изменён именно этим документом тогда убираем признак
    Если Прав(Коммент, СтрДлина(СерияОбъект.Комментарий) - 20) = Объект.Номер тогда
    СерияОбъект.ТребуетсяДооформление = ложь;
    СерияОбъект.Комментарий = "; // удалили признак изменения документом
    СерияОбъект.Записать();
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;

    КонецПроцедуры;
```
---
то есть даже если отменить проведение, то этот код выполнится. надо бы проверку проведения добавить
---
А разве не добавил строкой?

```1c
    Если РежимЗаписиДокумента.ОтменаПроведения тогда
```
---
где?
---
Поскольку процедура выбрана "ПослеЗаписи" - значит транзакция уже окончена и синхронизировать запись документа и справочника не имеет смысла.
Тогда имеет смысл синхронизировать установку это галки со всеми записями во всех документах такого вида,
то есть

```1c
    ВЫБРАТЬ
    ДокументВидТЧ.Ссылка КАК Ссылка
    ИЗ
    Документ.ДокументВид.ТабличнаяЧасть КАК ДокументВидТЧ
    ГДЕ
    ДокументВидТЧ.СерияНоменклатуры= &НужнаяМнеСерия
    И ДокументВидТЧ.Ссылка.Проведен = ИСТИНА
```

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

да и по уму, вообще не использовать при/после записи, а юзать ОбработкуПроведения, если уж совсем по поставленному условию все делать, ибо там в любом случае ТЧ будет каким то образом обходиться, смысл гонять циклы несколько раз по одной и той же ТЧ в разных событиях
---
Хорошо,подскажите как это реализовать в обработчике проведения ?
---
точно таким же образом, как предложили в (5), только подправить под имеющийся алгоритм обработки проведения
---
То что ПослеЗаписи это я решил. Так как у документа много разных форм. В модуле формы основной форы документа открывается определенная форма в зависимости от настройки.
---
А может быть одна и та же номенклатура с одинаковой серией в разных документах?
---
Да, решил выводить сообщение пользователю об этом.
---
В подобном случае я бы не подписался галочку в справочнике делать. Но если уж так хочется, то можно подпиской на событие проверить что там вообще с данной номенклатурой и сериями во всех документах и нарисовать "галочку" соответствующую действительности. Три варианта развития событий получается:
1. Все серии с "галочкой"
2. Все серии без "галочки"
3. Есть серии как с "галочкой" так и без.
---
тогда уж до кучи еще и ОтменаПроведения() юзать
---
Подписки на события юзать