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С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
В данном случае речь не об УРИБ, а о простом плане обмена. Нужно принять сообщение и обработать его. Нашел в книге «Простые примеры разработки» пример на эту тему. Сделал, ну я бы сказал на 100% как там. Сообщение прнимается, но метод ЗакончитьЧтение выдает такое сообщение: Неправильный формат файла обмена. Данные все принимаются, нареканий нет, но вот такя штука напрягает :). Привожу фрамент кода: (заодно с процедурой записи сообщения) Процедура ДействияФормыВыгрузитьДанные(Кнопка)
UP! Кто-нибудь занимался не УРИБовскими планами обмена??? Очень надо. В урибе есть стандартные функции ПрочитатьИзменения, записатьИзменения. Там с чтением сообщений проблем нет, а вот в моем случае выдает ошибку, хотя все и читает. Это настораживает.
В том то и оно, что в этом плане обмена не стоит галочка распределенная база. С распределенкой у меня все работает.
Попробуй перед добавлением данных в файл записать XML декларации
ОК, попробую. Сообщу чуть позже.
Единственно, тчо сделал, добавил строчку: ЗаписатьОбъявлениеXML. Добавляется заголовок в файл из одной строки. Все равно ругань: Ошибка при вызове метода контекста (ЗакончитьЧтение): Неправильный формат сообщения Вообще, когда эта ошибка возникает? Сообщение читается нормально вплоть до метода ЗакончитьЧтение.
Хорошо. Перефразирую вопос. У кого возникала ошибка «неправильный формат сообщения» при использовании метода ЗакончитьЧтение и кто как с этим боролся???
Тэги:
Комментарии доступны только авторизированным пользователям
1C 8.1 ошибка при загрузке файла обмена "Неправильный формат сообщения"?
Обмен из УТ 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
Исправление ошибки синхронизации РИБ в релизах УТ 11.4.2.109-11.4.3.115, которая возникает после Удаления объектов.
Обработка вычищает записи «объект не найден» из регистра сведений «Реестр документов», которые появляются после удаления объекта в одном из узлов РИБ. Запускаем обработку и нажимаем Очистить.
Примерный текст ошибки:
Ошибка чтения файла сообщения обмена: {Обработка.КонвертацияОбъектовРаспределенныхИнформационныхБаз.МодульОбъекта(203)}: Ошибка при вызове метода контекста (ЗакончитьЧтение): Ошибка при выполнении обработчика — ‘ПередЗаписью’: {Документ.ВозвратТоваровОтКлиента.МодульМенеджера(3084)}: Преобразование значения к типу Дата не может быть выполнено