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

Новичок.... Помогите выгрузить из 1с в exel.. клиент серверный вариант

Автор Алексей Соболев, 15 июн 2023, 14:28

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

Алексей Соболев

Написал обработку которая выгружает в ексель.. на файле норм работает.. как выгрузить в клиент серверный вариант....


&НаСервере
Функция ПолучитьИЗаполнитьМакетНаСервере(ПолноеИмяФайла)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ТабДок = Новый ТабличныйДокумент;    //Создание нового табличного документа, в него будет прописывать информация из макета
   
    //Получения макета
    РевизитФормы = РеквизитФормыВЗначение("Объект");   
    Макет = РевизитФормы.ПолучитьМакет("Североуральск");
   
    //Заполнение шапки
    Область = Макет.ПолучитьОбласть("ШапкаОтчета");
    Область.Параметры.Датаа = Формат(Дата(Период.ДатаОкончания), "ДФ='ММММ гггг'");
    ТабДок.Вывести(Область);
   
    //Заполнение строк таблицы
    Область = Макет.ПолучитьОбласть("СтрокиТаблицы");
    Для каждого СтрокаТаблицыОтчета из Объект.ТабСевероуральск Цикл
        Область.Параметры.Заполнить(СтрокаТаблицыОтчета);    //В макете поля с Объемами и Суммой округляются.
        ТабДок.Вывести(Область);
    КонецЦикла;   
   
     //Заполнение Итого                                     
    Область = Макет.ПолучитьОбласть("СтрокиИтоги");
    Область.Параметры.СуммаСевер = СуммаСев;
    Область.Параметры.ИтогоНаачислено = Объект.ИтогоСевероуральск;
    ТабДок.Вывести(Область);

     //Заполнение ПодвалОтчета
    Область = Макет.ПолучитьОбласть("ПодвалОтчета");
       ТабДок.Вывести(Область);

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ТабДок2 = Новый ТабличныйДокумент;    //Создание нового табличного документа, в него будет прописывать информация из макета
   
    //Получения макета
    РевизитФормы = РеквизитФормыВЗначение("Объект");   
    Макет = РевизитФормы.ПолучитьМакет("Калья");
   
    //Заполнение шапки
    Область = Макет.ПолучитьОбласть("ШапкаОтчета");
    Область.Параметры.Датаа = Формат(Дата(Период.ДатаОкончания), "ДФ='ММММ гггг'");
    ТабДок2.Вывести(Область);
   
    //Заполнение строк таблицы
    Область = Макет.ПолучитьОбласть("СтрокиТаблицы");
    Для каждого СтрокаТаблицыОтчета из Объект.ТабКалья Цикл
        Область.Параметры.Заполнить(СтрокаТаблицыОтчета);    //В макете поля с Объемами и Суммой округляются.
        ТабДок2.Вывести(Область);
    КонецЦикла;   
   
     //Заполнение Итого                                     
    Область = Макет.ПолучитьОбласть("СтрокиИтоги");
    Область.Параметры.СуммаКалья = СуммаНачислений;
    Область.Параметры.ИтогоНаачислено = Объект.ИтогоКалья;
    ТабДок2.Вывести(Область);

     //Заполнение ПодвалОтчета
    Область = Макет.ПолучитьОбласть("ПодвалОтчета");
       ТабДок2.Вывести(Область);


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    ОднаКнига = Новый ПакетОтображаемыхДокументов;
    //Создав объект "ОднаКнига", мы можем в его состав поместить несколько табличных документов каким-то таким образом:

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

&НаКлиенте
Процедура ВыгрузитьXLS(Команда)
    //Проверка
   
    ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
    ДиалогВыбораКаталога.Каталог = "";
    ДиалогВыбораКаталога.МножественныйВыбор = Ложь;
    ДиалогВыбораКаталога.Заголовок = "Выберите каталог для записи XLS-файла";
    Если не ДиалогВыбораКаталога.Выбрать() Тогда
        Возврат;    //Если пользователь отказался от выбора каталога.
    КонецЕсли;
    Каталог = ДиалогВыбораКаталога.Каталог;
       
    //Формирование имени XLS-файла
    ПериодОтчетаСтрока = Формат(Период.ДатаНачала, "ДФ = 'ММММ гггг'");
    ИмяФайла = "ЛЬГОТА " + ПериодОтчетаСтрока + ".XLSX";
    ПолноеИмяФайла = Каталог + "\"+ ИмяФайла;
   
    //Формирование XLS-файла
    Результат = ПолучитьИЗаполнитьМакетНаСервере(ПолноеИмяФайла);
    Если Результат = "" Тогда
        Сообщить(Строка(ТекущаяДата()) + ": Файл с отчетом " + ПолноеИмяФайла + " успешно записан");
    Иначе
        Сообщить("Что-то пошло не так (возможно нет прав на запись в выбранном каталоге или данный файл уже открыт). Описание ошибки: " + Результат);
    КонецЕсли;
КонецПроцедуры

LexaK

каталог для сохранения файла выбираете на Клиенте
а запись делаете на сервере (в пространстве сервера)

как правило, на сервере пишут по временный файл, затем его передают на Клиент
если помогло нажмите: Спасибо!

LexaK

а что у вас в сообщении пишет?
у меня, при попытке выполнить код на Сервере, такую ошибку выдает (и это понятно, на сервере нет такого каталога)
{<Неизвестный модуль>(22)}: Ошибка при вызове метода контекста (Записать): Каталог не обнаружен 'C:\Базы\Тест_Ексель.xlsx'

а если у вас ошибок нет, тогда на сервере ищите свой выгруженный файл!  (могут совпадать каталоги на клиенте и на сервере)
если помогло нажмите: Спасибо!

Алексей Соболев

LexaK, Благодарю. получилось.. сделал передачу печатной формы с сервера на клиента

Теги:

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

Рейтинг@Mail.ru

Поиск