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

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

  1. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

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

    В общем, задача следующая. Необходимо получить результат отчета "Сотрудники организации" (СпискиРаботниковОрганизаций) из типовой конфы ЗиКБУ (8.2) со следующими нюансами:

    1) произвести отбор на текущую дату;
    2) произвести сортировку по сотруднику;
    3) вывести результат отчета в виде xls;
    4) всё делать в фоне из-под VBA.

    Пока пробую постепенно выполнить это дело непосредственно в 1С (выполняя пункт 1).

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

    На это получаю:
    Имя проверил - вроде как такое...

    Подскажите, пожалуйста, что делаю не так?


    Спасибо!

    P.S. Просьба сильно не ругать, т.к. с 1С совсем не дружу, а необходимость есть...
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    1. Необходимо указать имя формы, а не объекта:
    ОткрытьФорму("Отчеты.СпискиРаботниковОрганизаций.Форма", ПараметрыФормы);

    2. Зачем вообще открывать форму, если отчет формируется программно?
    Задаем необходимые настройки через доступные реквизиты отчета и используем экспортные функции/процедуры модуля отчета.

    Если с 1С-кой не дружите, то желательно подружится перед тем как программировать на таком, скажем так, не низком уровне.
    The_Immortal нравится это.
  3. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

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

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

    А не могли бы скинуть какой-нибудь примерчик без лишнего? Я гуглил, но так и не нарвался на нужное.


    Собственное, чем и занимаюсь... Пытался подойти к вопросу последовательно.
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Для начала осваивания 1с вы выбрали совсем не простой вариант.

    Для того, чтобы написать примерчик мне еще придется комментарии развернуто писать - это займет больше места и времени, чем сам код.

    Вам необходимо начать с того, что разобраться с тем, что происходит после нажатия на кнопку "Сформировать" на форме отчета, как работает и устроена схема компоновки данных. Исходя из этого написать необходимый код.
    The_Immortal нравится это.
  5. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk,
    Дело в том, что необходимости в глубоком освоении 1С нету, т.к. довольна большая степень абстракции меня вполне устроит :). У меня совсем другой профиль, но мне, увы, поставили вот такую задачу (так бывает), вот я, собственно, и ищу помощи...

    Хорошо, буду копать...

    Спасибо!


    UPD: судя по информации в сети, мне нужно использовать процедуру СкомпоноватьРезультат, но, просмотрев полностью модуль нужного отчета, таковой процедуры я там не обнаружил =/
    Последнее редактирование: 27 окт 2014
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Вы поймите простую вещь: формирование отчета программно затрагивает такие вещи как взаимодействие модулей разных объектов конфигурации 1С, которое описано в разных книгах, посвященным программированию 1С и занимает при этом не один десяток страниц, и обучить всему этому с помощью форума представляется неким видом мазохизма как для обучающегося, так и для обучающего :)

    На вашем месте я бы отказался от решения поставленной задачи, либо взял некий промежуток времени для освоения необходимых знаний и навыков.
    The_Immortal нравится это.
  7. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk,
    Я это прекрасно понимаю, но и Вы меня поймите, что вникать в процесс "как оно там работает" мне не надо, пусть оно будет инкапсулировано для моего понимания-восприятия. Мне всего лишь надо получить вышеобозначенные данные для более глобальной задачи, которую я в состоянии буду выполнить, но никак не эту. И я не прошу выполнить её за меня, я прошу дать явные намеки для её выполнения...

    К сожалению, отказаться я не могу. Касательно же получения необходимых знаний и навыков - сроки сжаты и необходимого промежутка времени в наличии нету.
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Хорошо.

    В рамках решения задачи по формированию отчета программно можно поступить так:

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

    ТабДок после выполнения данного кода должен содержать данные на указанную дату.

    Если необходимо накладывать отборы, то это необходимо делать через:

    ТекОтчет.ОбщийОтчет.ПостроительОтчета.Отбор.
    Последнее редактирование: 27 окт 2014
    The_Immortal нравится это.
  9. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk, искренне Вам благодарен!!!
    Но, к сожалению, 1С ругается на неопределенную переменную "ОбщийОтчет". Что сиё может означать, подскажите, пожалуйста?..
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    ага, моя неточность, поправил. еще раз скопируйте/вставьте код.
  11. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk, сейчас Вы, наверное, будете злиться и ругать себя за то, что взялись мне помочь...)
    Всё равно не вышло...У этого отчета нет метода СоздатьОтчет() (или не знаю как правильно выразиться). В общем, вот визуальное подтверждение:

    [​IMG]

    Есть такой вариант:
    Код:
    ТекОтчет = Отчеты.СпискиРаботниковОрганизаций.Создать().СформироватьОтчет();
    Но, вероятно, данный вариант некорректен, т.к. при выполнении общего кода возникает ошибка:
    Есть еще такой вариант:
    Код:
    ТекОтчет = Отчеты.СпискиРаботниковОрганизаций.Создать().СкомпоноватьРезультат();
    
    Но, увы, как использовать его я не без понятия... :-(
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    не, это опять из-за того, что писал наполовину по-памяти :)
    необходимо использовать
    ТекОтчет = Отчеты.СпискиРаботниковОрганизации.Создать();
    И далее должно быть ок.

    ТекОтчет = Отчеты.СпискиРаботниковОрганизаций.Создать().СформироватьОтчет();
    использовать не получится, т.к. будут не определены необходимые входные данные.

    ТекОтчет = Отчеты.СпискиРаботниковОрганизаций.Создать().СкомпоноватьРезультат();
    вообще вывалится в ошибку скорее всего.
  13. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk,
    Код:
    ТекОтчет = Отчеты.СпискиРаботниковОрганизаций.Создать();
    ТабДок = Новый ТабличныйДокумент;
    
    ТекОтчет.ОбщийОтчет.ДатаКон = НачалоДня(ТекущаяДата());
    ТекОтчет.ОбщийОтчет.ПостроительОтчета.Параметры.Вставить("ДатаАктуальности", ТекОтчет.ОбщийОтчет.ДатаКон);
    ТекОтчет.ОбщийОтчет.ПостроительОтчета.Параметры.Вставить("ДатаАктуальности_Год", Год(ТекОтчет.ОбщийОтчет.ДатаКон));
    ТекОтчет.ОбщийОтчет.ПостроительОтчета.Параметры.Вставить("ДатаАктуальности_Месяц", Месяц(ТекОтчет.ОбщийОтчет.ДатаКон));
    ТекОтчет.ОбщийОтчет.ПостроительОтчета.Параметры.Вставить("ДатаАктуальности_День", День(ТекОтчет.ОбщийОтчет.ДатаКон));
    ТекОтчет.ОбщийОтчет.ПостроительОтчета.Параметры.Вставить("Уволен", Перечисления.ПричиныИзмененияСостояния.Увольнение);
    ТекОтчет.ОбщийОтчет.СформироватьОтчет(ТабДок, Ложь, 0);    
    Теперь я где-то накосячил? :)
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Я так понимаю, это все в форме обработки какой-то выполняется в режиме управляемых форм?
    Для ТекОтчет.ОбщийОтчет какие вообще реквизиты доступны в режиме отладки?
    ДатаКон - это реквизит другого отчета, он там точно есть и именно так называется.
    The_Immortal нравится это.
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Еще момент: я отчет СпискиРаботниковОрганизаций смотрел в конфигурации "Бухгалтерия предприятия", в конфигурации "Зарплата и управление персоналом" в реквизите ОбщийОтчет может находится ссылка на другой вид отчета и в нем ДатаКон может называться по другому, но суть этого реквизита - дата окончания для построения отчета.
    The_Immortal нравится это.
  16. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk,
    Эм... Это все выполняется во внешней обработке по кнопке "Выполнить".

    Хм... в "ЗиКБУ" ("Зарплата и кадры бюджетного учреждения") реквизита ОбщийОтчет нет:

    [​IMG]
  17. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Тогда необходимо посмотреть какой код отрабатывает по кнопке "Сформировать" на форме отчета.
  18. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk, теперь я понимаю о чём Вы выше говорили... Без пол-литра тут никак не обойтись :)

    Итак. Вот таким образом выглядит отчет вживую при запуске (до формирования):

    [​IMG]

    А вот так выглядит шаблон данного отчета в Конфигураторе:

    [​IMG]

    Красным я подчеркнул то, что появляется каким-то магическим образом.

    Далее начал смотреть в модуль отчета:

    Код:
    ////////////////////////////////////////////////////////////////////////////////
    // ПЕРЕМЕННЫЕ
    //
    
    Перем СоответствиеНастройкаРезультат Экспорт; // Соответствие, в котором хранятся все результаты при текущем открытии отчета
    Перем ПредставлениеНастройки Экспорт;         // Представление настройки при редактировании отдельной настройки
    Перем ПанельНастроекНарисована;               // Флаг, означающий что панель настроек после открытия нарисована
    Перем ДействияЭлементовФормы Экспорт;         // Структура, содеражащая действия элементов формы, формируемых программно
    
    // ДЕЙСТВИЯ С РЕЗУЛЬТАТОМ
    
    ...
    
    // ОБЩИЕ ПРОЦЕДУРЫ
    
    Процедура ОбновитьОтчет() Экспорт
    
        СостояниеМодифицированности = Модифицированность;
        Если ПанельНастроекНарисована <> Истина Тогда
            ОбновлениеОтображения();
        КонецЕсли;
        ТиповыеОтчеты.ЗагрузитьВРеквизитЗначенияНастроекПанелиПользователя(ЭтотОбъект, ЭтаФорма);
        ПараметрыПанели  = ТиповыеОтчеты.ПолучитьПараметрыПанелиПользователяОбъекта(ОтчетОбъект);
        ЗначенияНастроек = ТиповыеОтчеты.ПолучитьЗначенияНастроекПанелиПользователяОбъекта(ОтчетОбъект);
        // Установка Динамических отборов
        Отказ = ложь;
        Если ЗначенияНастроек.Свойство("ДинамическиеПараметры") И ПараметрыПанели.Свойство("Параметры") тогда
            Если ПараметрыПанели.Параметры.Колонки.Найти("Заполнено") <> Неопределено тогда
                СтрокиПарамтеровДляПроверки = ПараметрыПанели.Параметры.НайтиСтроки(Новый Структура("Заполнено", истина));
                Если СтрокиПарамтеровДляПроверки.Количество() > 0 тогда
                    СтрокаПредупреждения = "Не заполнен(а)";
                    Для каждого СтрокаПараметра Из СтрокиПарамтеровДляПроверки Цикл
                        ЗначениеПараметра = ЗначенияНастроек.ДинамическиеПараметры[СтрокаПараметра.Параметр];
                        Если ЗначениеПараметра = Неопределено или Не ЗначениеЗаполнено(ЗначениеПараметра.Значение) ИЛИ Не ЗначениеПараметра.Использование Тогда
                            СтрокаПредупреждения = СтрокаПредупреждения + " " + СтрокаПараметра.Представление;
                            Отказ = истина;
                        КонецЕсли;
                    КонецЦикла;
                    Если Отказ тогда
                        СтрокаПредупреждения = СтрокаПредупреждения + "!";
                        Предупреждение(СтрокаПредупреждения);
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        Если Отказ тогда
            Возврат;
        КонецЕсли;
        СформироватьОтчет(ЭлементыФормы.Результат, ДанныеРасшифровки);
        УправлениеОтчетами.УстановитьКолонтитулыПоУмолчанию(ЭлементыФормы.Результат, Заголовок, Строка(ПараметрыСеанса.ТекущийПользователь));
        Модифицированность = СостояниеМодифицированности;
    КонецПроцедуры
    
    // ОБРАБОТЧИКИ КНОПОК ФОРМЫ
    
    Процедура ДействияФормыСформировать(Кнопка)
    
        ОбновитьОтчет();
    
    КонецПроцедуры
    
    ...
    
    // ОБРАБОТЧИКИ ФОРМЫ
    
    Процедура ПриОткрытии()
    
        // Реквизит формы и компоновщик отчета ссылаются на один компоновщик
        КомпоновщикНастроек = ЭтотОбъект.КомпоновщикНастроек;
    
        ТиповыеОтчеты.ОбновитьТаблицуДоступныхНастроекПользователю(ЭтотОбъект);
        ТиповыеОтчеты.УстановитьВариантПоУмолчанию(ЭтотОбъект, ЭтаФорма);
    
        // Нарисуем кнопки выбора настроек на верхней панели
        ТиповыеОтчеты.ОбновитьКнопкиВыбораНастроек(ЭтаФорма, ЭтотОбъект, ПредставлениеНастройки, РежимРедактированияНастройки);
        ТиповыеОтчеты.ОбновитьФормуТиповогоОтчетаПоКомпоновщику(ЭтотОбъект, ЭтаФорма);
        ТиповыеОтчеты.УстановитьВидимостьПанелиВариантовПоУмолчанию(ЭтотОбъект, ЭтаФорма);
        ТиповыеОтчеты.УстановитьВидимостьПанелиПользователяПоУмолчанию(ЭтотОбъект, ЭтаФорма);
        ТиповыеОтчеты.ВосстановитьНастройкиФормыОтчета(ЭтотОбъект, ЭтаФорма);
        ТиповыеОтчеты.УправлениеОтображениемПанелиВариантов(ЭтаФорма);
        ТиповыеОтчеты.УправлениеОтображениемПанелиПользователя(ЭтаФорма)
    
    КонецПроцедуры
    
    Процедура ОбновлениеОтображения() Экспорт
    
        Если ПанельНастроекНарисована <> Истина И Не Модифицированность Тогда
    
            // Инициализация компоновщиков настроек и, если необходимо, загрузка настроек по умолчанию
            ЗагружатьНастройкиПоУмолчанию = Не РежимРедактированияНастройки И Не ЭтоОтработкаРасшифровки И СохраненнаяНастройка.Пустая();
            Схема = ТиповыеОтчеты.ИнициализироватьКомпоновщикНастроек(ЭтотОбъект, , ЗагружатьНастройкиПоУмолчанию);
            КомпоновщикНастроекПользователя.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
    
            Если Не ЭтоОтработкаРасшифровки И Не РежимРедактированияНастройки Тогда
                ПрименитьНастройку();
                ТиповыеОтчеты.ПрименитьНастройкуПользователяНастройкиОтчета(ЭтотОбъект);
                ТиповыеОтчеты.ОбработкаФормыПослеПримененияНастройки(ЭтотОбъект, ЭтаФорма);
            Иначе
                // Отработаем изменение отображение панели настроек
                ТиповыеОтчеты.УправлениеОтображениемЭлементовФормыТиповогоОтчета(ЭтотОбъект, ЭтаФорма);
                ТиповыеОтчеты.ПерерисоватьПанельНастроек(ЭтотОбъект, ЭтаФорма, );
        
            КонецЕсли;
    
            ПанельНастроекНарисована = Истина;
    
        КонецЕсли;
        ТиповыеОтчеты.ОбновитьЗаголовокТиповогоОтчета(ЭтотОбъект, ЭтаФорма);
    
    КонецПроцедуры
    
    Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
    
        ТиповыеОтчеты.ОбработкаВыбораФормыОтчета(ЭтотОбъект, ЭтаФорма, ЗначениеВыбора, Источник);
    
    КонецПроцедуры
    
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
        ТиповыеОтчеты.ОбработкаРасшифровкиТиповогоОтчета(Расшифровка, СтандартнаяОбработка, ЭтотОбъект, ЭтаФорма);
    
    КонецПроцедуры
    
    Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)

    Пробежался по данному коду, но так и не понял каким образом формируется та панель и, главное, где вообще задается дата и название учреждения?!


    UPD: только что обнаружил в конце модуля следующее:

    Код:
    // ОБРАБОТЧИКИ ЭЛЕМЕНТОВ ФОРМЫ НА ПАНЕЛИ
    
    ...
    
    СоответствиеНастройкаРезультат = Новый Соответствие;
    
    ДействияЭлементовФормы = Новый Структура;
    ДействияЭлементовФормы.Вставить("ОбработкаНажатияКнопкиСохраненнойНастройки", Новый Действие("ОбработкаНажатияКнопкиСохраненнойНастройки"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиСохранитьСписок", Новый Действие("ДействияПанелиСохранитьСписок"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиЗагрузитьСписок", Новый Действие("ДействияПанелиЗагрузитьСписок"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиСтандартныйПериодПользователяПриИзменении", Новый Действие("ДействияПанелиСтандартныйПериодПользователяПриИзменении"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиСтандартнаяДатаНачалаПользователяПриИзменении", Новый Действие("ДействияПанелиСтандартнаяДатаНачалаПользователяПриИзменении"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиДатаСтандартногоПериодаПриИзменении", Новый Действие("ДействияПанелиДатаСтандартногоПериодаПриИзменении"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиДатаСтандартнойДатыНачалаПриИзменении", Новый Действие("ДействияПанелиДатаСтандартнойДатыНачалаПриИзменении"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиИзменениеЗначенияДинамическогоОтбора", Новый Действие("ДействияПанелиИзменениеЗначенияДинамическогоОтбора"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиНачалоВыбораЗначенияДинамическогоОтбора", Новый Действие("ДействияПанелиНачалоВыбораЗначенияДинамическогоОтбора"));
    //ДействияЭлементовФормы.Вставить("ДействияПанелиНачалоВыбораЗначенияТабличногоПоля", Новый Действие("ДействияПанелиНачалоВыбораЗначенияТабличногоПоля"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиОкончаниеРедактированиеТабличногоПоля", Новый Действие("ДействияПанелиОкончаниеРедактированиеТабличногоПоля"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиУдалениеСтрокиТабличногоПоля", Новый Действие("ДействияПанелиУдалениеСтрокиТабличногоПоля"));
    ДействияЭлементовФормы.Вставить("ДействияПанелиКнопкаПодборНажатие", Новый Действие("ДействияПанелиКнопкаПодборНажатие"));
    //ДействияЭлементовФормы.Вставить("ДействияПанелиИзменениеЗначенияДинамическогоПараметра", Новый Действие("ДействияПанелиИзменениеЗначенияДинамическогоПараметра"));
    //ДействияЭлементовФормы.Вставить("ДействияПанелиНачалоВыбораЗначенияДинамическогоПараметра", Новый Действие("ДействияПанелиНачалоВыбораЗначенияДинамическогоПараметра"));
    ДействияЭлементовФормы.Вставить("ПриНажатииНаКнопкуВверх", Новый Действие("ПриНажатииНаКнопкуВверх"));
    ДействияЭлементовФормы.Вставить("ПриНажатииНаКнопкуВниз", Новый Действие("ПриНажатииНаКнопкуВниз"));
    ДействияЭлементовФормы.Вставить("ГруппировкиПриПолученииДанных", Новый Действие("ГруппировкиПриПолученииДанных"));
    Вроде есть намеки на дату... Но всё это дело располагается как-то бесхозно, вне какой-либо процедуры... :confused:


    UPD2: не заметил эти процедуры (с установкой даты), они были выше:

    Код:
    // ОБРАБОТЧИКИ ЭЛЕМЕНТОВ ФОРМЫ НА ПАНЕЛИ
    ...
    
    Процедура ДействияПанелиСтандартныйПериодПользователяПриИзменении(Элемент)
     
       СтандартныйПериод.Вариант = Элемент.Значение;
     
    КонецПроцедуры
    Процедура ДействияПанелиСтандартнаяДатаНачалаПользователяПриИзменении(Элемент)
     
       СтандартнаяДатаНачала.Вариант = Элемент.Значение;
     
    КонецПроцедуры
    Процедура ДействияПанелиДатаСтандартногоПериодаПриИзменении(Элемент)
     
       ЭлементыФормы.ДинамическийОтборСтандартныйПериодПользователя.Значение = ВариантСтандартногоПериода.ПроизвольныйПериод;
     
    КонецПроцедуры
    Процедура ДействияПанелиДатаСтандартнойДатыНачалаПриИзменении(Элемент)
     
       ЭлементыФормы.ДинамическийОтборСтандартнаяДатаНачалаПользователя.Значение = ВариантСтандартнойДатыНачала.ПроизвольнаяДата;
     
    КонецПроцедуры

    Прочитал в соседнем топике Ваши слова:
    Но как быть, если в модуле идет тесная связи с формой отчета?
    Последнее редактирование: 28 окт 2014
  19. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Форма отчета - это как бы не важная вещь вообще. Грамотно написанный отчет работает в любых условиях: программно/интерактивно.

    Из всего того, что есть под спойлером, вас интересует строка:

    СформироватьОтчет(ЭлементыФормы.Результат, ДанныеРасшифровки);

    Что в терминах решения вашей задачи будет выглядеть:

    ТекОтчет = Отчеты.СпискиРаботниковОрганизаций.Создать();
    ТабДок = Новый ТабличныйДокумент;

    ТекОтчет.СформироватьОтчет(ТабДок, Данные Расшифровки);

    Осталось разобраться с тем, как задать дату и что должно быть в "ДанныеРасшифровки"/можно ли не указывать данный параметр.

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

    Про форму отчета, как я уже сказал, забываем.
    The_Immortal нравится это.
  20. TopicStarter Overlay
    The_Immortal
    Offline

    The_Immortal Опытный в 1С

    Регистрация:
    24 сен 2012
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    nomad_irk,
    А слона-то я и не заметил... Спасибо!

    Пока с датой не разобрался. Нашел описание процедуры (оказывается, это функция) СформироватьОтчет в модуле объекта:

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

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