Добрый день! Подскажите начинающему программисту, может кто сталкивался лично... У меня есть два Эксель файла, оба они состоят из двух колонок, в первой колонке Характеристика оборудования (строка), во второй - значение характеристики (или строка, или число). Мне нужно сравнить эти два файла и различия выделить цветом. Вопрос в том, как это сделать наиболее оптимально. Пока мысли только в сторону того,чтобы выгрузить оба файла в 2 таблицы значений и сравнивать их между собой. Может кто-нибудь подскажет более красивый способ?
По теме из базы знаний
- Инфостарт. Восьмерка. Лучшее
- PowerTools
- Внедрение 1С: Комплексной автоматизации 2 на небольшом машиностроительном заводе – первая очередь
- Распространенные ошибки разработчиков, приводящие к проблемам производительности
- Интеграции с маркетплейсами из одного окна: Озон, ВБ, Яндекс, Сбер, Али, ЛаМода для 1С:УНФ, УТ, КА, ERP
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Объясню как будет происходить сравнивание. Изначально есть файл Эксель с согласованными характеристиками поставляемого оборудования. Но в процессе установки оборудования изменяются какие-либо характеристики этого оборудования, то есть грубо говоря насос с одним давлением меняют на насос с другим давлением. В итоге по завершению поставки, установки появляется второй файл Эксель, как бы итоговый, который содержит данные что поставили в итоге. Вот их между собой нужно сравнить. Вобще, этот второй файл, он заполняется динамически, то есть в процессе установки оборудования в него вносят корректировки... Просто сам факт сравнения планировалось делать в конце, когда проект поставки завершен
(5) Самый лучший способ, на мой взгляд, использовать документы.
Если взять типовые конфигурации, то сильно похоже на Заказ клиента - Реализация.
Заказать можно крыло от боинга, а получить шаурму. По информации Заказно - Реализовано по заказу как раз можно собрать нужную информацию.
На крайний случай создать отдельные документы с табличными частями. или регистр сведений (может накопления, если отгрузка может происходить частями)
С табличными файлами выглядит ненадежно.
Если взять типовые конфигурации, то сильно похоже на Заказ клиента - Реализация.
Заказать можно крыло от боинга, а получить шаурму. По информации Заказно - Реализовано по заказу как раз можно собрать нужную информацию.
На крайний случай создать отдельные документы с табличными частями. или регистр сведений (может накопления, если отгрузка может происходить частями)
С табличными файлами выглядит ненадежно.
Я выгружал в две ТЗ, а потом соединял в запросе, и добавлял еще одну колонку Соответствие/Несоответствие.
(9) Это как-то так?
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ Колонка1, Колонка2, Колонка3
| ПОМЕСТИТЬ НоваяТЗ
| ИЗ &Таблица1
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ Колонка1, Колонка2, Колонка3
| ИЗ &Таблица2
|
| ;
|
| ВЫБРАТЬ Колонка1, Колонка2, Сумма(Колонка3) ИЗ НоваяТЗ
| СГРУППИРОВАТЬ ПО Колонка1, Колонка2
| ";
Запрос.УстановитьПараметр("Таблица1",Таблица1);
Запрос.УстановитьПараметр("Таблица2",Таблица2);
НоваяТЗ = Запрос.Выполнить().Выгрузить();
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ Колонка1, Колонка2, Колонка3
| ПОМЕСТИТЬ НоваяТЗ
| ИЗ &Таблица1
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ Колонка1, Колонка2, Колонка3
| ИЗ &Таблица2
|
| ;
|
| ВЫБРАТЬ Колонка1, Колонка2, Сумма(Колонка3) ИЗ НоваяТЗ
| СГРУППИРОВАТЬ ПО Колонка1, Колонка2
| ";
Запрос.УстановитьПараметр("Таблица1",Таблица1);
Запрос.УстановитьПараметр("Таблица2",Таблица2);
НоваяТЗ = Запрос.Выполнить().Выгрузить();
В самом Excel есть куча процедур(формул) сравнения таких файлов с выделением или простановкой отметки в отдельный столбец об измененной записи.
Причем работают процедуры в Excel намного быстрее, чем если переносить это в 1С и сравнивать.
Погуглите "сравнение файлов/данных Excel" и попробуйте. Это самое оптимальное.
Причем работают процедуры в Excel намного быстрее, чем если переносить это в 1С и сравнивать.
Погуглите "сравнение файлов/данных Excel" и попробуйте. Это самое оптимальное.
(10) Дело в том, что мне надо чтобы пользователь в 1с нажимал кнопку "Сравнить файлы" и происходило сравнение и в зависимости от результата менялся бы статус документа, поэтому и нужно, как мне кажется, делать это в 1с, а не в Excel.
(11)
Вообще все функции Excel можно вызывать и из 1С. Смотря что надо. Вы,вот, не говорите всю задачу до конца. И по последним словам про кнопки, Вам, вроде, совсем необязательно выделять что-то зрительно, а важно автоматическое измение статуса документа, может, если есть несовпаденеие в Excel. Это более простая задача, но все равно, лучше сравнение делать, имхо, в самом Excel и от него отталкиваться.
и происходило сравнение и в зависимости от результата менялся бы статус документа
Вообще все функции Excel можно вызывать и из 1С. Смотря что надо. Вы,вот, не говорите всю задачу до конца. И по последним словам про кнопки, Вам, вроде, совсем необязательно выделять что-то зрительно, а важно автоматическое измение статуса документа, может, если есть несовпаденеие в Excel. Это более простая задача, но все равно, лучше сравнение делать, имхо, в самом Excel и от него отталкиваться.
(10)Примерно да. Я помещал каждую таблицу во временную, затем делал полным соединением, чтобы сопоставлялись одинаковые поля, после этого в последнем запросе добавлял колонку Соответствие/Несоответствие и с помощью функции ВЫБОР заполнял ее. Это может и не самое оптимальное решение, но для той задачи, что передо мной стояла - оно подошло.
(16) Я помещал результат в реквизит с типом табличный документ.
Результат.Выгрузить() - это как раз результат запроса сравнения.
Затем у меня просто была кнопка, сохранить результат, которая:
Тут на клиенте попробуйте обработать табличный документ и раскрасить, как нужно. Если нужно, то в личку свою обработку скину, она не является законченной, так как нужно было сделать быстро для сравнения двух конкретных счетов в УПП и ERP.
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Результат.Выгрузить());
Построитель.ВыводитьЗаголовокОтчета = Ложь;
Построитель.Вывести(ТабДокумент);
Результат.Выгрузить() - это как раз результат запроса сравнения.
Затем у меня просто была кнопка, сохранить результат, которая:
&НаКлиенте
Процедура СохранитьРезультат(Команда)
Режим = РежимДиалогаВыбораФайла.Сохранение;
ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогСохраненияФайла.ПолноеИмяФайла = "";
Фильтр = "Excel(*.xlsx)|*.xlsx"; // | Excel_2003(*.xls)|*.xls";
ДиалогСохраненияФайла.Фильтр = Фильтр;
ДиалогСохраненияФайла.МножественныйВыбор = Ложь;
ДиалогСохраненияФайла.Заголовок = "Выберите файл для сохранения";
Если ДиалогСохраненияФайла.Выбрать() Тогда
ПутьКФайлу = ДиалогСохраненияФайла.ПолноеИмяФайла;
КонецЕсли;
ТабДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры
ПоказатьТут на клиенте попробуйте обработать табличный документ и раскрасить, как нужно. Если нужно, то в личку свою обработку скину, она не является законченной, так как нужно было сделать быстро для сравнения двух конкретных счетов в УПП и ERP.
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот