Имя: Пароль:
1C
1С v8
Не могу записать в регистр сведений - значение поля не соответствует отбору
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) ничего не понял, но можно еще создание набора записей внести внутрь цикла