Прайс-лист в две колонки на СКД, для УТ 11.0, с описанием запроса

Опубликовал Юрий Зайцев (Yury1001) в раздел Обработки - Ценообразование, прайсы

Пример отчета на СКД: Номенклатура, Цена в две колонки. Отчет простой, без особого оформления и больше предназначен как урок для начинающих по работе с запросами на тему «Как разбить результат в запросе на несколько колонок для вывода через СКД», с описанием принципа действии.
// Набор данных Запрос состоит из нескольких временных таблиц.
// В первой «ВТ_Ном» Выбираем товары по фильтру и число 1

ВЫБРАТЬ
                Номенклатура.Ссылка,
                1 КАК Ном
ПОМЕСТИТЬ ВТ_Ном
ИЗ
                Справочник.Номенклатура КАК Номенклатура
ГДЕ
                (НЕ Номенклатура.ЭтоГруппа)
{ГДЕ
                Номенклатура.Ссылка.*}
;
 
// Во второй «ВТ_НомПП» получим номер по порядку: соединим каждый элемент первой
// таблицы со всеми элементами этой же таблицы, которые при сортировке будут равны или
// выше элемента, а число 1 просуммируем.
 
ВЫБРАТЬ
                ВТ_Ном.Ссылка,
                СУММА(ВТ_Ном.Ном) КАК НомПП
ПОМЕСТИТЬ ВТ_НомПП
ИЗ
                ВТ_Ном КАК ВТ_Ном
                               ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Ном КАК ВТ_Ном1
                               ПО ВТ_Ном.Ссылка.Наименование >= ВТ_Ном1.Ссылка.Наименование
 
СГРУППИРОВАТЬ ПО
                ВТ_Ном.Ссылка
;
 
// Дальше «ВТ_Индекс» хитрость номер один: делим номер по порядку на удвоенное число
// строк на странице и отнимаем целую часть этого же деления, функция ВЫРАЗИТЬ в этом
// случае округляет частное по математическим правилам.
// Результат формулы колеблется от -0,5 до +0,499 назовём его ПлюсМинус, (см. Рис.1 Синус Хэ)
 
ВЫБРАТЬ
                ВТ_НомПП.Ссылка,
                ВТ_НомПП.НомПП КАК НомПП,
                (ВТ_НомПП.НомПП - 1) / (&СтрокНаСтранице * 2) - (ВЫРАЗИТЬ((ВТ_НомПП.НомПП - 1) / (&СтрокНаСтранице * 2) КАК ЧИСЛО(10, 0))) КАК ПлюсМинус
ПОМЕСТИТЬ ВТ_Индекс
ИЗ
                ВТ_НомПП КАК ВТ_НомПП
;
 
// А теперь всем строкам, у которых ПлюсМинус >= 0 (первая колонка каждой страница)
// присоединим строку с номером на СтрокНаСтранице больше, (см. Рис.2 Результат)
 
ВЫБРАТЬ
                ВТ_Индекс.НомПП КАК НомПП1,
                ВТ_Индекс.Ссылка КАК Номенклатура1,
                ЦеныНоменклатурыСрезПоследних.Цена КАК Цена1,
                ВТ_Индекс1.НомПП КАК НомПП2,
                ВТ_Индекс1.Ссылка КАК Номенклатура2,
                ЦеныНоменклатурыСрезПоследних1.Цена КАК Цена2
ИЗ
                ВТ_Индекс КАК ВТ_Индекс
                               ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Индекс КАК ВТ_Индекс1
                                               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦены)}) КАК ЦеныНоменклатурыСрезПоследних1
                                               ПО ВТ_Индекс1.Ссылка = ЦеныНоменклатурыСрезПоследних1.Номенклатура
                               ПО (ВТ_Индекс.НомПП + &СтрокНаСтранице = ВТ_Индекс1.НомПП)
                               ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦены)}) КАК ЦеныНоменклатурыСрезПоследних
                               ПО ВТ_Индекс.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
                ВТ_Индекс.ПлюсМинус >= 0
 
УПОРЯДОЧИТЬ ПО
                НомПП1

 

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

Особенности этого варианта: только один тип цен и только Равно, но обязательно; количество строк подбирается пользователем; длинные наименования обрезаются; нет иерархии.

Вариант с остатками

Поменялся последний запрос в пакете: собственно просто соединение с регистром остатков для каждой из колонок.

ВЫБРАТЬ
 ВТ_Индекс.НомПП КАК НомПП1,
 ВТ_Индекс.Ссылка КАК Номенклатура1,
 ЦеныНоменклатурыСрезПоследних.Цена КАК Цена1,
 ВТ_Индекс1.НомПП КАК НомПП2,
 ВТ_Индекс1.Ссылка КАК Номенклатура2,
 ЦеныНоменклатурыСрезПоследних1.Цена КАК Цена2,
 ТоварыНаСкладахОстатки.ВНаличииОстаток,
 ТоварыНаСкладахОстатки1.ВНаличииОстаток КАК ВНаличииОстаток1
ИЗ
 ВТ_Индекс КАК ВТ_Индекс
  ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Индекс КАК ВТ_Индекс1
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦены)}) КАК ЦеныНоменклатурыСрезПоследних1
   ПО ВТ_Индекс1.Ссылка = ЦеныНоменклатурыСрезПоследних1.Номенклатура
   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Склад)}) КАК ТоварыНаСкладахОстатки1
   ПО ВТ_Индекс1.Ссылка = ТоварыНаСкладахОстатки1.Номенклатура
  ПО (ВТ_Индекс.НомПП + &СтрокНаСтранице = ВТ_Индекс1.НомПП)
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦены)}) КАК ЦеныНоменклатурыСрезПоследних
  ПО ВТ_Индекс.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
  ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, {(Склад)}) КАК ТоварыНаСкладахОстатки
  ПО ВТ_Индекс.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
ГДЕ
 ВТ_Индекс.ПлюсМинус >= 0
УПОРЯДОЧИТЬ ПО
 НомПП1

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

Наименование Файл Версия Размер
СОстаткомПрайсВ2колонки
.erf 8,20Kb
10.06.15
120
.erf 8,20Kb 120 Скачать
ПрайсЛистВДвеКолонкиСКД
.erf 7,97Kb
10.06.15
73
.erf 7,97Kb 73 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Антон (anton.fly7) 134 06.12.11 23:13 Сейчас в теме
2. Юрий Зайцев (Yury1001) 1446 06.12.11 23:38 Сейчас в теме
Спасибо, поддержка для меня сейчас важна - мои перые шаги на InfoStart.
3. Владимир Клименко (KliMich) 07.12.11 04:03 Сейчас в теме
Спасибо! В 2 колонки всегда было актуально (особенно при большой номенклатуре)!

А вот в работе сталкивался с такими проблемами:
1. Если номенклатура имеет длинное название, то во избежание "потери конца" должна выводиться "с переносом". Что приводит к изменению высоты строки... И в итоге "сформированный" лист может не вписаться в страницу.
2. А Руководство требуют прайс с учётом иерархии.

Поэтому пожелания:
1. Делить на две колонки не в запросе, а при заполнении печатной формы, используя функцию ПроверитьВывод() для программного анализа заполненности и перевода страницы.
2. Сделать вывод прайса с группами. Название групп/подгрупп выводить сразу на две колонки. А саму номенклатуру выводить слева-направо-сверху-вниз до следующей группы/подгруппы (а не так: "сначала заполняем левую колонку, а потом в правую")

P.S. Может посчитаете, что это ни к чему, но у меня руководство требовало, чтобы прайс имел "надлежащий и презентабельный" вид и формировался автоматически (без доработок) поэтому и вставали такие проблемы...
4. koroleva_ann_ (taste) 07.12.11 07:32 Сейчас в теме
пожелание: хотелось бы прайс чтоб выводился с текущими остатками по складу)) если можно))
5. Светлана Жидковская (svs_atm) 07.12.11 08:08 Сейчас в теме
Как быстро формируется прайс при большой номенклатуре?
6. Юрий Зайцев (Yury1001) 1446 07.12.11 10:48 Сейчас в теме
KliMich (3)
Если «руководство требует» наверно лучше обратиться к специалистам (франчайзи там всякие) и выполнить работы со всей ответственностью.
«Делить на две колонки не в запросе» - это конечно можно и я уже реализовывал на 7.7 http://infostart.ru/public/100627/
, однако задумка этой статьи именно урок по работе с запросами.

koroleva_ann_ (4)
«с текущими остатками по складу» - Можно, легко как в моей статье
http://infostart.ru/public/100565/
Постараюсь выбрать время и обновить.

svs_atm (5)
«Как быстро формируется» - 5000-6000 может и пару минут – это нормально.
7. Юрий Зайцев (Yury1001) 1446 07.12.11 11:00 Сейчас в теме
Да, и ещё, хотел поблагодарить alexk-is за статью ФИФО в Запросе (с пояснениями для начинающих),
которая и вдохновила меня на эту работу, СПАСИБО!
8. Eugeneer (Eugeneer) 07.12.11 11:58 Сейчас в теме
Не вижу плюсов в данном решении. Именно из за таких прайсов потом клиенты парятся и не могут понять что им делать чтобы их легко загружать в базу из экселя.
9. Ийон Тихий (cool.vlad4) 41 07.12.11 12:01 Сейчас в теме
(8) а нафига парится, чтобы кому то легко было загружать в базу из экселя? я вижу плюсы...их уже 11...
10. Eugeneer (Eugeneer) 07.12.11 12:05 Сейчас в теме
(9) и каких же? Сейчас все пользуются на 99 процентов электронными прайсами. трудно себе представить фирму которая бы большие прайсы (для мелких прайсов как то трудно себе представить надобновсть все в дву колонки) печатала на бумаге.
Все все отправляют в электролнном виде. А если и лежит прайсик где то в бумажном виде то больше 5 листов я никогда не видел.
Да и то у большинства прайсов очень большое количество дополнительной информации бывает. По 10 колонок (свойства и т.д. и т.п.)

cool.vlad4 пишет:

(8) а нафига парится, чтобы кому то легко было загружать в базу из экселя? я вижу плюсы...их уже 11...


Как это нафига? Сейчас практически все торговые компании обрабатывают прайсы через загрузку. Никто не сидит и по бумаге не карандашом не тыкает.
11. Сергей Ожерельев (Поручик) 3441 07.12.11 12:05 Сейчас в теме
(8) Прайс тут как пример применения принципа действия.
12. Ийон Тихий (cool.vlad4) 41 07.12.11 12:08 Сейчас в теме
(10) здесь прайс чисто для показа как разбивать в СКД на несколько колонок...
ЗЫ почему нафига? потому, что если кто-то отправляет кому-то прайс, то не себе а клиенту, а почему он должен заботится о том как клиент будет грузить в базу...если даже и будет, то проще и лучше отправлять в более фиксированном формате чем прайс
13. Юрий Зайцев (Yury1001) 1446 07.12.11 12:10 Сейчас в теме
Прайс тут как пример применения принципа действия.

Да, да - вот про это как раз все и забыли, гы :)))))
14. Taras Варварич (itar59) 87 07.12.11 12:29 Сейчас в теме
А нельзя ли еще пару тройку уроков?
У Вас прекрасный стиль изложения -- доступно и просто.
15. Юрий Зайцев (Yury1001) 1446 07.12.11 12:31 Сейчас в теме
(14)
Будут обязательно!
Срок 5-7 дней.
16. Andrusha (Andrusha1) 07.12.11 18:16 Сейчас в теме
Спасибо, очень познавательная статья.
17. Taras Варварич (itar59) 87 07.12.11 18:44 Сейчас в теме
koroleva_ann_ пишет:

пожелание: хотелось бы прайс чтоб выводился с текущими остатками по складу)) если можно))
(4) koroleva_ann_,

ну нельзя же от учебной статьи требовать всего и сразу.
18. Юрий Зайцев (Yury1001) 1446 07.12.11 19:19 Сейчас в теме
(17)
та это ж пустяки - я уже сделал.
вот (3) это крутой заказ, пожалуй пропущу.

Заодно столкнулся со стенкой: не могу разместить два варианта в отчете – их не видно у пользователя, даже основного нет. В яндексе пишут – изучай Библиотеку стандартных подсистем, но что то руки опустились…
Чё ж всё так сложно то?
19. Сергей Ожерельев (Поручик) 3441 08.12.11 07:36 Сейчас в теме
(18) В УТ 11 и Рознице 2 с вариантами внешних отчетов сложно, в связи с использованием в конфигурации хранилища вариантов.
20. olga pt (pt_olga) 58 09.12.11 19:17 Сейчас в теме
да, для Прайса нам это не пригодится, но в принципе необходимость экономной по листам печати есть.
Спасибо автору!
21. Юрий Зайцев (Yury1001) 1446 09.12.11 20:13 Сейчас в теме
(20)
Конечно: можно и остатки ТМЦ свернуть и долги клиентов
22. denis leonov (curys) 13.12.11 14:25 Сейчас в теме
24. Miffka (mikhailv) 15.12.11 17:35 Сейчас в теме
Юрий! Если есть одинаковые названия у номенклатуры, то вместо
Ном_ПП
1
2
3

будет
Ном_ПП
3
3
3

Предлагаю такой вариант решения проблемы:

// получаем нумерацию внутри одинаковых наименований
ВЫБРАТЬ
Таб1.Ссылка,
СУММА(Таб1.Номер) - 1 КАК Добавка
ПОМЕСТИТЬ ОдинаковыеНаим
ИЗ
ВТ_Ном КАК Таб1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Ном КАК Таб2
ПО Таб1.Ссылка >= Таб2.Ссылка
И Таб1.Наименование = Таб2.Наименование

СГРУППИРОВАТЬ ПО
Таб1.Ссылка

ИМЕЮЩИЕ
СУММА(Таб1.НомерПП) - 1 > 0
;

// корректируем Ном_ПП
ВЫБРАТЬ
Таб1.Ссылка,
Таб1.НомПП - ЕСТЬNULL(Таб2.Добавка, 0) КАК Ном_ПП
ПОМЕСТИТЬ ВТ_НомПП_2
ИЗ
ВТ_НомПП КАК Таб1
ЛЕВОЕ СОЕДИНЕНИЕ ОдинаковыеНаим КАК Таб2
ПО Таб1.Ссылка = Таб2.Ссылка
Yury1001; +1 Ответить
25. Иван (Sairys) 19.12.11 17:43 Сейчас в теме
Одно время замарачивался с прайсом на СКД, запнулся на том что не мог вывести фото номенклатуры. Но правда покопался потом и решил свою проблему
26. Thang Tran (thang_madi) 03.01.12 10:12 Сейчас в теме
Неплохая статья, спасибо автору!
27. 1CProfessional (Paul_Nevada) 06.01.12 00:42 Сейчас в теме
Спасибо за "ориентировку".
28. Maksim Titov (Maks_Payn) 10.01.12 11:07 Сейчас в теме
Спасибо! Интересный отчет!
29. Валя Гужбина (GVALA) 2 21.02.12 09:39 Сейчас в теме
Скажите на на 1С 8.2 Бухгалтерия работать будет?
31. Юрий Зайцев (Yury1001) 1446 21.02.12 10:19 Сейчас в теме
(29) Принцип работать будет, а обработка нет – это ж управляемая форма, бухгалтерии такой пока нету.
32. антон кривец (akril19811) 09.03.12 20:26 Сейчас в теме
Я когда то работал торговым и у нас прайс был в две колонки, это реально экономило затраты на бумагу, хотя тогда чужие затраты меня особо не беспокоили, а теперь своя фирма и хотелось бы уменьшить затраты до минимума. Было обрадовался когда увидел эту обработку, но не тут то было у меня ред.10,3 может кто подскажет как под мою подстроить?
33. Сергей Данильченко (Danilchenkos) 26.03.12 17:18 Сейчас в теме
Спасибо! Очень полезная штука!