Имя: Пароль:
1C
1С v8
Запись с такими ключевыми полями существует
0 atlantika
 
27.03.23
15:52
Помогите исправить. Плохо в теме разбираюсь и наверняка ошибка тупая, но  прочитанные темы мне не дали ответа.

Нетиповой документ при наступлении определенных условий, делает движение в независимый нетиповой РС:

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

    // Записать набор записей с замещением старого, соответствующего той же грануле
    НаборЗаписей.Записать(Истина);
    
КонецПроцедуры

только в половине случаев ошибка

Ошибка при вызове метода контекста (Записать)
{Документ.АБ_ЛистСогласования.Форма.ФормаДокументаНов.Форма(3382)}:НаборЗаписей.Записать(Истина);
....


по причине:
Запись с такими ключевыми полями существует! : <ИмяРС>: <Номенклатура>, <Склад>, 1 (Регистр сведений: (АБ) Листы согласования себестоимость; Номер строки: 2)

Как поправить?
1 atlantika
 
27.03.23
15:54
по причине:
Запись с такими ключевыми полями существует! : <ИмяРС>: <Номенклатура>, <Склад>, <Строка>(Регистр сведений: (АБ) Листы согласования себестоимость; Номер строки: 2)
При этом в ТЧ по которой делается обход всего 1 строка и цикл обходит ее только один раз. Откуда номер строки 2?
2 Garykom
 
27.03.23
15:58
Проблема не в номере строки
А в полном совпадении измерений другого документа

Добавьте в свой нетиповой РС еще одно измерение "Документ" и пишите туда Регистратора
3 Garykom
 
27.03.23
15:59
(1) >Откуда номер строки 2?
Из ранее проведенного документа
4 Garykom
 
27.03.23
16:00
(0) И да.
Что за конфа то?
Вижу что движения делаются вручную а не как в современных типовых через запрос и таблицу движений.
5 atlantika
 
27.03.23
16:01
(2) а то что отбор по регистратору уже устанавливается, этого не достаточно, да?
    НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);  
(4) УТ 11.5, доработки поверху
6 Ногаминебить
 
27.03.23
16:02
Ну или периодическим регистр сделать. С периодом регистратор.
7 Garykom
 
27.03.23
16:02
8 Garykom
 
27.03.23
16:02
(6) Нафуя делать его периодическим?
9 Garykom
 
27.03.23
16:03
(5) Регистратор это не измерение
10 Ногаминебить
 
27.03.23
16:04
(8) Ну мало ли :) Кто ж их знает какие там цели. Очень даже может быть, что как раз понадобится смотреть историю.
11 Garykom
 
27.03.23
16:04
(7)+ Там разобраться с нуля сложно
Но как разберетесь все становится вполне логично и понятно
12 Garykom
 
27.03.23
16:06
(10) Проще свое поле типа Дата добавить
Периодическим надо делать РС в очень редких случаях
Когда требуется специфическое поведение по умолчанию, для получения промежуточных значений = последнее установленное
13 Garykom
 
27.03.23
16:07
(10) Кстати как раз историю смотреть с периодического РС не очень то удобно ))
И неудобно когда надо развернуть таблицу
14 Garykom
 
27.03.23
16:08
(13)+ Например когда некая запись должна действовать только С ... По
То логичней вместо периодического сделать два поля ДатаНачала и ДатаОкончания
15 atlantika
 
27.03.23
16:10
то есть как "горячее" решение мне надо добавить Измерение регистратор?

и еще вопрос: даже если такая запись уже существует, то разве моя новая запись не должна ее перезаписать поверху?
НаборЗаписей.Записать(Истина);
это же вроде режим перезаписи?
17 Garykom
 
27.03.23
16:12
(15) да, это самое простое решение
если же надо запрещать проведение при совпадении измерений
то делайте вместо документа нечто свое

но так чтобы у разных правильных документов хотя бы чем то измерения отличались
19 Serg_1960
 
27.03.23
16:15
(16) Напоминаю: правило №1 "Не ругайтесь и не оскорбляйте других."
20 atlantika
 
27.03.23
16:20
(17) Большое спасибо за подсказки и ссылки.
21 Garykom
 
27.03.23
16:24
Хорошо что у вас УТ11 а не КА/ERP
Там еще и проводки таким же способом через запросы

Доработка проведения в ERP 2.5 (регистр бухгалтерии Хозрасчетный)
https://infostart.ru/1c/articles/1427044/
22 Serg_1960
 
27.03.23
16:34
Непринципиально, но: если изменения в регистр сведений вносятся с помощью документов, а в записях регистра есть специальное поле "Регистратор", которое указывает на это самый документ - то это "признаки" регистра сведений, подчинённого регистратору. Вы или сделайте подчинение регистратору, или не используйте "Регистратор", а то Вы уже сами запутались: "НаборЗаписей.Отбор.Регистратор.Установить(ВыбранныйРегистратор)", как правило, используют для регистра сведений, подчиненного регистратору.
23 Serg_1960
 
27.03.23
16:37
PS: желательно было бы структуру регистра озвучивать в первом посте, иначе ветка для телепатов форума:)
24 Garykom
 
27.03.23
17:11
(22) Регистратор <> Измерение