1с как сравнить две таблицы значений

Обновлено: 07.07.2024

Задача банальная — сравнить одним действием две табличные части или таблицы значений и вывести различающиеся по количеству позиции. В моем случае я сравниваю заказ поставщику и документ поступления.

Производится это нетрудное действие с помощью простого запроса, в который передается два параметра: две ссылки на сравниваемые документы.

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

СГРУППИРОВАТЬ ПО
Заказы.Номенклатура
;

Получите 267 видеоуроков по 1С бесплатно:

СГРУППИРОВАТЬ ПО
Поступления.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Заказ.Номенклатура КАК Номенклатура,
ЕСТЬNULL(Заказ.Количество, 0) КАК КоличествоЗаказано,
ЕСТЬNULL(Накладная.Количество, 0) КАК КоличествоПоступило
ПОМЕСТИТЬ Итоговая
ИЗ
Заказы КАК Заказ
ЛЕВОЕ СОЕДИНЕНИЕ Поступления КАК Накладная
ПО Заказ.Номенклатура = Накладная.Номенклатура

ВЫБРАТЬ
Накладная.Номенклатура,
ЕСТЬNULL(Заказ.Количество, 0),
ЕСТЬNULL(Накладная.Количество, 0)
ИЗ
Поступления КАК Накладная
ЛЕВОЕ СОЕДИНЕНИЕ Заказы КАК Заказ
ПО (Заказ.Номенклатура = Накладная.Номенклатура)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Итоговая.Номенклатура,
Итоговая.КоличествоЗаказано,
Итоговая.КоличествоПоступило,
Итоговая.КоличествоЗаказано — Итоговая.КоличествоПоступило КАК КоличествоРазница
ИЗ
Итоговая КАК Итоговая
ГДЕ
Итоговая.КоличествоЗаказано — Итоговая.КоличествоПоступило <> 0

В результате выполнения этого запроса мы получим только строки, в которых различаются количества, или номенклатуру, которой вообще нет.

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

1с как сравнить две таблицы значений

Задача 1. Проверить равенство таблиц.

Дано: две таблицы с идентичной структурой.

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

1. Слить обе таблицы в одну

2. Добавить сверочную колонку. Заполнить ее числом 1 для строк первой таблицы и -1 для строк второй таблицы.

3. Свернуть, просуммировав сверочную колонку.

4. Если таблицы идентичны, то после свертки во всех строках значение в сверочной колонке будет

1с как сравнить две таблицы значений

Задача 2. Найти различия в таблицах.

Задача 3. Найти различия в таблицах при помощи запроса.

Этот же принцип можно применять в запросах.

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

Специальные предложения

1с как сравнить две таблицы значений

1с как сравнить две таблицы значений

1с как сравнить две таблицы значений

1с как сравнить две таблицы значений

1с как сравнить две таблицы значений

1с как сравнить две таблицы значений

1с как сравнить две таблицы значений

Как-то так проще, функциональней и надежней.

Кстати, для точного сравнения без маппинга можно использовать

(5) ildarovich, Не могу не согласиться. Особенно если учесть, что функция написана целиком с 12-44 по 13-19 (не забываем прибавить время на чтение чужого, . (вместо точек сами вставляйте) кода). :))) если в статье декларировать, что это шаблон (пусть будет идеальным), то скорость поиска/вспоминания шаблона, как мне кажется будет минут 10-20, что всего в два-три раза быстрее написания.

Когда писал специально применил похожий на статью подход (по индексно). Хотя для сравнения у пользователей есть прекрасный инструмент сравнение значений(от 1С) или KDIFF. Для программистов же важнее либо А=Б или А!=Б. Если А!=Б, то какие строки в каких столбцах.

Если уж делать различия типа стока добавлена/удалена/изменена, то не по принципу добавлены все строки которых больше чем в образце, а первая измененная строка делает измененными все строки после нее.

Таким образом, отсутстсвие строк с показателем, равным 1 или 2, является признаком равенства таблиц.

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


// Формирование строки индекса (для оптимизации поиска по ТЗ)
СтрокаИндексаТЗ1 = "" ;
Для каждого КолонкаТЗn1 Из ТЗn1 . Колонки Цикл
Если СтрокаИндексаТЗ1 = "" Тогда
СтрокаИндексаТЗ1 = КолонкаТЗn1 . Имя ;
Иначе
СтрокаИндексаТЗ1 = СтрокаИндексаТЗ1 + "," + КолонкаТЗn1 . Имя ;
КонецЕсли;
КонецЦикла;

// Вставка индекса
ТЗn2 . Индексы . Добавить ( СтрокаИндексаТЗ1 );

// Сравнения имён колонок ТЗ (необязательно если заведомо различны, можно закомментировать)
//Для Каждого СтрокаТаблицы1 Из ТЗn1 Цикл
// Для Каждого КолонкаТаблицы Из ТЗn1.Колонки Цикл
// Для Каждого СтрокаТаблицы2 Из ТЗn2 Цикл
// Если СтрокаТаблицы2[КолонкаТаблицы.Имя] <> СтрокаТаблицы1[КолонкаТаблицы.Имя] Тогда
// Сообщить("Имя колонки ТЗ N1 не совпадает с именем колонки ТЗ N2");
// Возврат Ложь;
// КонецЕсли;
// КонецЦикла;
// КонецЦикла;
//КонецЦикла;

// Проверка записей
Для Каждого СтрокаТаблицы1 Из ТЗn1 Цикл

СтруктураПоиска1 = Новый Структура ;
Для Каждого Колонка Из ТЗn1 . Колонки Цикл
СтруктураПоиска1 . Вставить ( Колонка . Имя , СтрокаТаблицы1 [ Колонка . Имя ]);
КонецЦикла;

СтрокиТаблицы2 = ТЗn2 . НайтиСтроки ( СтруктураПоиска1 );
Если СтрокиТаблицы2 . Количество () <> 1 Тогда
Возврат Ложь;
КонецЕсли;

// Формирование строки индекса (для оптимизации поиска по ТЗ)
СтрокаИндексаТЗ2 = "" ;
Для Каждого КолонкаТЗn2 Из ТЗn2 . Колонки Цикл
Если СтрокаИндексаТЗ2 = "" Тогда
СтрокаИндексаТЗ2 = КолонкаТЗn2 . Имя ;
Иначе
СтрокаИндексаТЗ2 = СтрокаИндексаТЗ2 + "," + КолонкаТЗn2 . Имя ;
КонецЕсли;
КонецЦикла;

// Вставка индекса
ТЗn1 . Индексы . Добавить ( СтрокаИндексаТЗ2 );

Для Каждого СтрокаТаблицы2 Из ТЗn2 Цикл

СтруктураПоиска2 = Новый Структура ;
Для Каждого Колонка Из ТЗn2 . Колонки Цикл
СтруктураПоиска2 . Вставить ( Колонка . Имя , СтрокаТаблицы2 [ Колонка . Имя ]);
КонецЦикла;

СтрокиТаблицы1 = ТЗn1 . НайтиСтроки ( СтруктураПоиска2 );
Если СтрокиТаблицы1 . Количество () <> 1 Тогда
Возврат Ложь;
КонецЕсли;


// Поиск строки в Таблице значений - найдём строчку с яблоком и покажем его цвет
СтрокаПоиска = ТЗ . Найти ( "Помидор" );
Если СтрокаПоиска <> Неопределено Тогда
Сообщить ( СтрокаПоиска . Цвет ); // Красный
КонецЕсли;

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

// Добавляем ещё один красный овощь Перец, Вариант №1
Стр = ТЗ . Добавить ();
Стр . Овощь = "Перец" ;
Стр . Цвет = "Красный" ;
Стр . Вкус = "Сладкий" ;
Стр . ВесОвоща = 120 ;
// Добавляем ещё один красный овощь Перец, Вариант №2
Стр = ТЗ . Добавить ();
Стр [ "Овощь" ] = "Перец" ;
Стр [ "Цвет" ] = "Красный" ;
Стр [ "Вкус" ] = "Сладкий" ;
Стр [ "ВесОвоща" ] = 120 ;

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

// Сдвигаем первую строку Таблицы Значений на одну позицию вперёд
ТЗ . Сдвинуть ( 0 , 1 );

// Возвращаем обратно строку Таблицы Значений
ТЗ . Сдвинуть ( 1 , - 1 );

// Скопировать (выгрузить) табличную часть документа/справочника/. в Таблицу Значений
ТЗ = ТабличнаяЧастьN . Выгрузить ();

// Создаем полную копию Таблицы Значений
КопияТЗ = ТЗ . Скопировать ();

// Создаем копию таблицы значений по нужным колонкам - будет только две колонки Овощь и Цвет
КопияТЗ = ТЗ . СкопироватьКолонки ( "Овощь, Цвет" );

// Создаем полную копию Таблицы Значений по отбору
Отбор = Новый Структура ;
Отбор . Вставить ( "Овощь" , "Помидор" );

// Таблица Значений будет содержать только строчку с помидором
КопияТЗ = ТЗ . Скопировать ( Отбор );

// Таблица Значений будет содержать цвет и вес помидора
КопияТЗ = ТЗ . Скопировать ( Отбор , "Цвет, ВесОвоща" );

// Сворачиваем Таблицу значений по колонке "Вкус", просуммируем по весу
ТЗ . Свернуть ( "Вкус" , "ВесОвоща" );

// Отсортируем Таблицу Значений по колонке
ТЗ . Сортировать ( "ВесОвоща Возр" );

// Отсортируем Таблицу Значений по нескольким колонкам
ТЗ . Сортировать ( "ВесОвоща Возр, Вкус Убыв" );

// Удаляем строку из Таблицы Значений (по индексу или по значению)
ТЗ . Удалить ( 0 );

// Очистим (удалим) все строки из Таблицы Значений
ТЗ . Очистить ();

Марина, консультант в Neti, рассказывает, как легко сравнить объемные таблицы в 1С.

Часто мы сталкиваемся с задачами, где необходимо сверить данные двух файлов или таблиц до изменений и после. Это не проблема, если в каждом источнике небольшое количество строк и максимум одна страница. А если предстоит найти отличия в файлах, состоящих из сотен страниц и тысяч строк? Искать глазами трудно и долго — велика вероятность что-то не заметить и потратить на столь утомительное занятие часы, дни, а то и недели. В статье я поделюсь 4 способами сравнить объемные таблицы по различным значениям, которые легко освоит любой пользователь.

Способ № 1: сравнить в базе 1С

На любой платформе 1С есть типовая обработка «Сравнить файлы». Находится в верхнем левом углу: «Главное меню — Файл — Сравнить файлы».

4 способа быстро и легко сравнить большие таблицы

4 способа быстро и легко сравнить большие таблицы

Чтобы начать работать, добавьте сопоставляемые файлы в окошки «Сравнить» и «С». Укажите «Как» сравнить: табличный документ, текстовый документ или двоичное сравнение. Нажмите клавишу «ОК».

4 способа быстро и легко сравнить большие таблицы

Открылось окно с обеими таблицами, в которых цветом выделены отличающиеся значения.

4 способа быстро и легко сравнить большие таблицы

На верхней панели инструментов доступны следующие команды →

позволяют переходить по различиям от текущего значения к следующему и обратно, в это время в основном окне будет выделена ячейка с отличием;

меняет порядок сравнения: если ее нажать, то правый лист окажется слева,
а левый — справа;

— настройка ячеек по цветам.

4 способа быстро и легко сравнить большие таблицы

В нижней части окна отображается подсказка, что означает каждый цвет.

Плюсы:

  • не требует дополнительного программного обеспечения;
  • моментально показывает все изменения без предварительных настроек;
  • удобный интерфейс: когда на любой части окна прокручиваешь первый файл вверх/вниз или вправо/влево, в то же время параллельно ему прокручивается второй.

Минусы:

  • ограниченное количество форматов — работает только с .txt и .mxl. Нельзя вставить Excel-файлы;
  • невозможно сохранить результат сравнения во внешний файл. Даже если скопировать данные и вставить в тот же Excel, цветное выделение различий не перенесется;
  • нет дополнительных формул, например, чтобы вывести сумму по колонке.

Способ № 2: сравнить в Excel

Самый распространенный метод: выгружаете первоначальный вариант отчета и тот же отчет с поправками в формате .xls и сверяете их в Microsoft Excel, пользуясь доступными формулами.

Для примера приведу стандартную формулу «Если».

1. Выделяем пустую ячейку. В ней будет отображаться результат функции.

2. В верхней панели кликаем на ярлык формулы

3. В предложенном списке выбираем функцию «ЕСЛИ», нажимаем «ОК».

4. Задаем условие в поле «Лог-выражение». На скрине-примере условие следующее: если значение ячейки по колонке «Конечный остаток» левой таблицы равен значению ячейки по колонке «Конечный остаток» справа.

5. В поле «Значение_если_истина» указываем, какой вывод нужно вывести, если значения равны.

6. В поле «Значение_если_ложь» обозначаем, какой вывод нужно вывести, если значения различны.

4 способа быстро и легко сравнить большие таблицы

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

4 способа быстро и легко сравнить большие таблицы

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

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

В маленьких файлах вы можете суммировать значения ячеек в колонках и тем самым выходить на строки с различиями.

4 способа быстро и легко сравнить большие таблицы

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

Вот один из примеров настройки:

4 способа быстро и легко сравнить большие таблицы

4 способа быстро и легко сравнить большие таблицы

Плюсы:

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

Минусы:

  • иногда потребуется не один час, чтобы подстроить таблицу для шаблонной формулы;
  • при сверке объемных документов, даже с использованием формул, легко не заметить нужную ячейку и допустить ошибки по невнимательности.

Способ №3: использовать «Средство сравнения электронных таблиц»

«Средство сравнения электронных таблиц» — отдельное ПО, устанавливаемое вместе с пакетом версии Microsoft Office 2013 Pro+ и Microsoft Office 365 Pro+. В других версиях этой программы нет.

Чтобы ее запустить, в меню «Пуск» выберите: «Все программы — Microsoft Office — Средство сравнения электронных таблиц (Spreadsheet Compare 2013)».

