Имя: Пароль:
1C
1С v8
Переменная не определена (VIP)
0 AlekseyJr
 
27.06.24
09:43
Есть запрос, в косоли запросов всё работает, в коде нет. Пишет ошибку "Переменная не определена (VIP)". VIP - это свойство контрагента. И собственно возникает вопрос, как её определить?))

Функция ПолучитьСписокVIPКонтрагентов()  
	Запрос = Новый Запрос; 
	Запрос.Текст =  
		"ВЫБРАТЬ 
		|	ЗначенияСвойствОбъектов.Объект КАК Объект, 
		|	ЗначенияСвойствОбъектов.Свойство КАК Свойство, 
		|	ЗначенияСвойствОбъектов.Значение КАК Значение 
		|ИЗ 
		|	РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов 
		|ГДЕ 
		|	ЗначенияСвойствОбъектов.Свойство = &Свойство";
   	Запрос.УстановитьПараметр("Свойство", VIP);
	РезультатЗапроса = Запрос.Выполнить(); 
	Возврат РезультатЗапроса.Выгрузить(); 
	
КонецФункции
1 Инстанс
 
27.06.24
06:55
Код показывай. Ты переменную-то объявил?
2 Инстанс
 
27.06.24
06:56
И что за форматирование. Тут, вроде, есть 1С.
3 Инстанс
 
27.06.24
06:57
Что такое вип? Говори. Давай разрулим
4 AlekseyJr
 
27.06.24
07:01
(3) VIP - это свойство контрагента, по которому я хочу определить список контрагентов с особыми условиями.
5 Инстанс
 
27.06.24
07:02
Давай тим вью что ли. Запрос нормальный. Как ты добываешь свойство контрагента. Просто пишешь VIP что ли
6 Инстанс
 
27.06.24
07:03
В консоли запросов ты значение-то заполняешь, а в программном коде - ух. Брезгуешь поди
7 AlekseyJr
 
27.06.24
07:03
(1)     СписокVIPКонтрагентов = ПолучитьСписокVIPКонтрагентов();

    Для Каждого Строка ИЗ СписокVIPКонтрагентов Цикл
        НайденнаяСтрока = СписокVIPКонтрагентов.Найти(Строка.Объект, "Объект");
        Если НайденнаяСтрока = Контрагент Тогда
            ПредельнаяДатаОплаты = ДатаОплаты + 15552000; // 180 дней  
        Иначе
            ПредельнаяДатаОплаты = ДатаОплаты + 7776000; // 90 дней
        КонецЕсли;
    КонецЦикла;



     Функция ПолучитьСписокVIPКонтрагентов()  
    Запрос = Новый Запрос;
        Запрос.Текст =  
        "ВЫБРАТЬ
        |    ЗначенияСвойствОбъектов.Объект КАК Объект,
        |    ЗначенияСвойствОбъектов.Свойство КАК Свойство,
        |    ЗначенияСвойствОбъектов.Значение КАК Значение
        |ИЗ
        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Свойство = &Свойство";
        Запрос.УстановитьПараметр("Свойство", VIP);
           РезультатЗапроса = Запрос.Выполнить();
    Возврат РезультатЗапроса.Выгрузить();
    
     КонецФункции
8 Инстанс
 
27.06.24
07:04
Либо код показывай весь
9 AlekseyJr
 
27.06.24
07:04
(2) Я не увидел((
10 Инстанс
 
27.06.24
07:05
Ну и где переменная VIP?
11 Инстанс
 
27.06.24
07:06
Как ты вообще можешь в функции обращаться к необъявленной переменной. Чему тебя в жизни учили
12 Инстанс
 
27.06.24
07:08
Конфа какая?
13 AlekseyJr
 
27.06.24
07:09
(10) То есть переменная должна быть объявлена за пределами запроса? Я хотел через УстановитьПараметр...
14 AlekseyJr
 
27.06.24
07:10
(12) УТ 10.2
15 Инстанс
 
27.06.24
07:11
(13) А ты думаешь, если ты пишешь VIP, то что должно случиться? Ты кто по образованию?
16 AlekseyJr
 
27.06.24
07:11
(11) Да вот именно ничему, касаемо 1С, пытаюсь сам, с переменным успехом
17 Инстанс
 
27.06.24
07:12
Нет, нету старых утэшек. Удалил уже.
18 Инстанс
 
27.06.24
07:12
Короче, примерно
19 Инстанс
 
27.06.24
07:14
Хотя, блин, у меня нет старой УТ. Я там вообще не работаю. По логике VIP это Булево
Запрос.УстановитьПараметр("Свойство", Истина);
20 Инстанс
 
27.06.24
07:14
Если траблы, пиши. Зайду, помогу
21 AlekseyJr
 
27.06.24
07:14
В моём случаи чудо((( Первый курс закончил, Информатика и вычислительная техника.
22 AlekseyJr
 
27.06.24
07:14
(20) Спасибо))
23 Инстанс
 
27.06.24
07:15
(21) Ну если ты первый курс закончил, как ты вообще в самостоятельной функции обращаешься к неопределённой переменной
24 Мимохожий Однако
 
27.06.24
07:17
(0) Режим отладки использовать научился? Искомая переменная есть на форме обработки? В каком режиме запускаешь базу?
25 Инстанс
 
27.06.24
07:23
vip по ходу это доп. свойство. просто название. думаю, это булево. поэтому (19) должен вырулить. а так..
26 Мультук
 
гуру
27.06.24
09:30
(0)

Тебе нужно получить ссылку на это доп.свойство

VIP = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("VIP", Истина);

P.S.
Почему НайтиПоНаименованию("") в целом плохо тебе объяснят.
А вот как его заменить на что-то взрослое, тебе тоже объяснят,
но имхо сработает золотое правило "нельзя впихнуть невпихуемое"

P.S.
В (26) правильный ответ.
27 Valdis2007
 
27.06.24
08:32
просто к вип переменным нет допуска еще))
28 lEvGl
 
гуру
27.06.24
09:19
(26) скорее так
VIP = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("VIP");
а ДополнительныеРеквизитыИСведения это уже из новых
29 AlekseyJr
 
27.06.24
10:00
Всем спасибо, методом проб и ошибок пришел к такому решению. Правда не знаю, насколько это правильно, но вроде работает))Хах

Если ЗначениеСвойстваVIPКонтрагента() тогда
        ПредельнаяДатаОплаты = ДатаОплаты + 15552000;  // 180 дней
    Иначе
         ПредельнаяДатаОплаты = ДатаОплаты + 7776000; // 90 дней

    КонецЕсли;


Функция ЗначениеСвойстваVIPКонтрагента()
    Запрос = Новый Запрос;
        Запрос.Текст =  
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    ЗначенияСвойствОбъектов.Объект КАК Объект,
        |    ЗначенияСвойствОбъектов.Свойство КАК Свойство,
        |    ЗначенияСвойствОбъектов.Значение КАК Значение
        |ИЗ
        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Свойство = &Свойство
        |    И ЗначенияСвойствОбъектов.Объект = &Объект";
        VIP = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("06828");
        Запрос.УстановитьПараметр("Свойство", VIP);
        Запрос.УстановитьПараметр("Объект", Контрагент);
        РезультатЗапроса = Запрос.Выполнить();
        
        Если         РезультатЗапроса.Пустой() Тогда
            Возврат Ложь;
        Иначе
            РезультатЗапроса =  РезультатЗапроса.Выбрать();
            РезультатЗапроса.Следующий();
            Возврат РезультатЗапроса.Значение;
        КонецЕсли;
        
КонецФункции
30 Волшебник
 
27.06.24
09:46
(29) Ненадёжная строка:
VIP = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("06828");
31 Инстанс
 
27.06.24
09:51
молодо зелено. хотя не так. ну ёперный театр
32 AlekseyJr
 
27.06.24
09:51
(30) У меня было всего два варианта НайтиПоКоду, НайтиПоНаименованию((
33 Волшебник
 
27.06.24
09:52
(29) плохие цифры:

ПредельнаяДатаОплаты = ДатаОплаты + 15552000;  // 180 дней
ПредельнаяДатаОплаты = ДатаОплаты + 7776000; // 90 дней


Лучше так:
СекундВСутках = 86400; // 24*60*60
ПредельнаяДатаОплаты = ДатаОплаты + 180 * СекундВСутках; // 180 дней
ПредельнаяДатаОплаты = ДатаОплаты +  90 * СекундВСутках; // 90 дней
34 Инстанс
 
27.06.24
09:52
Подаваном-бы тебе к нормальному сеньору.
35 AlekseyJr
 
27.06.24
09:53
(31) Это значит "Всё очень плохо!"?
36 Волшебник
 
27.06.24
09:53
(32) Ищите по наименованию.
Или сделайте свойство предопределённым.
37 Волшебник
 
27.06.24
09:55
Плохое изменение типа переменной через переприсваивание:
 РезультатЗапроса =  РезультатЗапроса.Выбрать();


Правильно так:

 Выборка =  РезультатЗапроса.Выбрать();
38 Климов Сергей
 
27.06.24
09:55
(29)
1. (30) +1000
2. Параметры запроса заполняются необъявленными переменными (VIP и Контрагент).
3. Функция ЗначениеСвойстваVIPКонтрагента() поди в цикле вызывается? Тогда это запрос в цикле. А это лютый харам! В этом случае правильно вместе с формированием выборки по контрагентам определять и свойство VIP. В одном запросе.
39 AlekseyJr
 
27.06.24
09:56
(36) Касаемо предопределённого свойства была мысля, но я не разу так не делал, поэтому отбросил, видимо зря. Буду значит переделывать, спасибо.
40 Инстанс
 
27.06.24
09:57
(35) Если начать с того, что ты обращался к необъявленной переменной. Как тебе это в голову пришло. Программист может тупить над фреймворком, но азы-то он должен схватывать на лету.
41 Инстанс
 
27.06.24
09:57
(39) Функцию напиши.
42 Chai Nic
 
27.06.24
09:59
Ну если уж перфекционировать по полной, то и несколько Возвратов из функции тоже не красиво. Лучше присвоить значение переменной, а Возврат сделать один раз в конце.
43 Волшебник
 
27.06.24
10:00
(29) Обращение к неизвестной переменной Контрагент
 Запрос.УстановитьПараметр("Объект", Контрагент);
44 Волшебник
 
27.06.24
10:00
Итак, вывод следующий.
Тупой бот пудрит мозги кожаным мешкам
45 Инстанс
 
27.06.24
10:02
Юный подаван ищет участие
46 Волшебник
 
27.06.24
10:03
(45) Не надо врать. Люди не могут быть такими тупыми.
47 Инстанс
 
27.06.24
10:05
(46) У него же написано - Jr. Может, он реально не догоняет.
48 Волшебник
 
27.06.24
10:06
(47) У Вас тоже написано "инстанс". Может Вы тоже инстанс гопоты?
49 AlekseyJr
 
27.06.24
10:06
(40) Программист, а мне до программиста далеко ещё...
50 Инстанс
 
27.06.24
10:09
(48) Это в честь MFC, наверно. hInstance. Почините сайт - со старым логином зайти не могу.
51 Волшебник
 
27.06.24
10:16
(50) С каким из сотни?
52 Волшебник
 
27.06.24
10:17
(50) Вот нашёл красивый Ваш ник: Лалалалилалалала
53 Волшебник
 
27.06.24
10:18
(49) Идите книжки читайте. Перестаньте громоздить куски программного кода друг на друга.