Ошибка при вызове метода контекста получитьпоследнее

Как правильно ПолучитьПоследнее из регистра сведений

Я
   Artemy55

25.06.15 — 11:59

Такую ошибку выдал мне, при выборе номенклатуры в режиме предприятия. Понимаю, что вопрос неправильно задан, мало информации…

{ОбщийМодуль.РаботаСоСправочниками.Модуль(6)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

   DTXqueque

1 — 25.06.15 — 12:00

>Понимаю, что вопрос неправильно задан, мало информации…

Верно понимаешь.

Вопрос то в чем?

   Господин ПЖ

2 — 25.06.15 — 12:04

кривой отбор, что не ясно

   D_E_S_131

3 — 25.06.15 — 12:05

Если ты программист, то смотри синтаксис по методу ПолучитьПоследнее() и проверяй, соответственно, в отладчике что у тебя попадает в в параметр «Отбор».

   Mitriy

4 — 25.06.15 — 12:06

(2) не кривой, а вообще не отбор…

   Адский плющ

5 — 25.06.15 — 12:28

(4) Не факт. Если в отборе присутствуют поля не соответствующие измерениям будет такая же картина.

   Господин ПЖ

6 — 25.06.15 — 12:29

(4) это тоже туда инкапсулируется ;)

   hhhh

7 — 25.06.15 — 12:32

(5) еще вариант: в отборе должно быть только одно измерение, а у автора несколько.

   Ненавижу 1С

8 — 25.06.15 — 12:39

запросом делай

   palpetrovich

9 — 25.06.15 — 12:48

(0) ежели это в типовой конфигурации  — вопрос к разработчикам, ежели сам наваял — сам понимаешь :)

   Artemy55

10 — 26.06.15 — 12:37

мм…

Ну вот код

Функция РозничнаяЦена (АктуальнаяДата, ЭлементНоменклатуры) Экспорт

    // Создать воспомогательный объект «Отбор»

    Отбор = Новый Структура («Номенклатура», ЭлементНоменклатуры);

    
    // Получить актуальны значения ресурсов регистра.

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

    Возврат ЗначенияРесурсов.Цена;

КонецФункции

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

{ОбщийМодуль.РаботаСоСправочниками.Модуль(6)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

Недопустимое значение параметра (параметр номер ‘2’)

   Enterprise

11 — 26.06.15 — 12:41

(10) «ЭлементНоменклатуры» это что?

   Artemy55

12 — 26.06.15 — 12:56

(11) не знаю.. нету такой переменной в форме документа откуда запрашивает эту функцию. Эта функция в глоб.модулях. Конфигурация учебная, могу расшарить.

   Mitriy

13 — 26.06.15 — 12:57

возможно, нужна не структура, а фиксированная структура…

   mTema32

14 — 26.06.15 — 13:00

(0) Код похож на пример из книжки Радченко «Практическое пособие разработчика»

   МимохожийОднако

15 — 26.06.15 — 13:02

Традиционно: встань в конфигураторе на ошибку, запусти отладчик, посмотри, какое значение в ЭлементНоменклатуры

   mTema32

16 — 26.06.15 — 13:03

(0) Все по книжке делал? Все галки там у модуля проставил?

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

// Получить текущую строку табличной части.

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

// Установить цену.

СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

   Artemy55

17 — 26.06.15 — 13:05

(14) Да, именно оно, по 8.3

   Artemy55

18 — 26.06.15 — 13:06

(15) Тыкаюсь. Забыл как вызвать это окно в отладчике….

   Artemy55

19 — 26.06.15 — 13:07

(16) Да, вот так

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

    
    // Установить цену.

    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

   AllJoke

20 — 26.06.15 — 13:10

(18) Shift+F9

   AllJoke

21 — 26.06.15 — 13:13

+ (20) либо в Конфигураторе меню Отладка — Вычислить выражение

   Artemy55

22 — 26.06.15 — 13:15

ЭлементНоменклатуры – ссылка на элемент справочника Номен-

клатура, для которого мы хотим получить розничную цену.

я не знаю каким образом эта ссылка задана, я не писал таокго в коде и в свойствах тоже нигде не прописывал… не понятно..

   hhhh

23 — 26.06.15 — 13:18

ошибка не здесь: Функция РозничнаяЦена покажи как вызываешь.

   Artemy55

24 — 26.06.15 — 13:19

(23)

&НаКлиенте

Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)

    // Получить текущую строку табличной части.

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

    
    // Установить цену.

    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

    
    // Пересчитать сумму строки.

    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

