Как правильно создать условие для заполнения КЭК в типовой операции?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Финансы и профессиональные услуги
← На главную

При настройке типовых операций в конфигурации 1С:БГУ часто возникает необходимость гибкого заполнения реквизитов, таких как КЭК (Код экономической классификации), в зависимости от конкретного счета или других параметров документа. Многие разработчики сталкиваются с ошибками при попытке использовать простой программный код в полях настроек типовой операции. Давайте разберемся, как правильно настроить такие условия.

Понимание архитектуры типовых операций

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

  1. Типизация данных: Счета в 1С являются ссылочными объектами, а не строками. Сравнение Счет = \"106.6И\" приведет к ошибке или некорректной работе. Необходимо использовать специальные методы для получения ссылок.
  2. Доступность функций: В выражениях можно использовать только те функции, которые доступны в контексте исполнения типовой операции (обычно это экспортные функции общих модулей, например, БухгалтерскиеОперации).
  3. Контекст: Необходимо правильно передавать параметры, такие как Документ.Ссылка или данные строки табличной части, иначе функция вернет пустое значение или значение по умолчанию.

Шаг 1: Правильное сравнение счетов

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


ВЫБОР
    КОГДА Проводка.СчетДт = БухгалтерскиеОперации.СчетПоКоду("106.6И")
        ТОГДА БухгалтерскиеОперации.КЭКПоКоду("271")
    ИНАЧЕ БухгалтерскиеОперации.ПолучитьПараметрыАмортизацииОС(СтрокаТаблицы.ОсновноеСредство, Документ.Ссылка, "КЭКЗатрат")
КОНЕЦ

Здесь мы используем конструкцию ВЫБОР-КОГДА, которая является стандартной для выражений СКД. Если условие выполняется, система устанавливает 271, в противном случае выполняется типовая функция получения параметров амортизации.

Шаг 2: Использование иерархических проверок

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


ВЫБОР
    КОГДА БухгалтерскиеОперации.СчетВИерархии(Проводка.СчетДт, "106.3И") 
        ТОГДА БухгалтерскиеОперации.КЭКПоКоду("271")
    ИНАЧЕ БухгалтерскиеОперации.ПолучитьПараметрыАмортизацииОС(СтрокаТаблицы.ОсновноеСредство, Документ.Ссылка, "КЭКЗатрат")
КОНЕЦ

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

Почему условие может не срабатывать?

Если вы внесли изменения, но система продолжает подставлять старое значение (например, 340), обратите внимание на следующие моменты:

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

← На главную