Как изменять записи в регистре сведений?
Здравствуйте. Жестко туплю. Такая ситуация: на форму видов расчета в плане видов расчета Начисления добавил несколько реквизитов с перечислениями. Эти реквизиты формы, которые после того как были выбраны какие-то элементы перечисления (скрин приложил), записываются в созданный мной регистр сведений Соответствие. Так как это реквизиты формы то при открытии этой формы эти реквизиты пустые. Поэтому в обработчике события ПриОткрытии я прочитываю регистр сведений и заполняю реквизиты формы. Ок.
Но если я хочу изменить или добавить что-то в вид начисления, у которого уже есть данные прочитанные из регистра сведений (скрин приложил), то у меня выходит ошибка "Запись с такими ключевыми полями существует".
В выше приведенном коде я создаю записи в РС. А если они уже есть и кокретную запись нужно изменить я не могу сообразить как сделать это сделать.
Но если я хочу изменить или добавить что-то в вид начисления, у которого уже есть данные прочитанные из регистра сведений (скрин приложил), то у меня выходит ошибка "Запись с такими ключевыми полями существует".
Вот код: |
---|
НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();
Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Соответ_Начисления = Объект.Ссылка;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеПФ) Тогда
НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеСПБ) Тогда
НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблогаетсяОМС) Тогда
НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
КонецЕсли;
НаборЗаписей.Записать();
КонецЕсли;
Показать |
В выше приведенном коде я создаю записи в РС. А если они уже есть и кокретную запись нужно изменить я не могу сообразить как сделать это сделать.
Прикрепленные файлы:
![](/upload/forum/upload/857/857411faa7b5005a358174812e6e1088.jpg)
![](/upload/forum/upload/b6b/b6bd2d2502d62c42be1345415fa8dceb.jpg)
По теме из базы знаний
Найденные решения
(10)По-моему здесь бы хватило:
НаборЗаписей.Отбор.Соответ_Начисления.Установить(Объект.Ссылка);
Запись = НаборЗаписей.Добавить();
Запись.Соответ_Начисления = Объект.Ссылка;
Запись .ОснованиеПФ = ОснованияНеОблагаемыеПФ;
Запись .ОснованиеСПБ = ОснованияНеОблагаемыеСПБ;
Запись .ОснованиеОМС = ОснованияНеОблогаетсяОМС;
НаборЗаписей.Записать();
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Я забыл дописать, что прочитал данные. Но ошибка таже самая если в Записать передать Ложь. Если Истина то данные записываются не все, а последнее выбранное перечисление.
Код |
---|
НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();
Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() Тогда
Для Каждого Запись Из НаборЗаписей Цикл
Если Запись.Соответ_Начисления = Объект.Ссылка Тогда
Запись.Соответ_Начисления = Объект.Ссылка;
Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
КонецЕсли;
КонецЦикла;
НаборЗаписей.Записать(Ложь);
Возврат;
КонецЕсли;
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Соответ_Начисления = Объект.Ссылка;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеПФ) Тогда
НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеСПБ) Тогда
НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблогаетсяОМС) Тогда
НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
КонецЕсли;
НаборЗаписей.Записать();
КонецЕсли;
Показать |
(3)
Это в корне не правильно.
Прочитали все записи из регистра. У всех записей заменили значение измерения и ресурсов. И пытаетесь записать в режиме не заменять, а добавить.
Вот сколько записей было в РС, столько раз пытаетесь добавить одинаковых записей.
Измерение в РС одно?
Выше указа, что нужно указать отбор по нему. Прочитать. Добавить одну запись с нужными значениями и соответствующим отбору. Записать.
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() Тогда
Для Каждого Запись Из НаборЗаписей Цикл
Запись.Соответ_Начисления = Объект.Ссылка;
Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
КонецЦикла;
НаборЗаписей.Записать(Ложь);
Если НаборЗаписей.Количество() Тогда
Для Каждого Запись Из НаборЗаписей Цикл
Запись.Соответ_Начисления = Объект.Ссылка;
Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
КонецЦикла;
НаборЗаписей.Записать(Ложь);
Это в корне не правильно.
Прочитали все записи из регистра. У всех записей заменили значение измерения и ресурсов. И пытаетесь записать в режиме не заменять, а добавить.
Вот сколько записей было в РС, столько раз пытаетесь добавить одинаковых записей.
Измерение в РС одно?
Выше указа, что нужно указать отбор по нему. Прочитать. Добавить одну запись с нужными значениями и соответствующим отбору. Записать.
(4) Так и есть. Исправил. Теперь только по конкретной записи. Но ошибка таже самая "Запись с такими ключевыми полями существует" если в Записать передать Ложь. Если Истина то данные записываются не все, а последнее выбранное перечисление.
Код |
---|
НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();
Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() Тогда
Для Каждого Запись Из НаборЗаписей Цикл
Если Запись.Соответ_Начисления = Объект.Ссылка Тогда
Запись.Соответ_Начисления = Объект.Ссылка;
Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
КонецЕсли;
КонецЦикла;
НаборЗаписей.Записать(Ложь);
Возврат;
КонецЕсли;
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Соответ_Начисления = Объект.Ссылка;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеПФ) Тогда
НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеСПБ) Тогда
НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблогаетсяОМС) Тогда
НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
КонецЕсли;
НаборЗаписей.Записать();
КонецЕсли; Показать |
Переписал код. Но теперь ругается, что поле объекта не обнаружено в отборе (Соответ_Начисления):
Код |
---|
НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();
Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда
НаборЗаписей.Отбор.Соответ_Начисления.Установить(РегистрыСведений.Расш_2_Соответствие.Соответ_Начисления);
НаборЗаписей.Прочитать();
МенеджерЗаписи = РегистрыСведений.Расш_2_Соответствие.СоздатьМенеджерЗаписи();
Для Каждого ТекЗапись Из НаборЗаписей Цикл
Если ТекЗапись.Соответ_Начисления = Объект.Ссылка Тогда
ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ТекЗапись);
МенеджерЗаписи.Прочитать();
МенеджерЗаписи.Соответ_Начисления = Объект.Ссылка;
МенеджерЗаписи.ОснованиеОМС = ЭтаФорма.ОснованияНеОблагаемыеПФ;
МенеджерЗаписи.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
МенеджерЗаписи.ОснованиеПФ = ЭтаФорма.ОснованияНеОблогаетсяОМС;
МенеджерЗаписи.Записать();
КонецЕсли;
Возврат;
КонецЦикла;
//////////////////////////////////////////////////
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Соответ_Начисления = Объект.Ссылка;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеПФ) Тогда
НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблагаемыеСПБ) Тогда
НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
КонецЕсли;
Если ЗначениеЗаполнено(ЭтаФорма.ОснованияНеОблогаетсяОМС) Тогда
НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
КонецЕсли;
НаборЗаписей.Записать(Ложь);
КонецЕсли; Показать |
(9) А в какую сторону копать? Хочется знать в чем нужно восполнить пробелы.
PS
PS
Вот этот код заработал мне как было нужно: |
---|
НаборЗаписей = РегистрыСведений.Расш_2_Соответствие.СоздатьНаборЗаписей();
Если ЭтотОбъект.ОблагаетсяОМС = 0 ИЛИ ЭтотОбъект.ОблагаетсяПФ = 0 ИЛИ ЭтотОбъект.ОблагаетсяСПБ = 0 Тогда
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
Если Запись.Соответ_Начисления = Объект.Ссылка Тогда
Запись.Соответ_Начисления = Объект.Ссылка;
Запись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
Запись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
Запись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
НаборЗаписей.Записать();
Возврат;
КонецЕсли;
КонецЦикла;
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Соответ_Начисления = Объект.Ссылка;
НоваяЗапись.ОснованиеПФ = ЭтаФорма.ОснованияНеОблагаемыеПФ;
НоваяЗапись.ОснованиеСПБ = ЭтаФорма.ОснованияНеОблагаемыеСПБ;
НоваяЗапись.ОснованиеОМС = ЭтаФорма.ОснованияНеОблогаетсяОМС;
НаборЗаписей.Записать();
КонецЕсли;
Показать |
(10)По-моему здесь бы хватило:
НаборЗаписей.Отбор.Соответ_Начисления.Установить(Объект.Ссылка);
Запись = НаборЗаписей.Добавить();
Запись.Соответ_Начисления = Объект.Ссылка;
Запись .ОснованиеПФ = ОснованияНеОблагаемыеПФ;
Запись .ОснованиеСПБ = ОснованияНеОблагаемыеСПБ;
Запись .ОснованиеОМС = ОснованияНеОблогаетсяОМС;
НаборЗаписей.Записать();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот