Главная страница

Инструкция к лаб. работе по 1С. 2. Документ. Структура и свойства. Создание документов


Скачать 238 Kb.
НазваниеСтруктура и свойства. Создание документов
АнкорИнструкция к лаб. работе по 1С
Дата21.12.2021
Размер238 Kb.
Формат файлаdoc
Имя файла2. Документ.doc
ТипДокументы
#312409

  1. Объект конфигурации Документ.

  2. Структура и свойства.

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

  4. Алгоритмы обработки.

  5. Создание формы объекта БД конфигурации.


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

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

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

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

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

Документ обладает способностью проведения.

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

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

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

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

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

ОК, которые могут образовывать новые типы данных, называются типообраузющими.

Об этом говорится, т.к. при создании первого документа мы столкнемся с использованием типа данных, благодаря ОК Справочник Склады.
Создание документа Приходная накладная
Нам нужно создать несколько ОК Документ, чтобы имеет возможность фиксировать события, происходящие в нашем ОАО «Респект Продакшн».

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

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

Документ Приходная накладная – фиксирует факт поступления в нашу организацию материалов.

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

Создадим новый ОК Документ. ИмяПриходнаяНакладная. Нажимаем Далее.


Рис. 1

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

Т.е. реквизит, это строка, где мы укажем наш склад.


Рис. 2


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


Рис. 3

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

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

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

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

На закладке Нумерация зададим длину номера – 9, тип номера – Строка.
Запускаем 1С:Предприятие в режиме отладки. Открываем документ Приходная накладная (Операции → Документы…)
В нашей БД нет документов Приходная накладная. Создадим новый.

Система автоматически присвоит номер новому документу. Мы заполним табличную часть.

Заполним ее материалами для ремонта телевизоров:


Рис. 4

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


Рис. 5

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

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


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

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

Открываем окно редактирования ОК Документ ПриходнаяНакладная.

Переходим на закладку Формы.

Для создания формы документа, в поле Документ нажимаем на символ лупы.



Рис. 6

Система вызовет инструмент разработчика – конструктор форм.


Рис. 7

Выберите тип формы Форма Документа и нажмите Готово.

В дереве ОК у ОК Документ ПриходнаяНакладная появилась форма ФормаДокумента, а на экране открылось окно редактирования форм.



Рис. 8

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

Нас интересуют три поля ввода – Количество, Цена, Сумма.



Рис. 9

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



Рис. 10

Нас интересует событие ПриИзменении. Оно возникает после изменения значения поля ввода.

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


Рис. 11

Модуль – это «хранилище» для текста программы на встроенном языке.

В модуль формы, в процедуру МатериалыКоличествоПриИзменении() добавить текст:

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

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

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

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

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

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

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

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

Создадим ОК ОбщийМодуль в ветке Общие → Общие модули и назовем его РаботаСДокументами.
В модуль документа добавить текст:
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт

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

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

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


Рис. 12
Процедура МатериалыКоличествоПриИзменении(Элемент)

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

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

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


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

Проверяем в режиме отладки.

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

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

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

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

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

Должно быть так:


Рис.13


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

Создание документа Оказание услуги
Создадим второй необходимый нам документ – Оказание услуги.


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

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

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

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



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

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

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

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

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



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




  • для поля ввода колонки Количество:


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

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

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

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




  • для поля ввода колоник Цена:


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

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

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

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

Должно быть так:



Проверяем в режиме отладки.


написать администратору сайта