1с отчет скд com соединение

Обновлено: 04.07.2024

Из одной 1с8 базы вызывается отчет на скд из другой конфигурации. Обе клиент-серверный вариант. Через com-соединение.Все прекрасно работало.
Но в этот отчет пришлось внести нект изменения. А именно : в параметры макета вставили вызов функции общего модуля.В свойствах модуля установлено сервер, внешнее соединение, клиент(обычное приложение). Теперь не формируется отчет через сом. Соединение устанавливается, но выходит ошибка :
Синтаксическая ошибка МойМодуль.МояФункция(). Подскажите, пожалуйста, как решить проблему?

СоединениеБГУ = СтруктураСоединения.Соединение;
ТабДокБГУ = СоединениеБГУ.Отчеты.МойОтчет.ПолучитьТабДок(Отчет .ФинасовыйГод,Отчет.ДатаФормирования);
ВремФайл = ПолучитьИмяВременногоФайла("mxl");
ТабДокБГУ.Записать(ВремФайл);

ТабДок.Прочитать(ВремФайл);
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.ОтображатьСетку = Ложь;

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

СКД = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = СКД.НастройкиПоУмолчанию;
КомпН = Новый КомпоновщикНастроекКомпоновкиДанных;
//Настройки =КомпН.ПользовательскиеНастройки;

ПараметрФГ = ПарамОтчета.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ФинансовыйГод"));
ПараметрФГ.Использование = Истина;
ПараметрФГ.Значение = ФГ;

Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>)
Параметры:

Тип: МакетКомпоновкиДанных.
Макет, для которого будет выполняться компоновка.
<ВнешниеНаборыДанных> (необязательный)

Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры - внешнему набору данных.
<ДанныеРасшифровки> (необязательный)

Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет.
<ВозможностьИспользованияВнешнихФункций> (необязательный)

Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь.
Описание:

Как получить отчет( не СКД) при COM-соединении к базе? Как я понимаю, его надо как-то сформировать на удаленной базе, а в свою вытянуть полученный табличный документ? Ни где не смог найти примеров или описаний, везде примеры с документами и справочниками.

(1) lopatin, и ,заметь, при этом таскаются не сами документы и справочники, а информация из них. Ни на какие мысли не наталкивает? (1) lopatin, любой отчет в идеале должен формироваться по команде Отчет.Сформировать(), результатом которой будет табличный документ. Если отчет так умеет, то дальше нужно этот табличный документ сериализовать в СОМ и десериализовать в текущей базе (можно через фабрикуХДТО, а можно и "знеачениевстрокувнутр"). Не вижу проблем совершенно. (5) starik-2005, Десериализовать в текущей базе то конечно можно, если объекты совпадают, а вот любюй отчет сформировать в одной базе и сразу заполнить строковыми полями в текущей базе табличный документ - проблем действительно нет. Как десериализовать объект одной базы, к примеру "Автомобиль" в Автотранспорте в базе БП?

(6) Alex_E, если есть ключевое поле, то после десериализации можно пробежаться по нему и произвести замены в ссылочных полях. А если брать только строки - то совсем хорошо.

Но я говорил о сериализации табличного документа. Там помимо расшифровок ссылок больше нигде нет, а расшифровка нужна ли?

(7) starik-2005, ОбластьМакета.Параметры.Автомобиль - вполне может содержать саму ссылку на справочник "Автомобили", получить эту ссылку в текущей базе можно только при наличии справочника Автомобили в этой конфигурации, да и ссылка такая же должна в ней быть, если это отчет - вряд ли речь идёт о переносе данных в эту базу. Строковые же поля выводить таким способом, ИМХО, - это как из Москвы в Иваново через Пекин ездить. Создать табличный документ в текущей базе и заполнить его строками из источника отчета проще. (7) starik-2005, Нет расшифровка не нужна. Только текстовые данные в таблице (11) avto1c, и почему ты решил, что я этого не знаю? И зачем мне понимать свой же пост? Думаешь, я его не понимаю? А вот ты похоже не понял. Сам почитай свою ссылку и найди отличия от в нее в моем посте. (20) sssss_aaaaa_2011, ошибся с именем, это для автора постинга (1).
ИМХО перегнать тз в xml и перетащить текстом через com. Да вроде как в "своей" обычно формируют надо объекты по com-соединению получать

Народ мне не нужно словесное описание, я и так понимаю, что в теории должно быть. Я не понимаю какой код писать.

Объясняю на конкретном примере.

Вот я подключаюсь к базе:

Вот так, в базе где отчет создан получается результат отчета:

В модуле объекта Отчета есть следующий метод:

Попытался получить результат так:

: Метод объекта не обнаружен (СформироватьОтчет)
Отчет.СформироватьОтчет(Результат, Новый СписокЗначений, Новый СписокЗначений);

Я не знаю какой мне писать код, как вызвать метод который получает табличный документ?
Спасибо за понимание.

В одном документе для расчета потребовалось получать данные из отчета на СКД, реализовал следующим образом:

Разместил: all4cf  Версии: | 8.x |  Дата: 17.02.2016   Прочитано: 31420

Распечатать

Похожие FAQ

17 правил для составления оптимального ЗАПРОСа к данным базы 1С  42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ COM-подключение к базе 7.7 из 8.2 1С  6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь= Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению  1
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени Быстрая функция чтения данных с листа Excel  9
При чтении файла Excel я использую вариантный массив. Он позволяет быстро получить ВСЮ таблицу листа в память, а также получать данные массива целыми колонками. Тем самым время на чтение области файла Excel в таблицу значений сокращается в десятки ра Вертикальная автофиксация для СКД  0
В СКД очень не хватает возможности автофиксации строк. Обусловлено это невозможностью однозначно определить их количество в общем случае. Однако в большинстве случаев это можно сделать Обращаю ваше внимание, что приведенная процедура работает не все Посмотреть все результаты поиска похожих

Для использования в отчёте на СКД произвольной таблицы значений необходимо настроить соответствующим образом схему компоновки данных и прописать программный вывод отчёта.

1. Настройка схемы компоновки данных.

1.1. Создаём основную схему компоновки данных.

Добавление набора данных - запрос

Создание запроса

1.2. На закладке "Наборы данных" добавляем набор данных - объект.

Добавление набора данных - объект

1.3. Добавляем необходимые поля набора данных (достаточно указать Поле) и указываем Имя объекта, содержащего данные.

Заполнение реквизитов набора данных - объект

1.4. Если в СКД есть другие наборы данных (например, Запрос), то создаём связи наборов данных на закладке "Связи наборов данных".

Создание связи наборов данных

1.5. Настраиваем вывод отчёта нужным образом.

Настройки СКД

2. Программный вывод отчёта.

2.1. В модуле объекта отчёта создаём процедуру-обработчик ПриКомпоновкеРезультата.

Создание процедуры ПриКомпоновкеРезультата

2.2. В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку.

2.3. Формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с полями набора данных в СКД (п.1.3).

2.4. Получаем схему компоновки данных из макета.

2.5. Из схемы получаем настройки по умолчанию.

2.6. Помещаем данные о расшифровке в соответствующую переменную.

2.7. Формируем макет с помощью компоновщика макета.

2.8. Передаём в макет компоновки схему, настройки и данные расшифровки.

2.9. Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных (п.1.3), значение - сформированная таблица значений), данные расшифровки.

2.10. Очищаем поле табличного документа.

2.11. Выводим результат в табличный документ.

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

Пример сформированного отчёта:

Отчёт на СКД с использованием внешнего набора данных

Справочная информация из синтакс-помощника:

ПроцессорКомпоновкиДанных (DataCompositionProcessor) Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>) Тип: МакетКомпоновкиДанных.
Макет, для которого будет выполняться компоновка. Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры - внешнему набору данных. Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет. <ВозможностьИспользованияВнешнихФункций> (необязательный) Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь. Пример использования внешних наборов данных в СКД (для УТ 10.3)

Комментарии

Обычный Александр (не проверено)

вт, 13/09/2016 - 10:25

Спасибо огромное за статью и прикреплённый пример. Очень помогло в работе.

Щукина Татьяна (не проверено)

пт, 16/12/2016 - 15:28

Спасибо - просто спасли. Только у меня Период не видит в модуле

пт, 16/12/2016 - 16:03

Можете файл отчёта выложить?

Щукина Татьяна (не проверено)

пт, 16/12/2016 - 17:14

положила все в модуль Объекта(база ЗиК 3), в СКД в Параметры добавила "Период" =стандартный период,НачалоПериода=&Период.ДатаНачала ; КонецПериода.. Не видит здесь Период и все..

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) экспорт

СтандартнаяОбработка = Ложь;
//ДанныеПечати = ПолучитьИзВременногоХранилища(Адр);
Запрос = Новый Запрос;
Запрос.Текст ;

//Запрос.УстановитьПараметр("НачалоПериода", Период.ДатаНачала);
//Запрос.УстановитьПараметр("КонецПериода", Период.ДатаОкончания);
НачалоПериода=Дата("01.11.2016 00:00:00"); ;

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Запрос.УстановитьПараметр("СовмПроф", "Доплата за совм. проф. (4)");

//Если СовмещСотрудник.Пустой() тогда
// //Сообщить("В ЭТОЙ ГРУППЕ НЕТ КОНТРАГЕНТОВ " );
//конецесли;

Запрос = Новый Запрос;
Запрос.Текст ;
ффф= Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено ;
//Запрос.УстановитьПараметр("НачалоПериода", Период.ДатаНачала);
//Запрос.УстановитьПараметр("КонецПериода", Период.ДатаОкончания);
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",КонецПериода);

Запрос.УстановитьПараметр("ВидДеят", "Вид деятельности (Сотрудники)");
Запрос.УстановитьПараметр("ВидКат", "Категория (Сотрудники)");
Запрос.УстановитьПараметр("ДОП_1", "Вид з/п (Начисления)");
Запрос.УстановитьПараметр("ДОП_2", "Призн.н/о прибыли (Начисления))");
Запрос.УстановитьПараметр("ДОП_3", "Резерв отпусков (участие) (Начисления)");
Запрос.УстановитьПараметр("ДОП_4", "Код н/у (Начисления)");
Запрос.УстановитьПараметр("ДОП_5", "Фонд з/п (Начисления)");
Запрос.УстановитьПараметр("начисл",ффф);

ПланВидовРЕЗ= РезультатПакета[6].Выгрузить();
ПланВидовРЕЗ.сортировать("ПланВидовРасчетаНаименование");

СотрРез = РезультатПакета[9].Выгрузить();
ДанныеПечати = РезультатПакета[10].Выгрузить(); //окончательный итог Сотрудник

//начисл_Сотр_подр = РезультатПакета[9].Выгрузить();
//начисл_Сотр_подр.сортировать("Группа");
//РезультатЗапроса.сортировать("Группа,СпрОтрВБух_ВидДеятельности,ВидДеятельностиНАШ");
ДанныеПечати.сортировать("Сотрудник");
ДанныеПечати.Колонки.Добавить("ПодразделенияРодитель", Новый ОписаниеТипов("строка"));
ДанныеПечати.Колонки.Добавить("ВидДеятельностиНаш", Новый ОписаниеТипов("строка"));

Если ДанныеПечати.Количество()=0 тогда
Сообщить("Запрос Пустой " );
иначе
Для каждого Стр ИЗ ДанныеПечати Цикл //КОНТРАГЕНТ
если сокрЛП(Стр.НаименованиеНачисления) = "Доплата за совм. проф. (4)" тогда
СтруктураОтбор = Новый Структура();
СтруктураОтбор.Вставить("СовмещСотрудник", Стр.Сотрудник);
СтруктураОтбор.Вставить("СовмещСумма", Стр.Сумма);
СтруктураОтбор.Вставить("СовмещПодразделениеОТКуда_отдел", Стр.Подразделение);

Если МассивНайденныеСтроки.Количество() > 0 Тогда
Для Каждого Ст Из МассивНайденныеСтроки Цикл
Стр.ВидДеятельностиНаш = Ст.СовмещСпособОтражения;
Если Ст.СовмещПодразделениеКуда = NULL Тогда
Счет ="";
СубСчет ="";
ПодразделениеСпрОтр ="";
ВидДеятельностиСпрОтр ="";
резЗапр = 0;

если резЗапр = 0 Тогда
ааа = "ОШИБКА нет в спр.СовмещСпособОтраженияСсылка записи = "+Ст.СовмещСпособОтраженияСсылка+" по "+Стр.Сотрудник +" cумма = "+ Стр.Сумма+" => ПодразделенияРодитель И ВидДеятельностиНаш берем из спр.Сотрудники" ;
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
иначе
Стр.ПодразделенияРодитель = ПодразделениеСпрОтр ;
Стр.ВидДеятельностиНаш = ВидДеятельностиСпрОтр;
конецесли;
иначе
Стр.ПодразделенияРодитель = Ст.СовмещПодразделениеКуда ; //это должен быть родитель подразделения
Стр.ВидДеятельностиНаш = Ст.СовмещСпособОтражения;
конецесли;
конецЦикла;
ИНАЧЕ
ааа = "ОШИБКА нет в табл.СовмещСотрРЕЗУЛЬТАТ "+Стр.Сотрудник +" cумма = "+ Стр.Сумма+" => ПодразделенияРодитель И ВидДеятельностиНаш берем из спр.Сотрудники" ;
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
конецЕсли ;
ИНАЧЕ
Стр.ПодразделенияРодитель = Стр.ПодразделениеРод;
Стр.ВидДеятельностиНаш = Стр.ВидДеятельностиСотр;
конецЕсли ;
КонецЦикла;
КонецЕсли;
ДанныеПечати.сортировать("Сотрудник");
//***************************************************************
//Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, Новый Структура("ДанныеПечати", ДанныеПечати), ДанныеРасшифровки);

//Очищаем поле табличного документа
ДокументРезультат.Очистить();

//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

Читайте также: