СтруктураДляХраненияОтчета = Новый структура(«Test1,Test2,Test3»,1,2,ТабДок);
ИмяФайла=ПолучитьИмяФайла(«», РежимДиалогаВыбораФайла.Сохранение,»Статистика по БД(*.stat)|*.stat»);
Если ИмяФайла<>»» тогда
Стр=ЗначениеВСтрокуВнутр(СтруктураДляХраненияОтчета);
ЗначениеВФайл(ИмяФайла, стр);
КонецЕсли
При попытке прочитать записаный файл через ЗначениеИзФайла(ИмяФайла);
ошибка:
{Форма.Форма(466)}: Ошибка при вызове метода контекста (ЗначениеИзФайла): Ошибка преобразования
СтруктураДляХраненияОтчета=ЗначениеИзФайла(ИмяФайла);
по причине:
Ошибка преобразования
подскажите что не так?
daslex 1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
||||
1 |
||||
Загрузить значение из файла30.10.2013, 13:12. Показов 15608. Ответов 31 Метки нет (Все метки)
В файл на локальном компьютере записана ТаблицаЗначений с данными. На форме обработки имеется команда «Загрузить»;
Если конфигурация установлена в файловом варианте, то такой вот прием срабатывает Добавлено через 16 минут 0 |
16 / 16 / 3 Регистрация: 22.03.2012 Сообщений: 85 |
|
30.10.2013, 14:55 |
2 |
На сервере быстрее обработка идет и файл нужно передать на сервер. Что за функция ЗначениеИзФайла? 1 |
daslex |
30.10.2013, 15:23 [ТС] |
Не по теме: На сервер надо передать, а потом оттуда принять и как бы там быстро обработка не шла, прием-передача всю ту скорость убьют наповал. Эффективнее работать на клиенте. Но всё должно быть как-то централизовано из-за этого и существует сервер. А из-за того, что существует сервер — не все функции и не все переменные доступны на клиенте. и простите за бессмысленный набор слов. 0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
30.10.2013, 16:25 |
4 |
А в ТекФайл правильный путь для сервера указан? 1 |
daslex 1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
||||
30.10.2013, 16:40 [ТС] |
5 |
|||
Xomych, Без переменной ТекФайл у меня было бы как-то так
0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
30.10.2013, 17:27 |
6 |
Сервер у вас на другом компе? А ты потом кстати таблицузначений не передашь на клиент возвратом. Надо прям на сервере обрабатывать будет. 0 |
1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
|
30.10.2013, 17:28 [ТС] |
7 |
Да. 0 |
206 / 180 / 31 Регистрация: 24.10.2011 Сообщений: 738 |
|
30.10.2013, 17:53 |
8 |
&НаСервере этот оператор заставит выполниться код на сервере. Соответственно, все ресурсы под данным оператором должны быть доступны серверу. В вашем случае «C:ТекФайл» будет искаться на сервере. В принципе я повторил Xomych. 1 |
1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
|
30.10.2013, 18:41 [ТС] |
9 |
В общем, ситуация следующая. Т.к. в файловом варианте проблем не было, то и вопроса не возникало (там с сервера на клиент возврат происходит). Но если в серверном варианте с сервера на клиент возврата не получится, то я не особо представляю как открыть форму с уже заполненной табличной частью, причем открыть так, чтоб без записи в базу. Если я передаю на сервер Табличную часть формы и там что-то в ней изменяю, то после этого на самой форме Табличное поле не изменяется. Это первое в общем, я в тупике. 0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
30.10.2013, 18:53 |
10 |
Тебе надо просто прописать правильный путь для сервера, положить файл в папку, которую видит сервер и прописать правильный путь в ТекФайл для сервера, а не для клиента. Потом просто заполнить форму на сервере. Передавать надо только правильный путь с клиента, возвращать ничего не надо. Причем надо учитывать, что подключенные сетевые диски &НаСервере не понимаются через буквы и надо писать ИмяКомпаДискФайл 1 |
1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
|
30.10.2013, 19:00 [ТС] |
11 |
А то что в локальном варианте сама форма так не меняется ничего?. 0 |
Xomych 856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
||||
30.10.2013, 19:09 |
12 |
|||
Таблицей на форме можно программно оперировать как на клиенте так и на сервере, но передать таблицузначений как параметр процедуры между сервером и клиентом нельзя, поэтому ты должен загрузить таблицу на форме &НаСервере Добавлено через 59 секунд
Где ТЗ — твоя таблица на форме, с такими же колонками как и в файле, причем если ТекФайл — это реквизит Формы, то его можно не передавать 1 |
1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
|
30.10.2013, 19:17 [ТС] |
13 |
Моя таблица, в которую я хочу записать ТЗ из файла — это прикладной объект, который я получил из элементов формы и тип его ТабличноеПоле. наверное ваш предложенный — это другой вариант. 0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
30.10.2013, 19:21 |
14 |
Это без разницы. 0 |
daslex 1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
||||
30.10.2013, 19:38 [ТС] |
15 |
|||
аа.не. Всё то же самое, извиняюсь. Добавлено через 12 минут
В отладчике ТЗ такое какое и должно стать. 0 |
856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
|
30.10.2013, 19:51 |
16 |
Для дальнейшего обсуждения мне не хватает данных. Я не вижу, что ты там куда записываешь, что за форма, что за механизм открытия этой формы нужен, что за объект конфигурации, в которой находится форма. 0 |
1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
|
30.10.2013, 20:21 [ТС] |
17 |
Вот, прикрепил. 0 |
Xomych 856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
||||||||
30.10.2013, 21:43 |
18 |
|||||||
В обработке пишешь
В модуле формы справочника на событие
1 |
1369 / 592 / 199 Регистрация: 02.08.2011 Сообщений: 2,882 |
|
30.10.2013, 22:37 [ТС] |
19 |
В модуле формы справочника на событие в модуль формы справочника мне ничего писать нельзя будет. только обработкой. Добавлено через 1 минуту Добавлено через 49 минут 0 |
Xomych 856 / 655 / 111 Регистрация: 01.11.2012 Сообщений: 2,410 |
||||
30.10.2013, 22:43 |
20 |
|||
И не благодари. Я вот до общения с тобой, никогда этой темой не занимался и не интересовался. Я час порылся в синтакс-помощнике и нашел способ. Надо тебе что-то менять в изучении 1С 0 |
|
|||||||||||
|
Таблица значений выгружалась методом ЗначениеВФайл в Excel-файл. После редактирования загрузка методом ЗначениеИзФайла вышла с ошибкой «Ошибка преобразования». Есть какие мысли? Не хочу построчно доставать. Как бы для этого и делал выгрузка этим методом, чтобы не писать лишние строки кода.
Это вы как так выгружали интересно? методом ЗначениеВФайл в Excel-файл???!!!
метод значение в файл — сериализует объект. эксель тут не причем вобще
А у них это в эксель… Вот такие вот кудесники
Ребят, прошу прощения, был переделал. Выгрузку а Excel делал так. Т — это таблица значений. Можно ли его данным методом забрать?
и где ЗначениеВФайл? ты ложишь так: sh.Cells(Т.Индекс(Стр)+2, К).FormulaR1C1 = Строка(Зн); Во первых непонятно что хотел этим сделать… ну а во вторых — как ложишь, так и доставай.
што то я тупой стал… не понимаю я это вот вобще:
Это особая уличная магия… был переделал… Я вообще отказываюсь что либо понимать
А теперь соберись с мыслями, попей воды и скажи, что ты от нас хочешь?
спасибо, ребят, за помощь. Сам разобрался.
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Содержание:
1. Основные сведения про языки XML и HTML
2. Возникновение ошибки преобразования данных
3. Причины появления и решения ошибки преобразования 1С
Здравствуйте, коллеги! В данной статье будет рассмотрена ошибка преобразования данных XML: причины её возникновения и инструкция по ее устранению несколькими вариантами.
1. Основные сведения про языки XML и HTML
Для начала разберём, что такое XML. XML (еXtensible Markup Language) – это язык программирования, который необходим, чтобы хранить данные. В XML необходимо самим определять теги, так как изначально оны не определены. Особенность XML заключается в том, что это самоопределяемый язык. Языки XML и HTML довольно похожи. Единственное отличие между ними – назначение: HTML отображает данные и решает, в каком виде будет их отображение, когда XML только хранит и транспортирует данные.
2. Возникновение ошибки преобразования данных
Обычно ошибка преобразования данных возникает, когда вызывается метод из контекста (ПрочитатьXML) в следующем виде: ЗаписатьЗначение = Прочитать XML(Чтение XML).
Это происходит, когда настраивается обмен данными при помощи стандартной обработки. Это может быть обработка загрузки или выгрузки XML.
Выглядит ошибка преобразования в 1С следующим образом:
Рис. 1 Ошибка преобразования 1С 8.3
3. Причины появления и решения ошибки преобразования 1С
Ошибку преобразования XML следует воспринимать как одну из стандартных ошибок, когда происходит нарушение получения данных между периферийным узлом и центральным узлом.
Есть несколько возможных причин появления данной ошибки.
1. Когда структура с метаданными в конфигурации не соответствует. Если «действие» происходит в узле, который является главным. В данном случае конфигурация, скорее всего, различается. То есть, когда происходит внешняя обработка с загрузкой или выгрузкой XML, то конфигурации должны быть одинаковыми, иначе будет возникать ошибка преобразования. В случае, когда данные передаются по стандартным обменам в конфигурации, нужно проверить совпадения объекта метаданных в правилах по обмену.
2. Неполадки в системе файлов. Когда происходит обмен данными, может возникать ошибка преобразования данных XML, так как файл не может считаться. Чтобы устранить ошибку следует дать файлу иное наименование, за чем последует загрузка того же файла, но с иным наименованием.
Если же все вышеперечисленное правильно, в узле, который отправляет данные, необходимо запустить обработку «ВыгрузкаЗагрузкаДанныхXML.epf», которая находится в каталоге с шаблоном конфигураций, в составе конфигурации «Конвертация данных». Кликаем на «Недопустимые символы в плане обмена» и выбираем узел, который получает данные. В случае, если по окончанию проверки появятся ошибки, для окончательного устранения ошибки преобразования XML нужно будет решить те небольшие неполадки.
В данной статье была рассмотрена ошибка преобразования данных XML, которая возникает при стандартных обменах. Также было выведено две причины её возникновения и описано три возможных способа решения ошибки преобразования данных в 1С 8.3.
Специалист компании «Кодерлайн»
Айдар Фархутдинов
Ошибка при работе в 1С 8 Ошибка при вызове метода контекста (ЗначениеИзСтрокиВнутр) по причине: Ошибка преобразования по причине: Ошибка формата потока
Описание ошибки:
Ошибка в обработке, при загрузке/чтении данных из файла MS Excel:
Ошибка при вызове метода контекста (ЗначениеИзСтрокиВнутр)
ТЗРез = ЗначениеИзСтрокиВнутр(Эксель.ПолучитьЛист(Лист));
по причине:
Ошибка преобразования
по причине:
Ошибка формата потока
Найденные решения:
При нажатии на кнопку «Подробно…» оказывается удивительным, что ошибка возникает при использовании метода «ПолучитьЛист()» для объекта — Excel.
Опытным путем было определено, что ошибка возникала только под конкретным пользователем базы 1С на нескольких рабочих местах. С другой стороны, под другим пользователем с таким же набором прав ошибка «Ошибка преобразования по причине: Ошибка формата потока» не возникала при попытке получить данные из того же файла Excel что на исходном рабочем месте, что на других. Но все равно была предпринята попытка на исходном рабочем месте очистить кэш базы (временные пользовательские файлы) через удаление базы из списка баз и подключение — но это не изменило ситуацию.
Для базы были выполнены наиболее популярные операции для случая возникновения ошибки «Ошибка формата потока» (в конце статьи будет ссылка на описание всех общих рекомендация для этой ошибки): процедура «Тестирование и исправление…» базы в конфигураторе базы, проверка физической целостности базы. Но ошибка сохранилась для изначального пользователя, при работе которого возникла.
Необходимо было быстро устранить ошибку, поэтому было решено создать нового пользователя базы с похожим именем. Под новым пользователем работа по загрузке данных из Excel выполнялась без ошибки формата потока. И для «красоты» учета в базе было запланировано на него с помощью обработки «Поиск и замена дублирующихся элементов справочников» заменить исходного пользователя. Но после объединения пользователей — ошибка снова возникла. Было ощущение, что ошибка возникает только для пользователя с конкретным именем. Поэтому в имени пользователя базы, в конце имени был добавлен символ «_», что отображалось только в списке пользователей базы при запуске сеанса работы с базой. У пользователя справочника «Пользователи» имя осталось прежним — для вывода в печатных формах как и раньше.
Т.е. по факту: к сожалению найти исходную причину ошибки формата потока в сторонней обработке при загрузке данных из Excel не получилось, но удалось устранить, если можно выразиться «симптомы». Дальнейшая работа была восстановлена.
Если данная приведенная информация не помогла устранить «Ошибку формата потока», то предлагается воспользоваться общей инструкцией по устранению данной ошибки: «Ошибка формата потока» в 1С: Предприятие 8. Общее руководство по устранению.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
12-11-2020
Журавлев А.С.
(Сайт azhur-c.ru)
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
|
|||||||||||
|
В обработке следующий код: ПолученноеЗначение = ЗначениеИзФайла(ИмяФайла); При выполнении (клиентом) пользователем отрабатывает замечательно. В регламентном задании выдает ошибку: Ошибка при вызове метода контекста (ЗначениеИзФайла): Ошибка преобразования. Почему? Что делать?
а что в файле находится??
А в таблице? А права у сервера на файл есть?
в таблице 2 колонки: код и сумма. Файл сформирован методом ЗначениеВФайл(ИмяФайла,ТаблицаСотрудников); права сейчас проверю.
Тэги:
Комментарии доступны только авторизированным пользователям
Консоль запросов. Значение из файла |
||||||
|
||||||
|