Привет!
Есть строка в экселе например "Заказ клиента 1111111 от 15.01.2021 23:59:59". Этой строке соответствует ссылка на документ в базе 1С.
Хочу считать колонку экселя с такими строками в таблицу значений(ТЗ), в ТЗ это будет строка.
Вопрос, как потом в ТЗ превратить сроку в ссылку на документ? Получить уже ТЗ с ссылками на документы.
Конечный результат, в табличной части обработки, должны из экселя, появится ссылки на документы.
(3)
номер и дата не подойдет, уже проверил, потому что номер есть 1111 и 1111Б, а дата у документов одинаковая.
Остается уникальный идентификатор ссылки
(8)
Все просто, делал отчет товарищам пользователям, они выбрали из него кучу документов, выгрузили в эксель и сказали, напиши обработку, загрузи в нее этот эксель и сделай "действие" с документами.
В этом отчете есть ссылка в виде строки уже("Заказ клиента 1111111 от 15.01.2021 23:59:59"), дата, договор, подразделение, менеджер.
Новый отчет формировать для выгрузки не хотят, в обработку уже все добавил, чтоб от туда отобрать и делайте что хотите, тоже не хотят. Вот эксель и с ним работай
(10) ну так отчет - не подразумевает под собой обработку своих же данных, если этого не было изначально в ТЗ(тех. задании).
Либо переписываем ТЗ(тех задание) с новыми хотелками, дорабатываем отчет и заново его переформировываем, в котором уже будут ключевые данные для обработки, либо оставляем как есть в силу того, что по данным отчета невозможно однозначно определить документ, для выполнения с ним действий.
(9) чуть выше описал всю проблему. Есть строчные данные из экселя ссылка в виде строки уже("Заказ клиента 1111111 от 15.01.2021 23:59:59"), дата, договор, подразделение, менеджер и по ним надо обработкой из базы получить ссылки на документы и отработать документы.
(14) Номера же разные. Как он их одновременно найдет?
(1) Если представление стандартное, то в представлении три части:
"Вид документа" "Номер документа" от "дата документа".
Начало строки и конец стандартные. При этом дата содержит фиксированное количество символов.
Видов документов, наверняка какое-то конечное количество или вообще одно. Из этого всего получается номер документа.
В итоге разбивается Представление на три отдельных поля: Тип, Номер, Дата.
Одним левым соединением с реальными документами находите сразу все документы.
Если для диалога, то можно заполнить где однозначное соответствие. Где по строке вдруг есть двойники, то на выбор только из найденного. Если ничего не нашлось, то на выбор из всего перечня по виду документа.
(23) Стандартное - не измененное. Чтобы имя документа не было в середине или в конце строки представления. Иначе разбирать на составные части сложнее будет.
С каким именем не совпадает? И какая разница с чем оно совпадает и с чем не совпадает.
Выбор когда Имя = "<Строка1>" тогда .... когда Имя = "<Строка2>" тогда .... иначе ... конец
Вместо Имя подстрока от представления.
Что пропишите, то и получите.
Если платформа 8.2.23 и выше, то СтрНайтиПоРегулярномуВыражению(<Строка>, <РегулярноеВыражение>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>, <ИгнорироватьРегистр>, <МногострочныйПоиск>) весьма удобный инструмент для таких задач.
В дополнение к уже предложенным вариантам, коие я нисколько не оспариваю. А почему бы не использовать уже имеющееся представление документа в запросе? Выбрать из Экселя колонку с представлениями, запихнуть в массив (или таблицу, или как удобнее), а в запросе сравнивать вхождение представления с этим параметром. На выходе получаем ссылку и ее представление.
Поле Представление
Каждая объектная таблица в информационной базе имеет виртуальное поле - "Представление". Это поле содержит текстовое представление объекта. В запросе возможно получать данное поле точно также как и другие поля таблиц, однако никакие операции с данным полем выполнять нельзя. Данная особенность связана с тем, что это поле является виртуальным, и, на самом деле, при получении данного поля из базы данных, запрос получает несколько полей, а при получении значения поля из результата запроса преобразовывает полученные значения в строку. Таким образом, единственное, что можно сделать с полем "Представление", это получить его в результат запроса.
(35) Какая разница, что было в источнике? Есть некое название в виде строки в колонке Ёкселя, в соответствие которому ставим вид объекта в приемнике. Усё.
А если внимательно почитать автора, то приёмник и источник совпадают. Автор выгрузил некие данные в Ёксель как попросили. Функциональный заказчик подредактировал файл Екселя в части других колонок. И дал новое задание - а теперь загрузи.
Самый простой вариант загружать по ГУИД, но автор изначально не знал о задаче загрузки данных обратно. Поэтому теперь думает как решить данный вопрос.
(1) Я бы вообще под другому решал данную задачу. Ещё раз выгружаю, тоже самое, но у же с ГУИД и если несколько видов документов, то и с видом документа. Далее не прошу функционального заказчика повторить работу, а функцией Ёкселя "ВПР()" добавляю колонку с ГУИД в файл, отредактированный функциональным заказчиком, и если надо, то добавляю колонку и с видом документа. Проверяю, что всё однозначно сопоставилось. Далее загружаю по ГУИД. Усё.
&НаСервере
Процедура ПрочитатьExcel_ПостроительЗапроса(ПутьКФайлу)
Объект.ЗаказыКлиента.Очистить();
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ПутьКФайлу);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать файл по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;
КонецПопытки;
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
Построитель.ЗаполнитьНастройки();
Построитель.Выполнить();
ТаблицаИзExcel = Построитель.Результат.Выгрузить();
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ЗаказКлиента", Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента"));
Для Каждого СтрокаТаблицаИзExcel Из ТаблицаИзExcel Цикл
ЗаказКлиентаСсылка =
Документы.ЗаказКлиента.НайтиПоНомеру(СокрЛП(СтрокаТаблицаИзExcel.Номер),
ПреобразоватьСтрокуКДате(СтрокаТаблицаИзExcel.Дата));
НоваяСтрокаТЗ = ТЗ.Добавить();
НоваяСтрокаТЗ.ЗаказКлиента = ЗаказКлиентаСсылка;
КонецЦикла;
Объект.ЗаказыКлиента.Загрузить(ТЗ);
КонецПроцедуры // ПрочитатьExcel_ПостроительЗапроса()