К статье
Практический материал

Отчеты и Аналитика · 12 мин

Как сравнить таблицы в 1С: рабочие способы и инструкции

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

Задача сравнить две таблицы в 1С возникает регулярно: при сверке остатков склада с учётными данными, при проверке выгрузок между базами, при поиске расхождений в оборотах за период или при контроле миграции данных после обновления конфигурации. В зависимости от того, где находятся данные — в табличном документе, таблице значений, регистре или файле Excel — применяются разные инструменты.

Универсальной кнопки «сравнить таблицы» в 1С нет, но есть несколько рабочих подходов: типовое сравнение файлов конфигуратора, запросы с соединениями, обход таблиц значений в коде, а также внешние обработки и функции сверки в Excel. Выбор зависит от объёма данных, формата источников и того, нужен ли разовый результат или регулярная процедура.

Ниже разобраны основные способы с конкретными действиями, условиями применения и ограничениями. Отдельно рассмотрены типичные ошибки, из-за которых сравнение даёт ложные расхождения, и способы проверить корректность результата.

Определите, где находятся сравниваемые данные

Прежде чем выбирать инструмент, ответьте на три вопроса: где лежат данные (внутри базы 1С или во внешних файлах), какой объём строк предстоит сравнить и нужен ли результат один раз или регулярно. От этого зависит весь дальнейший порядок действий.

Если обе таблицы — это печатные формы или отчёты, сохранённые в файлы (mxl, xlsx, csv), проще всего использовать сравнение файлов или Excel. Если данные живут в регистрах и справочниках базы, правильнее работать запросами: они выполняются на сервере и не требуют выгрузки. Для таблиц значений, сформированных программно в ходе обработки, естественный путь — сравнение в коде встроенного языка.

Отдельный случай — сравнение данных между двумя разными базами 1С, например между рабочей и копией после обновления. Здесь прямой запрос невозможен: сначала данные выгружают из обеих баз в одинаковый формат, затем сравнивают. Для таких задач часто используют универсальную выгрузку в табличный документ или XML и последующую сверку.

Маршрут решения

Как выбрать способ сравнения

Обе таблицы — файлы (mxl, xlsx, csv) небольшого объёмаИспользуйте сравнение файлов в конфигураторе или сверку в Excel
Данные в регистрах или справочниках одной базыПишите запрос с полным соединением или левым соединением с проверкой на NULL
Таблицы значений формируются в коде обработкиСравнивайте программно через поиск строк или индексы
Нужно сравнить данные двух разных базВыгрузите данные в одинаковый формат и сверяйте выгрузки
Сверка нужна регулярно и объёмы большиеПодключите внешнюю обработку сверки или консоль запросов

Сравнение табличных документов через «Сравнить файлы»

В конфигураторе 1С есть встроенный инструмент сравнения текстовых и табличных файлов. Он подходит, когда оба отчёта уже сформированы и сохранены: например, оборотно-сальдовая ведомость до и после закрытия месяца, выгруженная в два файла mxl.

Порядок действий: откройте конфигуратор, выберите пункт меню «Файл — Сравнить файлы», укажите первый и второй файл, задайте тип сравнения «Табличный документ» и способ показа различий. Платформа откроет оба документа рядом и подсветит ячейки, значения в которых различаются. Это удобно для визуальной сверки печатных форм и отчётов небольшого размера.

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

Сравнение файлов в конфигураторе
  1. 1
    Сформируйте оба отчёта с одинаковыми отборами и сохраните каждый в отдельный файл mxl или xlsx
  2. 2
    Приведите файлы к одинаковой структуре: порядок колонок и сортировка строк должны совпадать
  3. 3
    Откройте конфигуратор и выберите «Файл — Сравнить файлы»
  4. 4
    Укажите оба файла и тип сравнения «Табличный документ»
  5. 5
    Просмотрите подсвеченные расхождения и зафиксируйте их списком
  6. 6
    Проверьте, не вызваны ли различия сдвигом строк, а не реальным расхождением данных

Сравнение данных запросом: соединения и проверка на NULL

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

Для поиска строк, которых нет во второй таблице, используйте левое соединение с условием «ЕСТЬ NULL» на поле второй таблицы. Для полной картины расхождений в обе стороны применяйте полное соединение (ПОЛНОЕ СОЕДИНЕНИЕ): в результат попадут строки, присутствующие только в первой таблице, только во второй и строки с совпавшим ключом, но разными значениями. Различие значений проверяют условием вида «Таблица1.Сумма <> Таблица2.Сумма» с учётом того, что одна из сторон может быть NULL — тогда сравнение даст NULL, а не ИСТИНА, и такие строки нужно обрабатывать отдельно через ЕСТЬNULL.

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

bsl
ВЫБРАТЬ
	ЕСТЬ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С существуют внешние обработки сравнения данных: они позволяют выбрать два источника (справочники, регистры, таблицы из файлов), настроить соответствие полей и получить отчёт о расхождениях. Такие обработки подключаются через механизм дополнительных отчётов и обработок и не требуют изменения конфигурации, что важно для баз на поддержке.

Выбирая внешнюю обработку, проверяйте совместимость с вашей версией платформы и режимом работы (обычное или управляемое приложение). Обработки, скачанные из непроверенных источников, запускайте сначала на копии базы: внешняя обработка выполняется с правами текущего пользователя и теоретически может изменять данные.

Проверка результата и типичные ошибки

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

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

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

Типичные ошибки при сравнении таблиц
01
Сравнение таблиц, сформированных с разными отборами или за разные периоды — результат показывает не расхождения данных, а разницу настроек
02
Игнорирование NULL при полном соединении — строки, отсутствующие в одной из таблиц, выпадают из анализа или дают ложные совпадения
03
Сравнение строковых ключей без очистки пробелов и приведения регистра — визуально одинаковые значения не совпадают
04
Дубли строк в одной из таблиц — при соединении суммы размножаются, и сверка показывает несуществующие расхождения
05
Сравнение чисел с разным округлением — копеечные разницы маскируют реальные расхождения или создают шум
06
Отсутствие контроля итогов — невозможно понять, найдены все расхождения или только часть
Контрольные точки

Как проверить корректность сверки

Итоговые суммы обеих таблиц
Норма

Разница итогов равна сумме найденных расхождений

Тревожный признак

Сумма расхождений не сходится с разницей итогов — есть потерянные строки

Количество строк в исходных таблицах и результате
Норма

Число строк результата объясняется логикой соединения

Тревожный признак

Строк в результате больше, чем в обеих таблицах вместе — вероятны дубли ключей

Типы и формат ключевых полей
Норма

Ключи совпадают по типу, без лишних пробелов и разного регистра

Тревожный признак

Одинаковые на вид значения не находят друг друга при поиске

Параметры формирования таблиц
Норма

Периоды, отборы и группировки полностью совпадают

Тревожный признак

Таблицы сформированы с разными настройками — сравнение бессмысленно

Частые вопросы

Можно ли сравнить две таблицы без программирования?

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

Как сравнить данные двух разных баз 1С?

Прямого соединения между базами нет. Сформируйте в каждой базе одинаковый отчёт или выгрузку (табличный документ, CSV, XML) с одинаковыми отборами и сортировкой, затем сравните файлы штатным инструментом конфигуратора или внешней обработкой сверки.

Почему запрос с полным соединением не показывает часть расхождений?

Чаще всего причина в условиях в секции ГДЕ: сравнение полей с NULL даёт NULL, а не ИСТИНА, и такие строки отфильтровываются. Оборачивайте сравниваемые поля в ЕСТЬNULL с заведомо невозможным значением или явно проверяйте оба поля на NULL.

Как быстро сравнить большие таблицы значений в коде?

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

Что делать, если строки в таблицах идут в разном порядке?

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

Безопасно ли использовать внешние обработки для сверки?

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

Итог

Что важно запомнить

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