Имя: Пароль:
1C
1С v8
Как получить уже отсортированные данные номенклатуры???
0 toleranto
 
24.09.13
00:11
Пытаюсь сделать так - не выходит правильно :(

Процедура ТаблицаНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    СтрокаТЧ = ЭлементыФормы.Таблица.ТекущиеДанные;
        
    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);
    ФормаВыбора.ЗначениеОтбораСпискаНоменклатуры = СтрокаТЧ.Номенклатура;    
    ФормаВыбора.ЭлементыФормы.СправочникСписок.РодительВерхнегоУровня = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТЧ.Номенклатура);
    ФормаВыбора.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
    ФормаВыбора.ОткрытьМодально();    
КонецПроцедуры
1 Rie
 
24.09.13
00:15
(0) "Отсортированные" - это как?
2 toleranto
 
24.09.13
00:26
Может я некорректно вопрос задал...

Интересует, что бы были выведены данные номенклатур те, в которых присутствует СтрокаТЧ.Номенклатура...

Например в СтрокаТЧ.Номенклатура содержится 11111111

То хотелось бы после вызова формы в списке выбранных номенклатур видеть только те позиции, в которых есть 11111111
3 Euguln
 
24.09.13
00:27
(2) Запрос + список номенклатуры + отбор в списке
4 toleranto
 
24.09.13
00:34
(3) Спасибо конечно за информацию... но можно пример куда смотреть?

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

Так?
5 Rie
 
модератор
24.09.13
00:35
(4) Читать документацию по 1С. Вдумчиво. До полного осознания бредовости Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТЧ.Номенклатура)
6 toleranto
 
24.09.13
00:37
(5) Понял... Он вернет, только при точном совпадении :(

Как тогда правильно?
7 Rie
 
24.09.13
00:40
(6) Не поняли. Бредовость - в НайтиПоНаименованию :-)
Как правильно? Я не совсем понял, что Вам нужно. Но, полагаю, если почитаете насчёт ПОДОБНО в языке запросов - это Вам поможет.
8 toleranto
 
24.09.13
00:45
Rie - я не прошу написать... можно просто ссылку куда копать...
9 Rie
 
24.09.13
00:47
(7) Если я правильно понял Вашу проблему - то копайте в сторону оператора ПОДОБНО языка запросов.
10 Rie
 
24.09.13
00:48
+(9) Почитать о нём можете для начала во встроенной справке - этот оператор там довольно подробно описан.
11 Rie
 
24.09.13
00:51
Более подробно - тут сложно сказать, поскольку упирается в специфику Вашей задачи. Никому, кроме Вас (а возможно, что и Вам) неизвестно, по каким признакам выделяется ключевая подстрока в наименовании.
12 toleranto
 
24.09.13
00:53
(10) Да понял я что ДШЛУ

Запрос.Текст = "
        |ВЫБРАТЬ
        |    Наименование
        |ИЗ
        |    Справочник.Номенклатура
        |ГДЕ
        |    К чему обращаться, к какому полю? Справочник.Номенклатура.Наименование? ПОДОБНО &Параметр";

Ну не имел я дело с запросами в 1С... Я с 1С то имею дело лишь 3 день :(
13 toleranto
 
24.09.13
00:56
Запрос.Текст = "
        |ВЫБРАТЬ
        |    Наименование
        |ИЗ
        |    Справочник.Номенклатура КАК СпрНом
        |ГДЕ
        |    СпрНом.Наименование ПОДОБНО &Параметр";
Запрос.УстановитьПараметр("Параметр", СтрокаТЧ.Номенклатура);

Так?
14 Rie
 
24.09.13
00:57
(12) Скорее что-то вроде
Запрос.Текст =
"ВЫБРАТЬ
    спрНоменклатура.Ссылка
ИЗ
    Справочник.Номенклатура КАК спрНоменклатура
ГДЕ
    спрНоменклатура.Наименование ПОДОБНО ""%"+ЧтоВамТамНадоНайти+"%""";
15 toleranto
 
24.09.13
01:02
СтандартнаяОбработка = Ложь;
    СтрокаТЧ = ЭлементыФормы.Таблица.ТекущиеДанные;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    Наименование
        |ИЗ
        |    Справочник.Номенклатура КАК СпрНом
        |ГДЕ
        |    СпрНом.Наименование ПОДОБНО &Параметр";
    Запрос.УстановитьПараметр("Параметр", СтрокаТЧ.Номенклатура);
    Выборка = Запрос.Выполнить().Выбрать();
    Сообщить(Выборка.Количество()); //Тут сообщил правильное количество...
Куда теперь эту выборку пристроить?    
        
    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);
16 toleranto
 
24.09.13
01:09
Процедура ТаблицаНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    СтрокаТЧ = ЭлементыФормы.Таблица.ТекущиеДанные;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    Наименование
        |ИЗ
        |    Справочник.Номенклатура КАК СпрНом
        |ГДЕ
        |    СпрНом.Наименование ПОДОБНО &Параметр";
    Запрос.УстановитьПараметр("Параметр", СтрокаТЧ.Номенклатура);
    Выборка = Запрос.Выполнить().Выбрать();
    Сообщить(Выборка.Количество());
    
    СписокЭлементов = Новый СписокЗначений;
    Пока Выборка.Следующий() Цикл
        СписокЭлементов.Добавить(Выборка.Наименование);
    КонецЦикла;
    
    
        
    ФормаВыбора = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);
    ФормаВыбора.СправочникСписок.Отбор.Наименование.ВидСравнения = ВидСравнения.ВСписке;
    ФормаВыбора.СправочникСписок.Отбор.Наименование.Использование = Истина;    
    ФормаВыбора.СправочникСписок.Отбор.Наименование.Значение = СписокЭлементов;
    //ФормаВыбора.ЭлементыФормы.СправочникСписок.РодительВерхнегоУровня = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТЧ.Номенклатура);
    ФормаВыбора.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
    ФормаВыбора.ЗначениеОтбораСпискаНоменклатуры = СтрокаТЧ.Номенклатура;
    ФормаВыбора.ОткрытьМодально();

КонецПроцедуры
17 toleranto
 
24.09.13
01:10
Вроде так получилось :)

Rio - tnx
18 viktor_vv
 
24.09.13
01:13
Я так подозреваю, раз уж ты в запросе ссылки уже получишь

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

Хотя и твой вариант имеет право на жизнь.
19 toleranto
 
24.09.13
01:19
Вот только не совсем правильно работает :(

Если точное вхождение наименования - то возвращает правильно

если в СтрокаТЧ.Номенклатура содержится "1407"
А в номенклатуре позиция звучит "Пара петель 1407i_99"

ТО ни чего не возвращает... :(

Где косяк?
20 toleranto
 
24.09.13
01:21
А кстати - в 1C при запросе символ заменяет % или *?
21 viktor_vv
 
24.09.13
01:23
Запрос.УстановитьПараметр("Параметр", "%"СтрокаТЧ.Номенклатура+"%");

или как в (14).
22 Rie
 
24.09.13
01:23
(18) Посмотри внимательно на значок "%".
Передавай не параметр, а обрамляй, как в (14).
23 viktor_vv
 
24.09.13
01:23
(21)* Запрос.УстановитьПараметр("Параметр", "%"+СтрокаТЧ.Номенклатура+"%");
24 toleranto
 
24.09.13
01:28
Спасибо... Все заработало...

Виктор - только в твоем случае работает неправильно :)

Rio и viktor_vv - Огромная благодарность :)
25 Rie
 
24.09.13
01:54
(24) "работает неправильно" - тут не viktor_vv виноват :-)
У меня есть подозрение, что Вы не понимаете разницу между ссылкой на элемент справочника и наименованием элемента справочника (такая ошибка часто встречается у новичков; ничего страшного, но от неё надо избавляться). Разберитесь с этим - и добавите себе большой плюс в карму :-)
26 toleranto
 
24.09.13
13:28
(25) Спасибо за наставление...
Просто я всегда (и сейчас тоже) занимался панорамированием в области далекой от 1С... И мне, если честно, немного сложно или непривычно оперировать данными да ещё и на русском языке... Так что мои извинения, если где косячу...
27 toleranto
 
24.09.13
13:29
Да и я понял -  в чем ошибка... Спасибо