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

Результат в отчете по столбцам

Автор GShutter, 09 сен 2015, 23:55

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

GShutter

Здравствуйте, подскажите пожалуйста как можно решить данную проблему:
У меня на данный момент отчет выводит как показано на первых 2х картинках (макет отчета и результат). Но таковой отчет крайне неприятен и я хотел бы его сделать в 3 столбца по группам, я пытался создать три параметра как показано на 3 картинке и передать туда значения, но результат(картинка 4) крайне плох, сперва заполняется 1 столбец при этом 2 других пустые, потом начинает заполняться другой столбец, при этом  тот который уже заполнен продолжает заполняться последним значением. Помогите пожалуйста разобраться, я только обучаюсь, не пойму как решить данную проблему, а оставлять в первом виде в 2 колонки очень уж не хочется.   

has

Я не пойму, как хочется то?

Natain14

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

ТабДокумент = Новый ТабличныйДокумент;
Макет=ПолучитьМакет("Макет");
............
(тут получить данные для заполнения, например, запросом)
ОблТаблица = Макет.ПолучитьОбласть("Элемент1");
Счетчик = 0;

Пока ВыборкаКонтрагентов.Следующий() цикл

Счетчик = Счетчик+1;
Если Счетчик = 1 тогда
    ОблТаблица.Параметры.Группа1=ВыборкаКонтрагентов.Ссылка;
иначеесли Счетчик =2 тогда
    ОблТаблица.Параметры.Группа2=ВыборкаКонтрагентов.Ссылка;
иначеесли Счетчик = 3 тогда
    ОблТаблица.Параметры.Группа3=ВыборкаКонтрагентов.Ссылка;
    ТабДокумент.Вывести(ОблТаблица);
    Счетчик=0;
конецесли;

Конеццикла;

vitasw

ТGShutter, вы бы код показали, глядишь и дело пойдет быстрее.

GShutter

Простите что задержался по времени. Я хочу чтобы у меня группы выводились в строке, а клиенты к ним входящие в столбце. На четвертой картинке у меня клиенты выводятся в 3 столбца, но как видно на картинке с 1 строчки у меня вывелась только 2я группа с клиентами , 1 и 3 группы начинают заполняться в порядке очереди  и далеко не с 1 строчки, при этом у 2ой группы продолжает записывать последнюю запись "Клиент 10" никаких там дублей нету, данные выбираются как положено.
Данный код соответствует первой и второй картинке:

Количество = 0;
Количество1 = 0;
Макет = Отчеты.СписокКлиентовБезПрайса.ПолучитьМакет("Макет");
ОблШапка = Макет.ПолучитьОбласть("Шапка");
ОблЭлемент = Макет.ПолучитьОбласть("Элемент");
//ОблЭлемент1 = Макет.ПолучитьОбласть("Элемент1");


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

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписокКлиентовСрезПоследних.Наименование,
| СписокКлиентовСрезПоследних.Группа,
| МАКСИМУМ(СписокКлиентовСрезПоследних.ДатаПолученияПрайса) КАК ДатаПолученияПрайса
|ИЗ
| РегистрСведений.СписокКлиентов.СрезПоследних КАК СписокКлиентовСрезПоследних
|
|СГРУППИРОВАТЬ ПО
| СписокКлиентовСрезПоследних.Наименование,
| СписокКлиентовСрезПоследних.Группа";

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


Данный код соответствует третей и четвертой картинке:

Количество = 0;
Количество1 = 0;
Макет = Отчеты.СписокКлиентовБезПрайса.ПолучитьМакет("Макет");
ОблШапка = Макет.ПолучитьОбласть("Шапка");
ОблЭлемент = Макет.ПолучитьОбласть("Элемент");
ОблЭлемент1 = Макет.ПолучитьОбласть("Элемент1");


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

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписокКлиентовСрезПоследних.Наименование,
| СписокКлиентовСрезПоследних.Группа,
| МАКСИМУМ(СписокКлиентовСрезПоследних.ДатаПолученияПрайса) КАК ДатаПолученияПрайса
|ИЗ
| РегистрСведений.СписокКлиентов.СрезПоследних КАК СписокКлиентовСрезПоследних
|
|СГРУППИРОВАТЬ ПО
| СписокКлиентовСрезПоследних.Наименование,
| СписокКлиентовСрезПоследних.Группа";

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

ТабДок.Вывести(ОблЭлемент1);
КонецЕсли;
//ТабДок.Вывести(ОблЭлемент1);
Количество = 0;
Количество1 = 0;
Выборка.Сбросить();
КонецЦикла;

Теги:

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

Рейтинг@Mail.ru

Поиск