gifts2017

Сравнение документов между базами

Опубликовал Валерий (Walther_008) в раздел Обработки - Универсальные обработки

Обработка для сравнения документов между двумя базами. Обычная + управляемая формы
Ключ поиска: Номер + Дата
Сравниваемые поля: Статус проведения, пометка удаления, сумма документа (если есть).

Обработка была написана "на коленке" под конкретную задачу сравнения документов по результатам обмена между базами УТ11 и Бух 3.0.

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

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

Документы сопоставляются по ключу Номер + Дата (время не учиытвается) - если в базах один и тот же документ проеден разными датами - в итоговой таблице сравнения он будет считаться недостающим в одной и во второй базах.

Подключение осуществуляется через COM с базе-корреспонденту, которая расположена на сервере. Повторюсь, обработка писалась под конкретную задачу. Кому надо  - может легко переписать под файловую базу.

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

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

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

Обработка выкладывается как есть. Ничего допиливать в ней с целью выложить - не собираюсь.

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

Наименование Файл Версия Размер
СравнениеДокументов 31
.epf 26,83Kb
09.11.15
31
.epf 2.0 26,83Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Макарова Виктория (vikm) 30.10.15 14:39
Не работает на 8.3, на большинстве документов вылетает:
{Форма.Форма.Форма(142)}: Ошибка при вызове метода контекста (Выполнить)
Таб = Запрос1.Выполнить().Выгрузить();
по причине:
{(8, 20)}: Синтаксическая ошибка "КАК"
Документ.{ИмяДок} <<?>>КАК Док

Закономерность не понятна.

БП 3.0.41.55, платформа 8.3.6.2152
2. Валерий (Walther_008) 31.10.15 18:53
(1) vikm, странно. А с какой базой ты соединяешь? По каким документам запускаешь? Какова вообще последовательность действий? Обработку я писал на платформе 8.3.6.2041. Запускал я из-под УТ 11.1 (запущенной в обычном приложении), подключался к Бух 3.0.40.40, выбирал некоторые документы (возвраты от покупателей, реализацию, поступления, отчеты о рознице и отчеты комиссионеров) и всё работало стабильно.
3. Макарова Виктория (vikm) 02.11.15 14:28
Клиент-серверный вариант, обычное приложение,обе базы на SQL, запускал по всем документам. Открыл обработку, задал параметры подключения ко 2-й базе, выбрал период (октябрь), выбрал организацию (у нас одна), заполнил список доков по метаданным, выбрал все доки и нажал "Выполнить". док "АвансовыйОтчет" прошел, а на втором "АвансовыйПлатежИностранцаПоНДФЛ" вылетело с выше приведенной ошибкой. Таких доков вроде нет, но если ставишь галочку на одном доке который точно есть, например "АктСверкиВзаиморасчетов", то все равно вылетает с ошибкой.
4. Валерий (Walther_008) 02.11.15 22:48
(3) vikm, В обработке никак не обрабатывается ситуация, если не задано имя документа одной из баз (т.е. если пустое значение в таблице в одной из колонок). В обоих колонках должно быть задано имя документа, как оно прописано в конфигураторе. Заполнение по метаданным подбирает документы только по точному соответствию имен. Документа АктСверкиВзаиморасчетов в УТ11 нет. А есть документ СверкаВзаиморасчетов. Поэтому если хочешь сравнить эти документы, то, если запускаешь обработку в Бухе - то в строчке, где у тебя стоит АктСверкиВЗаиморасчетов в колонке "Документ базы корреспондента" нужно руками вписать СверкаВзаиморасчетов и поставить галку.
По итогу: обработка может сравнить только документы, для которых корректно заданы имена метаданных. Проверки на корректность нет. Если хотя бы в одной из колонок будет пустое значение - будет ошибка. Если неверно задать имена метаданных документов - буде ошибка. Имена метаданных можно посмотреть либо в конфигураторе, либо заполнив таблицу кнопкой "заполнить по метаданным" - пролистать до конца списка - там будут документы из базы корреспондента, которым не нашлось точное соответствие из текущей базы. А в разных конфигурациях одинаковые по смыслу документы могут иметь разные имена. Пример - тот же акт сверки взаиморасчетов или возврат от покупателя.
5. Макарова Виктория (vikm) 09.11.15 12:04
(4) Walther_008, Обе конфигурации одинаковые - это Бухгалтерия
6. Валерий (Walther_008) 09.11.15 16:20
(5) vikm, да, была ошибка в обработке. При сравнении документов, у которых нет реквизита СуммаДокумента. Исправил. Заодно прикрутил управляемую форму.
7. Макарова Виктория (vikm) 10.11.15 16:52
Как бы получить исправленную?
8. Валерий (Walther_008) 11.11.15 15:18
(7) vikm, так а ты пробовал скачать заново? Я, вроде, выложил позавчера поверх старой...
9. Макарова Виктория (vikm) 11.11.15 16:22
10. Макарова Виктория (vikm) 13.11.15 12:03
отправил сообщение с почтой, а также есть в профиле
11. Макарова Виктория (vikm) 16.11.15 09:28
Спасибо, получил.
Но чтобы все было супер, тоже самое что суммой, надо провернуть с НОМЕРОМ документов, которого тоже не у всех есть.
У меня в бухии вот что выдало:

Ошибка при выполнении запроса в этой базе по документу ПоясненияКДекларацииПоНДС
Текст ошибки: {ВнешняяОбработка.СравнениеДокументовМеждуБазами.МодульОбъекта(76)}: Ошибка при вызове метода контекста (Выполнить): {(3, 6)}: Поле не найдено "Док.Номер"
Док.<<?>>Номер,
Ошибка при выполнении запроса в этой базе по документу РегистрацияСуммыУбыткаУСН
Текст ошибки: {ВнешняяОбработка.СравнениеДокументовМеждуБазами.МодульОбъекта(76)}: Ошибка при вызове метода контекста (Выполнить): {(3, 6)}: Поле не найдено "Док.Номер"
Док.<<?>>Номер,
Ошибка при выполнении запроса в этой базе по документу РегистрУчета
Текст ошибки: {ВнешняяОбработка.СравнениеДокументовМеждуБазами.МодульОбъекта(76)}: Ошибка при вызове метода контекста (Выполнить): {(3, 6)}: Поле не найдено "Док.Номер"
Док.<<?>>Номер,
Ошибка при выполнении запроса в этой базе по документу РегламентированныйОтчет
Текст ошибки: {ВнешняяОбработка.СравнениеДокументовМеждуБазами.МодульОбъекта(76)}: Ошибка при вызове метода контекста (Выполнить): {(3, 6)}: Поле не найдено "Док.Номер"
Док.<<?>>Номер,
Ошибка при выполнении запроса в этой базе по документу РеестрСчетовФактурПоставщика
Текст ошибки: {ВнешняяОбработка.СравнениеДокументовМеждуБазами.МодульОбъекта(76)}: Ошибка при вызове метода контекста (Выполнить): {(3, 6)}: Поле не найдено "Док.Номер"
Док.<<?>>Номер,
Ошибка при выполнении запроса в этой базе по документу ТранспортноеСообщение
Текст ошибки: {ВнешняяОбработка.СравнениеДокументовМеждуБазами.МодульОбъекта(76)}: Ошибка при вызове метода контекста (Выполнить): {(3, 6)}: Поле не найдено "Док.Номер"
Док.<<?>>Номер,
12. Валерий (Walther_008) 19.11.15 15:48
(11) vikm, это уже можно отдать на откуп администратора, который выполняет сверку. Дело в том, что без номера нет смысла сверять - документы именно по номеру и дате идентифицируются.
13. Лекар Инструмент (Lekar-istrument) 20.04.16 08:29
Заполнить по метаданным ошибка:
{Форма.Форма.Форма(50)}: Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Класс не зарегистрирован

1С:Предприятие 8.3 (8.3.5.1428)
Комплексная
14. Валерий (Walther_008) 27.05.16 16:10
(13) Lekar-istrument, криво установлена платформа. Можно вручную через regsvr32
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа