0. pavley2002 184 08.09.16 22:26 Сейчас в теме

Вывод Таблицы Значений или Дерева Значений на экран управляемой формы без объявления колонок в реквизитах формы

Примеры взаимных преобразований Таблицы значения в Дерево значений или Табличный документ с использованием универсальных функций и макетов Системы компоновки данных. Примеры представлены в форме удобной для копирования в разработку.

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
1. json 14.09.16 02:55 Сейчас в теме
Очень хорошо, что ваши процедуры универсальны (это редкость на ИС)

НО есть несколько моментов, которые [лично мне] могут помешать применить ваши процедуры
1. Самодокументируемое название методов - из названия методов должно быть однозначно понятно, что данный метод делает (например, СоздатьКолонкиТаблицыНаУправляемойФорме() ). Без необходимости изучения кода самого метода. Иначе возникают сложности с читаемостью и пониманием при а) вызове метода, б) при понимании кода, из которого вызывается данный метод.
2. Неиспользуемые переменные (например, цЭто и Вариант), а также невыполняемые ветки в операторах Если
3. Большое количество закомментированного кода - лучше удалить, чтобы он не сбивал с толку тех, кто будет использовать ваши методы. Если в коде много подобных закомментированных участков - у других разработчиков возникает опасение, что он еще пока на стадии отладки и работа над ним не закончена. А незаконченные чужие процедуры никто использовать не будет.
4. Большое количество цифр в именах переменных - является моветоном (например, цСхемаКомпоновкиДанныхИсточникТабДок2), вызывает недоверие.

Высказал только самые критичные на мой взгляд недочеты.

Несмотря на мою критику, хочу отметить, что заметна большая проделанная работа (и по написанию процедур, и по подготовке статьи)
Плюс однозначно.
Патриот; kuzyara; awk; vasiliy_b; dj_serega; mihey; aexeel; Irwin; +8 Ответить
2. fancy 15.09.16 07:07 Сейчас в теме
Спасибо за статью, вчера как раз воспользовался, правда пришлось побиться с добавлением колонок реквизита формы ДеревоЗначений - смог добавить лишь только тогда, когда само дерево добавляю в реквизиты формы программно, если же дерево создать в конфигураторе, то колонки никак не хотели добавляться
3. json 15.09.16 08:49 Сейчас в теме
(2) fancy, да, я тоже сталкивался с этим. Проблема в том, что если колонка добавлена из конфигуратора, то ни колонку реквизита, ни колонку табличного поля на форме удалить программно нельзя. И это все осложняется тем, что в коде нельзя определить, добавлялась колонка программно или через конфигуратор. Единственный костыль, который я тут нашел - использование попытки. Колонки из реквизита на таблицы нужно удалять по одной в попытке (а не сразу всем массивом), и перед добавлением проверять наличие. При обновлении колонок табличного поля - тоже нужно удалять колонки в попытке и перед добавлением - проверять наличие.
5. pavley2002 184 17.09.16 15:37 Сейчас в теме
(3) yurii_host,
Доступ к элементу формы осуществляется по имени, поэтому дублирование имён внутри элементов сделает управляемую форму не работоспособной. В этой статье защита от дублирования имён выполнена упрощённо через очистку всех элементов перед любым значимым действием. Для этой цели используется процедура ОчиститьКоллекциюЗначенийНаСервере(). При таком алгоритме не возникает необходимость проверять наличие дублирования имен по штучно.
Однако, сама проблема дублирования имён при программном заполнении колонок следующей коллекции значений существует и требует методологической постановки задачи с последующем решением.
Алгоритм близкий к по элементной проверке предложен в http://infostart.ru/public/536800/ . Без функции ПроверитьДублиИменКолонок() в указанной статье невозможно решить поставленную там задачу.
6. json 17.09.16 17:38 Сейчас в теме
(5) не понимаю, зачем проверять дубли. Сначала удаляем все колонки, которые можем удалить. Затем добавляем колонки в цикле. Перед добавлением проверяем, присутствует ли колонка с таким именем в коллекции колонок. Если присутствует, то переходим к следующей итерации цикла.

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

Отмечу, что в приведенном примере колонка Склад - добавлена через конфигуратор, а остальные колонки - добавляются программно.

Подход универсальный и не требует какой-то специальной методологической постановки задачи

Вот тут в моей публикации рассматривается другой вопрос, но создание колонок выполняется программно, хотя на этом не заостряется внимание. В примере к публикации для управляемых форм используются этот же блок процедур
Прикрепленные файлы:
ВнешняяОбработка1.epf
4. pavley2002 184 15.09.16 18:31 Сейчас в теме
(2) fancy, Процедуру СоздатьКолонкиУпр() можно применять только для программно добавленных колонок. Это обусловлено применением метода ВсеЭлементыФормы.Удалить(), в 1С:описании которого непосредственно указано:- «Доступно удаление только ранее программно добавленного элемента».
Для устранения возникшей не ясности, в описание процедуры СоздатьКолонкиУпр() добавлена строка - «Причем, для этого реквизита состав колонок указанный в управляемой форме должен быть пустым». Спасибо за указание на неточность.
7. kuzyara 754 19.09.16 09:03 Сейчас в теме
&НаСервере
Процедура СоздатьКолонкиУпр(ФормаЭта
...

Клинический случай. Дальше читать не стал.
8. pavley2002 184 26.09.16 08:47 Сейчас в теме
(7) kuzyara,
Отсутствует конструктивное предложение, хотя бы какое-нибудь. На мой взгляд, накопленный личный медицинский опыт здесь не уместен.
paybaseme; kuzyara; +2 Ответить
9. almas 200 30.10.16 13:12 Сейчас в теме
Скачал, посмотрел. Несмотря на значимость обработки ощущение отвратное. Черт нельзя было малость в удобоваримый читаемый порядок все привести???
10. pavley2002 184 01.11.16 09:25 Сейчас в теме
(9) almas,
Не обработка, а универсальная функция представлена в форме, не требующей скачивания файла, я предполагаю, что это заметно. Кроме того, Вам позволено не принуждать себя скачивать файл, который оказывает дурное влияние на настроение, бесполезен или любое другое.

paybaseme; +1 Ответить
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Руководитель проекта, аналитик, консультант
Санкт-Петербург
По совместительству

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Программист 1С
Москва
Полный день

Консультант-аналитик 1С
Москва
Полный день