Глава 15. Язык зависимых проводок

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

  • строка $ в правилах генерации зависимых проводок означает значение того же поля родительской проводки;
  • если в поле фильтра значение поля — это строка ЛюбоеЗначение, то ограничений фильтра по этому полю нет. Иными словами, проводки будут генерироваться для любого значения в этом поле проводки;
  • в правилах генерации зависимых проводок можно использовать арифметические выражения и скобки, как в Excel.

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

15.1. Структура правила зависимых проводок

Каждое правило зависимых проводок состоит из:

  • фильтра — он задаётся в блоке Фильтр окна Редактирование правил зависимых проводок;
  • одного или нескольких правил для генерации зависимых проводок — они задаются в блоке Зависимые окна Редактирование правил зависимых проводок.

Фильтр — это таблица, каждая строка которой соответствует одному из полей исходной (родительской) проводки. В левой колонке этой таблицы указывается имя поля проводки, а в правой колонке — условие, которому должно соответствовать это поле проводки.

Например, на приведённом ниже рисунке в фильтре заданы условия для следующих полей проводки: Дебет, Кредит, Дата, Валюта и Сумма.

Зависимые проводки по правилу будут генерироваться для тех проводок, у которых:

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

Каждое условие в строке фильтра может задаваться как:

  • строка, с которой должно совпадать значение данного поля родительской проводки;
  • логическое выражение, то есть формула, которая может принимать значение «Истина» или «Ложь». Зависимые проводки генерируются, если значение выражения — «Истина».

О логических и других выражениях мы расскажем ниже.

Таблица и табличное условие. В блоке Фильтр окна Редактирование правил зависимых проводок можно использовать специальные поля Таблица и Табличное условие. Смысл этих полей таков:

Поле

 

Для чего используется

Таблица

 

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

Табличное Условие

 

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

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

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

Пример применения фильтра в поле Таблица:

Таблица:

 

ТаблАналитики("Материалы").Колонка("Номенклатура").Фильтр(р.Аналитика("Номенклатура"))...

Табличное условие:

 

ЛюбоеЗначение

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

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

15.2. Из чего состоят выражения в правилах зависимых проводок

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

Элемент

 

Описание и примеры

Числа

 

Например: 100,, 2345.56 и т. п. При записи дробных чисел для отделения целой и дробной частей числа используется точка, а не запятая.

Строки символов

 

Строки символов заключаются в двойные кавычки, например: "Таможня",, 18%", "Ставка НДС", "50.1 – Касса", или в одинарные кавычки-апострофы, например: '50.1 – Касса'.

Если в строке символов имеется двойная кавычка, то её можно записать так: \"

Имена констант и переменных

 

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

  • имена Дебет, Кредит, Сумма, Дата, Валюта, Комментарий. Они обозначают значения одноимённых полей родительской проводки;
  • имя $ означает значение этого поля, взятое из родительской проводки;
  • имя Сегодня означает текущую дату;
  • имя ЛюбоеЗначение означает логическое значение «Истина»;
  • имя ГлавнаяВалюта означает короткое имя главной валюты;
  • имя ТекущийПользователь означает логин текущего пользователя ФинГрада, и так далее.

В именах констант и переменных ФинГрада не бывает пробелов и специальных символов, кроме знаков доллара и знака подчёркивания.

Арифметические операторы

 

Символы +, –, * и / в выражениях зависимых проводок используются как арифметические операторы сложения, вычитания, умножения и деления. Символ («минус») перед числом или именем также используется для получения противоположного по знаку числа.

Операторы сравнения

 

Сочетания символов ==, !=, <, >, <=, >=— это операторы сравнения:

==   это оператор «равно»;

!= это оператор «не равно»;

< это оператор «меньше»;

> это оператор «больше»;

<= это оператор «меньше или равно»;

>= это оператор «больше или равно».

Результатом применения оператора сравнения является логическое значение «истина» или «ложь».

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

Логические операторы

 

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

! это логический оператор «Не»;

|| это логический оператор «Или»;

&& это логический оператор «И».

Так, если У — это условие, то — это условие, истинное, когда У ложно, и ложное, когда У истинно. Если У1 и У2 — это условия, то У1||У2 — условие, истинное, если хотя бы одно из условий У1 и У2 истинно; а У1&&У2 — условие, истинное, только когда оба условия У1 и У2 истинны.

Оператор соединения строк

 

Символ + используется также для соединения (конкатенации) строк.

Например, если значение переменной ГлавнаяВалюта это RUR (то есть, главная валюта — это рубль), то значение выражения "Валюта:"+ГлавнаяВалюта будет таким: Валюта:RUR

Скобки ( и )

 

Задают порядок вычисления выражений (формул) в правилах зависимых проводок.

Функции

 

В правилах зависимых проводок ФинГрада можно использовать различные встроенные функции. Например, функция Знак(число) имеет значение 1, если аргумент функции положительный; 0, если аргумент нулевой; и –1, если аргумент функции отрицательный.

Свойство

 

У многих объектов ФинГрада имеются свойства. Чтобы получить значение свойства объекта, используется запись:ИмяОбъекта.ИмяСвойства

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

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

Теперь расскажем об этом более подробно.

15.3. Отбор проводок по счетам дебета и кредита

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

Выражение в поле фильтра

 

Устанавливает ограничения для поля проводки:

ЛюбоеЗначение

 

Ограничений по данному полю нет.

"название-счёта"

 

Счёт должен иметь указанное название.

ИзСписка(счёт1,…,счётN)

 

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

ИзГрупп(группа1,…,группаN)

 

Счёт должен содержаться в одной из указанных групп счетов.
Комментарий(коменнтарий к счёту)   Счёт должен содержать указанный комментарий.

Приведём несколько примеров:

Выражение в поле фильтра

 

Устанавливает ограничения для поля проводки:

ЛюбоеЗначение

 

Ограничений по данному полю нет.

"НДС"

 

Значение счёта должно быть НДС.

ИзСписка("Покупатели","Поставщики")

 

Счёт должен либо счётом Покупатели, либо счётом Поставщики.

ИзГрупп("Наличные", "Безналичные")

 

Счёт должен содержаться либо в группе счетов Наличные, либо в группе счетов Безналичные.

Замечания.1. Если счёта, указанного в функции ИзСписка, не существует в плане счетов ФинГрада, будет сгенерирована ошибка.

2. Если группы счетов, указанной в функции ИзГрупп, не существует в плане счетов ФинГрада, будет сгенерирована ошибка. Счёт, у которого нет подсчетов, группой не считается.

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

Обозначение

 

Значение

$

 

Значение текущего поля исходной проводки.

р.Дебет

 

Счёт дебета исходной проводки.

р.Кредит

 

Счёт кредита исходной проводки.

р.Дебет.ИзСписка(счёт1,…,счётN)

 

Истина, если счёт дебета исходной проводки содержится в указанном списке счетов.

р.Кредит.ИзСписка(счёт1,…,счётN)

 

Истина, если счёт кредита исходной проводки содержится в указанном списке счетов.

р.Дебет.ИзГрупп(группа1,…,группаN)

 

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

р.Кредит.ИзГрупп(группа1,…,группаN)

 

Истина, если счёт кредита исходной проводки содержится в одной из указанных групп счетов.

Приведём примеры:

Выражение в поле фильтра

 

Устанавливает ограничения:

($=="Касса1")||($=="Касса2")

 

Счёт в данном поле проводки может иметь значение Касса1 или Касса2.

ИзГрупп("Наличные", "Безналичные") && !($=="Касса3")

 

Счёт в данном поле проводки должен быть из групп счетов Наличные или Безналичные, но не должен быть счётом Касса3.

р.Дебет.ИзГрупп("Наличные", "Безналичные") && р.Кредит.ИзСписка("Покупатели", "Поставщики")

 

Счёт дебета исходной проводки должен быть из групп счетов Наличные или Безналичные, а счёт кредита исходной проводки — счётом Покупатели, либо счётом Поставщики.

15.4. Счета в правилах генерации зависимых проводок

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

Обозначение

 

Указывает, что у проводки значением этого поля будет:

$

 

Тот же счёт, что и в этом поле у исходной проводки.

"НазваниеСчёта"

 

Указанный счёт.

р.Дебет

 

Счёт дебета исходной проводки.

р.Кредит

 

Счёт кредита исходной проводки.

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

15.5. Даты в правилах зависимых проводок

В зависимых проводках ФинГрада, как и в Excel, можно использовать даты. Чаще всего в поле Дата правил генерации зависимых проводок стоит значение $ — это означает, что даты у зависимых проводок такие же, как у родительской проводки.

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

Выражение

 

Значение

$+1 или р.Дата+1

 

дата, следующая после даты родительской проводки.

$–7 или р.Дата–7

 

дата, которая на 7 дней раньше даты родительской проводки.

Переменные, выдающие даты. В ФинГраде есть встроенные переменные, выдающие даты:

Переменная

 

Значение

Сегодня

 

сегодняшняя дата

ДатаЗакрытияПериода

 

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

Разность дат. В ФинГраде можно вычитать одну дату из другой. Результат вычитания — количество дней между датами. То есть, результат вычисления выражения

Дата1 – Дата2

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

Например, выражение Сегодня – р.Дата означает количество дней между датой родительской проводки и сегодняшним днём.

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

вДату(строка) — дата, соответствующая строке.

Например, вДату("20.12.2011") — это дата, соответствующая строке "20.12.2011", то есть 20 декабря 2011 года.

Замечание. Если записать в поле комментария правила генерации зависимой проводки выражение р.Дата, то в сгенерированную проводку будет помещено число. Например, для даты родительской проводки 20 декабря 2011 значение выражения р.Дата в поле комментария будет показано не как 20 декабря 2011, и не как 20.12.2011, а как число 40897! Дело в том, что в ФинГраде, как и в Excel, даты это на самом деле разновидность чисел. Числовое значение даты — это количество дней, прошедших с 1 января 1990 года. Дата 20 декабря 2011 года хранится в ФинГраде как число 40897, потому что с 1 января 1990 года до 20 декабря 2011 прошло 40897 дней. Лишь при отображении в колонках отчётов ФинГрада, имеющих тип Дата, эти числа отображаются в виде день.месяц.год.

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

ДатуВСтроку(дата)

Например, ДатуВСтроку("31.03.2015") — это строка "31.03.2015". Или, например, ДатуВСтроку(42095) — это дата 1 апреля 2015 года.

Получение дат начала/конца периодов. Иногда бывает нужно получить дату начала или окончания какого-либо периода. Например, дату начала недели или окончания квартала. Для этого в ФинГраде есть функции типа НачалоНедели(дата), КонецКвартала(дата) и т.д.

Например, НачалоНедели("03.02.2015") — это дата "02.02.2015", потому что 2 февраля 2015 года — это понедельник. А, например, КонецКвартала("03.02.2015") — это дата "31.03.2015" (последний рабочий день марта).

Замечание. Как и поле Дата, результат получения дат начала/конца периодов — это число. Чтобы перевести это число формат «дд.мм.гггг», используйте команду ДатуВСтроку(дата).

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

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

Если дата является рабочим днём, то функция ЭтоРабочийДень(дата) возвращает значение Истина, в обратном случае функция возвращает значение Ложь.

Пример использования функции ЭтоРабочийДень – поле Дата фильтра правила зависимой проводки.

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

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

В зависимости от параметра Смещение функция возвращает следующие значения:

  • 0 – ближайший рабочий день, следующий после заданной даты;
  • положительное число - ближайший рабочий день к заданной дате плюс количество дней, указанное в параметре Смещение;
  • отрицательное число - ближайший рабочий день, предшествующий заданной дате минус количество дней, указанное в параметре Смещение.

Например, результатом вычисления функции БлижайшийРабочийДень("02.10.2021",0) будет дата 04.10.2021.

Количество рабочих дней между двумя датами рассчитывает функция РабочихДнейМежду(Дата1,Дата2). Результат вычисления функции будет отрицательным, если Дата2 предшествует Дате1, и равным 0, если Дата1 равна Дате2.

Например, результат вычисления функции РабочихДнейМежду(“20.09.2021”,”22.09.2021”) равен двум.

Функции БлижайшийРабочийДень(дата,смещение) и РабочихДнейМежду(Дата1,Дата2) могут применяться в формулах, используемых в шаблонах документов и трансформациях.

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

Функции и переменные для работы с датами

Функция или переменная

 

Значение

р.Дата

 

Дата исходной (родительской) проводки.

Сегодня

 

Сегодняшняя дата.

ДатаЗакрытияПериода

 

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

вДату(строка)

 

Преобразование строки в дату.

Например, вДату("31.12.2010") — это дата, соответствующая строке "31.12.2010", то есть дате 31 декабря 2010 года.

ДатуВСтроку(дата)  

Преобразование даты в строку в формате «дд.мм.гггг».

Пример: результатом выполнения команды ДатуВСтроку("31.03.2015") будет строка "31.03.2015". А результат выполнения команды ДатуВСтроку(42095) — это 1 апреля 2015 года.

НачалоНедели(дата)   Дата начала недели, которой принадлежит передаваемая дата.
КонецНедели(дата)   Дата окончания недели, которой принадлежит передаваемая дата.
НачалоМесяца(дата)   Дата начала месяца, которому принадлежит передаваемая дата.
КонецМесяца(дата)   Дата окончания месяца, которому принадлежит передаваемая дата.
НачалоКвартала(дата)   Дата начала квартала, которому принадлежит передаваемая дата.
КонецКвартала(дата)   Дата окончания квартала, которому принадлежит передаваемая дата.
НачалоПолугодия(дата)   Дата начала полугодия, которому принадлежит передаваемая дата.
КонецПолугодия(дата)   Дата окончания полугодия, которому принадлежит передаваемая дата.
НачалоГода(дата)   Дата начала года, которому принадлежит передаваемая дата.
КонецГода(дата)   Дата окончания года, которому принадлежит передаваемая дата.
ЭтоРабочийДень(дата)   Истина или Ложь в зависимости от положения даты в производственном календаре.
БлижайшийРабочийДень(дата,смещение)   Дата ближайшего рабочего дня согласно производственному календарю с учетом значения параметра Смещение.
РабочихДнейМежду(Дата1,Дата2)   Количество рабочих дней согласно производственному календарю между указанными датами.

15.6. Аналитики в правилах зависимых проводок

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

Выражение

 

Значение

Аналитика(ИмяАналитики)

 

Значение аналитики с указанным именем.

Например, Аналитика("Вид НДС") — значение аналитики с именем Вид НДС.

Если имя аналитики не содержит пробелов и специальных символов, то её значение можно получить, указав вместо Аналитика(ИмяАналитики) простоИмяАналитики (без кавычек). Например, вместо Аналитика("Контрагент") можно написать просто Контрагент, или р.Контрагент.

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

.Колонка(ИмяКолонки)

 

Чтобы получить значение указанной колонки.

.ИстКолонка(дата, ИмяКолонки)

 

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

Если имя колонки не содержит пробелов и специальных символов, то значение колонки можно получить, указав вместо .Колонка(ИмяКолонки) просто .ИмяКолонки (без кавычек).Например, вместо р.Контрагент.Колонка("ИНН") можно написать просто р.Контрагент.ИНН.

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

Например, ЗначениеАналитики("Сотрудник", "Иванов А.А.").

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

.ИзСписка(Значение1,… ,ЗначениеN)

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

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

р.Сотрудник.Удалено — истина, если аналитика Сотрудник была удалена.

Преобразование значения аналитики в строку. Возвращает строковое значение аналитики, например:

р.Доля.ВСтроку — возвращает значение аналитики в виде строки ("0.5", "0.45", "0.8" и т.д.).

Примеры:

  • Аналитика("Контрагент") или просто Контрагент, или р.Контрагент — значение аналитики Контрагент родительской проводки;
  • Аналитика("Контрагент").Колонка("Адрес") — значение колонки Адрес аналитики Контрагент родительской проводки;
  • Аналитика("Акционеры").ИстКолонка(р.Дата, "Доля") — значение исторической колонки Доля аналитики Акционеры родительской проводки по состоянию на дату проводки;
  • Аналитика("Вид НДС")— значение аналитики Вид НДС родительской проводки. Это выражение проще записать нельзя, так как имя аналитики содержит пробел;
  • Аналитика("Вид НДС").ИзСписка("18%","10%") — возвращает значение «Истина», если значение аналитики Вид НДС родительской проводки — это 18% или 10%, иначе возвращает значение «Ложь».

15.7. Математические функции

В зависимых проводках ФинГрада можно использовать следующие функции:

Функция

 

Значение

Знак(Число)

 

1, если аргумент функции положительный; 0, если аргумент функции нулевой; –1, если аргумент функции отрицательный.

Модуль(Число)

 

Модуль (абсолютная величина) числа.

Например, Модуль(5) это 5, Модуль(–10) это 10, Модуль(0) это 0.

Округл(Число, КоличЗнаков)

 

Округление числа или числового выражения до указанного количества знаков в дробной части.

Например, Округл(3.14159,2) это 3.14, Округл(2.71828,0) это 3.

15.8. Валюты в правилах зависимых проводок

Для работы с валютами в зависимых проводках ФинГрада можно использовать следующие выражения:

Выражение

 

Значение

р.Валюта

 

Валюта исходной (родительской) проводки (короткое имя).

Например, RUR — рубли, USD — доллары США, EUR — евро.

ГлавнаяВалюта

 

Обозначение главной валюты ФинГрада (короткое имя)

Например, RUR — рубли, USD — доллары США, EUR — евро.

Конвертировать(Число, Валюта1, Валюта2, Дата)

 

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

Например, Конвертировать(р.Сумма, р.Валюта, "EUR", р.Дата) — выдаёт результат конвертации суммы родительской проводки в евро по курсу на дату проводки

Конвертировать(Число, Валюта1, Валюта2)

 

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

Например, Конвертировать(р.Сумма, р.Валюта, "USD") — выдаёт результат конвертации суммы родительской проводки в доллары США по сегодняшнему курсу

ОбменныйКурс(Валюта1, Валюта2, Дата)

 

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

Например, выражение ОбменныйКурс("EUR","RUR",вДату("1.1.2012")) выдаёт результат 41,6714 (количество рублей на 1 евро на дату 1 января 2012 года)

ОбменныйКурс(Валюта1, Валюта2)

 

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

Например, выражение ОбменныйКурс("USD","RUR") выдаст количество рублей за 1 доллар США по сегодняшнему курсу.

15.9. Функции выбора и проверки по маске

Для создания сложных выражений в зависимых проводках ФинГрада можно использовать следующие функции:

Выбрать(Условие, Значение1, Значение2)  это выбор одного из значений в зависимости от условия. Здесь Условие — это логическое выражение, Значение1 и Значение2 — любые выражения. Если Условие истинно, то значением функции будет Значение1, а если Условие ложно, то значением функции будет Значение2.

Пример. Выбрать(р.Дата < вДату("01.01.2008"), 0, р.Сумма) — если дата текущей проводки до 1 января 2008 года, то результат функции 0, в противном случае результат функции равен сумме родительской проводки.

ВыбратьНеПустое(Выражение, ЗначениеПоУмолчанию)  если Выражение имеет не пустое значение, то значение функции равно значению Выражения. Иначе оно равно ЗначениюПоУмолчанию.

Замечание. Иначе говоря, ВыбратьНеПустое(Выражение, ЗначениеПоУмолчанию) —это краткая и более удобная запись формулы Выбрать(Выражение <> "", Выражение , ЗначениеПоУмолчанию). Если Выражение длинное и сложное, то повторное его написание в формуле сильно снижает читаемость формулы и повышает риск возникновения ошибок.

Оператор выбора. Вместо функции Выбрать можно использовать конструкцию:

Условие ? Значение1 : Значение2

Отличие от функции Выбрать в том, что здесь вычисляется Условие, после чего вычисляется только нужное значение (Значение1 если Условие истинно, и Значение2 если Условие ложно). А для функции Выбрать вычисляются все аргументы.

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

Пример. Функция Выбрать(р.Займ.Валюта=="", р.Займ.Сумма, Конвертировать(р.Займ.Сумма, р.Займ.Валюта, ГлавнаяВалюта)) не будет работать правильно. Так как если р.Займ.Валюта имеет пустое значение, то при вычислении функции Выбрать произойдёт ошибка в ходе вычисления выражения Конвертировать(р.Займ.Сумма, "", ГлавнаяВалюта). А конструкция р.Займ.Валюта=="" ? р.Займ.Сумма : Конвертировать(р.Займ.Сумма, р.Займ.Валюта, ГлавнаяВалюта) будет работать правильно.

ПодходитПодМаску(Строка,Маска1,Маска2) — функция выдаёт значение «истина», если заданная строка подходит под хотя бы одну из перечисленных масок, и «ложь», если не подходит ни под одну из этих масок. Здесь маска — это строка (она может задаваться строковой константой или символьным выражением), в которой символ * означает любую последовательность символов, а ? означает любой единичный символ.

Примеры:

  • ПодходитПодМаску(р.Комментарий,'*91.*') — возвратит значение Истина, если в комментарий родительской проводки входит подстрока «91.».
  • ПодходитПодМаску(р.Комментарий,'91.*','92.1*') — возвратит значение Истина, если комментарий родительской проводки начинается с сочетаний символов «91.» или «92.1».

ПодходитПодРегВыр(Строка,РегВыр1,РегВыр2) — функция выдаёт значение «истина», если заданная строка подходит хотя бы под одно из перечисленных регулярных выражений, и «ложь», если не подходит ни под одно из этих регулярных выражений.

Замечание. Точный синтаксис регулярных выражений можно посмотреть здесь: http://msdn.microsoft.com/ru-ru/library/bb982727.aspx. В ФинГраде используется ECMA вариант регулярных выражений.

ПользовательИзГруппы(Имя группы) — проверяет, входит ли пользователь в указанную группу.

Примеры:

  • ПользовательИзГруппы("Бухгалтерия") — возвратит значение Истина, если пользователь входит в группу Бугхалтерия.

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

Простой пример. Допустим, нужно запретить проводить проводки, если дата проводки — 90 и более дней в прошлом. В блоке Фильтр ограничение может выглядеть так:

Если теперь попытаться провести проводку с датой старше 90 дней, ФинГрад выведет ошибку:

Может возникнуть вопрос: проверка относится к дате, тогда почему мы поместили команду ВыброситьОшибку в поле Комментарий? Это объясняется тем, что обработка полей в блоке Фильтр идёт последовательно, от верхнего поля к нижнему. В нашем примере проверяется сначала дебет и кредит счетов. Затем — дата. Если дата проводки старше текущей более чем на 90 дней, ФинГрад переходит к следующей строке фильтра, в данном случае — Комментарий. В этот момент и выполняется команда ВыброситьОшибку. Если же дата проводки не старше 90 дней, то проводка не попадёт под условия фильтра, её можно будет провести и пользователь не увидит сообщение об ошибке.

15.10. Общие переменные и свойства проводок

Для удобства соберём сведения о переменных и свойствах проводок, которые можно использовать при задании зависимых проводок ФинГрада, в несколько таблиц.

15.10.1. Глобальные (общие) переменные

Переменная

 

Значение

р

 

Родительская проводка.

$

 

Значение текущего поля в исходной (родительской) проводке.

ГлавнаяВалюта

 

Обозначение главной валюты (короткое имя, например RUR).

ДатаЗакрытияПериода

 

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

ЛюбоеЗначение

 

Логическое значение «истина».

Сегодня

 

Сегодняшняя дата.

ТекущийПользователь

 

Идентификатор (login) текущего пользователя ФинГрада.

15.10.2. Свойства проводки

Свойство

 

Значение свойства

 

Пример

Дебет

 

Дебетуемый счёт проводки

 

р.Дебет

Кредит

 

Кредитуемый счёт проводки

 

р.Кредит

Дата

 

Дата проводки

 

р.Дата

Комментарий

 

Комментарий к проводке

 

р.Комментарий

Валюта

 

Валюта проводки (короткое имя)

 

р.Валюта

Сумма

 

Сумма проводки

 

р.Сумма

КоличествоТовара

 

Количество товара в проводке

 

р.КоличествоТовара

Аналитика("имя")

 

Значение указанной аналитики проводки

 

р.Аналитика("ИНН")

15.11. Пример использования — начисление НДС с полученных авансов

В п. 14.3. Пример — начисление НДС с полученных авансов мы рассмотрели пример, в котором описали использование механизма генерации зависимых проводок для начисления обязательств по уплате в бюджет НДС при получении авансов за предстоящие работы или услуги. Но мы делали это ещё до описания языка зависимых проводок. Поэтому там мы использовали лишь простейшие возможности языка зависимых проводок. В частности, нам пришлось ограничиться случаем, когда для всех поступающих авансов применяется ставка НДС 18%.

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

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

  1. Выберем в главном меню раздел Основная информация | Аналитики.
  2. Выберем в списке аналитик строку Вид НДС и добавим к аналитике Вид НДС две колонки числового типа с именами ДоляНДС и ДоляБезНДС.
  3. Щёлкнув гиперссылку Открыть справочник, выведем справочник аналитики Вид НДС. Нажмём кнопку и заполним ячейки в колонках ДоляНДС и ДоляБезНДС:

Здесь для заполнения ячеек удобно использовать калькулятор Windows. Там можно вычислить нужное значение, например, 18/118, нажать комбинацию клавиш +, затем переключиться в ФинГрад, щёлкнуть мышью ту ячейку справочника, в которую надо вставить это значение, и нажать +.

Замечание. Можно было бы сделать колонки ДоляНДС и ДоляБезНДС не числового, а текстового типа. Тогда в этих колонках можно было бы указывать значения в виде дробей, например: 18/118 и 100/118.

  1. Нажмём кнопку для сохранения изменений и закроем окно справочника Вид НДС, а затем окно Редактор аналитик. Эти окна можно закрыть нажатием кнопки в правом верхнем углу окна).

Задаём правило для генерации зависимых проводок. Исправим то правило генерации зависимых проводок, которое мы создали в п. 14.3. Пример — начисление НДС с полученных авансов. Поступаем следующим образом.

  1. Выберем в главном меню ФинГрада раздел Основная информация | Правила зависимых проводок.
  2. Откроется окно Редактирование правил зависимых проводок. щёлкнем мышью гиперссылку Начисление НДС на полученные авансы в правом верхнем углу окна. Это правило, которое мы создали в предыдущем примере.
  3. Нажмём кнопку . Откроется окно Выберите поля. Добавим в список Выбранные поля поля Комментарий и Вид НДС. Затем нажмём кнопку .
  4. Заполним прямоугольник Фильтр следующим образом:

То есть, мы будем генерировать зависимые проводки для всех проводок, в которых кредитуется счёт Расчеты по полученным авансам, и значение аналитики Вид НДС не равно «Без НДС».

  1. Заполним прямоугольник Зависимые так:

Эти правила означают, что в создаваемой зависимой проводке:

  1. дебетуемым счётом будет кредитуемый счёт родительской проводки (счёт Расчеты по полученным авансам);
  2. кредитуемым счётом будет счёт НДС;
  3. поля Дата, Валюта и Сумма будут такими же, как у исходной (родительской) проводки;
  4. комментарий в зависимой проводке составляется из комментария к родительской проводки с добавлением строки вида (Начисление НДС 18%), или (Начисление НДС 10%), и т. п.;
  5. сумма зависимой проводки равна сумме родительской проводки, умноженной на значение колонки ДоляНДС аналитики ВидНДС родительской проводки.
  1. Сохраним изменённое правило, щёлкнув мышью кнопку на панели инструментов окна Редактирование правил зависимых проводок.
  2. Нажмём кнопку или кнопку в правом верхнем углу окна Редактирование правил зависимых проводок, чтобы закрыть это окно.

Теперь для проводок, в которых кредитуется счёт Расчеты по полученным авансам, значение аналитики Вид НДС не равно «Без НДС», и сумма проводки не равна нулю, ФинГрад будет генерировать зависимые проводки, как показано на рисунке:

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

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

  1. Выберем в главном меню ФинГрада раздел Основная информация | Правила зависимых проводок.
  2. В окне Редактирование правил зависимых проводок щёлкнем мышью гиперссылку Начисление НДС на полученные авансы в правом верхнем углу окна (выберем правило, которое мы создали и отредактировали ранее).
  3. Заполним блок Зависимые так:

Теперь в создаваемой зависимой проводке:

  1. валютой проводки будет рубль (обозначение "RUR);
  2. сумма проводки равна сумме родительской проводки, умноженной на значение колонки ДоляНДС аналитики ВидНДС родительской проводки, и преобразованной в рубли по курсу на дату родительской проводки.
  1. Сохраним изменённое правило, нажав кнопку на панели инструментов окна Редактирование правил зависимых проводок.
  2. Щёлкнем кнопку или кнопку в правом верхнем углу окна Редактирование правил зависимых проводок, чтобы закрыть это окно.

Теперь для проводок, в которых кредитуется счёт Расчеты по полученным авансам, ФинГрад будет генерировать зависимые проводки в рублях, даже если аванс получен в валюте. Например, на приведённом выше рисунке поступил аванс в сумме 50000 дол. США, а ФинГрад сгенерировал проводку по начислению НДС в рублях: