При оформлении документа Оказание услуг в программе «1С:Бухгалтерия предприятия 3.0» пользователи часто сталкиваются с автоматическим формированием проводок по зачету авансов (например, по счету 76.09 или 62.02). Если бухгалтерии требуется разносить расчеты обособленно и не закрывать предоплату этим документом, бухгалтерам приходится вручную удалять строки зачета через ручную корректировку движений. Выясним причину такого поведения конфигурации и разберем способы решения задачи как с помощью программной доработки, так и штатными методическими средствами программы.
Проанализируем типовую логику конфигурации. Документ Оказание услуг изначально предназначен для пакетного начисления услуг большому количеству контрагентов (например, в образовательных учреждениях, абонентском обслуживании или коммунальной сфере). В отличие от стандартного документа Реализация (акт, накладная, УПД), в документе Оказание услуг на форме отсутствуют реквизиты выбора порядка зачета предоплаты (такие как «Автоматически», «По документу» или «Не зачитывать»).
Алгоритм проведения жестко закладывает автоматический поиск и зачет предоплаты. Если на момент проведения документа по комбинации аналитики «Организация — Контрагент — Договор» на счете авансов имеется кредитовый остаток, программа безусловно генерирует проводку взаимозачета.
Разберем самый надежный и гибкий способ решения проблемы без снятия типовой конфигурации с поддержки. Для этого используем механизм расширений и директиву &ИзменениеИКонтроль.
Посмотрим на алгоритм формирования проводок: логика подготовки данных находится в модуле менеджера документа ОказаниеУслуг. За установку режима зачета отвечает функция ТекстЗапросаЗачетАвансов(НомераТаблиц).
В типовом коде формирование таблицы запроса содержит жесткое указание:
| ЗНАЧЕНИЕ(Перечисление.СпособыЗачетаАвансов.Автоматически) КАК СпособЗачетаАвансов,
Для полного отключения зачета авансов в этом документе достаточно подменить значение перечисления. В расширении конфигурации переопределяем этот фрагмент следующим образом:
&Вместо("ТекстЗапросаЗачетАвансов")
Функция Расш1_ТекстЗапросаЗачетАвансов(НомераТаблиц)
// В теле запроса заменяем способ зачета:
// Вместо: | ЗНАЧЕНИЕ(Перечисление.СпособыЗачетаАвансов.Автоматически) КАК СпособЗачетаАвансов,
// Указываем:
Текст = СтрЗаменить(
ПродолжитьВызов(НомераТаблиц),
"ЗНАЧЕНИЕ(Перечисление.СпособыЗачетаАвансов.Автоматически) КАК СпособЗачетаАвансов",
"ЗНАЧЕНИЕ(Перечисление.СпособыЗачетаАвансов.НеЗачитывать) КАК СпособЗачетаАвансов"
);
Возврат Текст;
КонецФункции
Если же отключение зачета требуется производить выборочно, а не для абсолютно всех документов, проанализируем доступные реквизиты. В шапке или строках документа можно задействовать малоиспользуемый реквизит, например ВидВзаиморасчетов, либо добавить собственный реквизит флага через расширение. В зависимости от значения этого поля запрос формирует либо вариант Автоматически, либо НеЗачитывать.
Если вносить доработки в программу нельзя или нежелательно, разберем штатный методический вариант. Механизм зачета авансов в «1С:Бухгалтерии 3.0» всегда жестко изолирован в пределах одного договора контрагента.
Оказание услуг заполняем и проводим по второму договору.Поскольку остаток предоплаты числится по другому договору, документ Оказание услуг не увидит кредитового сальдо и проводку зачета аванса не сформирует.
Рассмотрим вариант, при котором учет на счете 76.09 («Прочие расчеты с разными дебиторами и кредиторами») не предполагает деления на авансовую и основную часть задолженности.
Счета учета расчетов с контрагентами.При проведении документа программа не сможет определить авансовый счет и оставит начисление исключительно по счету расчетов без зачета.
Обратим внимание на критические последствия отключения автоматического зачета:
Корректировка долга с видом операции Зачет авансов.