Не сохраняет запись в регистр сведений при записи элемента справочника

1. shaganel 12.05.21 09:42 Сейчас в теме
Всем добрый день!
Есть задача в БП 3.0 - при программной записи элемента справочника Способы отражения зарплаты в бухучете формировать записи в регистр сведений Порядок отражения зарплаты в бухучете. Наименование способа отражения раскладывается на составляющие и заполняет ресурсы регистра сведений.

Идеально делать после записи, но из модуля объекта или подписки на событие к ПослеЗаписи справочника не подобраться. Делаю ПриЗаписи. Через СоздатьНаборЗаписей или через СоздатьМенеджерЗаписи в отладчике вижу, что регистр заполнен, ошибок нет, в журнале транзакций транзакция зафиксирована, но запись в регистре не появляется.
Если перезаписать уже сохраненный объект, то запись в регистр попадает.

Где искать проблему?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. SlavaKron 12.05.21 10:08 Сейчас в теме
(1) Покажите код, который записывает набор записей? В подходе ошибок не вижу.
8. shaganel 12.05.21 10:21 Сейчас в теме
(5)
       	Наим = СокрЛП(Наименование);
	Если лев(Наим, 5) = "08.03" тогда
		НаборЗаписей = РегистрыСведений.ПорядокОтраженияЗарплатыВБухУчете.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.СпособОтраженияЗарплатыВБухУчете.Установить(Ссылка);  
		НаборЗаписей.Отбор.ЕНВД.Установить(Ложь);
		НаборЗаписей.Записывать = Истина;
		НоваяЗапись = НаборЗаписей.Добавить();
		НоваяЗапись.Счет = ПланыСчетов.Хозрасчетный.СтроительствоОбъектовОсновныхСредств;
		НоваяЗапись.СпособОтраженияЗарплатыВБухУчете = Ссылка;
		НоваяЗапись.ЕНВД = ложь;

		НаборЗаписей.Записать();
		
	КонецЕсли;
Показать
11. sv_baranov 6 12.05.21 10:43 Сейчас в теме
(8) Ради интереса вставил Ваш код и записал элемент справочника. Все сработало. Правда убрал условие и безусловно сделал. Проблема не в наборах записей. Проблема скорее всего либо в Наименовании (сокрлп и т.д. может запятая или что еще) или в отображении регистра. Как вы смотрите запись в регистре? Может ее просто не видно и надо обновить форму?
Прикрепленные файлы:
12. knuck 4 12.05.21 10:48 Сейчас в теме
(11) Согласен с вышесказанным, скорее всего дело с условием по наименованию, в остальном ошибок нет.
13. shaganel 12.05.21 11:01 Сейчас в теме
(11) Я же в отладчике вижу, что заходит в эту часть кода и данные в регистре заполняются... Вы перезаписывали старый или создавали новый? Я смотрю сразу в списке справочника и в самом регистре - при записи нового элемента пусто, при перезаписи имеющегося данные появляются. Попробую еще на файловой базе.
14. sv_baranov 6 12.05.21 11:07 Сейчас в теме
(13)
Вы перезаписывали старый или создавали новый?

Создавал новый.


(13)
Я смотрю сразу в списке справочника

Это как? Можно скрин?
15. shaganel 12.05.21 11:18 Сейчас в теме
(14)В форму списка выводятся данные из регистра.
На скрине верхний элемент - после записи нового, вторая строка - перезапись созданного.
Прикрепленные файлы:
16. sv_baranov 6 12.05.21 11:27 Сейчас в теме
(15) А мне всегда казалось, что в форму списка СПРАВОЧНИКА выводятся элементы СПРАВОЧНИКА. Нет? В общем у Вас вопрос не в регистре. При создании элемента не записываются данные в элемент справочника. Копать туда.

