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

01.05.18

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

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

Скачать исходный код

Наименование Файл Версия Размер
multitable-sample.zip
.zip 16,48Kb
27
.zip 16,48Kb 27 Скачать

При программировании на платформе 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С:Фото номенклатуры 7.7 - решение для работы с фотографиями номенклатуры в 1С:7.7 (включая формат PNG)

Работа с интерфейсом Логистика, склад и ТМЦ Платформа 1С v7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".

5000 руб.

18.10.2022    5218    1    45    

3

WebЦвета для 1с77 FormEx

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

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

1 стартмани

30.03.2022    4577    2    igor7777    4    

5

К привязкам элементов форм (1С 7.7, FormEx)

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

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

15.12.2021    4497    62    Cерый    13    

6

Выбор цвета для 1С 7.7

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

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

1 стартмани

09.06.2020    7066    4    vap_pig    5    

3

Производственный календарь для 1С 7.7

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

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

1 стартмани

18.09.2019    12629    6    Jill    8    

3

Альтернативная обработка "Выбор периода"

Работа с интерфейсом Оперативный учет 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Альтернативная обработка ввода периода для 1С 7.7.

1 стартмани

27.03.2019    6605    3    v.a.n-    11    

2

Картинки и дополнительное описание в номенклатуре

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

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

1 стартмани

16.02.2018    14417    0    Jill    0    

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