Почему в «1С:Торговля и Склад 7.7» пропали остатки с 1-го числа месяца и как их вернуть?

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

Представим типичную стрессовую ситуацию для розничной или оптовой торговой точки: еще вчера, 31 августа, менеджеры и кассиры спокойно выписывали накладные и пробивали чеки — все остатки товаров были видны и актуальны. Но наступает утро 1 сентября, программа запускается, и пользователи с ужасом обнаруживают, что все остатки полностью обнулились. При этом, если в отчете или подборе установить дату «31 августа», все товары снова чудесным образом появляются на складах. Работа магазина заблокирована, клиенты уходят, а руководство требует немедленного решения.

В этой статье мы подробно разберем, почему возникает эта проблема, как устроен механизм расчета остатков в платформе «1С:Предприятие 7.7», и пошагово восстановим работоспособность базы данных «1С:Торговля и Склад».

Причина проблемы: особенности Точки Актуальности (ТА) в 1С 7.7

Для специалистов, привыкших работать в современных конфигурациях на платформе «1С:Предприятие 8.3» (таких как «Управление торговлей» или «Управление нашей фирмой»), поведение старой «семерки» может показаться странным. В современных базах данных итоги и остатки рассчитываются динамически и бесшовно. В «1С 7.7» архитектура хранения данных устроена иначе.

Ключевую роль здесь играет понятие Точки Актуальности (ТА). ТА — это специальная системная отметка (конкретный момент времени, привязанный к последнему проведенному документу), до которой платформа гарантирует мгновенный доступ к рассчитанным и актуальным оперативным итогам. База данных физически хранит эти итоги помесячно в специальных таблицах.

Проанализируем структуру хранения регистров в СУБД формата DBF:

Когда наступает новый календарный месяц (в нашем примере — 1 сентября), для системы этот день считается «будущим» по отношению к текущей точке актуальности, если ТА осталась в августе. Если пользователь формирует отчет на 1 сентября, программа обращается к таблице итогов RG*. Но поскольку период сентября еще не открыт и ТА не перенесена вперед, физических записей итогов на сентябрь в базе данных просто не существует. Из-за этого система выдает нулевые остатки, хотя документы поступления и продаж за прошлые периоды никуда не исчезли.

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

Способ №1: Ручной перенос Точки Актуальности и открытие нового периода

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

  1. Завершение работы пользователей: Попросим всех сотрудников выйти из базы данных «1С». Данная операция требует монопольного доступа к таблицам.
  2. Запуск в монопольном режиме: Запустим программу 1С в режиме «Предприятие». В окне выбора информационной базы обязательно установим флажок «Монопольно» и нажмем кнопку «ОК».
  3. Переход в управление итогами: В главном меню программы перейдем по пути: Операции -> Управление оперативными итогами.
  4. Анализ текущего состояния: В открывшемся диалоговом окне обратим внимание на поле «ТА установлена по:». Если там отображается дата прошлого месяца (например, 31.08), значит, автоматический переход не произошел.
  5. Открытие нового периода: Нажмем кнопку «Открыть следующий период» (или установим дату ТА вручную на текущую дату сентября) и нажмем кнопку «Выполнить».
  6. Завершение процесса: Система выполнит расчет остатков на новую дату. Это может занять от нескольких секунд до десятков минут в зависимости от размера базы данных и производительности компьютера.

После завершения операции можно запустить программу в обычном (немонопольном) режиме и проверить остатки. Если они появились — проблема успешно решена.

Способ №2: Переиндексация базы данных (удаление файлов *.cdx)

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

В такой ситуации выполним принудительную переиндексацию таблиц:

  1. Полностью закроем программу «1С:Предприятие» на всех компьютерах в локальной сети.
  2. Откроем проводник и перейдем в каталог информационной базы (путь к нему можно посмотреть в окне запуска 1С при выделении нужной строки).
  3. Внутри папки базы данных воспользуемся поиском и найдем все файлы с расширением *.cdx. Это служебные индексные файлы, которые не содержат пользовательских данных, а лишь ускоряют поиск.
  4. Удалим абсолютно все файлы с расширением *.cdx. Внимание: файлы с расширением *.dbf (таблицы данных) и *.md (конфигурация) трогать категорически запрещено!
  5. Снова запустим «1С:Предприятие» в монопольном режиме.
  6. При запуске система обнаружит отсутствие индексов и выдаст предупреждение: «Индексные файлы не обнаружены! Будет произведена переиндексация». Согласимся, нажав «ОК».
  7. Дождемся окончания процесса переиндексации. После этого повторим шаги из Способа №1 по переносу ТА.

Способ №3: Очистка таблиц итогов и полный пересчет

Если предыдущие методы не принесли результата, либо если при попытке переноса ТА база данных сообщает об ошибках переполнения (например, размер файлов RG*.dbf приблизился к критическому для формата DBF лимиту в 2 Гб), потребуется выполнить очистку таблиц итогов с последующим их восстановлением.

Этот метод основан на том, что таблицы движений RA* содержат всю первичную информацию. Мы можем полностью удалить таблицы остатков RG*, а затем заставить программу пересчитать их с нуля на основе первичных документов.

Выполним процедуру по шагам:

  1. Создание резервной копии: Перед проведением любых манипуляций с файлами базы данных обязательно скопируем всю папку с базой в надежное место. Это спасет данные в случае непредвиденного сбоя.
  2. Закроем все сессии программы «1С».
  3. В каталоге базы данных найдем и удалим (или переместим во временную папку вне каталога базы) все файлы, чье имя начинается на RG (например, rg*.dbf и соответствующий ему rg*.cdx). Этим действием мы полностью обнулим кэш остатков во всех регистрах.
  4. Запустим программу 1С в режиме Конфигуратор.
  5. В меню выберем пункт Администрирование -> Тестирование и исправление ИБ.
  6. В открывшемся окне настроек снимем все флажки, кроме одного — «Пересчет итогов».
  7. Нажмем кнопку «Выполнить». Конфигуратор последовательно прочитает каждую запись в таблицах движений RA* и воссоздаст чистые, корректные файлы итогов RG*, автоматически установив правильную Точку Актуальности.

После успешного завершения пересчета закроем Конфигуратор и запустим программу в режиме «Предприятие». Все остатки на 1-е число нового месяца гарантированно вернутся на свои места.

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

Описанная проблема с ТА — это архитектурное ограничение устаревшей платформы «1С:Предприятие 7.7», разработанной более двадцати лет назад. Помимо регулярных ручных манипуляций при переходе на новые месяцы, работа в таких базах сегодня сопряжена с серьезными рисками:

Для стабильной и комфортной работы настоятельно рекомендуется запланировать переход на современные программные продукты линейки «1С:Предприятие 8.3», где подобные проблемы с остатками полностью исключены за счет автоматического и бесшовного управления итогами регистров.

← На главную