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

1c83 Внешний отчет с макетом. Присоединяемые области. Не правильно заполняется.

Автор buketov.av, 04 сен 2019, 15:33

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

buketov.av

Добрый день!
Делаю отчет, заполняется данными, но не могу проверить правильно или нет, так как заполняется как-то странно (на скриншоте видно)
Заполняет сначала один столбец, потом другой столбец справа и ниже от первого, то есть не в одну строку, а как-то криво.
И выводит несколько раз одну и туже строку.
Должен группировать по Машинам и По водителям. При этом еще и литры должны суммироваться.
И склад должен заполняться только если количество литров заполнено...
Что-то не так я делаю.
Подскажите что.


Вот код, может кто-то может помочь разобраться, что делаю не так.
Всем заранее благодарен.


//чтобы получить макет в форме внешнего отчета необходимо выполнить ВнешОбработка = РеквизитФормыВЗначение("Отчет"); и после этого нам будет доступен "ПолучитьМакет"
ВнешОбработка = РеквизитФормыВЗначение("Отчет");
Макет = ВнешОбработка.ПолучитьМакет("Макет");


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоплива.ТС КАК ТС,
| ОстаткиТоплива.Водитель КАК Водитель,
| ОстаткиТоплива.Период КАК Период,
| ОстаткиТоплива.Количество КАК АЗСЗаправки,
| ОстаткиТоплива.Склад КАК Склад
|ИЗ
| РегистрНакопления.ОстаткиТоплива КАК ОстаткиТоплива
|ГДЕ
| ОстаткиТоплива.Период МЕЖДУ &Дата1 И &Дата2
|
|УПОРЯДОЧИТЬ ПО
| Период";

Запрос.УстановитьПараметр("Дата1", НачалоДня(Отчет.Дата1));
Запрос.УстановитьПараметр("Дата2", КонецДня(Отчет.Дата2));
//Запрос.УстановитьПараметр("ТС", Отчет.ТС);

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

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

//получаем области макета
ОбластьШапка          = Макет.ПолучитьОбласть("ОбластьШапка");
ОбластьШапкаТаблицы   = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы");

//заполняем шапку
ТабДок.Очистить();
ОбластьШапка.Параметры.Дата1 = Отчет.Дата1;
ОбластьШапка.Параметры.Дата2 = Отчет.Дата2;
ОбластьШапка.Параметры.ТС    = Отчет.ТС;

//выводим шапку отчета и шапку таблицы
ТабДок.Вывести(ОбластьШапка);

//заполняем даты периода  >>
ЗапросДни = Новый Запрос;
ЗапросДни.Текст =
"ВЫБРАТЬ
| КалендарныеГрафики.ДатаГрафика КАК ДатаГрафика,
| КалендарныеГрафики.ДеньВключенВГрафик КАК ДеньВключенВГрафик
|ИЗ
| РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
|ГДЕ
| КалендарныеГрафики.ДатаГрафика МЕЖДУ &Дата1 И &Дата2";
ЗапросДни.УстановитьПараметр("Дата1", НачалоДня(Отчет.Дата1));
ЗапросДни.УстановитьПараметр("Дата2", КонецДня(Отчет.Дата2));

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

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

ТаблицаДней = Новый ТаблицаЗначений;
ТаблицаДней.Колонки.Добавить("ДатаГрафика");
ТаблицаДней.Колонки.Добавить("ДеньВключенВГрафик");

ТаблицаДней = РезультатЗапросаДни.Выгрузить();
ОбластьШапкаДней1 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область1");
ОбластьШапкаДней2 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область2");
ОбластьШапкаДней3 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область3");
ОбластьШапкаДней4 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область4");
ОбластьШапкаДней5 = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы|Область5");

ОбластьСтрока1     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область1");
ОбластьСтрока11    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область2");
ОбластьСтрока12    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область3");
ОбластьСтрока13    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область4");
ОбластьСтрока14    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока1|Область5");

ОбластьСтрока2     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область1");
ОбластьСтрока21    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область2");
ОбластьСтрока22    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область3");
ОбластьСтрока23    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область4");
ОбластьСтрока24    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область5");

ОбластьСтрока3     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область1");
ОбластьСтрока31    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область2");
ОбластьСтрока32    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область3");
ОбластьСтрока33    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область4");
ОбластьСтрока34    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока3|Область5");

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

ОбластьСтрока5     = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область1");
ОбластьСтрока51    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область2");
ОбластьСтрока52    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область3");
ОбластьСтрока53    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область4");
ОбластьСтрока54    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока4|Область5");

ТабДок.Вывести(ОбластьШапкаДней1);

Для Каждого Стр Из ТаблицаДней Цикл
Если Стр.ДеньВключенВГрафик = Истина  Тогда
ОбластьШапкаДней2.Параметры.Дата = Формат(Стр.ДатаГрафика, "ДФ=dd.MM");
ТабДок.Присоединить(ОбластьШапкаДней2);
Иначе
ОбластьШапкаДней3.Параметры.Дата = Формат(Стр.ДатаГрафика, "ДФ=dd.MM");
ТабДок.Присоединить(ОбластьШапкаДней3);
КонецЕсли;
КонецЦикла;
//заполняем даты периода  //

//присоединяем область с итогами по заправкам
ТабДок.Присоединить(ОбластьШапкаДней5);

ТабДок.НачатьАвтогруппировкуСтрок();

ТЗЗаправкиАЗС = Запрос.Выполнить().Выгрузить();

//заполняем таблицу
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ОбластьСтрока1.Параметры.НомерПП = 0;
ОбластьСтрока24.Параметры.ИтогоКоличесвоАЗС = 0;
ВыборкаДетальныеЗаписи.Следующий();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтрока1.Параметры,ВыборкаДетальныеЗаписи);
ОбластьСтрока1.Параметры.НомерПП = ОбластьСтрока1.Параметры.НомерПП + 1;
ТабДок.Вывести(ОбластьСтрока1);

Для Каждого СтрДни Из ТаблицаДней Цикл
Если НЕ СтрДни.ДеньВключенВГрафик = Истина Тогда
ТабДок.Присоединить(ОбластьСтрока12);
Иначе
ТабДок.Присоединить(ОбластьСтрока11);
Конецесли;
КонецЦикла;
ТабДок.Присоединить(ОбластьСтрока14);

ТабДок.Вывести(ОбластьСтрока2);

//Заполняем и выводим заправки на АЗС
Для Каждого Стр Из ТаблицаДней Цикл
Если НЕ Стр.ДеньВключенВГрафик = Истина  Тогда
ОбластьСтрока22.Параметры.КоличесвоАЗС = 0;
Если НачалоДня(Стр.ДатаГрафика) = НачалоДня(ВыборкаДетальныеЗаписи.Период) Тогда
ОбластьСтрока22    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область3");
ОбластьСтрока22.Параметры.КоличесвоАЗС = ВыборкаДетальныеЗаписи.АЗСЗаправки;
КонецЕсли;
ИтогоЛитровВых = ВыборкаДетальныеЗаписи.АЗСЗаправки;
ТабДок.Присоединить(ОбластьСтрока22);
ИначеЕсли Стр.ДеньВключенВГрафик = Истина Тогда
ОбластьСтрока21.Параметры.КоличесвоАЗС = 0;
Если НачалоДня(ВыборкаДетальныеЗаписи.Период) = НачалоДня(Стр.ДатаГрафика) Тогда
ОбластьСтрока21    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область2");
ОбластьСтрока21.Параметры.КоличесвоАЗС = ВыборкаДетальныеЗаписи.АЗСЗаправки;
ИтогоЛитровБуд = ВыборкаДетальныеЗаписи.АЗСЗаправки;
КонецЕсли;
ТабДок.Присоединить(ОбластьСтрока21);
Конецесли;
КонецЦикла;

ТабДок.Присоединить(ОбластьСтрока24);

//заполняем и выводим ДУТ
//ТабДок.Вывести(ОбластьСтрока2);
//Для Каждого Стр Из ТаблицаДней Цикл
// Если НЕ Стр.ДеньВключенВГрафик = Истина  Тогда
// ТабДок.Присоединить(ОбластьСтрока22);
// Иначе
// Стр.ДеньВключенВГрафик = Истина;
// ТабДок.Присоединить(ОбластьСтрока21);
// Конецесли;
//КонецЦикла; 
//ТабДок.Присоединить(ОбластьСтрока4);


ТабДок.Вывести(ОбластьСтрока3);
Для Каждого СтрДни Из ТаблицаДней Цикл
Если НЕ СтрДни.ДеньВключенВГрафик = Истина Тогда
ТабДок.Присоединить(ОбластьСтрока32);
Иначе
ТабДок.Присоединить(ОбластьСтрока31);
Конецесли;
КонецЦикла;
    ТабДок.Присоединить(ОбластьСтрока34);


ТабДок.Вывести(ОбластьСтрока5);
//заполняем и выводим склады
Для Каждого Стр Из ТаблицаДней Цикл
Если НЕ Стр.ДеньВключенВГрафик = Истина  Тогда
ОбластьСтрока52.Параметры.Склад = "";
Если НЕ ОбластьСтрока22 = "" Тогда
ОбластьСтрока52.Параметры.Склад = ВыборкаДетальныеЗаписи.Склад;
Иначе
ОбластьСтрока52.Параметры.Склад = "";
Конецесли;
ТабДок.Присоединить(ОбластьСтрока52);
ИначеЕсли Стр.ДеньВключенВГрафик = Истина  Тогда
ОбластьСтрока51.Параметры.Склад = "";
Если НЕ ОбластьСтрока21 = "" Тогда
ОбластьСтрока51.Параметры.Склад = ВыборкаДетальныеЗаписи.Склад;
Иначе
ОбластьСтрока52.Параметры.Склад = "";
Конецесли;
//Стр.ДеньВключенВГрафик = Истина;
ТабДок.Присоединить(ОбластьСтрока51);
Конецесли;
КонецЦикла;
ТабДок.Присоединить(ОбластьСтрока54);
КонецЦикла;


ТабДок.ЗакончитьАвтогруппировкуСтрок();

ТабДок.ФиксацияСверху = 6;
ТабДок.ФиксацияСлева = 4;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;



buketov.av

это то, что у меня получилось...
заполняется не верно
на скриншоте видно, что данные дублируются постоянно
Не могу разобраться, что делаю не так...

LexaK

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

buketov.av

Цитата: LexaK от 05 сен 2019, 09:06
повторение данных у вас происходит из за того что вы не чистите присоединяемую область
вы ее заполняете, но когда нет новых данных заполнения не происходит и выводятся предыдущие данные.
перед заполнением добавьте чистку области.

Не помогло, вот в код вставил очистку области и все равно картина не поменялась


//Заполняем и выводим заправки на АЗС
Для Каждого Стр Из ТаблицаДней Цикл
Если НЕ Стр.ДеньВключенВГрафик = Истина  Тогда
Если НачалоДня(ВыборкаДетальныеЗаписи.Период) = НачалоДня(Стр.ДатаГрафика) Тогда
ОбластьСтрока22    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область3");
ОбластьСтрока22.Параметры.КоличесвоАЗС = 0;
ОбластьСтрока22.Параметры.КоличесвоАЗС = ВыборкаДетальныеЗаписи.АЗСЗаправки;
КонецЕсли;
ТабДок.Присоединить(ОбластьСтрока22);
ИначеЕсли Стр.ДеньВключенВГрафик = Истина Тогда
Если НачалоДня(ВыборкаДетальныеЗаписи.Период) = НачалоДня(Стр.ДатаГрафика) Тогда
ОбластьСтрока21    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область2");
ОбластьСтрока21.Параметры.КоличесвоАЗС = 0;
ОбластьСтрока21.Параметры.КоличесвоАЗС = ВыборкаДетальныеЗаписи.АЗСЗаправки;
КонецЕсли;
ТабДок.Присоединить(ОбластьСтрока21);
Конецесли;
КонецЦикла;

LexaK

и что вы почистили?

                Если НачалоДня(ВыборкаДетальныеЗаписи.Период) = НачалоДня(Стр.ДатаГрафика) Тогда
                    ОбластьСтрока22    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область3"); //вроде как чистка
                    ОбластьСтрока22.Параметры.КоличесвоАЗС = 0;
                    ОбластьСтрока22.Параметры.КоличесвоАЗС = ВыборкаДетальныеЗаписи.АЗСЗаправки;
                КонецЕсли;
//а здесь что? если не зашли если не попали в проверку выше?
                ТабДок.Присоединить(ОбластьСтрока22);

попробуйте так

                    //вынес из проверки
                    ОбластьСтрока22    = Макет.ПолучитьОбласть("ОбластьТаблицаСтрока2|Область3");
                Если НачалоДня(ВыборкаДетальныеЗаписи.Период) = НачалоДня(Стр.ДатаГрафика) Тогда
                    ОбластьСтрока22.Параметры.КоличесвоАЗС = 0;
                    ОбластьСтрока22.Параметры.КоличесвоАЗС = ВыборкаДетальныеЗаписи.АЗСЗаправки;
                КонецЕсли;
                ТабДок.Присоединить(ОбластьСтрока22);

еще у меня какие-то смутные сомнения по поводу ТабДок.Присоединить
(правда давно уже макеты не строил) кажется сначала строится отдельная Строка/Область с пом. Присоединить
а потом уже, она выводится а ТабДок (не уверен, нужно проверять)
если помогло нажмите: Спасибо!

buketov.av

Стало лучше! Спасибо огромное!
А вот такой теперь вопрос: а как сделать, чтобы не разбивалось на много строк?

Теги:

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

Рейтинг@Mail.ru

Поиск