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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Simon-Phoenix, 28 фев 2008.

  1. TopicStarter Overlay
    Simon-Phoenix
    Offline

    Simon-Phoenix

    Регистрация:
    16 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Проблема в том, что цена не считывается, следовательно и сумма не просчитывается...т.е. обработка видит, что у позиции есть заводская цена, но не может ее прочитать...
    Если же вместо "ВыборкаТовар = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Товар");" ставлю "ВыборкаТовар = Результат.Выбрать();", то каждая позиция утраивается (видимо т.к. цен у нас три: розничная, закупочная и заводская) и цена заводская прописывается у третей строки каждой позиции, но сумма и в этом случае все равно не считается...никак не могу понять что к чему...несколько дней уже бьюсь
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    
    "ВЫБРАТЬ
    | ЗначенияСвойствОбъектов.Значение,
    | Продажи.Номенклатура КАК Товар,
    | СУММА(Продажи.Количество) КАК КоличествоБезнал,
    | Продажи.Подразделение КАК Подразделение,
    | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
    |ИЗ
    | РегистрНакопления.Продажи КАК Продажи
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    | ПО Продажи.Номенклатура = ЗначенияСвойствОбъектов.Объект
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен.Наименование = ""Заводская"") 
    КАК ЦеныНоменклатурыСрезПоследних
    | ПО Продажи.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
    |ГДЕ
    | ЗначенияСвойствОбъектов.Значение В ИЕРАРХИИ(&Производитель)
    | И Продажи.Номенклатура В ИЕРАРХИИ(&ГруппаНоменклатуры)
    | И Продажи.Период МЕЖДУ &НачалоОтчета И &Окончание
    | И Продажи.Подразделение В ИЕРАРХИИ(&Склад)
    |
    |СГРУППИРОВАТЬ ПО
    | ЗначенияСвойствОбъектов.Значение,
    | Продажи.Номенклатура,
    | Продажи.Подразделение,
    | ЦеныНоменклатурыСрезПоследних.Цена
    |ИТОГИ ПО
    | Товар,
    | Подразделение
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    
    Запрос.УстановитьПараметр("НачалоОтчета", НачалоПериода);
    Запрос.УстановитьПараметр("Окончание", КонецДня(КонецПериода));
    Запрос.УстановитьПараметр("ГруппаНоменклатуры", Номенклатура.Ссылка);
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Производитель", Производитель);
    Результат = Запрос.Выполнить();
    
    Макет = ЭтотОбъект.ПолучитьМакет("Макет");
    Таблица = ЭлементыФормы.Таблица;
    Таблица.Очистить();
    Таблица.Вывести(Макет.ПолучитьОбласть("Шапка|База"));
    
    ВыборкаТовар = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Товар");
    //ВыборкаТовар = Результат.Выбрать();
    
    Таблица.ФиксацияСверху = Таблица.ВысотаТаблицы;
    
    Пока ВыборкаТовар.Следующий() Цикл
    ВыборкаПодразделение = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Подразделение", "Все");
    Пока ВыборкаПодразделение.Следующий() Цикл
    Область = Макет.ПолучитьОбласть("Шапка|Данные");
    Область.Параметры.Заполнить(ВыборкаПодразделение);
    Таблица.Присоединить(Область);
    КонецЦикла;
    Прервать;
    КонецЦикла;
    
    ВыборкаТовар.Сбросить();
    
    ОбластьБаза = Макет.ПолучитьОбласть("Строка|База"); 
    ОбластьДанные = Макет.ПолучитьОбласть("Строка|Данные");
    
    Пока ВыборкаТовар.Следующий() Цикл
    Цена = ?(ВыборкаТовар.Цена = NULL, 0, ВыборкаТовар.Цена);
    ОбластьБаза.Параметры.Заполнить(ВыборкаТовар);
    Таблица.Вывести(ОбластьБаза);
    
    ВыборкаПодразделение = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Подразделение","Все");
    Пока ВыборкаПодразделение.Следующий() Цикл
    КоличествоБезнал = ?(ВыборкаПодразделение.КоличествоБезнал = NULL, 0, ВыборкаПодразделение.КоличествоБезнал);
    СуммаБезнал = КоличествоБезнал * Цена;
    ОбластьДанные.Параметры.Заполнить(ВыборкаПодразделение);
    Таблица.Присоединить(ОбластьДанные);
    КонецЦикла;
    
    КонецЦикла;
    
    Таблица.ТолькоПросмотр = ИСТИНА;
    Таблица.Показать();
    
    ВыборкаТовар.Сбросить();
    
    КонецПроцедуры
    
    
    
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Попробуй заменить ВНУТРЕННЕЕ СОЕДИНЕНИЕ на ЛЕВОЕ СОЕДИНЕНИЕ.
    И еще - " ТипЦен.Наименование = ""Заводская"" " - извращение. Используй параметр, указывая ссылку на тип цен.
  3. TopicStarter Overlay
    Simon-Phoenix
    Offline

    Simon-Phoenix

    Регистрация:
    16 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    да пробовал и такие варианты - нет эффекта
    а использовать условие в параметрах таблицы, а не во внешних параметрах, весьма удобно бывает иногда )...не первая обработка уже и раньше все ок работало, а вот с этой такой косяк непонятный
  4. TopicStarter Overlay
    Simon-Phoenix
    Offline

    Simon-Phoenix

    Регистрация:
    16 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    в общем вывода цены добился, введя отдельно обход по Цене
    |ИТОГИ ПО
    |Цена,
    |Товар,
    |Подразделение
    --------
    Код:
    Таблица.Вывести(Макет.ПолучитьОбласть("Шапка|База"));
    Таблица.Присоединить(Макет.ПолучитьОбласть("Шапка|Цена"));
    ---------
    ОбластьБаза = Макет.ПолучитьОбласть("Строка|База"); 
    ОбластьЦена = Макет.ПолучитьОбласть("Строка|Цена");
    ОбластьДанные = Макет.ПолучитьОбласть("Строка|Данные");
    //----------
    Пока ВыборкаТовар.Следующий() Цикл
    ОбластьБаза.Параметры.Заполнить(ВыборкаТовар);
    Таблица.Вывести(ОбластьБаза);
    
    ВыборкаЦена = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Цена");
    Пока ВыборкаЦена.Следующий() Цикл
    Цена = ?(ВыборкаЦена.Цена = NULL, 0, ВыборкаЦена.Цена); 
    ОбластьЦена.Параметры.Заполнить(ВыборкаЦена);
    Таблица.Присоединить(ОбластьЦена);
    КонецЦикла;
    
    
    ...но сейчас ругается, что не может преобразовать
    Код:
    СуммаБезнал = КоличествоБезнал * Цена;
    
    
    в число, хотя я и задал ему условия, что если КоличествоБезнал или Цена отсутствуют, то считать их нулем...

    P.S. второй раз обращаюсь на этот форум и второй раз общаюсь сам с собой )....тут люди вапче бывают? )

    Используйте тэг
    Код:
    [/color]
  5. BabySG
    Offline

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

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Simon-Phoenix,
    "...хотя я и задал ему условия, что если КоличествоБезнал или Цена отсутствуют, то считать их нулем..."

    Дык покажите, как это сделано - ибо ошибка то в этом....
  6. TopicStarter Overlay
    Simon-Phoenix
    Offline

    Simon-Phoenix

    Регистрация:
    16 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Цена = ?(ВыборкаТовар.Цена = NULL, 0, ВыборкаТовар.Цена);

    КоличествоБезнал = ?(ВыборкаПодразделение.КоличествоБезнал = NULL, 0, ВыборкаПодразделение.КоличествоБезнал);
  7. TopicStarter Overlay
    Simon-Phoenix
    Offline

    Simon-Phoenix

    Регистрация:
    16 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    еще нюанс: на сообщить(Цена ) выводит нули, хотя в таблицу же выводит нормальные цены
  8. BabySG
    Offline

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

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Simon-Phoenix,
    :) Используй конструкцию ЕстьNULL прямо в запросе и будет тебе счастье!
  9. TopicStarter Overlay
    Simon-Phoenix
    Offline

    Simon-Phoenix

    Регистрация:
    16 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    т.е. в параметрах вирт. таблицы ЦеныНоменклатурыСрезПоследних?

    на такой параметр:
    (ТипЦен.Наименование = "Заводская")
    (Если Цена Есть NULL Тогда Цена = 0)
    ругается, что {(1,1)} Ожидается выражение ")"

    если:
    (ТипЦен.Наименование = "Заводская")
    И (Если Цена Есть NULL Тогда Цена = 0)
    то {(1,9)} Ожидается выражение ")"

    где-то не там или не так видимо условие ставлю?
  10. BabySG
    Offline

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

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
    "
    ...
    ЕстьNULL(Цена, 0 ) КАК Цена,
    ...
    "
    
    
    
    СП читайте хоть иногда-то...
  11. TopicStarter Overlay
    Simon-Phoenix
    Offline

    Simon-Phoenix

    Регистрация:
    16 ноя 2007
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    спасибо )...не знал о таком - я новичок еще в 1С

    но все равно не помогает (...походу изначально как-то неправильно кодить начал

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