Запись в независимый регистр сведений в подписке на событие
Здравстуйте.
Есть подписка на событие "обработка проведения" некоего документа. Там размещен код заполняющий и записывающий набор записей независимого регистра сведений. Код не работает, набор записей пустой. Есть обработка выполняющая с успехом этот же код, т.е. набор записей записывается. Никаких отказ=истина в подписке не устанавливается. Права есть. Why?
Есть подписка на событие "обработка проведения" некоего документа. Там размещен код заполняющий и записывающий набор записей независимого регистра сведений. Код не работает, набор записей пустой. Есть обработка выполняющая с успехом этот же код, т.е. набор записей записывается. Никаких отказ=истина в подписке не устанавливается. Права есть. Why?
НаборЗаписей = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(СтрокаТЗ.Сотрудник);
НаборЗаписей.Прочитать();
НаборЗаписей.Загрузить(ТаблицаНабора);
НаборЗаписей.Записать();
По теме из базы знаний
- Метод формирования движений в типовых регистрах нетиповыми регистраторами
- Версионирование регистров сведений
- Обсудим планы обмена. Способы регистрации объектов к обмену
- Подключение подсистемы исправления документов и регистров в конфигурации ЗУП 3.1
- Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия
Найденные решения
Нашел ответ на свой вопрос: этот документ при проведении двигает один из регистров, который имеет подписку на событие "ПриЗаписи". В этой подписке параллельно создается еще один набор записей уже моего регистра, фактически пустой и записывается. Удаляются движения из регистра. Получается мой набор записался, потом в другой подписке удалился.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ОписаниеТипаДата = Новый ОписаниеТипов("Дата", , , , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));
ОписаниеТипаСотрудник = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
ОписаниеЧисловогоТипа = Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(15,2));
ОписаниеТипаВидОтпуска = Новый ОписаниеТипов("СправочникСсылка.ВидыОтпусков");
ТаблицаНабора = Новый ТаблицаЗначений;
ТаблицаНабора.Колонки.Добавить("Период", ОписаниеТипаДата);
ТаблицаНабора.Колонки.Добавить("Сотрудник", ОписаниеТипаСотрудник);
ТаблицаНабора.Колонки.Добавить("ВидЕжегодногоОтпуска", ОписаниеТипаВидОтпуска);
ТаблицаНабора.Колонки.Добавить("КоличествоДней", ОписаниеЧисловогоТипа);
ТаблицаНабора.Колонки.Добавить("ДатаНачала", ОписаниеТипаДата);
ТаблицаНабора.Колонки.Добавить("ДатаОкончания", ОписаниеТипаДата);
ТаблицаНабора.Колонки.Добавить("КоличествоДнейЗаПериод", ОписаниеЧисловогоТипа);
СтрокаТаблицы = ТаблицаНабора.Добавить();
СтрокаТаблицы.Период = '20170517';
СтрокаТаблицы.Сотрудник = Сотрудник;
СтрокаТаблицы.ВидЕжегодногоОтпуска = Справочники.ВидыОтпусков.Основной;
СтрокаТаблицы.КоличествоДней = 0;
СтрокаТаблицы.ДатаНачала = '20170502';
СтрокаТаблицы.ДатаОкончания = '20180503';
СтрокаТаблицы.КоличествоДнейЗаПериод = 0;
НаборЗаписей = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(Сотрудник);
НаборЗаписей.Прочитать();
НаборЗаписей.Загрузить(ТаблицаНабора);
НаборЗаписей.Записать();
ПоказатьПеременная "Сотрудник" содержит ссылку на элемент справочника "Сотрудники", все как и должно быть. Повторюсь, та же шляпа работает в обычной внешней обработке и регистр заполняет. Код для примера сделан.
(5) Чем же оно отличается?
Ссылка найдена. Повторюсь - код для примера. Просто проверить будет ли тоже самое, что написано во внешней обработке работать в общем модуле подписки на событие.
Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович");
Ссылка найдена. Повторюсь - код для примера. Просто проверить будет ли тоже самое, что написано во внешней обработке работать в общем модуле подписки на событие.
(7) в похожем случае сделал
работает...
ЗаписьРег = РегистрыСведений.ПоложенныеЕжегодныеОтпускаРаботников.СоздатьМенеджерЗаписи();
ЗаписьРег.Период = ДобавитьМесяц(текдата, 12);
ЗаписьРег.Организация = ТекОрганизация;
ЗаписьРег.Сотрудник = ТекСотрудник;
ЗаписьРег.Положено = 0;
ЗаписьРег.ВидОтпуска = Справочники.ВидыОтпусков.ЕжегодныйОсновной;
Попытка
ЗаписьРег.Записать();
Исключение
Сообщить("Ошибка записи в регистр Положенные ежегодные отпуска работников");
КонецПопытки;
Показатьработает...
(10) нет ошибки. Регистр пустой.
ЗаписьРег = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьМенеджерЗаписи();
ЗаписьРег.Период = ТекущаяДата();
ЗаписьРег.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Мацкевич Мария Алексеевна");
ЗаписьРег.ВидЕжегодногоОтпуска = Справочники.ВидыОтпусков.Основной;
ЗаписьРег.КоличествоДней = 5;
Попытка
ЗаписьРег.Записать();
Исключение
Сообщить("Ошибка записи в регистр Положенные ежегодные отпуска работников");
КонецПопытки;
Показать
Если у вас в обработке код работает, а в другом месте нет - отличие - а может до выполнения вообще не доходит...
Вы уверены что код вообще выполняется при подписке на событие ?
Перед
ЗаписьРег = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьМенеджерЗаписи();
Вставьте Сообщение("Начинаем событие ;-) ");
Вы уверены что код вообще выполняется при подписке на событие ?
Перед
ЗаписьРег = РегистрыСведений.ЗаработанныеПраваНаОтпуска.СоздатьМенеджерЗаписи();
Вставьте Сообщение("Начинаем событие ;-) ");
Выполняется, я же отладчиком прохожу его. Создал эксперимент - скопировал регистр, ничего в нем не меняя, кроме имени. Попробовал записать в него - запись прошла! Куда копать? Модуль менеджера - пустой, модуль набора записей - пустой. Конечно, он участвует в других подписках, но....это же бред. Прошелся по пути, который следует после "Записать()", нигде нет "Отказ=истина".
Нашел ответ на свой вопрос: этот документ при проведении двигает один из регистров, который имеет подписку на событие "ПриЗаписи". В этой подписке параллельно создается еще один набор записей уже моего регистра, фактически пустой и записывается. Удаляются движения из регистра. Получается мой набор записался, потом в другой подписке удалился.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот