Имя: Пароль:
1C
1С v8
Как запонить табличную часть сведениями из подчиненного регистра сведений
, ,
0 lero4ka23
 
25.04.14
12:59
Как запонить табличную часть документа сведениями из подчиненного регистра сведений? Вот код, но он не работает при подчиненном регистре, что нужно изменить?

// Процедура заполняет табличную часть по спецификации.
Процедура ЗагрузитьНоменклатуруПоСпецификации(Спецификация)
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    МАКСИМУМ(СпецификацииСостав.НомерСтроки) КАК СпецификацииСоставНомерСтроки,
    |    СпецификацииСостав.Номенклатура КАК Номенклатура,
    |    СпецификацииСостав.ТипСтрокиСостава КАК ТипСтрокиСостава,
    |    СпецификацииСостав.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |    СпецификацииСостав.Спецификация КАК Спецификация,
    |    СУММА(ВЫБОР
    |            КОГДА ТИПЗНАЧЕНИЯ(&ЕдиницаИзмерения) = ТИП(Справочник.КлассификаторЕдиницИзмерения)
    |                ТОГДА СпецификацииСостав.Количество / СпецификацииСостав.КоличествоПродукции * &Количество
    |            ИНАЧЕ СпецификацииСостав.Количество / СпецификацииСостав.КоличествоПродукции * &Коэффициент * &Количество
    |        КОНЕЦ) КАК Количество
    |ИЗ
    |    Справочник.Спецификации.Состав КАК СпецификацииСостав
    |ГДЕ
    |    СпецификацииСостав.Ссылка = &Спецификация
    |    И СпецификацииСостав.Номенклатура.ТипНоменклатуры = &ТипНоменклатуры
    |
    |СГРУППИРОВАТЬ ПО
    |    СпецификацииСостав.Номенклатура,
    |    СпецификацииСостав.ЕдиницаИзмерения,
    |    СпецификацииСостав.Спецификация,
    |    СпецификацииСостав.ТипСтрокиСостава
    |
    |УПОРЯДОЧИТЬ ПО
    |    СпецификацииСоставНомерСтроки");
    
        
    Запрос.УстановитьПараметр("Спецификация", Спецификация);
    Запрос.УстановитьПараметр("Количество", 1);
    
    Запрос.УстановитьПараметр("ЕдиницаИзмерения", Объект.Номенклатура.ЕдиницаИзмерения);
    
    Если НЕ ТипЗнч(Объект.Номенклатура.ЕдиницаИзмерения) = Тип("СправочникСсылка.КлассификаторЕдиницИзмерения")
        И Объект.Номенклатура.ЕдиницаИзмерения <> Неопределено Тогда
        Запрос.УстановитьПараметр("Коэффициент", Объект.Номенклатура.ЕдиницаИзмерения.Коэффициент);
    Иначе
        Запрос.УстановитьПараметр("Коэффициент", 1);
    КонецЕсли;    
    
    Запрос.УстановитьПараметр("ТипНоменклатуры", Перечисления.ТипыНоменклатуры.Запас);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        Если Выборка.ТипСтрокиСостава = Перечисления.ТипыСтрокСоставаСпецификации.Узел Тогда
            
            ЗагрузитьНоменклатуруПоСпецификации(Выборка.Спецификация);
            
        Иначе
        
    
        НоваяСтрока = Объект.СписокНоменклатуры.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
        Запрос1 = Новый Запрос;
    Запрос1.Текст =
    "ВЫБРАТЬ
    |    НовыеЦеныСрезПоследних.Номенлатура,
    |    НовыеЦеныСрезПоследних.Цена,
    |    НовыеЦеныСрезПоследних.Период КАК ДатаНакладной,
    |    НовыеЦеныСрезПоследних.ЕдиницаИзмерения,
    |    ЕСТЬNULL(НовыеЦеныСрезПоследних.ПроцентСкидки, 0) КАК ПроцентСкидки
    |ИЗ
    |    РегистрСведений.НовыеЦены.СрезПоследних(&ДатаОбработки, ) КАК НовыеЦеныСрезПоследних
    |ГДЕ
    |    НовыеЦеныСрезПоследних.Номенлатура = &Номенклатура
    |    И НовыеЦеныСрезПоследних.Актуальность";
    
    Запрос1.УстановитьПараметр("ДатаОбработки",     Объект.Дата);
    Запрос1.УстановитьПараметр("Номенклатура",     Выборка.Номенклатура);
    Запрос1.УстановитьПараметр("Коэффициент",     1);
    
    Выборка1 = Запрос1.Выполнить().Выбрать();
    ПроцентСкидки = 0;
    Цена = 0;
    Пока Выборка1.Следующий() Цикл
        //НоваяСтрока.ДатаНакладной = Выборка1.ДатаНакладной;
        ПроцентСкидки = Выборка1.ПроцентСкидки;        
        Цена = Выборка1.Цена;        
    КонецЦикла;
            НоваяСтрока.Цена =  Цена;
            НоваяСтрока.ПроцентСкидки = ПроцентСкидки;
            НоваяСтрока.Сумма = НоваяСтрока.Количество * НоваяСтрока.Цена;
            //Если ПроцентСкидки >0 Тогда
            НоваяСтрока.СуммаСкидки =НоваяСтрока.Цена *НоваяСтрока.ПроцентСкидки/100;
            НоваяСтрока.ВсегоСоСкидкой = НоваяСтрока.Количество *(НоваяСтрока.Цена - НоваяСтрока.СуммаСкидки);
        КонецЕсли;    
   КонецЦикла;
    
   Элементы.Декорация1.Видимость = Истина;
   Объект.ТребуетсяПерерасчет = Истина;

КонецПроцедуры


&НаСервереБезКонтекста
Процедура ЗагрузитьЦенаИзПриходнойНакладной(Номенклатура, Дата,Валюта, Цена, Скидка, ДатаНакладной, ЕдИзм)
    Запрос1 = Новый Запрос();
    Запрос1.Текст =
    "ВЫБРАТЬ
    |    НовыеЦеныСрезПоследних.Период КАК ДатаНакладной,
    |    НовыеЦеныСрезПоследних.Номенлатура,
    |    НовыеЦеныСрезПоследних.ЕдиницаИзмерения,
    |    НовыеЦеныСрезПоследних.Цена,
    |    ЕСТЬNULL(НовыеЦеныСрезПоследних.ПроцентСкидки, 0) КАК ПроцентСкидки
    |ИЗ
    |    РегистрСведений.НовыеЦены.СрезПоследних(&ДатаОбработки, ) КАК НовыеЦеныСрезПоследних
    |ГДЕ
    |    НовыеЦеныСрезПоследних.Номенлатура = &Номенклатура
    |    И НовыеЦеныСрезПоследних.Актуальность";
    
    Запрос1.УстановитьПараметр("ДатаОбработки",     Дата);
    Запрос1.УстановитьПараметр("Номенклатура",     Номенклатура);
    Запрос1.УстановитьПараметр("Коэффициент",     1);
    
    
    //Запрос1.УстановитьПараметр("ВалютаДокумента", Валюта);
    
    Выборка1 = Запрос1.Выполнить().Выбрать();
    ПроцентСкидки = 0;
    Цена = 0;
    Пока Выборка1.Следующий() Цикл
        ДатаНакладной = Выборка1.ДатаНакладной;
        Скидка = Выборка1.ПроцентСкидки;        
        Цена = Выборка1.Цена;
        ЕдИзм = Номенклатура.ЕдиницаИзмерения;
        
    КонецЦикла;
КонецПроцедуры
1 Ёпрст
 
25.04.14
13:07
Шо за бред ?

>>.СпецификацииСостав.КоличествоПродукции * &Количество
Запрос.УстановитьПараметр("Количество", 1);

Наркоман шоле ?
2 Ёпрст
 
25.04.14
13:10
запрос в цикле, тоже не комильфо..
Да и, всё в топку.
3 lero4ka23
 
25.04.14
13:11
это всё работает только если регистр сведений неподчинённый
4 MKZM
 
25.04.14
13:12
(3) А что не правильно? Иначе хозяин нужен.
5 lero4ka23
 
25.04.14
13:16
(4) Кто б знал, мне просто нужно из некого регистра сведения загрузить в табличную часть документа ту номенклатуру которая входит в состав определённой спецификации.
6 ДенисЧ
 
25.04.14
13:27
7 Ёпрст
 
25.04.14
13:29
(6) всё хуже, это девчонка..
:)
8 ДенисЧ
 
25.04.14
13:31
(7) Male shovinist dirty pig!
9 anton_mgn
 
25.04.14
13:33
(0) А что конкретно не работает?
10 Ёпрст
 
25.04.14
13:35
(8) Успокойся,поросёночек!
:)