|
Загрузить эксель файл в СКД | ☑ | ||
---|---|---|---|---|
0
Тессеракт
22.01.21
✎
12:06
|
Добрый всем день!
Нашел аналогичную тему Сопоставить два эксель файла , вот только там тема сис... ну то есть, в общем, тема не раскрыта! То, что эксельник надо прочитать, потом как объект передать в скд я понимаю. Но чтение эксельника происходит на клиенте с передачей на сервер, а в скд сгенерированную ТЗ можно подгрузить только из модуля объекта. Это значит, что получить эксельник я с модуля объекта не могу, значит мне надо либо 1) загрузить ТЗ из модуля формы в СКД 2) передать ТЗ из модуля формы в модуль объекта. Как я понимаю, РеквизитФормыВЗначение - он может только подцепить процедуру из модуля объекта. Я кнопку на форме отчета добавил для загрузки эксельника. Т.е по логике- загружаем эксельник, он читается в реквизит формы ТЗ, потом жмем сформировать и ТЗ из формы надо как то перенести. Эксельник вот так получаю: &НаКлиенте Процедура ПодгрузитьБП(Команда,ТаблицаДанныхБП) БП666(ТаблицаДанныхБП); КонецПроцедуры &НаКлиенте Процедура БП666(ТаблицаДанныхБП) //эксельник от ИР Режим = РежимДиалогаВыбораФайла.Открытие; Диалог = Новый ДиалогВыбораФайла(Режим); ИмяФайла = Диалог.ПолноеИмяФайла; Фильтр = "Файл Эксель(*.xlsx)|*.xlsx"; Диалог.Фильтр = Фильтр; Диалог.МножественныйВыбор = Ложь; Диалог.Заголовок = "Выберите файл выгрузки из БП"; Если Диалог.Выбрать() Тогда ИмяФайла = Диалог.ПолноеИмяФайла; КонецЕсли; Файл = Новый Файл(ИмяФайла); Если НЕ Файл.Существует() Тогда Возврат; КонецЕсли; ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла); ДокументРезультат = EXCELВТаблицуЗначенийБП666(ДвоичныеДанные, Файл.Расширение); //ДокументРезультат.Показать(); КонецПроцедуры &НаСервере Функция EXCELВТаблицуЗначенийБП666(ДвоичныеДанные, Расширение) ФайлEXCELНаСервере = ПолучитьИмяВременногоФайла(Расширение); ДвоичныеДанные.Записать(ФайлEXCELНаСервере); ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.Прочитать(ФайлEXCELНаСервере); УдалитьФайлы(ФайлEXCELНаСервере); ОбластьТаблицы = ТабличныйДокумент.Область(4, 2, ТабличныйДокумент.ВысотаТаблицы, ТабличныйДокумент.ШиринаТаблицы); ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьТаблицы); ПостроительЗапроса.Выполнить(); ТаблицаДанныхБП = ПостроительЗапроса.Результат.Выгрузить(); ХХХ.Очистить(); Для каждого стр из ТаблицаДанныхБП Цикл Если НЕ ЗначениеЗаполнено(стр.НоменБП) Тогда Прервать; //Продолжить; КонецЕсли; НовСтрока = ХХХ.Добавить(); ЗаполнитьЗначенияСвойств(НовСтрока,стр); Если ЗначениеЗаполнено(стр.СумОбКтБп) Тогда Если ТипЗнч(стр.СумОбКтБп) = Тип("Число") Тогда НовСтрока.СумОбКтБп = стр.СумОбКтБп; ИначеЕсли ТипЗнч(стр.СумОбКтБп) = Тип("Строка") Тогда Попытка НовСтрока.СумОбКтБп = Число(стр.СумОбКтБп); Исключение КонецПопытки; КонецЕсли; КонецЕсли; КонецЦикла; ТаблХХХ = ХХХ.Выгрузить(); Возврат ТаблицаЗначенийВТабличныйДокументБП666(ТаблицаДанныхБП); КонецФункции &НаСервереБезКонтекста Функция ТаблицаЗначенийВТабличныйДокументБП666(ТаблицаДанныхБП) ПостроительОтчета = Новый ПостроительОтчета; ПостроительОтчета.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаДанныхБП); ДокументРезультатБП = Новый ТабличныйДокумент; Построительотчета.Вывести(ДокументРезультатБП); Возврат ДокументРезультатБП; КонецФункции |
|||
1
DrShad
22.01.21
✎
12:12
|
продолжайте наблюдения и держите нас в курсе
|
|||
2
ДенисЧ
22.01.21
✎
12:12
|
Вступление есть.
Где развитие? Где кульминация? Где катарсис, наконец? |
|||
3
Тессеракт
22.01.21
✎
12:18
|
блин. (1) (2) мужики, не глумитесь) по запаре вопрос то не задал даже)
|
|||
4
Тессеракт
22.01.21
✎
12:19
|
а по теме: как мне полученную ТЗ передать в СКД? (1) (2)
|
|||
5
toypaul
гуру
22.01.21
✎
12:21
|
временное хранилище в школе проходили?
|
|||
6
Kassern
22.01.21
✎
12:22
|
(0) что мешает передать двоичные данные экселя на сервер там его обработать в ТЗ. А далее это ТЗ передать в набор данных- объект в СКД? Ну или тупо параметром во временную таблицу запроса СКД, тут уж что тебе нужнее
|
|||
7
DrShad
22.01.21
✎
12:22
|
либо массив структур
|
|||
8
acht
22.01.21
✎
12:24
|
(4)
- Выбросить все свое нахер - Передать файл xls на сервер, сделать из него таблицу значений, полжить во временное хранилище, вернуть на клиента адрес - Положить адрес в дополнительные данные настроек компоновки - В обработчике компоновки результата достать таблицу из хранилища, скомпоновать результат |
|||
9
acht
22.01.21
✎
12:33
|
Или даже вообще за один вызов. Сразу передать на сервер файл, текущие схему и настройки компоновки, там скомпоновать, вернуть обратно табличный документ.
Ну с расшифровкой возможно проблемы будут... |
|||
10
Тессеракт
22.01.21
✎
12:36
|
(8) подскажите пожалуйста "Положить адрес в дополнительные данные настроек компоновки" каким образом?
|
|||
11
Вафель
22.01.21
✎
12:41
|
|
|||
12
Тессеракт
22.01.21
✎
12:50
|
(11) (8) в модуле формы на сервере положил во временное хранилище.
На клиенте, после вызова сервера, достал из хранилища, по заветам (11) выдало ошибку : Переменная не определена (КомпоновщикНастроек) |
|||
13
acht
22.01.21
✎
12:55
|
(12) Это свойство основого реквизита формы
|
|||
14
Вафель
22.01.21
✎
12:55
|
форма отчета?
|
|||
15
Тессеракт
22.01.21
✎
12:56
|
(14) да
|
|||
16
Тессеракт
22.01.21
✎
12:57
|
(14) ЭтотОбъект.Отчет.КомпоновщикНастроек.ДополнительныеСвойства.Вставить("Адрес", АдресХранилища); вот так может?
|
|||
17
Вафель
22.01.21
✎
13:19
|
нужно не на клиенте, в модуле отчёта При Компоновке Результата
|
|||
18
Тессеракт
22.01.21
✎
13:30
|
(17) я в модуле формы наСервере помещаю ТЗ:
ТаблицаДанныхБП = ПостроительЗапроса.Результат.Выгрузить(); //тз АдресХранилища = ПоместитьВоВременноеХранилище(ТаблицаДанныхБП,ЭтаФорма.УникальныйИдентификатор); далее наКлиенте получаю: ПротоколПереноса = ПолучитьИзВременногоХранилища(АдресХранилища); Потом в модуле объекта передаю в СКД: КомпоновщикНастроек.ДополнительныеСвойства.Вставить("Адрес", ПротоколПереноса); так? Выдает ошибку на клиенте {ВнешнийОтчет.СверкаУТиБПпоСебестоимостиПродаж.Форма.ФормаОтчета.Форма(25)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища) ПротоколПереноса = ПолучитьИзВременногоХранилища(АдресХранилища); по причине: Несоответствие типов (параметр номер '1') |
|||
19
acht
22.01.21
✎
13:50
|
(18) > так?
Нет не так. Оперируй только адресом. |
|||
20
Тессеракт
22.01.21
✎
14:37
|
(19) (17) получилось. Я адрес реквизитом сделал и через него передал. Спасибо) осталось только сформировать запрос в модуле, сравнить с тз по полному соединению и передать уже в скд) Но это уже совсем другая история))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |