|
Внешняя печатная форма ценников. ЗАПРОСЫ. | ☑ | ||
---|---|---|---|---|
0
1cOren
02.06.14
✎
09:56
|
День добрый. Я начинающий программист. Есть задача, но знаний не хватает. Прошу помощи.
Есть внешняя печатная форма. Мне нужно было доработать макеты ценников. Заказчик печатает ценники из документа Установка цен Номенклатуры Помимо других задач, меня попросили вывести на форму ценника СВОЙСТВА НОМЕНКЛАТУРЫ (Гарантия и Изготовитель) Подскажите где в запросе ошибка. Свойства не выводятся. Вот так выглядит макет ценника: http://cs617419.vk.me/v617419415/b513/zLm3Pyol5Ss.jpg Вот так выглядят ценники при формировании внешней печатной формы: http://cs617419.vk.me/v617419415/b51a/BCrJMcRpcq4.jpg Т.е. значения [СвойствоГар] [ЗначениеГар] и [СвойствоИзг] [ЗначениеИзг] Не заполняются. Вот, собственно сам код: Функция Печать() Экспорт ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; Макет = ПолучитьМакет("Макет"); ОбластьЦенника = Макет.ПолучитьОбласть("Строка|Столбец1"); ОбластьЦенника1 = Макет.ПолучитьОбласть("Строка|Столбец2"); ОбластьЦенника2 = Макет.ПолучитьОбласть("Строка|Столбец3"); ОбластьЦенника3 = Макет.ПолучитьОбласть("Строка|Столбец4"); ТекСтолбец =0; ТекСтрока =0; ///////////// Получаю необходимую информацию из документов УстановкаЦенНоменклатуры ///////////// Запрос =Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект); Запрос.Текст =" ВЫБРАТЬ | УстановкаЦенНоменклатурыТовары.Номенклатура КАК Наименование, | УстановкаЦенНоменклатурыТовары.Цена КАК Цена, | УстановкаЦенНоменклатурыТовары.Номенклатура КАК Название, | УстановкаЦенНоменклатурыТовары.Валюта | ИЗ | Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары | ГДЕ | УстановкаЦенНоменклатурыТовары.Цена <> 0"; РезультатТовары = Запрос.Выполнить(); Выборка = РезультатТовары.Выбрать(); ///////////// Получаю свойства номенклатуры ///////////// ЗапросСвойств = Новый Запрос; ЗапросСвойств.Текст = " ВЫБРАТЬ | ЗначенияСвойствОбъектов.Объект КАК ОбъектРегистра, | ЗначенияСвойствОбъектов.Свойство КАК Свойство, | ЗначенияСвойствОбъектов.Значение КАК ЗначениеСвойства | ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов"; РезультатСвойств = ЗапросСвойств.Выполнить(); ВыборкаСвойств = РезультатСвойств.Выбрать(); ///////////// Начинаю заполнять макеты. НА 1 листок А4 будт умещаться 4 ценника///////////// Пока Выборка.Следующий() Цикл КолНаим = СтрДлина(Выборка.Наименование); РезПоискаНаим = Найти(Выборка.Наименование, " "); СловоНаим = РезПоискаНаим -1; СловоНазв = КолНаим - РезПоискаНаим; ОбластьЦенника.Параметры.Наименование = Лев(Выборка.Наименование, СловоНаим); ОбластьЦенника.Параметры.Название = Прав(Выборка.Название, СловоНазв); ОбластьЦенника.Параметры.Цена = Выборка.Цена; ОбластьЦенника.Параметры.Валюта = Выборка.Валюта; ///////////// Перебираю выборку со свойствами ///////////// Пока ВыборкаСвойств.Следующий() Цикл Если ВыборкаСвойств.ОбъектРегистра = Выборка.Наименование тогда Если ВыборкаСвойств.Свойство ="Гарантия"тогда ОбластьЦенника.Параметры.СвойствоГар = ВыборкаСвойств.Свойство; ОбластьЦенника.Параметры.ЗначениеГар = ВыборкаСвойств.ЗначениеСвойства; КонецЕсли; Если ВыборкаСвойств.Свойство ="Изготовитель"тогда ОбластьЦенника.Параметры.СвойствоИзг = ВыборкаСвойств.Свойство; ОбластьЦенника.Параметры.ЗначениеИзг = ВыборкаСвойств.ЗначениеСвойства; КонецЕсли;[size=78%] [/size][/color] КонецЕсли; КонецЦикла; Если ТекСтрока = 0 и ТекСтолбец = 0 Тогда ТабДокумент.Вывести(ОбластьЦенника); ИначеЕсли ТекСтрока = 0 и ТекСтолбец = 1 тогда Если ТекСтрока = 2 Тогда ТекСтрока = 0; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; КонецЦикла; ///////////////// Макеты готовы, ТабДокумент готов к выводу на печать Возврат ТабДокумент; КонецФункции Помогите понять, почему при заполнению макета не получается вытянуть значения из ВыборкаСвойств |
|||
1
Xephone
02.06.14
✎
10:45
|
(0) не легче ли будет что-то вроде
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗначенияСвойствОбъектов.Объект, | ЗначенияСвойствОбъектов.Значение |ПОМЕСТИТЬ ВТСвойствГарантия |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Объект = &СвойствоГарантия |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗначенияСвойствОбъектов.Объект, | ЗначенияСвойствОбъектов.Значение |ПОМЕСТИТЬ ВТСвойствИзготовитель |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Свойство = &СвойствоИзготовитель |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | УстановкаЦенНоменклатурыТовары.Номенклатура КАК Наименование, | УстановкаЦенНоменклатурыТовары.Цена КАК Цена, | УстановкаЦенНоменклатурыТовары.Номенклатура КАК Название, | УстановкаЦенНоменклатурыТовары.Валюта, | ВТСвойствИзготовитель.Значение КАК Изготовитель, | ВТСвойствГарантия.Значение КАК Гарантия |ИЗ | Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары | ЛЕВОЕ СОЕДИНЕНИЕ ВТСвойствГарантия КАК ВТСвойствГарантия | ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ВТСвойствГарантия.Объект | ЛЕВОЕ СОЕДИНЕНИЕ ВТСвойствИзготовитель КАК ВТСвойствИзготовитель | ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ВТСвойствИзготовитель.Объект |ГДЕ | УстановкаЦенНоменклатурыТовары.Цена <> 0"; Запрос.УстановитьПараметр("СвойствоГарантия", СвойствоГарантия); Запрос.УстановитьПараметр("СвойствоИзготовитель", СвойствоИзготовитель); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи КонецЦикла; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА |
|||
2
Tarlich
02.06.14
✎
11:26
|
Если ВыборкаСвойств.Свойство ="Гарантия"тогда - отладчик что говорит?
|
|||
3
1cOren
02.06.14
✎
12:44
|
(1) Ругается на то, что переменные СвойствоГарантия и СвойствоИзготовитель в обозначении ПараметровЗапроса НЕОПРЕДЕЛЕНЫ. И я не совсем понял почему
|ГДЕ | ЗначенияСвойствОбъектов.Объект = &СвойствоГарантия |; а не |ГДЕ | ЗначенияСвойствОбъектов.Свойство = &СвойствоГарантия |
|||
4
Xephone
03.06.14
✎
01:53
|
(3) вот так будет получше
ВЫБРАТЬ УстановкаЦенНоменклатурыТовары.Номенклатура КАК Наименование, УстановкаЦенНоменклатурыТовары.Цена КАК Цена, УстановкаЦенНоменклатурыТовары.Номенклатура КАК Название, УстановкаЦенНоменклатурыТовары.Валюта, ЗначенияСвойствОбъектовИзготовитель.Значение КАК Изготовитель, ЗначенияСвойствОбъектовГарантия.Значение КАК Гарантия ИЗ Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовИзготовитель ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовИзготовитель.Объект ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовГарантия ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовГарантия.Объект ГДЕ УстановкаЦенНоменклатурыТовары.Цена <> 0 И ЗначенияСвойствОбъектовГарантия.Свойство = &СвойствоГарантия И ЗначенияСвойствОбъектовИзготовитель.Свойство = &СвойствоИзготовитель Тебе нужно передать значения в переменные: "СвойствоГарантия = ПланыВидовХарактеристик.СвойствоОбъектов.НайтиПоНаименованию("Гарантия")" и "СвойствоИзготовитель = ПланыВидовХарактеристик.СвойствоОбъектов.НайтиПоНаименованию("Изготовитель")" а потом установить параметр: Запрос.УстановитьПараметр("СвойствоГарантия", СвойствоГарантия); Запрос.УстановитьПараметр("СвойствоИзготовитель", СвойствоИзготовитель); |
|||
5
1cOren
03.06.14
✎
14:17
|
(4) Спасибо!!!!
Сделал так: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | УстановкаЦенНоменклатурыТовары.Номенклатура КАК Наименование, | УстановкаЦенНоменклатурыТовары.Цена КАК Цена, | УстановкаЦенНоменклатурыТовары.Валюта, | ЗначенияСвойствОбъектовИзготовитель.Значение КАК Изготовитель, | ЗначенияСвойствОбъектовГарантия.Значение КАК Гарантия, | ЗначенияСвойствОбъектовКомплекция.Значение КАК Комплекция, | УстановкаЦенНоменклатурыТовары.Номенклатура КАК Название |ИЗ | Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовИзготовитель | ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовИзготовитель.Объект | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовГарантия | ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовГарантия.Объект | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовКомплекция | ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовКомплекция.Объект |ГДЕ | УстановкаЦенНоменклатурыТовары.Цена <> 0 | И ЗначенияСвойствОбъектовГарантия.Свойство = &СвойствоГарантия | И ЗначенияСвойствОбъектовКомплекция.Свойство = &СвойствоКомплекция | И ЗначенияСвойствОбъектовИзготовитель.Свойство = &СвойствоИзготовитель | И УстановкаЦенНоменклатурыТовары.ТипЦен = &ТипЦен | И УстановкаЦенНоменклатурыТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | УстановкаЦенНоменклатурыТовары.Номенклатура, | УстановкаЦенНоменклатурыТовары.Цена, | УстановкаЦенНоменклатурыТовары.Валюта, | ЗначенияСвойствОбъектовИзготовитель.Значение, | ЗначенияСвойствОбъектовГарантия.Значение, | ЗначенияСвойствОбъектовКомплекция.Значение, | УстановкаЦенНоменклатурыТовары.Номенклатура"; Запрос.УстановитьПараметр("Ссылка", СсылкаНаобъект); Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Продажная")); СвойствоГарантия = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Гарантия"); СвойствоИзготовитель = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Изготовитель"); СвойствоКомплекция = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Комплекция"); Запрос.УстановитьПараметр("СвойствоГарантия", СвойствоГарантия); Запрос.УстановитьПараметр("СвойствоИзготовитель", СвойствоИзготовитель); Запрос.УстановитьПараметр("СвойствоКомплекция", СвойствоКомплекция); РезультатТовары = Запрос.Выполнить(); Выборка = РезультатТовары.Выбрать(); Все отлично выводит, НО выводит лишь те записи из документа, в которых заполнены все три свойства номенклатуры. :( Копаюсь дальше. |
|||
6
Поpyчик-4
03.06.14
✎
14:19
|
(5) Как установил фильтр в запросе, так и работает, всё верно.
ГДЕ УстановкаЦенНоменклатурыТовары.Цена <> 0 И ЗначенияСвойствОбъектовГарантия.Свойство = &СвойствоГарантия И ЗначенияСвойствОбъектовИзготовитель.Свойство = &СвойствоИзготовитель |
|||
7
Поpyчик-4
03.06.14
✎
14:21
|
Пробуй
Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовИзготовитель ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовИзготовитель.Объект И ЗначенияСвойствОбъектовИзготовитель.Свойство = &СвойствоИзготовитель ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовГарантия ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовГарантия.Объект И ЗначенияСвойствОбъектовГарантия.Свойство = &СвойствоГарантия ГДЕ УстановкаЦенНоменклатурыТовары.Цена <> 0 |
|||
8
1cOren
03.06.14
✎
14:36
|
(7) Все огонь! Сохраню задание как урок. Многое узнал.
Спасибо большое всем! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |