При переходе на новую информационную базу 1С (например, при свертке базы или переезде с одной конфигурации на другую) часто возникает проблема: документы успешно перенесены, но связь с сервисом ЭДО «Диадок» разорвана. В интерфейсе модуля Диадока такие документы отображаются как «не сопоставленные», хотя физически они присутствуют и в 1С, и в облаке сервиса. Рассмотрим подробно, как восстановить эти связи и автоматизировать процесс синхронизации.
Для начала разберем технический аспект проблемы. Модуль Диадока для 1С хранит информацию о соответствии объектов 1С и электронных документов в специальных служебных таблицах. В зависимости от версии модуля, это могут быть регистры сведений (например, Диадок_СопоставленныеОбъекты) или локальная база данных SQLite. Ключевыми идентификаторами здесь выступают:
Когда вы переносите документы в новую базу (через XML, выгрузку-загрузку данных или обработку «Перенос данных»), GUID документов в новой базе меняется. Даже если номер, дата и сумма документа совпадают, старая запись в таблице связей становится невалидной, так как она ссылается на GUID из старой базы. Выясним, какими способами можно восстановить эти цепочки.
Проанализируем возможности стандартного модуля Диадок. В современных версиях (5.x и выше) предусмотрен функционал «Автоматическое сопоставление». Рассмотрим алгоритм его работы:
Программа пытается найти соответствие, опираясь на метаданные документа. Для этого используются следующие критерии:
Чтобы запустить этот процесс, выполним следующие шаги: заходим в настройки модуля Диадок, переходим в раздел «Групповые операции» и выбираем команду «Найти документы в 1С». Система просканирует базу и предложит варианты сопоставления на основе совпадения реквизитов.
Если документов тысячи и стандартный поиск не справляется (например, из-за различий в нумерации), следует прибегнуть к использованию API. Разберем по шагам, как реализовать скрипт для массовой синхронизации.
Основная идея заключается в получении списка документов из Диадока с их метаданными и программном поиске соответствующих ссылок в 1С. Посмотрим на пример логики работы с методом GetDocuments:
// Пример логики получения списка документов через API
ПараметрыФильтра = Новый Структура;
ПараметрыФильтра.Вставить("FilterCategory", "Any.Inbound"); // Для входящих
ПараметрыФильтра.Вставить("FromDate", НачалоПериода);
ПараметрыФильтра.Вставить("ToDate", КонецПериода);
СписокДокументов = ДиадокОбъект.GetDocuments(ПараметрыФильтра);
Для Каждого ЭлектронныйДокумент Из СписокДокументов Цикл
// Извлекаем метаданные: номер, дата, ИНН, сумма
НомерЭДО = ЭлектронныйДокумент.DocumentNumber;
ДатаЭДО = ЭлектронныйДокумент.DocumentDate;
СуммаЭДО = ЭлектронныйДокумент.Total;
// Выполняем поиск в 1С
Ссылка1С = НайтиДокументВ1С(НомерЭДО, ДатаЭДО, СуммаЭДО);
Если ЗначениеЗаполнено(Ссылка1С) Тогда
// Записываем связь в регистр модуля Диадок
УстановитьСвязьДиадок(Ссылка1С, ЭлектронныйДокумент.EntityId, ЭлектронныйДокумент.MessageId);
КонецЕсли;
КонецЦикла;
В методе НайтиДокументВ1С важно учитывать, что входящие документы от поставщиков в 1С часто имеют два номера: внутренний номер 1С и «Номер входящего документа». Синхронизацию следует проводить именно по входящему номеру.
Выясним причину, по которой «связка по номеру не всегда работает как часы». В 1С принята система префиксации (например, УТ00-00001). При отправке в Диадок префиксы могут обрезаться или трансформироваться. При переносе в новую базу префиксы могут измениться (например, стать БП00-00001).
Для успешного сопоставления рекомендуется использовать функцию «очистки» номера. Рассмотрим пример функции, которая приводит номер к сопоставимому виду:
Функция ОчиститьНомерДляСопоставления(ИсходныйНомер)
// Убираем лидирующие нули и префиксы
Результат = ИсходныйНомер;
Пока Лев(Результат, 1) = "0" Цикл
Результат = Сред(Результат, 2);
КонецЦикла;
// Дополнительная логика удаления префикса организации/базы
ПозицияТире = Найти(Результат, "-");
Если ПозицияТире > 0 Тогда
Результат = Сред(Результат, ПозицияТире + 1);
КонецЕсли;
Возврат Результат;
КонецФункции
С исходящими документами ситуация проще. При отправке документа из 1С в метаданные электронного документа Диадок обычно записывает ИдентификаторЦепочкиДокументов или дополнительные поля с номером и датой 1С. Проанализируем ситуацию: если в веб-интерфейсе Диадока в карточке документа заполнены поля «Номер в 1С» и «Дата в 1С», то сопоставление в новой базе пройдет практически со 100% успехом через стандартную обработку поиска.
Если же эти поля пусты, единственный выход — программный перебор через API с поиском по сумме и контрагенту в справочнике Контрагенты по ИНН.
Если вы решили написать свою обработку для восстановления связей, вам необходимо знать, куда записывать результат. В типовом модуле Диадок для 1С (встроенном как расширение или часть конфигурации) за это отвечает регистр сведений. Название может варьироваться, но структура всегда похожа:
EntityID из Диадока.MessageID из Диадока.После записи корректных данных в этот регистр, документ мгновенно приобретет статус «Подписан» или «Отправлен» в интерфейсе модуля Диадок, и пользователи смогут открывать печатную форму электронного документа прямо из карточки 1С.
Мы рассмотрели основные способы синхронизации. Подведем итог: если штатное «Автоматическое сопоставление» в модуле не помогает, используйте возможности API. Метод GetDocuments в сочетании с грамотным поиском по реквизитам (с учетом очистки префиксов) позволяет восстановить связи даже после масштабного переноса данных. Помните, что ключевым моментом является соответствие ИНН, Суммы и Номера, очищенного от специфических префиксов 1С.