Документ «Поступление товаров»
В рамках нашей задачи создадим документ «Поступление товаров». Он будет находиться в подсистеме «Торговля». Для простоты будем полагать, что у него четыре реквизита: • «Контрагент» (тип <СправочникСсылка.Контрагенты>); • «КонтактноеЛицо» (тип <СправочникСсылка.КонтактныеЛица>); • «Сотрудник» (тип <СправочникСсылка.ФизическиеЛица>); • «СуммаДокумента» (тип <Число> длина 15, точность 2). Определим одну табличную часть «Товары», ее состав: • Номенклатура(тип <СправочникСсылка.Номенклатура>); • Количество (тип <Число> длина 10, точность 0); • Цена (тип <Число> длина 10, точность 2); • Сумма (тип <Число> длина 10, точность 2). Рисунок 2.38 Формирование формы документа. Создайте форму списка, добавив к форме по умолчанию «Контрагент», «СуммаДокумента», и форму документа. При формировании формы документа реквизит «СуммаДокумента» сделаем надписью (Рисунок 2.38). Полученная форма будет мало «радовать» пользователя своей функциональностью. Считается уже правилом хорошего тона, чтобы при выборе из справочника номенклатурной позиции автоматически в документ переносилась цена (если такая возможность есть), а после проставления количества рассчитывалась общая сумма за позицию. Кроме этого, перечень выбираемых контактных лиц должен определяться выбранным контрагентом и т.п. Для начала разберемся с контактными лицами. В свойстве «СвязиПараметровВыбора» для элемента диалога «Контактное Лицо» в форме документа установите значение «Контрагент» (Рисунок 2.39). Рисунок 2.39 Выбор связи Установка данного свойства позволит пользователю после выбора контрагента выбирать контактное лицо из списка только этого контрагента.
В результате форма документа будет выглядеть следующим образом (Рисунок 2.40). Рисунок 2.40 Форма документа Для нашей задачи необходимо подставить цену и рассчитать суммы по строке табличной части. В поле Номенклатура табличной части Товары напишем процедуру: &НаКлиенте Процедура ТоварыНоменклатураПриИзменении(Элемент) // Вставить содержимое обработчика. СтрокаТЧ=Элементы.Товары.ТекущиеДанные; СтрокаТЧ.Цена=ПолучитьЦенуНоменклатуры(СтрокаТЧ.Номенклатура); СтрокаТЧ.Количество =1; ТоварыКоличествоПриИзменении(Элемент);
КонецПроцедуры Но для работы этой процедуры необходимо написать дополнительную функцию, которая будет выполняться на сервере без контекста формы (без данных формы), и возвращать ЦенуПокупки: &НаСервереБезКонтекста Функция ПолучитьЦенуНоменклатуры(Номенклатура); Возврат Номенклатура.ЦенаПокупки КонецФункции Текст обработчика события (нужно привязать к полю «Количество» табличной части), осуществляющего расчет суммы строки табличной части: &НаКлиенте Процедура ТоварыКоличествоПриИзменении(Элемент) СтрокаТЧ=Элементы.Товары.ТекущиеДанные; СтрокаТЧ.Сумма=СтрокаТЧ.Количество*СтрокаТЧ.Цена; ПересчетСуммыДокумента(Элемент); КонецПроцедуры Сумму документа, например рассчитаем в процедуре «ПересчетСуммыДокумента» на форме документа: &НаКлиенте Процедура ПересчетСуммыДокумента(Элемент) Объект.СуммаДокумента=Объект.Товары.Итог("Сумма"); КонецПроцедуры Закомментируем весь механизм «ПересчетСуммыДокумента». В модуле объекта, вместо него (второй способ), запишем процедуру: Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) // Вставить содержимое обработчика. СуммаДокумента=Товары.Итог("Сумма"); КонецПроцедуры Хотелось бы отметить, что данное событие (ПередЗаписью) можно «отрабатывать» как в модуле объекта, так и в модуле формы. В данном случае лучше использовать обработчик события, содержащийся в модуле объекта (он будет исполняться как при программной записи объекта, так и при интерактивной).
Заметим, что в нашем случае общая сумма документа считается только после нажатия кнопки «Записать» в форме документа. Если необходимо видеть сумму табличной части во время ее заполнения существует и третий способ: В свойствах табличного поля «Товары» отметьте флажок «Подвал» (Рисунок 2.41): Рисунок 2.41 Флажок «Подвал» табличной части В свойствах колонки «Сумма» должен быть отмечен флаг «ОтображатьВПодвале» (Рисунок 2.42). Рисунок 2.42 Отображение в подвале Для того чтобы СуммаДокумента отображалась в подвале необходимо изменить ПутьКДаннымПодвала на Объект.Товары.ИтогСумма. Рисунок 2.43. Путь к данным подвала. Следует обратить внимание на то, что в реальных конфигурациях, обработчиков события даже для такого простого документа должно быть больше (для реализации «защиты от дурака», проверки наполненности реквизитов и т.п.). Например, необходимо при смене контрагента, ощищать выбранное контактное лицо. Для поля «Контрагент» напишем процедуру: &НаКлиенте Процедура КонтрагентПриИзменении(Элемент) // Вставить содержимое обработчика. Объект.КонтактноеЛицо=" "; КонецПроцедуры
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|