Имя: Пароль:
1C
1C 7.7
v7: Запрос 1с 7.7 (соединение 2 справочников
,
0 Oneal13
 
26.02.19
10:21
Добрый день.
Сам начинал с 8-ки поэтому туплю жутко.
Есть справочник книги и справочник инвентарные номера, где владелец = книга.
Подскажите пожалуйста как по синтаксису в запросе соединить 2 эти таблицы по полю Спрвочник.Книги.ТекущийЭлемент = Справочник.ИнвентарныеНомера.Владелец
ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы все;
    |Без итогов;
    |Заголовок = Справочник.Книги.ТекущийЭлемент;
    |ИнвентарныйНомер = Справочник.ИнвентарныеНомера.ТекущийЭлемент;
    |Владелец = Справочник.ИнвентарныеНомера.Владелец;
    |Группировка ТекущийЭлемент упорядочить по ТекущийЭлемент.Наименование без групп;
    |"//}}ЗАПРОС
1 Builder
 
26.02.19
10:22
Заголовок = Справочник.Книги.ТекущийЭлемент,Справочник.ИнвентарныеНомера.Владелец;
2 Builder
 
26.02.19
10:26
Только тут вопрос что тебе надо получить то?
А то и соединения не нужно, так достаточно?
"//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ИнвентарныйНомер = Справочник.ИнвентарныеНомера.ТекущийЭлемент;
    |Владелец = Справочник.ИнвентарныеНомера.Владелец;
    |Группировка Владелец  без групп;
    |"//}}ЗАПРОС
3 Oneal13
 
26.02.19
10:30
(2) Мне нужны книги с инвентарными номерами и еще некоторыми реквизитами из справочника книги
4 Oneal13
 
26.02.19
10:32
"//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы все;
    |Без итогов;
    |Дисциплина = Справочник.Книги.Родитель;
    |Заголовок = Справочник.Книги.ТекущийЭлемент,Справочник.ИнвентарныеНомера.Владелец;
    |Автор = Справочник.Книги.Автор;
    |ДатаИздания = Справочник.Книги.ДатаИздания;
    |Количество = Справочник.Книги.Количество;
    |ИнвентарныйНомер = Справочник.ИнвентарныеНомера.ТекущийЭлемент;
    |Группировка ТекущийЭлемент упорядочить по ТекущийЭлемент.Наименование без групп;
    |"//}}ЗАПРОС

Так будет правильно?
5 Builder
 
26.02.19
10:32
(3) Ну и выбирай из справочника "ИнвентарныеНомера", группируй по Владелец, ничего соединять не надо.
6 Oneal13
 
26.02.19
10:34
(5) Т.е. брать ДатаИздания как Справочник.ИнвентарныеНомера.Владелец.ДатаИздания?
7 Builder
 
26.02.19
10:35
"//{{ЗАПРОС(Сформировать)

    |Заголовок = Справочник.ИнвентарныеНомера.Владелец;
    |ИнвентарныйНомер = Справочник.ИнвентарныеНомера.ТекущийЭлемент;
    |Группировка ТекущийЭлемент;
    |"//}}ЗАПРОС

Дальше обходишь группировку.
Книга = Запрос.Заголовок;
Автор = Книга.Автор;
и т.д.
Группы в группировке - Дисциплина
8 Builder
 
26.02.19
10:37
|Группировка Заголовок;
9 Builder
 
26.02.19
10:38
Вот это все можно выкинуть, ты не документы выбираешь.
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ОбрабатыватьДокументы все;
    |Без итогов;
10 Провинциальный 1сник
 
26.02.19
10:39
(0) Если начинал с восьмерки - сразу бери прямые запросы и 1с++. Иначе тяжко будет мозги уродовать черными запросами.
11 Oneal13
 
26.02.19
10:52
(10) Ваще все небекрень)
12 Oneal13
 
26.02.19
10:52
(7) Почему то инвентарные выводит, а владельца нет
13 Builder
 
26.02.19
10:53
(12) Запрос скинь что получилось.
14 Oneal13
 
26.02.19
11:00
(13) Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Дисциплина = Справочник.Книги.Родитель;
    |Заголовок = Справочник.Книги.ТекущийЭлемент,Справочник.ИнвентарныеНомера.Владелец;
    |Автор = Справочник.Книги.Автор;
    |ДатаИздания = Справочник.Книги.ДатаИздания;
    |Количество = Справочник.Книги.Количество;
    |ИнвентарныйНомер = Справочник.ИнвентарныеНомера.ТекущийЭлемент;
    |Группировка Заголовок;
    |"//}}ЗАПРОС
    ;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка() = 1 Цикл
        // Заполнение полей Сформировать
        Таб.ВывестиСекцию("Сформировать");
    КонецЦикла;
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
15 Oneal13
 
26.02.19
11:00
(13) Не очень понял где обход делать
16 Builder
 
26.02.19
11:03
Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)

    |Заголовок = Справочник.ИнвентарныеНомера.Владелец;
    |ИнвентарныйНомер = Справочник.ИнвентарныеНомера.ТекущийЭлемент;
    |Группировка Заголовок;
    |"//}}ЗАПРОС

    ;
    // Если ошибка в запросе, то выход из процедуры

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"

    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка() = 1 Цикл
        // Заполнение полей Сформировать
        Книга = Запрос.Заголовок;
        Автор = Книга.Автор;
и т.д....
        Таб.ВывестиСекцию("Сформировать");
    КонецЦикла;
    // Вывод заполненной формы

    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
17 Builder
 
26.02.19
11:05
Пока Запрос.Группировка() = 1 Цикл
        // Заполнение полей Сформировать

        Книга = Запрос.Заголовок;
Если Книга.ЭтоГруппа()=1 Тогда
// Это дисциплина
Иначе
Автор = Книга.Автор;
КонецЕсли;
        
и т.д....
        Таб.ВывестиСекцию("Сформировать");
    КонецЦикла;
18 Oneal13
 
26.02.19
11:17
Не показывает Владельца. Хотя справочник Инв ном подчинен спраочнику книга
Книга
19 Builder
 
26.02.19
11:25
(18) Где не показывает? Так показывает?

Книга = Запрос.Заголовок;
Сообщить("Книга "+Книга);
20 Builder
 
26.02.19
11:30
А инвентарные номера нужны?  Тогда еще одну группировку надо.
    |Заголовок = Справочник.ИнвентарныеНомера.Владелец;
    |ИнвентарныйНомер = Справочник.ИнвентарныеНомера.ТекущийЭлемент;
    |Группировка ТекущийЭлемент;
    |Группировка ИнвентарныйНомер;
21 Builder
 
26.02.19
11:30
|Заголовок = Справочник.ИнвентарныеНомера.Владелец;
    |ИнвентарныйНомер = Справочник.ИнвентарныеНомера.ТекущийЭлемент;
    |Группировка Заголовок;
    |Группировка ИнвентарныйНомер;
22 Oneal13
 
26.02.19
11:36
(19) Так в служебных показывает
Но в таблиице отчета нет колонки заголовок
23 Oneal13
 
26.02.19
11:37
24 Oneal13
 
26.02.19
11:38
25 Mikeware
 
26.02.19
11:38
(22) ну так выводи ее в отчет..
26 Oneal13
 
26.02.19
12:11
(25) https://radikal.ru/lfp/b.radikal.ru/b09/1902/4c/8aee07066580.png/htm  Что сюда написать не догоню
27 Builder
 
26.02.19
12:24
Книга
Тип - "Выражение"
28 Kigo_Kigo
 
26.02.19
12:25
(26) Запрос.ЗначениеУпорядочивания(2)
29 Oneal13
 
26.02.19
12:55
(28) Так двоит данные
30 Builder
 
26.02.19
13:02
(29) Таблица видит переменные формы.
Пиши туда прям так - Книга
или например Книга.Автор
31 Kigo_Kigo
 
26.02.19
13:06
(29) Правильно двоит, потому что надо запилить 2 цикла и выводить разные строчки
Пока Запрос.ЗначениеУпорядочивания(1) Цикл
Таб.ВывестиСтроку("Строка_1");
Пока Запрос.ЗначениеУпорядочивания(2) Цикл
Таб.ВывестиСтроку("Строка_2");
КонецЦикла;
КонецЦикла;
32 Kigo_Kigo
 
26.02.19
13:11
Да и вообще запрос конечно круто, но вся задача решается 8 строками кода и перебором 2-х справочников
33 Oneal13
 
26.02.19
14:33
(32) Возьмешься?
34 Kigo_Kigo
 
26.02.19
14:46
Книга = СоздатьОбъект("Справочник.Книги");
ИнвНомер = СроздатьОбъект("Справочник.ИнвентарныеНомера");
Таб = СоздатьОбъект("Таблица");
Таб.ИспользоватьТаблицу("Таблица");

Книга.ВыбратьЭлементы();
Пока Книга.ПолучитьЭлемент() = 1 Цикл
    Таб.ВывестиСтроку("Строка_1");//тут выводим книгу
    ИнвНомер.ИспользоватьВладельца(Книга.ТекущийЭлемент());
    Пока ИнвНомера.ПолучитьЭлемент() = 1 Цикл
        Таб.ВывестиСтроку("Строка_1");//тут выводим инвномера
    КонецЦикла;
КонецЦикла;
Таб.Показать();
35 Oneal13
 
26.02.19
15:32
Спасибо большое всем, все получилось!!!