Имя: Пароль:
1C
1С v8
Еще вопрос про печать этикеток
,
0 Rumpil
 
19.09.11
12:15
В обработке Печать этикеток, когда заполняешь табличную часть товарами в колонку количество у всех товаров садится 1, при этом можно изменить количество копий только групповым методом с помощью соответствующего поля. Мне нужно следующее, чтобы количество копий для каждого товара было равно его текущему остатку на складе. Если вам не сложно тыкните хотя бы в какую часть нижеприведенного кода мне лезть ? Я предполагаю что нужно будет написать еще один запрос, получающий остатки и объединить его с остальными ?

Если ПечататьЦену И Не ЗначениеЗаполнено(ТипЦены) Тогда
       Сообщить ("Не указан тип цен!");
       Возврат;
   КонецЕсли;

   ЗапросШтрихкоды = Новый Запрос;
   ЗапросШтрихкоды.УстановитьПараметр("ТипШтрихкода",            ТипШтрихкода);
   Если ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) Тогда
       ЗапросШтрихкоды.УстановитьПараметр("Владелец",            ЭлементыФормы.Номенклатура.Значение);
   КонецЕсли;
   ЗапросШтрихкоды.УстановитьПараметр("ЕдиницаПоКлассификатору", Единица);
   ЗапросШтрихкоды.УстановитьПараметр("ПустаяСерия",             Справочники.СерииНоменклатуры.ПустаяСсылка());
   ЗапросШтрихкоды.УстановитьПараметр("Качество",                Качество);
   ЗапросШтрихкоды.УстановитьПараметр("ТипШтрихкода",            ТипШтрихкода);
   ЗапросШтрихкоды.УстановитьПараметр("ТипыШтрихкода",           ЭлементыФормы.ТипШтрихкода.СписокВыбора);
   ЗапросШтрихкоды.УстановитьПараметр("ЭтоГруппа",               Истина);
   ЗапросШтрихкоды.УстановитьПараметр("Дата",                    ТекущаяДата());
   ЗапросШтрихкоды.УстановитьПараметр("Валюта",                  Валюта);

   Если НЕ ВВалютахЦен Тогда
       Если НЕ ЗначениеЗаполнено(Валюта)Тогда
           Предупреждение("Не указана валюта для заполнения цен!");
           Возврат;
       КонецЕсли;
       КурсВалюты = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТекущаяДата(), Новый Структура("Валюта", Валюта));
       Если КурсВалюты.Курс = 0 тогда
           Предупреждение("Курс валюты отчета """ + Валюта.Наименование+""" на дату " +
                          строка(ТекущаяДата())+" не определен или нулевой. Формирование этикеток невозможно.");
           Возврат;
       КонецЕсли;

       Если КурсВалюты.Кратность = 0 тогда
           Предупреждение("Кратность курса валюты отчета """ + Валюта.Наименование+""" на дату " +
                          строка(ТекущаяДата())+" не определена или нулевая. Формирование этикеток невозможно.");
           Возврат;
       КонецЕсли;
       ЗапросШтрихкоды.УстановитьПараметр("КурсВалюты",          КурсВалюты.Курс);
   КонецЕсли;
   
   
   Если ТипЦены.Рассчитывается Тогда
       ТипЦенБазовый            = ТипЦены.БазовыйТипЦен;
       ПорядокОкругления        = ТипЦены.ПорядокОкругления;
       ОкруглятьВБольшуюСторону = ТипЦены.ОкруглятьВБольшуюСторону;
       ПроцентСкидкиНаценки     = ТипЦены.ПроцентСкидкиНаценки;
       ЗапросШтрихкоды.УстановитьПараметр("ТипЦены", ТипЦенБазовый);
       ЗапросШтрихкоды.УстановитьПараметр("ТипЦенРасчетный", ТипЦены);
   Иначе
       ЗапросШтрихкоды.УстановитьПараметр("ТипЦены", ТипЦены);
   КонецЕсли;

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

   Текст = Текст + "
   |    ) КАК Цены
   |     ПО(Штрихкоды.Владелец               = Цены.Номенклатура)
   |     И (Штрихкоды.ХарактеристикаНоменклатуры = Цены.ХарактеристикаНоменклатуры)
   |
   |ГДЕ
   |    Штрихкоды.Владелец.ЭтоГруппа <> &ЭтоГруппа";
   Если ЗначениеЗаполнено(ТипШтрихкода) Тогда
       Текст = Текст+" И
       |    Штрихкоды.ТипШтрихкода = &ТипШтрихкода";
   Иначе
       Текст = Текст+" И
       |    Штрихкоды.ТипШтрихкода В (&ТипыШтрихкода)";
   КонецЕсли;
   Если ТолькоВнутренние Тогда
       Текст = Текст + " И
                       |    ПОДСТРОКА(Штрихкоды.Штрихкод, 1, 1) = ""2""";
   КонецЕсли;
   Если ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) Тогда
       Текст = Текст+" И
       |    Штрихкоды.Владелец ";
       Если ПолеВидаСравненияНоменклатура = ВидСравнения.Равно Тогда
           Текст = Текст+"=";
       ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеРавно Тогда
           Текст = Текст+"<>";
       ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВСписке Тогда
           Текст = Текст+"В";
       ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеВСписке Тогда
           Текст = Текст+"НЕ В";
       ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.ВИерархии Тогда
           Текст = Текст+"В ИЕРАРХИИ";
       ИначеЕсли ПолеВидаСравненияНоменклатура = ВидСравнения.НеВИерархии Тогда
           Текст = Текст+"НЕ В ИЕРАРХИИ";
       КонецЕсли;
       Текст = Текст+" (&Владелец)";
   КонецЕсли;
   Если ЗначениеЗаполнено(Единица) Тогда
       Текст = Текст+" И
       |    Штрихкоды.ЕдиницаИзмерения.ЕдиницаПоКлассификатору = &ЕдиницаПоКлассификатору";
   КонецЕсли;
   Если Характеристики Тогда
       Текст = Текст+" И
       |    Штрихкоды.ХарактеристикаНоменклатуры";
       Если Не ХарактеристикиЗаполненные Тогда
           Текст = Текст+" = ";
       Иначе
           Текст = Текст+" <> ";
       КонецЕсли;
       Текст = Текст+"ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)";
   КонецЕсли;
   Если Серии Тогда
       Текст = Текст+" И
       |    Штрихкоды.СерияНоменклатуры";
       Если Не СерииЗаполненные Тогда
           Текст = Текст+" = ";
       Иначе
           Текст = Текст+" <> ";
       КонецЕсли;
       Текст = Текст+"&ПустаяСерия";
   КонецЕсли;
   Если ЗначениеЗаполнено(Качество) Тогда
       Текст = Текст+" И
       |    Штрихкоды.Качество = &Качество";
   КонецЕсли;
   Текст = Текст+"
   |УПОРЯДОЧИТЬ ПО
   |    Владелец
   |АВТОУПОРЯДОЧИВАНИЕ";
   ЗапросШтрихкоды.Текст = Текст;
   Товары                = ЗапросШтрихкоды.Выполнить().Выгрузить();
   Если ЗначениеЗаполнено(ТипЦены) Тогда
       Если ТипЦены.Рассчитывается Тогда
           ВалютаРасчетная = ТипЦены.ВалютаЦены;
       КонецЕсли;
   КонецЕсли;
   Курс = Неопределено;
   Кратность = Неопределено;
   Для Каждого СтрокаТовара ИЗ Товары Цикл
       Если ЗначениеЗаполнено(ТипЦены) Тогда
           Если ЗначениеЗаполнено(СтрокаТовара.Цена) Тогда
               Если ТипЦены.Рассчитывается Тогда
                   ВалютаТекущая    = СтрокаТовара.Валюта;
                   ПолученнаяЦена       = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(СтрокаТовара.Цена, ВалютаТекущая, ВалютаРасчетная, Курс, Кратность, ТекущаяДата());
                   ПроцентСкидкиНаценки = ? (НЕ ЗначениеЗаполнено(СтрокаТовара.ПроцентСкидкиНаценки),
                                             ПроцентСкидкиНаценки, СтрокаТовара.ПроцентСкидкиНаценки);
                   ПолученнаяЦена = ПолученнаяЦена * (1 + ПроцентСкидкиНаценки / 100);
                   
               Иначе
                   ПолученнаяЦена       = СтрокаТовара.Цена;
               КонецЕсли;

               ПолученнаяЦена = Ценообразование.ОкруглитьЦену(ПолученнаяЦена, ТипЦены.ПорядокОкругления, ТипЦены.ОкруглятьВБольшуюСторону);

               СтрокаТовара.Цена = ПолученнаяЦена;
               Если ТипЦены.Рассчитывается Тогда
                   СтрокаТовара.Валюта = ВалютаРасчетная;
               КонецЕсли;

               Если НЕ ВВалютахЦен
                   И Валюта <> СтрокаТовара.Валюта Тогда
                   ПолученнаяЦена       = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(СтрокаТовара.Цена, СтрокаТовара.Валюта, Валюта, 0, 1, ТекущаяДата());
                   СтрокаТовара.Цена    = ПолученнаяЦена;
                   СтрокаТовара.Валюта  = Валюта;
               КонецЕсли;

           КонецЕсли;
       КонецЕсли;
   КонецЦикла;

   Товары.ЗаполнитьЗначения(КоличествоКопий, "Количество");

   Если Товары.Количество() = 0 тогда
       Предупреждение("По выбранным условиям отбора не найдено ни одного товара со штрихкодом.");
   КонецЕсли;
1 Rumpil
 
19.09.11
12:27
апну ка
2 Stim213
 
19.09.11
12:28
|    1                     КАК Количество

ни о чем не говорит?
3 Rumpil
 
19.09.11
12:52
Понял, что значение "1" прописывается этом запросе. Мне теперь нужно написать запрос, кот. получает остатки и прицепить его в этим запросам ?
4 Alex S D
 
19.09.11
12:57
Ну да.. тут собственно 1 запрос, к нему и цепляй левый соединением