Имя: Пароль:
1C
 
Как в запросе сгенерировать таблицу всех дат в заданном диапозоне?
0 TormozIT
 
гуру
12.09.06
18:45
Т.е. для 01.02.2006-28.02.2006 должо получиться
01.02.2006
02.02.2006
...
28.02.2006
3 TormozIT
 
гуру
12.09.06
18:48
(1) Согласен, смешно =)
11 Гений 1С
 
гуру
12.09.06
19:46
(10) гениально!
13 TormozIT
 
гуру
12.09.06
22:05
(10) Ужасно непроизводительно, но решение строго отвечает поставленной задаче. Теперь я знаю решение. megalodon браво!
14 TormozIT
 
гуру
12.09.06
22:23
(13) Хотя не строго... Верхняя граница интервала не отслеживается. За счет этого такая непроизводительность.
Оптимизировав, получаем производительный и теперь уже строго отвечающий вариант решения:

ВЫБРАТЬ
   ДОБАВИТЬКДАТЕ(&ДатаНач, День, (Цифры4.Цифра * 1000
                                + Цифры3.Цифра * 100
                                + Цифры2.Цифра * 10
                                + Цифры1.Цифра * 1
                                )) КАК ДатаДень
ИЗ
   (
       ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 1           ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 2            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 3            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 4            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 5            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 6            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 7            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 8            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 9
   ) КАК Цифры1
   СОЕДИНЕНИЕ
   (
       ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 1           ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 2            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 3            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 4            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 5            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 6            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 7            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 8            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 9
   ) КАК Цифры2
   ПО (  Цифры2.Цифра * 10
       + Цифры1.Цифра * 1
       ) <= РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, День)
   СОЕДИНЕНИЕ
   (
       ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 1           ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 2            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 3            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 4            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 5            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 6            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 7            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 8            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 9
   ) КАК Цифры3
   ПО (  Цифры3.Цифра * 100
       + Цифры2.Цифра * 10
       + Цифры1.Цифра * 1
       ) <= РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, День)
   СОЕДИНЕНИЕ
   (
       ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 1           ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 2            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 3            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 4            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 5            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 6            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 7            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 8            ОБЪЕДИНИТЬ ВСЕ
       ВЫБРАТЬ 9
   ) КАК Цифры4
   ПО (  Цифры4.Цифра * 1000
       + Цифры3.Цифра * 100
       + Цифры2.Цифра * 10
       + Цифры1.Цифра * 1
       ) <= РАЗНОСТЬДАТ(&ДатаНач, &ДатаКон, День)
УПОРЯДОЧИТЬ ПО ДатаДень
18 TormozIT
 
гуру
12.09.06
23:07
приведи полный пример с запросом.
19 Magic
 
12.09.06
23:17
Пример похож на первый отчет из книги "Практическое пособие разработчика", так же есть на ИТС:
Процедура КассоваяКнига(ТабДок, ДатаНачала, ДатаОкончания) Экспорт
   Макет = ОтчетОбъект.ПолучитьМакет("КассоваяКнига");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    КассаОстаткиИОбороты.Период КАК Период,
   |    КассаОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
   |    КассаОстаткиИОбороты.СуммаПриход КАК СуммаПриход,
   |    КассаОстаткиИОбороты.СуммаРасход КАК СуммаРасход,
   |    КассаОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток
   |ИЗ
   |    РегистрНакопления.Касса.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, День, , ) КАК КассаОстаткиИОбороты
   |ИТОГИ
   |    СУММА(СуммаНачальныйОстаток),
   |    СУММА(СуммаПриход),
   |    СУММА(СуммаРасход),
   |    СУММА(СуммаКонечныйОстаток)
   |ПО
   |    ОБЩИЕ,
   |    Период ПЕРИОДАМИ(ДЕНЬ, &ДатаНачала, &ДатаОкончания)";

   Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
   Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);

   Результат = Запрос.Выполнить();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
   ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги");
   ОбластьПериод = Макет.ПолучитьОбласть("Период");

   ТабДок.Очистить();
   ТабДок.Вывести(ОбластьЗаголовок);
   ТабДок.Вывести(ОбластьШапкаТаблицы);
   ТабДок.НачатьАвтогруппировкуСтрок();

   ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

   ВыборкаОбщийИтог.Следующий();        // Общий итог
   ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
   ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());

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

   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);
КонецПроцедуры
20 MikleV
 
12.09.06
23:30
(10),(14) мозхи:)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.