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