Здравстуйте.

Есть подписка на событие "обработка проведения" некоего документа. Там размещен код заполняющий и записывающий набор записей независимого регистра сведений. Код не работает, набор записей пустой. Есть обработка выполняющая с успехом этот же код, т.е. набор записей записывается. Никаких отказ=истина в подписке не устанавливается. Права есть. Why?

```1c
    НаборЗаписей = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Сотрудник.Установить(СтрокаТЗ.Сотрудник);
    НаборЗаписей.Прочитать();

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

    ТаблицаНабора = Новый ТаблицаЗначений;
    ТаблицаНабора.Колонки.Добавить("Период", ОписаниеТипаДата);
    ТаблицаНабора.Колонки.Добавить("Сотрудник", ОписаниеТипаСотрудник);
    ТаблицаНабора.Колонки.Добавить("ВидЕжегодногоОтпуска", ОписаниеТипаВидОтпуска);
    ТаблицаНабора.Колонки.Добавить("КоличествоДней", ОписаниеЧисловогоТипа);
    ТаблицаНабора.Колонки.Добавить("ДатаНачала", ОписаниеТипаДата);
    ТаблицаНабора.Колонки.Добавить("ДатаОкончания", ОписаниеТипаДата);
    ТаблицаНабора.Колонки.Добавить("КоличествоДнейЗаПериод", ОписаниеЧисловогоТипа);

    СтрокаТаблицы = ТаблицаНабора.Добавить();
    СтрокаТаблицы.Период = '20170517';
    СтрокаТаблицы.Сотрудник = Сотрудник;
    СтрокаТаблицы.ВидЕжегодногоОтпуска = Справочники.ВидыОтпусков.Основной;
    СтрокаТаблицы.КоличествоДней = 0;
    СтрокаТаблицы.ДатаНачала = '20170502';
    СтрокаТаблицы.ДатаОкончания = '20180503';
    СтрокаТаблицы.КоличествоДнейЗаПериод = 0;

    НаборЗаписей = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник);
    НаборЗаписей.Прочитать();

    НаборЗаписей.Загрузить(ТаблицаНабора);
    НаборЗаписей.Записать();
```

Переменная "Сотрудник" содержит ссылку на элемент справочника "Сотрудники", все как и должно быть. Повторюсь, та же шляпа работает в обычной внешней обработке и регистр заполняет. Код для примера сделан.
---
и что в отладчике в подписке показывает? Особенно "Сотрудник".
Как получаете Сотрудник? Получение в подписке отличается от обработки.
---
Чем же оно отличается?

```1c
    Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович");
```

Ссылка найдена. Повторюсь - код для примера. Просто проверить будет ли тоже самое, что написано во внешней обработке работать в общем модуле подписки на событие.
---
Ну что, никто не пробовал?
---
в похожем случае сделал

```1c
    ЗаписьРег = РегистрыСведений.ПоложенныеЕжегодныеОтпускаРаботников.СоздатьМенеджерЗаписи();
    ЗаписьРег.Период = ДобавитьМесяц(текдата, 12);
    ЗаписьРег.Организация = ТекОрганизация;
    ЗаписьРег.Сотрудник = ТекСотрудник;
    ЗаписьРег.Положено = 0;
    ЗаписьРег.ВидОтпуска = Справочники.ВидыОтпусков.ЕжегодныйОсновной;
    Попытка

    ЗаписьРег.Записать();
    Исключение
    Сообщить("Ошибка записи в регистр Положенные ежегодные отпуска работников");
    КонецПопытки;
```

работает...
---
в подписке не работает
---
какая ошибка ?
---
нет ошибки. Регистр пустой.

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

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