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




logist
Доработать обработку, так что бы она позволяла добавлять в отбор и отбирать по свойствам объектов.
gtovt
Цитата(logist @ 10.09.15, 15:15) необходимо зарегистрироваться для просмотра ссылки
Доработать обработку, так что бы она позволяла добавлять в отбор и отбирать по свойствам объектов.


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

И смотрел в универсальный отчет -> Использовать свойства и категории. но не бум бум.
gtovt
Апну тему, у меня ничего не получается.
Егор Динин
Цитата(gtovt @ 17.09.15, 9:10) необходимо зарегистрироваться для просмотра ссылки
у меня ничего не получается.

Что именно не получается? Выкладывайте код - Вам помогут. Сейчас Вы ждете готового решения, а получить его можно только необходимо зарегистрироваться для просмотра ссылки
gtovt
Процедура ЗаполнитьПостроительОтчетаПоЦенамНоменклатуры(ВключатьНезаполненные, ЗаполнятьТолькоТекстЗапроса) Экспорт

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

    Если Не ВключатьНезаполненные Тогда
        ТекстЗапроса = ТекстЗапроса + "
        |    И
        |    Ном.Ссылка В (Выбрать Номенклатура ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦенСкидок,))
        |    И
        |    ХарактеристикиНоменклатуры.Ссылка В (Выбрать ХарактеристикаНоменклатуры ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаЦенСкидок,))
        |";
    КонецЕсли;

    ТекстЗапроса = ТекстЗапроса + "
    |{ГДЕ
    |    Тип.Ссылка.*                                            КАК ТипЦен,
    |    Ном.Ссылка.*                                            КАК Номенклатура,
    |    НоменклатурнаяГруппа.Ссылка.*                           КАК НоменклатурнаяГруппа,
    |    ЦеноваяГруппа.Ссылка.*                                  КАК ЦеноваяГруппа,
    |    Ном.Родитель.*                                          КАК Группа
    |    //СВОЙСТВА
    |    //КАТЕГОРИИ
    |}
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура,
    |    ХарактеристикаНоменклатуры,
    |    ТипЦен
    |    //СВОЙСТВА
    |
    |ИТОГИ ПО
    |    Номенклатура ТОЛЬКО ИЕРАРХИЯ
    |АВТОУПОРЯДОЧИВАНИЕ
    |";

    ПостроительОтчета.Текст = ТекстЗапроса;

    Если Не ЗаполнятьТолькоТекстЗапроса Тогда

        // Соответствие имен полей в запросе и их представлений в отчете
        СтруктураПредставлениеПолей = Новый Структура(
        "    ТипЦен,
        |    Номенклатура,
        |    НоменклатурнаяГруппа,
        |    ЦеноваяГруппа",
        "Тип цен",
        "Номенклатура",
        "Номенклатурная группа",
        "Ценовая группа");

        УправлениеОтчетами.ЗаполнитьПредставленияПолей(СтруктураПредставлениеПолей, ПостроительОтчета);

        // отборы по умолчанию
        Пока ПостроительОтчета.Отбор.Количество() > 0 Цикл
            ПостроительОтчета.Отбор.Удалить(0);
        КонецЦикла;

        МассивОтбора = Новый Массив;

        Если ТипыЦенСкидок.Количество() = 0 Тогда
            МассивОтбора.Добавить("ТипЦен");
        Иначе
            ЭлементОтбора = ПостроительОтчета.Отбор.Добавить("ТипЦен",, "Тип цен");
            ЭлементОтбора.ВидСравнения  = ВидСравнения.ВСписке;
            ЭлементОтбора.Значение.ЗагрузитьЗначения(ТипыЦенСкидок.ВыгрузитьКолонку("ТипЦенСкидок"));
            ЭлементОтбора.Использование = Истина;
        КонецЕсли;
        
        Если мСписокНоменклатуры = Неопределено Тогда
            МассивОтбора.Добавить("Номенклатура");
        Иначе
            ЭлементОтбора = ПостроительОтчета.Отбор.Добавить("Номенклатура",, "Номенклатура");
            ЭлементОтбора.ВидСравнения  = ВидСравнения.ВСписке;
            ЭлементОтбора.Значение      = мСписокНоменклатуры;
            ЭлементОтбора.Использование = Истина;
        КонецЕсли;
        
        МассивОтбора.Добавить("НоменклатурнаяГруппа");
        МассивОтбора.Добавить("ЦеноваяГруппа");
        
        УправлениеОтчетами.ЗаполнитьОтбор(МассивОтбора, ПостроительОтчета);

        ЗаполнитьОбщиеПараметрыПостроителяОтчета();

    КонецЕсли;

КонецПроцедуры


Вот сюда надо вставить отбор по свойствам номенклатуры
TipsyKID
В модуле обработки есть запросы для построителя : "ЗаполнитьПостроительОтчета..." в них добавьте соединение с нужными свойствами или со всеми свойствами если разбираетесь в запросах.
Если не разбираетесь, тут дело другое , задавайте вопросы, что не получается, с примерами кода.
Вам необходимо не настраивать сразу отбор а задать заполнения полей для отбора, на вкладке построителя запросов.
gtovt
необходимо зарегистрироваться для просмотра ссылки вот обработка формирование цен, я так думаю там устанавливается отбор, я честно говоря за месяц перебрал кучу вариантов, на формах никто данной темы не поднимал, а если поднимали то все равно мне эта информация не помогла.

Я не прошу за меня это сделать, я прошу подсказать в какую сторону двигаться.

Может быть здесь как то добавить


Процедура ОтборЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка)

    Если ТипЗнч(Элемент.Значение) = Тип("СправочникСсылка.ТипыЦенНоменклатурыКонтрагентов") Тогда
        Контрагент = ПостроительОтчета.Отбор.Контрагент.Значение;
        Если ЗначениеЗаполнено(Контрагент) Тогда
            СтандартнаяОбработка = Ложь;
            ФормаВыбора = Справочники.ТипыЦенНоменклатурыКонтрагентов.ПолучитьФормуВыбора();

            Если ТипЗнч(Контрагент) = Тип("СписокЗначений") Тогда
                ФормаВыбора.Отбор.Владелец.ВидСравнения = ВидСравнения.ВСписке;
            Иначе
                ФормаВыбора.Отбор.Владелец.ВидСравнения = ВидСравнения.Равно;
            КонецЕсли;
            ФормаВыбора.Отбор.Владелец.Значение = Контрагент;
            ФормаВыбора.Отбор.Владелец.Использование = Истина;
            Элемент.Значение = ФормаВыбора.ОткрытьМодально();

            Если ТипЗнч(Элемент.Значение) = Тип("СправочникСсылка.ТипыЦенНоменклатурыКонтрагентов")
               И ЗначениеЗаполнено(Элемент.Значение)
               И НЕ ЗначениеЗаполнено(Элемент.Значение.ТипЦеныНоменклатуры) Тогда
                ОбщегоНазначения.СообщитьОбОшибке("У выбранного типа цен контрагентов """ + Элемент.Значение
                                 + """ не заполнен реквизит ""Тип цены номенклатуры""! Заполнение невозможно.");
                Элемент.Значение = Неопределено;
                Возврат;
            КонецЕсли;

        КонецЕсли;
    КонецЕсли;

КонецПроцедуры
gtovt
КонецЕсли;
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект,
    |    ВЫБОР
    |        КОГДА ЗначенияСвойствОбъектов.Свойство.Наименование = ""Сезон""
    |            ТОГДА ЗначенияСвойствОбъектов.Значение
    |        ИНАЧЕ """"
    |    КОНЕЦ КАК Сезон
    |ПОМЕСТИТЬ ВТСезон
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство = &СвойствоСезон
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект,
    |    ВЫБОР
    |        КОГДА ЗначенияСвойствОбъектов.Свойство.Наименование = ""Год""
    |            ТОГДА ЗначенияСвойствОбъектов.Значение
    |        ИНАЧЕ """"
    |    КОНЕЦ КАК Год
    |ПОМЕСТИТЬ ВТГод
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство = &СвойствоГод
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ЗначенияСвойствОбъектов.Объект,
    |    ВЫБОР
    |        КОГДА ЗначенияСвойствОбъектов.Свойство.Наименование = ""Производитель""
    |            ТОГДА ЗначенияСвойствОбъектов.Значение
    |        ИНАЧЕ """"
    |    КОНЕЦ КАК Производитель
    |ПОМЕСТИТЬ ВТПроизводитель
    |ИЗ
    |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |    ЗначенияСвойствОбъектов.Свойство = &СвойствоПроизводитель
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Номенклатура.Ссылка,
    |    Номенклатура.Наименование КАК Наименование,
    |    Номенклатура.Артикул,
    |    ВТСезон.Сезон,
    |    ВТГод.Год,
    |    ВТПроизводитель.Производитель
    |ПОМЕСТИТЬ ВТНоменклатура
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТСезон КАК ВТСезон
    |        ПО Номенклатура.Ссылка = ВТСезон.Объект
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТГод КАК ВТГод
    |        ПО Номенклатура.Ссылка = ВТГод.Объект
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТПроизводитель КАК ВТПроизводитель
    |        ПО Номенклатура.Ссылка = ВТПроизводитель.Объект
    |ГДЕ
    |    Номенклатура.ЭтоГруппа = ЛОЖЬ
    |
    |СГРУППИРОВАТЬ ПО
    |    Номенклатура.Ссылка,
    |    Номенклатура.Наименование,
    |    Номенклатура.Артикул,
    |    ВТСезон.Сезон,
    |    ВТГод.Год,
    |    ВТПроизводитель.Производитель
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТНоменклатура.Ссылка,
    |    ВТНоменклатура.Сезон,
    |    ВТНоменклатура.Год,
    |    ВТНоменклатура.Производитель КАК Производитель
    |ИЗ
    |    ВТНоменклатура КАК ВТНоменклатура
    |
    |УПОРЯДОЧИТЬ ПО
    |    Производитель,
    |    ВТНоменклатура.Наименование";
    //Параметры запроса
    Запрос.УстановитьПараметр("СвойствоГод",ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("2296389c-4045-11e5-828e-f0def1170684")));// Свойства объектов (Год)
    Запрос.УстановитьПараметр("СвойствоПроизводитель",ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("c3b4cd79-52fb-11e5-8298-f0def1170684")));// Свойства объектов (Производитель)
    Запрос.УстановитьПараметр("СвойствоСезон",ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("22963899-4045-11e5-828e-f0def1170684")));// Свойства объектов (Сезон)
    Результат = Запрос.Выполнить();


Ниже добавляю
МассивОтбора.Добавить("СвойствоСезон",ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("22963899-4045-11e5-828e-f0def1170684")));// Свойства объектов (Сезон)


все равно не получается пишет Слишком много фактических параметров
TipsyKID
Цитата(TipsyKID @ 17.09.15, 10:24) необходимо зарегистрироваться для просмотра ссылки
Вам необходимо не настраивать сразу отбор а задать заполнения полей для отбора, на вкладке построителя запросов.

Если Вам не понятно, что здесь написано прочитайте в С.П. "ПостроительЗапроса". ( это те магические символы, которые пишутся в запросе между символом {})
gtovt
Цитата(TipsyKID @ 18.09.15, 15:16) необходимо зарегистрироваться для просмотра ссылки


Понял спасибо, буду разбираться, еще наверное месяц уйдет ))))
TipsyKID
Беспрецедентная акция, пишите скайп в личку, свяжусь с Вами, помогу разобраться, я сегодня добрый.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.