Имя: Пароль:
1C
1С v8
Помогите добить отчет в СКД.
0 Обработка
 
15.08.14
08:49
Самописка.
Есть документ счет на оплату и РС цены номенклатуры контрагентов.

Нужно все счета за период вытащит с номенклатурой и с ценой и сравнить за определенный период со ценами с РС. При чем с самым минимальным. И чтоб была возможность хотя бы увидеть дату "мин цены" и контрагента.

Вот  запрос:

ВЫБРАТЬ
    СчетНаОплатуТовары.Номенклатура,
    СчетНаОплатуТовары.Ссылка,
    СчетНаОплатуТовары.Количество,
    СчетНаОплатуТовары.Цена,
    СчетНаОплатуТовары.Сумма
ПОМЕСТИТЬ Счета
ИЗ
    Документ.СчетНаОплату.Товары КАК СчетНаОплатуТовары
ГДЕ
    СчетНаОплатуТовары.Ссылка.Дата МЕЖДУ &Начало И &Окончание

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатурыКонтрагентов.Номенклатура,
    МИНИМУМ(ЦеныНоменклатурыКонтрагентов.Цена) КАК МинЦена
ПОМЕСТИТЬ МинЦены1
ИЗ
    РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
ГДЕ
    ЦеныНоменклатурыКонтрагентов.Период МЕЖДУ &НачалоМин И &ОкончаниеМин
    И ЦеныНоменклатурыКонтрагентов.Валюта = &Валюта
    И ЦеныНоменклатурыКонтрагентов.ТипЦены <> &ТипЦеныНеРавно

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МинЦены1.Номенклатура,
    ЦеныНоменклатурыКонтрагентов.Контрагент,
    ЦеныНоменклатурыКонтрагентов.Период,
    ЦеныНоменклатурыКонтрагентов.Регистратор,
    МинЦены1.МинЦена
ПОМЕСТИТЬ МинЦены
ИЗ
    МинЦены1 КАК МинЦены1
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
        ПО МинЦены1.Номенклатура = ЦеныНоменклатурыКонтрагентов.Номенклатура
            И МинЦены1.МинЦена = ЦеныНоменклатурыКонтрагентов.Цена
ГДЕ
    ЦеныНоменклатурыКонтрагентов.Период МЕЖДУ &НачалоМин И &ОкончаниеМин
    И ЦеныНоменклатурыКонтрагентов.Валюта = &Валюта
    И ЦеныНоменклатурыКонтрагентов.ТипЦены <> &ТипЦеныНеРавно
;

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

У меня если  есть два контрагента с одинаковой минимальной ценой суммы счетов удваиваются. Как выбрать первые из минималки????
1 Обработка
 
15.08.14
08:57
А начинал я с такого запроса:

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

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

Не взлетел....
2 shuhard
 
15.08.14
09:04
(0)[Как выбрать первые из минималки?]
ну так код то у контрагентов разный
3 Обработка
 
15.08.14
09:13
(1) Мне нужно в запросе вытащить первого попашего из двух контрагентов у которых минимальная цена.
А из затого что нет такого фильтра отбора то при группировке по номенклатуре у меня суммы счета удваиваются.
4 shuhard
 
15.08.14
09:15
(3) первый попавший будет с минимальным кодом - какая буква не ясна ?
5 Обработка
 
15.08.14
09:31
(4) Да пусть будет минимальным. Все это понятно. Как мне выбрать одну запись вместо двух и более?
6 Обработка
 
15.08.14
11:53
Пока еще не осилил. Есть у кого мысли?

Вот мой текущий вариант

ВЫБРАТЬ
    СчетНаОплатуТовары.Номенклатура,
    СчетНаОплатуТовары.Ссылка,
    СчетНаОплатуТовары.Количество,
    СчетНаОплатуТовары.Цена,
    СчетНаОплатуТовары.Сумма
ПОМЕСТИТЬ Счета
ИЗ
    Документ.СчетНаОплату.Товары КАК СчетНаОплатуТовары
