Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программное размещение элементов формы
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > База знаний > Не наши статьи > 1С:Предприятие 8.2
Vofka
В процессе своей работы каждому программисту приходится в той или иной степени редактировать типовые формы конфигураций. Но наступает момент обновления конфигурации и и мы начинаем тратить большой объем времени, чтобы сохранить внесенные изменения в типовые формы.

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

Каждый программист 1С знает, что обновление самих форм является трудоемкой и муторной процедурой. Если с текстами все же как-то попроще, можно пользоваться парсерами различной сложности, да и штатные средства платформы неплохо справляются, то с элементами форм все гораздо сложнее.

Чтобы съекономить свое время, каждый из нас изобретает для себя механизмы, с помощью которых можно управлять элементами формы: программное размещение элементов, декомпиляция формы с последующей генерацией кода и т.д.

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

Я конечно не исключение, и так же разработал для себя некоторый механизм, которым успешно пользуюсь уже несколько лет.

Нового ничего не изобрел, все старо как мир и просто в реализации.

Принцип работы прост: есть общий модуль, в котором расположены необходимы процедуры для прорисовки элементов формы, в форме документа или справочника в процедуре "ПриОткрытии" располагаем вызов основной процедуры этого модуля с передачей в нее формы. Можно пойти и иначе, расположить вызов в типовом модуле, который вызывается из большинства форм с передачей самой формы: я расположил вызов этого модуля в модуле "МеханизмНумерацииОбъектов" (УПП) в конце процедуры "УстановитьДоступностьПоляВводаНомера". Она вызывается из большинства документов и справочников, с передачей в нее формы. Мне этого оказалось достаточно.

Далее добавляем в типовой справочник или документ нужный нам реквизит (реквизит табличной части), табличную часть. В свойстве реквизита "Комментарий" описываем свои "свойства" реквизита. Все, на этом работу можно считать законченной. При открытии формы (справочника, документа) форма передается в модуль обработки, там происходит перебор всех реквизитов объектов и "разбор свойств" каждого из них. Если модуль найдет нужный реквизит (отличительной особенностью является префикс в комментарии, который располагается на первом месте "свойств"), он прочитает его "свойства" и расположит его согласно указанным "свойствам".

Что же может механизм авторазмешения реквизитов: разместить колонку в табличной части (в заданной позиции), заменить типовой реквизит в табличной части. Разместить новую табличную часть на отдельной странице. Разместить реквизит (ы) на форме на отдельной странице или заменить типовой реквизит на форме. Вывести подвал табличной чисти с отображением итогов колонки. Скрыть видимость типового реквизита. Для создаваемой страницы указать заголовок и картинку. Сгруппировать реквизиты на новой странице.

При желании каждый из вас может расширять возможности авторазмешения настолько, насколько хватит фантазии.

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

Для управления типовыми реквизитами используется макет с именем "Форма_Реквизиты", его описание вы найдете в процедуре "ИзменитьСвойстваТиповыхЭлементовФормы".

Конечно механизм не идеален, но позволяет решать 80% задач по модификации типовых форм, не беспокоясь о них при последующем обновлении конфигурации.







Текст модуля: Нажмите для просмотра прикрепленного файла

необходимо зарегистрироваться для просмотра ссылки
Егор Динин
Вот это интересно, надо будет попробывать
Vofka
Блин, забыл прицепить вложение faceoff.gif . Обновил первый пост.
Tisa
А пароль на архив можна?
Vofka
А правила почитать можно?
susanin
А вот вопрос на засыпку: можно-ли на одной форме (родительсткой) расположить другую форму (дочернюю). К примеру создаем собственный документ, дополняющий типовой и на его форме (на странице формы, странице панели) размещаем форму типового (дочернего) документа. Причем естественно родительская форма должна обрабатываться ее модулем, а размещенная на ней дочерняя форма- модулем дочерней формы.
logist
Цитата(susanin @ 10.01.13, 20:00) необходимо зарегистрироваться для просмотра ссылки
А вот вопрос на засыпку: можно-ли

Можно глаза и на жопу натянуть, только вопрос - зачем?
Ardi
Цитата(logist @ 10.01.13, 21:47) необходимо зарегистрироваться для просмотра ссылки
зачем?

Нада.
susanin
Цитата(logist @ 10.01.13, 20:47) необходимо зарегистрироваться для просмотра ссылки
Можно глаза и на жопу натянуть, только вопрос - зачем?

Можно, но только глаза на жопу натягивать действительно пока никому не нужно. До 1981 года манипулятор "мышь" тоже никому не был нужен, а сейчас без него (или аналога-точпада) просто никак.
Вот к примеру зачем на форме размещать документ HTML или элемент ActiveX? Можно-же документ HTML открывать в браузере и ActiveX в своем окне, как приложение? Но зачем-то такие элементы 1С реализовала. Наверное для того чтобы можно было-бы создавать более эргономичные формы, с которыми удобно работать. Так вот размещение на одной форме другой похоже на тот-же элемент AvtiveX. Это просто более удобно для пользователя.
Vofka
susanin, возможно вы в чем-то правы. Но ответ на ваш вопрос следующий: на текущий момент такого не сделать (по крайней мере, штатными средствами).
logist
Цитата(susanin @ 11.01.13, 12:35) необходимо зарегистрироваться для просмотра ссылки
Но зачем-то такие элементы 1С реализовала.

Потому что хтмл-документ и документ 1с это разные вещи.
Vofka
Цитата(logist @ 11.01.13, 13:03) необходимо зарегистрироваться для просмотра ссылки
Потому что хтмл-документ и документ 1с это разные вещи.

Не о том речь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.