Благодаря возможностям Йоксель в отчете есть структура документа (есть возможность свернуть/развернуть группы строк) которая сохраняется при сохранении в формат 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 и т.п.
Кстати хотел рассказать об очень «интересном» поведении 1С+Йоксель (у меня инет ограничен так что вынужден сюда писать может передашь это Uzhast-у).
Так вот если выводить кнопки по уровням (аля как в Excel для быстрой свертки) 1С можно уронить следующими действиями.
1. Разворачиваем «большую» группу (чтобы строк было столько когда на экран не вмещается)
2. Прокручиваем позицию ячейки таким образом чтобы и кнопочка +- была скрыта и окончание блока тоже. Т.е. серединка блока например.
3. Нажимаем на кнопку свертки всего уровня.
У меня далее 1С зависает и падает ножками вверх.
Спасибо автору! 🙂 А то я все пытался сделать комплект отчетов с группами для ТиС. Теперь это будет проще 🙂
(1) Можешь описать подробнее, как добиться появления ошибки? Я, например, делаю так: открываю форму «Структура документа», включаю отображение структуры и кнопок уровней. Добавляю группу строк 3-50. Прокручиваю документ так, чтобы не были видно ни кнопку сворачивания, ни конец группы. Нажимаю кнопку «1». Все работает корректно. Кстати, наверное, лучше, если подобные вещи будем дальше обсуждать здесь:http://yoksel.net.ru/forum/
Давно заменил всё на йоксель, правда с фреймами….пока.
(2) Будет ли возможность как в экселе сворачивать /разворачивать все группы …типа кнопок сверху ?
блин …(3) снимается… 🙂
(3) Кстати, если это ты на сайте аналогичный вопрос задавал, то я там еще про проблемный файл ответил — хотелось бы разобраться, что там за фигня 🙂
(3) С фреймами скоро будет немного получше 🙂
(5) Да это я…
могу кинуть куда нить…
Еще вопрос — будут ли расшифровки на внедренных объектах, типа Текст и т.д ?
ЗЫ: Автор, звиняйте за оффтопик, ваша метода оч. полезна.
Я правда сворачивал вместе с группами, т.е. если группы попадают (детализация с группами номенклатуры. к примеру,) — объединял их в одну «группу».
+7 зарегился на форуме, туда баги запостю… и файло прикреплю.
(7) «Еще вопрос — будут ли расшифровки на внедренных объектах, типа Текст и т.д ?» Будут, но точное время сказать не могу.
PS. Да, автор, тоже извини за оффтопик 🙂
(3) Ёпрст, ты говоришь, что всё на йоксель перевёл. А как у тебя ведут себя пользователи, если в ширину колонки не умещаются все цифры, или наоборот: она слишком широкая? В йокселе сейчас нельзя интерактивно изменять ширину и высоту колонок. (
(10) Высоты колонок не бывает 🙂
Если не помещаются цифры, то можно попробовать выкрутиться через автонастройку ширины колонки. Например, делать автонастройку сразу после формирования отчета. Или предусмотреть возможность, когда пользователь по клику в заголовке колонки сможет запустить эту автонастройку (через обработку расшифровки).
Но обычно отчеты делают так, чтобы юзеру не требовалось подкручивать ширину колонок 🙂
(11) Да, не спорю, что лучше всего делать так, чтобы ширину не приходилось подкручивать. Но, млин, если делать один и тот же отчет за неделю и за квартал, то цифры будут ой как разниться, а если выбирать «примерно наибольшую», то с маленькими цифрами вся эта байда выглядит очень некрасиво.
С автонастройкой ширины по клику на названии — идея хорошая, надо будет попробывать.
(10) на это забил + оставил штатный отчет (галкой).
Единственное, чего не хватает — ПовторятьПриПечатиСтроки…
+12 Пока просто всех юзверей еще предупредил — тестите ошибки 🙂
Все пока довольны.
из минусов — М,М+,М- не работает, если фрейм — то без доп усилий, что либо поменять — болт…
да и так, по мелочи 🙂
+ во фрейме организовать кнопки Обновить и Настройка тоже тот еще подарок 🙂
Зато многие спец формы, типа деклараций на ура, за счет событий..
(7) Я пробовал сворачивать с группами справочников, мне не очень понравилось. Дерево группировок получается, на мой взгляд, довольно непонятное и теряется смысл в свертке/развертке всех групп 2го (или еще какого нибудь) уровня.
(14) То, что «по мелочи» тоже пиши 🙂
(15) «во фрейме организовать кнопки Обновить и Настройка тоже тот еще подарок»
Это как раз будет основной темой нашей следующей серии, которая выйдет уже на днях 🙂
(16) Не ..просто в стандартных отчетах нужно переделать макет, чтоб иерархия была «лесенкой» , а не как щас — всё в первом столбце. Тогда будет видна вся структура более наглядно. А как у вас щас — получаются » разрывы» … Типа группы лишние..
Я посмотрел и так и сяк, оставил, чтоб группы тоже объединял.
Имхо.
Вот вы всё «фрей-фрейм», а я не могу понять в чём фишка? Зачем? Какие преимущества?
(19) Привычнее? Специфичная менюшка для таблиц? (у элемента на форме такого меню нет). А вообще, конечно, да. В 8.х там в основном отчеты в таблицах на форме сидят.
(19) Юзверю так проще 🙂 Привычка — страшное дело, + если нужно слепить 2/3 отчета с разными параметрами, что делать будешь?
(20) Всё равно не въеду. Можно как-нить поподробнее. Что привычнее? Какая менюшка? Что такого можно сделать во фрейме, чего нельзя сделать в ЭУ?
Разве что закладки с новой Таблицей лепить на форме…
(22) Это менюшки под пунктами «Таблица», «Вид» и «Действия».
(21) {Сначала не заметил, что уже новая страница пошла.}
А про 3 отчета с разными параметрами расскажи — интересно (точнее пока тоже непонятно). Что ты делаешь? В 3-х отчетах сформировал по табличке, а потом всё это в одну?
(24) Из всех этих менюшек моим юзерам нужен только поиск по таблице. Смотрю твою демку, во фрейме оно не активно.
(25) Наверное, имеется в виду, что отчет, скажем, формируется за 3 разных периода. Чтобы их между собой сравнивать. Или там с фильтрами другими…
(27) «Смотрю твою демку, во фрейме оно не активно.»
Да уж знаю… 🙂
(25) Разные настройки, периоды, потом «сравнивают» … Типа ОСВ Долгов по клиентосам и т.д…. Довольно таки часто все так делают.
Один хрен, автору ВК спасибо за группировки.
Имхо, с их появлением йоксель будет внедряться в массы с огромной скоростью.
(26, 25) Понял, спсб.
Тогда другой вопрос: Ёпрст, ты как в Йоксель выводишь? Сначала выводишь всё в стандартную таблицу, а потом, не показывая её, загружаешь в Йоксель?
(28) Прям тока хотел спросить: будет/возможен поиск по таблице как во фрейме, так и в ЭУ?
(30) Не за что 🙂
(31) Буду стремиться, чтобы везде работало.
(31) да.
Попробовал перевести, отчет не из конфы от 1с на йоксель, всё заработало, (группировк там не было). Но с расшифровкой есть ньанс, расшифровка в отчете юзается глобальная, и там используется формексовский Сервис.ВыбратьЗначение … вот листинг ошибки
Если _Сервис.ВыбратьЗначение(Меню,Отчет) = 0 Тогда
{Глобальный модуль(391)}: Возникла критическая ошибка. Описание ошибки, возвращаемое Windows: Операция успешно завершена.
Иногда ВК между собой не дружат. Есть такое дело ;(
Тест написан, приложен в твоей баге на yoksel.net.ru
Проблему совместимости с FormEx постараемся решить совместно в ближайшее время.
Классная штука. Но вот есть одно но… Пытаюсь применить метод «АвтоподборШириныКолонки». Перед этим выбираю область. Мне нужно область значений ниже шапки. Выбираю область. Даю команду «АвтоподборШириныКолонки». Выравнивание идет не только по этой области, идет захват строк, выше выбранной обсласти. Я так понимаю, что этот метод аналогичен двойному щелчку в Экселе на разделители между адресами колонок. Тогда непонятно, зачем указывать начальную строку, если все равно отформатироруются все строки в выбранном диапазоне колонок?
И еще одно. попытался применить метод «Защита»:
Фрейм = Документ.Показать(«Выпуск продукции»);
Фрейм.ОтображатьСтруктуру(1);
Фрейм.ОтображатьКнопкиУровней(1);
Фрейм.Защита (0);
И выходит ошибка: Поле агрегатного объекта не обнаружено (Защита). Может что-то делаю неправильно?
Классная штука. Но вот есть одно но… Пытаюсь применить метод «АвтоподборШириныКолонки». Перед этим выбираю область. Мне нужно область значений ниже шапки. Выбираю область. Даю команду «АвтоподборШириныКолонки». Выравнивание идет не только по этой области, идет захват строк, выше выбранной обсласти. Я так понимаю, что этот метод аналогичен двойному щелчку в Экселе на разделители между адресами колонок. Тогда непонятно, зачем указывать начальную строку, если все равно отформатируются все строки в выбранном диапазоне колонок?
И еще одно. попытался применить метод «Защита»:
Фрейм = Документ.Показать(«Выпуск продукции»);
Фрейм.ОтображатьСтруктуру(1);
Фрейм.ОтображатьКнопкиУровней(1);
Фрейм.Защита (0);
И выходит ошибка: Поле агрегатного объекта не обнаружено (Защита). Может что-то делаю неправильно?
Глубочайшее уважение разработчикам ВК и автору данной темы за проведенную работу, как обычно есть маленькие косячки:
1) кнопки «Обновить» и «Настройка» работают не совсем корректно. Если в построенном отчете нажать «Настройка» и, например, изменить период отчета, то новый отчет сформируется с новым периодом, но если после этого нажать «Обновить», то отчет перестраивается с начальным периодом. Происходит это из-за того что проверка
>Если ТипЗначенияСтр(ПанельИнструментов) <> «Йоксель.ПанельИнструментов» Тогда<
выполняется только первый раз при создании фрейма в самый первый раз, остальные действия с «Обновить» и «Настройка» не вызывают перезаполнения значений кнопок новыми значениями расшифровок:
Кнопка = Панель.ДобавитьКнопку(«Обновить»);
Кнопка.Заголовок = «Обновить»;
Кнопка.Значение = РасшифровкаОбновить(1);
Кнопка = Панель.ДобавитьКнопку(«Настройка»);
Кнопка.Заголовок = «Настройка»;
Кнопка.Значение = РасшифровкаОбновить(2);
Предлагаю вынести данный код за пределы проверки типа значения переменной «ПанельИнструментов».
(39) Я так же сталкнулся с этой проблемой. Все решается очень просто:
Кнопка = Панель.ПолучитьКнопкуПоИдентификатору(«Обновить»);
Кнопка.Значение = глРасшифровкаОбновить(1);
Кнопка = Панель.ПолучитьКнопкуПоИдентификатору(«Настройка»);
Кнопка.Значение = глРасшифровкаОбновить(2);
(38) Насчет автоподбора ширины. Да, указание строк области ни на что не влияет — учитываются только колонки. Это было сделано, потому что ставилась как раз цель сделать аналог двойного клика в Excel 🙂 Но, учитывая, что уже не первый раз упоминается необходимость учитывать строки при автоподборе, думаю, это можно будет сделать в одном из следующих релизов.
Насчет Защиты. Все делаете правильно, просто этот метод как-то незаметно пропал из Йокселя 🙂 Верну в ближайшем хотфиксе.
PS. Спасибо еще раз автору данной методики перехода. Теперь вот сижу, завидую, что сам не догадался сделать что-то подобное 🙂
Sagittarius, Winter. Спасибо за обнаружение косяков.
Обработку обновил по варианту от Sagittarius.
Кстати, тут выложили зачетную обработочку, которой в принципе можно штатные отчеты превращать в группировочные без изменения кода источника…
зачетно!
(43) И что самое удивительное, если приглядеться — то это тот-же автор!
:))
(44) Не оскудела еще земля богатырями!
(45) новый йоксель 10 марта вышел, если что..
пошел смотреть
(34) FormEx`овский Сервис.ВыбратьЗначение наконец заработал во Фрейме на последнем Йокселе. Только вместо
Сервис.ВыбратьЗначение(Список,Зн);
надо писать
Сервис.ВыбратьЗначение(Список,Зн,,,2);
еще бы вертикальнфе развороты приделать…
(49) Так ведь это не разработка в прямом смысле этого слова, а так, простенькое пособие по переходу на Йоксель. Перегружать пример лишним кодом думаю не стоит.
Кроме того, для вертикальных разворотов нужно в отчетах заводить дополнительные колонки на которые пойдет свертка, иначе в свернутом состоянии будет чепуха, а это уже выходит за рамки «простенького пособия» 😉
P.S. Для НовейшихОтчетов группировка кросс-таблиц во вертикали уже сделана в «Переход на Йоксель за 1 минуту».
Спасибо автору. До этого никогда не сталкивался с выводом таб части как в Ексель (группировки по уровням).
Спасибо Автору публикации!
Изложено всё очень понятно!
Спасибо Авторам внешней компоненты!
Всё работает на Ура!
Спасибо.
Переделал несколько отчетов и сразу появились хотелки у манагеров и руководства.
Допустим есть прайс с группировками.
Можно ли сделать возможность помечать некоторые позиции товара (запоминая их в список значений) с тем, что бы обработать?
(43)(44) можно ссылку? Что-то я не нашел в разработках автора или не так понял комментарий (43)
(54)http://infostart.ru/public/18989/