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

02.09.09

Разработка - Инструментарий разработчика

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ВыводУниверсальныхКоллекций.ert
.1251799697 200,50Kb
404
404 Скачать (1 SM) Купить за 1 850 руб.
ПримерИспользованияВыводаТЗ.ert
.1251799884 31,50Kb
90
90 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

См. также

Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 1C77 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    22465    57    Gvozdod    8    

16

Инструментарий разработчика Системный администратор Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

23.04.2014    169033    1889    Alexoniq    1603    

499

Инструментарий разработчика Программист Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    33516    61    O-Planet    78    

49

Инструментарий разработчика Программист Платформа 1С v7.7 1C77 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    21990    Reptile    5    

36

Инструментарий разработчика Программист Платформа 1С v7.7 1C77 Абонемент ($m)

Встала недавно задача для одной организации, которая все еще на 1С 7.7 немного автоматизировать работу отдела продаж. А именно уйти от ручного заполнения договоров, сделанных юристами в MS Word. Договора от разных фирм и разного назначения отличались. Переводить их в таблицы 1С очень не хотелось и нашел способ прямо в файлах Word сделать небольшие дополнения, чтобы можно было печатать, используя именно эти заготовки юристов.

1 стартмани

14.07.2013    27788    56    adamx    11    

14

Инструментарий разработчика Программист Платформа 1С v7.7 1C77 Абонемент ($m)

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

1 стартмани

21.02.2013    18428    36    MarSeN    14    

17

Инструментарий разработчика Программист Платформа 1С v7.7 1C77 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    36461    51    venger    7    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ёпрст 1065 01.09.09 18:57 Сейчас в теме
>>>данные могут не обновляться при переходе между колонками
Это не бага, это многолетний баян..
Лечение - в одной строчке кода..
2. CheBurator 2695 01.09.09 19:52 Сейчас в теме
(1) Типа как в кресте на ТЗ..?
19. Altair777 647 02.09.09 18:47 Сейчас в теме
(2) Ой, и меня упомянули. Мелочь, а приятно :-)
4. Angelike 01.09.09 20:04 Сейчас в теме
[от имени Aexeel (аккаунт залочен, почему-то)]
(1) Просто раньше не встречалось, вот и не знал. Исправлю, как разлочат. Спасибо за информацию.
(3) В плане доработок, но не на первом месте. Так часто пользуешься отборами? Обычно это разовая операция. Гораздо важнее просмотр подчиненных ТЗ. А это реализовано.
6. Shaman100M 1152 02.09.09 08:15 Сейчас в теме
(1) А как, интересно? Две невидимых кнопки на форму с горячими клавишами, или попроще?
7. Ёпрст 1065 02.09.09 08:20 Сейчас в теме
(6) проще.
Форма.Обновить в функции на тексте... Можно и по условию.
8. aexeel 73 02.09.09 09:28 Сейчас в теме
(7) Проблема как раз в том, что формула ("функция на тексте") не вызывается.
13. Ёпрст 1065 02.09.09 14:35 Сейчас в теме
(8) >>>(7) Проблема как раз в том, что формула ("функция на тексте") не вызывается.

Ну ё... Форма.Обновить() воткни - будет вызываться всегда..
3. CheBurator 2695 01.09.09 19:54 Сейчас в теме
(0) Не вижу сохранений сделанных настроек вывода ТЗ - если я много раз вывожу одинаковую по структуре ТЗ - я что, не могу воспользоваться заранее сделанной в первый раз настройкой??? Низачот!!! ;-)
.
сформируй для ТЗ уникальный ИД из наименований и типов колонок - и используй его...
5. aexeel 73 01.09.09 20:20 Сейчас в теме
Все разлочили. Счастье.
(3, 4) Аналогичная ситуация с сохранением списков сортировки и видимости колонок. Под это дело, кстати, создан неиспользуемый пока слой "Невидимый".
9. aexeel 73 02.09.09 09:43 Сейчас в теме
Обновил обработку. Изменения в текущей версии:
- исключена оставленная ранее отладочная информация;
- обработка больше не требует наличия в том же каталоге обработки-редактора условий отбора (в предыдущей версии она также не использовалась);
- при попытке вызова без указания в параметре формы списка или таблицы значений выдается соответствующее предупреждение и обработка не открывается;
- на закладках «Структура» и «Данные» выведены краткие подсказки.
10. Арчибальд 2709 02.09.09 10:05 Сейчас в теме
Автор, послушайся Ёпрста и Чебура. Они плохому не научат ;))
11. aexeel 73 02.09.09 10:32 Сейчас в теме
(10) Я сторонник политики Эппла: мнение пользователя, конечно, важно, но делать мы будем всё равно по-своему :))
А если серьезно, мнение Чебура, конечно, правильное — сохранению настроек быть. Но вот предложенное решение слегка поверхностное. ИД по имени-типу исключит отборы при незначительном изменении структуры (например, в процессе разработки добавили/удалили колонки, по которым отборы и не строились даже). К тому же, как я и написал раньше, пользоваться им будут единицы, а вот просмотр вложенных списков/таблиц куда более актуален. Да и сам отбор еще не до конца доделан. В следующем плановом обновлении будет отбор по (не)вхождению в список и в числовой интервал.
Ёпрсту был бы крайне признателен за рабочий пример. А то назвать проблему "баяном" и предложить нерабочее решение (заранее извиняюсь, если не правильно его понял) как-то не айс.
12. aexeel 73 02.09.09 11:20 Сейчас в теме
Обновил пример использования. Теперь в нем можно выбирать способ вызова обработки обработки: из внешнего файла или внутренней обработки. В первом случае необходимо будет указать полное имя файла (можно выбрать в соответствующем диалоге), во втором — идентификатор обработки (можно выбрать из списка).
14. aexeel 73 02.09.09 15:07 Сейчас в теме
Форма.Обновить() — это процедура. Её нельзя "втыкать" в формулу элемента диалога "текст". Если же написать функцию, обычно её называют "ОбновлениеФормы()", то она не вызывается при переходе между колонками, по крайней мере у меня. Если опять чего-то не понял, то буду благодарен за ссылку на рабочий пример.
17. Ёпрст 1065 02.09.09 17:55 Сейчас в теме
18. aexeel 73 02.09.09 18:42 Сейчас в теме
(17) Ну начнем с того, что как я и говорил, "Форма.Обновить(0)" в формуле текстового поля не напишешь, т.к. это процедура, так что, хотя бы в этом признал бы свою неправоту. Во-вторых, отбросив серьезную нагрузку на процессор, при интерактивной работе с таблицей (это если поставить условие на активный элемент) в твоем случае, попробуй пробежаться курсором (переход мышкой или с клавиатуры, без разницы) по первой строке. У меня форма опять же не обновилась (видео выложу чуть позднее), так что это не выход.
Чтобы быть до конца уж откровенным, при последующем переходе между строками , работать стало.
23. Ёпрст 1065 03.09.09 08:34 Сейчас в теме
(18) Детсад на марше ?
Не умеешь затавить обновится форму при открытии?
Чего, уже всё надо разжевывать?
16. aexeel 73 02.09.09 17:44 Сейчас в теме
(15) у себя проверял? уже несколько раз написал, что у меня не ловит перемещение между (!!!) колонками (!!!) таблицы на форме. При перемещении между строками той же таблицы все работает.
20. aexeel 73 02.09.09 19:37 Сейчас в теме
(17, 18): аналогичная проблема с любой другой строкой, которая становится текущей при открытии формы. Добавление метода в "ПриОткрытии()", "ВводНового()" или модуль инициализации не помогает. Пробовал даже программно менять закладки и в "ПриВыбореЗакладки" вызывать обновление формы, но результат тот же.
Как вариант, делать активной ту закладку, на которой нет таблицы. Но это абсолютно не рациональная полумера.
21. Altair777 647 02.09.09 19:50 Сейчас в теме
(20) Юзайте Формекс "ПослеОткрытия()" и будет Вам счастье. :-)
22. aexeel 73 02.09.09 21:13 Сейчас в теме
(21) Переход к использованию ВК равносильно отказу от универсальности. В этой обработке я стремлюсь, скорее, к последнему. А за "+" спасибо. Хоть я и не сторонник рейтинговых систем, но, ИМХО, она того стоит.
26. artbear 1566 03.09.09 09:39 Сейчас в теме
(22) Про ВК и отход от универсальности зря говоришь.
Как раз некоторые ВК и позволяют достичь универсальности :)
28. aexeel 73 03.09.09 10:32 Сейчас в теме
(26) Только давай без холивара на тему ВК :)) Согласен, они значительно расширяют функциональность, но вносят дополнительные требования к установленному набору. Даже если будешь постоянно носить все с собой (у военных, например, Интернет не подключен вообще), ни факт, что дадут права админа, чтобы это дело установить (фанатичная шизофреничность безопасников это обыденное явление).
(27) Это не редактор, а просмотр и работа с отборами/сортировками у меня реализована лучше, на большее пока не претендую.
29. Altair777 647 03.09.09 11:04 Сейчас в теме
(28) Не думаю, что с тем же FormEx'ом, например, могут быть проблемы при установке.
30. aexeel 73 03.09.09 11:16 Сейчас в теме
(29) м.б., но в данном случае удалось решить проблему без его использования
31. Altair777 647 03.09.09 11:31 Сейчас в теме
(30) Я раньше тоже был противником ВК.
Первое, что пришлось использовать - это 1С++ и только ради одного метода ReconnectNative().
Но жизнь в лице заказчиков(работодателей) заставляет совершенстоваться.
И очень много вещей, которые в последнее время мне приходиться реализовывать, просто немыслимы без расширения функционала с помощью ВК.
Не потому, что я отучился по-другому, а просто потому что их нельзя сделать иначе.

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

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

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

Но я вот думаю, что для всех остальных (в том числе для ИС) можно и с использованием ВК делать. По крайней мере, проверять загружена ли необходимая длл-ка.
И такая разработка, удет быстрее всего и красивее, и быстрее.
24. Ёпрст 1065 03.09.09 08:47 Сейчас в теме
25. aexeel 73 03.09.09 09:30 Сейчас в теме
(23, 24) Блин, круто. Не знал. Спасибо.
27. artbear 1566 03.09.09 09:41 Сейчас в теме
Посмотри автора ADirks здесь и/или на проклубе, у него давно уже есть отличный "Редактор ТЗ", в котором нами сделано очень многое, в т.ч. и просмотр, и печать, и редактирование ТЗ, СЗ и даже ИТЗ из 1С++.
33. vligm 22 03.09.09 11:56 Сейчас в теме
Понравилось.
Есть пожелание - для документов сделать отбор по списку.
А еще лучше - по подчиненным для какого-либо дока.
Это так, на вскидку в ключе моих личных проблем :-)))
35. aexeel 73 03.09.09 12:10 Сейчас в теме
(33)Спасибо за отзыв и "+"

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

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

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

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

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