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

Передача параметра в запрос (составной тип)

Автор Zeed, 07 фев 2017, 09:35

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

Zeed

Допустим есть поле составного типа (несколько видов справочников, документов или бизнеспроцессов), но при передаче в запрос конкретный справочник уже известен. Как сделать запрос?

Возможно ли что-то наподобие такого:
"ВЫБРАТЬ
| ВЫБОР
| КОГДА ШаблонБизнесПроцесса ССЫЛКА Справочник.ШаблоныИсполнения
| ТОГДА ШаблоныИсполненияИсполнители.Исполнитель
| КОГДА ШаблонБизнесПроцесса ССЫЛКА Справочник.ШаблоныОзнакомления
| ТОГДА ШаблоныОзнакомленияИсполнители.Исполнитель
| КОГДА ШаблонБизнесПроцесса ССЫЛКА Справочник.ШаблоныПриглашения
| ТОГДА ШаблоныПриглашенияИсполнители.Исполнитель
| ИЗ &ШаблонПроцесса КАК ШаблонБизнесПроцесса "


Или обязательно нужно в секции ИЗ делать много объединений (в моём случае 9), а потом в секции ГДЕ уже писать ГДЕ ШаблонБизнесПроцесса = &ШаблонПроцесса? Это выглядит неоптимально

LexaK

вообще не понятно что вы городите!
Весь запрос приведите!

вот это
...
Из &ШаблонПроцесса
...
получение данных из ТЗ переданной через параметры, по любому у вас эта таблица должна быть типизирована,
просто сразу при формировании этой таблицы, подготовьте все нужные колонки/поля в т.ч. Исполнитель, тогда обращение к ТЗ будет выглядеть так

"ВЫБРАТЬ
        |    Таб.Ссылка как БизнесПроцесс,
        |    Таб.Исполнитель,
        |    Таб.... // и другие поля
        |Поместить ТабШаблон
        |    ИЗ &ШаблонПроцесса КАК Таб "
если помогло нажмите: Спасибо!

Mexxe

Добрый день помогите пожалуйста новичку, как можно в запросе формат даты без времени вывести?
Вот код

Запрос.Текст = "ВЫБРАТЬ
               | бсДанныеКлиентаСрезПоследних.ПаспортСерия КАК Серия,
               | бсДанныеКлиентаСрезПоследних.ПаспортНомер КАК Номер,
               | бсДанныеКлиентаСрезПоследних.ПаспортВыдан КАК Выдан,
               | бсДанныеКлиентаСрезПоследних.ВидДокумента,
               | бсДанныеКлиентаСрезПоследних.ДатВыдачиПаспорта КАК ДатаВыдачи,
               |ИЗ
               | Справочник.бсКлиенты КАК бсКлиенты
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.БсДанныеКлиента.СрезПоследних(, Клиент = &Клиент) КАК БсДанныеКлиентаСрезПоследних
               | ПО бсКлиенты.Ссылка = БсДанныеКлиентаСрезПоследних.Клиент
               |ГДЕ
               | бсКлиенты.Ссылка = &Клиент";
   
Запрос.УстановитьПараметр("Клиент",СсылкаНаОбъект.КлиентЗаказчик);
Выборка = Запрос.Выполнить().Выбрать();

Дата выводится "ДатВыдачиПаспорта" формата "dd.mm.yyyy чч.мм.сс", а нужно что бы выводилось в печатной форме как "dd.mm.yyyy", как это возможно сделать?
Подскажите пожалуйста. Спасибо!


LexaK

вот
Цитироватьа нужно что бы выводилось в печатной форме как "dd.mm.yyyy",
запрос здесь не причем!
вам надо при формировании печатной формы использовать функцию Формат()
там где-то у вас в коде есть примерная команда

...
ОбластьМакета.Параметры.ДатаВыдачи = Выборка.ДатаВыдачи;             

надо ее сделать примерно такой (это примерный код, так как вы не удосужились скопировать весь код обработки)
ОбластьМакета.Параметры.ДатаВыдачи = Формат(Выборка.ДатаВыдачи, "ДФ=дд.мм.гггг");             

или еще как вариант это изменить/задать Формат Значения Ячейки макета.
если помогло нажмите: Спасибо!

Mexxe

Цитата: LexaK от 08 фев 2017, 09:18
вот
Цитировать
или еще как вариант это изменить/задать Формат Значения Ячейки макета.
Этот вариант не подходит, так как в 1 ячейке не только дата находится!

Макет = ПолучитьМакет("Заказ");

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | Клиенты.Ссылка КАК ФИО,
               | Клиенты.ДатаРождения,
               | Клиенты.Пол,
               | Клиенты.СНИЛС,
               | ДанныеКлиентаСрезПоследних.ГруппаИнвалидности,
               | ДанныеКлиентаСрезПоследних.КатегорияИнвалидности,
               | ДанныеКлиентаСрезПоследних.ПричинаАмпутации,
               | ДанныеКлиентаСрезПоследних.УсловиеПротезирования,
   | ДанныеКлиентаСрезПоследних.ПаспортСерия КАК Серия,
               | ДанныеКлиентаСрезПоследних.ПаспортНомер КАК Номер,
               | ДанныеКлиентаСрезПоследних.ПаспортВыдан КАК Выдан,
               | ДанныеКлиентаСрезПоследних.ВидДокумента,
               | ДанныеКлиентаСрезПоследних.ДатВыдачиПаспорта,
               | ДанныеКлиентаСрезПоследних.НомерИПР,
               | ДанныеКлиентаСрезПоследних.ДатаВыдачиИПР,
               | ДанныеКлиентаСрезПоследних.СрокДействияИПР,
               | ДанныеКлиентаСрезПоследних.ИПРБессрочная,
               | Клиенты.Код КАК НомерЛичногоДела,
               | ДанныеКлиентаСрезПоследних.ДокументИнвалидности,
               | ДанныеКлиентаСрезПоследних.СоциальнаяГруппа,
               | ДанныеКлиентаСрезПоследних.РайонРегистрации,
               | ДанныеКлиентаСрезПоследних.Район КАК Район,
               | Клиенты.СтарыйКод,
               | ДанныеКлиентаСрезПоследних.ДатаВыдачиПРП,
               | ДанныеКлиентаСрезПоследних.ДокументПРП,
               | ДанныеКлиентаСрезПоследних.ДатаПРПДо,
               | ДанныеКлиентаСрезПоследних.НомерПРП
               |ИЗ
               | Справочник.Клиенты КАК Клиенты
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеКлиента.СрезПоследних(, Клиент = &Клиент) КАК ДанныеКлиентаСрезПоследних
               | ПО Клиенты.Ссылка = ДанныеКлиентаСрезПоследних.Клиент
               |ГДЕ
               | Клиенты.Ссылка = &Клиент";
   
Запрос.УстановитьПараметр("Клиент",СсылкаНаОбъект.КлиентЗаказчик);
Выборка = Запрос.Выполнить().Выбрать();


Область = Макет.ПолучитьОбласть("Шапка");
Макет.Параметры.ДатВыдачиПаспорта = Формат(СсылкаНаОбъект.Дата,"ДФ=dd.MM.yyyy");  //Это я пытался изменить формат

Область.Параметры.Организация = СсылкаНаОбъект.Организация.Наименование;
Область.Параметры.НомерДок = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект);
Область.Параметры.ДатаДок = Формат(СсылкаНаОбъект.Дата,"ДФ=dd.MM.yyyy");
Область.Параметры.ТипЗаказа = СсылкаНаОбъект.ВидЗаказа;

Может здесь Вы мне поможете разобраться, Весь код не могу, сильно объемный, пробовал как посоветовали ну что то все равно выводит в печать с временем

LexaK

а чего помогать?
вот у вас уже есть вывод даты без времени!!!
Цитировать
Область.Параметры.ДатаДок = Формат(СсылкаНаОбъект.Дата,"ДФ=dd.MM.yyyy");
если помогло нажмите: Спасибо!

Mexxe

Цитата: LexaK от 08 фев 2017, 11:09
а чего помогать?
вот у вас уже есть вывод даты без времени!!!

Область.Параметры.ДатаДок = Формат(СсылкаНаОбъект.Дата,"ДФ=dd.MM.yyyy");
Я её и пробывал почему то не работает
Добавлено: 08 фев 2017, 13:05


Цитата: Mexxe от 08 фев 2017, 12:45
Цитата: LexaK от 08 фев 2017, 11:09
а чего помогать?
вот у вас уже есть вывод даты без времени!!!

Область.Параметры.ДатаДок = Формат(СсылкаНаОбъект.Дата,"ДФ=dd.MM.yyyy");
Я её и пробывал почему то не работает
Только вот такой вид правильно?
Область.Параметры.ДатВыдачиПаспорта = Формат(СсылкаНаОбъект.Дата,"ДФ=dd.MM.yyyy");

LexaK

ЦитироватьТолько вот такой вид правильно?
Вид правильный. А что не работает-то?

а еще не понятно почему СсылкаНаОбъект.Дата ?
когда дату выдачи вы получаете Запросом ?

что то мы (вернее вы) в трех соснах блуждаете.

если помогло нажмите: Спасибо!

Mexxe

Цитата: LexaK от 08 фев 2017, 14:30
ЦитироватьТолько вот такой вид правильно?
Вид правильный. А что не работает-то?
а еще не понятно почему СсылкаНаОбъект.Дата ?
когда дату выдачи вы получаете Запросом ?
А как правильно должно быть?

Цитировать
что то мы (вернее вы) в трех соснах блуждаете.
Вот и именно, я новичок в этом деле!
Вот и прошу помощи, что бы дали профессиональный совет где ошибка кроется.

LexaK

ЦитироватьА как правильно должно быть?
Так откуда же я знаю как у вас должно быть правильно?
С точки зрения синтаксиса у вас ВСЕ ПРАВИЛЬНО!
А уже с точки зрения логики, так это постановка задачи только вам известна!

И как самый главный совет профессионала:
Что бы что-то делать, этому надо сначала научиться! :befhbt:
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск