Имя: Пароль:
1C
1С v8
"ВЫБОР КОГДА" что не так написал?
,
0 Vladius
 
11.10.11
14:04
Когда разность между датами 0 в отчете должно отображаться слово "Разовая". Вроде написал все как надо а выводится пустое поле, где ошибочка?

ВЫБРАТЬ
   ВЫБОР
       КОГДА РАЗНОСТЬДАТ(МИНИМУМ(НАЧАЛОПЕРИОДА(Продажи.Регистратор.Дата, ДЕНЬ)), МАКСИМУМ(НАЧАЛОПЕРИОДА(Продажи.Регистратор.Дата, ДЕНЬ)), ДЕНЬ) = 0
           ТОГДА "Разовая"
       ИНАЧЕ РАЗНОСТЬДАТ(МИНИМУМ(НАЧАЛОПЕРИОДА(Продажи.Регистратор.Дата, ДЕНЬ)), МАКСИМУМ(НАЧАЛОПЕРИОДА(Продажи.Регистратор.Дата, ДЕНЬ)), ДЕНЬ) / КОЛИЧЕСТВО(Продажи.Количество)
   КОНЕЦ КАК Интервал,
   Продажи.Номенклатура,
   СУММА(Продажи.Количество) КАК Количество,
   СУММА(Продажи.Себестоимость) КАК Себестоимость,
   СУММА(Продажи.Продажа) КАК Продажа,
   СУММА(Продажи.Продажа - Продажи.Себестоимость) КАК Прибыль,
   ДЕНЬ(&КонецПериода) - ДЕНЬ(МАКСИМУМ(Продажи.Регистратор.Дата)) КАК Срок
ИЗ
   РегистрНакопления.Продажи КАК Продажи

СГРУППИРОВАТЬ ПО
   Продажи.Номенклатура,
   Продажи.Количество
1 Mort
 
11.10.11
14:07
Потому что твои манипуляции выполняются до группировки.
2 Maxus43
 
11.10.11
14:09
РАЗНОСТЬДАТ(МИНИМУМ(НАЧАЛОПЕРИОДА(Продажи.Регистратор.Дата, ДЕНЬ)), МАКСИМУМ(НАЧАЛОПЕРИОДА(Продажи.Регистратор.Дата, ДЕНЬ)), ДЕНЬ)

да и эта хрень всегда одно и тоже вернёт... где логика то в условии?
3 Vladius
 
11.10.11
14:20
(2) Как одно и тоже....где ошибка тогда?
4 Maxus43
 
11.10.11
14:27
разность в днях у 01.01.2010 00:00:00 и 01.01.2010 23:59:59 какая будет?
5 Maxus43
 
11.10.11
14:27
или смысл условия какой вобще?
6 АНДР
 
11.10.11
14:32
Автор, преобразуй результат Когда к одному возвращаемому типу.

ЗЫ Ну вот такие у него условия. Меня лично больше смущает группировка по количеству.
7 Синий зуб
 
11.10.11
14:34
Честно говоря смысл функций МИНИМУМ и МАКСИМУМ в данном контексте совершенно непонятен.
8 y22-k
 
11.10.11
14:37
(0) автор что ты хочешь увидеть в отчете скажи своими словами
9 АНДР
 
11.10.11
14:38
А что не понятного? Номенклатура-то у автора не уникальна.
10 Maxus43
 
11.10.11
14:40
хорош в телепатов играть) автор ушёл
11 Синий зуб
 
11.10.11
14:41
(9) Типа по каждой номенклатуре хочет найти разность в датах между 1 и последним движением?
12 Vladius
 
11.10.11
14:43
Я беру МИНИМУМ(НАЧАЛОПЕРИОДА(Продажи.Регистратор.Дата, ДЕНЬ)) дата первой отгрузки  МАКСИМУМ(НАЧАЛОПЕРИОДА(Продажи.Регистратор.Дата, ДЕНЬ)) дата последней отгрузки. Ну и получаю разность между датами
13 Синий зуб
 
11.10.11
14:50
Я бы все поля из конструкции ВЫБОР КОГДА вывел бы отдельно и посмотрел, че не так получается.
14 Vladius
 
11.10.11
14:56
Что то я совсем запутался (( И дата последней отгрузки у меня неправильно выводится. Ладно буду заново переписывать код, напортачил.
15 АНДР
 
11.10.11
15:03
Убери группировку по количеству.

Замени ИНАЧЕ РАЗНОСТЬДАТ на ИНАЧЕ "" + РАЗНОСТЬДАТ
16 Vladius
 
11.10.11
15:07
(15) не понятно что значит ИНАЧЕ "" + РАЗНОСТЬДАТ
17 АНДР
 
11.10.11
15:21
Принудительное приведение числа к строке. При формировании результата у тебя в первых записях получаются числа и сервер формирует колонку числового типа. Когда появляется строковое значение, оно уже не может быть вставлено в результирующую таблицу.
Кстати, база SQLная?

ЗЫ Выразить использовать нельзя, т.к. функция применяется уже к собранному набору данных.
18 Vladius
 
11.10.11
15:42
(17) База файловая
19 catena
 
11.10.11
15:43
Не правильно используешь мин/макс. Ты сперва сделать сгруппированную выборку, а потом уже из нее бери мин/макс.
20 Vladius
 
11.10.11
16:12
Теперь все работает! Сделал вот так:

ВЫБРАТЬ
   ПродажиОбороты.Номенклатура,
   СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
   СУММА(ПродажиОбороты.СебестоимостьОборот) КАК Себестоимость,
   СУММА(ПродажиОбороты.ПродажаОборот) КАК СуммаПродаж,
   СУММА(ПродажиОбороты.ПродажаОборот - ПродажиОбороты.СебестоимостьОборот) КАК Прибыль,
   ВЫБОР
       КОГДА КОЛИЧЕСТВО(ПродажиОбороты.Регистратор) = 1
           ТОГДА "Разовая"
       ИНАЧЕ РАЗНОСТЬДАТ(МИНИМУМ(ПродажиОбороты.Регистратор.Дата), МАКСИМУМ(ПродажиОбороты.Регистратор.Дата), ДЕНЬ) / КОЛИЧЕСТВО(ПродажиОбороты.Регистратор)
   КОНЕЦ КАК Интервал,
   РАЗНОСТЬДАТ(МАКСИМУМ(ПродажиОбороты.Регистратор.Дата), &КонецПериода, ДЕНЬ) КАК Срок
ИЗ
   РегистрНакопления.Продажи.Обороты(, , Регистратор, ) КАК ПродажиОбороты

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