Как сформировать акт сверки в 1С 7.7 (ТиС 9.2) с учетом непроведенных документов

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

В типовой конфигурации «Торговля и Склад» редакции 9.2 отчет «Акт сверки» строится на основании движений по регистрам («Покупатели», «Поставщики», «Взаиморасчеты»). Это стандарт де-факто для бухгалтерского учета: нет проведенного документа — нет зафиксированной операции, а значит, нет и долга. Однако в реальной практике управленческого учета возникают ситуации, когда необходимо увидеть в акте сверки документы, которые еще не проведены (например, товар уже отгружен, но документ «распроводят» для корректировок или используют специфические схемы внутреннего учета).

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

Анализ проблемы: почему стандартный запрос не видит документы

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

Чтобы решить задачу автора, нам необходимо «смешать» данные двух типов источников:

  1. Таблицы движений регистров (для получения официальных задолженностей).
  2. Таблицы самих документов (для получения данных из непроведенных объектов).

Решение: Объединение данных через Таблицу Значений

Поскольку встроенный язык запросов 1С 7.7 («черный запрос») не поддерживает оператор UNION (объединение), который доступен в SQL, нам придется выполнять объединение на уровне программного кода, используя объект ТаблицаЗначений. Рассмотрим этот процесс пошагово.

Шаг 1. Подготовка структуры данных

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

Шаг 2. Выполнение первого запроса (по регистрам)

Выполняем штатный запрос к регистру Покупатели (или иному, используемому в вашей версии акта сверки), чтобы получить все проведенные операции и начальное сальдо. Результаты запроса выгружаем в нашу таблицу значений методом Выгрузить(ТЗ, 0, 0).

Шаг 3. Выполнение второго запроса (по непроведенным документам)

Теперь нам нужно написать запрос к метаданным документов. Проанализируем пример такого запроса:


// Создаем объект Запрос
ЗапросНепров = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период с ДатаНач по ДатаКон;
|Док = Документ.Реализация.ТекущийДокумент, 
|      Документ.ПоступлениеТМЦ.ТекущийДокумент;
|Контрагент = Документ.Реализация.Контрагент, 
|             Документ.ПоступлениеТМЦ.Контрагент;
|Сумма = Документ.Реализация.ИтогСумма, 
|        Документ.ПоступлениеТМЦ.ИтогСумма;
|Статус = Документ.Реализация.Проведен, 
|         Документ.ПоступлениеТМЦ.Проведен;
|Группировка Док;
|Условие (Контрагент = ВыбКонтрагент);
|Условие (Статус = 0); // Выбираем только непроведенные
|";
Если ЗапросНепров.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
КонецЕсли;

Шаг 4. Объединение и сортировка

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

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

ТЗ.Сортировать("Дата,Док");

Расчет «виртуального» сальдо

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

Разберем алгоритм:

  1. Получаем реальное начальное сальдо из регистра на дату начала отчета.
  2. Выводим его в печатную форму как «Входящий остаток».
  3. Запускаем цикл по нашей отсортированной ТаблицеЗначений.
  4. В каждой итерации прибавляем СуммаПриход и вычитаем СуммаРасход из текущего переменного значения сальдо.
  5. Если документ в строке помечен как «непроведенный», визуально выделяем его в акте (например, текстом «(не провед.)»), но продолжаем математический расчет сальдо.

Риски и технические ограничения

При внедрении такого решения необходимо учитывать несколько критических моментов, которые мы выясним, проанализировав специфику 1С 7.7:

1. Скорость работы. Запросы к документам (особенно по нескольким видам) работают значительно медленнее, чем запросы к регистрам. Если база большая, формирование акта сверки может занять длительное время. В таких случаях программисты рекомендуют использовать внешние компоненты, такие как 1C++, для выполнения прямых SQL-запросов к таблице журнала документов _1SJOURN.

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

3. Юридическая чистота. Помните, что подписанный акт сверки с непроведенными документами может стать «миной замедленного действия» при судебных разбирательствах. Рекомендуем добавлять в печатную форму примечание о том, какие документы являются плановыми или предварительными.

Альтернативный подход: Использование «Заявок»

Вместо того чтобы захламлять систему непроведенными документами Реализация, рассмотрим более архитектурно правильный способ. В «Торговле и Складе» есть объект ЗаявкаПокупателя.

Если специфика учета вашей организации позволяет, лучше доработать акт сверки на выборку именно «Заявок», чем пытаться реанимировать данные из распроведенных документов Реализация.

Заключение

Мы проанализировали ситуацию и выяснили причину, по которой автору потребовалось такое нетиповое решение — зачастую это связано с «параллельным» ведением официального и управленческого учета в одной базе. Реализация через ТаблицуЗначений является наиболее гибким и понятным способом для программиста 1С 7.7. Это позволяет сохранить структуру типового отчета, добавив в него необходимые данные без глобальной переработки конфигурации.

← На главную