gifts2017

Вывод и печать таблиц и списков значений для 1С 7.7

Опубликовал a exeel (aexeel) в раздел Программирование - Инструментарий

Платформа 7.7 имеет весьма скудные средства для просмотра таблиц и списков значений, что особенно сказывается при отладке решений. Данная обработка значительно расширяет данные возможности.

К возможностям обработки, помимо заявленных вывода и печати содержимого таблицы и списка значений, относятся:

  1. по DblClick на ячейке таблицы данных отображение содержимого вложенных таблиц и списков значений (открывается новая форма обработки)
  2. отображение структуры таблицы (выводятся только заполненные поля; поле «Заголовок» выводится только в случае если оно заполнено и есть хотя бы одно отличие от имени колонки) и типы значений списка
  3. отбор данных по заданным условиям по полям таблицы значений
  4. настройка сортировки таблицы значений
  5. настройка видимости колонок таблицы значений
  6. автоподбор ширины колонок в таблице на форме (по опции) и в печатной таблице
  7. расширенное представление значений: элемент справочника представляется по шаблону "Код | Наименование"; группа элементов — по шаблону "Код || Наименование"; документ, не зависимо от периодичности нумератора, — по шаблону "Представление (или идентификатор, если не задано) №НомерДок от ДатаДок"; строка заключается в кавычки
  8. если в таблице данных не задан тип поля, то в таблице структуры, для полей где поле "Тип" не заполнено, по DblClikck появляется контекстное меню, которое позволяет определить варианты типов для незаполненных реквизитов по табл. данных.

Баги на текущий момент:
В строке под таблицей данных (где выводится адрес текущей ячейки и расширенное представление текущего значения) данные могут не обновляться при переходе между колонками (проблема в том, что в этом случае не вызывается формула текстового поля).

Вместе с обработкой идет пример её использования.

Вызывать можно как из конфигуратора (можно и не модально), так и из отладчика. Делается это одной строкой (пример, когда обработка идёт как внешняя и лежит в корне диска С):

	ОткрытьФормуМодально("Обработка#", ТабЗн, "C:\ВыводУниверсальныхКоллекций.ert");

При вызове из конфигуратора можно передать в качестве параметра не просто таблицу значений, но и её заголовок и внутреннее имя обработки. Последнее необходимо для открытия вложенных таблиц и списков, когда обработка вызывается как внутренняя. Делается это следующим образом:

	СпПараметров = СоздатьОбъект("СписокЗначений");
	СпПараметров.Установить("ЗаголовокОбработки", "Номенклатура");
	СпПараметров.Установить("Данные", ТабЗн);
	СпПараметров.Установить("ИмяВнутрОбработки", "ВыводУниверсальныхКоллекций");
	ОткрытьФорму("Обработка.ВыводУниверсальныхКоллекций#", СпПараметров);

Буду благодарен за помощь в отлове багов (исправление, разумеется, на мне) и высказывание пожеланий. В планах есть дальнейшее развитие темы, так что следите за обновлениями.

Скачать файлы

Наименование Файл Версия Размер
ВыводУниверсальныхКоллекций.ert 393
.1251799697 200,50Kb
25.09.09
393
.1251799697 200,50Kb Скачать
ПримерИспользованияВыводаТЗ.ert 84
.1251799884 31,50Kb
25.09.09
84
.1251799884 31,50Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Епрст (Ёпрст) 01.09.09 18:57
>>>данные могут не обновляться при переходе между колонками
Это не бага, это многолетний баян..
Лечение - в одной строчке кода..
2. Сергей (Che) Коцюра (CheBurator) 01.09.09 19:52
(1) Типа как в кресте на ТЗ..?
3. Сергей (Che) Коцюра (CheBurator) 01.09.09 19:54
(0) Не вижу сохранений сделанных настроек вывода ТЗ - если я много раз вывожу одинаковую по структуре ТЗ - я что, не могу воспользоваться заранее сделанной в первый раз настройкой??? Низачот!!! ;-)
.
сформируй для ТЗ уникальный ИД из наименований и типов колонок - и используй его...
4. Анжелика Кривоносова (Angelike) 01.09.09 20:04
[от имени Aexeel (аккаунт залочен, почему-то)]
(1) Просто раньше не встречалось, вот и не знал. Исправлю, как разлочат. Спасибо за информацию.
(3) В плане доработок, но не на первом месте. Так часто пользуешься отборами? Обычно это разовая операция. Гораздо важнее просмотр подчиненных ТЗ. А это реализовано.
5. a exeel (aexeel) 01.09.09 20:20
Все разлочили. Счастье.
(3, 4) Аналогичная ситуация с сохранением списков сортировки и видимости колонок. Под это дело, кстати, создан неиспользуемый пока слой "Невидимый".
6. Михаил Семенов (Shaman100M) 02.09.09 08:15
(1) А как, интересно? Две невидимых кнопки на форму с горячими клавишами, или попроще?
7. Епрст (Ёпрст) 02.09.09 08:20
(6) проще.
Форма.Обновить в функции на тексте... Можно и по условию.
8. a exeel (aexeel) 02.09.09 09:28
(7) Проблема как раз в том, что формула ("функция на тексте") не вызывается.
9. a exeel (aexeel) 02.09.09 09:43
Обновил обработку. Изменения в текущей версии:
- исключена оставленная ранее отладочная информация;
- обработка больше не требует наличия в том же каталоге обработки-редактора условий отбора (в предыдущей версии она также не использовалась);
- при попытке вызова без указания в параметре формы списка или таблицы значений выдается соответствующее предупреждение и обработка не открывается;
- на закладках «Структура» и «Данные» выведены краткие подсказки.
10. Александр Рытов (Арчибальд) 02.09.09 10:05
Автор, послушайся Ёпрста и Чебура. Они плохому не научат ;))
11. a exeel (aexeel) 02.09.09 10:32
(10) Я сторонник политики Эппла: мнение пользователя, конечно, важно, но делать мы будем всё равно по-своему :))
А если серьезно, мнение Чебура, конечно, правильное — сохранению настроек быть. Но вот предложенное решение слегка поверхностное. ИД по имени-типу исключит отборы при незначительном изменении структуры (например, в процессе разработки добавили/удалили колонки, по которым отборы и не строились даже). К тому же, как я и написал раньше, пользоваться им будут единицы, а вот просмотр вложенных списков/таблиц куда более актуален. Да и сам отбор еще не до конца доделан. В следующем плановом обновлении будет отбор по (не)вхождению в список и в числовой интервал.
Ёпрсту был бы крайне признателен за рабочий пример. А то назвать проблему "баяном" и предложить нерабочее решение (заранее извиняюсь, если не правильно его понял) как-то не айс.
12. a exeel (aexeel) 02.09.09 11:20
Обновил пример использования. Теперь в нем можно выбирать способ вызова обработки обработки: из внешнего файла или внутренней обработки. В первом случае необходимо будет указать полное имя файла (можно выбрать в соответствующем диалоге), во втором — идентификатор обработки (можно выбрать из списка).
13. Епрст (Ёпрст) 02.09.09 14:35
(8) >>>(7) Проблема как раз в том, что формула ("функция на тексте") не вызывается.

Ну ё... Форма.Обновить() воткни - будет вызываться всегда..
14. a exeel (aexeel) 02.09.09 15:07
Форма.Обновить() — это процедура. Её нельзя "втыкать" в формулу элемента диалога "текст". Если же написать функцию, обычно её называют "ОбновлениеФормы()", то она не вызывается при переходе между колонками, по крайней мере у меня. Если опять чего-то не понял, то буду благодарен за ссылку на рабочий пример.
16. a exeel (aexeel) 02.09.09 17:44
(15) у себя проверял? уже несколько раз написал, что у меня не ловит перемещение между (!!!) колонками (!!!) таблицы на форме. При перемещении между строками той же таблицы все работает.
18. a exeel (aexeel) 02.09.09 18:42
(17) Ну начнем с того, что как я и говорил, "Форма.Обновить(0)" в формуле текстового поля не напишешь, т.к. это процедура, так что, хотя бы в этом признал бы свою неправоту. Во-вторых, отбросив серьезную нагрузку на процессор, при интерактивной работе с таблицей (это если поставить условие на активный элемент) в твоем случае, попробуй пробежаться курсором (переход мышкой или с клавиатуры, без разницы) по первой строке. У меня форма опять же не обновилась (видео выложу чуть позднее), так что это не выход.
Чтобы быть до конца уж откровенным, при последующем переходе между строками , работать стало.
19. Альтаир (Altair777) 02.09.09 18:47
(2) Ой, и меня упомянули. Мелочь, а приятно :-)
20. a exeel (aexeel) 02.09.09 19:37
(17, 18): аналогичная проблема с любой другой строкой, которая становится текущей при открытии формы. Добавление метода в "ПриОткрытии()", "ВводНового()" или модуль инициализации не помогает. Пробовал даже программно менять закладки и в "ПриВыбореЗакладки" вызывать обновление формы, но результат тот же.
Как вариант, делать активной ту закладку, на которой нет таблицы. Но это абсолютно не рациональная полумера.
21. Альтаир (Altair777) 02.09.09 19:50
(20) Юзайте Формекс "ПослеОткрытия()" и будет Вам счастье. :-)
22. a exeel (aexeel) 02.09.09 21:13
(21) Переход к использованию ВК равносильно отказу от универсальности. В этой обработке я стремлюсь, скорее, к последнему. А за "+" спасибо. Хоть я и не сторонник рейтинговых систем, но, ИМХО, она того стоит.
23. Епрст (Ёпрст) 03.09.09 08:34
(18) Детсад на марше ?
Не умеешь затавить обновится форму при открытии?
Чего, уже всё надо разжевывать?
24. Епрст (Ёпрст) 03.09.09 08:47
25. a exeel (aexeel) 03.09.09 09:30
(23, 24) Блин, круто. Не знал. Спасибо.
26. Артур Аюханов (artbear) 03.09.09 09:39
(22) Про ВК и отход от универсальности зря говоришь.
Как раз некоторые ВК и позволяют достичь универсальности :)
27. Артур Аюханов (artbear) 03.09.09 09:41
Посмотри автора ADirks здесь и/или на проклубе, у него давно уже есть отличный "Редактор ТЗ", в котором нами сделано очень многое, в т.ч. и просмотр, и печать, и редактирование ТЗ, СЗ и даже ИТЗ из 1С++.
28. a exeel (aexeel) 03.09.09 10:32
(26) Только давай без холивара на тему ВК :)) Согласен, они значительно расширяют функциональность, но вносят дополнительные требования к установленному набору. Даже если будешь постоянно носить все с собой (у военных, например, Интернет не подключен вообще), ни факт, что дадут права админа, чтобы это дело установить (фанатичная шизофреничность безопасников это обыденное явление).
(27) Это не редактор, а просмотр и работа с отборами/сортировками у меня реализована лучше, на большее пока не претендую.
29. Альтаир (Altair777) 03.09.09 11:04
(28) Не думаю, что с тем же FormEx'ом, например, могут быть проблемы при установке.
30. a exeel (aexeel) 03.09.09 11:16
(29) м.б., но в данном случае удалось решить проблему без его использования
31. Альтаир (Altair777) 03.09.09 11:31
(30) Я раньше тоже был противником ВК.
Первое, что пришлось использовать - это 1С++ и только ради одного метода ReconnectNative().
Но жизнь в лице заказчиков(работодателей) заставляет совершенстоваться.
И очень много вещей, которые в последнее время мне приходиться реализовывать, просто немыслимы без расширения функционала с помощью ВК.
Не потому, что я отучился по-другому, а просто потому что их нельзя сделать иначе.

Кстати, и в своей повседневной работе тоже тяжко без OpenConf, Телепат, Colorer и т.д.
32. a exeel (aexeel) 03.09.09 11:47
(31) OpenConf, Телепат, Colorer использую сам, благо влияют они только на процесс, а к конечному продукту они не имеют непосредственного отношения.

>> Я раньше тоже был противником ВК
Ты не совсем правильно понял. Я не являюсь противником ВК (особенно на внутренних проектах), но там, где без них можно обойтись, стараюсь обходиться. Кстати, внутренняя политика некоторых компаний (в т.ч. моей нынешней) запрещает их использование в разработке.

>> ReconnectNative()
Прям на больную мозоль стал :). Согласен, проблема реконнекта у нас решена не самым оптимальным способом. Но решена и прирост производительности есть.
33. Владимир Мелещенко (vligm) 03.09.09 11:56
Понравилось.
Есть пожелание - для документов сделать отбор по списку.
А еще лучше - по подчиненным для какого-либо дока.
Это так, на вскидку в ключе моих личных проблем :-)))
34. Альтаир (Altair777) 03.09.09 11:56
(32) А, понятно. Если запрещено, тогда да...

Но я вот думаю, что для всех остальных (в том числе для ИС) можно и с использованием ВК делать. По крайней мере, проверять загружена ли необходимая длл-ка.
И такая разработка, удет быстрее всего и красивее, и быстрее.
35. a exeel (aexeel) 03.09.09 12:10
(33)Спасибо за отзыв и "+"

>>отбор по списку
Вроде где-то в комментах упоминал. Первая в очереди (уже в процессе разработки т.е.). Скоро будет. Следите за обновлениями.

>>подчиненным для какого-либо дока
Тоже запланировано, но следующим этапом, т.к. связано со отбором по списку

(34) :) "там где можно обойтись, стараюсь обходиться".
Насчет быстрее/красивее очень спорно. Говорить о скорости при интерактивной работе при текущем уровне развития выч. средств не шибко актуально. Самой медленной составляющей системы в этом случае остается пользователь.

Кстати, в тему загрузки процессора (тоже где-то раньше было). Погонял на разных машинах. В принципе, не сильно-то он и загружается при обновлении формы. Так что, еще раз спасибо Ёпрсту, окончательный вариант вполне работоспособен.
36. Владимир Мелещенко (vligm) 22.09.11 13:20
я часто использую в таблицах "ЗначениеВСтрокуВнутр"
Для просмотра списков и таблиц, упакованных таким образом, я добавил немного кода в процедуру
"ТЗ_Форма_ОбработкаВыбора()":

ИначеЕсли ТипЗначенияСтр(ЗначТекЯчейки) = "Строка" Тогда
Если (Лев(ЗначТекЯчейки,5) = "{""VT""") ИЛИ (Лев(ЗначТекЯчейки,5) = "{""VL""") Тогда
Данные = ЗначениеИзСтрокиВнутр(ЗначТекЯчейки);
КонецЕсли;// Если Лев(ЗначТекЯчейки,5) = "{""V...
СпПараметров = СоздатьОбъект("СписокЗначений");
СпПараметров.Установить("ЗаголовокОбработки", ЗаголовокОбработки + " -> R" + НомТекСтр + "C'" + ИмяТекКол + "'");
СпПараметров.Установить("Данные", Данные);
СпПараметров.Установить("ИмяВнутрОбработки", "Undef");
Если ПустаяСтрока(ПолнИмяФайлаОбработки) = 0 Тогда // внешняя обработка
ОткрытьФорму("Отчет#", СпПараметров, ПолнИмяФайлаОбработки);
Иначе
Попытка
ОткрытьФорму("Обработка." + ИмяВнутрОбработки + "#", СпПараметров);
Исключение
Предупреждение("Не удается открыть форму внутренней обработки " + ИмяВнутрОбработки);
КонецПопытки;
КонецЕсли;
37. klen17 (klen17) 03.11.11 15:20
Спасибо! Часто использую для отладки сложных модулей с навороченными таблицами.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа