gifts2017

Суммирование ячеек табличного документа для платформы 7.7

Опубликовал Александр Шпак (a_shpak) в раздел Программирование - Практика программирования

При выделении ячеек табличного документа в строке состояния 1С выводится сумма чисел в этих ячейках.

При выделении ячеек табличного документа в строке состояния 1С выводится сумма чисел в этих ячейках.
Допускается выделение произвольных областей (при нажатой клавише Ctrl), однако повторный клик мышкой на ячейке, уже выделенной ранее, не снимает выделение. Увы, значение ячейки плюсуется еще раз.

Содержимое ячейки преобразуется в формат, понятный 1С: убираются разделители триад (апострофы и пробелы), разделитель дробной части запятая заменяется на точку.

В примере использована внешняя компонента TableDoc Дмитрия Трапезникова ака trad
http://infostart.ru/public/20089/
Компонента позволяет порождать событие при изменении выделения в таблице.

Файл внешней компоненты TableDoc.dll и файл Синтакс-Помощника TableDoc.als 
надо переписать в каталог программы, либо в каталог информационной базы, 
либо в папку ExtForms каталога информационной базы.
Внешняя компонента не требуют регистрации в реестре Windows, но первый запуск 1С с ее загрузкой надо сделать с правами администратора.

При внедрении в реальной базе данных в глобальный модуль необходимо добавить текст согласно файлу ГлМодуль.txt.
В модуль каждого отчета, где необходимо суммировать ячейки таблицы, добавляется текст согласно примеру.

При закрытии диалогового окна формы, создающей таблицу, строка состояния очищается.

К сожалению, не нашел способ вычислять сумму для таблиц, открытых из файла. 
Требуется наличие модуля формы, где будет размещена процедура ПриИзмененииВыделения.
 
При использовании штатной процедуры 1С ОбработкаОжидания сумма появляется в строке состояния с секундной задержкой, выставить интервал меньше невозможно. 
Чтобы выводить строку состояния сразу после вычисления суммы, можно воспользоваться ОбработкойОжидания из внешней компоненты FormEx Алексея Фёдорова aka АЛьФ
http://www.dorex.ru/?projects&formex
В этой ОбработкеОжидания интервал выставляется в миллисекундах.
Текст примера содержит подключение и использование FormEx, но эти строки закомментарены.

Элегантный вариант суммирования создан Александром Венгером,
http://infostart.ru/public/16000
разработавшим внешнюю компоненту AddIn_V7MyClipboard.dll для операций с буфером обмена. 
Необходимость делать лишний клик мышкой компенсируется возможностью суммировать числа из любых полей, в том числе из других приложений.

Надеюсь, опытные программисты отнесутся с пониманием к подробному объяснению простых алгоритмов. 
Начинающим не хватает простеньких примеров.

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

Наименование Файл Версия Размер
- 160
.txt 3,26Kb
28.10.09
160
.txt 3,26Kb Бесплатно
- 111
.ert 29,00Kb
28.10.09
111
.ert 29,00Kb Бесплатно

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Рытов (Арчибальд) 26.10.09 07:31
Даже смотреть не надо. Плюс однозначно :)
2. Александр Шпак (a_shpak) 26.10.09 14:11
Спасибо, камрады. Готовлю еще одну обработку - выгрузка в Excel с форматированием, закреплением областей, гиперссылками (WWW и mail), формулами в ячейках. Платформа - ФормЕкс и Йоксель. Думаю, будет интересно.
А по суммированию... Произнесу вопрос корифеям внятно. Как прикрутить технологию к "голой" MXL таблице? Например, открытой из файла?
Сейчас вычисление запускается из модуля формы обработки.
3. Александр Рытов (Арчибальд) 26.10.09 14:28
(2) Это поле сильно перепахано... И засеяно велосипедами... :)
4. Александр Шпак (a_shpak) 26.10.09 22:22
Пардон, уточню.
Выгружал в OpenOffice (и чего все засуетились... Подумаешь, каких-то 14 тыс. деревянных деноминированных на рабочее место). Формулы не хотят работать, а вроде бы должны.
Информации на форумах много, но рассчитана на программеров высокого уровня. Готовых решений вообще не нашел.
5. Альтаир (Altair777) 27.10.09 10:29
(0) А где красивый скриншот? :o
6. Vladimir (Boroda) 27.10.09 13:29
(2) О! Вот это было бы здорово! Будем ждать-с...
7. GSoft. (GSoft) 28.10.09 11:09
ТрассировкаТЗ<<?>>(ТЗ,"ТЗ");
Процедура не обнаружена (ТрассировкаТЗ)

глСостояниеСуммаТЗ<<?>>(Менеджер.ПолучитьВыделенные(),Таблица);
Процедура не обнаружена (глСостояниеСуммаТЗ)


ну это то ладно в гл модуле сидит, а первая

8. Александр Шпак (a_shpak) 28.10.09 13:15
(7) Упс. Не доглядел. В своих тестовых базах сразу добавляю в ГлМодуле простую трассировочку таблиц и списков значений, поэтому и не ругнулась. Удобно для отладки.
Сейчас включу в файл ГлМодуль.txt.