|
Помогите добавить строки регистра в цикле | ☑ | ||
---|---|---|---|---|
0
GreenDay1986
18.06.12
✎
10:34
|
Здравствуйте, делаю обработку по переоценке ОС. Программно создаю бухоперацию, добавляю к ней регистр параметрыАмортизацииОСБУ.
http://s45.radikal.ru/i107/1206/6d/469e032e6a6e.jpg Операция создается, а вот с регистром проблема. В цикле пытаюсь добавлять строки и записывать значения, но как понимаю строка добавляется 1 раз и запись значений пытается пройти в ту же строку. В результате чего появляется ошибка http://i014.radikal.ru/1206/63/33dd94bf99bb.jpg. Конфа БП 8.2 Код Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |ОС.Код КАК Код, |Рег.ИнвентарныйНомер КАК ИнвентарныйНомер |ИЗ Справочник.ОсновныеСредства КАК ОС |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&ДатаСреза) КАК Рег |ПО ОС.Код = Рег.ОсновноеСредство.Код |ГДЕ ОС.Код = &Код"; Запрос.УстановитьПараметр("ДатаСреза",ДатаВвода); Запрос.УстановитьПараметр("Код",Код); Рез = Запрос.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл сли ЗначениеЗаполнено(СпрСсылка) тогда Если переоценка >0 тогда НоваяСтрока=докОперация.ТаблицаРегистровСведений.Добавить(); НоваяСтрока.Имя="ПараметрыАмортизацииОСБухгалтерскийУчет"; НоваяСтрока.Представление="ПараметрыАмортизацииОСБухгалтерскийУчет"; РегистрБУ = РегистрыСведений.ПараметрыАмортизацииОСБухгалтерскийУчет.СоздатьНаборЗаписей(); РегистрБУ.Отбор.Регистратор.Установить(ДокОперацияСсылка); НоваяПроводка = РегистрБУ.Добавить(); НоваяПроводка.Период=ДатаВвода; НоваяПроводка.Организация=Справочники.Организации.НайтиПоКоду("000000002"); НоваяПроводка.ОсновноеСредство = СпрСсылка.Ссылка; КонецЕсли; КонецЕсли; КонецЦикла; РегХозрасчетный.Записать(); // Вставить содержимое обработчика. РегистрБУ.Записать(); докОперация.Записать() Подскажите пожалуйста что неправильно делаю. Заранее благодарен |
|||
1
andrewks
18.06.12
✎
10:36
|
создание набора записей вынеси за цикл
|
|||
2
Deniskind
18.06.12
✎
10:59
|
(0) Если запрос вернет больше, чем одну запись, то получится, что у вас создастся более одной строки с параметрами регистратор = ДокОперацияСсылка, Период = ДатаВвода, Организация = Справочники.Организации.НайтиПоКоду("000000002") и ОсновноеСредство = СпрСсылка.Ссылка. А это ключевые поля регистра. Может быть дело в том, что где-то встретилось ОС с одинаковым кодом?
|
|||
3
GreenDay1986
18.06.12
✎
11:41
|
(1) вынес, теперь не ругается но добавляет только одну запись - последнюю в файле. То есть создает новую строку и в цикле записывает в нее значение до последнего. Необходимо чтобы создавал каждый раз и записывал а создает один раз и записывает последнюю
(2) с одинаковым кодом нет. В операцию в цикле все записывается, несколько ОС. |
|||
4
mkanaev
18.06.12
✎
11:44
|
у тебя в каждой записи поддерживается уникальность по ключу?
|
|||
5
Buster007
18.06.12
✎
11:45
|
и это тоже вынес РегистрБУ.Отбор.Регистратор.Установить(ДокОперацияСсылка);?
|
|||
6
GreenDay1986
18.06.12
✎
11:51
|
(4) не понял немного. У всех ОС разные коды. Это создается операция
http://i061.radikal.ru/1206/68/b087440843b0.jpg это регистр http://s45.radikal.ru/i107/1206/6d/469e032e6a6e.jpg в операции добавляется несколько строк, в регистр несколько добавить не могу (5)тоже вынес |
|||
7
GreenDay1986
18.06.12
✎
11:59
|
так и остается одна запись, как запись в цикле добавить хз чтото :(
|
|||
8
Oleg_Kag
18.06.12
✎
12:01
|
|ГДЕ ОС.Код = &Код";
У Вас несколько ОС с одним и тем же кодом? |
|||
9
GreenDay1986
18.06.12
✎
12:04
|
(8) нет, это для загрузки из экселя, своеобразный поиск.
Код=Excel.ActiveSheet.Cells(стр,1).Value; затем после запроса Запрос.УстановитьПараметр("Код",Код); |
|||
10
GreenDay1986
18.06.12
✎
12:06
|
В общем нужно добавлять для каждого найденного основного средства строку, у меня получается что строка добавляется только один раз и записывается в нее последнее значение найденное в цикле
|
|||
11
Buster007
18.06.12
✎
12:07
|
(10) стоит прочитать про метод Записать()
|
|||
12
GreenDay1986
18.06.12
✎
12:11
|
(11) РегистрБУ.Записать() внес в цикл. результат тот же. У "НоваяПроводка" такого метода нет.
|
|||
13
GreenDay1986
18.06.12
✎
12:17
|
Собственно в цикле
НоваяПроводка = РегистрБУ.Добавить(); НоваяПроводка.Период=ДатаВвода; НоваяПроводка.Осн1овноеСредство = СпрСсылка.Ссылка; РегистрБУ.Записать(); тоже самое выдает. Наверное какими то другими методами регистры двигать надо :( |
|||
14
Buster007
18.06.12
✎
12:23
|
(12) мдя.
Записать (Write) Синтаксис: Записать(<Замещать>) Параметры: <Замещать> (необязательный) Тип: Булево. Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям Значение по умолчанию: Истина Описание: Записывает набор записей в базу данных. В зависимости от переданного параметра, может быть выполнено добавление записей или их замещение. Доступность: Сервер, толстый клиент, внешнее соединение. Примечание: Для регистров сведений, подчиненных регистратору, при вызове с параметром <Замещать> равным Ложь после записи в информационную базу набор записей очищается (удаляются записи из набора). Пример: НаборКурсов.Записать(); У тебя вызывается данный код в цикле. Дальше думай. |
|||
15
GreenDay1986
18.06.12
✎
12:32
|
(14) спасибо добрый человек, программирую недавно отсюда затупочки :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |