Страницы: 1
RSS
Сравнение таблиц до и после изменения
 
Всем привет! На работе поставили задачу – сравнить две таблицы в 1С, т.е выполнить сравнение таблиц До и После изменения и выявить, что изменилось. Каким образом это лучше сделать, с привлечением программиста, или может без него.
 
Цитата
Андрей написал:
Всем привет! На работе поставили задачу – сравнить две таблицы в 1С, т.е выполнить сравнение таблиц До и После изменения и выявить, что изменилось. Каким образом это лучше сделать, с привлечением программиста, или может без него.
Добрый! Какая у вас конфигурация 1С? В целом в 1С предусмотрен стандартный функционал, которым вы можете воспользоваться. Для этого используйте обработку «Сравнить файлы». Открывается через Главное меню - Файл – Сравнить файлы.

Откроется у вас форма, где нужно указать адрес к таблице1 и к таблице2. Выберите тип сравнения. Вы не пишите, какого типа значения собираетесь сравнивать, поэтому предположу, что оставим вариант в третьем поле «двоичное сравнение». Дальше – ОК.

1Ска выведет вам на экран обе ваши таблицы – убедитесь, что это именно те таблицы, которые вам нужны, мало ли. Цветом система вам сразу выделит, что разного в этих таблицах.

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

Если у вас информация подсвечивается разными цветами – обратитесь к настройке цветов. Она задается по умолчанию, но вы можете изменить цвета. Но для начала просто посмотрите, какой смысл 1С вкладывает в это подсвечивание: фон удаленных/добавленных/измененных значений и текст, добавленный/удаленный/измененный.

Вот и все, никаких спец программ вам не нужно. Пользуйтесь.

П.С. Такой метод вам подойдет, только если сравниваемые таблицы в определенных форматах: .txt и .mxl. Если у вас другой формат, ждите ошибку: «Ошибка при выполнении файловой операции» и «Бинарные файлы различны».

 
Цитата
Гость12 написал:
Цитата
Андрей написал:
Всем привет! На работе поставили задачу – сравнить две таблицы в 1С, т.е выполнить сравнение таблиц До и После изменения и выявить, что изменилось. Каким образом это лучше сделать, с привлечением программиста, или может без него.
Добрый! Какая у вас конфигурация 1С? В целом в 1С предусмотрен стандартный функционал, которым вы можете воспользоваться. Для этого используйте обработку «Сравнить файлы». Открывается через Главное меню - Файл – Сравнить файлы. Откроется у вас форма, где нужно указать адрес к таблице1 и к таблице2. Выберите тип сравнения. Вы не пишите, какого типа значения собираетесь сравнивать, поэтому предположу, что оставим вариант в третьем поле «двоичное сравнение». Дальше – ОК.  1Ска выведет вам на экран обе ваши таблицы – убедитесь, что это именно те таблицы, которые вам нужны, мало ли. Цветом система вам сразу выделит, что разного в этих таблицах.   С помощью верхнего меню (по сути аналогично поиску в ворде), вы можете переходить от одного найденного отличия к другому. Можно поменять расположение таблиц. Левую сделать правой и наоборот.   Если у вас информация подсвечивается разными цветами – обратитесь к настройке цветов. Она задается по умолчанию, но вы можете изменить цвета. Но для начала просто посмотрите, какой смысл 1С вкладывает в это подсвечивание: фон удаленных/добавленных/измененных значений и текст, добавленный/удаленный/измененный.  Вот и все, никаких спец программ вам не нужно. Пользуйтесь.  П.С. Такой метод вам подойдет, только если сравниваемые таблицы в определенных форматах: .txt и .mxl. Если у вас другой формат, ждите ошибку: «Ошибка при выполнении файловой операции» и «Бинарные файлы различны».
У меня ексель файлы. Есть еще какие-то варианты для сравнения? Таблицы не большие, точнее колонок мало, а строк очень много, и они все перепутали. Стандартно прорендерить в экселе не получится.
 
Если вы немного знакомы с программированием или у вас в команде есть программисты, можете попробовать что-то типа такого:
Функция РазницаТаблицЗначений(Таблица0, Таблица1, Измерения) Экспорт
   
   ВсеКолонки = "";
   Для Каждого Колонка Из Таблица0.Колонки Цикл
       ВсеКолонки = ВсеКолонки + ", " + Колонка.Имя
   КонецЦикла;
   ВсеКолонки = Сред(ВсеКолонки, 2);
   
   Таблица = Таблица1.Скопировать();    
   
   Таблица.Колонки.Добавить("Знак", Новый ОписаниеТипов("Число"));
   
   Таблица.ЗаполнитьЗначения(1, "Знак");
   
   Для Каждого Строка Из Таблица0 Цикл ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Строка) КонецЦикла;
   
   Таблица.Колонки.Добавить("Количество ");
   Таблица.ЗаполнитьЗначения(1, "Количество");
   
   Таблица.Свернуть(ВсеКолонки, "Знак, Количество ");
   
   Ответ = Таблица.Скопировать(Новый Структура("Количество ", 1), ВсеКолонки + ", Знак");
   
   Ответ.Сортировать(Измерения);
   
   Возврат Ответ
   
КонецФункции

Вы получается соединяете две свои таблицы с помощью цикла. К каждой последующей (например, первой строки одной таблице) берется строка из второй таблицы. Затем добавляется столбец Количество, где будет указана цифра, показывающая количество одинаковых строк. Программа сделает свертку по всем столбцам и выявит одинаковые и разные строки. При этом одинаковые будут записаны в одной (новой) таблице, а разные – в другой. Дальше обрабатывается только таблица2. Выполняется сортировка по измерениям, чтобы строки, которые менялись в одной и другой первоначальных таблицах оказались рядом.
Получилось выполнить задачу?
 

Приветствую, форумчане! Аналогично способу выше, можно не просто соединять две таблицы построчно, а немного модифицировать код. Формировать новую общую таблицу не по строкам, а по столбцам.

Функция РазницаТаблицЗначений(Таблица0, Таблица1, Измерения) Экспорт
   
   ВсеКолонки = "";
   Для Каждого Колонка Из Таблица0.Колонки Цикл
       ВсеКолонки = ВсеКолонки + ", " + Колонка.Имя
   КонецЦикла;
   ВсеКолонки = Сред(ВсеКолонки, 2);
   
   Таблица = Таблица1.Скопировать();    
   
   Таблица.Колонки.Добавить("Знак", Новый ОписаниеТипов("Число"));
   
   Таблица.ЗаполнитьЗначения(1, "Знак");
   
   Для ё = 1 По Таблица0.Количество() Цикл Таблица.Вставить(0) КонецЦикла;
   
   Для ё = 0 По Таблица0.Колонки.Количество() - 1 Цикл Таблица.ЗагрузитьКолонку(Таблица0.ВыгрузитьКолонку(ё), ё) КонецЦикла;
   
   Таблица.Колонки.Добавить("Количество ");
   Таблица.ЗаполнитьЗначения(1, " Количество ");
   
   Таблица.Свернуть(ВсеКолонки, "Знак, Количество ");
   
   Ответ = Таблица.Скопировать(Новый Структура("Количество ", 1), ВсеКолонки + ", Знак");
   
   Ответ.Сортировать(Измерения);
   
   Возврат Ответ
   
КонецФункции


Может у вас в таблицах есть какой-то индекс данных или вы можете его ввести. И выполнять сравнение по нему.

 
Да, все получилось. Задача сдана. Спасибо за советы.
Страницы: 1