Ошибка при вызове метода контекста значениеизфайла

daslex

1369 / 592 / 199

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

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

1

Загрузить значение из файла

30.10.2013, 13:12. Показов 16445. Ответов 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,411

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,411

30.10.2013, 17:27

6

Сервер у вас на другом компе?

А ты потом кстати таблицузначений не передашь на клиент возвратом. Надо прям на сервере обрабатывать будет.



0



1369 / 592 / 199

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

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

30.10.2013, 17:28

 [ТС]

7

Да.



0



207 / 181 / 31

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

Сообщений: 743

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,411

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,411

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,411

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,411

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,411

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,411

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



Подскажите пожалуйста с ЗначениеВФайл()…. ☑ 0

ОМЭЗ

18.05.09

13:34

Подскажите каким образом можно сохранить ПолеТабличногоДокумента1,что в следующий раз его можно было бы получить????

1

Mitriy

18.05.09

13:38

ТабличныйДокумент.mxl ???

2

RealSaint

18.05.09

13:40

(0) Главное меню — Файл — Сохранить.

3

John83

18.05.09

13:43

сохранить настройки формы? :)

4

ОМЭЗ

18.05.09

13:43

Нет мне нужно програмно это сделать, ну типа ЗначениеВФайл(ИмяФайла,?? а вот как сюда это ПолеТаблДока передать)

5

ОМЭЗ

18.05.09

13:44

(3)Наверно да т.к это ПолеТабличногоДокумента1 расположено на форме

6

RealSaint

18.05.09

13:45

(4) Может



ЗначениеВФайл(ЭлементыФормы.ПолеТабличногоДокумента.ПолучитьОбласть())



?

7

Mitriy

18.05.09

13:45

(5) ЭлементыФормы.ПолеТаблДока

8

ОМЭЗ

18.05.09

13:47

(7)Подскажи а как тогда его вернуть обратно?

Ну при открытии например

9

ОМЭЗ

18.05.09

13:49

Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)

   ЗначениеВФайл(«СохрТабл»,ЭлементыФормы.ПолеТабличногоДокумента1);

КонецПроцедуры

Процедура ПриОткрытии()

   ПолученноеЗначение = ЗначениеИзФайла(«СохрТабл»);

КонецПроцедуры

Пишет ошибку

Форма.Форма(34)}: Ошибка при вызове метода контекста (ЗначениеИзФайла): Ошибка преобразования

   ПолученноеЗначение = ЗначениеИзФайла(«СохрТабл»);

по причине:

Ошибка преобразования

10

Mitriy

18.05.09

13:53

(9) что такое «СохрТабл»? Здесь должно быть имя файла, то бишь полный пусть к файлу…

11

ОМЭЗ

18.05.09

13:54

(10)Так тоже можно оно его в Папку Установленой программы записывает.Я смотрел это файл существует

12

RealSaint

18.05.09

13:54

(9) Блин, как для слепого писал. Читать лень?



Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)

   ЗначениеВФайл("СохрТабл",ЭлементыФормы.ПолеТабличногоДокумента1.ПолучитьОбласть());

КонецПроцедуры

Процедура ПриОткрытии()

   ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ЗначениеИзФайла(ИмяФайла));

КонецПроцедуры



Писал по памяти.

13

ОМЭЗ

18.05.09

13:58

Вот Написал:

роцедура ПриОткрытии()

    ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ЗначениеИзФайла(«СохрТабл»));

КонецПроцедуры

Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)

   ЗначениеВФайл(«СохрТабл»,ЭлементыФормы.ПолеТабличногоДокумента1.ПолучитьОбласть());

КонецПроцедуры

Пишет ошибка

Форма.Форма(34)}: Ошибка при вызове метода контекста (ЗначениеИзФайла): Ошибка преобразования

    ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ЗначениеИзФайла(«СохрТабл»));

по причине:

Ошибка преобразования

14

RealSaint

18.05.09

13:59

(13) А ЗначениеИзФайла() тебе какой тип данных возвращает?

15

ОМЭЗ

18.05.09

14:01

(13)А оно на нём и выдаёт эту ошибку

16

Mitriy

18.05.09

14:03

(11) попробуй с расширением…

17

ОМЭЗ

18.05.09

14:04

(16)а какое поставить?

18

RealSaint

18.05.09

14:04

(15) Очень сомневаюсь что на нём. Ты разбей на две операции и проверь тип возвращаемых даных.

19

Mitriy

18.05.09

14:05

(17) .mxl

20

ОМЭЗ

18.05.09

14:08

Ну вот

Процедура ПриОткрытии()

   Ш = ЗначениеИзФайла(«СохрТабл.mxl»);

   //ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ЗначениеИзФайла(«СохрТабл»));

КонецПроцедуры

{Форма.Форма(34)}: Ошибка при вызове метода контекста (ЗначениеИзФайла): Ошибка преобразования

   Ш = ЗначениеИзФайла(«СохрТабл.mxl»);

по причине:

Ошибка преобразования

21

RealSaint

18.05.09

14:17

(20) Вот однозначно работающий код:



Процедура СохранитьНажатие(Элемент)

   ЗначениеВФайл("E:\Temp\111.mxl", ЭлементыФормы.ПолеТабличногоДокумента1.ПолучитьОбласть());

КонецПроцедуры

Процедура ЗагрузитьНажатие(Элемент)

   Значение = ЗначениеИзФайла("E:\Temp\111.mxl");

   ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(Значение);

КонецПроцедуры



Только что у себя проверил. Если у тебя не работает — значит у тебя проблемы в чём-то другом.

А расширение «.mxl» файлу давать не обязательно, 1С его всё-равно не откроет для просмотра.

22

ОМЭЗ

18.05.09

14:23

(21)Спасибо уже ошибку не выдаёт,но всеровно не чего не востанавливает,т.е. ПолеТабличногоДокумента1 — пустое

23

RealSaint

18.05.09

14:30

(22) А ты его предварительно очистил? Ты посмотри ниже, может оно выводит, но после имеющихся (пустых) данных?

24

ОМЭЗ

18.05.09

14:37

(23)Да всё, Огромное спасибо!!!,есть оно!!!

СтруктураДляХраненияОтчета = Новый структура(«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

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


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

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

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С.

В обработке следующий код: ПолученноеЗначение = ЗначениеИзФайла(ИмяФайла); При выполнении (клиентом) пользователем отрабатывает замечательно. В регламентном задании выдает ошибку: Ошибка при вызове метода контекста (ЗначениеИзФайла): Ошибка преобразования. Почему? Что делать?

а что в файле находится??

А в таблице? А права у сервера на файл есть?

в таблице 2 колонки: код и сумма. Файл сформирован методом ЗначениеВФайл(ИмяФайла,ТаблицаСотрудников);   права сейчас проверю.

Тэги:

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

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

Пятница, 22.09.2023, 19:24

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

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

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

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

Репутация: 342

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


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

Цитата

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

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

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

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

Репутация: 145

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

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

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

База знаний СФЕРА 1С Адаптер

×


Меню


Индекс


Поиск

Поиск





Поиск




  • 2. FAQ Адаптера EDI\EDO (TTConnector)
  • 2.15 Не удается создать/открыть 1C документ на основании ORDER — для ед. измерения, номенклатуры или контрагента не сделано сопоставление
  •  Предыдущая
  • Следующая 

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

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста значениеизстрокивнутр ошибка преобразования
  • Ошибка при вызове метода контекста значениезаполнено
  • Ошибка при вызове метода контекста значениевреквизитформы параметр 2
  • Ошибка при вызове метода контекста записать отправка прервана
  • Ошибка при вызове метода контекста значениевреквизитформы дерево значений