Знакомство с платформой 1С:Предприятие 8.1

Архитектура системы 1С:Предприятие, обзор средств разработки и знакомство с конфигуратором. Окно запуска и создание новой информационной базы. Использование справочников и их печатная форма. Внесение изменений в печатную форму, работа с документами.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.03.2011
Размер файла 8,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Автоматически созданный конструктором макет с именем Печать имеет несколько областей, одна из которых содержит заголовочную информацию, которая так и называется -- Заголовок (рис. 1.29). И в следующих двух строках процедуры в табличный документ выводится первая секция:

Область = Макет.ПолучитьОбласть("Заголовок");

ТабДок.Вывести(Область).

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

Учитывая вид макета (рис. 1.29), можно сказать, что основное содержание печатной формы справочника Товары представляет совокупность одинаковых по структуре строк, подписи для которых располагаются в секции Шапка. Метод Выбрать(), применяемый к справочнику Товары, позволяет подготовить дальнейшую последовательную выборку строк справочника с помощью другого метода -- Следующий(). Этот метод последовательно извлекает все имеющиеся элементы выборки (в данном случае в выборку входят все элементы справочника, но может быть и по другому), и при каждом проходе цикла с помощью конструкции

Пока Выборка.Следующий() Цикл мы получаем очередной элемент справочника. Элемент справочника также представляет собой один из объектов системы 1С:Предприятие. В этом цикле перебора строк справочника производится периодическое заполнение секции Элемент информацией, содержащейся в реквизитах справочника. Для этого используется свойство Параметры, позволяющее получить доступ к значению конкретного параметра, расположенного в области макета:

Элемент.Параметры.Заполнить(Выборка).

Свойство Параметры содержит коллекцию параметров области макета табличного документа.

После установки значений параметров далее с помощью метода Вывести() табличный документ заполняется на основании макета. И результат выполнения цикла (перебора элементов справочника) заключается в том, что в табличном документе создается количество строк, соответствующее числу элементов в справочнике Товары.

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

ТабДок.ОтображатьСетку = Ложь; указано, что не надо выводить сетку. В качестве альтернативы для свойства табличного документа ОтображатьСетку можно указать значение Истина. Тогда для всего табличного документа (в режиме 1С:Предприятие) будет установлена сетка.

Другое свойство Защита позволяет при установке значения Истина защитить табличный документ от редактирования и копирования. В нашем примере мы этого не делали:

ТабДок.Защита = Ложь.

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

Свойство ТолькоПросмотр позволяет обеспечить два варианта работы с табличным документом:

только просмотра информации (при значении Истина), в этом случае будут недоступны для редактирования ячейки и рисунки, у которых установлено свойство Защита (производится в окне свойств - рис. 1.32);

возможность изменения информации (при значении Ложь) в табличном документе при работе в режиме 1С:Предприятие.

Свойство ОтображатьЗаголовки содержит признак отображения заголовков колонок и строк таблицы. В случае если для данного свойства установлено значение Истина, то в табличном документе будут выведены номера строк и колонок в верхней и левой части таблицы.

Обратим внимание на последнюю строку процедуры листинга 1.1:

ТабДок.Показать(), в которой используется метод Показать()для отображения табличного документа на экране.

Рис. 1.32. Установка флажка для защиты ячеек табличного документа

Фактически на данном примере произошло первое знакомство со встроенным языком 1С:Предприятие. Необходимые справочные сведения по методам и свойствам объектов мы рассмотрели непосредственно в этом разделе.

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

Теперь при желании печатную форму можно скорректировать (изменить информацию, содержащуюся в ячейках), а также сохранить как рабочую книгу Microsoft Excel (для этого следует в меню Файл выбрать раздел Сохранить как и далее выбрать вариант рабочей книги Microsoft Excel).

Рис. 1.33. Печатная форма справочника Товары

Внесение изменений в печатную форму

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

Как и во всех инструментальных средах разработки в режиме конфигуратора системы 1С:Предприятие имеется возможность размещения на экранных формах разнообразных элементов управления.

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

Нам необходимо сделать в рассматриваемой форме списка справочника Товары одну доработку -- обеспечить возможность печати товаров, стоимость которых не превышает указанное в поле ввода значение цены.

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

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

Рис. 1.34. Добавление поля ввода в форму списка справочника Товары

Поле ввода является наиболее распространенным элементом управления. Оно используется для ввода значений непосредственно с клавиатуры в текстовое окно на форме, для выбора значений из списков и выбора ссылок на различные объекты.

В режиме конфигуратора при открытой форме (в данном случае мы работаем с формой списка) меню в верхней части окна изменяется -- в нем появляется раздел Форма. От нас требуется в этом разделе выбрать пункт Вставить элемент управления и затем в списке элементов щелкнуть на строке -- Поле ввода.

Для имени поля ввода установим значение ЗначениеЦеныПоступления, а аналогичный заголовок (подпись на форме рядом с полем) среда разработки сформирует автоматически.

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

В связи с этим от нас требуется подкорректировать процедуру печати, ранее созданную конструктором. Теперь автоматически сгенерированная процедура Печать()должна выглядеть так, как показано на листинге 1.2. Это будет нашим первым шагом самостоятельного написания программного кода. Вообще такой стиль программирования достаточно популярен -- часть работы выполняется с помощью средств автоматизации, а затем ряд корректирующих действий производится вручную.

Листинг 1.2. Процедура печати с учетом установки границы цены

Процедура Печать(Элемент)

//{{_КОНСТРУКТОР_ПЕЧАТИ_СПИСОК(Печать)

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные

// вручную изменения будут утеряны!!!

ТабДок = Новый ТабличныйДокумент;

Макет = Справочники.Товары.ПолучитьМакет("Печать");

// Заголовок

Область = Макет.ПолучитьОбласть("Заголовок");

ТабДок.Вывести(Область);

// Шапка

Область = Макет.ПолучитьОбласть("Шапка");

ТабДок.Вывести(Область);

Если ((ЭлементыФормы.ЗначениеЦеныПоступления.Значение)> 0) Тогда

Запрос=Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Наименование,ЦенаПоступления,ЦенаПродажи,

ЕдиницаИзмерения

ИЗ Справочник.Товары

ГДЕ ЦенаПоступления <= &Значение";

Запрос.УстановитьПараметр("Значение",

ЭлементыФормы.ЗначениеЦеныПоступления.Значение);

Выборка = Запрос.Выполнить().Выбрать();

Иначе

Выборка = Справочники.Товары.Выбрать();

КонецЕсли;

Элемент = Макет.ПолучитьОбласть("Элемент");

Пока Выборка.Следующий() Цикл

Элемент.Параметры.Заполнить(Выборка);

ТабДок.Вывести(Элемент);

КонецЦикла;

ТабДок.ОтображатьСетку = Ложь;

ТабДок.Защита = Ложь;

ТабДок.ТолькоПросмотр = Ложь;

ТабДок.ОтображатьЗаголовки = Ложь;

ТабДок.Показать();

//}}_КОНСТРУКТОР_ПЕЧАТИ_СПИСОК

КонецПроцедуры

Теперь после внесения изменений следует перейти в режим 1С:Предприятие. Результат функциональности добавленных строк программного кода показан на рис. 1.35.

Рис. 1.35. Ограничение списка товаров в табличном документе

После этого можно прокомментировать текст изменений в процедуре. Так в программный код мы добавили оператор условия Если((ЭлементыФормы.ЗначениеЦеныПоступления.Значение)> 0) Тогда который позволяет выполнить последующий (до оператора Иначе) фрагмент процедуры только при выполнении указанного условия.

Оператор Если управляет выполнением программы, основываясь на результате логического выражения. Операторы процедуры, следующие за ключевым словом Тогда, выполняются, если результатом логического выражения является значение Истина. Операторы, следующие за ключевым словом Иначе, выполняются (до оператора КонецЕсли), если результат логического выражения в конструкции Если оказывается равным значению Ложь. Заметим, что оператор Если имеет также расширенный вариант синтаксиса для использования, информацию по которому можно легко найти с помощью системы электронной помощи, включенной в программный продукт 1С:Предприятие 8.1.

Следует заметить, что доступ к созданным элементам на форме обеспечивается с помощью объекта ЭлементыФормы. Далее (через точку) правила синтаксиса требуют указать имя элемента управления, который нам необходим, а затем, также через точку, его свойство. Таким образом, получение значения установленного в поле ввода реализуется с помощью следующей программной конструкции:

ЭлементыФормы.ЗначениеЦеныПоступления.Значение.

Объект ЭлементыФормы является коллекцией размещенных на форме элементов управления.

В следующем фрагменте листинга 1.2

Запрос.Текст = "ВЫБРАТЬ Наименование,ЦенаПоступления,

| ЦенаПродажи,ЕдиницаИзмерения

| ИЗ Справочник.Товары

| ГДЕ ЦенаПоступления <= &Значение";

приводится текст на языке запросов (это еще один язык, который имеется в системе 1С:Предприятие). Язык запросов предназначен для извлечения информации из базы данных. Фактически сочетание фрагментов на встроенном языке и фрагментов на языке запросов достаточно типично при разработке прикладных решений на платформе 1С:Предприятие.

Запросы в системе 1С:Предприятие 8.1 предназначены для выборки информации из базы данных. Можно считать, что запрос является требованием к системе для выбора и обработки данных. Например, с помощью запроса можно легко подсчитать внесенные суммы по конкретным контрагентам. В системе 1С:Предприятие 8.1 существует специальный язык запросов, цель которого в формулировании требований к системе -- что нужно отобрать из имеющихся данных. А как система справляется с запросом, нас уже не интересует, главное -- поставить задачу.

В строке

Запрос=Новый Запрос;

