Сохранение печатной формы в Excel

1. wantingstew 13.10.20 16:57 Сейчас в теме
Всем доброго времени суток! Хочу добавить возможность сохранения печатной формы в нетиповой документ. Код написал, но при нажатии кнопки открывается окно диалога выбора и документ не хочет сохраняться. Подскажите, в чем может быть ошибка
 &НаСервере
Процедура СохранитьДокНаСервере()
	ТабДок = Новый ТабличныйДокумент;
	...
	ТабДок.Вывести(Подвал);
	ТабДок.АвтоМасштаб = Истина;
	//ТабДок.Записать("C:\Договора Материнского Капиатала\"+Объект.ЗаказКлиента.Номер+"_"+объект.Покупатель+".xlsx", ТипФайлаТабличногоДокумента.XLSX);
	Возврат
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьДок(Команда)
	
		СохранитьДокНаСервере();
	СтандартнаяОбработка = Ложь;
	РежимДиалога = РежимДиалогаВыбораФайла.Сохранение;
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;
	ДиалогВыбораФайла.Заголовок = "Выберите папку, где необходимо сохранить файл";  
	ДиалогВыбораФайла.ПолноеИмяФайла = Объект.ЗаказКлиента.Номер+объект.Покупатель;
	ДиалогВыбораФайла.Фильтр = "Формат выгрузки(*xlsx)|*.xlsx";
	Если ДиалогВыбораФайла.Выбрать() Тогда
		Объект.ПутьФайла = ДиалогВыбораФайла.ПолноеИмяФайла;
	КонецЕсли;
	
КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
7. andy_zhav 197 13.10.20 17:12 Сейчас в теме
(1)

 &НаСервере
Функция СформироватьТабДок()
    ТабДок = Новый ТабличныйДокумент;
    ...
    ТабДок.Вывести(Подвал);
    ТабДок.АвтоМасштаб = Истина;
    Возврат ТабДок;
    
КонецФункции

&НаКлиенте
Процедура СохранитьДок(Команда)
    
        ТабДок = СформироватьТабДок();
    СтандартнаяОбработка = Ложь;
    РежимДиалога = РежимДиалогаВыбораФайла.Сохранение;
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
    ДиалогВыбораФайла.МножественныйВыбор = Ложь;
    ДиалогВыбораФайла.Заголовок = "Выберите папку, где необходимо сохранить файл";  
    ДиалогВыбораФайла.ПолноеИмяФайла = Объект.ЗаказКлиента.Номер+объект.Покупатель;
    ДиалогВыбораФайла.Фильтр = "Формат выгрузки(*xlsx)|*.xlsx";
    Если ДиалогВыбораФайла.Выбрать() Тогда
       ТабДок.Записать(ДиалогВыбораФайла.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
    КонецЕсли;
    
КонецПроцедуры
Показать
criptid; wantingstew; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FatPanzer 13.10.20 17:01 Сейчас в теме
(1) В том, что ты просто выбрал путь и имя файла, но ни строчки не написал, чтобы его по этому адресу записать...
4. wantingstew 13.10.20 17:09 Сейчас в теме
(2) Примеры кода не подскажешь? Или ссылки на статьи по этой теме?
6. FatPanzer 13.10.20 17:11 Сейчас в теме
(4) Могу подсказать последовательность действий.
1. Формируем документ.
2. Выбираем имя файла для документа.
3. Записываем сформированный документ по указанному имени файла.

Твой алгоритм:
1. Формируем документ.
2. Теряем его на сервере.
3. Выбираем имя файла.

Найди отличия.
3. nomad_irk 80 13.10.20 17:08 Сейчас в теме
(1)Сервер ничего не знает про указанный путь. У сервера может вообще не быть диска С:.
5. wantingstew 13.10.20 17:10 Сейчас в теме
(3) Если ты говоришь про закомментированный код, то этот вариант был изначально отброшен в сторону из-за неудобства
8. nomad_irk 80 13.10.20 17:13 Сейчас в теме
(5)В чем не удобство? В каком контексте должна происходить запись на диск: в клиентском или серверном?
9. wantingstew 13.10.20 17:21 Сейчас в теме
(8) Все происходит на клиенте, нажимаем кнопку печать документа с последующим сохранением, печатная форма открывается и параллельно с ней документ автоматически сохраняется по указанному пути. У данного решения есть 2 проблемы: идет жесткая привязка к пути для сохранения документа и вторая - если у человека не создана нужная папка то программа выдаст ошибку, мол такой папки не существует и сохранить ничего нельзя. Поэтому делаю альтернативное решение, где точно также можно сохранить документ, но только через окно сохранения документа
10. FatPanzer 13.10.20 17:30 Сейчас в теме
(9) Так как диалог выбора файла и каталога доступен только на клиенте, то и запись документа должна организовываться на клиенте. Для этого документ должен быть доступен тоже на клиенте.
12. nomad_irk 80 13.10.20 17:43 Сейчас в теме
(10) Каталог для записи может быть на общем сетевом ресурсе, поэтому запись может быть как на клиенте, так и на сервере.
13. FatPanzer 13.10.20 17:50 Сейчас в теме
(12) Да, при условии, что этот ресурс с сервера доступен ровно по тому же пути и с теми же правами, что и с клиента. Или если клиент и сервер работают на одной машине. Или если это файловая база.

Если мы хотим, чтобы у пользователя все работало без сбоев и ошибок и хоть немного любим свою техподдержку - любая интерактивная запись должна быть на клиенте. Это просто из разряда юзабилити. Технически, канеш, мы программисты умнее пользователей, и можем записать что угодно и где угодно.
Но пишем-то мы не для себя ;-)

А то понапихают всяких сетевых дисков, понимаешь...
11. nomad_irk 80 13.10.20 17:30 Сейчас в теме
(9)Если пользователь указывает место сохранения файла на своей машине, то см (7)
Если пользователь может указать место сохранения в общем сетевом ресурсе, то можно и на стороне сервера выполнять сохранения файла, главное дать доступ серверу 1С к этому общему сетевому ресурсу.
14. wantingstew 13.10.20 17:58 Сейчас в теме
(11) Решение (7) уже проверил и еще нашел немного косяков у себя в коде. Теперь все заработало, как мне нужно
7. andy_zhav 197 13.10.20 17:12 Сейчас в теме
(1)

 &НаСервере
Функция СформироватьТабДок()
    ТабДок = Новый ТабличныйДокумент;
    ...
    ТабДок.Вывести(Подвал);
    ТабДок.АвтоМасштаб = Истина;
    Возврат ТабДок;
    
КонецФункции

&НаКлиенте
Процедура СохранитьДок(Команда)
    
        ТабДок = СформироватьТабДок();
    СтандартнаяОбработка = Ложь;
    РежимДиалога = РежимДиалогаВыбораФайла.Сохранение;
    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
    ДиалогВыбораФайла.МножественныйВыбор = Ложь;
    ДиалогВыбораФайла.Заголовок = "Выберите папку, где необходимо сохранить файл";  
    ДиалогВыбораФайла.ПолноеИмяФайла = Объект.ЗаказКлиента.Номер+объект.Покупатель;
    ДиалогВыбораФайла.Фильтр = "Формат выгрузки(*xlsx)|*.xlsx";
    Если ДиалогВыбораФайла.Выбрать() Тогда
       ТабДок.Записать(ДиалогВыбораФайла.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
    КонецЕсли;
    
КонецПроцедуры
Показать
criptid; wantingstew; +2 Ответить
15. wantingstew 13.10.20 17:59 Сейчас в теме
(7) Благодарю, все заработало!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот