Имя: Пароль:
1C
1С v8
Сравнение 2х таблиц данных
,
0 nulback
 
26.01.18
14:55
Добрый день. Уважаемые подскажите пожалуйста, необходимо сравнить 2 таблицы значений, но не просто вывести сообщение что они равны или нет, а вывести различные строки и разницу в количестве между ними.
Например 2 таблицы имеют следующие колонки: Номенклатура, Единица, Количество. Необходимо вывести те строки, где номенклатуры нет в какой либо из таблиц, либо где существует разница между количеством из одной и другой таблицы. Спс.
1 wayss
 
26.01.18
14:57
(0) если нет дублей то запросом на раз сравнивается.
2 Darych
 
26.01.18
14:58
(0) запросом.. тз в вп и вуаля
3 Timon1405
 
26.01.18
15:03
1) Добавить к первой таблице колонку, заполнить ее числом 1.
2) Добавить ко второй таблице одноименную колонку, заполнить ее числом -1.
3) циклом по 2м таблицам сложить 2 таблицы в одну.
4) ОбщаяТаблица.Свернуть("ВсеИсходныеКолонки","НоваяКолонка");
5) в общей таблице все что в новой колонке совпадает -одинаковое в 2х исходных, то что с +1 - есть только в 1й таблице, что с "-1" - есть во второй таблице
4 Timon1405
 
26.01.18
15:04
*5) все что в новой колонке =0 - совпадает
5 Darych
 
26.01.18
15:05
(3,4) эх.. вспомнилась тут же 7.7 ))
6 Optan
 
26.01.18
15:11
Выбирай в зависимости от условий задачи:
http://catalog.mista.ru/public/326983/
7 hhhh
 
26.01.18
15:16
(5) ну Таблицы Значений практически не отличаются. Берешь программу для 7.7, вставляешь в 8. Всё.
8 nulback
 
26.01.18
15:21
(2)
Запросом как то не получается.
выходит все строки различные

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

разница у каждого своя. Не понимаю
9 Darych
 
26.01.18
15:25
бред какой... что за запрос?
10 nulback
 
26.01.18
15:27
(9) 2 таблицы в запрос, далее надо найти где количество в 2-х таблицах если взять разницу не равно 0 и найти потом где есть отличные строки по номенклатуре.
11 arsik
 
гуру
26.01.18
15:28
ВЫБРАТЬ
    ТЗ1.Номенклатура,
    ТЗ1.Единица,
    ТЗ1.Количество
ПОМЕСТИТЬ врТЗ1
ИЗ
    &ТЗ1 КАК ТЗ1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЗ2.Номенклатура,
    ТЗ2.Единица,
    ТЗ2.Количество
ПОМЕСТИТЬ врТЗ2
ИЗ
    &ТЗ2 КАК ТЗ2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЕСТЬNULL(врТЗ1.Номенклатура, врТЗ2.Номенклатура) КАК Номенклатура,
    ЕСТЬNULL(врТЗ1.Единица, врТЗ2.Единица) КАК Единица,
    ЕСТЬNULL(врТЗ1.Количество, 0) КАК Кол1,
    ЕСТЬNULL(врТЗ2.Количество, 0) КАК Кол2
ИЗ
    врТЗ1 КАК врТЗ1
        ПОЛНОЕ СОЕДИНЕНИЕ врТЗ2 КАК врТЗ2
        ПО врТЗ1.Номенклатура = врТЗ2.Номенклатура
            И врТЗ1.Единица = врТЗ2.Единица
            И врТЗ1.Количество = врТЗ2.Количество
ГДЕ
    (врТЗ1.Номенклатура ЕСТЬ NULL
            ИЛИ врТЗ2.Номенклатура ЕСТЬ NULL )
12 wayss
 
26.01.18
15:31
(8)
|ВЫБРАТЬ
|    Т1.Склад,
|    Т1.Номенклатура,
|    Т1.Качество,
|    Т1.ХарактеристикаНоменклатуры,
|    Т1.СерияНоменклатуры,
|    Т1.КоличествоОстаток
|ПОМЕСТИТЬ втТ1
|ИЗ
|    &Т1 КАК Т1
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Т2.Склад,
|    Т2.Номенклатура,
|    Т2.ХарактеристикаНоменклатуры,
|    Т2.Качество,
|    Т2.СерияНоменклатуры,
|    Т2.КоличествоОстаток
|ПОМЕСТИТЬ втТ2
|ИЗ
|    &Т2 КАК Т2
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    втТ1.Склад,
|    втТ1.Номенклатура,
|    втТ1.ХарактеристикаНоменклатуры,
|    втТ1.Качество,
|    втТ1.СерияНоменклатуры,
|    втТ1.КоличествоОстаток,
|    0 КАК Порядок
|ИЗ
|    втТ1 КАК втТ1
|ГДЕ
|    НЕ (втТ1.Склад, втТ1.Номенклатура, втТ1.ХарактеристикаНоменклатуры, втТ1.Качество, втТ1.СерияНоменклатуры, втТ1.КоличествоОстаток) В
|                (ВЫБРАТЬ
|                    втТ2.Склад,
|                    втТ2.Номенклатура,
|                    втТ2.ХарактеристикаНоменклатуры,
|                    втТ2.Качество,
|                    втТ2.СерияНоменклатуры,
|                    втТ2.КоличествоОстаток
|                ИЗ
|                    втТ2 КАК втТ2)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    втТ2.Склад,
|    втТ2.Номенклатура,
|    втТ2.ХарактеристикаНоменклатуры,
|    втТ2.Качество,
|    втТ2.СерияНоменклатуры,
|    втТ2.КоличествоОстаток,
|    1
|ИЗ
|    втТ2 КАК втТ2
|ГДЕ
|    НЕ (втТ2.Склад, втТ2.Номенклатура, втТ2.ХарактеристикаНоменклатуры, втТ2.Качество, втТ2.СерияНоменклатуры, втТ2.КоличествоОстаток) В
|                (ВЫБРАТЬ
|                    втТ1.Склад,
|                    втТ1.Номенклатура,
|                    втТ1.ХарактеристикаНоменклатуры,
|                    втТ1.Качество,
|                    втТ1.СерияНоменклатуры,
|                    втТ1.КоличествоОстаток
|                ИЗ
|                    втТ1 КАК втТ1)";
13 nulback
 
26.01.18
15:39
(11) (12) спс но только тут нет разницы по количеству. Если добавить условие что колтаб1 - колтаб2 <> 0 , будет задваивать резльутат по номенклатуре, и будет получатся такой список
Номенклатура1 колвотаб1 - 12
номенклатура1 колвотаб2 - 14, а надо просто вывести
номенклатура1 колворазница - 2
14 arsik
 
гуру
26.01.18
15:51
(13) Сгруппировать и Кол1-Кол2
ВЫБРАТЬ
    ТЗ1.Номенклатура,
    ТЗ1.Единица,
    ТЗ1.Количество
ПОМЕСТИТЬ врТЗ1
ИЗ
    &ТЗ1 КАК ТЗ1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЗ2.Номенклатура,
    ТЗ2.Единица,
    ТЗ2.Количество
ПОМЕСТИТЬ врТЗ2
ИЗ
    &ТЗ2 КАК ТЗ2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЕСТЬNULL(врТЗ1.Номенклатура, врТЗ2.Номенклатура) КАК Номенклатура,
    ЕСТЬNULL(врТЗ1.Единица, врТЗ2.Единица) КАК Единица,
    ЕСТЬNULL(врТЗ1.Количество, 0) КАК Кол1,
    ЕСТЬNULL(врТЗ2.Количество, 0) КАК Кол2
ПОМЕСТИТЬ втВР
ИЗ
    врТЗ1 КАК врТЗ1
        ПОЛНОЕ СОЕДИНЕНИЕ врТЗ2 КАК врТЗ2
        ПО врТЗ1.Номенклатура = врТЗ2.Номенклатура
            И врТЗ1.Единица = врТЗ2.Единица
            И врТЗ1.Количество = врТЗ2.Количество
ГДЕ
    (врТЗ1.Номенклатура ЕСТЬ NULL
            ИЛИ врТЗ2.Номенклатура ЕСТЬ NULL )
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втВР.Номенклатура,
    втВР.Единица,
    СУММА(втВР.Кол1 - втВР.Кол2) КАК Количество
ИЗ
    втВР КАК втВР

СГРУППИРОВАТЬ ПО
    втВР.Номенклатура,
    втВР.Единица