Имя: Пароль:
1C
 
Не работает срезпоследних
↓ (Волшебник 01.01.2025 11:51)
0 Alien47
 
30.12.24
17:28
Добрый день! Всех с наступающим! В 1с я новичок.
Пытаюсь подтянуть цены номенклатуры из ЦеныПродажи.СрезПоследних. При сохранении выдает ошибку
Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов.
некий код
РегистрСведений.ЦеныПродукции.СрезПоследних (&Период, Номенклатура = <<?>>=&Номенклатура) Как ЦеныПродукцииСрезПоследних


Никак не видит параметр Номенклатура, пишет, что переменная не определена.
Текст запроса -

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

1 Amra
 
30.12.24
17:06
Что непонятно в ошибке? Переменная Номенклатура не того типа. Посмотри, какого типа у тебя переменная, и какого соответствующее измерение в регистре
2 Alien47
 
30.12.24
17:08
Если убрать строку
Номенклатура = Справочники.Номенклатура;
Тогда пишет, что переменная не определена (Номенклатура).
3 Alien47
 
30.12.24
17:10
Amra,
В документе, где делаю срезпоследних переменная типа СправочникСсылка.Номенклатура.
И в регистре переменная типа СправочникСсылка.Номенклатура
4 maxab72
 
30.12.24
17:16
(0) "Номенклатура = Справочники.Номенклатура;" Это зачем? Тебе нужна конкретная ссылка в справочнике номенклатуры, а не весь справочник целиком.
5 Alien47
 
30.12.24
17:18
maxab72,
Тогда пишет ошибку, что переменная не определена (Номенклатура).
6 H A D G E H O G s
 
30.12.24
17:21
Чужик - брат по разуму.
7 Fedor-1971
 
30.12.24
17:33
(0) Что такое Ссылка знаешь?
что присвоено переменной Номенклатура? (вот в этой строке "запрос.УстановитьПараметр("Номенклатура",Номенклатура);")
8 Волшебник
 
30.12.24
17:30
(5) Когда обращаетесь к конкретному сообщению, то пишите его номер в скобках
почитайте описание форума, куда Вас занесло случайно https://1cers.ru/help/about.html
хотя может это судьба и приживётесь
вот Буковка прижилась же
9 Волшебник
 
30.12.24
17:28
(6) Давайте без вот этих вот... На новогодних каникулах будет мало веток.
10 Волшебник
 
30.12.24
17:31
(5) Если пишет ошибку, что "переменная не определена (Номенклатура)", значит не определена переменная Номенклатура в этой строке. Там ещё номер строки должен быть. Ставьте точку останова на этой строке и смотрите значения переменных. (Отладчик нужен)
11 lEvGl
 
30.12.24
17:32
(0) У Справочники.Номенклатура тип объекта - справочник-менеджер, в параметр запроса должен передаваться конкретный элемент справочника, то есть ссылка. Найдите два отличия
12 lEvGl
 
30.12.24
17:33
(0) в (10) для понимания что где это самый верный вариант
13 Волшебник
 
30.12.24
17:35
(11) Типы СправочникМенеджер и СправочникСсылка — это был мой первый культурный (когнитивный) шок после 7.7, когда я изучал восьмёрку. В семёрке был просто "Справочник"
14 Asmody
 
30.12.24
17:43
(0) Справочники.Номенклатура - это весь справочник целиком. Все его 100500 элементов вместе. Если точнее, то это менеджер справочника.
В параметр запроса надо отправить элемент справочника номенклатура, а точнее - ссылку на него. Откуда он/она возьмётся - это уже ваше дело. Самый простой вариант получить ссылку на элемент справочника - попросить НайтиПоКоду() у менеджера справочника (на проде так делать не надо, для тренировки сойдет). Т.е.:
Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000000001");
15 Asmody
 
30.12.24
17:37
(13) вполне логичное разделение ответственности
16 lEvGl
 
30.12.24
17:41
(13) ну вот с точки зрения ООП не до всех дошло, например
Справочники.Номенклатура - это весь справочник целиком. Все его 100500 элементов вместе

;)
и опять ошибка, очевидно перекликается с 7.7
Справочник.Номенклатура.НайтиПоКоду("00000000001");

;;)
17 Fedor-1971
 
30.12.24
17:42
(13) Походу, ТС использует логику 7.7 Номенклатура - значение в текущей строке ТЧ, по его логике уже заполнено.
А тут засада подкралась из-за угла - Номенклатура = Неопределено и сравнивать в запросе не получается
18 Asmody
 
30.12.24
17:45
Учтите, что в реквизитах объектов хранятся те самые ссылки, которые вам нужны.
Т.е., если у вас есть некий документ ЗаказПокупателя, у него табличная часть Товары, в котором есть реквизит Номенклатура, то в запрос надо передавать СтрокаТовары.Номенклатура. Ни в коем случае не СтрокаТовары.Номенклатура.Ссылка, и уж тем более не Справочники.Номенклатура.НайтиПоКоду(СтрокаТовары.Номенклатура.Код)
19 Asmody
 
30.12.24
17:45
(16) НайтиПоКоду() у менеджера - это, как раз, нормально. Дело менеджера разбираться с "табличкой" в целом.
20 Asmody
 
30.12.24
17:46
А в следующей ветке мы научим ТС, как не писать запросы в цикле
21 lEvGl
 
30.12.24
17:56
(20) кмк это будет еще не скоро. если с типами непонятно, то до циклов еще дальняя дорога. Но надеемся и ждем
22 Волшебник
 
30.12.24
17:57
О, в ветке собрались мэтры, знающие типы... Джун-автор будет жив!
23 lEvGl
 
30.12.24
18:00
:D
но не только лишь все))
24 Волшебник
 
30.12.24
18:00
(23) хе-хе. Выживут все. Вы просто не слышали мою новую песню Блокчейн.
Выживут все
https://wizard.mista.ru/music/my-songs/blockchain.html
25 lEvGl
 
30.12.24
18:24
(24) в кубит.. ну неплохо сочиняет и спевает, и смысл есть. Но с ии настроен скептически: его суть - делать выводы на уже произошедшем или повторять произошедшее. Это упрощает такой вид деятельности, ее ведут некоторые люди, но это никак не развивает, что тоже делают люди, только другие
26 Волшебник
 
30.12.24
18:25
(25) Чушь какая-то! Какой вид деятельности делают люди, кроме просто жизни?
27 lEvGl
 
30.12.24
18:37
(26) смотря что понимать под просто жизнью. Федор Михалыч (ну например) тоже просто жил, как наверно он думал, а какой базис получили. Это справедливо для других сфер деятельности тоже, причем литература занимает далеко не первое место, это для примера. Именно этим и оперирует сейчас ии, выдавая квадроберам до дрожи глубокие мысли, книг то никто не открывал)
28 Волшебник
 
30.12.24
18:40
(27) Ну создайте новую ветку под Вашу мысль. Чё мы тут как бедние родственники на Новый год?
29 lEvGl
 
30.12.24
18:57
(28) уффф.. ну ок, сейчас новогодний матрас затяну к себе...
30 Волшебник
 
30.12.24
18:57
31 Волшебник
 
30.12.24
18:58
Учись, салага
32 lEvGl
 
30.12.24
19:44
.. затащил
33 Alien47
 
31.12.24
10:02
(7)
Как понять, что присвоено переменной Номенклатура? (вот в этой строке "запрос.УстановитьПараметр("Номенклатура",Номенклатура);")?
34 Дмитрий
 
31.12.24
10:09
(33) Откройте регистр сведений ЦеныНоменклатуры и посмотрите, какой тип у измерения Номенклатура. Затем установите параметр своего запроса значением такого же типа.

Пока что у Вас это не получилось.
35 Prog_man
 
31.12.24
10:12
(33) запрос.УстановитьПараметр("Номенклатура",Номенклатура)

второй параметр Номенклатура, откуда берешь?
какой у тебя документ? и где хранится ссылка на Номенклатуру?
в табличной части ?
36 Alien47
 
31.12.24
10:24
(34) Тип измерения СправочникСсылка.Номенклатура, если я правильно понимаю. Подскажите, пожалуйста, как установить параметр запроса значением того же типа?

(35) У меня документ ПоступлениеТоваровИУслуг. Номенклатура в табличной части Товары.
37 Волшебник
 
31.12.24
10:39
(36) Это неправильно.
38 Волшебник
 
31.12.24
10:46
Смотри, Катя. Я тебя сейчас научу.
Берёшь эту ветку и тыкаешь в лицо своему начальнику с фразой "Нужна отладка".

Дальше само разрулится
39 Prog_man
 
31.12.24
10:49
(36) примерно так
Для Каждого ТекСтрока из  Объект.Товары Цикл

Цена = ПолучитьЦену(ТекСтрока.Номенклатура);


КонецЦикла;

Функция ПолучитьЦену(Номенклатура) Экспорт
Отбор = Новый Структура("Номенклатура", Номенклатура);
Ресурсы = РегистрыСведений.ЦеныПродукции.ПолучитьПоследнее(Объект.Дата, Отбор);
Возврат Ресурсы.Цена;
КонецФункции
40 Волшебник
 
31.12.24
10:42
(39) фу, нет лесенки
41 Prog_man
 
31.12.24
10:44
если нужно при изменении номенклатуры, то такой вариант:

СтрокаТабличнойЧасти = Элементы.Товары.ТекущиеДанные;
    СтрокаТабличнойЧасти.Цена = ПолучитьЦену(СтрокаТабличнойЧасти.Номенклатура);
42 Prog_man
 
31.12.24
10:45
(40) соррян
43 Волшебник
 
31.12.24
10:45
(42) ладно...
44 Alien47
 
31.12.24
14:28
(39)
Большое Вам спасибо! Всё заработало.
45 Волшебник
 
31.12.24
14:56
(44) Сможете создать новую ветку?
46 Волшебник
 
01.01.25
11:53
(25) Слова песни я сочинил сам.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс