- •Объект конфигурации Регистр сведений
- •Создание функции Розничная цена()
- •Для получения розничной цены будем передавать в функцию два параметра:
- •Перечисления
- •Объект конфигурации Перечисление
- •Реорганизация справочника Номенклатура
- •Конструктор (листинг 3.1).
- •Изменение процедуры проведения документа Оказание услуги
- •Создание оборотного регистра накопления Продажи
- •Изменение процедуры проведения документа Оказание услуги
Создание функции Розничная цена()
Сначала создадим функцию, которая будет возвращать актуальную розничную цену номенклатуры.
Откроем конфигуратор, в ветке Общие ► Общие модули создадим новый объект конфигурации Модуль и назовем его РаботаСоСправочниками.
Поместим в нем следующий текст (листинг 1.1).
Листинг 1.1. Функция РозничнаяЦена()
Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры)Экспорт
// Создать вспомогательный объект Отбор.
Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);
// Получить актуальные значения ресурсов регистра.
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.Цена;
КонецФункции
Для получения розничной цены будем передавать в функцию два параметра:
• АктуальнаяДата - параметр типа Дата определяет точку на оси времени, в которой нас интересует значение розничной цены.
• ЭлементНоменклатуры - ссылка на элемент справочника Номенклатура, для которого хотим получить розничную цену.
В теле процедуры сначала создаем вспомогательный объект Отбор.
С его помощью определяем, что нас будут интересовать записи регистра, в которых измерение Номенклатура равно переданной в процедуру ссылке на элемент справочника.
Во второй строке обращаемся к менеджеру регистра сведений Цены (РегистрыСведений.Цены) и выполняем метод Получить Последнее(), который возвращает значения ресурсов наиболее поздней записи регистра, соответствующей передаваемой дате (АктуальнаяДата) и значениям измерений регистра (Отбор).
Значения ресурсов возвращаются в объекте Структура, поэтому в следующей строке получаем искомую розничную цену, просто указав имя нужного ресурса регистра через точку (ЗначенияРесурсов.Цена).
Проверяем, как работает эта функция.
Автоматическое заполнение цены
в документе Оказание услуги
Задача, которая стоит, заключается в следующем.
При создании документа ОказаниеУслуги необходимо обеспечить автоматическое заполнение поля Цена после того, как пользователь выберет услугу.
Причем цена услуги должна определяться исходя из даты создаваемого документа.
Найдем в конфигураторе документ ОказаниеУслуги и откроем его форму ФормаДокумента.
Откроем свойства поля ввода, расположенного в колонке Номенклатура, и внизу списка найдем событие ПриИзменении.
Нажмем на кнопку с лупой и в открывшейся заготовке обработчика события напишем следующий текст (листинг 1.2).
Листинг 1.2. Процедура ПереченъНоменклатурыНоменклатураПриИзменении()
Прокомментируем содержимое обработчика.
Первая строка обработчика уже знакома: получаем текущую строку табличной части документа, так как она понадобится в дальнейшем.
Во второй устанавливаем полученную цену в документе, вызывая нашу процедуру РозничнаяЦена.
Первым параметром передаем дату документа, на которую необходимо получить цену.
Вторым параметром передаем ссылку, которую отображает элемент управления формой, вызвавший это событие (Элемент.Значение), то есть ссылку на элемент справочника Номенклатура.
В заключение вызываем процедуру РассчитатьСумму из общего модуля РаботаСДокументами для того, чтобы она пересчитала итоговую сумму в строке нашего документа.
Проверим, как работает документ. Запустим 1С:Предприятие в режиме отладки и откроем регистр сведений Цены.
Для транзистора Philips добавим следующим числом новую цену (рис. 1.4).
Рис. 1.4. Регистр сведений Цены
Откроем документ Оказание услуги № 1. Этим документом «израсходовали» один транзистор
Установим дату документа равной той дате, когда было задано первое значение цены транзистора, и повторим выбор транзистора в колонке Номенклатура табличной части документа. Автоматически установится первое значение цены (рис. 1.5).
Теперь изменим дату документа на следующий день и снова повторим выбор транзистора.
Будет установлено новое значение цены (рис. 1.6).
Рис. 1.6. Заполнение документа Оказание услуги
Таким образом, в документе появляется актуальная на момент создания документа цена услуги.
