|
получения вложенного файла из документа | ☑ | ||
---|---|---|---|---|
0
Kucha88
23.11.18
✎
06:59
|
Просвещенные умы, всем доброе утро! Прошу сразу не кидать камень в меня. Прошу помочь с таким вопросом. Создаю обработку с формой. На форме делаю кнопку Открыть ДИ. Сам файл ДИ находиться в документе Документ, где на форме документа есть Табличное поле в котором как раз и находиться данный файл который загружен в SQL, используя параметры подключения. Пытаюсь как то задействовать процедуру открыть файл на своей форме Обработки. Но не получается никак.
Предыстория: есть справочник Кандидат, заношу туда элемент ФИО(строка), Подразделение(Справочник.Подразделения), Должность(Справочник.Должность). и есть в элементе тоже табличное поле куда загружается файл ДИ, при загрузке, создается Документ в котором хранятся версии данного документа и так далее. Дак вот на форме есть ФИО - ссылкаСправочник.кандидат Делаю запрос на получение документа Документ но я не знаю что в Параметр передать, а нужно передать значение с формы ФИО(это реквизит обработки), но когда просто передаю ФИО ругается что не может преобразовать к типу строка. Пробовал всяко не получается. Что поставить в параметр и как открыть файл в из табличного поля Документ или может открывать пробовать из элемента справочника Кандидат ???? |
|||
1
catena
23.11.18
✎
07:07
|
Показывай, как передаешь
|
|||
2
Kucha88
23.11.18
✎
07:22
|
Запрос = Новый Запрос("ВЫБРАТЬ
| Кандидат.Документ КАК СЭДДокумент |ИЗ | Документ.Кандидат КАК Кандидат |ГДЕ | Кандидат.Актив = &ФИО"); Запрос.УстановитьПараметр("ФИО" , ФИО) Ах да забыл еще указать что при загрузке файла в элементе формы справочника Кандидат, создается еще один документ Кандидат - является связующим, у него есть реквизит Актив - ссылка на справочник.Кандидат и Актив = ДокументСсылка.СЭДДокумент. |
|||
3
Kucha88
23.11.18
✎
07:23
|
(2) через данный документ передаю значение элемента из формы чтобы найти нужный документ и уже из Документа Кандидат нахожу ссылку на нужный Документ.СэдДокумент. но не могу правильно передать значение параметра
|
|||
4
catena
23.11.18
✎
07:40
|
Тип значения реквизитов Актив и ФИО?
|
|||
5
catena
23.11.18
✎
07:40
|
И точный текст ошибки при выполнении кода из (2)
|
|||
6
бегинер
23.11.18
✎
07:47
|
реквизит Актив - ссылка на справочник.Кандидат
и ФИО явно разные у вас по типу первый ссылочный а второй - строка Кандидат.Актив = &СЦЫЛКО"); Запрос.УстановитьПараметр("СЦЫЛКО" , ДокументСсылка.СЭДДокумент) |
|||
7
Kucha88
23.11.18
✎
07:48
|
(4) Актив = СправочникСсылка.Кандидат
ФИО на форме обработки = СправочникСсылка.Кандидат Но в Справочнике Кандидат - фио - это просто строка (5) {Обработка.ПриемНаРаботу.Форма.Форма(237)}: Ошибка при вызове метода контекста (Сообщить): Несоответствие типов (параметр номер '1') сообщить(выборка); по причине: Несоответствие типов (параметр номер '1') |
|||
8
Kucha88
23.11.18
✎
07:50
|
(6) бегинер вот именно что я не знаю ДокументСсылка.СэдДокумент - мне этот документ нужно получить используя значение СпрочникСсылка.Кандидат, значение которого прописано в ДокументСсылка.Кандидат и в этом же документе есть Актив - ДокументСсылка.СэдДокумент
|
|||
9
catena
23.11.18
✎
07:52
|
(7)Я просила ошибку кода из (2). Там нет Сообщить, вы нас обманываете.
|
|||
10
бегинер
23.11.18
✎
07:54
|
вот так попробуй нижнюю часть запроса:
Кандидат.Актив = &СЦЫЛКО"); Запрос.УстановитьПараметр("СЦЫЛКО" , Актив) |
|||
11
бегинер
23.11.18
✎
07:56
|
Актив - это ссылка на нужный тебе элемент справочника Кандидат
|
|||
12
Kucha88
23.11.18
✎
07:57
|
(11) бегинер - а откуда программа знает что именно этот элемент ? я же его выбираю на своей форме, где есть реквизит ФИО.
|
|||
13
бегинер
23.11.18
✎
07:58
|
ты выбираешь на какой форме? на внешней произвольной или на форме элемента справочника Кандидат?
|
|||
14
Kucha88
23.11.18
✎
08:00
|
(9) я пытаюсь вывести выборку из запроса чтобы понять находит он нужный документ или нет, так как через консоль запросов выходит мне нужный документ.
(13) бегинер выбираю на форме обработки |
|||
15
бегинер
23.11.18
✎
08:01
|
если произвольная (форма обработки):
ищи через (чтобнайти ссылку на нужного чела) справочники.кандидат.найтипореквизиту("ФИО".... или запросом по ФИО к спарвочнику Кандидат если на форме элемента справочника: Актив=этотобъект.ссылка |
|||
16
бегинер
23.11.18
✎
08:05
|
а раз ты пишешь что на форме твоей обработке:
Актив = СправочникСсылка.Кандидат ФИО на форме обработки = СправочникСсылка.Кандидат то напиши как ты ФИО получаешь для передачи-установки параметра запроса? Запрос.УстановитьПараметр("ФИО" , ЭлементыФормы.ФИО.Значение) и твой запрос должен работать исходный, если так ФИО задашь |
|||
17
Kucha88
23.11.18
✎
08:10
|
(16) Актив находиться не на форме обработки, Актив - реквизит Документы.Кандидат у которого есть Реквизит Документ - СправочникСсылка.Кандидат. Т.е. справочник.Кандидат и Документы.СЭДДокумент связывает документ Документы.Кандидат - который имеет ссылки как на СЭДдокумент так и на Справочник.Кандидат.
А на моей форме обработки выбирается ФИО - элемента справочника Кандидат. и тем самым нужно передать данные этого элемента в запрос чтобы получить Документы.СэдДокумент |
|||
18
бегинер
23.11.18
✎
08:11
|
(17)
Запрос.УстановитьПараметр("ФИО" , ЭлементыФормы.ФИО.Значение) вот так сделай |
|||
19
бегинер
23.11.18
✎
08:11
|
и выполни запрос
|
|||
20
Kucha88
23.11.18
✎
08:13
|
(19) Хорошо сделал, а как тогда посмотреть результат запроса что именно этот документ нашел ???
|
|||
21
бегинер
23.11.18
✎
08:16
|
(20) проверить результат запроса: смтори что у тебя в поле "СЭДДокумент" результата
|
|||
22
бегинер
23.11.18
✎
08:19
|
РезультатЗапроса = Запрос.Выполнить();
сообщить(РезультатЗапроса.Выбрать().Количество()); если РезультатЗапроса.Выбрать().Количество()>0 тогда; ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл сообщить(ВыборкаДетальныеЗаписи.СЭДДокумент; КонецЦикла; конецесли; |
|||
23
Kucha88
23.11.18
✎
08:26
|
(22) да все верно работает запрос. Спасибо разобрался теперь. я так и делал ранее просто я не знал что нужно Сообщить() какой результат выдать. теперь я понял.
А подскажи пожалуйста как теперь получить файл, который находиться в табличном поле на форме (ФормаДокумента) СЭДДокумент, чтобы открыть вложенный файл |
|||
24
бегинер
23.11.18
✎
08:29
|
(23) напиши структуру это Табличного поля
это табличное поле не привязанное к документу СЭДДокумент? или это !Табличная часть! документа СЭДДокумент? напиши все какие там поля у ТЧ/ТП и их типы |
|||
25
Kucha88
23.11.18
✎
08:34
|
(24) Все это относиться к СЭДДокумент, по этому мы через запрос и искали его.
СЭДДокумент, у него есть: ФормаДокумента, на данной форме есть ТабличноеПоле(ТабличнаяЧастьВерсииДокумента с типом ТЗ), вот в данном ТабличномПоле и находиться файл, мне его нужно получить теперь открыть |
|||
26
бегинер
23.11.18
✎
08:46
|
РезультатЗапроса = Запрос.Выполнить();
сообщить(РезультатЗапроса.Выбрать().Количество()); если РезультатЗапроса.Выбрать().Количество()>0 тогда; ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл док=ВыборкаДетальныеЗаписи.СЭДДокумент.ПолучитьОбъект(); Для Каждого Колонка Из док.ТабличнаяЧастьВерсииДокумента.Колонки Цикл Сообщить(Колонка.Имя); КонецЦикла; КонецЦикла; конецесли; попробуй |
|||
27
Kucha88
23.11.18
✎
09:18
|
(26) ошибка выходит:
{Обработка.ПриемНаРаботу.Форма.Форма(207)}: Поле объекта не обнаружено (ТабличнаяЧастьВерсииДокумента) Для каждого Колонка из Док.ТабличнаяЧастьВерсииДокумента.колонки цикл |
|||
28
бегинер
23.11.18
✎
09:23
|
ну посмотри в конфигураторе у документа СЭДДокумент есть табличная часть и какое у нее имя?
а то может это ТабличнаяЧастьВерсииДокумента не привязана к документу, тогда нужно смотреть код формы документа на предмет как, откуда и какие данные попадают в табличное поле "ТабличнаяЧастьВерсииДокумента" |
|||
29
бегинер
23.11.18
✎
09:24
|
чтоб узнать где эти данные хранятся
|
|||
30
Kucha88
23.11.18
✎
09:36
|
(28) бегинер, табличной части нет. Просто на форму документа переменная ТабличноеПоле и имя ее ТабличнаяЧастьВерсииДокумента с типомЗначения ТаблицаЗначений.
инициализация табличной части происходит так: Запрос = Новый Запрос("ВЫБРАТЬ | СЭДФайл.Ссылка, | СЭДФайл.Наименование, | СЭДФайл.ДатаИзменения, | СЭДФайл.РазмерФайла, | СЭДФайл.РасширениеФайла, | СЭДФайл.Автор, | СЭДФайл.ЭЦП, | СЭДФайл.Подписан, | СЭДФайл.ИдентификаторФайла, | СЭДФайл.ПараметрыПодключенияБазыДанных, | СЭДФайл.Заблокирован, | СЭДФайл.ТипСостоянияФайла |ИЗ | Документ.СЭДФайл КАК СЭДФайл |ГДЕ | СЭДФайл.Документ = &Документ | |УПОРЯДОЧИТЬ ПО | СЭДФайл.Дата, | СЭДФайл.Номер"); Запрос.УстановитьПараметр("Документ", ДокументСсылка); Выборка = Запрос.Выполнить().Выбрать(); НомерСтроки = 0; Пока Выборка.Следующий() Цикл НомерСтроки = НомерСтроки + 1; НоваяСтрока = ТабличнаяЧастьВерсииДокумента.Добавить(); НоваяСтрока.НомерСтроки = НомерСтроки; НоваяСтрока.Наименование = Выборка.Наименование; НоваяСтрока.ДатаИзменения = Выборка.ДатаИзменения; НоваяСтрока.РазмерФайла = Выборка.РазмерФайла; НоваяСтрока.Автор = Выборка.Автор; НоваяСтрока.ЭЦП = Выборка.ЭЦП; НоваяСтрока.ТипСостоянияФайла = Выборка.ТипСостоянияФайла; НоваяСтрока.РасширениеФайла = Выборка.РасширениеФайла; НоваяСтрока.ИдентификаторФайла = Выборка.ИдентификаторФайла; НоваяСтрока.ПараметрыПодключенияБазыДанных = Выборка.ПараметрыПодключенияБазыДанных; НоваяСтрока.Подписан = Выборка.Подписан; НоваяСтрока.Заблокирован = Выборка.Заблокирован; НоваяСтрока.ДокументФайлСсылка = Выборка.Ссылка; КонецЦикла; НайденнаяСтрока = ТабличнаяЧастьВерсииДокумента.Найти(НомерТекущейСтроки, "НомерСтроки"); Если Неопределено <> НайденнаяСтрока Тогда ЭлементыФормы.ТабличнаяЧастьВерсииДокумента.ТекущаяСтрока = НайденнаяСтрока; КонецЕсли; |
|||
31
бегинер
23.11.18
✎
09:48
|
ну все версии файлов хранятся в документе "СЭДФайл"
Запрос2.УстановитьПараметр("Документ", ДокументСсылка); поменяй на Запрос2.УстановитьПараметр("Документ", ВыборкаДетальныеЗаписи.СЭДДокумент); т.е. в первом запросе мы находим сам документ, а в твоем коде заполения ТП - как раз и есть код - получения всех версий файлов документа - это будет второй запрос в первый мой код внутрь цикла вставляй второй запрос - который ищет все версии файлов нужного документа |
|||
32
бегинер
23.11.18
✎
10:06
|
РезультатЗапроса = Запрос.Выполнить();
сообщить(РезультатЗапроса.Выбрать().Количество()); если РезультатЗапроса.Выбрать().Количество()>0 тогда; ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл сообщить(ВыборкаДетальныеЗаписи.СЭДДокумент); Запрос2 = Новый Запрос("ВЫБРАТЬ | СЭДФайл.Ссылка, | СЭДФайл.Наименование, | СЭДФайл.ДатаИзменения, | СЭДФайл.РазмерФайла, | СЭДФайл.РасширениеФайла, | СЭДФайл.Автор, | СЭДФайл.ЭЦП, | СЭДФайл.Подписан, | СЭДФайл.ИдентификаторФайла, | СЭДФайл.ПараметрыПодключенияБазыДанных, | СЭДФайл.Заблокирован, | СЭДФайл.ТипСостоянияФайла |ИЗ | Документ.СЭДФайл КАК СЭДФайл |ГДЕ | СЭДФайл.Документ = &Документ | |УПОРЯДОЧИТЬ ПО | СЭДФайл.Дата, | СЭДФайл.Номер"); Запрос2.УстановитьПараметр("Документ", ВыборкаДетальныеЗаписи.СЭДДокумент); Выборка2 = Запрос2.Выполнить().Выбрать(); Пока Выборка2.Следующий() Цикл сообщить(Выборка2.Наименование); сообщить(Выборка2.ДатаИзменения); сообщить(Выборка2.РазмерФайла); сообщить(Выборка2.Автор); сообщить(Выборка2.ЭЦП); сообщить(Выборка2.ТипСостоянияФайла); сообщить(Выборка2.РасширениеФайла); сообщить(Выборка2.ИдентификаторФайла); сообщить(Выборка2.ПараметрыПодключенияБазыДанных); сообщить(Выборка2.Подписан); сообщить(Выборка2.Заблокирован); сообщить(Выборка2.Ссылка); КонецЦикла; КонецЦикла; КонецЦикла; конецесли; |
|||
33
Kucha88
23.11.18
✎
11:09
|
(32) данные в окне сообщения выходят, а как сделать чтобы этот файл запускался ЗапуститьПриложение()
|
|||
34
Kucha88
23.11.18
✎
11:41
|
(32) бегинер, я уже разобрался как открыть файл через ЗапуститьПриложение. Огромнейшее спасибо тебе за просветление.... Примного тебе благодарен. и очень приятно было с тобой общаться по данному вопросу....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |