Запросы — контактная информация контрагентов (телефоны, юридические и фактические адреса)

Представляю вашему вниманию готовые запросы для отчетов. Также эти отчеты можно использовать просто в консоли запросов, для получения выборочной информации.
Запросы для получения телефонов, Юридического, фактического, почтового адресов контрагентов. Подходят для Управления Торговлей (10, 11), УПП, Бухгалтерия и других конфигураций 1С.

Преимущества использования консоли запросов в любой задаче Программиста 1С

  В 1с Предприятии запустим обработку «Консоль запросов». консоль позволяет конструировать и отлаживать запросы прямо в режиме 1с Предприятие, без Конфигуратора. Это очень полезно. Любые разработки я начинаю с тестирования данных с помощью запросов. Это позволяет решить сразу несколько задач:

  1. Получить выборки данных по интересующим меня критериям
  2. Отладить запрос, сделать его рабочим, выполняющим возложенную задачу
  3. Быть уверенным в работе запроса, что он получает нужные данные от Базы Данных.
  4. Быть уверенным, что в базе данных нужные данные содержатся. Бывает так, что запрос работает, а данных для него просто нет. Вот такие ситуации сразу отслеживаются.
  5. После отладки запроса его можно сразу применить в отчете, модуле, в конфигураторе.

Отладка запросов и получение данных в режиме 1с Предприятие

  Итак, в консоли запросов я создаю новую строку, запускаю конструктор запросов (в последнее время иногда пишу руками — так проще) и формирую текст запроса. После задания параметров запроса прямо в консоли запросов, его можно выполнить и получить таблицу-результат.

1. Запрос по юридическим и фактическим адресам Контрагентов  1. Запрос по юридическим и фактическим адресам Контрагентов.png В результатах запроса мы видим таблицу с колонками «Контрагент», «Тип», «Вид», «Адрес».
 1.1. Запрос по юридическим и фактическим адресам - Параметры запроса  1.1. Запрос по юридическим и фактическим адресам — Параметры запроса

Текст запроса (УБРАЛ параметры, как просили комментаторы статьи):  

ВЫБРАТЬ
КонтактнаяИнформация.Объект КАК Контрагент,
КонтактнаяИнформация.Тип КАК Тип,
КонтактнаяИнформация.Вид,
МАКСИМУМ(ПОДСТРОКА(КонтактнаяИнформация.Представление, 0, 500)) КАК Адрес
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО КонтактнаяИнформация.Объект = Контрагенты.Ссылка
ГДЕ
КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)

СГРУППИРОВАТЬ ПО
КонтактнаяИнформация.Объект,
КонтактнаяИнформация.Тип,
КонтактнаяИнформация.Вид

УПОРЯДОЧИТЬ ПО
Контрагент,
Тип
 2. Запрос по телефонам физических лиц 2. Запрос по телефонам физических лиц

 

 2.1. Запрос по телефонам физических лиц - параметры запроса  2.1. Запрос по телефонам физических лиц — параметры запроса

Текст запроса (УБРАЛ параметры, как просили комментаторы статьи):

ВЫБРАТЬ
КонтактнаяИнформация.Представление,
КонтактнаяИнформация.Объект
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.телефон)
И КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента)
И КонтактнаяИнформация.Объект ССЫЛКА Справочник.ФизическиеЛица
 3. Запрос Юр. и Факт. адрес контрагента + телефон 3. Запрос Юр. и Факт. адрес контрагента + телефон
 3. Параметры Запроса Юр. и Факт. адрес контрагента + телефон 3.1. Параметры Запроса Юр. и Факт. адрес контрагента + телефон

Текст запроса (УБРАЛ параметры, как просили комментаторы статьи):

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

УПОРЯДОЧИТЬ ПО
Контрагенты.Наименование
 4. Запрос Юр. Факт. Адрес Контрагента + телефон + Почт. Адрес 4. Запрос Юр. Факт. Адрес Контрагента + телефон + Почт. Адрес

Текст запроса (УБРАЛ параметры, как просили комментаторы статьи):

ВЫБРАТЬ
Контрагенты.Ссылка КАК Контрагент,
МАКСИМУМ(ПОДСТРОКА(ФактическийАдрес.Представление, 0, 200)) КАК ФактическийАдрес,
МАКСИМУМ(ПОДСТРОКА(ЮридическийАдрес.Представление, 0, 200)) КАК ЮридическийАдрес,
МАКСИМУМ(ПОДСТРОКА(Телефон.Представление, 0, 50)) КАК Телефон,
МАКСИМУМ(ПОДСТРОКА(АдресЭлектроннойПочты.Представление, 0, 200)) КАК АдресЭлектроннойПочты
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ФактическийАдрес
ПО (ФактическийАдрес.Объект = Контрагенты.Ссылка)
И (ФактическийАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
И (ФактическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента))
И (Контрагенты.Ссылка = &Контрагент)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ЮридическийАдрес
ПО (ЮридическийАдрес.Объект = Контрагенты.Ссылка)
И (ЮридическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента))
И (Контрагенты.Ссылка = &Контрагент)
И (ЮридическийАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК Телефон
ПО (Телефон.Объект = Контрагенты.Ссылка)
И (Телефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
И (Телефон.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента))
И (Контрагенты.Ссылка = &Контрагент)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресЭлектроннойПочты
ПО (АдресЭлектроннойПочты.Объект = Контрагенты.Ссылка)
И (АдресЭлектроннойПочты.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
И (АдресЭлектроннойПочты.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыКонтрагентаДляОбменаДокументами))
ГДЕ
Контрагенты.ПометкаУдаления = ЛОЖЬ
И Контрагенты.ЭтоГруппа = ЛОЖЬ
И Контрагенты.Ссылка = &Контрагент

СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка

УПОРЯДОЧИТЬ ПО
Контрагенты.Наименование
В запросе группировка по Контрагенту. Это сделано с целью выдавать одну строку вместо нескольких в результате запроса, на случай, если у Контрагента несколько адресов, телефонов и т.п.
В случае, если вам необходимо выбрать ВСЮ контактную информацию Контрагента, не используйте группировку.

 

Оформление запроса в виде отчета в консоли СКД

  После этого запрос можно красиво оформить в виде отчета в Конфигураторе и предоставить в пользование. Чаще всего, я пользуюсь СКД (Система кмпоновки данных), для оформления простых запросов в виде отчетов. Я зашел в конфигуратор, написал простейший отчет на СКД, с использованием запроса, описанного выше.

13 Comments

  1. Поручик

    Гламурнее вместо параметров Тип и Вид указывать непосредственно значение типа и вида КИ

    ЗНАЧЕНИЕ(Перечисление.ТипКонтактнойИнформации.ХХХХХ)

    Reply
  2. pvlunegov

    (1) Поручик,

    Все правильно. Вы правы. Поменьше параметров, побольше указаний ЗНАЧЕНИЕ(Типп).

    Старая статья моя. Перенес со своего сайта.

    Если мозолит вам глаза, изменю Запрос

    Reply
  3. Поручик

    (2) Мозолит, кто давно в теме. Начинающий пипл схавает всё.

    Reply
  4. pvlunegov

    (3) Поручик,

    Ок, исправлю.

    Спасибо за комментарий.

    Reply
  5. pvlunegov

    (3) Поручик,

    исправил. заменил ненужные параметры запроса на конструкции «ЗНАЧЕНИЕ»

    во всех запросах.

    Reply
  6. Dr.ZIG

    А зачем в левом соединении соединение по «Контрагенты.Ссылка = &Контрагент», если в основной таблице итак есть такое условие?

    Reply
  7. pvlunegov

    (6) Dr.ZIG,

    чтобы быстрее строился запрос.

    Условие в соединении выдаст таблицу меньшего размера, чем ежели строить таблицу по всем контрагентам, а потом отбирать в ней записи по нужному контрагенту.

    По идее условие в запросе на контрагента можно убрать.

    Я видимо забыл его убрать когда запрос отлаживал в консоли запросов.

    Пардон.

    Правильно — оставлять условия при соединении таблиц, а еще лучше в условиях виртуальных таблиц

    Reply
  8. natar82

    А разве это подойдет для БП 3.0? там ведь нет РС Контактная информация

    Reply
  9. natar82

    Не подскажите, каким образом можно в запросе вытащить, например, фактический адрес?

    Reply
  10. VipeRock

    Добрый день!

    Не подскажите почему ЛЕВОЕ СОЕДЕНЕНИЕ не отображает информацию из карточки контрагента.

    Впервые пишу запрос, извиняюсь за функции ВЫБОР, но так они хоть показывают значения.

    Параметр указанный по папке в которой контрагенты.

    ВЫБРАТЬ
    Контрагенты.Наименование,
    Контрагенты.Код,
    Контрагенты.КодПоЕДРПОУ КАК Телефон,
    КонтактнаяИнформация.Представление КАК Телефон_Факс_контрагента,
    КонтактнаяИнформация.Объект.ДатаРождения КАК Дата_рождения,
    ВЫБОР                  //EMAIL   Почта
    КОГДА КонтактнаяИнформация.Тип = &Почта
    ТОГДА ПОДСТРОКА(КонтактнаяИнформация.Представление, 0, 20)
    ИНАЧЕ NULL
    КОНЕЦ КАК Почта,
    ВЫБОР                  //EMAIL   Почта
    КОГДА КонтактнаяИнформация.Тип = &Почта
    ТОГДА ПОДСТРОКА(КонтактнаяИнформация.Представление, 0, 20)
    ИНАЧЕ NULL
    КОНЕЦ КАК E_Mail_Адрес_электронной_почты_контрагента_для_обмена_электр­онными_документами,
    ЮридическийАдрес.Представление КАК ЮридическийАдрес,
    ФактическийАдрес.Представление КАК ФактическийАдрес,
    Контрагенты.Родитель
    ИЗ
    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
    ПО КонтактнаяИнформация.Объект = Контрагенты.Ссылка
    //вариант 1  //
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ЮридическийАдрес
    ПО (ЮридическийАдрес.Объект = Контрагенты.Ссылка)
    И (ЮридическийАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
    И (ЮридическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента))
    И (Контрагенты.Ссылка = &Контрагент)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ФактическийАдрес     //неотображает значения
    ПО (ФактическийАдрес.Объект = Контрагенты.Ссылка)
    И (ФактическийАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
    И (ФактическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента))
    И (Контрагенты.Ссылка = &Контрагент)
    //попытка Факс
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ТелефонФакс
    ПО (ТелефонФакс.Объект = Контрагенты.Ссылка)
    И (ТелефонФакс.Вид = &ВидКонтИнфТелефонФакс)
    И (ТелефонФакс.Тип = &ТипКонтактнойИнформацииТелефонФакс)
    И (Контрагенты.Ссылка = &Контрагент)
    ГДЕ
    Контрагенты.Родитель = &Контрагент
    УПОРЯДОЧИТЬ ПО
    Контрагенты.Наименование

    Показать

    Reply
  11. pvlunegov

    (10) VipeRock,

    в вашем запросе куча СИНТАКСИЧЕСКИХ ошибок, не запускается запрос. Это раз.

    Вы видимо его вручную писали? Рекомендую пользоваться конструктором запросов. Рекомендую пользоваться обработкой «Консоль запросов», в ней интегрирован конструктор запросов. Обработка позволит ваш запрос собрать ПРАВИЛЬНО и сразу увидеть результат.

    Во-вторых. У вас зачем соединение регистра Контактная информация левым соединением со справочником Контрагенты? А затем идет соединение регистра с тем-же регистром с другими отборами. Получается, что если Контактная информация не найдена, а, например, найден фактический адрес по контрагенту, то будет 0 записей, потому что центральный элемент связей — контактная информация.

    Хрень получается.

    Посмотрите мой запрос выше в публикации. Там все четко. Центральный элемент конструкции соединений таблиц — справочник Контрагенты. К нему левым соединением цепляются все остальные таблицы. Это дает гарантию вывода всех Контрагентов, независимо от того, есть записи по регистру Контактная информация по ним или нет.

    Reply
  12. pvlunegov

    (10) VipeRock,

    Собственно ваш запрос не работоспособен, потому что перепутан центральный элемент всей конструкции связей таблиц. А это очень важно!

    Перед построением запроса вы должны ЧЕТКО осознавать, ЧТО должны получить в конце запроса.

    1). Таблицу Контрагентов с возможными контактными данными (у кого то есть телефон, у кого-то нет, у кого-то вообще ничего нет, у кого-то только адрес и т.п.)

    2). Таблицу телефонов Контрагентов и,если есть телефон, подцепить к ним е-мэйлы и почтовые адреса.

    В этом случае ваш метод построения запроса актуален, но грамматические ошибки надо исправлять.

    Зачем в связях вы пишите Контрагенты.Ссылка = &Контрагент ?

    У вас в связи левое соединение. Ладно бы полное было, тогда имеет смысл условие в связи накладывать.

    Вообще здесь, в запросе с левым соединением условия не в связи надо накладывать, а в условиях запроса

    Reply
  13. DrVitaly

    (12) В последнем варианте для УТ 10.3

    И (АдресЭлектроннойПочты.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
    И (АдресЭлектроннойПочты.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыКонтрагентаДляОбменаДокументами))

    Правильнее

     И (АдресЭлектроннойПочты.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты))
    И (АдресЭлектроннойПочты.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыКонтрагентаДляОбменаДокументами))
    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *