Имя: Пароль:
1C
1С v8
Обработка заполнения Регистра накопления в документе КЗР
0 Eeelena
 
29.06.17
12:38
Здравствуйте.
Делаю обработку заполнения табличной части документа Корректировка записей регистров", но почему то не могу получить ссылку на Объект. Она пустая. поэтому выходит ошибка

Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Взаиморасчеты с контрагентами по документам расчетов)

В переменной Корректировка почему то лежит строка с наименованием документа Корректировки. Подскажите, как мне получить ссылку на документ Корректировки записей регистров?

Код в модуле объекта следующий:


Процедура Инициализировать(Документ, Корректировка, выполнено) Экспорт
   Сообщить(Корректировка.Ссылка);

    ЭтотОбъект.Объект=Корректировка;
   Сообщить(ЭтотОбъект.Объект);
    ОбщФорма =ПолучитьФорму("Форма");
        
    УсловиеОтбора = ОбщФорма.ОткрытьМодально();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Организация,
        |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Контрагент,
        |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента,
        |    СУММА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток) КАК СуммаВзаиморасчетовКонечныйОстаток
        |ИЗ
        |    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ОстаткиИОбороты(&НачДата, &КонДата, Авто, , Организация = &Организация) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты
        |ГДЕ
        |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Контрагент = &Контрагент
        |    И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента = &ДоговорКонтрагента
        |
        |СГРУППИРОВАТЬ ПО
        |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Контрагент,
        |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента,
        |    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстаткиИОбороты.Организация";

    Запрос.УстановитьПараметр("КонДата", КонецДня(Корректировка.Дата));

    Запрос.УстановитьПараметр("НачДата", Дата(1, 1, 1) );
    Запрос.УстановитьПараметр("Организация", Корректировка.Организация);
    Если УсловиеОтбора <> Неопределено Тогда
    
        Контрагент=УсловиеОтбора.Контрагент;
        Договор=УсловиеОтбора.Договор;
    КонецЕсли;;
    
    Запрос.УстановитьПараметр("Контрагент", Контрагент );
    Запрос.УстановитьПараметр("ДоговорКонтрагента", Договор);
    
    Результат = Запрос.Выполнить();

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

     НаборЗаписей.Записать();
КонецПроцедуры
1 Cyberhawk
 
29.06.17
12:39
Объект.Ссылка
2 Eeelena
 
29.06.17
12:41
(1) Пробовала, там пусто
3 Cyberhawk
 
29.06.17
12:42
(2) Значит документ еще не записан в ИБ. Устанвливай ему ссылку через соответствующий метод до записи
4 Eeelena
 
29.06.17
12:49
(3) Документ записала, вывела Сообщить(Объект.Ссылка);
ничего не вывел, сделала Сообщить(Корректировка.Ссылка);
вывел наименование документа.

Но почему то все равно ругается

Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Взаиморасчеты с контрагентами по документам расчетов)

Я делаю вот так

Новая = Корректировка.ТаблицаРегистровНакопления.Добавить();
    Новая.Имя = "ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов";
    Новая.Представление = "Взаиморасчеты с контрагентами по документам расчетов";
    НаборЗаписей = РегистрыНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.СоздатьНаборЗаписей();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         НаборЗаписей.Отбор.Регистратор.Установить(Корректировка.Ссылка);
         НоваяСтрока = НаборЗаписей.Добавить();
         НоваяСтрока.Активность=Истина;
         НоваяСтрока.СуммаВзаиморасчетовКонечныйОстаток= ВыборкаДетальныеЗаписи.СуммаВзаиморасчетовКонечныйОстаток
        
    КонецЦикла
5 Eeelena
 
29.06.17
12:52
может каким то другим способом можно добавить записи регистра накопления ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов в документ КЗР?
6 Гипервизор
 
29.06.17
13:03
Зачем вам ссылка? Заполняйте через Движения.
7 Cyberhawk
 
29.06.17
13:06
У тебя в коде Корректировка.Ссылка, а Я не это вроде писал
8 Гипервизор
 
29.06.17
13:07
(6) как-то так:

ДвиженияВзаиморасчеты = Корректировка.Движения.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Движение = ДвиженияВзаиморасчеты.Добавить();
ЗаполнитьЗначенияСвойств(Движение, ВыборкаДетальныеЗаписи);
КонецЦикла;
9 Eeelena
 
29.06.17
13:43
(8) спасибо большое!