Имя: Пароль:
1C
1С v8
Запрос. Нужна помощь.
0 zippygrill
 
05.07.13
10:06
Прошу вашу помощь в составление запроса.
Цель: получить серию прихода. если один и тот же товар из разных партии то брать первую серию. В запросе сейчас берется только одна запись(понятно почему) :)
Пример:

в ТЧ 4 сторки:
Ном1 ->Серия1->Кол1
Ном1 ->Серия2->Кол1
Ном2 ->Серия3->Кол1
Ном3 ->Серия4->Кол1

Получить нужно:

Ном1 ->Серия1->Кол2
Ном2 ->Серия3->Кол1
Ном3 ->Серия4->Кол1

ВЫБРАТЬ
   ПоступлениеТоваровУслугВНТТТовары.Номенклатура,
   ПоступлениеТоваровУслугВНТТТовары.Ссылка.Склад,
   0 КАК ОбъемНачОст,
   ВЫБОР
       КОГДА &вКоличественныхПоказателях
           ТОГДА ПоступлениеТоваровУслугВНТТТовары.Количество
       ИНАЧЕ ПоступлениеТоваровУслугВНТТТовары.Количество * 0.1 * ЕСТЬNULL(ПоступлениеТоваровУслугВНТТТовары.Номенклатура.ЕдиницаХраненияОстатков.Объем, 0)
   КОНЕЦ КАК ОбъемПриход,
   0 КАК ОбъемРасход,
   ПоступлениеТоваровУслугВНТТТовары.Ссылка КАК Регистратор,
   ВЫБОР
       КОГДА ПоступлениеТоваровУслугВНТТТовары.Ссылка.Контрагент = ПоступлениеТоваровУслугВНТТТовары.Номенклатура.Производитель
           ТОГДА "ПриходОтПроизводителей"
       ИНАЧЕ "ПриходОтОптовиков"
   КОНЕЦ КАК ВидДвижения,
   ВЫБОР
       КОГДА &использоватьФиксированнуюДатуСвойств
           ТОГДА НАЧАЛОПЕРИОДА(&датаОпределенияАкцидентов, ДЕНЬ)
       ИНАЧЕ НАЧАЛОПЕРИОДА(ПоступлениеТоваровУслугВНТТТовары.Ссылка.Дата, ДЕНЬ)
   КОНЕЦ КАК ДатаАкцидентов
ПОМЕСТИТЬ втОборотПТУВНТТ
ИЗ
   Документ.ПоступлениеТоваровУслугВНТТ.Товары КАК ПоступлениеТоваровУслугВНТТТовары
ГДЕ
   ПоступлениеТоваровУслугВНТТТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&начДата, ДЕНЬ) И КОНЕЦПЕРИОДА(&конДата, ДЕНЬ)
   И ПоступлениеТоваровУслугВНТТТовары.Ссылка.Проведен
   И ПоступлениеТоваровУслугВНТТТовары.Ссылка.Склад В(&списокСкладовНТТ)
   И ВЫБОР
           КОГДА &ОтборНоменклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
               ТОГДА ПоступлениеТоваровУслугВНТТТовары.Номенклатура = &ОтборНоменклатура
           ИНАЧЕ ИСТИНА
       КОНЕЦ
;

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

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

УПОРЯДОЧИТЬ ПО
   НомерСтроки
;

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

СГРУППИРОВАТЬ ПО
   втОборотПТУВНТТ.ВидДвижения,
   ОднаСерияИзПТУВНТТ.СерияНоменклатуры,
   втОборотПТУВНТТ.Номенклатура,
   втОборотПТУВНТТ.Склад,
   втОборотПТУВНТТ.Регистратор,
   втОборотПТУВНТТ.ДатаАкцидентов
;
1 viktor_vv
 
05.07.13
10:16
2 zippygrill
 
05.07.13
10:51
скажу прямо, ничего не получается :(
3 Maxus43
 
05.07.13
10:52
именно первую серию? или любую?
4 zippygrill
 
05.07.13
10:53
любую из двух позиции. если одна позиция то берем указанную серию
5 Maxus43
 
05.07.13
10:54
(4) МИНИМУМ(ОднаСерияИзПТУВНТТ.СерияНоменклатуры)
6 zippygrill
 
05.07.13
10:55
а запрос то вернет одну запись из за этого ВЫБРАТЬ ПЕРВЫЕ 1. а мне то нужны все записи документа
7 zippygrill
 
05.07.13
11:04
так чтоди?

ВЫБРАТЬ
   ПоступлениеТоваровУслугВНТТТовары.Ссылка.Склад КАК Склад,
   СУММА(0) КАК ОбъемНачОстаток,
   СУММА(ВЫБОР
           КОГДА &показыватьКоличествоВместоОбъема
               ТОГДА ПоступлениеТоваровУслугВНТТТовары.Количество
           ИНАЧЕ ПоступлениеТоваровУслугВНТТТовары.Количество * 0.1 * ЕСТЬNULL(ПоступлениеТоваровУслугВНТТТовары.Номенклатура.ЕдиницаХраненияОстатков.Объем, 0)
       КОНЕЦ) КАК ОбъемПриход,
   СУММА(0) КАК ОбъемРасход,
   ПоступлениеТоваровУслугВНТТТовары.Номенклатура КАК Номенклатура,
   ПоступлениеТоваровУслугВНТТТовары.Ссылка КАК Регистратор,
   СУММА(ПоступлениеТоваровУслугВНТТТовары.Количество) КАК Количество
ПОМЕСТИТЬ втОборот
ИЗ
   Документ.ПоступлениеТоваровУслугВНТТ.Товары КАК ПоступлениеТоваровУслугВНТТТовары
ГДЕ
   ПоступлениеТоваровУслугВНТТТовары.Ссылка = &Ссылка
   И ВЫБОР
           КОГДА &ОтборНоменклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
               ТОГДА ПоступлениеТоваровУслугВНТТТовары.Номенклатура = &ОтборНоменклатура
           ИНАЧЕ ИСТИНА
       КОНЕЦ

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

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

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

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

СГРУППИРОВАТЬ ПО
   втОднаСерия.СерияНоменклатуры,
   втОборот.Номенклатура,
   втОборот.Регистратор,
   втОборот.Склад
8 zippygrill
 
05.07.13
11:04
*чтоли
9 Maxus43
 
05.07.13
11:11
ну работает как надо или нет?
10 viktor_vv
 
05.07.13
11:21
(7) Смотря что в твоем понимание первая серия. В данном случае возьмется с минимальной ссылкой.
11 Maxus43
 
05.07.13
11:22
(10) >>любую из двух позиции
чтоб не колбасить бабушку пусть будет так, ему без разницы
12 viktor_vv
 
05.07.13
11:25
(11) Ну да. А то по номеру строки придется сверху еще Выбрать и соединять опять с табличной частью.
13 zippygrill
 
05.07.13
11:56
(9) ага работает :)
14 zippygrill
 
05.07.13
11:58
(10) сойдет так как не совсем принципиально какая из двух выбрать.