Имя: Пароль:
1C
1С v8
метод Найти()
0 Kyrtizanka
 
28.12.11
11:56
Поскажите пожалуйста! Мне нужно в табличной части при добавлении нового элемента , сделать проверку, а может был уже добавлен этот элемент . Форма у меня управляемая, хочу воспользоваться методом Найти(), но не пойму как им воспользоваться.
Например пользовалась методом НайтиСтроки, сработало след образом
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Товар",ВыбранноеЗначение);
НСтрока = Объект.Товар.НайтиСтроки(ПараметрыОтбора);

Но если пишу
Объект.Товар.Найти(ВыбранноеЗначение,"Товар");
программа ругается метод -Найти  не обнаружен
1 aleks-id
 
28.12.11
12:03
Доступность:

Сервер, толстый клиент, внешнее соединение
2 VasjaIvanov
 
28.12.11
12:03
&наКлиенте делаешь?
3 Kyrtizanka
 
28.12.11
12:05
да, на клиенте
4 Kyrtizanka
 
28.12.11
12:05
&насервере тоже делала
5 VasjaIvanov
 
28.12.11
12:07
товар  - табличная часть?
6 Kyrtizanka
 
28.12.11
12:07
просто я видимо его неправильно вызываю
Объект.Товар
7 andrewks
 
28.12.11
12:07
откуда на сервере клиентский контекст?

проверять надо именно по текущей (возможно, незаписанной) ТЧ, или по записанной?
8 Kyrtizanka
 
28.12.11
12:07
да табличная чатсь-Товар
9 NcSteel
 
28.12.11
12:09
Табличная часть.Найти (Tabular section.Find)
Табличная часть (Tabular section)
Найти (Find)
Синтаксис:

Найти(<Значение>, <Колонки>)
Параметры:

<Значение> (обязательный)

Тип: Произвольный. Искомое значение.
<Колонки> (необязательный)

Тип: Строка. Список имен колонок, в которых будет осуществляться поиск, разделенных запятыми.
Если параметр не указан, поиск осуществляется по всей табличной части.
Значение по умолчанию: Пустая строка
Возвращаемое значение:

Тип: Строка табличной части, Неопределено. Строка, которая содержит искомое значение. Если значение не найдено, то возвращается значение Неопределено.
Описание:

Осуществляет поиск значения в указанных колонках табличной части.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Метод эффективно использовать для поиска уникальных значений.
Пример:

НайденнаяСтрока = Состав.Найти(ТекТовар, "Номенклатура");
Если НайденнаяСтрока = Неопределено Тогда
   Текст = "ru = ""Товар не найден!"";"
    + " en = ""Article not found!""";
   Предупреждение(НСтр(Текст));
Иначе
   Количество = НайденнаяСтрока.Количество;
КонецЕсли;

Обращаю внимание на:

Сервер, толстый клиент, внешнее соединение.
10 Kyrtizanka
 
28.12.11
12:14
да я все так и делаю, просто если просто написать Состав.Найти(ТекТовар, "Номенклатура");
то программаругается Переменная не определена (Состав)
11 Mort
 
28.12.11
12:16
В какой момент собираешься проверять?
12 Kyrtizanka
 
28.12.11
12:18
при подборе нового элемента из справочника делаю Процедуру -ОбработкаВыбора, это стандартная процедура
13 Kyrtizanka
 
28.12.11
12:18
неужели никто не делал такого в управляемой форме
14 Kyrtizanka
 
28.12.11
12:19
метод -НайтиСтроки(ПараметрыОтбора);
работает, но это не то, я хочу воспользоваться именно стандартным методом Найти
15 VasjaIvanov
 
28.12.11
12:20
да я все так и делаю, просто если просто написать Товар.Найти(ТекТовар, "Номенклатура");
16 VasjaIvanov
 
28.12.11
12:20
не состав а товар
17 NcSteel
 
28.12.11
12:21
(14) нет на сервере такого метода. Почему СП не веришь ?
18 Kyrtizanka
 
28.12.11
12:22
товарищи, мне нужно сделать проверку в Табличной части , и все равно как называется Табличная часть
19 NcSteel
 
28.12.11
12:22
(17) точнее нет на клиенте такого метода .
20 Kyrtizanka
 
28.12.11
12:23
как воспользоваться методом Найти
21 VasjaIvanov
 
28.12.11
12:23
у тебя то она называется товар?
22 NcSteel
 
28.12.11
12:23
(20) прыгнуть на сервер и там найти.
23 Kyrtizanka
 
28.12.11
12:23
у меня этот метод не работает Ни на сервере, на на клиенте
24 NcSteel
 
28.12.11
12:24
на сервере посмотреть ТипЗНЧ(Объект[ИмяТабличнойЧасти])
25 Kyrtizanka
 
28.12.11
12:25
может мне нужно Табличную Часть в виде ТЗ передать с клиента на сервер, я просто уже рахнве варианты перебираю, пока только методом перебора в управляемом режиме
26 Mort
 
28.12.11
12:26
А не проще проверить дубли в обработке проверки заполнения?
27 NcSteel
 
28.12.11
12:26
(25) Ответить на вопрос сложно ?
28 VasjaIvanov
 
28.12.11
12:32
(25)надо
29 Kyrtizanka
 
28.12.11
12:34
)) что-то не понимаю ваши ответы или это вопросы)), неужели никто не делал такого, чтобы напримере показать что да как
30 VasjaIvanov
 
28.12.11
12:36
(29) а в конце ты что хочешь сообщение что товар уже такой есть?
31 Kyrtizanka
 
28.12.11
12:36
да, именно так, сообщение об ошибке
32 Mort
 
