Вход | Регистрация

1С:Предприятие ::

Метки: Запросы и построители

Помогите с запросом

Я
   Forgotten god
26.04.04 - 12:15
Проблема в том что при выборе с накладных (приход и расход) выбираеться только одна позиция, хотя в табличной части их бывает и 2 - 3 из-за этого сбиваеться кол-во.

2. Цены из таб. части выбираються только 1 позиции а нужно всех.

3. И в 1С так можно делать? Понимаю что нужен цикл но как его сделать
//************************************

            Если сокрлП(Запрос.Страна)="ГМЗ №3" тогда    
                гмз3=Запрос.КоличествоТары;
                гмз3_x=гмз3_x + Запрос.КоличествоТары;
                гмз3_Ст=Запрос.СуммаПрих;
                гмз3_Все= гмз3_Все + гмз3_Ст;

            иначе

//***********************************


Поскажите пожалуйста!

Пока Запрос.Группировка(1) = 1 Цикл
Если сокрлП(Запрос.ТекущийДокумент.Вид())="ПриходнаяНакладная" тогда
            гмз1=0;
            гмз3=0;
            проч=0;
            гмз1_Ст=0;
            гмз1_Все=0;
            гмз3_Ст=0;
            гмз3_Все=0;
        КонецЕсли;
        Если сокрлП(Запрос.Страна)="ГМЗ №1" тогда
                гмз1=Запрос.КоличествоТары;
                гмз1_x=гмз1_x + Запрос.КоличествоТары;
                гмз1_Ст=Запрос.СуммаПрих;
                гмз1_Все= гмз1_Все + гмз1_Ст;
            иначе
            Если сокрлП(Запрос.Страна)="ГМЗ №3" тогда    
                гмз3=Запрос.КоличествоТары;
                гмз3_x=гмз3_x + Запрос.КоличествоТары;
                гмз3_Ст=Запрос.СуммаПрих;
                гмз3_Все= гмз3_Все + гмз3_Ст;

            иначе
                проч=Запрос.КоличествоТары;
                проч_x=проч_x + Запрос.КоличествоТары;
            КонецЕсли;
        КонецЕсли;
        x=x + Запрос.КоличествоТары;
        Таб.ВывестиСекцию("Приход");
КонецЦикла;
    Таб.ВывестиСекцию("ИтогоП");
    Запрос.ВНачалоВыборки();
    Пока Запрос.Группировка(1) = 1 Цикл
            гмз1=0;
            гмз3=0;
            проч=0;
        Если сокрлП(Запрос.ТекущийДокумент.Вид())="РасходнаяНакладная" тогда
            гмз1=0;
            гмз3=0;
            проч=0;
            гмз1_Ст=0;
            гмз1_Все=0;
            гмз3_Ст=0;
            гмз3_Все=0;
        КонецЕсли;
        Если сокрлП(Запрос.Страна)="ГМЗ №1" тогда 
        
                гмз1=Запрос.КоличествоТары;
                гмз1_xР=гмз1_xР + гмз1;
                гмз1_Ст=Запрос.СуммаПрих;
                гмз1_Все= гмз1_Все + гмз1_Ст;
        
            иначе
            Если сокрлП(Запрос.Страна)="ГМЗ №3" тогда    
                гмз3=Запрос.КоличествоТары;
                гмз3_xР=гмз3_xР + гмз3;
                гмз3_Ст=Запрос.СуммаПрих;
                гмз3_Все= гмз3_Все + гмз3_Ст;
            иначе
                проч=Запрос.КоличествоТары;
                проч_xР=проч_xР + проч;
            КонецЕсли;
        КонецЕсли;
        y=y + Запрос.КоличествоТары;
        Таб.ВывестиСекцию("Расход");
    КонецЦикла;
    Таб.ВывестиСекцию("ИтогоР");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
 
  Рекламное место пустует
   GrayT
 
1 - 26.04.04 - 12:20
Б-р-р.
Сам Запрос покажи. По ходу дела ты выбираешь только документы, тогда при обходе группировок надо организовать обход строк доументов - но это изврат.
Напиши, что хочешь сделать и покажи сам запрос
   Forgotten god
2 - 26.04.04 - 12:27
Хочу отчет

    Отчет по таре поставщика         Запрос.Клиент                        
ТекущийДокумент    Наименование    Производитель    ГМЗ_1    Сумма    ГМЗ_3    Сумма    Прочие    Кол-во    Итого
Итого приход            гмз1_x#N019    гмз1_Все#N019.2    гмз3_x#N019    гмз3_Все#N019.2    проч_x#N019    x#N019    Запрос.СуммаП#N019.2

Запрос.ТекущийДокумент    Запрос.НаимемонованиеТары    Запрос.Страна    гмз1#N03    гмз1_Ст#N019.2    гмз3#N03    гмз3_Ст#N019.2    проч#N03    Запрос.КоличествоТары#N03    Запрос.СуммаП#N019.2

Итого расход            гмз1_xР#N019    гмз1_Все#N019.2    гмз3_xР#N019    гмз3_Все#N019.2    проч_xР#N019    y#N019    Запрос.СуммаР#N019.2

Запрос.ТекущийДокумент    Запрос.НаимемонованиеТары    Запрос.Страна    гмз1#N03    гмз1_Ст#N019.2    гмз3#N03    гмз3_Ст#N019.2    проч#N03    Запрос.КоличествоТары#N03    Запрос.СуммаР#N019.2

Вот весь модуль на этот отчет:

//*******************************************

Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Период с ВыбНачПериода по ВыбКонПериода;
    |Клиент = Документ.ПриходнаяНакладная.Поставщик, Документ.РасходнаяНакладная.Получатель;
        |НаимемонованиеТары = Документ.ПриходнаяНакладная.Товар, Документ.РасходнаяНакладная.Товар;
        |КоличествоТары = Документ.ПриходнаяНакладная.Количество, Документ.РасходнаяНакладная.Количество;
        |Страна = Документ.ПриходнаяНакладная.Товар.Страна1, Документ.РасходнаяНакладная.Товар.Страна1;
    |ТекущийДокумент = Документ.ПриходнаяНакладная.ТекущийДокумент, Документ.РасходнаяНакладная.ТекущийДокумент;
    |ВидТовара = Документ.ПриходнаяНакладная.Товар.ВидТовара, Документ.РасходнаяНакладная.Товар.ВидТовара;
    |СуммаПрих = Документ.ПриходнаяНакладная.СуммаПоставщика;
    |СуммаРасх = Документ.РасходнаяНакладная.СуммаПрод;
    |Функция СуммаП = Сумма(СуммаПрих);
    |Функция СуммаР = Сумма(СуммаРасх);
    |Группировка ТекущийДокумент без групп;
    |Условие(ВидТовара = Перечисление.ВидыТоваров.Тара);
    |//}}ЗАПРОС

    ;
    Если ВыбКлиент.Выбран()=1 тогда
        ТекстЗапроса =     ТекстЗапроса +"Условие(Клиент = ВыбКлиент);";
    КонецЕсли;
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    гмз1_x=0;
    гмз3_x=0;
    проч_x=0;
    y=0;
    x=0;
    гмз1=0;
    гмз3=0;
    проч=0;
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        Если сокрлП(Запрос.ТекущийДокумент.Вид())="ПриходнаяНакладная" тогда
            гмз1=0;
            гмз3=0;
            проч=0;
            гмз1_Ст=0;
            гмз1_Все=0;
            гмз3_Ст=0;
            гмз3_Все=0;
        КонецЕсли;
        Если сокрлП(Запрос.Страна)="ГМЗ №1" тогда
                гмз1=Запрос.КоличествоТары;
                гмз1_x=гмз1_x + Запрос.КоличествоТары;
                гмз1_Ст=Запрос.СуммаПрих;
                гмз1_Все= гмз1_Все + гмз1_Ст;
            иначе
            Если сокрлП(Запрос.Страна)="ГМЗ №3" тогда    
                гмз3=Запрос.КоличествоТары;
                гмз3_x=гмз3_x + Запрос.КоличествоТары;
                гмз3_Ст=Запрос.СуммаПрих;
                гмз3_Все= гмз3_Все + гмз3_Ст;

            иначе
                проч=Запрос.КоличествоТары;
                проч_x=проч_x + Запрос.КоличествоТары;
            КонецЕсли;
        КонецЕсли;
        x=x + Запрос.КоличествоТары;
        Таб.ВывестиСекцию("Приход");
КонецЦикла;
    Таб.ВывестиСекцию("ИтогоП");
    Запрос.ВНачалоВыборки();
    Пока Запрос.Группировка(1) = 1 Цикл
            гмз1=0;
            гмз3=0;
            проч=0;
        Если сокрлП(Запрос.ТекущийДокумент.Вид())="РасходнаяНакладная" тогда
            гмз1=0;
            гмз3=0;
            проч=0;
            гмз1_Ст=0;
            гмз1_Все=0;
            гмз3_Ст=0;
            гмз3_Все=0;
        КонецЕсли;
        Если сокрлП(Запрос.Страна)="ГМЗ №1" тогда 
        
                гмз1=Запрос.КоличествоТары;
                гмз1_xР=гмз1_xР + гмз1;
                гмз1_Ст=Запрос.СуммаПрих;
                гмз1_Все= гмз1_Все + гмз1_Ст;
        
            иначе
            Если сокрлП(Запрос.Страна)="ГМЗ №3" тогда    
                гмз3=Запрос.КоличествоТары;
                гмз3_xР=гмз3_xР + гмз3;
                гмз3_Ст=Запрос.СуммаПрих;
                гмз3_Все= гмз3_Все + гмз3_Ст;
            иначе
                проч=Запрос.КоличествоТары;
                проч_xР=проч_xР + проч;
            КонецЕсли;
        КонецЕсли;
        y=y + Запрос.КоличествоТары;
        Таб.ВывестиСекцию("Расход");
    КонецЦикла;
    Таб.ВывестиСекцию("ИтогоР");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
   skunk
 
3 - 26.04.04 - 12:37
вместо:
|Функция СуммаР = Сумма(СуммаРасх); 
|Группировка ТекущийДокумент без групп; 
   
сделай
|Функция СуммаР = Сумма(СуммаРасх); 
|Группировка НаимемонованиеТары; 
|Группировка ТекущийДокумент;
   Аким
4 - 26.04.04 - 14:56
И еще в строке :
Группировка НаимемонованиеТары;
напиши:
Группировка НаимемонованиеТары без групп;
Иначе в запрос будут попадать кроме элемента справочника "Номенклатура" будет сначала попадать группа, которой этот элемент принадлежит.
   Valery
 
5 - 26.04.04 - 15:00
Что-то я не нашел у тебя в запросе переменной Номерстроки. может просмотрел, но без нее ничего не получится.
   Valery
 
7 - 26.04.04 - 15:47
По вопросу необходимо получить отчет с детелизацией до строку документа.
Для этого необходимо в запросе определить переменную по строке документа,
например
номСтр=документ.номерСтроки
Тогда в цикл по строкам документа попадут все строки
По другому не пробовал.


Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует