Имя: Пароль:
1C
1С v8
Вытащить контактнуную информацию из справочника
,
0 Lite777888
 
naïve
24.10.24
16:57
Здравствуйте, УТ 11,
нужно запросом вытащить контактную информацию из спр. «Контрагенты» в виде таблицы: Контрагент-ИНН-юрадрес/элпочта и т.д.,

проблема: ТЧ КонтактнаяИнформация имеет поле «ДействуетС» — история для юр. адреса, нужно взять с наибольшей датой, запрос такой:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
	Контрагенты.Ссылка КАК Ссылка,
	Контрагенты.Партнер КАК Партнер,
	Контрагенты.ИНН КАК ИНН
ПОМЕСТИТЬ ВТ1
ИЗ
	Справочник.Контрагенты КАК Контрагенты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	КонтрагентыКонтактнаяИнформация.Ссылка КАК Ссылка,
	КонтрагентыКонтактнаяИнформация.Представление КАК ЮРАДРЕС , 
	КонтрагентыКонтактнаяИнформация.ДействуетС
ПОМЕСТИТЬ ВТ2
ИЗ
	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
	КонтрагентыКонтактнаяИнформация.Вид = &ЮРАДРЕС2
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	КонтрагентыКонтактнаяИнформация.Ссылка КАК Ссылка,
	КонтрагентыКонтактнаяИнформация.Представление КАК ДОСТАВКИАДРЕС
ПОМЕСТИТЬ ВТ3
ИЗ
	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
	КонтрагентыКонтактнаяИнформация.Вид = &ДОСТАДРЕС
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ПартнерыКонтактнаяИнформация.Ссылка КАК Ссылка,
	ПартнерыКонтактнаяИнформация.Представление КАК ФАКТАДРЕС,
	ПартнерыКонтактнаяИнформация.Ссылка.ОсновнойМенеджер КАК ОсновнойМенеджер
ПОМЕСТИТЬ ВТ4
ИЗ
	Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
ГДЕ
	ПартнерыКонтактнаяИнформация.Вид = &ФАКТАДРЕС
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	КонтрагентыКонтактнаяИнформация.Ссылка КАК Ссылка,
	КонтрагентыКонтактнаяИнформация.Представление КАК ПОЧТАОБМЕНЭЛДОКАМИ
ПОМЕСТИТЬ ВТ5
ИЗ
	Справочник.Партнеры.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
	КонтрагентыКонтактнаяИнформация.Вид = &ОБМЕНЭЛЕКТРДОК
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	КонтрагентыКонтактнаяИнформация.Ссылка КАК Ссылка,
	КонтрагентыКонтактнаяИнформация.Представление КАК ЭЛПОЧТАСПРАВОЧНО
ПОМЕСТИТЬ ВТ6
ИЗ
	Справочник.Партнеры.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
	КонтрагентыКонтактнаяИнформация.Вид = &АДРЕСЭЛПОЧТЫСПРАВОЧН
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ1.Ссылка КАК Ссылка,
	ВТ1.ИНН КАК ИНН,
	ВТ2.ЮРАДРЕС КАК ЮРАДРЕС, 
	МАКСИМУМ (ВТ2.ДЕЙСТВУЕТС) КАК ДЕЙСТВУЕТС ,
	
	ВТ3.ДОСТАВКИАДРЕС КАК ДОСТАВКИАДРЕС,
	ВТ4.ФАКТАДРЕС КАК ФАКТАДРЕС,
	ВТ4.ОсновнойМенеджер КАК ОсновнойМенеджер,
	ВТ5.ПОЧТАОБМЕНЭЛДОКАМИ КАК ПОЧТАОБМЕНЭЛДОКАМИ,
	ВТ6.ЭЛПОЧТАСПРАВОЧНО КАК ЭЛПОЧТАСПРАВОЧНО  
	
ИЗ
	ВТ1 КАК ВТ1
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
		ПО (ВТ2.Ссылка = ВТ1.Ссылка)
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ3 КАК ВТ3
		ПО (ВТ3.Ссылка = ВТ1.Ссылка)
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ4 КАК ВТ4
		ПО (ВТ4.Ссылка = ВТ1.Партнер)
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ5 КАК ВТ5
		ПО (ВТ5.Ссылка = ВТ1.Партнер)
	ЛЕВОЕ СОЕДИНЕНИЕ ВТ6 КАК ВТ6
		ПО (ВТ6.Ссылка = ВТ1.Партнер)	 
		
	СГРУППИРОВАТЬ ПО  

	ВТ1.Ссылка ,
	ВТ1.ИНН  ,
	ВТ2.ЮРАДРЕС ,
	
	ВТ3.ДОСТАВКИАДРЕС ,
	ВТ4.ФАКТАДРЕС	,
	ВТ4.ОсновнойМенеджер ,
	ВТ5.ПОЧТАОБМЕНЭЛДОКАМИ ,
	ВТ6.ЭЛПОЧТАСПРАВОЧНО  

				
УПОРЯДОЧИТЬ ПО ВТ1.Ссылка.Наименование
1 Lite777888
 
naïve
24.10.24
16:55
Но выдает результат с дубляжами строк по контрагентам
2 Волшебник
 
24.10.24
16:59
ВЫБРАТЬ ПЕРВЫЕ 1
	КИ.Ссылка КАК Ссылка,
	КИ.Представление КАК ЮРАДРЕС , 
	КИ.ДействуетС
ПОМЕСТИТЬ ВТ2
ИЗ
	Справочник.Контрагенты.КонтактнаяИнформация КАК КИ
ГДЕ
	КИ.Вид = &ЮРАДРЕС2
УПОРЯДОЧИТЬ ПО КИ.Период УБЫВ
3 Мультук
 
гуру
24.10.24
17:03
(0)

Первая же мысль.
В БСП должна быть готовая функция

// Возвращает таблицу, содержащую контактную информацию нескольких объектов. 
//
// Параметры:
//    Источник         - Массив - владельцы контактной информации.
//    Отбор - см. ОтборКонтактнойИнформации.
//
// Возвращаемое значение:
//  ТаблицаЗначений:
//   * Объект           - ЛюбаяСсылка - владелец контактной информации.
//   * Вид              - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации.
//   * Тип              - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации.
//   * Значение         - Строка - контактная информация во внутреннем формате JSON.
//   * Представление    - Строка - представление контактной информации.
//   * Дата             - Дата   - дата, с которой действует запись контактной информации.
//   * ИдентификаторСтрокиТабличнойЧасти - Число - идентификатор строки этой табличной части
//   * ЗначенияПолей    - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для
//                                 обратной совместимости.
//


УправлениеКонтактнойИнформацией.КонтактнаяИнформация()
4 AAA
 
24.10.24
17:03
А зачем сначала разрезали шапку и табличную часть, да еще и по каждому виду контактной информации, а затем обратно все собирали из временных таблиц? Или сейчас мода на временные таблицы?
5 Timon1405
 
24.10.24
17:04
УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(СсылкиИлиОбъекты, Знач ТипыКонтактнойИнформации = Неопределено, Знач ВидыКонтактнойИнформации = Неопределено, Дата = Неопределено) Экспорт
6 Мультук
 
гуру
24.10.24
17:06
(5)

+1
7 Lite777888
 
naïve
24.10.24
17:10
(2) Как бы выберется , но один элемент в запросе будет
8 Волшебник
 
24.10.24
17:21
(7) да, чего-то неправильно получится... Тогда так:

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

;
ВЫБРАТЬ 
	КИ.Ссылка КАК Ссылка,
        КИ.Представление КАК ЮРАДРЕС , 
	КИ.ДействуетС
ПОМЕСТИТЬ ВТ2
ИЗ
	Справочник.Контрагенты.КонтактнаяИнформация КАК КИ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЮрАдреса ПО ВТ_ЮрАдреса.Ссылка = КИ.Ссылка И ВТ_ЮрАдреса.ДействуетС = КИ.ДействуетС
9 Lite777888
 
naïve
24.10.24
17:18
(4) А как вы предлагаете ? КОГДА ..ТОГДА ...,одинмм запросом,
как выделять, поле  Представление одно , а мне нужно его на колонки разбить нужные
10 Волшебник
 
24.10.24
17:25
Вот ещё вариантик от ChatGPT:

ВЫБРАТЬ
    Контрагенты.Ссылка КАК Контрагент,
    КонтактнаяИнформация.Представление КАК ЮридическийАдрес
ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация
    ПО Контрагенты.Ссылка = КонтактнаяИнформация.Ссылка
ГДЕ
    КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Перечисление.ВидКонтактнойИнформации.ЮридическийАдрес)    
    И (КонтактнаяИнформация.ДействуетС = 
        (ВЫБРАТЬ МАКСИМУМ(КонтактнаяИнформация2.ДействуетС)
         ИЗ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация2
         ГДЕ КонтактнаяИнформация2.Ссылка = Контрагенты.Ссылка
             И КонтактнаяИнформация2.Вид = КонтактнаяИнформация.Вид))
11 AAA
 
24.10.24
17:31
(8)Надо же максимум выбирать видимо не просто по ссылке, а еще и по каждому виду КИ
12 Timon1405
 
24.10.24
17:31
писать свои запросы в БСП - зло. в любой момент может поменяться хранение информации и самописный запрос перестанет работать. нужно использовать механизм представлений(там конечно тоже может сломаться логика вендора, но шанс этого намного ниже)
13 Волшебник
 
24.10.24
17:34
(11) Не, я уже устал
14 AAA
 
24.10.24
17:37
(12) Это религиозный спор БСП или не БСП. По правильному, безусловно БСП. Но на практике так не всегда, столько уже было подстав.  БСП - очень живое образование)
15 AAA
 
24.10.24
17:44
Кстати, раз уж по КИ. Недавно обнаружил. В БП3 предопределенные Виды контактной информации контрагентов имеют идентификаторы типа "...Контрагента", вот EMAIL почему то "Контрагенты" )
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший