Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 17:29

ВПФ ошибка "В обработчике печати не был сформирован табличный документ для: АктВыполненныхРабот"

Автор sali, 23 окт 2024, 10:53

0 Пользователей и 1 гость просматривают эту тему.

Максим75

sali, так Вы ЗаполнитьТаблицуНаСервере(ТабДок) вызываете как процедуру, а это функция.
Ну Вы какой-то переменной должны присвоить, что возвращает функция и это сохранить.

ну и заодно просто выведите то, что вернет функция в виде табличного документа, может у Вас запрос ничего не возвращает.

sali

Максим75, тип
&НаКлиенте
Процедура ВыгрузкаВExcel(Команда, ТабДок)
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.Каталог = "";
ДиалогОткрытия.МножественныйВыбор = Ложь;
ДиалогОткрытия.Заголовок = "Выберите файл";

Если ДиалогОткрытия.Выбрать() Тогда
ПутьККаталогу = ДиалогОткрытия.Каталог;
КонецЕсли;   

Если Прав(ПутьККаталогу,1) <> "\" Тогда
Объект.КаталогСохранения = ПутьККаталогу+"\";
Иначе
Объект.КаталогСохранения = ПутьККаталогу;

КонецЕсли;
//Сформируем уникальное имя файла
ДатаИВремя = СтрЗаменить(ТекущаяДата(),":",".");
ИмяФайла = "Импорт_" + ДатаИВремя; 

//Создадим табличный документ
ТабДок = Новый ТабличныйДокумент;

ФорматФайла =  Объект.ТипФайла;

//Добавим выбранный каталог к именя файла
ПолноеИмяФайла = Объект.КаталогСохранения + ИмяФайла + "." + ФорматФайла;

// Определим в каком формате будет выгружен документ
Если   ФорматФайла = "XLS" Тогда
ЗадатьТип =  ТипФайлаТабличногоДокумента.xls;
ИначеЕсли   ФорматФайла = "XLSX" Тогда
ЗадатьТип =  ТипФайлаТабличногоДокумента.xlsx;
Иначе
Сообщить("Необходимо выбрать формат файла");
Возврат;
КонецЕсли; 
ЗаполнитьТаблицуНаСервере(ТабДок);

//Создадим файл и запишем в табличный документ
ТабДок.Записать(ПолноеИмяФайла, ЗадатьТип);

//Заполним ТабДок на сервере
ЗаполнитьТаблицуНаСервере(ТабДок);

//Запишем заполненную таблицу в тот же файл
ТабДок.Записать(ПолноеИмяФайла, ЗадатьТип);   

Сообщить("Выгрузка данных успешно завершена!");     
//Попытка
// Excel = Новый COMОбъект("Excel.Application")
//Исключение 
// Сообщить(ОписаниеОшибки());
// Возврат
//КонецПопытки;
//Excel.Visible = 1;
//Книга = Excel.WorkBooks.Add(); 
//Лист = Книга.WorkSheets.Add();
//Данные = Лист.Cells(1,1).Value;
//Лист.Cells(1, 1).Value = Данные;
//Книга.SaveAs("Импорт"); 
//Excel.Quit();
СозданныйФайл = ЗаполнитьТаблицуНаСервере(ТабДок);
КонецПроцедуры 

Функция ЗаполнитьТаблицуНаСервере(ТабДок) Экспорт
Макет = Документы.ПоступлениеТоваров.ПолучитьМакет("Макет");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваров.Товары.(
| Номенклатура КАК Номенклатура,
| Количество КАК Количество,
| Цена КАК Цена,
| Сумма КАК Сумма
| ) КАК Товары
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров";

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныЕЗаписи);
Табдок.Вывести(ОбластьСтрока);
КонецЦикла;

    //СозданныйФайл = Табдок;
Возврат ТабДок;

КонецФункции

Максим75

sali, ну функции надо сказать, что она на сервере выполняется.
потом, ТабДок прямо в функции создавайте. И передавать его в виде аргумента в функцию не надо.
И вот когда это сделаете,
СозданныйФайл = ЗаполнитьТаблицуНаСервере() и будет Ваш табличный документ. Его уже и сохраняйте в ексель.

sali

Максим75, я вас правильно понял?
&НаКлиенте
Процедура ВыгрузкаВExcel(Команда)
СозданныйФайл = ЗаполнитьТаблицуНаСервере();
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.Каталог = "";
ДиалогОткрытия.МножественныйВыбор = Ложь;
ДиалогОткрытия.Заголовок = "Выберите файл";

Если ДиалогОткрытия.Выбрать() Тогда
ПутьККаталогу = ДиалогОткрытия.Каталог;
КонецЕсли;   

Если Прав(ПутьККаталогу,1) <> "\" Тогда
Объект.КаталогСохранения = ПутьККаталогу+"\";
Иначе
Объект.КаталогСохранения = ПутьККаталогу;

КонецЕсли;
//Сформируем уникальное имя файла
ДатаИВремя = СтрЗаменить(ТекущаяДата(),":",".");
ИмяФайла = "Импорт_" + ДатаИВремя; 

//Создадим табличный документ


ФорматФайла =  Объект.ТипФайла;

//Добавим выбранный каталог к именя файла
ПолноеИмяФайла = Объект.КаталогСохранения + ИмяФайла + "." + ФорматФайла;

// Определим в каком формате будет выгружен документ
Если   ФорматФайла = "XLS" Тогда
ЗадатьТип =  ТипФайлаТабличногоДокумента.xls;
ИначеЕсли   ФорматФайла = "XLSX" Тогда
ЗадатьТип =  ТипФайлаТабличногоДокумента.xlsx;
Иначе
Сообщить("Необходимо выбрать формат файла");
Возврат;
КонецЕсли;   

//Создадим файл и запишем в табличный документ
СозданныйФайл.Записать(ПолноеИмяФайла, ЗадатьТип);

//Заполним ТабДок на сервере
//ЗаполнитьТаблицуНаСервере(ТабДок);

//Запишем заполненную таблицу в тот же файл
СозданныйФайл.Записать(ПолноеИмяФайла, ЗадатьТип);   

Сообщить("Выгрузка данных успешно завершена!");   
//Попытка
// Excel = Новый COMОбъект("Excel.Application")
//Исключение 
// Сообщить(ОписаниеОшибки());
// Возврат
//КонецПопытки;
//Excel.Visible = 1;
//Книга = Excel.WorkBooks.Add(); 
//Лист = Книга.WorkSheets.Add();
//Данные = Лист.Cells(1,1).Value;
//Лист.Cells(1, 1).Value = Данные;
//Книга.SaveAs("Импорт"); 
//Excel.Quit();
//СозданныйФайл = ЗаполнитьТаблицуНаСервере(ТабДок) ;
КонецПроцедуры 

&НаСервере
Функция ЗаполнитьТаблицуНаСервере() Экспорт
Макет = Документы.ПоступлениеТоваров.ПолучитьМакет("Макет");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваров.Товары.(
| Номенклатура КАК Номенклатура,
| Количество КАК Количество,
| Цена КАК Цена,
| Сумма КАК Сумма
| ) КАК Товары
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров";

РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ТабДок = Новый ТабличныйДокумент;
//ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока РезультатЗапроса.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(РезультатЗапроса);
Табдок.Вывести(ОбластьСтрока);
КонецЦикла;


Возврат Табдок;

КонецФункции

Максим75

sali,
Цитата: sali от 25 окт 2024, 09:29Максим75, я вас правильно понял?
&НаКлиенте
Процедура ВыгрузкаВExcel(Команда)
    СозданныйФайл = ЗаполнитьТаблицуНаСервере();
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытия.Каталог = "";
    ДиалогОткрытия.МножественныйВыбор = Ложь;
    ДиалогОткрытия.Заголовок = "Выберите файл";

    Если ДиалогОткрытия.Выбрать() Тогда
        ПутьККаталогу = ДиалогОткрытия.Каталог;
    КонецЕсли;   
   
    Если Прав(ПутьККаталогу,1) <> "\" Тогда
        Объект.КаталогСохранения = ПутьККаталогу+"\";
    Иначе
        Объект.КаталогСохранения = ПутьККаталогу;
       
    КонецЕсли;
    //Сформируем уникальное имя файла
    ДатаИВремя = СтрЗаменить(ТекущаяДата(),":",".");
    ИмяФайла = "Импорт_" + ДатаИВремя; 
   
    //Создадим табличный документ
   
   
    ФорматФайла =  Объект.ТипФайла;
   
    //Добавим выбранный каталог к именя файла
    ПолноеИмяФайла = Объект.КаталогСохранения + ИмяФайла + "." + ФорматФайла;
   
        // Определим в каком формате будет выгружен документ
    Если   ФорматФайла = "XLS" Тогда
        ЗадатьТип =  ТипФайлаТабличногоДокумента.xls;
    ИначеЕсли   ФорматФайла = "XLSX" Тогда
        ЗадатьТип =  ТипФайлаТабличногоДокумента.xlsx;
    Иначе
        Сообщить("Необходимо выбрать формат файла");
        Возврат;
    КонецЕсли;   
   
     //Создадим файл и запишем в табличный документ
    //    СозданныйФайл.Записать(ПолноеИмяФайла, ЗадатьТип);
       
        //Заполним ТабДок на сервере
        //ЗаполнитьТаблицуНаСервере(ТабДок);
       
        //Запишем заполненную таблицу в тот же файл
    //    СозданныйФайл.Записать(ПолноеИмяФайла, ЗадатьТип);           
 
    //Попытка
    //    Excel = Новый COMОбъект("Excel.Application")
    //Исключение 
    //    Сообщить(ОписаниеОшибки());
    //    Возврат
    //КонецПопытки;
    //Excel.Visible = 1;
    //Книга = Excel.WorkBooks.Add(); 
    //Лист = Книга.WorkSheets.Add();
    //Данные = Лист.Cells(1,1).Value;
    //Лист.Cells(1, 1).Value = Данные;
    //Книга.SaveAs("Импорт"); 
    //Excel.Quit();
    СозданныйФайл = ЗаполнитьТаблицуНаСервере(ТабДок) ;
СозданныйФайл.Записать(ПолноеИмяФайла, ЗадатьТип);
Сообщить("Выгрузка данных успешно завершена!");
КонецПроцедуры 

&НаСервере
Функция ЗаполнитьТаблицуНаСервере() Экспорт
    Макет = Документы.ПоступлениеТоваров.ПолучитьМакет("Макет");
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваров.Товары.(
        |        Номенклатура КАК Номенклатура,
        |        Количество КАК Количество,
        |        Цена КАК Цена,
        |        Сумма КАК Сумма
        |    ) КАК Товары
        |ИЗ
        |    Документ.ПоступлениеТоваров КАК ПоступлениеТоваров";
   
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    ТабДок = Новый ТабличныйДокумент;
    //ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
    Пока РезультатЗапроса.Следующий() Цикл
        ОбластьСтрока.Параметры.Заполнить(РезультатЗапроса);
        Табдок.Вывести(ОбластьСтрока);
    КонецЦикла;
   

    Возврат Табдок;
     
КонецФункции

sali

Максим75, слишком много фактических параметров
СозданныйФайл = ЗаполнитьТаблицуНаСервере(ТабДок) ;

Максим75

sali, ну хоть что-то сами сделайте.
конечно, нет теперь параметра. я с Вашего предыдущего поста скопировал. уберите параметр или вот буквально все надо сделать за Вас.

sali

Максим75, я тупой не понимаю что не так
&НаСервере
пРОЦЕДУРА ЗаполнитьТаблицуНаСервере(ТабДок)
Макет = Документы.ПоступлениеТоваров.ПолучитьМакет("Макет");
ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваров.Товары.(
| Номенклатура КАК Номенклатура,
| Количество КАК Количество,
| Цена КАК Цена,
| Сумма КАК Сумма
| ) КАК Товары
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров";

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить();
ТабДок = новый табличныйдокумент;
ТабДок.Вывести(ОбластьШапки);
ТабДок.Вывести(ОбластьСтрока);

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
//ОбластьСтрока.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
//ТабДок.Вывести(ОбластьСтрока);
для каждого строкаТовары из Объект.Товары цикл
ОбластьСтрока.параметры.Заполнить(строкаТовары);
ТабДок.Вывести(ОбластьСтрока);
Конеццикла;
КонецЦикла;

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


&НаКлиенте
Процедура Выгрузка(Команда, Табдок)

Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытия.Каталог = "";
ДиалогОткрытия.МножественныйВыбор = Истина;
ДиалогОткрытия.Заголовок = "Выберите путь";

Если ДиалогОткрытия.Выбрать() Тогда
ПутьККаталогу = ДиалогОткрытия.Каталог;
КонецЕсли;   

Если Прав(ПутьККаталогу,1) <> "\" Тогда
Объект.КаталогСохранения = ПутьККаталогу+"\";
Иначе
Объект.КаталогСохранения = ПутьККаталогу;

КонецЕсли;


//Сформируем уникальное имя файла
ДатаИВремя = СтрЗаменить(ТекущаяДата(),":",".");
ИмяФайла = "Импорт_" + ДатаИВремя; 

ФорматФайла =  Объект.ТипФайла;

//Добавим выбранный каталог к именя файла
ПолноеИмяФайла = Объект.КаталогСохранения + ИмяФайла + "." + ФорматФайла;

// Определим в каком формате будет выгружен документ
Если   ФорматФайла = "XLS" Тогда
ЗадатьТип =  ТипФайлаТабличногоДокумента.xls;

ИначеЕсли ФорматФайла = "XLSX" Тогда   
ЗадатьТип = ТипФайлаТабличногоДокумента.XLSX;

ИначеЕсли ФорматФайла = "PDF" Тогда   
ЗадатьТип = ТипФайлаТабличногоДокумента.pdf;

ИначеЕсли  ФорматФайла = "TXT" Тогда 
ЗадатьТип = ТипФайлаТабличногоДокумента.txt;

Иначе                                           
Возврат;
Сообщить("Необходимо выбрать формат файла");
КонецЕсли;   

//Создадим файл и запишем в табличный документ
ТабДок.Записать(ПолноеИмяФайла, ЗадатьТип);

//Заполним ТабДок на сервере
ЗаполнитьТаблицуНаСервере(ТабДок);

//Запишем заполненную таблицу в тот же файл
ТабДок.Записать(ПолноеИмяФайла, ЗадатьТип);   

Сообщить("Выгрузка данных успешно завершена!");
КонецПроцедуры 

sali

Максим75, я этот код уже скопировал из статьи. там короткая статья, небольшой код казалось бы. все работает кроме записи данных, даже области шапки таблицы не показывает в файле

Максим75

Цитата: sali от 25 окт 2024, 09:50Максим75, слишком много фактических параметров
СозданныйФайл = ЗаполнитьТаблицуНаСервере(ТабДок) ;

вот здесь просто удалите ТабДок и все.
СозданныйФайл = ЗаполнитьТаблицуНаСервере()

что получится?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск