Имя: Пароль:
1C
1С v8
Поиск Элемента в 8.3
0 alexsandrinia
 
27.05.15
12:05
Как можно найти элемент по определённому реквизиту, например, идентификатору и произвести операции с найденным элементом (например, поменять родителя, полное наименование и т.п.)?
1 degot
 
27.05.15
12:08
запрос
2 Heckfy
 
27.05.15
12:08
о_О
НайтиПоРеквизиту
НайтиПоНаименованию
Запросом

Странный вопрос......
3 alexsandrinia
 
27.05.15
12:09
(2) я так и сделал, как наименование оттуда выцепить?
4 Heckfy
 
27.05.15
12:10
(3) В смысле?
По ссылке и выцепляй.
5 alexsandrinia
 
27.05.15
12:11
(4)ааа...понял
6 alexsandrinia
 
27.05.15
12:23
вытащил наименование, а как теперь у элемента с этим наименованием поменять родителя?
7 degot
 
27.05.15
12:28
семерочник что ли?
8 alexsandrinia
 
27.05.15
12:29
8.3
9 ДенисЧ
 
27.05.15
12:32
объект = элемент.ПолучитьОбъект();
объект.родитель = НовыйРодитель;
Объект.записать()
10 Timon1405
 
27.05.15
12:41
(9) таки лучше не называть переменную "Объект"
11 alexsandrinia
 
27.05.15
12:48
(9) Элемент - что собой подразумевает?
12 Chameleon1980
 
27.05.15
12:49
(11) в (10) ключевое в том, что ПолучитьОбъект нужно
13 Chameleon1980
 
27.05.15
12:49
(12) к (10)
14 Chameleon1980
 
27.05.15
12:50
(11) а книги, примеры почитать?
15 alexsandrinia
 
27.05.15
12:55
(14)
я имею ввиду в данном контексте
16 Cyberhawk
 
27.05.15
12:55
В (9) "Элемент - что собой подразумевает?"
В (0) "Как можно найти элемент..."
17 Cyberhawk
 
27.05.15
12:56
(15) в СП поищи метод ПолучитьОбъект() и поймешь, для каких объектов он применяется и что такое "элемент"
18 alexsandrinia
 
27.05.15
12:59
(9), (15) выдаёт ошибку:

Значение не является значением объектного типа (ПолучитьОбъект)
        НашЭлемент = Элемент.ПолучитьОбъект();
19 Chameleon1980
 
27.05.15
13:02
весь код уже показывай
в частности интересует как у тебя образуется "Элемент"
что там в этой переменной
ну и отладчик очень часто помогает
20 alexsandrinia
 
27.05.15
13:04
&НаСервере
Функция ПоискПоИдент(РегИдент)
    
    //ищем элемент по Идентификатору
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ
                   |    Номенклатура.Идентификатор,
                   |    Номенклатура.Наименование
                   |ИЗ
                   |    Справочник.Номенклатура КАК Номенклатура
                   |ГДЕ
                   |    Номенклатура.Идентификатор ПОДОБНО &Идентификатор";
    Запрос.УстановитьПараметр("Идентификатор",РегИдент);
    Результат = Запрос.Выполнить();
    
    Если Результат.Пустой() Тогда
        //Не нашли по Идентификатору
        РезПоискПоИдент = ЛОЖЬ;
    Иначе
        Выборка = Результат.Выбрать();
        Элемент = Выборка.Наименование;

        НашЭлемент = Элемент.ПолучитьОбъект();
    РезПоискПоИдент = Истина;
    КонецЕсли;
    Возврат РезПоискПоИдент;
КонецФункции

отладчиком смотрю тоже
21 Fish
 
27.05.15
13:11
(20) " Элемент = Выборка.Наименование;
        НашЭлемент = Элемент.ПолучитьОбъект();

Это просто гениально. Мне интересно, ты что-нибудь слышал про типы данных?
22 alexsandrinia
 
27.05.15
13:14
(21) внимательно слушаю
23 alexsandrinia
 
27.05.15
13:14
(21) слева - строка, справа - объект, несходняк, знаю, вот поэтому и прошу помочь
24 Fish
 
27.05.15
13:16
(22) Тебе уже тысячу раз предлагали почитать книжки, примеры. Ты хоть одну прочитал?
25 Heckfy
 
27.05.15
13:17
Результат = Запрос.Выполнить().Выбрать();
Если Не Результат.Следующий() Тогда
//Не нашли по Идентификатору

        РезПоискПоИдент = ЛОЖЬ;
Иначе
Выборка=РезультатЗапроса.Номенклатура.Ссылка;
Элемент = Выборка.Наименование;
НашЭлемент = Выборка.ПолучитьОбъект();
РезПоискПоИдент = Истина;
    КонецЕсли;

Как то так.....
Конфигуратора под рукой нету, где то мог ошибиться....
26 Chameleon1980
 
27.05.15
13:18
в запросе пол строки поменять
27 Chameleon1980
 
27.05.15
13:19
(25)

такого не описано в запросе:

Выборка=РезультатЗапроса.Номенклатура.Ссылка;
28 Drac0
 
27.05.15
13:20
(24) зачем? Миста же есть. Тут сотни желающих учить с 0.

(22) наглеешь.
29 Heckfy
 
27.05.15
13:20
(27) Ну да. РезультатЗапроса заменить на Результат. :)
30 Fish
 
27.05.15
13:22
(29) Не только. У него в запросе нет поля "Номенклатура" :))
31 Chameleon1980
 
27.05.15
13:23
(29) и не только

(30) во-во
32 Heckfy
 
27.05.15
13:23
Пляяаааа. Ну давайте я за ТС все сделаю!!!
                   |    Номенклатура.Ссылка,

                   |    Номенклатура.Идентификатор,
                   |    Номенклатура.Наименование
33 Kvant1C
 
27.05.15
13:23
(10) Можно как угодно называть, главное не забывать  объявлять эту переменную.
34 Heckfy
 
27.05.15
13:24
(33) С Объектом на внешних обработка затык может быть. :)
35 Chameleon1980
 
27.05.15
13:29
(32) тут, похоже, нужно человеку дать понять, что за него не собираются делать. А я так понял что чел не попытавшись даже примеры посмотреть/поискать полез на форум.
36 Kvant1C
 
27.05.15
13:31
(34) Даже если я напишу Перем Объект?
Открой секрет, в чем там засада?
37 Heckfy
 
27.05.15
13:34
(36) По моему да. По моему в 8.2 Объект зарезервирован и возвращает сам объект. Т. е. внешнюю обработку. Если не ошибаюсь, в 8.3 и в УФ заменили на ЭтотОбъект.
38 Fish
 
27.05.15
13:35
(36) На УФ основной реквизит формы по умолчанию называется Объект.
39 Kvant1C
 
27.05.15
13:39
(38) Ну это да, но я же пишу Перем Объект, то есть если я дальше буду обращаться просто к Объект-у, компилятор должен понимать, что я обращаюсь к объявленной переменной, а не к реквизиту формы.
40 Timon1405
 
27.05.15
13:43
(39) А как потом в коде к реквизиту обработки объект.контрагент обращаться будете?
41 Fish
 
27.05.15
13:44
(39) А вот это вопрос, что он там поймёт и везде ли это сработает. Лично мне проще не называть таким именем, так же, как и не называть переменную "Строка", чтобы не получить где-нибудь неожиданного результата. У меня это давняя привычка, ещё с тех времён, как я пытался скомпилировать программу на Си, сдуру назвав её prn. Было весело :))
42 Kvant1C
 
27.05.15
13:50
(41) На счет имен переменных полностью согласен, лучше перестраховаться.
Ну надо же какое совпадение! Про prn и кстати тоже на Си мне мой первый руководитель рассказывал :)
43 Kvant1C
 
27.05.15
13:54
(40) К реквизиту самой обработки через ЭтотОбъект, к реквизиту формы через ЭтаФорма.
Как было на 8.2 сказать не могу, ее под рукой нет, а на 8.3 именно так работает.
44 Desna
 
27.05.15
13:56
(0)"Как можно найти элемент по определённому реквизиту, например, идентификатору и"

та по реквизиту или идентификатору?
45 Desna
 
27.05.15
13:58
тута вроде все как вАсмЯмярошники выходцы с сямеркы, а никто так и не телепатировал что ему надо, вроде как сямярошниками и не были
46 Desna
 
27.05.15
13:59
а как так может быть что у разных типов могут быть одинаковые гуиды?
47 Drac0
 
27.05.15
14:07
(43) ЭтаФорма - уже рудимент. Актуален только ЭтотОбъект и зависит он от контекста: в модуле объекта - это сам объект, в модуле формы - это форма.
48 Timon1405
 
27.05.15
14:07
(43) садись, два.
Во внешней обработке
ТипЗнч(Объект) - ДанныеФормыСтруктура
ТипЗнч(ЭтотОбъект) - УправляемаФорма
49 Drac0
 
27.05.15
14:09
(48) В модуле формы внешней обработки. В модуле объекта - это ВнешняяОбработкаОбъект
50 Kvant1C
 
27.05.15
14:31
(48) Сам то понял что сказал?
Попробуй все это модуле объекта сделать.
51 Kvant1C
 
27.05.15
14:49
Если сделать вот так:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Перем Объект;
    ПриОткрытииНаСервере();
КонецПроцедуры

то переменная Объект будет неопределена - это конечно засада, но через ЭтотОбъект все равно можно добраться до Объект-а, который содержит ДанныеФормыСтруктура
52 Heckfy
 
27.05.15
14:55
(51) Говорят, гланды через ж.пу тоже можно удалять.
53 Kvant1C
 
27.05.15
14:57
(52) А при чем тут гланды?
54 Chameleon1980
 
27.05.15
15:16
(53) типа тонкий намек такой
нахфига все усложнять на началах
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший