Имя: Пароль:
1C
 
Интерактивное редактирование mxl файла на УФ
0 Juliette_
Juliette
 
18.05.24
09:52
Макет печатной формы хранится во внешнем файле.
Внешняя ПФ работает как ВызовКлиентскогоМетода, т.е. открывается форма.
Как организовать возможность редактирования MXL файла на форме? При открытии формы должен подгружаться файл в поле с типом "Табличный документ, далее пользователь может править этот табличный документ и перезаписать его на диске. Как это делается, кто поделится примером?
1 Волшебник
 
18.05.24
10:24
ТД.Прочитать(Файл);
...
ТД.Записать(Файл);
2 Juliette_
Juliette
 
18.05.24
17:30
и правда, все просто. На будущее

&НаКлиенте
Процедура ПрочитатьМакет(Команда) 
	
	ПутьКФайлуМХЛ = "...";
	Адрес = СохранитьФайлВоВременномХранилище(ПутьКФайлуМХЛ);
	Макет = ПрочитатьТабДокНаСервере(Адрес); 

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

&НаКлиенте
Функция СохранитьФайлВоВременномХранилище(Путь)
	
	ДвоичныеДанные = Новый ДвоичныеДанные(Путь);
	Возврат ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор);
	
КонецФункции

&НаСервере
Функция ПрочитатьТабДокНаСервере(Адрес)
	
	ФайлПриемник = ПолучитьИмяВременногоФайла(".mxl");
	ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ДанныеХранилища.Записать(ФайлПриемник);
	
	ТабДок = Новый ТабличныйДокумент;
	ТабДок.Прочитать(ФайлПриемник);
	
	Возврат ТабДок;
	
КонецФункции


&НаКлиенте
Процедура ЗаписатьМакет(Команда)
	Макет.Записать("...");
КонецПроцедуры
3 Mort
 
19.05.24
21:33
Чтобы не дёргать диск лишний раз, придумали потоки (с 8.3.9):

&НаСервере
Функция ПрочитатьТабДокНаСервере(Адрес)
    
    ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
Поток = ДанныеХранилища.ОткрытьПотокДляЧтения();
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(Поток);
    
    Возврат ТабДок;
    
КонецФункции
4 Mort
 
19.05.24
21:36
А по задаче вообще не ясно зачем на сервер этот файл передавать, прочитать и на клиенте можно.
5 SleepyHead
 
20.05.24
05:34
(4) Только на толстом.
Независимо от того, куда вы едете — это в гору и против ветра!