8.х Запрос к справочнику Значения Свойств Объектов

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем LABUH, 9 май 2010.

  1. TopicStarter Overlay
    LABUH
    Offline

    LABUH

    Регистрация:
    5 май 2010
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Прошу помочь сформировать запрос к полю Наименование. Своих мозгов не хватает, а найти пример не могу.
  2. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    684
    Симпатии:
    7
    Баллы:
    29
    "ВЫБРАТЬ
    | ЗСО.Наименование
    |ИЗ
    | Справочник.ЗначенияСвойствОбъектов КАК ЗСО"
  3. TopicStarter Overlay
    LABUH
    Offline

    LABUH

    Регистрация:
    5 май 2010
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Короче запрос выглядит так:

    Макет = ВнешнийОтчетОбъект.ПолучитьМакет("МаршрутныйЛист");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КонтактнаяИнформация.Объект,
    | КонтактнаяИнформация.Представление
    |ИЗ
    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    | КонтактнаяИнформация.Объект.Ссылка В(&СписокКонтрагентов)
    | И КонтактнаяИнформация.Тип = &ТипИнформации
    | И КонтактнаяИнформация.Вид = &ВидАдреса";

    Запрос.УстановитьПараметр("ВидАдреса", ВидАдреса);
    Запрос.УстановитьПараметр("СписокКонтрагентов", СписокКонтрагентов);
    Запрос.УстановитьПараметр("ТипИнформации", ТипИнформации);
    Запрос.УстановитьПараметр("Водитель", Водитель);
    Запрос.УстановитьПараметр("МаркаАвтомобиля", МаркаАвтомобиля);
    Запрос.УстановитьПараметр("ГосНомерАвтомобиля", ГосНомерАвтомобиля);
    Запрос.УстановитьПараметр("Личный", Личный);

    Результат = Запрос.Выполнить();

    ТабДокумент = Новый ТабличныйДокумент;

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьЭкспедитор = Макет.ПолучитьОбласть("Экспедитор");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");

    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);

    ВыборкаЭкспедитор = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    ВыборкаЭкспедитор.Следующий(); // Экспедитор
    ОбластьЭкспедитор.Параметры.Заполнить(ВыборкаЭкспедитор);
    ТабДок.Вывести(ОбластьЭкспедитор, ВыборкаЭкспедитор.Уровень());
    //ТабДок.Вывести(ОбластьЭкспедитор);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();

    ВыборкаДетали = Результат.Выбрать();

    Пока ВыборкаДетали.Следующий() Цикл
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;

    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);


    Что не правильно?
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Используйте тег code, неудобно читать.

    Код:
    Запрос.УстановитьПараметр("ВидАдреса", ВидАдреса);
    Запрос.УстановитьПараметр("СписокКонтрагентов", СписокКонтрагентов);
    Запрос.УстановитьПараметр("ТипИнформации", ТипИнформации); 
    Запрос.УстановитьПараметр("Водитель", Водитель);
    Запрос.УстановитьПараметр("МаркаАвтомобиля", МаркаАвтомобиля);
    Запрос.УстановитьПараметр("ГосНомерАвтомобиля", ГосНомерАвтомобиля);
    Запрос.УстановитьПараметр("Личный", Личный);
    
    Это что? Где эти параметры в запросе? И чему равны у вас скажем ВидАдреса и ТипИнформации?

    Код:
    ВыборкаЭкспедитор = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    А где в запросе какая-нибудь группировка?
  5. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    684
    Симпатии:
    7
    Баллы:
    29
    А что написать на какую строчку ругаться отладчик не судьба?
  6. TopicStarter Overlay
    LABUH
    Offline

    LABUH

    Регистрация:
    5 май 2010
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    В первом посте я попросил помочь сделать запрос к справочнику ЗначенияСвойствОбъектов, потому что я не знаю как это сделать. Именно поэтому в запросе нет Водитель, МаркаАвтомобиля, ГосНомерАвтомобиля, Личный.

    А чему должны быть равны ВидАдреса и ТипИнформации?

    В прикрепленном файле то, что хотелось бы получить. Помогите пожалуйста.

    Вложения:

  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Откройте регистр сведений "КонтактнаяИнформация", посмотрите его измерения. Там вы увидите тип этих значений (на форме в полях тип у вас правильно задан, но смысл задавать его на форме? задавайте прямо в запросе значение, оно то у вас постояно вы каждый раз не выбираете же его).

    Запрос по свойствам объектов будет выглядеть приблизительно так:
    Код:
    "ВЫБРАТЬ
    ФизическиеЛица.Ссылка КАК Ссылка,
    ЗначенияСвойствОбъектов.Свойство,
    ЗначенияСвойствОбъектов.Значение
    ИЗ
    Справочник.ФизическиеЛица КАК ФизическиеЛица
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ПО ФизическиеЛица.Ссылка = ЗначенияСвойствОбъектов.Объект
    ГДЕ
    ФизическиеЛица.Ссылка = &Ссылка
    ИТОГИ ПО
    Ссылка"
    
    
    На форме все эти элементы не нужны (я так понимаю, что МаркаАвтомобиля, ГосномерАвтомобиля и т.д. - все это у вас свойства справочника "Физические лица").


    Используйте конструктор запросов, чтобы посмотреть что вам выдает запрос.
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Делайте 2-мя запросами.
    1-й скажем назовите его допустим "экспедитор", в нем запрос к свойствам объекта, выбирайте ваши госномера и т.п. и выводите вашу область "Экспедитор".
    2-й запрос, допустим "детали": к контактной информации, в нем выбирайте контрагентов, их адреса и выводите в цикле (область "детали").
  9. TopicStarter Overlay
    LABUH
    Offline

    LABUH

    Регистрация:
    5 май 2010
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Вставил Ваш запрос - на макете ничего не выводится :unsure:
    Не могли бы Вы показать наглядно, например как в коде задать имя запроса Экспедитор?
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    Процедура Отчет(ТабДок, ВидАдреса, СписокКонтрагентов, ТипИнформации, Водитель, МаркаАвтомобиля, ГосНомерАвтомобиля, Личный) Экспорт
    //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(Отчет)
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Макет = ВнешнийОтчетОбъект.ПолучитьМакет("МаршрутныйЛист");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |	ЗначенияСвойствОбъектов.Свойство,
    |	ЗначенияСвойствОбъектов.Значение
    |ИЗ
    |	Справочник.ФизическиеЛица КАК ФизическиеЛица
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |		ПО ФизическиеЛица.Ссылка = ЗначенияСвойствОбъектов.Объект
    |ГДЕ
    |	ФизическиеЛица.Ссылка = &Водитель";
    
    Запрос.УстановитьПараметр("Водитель", Водитель);
    
    Результат = Запрос.Выполнить();
    
    ТабДокумент = Новый ТабличныйДокумент;
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьЭкспедитор = Макет.ПолучитьОбласть("Экспедитор");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    ТабДок.Очистить();                         
    ТабДок.Вывести(ОбластьЗаголовок);
    
    ОбластьЭкспедитор.Параметры.Водитель = Водитель;
    ВыборкаЭкспедитор = Результат.Выбрать();
    Пока ВыборкаЭкспедитор.Следующий() Цикл
    ОбластьЭкспедитор.Параметры[ВыборкаЭкспедитор.Свойство] = ВыборкаЭкспедитор.Значение;		
    КонецЦикла;
    ТабДок.Вывести(ОбластьЭкспедитор);
    
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ...
    
    
    
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    На самом деле - этот участок кода не совсем хороший, в определенных случаях он будет генерировать исключение.
    Воспользуйтесь поиском по форуму, здесь уже приводили (может быть даже не один раз), процедуру для получения свойства объекта (без запроса я имею ввиду). У вас в шапке всего 3 свойства, так что думаю для вас самое то будет, делать не через запрос.
  12. TopicStarter Overlay
    LABUH
    Offline

    LABUH

    Регистрация:
    5 май 2010
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Да действительно не совсем хороший. Еще есть мысли?
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    По какой причине, уточняйте. Вы поймите - даром телепатии никто здесь не обладает. Я то знаю почему так написал, и в зависимости от этого мыслей может быть множество.
  14. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    а почему в запросе 2 таблицы, а данные берем из 1ой? может лучше взять одну и наложить на нее условие?
  15. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Согласен. Так будет лучше.
  16. TopicStarter Overlay
    LABUH
    Offline

    LABUH

    Регистрация:
    5 май 2010
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    Пардон, я не правильно выразился. Ваш запрос работает когда это касается области Экспедитор. Но если к Вашему запросу добавить запрос о контактной информации:
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	КонтактнаяИнформация.Объект,
    |	КонтактнаяИнформация.Представление
    |ИЗ
    |	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |	КонтактнаяИнформация.Объект.Ссылка В(&СписокКонтрагентов)
    |	И КонтактнаяИнформация.Тип = &ТипИнформации
    |	И КонтактнаяИнформация.Вид = &ВидАдреса";
    
    Запрос.УстановитьПараметр("ВидАдреса", ВидАдреса);
    Запрос.УстановитьПараметр("СписокКонтрагентов", СписокКонтрагентов);
    Запрос.УстановитьПараметр("ТипИнформации", ТипИнформации);
    
    Результат = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетали = Результат.Выбрать();
    
    Пока ВыборкаДетали.Следующий() Цикл
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    
    то в этом случае не работает. Или, что скорее всего вероятнее, я что-то не так делаю.
    Не могли бы Вы написать полный код и с Водителем и с Контактной информацией.


    Можете показать как это сделать?
  17. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Код:
    "ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Свойство,
    ЗначенияСвойствОбъектов.Значение
    ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ГДЕ
    ЗначенияСвойствОбъектов.Объект = &Водитель"
    
    Сам запрос выглядит нормально (несмотря на то что вы не задаете значения програмно, а продолжаете выбирать их на форме). Чему у вас равно ВидАдреса, СписокКонтрагентов, ТипИнформации?
  18. TopicStarter Overlay
    LABUH
    Offline

    LABUH

    Регистрация:
    5 май 2010
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    На форме я выбираю только Водителя. Согласно Вашего запроса остальные строки макета заполняются автоматом кроме контактной информации контрагентов.
    Где мне посмотреть "Чему у вас равно ВидАдреса, СписокКонтрагентов, ТипИнформации" ?
  19. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну так контактную информацию я и не трогал. На форме в соответствующих полях что выбираете?


    Эххх... Вот вам запрос..
    Код:
    "ВЫБРАТЬ
    КонтактнаяИнформация.Объект,
    КонтактнаяИнформация.Представление
    ИЗ
    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    ГДЕ
    КонтактнаяИнформация.Объект В(&СписокКонтрагентов)
    И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
    И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента)"
    
    
    Из параметров оставьте только
    Код:
    Запрос.УстановитьПараметр("СписокКонтрагентов", СписокКонтрагентов);
    
    
  20. TopicStarter Overlay
    LABUH
    Offline

    LABUH

    Регистрация:
    5 май 2010
    Сообщения:
    35
    Симпатии:
    0
    Баллы:
    1
    После долгих танцев с бубном и с Вашей помощью получилось:

    Код:
    Макет = ВнешнийОтчетОбъект.ПолучитьМакет("МаршрутныйЛист");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |	ЗначенияСвойствОбъектов.Свойство,
    |	ЗначенияСвойствОбъектов.Значение
    |ИЗ
    |	Справочник.ФизическиеЛица КАК ФизическиеЛица
    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |		ПО ФизическиеЛица.Ссылка = ЗначенияСвойствОбъектов.Объект
    |ГДЕ
    |	ФизическиеЛица.Ссылка = &Водитель";
    
    Запрос.УстановитьПараметр("Водитель", Водитель);
    
    Результат = Запрос.Выполнить();
    
    ТабДокумент = Новый ТабличныйДокумент;
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьЭкспедитор = Макет.ПолучитьОбласть("Экспедитор");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    ТабДок.Очистить();                         
    ТабДок.Вывести(ОбластьЗаголовок);
    
    ОбластьЭкспедитор.Параметры.Водитель = Водитель;
    ВыборкаЭкспедитор = Результат.Выбрать();
    Пока ВыборкаЭкспедитор.Следующий() Цикл
    ОбластьЭкспедитор.Параметры[ВыборкаЭкспедитор.Свойство] = ВыборкаЭкспедитор.Значение;		
    КонецЦикла;
    
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	КонтактнаяИнформация.Объект,
    |	КонтактнаяИнформация.Представление
    |ИЗ
    |	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    |ГДЕ
    |	КонтактнаяИнформация.Объект.Ссылка В(&СписокКонтрагентов)
    |	И КонтактнаяИнформация.Тип = &ТипИнформации
    |	И КонтактнаяИнформация.Вид = &ВидАдреса";
    
    Запрос.УстановитьПараметр("ВидАдреса", ВидАдреса);
    Запрос.УстановитьПараметр("СписокКонтрагентов", СписокКонтрагентов);
    Запрос.УстановитьПараметр("ТипИнформации", ТипИнформации);
    
    Результат = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьЭкспедитор);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетали = Результат.Выбрать();
    
    Пока ВыборкаДетали.Следующий() Цикл
    ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    
    :unsure:

Поделиться этой страницей