Убрать дублирующую часть строки по условию в запросе.
Добрый день, уважаемые форумчане!
Есть задача. У меня две табличные части из документов, которые я связываю с собой ЛЕВЫМ соединением по атрибутам Ссылка с Основанием (основание это ссылка на документ основание), Номенклатура, Серия.
Но так вышло что в документе серии у той же номенклатуры могут отличаться. Н-р,:
Таблица 1 Таблица 2
документ1 ном1 серия1 кол1 документ2 ном2 серия2 кол2
Ссылка Ном 1 3 Ссылка Ном 1 8
Ссылка Ном 2 5
И при такой связи я теряю данные по номенклатуре из таблицы 1, если связывать по серии, если же убрать эту связь, то все есть, но тогда дублируется строка из таблицы 2, а мне это не нужно, тогда уж склеивать ее с количеством 0.
Что получилось как то так:
ном1 серия1 кол1 кол2
Ном 1 3 8
Ном 2 5 0
Вот сам пример запроса:
Не подскажите как можно решить задачку?(
Есть задача. У меня две табличные части из документов, которые я связываю с собой ЛЕВЫМ соединением по атрибутам Ссылка с Основанием (основание это ссылка на документ основание), Номенклатура, Серия.
Но так вышло что в документе серии у той же номенклатуры могут отличаться. Н-р,:
Таблица 1 Таблица 2
документ1 ном1 серия1 кол1 документ2 ном2 серия2 кол2
Ссылка Ном 1 3 Ссылка Ном 1 8
Ссылка Ном 2 5
И при такой связи я теряю данные по номенклатуре из таблицы 1, если связывать по серии, если же убрать эту связь, то все есть, но тогда дублируется строка из таблицы 2, а мне это не нужно, тогда уж склеивать ее с количеством 0.
Что получилось как то так:
ном1 серия1 кол1 кол2
Ном 1 3 8
Ном 2 5 0
Вот сам пример запроса:
"ВЫБРАТЬ
| УведомлениеОВыдачеВОтделенияМДЛП.Ссылка КАК Уведомление,
| УведомлениеОВыдачеВОтделенияМДЛП.Основание КАК Отпуск,
| УведомлениеОВыдачеВОтделенияМДЛПТовары.Номенклатура КАК Номенклатура,
| УведомлениеОВыдачеВОтделенияМДЛПТовары.Серия КАК Серия,
| УведомлениеОВыдачеВОтделенияМДЛПТовары.Количество КАК Количество
|ПОМЕСТИТЬ ВТ_Уведомления
|ИЗ
| Документ.УведомлениеОВыдачеВОтделенияМДЛП КАК УведомлениеОВыдачеВОтделенияМДЛП
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.УведомлениеОВыдачеВОтделенияМДЛП.Товары КАК УведомлениеОВыдачеВОтделенияМДЛПТовары
| ПО УведомлениеОВыдачеВОтделенияМДЛП.Ссылка = УведомлениеОВыдачеВОтделенияМДЛПТовары.Ссылка
|ГДЕ
| УведомлениеОВыдачеВОтделенияМДЛП.Основание ССЫЛКА Документ.ОтпускТоваровВОтделение
| И УведомлениеОВыдачеВОтделенияМДЛП.Дата > &Дата
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ОтпускТоваровВОтделениеТовары.Ссылка КАК Ссылка,
| ОтпускТоваровВОтделениеТовары.Номенклатура КАК Номенклатура,
| ОтпускТоваровВОтделениеТовары.СерияНоменклатуры КАК СерияНоменклатуры,
| ОтпускТоваровВОтделениеТовары.Количество КАК Количество
|ПОМЕСТИТЬ ВТ_Отпуска
|ИЗ
| Документ.ОтпускТоваровВОтделение.Товары КАК ОтпускТоваровВОтделениеТовары
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ВТ_Отпуска.Ссылка КАК Ссылка,
| ВТ_Отпуска.Номенклатура КАК Номенклатура,
| ВТ_Отпуска.СерияНоменклатуры КАК СерияНоменклатуры,
| ВТ_Отпуска.Количество КАК КоличествоОтпуска,
| ВТ_Уведомления.Уведомление КАК Уведомление,
| ВТ_Уведомления.Количество КАК КоличествоВУведомлении
|ИЗ
| ВТ_Отпуска КАК ВТ_Отпуска
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Уведомления КАК ВТ_Уведомления
| ПО ВТ_Отпуска.Ссылка = ВТ_Уведомления.Отпуск
| И ВТ_Отпуска.Номенклатура = ВТ_Уведомления.Номенклатура
|ГДЕ
| ВТ_Уведомления.Отпуск.Проведен
| И ВТ_Уведомления.Уведомление.Проведен
| И ВТ_Отпуска.Ссылка = &Ссылка";
ПоказатьНе подскажите как можно решить задачку?(
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
А почему не добавить еще и соединение по сериям?
|ИЗ
| ВТ_Отпуска КАК ВТ_Отпуска
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Уведомления КАК ВТ_Уведомления
| ПО ВТ_Отпуска.Ссылка = ВТ_Уведомления.Отпуск
| И ВТ_Отпуска.Номенклатура = ВТ_Уведомления.Номенклатура
| И ВТ_Отпуска.СерияНоменклатуры= ВТ_Уведомления.Серия
(5) Как-то так. Могут быть ошибки, в блокноте писал
"ВЫБРАТЬ
| УведомлениеОВыдачеВОтделенияМДЛП.Ссылка КАК Уведомление,
| УведомлениеОВыдачеВОтделенияМДЛП.Основание КАК Отпуск,
| УведомлениеОВыдачеВОтделенияМДЛПТовары.Номенклатура КАК Номенклатура,
| УведомлениеОВыдачеВОтделенияМДЛПТовары.Серия КАК Серия,
| УведомлениеОВыдачеВОтделенияМДЛПТовары.Количество КАК Количество
|ПОМЕСТИТЬ ВТ_Уведомления
|ИЗ
| Документ.УведомлениеОВыдачеВОтделенияМДЛП КАК УведомлениеОВыдачеВОтделенияМДЛП
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.УведомлениеОВыдачеВОтделенияМДЛП.Товары КАК УведомлениеОВыдачеВОтделенияМДЛПТовары
| ПО УведомлениеОВыдачеВОтделенияМДЛП.Ссылка = УведомлениеОВыдачеВОтделенияМДЛПТовары.Ссылка
|ГДЕ
| УведомлениеОВыдачеВОтделенияМДЛП.Основание = &Ссылка
| И УведомлениеОВыдачеВОтделенияМДЛП.Дата > &Дата
| И УведомлениеОВыдачеВОтделенияМДЛП.Проведен
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ОтпускТоваровВОтделениеТовары.Ссылка КАК Ссылка,
| ОтпускТоваровВОтделениеТовары.Номенклатура КАК Номенклатура,
| ОтпускТоваровВОтделениеТовары.СерияНоменклатуры КАК СерияНоменклатуры,
| ОтпускТоваровВОтделениеТовары.Количество КАК Количество
|ПОМЕСТИТЬ ВТ_Отпуска
|ИЗ
| Документ.ОтпускТоваровВОтделение.Товары КАК ОтпускТоваровВОтделениеТовары
|ГДЕ
| ОтпускТоваровВОтделениеТовары.Ссылка = &Ссылка
| И ОтпускТоваровВОтделениеТовары.Проведен
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ЕСТЬNULL(ВТ_Отпуска.Ссылка, ВТ_Уведомления.Отпуск) КАК Ссылка,
| ЕСТЬNULL(ВТ_Отпуска.Номенклатура, ВТ_Уведомления.Номенклатура) КАК Номенклатура,
| ЕСТЬNULL(ВТ_Отпуска.СерияНоменклатуры, ВТ_Уведомления.Серия) КАК СерияНоменклатуры,
| ЕСТЬNULL(ВТ_Отпуска.Количество, 0) КАК КоличествоОтпуска,
| ВТ_Уведомления.Уведомление КАК Уведомление,
| ЕСТЬNULL(ВТ_Уведомления.Количество, 0) КАК КоличествоВУведомлении
|ИЗ
| ВТ_Отпуска КАК ВТ_Отпуска
| ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Уведомления КАК ВТ_Уведомления
| ПО ВТ_Отпуска.Ссылка = ВТ_Уведомления.Отпуск
| И ВТ_Отпуска.Номенклатура = ВТ_Уведомления.Номенклатура
| И ВТ_Отпуска.СерияНоменклатуры = ВТ_Уведомления.Серия";
Показать
Надо для начала определить ключи связи двух таблиц, которые будут однозначно идентифицировать какие строки из правой таблицы надо присоединять к левой. В Вашем случае, как я понял, одной номенклатуры недостаточно, а номенклатура+серия избыточно. Если существующими колонками этого сделать нельзя (а я так понял, что нельзя), то нужно сделать отдельную колонку в каждой таблице, прям добавить в конфигураторе, например "ИдентификаторДляСвязи" и программно, например обработкой, пройтись по всем документам и заполнить эти идентификаторы. А в запросе уже соединять не по номенклатуре и серии, а по ИдентификаторуДляСвязи. И перед записью документа потом пропишите правила заполнения идентификаторов.
(11)Вы увидели только часть, в которой я написал про доработку, а самого главного не увидели.
Какие ключи будут однозначно идентифицировать какие строки из правой таблицы надо присоединять к левой?
Надо для начала определить ключи связи двух таблиц, которые будут однозначно идентифицировать какие строки из правой таблицы надо присоединять к левой
Какие ключи будут однозначно идентифицировать какие строки из правой таблицы надо присоединять к левой?
(12)Вы мне предлагаете что то такое делать что ли, просто не пойму как добиться результата через вложенный запрос.
Запрос:
Мне ведь нужно получить таблицу...Пример
Документ отпуск: Ном1, Серия 1, Количество 3, Ном1, Серия 2, Количество 2
Документ уведомление( отпуск это основание этого документа): Ном1, Серия 1, Количество 5
и нужно чтобы выходила таблица
Ссылка Отпуск, Ссылка Уведомление Номенклатура Серия КоличествоВОтпуск КоличествоВУведомлении
Ссылка Ссылка Ном1 1 3 5
Ссылка - Ном1 2 2 0
Запрос:
ВЫБРАТЬ
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
ВложенныйЗапрос.СерияНоменклатуры КАК СерияНоменклатуры,
ВложенныйЗапрос.Ссылка КАК Ссылка,
ВложенныйЗапрос.Количество_Отпуск КАК Количество_Отпуск,
ВложенныйЗапрос.Количество_Уведомление КАК Количество_Уведомление,
ВложенныйЗапрос.Умедомление КАК Умедомление
ИЗ
(ВЫБРАТЬ
ОтпускТоваровВОтделениеТовары.Ссылка КАК Ссылка,
ОтпускТоваровВОтделениеТовары.СерияНоменклатуры КАК СерияНоменклатуры,
ОтпускТоваровВОтделениеТовары.Количество КАК Количество_Отпуск,
ОтпускТоваровВОтделениеТовары.Номенклатура КАК Номенклатура,
0 КАК Количество_Уведомление,
УведомлениеОВыдачеВОтделенияМДЛП.Ссылка КАК Умедомление
ИЗ
Документ.ОтпускТоваровВОтделение.Товары КАК ОтпускТоваровВОтделениеТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.УведомлениеОВыдачеВОтделенияМДЛП КАК УведомлениеОВыдачеВОтделенияМДЛП
ПО ОтпускТоваровВОтделениеТовары.Ссылка = УведомлениеОВыдачеВОтделенияМДЛП.Основание
ГДЕ
ОтпускТоваровВОтделениеТовары.СерияНоменклатуры.СерияПромаркированаДляЦелейМДЛП = ИСТИНА
И ОтпускТоваровВОтделениеТовары.Ссылка.Проведен = ИСТИНА
{ГДЕ
(ОтпускТоваровВОтделениеТовары.Номенклатура = &Номенклатура) КАК Поле2}
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
УведомлениеОВыдачеВОтделенияМДЛП.Основание,
УведомлениеОВыдачеВОтделенияМДЛПТовары.Серия,
0,
УведомлениеОВыдачеВОтделенияМДЛПТовары.Номенклатура,
УведомлениеОВыдачеВОтделенияМДЛПТовары.Количество,
УведомлениеОВыдачеВОтделенияМДЛПТовары.Ссылка
ИЗ
Документ.УведомлениеОВыдачеВОтделенияМДЛП.Товары КАК УведомлениеОВыдачеВОтделенияМДЛПТовары
ЛЕВОЕ СОЕДИНЕНИЕ Документ.УведомлениеОВыдачеВОтделенияМДЛП КАК УведомлениеОВыдачеВОтделенияМДЛП
ПО УведомлениеОВыдачеВОтделенияМДЛПТовары.Ссылка = УведомлениеОВыдачеВОтделенияМДЛП.Ссылка) КАК ВложенныйЗапрос
ПоказатьМне ведь нужно получить таблицу...Пример
Документ отпуск: Ном1, Серия 1, Количество 3, Ном1, Серия 2, Количество 2
Документ уведомление( отпуск это основание этого документа): Ном1, Серия 1, Количество 5
и нужно чтобы выходила таблица
Ссылка Отпуск, Ссылка Уведомление Номенклатура Серия КоличествоВОтпуск КоличествоВУведомлении
Ссылка Ссылка Ном1 1 3 5
Ссылка - Ном1 2 2 0
(13) Вы в {1} формулировали вот такое задание. Определитесь какой документ Вы хотите отображать и отображайте.
На бумаге для себя нарисуйте входные данные и что вы хотите на выходе. А то, то не нужен документ, то нужен, но не знаю какой. :-)
На бумаге для себя нарисуйте входные данные и что вы хотите на выходе. А то, то не нужен документ, то нужен, но не знаю какой. :-)
Прикрепленные файлы:
(19)
Как вариант придумал такое извращение...
ВЫБРАТЬ
УведомлениеОВыдачеВОтделенияМДЛП.Ссылка КАК Уведомление,
УведомлениеОВыдачеВОтделенияМДЛП.Основание КАК Отпуск,
УведомлениеОВыдачеВОтделенияМДЛПТовары.Номенклатура КАК Номенклатура,
УведомлениеОВыдачеВОтделенияМДЛПТовары.Серия КАК Серия,
УведомлениеОВыдачеВОтделенияМДЛПТовары.Количество КАК Количество
ПОМЕСТИТЬ ВТ_Уведомления
ИЗ
Документ.УведомлениеОВыдачеВОтделенияМДЛП КАК УведомлениеОВыдачеВОтделенияМДЛП
ЛЕВОЕ СОЕДИНЕНИЕ Документ.УведомлениеОВыдачеВОтделенияМДЛП.Товары КАК УведомлениеОВыдачеВОтделенияМДЛПТовары
ПО (УведомлениеОВыдачеВОтделенияМДЛП.Ссылка = УведомлениеОВыдачеВОтделенияМДЛПТовары.Ссылка)
ГДЕ
УведомлениеОВыдачеВОтделенияМДЛП.Дата > &Дата
И УведомлениеОВыдачеВОтделенияМДЛП.Проведен
И УведомлениеОВыдачеВОтделенияМДЛПТовары.Номенклатура = &Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ОтпускТоваровВОтделениеТовары.Ссылка КАК Ссылка,
ОтпускТоваровВОтделениеТовары.Номенклатура КАК Номенклатура,
ОтпускТоваровВОтделениеТовары.СерияНоменклатуры КАК СерияНоменклатуры,
ОтпускТоваровВОтделениеТовары.Количество КАК Количество,
СУММА(1) КАК КоличествоУведомлений
ПОМЕСТИТЬ ВТ_Отпуска
ИЗ
ВТ_Уведомления КАК ВТ_Уведомления
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтпускТоваровВОтделение.Товары КАК ОтпускТоваровВОтделениеТовары
ПО ВТ_Уведомления.Отпуск = ОтпускТоваровВОтделениеТовары.Ссылка
И (ОтпускТоваровВОтделениеТовары.СерияНоменклатуры.СерияПромаркированаДляЦелейМДЛП)
ГДЕ
ОтпускТоваровВОтделениеТовары.Номенклатура = &Номенклатура
СГРУППИРОВАТЬ ПО
ОтпускТоваровВОтделениеТовары.Ссылка,
ОтпускТоваровВОтделениеТовары.Номенклатура,
ОтпускТоваровВОтделениеТовары.СерияНоменклатуры,
ОтпускТоваровВОтделениеТовары.Количество
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
АВТОНОМЕРЗАПИСИ() КАК НомерЗаписи,
ЕСТЬNULL(ВТ_Отпуска.Ссылка, ВТ_Уведомления.Отпуск) КАК Ссылка,
ЕСТЬNULL(ВТ_Отпуска.Номенклатура, ВТ_Уведомления.Номенклатура) КАК Номенклатура,
ЕСТЬNULL(ВТ_Отпуска.СерияНоменклатуры, ВТ_Уведомления.Серия) КАК СерияНоменклатуры,
ЕСТЬNULL(ВТ_Отпуска.Количество, 0) КАК КоличествоОтпуска,
ВТ_Уведомления.Уведомление КАК Уведомление,
ЕСТЬNULL(ВТ_Уведомления.Количество, 0) КАК КоличествоВУведомлении,
ВТ_Отпуска.КоличествоУведомлений КАК КоличествоУведомлений
ПОМЕСТИТЬ ВТ_Результат
ИЗ
ВТ_Отпуска КАК ВТ_Отпуска
ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Уведомления КАК ВТ_Уведомления
ПО ВТ_Отпуска.Ссылка = ВТ_Уведомления.Отпуск
И ВТ_Отпуска.Номенклатура = ВТ_Уведомления.Номенклатура
И ВТ_Отпуска.СерияНоменклатуры = ВТ_Уведомления.Серия
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Результат.Ссылка КАК Ссылка,
ВТ_Результат.Номенклатура КАК Номенклатура,
ВТ_Результат.СерияНоменклатуры КАК СерияНоменклатуры,
ВЫБОР
КОГДА ВТ_Результат.НомерЗаписи > 1
И ВТ_Результат.КоличествоУведомлений > 1
И ВТ_Результат.КоличествоОтпуска = ВТ_Отпуска.Количество
ТОГДА 0
ИНАЧЕ ВТ_Результат.КоличествоОтпуска
КОНЕЦ КАК КоличествоОтпуска,
ВТ_Результат.Уведомление КАК Уведомление,
ВТ_Результат.КоличествоВУведомлении КАК КоличествоВУведомлении
ИЗ
ВТ_Отпуска КАК ВТ_Отпуска
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Результат КАК ВТ_Результат
ПО (ВТ_Результат.Ссылка = ВТ_Отпуска.Ссылка
И ВТ_Результат.Номенклатура = ВТ_Результат.Номенклатура
И ВТ_Результат.СерияНоменклатуры = ВТ_Результат.СерияНоменклатуры)
ПоказатьКак вариант придумал такое извращение...
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот