Имя: Пароль:
1C
1С v8
Запрос по контрагентам у которых не было продаж
,
0 sasha-asn
 
16.09.19
11:51
Доброго времени суток эксперты!
Учусь писать запросы, так вот застрял на том как написать следующий запрос:  вывожу всех контрагентов у которых не было продаж за период
----------------------------------------------------
ВЫБРАТЬ
    Контрагенты.Ссылка,
    Продажи.Стоимость,
    Продажи.ДокументПродажи
ИЗ
    РегистрНакопления.Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
        ПО Продажи.Контрагент = Контрагенты.Ссылка
Где Продажи.Стоимость is null
----------------------------------------------------
Где я ошибаюсь?
1 decdmb
 
16.09.19
11:57
Попробуй ПРАВОЕ СОЕДИНЕНИЕ вместо ЛЕВОЕ
2 ДенисЧ
 
16.09.19
11:58
Таблицы местами поменяй
3 catena
 
16.09.19
11:59
Дт слева, Кт справа. И про соединения так же надо распечатать и в ящик стола)
4 sasha-asn
 
16.09.19
12:37
Спасибо!
5 sasha-asn
 
16.09.19
12:37
получил вот что

ВЫБРАТЬ
    Контрагенты.Ссылка,
    Продажи.Стоимость,
    Продажи.ДокументПродажи,
    Продажи.Период
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
        ПО (Продажи.Контрагент = Контрагенты.Ссылка)
ГДЕ
    Продажи.Стоимость ЕСТЬ NULL
6 sasha-asn
 
16.09.19
12:58
эх, запрос вывод всех контрагентов почему то(((
7 Eiffil123
 
16.09.19
13:22
(6) значит в регистре "Продажи" по нему не было записей.
8 Консультант Баранов
 
16.09.19
13:42
(0) Если учишься, то лучше разделяй одно от другого, чтобы было четко видно, что откуда. Тем более поля "Стоимость, ДокументПродажи, Период" - будут сбивать со смысла.


Как-то так

ВЫБРАТЬ
    Продажи.Контрагент
ПОМЕСТИТЬ втКонтрагентыПокоторымБылиПродажи
ИЗ
    РегистрНакопления.Продажи КАК Продажи

СГРУППИРОВАТЬ ПО
    Продажи.Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Контрагенты.Ссылка
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    НЕ Контрагенты.ЭтоГруппа
    И НЕ Контрагенты.Ссылка В
                (ВЫБРАТЬ
                    втКонтрагентыПокоторымБылиПродажи.Контрагент
                ИЗ
                    втКонтрагентыПокоторымБылиПродажи КАК втКонтрагентыПокоторымБылиПродажи)
9 Kashey
 
16.09.19
14:50
(8) Оптимальнее заполнять ВТ из виртуальной таблицы оборотов. Тогда и группировка не нужна будет и не попадут записи с флагом Активность = ложь. Да и получать часть данных можно будет из таблицы итогов оборотного регистра, что быстрее перебора всех записей из таблицы движений.
10 Консультант Баранов
 
16.09.19
14:56
(9) Если обороты будут за весь период то не уверен.
11 Kashey
 
16.09.19
15:02
(10) Если период получения оборотов будет кратен месяцу, то обращения к таблице движений не будет. Инфа будет получена только из таблицы оборотов(итогов).
12 Eiffil123
 
16.09.19
16:47
(11) а как система понимает кратность месяцу? Дата окончания должна быть последняя секунда месяца или "граница включая" эту секунду?
13 Kashey
 
16.09.19
17:16
(12) << а как система понимает кратность месяцу?
Из параметров НачалоПериода и КонецПериода виртуальной таблицы обороты
<< Дата окончания должна быть последняя секунда месяца или "граница включая" эту секунду?
по умолчанию данные на конец периода включаются в результат запроса.
14 Маленький Вопросик
 
16.09.19
17:33
соедини таблицы продаж и контрагентов внутренним соединением
15 Eiffil123
 
16.09.19
17:46
(13) т.е. можно передать в запрос дату, а не границу и будет использована таблица итогов, верно?
16 Kashey
 
16.09.19
18:10
(15) Да, можно дату. Но это только для оборотов границы итогов включаются, кажется. Для остатков наоборот. Поэтому в задачах по Спецу сейчас получают остатки на момент времени ("традиционная" методика проведения) когда не нужны движения текущего документа, и на границу, включая при "новой" методике, когда остатки нужны с учетом движений документа.
17 Eiffil123
 
16.09.19
18:47
(16) не, по спецу сейчас по "традиционной" схеме проведения нужно записывать пустой набор записей, если нужно в модуле проведения получать остатки. Причина - ты можеть перепроводить документ, указав в нем дату позднее, чем он был проведен до этого.
18 Консультант Баранов
 
16.09.19
18:53
(16) > когда не нужны движения текущего документа

Ключевой момент не в том нужны или не нужны движения документа, а нужны ли данные для проведения.

Если надо просто проверить наличие количества то по новой, а если нужно рассчитать стоимость списания то по старой.
19 Kashey
 
16.09.19
18:58
(18) Да, верно. Если все данные для формирования движений есть в документе и не требуется получения данных (по остаткам, например) из  регистра, в который предполагается записать эти движения - используем новую методику.
20 Маленький Вопросик
 
16.09.19
19:08
ВЫБРАТЬ
    Контрагенты.Ссылка
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    Контрагенты.Поставщик = ИСТИНА
    И Контрагенты.ПометкаУдаления = ЛОЖЬ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Закупки.Контрагент,
    Закупки.Количество,
    Закупки.Номенклатура
ПОМЕСТИТЬ ВТ_Закупки
ИЗ
    РегистрНакопления.Закупки КАК Закупки
ГДЕ
    Закупки.Период МЕЖДУ &НачПериода И &КонПериода
    И Закупки.Количество > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Закупки.Контрагент
ПОМЕСТИТЬ ВТ_КонтрагентыДействующие
ИЗ
    ВТ_Закупки КАК ВТ_Закупки
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Контрагенты КАК ВТ_Контрагенты
        ПО ВТ_Закупки.Контрагент = ВТ_Контрагенты.Ссылка

СГРУППИРОВАТЬ ПО
    ВТ_Закупки.Контрагент
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Контрагенты.Ссылка
ИЗ
    ВТ_Контрагенты КАК ВТ_Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КонтрагентыДействующие КАК ВТ_КонтрагентыДействующие
        ПО (ВТ_Контрагенты.Ссылка = ВТ_КонтрагентыДействующие.Контрагент)

СГРУППИРОВАТЬ ПО
    ВТ_Контрагенты.Ссылка
21 Маленький Вопросик
 
16.09.19
19:28
ВЫБРАТЬ
    Контрагенты.Ссылка
ПОМЕСТИТЬ ВТ_Контрагенты
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    Контрагенты.Поставщик = ИСТИНА
    И Контрагенты.ПометкаУдаления = ЛОЖЬ
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Контрагенты.Ссылка
ИЗ
    ВТ_Контрагенты КАК ВТ_Контрагенты
ГДЕ
    НЕ ВТ_Контрагенты.Ссылка В (ВЫБРАТЬ ВТ_Закупки.Контрагент ИЗ ВТ_Закупки)
22 Маленький Вопросик
 
16.09.19
19:29
у меня нет розничных контрагентов, а только поставщики, но смысл тот же
23 Kashey
 
16.09.19
19:40
ВЫБРАТЬ
    ПродажиОбороты.Контрагент КАК Контрагент
ПОМЕСТИТЬ ВТ_КонтрагентыСПродажами
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Контрагенты.Ссылка КАК Контрагент
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    НЕ Контрагенты.ПометкаУдаления
    И НЕ Контрагенты.Ссылка В
                (ВЫБРАТЬ
                    ВТ_КонтрагентыСПродажами.Контрагент
                ИЗ
                    ВТ_КонтрагентыСПродажами КАК ВТ_КонтрагентыСПродажами)
24 Маленький Вопросик
 
16.09.19
19:46
короче можно сделать хоть как)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.