IX. АВТОМАТИЧЕСКАЯ ПОДСТАНОВКА ЦЕНЫ В ДОКУМЕНТ ПРИ ВЫБОРЕ НОМЕНКЛАТУРЫ
Решим следующую задачу. Необходимо, чтобы при создании или изменении документа ОказаниеУслуги и при добавлении в табличную часть какой-нибудь номенклатуры услуг, одновременно подставлялась бы сразу актуальная цена, полученная из регистра сведений и соответствующая дате документа.
Для этого необходимо:
1. написать функцию РозничнаяЦена, которая будет возвращать актуальную цену;
2. вызвать функцию, когда в документ будет добавляться новая номенклатура.
Поскольку такая функция может понадобиться в дальнейшем, напишем ее в «общедоступном» месте – в общем модуле.
1. Создать функцию РозничнаяЦена в ветке Общие – Общие модули с названием РаботаСоСправочниками. Установить флаг Вызов сервера (чтобы экспортные процедуры и функции этого модуля можно было бы вызвать с клиента) (рис. 71а).
Рис. 71а. Свойства общего модуля
2. Поместите в модуль следующий текст.
Функция РозничнаяЦена(АктуальнаяДата,ЭлементНоменклатурыУслуг)Экспорт
//Создать вспомогательный объект Отбор
Отбор = Новый Структура("НоменклатураУслуг",ЭлементНоменклатурыУслуг);
//Получить актуальные значения ресурсов регистра
ЗначенияРесурсов=РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата,Отбор);
Возврат ЗначенияРесурсов.Цена;
КонецФункции
Поясним функцию.
Для получения розничной цены необходимо в функцию передать два параметра:
|
|
- АктуальнаяДата – параметр типа Дата, определяет точку на оси времени, в которой нас интересует значение розничной цены.
- ЭлементНоменклатурыУслуг – ссылка на элемент справочника НоменклатураУслуг, для которого необходимо получить розничную цену.
Эта структура содержит Отбор по измерениям регистра. С его помощью определяется искомое измерение регистра НоменклатураУслуг, которое равно переданной в функцию ссылке на элемент справочника.
Имя ключа структуры («НоменклатураУслуг») должна совпадать с именем измерения регистра, заданного в конфигураторе,а значение элемента структуры (ЭлементНоменклатурыУслуг) задает отбираемое по данному измерению значение.
Во второй строке идет обращение к менеджеру регистра сведений Цены (РегистрыСведений.Цены) и выполнение метода ВыполнитьПоследнее(), который возвращает значение ресурсов самой последней записи регистра, соответствующей переданной в функцию дате (АктуальнаяДата) и значениям измерений регистра Отбор.
Метод ПолучитьПоследнее возвращает структуру, содержащую значения ресурсов, которая сохраняется в переменной ЗначенияРесурсов.
В следующей строке получаем искомую розничную цену, указав имя нужного ресурса регистра через точку (ЗначениеРесурсов.Цена) и возвращаем ее при выполнении функции.
|
|
Т.о. данную функцию можно вызывать в некоторый момент времени.
3. Далее решим задачу подстановки актуальной цены в документ.
Необходимо открыть Форму документа ВыполнениеУслуги (она была создана ранее). В Модуль формы необходимо дописать Процедуру ПриИзменении.
Для этого дважды щелкните на элемент формы ПереченьНоменклатурыУслуга (рис. 71б).
Рис. 71б. Элементы документа Выполнение услуги
В окне свойств в событии ПриИзменении создайте обработчик события, в который внесем следующий текст:
&НаКлиенте
Процедура ПереченьНоменклатурыУслугаПриИзменении(Элемент)
//Получить следующую строку табличной части
СтрокаТабличнойЧасти=Элементы.ПереченьНоменклатуры.ТекущиеДанные;
//Установить цену
СтрокаТабличнойЧасти.Цена=РаботаСоСправочниками.РозничнаяЦена(Объект.Дата,СтрокаТабличнойЧасти.Услуга);
//Пересчитать сумму
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Поясним функцию.
Первая строка уже известна: сначала получаем текущую строку табличной части документа, т.к. она понадобиться в дальнейшем, и сохраним ее в переменной СтрокаТабличнойЧасти.
|
|
Затем вызываем функцию РозничнаяЦена() из общего модуля РаботаСоСправочниками.
Первым параметром в функцию передаем дату документа, на которую необходимо получить цену. Дату документа получаем из основного реквизита формы – Объект.Дата.
Вторым параметром передаем ссылку на элемент справочника НоменклатураУслуг, который содержится в текущей строке табличной части документа (СтрокаТабличной.Услуга).
Функция возвращает последнее значение цены, и это значение присваивается полю Цена в текущей строке табличной части документа (СтрокаТабличнойЧасти.Цена).
Здесь вызывается процедура РассчитатьСуммуиз общего модуля РаботаСДокументами.
Обратите внимание, что процедура ПереченьНоменклатурыУслугаПриИзменении() начинает работать в модуле формы на стороне клиента, т.к. это обработчик интерактивного события формы. Создавая заготовку этой процедуры, платформа автоматически разместит перед описанием процедуры директиву компиляции &НаКлиенте.
Затем вызываем функцию РозничнаяЦена(). Т.к. эта функция не будет найдена на стороне клиента, то исполнение будет передано в общий модуль РаботаСоСправочниками, который выполняется на сервере. После завершения функции программный код продолжит исполняться на клиенте.
|
|
Проверим в работе выполненные выше действия, запустим приложение в режиме 1С: Предприятие. Поработаем с разработанной конфигурацией.
ВВОД ДАННЫХ В БД
1. Введите в приложение не менее 8-ми документов Оказание услуги.
X. ПЕРЕЧИСЛЕНИЯ
Объект конфигурации Перечисления предназначен для описания структуры хранения постоянных наборов значений, не изменяемых в процессе работы конфигурации. На основе Перечислений платформа в БД создает таблицу, в которой можно хранить набор некоторых постоянных значений.
Набор возможных значений перечислений задается при конфигурировании системы, и пользователь не может изменять ,удалять или добавлять их (например, «включая НДС», «без НДС»).
Важная особенность перечислений – значения перечисления не «обезличены» для конфигурации, на них могут описаться алгоритмы работы программы.
1. Создайте новый объект конфигурации Перечисления с именем ВидыНоменклатурыУслуг (рис. 72а).
Рис. 72а. Выбор объекта конфигурации Перечисления
2. На закладке Данные добавить два значения перечисления (рис. 72б):
1. УслугаВЦеху,
2. УслугаВОфисе.
Рис. 72б. Данные перечисления Виды номенклатуры
3. Далее привяжем номенклатуру услуг к значениям перечисления.
В режиме Конфигуратор создадим новый реквизит справочника НоменклатураУслуг – ВидыНоменклатурыУслуг с типом ПеречислениеСсылка.ВидыНоменклатурыУслуг(рис. 72в).
Рис. 72в. Данные справочника НоменклатураУслуг
Обновим конфигурацию БД и запустим ее в режиме 1С: Предприятие.
Для каждого элемента справочника Номенклатура услуг задайте соответствующее значение реквизита Вид номенклатуры.
4. Проверим в работе выполненные выше действия, запустим приложение в режиме 1С: Предприятие.
Дата добавления: 2018-04-15; просмотров: 1730; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!