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

8.2.17.157

___________

Простенькая конфа из одного справочника. Если обмениваться вручную, т.е. операции — планы обмена — .. — иконка «Прочитать изменения»/»Сохранить изменения» — всё ок (ну ещё бы).

___________

Теперь нужна обработка, чтобы по кнопке происходило тоже самое, что и по «типовой платформенной».

_

Сделал по кнопке такой код:

<code>

ЧтениеXML = Новый ЧтениеXML();

    ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения);

    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();

    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);

    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,           ЧтениеСообщения.НомерПринятого);

    Отправитель = ЧтениеСообщения.Отправитель;

    //Главный = Отправитель.Главный;

    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл

        Данные = ПрочитатьXML(ЧтениеXML);

        Если

            //Главный

            //ИЛИ

            (Не ПланыОбмена.ИзменениеЗарегистрировано(Отправитель, Данные)) Тогда

            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;

            Данные.ОбменДанными.Загрузка = Истина;

            Данные.Записать();

        КонецЕсли;

    КонецЦикла;

    ЧтениеСообщения.ЗакончитьЧтение()

</code>

Ругательство следующее:

{Форма.Форма.Форма(21)}: Ошибка при вызове метода контекста (ЗакончитьЧтение)

    ЧтениеСообщения.ЗакончитьЧтение()

по причине:

Неправильный формат сообщения

Никто не сталкивался?(с)

8.2.17.157

___________

Простенькая конфа из одного справочника. Если обмениваться вручную, т.е. операции — планы обмена — .. — иконка «Прочитать изменения»/»Сохранить изменения» — всё ок (ну ещё бы).

___________

Теперь нужна обработка, чтобы по кнопке происходило тоже самое, что и по «типовой платформенной».

_

Сделал по кнопке такой код:

<code>

ЧтениеXML = Новый ЧтениеXML();

    ЧтениеXML.ОткрытьФайл(ИмяФайлаСообщения);

    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();

    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);

    ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,           ЧтениеСообщения.НомерПринятого);

    Отправитель = ЧтениеСообщения.Отправитель;

    //Главный = Отправитель.Главный;

    Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл

        Данные = ПрочитатьXML(ЧтениеXML);

        Если

            //Главный

            //ИЛИ

            (Не ПланыОбмена.ИзменениеЗарегистрировано(Отправитель, Данные)) Тогда

            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;

            Данные.ОбменДанными.Загрузка = Истина;

            Данные.Записать();

        КонецЕсли;

    КонецЦикла;

    ЧтениеСообщения.ЗакончитьЧтение()

</code>

Ругательство следующее:

{Форма.Форма.Форма(21)}: Ошибка при вызове метода контекста (ЗакончитьЧтение)

    ЧтениеСообщения.ЗакончитьЧтение()

по причине:

Неправильный формат сообщения

Никто не сталкивался?(с)

В данном случае речь не об УРИБ, а о простом плане обмена. Нужно принять сообщение и обработать его. Нашел в книге «Простые примеры разработки» пример на эту тему. Сделал, ну я бы сказал на 100% как там. Сообщение прнимается, но метод ЗакончитьЧтение выдает такое сообщение: Неправильный формат файла обмена. Данные все принимаются, нареканий нет, но вот такя штука напрягает :). Привожу фрамент кода: (заодно с процедурой записи сообщения) Процедура ДействияФормыВыгрузитьДанные(Кнопка)

UP! Кто-нибудь занимался не УРИБовскими планами обмена??? Очень надо. В урибе есть стандартные функции ПрочитатьИзменения, записатьИзменения. Там с чтением сообщений проблем нет, а вот в моем случае выдает ошибку, хотя все и читает. Это настораживает.

В том то и оно, что в этом плане обмена не стоит галочка распределенная база. С распределенкой у меня все работает.

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

ОК, попробую. Сообщу чуть позже.

Единственно, тчо сделал, добавил строчку: ЗаписатьОбъявлениеXML. Добавляется заголовок в файл из одной строки. Все равно ругань: Ошибка при вызове метода контекста (ЗакончитьЧтение): Неправильный формат сообщения Вообще, когда эта ошибка возникает? Сообщение читается нормально вплоть до метода ЗакончитьЧтение.

