Сравнение данных из разных источников (1С 8, SQL, CSV/TXT/DBF/XLS/XML, табличный документ) (версия 11.4.36)

Публикация № 581794

Обработки - Универсальные обработки

сравнение данных 8 SQL Server PostgreSQL сопоставление разные конфигурации CSV TXT DBF XLS XML базы баз документов справочников объектов

82
Обработка предназначена для сравнения данных, полученных из разных источников данных: информационных баз 1С 8, баз данных SQL, файлов формата CSV/TXT/DBF/XLS/XML, вручную заполненного табличного документа. Минимально необходимая версия платформы: 8.3.5.823 (т.к. там уже реализован тип Конструктор запроса).

Сравнение можно производить между данными любых источников: текущей базой 1С 8, внешними базами 1С 8, внешними базами данных SQL, файлами форматов CSV/TXT/DBF/XLS/XML, данными вручную заполненного табличного документа. Данные сравниваются между собой по ключу, который определяется как первая колонка  (или первые колонки в случае составного ключа) запроса для 1С/SQL или в соответствии с настройками для файлов и табличного документа.  В верхней части формы находятся кнопки с изображениям кругов Эйлера, предназначенные для указания обработке, какую операцию реляционной алгебры применять для объединения результатов запросов. После соединения выборок можно дополнительно наложить условия отбора в секциях Код для вывода строк и Код для запрета вывода строк. Реализована возможность использования составных ключей, программной обработки данных в процессе чтения с помощью произвольного кода, сворачивания данных.

 

Актуальная инструкция всегда доступна во встроенной справке обработки по клавише F1.

 

Буду благодарен, если будете уведомлять о багах на sertakov [а] list.ru или в комментариях.

82

Скачать файлы

Наименование Файл Версия Размер
Консоль сравнения данных из разных источников (1С 8, SQL, CSV/TXT/DBF/XLS/XML, табличный документ)
.epf 133,25Kb
02.05.19
94
.epf 11.4.36 133,25Kb 94 Скачать

См. также

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

Комментарии
Избранное Подписка Сортировка: Древо
1. alexzhegzdrin 15.02.17 16:28 Сейчас в теме
Неплохо бы увидеть возможность выбора драйвера, отличного от MS SQL
2. sertak 119 15.02.17 16:58 Сейчас в теме
(1) Версия 4.4.12: драйвер можно указать вручную, можно выбрать из списка (SQL Server, PostgreSQL).
3. sertak 119 16.02.17 23:11 Сейчас в теме
Версия 5.0.13:
добавлена возможность сравнения с файлами CSV/TXT/DBF/XLS.

Теперь можно сравнивать данные из любых двух источников:
- текущая база 1С 8;
- внешняя база 1С 8;
- база данных SQL Server;
- база данных PostgreSQL;
- другая база SQL через вручную указанный драйвер;
- файл формата CSV/TXT/DBF/XLS.
4. sertak 119 20.02.17 12:24 Сейчас в теме
Версия 6.1.15:
добавлена возможность использования составного ключа из двух колонок;
исправлена ошибка, из-за которой невозможно было извлечь УИД из ссылки из внешней базы 1С 8.
5. sertak 119 20.02.17 15:47 Сейчас в теме
Версия 6.1.16:
исправлена ошибка.
6. sertak 119 04.03.17 00:15 Сейчас в теме
Версия 7.0.17:
реализована возможность загрузки данных из табличного документа.

Версия 7.0.18:
исправлена ошибка.
7. sertak 119 12.03.17 19:27 Сейчас в теме
Версия 7.1.19:
увеличена длина и точность типа Число реквизитов.
8. zerdov 46 24.05.17 17:00 Сейчас в теме
Как внести значения параметра Период в запросе к ВТ регистра сведенийЦеныНоменклатурыСрезПоследних ?
Такое впечатление, что запрос работает с обычной таблицей ЦеныНоменклатуры. Выводит даты документов- регистраторов.
9. sertak 119 25.05.17 12:26 Сейчас в теме
10. sertak 119 25.05.17 12:32 Сейчас в теме
(8)
1)
 ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Номенклатура,
	ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(ДАТАВРЕМЯ(2017, 1, 1), ) КАК ЦеныНоменклатурыСрезПоследних


2)
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Номенклатура,
	ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаНачала, ) КАК ЦеныНоменклатурыСрезПоследних


а на вкладке консоли Общие настроки -> Основные нужно в левую границу периода внести нужную дату среза цен
11. zerdov 46 25.05.17 16:14 Сейчас в теме
(10)
ДАТАВРЕМЯ(2017, 05, 25)

Спасибо! Я по второму варианту строил запрос. Мое "впечатление" было ошибочным, периоды и должны были быть разными, главное что бы были последними ).
ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК НоменклатураКод,
	ЦеныНоменклатурыСрезПоследних.Период КАК Период,
	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаОкончания, ) КАК ЦеныНоменклатурыСрезПоследних
12. sertak 119 16.11.17 15:55 Сейчас в теме
Версия 7.1.20:
исправлена ошибка, из-за которой в некоторых случаях сравнение по составному ключу производилось некорректно.
13. sertak 119 17.11.17 22:24 Сейчас в теме
Версия 7.2.21:
реализована возможность использования параметров запроса при подключении к текущей базе 1С 8 (параметры ДатаНачала и ДатаОкончания берутся только с вкладки Общие настройки -> Основные даже в том случае, если одноименные есть на вкладке Параметры запроса);
исправлена ошибка, из-за которой в настройках не сохранялся номер первой строки файла.
14. sertak 119 20.02.18 11:56 Сейчас в теме
Версия 8.0.22:
реализована возможность загрузки данных из файлов формата XML;
исправлена ошибка, из-за которой в некоторых режимах некорректно определялся список обязательных к заполнению полей;
доработан вывод сообщений об ошибках заполнения реквизитов.
15. Erne100 240 26.03.18 11:23 Сейчас в теме
А параметров запроса Б нет? Хотя бы примитивный типов... для начала
Evg-Lylyk; sertak; +2 Ответить
17. sertak 119 26.03.18 14:52 Сейчас в теме
Вы имеете в виду ситуацию, когда Б - внешняя база 1С, видимо. Не реализовывал пока.
18. Erne100 240 26.03.18 15:59 Сейчас в теме
(17) Да именно это. А пока делаю так:
ГДЕ
	РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
	И РеализацияТоваровУслуг.Организация.ИНН = "32177162"
30. sertak 119 29.06.18 13:08 Сейчас в теме
(15) реализовано в версии 11.1.30.
Evg-Lylyk; +1 Ответить
19. m-rv 731 04.05.18 14:49 Сейчас в теме
Оч.крутая штука!
Как мысль для дальнейшего развития: нужен какой-то а-ля пользовательский режим, в котором не видны настройки подключений, запросы, но есть возможность редактировать режим "таблица". т.е. программист все настроил, сохранил настройки, потом пользователь просто открывает настройки, сравнивает и смотрит на результат.
20. sertak 119 04.05.18 15:51 Сейчас в теме
Спасибо, сам к ней неравнодушен ).
Сохранение/открытие настроек есть, пользователю достаточно сделать 2 действия: выбрать настройку и нажать кнопку сформировать, даже период будет сам пересчитываться, т.к. его можно задать в единицах времени относительно текущей даты. Напишите подробнее мысль, заинтересовали.
24. sertak 119 14.05.18 09:04 Сейчас в теме
21. sertak 119 05.05.18 07:25 Сейчас в теме
Версия 8.0.23:
исправлена ошибка, из-за которой при наличии пробелов в ключе могли не заполняться реквизиты.
22. sertak 119 08.05.18 11:47 Сейчас в теме
Версия 8.0.24:
исправен запрет на имя колонки выборки запроса: теперь колонку можно называть Количество.
23. sertak 119 14.05.18 09:04 Сейчас в теме
Версия 8.1.25:
добавлена возможность открытия формы в пользовательском режиме, где пользователь может только выбирать сохраненные настройки и производить сравнение, для включения режима достаточно установить флаг Пользовательский режим в программно созданную обработку либо передать этот флаг как параметр при открытии формы (ОткрытьФорму("Обработка.ВС_КонсольСравненияДанныхИзРазныхИсточников.Форма", Новый Структура("ПользовательскийРежим", Истина), ПараметрыВыполненияКоманды.Источник, Новый УникальныйИдентификатор)).
П.С. Спасибо Маркову Роману за идею.
25. sertak 119 23.05.18 11:40 Сейчас в теме
Версия 8.2.26:
добавлена возможность программного заполнения реквизитов с помощью произвольного кода при чтении данных из файлов (обращение к значениям реквизитов осуществлется по именам Р1...Р5, обращение к текущему - по имени РТек, например, для реквизита 3 может быть задан такой произвольный код: РТек = Р1 * Р2 * 1.2).
26. sertak 119 12.06.18 10:40 Сейчас в теме
Версия 9.0.27:
реализована возможность использования составного ключа из трех столбцов (используются первые три колонки каждой выборки для баз 1С и SQL и явно указанные номера колонок для файлов).
27. sertak 119 25.06.18 11:11 Сейчас в теме
Версия 10.0.28:
реализована возможность программного изменения столбцов ключа с помощью произвольного кода при чтении данных (обращение к исходным значениям столбцов ключа осуществляется по именам Ключ1, Ключ2, Ключ3, например, может быть задан такой произвольный код: КлючТек = Число(Лев(СокрЛП(КлючТек ), 5));
добавлены кнопки открытия в реквизитах с ключами и произвольным кодом;
исправлена ошибка, из-за которой при чтении XML-файла не заполнялся третий столбец составного ключа.
28. sertak 119 27.06.18 13:06 Сейчас в теме
Версия 11.0.29:
реализована возможность сворачивания данных, полученных из файлов или табличного документа, по ключу (для реквизитов применяется агрегатная функция Сумма).
29. sertak 119 29.06.18 13:08 Сейчас в теме
Версия 11.1.30:
реализована возможность установки параметров запроса примитивных типов данных для внешней базы 1С 8.
31. sertak 119 06.07.18 17:06 Сейчас в теме
Версия 11.2.31:
добавлены колонки Тип столбца 1-3 ключа.
32. sertak 119 10.07.18 11:58 Сейчас в теме
Версия 11.3.32:
реализована возможность выгрузки результата сравнения в файл формата CSV (на сервере).
33. sertak 119 25.04.19 11:17 Сейчас в теме
Версия 11.3.34:
доработан интерфейс (добавлены пояснения и др.).
34. starik-2005 1864 26.04.19 11:18 Сейчас в теме
Умеет работать по регламенту и данные в файл класть? Типа база 1, в которой остатки, база 2, в которой остатки, регламент обмена, регламент сравнения после обмена (или до, и в качестве параметра для обмена результат сравнения в части отличающихся данных). Весьма распространенный кейс для компаний, которые режут разбухшие базы на актуальную с остатками и архивную с доступом только для определенных людей и ежедневной синхронизацией.
35. sertak 119 26.04.19 13:43 Сейчас в теме
(34) Да, функции и процедуры находятся в модуле объекта, без проблем. Создаете новый элемент справочника с настройками, в регламенте создаете экземпляр обработки, скармливаете ей этот элемент, устанавливаете дату либо же она автоматом, если в настройках была указана относительная и вызываете соответствующую функцию. Напишу между делом пример использования обработки из регламентного задания.
36. starik-2005 1864 26.04.19 14:54 Сейчас в теме
(35)
Напишу между делом пример использования обработки из регламентного задания.
Внешние обработки могут подключаться к системе и выполняться по-расписанию. Вы не используете данный функционал БСП?
37. sertak 119 26.04.19 15:03 Сейчас в теме
(36) Нет, не реализовывал такой вариант, при наличии времени посмотрю.
38. starik-2005 1864 26.04.19 15:07 Сейчас в теме
Писал коллегам как-то лет сто назад:
------------------------
На всякий случай хочу рассказать, как за пять минут превратить внешнюю обычную обработку в подключаемое регламентное задание для систем на базе БСП 2.х. (все наши решения, основанные на бухгалтерии 3.х).

1. Код обработки должен быть в модуле обработки, а не в ее форме.

2. Нужно создать парочку процедур:

Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Версия = "0.1"; // это версия
    ПараметрыРегистрации.Назначение = Неопределено;
    ПараметрыРегистрации.БезопасныйРежим = Ложь; // ВАЖНО! это разрешение обработке выполняться в небезопасном режиме - файлы, интернет, ...
    ПараметрыРегистрации.Информация = НСтр("ru = 'Загрузка рейтингов'");
   
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("ru = 'Загрузка рейтингов'");
    Команда.Идентификатор = "ЗагрузкаРейтингов";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    Команда.ПоказыватьОповещение = Ложь;
   
    Возврат ПараметрыРегистрации;
КонецФункции

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды = Неопределено) Экспорт
    Если ИдентификаторКоманды = "ЗагрузкаРейтингов" Тогда
        ЗаписьЖурналаРегистрации("ЗагрузкаРейтингов", УровеньЖурналаРегистрации.Предупреждение, ЭтотОбъект.Метаданные(), ЭтотОбъект, "Начало загрузки рейтингов");
        ВыполнитьЗагрузку(); // это та самая процедура, которая будет выполняться в регламентном задании
    КонецЕсли;
КонецПроцедуры

// это та самая процедура, которая будет выполняться в регламентном задании
Процедура ВыполнитьЗагрузку()
// ... ТУТ ВАШ КОД!
// ... ТУТ ВАШ КОД!
КонецПроцедуры
---------------------
Показать
39. sertak 119 26.04.19 15:32 Сейчас в теме
(38) Спасибо, при наличии времени думаю сделать, основное время работаю с нетиповой конфигой, с БСП редко имею дело последнее время.
40. webester 29 27.04.19 07:27 Сейчас в теме
(38)Извините за глупые вопросы. Я не вижу как это должно лечь в регламентные задания и в какой момент это должно произойти. Я вижу внешнюю обработку в которой описана команда вызова серверного метода. Это стандартная технология подключения внешних обработок в БСП. Не могли бы вы объяснить подробнее причем здесь регламентные задания, если вам не сложно.
41. starik-2005 1864 27.04.19 10:52 Сейчас в теме
(40) всякую подключенную внешнюю обработку можно настротть выполняться по расписанию - это стандартный механизм БСП. Настраивается все в справочнике внешних обработок. Могу за мзду показать как, если до сих пор не ясно.
43. sergathome 27.04.19 12:56 Сейчас в теме
(41) ну не всякую, не вводите слабые умы в заблуждение...
47. starik-2005 1864 27.04.19 17:16 Сейчас в теме
48. starik-2005 1864 27.04.19 17:17 Сейчас в теме
(44)
Можно без мзды
Без мзды я уже все написал )))
45. webester 29 27.04.19 15:51 Сейчас в теме
(41)Понятно. Я не понял просто, Написано вот как добавить обработку в регламентные задания. А код приведен регистрации обработки. Так бы и написали - Можно добавить обработку с вызовом серверного метода и зарегистрировать ее как регламентное задание штатными средствами БСП.
Важно понимать, то, что хотел написать программист и то, что он написал, очень часто не одно и то же©не помню кто
46. acanta 56 27.04.19 16:33 Сейчас в теме
(45) Мы покажем что у нас есть и посмотрим что ты можешь ©заказчики
Удачи в продвижении.
42. sertak 119 27.04.19 12:33 Сейчас в теме
(40) Я имел в виду создание нового регламентного в конфигураторе, а через БСП я не рассматривал.
49. sertak 119 30.04.19 12:51 Сейчас в теме
Версия 11.4.35:
модальные окна заменены на блокирующие;
реализована возможность выгрузки результата сравнения в файл на клиенте.
starik-2005; +1 Ответить
50. kosmo0 80 04.05.19 16:54 Сейчас в теме
Вот о чем я мечтал давненько, но руки так и не дошли. А то некоторое количество удаленных БД в тьму-таракани и некоторых случаев сбоев обмена данными.

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

Вот как-то так.
51. sertak 119 06.05.19 20:58 Сейчас в теме
(50) интересная идея, подумаю на досуге, что-то вроде справочника Сценарии сравнения, каждый элемент которого включает список настроек сравнения.
52. starik-2005 1864 07.05.19 10:05 Сейчас в теме
(50) лучше обороты сравнить за периоды, если есть разница - найти период с нестыковкой, потом уже по нему детализироваться. вываливая только разницу (могли контрагента поменять в базе А, а в базу Б он не приехал - самая частая причина нестыковок, а могли документ распровести или он не приехал по какой-то причине)


(51) в принципе со сценариями и разворотом детализации вполне себе продукт получается за денежку. Автоотправку на почту прикрутить - и за 2к выставить.
53. sertak 119 07.05.19 11:10 Сейчас в теме
(52) целей заработать нет, но идея стоящая. Я когда-то в одной компании работал, там 8 юрлиц было и даже конфиги не все одинаковые, а они друг другу комиссионный товар продавали, хлебнул горя, тогда-то и начала зарождаться идея о создании гибкого инструмента для сравнения чего угодно. Сейчас у меня баз немного, но сценарность и тут бы пригодилась. Попытка не пытка же ).
54. starik-2005 1864 07.05.19 11:17 Сейчас в теме
(53) мы в свое время базу написали, там SQL-запросики всю разность давали.
Оставьте свое сообщение