Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по запросу в отчете  (Прочитано 26199 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Мирка
Интересующийся

ru
Offline Offline

« : 06-05-2010 08:06 » 

Ситуация в следующем: делаю запрос по документу, все прекрасно работает до тех пор , пока в документе не попадается строк с одинаковым наименованием:
Пример: в доке строки
1 кружка -1шт
2 тарелка-1шт
3 чашка-1шт
4 кружка-1шт

итого получатся 4 строчки в документе, а в отчет выводится только 3, вторую кружку напрочь не видит! Почему? помогите, пожалуйста, всю голову сломала уже...
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 06-05-2010 09:20 » 

Запрос процитируй
Записан
Мирка
Интересующийся

ru
Offline 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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 07-05-2010 07:16 » 

Мирка, бр... а где кружка?

у тебя же группировка, и групповые функции.
Где кружка?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Мирка
Интересующийся

ru
Offline Offline

« Ответ #4 : 07-05-2010 07:37 » 

ну.. про кружку я образно, это моя прога для мед. центра для учета людей в разрезе страх. компаний
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 07-05-2010 07:51 » 

Мирка, убери группировку
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Мирка
Интересующийся

ru
Offline Offline

« Ответ #6 : 07-05-2010 07:59 » 

ээмм... какую именно? и если я уберу группировки в отчет вообще ничего не выйдет? разве не так? (я просто самоучка и многого могу не знать, так что не злитесь, если что)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 07-05-2010 08:14 » 

Все группировки

А пробовать слабо? тем более если изучение методом тыка.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Мирка
Интересующийся

ru
Offline Offline

« Ответ #8 : 07-05-2010 08:26 » 

Попробовала... и как и предполагала ни однойй строчки в отчете:(    Группировка- это , грубо говоря, колонка в отчете, или как?  чет я совсем запуталась...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 07-05-2010 08:36 » 

Мирка, не верю!!!!

Группировка это не колонка в отчете

Колонка это
контрагент   Полис ...

|Посуда
|Количество
|Группировка Посуда
|Группировка Количество
Ты и получишь

Кружка 1


Если убрать группировки то у тебя должно получится
кружка 1
кружка 1
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Мирка
Интересующийся

ru
Offline Offline

« Ответ #10 : 07-05-2010 08:45 » 

ок, как убрать? так?
   |Период с ВыбНачПериода по ВыбКонПериода;
   |СтрахКомпания = Документ.Прием.СтрахКомпания;
   |контрагент = Документ.Прием.контрагент;
   |Услуга = Документ.Прием.Услуга;
   |Код = Документ.Прием.Код;
   |Кол = Документ.Прием.Кол;
   |Цена = Документ.Прием.Цена;
   |Сумма = Документ.Прием.Сумма;
   |Полис = Документ.Прием.Полис;
   |ДатаДок = Документ.Прием.ДатаДок;
   |Функция КолСумма = Сумма(Кол);
//   |Группировка контрагент;
//   |Группировка Услуга;
//   |Группировка Код;
//   |Группировка Кол;
//   |Группировка Цена;
//   |Группировка Сумма;
//   |Группировка Полис;
//   |Группировка ДатаДок;
   |Условие(СтрахКомпания в ВыбСтрахКомпания);

или как-то по другому? и что тогда означает вот это:

   Пока Запрос.Группировка(1) = 1 Цикл
      // Заполнение полей контрагент
   //   Таб.ВывестиСекцию("контрагент");
      Пока Запрос.Группировка(2) = 1 Цикл
         // Заполнение полей Услуга
      //   Таб.ВывестиСекцию("Услуга");
                                              ...

это же теряет всякий смысл...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 07-05-2010 08:49 » 

Мирка, давай поступим проще
вот сюда http://www.blaga.ru/1Cbook/tutor_1c/zapros.htm для самостоятельной работы.


зы. Я так давно видел 1С, что могу чего-нибудь не так ляпнуть.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Мирка
Интересующийся

ru
Offline Offline

« Ответ #12 : 07-05-2010 08:57 » 

за ссылку спс, мож найду что, на первый взглад примитивно, это я сама могу сделать, у меня сложнее:(( и не по справочнику... эх... мож кто еще подскажет, а?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 07-05-2010 09:11 » 

Мирка, ничего у тебя не сложнее

У тебя всего лишь одна таблица

Ты просто разберись со словам Группировка.

в SQL это Group by

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 07-05-2010 15:48 » 

Sla, К сожалению в 1С 7.7 с запросами не так просто разобраться. Это для 8.Х можно прямые паралели проводить между языком запросов 1С и SQL - там просто перевели и оставили всю структуру SQL.
В 7.7 сделали по-своему - и получилось через ж***. Кроме того во встроенной справке (7.7) мало информации про запросы. В 7.7 если в запросе не будет ни одной группировки - то, по-моему, он ничего не выведет (по крайней мере я такие не использовал).

Мирка, В главном Sla прав - у тебя проблема с группировками. А не выводит - потому что ты запрос, процедуру и таблицу генерировала через конструктор запросов и не разобралась что у тебя получилось. То, что тебе посоветовал Sla (убрать группировку) нужно было сделать через конструктор - тогда бы он подправил и циклы обхода, и таблицу для вывода. Как вариант - попробуй добавить группировку по номеру строки документа.
Записан
Мирка
Интересующийся

ru
Offline Offline

« Ответ #15 : 07-05-2010 18:18 » 

ок, спс, я попробую
Записан
Мирка
Интересующийся

ru
Offline Offline

« Ответ #16 : 07-05-2010 18:24 » 

Самое интересное, если я добавляю Функцию, кот считаетколичество сумм в доке- запрос выводит правильное количество сумм, а строк все равно на одну меньше... Мне единственно что не понятно- почему запрос работает, если строки НЕ повторяются, а как только повтор наименования- все, игнор полный. А если убрать повтор строку, но добавить количество- суммы встают првильно..
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 07-05-2010 21:46 » 

Kivals, я не спорю, я ж говорю- 1С видел так давно, что аж страшно вспомнить. (пытался заполнить паузу Улыбаюсь )
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dest
Опытный

ru
Offline Offline

« Ответ #18 : 07-05-2010 22:09 » 

Самое интересное, если я добавляю Функцию, кот считаетколичество сумм в доке- запрос выводит правильное количество сумм, а строк все равно на одну меньше... Мне единственно что не понятно- почему запрос работает, если строки НЕ повторяются, а как только повтор наименования- все, игнор полный. А если убрать повтор строку, но добавить количество- суммы встают првильно..
Сворачиваются потому что одинаковые строки.
Попробуй оставить только группировку:
Код:
   |Группировка Код;
« Последнее редактирование: 08-05-2010 03:27 от Dest » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 08-05-2010 08:59 » 

Sla, Спасибо Улыбаюсь
Dest, ИМХО - не поможет.
Мирка, а вот тут уже просто твое непонимание основ: Группировка - она на то и группировка чтобы собирать одинаковые значения в одну строку, а Сумма (в терминах SQL) - это агрегатная функция, которая оперирирует со значениями в колоках, собранных из разных данных в одну строку
Записан
Мирка
Интересующийся

ru
Offline Offline

« Ответ #20 : 10-05-2010 10:24 » 

хм... печально... и что нет способа заставить запрос увидеть две одинаковые строки? Может запрос предназначен для работы  только со справочниками? Придется тогда ручками циклы делать:((
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 10-05-2010 10:32 » new

Мирка, нет!


|Функция КолСумма = Сумма(Кол); групповая функция для этого и нужна группировка

А тебе нужен чистый запрос.

А потом при разборе пробегай по результату без всяких там Пока Запрос.группировка.


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 11-05-2010 05:14 » 

... пробегай по результату без всяких там Пока Запрос.группировка.
Sla, нет такого в 1С Улыбаюсь. Способ выбора из запроса - только по группировке, иначе вернет только итоговые данные.

Мирка, ты пробовала добавить группировку по номеру строки? Результат?
Записан
Мирка
Интересующийся

ru
Offline Offline

« Ответ #23 : 12-05-2010 06:00 » 

Kivals, спс ОГРОМНОЕ!! с группировкой по строкам все вышло:))))
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines