1с значениеизфайла ошибка преобразования

Метод ЗначениеИзФайла() и Ошибка преобразования ☑ 0

AlexITGround

25.07.13

09:36

Таблица значений выгружалась методом ЗначениеВФайл() в Excel-файл. После редактирования загрузка методом ЗначениеИзФайла() вышла с ошибкой «Ошибка преобразования». Есть какие мысли? Не хочу построчно доставать. Как бы для этого и делал выгрузка этим методом, чтобы не писать лишние строки кода.

1

cw014

25.07.13

09:37

Мало информации

Это вы как так выгружали интересно? методом ЗначениеВФайл() в Excel-файл???!!!

2

Галахад

25.07.13

09:38

(1) + 1.

3

Maxus43

25.07.13

09:39

метод значение в файл — сериализует объект. эксель тут не причем вобще

4

cw014

25.07.13

09:42

(3) А у них это в эксель… Вот такие вот кудесники

5

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 = Строка(Зн);

        КонецЦикла;

Т  —  это таблица значений.

Можно ли его данным методом забрать?

6

Maxus43

25.07.13

09:50

(5) и где ЗначениеВФайл()?

ты ложишь так: sh.Cells(Т.Индекс(Стр)+2, К).FormulaR1C1 = Строка(Зн);

Во первых непонятно что хотел этим сделать… ну а во вторых — как ложишь, так и доставай.

7

Maxus43

25.07.13

09:51

што то я тупой стал… не понимаю я это вот вобще:

    Для Каждого Стр Из Т Цикл

        Для К = 1 По Кол Цикл

            Зн = Стр[К-1];

            sh.Cells(Т.Индекс(Стр)+2, К).FormulaR1C1 = Строка(Зн);

        КонецЦикла;

8

Галахад

25.07.13

09:56

(7) Вроде нормально.

9

cw014

25.07.13

09:57

(7) Это особая уличная магия…

(5) был переделал…

Я вообще отказываюсь что либо понимать

10

Галахад

25.07.13

10:02

(9) Где косяк-то? В (7).

11

AlexITGround

25.07.13

10:04

(10) там нет косяка…

12

cw014

25.07.13

10:09

(11) А теперь соберись с мыслями, попей воды и скажи, что ты от нас хочешь?

13

AlexITGround

25.07.13

10:23

(12) спасибо, ребят, за помощь. Сам разобрался.

Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший

×


Индекс


Поиск

Поиск





Поиск




  •  Предыдущая
  • Следующая 

© КОРУС Консалтинг СНГ, 2012 — 2018, Санкт-Петербург, Большой Сампсониевский пр., д. 68, лит. Н

help@esphere.ru, 8 (800) 100-8-812

  • 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

    Метки нет (Все метки)


    В файл на локальном компьютере записана ТаблицаЗначений с данными.

    На форме обработки имеется команда «Загрузить»;
    При нажатии на команду выбирается файл (через режим диалога выбора файла)
    Дальше идет попытка получить переменную типа ТаблицаЗначений из выбранного файла.

    1C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    &НаКлиенте
    Процедура МояПроц1(Команда)
        ТЗ = ЗагрузитьТЗИзФайла(ТекФайл); 
    КонецПроцедуры
     
    &НаСервере
    Функция  ЗагрузитьТЗИзФайла(ТекФайл)    
        Возврат  ЗначениеИзФайла(ТекФайл);     
    КонецФункции

    Если конфигурация установлена в файловом варианте, то такой вот прием срабатывает
    ================================================== =================
    Если конфигурация установлена в серверном варианте, то выводится ошибка
    {Форма.Форма.Форма(51)}: Ошибка при вызове метода контекста (ЗначениеИзФайла)
    Возврат ЗначениеИзФайла(ТекФайл);
    по причине:
    Ошибка преобразования

    ================================================== ==================
    Можно как-нибудь перекинуть данные из файла в процедуру, которая выполняется на клиенте?

    Добавлено через 16 минут
    Управляемое приложение 1С8.2 (толстый клиент)

    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,
    Не знаю. Я не знаю, что значит правильный путь для сервера.

    Без переменной ТекФайл у меня было бы как-то так

    1C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    &НаКлиенте
    Процедура МояПроц1(Команда)
        ТЗ = ЗагрузитьТЗИзФайла("C:ТекФайл"); 
    КонецПроцедуры
     
    &НаСервере
    Функция  ЗагрузитьТЗИзФайла(ТекФайл)    
        Возврат  ЗначениеИзФайла(ТекФайл);    //C:ТекФайл 
    КонецФункции

    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:ТекФайл» будет искаться на сервере.
    Файловой БД наплевать на операторы &НаСервере и &НаКлиенте, все выполняется на локальной машине.
    Решение:
    1) Расшарить файл в сети, что бы сервер смог его взять по полному пути (пример для сети имя_компаресурс)
    2) Удалить описатель &НаСервере.
    3) Создать на сервере таблицу, потом передать управление клиенту, на клиенте записать в нее данные, обработать данные на сервере. (по сути будет равносильно копированию файла по сети).

    В принципе я повторил Xomych.

    1

    1369 / 592 / 199

    Регистрация: 02.08.2011

    Сообщений: 2,882

    30.10.2013, 18:41

     [ТС]

    9

    В общем, ситуация следующая.
    Я имею файл с ТЗ, который мне надо поместить на форму. Форма должна открыться и ТабЧасть этой формы должна заполниться из ТЗ, которая в файле.

    Т.к. в файловом варианте проблем не было, то и вопроса не возникало (там с сервера на клиент возврат происходит). Но если в серверном варианте с сервера на клиент возврата не получится, то я не особо представляю как открыть форму с уже заполненной табличной частью, причем открыть так, чтоб без записи в базу.

    Если я передаю на сервер Табличную часть формы и там что-то в ней изменяю, то после этого на самой форме Табличное поле не изменяется. Это первое
    Второе о речах Volexovich, чего-то я тут не понял. То, что файловая база работает в файловом варианте без сервера совсем не обозначает то, что её наплевать на директивы. Без этих директив даже в файловом варианте очень много задач не решить. И про передачу управления. Форма — это в любом случае клиент, взятие значение из файла — это сервер. Нельзя передать что-то с сервера на клиент (как выше сказано).

    в общем, я в тупике.

    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 секунд

    1C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    &НаКлиенте
    Процедура МояПроц1(Команда)
        ЗагрузитьТЗИзФайла(ТекФайл); 
    КонецПроцедуры
     
    &НаСервере
    Процедура ЗагрузитьТЗИзФайла(ТекФайл)    
        ТЗ.Загрузить(ЗначениеИзФайла(ТекФайл));      
    КонецПроцедуры

    Где ТЗ — твоя таблица на форме, с такими же колонками как и в файле, причем если ТекФайл — это реквизит Формы, то его можно не передавать

    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 минут
    не. Не совсем все.
    Я уже сказал. так вот

    1C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    &НаКлиенте
    Процедура МояПроц1(Команда)
        ЗагрузитьТЗИзФайла(ТекФайл,ТЗ);  //ТЗ - это ТабПолеФормы
        мФорма.Открыть();  //мФорма - это форма с ТабПолем, которое должно измениться
    КонецПроцедуры
     
    &НаСервере
    Процедура ЗагрузитьТЗИзФайла(ТекФайл,ТЗ)    
        ТЗ.Загрузить(ЗначениеИзФайла(ТекФайл));      
    КонецПроцедуры

    В отладчике ТЗ такое какое и должно стать.
    Форма же открывается со старым значением. Не изменяется ТабПоле.

    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

    В обработке пишешь

    1C
    1
    2
    3
    4
    5
    6
    
    &НаКлиенте
    Процедура Команда1(Команда)
        ТекФайл = "E:1CТекФайл";;
       
        ОткрытьФорму("Справочник.Тестовый.Форма.ФормаЭлемента", Новый Структура("Файл",ТекФайл));
    КонецПроцедуры

    В модуле формы справочника на событие

    1C
    1
    2
    3
    4
    5
    6
    
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        if Параметры.Свойство("Файл") then
            Объект.ТабличнаяЧасть1.Загрузить(ЗначениеИзФайла(Параметры.Файл));
        endif;  
    КонецПроцедуры

    1

    1369 / 592 / 199

    Регистрация: 02.08.2011

    Сообщений: 2,882

    30.10.2013, 22:37

     [ТС]

    19

    Цитата
    Сообщение от Xomych
    Посмотреть сообщение

    В модуле формы справочника на событие

    в модуль формы справочника мне ничего писать нельзя будет.

    только обработкой.

    Добавлено через 1 минуту
    наверное подпиской на событие можно (не сильно с этим знаком пока еще)

    Добавлено через 49 минут
    основной недостаток подписок — нельзя подписаться на события форм, да?
    значит такой вариант не вариант

    0

    Xomych

    856 / 655 / 111

    Регистрация: 01.11.2012

    Сообщений: 2,410

    30.10.2013, 22:43

    20

    1C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    &НаКлиенте
    Процедура Команда1(Команда)
        ТекФайл = "E:1CТекФайл";
       
        Массив=Тест(ТекФайл);
        мф=ПолучитьФорму("Справочник.Тестовый.Форма.ФормаЭлемента");
        for each Структ in Массив do
            НС=Мф.Объект.ТабличнаяЧасть1.Добавить();
            for each Стр in Структ do 
                НС[Стр.Ключ]=Стр.Значение;
            enddo;  
        enddo;  
        мф.Открыть();
    КонецПроцедуры
     
    &НаСервере
    Функция Тест(ИФ)
        МассивКолонок=Новый Массив;
        МассивСтрок=Новый Массив;
        ТЗ=ЗначениеИЗФайла(ИФ);
        for each Кол in ТЗ.Колонки do
            МассивКолонок.Добавить(Кол.Имя);
        enddo;  
        for each Стр in ТЗ do
            Структ=Новый Структура;
            for each Кол in МассивКолонок do
                Структ.Вставить(Кол,Стр[Кол]);
            enddo;  
            МассивСтрок.Добавить(Структ);
        enddo;  
            
        return МассивСтрок;
    КонецФункции

    И не благодари. Я вот до общения с тобой, никогда этой темой не занимался и не интересовался. Я час порылся в синтакс-помощнике и нашел способ. Надо тебе что-то менять в изучении 1С
    Разложил Таблицу значений на Массив Структур

    0

    ×


    Индекс


    Поиск

    Поиск





    Поиск




    •  Предыдущая
    • Следующая 

    © КОРУС Консалтинг СНГ, 2012 — 2018, Санкт-Петербург, Большой Сампсониевский пр., д. 68, лит. Н

    help@esphere.ru, 8 (800) 100-8-812

    Таблица значений выгружалась методом ЗначениеВФайл в 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:
    Ошибка при вызове метода контекста (ЗначениеИзСтрокиВнутр)
    ТЗРез = ЗначениеИзСтрокиВнутр(Эксель.ПолучитьЛист(Лист));
    по причине:
    Ошибка преобразования
    по причине:
    Ошибка формата потока

    Найденные решения:

    1C 8 Ошибка формата потока при загрузке из Excel, эксель

    При нажатии на кнопку «Подробно…» оказывается удивительным, что ошибка возникает при использовании метода «ПолучитьЛист()» для объекта — Excel.

    1C 8 при чтении листа Excel, эксель, Ошибка преобразования по причине: Ошибка формата потока

    Опытным путем было определено, что ошибка возникала только под конкретным пользователем базы 1С на нескольких рабочих местах. С другой стороны, под другим пользователем с таким же набором прав ошибка «Ошибка преобразования по причине: Ошибка формата потока» не возникала при попытке получить данные из того же файла Excel что на исходном рабочем месте, что на других. Но все равно была предпринята попытка на исходном рабочем месте очистить кэш базы (временные пользовательские файлы) через удаление базы из списка баз и подключение — но это не изменило ситуацию.

    Для базы были выполнены наиболее популярные операции для случая возникновения ошибки «Ошибка формата потока» (в конце статьи будет ссылка на описание всех общих рекомендация для этой ошибки): процедура «Тестирование и исправление…» базы в конфигураторе базы, проверка физической целостности базы. Но ошибка сохранилась для изначального пользователя, при работе которого возникла.

    1C 8 ошибка при использовании метода ПолучитьЛист() Ошибка формата потока

    Необходимо было быстро устранить ошибку, поэтому было решено создать нового пользователя базы с похожим именем. Под новым пользователем работа по загрузке данных из Excel выполнялась без ошибки формата потока. И для «красоты» учета в базе было запланировано на него с помощью обработки «Поиск и замена дублирующихся элементов справочников» заменить исходного пользователя. Но после объединения пользователей — ошибка снова возникла. Было ощущение, что ошибка возникает только для пользователя с конкретным именем. Поэтому в имени пользователя базы, в конце имени был добавлен символ «_», что отображалось только в списке пользователей базы при запуске сеанса работы с базой. У пользователя справочника «Пользователи» имя осталось прежним — для вывода в печатных формах как и раньше.

    Т.е. по факту: к сожалению найти исходную причину ошибки формата потока в сторонней обработке при загрузке данных из Excel не получилось, но удалось устранить, если можно выразиться «симптомы». Дальнейшая работа была восстановлена.

    Если данная приведенная информация не помогла устранить «Ошибку формата потока», то предлагается воспользоваться общей инструкцией по устранению данной ошибки: «Ошибка формата потока» в 1С: Предприятие 8. Общее руководство по устранению.

    Оцените, помогло ли Вам предоставленное описание решения ошибки?




    © www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

    12-11-2020

    Журавлев А.С.
    (Сайт azhur-c.ru)

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

    Подсистема «Инструменты разработчика» 1С 8

    Четверг, 21.09.2023, 08:19

    Консоль запросов. Значение из файла

    nclockworker Дата: Понедельник, 24.05.2021, 06:12 | Сообщение # 1

    Генерал-майор

    Группа: Пользователи

    Репутация: 342

    Статус: Оффлайн


    При открытии консоли запросов в портативном варианте получаю такую ошибку:

    Цитата

    {ВнешняяОбработка.ирОбщий.МодульОбъекта(25818)}: Ошибка при вызове метода контекста (ЗначениеИзФайла)
    ОписаниеФайла = ЗначениеИзФайла(ИмяФайлаИнформации);
    по причине:
    Ошибка преобразования

     
    tormozit Дата: Понедельник, 24.05.2021, 08:03 | Сообщение # 3

    Генералиссимус

    Группа: Администраторы

    Репутация: 145

    Статус: Оффлайн

    Исправлено в 5.93.2

     
    • Страница 1 из 1
    • 1

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

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

  • 1с зарегистрированные ошибки платформы
  • 1с запрос выбрать ошибка чтения значения
  • 1с заказы ошибка soap сервера
  • 1с документооборот ошибки релиза
  • 1с документооборот ошибка создания com объекта cognitive puma

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

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