Имя: Пароль:
1C
 
Проверка на соответствие двух таблиц документа
0 NIGHTHUNTER
 
29.08.22
06:09
Необходимо сделать проверку на соответствие двух таблиц документа.
Проверить поля Номенклатура, Характеристика, Количество в одной таблице,
на соответствие полям Номенклатура, Характеристика, Количество поступления в другой таблице.
Для установки статуса документа закрыт.
Как правильнее проверить, что содержимое одной таблицы, равно содержимому другой таблицы?
1 Mihasya
 
29.08.22
06:15
ПОЛНОЕ СОЕДИНЕНИЕ
2 NIGHTHUNTER
 
29.08.22
07:19
(1) Если таблица Товары, будет соответствовать таблице ОтметкиСклада, то будет происходить выборка?
Если в них будет разница, например разное количество, то выборки не будет?

ВЫБРАТЬ
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Номенклатура КАК Номенклатура,
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Характеристика КАК Характеристика,
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Количество КАК Количество,
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Номенклатура КАК Номенклатура1,
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Характеристика КАК Характеристика1,
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.КоличествоПолученоСкладом КАК КоличествоПолученоСкладом
ИЗ
    Документ.ХХХ_ПредварительныйЗаказПоставщику.ОтметкиСклада КАК ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада
        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ХХХ_ПредварительныйЗаказПоставщику.Товары КАК ХХХ_ПредварительныйЗаказПоставщикуТовары
        ПО (ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка = ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка)
ГДЕ
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка = &Ссылка
3 NIGHTHUNTER
 
29.08.22
07:20
поставил разное количество, все равно выбирает, какие тут тонкости ?
4 NIGHTHUNTER
 
29.08.22
07:21
Соответствия полей нужно на равенство устанавливать? всех трех?
5 NIGHTHUNTER
 
29.08.22
07:24
Верно ли будет так?

ВЫБРАТЬ
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Номенклатура КАК Номенклатура,
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Характеристика КАК Характеристика,
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Количество КАК Количество,
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Номенклатура КАК Номенклатура1,
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Характеристика КАК Характеристика1,
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.КоличествоПолученоСкладом КАК КоличествоПолученоСкладом
ИЗ
    Документ.ХХХ_ПредварительныйЗаказПоставщику.ОтметкиСклада КАК ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада
        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ХХХ_ПредварительныйЗаказПоставщику.Товары КАК ХХХ_ПредварительныйЗаказПоставщикуТовары
        ПО (ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка = ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка)
ГДЕ
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка = &Ссылка
    И ХХХ_ПредварительныйЗаказПоставщикуТовары.Номенклатура = ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Номенклатура
            И ХХХ_ПредварительныйЗаказПоставщикуТовары.Характеристика = ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Характеристика
            И ХХХ_ПредварительныйЗаказПоставщикуТовары.Количество = ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.КоличествоПолученоСкладом
6 Ёпрст
 
29.08.22
07:30
(3) На вот, занимайся, лень читать потом бред в 200 постов

Выбрать
  Табличка.Номенклатура,
   Табличка.Харрактиристика,
   Сумма(Табличка.Количество)
ИЗ(

Выбрать
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Номенклатура КАК Номенклатура,
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Характеристика КАК Характеристика,
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.КоличествоПолученоСкладом КАК Количество
ИЗ
    Документ.ХХХ_ПредварительныйЗаказПоставщику.ОтметкиСклада КАК ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада
ГДЕ
    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка = &Ссылка
Объединить все
   ХХХ_ПредварительныйЗаказПоставщикуТовары.Номенклатура,
   ХХХ_ПредварительныйЗаказПоставщикуТовары.Характеристика,
  -ХХХ_ПредварительныйЗаказПоставщикуТовары.Количество
ИЗ
   Документ.ХХХ_ПредварительныйЗаказПоставщику.Товары КАК ХХХ_ПредварительныйЗаказПоставщикуТовары
ГДЕ
    ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка = &Ссылка ) как Табличка
Сгруппировать По Табличка.Номенклатура,Табличка.Характеристика
Имеющие Сумма(Табличка.Количество)<>0

...........

ЕстьРазница = НЕ Запрос.Выполнить().Пустой();
7 NIGHTHUNTER
 
29.08.22
07:38
(8) Количество у таблиц, по разному называется .

    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Номенклатура КАК Номенклатура,
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Характеристика КАК Характеристика,
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.КоличествоПолученоСкладом КАК КоличествоПолученоСкладом,
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.Номенклатура КАК Номенклатура1,
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.Характеристика КАК Характеристика1,
        |    ХХХ_ПредварительныйЗаказПоставщикуТовары.Количество КАК Количество
        |ИЗ
        |    Документ.ХХХ_ПредварительныйЗаказПоставщику.ОтметкиСклада КАК ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада
        |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ХХХ_ПредварительныйЗаказПоставщику.Товары КАК ХХХ_ПредварительныйЗаказПоставщикуТовары
        |        ПО ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка = ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка
        |ГДЕ
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка = &Ссылка
        |    И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Номенклатура = ХХХ_ПредварительныйЗаказПоставщикуТовары.Номенклатура
        |    И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Характеристика = ХХХ_ПредварительныйЗаказПоставщикуТовары.Характеристика
        |    И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.КоличествоПолученоСкладом = ХХХ_ПредварительныйЗаказПоставщикуТовары.Количество";
8 NIGHTHUNTER
 
29.08.22
07:39
(7) Сначала делаю связь таблицы ОтметкиСклада потом Товары. И по полям.
9 NIGHTHUNTER
 
29.08.22
07:42
(6) Хотя да у вас псевдонимы устанавливаются же в первом запросе объединения.
Понял спасибо.

Но а (7)  то же, же будет работать правильно?

В (6) другая структура запроса, с той же логикой?

(7) -> (6)
10 Ёпрст
 
29.08.22
07:46
(9) Читать то умеешь ? Тебе дали готовый код, пользуйся. Своё выкинь в топку.
11 NIGHTHUNTER
 
29.08.22
08:36
(10) Понятно. Хотел узнать, что не так в моем коде. У вас своя технология.
12 Ёпрст
 
29.08.22
08:57
(11) нет никакой "технологии", почитай на ночь, что еть full join и чем это отличается от union all
13 Ryzeman
 
29.08.22
09:00
(12) Как говорили умные люди - ливингстара учить - только портить. Не почитает, а если почитает и поймёт, то не усвоит и не запомнит точно)
14 6awkup_true
 
29.08.22
09:01
а еще можно добавить строки второй таблицы в первую и свернуть итоговую таблицу. если количество строк не изменилось по сравнению с первой - таблицы идентичны
15 NIGHTHUNTER
 
29.08.22
09:19
(6) Я хотел в консоле ваш запрос открыть не открывается.
16 NIGHTHUNTER
 
29.08.22
09:20
(6) Как это применять , если это не работает.
Я понимаю, что вы набросали. и все понимаете, как там и что.
17 Ёпрст
 
29.08.22
09:21
(16) а чего, копипасте сломал уже ?
18 Ёпрст
 
29.08.22
09:21
что значит "не работает" ?
19 СеменовСемен
 
29.08.22
09:22
(1) лучше объединить
20 Ёпрст
 
29.08.22
09:25
(16) если че, после Объединить все воткни слово выбрать
21 rsv
 
29.08.22
09:34
(0) union all  . В первой табличке доп поле -1
Во второй +1. Группировка по полям и Сумма по доп . полю и having <>0
22 NIGHTHUNTER
 
29.08.22
09:36
так открывается конструктор

ВЫБРАТЬ
    ТАБЛИЧКА.Номенклатура КАК Номенклатура,
    ТАБЛИЧКА.Характеристика КАК Характеристика,
    СУММА(ТАБЛИЧКА.Количество) КАК Количество
ИЗ
    (ВЫБРАТЬ
        ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Номенклатура КАК Номенклатура,
        ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Характеристика КАК Характеристика,
        ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.КоличествоПолученоСкладом КАК Количество
    ИЗ
        Документ.ХХХ_ПредварительныйЗаказПоставщику.ОтметкиСклада КАК ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ХХХ_ПредварительныйЗаказПоставщикуТовары.Номенклатура,
        ХХХ_ПредварительныйЗаказПоставщикуТовары.Характеристика,
        ХХХ_ПредварительныйЗаказПоставщикуТовары.Количество
    ИЗ
        Документ.ХХХ_ПредварительныйЗаказПоставщику.Товары КАК ХХХ_ПредварительныйЗаказПоставщикуТовары
    ГДЕ
        ХХХ_ПредварительныйЗаказПоставщикуТовары.Ссылка = &Ссылка) КАК ТАБЛИЧКА

СГРУППИРОВАТЬ ПО
    ТАБЛИЧКА.Номенклатура,
    ТАБЛИЧКА.Характеристика

ИМЕЮЩИЕ
    СУММА(ТАБЛИЧКА.Количество) <> 0
23 rsv
 
29.08.22
09:41
(0) но лучше конечно выгрузить в xml потом в json и обратно.
Хоия бы 1с задействуем
24 rsv
 
29.08.22
09:42
:)
25 NIGHTHUNTER
 
29.08.22
09:44
Не совсем понимаю этот запрос (6) . Есть, документ.
Там 2 тч, ОтметкиСклада и Товары.
В них поля, Номенклатура, Характеристика, Количество (КоличествоПолученоСкладом).
Нужно что бы, если в 1 тч, количество 1, во второй 2, уже не выбиралось.
(6) этого не сделает.
(7) это сделает.
26 NIGHTHUNTER
 
29.08.22
09:44
(26) Так же. если разные номенклатура или характеристика. тоже.
27 Ёпрст
 
29.08.22
09:52
(25) ну п..ц
(6) тебе на выходе ЕстьРазница = НЕ Запрос.Выполнить().Пустой(); покажет, есть разница или нет.
При желании, можно обойти выборкой запрос (если результат не пустой) и посмотреть, в какой номенклатуре разница
28 Ёпрст
 
29.08.22
09:53
(22) Пилять, скажи честно, кто у тебя копипасте отобрал ?
Куда Минус дел в селект листе вот тут :
-ХХХ_ПредварительныйЗаказПоставщикуТовары.Количество
29 Ryzeman
 
29.08.22
09:53
(25) у тебья две табличный части
Номенклатура Характеристика Количество
Персик           Свежий         1
Груша            Гнилой         2
Персик           Свежий         1

В другой
Персик            Свежий        2
Груша             Гнилой        2

Ты делаешь из них одну таблицу, где в первой таблице берёшь количество в плюс, а во второй минус. Потом группируешь (складываешь) по номенклатуре и характеристике - полям которые должны совпадать

Персик     Свежий 1
Груша      Гнилой 2
Персик     Свежий 1
Персик     Свежий -2
Груша      Гнилой -2

Итог

Персик Свежий 0
Груша Гнилой 0

Если по сумме обе таблички совпадают, то результат запроса будет пустым и проверка пройдена. Иначе результатом запроса будет разница первой табличной части от второй. Что важно - по суммарному количеству. Так как у тебя ERP да ещё и какой то самописный документ, возможно, надо делать отбор по отменённым строкам или по статусам там, хз что
30 Ёпрст
 
29.08.22
09:54
Ливинг стар, дарю:

Ctrl+C или Ctrl+Ins  - это Copy

Ctrl+v или Shift+Ins - это Paste

Пользуйся
31 NIGHTHUNTER
 
29.08.22
10:06
(14) Интересный вариант. Главное надежный. Тут дело в том что не имеет значение, где что не так.
Нужно пока было. только сравнение. Равны они или нет.
32 Ёпрст
 
29.08.22
10:08
(31) Это делает и (6)
33 NIGHTHUNTER
 
29.08.22
10:16
(32) У меня был пример, -
В первой тч количество 1, во второй 2. Ну он выбирает запись с 1.
Из 2 минусует 1 и все.
А должен ничего не выбрать вообще. так как таблицы не равны.

http://joxi.ru/BA0qa4Ni1kY6or

Может я что не так понимаю конечно.
34 Kassern
 
29.08.22
10:17
"Может я что не так понимаю конечно." - более чем вероятно
35 Ёпрст
 
29.08.22
10:24
(33)
ЕстьРазница = НЕ Запрос.Выполнить().Пустой()
36 NIGHTHUNTER
 
29.08.22
10:24
(35) Понятно, он наоборот что то выбирает, если таблицы разные получается?
37 Ёпрст
 
29.08.22
10:25
Для тех кто в танке, если запрос не пустой - то таблички "не равны". Если пустой- равны.

Хочешь чтоб было наеборот, поменяй условие на так
ИМЕЮЩИЕ
    СУММА(ТАБЛИЧКА.Количество) = 0
38 Ёпрст
 
29.08.22
10:26
Пилять, тупизна, она заразная.. как в (37) с =0 делать не ннадо