Отчет на СКД 8.2: Ответственные по группам номенклатуры

24.07.14

Разработка - СКД

Интересная реализация нестандартного условия в запросе на СКД. Сложный запрос, виртуальные таблицы, связи по левому соединению, статический параметр, конструкция ВЫБОР, необязательное условие и это все для реализации обратного отбора! Статья предназначена для начинающих программистов, вникающих в СКД и в суть запросов 1С, хотя и опытные программисты могут почерпнуть знания для реализации нестандартных задач.

Скачать файлы

Наименование Файл Версия Размер
ОтветственныеПоГруппамНоменклатуры8.2
.erf 10,02Kb
5
.erf 10,02Kb 5 Скачать

И так с чего начинается реализация задачи? Конечно же, с постановки ТЗ!

ТЗ или техническое задание:

1. Написать отчет на СКД для отображения ответственных инженеров по группам номенклатуры.

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

Что имеем:

Под рукой у нас конфигурация УСО 8.2 на обычном интерфейсе, УСО можно принять за конфигурацию УПП, т.к. они очень похожи.

Для удобства разработки была внедрена Подсистема "Инструменты разработчика", за что отдельное спасибо автору разработки. Рекомендую ознакомиться с её функционалом, заметно облегчит вам жизнь разработчика.

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

Решение задачи:

Теперь имея все карты на руках, смело приступаем к разработке отчета!

1 часть ТЗ реализуется достаточно просто, а вот над 2 частью пришлось повозиться, что и послужило результатом для публикации.

Задачу разбил на 5 пакетов запросов. И так по порядку.

Первый пакет запроса:

ВЫБРАТЬ

Номенклатура.Ссылка

ПОМЕСТИТЬ ВТГруппыНоменклатуры

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

Номенклатура.ЭтоГруппа = ИСТИНА

;

////////////////////////////////////////////////////////////////////////////////
Этот запрос создает виртуальную таблицу, в которую загрузим группы номенклатуры.

Второй пакет запроса:

ВЫБРАТЬ

ОтветственныеНаГруппах.ГруппаИерархия,

ОтветственныеНаГруппах.Должность,

ОтветственныеНаГруппах.Сотрудник

ПОМЕСТИТЬ ВТОтветственныеНаГруппах

ИЗ

(ВЫБРАТЬ

ВТГруппыНоменклатуры.Ссылка КАК ГруппаИерархия,

НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Должность КАК Должность,

НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Сотрудник КАК Сотрудник

ИЗ

ВТГруппыНоменклатуры КАК ВТГруппыНоменклатуры

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НазначениеОтветственныхГруппамНоменклатуры.СрезПоследних КАК НазначениеОтветственныхГруппамНоменклатурыСрезПоследних

ПО ВТГруппыНоменклатуры.Ссылка = НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Группа

ГДЕ

НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Действующий = ИСТИНА) КАК ОтветственныеНаГруппах

;

////////////////////////////////////////////////////////////////////////////////

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

Третий пакет запроса:

ВЫБРАТЬ

ВТОтветственныеНаГруппах.ГруппаИерархия КАК ГруппаНоменклатуры,

ВТОтветственныеНаГруппах.Должность,

ВТОтветственныеНаГруппах.Сотрудник

ПОМЕСТИТЬ ВТВсе

ИЗ

ВТГруппыНоменклатуры КАК ВТГруппыНоменклатуры

ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОтветственныеНаГруппах КАК ВТОтветственныеНаГруппах

ПО ВТГруппыНоменклатуры.Ссылка = ВТОтветственныеНаГруппах.ГруппаИерархия

;

////////////////////////////////////////////////////////////////////////////////

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

Первая часть ТЗ решена и можно было бы на этом закончить, но была поставлена 2 часть и придется попотеть...

Четвертый пакет запроса:

ВЫБРАТЬ

НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Группа,

НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Должность,

НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Сотрудник

ПОМЕСТИТЬ ВТБезОтветсвенного

ИЗ

РегистрСведений.НазначениеОтветственныхГруппамНоменклатуры.СрезПоследних КАК НазначениеОтветственныхГруппамНоменклатурыСрезПоследних

ГДЕ

НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Действующий = ИСТИНА

{ГДЕ

(НазначениеОтветственныхГруппамНоменклатурыСрезПоследних.Сотрудник <> &СотрудникНаУвольнение)}

;

////////////////////////////////////////////////////////////////////////////////

Запрос очень похож на кусок из 2 пакета, но тут мы добавили необязательное условие { }. Эта часть кода обработается, если будет задан параметр &СотрудникНаУвольнение, что очень кстати. Т.к. первая часть ТЗ не предполагает его использование.

Пятый пакет запроса (финальный):

ВЫБРАТЬ РАЗЛИЧНЫЕ

ВТВсе.ГруппаНоменклатуры,

ВЫБОР

КОГДА &ОтборНаУвольнение

ТОГДА ВТБезОтветсвенного.Должность

ИНАЧЕ ВТВсе.Должность

КОНЕЦ КАК Должность,

ВЫБОР

КОГДА &ОтборНаУвольнение

ТОГДА ВТБезОтветсвенного.Сотрудник

ИНАЧЕ ВТВсе.Сотрудник

КОНЕЦ КАК Сотрудник

ИЗ

ВТВсе КАК ВТВсе

{ЛЕВОЕ СОЕДИНЕНИЕ ВТБезОтветсвенного КАК ВТБезОтветсвенного

ПО ВТВсе.ГруппаНоменклатуры.Ссылка = ВТБезОтветсвенного.Группа.Ссылка}

{ГДЕ

(ВТВсе.Сотрудник = &СотрудникНаУвольнение)}

////////////////////////////////////////////////////////////////////////////////

Как сразу видим, при выборе таблицы используется метод РАЗЛИЧНЫЕ, он потребовался, чтобы убрать повторения записей. Затем используется конструкция: 
ВЫБОР КОГДА<Условие с результатом типа Булево>
  ТОГДА<Результат в случае если Истина>
  ИНАЧЕ<Результат в случае если Ложь>
КОНЕЦ 
В запросах работает как ЕСЛИ. Она поможет нам формировать обычный отчет первой части ТЗ, а при установке параметров реализовать 2 часть.
Важным нюансом тут было, что потребовался дополнительный параметр &ОтборНаУвольнение, который помог включить в работу наше условие по &СотрудникНаУвольнение. Также тут стоит упомянуть, что каждая колонка требует отдельной конструкции ВЫБОР, а также после КОНЕЦ  нужно задать псевдоним (пример: КАК Сотрудник) и не забываем разделять конструкции знаком ",".
После того как пользователь назначит параметру 
&ОтборНаУвольнение ИСТИНА и назначит &СотрудникНаУвольнение сотрудника, наш отчет выдаст вместо стандартного отбора по сотруднику отбор номенклатурной группы, но с обратным эффектом. Будет выведена номенклатурная группы &СотрудникНаУвольнение и сотрудники, которые параллельно с ним назначены на те же позиции, а если таких нету, то пустые поля!

Все задача успешна решена!

P.S. Отчет создан для решения конкретно поставленной задачи и выложен для ознакомления, а также конструктивной критики!








Запрос СКД виртуальные таблицы статический параметр конструкция ВЫБОР необязательное условие в запросе

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    122290    673    389    

716

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    4051    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2006    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8169    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    4662    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5814    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    6722    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

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

01.09.2023    4531    KVIKS    15    

80
Оставьте свое сообщение