Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
27 сен 2021, 07:59

Помогите пожалуйста с отчетом через СКД!

Автор Elfidor, 10 янв 2020, 15:35

0 Пользователей и 1 гость просматривают эту тему.

Elfidor

Задача в том, чтобы сделать отчёт по банковским картам, а конкретнее - имя клиента, телефон, номер карты, а так же вывести количество едино-разовых обращений и общее количество обращений. Общее количество - не проблема, через ресурсы сделаю, но вот единоразовое... Выходит будет ещё одна колонка "Обращения"(далее счетчик) и напротив каждого клиента должно быть написано 1/2.../n. Сами понимаете в документах там всё до кучи, один клиент значит одна запись, а отсортировать надо так, чтобы имена не дублировались в отчете, а с каждым дублем добавлялось +1 к счетчику обращений этого конкретного клиента, и те у кого этот счетчик равен одному залетали в итог по единоразовым обращениям. Например:
- Петров
- Петров
- Петров
- Козлов
- Иванов
В итоге - общее количество обращений = 5, а едино-разовых только 2!
Я уже написал запрос, но всё равно он у меня почему-то не работает. Скажу откровенно сколько учуь запросы так понять нормально и не выходит, поэтому то и прошу помощи здесь... А то неделю мучиться над одним и тем же запросом уже достало... Спасибо!

Изначальный запрос - результат
Ошибка: Неверные параметры "ТаблицаОбращений"
<<?>>&ТаблицаОбращений КАК ТаблицаОбращений

ВЫБРАТЬ
    ПродажиПоДисконтнымКартам.Период,
    ПродажиПоДисконтнымКартам.ДисконтнаяКарта.КодКарты,
    ПродажиПоДисконтнымКартам.ДисконтнаяКарта.ВладелецКарты,
    ПродажиПоДисконтнымКартам.ДисконтнаяКарта.БЭ_НомерТелефона,
    ИнформационныеКарты.Наименование,
    ИнформационныеКарты.ДатаВыдачи
ИЗ
    РегистрНакопления.ПродажиПоДисконтнымКартам КАК ПродажиПоДисконтнымКартам
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИнформационныеКарты КАК ИнформационныеКарты
        ПО ПродажиПоДисконтнымКартам.ДисконтнаяКарта = ИнформационныеКарты.Ссылка
ГДЕ
    ПродажиПоДисконтнымКартам.Период МЕЖДУ &ДатаНач И &ДатаКон
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТаблицаОбращений.ИмяВладельца КАК Ссылка,
    1 КАК Счетчик
ПОМЕСТИТЬ ИсходнаяТаблица
ИЗ
    &ТаблицаОбращений КАК ТаблицаОбращений
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ИсходнаяТаблица.Ссылка КАК Ссылка,
    СУММА(ИсходнаяТаблица.Счетчик) КАК Счетчик
ПОМЕСТИТЬ ОдноразовыеОбращенияТаблица
ИЗ
    ИсходнаяТаблица КАК ИсходнаяТаблица

СГРУППИРОВАТЬ ПО
    ИсходнаяТаблица.Ссылка

ИМЕЮЩИЕ
    СУММА(ИсходнаяТаблица.Счетчик) = 1
;

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


Уже переделал так, но в консоли запросов с записями всё нормально, счетчик правда у всех = 1, хотя не должен, а в самом отчете 100500+ записей...


ВЫБРАТЬ
ПродажиПоДисконтнымКартам.Период,
ПродажиПоДисконтнымКартам.ДисконтнаяКарта.КодКарты,
ПродажиПоДисконтнымКартам.ДисконтнаяКарта.ВладелецКарты,
ПродажиПоДисконтнымКартам.ДисконтнаяКарта.БЭ_НомерТелефона,
ИнформационныеКарты.Наименование,
ИнформационныеКарты.ДатаВыдачи
ПОМЕСТИТЬ ТаблицаОбращений
ИЗ
РегистрНакопления.ПродажиПоДисконтнымКартам КАК ПродажиПоДисконтнымКартам
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИнформационныеКарты КАК ИнформационныеКарты
ПО ПродажиПоДисконтнымКартам.ДисконтнаяКарта = ИнформационныеКарты.Ссылка
ГДЕ
ПродажиПоДисконтнымКартам.Период МЕЖДУ &ДатаНач И &ДатаКон
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
1 КАК Счетчик,
ТаблицаОбращений.Наименование,
ТаблицаОбращений.ДисконтнаяКартаКодКарты,
ТаблицаОбращений.ДисконтнаяКартаБЭ_НомерТелефона
ПОМЕСТИТЬ ИсходнаяТаблица
ИЗ
ТаблицаОбращений КАК ТаблицаОбращений
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ИсходнаяТаблица.Счетчик КАК Счетчик1,
ИсходнаяТаблица.Наименование КАК Наименование1,
ИсходнаяТаблица.ДисконтнаяКартаКодКарты,
ИсходнаяТаблица.ДисконтнаяКартаБЭ_НомерТелефона
ПОМЕСТИТЬ ОдноразовыеОбращенияТаблица
ИЗ
ИсходнаяТаблица КАК ИсходнаяТаблица

СГРУППИРОВАТЬ ПО
ИсходнаяТаблица.Наименование,
ИсходнаяТаблица.Счетчик,
ИсходнаяТаблица.ДисконтнаяКартаКодКарты,
ИсходнаяТаблица.ДисконтнаяКартаБЭ_НомерТелефона

ИМЕЮЩИЕ
СУММА(ИсходнаяТаблица.Счетчик) = 1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОдноразовыеОбращенияТаблица.Счетчик1,
ОдноразовыеОбращенияТаблица.ДисконтнаяКартаКодКарты,
ОдноразовыеОбращенияТаблица.ДисконтнаяКартаБЭ_НомерТелефона,
ОдноразовыеОбращенияТаблица.Наименование1
ИЗ
ИсходнаяТаблица КАК ИсходнаяТаблица,
ОдноразовыеОбращенияТаблица КАК ОдноразовыеОбращенияТаблица

Помогите, уже нет моральных сил, а самое обидное, что я учу/читаю и всё равно не понимаю...

Elfidor

Так, ладно, товарищи, меня тут спустя столько времени осенило, вопрос немного другой. Если через запрос уже есть отдельная колонка "КоличествоОбращений", то как описать запросом или СКД, что если значение равно 1 то заносить его в другую колонку "Количество разовых обращений"? Меня поиск информации не пугает, так что если не уверены подскажите хоть в какую сторону копать, в сторону запросов или СКД или вообще как-то прописывать кодом в модуле...

LexaK

зачем вам что-то анализировать и вычислять, вот же ваш запрос - получение одноразовых клиентов
Цитировать
ВЫБРАТЬ
    ИсходнаяТаблица.Ссылка КАК Ссылка,
    СУММА(ИсходнаяТаблица.Счетчик) КАК Счетчик
ПОМЕСТИТЬ ОдноразовыеОбращенияТаблица
ИЗ
    ИсходнаяТаблица КАК ИсходнаяТаблица

СГРУППИРОВАТЬ ПО
    ИсходнаяТаблица.Ссылка

ИМЕЮЩИЕ
    СУММА(ИсходнаяТаблица.Счетчик) = 1
;
присоедините эту таблицу к результату, вот вам и будет колонка Одноразовых! :dfbbdrfb:
ответ Понравился? (в смысле пригодился?)

Elfidor

Цитата: LexaK от 13 янв 2020, 11:21
зачем вам что-то анализировать и вычислять, вот же ваш запрос - получение одноразовых клиентов
Цитировать
ВЫБРАТЬ
    ИсходнаяТаблица.Ссылка КАК Ссылка,
    СУММА(ИсходнаяТаблица.Счетчик) КАК Счетчик
ПОМЕСТИТЬ ОдноразовыеОбращенияТаблица
ИЗ
    ИсходнаяТаблица КАК ИсходнаяТаблица

СГРУППИРОВАТЬ ПО
    ИсходнаяТаблица.Ссылка

ИМЕЮЩИЕ
    СУММА(ИсходнаяТаблица.Счетчик) = 1
;
присоедините эту таблицу к результату, вот вам и будет колонка Одноразовых! :dfbbdrfb:

Спасибо большое! Но всё оказалось ещё проще,чем я изначально написал. Полностью переработал запрос и вот получилось куда компактнее и понятнее!

ВЫБРАТЬ РАЗРЕШЕННЫЕ
ИнформационныеКарты.Наименование,
ИнформационныеКарты.ДатаВыдачи,
ПродажиПоДисконтнымКартам.ДисконтнаяКарта.КодКарты,
ПродажиПоДисконтнымКартам.ДисконтнаяКарта.БЭ_НомерТелефона,
КОЛИЧЕСТВО(ИнформационныеКарты.Ссылка) КАК КоличествоОбращений,
ВЫБОР
КОГДА КОЛИЧЕСТВО(ИнформационныеКарты.Ссылка) = 1
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК Поле1
ИЗ
РегистрНакопления.ПродажиПоДисконтнымКартам КАК ПродажиПоДисконтнымКартам
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИнформационныеКарты КАК ИнформационныеКарты
ПО ПродажиПоДисконтнымКартам.ДисконтнаяКарта = ИнформационныеКарты.Ссылка
ГДЕ
ПродажиПоДисконтнымКартам.Период МЕЖДУ &ДатаНач И &ДатаКон

СГРУППИРОВАТЬ ПО
ИнформационныеКарты.Наименование,
ИнформационныеКарты.ДатаВыдачи,
ПродажиПоДисконтнымКартам.ДисконтнаяКарта.КодКарты,
ПродажиПоДисконтнымКартам.ДисконтнаяКарта.БЭ_НомерТелефона,
ИнформационныеКарты.Ссылка

ИМЕЮЩИЕ
КОЛИЧЕСТВО(ИнформационныеКарты.Ссылка) > 0

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск