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

24.07.14

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ОтветственныеПоГруппамНоменклатуры8.2
.erf 10,02Kb
5
5 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

Что имеем:

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

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

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

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

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

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

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

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

ВЫБРАТЬ

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

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

ИЗ

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

ГДЕ

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

;

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

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

ВЫБРАТЬ

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

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

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

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

ИЗ

(ВЫБРАТЬ

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

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

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

ИЗ

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

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

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

ГДЕ

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

;

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

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

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

ВЫБРАТЬ

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

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

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

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

ИЗ

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

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

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

;

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

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

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

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

ВЫБРАТЬ

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

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

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

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

ИЗ

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

ГДЕ

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

{ГДЕ

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

;

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

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

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

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

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

ВЫБОР

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

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

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

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

ВЫБОР

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

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

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

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

ИЗ

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

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

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

{ГДЕ

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

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

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

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

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








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

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159425    872    399    

861

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8684    implecs_team    6    

47

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

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

3 стартмани

05.02.2024    6996    56    obmailok    21    

79

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

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

1 стартмани

31.01.2024    3148    5    Yashazz    1    

34

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

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

2 стартмани

11.12.2023    10804    23    John_d    25    

124

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

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

05.12.2023    8017    PROSTO-1C    15    

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