Пример доработки сложного отчета из типовой конфигурации
(21 минута видео)



Сегодня мы рассмотрим одну из самых частых задач, с которой сталкиваются специалисты по 1С – доработку отчета типовой конфигурации.

О чем эта статья

В статье рассмотрен пример доработки типового отчета «Расчетный листок» в конфигурации «Зарплату и Управление Персоналом 3.0». На данном примере показываются общие шаги разработчика, в случае если он слабо знаком с конкретной реализацией конкретного типового отчета на базе СКД.

Применимость

В материалах статьи в качестве примера используется конфигурация, «Зарплата и Управление Персоналом», редакции 3 3.0.25.122. Но от этого примеры доработки, продемонстрированные в видео, не стали устаревшими, т.к. акцент сделал именно на логике рассуждений разработчика перед которым поставлена подобного рода задача. Смело смотрите видео, это must have!

В качестве конфигурации выбрали “Зарплату и Управление Персоналом 3.0” – в силу следующих причин:

  • Отчеты из ЗУП традиционно считаются сложными
  • Иногда даже задача – понять, откуда берутся данные в отчет – вызывает у специалистов сложности.

Что конкретно мы будем делать

Это реальная задача из Мастер-группы – доработаем отчет “Расчетный листок” так, чтобы в шапке выводилась информация о дате приема сотрудника на работу.

Очень простая задача :)

Но есть одна сложность – информацию о дате приема типовой отчет не содержит, её нужно получать с помощью отдельного запроса.

И запрос этот нужно интегрировать в типовой отчет…

А параллельно мы разберем и приемы работы с СКД:

  • Анализ программного кода типового отчета – определение точек минимального воздействия на конфигурацию
  • Использование расширения языка запросов для системы компоновки данных – выражения в фигурных скобках
  • Программное формирование отчета на СКД – доработку процедуры ПриКомпоновкеРезультата
  • Вывод результата компоновки в коллекцию – дерево значений
  • Доработку текста запроса типового отчета – получение связанной информации
  • Работу с настройками компоновки – определение структуры, использование нескольких группировочных полей в одной группировке
  • Использование макета – табличного документа при выводе отчета на СКД
  • Отладку типового отчета, запущенного в фоновом режиме

Итак, поехали! 21 минута видео :)

Видео 1: Как за 10 минут понять логику формирования типового отчета

В этом уроке приступаем к решению задачи по модификации Расчетного листка в ЗУП 3.0.

Суть задачи состоит в том, чтобы вывести в отчет связанную информацию из других объектов – необходимо запросом получать дополнительные данные.

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

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

Видео 2: Как с помощью 2 строк кода изменить заполнение отчета

В уроке показано, как найти, где хранятся требуемые пользователю данные – это могут быть различные объекты системы. В этой задаче очень помогает умение читать объемные запросы.

В итоге задача решается с минимальными изменениями:

  • Новая строка в макете
  • Левое соединение в запросе
  • Две строки в программном коде.

Также из видео Вы узнаете, для чего в запросе может использоваться конструкция “Выбрать Первые 0”.

P.S.

Эта тема детально раскрыта в курсе:

«Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)»

Поддержка – 2 месяца. Объем курса – 34 учебных часа.

Не откладывайте свое обучение!

Комментарии / обсуждение (47):

  1. isp06@mail.ru

    почему валится ошибка всегда?

    Процедура ТелефонНеФиз()
       
       
       
                //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
        // Данный фрагмент построен конструктором.
        // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
       
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |   ОбращениеКлиентаКонтактнаяИнформация.АдресЭП КАК АдресЭП,
            |   ОбращениеКлиентаКонтактнаяИнформация.Представление КАК Представление,
            |   ОбращениеКлиентаКонтактнаяИнформация.НомерТелефона КАК НомерТелефона
            |ИЗ
            |   Документ.ОбращениеКлиента.КонтактнаяИнформация КАК ОбращениеКлиентаКонтактнаяИнформация
            |ГДЕ
            |   ОбращениеКлиентаКонтактнаяИнформация.Ссылка.Ссылка = &Ссылка";
       
        Запрос.УстановитьПараметр("Ссылка",Ссылка);
        РезультатЗапроса = Запрос.Выполнить();
       
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
       
       
        Если выборкаДетальныеЗаписи.Количество()> 0
            тогда
            Объект.ТелефонДляЭлемента = ВыборкаДетальныеЗаписи.НомерТелефона
        КонецЕсли;
       
        Записать();
       
           
       
       
        КонецПроцедуры

    {Документ.ОбращениеКлиента.Форма.ФормаДокумента.Форма(1313,40)}: Переменная не определена (Ссылка)
    Запрос.УстановитьПараметр(“Ссылка”,<>Ссылка); (Проверка: Сервер)

  2. Сергей

    Добрый день! ЗУП 8.3.1. При попытке изменить макет ПФ_MXL_РасчетныйЛистокНастраиваемый. В режиме предприятия ничего не меняется. Параметр не видит. Такое впечатление что не тот макет. Но макет точно тот. В чем может быть проблема?

    • Василий Ханевич

      Добрый день!
      В типовых конфигурациях на базе БСП есть возможность изменить макет в пользовательском режиме. Для этого нужно обратиться к разделу НСИ и администрирование – Печатные формы, отчеты и обработки – Макеты печатных форм.
      Возможно, Ваш макет был изменен в пользовательском режиме, поэтому берется именно доработанный макет, а не из конфигуратора.

      • Сергей

        Да спасибо. Вы правы. Пришлось посидеть с отладчиком…. нашел вчера. Еще один вопрос: если мне понадобится на форму настроек добавить галку, предполагаю это то же делается программно. В каком месте искать?

        • Василий Ханевич

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

  3. Влад

    Здравствуйте!
    Подскажите, а есть в этом курсе процесс создания внешнего отчета из типового отчета?
    Чтобы дорабатывать не в конфигурации (т.к. она на замке), а на внешнем отчете.

  4. Надежда

    Спасибо! Наконец-то сделала формирование расчетных листков по группам сотрудников (Справочник Группы сотрудников) нормально, а не добавлением вычисляемого поля и не подменой строк в группировках отчета!

  5. ismdmr

    Добрый день!

    И снова вопрос ) Дело в том, что мне как раз дали поправить Расчетный листок. И для выполнения этой задачи возникла необходимость изменить текст запроса до компоновки данных. Делаю так,

    ТекстЗапроса = НаборыДанных[0].Запрос;
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВТДвиженияВзаиморасчетов КАК ДанныеСотрудников", "МояВременнаяТаблица КАК ДанныеСотрудников");             
    НаборыДанных[0].Запрос = ТекстЗапроса;

    Текст конечно меняется, но отчет выдает ошибку:

    “В настройку отчета Расчетный листок” внесены критичные изменения.”

    Подскажите пожалуйста, кто знает как решить эту проблему.

    Спасибо.

    • Василий Ханевич

      Добрый день!
      Посмотрите, какая ошибка при этом зафиксирована в журнале регистрации – какой модуль, какая строка кода вызывают ошибку.
      Проанализируйте, в чем разница исходной временной таблицы в запросе и Вашей временной таблицы, на которую производится замена. Возможно, каких-либо полей не хватает.
      Также в 3.1.3.157 была исправлена ошибка 40000543, которая выдавала похожее сообщение об ошибке. Исправлялся текст запроса, формируемый в общем модуле.

  6. ismdmr

    Добрый день!

    1С:Предприятие 8.3 (8.3.10.2580)

    1С:ERP Управление предприятием 2

    Точка останова не срабатывает при “ПриКомпоновкеРезультата”. В настройках отладки Фоновое задание установил. Запускаю под толстым клиентом.

    Вот кусочек кода:

    #Область ОбработчикиСобытий

    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
       
    КлючВарианта = ЗарплатаКадрыОтчеты.КлючВарианта(КомпоновщикНастроек);
    ИнициализироватьОтчет();

    ...............................


    КонецПроцедуры

    #КонецОбласти
    • Василий Ханевич

      Добрый день!
      Необходимо проверить, что служба сервера “1С:Предприятие” запущена с ключом -debug. В конфигураторе в меню Отладка – Подключение включить автоматическое подключение фоновых заданий. Проверил на ЗУП 3.1 под тонким клиентом – отладка расчетного листка, формируемого в фоновом задании, в таком случае срабатывает.

      • ismdmr

        Спасибо за ответ, Василий.

        Но служба сервера с ключом -debug у меня запущена. Фоновое задание включил. Запускал и под тонким и толстым клиентами.

        Проблему удалось решить добавив свою форму в отчет. Пока не понял почему так сработало )

  7. Zladey

    Подскажите, пожалуйста где в ЗУП 3.1 шаблон запроса Расчетного листка из СКД заменятся на реальный запрос?

    • Василий Ханевич

      Добрый день!
      В отчете АнализНачисленийИУдержаний, в процедуре ПриКомпоновкеРезультата модуля объекта есть вызов ИнициализироватьОтчет, где и происходит заполнение текстов запросов наборов данных.

      • Zladey

        Спасибо. Я искал по точке останова после нажатия на кнопку “сформировать”. Оказалось, что тексты запросов заполняются ранее)

    • Юлия Толстых

      Добрый день! Проверили: видео воспроизводится полностью, значит, проблема локальная, именно на Вашем компьютере.
      Почистите кэш, если не поможет – попробуйте просмотреть видео с помощью другого браузера.

  8. Максим

    Любо слушать вашего нового лектора :-))
    говорит не быстро, слова не съедает
    а главное – комментирует все свои действия, что и зачем делает.
    Четко видно логику действий, логику размышлений.

    Очень круто.

  9. Esagila

    Здравствуйте!

    Замечательная инструкция! И именно по Зарплате Отчеты кажутся страшными. Большое спасибо!

  10. rashiid

    Добрый день!
    Публикую мобильное приложение в ISS и пытаюсь открыть через планшет – выдает ошибку доступа. При открытии через веб(это же база, но веб-публикация) запрашивает учетку ОС. Ввожу и база открывается в браузере.
    Собственно вопрос, как получить доступ для мобильного приложения?

    • Юлия Толстых

      Добрый день, Рашид!
      В этой ветке мы отвечаем только на вопросы по содержанию статьи, консультации на все темы, касающиеся 1С мы не оказываем.
      Вы можете получить ответ на вопрос в рамках Мастер-группы после покупки соответствующего курса: http://курсы-по-1с.рф/1c-v8/1c-mobile-2016/

  11. kukuepta

    неужели 1сники настолько отупели, что не могут в отладку? пичалька. напомнило мне, как я учил студента обновлять “настроенные” базы 6 лет назад.

  12. Владислав

    изменения внесены в 3х местах: скд, макет и формирование выходного файла.
    после обновления все придется в 3х местах восстанавливать.
    по моему гораздо практичнее при выводе области шапки макета определить значение поля и вывести – будет 4-5 строчек кода, зато в одном месте

    • Евгений Гилев (Мастер-тренер)

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

      Поэтому работа с изменением схемы компоновки данных обязательна в этом видео.

      • Василий Ханевич

        Дополню комментарий Евгения.
        Я так понял, что предлагается для каждого расчетного листка по каждому сотруднику отдельно получать дату приема на работу. Т.е. получается запрос в цикле вместо того, чтобы получить все данные одним запросом. Это может быть не оптимально с точки зрения производительности на больших объемах данных.

  13. Сергей

    мда… приехали, что бы добавить в отчет простейшее поле, нужно изгаляться так, что мама не горюй… 1С просто “браво”!

    • nike

      Да ладно вам! Обратная сторона медали этого – рост стоимости услуг технаря, который это поле добавляет. Все привыкли, что доработка в 1С это тяп-ляп на коленке за 15 минут. Клиент как рассуждает – да что там делать, это же просто вывод одного поля в отчет, за что час оплаты??? А вы ему ссылку на это видео, с комментарием, вот, посмотрите, подобная задача, лектор почти полчаса возился! А у нас отчет сложнее, поэтому оценка работы – 1 час и ни минутой меньше. ;)
      Надо уже избавлять клиентов от стереотипа, что 1С это дешево. По сравнению с SAP да, дешево (если это не внедрение ERP). А так вполне себе серьезные деньги!
      Одно поле – один час, десять полей – червончик. Да еще и обновление потом делать, дабы сохранить важные изменения в коде. :))))

  14. Оксана

    Здравствуйте.
    Видео недоступно ни из какого браузера(((
    Помогите пожалуйста.

    • Насипов Фарит

      Возможно, что есть блокировка на уровне провайдера / политик безопасности / настроек роутеров и много чего еще.

      Технически видео доступно без ограничений и имеет более 2000 просмотров. Что мешает конкретно в вашей ситуации – нужно смотреть на месте.

      Возможно, решением является просмотр просто из другого места.

    • Насипов Фарит

      Что-то с браузером. Либо скрипт блокируется, либо закешировалось что-то и конфликтует.
      Шаг 1 – зачистить кеш, проверить. Шаг 2 – проверить в другом браузере.

  15. Александр

    Может лучше сделать функцию в общем модуле, в которой будет возвращаться дата приема? По крайне мере обновлять будет легче.

    • Василий Ханевич

      Добрый день!
      Как вариант можно вообще не изменять типовой отчет. А создать свой внешний отчет, который решает задачу пользователя. И подключить его в конфигурацию, загрузив в справочник дополнительных отчетов. Так тоже можно решить вопрос с удобством обновлением.

  16. Алексей

    Добрый день.

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

    • Василий Ханевич

      Добрый день!
      В тексте запроса набора данных действительно можно потерять добавленные комментарии при повторном обращении к конструктору запроса, поскольку конструктор запроса не работает с комментариями в тексте запроса.
      А для выявления отличий в схемах компоновки данных (макетах) можно воспользоваться возможностями функционала сравнения-объединения. Можно сформировать отчет о сравнении объектов, в котором графически будут отмечены различия:
      Сравнение-объединение

      • Roman_Ziborov

        Вот как раз отсутствие такого инструмента сравнения непосредственно из окна обновления мешает активно работать с типовыми отчетами на СКД. Просто констатация факта.

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

        • Василий Ханевич

          Я открывал отчет о сравнении объектов непосредственно из окна сравнения-объединения конфигураций:
          Отчет о сравнении
          Как вариант – можно реализовать внешний отчет, не изменяя типовой объект, и подключить его в режиме “1С:Предприятие”. Тогда и обновлять конфигурацию проще будет.

  17. GolD

    Хорошее видео. Причем те, кто планирует поддерживать ЗУП 3.0 и тем более сдавать по нему специалиста, должен хорошо изучить этот “финт” конфигурации с запросом-шаблоном, который потом дорабатывается в общих модулях – задачи на знание этой особенности на экзамене будут обязательно.

  18. Александр

    Здравствуйте, уважаемые Сенсэ!
    Есть купленный курс, но не активировал его, т.к. времени не было. Вот дождался второго потока.
    Мои действия, чтобы на него попасть: активировать токен 13-14 июля?

    • Евгений Гилев (Мастер-тренер)

      Добрый день!

      Активируйте токен с 14 июля, причем это можно сделать прямо сейчас.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.