Вот запрос динамического списка:
ВЫБРАТЬ
	СправочникСпособыОтраженияЗарплатыВБухУчете.Ссылка КАК Ссылка,
	СправочникСпособыОтраженияЗарплатыВБухУчете.ВерсияДанных КАК ВерсияДанных,
	СправочникСпособыОтраженияЗарплатыВБухУчете.ПометкаУдаления КАК ПометкаУдаления,
	СправочникСпособыОтраженияЗарплатыВБухУчете.Предопределенный КАК Предопределенный,
	СправочникСпособыОтраженияЗарплатыВБухУчете.Наименование КАК Наименование,
	СправочникСпособыОтраженияЗарплатыВБухУчете.ВидДеятельностиДляНалоговогоУчетаЗатрат КАК ВидДеятельностиДляНалоговогоУчетаЗатрат,
	ЕСТЬNULL(ПорядокОтраженияЗарплатыВБухУчете.Счет, ПорядокОтраженияЗарплатыВБухУчетеЕНВД.Счет) КАК Счет,
	ЕСТЬNULL(ПорядокОтраженияЗарплатыВБухУчете.Субконто1, ПорядокОтраженияЗарплатыВБухУчетеЕНВД.Субконто1) КАК Субконто1,
	ЕСТЬNULL(ПорядокОтраженияЗарплатыВБухУчете.Субконто2, ПорядокОтраженияЗарплатыВБухУчетеЕНВД.Субконто2) КАК Субконто2,
	ЕСТЬNULL(ПорядокОтраженияЗарплатыВБухУчете.Субконто3, ПорядокОтраженияЗарплатыВБухУчетеЕНВД.Субконто3) КАК Субконто3,
	СправочникСпособыОтраженияЗарплатыВБухУчете.Родитель КАК Родитель,
	СправочникСпособыОтраженияЗарплатыВБухУчете.ЭтоГруппа КАК ЭтоГруппа
ИЗ
	Справочник.СпособыОтраженияЗарплатыВБухУчете КАК СправочникСпособыОтраженияЗарплатыВБухУчете
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПорядокОтраженияЗарплатыВБухУчете КАК ПорядокОтраженияЗарплатыВБухУчете
		ПО СправочникСпособыОтраженияЗарплатыВБухУчете.Ссылка = ПорядокОтраженияЗарплатыВБухУчете.СпособОтраженияЗарплатыВБухУчете
			И (НЕ ПорядокОтраженияЗарплатыВБухУчете.ЕНВД)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПорядокОтраженияЗарплатыВБухУчете КАК ПорядокОтраженияЗарплатыВБухУчетеЕНВД
		ПО СправочникСпособыОтраженияЗарплатыВБухУчете.Ссылка = ПорядокОтраженияЗарплатыВБухУчетеЕНВД.СпособОтраженияЗарплатыВБухУчете
			И (ПорядокОтраженияЗарплатыВБухУчетеЕНВД.ЕНВД)
Показать
Прикрепленные файлы:
17. shaganel 12.05.21 11:31 Сейчас в теме
(16)Эммм, вообще то нет) Форма списка в УФ это намного больше, чем просто список элементов...
Прикрепленные файлы:
18. shaganel 12.05.21 11:42 Сейчас в теме
(16) В колонке Наименование выводятся данные из самого справочника, они есть, в колонке Счет данные из регистра, они пустые.
19. Sashares 34 12.05.21 11:44 Сейчас в теме
(18)F5 пробовали нажимать в форме списка?)
21. shaganel 12.05.21 11:50 Сейчас в теме
20. sv_baranov 6 12.05.21 11:47 Сейчас в теме
(18) Да, он подтягивает из регистра, не досмотрел.
Но копать нужно все же в форме элемента справочника. Он там обрабатывает запись нового элемента и, возможно, там же удаляет вашу запись в регистре.
На вскидку нашел вот это:

&НаСервере
Процедура ЗаписатьЗаписьПослеРедактированияВФорме(Форма, ВедущийОбъект, ДанныеМодифицированы = Ложь)
	
	Если Форма.Модифицированность Тогда
	
		Форма.ПорядокОтраженияВБухУчете.ЕНВД = Ложь;
		Форма.ПорядокОтраженияВБухУчете.СпособОтраженияЗарплатыВБухУчете = ВедущийОбъект.Ссылка;
		МенеджерЗаписи = Форма.РеквизитФормыВЗначение("ПорядокОтраженияВБухУчете");
		Если НЕ ЗначениеЗаполнено(МенеджерЗаписи.Счет)
			ИЛИ ВедущийОбъект.ВидДеятельностиДляНалоговогоУчетаЗатрат = Перечисления.ВидыДеятельностиДляНалоговогоУчетаЗатрат.ОсобыйПорядокНалогообложения Тогда
			МенеджерЗаписи.Удалить();
		Иначе
			МенеджерЗаписи.Записать();
		КонецЕсли;
Показать


		Форма.ПорядокОтраженияВБухУчетеЕНВД.ОтражениеВУСН = Перечисления.ОтражениеВУСН.НеПринимаются;
		Форма.ПорядокОтраженияВБухУчетеЕНВД.ЕНВД = Истина;
		Форма.ПорядокОтраженияВБухУчетеЕНВД.СпособОтраженияЗарплатыВБухУчете = ВедущийОбъект.Ссылка;
		МенеджерЗаписи = Форма.РеквизитФормыВЗначение("ПорядокОтраженияВБухУчетеЕНВД");
		Если НЕ ЗначениеЗаполнено(МенеджерЗаписи.Счет) ИЛИ НЕ (ПолучитьФункциональнуюОпцию("ИспользуетсяЕНВД") ИЛИ ПолучитьФункциональнуюОпцию("ИспользуетсяУСНПатент"))
			ИЛИ ВедущийОбъект.ВидДеятельностиДляНалоговогоУчетаЗатрат = Перечисления.ВидыДеятельностиДляНалоговогоУчетаЗатрат.ОсновнаяСистемаНалогообложения Тогда
			МенеджерЗаписи.Удалить();
		Иначе
			МенеджерЗаписи.Записать();
		КонецЕсли;
Показать
SlavaKron; +1 Ответить
22. shaganel 12.05.21 11:50 Сейчас в теме
(20)А у Вас все-таки заполнилось или просто сохранился элемент справочника?
23. sv_baranov 6 12.05.21 11:52 Сейчас в теме
(22) Заполнилось сразу. Может у вас стоит Патент или где-то еще осталось использовать ЕНВД? Тогда он в проведении удаляет запись. Но странно, при повторной перезаписи она появляется, значит не в этом проблема. Вы когда записываете новый элемент счет выбираете?

Кстати я не нашел процедуру ПриЗаписи в модуле объекта справочника. Я ее создавал. Вы ее тоже создавали?
25. shaganel 12.05.21 11:57 Сейчас в теме
(23)Вручную нет, нужно было программное заполнение без привязки к форме.
24. shaganel 12.05.21 11:56 Сейчас в теме
(20)Сделала обработку для программного сохранения, сработало. Через форму некорректно проверять.
Спасибо, что навели на мысль!
26. sv_baranov 6 12.05.21 11:58 Сейчас в теме
(24)
Сделала обработку для программного сохранения, сработало. Через форму некорректно проверять.
Спасибо, что навели на мысль!


Я вообще через расширение делал. Рад что помог.
2. sv_baranov 6 12.05.21 10:01 Сейчас в теме
Я могу ошибаться, но мне кажется вот что.
В регистр передается ссылка на объект (элемент справочника)? Или на какой-либо реквизит элемента? Если да, то получается что вы передаете ссылку на еще не существующий объект, т.к. запись происходит в конце ПриЗаписи. Попробуйте все же подобраться в ПослеЗаписи.
6. FatPanzer 12.05.21 10:10 Сейчас в теме
(2) ПриЗаписи ссылка уже существует.
7. sv_baranov 6 12.05.21 10:19 Сейчас в теме
(6) Да, сорри, действительно существует. Может ошибка из-за транзакции в транзакции? Создание элемента - транзакция, создание набора записей регистра - транзакция. Блокировки?
9. shaganel 12.05.21 10:22 Сейчас в теме
(7)По журналу регистрации запись элемента справочника идет раньше транзакции по записи регистра сведений.
3. ls600 12.05.21 10:01 Сейчас в теме
Записывать объект два раза)). Конечно не вариант, и все же программно за пилить можно.
4. ls600 12.05.21 10:02 Сейчас в теме
Обработчики событий при записи объектов
https://helpf.pro/faq/view/1283.html
Интересная статья, может поможет.
10. shaganel 12.05.21 10:23 Сейчас в теме
Оставьте свое сообщение

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