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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!