Результат запроса, положить в параметр Макета

1. user2018855 25.04.24 16:42 Сейчас в теме
Добрые люди, помогите дилетанту пожалуйста.
Хочу создать запрос на ДатуОкончания страховки контрагента. И хочу сравнить его с текущей датой. И если Страховка просрочена то написать - "Страховка просрочена", а иначе "Страховка действует"

Вот что я додумал и написал (Не судите строго тут все криво)

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

Показать



Ошибка в итоге такая

{ВнешнийОтчет.СправкаМониторинга_отладка.Форма.ФормаОтчета.Форма(940,24)}: Переменная не определена (Макет)
        ОбластьШапка = <<?>>Макет.ПолучитьОбласть("Заголовок"); (Проверка: Сервер)
{ВнешнийОтчет.СправкаМониторинга_отладка.Форма.ФормаОтчета.Форма(941,9)}: Процедура или функция с указанным именем не определена (УстановитьПараметр)
        <<?>>УстановитьПараметр(ОбластьШапка, "strah", Выборка.ДоговорыКонтрагентовСтраховка); (Проверка: Сервер)


Скриншот макета и параметра на скрине2 (просто поместил пока что, макет не оформлял)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2018855 25.04.24 16:43 Сейчас в теме
(1)Забыл приложить скрин2
Прикрепленные файлы:
3. nomad_irk 76 25.04.24 16:52 Сейчас в теме
(1)
1. необходимо для начала получить сам макет, чтобы в нем получать области.
2.Это что за ответ ChatGPT:
УстановитьПараметр(ОбластьШапка, "strah", Выборка.ДоговорыКонтрагентовСтраховка);

?
Если это про заполнение параметров, то
ОбластьШапка.Параметры.Заполнить(Выборка)

, при этом поля в выборке должны по именам совпадать с именами параметров макета.

Если не совпадают, то
ОбластьШапка.Параметры.<ИмяПараметра> = <Значение>
7. user2018855 26.04.24 08:01 Сейчас в теме
(3)
А еще не могли бы Вы посмотреть сам запрос, я верно его составил?
8. nomad_irk 76 26.04.24 08:26 Сейчас в теме
(7)текст запроса - верный(он же конструктором составлен?).
Правильный ли результат запроса - не знаю, вам виднее, какие данные нужно получить.

Если начать разбираться, то запрос - чушь полнейшая, зачем в нем получается максимальная дата окончания по всем договорам - абсолютно не понятно.
9. user2018855 26.04.24 08:56 Сейчас в теме
(8)
Да я конструктором составлял.
В справочнике договор, есть табличная часть страховка и там записываются даты начала и окончания страховки. Максимумом я хотел получить именно последней даты страховку (то есть актуальную), и сравнить ее с текущей датой. И если она не просрочена, вывести в параметр макета "Страховка действует" в противном случае "Страховка просрочена"
Прикрепленные файлы:
10. nomad_irk 76 26.04.24 09:04 Сейчас в теме
(9)Хорошо, если так, то:
1. зачем получать максимальную дату вообще по всем страховкам всех договоров?
2. зачем сравнивать не максимальное значение даты страховки с текущей датой?

Запрос будет что-то вроде:

Выбрать
      ВЫБОР
             КОГДА МАКСИМУМ(ДатаОкончания) < &ТекущаяДата
                   ТОГДА "Страховка просрочена"
             ИНАЧЕ "Страховка действует"
      КОНЕЦ КАК СтатусСтраховки
ИЗ
      Справочник.ДоговорыКонтрагентов.Страховка
ГДЕ
      Ссылка = &Договор
Показать


Нужно еще параметры запроса установить, про которые забыли почему-то
4. Vladimir-R 167 25.04.24 17:03 Сейчас в теме
(1) Макет = ПолучитьМакет("Макет")
5. Jontao 25.04.24 17:44 Сейчас в теме
ТАБ = Новый ТабличныйДокумент;
	Макет = ПолучитьМакет("ВашМакет");
	Заголовок = Макет.ПолучитьОбласть("Заголовок");

	СтрокаТаблицы = Макет.ПолучитьОбласть("Строка");
	
	ТАБ.Вывести(Заголовок);
	
	Для Каждого СТР ИЗ Выборка Цикл
		СтрокаТаблицы.Параметры.num_B = СТР.num_B;
		СтрокаТаблицы.Параметры.Date_B = СТР.Date_B;
		И тд заполняете.....
		
		ТАБ.Вывести(СтрокаТаблицы);
	КонецЦикла;

	ТАБ.Показать();
Показать
6. user2018855 26.04.24 07:08 Сейчас в теме
Вроде внес изменения получилось вот так

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


Не судите строго я явно что то не понимаю)))

Код ошибки следующий

{ВнешнийОтчет.СправкаМониторинга_отладка.Форма.ФормаОтчета.Форма(939,33)}: Переменная не определена (strah)
		Заголовок.Параметры.Заполнить(<<?>>strah); (Проверка: Сервер)
{ВнешнийОтчет.СправкаМониторинга_отладка.Форма.ФормаОтчета.Форма(944,3)}: Переменная не определена (ОбластьШапка)
		<<?>>ОбластьШапка.Параметры.strah = СтатусСтрахования; (Проверка: Сервер)
{ВнешнийОтчет.СправкаМониторинга_отладка.Форма.ФормаОтчета.Форма(944,34)}: Переменная не определена (СтатусСтрахования)
		ОбластьШапка.Параметры.strah = <<?>>СтатусСтрахования; (Проверка: Сервер)
{ВнешнийОтчет.СправкаМониторинга_отладка.Форма.ФормаОтчета.Форма(936,14)}: Процедура или функция с указанным именем не определена (ПолучитьМакет)
	    Макет = <<?>>ПолучитьМакет("МакетОтчета"); (Проверка: Сервер)