ГДЕ
    СчетНаОплатуТовары.Ссылка.Дата МЕЖДУ &Начало И &Окончание

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатурыКонтрагентов.Номенклатура,
    МИНИМУМ(ЦеныНоменклатурыКонтрагентов.Цена) КАК МинЦена
ПОМЕСТИТЬ МинЦены1
ИЗ
    РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
ГДЕ
    ЦеныНоменклатурыКонтрагентов.Период МЕЖДУ &НачалоМин И &ОкончаниеМин
    И ЦеныНоменклатурыКонтрагентов.Валюта = &Валюта
    И ЦеныНоменклатурыКонтрагентов.ТипЦены <> &ТипЦеныНеРавно

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МинЦены1.Номенклатура,
    ЦеныНоменклатурыКонтрагентов.Контрагент,
    ЦеныНоменклатурыКонтрагентов.Период,
    ЦеныНоменклатурыКонтрагентов.Регистратор,
    МинЦены1.МинЦена
ПОМЕСТИТЬ МинЦены
ИЗ
    МинЦены1 КАК МинЦены1
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
        ПО МинЦены1.Номенклатура = ЦеныНоменклатурыКонтрагентов.Номенклатура
ГДЕ
    ЦеныНоменклатурыКонтрагентов.Период МЕЖДУ &НачалоМин И &ОкончаниеМин
    И ЦеныНоменклатурыКонтрагентов.Валюта = &Валюта
    И ЦеныНоменклатурыКонтрагентов.ТипЦены <> &ТипЦеныНеРавно
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОтгрузкаТоваровТовары.Номенклатура,
    ОтгрузкаТоваровТовары.Количество,
    ОтгрузкаТоваровТовары.Ссылка.ДокументОснование,
    ОтгрузкаТоваровТовары.Ссылка.Дата КАК ДатаОтгрузки
ПОМЕСТИТЬ Отгрузки
ИЗ
    Документ.ОтгрузкаТоваров.Товары КАК ОтгрузкаТоваровТовары
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Счета.Ссылка,
    Счета.Номенклатура,
    Счета.Количество,
    Счета.Цена,
    Счета.Сумма КАК Сумма,
    МинЦены.Контрагент КАК КонтрагентМин,
    МинЦены.Период КАК ДатаМин,
    МинЦены.Регистратор,
    ЕСТЬNULL(МинЦены.МинЦена, 0) КАК МинЦена,
    Отгрузки.ДатаОтгрузки
ИЗ
    Счета КАК Счета
        ЛЕВОЕ СОЕДИНЕНИЕ МинЦены КАК МинЦены
        ПО (МинЦены.Номенклатура = Счета.Номенклатура)
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Отгрузки КАК Отгрузки
        ПО Счета.Ссылка = Отгрузки.ДокументОснование
            И Счета.Номенклатура = Отгрузки.Номенклатура
7 Обработка
 
15.08.14
13:54
Дошел до этого:

ВЫБРАТЬ
    СчетНаОплатуТовары.Номенклатура,
    СчетНаОплатуТовары.Ссылка,
    СчетНаОплатуТовары.Количество,
    СчетНаОплатуТовары.Цена,
    СчетНаОплатуТовары.Сумма
ПОМЕСТИТЬ Счета
ИЗ
    Документ.СчетНаОплату.Товары КАК СчетНаОплатуТовары
ГДЕ
    СчетНаОплатуТовары.Ссылка.Дата МЕЖДУ &Начало И &Окончание

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатурыКонтрагентов.Номенклатура,
    ЦеныНоменклатурыКонтрагентов.Период,
    МИНИМУМ(ЦеныНоменклатурыКонтрагентов.Цена) КАК МинЦена
ПОМЕСТИТЬ МинЦены1
ИЗ
    РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
ГДЕ
    ЦеныНоменклатурыКонтрагентов.Период МЕЖДУ &НачалоМин И &ОкончаниеМин
    И ЦеныНоменклатурыКонтрагентов.Валюта = &Валюта
    И ЦеныНоменклатурыКонтрагентов.ТипЦены <> &ТипЦеныНеРавно

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МинЦены1.Номенклатура,
    ЦеныНоменклатурыКонтрагентов.Контрагент,
    ЦеныНоменклатурыКонтрагентов.Период,
    ЦеныНоменклатурыКонтрагентов.Регистратор,
    МинЦены1.МинЦена
ПОМЕСТИТЬ МинЦены
ИЗ
    МинЦены1 КАК МинЦены1
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
        ПО МинЦены1.Номенклатура = ЦеныНоменклатурыКонтрагентов.Номенклатура
            И МинЦены1.Период = ЦеныНоменклатурыКонтрагентов.Период
            И МинЦены1.МинЦена = ЦеныНоменклатурыКонтрагентов.Цена
ГДЕ
    ЦеныНоменклатурыКонтрагентов.Период МЕЖДУ &НачалоМин И &ОкончаниеМин
    И ЦеныНоменклатурыКонтрагентов.Валюта = &Валюта
    И ЦеныНоменклатурыКонтрагентов.ТипЦены <> &ТипЦеныНеРавно
;

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

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

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

Все равно дубли сумм есть...
8 VladZ
 
15.08.14
14:09
(7) В первом запросе можно сделать
Выбрать различные...

Зачем тебе там что-то группировать, если ничего не считаешь?
9 VladZ
 
15.08.14
14:15
МинЦены1, МинЦены - сам себе мозг насилуешь. Пройдет несколько месяцев и будешь думать, что у тебя где... Называй "читабельнее":  МинимальныеЦеныПоНоменклатуры, МинимальныеЦеныКонтрагентов.

Возьми консоль запросов и поищи, где у тебя что задваивается.
10 VladZ
 
15.08.14
14:16
Хм..  К концу дня уже что попало пишу... МинимальныеЦеныПоНоменклатуры -> МинимальныеЦеныНоменклатуры
11 Обработка
 
15.08.14
15:33
(10) Спасибо за подсказу и за поддержку.

Отладчиком в консоли прошел не первый раз. Даже знаю в чем причина. Но вот как построить отчте не одолел.
Вот это подошло:

ВЫБРАТЬ
    СчетНаОплатуТовары.Номенклатура,
    СчетНаОплатуТовары.Ссылка,
    СчетНаОплатуТовары.Количество,
    СчетНаОплатуТовары.Цена,
    СчетНаОплатуТовары.Сумма
ПОМЕСТИТЬ Счета
ИЗ
    Документ.СчетНаОплату.Товары КАК СчетНаОплатуТовары
ГДЕ
    СчетНаОплатуТовары.Ссылка.Дата МЕЖДУ &Начало И &Окончание

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦеныНоменклатурыКонтрагентов.Номенклатура КАК Номенклатура,
    МИНИМУМ(ЦеныНоменклатурыКонтрагентов.Цена) КАК МинЦена,
    ЦеныНоменклатурыКонтрагентов.Контрагент КАК Контрагент,
    ЦеныНоменклатурыКонтрагентов.Период КАК Период
ПОМЕСТИТЬ МинЦены1
ИЗ
    РегистрСведений.ЦеныНоменклатурыКонтрагентов КАК ЦеныНоменклатурыКонтрагентов
ГДЕ
    ЦеныНоменклатурыКонтрагентов.Период МЕЖДУ &НачалоМин И &ОкончаниеМин
    И ЦеныНоменклатурыКонтрагентов.Валюта = &Валюта
    И ЦеныНоменклатурыКонтрагентов.ТипЦены <> &ТипЦеныНеРавно

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Период,
    Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МинЦены1.Номенклатура КАК Номенклатура,
    МИНИМУМ(МинЦены1.МинЦена) КАК МинЦена
ПОМЕСТИТЬ МинЦены_2
ИЗ
    МинЦены1 КАК МинЦены1

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    МинЦена
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    МинЦены1.Номенклатура,
    МинЦены1.МинЦена,
    МинЦены1.Контрагент,
    МинЦены1.Период
ПОМЕСТИТЬ МинЦены
ИЗ
    МинЦены1 КАК МинЦены1
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ МинЦены_2 КАК МинЦены_2
        ПО МинЦены1.Номенклатура = МинЦены_2.Номенклатура
            И МинЦены1.МинЦена = МинЦены_2.МинЦена
;

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

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

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