8.х Программное выполнение отчета СписокРаботниковОрганизаций

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем The_Immortal, 27 окт 2014.

  1. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.556
    Симпатии:
    716
    Баллы:
    204
    Тут надо технически (с) мультик

    Код:
    ТекОтчет = Отчеты.СпискиРаботниковОрганизаций.Создать();
    ТабДок = Новый ТабличныйДокумент;
    ТекОтчет.СформироватьОтчет(ТабДок);
    
    ТиповыеОтчеты.ПолучитьПримененуюНастройку(ТекОтчет);//НЕ знаю надо выполнять или нет
    
    ТиповыеОтчеты.СформироватьТиповойОтчет(ТекОтчет, Табдок, Неопределено, Ложь);
    ТабДок.Записать("C:\out.xls", ТипФайлаТабличногоДокумента.XLS);
    или
    ТабДок.Записать("C:\out.xlsx", ТипФайлаТабличногоДокумента.XLSX);
    The_Immortal нравится это.
  2. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk, благодарю за поправку!

    Всё ближе и ближе к решению... :)

    Отчет в интерактивном режиме (по умолчанию) дает вот такие данные:
    [​IMG]

    Выходные же данные по моему (точнее Вашему) коду следующие:
    [​IMG]

    Таким образом, на дату можно просто забить, т.к. отчет формируется на текущее время и дату. Но вот как избавиться от Группировок строк и добавить "Дополнительные поля" и "Показатели" в программный вариант формирования отчета? В какую сторону копать?


    UPD: нашел в рунете вот такой пример:
    Код:
    УниверсальныйОтчет.ДобавитьДополнительноеПоле("Контрагент.Код",ТипРазмещенияРеквизитовИзмерений.Отдельно,1); 
    Но мне ТекОтчет не предоставляет такого метода как "ДобавитьДополнительноеПоле" :-(


    UPD2: Методом тыка попробовал вот так:
    Код:
    ТекОтчет.СхемаКомпоновкиДанных.МакетыПолей.Добавить("Должность");
    
    Но на это получил ошибку:
    Так вот тоже не вышло:
    Код:
    ТекОтчет.СхемаКомпоновкиДанных.ПоляИтога.Добавить("Должность");
    Скорее всего я неверно (неоднозачно) указываю параметр, т.е. "Должность".

    Наткнулся на такое, пытаюсь въехать...
    Последнее редактирование: 28 окт 2014
  3. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.556
    Симпатии:
    716
    Баллы:
    204
    Копать надо в сторону того, каким образом устанавливаются необходимые настройки при интерактивной работе с отчетом. Опять ворачиваемся в модуль формы отчета и проверяем код, отрабатывающий до обращения к функции СформироватьОтчет()
    The_Immortal нравится это.
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.556
    Симпатии:
    716
    Баллы:
    204
    Так же необходимые настройки могут устанавливаться при инициализации формы или при ее открытии
    The_Immortal нравится это.
  5. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk,
    Код:
    Процедура ПриОткрытии()
    
        // Реквизит формы и компоновщик отчета ссылаются на один компоновщик
    КомпоновщикНастроек = ЭтотОбъект.КомпоновщикНастроек;
    
        ТиповыеОтчеты.ОбновитьТаблицуДоступныхНастроекПользователю(ЭтотОбъект);
        ТиповыеОтчеты.УстановитьВариантПоУмолчанию(ЭтотОбъект, ЭтаФорма);
    
        // Нарисуем кнопки выбора настроек на верхней панели
        ТиповыеОтчеты.ОбновитьКнопкиВыбораНастроек(ЭтаФорма, ЭтотОбъект, ПредставлениеНастройки, РежимРедактированияНастройки);
        ТиповыеОтчеты.ОбновитьФормуТиповогоОтчетаПоКомпоновщику(ЭтотОбъект, ЭтаФорма);
        ТиповыеОтчеты.УстановитьВидимостьПанелиВариантовПоУмолчанию(ЭтотОбъект, ЭтаФорма);
        ТиповыеОтчеты.УстановитьВидимостьПанелиПользователяПоУмолчанию(ЭтотОбъект, ЭтаФорма);
        ТиповыеОтчеты.ВосстановитьНастройкиФормыОтчета(ЭтотОбъект, ЭтаФорма);
        ТиповыеОтчеты.УправлениеОтображениемПанелиВариантов(ЭтаФорма);
        ТиповыеОтчеты.УправлениеОтображениемПанелиПользователя(ЭтаФорма)
    
    КонецПроцедуры
    Очень странно... Зачем делать вот такое присвоение:
    Код:
        КомпоновщикНастроек = ЭтотОбъект.КомпоновщикНастроек;
    , если потом КомпоновщикНастроек в этой процедуре нигде не используется... Ладно, у них своя логика.

    Меня заинтересовало вот это:
    Код:
    ТиповыеОтчеты.УстановитьВариантПоУмолчанию(ЭтотОбъект, ЭтаФорма
    Немного покопавшись, я сделал так:
    Код:
    ТекОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(ТекОтчет.СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    Но ничего не изменилось... Да и вообще какая-то глупость, честное слово, загружать настройки по умолчанию, когда это умолчание автоматически должно грузиться в самом начале по умолчанию... :)

    В общем, сейчас сделаю копию конфигурации и буду потрошить код модуля отчета - может быть, так хоть чего-нибудь пойму...
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.556
    Симпатии:
    716
    Баллы:
    204
    КомпоновщикНастроек - это может быть глобальная экспортная переменная в рамках отчета и к ней могу обращаться даже из вне.
    Необходимо пробежаться отладчиком по всему коду, начииная от инициализации отчета и его формы до нажатия на кнопку "Сформировать" на форме отчета. Таким образом можно понять в какой момент изменяется структура выводимого отчета.

    Если есть процедура в модуле формы "ПриСозданииНаСервере" поглядеть код в ней.
    Быть может в модуле отчета есть процедура для установки каких-то дефолтных настроек.
    The_Immortal нравится это.
  7. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk,
    Вы правы. В модуле объекта:
    Код:
    Если КомпоновщикНастроек = Неопределено Тогда
        КомпоновщикНастроек =  Новый КомпоновщикНастроекКомпоновкиДанных;
    КонецЕсли;

    Не-а, такого нету.


    Вы не могли бы подсказать, каким образом запустить отладчик в пошаговом режиме изначально (с момента вызова отчета)? Я не знаю куда впихнуть точку останова - какая функция/процедура первична в модуле объекта/отчета? Или просто расставить точки останова повсюду?
    Последнее редактирование: 29 окт 2014
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.556
    Симпатии:
    716
    Баллы:
    204
    Точки останова можно расставить везде, где интересно.
    Пошаговый режим выполнения кода - F11.

Поделиться этой страницей