Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 июн 2024, 09:24

Внешняя печатная форма ценников. ЗАПРОСЫ.

Автор 1cOren, 02 июн 2014, 09:41

0 Пользователей и 1 гость просматривают эту тему.

1cOren

День добрый. Я начинающий программист. Есть задача, но знаний не хватает. Прошу помощи.

Есть внешняя печатная форма. Мне нужно было доработать макеты ценников.

Заказчик печатает ценники из документа Установка цен Номенклатуры

Помимо других задач, меня попросили вывести на форму ценника СВОЙСТВА НОМЕНКЛАТУРЫ (Гарантия и Изготовитель)

Подскажите где в запросе ошибка. Свойства не выводятся.

Вот так выглядит макет ценника:


Вот так выглядят ценники при формировании внешней печатной формы:



Т.е. значения [СвойствоГар]  [ЗначениеГар] и [СвойствоИзг]  [ЗначениеИзг] Не заполняются.

Вот, собственно сам код:

Функция Печать() Экспорт
           
ТабДокумент                                       = Новый ТабличныйДокумент;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Макет                                                  = ПолучитьМакет("Макет");
ОбластьЦенника                                 = Макет.ПолучитьОбласть("Строка|Столбец1");
ОбластьЦенника1                               = Макет.ПолучитьОбласть("Строка|Столбец2");
ОбластьЦенника2                               = Макет.ПолучитьОбласть("Строка|Столбец3");
ОбластьЦенника3                               = Макет.ПолучитьОбласть("Строка|Столбец4");
ТекСтолбец =0;
ТекСтрока  =0;
           
           
/////////////  Получаю необходимую информацию из документов УстановкаЦенНоменклатуры  /////////////   
           
Запрос =Новый Запрос;                       
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст ="        ВЫБРАТЬ
                                      |   УстановкаЦенНоменклатурыТовары.Номенклатура КАК Наименование,
                                      |   УстановкаЦенНоменклатурыТовары.Цена КАК Цена,
                                      |   УстановкаЦенНоменклатурыТовары.Номенклатура КАК Название,
                                      |   УстановкаЦенНоменклатурыТовары.Валюта
                                      |   ИЗ
                                      |   Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
                                      |  ГДЕ
                                      |   УстановкаЦенНоменклатурыТовары.Цена <> 0";
                                                 
                                     
РезультатТовары = Запрос.Выполнить();
Выборка = РезультатТовары.Выбрать();
           
           
           
/////////////  Получаю свойства номенклатуры  /////////////
ЗапросСвойств = Новый Запрос;
ЗапросСвойств.Текст = " ВЫБРАТЬ
                                      |   ЗначенияСвойствОбъектов.Объект КАК ОбъектРегистра,
                                      |   ЗначенияСвойствОбъектов.Свойство КАК Свойство,
                                      |   ЗначенияСвойствОбъектов.Значение КАК ЗначениеСвойства
                                      |   ИЗ
                                      |   РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов";
   
РезультатСвойств = ЗапросСвойств.Выполнить();
ВыборкаСвойств = РезультатСвойств.Выбрать();

           
           

///////////// Начинаю заполнять макеты. НА 1 листок А4 будт умещаться 4 ценника/////////////

Пока Выборка.Следующий() Цикл
                       
                          КолНаим = СтрДлина(Выборка.Наименование);
                          РезПоискаНаим = Найти(Выборка.Наименование, " ");
                          СловоНаим = РезПоискаНаим -1;
                          СловоНазв = КолНаим - РезПоискаНаим;
                          ОбластьЦенника.Параметры.Наименование = Лев(Выборка.Наименование, СловоНаим);
                          ОбластьЦенника.Параметры.Название = Прав(Выборка.Название, СловоНазв);
                          ОбластьЦенника.Параметры.Цена = Выборка.Цена;
                          ОбластьЦенника.Параметры.Валюта = Выборка.Валюта;
                         

/////////////  Перебираю выборку со свойствами /////////////

                          Пока ВыборкаСвойств.Следующий() Цикл     
                          Если ВыборкаСвойств.ОбъектРегистра = Выборка.Наименование тогда
                                    Если ВыборкаСвойств.Свойство ="Гарантия"тогда
                                     ОбластьЦенника.Параметры.СвойствоГар = ВыборкаСвойств.Свойство;
                              ОбластьЦенника.Параметры.ЗначениеГар = ВыборкаСвойств.ЗначениеСвойства;
                              КонецЕсли;
                                    Если ВыборкаСвойств.Свойство ="Изготовитель"тогда
                                     ОбластьЦенника.Параметры.СвойствоИзг = ВыборкаСвойств.Свойство;
                              ОбластьЦенника.Параметры.ЗначениеИзг = ВыборкаСвойств.ЗначениеСвойства;
                              КонецЕсли;[size=78%] [/size]
              КонецЕсли;
                        КонецЦикла;

                        Если ТекСтрока = 0 и  ТекСтолбец  =  0  Тогда
                                                           ТабДокумент.Вывести(ОбластьЦенника);
                                               ИначеЕсли ТекСтрока = 0  и   ТекСтолбец =  1    тогда
                                         
                                               Если ТекСтрока = 2 Тогда
                                                           ТекСтрока = 0;
                                                           ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                                               КонецЕсли;
                                                                           
                       
            КонецЦикла;
           ///////////////// Макеты готовы, ТабДокумент готов к выводу на печать
                       
            Возврат ТабДокумент;
           
КонецФункции        



Помогите понять, почему при заполнению макета не получается вытянуть значения из ВыборкаСвойств

1cOren

Вопрос закрыт. Решение найдено:

Может кому понадобится.
В Свойствах номенклатуры имеются следующие свойства: Гарантия, Изготовитель, Комплекция. Нужно было сделать Внешнюю печатную форму для вывода на печать данных из документа УстановкаЦенНоменклатуры = свойства номенклатуры. А так же необходимо сделать, чтобы в первой строке выводилось первое слово из наименования номенклатуры, а все остальные слова должны выводиться во второй строке. По типу:

LOREAL

Шампунь от перхоти



Вывести нужно по 4 ценника на 1 странице.

В модуле объекта (обработки) описана функция Печать, которая вызывается с формы.
Содержание модуля:



Функция Печать() Экспорт

ТабДокумент                     = Новый ТабличныйДокумент;
ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

Макет                           = ПолучитьМакет("Макет");
ОбластьЦенника                  = Макет.ПолучитьОбласть("Строка|Столбец1");
ОбластьЦенника1                 = Макет.ПолучитьОбласть("Строка|Столбец2");
ОбластьЦенника2                 = Макет.ПолучитьОбласть("Строка|Столбец3");
ОбластьЦенника3                 = Макет.ПолучитьОбласть("Строка|Столбец4");
ТекСтолбец = 0;
ТекСтрока  = 0;




Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УстановкаЦенНоменклатурыТовары.Номенклатура КАК Наименование,
| УстановкаЦенНоменклатурыТовары.Цена КАК Цена,
| УстановкаЦенНоменклатурыТовары.Валюта,
| ЕСТЬNULL(ЗначенияСвойствОбъектовИзготовитель.Значение, 0) КАК Изготовитель,
| ЕСТЬNULL(ЗначенияСвойствОбъектовГарантия.Значение,0) КАК Гарантия,
|    ЕСТЬNULL(ЗначенияСвойствОбъектовКомплекция.Значение,0) КАК Комплекция,
| УстановкаЦенНоменклатурыТовары.Номенклатура КАК Название
| ИЗ
| Документ.УстановкаЦенНоменклатуры.Товары КАК УстановкаЦенНоменклатурыТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовИзготовитель
| ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовИзготовитель.Объект
| И ЗначенияСвойствОбъектовИзготовитель.Свойство = &СвойствоИзготовитель
|
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовГарантия
| ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовГарантия.Объект
| И ЗначенияСвойствОбъектовГарантия.Свойство = &СвойствоГарантия
|
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовКомплекция
| ПО УстановкаЦенНоменклатурыТовары.Номенклатура = ЗначенияСвойствОбъектовКомплекция.Объект
| И ЗначенияСвойствОбъектовКомплекция.Свойство = &СвойствоКомплекция
|
| ГДЕ
| УстановкаЦенНоменклатурыТовары.Цена <> 0
| И УстановкаЦенНоменклатурыТовары.ТипЦен = &ТипЦен
| И УстановкаЦенНоменклатурыТовары.Ссылка = &Ссылка
|
| СГРУППИРОВАТЬ ПО
| УстановкаЦенНоменклатурыТовары.Номенклатура,
| УстановкаЦенНоменклатурыТовары.Цена,
| УстановкаЦенНоменклатурыТовары.Валюта,
| ЗначенияСвойствОбъектовИзготовитель.Значение,
| ЗначенияСвойствОбъектовГарантия.Значение,
| ЗначенияСвойствОбъектовКомплекция.Значение,
| УстановкаЦенНоменклатурыТовары.Номенклатура";


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


РезультатТовары = Запрос.Выполнить();

Выборка = РезультатТовары.Выбрать();

Пока Выборка.Следующий() Цикл

КолНаим = СтрДлина(Выборка.Наименование);
РезПоискаНаим = Найти(Выборка.Наименование, " ");
СловоНаим =  РезПоискаНаим - 1;
СловоНазв = КолНаим - РезПоискаНаим;
ОбластьЦенника.Параметры.Наименование = Лев(Выборка.Наименование, СловоНаим);
ОбластьЦенника.Параметры.Название = Прав(Выборка.Название, СловоНазв);
ОбластьЦенника.Параметры.Цена = Выборка.Цена;
ОбластьЦенника.Параметры.Валюта = Выборка.Валюта;
Если Выборка.Гарантия = 0 тогда
ОбластьЦенника.Параметры.ЗначениеГ = "" Иначе
ОбластьЦенника.Параметры.ЗначениеГ = Выборка.Гарантия;
КонецЕсли;
Если Выборка.Изготовитель = 0 тогда
ОбластьЦенника.Параметры.ЗначениеП = "" Иначе
ОбластьЦенника.Параметры.ЗначениеП = Выборка.Изготовитель;
КонецЕсли;
Если Выборка.Комплекция = 0 тогда
ОбластьЦенника.Параметры.ЗначениеК = "" Иначе
ОбластьЦенника.Параметры.ЗначениеК = Выборка.Комплекция;
КонецЕсли;



Если ТекСтрока = 0 и ТекСтолбец = 0 Тогда
ТабДокумент.Вывести(ОбластьЦенника);
ИначеЕсли ТекСтрока = 0 и  ТекСтолбец = 1   тогда

КолНаим = СтрДлина(Выборка.Наименование);
РезПоискаНаим = Найти(Выборка.Наименование, " ");
СловоНаим =  РезПоискаНаим - 1;
СловоНазв = КолНаим - РезПоискаНаим;
ОбластьЦенника1.Параметры.Наименование = Лев(Выборка.Наименование, СловоНаим);
ОбластьЦенника1.Параметры.Название = Прав(Выборка.Название, СловоНазв);
ОбластьЦенника1.Параметры.Цена = Выборка.Цена;
ОбластьЦенника1.Параметры.Валюта = Выборка.Валюта;
Если Выборка.Гарантия = 0 тогда
ОбластьЦенника1.Параметры.ЗначениеГ = "" Иначе
ОбластьЦенника1.Параметры.ЗначениеГ = Выборка.Гарантия;
КонецЕсли;
Если Выборка.Изготовитель = 0 тогда
ОбластьЦенника1.Параметры.ЗначениеП = "" Иначе
ОбластьЦенника1.Параметры.ЗначениеП = Выборка.Изготовитель;
КонецЕсли;
Если Выборка.Комплекция = 0 тогда
ОбластьЦенника1.Параметры.ЗначениеК = "" Иначе
ОбластьЦенника1.Параметры.ЗначениеК = Выборка.Комплекция;
КонецЕсли;





