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

Строка складывается 2 раза

Автор Kerbert, 26 июн 2017, 17:21

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

Kerbert

Запрос = Новый Запрос("ВЫБРАТЬ
                      | СоглашенияСКлиентами.Номер КАК Номер,
                      | СоглашенияСКлиентами.Дата КАК Дата,
                      | РеализацияТоваровУслуг.Номер КАК НомерДок,
                      | СоглашенияСКлиентами.Контрагент КАК Покупатель,
                      | РеализацияТоваровУслуг.АдресДоставки КАК АдресДоставки,
                      | СоглашенияСКлиентами.КонтактноеЛицо.Наименование КАК Управляющий,
                      | СоглашенияСКлиентами.КонтактноеЛицо.ДолжностьПоВизитке КАК Должность,
                      | РеализацияТоваровУслуг.СпособДоставки КАК ВариантПоставки,
                      | РеализацияТоваровУслуг.ДатаПлатежа КАК Дата2,
                      | РеализацияТоваровУслуг.Склад КАК Склад,
                      | РеализацияТоваровУслуг.Ссылка КАК Ссылка,
                      | РеализацияТоваровУслуг.СуммаДокумента КАК Итого,
                      | СУММА(РеализацияТоваровУслугТовары.СуммаНДС)КАК НДС,                       
                      | СоглашенияСКлиентами.КонтактноеЛицо.Пол КАК Пол
                      |ИЗ
                      | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                      | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                      | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
                      | ПО РеализацияТоваровУслуг.Соглашение = СоглашенияСКлиентами.Ссылка
                      | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыКонтактнаяИнформация
                      | ПО РеализацияТоваровУслуг.Склад = СкладыКонтактнаяИнформация.Ссылка
                      | ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка
                      |
                      |СГРУППИРОВАТЬ ПО
                      | СоглашенияСКлиентами.Номер,
                      | СоглашенияСКлиентами.Дата,
                      | СоглашенияСКлиентами.Контрагент,
                      | РеализацияТоваровУслуг.АдресДоставки,
                      | СоглашенияСКлиентами.КонтактноеЛицо.Наименование,
                      | СоглашенияСКлиентами.КонтактноеЛицо.ДолжностьПоВизитке,
                      | РеализацияТоваровУслуг.СпособДоставки,
                      | РеализацияТоваровУслуг.ДатаПлатежа,
                      | РеализацияТоваровУслуг.Склад,
                      | РеализацияТоваровУслуг.СуммаДокумента,
                      | СоглашенияСКлиентами.КонтактноеЛицо.Пол,
                      | РеализацияТоваровУслуг.Номер,
                      | РеализацияТоваровУслуг.Ссылка
                      |;
                      |
                      |////////////////////////////////////////////////////////////////////////////////
                      |ВЫБРАТЬ
                      | РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
                      | РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
                      | РеализацияТоваровУслугТовары.Цена КАК Цена,
                      | РеализацияТоваровУслугТовары.Количество КАК Количество,
                      | РеализацияТоваровУслугТовары.Сумма КАК Сумма
                      |ИЗ
                      | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары");

                         
ПакетРезультатовЗапроса = Запрос.ВыполнитьПакет();
СтруктураДанныхДляПечати = Новый Структура;
СтруктураДанныхДляПечати.Вставить("РезультатПоШапке",    ПакетРезультатовЗапроса[0]);
СтруктураДанныхДляПечати.Вставить("РезультатПоТабличнойЧасти", ПакетРезультатовЗапроса[1]);

Возврат СтруктураДанныхДляПечати;

Если товаров в документе  больше чем 1 то все нормально ,а если товар только 1 ,то строка складывает НДС дважды.
На картинках товар в документе 1.

ilyay

У вас несколько таблиц соединяются. Если, например, где-то 2 контактных лица - вот вы и получаете две строки. Нужно отдельным подзапросом вычислить сумму (в нем можно, если хотите, соединить табличную часть с основным объектом), а потом этот подзапрос стыковать с другими таблицами.

Kerbert

Цитата: ilyay от 26 июн 2017, 21:47
У вас несколько таблиц соединяются. Если, например, где-то 2 контактных лица - вот вы и получаете две строки. Нужно отдельным подзапросом вычислить сумму (в нем можно, если хотите, соединить табличную часть с основным объектом), а потом этот подзапрос стыковать с другими таблицами.

Запрос = Новый Запрос("ВЫБРАТЬ
                      | СоглашенияСКлиентами.Номер КАК Номер,
                      | СоглашенияСКлиентами.Дата КАК Дата,
                      | РеализацияТоваровУслуг.Номер КАК НомерДок,
                      | СоглашенияСКлиентами.Контрагент КАК Покупатель,
                      | РеализацияТоваровУслуг.АдресДоставки КАК АдресДоставки,
                      | СоглашенияСКлиентами.КонтактноеЛицо.Наименование КАК Управляющий,
                      | СоглашенияСКлиентами.КонтактноеЛицо.ДолжностьПоВизитке КАК Должность,
                      | РеализацияТоваровУслуг.СпособДоставки КАК ВариантПоставки,
                      | РеализацияТоваровУслуг.ДатаПлатежа КАК Дата2,
                      | РеализацияТоваровУслуг.Склад КАК Склад,
                      | РеализацияТоваровУслуг.Ссылка КАК Ссылка,
                      | РеализацияТоваровУслуг.СуммаДокумента КАК Итого,
                      | СоглашенияСКлиентами.КонтактноеЛицо.Пол КАК Пол,
                      | ВложенныйЗапрос.СуммаНДС  КАК НДС
                      |ИЗ
                      | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                      | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                      | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
                      | ПО РеализацияТоваровУслуг.Соглашение = СоглашенияСКлиентами.Ссылка
                      | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыКонтактнаяИнформация
                      | ПО РеализацияТоваровУслуг.Склад = СкладыКонтактнаяИнформация.Ссылка
                      | ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка,
                      | (ВЫБРАТЬ
                      | РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
                      | СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС
                      | ИЗ
                      | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                      |
                      | СГРУППИРОВАТЬ ПО
                      | РеализацияТоваровУслугТовары.Ссылка) КАК ВложенныйЗапрос
                      |
                      |СГРУППИРОВАТЬ ПО
                      | СоглашенияСКлиентами.Номер,
                      | СоглашенияСКлиентами.Дата,
                      | СоглашенияСКлиентами.Контрагент,
                      | РеализацияТоваровУслуг.АдресДоставки,
                      | СоглашенияСКлиентами.КонтактноеЛицо.Наименование,
                      | СоглашенияСКлиентами.КонтактноеЛицо.ДолжностьПоВизитке,
                      | РеализацияТоваровУслуг.СпособДоставки,
                      | РеализацияТоваровУслуг.ДатаПлатежа,
                      | РеализацияТоваровУслуг.Склад,
                      | РеализацияТоваровУслуг.СуммаДокумента,
                      | СоглашенияСКлиентами.КонтактноеЛицо.Пол,
                      | РеализацияТоваровУслуг.Номер,
                      | РеализацияТоваровУслуг.Ссылка,
                      | ВложенныйЗапрос.СуммаНДС
                      |;
                      |
                      |////////////////////////////////////////////////////////////////////////////////
                      |ВЫБРАТЬ
                      | РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
                      | РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
                      | РеализацияТоваровУслугТовары.Цена КАК Цена,
                      | РеализацияТоваровУслугТовары.Количество КАК Количество,
                      | РеализацияТоваровУслугТовары.Сумма КАК Сумма
                      |ИЗ
                      | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары");

Если вы имели введу что-то такое , то оно не работает или я не совсем понял

ilyay

Оно не работает, потому что подзапрос не соединен с основной таблицей.

И еще одна ошибка: нет отбора. Вы над одним документом эту операцию проводите, или над всеми? Отбор можно поставить в подзапросе, если вы его левым соединением будете с основной таблицей соединять, где подзапрос слева.

Делать временную таблицу необязательно, если в подзапросе будет одна строка, т.е. если один документ (отбор по ссылке). Если документов может быть больше 1000 в выборке, тогда имеет смысл делать не подзапрос, а временную таблицу и индексировать ссылку.

Kerbert

Цитата: ilyay от 27 июн 2017, 10:16
Оно не работает, потому что подзапрос не соединен с основной таблицей.

И еще одна ошибка: нет отбора. Вы над одним документом эту операцию проводите, или над всеми? Отбор можно поставить в подзапросе, если вы его левым соединением будете с основной таблицей соединять, где подзапрос слева.

Делать временную таблицу необязательно, если в подзапросе будет одна строка, т.е. если один документ (отбор по ссылке). Если документов может быть больше 1000 в выборке, тогда имеет смысл делать не подзапрос, а временную таблицу и индексировать ссылку.
Да спасибо с НДС все заработало, а документов много ,я как раз хотел спросить как можно оптимизировать данный запрос. Попробую сделать , то что вы описали. А примера нет ,где это реализовано ?

ilyay

Группировка нужна только в подзапросе, потом она уже не имеет смысла.
Поле РеализацияТоваровУслуг.Склад - склад желательно индексировать, т.к. по нему идет соединение.
В остальном, вроде и так хорошо.

Остался вопрос, что запрос будет не по всем документам. Это можно либо добиться параметром Где Таблица.Ссылка В (&Ссылка), либо использованием построителя запроса с фигурными скобками в тексте запроса.

Теги:

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

Рейтинг@Mail.ru

Поиск