На вкладке «Главное» (Home) нажмите «Сравнить файлы» (Compare Files).

4 способа быстро и легко сравнить большие таблицы

В окошках «Сравнить» (Compare) и «С» (To) укажите нужные файлы формата Excel. Нажмите «ОК».

4 способа быстро и легко сравнить большие таблицы

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

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

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

4 способа быстро и легко сравнить большие таблицы

Результаты сравнения можно сохранить в Excel по команде: «Экспорт результатов» (Export Results) на вкладке «Главное» (Home). Есть возможность скопировать итоги и вставить их в любое другое текстовое ПО: «Копировать результаты в буфер обмена» (Copy Results to Clipboard).

Плюсы:

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

Минусы:

  • нельзя редактировать табличные части;
  • работает только с форматом Excel;
  • доступна в Microsoft Office 2013 Pro+ и Microsoft Office 365 Pro+.

Способ № 4: использовать Excel Power Query

Power Query — технология подключения к данным, которая помогает обнаруживать, подключать, объединять и уточнять данные из различных источников для анализа.

Чтобы начать с ней работать, необязательно заранее подготавливать файлы Excel, сохранять, копировать таблицы. Power Query позволяет загружать данные:

  • из интернета;
  • внешнего файла форматом Excel, CSV, XML;
  • баз данных SQL, Access, IBM DB2 и других;
  • Azure;
  • веб-служб Dynamics 365,
  • Facebook.

Самые продвинутые пользователи могут «Написать запрос с нуля».

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

Перед вами две таблицы в Excel. Нужно преобразовать каждую в умную таблицу. Для этого выделите нужный диапазон, на вкладке «Главная» кликните на «Форматировать как таблицу» или на клавиатуре нажмите Ctrl+T.

4 способа быстро и легко сравнить большие таблицы

Теперь с каждой таблицы необходимо создать отдельные запросы для сравнения. Выделите любую ячейку в первой таблице и перейдите на вкладку Power Query «Из таблицы или диапазона». Она откроется в «Редакторе Power Query». Рекомендую задать ей «Имя» в свойствах, чтобы в дальнейшем не путать файлы. При необходимости уберите лишние строки и столбцы.

4 способа быстро и легко сравнить большие таблицы

Нажмите «Закрыть и загрузить в …», выберите «Только создать подключение» и кликните на кнопку «Загрузить».

4 способа быстро и легко сравнить большие таблицы

Повторите все шаги со вторым документом.

В правой части окна появились два запроса с указанными именами таблиц. На панели инструментов выберите команду «Слияние» и укажите поочередно созданные запросы. По одному разу в каждой части окна кликом выделите колонки, по которым нужно объединить файлы. Тип соединения «Полное внешнее (все строки из обеих таблиц)». Кликните на «ОК».

Вы снова попали в «Редактор Power Query». Здесь обе таблицы объединены в одну путем слияния указанных столбцов. В «Свойствах» задайте имя новому документу — раскройте крайнюю правую колонку, нажав на иконку

Следующий этап — вывести отличия таблиц в отдельную колонку. На вкладке «Добавление столбца» выберите «Условный столбец». В окне настройки задайте «Имя нового столбца» и проставьте условия сравнений колонок и какой вывод должен отразиться при их соблюдении. Правил можно задавать неограниченное количество с помощью команды «Добавить правило».

В примере задано:

1. Если в колонке «Регистратор» первой таблицы стоит значение null, а во второй таблице это значение заполнено, значит документ «Добавили».

2. Если в колонке «Регистратор1» второй таблицы стоит значение null, значит документ «Удалили».

3. Если значения колонок «Конечный остаток» и «Конечный остаток1» не равны, значит данные «Изменили».

Обратите внимание на третье условие. Чтобы в «Значении» выбрать нужную колонку, кликните на иконку. Затем «Выберите столбец». Только тогда появится выпадающий список допустимых колонок.

Обязательно заполните в левом нижнем углу значение «В противном случае» — оно будет исполняться, если ни одно из вышеприведенных условий не выполнено. Нажмите «ОК».

4 способа быстро и легко сравнить большие таблицы

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

4 способа быстро и легко сравнить большие таблицы

4 способа быстро и легко сравнить большие таблицы

Итог: таблицы до сравнения и объединенная сводка с готовыми результатами для анализа.

4 способа быстро и легко сравнить большие таблицы

Плюсы:

  • исключены ошибки по невнимательности, вам нужно только указать, что с чем сравнивать и что вывести в вывод;
  • надстройка работает со множеством форматов и различными источниками данных.

Минусы:

Надеюсь, методы, о которых я рассказала, пригодятся вам в работе и сделают процесс сравнения данных проще и легче.

Читайте также: