Имя: Пароль:
 
1C
1С v8
Результат "Обработки" - ошибка
0 Sympak
 
14.10.21
12:37
Добрый день.
1С:Предприятие 8.2
Создана обработка для формирования по трем реквизитам результат поиска в справочнике "Контрагенты".
Установлен переключатель с пунктами "Есть", "Нет", "Весь список" (при выборе переключателя и нажатии кнопки "Сформировать", должен смотря на переключатель сформироваться результат. В первый переключатель где Есть номера, Второй переключатель где нет номеров и третий где они смешаны.
Сейчас при выборе первого и второго переключателя выдается результат одинаковый. Третий переключатель выдает ошибку:
Обработка.ПоискНомер.Форма.ФормаПоиск(7)}: Преобразование значения к типу Булево не может быть выполнено
    Если НЕ ЭлементыФормы.Отбор.Значение Тогда        // НЕ ЭлементыФормы.Отбор.Значение   ВыбиратьТип




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

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

КонецПроцедуры

Процедура ПриОткрытии()
    ЭлементыФормы.Отбор.СписокВыбора.Добавить(Истина, "Есть");
    ЭлементыФормы.Отбор.СписокВыбора.Добавить(Ложь, "Нет");
    ЭлементыФормы.Отбор.СписокВыбора.Добавить(Неопределено, "Не имеет значения");
КонецПроцедуры
1 acht
 
14.10.21
12:49
Хвастаешся?
2 Малыш Джон
 
14.10.21
13:02
(0) Ошибка "Преобразование значения к типу Булево не может быть выполнено" означает, что то выражение, к которому она относится, используется как булево, но на самом деле оно не булево, а надо чтоб там было булево.
3 Sympak
 
14.10.21
13:18
Малыш Джон
Убрал третье значение. Формирование все равно идет общим списком не разделяясь на с номером и без номера.

Нужно прописать:
Процедура ПриОткрытии()
    ЭлементыФормы.Отбор.СписокВыбора.Добавить(Истина, "Есть");
    ЭлементыФормы.Отбор.СписокВыбора.Добавить(Ложь, "Нет");
    ЭлементыФормы.Отбор.СписокВыбора.Добавить(Неопределено, "Не имеет значения");
КонецПроцедуры

К
Процедура ОсновныеДействияФормыДействие(Выбрать)
Но у меня не хватает опыта и знаний, чтобы это сделать.
4 youalex
 
14.10.21
13:22
>ЭлементыФормы.Отбор.Значение
Не надо так писать, обращайся к реквизиту формы(объекта), тому что у тебя в ПутьДанных элемента прописано.
5 Малыш Джон
 
14.10.21
13:25
(3) я надеюсь, это всё задание к какой-нибудь курсовой или зачету?
6 Sympak
 
14.10.21
13:27
Малыш Джон
Задание на курсах по обучению программированию
7 Sympak
 
14.10.21
13:28
youalex

А подробней можно
8 youalex
 
14.10.21
13:42
(7) что у тебя стоит в свойстве "Данные" у ЭлементыФормы.Отбор?
9 Малыш Джон
 
14.10.21
13:42
(7) Судя по всему, Отбор - это реквизит формы.

Если Отбор = Истина Тогда
  //вариант 1
ИначеЕсли Отбор = Ложь Тогда
  //вариант2
Иначе
  //вариант 3
КонецЕсли;
10 Малыш Джон
 
14.10.21
13:43
Хотя конечно лучше переименовать его, потому что "Отбор" много где встречается.
11 Sympak
 
14.10.21
13:48
youalex
Данные:
Реквизит: Отбор переименовал теперь отбор ОтборПо;
ТабличыеЧасти: РезультатПоиска - Номер, Адрес, ФИО
12 youalex
 
14.10.21
13:53
(11) Тип у него посмотри какой, на закладке Реквизиты
13 Sympak
 
14.10.21
13:56
youalex
Произволильный
14 Kassern
 
14.10.21
14:02
(0) какая каша в коде...
Сначала по условию какие то правды заполняются, которые нигде потом не используются.
У тебя просто по кнопке заполняется РезультатПоиска по последнему запросу. Где у тебя отборы, поиск в этой таблице в коде?
15 Kassern
 
14.10.21
14:04
(14) как я вижу этот топик:
Привет, написал программу для полнотекстового поиска в данной таблице, но почему то не работает. Вот код:
&НаКлиенте
Процедура Найти(Команда)
    Сообщить("Hello world!");
КонецПроцедуры
16 Sympak
 
14.10.21
14:05
Kassern
Где у тебя отборы, поиск в этой таблице в коде?
Можно подробней, пожалуйста
17 Kassern
 
14.10.21
14:09
(16) вы пишите в топике "Создана обработка для формирования по трем реквизитам результат поиска в справочнике "Контрагенты". " так же пишите, что содали какой то переключатель.
А по факту у вас в коде процедура с запросом, где вы заполняете ТЗ "РезультатПоиска " и заполняете при открытии Список выбора для реквизита "Отбор". Где у вас сам отбор в коде происходит?
18 youalex
 
14.10.21
14:19
(6) вообще что это за курсы на обычных формах? Старые какие-то?
19 Sympak
 
14.10.21
14:20
Kassern
Если вы поняли, в чем заключается моя ошибка, можете помочь ее решить?
20 Kassern
 
14.10.21
14:30
(19) Если вам надо заново заполнить текущую таблицу в соответствии с отборами, то измените ваш запрос и укажите в нем необходимые отборы. Если же вам надо отобрать строки в текущем списке, тогда, что то в такое для списка РезультатПоиска с отбором по полю "Номер".
РезультатПоиска.Отбор.Номер.Использование = Истина;
РезультатПоиска.Отбор.Номер.Значение = НужныйНомер;
П.С. давно с обычными формами не работал, может там как то иначе это делается, используйте динамические списки, там все просто и удобно.
21 Sympak
 
14.10.21
14:37
youalex
Отдал товарищ видео курсы по которым начинал заниматься. Там видео и текстовые задания к ним
22 Sympak
 
14.10.21
14:50
Kassern
Выгрузка = Запрос.Выполнить().Выгрузить();
РезультатПоиска.Отбор.Номер.Использование = Истина;

Не работет
23 acht
 
14.10.21
15:19
Что по этому поводу говорится непосредсвенно в курсах?
24 серый КТУЛХУ
 
14.10.21
16:48
какого типа реквизит "Номер" справочника "Контрагенты"?
25 серый КТУЛХУ
 
14.10.21
17:32
// ну, допустим, Номер это число (и по Отбор = Истина / Ложь / Неопределено):
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ Контрагенты.Номер, Контрагенты.Адрес, Контрагенты.ФИО
|ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ НЕ Контрагенты.ЭтоГруппа УПОРЯДОЧИТЬ ПО Номер";
Если Отбор = Истина Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ НЕ Контрагенты.ЭтоГруппа", "ГДЕ НЕ Контрагенты.ЭтоГруппа И Контрагенты.Номер <> 0");
ИначеЕсли Отбор = Ложь Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "ГДЕ НЕ Контрагенты.ЭтоГруппа", "ГДЕ НЕ Контрагенты.ЭтоГруппа И Контрагенты.Номер = 0") КонецЕсли;
РезультатПоиска.Загрузить(Запрос.Выполнить().Выгрузить());
26 Kassern
 
14.10.21
17:36
(25) как это поможет ТС хоть чему то научиться?
27 Малыш Джон
 
15.10.21
08:55
(26) Если ТС тупо скопирует и типо он всё сделал - тогда никак. Если скопирует, а потом разберет на операторы и методы, по каждому изучит СП, и потом попробует самостоятельно всё собрать обратно, тогда это вполне хороший урок.
AdBlock убивает бесплатный контент. 1Сергей