КонецПроцедуры

   Artemy55

25 — 26.06.15 — 13:25

   Mitriy

26 — 26.06.15 — 13:31

Отбор = Новый Структура («Измерение1», ЭлементНоменклатуры);

   Artemy55

27 — 26.06.15 — 14:08

(26) Что это значит?

   Mitriy

28 — 26.06.15 — 14:11

(27) это значит, что измерение у тебя не «Номенклатура»

   Artemy55

29 — 28.06.15 — 13:32

(28) Ну не знаю.. всё равно не понятно

Функция РозничнаяЦена (АктуальнаяДата, ЭлементНоменклатуры) Экспорт

    // Создать воспомогательный объект «Отбор»

    Отбор = Новый Структура («Номенклатура», ЭлементНоменклатуры);

    
    // Получить актуальны значения ресурсов регистра.

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

    Возврат ЗначенияРесурсов.Цена;

КонецФункции

   Рэйв

30 — 28.06.15 — 14:16

(29)Если не можешь, ну запросом тогда.

Если конечно ты и про запросы ветку не поднимешь…

   hhhh

31 — 28.06.15 — 15:43

(29) В регистре сведений Цены у тебя нет поля Номенклатура. Посмотри внимательнее на этот регистр.

   Artemy55

32 — 28.06.15 — 17:01

(31) Я не дал название измерению Номенклатура в регистре  сведений, забыл просто. Спасибо, исправил свою ошибку, всё заработало))

   ДенисЧ

33 — 28.06.15 — 17:06

Гениально….

  

Loki Evil

34 — 28.06.15 — 18:21

Могу посоветовать не использовать объектную модель для чтения данных воооооообще, а использовать запросы и особенно конструктор запросов — никаких таких проблем бы не возникло, сразу же бы увидели в конструкторе, что с таблицей регистра беда.

Скорость работы запросов на уровне, а за счет более тонкой фильтрации данных часто удается отобрать лучше и в итоге работает намного быстрее. Это не говоря о запросах по нескольким таблицам.

Как правильно ПолучитьПоследнее из регистра сведений

Я

  

Artemy55

25.06.15 — 11:59

Такую ошибку выдал мне, при выборе номенклатуры в режиме предприятия. Понимаю, что вопрос неправильно задан, мало информации…

{ОбщийМодуль.РаботаСоСправочниками.Модуль(6)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

  

DTXqueque

1 — 25.06.15 — 12:00

>Понимаю, что вопрос неправильно задан, мало информации…

Верно понимаешь.

Вопрос то в чем?

  

Господин ПЖ

2 — 25.06.15 — 12:04

кривой отбор, что не ясно

  

D_E_S_131

3 — 25.06.15 — 12:05

Если ты программист, то смотри синтаксис по методу ПолучитьПоследнее() и проверяй, соответственно, в отладчике что у тебя попадает в в параметр «Отбор».

  

Mitriy

4 — 25.06.15 — 12:06

(2) не кривой, а вообще не отбор…

  

Адский плющ

5 — 25.06.15 — 12:28

(4) Не факт. Если в отборе присутствуют поля не соответствующие измерениям будет такая же картина.

  

Господин ПЖ

6 — 25.06.15 — 12:29

(4) это тоже туда инкапсулируется ;)

  

hhhh

7 — 25.06.15 — 12:32

(5) еще вариант: в отборе должно быть только одно измерение, а у автора несколько.

  

Ненавижу 1С

8 — 25.06.15 — 12:39

запросом делай

  

palpetrovich

9 — 25.06.15 — 12:48

(0) ежели это в типовой конфигурации  — вопрос к разработчикам, ежели сам наваял — сам понимаешь :)

  

Artemy55

10 — 26.06.15 — 12:37

Функция РозничнаяЦена (АктуальнаяДата, ЭлементНоменклатуры) Экспорт

    // Создать воспомогательный объект «Отбор»

    Отбор = Новый Структура («Номенклатура», ЭлементНоменклатуры);

    

    // Получить актуальны значения ресурсов регистра.

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

    Возврат ЗначенияРесурсов.Цена;

КонецФункции

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

{ОбщийМодуль.РаботаСоСправочниками.Модуль(6)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

Недопустимое значение параметра (параметр номер ‘2’)

  

Enterprise

11 — 26.06.15 — 12:41

(10) «ЭлементНоменклатуры» это что?

  

Artemy55

12 — 26.06.15 — 12:56

(11) не знаю.. нету такой переменной в форме документа откуда запрашивает эту функцию. Эта функция в глоб.модулях. Конфигурация учебная, могу расшарить.

  

Mitriy

13 — 26.06.15 — 12:57

возможно, нужна не структура, а фиксированная структура…

  

mTema32

14 — 26.06.15 — 13:00

(0) Код похож на пример из книжки Радченко «Практическое пособие разработчика»

  

МимохожийОднако

15 — 26.06.15 — 13:02

Традиционно: встань в конфигураторе на ошибку, запусти отладчик, посмотри, какое значение в ЭлементНоменклатуры

  

mTema32

16 — 26.06.15 — 13:03

(0) Все по книжке делал? Все галки там у модуля проставил?

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

// Получить текущую строку табличной части.

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

// Установить цену.

СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

  

Artemy55

17 — 26.06.15 — 13:05

(14) Да, именно оно, по 8.3

  

Artemy55

18 — 26.06.15 — 13:06

(15) Тыкаюсь. Забыл как вызвать это окно в отладчике….

  

Artemy55

19 — 26.06.15 — 13:07

(16) Да, вот так

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

    

    // Установить цену.

    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

  

AllJoke

20 — 26.06.15 — 13:10

(18) Shift+F9

  

AllJoke

21 — 26.06.15 — 13:13

+ (20) либо в Конфигураторе меню Отладка — Вычислить выражение

  

Artemy55

22 — 26.06.15 — 13:15

ЭлементНоменклатуры – ссылка на элемент справочника Номен-

клатура, для которого мы хотим получить розничную цену.

я не знаю каким образом эта ссылка задана, я не писал таокго в коде и в свойствах тоже нигде не прописывал… не понятно..

  

hhhh

23 — 26.06.15 — 13:18

ошибка не здесь: Функция РозничнаяЦена покажи как вызываешь.

  

Artemy55

24 — 26.06.15 — 13:19

(23)

&НаКлиенте

Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)

    // Получить текущую строку табличной части.

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

    

    // Установить цену.

    СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

    

    // Пересчитать сумму строки.

    РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

КонецПроцедуры

  

Artemy55

25 — 26.06.15 — 13:25

  

Mitriy

26 — 26.06.15 — 13:31

Отбор = Новый Структура («Измерение1», ЭлементНоменклатуры);

  

Artemy55

27 — 26.06.15 — 14:08

(26) Что это значит?

  

Mitriy

28 — 26.06.15 — 14:11

(27) это значит, что измерение у тебя не «Номенклатура»

  

Artemy55

29 — 28.06.15 — 13:32

(28) Ну не знаю.. всё равно не понятно

Функция РозничнаяЦена (АктуальнаяДата, ЭлементНоменклатуры) Экспорт

    // Создать воспомогательный объект «Отбор»

    Отбор = Новый Структура («Номенклатура», ЭлементНоменклатуры);

    

    // Получить актуальны значения ресурсов регистра.

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

    Возврат ЗначенияРесурсов.Цена;

КонецФункции

  

Рэйв

30 — 28.06.15 — 14:16

(29)Если не можешь, ну запросом тогда.

Если конечно ты и про запросы ветку не поднимешь…

  

hhhh

31 — 28.06.15 — 15:43

(29) В регистре сведений Цены у тебя нет поля Номенклатура. Посмотри внимательнее на этот регистр.

  

Artemy55

32 — 28.06.15 — 17:01

(31) Я не дал название измерению Номенклатура в регистре  сведений, забыл просто. Спасибо, исправил свою ошибку, всё заработало))

  

ДенисЧ

33 — 28.06.15 — 17:06

Гениально….

  

Loki Evil

34 — 28.06.15 — 18:21

Могу посоветовать не использовать объектную модель для чтения данных воооооообще, а использовать запросы и особенно конструктор запросов — никаких таких проблем бы не возникло, сразу же бы увидели в конструкторе, что с таблицей регистра беда.

Скорость работы запросов на уровне, а за счет более тонкой фильтрации данных часто удается отобрать лучше и в итоге работает намного быстрее. Это не говоря о запросах по нескольким таблицам.

Ошибка при вызове метода контекста(?)

Автор Damates, 18 дек 2012, 20:30

0 Пользователей и 1 гость просматривают эту тему.

Есть такой код:

НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);//находит
ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,НайтиТО);
Сообщить(ЗначениеТО.Ресурс1);//ресурс в регистре сведений

Выдает ошибку:
{Справочник.Лицевые.Форма.ФормаСписка.Форма(79)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)
      ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,НайтиТО);
по причине:
Несоответствие типов (параметр номер ‘2’)

Измерение в регистре сведений берется из справочника Тарифы. В чем проблема? Подскажите , пожалуйста!


Второй параметр должен быть: (И снова приходиться цитировать СП… =( , ну неужели клавиша F1 на клавиатуре заблокирована)
ПолучитьПоследнее (GetLast)
Синтаксис:

ПолучитьПоследнее(<КонецПериода>, <Отбор>)
Параметры:

<КонецПериода> (необязательный)

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, по который необходимо получить значения ресурсов. Может задаваться значениями типа Дата, МоментВремени или Граница. Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
<Отбор> (необязательный)

Тип: Структура.
Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.

Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


Спасибо! Все понял Сделал так:

НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);
      //Сообщить(НайтиТО);
      Тариф = Новый Структура;
      Тариф.Вставить(«Тариф», НайтиТО);
      ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,Тариф);
      Сообщить(ЗначениеТО.Ресурс1);
Фишка: Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.


medved62

19 / 0 / 0

Регистрация: 08.10.2013

Сообщений: 27

1

Ошибка при выполнении

21.05.2014, 23:37. Показов 2298. Ответов 3

Метки нет (Все метки)


Новичок в изучении 1С Ошибка:
{ОбщийМодуль.РаботаСоСправочниками.Модуль(6)}: Ошибка при вызове метода контекста (ПолучитьПоследнее): Недопустимое значение параметра (параметр номер ‘2’)
ЗначенияРесурсов=РегистрыСведений.ЦеныНаУслуги.Пол учитьПоследнее(АктуальнаяДата,Отбор);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Сама функция:

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

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

22.05.2014, 00:02

2

отбор кривой. Отладчиком попользуйтесь.
конфа самописная? Форма толстая?

0

19 / 0 / 0

Регистрация: 08.10.2013

Сообщений: 27

26.05.2014, 19:42

 [ТС]

3

Пользуюсь отладчиком, так как не силен в 1С , конфа самописная, а форму как посмотреть, если клиент то автоматически

0

2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

26.05.2014, 21:05

4

Цитата
Сообщение от medved62
Посмотреть сообщение

Пользуюсь отладчиком

ну так и посмотрите, что из себя представляет Отбор

Цитата
Сообщение от medved62
Посмотреть сообщение

так как не силен в 1С

ну раз пользуетесь отладчиком — напрягитесь, погуглите по разделу — есть в темах ссылки на мануалы

Цитата
Сообщение от medved62
Посмотреть сообщение

а форму как посмотреть, если клиент то автоматически

есть ещё режим: управляемый, обычный. Смотреть в конфигураторе, ПКМ на форме — документа, например — Свойства, там тип формы.
В модуле тонкой (управляемой) формы есть слова &НаКлиенте, &НаСервере.

В каком объекте при каком событии возникла ошибка?

0

sergson
12.07.2015 19:19 Прочитано: 2757

Ошибка 

{Документ.РеализацияТоваровИУслуг.Форма.ФормаДокумента.Форма(23)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)

ЦенаТовара = РегистрыСведений.Цены.ПолучитьПоследнее(,Отбор);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

Код 1C v 8.х

 &НаКлиенте
Процедура ТоварНоменклатураПриИзменении(Элемент)
РасчетСтроки();
СтрокаТабличнойЧасти = ЭлементыФормы.Товар.ТекущиеДанные;
Номенклатура = СтрокаТабличнойЧасти.Номенклатура;
ТипЦен = Контрагент.Договор.ТипЦен;
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура",Номенклатура);
Отбор.Вставить("ТипЦен",ТипЦен);
ЦенаТовара = РегистрыСведений.Цены.ПолучитьПоследнее(,Отбор);
СтрокаТабличнойЧасти.Цена = ЦенаТовара.Цена;
КонецПроцедуры
Yandex
Возможно, вас также заинтересует

Реклама на портале

IBReiter
13.07.2015 10:51 Ответ № 1

Вам нужно проверить, что в отбор попадает.

И сверить имена измерений регистра и полей отбора структуры

E_Migachev
13.07.2015 10:58 Ответ № 2

Вот Как получить последнее значение регистра сведений?

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

sergson
13.07.2015 18:14 Ответ № 3

Пробывал без ТипЦен или без Номенклатура ошибка та же

IBReiter
14.07.2015 09:25 Ответ № 4

Отбор — это: «Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение».

Возвращаемое значение: «Структура, содержащую значения ресурсов».

Вы пытаетесь передать значения ресурсов, чтобы получить измерение, а нужно делать наоборот.

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

all4cf
14.07.2015 11:54 Ответ № 5

 Как-то регистр наоборот, конфа самописная?

sergson
17.07.2015 12:12 Ответ № 6

sergson
17.07.2015 12:13 Ответ № 7

Большое спасибо все заработало, помогло сообщение — 

Отбор — это: «Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение».Возвращаемое значение: «Структура, содержащую значения ресурсов».Вы пытаетесь передать значения ресурсов, чтобы получить измерение, а нужно делать наоборот.

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

Подсказка: Для выделения Кода используйте (в редакторе).

А что значит «использован неправильный подход к именованию реквизитов» ?

Я изменил код, чтоб точно присвоить ТекТовар типа СправочникСсылка.Номенклатура:

Процедура ДопЭлементыНаименованиеПриИзменении(Элемент)
ТекСтрока = ЭлементыФормы.ДопЭлементы.ТекущиеДанные;
ТекТоварНаим = ТекСтрока.Наименование;
ТекТовар = Справочники.Номенклатура.НайтиПоНаименованию(ТекТоварНаим);
ЦенаТовара = РегистрыСведений.Цены.ПолучитьПоследнее(ТекТовар);
ТекСтрока.Цена = ЦенаТовара;
КонецПроцедуры

Выдаёт ошибку: Ошибка при вызове метода контекста (ПолучитьПоследнее): Несоответствие типов (параметр номер «»1″»)
   ЦенаТовара = РегистрыСведений.Цены.ПолучитьПоследнее(ТекТовар);

Что не так?  Не понял

Добавлено через 49 минут и 3 секунды:
Всё прочитал. Разобрался. Всё получилось. Всем спабо.

Необходимо было сделать так:

Процедура ДопЭлементыНаименованиеПриИзменении(Элемент)
ТекСтрока = ЭлементыФормы.ДопЭлементы.ТекущиеДанные;
ТекТовар = ТекСтрока.Наименование;
Отбор = Новый Структура(«Товар»,ТекТовар);
ЦенаТовара = РегистрыСведений.Цены.ПолучитьПоследнее(,Отбор);
ТекСтрока.Цена = ЦенаТовара.Цена;
КонецПроцедуры

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


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

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


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

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник

Рис.3 Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

sergson
12.07.2015 19:19 Прочитано: 2925

Ошибка 

{Документ.РеализацияТоваровИУслуг.Форма.ФормаДокумента.Форма(23)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)

ЦенаТовара = РегистрыСведений.Цены.ПолучитьПоследнее(,Отбор);

по причине:

Недопустимое значение параметра (параметр номер ‘2’)

Код 1C v 8.х

 &НаКлиенте
Процедура ТоварНоменклатураПриИзменении(Элемент)
РасчетСтроки();
СтрокаТабличнойЧасти = ЭлементыФормы.Товар.ТекущиеДанные;
Номенклатура = СтрокаТабличнойЧасти.Номенклатура;
ТипЦен = Контрагент.Договор.ТипЦен;
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура",Номенклатура);
Отбор.Вставить("ТипЦен",ТипЦен);
ЦенаТовара = РегистрыСведений.Цены.ПолучитьПоследнее(,Отбор);
СтрокаТабличнойЧасти.Цена = ЦенаТовара.Цена;
КонецПроцедуры
Yandex
Возможно, вас также заинтересует

Реклама на портале

IBReiter
13.07.2015 10:51 Ответ № 1

Вам нужно проверить, что в отбор попадает.

И сверить имена измерений регистра и полей отбора структуры

E_Migachev
13.07.2015 10:58 Ответ № 2

Вот Как получить последнее значение регистра сведений?

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

sergson
13.07.2015 18:14 Ответ № 3

Пробывал без ТипЦен или без Номенклатура ошибка та же

IBReiter
14.07.2015 09:25 Ответ № 4

Отбор — это: «Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение».

Возвращаемое значение: «Структура, содержащую значения ресурсов».

Вы пытаетесь передать значения ресурсов, чтобы получить измерение, а нужно делать наоборот.

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

all4cf
14.07.2015 11:54 Ответ № 5

 Как-то регистр наоборот, конфа самописная?

sergson
17.07.2015 12:12 Ответ № 6

sergson
17.07.2015 12:13 Ответ № 7

Большое спасибо все заработало, помогло сообщение — 

Отбор — это: «Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение».Возвращаемое значение: «Структура, содержащую значения ресурсов».Вы пытаетесь передать значения ресурсов, чтобы получить измерение, а нужно делать наоборот.

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

Подсказка: Вы получили ответ на свой вопрос — закройте вопрос!
Tais80

Новенький

kz
Offline Offline


Доброго всем суток! Вот решилась на ответственный шаг изучения программирования 1С бухгалтерии. Мне как новичку предложили учитЬся по книге М.Г.Радченко 1С Предприятие 8.1.
ПроблеМа возникла в процедуре заполнения цены в документе
 Вот код:
           Процедура ПереченьНоменклатурыНоменклатураOnChange(Control)

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

      СтрокаТабличнойЧасти.Цена = РозничнаяЦена(Дата,Элемент.Значение);

         РассчитатьСумму(СтрокаТабличнойЧасти);
   КонецПроцедуры

А вот ошибка {Document.ОказаниеУслуг.Form.ФормаДокумента(72,49)}: Переменная не определена (Элемент)
   СтрокаТабличнойЧасти.Цена = РозничнаяЦена(Дата,<<?>>Элемент.Значение);

 А вот код функции РозничнаяЦена, которую я использую в общем модуле.

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

Все смотрю, что сделала не так? Где мне нужно определить этот Элемент? Буду очень признательна за ответ.  

« Последнее редактирование: 08-02-2010 05:52 от Sel »
Записан
Tais80

Новенький

kz
Offline Offline


Все получилось! Элемент это и есть Control !!!


Записан
SHveД

Интересующийся

ru
Offline Offline


Тоже беда в этом же разделе книги, Регистр Сведений, уже задавал по этому поводу вопрос, спасибо, помогли, переделал все с нуля, так другая ошибка выскакивает:

Ошибка при вызове метода контекста (ПолучитьПоследнее):Недопустимое значение параметра(параметр номер 2)
нажимаю подробно:

{ОбщийМодуль.РаботаСоСправочниками(7)}: Ошибка при вызове метода контекста (ПолучитьПоследнее): Недопустимое значение параметра (параметр номер ‘2’)
   ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата,Отбор);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)

Все строчки общего Модуля:

Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт

   // Создать вспомогательный объект Отбор
   Отбор = Новый Структура(«Номенклатура»,ЭлементНоменклатуры);

      // Получить актуальные значения ресурсов регистра
   ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

   Возврат ЗначенияРесурсов.Цена;

КонецФункции

Помогите иначе у меня будут проблемы.Улыбаюсь

« Последнее редактирование: 07-02-2010 14:20 от Sel »
Записан
Kivals


1. ЭлементНоменклатуры — точно заполнен?
2. РегистрСведений.Цены точно периодический?
3. Номенклатыра — единственное измерение регистра Цены?


Записан
SHveД

Интересующийся

ru
Offline Offline


+++1. ЭлементНоменклатуры — точно заполнен?
2. РегистрСведений.Цены точно периодический?
3. Номенклатыра — единственное измерение регистра Цены?+++

1.Да, там находится название тризистора, ведь суть решения с использованием периодического регистра сведений, по изменению в документе Оказание Услуги даты, кофигурация берет данные  внесеные в Регистр Сведений и меняет цену в документе Оказание Услуги данного транзистора, но выдает ошибку.
2. Да, регистр имеет поле Период это ведь говорит о его «периодичности» и создан в соотвествующем разделе Кофигуратора
3.ДА, есть еще ресурс Цена и все.

П.С. подскажите как здесь вложить скрин экрана. что б не описывать все словами, лучше один раз увидет -чем Улыбаюсь, скрины пожаты много места не займут.


Записан
Sel

Злобный
Администратор

ru
Offline Offline


SHveД, перед отправкой поста нажми кнопку «Предпросмотр», потом- «Дополнительные опции», появится возможность добавить вложение, прикрепишь свой скрин.


Записан

Слово не воробей. Всё не воробей, кроме воробья.

Kivals


Жду скринов…


Записан
SHveД

Интересующийся

ru
Offline Offline


Сорри, был в отъезде… вот скрины
Когда в документе Оказание Услуги делаю 1 -изменение даты соответсвующей Регистру Сведений цены (1а) и выибраю заново транзистор, то выскакивает вышеописанная ошибка.
Еще добавил скрин формы документа оказание услуги, если еще какие надобно скажите предъявлю.
выкладываю еще модуль Оказание услуги:

Процедура ПереченьНоменклатурыНомеклатураПриИзменении(Элемент)
   // Вставить содержимое обработчика.
   // Получить текущую строку табличной части
СтрокаТабличнойЧасти = ЭлементыФормы.ПереченьНоменклатуры.ТекущиеДанные;

   // Установить цену
СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Дата,Элемент.Значение);

   // Пересчитать сумму строки
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры

SHveД

Интересующийся

ru
Offline Offline


ИзвИняюсь, не зна,л что скрины не выкладывает,а делает ссылку на них, названия бы точней оформил

« Последнее редактирование: 10-02-2010 12:08 от Sel »
Записан
Kivals


Offtopic:

SHveД, чтобы выложить скрин — можно «подсмотреть» его адрес в отправленном посте, а потом отредактировать пост, вставив [IMG]http://здесь подсмотренная ссылка[/IMG]


Записан
Kivals


М-да — ничего не прояснилось Жаль
выложи cf файл конфигурации в архиве (Конфигурация — Сохранить конфигурацию в файл…)


Записан
SHveД

Интересующийся

ru
Offline Offline


Вот он, в архиве


* 1Cv82.rar (27.57 Кб — загружено 863 раз.)


Записан
Kivals


Все очень просто: у тебя измерение в регистре сведений называется «Номеклатура» вместо «Номенклатура»


Записан
SHveД

Интересующийся

ru
Offline Offline


Offtopic:

Да блин… есть смайл бьюсь головой об стену и разбиваю её на хрен за не надобностью, уже второй раз делаю в этом ошибку (!) , большое тебе спасибо за оказаную помощь и очередное напоминание что я безнадежен во внимательности Улыбаюсь. Все зачеркиваю строчку русский в паспорте и пишу -мартышка с дерева…
З.Ы. Знаю что админ зело строг за флейм, но просьба сохраните сей пост хотя бы на сутки, так я благодарен Kivalsу

« Последнее редактирование: 10-02-2010 20:23 от Kivals »
Записан

medved62

19 / 0 / 0

Регистрация: 08.10.2013

Сообщений: 27

1

Ошибка при выполнении

21.05.2014, 23:37. Показов 2438. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Новичок в изучении 1С Ошибка:
{ОбщийМодуль.РаботаСоСправочниками.Модуль(6)}: Ошибка при вызове метода контекста (ПолучитьПоследнее): Недопустимое значение параметра (параметр номер ‘2’)
ЗначенияРесурсов=РегистрыСведений.ЦеныНаУслуги.ПолучитьПоследнее(АктуальнаяДата, Отбор);
по причине:
Недопустимое значение параметра (параметр номер ‘2’)
Сама функция:

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



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

22.05.2014, 00:02

2

отбор кривой. Отладчиком попользуйтесь.
конфа самописная? Форма толстая?



0



19 / 0 / 0

Регистрация: 08.10.2013

Сообщений: 27

26.05.2014, 19:42

 [ТС]

3

Пользуюсь отладчиком, так как не силен в 1С , конфа самописная, а форму как посмотреть, если клиент то автоматически



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

26.05.2014, 21:05

4

Цитата
Сообщение от medved62
Посмотреть сообщение

Пользуюсь отладчиком

ну так и посмотрите, что из себя представляет Отбор

Цитата
Сообщение от medved62
Посмотреть сообщение

так как не силен в 1С

ну раз пользуетесь отладчиком — напрягитесь, погуглите по разделу — есть в темах ссылки на мануалы

Цитата
Сообщение от medved62
Посмотреть сообщение

а форму как посмотреть, если клиент то автоматически

есть ещё режим: управляемый, обычный. Смотреть в конфигураторе, ПКМ на форме — документа, например — Свойства, там тип формы.
В модуле тонкой (управляемой) формы есть слова &НаКлиенте, &НаСервере.

В каком объекте при каком событии возникла ошибка?



0



  • Ошибка при вызове метода контекста прочитать ошибка разбора xml
  • Ошибка при вызове метода контекста получитьобщиймакет
  • Ошибка при вызове метода контекста прочитать ошибка доступа к файлу
  • Ошибка при вызове метода контекста получитьмакет недопустимое значение параметра параметр номер 1
  • Ошибка при вызове метода контекста прочитать метод недоступен на тонком клиенте