Имя: Пароль:
1C
 
УФ: при смене отображения списка - ошибка
,
0 mikecool
 
15.01.15
10:16
ДС на форме, по галке меняю отображение между "Дерево" и "Список"
Если отображение "Дерево", на "Список" переключает без проблем
а если включить "Дерево", то приходим к ошибке "Обнаружено дублирование ключевых значений в колонке СписокНоменклатурыСсылка. Отображение данных в списке невозможно."
Это откуда такие ноги могут быть?
Почитал темы, пишут про ошибку в запросе
Ошибок не вижу (
1 Cube
 
15.01.15
10:17
Давай запрос. Или нам текст его угадать надо?
2 mikecool
 
15.01.15
10:17
вот и запрос
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СписокНоменклатуры.Артикул КАК Артикул,
    СписокНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    СписокНоменклатуры.Наименование КАК Наименование,
    СписокНоменклатуры.ЭР_Спрос КАК Спрос,
    СписокНоменклатуры.Марка КАК Марка,
    СписокНоменклатуры.Производитель КАК Производитель,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК Характеристика,
    ВЫБОР
        КОГДА &ПоказыватьЦены
            ТОГДА ВЫБОР
                    КОГДА &Валюта = ЦеныНоменклатурыСрезПоследних.Валюта
                        ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
                    ИНАЧЕ ВЫРАЗИТЬ(ЦеныНоменклатурыСрезПоследних.Цена * КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность * КурсВыбраннойВалюты.Кратность / КурсВыбраннойВалюты.Курс КАК ЧИСЛО(15, 2))
                КОНЕЦ
        ИНАЧЕ 0
    КОНЕЦ КАК Цена,
    СписокНоменклатуры.Ссылка КАК СписокНоменклатурыСсылка,
    СвободныеОстаткиОстатки.ВНаличииОстаток - 0 КАК Всего,
    СвободныеОстаткиОстатки.ВНаличииОстаток - ВЫБОР
        КОГДА СвободныеОстаткиОстатки.ВРезервеОстаток < 0
            ТОГДА 0
        ИНАЧЕ СвободныеОстаткиОстатки.ВРезервеОстаток
    КОНЕЦ КАК Доступно,
    ВЫБОР
        КОГДА СвободныеОстаткиОстатки.ВРезервеОстаток < 0
            ТОГДА 0
        ИНАЧЕ СвободныеОстаткиОстатки.ВРезервеОстаток
    КОНЕЦ + ВЫБОР
        КОГДА ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток < 0
            ТОГДА 0
        ИНАЧЕ ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток
    КОНЕЦ КАК РезервИКОтгрузке
{ВЫБРАТЬ
    Артикул,
    ЕдиницаИзмерения.*,
    Наименование,
    Спрос,
    Марка.*,
    Производитель.*}
ИЗ
    Справочник.Номенклатура КАК СписокНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
            ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
            ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                    ,
                    &ПоказыватьЦены
                        И ВидЦены В
                            (ВЫБРАТЬ
                                ВидыЦен.Ссылка
                            ИЗ
                                Справочник.ВидыЦен КАК ВидыЦен
                            ГДЕ
                                ВидыЦен.Идентификатор ПОДОБНО &ИдентификаторВидаЦены + "%")) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныНоменклатурыСрезПоследних
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(, &ПоказыватьЦены) КАК КурсыВалютСрезПоследних
            ПО ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютСрезПоследних.Валюта
                И (&ПоказыватьЦены)
        ПО СписокНоменклатуры.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И (&ПоказыватьЦены)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(
                ,
                Валюта = &Валюта
                    И &ПоказыватьЦены) КАК КурсВыбраннойВалюты
        ПО (&ПоказыватьЦены)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураПоставщиков КАК НоменклатураПоставщиков
        ПО (&ИскатьПоАртикулуПоставщика)
            И СписокНоменклатуры.Ссылка = НоменклатураПоставщиков.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(, Склад В (&СписокСкладов)) КАК СвободныеОстаткиОстатки
        ПО СписокНоменклатуры.Ссылка = СвободныеОстаткиОстатки.Номенклатура
            И (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) = СвободныеОстаткиОстатки.Характеристика)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКОтгрузке.Остатки(, Склад В (&СписокСкладов)) КАК ТоварыКОтгрузкеОстатки
        ПО СписокНоменклатуры.Ссылка = ТоварыКОтгрузкеОстатки.Номенклатура
            И (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) = ТоварыКОтгрузкеОстатки.Характеристика)
ГДЕ
    НЕ СписокНоменклатуры.ЭтоГруппа
    И ВЫБОР
            КОГДА &ИскатьПоАртикулуПоставщика
                ТОГДА ВЫБОР
                        КОГДА (ВЫРАЗИТЬ(&АртикулПоставщика КАК СТРОКА(5))) = "     "
                            ТОГДА ИСТИНА
                        ИНАЧЕ НоменклатураПоставщиков.Артикул ПОДОБНО "%" + &АртикулПоставщика + "%"
                    КОНЕЦ
            ИНАЧЕ ИСТИНА
        КОНЕЦ
{ГДЕ
    СписокНоменклатуры.Артикул,
    СписокНоменклатуры.Наименование}
3 Cube
 
15.01.15
10:18
(2) Движку мисты цены нет! :)
4 mikecool
 
15.01.15
10:18
думается - где то образовываются лишние записи при левых соединениях, но с чего бы при смене отображения списка?
зы: при открытии отображается дерево
5 mikecool
 
15.01.15
10:19
(3) попробую тегами

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СписокНоменклатуры.Артикул КАК Артикул,
    СписокНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    СписокНоменклатуры.Наименование КАК Наименование,
    СписокНоменклатуры.ЭР_Спрос КАК Спрос,
    СписокНоменклатуры.Марка КАК Марка,
    СписокНоменклатуры.Производитель КАК Производитель,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК Характеристика,
    ВЫБОР
        КОГДА &ПоказыватьЦены
            ТОГДА ВЫБОР
                    КОГДА &Валюта = ЦеныНоменклатурыСрезПоследних.Валюта
                        ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
                    ИНАЧЕ ВЫРАЗИТЬ(ЦеныНоменклатурыСрезПоследних.Цена * КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность * КурсВыбраннойВалюты.Кратность / КурсВыбраннойВалюты.Курс КАК ЧИСЛО(15, 2))
                КОНЕЦ
        ИНАЧЕ 0
    КОНЕЦ КАК Цена,
    СписокНоменклатуры.Ссылка КАК СписокНоменклатурыСсылка,
    СвободныеОстаткиОстатки.ВНаличииОстаток - 0 КАК Всего,
    СвободныеОстаткиОстатки.ВНаличииОстаток - ВЫБОР
        КОГДА СвободныеОстаткиОстатки.ВРезервеОстаток < 0
            ТОГДА 0
        ИНАЧЕ СвободныеОстаткиОстатки.ВРезервеОстаток
    КОНЕЦ КАК Доступно,
    ВЫБОР
        КОГДА СвободныеОстаткиОстатки.ВРезервеОстаток < 0
            ТОГДА 0
        ИНАЧЕ СвободныеОстаткиОстатки.ВРезервеОстаток
    КОНЕЦ + ВЫБОР
        КОГДА ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток < 0
            ТОГДА 0
        ИНАЧЕ ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток
    КОНЕЦ КАК РезервИКОтгрузке
{ВЫБРАТЬ
    Артикул,
    ЕдиницаИзмерения.*,
    Наименование,
    Спрос,
    Марка.*,
    Производитель.*}
ИЗ
    Справочник.Номенклатура КАК СписокНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
            ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
            ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                    ,
                    &ПоказыватьЦены
                        И ВидЦены В
                            (ВЫБРАТЬ
                                ВидыЦен.Ссылка
                            ИЗ
                                Справочник.ВидыЦен КАК ВидыЦен
                            ГДЕ
                                ВидыЦен.Идентификатор ПОДОБНО &ИдентификаторВидаЦены + "%")) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныНоменклатурыСрезПоследних
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(, &ПоказыватьЦены) КАК КурсыВалютСрезПоследних
            ПО ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютСрезПоследних.Валюта
                И (&ПоказыватьЦены)
        ПО СписокНоменклатуры.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И (&ПоказыватьЦены)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(
                ,
                Валюта = &Валюта
                    И &ПоказыватьЦены) КАК КурсВыбраннойВалюты
        ПО (&ПоказыватьЦены)
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураПоставщиков КАК НоменклатураПоставщиков
        ПО (&ИскатьПоАртикулуПоставщика)
            И СписокНоменклатуры.Ссылка = НоменклатураПоставщиков.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(, Склад В (&СписокСкладов)) КАК СвободныеОстаткиОстатки
        ПО СписокНоменклатуры.Ссылка = СвободныеОстаткиОстатки.Номенклатура
            И (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) = СвободныеОстаткиОстатки.Характеристика)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКОтгрузке.Остатки(, Склад В (&СписокСкладов)) КАК ТоварыКОтгрузкеОстатки
        ПО СписокНоменклатуры.Ссылка = ТоварыКОтгрузкеОстатки.Номенклатура
            И (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) = ТоварыКОтгрузкеОстатки.Характеристика)
ГДЕ
    НЕ СписокНоменклатуры.ЭтоГруппа
    И ВЫБОР
            КОГДА &ИскатьПоАртикулуПоставщика
                ТОГДА ВЫБОР
                        КОГДА (ВЫРАЗИТЬ(&АртикулПоставщика КАК СТРОКА(5))) = "     "
                            ТОГДА ИСТИНА
                        ИНАЧЕ НоменклатураПоставщиков.Артикул ПОДОБНО "%" + &АртикулПоставщика + "%"
                    КОНЕЦ
            ИНАЧЕ ИСТИНА
        КОНЕЦ
{ГДЕ
    СписокНоменклатуры.Артикул,
    СписокНоменклатуры.Наименование}
6 Cube
 
15.01.15
10:21
(5) Фига себе, у тебя теги работают? Я думал, они отключены давно...
7 mikecool
 
15.01.15
10:22
(6) тут некоторые и курсивом пишут )
8 vicof
 
15.01.15
10:24
+(7) И картинки вставляют
9 Cube
 
15.01.15
10:24
(7) Ну, это только модеры...
Ты какие теги для кода использовал?
и ?
10 Cube
 
15.01.15
10:24
(9) Блин, сработали!))
11 mikecool
 
15.01.15
10:25
(9) латиницей [ 1C ] и [ / 1 C ] без пробелов
12 mikecool
 
15.01.15
10:26
а теперь к сабжу - как при смене отображения могут дублироваться ссылки?
может список надо очищать?
13 Cube
 
15.01.15
10:29
(12) Видимо, у тебя несколько видов цен под условия попадают или ещё чего...
14 Cube
 
15.01.15
10:29
(12) Левые соединения закомменть все и по-одному раскомментируй.
15 mikecool
 
15.01.15
10:30
(13) это я предполагаю
но как тогда этот список сначала отображается в дереве, потом переключается в список, а обратно в дерево уже не может?
ругаться должен был как минимум на первом переключении, имхо
16 mikecool
 
15.01.15
10:30
(14) ок, попробую
17 mikecool
 
15.01.15
10:53
запрос приведен к виду

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СписокНоменклатуры.Артикул КАК Артикул,
    СписокНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    СписокНоменклатуры.Наименование КАК Наименование,
    СписокНоменклатуры.ЭР_Спрос КАК Спрос,
    СписокНоменклатуры.Марка КАК Марка,
    СписокНоменклатуры.Производитель КАК Производитель,
    //ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК Характеристика,
    "" КАК Характеристика,
    //ВЫБОР
    //    КОГДА &ПоказыватьЦены
    //        ТОГДА ВЫБОР
    //                КОГДА &Валюта = ЦеныНоменклатурыСрезПоследних.Валюта
    //                    ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
    //                ИНАЧЕ ВЫРАЗИТЬ(ЦеныНоменклатурыСрезПоследних.Цена * КурсыВалютСрезПоследних.Курс / КурсыВалютСрезПоследних.Кратность * КурсВыбраннойВалюты.Кратность / КурсВыбраннойВалюты.Курс КАК ЧИСЛО(15, 2))
    //            КОНЕЦ
    //    ИНАЧЕ 0
    //КОНЕЦ КАК Цена,
    0 КАК Цена,
    СписокНоменклатуры.Ссылка КАК СписокНоменклатурыСсылка,
    //СвободныеОстаткиОстатки.ВНаличииОстаток - 0 КАК Всего,
    0 КАК Всего,
    //СвободныеОстаткиОстатки.ВНаличииОстаток - ВЫБОР
    //    КОГДА СвободныеОстаткиОстатки.ВРезервеОстаток < 0
    //        ТОГДА 0
    //    ИНАЧЕ СвободныеОстаткиОстатки.ВРезервеОстаток
    //КОНЕЦ КАК Доступно,
    0 КАК Доступно,
    //ВЫБОР
    //    КОГДА СвободныеОстаткиОстатки.ВРезервеОстаток < 0
    //        ТОГДА 0
    //    ИНАЧЕ СвободныеОстаткиОстатки.ВРезервеОстаток
    //КОНЕЦ + ВЫБОР
    //    КОГДА ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток < 0
    //        ТОГДА 0
    //    ИНАЧЕ ТоварыКОтгрузкеОстатки.КОтгрузкеОстаток
    //КОНЕЦ КАК РезервИКОтгрузке
    0 КАК РезервИКОтгрузке
{ВЫБРАТЬ
    Артикул,
    ЕдиницаИзмерения.*,
    Наименование,
    Спрос,
    Марка.*,
    Производитель.*}
ИЗ
    Справочник.Номенклатура КАК СписокНоменклатуры
        //ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
        //    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
        //    ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
        //    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
        //    ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика
        //ИЗ
        //    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
        //            ,
        //            &ПоказыватьЦены
        //                И ВидЦены В
        //                    (ВЫБРАТЬ
        //                        ВидыЦен.Ссылка
        //                    ИЗ
        //                        Справочник.ВидыЦен КАК ВидыЦен
        //                    ГДЕ
        //                        ВидыЦен.Идентификатор ПОДОБНО &ИдентификаторВидаЦены + "%")) КАК ЦеныНоменклатурыСрезПоследних) КАК ЦеныНоменклатурыСрезПоследних
        //    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(, &ПоказыватьЦены) КАК КурсыВалютСрезПоследних
        //    ПО (&ПоказыватьЦены)
        //        И ЦеныНоменклатурыСрезПоследних.Валюта = КурсыВалютСрезПоследних.Валюта
        //ПО (&ПоказыватьЦены)
        //    И СписокНоменклатуры.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
        //ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(
        //        ,
        //        &ПоказыватьЦены
        //            И Валюта = &Валюта) КАК КурсВыбраннойВалюты
        //ПО (&ПоказыватьЦены)
        //ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураПоставщиков КАК НоменклатураПоставщиков
        //ПО (&ИскатьПоАртикулуПоставщика)
        //    И СписокНоменклатуры.Ссылка = НоменклатураПоставщиков.Номенклатура
        //ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(, Склад В (&СписокСкладов)) КАК СвободныеОстаткиОстатки
        //ПО СписокНоменклатуры.Ссылка = СвободныеОстаткиОстатки.Номенклатура
        //    И (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) = СвободныеОстаткиОстатки.Характеристика)
        //ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКОтгрузке.Остатки(, Склад В (&СписокСкладов)) КАК ТоварыКОтгрузкеОстатки
        //ПО СписокНоменклатуры.Ссылка = ТоварыКОтгрузкеОстатки.Номенклатура
        //    И (ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) = ТоварыКОтгрузкеОстатки.Характеристика)
ГДЕ
    НЕ СписокНоменклатуры.ЭтоГруппа
    //И ВЫБОР
    //        КОГДА &ИскатьПоАртикулуПоставщика
    //            ТОГДА ВЫБОР
    //                    КОГДА (ВЫРАЗИТЬ(&АртикулПоставщика КАК СТРОКА(5))) = "     "
    //                        ТОГДА ИСТИНА
    //                    ИНАЧЕ НоменклатураПоставщиков.Артикул ПОДОБНО "%" + &АртикулПоставщика + "%"
    //                КОНЕЦ
    //        ИНАЧЕ ИСТИНА
    //    КОНЕЦ
{ГДЕ
    СписокНоменклатуры.Артикул,
    СписокНоменклатуры.Наименование}

ошибка осталась
18 mikecool
 
15.01.15
10:55
смена отображения - по изменению галки
    Если ОтображатьИерархию Тогда
        СО = ОтображениеТаблицы.Дерево;
    Иначе
        СО = ОтображениеТаблицы.Список;
    КонецЕсли;
    Элементы.СписокНоменклатуры.Отображение = СО;
    Элементы.СписокНоменклатуры.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВерхнийУровень;
19 mikecool
 
15.01.15
11:03
убрал условие на "Где Не ЭтоГруппа" - ошибка ушла
буду думать дальше