Меню


Курсы СтимулСправочникПолезные материалы1С:Предприятие 8.2РазработчикамПрактикум

1С:Предприятие 8.2 /
Разработчикам /
Практикум

Оглавление

Практикум 2. Создание документов

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

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

Создание процедуры обработки события в модуле формы

Создание процедуры обработки события в общем модуле

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

Создание движений документа ОказаниеУслуги

 

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

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

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

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

  1. Создайте новый объект конфигурацииДокумент1. Имя документу дайте «ПриходнаяНакладная».
  2. На закладке «Данные» создадим реквизит документа с именем «Склад» и типом СправочникСсылка.Склады. Для этого:
    1. над окошком Реквизиты кликнете по иконке ;
    2. в окне «Свойства: Реквизит» задайте имя документа «Склад»;
    3. в поле «Тип» по стрелочке (по треугольнику) из ниспадающего списка выбираем нужный нам тип СправочникСсылка.Склады.

Документ ПриходнаяНакладная Свойства: Реквизит Еха Основные Данные І Ў Основные: Нумерация Движения П оследовательност и Журналы Формы Макеты Подсистемы Ввод на основании Права Интерфейсы Обмен данными Прочее В-я Реквизиты Имя Склад Склад ЯШ! Синоним Склад

  1. Добавьте табличную часть с именем «Материалы».
  2. У этой табличной части создайте четыре реквизита:

В-кЦ Tабличные части =:= Материалы і.....- Материал — Цена - Сумма Количество

  1. Запустите 1С:Предприятие в режиме отладки.
  2. Выполните команду Операции в†’ Документы в†’ Приходная накладная. Система откроет одну из основных форм документа → основную форму списка.
  3. Создайте новый документ. Система автоматически присвоит номер новому документу и отметит дату создания документа. В качестве склада выберем «Основной». Теперь нам остается заполнить только табличную часть приходной накладной . Заполните ее материалами так, как показано на рисунке:

Приходная накладная: Приходная накладная Новый ж Номер: 000000001 Дата: 27.03.2003 0:00:00 т Склад: Основной 2 Гй N Материал Количество Цена Сумма 1 Строчный трансформатор GoldStar 10,000 270,00 2 700,00 2 Строчный трансформатор Samsung 10,0001 600,00 6 00

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

Склад: Основной . .. х з! •Ьг; 5 ц. І І N Материал Количество Ц єна Сумма 1 Кабель электрический 5,000 20,00 100,00 2 Шланг резиновый 5,000 100,00 500,00 О К Записать Закрыть

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

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

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

До сих пор мы использовали предопределенные формы объектов, которые система 1С:Предприятие создавала для нас сама « по умолчанию ».

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

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

Документ ПриходнаяНакладная Основные Данные Нумерация Движения П оследовательности Журналы Формы Основные Формы Списка Выбора Документа І аь'оті.і Ввод по строке в 4 Номер „.ха . .. х се . .. КН

  1. Система вызовет еще один полезный документ разработчика → конструктор форм. Этот инструмент также построен по принципу «мастеров» - ввод данных в определенной последовательности и передвижение кнопками «Далее» и «Назад».

Сразу нажмем кнопку «Готово», согласившись тем самым со всем, что нам предложила система.

Обратите внимание, что в дереве объектов конфигурации у объекта конфигурации Документ «ПриходнаяНакладная» появилась форма «ФормаДокумента», а на экране открылось окно редактора форм, содержащее эту форму.

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

  1. В данном случае нас интересуют три элемента управления → это три поля ввода, расположенные в колонках «Количество», «Цена» и «Сумма».

Создание процедуры обработки события в модуле формы

1. Щелкните правой кнопкой мыши на поле ввода в колонке «Количество» и откройте для него палитру свойств (пункт контекстного меню Свойства)

'////////////////////////////////////А Материал Цена Сумма [аы1 Поле ееода Иь Ul.ll /Пппа ввппаЧ .Ч _ Поле ееода Размещение данных... Свойства АИ+Е п1ег уууууууууууууууууууууууууууууууууууууууууууууууууууул ууууууууууууууууууууууууууууууууууууууууууууууууу

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

Ў События: ПриИзменении НачалоВыбора Н ачалоВ ыбораИ зСг Очистка Регулирование Открытие ОбработкаВыбора АвтоПодборТ екста ОкончаниеВводаТ 35 35 35 35 35 35 35 Ў о.

3. Среди событий найдите событие «ПриИзменении». Это событие возникает после изменения значения поля ввода.

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

— Документ ПриходнаяНвкладная: ФормаДокумента _ п Е Процедура МатериалыКоличествоПриИзменении Элемент // Вставить содержимое обработчика. І- КонецПроцедуры Модуль

4. В модуль формы добавим следующий текст:

C Процедура МатериалыКоличествоПриИзменении Элемент СтрокаТабличнойЧасти = ЭлементыФормы.Материалы.ТекущиеДанные СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество СтрокаТабличнойЧасти.Цена; - КонецПроцедуры

Объясним значения этих строк.

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

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

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

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

6. В окне программы откройте список документов «ПриходнаяНакладная» и откройте любой из двух созданных вами документов. Если вы теперь поменяете количество в любой строке документа, то сумма в строке будет пересчитана автоматически.

7.Вернитесь в конфигуратор и для поля «Цена» сделайте то же самое.

Создание процедуры обработки события в общем модуле

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

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

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

1. Создайте объект конфигурации Общий модуль в ветке Общие в†’ Общие модули и назовите его «РаботаСДокументами».

2. Он будет содержать следующий текст:

5 Процедура РассчитатьСумму СтрокаТабличнойЧасти Экспорт СтрокаТабличнойЧасти.Сумма = СтрокаТабличноЙЧасти.Количество СтрокаТабличнойЧасти.Цена; - КонецПроцедуры

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

3. Вернитесь в нашу форму (в дереве конфигурации Документы → ПриходнаяНакладная → Формы → ФормаДокумента).

4. В открывшемся окне Документ ПриходнаяНакладная: ФормаДокумента на нижней панели щелкните по клавише Модуль .

5. В каждом модуле формы измените текст обработчика:

Е Процедура НатериалыЦенаПриИзменении Элемент СтрокаТабличнойЧасти = ЗлементыФормы.Материалы.ТекущиеДанные РаботаСДокументами.РассчитатьСумму СтрокаТабличнойЧасти ; - КонецПроцедуры

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

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

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

1. Создайте новый объект конфигурации Документ «ОказаниеУслуги».

2. На закладке «Данные» создайте реквизиты:

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

4. Создайте основную форму документа.

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

6. В результате документ «ОказаниеУслуги» в дереве конфигурации будет выглядеть следующим образом:

от ОказаниеУслуги 25 Реквизиты .....- Склад I.....— Клиент ;.....- Мастер В 5 Ц Таблимные части В-5551 ПереченьНоменклатуры .....— Номенклатура .....- Количество I.....— Цена =.....— Сумма Й” Формы :-Ш Форма Документа Макеты

7. Запустите 1С:Предприятие в режиме отладки и убедитесь (опираясь на рисунки, помещенные ниже), что при вводе цены и количества в табличную часть документа « ОказаниеУслуги » сумма пересчитывается по нашему алгоритму.

Склад: Основной Клиент: И ванов М ихаил Ю рьевич М астер: Гусаков Н иколай Дмитриевич Ш 13 3Z N Номенклатура Количество Цена Сумма 1 Ремонт импортного телевизора 1,000 1 000,00 1 000,00 2 Строчный трансформатор GoldStar 1,000 270,00 270,00 3 Т ранзистор Ph

Склад: Основной Клиент: Синицын Роман Григорьевич Мастер: Деловой Иван Сергеевич і fi N Номенклатура Количество Цена Сумма 1 Ремонт отечественного телевизора 2,000 1 400,00 2 800,00 2 Строчный трансформатор Samsung 1,000 600,00 600,00 3 Т ранзистор Philips

Склад: Основной Клиент: Спиридонова Галина Вячеславовна М астер: Симонов В алерий М ихайлович € Ч Ч И І СІ =12 N Номенклатура Количество Цена Сумма Ц Подключение воды 1,000 850,00 850,00 2 Шланг резиновый 1,000 100,00 100,00

Теперь наш документ «ОказаниеУслуг» должен иметь следующий вид:

 Документы Оказание чслчги _ п Дата Номер Склад Клиент Мастер // й 23.03.2003... 000000001 Основной Иванов Михаил Юрьевич Гусаков Николай Дмитриевич 23.03.2003... 000000002 Основной Синицын Роман Григорьевич Деловой Иван Сергеевич п 23.03.2003... 000000003

Создание регистра накопления ОстаткиМатериалов

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

1. Создайте новый объект конфигурации Регистр накопления с именем «ОстаткиМатериалов».

2. На закладке «Данные» создадим измерения регистра:

3. Создадим ресурс «Количество» с длиной 15 и сточностью 3.

4. В результате этих действий регистр « ОстаткиМатериалов » должен иметь следующий вид:

Ё 3 Регистры накопления В-Ц ОстаткиМатериалов Измерения . .... Материал . ....I Склад В Ресурсы . .... Количество ! 2 Реквизиты Формы Макеты

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

!!! РегистрНакопления.ОстаткиМатериалов: Ни один из документов не является регистратором для регистра

Создание движений документа ПриходнаяНакладная

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

1. Откройте окно редактирования объекта конфигурации Документ «ПриходнаяНакладная».

2. На закладке «Движения» в списке регистров конфигурации отметим регистр накопления «ОстаткиМатериалов»:

Документ ПриходнаяНакладная Основные Данные Нумерация Движения П оследовательност и Журналы Формы Макеты Подсистемы Ввод на основании Права Интерфейсы Обмен данными Прочее Разрешить Проведение: Оперативное проведение: Разрешить Удаление движений: Удалять д

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

3. Конструктор устроен просто. В списке «Регистры» перечислены регистры, в которых документ может создавать движения. В нашем случае там пока один регистр «ОстаткиМатериалов».

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

Обратите внимание, что по умолчанию конструктор предлагает нам создавать движения прихода (символ «+» рядом с названием регистра) по регистру «ОстаткиМатериалов». Это нас вполне устраивает, ведь документ «ПриходнаяНакладная» и должен приходовать материалы.

В поле выбора «Табличная часть» выберем табличную часть нашего документа - «Материалы». Список реквизитов документа автоматически заполнится реквизитами нашей табличной части.

4. Нажмите кнопку «Заполнить выражения». В нижнем окне сформируется соответствие полей и выражений.

Конструктор движения регистров п •йЧЧ і Регистры РегистрН акопления. О стат киМ атериалов Тип движения регистра: • Приход Расход Т абличная часть: Материалы Реквизиты документа а Номер а Склад Т екСтрокаМ атериалы. М атериал мі Т екСтрокаМ атериалы. Количе

Как видите, конструктор движений установил соответствия подходящим образом:

5. Нажмите «ОК» и посмотрите, какой текст сформировал конструктор в модуле объекта:

 Процедура ОбработкаПроведения Отказ, Режим / / {{_КОНСТРУКТОР_ДВИЗКЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, // внесенные вручную изменения будут утеряны!!! Для Каждого ТекСтрокаМатериалы Из Мат

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

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

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

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

Затем мы присваиваем нужные значения всем полям этой записи и после перебора всех строк документа (после завершения цикла) «одним махом» записываем в регистр ОстаткиМатериалов весь набор записей движений документа.

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

7. Откроем Приходную накладную №– 1 и нажмем ОК. Обратите внимание, что при проведении приходной накладной появляются соответствующие записи в регистрах накопления.

8. Аналогичные действия проделайте и с документом Приходная накладная №– 2.

Создание движений документа ОказаниеУслуги

1. Создайте движения документа ОказаниеУслуги.

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

2. При автоматическом заполнении поля Материал не заполнится.

Если мы оставим это так, как есть, то в регистре накопления в строках с типом Движение регистра → расход имя номенклатуры фиксироваться не будет. Чтобы избежать этого, надо выбрать поле Материал и в поле Реквизиты документа дважды кликнуть по строке ТекСтрокаПереченьНоменклатуры.Номенклатура.

Тип движения регистра: О Приход 0 Расход Мастер Т екСтрокаП еременьН оменклатуры. Н оменклатура Щ Т екСтрокаП еременьН оменклатуры. Количество Т екСтрокаП еременьН оменклатуры. Ц ена Т екСтрокаП еременьН оменклатуры. Сумма Т абличная часть: П ереченьН омен

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

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

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

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


Нас находят: документ оказание услуг в конфигураторе, как создать собственную форму документа в 1с, 1 С: Предприятие Создание объекта конфигурации «Документ» Создание процедуры обработки события в общем модуле Создание формы и макета, создание формы в 1с 8 2 с нуля, создание услуг из материалов 1с, Создание процедуры обработки события в модуле формы, создание документа в 1с, Создайте объект конфигурации Общий модуль в ветке Общие, процедура модуля для заполнения поля колонки одним числом, приходная накладная в 1с 8 2 создание


Подписка на новости RSS     Добавьте в закладки Google fusion     Мы в Google+    

 

Мы ВКонтакте

 

Мы на Facebook