Имя: Пароль:
1C
 
тема по СКД программная установка( на обычной форме) вида срав
,
0 GENN
 
15.03.16
16:38
есть отчёт на СКД
у него есть форма ОБЫЧНАЯ не управляемая
на форме 9 строк отбора
каждая строка имеет
слева флажок - использования
посередине - вид сравнения (ПолеВвода - тип Видысравнения)
справа - правое значение

ВОПРОС???? как при изменении в ПолеВвода равно не равно и т.д. сделать так чтобы в СКД в отборе ВидСравнения тоже изменялся????
Может кто из ЗНАТОКОВ подскажет
1 GENN
 
15.03.16
16:52
не просто это да
2 LordCMEPTb
 
15.03.16
16:57
Может, проще было на форму вынести табличное поле, которое связать с "КомпоновщикНастроек.Настройки.Отбор"?
3 GENN
 
15.03.16
17:04
(2) а как в табличном поле связать тот же вид сравнения с видом сравнения в том же компоновщике? по идее наверное тоже самое и получается
4 Nuobu
 
15.03.16
17:05
5 GENN
 
15.03.16
17:05
если табличное поле то какой тип значения?
6 GENN
 
15.03.16
17:06
(4)сейчас гляну ссылку
7 GENN
 
15.03.16
17:08
(4) я так и делаю как в ссылке только мне .Больше нужно менять при изменении на форме в полеввода на разные значения
8 GENN
 
15.03.16
17:09
у меня возникае ошибка несоответствие типов
9 Nuobu
 
15.03.16
17:11
(7) ТвойВидСравнения = ТекущиеДанные.ВидСравнения;
Если ТвойВидСравнения = ВидСравнения.Больше Тогда
Элементы [0].ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ИначеЕсли ТвойВидСравнения = ВидСравнения.Меньше Тогда
Элементы [0].ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
Иначе...
10 GENN
 
15.03.16
17:50
вообщем я делаю так

Функция ВидСравненияОтбор(ВидСравнения)
    
    Если ВидСравнения = "Равно" Тогда           
        ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ИначеЕсли ВидСравнения = "Не равно" Тогда        
        ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;    
    ИначеЕсли ВидСравнения = "Больше" Тогда        
        ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    ИначеЕсли ВидСравнения = "Больше или равно" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ИначеЕсли ВидСравнения = "Меньше" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
    ИначеЕсли ВидСравнения = "Меньше или равно" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;    
    ИначеЕсли ВидСравнения = "В группе" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
    ИначеЕсли ВидСравнения = "Не в группе" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;        
    ИначеЕсли ВидСравнения = "В списке" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;    
    ИначеЕсли ВидСравнения = "Не в списке" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке;
    ИначеЕсли ВидСравнения = "В группе из списка" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
    ИначеЕсли ВидСравнения = "Не в группе из списка" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии;              
    ИначеЕсли ВидСравнения = "Содержит" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит;    
    ИначеЕсли ВидСравнения = "Не содержит" Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
    Иначе
        // Не нашли соответствие - не применяем отбор
        //Отбор.Использование = Ложь;
        //Возврат Отбор.Использование = Ложь;
    КонецЕсли;
    
    //Отбор.Значение = ОтборКомпоновщика.ПравоеЗначение;
    Возврат ВидСравнения;
    
КонецФункции

Процедура ВидСравнения3ПриИзменении(Элемент)
        
    //ВидСравненияИмя = ВидСравнения3;
    Сообщить(ВидСравнения3);
    
    КомпоновщикНастроек.Настройки.Отбор.Элементы[2].ВидСравнения = ВидСравненияОтбор(ВидСравнения3);
    //КомпоновщикНастроек.Настройки.Отбор.Элементы[2].ВидСравнения = ВидСравненияКомпоновкиДанных.ЭлементыВидСравнения3;
КонецПроцедуры  

и ОШИБКА

{Отчет.ОстаткиТоваровПоМагазинам.Форма.ФормаОтчета.Форма(119)}: Ошибка при установке значения атрибута контекста (ВидСравнения)
    КомпоновщикНастроек.Настройки.Отбор.Элементы[2].ВидСравнения = ВидСравненияОтбор(ВидСравнения3);
по причине:
Несоответствие типов
11 EvgeniuXP
 
15.03.16
17:52
У тебя отбор вынесен на форму как пользовательские насипрйки или это отдельные не связанные элементы на форме? Если второе - то переноси в настройки вручную
12 Nuobu
 
15.03.16
17:57
(10) Если ВидСравнения = "Равно" Тогда          
        ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ИначеЕсли
...
Иначе
ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;//!!!!
КонецЕсли;
13 GENN
 
15.03.16
18:14
(12) я не совсем понял что имеется ввиду
14 GENN
 
15.03.16
18:15
(12)разные типы передаются и возвращаются из функции или что имелось ввиду
15 GENN
 
15.03.16
18:20
КомпоновщикНастроек.Настройки.Отбор.Элементы[2].ВидСравнения    -> это Тип = ВидСравненияКомпоновкиДанных

а
ВидСравненияОтбор(ВидСравнения3) -> это Тип = ВидСравнения

поэтому и возникает ошибка несоответствия типов
16 Nuobu
 
15.03.16
18:37
(15) У тебя вид сравнения возвращается правильный.
Но ты не учет, что передаешь не строку, а элемент типа "ВидСравнения", который, сравниваясь со строкой везде даёт Ложь.
И попадает в блок Иначе.
А в блоке Иначе нету кода.
Поэтому функция ВидСравненияОтбор() возвращает "Неопределено", которое 1С не может перевести во что-то более внятное, чем ошибку.
Сравнивал бы уже не с текстом, а так, как я тебе написал. Хоспади.
Научись пользоваться отладчиком.
17 LordCMEPTb
 
16.03.16
09:57
(3) На самом деле я предлагал у самого табличного поля формы установить в качестве данных "КомпоновщикНастроек.Настройки.Отбор". Для этого нужно создать еще один реквизит формы/объекта с типом "КомпоновщикНастроекКомпоновкиДанных", инициализировать его по схеме и загрузить настройки.
Если извращаться с табличным полем на обычной форме (хотя я смысла не вижу), то можно тип значения колонки с выбором вида сравнения указать "Произвольный", а уже в самой таблице подставлять данные из компоновщика. Без понятия, как оно будет работать в обычном приложении, но на мобильном такое прокатило.
18 mistеr
 
16.03.16
10:34
(16) У него не "Неопределено" возвращается, а то, что передано. Неопределено СКД бы переварила.

Использовать входные параметры функции для возврата резульата - плохой тон. Нужно завести отдельную переменную.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший