Глава 14. Применение зависимых проводок

14.1. Общие сведения

Кому будет полезен этот раздел?

Раздел "Зависимые проводки" предназначен для консультантов, производящих настройку системы для компаний, администраторов ФинГрад и специалистов по управленческому учету.

Какие задачи можно решить с помощью зависимых проводок?

Эта функция ФинГрад на основе проводки о какой-либо хозяйственной операции автоматически создает зависимые проводки по заданным правилам.

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

  • для преобразования проводок при импорте из внешних систем - 1С, iiko, StoreHouse и других;
  • для автоматического выделение части суммы по хозяйственной операции - например, начисления процента с продаж менеджеру, выделения НДС и НСП и т.д.

14.2. Быстрый старт

14.2.1. Создание зависимой проводки

В ФинГраде есть одно встроенное правило создания зависимых проводок. Чтобы увидеть это правило в действии, создадим и проведем проводку. Значения полей проводки выберем такие, чтобы они удовлетворяли условиям правила (фильтру).

Встроенное правило требует, чтобы дебетуемый счет относился к группе счетов Расходы денежных средств, а кредитуемый счет - к группе Денежные средства (забаланс). Кроме того, поле Бюджет должно иметь значение Заявки, а поле Оплата должно иметь непустое значение. При создании собственных правил вы сможете сами настраивать фильтр.

На основе введенной нами проводки ФинГрад автоматически создает зависимую проводку. В соответствии с правилом, в зависимую проводку копируются все поля основной проводки, за исключением поля Бюджет - в зависимой проводке оно остается пустым.

14.2.2. Отладка правила зависимой проводки

Рассмотрим отладку простого правила начисления менеджерам бонусов с продаж.

14.3. Как работают зависимые проводки

14.3.1. Общее описание модели зависимых проводок

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

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

  • Фильтр - это набор условий. Если проводка соответствует всем условиям фильтра, на ее основе создается зависимая проводка.
  • Поля зависимой проводки (счета, даты, суммы, комментарий) получают значения, указанные в правиле; значения остальных полей копируются в зависимую проводку из исходной (родительской) проводки.

Формирование зависимой проводки происходит так:

  1. вы создаете (вручную или с помощью импорта) проводку и проводите ее
  2. ФинГрад проверяет, каким имеющимся правилам зависимых проводок соответствует новая проводка
  3. если проводка подходит под все условия правила, ФинГрад создает зависимую проводку в соответствии с этим правилом

14.3.2. Фильтр проводок

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

Знак $ означает текущее значение поля основной проводки. То есть $ в поле Сумма фильтра означает значение суммы в основной проводке.

Если фильтр по полю не нужен, в фильтре должен быть написан текст ЛюбоеЗначение.

14.3.3. Работа с числовыми полями

Примеры фильтров:

Значение фильтра

 

Требование к полю проводки

500

 

Значение поля равно 500
$ == 500

 

Значение поля равно 500
$ <= 500

 

Значение поля меньше или равно 500
$ >= 500

 

Значение поля больше или равно 500
$ != 500

 

Значение поля не равно 500
ЛюбоеЗначение   Значение поля может быть любым
$<300 || $>500 Значение поля меньше 300 или больше 500
>=300 && $<=500   Значение поля находится в диапазоне от 300 до 500 включительно
$>500 && $ != 1000   Значение поля - любое число больше 500, кроме 1000

Распространенные ошибки:

Значение фильтра

 

Требование к полю проводки

>500   Не указан символ $ (правильная запись: $>500)
$ = 500   Знак = означает оператор присваивания, а не сравнения
для сравнения используется оператор ==
Правильная запись: $ == 500
$ < = 500   “Не равно” обозначается символами !=
Правильная запись: $ != 500
$ < = 500   Между символами < и = не должно быть пробела
Правильная запись: $ <= 500
$ ! = 500   Между символами ! и = не должно быть пробела
Правильная запись: $ != 500

Примечание. В языке зависимых проводок для отделения дробной части числа используется точка, а не запятая. Запятая используется для отделения параметров (аргументов) функций - например, функция $.ИзСписка(1,3) имеет два параметра: 1 и 3.

Пример задания числового фильтра:

14.3.4. Работа со строковыми полями

Строковые значения (например, поля Дебет, Кредит, Комментарий, Валюта) записываются в кавычках, например, “Расчеты с сотрудниками” (можно использовать и одинарные кавычки: ‘Расчеты с сотрудниками’).

Примеры фильтров:

Значение фильтра

 

Требование к полю проводки

“Продажи”

 

в поле указано значение Продажи
$ == “Продажи”

 

в поле указано значение Продажи
$ != Продажи

 

в поле указано любое значение, кроме Продажи
ЛюбоеЗначение

 

значение поля может быть любым
$ == "Продажи"  ||   $ == "Расчеты с покупателями"

 

в поле указано значение Продажи или Расчеты с покупателями
$.ИзСписка(“Склад”, “Материалы”, “Товары на складах”)   в поле указано любое из трех значений Склад, Материалы или Товары на складах
$.ИзГрупп(“Товарные запасы”, “Основные средства”) в поле указан счет, входящий в любую из групп счетов - Товарные запасы или Основные средства

Распространенные ошибки:

Значение фильтра

 

Требование к полю проводки

Продажи   Строковое значение не заключено в кавычки
Правильная запись: “Продажи”
$ = “Продажи”   Знак = означает оператор присваивания, а не сравнения для сравнения используется оператор ==
Правильная запись: $ == “Продажи”
== “Продажи”   Не указан символ $
Правильная запись: $ == “Продажи”  
$ <> “Продажи”   “Не равно” обозначается символами !=
Правильная запись: $ != “Продажи”

Пример задания строкового фильтра:

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

14.3.5. Работа с датами

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

Примеры фильтров:

Значение фильтра

 

Требование к полю проводки

“15.04.2021” 

 

в поле указана дата 15.04.2021
$<”01.05.2021”

 

в поле указана дата ранее 01.05.2021
Сегодня 

 

в поле указана сегодняшняя дата
$ <= Сегодня

 

в поле указана дата не позднее текущей
$ == Сегодня - 1 

 

в поле указана дата вчерашнего дня

Распространенные ошибки:

Значение фильтра

 

Требование к полю проводки

$<01.05.2021   Значение даты не заключено в кавычки
Правильная запись: $<”01.05.2021”
$ == “Сегодня”   Кавычки не нужны
Правильная запись: $ == Сегодня
$ = Сегодня    Знак = означает оператор присваивания, а не сравнения для сравнения используется оператор ==
Правильная запись: $ == Сегодня

Описание всех функций работы с датами приведено в справочной части этой главы.

14.3.6. Работа с валютами

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

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

14.3.7. Логические выражения

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

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

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

Значение поля исходной проводки

Условие фильтра

Результат

500 500 Истина
500 4400 Ложь
Продажи “Продажи” Истина
Расчеты с покупателями “Расчеты с поставщиками” Ложь

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

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

  • > - больше
  • < - меньше
  • >= - больше или равно
  • <= - меньше или равно
  • == - равно
  • != - не равно

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

  • && - логический оператор “И” - ставится между двумя логическими выражениями; получившееся выражение истинно, если истинны оба исходных логических выражения
  • || - логический оператор “Или” ставится между двумя логическими выражениями; получившееся выражение истинно, если истинно хотя бы одно исходное логические выражение
  • ! - логический оператор “Не” - если поставить этот оператор перед логическим выражением, его результат меняется на противоположный (Истина на Ложь, Ложь на Истина)

Рассмотрим примеры:

Значение поля исходной проводки

Условие фильтра

Результат

Комментарий

500 $ > 300 && $ < 400 Ложь Выражение истинно только для значений, которые больше 300 и меньше 400. Значение 500 этим условиям не удовлетворяет, поэтому значение выражения - Ложь
500 $ < 300 || $ > 400 Истина Выражение истинно для значения 500, так как 500 удовлетворяет одному из условий,связанных оператором “Или” ($ > 400)
Продажи $ != "Активы" Истина Выражение истинно, так как значение Продажи не равно значению Активы
Расчеты с покупателями $ == "Активы"  ||   $ == "Обязательства" Ложь Выражение ложно, так как значение Расчеты с покупателями не удовлетворяет ни одному из условий
Обязательства $ == "Активы"  ||   $ == "Обязательства" Истина Выражение истинно, так как значение Обязательства удовлетворяет одному из условий

14.3.8. Описание полей зависимых проводок

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

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

Выражение

 

Значение поля зависимой проводки

$   значение этого же поля родительской проводки
$*0.5   значение поля родительской проводки, умноженное на 0,5
1000   значение strong>1000
“Продажи”   Продажи
Сегодня   текущая дата
р.Дебет   значение поля Дебет родительской проводки
р.Аналитика("Контрагент")   значение аналитики Контрагент родительской проводки
р.Аналитика("Контрагент").Колонка("ИНН")   значение колонки ИНН аналитики Контрагент родительской проводки
"НДС по " + р.Аналитика("Контрагент") + ", ИНН " + р.Аналитика("Контрагент").Колонка("ИНН")   Пример значения: НДС по ООО “Свет”, ИНН 7755012156

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

Можно указать выражение, результат которого будет записан в поле зависимой проводки. Например, если для поля Сумма указать выражение $*0.5, в это поле запишется половинная сумма родительской проводки.

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

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

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

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

Функции по работе с аналитиками приведены в справочной части этой главы.

Пример задания полей зависимой проводки:

14.4. Справочник по функциям

Ниже приведены основные функции языка зависимых проводок Более подробное описание языка зависимых проводок и допонительные примеры приведены в Глава 15. Язык зависимых проводок.

14.4.1. Функции работы со счетами

Для работы со счетами можно использовать функции:

  • ИзСписка(счёт1,…,счётN) - возвращает Истину, если счет перечислен в списке счёт1,…,счётN
  • ИзГрупп(группа1,…,группаN) - возвращает Истину, если счет содержится в одной из указанных групп счетов группа1,…,группаN
  • ЭтоГруппа - возвращает Истину, если счет имеет дочерние счета
  • Комментарий - возвращает значение комментария к счету, позволяет отфильтровать счета, имеющие заданный комментарий

Примеры использования:

Значение поля исходной проводки

Условие фильтра

Результат

Комментарий

Расчеты с покупателями  ИзСписка("Расчеты с поставщиками","Расчеты с покупателями") Истина Выражение истинно, так как счет Расчеты с покупателями входит в список счетов функции
Расчеты с покупателями ИзСписка("Расчеты с покупателями","Активы", “Обязательства”) Ложь Выражение ложно, так как счет Расчеты с покупателями не содержится в списке счетов функции
Товары на складах ИзГрупп("Активы") Истина Выражение истинно так как счет Товары на складах принадлежит группе счетов Активы
Товары на складах $.ИзГрупп("Активы") && !$.ИзГрупп("Товарные запасы") Ложь Счет Товары на складах соответствует первому условию, но не соответствует второму условию !$.ИзГрупп("Товарные запасы"), которое требует, чтобы счет не принадлежал группе Товарные запасы
Активы $.ЭтоГруппа Истина Выражение истинно так как счет Активы имеет зависимые счеты (является группой)

14.4.2. Функции работы с датами

ФинГрад имеет следующие функции и переменные для работы с датами:

Выражение

 

Значение

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

 

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

 

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

14.4.3. Переменные и свойства проводок

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

Переменная

 

Значение

р

 

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

 

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

 

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

 

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

 

Логическое значение «истина» (выражение истинно вне зависимости от значения полей проводки)
Сегодня

 

Сегодняшняя дата
ТекущийПользователь

 

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

Проводки ФинГрад имеют следующие свойства:

Выражение

 

Значение

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

 

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

 

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

14.4.3. Переменные и свойства проводок

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

Переменная

 

Значение

р

 

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

 

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

 

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

 

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

 

Логическое значение «истина» (выражение истинно вне зависимости от значения полей проводки)
Сегодня

 

Сегодняшняя дата
ТекущийПользователь

 

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

Проводки ФинГрад имеют следующие свойства:

Свойство

 

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

Дебет

 

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

 

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

 

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

 

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

 

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

 

Сумма проводки
КоличествоТовара

 

Количество товара в проводке
Аналитика("имя")

 

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

14.4.4. Функции работы с аналитиками

ФинГрад имеет следующие функции и переменные для работы с аналитиками:

Функция

 

Значение

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

 

Значение аналитики с указанным именем.
Например, р.Аналитика("Вид НДС") — значение аналитики родительской проводки с именем Вид НДС.
Примечание. Если имя аналитики не содержит пробелов, обратиться к ее значению можно без указания функции Аналитика, например, р.Контрагент
Аналитика(ИмяАналитики).Колонка(ИмяКолонки)

 

Значение колонки указанной аналитики
Например Аналитика("Контрагент").Колонка(“ИНН”) - значение колонки ИНН аналитики Контрагент
Примечание. Если имя колонки не содержит пробелов, обратиться к ее значению можно без указания функции Аналитика, например, р.Контрагент.ИНН
Аналитика(ИмяАналитики).ИстКолонка(дата, ИмяКолонки)

 

Значение указанной исторической колонки по состоянию на заданную дату
Например Аналитика("Филиал").ИстКолонка(“01.01.2021”, “Руководитель”) - значение колонки Руководитель аналитики Филиал по состоянию на 01.01.2021
Аналитика(ИмяАналитики).ИзСписка(Значение1,… ,ЗначениеN)

 

возвращает логическое значение (Истина или Ложь) в зависимости от того, входит ли значение указанной аналитики в список значений
Например, выражение Аналитика("Вид НДС").ИзСписка("20%","10%") возвращает значение Истина, если значение аналитики Вид НДС родительской проводки равно 20% или 10%, иначе возвращает значение Ложь
Аналитика(ИмяАналитики).Удалено

 

Возвращает Истину, только если выбранная аналитика удалена Например р.Сотрудник.Удалено — истина, если аналитика Сотрудник была удалена
Аналитика(ИмяАналитики).ВСтроку

 

Возвращает строковое значение аналитики Например р.Сотрудник.Аналитика(“Бонус”) может вернуть строковое значение “0.05”

14.4.5. Функции работы с валютами

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

Функция

 

Значение

р.Валюта

 

Валюта исходной (родительской) проводки (короткое имя).
Например, RUR — рубли, USD — доллары США, EUR — евро
ГлавнаяВалюта

 

Обозначение главной валюты ФинГрада (короткое имя)
Например, RUR — рубли, USD — доллары США, EUR — евро.
Конвертировать(Число, Валюта1, Валюта2, Дата)

 

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

 

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

 

Обменный курс при обмене первой валюты во вторую валюту по курсу на указанную дату.
Например, выражение ОбменныйКурс("EUR","RUR",вДату("1.1.2021")) выдаёт результат 90,7932  (количество рублей на 1 евро на дату 1 января 2021 года)
ОбменныйКурс(Валюта1, Валюта2)

 

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