Как найти документ с неизвестным типом и некорректной датой в 1С:Управление торговлей 11

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

Ситуация, когда в базу данных ошибочно записывается документ с некорректной датой (например, из далекого прошлого — 0020 год, или далекого будущего), является довольно распространенной. Основная сложность заключается в том, что пользователь может не запомнить, какой именно вид документа он создавал, а стандартные журналы из-за установленных фильтров по периоду или виду операции не отображают «потеряшку». В рамках этой статьи мы разберем по шагам, как вычислить такой объект в конфигурации «1С:Управление торговлей 11».

Метод 1. Анализ Журнала регистрации

Проанализируем самый надежный способ, который работает даже в том случае, если документ не был проведен, а просто записан. Журнал регистрации фиксирует все действия пользователей в системе. Если вы знаете примерное время, когда произошла ошибка, или имя пользователя, это значительно сузит область поиска.

Для этого выполним следующие действия:

  1. Перейдем в раздел Администрирование — Обслуживание — Журнал регистрации.
  2. Настроим отбор по периоду (выберем время, когда документ был ошибочно введен).
  3. В колонке «Событие» будем искать «Данные. Добавление» или «Данные. Изменение».
  4. В колонке «Данные» будет отображена ссылка на документ. Даже если тип нам неизвестен, система покажет его представление, например: «Заказ клиента №...» или «Приобретение товаров и услуг №...».

Этот метод хорош тем, что он не зависит от даты самого документа, так как фиксирует дату реального внесения записи в базу данных.

Метод 2. Поиск через регистры сведений

В современных редакциях УТ 11 (начиная с 11.2 и выше) существует специальный регистр, предназначенный для оптимизации списков. Разберем работу с регистром ДанныеПервичныхДокументов. В нем хранятся ключевые реквизиты всех первичных документов системы: дата, номер, организация и ссылка на сам объект.

Посмотрим, как им воспользоваться:

  1. Откроем «Функции для технического специалиста» (ранее «Все функции»).
  2. Найдем регистр сведений ДанныеПервичныхДокументов.
  3. Установим отбор по колонке «Дата документа». Если мы ищем документ из 0020 года, установим интервал от 01.01.0001 до 31.12.0100.

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

Метод 3. Программный перебор всех типов документов (Метаданные)

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


Для Каждого МетаДокумент Из Метаданные.Документы Цикл
    // Выбираем документы в диапазоне дат первого столетия
    Выборка = Документы[МетаДокумент.Имя].Выбрать(Дата('00010101'), Дата('01010100')); 
    Пока Выборка.Следующий() Цикл
        Сообщить("Найден аномальный документ: " + Выборка.Ссылка + " | Дата документа: " + Выборка.Дата);
    КонецЦикла;
КонецЦикла;

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

Метод 4. Использование универсальной Консоли запросов

Выясним, как решить задачу с помощью запросов. Если мы не хотим писать цикл, мы можем использовать консоль запросов для быстрого сканирования конкретных групп документов. Проблема в том, что в языке запросов 1С нельзя написать ВЫБРАТЬ * ИЗ Документ.*. Нужно указывать конкретную таблицу.

Однако мы можем объединить несколько вероятных типов документов. Например:


ВЫБРАТЬ Ссылка, Дата ИЗ Документ.ЗаказКлиента ГДЕ Дата < ДАТАВРЕМЯ(2000, 1, 1)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Ссылка, Дата ИЗ Документ.ПриобретениеТоваровУслуг ГДЕ Дата < ДАТАВРЕМЯ(2000, 1, 1)
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ Ссылка, Дата ИЗ Документ.РеализацияТоваровУслуг ГДЕ Дата < ДАТАВРЕМЯ(2000, 1, 1)

Рассмотрим этот способ как вспомогательный, если круг «подозреваемых» типов документов сужен до 5–10 наиболее часто используемых.

Метод 5. Полнотекстовый поиск (ППД)

Проанализируем возможность глобального поиска. В 1С:Предприятие 8 реализован механизм полнотекстового поиска. Если документ был записан, его данные (включая дату в строковом представлении) попадают в индекс.

  1. В строке глобального поиска (в заголовке окна) введем дату в формате «25.03.0020».
  2. Если система выдаст результат, мы сразу сможем перейти в карточку документа.

Важно: этот метод сработает только в том случае, если индекс полнотекстового поиска актуален. Проверить это можно в разделе Администрирование — Поддержка и обслуживание — Управление полнотекстовым поиском. Если индекс не обновлен, следует нажать кнопку «Обновить индекс».

Метод 6. Универсальная обработка «Поиск и замена значений»

Рассмотрим нестандартное применение этой обработки. Хотя её основная цель — замена ссылок, встроенные в неё фильтры позволяют искать объекты по реквизитам во всей базе данных. В поле «Что искать» мы можем настроить отбор по реквизиту Дата, установив условие «Меньше» или «Равно» нашей ошибочной дате. Система просканирует метаданные и выведет список найденных ссылок.

Метод 7. Запросы на уровне SQL (для серверных баз)

Если ваша база работает на MS SQL Server или PostgreSQL, и у вас есть доступ к СУБД, задачу можно решить молниеносно. В SQL все документы имеют поле _Date_Time. Несмотря на то, что даты в 1С хранятся с определенным смещением (обычно +2000 лет), запрос на поиск записей с минимальными значениями в колонках дат по всем таблицам _Document позволит найти виновника за считанные секунды.

Однако помните, что прямое обращение к таблицам СУБД — это крайняя мера, которую стоит использовать только опытным системным администраторам, так как она требует понимания структуры имен таблиц 1С (например, через ПолучитьСтруктуруХраненияБазыДанных).

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

← На главную