Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запросы
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
ReDll
Задание вроде бы проще некуда, выбрать документы по регистрам за определенный период...

У меня получается код:


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

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



Документы выбирает...
Но за весь период существования базы, а не за указанный период...
Конфигурация не стандартная... Но не могли же авторы поменять суть запросов... Или могли?
Помогите пожалуйста, подскажите в чем ошибка...
Спасибо.
Fynjy
Плохо с логикой у тебя в запросе ...
Получаешь остатки за период в которых могут быть различные документы за разные периоды ...
Период с д1 по д2;
ТекущийДокумент = Регистр.Р.ТекущийДокумент; //Это документ движения он тебе нужен ...
Группировка ТекущийДокумент;
ReDll
Если я правильно поняла, то Вы имете ввиду так:

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

Но в данном случае мне не вывелись документы вообще....
Fynjy
Не правильно поняли ... Вам нужен документ движения -
Цитата
выбрать документы по регистрам
. Соответственно в запросе указывается период для чего? Правильно для регистра ... А не для значений реквизита этого регистра ...
ReDll
Получается, что в регистрах за один день есть документы за все время существование базы?

упд.

Вроде дошло...
И как же тогда указать, что б по регистрам выбрало одокументы за нужный период, если первая строка указывает период для регистров....?
Batchir
Так как написал Fynjy


"//{{ЗАПРОС(ТекстЗапроса)
|Период с ВыбНачПериода по ВыбКонПериода;
|Докум = Регистр.Касса.ТекущийДокумент;
|Группировка Докум;
|";


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

Документы не выводит совсем (в группировку не заходит)

Ладно, как выход, ставлю отбор по дате после запроса....
Правда запрос долго работает sad.gif
alex1c
Цитата(ReDll @ 13.10.09, 19:04) необходимо зарегистрироваться для просмотра ссылки
ТекстЗапроса =
"//{{ЗАПРОС(ТекстЗапроса)
|Период с ВыбНачПериода по ВыбКонПериода;
|Докум = Регистр.Касса.ТекущийДокумент;
|Сумма = Регистр.Касса.Сумма;
|Фирма = Регистр.Касса.Чек.Предприятие;
|Функция СуммаНачОст = НачОст(Сумма);
|Функция СуммаКонОст = КонОст(Сумма);
|Группировка Докум;
|"//}}ЗАПРОС
;

Документы не выводит совсем (в группировку не заходит)

Ладно, как выход, ставлю отбор по дате после запроса....
Правда запрос долго работает sad.gif


что-бы выводилась "Группировка Докум" тогда добавьте в запрос:
|Функция СуммаПриход = Приход(Сумма);
или
|Функция СуммаРасход = Расход(Сумма);
ивсе....
ReDll
Спасибо огромное, все заработало!!! smile.gif icon_beer17.gif

А вот другой запрос...
Не отбирает ни по товару ни по фирме... 19000000.gif



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

Если ВыбФирма.Выбран()=1 Тогда
ТекстЗап=ТекстЗап+"
|Условие (Фирма = ВыбФирма);
|"//}}ЗАПРОС
;
КонецЕсли;
Если ВыбТовар.Выбран()=1 Тогда
ТекстЗап=ТекстЗап+"
|Условие (Товар.ПринадлежитГруппе(ВыбТовар)=1);
|"//}}ЗАПРОС
;
КонецЕсли;

// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;



Выдает все документы вне зависимости от выбранной фирмы и группы товаров... sad.gif

З.Ы. Есть ли толковая книга по тонкостям запросов?
liksoft
Насколько я понимаю, Условие(...) должно стоять до функции и группировки. где то так...


Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ПродВсегоСклад)
|Период с ВыбНачПериода по ВыбКонПериода;
|Товар = Регистр.ОстаткиТоваров.Товар;
|Док = Регистр.ОстаткиТоваров.ТекущийДокумент;
|Фирма = Регистр.ОстаткиТоваров.Предприятие;
|Кол = Регистр.ОстаткиТоваров.Количество;
|БазСто = Регистр.ОстаткиТоваров.СуммаСНДСЗак;
|";

Если ВыбФирма.Выбран()=1 Тогда
ТекстЗап=ТекстЗап+"
|Условие (Фирма = ВыбФирма);
|";

КонецЕсли;
Если ВыбТовар.Выбран()=1 Тогда
ТекстЗап=ТекстЗап+"
|Условие (Товар.ПринадлежитГруппе(ВыбТовар)=1);
|";
КонецЕсли;

ТекстЗап = ТекстЗап + "
|Функция ПрихКол = Приход(Кол);
|Функция РасхКол = Расход(Кол);
|Функция ПрихСто = Приход(БазСто);
|Функция РасхСто = Расход(БазСто);
|Группировка Товар;
|Группировка Док;
|";


// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
zetovich
ответ дали еще 2 постом.
и вопрос уже давно наверно решен.
ReDll
Далее следовал второой вопрос по другому запросу, на который дали ответ.
Или мне на каждую проблему с запросом создавать отдельную тему? (учитывая, что проблема может быть на 1 ответ...)
MATEVI
Почему |Условие (Товар.ПринадлежитГруппе(ВыбТовар)=1);

А не |Условие (Товар В ВыбТовар);

А еще есть полезная штука конструктор запросов и отчетов. Я бы порекомендовал ее использовать при первом построении запроса...
Batchir
Цитата(ReDll @ 15.10.09, 10:30) необходимо зарегистрироваться для просмотра ссылки
Далее следовал второой вопрос по другому запросу, на который дали ответ.
Или мне на каждую проблему с запросом создавать отдельную тему? (учитывая, что проблема может быть на 1 ответ...)


Ну 1 - 2 вопроса ещё можно совместить, но больше не желательно. Поймите, желания перечитывать то что уже решено нет, а представте что Вы напишите пять проблемных запросов, два решаться три нет, прийдется постоянно бегать между топиками что бы понять к какому запросу относится ответ? Такие топики я прохожу мимо. Так что создавайте на каждую проблему отдельныую ветку. В первом посте описываем её, а в последующих ищем решение и не будет возникать лишних вопросов.
W-divin
Цитата(ReDll @ 14.10.09, 18:33) необходимо зарегистрироваться для просмотра ссылки
Спасибо огромное, все заработало!!! smile.gif icon_beer17.gif

А вот другой запрос...
Не отбирает ни по товару ни по фирме... 19000000.gif



Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ПродВсегоСклад)
|Период с ВыбНачПериода по ВыбКонПериода;
...
|"//}}ЗАПРОС
;

Если ВыбФирма.Выбран()=1 Тогда
ТекстЗап=ТекстЗап+"
|Условие (Фирма = ВыбФирма);
|"//}}ЗАПРОС
;
КонецЕсли;
...
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;



Выдает все документы вне зависимости от выбранной фирмы и группы товаров... sad.gif

З.Ы. Есть ли толковая книга по тонкостям запросов?


А разве дело не в именах переменных? В условии на Фирму и Товар написана переменная "ТЕКСТЗАП" а в начале и параметр в Выполнить "ТЕКСТЗАПРОСА".
Batchir
Ай, 58000000.gif , и действиельно, и никто даже не обратил внимание ...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.