Имя: Пароль:
1C
1С v8
Туплю с запросом по ОстаткиИОбороты
0 Ненавижу 1С
 
гуру
28.09.12
12:41
Простейший запрос (можно с параметрами, можно без):

куда уж проще

ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент) КАК НачОст,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент) КАК КонОст
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , МЕСЯЦ, , ) КАК ТоварыНаСкладахОстаткиИОбороты

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Период

УПОРЯДОЧИТЬ ПО
    Период

не равны КонОст текущего и НачОст следующего периода
убираю деление на коэффициент - равны

ЧЯДНТ?
1 ttk
 
28.09.12
12:43
может, по номенклатуре сгруппировать?
2 Ненавижу 1С
 
гуру
28.09.12
12:44
(1) не надо мне группировать по номенклатуре
3 acsent
 
28.09.12
12:45
без сгруппирожвать равны?
4 Classic
 
28.09.12
12:46
Зачем группируешь?
5 Sammo
 
28.09.12
12:46
Навскидку (правда вечер пятницы, поэтому не уверен) - используется .Номенклатура - нявный join с номенклатурой в скулевском запросе.
Имхо, сгруппировать по номенклатуре и периоду, после чего сгруппировать по периоду
6 Ненавижу 1С
 
гуру
28.09.12
12:47
мне нужны остатки по-месячно получить в целом по группе номенклатуры
7 Ненавижу 1С
 
гуру
28.09.12
12:48
(5) ну ты же понимаешь, что математически это одно и тоже, я вижу, что используется неявный JOIN
8 Classic
 
28.09.12
12:50
(6)
Навскидку.
Если убираешь коэф, то динамическая таблица автоматом группирует до периодов. Если ставишь коэф - идет группировка до номенклатура, период. А здесь появляется засада.
Типа, если номенклатура не двигалась в агусте, то остатков по номенклатуре за август не будет(придурошность данной таблицы), соответственно данные цифры и не бегут
9 Rovan
 
гуру
28.09.12
12:50
(0) РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , МЕСЯЦ, ВОТ_ТУТ_ПОПРОБУЙ_ДРУГОЕ_ЗНАЧЕНИЕ, )
10 acsent
 
28.09.12
12:52
сделай с разворотом по номенклатуре и ты сразу увидишь где ошибка
11 Ненавижу 1С
 
гуру
28.09.12
12:53
(8) похоже так и есть, спасибо
более менее разумное объяснение
12 Sammo
 
28.09.12
12:53
(7) Фигушки. Математика не всегда применима. Точно была проблема с использованием комментариев регистраторов.
И кажется был какой-то нюанс с использованием обращений к реквизитам не входящим в группировку.
13 IronDemon
 
28.09.12
12:54
(2) Придется. Во ВЗ группируй. Иначе фигня останется.
14 Classic
 
28.09.12
12:55
Показываю на двух номенклатурах.

Н1  Остаток на начало 0
май   - +10
август - -10

Н2 Остаток на начало 0

июнь  - +30
сентябрь - -30

Без коэфов(неявная группировка только по периоду)

Месяц    Нач  Кон
май       0    10
июнь     10    40
август   40    30
сентябрь 30    0


С коэфами
НН Месяц Нач Кон
Н1 май    0   10
Н2 июнь   0   30
Н1 август 10  0
Н2 сентябрь 30 0

ГРуппируем
май    0   10
июнь   0   30
август 10 0
сентябрь 30 0
15 Ненавижу 1С
 
гуру
28.09.12
13:21
а как же получать ПОЛНЫЕ остатки?
16 Classic
 
28.09.12
13:36
(15)
Извращенно :)
17 По-читатель
 
28.09.12
13:46
(15) А если:

ВЫБРАТЬ Период, НачОст/Коэф, КонОст/Коэф
ИЗ
   (Ваш запрос без деления на коэффициент и группировки)
18 Ненавижу 1С
 
гуру
28.09.12
13:59
(17) коэф у каждой номенклатуры свой
19 Ненавижу 1С
 
гуру
28.09.12
14:10
(16) это точно

ВЫБРАТЬ
   ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
   СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент) КАК НачОст,
   СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент) КАК КонОст
ПОМЕСТИТЬ Основная
ИЗ
   РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачПериода, &КонПериода, Месяц, , Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстаткиИОбороты

СГРУППИРОВАТЬ ПО
   ТоварыНаСкладахОстаткиИОбороты.Период,
   ТоварыНаСкладахОстаткиИОбороты.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
   Основная.Период
ПОМЕСТИТЬ Периоды
ИЗ
   Основная КАК Основная
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Основная.Номенклатура,
   Периоды.Период,
   МАКСИМУМ(Основная.Период) КАК ПериодОстатков
ПОМЕСТИТЬ МаксПериоды
ИЗ
   Периоды КАК Периоды
       ЛЕВОЕ СОЕДИНЕНИЕ Основная КАК Основная
       ПО Периоды.Период >= Основная.Период

СГРУППИРОВАТЬ ПО
   Основная.Номенклатура,
   Периоды.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   МаксПериоды.Период,
   СУММА(ВЫБОР
           КОГДА МаксПериоды.Период = МаксПериоды.ПериодОстатков
               ТОГДА Основная.НачОст
           ИНАЧЕ Основная.КонОст
       КОНЕЦ) КАК НачОст,
   СУММА(Основная.КонОст) КАК КонОст
ИЗ
   МаксПериоды КАК МаксПериоды
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Основная КАК Основная
       ПО МаксПериоды.Номенклатура = Основная.Номенклатура
           И МаксПериоды.ПериодОстатков = Основная.Период

СГРУППИРОВАТЬ ПО
   МаксПериоды.Период

УПОРЯДОЧИТЬ ПО
   МаксПериоды.Период
20 Classic
 
28.09.12
14:12
(19)
Типа такого :)
21 Никола_
Питерский
 
28.09.12
14:12
(19) Вот тебе и простейший запрос )))) Хм... как задачку для собеседования можно пользовать !
22 Classic
 
28.09.12
14:51
(21)
Это даже не изврат. Изврат вот он

ВЫБРАТЬ
    ТаблицаПериодов.Период КАК Период,
    СУММА(
       ВЫБОР
           КОГДА ТаблицаПериодов.Период = ТаблицаПоНоменклатурам.Период
           ТОГДА ТаблицаПоНоменклатурам.КоличествоНачальныйОстаток
           ИНАЧЕ ТаблицаПоНоменклатурам.КоличествоКонечныйОстаток
       КОНЕЦ / ТаблицаПоНоменклатурам.Номенклатура.ЕдиницаДляОтчетов.Коэффициент
    ) КАК НачОст,
    СУММА(
       ТаблицаПоНоменклатурам.КоличествоКонечныйОстаток / ТаблицаПоНоменклатурам.Номенклатура.ЕдиницаДляОтчетов.Коэффициент
    ) КАК КонОст
ИЗ  РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , МЕСЯЦ, , ) КАК ТаблицаПериодов
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(,, МЕСЯЦ, , ) КАК ТаблицаПоНоменклатурам
   ПО (ТаблицаПоНоменклатурам.Номенклатура,ТаблицаПоНоменклатурам.Период) В
       (
       ВЫБРАТЬ
           ТаблицаВложенный.Номенклатура,
           МАКСИМУМ(ТаблицаВложенный.Период)
       ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(,, МЕСЯЦ, , ) КАК ТаблицаВложенный
       ГДЕ
           ТаблицаВложенный.Период <= ТаблицаПериодов.Период
       СГРУППИРОВАТЬ ПО
           ТаблицаВложенный.Номенклатура
       )
СГРУППИРОВАТЬ ПО
    ТаблицаПериодов.Период
23 Ненавижу 1С
 
гуру
28.09.12
14:59
(22) кратко ))
но временными таблицами мне больше нравится
24 Classic
 
28.09.12
15:02
(23)
Твой скорее всего будет быстрее. Даже если в моем ДТ в ВТ вынести.
25 hhhh
 
28.09.12
15:20
(23) это вообще-то фича от фирмы 1С: если простое поле остатка, то остатки нормально берутся, если там не поле, а формула, то тупо всё суммируется.

То есть типа искусственный интеллект: платформа по внешнему виду поля распознает - это поле остатка или поле оборотов и принимает решение.
26 Ненавижу 1С
 
гуру
29.09.12
05:56
(25) ты так написал как будто что-тот стало ясно до запятой, когда препроцессор понимает, а когда нет?
27 Ненавижу 1С
 
гуру
29.09.12
06:18
(12) Математика применима всегда, остальное от лукавого и гуманитариев))