Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запрос не отрабатывает (DBF)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
kimonus
Здравствуйте! помогите, пожалуйста разобраться!
Делаю два разных запроса в базе. Один отрабатывает, а второй - нет. Сколько не вчитывался - не могу понять, в чем причина. Кстати, тот, который не работает, писал я ))). Ниже запросы:
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    Перем test2;
    Если ВыбКонПериода > ПолучитьДатуТА() Тогда
        ВыбКонПериода = ПолучитьДатуТА();
    КонецЕсли;
    test2="ПриходнаяНакладная";
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Товар = Регистр.ДвижениеТоваров.Товар;
    |Склад = Регистр.ДвижениеТоваров.Склад;
    |Поставщик = Регистр.ДвижениеТоваров.Поставщик;
    |Колво = Регистр.ДвижениеТоваров.Колво;
    |ДатаПрих = Регистр.ДвижениеТоваров.Товар.ДатаПрих;
    |Вес = Регистр.ДвижениеТоваров.Вес;
    |Цена = Регистр.ДвижениеТоваров.Цена;  
    |ТекущийДокумент = Регистр.ДвижениеТоваров.ТекущийДокумент;
    |Скидка = Регистр.ДвижениеТоваров.Скидка;
    |Функция КолвоПриход = Приход(Колво);
//    |Функция СкидкаРасход = Расход(Скидка);
    |Функция ВесПриход = Приход(Вес);
    |Функция ЦенаПриход = Приход(Цена);
       |Группировка Склад упорядочить по Склад.Наименование;  
    |Группировка Поставщик упорядочить по Поставщик.Наименование;
    |Группировка Товар упорядочить по Товар.Наименование;
    |Условие(Товар в ВыбТовар);
    |Условие(Склад в ВыбСклад);  
    |Условие (не(Склад = ВыбСклад1));    
    |Условие(Поставщик в ВыбПоставщик);  
    |Условие(ТекущийДокумент.вид()=test2);
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;                                  
    СуммаИтого=0;
    СкидкаИтого=0;
    ВесИтого=0;
    КолвоИтого=0;
    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);  
    Пока Запрос.Группировка(1) = 1 Цикл  
        Таб.ВывестиСекцию("Склад");    
        Пока Запрос.Группировка(2) = 1 Цикл  
            Таб.ВывестиСекцию("Поставщик");    
            Пока Запрос.Группировка(3) = 1 Цикл  
                Если Запрос.Товар.ЭтоГруппа() = 0 Тогда
                    
                    Если Запрос.КолвоПриход > 0 Тогда  
                        Таб.ВывестиСекцию("Товар");
                        СуммаИтого=суммаитого+запрос.ценаПриход;
                        ВесИтого=веситого+запрос.весприход;
                        КолвоИтого=колвоитого+запрос.колвоприход;
                    КонецЕсли;
            
                
            Иначе                            
                Таб.ВывестиСекцию("ГруппаТовар");
                
            КонецЕсли;  
                КонецЦикла;
        КонецЦикла;
        
    конеццикла;        
    // Заполнение полей "Итого"
    Таб.ВывестиСекцию("Итого");
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Остатки товаров на складе", "");
КонецПроцедуры

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

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Товар
        Таб.ВывестиСекцию("Товар");
        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей Склад
            Таб.ВывестиСекцию("Склад");
        КонецЦикла;
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры


Во втором (неработающем) запросе в группировке почему-то 0 элементов
-=VJ=-
Цитата(kimonus @ 25.05.11, 16:12) необходимо зарегистрироваться для просмотра ссылки
Во втором (неработающем) запросе в группировке почему-то 0 элементов


