Имя: Пароль:
1C
1С v8
Не доступен метод Добавить()
0 dart909
 
13.07.15
09:22
Добрый день, есть столкнулся с такой проблемой. Есть справочник Сотрудники. Есть форма списка, на форме создал реквизит МойОтбор.
Создал событие :
&НаКлиенте
Процедура МойОтборНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
     Список = Новый СписокЗначений();
     Список.Добавить("Принят");
     Список.Добавить("Больничный");
     Список.Добавить("Уволен");

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

Возникает ошибка метод Добавить() не обнаружен, как решить проблему?
1 Lexey_
 
13.07.15
09:24
(0) Список это основной реквизит формы, назови переменную по-другому
2 FIXXXL
 
13.07.15
09:25
() у списокЗначений убери
3 dart909
 
13.07.15
09:28
(1) Сделал ошибка исчезла, но список пуст.
4 Остап Сулейманович
 
13.07.15
09:31
(3) Внимательно... до просветления... читать (2).
Ошибка здесь : "Список = Новый СписокЗначений();"
5 dart909
 
13.07.15
09:38
Спасибо решил проблему.
6 dart909
 
13.07.15
09:53
(4) Можно еще вопрос а как сравнивать значение списка в условном операторе. Просто если писать так:

Если СписокЗнач.НайтиПоЗначению("Принят") Тогда
//
КонецЕсли

То возникает ошибка, что преобразование к типу Булево не возможно. Тогда как получить значение из списка?
7 Lexey_
 
13.07.15
09:58
(2), (4) а что не так-то?Использование скобок в конструкторе допускается же
(6) посмотреть в СП, что возвращает НайтиПоЗначению()
8 dart909
 
13.07.15
10:00
(7) Возвращает значение Принят. Пометка Ложь
9 dart909
 
13.07.15
10:00
(7) А понял сек
10 SeraFim
 
13.07.15
10:07
Вангую, что следующим вопросом будет:
Код правильный, но отбор не работает! Почему? И ответом будет, что в "Принят", "Больничный", "Уволен" - это строки, а в форме справочника - перечисление
11 dart909
 
13.07.15
10:08
(10) ТекОтбор = Список.Отбор.Элементы;
     ТекОтбор.Очистить();
     УсловиеОтбора = ТекОтбор.Добавить(тип("ЭлементОтбораКомпоновкиДанных"));
     УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Статус");
     УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
     УсловиеОтбора.ПравоеЗначение = перечисления.СтатусСотрудника.Принят;
12 SeraFim
 
13.07.15
10:09
(11) О, тогда прошу прощения)
13 dart909
 
13.07.15
10:13
(12) Может вы мне подскажете тогда)
&НаСервере
Процедура  СделатьОтбор()
    
     ТекОтбор = Список.Отбор.Элементы;
     ТекОтбор.Очистить();
     УсловиеОтбора = ТекОтбор.Добавить(тип("ЭлементОтбораКомпоновкиДанных"));
     УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Статус");
     УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
     УсловиеОтбора.ПравоеЗначение = перечисления.СтатусСотрудника.Принят;    
КонецПроцедуры    


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

Вот такой код, я не очень понимаю как в условном опереторе получить и сравнивать значение, так как при таком варианте ошибка  преобразование к типу Булево не возможно.
14 Lexey_
 
13.07.15
10:19
(13) в СП-то смотрел НайтиПоЗначению?там даже пример есть
15 dart909
 
13.07.15
10:26
Все сделал спасибо)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший