Имя: Пароль:
1C
1С v8
НайтиПоРеквизиту
0 polkin
 
28.02.15
09:47
Нужно НайтиПоРеквизиту справочник и открыть ФормуЭлемента
Выдает ошибку Переменная не определена (Справочники)
    ПараметрыФормы = <<?>>Справочники.ИМНоменклатура.НайтиПоРеквизиту("Код1С"); (Проверка: Тонкий клиент)





&НаКлиенте
Процедура Записать1()
    Строка =Элементы.ТаблицаНоменклатурыСайта;
    Для Каждого Строка Из Объект.ТаблицаНоменклатурыСайта Цикл
    Код1С = Строка.Код;
    ПараметрыФормы = Справочники.ИМНоменклатура.НайтиПоРеквизиту("Код1С");
    КодРеквизита = Строка.Код;
    ПараметрыФормы = Новый Структура("Ключ", КодРеквизита);
    Форма=ПолучитьФорму("Справочник.ИМНоменклатура.Форма.ФормаЭлемента",,,ПараметрыФормы);
    Форма.Открыть();
    КонецЦикла;
КонецПроцедуры
1 ДенисЧ
 
28.02.15
09:49
НаКлиенте в тонком Справочники не доступны
2 Ненавижу 1С
 
гуру
28.02.15
09:49
на клиенте именно так
3 polkin
 
28.02.15
09:52
Без клиента форму открыть не могу....
Процедура или функция с указанным именем не определена (ПолучитьФорму)
4 Ненавижу 1С
 
гуру
28.02.15
09:54
(2) передай на сервер
5 Ненавижу 1С
 
гуру
28.02.15
09:58
1С давно надо было проводить курсы по паттерну MVC
6 Wobland
 
28.02.15
10:05
(3) ОткрытьЗначение(ПоискатьНаСервере())
7 polkin
 
28.02.15
10:12
Форму можно открыть только на Клиенте.
Найти по реквизиту только на сервере.
Как быть?
8 nva_15
 
28.02.15
10:40
создать функцию ПоискатьНаСервере() на сервере и вернуть значение на клиента
9 Wobland
 
28.02.15
10:52
хорошо, если в Объект.ТаблицаНоменклатурыСайта будет менее трёхсот строк
10 polkin
 
28.02.15
11:01
Процедура Записать1()
    Код1С = Объект.Код1С;
    ПараметрыФормы = Справочники.ИМНоменклатура.НайтиПоРеквизиту("Код1С",Код1С);
    Объект.Код1С1=ПараметрыФормы.Код1С;
КонецПроцедуры


По отдельной процедуре ищет.
Теперь как найти по реквизиту (колонке), находящейся в таблице искомой формы?

    ПараметрыФормы = Справочники.ИМНоменклатура.НайтиПоРеквизиту("Код1С",Объект.ТаблицаНоменклатуры.ТекущаяСтрока.Код1С);

Так искать не хочет...
11 Torquader
 
28.02.15
11:06
Чего-то мне подсказывает, что параметр поиска у нас на клиенте, соответственно, искать мы будем на сервере без контекста, передав туда наш параметр, а в ответ получая ссылку на того, которого нашли.
А по ссылке на клиенте прекрасно открывается форма.
12 Wobland
 
28.02.15
11:17
(10) берём объект.код1с, по нему находим какую-то ссылку, из найденной ссылки присваиваем код1с обратно в объект. я всё правильно понял?
13 polkin
 
28.02.15
11:32
(12)  Все правильно, теперь код ищется и передается, но почему-то форма открывается пустая, несмотря на то, что код получен...


&НаКлиенте
Процедура Записать(Команда)
    

    Строка =Элементы.ТаблицаНоменклатурыСайта;
    Для Каждого Строка Из Объект.ТаблицаНоменклатурыСайта Цикл
    Объект.Код = Строка.Код;
    НайтиФормуНоменклатурыСайта();
    
    Номер = Объект.Код;
    ПараметрыФормы = Новый Структура("Ключ", Номер);
    Форма=ПолучитьФорму("Справочник.ИМНоменклатура.ФормаОбъекта", ПараметрыФормы);
    Форма.Открыть();
    КонецЦикла;
    

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


Процедура НайтиФормуНоменклатурыСайта()
    Код = Объект.Код;
    ПараметрыФормы = Справочники.ИМНоменклатура.НайтиПоРеквизиту("Код1С",Код);
    Объект.Код=ПараметрыФормы.Код;
КонецПроцедуры
14 Torquader
 
28.02.15
11:32
(10) Делим задачу на две - как получить значение из текущей строки таблицы и как найти по этому значению.
15 Torquader
 
28.02.15
11:34
(13) Нах.ра объекту код присваивать - у функции должен быть параметр, в который ты передаёшь код, а получаешь ответ.
А объект вообще тут ни при чём.
16 Torquader
 
28.02.15
11:37
&НаСервереБезКонтекста
Функция НайтиФормуНоменклатурыСайта(КодПоиска)
    Возврат Справочники.ИМНоменклатура.НайтиПоРеквизиту("Код1С",КодПоиска);
КонецФункции

P.S. только визит на сервер в цикле - не есть хорошо - нужно готовить массив на входе, чтобы получить массив на выходе.
17 kosts
 
28.02.15
11:38
На УФ рекомендуется вместо

Форма=ПолучитьФорму();
Форма.Открыть();

использовать

ОткрытьФорму()

Только я не знаю как открыть конкретную ссылку с помощью оф()
18 Torquader
 
28.02.15
11:39
(13) Так точно также, в параметрах передавая тот же самый ключ (только это должна быть ссылка).
19 Wobland
 
28.02.15
11:42
(13) Объект.Код1С=Объект.Код1С; то же самое, но короче
20 polkin
 
28.02.15
11:46
(16) Не работает Возврат Справочники.ИМНоменклатура.НайтиПоРеквизиту("Код",КодПоиска); Неверно указан реквизит


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

&НаСервереБезКонтекста
Функция НайтиФормуНоменклатурыСайта(КодПоиска)
    Возврат Справочники.ИМНоменклатура.НайтиПоРеквизиту("Код",КодПоиска);
КонецФункции
21 Wobland
 
28.02.15
11:47
(20) может, реквизит указан неверно?
22 ДенисЧ
 
28.02.15
11:53
Код - это не реквизит...
23 polkin
 
28.02.15
11:55
(21) Исправил, но открывает пустую форму.
В ТаблицаНоменклатурыСайта выведены Коды Номенклатуры
Нужно по этому коду найти Номенклатуру и открыть ее форму.
Код нашли (и я его вижу), но все равно открывает пустую форму.

    Номер = Объект.Код;
    ПараметрыФормы = Новый Структура("Ключ", Номер);
    Форма=ПолучитьФорму("Справочник.ИМНоменклатура.ФормаОбъекта", ПараметрыФормы);
    Форма.Открыть();
24 Wobland
 
28.02.15
11:57
(23) так и не хочешь на клиента отдать ссылку?
25 polkin
 
28.02.15
11:59
(24) Тоже открывает пустой бланк...
26 Torquader
 
28.02.15
12:01
(25) Сначала научись на клиенте открывать форму нужного элемента по ссылке, потом можешь идти дальше.
27 polkin
 
28.02.15
12:28
(26) Поделись примером.
28 Cyberhawk
 
28.02.15
12:50
(27) пример в первых шести сообщениях
29 Torquader
 
28.02.15
13:27
// как бы из СП:
стк = Новый Структура("Ключ", ПоставщикСсылка);
Форма = ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", стк);
30 Torquader
 
28.02.15
13:28
Попытка запихать в ключ номер не очень хороша, так как система может не знать, что с ним делать.
31 polkin
 
28.02.15
15:20
Не могу в ключ запихать Ссылку, только строку...
32 Wobland
 
28.02.15
15:20
(31) это не обязательно
33 polkin
 
28.02.15
15:36
(32) почему в (23) не выводит по коду нужную номенклатуру а открывает пустую форму?
34 Wobland
 
28.02.15
15:37
(33) -> (30)
35 polkin
 
28.02.15
18:16
(34) Выход какой?
36 Wobland
 
28.02.15
18:19
(35) открой значение и уже прекрати любить мозх