Несколько табличных частей в 1С:7.7 - это просто

01.05.18

Разработка - Работа с интерфейсом

При программировании на платформе V7 достаточно часто возникает задача создать несколько табличных частей документа (или справочника). Традиционно эта задача имеет несколько решений..

Скачать файл

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

Наименование По подписке [?] Купить один файл
multitable-sample.zip
.zip 16,48Kb
27
27 Скачать (1 SM) Купить за 1 850 руб.

При программировании на платформе V7 достаточно часто возникает задача создать несколько табличных частей документа (или справочника). Традиционно эта задача имеет несколько решений:

1. Хранение нескольких табличных частей в одной. Данный метод имеет только один плюс, "1С-совместимо". Основной недостаток – часто разные табличные части сильно отличаются форматом и составом полей;

2. Хранение дополнительной информации путем "сворачивания" данных в строку. Никаких плюсов метод не имеет. Минусы очевидны: возможное нарушение ссылочной целостности;

3. Хранение табличных частей вне информационной базы. Как и в предыдущем способе гарантировать, что восстановленная ссылка будет корректной, нельзя;

4. Наконец есть правильный способ – хранение табличных частей в служебных документах.

Этот последний способ позволяет:
* делать практически неограниченное число табличных частей,
* избавиться от задач отображения таблицы значений,
* конфигурации остаться 1С-совместимой,
* трудозатраты на создание табличной части в типовом случае составляют около 5 минут,
* ссылочная целостность отрабатывается системой.

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

Итак, рассмотрим технологию организации второй табличной части документа (пример в виде маленькой конфигурации приложен к статье, ссылка внизу страницы).

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

Далее, в табличной части этого документа создаем необходимые реквизиты. Даже те, которые не должны отображаться. В поле "Синоним" указываем то название, которое должно отображаться в колонке. На рисунке 1 имеется реквизит табличной части "ОбъемПриДаннойТемп", который в колонке таблицы будет отображаться как "V при tc".

В поле "Комментарий" можно указывать команды форматирования таблицы (необычная фича, да? ;-). В данном случае задается ширина колонки таблицы, 11 единиц. Сейчас у меня поддерживается несколько таких команд:

- "Ширина=ХХХ;" – установить ширину в ХХХ,
- "Скрыть;" – скрыть колонку,
- "Иконка;" – отображать иконки в колонке.

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

Рисунок 1. Реквизит служебного документа.

После этих операций можно смело утверждать, что с форматированием отображаемой таблицы мы справились.

Добавляем в родительский документ реквизит типа "Документ", и связываем его с только что созданным служебным документом. Через этот реквизит впоследствии мы сможем работать с дополнительной табличной частью.


Рисунок 2. Связь главного и служебного документов.

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


Рисунок 3. Будущая табличная часть.

Теперь нужно вставить необходимый код в глобальный модуль (см. конфигурацию-пример).

Для манипуляций с табличной частью в родительский документ необходимо добавить всго лишь три строки:

Процедура ПриОткрытии()
   глХранилищеОткрыть(Контекст,ХранилищеПотери,ТаблицаПотерь);
КонецПроцедуры

В процедуру передаются три параметра – Контекст, реквизит родительского документа, в котором содержится ссылка на служебный документ, и таблица значений на форме, которая отображает табличную часть.

При открытии происходит форматирование таблицы и заполнение её данными.

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

Процедура ПриЗакрытии()
   глХранилищеУдалить(Контекст,ХранилищеПотери);
КонецПроцедуры

Ну и собственно сохранение табличной части. Параметры такие же как и в первой процедуре:

Процедура ПриЗаписи()
   глХранилищеСохранить(Контекст,ХранилищеПотери,ТаблицаПотерь);
КонецПроцедуры

Готово. Ну, за исключением ввода данных в таблицу. Для этого я позаимствовал из типовой конфигурации ИТРП универсальную процедуру ввода в таблицу значений (см. пример). Можно взять какую-нибудь другую универсальную процедуру ввода данных в ТЗ, или написать свою собственную – кому как больше нравится.

Вот и все… Восьмерка лишается одного из своих основных козырей?

Источники:
* Владимир Камышников aka Tazoth // icq: 261515707 // тел: 518-32-16
* hare.ru // vladimir__@e-mail.ru
* tazoth.ru // tazoth@tazoth.ru // tazoth@e-mail.ru // январь 2003 г.
* mista.ru/articles1c/hare/article.74.html

Смежная публикация:
* infostart.ru/public/15672

См. также

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Создание и использование на формах в среде 1С 7.7 прогрессбара, индикатора, как в 1С 8.Х для контроля над длительными процессами. Реализовано средствами языка программирования 1С 7.7.

1 стартмани

06.06.2024    752    1    user1416274    17    

2

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

Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77. Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.

1 стартмани

30.03.2022    5019    2    igor7777    4    

6

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

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

15.12.2021    4906    72    Cерый    13    

7

Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Простая и удобная внешняя обработка для выбора цвета без применения внешних компонент.

1 стартмани

09.06.2020    7457    4    vap_pig    5    

4

Учет рабочего времени Работа с интерфейсом Программист Бухгалтер Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Обработка производственного календаря с возможностью импорта и экспорта xls для 1С 7.7 (7.70.027) без изменения конфигурации.

1 стартмани

18.09.2019    13060    6    Jill    8    

3

Работа с интерфейсом Оптовая торговля Пользователь Платформа 1С v7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Картинки и дополнительное описание в номенклатуре ТиС (без изменения конфигурации).

1 стартмани

16.02.2018    14521    0    Jill    0    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. M_W_W 34 01.05.18 11:42 Сейчас в теме
Ну, да... Этим способом давно уже пользуюсь, только еще, служебные документы записываю датой основного документа минус 50 лет назад, что-бы в общем журнале "под ногами не путались" и не вызывали у пользователей лишних вопросов. Потому, что "не должен принадлежать никакому журналу" это хорошо, но из общего журнала то его не уберешь. Ну и при установке/отмене пометки удаления, не забывать про служебный документ, доработать соответствующие процедуры.
7. aleksandr_leiman 109 20.11.19 05:42 Сейчас в теме
(1)Предпочитаю не минус 50, а плюс 50. Если установлена дата запрета редактирования, то документ не запишешь.
user1230584; +1 Ответить
8. M_W_W 34 20.11.19 10:31 Сейчас в теме
(7) Ну, так это же и наоборот хорошо! Ибо нефик там чего-то интерактивно записывать. А программно, дата запрета редактирования не мешает.
Archivarius; user1230584; +2 Ответить
2. bulpi 217 01.05.18 11:52 Сейчас в теме
"2. Хранение дополнительной информации путем "сворачивания" данных в строку. Никаких плюсов метод не имеет. "

Имеет. Минимализм. "Не плоди сущностей сверх необходимого"
3. Gkmy 28 02.05.18 08:10 Сейчас в теме
(2)
Имеет. Минимализм. "Не плоди сущностей сверх необходимого"
имеет/не имеет - суждение спорное, к тому же не моё; в зависимости от задачи имеет как плюсы, так и минусы,.. обсуждать которые здесь нет смысла.. если желаете, то создайте на форуме отдельную тему.
4. Gkmy 28 02.05.18 08:42 Сейчас в теме
5. puh 18.05.18 22:23 Сейчас в теме
Восьмерка не лишается своего козыря. Недостаток данного способа в 7.7 - отсутствие единой транзакции в случае проведения документа. Если проведение завершается неудачей, то не забудьте откатить данные во вспомогательной табличной части, т.к. запись основных данных документа уже откатилась и пользователь может выйти без сохранения. И это можно решить, но не без заморочек.
6. фокусник 25 30.05.18 11:14 Сейчас в теме
Хорошая доработка примера из Методической конфигурации с диска ИТС. Только я согласен с Михаилом (5). Те же процедуры перенастрой для сохранения табличных частей в одном родительском документе. Работы на полтора два часа. Лучше эти процедуры сделать универсальными под текущую схему и под новую. Один доп. реквизит о наименовании ТЗ и всё. Конечно придется отказаться от стандартного выведения табличной части. И с конвертацией проще потом, и с удалением документов, и с транзакциями, и с изменением даты. У нас основная проблема была с переносом документов из филиальных баз в центральную, и с префиксами воевали, и с изменениями дат. А у нас в подчиненных документах распределение зар. платы по узбекам на строительных объектах было. У меня из программиста чуть плов не сделали.
9. olbir 20.11.20 11:32 Сейчас в теме
(6)
Хорошая доработка примера из Методической конфигурации с диска ИТС

Владимир, можно ссылку ? Благодарю
10. srt2020 02.12.20 11:22 Сейчас в теме
Так на чем остановился разговор? Автор смог поставить вторую табличную часть или нет?
11. Cthulhu 1 17.08.22 19:58 Сейчас в теме
(necroposter mode on)
нyу, вообще-то, опробовав и авторский способ тоже (и намахавшись со скрытием документов из общих журналов, согласованием изменения дат с головным, с кривым редактированием ТЗ на морде, и т.п.) - "правильным" признан как раз способ "композитной" табличной части. имена колонок - с префиксом соотв. ТЧ, при открытии - запомнить всю ТЧ в переменную модуля, при смене закладки - обновить в переменной модуля строки, соответствующие закладке, с которой переключились, очистить ТЧ, сделать видимыми колонки, соответствующие закладке, на которую переключились, и заполнить ТЧ из переменной модуля данными из строк, соответствующих этой ТЧ (закладки, на которую переключились). При записи - фиксация в переменную модуля данных с последней закладки с последующим переносом данных из этой переменной модуля в ТЧ документа.
преимущества: никаких ТЗ, абсолютно штатное редактирование ТЧ, контроль ссылочной целостности, все в одном документе. и - да, кстати, трудозатрат - не более, чем в авторском варианте (который лукаво "обошел" вопросы с общими журналами, датами документов и прочими - типа стандартного отчета по структуре подчиненности, в котором надо увидеть стандартную структуру подчиненности без этой "служебной" мусорки).
метода использовалась в продактах неоднократно и доказала свое удобство и работоспособность.
(necroposter mode off)
Оставьте свое сообщение