|
Не могу записать в регистр сведений - значение поля не соответствует отбору |
☑ |
0
Max1986
10.05.12
✎
16:24
|
Прошу помочь - подскажите в чем дело - никак не могу записать в обsчный регистр сведений.
Итак. есть РС непериодический СвязьДоговоровСоСтатьямиЗатрат.
В нем есть Измерение договор, ресурс - Статья затрат.
Есть некая таблицы заначений заполненная из запроса договором и статьей затрат.Я пытаюсь ее записать.
Но! Первую строку пишет, а вторую уже нет.
Мне надо - если строки в РС нет - добавить, есть - перезаписать.
То же самое с Номенклатурой - проходит. Здесь - сломал голову!
Я делаю обычно:
НаборЗаписей = РегистрыСведений.СвязьДоговоровСоСтатьямиЗатрат.СоздатьНаборЗаписей();
Для каждого СтрокаТЗ Из ТаблицаДоговоровОткорректированныхСвязей Цикл
Если (СтрокаТЗ.СтатьяНаЗатраты <> СтрокаТЗ.СтатьяНаЗатратыДоКорр) Тогда
НаборЗаписей.Отбор.Договор.Установить(СтрокаТЗ.Договор);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Договор = СтрокаТЗ.Договор;
НоваяЗапись.СтатьяНаЗатраты = СтрокаТЗ.СтатьяЗатрат;
НаборЗаписей.Записать();
КонецЕсли;
КонецЦикла;
В отладчике заметил что происходит - создается отбор и записывается первая строка.
На следующей строке отбор устанавливается другой. Но! Набор записей содержит прошлый набор записей со старым отбором.
Поэтому он пытается добавить в существующий набор новую строку с другим отбором.
Как правильно обойти проблему.
|
|
1
Stepa86
10.05.12
✎
16:26
|
обнулять переменные не учили? то есть набор очищать
|
|
2
Max1986
10.05.12
✎
16:29
|
НаборЗаписей.Очистить() ?
Блин, а как же прокатывало до этого?
|
|
3
Живой Ископаемый
10.05.12
✎
16:31
|
нет.. отбор ты устанавливаешь, но Прочитать() не говоришь, поэтому он еще не начинает дейтсовать. А начинает только после НаборЗаписей.Записать();
|
|
4
Axel2009
10.05.12
✎
16:33
|
так и быть. держи
Для каждого СтрокаТЗ Из ТаблицаДоговоровОткорректированныхСвязей Цикл
Если (СтрокаТЗ.СтатьяНаЗатраты <> СтрокаТЗ.СтатьяНаЗатратыДоКорр) Тогда
НаборЗаписей = РегистрыСведений.СвязьДоговоровСоСтатьямиЗатрат.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Договор.Установить(СтрокаТЗ.Договор);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Договор = СтрокаТЗ.Договор;
НоваяЗапись.СтатьяНаЗатраты = СтрокаТЗ.СтатьяЗатрат;
НаборЗаписей.Записать();
КонецЕсли;
КонецЦикла;
|
|
5
Max1986
10.05.12
✎
16:33
|
(3)я пробовал прочитать. но там надо анализировать заполнен РС по отбору или нет, что усложняет конструкцию
|
|
6
Max1986
10.05.12
✎
16:35
|
(4)то же вариант. я правда через Очистить пошел
|
|
7
Живой Ископаемый
10.05.12
✎
16:35
|
2(5) ничего не понял, но можно еще создание набора записей внести внутрь цикла
|
|