Вывод товаров в СКД как на весах в Ашане

28.01.19

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

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

Файлы

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

Наименование Скачано Купить файл
Вывод товаров в СКД как на весах в Ашане:
.epf 12,16Kb
9 3 000 руб. Купить

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

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

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

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

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

Функция ПолучитьТЗНоменклатура()

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

КонецФункции

Далее стандартный программный вывод СКД

Процедура ВывестиНоменклатуру()

    ОбработкаОб = РеквизитФормыВЗначение("Объект");
	
    СхемаКомпоновкиДанных = ОбработкаОб.ПолучитьМакет("Номенклатура");

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

    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

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

    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	
КонецПроцедуры

Создаем макет СКД, указываем поля нашего исходного запроса, плюс "НомерСтроки" и "НомерКолонки", источник - из внешнего набора

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

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

Данная схема выглядит довольно коряво, но тем не менее, она работает. Ждем, когда в механизмы платформы добавят вывод плиткой в "штатном" режиме.

Добавлена работа с макетами СКД, чтобы красиво обвести картинку и название товара общей рамкой. При этом корректно работает расшифровка по ресурсу. Что интересно - если тип ресурса - ссылка, то через элементы расшифровки значение расшифровки соответствует этой ссылке. А если тип ресурса - число, то значение расшифровки в элементе расшифровки - null.

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

Протестировано на платформе 8.3.11.3034

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

СКД вывод плиткой вывод картинок в СКД программная работа с СКД работа с расшифровкой СКД

См. также

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

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

16500 руб.

02.09.2020    257397    1425    421    

1163

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

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

29.01.2026    6632    343    shapa_pro    27    

69

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

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

29.10.2025    19248    ovetgana    112    

112

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

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

01.07.2025    11155    krasnoshchekovpavel    7    

68

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

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

10.04.2025    10703    Neti    0    

41

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

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

27.02.2025    16638    ovetgana    50    

93

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

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

24.12.2024    14307    Akcium    17    

46

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

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

20.08.2024    11187    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. 🅵🅾️🆇 527 23.05.18 14:53 Сейчас в теме
Здорово.
Но всеже, как мне кажется, для такой задачи лучше использовать HTML/CSS, это добавит адаптивности и универсальности, хоть http запросом получай отчет :3
citicat; Vanch90; Soloist; +3 1 Ответить
2. RustIG 1954 23.05.18 15:31 Сейчас в теме
(1) вы решали когда-нибудь подобные задачи?
на чем основывается ваш совет? на личном опыте?
7. 🅵🅾️🆇 527 23.05.18 16:45 Сейчас в теме
(2)
Тегу <IMG> присвоить:
http://htmlbook.ru/css/float для того, чтоб плитки шли одна за другой и переносились на следующую строку, когда текущая заполнится.

Опционально размер плитки задать не в пикселях, а в процентах, em, vw.
Ну и сверстать как душе угодно, выводить всплывающие названия на картинках, обрабатывать клики - что угодно.

Ну и напоминаю про:
<MET A HTTP-EQUIV='X-UA-Compatible' CONTENT='text/html;IE=11'>


Подавать можно через модуль с включенными повторно возвращаемыми значениями, для скорости.

Вот и все решение, если вкратце:
<ht ml>
<head>
	<st yle>
		img {
			background: url(my_url.png) no-repeat center center #fff;
			width: 250px;
			height: 250px;
			float: left;
		}
	</style>
</head>
<body>
	<img/><img/><img/><img/><img/><img/><img/>
	<img/><img/><img/><img/><img/><img/><img/>
	<img/><img/><img/><img/><img/><img/><img/>
	<img/><img/><img/><img/><img/><img/><img/>
	<img/><img/><img/><img/><img/><img/><img/>
</body>
</html>
Показать


PS: адаптивность наше все, без нее любой кроссплатформенный интерфейс - не интерфейс.
Табличный документ 1с (если, конечно, мы говорим не про вывод на печать) тут не годиться.
Прикрепленные файлы:
test.html
nbelyaev; PetrPan; beefit; +3 Ответить
8. пользователь 24.05.18 05:43
Сообщение было скрыто модератором.
...
3. RustIG 1954 23.05.18 15:34 Сейчас в теме
(0) слишком мудрено решили задачу!
я бы упростил решение до вывода картинок в табличный документ без СКД - обычными методами Табличного документа.
не понял, в чем соль везде и повсюду использовать СКД?
СКД придумали для пользователей - чтобы они имели свой интерфейс настроек...
Serega-artem; Flover; +2 1 Ответить
4. Kutuzov 755 23.05.18 15:44 Сейчас в теме
(3) Лень прописывать формирование макета. А на СКД оно как-то все само...
atroxa; Jimbo; +2 Ответить
5. RustIG 1954 23.05.18 15:46 Сейчас в теме
(4) сколько часов потратили на свою плитку?
есть типовые обработки для печати ценников - в виде вашей плитки
осталось вместо описания - картинки подставить
6. Kutuzov 755 23.05.18 15:55 Сейчас в теме
(5) Спасибо за еще один метод решения вопроса
wowik; Чародей; +2 Ответить
9. Serj1C 484 24.05.18 07:22 Сейчас в теме
Запросом вполне можно было получить номер колонки и строки, без предварительного заполнения запросом и циклом.
А тема вывода изображения как-то не раскрыта...
10. Kutuzov 755 24.05.18 08:09 Сейчас в теме
11. dusha0020 1125 05.07.18 12:00 Сейчас в теме
(9) Согласен. Как-то так:
"
|ВЫБРАТЬ
|	Номенклатура.Ссылка,
|	1 КАК Единичка
|ПОМЕСТИТЬ НоменклатураПоОтбору
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаОтбор)
|	И Номенклатура.ЭтоГруппа = ЛОЖЬ
|
|СГРУППИРОВАТЬ ПО
|	Номенклатура.Ссылка
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	НоменклатураПоОтбору.Ссылка,
|	ВЫРАЗИТЬ((СУММА(ВложенныйЗапрос.Единичка) /&КвоСтолбцов - РазностьДат(ДатаВремя(1,1,1,0,0,0),ДобавитьКДате(ДатаВремя(1,1,1,0,0,0),СЕКУНДА,СУММА(ВложенныйЗапрос.Единичка)/&КвоСтолбцов-0.000000000001),СЕКУНДА)) * &КвоСтолбцов КАК ЧИСЛО(5,0)) КАК НомерСтолбца,
|	РазностьДат(ДатаВремя(1,1,1,0,0,0),ДобавитьКДате(ДатаВремя(1,1,1,0,0,0),СЕКУНДА,СУММА(ВложенныйЗапрос.Единичка)/&КвоСтолбцов-0.000000000001),СЕКУНДА)+1 КАК НомерСтроки
|ИЗ
|	НоменклатураПоОтбору КАК НоменклатураПоОтбору
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
|			НоменклатураПоОтбору.Ссылка КАК Ссылка,
|			НоменклатураПоОтбору.Единичка КАК Единичка
|		ИЗ
|			НоменклатураПоОтбору КАК НоменклатураПоОтбору) КАК ВложенныйЗапрос
|		ПО НоменклатураПоОтбору.Ссылка >= ВложенныйЗапрос.Ссылка
|
|СГРУППИРОВАТЬ ПО
|	НоменклатураПоОтбору.Ссылка,
|	ВложенныйЗапрос.Единичка
|";
Показать
12. Kutuzov 755 05.07.18 13:09 Сейчас в теме
(11) Когда элегантность решения сильно мешает простоте (понимания кода), я выбираю простоту :)
13. dusha0020 1125 05.07.18 13:40 Сейчас в теме
(12) Код только на вид кажется сложным. В общем-то все как у Вас реализовано, но из-за того, что в запросах 1С нельзя округлять вверх/вниз и использовать оператор "%" пришлось отсекать дробную часть через РАЗНОСТЬДАТ.
Писал для того, чтобы было понимание у читателей того, что такие задачи действительно можно решать в запросах. А уж использовать или нет - дело Ваше и их:)
14. Kutuzov 755 05.07.18 14:53 Сейчас в теме
(13) ну вообще да, глядя на ваши публикации, приведенный пример кода кажется уже не таким и сложным ;)
15. kondrat1C 55 31.07.18 14:14 Сейчас в теме
И даже если мы создаем СКД из другого макета, не основного, все равно вызывается эта процедура. Выхода тут два - либо вынести в модуль, где уже не будет перехватываться событие ПриКомпоновке, либо обработать отборы пользователя на уровне логики алгоритма


а что мешает переопределить обработку "ПриКомпоновкеРезультата" в модуле отчёта?

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

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


вот именно этот метод
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

схлопывает Настройки, ПользовательскиеНастройки и ФиксированныеНастройки.
И в результате разработчику плевать какие там отборы наложил пользователь
Для отправки сообщения требуется регистрация/авторизация