Когда в итоговой таблице больше 2 параметров иногда хочется вывести
на печать в более удобном читаемом виде
например
по вертикали номенклатура -по горизонтали : места хранения
по вертикали номенклатура -по горизонтали : документы
по вертикали действия пользователя -по горизонтали : пользователь
и.т.д.
Скачать файл
ВНИМАНИЕ:
Файлы из Базы знаний - это исходный код разработки.
Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы.
Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных.
Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Часто встречающаяся проблема: потерялось Окно сообщений. Обработка исправляет эту "проблему" одним нажатием кнопки. Для обычных пользователей. Не требует программирования. Достаточно запустить обработку и нажать кнопку "Выполнить".
Создание и использование на формах в среде 1С 7.7 прогрессбара, индикатора, как в 1С 8.Х для контроля над длительными процессами. Реализовано средствами языка программирования 1С 7.7.
Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".
Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77.
Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.
ТекНом="";
ТекКолонка=ТзМод.КоличествоСтрок();
ТзВрем.ВыбратьСтроки();
Пока ТзВрем.ПолучитьСтроку() = 1 Цикл
Если ТзВрем.Номенклатура<>ТекНом Тогда
Если ТзВрем.НомерСтроки>1 Тогда
Для х=ТекКолонка По ТзМод.КоличествоСтрок() Цикл
ит=0;
ТП.ПрисоединитьСекцию("Строка|Модель");
КонецЦикла;
стр="";кол="";
ТзНом.НайтиЗначение(ТекНом,стр,кол);
ИтМод=ТзНом.ПолучитьЗначение(стр,"Колво");
ТП.ПрисоединитьСекцию("Строка|Итого");
КонецЕсли;
ТП.ВывестиСекцию("Строка|Основа");
ТекНом=ТзВрем.Номенклатура;
ТекКолонка=1;
КонецЕсли;
стр="";кол="";
ТзМод.НайтиЗначение(ТзВрем.Модель,стр,кол);
Пока ТекКолонка<стр-1 Цикл
ит=0;
ТП.ПрисоединитьСекцию("Строка|Модель");
ТекКолонка=ТекКолонка+1;
КонецЦикла;
ит=ТзВрем.Колво;
ТП.ПрисоединитьСекцию("Строка|Модель");
ТекКолонка=ТекКолонка+1;
КонецЦикла;
Для х=ТекКолонка По ТзМод.КоличествоСтрок() Цикл
ит=0;
ТП.ПрисоединитьСекцию("Строка|Модель");
КонецЦикла;
если на данном примере сравнить мой, Ёпрст и твой вариант
мой - 0,0312
Ёпрст - 0,0402
nikakoy - 0,02398
НО ! если добавить колонок в задание (до 256)
//нет времени попробовать
// в (18) нужно две строки закоментировать
// //ном=СоздатьОбъект("СписокЗначений");
// //мод=СоздатьОбъект("СписокЗначений");
// так они уже есть на форме
Если ТЗ.ВидимостьКолонки("ХренЗнаетКакойИдентификатор",1)=-1 Тогда
Сообщить("Нету в тз такой колонки");
Иначе
Сообщить("присутствует однако");
КонецЕсли;
у меня на форме только тз.... и весь код при открытии нужен для автоматического заполнения тз....
Смысл в правильной(требуемой) сортировке и последующем создании необходимого числа свернутых табличек.....
Ёпрст 70
nikakoy 79
а выигрыш на
"исхТЗ.Выгрузить(врТЗ);
исхТЗ.Выгрузить(ТЗСлуж);"
из таблицы - переменной
по сравнению с
"тз.Выгрузить(ТзМод);
тз.Выгрузить(ТзНом);"
из таблицы формы....
а по идее не должно...
У тебя вложенный цикл по таблице моделей, у меня поиск по ней же...
мой должен быстрее работать... счас посмотрим...
Другой разницы не увидел!!! ;-))
(36) в (27) что ты выложил посмотрела. Спасибо за объединенный тест.
Только вот чуть-чуть ты там смухлевал )))
в мой процедуре -ты забыл инициализировать переменную НАЧАЛО
Начало = _GetPerformanceCounter(); И поэтому у меня там дикий результат :)
Спасибо за активное участие , я в (17) тебе сказала что твой метод после 36 столбцов быстрее будет работать.
Тема называется "Пример как развернуть таблицу печати в горизонтальном виде " а не как быстрее это сделать.
Есть четвертый метод - вечером поставаюсь добавить.
Наверно заблуждался.... еще заполняется..... проверим!!!!
Где-то здесь виде ВК по индексированным таблицам, но у нас вечная контра с сисадмином... :-((... и лишние ВК ему как нож по всем частям!!!!
(41) :) так там (в 27) твой вариант "ТЗВрем.ВидимостьКолонки(СокрЛП(ТекМод),1)=-1 "
я подругому предлага
//это не мой код
Процедура СССР()
Перем ЗагКол;
Начало = _GetPerformanceCounter();
Если ТЗ.КоличествоСтрок()=0 Тогда
Сообщить("Таблица комплектации пустая - нет данных для печатит");
Иначе
//создадим ТЗ с одной колонкой ВЕРТИКАЛЬНОЙ
ТЗврем=СоздатьОбъект("ТаблицаЗначений");
ТЗВрем.НоваяКолонка("Номенклатура");
//создадим список - для хранения колонок
Сверток=СоздатьОбъект("СписокЗначений");
КолКол=1;
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТекМод=ТЗ.Модель;
НСтолба=0;
Счет=0;
//проверим если колонка с таким заголовком
Если ТЗВрем.ВидимостьКолонки(СокрЛП(ТекМод),1)=-1 Тогда
КолКол=КолКол+1; //увеличиваем счетчик
Сверток.ДобавитьЗначение(КолКол,ТекМод); //и добавим значение в список
ТЗврем.НоваяКолонка(,"Число",10,0,СокрЛП(ТекМод),,,); //новая колонка с заголовком новой модели
НСтолба=КолКол;
КонецЕсли;
( и в шапке все варианты рабочие - разный подход, разная скорость у пользователя должен быть выбор всегда) Тем и прекрасно программирование в 1С - что почти всегда задачу можно решить разными способами и чем больше ты способов знаешь тем лучше. Разве я не права ?
(48) это вопрос сам себе задаешь ?
ты вызываешь процедуру из своей разработки (в которой все перемашал вкучу)
и спрашиваешь почему так получилось (хочешь угадаю на какую кнопку ты нажимал ?)
Это после переделки
Процедура nikakoy()
Начало = _GetPerformanceCounter();
ТзМод=СоздатьОбъект("ТаблицаЗначений");
ТзНом=СоздатьОбъект("ТаблицаЗначений");
ТзВрем=СоздатьОбъект("ТаблицаЗначений");
Для к =1 По ВсегоСтрок Цикл
randomize();
ТЗ1.НоваяСтрока();
ТЗ1.Модель = Мод.ПолучитьЗначение(random(ВсегоМоделей));
ТЗ1.Номенклатура = Ном.ПолучитьЗначение(random(ВсегоНоменклатуры));
ТЗ1.Колво = random(1000);
Состояние(к);
КонецЦикла;
тз1.Выгрузить(тз);
КонецПроцедуры // Заполгить
заполнения на 1000000 в первоначальном варианте так и не дождался!!!!
У нас 1спп не стоит....
Обычно использую ГлПустаяТаблица.Выгрузить(ТаблицаКредитовПоВеткам);
55% уходит на первоначальную выгрузку ТЗ.Выгрузить(исхТЗ);
44% на первоначальную свертку исхТЗ.Свернуть("Номенклатура,Модель","Колво");
Далее все меньше процента таб.показать,присоединитьсекцию.....
Так что не вижу особого смысла в дальнейшей оптимизации...
если все время уходит на визуализацию.....