Имя: Пароль:
1C
1С v8
Помогите составить запрос
0 Диггер
 
01.08.12
11:07
Уважаемые коллеги, возможно ли одним запросом решить следующую ситуацию:

1С Управление торговлей. Нужно получить данные о цене последнего закупа товаров имеющихся на складах. Вопрос получения остатков товаров у меня не вызывает сложности, поэтому проще: есть справочник номенклатуры и таблица "ПартииТоваровНаСкладахОстатки", из которой можно получить данные о стоимости товара. Как объединить эти таблицы так, чтобы в результате запроса к каждой конкретной товарной позиции было всего лишь одно соответствие документа поступления, т.е. из всех документов поступления нужно выбрать самый поздний по дате (но это тоже не проблема, если бы не надо было узнать еще и себестоимость товара по данному документу).
1 Конфигуратор1с
 
01.08.12
11:08
(0)Максимум(Период)
2 х86
 
01.08.12
11:16
во вложенной табл получаешь макс по периоду, соединяешь с таблицей и получашье стоимость
3 Диггер
 
01.08.12
11:18
(2) Если не затруднит, то можно с примером?
Получить максимум по дате для меня понятно, но как получить стоимость товара, который соответствует этой дате?
4 Конфигуратор1с
 
01.08.12
11:22
(3)условие связи по дате
5 shuhard
 
01.08.12
11:22
(3) делай раз - по Рг закупки получаешь таблицу товар+дата
делай два - связываешь эту таблицу с Рг закупки по товару и дате, получаешь товар и цену
6 Конфигуратор1с
 
01.08.12
11:22
щас попробую запрос набросать
7 Classic
 
01.08.12
11:27
ВЫБРАТЬ
   РегистрОстатки.Номенклатура,
   РегистрОстатки.КоличествоОстаток,
   ВЫБОР
        КОГДА ЕстьNULL(РегистрОбороты.КоличествоПриход,0) = 0
        ТОГДА 0
        ИНАЧЕ ЕстьNULL(РегистрОбороты.СтоимостьПриход,0)/ РегистрОбороты.КоличествоПриход
   КОНЕЦ КАК ЦенаПоследнегоПрихода
ИЗ РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаОстатков,) КАК РегистрОстатки
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Обороты(,,Регистратор,,) КАК РегистрОбороты
    ПО РегистрОстатки.Номенклатура = РегистрОбороты.Номенклатура
       И РегистрОбороты.Регистратор В (
           ВЫБРАТЬ
                МАКСИМУМ(ВложенныеОбороты.Регистратор.Дата)
           ИЗ РегистрНакопления.ПартииТоваровНаСкладах.Обороты(,,Регистратор,,) КАК ВложенныеОбороты
ГДЕ ВложенныеОбороты.Номенклатура = РегистрОбороты.Номенклатура
   И ВложенныеОбороты.Регистратор.Дата <= &ДатаОстатков
   И ВложенныеОбороты.КоличествоПриход > 0)
8 х86
 
01.08.12
11:29
(7)>>МАКСИМУМ(ВложенныеОбороты.Регистратор.Дата)

зачем брать регистратор.дата, в таблице регистра уже есть Период
9 Classic
 
01.08.12
11:30
(8)
В (7) Ошибка, сейчас перепишу
10 Конфигуратор1с
 
01.08.12
11:31
ВЫБРАТЬ
   ПартииТоваровНаСкладахОстатки.Номенклатура,
   ПартииТоваровНаСкладахОстатки.КоличествоОстаток,
   ПартииТоваровНаСкладахОстатки.СтоимостьОстаток,
   ВложенныйЗапрос.СтоимостьОборот,
   ВложенныйЗапрос.КоличествоОборот
ИЗ
   РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&ДатаОтчета, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ПартииТоваровНаСкладахОстатки
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           МАКСИМУМ(ЗакупкиОбороты.Период) КАК Период,
           ЗакупкиОбороты.Номенклатура КАК Номенклатура,
           СУММА(ЗакупкиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
           СУММА(ЗакупкиОбороты.КоличествоОборот) КАК КоличествоОборот
       ИЗ
           РегистрНакопления.Закупки.Обороты(, &ДатаОтчета, Регистратор, Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ЗакупкиОбороты
       
       СГРУППИРОВАТЬ ПО
           ЗакупкиОбороты.Номенклатура) КАК ВложенныйЗапрос
       ПО ПартииТоваровНаСкладахОстатки.Номенклатура = ВложенныйЗапрос.Номенклатура
           И (&ДатаОтчета >= ВложенныйЗапрос.Период)
11 Classic
 
01.08.12
11:32
В (7)

       И РегистрОбороты.Регистратор В (

Заменить на


       И РегистрОбороты.Регистратор.Дата В (
12 Classic
 
01.08.12
11:33
(10)
У тебя во вложенном запросе в СтоимостьОборот будет весь оборот по стоимости за весь период до ДатаОтчета
13 Диггер
 
01.08.12
11:35
Спасибо большое за примеры. В общем логика мне понятна.
14 Конфигуратор1с
 
01.08.12
11:35
(12) та да, что то я затупил
15 Конфигуратор1с
 
01.08.12
11:36
(13)пример, мой не смотри