Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Цена (склад получатель)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bereznoy
Делаю внешнюю печ форму документа Внутр перемещение, мне необходимо получить в печ форму цену склада получателя, как правильно это сделать?

ЗапросПоТоварам = Новый Запрос;
    ЗапросПоТоварам.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
    ЗапросПоТоварам.Текст =
    "ВЫБРАТЬ
    |    Номенклатура,
    |    ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК Товар,
    |    Номенклатура.Код КАК Код,
    |    Номенклатура.Артикул КАК Артикул,
    |    Количество,
    |    ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |    Цена,
    |   НомерСтроки,
    |    1 КАК ID
    |ИЗ
    |    (ВЫБРАТЬ
    |        Номенклатура         КАК Номенклатура,
    |        ЕдиницаИзмерения     КАК ЕдиницаИзмерения,
    |        ЦенаВРознице         КАК Цена,
    |        СУММА(Количество)    КАК Количество,
    |        МИНИМУМ(НомерСтроки) КАК НомерСтроки
    |    ИЗ
    |        Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваров
    |    ГДЕ
    |        ПеремещениеТоваров.Ссылка = &ТекущийДокумент
    |    СГРУППИРОВАТЬ ПО
    |        Номенклатура,
    |        ЕдиницаИзмерения,
    |        ЦенаВРознице
    |    ) КАК ВложенныйЗапросПоТоварам
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    Номенклатура,
    |    ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК Товар,
    |    Номенклатура.Код КАК Код,
    |    Номенклатура.Артикул КАК Артикул,
    |    Количество,
    |    ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    |    Цена,
    |   НомерСтроки,
    |    2 КАК ID
    |ИЗ
    |    (ВЫБРАТЬ
    |        Номенклатура         КАК Номенклатура,
    |        ЕдиницаИзмерения     КАК ЕдиницаИзмерения,
    |        Цена                 КАК Цена,
    |        СУММА(Количество)    КАК Количество,
    |        МИНИМУМ(НомерСтроки) КАК НомерСтроки
    |    ИЗ
    |        Документ.ПеремещениеТоваров.ТоварыНаКомиссии КАК ПеремещениеТоваров
    |    ГДЕ
    |        ПеремещениеТоваров.Ссылка = &ТекущийДокумент
    |    СГРУППИРОВАТЬ ПО
    |        Номенклатура,
    |        ЕдиницаИзмерения,
    |        Цена
    |    ) КАК ВложенныйЗапросПоТоварам
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    Номенклатура,
    |    ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)),
    |    Номенклатура.Код КАК Код,
    |    Номенклатура.Артикул КАК Артикул,
    |    Количество,
    |    Номенклатура.БазоваяЕдиницаИзмерения,
    |    0,
    |    НомерСтроки,
    |    3
    |    
    |ИЗ
    |    Документ.ПеремещениеТоваров.ВозвратнаяТара КАК ПеремещениеТоваров
    |
    |ГДЕ
    |    ПеремещениеТоваров.Ссылка = &ТекущийДокумент
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    Номенклатура,
    |    ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)),
    |    Номенклатура.Код КАК Код,
    |    Номенклатура.Артикул КАК Артикул,
    |    Количество,
    |    ЕдиницаИзмерения,
    |    0,
    |    НомерСтроки,
    |    4
    |    
    |ИЗ
    |    Документ.ПеремещениеТоваров.БланкиСтрогогоУчета КАК ПеремещениеТоваров
    |
    |ГДЕ
    |    ПеремещениеТоваров.Ссылка = &ТекущийДокумент
    
    |
    |УПОРЯДОЧИТЬ ПО
    |    ID,
    |    НомерСтроки";
    
    ВыборкаСтрокТовары = ЗапросПоТоварам.Выполнить().Выбрать();
logist
Цитата(bereznoy @ 24.09.12, 22:54) необходимо зарегистрироваться для просмотра ссылки
как правильно это сделать?

В чем собственно проблема? к чему приведен данный запрос? Конфигурация?
bereznoy
Цитата(logist @ 24.09.12, 23:06) необходимо зарегистрироваться для просмотра ссылки
В чем собственно проблема? к чему приведен данный запрос? Конфигурация?

Проблема в создании правильного запроса, что б тип цены брался из склада получателя, соотвественно цена. Запрос приведен как исходник, вот что
уже из него получается (часть), конф УПП

перед запросом параметр добавил такой

ЗапросПоТоварам.УстановитьПараметр("ТипЦенПолучатель", СсылкаНаОбъект.СкладПолучатель.ТипЦенРозничнойТорговли.Ссылка);


и сам запрос:

|ВЫБРАТЬ
    |    ПеремещениеТоваров.Номенклатура,
    |    ВЫРАЗИТЬ(ПеремещениеТоваров.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)),
    |    ПеремещениеТоваров.Номенклатура.Код,
    |    ПеремещениеТоваров.Номенклатура.Артикул,
    |    ПеремещениеТоваров.Количество,
    |    ПеремещениеТоваров.ЕдиницаИзмерения,
    |    0,
    |    ПеремещениеТоваров.НомерСтроки,
    |    4,
    |    ЦеныНоменклатуры.Цена КАК ЦенаРозн,
    |    ЦеныНоменклатуры.Номенклатура
    |ИЗ
    |    Документ.ПеремещениеТоваров.БланкиСтрогогоУчета КАК ПеремещениеТоваров
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    |        ПО ПеремещениеТоваров.Номенклатура = ЦеныНоменклатуры.Номенклатура
    |ГДЕ
    |    ПеремещениеТоваров.Ссылка = &ТекущийДокумент
    |    И ЦеныНоменклатуры.ТипЦен.Ссылка = &ТипЦенПолучатель
    |
    |УПОРЯДОЧИТЬ ПО
    |    ID,
    |    ВложенныйЗапросПоТоварам.НомерСтроки";



Собственно задача заключается в получении цены склада получателя в печ форму, ну а потом умножить на кол-вл и получить сумму думаю смогу
bereznoy
Если делаю подобный запрос не в цикле то все нормально, получаю нужную цену, а вот если хочу в цикле выборкипервого запроса добавляю свой запрос, ничего не получается, а делаю вот такой вот запрос

Пока ВыборкаСтрокТовары.Следующий() Цикл

        Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
            Сообщить(НСтр("ru='В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.';uk='В одному з рядків не заповнене значення номенклатури - рядок під час друку буде пропущений.'"), СтатусСообщения.Важное);
            Продолжить;
        КонецЕсли;

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

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

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

            
            
            
        ОбластьДанных.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар);
        ТабДокумент.Присоединить(ОбластьДанных);
        
    //    Если ЕстьЦена Тогда
    
    ТабДокумент.Присоединить(ОбластьЦены);
            
            ТабДокумент.Присоединить(ОбластьСуммы);

    //    КонецЕсли;

        НС = НС + 1;
    КонецЦикла;


В цикле получается получать цену но ровно столько раз сколько у меня строк в документе, попытался условием сделать, но почему то оно не выполняется

ЗапросПоЦенам = Новый Запрос;
ЗапросПоЦенам.УстановитьПараметр("ТекущийДокументЦена", СсылкаНаОбъект);
ЗапросПоЦенам.УстановитьПараметр("ТоварЦена", ВыборкаСтрокТовары.Товар);

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

использовать
Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары

Ну и соответсвенно подровнять запрос...

Второй момент:
Реквизит ТипЦенРозничнойТорговли в складе-получателе - заполнен?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.