Когда в итоговой таблице больше 2 параметров иногда хочется вывести
на печать в более удобном читаемом виде
например
по вертикали номенклатура -по горизонтали : места хранения
по вертикали номенклатура -по горизонтали : документы
по вертикали действия пользователя -по горизонтали : пользователь
и.т.д.
Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".
Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77.
Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.
При программировании на платформе V7 достаточно часто возникает задача создать несколько табличных частей документа (или справочника). Традиционно эта задача имеет несколько решений..
ТекНом="";
ТекКолонка=ТзМод.КоличествоСтрок();
ТзВрем.ВыбратьСтроки();
Пока ТзВрем.ПолучитьСтроку() = 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% на первоначальную свертку исхТЗ.Свернуть("Номенклатура,Модель","Колво");
Далее все меньше процента таб.показать,присоединитьсекцию.....
Так что не вижу особого смысла в дальнейшей оптимизации...
если все время уходит на визуализацию.....