1С как прикрепить файл к документу

Доброго дня, коллеги!

Как известно, с ноября 2019 года экзамен «1С:Специалист” по конфигурированию и внедрению прикладного решения «1С:Управление торговлей 8” принимается по новому сборнику задач для редакции УТ 11.4.

Содержание сборника переработано примерно на четверть. Уже весной этого года на нашем проекте планируется выход обновленного курса по подготовке к данной сертификации, ну а пока служба поддержки отвечает на вопросы слушателей по обеим редакциям сборника.

Вопрос

Вопрос по задаче 2.18 из нового сборника задач для редакции УТ 11.4. Что означает требование включения разрабатываемой новой печатной формы в список форм, отражаемых в форме «Печать комплекта документов”, открываемой при выполнении команды «Печать/Печать комплекта документов с настройкой”?

Ответ

Это означает, что Вы обязательно должны включить вашу внешнюю печатную форму в комплект документов. Печать комплекта документов позволяет печатать сразу несколько печатных форм.

Печать комплекта вызывается командой Комплект документов с настройкой или Комплект документов на принтер из подменю печати.

Включить новую печатную форму в комплект можно через специальный параметр команды печати ДополнитьКомплектВнешнимиПечатнымиФормами. Например, для того, чтобы добавить новую внешнюю печатную форму Заказ клиента (себестоимость), разрабатываемую в рамках одного из занятий курса, нужно установить значение параметра ДополнитьКомплектВнешнимиПечатнымиФормами в значение Истина.

Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить(«Документ.ЗаказКлиента»); ПараметрыРегистрации.Вставить(«Назначение», МассивНазначений); ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»); ПараметрыРегистрации.Вставить(«Наименование», «Печатная форма документа «»Заказ клиента»» (себестоимость)»); ПараметрыРегистрации.Вставить(«Информация», «Данные о себестоимости получаются расчетным путем.»); ПараметрыРегистрации.Вставить(«БезопасныйРежим», Ложь); ТаблицаКоманд = СформироватьСтруктуруТаблицыКоманд(); НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = «Заказ клиента (себестоимость)»; НоваяКоманда.Идентификатор = «ЗаказКлиентаСебестоимость»; НоваяКоманда.Использование = «ВызовСерверногоМетода»; НоваяКоманда.ПоказыватьОповещение = Истина; НоваяКоманда.Модификатор = «ПечатьMXL»; НоваяКоманда.ЗаменяемыеКоманды = «ЗаказКлиента»; НоваяКоманда.ДополнитьКомплектВнешнимиПечатнымиФормами = Истина; ПараметрыРегистрации.Вставить(«Команды», ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции

В результате новая печатная форма «Заказ клиента (себестоимость)” попадет в список форм, отражаемых в форме «Печать комплекта документов”.

Если параметр ДополнитьКомплектВнешнимиПечатнымиФормами не указан, то внешние печатные формы не добавляются в комплект.

Подробнее про параметры команды печати можно почитать вот тут Разработка команд печати.

Это пример разобранного вопроса из Мастер-группы курса
Доработка и Адаптация типовых конфигураций УТ 11.4 (11.3), КА 2.4 (2.2) и 1С:ERP 2.4 (2.2) + подготовка к Аттестации 1С:Специалист по конфигурированию торговых решений.

Описание курса и примеры видео

Смотреть предыдущий вопрос

1. Создание информационной базы:

— Запустим 1С и в окне «Список информационных баз» выберем «Добавить»:

— в открывшемся окне ставим переключатель на «Создание информационной базы без конфигурации…»:

— далее выбираем «Создание новой информационной базы» и нажимаем «Далее»:

— Указываем имя информационной базы, нажимаем «Далее»:

— Указываем папку, где будет храниться информационная база (желательно создать папку заранее), нажимаем «Далее»:

— В открывшемся окне нажимаем «Готово»:

Информационная база с указанным именем появится в списке.

2. Открытие конфигурации:

Выбираем данную базу и нажимаем «Конфигуратор»:

— в открывшемся окне для простоты можно нажать в левом верхнем углу кнопку «Открыть конфигурацию»:

3. Создание справочника «Файлы»:

Сразу оговоримся, что рассматриваемый пример упрощен и произвольный файл мы будем хранить в одном из реквизитов самого справочника.

Итак, справочник «Файлы» будет содержать два реквизита: Файл (для хранения двоичных данных), ИмяФайла (для хранения имени загруженного файла) и СсылкаНаВладельца (для привязки файла к нужному для нас документу).

— Создадим две подсистемы «Справочники» и «Документы»:

— Создадим новый справочник и назовем его «Файлы»:

— Перейдем на закладку «Подсистемы» и добавим данный справочник к подсистеме «Справочники»:

— Перейдем на закладку «Данные» и добавим новый реквизит, назовем его «Файл» и укажем Тип «ХранилищеЗначения»:

— Добавим еще один реквизит, назовем его «ИмяФайла» и укажем Тип «Строка», поставим галочку «Неограниченная длина»:

— Добавим еще один реквизит, назовем его «СсылкаНаВладельца» и укажем Тип «ДокументСсылка»:

— Переходим на закладку «Формы» и в поле Формы элемента нажимаем кнопку «Открыть»:

— В открывшемся окне можно ничего не менять и нажать кнопку «Готово»:

— Далее создадим Форму списка, в поле Формы списка нажимаем кнопку «Открыть»:

— В открывшемся окне теперь нажимаем «Далее»:

— Теперь указываем какие колонки должны отображаться в Форме списка, поставим галочку напротив «СсылкаНаВладельца» и нажимаем «Готово»:

— В открывшейся форме для красоты столбец «Код» переместим на верх (т.е.в начало таблицы):

Форма элемента справочника «Файлы», помимо данных самого объекта, будет содержать два дополнительных реквизита: «Имя» и «СсылкаНаФайлВоВременномХранилище»

— В правой части под «Объектом» добавим реквизит и назовем его «Имя» и укажем Тип «Строка»:

— Добавим еще один реквизит, назовем его «СсылкаНаФайлВоВременномХранилище» и укажем Тип «Строка»:

Для загрузки файла с диска в информационную базу и для сохранения его на диск в форме элемента создадим две локальные команды: «ЗагрузитьСДиска» и «СохранитьНаДиск»

— Перейдем на вкладку «Команды» и создадим новую локальную команду «ЗагрузитьСДиска»:

— На вкладке «Команды» создадим еще одну локальную команду «СохранитьНаДиск»:

— На вкладке «Элементы» добавим группу «Обычная группа»:

— Теперь перетащим в созданную группу наши локальные команды:

— Установим горизонтальное положение кнопок на форме и снимем галочку «ОтображатьЗаголовок»:

— И для красоты создадим еще в этой группе «Декорацию-надпись»:

— Щелкаем правой мышкой на кнопке «Загрузить с диска» и выбираем «Действие команды»:

— оставляем «Создать на клиенте», нажимаем «ОК»:

— Вставляем код:

&НаКлиенте Процедура ЗагрузитьСДиска(Команда) АдресВХранилище = «»; ВыбранноеИмяФайла = «»; Если ПоместитьФайл(АдресВХранилище, , ВыбранноеИмяФайла, , УникальныйИдентификатор) Тогда Файл = Новый Файл(ВыбранноеИмяФайла); Имя = Файл.Имя; СсылкаНаФайлВоВременномХранилище = АдресВХранилище; Объект.Наименование = Файл.Имя; Модифицированность = Истина; Объект.ИмяФайла = Имя; КонецЕсли; КонецПроцедуры

— Повторяем ситуацию с кнопкой «Сохранить на диск», только теперь вставляем следующий код:

&НаКлиенте Процедура СохранитьНаДиск(Команда) Если Объект.ИмяФайла = «» Тогда Предупреждение(«У поставщика нет сохраненного в базе договора»); Иначе СсылкаНаФайлВИБ = ПолучитьНавигационнуюСсылку(Объект.Ссылка, «Файл»); ПолучитьФайл(СсылкаНаФайлВИБ, Объект.ИмяФайла); КонецЕсли; КонецПроцедуры

— В свойствах формы создаем следующие процедуры: «ПередЗаписьюНаСервере», «ПриЗаписиНаСервере» и «ПриОткрытии и подставляем код»:

&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // Получить файл из хранилища и поместить его в объект. Если ЭтоАдресВременногоХранилища(СсылкаНаФайлВоВременномХранилище) Тогда ДвоичныеДанные = ПолучитьИзВременногоХранилища(СсылкаНаФайлВоВременномХранилище); ТекущийОбъект.Файл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); //ТекущийОбъект.ИмяФайла = ИмяФайлаКонтрагента; ТекущийОбъект.ИмяФайла = Имя; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) //Удалить файл из временного хранилища Если ЭтоАдресВременногоХранилища(СсылкаНаФайлВоВременномХранилище) Тогда УдалитьИзВременногоХранилища(СсылкаНаФайлВоВременномХранилище); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Имя = Объект.ИмяФайла; КонецПроцедуры

— теперь запускаем «Предприятие»:

— Пытаемся создать элемент справочника, если выскакивает ошибка «Использование модальных окон в данном режиме запрещено!:

Сделаем не очень хорошую вещь:

В конфигураторе правой кнопкой мышки на назвони конфигурации щелкаем и выбираем «Свойства», где в самом низу в строке «Режим использования модальности» ставим «Использовать» и перезапускаем базу.

Теперь все должно заработать!

4. Создание Критерия отбор «СвязанныеДокументы»:

В дальнейшем данный критерий отбора нам понадобится, чтобы отобрать в табличную часть документа файлы, которые с ним связаны.

— Создадим новый критерий отбора и назовем его «СвязанныеДокументы»:

— Перейдем на закладку «Подсистемы» и добавим данный критерий отбора к подсистеме «Документы»:

— Перейдем на закладку «Данные» и установим Тип «ДокументСсылка»:

— Перейдем на закладку «Состав» и выберем реквизит справочника «Файлы» «СылкаНаВладельца»:

— Перейдем на закладку «Формы» и создадим Форму списка:

— В форму списка перетаскиваем реквизит Объекта «СсылкаНаименование»:

5. Создание документа «Продажи»:

Теперь создадим простенький документ с целью прикрепить к нему файлы.

— Создадим новый документ и назовем его «Продажи»:

— Перейдем на закладку «Подсистемы» и добавим данный документ к подсистеме «Документы»:

— Перейдем на закладку «Данные» и добавим данный какой-нибудь реквизит, к примеру, «Описание» с Типом «Строка» неограниченной длины и в многострочном режиме:

— На закладке «Данные» добавим табличную часть, назовем ее «СписокДокументов»:

— На закладке «Данные» в табличную часть добавим реквизит и именем «Файл» и Типом «СправочникСсылка.Файлы»:

— На закладке «Данные» в табличную часть добавим реквизит и именем «Документ» и Типом «ДокументСсылка»:

— Перейдем на закладку «Формы» и создадим форму списка:

— В открывшемся окне нажимаем кнопку «Далее»:

— В открывшемся окне выбираем реквизит «Ссылка» и нажимаем кнопку «Готово»:

— Перейдем на закладку «Формы» и создадим форму документа:

— В открывшемся окне нажимаем кнопку «Готово»:

— В открывшейся форме документа добавляем Группу «Обычная группа» и назовем ее «Документы»:

— И перетаскиваем в нее реквизиты так как показано на картинке ниже. Аналогично создаем еще одну такую группу с названием «Файлы» и перетаскиваем в нее «Список Документов»:

— Добавляем новую Группу «Страницы» и перетаскиваем в нее группы «Документы» и «Файлы»:

— На вкладке «Команды» создадим новую локальную команду с именем «ПолучитьСписок» и перетащим ее в папку Файлы:

— На появившейся кнопке на форме документа кликаем правой кнопкой мышки выбираем «Действие команды»:

— Создаем на клиенте:

— Добавляем следующий код:

&НаКлиенте Процедура ПолучитьСписок(Команда) ЭтаФорма.Объект.СписокДокументов.Очистить(); МасивДокументов = ПолучитьСписокПодчиненныхДокументов(Объект.Ссылка); Для Каждого Строка Из МасивДокументов Цикл НоваяСтрока = Объект.СписокДокументов.Добавить(); НоваяСтрока.Файл = Строка.Файл; НоваяСтрока.Документ = Строка.Документ; КонецЦикла; КонецПроцедуры

— Также добавляем функцию:

&НаСервере Функция ПолучитьСписокПодчиненныхДокументов(ДокументОснование) Запрос = Новый Запрос; Запрос.Текст = «ВЫБРАТЬ РАЗРЕШЕННЫЕ | СтруктураПодчиненности.Ссылка.Ссылка КАК Файл, | СтруктураПодчиненности.Ссылка.СсылкаНаВладельца КАК Документ |ИЗ | КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СтруктураПодчиненности»; Запрос.УстановитьПараметр(«ЗначениеКритерияОтбора», ДокументОснование); ТЗ = Запрос.Выполнить().Выгрузить(); Массив = Новый Массив(); СтруктураСтрокой = «»; НужнаЗапятая = Ложь; Для Каждого Колонка Из ТЗ.Колонки Цикл Если НужнаЗапятая Тогда СтруктураСтрокой = СтруктураСтрокой + «,»; КонецЕсли; СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя; НужнаЗапятая = Истина; КонецЦикла; Для Каждого Строка Из ТЗ Цикл НоваяСтрока = Новый Структура(СтруктураСтрокой); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); Массив.Добавить(НоваяСтрока); КонецЦикла; Возврат Массив; КонецФункции

— Переходим к справочнику «Файлы» на закладку «Ввод на основании», в верхней части кликаем на карандаш и выбираем Документ «Продажи» и нажимаем «ОК»:

— После этого кликаем «Конструктор ввода на основании»:

— В открывшейся форме напротив Поля «СсылкаНаВладельца» кликаем и выбираем вверху «Ссылка», потом жмем «ОК»:

— Теперь всё должно заработать!