Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:12

Переделать запрос

Автор Antonio, 24 апр 2023, 23:42

0 Пользователей и 1 гость просматривают эту тему.

Antonio

Здравствуйте. Эта тема в продолжение данной темы https://forum-baza.ru/index.php?topic=81232.0

Не могу понять, как все таки нормально получить контактные данные(например здесь Адрес, телефонСклада). Получается вот такая дичь пока что http://joxi.ru/YmERnQkULlZ0b2. Это если искать либо по номеру строки либо по соответствии параметру(например = &Адрес). Или может можно обойти выборку из этой таблицы как то и всё?

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

Yotram

Вот так можно переделать запрос, чтобы он выводил контактную информацию по складу. Аналогично можно сделать и с партнерами.

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

LexaK

Цитата: Yotram от 25 апр 2023, 07:17КОГДА ПартнерыКонтактнаяИнформация.НомерСтроки = 2
ЭЭЭ, ни кто не гарантирует что именно во второй строке будет Телефон! (необходимо отбирать нужное по ТИПУ и ВИДУ)
если помогло нажмите: Спасибо!

LexaK

Antonio, попробуйте такой запрос, (возможны опечатки)
Выбрать
    ЗаказКлиента.Организация КАК Организация,
    ЗаказКлиента.АдресДоставки КАК АдресДоставки,
    ЗаказКлиента.Номер КАК Номер,
    ЗаказКлиента.Контрагент.Наименование КАК КонтрагентНаименование, 
//если несколько данных одного Типа, добавить отобор по Виду
ЕстьNull(ПартнерыАдресЭП.АдресЭП, Неопределено) как АдресЭПКонтрагента,
ЕстьNull(ПартнерыТелефон.НомерТелефона, Неопределено) как ТелефонКонтрагента,
ЕстьNull(СкладыАдрес.Представление, Неопределено) как АдресСклада,
ЕстьNull(СкладыТелефон.НомерТелефона, Неопределено) как ТелефонСклада

ИЗ
    Документ.ЗаказКлиента КАК ЗаказКлиента
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыАдресЭП
        ПО ЗаказКлиента.Партнер = ПартнерыАдресЭП.Ссылка
