Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

получения вложенного файла из документа

получения вложенного файла из документа
Я
   Kucha88
 
23.11.18 - 06:59
Просвещенные умы, всем доброе утро! Прошу сразу не кидать камень в меня.   Прошу помочь с таким вопросом. Создаю обработку с формой. На форме делаю кнопку Открыть ДИ. Сам файл ДИ находиться в документе Документ, где на форме документа есть Табличное поле в котором как раз и находиться данный файл который загружен в SQL, используя параметры подключения. Пытаюсь как то задействовать процедуру открыть файл на своей форме Обработки. Но не получается никак.
Предыстория: есть справочник Кандидат, заношу туда элемент ФИО(строка), Подразделение(Справочник.Подразделения), Должность(Справочник.Должность). и есть в элементе тоже табличное поле куда загружается файл ДИ, при загрузке, создается Документ в котором хранятся версии данного документа и так далее. Дак вот на форме есть ФИО - ссылкаСправочник.кандидат Делаю запрос на получение документа Документ но я не знаю что в Параметр передать, а нужно передать значение с формы ФИО(это реквизит обработки), но когда просто передаю ФИО ругается что не может преобразовать к типу строка. Пробовал всяко не получается. Что поставить в параметр и как открыть файл в из табличного поля Документ или может открывать пробовать из элемента справочника Кандидат ????
 
 
   catena
 
1 - 23.11.18 - 07:07
Показывай, как передаешь
   Kucha88
 
2 - 23.11.18 - 07:22
Запрос = Новый Запрос("ВЫБРАТЬ 
                          |    Кандидат.Документ КАК СЭДДокумент
                          |ИЗ
                          |    Документ.Кандидат КАК Кандидат
                          |ГДЕ
                          |    Кандидат.Актив = &ФИО");
        
        Запрос.УстановитьПараметр("ФИО" , ФИО) 

Ах да забыл еще указать что при загрузке файла в элементе формы справочника Кандидат, создается еще один документ Кандидат - является связующим, у него есть реквизит Актив - ссылка на справочник.Кандидат и Актив = ДокументСсылка.СЭДДокумент.
   Kucha88
 
3 - 23.11.18 - 07:23
(2)  через данный документ передаю значение элемента из формы чтобы найти нужный документ и уже из Документа Кандидат нахожу ссылку на нужный Документ.СэдДокумент. но не могу правильно передать значение параметра
   catena
 
4 - 23.11.18 - 07:40
Тип значения реквизитов Актив и ФИО?
   catena
 
5 - 23.11.18 - 07:40
И точный текст ошибки при выполнении кода из (2)
   бегинер
 
6 - 23.11.18 - 07:47
реквизит Актив - ссылка на справочник.Кандидат
и
ФИО

явно разные у вас по типу

первый ссылочный
а второй - строка

Кандидат.Актив = &СЦЫЛКО");
Запрос.УстановитьПараметр("СЦЫЛКО" , ДокументСсылка.СЭДДокумент)
   Kucha88
 
7 - 23.11.18 - 07:48
(4) Актив = СправочникСсылка.Кандидат
ФИО на форме обработки = СправочникСсылка.Кандидат
Но в Справочнике Кандидат - фио - это просто строка


(5) {Обработка.ПриемНаРаботу.Форма.Форма(237)}: Ошибка при вызове метода контекста (Сообщить): Несоответствие типов (параметр номер '1')
        сообщить(выборка);
по причине:
Несоответствие типов (параметр номер '1')
   Kucha88
 
8 - 23.11.18 - 07:50
(6) бегинер вот именно что я не знаю ДокументСсылка.СэдДокумент - мне этот документ нужно получить используя значение СпрочникСсылка.Кандидат, значение которого прописано в ДокументСсылка.Кандидат и в этом же документе есть Актив - ДокументСсылка.СэдДокумент
   catena
 
9 - 23.11.18 - 07:52
(7)Я просила ошибку кода из (2). Там нет Сообщить, вы нас обманываете.
   бегинер
 
10 - 23.11.18 - 07:54
вот так попробуй нижнюю часть запроса:
Кандидат.Актив = &СЦЫЛКО");
Запрос.УстановитьПараметр("СЦЫЛКО" , Актив)
 
 Рекламное место пустует
   бегинер
 
11 - 23.11.18 - 07:56
Актив - это ссылка на нужный тебе элемент справочника Кандидат
   Kucha88
 
12 - 23.11.18 - 07:57
(11)  бегинер - а откуда программа знает что именно этот элемент ? я же его выбираю на своей форме, где есть реквизит ФИО.
   бегинер
 
13 - 23.11.18 - 07:58
ты выбираешь на какой форме? на внешней произвольной или на форме элемента справочника Кандидат?
   Kucha88
 
14 - 23.11.18 - 08:00
(9) я пытаюсь вывести выборку из запроса чтобы понять находит он нужный документ или нет, так как через консоль запросов выходит мне нужный документ.

(13) бегинер выбираю на форме обработки
   бегинер
 
15 - 23.11.18 - 08:01
если произвольная (форма обработки):
ищи через (чтобнайти ссылку на нужного чела)
справочники.кандидат.найтипореквизиту("ФИО"....
или запросом по ФИО к спарвочнику Кандидат


если на форме элемента справочника:

Актив=этотобъект.ссылка
   бегинер
 
16 - 23.11.18 - 08:05
а раз ты пишешь что на форме твоей обработке:
Актив = СправочникСсылка.Кандидат
ФИО на форме обработки = СправочникСсылка.Кандидат

то напиши как ты ФИО получаешь для передачи-установки параметра запроса?


Запрос.УстановитьПараметр("ФИО" , ЭлементыФормы.ФИО.Значение) 

и твой запрос должен работать исходный, если так ФИО задашь
   Kucha88
 
17 - 23.11.18 - 08:10
(16) Актив находиться не на форме обработки, Актив - реквизит Документы.Кандидат у которого есть Реквизит Документ - СправочникСсылка.Кандидат. Т.е. справочник.Кандидат и Документы.СЭДДокумент связывает документ Документы.Кандидат - который имеет ссылки как на СЭДдокумент так и на Справочник.Кандидат.
А на моей форме обработки выбирается ФИО - элемента справочника  Кандидат. и тем самым нужно передать данные этого элемента в запрос чтобы получить Документы.СэдДокумент
   бегинер
 
18 - 23.11.18 - 08:11
(17)
Запрос.УстановитьПараметр("ФИО" , ЭлементыФормы.ФИО.Значение)
вот так сделай
   бегинер
 
19 - 23.11.18 - 08:11
и выполни запрос
   Kucha88
 
20 - 23.11.18 - 08:13
(19) Хорошо сделал, а как тогда посмотреть результат запроса что именно этот документ нашел ???
   бегинер
 
21 - 23.11.18 - 08:16
(20) проверить результат запроса: смтори что у тебя в поле "СЭДДокумент" результата
   бегинер
 
22 - 23.11.18 - 08:19
РезультатЗапроса = Запрос.Выполнить();
сообщить(РезультатЗапроса.Выбрать().Количество());
если РезультатЗапроса.Выбрать().Количество()>0 тогда;    
 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    сообщить(ВыборкаДетальныеЗаписи.СЭДДокумент;
 КонецЦикла;
конецесли;
   Kucha88
 
23 - 23.11.18 - 08:26
(22)  да все верно работает запрос. Спасибо разобрался теперь. я так и делал ранее просто я не знал что нужно Сообщить() какой результат выдать. теперь я понял.

А подскажи пожалуйста как теперь получить файл, который находиться в табличном поле на форме (ФормаДокумента) СЭДДокумент, чтобы открыть вложенный файл
   бегинер
 
24 - 23.11.18 - 08:29
(23) напиши структуру это Табличного поля

это табличное поле не привязанное к документу СЭДДокумент?

или это !Табличная часть! документа СЭДДокумент?

напиши все какие там поля у ТЧ/ТП и их типы
   Kucha88
 
25 - 23.11.18 - 08:34
(24) Все это относиться к СЭДДокумент, по этому мы через запрос и искали его.
СЭДДокумент, у него есть: ФормаДокумента, на данной форме есть ТабличноеПоле(ТабличнаяЧастьВерсииДокумента с типом ТЗ), вот в данном ТабличномПоле и находиться файл, мне его нужно получить теперь открыть
   бегинер
 
26 - 23.11.18 - 08:46
РезультатЗапроса = Запрос.Выполнить();
сообщить(РезультатЗапроса.Выбрать().Количество());
если РезультатЗапроса.Выбрать().Количество()>0 тогда;    
 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    док=ВыборкаДетальныеЗаписи.СЭДДокумент.ПолучитьОбъект();
    Для Каждого Колонка Из     док.ТабличнаяЧастьВерсииДокумента.Колонки Цикл
        Сообщить(Колонка.Имя);
    КонецЦикла;                
 КонецЦикла;
конецесли;

попробуй
   Kucha88
 
27 - 23.11.18 - 09:18
(26)  ошибка выходит:
{Обработка.ПриемНаРаботу.Форма.Форма(207)}: Поле объекта не обнаружено (ТабличнаяЧастьВерсииДокумента)
                Для каждого Колонка из Док.ТабличнаяЧастьВерсииДокумента.колонки цикл
   бегинер
 
28 - 23.11.18 - 09:23
ну посмотри в конфигураторе у документа СЭДДокумент есть табличная часть и какое у нее имя?

а то может это ТабличнаяЧастьВерсииДокумента не привязана к документу, тогда нужно смотреть код формы документа  на предмет как, откуда и какие данные попадают в табличное поле "ТабличнаяЧастьВерсииДокумента"
   бегинер
 
29 - 23.11.18 - 09:24
чтоб узнать где эти данные хранятся
   Kucha88
 
30 - 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.Ссылка);
        КонецЦикла;
    КонецЦикла;                
 КонецЦикла;
конецесли;
   Kucha88
 
33 - 23.11.18 - 11:09
(32) данные в окне сообщения выходят, а как сделать чтобы этот файл запускался ЗапуститьПриложение()
 
 
   Kucha88
 
34 - 23.11.18 - 11:41
(32)  бегинер, я уже разобрался как открыть файл через ЗапуститьПриложение. Огромнейшее спасибо тебе за просветление.... Примного тебе благодарен. и очень приятно было с тобой общаться по данному вопросу....


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует