Имя: Пароль:
1C
1С v8
Помогите с запросом
0 pmb
 
19.09.11
16:37
Уже часа 3 не могу придумать как написать запрос.
Дана выборка, в которой есть колонки Номенклатура, Склад и Количество.
Одна и та же номенклатура может быть на нескольких складах. Один склад всегда основной

Нужно получить для каждой номенклатуры одну запись в выборке, если она есть на основном складе - то количество этого склада, если ее на основном нет - то по любому первому складу.
1 and2
 
19.09.11
16:40
ну так выбери всю номенклату что есть на основном складе.
и остальную, которой нет в предыдущей выборке.
пакетный запрос тебе в помощь.
2 pmb
 
19.09.11
16:41
это я уже придумал. Хочу что-нить хитрее найти ;)
3 Megas
 
19.09.11
16:43
(2) Зачем ?

Много складов?
Можно сделать так =)  В цикле текст запроса дописать чтоб там было

Выбор когда Склад = &Основоной тогда Количество иначе 0 конец как Основной
Выбор когда Склад = &Склад2 тогда Количество иначе 0 конец как склад2
и тд ... для каждого склада.
4 Beduin
 
19.09.11
16:44
Выбрать Номенклатура,
Выбор КОГДА ОстатокОсновного > 0 Тогда
ОстатокОсновного
ИНАЧЕ
ОстатокПрочих
Конец
(Выбрать Номенклатура,
Склад,
Остаток КАК ОстатокОсновного,
0
ИЗ ОстаткиНоменклатуры(Склад = &ОсновнойСклад)
ОБЪЕДИНИТЬ ВСЕ
Выбрать Номенклатура,
Склад,
0,
Остаток КАК ОстатокПрочих
ИЗ ОстаткиНоменклатуры(Склад В &СписокПрочихСкладов) )КАК
ЗапросПоСкладам
5 pmb
 
19.09.11
17:01
(4) так наверное и останется. Просто хотел как-нибудь с группировками и итогами запрос написать.
6 Megas
 
19.09.11
17:33
(5) Ну ?
Максимум(Выбор когда Склад = &Основной тогда Количество иначе 0 конец как НаОсновном)

Максимум(Выбор когда Склад <> &Основной тогда Количество иначе 0 конец как НаДругомСкладе)

Сгрупировать по
Склад

А дальше выбор если НаОсновном >0 тогда НаОсновном  иначе НаДругомСкладе конец

Как то так ?
7 Megas
 
19.09.11
17:35
Идея в том что ты пишешь отдельно на основном и отдельно по другим.
Потом сворачиваешь максимум/минимум(пофиг) по основному и максимум/минимум(пофиг) по другим. и если на основном 0 тогда берёшь с другого склада
8 Axel2009
 
19.09.11
17:38
ВЫБРАТЬ
   ГруппировкаЗапроса.Номенклатура,
   ГруппировкаЗапроса.КоличествоОстаток,
   ВЫБОР
       КОГДА ГруппировкаЗапроса.ЕстьОсновной
           ТОГДА &Основной
       ИНАЧЕ ГруппировкаЗапроса.Склад
   КОНЕЦ КАК Склад
ИЗ
   (ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
       СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток,
       МАКСИМУМ(ТоварыНаСкладахОстатки.Склад) КАК Склад,
       МАКСИМУМ(ВЫБОР
               КОГДА ТоварыНаСкладахОстатки.Склад = &ОсновнойСклад
                   ТОГДА ИСТИНА
               ИНАЧЕ ЛОЖЬ
           КОНЕЦ) КАК ЕстьОсновной
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
   
   СГРУППИРОВАТЬ ПО
       ТоварыНаСкладахОстатки.Номенклатура) КАК ГруппировкаЗапроса
9 Megas
 
19.09.11
17:46
(8) Чё то у тебя не верно то есть фигня! Чёто суммируешь много всего.
10 Megas
 
19.09.11
17:49
ВЫБРАТЬ
   ГруппировкаЗапроса.Номенклатура,
   ВЫБОР
       КОГДА ГруппировкаЗапроса.НаОсновном <> 0
           ТОГДА ГруппировкаЗапроса.НаОсновном
       ИНАЧЕ ГруппировкаЗапроса.НаДругих
   КОНЕЦ КАК Количество
ИЗ
   (ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
       МАКСИМУМ(ВЫБОР
               КОГДА ТоварыНаСкладахОстатки.Склад = &Основной
                   ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
               ИНАЧЕ 0
           КОНЕЦ) КАК НаОсновном,
       МАКСИМУМ(ВЫБОР
               КОГДА ТоварыНаСкладахОстатки.Склад <> &Основной
                   ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
               ИНАЧЕ 0
           КОНЕЦ) КАК НаДругих
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
   
   СГРУППИРОВАТЬ ПО
       ТоварыНаСкладахОстатки.Номенклатура) КАК ГруппировкаЗапроса

Выводит только Номенклатуру и остаток.
11 Axel2009
 
19.09.11
17:57
ВЫБРАТЬ
   ТоварыНаСкладахОстатки.Номенклатура,
   ТоварыНаСкладахОстатки.Склад,
   ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
   (ВЫБРАТЬ
       ГруппировкаЗапроса.Номенклатура КАК Номенклатура,
       ВЫБОР
           КОГДА ГруппировкаЗапроса.ЕстьОсновной
               ТОГДА &Основной
           ИНАЧЕ ГруппировкаЗапроса.Склад
       КОНЕЦ КАК Склад
   ИЗ
       (ВЫБРАТЬ
           ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
           МАКСИМУМ(ТоварыНаСкладахОстатки.Склад) КАК Склад,
           МАКСИМУМ(ВЫБОР
                   КОГДА ТоварыНаСкладахОстатки.Склад = &Основной
                       ТОГДА ИСТИНА
                   ИНАЧЕ ЛОЖЬ
               КОНЕЦ) КАК ЕстьОсновной
       ИЗ
           РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
       
       СГРУППИРОВАТЬ ПО
           ТоварыНаСкладахОстатки.Номенклатура) КАК ГруппировкаЗапроса) КАК ПроверкаОсновногоСклада
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
   ПО ПроверкаОсновногоСклада.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
   И ПроверкаОсновногоСклада.Склад = ТоварыНаСкладахОстатки.Склад