ТабДокумент.Присоединить(ОбластьЦенника1);

ИначеЕсли  ТекСтрока = 1 и ТекСтолбец = 0  тогда

КолНаим = СтрДлина(Выборка.Наименование);
РезПоискаНаим = Найти(Выборка.Наименование, " ");
СловоНаим =  РезПоискаНаим - 1;
СловоНазв = КолНаим - РезПоискаНаим;
ОбластьЦенника2.Параметры.Наименование = Лев(Выборка.Наименование, СловоНаим);
ОбластьЦенника2.Параметры.Название = Прав(Выборка.Название, СловоНазв);
ОбластьЦенника2.Параметры.Цена = Выборка.Цена;
ОбластьЦенника2.Параметры.Валюта = Выборка.Валюта;
Если Выборка.Гарантия = 0 тогда
ОбластьЦенника2.Параметры.ЗначениеГ = "" Иначе
ОбластьЦенника2.Параметры.ЗначениеГ = Выборка.Гарантия;
КонецЕсли;
Если Выборка.Изготовитель = 0 тогда
ОбластьЦенника2.Параметры.ЗначениеП = "" Иначе
ОбластьЦенника2.Параметры.ЗначениеП = Выборка.Изготовитель;
КонецЕсли;
Если Выборка.Комплекция = 0 тогда
ОбластьЦенника2.Параметры.ЗначениеК = "" Иначе
ОбластьЦенника2.Параметры.ЗначениеК = Выборка.Комплекция;
КонецЕсли;



ТабДокумент.Вывести(ОбластьЦенника2);

ИначеЕсли ТекСтрока = 1 и  ТекСтолбец = 1  тогда

КолНаим = СтрДлина(Выборка.Наименование);
РезПоискаНаим = Найти(Выборка.Наименование, " ");
СловоНаим =  РезПоискаНаим - 1;
СловоНазв = КолНаим - РезПоискаНаим;
ОбластьЦенника3.Параметры.Наименование = Лев(Выборка.Наименование, СловоНаим);
ОбластьЦенника3.Параметры.Название = Прав(Выборка.Название, СловоНазв);
ОбластьЦенника3.Параметры.Цена = Выборка.Цена;
ОбластьЦенника3.Параметры.Валюта = Выборка.Валюта;
Если Выборка.Гарантия = 0 тогда
ОбластьЦенника3.Параметры.ЗначениеГ = "" Иначе
ОбластьЦенника3.Параметры.ЗначениеГ = Выборка.Гарантия;
КонецЕсли;
Если Выборка.Изготовитель = 0 тогда
ОбластьЦенника3.Параметры.ЗначениеП = "" Иначе
ОбластьЦенника3.Параметры.ЗначениеП = Выборка.Изготовитель;
КонецЕсли;
Если Выборка.Комплекция = 0 тогда
ОбластьЦенника3.Параметры.ЗначениеК = "" Иначе
ОбластьЦенника3.Параметры.ЗначениеК = Выборка.Комплекция;
КонецЕсли;






ТабДокумент.Присоединить(ОбластьЦенника3);                 
КонецЕсли;

ТекСтолбец = ТекСтолбец + 1;

Если ТекСтолбец = 2 Тогда
ТекСтрока  = ТекСтрока + 1;
ТекСтолбец = 0;
КонецЕсли;

Если ТекСтрока = 2 Тогда
ТекСтрока = 0;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;


КонецЦикла;


Возврат ТабДокумент;

КонецФункции

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск