Имя: Пароль:
1C
1С v8
Сравнить таб. части без цикла
0 John83
 
06.09.13
16:43
Когда нам нужно сравнить две таблицы, то проблем нет - просто делаем полное соединение по всем колонкам.
Но что делать, если нужно сравнить ТЧ всех документов?
В нижеприведенном примере через параметр задаем заказ и запрос выводит различия в ТЧ заказа и реализации (будем считать, что заведен только один заказ и одна реализация) и чтобы вывести эти различия по всем заказам, нужно этот запрос запихнуть в цикл.
А как реализовать одним запросом?


ВЫБРАТЬ
    ЗаказПокупателяТовары.Номенклатура,
    ЗаказПокупателяТовары.ХарактеристикаНоменклатуры,
    ЗаказПокупателяТовары.Ссылка
ПОМЕСТИТЬ Заказ
ИЗ
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
ГДЕ
    ЗаказПокупателяТовары.Ссылка = &Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Ссылка.Сделка,
    РеализацияТоваровУслугТовары.Номенклатура,
    РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры
ПОМЕСТИТЬ Реализация
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Сделка = &Заказ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Заказ.Номенклатура,
    Заказ.ХарактеристикаНоменклатуры,
    Заказ.Ссылка
ИЗ
    Заказ КАК Заказ
        ПОЛНОЕ СОЕДИНЕНИЕ Реализация КАК Реализация
        ПО Заказ.Номенклатура = Реализация.Номенклатура
            И Заказ.ХарактеристикаНоменклатуры = Реализация.ХарактеристикаНоменклатуры
ГДЕ
    (Заказ.Ссылка ЕСТЬ NULL
            ИЛИ Реализация.Сделка ЕСТЬ NULL )
1 salvator
 
06.09.13
16:45
В (&МассивЗаказов)
2 John83
 
06.09.13
16:48
(1) даже если в соединение добавим "И Заказ.Ссылка = Реализация.Сделка" - будут соединяться все ТЧ
3 John83
 
06.09.13
16:49
в идеале сделать внутреннее соединение по сделке и полное по колонкам ТЧ
4 palpetrovich
 
06.09.13
16:51
точно нужно именно сравнить ТЧ? может достаточно типового отчета "Анализ заказа покупетеля"? там и отгружено и осталось и резерв  и заказаноУпоставщика... :)
5 John83
 
06.09.13
16:52
(4) в реальной задаче ни заказ, ни реализация не участвуют
6 palpetrovich
 
06.09.13
16:53
+4 если-же все-таки хочется нетлеку делать, то в сто раз лучше анализировать РН ЗаказыПокупателей, чем документы :)
7 palpetrovich
 
06.09.13
16:54
(5) т.е. (0) - для примера?
8 Sabbath
 
06.09.13
16:54
(2) Может, сначала сделать подзапрос сопоставляющий заказы и реализации, потом к нему соединять ТЧ и проверять равенство?
9 John83
 
06.09.13
16:55
(7) да
10 John83
 
06.09.13
17:00
вот такой пример будет на много лучше и ближе к задаче, только вместо ТЧ "РаспределениеМатериалов" используется своя таб. часть

ВЫБРАТЬ
    ОтчетПроизводстваЗаСменуМатериалы.Ссылка,
    ОтчетПроизводстваЗаСменуМатериалы.Номенклатура,
    ОтчетПроизводстваЗаСменуМатериалы.Спецификация,
    ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Ссылка КАК Ссылка1,
    ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Номенклатура КАК Номенклатура1,
    ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Спецификация КАК Спецификация1
ИЗ
    Документ.ОтчетПроизводстваЗаСмену.РаспределениеМатериалов КАК ОтчетПроизводстваЗаСменуРаспределениеМатериалов
        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Материалы КАК ОтчетПроизводстваЗаСменуМатериалы
        ПО (ОтчетПроизводстваЗаСменуМатериалы.Ссылка = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Ссылка)
            И (ОтчетПроизводстваЗаСменуМатериалы.Номенклатура = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Номенклатура)
            И (ОтчетПроизводстваЗаСменуМатериалы.ВидВыпуска = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.ВидВыпуска)
            И (ОтчетПроизводстваЗаСменуМатериалы.Заказ = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Заказ)
            И (ОтчетПроизводстваЗаСменуМатериалы.ЕдиницаИзмерения = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.ЕдиницаИзмерения)
            И (ОтчетПроизводстваЗаСменуМатериалы.Коэффициент = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Коэффициент)
            И (ОтчетПроизводстваЗаСменуМатериалы.Количество = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Количество)
            И (ОтчетПроизводстваЗаСменуМатериалы.СерияНоменклатуры = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.СерияНоменклатуры)
            И (ОтчетПроизводстваЗаСменуМатериалы.СтатьяЗатрат = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.СтатьяЗатрат)
            И (ОтчетПроизводстваЗаСменуМатериалы.ХарактеристикаНоменклатуры = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.ХарактеристикаНоменклатуры)
            И (ОтчетПроизводстваЗаСменуМатериалы.Спецификация = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Спецификация)
            И (ОтчетПроизводстваЗаСменуМатериалы.ЗаказВыпуска = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.ЗаказВыпуска)
            И (ОтчетПроизводстваЗаСменуМатериалы.ПодразделениеНЗП = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.ПодразделениеНЗП)
            И (ОтчетПроизводстваЗаСменуМатериалы.ПодразделениеОрганизацииНЗП = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.ПодразделениеОрганизацииНЗП)
            И (ОтчетПроизводстваЗаСменуМатериалы.НоменклатурнаяГруппа = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.НоменклатурнаяГруппа)
            И (ОтчетПроизводстваЗаСменуМатериалы.Ссылка = ОтчетПроизводстваЗаСменуРаспределениеМатериалов.Ссылка)
ГДЕ
    ОтчетПроизводстваЗаСменуМатериалы.Ссылка ЕСТЬ NULL
11 John83
 
06.09.13
17:51
(8) чет не допер, как именно...
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший