Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отображение характеристик номенклатуры в списке
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Bulzavr
А как можно реализовать отображение характеристик номенклатуры в списке?
У каждой номенклатуры может быть несколько характеристик.. Вот думаю, что нужно отображать в списке каждую характеристику одного и того-же товара новой строкой... Как быть?

Хочу так:


Помогите пожалуйста дополнить мой код:

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



И попутный вопрос, код вроде верный, но почему пишет ошибку - "Обнаружено дублирование ключевых значений в колонке ссылка"?? в "Дополнительно" - "Выборка записей" стоит галка "Без повторяющихся"...
Petre
Bulzavr @ Вчера, 20:36 необходимо зарегистрироваться для просмотра ссылки ,
"Без повторяющихся" означает отсутствие записей с одинаковыми значениями по всем полям. Вам же надо обеспечить уникальность записей по полю "ссылка".
Bulzavr
А как это сделать? Что в коде не так?
Bernet
Bulzavr @ Сегодня, 10:04 необходимо зарегистрироваться для просмотра ссылки ,
Не так то что , данный запрос может вам задвоить строки и у вас одинаковая ссылка может встречаться в двух строках - пример: один и тот же товар есть на разных складах - вот вам и две строки, соответственно "дублирование ключевого значения".

Такое сообщение возникает когда в динамическом списке установлена основная таблица - если её убрать то сообщения не будет, но тогда вам ручками надо будет реализовать все стандартные кнопки командной панели: Создать, Изменить, Копировать и т.д.
Bulzavr
Что-то какая-то грусть прям.. Больше нет вариантов? И насколько это сообразно?
Bernet
Bulzavr @ Сегодня, 11:23 необходимо зарегистрироваться для просмотра ссылки ,
Насколько знаю нет, может кто-то что-то предложит другое. Я когда-то писал свои обработчики в такой ситуации, не то чтобы аж очень много кода и что-то сложное, но жаба душит учитывая то, что знаешь что кнопки стандартные и могли бы без этого обойтись
sava1
Цитата(Bernet @ 06.09.17, 10:06) необходимо зарегистрироваться для просмотра ссылки
данный запрос может вам задвоить строки и у вас одинаковая ссылка может встречаться в двух строках - пример: один и тот же товар есть на разных складах - вот вам и две строки, соответственно "дублирование ключевого значения".


Это откуда такой вывод - ?
Bernet
sava1 @ Сегодня, 11:48 необходимо зарегистрироваться для просмотра ссылки ,
Вывод оттуда, что у человека в запросе левым соединением к справочнику Номенклатура подсоединяются остатки, связь только по номенклатуре, соответственно если есть товар на нескольких складах - столько строк и получим.

То что выдаст такое сообщение - проверено на практике, если эта динамический список откуда потом мы хотим открывать/создавать/копировать элементы основной таблицы, то ключевое поле должно быть без дубля. Т.е. если в списке будет две строки он матюкнется что есть две строки и нифига в динамический список не выведет. В виду этого, я убирал основную таблицу и реализовывал Создание/Изменение/Копирование нужных мне элементов
sava1
Цитата(Bernet @ 06.09.17, 11:54) необходимо зарегистрироваться для просмотра ссылки
столько строк и получим.


Компоновщик хрен Вам отдаст кроме номенклатуры и остатка
Bernet
sava1 @ Сегодня, 11:57 необходимо зарегистрироваться для просмотра ссылки ,
Пардон, не увидел что Склад в выборку не попадает.

Но сути не меняет: раз выдает такое сообщение значит есть две строки с одинаковой ссылкой, а в таком случае либо делать так чтобы эта ссылка была одна, либо так как писал я - реализовывать командную панель самостоятельно
Bulzavr
Так как решить-то? Чесслово не понимаю, почему сделали так, как есть изначально.. Ведь неудобно же!

У меня например есть на складе 10 карандашей. 5 синих и 5 красных. Как в списке номенклатуры смотреть остаток, если отображаетс "карандаш: 10шт"? Прайс смотреть не вариант каждый раз. Нужно видеть оставшиеся цвета в списке номенклатуры..

Как вообще люди живут с этим?
logist
Цитата(Bulzavr @ 06.09.17, 18:03) необходимо зарегистрироваться для просмотра ссылки
Как вообще люди живут с этим?

Используют характеристики. Как правило в типовых торговых конфигурациях есть функционал который позволяет видеть остатки по характеристикам, в подборе, или отдельном поле, при нажатии на номенклатуру.
Bulzavr
Я использую характеристики и у меня голая типовая УТ11, в которой не видно характеристик в списке номенклатуры ни в каких окнах. Чтобы посмотреть остаток по характеристикам, приходится формировать прайс-лист! Или я чурка?
Bulzavr
Я понимаю, что один и тот же товар с разными характеристиками будет давать одинаковые ссылки. Но ведь должен же быть способ решения этой проблемы? Может не динамический список, а статичный сделать?
Bulzavr
Сделал динамический список справочника характеристик. Почти получилось.. Стал отображать и характеристики и владельца. Помогите вот с чем:

1. Отображается далеко не вся номенклатура. Только часть. Если лазить по иерархии, то натыкаюсь на ошибку:

{ОбщийМодуль.ОбщегоНазначения.Модуль(94)}: Ошибка при вызове метода контекста (Выполнить)
   Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(3, 2)}: Поле не найдено "Родитель"
<<?>>Родитель КАК Родитель




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

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



Может это как раз из-за отсутствия характеристик у некоторой номенклатуры?
logist
Цитата(Bulzavr @ 07.09.17, 14:17) необходимо зарегистрироваться для просмотра ссылки
2. Как сгруппировать таким образом, чтобы Наименование характеристики было вложено во владельца одной строкой?

Никак, в запросе этого сделать нельзя
Bulzavr
А как же тогда сделать, как на изображении в первом посте?
logist
В динамическом списке никак.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.