Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1C_ПрикладноеПрограммирование8.doc
Скачиваний:
42
Добавлен:
22.09.2019
Размер:
51.67 Mб
Скачать

2.3.1.5 Создание процедуры обработки события в общем модуле

Для того, чтобы алгоритм, выполняемый при обработке события, был доступен для разных документов, мы создадим общий модуль и перенесем в него нашу процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры из общего модуля. Создадим объект конфигурации Общий модуль в ветке Общие | Общие модули и назовем его «РаботаСДокументами».

Рис. 71 Создание общего модуля

Он будет содержать следующий текст:

Рис. 72 Текст процедуры обработчика в общем модуле

Ключевое слово Экспорт в конце оператора «Процедура» как раз указывает на то, что эта процедура может быть доступна из других программных модулей. Затем в модуле нашей формы изменим текст нашего обработчика:

Рис. 73 Текст процедуры обработчика в модуле формы

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

Проверим, как это работает, и убедимся, что ничего не изменилось.

Теперь осталось и для поля «Цена» установить такой же обработчик. Так как однажды мы уже написали в модуле формы нужную нам процедуру, то мы просто могли бы сопоставить ее также и другому событию другого элемента управления, расположенного в форме. Однако стандарты разработки конфигураций фирмы «1С» не допускают такого решения.

Согласно стандартам разработки фирмы «1С», у каждого события должен быть свой обработчик. Если одинаковые действия должны выполняться при изменении разных элементов управления (например, при нажатии нескольких кнопок), то в этом случае следует поступать следующим образом:

  • создается отдельная процедура (функция), выполняющая необходимые действия;

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

  • из каждого обработчика вызывается требуемая процедура (функция).

Поэтому мы создадим обработчик события «При изменении» для поля ввода, которое расположено в колонке «Цена» и повторим в нем вызов процедуры «РассчитатьСумму» из общего модуля:

Рис. 74 Текст процедуры обработчика в модуле формы

Запустим 1С:Предприятие в режиме отладки и убедимся, что теперь сумма в строках табличной части документов «ПриходнаяНакладная» пересчитывается как при изменении количества, так и при изменении цены.

2.3.1.6 Усовершенствование формы документа

Добавим в документ «ПриходнаяНакладная» реквизиты:

  • Контрагент типа СправочникСсылка.Контрагенты;

  • РасчетныйСчет типа СправочникСылка.РасчетныеСчета;

  • СуммаДокумента типа Число(15,2).

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

Для добавления в уже созданную форму дополнительных реквизитов надо выбрать пункт главного меню «Форма»-«Размещение данных», и в появившемся диалоге «Размещение данных» поставить флажки напротив наименований добавляемых элементов. При добавлении реквизита «СуммаДокумента» вставьте его как «Надпись», выбрав в появившемся раскрывающем списке вместо типа «ПолеВвода» тип «Надпись».

Рис. 75 Изменение типа вставляемых объектов

Рис. 76 Размещение дополнительных данных

Для обеспечения выбора расчетных счетов только подчиненных выбранному контрагенту, надо в его свойстве «СвязьПоВладельцу» установить значение «Поставщик», тогда после выбора поставщика для выбора будут предлагаться только расчетные счета данного поставщика.

Рис. 77 Указание связи по владельцу

Рис. 78 Установленная связь по владельцу

Для того, чтобы «защититься» от смены поставщика после выбора расчетного счета, надо у поля ввода, связанного с поставщиком, определить обработчик «ПриИзменении»:

Рис. 79 Текст процедуры обработчика

Рис. 80 Связь обработчика с событием

Сумму документа будем рассчитывать в обработчике события «Перед» записью модуля документа. Для заполнения этой процедуры надо выбрать форму документа и из контекстного меню формы выбрать пункт «Свойства», там прокрутить диалог вниз до раздела «События», и щелкнуть по значку события «Перед записью», в ответ откроется текстовый редактор с заготовкой процедуры, где надо набрать следующий текст:

Рис. 81 Текст обработчика события

Рис. 82 Свойства формы документа

В нашем случае общая сумма документа считается только после нажатия кнопки [Записать]. Если необходимо видеть сумму табличной части во время ее заполнения данными, то это можно организовать несколькими способами:

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

  • В случае, когда табличная часть документа одна, в свойствах табличного поля «Материалы» надо поставить флажок «Подвал»:

Рис. 83 Свойства табличного поля

В свойствах колонки «Сумма» надо поставить флажок «Показывать итог в подвале» и выбрать в рубрике «Горизонтальное положение» выравнивание по правому краю.

Рис. 84 Свойства итогового поля