10 примеров программной работы с расшифровкой отчетов на СКД

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

Увидел в отчете перекос в запасах по позиции?

Кликнул в ячейку, сказал “Выровнять” – и 1С сама:

1. нашла или создала документ перемещения
2. добавила в него эту номенклатуру в количестве, достаточном для распределения пропорционально темпам списания
3. обновила отчет с новыми цифрами “как будет”..

Наглядно, удобно, как должно быть…

Это красивая история для любого разработчика/внедренца, когда вся компания с удовольствием пользуется твоей разработкой. Особенно, если ты сам работаешь внутри компании :)

Один из механизмов для этого – расшифровки, на которые мы устанавливаем свои дополнительные действия:

  • Клиенты видят их в типовых конфигурациях и привыкли к ним, часто пишут прямо в требованиях “по аналогии с УТ повесить на ячейку отчета следующие действия…”
  • Платформа позволяет реализовывать любую логику и делать то, чего в типовых просто нет.

В общем, сейчас поговорим об инструментах, которые позволяют создать уникальные и в то же время удобные доработки в отчеты, которые резко повышают их ценность:

  • Добавлять в отчеты расшифровки «как в типовых конфигурациях»
  • Реализовывать нетиповые расшифровки, которые будут более полезными для клиентов.

Поехали, там красивое :)

И всего 45 минут, как в школе…

Видео № 1. Что такое расшифровка отчетов на СКД и какие объекты встроенного языка для этого используются

Ключевые моменты видео:

0:32 — стандартная расшифровка отчетов на СКД
1:26 — варианты расшифровки отчетов
3:01 — в каких случаях может потребоваться программная расшифровка отчета
3:26 — обязательное условие для работы расшифровки
3:49 — реквизиты формы отчета, необходимые для работы расшифровки
4:51 — событие ОбработкаРасшифровки
5:46 — изучение объектов, необходимых для программной работы с расшифровкой при помощи отладчика
9:09 — схема взаимосвязи объектов, необходимых для программной работы с расшифровкой

Видео № 2. Как обработать щелчок правой кнопки мыши в отчете на СКД

Ключевые моменты видео:

0:21 — как переопределить действия при нажатии правой кнопки мыши на ячейке отчета
0:35 — событие ОбработкаДополнительнойРасшифровки
1:04 — программный код для обработки дополнительной расшифровки

Видео № 3. Как реализовать расшифровку показателя в отчете при помощи другого отчета

Ключевые моменты видео:

0:25 — программный код для расшифровки отчета при помощи другого отчета
0:54 — программное открытие формы отчета с отбором
1:07 — параметры формы, предоставленные расширением формы клиентского приложения для отчета

Видео № 4. Почему может не работать расшифровка при программной компоновке отчета в процедуре ПриКомпоновкеРезультата

Ключевые моменты видео:

0:26 — демонстрация отчета, в котором не работает расшифровка
0:50 — изучение процедуры ПриКомпоновкеРезультата
1:04 — в каких случаях может потребоваться самостоятельная компоновка отчета
1:23 — использование параметра ДанныеРасшифровки

Видео № 5. Как программно сформировать собственное меню для расшифровки показателей отчета

Ключевые моменты видео:

0:12 — демонстрация использования меню
0:49 — создание объекта ОбработкаРасшифровкиКомпоновкиДанных
1:57 — описание процедуры, которая будет вызвана при выборе пользователем действия в меню
2:31 — описание действий, которые будут добавлены в формируемое меню
4:01 — обработка действия, выбранного пользователем в меню

Видео № 6. Как программно сформировать вложенные подменю для расшифровки показателей отчета

Ключевые моменты видео:

0:13 — демонстрация использования подменю при расшифровке отчета
0:36 — программный код для формирования подменю
0:58 — формирование структуры меню, содержащего подменю

Видео № 7. Как программно обработать действие Отфильтровать при работе с расшифровкой

Ключевые моменты видео:

0:10 — детализация отчета по остаткам товаров до складов
0:40 — анализ программного кода
1:58 — программная модификация настроек компоновки, используемых для расшифровки отчета
2:28 — передача параметра Расшифровка в открываемую форму отчета

Видео № 8. Как реализовать расшифровку в форме самого отчета без открытия отдельных окон

Ключевые моменты видео:

0:21 — демонстрация расшифровки отчета в форме этого же отчета
1:27 — обработка выбранного пользователем действия расшифровки
2:21 — обработка настроек компоновки, переданных в качестве параметра при расшифровке
2:52 — компоновка отчета с новыми настройками

Видео № 9. Как программно сформировать разные меню для разных полей отчета

Ключевые моменты видео:

