Теперь хотелось бы и для поля Цена и Сумма сделать то же самое.
Поэтому лучше будет поместить расчет суммы в некоторое «общедоступное» место, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм. Для описания таких «общедоступных» мест служат объекты конфигурации Общий модуль, расположенные в ветке Общие > Общие модули. Процедуры и функции, содержащиеся в этих модулях, могут быть доступны для любых объектов конфигурации.
- В режиме конфигуратор:
Добавим объект конфигурации Общий модуль. Для этого раскроем ветвь Общие в дереве объектов конфигурации, нажав на + слева от нее. Затем выделим ветвь Общие модули и нажмем кнопку Добавить в командной панели окна конфигурации:
Рис. 4.5. Общие модули
Назовем его РаботаСДокументами и установим в его свойствах флажок Клиент (управляемое приложение), а флажок Сервер снимем. Это означает, что экземпляры этого модуля будут скомпилированы в контексте тонкого клиента и в контексте веб-клиента
Рис. 4.6. Свойства: РаботаСДокументами
Внесем в общий модуль следующий текст:
Процедура РассчитатьСумму(строкаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество*СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Изменим текст обработчика. Для этого вернитесь в модуль формы документа, выберите поле КоличествоПриИзменении.
&НаКлиенте
Процедура МатериалыКоличествоПриИзменении (Элемент)
СтрокаТабличнойЧасти. = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Создадим обработчик события ПриИзменении для поля табличной части МатериалыЦена так же, как мы делали это для поля Материалы Количество, и повторим в нем вызов процедуры РассчитатьСумму из общего модуля.
- Листинг процедуры «МатериалыЦенаПриИзменении()»
&НаКлиенте
Процедура МатериалыЦенаПриИзменении (Элемент)
СтрокаТабличнойЧасти. = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
- В режиме 1С: Предприятие:
Запустим 1С: Предприятие в режиме отладки и убедимся, что теперь сумма в строках табличной части документов ПриходнаяНакладная пересчитывается как при изменении количества, так и при изменении цены.
Документ «Оказание услуги»
- В режиме конфигуратор:
Добавим новый объект конфигурации Документ и назовем его ОказаниеУслуги.
- На закладке Основные: Представление объекта задавать не будем, вместо него будет использоваться Синоним объекта. Представление списка зададим как Оказание услуг.
- На закладке Подсистемы: отметим, что документ будет доступен в подсистемах Оказание услуг и Бухгалтерия.
- На закладке Данные:
создадим реквизиты документа:
- Склад, тип СправочникСсылка.Склады. Выберем для свойства Значение заполнения предопределенный элемент Основной справочника Склады.
- Клиент, тип СправочникСсылка.Клиенты. Установим свойство Проверка заполнения в значение Выдавать ошибку.
- Мастер, тип СправочникСсылка.Сотрудники. Установим свойство Проверка заполнения в значение Выдавать ошибку.
Создадим табличную часть этого документа ПереченьНоменклатуры с реквизитами:
- Номенклатура, тип СправочникСсылка.Номенклатура;
- Количество, тип Число, длина 15, точность 3, неотрицательное;
- Цена, тип Число, длина 15, точность 2, неотрицательное,
- Сумма, тип Число, длина 15, точность 2, неотрицательное;
Установим для табличной части в целом и для каждого ее реквизита свойство Проверка заполнения в значение Выдавать ошибку.
- На закладке Формы: создадим основную форму документа:
Для поля ПереченьНоменклатурыКоличество создадим обработчик события ПриИзменении, в котором будем вызывать процедуру РассчитатьСумму из общего модуля РаботаСДокументами.
При этом откроется модуль формы с шаблоном обработчика события ПереченьНоменклатурыКоличествоПриИзменении, который мы пока заполнять не будем, а перейдем в окно элементов формы на закладку Форма и аналогичным образом создадим обработчик события ПереченьНоменклатурыЦенаПриИзменении для поля ПереченьНоменклатурыЦена.
Далее модуль формы документа ОказаниеУслуги нужно заполнить следующим образом:
Листинг 4.2. Модуль формы документа «ОказаниеУслуги»
В заключение отредактируем командный интерфейс, чтобы в подсистеме Оказание услуг была доступна команда создания новых документов.
Для разнообразия воспользуемся другим способом. Откроем окно редактирования объекта конфигурации Подсистема ОказаниеУслуг и нажмем кнопку Командный интерфейс.
В открывшемся окне отразятся все команды выбранной подсистемы.
В группе Панель действий.Создать включим видимость у команды Оказание услуги: создать
Рис. 4.7. Видимость у команды Оказание услуги: создать
В режиме 1С:Предприятие:
В панели действий раздела Оказание услуг вызовем команду создания документа Оказание услуги и заполним его следующим образом:
Рис. 4.8. Оказание услуги
Обратите внимание, что склад Основной подставляется по умолчанию, а для полей Мастер и Клиент выполняется проверка заполнения. А также при вводе цены и количества в табличную часть документа Оказание услуги сумма пересчитывается по нашему алгоритму.
Контрольные вопросы:
- Какими характерными особенностями обладает документ.
- Для чего предназначены реквизиты и табличные части документа.
- Какие существуют основные формы документа.
- Что такое проведение документа.
- Как создать объект конфигурации Документ и описать его основную структуру.
- Как создать новый документ и заполнить его данными.
- Как создать собственную форму документа.
- Что такое конструктор форм.
- Что такое редактор форм.
- Что такое элементы формы.
- Что такое события и с чем они связаны.
- Что такое обработчик события и как его создать.
- Что такое модуль и для чего он нужен.
- Зачем нужны общие модули.
- Что такое типообразующие объекты.