Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 июн 2025, 13:56

сохранение настроек отбора скд

Автор sali, 19 июн 2025, 07:27

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

antoneus

Отладчик изобрели трусы? Что возвращает функция ПолучитьНастройкиОтбора, если настройка не найдена? В ней этот случай не обрабатывается, она не возвращает ничего, то есть неопределено. В вызывающей процедуре - опять же, никакой проверки, мы железно уверены, что нам прям вернулось хранилище.
А зачем в запросе лишнее левое соединение? Почему так не сделать?

"ВЫБРАТЬ
    |    СохраненныеНастройкиОтборов.СохраненнаяНастройка КАК СохраненнаяНастройка
    |ИЗ
    |        РегистрСведений.СохраненныеНастройкиОтборов КАК СохраненныеНастройкиОтборов
    |ГДЕ
    |    СохраненныеНастройкиОтборов.ТорговоеОборудование = &Ссылка";

sali

Цитата: antoneus от 19 июн 2025, 14:13А зачем в запросе лишнее левое соединение? Почему так не сделать?
со справочником. не знаю даже просто делали так. это ж не огромная ошибка

sali

ну один хрен вылезает ошибка
Ошибка при вызове метода контекста (ЗагрузитьНастройки)
{ЭДОНоменклатура Обработка.ЭДОН_РабочееМесто.Форма.Форма.Форма(256)}: КомпоновщикНастроек.ЗагрузитьНастройки(адресНастроек);
по причине:
Несоответствие типов (параметр номер '1')
Несоответствие типов (параметр номер '1')

на строке КомпоновщикНастроек.ЗагрузитьНастройки(адресНастроек);

antoneus


sali

да ничего собственно
&НаКлиенте
Процедура СохранитьНастройкиОтбора(Команда)
СохранитьНастройкиОтбораНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьСкрытьОтбор(Команда)

ВидимостьОтбора = НЕ ВидимостьОтбора;
УстановитьВидимостьОтбора(Элементы, ВидимостьОтбора); 
Если ВидимостьОтбора = Истина Тогда
адресНастроек = ПолучитьНастройкиОтбора();
КомпоновщикНастроек.ЗагрузитьНастройки(адресНастроек);
КонецЕсли;
КонецПроцедуры


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

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

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл   
Если ВыборкаДетальныеЗаписи.СохраненнаяНастройка <> Null Тогда
Возврат ВыборкаДетальныеЗаписи.СохраненнаяНастройка;
КонецЕсли;
КонецЦикла;
КонецФункции


&НаСервере
Функция ПолучитьИмяМакета()
ИмяМакета = "";

Если Режим = "Номенклатура" Тогда
ИмяМакета = "ШаблонОтбораНоменклатура";
ИначеЕсли Режим = "Цены" Тогда
Если ЭтоБП Тогда
ИмяМакета = "ШаблонОтбораЦеныБП";
ИначеЕсли ЭтоУНФ Тогда
ИмяМакета = "ШаблонОтбораЦеныУНФ";
КонецЕсли;
ИначеЕсли Режим = "Остатки" Тогда
Если ЭтоБП Тогда
ИмяМакета = "ШаблонОтбораОстаткиБП";
ИначеЕсли ЭтоУНФ Тогда
ИмяМакета = "ШаблонОтбораОстаткиУНФ";
КонецЕсли;
ИначеЕсли Режим = "Контрагенты" Тогда
ИмяМакета = "ШаблонОтбораКонтрагенты";
ИначеЕсли Режим = "ДисконтныеКарты" Тогда
ИмяМакета = "ШаблонОтбораДисконтныеКарты";
ИначеЕсли Режим = "Скидки" Тогда
ИмяМакета = "ШаблонОтбораСкидки";
// *** 27.05.2025 Рядов Сергей  Аркад ***
// <<< Доработка для дисконтных карт
ИначеЕсли Режим = "ПодарочныеСертификаты" Тогда
ИмяМакета = "ШаблонПодарочныеСертификаты";
//Доработка для дисконтных карт >>
КонецЕсли;

Возврат ИмяМакета;
КонецФункции // ПолучитьИмяМакета()


&НаСервере
Процедура СохранитьНастройкиОтбораНаСервере() 
ИмяМакета = ПолучитьИмяМакета(); 

МенеджерЗаписи = РегистрыСведений.СохраненныеНастройкиОтборов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ТорговоеОборудование = ЭтотОбъект.ЭДОН_ТорговоеОборудование;   
МенеджерЗаписи.СохраненнаяНастройка = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки());
    МенеджерЗаписи.ИмяОбъекта = Обработки.ЭДОН_РабочееМесто.ПолучитьМакет(ИмяМакета);
МенеджерЗаписи.Записать();
КонецПроцедуры


antoneus

А почему результат должен был измениться?

sali

antoneus, а что исправить или вообще переписать? где косяк? в сохранении настроек? или получении сохраненных?

antoneus

&НаСервере
Процедура СохранитьНастройкиОтбораНаСервере() 
    ИмяМакета = ПолучитьИмяМакета(); 
    НастройкиОтбора = КомпоновщикНастроек.ПолучитьНастройки(); //настройки.отбор.элементы;

    МенеджерЗаписи = РегистрыСведений.СохраненныеНастройкиОтборов.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.ТорговоеОборудование = ЭтотОбъект.ЭДОН_ТорговоеОборудование;   
    МенеджерЗаписи.СохраненнаяНастройка = Новый ХранилищеЗначения(НастройкиОтбора);
    МенеджерЗаписи.ИмяОбъекта = ИмяМакета;
    МенеджерЗаписи.Записать();
КонецПроцедуры

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

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

antoneus

раньше времени отправилось

Если ВидимостьОтбора = Истина Тогда       
    адресНастроек = ПолучитьНастройкиОтбора();
    Если адресНастроек <> Неопределено ТОгда
        КомпоновщикНастроек.ЗагрузитьНастройки(адресНастроек.Получить());
    КонецЕсли;
КонецЕсли;

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

sali

круто. только зачем это? это пользователь даже изменить может. так как имя макета не будет совпадать с именем макета в конфигурации
у пользователя этот отбор и сохранение его настроек может называться "для торговых агентов", а в конфигураторе он имеет название "шаблон для номенклатуры" или "шаблон для скидки и наценки бп" , но спасибо за тык носом в миску
Цитата: antoneus от 19 июн 2025, 14:52|    И СохраненныеНастройкиОтборов.ИмяОбъекта = &ИмяОбъекта";

Теги:

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

Рейтинг@Mail.ru

Поиск