Показать
11. Jontao 26.04.24 11:12 Сейчас в теме
(6) В макете ты должен быть "Область Заголовок" - где ты выводишь "Даты", "Всякие названия" ид.
И шапку таблицы - Это наименование "Договор", "ДатаПодписания" и тд (Можешь отдельно сделать как "Область Шапка Таблицы")

Должена быть "Область Строки", где ты выводишь Значение "Договора", "ФИО" и тд

у тебя управляемые формы. Получить макет таким способом не получится.

Вот так пробуйте.
&НаСервере
Функция ПолучитьМакет()
	Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("МакетОтчета");
КонецФункции


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

       Если ТЗ.Количество() > 0 Тогда   
           Для каждого СТР Из ТЗ Цикл                               
                ОбластьСтрока.Параметры.strah = СТР.СтатусСтрахования;
                 И ТД заполняешь
                  ....................................
 

                ТАБ.Вывести(ОбластьСтрока);
           КонецЦикла;
       КонецЕсли;


	ТАБ.Показать();
Показать


Ваш запрос не проверял.
user2018855; +1 Ответить
12. user2018855 26.04.24 13:11 Сейчас в теме
(11)

Сделал как вы сказали, то ему параметров не хватало, то их теперь много)))

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

ТАБ.Вывести(Заголовок);


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

Если ТЗ.Количество() > 0 Тогда
Для каждого СТР Из ТЗ Цикл
ОбластьСтрока.Параметры.strah = СТР.СтатусСтрахования;

ТАБ.Вывести(ОбластьСтрока);
КонецЦикла;
КонецЕсли;


ТАБ.Показать();
Возврат РеквизитФормыВЗначение("strah").ПолучитьМакет("МакетОтчета");	
Показать


А вот сама ошибка

{ВнешнийОтчет.СправкаМониторинга_отладка.Форма.ФормаОтчета.Форма(1026,23)}: Слишком много фактических параметров (ПолучитьМакет)
Макет = ПолучитьМакет(<<?>>"МакетОтчета"); (Проверка: Сервер)
13. user2018855 26.04.24 13:26 Сейчас в теме
(12)Получается добавил Название макета в

&НаСервере
Функция ПолучитьМакет(МакетОтчета)
Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("МакетОтчета");
КонецФункции


Ошибок нет теперь, но в макете ниче не выходит. Пусто
14. nomad_irk 76 26.04.24 13:30 Сейчас в теме
(13)1. запрос не работает от слова совсем.
2. зачем возвращать новый пустой макет - абсолютно не понятно.
15. Jontao 26.04.24 13:32 Сейчас в теме
(12) Вам надо чуть разобраться с этим дерьмом) Вы тупо копируете, не совсем понимая что и для чего надо сделать и в какой последовательности.
17. user2018855 26.04.24 13:37 Сейчас в теме
(14)Я вроде отдельно проверил в консоле запросов этот запрос. Вроде выдает Статус страхования, менял дату текущую статус менялся вроде устраивает.

(15)Абсолютно с Вами согласен, я еще вначале написал что я просто дилетант)) просто этот вывод очень нужен, и будет ультра полезным
19. nomad_irk 76 26.04.24 13:41 Сейчас в теме
(17)Заканчивайте программирование вслепую: вы не устанавливаете параметры запроса, выполнение запроса прерывается с ошибкой отсутствия требуемых параметров

не обижайтесь, но программировать - это не ваше. займитесь совершенствованием себя в том, что у вас получается хорошо.
20. user2018855 26.04.24 13:45 Сейчас в теме
(19)
Я вот как вы сделал запрос и он вроде супер отработал, то что нужно. (приложил скрин)
Но вот далее, я не совсем понял как этот результат поместить на форму макета, а точнее где я не так прописал
Прикрепленные файлы:
21. nomad_irk 76 26.04.24 13:47 Сейчас в теме
(20)Бесполезно вам что-то советовать, вы не понимаете основ взаимодействия с объектами и объектов между собой.
22. user2018855 26.04.24 13:49 Сейчас в теме
(21)Конечно я не заставляю Вас)

Я в последней надежде написал сюда, вдруг кому интересно такую задачку решить. А иначе без проблем, можете ничего не объяснять=))
23. nomad_irk 76 26.04.24 13:50 Сейчас в теме
(22)Ее интересно решать за вознаграждение. Бесплатно работать за вас/обучать вас никому не охота.
24. user2018855 26.04.24 13:52 Сейчас в теме
(23)
Без проблем давайте обсудим, у меня таких задачек много будет. Напишите мне +77029997002 (Ватсап). Обсудим детально, если интересно
16. Bukaska 140 26.04.24 13:36 Сейчас в теме
У вас управляемые формы? Возьмите любой шаблон печатной формы, там уже все прописано, только процедуру вывода макета доделать
18. user2018855 26.04.24 13:40 Сейчас в теме
(16)У меня внешний отчет со своим печатной формой, вот эта процедура вывода запроса в в эту форму и заключает мою текущую проблему))
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот