Процедура-плагин: Выгрузка в Йоксель для Новейшего отчета 7.7


Процедура дополняет Новейший отчет 7.7 с возможностью выгрузки созданного отчета в Йоксель (Excel) с группировками по строкам.

Одна из самых лучших систем отчетов Новейший Отчет 7.7 не имеет возможности выгрузки в Йоксель, в результате этого, после сохранения отчета в Excel группировки теряются. Приведенная процедура исправляет это досадное упущение.

Работает и с Демо-версией и с Коммерческой версией Новейшего отчета (если у Вас полная версия Новейшего отчета процедуру можно добавить непосредственно в NR_Navigator.ert).

Для работы требует Внешниюю компоненту:  Йоксель. (домашняя страница автора: http://yoksel.net.ru).

Порядок внедрения: процедуру добавляем в Глобальный модуль 1С, во внешнюю обработку Новейшего отчета NR_Navigator.ert добавляем кнопку Йоксель с формулой глВыгрузитьНовейшийОтчетВЙоксель(Таб)

Обновление от 19/12/08: не определялись группировки в кросс-таблицах.


Процедура глВыгрузитьНовейшийОтчетВЙоксель(Таб) Экспорт
 Перем Документ;
Перем ТЗ;
Перем Область;

Попытка
Документ = СоздатьОбъект ("ТабличныйДокумент");
Исключение
Если ЗагрузитьВнешнююКомпоненту("SpreadSheet.dll")=0 Тогда
Сообщить("Не удалось загрузить ВК Йоксель! Выгрузка невозможна.");
Возврат;
Иначе
Документ = СоздатьОбъект ("ТабличныйДокумент");
КонецЕсли;
КонецПопытки;


Документ.ЗагрузитьИзТаблицы(Таб);

ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Уровень");
ТЗ.НоваяКолонка("Начало");
ТЗ.НоваяКолонка("Конец");

НачалоТаблицы=1;
ВысотаТаблицы=Документ.ВысотаТаблицы();

// Определяем начало группировок
Для СтрИнд=НачалоТаблицы По ВысотаТаблицы Цикл
Область=Документ.Область(СтрИнд,1);
Если Область.Текст="1" Тогда
НачалоТаблицы=СтрИнд;
Прервать;
КонецЕсли;
КонецЦикла;

Если НачалоТаблицы>1 Тогда
// Загоняем все начала группировок в ТЗ
Для СтрИнд=НачалоТаблицы По ВысотаТаблицы Цикл
Для КолИнд=2 По 8 Цикл
Область=Документ.Область(СтрИнд,КолИнд);
Если (Область.Текст="-") Тогда
ТЗ.НоваяСтрока();
ТЗ.Уровень = КолИнд-1;
ТЗ.Начало = СтрИнд;
ТЗ.Конец = 0;
Прервать;
ИначеЕсли ПустоеЗначение(Документ.Область(СтрИнд,КолИнд).Текст)=0 Тогда
Если ПустоеЗначение(Документ.Область(СтрИнд-1,КолИнд).Текст)=1 Тогда
Если ПустоеЗначение(Документ.Область(СтрИнд-1,КолИнд+1).Текст)=0 Тогда
ТЗ.Конец = СтрИнд-1;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ПустоеЗначение(Документ.Область(СтрИнд,1).Текст)=1 Тогда
ТЗ.НоваяСтрока();
ТЗ.Уровень = 1;
ТЗ.Начало = СтрИнд;
ТЗ.Конец = 0;
Прервать;
КонецЕсли;
КонецЦикла;

// Определяем окончания группировок
КолВоСтрок=ТЗ.КоличествоСтрок();
Для инд1=1 По КолВоСтрок-1 Цикл
Уровень=ТЗ.ПолучитьЗначение(инд1,"Уровень");
Если ТЗ.ПолучитьЗначение(инд1,"Конец")=0 Тогда
Для инд2=(инд1+1) По КолВоСтрок Цикл
Если Уровень>=ТЗ.ПолучитьЗначение(инд2,"Уровень") Тогда
ТЗ.УстановитьЗначение(инд1,"Конец",ТЗ.ПолучитьЗначение(инд2,"Начало")-1);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ТЗ.УдалитьСтроку(КолВоСтрок);

// Устанавливаем группировки строк в Йокселе
ТЗ.ВыбратьСтроки ();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
Документ.ДобавитьГруппуСтрок(ТЗ.Начало+1,ТЗ.Конец);
КонецЦикла;

// Свертка всех группировок Йоксель
Для инд = -Документ.КоличествоУровнейГруппировкиСтрок() По -1 Цикл
Документ.ПоказатьУровеньГруппировокСтрок (-инд);
КонецЦикла;

КонецЕсли;

// Без СокрЛП Йоксель не распознает цифры
Для инд1=1 По Документ.ВысотаТаблицы() Цикл
Для инд2=1 По Документ.ШиринаТаблицы() Цикл
Область=Документ.Область(инд1,инд2);
Область.Текст=СокрЛП(Область.Текст);
КонецЦикла;
КонецЦикла;

Документ.Область().Расшифровка(,2);

Фрейм=Документ.Показать(Документ.Область(1,2).Текст);
Фрейм.ОтображатьСтруктуру(1);
Фрейм.ОтображатьКнопкиУровней(1);

КонецПроцедуры

 

12 Comments

  1. АЛьФ

    Круто!

    Reply
  2. support

    Вот это новость, неожиданно!

    Прикольно!

    Reply
  3. JohnyDeath

    (1,2) Даёшь полные версии Новейшего отчета Ужасту и Djelf!

    Reply
  4. CheBurator

    офигеть!

    Reply
  5. support

    Djelf полная версия есть?

    Reply
  6. Djelf

    Есть, спасибо. Я про «Таб» иначе наверное не догадался бы 😉

    Reply
  7. alexandrlevitsky

    Полезная вещица.

    Только просьба быть более толерантным к пользователям, которые ищут выгрузку в Excel, а не «Йоксель». Ну это так, вредничаю))

    Reply
  8. Djelf

    Да нет, все логично, Йоксель действительно пока еще не настолько популярен, чтоб его каждый знал. Добавил в заголовок «(Excel)» 😉

    Reply
  9. serpent

    Спасибо…

    Ждем внедрения в основную поставку.

    Reply
  10. astvit15

    спасибо большое

    Reply
  11. ARTEM123456

    спасибо большое

    Reply
  12. ARTEM123456

    Очень выручил

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *