Имя: Пароль:
1C
1С v8
Запись файла на клиенте.
0 lirt82
 
18.08.25
09:16
Есть внешняя обработка, в модуле ее формы есть рабочий код.
Можно ли из процедуры листинг ниже, отмеченные фрагменты (отмеченные *) перенести на выполнение в процедуры с директивой &НаКлиенте с использованием оповещения?

&НаСервере
Процедура ТаблицаЗначенийВCSV(ТЗРез, Разделитель)  
	
	//Преобразуем Таблицу значений в Табличный документ
	ТабличныйДокумент = ТаблицаЗначенийВТабличныйДокумент(ТЗРез);   
	
	ОбластьПоиска = ТабличныйДокумент.Область(1,1,1,1);
	Пока Истина Цикл
		ОбластьПоиска = ТабличныйДокумент.НайтиТекст(Символы.Таб, ОбластьПоиска);
		Если ОбластьПоиска = Неопределено Тогда
			Прервать;
		КонецЕсли;
		ОбластьПоиска.Текст = СтрЗаменить(ОбластьПоиска.Текст, Символы.Таб, "<$СимволТабуляции$/>");	
	КонецЦикла;

	// Сохраняем Табличный документ как текст, в полученном текстовом документе значения каждой ячейки разделяются через символ табуляции 
	*ТабличныйДокумент.Записать(Объект.ПутьКФайлу, ТипФайлаТабличногоДокумента.TXT); 
	*//как перенести запись в процедуру &НаКлиенте
	
	//Извлекаем полученный Текстовый документ
	ТекстовыйФайл = Новый ТекстовыйДокумент;
	ТекстовыйФайл.Прочитать(Объект.ПутьКФайлу, КодировкаТекста.UTF8, Символы.ПС);	 	
	Текст = ТекстовыйФайл.ПолучитьТекст(); 
	
	//Заменяем сформированные символы табуляции на символ разделитель csv файла переданный параметром функции
	Текст = СтрЗаменить(Текст, Символы.Таб, Разделитель);	
		
	// Востанавливаем ранее экранированные символы табуляции в самих данных
	Текст = СтрЗаменить(Текст, "<$СимволТабуляции$/>", Символы.Таб);
	
	// Сохраняем сформированный текст csv-файла 
	ТекстовыйФайл.УстановитьТекст(Текст);
	*ТекстовыйФайл.Записать(Объект.ПутьКФайлу, , Символы.ПС);
	*//как перенести запись в процедуру &НаКлиенте
	
КонецПроцедуры
1 Ненавижу 1С
 
гуру
18.08.25
09:12
Нужно табличный/текстовый документ вернуть с сервера и записать на клиенте
2 lirt82
 
18.08.25
09:15
(1) пример
3 lirt82
 
18.08.25
09:23
(1) желательно не таскать табличный документ как объект а использовать ВременноеХранилище
4 Мультук
 
гуру
18.08.25
09:26
(2)
google:
1с передать файл с сервера на клиент пример кода

Результат:
https://its.1c.ru/db/intgr83#content:194:hdoc

"Получение  нескольких файлов с сервера"
5 Волшебник
 
18.08.25
09:26
(3) Сделайте функцию, которая возвращает csv в виде строки
6 Толич
 
18.08.25
09:45
(5) + 1
7 lirt82
 
18.08.25
09:59
(5) я использовал табличный документ вместо конкатенации строк, а понял сериализовать в строку, эту строку передать на клиент, на клиенте обратно и записать.
8 Волшебник
 
18.08.25
09:58
(7) Вы молодец.
9 lirt82
 
18.08.25
10:24
(5)

&НаСервере
Процедура ТаблицаЗначенийВCSV(ТЗРез, Разделитель)  
    
    //Преобразуем Таблицу значений в Табличный документ
    ТабличныйДокумент = ТаблицаЗначенийВТабличныйДокумент(ТЗРез);  
    
    ОбластьПоиска = ТабличныйДокумент.Область(1,1,1,1);
    Пока Истина Цикл
        ОбластьПоиска = ТабличныйДокумент.НайтиТекст(Символы.Таб, ОбластьПоиска);
        Если ОбластьПоиска = Неопределено Тогда
            Прервать;
        КонецЕсли;
        ОбластьПоиска.Текст = СтрЗаменить(ОбластьПоиска.Текст, Символы.Таб, "<$СимволТабуляции$/>");    
    КонецЦикла;

    // Сохраняем Табличный документ как текст, в полученном текстовом документе значения каждой ячейки разделяются через символ табуляции
    //*ТабличныйДокумент.Записать(Объект.ПутьКФайлу, ТипФайлаТабличногоДокумента.TXT);
    //как перенести запись в процедуру &НаКлиенте
    СериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    СтрокаТабличногоДокумента = СериализаторXDTO.ЗаписатьXML(ТабличныйДокумент);
    
    ПередатьИСохранитьНаКлиенте(СтрокаТабличногоДокумента);
    
    //Извлекаем полученный Текстовый документ
    ТекстовыйФайл = Новый ТекстовыйДокумент;
    ТекстовыйФайл.Прочитать(Объект.ПутьКФайлу, КодировкаТекста.UTF8, Символы.ПС);         
    Текст = ТекстовыйФайл.ПолучитьТекст();
    
    //Заменяем сформированные символы табуляции на символ разделитель csv файла переданный параметром функции
    Текст = СтрЗаменить(Текст, Символы.Таб, Разделитель);    
        
    // Востанавливаем ранее экранированные символы табуляции в самих данных
    Текст = СтрЗаменить(Текст, "<$СимволТабуляции$/>", Символы.Таб);
    
    // Сохраняем сформированный текст csv-файла
    ТекстовыйФайл.УстановитьТекст(Текст);
    *ТекстовыйФайл.Записать(Объект.ПутьКФайлу, , Символы.ПС);
    *//как перенести запись в процедуру &НаКлиенте
    
КонецПроцедуры

&НаКлиенте
Процедура ПередатьИСохранитьНаКлиенте(СтрокаТабличногоДокумента)
    
    СериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    ТабличныйДокумент = СериализаторXDTO.ПрочитатьXML(СтрокаТабличногоДокумента);
    
    ТабличныйДокумент.НачатьЗапись( , Объект.ПутьКФайлу);
    
КонецПроцедуры

Процедура или функция с указанным именем не определена (ПередатьИСохранитьНаКлиенте)
    <<?>>ПередатьИСохранитьНаКлиенте(СтрокаТабличногоДокумента); (Проверка: Сервер)
10 Волшебник
 
18.08.25
10:27
(9) Сделайте серверную функцию, которая возвращает csv в виде строки
11 lirt82
 
18.08.25
10:32
Цель: процедуру ТаблицаЗначенийВCSV(ТЗРез, Разделитель) которая выполняется на сервере, необходимо ускорить.
т.е. действия сохранение табличного документа в файл необходимо перенести на клиент, далее сохраненный на клиенте файл табличного документа необходимо преобразовать и сохранить в формате csv. Используя асинхронные вызовы.
12 Волшебник
 
18.08.25
10:33
(11) Сделайте серверную функцию, которая возвращает csv в виде строки
13 maxab72
 
18.08.25
10:36
(11) это какое-то задание на собеседовании?
14 lirt82
 
18.08.25
10:39
(12) т.е. в эту серверную функцию я передаю табличный документ, там его сериализую в строку и возвращаю эту строку куда?)
15 Волшебник
 
18.08.25
10:40
(14) возвращаете в клиентскую процедуру, откуда вызвали
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.