на листинге 1.2 создается новый объект -- Запрос, а ссылка на него присваивается переменной, которую мы также назвали словом Запрос. Далее формируется текст запроса, в котором говорится о том, что нас интересует справочник Товары. Для этого используется ключевое слово ИЗ. В тексте запроса указывается, что из справочника Товары нам необходимо извлечь информацию о четырех полях: Наименование,ЦенаПоступления,ЦенаПродажи, ЕдиницаИзмерения.

Конструкция ГДЕ дает установку системе -- какое условие отбора. В данном случае в конструкции указывается, что значение в поле ЦенаПоступления должно быть не больше указанного параметра Значение. Для данного параметра устанавливается информация, указанная в поле ввода:

Запрос.УстановитьПараметр("Значение",

ЭлементыФормы.ЗначениеЦеныПоступления.Значение).

Метод УстановитьПараметр() позволяет определить значение параметра для запроса. При этом первый параметр метода представляет собой название параметра запроса, а второй -- значение, присваиваемое этому параметру. В данном случае второй параметр метода извлекается из содержания поля ввода ЗначениеЦеныПоступления (то, что ввел пользователь с клавиатуры).

Для установки параметра запроса используется метод: УстановитьПараметр (ИмяПараметра, ЗначениеПараметра). Для параметра ИмяПараметра тип данных -- строка, а параметр ЗначениеПараметра имеет произвольный тип данных. С помощью этого метода можно передавать переменные в запрос.

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

Выборка = Запрос.Выполнить().Выбрать(); с помощью переменной Выборка мы получаем возможность работать с итоговой таблицей запроса. Далее в процедуре начинается знакомое для нас заполнение табличного документа. Теперь для полноты картины осталось перейти в режим работы 1С:Предприятие и получить вариант заполненного отчета (его мы уже видели на рис. 1.35).

В развитии данного примера несколько изменим функциональные требования к справочнику Товары. Допустим нам необходимо выводить в табличный документ названия товаров, для которых цена поступления располагается в интервале указанных на форме значений. Интерфейс формы списка чуть изменится -- добавится еще одно поле ввода (рис. 1.36). Теперь для имеющих на форме двух полей ввода используем такие имена:

НижнееЗначениеЦеныПоступления;

ВерхнееЗначениеЦеныПоступления.

Рис. 1.36. Добавление полей ввода для установки границ цены

В связи с этим текст ранее используемой программной процедуры Печать() (листинг 1.2) должен быть несколько изменен. С учетом двух новых полей ввода обновленный текст процедуры представлен на листинге 1.3.

Листинг 1.3. Процедура печати товаров с ограничением по ценам

Процедура Печать(Элемент)

//{{_КОНСТРУКТОР_ПЕЧАТИ_СПИСОК(Печать)

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные

// вручную изменения будут утеряны!!!

ТабДок = Новый ТабличныйДокумент;

Макет = Справочники.Товары.ПолучитьМакет("Печать");

// Заголовок

Область = Макет.ПолучитьОбласть("Заголовок");

ТабДок.Вывести(Область);

// Шапка

Область = Макет.ПолучитьОбласть("Шапка");

ТабДок.Вывести(Область);

Если ((ЭлементыФормы.ВерхнееЗначениеЦеныПоступления.Значение > 0) ) Тогда

Запрос=Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ Наименование,ЦенаПоступления,ЦенаПродажи,

| ЕдиницаИзмерения

| ИЗ Справочник.Товары

| ГДЕ ЦенаПоступления >= &Значение И

| ЦенаПоступления <= &Значение2";

Запрос.УстановитьПараметр("Значение",

ЭлементыФормы.НижнееЗначениеЦеныПоступления.Значение);

Запрос.УстановитьПараметр("Значение2",

ЭлементыФормы.ВерхнееЗначениеЦеныПоступления.Значение);

Выборка = Запрос.Выполнить().Выбрать();

Иначе

Выборка = Справочники.Товары.Выбрать();

КонецЕсли;

Элемент = Макет.ПолучитьОбласть("Элемент");

Пока Выборка.Следующий() Цикл

Элемент.Параметры.Заполнить(Выборка);

ТабДок.Вывести(Элемент);

КонецЦикла;

ТабДок.ОтображатьСетку = Ложь;

ТабДок.Защита = Ложь;

ТабДок.ТолькоПросмотр = Ложь;

ТабДок.ОтображатьЗаголовки = Ложь;

ТабДок.Показать();

//}}_КОНСТРУКТОР_ПЕЧАТИ_СПИСОК

КонецПроцедуры

Для получения необходимой выборки мы изменили фрагмент условия в тексте запроса:

ГДЕ ЦенаПоступления >= &Значение И

ЦенаПоступления <= &Значение2";

На рис. 1.37 продемонстрирован результат выполнения отбора товаров в выбранном интервале цен.

Рис. 1.37. Результат отбора товаров по цене поступления

Справочники Филиалы и Менеджеры

Для дальнейшей работы нам понадобится еще два справочника, один из которых назовем Филиалы. Он будет достаточно простой -- без дополнительных реквизитов. На рис. 1.38 показано заполнение данного справочника в режиме 1С:Предприятие.

Рис. 1.38. Заполнение справочника Филиалы

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

Рис. 1.39. Заполнение справочника Менеджеры

Документы

конфигуратор справочник информационная база

Сразу отметим, что документы относятся к наиболее популярным объектам конфигурации. Они предназначены для фиксирования информации о происходящих событиях в подразделении или в организации в целом. На основании объекта конфигурации Документ разработчик создает новые объекты конфигурации -- документы конкретной прикладной направленности. Эти разработанные в конфигураторе объекты сохраняют все свойства объекта конфигурации Документ. А, уже располагая новыми объектами конфигурации (например, документом ПриходнаяНакладная), платформа 1С:Предприятие создает в базе данных информационную структуру, в которой будут храниться компьютерные аналоги реальных документов.

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

На организацию учета в системе 1С:Предприятие 8.1 также ориентированы такие объекты конфигурации как регистры, о которых мы поговорим в этой главе чуть позднее.

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

Дата (для отражения даты документа);

Номер (для последовательной нумерации документов одного типа).

Свойство Дата испольуется только для чтения, имеет тип Дата, содержит дату и номер документа. Свойство Номер также используется только для чтения. Тип значения зависит от установки в конфигураторе представления номера документа.

Наша задача в этом разделе заключается в том, чтобы познакомиться с конструкцией документов и некоторыми техническими приемами работы с подобными объектами. Первый пример связан с документом, который будет фиксировать информацию о поступлении товаров.

Документ Поступление товаров

В определенной степени действия по разработке документа в конфигураторе аналогичны созданию справочников. Первое, уже понятное действие, заключается в щелчке правой кнопкой мыши на пиктограмме Документы в окне Конфигурация (рис. 1.5), а уже далее начинается несложная работа в окне редактирования объекта конфигурации.

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

Рис. 1.40. Окно редактирования документа Поступление товаров

На закладке Данные (рис. 1.41) следует определить поля создаваемого документа. Так, любой документ имеет шапку (заголовочную часть), а также одну или несколько табличных частей. В заголовочной части размещается общая информация для всего документа в целом.

Рис. 1.41. Закладка Данные окна редактирования документа Поступление товаров

Для нашего создаваемого документа ПоступлениеТоваров в области шапки разместим реквизит -- Фирма. В качестве типа данных установим -- СправочникСсылка.Фирмы.

Рассматривается ситуация когда определенный документ фиксирует поступление товаров от одной фирмы.

Также в области шапки поместим еще один реквизит -- Филиал (тип данных -- СправочникСсылка.Филиалы). Будем считать, что определенный документ фиксирует факт поступления товаров на конкретный филиал нашей организации.

Каждый реальный документ кроме заголовочной части, как правило, содержит фрагмент информации, которая одинакова по своей структуре, но, этот набор различный для разных документов. Например, в документе ПоступлениеТоваров может содержаться различное число названий товаров. Для подобной информации предназначен объект Табличная часть. И далее перейдем к разработке табличной части документа (в создаваемом документе будет одна табличная часть).

Табличные части - это также объекты конфигурации, но они являются подчиненными основным объектам. С ними мы уже встречались при работе со справочниками. И в том, и в данном случае табличные части подчинены основным объектам (справочнику или документу). В плане программирования у объекта Табличная часть существует многообразие свойств и методов работы с ними.

На практике для документов с несложной структурой используется одна табличная часть, но в типовых конфигурациях, созданных программистами фирмы 1С, вы найдете немало документов с включением нескольких таких частей.

В разрабатываемом документе ПоступлениеТоваров создадим табличную часть, которую назовем ПереченьТоваров, а в ней разместим реквизиты (в скобках указаны соответствующие для них типы данных):

Товар (СправочникСсылка.Товары);

ЕдиницаИзмерения (СправочникСсылка.ЕдиницыИзмерения);

Цена (число);

Количество (число);

Сумма (число).

Форма документа

После определения структуры документа можно перейти к разработке интерфейса пользователя для работы с документом -- к созданию его экранной формы. Поэтому в окне редактирования объекта конфигурации выберем закладку Формы (рис. 1.42) и приступим к созданию формы документа. Учитывая подобные действия, понятно -- пользоваться формой генерируемой системой по умолчанию мы не будем.

Рис. 1.42. Закладка Формы окна редактирования документа Поступление товаров

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

Перейдем к техническим действиям по разработке формы. Для начала требуется щелкнуть по изображению лупы во фрейме Основные формы напротив надписи Документа. В результате будет запущен в работу конструктор формы документа. Теперь в первом появившемся окне диалога следует сделать установки (реально они должны быть выполнены по умолчанию) в соответствие с рис. 1.43.

Рис. 1.43. Окно конструктора формы документа

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

Рис. 1.44. Окно для включения реквизитов в форму документа

Работа в режиме диалога с конструктором формы документа завершается щелчком по кнопке Готово, что приводит к отображению на экране формы документа с автоматически созданными на ней элементами управления (рис. 1.45).

Рис. 1.45. Форма документа Поступление товаров в режиме конфигуратора

На этом работа с конструктором документа в конфигураторе завершена и далее требуется перейти в режим 1С:Предприятие, где следует заполнить несколько документов по созданному шаблону. Один из вариантов сформированного таким способом документа показан на рис. 1.46.

Большим недостатком рассматриваемого документа является необходимость ручного заполнения полей -- Единица измерения и Цена. Также в нашем документе не рассчитывается сумма при вводе количества поступивших товаров.

Рис. 1.46. Заполнение документа Поступление товаров в режиме 1С:Предприятие

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

Программирование формы документа

Теперь обеспечим небольшую автоматизацию работы пользователей с данным документом. В настоящий момент при заполнении строки табличной части никакой автоматизации нет. Наша цель обеспечить следующий “функционал”:

при выборе товара должны автоматически заполняться поля Единица измерения и Цена;

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

Для начала в окне редактирования формы документа (режим конфигуратора) необходимо двойным щелчком по полю Товар (рис. 1.47) открыть окно его свойств.

Рис. 1.47. Окно свойств поля Товар

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

Напротив имени события ПриИзменении следует щелкнуть по пиктограмме с изображением лупы, в результате чего мы попадем в процедуру, автоматически выполняемую при выборе товара в поле Товар документа. В результате проделанных действий активизируется процедура (рис. 1.48), которая выполняется при вводе товара в строке табличной части. Это фактически пока еще только заготовка нашей будущей процедуры, которую нам необходимо написать. В дальнейшем процедуру всегда можно найти на закладке Модуль, где размещаются все программные процедуры, работающие с экранной формой документа.

Рис. 1.48. Закладка Модуль формы документа Поступление товаров

Модуль -- это контейнер для текста программ на встроенном языке. В конфигурации существует большое количество модулей, которые расположены в различных местах. Текст программ, содержащийся в модуле, будет использоваться платформой в заранее определенные моменты работы системы 1С:Предприятие.

Непосредственно текст процедуры, которую необходимо написать для решения поставленной задачи, приведен на листинге 1.4. В результате выполнения программного кода в режиме 1С:Предприятие после выбора товара в поле Единица измерения будет занесена единица измерения данного товара, а в следующее -- цена поступления товара.

Листинг 1.4. Процедура, выполняемая при заполнении поля Товар

Процедура ПереченьТоваровТоварПриИзменении(Элемент)

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

СтрТабЧасти.ЕдиницаИзмерения=СтрТабЧасти.Товар.ЕдиницаИзмерения;

СтрТабЧасти.Цена=СтрТабЧасти.Товар.ЦенаПоступления;

КонецПроцедуры

Хотя листинг 1.4 небольшой, но в нем имеются новые программные конструкции. Так, в строке СтрТабЧасти=ЭлементыФормы.ПереченьТоваров.ТекущиеДанные; мы используем уже знакомую коллекцию объектов -- ЭлементыФормы, содержащей все элементы управления расположенные на форме. На форме документа присутствует табличная часть ПереченьТоваров. Данный элемент управления включает строки табличной части документа. Получить строку, с которой в текущий момент работает пользователь, можно с помощью свойства ТекущиеДанные объекта ПереченьТоваров.

Таким образом, в результате выполнения рассматриваемого фрагмента программного кода переменная СтрТабЧасти будет содержать объект, в который включены редактируемые в строке данные.

В следующей конструкции СтрТабЧасти.ЕдиницаИзмерения=

СтрТабЧасти.Товар.ЕдиницаИзмерения; мы заполняем информацией поле ЕдиницаИзмерения табличной части документа информацией из справочника Товары (подставляем единицу измерения выбранного товара).

Аналогичное действие мы выполняем и с ценой: СтрТабЧасти.Цена=СтрТабЧасти.Товар.ЦенаПоступления.

В результате пользователь после указания в табличной части документа необходимого товара получает автоматическое заполнение единицы измерения и цены (рис. 1.49).

Рис. 1.49. Автоматическое заполнение реквизитов табличной части

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

Для начала в окне редактирования формы документа (режим конфигуратора) необходимо двойным щелчком по полю Количество открыть окно его свойств. Напротив имени события ПриИзменении следует щелкнуть по пиктограмме с изображением лупы, в результате чего мы попадем в процедуру, автоматически выполняемую при вводе количества единиц товара. Далее необходимо написать содержание процедуры в соответствие с листингом 1.5.

Листинг 1.5. Процедура расчета суммы в документе

Процедура ПереченьТоваровКоличествоПриИзменении(Элемент)

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

СтрТабЧасти.Сумма=СтрТабЧасти.Цена*СтрТабЧасти.Количество;

КонецПроцедуры

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

Рис. 1.50. Автоматическое вычисление суммы в табличной части документа

Разработка отчета

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

Можно сказать, что получение информации в удобной форме и является одним из основных достоинств системы 1С:Предприятие. При сборе и накоплении данных важнейшую роль играют объекты конфигурации под названием регистры. В последующих главах мы разберем технические приемы работы с регистрами накопления и регистрами сведений. Фактически они предназначены для фиксирования и аккумулирования информации о разнообразных фактах и событиях.

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

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

Далее мы поговорим и о других преимуществах регистров в плане представления отчетной информации.

Среди объектов конфигурации существует такой объект как отчет, и подобным объектом мы воспользуемся для получения ответа на вопрос -- сколько поступило различных товаров. Первый уже знакомый шаг -- в окне Конфигурация необходимо щелкнуть правой кнопкой по строке Отчеты, и после этого начать процесс создания нового отчета -- ОтчетПоПоступлениям (рис. 1.51).

Рис. 1.51. Окно редактирования отчета Отчет по поступлениям

Ранее мы использовали готовый макет, которые непосредственно создавал конструктор печати, а теперь создадим макет сами.

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

Разработка макета

Для разработки макета следует перейти на закладку Макеты, а затем с помощью пиктограммы Добавить (из пиктографического меню) начать работу с конструктором макета. Сам макет необходим для последующего формирования табличного документа в режиме 1С:Предприятие.

Единственное окно диалога, в котором следует сделать необходимые установки, показано на рис. 1.52. После этого перед нами открывается редактор табличного документа (рис. 1.53), предназначенный для разработки структуры табличного документа. В этом случае можно самостоятельно создать макет для печатной формы. И дальнейшие наши действия в этом разделе будут связаны с ручным формированием необходимого макета -- без участия конструктора печати.

Рис. 1.52. Окно конструктора макета

Рис. 1.53. Окно редактора табличного документа

Для вывода в табличный документ строк различного вида в макетах предусмотрен механизм секций. В этом случае табличный документ формируется не сразу целиком, а поэтапно -- по мере заполнения секций. И секция является компонентой (составляющей табличного документа). Сами секции могут быть вертикальными и горизонтальными, но в рассматриваемом примере мы будем использовать только горизонтальные секции. В реальной работе они применяются значительно чаще. Горизонтальная секция представляет совокупность нескольких строк, и как минимум, состоит из одной строки.

Создадим первую секцию, для чего следует замаркировать мышкой названия заголовков первых трех строк. После этого в меню Таблица требуется выбрать раздел Имена, в котором воспользоваться пунктом -- Назначить имя. Первой секции дадим смысловое имя -- Заголовок, а в одну из ее ячеек введем текст Отчет по поступлениям (рис. 1.54).

Рис. 1.54. Создание секции Заголовок в макете

Для увеличения (в общем случае -- изменения) размера шрифта текста следует щелчком правой кнопкой мыши открыть окно свойств ячейки с приведенным текстом (на пересечении второй строки и второго столбца). Это позволяет, используя раздел Оформление, изменить вид шрифта и размер букв (рис. 1.54).

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

Рис. 1.55. Создание секции Шапка в макете

Внесем в секцию Шапка небольшое оформление -- выполним обводку ячейки с надписью Товар окружающими линиями, что выполняется с помощью опций окна свойств ячейки (рис. 1.56). Аналогичную обводку следует выполнить и для ячейки с текстом -- Количество.

Рис. 1.56. Оформление ячейки окружающими линиями

Теперь можно перейти к созданию третьей -- последней в рассматриваемом макете секции под названием Строка (рис. 1.57). От нас также потребуется ввести в ячейки -- Товар и Количество, однако для них в разделе Заполнение окна Свойства следует сделать установку -- Параметр. В этом случае в ячейке будет напечатан не текст, а значение переменной, которая явно определена (либо неявно -- просто известна) в программной процедуре заполнения табличного документа по шаблону макета.

Рис. 1.57. Создание секции Строка в макете отчета

Таким образом, фактически мы разделили макет (заготовку для печатной формы) на три части -- заголовок, шапку и строку.

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

Процедура заполнения отчета

Теперь на очереди разработка программной процедуры, которая заполняет табличный документ в соответствии с данным макетом. Для этого нас не устроит форма по умолчанию -- и мы создадим свою. Поэтому для начала следует перейти с закладки Макеты на закладку Формы (рис. 1.58).

Рис. 1.58. Закладка Формы окна редактирования отчета по поступлениям

Далее, щелчком по кнопке с изображением лупы напротив надписи Основная форма отчета, начнем диалог с конструктором формы отчета (рис. 1.59).

Рис. 1.59. Окно конструктора формы отчета

Следует проконтролировать установки, указанные на рис. 1.59, и после этого нажать кнопку Готово, что позволит увидеть на экране следующее окно (рис. 1.60). На данном рисунке приведена стартовая экранная форма отчета в режиме конфигуратора с созданными на ней (конструктором) элементами управления.

Рис. 1.60. Экранная форма отчета по поступлениям

На форме отчета (рис. 1.60) расположена кнопка Сформировать, а на закладке Модуль присутствует заготовка для процедуры обработки нажатия на данную кнопку (рис. 1.61).

Рис. 1.61. Заготовка процедуры обработки нажатия на кнопку

Теперь переходим к наиболее сложному элементу данного раздела -- к процедуре формирования отчета (рис. 1.6).

Листинг 1.6. Процедура формирования отчета по поступлениям

Процедура КнопкаСформироватьНажатие(Кнопка)

Запрос=Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

| Товар,

| СУММА(Количество) КАК КоличествоТоваров

| ИЗ

| Документ.ПоступлениеТоваров.ПереченьТоваров

| СГРУППИРОВАТЬ ПО Товар";

Результат = Запрос.Выполнить().Выбрать();

ТабДок = Новый ТабличныйДокумент;

Макет = Отчеты.ОтчетПоПоступлениям.ПолучитьМакет("Макет");

// Заголовок

Область = Макет.ПолучитьОбласть("Заголовок");

ТабДок.Вывести(Область);

// Шапка

Область = Макет.ПолучитьОбласть("Шапка");

ТабДок.Вывести(Область);

// Перечень

Пока Результат.Следующий() Цикл

Область = Макет.ПолучитьОбласть("Строка");

Область.Параметры.Товар = Результат.Товар;

Область.Параметры.Количество = Результат.КоличествоТоваров;

ТабДок.Вывести(Область);

КонецЦикла;

ТабДок.ОтображатьСетку = Ложь;

ТабДок.Защита = Ложь;

ТабДок.ТолькоПросмотр = Ложь;

ТабДок.ОтображатьЗаголовки = Ложь;

ТабДок.Показать();

КонецПроцедуры

В первой строке процедуры (листинг 1.6) создается новый объект -- Запрос, а ссылка на него присваивается переменной, которую мы также назвали словом Запрос. Далее формируется текст запроса, из которого видно, что нас интересует табличная часть ПереченьТоваров документа ПоступлениеТоваров: Документ.ПоступлениеТоваров.ПереченьТоваров.

В данном запросе нам необходимо получить общее количество поступлений по каждой позиции товара. В этом случае необходимо выполнить группировку по полю Товар, а также использовать агрегатную функцию СУММА: СУММА(Количество) КАК КоличествоТоваров.

Более детально об агрегатных функциях мы поговорим во второй главе книги.

При этом для результата формируемого рассматриваемой функцией вводим название (синоним) -- КоличествоТоваров, которое в процедуре используется при заполнении отчета. Конструкция СГРУППИРОВАТЬ ПО дает установку системе, что необходимо просуммировать отдельно все поступления по каждому товару.

Выполнение рассматриваемого запроса в результате приводит к формированию таблицы из двух колонок и числа строк, равного числу различных товаров, которые к нам поступали. В первой колонке будет отражено название товара, а во второй суммарное количество данного товара. После выполнения строки Результат = Запрос.Выполнить().Выбрать(); с помошью переменной Результат мы далее можем работать с итоговой таблицей запроса. После этого начинается знакомое заполнение табличного документа. Теперь для полноты картины осталось перейти в режим работы 1С:Предприятие и получить вариант заполненного отчета (рис. 1.62).

Рис. 1.62. Вариант отчета по поступлениям товаров

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

Регистр накопления

При решении задач учета практически ни одно прикладное решение не обходится без использования регистров. В информационной структуре создаваемой системой на основании объекта конфигурации Регистр накопления производится автоматическое накопление данных (поступление и отгрузка товаров, денежные перечисления и т.д.).

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

Измерения -- это также объекты конфигурации, но они относятся к категории подчиненных.

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

Изменение состояния регистра накопления происходит, как правило, при проведении документа. В этом случае в регистр, добавляется одна или несколько записей. Каждая запись содержит значения измерений, значения приращений ресурсов, ссылку на документ, который вызвал эти изменения (регистратор) и направление приращения (приход или расход). Такой набор записей называется движениями регистра накопления. Каждому движению регистра накопления всегда должен соответствовать определенный регистратор.

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

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

Документ Продажа товаров

Для фиксации факта продажи товаров необходимо разработать соответствующий документ, который назовем ПродажаТоваров. В области реквизитов документа добавим:

Фирма (тип данных -- СправочникСсылка.Фирмы);

Филиал (тип данных -- СправочникСсылка.Филиалы);

Менеджер (тип данных -- СправочникСсылка.Менеджеры).

Аналогично документу ПоступлениеТоваров разместим в создаваемом документе ПродажаТоваров (рис. 1.63) табличную часть под названием ПереченьТоваров. Далее в табличной части разместим реквизиты:

Товар (тип данных -- СправочникСсылка.Товары);

Цена -- для отражения цены продажи единицы указанного товара (тип данных -- число);

Количество -- количество проданных единиц товара (тип данных -- число);

ЕдиницаИзмерения -- для отражения единицы измерения товара (тип данных -- СправочникСсылка.ЕдиницыИзмерения);

Сумма -- сумма по текущему товару (тип данных -- число).

Рис. 1.63. Закладка Данные окна редактирования документа Продажа товаров

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

Рис. 1.64. Форма документа Продажа товаров

Обеспечим аналогичную ранее встречавшейся при разработке документа ПоступлениеТоваров автоматизацию работы пользователей с документом ПпродажаТоваров. Так, при выборе товара должны автоматически заполняться поля ЕдиницаИзмерения и Цена сведениями из справочника Товары. Также после установки пользователем количества товаров должна программно рассчитываться сумма. Для этого необходимо оформить процедуру ПереченьТоваровТоварПриИзменении в соответствие с листингом 1.7, а процедуру ПереченьТоваровКоличествоПриИзменении в соответствие с листингом 1.8.

Листинг 1.7. Процедура заполнения цены товара и единицы измерения

Процедура ПереченьТоваровТоварПриИзменении(Элемент)

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

СтрТабЧасти.ЕдиницаИзмерения=СтрТабЧасти.Товар.ЕдиницаИзмерения;

СтрТабЧасти.Цена=СтрТабЧасти.Товар.ЦенаПродажи;

КонецПроцедуры

Листинг 1.8. Процедура вычисления суммы

Процедура ПереченьТоваровКоличествоПриИзменении(Элемент)

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

СтрТабЧасти.Сумма=СтрТабЧасти.Цена*СтрТабЧасти.Количество;

КонецПроцедуры

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

Рис. 1.65. Заполнение документа Продажа товаров в режиме 1С:предприятие

Регистр накопления Количество товаров

Начнем работу в конфигураторе с создания нового объекта конфигурации -- необходимого регистра накопления. После щелчка правой кнопкой мыши в окне Конфигурация по пиктограмме Регистры накопления открывается окно редактирования объекта конфигурации (рис. 1.66). Здесь необходимо дать название регистру и указать, что он будет являться регистром остатков (далее мы обсудим -- что это означает).

Рис. 1.66. Окно редактирования регистра Количество товаров

Перейдем на закладку Данные (рис. 1.67) и создадим два измерения:

Товар (тип данных -- СправочникСсылка.Товары);

Филиал (тип данных -- СправочникСсылка.Филиалы).

Также создадим один ресурс -- Количество (тип данных -- число).

Рис. 1.67. Измерения и ресурсы регистра Количество товаров

Все необходимые действия по разработке нового объекта конфигурации завершены, однако использование созданного регистра накопления без документа, который бы совершал движения по данному регистру невозможно. Более того, если вы сейчас попробуете перейти в режим 1С:Предприятие, то система вам напомнит о незавершенности выполненных действий.

Движения документа -- это записи в регистрах, которые совершаются в процессе проведения документа.

Поэтому в окне редактирования объекта конфигурации вернемся к документу ПоступлениеТоваров и перейдем на закладку Движения (рис. 1.68).

Рис. 1.68. Закладка Движения окна редактирования документа Поступление товаров

Здесь необходимо отметить в списке регистров конфигурации единственный регистр, который мы на данный момент создали. После отметки регистра сразу становится доступным конструктор движений, которым мы и воспользуемся. Конструктор устроен достаточно просто (рис. 1.69). В списке Регистры перечислены регистры, по которым документ может создавать движения, и в данном случае это регистр КоличествоТоваров.

Рис. 1.69. Окно конструктора движений регистров

В правое верхнее поле автоматически уже внесены реквизиты шапки рассматриваемого документа. Это связано с тем, что в указанное поле включаются параметры документа, которые могут участвовать в движениях. Однако кроме шапки в документе имеется еще и табличная часть, однако для добавления реквизитов табличной части в поле Реквизиты документа следует выполнить несложную техническую операцию. В центральной части рис. 1.69 присутствует поле со списком (с соответствующей подписью -- Табличная часть), где перечислены имеющиеся табличные части в документе (в нашем документе одна табличная часть -- ПереченьТоваров). Для перенесения в поле Реквизиты документа реквизитов табличной части ее имя необходимо просто выбрать в списке табличных частей.

Теперь можно перейти к нижней левой части окна конструктора движений. Здесь необходимо указать соответствие полей регистра накопления и реквизитов документа. Технически это можно выполнить либо с помощью кнопки Заполнить выражения, либо с помощью двойного щелчка мышкой по необходимому реквизиту документа в правом верхнем разделе на рис. 1.69. В результате выполненных действий напротив названий полей регистра формируются соответствующие выражения (рис. 1.70).

Рис. 1.70. Заполнение выражений в окне конструктора движений регистра

Теперь все действия в окне конструктора выполнены и осталось щелкнуть по кнопке ОК. Это приводит к генерации конструктором программной процедуры (листинг 1.9), которая формирует движения по регистру при проведении документа. В дальнейшем если потребуется эту процедуру найти (скажем, для коррекции или просто просмотра), то в окне редактирования объекта конфигурации следует перейти на закладку Прочее. Здесь, если воспользоваться кнопкой Модуль объекта, можно увидеть текст, представленный на листинге 1.9.

Листинг 1.9. Процедура, выполняемая при проведении документа

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.