Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб 03.doc
Скачиваний:
5
Добавлен:
13.08.2019
Размер:
197.12 Кб
Скачать

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

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

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

Создание документа «ПриходнаяНакладная»

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

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

Создадим новый объект конфигурации «Документ». Зададим имя документа – «ПриходнаяНакладная».

Создадим реквизит документа с именем «Склад» и типом «СправочникСсылка.Склады»:

После этого добавим табличную часть с именем «Материалы» и создадим у нее четыре реквизита:

  • «Материал» с типом «СправочникСсылка.Номенклатура»;

  • «Количество» с типом Число, длиной 15, точностью 3, неотрицательно;

  • «Цена» с типом Число, длиной 15, точностью 2, неотрицательное;

  • «Сумма» с типом Число, длиной 15, точностью 2, неотрицательное.

Запустим 1С:Предприятие в режиме отладки и протестируем получившийся результат.

Выполнить команду «Операции» / «Документы»…, выберем документ «ПриходнаяНакладная». Система откроет одну из основных форм документа – основную форму списка.

Создадим новый документ: «Действия» / «Добавить» (либо клавиша «Insert»). Система автоматически присвоит номер новому документу и останется заполнить только табличную часть. Заполним ее материалами для ремонта телевизоров так, как показано на рисунке:

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

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

Для этого сначала создадим собственную форму документа, а затем воспользоваться возможностями встроенного языка.

Создание формы документа

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

Вернемся в конфигуратор и откроем окно редактирования объекта конфигурации «ПриходнаяНакладная».

На закладке «Формы» следует нажать на символ лупы в поле ввода основных форм документа, система вызовет конструктор форм. Этот инструмент так же построен по принципу «мастеров». Сразу нажмем кнопку «Готово», согласившись тем самым со всем, что нам предложила система.

После этого в дереве объектов конфигурации у объекта конфигурации Документ «ПриходнаяНакладная» появилась форма «ФормаДокумента», а на экране открылось окно редактора форм, содержащее эту форму:

Эта форма содержит большое количество всевозможных полей. Эти поля называются элементами управления. Они имеют разное назначение и разное поведение, которое соответствует их назначению. Однако все они служат для того, что бы отображать информацию, хранящуюся в базе данных и организовывать интерактивную работу с этой информацией.

Мы будем работать с тремя полями ввода, расположенными в колонках «Количество», «Цена» и «Сумма».

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

Создание процедуры обработки в модуле

Щелкните правой кнопкой мыши на поле ввода в колонке «Количество» и откройте для него палитру свойств. Прокрутите список и найдите перечень событий, которые могут быть связаны с этим полем ввода. Найдите событие «При изменении». Это событие возникает после изменения значения поля вода.

Щелкните по кнопке с лупой в конце поля ввода, и система создаст заготовку процедуры обработчика этого события в модуле формы.

В модуль формы добавим следующий текст:

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

Этот элемент управления отображает строки табличной части нашего документа. Получить ту строку, в которой в настоящее время осуществляется редактирование, можно при помощи свойства программного объекта «ТабличноеПоле – ТекущиеДанные». Таким образом, в результате выполнения первой строки переменная «СтрокаТабличнойЧасти» будет содержать объект «ДокументТабличнаяЧастьСтрока.ПриходнаяНакладная.Материалы», в котором находятся редактируемые данные.

Во второй строке вычисляется сумма как произведение количества и цены. Объект «ДокументТабличнаяЧастьСтрока.<имя>» позволяет обратиться к данным конкретной колонки, указав имя колонки в качестве свойства объекта (например, «СтрокаТабличнойЧасти.Количество»).

Теперь надо открыть список документов «ПриходнаяНакладная» и открыть любой из двух созданных ранее документов. Если теперь вы поменяете количество в любой строке документа, то сумма в строке будет пересчитана автоматически.

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

Для описания таких «общедоступных» мест служат объекты конфигурации Общий модуль, расположенные в ветке «Общие» / «Общие модули». Процедуры и функции, содержащиеся в этих модулях, могут быть доступны для любых объектов конфигурации.

Создание процедуры обработки события в общем модуле

Для того, чтобы алгоритм, выполняемый при обработке события, был доступен для разных документов, создадим общий модуль и перенесем в него процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры из общего модуля.

Создадим объект конфигурации Общий модуль в ветке «Общие» / «Общие модули» и назовем его «РаботаСДокументами». Он будет содержать следующий текст:

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

Затем в модуле формы изменим текст обработчика:

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

Теперь проверьте, как это работает. Все должно работать правильно.

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

  • создается отдельная процедура (функция), выполняющая необходимые действия;

  • для каждого элемента управления создается отдельный обработчик с именем, назначенным по умолчанию;

  • из каждого обработчика вызывается требуемая процедура (функция).

Поэтому создадим обработчик события «ПриИзменении» для поля ввода, которое расположено в колонке «Цена» и повторим в нем вызов процедуры «РассчитатьСумму» из общего модуля:

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

Создание документа «ОказаниеУслуги»

Теперь аналогичным образом создадим второй документ – «ОказаниеУслуги». Для этого потребуется выполнить следующие действия:

  1. создать новый объект конфигурации Документ «ОказаниеУслуги» с реквизитами:

  • «Склад», тип «СправочникСсылка.Склады»;

  • «Клиент», тип «СправочникСсылка.Клиенты»;

  • «Мастер», тип «СправочникСсылка.Сотрудники»;

  1. создать табличную часть этого документа «ПереченьНоменклатуры» с реквизитами:

  • «Номентклатура», тип «СправочникСсылка.Номенклатура»;

  • «Количество», тип «Число», длина 15, точность 3, неотрицательное;

  • «Цена», тип «Число», длина 15, точность 2, неотрицательное;

  • «Сумма», тип «Число», длина 15, точность 2, неотрицательное;

  1. создать основную форму документа;

  2. для полей ввода колонок «Количество» и «Цена» создать обработчик события «ПриИзменении», в котором вызвать процедуру «РассчитатьСумму» из общего модуля «РаботаСДокументами».

В результате документ «ОказаниеУслуги» будет выглядеть следующим образом:

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]