Главная
Статьи
Ресурсы
Информация

Часть II. Использование основных объектов конфигурации. Глава 8 - 12


Глава 8. Бухгалтерский учет

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

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

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

 

Объект конфигурации План видов характеристик

О

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

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

субконто.

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

Создание объекта конфигурации План видов характеристик ВидыСубконто

П

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

Откроем конфигуратор и создадим новый объект конфигурации План видов характеристик. Зададим его имя -«ВидыСубконто».

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

Затем на закладке «Владельцы» укажем, что этот справочник подчинен плану видов характеристик «ВидыСубконто»:

 

Закроем окно редактирования справочника и вернемся к нашему плану видов характеристик.

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

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

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

• СправочникСсылка.Субконто:

 

 

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

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

После этого перейдем на закладку «Прочее» и начнем ввод предопределенных значений плана видов характеристик.

Создадим предопределенный вид субконто: «Материалы», с кодом «00001» и типом СправочникСсылка.Номенклатура, и затем

создадим вид субконто: «Клиенты», с кодом «00002» и типом СправочникСсылка.Клиенты:

 

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

 

Объект конфигурации План счетов

О

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

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

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

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

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

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

 

Узнай больше!

О структуре объектов встроенного языка, предназначенных для

работы с планами счетов можно прочитать в главе «Планы счетов

на странице» 588.   

Создание объекта конфигурации План счетов Основной

П

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

Откроем конфигуратор и создадим новый объект конфигурации План счетов. Присвоим ему имя - «Основной».

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

Нажмем кнопку «Предопределенные» и создадим четыре предопределенных счета:

• «Товары», код 41, активный, с количественным учетом в разрезе материалов:

 

• «Расчеты с поставщиками», код 60, активно/пассивный:

 

• «Капитал», с кодом 90, активно/пассивный:

 

 

«Дебиторская задолженность», код 62, активно/пассивный, с учетом в разрезе клиентов:

В результате план счетов нашего OOO «На все руки мастер» будет выглядеть следующим образом:

 

 

 

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

' Узнай больше!

Для плана счетов можно установить свойство «Автопорядок no коду». Это свойство используется для того, чтобы указать системе, что упорядочивание no полю Порядок должно всегда подставляться в

тех случаях, когда пользователь или разработчик выбирает упорядочивание no коду. Его нужно использовать, прежде всего, тогда, когда с точки зрения пользователя нужноупорядочивать план счетов no коду с учетом разделителей кода счета. Например, если счета «10.11» и «10.2» упорядочивать no коду счета, то счета будут располагаться так:

«10.11»

«10.2»

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

Но если заданы значения поля Порядок «10.11» и «10. 2» и установлено свойство «Автопорядок no коду», то при выборе упорядочивания no коду пользователь будет, фактически, получать порядок, учитывающий разделители:

«10.2»

«10.11».

Если свойство не устанавливать, то нужно будет в явном виде

выбирать упорядочивание no полю Порядок.    ___________^___

 

Бухгалтерский учет

Объект конфигурации Регистр бухгалтерии

О

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

По своему виду регистр бухгалтерии напоминает регистр накопления - он также имеет ресурсы, может иметь измерения и реквизиты. Измерения позволяют разделять ведение учета (например, используя измерение «Организация», можно вести учет в разрезе нескольких юридических лиц). Реквизиты служат признаком, по которому одни записи регистра можно отделить от других (например, в качестве реквизита может использоваться номер журнала, что позволит отбирать проводки, имеющие одинаковый смысл).

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

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

Узнай больше!

О структуре объектов встроенного языка, предназначенных для работы с регистрами бухгалтерии можно прочитать в главе «Регистры бухгалтерии» на странице 603.

 

Создание регистра бухгалтерии Управленческий

О

ткроем конфигуратор и создадим новый объект конфигурации Регистр бухгалтерии. Зададим его имя _ «Управленческий». Укажем, что с ним будет связан план счетов «Основной». Установим флаг «Корреспонденция». Этот флаг будет говорить о том, что создаваемый нами регистр поддерживает корреспонденции. Это означает, что каждая запись регистра имеет дебетовую и кредитовую часть, что позволит нам получать информацию не только об остатках и оборотах по счетам , но и о корреспонденциях между счетами.

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

Теперь перейдем на закладку «Данные» и создадим два ресурса:

• «Сумма», длина 15, точность 2, балансовый,

• «Количество», длина 15, точность 3, небалансовый, признак

учета - количественный, признак учета субконто -

количественный.

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

Запустим 1С:Предприятие в режиме отладки и откроем регистр бухгалтерии «Управленческий». Как видите, платформа (при создании структуры хранения данных) добавила к созданным нами реквизитам регистра еще ряд полей, которые явились следствием использования плана счетов «Основной». Прежде всего, это поля «СчетДт», «СубконтоДт1», «СчетКт» и «СубконтоКт1>. Кроме этого, если прокрутить окно вправо до конца, то вы обнаружите две колонки «Количество». Это «КоличествоДт» и «КоличествоКт». Для измерений и ресурсов регистра, связанных с признаками учета, платформа создает пару полей для хранения значения ресурса отдельно по дебету и отдельно по кредиту проводки.

 

Использование регистра бухгалтерии

Н

астало время познакомиться с тем, каким образом используется созданный нами регистр бухгалтерии «Управленческий». В этой главе мы, сначала, доработаем оба наши документа - «ПриходнаяНакладная» и «ОказаниеУслуги» - так, чтобы они «поставляли» данные не только для регистров накопления, но и для регистра бухгалтерии. Затем мы создадим бухгалтерский отчет «Оборотно-сальдовая ведомость», который будет показывать нам состояние товародвижения в нашем OOO «На все руки мастер», основываясь на данных регистра бухгалтерии.

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

Н

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

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

В    список    регистров    добавим    регистр

«РегистрБухгалтерии.Управленческий». В качестве источника данных

выберем табличную часть документа «ПриходнаяНакладная» -

«Материалы».    Счет    дебета    установим    равным

«ПланыСчетов.Основной.Товары» (41), а счет кредита -«ПланыСчетов.Основной.РасчетыСПоставщиками» (60).

 

 

Нажмем кнопку «Заполнить выражения». У вас должен получиться следующий результат:

 

Нажмем «ОК» и посмотрим, какой текст платформа добавила в обработчик проведения документа «ПриходнаяНакладная»:

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

// регистр ОстаткиМатериалов Приход

Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Материал = ТекСтрокаМатериалы.Материал;

Движение.Склад = Склад;

Движение.Количество = ТекСтрокаМатериалы.Количество; КонецЦикла; Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

// регистр СтоимостьМатериалов Приход

Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

 

Движение.Период = Дата;

Движение.Материал = ТекСтрокаМатериалы.Материал;

Движение.Стоимость = ТекСтрокаМатериалы.Сумма; КонецЦикла; Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

// регистр Управленческий

Движение = Движения.Управленческий.Добавить();

Двюкение.СчетДт = ПланыСчетов.Основной.Товары;

Движение.СчетКт = ПланыСчетов.Основной.РасчетыСПоставшиками;

Движение.Период = Дата;

Движение.Сумма = ТекСтрокаМатериалы.Сумма;

Движение.Количество = ТекСтрокаМатериалы.Количество;

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] =

ТекСтрокаМатериалы.Материал; КонецЦикла;

// записываем движения регистров Движения.ОстаткиМатериалов.Записать(); Движения.СтоимостьМатериалов.Записать(); Движения.Управленческий.Записать(); //}}_КОНСТРУКТОРЛВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры

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

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

 

Другими словами, запись:

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы]

равносильна записи:

Движение.СубконтоДт.Материалы .

 

Добавление движений по регистру бухгалтерии Управленческий в документ ОказаниеУслуги

Д

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

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

 

 

 

Запустим 1С:Предприятие в режиме отладки, откроем документ ПриходнаяНакладная No1 и перепроведем его.

Посмотрим, какие движения сформировал документ в регистре бухгалтерии Управленческий:

 

Обратите внимание, что, поскольку, на счете 60 («РасчетыСПоставщиками») отсутствует аналитика и ведется только суммовой учет, в записях движений регистра «СубконтоКт1», «СубконтоКт2» и «КоличествоКт» не указаны.

После этого перепроведем документ ПриходнаяНакладная No2 и посмотрим, какие движения сформирует он.

Теперь перейдем к более сложной задаче - добавлению движений по регистру «Управленческий» в документ «ОказаниеУслуги».

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

Откроем в конфигураторе модуль объекта конфигурации Документ «ОказаниеУслуги» и найдем в нем процедуру обработки проведения. Она должна иметь следующий вид:

Процедура ОбработкаПроведения(Отказ, Режим) Запрос = Новый Запрос; Если Режим = РежимПроведенияДокумента.Оперативный Тогда

Запрос.Текст =

"ВЫБРАТЬ

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Количество,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры

| КАК ВидНоменклатуры,

| ОказаниеУслугиПереченьНоменклатуры.Сумма,

 

 

|    ОстаткиМатериаловОстатки.КоличествоОстаток,   

|    СтоимостьМатериаловОстатки.СтоимостьОстаток,

|    ОстаткиМатериаловОстаткиНаСкладе.КоличествоОстаток

| КАК КоличествоОстатокНаСкладе

|ИЗ

|    Документ.ОказаниеУслуги.ПереченьНоменклатуры

| КАК ОказаниеУслугиПереченьНоменклатуры

|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(

|    &МоментВремени,

|    Материал В (&СписокНоменклатурыДокумента))

| КАК СтоимостьМатериаловОстатки

| ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

|    СтоимостьМатериаловОстатки.Материал

|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(

|    &МоментВремени,

|    Материал В (&СписокНоменклатурыДокумента))

|КАК ОстаткиМатериаловОстатки

|    ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

|    ОстаткиМатериаповОстатки.Материал

|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(

|    &МоментВремени,

|    Материал В (&СписокНоменклатурыДокумента) И

|    Склад = &СкладВДокументе)

|    КАК ОстаткиМатериаловОстаткиНаСкладе

|    ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

|    ОстаткиМатериаловОстаткиНаСкладе.Материал

|ГДЕ

| ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

|ДЛЯ ИЗМЕНЕНИЯ

| РегистрНакопления.ОстаткиМатериалов.Остатки, | РегистрНакопления.СтоимостьМатериалов.Остатки"; Иначе

Запрос.Текст = "ВЫБРАТЬ

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Количество, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры | КАК ВидНоменклатуры, | ОказаниеУслугиПереченьНоменклатуры.Сумма, | ОстаткиМатериаловОстатки.КоличествоОстаток, | СтоимостьМатериаловОстатки.СтоимостьОстаток |ИЗ

| Документ.ОказаниеУслуги.ПереченьНоменклатуры | КАК ОказаниеУслугиПереченьНоменклатуры

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(

| &МоментВремени,

|            Материал В (&СпиеокНоменклатурыДокумента)

 

|    КАК СтоимостьМатериаловОстатки

|    ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

|    СтоимостьМатериаловОстатки.Материал

|    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(

|    &МоментВремени,

|    Материал В (&СписокНоменклатурыДокумента))

|    КАК ОстаткиМатериаловОстатки

|    ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =

|    ОстаткиМатериаловОстатки.Материал

|ГДЕ

| ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

|ДЛЯ ИЗМЕНЕНИЯ

| РегистрНакопления.ОстаткиМатериалов.Остатки, | РегистрНакопления.СтоимостьМатериалов.Остатки"; КонецЕсли;

Запрос.УстановитьПараметрС'МоментВремени", МоментВремени()); Запрос.УстановитьПараметрС'СписокНоменклатурыДокумента",

ПереченьНоменклатуры.ВыгрузитьКолонкуС'Номенклатура")); Запрос.УстановитьПараметр{"Ссылка",Ссылка);

ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать(); Пока ВыборкаРезультатаЗапроса.Следующий() Цикл

/ЯТроверить остаток при оперативном проведении Если Режим = РежимПроведенияДокумента.Оперативный Тогда Если ВыборкаРезультатаЗапроса.ВидНоменклатуры =

Перечисления.ВидыНоменклатуры.МатериалТогда Остаток = ?(ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе = Null,

0,ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе); Если Остаток < ВыборкаРезультатаЗапроса.Количество Тогда Сообщить("Материала" +

СокрЛП(ВыборкаРезультатаЗапроса.Номенклатура) + " имеется только " + Остаток); Отказ = Истина; Возврат; КонецЕсли; КонецЕсли; КонецЕсли;

//Сформировать движения

Если ВыборкаРезулыатаЗапроса.ВидНоменклатуры =

Перечисления.ВидыНоменклатуры.МатериалТогда // регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата;

 

Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаРезультатаЗапроса.Количество;

// регистр СтоимостьМатериалов Расход Движение = Движения.СтоимостьМатериалов.Добавить(); Движение.ВидДвижения = ВидЦвиженияНакопления.Расход; Движение.Период = Дата;

Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура; //расчитать стоимость материала

СтоимостьМатериала = ?(ВыборкаРезультатаЗапроса.КоличествоОстаток = Null. 0, ВыборкаРезультатаЗапроса.СтоимостьОстаток / ВыборкаРезультатаЗапроса.КоличествоОстаток); Движение.Стоимость = СтоимостьМатериала *

ВыборкаРезультатаЗапроса.Количество; КонецЕсли;

// регистр Продажи

Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаРезультатаЗапроса.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ВыборкаРезультатаЗапроса.Количество;

Движение.Выручка = ВыборкаРезультатаЗапроса.Сумма;

Если ВыборкаРезультатаЗапроса.ВидНоменклатуры =

Перечисления.ВидыНоменклатуры.Материал Тогда

Движение.Стоимость = СтоимостьМатериала *

ВыборкаРезультатаЗапроса.Количество; Иначе

Движение.Стоимость = 0; КонецЕсли; КонецЦикла;

// записать движения регистров

Движения.ОстаткиМатериалов.Записать();

Движения.СтоимостьМатериалов.Записать();

Движения.Продажи.Записать();

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

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

 

Добавим движения по регистру бухгалтерии Управленческий:

//Сформировать движения

Если ВыборкаРезультатаЗапроса.ВидНоменклатуры =

Перечисления.ВидыНоменклатуры.Материал Тогда

// регистр ОстаткиМатериалов Расход

Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаРезультатаЗапроса.Количество;

// регистр СтоимостьМатериалов Расход Движение = Движения.СтоимостьМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата;

Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура; //расчитать стоимость материала

СтоимостьМатериала = ?(ВыборкаРезультатаЗапроса.КоличествоОстаток = Null, 0, ВыборкаРезультатаЗапроса.СтоимостьОстаток / ВыборкаРезультатаЗапроса.КоличествоОстаток); Движение.Стоимость = СтоимостьМатериала *

ВыборкаРезультатаЗапроса.Количество;

//no регистру Управленческий

//первая проводка:

//Д 62(ДебиторскаяЗадолженность) - К 90 (Капитал) //розничная сумма

Движение = Движения.Управленческий.Добавить();

Движенне.СчетДт = ПланыСчетов.Основной.ДебиторскаяЗадолженность; Движение.СчетКт = ПланыСчетов.Основной.Капитал; Движение.Период = Дата;

Движение.Сумма = ВыборкаРезультатаЗапроса.Сумма; Движение .СубконтоДтГПланыВидовХарактеристик,ВидыСубконто.Материалы] =

ВыборкаРезультатаЗапроса.Номенклатура;

//вторая проводка:

//Д90 (Капитал) - К 41 (Товары) - себестоимость

Движение = Движения.Управленческий.Добавить(),*

Движение.СчетДт = ПланыСчетов.Основной.Капитал;

Движение.СчетКт = ПланыСчетов.Основной.Товары;

Движение.Период = Дата;

Движение.Сумма = СтоимостьМатериала *

                                                                                                                ВыборкаРезультатаЗапроса.Количество;   

 

Движение.КоличествоКт = ВыборкаРезультатаЗапроса.Количество; Движение .СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] =

ВыборкаРезультатаЗалроса.Номенклатура-

КонецЕсли;

 

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

Поэтому нам, для построения такого отчета, понадобятся две исходные таблицы: объектная (ссылочная) таблица плана счетов «Основной» и виртуальная таблица регистра бухгалтерии «Управленческий.ОстаткиИОбороты»:

 

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

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

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

 

 

 

Из таблицы «Основной» мы выберем поля «Код» и «Наименование», а из таблицы «УправленческийОстаткиИОбороты», мы выберем следующие поля:

• «СуммаНачальныйРазвернутыйОстатокДт»,

• «СуммаНачальныйРазвернутыйОстатокКт»,

• «СуммаОборотДт»,

• «СуммаОборотКт»,

• «СуммаКонечныйРазвернутыйОстатокДт»,

• «СуммаКонечныйРазвернутыйОстатокКт»:

 

После этого перепроведем остальные документы Оказание услуги.

Создание отчета ОборотноСальдоваяВедомость

Т

еперь нам осталось только создать отчет для бухгалтерии OOO «На все руки мастер» и наше знакомство с использованием регистра бухгалтерии будет закончено.

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

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

Бухгалтерский отчет «Оборотно-сальдовая ведомость» представляет собой таблицу, в строках которой перечислены все

 

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

В заключение на закладке «Отчет» сбросим флаг «Использовать построитель отчета».

Наш отчет готов. Нажмем «ОК», запустим 1С:Предприятие в режиме отладки и посмотрим, как работает наш отчет:

 

 

Затем на закладке «ОбъединенияЯ1севдонимы» зададим псевдонимы полей регистра: «СальдоНачДт», «СальдоНачКт», «ОборотДт», «ОборотКт», «СальдоКонДт» и СальдоКонКт»:

 

 

 

После этого на закладке «Порядок» укажем, что результат запроса должен быть отсортирован по возрастанию поля «Код», а на закладке «Итоги» укажем, что должны быть сформированы общие итоги, представляющие собой суммарные значения полей регистра:

 

Что нового мы узнали

] как использовать план видов характеристик дЛя

организации ведения бухгалтерского учета ____] что такое субконто

] для чего предназначен объект конфигурации План счетов ____] как создать план счетов ____] для чего предназначен Регистр бухгалтерии ____] как создать регистр бухгалтерии и настроить параметры

учета ] как создать движения документа по регистру бухгалтерии

при помощи конструктора движений ] как создать движения документа по регистру бухгалтерии

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

 

Глава 9. План видов расчета, регистр расчета

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

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

Зачем нужен план видов расчета и регистр расчета

В

этой главе мы рассмотрим возможности системы 1С:Предприятие, которые она предоставляет дЛя автоматизации сложных периодических расчетов.

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

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

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

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

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

 

План видов расчета, регистр расчета

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

В качестве примера рассмотрим начисление премии за апрель. Премия должна начисляться в размере 10% от суммы, начисленной в качестве оплаты по окладу. Следовательно, необходимо проанализировать все записи о начислениях оплаты по окладу, которые попадают в интересующий нас базовый период, а именно апрель. Допустим, общая сумма таких начислений составила 8000 рублей - в этом случае премия должна быть начислена в размере 800 рублей:

Зависимость премии от оклада по базовому периоду

Базовый период

 

Во-вторых, это влияние может быть не на исходные данные, а на сам период, за который производится расчет. В качестве примера можно привести расчет оплаты по окладу и невыход на работу. Предположим, что мы начислили сотруднику оплату по окладу за март месяц. В этом случае период действия такого расчета будет с 01.03.2004 по 31.03.2004. После этого мы получили информацию от руководителя отдела, что, оказывается, сотрудник отсутствовал на работе с 1 по 10 марта по неизвестной причине. В этом случае нам нужно будет произвести расчет «Невыход» (в котором можно рассчитать какие-то удержания с сотрудника). Но кроме этого, нам

нужно будет пересчитать и оклад сотрудника, исходя из того, ЧТо фактический период действия расчета «Оклад» стал теперь с 11.03.2004 по 31.03.2004. Такое влияние мы будем называть вытеснением no периоду действия. В результате, если за полный месяц работы сотруднику должно было быть начислено 9300 рублей то теперь, за фактический период работы начисление составит 6300 рублей:

 

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

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

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

В системе 1С:Предприятие такой универсальный механизм реализован при помощи планов видов расчета и регистров расчета. И первым объектом конфигурации, с которым мы начнем знакомиться в этой главе, будет План видов расчета.

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

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

Фактический период - это то, что получилось из периода действия после анализа всех периодов действия расчетов, которые вытесняют наш по периоду действия.

 

Объект конфигурации План видов расчета

О

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

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

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

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

Существует возможность указать один из двух видов зависимости от базы: «Зависимость по периоду действия» и «Зависимость по периоду регистрации». Оба вида этой зависимости подробно объяснены в разделе «Объект конфигурации Регистр расчета» на странице 327.

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

 

 

влияющих на

возможность указать три категории видов расчета, предопределенный вид расчета:

• Базовые - это те виды расчета, результаты которых должны

быть использованы при перерасчете этого вида расчета.

• Вытесняющие - это те виды расчета, которые вытесняют этот

вид расчета по периоду действия.

• Ведущие - это те виды расчета, изменение результатов

которых должно приводить к необходимости перерасчета

этого вида расчета.

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

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

 

~ Узнай больше!

О структуре объектов встроенного языка, предназначенных ^ работы с планом видов расчета можно прочитать в главе «Планы видов расчета» на странице 590.

 

Создание плана видов расчета ОсновныеНачисления

П

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

Откроем конфигуратор и создадим новый объект конфигурации План видов расчета. Зададим его имя -«ОсновныеНачисления».

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

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

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

 

 

 

 

Перейдем на закладку «Прочее» и зададим предопределенные виды расчета. Как и в случае с бухгалтерией, расчеты в нашем OOO «На все

 

 

руки мастер» будут «скромные», поэтому мы создадим всего три элемента:

• Невыход - с именем и наименованием «Невыход» и кодом

«Невыход»,

• Оклад - с именем, кодом и наименованием «Оклад» и

вытесняющим его видом расчета «Невыход»,

• Премия - с именем, кодом и наименованием «Премия», с

базовым видом расчета «Оклад» и ведущими видами расчета

«Невыход» и «Оклад».

 

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

 

Объект конфигурации Регистр расчета

О

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

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

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

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

Периодичность регистра расчета может быть определена одним из следующих значений:

• День,

• Месяц,

• Квартал,

• Год.

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

 

«ПериодРегистрации» типа Дата. При записи данных в регистр платформа всегда приводит значение этого реквизита к началу того периода, в который он попадает.

Например, если в регистр расчета с периодичностью месяц записать данные, где «ПериодРегистрации» задан как 08.04.2004, то регистр сохранит эти данные со значением поля «ПериодРегистрации» 01.04.2004:

Документ

 

Если в этой же ситуации периодичность регистра будет год, сохраненное значение периода регистрации будет 01.01.2004:

 

 

 

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

Запись расчета Невыход вытесняет запись расчета Оклад по периоду действия

Период действия 31 день

 

После добавления в регистр записи вида расчета «Невыход», который вытесняет вид расчета «Оклад» по периоду действия, записи о начислении по окладу примут следующий вид:

 

Таблица фактического периода действия

 

Другим механизмом, который поддерживает регистр расчета, является зависимость записей по базовому периоду. Этот механизм позволяет основывать расчет зависимых (вторичных) записей регистра на данных, полученных в результате расчета первичных записей. Регистр расчета может поддерживать два вида зависимости от базы: зависимость по периоду действия и зависимость по периоду регистрации.

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

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

 

Таблица регистра расчета

 

Таблица фактического периода действия

 

 

 

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

Таблица регистра расчета

 

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

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

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

Таблица регистра расчета (периодичность регистра - «Месяц»)

 

 

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

Поля «Начало базового периода» и «Конец базового периода» имеют смысл только для записей тех видов расчета, для которых определена зависимость по базовому периоду (в нашем случае для записи расчета премии).

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

 

 

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

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

 

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

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

"" Узнай больше!

О структуре объектов встроенного языка, предназначенных для

работы с регистром расчета, можно прочитать в главе «Регистры

расчета» на странице 606.    Щ

 

Создание регистра расчета Начисления

П

режде, чем мы начнем создавать объект конфигурации Регистр расчета «Начисления», нам потребуется создать два дополнительных объекта конфигурации - регистр сведений «ГрафикиРаботы» и справочник «ВидыГрафиковРаботы». Справочник понадобится нам для того, чтобы хранить информацию о том, какие графики работы существуют в OOO «На все руки мастер», а регистр сведений - для указания того, какие дни в месяце являются рабочими, поскольку сумма оплаты по окладу будет рассчитываться исходя из того, сколько дней отработал сотрудник в расчетном месяце. Откроем конфигуратор и создадим новый объект конфигурации Справочник с именем «ВидыГрафиковРаботы».

В этом справочнике у нас будет два предопределенных графика работы - «ГрафикАдминистрации» и «ГрафикМастеров».

 

После этого создадим объект конфигурации Регистр сведений с именем «ГрафикиРаботы». Этот регистр будет иметь два измерения:

•    «ГрафикРаботы»,    тип

СправочникСсылка.ВидыГрафиковРаботы,

•    «Дата», тип Дата.

Затем создадим единственный ресурс регистра - «Значение», с типом Число, длиной 1.

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

 

копированием (Действия | Скопировать). Не забудьте, что 8 марта выходной день, и у вас должно получиться 22 рабочих дня в марте.

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

 

 

Теперь все готово для создания регистра расчета.

Создадим новый объект конфигурации Регистр расчета с именем «Начисления». В качестве плана видов расчета, используемого регистром, выберем план видов расчетов «ОсновныеНачисления». Установим, что регистр будет использовать период действия, график будет задаваться в регистре сведений «ГрафикиРаботы», значение графика будет находиться в ресурсе «Значение», а дата графика - в измерении «Дата».

 

 

Затем перейдем на закладку «Данные» и создадим:

•    измерение «Сотрудник»,

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

• ресурс «Результат», тип Число, длина 15, точность 2,

• реквизит «ГрафикРаботы»,

тип СправочникСсылка.ВидыГрафиковРаботы, связь с графиком по измерению «ГрафикРаботы»,

•    реквизит «ИсходныеДанные», тип Число, длина 15, точность

2.

Реквизит «ГрафикРаботы» мы будем использовать для того, чтобы связать запись регистра с используемым графиком работы, а реквизит «ИсходныеДанные» - чтобы хранить в нем данные, которые могут понадобиться при расчете или перерасчете (в нашем примере это будет расчет оклада).

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

На этом создание объекта конфигурации Регистр расчета «Начисления» завершено.

 

Что нового мы узнали

- что такое сложные периодические расчеты

- что такое вид расчета, база

- какая разница между базовым периодом, фактическим

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

расчета

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

ведущими видами расчетов - как создать план видов расчета - что такое объект конфигурации Регистр расчета - каковы отличительные особенности регистра расчета - что такое график времени - что такое перерасчет

- по какому принципу формируются записи перерасчета - как создать регистр расчета.

 

Глава 10. Использование регистра расчета

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

Кроме этого мы создадим отчет, показывающий начисления сотрудникам OOO «На все руки мастер» и сделаем так, чтобы данные расчетов можно было поддерживались в актуальном состоянии.

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

 

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

Д

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

Откроем конфигуратор и создадим новый документ. Назовем его «НачисленияСотрудникам».

Этот документ будет иметь табличную часть «Начисления», содержащую следующие реквизиты:

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

• «ГрафикРаботы»,

типСправочникСсылка.ВидыГрафиковРаботы,

• «ДатаНачала», тип Дата,

• «ДатаОкончания», тип Дата,

• «ВидРасчета»,

тип ПланВидовРасчетаСсылка.ОсновныеНачисления,

•    «Результат», Число, длина 15, точность 2.

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

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

 

В окне конструктора выберем табличную часть «Начисления»

нажмем    «ЗаполнитьВыражения».    Для    реквизитов

«ПериодДействияКонец» и «БазовыйПериодКонец» укажем

выражение    «КонецДня(ТекСтрокаНачисления.ДатаОкончания)»

Реквизиту «ИсходныеДанные» поставим в соответствие реквизит табличной части «Результат», а для реквизита «Результат» наоборот удалим выражение, присвоенное ему конструктором:

 

Нажмем «ОК» и посмотрим текст обработчика, созданный конструктором:

 

Движение.Сторно = Ложь; Движение.ПериодРегистрации = Дата; Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета; Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала; Движение.ПериодДействияКонец =

КонецДня(ТекСтрокаНачисления.ДатаОкончания); Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала; Движение.БазовыйПериодКонец =

КонеиДня(ТекСтрокаНачисления.ДатаОкончания); Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник; Движение.ГрафикРаботы = ТекСтрокаНачисления.ГрафикРаботы; Движение.йсходныеДанные = ТекСтрокаНачисления.Результат; КонецЦтота;

// записываем движения регистров Движения.Начисления.Записать(); //} }_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры

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

Начислим оклад за март всем сотрудникам OOO «На все руки мастер», как показано на рисунке:

 

 

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

// регистр Начисления

Движение = Движения.Начисления.Добавить();

 

Проведем документ и посмотрим, какие движения он сформировал в регистре «Начисления»:

 

Иллюстрация механизмов вытеснения и зависимости от базы

 

 

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

 

 

 

Обратите внимание на то, что платформа привела период регистрации каждой записи к началу периода регистра расчета (в обработчике проведения мы указывали значение даты документа -08.04.2004). Кроме этого заметьте, что с каждой записью мы сохранили в реквизите «ИсходныеДанные» размер оклада сотрудника, введенный в документе, чтобы в дальнейшем рассчитать сумму оплаты по окладу.

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

На закладке «Отчет» сбросим флаг «Использовать построитель отчета» и нажмем «OK» - наш отчет готов.

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

Создадим новый документ Начисление сотрудникам No2, в котором начислим премию за март Гусакову и Деловому:

 

Этим документом мы зафиксируем тот факт, что сотрудникам Гусакову и Деловому нужно начислить премию по итогам работы за март. Поскольку размер премии нам неизвестен (он будет рассчитываться по некоторому алгоритму), поля «Результат» мц оставляем пустыми. Нажмем «ОК».

Теперь снова откроем документ Начисление Сотрудникам Noi и изменим оклад Гусакова с 10 000 на 7 000. Нажмем «ОК» Сформируем отчет «Перерасчет»:

 

 

Использование регистра расчета

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

Теперь посмотрим, как работает механизм вытеснения по периоду действия. Для этого нам понадобится создать третий документ НачисленияСотрудникам No3:

 

 

 

 

Как видите, отчет теперь содержит какие-то данные. В самом деле, вид расчета «Премия» зависит у нас по базовому периоду от вида расчета «Оклад». Как только мы изменили существовавшие в регистре записи по виду расчета «Оклад» - платформа сразу же сформировала набор записей перерасчета, которые должны быть рассчитаны заново, т.к. изменилась их база.

Вы можете спросить: «почему в перерасчет попали записи как про Делового, так и про Гусакова, хотя оклад мы меняли только Гусакову»? Дело в том, что платформа не отслеживает конкретные изменения, которые пользователь внес в записи документа. Она отслеживает лишь факт изменения набора записей регистра расчета в результате проведения (перепроведения) документа. Поэтому в набор записей перерасчета она включает информацию о ВСЕХ записях регистра, значение ресурсов которых МОЖЕТ измениться в результате перепроведения документа, создавшего базовые записи регистра.

Перепроведем документ Начисления сотрудникам No2 (которым мЫ начисляли премию) и сформируем отчет «Перерасчет». Он снова не содержит никаких данных - система отметила тот факт, что M& «пересчитали» зависимые записи и очистила таблицу перерасчета.

Этим документом мы зафиксируем тот факт, что Гусаков не выходил на работу с 1 по 10 марта. Очевидно, что в этом случае потребуется пересчитать его оплату по окладу и, как следствие, начисленную премию.

Нажмем «ОК» и сформируем отчет «Перерасчет»:

 

Как вы видите, в перерасчет попала запись о начислении оклада Усакову. Это явилось результатом работы механизма вытеснения по

 

периоду действия, ведь вид расчета «Невыход» вытесняет у нас вил расчета «Оклад».

Обратите внимание, что в перерасчет попала и запись о начислении премии Гусакову. Если вы помните, при создании предопределенных видов расчета мы указали, что результат вида расчета премия будет зависеть от изменения результата вида расчета «Невыход». Эта зависимость косвенная, но поскольку явно указали такую зависимость платформа ее отследила.

Перепроведем документы Начисление сотрудникам No1 и No2 и убедимся, что таблица перерасчета очистилась.

 

Создание процедуры расчета записей регистра Начисления

Д

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

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

Откроем в конфигураторе текст обработчика проведения документа «НачислениеСотрудникам» и добавим в него вызов процедуры из общего модуля:

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

// регистр Начисления

Движение = Движения.Начисления.Добавить();

Движение.Сторно = Ложь;

Движение.ПериодРегистрации = Дата;

Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;

Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;

Движение.ПериодДействияКонец =

КонецДня(ТекСтрокаНачисления.ДатаОкончания);

Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;

Движение.БазовыйПериодКонец =

КонецДня(ТекСтрокаНачисления.ДатаОкончания);

Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник;

Движение.ГрафикРаботы = ТекетрокаНачисления.ГрафикРаботы;

Движение.ИсходныеДанные = ТекСтрокаНачисления.Результат; КонецЦикла;

// записываем движения регистров Движения.Начисления.Записать();

//получим список всех сотрудников, содержащихся в документе

Запрос = Новый Запрос(

"ВЫБРАТЬ РАЗЛИЧНЫЕ

__ I НачисленияСотрудникамНачисления.Сотрудник   

 

 

|ИЗ

| Документ.НачисленияСотрудникам.Начисления

| КАК НачисленияСотрудникамНачисления

|

|ГДЕ

| НачисленияСотрудникамНачисления.Ссылка = &ТекущийДокумент");

Запрос.УстановитьПараметр("ТекущийДокумент",Ссылка);

//сформируем список сотрудников ТаблЗнач = Запрос.ВыполнитьО.Выгрузить();

МассивСотрудников = ТаблЗнач.ВыгрузитьКолонкуО'Сотрудник"); СписокСотрудииков = Новый СписокЗначений; СписокСотрудников.ЗагрузитьЗначения(МассивСотрудников);

РасчитатьНачисления(Двюкения.Начисления,

ПлапыВидовРасчета.ОсновныеНачисления.Оклад,

СписокСотрудников); Движения.Начисления.Записать(,Истнна);

РасчитатьНачиеления(Движении.Начисления,

ПланыВидовРасчета.ОсновныеНачисления.Премия,

СписокСотрудииков); Движения.НачисленияЛаписать(,Истина);

//} }_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры

Теперь создадим в ветке «Общие» новый общий модуль «ПроведениеРасчетов». Добавим в него заготовку процедуры «РасчитатьНачисления»:

ПроцедураРасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета,

СписокСотрудников) Экспорт //Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда

//Рассчитать вторичные записи иначеЕсли ТребуемыйВидРасчета =

ПланыВидовРасчета.ОсновныеНачисления.Премия тогда КонецЕсяи; КонецПроцедуры

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

При расчете первичных записей нам понадобятся данные графика

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

по    виртуальной    таблице    регистра    расчета

«РегистрРасчета.Начисления.ДанныеГрафика»:

 

 

 

Обратите внимание, что при проведении документа мы сначала записываем движения, сформированные документом, в регистр, а затем передаем этот набор записей регистра в процедуру расчета. Сначала для расчета первичных записей («Оклад»), а затем для расчета вторичных («Премия»). Процедура расчета, на основе описанных в ней алгоритмов и данных, содержащихся в записях регистра, должна сформировать значения ресурсов регистра. После того, как ресурсы будут рассчитаны, мы перезаписываем набор записей регистра без формирования записей перерасчета (второй параметр в методе Записать() - Истина.

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

 

ПроцедураРасчитатьНачисления(НаборЗаписейРегистра,ТребуемыйВидРасчета,

СписокСотрудников) Экспорт /Рассчитать первичные записи Если ТребуемыйВидРасчета e ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда

Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ

|НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма, |НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия

|КАК Факт,

|НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки |ИЗ

|РегистрРасчета.Начисления.ДанныеГрафика(

|Регистратор = &Регистратор И |ВидРасчета = &ВидРасчета И |Сотрудник В (&СписокСотрудников)) |КАК НачисленияДанныеГрафика";

Запрос.УстановитьПараметр("Регистратор",

    НаборЗаписейРегистра.Отбор.Регистратор.Значеяие);

 

Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета);    ~^^

3anpoc.ycTaHOBHTbnapaMeTp("CnMcoKCoTpyflHHKOB",CnncoKCoTpyflHHKOB)-

ВыборкаРезультата = Залрос.Выполнить().Выбрать();

/Л>ассчитать вторичные записи иначеЕсли ТребуемыйВидРасчета =

ПланыВидовРасчета.ОсновныеНачисления.Премиятогда КонецЕсли; КонецПроцедуры

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

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

Процедура РасчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета,

СписокСотрудников) экспорт /Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,

| НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия

| КАКФакт,

| НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки

|ИЗ

| РегистрРасчета.Начисления.ДанныеГрафика(

|    Регистратор = &Регистратор И

|    ВидРасчета = &ВидРасчета И

|    Сотрудник В (&СписокСотрудников))

| КАКНачисленияДанныеГрафика";

Запрос.УстановитьПараметр("Регистратор",

НаборЗаписейРегистра.Отбор.Регистратор.Значение);

Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета); ЗапросУстановитьПараметр("СписокСотрудников", СписокСотрудников);

 

ВыборкаРезультата = Запрос.Выполнить().Выбрагь();

Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл СтруктураНомер = Новый СтруктураС'НомерСтроки"); СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки; ВыборкаРезультата.Сбросить();

Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) тогда Если ВыборкаРезультата.Норма = 0 тогда

Сообщить("Вид расчета: Оклад — Нет рабочих дней в заданном периоде",); ЗаписьРегистра.Результат = 0; Иначе

/Л*ассчитать оклад по фактическому периоду и исходным данным ЗаписьРегистра.Результат = (ЗаписьРегистра.ИсходныеДанные / ВыборкаРезультата.Норма) * ВыборкаРезультата.Факт; Сообщить("Выполнен расчет "+ЗаписьРегистра.Регистратор+" - "+

ЗаписьРегистра.ВидРасчета+" - "+ЗаписьРегнстра.Сотрудник,); КонецЕсли; КонецЕсли; КонецЦикла;

//Рассчитать вторичные записи иначеЕсли ТребуемыйВидРасчета =

ПланыВидовРасчета.ОсновныеНачисления.Премиятогда КонецЕсли; КонецПроцедуры

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

Теперь добавим текст запроса во вторую ветку условия Если... с

той лишь разницей, что теперь мы будем получать значения базы,

используя    виртуальную    таблицу    регистра расчета

«РегистрРасчета.Начисления.БазаНачисления»:

ПроцедураРасчитатьНачисления(НаборЗаписейРегистра^ребуемыйВидРасчета,

СписокСотрудников) Экспорт //Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда

// Рассчитать вторичные записи

иначеЕсли ТребуемыйВвдРасчета =

ПланыВидовРасчета.ОсновныеНачисления.Премиятогд

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

I НачиеленияБазаНачислення.РезультатБаза КАК База,

I НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки

1ИЗ

I    РегистрРасчета.Начиеления.БазаНачисления(

I    &ИзмереяияОсновного,

I    &ИзмеренияБазового,,

I    Регистратор = &Регистратор И

I    ВидРасчета = &ВидРасчета И

I    Сотрудник В (&СписокСотрудников))

I    КАК НачисленияБазаНачисления";

Измер = Новый Maccив(1); Измер[0] = "Сотрудник";

Запрос.УстановитьПараметр("ИзмеренияОсновного",Измер); Запрос.УстановитьПараметрС'ИзмеренияБазового", Измер); Запрос.УстановитьПараметр("Регистратор",Регистратор); Запрос.УстановитьПараметр("ВидРасчета",Тре6уемыйВидРасчета); Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);

ВыборкаРезультата = Запрос.Выполнить().Выбрать();

КонецЕсли;

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

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

В заключение осталось добавить во второе условие Если ... обход набора записей регистра расчета и вычисление результата вторичных записей:

 

/Л'ассчитать вторичные записи иначеЕсли ТребуемыйВидРасчета =

ПланыВидовРасчета.ОсновныеНачисления.Премия тогда

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| НачисленияБазаНачисления.РезультатБаза КАК База,

| НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки

|ИЗ

| РегистрРасчета.Начисления.БазаНачисления(

|    &ИзмеренияОсновного,

|    &ИзмереиияБазового,,

|    Регистратор = &Регистратор И

|    ВидРасчета = &ВидРасчета И

|    Сотрудник В (&СписокСотрудников))

| КАКНачисленияБазаНачисления";

Измер = Новый Массив(1); Измер[0] = "Сотрудник":

Запрос.УстановитьПараметр("ИзмеренияОсновного",Измер); Запрос.УстановитьПараметрС'ИзмеренияБазового", Измер); Запрос.УстановитьПараметр("Регистратор",Регистратор); Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета); Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);

ВыборкаРезультата = ЗапросВыпоянить()-Выбрать();

Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл СтруктураНомер = Новый СтруктураС'НомерСтроки"); СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки; ВыборкаРезультата.Сбросить();

Если ВыборкаРезультата.НайтнСледующийССтруктураНомер) тогда ЗаписьРегистра.Результат = ВыборкаРезультата.База * (10/100); Сообщить("Выполнен расчет "+ЗаписьРегистра.Регистратор+" - "+

ЗаписьРегистра.ВвдРасчета+" - "+ЗаписьРегистра.Сотрудник,); КоиецБсли; КонецЦикла;

КонецЕсли; КонедПроцедуры

 

 

 

ПроцедураРасчитатьНачисления{НаборЗаписейРегистра, ТребуемыйВидРасчета,

СписокСотрудников) Экспорт

/Л>ассчитать первичные записи

Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогд»

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

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

Отменим проведение документа Начисление сотрудникам Noз и перепроведем документы Начисление сотрудникам No1 и No2. Регистр расчета Начисления должен выглядеть следующим образом:

 

Гусакову и Деловому начислена премия в размере 10% от суммы начисления по окладу.

Проведем документ Начисление сотрудникам No3, а затем No1 иNo2. Состояние регистра изменится следующим образом:

 

J

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

 

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

Т

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

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

 

 

Запустим конструктор выходной формы. Выберем следующие поля таблицы регистра расчета «Начисления»:

На закладке «Объединения/Псевдонимы» определим следующие псевдонимы выбранных полей:

На закладке «Порядок» отметим автоупорядочивание. На закладке «Итоги» зададим получение общих итогов и промежуточных итогов по сотруднику:

 

В заключение на закладке «Отчет» сбросим флаг «Использовать построитель отчета». Нажмем «ОК» и запустим 1С:Предприятие в режиме отладки.

В результате работы отчета мы получим следующую таблицу:

 

Выполнение перерасчета записей регистра расчета

И

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

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

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

 

 

 

В обработчик события нажатия кнопки вставим текст вызова процедуры перерасчета:

ПроцедураДействияФормыПерерасчитать(Кнопка)

ПерерасчитатьНачисления(ПланыВидовРасчета.ОсновныеНачисления.Оклад);

ПерерасчитатьНачисления01лаиыВидовРасчета.ОсновныеНачисления.Премия); КонецПроцедуры

Саму процедуру перерасчета разместим в общем модуле «ПроведениеРасчетов»:

Процедура ПерерасчитатьНачисления(ТребуемыйВидРасчета) экспорт «здесь следует выбрать из набора записей перерасчета " записи в следующей последовательности:

//записи документа1 для сотрудников из списка,

//записи документа2 для сотрудников из списка,

//и т.д.

Запрос = новый Запрос(

"ВЫБРАТЬ

| НачисленияПерерасчет.ОбъектПерерасчета,

| НачисленияПерерасчет.Сотрудник

|ИЗ

| РегистрРасчета.Начисления.Перерасчет

| КАК НачисленияПерерасчет

|

|ГДЕ

| НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета

|

|ИТОГИ ПО

I НачисленияПерерасчет.ОбъектПерерасчета");

Запрос.УстановитьПараметрСТребуемыйВидРасчета'.ТребуемыйВидРасчета);

СписокСотрудников = Новый СписокЗначений;

//перебрать группировку по регистратору ВыборкаПоРегистратору = Запрос.Выполнить()

.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоРегистратору.Следующий() цикл Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;

//перебрать группировку по сотрудникам

//для выбранного регистратора

//и создать список сотрудников

ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();

СписокСотрудников.Очистить();

Пока ВыборкаПоСотрудникам.Следующий() цикл

СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник); КонецЦикла;

//получить набор записей регистра расчета

//для выбранного регистратора

НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;

НаборЗаписей.Прочитать();

РасчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников); НаборЗаписей.Записать(, Истина);

//очистить перерасчитанные записи в перерасчете НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты

.Перерасчет.СоздатьНаборЗаписей();

НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор; НаборЗаписейПерерасчета.Записать(); КонецЦикла; КонецПроцедуры.

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

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

Отменим проведение всех документов «Начисления сотрудникам» и проведем документ Начисления сотрудникам No1 и затем No2. Сформируем отчет «Начисления сотрудникам» (здесь и далее колонки отчета с 4 по 6 скрыты, в целях экономии места):

 

Теперь откроем документ Начисления сотрудникам No1, изменим оклад Гусакова на 10 000 и проведем документ. В отчете

«НачисленияСотрудникам» нажмем кнопку «Перерасчитать». Будет выполнен перерасчет начисления премии Гусакову и Деловому:

А данные отчета будут содержать актуальные значения начисления оклада и премии:

 

 

 

Результат работы отчета будет содержать новые значения премии Гусакова:

 

И, наконец, проведем документ Начисления сотрудникам No3 и нажмем «Перерасчет» в отчете «НачисленияСотрудникам». Снова будет произведен перерасчет оклада и премии Гусакова:

 

Графическое представление начислений

В

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

Диаграмма Ганта

Д

иаграмма Ганта представляет собой диаграмму интервалов на шкале времени и отражает использование объектами (точками) ресурсов (серий). Чтобы проще было представить себе составные части диаграммы Ганта, изучим диаграмму, которая должна получиться в результате работы создаваемого нами отчета.

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

 

 

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

Значение диаграммы Ганта представляет собой специальный объект, который формируется системой автоматически на основании того, какие точки и какие серии определены для данной диаграммы. Этот объект является совокупностью (коллекцией) интервалов, т.е. может содержать не один, а несколько интервалов, которые соответствуют паре серия-точка (создаваемый по умолчанию объект ЗначениеДиаграммыГанта не содержит ни одного интервала). Разработчик может получить значение диаграммы, указав

интересующую его точку и серию, и затем добавить в коллекцию необходимое количество интервалов.

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

Теперь объясним коротко последовательность наших дальнейших действий. В качестве исходных данных для построения такой диаграммы мы возьмем данные регистра расчета «Начисления» Каждая запись этого регистра уже содержит все необходимое для построения диаграммы: сотрудника, вид расчета, начало и конец интервала. Нам останется только средствами встроенного языка разместить все это в диаграмме. Итак, приступим.

Создание отчета ДиаграммаНачислений

С

оздадим новый объект конфигурации Отчет и назовем его «ДиаграммаНачислений». Создадим основную форму отчета и разместим на ней элемент управления диаграмма Ганта с именем «ДиаграммаГанта»:

 

Использование регистра расчета

Запрос = Новый Запрос; Запрос.Текст =

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

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

• «НачисленияФактическийПериодДействия.Сотрудник»,

• «НачисленияФактическийПериодДействия.ВидРасчета»,

• «НачисленияФактическийПериодДействия.ПериодДействияН

ачало»,

• «НачисленияФактическийПериодДействия.ПериодДействияК

онец»,

• «НачисленияФактическийПериодДействия.Результат»,

• «НачисленияФактическийПериодДействия.Регистратор»,

• «НачисленияФактическийПериодДействия.Регистратор.Предс

тавление»:

 

 

Откроем модуль формы отчета и в обработчик события «Нажатие» кнопки сформировать вставим заготовку запроса:

ПроцедураКнопкаСформироватьНажатие(Элемент)

 

 

Все, запрос готов. Теперь нажмем «ОК» и добавим в процедуру следующий текст:

ПроцедураКнопкаСформироватьНажатие(Элемент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ

| НачисленияФактическийПериодДействия.Сотрудник, | НачисленияФактическийПериодЦействия.ВидРасчета, | НачисленияФактическийПериодДействия.ПериодДействияНачало, | НачисленияФактическийПериодЦействия.ПериодДействияКонец, | НачисленияФактическийПериодДействия.Результат, | НачисленияФактическийПериодЦействия.Регистратор, | НачисленияФактическийПериодДействия.Регистратор.Представление

 

|ИЗ

| РегистрРасчета.Начисления.ФактическийПериодДействия

| КАК НачисленияФактическийПериодДействия";

ВыборкаРезультата = Запрос.Выполнить().Выбрать(); Диаграмма = ЭлементыФормы.ДиаграммаГанта:

// Запретить обновление диаграммы Диаграмма.Обновление = Ложь;

Диаграмма.Очистить(); Диаграмма.ОтображатьЗаголовок = Ложь;

//заполнить диаграмму Пока ВыборкаРезультата.Следуюший() цикл //получить серию, точку н значение для них

ТекущаяСерия=Диаграмма.УстановитьСерию(ВыборкаРезультата.ВидРасчета,

ВыборкаРезультата.ВидРасчета); ТекущаяТочка = Диаграмма

.УстановитьТочкуСВыборкаРезультата.Сотрудник, ВыборкаРезультага.Сотрудник);

ТекущееЗначение = Диаграмма.ПолучитьЗначение(ТекущаяТочка,

ТекущаяСерия);

//создать нужные нам интервалы в значении ТекущийИнтервал = ТекущееЗначеиие.Добавить();

ТекущийИнтервал.Начало = ВыборкаРезультата.ПериодДействияНачало; ТекущийИнтервал.Конец = ВыборкаРезультата.ПериодДействияКонец; ТекущийИнтервалЛ*екст = ВыборкаРезультата.РегистраторПредставление; ТекущийИнтервал.Расшифровка = ВыборкаРезультата.Регистратор; КонецЦикла;

//раскрасить серии своими цветами Для Каждого Серия из Диаграмма.Серии цикл

Если Серия.Значение = ПланыВидовРасчета.ОсновиыеНачисления.Оклад тогда Серия.Цвет = WEBЦвета.Желтый;

иначеЕсли Серия.Значение =

ПланыВидовРасчета.ОсновныеНачисления.Премиятогда

Серия.Цвет = WEBЦвета.Зеленый;

иначеЕсли Серия.Значение =

ПланыВидовРасчета.ОсновныеНачисления.Невыходтогда

Серия.Цвет = WEBЦвета.Красный; КонецЕсли; КонецЦикла;

//разрешить обновление диаграммы Диаграмма.Обновление = Истина;

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

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

Затем в цикле по выборке запроса мы заполняем диаграмму. Сначала, используя методы УстановитьСерию() и УстановитьТочку() мы получаем либо существующие, либо новые точку и серию. Точки и серии однозначно идентифицируются своими значениями, в качестве которых мы используем сотрудника и вид расчета из результата запроса.

После того, как точка и серия получены, с помощью метода ПолучитьЗначение() мы получаем соответствующее им значение диаграммы.

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

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

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

 

А теперь посмотрим, как выглядит механизм вытеснения По периоду действия «в действии». Откроем документ Начисления сотрудникам No3 и вместо одного прогула с 1 по 10 число зададим Гусакову два прогула: с 3 по 7 число и с 12 по 15 число.

Проведем документ и снова нажмем «Сформировать» в отчете:

 

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

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

 

Что нового мы узнали

- как создать движения документа по регистру расчета

- как запросом получить записи перерасчета - как работает перерасчет - как рассчитать записи регистра расчета

- как запросом получить данные графика и базы - как выполнить перерасчет отдельных записей регистра расчета

- как получить запросом записи регистра расчета - как получить запросом фактический период действия записей регистра расчета

- для чего используется диаграмма Ганта - как устроена диаграмма Ганта

- как заполнить диаграмму Ганта данными

 

Глава 11. Подсистема

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

 

Зачем нужны подсистемы?

В

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

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

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

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

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

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

 

Создание подсистем

Н

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

Поэтому мы создадим в нашей конфигурации три новых объекта конфигурации Подсистема, которые будут иметь имена: «Бухгалтерия», «РасчетЗарплаты» и «УчетУслугИМатериалов».

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

 

 

 

Будет удобно задать эти соответствия, воспользовавшись следующей возможностью конфигуратора: установите курсор в корень дерева конфигурации («Конфигурация») и из контекстного меню правой кнопки мыши выберите пункт «Дополнительно». В появившемся окне перейдите на закладку «Подсистемы».

 

 

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

 

Что нового мы узнали

 

 

 

 

 

Зададим принадлежность объектов конфигурации к подсистемам

 

- для чего используется объект конфигурации Подсистема - как описать логическую структуру конфигурации при помощи объектов Подсистема

 

 

Глава 12. Интерфейс, роль, список пользователей

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

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

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

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

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

 

Объект конфигурации Роль

Д

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

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

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

• если хотя бы в одной роли есть разрешение, то доступ будет

открыт,

• если во всех ролях разрешение отсутствует, то доступ будет

закрыт.

Создание ролей

П

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

 

 

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

 

 

создано ни одного объекта. Для таких видов объектов конфигурации останутся установлены полные права.

Теперь нам останется лишь пройти по видам объектов конфигурации и установить для них права «Чтение», «Просмотр» и «Использование». Вторая роль нашей конфигурации готова.

Следующая роль, которую мы создадим, будет роль «Мастер». Снова создадим новый объект конфигурации Роль с именем «Мастер» и снимем все права в окне редактирования прав. После этого, Выполним команду Действия | Установить по подсистемам и выберем подсистему «УчетМатериаловИУслуг». В результате будут установлены все права на объекты конфигурации, относящиеся к данной подсистеме.

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

Следующей ролью, которую мы создадим, будет роль «ТолькоПросмотр». Создадим новый объект конфигурации Роль с именем «ТолькоПросмотр» и в открывшемся окне редактирования прав выполним команду Действия | Снять все права. В результате этого, все права на доступ ко всем объектам будут сняты, за исключением тех видов объектов конфигурации, для которых не

 

Если теперь установить фильтр объектов по подсистем «УчетМатериаловИУслуг», то можно, при необходимости, внести уточнения в установленные права:

Установим фильтр по подсистеме...

 

В заключение нам с вами осталось создать две роли: «Бухгалтер» и «Расчетчик». Мы разделим права по расчету зарплаты и по ведению бухгалтерского учета. Дело в том, что в OOO «На все руки мастер» есть бухгалтер и помощник бухгалтера. Помощник бухгалтера занят, в основном, расчетом зарплаты, но иногда это делает и главный бухгалтер. Поэтому ему необходимо будет назначить обе роли, в то время как помощнику - только роль «Расчетчик».

Создадим новый объект конфигурации Роль с именем «Расчетчик». В окне редактирования прав снимем все права и затем установим их по подсистеме «РасчетЗарплаты» (и не забудем запретить интерактивное

удаление).

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

Список прав для каждой роли можно получить, выполнив в окне редактирования прав команду Действия | Вывести список.

Теперь мы можем перейти к созданию интерфейсов.

 

В частности, для справочника «Сотрудники» мы запретим добавление, изменение и удаление. Обратите внимание, что при запрете права «Добавление» исчезла отметка и у права «Интерактивное добавление», т.к. оно является «уточнением» права «Добавление». Точно также «уточненные» права запрещаются и при отмене прав на изменение и удаление.

Кроме этого мы снова снимем разрешения на интерактивное удаление для всех объектов базы данных.

 

Создадим новый объект конфигурации Интерфейс, и на экране появится конструктор главного меню:

Объект конфигурации Интерфейс

П

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

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

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

Создание интерфейсов

Д

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

Скорее всего, это будут руководители, мастера и бухгалтеры. В соответствии с этим мы создадим три различных интерфейса: «Руководитель», «Мастер» и «Бухгалтер». Кроме этого, следует не забыть про то, что у каждой базы данных, как правило, есть администратор - специально выделенный человек, отвечающий за непрерывное функционирование базы, сохранность и достоверность данных. Поскольку администратору нужно предоставить возможность осуществлять обслуживание базы данных - для него мы тоже создадим отдельный интерфейс - «Администратор».

 

 

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

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

Мы так и поступим. Первый интерфейс, который мы будем создавать, будет интерфейс «Бухгалтер». Поэтому выберем подсистемы «Бухгалтерия» и «РасчетЗарплаты» и нажмем «Установить». В конструкторе меню обновится список команд и используемых подменю. Нажмем «Построить» и зададим имя интерфейса - «Бухгалтер». Укажем, что этот интерфейс будет относиться к подсистемам «Бухгалтерия» и «РасчетЗарплаты».

Вместе с палитрой свойств на экране открылось окно редактст-интерфейса - остановимся на нем подробнее:

В данном случае нас все устраивает, за исключением пункта «Прочие», в котором для команды «Основной» мы дадим более понягный текст - «План счетов Основной»:

 

Изменим текст пункта подменю

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

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

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

Два последних интерфейса, будем создавать следующим образом: меню интерфейса «Руководитель» построим по всем трем подсистемам конфигурации:

 

 

А при создании меню интерфейса «Администратор» мы не будем выбирать никаких подсистем, а сразу построим меню. Обратите внимание, что в этом случае система включила в меню пункты стандартных действий: «Файл», «Операции», «Сервис», «Окна» и

 

«Справка». Скорее всего, они понадобятся будущему администратору информационной базы.

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

 

Администрирование работы пользователей

Д

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

В этом режиме администратор базы имеет возможность создавать и удалять пользователей системы, назначать им интерфейсы и роли и

т.д.

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

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

Администрирование | Пользователи.    Откроется    список

пользователей системы.

Пока что он пуст, поэтому добавим нового пользователя (Действия | Добавить):

 

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

 

Полное имя - строка, которая может быть использована внутри конфигурации при выводе различной справочной информации Хорошим стилем администрирования считается указание в качестве полного имени - фамилии, имени и отчества пользователя (без сокращений).

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

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

Аутентификация Windows подразумевает, что при запуске системы 1С:Предприятие от пользователя не требуется никакой дополнительной информации. Система 1С:Предприятие определяет под каким пользователем запущена операционная система Windows (имеет смысл использовать для NT-подобных операционных систем: NT, 2000, XP), и затем обращается к своему списку пользователей. Если она находит в нем пользователя, которому поставлен в соответствие текущий пользователь Windows, система открывается с правами и интерфейсом, которые указаны для этого пользователя.

Зададим имя пользователя «Администратор», полное имя тоже «Администратор». Перейдем на закладку «Прочие».

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

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

 

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

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

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

 

Что нового мы узнали

- для чего предназначен объект конфигурации Роль - как создать роль, используя подсистемы конфигурации - для чего предназначен объект конфигурации Интерфейс - как создать интерфейс, используя подсистемы

конфигурации - как создать список пользователей системы и определить

их права

- чем аутентификация средствами 1С:Предприятия отличается от аутентификации Windows

 



  Copyright © 2007 Udex.Ru

Hosted by uCoz