По строке, подобрать ссылку на документ 1С

1. TariK 03.12.24 15:43 Сейчас в теме
Привет!
Есть строка в экселе например "Заказ клиента 1111111 от 15.01.2021 23:59:59". Этой строке соответствует ссылка на документ в базе 1С.
Хочу считать колонку экселя с такими строками в таблицу значений(ТЗ), в ТЗ это будет строка.
Вопрос, как потом в ТЗ превратить сроку в ссылку на документ? Получить уже ТЗ с ссылками на документы.

Конечный результат, в табличной части обработки, должны из экселя, появится ссылки на документы.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 03.12.24 15:45 Сейчас в теме
(1) Найти документ по номеру и дате, указанными в строке.
3. nomad_irk 76 03.12.24 16:10 Сейчас в теме
(1) Запихать в эксель уникальный идентификатор ссылки на документ или хотя бы его номер и дату вместо представления ссылки не предлагать?
user2116971; +1 Ответить
4. user2116971 03.12.24 16:25 Сейчас в теме
(3) Вот ты злобный тролль! С тебя 20 SM ))
5. nomad_irk 76 03.12.24 16:29 Сейчас в теме
(4) прям представил себе, как ТС забился в угол от сознания того, что я круче него :)
6. TariK 03.12.24 16:40 Сейчас в теме
(3)
номер и дата не подойдет, уже проверил, потому что номер есть 1111 и 1111Б, а дата у документов одинаковая.
Остается уникальный идентификатор ссылки
8. nomad_irk 76 03.12.24 16:43 Сейчас в теме
(6)
Остается уникальный идентификатор ссылки

Это самый правильный вариант, почему сразу с него не начали - не понятно.
10. TariK 03.12.24 16:49 Сейчас в теме
(8)
Все просто, делал отчет товарищам пользователям, они выбрали из него кучу документов, выгрузили в эксель и сказали, напиши обработку, загрузи в нее этот эксель и сделай "действие" с документами.
В этом отчете есть ссылка в виде строки уже("Заказ клиента 1111111 от 15.01.2021 23:59:59"), дата, договор, подразделение, менеджер.
Новый отчет формировать для выгрузки не хотят, в обработку уже все добавил, чтоб от туда отобрать и делайте что хотите, тоже не хотят. Вот эксель и с ним работай
12. nomad_irk 76 03.12.24 16:56 Сейчас в теме
(10) ну так отчет - не подразумевает под собой обработку своих же данных, если этого не было изначально в ТЗ(тех. задании).

Либо переписываем ТЗ(тех задание) с новыми хотелками, дорабатываем отчет и заново его переформировываем, в котором уже будут ключевые данные для обработки, либо оставляем как есть в силу того, что по данным отчета невозможно однозначно определить документ, для выполнения с ним действий.
24. pentanom 25 04.12.24 12:58 Сейчас в теме
(6)
номер и дата не подойдет, уже проверил, потому что номер есть 1111 и 1111Б, а дата у документов одинаковая.
Но это же разные номера. Разве в данном случае НайтиПоНомеру(<НомерДокумента>, <ДатаИнтервала>) не работает?
7. SlavaKron 03.12.24 16:40 Сейчас в теме
Дата = Дата(Прав(Представление, 18));

Представление = Сред(Представление, 1, СтрДлина(Представление) - 22);
ЧастиПредставления = СтрРазделить(Представление, " ", Ложь);
Номер = ЧастиПредставления[ЧастиПредставления.ВГраница()];
Сформировать ТЗ с колонками Номер и Дата и отправить в запрос в качестве ВТ.
nomad_irk; +1 Ответить
9. SlavaKron 03.12.24 16:45 Сейчас в теме
Если есть возможность повлиять на файл, тогда и выбор excel как формат обмена сомнителен.
11. TariK 03.12.24 16:49 Сейчас в теме
(9) чуть выше описал всю проблему. Есть строчные данные из экселя ссылка в виде строки уже("Заказ клиента 1111111 от 15.01.2021 23:59:59"), дата, договор, подразделение, менеджер и по ним надо обработкой из базы получить ссылки на документы и отработать документы.
13. TariK 03.12.24 16:59 Сейчас в теме
Ща эксель глянул, там есть такие строки, что отличаются только одной буквой в номере документа:

"Заказ клиента 1111111 от 15.01.2021 23:59:59"), дата, договор, подразделение, менеджер
"Заказ клиента 1111111Б от 15.01.2021 23:59:59"), дата, договор, подразделение, менеджер

И как это все отрабатывать?)))))))))))))))))))))))))))))))
14. nomad_irk 76 03.12.24 17:02 Сейчас в теме
(13) в общем случае запрос найдет документы 1111111Б и 1111111, вся сложность в преобразовании строки в дату и определении вида документа.
17. Said-We 03.12.24 18:40 Сейчас в теме
(14) Номера же разные. Как он их одновременно найдет?
(1) Если представление стандартное, то в представлении три части:
"Вид документа" "Номер документа" от "дата документа".

Начало строки и конец стандартные. При этом дата содержит фиксированное количество символов.
Видов документов, наверняка какое-то конечное количество или вообще одно. Из этого всего получается номер документа.
В итоге разбивается Представление на три отдельных поля: Тип, Номер, Дата.
Одним левым соединением с реальными документами находите сразу все документы.

Если для диалога, то можно заполнить где однозначное соответствие. Где по строке вдруг есть двойники, то на выбор только из найденного. Если ничего не нашлось, то на выбор из всего перечня по виду документа.
19. nomad_irk 76 03.12.24 19:34 Сейчас в теме
(17)
Номера же разные. Как он их одновременно найдет?

Вы тоже пробуете себя в роли тролля? :)
20. nomad_irk 76 03.12.24 19:37 Сейчас в теме
(17)
"Вид документа" "Номер документа" от "дата документа".

с видом документа могут быть БОООЛЬШИЕ сюрпризы - 1С любит давать синонимы объектам абсолютно не похожие на их имя.
21. Said-We 03.12.24 20:05 Сейчас в теме
(20) А чего не с начала читаете?
"Если представление стандартное..."
23. nomad_irk 76 04.12.24 12:02 Сейчас в теме
(21) Что значит "стандартное"? оно в любом случае стандартное, просто не совпадает с именем и все :)
25. Said-We 04.12.24 13:17 Сейчас в теме
(23) Стандартное - не измененное. Чтобы имя документа не было в середине или в конце строки представления. Иначе разбирать на составные части сложнее будет.

С каким именем не совпадает? И какая разница с чем оно совпадает и с чем не совпадает.
Выбор когда Имя = "<Строка1>" тогда .... когда Имя = "<Строка2>" тогда .... иначе ... конец
Вместо Имя подстрока от представления.
Что пропишите, то и получите.
26. nomad_irk 76 04.12.24 19:53 Сейчас в теме
(25)я про поиск документа по полученным значениям вида документа, его номера и даты из строки представления.

Вид документа может абсолютно не совпадать с именем объекта конфигурации. Не зная реального имени выполнить поиск не представляется возможным.
29. spacecraft 05.12.24 08:36 Сейчас в теме
(25)
Выбор когда Имя = "" тогда .... когда Имя = "" тогда .... иначе ... конец
Вместо Имя подстрока от представления.

(28)

в запросе ничего нельзя делать с Представление, только получить.
33. Said-We 05.12.24 11:35 Сейчас в теме
(29) У вас на входе строка из Ехселя - забыли?
15. SlavaKron 03.12.24 17:10 Сейчас в теме
(13)
И как это все отрабатывать?
В (7) код чем не устраивает?
16. lmnlmn 69 03.12.24 17:20 Сейчас в теме
(13)
И как это все отрабатывать?

Если платформа 8.2.23 и выше, то СтрНайтиПоРегулярномуВыражению(<Строка>, <РегулярноеВыражение>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>, <ИгнорироватьРегистр>, <МногострочныйПоиск>) весьма удобный инструмент для таких задач.
18. vadim1011985 101 03.12.24 18:42 Сейчас в теме
Как по мне - тут проще сразу использовать СтрРазделить() без всяких доп.преобразований.

ЧастиПредставленияСсылки = СтрРазделить(ПредставлениеСсылки, " ");

НомерДокумента = ЧастиПредставленияСсылки[2];

ПредставлениеДатыДокумента  =  ЧастиПредставленияСсылки[4];

ЧастиДаты = СтрРазделить(ПредставлениеДатыДокумента,".");

ДатаДокумента = Дата(ЧастиДаты[2],ЧастиДаты[1],ЧастиДаты[0]);

Ссылка = Документы.ЗаказКлиента.НайтиПоНомеру(НомерДокумента,ДатаДокумента); 
// или через Запрос - наверно так будет правильнее  
Показать
22. starjevschik 03.12.24 21:51 Сейчас в теме
(13)
И как это все отрабатывать

ну банально же, ищешь " от ", слева него будет номер, справа дата
дольше кнопки топтать, чем делать.
pentanom; +1 Ответить
27. Said-We 04.12.24 23:24 Сейчас в теме
(26) По представлению можно через выбор когда прописать где (в каком виде документа) искать ...
Это как самый простой вариант.
32. nomad_irk 76 05.12.24 10:29 Сейчас в теме
(27) Так это надо знать соответствие
34. Said-We 05.12.24 11:37 Сейчас в теме
(32) А какие проблемы знать. Конфигуратор перед глазами. Входная информация в виде строки представления перед глазами. Что мешает?
35. nomad_irk 76 05.12.24 12:15 Сейчас в теме
(34) Конфигуратора перед глазами может не быть, вернее конфигурация приемника может вообще не совпадать с конфигурацией источника
28. Vlan 36 05.12.24 08:21 Сейчас в теме
В дополнение к уже предложенным вариантам, коие я нисколько не оспариваю. А почему бы не использовать уже имеющееся представление документа в запросе? Выбрать из Экселя колонку с представлениями, запихнуть в массив (или таблицу, или как удобнее), а в запросе сравнивать вхождение представления с этим параметром. На выходе получаем ссылку и ее представление.
30. orakool 05.12.24 09:00 Сейчас в теме
(28)
Поле Представление
Каждая объектная таблица в информационной базе имеет виртуальное поле - "Представление". Это поле содержит текстовое представление объекта. В запросе возможно получать данное поле точно также как и другие поля таблиц, однако никакие операции с данным полем выполнять нельзя. Данная особенность связана с тем, что это поле является виртуальным, и, на самом деле, при получении данного поля из базы данных, запрос получает несколько полей, а при получении значения поля из результата запроса преобразовывает полученные значения в строку. Таким образом, единственное, что можно сделать с полем "Представление", это получить его в результат запроса.

Источник: ИТС
37. Vlan 36 05.12.24 13:22 Сейчас в теме
31. GeraltSnow 175 05.12.24 09:07 Сейчас в теме
есть такие строки, что отличаются только одной буквой в номере документа

И как это все отрабатывать


Воспользоваться фишкой экселя для извлечения значений из строк, а потом запросом найти документ по номеру и дате
Прикрепленные файлы:
2024-12-05 09-03-28.mkv
36. Said-We 05.12.24 12:47 Сейчас в теме
(35) Какая разница, что было в источнике? Есть некое название в виде строки в колонке Ёкселя, в соответствие которому ставим вид объекта в приемнике. Усё.

А если внимательно почитать автора, то приёмник и источник совпадают. Автор выгрузил некие данные в Ёксель как попросили. Функциональный заказчик подредактировал файл Екселя в части других колонок. И дал новое задание - а теперь загрузи.

Самый простой вариант загружать по ГУИД, но автор изначально не знал о задаче загрузки данных обратно. Поэтому теперь думает как решить данный вопрос.

(1) Я бы вообще под другому решал данную задачу. Ещё раз выгружаю, тоже самое, но у же с ГУИД и если несколько видов документов, то и с видом документа. Далее не прошу функционального заказчика повторить работу, а функцией Ёкселя "ВПР()" добавляю колонку с ГУИД в файл, отредактированный функциональным заказчиком, и если надо, то добавляю колонку и с видом документа. Проверяю, что всё однозначно сопоставилось. Далее загружаю по ГУИД. Усё.
38. TariK 06.12.24 08:32 Сейчас в теме
Всем большое спасибо!
Если кому надо, код такой:

&НаСервере
Процедура ПрочитатьExcel_ПостроительЗапроса(ПутьКФайлу)

	Объект.ЗаказыКлиента.Очистить();
	
	ТабДок = Новый ТабличныйДокумент;
	Попытка
		ТабДок.Прочитать(ПутьКФайлу);
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось прочитать файл по причине: " + ОписаниеОшибки();
		Сообщение.Сообщить();                                                        
		Возврат;
	КонецПопытки;
	
	Построитель = Новый ПостроительЗапроса; 
	Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
	Построитель.ЗаполнитьНастройки();
	Построитель.Выполнить();
	
	ТаблицаИзExcel = Построитель.Результат.Выгрузить(); 
	
        ТЗ = Новый ТаблицаЗначений;  
	ТЗ.Колонки.Добавить("ЗаказКлиента", Новый ОписаниеТипов("ДокументСсылка.ЗаказКлиента"));

	Для Каждого СтрокаТаблицаИзExcel Из  ТаблицаИзExcel Цикл 
		
		ЗаказКлиентаСсылка	= 
      Документы.ЗаказКлиента.НайтиПоНомеру(СокрЛП(СтрокаТаблицаИзExcel.Номер), 
      ПреобразоватьСтрокуКДате(СтрокаТаблицаИзExcel.Дата));
   	    НоваяСтрокаТЗ = ТЗ.Добавить();  
		НоваяСтрокаТЗ.ЗаказКлиента = ЗаказКлиентаСсылка;
		
	КонецЦикла;
		
		
		
		
	Объект.ЗаказыКлиента.Загрузить(ТЗ);
	
КонецПроцедуры // ПрочитатьExcel_ПостроительЗапроса() 

Показать
39. user1936660 06.12.24 08:51 Сейчас в теме
(38)
ТаблицаИзExcel = Построитель.Результат.Выгрузить(); 
    
        ТЗ = Новый ТаблицаЗначений;  
Очередной копипастер с отключенной головой.

Выбороси свои ТаблицаИзExcel и ТЗ нахрен. Просто перебирай результаты запроса и записывай ссылки сразу в свой Объект.ЗаказыКлиента.

Это если еще запросов в цикле не касаться...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот