Имя: Пароль:
1C
1C 7.7
v7: Самопроизвольно изменяется переменная. Кто позволил?!
, ,
0 NDIS HH
 
16.01.13
08:27
Процедура ОбрВыбЧисло()
   СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
   СпрНоменклатура.НайтиПоКоду(Код);
   РознЦена = СоздатьОбъект("Справочник.Цены");
   РознЦена.ИспользоватьВладельца(СпрНоменклатура);
   РознЦена.ВыбратьЭлементы();
   БылаРознЦена = 0;
   ТекущаяЦена = 0;
   Пока РознЦена.ПолучитьЭлемент() = 1 Цикл
       Если РознЦена.ТипЦен = Константа.РозничныйТипЦен Тогда
           БылаРознЦена = 1;
           ТекущаяЦена = РознЦена;
       КонецЕсли;
   КонецЦикла;
   Если
И в этот момент "Текущая цена" становится пустой ссылкой на справочник "Цены". Как такое может быть?

Как в 7.7 сделать РознЦена.Ссылка?
1 chelentano
 
16.01.13
08:30
ТекущаяЦена = РознЦена.ТекущийЭлемент() ?
2 cw014
 
16.01.13
08:31
Ну дак так и должно быть

Наверное ты хотел сделать:
ТекущаяЦена = РознЦена.Цена.Получить(ТекущаяДата());
3 NDIS HH
 
16.01.13
08:38
(1) Это вместо .ссылка? Но это не совсем то, в 8 всё-таки удобнее ;)
А в данном случае
ТекущаяЦена = РознЦена.ТекущийЭлемент();
       КонецЕсли;
   КонецЦикла;
   Если БылаРознЦена = 1 Тогда
       ТекущаяЦена.Цена.Установить(ТекущаяДата(), ВыбЧисло);

ТекущаяЦена.Цена.Установить(ТекущаяДата(), ВыбЧисло);
{Справочник.Номенклатура.Форма.Модуль(1364)}: Недопустимая операция
4 cw014
 
16.01.13
08:40
(3)

СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.НайтиЭлемент(ТекущаяЦена);
СпрЦены.Цена.Установить(ТекущаяДата(), ВыбЧисло);
5 cw014
 
16.01.13
08:40
(3) Учи матчасть
6 NDIS HH
 
16.01.13
08:42
(2) ТекущаяЦена - должна быть элементом справочника "Цены" (у которого есть реквизит "цена"). Ссылка получается нормальная. Но потом, при выходе из цикла ссылка меняется на пустую.
7 cw014
 
16.01.13
08:44
Процедура ОбрВыбЧисло()
   СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
   СпрНоменклатура.НайтиПоКоду(Код);
   РознЦена = СоздатьОбъект("Справочник.Цены");
   РознЦена.ИспользоватьВладельца(СпрНоменклатура);
   РознЦена.ВыбратьЭлементы();
   БылаРознЦена = 0;
   ТекущаяЦена = 0;
   Пока РознЦена.ПолучитьЭлемент() = 1 Цикл
       Если РознЦена.ТипЦен = Константа.РозничныйТипЦен Тогда
           БылаРознЦена = 1;
           ТекущаяЦена = РознЦена.ТекущийЭлемент();
           Прервать;
       КонецЕсли;
   КонецЦикла;
   Если БылаРознЦена = 1 Тогда
       РознЦена.НайтиЭлемент(ТекущаяЦена);
       РознЦена.Цена.Установить(ТекущаяДата(), ВыбЧисло);
8 cw014
 
16.01.13
08:45
Спасибо не надо, можно на пиво кинуть на телефон :)
"Прервать;" убери, я чего то тупанул
9 ЧеловекДуши
 
16.01.13
08:45
(6)Если должен, то познай для себя слово "Периодический реквизит" :)
Гугл в помощь
10 ЧеловекДуши
 
16.01.13
08:46
(8)Думается это он и так имел, ему нужны квадратные колёса :)
11 NDIS HH
 
16.01.13
08:47
(4) А! Выборка исчерпывается и объект становится "пустым" - всё правильно. Спасибо, ступил.

ЧеловекДуши, моя проблема была не в периодических реквизитах, но спасибо за участие.
12 NDIS HH
 
16.01.13
09:01
(8) Для меня "Прервать" в теиу - мне нужен только первый найденный.
Мне просто после КонецЦикла надо было повторить РознЦена.ВыбратьЭлементы();
И всё.
P.S. У вас только аська. ;)
13 cw014
 
16.01.13
09:09
(12) А еще почта :)
14 cw014
 
16.01.13
09:09
(12) Но впринципе написать можно и туда и туда
15 monsterZE
 
16.01.13
09:24
>Мне просто после КонецЦикла надо было повторить РознЦена.ВыбратьЭлементы();
=) кул
Основная теорема систематики: Новые системы плодят новые проблемы.