Имя: Пароль:
1C
1С v8
Снова объединение ячеек в печатной форме
,
0 Ly_Alena
 
29.10.14
07:28
Народ, только не бейте! Всю голову сломала. Выводит подряд три раза одно и то же, но не объединяет (

Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("ТекущийДокумент", ЭтотОбъект.Ссылка);
            
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказПокупателяТовары.ЗапрашиваемоеНаименование,
        |    ЗаказПокупателяТовары.Номенклатура,
        |    ЗаказПокупателяТовары.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдИзм,
        |    СУММА(ЗаказПокупателяТовары.Количество) КАК Количество,
        |    СРЕДНЕЕ(ЗаказПокупателяТовары.ПлановаяСебестоимость) КАК ПлановаяСебестоимость,
        |    СРЕДНЕЕ(ЗаказПокупателяТовары.ЦенаБезНДС) КАК ЦенаБезНДС,
        |    СУММА(ЗаказПокупателяТовары.СуммаБезНДС) КАК СуммаБезНДС,
        |    СРЕДНЕЕ(ЗаказПокупателяТовары.Цена) КАК Цена,
        |    СУММА(ЗаказПокупателяТовары.Сумма) КАК Сумма,
        |    СУММА(ЗаказПокупателяТовары.Транспортные) КАК Транспортные,
        |    СУММА(ЗаказПокупателяТовары.Накладные) КАК Накладные,
        |    СУММА(ЗаказПокупателяТовары.УслПостоянные) КАК УслПостоянные,
        |    СУММА(ЗаказПокупателяТовары.Прибыль) КАК Прибыль,
        |    СРЕДНЕЕ(ЗаказПокупателяТовары.Рентабельность) КАК Рентабельность,
        |    ЗаказПокупателяТовары.НовоеНаименование,
        |    СУММА(ЗаказПокупателяТовары.СуммаПлановойСебестоимости) КАК СуммаСебестоимости,
        |    ЗаказПокупателяТовары.НомерЛота КАК НомерЛота,
        |    ЗаказПокупателяТовары.КоличествоВПроизводство
        |ИЗ
        |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
        |ГДЕ
        |    ЗаказПокупателяТовары.Ссылка = &ТекущийДокумент
        |
        |СГРУППИРОВАТЬ ПО
        |    ЗаказПокупателяТовары.ЗапрашиваемоеНаименование,
        |    ЗаказПокупателяТовары.Номенклатура,
        |    ЗаказПокупателяТовары.НовоеНаименование,
        |    ЗаказПокупателяТовары.Номенклатура.БазоваяЕдиницаИзмерения,
        |    ЗаказПокупателяТовары.НомерЛота,
        |    ЗаказПокупателяТовары.КоличествоВПроизводство
        |
        |УПОРЯДОЧИТЬ ПО
        |    НомерЛота
        |ИТОГИ ПО
        |    НомерЛота";
                  
          РезультатЗапросаТовары = Запрос.Выполнить();
          
             
            Если НЕ РезультатЗапросаТовары.Пустой() Тогда
            ВыборкаПоЛотам = РезультатЗапросаТовары.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
              Пока ВыборкаПоЛотам.Следующий() Цикл
            Индекс = 0;
            Область = Макет.ПолучитьОбласть("Товары");
            Обход = РезультатЗапросаТовары.Выбрать();
            ОбходТовары = РезультатЗапросаТовары.Выбрать();
            Пока Обход.Следующий() Цикл
        
            Если Обход.Количество = 0 Тогда
                Продолжить;
            КонецЕсли;
                
            Если Не ЗначениеЗаполнено(Обход.Номенклатура) Тогда
                Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
                Продолжить;
            КонецЕсли;
            
            Область.Параметры.НомерЛота = Обход.НомерЛота;
            Область.Параметры.ЗапрашиваемоеНаименование = Обход.ЗапрашиваемоеНаименование;
            Если ЗначениеЗаполнено(Обход.НовоеНаименование) Тогда
            Область.Параметры.НовоеНаименование = Обход.НовоеНаименование;
            Иначе Область.Параметры.НовоеНаименование = Обход.Номенклатура;
            КонецЕсли;
            Область.Параметры.Номенклатура = Обход.Номенклатура;
            Область.Параметры.ЕдИзм = Обход.ЕдИзм;
            Область.Параметры.Количество = Обход.Количество;
            Область.Параметры.Себестоимость = Обход.ПлановаяСебестоимость;
            Область.Параметры.СуммаСебестоимости = Обход.СуммаСебестоимости;
            Область.Параметры.ЦенаБезНДС = Обход.ЦенаБезНДС;
            Область.Параметры.СуммаБезНДС = Обход.СуммаБезНДС;
            Область.Параметры.Цена = Обход.Цена;
            Область.Параметры.Сумма = Обход.Сумма;
            Область.Параметры.Транспортные = Обход.Транспортные;
            Область.Параметры.Накладные = Обход.Накладные;
            Область.Параметры.УслПостоянные = Обход.УслПостоянные;
            Область.Параметры.Прибыль = Обход.Прибыль;
            Область.Параметры.Рентабельность = Обход.Рентабельность;
                        
            ТабДокумент.Вывести(Область);
            
        КонецЦикла;
       КонецЦикла;
    КонецЕсли;
1 Ly_Alena
 
29.10.14
07:29
Нужно чтобы по номерулота (если повторяется) объединял, а остальные строки так же шли
2 Sasha_Rapira
 
29.10.14
07:30
ЗаказПокупателяТовары.КоличествоВПроизводство

в Сумму
3 Ly_Alena
 
29.10.14
07:32
В документе так:
Номер лота   Наименование   Кол-во
     1        таз              3
     2        ковш             2
     1        ведро            1

На печать надо так:

Номер лота   Наименование   Кол-во
     1        таз              3
              ведро            1
     2        ковш             2
4 Sasha_Rapira
 
29.10.14
07:37
в СКД схема группировка НомерСлота
5 Sasha_Rapira
 
29.10.14
07:38
(4) ой сорри тут нет скд ясн
6 Sasha_Rapira
 
29.10.14
07:40
(0) как вариант убрать ИТОГО.

В месте где Выборка явно указать от куда выбирать

ВыборкаПоЛотам = РезультатЗапросаТовары.Выбрать(<ТипОбхода>, <Группировки>)
7 Ly_Alena
 
29.10.14
07:56
(6) ВыборкаПоЛотам = РезультатЗапросаТовары.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);  разве это не явно?
8 Ly_Alena
 
29.10.14
07:58
(6) Изначально было без ИТОГО, потом сказали добавить
9 Ly_Alena
 
29.10.14
09:18
Лююююдии, больше никаких вариантов? SOS!
10 Cube
 
30.10.14
06:11
(9) Тебе за количество строк платят что-ли?))
Берем код в (0) и:
- убираем итоги из запроса.
- переименовываем в запросе поле "ПлановаяСебестоимость" в "Себестоимость".
- оптимизируем цикл.
- добавляем код по объединению ячеек.
- наслаждаемся.

Примерно, так (писал на коленке, поэтому ошибки сама отладишь):

Область    = Макет.ПолучитьОбласть("Товары");

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

Выборка = Запрос.Выполнить().Выбрать();
ПредыдущийНомерЛота    = Неопределено;
НачальнаяСтрока        = 0;
КонечнаяСтрока        = 0;
КолонкаНомерЛота    = 2; //Сюда надо указать номер колонки в макете, которую будем объединять.
Пока Выборка.Следующий() Цикл
    Если Не ЗначениеЗаполнено(Выборка.Номенклатура) Тогда
        Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
        Продолжить;
    ИначеЕсли ПредыдущийНомерЛота <> Неопределено И ПредыдущийНомерЛота <> Выборка.НомерЛота Тогда
        ТабДокумент.Область(НачальнаяСтрока, КолонкаНомерЛота, КонечнаяСтрока, КолонкаНомерЛота).Объединить();
        НачальнаяСтрока    = 0;
        КонечнаяСтрока    = 0;
    КонецЕсли;
    Область.Параметры.Заполнить(Выборка);
    Если НЕ ЗначениеЗаполнено(Выборка.НовоеНаименование) Тогда
        Область.Параметры.НовоеНаименование = Выборка.Номенклатура;
    КонецЕсли;
    ТабДокумент.Вывести(Область);
    Если ПредыдущийНомерЛота = Неопределено ИЛИ ПредыдущийНомерЛота <> Выборка.НомерЛота Тогда
        НачальнаяСтрока = ТабДокумент.ВысотаТаблицы;
    КонецЕсли;
    КонечнаяСтрока        = ТабДокумент.ВысотаТаблицы;
    ПредыдущийНомерЛота    = Выборка.НомерЛота;
КонецЦикла;
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший