Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка - курсы.doc
Скачиваний:
29
Добавлен:
21.11.2019
Размер:
2.53 Mб
Скачать

3 Задание

3.1 Создать регистр сведений для хранения стоимости услуг.

3.2 Связать регистр с документом «ОказаниеУслуги».

4 Ход работы

Очевидно, что в «КомпМастер» существует перечень услуг, который определяет стоимость каждой услуги. Стоимость услуги является неотъемлемым свойством самой услуги, и поэтому ее следует добавить в качестве реквизита справочника «Номенклатура».

Однако стоимость услуг имеет особенность меняться со временем. И может сложиться такая ситуация, когда потребуется внести изменения или уточнения в один из ранее проведенных документов «ОказаниеУслуги». В этом случае нельзя будет получить правильную стоимость услуги, поскольку в реквизите справочника будет храниться последнее введенное значение.

4.1 Создание периодического регистра сведений «Цены»

Приступим к созданию периодического регистра сведений, который будет хранить развернутые во времени розничные цены материалов и стоимости услуг, оказываемых «КомпМастер».

Откроем конфигуратор и создадим новый объект конфигурации «Регистр сведений». Назовем его «Цены». Установим периодичность этого регистра в пределах секунды.

Рисунок 1 – Создание регистра сведений «Цены» и установка периодичности

Перейдем на закладку «Данные» и создадим измерение регистра «Номенклатура» с типом «СправочникСсылка.Номенклатура». Укажем, что это измерение будет ведущим.

Рисунок 2 – Создание измерения «Номенклатура»

Свойство «Ведущее» имеет смысл использовать лишь тогда, когда измерение имеет тип ссылки на объект базы данных. Установка свойства «Ведущее» будет говорить о том, что запись регистра сведений представляет интерес, пока существует этот объект. При удалении объекта все записи регистра сведений по этому объекту тоже будут автоматически удалены. Кроме того, в форме списка справочника появляется кнопка командной панели «Перейти». По ней возможен переход к записям регистра, отобранным по значению выбранного элемента справочника.

После этого создадим новый ресурс «Цена», тип «Число», длина 15, точность 2, неотрицательное.

Рисунок3 – Создание ресурса «Цена»

Запустим 1С Предприятие в режиме отладки и зададим стоимость услуг и цены на материалы. Выберем «Операции» - «Регистр сведений» - «Цены».

Зададим стоимость услуг и материалов следующим образом:

Рисунок 4 – Список «Цены»

В качестве периода установим дату днем ранее.

4.2 Создание функции РозничнаяЦена()

Создадим функцию, которая будет возвращать нам актуальную розничную цену номенклатуры.

Откроем конфигуратор, в ветке «Общие» - «Общие модули» создадим новый объект конфигурации «Модуль» и назовем его «РаботаСоСправочниками».

Поместим в нем следующий текст:

Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт

// Создать вспомогательный объект Отбор

Отбор = Новый Структура("Номенклатура",ЭлементНоменклатуры);

// Получить актуальные значения ресурсов регистра

ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

Возврат ЗначенияРесурсов.Цена;

КонецФункции

Рисунок 5 – Общий модуль «РаботаСоСправочниками»

Для получения розничной цены мы будем передавать в функцию два параметра:

«АктуальнаяДата» – параметр типа «Дата» определяет точку на оси времени, в которой нас интересует значение розничной цены.

«ЭлементНоменклатуры» – ссылка на элемент справочника «Номенклатура», для которого мы хотим получить розничную цену.

В теле процедуры мы сначала создаем вспомогательный объект «Отбор». С его помощью определяем, что нас будут интересовать записи регистра, в которых измерение «Номенклатура» равно переданной в процедуру ссылке на элемент справочника.

Во второй строке мы обращаемся к менеджеру регистра сведений «Цены» («РегистрыСведений.Цены») и выполняем метод «ПолучитьПоследнее()», который возвращает нам значения ресурсов наиболее поздней записи регистра, соответствующей передаваемой дате («АктуальнаяДата») и значениям измерений регистра («Отбор»).

Значения ресурсов возвращаются в объекте «Структура», поэтому в следующей строке мы получаем искомую нами розничную цену, просто указав имя нужного нам ресурса регистра через точку («ЗначенияРесурсов.Цена»).

4.3 Автоматическое заполнение цены в документе «ОказаниеУслуги»

Задача заключается в следующем. При создании документа «ОказаниеУслуги» нам необходимо обеспечить автоматическое заполнение поля «Цена» после того, как пользователь выберет услугу. Причем цена услуги должна определяться исходя из даты создаваемого документа.

Найдем в конфигураторе документ «ОказаниеУслуги» и откроем его форму «ФормаДокумента». Откроем свойства поля ввода, расположенного в колонке «Номенклатура», и внизу списка найдем событие «При изменении». Нажмем на кнопку с лупой.

В открывшейся заготовке обработчика события напишем следующий текст:

// Получить текущую строку табличной части

СтрокаТабличнойЧасти = ЭлементыФормы.ПереченьНоменклатуры.ТекущиеДанные;

// Установить цену

СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Дата,Элемент.Значение);

// Пересчитать сумму строки

РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

Первая строка обработчика уже знакома: получаем текущую строку табличной части документа, так как она понадобится в дальнейшем.

Во второй устанавливаем полученную цену в документе, вызывая нашу процедуру «РозничнаяЦена». Первым параметром передаем дату документа, на которую необходимо получить цену. Вторым параметром передаем ссылку, которую отображает элемент управления формой, вызвавший это событие («Элемент.Значение»), то есть ссылку на элемент справочника «Номенклатура».

В заключение вызываем нашу процедуру «РассчитатьСумму» из общего модуля «РаботаСДокументами», чтобы она пересчитала итоговую сумму в строке документа.

Рисунок 6 – Процедура ПереченьНоменклатурыНоменклатураПриИзменении

Запустим 1С Предприятие в режиме отладки. Создадим новый документ «ОказаниеУслуги», который будет расходовать один транзистор. Проведем его текущим числом.

Рисунок 7 – Новый документ

Как можно было заметить, после выбора номенклатуры, цена транзистора была введена автоматически.

Далее, откроем регистр сведений «Цены» («Операции» - «Регистр сведений» - «Цены») и добавим запись с датой, на один день позже текущей даты («Действия» - «Добавить»). В поле «Номенклатура» выберем транзистор и введем его новую цену, например 40 рублей.

Рисунок 8 – Новая позиция регистра сведений «Цены»

Вернемся в документ «ОказаниеУслуги», созданный ранее. Изменим дату документа на два дня вперед текущей даты и заново выберем транзистор в поле «Номенклатура». Как видно, цена в поле «Цена» автоматически изменилась на новую. Провести такой документ в данном случае нельзя, так как дата установленна позже текущей. Можно сохранить документ нажатием кнопки «Записать»

Рисунок 9 – Новая цена была автоматически выбрана