|
функция выборки значения свойства 🠗 (Волшебник 30.10.2017 14:16) | ☑ | ||
---|---|---|---|---|
0
gurni
30.10.17
✎
12:21
|
Подскажите, где мой косяк
из процедуры обращаюсь к функции НоваяСтрока.ТекущийСтатус = ПолучитьЗначениеСвойства(Выборка.Номенклатура,"Статус"); сама функция Функция ПолучитьЗначениеСвойства(Объект,Свойство) Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЗначенияСвойствОбъектов.Значение как ЗначениеСвойства |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Объект | И ЗначенияСвойствОбъектов.Свойство = &Свойство"; Запрос.УстановитьПараметр("Объект", Объект); Запрос.УстановитьПараметр("Свойство", Свойство); Выборка=Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() тогда Возврат Выборка.ЗначениеСвойства; КонецЕсли; Возврат Неопределено; КонецФункции Но значения не получаю |
|||
1
Волшебник
модератор
30.10.17
✎
12:22
|
1) неверно заданы параметры
2) в регистре нет этого свойства |
|||
2
VladZ
30.10.17
✎
12:23
|
(0) Какой тип должен быть у "Свойство"?
|
|||
3
yzimin
30.10.17
✎
12:24
|
(0) неверный тип - "Статус"
ПолучитьЗначениеСвойства(Выборка.Номенклатура,"Статус") надо не строку передавать, а план видов хар-тик |
|||
4
gurni
30.10.17
✎
12:32
|
подскажите как мне передать Статус?
|
|||
5
gurni
30.10.17
✎
12:43
|
(3) подскажите как плиз
|
|||
6
rudnitskij
30.10.17
✎
13:16
|
(5) Запрос.УстановитьПараметр("Свойство", Свойство);
Свойство должно иметь тип значения ПланыВидовХарактеристик, а не строка, написали же в (3) |
|||
7
yzimin
30.10.17
✎
13:17
|
Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статус");
|
|||
8
gurni
30.10.17
✎
13:23
|
(7) спасибо
|
|||
9
gurni
30.10.17
✎
13:36
|
хмм только функция не возвращает значение((
все пусто, хотя прогоняю запрос с параметрами значение есть |
|||
10
gurni
30.10.17
✎
13:48
|
(7)
хмм только функция не возвращает значение(( все пусто, хотя прогоняю запрос с параметрами значение есть |
|||
11
Волшебник
модератор
30.10.17
✎
13:59
|
(9) Воспользуйтесь Отладчиком.
|
|||
12
СамыйУмный
30.10.17
✎
14:05
|
(11) А что, так можно?
|
|||
13
gurni
30.10.17
✎
14:05
|
(11) я посмотрел
в табло строка Выборка=Запрос.Выполнить().Выбрать(); выдает Ошибка чтения значения |
|||
14
Волшебник
модератор
30.10.17
✎
14:08
|
(13) Продолжайте наблюдения.
|
|||
15
СамыйУмный
30.10.17
✎
14:10
|
(13) Ты забыл - Выборка.Следующий()
|
|||
16
gurni
30.10.17
✎
14:14
|
(15) Если Выборка.Следующий() тогда
переходит сразу на КонецЕсли |
|||
17
Волшебник
модератор
30.10.17
✎
14:16
|
(16) Значит выборка пустая, т.е. запрос ничего не выбрал, а значит неверные параметры. И мы возвращаемся к (1).
|
|||
18
yzimin
30.10.17
✎
14:17
|
(16) значит неправильно задал параметры
|
|||
19
gurni
30.10.17
✎
14:18
|
(17) но ведь в консоле запросов запрос выдал значение, с пармаметрами которые я передаю
|
|||
20
Волшебник
модератор
30.10.17
✎
14:20
|
(19) Значит не с теми. Чудес не бывает.
|
|||
21
gurni
30.10.17
✎
14:21
|
Функция ПолучитьЗначениеСвойства(Объект,Свойство)
Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЗначенияСвойствОбъектов.Значение как ЗначениеСвойства |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Объект | И ЗначенияСвойствОбъектов.Свойство = &Свойство"; Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Статус"); Запрос.УстановитьПараметр("Объект", Объект); Запрос.УстановитьПараметр("Свойство", Свойство); Выборка=Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() тогда Возврат Выборка.ЗначениеСвойства; КонецЕсли; Возврат Неопределено; КонецФункции Объект у меня в процедуре определяется НоваяСтрока.ТекущийСтатус = ПолучитьЗначениеСвойства(Выборка.Номенклатура,Свойство); |
|||
22
gurni
30.10.17
✎
14:25
|
отличие в строке
Свойство = ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.НайтиПоНаименованию("Статус"); так предлагали Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Статус"); в УТ ДополнительныеРеквизитыИСведения этого нет в ПланыВидовХарактеристик |
|||
23
Волшебник
модератор
30.10.17
✎
14:33
|
(21) пахнет запросом в цикле
|
|||
24
gurni
30.10.17
✎
14:42
|
(23) куда копать?
|
|||
25
gurni
30.10.17
✎
14:54
|
(23) в процедуре идет заполнение ТЗ
Пока Выборка.Следующий() Цикл НоваяСтрока=Список.Добавить(); НоваяСтрока.Артикул = Выборка.Артикул; НоваяСтрока.Номенклатура = Выборка.Номенклатура; НоваяСтрока.ДатаПоследнегоПрихода = Выборка.ДатаПрих; НоваяСтрока.ТекущаяДата = ТекДата; НоваяСтрока.КолвоДней = (НачалоДня(ТекДата) - НачалоДня(Выборка.ДатаПрих)) / (60 * 60 * 24); НоваяСтрока.Склад = Выборка.Склад; НоваяСтрока.ТекущийСтатус = ПолучитьЗначениеСвойства(Выборка.Номенклатура,Свойство); КонецЦикла; и из него идет обращение к функции, чтобы получить статус |
|||
26
Saari
30.10.17
✎
15:22
|
Попробуй такой запрос:
Запрос.Текст = "ВЫБРАТЬ | ЗначенияСвойствОбъектов.Значение |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов | ПО ЗначенияСвойствОбъектов.Свойство = СвойстваОбъектов.Ссылка |ГДЕ | ЗначенияСвойствОбъектов.Объект = &ВыбОбъект | И СвойстваОбъектов.Ссылка = &ВыбСвойство"; Запрос.УстановитьПараметр("ВыбОбъект", ВыбОбъект); Запрос.УстановитьПараметр("ВыбСвойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ВыбСвойство)); |
|||
27
Saari
30.10.17
✎
15:44
|
Получилось?
|
|||
28
gurni
30.10.17
✎
15:53
|
(27) нет(
|
|||
29
Saari
30.10.17
✎
15:57
|
(28) а поконкретнее? у меня этот запрос успешно работает
|
|||
30
Saari
30.10.17
✎
15:58
|
ВыбОбъект - это ссылка на элемент справочника.
ВыбСвойство - это наименование свойства элемента справочника (строка) |
|||
31
Saari
30.10.17
✎
15:59
|
далее написать:
Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда; Возврат Выборка.Значение; КонецЕсли; |
|||
32
gurni
30.10.17
✎
16:00
|
(31) в функции все так и написано
Функция ПолучитьЗначениеСвойства(Объект,Свойство) Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЗначенияСвойствОбъектов.Значение как ЗначениеСвойства |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Объект | И ЗначенияСвойствОбъектов.Свойство = &Свойство"; Запрос.УстановитьПараметр("Объект", Объект); Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Статус")); Выборка=Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() тогда Возврат Выборка.ЗначениеСвойства; КонецЕсли; Возврат Неопределено; КонецФункции |
|||
33
Saari
30.10.17
✎
16:02
|
(32) нет, не так написано.
обрати внимание на мой запрос. Там идет соединение с планом вида характеристик. У тебя не такой запрос. |
|||
34
gurni
30.10.17
✎
16:06
|
(33) пусто
Функция ПолучитьЗначениеСвойства(Объект,Свойство) Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЗначенияСвойствОбъектов.Значение |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов | ПО ЗначенияСвойствОбъектов.Свойство = СвойстваОбъектов.Ссылка |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Объект | И СвойстваОбъектов.Ссылка = &Свойство"; Запрос.УстановитьПараметр("Объект", Объект); Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Статус")); Выборка=Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() тогда Возврат Выборка.ЗначениеСвойства; КонецЕсли; Возврат Неопределено; КонецФункции |
|||
35
Saari
30.10.17
✎
16:08
|
свойство объекта должно иметь наименование "Статус". МОжет там пробел лишний (в наименовании свойства)?
у меня эта функция успешно работает. проверено. |
|||
36
Saari
30.10.17
✎
16:11
|
(35) Объект - это ссылка на элемент.
|
|||
37
gurni
30.10.17
✎
16:18
|
(36) вот как у меня это сейчас
в процедуре Пока Выборка.Следующий() Цикл НоваяСтрока=Список.Добавить(); НоваяСтрока.Артикул = Выборка.Артикул; НоваяСтрока.Номенклатура = Выборка.Номенклатура; НоваяСтрока.ДатаПоследнегоПрихода = Выборка.ДатаПрих; НоваяСтрока.ТекущаяДата = ТекДата; НоваяСтрока.КолвоДней = (НачалоДня(ТекДата) - НачалоДня(Выборка.ДатаПрих)) / (60 * 60 * 24); НоваяСтрока.Склад = Выборка.Склад; НоваяСтрока.ТекущийСтатус = ПолучитьЗначениеСвойства(Выборка.Номенклатура,Свойство); КонецЦикла; идет обращение к функции Функция ПолучитьЗначениеСвойства(Объект,Свойство) Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ЗначенияСвойствОбъектов.Значение |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов | ПО ЗначенияСвойствОбъектов.Свойство = СвойстваОбъектов.Ссылка |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Объект | И СвойстваОбъектов.Ссылка = &Свойство"; Запрос.УстановитьПараметр("Объект", Объект); Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Статус")); Выборка=Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() тогда Возврат Выборка.ЗначениеСвойства; КонецЕсли; Возврат Неопределено; КонецФункции |
|||
38
gurni
30.10.17
✎
16:19
|
может беда в том, что мой объект имеет конкретное значение а не ссылку
|
|||
39
gurni
30.10.17
✎
16:19
|
как тогда сделать?
|
|||
40
Saari
30.10.17
✎
16:22
|
(39) Выборка.Номенклатура - это что? ссылка, объект, наименование (строка)?
Нужен текст запроса, который формирует Выборку, по которой цикл происходит. |
|||
41
gurni
30.10.17
✎
16:24
|
в процедуре сделал так
ссылкаНом = Справочники.Номенклатура.НайтиПоНаименованию(Выборка.Номенклатура).Ссылка; НоваяСтрока.ТекущийСтатус = ПолучитьЗначениеСвойства(ссылкаНом,Свойство); и все пошло |
|||
42
gurni
30.10.17
✎
16:27
|
(40) А есть функция для записи свойства?
с функцией чтения с Вашей помощью разобрался |
|||
43
Saari
30.10.17
✎
16:29
|
(42) готового решения нет.
|
|||
44
gurni
30.10.17
✎
16:33
|
(43) а по такому принципу получиться?
ВидСвойства = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию(ИмяСвойства); Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); Запись.Прочитать(); Запись.Объект = Номенклатура; Запись.Свойство = ВидСвойства; Запись.Значение = ExcelЛист.Cells(Row, сч).Value; Запись.Записать(); |
|||
45
Saari
30.10.17
✎
16:37
|
(44) могу только сказать: попробуй.
|
|||
46
gurni
30.10.17
✎
16:48
|
(45) если будет напряг напишу
спасибо за советы |
|||
47
gurni
30.10.17
✎
17:36
|
сделал без функции
Процедура ДействияФормыСменить(Кнопка) // Вставить содержимое обработчика. Для ТекСтрока = 0 По ЭлементыФормы.Список.Значение.Количество() Цикл арт = Список[ТекСтрока].Артикул; наим = Список[ТекСтрока].Номенклатура; стат = Список[ТекСтрока].ТекущийСтатус; дней = Список[ТекСтрока].КолвоДней; смен = Список[ТекСтрока].Замена; Если стат = "Новинка" и дней > 15 и смен = Истина Тогда ВидСвойства = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Статус"); Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); Запись.Прочитать(); Запись.Объект = Справочники.Номенклатура.НайтиПоНаименованию(наим).Ссылка; Запись.Свойство = ВидСвойства; Запись.Значение = "Базовый"; Запись.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры но в конце работы выдает ошибку {ВнешняяОбработка.АнализСтатусаНоменклатуры.Форма.Форма.Форма(94)}: Индекс находится за границами массива арт = Список[ТекСтрока].Артикул; |
|||
48
gurni
31.10.17
✎
09:44
|
все сделал
Для ТекСтрока = 0 По ЭлементыФормы.Список.Значение.Количество()-1 Цикл надо было так |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |