Программирование 1С. Документы

Практическая работа Документы


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

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

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

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

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

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



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

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

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

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

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

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

Для отражения этих событий в базе данных создадим два документа:

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

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

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

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

Значение заполнения и выберите в нем Основной. Таким образом,

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


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

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






















































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

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

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

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


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

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


































Закройте окно свойств справочника.

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















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

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


































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

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

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



























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

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



















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


































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

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

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

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


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


























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

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

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




























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

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

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

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

на значок лупы рядом с ним.



























Система откроет закладку Модуль редактора формы. Модуль – это хранилище для текста программы на встроенном языке. В данном случае это модуль формы. В модуль формы в процедуру

МатериалыКоличествоПриИзменении() добавим следующий текст.

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

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

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

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

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

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

Общий модуль, расположенные в ветке Общие - Общие модули.

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

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















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

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

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

*СтрокаТабличнойЧасти.Цена;

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

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

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

















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

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

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

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

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


































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

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


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

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

– Основной;

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

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

Создайте табличную часть документа с именем

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

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

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

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

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

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



























Перейдите на вкладку Формы. Создайте основную форму документа.

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

















Откроется модуль формы с шаблоном обработчика события

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

ПереченьНоменклатурыЦенаПриИзменении для поля ПереченьНоменклатурыЦена.



















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

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

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

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

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


&НаКлиенте

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

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

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

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



























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
























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




























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

Контрольные вопросы
Какими характерными особенностями обладает документ

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

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

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

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

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

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

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

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

Рисунок 1

Приложенные файлы

  • doc Documenty
    Размер файла: 1 MB Загрузок: 3