28.12.11
12:37
(29) Потому что есть мало причин запрещать вводить строки с одинаковыми позициями в ТЧ. Вот никто и не заморачивается.
33 VasjaIvanov
 
28.12.11
12:38
жди тогда надо смоделировать твою ситацию))
34 Kyrtizanka
 
28.12.11
12:40
я очень жду)) реально обидно, что из-за такое кажущейся ерунды, застопорилось все
35 Mort
 
28.12.11
12:41
Если очень надо, пока лезете на сервер за методом найти, можно 10 раз пробежаться по ТЧ на клиенте туда и обратно.
36 Mort
 
28.12.11
12:45
А чем НайтиСтроки так не нравится? Это вопросы религии?
37 NcSteel
 
28.12.11
12:48
(36) даже в отладчик лень ей заходить , так что ...
38 Kyrtizanka
 
28.12.11
12:51
нет, просто возвращается массив, просто есть и тот  и другой метод
39 NcSteel
 
28.12.11
12:52
на сервере посмотреть ТипЗНЧ(Объект[ИмяТабличнойЧасти])

Что выдает ?
40 Kyrtizanka
 
28.12.11
12:52
мне в  отладчик заходить не лень, я всегда через отладчик проверку делаю, не надо умничать, перед тем как задать вопрос, я поискала в инете вопросы, синтаксис почитала, если такой умный, напиши что-нить умное
41 Mort
 
28.12.11
12:54
(38) Ну раз есть, значит используй.

- Товарищ, майор, мясо положено!
- Ну раз положено, значит ешь!
- Так ведь не положено!
- Ну не положено - не ешь...

(40) Ну тогда посмотри в отладчике какой тип у Объект.Товары и его смотри в СП, а не табличную часть.
42 Kyrtizanka
 
28.12.11
13:39
короче я сделала так
&НаКлиенте
Процедура1()
НСтрока = Поиск(ВыбранноеЗначение);
ТекущаяСтрока =  Элементы.Субдистрибьютор.ТекущаяСтрока;
   Если НСтрока = 0  Тогда
       
       ТекущаяСтрока.Товар = ВыбранноеЗначение;
       
   иначе
       
Сообщить("Товар: "+ ВыбранноеЗначение+ " уже есть в строке "+НСтрока, СтатусСообщения.Важное);
       СтандартнаяОбработка = Ложь;
       
   КонецЕсли;
   
КонецПроцедуры

&НаСервере
Функция Поиск(Значение)
    ТЗ = Объект.Товар.Выгрузить();

   Строка =  ТЗ.Найти(Значение,"Товар");
   Если Строка <> Неопределено тогда
       Повтор = Строка.НомерСтроки;
   иначе
       Повтор = 0;
   КонецЕсли;
   
   возврат Повтор;
   
КонецФункции

так работает, хотя некрасивый кусок
Если Строка <> Неопределено тогда
       Повтор = Строка.НомерСтроки;
   иначе
       Повтор = 0;
   КонецЕсли;
т.к ошибка возникала при передаче с сервера на клиент, но я думаю, что можно было
написать
Повтор = Объект.Товар.НайтиПоИдентификатору(Строка.НомерСтроки);

так же можно было на клиенте сразу написать
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Товар",ВыбранноеЗначение);
НСтрока = Объект.Товар.НайтиСтроки(ПараметрыОтбора);
43 Kyrtizanka
 
28.12.11
13:40
ТекущаяСтрока =  Элементы.Субдистрибьютор.ТекущаяСтрока;
опечатка) ТекущаяСтрока =  Элементы.Товар.ТекущаяСтрока;
44 NcSteel
 
28.12.11
13:42
(42) А кто то грил что "Найти" не работает. Эх эти женщины.
45 Kyrtizanka
 
28.12.11
13:44
так посмотрите где я найти использую, я специально выгрузку в таблицу делаю
46 Kyrtizanka
 
28.12.11
13:48
сейчас проверила
Повтор = Объект.Субдистрибьютор.НайтиПоИдентификатору(Строка.НомерСтроки);
при возврате такого значения из функции, которая на сервере в процедуру на клиенте, программа ругается, что типы при передаче не те, короче при варианте
Если Строка <> Неопределено тогда
       Повтор = Строка.НомерСтроки;
   иначе
       Повтор = 0;
   КонецЕсли;
останусь
47 NcSteel
 
28.12.11
13:51
(45) А надо было так:

ДокОбъект = ДанныеФормыВЗначение("Объект" , Тип("ДокументОбъект.МойДокументик"));

Работаем с ТЧ

возвращаем его только если что то изменили.
48 NcSteel
 
28.12.11
13:53
Так же важно что номер строки на УФ может отличаться от номера строки в ТЧ !!!

например:
Номер строки ТЧ = 1
Номер строки ТП = 2.

Такое возможно если было удаление строки , то новый идентификатор добавляется с +1 . Либо было перемещение строк.
49 NcSteel
 
28.12.11
13:54
(46) Согласно (48) ваш код БРЕД, в общем и моя ремарка в (47) не поможет .
50 vmv
 
28.12.11
14:00
чтобы воспользоваться методами поиска в ТабличнойЧасти объекта на клиенте необходимо из клиентской процедуры вызвать
серверную, Например Нашли(), где

1. ТЧЗначение = РеквизитФормыВЗначение(...)
2. ТЧЗначение.Найти(...)
3. Возврат Нашли;
51 Kyrtizanka
 
28.12.11
14:03
ТЧЗначение = РеквизитФормыВЗначение(...)
2. ТЧЗначение.Найти(...)
3. Возврат Нашли;

спасибо, сейчас и такой вариант попробую
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn