Имя: Пароль:
1C
 
СписокЗначений обрезает Наименования до 25 знаков?
0 AndreyFAN
 
25.03.09
22:44
СписокТовара = Новый СписокЗначений;
Заполняю его Наименованиями,
а при обращении к нему возвращается наименование укороченное до 25 символов...
Так должно быть?
1 dimoff
 
25.03.09
22:45
Не должно быть, код покаж.
2 AndreyFAN
 
25.03.09
22:48
Запрос=Новый Запрос;
   Запрос.Текст="ВЫБРАТЬ
   |    Товары.Наименование
   |ИЗ
   |    Справочник.Товары
   |ГДЕ
   |    Ссылка.ЭтоГруппа=Ложь
   |И
   |    Наименование ПОДОБНО &НайтиСтроку";
   Запрос.УстановитьПараметр("НайтиСтроку","%"+НайтиСтроку+"%");
   РезультатЗапроса=Запрос.Выполнить().Выбрать();
   СписокТовара = Новый СписокЗначений;
   Пока РезультатЗапроса.Следующий() Цикл
       СписокТовара.Добавить(РезультатЗапроса.Наименование);
   КонецЦикла;
   Если РезультатЗапроса.Количество()>0 тогда
       Если СписокТовара.ОтметитьЭлементы("Выберите товар.") Тогда
           Смещение=0;
           для н=1 по РезультатЗапроса.Количество() Цикл
               Если НЕ СписокТовара[н-смещение-1].Пометка Тогда
                   СписокТовара.Удалить(н-смещение-1);
                   Смещение = Смещение+1;
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
   Иначе
       Предупреждение("Товар не найден.",60);    
   КонецЕсли;
       
   Если СписокТовара.Количество()>0 тогда
       Если СписокТовара.Количество()>1 тогда
           Предупреждение("Выберите один товар.",60);
       Иначе
           Форма=Справочники.Товары.ПолучитьФорму("ФормаВыбора");
           Форма.ПараметрТекущаяСтрока = Справочники.Товары.НайтиПоНаименованию(СписокТовара);
           Форма.Открыть();            
       КонецЕсли;
   Иначе
       Предупреждение("Вы не выбрали товар.",60);
   КонецЕсли;    

Код находит Наименование в Справочнике, по части строки в Наименовании и открывает Справочник на искомом Наименовании.
НО! Отлавливает только короткие Наименования, длиннее 25 символов находит но на нём не открывает.
3 dimoff
 
25.03.09
22:50
Грандиозно, это что такое?

Форма.ПараметрТекущаяСтрока = Справочники.Товары.НайтиПоНаименованию(СписокТовара);
4 AndreyFAN
 
25.03.09
22:51
Это передаётся параметр перед открытием формы, с Наименованием, которое будет Текущим
5 dimoff
 
25.03.09
22:52
Это представление списка значений 25 символов, посему твой код по недоразумению изредка срабатывает
6 dimoff
 
25.03.09
22:52
(4) Я имею ввиду что за параметр в НайтиПоНаименованию( ты передаешь
7 AndreyFAN
 
25.03.09
22:56
В запросе находятся все наименования, которые содержат искомую строку,
все найденные выгружаются в СписокЗначений "СписокТовара",
Потом в форме выбора юзер ставит галочку на товаре который его интересует,
При нажатии ОК в форме удаляются лишние, где галочка была не выставлена,
Поэтому в СписокТовара остаётся один элемент
Он и передаётся в качестве параметра в
Форма.ПараметрТекущаяСтрока =Справочники.Товары.НайтиПоНаименованию(СписокТовара);
8 dimoff
 
25.03.09
22:59
(7) Зачем ты мне пересказываешь содержание своего кода? Я итак вижу.
НайтиПоНаименованию предполагает что ту да будет передана строка. СписокТовара - это список значений, а не строка. Просто он имеет представление, которое ограничено 25 знаками и перечисляет находящиеся внутри элементы. Чтобы получить содержащийся в списке элемент необходимо к нему обратиться СписокТоваров[0].Значение
9 dimoff
 
25.03.09
23:02
И не очень понятно зачем удалять не помеченные строки, если проще сосчитать помеченные.
10 AndreyFAN
 
25.03.09
23:03
Да. Работает. Спасибо!!!
PS
   Запрос.Текст="ВЫБРАТЬ
   |    Товары.Наименование
Тут ошибка - без слова Товары
11 dimoff
 
25.03.09
23:04
А ещё умнее сразу из запроса получать ссылку, а не наименование. А если уж совсем умно, то действовать можно через таблицу значений и метод ВыбратьСтроку(), чтобы потом количество выбранных элементов не подсчитывать.
12 AndreyFAN
 
25.03.09
23:07
(11) Оператор может поставить более одной галочки. Какую ВыбратьСтроку?

(11) Спасибо. Постараюсь разобраться
13 dimoff
 
25.03.09
23:09
То есть в итоге все это безобразие должно выглядеть так

Запрос=Новый Запрос;
   Запрос.Текст="ВЫБРАТЬ
   |    Товары.Ссылка КАК Товар
   |ИЗ
   |    Справочник.Товары
   |ГДЕ
   |    Ссылка.ЭтоГруппа=Ложь
   |И
   |    Наименование ПОДОБНО &НайтиСтроку";
   
   Запрос.УстановитьПараметр("НайтиСтроку","%"+НайтиСтроку+"%");
   ТаблицаТоваров = Запрос.Выполнить().Выгрузить();
   
   Если ТаблицаТоваров.Количество() = 0 Тогда
       Предупреждение("Товар не найден.",60);
   Иначе
       Стр = ТаблицаТоваров.ВыбратьСтроку();
       Если Стр <> Неопределено Тогда
           Форма=Справочники.Товары.ПолучитьФорму("ФормаВыбора");
           Форма.ПараметрТекущаяСтрока = Стр.Товар;
           Форма.Открыть();            
       КонецЕсли;
   КонецЕсли;
14 AndreyFAN
 
25.03.09
23:12
Да, работает
только я добавил ещё КАК Товары :-)
15 dimoff
 
25.03.09
23:13
Самостоятельность это хорошо )
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший