Версия для печати темы (https://pro1c.org.ua/index.php?s=eda3d71e414a2be76bd135ccb72b7dcd&showtopic=10652)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Сортировка при выводе на печать

Автор: bereznoy 16.01.13, 22:24

Сделал обработку - каталог картинок с ценами по остаткам товаров, запрос по регистрам цен номенклатуры и остатков, когда формирую по группе в которой есть подгруппы и т.д., необходимо что формировалось все согласно номенклатуры, пробовал сортировку разными способами в запросе конструктором, вообще не получается у меня сортировать весь товар так как он находиться в номенклатуре, вот запрос, если надо , могу и саму обработку выложить

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

    //ПостроительОтчетаПрайс.Параметры("НулевойОстаток", 0);

    ПостроительОтчетаПрайс.ЗаполнитьНастройки();
    ПостроительОтчетаПрайс.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
    ПостроительОтчетаПрайс.ТекстЗаголовка = "Прайс";
    ПолеОтбора = ПостроительОтчетаПрайс.Отбор.Добавить("Номенклатура");
    ПолеОтбора.ВидСравнения  = ВидСравнения.ВИерархии;
    
    ПолеОтбора = ПостроительОтчетаПрайс.Отбор.Добавить("КоличествоОстаток");
    ПолеОтбора.ВидСравнения  = ВидСравнения.Больше;
    ПолеОтбора.Значение  = 0;
    ПолеОтбора.Использование  = Истина

Автор: bereznoy 17.01.13, 0:57

Сделал вот так, но теперь цену не видит в выборке (((, помогите плз

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

    //ПостроительОтчетаПрайс.Параметры("НулевойОстаток", 0);

    ПостроительОтчетаПрайс.ЗаполнитьНастройки();
    //ПостроительОтчетаПрайс.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
    ПостроительОтчетаПрайс.ТекстЗаголовка = "Прайс";
    ПолеОтбора = ПостроительОтчетаПрайс.Отбор.Добавить("Номенклатура");
    ПолеОтбора.ВидСравнения  = ВидСравнения.ВИерархии;
    
    ПолеОтбора = ПостроительОтчетаПрайс.Отбор.Добавить("КоличествоОстаток");
    ПолеОтбора.ВидСравнения  = ВидСравнения.Больше;
    ПолеОтбора.Значение  = 0;
    ПолеОтбора.Использование  = Истина



.........
Выборка = ПостроительОтчетаПрайс.Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);



Цену уже не видит, в чем проблемка?
Пока Выборка.Следующий() Цикл
....
Рисунок.Текст =Выборка.Цена;

Автор: pablo 17.01.13, 8:16

Во-первых, Вы уверены, что в запросе должно быть именно левое соединение?
Во-вторых, раз уж не видит цену, в регистре цен есть незаполненная (нулевая) цена?

Автор: bereznoy 17.01.13, 9:05

Цитата(pablo @ 17.01.13, 8:16) *
Во-первых, Вы уверены, что в запросе должно быть именно левое соединение?
Во-вторых, раз уж не видит цену, в регистре цен есть незаполненная (нулевая) цена?

1.Нет
2.Нет
Если не делать обход в выборке то все хорошо работает.

Подскажите как на Ваш взгляд должен выглядеть запрос

Автор: pablo 17.01.13, 12:46

Во-первых, если Вам нужны только те товары, по которым есть остатки, тогда нужно правое соединение.
Во-вторых, непонятно, какая именно сортировка Вам нужна.

Автор: bereznoy 18.01.13, 23:40

Что то никак у меня не получается получить цену в выборке (обход по группировкам сделал что б в моем каталоге все шло по порядку согласно иерархии
номенклатуры), помогите плз, как мне сохранить и порядок размещения картинок в каталоге согласно иерархии и получить цену в выборке,вот вест код

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

    

    ПостроительОтчетаПрайс.ЗаполнитьНастройки();
    //ПостроительОтчетаПрайс.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
    ПостроительОтчетаПрайс.ТекстЗаголовка = "Прайс";
    ПолеОтбора = ПостроительОтчетаПрайс.Отбор.Добавить("Номенклатура");
    ПолеОтбора.ВидСравнения  = ВидСравнения.ВИерархии;
    
    ПолеОтбора = ПостроительОтчетаПрайс.Отбор.Добавить("КоличествоОстаток");
    ПолеОтбора.ВидСравнения  = ВидСравнения.Больше;
    ПолеОтбора.Значение  = 0;
    ПолеОтбора.Использование  = Истина

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

Процедура ПрайсВывести(ПечататьЦенники = Ложь)
    

    Если НаДату = '00010101' Тогда
        Предупреждение("Не указана дата !!!");
        Возврат;
    КонецЕсли;
    
    Если ТипЦен.Пустая() Тогда
        Предупреждение("Не указан тип цен");
        Возврат;
    КонецЕсли;
    
    Если ВключатьТолькоОстатки И Склады.Количество() = 0 Тогда
        
        Предупреждение("Не указаны склады для поиска остатков");
        Возврат;
        
    КонецЕсли;
    
    
    ПостроительОтчетаПрайс.Параметры.Вставить("НаДату", КонецДня(НаДату));
    ПостроительОтчетаПрайс.Параметры.Вставить("ТипЦен", ТипЦен);
    ПостроительОтчетаПрайс.Параметры.Вставить("Склады", Склады.Выгрузить().ВыгрузитьКолонку("Склад"));

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

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

            КонецЕсли;
        
                    
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
    ЕСЛИ Выборка.Номенклатура.ЭтоГруппа = Истина Тогда
                    Изображение = Неопределено;
                    Иначе

Изображение = Выборка.Номенклатура.ОсновноеИзображение.Хранилище.Получить();
КонецЕсли;
// Изображение = Неопределено;
Если НЕ Изображение = Неопределено Тогда
////////////////////////////////////////////////////////////////////////////////
Рисунок = ОбластьНоменклатура.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Рисунок.Верх = 6;
Рисунок.Лево = 1;
Рисунок.Ширина = 17;
Рисунок.Высота = 79;
Рисунок.ОриентацияТекста = -0;
Рисунок.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
Рисунок.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
Рисунок.Шрифт = Новый Шрифт("Verdana", 13.5,Истина);
Рисунок.ЦветТекста = Новый Цвет(0,0,0);
Рисунок.Текст = Выборка.Номенклатура.Артикул;    

//////////////////////////////////////////////////////////////////////////    
Рисунок = ОбластьНоменклатура.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Верх = 6;
Рисунок.Высота =79;
Рисунок.Ширина = 90;
Рисунок.Лево = 18;
Рисунок.РазмерКартинки = РазмерКартинки.Растянуть;
Рисунок.Картинка = Изображение;
///////////////////////////////////////

/////////////////////////////////////////////////////
Рисунок = ОбластьНоменклатура.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Рисунок.Верх = 6;
Рисунок.Лево = 108;
Рисунок.Ширина = 17;
Рисунок.Высота = 79;
Рисунок.ОриентацияТекста = -0;
Рисунок.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
Рисунок.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
Рисунок.Шрифт = Новый Шрифт("Verdana", 10,Истина);
Рисунок.ЦветТекста = Новый Цвет(0,0,0);
Рисунок.Текст =Выборка.Цена;




/////////////////////////////////////////////////////
Рисунок = ОбластьНоменклатура.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Рисунок.Верх = 85;//76;
Рисунок.Лево = 1;
Рисунок.Ширина = 124;
Рисунок.Высота = 9;
Рисунок.ОриентацияТекста = -0;
Рисунок.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
Рисунок.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
Рисунок.Шрифт = Новый Шрифт (,,Истина);
Рисунок.ЦветТекста = Новый Цвет(0,0,0);
Рисунок.Текст = Выборка.Наименование;
Если ЛевыйСтолбец Тогда
    ТабДок1.Вывести(ОбластьНоменклатура);
    Иначе
    ТабДок2.Вывести(ОбластьНоменклатура);
КонецЕсли;

НомерЗаписи = НомерЗаписи + 1;

КонецЕсли;
        КонецЦикла;
        
        
        ТабДок.Присоединить(ТабДок1);
        ТабДок.Присоединить(ТабДок2);
        
        ТабДок.ПолеСлева = 0;
        ТабДок.ПолеСправа = 0;
        ТабДок.ПолеСверху = 0;
        ТабДок.ПолеСнизу = 0;
        ТабДок.АвтоМасштаб = Истина;
        


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

Автор: bereznoy 20.01.13, 18:45

HELP , помогите Цену получить в выборке 05071.gif

Автор: ignsv 20.01.13, 20:04

и все-таки: Вы говорите:

Цитата
с ценами по остаткам товаров

так зачем вы к ценам соединяете остатки, а не наоборот?

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


в моем случае дал группировку по иерархии, все остатки и цены к ним (если они попадали по отборам)

Автор: bereznoy 20.01.13, 20:46

Цитата(ignsv @ 20.01.13, 20:04) *
и все-таки: Вы говорите:

так зачем вы к ценам соединяете остатки, а не наоборот?

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


в моем случае дал группировку по иерархии, все остатки и цены к ним (если они попадали по отборам)


При обходе результата, в выборке уже нет цены (((

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua