Mr-Rm
changed the title
СписокЗначений.Сдвинуть() работает циклично
СписокЗначений и ТаблицаЗначений: Сдвинуть() работает циклично
May 16, 2019
@dmpas подскажи, как автор — почему сделан циклический сдвиг? Есть ли тайный смысл в этом?
@EvilBeaver вот я пытался поковыряться на ИТС и найти какой-нибудь старый синтаксис-помощник. Вот чует моя ж, что когда-то в 1С так и было.
Ща попросим какого-нибудь старожила вспомнить…
/cc @pumbaEO @artbear @allustin ?
Судя по-всему — нет. Оно всегда работало с выдачей исключения. Я не могу найти подтверждения, что было циклично
@EvilBeaver не было такого. Я помню 8.1 я пробовал и получал исходное исключение «Неправильное смещение внутри коллекции» а вот в 7.7 1С++ вроде как смещало циклично.
Copy link
Contributor
Author
Когда первый параметр метода Сдвинуть() не является Числом или ЭлементомСпискаЗначений / СтрокойТаблицыЗначений соответственно, 1С пытается привести его к числу и выдает ошибку «Несоответствие типов (параметр номер ‘1’)» только если приведение невозможно. В OneScript происходит следующее:
СписокЗначений.Сдвинуть("2",1)
Ошибка: Значение не является значением объектного типа
ТаблицаЗначений.Сдвинуть("2",1)
Ошибка: Неверный тип аргумента
(То же и для СписокЗначений.Удалить("2")
)
Что важнее, совместимость или типизация?
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.
Это же баг и источник багов. Нельзя такое повторять. Есть другие мнения?
Кажется в коде примера ошибка: в строке 2 СЗ2 еще не определен
Mr-Rm
added a commit
to Mr-Rm/OneScript
that referenced
this issue
Jul 5, 2019
…параметра к индексу +тесты
EvilBeaver
added a commit
that referenced
this issue
Jul 8, 2019
Fix #876: цикличность метода Сдвинуть; приведение типа первого параметра
Войти или зарегистрироваться
8.х ошибка
Тема в разделе «Конфигурирование на платформе «1С:Предприятие 8″», создана пользователем Uliss, 23 фев 2016.
-
Offline
Uliss
Опытный в 1С- Регистрация:
- 20 мар 2010
- Сообщения:
- 195
- Симпатии:
- 0
- Баллы:
- 26
Добрый день
конфа УТ 10.3.34.1 скульная
У одного из пользователей перестал открываться справочник номенклатуры. Выходит ошибка:
{ОбщийМодуль.УправлениеЗапасами.Модуль(2384)}: Ошибка при вызове метода контекста (Сдвинуть)
СписокТиповЦен.Сдвинуть(СтрокаТипаЦены, НомерОчередногоТипаЦен — ТекущийИндекс);
по причине:
Неправильное смещение внутри коллекцииГде копать? Подозреваю что это связано с настройками пользователя, может какой то сбой там. Как очистить? может поможет…
-
Offline
Vlad
Модераторы
Команда форума
Модератор- Регистрация:
- 16 авг 2006
- Сообщения:
- 3.519
- Симпатии:
- 20
- Баллы:
- 29
Похоже, действительно, что-то с профилем пользователя. Попробуй реестр почистить на его компе.
-
Offline
Uliss
Опытный в 1С- Регистрация:
- 20 мар 2010
- Сообщения:
- 195
- Симпатии:
- 0
- Баллы:
- 26
Не в компе дело, пробовал с другого компа зайти этим пользователем, та же ошибка. Где то в базе хранятся настройки походу. Где и как попробовать подчистить? или есть какой то другой способ?
-
Offline
Vlad
Модераторы
Команда форума
Модератор- Регистрация:
- 16 авг 2006
- Сообщения:
- 3.519
- Симпатии:
- 20
- Баллы:
- 29
Посмотрел модуль. Там что-то с типами цен. С правами пользователя все в порядке? Может удалить не используемые или помеченные на удаление типы цен?
-
Offline
Uliss
Опытный в 1С- Регистрация:
- 20 мар 2010
- Сообщения:
- 195
- Симпатии:
- 0
- Баллы:
- 26
У остальных пользователей все работает. Не в правах дело думаю.
-
Offline
Vlad
Модераторы
Команда форума
Модератор- Регистрация:
- 16 авг 2006
- Сообщения:
- 3.519
- Симпатии:
- 20
- Баллы:
- 29
Так типы цен еще посмотри. На них же ругается. Удали ненужное, добавь чего-нибудь новое. Возможно, есть там какой-то зацеп на конкретного пользователя.
-
Offline
Uliss
Опытный в 1С- Регистрация:
- 20 мар 2010
- Сообщения:
- 195
- Симпатии:
- 0
- Баллы:
- 26
создал тип цен, справочник открылся. мда.
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
- Похожие темы
-
8.х
Ошибка при обноавлнии ЗУП Ошибка записи!
Helmut,
5 фев 2010, в разделе: Установка платформы «1С:Предприятие 8»
- Ответов:
- 7
- Просмотров:
- 2.349
-
8.х ОБМЕН
Ошибка СУБД: ошибка dbeng8
zxcv,
3 мар 2014, в разделе: Обмен данными в «1С:Предприятие 8»
- Ответов:
- 7
- Просмотров:
- 1.946
- Ваше имя или e-mail:
- У Вас уже есть учётная запись?
-
- Нет, зарегистрироваться сейчас.
- Да, мой пароль:
-
Забыли пароль?
-
Запомнить меня
Поиск
-
- Искать только в заголовках
- Сообщения пользователя:
-
Имена участников (разделяйте запятой).
- Новее чем:
-
- Искать только в этой теме
- Искать только в этом разделе
- Отображать результаты в виде тем
-
Быстрый поиск
- Последние сообщения
Больше…
Ошибка… {Форма.ФормаРасчетнаяВедомость}: Ошибка при вызове метода контекста (Сдвинуть): Несоответствие типов (параметр номер ‘1’)
НайтиТекст не делает область выделенной
+ добавь ТабДок.ТекущаяОбласть = Область;
ошибка… {Форма.ФормаРасчетнаяВедомость}: Ошибка при вызове метода контекста (Сдвинуть): Несоответствие типов (параметр номер ‘1’) по причине: Несоответствие типов (параметр номер ‘1’)
а как сделать область выделенной…
У Сдвинуть 1-й параметр — тип область, а Область.Имя — Строка. Вот что 1С тебе пишет. нужно без скобок.
Сделал так , ошибок нет, но сдвиг не происходит.
Попробуй для выделения использовать: Добавить (Add) Синтаксис: Добавить(<Область>)
Не могу понять в моем случие что должно выступать в роли колекции Что не поставляю выдает ОШИБКУ…. {Форма.ФормаРасчетнаяВедомость}: Итератор для значения не определен Для каждого строка из ? цикл КонецЦикла;
видимо ТабДок.ВыделенныеОбласти
Да спасибо только что сам догнал
Не могу понять как с этими методами работать… Методы: Вставить (Insert)
Пишу так ничего не происходит. Для каждого ВыделеннаяОбласть из ТабДок.ВыделенныеОбласти цикл
Кто-то может помочь!!!!!!!!!!!!!! ПОЧЕМУ НЕРАБОТАЕТ.
Все очень красиво делается вот так….
Тэги:
Комментарии доступны только авторизированным пользователям
Mr-Rm
changed the title
СписокЗначений.Сдвинуть() работает циклично
СписокЗначений и ТаблицаЗначений: Сдвинуть() работает циклично
May 16, 2019
@dmpas подскажи, как автор — почему сделан циклический сдвиг? Есть ли тайный смысл в этом?
@EvilBeaver вот я пытался поковыряться на ИТС и найти какой-нибудь старый синтаксис-помощник. Вот чует моя ж, что когда-то в 1С так и было.
Ща попросим какого-нибудь старожила вспомнить…
/cc @pumbaEO @artbear @allustin ?
Судя по-всему — нет. Оно всегда работало с выдачей исключения. Я не могу найти подтверждения, что было циклично
@EvilBeaver не было такого. Я помню 8.1 я пробовал и получал исходное исключение «Неправильное смещение внутри коллекции» а вот в 7.7 1С++ вроде как смещало циклично.
Copy link
Contributor
Author
Когда первый параметр метода Сдвинуть() не является Числом или ЭлементомСпискаЗначений / СтрокойТаблицыЗначений соответственно, 1С пытается привести его к числу и выдает ошибку «Несоответствие типов (параметр номер ‘1’)» только если приведение невозможно. В OneScript происходит следующее:
СписокЗначений.Сдвинуть("2",1)
Ошибка: Значение не является значением объектного типа
ТаблицаЗначений.Сдвинуть("2",1)
Ошибка: Неверный тип аргумента
(То же и для СписокЗначений.Удалить("2")
)
Что важнее, совместимость или типизация?
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.
Это же баг и источник багов. Нельзя такое повторять. Есть другие мнения?
Кажется в коде примера ошибка: в строке 2 СЗ2 еще не определен
Mr-Rm
added a commit
to Mr-Rm/OneScript
that referenced
this issue
Jul 5, 2019
…параметра к индексу +тесты
EvilBeaver
added a commit
that referenced
this issue
Jul 8, 2019
Fix #876: цикличность метода Сдвинуть; приведение типа первого параметра
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
Павел Крохин Заглянувший Сообщений: 27 |
При проведении документа Комплектация выходит ошибка след. содержания: {ОбщийМодуль.ОбработкаСобытийДокументаСервер.Модуль(1402)}: Ошибка при вызове метода контекста (Заблокировать): Не найдено поле источника данных: Номенклатура В процедуре ПолучитьРезультатЗапросаПоТоварам ошибка, номенклатура с маленькой буквы |
Тамара Герасимчук Заглянувший Сообщений: 143 |
#2
18.02.2022 09:04:09
Добрый день! Можете предоставить скриншот документа Комплектация, который не проводится и скриншот самой номенклатуры с видом Комплект? |
||
Павел Крохин Заглянувший Сообщений: 27 |
#3
18.02.2022 09:41:57
Исправьте это в модуле, и не надо будет ни каких скриншотов документа и номенклатуры(комплект) |
||||
Ещё один вопрос: уточните, пожалуйста, релиз платформы 1С. Есть проблема на платформе 8.3.20.* Изменено: Тамара Герасимчук — 18.02.2022 09:57:10 |
|
Павел Крохин Заглянувший Сообщений: 27 |
#5
18.02.2022 10:14:02
1С:Предприятие 8.3 (8.3.20.1613) |
||
Тамара Герасимчук Заглянувший Сообщений: 143 |
#6
18.02.2022 10:31:14
Данная проблема известна, у разработчиков есть задача Ц000031543, будет исправлено в ближайшем релизе. |
||||