Хорошо. Перефразирую вопос. У кого возникала ошибка «неправильный формат сообщения» при использовании метода ЗакончитьЧтение и кто как с этим боролся???

Тэги:

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

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

В данном случае речь не об УРИБ, а о простом плане обмена. Нужно принять сообщение и обработать его. Нашел в книге «Простые примеры разработки» пример на эту тему. Сделал, ну я бы сказал на 100% как там. Сообщение прнимается, но метод ЗакончитьЧтение выдает такое сообщение: Неправильный формат файла обмена. Данные все принимаются, нареканий нет, но вот такя штука напрягает :). Привожу фрамент кода: (заодно с процедурой записи сообщения) Процедура ДействияФормыВыгрузитьДанные(Кнопка)

UP! Кто-нибудь занимался не УРИБовскими планами обмена??? Очень надо. В урибе есть стандартные функции ПрочитатьИзменения, записатьИзменения. Там с чтением сообщений проблем нет, а вот в моем случае выдает ошибку, хотя все и читает. Это настораживает.

В том то и оно, что в этом плане обмена не стоит галочка распределенная база. С распределенкой у меня все работает.

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

ОК, попробую. Сообщу чуть позже.

Единственно, тчо сделал, добавил строчку: ЗаписатьОбъявлениеXML. Добавляется заголовок в файл из одной строки. Все равно ругань: Ошибка при вызове метода контекста (ЗакончитьЧтение): Неправильный формат сообщения Вообще, когда эта ошибка возникает? Сообщение читается нормально вплоть до метода ЗакончитьЧтение.

Хорошо. Перефразирую вопос. У кого возникала ошибка «неправильный формат сообщения» при использовании метода ЗакончитьЧтение и кто как с этим боролся???

Тэги:

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

1C 8.1 ошибка при загрузке файла обмена &quot;Неправильный формат сообщения&quot;?

Обмен из УТ 10.3 в БП 2.0 (8.1), ручной. При нажатии на кнопку «Выполнить загрузку» вылетает ошибка с сообщением:

«Ошибка при вызове метода контекста (НачатьЧтение): Неправильный формат сообщения»

Что это такое? Куда копать? Гугл и Миста внятного ответа на вопрос не дали. Нумерация узлов в порядке.


  • Вопрос задан

  • 11153 просмотра

1. БП предприятия не может прочитать файл обмена той версии УТ, которая у вас есть. Почитать о совместимости версий УТ<->БП.
2. Одна из конфигураций не типовая и идет попытка прочитать/записать тот реквизит, описания которого нет в шаблоне обмена.
3. Абсурдное — неверный путь до файла обмена. Попробуйте подклчюиться через COM.

ну и вообще хотелось бы гораздо больших подробностей, а не потока сознания.

Пригласить эксперта

Это первый обмен? Или ошибка возникла уже в процессе работы?

1. Выгрузка не от того образа.
2. Выгрузка была с ошибками, но вам об этом не сказали.

НачатьЧтение функция, которая парсит xml файл выгрузки, обычно первое что он проверяет это узел.

Лучше конечно посмотреть по отладчику.


    • 1 подписчик

    • 150 просмотров

  • Показать ещё
    Загружается…

21 сент. 2023, в 07:57

20000 руб./за проект

21 сент. 2023, в 06:22

4000 руб./за проект

21 сент. 2023, в 04:48

2000 руб./за проект

Минуточку внимания

02.04.2018

    Безымянный.png

Исправление ошибки синхронизации РИБ в релизах УТ 11.4.2.109-11.4.3.115, которая возникает после Удаления объектов.

Обработка вычищает записи «объект не найден» из регистра сведений «Реестр документов», которые появляются после удаления объекта в одном из узлов РИБ. Запускаем обработку и нажимаем Очистить.

Примерный текст ошибки:

Ошибка чтения файла сообщения обмена: {Обработка.КонвертацияОбъектовРаспределенныхИнформационныхБаз.МодульОбъекта(203)}: Ошибка при вызове метода контекста (ЗакончитьЧтение): Ошибка при выполнении обработчика — ‘ПередЗаписью’: {Документ.ВозвратТоваровОтКлиента.МодульМенеджера(3084)}: Преобразование значения к типу Дата не может быть выполнено

Понравилась статья? Поделить с друзьями:

Интересное по теме:

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

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: