Отчеты и Аналитика · 12 мин
Как сравнить таблицы в 1С: рабочие способы и инструкции
Как сравнить таблицы в 1С: типовые инструменты, запросы, табличные документы и внешние обработки. Пошаговые инструкции, типичные ошибки и проверка результата.
Задача сравнить две таблицы в 1С возникает регулярно: при сверке остатков склада с учётными данными, при проверке выгрузок между базами, при поиске расхождений в оборотах за период или при контроле миграции данных после обновления конфигурации. В зависимости от того, где находятся данные — в табличном документе, таблице значений, регистре или файле Excel — применяются разные инструменты.
Универсальной кнопки «сравнить таблицы» в 1С нет, но есть несколько рабочих подходов: типовое сравнение файлов конфигуратора, запросы с соединениями, обход таблиц значений в коде, а также внешние обработки и функции сверки в Excel. Выбор зависит от объёма данных, формата источников и того, нужен ли разовый результат или регулярная процедура.
Ниже разобраны основные способы с конкретными действиями, условиями применения и ограничениями. Отдельно рассмотрены типичные ошибки, из-за которых сравнение даёт ложные расхождения, и способы проверить корректность результата.
Определите, где находятся сравниваемые данные
Прежде чем выбирать инструмент, ответьте на три вопроса: где лежат данные (внутри базы 1С или во внешних файлах), какой объём строк предстоит сравнить и нужен ли результат один раз или регулярно. От этого зависит весь дальнейший порядок действий.
Если обе таблицы — это печатные формы или отчёты, сохранённые в файлы (mxl, xlsx, csv), проще всего использовать сравнение файлов или Excel. Если данные живут в регистрах и справочниках базы, правильнее работать запросами: они выполняются на сервере и не требуют выгрузки. Для таблиц значений, сформированных программно в ходе обработки, естественный путь — сравнение в коде встроенного языка.
Отдельный случай — сравнение данных между двумя разными базами 1С, например между рабочей и копией после обновления. Здесь прямой запрос невозможен: сначала данные выгружают из обеих баз в одинаковый формат, затем сравнивают. Для таких задач часто используют универсальную выгрузку в табличный документ или XML и последующую сверку.
Как выбрать способ сравнения
Сравнение табличных документов через «Сравнить файлы»
В конфигураторе 1С есть встроенный инструмент сравнения текстовых и табличных файлов. Он подходит, когда оба отчёта уже сформированы и сохранены: например, оборотно-сальдовая ведомость до и после закрытия месяца, выгруженная в два файла mxl.
Порядок действий: откройте конфигуратор, выберите пункт меню «Файл — Сравнить файлы», укажите первый и второй файл, задайте тип сравнения «Табличный документ» и способ показа различий. Платформа откроет оба документа рядом и подсветит ячейки, значения в которых различаются. Это удобно для визуальной сверки печатных форм и отчётов небольшого размера.
Ограничения способа: сравнение идёт по значениям ячеек, а не по смыслу данных. Если в одном отчёте строки отсортированы иначе или добавлена лишняя строка итога, инструмент покажет массу ложных различий. Поэтому перед сравнением приведите оба файла к одинаковой структуре: одинаковые колонки, одинаковая сортировка, без промежуточных итогов в одном из файлов.
- 1Сформируйте оба отчёта с одинаковыми отборами и сохраните каждый в отдельный файл mxl или xlsx
- 2Приведите файлы к одинаковой структуре: порядок колонок и сортировка строк должны совпадать
- 3Откройте конфигуратор и выберите «Файл — Сравнить файлы»
- 4Укажите оба файла и тип сравнения «Табличный документ»
- 5Просмотрите подсвеченные расхождения и зафиксируйте их списком
- 6Проверьте, не вызваны ли различия сдвигом строк, а не реальным расхождением данных
Сравнение данных запросом: соединения и проверка на NULL
Запрос — основной инструмент сравнения данных внутри базы. Идея проста: две выборки соединяются по ключевым полям (номенклатура, контрагент, документ), и по результату соединения видно, какие строки есть только в одной из таблиц и где различаются значения.
Для поиска строк, которых нет во второй таблице, используйте левое соединение с условием «ЕСТЬ NULL» на поле второй таблицы. Для полной картины расхождений в обе стороны применяйте полное соединение (ПОЛНОЕ СОЕДИНЕНИЕ): в результат попадут строки, присутствующие только в первой таблице, только во второй и строки с совпавшим ключом, но разными значениями. Различие значений проверяют условием вида «Таблица1.Сумма <> Таблица2.Сумма» с учётом того, что одна из сторон может быть NULL — тогда сравнение даст NULL, а не ИСТИНА, и такие строки нужно обрабатывать отдельно через ЕСТЬNULL.
Практический приём: поместите обе выборки во временные таблицы, а затем напишите третий запрос с полным соединением и вычисляемым полем «ТипРасхождения» — например, «Только в первой», «Только во второй», «Разные суммы». Такой результат удобно выгрузить в табличный документ и разобрать построчно.
ВЫБРАТЬ
ЕСТЬNULL(Т1.Номенклатура, Т2.Номенклатура) КАК Номенклатура,
Т1.Количество КАК Количество1,
Т2.Количество КАК Количество2,
ВЫБОР
КОГДА Т2.Номенклатура ЕСТЬ NULL ТОГДА "Только в первой"
КОГДА Т1.Номенклатура ЕСТЬ NULL ТОГДА "Только во второй"
КОГДА Т1.Количество <> Т2.Количество ТОГДА "Различается количество"
КОНЕЦ КАК ТипРасхождения
ИЗ
Таблица1 КАК Т1
ПОЛНОЕ СОЕДИНЕНИЕ Таблица2 КАК Т2
ПО Т1.Номенклатура = Т2.Номенклатура
ГДЕ
Т2.Номенклатура ЕСТЬ NULL
ИЛИ Т1.Номенклатура ЕСТЬ NULL
ИЛИ Т1.Количество <> Т2.КоличествоДля разового анализа удобна консоль запросов — внешняя обработка, позволяющая писать и отлаживать запросы в режиме предприятия без изменения конфигурации. Она показывает результат сразу в виде таблицы и позволяет быстро менять условия соединения.
Программное сравнение таблиц значений
Когда данные уже собраны в таблицы значений внутри обработки, сравнение выполняют встроенным языком. Базовый подход — цикл по строкам первой таблицы с поиском соответствия во второй через метод «Найти» по ключевым полям. Для больших таблиц такой перебор медленный: поиск внутри цикла даёт квадратичную сложность, и на десятках тысяч строк обработка заметно «подвисает».
Чтобы ускорить сравнение, используйте индексы: добавьте второй таблице индекс по ключевым полям методом «Индексы.Добавить», после чего «Найти» будет работать значительно быстрее. Альтернатива — соответствие (объект «Соответствие»), где ключом служит строковое представление ключевых полей, а значением — строка таблицы: поиск по соответствию выполняется почти мгновенно.
Ещё один элегантный приём — свернуть обе таблицы с противоположными знаками и объединить: скопируйте строки второй таблицы в первую с отрицательными количествами, затем вызовите «Свернуть» по ключевым полям с суммированием. Строки с нулевым итогом совпали, ненулевые остатки — это и есть расхождения с указанием, в какую сторону. Способ быстрый и хорошо подходит для сверки количеств и сумм.
Сравнение через Excel и внешние обработки
Если данные выгружены в Excel, сверку можно выполнить там: формула ВПР (или XLOOKUP в новых версиях) ищет ключ из первой таблицы во второй, а условное форматирование подсвечивает строки с расхождениями. Этот путь оправдан, когда результат нужно передать коллеге без доступа к 1С или когда источник одной из таблиц изначально внешний — например, выписка от поставщика.
Для регулярных сверок внутри 1С существуют внешние обработки сравнения данных: они позволяют выбрать два источника (справочники, регистры, таблицы из файлов), настроить соответствие полей и получить отчёт о расхождениях. Такие обработки подключаются через механизм дополнительных отчётов и обработок и не требуют изменения конфигурации, что важно для баз на поддержке.
Выбирая внешнюю обработку, проверяйте совместимость с вашей версией платформы и режимом работы (обычное или управляемое приложение). Обработки, скачанные из непроверенных источников, запускайте сначала на копии базы: внешняя обработка выполняется с правами текущего пользователя и теоретически может изменять данные.
Проверка результата и типичные ошибки
Получить список расхождений — половина работы. Вторая половина — убедиться, что расхождения реальные, а не вызваны ошибками самого сравнения. Самая частая причина ложных различий — разные отборы при формировании двух таблиц: разные периоды, разные организации, отличающиеся настройки группировки. Всегда сверяйте параметры формирования до начала анализа расхождений.
Вторая группа ошибок — технические: несовпадение типов данных, лишние пробелы в строковых ключах, различия в округлении сумм (одна таблица хранит копейки, другая округлена до рублей), дубли строк в одной из таблиц. Дубли особенно коварны: при соединении они размножают строки результата, и суммы «разъезжаются», хотя исходные данные корректны.
Контрольный приём — сверка итогов. Посчитайте общую сумму или количество строк в каждой исходной таблице и в результате сравнения. Если сумма расхождений по модулю равна разнице итогов таблиц, скорее всего, вы нашли все различия. Если нет — часть расхождений потеряна из-за условий соединения или дублей.
Как проверить корректность сверки
Разница итогов равна сумме найденных расхождений
Сумма расхождений не сходится с разницей итогов — есть потерянные строки
Число строк результата объясняется логикой соединения
Строк в результате больше, чем в обеих таблицах вместе — вероятны дубли ключей
Ключи совпадают по типу, без лишних пробелов и разного регистра
Одинаковые на вид значения не находят друг друга при поиске
Периоды, отборы и группировки полностью совпадают
Таблицы сформированы с разными настройками — сравнение бессмысленно
Частые вопросы
Можно ли сравнить две таблицы без программирования?
Да. Если данные выгружены в файлы, используйте «Файл — Сравнить файлы» в конфигураторе или сверку формулами в Excel. Для данных внутри базы без написания кода поможет консоль запросов с готовым шаблоном полного соединения — достаточно подставить свои таблицы и поля.
Как сравнить данные двух разных баз 1С?
Прямого соединения между базами нет. Сформируйте в каждой базе одинаковый отчёт или выгрузку (табличный документ, CSV, XML) с одинаковыми отборами и сортировкой, затем сравните файлы штатным инструментом конфигуратора или внешней обработкой сверки.
Почему запрос с полным соединением не показывает часть расхождений?
Чаще всего причина в условиях в секции ГДЕ: сравнение полей с NULL даёт NULL, а не ИСТИНА, и такие строки отфильтровываются. Оборачивайте сравниваемые поля в ЕСТЬNULL с заведомо невозможным значением или явно проверяйте оба поля на NULL.
Как быстро сравнить большие таблицы значений в коде?
Не используйте вложенный перебор. Добавьте индекс по ключевым полям второй таблицы или перенесите её строки в соответствие, где ключ — строковое представление ключевых полей. Для сверки числовых показателей эффективен приём с объединением таблиц с противоположными знаками и последующим сворачиванием.
Что делать, если строки в таблицах идут в разном порядке?
Порядок строк не влияет на сравнение запросом или программным поиском — они работают по ключам. Для сравнения файлов в конфигураторе порядок критичен: отсортируйте обе таблицы по ключевой колонке перед сверкой, иначе получите массу ложных различий из-за сдвига строк.
Безопасно ли использовать внешние обработки для сверки?
Обработка выполняется с правами запустившего её пользователя, поэтому источник должен быть надёжным. Проверьте обработку на копии базы, убедитесь, что она только читает данные, и перед любыми операциями, затрагивающих рабочую базу, сделайте резервную копию.
Что важно запомнить
Способ сравнения выбирается по расположению данных: файлы сверяют инструментом «Сравнить файлы» или в Excel, данные базы — запросом с полным соединением, таблицы значений — программно с индексами или сворачиванием. Перед сравнением приведите таблицы к одинаковой структуре, типам и отборам, а после — проверьте результат контролем итогов. Внешние обработки сначала тестируйте на копии базы.