Всем добрый день!
Есть задача в БП 3.0 - при программной записи элемента справочника Способы отражения зарплаты в бухучете формировать записи в регистр сведений Порядок отражения зарплаты в бухучете. Наименование способа отражения раскладывается на составляющие и заполняет ресурсы регистра сведений.
Идеально делать после записи, но из модуля объекта или подписки на событие к ПослеЗаписи справочника не подобраться. Делаю ПриЗаписи. Через СоздатьНаборЗаписей или через СоздатьМенеджерЗаписи в отладчике вижу, что регистр заполнен, ошибок нет, в журнале транзакций транзакция зафиксирована, но запись в регистре не появляется.
Если перезаписать уже сохраненный объект, то запись в регистр попадает.
(8) Ради интереса вставил Ваш код и записал элемент справочника. Все сработало. Правда убрал условие и безусловно сделал. Проблема не в наборах записей. Проблема скорее всего либо в Наименовании (сокрлп и т.д. может запятая или что еще) или в отображении регистра. Как вы смотрите запись в регистре? Может ее просто не видно и надо обновить форму?
(11) Я же в отладчике вижу, что заходит в эту часть кода и данные в регистре заполняются... Вы перезаписывали старый или создавали новый? Я смотрю сразу в списке справочника и в самом регистре - при записи нового элемента пусто, при перезаписи имеющегося данные появляются. Попробую еще на файловой базе.
(15) А мне всегда казалось, что в форму списка СПРАВОЧНИКА выводятся элементы СПРАВОЧНИКА. Нет? В общем у Вас вопрос не в регистре. При создании элемента не записываются данные в элемент справочника. Копать туда.
Вот запрос динамического списка:
ВЫБРАТЬ
СправочникСпособыОтраженияЗарплатыВБухУчете.Ссылка КАК Ссылка,
СправочникСпособыОтраженияЗарплатыВБухУчете.ВерсияДанных КАК ВерсияДанных,
СправочникСпособыОтраженияЗарплатыВБухУчете.ПометкаУдаления КАК ПометкаУдаления,
СправочникСпособыОтраженияЗарплатыВБухУчете.Предопределенный КАК Предопределенный,
СправочникСпособыОтраженияЗарплатыВБухУчете.Наименование КАК Наименование,
СправочникСпособыОтраженияЗарплатыВБухУчете.ВидДеятельностиДляНалоговогоУчетаЗатрат КАК ВидДеятельностиДляНалоговогоУчетаЗатрат,
ЕСТЬNULL(ПорядокОтраженияЗарплатыВБухУчете.Счет, ПорядокОтраженияЗарплатыВБухУчетеЕНВД.Счет) КАК Счет,
ЕСТЬNULL(ПорядокОтраженияЗарплатыВБухУчете.Субконто1, ПорядокОтраженияЗарплатыВБухУчетеЕНВД.Субконто1) КАК Субконто1,
ЕСТЬNULL(ПорядокОтраженияЗарплатыВБухУчете.Субконто2, ПорядокОтраженияЗарплатыВБухУчетеЕНВД.Субконто2) КАК Субконто2,
ЕСТЬNULL(ПорядокОтраженияЗарплатыВБухУчете.Субконто3, ПорядокОтраженияЗарплатыВБухУчетеЕНВД.Субконто3) КАК Субконто3,
СправочникСпособыОтраженияЗарплатыВБухУчете.Родитель КАК Родитель,
СправочникСпособыОтраженияЗарплатыВБухУчете.ЭтоГруппа КАК ЭтоГруппа
ИЗ
Справочник.СпособыОтраженияЗарплатыВБухУчете КАК СправочникСпособыОтраженияЗарплатыВБухУчете
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПорядокОтраженияЗарплатыВБухУчете КАК ПорядокОтраженияЗарплатыВБухУчете
ПО СправочникСпособыОтраженияЗарплатыВБухУчете.Ссылка = ПорядокОтраженияЗарплатыВБухУчете.СпособОтраженияЗарплатыВБухУчете
И (НЕ ПорядокОтраженияЗарплатыВБухУчете.ЕНВД)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПорядокОтраженияЗарплатыВБухУчете КАК ПорядокОтраженияЗарплатыВБухУчетеЕНВД
ПО СправочникСпособыОтраженияЗарплатыВБухУчете.Ссылка = ПорядокОтраженияЗарплатыВБухУчетеЕНВД.СпособОтраженияЗарплатыВБухУчете
И (ПорядокОтраженияЗарплатыВБухУчетеЕНВД.ЕНВД)
(18) Да, он подтягивает из регистра, не досмотрел.
Но копать нужно все же в форме элемента справочника. Он там обрабатывает запись нового элемента и, возможно, там же удаляет вашу запись в регистре.
На вскидку нашел вот это:
&НаСервере
Процедура ЗаписатьЗаписьПослеРедактированияВФорме(Форма, ВедущийОбъект, ДанныеМодифицированы = Ложь)
Если Форма.Модифицированность Тогда
Форма.ПорядокОтраженияВБухУчете.ЕНВД = Ложь;
Форма.ПорядокОтраженияВБухУчете.СпособОтраженияЗарплатыВБухУчете = ВедущийОбъект.Ссылка;
МенеджерЗаписи = Форма.РеквизитФормыВЗначение("ПорядокОтраженияВБухУчете");
Если НЕ ЗначениеЗаполнено(МенеджерЗаписи.Счет)
ИЛИ ВедущийОбъект.ВидДеятельностиДляНалоговогоУчетаЗатрат = Перечисления.ВидыДеятельностиДляНалоговогоУчетаЗатрат.ОсобыйПорядокНалогообложения Тогда
МенеджерЗаписи.Удалить();
Иначе
МенеджерЗаписи.Записать();
КонецЕсли;
Показать
Форма.ПорядокОтраженияВБухУчетеЕНВД.ОтражениеВУСН = Перечисления.ОтражениеВУСН.НеПринимаются;
Форма.ПорядокОтраженияВБухУчетеЕНВД.ЕНВД = Истина;
Форма.ПорядокОтраженияВБухУчетеЕНВД.СпособОтраженияЗарплатыВБухУчете = ВедущийОбъект.Ссылка;
МенеджерЗаписи = Форма.РеквизитФормыВЗначение("ПорядокОтраженияВБухУчетеЕНВД");
Если НЕ ЗначениеЗаполнено(МенеджерЗаписи.Счет) ИЛИ НЕ (ПолучитьФункциональнуюОпцию("ИспользуетсяЕНВД") ИЛИ ПолучитьФункциональнуюОпцию("ИспользуетсяУСНПатент"))
ИЛИ ВедущийОбъект.ВидДеятельностиДляНалоговогоУчетаЗатрат = Перечисления.ВидыДеятельностиДляНалоговогоУчетаЗатрат.ОсновнаяСистемаНалогообложения Тогда
МенеджерЗаписи.Удалить();
Иначе
МенеджерЗаписи.Записать();
КонецЕсли;
(22) Заполнилось сразу. Может у вас стоит Патент или где-то еще осталось использовать ЕНВД? Тогда он в проведении удаляет запись. Но странно, при повторной перезаписи она появляется, значит не в этом проблема. Вы когда записываете новый элемент счет выбираете?
Кстати я не нашел процедуру ПриЗаписи в модуле объекта справочника. Я ее создавал. Вы ее тоже создавали?
Я могу ошибаться, но мне кажется вот что.
В регистр передается ссылка на объект (элемент справочника)? Или на какой-либо реквизит элемента? Если да, то получается что вы передаете ссылку на еще не существующий объект, т.к. запись происходит в конце ПриЗаписи. Попробуйте все же подобраться в ПослеЗаписи.
(6) Да, сорри, действительно существует. Может ошибка из-за транзакции в транзакции? Создание элемента - транзакция, создание набора записей регистра - транзакция. Блокировки?