При переносе информации из внешних таблиц (Excel, CSV, MXL) с помощью универсальной обработки «Загрузка данных из табличного документа» часто возникает задача заполнить колонку, содержащую ссылку на существующий в базе документ (например, документ расчетов, счет на оплату или документ партии). В отличие от справочников, поиск документов стандартными средствами обработки вызывает трудности.
Разберем причины такого поведения платформы и детально рассмотрим способы корректной настройки сопоставления документов.
Проанализируем механику работы типовой обработки: при сопоставлении строковых значений из таблицы со справочниками система по умолчанию обращается к стандартным реквизитам Наименование или Код. У объектов метаданных типа Документ реквизита Наименование нет в принципе. Документы идентифицируются комбинацией реквизитов Номер и Дата.
Если колонка табличной части имеет составной тип данных (например, несколько видов документов или определяемый тип вроде ДокументОснование), обработка не может автоматически определить, в какой именно таблице базы данных следует искать объект, если тип не зафиксирован явно.
Если реквизит имеет составной тип данных, но в загружаемом файле фигурируют документы строго одного вида, выполним предварительную настройку типов:
ДокументСсылка.ПоступлениеТоваровУслуг).Однако даже после сужения типа стандартное сопоставление по строке не сможет однозначно найти документ, если номер и дата склеены в одну строку. Для полноценной идентификации перейдем ко второму способу.
Наиболее надежный и универсальный метод поиска документа в информационной базе — использование встроенного программного кода в настройках колонки. Обработка позволяет выполнять произвольное выражение для каждой строки загружаемой таблицы.
Разберем по шагам порядок настройки режима вычислений:
ТекстЯчейки — строковое значение текущей колонки;
ТекстыЯчеек — массив всех значений текущей строки таблицы (индексация колонок начинается с единицы: ТекстыЯчеек[1], ТекстыЯчеек[2] и т. д.);
Результат — выходная переменная, в которую необходимо поместить найденную ссылку на объект.
Рассмотрим типовые примеры поиска документов для поля «Выражение».
Вариант А: Номер и дата находятся в разных колонках файла
Предположим, что номер документа находится во второй колонке файла (ТекстыЯчеек[2]), а дата документа — в третьей колонке (ТекстыЯчеек[3]). Для поиска конкретного документа воспользуемся стандартным методом менеджера документов НайтиПоНомеру():
НомерДок = СокрЛП(ТекстыЯчеек[2]);
ДатаДок = Дата(ТекстыЯчеек[3]);
Результат = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(НомерДок, ДатаДок);
Вариант Б: Поиск документа через запрос (по номеру без точной даты)
Если в исходных данных точная дата отсутствует или известны только номер и организация, используем объект Запрос для выборки наиболее подходящей ссылки:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Док.Ссылка КАК Ссылка
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК Док
|ГДЕ
| Док.Номер ПОДОБНО &Номер";
Запрос.УстановитьПараметр("Номер", "%" + СокрЛП(ТекстЯчейки));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Результат = Выборка.Ссылка;
Иначе
Результат = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка();
КонецЕсли;
Вариант В: Поиск по уникальному идентификатору (GUID)
Если файл сформирован путем выгрузки из другой базы 1С и в ячейке содержится строковый GUID документа, выполним прямое получение ссылки через метод ПолучитьСсылку():
Попытка
ГУИД = Новый УникальныйИдентификатор(СокрЛП(ТекстЯчейки));
Результат = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку(ГУИД);
Исключение
Результат = Неопределено;
КонецПопытки;
При работе в конфигурации «Бухгалтерия предприятия 3.0» важно учитывать технические ограничения:
ЗагрузкаДанныхИзТабличногоДокумента.epf с диска ИТС выполнен на обычных формах. В управляемом приложении «1С:Бухгалтерии» запустить ее напрямую в режиме тонкого клиента не получится — потребуется либо запуск базы в режиме толстого клиента, либо использование версии обработки, адаптированной под управляемые формы.