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

Как отобрать "Следующие" записи?

Автор jobsdata, 04 мар 2020, 11:14

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

jobsdata

Добрый день.
Сильно не ругайтесь, я из "стажеров".

Есть Справочник.Сотрудники, в нем 70 записей (фамилий).

Есть запрос:

&НаКлиенте
Процедура Печать(Команда)
Печ();
КонецПроцедуры

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

Пока Выборка.Следующий() Цикл
ОблСтрока.Параметры.Фамилия = Выборка.ФИО;
ОблСтрока.Параметры.Телефон = Выборка.Телефон;
ТабДок.Вывести(ОблСтрока);
КонецЦикла;

ТабДок.Показать("Телефонный справочник");

Возврат ТабДок;
КонецФункции;





   
   
   
   
   
Сюда попадаютпервые 40 записей---------------------Как сюда впихать оставшиеся записи?
Петров А.С.111-11-11               ????????????????????
Сидоров А.С.111-11-11               ????????????????????
Иванов А.С.111-11-11               ????????????????????
...............................и так далее               ................................

Грубо говоря на листе А4 в альбомном варианте, есть 2 таблички. В левую табличку я вставляю 40 записей (по высоте листа), оставшиеся 30 записей хочу вставить в правую таблицу.

Не могу найти/сообразить как в запросе или в цикле правильно написать что то типо
Если Выборка = 40 Тогда
    Область1.Вставить 40 записей
Иначе
    Оставшиеся 30 Область2.Вставить


Или в запросе как то получить выборку с 41 позиции...

Подскажите, уважаемые программисты, куда копать?

ef0din

Цитата: jobsdata от 04 мар 2020, 11:14
Добрый день.
Сильно не ругайтесь, я из "стажеров".

Есть Справочник.Сотрудники, в нем 70 записей (фамилий).

Есть запрос:

&НаКлиенте
Процедура Печать(Команда)
Печ();
КонецПроцедуры

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

Пока Выборка.Следующий() Цикл
ОблСтрока.Параметры.Фамилия = Выборка.ФИО;
ОблСтрока.Параметры.Телефон = Выборка.Телефон;
ТабДок.Вывести(ОблСтрока);
КонецЦикла;

ТабДок.Показать("Телефонный справочник");

Возврат ТабДок;
КонецФункции;





   
   
   
   
   
Сюда попадаютпервые 40 записей---------------------Как сюда впихать оставшиеся записи?
Петров А.С.111-11-11               ????????????????????
Сидоров А.С.111-11-11               ????????????????????
Иванов А.С.111-11-11               ????????????????????
...............................и так далее               ................................

Грубо говоря на листе А4 в альбомном варианте, есть 2 таблички. В левую табличку я вставляю 40 записей (по высоте листа), оставшиеся 30 записей хочу вставить в правую таблицу.

Не могу найти/сообразить как в запросе или в цикле правильно написать что то типо
Если Выборка = 40 Тогда
    Область1.Вставить 40 записей
Иначе
    Оставшиеся 30 Область2.Вставить


Или в запросе как то получить выборку с 41 позиции...

Подскажите, уважаемые программисты, куда копать?
[/b]



Может стоит получить сразу все, которые нужны. А в цикле считать количество, и , когда больше, чем 40, использовать метод "Присоединить". Про "присоединить" почитайте сами лучше, уже не помню точно, как я делал. Кажется, присоединял к полученной области, а потом уже выводил ее. Если в этом не ошибаюсь - получаете области, нумеруете их разными значениями переменных, поочередно присоединяете к ним в случае итератора цикла больше сорока ,а, когда уже все добавите - выводите их в табличный документ.

jobsdata

Цитата: ef0din от 04 мар 2020, 11:29
Может стоит получить сразу все, которые нужны. А в цикле считать количество, и , когда больше, чем 40, использовать метод "Присоединить". Про "присоединить" почитайте сами лучше, уже не помню точно, как я делал. Кажется, присоединял к полученной области, а потом уже выводил ее. Если в этом не ошибаюсь - получаете области, нумеруете их разными значениями переменных, поочередно присоединяете к ним в случае итератора цикла больше сорока ,а, когда уже все добавите - выводите их в табличный документ.

Имеете ввиду в цикле Выборка.Количество() ?

ef0din

Цитата: jobsdata от 04 мар 2020, 11:33
Цитата: ef0din от 04 мар 2020, 11:29
Может стоит получить сразу все, которые нужны. А в цикле считать количество, и , когда больше, чем 40, использовать метод "Присоединить". Про "присоединить" почитайте сами лучше, уже не помню точно, как я делал. Кажется, присоединял к полученной области, а потом уже выводил ее. Если в этом не ошибаюсь - получаете области, нумеруете их разными значениями переменных, поочередно присоединяете к ним в случае итератора цикла больше сорока ,а, когда уже все добавите - выводите их в табличный документ.

Имеете ввиду в цикле Выборка.Количество() ?

Наверно даже любопытнее будет через массив попробовать.
Допустим:

МассВыводимыхСтрок = Новый Массив;
Пока Выборка.Следующий() Цикл

ВыводимаяСтрока = Макет.ПолучитьОбласть(Строка);
//Заполняем строку
МассВыводимыхСтрок.Добавить(ВыводимаяСтрока);
КонецЦикла

ТекНомер = 0;
Пока НЕ (ТекНомер + 1) > 40 Цикл
ТабДок.Вывести(МассВыводимыхСтрок.Получить(ТекНомер));
ТекСч = 1;
Пока НЕ ТекСч > (Цел(МассВыводимыхСтрок.Количество() / 40) + 1) Цикл
Если (ТекСч*40 + (ТекНомер - Цел(ТекНомер/40) + 1)) > МассВыводимыхСтрок Тогда
Прервать;
Иначе
ТабДок.Присоединить(МассВыводимыхСтрок.Получить(ТекСч*40 + (ТекНомер - Цел(ТекНомер/40) + 1)))
КонецЕсли;
КонецЦикла;
КонецЦикла;




Примерно что-то такое попробовать можно.

И вот что еще: когда шапку тч выводите так же нужно будет рассчитать сколько раз по горизонтали ее вывести нужно. Это будет целое от деления количества строк в массиве + 1, если результат этого деления не равен его целому. Если равен - тогда просто целое от деления.
Добавлено: 04 мар 2020, 12:37


Можно, кстате, попробовать подобным же образом, но через таблицу значений. При этом, в случае каждого нового "40го цикла" добавлять колонку, обзывать ее по шаблону, что-то типа: ""ДопКолонка" + Индекс." А при выводе проходить по строкам таблицы значений, значение основной колонки выводить, а далее проверять по шаблону наличие каждой следующей колонки и, в случае ее наличия и не пустого значения, - присоединять.

Теги:

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

Рейтинг@Mail.ru

Поиск