Запись в независимый регистр сведений в подписке на событие

1. Raskad 10 07.11.18 15:20 Сейчас в теме
Здравстуйте.

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

НаборЗаписей = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Сотрудник.Установить(СтрокаТЗ.Сотрудник);
	НаборЗаписей.Прочитать();
	
	НаборЗаписей.Загрузить(ТаблицаНабора);
	НаборЗаписей.Записать();
По теме из базы знаний
Найденные решения
16. Raskad 10 13.11.18 17:00 Сейчас в теме
Нашел ответ на свой вопрос: этот документ при проведении двигает один из регистров, который имеет подписку на событие "ПриЗаписи". В этой подписке параллельно создается еще один набор записей уже моего регистра, фактически пустой и записывается. Удаляются движения из регистра. Получается мой набор записался, потом в другой подписке удалился.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 07.11.18 15:39 Сейчас в теме
(1) проверяйте в отладчике, что содержится в
СтрокаТЗ
в обработке подписки на событие
3. Boneman 298 07.11.18 15:48 Сейчас в теме
(1)
НаборЗаписей.Загрузить(ТаблицаНабора);

ну и что у вас в ТаблицеНабора находится ? откуда берется ?
4. Raskad 10 07.11.18 16:09 Сейчас в теме
	ОписаниеТипаДата = Новый ОписаниеТипов("Дата", , , , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));
	ОписаниеТипаСотрудник = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
	ОписаниеЧисловогоТипа = Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15,2));
	ОписаниеТипаВидОтпуска = Новый ОписаниеТипов("СправочникСсылка.ВидыОтпусков");
		
	ТаблицаНабора = Новый ТаблицаЗначений;
	ТаблицаНабора.Колонки.Добавить("Период", ОписаниеТипаДата);
	ТаблицаНабора.Колонки.Добавить("Сотрудник", ОписаниеТипаСотрудник);
	ТаблицаНабора.Колонки.Добавить("ВидЕжегодногоОтпуска", ОписаниеТипаВидОтпуска);
	ТаблицаНабора.Колонки.Добавить("КоличествоДней", ОписаниеЧисловогоТипа);
	ТаблицаНабора.Колонки.Добавить("ДатаНачала", ОписаниеТипаДата);
	ТаблицаНабора.Колонки.Добавить("ДатаОкончания", ОписаниеТипаДата);
	ТаблицаНабора.Колонки.Добавить("КоличествоДнейЗаПериод", ОписаниеЧисловогоТипа);
	
	СтрокаТаблицы = ТаблицаНабора.Добавить();
	СтрокаТаблицы.Период = '20170517';
	СтрокаТаблицы.Сотрудник = Сотрудник;
	СтрокаТаблицы.ВидЕжегодногоОтпуска = Справочники.ВидыОтпусков.Основной;
	СтрокаТаблицы.КоличествоДней = 0;
	СтрокаТаблицы.ДатаНачала = '20170502';
	СтрокаТаблицы.ДатаОкончания = '20180503';
	СтрокаТаблицы.КоличествоДнейЗаПериод = 0;
	
	НаборЗаписей = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник);
	НаборЗаписей.Прочитать();
	
	НаборЗаписей.Загрузить(ТаблицаНабора);
	НаборЗаписей.Записать();
Показать


Переменная "Сотрудник" содержит ссылку на элемент справочника "Сотрудники", все как и должно быть. Повторюсь, та же шляпа работает в обычной внешней обработке и регистр заполняет. Код для примера сделан.
5. spacecraft 07.11.18 16:21 Сейчас в теме
(4) и что в отладчике в подписке показывает? Особенно "Сотрудник".
Как получаете Сотрудник? Получение в подписке отличается от обработки.
6. Raskad 10 07.11.18 16:23 Сейчас в теме
(5) Чем же оно отличается?
Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович");


Ссылка найдена. Повторюсь - код для примера. Просто проверить будет ли тоже самое, что написано во внешней обработке работать в общем модуле подписки на событие.
7. Raskad 10 09.11.18 12:30 Сейчас в теме
Ну что, никто не пробовал?
8. alex-l19041 8 09.11.18 16:43 Сейчас в теме
(7) в похожем случае сделал

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

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


работает...
9. Raskad 10 09.11.18 17:02 Сейчас в теме
(8) в подписке не работает
10. alex-l19041 8 09.11.18 17:26 Сейчас в теме
11. Raskad 10 09.11.18 17:37 Сейчас в теме
(10) нет ошибки. Регистр пустой.

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

Вставьте Сообщение("Начинаем событие ;-) ");
13. Raskad 10 09.11.18 17:56 Сейчас в теме
Выполняется, я же отладчиком прохожу его. Создал эксперимент - скопировал регистр, ничего в нем не меняя, кроме имени. Попробовал записать в него - запись прошла! Куда копать? Модуль менеджера - пустой, модуль набора записей - пустой. Конечно, он участвует в других подписках, но....это же бред. Прошелся по пути, который следует после "Записать()", нигде нет "Отказ=истина".
14. SlavaKron 09.11.18 21:14 Сейчас в теме
(13) Проведение может отмениться не только при "Отказ=истина". Само то проведение происходит? Возможно в одной из последующих подписок происходит отмена транзакции. И да, читать набор записей не обязательно.
15. Raskad 10 12.11.18 09:17 Сейчас в теме
Само проведение происходит.
16. Raskad 10 13.11.18 17:00 Сейчас в теме
Нашел ответ на свой вопрос: этот документ при проведении двигает один из регистров, который имеет подписку на событие "ПриЗаписи". В этой подписке параллельно создается еще один набор записей уже моего регистра, фактически пустой и записывается. Удаляются движения из регистра. Получается мой набор записался, потом в другой подписке удалился.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот