8.х Как переприсвоить псевдонимы в запросе?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем alex-79, 5 сен 2007.

  1. TopicStarter Overlay
    alex-79
    Offline

    alex-79 Опытный в 1С

    Регистрация:
    21 сен 2006
    Сообщения:
    643
    Симпатии:
    1
    Баллы:
    29
    Можно ли в запросах 1С 8.0 переприсваивать псевдонимы источников данных. Проблемка такого рода. Нужно выбрать контрагентов, их телефоны и юридические адреса. В 1С Бухгалтерии 8.0 есть регистр сведений "КонтактнаяИнформация", в котором храняться телефоны и юр. адреса контрагентов. У него есть реквизит "Представление" в котором находится нужная информация. И в соответствии с измерениями регистра "Вид" и "Тип" идёт отбор значений. Я хочу на выходе получить таблицу с полями "Контрагент", "Телефон", "Адрес".

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

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

    | ((КонтактнаяИнформация.Тип = &ТипАдрес) и (КонтактнаяИнформация.Вид = &Вид)) или (КонтактнаяИнформация.Тип = &ТипТелефон)

    | КонтактнаяИнформация.ЗначениеПоУмолчанию = Истина";

    Из текста запроса видно, что телефоны и юр. адреса будут в одной колонке "Инфо" таблицы результата запроса. А как сделать в разных, чтобы телефоны былм в одной колонке, а юр. адреса в другой? :unsure: B) :D
  2. AlexeyTiRe
    Offline

    AlexeyTiRe

    Регистрация:
    27 фев 2007
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Можно так:
    "...
    |ВЫБОР
    | КОГДА (КонтактнаяИнформация.Тип = &ТипАдрес) и (КонтактнаяИнформация.Вид = &Вид)
    | ТОГДА КонтактнаяИнформация.Представление
    | ИНАЧЕ NULL
    |КОНЕЦ КАК Адрес
    |ВЫБОР
    | КОГДА КонтактнаяИнформация.Тип = &ТипТелефон
    | ТОГДА КонтактнаяИнформация.Представление
    | ИНАЧЕ NULL
    |КОНЕЦ КАК Телефон
    |..."
    Но тогда будет для каждого контрагента две строки в результате запроса, в одной "Контрагент,Адрес,NULL", в другой "Контрагент,NULL,Телефон".

    А чтоб было нормально, нужно сделать два вложенных запроса, в одном получить только контрагента и адрес, в другом - контрагента и телефон, и потом полное соединение по контрагенту.
  3. TopicStarter Overlay
    alex-79
    Offline

    alex-79 Опытный в 1С

    Регистрация:
    21 сен 2006
    Сообщения:
    643
    Симпатии:
    1
    Баллы:
    29
    Спасибо. Сейчас попробую
  4. TopicStarter Overlay
    alex-79
    Offline

    alex-79 Опытный в 1С

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


    Подскажите как объединить всё в одну таблицу результата запроса?
  5. AlexeyTiRe
    Offline

    AlexeyTiRe

    Регистрация:
    27 фев 2007
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    1
    Это, собственно, все. Осталось только выбрать адрес и телефон из соответствующих таблиц. Получится следующее:

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

    alex-79 Опытный в 1С

    Регистрация:
    21 сен 2006
    Сообщения:
    643
    Симпатии:
    1
    Баллы:
    29
    Спасибо! Заработало!!! :unsure:

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