и ПартнерыАдресЭП.Тип = Значение(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
и ПартнерыАдресЭП.АдресЭП  > """"
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыТелефон
        ПО ЗаказКлиента.Партнер = ПартнерыТелефон.Ссылка
и ПартнерыТелефон.Тип = Значение(Перечисление.ТипыКонтактнойИнформации.Телефон)
и ПартнерыТелефон.НомерТелефона  > """"
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыАдрес
        ПО ЗаказКлиента.Склад = СкладыАдрес.Ссылка
и СкладыАдрес.Тип = Значение(Перечисление.ТипыКонтактнойИнформации.Адрес)
//здесь добавить отбор по Виду если используется несколько Адресов!!!
и СкладыАдрес.Представление  > """"
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыТелефон
        ПО ЗаказКлиента.Партнер = СкладыТелефон.Ссылка
и СкладыТелефон.Тип = Значение(Перечисление.ТипыКонтактнойИнформации.Телефон)
и СкладыТелефон.НомерТелефона  > """"
ГДЕ
    ЗаказКлиента.Ссылка = &Ссылка
если помогло нажмите: Спасибо!

Antonio

LexaK, Вас понял, спасибо!. Все корректно щас, только телефонСклада пока не возвращает. Разбираюсь пока что   

LexaK

Antonio, проверьте поля НомерТелефона и Представление
номер может быть не заполнен, замените его в запросе на Представление.
если помогло нажмите: Спасибо!

antoneus

тут опечатка, вместо ЗаказКлиента.Партнер надо ЗаказКлиента.Склад

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыТелефон
        ПО ЗаказКлиента.Партнер = СкладыТелефон.Ссылка

Antonio

antoneus, Да, спасибо, тоже заметил пока разбирался и поправил.

Antonio

antoneus, LexaK, В итоге такая функция получилась для печати. Табличную часть для товаров решил заполнить
 отдельным запросом. Нормально ли такое решение? &НаСервере
Функция СформироватьПечатнуюФорму(МассивОбъектов,КоллекцияПечатныхФорм)   Экспорт
ТаблДокум = Новый ТабличныйДокумент;
ТаблДокум.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ";
//область Адрессклада и областьОрганизация
Макет = ПолучитьМакет("Макет");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЗаказКлиента.Организация КАК Организация,
| ЗаказКлиента.АдресДоставки КАК АдресДоставки,
| ЗаказКлиента.Номер КАК Номер,
| ЗаказКлиента.Контрагент.Наименование КАК КонтрагентНаименование,
| ЕСТЬNULL(ПартнерыАдресЭП.АдресЭП, НЕОПРЕДЕЛЕНО) КАК АдресЭПКонтрагента,
| ЕСТЬNULL(ПартнерыТелефон.НомерТелефона, НЕОПРЕДЕЛЕНО) КАК ТелефонКонтрагента,
| ЕСТЬNULL(СкладыАдрес.Представление, НЕОПРЕДЕЛЕНО) КАК АдресСклада,
| ЕСТЬNULL(СкладыТелефон.НомерТелефона, НЕОПРЕДЕЛЕНО) КАК ТелефонСклада,
| ЕСТЬNULL(ОрганизацииАдрес.Представление, НЕОПРЕДЕЛЕНО) КАК АдресОрганизации,
| ЕСТЬNULL(ОрганизацииАдресЭП.АдресЭП, НЕОПРЕДЕЛЕНО) КАК АдресЭпОрганизации,
| ЕСТЬNULL(ОрганизацииТелефон.НомерТелефона, НЕОПРЕДЕЛЕНО) КАК ТелефонОрганизации,
| ЗаказКлиента.БанковскийСчет.Банк.Код КАК БИК,
| ЗаказКлиента.БанковскийСчет.Банк.Ссылка КАК Банк,
| ЗаказКлиента.БанковскийСчет.НомерСчета КАК IBAN,
| ОрганизацииКонтактнаяИнформация.Регион КАК Город
|ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыАдресЭП
| ПО ЗаказКлиента.Партнер = ПартнерыАдресЭП.Ссылка
| И (ПартнерыАдресЭП.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты))
| И (ПартнерыАдресЭП.АдресЭП > """""""")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыТелефон
| ПО ЗаказКлиента.Партнер = ПартнерыТелефон.Ссылка
| И (ПартнерыТелефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
| И (ПартнерыТелефон.НомерТелефона > """""""")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыАдрес
| ПО ЗаказКлиента.Склад = СкладыАдрес.Ссылка
| И (СкладыАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
| И (СкладыАдрес.Представление > """""""")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады.КонтактнаяИнформация КАК СкладыТелефон
| ПО ЗаказКлиента.Склад = СкладыТелефон.Ссылка
| И (СкладыТелефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
| И (СкладыТелефон.НомерТелефона > """""""")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииАдресЭП
| ПО ЗаказКлиента.Организация = ОрганизацииАдресЭП.Ссылка
| И (ОрганизацииАдресЭП.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты))
| И (ОрганизацииАдресЭП.АдресЭП > """""""")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииТелефон
| ПО ЗаказКлиента.Организация = ОрганизацииТелефон.Ссылка
| И (ОрганизацииТелефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон))
| И (ОрганизацииТелефон.Представление > """""""")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииАдрес
| ПО ЗаказКлиента.Организация = ОрганизацииАдрес.Ссылка
| И (ОрганизацииАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
| И (ОрганизацииАдрес.Представление > """""""")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация
| ПО ЗаказКлиента.Организация = ОрганизацииКонтактнаяИнформация.Ссылка
|ГДЕ
| ЗаказКлиента.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", МассивОбъектов);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьОрганизацияКонтрагент = Макет.ПолучитьОбласть("ОрганизацияКонтрагент");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ПОКА Выборка.Следующий() Цикл
ОбластьШапка.Параметры.АдресСклада = Выборка.АдресСклада;
ОбластьШапка.Параметры.ТелефонСклада = "Tel: " + Выборка.ТелефонСклада;
ОбластьШапка.Параметры.НомерДокумента = Выборка.Номер;
ОбластьШапка.Параметры.Контрагент = Выборка.КонтрагентНаименование;
ОбластьШапка.Параметры.ДатаПечати = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");
ОбластьОрганизацияКонтрагент.Параметры.Контрагент = Выборка.КонтрагентНаименование;
ОбластьОрганизацияКонтрагент.Параметры.АдресКонтрагента = Выборка.АдресДоставки;
ОбластьОрганизацияКонтрагент.Параметры.ТелефонКонтрагента = "Tel: " + Выборка.ТелефонКонтрагента;
    ОбластьОрганизацияКонтрагент.Параметры.АдресЭПКонтрагент =" E-Mail: " + Выборка.АдресЭПКонтрагента;
ОбластьОрганизацияКонтрагент.Параметры.Организация = Выборка.Организация;
ОбластьОрганизацияКонтрагент.Параметры.АдресОрганизации = Выборка.АдресОрганизации;
ОбластьОрганизацияКонтрагент.Параметры.ТелефонОрганизации = "Tel: "+ Выборка.ТелефонОрганизации;
ОбластьОрганизацияКонтрагент.Параметры.АдресЭПОрганизации ="E-Mail: " + Выборка.АдресЭПОрганизации;
ОбластьПодвал.Параметры.БИК = "BIC/SWIFT: " + Выборка.БИК;
ОбластьПодвал.Параметры.БАН ="IBAN: " + Выборка.IBAN;
ОбластьПодвал.Параметры.Банк=  "Bank: " + Выборка.Банк;
ОбластьПодвал.Параметры.Город = "Address: " + Выборка.Город;
КонецЦикла;
ТаблДокум.Вывести(ОбластьШапка);
ТаблДокум.Вывести(ОбластьОрганизацияКонтрагент);
   
//ОБЛАСТЬ ТАБЛИЧНОЙ ЧАСТИ
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
| ЗаказКлиентаТовары.Количество КАК Количество,
| ЗаказКлиентаТовары.Цена КАК Цена,
| ЗаказКлиентаТовары.Сумма КАК Сумма,
| ЗаказКлиента.СуммаДокумента КАК СуммаДокумента,
| ЗаказКлиента.Валюта.Наименование КАК Валюта
|ИЗ
| Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ЗаказКлиента
| ПО ЗаказКлиентаТовары.Ссылка = ЗаказКлиента.Ссылка
|ГДЕ
| ЗаказКлиента.Ссылка В(&Ссылка)";

Запрос.УстановитьПараметр("Ссылка", МассивОбъектов);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

ОбластьШапкаТабЧасти = Макет.ПолучитьОбласть("ШапкаТабЧасти");
ОбластьДеталиТабЧасти = Макет.ПолучитьОбласть("ДеталиТаблЧасти");
    ТаблДокум.Вывести(ОбластьШапкаТабЧасти);
ТаблДокум.НачатьАвтогруппировкуСтрок();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьДеталиТабЧасти.Параметры.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
ОбластьДеталиТабЧасти.Параметры.Количество = ВыборкаДетальныеЗаписи.Количество;
ОбластьДеталиТабЧасти.Параметры.Цена =  ВыборкаДетальныеЗаписи.Цена;
ОбластьДеталиТабЧасти.Параметры.Сумма = ВыборкаДетальныеЗаписи.Сумма;
ТаблДокум.Вывести(ОбластьДеталиТабЧасти);
КонецЦикла;
ТаблДокум.ЗакончитьАвтогруппировкуСтрок();
      ОбластьИтог = Макет.ПолучитьОбласть("Итог");
ОбластьИтог.Параметры.Итоги = ВыборкаДетальныеЗаписи.СуммаДокумента;
ОбластьИтог.Параметры.Валюта = ВыборкаДетальныеЗаписи.Валюта;


     ТаблДокум.Вывести(ОбластьИтог);
    ТаблДокум.Вывести(ОбластьПодвал);

  //ТаблДокум.Очистить();  

ТаблДокум.АвтоМасштаб = Истина;
ТаблДокум.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТаблДокум.ПолеСлева = 5;
ТаблДокум.ПолеСправа = 5;
ТаблДокум.ВывестиГоризонтальныйРазделительСтраниц();
Возврат ТаблДокум;    

КонецФункции

Antonio

Еще не могу понять пока что, как отсюда запрос из цикла убрать. Это групповая печать

&НаСервере
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

ТабДокРез = Новый ТабличныйДокумент();
       ТабДок = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
        Если ТабДокРез.ВысотаТаблицы <> 0 Тогда
            ТабДокРез.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        ТабДокРез.Вывести(ТабДок);
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Макет", "Макет", ТабДокРез);

КонецПроцедуры

;

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск