Пример использования СКД и данных расшифровки на мобильной платформе

12.03.19

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

СКД в мобильном приложении и меню действий на основе данных расшифровки (отчет, совместимый с мобильной платформой 8.3.13.45).

Файлы

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

Наименование Скачано Купить файл
пример использования СКД и данных расшифровки на мобильной платформе:
.epf 12,53Kb
4 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Большинство уже знает около 400 сравнительно честных способов использования СКД на мобильной платформе 1С и столько же методов обработки данных расшифровки. Здесь я просто собрал в один рабочий модуль некоторые из них и, возможно, это поможет кому-то, пока мобильная платформа не начнёт поддерживать метаданные типа "Отчет".

А пока она их не поддерживает, создадим Обработку (у меня она внешняя по понятным причинам) и добавим Макет типа СхемаКомпоновкиДанных. Я использовал набор данных Объект, поэтому поля пришлось добавлять вручную. Кроме того созданы два варианта настроек, которые будут выбираться на форме отчёта (обработки).

 

 

Добавим форму вот с такими реквизитами, которые затем перетащим элементами на форму (кроме Адреса данных расшифровки):

 

Поле Периодичность - это выбор 0 или 1 из списка значений "0-Месяц,1-Квартал". Кнопки Просмотр и Печать используют соответствующие команды Табличного документа, а кнопку Сформировать и команду для неё в Обработке придётся сделать самостоятельно. У меня это одноимённая команда "Сформировать", которая запускает на клиенте процедуру "Сформировать"и так далее, до процедуры СформироватьНаСервере

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

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

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных , ДанныеРасшифровки);

	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	
	// после Вывода помещаем Данные расшифровки во временное хранилище
	// и записываем адрес в реквизит АдресДанныхРасшифровки
	// лишнее из хранилища удаляем
	АдресДанныхРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки,УникальныйИдентификатор);
	УдалитьИзВременногоХранилища(АдресСхемы);	
	
	// далее некоторые манипуляции с оформлением отчета
	ШрифтЗаголовка = Новый Шрифт(,12,Истина);
	ЦветЗаголовка = Новый Цвет(100,100,100);
	НайденЗаголовок = ДокументРезультат.НайтиТекст("Продажи номенклатуры со складов по периодам");
	Если НайденЗаголовок <> Неопределено Тогда
		НайденЗаголовок.Шрифт = ШрифтЗаголовка;
		НайденЗаголовок.ЦветТекста = ЦветЗаголовка;
	КонецЕсли;
	
	ШрифтФильтра = Новый Шрифт(,9,Ложь);
	ЦветФильтра = Новый Цвет(100,100,100);
	ОбластьФильтра = ДокументРезультат.Область("R3C1");
	ОбластьФильтра.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
	ОбластьФильтра.Объединить();
	ОбластьФильтра.Шрифт = ШрифтФильтра;
	ОбластьФильтра.ЦветТекста = ЦветФильтра;
	ОбластьФильтра.Текст = "Номенклатура: " + ?(ЗначениеЗаполнено(Номенклатура),СокрЛП(Номенклатура),"Все")+ "; " +
							"Склад: " + ?(ЗначениеЗаполнено(Склад),СокрЛП(Склад),"Все");
	
	ДокументРезультат.ПоказатьУровеньГруппировокСтрок(1);
	ДокументРезультат.АвтоМасштаб = Истина;
	
КонецПроцедуры

 

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

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

 

Здесь я сначала получаю на сервере МенюРасшифровки, которая вызвала событие:

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

 

А после того, как пользователь выбрал из меню какой-то пункт, этот выбор обрабатывается в процедуре ВыборРасшифровкиПродаж

 

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

 

Вот и всё. Посмотреть как это работает, можно на конфигурации УТ 11 или любой другой, где есть Справочники "Номенклатура, Склады", регистр ТоварыНаСкладах и Документ РасходныйОрдерНаТовары. Ну или адаптировать запрос. 

 

 

В мобильном приложении это будет выглядеть примерно так (конфигурация другая, но методы в отчёте аналогичные):

 

 

Вступайте в нашу телеграмм-группу Инфостарт

мобильная платформа СКД расшифровка обработка отчет

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    252565    1398    421    

1149

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    6057    321    shapa_pro    25    

69

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    17924    ovetgana    112    

110

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    10477    krasnoshchekovpavel    5    

68

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    9946    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    16222    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    13854    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    10560    AlexeyPROSTO_1C    1    

32
Для отправки сообщения требуется регистрация/авторизация