Мирка
Интересующийся
Offline
|
|
« : 06-05-2010 08:06 » |
|
Ситуация в следующем: делаю запрос по документу, все прекрасно работает до тех пор , пока в документе не попадается строк с одинаковым наименованием: Пример: в доке строки 1 кружка -1шт 2 тарелка-1шт 3 чашка-1шт 4 кружка-1шт
итого получатся 4 строчки в документе, а в отчет выводится только 3, вторую кружку напрочь не видит! Почему? помогите, пожалуйста, всю голову сломала уже...
|
|
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #1 : 06-05-2010 09:20 » |
|
Запрос процитируй
|
|
|
Записан
|
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #2 : 07-05-2010 06:59 » |
|
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |контрагент = Документ.Прием.контрагент; |Полис = Документ.Прием.Полис; |Услуга = Документ.Прием.Услуга; |Код = Документ.Прием.Код; |ДатаДок = Документ.Прием.ДатаДок; |Кол = Документ.Прием.Кол; |Цена = Документ.Прием.Цена; |Сумма = Документ.Прием.Сумма; |СтрахКомпания = Документ.Прием.СтрахКомпания; |Группировка контрагент; |Группировка Полис; |Группировка ДатаДок; |Группировка Услуга; |Группировка Код; |Группировка Кол; |Группировка Цена; |Группировка Сумма; |Условие(СтрахКомпания в ВыбСтрахКомпания); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); ИтогОбщ=0; Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей контрагент Таб.ВывестиСекцию("контрагент"); ИтогоСумма=0; Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей Полис // Таб.ВывестиСекцию("Полис"); Пока Запрос.Группировка(3) = 1 Цикл // Заполнение полей ДатаДок // Таб.ВывестиСекцию("ДатаДок"); Пока Запрос.Группировка(4) = 1 Цикл // Заполнение полей Услуга // Таб.ВывестиСекцию("Услуга"); Пока Запрос.Группировка(5) = 1 Цикл // Заполнение полей Код // Таб.ВывестиСекцию("Код"); Пока Запрос.Группировка(6) = 1 Цикл // Заполнение полей Кол // Таб.ВывестиСекцию("Кол"); Пока Запрос.Группировка(7) = 1 Цикл // Заполнение полей Цена // Таб.ВывестиСекцию("Цена"); // ИтогОбщ=ИтогОбщ+Запрос.Сумма; Пока Запрос.Группировка(8) = 1 Цикл // Заполнение полей Сумма Таб.ВывестиСекцию("Сумма"); ИтогоСумма=ИтогоСумма+Запрос.Сумма; ИтогОбщ=ИтогОбщ+Запрос.Сумма; //Сообщить(ИтогОбщ); КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; Таб.ВывестиСекцию("Итог");
КонецЦикла; //Сообщить(ИтогОбщ); Таб.ВывестиСекцию("ИтогОбщ"); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #3 : 07-05-2010 07:16 » |
|
Мирка, бр... а где кружка?
у тебя же группировка, и групповые функции. Где кружка?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #4 : 07-05-2010 07:37 » |
|
ну.. про кружку я образно, это моя прога для мед. центра для учета людей в разрезе страх. компаний
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 07-05-2010 07:51 » |
|
Мирка, убери группировку
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #6 : 07-05-2010 07:59 » |
|
ээмм... какую именно? и если я уберу группировки в отчет вообще ничего не выйдет? разве не так? (я просто самоучка и многого могу не знать, так что не злитесь, если что)
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #7 : 07-05-2010 08:14 » |
|
Все группировки
А пробовать слабо? тем более если изучение методом тыка.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #8 : 07-05-2010 08:26 » |
|
Попробовала... и как и предполагала ни однойй строчки в отчете:( Группировка- это , грубо говоря, колонка в отчете, или как? чет я совсем запуталась...
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #9 : 07-05-2010 08:36 » |
|
Мирка, не верю!!!!
Группировка это не колонка в отчете
Колонка это контрагент Полис ...
|Посуда |Количество |Группировка Посуда |Группировка Количество Ты и получишь
Кружка 1
Если убрать группировки то у тебя должно получится кружка 1 кружка 1
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #10 : 07-05-2010 08:45 » |
|
ок, как убрать? так? |Период с ВыбНачПериода по ВыбКонПериода; |СтрахКомпания = Документ.Прием.СтрахКомпания; |контрагент = Документ.Прием.контрагент; |Услуга = Документ.Прием.Услуга; |Код = Документ.Прием.Код; |Кол = Документ.Прием.Кол; |Цена = Документ.Прием.Цена; |Сумма = Документ.Прием.Сумма; |Полис = Документ.Прием.Полис; |ДатаДок = Документ.Прием.ДатаДок; |Функция КолСумма = Сумма(Кол); // |Группировка контрагент; // |Группировка Услуга; // |Группировка Код; // |Группировка Кол; // |Группировка Цена; // |Группировка Сумма; // |Группировка Полис; // |Группировка ДатаДок; |Условие(СтрахКомпания в ВыбСтрахКомпания);
или как-то по другому? и что тогда означает вот это:
Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей контрагент // Таб.ВывестиСекцию("контрагент"); Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей Услуга // Таб.ВывестиСекцию("Услуга"); ...
это же теряет всякий смысл...
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #11 : 07-05-2010 08:49 » |
|
Мирка, давай поступим проще вот сюда http://www.blaga.ru/1Cbook/tutor_1c/zapros.htm для самостоятельной работы. зы. Я так давно видел 1С, что могу чего-нибудь не так ляпнуть.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #12 : 07-05-2010 08:57 » |
|
за ссылку спс, мож найду что, на первый взглад примитивно, это я сама могу сделать, у меня сложнее:(( и не по справочнику... эх... мож кто еще подскажет, а?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #13 : 07-05-2010 09:11 » |
|
Мирка, ничего у тебя не сложнее
У тебя всего лишь одна таблица
Ты просто разберись со словам Группировка.
в SQL это Group by
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Kivals
|
|
« Ответ #14 : 07-05-2010 15:48 » |
|
Sla, К сожалению в 1С 7.7 с запросами не так просто разобраться. Это для 8.Х можно прямые паралели проводить между языком запросов 1С и SQL - там просто перевели и оставили всю структуру SQL. В 7.7 сделали по-своему - и получилось через ж***. Кроме того во встроенной справке (7.7) мало информации про запросы. В 7.7 если в запросе не будет ни одной группировки - то, по-моему, он ничего не выведет (по крайней мере я такие не использовал).
Мирка, В главном Sla прав - у тебя проблема с группировками. А не выводит - потому что ты запрос, процедуру и таблицу генерировала через конструктор запросов и не разобралась что у тебя получилось. То, что тебе посоветовал Sla (убрать группировку) нужно было сделать через конструктор - тогда бы он подправил и циклы обхода, и таблицу для вывода. Как вариант - попробуй добавить группировку по номеру строки документа.
|
|
|
Записан
|
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #15 : 07-05-2010 18:18 » |
|
ок, спс, я попробую
|
|
|
Записан
|
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #16 : 07-05-2010 18:24 » |
|
Самое интересное, если я добавляю Функцию, кот считаетколичество сумм в доке- запрос выводит правильное количество сумм, а строк все равно на одну меньше... Мне единственно что не понятно- почему запрос работает, если строки НЕ повторяются, а как только повтор наименования- все, игнор полный. А если убрать повтор строку, но добавить количество- суммы встают првильно..
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #17 : 07-05-2010 21:46 » |
|
Kivals, я не спорю, я ж говорю- 1С видел так давно, что аж страшно вспомнить. (пытался заполнить паузу )
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dest
Опытный
Offline
|
|
« Ответ #18 : 07-05-2010 22:09 » |
|
Самое интересное, если я добавляю Функцию, кот считаетколичество сумм в доке- запрос выводит правильное количество сумм, а строк все равно на одну меньше... Мне единственно что не понятно- почему запрос работает, если строки НЕ повторяются, а как только повтор наименования- все, игнор полный. А если убрать повтор строку, но добавить количество- суммы встают првильно..
Сворачиваются потому что одинаковые строки. Попробуй оставить только группировку:
|
|
« Последнее редактирование: 08-05-2010 03:27 от Dest »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #19 : 08-05-2010 08:59 » |
|
Sla, Спасибо Dest, ИМХО - не поможет. Мирка, а вот тут уже просто твое непонимание основ: Группировка - она на то и группировка чтобы собирать одинаковые значения в одну строку, а Сумма (в терминах SQL) - это агрегатная функция, которая оперирирует со значениями в колоках, собранных из разных данных в одну строку
|
|
|
Записан
|
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #20 : 10-05-2010 10:24 » |
|
хм... печально... и что нет способа заставить запрос увидеть две одинаковые строки? Может запрос предназначен для работы только со справочниками? Придется тогда ручками циклы делать:((
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #21 : 10-05-2010 10:32 » |
|
Мирка, нет!
|Функция КолСумма = Сумма(Кол); групповая функция для этого и нужна группировка
А тебе нужен чистый запрос.
А потом при разборе пробегай по результату без всяких там Пока Запрос.группировка.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Kivals
|
|
« Ответ #22 : 11-05-2010 05:14 » |
|
... пробегай по результату без всяких там Пока Запрос.группировка. Sla, нет такого в 1С . Способ выбора из запроса - только по группировке, иначе вернет только итоговые данные. Мирка, ты пробовала добавить группировку по номеру строки? Результат?
|
|
|
Записан
|
|
|
|
Мирка
Интересующийся
Offline
|
|
« Ответ #23 : 12-05-2010 06:00 » |
|
Kivals, спс ОГРОМНОЕ!! с группировкой по строкам все вышло:))))
|
|
|
Записан
|
|
|
|
|