0:15 — демонстрация отчета с разными меню расшифровки для разных полей
0:50 — настройка макетов в схеме компоновки
1:52 — программное формирование различных меню расшифровки для разных полей отчета
2:23 — получение структуры, содержащей поля расшифровки
3:56 — обработка выбранного пользователем действия расшифровки

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

Видео № 10. Как в расширении для УТ 11.4 реализовать расшифровку ведомости по товарам на складах при помощи прайс-листа

В видео покажем, как выполнить расшифровку отчета при помощи другого отчета в конфигурации 1С:Управление торговлей версии 11.4. За счет того, что она базируется на БСП, а не написана с нуля, есть нюансы. Чтобы конфигурация осталась типовой и могла обновляться автоматически, доработка выполнена при помощи расширения для УТ 11.4.13.136.

Урок будет полезен тем, кто работает с типовыми решениями 1С. В ERP 2 и КА 2 задача будет решаться так же, как в УТ 11. Также код, представленный в видео, можно использовать как образец для конфигураций, в которых внедрена БСП третьей редакции. Естественно, отчеты или процедуры в них будут называться по-другому, но принцип доработки останется тот же.

Приятного просмотра!

Ключевые моменты видео:

0:15 — расшифровка ведомости расчетов с клиентами при помощи карточки расчетов в УТ 11
1:25 — работа с общей формой ФормаОтчета, поиск процедуры, выполняющей обработку расшифровки
2:14 — анализ программного кода для расшифровки различных отчетов в УТ
2:53 — образец кода, описывающего параметры расшифровки
4:06 — расширение, при помощи которого выполнена доработка
4:25 — использование аннотации ИзменениеИКонтроль
5:28 — проверка работоспособности расширения в пользовательском режиме

Чтобы быстрее разобраться, как выполнить расшифровку в УТ 11, КА 2 и ERP 2, скачайте расширение из видеоурока:

Не пропустите новый курс (по специальной цене для первого потока)!

Коллеги, запускаем новый курс по EDT и Git, первый курс в серии курсов по DevOps.

Если Вы тимлид / руководитель отдела разработки / работаете в команде из 5+ человек над одним проектом / планируете перейти в ведущие франчайзи не простым разработчиком – рекомендуем внимательно его посмотреть:

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

  1. Дмитрий

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

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

      Добрый день!
      Рад, что материал оказался полезным.

      Чтобы можно было редактировать значение в ячейке табличного документа, нужно включить для ячейки свойство СодержитЗначение:
      СодержитЗначение
      И реализовать обработчик события ПриИзмененииСодержимогоОбласти.

      • Дмитрий

        А есть ли возможность получить индекс, который попадает в параметр Расшифровка не обращаясь к процедуре РезультатОбработкаРасшифровки?
        Например, мне надо получить значения строки и колонки для ячейки в процедуре ПриИзменении….

  2. в зависимости от ресурса

    А как реализовать расшифровку для разных ресурсов? К примеру есть отчет в котором группировка – вид номенклатуры, а разные ресурсы – это количество различной номенклатуры уже сгруппированной по каким то условиям. И нужно по нажатию на расшифровку ресурса открывать другой отчет (единый для всех ресурсов) но в качестве отбора использовать именно номенклатуру по которой этот ресурс рассчитался?

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

      Добрый день!
      Прикрепил пример подобной расшифровки для демо-конфигурации Управляемое приложениеОстаткиТоваровНаСкладах_СобственноеМенюРасшифровки.zip

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

      Пример программного кода:

      &НаКлиенте
      Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
         
          СтандартнаяОбработка = Ложь;
         
          ПоляРасшифровки = ПолучитьЗначениеРасшифровки(Расшифровка);
         
          ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));
         
          ОписаниеОповещения = Новый ОписаниеОповещения("ПоказатьВыборДействияЗавершение", ЭтаФорма);
         
          ДоступныеДействия = Новый Массив;
          ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
         
          ДополнительныеПунктыМеню = Новый СписокЗначений;
          Если ПоляРасшифровки.Свойство("КоличествоПриход") Тогда
              ДополнительныеПунктыМеню.Добавить("Открыть расшифровку Прихода");
          ИначеЕсли ПоляРасшифровки.Свойство("КоличествоРасход") Тогда
              ДополнительныеПунктыМеню.Добавить("Открыть расшифровку Расхода");
          КонецЕсли;
         
          ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещения, Расшифровка, ДоступныеДействия, ДополнительныеПунктыМеню);
         
      КонецПроцедуры

      &НаСервере
      Функция ПолучитьЗначениеРасшифровки(Расшифровка)
         
          Структура = Новый Структура;
         
          ДанныеРасшифровкиКомпоновки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
          ПоляРасшифровки = ДанныеРасшифровкиКомпоновки.Элементы.Получить(Расшифровка).ПолучитьПоля();
         
          Для каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
              Структура.Вставить(ПолеРасшифровки.Поле, ПолеРасшифровки.Значение);
          КонецЦикла;
         
          Возврат Структура;
         
      КонецФункции

      &НаКлиенте
      Процедура ПоказатьВыборДействияЗавершение(ВыполненноеДействие, ПараметрВыполненногоДействия, ДополнительныеПараметры) Экспорт

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

      КонецПроцедуры
      • Васильев Александр

        Василий Ханевич, приветствую.

        Так как до значений группировок то адекватно добраться?
        Который из ресурсов расшифровывать можем определить и без макета.
        Пробую рекурсивно через ПолучитьРодителей(), но там такая каша возвращается.

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

          Добрый день!
          Я бы именно через ПолучитьРодителей пробовал сделать. В курсе по СКД было практическое задание 20.1 на эту тему, там как раз через рекурсию и было реализовано, попробуйте код из обработки посмотреть.

  3. Алия

    Добрый день! Весьма информативные видео, спасибо!
    Подскажите пожалуйста, используя последнее видео дорабатываю расшифровку отчета “ОстаткиИДоступность” отчетом “СебестоимостьТоваров”. И столкнулась с такой проблемой:
    1. Мне необходимо, что бы при расшифровке в отчете по себестоимости период был “пустым”, т.е. за весь период, но в отчете “Остатки и доступность” такого параметра нет, поэтому при расшифровке устанавливается период “по – умолчанию”, т.е. текущий месяц. Если менять настройки в процедуре “ПриКомпановкеРезультата” (в пользовательских настройках), то это же применяется ко всему варианту, а мне нужно, что бы только при расшифровке.
    2. Так же у варианта отчета по себестоимости в структуре заданы группировки, но у одной из них “Использование” – ложь, а мне необходимо изменить на “Истина”.
    Таким образом, при изменении параметра “Период” и настройки структуры в процедуре “ПриКомпоновкеРезультата” становится невозможным пользователю изменить эти настройки Можно ли как-то задавая параметры отчета решить эти 2 проблемы?

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

      Добрый день!
      В типовой УТ в общем модуле ОтчетыУТКлиентПереопределяемый есть процедура ОбработкаРасшифровки с примером, который может быть Вам полезен:

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

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

  4. Алексей Лосев

    Доброго времени!
    Сделал, чтобы расшифровка открывала этот же отчет из которого она вызывается, но в качестве параметра указал другой вариант отчета (другой вариант схемы компановки данных – не основной). И возникла проблема, после использования расшифровки следующее открытие формы отчета приводит к тому, что вариант отчета там становится уже не Основной, а тот, что используется в расшифровке.
    Вопрос: можно ли сделать так, чтобы при открытии формы пользователем вариант отчета автоматически становился Основным, чтобы пользователь не выбирал его вручную? Выбирать другой вариант отчета пользователю нет смысла, так как он создавался исключительно для использования расшифровки.
    Ну или может быть есть какой-то другой вариант решения задачи? Например, сделать так, чтобы НеОсновной формы вообще не было в списке выбора, а использовалась она только программно (через Расшифровку).

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

      Добрый день!
      Могу порекомендовать подход, использующийся в типовых конфигурациях. Пользователь работает не с самими отчетами, а с панелями отчетов, в которых размещены варианты отчетов (в УТ раздел Продажи – Отчеты по продажам). Т.е. пользователь открывает не просто отчет, а конкретный сохраненный вариант отчета.
      При этом в типовых конфигурациях варианты, использующиеся только для расшифровки, не отображаются в панели отчетов.

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

  5. Екатерина

    Спасибо за такие хорошие видео)

    Однако при изменении обработки дополнительной расшифровки в меню по клику правой кнопки мыши пропадают кнопки “Копировать”, “Выделить все”, “Искать везде” и “Свойства”. Не могли бы вы подсказать, как их вернуть?

  6. Александр Крынецкий

    Классные видео! Василий, вы молодец!

    А можно ли несколько доработать структуру отчета, открываемую при расшифровке? Например, при расшифровке остатка товара открыть расшифровку отчета, в которой будет структура Склад –

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

      Добрый день!
      Спасибо!

      Да. Для этого можно подготовить вариант отчета с нужной структурой. И при открытии формы отчета указать, какой именно вариант отчета требуется:

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

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

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

Вход на сайт

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

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

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

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

E-mail или логин

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