1С:ПРЕДПРИЯТИЕ - Основы построения объектов компоненты ╚Расчет╩
ЯНГДЮМХЕ ДНЙСЛЕМРНБ НМКЮИМ
дНЙСЛЕМРШ Х АКЮМЙХ НМКЮИМ

нАЯКЕДНБЮРЭ

1С:ПРЕДПРИЯТИЕ - Основы построения объектов компоненты ╚Расчет╩

экономика



Отправить его в другом документе 1С:ПРЕДПРИЯТИЕ - Основы построения объектов компоненты ╚Расчет╩ Hits:



ДРУГИЕ ДОКУМЕНТЫ

Технико-экономическое обоснование проектируемой КПУ
ЦЕЛИ, ЗАДАЧИ И СОДЕРЖАНИЕ АНАЛИЗА ФОРМЫ № 4
ПОНЯТИЕ, СОДЕРЖАНИЕ И ФОРМИРОВАНИЕ ПРИБЫЛИ ПО Ф№2
АНАЛИЗ ФОРМ И СИСТЕМ ОПЛАТЫ ТРУДА НА ПРЕДПРИЯТИИ
Функции денег
Роберт Кийосаки: Где мои деньги?
Психофизиологический аспект трудовой деятельности человека
Возникновение кредитных отношений
Посреднические операции, консультационные и иные неоперационные услуги коммерческих банков
 

1С:ПРЕДПРИЯТИЕ - Основы построения объектов 444b17de компоненты ╚Расчет╩

Виды метаданных, используемые компонентой ╚Расчёт╩

Журналы расчетов 444b17de предназначены для хранения записей сложных периодических расчетов 444b17de и их предыстории.

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

Виды расчетов 444b17de - предназначены для написания алгоритмов расчетов 444b17de в системе и определения приоритетов 444b17de расчета и вытеснения для записи расчета.

Группы расчетов 444b17de - предназначены для объединения видов расчетов 444b17de , по каким - либо признакам для облегчения дальнейшей работы с ними.

11.1. Журналы расчетов 444b17de

Журнал расчетов 444b17de служит для просмотра и редактирования расчетов 444b17de , произведенных в системе. В журнале расчетов 444b17de накапливаются записи расчетов 444b17de . Каждый журнал предназначен для выполнения расчетов 444b17de по одному типу объектов 444b17de - определенному справочнику системы. Для каждой записи журнала расчетов 444b17de в качестве объекта указывается один из элементов 444b17de этого справочника. Обязательно определяется вид расчета, а также как правило, указывается дата начала и дата окончания действия записи, рассчитанное значение записи записывается в атрибут Результат.



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

Дата отсчета журнала расчетов 444b17de определяет точку отсчета периода, заданного в журнале расчетов 444b17de .

Если журнал расчетов 444b17de уже содержит записи, система не позволяет изменить периодичность журнала расчетов 444b17de .

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

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

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


170_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7

Видом расчета - определенным алгоритмом расчета, записанным в модуле вида расчета (начисление или удержание при расчете заработной платы),

Документом, который ╚породил╩ данную запись журнала расчетов 444b17de с помощью методов ВвестиРасчет(<?>,,,,) или ЗаписатьРасчет(<?>,,└). Например: документ начала месяца, отпуск, больничный и т.д.,

Родительским документом, который ввел данную запись журнала расчетов 444b17de
методом═════════════ ВвестиРасчетНаОсновании(<?>,,,,,)═══════════════════ или

ЗаписатьРасчетНаОсновании(<?>,,,,,).

Протяженностью действия записи журнала расчетов 444b17de (определяется датой начала и датой окончания данного расчета),

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

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

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

Статус записи можно прочитать по значениям флажков типа число, с возможными значениями 0 и 1.

Перерасчет - показывает, что запись является перерасчетом другой (первичной) записи прошлого периода, и введена методом методом ВвестиПерерасчет()══ или ВвестиПерерасчетНаОсновании()

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

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


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 171

УстановитьРеквизит ()═ или непосредственным присвоением,

ЖрнРаcчета = СоздатьОбъект("ЖурналРасчета.Зарплата"); ЖрнРасчета.Сторно = 1;

тогда он может быть переопределен программным образом. Рассчитана ≈ указывает, что запись рассчитана. Исправлена ≈ указывает, что запись исправлена вручную.

Фиксирована ≈ указывает, что результат расчета записи защищен от исправления.

Период расчетов 444b17de

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

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

месяц,

квартал,


172_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7

год.

Если журнал расчетов 444b17de уже содержит записи, система не позволяет изменить периодичность журнала расчетов 444b17de .

Предопределенные процедуры модуля формы журнала расчетов 444b17de

ПриИсправленииРезультата - процедура, которая отрабатывает в момент исправления результата расчета записи журнала расчетов 444b17de пользователем.

ПриОтменеИсправления - процедура, которая отрабатывает в момент отказа пользователя от редактирования.

ПриРасчете - процедура, которая отрабатывает в момент выполнения одной из трех команд ╚РасечитатъЗапись╩, ╚РассчитатьОбъект╩ или ╚РассчитатъДокумент╩.

ПриУстановкеОтбора - процедура, которая отрабатывает в момент установки отбора в форме журнала расчетов 444b17de .

ПриУстановкеГраницыПросмотра - процедура, которая отрабатывает в момент установки границы просматриваемых в журнале расчетов 444b17de записей.

ПриУстановкеПредставления - процедура, которая отрабатывает в момент установки представления журнала расчетов 444b17de (по всем объектам расчетов 444b17de , по одному объекту расчета, по одному документу расчета).

11.2. Конфигурирование объектов 444b17de компоненты ╚Расчет╩

11.2.1. Объекты метаданных - ╚Календарь╩

Календари хранят данные о структуре периода расчетов 444b17de . При конфигурировании календарей описывается порядок их автозаполнения.

В дереве метаданных выделим ветвь ╚Календари╩, в главном меню выберем пункт ╚Действие╩ и в появившемся подменю пункт ╚Новый элемент╩. В появившейся форме на закладке ╚Общие╩ введем идентификатор ╚Пятидневка╩, а на закладке ╚Календарь╩ график работы оборудования семидневку с 10-ти часовым рабочим днем и двумя выходными, стартов 444b17de ую


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 173

дату, начиная с которой будет вестись расчет по календарю, установим на любой понедельник. Нажав на кнопку ╚ОК╩, сохраним объект.

Упражнение 32. Создайте два календаря: для сменной работы: - 12 часов и два выходных и для оборудования, которое работает постоянно - не выключается. Введите все три календаря в пользовательский интерфейс.

В жизни иногда случаются праздники. В системе 1С:Предприятие праздники можно задать программно,

Праздник=Создать0бъект("Праздники");

Праздник.Новый('01.01.02',КоличествоРабочихЧасов);

Подробнее смотрите ╚1С:Предприятие Версия 7.7 Описание встроенного языка Часть 2,стр.607-609. Также можно создать пункт меню в пользовательском интерфейсе, который позволит вводить праздники. Создадим такой пункт меню.

Откроем свойства нового элемента меню, Выберем объект ╚Календари╩, Выберем команду ╚Календари.Праздники╩, Отредактируем Название и Подсказку.


174_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7

11.2.2. Создание объектов 444b17de метаданных - ╚Группа расчетов 444b17de ╩ и ╚Вид расчета╩.

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

Группы расчетов 444b17de служат для того, чтобы можно было оперировать не только результатами расчетов 444b17de по конкретным видам, но и результатами по нескольким видам расчетов 444b17de

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

В дереве метаданных выделим ветвь ╚Группы расчетов 444b17de ╩, в главном меню выберем пункт ╚Действие╩ и в появившемся подменю пункт ╚Новый элемент╩. В появившейся форме введем идентификатор ╚ДляОборудования╩. Отработанное время мы будем рассчитывать в днях и в часах. Аналогично, выделив в дереве метаданных ветвь ╚Виды расчетов 444b17de ╩, создадим виды расчетов 444b17de ╚Вчасах╩ с синонимом ╚часов╩ и ╚Вднях╩ с синонимом ╚дней╩, и включим их в группу ╚ДляОборудования╩ с помощью стрелки.


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 175

Упражнение 33. Создайте в справочнике ╚Оборудование╩ реквизит ╚Расчет╩ типа ╚ВидРасчета╩ для элемента справочника. Отредактируйте интерактивные формы и заполните все реквизиты в существующих записях справочника.

11.2.3. Конфигурирование журнала расчетов 444b17de

Создадим журнал расчетов 444b17de ╚Амортизация╩ с объектом расчетов 444b17de типа справочник ╚Оборудование╩, с периодичностью расчетов 444b17de 1 месяц, для которой характерна дата начала отсчета 1-е число месяца, размерность Результата зададим: длина -12, точность-2. В журнале создадим реквизиты типа число ╚Часов╩ с синонимом ╚Часов/Дней╩, длина 3, точность 0 и ╚Стоимость╩ , длина 12, точность 2.


176_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7


Отредактируем форму списка журнала.



Графы отбора позволяют отбирать записи журнала расчетов 444b17de по значению реквизита элемента справочника-объекта. В качестве графы отбора выберем реквизит справочника ╚Оборудование╩ - ╚График╩.

11.3. Создание записей в Журнале расчетов 444b17de

Записи журнала расчетов 444b17de формируются документами расчета. Алгоритм создания записей журнала расчетов 444b17de , как и другие движения в системе, описывается в модуле документа расчета.


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 177

Упражнение 34. Установите флаг расчета в свойствах документа ╚Приход╩ и создайте в нем реквизит табличной части ╚Расчет╩ типа ╚ВидРасчета╩, чтобы можно было откорректировать вид расчета перед вводом записи в журнал расчетов 444b17de . Опишите в свойствах соответствующего поля диалога документа выражение для ввода из справочника ╚Оборудование╩ значения по умолчанию для реквизита ╚Расчет╩.

Метод ВвестиРасчет() позволяет ввести одним документом несколько записей в журнал расчетов 444b17de по одному объекту.

Метод ЗаписатьРасчетО вводит документом только одну запись по объекту и виду расчета в одном периоде журнала расчетов 444b17de . Если документом вводится запись по такому же объекту с таким же видом расчета, которая уже есть в данном периоде журнала расчетов 444b17de , то существующая запись будет замещена новой записью.

Списки параметров для обоих методов одинаковы.

ВвестиРасчет(<Объект>,< ВидРасчета >,<ДатаНачала>,<ДатаОкончания>,<Результат>) позволяет

ввести запись в журнал расчетов 444b17de .

<Объект> - объект расчета - элемент справочника, заданного при конфигурировании журнала расчетов 444b17de .

<ВидРасчета> - вид вводимого расчета - ссылка на агрегатный обьект ВидРасчета.

<ДатаНачала> - дата начала действия вводимого расчета. По умолчанию - дата начала текущего

периода журнала расчетов 444b17de .

<ДатаОкончания> - дата окончания действия вводимого расчета. По умолчанию - дата окончания

текущего периода журнала расчетов 444b17de .

<Результат> - результат расчета. По умолчанию - ноль.

Возвращаемое значение:

1 - если операция успешно выполнена, и 0 - в противном случае.


178_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7

Для ввода записей расчета на основании существуют методы ВвестиРасчетНаОсновании() и ЗаписатьРасчетНаОсновании() с аналогичными различиями.

ВвестиРасчетНаОсновании(<Основание>,<Объект>,<ВидРасчета>,<ДатаНачала>,<ДатаОкончания>,<Результат>)

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

<Основание> - документ, на основании которого вводится запись (или записи) в журнал расчетов 444b17de .



<Объект> - объект расчета - элемент справочника, заданного при конфигурировании журнала расчетов 444b17de .

<ВидРасчета> - вид вводимого расчета - ссылка на агрегатный объект ВидРасчета.

<ДатаНачала> - дата начала действия вводимого расчета. По умолчанию - дата начала текущего

периода журнала расчетов 444b17de .

<ДатаОкончания> - дата окончания действия вводимого расчета. По умолчанию - дата окончания

текущего периода журнала расчетов 444b17de .

<Результат> - результат расчета. По умолчанию - ноль.

Возвращаемое значение:

1 - если операция успешно выполнена, и 0 - в противном случае.

Параметр ╚Основание╩ попадает в атрибут РодительскийДокумент записи журнала расчетов 444b17de .

Для ввода значений реквизитов 444b17de журнала расчетов 444b17de используется метод УстановитьРеквизит().

УстановитьРеквизит(<ИмяРеквизита>,<Значение>) устанавливает значение реквизита журнала расчетов 444b17de для записи.<ИмяРеквизита> - наименование реквизита журнала расчетов 444b17de . <3начение> -значение, устанавливаемое для записи в реквизит <ИмяРеквизита>.

Откроем Модуль документа ╚Приход╩ и пропишем создание записей журнала расчетов 444b17de по каждой строке документа. Для этого, в отличие от регистров и бухгалтерской операции, необходимо создать объект "ЖурналРасчетов 444b17de .Амортизация" и в цикле перебора строк документа вызвать метод журнала расчетов 444b17de ВвестиРасчет().


// ** ** ** ** ** ** **

Процедура ОбработкаПроведения()

ЖурнРасчетов 444b17de =Создать0бъект("ЖурналРасчетов 444b17de .Амортизация"); ВыбратьСтроки();

Пока ПолучитьСтроку() =1 Цикл

// Создать запись журнала расчетов 444b17de

ЖурнРасчетов 444b17de .УстановитьРеквизит("Стоимость",Сумма); ЖурнРасчетов 444b17de .ВвестиРасчет(оборудование,Расчет,Датадок,,);

КонецЦикла;

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


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 179

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

Вы увидите в нем записи созданные документами, они пока ещё не рассчитываются. Чтобы научить систему рассчитывать записи, рассмотрим подробнее свойства объектов 444b17de метаданных ВидРасчета.

11.4. Особенности работы с видами расчетов 444b17de

11.4.1. Очередность расчета записей журнала расчетов 444b17de

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

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


180_____ _______ ______ _______ 1С:Првдприятие. Практика программирования на платформе V7

11.4.2. Вытеснение записей журнала расчетов 444b17de

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

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

Разберем небольшой пример.

Сотруднику была начислена зарплата за 1-ый и 2-ой месяц. В 1-ом месяце он заболел. После болезни он вышел на работу и принес больничный лист.

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


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 181

Откроем окно свойств вида расчетов 444b17de ╚Вднях╩ и установим приоритет вытеснения так, записи с видом расчета ╚Вднях╩ вытеснялись записями с видом расчета ╚Вчасах╩.

11.4.3. Описание алгоритма расчета записи журнала расчетов 444b17de в модуле вида расчета

Откроем модуль вида расчета ╚Вднях╩. В модуле вида расчета доступны атрибуты и реквизиты рассчитываемой записи журнала расчетов 444b17de .

С помощью метода вида метаданных Календари - Дней(), определим количество дней отработанных оборудованием и запишем выражение для реквизита Журнала расчетов 444b17de - ╚Часов╩.

Метод Дней(<ДатаНачала>,<ДатаОкончания>)позволяет получить количество "ненулевых" дней за

период.

Возвращает: целое положительное число - количество дней.

<ДатаНачала> - дата начала периода, в котором определяется количество дней.

<ДатаОкончания> - дата окончания периода, в котором определяется количество дней. Если

<ДатаНачала> больше, чем <ДатаОкончания>, будет выведено сообщение об ошибке.

Коэффициент амортизации оборудования задается у нас в процентах в час. Примем что в день у нас 10 рабочих часов для оборудования.

Процедура ПровестиРасчет()

Часов=Объект.График.Дней (ПериодДействия. ДатаНачала,

ПериодДействия.ДатаОкончания);

Результат=Стоимость* Часов *Объект.КоэффАморт/10 ;

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


182_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7

Упражнение 35. Создайте алгоритм расчета записи для вида расчета ╚Вчасах╩, используя метод календарей Часов(ДатаНачала.ДатаКонца). Рассчитайте записи в режиме Предприятия.

Определим остаточную стоимость оборудования, чтобы определить момент полного списания оборудования. Мы его списываем по бухгалтерскому и по оперативному учету. Полная остаточная стоимость, таким образом, складывается из конечного дебетов 444b17de ого сальдо по счету ╚ОБ.ПР╩ по разделителю учета ╚Белое╩ и остатков по Оперативному учету.

Упражнение 36. Создайте в глобальном модуле функцию ОстаточнаяСтоимость(КонДата,Объект), которая будет возвращать полную остаточную стоимость оборудования на заданную дату. Организуйте вызов функции из текстов 444b17de ой колонки ╚Ост. табличной части формы списка журнала расчетов 444b17de ╚Амортизация╩.

Функция ОстаточнаяСтоимость(КонДата,Объект,Документ)══ Экспорт Рег=Создать0бъект("Регистр.Амортизация");

БИ=Создать0бъект("БухгалтерскиеИтоги");

БИ.ИспользоватьРазделительУчета(Перечисление.ТипыУчета.Бел);

Если КонДата<ПолучитьДатуТА() Тогда Peг.ВременныйРасчет();

РассчитатьРегистрыНа(КонДата);

КонецЕсли;

БИ.Рассчитать(,КонДата,"ОБ.ПР",,Перечисление.ТипыУчета.Бел);

Возврат БИ.СКД("ОБ.ПР",,,Объект,Документ) + Рег.СводныйОстаток(Объект,Документ,"Стоимость");

КонецФункции //ОстаточнаяСтоимость()

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


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 183

11.5. Методы выборки записей из журнала расчетов 444b17de

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

11.5.1. Методы выборки записей по периоду действия

Метод ВыбратьЗаписи(<Начало>,<Окончание>) - открывает выборку

записей журнала расчетов 444b17de . Выбираются все записи, период действия которых хоть на один день затрагивается тем периодом, который задан параметрами <Начало> и <Окончание>.

∙ Метод ВыбратьЗаписиПоОбъекту(<Объект>,<Начало>,<Окончание>)

отличается от метода ВыбратьЗаписи() тем, что в первом случае в выборку попадают записи по одному конкретному объекту расчета, заданного параметром <Объект>, а во втором ≈ по всем объектам расчета.

∙ Метод ВыбратьЗаписиПоДокументу(<Документ>) ≈ открывает выборку всех

записей, порожденных документом.

11.5.2. Методы выборки записей по периоду регистрации

Методы ВыбратьПериод(<Дата>), ВыбратьПериодПоОбъекту(<Объект>,

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

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

Упражнение 37. В модуле формы документа ╚Амортизация╩ создадим процедуру РассчитатьКалендари() для автозаполнения календарей по дату документа и функцию ВыполнитьРасчет (объект) для расчета амортизации по записям журнала расчетов 444b17de . Процедуру РассчитатьКалендари() выполнять при создании нового документа в информационной базе. Процедуру ВыполнитьРасчет() вызывать для расчета результирующей суммы списания по


184_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7

выбранному элементу справочника ╚Оборудование╩.

Метод Автозаполнение(<ДатаНачала>,<ДатаКонца>) выполняет автозаполнение календаря в заданном периоде. Возвращает число: 1 - получилось; 0 - не получилось <ДатаНачала> - дата начала периода автозаполнения. <ДатаКонца> - дата конца периода автозаполнения.

Функция ВыполнитьРасчет(объект)

Сум= 0;

ЖурнРасчетов 444b17de =Создать0бъект("ЖурналРасчетов 444b17de .Амортизация");

Если ЖурнРасчетов 444b17de .ВыбратьЗаписиПоОбъекту(объект, ЖурнРасчетов 444b17de .НачалоПериодаПоДате(ДатаДок), ЖурнРасчетов 444b17de .КонецПериодаПоДате(ДатаДок)) =1 Тогда

Пока ЖурнРасчетов 444b17de .ПолучитьЗапись()=1 Цикл

Если ЖурнРасчетов 444b17de .Рассчитана=0 Тогда

ЖурнРасчетов 444b17de .Рассчитать();

КонецЕсли;

Сум = Сум + ЖурнРасчетов 444b17de .Результат;

КонецЦикла;

Иначе

Сообщить(" Записи по объекту "+объект+" отсутствуют !") ;

КонецЕсли;

Возврат Сум;

КонецФункции / / ВыполнитьРасчет

//__________ ______ ____

Процедура РассчитатьКалендари ()

Н= 1 ;

Пока Метаданные.Календарь(Н).Выбран()=1 Цикл

Календарь=Создать0бъект(Метаданные.Календарь(Н). ПолныйИдентификатор());

Если Календарь.Часов(НачМесяца(ДатаДок),КонМесяца(ДатаДок))=0 Тогда

Календарь.Автозаполнение(НачМесяца(ДатаДок),ДатаДок);

КонецЕсли;

Н=Н+1;



КонецЦикла;


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 185

КонецПроцедуры //═ РассчитатьКалендари

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

Результат= ВыполнитьРасчет (Оборудование).

Вызов процедуры РассчитатьКалендари () можно поместить в предопределенные процедуры ВводНового() и ВводНаОсновании().

Процедура ВводНового()

РассчитатьКалендари();

ТипСписания=Константа.ТипСписания.Получить(ДатаДок);

УстановитьНовыйНомер("А"); КонецПроцедуры

11.6. Служебный объект ╚Запрос╩. Создание регламентного документа ╚Расчета╩

Создадим процедуру автоматического заполнения табличной части документа ╚Амортизация╩ по записям текущего периода журнала расчетов 444b17de . Выборку записей можно осуществить, используя служебный объект ╚Запрос╩.

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

Служебный объект ╚Запрос╩, имеет свой собственный ╚язык запросов╩ для описания создаваемой таблицы выборки. Для создания таблицы выборки текст на языке запросов передается в параметр метода Выполнить(ТекстЗапроса) объекта типа Запрос.


186_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7

Метод Выполнить(<ТекстЗапроса>) выполняет запрос и создает таблицу выборки по запросу. Возвращает: 1 - если запрос выполнен, 0 ∙ иначе. <ТекстЗапроса> - строка с текстом запроса на языке генерации запросов.

Описание внутренних переменных запроса ≈ полей таблицы выборки.

ИмяПеременной = ОписаниеПеременной[, ОписаниеПеременной...];

ОписаниеПеременной - указывает на конкретный реквизит документа, справочника, измерение или

ресурс регистра.

Можно указывать несколько вариантов 444b17de ОписанияПеременной через запятую.

Дополнительные атрибуты внутренних переменных типа документ:

ТекущийДокумент- ссылка на текущий документ;

НомерДок - номер документа;

ДатаДок - дата документа;

НомерСтроки номер строки документа;

ВремяДок - время документа.

Дополнительные атрибуты внутренних переменных типа справочник:

ТекущийЭлемент ссылка на элемент справочника;

Код - код;

Наименование - наименование

Определение периода выборки.

[Период] С <Дата1>|<ВнешняяПеременная1> [По <Дата2>|Внешняя переменная2]; <Дата1>,<Дата2> - значение типа "Дата", "Документ" или позиция документа. <ВнешняяПеременная1>,<ВнешняяПеременная2> - внешняя переменная, задающая значение типа "Дата", "Документ" или позиция документа.

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

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

Обрабатывать Все|ПомеченныеНаУдаление|НеПомеченныеНаУдаление;


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 187

ОбрабатыватьДокументы Проведенные|Непроведенные|Все; ОбрабатыватьОперации Включенные|Выключенные|Все;

Вычисление функций и включение их результатов 444b17de в таблицу выборки. Функции ≈ это вычисляемые поля таблицы выборки. Списки вычисляемых функций различны для различных типов параметров функций.

Функция <Имяфункции> = <Типфункции>(<Параметр>|<УточненныйПараметр>)

[Когда (<Условие>)];

<ИмяФункции> - имя, присваиваемое функции;

<Типфункции> - ключевое слово одной из встроенных функций языка;

<Параметр> - имя внутренней переменной, параметр вызова функции;

<УточненныйПараметр> - конкретизация внутренней переменной, параметр вызова функции.

<Условие> - условие вычисления функции (необязательно).

Типы встроенных функций:

Сумма - сумма значений параметра;

Среднее - среднее значений параметра;

Минимум - минимальное значение параметра,

Максимум - максимальное значение параметра;

НачОст - начальный остаток значений параметра-ресурса Регистра остатков;

КонОст - конечный остаток значений параметра-ресурса Регистра остатков;

Приход - приход значений параметра-ресурса Регистра остатков;

Расход - расход значений параметра-ресурса Регистра остатков;

Счётчик - количество записей, вошедших в выборку, <Параметр> - не нужен;

СНД, СКД, СНК, СКК - сальдо начальное или конечное по дебету или кредиту;

ДО, КО, КорДо, КорКо - обороты по дебету или кредиту счета или корсчета;

В функциях; Сумма, Среднее, Максимум, Минимум в качестве аргумента возможно использование

арифметического выражения в терминах встроенного языка.

К параметрам, указывающим на ресурсы Регистров, могут применяться только оговоренные функции.

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

Группировка <ИмяГруппировки>|<ПредопредГруппировка> [Упорядочить по

<КонкретизацГруппировки>, ...][Без Упорядочивания][Без Групп][Все [ВошедшиеВЗапрос]];

<ИмяГруппировки> - имя внутренней переменной, задающей группировку;

<ПредопредГруппировка> - ключевое слово одной из встроенных группировок;

<КонкретизацГруппировки> - конкретизация переменной <ИмяГруппировки>, задающая порядок групп.

Ключевые слова:

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

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

выборки и определяют упорядочивание строк в группировке.

Без Упорядочивания - необязательное добавочное ключевое слово, которое преследует цель

уменьшения времени формирования запроса, при условии, что ни упорядочивание, ни значения

упорядочивания при использовании данного запроса не нужны.

Без Групп - группы справочника не выводятся в запрос (для группировки по справочнику);

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

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

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


188_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе \/7

Предопределенные группировки:

Документ - позволяет детализацию до документа;

СтрокаДокумента - позволяет детализацию до строки документа;

ПериодЖурнала - группировка по времени ввода записи журнала расчетов 444b17de или по времени ее действия. Группировки по дате:

День;

Неделя;

Месяц;

Квартал;

Год.

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

Метод Без итогов. В случае применения данного оператора в тексте запроса, при обходе результатов 444b17de запроса применяется только один цикл обхода, используя метод объекта "Запрос" ГруппировкаО без параметра. Если в тексте запроса используется группировка по многоуровневому справочнику и не указано "Без Групп", то итоги по группам справочника будут накапливаться. Другими словами, если в запросе не нужны итоги по группам справочника, то в тексте запроса кроме использования оператора "Без Итогов" дополнительно следует в операторах "Группировка ..." использовать ключевое слово "Без Групп".

Можно назначить условие включения информации в запрос.

Условие(<ЛогическоеВыражение>);

В логическом выражении могут участвовать внутренние и внешние переменные. Внутренние

переменные ставятся слева от логического оператора, внешние - справа.

Кроме обычных логических операторов (>, <, =, >=, <=, о. И, ИЛИ, НЕ) в операторе "Условие ..."

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

принадлежности - В

Оператор языка запросов "Условие (А в Б);" говорит о том, что условие истинно, когда значение А

является подмножеством значения Б. Следует особо отметить, что если значение Б пустое (объект не

выбран), то условие является истинным, в отличие от оператора "=" (равно). Если на принадлежность

проверяется значение типа элемент справочника, то проверка выполняется с учетом его возможного

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

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

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

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

каждой строки списка значений.

Запрос можно сформировать с помощью конструктора. Войдем в модуль формы документа ╚Амортизация╩ и вызовем конструктор ╚Запрос ╩ из меню ╚Конструкторы╩. Создадим запрос с именем ╚Заполнить╩.


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 189

Определим период запроса.

Определим переменные запроса: Оборудование и Рез - из журнала расчетов 444b17de .


190_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе у7

Определим Функцию запроса Результат ≈ сумму по переменной запроса Рез.

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

Определим условие записи строки выборки.

Определим Функцию запроса Результат ≈ сумму по переменной запроса Рез.




XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 191

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

Отредактируем сформированную конструктором процедуру, используя следующие методы:

Метод Выгрузить(<ТаблЗнач>,<Флаг>,<Итоги>) позволяет выгрузить результаты запроса в таблицу значений. Возвращает число: 1 - если выгрузка произошла успешно, иначе - 0. <ТаблЗнач> - Таблица значений, куда выгружаются результаты запроса. <флаг> - необязательный параметр. Число или строка:

0 - значения групп и функций (по умолчанию);



1 - значения групп и функций, дополнительных переменных;

2 - значения упорядочиваний групп и функций;

3 - значения упорядочиваний групп и функций, дополнительных переменных;

Строка - " ТоварО), Товар(2), Товар, Склад, Приход, Расход", где ТоварО) - значение первого упорядочивания группировки "Товар". <Итоги> - необязательный параметр. Число:

0 - итоги по группировкам не выводить;

1 - итоги по группировкам выводить сверху (по умолчанию);

2 - итоги по группировкам выводить снизу;

3 - итоги по группировкам выводить сверху и снизу.

Метод ЗагрузитьТабличнуюЧасть(<ТаблЗнач>) позволяет загрузить многострочную часть документа из таблицы значений. <ТаблЗнач> - значение типа "Таблица значений", откуда загружается многострочная часть документа. Колонки совмещаются по идентификаторам.

Процедура Заполнить()

Перем Запрос, ТекстЗапроса, ТаблицаВыборкиЗапроса;

//Создание объекта типа Запрос

Запрос = СоздатьОбъект("Запрос");

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

"//}ЗАПРОС

// Если ошибка в запросе, то выход из процедуры

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

Возврат ;

КонецЕсли;

ТаблицаВыборкиЗапроса=СоздатьОбъект("ТаблицаЗначений");

Запрос.Выгрузить(ТаблицаВыборкиЗапроса,0,0);

ЗагрузитьТабличнугоЧасть(ТаблицаВыборкиЗапроса);

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

Процедуру Заполнить() можно вызвать из процедуры ВводНового().

Упражнение 38. (Необязательное) Создать реквизит документа формы документа ╚Амортизация╩, графу отбора журналов документов 444b17de и алгоритм для проверки наличия регламентного документа в периоде расчета, которому принадлежит вводимый документ. Если в указанном периоде уже есть проведенный регламентный документ, то запретить ввод нового документа.

■ Для проведенного регламентного документа разрешить только просмотр документа.

■ Если регламентный документ уже есть, то при вводе нового выдать соответствующее предупреждение и открыть форму регламентного документа.

Метод ВыбратьПоЗначению(<Дата1>,<Дата2>,<ИмяОтбора>,<Знач>)

открывает выборку документов 444b17de в интервале дат с заданным значением реквизита отбора. Возвращает:

1 - если действие выполнено и в выборке есть хотя бы один документ;

0 - если действие не выполнено или в выборке нет ни одного документа.

<Дата1> - дата, документ или позиция начала выборки документов 444b17de . Если данный параметр опущен, то

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

<Дата2> - дата, документ или позиция конца выборки документов 444b17de . Если данный параметр опущен, то

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

<ИмяОтбора> - строка с названием Общего реквизита документов 444b17de либо названием Графы отбора

журналов;

<3нач> - значение отбора, по которому строится выборка документов 444b17de .

Метод можно использовать только для объектов 444b17de , созданных функцией СоздатьОбъект.


═XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ __________ ═ 193

═Метод ОткрытьФормуМодально(<Документ>,<КонтекстФормы>,<РежимПросмотра>) открывает

визуальную форму существующего документа или элемента/группы справочника.
Возвращает: 1 - если действие выполнено, 0 - иначе.

═<Документ> - выражение со значением типа 'документ' или 'справочник';

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

открываемую форму. Данное значение будет доступно в открытой форме как атрибут Форма.Параметр.

После исполнения данного метода система вернет в данную переменную контекст открытой формы ══(необязателен);

<РежимПросмотра> - необязательный параметр. Числовое выражение: 1 - открыть форму в режиме ═только просмотра; 0 - открыть форму в режиме редактирования; -1 (минус единица) - в этом случае

используется вариант, предусмотренный текущим значением параметра "Режим открытия объектов 444b17de ",

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

Пока форма открыта, тип значения параметра <КонтекстФормы> равен 100, когда закрыта - 0.

Примерный текст алгоритма проверки приводится ниже.

Функция ПроверитьРегламент(ДатаД =РабочаяДата())═══ Экспорт

Док=Создать0бъект("Документ.Амортизация");

ФлагРегламента=О;

Если Док.ВыбратьПоЗначению(НачМесяца(ДатаД),КонМесяца(ДатаД), "Регламент",1) =1 Тогда

Док.ПолучитьДокумент();

Если Док.Проведен()=1 Тогда

Предупреждение("В этом периоде существует регламентный документ!");

ОткрытьФормуМодально(Док,,1);

ФлагРегламента=1;

КонецЕсли;

КонецЕсли;

Возврат ФлагРегламента;

КонецФункции //ПроверитьРегламент

═Вызов этой функции Вам предлагается сделать самостоятельно.

═Данную проверку целесообразно делать и при проведении документа ═╚Амортизация╩.

Упражнение 39. (Необязательное) Создайте алгоритм, который покажет документы ╚Амортизация╩, которые надо перепровести, если изменился ТипУчета в проведенном документе ╚Приход╩. Создайте алгоритм перепроведения этих документов 444b17de .

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

Перем ПерепровестиДокументы Экспорт;


194_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе \/7

II__________ ______ ____ _____________

Процедура Перепровести(Конт)══ Экспорт

Перем зн,поз,стр;

Если Конт.Проведен()=1 Тогда

СписокДокументов 444b17de =Создать0бъект("СписокЗначений");

0пер=Создать0бъект("Операция");

Опер.ИспользоватьКорСубконто(ВидыСубконто.Партия, Конт.ТекущийДокумент());

Опер.ВыбратьОперацииСПроводками(Конт.ПолучитьПозицию(),,"ОБ.СП", "ОБ.ПР", 2, );

Пока Опер. ПолучитьПроводку 0=1 Цикл

БДок= Опер.Документ.ТекущийДокумент();

Если (БДок.Вид()="Амортизация") И (СписокДокументов 444b17de .Принадлежит(БДок)= 0) Тогда

СписокДокументов 444b17de .ДобавитьЗначение(БДок,БДок.НомерДок);

КонецЕсли;

КонецЦикла;

Рег=Создать0бъект("Регистр.Амортизация");

Peг.УстановитьФильтр(,Конт.ТекудийДокумент());

Peг.ВыбратьДвижения(Конт.ПолучитьПозицию(),,);

Пока Peг.ПолучитьДвижение()=1 Цикл

Док=Рег.ТекущийДокумент();

Если (Док.Вид()="Амортизация") И (СписокДокументов 444b17de .Принадлежит(Док)=0) Тогда

СписокДокументов 444b17de .ДобавитьЗначение(Док,Док.НомерДок);

КонецЕсли;

КонецЦикла;

СписокДокументов 444b17de .Сортировать();

Если СписокДокументов 444b17de .ОтметитьЗначения (ЗН,"Пометить документы",Поз)=1 Тогда

Для i=l по СписокДокументов 444b17de .РазмерСписка() Цикл

Если СписокДокументов 444b17de .Пометка(i)=1 Тогда


XI. Основы построения объектов 444b17de компоненты ╚Расчет╩_____ _______ ______ ___________ 195

ЗначениеДокумента=СписокДокументов 444b17de . ПолучитьЗначение(i,Стр);

Если ПерепровестиДокументы. Принадлежит(ЗначениеДокумента)= 0══ Тогда

ПерепровестиДокументы.ДобавитьЗначение(ЗначениеДокумента,Стр);

КонецЕсли;

КонецЕсли;

КонецЦикла;══ //═══ Для

КонецЕсли;

КонецЕсли;

КонецПроцедуры═ //Перепровести

//__________ ______ ____ __________

Процедура Перепроведение()

Перем Стр;

Если ПустоеЗначение(ПерепровестиДокументы)=0 Тогда

Док=СоздатьОбъект("Документ.Амортизация");

Для i=1 по ПерепровестиДокументы.РазмерСписка() Цикл

Док.НайтиДокумент(ПерепровестиДокументы. ПолучитьЗначение(i,Стр));

Если Док.Провести()=1 Тогда

Сообщить("Документ "+Док+ " проведен.");

Иначе

Сообщить("Документ "+Док+ " НЕ ПРОВЕДЕН! ! !");

КонецЕсли;

КонецЦикла;═ //ПерепровестиДокументы.РазмерСписка()

КонецЕсли;

КонецПроцедуры //Перепроведение

//__________ ______ ____ _

╥╥╥

╥╥╥

ПерепровестиДокументы=СоздатьОбъект("СписокЗначений");


196_____ _______ ______ _______ 1С:Предприятие. Практика программирования на платформе V7

Упражнение 40. Постройте самостоятельно (Конструктором отчетов 444b17de ) Оборотные ведомости по бухгалтерским итогам, с помощью конструктора бухгалтерских запросов, и по регистру остатков, используя конструктор запросов. Покажите Начальные и конечные остатки (сальдо) и обороты по счету ╚ОБ.ПР╩ и, аналогично, по движениям Приход и Расход регистра остатков.

Вопросы для самоконтроля

Какое основное отличие компоненты Расчет от учетных компонент?

Можно ли включать один и тот же ВидРасчета в записи различных журналов расчета?

Можно ли вести в одном журнале расчета записи по разным объектам

учета?

Атрибуты какого элемента данных непосредственно доступны в модуле расчета?

Можно ли в одном календаре вести индивидуальные графики всех объектов 444b17de учета?