Создание документов в 1С

  • doc
  • 29.04.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 92. Практическая работа по теме Создание документов в 1С.doc

Лабораторная работа № 1

Тема: Создание документов

Цель: формирование умений создания объектов типа Документ

Время выполнения: 2 часа

Теоретический материал

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

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

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

Система 1С: Предприятие умеет отслеживать правильность учёта.

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

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

Типообразующие объекты конфигурации

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

Например, после создания объекта Справочник Склады, сразу же появились новые типы данных, связанные с этим справочником. Среди них СправочникСсылкаСклады. Если мы укажем какому-либо реквизиту этот тип данных, то сможем хранить в нем ссылку на конкретный объект справочника Склады.


 

Задания:

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

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

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

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

Откройте конфигуратор и добавьте новый объект - Документ. Задайте имя - ПриходнаяНакладная. Представление объекта не задаём. Представление списка задайте Приходные накладные. Перейдите на вкладку Подсистемы и отметьте УчетМатериалов и Бухгалтерия.

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

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

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

Рисунок 1 - Создание реквизита документа

Рисунок 2 - Создание реквизитов табличной части документа

Создайте реквизиты табличной части Материалы:

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

-           Количество, тип Число, длина 15, точность 2 знака после запятой, неотрицательное;

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

-           Сумма, тип Число, длина 15, точность 2, неотрицательное.

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

Рисунок 3 - Окно свойств документа

Закройте окно свойств документа.

Сделаем доступной команду создания новых документов в подсистеме УчетМатериалов. Выделите ветвь Подсистемы, вызовите контекстное меню - Все подсистемы. В группе Панель действий Создать включите видимость у команды Приходная накладная: создать (см. рисунок 4).

Рисунок 4 - Командный интерфейс подсистемы

В режиме 1С: Предприятие

Запустите 1С: Предприятие в режиме отладки. В появившемся окне Вы увидите, что в панели навигации разделов Бухгалтерия и Учет материалов появилась команда Приходные накладные для открытия списка приходных накладных, а также в панели действий раздела Учет материалов появилась команда Приходная накладная для создания новых документов этого вида (см. рисунок 5).

Рисунок 5 - Отображение измененного интерфейса в режиме отладки

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

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

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

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

Рисунок 6 - Отображение документа в режиме отладки

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

-                                                                                                                                        кабель электрический, количество - 5, цена - 20, стоимость - 100;

-                                                                                                                                        шланг резиновый, количество - 5, цена - 100, стоимость - 500.

Посмотрим список созданных документов, выполнив команду Приходные накладные в навигационной панели (см. рисунок 7).

Рисунок 7 - Список созданных документов

Зеленая галочка около документа означает, что он проведён.

Автоматический пересчет суммы в строках документа

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

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

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

Рисунок 8 - Окно редактирования документа

Откроется конструктор форм. Там ничего не меняете и сразу нажмите Готово. Откроется окно редактора форм.

Разработчик не может нарисовать форму, а только может указать из каких элементов будет состоять форма (см. рисунок 9).

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

Обработчик события

У системы существуют события, которые связаны с различными моментами её функционирования. В том числе, связанные с функционированием форм и элементов в формах.

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

 

Рисунок 9 - Окно редактирования формы

Дважды щелкните на элементе формы МатериалыКоличество (или контекстное меню - Свойства). Справа возникнет окно свойств, прокрутите его до конца вниз, найдите поле ПриИзменении и нажмите на значок лупы рядом с ним (см. рисунок 10).

Рисунок 10 - Окно свойств формы

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

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

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

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

Одна процедура для обработки нескольких событий

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

Создайте общий модуль РаботаСДокументами, установите в его свойствах флажок Клиент, а флажок Сервер снимите (это означает, что модуль будет скомпилирован в тонком клиенте и в веб-клиенте, а не на сервере).

Рисунок 11 - Окно создания общего модуля

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

Процедура РассчитатьСумму(СтрокаТабличнойЧасти) |Экспорт

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

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

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

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

Рисунок 12 - Окно создания модуля формы документа

Тем самым мы вызываем процедуру РассчитатьСумму() из общего модуля РаботаСДокументами и передаем ей в качестве параметра текущую строку табличной части (см. рисунок 13).

Осталось для поля Цена установить такой же обработчик. Создайте обработчик события ПриИзменении для поля табличной части МатериалыЦена также, как делали это для поля МатериалыКоличество, повторите в нем вызов процедуры РассчитатьСумму() из общего модуля .

Для этого нажмите внизу вкладку Форма (рядом с Модуль), дважды щелкните в левом верхнем окне на МатериалыЦена, прокрутите окно свойств, нажмите на значок лупы в поле ПриИзменении и в выделенную область впишите:

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

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

 

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

 

Рисунок 13 - Модуль формы документа с двумя процедурами

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

Создайте новый документ с именем ОказаниеУслуги. Представление объекта не задаем - будет использоваться синоним, Представление списка задайте как Оказание услуг. На вкладке Подсистемы отметьте ОказаниеУслуг и Бухгалтерия. На вкладке Данные создайте реквизиты документа:

-                Склад, тип СправочникСсылка.Склады, Значение заполнения - Основной;

-                Клиент, тип СправочникСсылка.Клиенты, Проверка заполнения - Выдавать ошибку;

-                Мастер, тип СправочникСсылка.Сотрудники, Проверка заполнения - Выдавать ошибку.

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

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

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

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

-                Сумма, тип Число, длина 15, точность 2, неотрицательное.

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

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

Откроется модуль формы с шаблоном обработчика события ПереченьНоменклатурыКоличествоПриИзменении, который пока не заполняйте, а перейдите в окно элементов формы на закладку Форма и аналогично создайте обработчик события ПереченьНоменклатурыЦенаПриИзменении для поля ПереченьНоменклатурыЦена (см. рисунок 14).

Рисунок 14 - Модуль формы документа

Далее модуль формы документа ОказаниеУслуги заполните следующим образом (см. рисунок 15):

&НаКлиенте

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

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

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

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

 

&НаКлиенте

Процедура ПереченьНоменклатуры Цена При Изменении |(Элемент)

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

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

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

Рисунок 15 - Окно модуля формы документа с двумя процедурами

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

В панели действий раздела Оказание услуг создайте документ и заполните следующим образом (см. рисунок 16):

Рисунок 16 - Окно документа в режиме отладки

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

Контрольные вопросы

1.            Какими характерными особенностями обладает документ?

2.            Для чего предназначены реквизиты и табличные части документа?

3.            Что такое проведение документа?

4.            Как создать объект Документ и описать его структуру?

5.            Как создать новый документ и заполнить его данными?

6.            Как создать собственную форму документа?

7.            Что такое обработчик события и как его создать?

8.            Что такое модуль и для чего он нужен?

9.            Зачем нужны общие модули?