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

8.2 Полное соединение в ТЧ документа

Автор Hel, 27 мар 2015, 16:16

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

LexaK

советы со сторны иногда могут быть неправильные или не понятные, до этого у вас был почти правильный запрос


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





Цитата: vitasw от 30 мар 2015, 16:29
Цитата: cska-fanat-kz от 30 мар 2015, 15:22в ТЧ2 строки есть, а в ТЧ1 строк нет...
Логически. Согласен.))

соединение ПОЛНОЕ!!! без разницы сколько строчек в таблицах, вернется все, надо только избегать мультиплицирования.
если помогло нажмите: Спасибо!

cska-fanat-kz

запрос к основной таблице документа,
со всеми отборами
получаем ссылки на нужные доки.
далее соединяем полученную таблицу с таблицами ТЧ по ссылке
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

Цитата: LexaK от 31 мар 2015, 10:14соединение ПОЛНОЕ!!! без разницы сколько строчек в таблицах, вернется все, надо только избегать мультиплицирования.
Так это понятно. Только в выборку попадут и те документы у которых заполнена ТЧ2, но дата которых отличается от периода отбора.


Hel

сделала с РАЗЛИЧНЫЕ... все равно не получается нужного результата...ищет соответствие только тем Номенклатурам которые указаны в ТЧ1
на счет отбора...у меня один и тот же документ...т.е. делаю полное соединение ТЧ по номенклатуре одного и того же документа...как  в нем дата может отличаться?!:dfbsdfbsdf:
Добавлено: 31 мар 2015, 11:49


Цитата: cska-fanat-kz от 31 мар 2015, 11:03
запрос к основной таблице документа,
со всеми отборами
получаем ссылки на нужные доки.
далее соединяем полученную таблицу с таблицами ТЧ по ссылке
что значит запрос к основной таблице? как определить основную?:kmtu:

cska-fanat-kz

Цитата: Hel от 31 мар 2015, 11:48что значит запрос к основной таблице? как определить основную?

когда в конструкторе запроса раскрываете ветку какого нить документа то можете выбрать таблицу самого документа и таблицу каждой ТЧ.
вот про первую таблицу и речь.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

LexaK

извиняюсь ошибся, попробуйте такой запрос, с учетом того что cska-fanat-kz, предложил


"ВЫБРАТЬ различные //в этом варианте, так убираем возможное мультиплицирование
    |//если в ТЧ1 и ТЧ2 есть по несколько строчек с одинаковым товаром
    |    Док.Ссылка КАК Документ,
    |    ТЧ1.Номенклатура КАК Ном1,
    |    ТЧ2.Номенклатура КАК Ном2
    |ИЗ
    |    Документ.Док КАК Док
    |левое соединение Документ.Док.ТЧ1 КАК ТЧ1
    |    по Док.Ссылка = ТЧ1.Ссылка
    |левое соединение Документ.Док.ТЧ2 КАК ТЧ2
    |    по Док.Ссылка = ТЧ2.Ссылка
    |ГДЕ
    |     Док.Проведен
    |И Не Док.ПометкаУдаления
    |И    Док.Дата МЕЖДУ &ДатаНач И &ДатаКон
    |
    |Упорядочить по
    |    1,2,3 автоупорядочивание
    |";




у вас получится сочетание всех товаров из ТЧ1 с товарами из ТЧ2
примерно количество строк ТЧ1 умноженное на количество строк ТЧ2 (если товары не повторяются)
если помогло нажмите: Спасибо!

vitasw

А где пересечение по номенклатуре?
Добавлено: 31 мар 2015, 12:47


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СчетНаОплатуПокупателю.Ссылка
|ПОМЕСТИТЬ ВТДок
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|ГДЕ
| СчетНаОплатуПокупателю.Проведен
| И СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТДок.Ссылка,
| СчетНаОплатуПокупателюТовары.Номенклатура
|ИЗ
| ВТДок КАК ВТДок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
| ПО ВТДок.Ссылка = СчетНаОплатуПокупателюТовары.Ссылка
|ГДЕ
| НЕ СчетНаОплатуПокупателюТовары.Номенклатура ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВТДок.Ссылка,
| СчетНаОплатуПокупателюУслуги.Номенклатура
|ИЗ
| ВТДок КАК ВТДок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Услуги КАК СчетНаОплатуПокупателюУслуги
| ПО ВТДок.Ссылка = СчетНаОплатуПокупателюУслуги.Ссылка
|ГДЕ
| НЕ СчетНаОплатуПокупателюУслуги.Номенклатура ЕСТЬ NULL ";

Запрос.УстановитьПараметр("Дата1", Дата1);
Запрос.УстановитьПараметр("Дата2", Дата2);

Е-мое, тоже фигня получилась

LexaK

как я понял нужны все сочетания товаров

Тов1 - Тов1
Тов1 - Тов2
Тов1 - Тов3
Тов2 - Тов1
Тов2 - Тов2
Тов2 - Тов3

вот если только не нужны одинаковые товары, тип
Тов1 - Тов1
Тов2 - Тов2

тогда в условие надо добавить

ТЧ1.Номенклатура <> ТЧ2.Номенклатура
если помогло нажмите: Спасибо!

vitasw

Вроде так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СчетНаОплатуПокупателю.Ссылка
|ПОМЕСТИТЬ ВТДок
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|ГДЕ
| СчетНаОплатуПокупателю.Проведен
| И СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СчетНаОплатуПокупателюТовары.Номенклатура,
| ВТДок.Ссылка
|ПОМЕСТИТЬ ВТТовар
|ИЗ
| ВТДок КАК ВТДок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
| ПО ВТДок.Ссылка = СчетНаОплатуПокупателюТовары.Ссылка
|ГДЕ
| НЕ СчетНаОплатуПокупателюТовары.Номенклатура ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СчетНаОплатуПокупателюУслуги.Номенклатура,
| ВТДок.Ссылка
|ПОМЕСТИТЬ ВТУслуги
|ИЗ
| ВТДок КАК ВТДок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Услуги КАК СчетНаОплатуПокупателюУслуги
| ПО ВТДок.Ссылка = СчетНаОплатуПокупателюУслуги.Ссылка
|ГДЕ
| НЕ СчетНаОплатуПокупателюУслуги.Номенклатура ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТТовар.Номенклатура КАК Товар,
| ВТУслуги.Номенклатура КАК Устуга
|ИЗ
| ВТТовар КАК ВТТовар
| ПОЛНОЕ СОЕДИНЕНИЕ ВТУслуги КАК ВТУслуги
| ПО ВТТовар.Ссылка = ВТУслуги.Ссылка
| И ВТТовар.Номенклатура = ВТУслуги.Номенклатура";

Запрос.УстановитьПараметр("Дата1", Дата1);
Запрос.УстановитьПараметр("Дата2", Дата2);

Hel

Цитата: vitasw от 31 мар 2015, 13:00
Вроде так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СчетНаОплатуПокупателю.Ссылка
|ПОМЕСТИТЬ ВТДок
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
|ГДЕ
| СчетНаОплатуПокупателю.Проведен
| И СчетНаОплатуПокупателю.Дата МЕЖДУ &Дата1 И &Дата2
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СчетНаОплатуПокупателюТовары.Номенклатура,
| ВТДок.Ссылка
|ПОМЕСТИТЬ ВТТовар
|ИЗ
| ВТДок КАК ВТДок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
| ПО ВТДок.Ссылка = СчетНаОплатуПокупателюТовары.Ссылка
|ГДЕ
| НЕ СчетНаОплатуПокупателюТовары.Номенклатура ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СчетНаОплатуПокупателюУслуги.Номенклатура,
| ВТДок.Ссылка
|ПОМЕСТИТЬ ВТУслуги
|ИЗ
| ВТДок КАК ВТДок
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Услуги КАК СчетНаОплатуПокупателюУслуги
| ПО ВТДок.Ссылка = СчетНаОплатуПокупателюУслуги.Ссылка
|ГДЕ
| НЕ СчетНаОплатуПокупателюУслуги.Номенклатура ЕСТЬ NULL
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
//как здесь правильно обратиться  к ссылке документа?
//в макете хочу выводить 3 поля Док, Товар, Услуга

| ВТТовар.Номенклатура КАК Товар,
| ВТУслуги.Номенклатура КАК Устуга
|ИЗ
| ВТТовар КАК ВТТовар
| ПОЛНОЕ СОЕДИНЕНИЕ ВТУслуги КАК ВТУслуги
| ПО ВТТовар.Ссылка = ВТУслуги.Ссылка
| И ВТТовар.Номенклатура = ВТУслуги.Номенклатура";

Запрос.УстановитьПараметр("Дата1", Дата1);
Запрос.УстановитьПараметр("Дата2", Дата2);

Добавлено: 31 мар 2015, 16:52


Цитата: cska-fanat-kz от 31 мар 2015, 12:15
Цитата: Hel от 31 мар 2015, 11:48что значит запрос к основной таблице? как определить основную?

когда в конструкторе запроса раскрываете ветку какого нить документа то можете выбрать таблицу самого документа и таблицу каждой ТЧ.
вот про первую таблицу и речь.

спасибо, разобралась :)
Добавлено: 31 мар 2015, 16:57


Цитата: LexaK от 31 мар 2015, 12:56
как я понял нужны все сочетания товаров

Тов1 - Тов1
Тов1 - Тов2
Тов1 - Тов3
Тов2 - Тов1
Тов2 - Тов2
Тов2 - Тов3

вот если только не нужны одинаковые товары, тип
Тов1 - Тов1
Тов2 - Тов2

тогда в условие надо добавить

ТЧ1.Номенклатура <> ТЧ2.Номенклатура

вот так хочется )))
Тов1 - Тов1
Тов2 - Тов2
NULL  - Тов3
Тов4 - NULL

Теги:

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

Рейтинг@Mail.ru

Поиск