Добрый день. Я начинающий программист. Подскажите пожалуйста, у меня такой вопрос:
в запросе,одно из требований, нужно получить почту и номер покупателя. В самом справочнике "Контрагенты" нет реквизита, хранящий эту информацию, но на форме элемента есть страничка, в которой хранятся эти данные. Они берутся из другого справочника. Я никак не могу понять, как или с помощью чего я могу получить эти значения в своём запросе. Подскажите пожалуйста. (1C Предприятие 8.3)
в запросе,одно из требований, нужно получить почту и номер покупателя. В самом справочнике "Контрагенты" нет реквизита, хранящий эту информацию, но на форме элемента есть страничка, в которой хранятся эти данные. Они берутся из другого справочника. Я никак не могу понять, как или с помощью чего я могу получить эти значения в своём запросе. Подскажите пожалуйста. (1C Предприятие 8.3)
Прикрепленные файлы:
По теме из базы знаний
- Модель запроса
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- Экспертный взгляд на оптимизацию производительности на примере исправления и декомпозиции запроса
- Модель запроса SQL
Найденные решения
(12) Совет на будущее, старайтесь избегать оператора ИЛИ в условиях запросов, я бы сделал так
ВЫБРАТЬ
Контрагенты.Ссылка КАК Покупатель,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
КонтактнаяИнформацияТел.Представление КАК Телефон,
КонтактнаяИнформацияПочта.Представление КАК Почта
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияТел
ПО (КонтактнаяИнформацияТел.Объект = Контрагенты.Ссылка)
И КонтактнаяИнформацияТел.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияПочта
ПО (КонтактнаяИнформацияПочта.Объект = Контрагенты.Ссылка)
И КонтактнаяИнформацияПочта.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
ГДЕ
Контрагенты.Покупатель
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(4) в "старых" конфигурациях контактная информация хранится в соответствующем регистре сведений, в измерении "Объект" (или как-то так) хранится сцылка на владельца (контрагента, физлица и т.д.). В итоге в запросе достаточно левого соединения по объекту и виду контактной информации. В "новых" конфигурациях все поменяли - теперь эта информация хранится в табличной части справочника и извлекается тоже левым соединением, но уже к табличной части, а не к регистру. Стоит иметь это ввиду, а то выучите одно, а завтра - опа - все не там. Такие метамарфозы - очень частая вещь, поэтому учить где и что лежит досконально - смысла нет, но примерно знать, как организованы данные в том или ином решении - в этом смысл есть. Правда если сдавать профа, то вызубрить эту бессмысленную информацию с точностью до запятой все-же придется...
(11)
ВЫБРАТЬ
Контрагенты.Ссылка КАК Покупатель,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
ВЫБОР
КОГДА КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
ТОГДА КонтактнаяИнформация.Представление
КОНЕЦ КАК ТелефонПокупателя,
ВЫБОР
КОГДА КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
ТОГДА КонтактнаяИнформация.Представление
КОНЕЦ КАК АдресЭлектроннойПочтыПокупателя
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ПО (КонтактнаяИнформация.Объект = Контрагенты.Ссылка)
ГДЕ
Контрагенты.Покупатель
И (КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
ИЛИ КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты))
Показать
(12) Совет на будущее, старайтесь избегать оператора ИЛИ в условиях запросов, я бы сделал так
ВЫБРАТЬ
Контрагенты.Ссылка КАК Покупатель,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
КонтактнаяИнформацияТел.Представление КАК Телефон,
КонтактнаяИнформацияПочта.Представление КАК Почта
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияТел
ПО (КонтактнаяИнформацияТел.Объект = Контрагенты.Ссылка)
И КонтактнаяИнформацияТел.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияПочта
ПО (КонтактнаяИнформацияПочта.Объект = Контрагенты.Ссылка)
И КонтактнаяИнформацияПочта.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
ГДЕ
Контрагенты.Покупатель
Показать
(13)
Спасибо большое. Вроде работает, допилю полный запрос и уже помечу решение.
И за совет спасибо, учусь. Не сталкивался и не видел такого способа задавать условие.
ВЫБРАТЬ
Контрагенты.Ссылка КАК Покупатель,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
КонтактнаяИнформацияТел.Представление КАК Телефон,
КонтактнаяИнформацияПочта.Представление КАК Почта
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияТел
ПО (КонтактнаяИнформацияТел.Объект = Контрагенты.Ссылка)
И КонтактнаяИнформацияТел.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияПочта
ПО (КонтактнаяИнформацияПочта.Объект = Контрагенты.Ссылка)
И КонтактнаяИнформацияПочта.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
ГДЕ
Контрагенты.Покупатель
ПоказатьКонтрагенты.Ссылка КАК Покупатель,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
КонтактнаяИнформацияТел.Представление КАК Телефон,
КонтактнаяИнформацияПочта.Представление КАК Почта
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияТел
ПО (КонтактнаяИнформацияТел.Объект = Контрагенты.Ссылка)
И КонтактнаяИнформацияТел.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияПочта
ПО (КонтактнаяИнформацияПочта.Объект = Контрагенты.Ссылка)
И КонтактнаяИнформацияПочта.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
ГДЕ
Контрагенты.Покупатель
Спасибо большое. Вроде работает, допилю полный запрос и уже помечу решение.
И за совет спасибо, учусь. Не сталкивался и не видел такого способа задавать условие.
(16) Нет, это условие выведет всех контрагентов, у которых реквизит Покупатель = Истина, если вам именно это нужно тогда ок, есди же надо только по какомуто конкретному или списку контрагентов, тогда надо сделать отбор по ссылке и установить параметр с массивом этих ссылок или одной единственной
А можно ещё такой вопрос? У меня у контрагента (например) есть два номера, то есть в результате запроса у меня выводится две строки с номерами (разные), следовательно, и контрагент, и почта и т.д. дублируются. Можно ли как то значение телефона (например) с двух строк соединить в одну ячейку (чтобы было в одной строке) через запятую или как то так? Если да, то подскажите методику.
Например!
Таблица 1:
-----------------
Name |Type
-----------------
Мишка |Игрушка
Мишка |Зверь
Енот |Зверь
Таблица 2:
-----------------
Name |Value
----------------
Мишка |200
Енот |100
Енот |200
Ожидаемый результат:
-------------------------
Мишка |200|Зверь,Игрушка
Енот |300|Зверь
Например!
Таблица 1:
-----------------
Name |Type
-----------------
Мишка |Игрушка
Мишка |Зверь
Енот |Зверь
Таблица 2:
-----------------
Name |Value
----------------
Мишка |200
Енот |100
Енот |200
Ожидаемый результат:
-------------------------
Мишка |200|Зверь,Игрушка
Енот |300|Зверь
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот