AlexITGround
25.07.13
✎
09:36
Таблица значений выгружалась методом ЗначениеВФайл() в Excel-файл. После редактирования загрузка методом ЗначениеИзФайла() вышла с ошибкой «Ошибка преобразования». Есть какие мысли? Не хочу построчно доставать. Как бы для этого и делал выгрузка этим методом, чтобы не писать лишние строки кода.
cw014
25.07.13
✎
09:37
Мало информации
Это вы как так выгружали интересно? методом ЗначениеВФайл() в Excel-файл???!!!
Галахад
25.07.13
✎
09:38
(1) + 1.
Maxus43
25.07.13
✎
09:39
метод значение в файл — сериализует объект. эксель тут не причем вобще
cw014
25.07.13
✎
09:42
(3) А у них это в эксель… Вот такие вот кудесники
AlexITGround
25.07.13
✎
09:46
Ребят, прошу прощения, был переделал. Выгрузку а Excel делал так.
Попытка
XL = Новый COMОбъект («Excel.Application»);
Исключение
Сообщить(«Ошибка создания Excel.Application»);
Возврат;
КонецПопытки;
XL.Visible = 1;
wb = XL.Workbooks.Add();
sh = wb.Worksheets.Add();
Кол = Т.Колонки.Количество();
Если Кол = 0 Тогда
Возврат;
КонецЕсли;
Для К = 1 По Кол Цикл
Заг = Т.Колонки[К-1].Имя;
sh.Cells(1,К).Font.Name = «Tahoma»;
sh.Cells(1,К).Font.Size = 10;
sh.Cells(1,К).Font.FontStyle = «Bold»;
sh.Cells(1,К).FormulaR1C1 = Заг;
КонецЦикла;
Для Каждого Стр Из Т Цикл
Для К = 1 По Кол Цикл
Зн = Стр[К-1];
sh.Cells(Т.Индекс(Стр)+2, К).FormulaR1C1 = Строка(Зн);
КонецЦикла;
Т — это таблица значений.
Можно ли его данным методом забрать?
Maxus43
25.07.13
✎
09:50
(5) и где ЗначениеВФайл()?
ты ложишь так: sh.Cells(Т.Индекс(Стр)+2, К).FormulaR1C1 = Строка(Зн);
Во первых непонятно что хотел этим сделать… ну а во вторых — как ложишь, так и доставай.
Maxus43
25.07.13
✎
09:51
што то я тупой стал… не понимаю я это вот вобще:
Для Каждого Стр Из Т Цикл
Для К = 1 По Кол Цикл
Зн = Стр[К-1];
sh.Cells(Т.Индекс(Стр)+2, К).FormulaR1C1 = Строка(Зн);
КонецЦикла;
Галахад
25.07.13
✎
09:56
(7) Вроде нормально.
cw014
25.07.13
✎
09:57
(7) Это особая уличная магия…
(5) был переделал…
Я вообще отказываюсь что либо понимать
Галахад
25.07.13
✎
10:02
(9) Где косяк-то? В (7).
AlexITGround
25.07.13
✎
10:04
(10) там нет косяка…
cw014
25.07.13
✎
10:09
(11) А теперь соберись с мыслями, попей воды и скажи, что ты от нас хочешь?
AlexITGround
25.07.13
✎
10:23
(12) спасибо, ребят, за помощь. Сам разобрался.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший
|
|||||||||||
|
3 г. назад
Господа! А как так может быть? В модуле объекта объявляю экспортную переменную. В некоей процедуре присваиваю ей значение (таблица значений). Потом хочу из другой процедуры обратиться к этой таблице. А таблицы — нет. Неопределено. Это как так получается?..
Дуб В некоей процедуре присваиваю ей значение (таблица значений)
А где находится эта некая процедура?
Тезисно.
Перем РабочаяТаблица Экспорт;
Функция SQLiteInit(ФайлБД) Экспорт
РабочаяТаблица = Новый ТаблицаЗначений;
КонецФункции
Функция SQLiteQuery(Запрос) Экспорт
ТЗ = РабочаяТаблица.Скопировать();
// заполняется ТЗ
Для Каждого Стр Из ТЗ Цикл
НС = РабочаяТаблица.Добавить();
КонецЦикла;
КонецФункции
Функция СформироватьОтчет() Экспорт
ТД = Новый ТабличныйДокумент;
Мак = ПолучитьМакет("Макет");
ОбластьШапка = Мак.ПолучитьОбласть("Шапка|Колонка");
ОбластьСтрока = Мак.ПолучитьОбласть("Строка|Колонка");
ТД.Вывести(ОбластьШапка);
ТД.Вывести(ОбластьСтрока);
Возврат ТД;
КонецФункции
Вся эта гадость вызывается из модуля формы:
Если тОбъект.SQLiteInit(Объект.ПутьКФайлу) Тогда
тОбъект.SQLiteQuery("select * from logdata");
КонецЕсли;
В завершении SQLiteQuery таблица есть и она заполнена.
А в СформироватьОтчет — таблицы не существует.
Внутренний говнокод не привожу, поскольку там к таблице нет обращений.
Итить… Убрал переменную. Вместо этого завёл реквизит обработки. Ничего не поменялось: в СформироватьОтчет таблица без данных…
Не вижу связи между SQLiteQuery и СформироватьОтчет. Где там используется РабочаяТаблица?
(5) отладчиком смотрю. Могу в коде добавить: сути это не поменяет. В контексте этой функции РабочейТаблицы уже не существует.
Где-то в коде накосячил. Должно работать. Вот такое:
Процедура КнопкаВыполнитьНажатие(Кнопка) Инит(); Тест(); КонецПроцедуры Перем тзТест; Процедура Инит() Экспорт тзТест = Новый ТаблицаЗначений; КонецПроцедуры Процедура Тест() Экспорт Сообщить(тзТест.Колонки.Количество()); КонецПроцедуры
у меня отработало
(7) не, у меня СформироватьОтчет — отдельно вызывается. По другой кнопке. Т.е. таблица заполняется при открытии обработки, а потом, по нажатию кнопки хочу к этой таблице обращаться
(8) Пох. Вот так все равно работает:
Процедура КнопкаВыполнитьНажатие(Кнопка) Инит(); КонецПроцедуры Процедура Выполнить1Нажатие(Элемент) Тест(); КонецПроцедуры
У тебя заполнение ТЗ случаем не фоновым идет?
всё верно. будет неопределено
используй временное хранилище
(12) так я реквизит завёл. И всё равно та же шняга… Что за временное хранилище?
ЗЫ: там таблица — не сказать чтобы маленькая. Несколько тысяч записей в сорока колонках.
+реквизит формы Адрес (Строка)
код формы
код модуля
Я что-то не понял. В SQLiteQuery ты делаешь локальную переменную ТЗ и ее заполняешь. А данные потом хочешь получить из модульной РабочаяТаблица?
(15) не. Я потом РабочуюТаблицу заполняю, обходя ТЗ. Ещё раз: в конце функции она сформирована, там всё ок.
(14) там, вроде, ограничение на объём. Они это под браузеры пилили.
блять, у тебя обычное приложение что ли
Решил сделать через временный файл: сериализую полученную таблицу в файл, потом восстанавливаю. Но — фигу с маслом: файл формируется, текстовым редактором он открывается, контент там есть. Но при ЗначениеИзФайла() выдаёт «ошибку преобразования» 
(18) файловая база, управляемое приложение.
Дуб, мозги не […], делай как я написал
(22) была нормальная среда — v7. Ну — хер с ним, v8 поначалу тоже терпимо было. Но как начали псевдобраузерность изображать, так покатилось всё в сраное говно… Почему элементарная сериализация не работает?
(23) при переходе с сервера на клиент у тебя переменная обнуляется
Дуб Почему элементарная сериализация не работает?
а […] знаэ. сериализуешь через ЗначениеВФайл? так-то по идее должно прокатывать
(24) ЗначениеВФайл(ВрФайлРабочейТаблицы, РабТаб); РабТаб = ЗначениеИзФайла(ВрФайлРабочейТаблицы);
На случай моего идиотизма — корректность пути ВрФайлРабочейТаблицы проверяю на этапе загрузки: оно корректно.
Биополе неважнецкое, стопудова в этом трабла 
Дуб управляемое приложение.
я, пожалуй, уточню: ты точно уверен, что у тебя обработка с управляемой формой?
Дуб Вся эта гадость вызывается из модуля формы:
Если тОбъект.SQLiteInit(Объект.ПутьКФайлу) Тогда
тОбъект.SQLiteQuery(«select * from logdata»);
КонецЕсли;
покажи всю функцию из МФ, включая директивы
Дуб В завершении SQLiteQuery таблица есть и она заполнена.
А в СформироватьОтчет — таблицы не существует.
Все правильно.
Так только в обычном приложении работать могло.
А в управляемом — значение переменной, объявленной на сервере, сохраняется только на время исполнения серверного вызова.
(28) ок. Но почему значение из файла не вытаскивается
(29) Возможно, ТЗ нельзя выгрузить в файл.
Надо проще сделать.
Например, вместо переменной ТЗ сделать реквизит формы. И обе процедуры перенести в модуль формы.
[…] европейская. узнать это можно только загуглив твою обработку. пинай на мыло проверенным пацанам
(30) выгружается. Файл есть, контент есть
Да, ТЗ сериализуется.
А почему не загружается из файла — непонятно, надо отладчиком смотреть.
После отработки первой процедуры файл точно не пустой? Можешь его блокнотом открыть?
Имя файла при выгрузке и загрузке точно идентичное? Каким образом ты его из одной процедуры в другую передаешь?
(33) отладчиком смотреть нечего: он выдаёт ошибку на момент значения из файла. Имя идентичное: я-ж на этапе загрузки блокнотом смотрю файл.
Хрень какая-то.
ЧСХ: если в той же функции, где таблица сериализуется, восстановить её из файла, то без проблем восстанавливается. А если то же самое из другой функции, то ошибка преобразования.
Дуб решил всему форуму прокачать телепатию. Хитрец!
(36) всё в модуле объекта. При чём тут клиент?..
(38) я не знаю , при чём здесь клиент. отсюда не видно
ты бы выложил уже творение своё, а то приходится гадать на магическом шаре
(37) странная фигня: по имени временного файла обратиться не получается. Если путь указать принудительно, типа C:\tmp.txt , то работает… При том, что временный файл открывается при выборе через проводник… Херня какая-то.
Ладно, проехали. Всем спасибо 
(40) стыдно такое выкладывать. Да и проблема, по ходу, в текущем компе, а не в 1С
Дуб Ладно, проехали. Всем спасибо
![]()
не, ты от нас так просто не отделаешься.
давай обработину сюда
(42) Я бы предположил что проблемы в неправильном подходе к управляемому режиму. Выкладывай поделие на ревью.
Выкладывай, не тяни до пятницы …
jsmith82 […], Дуб
Всё … не засираем тематическую ветку.
there was no any засёр. как можно было на такой херне облажаться
я кстати ту обработку переделал. код в форму перенёс. это где произвольная ТЗ
(47) Igor, ты модератор, чтоль?
Bumer , чо за херня, ты мне на хвост решил наступить?
Вопрос снялся, кстати. Не глобально, а в рамках задачи. Не надо там таблицу значений…
Кстате, ктонить подскажет, сорри за оффтопик, можно ли сделать панель одной из баз другого цвета, причем сделать ето в пользовательском режиме?
витоге получим список баз со стандартным цветом И!!!!!!!! копию базы с другим, шобы пользаки не путалис)
|
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С.
| Подсистема «Инструменты разработчика» 1С 8 |
Четверг, 21.09.2023, 08:19 |
|
Консоль запросов. Значение из файла |
||||||
|
||||||
|
|
|















