1С:Предприятие 8.2 /
Разработчикам /
Практикум
Практикум 2. Создание документов
Создание документа ПриходнаяНакладная
Создание процедуры обработки события в модуле формы
Создание процедуры обработки события в общем модуле
Создание документа ОказаниеУслуги
Создание движений документа ОказаниеУслуги
Итак, фирма предоставляет услуги по ремонту телевизоров и установке стиральных машин. И в том, и в другом случае требуются некоторые материалы, которые расходуются в процессе оказания этих услуг. Поэтому двумя важнейшими событиями в хозяйственной жизни нашей организации будут являться поступление материалов и оказание услуг .
Для отражения этих событий в базе данных мы создадим два документа:
- « Приходная накладная »;
- «Оказание услуги».
«Приходная накладная» будет фиксировать факт поступления в нашу организацию необходимых материалов, а документ «Оказание услуги» будет фиксировать оказание услуг и расход материалов, которые используются при оказании этих услуг.
Создание документа ПриходнаяНакладная
- Создайте новый объект конфигурации Документ1. Имя документу дайте «ПриходнаяНакладная».
- На закладке «Данные» создадим реквизит документа с именем «Склад» и типом СправочникСсылка.Склады. Для этого:
- над окошком Реквизиты кликнете по иконке ;
- в окне «Свойства: Реквизит» задайте имя документа «Склад»;
- в поле «Тип» по стрелочке (по треугольнику) из ниспадающего списка выбираем нужный нам тип СправочникСсылка.Склады.
- Добавьте табличную часть с именем «Материалы».
- У этой табличной части создайте четыре реквизита:
- «Материал» с типом СправочникСсылка. Номенклатура ;
- «Количество» с типом Число (длина → 15, точность → 3, неотрицательное);
- «Цена» с типом Число (длина → 15, точность → 2, неотрицательное);
- «Сумма» с типом Число (длина → 15, точность → 2, неотрицательное).
- Запустите 1С:Предприятие в режиме отладки.
- Выполните команду Операции в†’ Документы в†’ Приходная накладная. Система откроет одну из основных форм документа → основную форму списка.
- Создайте новый документ. Система автоматически присвоит номер новому документу и отметит дату создания документа. В качестве склада выберем «Основной». Теперь нам остается заполнить только табличную часть приходной накладной . Заполните ее материалами так, как показано на рисунке:
- Аналогичным образом создать вторую накладную, которая будет приходовать следующие материалы для установки стиральных машин:
В создаваемых накладных значения в столбце «Сумма» нам пришлось вводить вручную. Это неудобно и возникает естественное желание автоматизировать работу документа так, чтобы сумма вычислялась автоматически всякий раз при изменении цены или количества материалов в строке.
Для этого нам потребуется создать собственную форму документа, а затем воспользоваться возможностями встроенного языка.
Создание формы документа
До сих пор мы использовали предопределенные формы объектов, которые система 1С:Предприятие создавала для нас сама «по умолчанию».
Теперь у нас возникла необходимость слегка изменить логику работы формы документа, а значит, нам придется создать свою собственную форму документа « ПриходнаяНакладная » для того, чтобы в ней мы могли описать тот алгоритм, который нам нужен.
- Вернитесь в конфигуратор и откройте окно редактированияобъекта конфигурации «ПриходнаяНакладная»:
- в конфигураторе дважды кликните по документу «ПриходнаяНакладная». Откроется окно «Документ ПриходнаяНакладная».
- Перейдите на закладку «Формы».
- Для того чтобы создать форму документа, нажмите на символ лупы в поле ввода Документа:
- Система вызовет еще один полезный документ разработчика → конструктор форм. Этот инструмент также построен по принципу «мастеров» - ввод данных в определенной последовательности и передвижение кнопками «Далее» и «Назад».
Сразу нажмем кнопку «Готово», согласившись тем самым со всем, что нам предложила система.
Обратите внимание, что в дереве объектов конфигурации у объекта конфигурации Документ «ПриходнаяНакладная» появилась форма «ФормаДокумента», а на экране открылось окно редактора форм, содержащее эту форму.
Форма документа «ПриходнаяНакладная» содержит большое количество всевозможных полей. Эти поля называются элементами управления. Они имеют разное назначение и разное поведение, которое соответствует их назначению. Однако все они служат для того, чтобы отображать информацию, хранящуюся в базе данных и организовывать интерактивную работу с этой информацией.
- В данном случае нас интересуют три элемента управления → это три поля ввода, расположенные в колонках «Количество», «Цена» и «Сумма».
Создание процедуры обработки события в модуле формы
1. Щелкните правой кнопкой мыши на поле ввода в колонке «Количество» и откройте для него палитру свойств (пункт контекстного меню Свойства)
2. Прокрутите список до конца, и вы обнаружите группу «События», в которой содержится перечень событий, которые могут быть связаны с этим полем ввода.
3. Среди событий найдите событие «ПриИзменении». Это событие возникает после изменения значения поля ввода.
Кликните по кнопке с лупой в конце поля ввода, и система создаст заготовку процедуры обработчика этого события в модуле нашей формы.
4. В модуль формы добавим следующий текст:
Объясним значения этих строк.
В первой строке мы обращаемся к программному объекту ЭлементыФормы. Этот объект является коллекцией значений, содержащей все элементы управления, расположенные на нашей форме. Каждый элемент управления формы можно получить, указав его имя в качестве свойства объекта ЭлементыФормы. В данном случае мы обращаемся к элементу управления с именем «Материалы» (ЭлементыФормы.Материалы).
Этот элемент управления отображает строки табличной части нашего документа. Получить ту строку, в которой в настоящее время осуществляется редактирование, можно при помощи свойства программного объекта ТабличноеПоле → ТекущиеДанные. Таким образом, в результате выполнения первой строки переменная СтрокаТабличнойЧасти будет содержать объект ДокументТабличнаяЧастьСтрока.ПриходнаяНакладная. Материалы, в котором находятся редактируемые данные.
Во второй строке вычисляется сумма как произведение количества и цены. Объект ДокументТабличнаяЧастьСтрока.<имя> позволяет обратиться к данным конкретной колонки, указав имя колонки в качестве свойства объекта. Например, СтрокаТабличнойЧасти.Количество.
5. Закроем все окна и посмотрим, как это работает, запустив 1С:Предприятие в режиме отладки.
6. В окне программы откройте список документов «ПриходнаяНакладная» и откройте любой из двух созданных вами документов. Если вы теперь поменяете количество в любой строке документа, то сумма в строке будет пересчитана автоматически.
7.Вернитесь в конфигуратор и для поля «Цена» сделайте то же самое.
Создание процедуры обработки события в общем модуле
Если подумать о будущем, то будет понятно, что подобное автоматическое заполнение поля «Сумма» может нам понадобиться и в других документах. Поэтому лучше будет поместить расчет суммы в некотором «общедоступном» месте, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм.
Для описания таких «общедоступных» мест служат объекты конфигурации Общий модуль, расположенные в ветке Общие в†’ Общие модули. Процедуры и функции, содержащиеся в этих модулях, могут быть доступны для любых объектов конфигурации.
Для того чтобы алгоритм, выполняемый при обработке события, был доступен для разных документов, мы создадим общий модуль и перенесем в него нашу процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры из общего модуля.
1. Создайте объект конфигурации Общий модуль в ветке Общие в†’ Общие модули и назовите его «РаботаСДокументами».
2. Он будет содержать следующий текст:
Ключевое слово Экспорт в конце оператора «Процедура» как раз указывает на то, что эта процедура может быть доступна из других программных модулей.
3. Вернитесь в нашу форму (в дереве конфигурации Документы → ПриходнаяНакладная → Формы → ФормаДокумента).
4. В открывшемся окне Документ ПриходнаяНакладная: ФормаДокумента на нижней панели щелкните по клавише .
5. В каждом модуле формы измените текст обработчика:
Таким образом, теперь вместо непосредственного расчета суммы мы будем вызывать процедуру из общего модуля, и передавать ей в качестве параметра нужную нам строку табличной части.
6. Запустите 1С:Предприятие в режиме отладки и убедитесь, что все работает так как надо.
Создание документа ОказаниеУслуги
1. Создайте новый объект конфигурации Документ «ОказаниеУслуги».
2. На закладке «Данные» создайте реквизиты:
- «Склад», тип СправочникСсылка.Склады;
- «Клиент», тип СправочникСсылка.Клиенты;
- «Мастер», тип СправочникСсылка.Сотрудники.
3. Создайте табличную часть «ПереченьНоменклатуры» с реквизитами:
- «Номенклатура», тип СправочникСсылка.Номенклатура;
- «Количество», тип Число, длина 15, точность 3, неотрицательное;
- «Цена», тип Число, длина 15, точность 2, неотрицательное;
- «Сумма», тип Число, длина 15, точность 2, неотрицательное.
4. Создайте основную форму документа.
5. Для полей ввода колонок «Количество» и «Цена» создать обработчик события «ПриИзменении», в котором вызвать процедуру «РассчитатьСумму» из общего модуля «РаботаСДокументами».
6. В результате документ «ОказаниеУслуги» в дереве конфигурации будет выглядеть следующим образом:
7. Запустите 1С:Предприятие в режиме отладки и убедитесь (опираясь на рисунки, помещенные ниже), что при вводе цены и количества в табличную часть документа « ОказаниеУслуги » сумма пересчитывается по нашему алгоритму.
Теперь наш документ «ОказаниеУслуг» должен иметь следующий вид:
Создание регистра накопления ОстаткиМатериалов
Прежде всего, нас интересует информация о том, сколько и каких материалов есть у нас на складе. Для накопления такой информации мы создадим регистр «ОстаткиМатериалов».
1. Создайте новый объект конфигурации Регистр накопления с именем «ОстаткиМатериалов».
2. На закладке «Данные» создадим измерения регистра:
- «Материал» с типом СправочникСсылка.Номенклатура;
- «Склад» с типом СправочникСсылка.Склады.
3. Создадим ресурс «Количество» с длиной 15 и сточностью 3.
4. В результате этих действий регистр « ОстаткиМатериалов » должен иметь следующий вид:
5. Если вы сейчас попытаетесь запустить 1С:Предприятие в режиме отладки, то система выдаст сообщение об ошибке:
Создание движений документа ПриходнаяНакладная
Движения документа → это записи в регистрах, которые создаются в процессе проведения документа и отражают изменения, производимые документом.
1. Откройте окно редактирования объекта конфигурации Документ «ПриходнаяНакладная».
2. На закладке «Движения» в списке регистров конфигурации отметим регистр накопления «ОстаткиМатериалов»:
Обратите внимание, что сразу после отметки выбранного регистра становится доступной кнопки «Конструктор движений». Этим конструктором мы и воспользуемся:
3. Конструктор устроен просто. В списке «Регистры» перечислены регистры, в которых документ может создавать движения. В нашем случае там пока один регистр «ОстаткиМатериалов».
В списке «Реквизиты документа» должны находиться исходные данные для создания движений. А в таблице «Поле → Выражение» должны быть заданы формулы, по которым будут вычисляться значения измерений и реквизитов регистра при записи движений.
Обратите внимание, что по умолчанию конструктор предлагает нам создавать движения прихода (символ «+» рядом с названием регистра) по регистру «ОстаткиМатериалов». Это нас вполне устраивает, ведь документ «ПриходнаяНакладная» и должен приходовать материалы.
В поле выбора «Табличная часть» выберем табличную часть нашего документа - «Материалы». Список реквизитов документа автоматически заполнится реквизитами нашей табличной части.
4. Нажмите кнопку «Заполнить выражения». В нижнем окне сформируется соответствие полей и выражений.
Как видите, конструктор движений установил соответствия подходящим образом:
- в качестве материала в регистр будет записан материал из табличной части документа;
- в качестве склада → склад, указанный в шапке документа;
- в качестве количества → количество из табличной части документа.
5. Нажмите «ОК» и посмотрите, какой текст сформировал конструктор в модуле объекта:
Конструктор создал обработчик события ОбработкаПроведения объекта конфигурации Документ и поместил его в модуль объекта.
Внутри обработчика расположен цикл, который предназначен для перебора строк табличной части нашего документа. В цикле обращение к табличной части документапроисходит по имени (Материалы), а строки табличной части документа представляют собой коллекцию значений, для перебора которой можно использовать конструкцию Для Каждого …¦ Из …¦ Цикл.
Объект встроенного языка ДокументОбъект имеет свойство Движения. Оно возвращает коллекцию наборов записей регистров, которые принадлежат этому документу. К набору записей документа, принадлежащему конкретному регистру, можно обратиться, указав через точку имя этого регистра.
Таким образом, в первой строке тела цикла мы добавляем к набору записей, который создает наш документ в регистре, новую запись и сохраняем ее в переменной Движение.
Затем мы присваиваем нужные значения всем полям этой записи и после перебора всех строк документа (после завершения цикла) «одним махом» записываем в регистр ОстаткиМатериалов весь набор записей движений документа.
6. Посмотрим как это работает. Запустим 1С:Предприятие в режиме отладки и откроем одновременно два окна:
- список документов ПриходнаяНакладная;
- список регистра накопленияОстаткиМатериалов.
7. Откроем Приходную накладную №– 1 и нажмем ОК. Обратите внимание, что при проведении приходной накладной появляются соответствующие записи в регистрах накопления.
8. Аналогичные действия проделайте и с документом Приходная накладная №– 2.
Создание движений документа ОказаниеУслуги
1. Создайте движения документа ОказаниеУслуги.
При использовании конструктора будьте внимательны и обратите внимание на то, что документ ОказаниеУслуги должен расходовать материалы.
2. При автоматическом заполнении поля Материал не заполнится.
Если мы оставим это так, как есть, то в регистре накопления в строках с типом Движение регистра → расход имя номенклатуры фиксироваться не будет. Чтобы избежать этого, надо выбрать поле Материал и в поле Реквизиты документа дважды кликнуть по строке ТекСтрокаПереченьНоменклатуры.Номенклатура.
Таким образом, имя номенклатуры для строк регистра накопления будет выбираться из табличной части документа.
3. Запустим отладку и проведем документы оказания услуг и убедимся, что в регистре накопления он создал верные движения.
Сформированные таким образом движения этого документа будут не совсем правильны, поскольку в документе ОказаниеУслуги, в отличие от документа ПриходнаяНакладная, содержатся не только расходуемые материалы, но и услуги. Поэтому в регистр ОстаткиМатериалов попали записи и о расходуемых услугах, что неправильно.
Пока мы ничего не будем делать с движениями, которые сформировал конструктор, но как только познакомимся с перечислениями, мы внесем в обработчик проведения необходимые изменения.
Другие материалы по теме:
остаткиматериалов, оказаниеуслуги, приходнаянакладная, приход., создание, движения, накопления, события, материалы, основной, реквизиты, цена, регистр., формы, 00, номенклатура, объект, количество, данные, сумма, регистр, склад, справочник, конфигурации, документа, документ
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Практикум
Другие материалы по теме:
Источники данных для расчетов бюджетирования
Практикум 10. Бухгалтерский учет
Практикум 4. Создание периодического регистра сведений Цены
Нас находят: как создать собственную форму документа в 1с, документ оказание услуг в конфигураторе, https://stimul kiev ua/materialy htm?a=praktikum_2_sozdanie_dokumentov, 1c бухгалтерия предприятия 8 редакция 3 0 как создать документ на основании документа, Лекция ИТ Создание и корректировка форм документов и расчётов Задание реквизитов документа, как создать 2 документа с 5 основными и 5 табличными реквизитами в конфигураторе, как сделать форму документа и в ней процедуру 1с, 80754, 88639, работа в конфигураторе 1с форма документа
Мы на Facebook