Возникла вроде простая проблема, которую почему-то не удается решить самостоятельно.
Делаю отчет в СКД: движение денежных средств. Но застрял уже на уровне запроса.
Есть справочник СтатьиЗатрат, документы ВыпискаБанка, АвансовыйОтчет.
В каждом из документов есть 2 реквизита, по которым отбираются конкретные документы: дата и проект. И табличная часть с колонками СЗ (СтатьяЗатрат - ссылка на справочник) и Сумма (число).
Хочу в отчете собрать и просуммировать данные по статьям затрат.
Вот что нужно:
Как я делаю: Беру статью затрат из справочника и присоединяю слева документ.
ВЫБРАТЬ
СтатьиЗатрат.Ссылка КАК Статья_справ,
ВыпискаБанкаРасшифровкаПлатежа.СтатьяДвижения,
ВыпискаБанкаРасшифровкаПлатежа.СуммаПриход,
ВыпискаБанкаРасшифровкаПлатежа.СуммаРасход,
АвансовыйОтчетРасшифровкаПлатежа.СуммаПринятая,
АвансовыйОтчетРасшифровкаПлатежа.СтатьяДвижения КАК СтатьяДвижения1
ИЗ
Справочник.СтатьиЗатрат КАК СтатьиЗатрат
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВыпискаБанка.РасшифровкаПлатежа КАК ВыпискаБанкаРасшифровкаПлатежа
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВыпискаБанка КАК ВыпискаБанка
ПО ВыпискаБанкаРасшифровкаПлатежа.Ссылка = ВыпискаБанка.Ссылка
ПО СтатьиЗатрат.Ссылка = ВыпискаБанкаРасшифровкаПлатежа.СтатьяДвижения
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.РасшифровкаПлатежа КАК АвансовыйОтчетРасшифровкаПлатежа
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет КАК АвансовыйОтчет
ПО АвансовыйОтчетРасшифровкаПлатежа.Ссылка = АвансовыйОтчет.Ссылка
ПО СтатьиЗатрат.Ссылка = АвансовыйОтчетРасшифровкаПлатежа.СтатьяДвижения
ГДЕ
ВыпискаБанкаРасшифровкаПлатежа.Субконто3 = &Проект
И АвансовыйОтчетРасшифровкаПлатежа.Субконто2 = &Проект
И ВыпискаБанка.Дата >= &НачПериода
И ВыпискаБанка.Дата <= &КонПериода
И АвансовыйОтчет.Дата >= &НачПериода
И АвансовыйОтчет.Дата <= &КонПериода
Показать
Получается так:
Хотя если убираю один документ, например, АвансовыйОтчет, и присоединяю к справочнику только Выписку, то получается так (период и проект, естественно, те же):
ВЫБРАТЬ
СтатьиЗатрат.Ссылка КАК Статья_справ,
ВыпискаБанкаРасшифровкаПлатежа.СтатьяДвижения,
ВыпискаБанкаРасшифровкаПлатежа.СуммаПриход,
ВыпискаБанкаРасшифровкаПлатежа.СуммаРасход,
АвансовыйОтчетРасшифровкаПлатежа.СуммаПринятая,
АвансовыйОтчетРасшифровкаПлатежа.СтатьяДвижения КАК СтатьяДвижения1
ИЗ
Справочник.СтатьиЗатрат КАК СтатьиЗатрат
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВыпискаБанка.РасшифровкаПлатежа КАК ВыпискаБанкаРасшифровкаПлатежа
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВыпискаБанка КАК ВыпискаБанка
ПО ВыпискаБанкаРасшифровкаПлатежа.Ссылка = ВыпискаБанка.Ссылка
ПО СтатьиЗатрат.Ссылка = ВыпискаБанкаРасшифровкаПлатежа.СтатьяДвижения
ГДЕ
ВыпискаБанкаРасшифровкаПлатежа.Субконто3 = &Проект
И ВыпискаБанка.Дата >= &НачПериода
И ВыпискаБанка.Дата <= &КонПериода
Показать
Т.е. при присоединении двух документов ищутся только общие статьи затрат, а те, что присутствуют только в одном из документов, не выводятся.
И я не понимаю, почему так происходит.
Очень надеюсь на помощь, и большое спасибо за нее.
(1) картинок не видно, но
1) для начала я бы убрал таблицы документов, к реквизитам документа можно обращаться через реквизит Ссылка табличной части. Да, это будет неявное соединение, но раз уж 1с умеет это, пусть делает.
2) условия ГДЕ неправильно ставить на весь запрос, надо только на соединения, иначе это условие все отрежет
поулчится что-то типа такого
ВЫБРАТЬ
СтатьиЗатрат.Ссылка КАК Статья_справ,
ВыпискаБанкаРасшифровкаПлатежа.СтатьяДвижения,
ВыпискаБанкаРасшифровкаПлатежа.СуммаПриход,
ВыпискаБанкаРасшифровкаПлатежа.СуммаРасход,
АвансовыйОтчетРасшифровкаПлатежа.СуммаПринятая,
АвансовыйОтчетРасшифровкаПлатежа.СтатьяДвижения КАК СтатьяДвижения1
ИЗ
Справочник.СтатьиЗатрат КАК СтатьиЗатрат
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВыпискаБанка.РасшифровкаПлатежа КАК ВыпискаБанкаРасшифровкаПлатежа
ПО СтатьиЗатрат.Ссылка = ВыпискаБанкаРасшифровкаПлатежа.СтатьяДвижения
и ВыпискаБанкаРасшифровкаПлатежа.Субконто3 = &Проект
И ВыпискаБанка.Ссылка.Дата >= &НачПериода
И ВыпискаБанка.Ссылка.Дата <= &КонПериода
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.РасшифровкаПлатежа КАК АвансовыйОтчетРасшифровкаПлатежа
ПО СтатьиЗатрат.Ссылка = АвансовыйОтчетРасшифровкаПлатежа.СтатьяДвижения
И АвансовыйОтчетРасшифровкаПлатежа.Субконто2 = &Проект
И АвансовыйОтчет.Ссылка.Дата >= &НачПериода
И АвансовыйОтчет.Ссылка.Дата <= &КонПериода
(1) картинок не видно, но
1) для начала я бы убрал таблицы документов, к реквизитам документа можно обращаться через реквизит Ссылка табличной части. Да, это будет неявное соединение, но раз уж 1с умеет это, пусть делает.
2) условия ГДЕ неправильно ставить на весь запрос, надо только на соединения, иначе это условие все отрежет
поулчится что-то типа такого
ВЫБРАТЬ
СтатьиЗатрат.Ссылка КАК Статья_справ,
ВыпискаБанкаРасшифровкаПлатежа.СтатьяДвижения,
ВыпискаБанкаРасшифровкаПлатежа.СуммаПриход,
ВыпискаБанкаРасшифровкаПлатежа.СуммаРасход,
АвансовыйОтчетРасшифровкаПлатежа.СуммаПринятая,
АвансовыйОтчетРасшифровкаПлатежа.СтатьяДвижения КАК СтатьяДвижения1
ИЗ
Справочник.СтатьиЗатрат КАК СтатьиЗатрат
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВыпискаБанка.РасшифровкаПлатежа КАК ВыпискаБанкаРасшифровкаПлатежа
ПО СтатьиЗатрат.Ссылка = ВыпискаБанкаРасшифровкаПлатежа.СтатьяДвижения
и ВыпискаБанкаРасшифровкаПлатежа.Субконто3 = &Проект
И ВыпискаБанка.Ссылка.Дата >= &НачПериода
И ВыпискаБанка.Ссылка.Дата <= &КонПериода
ЛЕВОЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет.РасшифровкаПлатежа КАК АвансовыйОтчетРасшифровкаПлатежа
ПО СтатьиЗатрат.Ссылка = АвансовыйОтчетРасшифровкаПлатежа.СтатьяДвижения
И АвансовыйОтчетРасшифровкаПлатежа.Субконто2 = &Проект
И АвансовыйОтчет.Ссылка.Дата >= &НачПериода
И АвансовыйОтчет.Ссылка.Дата <= &КонПериода
Тянуть данные из документов не есть хорошо, посмотрите по каким регистрам эти документы делают движения и используйте виртуальные таблицы оборотов для получения данных.