Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-методическое пособие РЭИС.doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
3.85 Mб
Скачать

Общая постановка задачи

В курсе лабораторных работ рассматривается сквозная задача, демонстрирующая основные приемы и методы разработки в 1С:Предприятие 8.0. На протяжении всех лабораторных работ будет постепенно создаваться конфигурация, которая практически полностью автоматизирует работу небольшой фирмы ООО «Мастер», которая оказывает услуги по ремонту различной бытовой техники (в основном ремонт телевизоров и установка стиральных машин). Создаваемая конфигурация позволит вести учет материалов, отслеживая их поступление и расход, так же сможет предоставлять некоторые итоговые данные о движениях и остатках материалов, выводить на печать бумажные аналоги электронных документов и др.

Список индивидуальных данных

Продолжается разработка выбранной в первой лабораторной работе индивидуальной темы.

Пример выполнения работы

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

Поэтому для хранения стоимости услуг лучше использовать регистр сведений.

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

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

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

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

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

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

Теперь запустим 1С:Предприятие в режиме отладки и посмотрим, как работает наш периодический регистр сведений Цены.

Зададим стоимость услуг ООО «Мастер» следующим образом:

После этого зададим розничные цены на материалы:

Итак, теперь мы имеем очень полезную возможность в нашей программе - возможность установки цен на услуги и материалы. Поскольку цены хранятся с привязкой к дате, мы можем заранее установить новые цены и быть уверенными в том, что новые цены вступят в действие не раньше указанной для них даты.

Теперь посмотрим, как можно использовать заданные цены в документе «ОказаниеУслуги».

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

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

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

Разместим в нем следующий текст:

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

  • АктуалънаяДата - параметр типа Дата, который будет определять точку на оси времени, на которую нас интересует значение розничной цены

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

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

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

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

Теперь проверим, как работает эта функция.

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

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

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

Прокомментируем содержимое обработчика.

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

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

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

Проверим, как теперь работает документ. Запустим 1С:Предприятие в режиме отладки и откроем регистр сведений «Цены». Для транзистора Philips добавим следующим числом новую цену:

Теперь откроем документ ОказаниеУслуги №1. Как вы помните, этим документом мы как раз «израсходовали» один такой транзистор.

Установим дату документа равной той дате, когда было задано первое значение цены транзистора, и повторим выбор транзистора в колонке «Номенклатура» табличной части документа. Автоматически установится первое значение цены.

Теперь изменим дату документа на следующий день и снова повторим выбор транзистора. Будет установлено новое значение цены:

Таким образом, в документ подбирается актуальная, на момент создания документа, цена услуги.

Не будем сохранять изменения в документе.

Оформить отчет по лабораторной работе и ответить на контрольные вопросы.

Отчет оформляется стандартно, с обязательным указанием номера лабораторной работы, ее темы, сведений о лице, выполнившем лабораторную работу (ФИО, № группы), должен быть указан порядок выполнения работы (последовательность действий, какие объекты были созданы, их роль и обоснование необходимости создания), который должен подтверждаться необходимыми скриншотами и/или алгоритмами.