|
Не работает экспорт в excel в клиент - серверном варианте | ☑ | ||
---|---|---|---|---|
0
ahmato
10.04.15
✎
14:02
|
Коллеги, Добрый день!
Проблема не работает экспорт в excel в клиент - серверном варианте, хотя этот же код работает в файловом варианте базы. Платформа - 8.2.19.80 Конфигурация - Управление торговлей, редакция 11.0 (11.0.8.13) Код команды для печати: &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) //Если УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ПараметрКоманды, ПараметрыВыполненияКоманды.Источник) Тогда // //УправлениеПечатьюКлиент.ВыполнитьКомандуПечати( // "Документ.ЗаказКлиента", // "Спецификация", // ПараметрКоманды, // Неопределено, // Неопределено //); //Система =""; //ВвестиСтроку(Система,"Укажите систему"); ПечатьПКО(ПараметрКоманды); //КонецЕсли; КонецПроцедуры &НаСервере Процедура ПечатьПКО(МассивОбъектов) экспорт ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СПЕЦИФИКАЦИЯ"; УстановитьПривилегированныйРежим(Истина); ДанныеДляПечати = ПолучитьДанныеДляПечатнойФормыСпецификация(МассивОбъектов); ЗаполнитьТабличныйДокументСпецификация(ТабличныйДокумент, ДанныеДляПечати, МассивОбъектов); УстановитьПривилегированныйРежим(Ложь); ИмяФайла = ПолучитьИмяВременногоФайла("xlsx"); ТабличныйДокумент.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX); ЗапуститьПриложение(ИмяФайла); КонецПроцедуры Функция ПолучитьДанныеДляПечатнойФормыСпецификация(МассивОбъектов) экспорт Запрос = Новый Запрос("ВЫБРАТЬ | ЗаказКлиентаТовары.Категория КАК Категория, | ЗаказКлиентаТовары.Номенклатура КАК Наименование, | ЗаказКлиентаТовары.Номенклатура.Артикул КАК ПартНомер, | ЗаказКлиентаТовары.Номенклатура.Производитель КАК Производитель, | ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдИзм, | ЗаказКлиентаТовары.КоличествоУпаковок КАК Количество, | ЗаказКлиентаТовары.СтоимостьКлиента КАК Стоимостьединицы, | ЗаказКлиентаТовары.СтавкаНДС КАК НДС, | ЗаказКлиентаТовары.Комплектация КАК Комплектация, | ЗаказКлиентаТовары.ОбщаяСтоимостьКлиента КАК ОбщаяСтоимостьКлиента, | ЗаказКлиентаТовары.ОбщаяСтоимостьКлиентаСНДС КАК ОбщаяСтоимостьКлиентаСНДС, | ЗаказКлиентаТовары.СуммаНДСКл КАК НДСКл, | ЗаказКлиентаТовары.Ссылка.Партнер, | ЗаказКлиентаТовары.ОбъектЗаказа КАК Объект |ИЗ | Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары |ГДЕ | ЗаказКлиентаТовары.Ссылка В(&МассивОбъектов) | |СГРУППИРОВАТЬ ПО | ЗаказКлиентаТовары.Категория, | ЗаказКлиентаТовары.Наименование, | ЗаказКлиентаТовары.Номенклатура, | ЗаказКлиентаТовары.Номенклатура.Артикул, | ЗаказКлиентаТовары.Номенклатура.Производитель, | ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения, | ЗаказКлиентаТовары.КоличествоУпаковок, | ЗаказКлиентаТовары.СтоимостьКлиента, | ЗаказКлиентаТовары.СтавкаНДС, | ЗаказКлиентаТовары.Комплектация, | ЗаказКлиентаТовары.ОбщаяСтоимостьКлиента, | ЗаказКлиентаТовары.ОбщаяСтоимостьКлиентаСНДС, | ЗаказКлиентаТовары.СуммаНДСКл, | ЗаказКлиентаТовары.Ссылка.Партнер, | ЗаказКлиентаТовары.ОбъектЗаказа |ИТОГИ ПО | Комплектация, | Комплектация"); Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); //Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыПозицииВЗаказе.СогласованоОД); //Запрос.УстановитьПараметр("Система",Система); Возврат Запрос.Выполнить(); КонецФункции Процедура ЗаполнитьТабличныйДокументСпецификация(ТабличныйДокумент, ДанныеДляПечати , МассивОбъектов) экспорт Макет = УправлениеПечатью.ПолучитьМакет("Документ.ЗаказКлиента.Спецификация"); //Документ.ЗаказКлиента.Спецификация ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ОбластьМакета.Параметры.Партнер = МассивОбъектов.Получить(0).Партнер; ТабличныйДокумент.Вывести(ОбластьМакета); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); ОбластьСтрока2 = Макет.ПолучитьОбласть("Строка2"); ОбластьИтого = Макет.ПолучитьОбласть("Итого"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); НС = 0; ИтогНДС = 0; ИтогСтЕД = 0; ИтогОбСтЕД = 0 ; ИтогОбСтЕДСНДС = 0 ; ДанныеПоСистемам = ДанныеДляПечати.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ДанныеПоСистемам.Следующий() Цикл ДанныеПоКатегориям = ДанныеПоСистемам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ДанныеПоКатегориям.Следующий() Цикл //Если НЕ ЗначениеЗаполнено(ДанныеПоКатегориям.Комплектация) Тогда // Продолжить; //КонецЕсли; ОбластьСтрока2.Параметры.Комплектация =ДанныеПоКатегориям.Комплектация; ТабличныйДокумент.Вывести(ОбластьСтрока2); ДанныеПоТоварам = ДанныеПоКатегориям.Выбрать(); Пока ДанныеПоТоварам.Следующий() Цикл НС=НС+1; ИтогНДС = ИтогНДС + число(ДанныеПоТоварам.НДСкл); ИтогСтЕД = ИтогСтЕД + число(ДанныеПоТоварам.Стоимостьединицы); ИтогОбСтЕД = ИтогОбСтЕД + число(ДанныеПоТоварам.ОбщаяСтоимостьКлиента); ИтогОбСтЕДСНДС = ИтогОбСтЕДСНДС + число(ДанныеПоТоварам.ОбщаяСтоимостьКлиентаСНДС); ОбластьСтрока.Параметры.Заполнить(ДанныеПоТоварам); ОбластьСтрока.Параметры.НомерСтроки = НС; ОбластьСтрока.Параметры.Наименование = ДанныеПоТоварам.Наименование; ТабличныйДокумент.Вывести(ОбластьСтрока); КонецЦикла; КонецЦикла; КонецЦикла; Рубли = Цел(ИтогОбСтЕДСНДС); Копейки = (ИтогОбСтЕДСНДС - Рубли) * 100; пропись = ЧислоПрописью(ИтогОбСтЕДСНДС,,"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2" ); ОбластьИтого.Параметры.ИтогСтЕД = ИтогСтЕД; ОбластьИтого.Параметры.ИтогОбСтЕД = ИтогОбСтЕД; ОбластьИтого.Параметры.ИтогОбСтЕДСНДС = ИтогОбСтЕДСНДС; ОбластьИтого.Параметры.ИтогНДС = ИтогНДС; ТабличныйДокумент.Вывести(ОбластьИтого); ОбластьПодвал.Параметры.Рубли = Рубли; ОбластьПодвал.Параметры.Копейки = Копейки; ОбластьПодвал.Параметры.пропись = пропись; ТабличныйДокумент.Вывести(ОбластьПодвал); ТабличныйДокумент.АвтоМасштаб = Истина; |
|||
1
ahmato
10.04.15
✎
14:03
|
Возможно важный важный момент, когда запускаю экспорт в эксель, все зависает, какое то время висит и далее ничего не происходит.
|
|||
2
vicof
10.04.15
✎
14:05
|
Ну на сервере у тебя эксельный файл появляется. И чо?
|
|||
3
George Wheels
10.04.15
✎
14:08
|
(0) На сервере Excel установлен?
|
|||
4
fisher
10.04.15
✎
14:34
|
(0) Мне очень интересно, а чего ты ожидаешь от ЗапуститьПриложение() на сервере для ексельного файла?
|
|||
5
vicof
10.04.15
✎
14:45
|
(4) ТС стыдится
|
|||
6
ahmato
10.04.15
✎
14:57
|
(2) В принципе разобрался в вопросе, добавил:
ExcelПриложение = Новый COMОбъект("Excel.Application"); ExcelПриложение.WorkBooks.Open(ИмяФайла); + на сервере, где крутится сервер 1С, переустановили офис на 64х битную, как оказалось иначе ошибка: "ExcelПриложение = Новый COMОбъект("Excel.Application"); по причине: Отказано в доступе." После все взлетело. Отдельное спасибо за идею :) |
|||
7
ahmato
10.04.15
✎
14:59
|
(3) Оно было установлено, но битность не та.
Вспомнилась фраза из фильма "Белое солнце пустыни": "..Гранаты у него не той системы.." (С) :))) |
|||
8
ahmato
10.04.15
✎
15:00
|
(4) ТО что я ожидаю, никак не соответствовала тому что я получил)))
(5) Вот вот))) |
|||
9
ahmato
10.04.15
✎
15:08
|
Еще кое что забыл указать, перед тем как переустановить эксель на верный, на одном форуме вычитал следующее:
"Используется клиент-серверный вариант работы. Операционка Windows Server 2008, СУБД MS SQL 2008. При синхронизации используется прямое подключение к базе данных. При проверке подключения, вне зависимости от того, какой указывается путь и логин к синхронизируемой базе данных, появляется ошибка: "Не удалось подключиться к другой программе: -2147024891 (0x80070005): Отказано в доступе". Решение: 1. Администрирование - Службы компонентов – Компьютеры – Мой компьютер – Приложения COM+ - Создать приложение – Создать новое приложение – вводим имя «V82.COMConnector»(переключатель «Серверное приложение») – Указанный пользователь (Администратор) 2. В появившейся ветке V82COMConnector – подветка Компоненты – создание нового компонента – Установка новых компонентов - <каталог 1С>\bin\comcntr.dll 3. Правой кнопкой по ветке V82COMConnector – Свойства – Безопасность – Снял галку «Принудительная проверка доступа для приложений» - Поставил галку «Применить политику программных ограничений» - Уровень ограничений «Неограниченный»" Так что точно сказать, что именно помогло не смогу, возможно обе части решения вопроса нужны. |
|||
10
George Wheels
10.04.15
✎
16:20
|
Как ты с сервера файл получать будешь? Почему бы не записывать файл на клиенте?
|
|||
11
ssh2006
10.04.15
✎
16:36
|
(0) непонятно зачем на сервере ЗапуститьПриложение(ИмяФайла);
А для ТабличныйДокумент.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX) эксель там не нужен |
|||
12
ahmato
15.04.15
✎
17:17
|
(10) На тот момент, я все тестировал на самом сервере, где располагался сервер 1С.
Соответственно все летало и взлетало. Но когда попытался сделать выгрузку из клиента запушенного на другом компьютере, у пользователя ничего не появлялось, зато запускалась копия эксель с табличным документом ?)) было забавно. В итоге сегодня переделал код как привел ниже (все работает как на сервере, также на клиентской машине), может кому пригодится: &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ВыгрузкаВЭксель(ПараметрКоманды); КонецПроцедуры &НаКлиенте Процедура ВыгрузкаВЭксель(МассивОбъектов) ТабличныйДокумент = Новый ТабличныйДокумент; ПечатьПКО(МассивОбъектов,ТабличныйДокумент); ВходящаяСтрока= МассивОбъектов[0]; Пока Найти(ВходящаяСтрока," ")<>0 Цикл ВходящаяСтрока=СтрЗаменить(ВходящаяСтрока," ","_"); КонецЦикла; ПоследнийСимвол = Прав(ВходящаяСтрока, 9); ВходящаяСтрока=СтрЗаменить(ВходящаяСтрока,ПоследнийСимвол,""); ИмяФайла = "\\optimus\1cdoc\Спецификации\"+ВходящаяСтрока+".XLSX";//+"_"+строка(МассивОбъектов.Получить(0).номер)+МассивОбъектов.Получить(0).проект+"_"+строка(Формат(МассивОбъектов.Получить(0).дата, "ДЛФ=Д"))+".XLSX";//+ДанныеДляПечати.Номер+" "+ДанныеДляПечати.проект; ТабличныйДокумент.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX); ExcelПриложение = Новый COMОбъект("Excel.Application"); ExcelПриложение.Visible = Истина; ExcelПриложение.WorkBooks.Open(ИмяФайла); КонецПроцедуры &НаСервере Процедура ПечатьПКО(МассивОбъектов,ТабличныйДокумент) экспорт ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СПЕЦИФИКАЦИЯ"; ДанныеДляПечати = ПолучитьДанныеДляПечатнойФормыСпецификация(МассивОбъектов); ЗаполнитьТабличныйДокументСпецификация(ТабличныйДокумент, ДанныеДляПечати, МассивОбъектов); КонецПроцедуры Функция ПолучитьДанныеДляПечатнойФормыСпецификация(МассивОбъектов) экспорт Запрос = Новый Запрос("ВЫБРАТЬ | ЗаказКлиентаТовары.Категория КАК Категория, | ЗаказКлиентаТовары.Номенклатура КАК Наименование, | ЗаказКлиентаТовары.Номенклатура.Артикул КАК ПартНомер, | ЗаказКлиентаТовары.Номенклатура.Производитель КАК Производитель, | ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдИзм, | ЗаказКлиентаТовары.КоличествоУпаковок КАК Количество, | ЗаказКлиентаТовары.СтоимостьКлиента КАК Стоимостьединицы, | ЗаказКлиентаТовары.СтавкаНДС КАК НДС, | ЗаказКлиентаТовары.Комплектация КАК Комплектация, | ЗаказКлиентаТовары.ОбщаяСтоимостьКлиента КАК ОбщаяСтоимостьКлиента, | ЗаказКлиентаТовары.ОбщаяСтоимостьКлиентаСНДС КАК ОбщаяСтоимостьКлиентаСНДС, | ЗаказКлиентаТовары.СуммаНДСКл КАК НДСКл, | ЗаказКлиентаТовары.Ссылка.Партнер КАК Партнер, | ЗаказКлиентаТовары.ОбъектЗаказа КАК Объект, | ЗаказКлиентаТовары.Ссылка.Контрагент КАК Контрагент, | ЗаказКлиентаТовары.Ссылка.Дата КАК Дата, | ЗаказКлиентаТовары.Ссылка.Номер КАК Номер, | ЗаказКлиентаТовары.Ссылка.Проект КАК Проект |ИЗ | Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары |ГДЕ | ЗаказКлиентаТовары.Ссылка В(&МассивОбъектов) | |СГРУППИРОВАТЬ ПО | ЗаказКлиентаТовары.Категория, | ЗаказКлиентаТовары.Наименование, | ЗаказКлиентаТовары.Номенклатура, | ЗаказКлиентаТовары.Номенклатура.Артикул, | ЗаказКлиентаТовары.Номенклатура.Производитель, | ЗаказКлиентаТовары.Номенклатура.ЕдиницаИзмерения, | ЗаказКлиентаТовары.КоличествоУпаковок, | ЗаказКлиентаТовары.СтоимостьКлиента, | ЗаказКлиентаТовары.СтавкаНДС, | ЗаказКлиентаТовары.Комплектация, | ЗаказКлиентаТовары.ОбщаяСтоимостьКлиента, | ЗаказКлиентаТовары.ОбщаяСтоимостьКлиентаСНДС, | ЗаказКлиентаТовары.СуммаНДСКл, | ЗаказКлиентаТовары.Ссылка.Партнер, | ЗаказКлиентаТовары.ОбъектЗаказа, | ЗаказКлиентаТовары.Ссылка.Контрагент, | ЗаказКлиентаТовары.Ссылка.Дата, | ЗаказКлиентаТовары.Ссылка.Номер, | ЗаказКлиентаТовары.Ссылка.Проект | |УПОРЯДОЧИТЬ ПО | Категория УБЫВ |ИТОГИ ПО | Комплектация, | Комплектация"); Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); //Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыПозицииВЗаказе.СогласованоОД); //Запрос.УстановитьПараметр("Система",Система); Возврат Запрос.Выполнить(); КонецФункции Процедура ЗаполнитьТабличныйДокументСпецификация(ТабличныйДокумент, ДанныеДляПечати , МассивОбъектов) экспорт Макет = УправлениеПечатью.ПолучитьМакет("Документ.ЗаказКлиента.Спецификация"); //Документ.ЗаказКлиента.Спецификация ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ОбластьМакета.Параметры.Партнер = МассивОбъектов.Получить(0).Партнер; ТабличныйДокумент.Вывести(ОбластьМакета); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); ОбластьСтрока2 = Макет.ПолучитьОбласть("Строка2"); ОбластьИтого = Макет.ПолучитьОбласть("Итого"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); НС = 0; ИтогНДС = 0; ИтогСтЕД = 0; ИтогОбСтЕД = 0 ; ИтогОбСтЕДСНДС = 0 ; ДанныеПоСистемам = ДанныеДляПечати.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ДанныеПоСистемам.Следующий() Цикл ДанныеПоКатегориям = ДанныеПоСистемам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ДанныеПоКатегориям.Следующий() Цикл //Если НЕ ЗначениеЗаполнено(ДанныеПоКатегориям.Комплектация) Тогда // Продолжить; //КонецЕсли; ОбластьСтрока2.Параметры.Комплектация =ДанныеПоКатегориям.Комплектация; ТабличныйДокумент.Вывести(ОбластьСтрока2); ДанныеПоТоварам = ДанныеПоКатегориям.Выбрать(); Пока ДанныеПоТоварам.Следующий() Цикл НС=НС+1; ИтогНДС = ИтогНДС + число(ДанныеПоТоварам.НДСкл); ИтогСтЕД = ИтогСтЕД + число(ДанныеПоТоварам.Стоимостьединицы); ИтогОбСтЕД = ИтогОбСтЕД + число(ДанныеПоТоварам.ОбщаяСтоимостьКлиента); ИтогОбСтЕДСНДС = ИтогОбСтЕДСНДС + число(ДанныеПоТоварам.ОбщаяСтоимостьКлиентаСНДС); ОбластьСтрока.Параметры.Заполнить(ДанныеПоТоварам); ОбластьСтрока.Параметры.НомерСтроки = НС; ОбластьСтрока.Параметры.Наименование = ДанныеПоТоварам.Наименование; ТабличныйДокумент.Вывести(ОбластьСтрока); КонецЦикла; КонецЦикла; КонецЦикла; Рубли = Цел(ИтогОбСтЕДСНДС); Копейки = (ИтогОбСтЕДСНДС - Рубли) * 100; пропись = ЧислоПрописью(ИтогОбСтЕДСНДС,,"рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2" ); ОбластьИтого.Параметры.ИтогСтЕД = ИтогСтЕД; ОбластьИтого.Параметры.ИтогОбСтЕД = ИтогОбСтЕД; ОбластьИтого.Параметры.ИтогОбСтЕДСНДС = ИтогОбСтЕДСНДС; ОбластьИтого.Параметры.ИтогНДС = ИтогНДС; ТабличныйДокумент.Вывести(ОбластьИтого); ОбластьПодвал.Параметры.Рубли = Рубли; ОбластьПодвал.Параметры.Копейки = Копейки; ОбластьПодвал.Параметры.пропись = пропись; ТабличныйДокумент.Вывести(ОбластьПодвал); ТабличныйДокумент.АвтоМасштаб = Истина; КонецПроцедуры |
|||
13
ahmato
15.04.15
✎
17:20
|
(11) Задача стояла другая, необходимо было не только записать эксель с определенным названием, но и запустить его на клиентской машине.
|
|||
14
ahmato
15.04.15
✎
17:25
|
(12) "...зато запускалась копия эксель с табличным документом на сервере*?))"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |