Меню

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

Войти или зарегистрироваться

8.х ошибка

Тема в разделе «Конфигурирование на платформе «1С:Предприятие 8″», создана пользователем Uliss, 23 фев 2016.




0/5,
Голосов: 0
  1. TopicStarter Overlay

    Uliss

    Offline

    Uliss
    Опытный в 1С

    Регистрация:
    20 мар 2010
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    26

    Добрый день
    конфа УТ 10.3.34.1 скульная
    У одного из пользователей перестал открываться справочник номенклатуры. Выходит ошибка:
    {ОбщийМодуль.УправлениеЗапасами.Модуль(2384)}: Ошибка при вызове метода контекста (Сдвинуть)
    СписокТиповЦен.Сдвинуть(СтрокаТипаЦены, НомерОчередногоТипаЦен — ТекущийИндекс);
    по причине:
    Неправильное смещение внутри коллекции

    Где копать? Подозреваю что это связано с настройками пользователя, может какой то сбой там. Как очистить? может поможет…


    Uliss,
    23 фев 2016
    #1

  2. Vlad

    Offline

    Vlad
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.519
    Симпатии:
    20
    Баллы:
    29

    Похоже, действительно, что-то с профилем пользователя. Попробуй реестр почистить на его компе.


    Vlad,
    23 фев 2016
    #2
  3. TopicStarter Overlay

    Uliss

    Offline

    Uliss
    Опытный в 1С

    Регистрация:
    20 мар 2010
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    26

    Не в компе дело, пробовал с другого компа зайти этим пользователем, та же ошибка. Где то в базе хранятся настройки походу. Где и как попробовать подчистить? или есть какой то другой способ?


    Uliss,
    23 фев 2016
    #3

  4. Vlad

    Offline

    Vlad
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.519
    Симпатии:
    20
    Баллы:
    29

    Посмотрел модуль. Там что-то с типами цен. С правами пользователя все в порядке? Может удалить не используемые или помеченные на удаление типы цен?


    Vlad,
    23 фев 2016
    #4
  5. TopicStarter Overlay

    Uliss

    Offline

    Uliss
    Опытный в 1С

    Регистрация:
    20 мар 2010
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    26

    У остальных пользователей все работает. Не в правах дело думаю.


    Uliss,
    23 фев 2016
    #5

  6. Vlad

    Offline

    Vlad
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.519
    Симпатии:
    20
    Баллы:
    29

    Так типы цен еще посмотри. На них же ругается. Удали ненужное, добавь чего-нибудь новое. Возможно, есть там какой-то зацеп на конкретного пользователя.


    Vlad,
    23 фев 2016
    #6
  7. TopicStarter Overlay

    Uliss

    Offline

    Uliss
    Опытный в 1С

    Регистрация:
    20 мар 2010
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    26

    создал тип цен, справочник открылся. мда.


    Uliss,
    23 фев 2016
    #7
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
Похожие темы

  1. Helmut

    8.х
    Ошибка при обноавлнии ЗУП Ошибка записи!

    Helmut,
    5 фев 2010
    , в разделе: Установка платформы «1С:Предприятие 8»
    Ответов:
    7
    Просмотров:
    2.349
    Draco
    9 фев 2010

  2. zxcv

    8.х ОБМЕН
    Ошибка СУБД: ошибка dbeng8

    zxcv,
    3 мар 2014
    , в разделе: Обмен данными в «1С:Предприятие 8»
    Ответов:
    7
    Просмотров:
    1.946
    zxcv
    4 мар 2014

Загрузка…
Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

Ошибка… {Форма.ФормаРасчетнаяВедомость}: Ошибка при вызове метода контекста (Сдвинуть): Несоответствие типов (параметр номер ‘1’)

НайтиТекст не делает область выделенной

+ добавь ТабДок.ТекущаяОбласть = Область;

ошибка… {Форма.ФормаРасчетнаяВедомость}: Ошибка при вызове метода контекста (Сдвинуть): Несоответствие типов (параметр номер ‘1’) по причине: Несоответствие типов (параметр номер ‘1’)

а как сделать область выделенной…

У Сдвинуть 1-й параметр — тип область, а Область.Имя — Строка. Вот что 1С тебе пишет. нужно без скобок.

Сделал так , ошибок нет, но сдвиг не происходит.

Попробуй для выделения использовать: Добавить (Add) Синтаксис: Добавить(<Область>)

Не могу понять в моем случие что должно выступать в роли колекции Что не поставляю выдает ОШИБКУ…. {Форма.ФормаРасчетнаяВедомость}: Итератор для значения не определен     Для каждого строка из  ? цикл            КонецЦикла;

видимо ТабДок.ВыделенныеОбласти

Да спасибо только что сам догнал

Не могу понять как с этими методами работать… Методы: Вставить (Insert)

Пишу так ничего не происходит.     Для  каждого ВыделеннаяОбласть  из ТабДок.ВыделенныеОбласти цикл

Кто-то может помочь!!!!!!!!!!!!!! ПОЧЕМУ НЕРАБОТАЕТ.

Все очень красиво делается вот так….

Тэги:

Комментарии доступны только авторизированным пользователям

@Mr-Rm
Mr-Rm

changed the title
СписокЗначений.Сдвинуть() работает циклично

СписокЗначений и ТаблицаЗначений: Сдвинуть() работает циклично

May 16, 2019

@EvilBeaver

@dmpas подскажи, как автор — почему сделан циклический сдвиг? Есть ли тайный смысл в этом?

@dmpas

@EvilBeaver вот я пытался поковыряться на ИТС и найти какой-нибудь старый синтаксис-помощник. Вот чует моя ж, что когда-то в 1С так и было.

@EvilBeaver

Ща попросим какого-нибудь старожила вспомнить…

/cc @pumbaEO @artbear @allustin ?

@EvilBeaver

Судя по-всему — нет. Оно всегда работало с выдачей исключения. Я не могу найти подтверждения, что было циклично

@dmpas

@ghost

@EvilBeaver не было такого. Я помню 8.1 я пробовал и получал исходное исключение «Неправильное смещение внутри коллекции» а вот в 7.7 1С++ вроде как смещало циклично.

@Mr-Rm



Copy link


Contributor

Author

Когда первый параметр метода Сдвинуть() не является Числом или ЭлементомСпискаЗначений / СтрокойТаблицыЗначений соответственно, 1С пытается привести его к числу и выдает ошибку «Несоответствие типов (параметр номер ‘1’)» только если приведение невозможно. В OneScript происходит следующее:
СписокЗначений.Сдвинуть("2",1)
Ошибка: Значение не является значением объектного типа
ТаблицаЗначений.Сдвинуть("2",1)
Ошибка: Неверный тип аргумента
(То же и для СписокЗначений.Удалить("2"))

Что важнее, совместимость или типизация?

@dmpas

@Mr-Rm



Copy link


Contributor

Author

Удивительная несогласованность в 1С. Пробуем код:

ТЗ1 = Новый ТаблицаЗначений;
ТЗ1.Колонки.Добавить("К1");
Ст11 = ТЗ2.Добавить();
Ст12 = ТЗ2.Добавить();
ТЗ2 = Новый ТаблицаЗначений;
ТЗ2.Колонки.Добавить("К1");
Ст2 = ТЗ2.Добавить();
ТЗ1.Сдвинуть(Ст2,1);

Получаем ошибку: «Недопустимое значение параметра (параметр номер ‘1’) (Строка не принадлежит коллекции)«.
Теперь аналогичное:

СЗ1 = Новый СписокЗначений;
Эл11 = СЗ1.Добавить("э11");
Эл12 = СЗ1.Добавить("э12");
СЗ2 = Новый СписокЗначений;
Эл2 = СЗ2.Добавить("э2");
СЗ1.Сдвинуть(Эл2, 1);

Просто сдвигается 0-й элемент! СЗ1.Индекс(Эл2) честно возвращает -1.
Это же баг и источник багов. Нельзя такое повторять. Есть другие мнения?

@EvilBeaver

Кажется в коде примера ошибка: в строке 2 СЗ2 еще не определен

Mr-Rm

added a commit
to Mr-Rm/OneScript
that referenced
this issue

Jul 5, 2019

@Mr-Rm

…параметра к индексу +тесты

EvilBeaver

added a commit
that referenced
this issue

Jul 8, 2019

@EvilBeaver

Fix #876: цикличность метода Сдвинуть; приведение типа первого параметра

В платформе 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С.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка при вызове метода контекста получить ссылку
  • Ошибка при вызове метода контекста получить регистр сведений