Имя: Пароль:
1C
1С v8
Учу 8ку. Запрос к двум регистрам
,
0 Тихий омут
 
03.06.14
08:45
Есть два регистра остатков - Остатки и Брак. Структура одинаковая - измерения Товар, Склад, ресурс Количество. Задача - выбрать остатки из этих регистров в виде Товар-ОстатокТовара-ОстатокБрака. Само собой, что товар может отсутствовать на остатках как в одном, так и в другом регистре, в этом случае в соответствующем поле должен быть 0.
Набросал вот такой запрос:
ВЫБРАТЬ
                 |    ОстаткиТоваровОстатки.Товар КАК Товар,
                 |    ОстаткиТоваровОстатки.КоличествоОстаток КАК Ост,
                 |    0 КАК ОстБрак
                 |ИЗ
                 |    РегистрНакопления.ОстаткиТоваров.Остатки(КОНЕЦПЕРИОДА(&ДатаОтчета, ДЕНЬ), Склад = &Склад) КАК ОстаткиТоваровОстатки
                 |
                 |ОБЪЕДИНИТЬ
                 |
                 |ВЫБРАТЬ
                 |    БракОстатки.Товар,
                 |    0,
                 |    БракОстатки.КоличествоОстаток
                 |ИЗ
                 |    РегистрНакопления.Брак.Остатки(КОНЕЦПЕРИОДА(&ДатаОтчета, ДЕНЬ), Склад = &Склад) КАК БракОстатки

но он, само собой, выдает по две строчки на товар - Товар-Остаток-0 и Товар-0-ОстатокБрака. Как сделать правильно? Временная таблица, группировка, итоги - ткните носом, что использовать... Курс Гилева по СКД не помог, разработка сложных отчетов Хрусталевой тоже:)
1 butterbean
 
03.06.14
08:46
например ИТОГИ СУММА(Ост),СУММА(ОстБрак) ПО Товар
2 senior
 
03.06.14
08:47
даже как-то неудобно соединение предлагать
3 NcSteel
 
03.06.14
08:49
(0) Впихнуть во вложенный запрос и сгруппировать.

(2) Далеко не факт что соединение будет оптимальней
4 Тихий омут
 
03.06.14
08:50
(2) Которое именно? Насколько хватает моего межушного ганглия, левое обрежет товары, отсутствующие в первом, но имеющиеся во втором регистре, разве не так?
5 butterbean
 
03.06.14
08:51
(4) еще есть ПОЛНОЕ и ВНУТРЕННЕЕ, продолжай развивать ганглий
6 senior
 
03.06.14
08:52
(4) кто-то заставляет силой использовать ЛЕВОЕ?
7 IVT_2009
 
03.06.14
08:53
Справочник Товар - регистр 1
                 - регистр 2
используем левое соединение от товара к регистру. Правда покажет и тот товар по которому нет ничего , но можно в условии поставить - не отбирать пустые позиции
8 senior
 
03.06.14
08:55
(7) забудьте здесь про ЛЕВОЕ
9 IVT_2009
 
03.06.14
08:55
Вариант 2 - из области извращений. ! таблица запрос на объединение из двух регистров - получим то что вообще присутствует. От этой таблицы запрос с левым соединением к обоим регистрам. Покажет только то что присутствует.
10 IVT_2009
 
03.06.14
08:55
(8) в чем я ошибаюсь в таком случае ?
11 СвинТуз
 
03.06.14
08:59
не факт что 1с не делает именно так внутри себя )
12 Тихий омут
 
03.06.14
09:01
(5) ага, а ещё есть правое, только не в 8ке:) Внутреннее оставляет только те товары, которые есть в обоих регистрах. Полное - показывает вроде то, что нужно.
Ушёл думать.
13 jsmith82
 
03.06.14
09:05
выбрать
естьnull(остаткитоваров.товар, остаткибрака.товар) как товар,
естьnull(остаткитоваров.количествоостаток, 0) как остатоктовара,
естьnull(остаткибрака.количествоостаток, 0) как остатокбрака
из рн.остаткитоваров как остаткитоваров
внутреннеесоединение
рн.остаткибрака как остаткибрака
по остаткитоваров.товар = остаткибрака = брак
14 jsmith82
 
03.06.14
09:06
по остаткитоваров.товар = остаткибрака.товар
15 jsmith82
 
03.06.14
09:06
хотя нет. тут полное. сорри
16 IVT_2009
 
03.06.14
09:07
(12) пойду почитаю теорию , освежу познания.
17 senior
 
03.06.14
09:11
(12) открою секрет правое и в восьмерке есть
18 jsmith82
 
03.06.14
09:19
конструктор запроса переделывает правое в левое
19 jsmith82
 
03.06.14
09:20
ибо на низком уровне всегда левое идёт при сравнении
20 Jokero
 
03.06.14
09:27
(17) правого нет, правое - это левое только таблицы меняются местами))
(0)стандартным соединением)) полным
Но если хочется, то можно еще попробовать в цикле сравнивать позиции регистров через точку, вообще без запроса, нелогичных объединений и страшных соединений многоликих)))
ну а чо, главное результат)

з.Ы Итак варианты
1.Объединение с Итогами
2.Полное Соединение
3.Цикл с обращением через точку
(Вроде ниче не забыл), кто еще какой поизвращеннее способ предложит?
21 Тихий омут
 
03.06.14
09:32
покурил SQL FULL JOIN. Всё стало понятно. Всем огромное спасибо.
(20) прямой запрос к таблицам регистров. Когда-нить 8ка мну достанет, так и сделаю)))
22 СвинТуз
 
03.06.14
10:00
(21)
а чего тянуть то?
"внешние источники данных" . И вперед.
Флаг в руки.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.