Тема повторная, https://forum.infostart.ru/forum64/topic235096/ Записал возникший вопрос в ней, никто что то не отвечает.
Вопрос такой, как создать прикрепленный к исходящему документу вордовский файл и заполнить его? Из первого поста получается, что надо просто скопировать шаблон в документ, а потом заполнить его процедурой из поста, что то у меня не получается.
(1)Ну дык нужно создать шаблон исходящего документа (интерактивно), в нем создать соответствующий шаблон файла с нужными вам правилами автозаполнения, а потом уже это всё можно получать и заполнять программно. Т.е. вы программно создаете исходящий документ по соответствующему шаблону, а там уже есть файл шаблона, с настроенными правилами заполнения их остается только программно "дёрнуть". Ну как-то вот так:
(1)Ну дык нужно создать шаблон исходящего документа (интерактивно), в нем создать соответствующий шаблон файла с нужными вам правилами автозаполнения, а потом уже это всё можно получать и заполнять программно. Т.е. вы программно создаете исходящий документ по соответствующему шаблону, а там уже есть файл шаблона, с настроенными правилами заполнения их остается только программно "дёрнуть". Ну как-то вот так:
(2)YНе не то, я наверно не так написал. Не исходящий документ по шаблону. Нужно прикрепленный файл создать, у меня в шаблоне документа два настроенных шаблона вордовских файлов, вот из этих фалов нужно автоматом создать прикрепленные, заполненные файлы
(4)И документ создается, и файлы интерактивно создаются и заролняются, если подробно, мне нужно прикрепить к исходящему документу и отправить по почте файл в момент согласование задачи, по завершению процесса согласования. С почтой я разберусь, а вот создать запоненный файл не знаю как.
(5)Ну вот честно, не вижу проблема в чем. Документ создали по шаблону, к шаблону прикреплен файл с настройкой автозаполнения. Дальше можно например организовать шаблон процесса схемой и после согласования вставить блок программной обработки, в которой запускается код, который я в предыдущей теме приводил.
Документ = Процесс.Предметы[0].Предмет; // предполагается что документ один, если нет то нужно перебирать.
КоличествоФайлов = Делопроизводство.КоличествоФайлов(Документ.Ссылка);
Если КоличествоФайлов > 0 Тогда
ВсеФайлыДокумента = РаботаСФайламиВызовСервера.ПолучитьВсеПодчиненныеФайлы(Документ.Ссылка, Ложь);
Для Каждого ТекущийФайл Из ВсеФайлыДокумента Цикл
СозданИзШаблона = ?(ТекущийФайл.ШаблонОснованиеДляСоздания <> Справочники.Файлы.ПустаяСсылка(), Истина, Ложь);
Если СозданИзШаблона Тогда
ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(Истина, ТекущийФайл.Ссылка, Ложь);
Если ДанныеВыполнения.Результат Тогда
Комментарий = "Автозаполнение полей файла после утверждения документа";
АвтозаполнениеШаблоновФайловСервер.ОбновитьВерсиюИзДвоичныхДанных(ДанныеВыполнения.ДвоичныеДанныеЗаполненногоФайла, ТекущийФайл, Комментарий);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Эта строка вернет список прикрепленных файлов, но файла еще нет в этот момент, его нужно добавить из шаблона документа и заполнить реквизитами автозаполнения документа, разве не так?
(7)Но вы же уже документ по шаблону создали, а шаблон файла должен быть к шаблону документа прикреплен, разве нет? А иначе как правила автозаполнения рисовать?
(8)У меня сложнее исходящий документ создается программно при регистрации входящего, файлов в нем нет, да и потом - они нужны только по завершению заполнения реквизитов исходящего документа, а правила автозаполнения рисуются без единого исходящего документа, только на основании реквизитов шабона, разве нет?
(6)Сделал по другому, я скопировал шаблон файла в файла документа, назначил ему признак что он из шаблона, и запустил ваши процедуры, почти получилось, не сработала последняя, обновление заполненного файла.
// Заполняет файлы документа по шаблону, при необходимости удаляя файлы других шаблонов.
//
// Параметры:
// Шаблон - СправочникСсылка.ШаблоныВнутреннихДокументов,
// СправочникСсылка.ШаблоныВходящихДокументов,
// СправочникСсылка.ШаблоныИсходящихДокументов - источник данных заполнения.
// Файлы - ТаблицаЗначений, ДанныеФормыКоллекция - заполняемый список файлов:
// Наименование - Строка.
// Расширение - Строка.
// ПолныйПуть - Строка.
// ИндексКартинки - Число.
// ШаблонОснованиеДляСоздания - СправочникСсылка.Файлы.
// ДобавленИзШаблона - Булево.
// УдалятьФайлыИзДругогоШаблона - Булево - Истина, если требуется заместить файлы
// других шаблонов.
//
Процедура ЗаполнитьФайлыДокументаПоШаблону(Шаблон, Файлы, УдалятьФайлыИзДругогоШаблона) Экспорт
Показать
Т.е. эту таблицу нужно сформировать и передать в процедуру. Если нужен конкретно работающий пример, то вот я в комплексном процессе оформленном схемой в блоке программной обработки сделал так:
Документ = Процесс.Предметы[0].Предмет;
КоличествоФайлов = Делопроизводство.КоличествоФайлов(Документ.Ссылка);
Если КоличествоФайлов > 0 Тогда
ВсеФайлыДокумента = РаботаСФайламиВызовСервера.ПолучитьВсеПодчиненныеФайлы(Документ.Ссылка, Ложь);
Для Каждого ТекущийФайл Из ВсеФайлыДокумента Цикл
СозданИзШаблона = ?(ТекущийФайл.ШаблонОснованиеДляСоздания <> Справочники.Файлы.ПустаяСсылка(), Истина, Ложь);
Если СозданИзШаблона Тогда
ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(Истина, ТекущийФайл.Ссылка, Ложь);
Если ДанныеВыполнения.Результат Тогда
Комментарий = "Автозаполнение полей файла после утверждения документа";
АвтозаполнениеШаблоновФайловСервер.ОбновитьВерсиюИзДвоичныхДанных(ДанныеВыполнения.ДвоичныеДанныеЗаполненногоФайла, ТекущийФайл, Комментарий);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
(18) Подскажите, делаю всё так же, казалось, что всё получилось, обрадовалась... Потом выяснилось, что к текущему документу прикрепляется файл, заполненный по данным предыдущего документа. И так все последующие(((
Пол дня сижу и не пойму в чём дело((( Отладчиком смотрю, ссылки везде правильные, владелец правильный, от предыдущего документа нигде никакая информация не передаётся!
ТекущийФайл = ШаблонФайла.Скопировать();
ТекущийФайл = Справочники.Файлы.СоздатьФайл();
ТекущийФайл.ВладелецФайла = НовСЗ.Ссылка; //ссылка на созданный внутренний документ (записан)
ТекущийФайл.ДатаСоздания = ТекущаяДата();
ТекущийФайл.ШаблонОснованиеДляСоздания = ШаблонФайла.Ссылка;
ТекущийФайл.Автор = ПараметрыСеанса.ТекущийПользователь;
ТекущийФайл.Записать();
ДанныеВыполнения = АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(Истина, ТекущийФайл.Ссылка, Ложь);
Если ДанныеВыполнения.Результат Тогда
Комментарий = "Создан автоматически обработкой";
АвтозаполнениеШаблоновФайловСервер.ОбновитьВерсиюИзДвоичныхДанных(ДанныеВыполнения.ДвоичныеДанныеЗаполненногоФайла, ТекущийФайл.Ссылка, Комментарий);
КонецЕсли;
(21)"создатьфайл" - этой строки нет! не могу отредактировать сообщение((
это уже другие способы начала выдумывать... закомментирована у меня эта строка.
(23)Это шаблон файла, у которого настроено автозаполнение полей.
Получилось, что заполнялся почему-то шаблон, а не сам файл. После всех этих строк ещё раз скопировала шаблон в файл и файл теперь выглядит так как надо, но в процедуры заполнения ссылку то я передаю на файл, а не на его шаблон, почему заполняется сам шаблон мне непонятно...
(7)У меня сложнее исходящий документ создается программно при регистрации входящего, файлов в нем нет, да и потом - они нужны только по завершению заполнения реквизитов исходящего документа, а правила автозаполнения рисуются без единого исходящего документа, только на основании реквизитов шабона, разве нет?
(9)А зачем усложнять? Ну прикрепите шаблон файла для заполнения к шаблону исходящего документа и всё. Создавайте программно по шаблону исходящий документ и у него уже будет прикреплен файл для заполнения. Сам файл можете программно заполнять когда будет нужно.
(11)В том то и дело, что шаблонов два и какаой именно нужен определяется реквизитом в документе, допреквизитом если точно, мне как то не нужно все два файла цеплять к документу.
Сейчас та же самая задача стоит. Создаю внутренний документ программно по шаблону документа с файлом, но файл не создается
В итоге как решили, можете пример прислать
(25) При этом коде файл вложение в документе не новый, а сам шаблон. те при заполнении файла во внутреннем документе портиться общий шаблон. Впрочем не заполняется он то же. пишет проверьте правильность установки ворда и предлагает открыть файл в безопасном режиме. что то там сильно портиться. Не дорабатывали код? Так осилить и не могу создание файла.
(26) нужно еще очищать текущую версию файла, так как при копировании - она тоже копируется от шаблона
и именно поэтому потом при автозаполнении шаблон портится
(31) Даже при таком коде шаблон обновляется. И есть шаблон возвращаться к первоначальному типу, файл который прикреплен к документу так же становится похож на шаблон.... Этот код точно окончательный?)
Для Каждого СтрокаФайл Из ТаблицаФайлы Цикл
ФайлОбъект = СтрокаФайл.ШаблонОснованиеДляСоздания.Скопировать();
ФайлОбъект.ШаблонОснованиеДляСоздания = СтрокаФайл.ШаблонОснованиеДляСоздания;
ФайлОбъект.ВладелецФайла = ДокументСсылка;
ФайлОбъект.ШаблонОснованиеДляСоздания = СтрокаФайл.ШаблонОснованиеДляСоздания;
ФайлОбъект.Записать();
//При необходимости автозаполнения раскомментировать
//АвтозаполнениеШаблоновФайловКлиентСервер.ЗаполнитьПоляФайлаДаннымиВладельца(Ложь, ФайлОбъект.Ссылка, Истина);
КонецЦикла;
вот эта строка еще нужна для автозаполнения нового файла по шалону:
ФайлОбъект.ШаблонОснованиеДляСоздания = СтрокаФайл.ШаблонОснованиеДляСоздания;