Для начала период нормально задайте (см. первый запрос)
mister-x
Цитата
Во втором (неработающем) запросе в группировке почему-то 0 элементов
отже, другий запит виконується - тоді
НачГода(ТекущаяДата()
і
ТекущаяДата()
винести за запит (присвоїти змінним) і за допомогою них, задати період як в першому запиті.
kimonus
Сделал, как Вы предложили. Теперь процедура выглядит так:
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    НП = НачГода(ТекущаяДата());
    КП = ТекущаяДата();
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с НП по КП;
    |Товар = Регистр.ДвижениеТоваров.Товар;
    |Склад = Регистр.ДвижениеТоваров.Склад;
    |Группировка Товар упорядочить по Товар.Наименование;
    |Группировка Склад упорядочить по Склад.Наименование;
    |Условие(Склад в ВыбСклады);
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Товар
        Таб.ВывестиСекцию("Товар");
        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей Склад
            Таб.ВывестиСекцию("Склад");
        КонецЦикла;
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры


Но, все равно, на выходе - ничего
Valerka
Склад выбираете правильный? Есть на нем товар?
Ardi
добавить в запрос сумму/количество прихода, расхода .
Valerka
Проще - Группировка Товар Все
kimonus
Цитата(Valerka @ 26.05.11, 9:37) необходимо зарегистрироваться для просмотра ссылки
Склад выбираете правильный? Есть на нем товар?

Да, товар есть. Как подверждение - первый запрос отрабатывает как нужно


Цитата(Ardi @ 26.05.11, 9:43) необходимо зарегистрироваться для просмотра ссылки
добавить в запрос сумму/количество прихода, расхода .

в смысле, функцию? но ее нет и в первом запросе, а он работает


Цитата(Valerka @ 26.05.11, 10:04) необходимо зарегистрироваться для просмотра ссылки
Проще - Группировка Товар Все

Это не помогло

Даже с точки зрения чистой логики: чем отличаются принципиально оба запроса? у меня не хватает опыта оценить ))
Ziam
А переменная ВыбСклады что это?
kimonus
Цитата(Ziam @ 26.05.11, 13:32) необходимо зарегистрироваться для просмотра ссылки
А переменная ВыбСклады что это?

Это значение из справочника - выбирается на форме. Я пробовал закомментировать условие, может, без него отработало бы. Но не отработало sad.gif
Ardi
Цитата(kimonus @ 26.05.11, 13:45) необходимо зарегистрироваться для просмотра ссылки
в смысле, функцию? но ее нет и в первом запросе, а он работает

В первом запросе функция есть.
Acid
Ясен пень нет результата запроса - а где вы указали в запросе хотя бы один ресурс выбирать?
|Колво = Регистр.ДвижениеТоваров.Колво;
|Функция КолвоПриход = Приход(Колво);
kimonus
Цитата(Acid @ 26.05.11, 14:03) необходимо зарегистрироваться для просмотра ссылки
Ясен пень нет результата запроса - а где вы указали в запросе хотя бы один ресурс выбирать?
|Колво = Регистр.ДвижениеТоваров.Колво;
|Функция КолвоПриход = Приход(Колво);


Спасибо большое, завелось )) Я только начинаю с 1с. Не оч понял логику запроса - думал, что если составить так, как было, он просто выберет ВСЕ значения из базы. А получается, что обязательно нужно использовать функцию?
Ardi
Как в сегда. Я отвечаю правильно, а плюсики другим.
mister-x
Дійсно по регістрам накопичення повинні бути функції в запиті (сума, кількість...) - про це і в літературі жовтенькій сказано.
kimonus
Цитата(Ardi @ 26.05.11, 14:44) необходимо зарегистрироваться для просмотра ссылки
Как в сегда. Я отвечаю правильно, а плюсики другим.

ИзвиниТЕ, это я от радости )))

Цитата(mister-x @ 26.05.11, 14:51) необходимо зарегистрироваться для просмотра ссылки
Дійсно по регістрам накопичення повинні бути функції в запиті (сума, кількість...) - про це і в літературі жовтенькій сказано.

посоветуеТЕ что-нибудь? я имею в виду литературу
Vofka
Цитата
посоветуеТЕ что-нибудь? я имею в виду литературу

Для этого есть целый раздел. Т.к. тема решена, то для предотвращения флуда - она закрывается icon_holy7.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.