Имя: Пароль:
1C
 
В модуле объекта вытаскиваю реквизиты формы и регистра сведений
0 kamila0713
 
11.08.19
23:18
Приведенный ниж код, разместил в модуле объекта Документа. А именно в обработке проведения. Вычисляю значение(Shift+F9) и Наименование и СостояниеТС значение: Ошибка чтения значения

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СостояниеТранспортногоСредства.Наименование КАК Наименование,
        |    СостояниеТранспортногоСредства.СостояниеТС КАК СостояниеТС
        |ИЗ
        |    РегистрСведений.СостояниеТранспортногоСредства КАК СостояниеТранспортногоСредства
        |ГДЕ
        |    СостояниеТранспортногоСредства.Наименование = &Наименование";
    
    Запрос.УстановитьПараметр("Наименование", Наименование);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДСостояниеТС = РезультатЗапроса.Выбрать();
1 palsergeich
 
11.08.19
23:39
Как минимум надо дописать
ВыборкаДСостояниеТС.Следующий();
И после исполнения этой строчки - сомтри отладчик
2 kamila0713
 
12.08.19
12:41
(1) Я вычисляю значение ВыборкаДСостояниеТС. И там ошибка. Не понял, с чем это было связано. Я создал новый документ, выполнил те же действия и все работает. Было бы здорово разобраться в чем дело
3 catena
 
12.08.19
12:52
(2)В приведенном в (0) коде нет .Следующий(), без него такая ошибка очевидна.
4 kamila0713
 
12.08.19
13:33
(1) и (3) Да, спасибо большое. Именно в этом ошибка была. (Я стажер только)
5 Simod
 
12.08.19
13:55
(4) Если есть проблемы с запоминаем последовательности обработки результата запроса, то в при написании запроса в контекстном меню выбирай не "Конструктор запроса", а "Конструктор запроса с обработкой результата".
6 kamila0713
 
12.08.19
15:47
(5) Да, спасибо, Simod
7 kamila0713
 
12.08.19
16:08
Еще вопрос. А почему в модуле формы документа нельзя писать так:

//(1)&НаСервере
//(2)Функция ПолучитьЦенуНоменклатуры(Номенклатура)
//.............    
    //(3)Запрос.УстановитьПараметр("Контрагент", Элементы.Контрагент);
    //(4)Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    //(5)Запрос.УстановитьПараметр("Период", Объект.Дата);

Почему в строчке (3) должно быть написано: ...Объект.Контрагент)?
Ведь в директве компиляции НаСервере можно обращаться и к контексту формы и к БД?
З.Ы. Контрагент у меня реквизит документа
8 Гобсек
 
12.08.19
16:12
(7) Потому, что Элементы.Контрагент есть элемент формы. К форме на сервере обращаться нельзя (ее на сервере не видно).
9 kamila0713
 
12.08.19
16:46
(8) Спасибо)
А почему при открытии формы элемента справочника вылезает ошибка:
&НаСервере
Процедура ПриОткрытииНаСервере()
    Объект.ДобавитьГСМ.Видимость = Ложь;
    Объект.ВидТС = Объект.Родитель;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
КонецПроцедуры
10 hhhh
 
12.08.19
16:51
(9) потому что Видимость наоборот, она у элемента формы. А вы у объекта делаете. И не надо херачить такое в ПриОткрытии, есть же процедура ПриСозданииНаСервере, там всё и делайте.
11 kamila0713
 
12.08.19
17:21
(10) Спасибо большое. Еще бы знать почему...
12 hhhh
 
12.08.19
17:45
(11) потому что элементы формы - это всякие квадраты, прямоугольники, рисунки и всякие там рюшечки на форме.

поэтому ваше Запрос.УстановитьПараметр("Контрагент", Элементы.Контрагент);  это бред, вы хотите в контрагент какую-то рюшечку поместить.

А вот Видимость - это как раз у элемента формы, что-то делаем видимым, что-то невидимым.
13 kamila0713
 
12.08.19
18:24
(12) Да, hhhh это я понял)Я спрашивал именно про оптимизацию, про процедуру ПриСоздании...)))
14 hhhh
 
12.08.19
19:33
(13) при открытии вообще лишняя. Вам же на сервере надо, а при открытии - на клиенте
15 kamila0713
 
12.08.19
19:39
(14) Cпасибо, hhhh. Пока вопросов больше нет
16 kamila0713
 
12.08.19
21:12
Помогите пожалуйста: При изменении реквизита Автомобиль выдает ошибку

Ошибка отображения типов:
Отсутствует отображение для типа 'ПолеФормы'

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

&НаКлиенте
Процедура АвтомобильПриИзменении(Элемент)
    Элементы.ГосНомер = АвтомобильПриИзмененииНаСервере(Элементы.Автомобиль);
КонецПроцедуры
17 hhhh
 
12.08.19
21:33
&НаСервереБезКонтекста
+ Code
Функция АвтомобильПриИзмененииНаСервере(Автомобиль)
            
     Возврат Автомобиль.ГосНомер;
    
КонецФункции

&НаКлиенте
Процедура АвтомобильПриИзменении(Элемент)
    Объект.ГосНомер = АвтомобильПриИзмененииНаСервере(Объект.Автомобиль);
КонецПроцедуры
18 kamila0713
 
12.08.19
22:20
(17) С Объектами и Элементами разобрался
19 kamila0713
 
12.08.19
22:39
Но все равно выдает в отладчике Ошибка чтения значения для ВыборкаДетальныеЗаписи, а ВыборкаДетальныеЗаписи.Следующий(), выдает Ложь

+Code:

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

&НаКлиенте
Процедура АвтомобильПриИзменении(Элемент)
    Объект.ГосНомер = АвтомобильПриИзмененииНаСервере(Объект.Автомобиль);
КонецПроцедуры
20 kamila0713
 
12.08.19
22:47
Сделал. Поменял Наименование на Ссылку. Получилось
21 hhhh
 
12.08.19
22:49
(19) потому что Наименование это строка, а Объект.Автомобиль это ссылка на элемент справочника, пробуй

|ГДЕ
        |    ТранспортныеСредства.Ссылка = &Наименование";

и вообще это дурость - работать с наименованиями. У тебя же ссылка есть.
22 kamila0713
 
12.08.19
23:30
(21) Спасибо, hhhh
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший