Имя: Пароль:
1C
1С v8
Непонятка с отбором
0 AAA
 
07.11.24
18:46
Всем доброго дня! Никак не могу понять в чем дело. Есть обработка. На ее форме размещен отбор компоновшика настроек. При его изменении вызывается соответсвующее событие, выполняется запрос и заполняется таблица значений. Все прекрасно работает. Но вот понадобилось расширить функциональность отбора. Добавил реквизиты формы, вывел их на форму и при выставленном флаге запрос модифицируется (добавляется условие  на принадлежность ссылки данным вложенного запроса) и по реквизитам формы устанавливаются несколько параметров вложенного запроса. Долго бился, отбор не работал, хотя сам вложенный запрос отдельно прекрасно работал, а параметры устанавливались (смотрел в отладчике). Потом случайно нажал 2 раза на кнопку, которая тоже вызывает обновление данных отбора и чудо, таблица заполняется, заполняется верно, но ... только со второго раза ))
Почти понятно, что дело в параметрах, но перед первым выполнение смотрю их в отладчике, они верные. Такая небольшая загадка.
Примерный фрагмент добавки:
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос;
	
ТекстЗапроса = ТекстЗапроса + "
	|  И (Номенклатура.Ссылка В (" +  ТекстЗапросаВложенный + "))";
	
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос = ТекстЗапроса;

Настройки = КомпоновщикНастроек.Настройки;
	
Параметр = Настройки.ПараметрыДанных.Элементы.Найти("ДатаПереоценки");
Параметр.Значение = ДатаПереоценки;
Параметр.Использование = Истина;
1 Волшебник
 
07.11.24
18:47
а можно точный фрагмент добавки, включая присвоение ТекстЗапросаВложенный ?
2 AAA
 
07.11.24
19:01
(1)Так он точный и есть, просто обрезанный. Что значит присвоение ТекстЗапросаВложенный ?
// запрос по умолчанию
ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос;

// добавляю вложенный    
ТекстЗапроса = ТекстЗапроса + "
    |  И (Номенклатура.Ссылка В (" +  ТекстЗапросаВложенный + "))";

// толкаю в скд    
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных.Запрос = ТекстЗапроса;

Сам вложенный сейчас покоцанный весь, там выбирается номенклатура, которая переоценивалась требуемой датой, по требуемому виду цен, плюс возможно только с остатками.
3 Волшебник
 
07.11.24
19:02
удачи
4 AAA
 
07.11.24
19:08
вот самый простой вариант:
    ТекстЗапросаВложенный = "
    |ВЫБРАТЬ
    |    ЦеныНоменклатуры25.Номенклатура КАК Номенклатура
    |ИЗ
    |    РегистрСведений.ЦеныНоменклатуры25 КАК ЦеныНоменклатуры25
    |    ГДЕ
    |    НАЧАЛОПЕРИОДА(ЦеныНоменклатуры25.Период, ДЕНЬ) = &ДатаПереоценки
    |    И ЦеныНоменклатуры25.ВидЦены = &ВидЦены
    |";
5 AAA
 
07.11.24
19:05
(3)спасибо огромное
6 Волшебник
 
07.11.24
19:06
(4) Где срез последних?
7 Волшебник
 
07.11.24
19:06
И просили же "ТекстЗапросаВложенный"

Кто-то где-то врёт
8 AAA
 
07.11.24
19:09
(6)мне не нужен срез последних, мне нужны позиции, по которым менялись цены в конкретный день. Сами цены не интересуют.
Он и есть вложенный, других запросов нет. Все отлично работает, но со второго раза. При первом разе пустая выборка
10 evorle145
 
07.11.24
19:11
(0) "но ... только со второго раза" что-то знакомое...  Такой затуп был у меня как-то.. не помню точно, возможно я забыл тогда
    КомпоновщикНастроек.ЗагрузитьНастройки(КомпоновщикНастроек.Настройки);
12 AAA
 
07.11.24
20:00
Заработало. Всем спасибо, особенно Волшебнику!
После модификации запроса заново прочитал настройки и все встало на свои места:
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
13 Волшебник
 
07.11.24
20:04
(12) ага, щас...