Имя: Пароль:
1C
1С v8
И снова запрос - из двух таблиц одну
0 Масянька
 
05.06.23
12:31
День добрый!
Есть 2 таблицы.
1 таблица (нормы выдачи): должность, номенклатура, количество, срок
2 таблица (регистр материалов): сотрудник, должность, номенклатура, дата выдачи, остаток.
В 1 таблице меньше значений (должности не повторяются).
Нужно получить новую таблицу: сотрудник, должность, номенклатура, количество, срок, остаток, дата выдачи.
Из 2 таблицы не должны попадать строки с номенклатурой, которой нет в 1 таблице, а из 1 таблицы должны попасть строки с номенклатурой, которой нет во 2 таблице.

Пример:

1 таблица                                    
Водитель	Жилет	1   12
Водитель	Ботинки  1   36
Кладовщик   Жилет	1   12
Кладовщик   Плащ	 1   36
Кладовщик   Перчатки 1   12


2 таблица
Иванов	  Водитель	Жилет	1   01.01.23
Петрова	 Кладовщик   Жилет	1   01.01.23
Петрова	 Кладовщик   Перчатки 1   01.01.23


Должно получиться
Иванов	  Водитель	Жилет	1   12   1	01.01.23
Иванов	  Водитель	Ботинки  1   36
Петрова	 Кладовщик   Жилет	1   12   1	01.01.23
Петрова	 Кладовщик   Плащ	 1   36
Петрова	 Кладовщик   Перчатки 1   12   1	01.01.23


Сейчас (тек. версия, сил нет) запрос такой

ВЫБРАТЬ
	ВТСпецодеждаВНаличии.ФизЛицо КАК ФизЛицо,
	ВТНормыВыдачи.ДополнениеДолжности,
	ВТНормыВыдачи.Номенклатура КАК Номенклатура,
	ВТСпецодеждаВНаличии.КоличествоОстаток,
	ВТСпецодеждаВНаличии.ДокументПередачиДата,
	ВТНормыВыдачи.Количество,
	ВТНормыВыдачи.СрокИспользования
ИЗ
	ВТНормыВыдачи КАК ВТНормыВыдачи
		левое СОЕДИНЕНИЕ ВТСпецодеждаВНаличии КАК ВТСпецодеждаВНаличии
		ПО (ВТСпецодеждаВНаличии.ФизЛицоДополнениеДолжности = ВТНормыВыдачи.ДополнениеДолжности)
			И (ВТСпецодеждаВНаличии.ВидСпецодежды = ВТНормыВыдачи.Номенклатура)

УПОРЯДОЧИТЬ ПО
	//ВТСпецодеждаВНаличии.ФизЛицоДополнениеДолжности.Наименование,
	ВТСпецодеждаВНаличии.ФизЛицо.Наименование,
	ВТСпецодеждаВНаличии.ВидСпецодежды.Наименование


Спасибо.
1 Ногаминебить
 
02.06.23
14:40
ЕстьНулл напрашивается.
2 Масянька
 
02.06.23
14:42
+(1) Забыла добавить: а вот лишние строки из таблицы 2 не должны попадать (нет номенклатуры в таблице 1).
3 Галахад
 
гуру
02.06.23
14:43
А чем (0) не устраивает?
4 Ногаминебить
 
02.06.23
14:45
Соединяем вторую таблицу с первой дабы выцепить всю положенную одежку каждой фамилии с должностью. Потом результат снова со второй. Если конечно я верно понял что там такое есть и надо.
5 Масянька
 
02.06.23
14:47
(4) Вот пробую...
6 Масянька
 
02.06.23
14:55
Индейская изба...
ВЫБРАТЬ
    ВТСпецодеждаВНаличии.ФизЛицо,
    ВТСпецодеждаВНаличии.ФизЛицоДополнениеДолжности,
    ВТСпецодеждаВНаличии.ВидСпецодежды,
    ВТСпецодеждаВНаличии.КоличествоОстаток,
    ВТСпецодеждаВНаличии.ДокументПередачиДата,
    ВТНормыВыдачи.Количество,
    ВТНормыВыдачи.СрокИспользования
ИЗ
    ВТСпецодеждаВНаличии КАК ВТСпецодеждаВНаличии
        ЛЕВОЕ СОЕДИНЕНИЕ ВТНормыВыдачи КАК ВТНормыВыдачи
        ПО ВТСпецодеждаВНаличии.ФизЛицоДополнениеДолжности = ВТНормыВыдачи.ДополнениеДолжности
            И ВТСпецодеждаВНаличии.Номенклатура = ВТНормыВыдачи.Номенклатура

УПОРЯДОЧИТЬ ПО
    ВТСпецодеждаВНаличии.ФизЛицо.Наименование,
    ВТСпецодеждаВНаличии.ВидСпецодежды.Наименование
Попадают лишние (из остатков) и нет кол-ва и срока из норм.
7 Ногаминебить
 
02.06.23
14:59
Ну и где тут 2 итерации?
Тащим из второй Фамилию должность, из первой одежду количество срок соединяя по полю должность, это все во временную.
Потом результат снова со второй по полю фамилия должность и добиваем остатком и сроком.
8 Масянька
 
02.06.23
14:59
+ (6) Не, по-моему, со строками все норм (то что надо), но значения 1 таблицы не выводятся...
9 Масянька
 
02.06.23
14:59
(7) Я первую делаю.
10 Ногаминебить
 
02.06.23
15:00
(7)+ сроком и остатком добиваем где оный есть, а в остальных случаях естьнулл.
11 Ногаминебить
 
02.06.23
15:01
В 6 По Номенклатура лишнее
12 Масянька
 
05.06.23
10:07
(11) Спасибо!
13 Guk
 
05.06.23
10:12
рукалицо...
14 novichok79
 
05.06.23
12:23
мда............. рукалицо.
как же вы в типовых копаетесь? там же такие запросищи.
давно на 1С не писал, но попробую.
сначала получить данные которые надо вычесть, положить во временную таблицу, потом левым соединением ее к той таблице, где записей не должно быть и в где убрать эти строки по is null.
15 novichok79
 
05.06.23
12:34
в остальном - обычно статичные данные (номенклатура, люди, и т д) присоединяются к данным, которые не статичны (остатки).
остатки при этом выводят в таблицу обычно через isnull.
ну и надо не забывать про дублируемость данных, перед соединением таблиц лучше их поагрегировать, чтобы не было ситуации когда в левой таблице 1 строка матчится на 2 в другой.