Имя: Пароль:
1C
1С v8
Изменение стандартного макета для док-та СчетНаОплату
0 Иванов Иван Иваныч
 
19.06.19
08:47
Доброго всем дня! Добавил колонки в ТЧ док-та СчетНаОплату Скидка и СуммаБезСкидки, добавил эти колонки в макет, добавил в запрос, но что-то сам запрос не фурычит, валится с различными еррором "Разное количество полей в объединяемых запросах", до вывода данных даже не дошел еще, где не так написал? И куда смотреть, чтоб вывести данные в макет? Добавил новые поля в первый запрос, во вложенный запрос из Док-т.СчетНаОплату.Товары. Скрин макета по ссылке https://ibb.co/47YRh4K

Функция ПечатьСчетаЗаказа(МассивОбъектов, ОбъектыПечати) Экспорт

    УстановитьПривилегированныйРежим(Истина);
    
    ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
    Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
        ВыводитьКоды    = Истина;
        Колонка         = "Артикул";
        ТекстКодАртикул = "Артикул";
    ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
        ВыводитьКоды    = Истина;
        Колонка         = "Код";
        ТекстКодАртикул = "Код";        
    Иначе
        ВыводитьКоды    = Ложь;
        Колонка         = "";
        ТекстКодАртикул = "Код";
    КонецЕсли;
    
    Если ВыводитьКоды Тогда
        ОбластьШапки  = "ШапкаТаблицыСКодом";
        ОбластьСтроки = "СтрокаСКодом";
    Иначе
        ОбластьШапки  = "ШапкаТаблицы";
        ОбластьСтроки = "Строка";
    КонецЕсли;

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

    Шапка = Запрос.Выполнить().Выбрать();

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.КлючПараметровПечати = "СчетНаОплатуПокупателю_СчетЗаказ";
                  
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                   |    ВложенныйЗапрос.Ссылка КАК Ссылка,
                   |    ВложенныйЗапрос.Номенклатура,
                   |    ВложенныйЗапрос.Товар,
                   |    ВложенныйЗапрос.КодАртикул,
                   |    ВложенныйЗапрос.Количество,
                   |    ВложенныйЗапрос.ЕдиницаИзмерения,
                   |    ВложенныйЗапрос.Цена,
                   |    ВложенныйЗапрос.Сумма,
                   |    ВложенныйЗапрос.Скидка,
                   |    ВложенныйЗапрос.СуммаБезСкидки,
                   |    ВложенныйЗапрос.СуммаНДС,
                   |    ВложенныйЗапрос.НомерСтроки,
                   |    ВложенныйЗапрос.ID
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |    ВложенныйЗапрос.Ссылка КАК Ссылка,
                   |    ВложенныйЗапрос.Номенклатура,
                   |    ВЫРАЗИТЬ(ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар,
                   |    ВложенныйЗапрос.Номенклатура." + ТекстКодАртикул + " КАК КодАртикул,
                   |    ВложенныйЗапрос.Количество,
                   |    ВложенныйЗапрос.ЕдиницаИзмерения,
                   |    ВложенныйЗапрос.Цена,
                   |    ВложенныйЗапрос.Сумма,
                   |    ВложенныйЗапрос.Скидка,
                   |    ВложенныйЗапрос.СуммаБезСкидки,
                   |    ВложенныйЗапрос.СуммаНДС,
                   |    ВложенныйЗапрос.НомерСтроки КАК НомерСтроки,
                   |    1 КАК ID
                   |ИЗ
                   |    (ВЫБРАТЬ
                   |        ЗаказПокупателя.Ссылка КАК Ссылка,
                   |        ЗаказПокупателя.Номенклатура КАК Номенклатура,
                   |        ЗаказПокупателя.Номенклатура.БазоваяЕдиницаИзмерения.Наименование КАК ЕдиницаИзмерения,
                   |        ЗаказПокупателя.Цена КАК Цена,
                   |        СУММА(ЗаказПокупателя.Количество) КАК Количество,
                   |        СУММА(ЗаказПокупателя.Сумма) КАК Сумма,
                   |        СУММА(ЗаказПокупателя._Скидка) КАК Скидка,
                   |        СУММА(ЗаказПокупателя._СуммаБезСкидки) КАК СуммаБезСкидки,
                   |        СУММА(ЗаказПокупателя.СуммаНДС) КАК СуммаНДС,
                   |        МИНИМУМ(ЗаказПокупателя.НомерСтроки) КАК НомерСтроки
                   |    ИЗ
                   |        Документ.СчетНаОплатуПокупателю.Товары КАК ЗаказПокупателя
                   |    ГДЕ
                   |        ЗаказПокупателя.Ссылка В (&МассивОбъектов)
                   |    
                   |    СГРУППИРОВАТЬ ПО
                   |        ЗаказПокупателя.Ссылка,
                   |        ЗаказПокупателя.Номенклатура,
                   |        ЗаказПокупателя.Номенклатура.БазоваяЕдиницаИзмерения.Наименование,
                   |        ЗаказПокупателя.Цена) КАК ВложенныйЗапрос
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ЗаказПокупателя.Ссылка,
                   |    ЗаказПокупателя.Содержание,
                   |    ЗаказПокупателя.Содержание,
                   |    ЗаказПокупателя.Номенклатура." + ТекстКодАртикул + " КАК КодАртикул,
                   |    ЗаказПокупателя.Количество,
                   |    ЕСТЬNULL(ЗаказПокупателя.Номенклатура.БазоваяЕдиницаИзмерения.Наименование, ""--""),
                   |    ЗаказПокупателя.Цена,
                   |    ЗаказПокупателя.Сумма,
                   |    ЗаказПокупателя.СуммаНДС,
                   |    ЗаказПокупателя.НомерСтроки,
                   |    2
                   |ИЗ
                   |    Документ.СчетНаОплатуПокупателю.Услуги КАК ЗаказПокупателя
                   |ГДЕ
                   |    ЗаказПокупателя.Ссылка В (&МассивОбъектов)
                   |
                   |ОБЪЕДИНИТЬ ВСЕ
                   |
                   |ВЫБРАТЬ
                   |    ЗаказПокупателя.Ссылка,
                   |    ЗаказПокупателя.ОсновноеСредство,
                   |    ВЫРАЗИТЬ(ЗаказПокупателя.ОсновноеСредство.НаименованиеПолное КАК СТРОКА(1000)),
                   |    NULL,
                   |    1,
                   |    ""шт"",
                   |    ЗаказПокупателя.Сумма,
                   |    ЗаказПокупателя.Сумма,
                   |    ЗаказПокупателя.СуммаНДС,
                   |    ЗаказПокупателя.НомерСтроки,
                   |    3
                   |ИЗ
                   |    Документ.СчетНаОплатуПокупателю.ОС КАК ЗаказПокупателя
                   |ГДЕ
                   |    ЗаказПокупателя.Ссылка В (&МассивОбъектов)) КАК ВложенныйЗапрос
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    ID,
                   |    НомерСтроки
                   |
                   |ИТОГИ ПО
                   |    Ссылка";

    ВыборкаДанныхПоДокументам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                  
    Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.СчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ");

    Пока Шапка.Следующий() Цикл
        
        Если ТабДокумент.ВысотаТаблицы > 0 Тогда
            ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
        
        // Выводим шапку накладной
        СтруктурнаяЕдиницаОрганизация = ОбщегоНазначенияБК.ПолучитьСтруктурнуюЕдиницу(Шапка.Поставщик, Шапка.СтруктурноеПодразделение);
        СведенияОПоставщике = ОбщегоНазначенияБКВызовСервера.СведенияОЮрФизЛице(СтруктурнаяЕдиницаОрганизация, Шапка.Дата);
        
        ОбластьМакетаЗаголовокСчета       = Макет.ПолучитьОбласть("ЗаголовокСчета");
        ОбластьМакетаЗаголовокСчета.Параметры.Заполнить(Шапка);
        ОбластьМакетаЗаголовокСчета.Параметры.ПоставщикРНН_БИН = ОбщегоНазначенияБК.ПолучитьРегистрационныйНомерОрганизацииКонтрагентаВПечатнуюФорму(СведенияОПоставщике, Шапка.Дата);
        ОбластьМакетаЗаголовокСчета.Параметры.ПоставщикКБЕ     = СведенияОПоставщике.КБЕ;
        Если ТипЗнч(Шапка.СтруктурнаяЕдиница) = Тип("СправочникСсылка.БанковскиеСчета") Тогда
            
            Банк             = Шапка.СтруктурнаяЕдиница.Банк;
            РеквизитыБанка   = Справочники.Банки.ПолучитьРеквизитыБанка(Банк);
            БИК              = Справочники.Банки.ПолучитьБИКБанка(Шапка.Дата, РеквизитыБанка);
            ГородБанка       = РеквизитыБанка.Город;
            СтрокаГородБанка = ?(ПустаяСтрока(ГородБанка), "", НСтр("ru = ' г.'") + " " + ГородБанка);
            НомерСчета       = Шапка.СтруктурнаяЕдиница.НомерСчета;
            
            ОбластьМакетаЗаголовокСчета.Параметры.БИКБанкаПолучателя   = БИК;
            ОбластьМакетаЗаголовокСчета.Параметры.БанкПолучателя       = СокрЛП(Банк) + СтрокаГородБанка;
            ОбластьМакетаЗаголовокСчета.Параметры.НомерСчетаПолучателя = НомерСчета;
            
        КонецЕсли;  
        ОбластьМакетаЗаголовокСчета.Параметры.ПредставлениеПоставщика = ОбщегоНазначенияБКВызовСервера.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,",, Шапка.Дата);
        ТабДокумент.Вывести(ОбластьМакетаЗаголовокСчета);            
        
        Если ЗначениеЗаполнено(Шапка.ЛоготипОрганизации) Тогда
            СсылкаНаДвоичныеДанныеФайла = РаботаСФайлами.ДанныеФайла(Шапка.ЛоготипОрганизации).СсылкаНаДвоичныеДанныеФайла;
            Если ЗначениеЗаполнено(СсылкаНаДвоичныеДанныеФайла) Тогда
                ТабДокумент.Область("Логотип").Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(СсылкаНаДвоичныеДанныеФайла));
            КонецЕсли;
        КонецЕсли;    
        
        ОбластьМакетаЗаголовок = Макет.ПолучитьОбласть("Заголовок");
        ОбластьМакетаЗаголовок.Параметры.ТекстЗаголовка = РаботаСДиалогами.СформироватьЗаголовокДокумента(Шапка.Ссылка, НСтр("ru = 'Счет на оплату'"));
        
        ТабДокумент.Вывести(ОбластьМакетаЗаголовок);

        ОбластьМакетаПоставщик = Макет.ПолучитьОбласть("Поставщик");
        ОбластьМакетаПоставщик.Параметры.Заполнить(Шапка);
        ОбластьМакетаПоставщик.Параметры.ПредставлениеПоставщика = ОбщегоНазначенияБКВызовСервера.ОписаниеОрганизации(СведенияОПоставщике, "ИдентификационныйНомер,ПолноеНаименование,ЮридическийАдрес,Телефоны,",,Шапка.Дата);
        ТабДокумент.Вывести(ОбластьМакетаПоставщик);

        СведенияОПолучателе = ОбщегоНазначенияБКВызовСервера.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата);
        ОбластьМакетаПокупатель = Макет.ПолучитьОбласть("Покупатель");
        ОбластьМакетаПокупатель.Параметры.Заполнить(Шапка);
        ОбластьМакетаПокупатель.Параметры.ПредставлениеПолучателя = ОбщегоНазначенияБКВызовСервера.ОписаниеОрганизации(ОбщегоНазначенияБКВызовСервера.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), "ИдентификационныйНомер,ПолноеНаименование,ЮридическийАдрес,Телефоны,",,Шапка.Дата);
        ТабДокумент.Вывести(ОбластьМакетаПокупатель);

        ОбластьМакетаДоговор = Макет.ПолучитьОбласть("Договор");
        ОбластьМакетаДоговор.Параметры.Заполнить(Шапка);
        ТабДокумент.Вывести(ОбластьМакетаДоговор);

        ОбластьНомера = Макет.ПолучитьОбласть(ОбластьШапки + "|НомерСтроки");
        ОбластьДанных = Макет.ПолучитьОбласть(ОбластьШапки + "|Данные");
        ОбластьСуммы  = Макет.ПолучитьОбласть(ОбластьШапки + "|Сумма");

        ТабДокумент.Вывести(ОбластьНомера);
        Если ВыводитьКоды Тогда
            ОбластьДанных.Параметры.Колонка = Колонка;
        КонецЕсли;    
        ТабДокумент.Присоединить(ОбластьДанных);
        ТабДокумент.Присоединить(ОбластьСуммы);

        ОбластьКолонкаТовар = Макет.Область("Товар");

        ОбластьНомера = Макет.ПолучитьОбласть(ОбластьСтроки + "|НомерСтроки");
        ОбластьДанных = Макет.ПолучитьОбласть(ОбластьСтроки + "|Данные");
        ОбластьСуммы  = Макет.ПолучитьОбласть(ОбластьСтроки + "|Сумма");

        Сумма    = 0;
        СуммаНДС = 0;
        ВсегоСкидок    = 0;
        ВсегоБезСкидок = 0;
        СчетчикСтрок = 0;

        ВыборкаДанныхПоДокументам.Сбросить();
        ВыборкаДанныхПоДокументам.НайтиСледующий(Новый Структура("Ссылка", Шапка.Ссылка));
        ДанныеПоДокументу = ВыборкаДанныхПоДокументам.Выбрать();

        Пока ДанныеПоДокументу.Следующий() Цикл

            СчетчикСтрок = СчетчикСтрок + 1;
            
            ОбластьНомера.Параметры.НомерСтроки = СчетчикСтрок;
            ТабДокумент.Вывести(ОбластьНомера);

            ОбластьДанных.Параметры.Заполнить(ДанныеПоДокументу);
            ОбластьДанных.Параметры.Товар       = СокрЛП(ДанныеПоДокументу.Товар);
            ОбластьДанных.Параметры.Количество  = Формат(ДанныеПоДокументу.Количество, "ЧДЦ=3");
            Если ВыводитьКоды Тогда
                ОбластьДанных.Параметры.КодАртикул = ?(ДанныеПоДокументу.ID = 3, ДанныеПоДокументу.Номенклатура.Код, ДанныеПоДокументу.КодАртикул);                
            КонецЕсли;
            ТабДокумент.Присоединить(ОбластьДанных);
            
            ОбластьСуммы.Параметры.Заполнить(ДанныеПоДокументу);
            ТабДокумент.Присоединить(ОбластьСуммы);
            Сумма          = Сумма       + ДанныеПоДокументу.Сумма;
            СуммаНДС       = СуммаНДС    + ДанныеПоДокументу.СуммаНДС;

        КонецЦикла;

        // Вывести Итого
        ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
        ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
        ОбластьСуммы  = Макет.ПолучитьОбласть("Итого|Сумма");

        ТабДокумент.Вывести(ОбластьНомера);
        ТабДокумент.Присоединить(ОбластьДанных);
        ОбластьСуммы.Параметры.Всего = ОбщегоНазначенияБКВызовСервера.ФорматСумм(Сумма);
        ТабДокумент.Присоединить(ОбластьСуммы);

        // Вывести ИтогоНДС
        ОбластьНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
        ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
        ОбластьСуммы  = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
        
        ТабДокумент.Вывести(ОбластьНомера);
        Если Шапка.УчитыватьНДС Тогда
            ОбластьСуммы.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, НСтр("ru = 'В том числе НДС:'"), НСтр("ru = 'Сумма НДС:'"));
            ОбластьСуммы.Параметры.ВсегоНДС = ОбщегоНазначенияБКВызовСервера.ФорматСумм(СуммаНДС,, "-");
        КонецЕсли;
        ТабДокумент.Присоединить(ОбластьДанных);
        
        ТабДокумент.Присоединить(ОбластьСуммы);
        
        // Вывести Сумму прописью
        ОбластьМакетаСуммаПрописью = Макет.ПолучитьОбласть("СуммаПрописью");
        СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
        ОбластьМакетаСуммаПрописью.Параметры.ИтоговаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
            НСтр("ru = 'Всего наименований %1, на сумму %2'"),
            ДанныеПоДокументу.Количество(),
            ОбщегоНазначенияБКВызовСервера.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента));
            
        ОбластьМакетаСуммаПрописью.Параметры.СуммаПрописью = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
            НСтр("ru = 'Всего к оплате: %1'"),
            ОбщегоНазначенияБКВызовСервера.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента));
            
        ТабДокумент.Вывести(ОбластьМакетаСуммаПрописью);

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

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

КонецФункции
1 vip03
 
19.06.19
08:57
и?
в первом запросе 13 полей, в остальных 11
в остальные запросы добавь по 2 поля
2 catena
 
19.06.19
09:02
Если проблема в запросе, зачем вываливать всю простынь?
3 Иванов Иван Иваныч
 
19.06.19
09:04
(1) ситуация такая: поля Скидка и СуммаБезСкидки есть только в ТЧ "Товары" в остальных ТЧ их нету. Как быть тогда? не могу же я добавить то, чего нет
4 Иванов Иван Иваныч
 
19.06.19
09:05
(2) еще такой вопрос:  И куда смотреть, чтоб вывести данные в макет? (в самом начале писал)
5 Масянька
 
19.06.19
09:07
(3) На их месте ставите 0 (во второй ТЧ).
Посмотрите в типовых.
6 catena
 
19.06.19
09:08
(3)Выбрать Скидка как скидка
ОБъединить все
Выбрать 0 как скидка

(4)В макете есть области. Смотришь, в какую область добавил свой параметр, ищешь эту область в коде, выводишь по аналогии с окружающим кодом.
7 Иванов Иван Иваныч
 
19.06.19
09:26
(5) я просто добавил в запросы еще по одному разу

|    ЗаказПокупателя.Сумма,
|    ЗаказПокупателя.СуммаНДС,

прям чувствую что не кошерно, но запрос отработал
8 Иванов Иван Иваныч
 
19.06.19
11:32
(6) не понимаю как вывести, вот прям никак не дойду, можете меня в кусок кода тыкнуть куда смотреть?
9 catena
 
19.06.19
11:40
(8)Не могу. Я ж макета не вижу.
10 Иванов Иван Иваныч
 
19.06.19
11:44
11 catena
 
19.06.19
11:53
(10)Ну и на пересейчении каких секций находятся твои добавленные реквизиты?
12 Иванов Иван Иваныч
 
19.06.19
12:02
(11) Сумма
13 Иванов Иван Иваныч
 
19.06.19
12:10
(11) и Строка и СтрокаСКодом
14 catena
 
19.06.19
13:21
(13)Как в коде определяется эта секция?