Имя: Пароль:
1C
1С v8
Передача значения реквизита формы документа с клиента на сервер
0 neetro
 
29.05.14
19:01
В двух словах может кто описать. Есть тестовая конфигурация с нуля. Там документ Инвентаризация. В нем реквизит Склад. Хочу заполнить табличную часть остатками по складу. Создал кнопку Заполнить на форме. Повесил действие. На Клиенте вызываю процедуру с сервера, На сервере запросом пытаюсь получить остатки с фильтром по складу, не могу понять как передать значение реквизита в процедуру на сервере. Что передать в вызове процедуры сервера с клиента...
1 Crush
 
29.05.14
19:14
Это очень сложный и топовый вопрос. Его задают здесь каждый день вместо того что бы пользоваться поиском.
РеквизитФормыВЗначение
2 neetro
 
29.05.14
19:28
(1) ну я это использую. Код


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

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

    //Запрос.УстановитьПараметр("МоментВремени", МоментВремени);
    Запрос.УстановитьПараметр("ТорговаяТочка", ТорговаяТочка);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить(ВыборкаДетальныеЗаписи.Номенклатура);
    КонецЦикла;
    
КонецПроцедуры
3 Лефмихалыч
 
29.05.14
19:29
(2) заставь себя написать в конце ЗначениеВРеквизитФормыБлеать()
4 rendez-vous
 
29.05.14
19:31
Вместо:
Документ = РеквизитФормыВЗначение("Объект");
можно написать
Документ = Объект
5 neetro
 
29.05.14
19:33
(3) даже боюсь спрашивать - ты такой злой ) где в конце то? у меня ошибка в  Запрос.УстановитьПараметр("ТорговаяТочка", ТорговаяТочка);
6 neetro
 
29.05.14
19:34
(4) что это изменит? Мне так сам конеткст докумнта не нужен, мне тупо реквизит нужен для фильтра в запросе....
7 neetro
 
29.05.14
19:35
Я так понимаю я в переменную ТорговаяТочка херню какую то пишу, хотя там СправочникСсылка
8 Лефмихалыч
 
29.05.14
19:36
(4) можно, но результат будет совсем другим
(5) текст ошибки ты предлагаешь угадать?
9 neetro
 
29.05.14
19:37
(8)
{Документ.Пересменок.Форма.ФормаДокумента.Форма(34)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатЗапроса = Запрос.Выполнить();
по причине:
{(6, 50)}: Неверные параметры "РегистрНакопления.Остатки.Остатки, 0"
РегистрНакопления.Остатки.Остатки(ТорговаяТочка <<?>>= &ТорговаяТочка) КАК ОстаткиОстатки
10 Crush
 
29.05.14
19:38
Отладчик предлагали?
11 neetro
 
29.05.14
19:40
(10) в отладчике значение есть
ТорговаяТочка    Точка1     СправочникСсылка.ТорговыеТочки
12 Лефмихалыч
 
29.05.14
19:40
(9) измерения такого нет у регистра, параметр тут ни при чем
13 neetro
 
29.05.14
19:40
Это после этой строчки
ТорговаяТочка = Документ.ТорговаяТочка; (на сервере)
14 neetro
 
29.05.14
19:41
(12) Есть. Это первое что я перепроверил. Запрос конструктором делал
15 Crush
 
29.05.14
19:42
А может сначала период нужно задать?
16 neetro
 
29.05.14
19:44
(15) да мне тупо остатки нужны какие есть. До периода я еще не дошел ) К слову без фильтра по ТТ запрос работатет.
17 Crush
 
29.05.14
19:44
Точнее можно и не задавать. попробуй магический знак припинания вызвать
18 neetro
 
29.05.14
19:45
(17) Что? ))
19 Crush
 
29.05.14
19:46
И вообще юзай конструктор запроса. Он оградит тебя от незнания пунктуации при описании параметров виртуальных таблиц
20 neetro
 
29.05.14
19:47
(19) я в 14 сообщении и написал что делал констуруктором!
21 Crush
 
29.05.14
19:47
Есть игра такая "Найди 2 отличия"
|    РегистрНакопления.Остатки.Остатки(ТорговаяТочка = &ТорговаяТочка) КАК ОстаткиОстатки";
|    РегистрНакопления.Остатки.Остатки(&МоментВремени, ТорговаяТочка = &ТорговаяТочка) КАК ОстаткиОстатки";
22 Crush
 
29.05.14
19:49
(20) Гагага! Харошь заливать. Каким конструтором? Лего что ль?
1Совский конструктор запросов комментарии не оставляет
23 neetro
 
29.05.14
19:50
Все я понял. Спасибо
24 neetro
 
29.05.14
19:50
пустой парамерт забыл передать
Я слелал констурктором, потом корректировал его руками
25 neetro
 
29.05.14
19:52
Кстати МоментВремени() тоже отказался работать

РегистрНакопления.Остатки.Остатки(&МоментВремени, ТорговаяТочка = &ТорговаяТочка) КАК ОстаткиОстатки";

Запрос.УстановитьПараметр("МоментВремени", МоментВремени);
26 neetro
 
29.05.14
19:52
Ладно, не усмотрел. теперь буду думать как вернуть данные в таблицу формы.....
27 neetro
 
29.05.14
19:54
вот это

    Документ = РеквизитФормыВЗначение("Объект");
    ТорговаяТочка = Документ.ТорговаяТочка;

вообще по сути нормально? Перадавать весь объект чтобы полуить значение одного реквизита для фильтра... Может есть способ лучше?
28 Crush
 
29.05.14
20:46
(27) Попробуй
ТорговаяТочка = РеквизитФормыВЗначение("Объект.ТорговаяТочка");

Потом напиши что получилось

А момент времени передавать не обязательно. Можно так:

РегистрНакопления.Остатки.Остатки(, ТорговаяТочка = &ТорговаяТочка) КАК ОстаткиОстатки";
29 Crush
 
29.05.14
20:46
А может так?
ТорговаяТочка = РеквизитФормыВЗначение("ТорговаяТочка");
30 Лефмихалыч
 
29.05.14
21:30
(14) заставь себя и условие тоже конструктором задатьблеать
31 hhhh
 
29.05.14
22:34
(29) харе прикалываться. Тип СправочникСсылка существует и не объекте и на сервере. Не нужно здесь  РеквизитФормыВЗначение.
32 hhhh
 
29.05.14
22:35
Запрос.УстановитьПараметр("ТорговаяТочка", Объект.ТорговаяТочка);
33 Crush
 
29.05.14
23:19
(31) Без приколов. Я УФ еще не знаю. А тут пишу что бы поддерживать диалог и чего то цеплять для себя.
34 Лефмихалыч
 
29.05.14
23:27
(31) пля, да при чем тут?..
проблема в (2) и (9) от того, что у виртуальной таблицы два параметра и в первом конструкция "что-то = что-то еще" недопустима.
35 hhhh
 
29.05.14
23:54
(34) ну это понятно, уже ведь объяснили автору
36 ProProg
 
30.05.14
00:06
Вот двоешники емае.
37 ProProg
 
30.05.14
00:06
Если все происходит в модуле формы.
То нифига передавать ничего и не нужно.

В серверной процедуре тупо используешь Объект.Реквизит траляляляля
38 ProProg
 
30.05.14
00:07
А вот если в модуле объекта тогда да - нужно все передавать через структуру параметров.
39 ProProg
 
30.05.14
00:08
РеквизитФормыВЗначение использовать нужно только если в модуле объекта какие то действия.

В модуле формы между клиентом и сервером нифига передавать не нужно. никакие формы в реквизиты и прочее.
40 ProProg
 
30.05.14
00:10
(9) Что ты врешь. Ты не могу конструктором это делать, либо ты дятел.

РегистрНакопления.Остатки.Остатки(ТорговаяТочка <<?>>= &ТорговаяТочка)


Первый параметр у Остатки - это дата.
41 neetro
 
30.05.14
11:57
(37) речь про модуль формы ага

Такая конструкция прекрасно работает. Спасибо!

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиОстатки.Номенклатура,
        |    ОстаткиОстатки.ТорговаяТочка,
        |    ОстаткиОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрНакопления.Остатки.Остатки(, ТорговаяТочка = &ТорговаяТочка) КАК ОстаткиОстатки";

    Запрос.УстановитьПараметр("ТорговаяТочка", Объект.ТорговаяТочка);
42 neetro
 
30.05.14
12:05
Лефмихалыч, ты как Йода )) не понимаю что ты говоришь. Какое условие? В конструкторе я на виртуальную таблицу наложил условие по торговой точке и по периоду. Это видно по закомментированным строкам в листинге. С ТТ разобрались, а моментвремени() из модуля формы пока хз как вызвать (ну типа актуальные остатки нужны)
Сейчас пытаюсь вникнуть как теперь вернуть номенклатуру\количество в форму ))) После 7.7 туго все идет. Это клиент серверное взаимодействие
43 neetro
 
30.05.14
12:15
(40) ты бы вник сначала в (9) там блеать видно что закомментирована строка сгенерированная конструктором из-за проблемы с периодом, скопировал ее и убрал момент времени. Запятую не подумал оставить (точнее не подумал что параметр дата по любому идет первым). Ты там сидишь за компом, самоутвержаешься, а в реале за такие необоснованные слова тебе бы уже е.бальник разбили. Глазки в пол и побежал. М.удила )
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.