Имя: Пароль:
1C
1С v8
Объясните пожалуйста ситуацию с переменными
0 oleg_prg
 
26.09.12
15:16
Добрый день!//вопрос почему так не работает
//вопрос почему так не работает
ЭлементСубконто = ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[СокрЛП(РеквизитСубконто)+СокрЛП(А+1)];
ЭлементСубконто = ЭлементыФормы.ТЧВыписка.ТекущиеДанные["КоррСчет"].ВидыСубконто[А].ВидСубконто.ТипЗначения.ПривестиЗначение();
//а так работает
ЭлементСубконто = ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[СокрЛП(РеквизитСубконто)+СокрЛП(А+1)];
ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[СокрЛП(РеквизитСубконто)+СокрЛП(А+1)] = ЭлементыФормы.ТЧВыписка.ТекущиеДанные["КоррСчет"].ВидыСубконто[А].ВидСубконто.ТипЗначения.ПривестиЗначение();

Глюк платформы? 1С:Предприятие 8.1 (8.1.15.14)
1 oleg_prg
 
26.09.12
15:18
Или я что-то не так делаю?
2 Mort
 
26.09.12
15:19
А = Б
А = В

Почему Б не стало равно В ?
3 oleg_prg
 
26.09.12
15:21
Да! Типа того, только в первом случае тип ЭлементСубконто изменяется, но на форме ничего не происходт, - поле как было неопределенного типа любая ссылка так и остается
Как-будто при переброске через переменную ЭлементСубконто  что-то происходит...
4 oleg_prg
 
26.09.12
15:22
Долго не понимал почему так, потом написал код без переменной как в примере 2 и все заработало. Странно
5 Mort
 
26.09.12
15:24
Т.е. код в (2) ничем не смущает?
6 oleg_prg
 
26.09.12
15:24
//так не работает Вариант 1
ЭлементСубконто = ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[СокрЛП(РеквизитСубконто)+СокрЛП(А+1)];
ЭлементСубконто = ЭлементыФормы.ТЧВыписка.ТекущиеДанные["КоррСчет"].ВидыСубконто[А].ВидСубконто.ТипЗначения.ПривестиЗначение();

//а так работает Вариант2
ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[СокрЛП(РеквизитСубконто)+СокрЛП(А+1)] = ЭлементыФормы.ТЧВыписка.ТекущиеДанные["КоррСчет"].ВидыСубконто[А].ВидСубконто.ТипЗначения.ПривестиЗначение();

т.е. при использовании переменной ЭлементСубконто на форме ничего не происходит, а если
7 oleg_prg
 
26.09.12
15:25
(2) причем здесь этот  код? Естественно он работать не будет
8 oleg_prg
 
26.09.12
15:26
Ответьте по человечески без смущает, не смущает.
9 Mort
 
26.09.12
15:26
А то что в первом случае "ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[СокрЛП(РеквизитСубконто)+СокрЛП(А+1)]" стоит справа от знака "=", а во втором слева?
10 Фокусник
 
26.09.12
15:27
(7) смотри в отладчике в первом примере в ЭлементСубконто какой тип данных? :)
11 oleg_prg
 
26.09.12
15:28
(7) Неопределно
12 oleg_prg
 
26.09.12
15:29
затем этот тип в строке 2
ЭлементСубконто = ЭлементыФормы.ТЧВыписка.ТекущиеДанные["КоррСчет"].ВидыСубконто[А].ВидСубконто.ТипЗначения.ПривестиЗначение();
ЭлементСубконто становится ссылка Справочники.СтатьиЗатрат вроде все ок. Но при этом на форме ничего не меняется, вот в чем дело
13 timurhv
 
26.09.12
15:30
(12) у тебя в первой строке должен быть ссылочный тип, а неопределено
14 Фокусник
 
26.09.12
15:33
(11)
Переменная = Неопределено;
Переменная = НовоеЗначение;

разве это не код в (2)? :)
15 acsent
 
26.09.12
15:35
(7) А так если
ЭлементСубконто = Б
ЭлементСубконто = В
16 oleg_prg
 
26.09.12
15:37
Ситуация такая на форме есть ТЧВыписка - это таблица в таблице есть КоррСчет и Субконто1..3
При выборе счета КоррСчет я должен субконто1..3 назначить типы как у субконто КоррСчет.
Так вот
пишу код и он почему-то не работает

ЭлСчет = ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[РеквизитСчет];
   КоличествоСубконто = ЭлСчет.ВидыСубконто.Количество();
   Для А = 0 по КоличествоСубконто - 1 Цикл
       ТипСубконто    = ЭлСчет.ВидыСубконто[А].ВидСубконто.ТипЗначения.ПривестиЗначение();
       ЭлементСубконто_ = ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[СокрЛП(РеквизитСубконто)+СокрЛП(А+1)];
       
       Если ТипЗНЧ(ЭлементСубконто_) <> ТипЗНЧ(ТипСубконто) Тогда
           ЭлементСубконто_ = ЭлементыФормы.ТЧВыписка.ТекущиеДанные["КоррСчет"].ВидыСубконто[А].ВидСубконто.ТипЗначения.ПривестиЗначение();
       КонецЕсли;
   КонецЦикла;
17 Mort
 
26.09.12
15:37
В 1С есть ситуация когда оператор "=" изменяет правый операнд, но это не эта ситуация.
18 oleg_prg
 
26.09.12
15:37
но как только я меняю строку в если на вот это, то все ОК!!! Непонимаю... Может мне отдыхать пора...

ЭлементыФормы["ТЧВыписка"].ТекущиеДанные[СокрЛП(РеквизитСубконто)+СокрЛП(А+1)] = ЭлементыФормы.ТЧВыписка.ТекущиеДанные["КоррСчет"].ВидыСубконто[А].ВидСубконто.ТипЗначения.ПривестиЗначение();
19 Фокусник
 
26.09.12
15:50
(18) А так ты вместо кода:
А = Б
А = В

делаешь
Б = В

:)
20 oleg_prg
 
26.09.12
15:54
(19) Да, кажется понял. Спасибо ))) Туплю!
21 Lexusss
 
26.09.12
16:02
Код работает, но не так, как ты ожидаешь