Благодаря возможностям Йоксель в отчете есть структура документа (есть возможность свернуть/развернуть группы строк) которая сохраняется при сохранении в формат Excel.
Внедрение занимает около 5-10 минут на отчет, подходит для всех отчетов, в которых есть Процедура ВывестиГруппировку (15 отчетов в ТИС).
Благодаря выходу в свет новой версии Йокселя, (огромная благодарность за это Ужасу Бухгалтера) внедрение стало еще проще, быстрее и в большей степени соответствует поведению стандартных отчетов 1С. Стала возможна работа кнопок "Обновить" и "Расшифровка" т.е. внедрение компоненты в форму больше не требуется, (первоначальный вариант с внедрением в форму + использование formex есть в примере).
Требует внешнюю компоненту: Йоксель версии не ниже 01.01.04. ВК в "Ведомость по Контрагентам Йоксель" не вложена. Раздобыть ее можно на домашней странице автора компоненты: http://yoksel.net.ru/HomePage (самые последние версии компонеты на странице: http://yoksel.net.ru/Hotfixes).
Изменения:
15.01.09 Исправлена ошибка в некорректной работе кнопки "Расшифровка" и "Обновить", спасибо за обнаружение ошибки Sagittarius и Winter.
P.S. Благодарности отсылайте разработкику ВК Йоксель
Внедрение: Сохраняем отчет как внешний и открываем его на редактирование.
- На слой «Подвал» помещаем флажок с идентификатором «СтандартныйРежим», он будет использоваться для возможности отката к стандартному режиму отчета.
- В начало модуля добавляем переменные:
Перем ГруппыСтрок,ПанельИнструментов;
- В процедуре ПриОткрытии ищем строки
Если Обновить <> 0 Тогда
Таб = глТаблица;
КонецЕсли;
Меняем на:
Если Обновить <> 0 Тогда
Таб = глТаблица;
ПанельИнструментов = глТаблица;
КонецЕсли;
- В конец процедуры ПриОткрытии добавляем
Попытка
ТабличныйДокумент=СоздатьОбъект ("ТабличныйДокумент");
Исключение
Если ЗагрузитьВнешнююКомпоненту ("SpreadSheet.dll")=0 Тогда
Сообщить("Не удалось загрузить компоненту Йоксель. "
"Компонента должна быть в каталоге BIN 1С или в каталоге базы данных. "
"Скачать компоненту можно на сайте http://yoksel.net.ru");
СтандартныйРежим=1;
КонецЕсли;
КонецПопытки;
- В конце процедуры ВывестиГруппировку меняем строки
// если есть более детальная группировка - выведем ее
Если КоличествоГруппировок > Ном Тогда
ВывестиГруппировку(Запрос,Ном+1);
КонецЕсли;
Меняем на:
// если есть более детальная группировка - выведем ее
Если КоличествоГруппировок > Ном Тогда
НачалоГруппы = Таб.ВысотаТаблицы()+1;
ВывестиГруппировку(Запрос,Ном+1);
ОкончаниеГруппы = Таб.ВысотаТаблицы();
Если НачалоГруппы <= ОкончаниеГруппы Тогда
ГруппыСтрок.НоваяСтрока();
ГруппыСтрок.Начало = НачалоГруппы;
ГруппыСтрок.Окончание = ОкончаниеГруппы;
КонецЕсли;
КонецЕсли;
- В процедуре Сформировать ищем строки
Расшифровка = СоздатьОбъект("СписокЗначений");
Расшифровка.Установить("Отчет", "ВедомостьПоКонтрагентам");
Меняем на:
Расшифровка = СоздатьОбъект("СписокЗначений");
Путь = "";
ИмяФайла = "";
РасположениеФайла(Путь,ИмяФайла);
ФайлОтчета = Путь + ИмяФайла;
Расшифровка.Установить("Отчет", ?(ПустоеЗначение(ФайлОтчета) = 1,"ВедомостьПоКонтрагентам", ФайлОтчета));
- В процедуре Сформировать ищем строки
// ВЫВОД ГРУППИРОВОК ЗАПРОСА
ВывестиГруппировку(Запрос,1);
Меняем на:
// ТЗ с группировками для Yoxcel
ГруппыСтрок=СоздатьОбъект ("ТаблицаЗначений");
ГруппыСтрок.НоваяКолонка ("Начало", "Число");
ГруппыСтрок.НоваяКолонка ("Окончание", "Число");
// ВЫВОД ГРУППИРОВОК ЗАПРОСА
ВывестиГруппировку(Запрос,1);
- В процедуре Сформировать ищем строку
Таб.Показать("Ведомость по контрагентам","");
Меняем на:
Если СтандартныйРежим=1 Тогда
Таб.Показать("Ведомость по контрагентам", "");
Иначе
Если ТипЗначенияСтр(ПанельИнструментов) <> "Йоксель.ПанельИнструментов" Тогда
Документ = СоздатьОбъект ("ТабличныйДокумент");
Иначе
Документ = ПанельИнструментов.Документ;
Документ.Очистить ();
КонецЕсли;
Документ.ЗагрузитьИзТаблицы(Таб);
Если ТипЗначенияСтр(ПанельИнструментов) <> "Йоксель.ПанельИнструментов" Тогда
Фрейм = Документ.Показать("Ведомость по контрагентам");
Фрейм.ОтображатьСтруктуру(1);
Фрейм.ОтображатьКнопкиУровней(1);
Панель = Фрейм.ПанельИнструментов;
Панель.Видимость = 1;
// Обратите внимание если у Вас переписана ОбработкаЯчейкиТаблицы и ее события то следущие
// строки нужно привести к тому виду, какой он должен быть в Вашей конфигурации!
Панель.ПодписатьсяНаСобытие("ОбработкаЯчейкиТаблицы", "ОбработкаЯчейкиТаблицы", 1);
Иначе
Панель = ПанельИнструментов;
КонецЕсли;
Кнопка = Панель.ДобавитьКнопку("Обновить");
Кнопка.Заголовок = "Обновить";
Кнопка.Значение = РасшифровкаОбновить(1);
Кнопка = Панель.ДобавитьКнопку("Настройка");
Кнопка.Заголовок = "Настройка";
Кнопка.Значение = РасшифровкаОбновить(2);
Документ.УдалитьСтроки(1,2); // Удаляем Настройка и Обновить
// Установка группировок строк
ГруппыСтрок.ВыбратьСтроки();
Пока ГруппыСтрок.ПолучитьСтроку () = 1 Цикл
Документ.ДобавитьГруппуСтрок(ГруппыСтрок.Начало-2,ГруппыСтрок.Окончание-2);
КонецЦикла;
// Свертка всех группировок Йоксель
Для инд = -Документ.КоличествоУровнейГруппировкиСтрок() По -1 Цикл
Документ.ПоказатьУровеньГруппировокСтрок (-инд);
КонецЦикла;
Документ.ОбновитьВсеОтображения();
КонецЕсли;
Вот и все. Если все сделано аккуратно, и ничего не упущено, отчет переведен на работу с Йоксель.
P.S. Этот вариант конечно не идеальный, но я пытался для простоты понимания обойтись минимум изменений кода отчета.
P.P.S. Некоторые отчеты Вам возможно потребуется немного доработать. Например при нажатии кнопки "Инвентаризация" в отчете "ОстаткиТМЦ" потребуется установить СтандартныйРежим=1 и т.п.