gifts2017

1С 7.7 Универсальный показ и разные прибамбасы для отладки (все в одной форме)

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

(добавлено: складывание ТаблицЗначений из колонки, добавление как реквизита ТабличнойЧасти документа в новую колонку, вызов команды на последовательность действий (из дополнительной неуниверсальной части) (как результат: теперь можно отработать такую составную команду
"НаборДействий_ДобавитьРеквизит(ТЧ),СложитьТ,Свернуть(Клиент@Приход#Расход),Печать")

Универсальная обработка
1)Обработчик ТаблицыЗначений (Т) (списказначений)
1.1)Если ей передать таблицузначений (Т) (списокзначений) - покажет его на своей форме и дальше с ней
можно извращаться
     (добавлять колонки с реквизитами значений из другой
    колонки (в том числе ВнутреннийИдентификатор, КоличествоСтрок табличной части
        Помеченность на удаление, саму табличную часть как ТаблицаЗначений)),
    показывать реквизит (.../шапку, табличную часть) значения из ячейки, сортировать,
    свертывать, сохранять в значение внутр в файл, ....,
    скидывать в dbf (с ограничениями по колонкам),
    разворачивать в плоскую таблицу значения из списков из колонки Т (создает таблицу
        с копиями строк для каждого значения из списка),
    получать таблицузначений как сумму строк таблицзначений из колонки (т.о.
        можно получить суммарную табличную часть списка документов)
    поиск дублей строк по любому набору колонок,
    некоторые математические действия со значениями колонок, подсчитывает итог
        текущей колонки, выдает Т на печать,...)
1.2)Можно загружать Т из файла внутр
1.3)Можно загружать табличную часть любого документа
2)Может использоваться для открытия формы документа/элементасправочник (через команду вызова)
    (делает интелектуально (открывает на просмотр, если заблокирован),
     открывает форму списка, если нет формы элемента и т.п.),
    показа движений регистров документа ...
3)Может  быть использован отдельный обработчик не универсальный для пристыковки не
    универсальных расчетов значений по содержимому ячеек колонки
        (приложен пример ПоказатьТ_Доб_НеУниверсальность.ert)

(удобно использовать, в том числе, из UCoice.ert )

В ПоказатьТ_Доб_НеУниверсальность.ert класть обработчики не универсальные, чтобы ПоказатьТ.ert открывалась во всех базах

В ПоказатьТ_Доб_НеУниверсальность.ert можно класть строки выполнения последовательности действий (см. в модуле ПоказатьТ_Доб_НеУниверсальность)
(например, "НаборДействий_ДобавитьРеквизит(ТЧ),СложитьТ,Свернуть(Клиент@Приход#Расход),Печать" -
выполнится указанный набор действий (т.е. получим печатную таблицу суммы табличный частей
документов из текущей колонки, свернутую по "Клиент","Приход,Расход"
    (т.е. считаем, что Клиент,Приход,Расход - есть колонки в ТабличныхЧастях
    документов из текущей колонки) )
(сама обработки такой строки происходит в ПоказатьТ.ert)

Универсальная обработка
1)Обработчик ТаблицыЗначений (Т) (списказначений)
1.1)Если ей передать таблицузначений (Т) (списокзначений) - покажет его на своей форме и дальше с ней
можно извращаться
     (добавлять колонки с реквизитами значений из другой
    колонки (в том числе ВнутреннийИдентификатор, КоличествоСтрок табличной части
        Помеченность на удаление, саму табличную часть как ТаблицаЗначений)),
    показывать реквизит (.../шапку, табличную часть) значения из ячейки, сортировать,
    свертывать, сохранять в значение внутр в файл, ....,
    скидывать в dbf (с ограничениями по колонкам),
    разворачивать в плоскую таблицу значения из списков из колонки Т (создает таблицу
        с копиями строк для каждого значения из списка),
    получать таблицузначений как сумму строк таблицзначений из колонки (т.о.
        можно получить суммарную табличную часть списка документов)
    поиск дублей строк по любому набору колонок,
    некоторые математические действия со значениями колонок, подсчитывает итог
        текущей колонки, выдает Т на печать,...)
1.2)Можно загружать Т из файла внутр
1.3)Можно загружать табличную часть любого документа
2)Может использоваться для открытия формы документа/элементасправочник (через команду вызова)
    (делает интелектуально (открывает на просмотр, если заблокирован),
     открывает форму списка, если нет формы элемента и т.п.),
    показа движений регистров документа ...
3)Может  быть использован отдельный обработчик не универсальный для пристыковки не
    универсальных расчетов значений по содержимому ячеек колонки
        (приложен пример ПоказатьТ_Доб_НеУниверсальность.ert)

(удобно использовать, в том числе, из UCoice.ert )

В ПоказатьТ_Доб_НеУниверсальность.ert класть обработчики не универсальные, чтобы ПоказатьТ.ert открывалась во всех базах

В ПоказатьТ_Доб_НеУниверсальность.ert можно класть строки выполнения последовательности действий (см. в модуле ПоказатьТ_Доб_НеУниверсальность)
(например, "НаборДействий_ДобавитьРеквизит(ТЧ),СложитьТ,Свернуть(Клиент@Приход#Расход),Печать" -
выполнится указанный набор действий (т.е. получим печатную таблицу суммы табличный частей
документов из текущей колонки, свернутую по "Клиент","Приход,Расход"
    (т.е. считаем, что Клиент,Приход,Расход - есть колонки в ТабличныхЧастях
    документов из текущей колонки) )
(сама обработки такой строки происходит в ПоказатьТ.ert)

Вставляем в использующий модуль или в глобальный модуль:

"

/_________________________________________________________________________

Функция ПоказатьТ(Т="",ПоказатьЭлемент="",Эл="",Кол="",Стр="",НеСтандартно="",
        ПоказатьРеквизиты=0,Модально=0) Экспорт                                                
    КонтФормы=СоздатьОбъект("СписокЗначений");
    КонтФормы.ДобавитьЗначение(Т,"Т");
    КонтФормы.ДобавитьЗначение(ПоказатьЭлемент,"ПоказатьЭлемент");
    КонтФормы.ДобавитьЗначение(Эл,"Эл");
    КонтФормы.ДобавитьЗначение(Кол,"Кол");
    КонтФормы.ДобавитьЗначение(Стр,"Стр");
    КонтФормы.ДобавитьЗначение(НеСтандартно,"НеСтандартно");
    КонтФормы.ДобавитьЗначение(ПоказатьРеквизиты,"ПоказатьРеквизиты");
    ИФ=КаталогИБ()+"ExtForms\ПоказатьТ.ert";
    Если ФС.СуществуетФайл(ИФ)=1 Тогда
        Если Модально=1 Тогда
            ОткрытьФормуМодально("Отчет#",КонтФормы,ИФ);
            Возврат КонтФормы;
        Иначе
            ОткрытьФорму("Отчет#",КонтФормы,ИФ);
        КонецЕсли;
    Иначе
        СообщитьБезОграничения("Файл """+ИФ+""" не найден","!");
    КонецЕсли;           
КонецФункции   
//_________________________________________________________________________
Функция ПоказатьЭлемент(Эл="",ТИлиСпис="",Кол="",Стр="",НеСтандартно="",
            ПоказатьРеквизиты=0,Модально=0) Экспорт
    Воз=ПоказатьТ(ТИлиСпис,1,Эл,Кол,Стр,НеСтандартно,ПоказатьРеквизиты,Модально);
    Возврат Воз;
КонецФункции

"

Я сам на форму вывожу для каждой таблицы, списка, реквизита типа документ/справочник кнопку "О" (типа "открыть"), в которую вставляю ПоказатьЭлемент(Эл)/ПоказатьТ(Т) - открывается форма элемента/документа или Т, в место процедуры обработки клика на ТаблицеЗначений вставляю вызов ПоказатьЭлемент(,Т) - открывается форма реквизита из ячейки

Не полный перечень возможных вызовов:

//Показывает: СписокЗначений (в виде таблицы значений), ТаблицаЗначений,
//ЭлементСправочника,Документ,Текст
//(предусмотрен показ ТабличнойЧасти документа (в виде таблицы значений))
//реквизты шапки документа, элемента справочника


//таблицу значений можно свернуть (результат в отдельной такой же обработке),
//отсортировать по набору колонок
//любую ячейку таблицы значений можно рекурсивно посмотреть

//из формы обработки можно загрузить ТабличнуюЧасть любого документа
//(по кнопке)

//ТаблицуЗначений можно вывести в ПечатнуюФорму

//можно сохранить Т в файл (внутр), загрузить Т из файла (внутр)
//можно ДобавитьКолонкуИзФайлаВнутр
//можно ВычестьИзКолонкиКолонку
//проверить, что значения любой 1 колонки не разбросаны (= лежат рядом)
//поиск повторяющихся по выбранным колонкам строк

//выбрать показываемые колонки
//посмотреть частично выбранную информацию по структуре метаданных
    //пока далеко не все можно посмотреть

//ПРИМЕРЫ ВЫЗОВОВ
//1) ПоказатьТ(Т) - покажет Т (ТаблицуЗначений,СписокЗначений,
//    ТабличнуюЧастьДокумента,Текст (через текстовый документ))
//2) ПоказатьЭлемент(Эл) - покажет Эл (ТаблицуЗначений,СписокЗначений,
//    Документ,ЭлементСправочника,Строку,Число)
//3) ПоказатьЭлемент(,Т) - покажет элемент из текущей строки и текущей
//    колонки (см. ПоказатьЭлемент(Эл) (текущее есть только у Т формы)
//4) ПоказатьЭлемент(,Спис) - покажет элемент из текущей строки
//    (текущее есть только у Спис формы)
//5) ПоказатьЭлемент(,ТИлиСпис,Кол,Стр) - для Т покажет из колонки Кол
//    (если не пуста, иначе из текущей) из строки Стр (если не пуста, иначе
//    из текущей); для Спис из строки Стр (если не пуста, иначе из текущей)
//6) ПоказатьЭлемент(Эл,,,,,1) - показывает все реквизиты элемента или
//    шапки документа
//7) ПоказатьТ(ИФ,1) - покажат файл ИФ (если расширение doc,rtf,xls и др
//    (жестко задано в коде), то запустить соответствующее приложение)
//8) ПоказатьЭлемент(ЭлДок,,,,,1)
//    Показать Реквизиты Шапки документы + другую информацию (время и т.д.)
//    (причем если ЭлДок - форма, то покажет значения реквизитов именно из
//    формы)
//    Показать Реквизиты Элемента справочника

//9)     НеСтандартно=СоздатьОбъект("СписокЗначений");
//    НеСтандартно.ДобавитьЗначение(1,"Закрыть");
//    НеСтандартно.ДобавитьЗначение("Вернуть","Команда");
//    щВоз=ПоказатьЭлемент(Об,,,,НеСтандартно,1,1);
//    ТФормыОбработки=щВоз.Получить("ТФормыОбработки");
//    Получить ТРеквизитыШапкиДокумента

//10)ПоказатьТ(СтрКаталог,,,,,"Каталог")
//    откроет каталог (можно     СтрКаталог задавать относительно ИБ (глДобСтрОтносительноИБ="..\")

//    Параметр НеСтандартно используется для передачи спец команд и спец
//режимов

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

Наименование Файл Версия Размер Кол. Скачив.
1C_77_УниверсальныйПоказ
.rar 48,73Kb
01.10.14
237
.rar 48,73Kb 237 Скачать

См. также

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

Комментарии

1. Владислав Чинючин (vcv) 20.12.10 15:53
Ни хочу ничего сказать про внутренности, не смотрел даже. Но нельзя ли чуть-чуть побольше уважения у общественности?
Фразы типа "открытия формы документа/элементасправочник", которые обработка "делает интелектуально" и расстановка элементов формы "по фэн-шую" не вызывают желания эту обработку смотреть.
kompas-dm; +1 Ответить
2. Виктор Виктор (virs) 21.12.10 13:10
Ежели, кому суть понятна только в академическом толковании то .....
3. Егор Киреев (po.l.i) 31.01.11 16:00
интересная штука для отладки!!

но только не всё включено :(

глщСпис<<?>>.Выгрузить(СписСводные);
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(12)}: Переменная не определена (глщСпис)
ГлобальныйНомер=глПолучитьСводная_ГлобальныйНомер<<?>>(Док.ТекущийДокумент(),Док.НомерСводной,0,1,,
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(30)}: Функция не обнаружена (глПолучитьСводная_ГлобальныйНомер)
СообщитьБезОграничения<<?>>("Для "+ПредставлениеДокумента(ПарамТЭ)+" нет сводных");
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(43)}: Процедура не обнаружена (СообщитьБезОграничения)
Если СписСводные.ВыбратьЗначение(Сводная,""+ПредставлениеЭлемента<<?>>(ПарамТЭ),,30,1)<>1 Тогда
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(48)}: Функция не обнаружена (ПредставлениеЭлемента)
Если СписСводные.ВыбратьЗначение(Сводная,""+ПредставлениеЭлемента(ПарамТЭ)<<?>>,,30,1)<>1 Тогда
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(48)}: Выражение должно иметь логический тип
Если ПолучитьВид<<?>>(Т_Значение)<>"РасходнаяНакладная" Тогда
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(71)}: Функция не обнаружена (ПолучитьВид)
Если глСпрВидыСвязки<<?>>.Выбрать("","")<>1 Тогда
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(85)}: Переменная не определена (глСпрВидыСвязки)
ВидСвязки=глСпрВидыСвязки<<?>>.ТекущийЭлемент();
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(90)}: Переменная не определена (глСпрВидыСвязки)
Связка=глНайтиСвязка<<?>>(Т_Значение,ВидСвязки,"",0);
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(113)}: Функция не обнаружена (глНайтиСвязка)
СообщитьБезОграничения<<?>>("Не предусмотренное значение """+значение+""" в """+
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(138)}: Процедура не обнаружена (СообщитьБезОграничения)
СообщитьБезОграничения<<?>>("Не предусмотренная команда """+Команда+""" в """+
{T:\TEST\EXTFORMS\ПОКАЗАТЬТ_ДОБ_НЕУНИВЕРСАЛЬНОСТЬ.ERT(164)}: Процедура не обнаружена (СообщитьБезОграничения)


а было бы ещё интересней ;)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа