Имя: Пароль:
1C
1С v8
Как несколько результатов запроса объединить в одну таблицу?
0 PCcomCat
 
14.08.13
15:00
Доброго времени, уважаемые!

Возникла задачка: необходимо на каждый день из периода "от ДатаНачала по ДатаОкончания" послучить срез последних по регистру сведений. Но при этом все результаты запроса очень хочется впихнуть в одну ТаблицуЗначений, чтобы затем свернуть.

Крышу сносит, наверное поэтому возникла одна мысль: тупо перебором строк каждого результата запроса запихивать все в общую ТаблицуЗначений.

Но я считаю, что это будет писанина на коленках. Да и чутье подсказывает, что существует более лояльный вариант по времени выполнения.

Подскажите, если конечно такое возможно, как можно по-нормальному такое сотворить?

На вопрос "зачем?" сразу дам ответ "Надо! Хотелка клиента видеть, что было в выбранном периоде, а на конечную дату периода чего-то уже может не быть!".

Заранее благодарю.
1 acsent
 
14.08.13
15:01
сразу одним запросом получай
2 zak555
 
14.08.13
15:01
свернуть ? просуммировать ресурсы ?
3 PCcomCat
 
14.08.13
15:01
(1) Ну туплю, не могу сообразить: КАК? Подскажи, плиз!
4 PCcomCat
 
14.08.13
15:02
(2)Убрать одинаковые записи.
5 1Сергей
 
14.08.13
15:02
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
        ИЗ
   (ВЫБРАТЬ 0 КАК a
   ОБЪЕДИНИТЬ  
   ВЫБРАТЬ 1
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 2
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 3
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 4
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 5
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 6
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 7
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 8
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 9) КАК aa
      ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b
      ОБЪЕДИНИТЬ
   ВЫБРАТЬ 1
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 2
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 3
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 4
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 5
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 6
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 7
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 8
   ОБЪЕДИНИТЬ    
    ВЫБРАТЬ 9) КАК bb
      ПО (ИСТИНА)
      ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c
      ОБЪЕДИНИТЬ
    ВЫБРАТЬ 1
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 2
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 3
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 4
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 5
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 6
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 7
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 8
   ОБЪЕДИНИТЬ    
    ВЫБРАТЬ 9) КАК cc
      ПО (ИСТИНА)
      ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
         0 КАК d
    ОБЪЕДИНИТЬ
    ВЫБРАТЬ 1
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 2
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 3
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 4
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 5
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 6
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 7
   ОБЪЕДИНИТЬ
   ВЫБРАТЬ 8
   ОБЪЕДИНИТЬ    
    ВЫБРАТЬ 9) КАК dd
      ПО (ИСТИНА)
ГДЕ
   aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
6 1Сергей
 
14.08.13
15:02
+ соединить это с твоим запросом
7 PCcomCat
 
14.08.13
15:03
(6) Это стёб? не пятница же!
8 1Сергей
 
14.08.13
15:04
(7) это не стёб
9 PCcomCat
 
14.08.13
15:07
(8) А-а-а! Похоже начинаю понимать. Пойду жевать.

Спасибо!
10 zak555
 
14.08.13
15:08
(4) зачем тогда на каждый день месяца ?
11 PCcomCat
 
14.08.13
15:13
(10) Ну с учетом (5) можно взять тогда РАЗНЫЕ
12 PCcomCat
 
14.08.13
15:17
(10) Система скидок/наценок имеет период действия от до. Одна скидка/наценка может действовать во всем выбранном периоде, другая закончиться где-то посередине, третья начаться где-то посередине, а четвертая может и начаться, и закончиться где-то посередине. А показать нужно всё. Как по-другому?
13 PCcomCat
 
14.08.13
15:19
+(12)Начало действия = НачалоДня, конец действия = КонецДня
14 Zamestas
 
14.08.13
16:06
(0) Развернуть срез последних в запрос, добавить группировку НАЧАЛОПЕРИОДА(Регистр.Период,День)
15 PCcomCat
 
14.08.13
16:09
(14)А можно маленький примерчик?
16 zak555
 
14.08.13
16:10
(12) так тебе нужна тогда просто выборка за период
17 PCcomCat
 
14.08.13
16:10
(12)В смысле выборка за период?
18 Zamestas
 
14.08.13
16:14
(15) Сам с собой регистр соединяешь по
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            МАКСИМУМ(Регистр.Период)
19 acsent
 
14.08.13
16:15
Для начала пойми что такое срез последних
20 Zamestas
 
14.08.13
16:22
(19) Срез последних испортил 1С'ников окончательно.
21 PCcomCat
 
14.08.13
16:31
(19) Что это и для чего его едят я прекрасно понимаю.
22 PCcomCat
 
14.08.13
16:33
Короче тему закрываю. Увсё!

Может и через ж.пу, но РАБОТАЕТ!

Кому интересно (можно какашками закидать) - текст:

    Запрос.Текст = "
    |ВЫБРАТЬ
    |    0 КАК Цифра
    |ПОМЕСТИТЬ ТабЦифр
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    1
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    2
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    3
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    4
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    5
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    6
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    7
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    8
    |    
    |ОБЪЕДИНИТЬ
    |    
    |ВЫБРАТЬ
    |    9
    |;
    |    
    |    ////////////////////////////////////////////////////////////////////////////////
    |    
    |ВЫБРАТЬ
    |    ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) КАК День
    |ПОМЕСТИТЬ ТабДней
    |ИЗ
    |    ТабЦифр КАК ТабЦифр1,
    |    ТабЦифр КАК ТабЦифр2,
    |    ТабЦифр КАК ТабЦифр3,
    |   ТабЦифр КАК ТабЦифр4
    |ГДЕ
    |    ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, ТабЦифр1.Цифра + 10 * ТабЦифр2.Цифра + 100 * ТабЦифр3.Цифра + 1000 * ТабЦифр4.Цифра) <= &ДатаОкончания
    |    
    |ИНДЕКСИРОВАТЬ ПО
    |    День
    |;
    |    
    |    ////////////////////////////////////////////////////////////////////////////////
    |    
    |ВЫБРАТЬ
    |    ТабДней.День
    |ИЗ
    |    ТабДней КАК ТабДней    
    |;
    |    
    |    ////////////////////////////////////////////////////////////////////////////////
    |    
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ДатаНачалаДействия,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ДатаОкончанияДействия,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.Организация,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ТипСистемы,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ТипЦенДокумента,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ТипЦен,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.Контрагент,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.НоменклатурнаяГруппа,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.Номенклатура,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ЗапретСкидки,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ЗапретНаценки,
    |    РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ПроцентСкидкиНаценки
    |ИЗ
    |    РегистрСведений.РС_ХранилищеШаблоновСкидокНаценок КАК РС_ХранилищеШаблоновСкидокНаценокСрезПоследних
    |    
    |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТабДней КАК ТабДней
    |              ПО РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.Период <= ТабДней.день
    |              И РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ДатаНачалаДействия <= ТабДней.день
    |              И (РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ДатаОкончанияДействия = ДАТАВРЕМЯ(1,1,1)
    |              ИЛИ РС_ХранилищеШаблоновСкидокНаценокСрезПоследних.ДатаОкончанияДействия >= ТабДней.день)";
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан