8.х Добавление записей в регистр накопления без документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем denmember, 9 окт 2007.

  1. TopicStarter Overlay
    denmember
    Offline

    denmember

    Регистрация:
    13 июл 2006
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Добрый День! Проблема у меня следующего содержания:

    Запросом выбираю записи из табличной части некоторого документа. Естественно, что по конкретному регистратору (документу) может быть несколько записей. Создаю набор записей данного регистра накопления и пытаюсь его записать. В результате заполняется регистр, но некорректно: для регистраторов (документов), в табличных частях которых имеется несколько записей, в регистр попадает только одна последняя запись! :unsure:

    Подскажите в чем проблема! Заранее спасибо

    Набор = РегистрыНакопления.СТ_ТараКонтрагентов.СоздатьНаборЗаписей();

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

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

    ВыборкаДокументов = Запрос.Выполнить().Выбрать();

    Пока ВыборкаДокументов.Следующий() цикл

    Набор.Отбор.Регистратор.Установить(ВыборкаДокументов.Ссылка);


    Движ = Набор.Добавить();
    //Приход

    Движ.ВидДвижения=ВидДвиженияНакопления.Приход;


    Движ.Период = ВыборкаДокументов.Ссылка.Дата;
    Движ.Регистратор = ВыборкаДокументов.Ссылка;
    Движ.Организация = ВыборкаДокументов.Ссылка.Организация;
    Движ.Контрагент = ВыборкаДокументов.Ссылка.Контрагент;
    Движ.Склад = ВыборкаДокументов.Ссылка.Склад;
    Движ.ВидДоговора = ВыборкаДокументов.Ссылка.ДоговорКонтрагента.ВидДоговора;

    Движ.Тара = ВыборкаДокументов.Номенклатура;
    Движ.Количество = ВыборкаДокументов.Количество;
    Движ.Сумма = ВыборкаДокументов.Сумма;


    //Записать сформированные для очередного документа движения
    Набор.Записать();
    //Очистить набор записей регистра перед использованием для следующего документа
    Набор.Очистить();
    КонецЦикла;
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
    Набор.Отбор.Регистратор.Установить(ВыборкаДокументов.Ссылка);
    
    Поэтому и попадает только последняя запись.

    Не стоит заморачиваться в данном случае с набором записей - используй Менеджер Записи, т.е. добаволяй в регистр по одной записи, а не пытайся странным образом добавить сразу набор.

    ЗЫ. Писать
    Код:
    //Очистить набор записей регистра перед использованием для следующего документа
    Набор.Очистить(); 
    
    перед
    Код:
    Набор.Отбор.Регистратор.Установить(ВыборкаДокументов.Ссылка);
    
    смысла не имеет...


    ЗЗЫ. Вообще удивительно, как это взлетело.
  3. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Попробуй конструктором движений сделать - посмотри как он это опишет. Но вообще код какой-то странный

Поделиться этой страницей