Имя: Пароль:
1C
1С v8
Сформировать отчет по СОМ
,
0 Sasha_H
 
22.06.12
10:55
Всем привет. Вот обмен по СОМ писал, а еще захотело руководство для удобства, чтобы можно было на справочнике номенклатура нажать кнопочку "остатки другой базы". Чтобы была возможность получить вывод штатного отчета АнализДоступностиНаСкладах с установленным отбором по номенклатуре.

Подскажите пожалуйста как это можно реализовать?
1 Рэйв
 
22.06.12
10:56
делаешь запросы и реализуешь отчет на месте в вызывающей базе.
2 pumbaEO
 
22.06.12
10:57
имхо web-сервис более правильное и логичное решение.
3 Sasha_H
 
22.06.12
10:59
(2) надо минимальной кровью все реализовать, веб сервисы это немножко не туда.
4 Sasha_H
 
22.06.12
11:01
(1) то есть я никак не могу

УдаленныйРезультат = БазаСОМ.Отчеты.АнализДоступности.СформироватьОтчет(ТабДок);

!? или что-то вэтом роде, просто возможно решал кто-то уже схожую задачу.
5 Pro-tone
 
модератор
22.06.12
11:10
(4) это совсем никуда не годится. Делай запрос к внешней базе. Результат запроса обходи в текущей, и заполняй таблицу значений данными. Потом в СКД источник - внешний объект цепляй эту ТЗ. И строй красивый отчет.
6 Sasha_H
 
22.06.12
11:14
(5) это я понимаю, просто там запросы кислые так не охота это все переписывать. Просо я где-то читал, что как-то так можно сделать. а вот найти теперь не могу :(
7 Pro-tone
 
модератор
22.06.12
11:20
(6) скопируй текст запроса тогда в текущую базу из того отчета
8 ukolabrother
 
22.06.12
11:22
(0) запрос формируешь в базе источнике в консоли запросов так как тебе надо, в базе приемнике выполняешь его. в (5) все описано
9 DailyLookingOn Sunset
 
22.06.12
11:38
Формируешь по Com отчет, получившийся табдокумент сохраняешь в файл.
В текущей базе открываешь.
10 Sasha_H
 
22.06.12
12:23
Base_COM = ВнешнееСоединение.Base_COM;
   ОтчетСОМ = Base_COM.Отчеты.АнализДоступностиТоваровНаСкладах.Создать();
   ОтчетСОМ.УстановитьНачальныеНастройки();
   
   ОтборыСОМ = ОтчетСОМ.УниверсальныйОтчет.ПостроительОтчета.Отбор;
   
   ЭлемОтбораСОМ = ОтборыСОМ.Добавить("Номенклатура");
   ЭлемОтбораСОМ.Использование = Истина;
   ЭлемОтбораСОМ.Значение = ВыбНоменклатура;
   
   ОтчетСОМ.УниверсальныйОтчет.СформироватьОтчет(ЭлементыФормы.РезультатОтчета);


{Форма.Форма.Форма(45)}: Метод объекта не обнаружен (УстановитьНачальныеНастройки)
   ОтчетСОМ.УстановитьНачальныеНастройки();

Падает даже при вызове "УстановитьНачальныеНастройки" хотя в отчете эта процедура Экспорт!
11 Shurjk
 
22.06.12
12:25
(0) Используешь отчет в вызываемой базе - и передаешь из него таблицу в ком объект, или там просто цифру с остатками.
ЗЫ ох и тормозит же все это дело.
12 Sasha_H
 
22.06.12
12:28
(11) можно подробней, а то не понял ход ваших мыслей...
13 Sasha_H
 
22.06.12
12:31
Это в текущей баз отрабатывает и результат выводится на в Табличный документ обработки:


Отчет = Отчеты.АнализДоступностиТоваровНаСкладах.Создать();
   Отчет.УстановитьНачальныеНастройки();
   Отборы = Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор;
   
   ЭлемОтбора = Отборы.Добавить("Номенклатура");
   ЭлемОтбора.Использование = Истина;
   ЭлемОтбора.Значение = ВыбНоменклатура;
   
   Отчет.УниверсальныйОтчет.СформироватьОтчет(ЭлементыФормы.РезультатОтчета);

а вот через СОМ не видит экспортных функций и процедур.

Я вот только не помню, есть же возможность открывать  интерактивно как документ так и отчет удаленной базе. я просто не доконца прошариваю разницу в технологиях ОЛЕ автомейшен :) и СОМ.
14 Shurjk
 
22.06.12
12:31
(12) Вызываешь функцию которая запускает отчет во второй базе - эта же функция возвращает в ком объект таблицу.
15 Sasha_H
 
22.06.12
12:34
(14) то-есть необходимо создать общий модуль с внешним соединением и там разместить функцию которая возвратит результат табличного документа?

но тут надо предвидеть еще структура входящих параметров и скорей всего придется строковой ГУИД передавать?
16 Sasha_H
 
22.06.12
12:46
Создал общий модуль в Базе СОМ "ERP_ПолучитьДанныеОтчетов"


Функция РезультатОтчетаАнализДоступностиТовараНаСкладах(НомУникКод) Экспорт
   
   ТабДок = Новый ТабличныйДокумент;
   
   ВыбНоменклатура = Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(НомУникКод));
   
   Отчет = Отчеты.АнализДоступностиТоваровНаСкладах.Создать();
   Отчет.УстановитьНачальныеНастройки();
   Отборы = Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор;
   
   ЭлемОтбора = Отборы.Добавить("Номенклатура");
   ЭлемОтбора.Использование = Истина;
   ЭлемОтбора.Значение = ВыбНоменклатура;
   
   Отчет.УниверсальныйОтчет.СформироватьОтчет(ТабДок);
   
   Возврат ТабДок;
КонецФункции    

Вызов:

НомУникКод = Строка(ВыбНоменклатура.УникальныйИдентификатор());
   ТабДок = Base_COM.ERP_ПолучитьДанныеОтчетов.РезультатОтчетаАнализДоступностиТовараНаСкладах(НомУникКод);

Падение:


{Форма.Форма.Форма(56)}: Ошибка при вызове метода контекста (РезультатОтчетаАнализДоступностиТовараНаСкладах)
   ТабДок = Base_COM.ERP_ПолучитьДанныеОтчетов.РезультатОтчетаАнализДоступностиТовараНаСкладах(НомУникКод);
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.2.15.294): {ОбщийМодуль.ERP_ПолучитьДанныеОтчетов(9)}: Метод объекта не обнаружен (УстановитьНачальныеНастройки)

Что происходит!?
17 Sasha_H
 
22.06.12
12:57
апну. ребят...
18 Рэйв
 
22.06.12
13:04
сделал бы свой отчет с нужными запросами к СОМ базе и не парился.
19 Sasha_H
 
22.06.12
13:04
Ну сами же писали сформируй отчет на СОМ базе и отправь в СОЬ, не получается... Где я накосячил?
20 Sasha_H
 
22.06.12
13:05
(18) Это да. Но группировки обходить в результатах это тоже не так и просто чтобы подсунуть данные в СКД.
21 Рэйв
 
22.06.12
13:07
(19)Не все процедуры отрабатывают по СОМ. потому что некоторые из них лезут в места, которые по COM недоступны или используют команды, которые недопустимы. Например достаточно там быть Сообщить() и вызов вывалится с ошибкой.
22 Рэйв
 
22.06.12
13:07
(19)Поэтому быстроее тебе самому написать
23 Sasha_H
 
22.06.12
15:02
Итак всю эту тему сделал чере ОЛЕ. Но вот никак не получается отобразить на форме резульат табличного документа:



ТабДок = ЗначениеИзСтрокиВнутр(Base_OLE.ERP_ПолучитьДанныеОтчетов.РезультатОтчетаАнализДоступностиТовараНаСкладах(НомУникКод)); // получаем печатную форму из удаленной базы
   ТабДок.Вывести(ЭлементыФормы.ТабРезультатОтчета);
   ЭлементыФормы.ТабРезультатОтчета.Показать();
   
   //ТабДок.Показать();

//ТабДок.Показать(); - если это отремарить то открывается табличный документ в новом окне, в чем прикол?!
24 Sasha_H
 
22.06.12
15:06
опять апну, почему не выходит отобразить тип данных "Табличный документ" в поле табличного документа на форме?
25 Sasha_H
 
22.06.12
15:08
Тьфу ты.. все получилось. Я не оттуда сделал Вывести :)
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс