Контекст работы с видами и группами видов расчётов
Виды и группы видов расчёта являются частью глобального контекста выполнения программы «1С:Предприятие». Таким образом, для использования атрибутов и методов видов расчётов и групп расчётов достаточно писать непосредственно обращение к атрибутам и методам того или иного расчёта или группы расчётов с использованием ключевого слова ВидРасчета
(англоязычный синоним — CalculationKind
) или ГруппаРасчетов
(англоязычный синоним — CalculationGroup
). Это исключает необходимость использования функции СоздатьОбъект()
для получения ссылки на соответствующий агрегатный объект.
Общий синтаксис:
ВидРасчета.<ИдентификаторВидаРасчета>.<ИмяАтрибута> ВидРасчета.<ИдентификаторВидаРасчета>.<ИмяМетода>() ГруппаРасчетов.<ИдентификаторГруппыВидовРасчета>.<ИмяАтрибута> ГруппаРасчетов.<ИдентификаторГруппыВидовРасчета>.<ИмяМетода>()
Пример использования:
// Узнаем, входит ли вид расчета ОплатаПоОкладу // в группу ОблагаютсяНалогом Проверка = ВидРасчета.ОплатаПоОкладу.ВходитВГруппу(ГруппаРасчетов.ОблагаютсяНалогом); // Выведем наименование вида расчета Сообщить(ВидРасчета.Доплата.Наименование);
Объекты типа "
ВидРасчета"
могут сохраняться в базе данных (реквизиты справочников, документов, журналов расчёта могут иметь тип "
ВидРасчета"
и хранить ссылки на объекты этого типа).
Атрибуты видов расчёта и групп видов расчёта
Доступ к идентификатору вида расчёта или группы видов расчёта, заданному при конфигурировании, предоставляет атрибут Код
(англоязычный синоним — Code
). Значение атрибута имеет строковый тип.
Пример:
ВР = ВидРасчета.ПоОкладу; Сообщить(ВР.Код);
Другой пример:
Группа = ГруппаРасчетов.ОблагаютсяНалогом; Сообщить(Группа.Код);
Доступ к комментарию вида расчёта или группы видов расчёта, заданному при конфигурировании, предоставляет атрибут Наименование
(англоязычный синоним — Descriptor
). Значение атрибута имеет строковый тип.
Пример:
ВР = ВидРасчета.АмортизацияС_НДС; Сообщить(ВР.Наименование);
Другой пример:
Группа = ГруппаРасчетов.ОблагаютсяНалогом; Сообщить(Строка(Группа.Наименование));
Атрибуты видов расчёта
Сведения об очередности вида расчёта, заданной при конфигурировании, содержит атрибут Очередность
(англоязычный синоним — Priority
). Значение атрибута имеет числовой тип.
Примечание: Понятие очередности используется для упорядочивания записей журнала расчётов. Это помогает упорядочить расчёт записей, тем самым выполняя, например, расчёт всех начислений раньше, чем расчет базирующихся на них удержаний.
Пример использования атрибута:
ВР = ВидРасчета.ПоОкладу; Сообщить("Расчет " + ВР.Наименование + "с очередностью " + ВР.Очередность);
Сведения о приоритете вытеснения вида расчёта, заданному при конфигурировании, содержит атрибут ПриоритетВытеснения
(англоязычный синоним — ReplacePriority
). Значение атрибута имеет числовой тип. Для невытесняющих видов расчёта значение этого атрибута равно нулю.
Примечание: Система использует приоритет вытеснения при разрешении ситуации, когда полностью или частично пересекаются периоды действия видов расчёта. Например, когда метод журнала расчётов ВвестиРасчет()
вводит расчёт в «занятый» временной интервал.
Вообще-то данный атрибут сохранён для поддержания совместимости с предыдущими версиями программы. Вместо использования этого атрибута рекомендуется использовать методы ВытесняетВидРасчета()
и ВытесняетсяВидомРасчета()
.
Пример использования:
Процедура ПровестиДокумент() ЖрнЗарплата.ВыбратьЗаписиПоОбъекту(Сотрудник, Начало, Окончание); Можно = 1; Пока ЖрнЗарплата.ПолучитьЗапись() > 0 Цикл Если ЖрнЗарплата.ВидРасч.ПриоритетВытеснения >= ВидРасчета.ОплатаБЛ.ПриоритетВытеснения Тогда Можно = 0; КонецЕсли; КонецЦикла; Если Начало > Окончание Тогда Можно = 0; КонецЕсли; Если Можно = 1 Тогда ЖрнЗарплата.ВвестиРасчет(Сотрудник, ВидРасчета.ОплатаБЛ, Начало, Окончание, 0); Если Начало > ЖрнЗарплата.НачалоТекущегоПериода() Тогда Перерасчет(ГруппаРасчетов.ПересчДляБЛ, Сотрудник, ТекущийДокумент(), Начало, Окончание); КонецЕсли; Иначе Предупреждение("Некорректный больничный лист! | Проверьте и исправьте даты начала и окончания. | После этого закройте документ, повторно откройте | и проведите его"); НеПроводитьДокумент(); КонецЕсли; КонецПроцедуры
Методы видов расчёта
Получить доступ к объекту вида расчёта конкретного вида по его имени позволяет метод ПолучитьАтрибут()
(англоязычный синоним — GetAttrib()
). Метод применяется только к объекту глобально контекста
"
ВидРасчета"
.
Синтаксис метода:
ВидРасчета.ПолучитьАтрибут(<ИмяВидаРасчета>)
где <ИмяВидаРасчета> — строковое выражение, содержащее идентификатор вида расчёта, как он задан в Конфигураторе.
Таким образом, приведённые ниже выражения идентичны:
Проверка = ВидРасчета.ПолучитьАтрибут("ОплатаПоОкладу").ВходитВГруппу(ГруппаРасчетов.ОблагаютсяНалогом); // или Проверка = ВидРасчета.ОплатаПоОкладу.ВходитВГруппу(ГруппаРасчетов.ОблагаетсяНалогом);
Определить входимость вида расчёта в конкретную группу расчётов позволяет метод ВходитВГруппу()
(англоязычный синоним — BelongsToGroup()
). Возвращаемым значением метода является число 1, если вид расчёта входит в указанную группу, или 0, если вид расчёта не входит в эту группу.
Синтаксис метода:
ВходитВГруппу(<Группа>)
где <Группа> — группа расчётов, входимость в которую проверяется.
Пример:
// В журнале расчетов зарплаты посчитаем все начисления // для текущего сотрудника ЖР = СоздатьОбъект("ЖурналРасчетов.Зарплата"); // Начало и конец текущего периода журнала НТП = ЖР.НачалоТекущегоПериода(); КТП = ЖР.КонецТекущегоПериода(); Группа = ГруппаРасчетов.ВсеНачисления; Всего = 0; ЖР.ВыбратьЗаписиПоОбъекту(Объект, НТП, КТП); Пока ЖР.ПолучитьЗапись() = 1 Цикл Если (ЖР.ВидРасч.ВходитВГруппу(Группа) = 1) Тогда Всего = Всего + ЖР.Результат; КонецЕсли; КонецЦикл; . . .
Определить, не является ли «пустым» значение переменной или реквизита типа "
ВидРасчета"
позволяет метод Выбран()
(англоязычный синоним — Selected()
). Параметры у этого метода отсутствуют. Возвращаемым значением метода является число 1, если конкретный вид расчёта выбран, или 0, если вид расчёта не выбран.
Пример:
Допл = ГруппаРасчетов.Доплаты; ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата"); // Док — ссылка на документ, имеющий реквизит Сотрудник ЖЗ.ВыбратьЗаписиПоОбъекту(Док.Сотрудник); Пока ЖЗ.ПолучитьЗапись() = 1 Цикл Если ЖЗ.ВидРасч.ВходитВГРуппу(Допл) = 1 Тогда // предполагается, что документы-основания этих // видов расчета имеют реквизит ВР Если ЖЗ.Документ.ВР.Выбран() = 0 Тогда Сообщить("Не указан конкретный вид расчета в документе!"); КонецЕсли; КонецЕсли; КонецЦикла;
Определить, вытесняет ли текущий вид расчёта, расчёт, указанный в параметре, позволяет метод ВытесняетВидРасчета()
(англоязычный синоним — DisplaceCalc()
). Возвращаемым значением метода является число 1, если вид расчета, метод которого вызывается, вытесняет расчёт, указанный в параметре. В противном случае метод возвращает 0. Метод предназначен для определения взаимного влияния видов расчёта при вводе их в журнал расчётов.
Синтаксис метода:
ВытесняетВидРасчета(<ВидРасчета>)
где <ВидРасчета> — вид расчёта, для которого проверяется, вытесняется ли он текущим видом расчёта.
Пример:
// ВР — реквизит документа типа "ВидРасчета", // Сотр — реквизит документа типа "Элемент справочника Сотрудники". // ДтНач, ДтОконч — реквизиты документа типа "Дата" ЖР = СоздатьОбъект("ЖурналРасчетов.Зарплата"); ЖР.ВыбратьПоОбъекту(Сотр, ДтНач, ДтОконч); Пока ЖР.ПолучитьЗапись() = 1 Цикл Если ЖР.ВидРасч.ВытесняетВидРасчета(ВР) = 0 Тогда // если нашли вид расчета, который мы не сможем вытеснить Сообщить("Невозможно корректное проведение документа"); СтатусВозврата(0); Возврат; КонецЕсли; КонецЦикла;
Определить, вытесняется ли текущий вид расчёта указанным видом расчёта, позволяет метод ВытесняетсяВидомРасчета()
(англоязычный синоним — DisplaceByCalc()
). Возвращаемым значением метода является число 1, если вид расчёта, метод которого вызывается, вытесняется видом расчёта, заданным в качестве параметра. В противном случае метод возвращает 0.
Синтаксис метода:
ВытесняетсяВидомРасчета(<ВидРасчета>)
где <ВидРасчета> — вид расчёта, для которого проверяется, вытесняет ли он текущий вид расчёта.
Пример использования:
Если ЖР.ВидРасч.ВытесняетсяВидомРасчета(ВР) = 1 Тогда . . . КонецЕсли;
Методы групп видов расчёта
Определить, содержит ли текущая группа указанный вид расчёта, позволяет метод СодержитВидРасчета()
(англоязычный синоним — ContainCalculationKind()
). Возвращаемым значением метода является число 1, если вид расчёта входит в текущую группу видов расчёта, или 0, если вид расчёта не входит в группу.
Синтаксис метода:
СодержитВидРасчета(<ВидРасчета>)
где <ВидРасчета> — вид расчета, входимость которого проверяется.
Пример:
Входит = ГруппаРасчетов.ОблНалогом.СодержитВидРасчета(ЖР.ВидРасч);
Определить количество видов расчётов, включённых в данную группу, позволяет метод Количество()
(англоязычный синоним — Count()
). Параметры у этого метода отсутствуют, а возвращаемым значением является целое число — количество видов расчета, входящих в группу. Метод обычно применяется в цикле с методом ПолучитьРасчет()
.
Пример:
// Модуль выполняется в контексте журнала расчетов // Сотр - текущий сотрудник // Для всех видов удержаний проведем расчет // в журнале расчетов зарплаты ЖР = СоздатьОбъект("ЖурналРасчетов.Зарплата"); ВсеУд = ГруппаРасчетов.ВсеУдержания; Счетчик = 1; Пока Счетчик <= ВсеУд.Количество() Цикл ЖР.ВвестиРасчет(Сотр, ВсеУд.ПолучитьРасчет(Счетчик)); Счетчик = Счетчик + 1; КонецЦикла;
Получить ссылку на вид расчёта, входящий в данную группу под определённым (порядковым) номером, позволяет метод ПолучитьРасчет()
(англоязычный синоним — GetCalculation()
). Обычно этот метод применяется в цикле с методом Количество()
.
Синтаксис метода:
ПолучитьРасчет(<Номер>)
где <Номер> — номер вида расчёта в списке видов расчёта данной группы.
Пример:
// Модуль выполняется в контексте журнала расчетов // Сотр - текущий сотрудник // Для всех видов удержаний проведем расчет // в журнале расчетов зарплаты ЖР = СоздатьОбъект("ЖурналРасчетов.Зарплата"); ВсеУд = ГруппаРасчетов.ВсеУдержания; Счетчик = 1; Пока Счетчик <= ВсеУд.Количество() Цикл ЖР.ВвестиРасчет(Сотр, ВсеУд.ПолучитьРасчет(Счетчик)); Счетчик = Счетчик + 1; КонецЦикла;
Другие статьи по схожей тематике