Имя: Пароль:
1C
1С v8
Как правильно ПолучитьПоследнее из регистра сведений
0 Artemy55
 
25.06.15
11:59
Такую ошибку выдал мне, при выборе номенклатуры в режиме предприятия. Понимаю, что вопрос неправильно задан, мало информации...


{ОбщийМодуль.РаботаСоСправочниками.Модуль(6)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)
    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
по причине:
Недопустимое значение параметра (параметр номер '2')
1 DTXqueque
 
25.06.15
12:00
>Понимаю, что вопрос неправильно задан, мало информации...
Верно понимаешь.
Вопрос то в чем?
2 Господин ПЖ
 
25.06.15
12:04
кривой отбор, что не ясно
3 D_E_S_131
 
25.06.15
12:05
Если ты программист, то смотри синтаксис по методу ПолучитьПоследнее() и проверяй, соответственно, в отладчике что у тебя попадает в в параметр "Отбор".
4 Mitriy
 
25.06.15
12:06
(2) не кривой, а вообще не отбор...
5 Адский плющ
 
25.06.15
12:28
(4) Не факт. Если в отборе присутствуют поля не соответствующие измерениям будет такая же картина.
6 Господин ПЖ
 
25.06.15
12:29
(4) это тоже туда инкапсулируется ;)
7 hhhh
 
25.06.15
12:32
(5) еще вариант: в отборе должно быть только одно измерение, а у автора несколько.
8 Ненавижу 1С
 
гуру
25.06.15
12:39
запросом делай
9 palpetrovich
 
25.06.15
12:48
(0) ежели это в типовой конфигурации  - вопрос к разработчикам, ежели сам наваял - сам понимаешь :)
10 Artemy55
 
26.06.15
12:37
мм...
Ну вот код

Функция РозничнаяЦена (АктуальнаяДата, ЭлементНоменклатуры) Экспорт
    // Создать воспомогательный объект "Отбор"
    Отбор = Новый Структура ("Номенклатура", ЭлементНоменклатуры);
    
    // Получить актуальны значения ресурсов регистра.
    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
    Возврат ЗначенияРесурсов.Цена;
КонецФункции


Вот ошибка из консоли, которую выдаёт, когда меняешь номенклатуру, должно подставить цену из регистра сведений, при выборе номенклатуры. Вроде...

{ОбщийМодуль.РаботаСоСправочниками.Модуль(6)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)
    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
по причине:
Недопустимое значение параметра (параметр номер '2')
Недопустимое значение параметра (параметр номер '2')
11 Enterprise
 
26.06.15
12:41
(10) "ЭлементНоменклатуры" это что?
12 Artemy55
 
26.06.15
12:56
(11) не знаю.. нету такой переменной в форме документа откуда запрашивает эту функцию. Эта функция в глоб.модулях. Конфигурация учебная, могу расшарить.
13 Mitriy
 
26.06.15
12:57
возможно, нужна не структура, а фиксированная структура...
14 mTema32
 
26.06.15
13:00
(0) Код похож на пример из книжки Радченко "Практическое пособие разработчика"
15 Мимохожий Однако
 
26.06.15
13:02
Традиционно: встань в конфигураторе на ошибку, запусти отладчик, посмотри, какое значение в ЭлементНоменклатуры
16 mTema32
 
26.06.15
13:03
(0) Все по книжке делал? Все галки там у модуля проставил?

В модул формы при изменении номенклатуры так?

// Получить текущую строку табличной части.
СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;

// Установить цену.
СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);
17 Artemy55
 
26.06.15
13:05
(14) Да, именно оно, по 8.3
18 Artemy55
 
26.06.15
13:06
(15) Тыкаюсь. Забыл как вызвать это окно в отладчике....
19 Artemy55
 
26.06.15
13:07
(16) Да, вот так

    СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
    
    // Установить цену.
    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);
20 AllJoke
 
26.06.15
13:10
(18) Shift+F9
21 AllJoke
 
26.06.15
13:13
+ (20) либо в Конфигураторе меню Отладка - Вычислить выражение
22 Artemy55
 
26.06.15
13:15
ЭлементНоменклатуры – ссылка на элемент справочника Номен-
клатура, для которого мы хотим получить розничную цену.

я не знаю каким образом эта ссылка задана, я не писал таокго в коде и в свойствах тоже нигде не прописывал... не понятно..
23 hhhh
 
26.06.15
13:18
ошибка не здесь: Функция РозничнаяЦена покажи как вызываешь.
24 Artemy55
 
26.06.15
13:19
(23)

&НаКлиенте
Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)
    // Получить текущую строку табличной части.
    СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
    
    // Установить цену.
    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);
    
    // Пересчитать сумму строки.
    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
25 Artemy55
 
26.06.15
13:25
26 Mitriy
 
26.06.15
13:31
Отбор = Новый Структура ("Измерение1", ЭлементНоменклатуры);
27 Artemy55
 
26.06.15
14:08
(26) Что это значит?
28 Mitriy
 
26.06.15
14:11
(27) это значит, что измерение у тебя не "Номенклатура"
29 Artemy55
 
28.06.15
13:32
(28) Ну не знаю.. всё равно не понятно



Функция РозничнаяЦена (АктуальнаяДата, ЭлементНоменклатуры) Экспорт
    // Создать воспомогательный объект "Отбор"
    Отбор = Новый Структура ("Номенклатура", ЭлементНоменклатуры);
    
    // Получить актуальны значения ресурсов регистра.
    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
    Возврат ЗначенияРесурсов.Цена;
КонецФункции
30 Рэйв
 
28.06.15
14:16
(29)Если не можешь, ну запросом тогда.
Если конечно ты и про запросы ветку не поднимешь...
31 hhhh
 
28.06.15
15:43
(29) В регистре сведений Цены у тебя нет поля Номенклатура. Посмотри внимательнее на этот регистр.
32 Artemy55
 
28.06.15
17:01
(31) Я не дал название измерению Номенклатура в регистре  сведений, забыл просто. Спасибо, исправил свою ошибку, всё заработало))
33 ДенисЧ
 
28.06.15
17:06
Гениально....
34 Loki Evil
 
28.06.15
18:21
Могу посоветовать не использовать объектную модель для чтения данных воооооообще, а использовать запросы и особенно конструктор запросов - никаких таких проблем бы не возникло, сразу же бы увидели в конструкторе, что с таблицей регистра беда.
Скорость работы запросов на уровне, а за счет более тонкой фильтрации данных часто удается отобрать лучше и в итоге работает намного быстрее. Это не говоря о запросах по нескольким таблицам.