Имя: Пароль:
1C
1С v8
Неверно открывается форма с параметрами, переданными с сервера
,
0 Кослесникова Марина
 
14.07.22
14:35
Здравствуйте. Мне нужно из формы номенклатуры открывать список регистра сведений с ценами с отбором по данной номенклатуре. На сервере формирую структуру и передаю на клиент, но при открытии списка выводится всё равно вся номенклатура, хотя при отладке передается только нужная. Помогите, пожалуйста найти причину. PS про отбор знаю, нужно сделать именно через запрос.

https://i.postimg.cc/m1cs1hm6/2022-07-14-2.png
https://i.postimg.cc/zy8c9VnZ/2022-07-14-3.png
5 6awkup_true
 
14.07.22
14:42
не правильно формируешь параметры формы. должно выглядеть примерно так

Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", ТвояНоменклатура);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Отбор);
//открываешь форму
6 Кослесникова Марина
 
14.07.22
14:44
(5) Я знаю про отбор, делала так, но мне нужно именно через запрос на сервере
7 6awkup_true
 
14.07.22
14:47
1) Если в запросе у тебя будет больше 1 записи - вернется только последняя, т.к. создаешь структуру в цикле. если уверена, что будет только 1 запись, то достаточно конструкции
Выборка = Результат.Выбрать();
Если выборка.следующий() тогда
//формируешь структуру
КонецЕсли;

//возвращаешь структуру на клиент

//В структуру параметры формы вставляешь возвращенную с сервера структуру с ключем "Отбор"

//Открываешь форму с параметрами
8 PuhUfa
 
14.07.22
14:47
(6) >>но мне нужно именно через запрос на сервере
почему?
и да, "через запрос на сервере" не отменяет правильное формирование параметров открытия формы
9 6awkup_true
 
14.07.22
14:50
(7) в твоем коде так же если не будет ни одной записи в результате запроса, упадет с ошибкой, что не знает, что такое возврат структура. ее лучше инициализировать до запроса пустыми значениями
10 Кослесникова Марина
 
14.07.22
14:52
(8) На учёбе высказали такое пожелание почему-то. И вот ещё вопрос про отбор : при отладке срабатывает правильно только 1 раз, потом если открываю регистр из другой номенклатуры, выводится список всё равно со старой номенклатурой, почему так?
11 6awkup_true
 
14.07.22
14:55
(10) потому что форму надо переоткрыть или обновить.
Если форма была уже открыта - в ней сохраняются старые параметры. закрываешь форму регистра, открываешь через новую номенклатуру и все должно сработать.

Если нужно, чтобы обновлялось, то есть пара решений(обновлять после оповещения, обновление при активизации формы, поиск открытой формы и обновление), но раз это учебное задание, то и заморачиваться не стоит
12 6awkup_true
 
14.07.22
15:03
&НаСервере
Функция ОткрытьЦеныНаСервере()
    
    Структура = Новый Структура("Номенклатура, Цена", Справочники.Номенклатура.ПустаяСсылка, 0);
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Номенклатура", ?(ЭтотОбъект.Объект.Ссылка.Пустая(), Справочники.Номенклатура.ПустаяСсылка, ЭтотОбъект.Объект.Ссылка);
    Запрос.Текст = "ВЫБРАТЬ
                   |    ЦеныПродажи.Номенклатура КАК Номенклатура,
                   |    ЦеныПродажи.Цена КАК Цена
                   |ИЗ
                   |    РегистрСведений.ЦеныПродажи КАК ЦеныПродажи
                   |ГДЕ
                   |    ЦеныПродажи.Номенклатура = &Номенклатура";
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() тогда
        Структура.Номенклатура = Выборка.Номенклатура;
        Структура.Цена = Выборка.Цена;
    КонецЕсли;
    
    Возврат Структура;
    
КонецФункции

&НаКлиенте
Процедура ОткрытьЦены(Команда)
    
    Параметры  = Новый Структура("Отбор", ОткрытьЦеныНаСервере());
    ОткрытьФорму("РегистрСведений.ЦеныПродажи.ФормаСписка", Параметры);

КонецПроцедуры
13 Кослесникова Марина
 
14.07.22
15:04
(11) так вот именно в этом и проблема, закрывала список регистра, закрывала номенклатуру, открывала заново, открывала просто регистр из главного меню, и всегда выводится результат первого отбора
14 6awkup_true
 
14.07.22
15:06
(12) ступил. проверку убрать при установке параметра запроса, добавить перед запросом. если ссылка.пустая() тогда возврат структура
15 Мимохожий Однако
 
14.07.22
15:11
(10) Уже ответили: Неправильно формируешь параметры формы списка перед открытием
16 Мультук
 
гуру
14.07.22
15:25
(12)

&НаСервере
Функция ОткрытьЦеныНаСервере()


&НаСервереБезКонтекста
Функция ОткрытьЦеныНаСервере(всякое)
17 6awkup_true
 
14.07.22
15:29
(16) задача при ближайшем рассмотрении вообще не имеет смысла. лезем в регистр, чтобы найти 1 запись, вернуть эту запись на клиент и открыть форму списка того же регистра с отбором, чтобы увидеть эту запись.
Достаточно было при наличии ссылки на номенклатуру просто открыть форму списка без прыганья на сервер
18 Кослесникова Марина
 
14.07.22
15:33
(17) во всяком случае всё получилось, спасибо )
19 rudnitskij
 
14.07.22
20:31
(0) а) "ЭтотОбъект.Объект.Ссылка" - что за странная конструкция? Объект.Ссылка достаточно
б) Разве можно при открытии формы списка регистра накладывать отбор по измерениям? Уберите цену из структуры
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.