gifts2017

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

Опубликовал Петр Лунегов (pvlunegov) в раздел Программирование - Инструментарий

Представляю вашему вниманию готовые запросы для отчетов. Также эти отчеты можно использовать просто в консоли запросов, для получения выборочной информации.
Запросы для получения телефонов, Юридического, фактического, почтового адресов контрагентов. Подходят для Управления Торговлей (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)) КАК АдресЭлектроннойПочты
ИЗ
	Справочник.Контрагенты КАК Контрагенты
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ФактическийАдрес
		ПО (ФактическийАдрес.Объект = Контрагенты.Ссылка)
			И (ФактическийАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
			И (ФактическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента))
			И (Контрагенты.Ссылка = &Контрагент)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ЮридическийАдрес
		ПО (ЮридическийАдрес.Объект = Контрагенты.Ссылка)
			И (ЮридическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента))
			И (Контрагенты.Ссылка = &Контрагент)
			И (ЮридическийАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК Телефон
		ПО (Телефон.Объект = Контрагенты.Ссылка)
			И (Телефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
			И (Телефон.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента))
			И (Контрагенты.Ссылка = &Контрагент)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресЭлектроннойПочты
		ПО (АдресЭлектроннойПочты.Объект = Контрагенты.Ссылка)
			И (АдресЭлектроннойПочты.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
			И (АдресЭлектроннойПочты.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыКонтрагентаДляОбменаДокументами))
ГДЕ
	Контрагенты.ПометкаУдаления = ЛОЖЬ
	И Контрагенты.ЭтоГруппа = ЛОЖЬ
	И Контрагенты.Ссылка = &Контрагент

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

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

 

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

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

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Контактная информация Контрагентов
.erf 9,74Kb
05.06.15
19
.erf 9,74Kb 19 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Ожерельев (Поручик) 07.06.15 00:15
Гламурнее вместо параметров Тип и Вид указывать непосредственно значение типа и вида КИ
ЗНАЧЕНИЕ(Перечисление.ТипКонтактнойИнформации.ХХХХХ)
2. Петр Лунегов (pvlunegov) 08.06.15 07:03
(1) Поручик,
Все правильно. Вы правы. Поменьше параметров, побольше указаний ЗНАЧЕНИЕ(Типп).
Старая статья моя. Перенес со своего сайта.
Если мозолит вам глаза, изменю Запрос
3. Сергей Ожерельев (Поручик) 08.06.15 07:24
(2) Мозолит, кто давно в теме. Начинающий пипл схавает всё.
4. Петр Лунегов (pvlunegov) 08.06.15 07:34
(3) Поручик,
Ок, исправлю.
Спасибо за комментарий.
5. Петр Лунегов (pvlunegov) 08.06.15 11:42
(3) Поручик,
исправил. заменил ненужные параметры запроса на конструкции "ЗНАЧЕНИЕ"
во всех запросах.
6. Иван Иванчиков (Dr.ZIG) 16.06.15 05:51
А зачем в левом соединении соединение по "Контрагенты.Ссылка = &Контрагент", если в основной таблице итак есть такое условие?
7. Петр Лунегов (pvlunegov) 16.06.15 09:49
(6) Dr.ZIG,
чтобы быстрее строился запрос.
Условие в соединении выдаст таблицу меньшего размера, чем ежели строить таблицу по всем контрагентам, а потом отбирать в ней записи по нужному контрагенту.
По идее условие в запросе на контрагента можно убрать.
Я видимо забыл его убрать когда запрос отлаживал в консоли запросов.
Пардон.
Правильно - оставлять условия при соединении таблиц, а еще лучше в условиях виртуальных таблиц
8. Наталья Курышева (natar82) 24.06.15 12:41
А разве это подойдет для БП 3.0? там ведь нет РС Контактная информация
9. Наталья Курышева (natar82) 24.06.15 12:42
Не подскажите, каким образом можно в запросе вытащить, например, фактический адрес?
10. Анатолий Игнатченко (VipeRock) 30.05.16 09:48
Добрый день!
Не подскажите почему ЛЕВОЕ СОЕДЕНЕНИЕ не отображает информацию из карточки контрагента.
Впервые пишу запрос, извиняюсь за функции ВЫБОР, но так они хоть показывают значения.
Параметр указанный по папке в которой контрагенты.

ВЫБРАТЬ
	Контрагенты.Наименование,
	Контрагенты.Код,
	Контрагенты.КодПоЕДРПОУ КАК Телефон,
	КонтактнаяИнформация.Представление КАК Телефон_Факс_контрагента,
	КонтактнаяИнформация.Объект.ДатаРождения КАК Дата_рождения,  
	ВЫБОР     													//EMAIL   Почта
		КОГДА КонтактнаяИнформация.Тип = &Почта
			ТОГДА ПОДСТРОКА(КонтактнаяИнформация.Представление, 0, 20)
		ИНАЧЕ NULL
	КОНЕЦ КАК Почта,
	ВЫБОР     													//EMAIL   Почта
		КОГДА КонтактнаяИнформация.Тип = &Почта
			ТОГДА ПОДСТРОКА(КонтактнаяИнформация.Представление, 0, 20)
		ИНАЧЕ NULL
	КОНЕЦ КАК E_Mail_Адрес_электронной_почты_контрагента_для_обмена_электр­онными_документами,
	ЮридическийАдрес.Представление КАК ЮридическийАдрес,
	ФактическийАдрес.Представление КАК ФактическийАдрес,
	Контрагенты.Родитель
ИЗ
	РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		ПО КонтактнаяИнформация.Объект = Контрагенты.Ссылка
//вариант 1		//
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ЮридическийАдрес
        ПО (ЮридическийАдрес.Объект = Контрагенты.Ссылка)
            И (ЮридическийАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
            И (ЮридическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента))
            И (Контрагенты.Ссылка = &Контрагент)
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ФактическийАдрес     //неотображает значения
        ПО (ФактическийАдрес.Объект = Контрагенты.Ссылка)
            И (ФактическийАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
            И (ФактическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента))
            И (Контрагенты.Ссылка = &Контрагент)
//попытка Факс			
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ТелефонФакс
		ПО (ТелефонФакс.Объект = Контрагенты.Ссылка)
			И (ТелефонФакс.Вид = &ВидКонтИнфТелефонФакс)
			И (ТелефонФакс.Тип = &ТипКонтактнойИнформацииТелефонФакс)
			И (Контрагенты.Ссылка = &Контрагент)
ГДЕ
    Контрагенты.Родитель = &Контрагент
УПОРЯДОЧИТЬ ПО
	Контрагенты.Наименование
...Показать Скрыть
11. Петр Лунегов (pvlunegov) 31.05.16 15:34
(10) VipeRock,
в вашем запросе куча СИНТАКСИЧЕСКИХ ошибок, не запускается запрос. Это раз.
Вы видимо его вручную писали? Рекомендую пользоваться конструктором запросов. Рекомендую пользоваться обработкой "Консоль запросов", в ней интегрирован конструктор запросов. Обработка позволит ваш запрос собрать ПРАВИЛЬНО и сразу увидеть результат.
Во-вторых. У вас зачем соединение регистра Контактная информация левым соединением со справочником Контрагенты? А затем идет соединение регистра с тем-же регистром с другими отборами. Получается, что если Контактная информация не найдена, а, например, найден фактический адрес по контрагенту, то будет 0 записей, потому что центральный элемент связей - контактная информация.
Хрень получается.
Посмотрите мой запрос выше в публикации. Там все четко. Центральный элемент конструкции соединений таблиц - справочник Контрагенты. К нему левым соединением цепляются все остальные таблицы. Это дает гарантию вывода всех Контрагентов, независимо от того, есть записи по регистру Контактная информация по ним или нет.
12. Петр Лунегов (pvlunegov) 31.05.16 15:38
(10) VipeRock,
Собственно ваш запрос не работоспособен, потому что перепутан центральный элемент всей конструкции связей таблиц. А это очень важно!
Перед построением запроса вы должны ЧЕТКО осознавать, ЧТО должны получить в конце запроса.
1). Таблицу Контрагентов с возможными контактными данными (у кого то есть телефон, у кого-то нет, у кого-то вообще ничего нет, у кого-то только адрес и т.п.)
2). Таблицу телефонов Контрагентов и,если есть телефон, подцепить к ним е-мэйлы и почтовые адреса.
В этом случае ваш метод построения запроса актуален, но грамматические ошибки надо исправлять.

Зачем в связях вы пишите Контрагенты.Ссылка = &Контрагент ?
У вас в связи левое соединение. Ладно бы полное было, тогда имеет смысл условие в связи накладывать.
Вообще здесь, в запросе с левым соединением условия не в связи надо накладывать, а в условиях запроса
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа