Значок скрепки в 1С: от кнопки вложений до колонки в своём списке документов

· 9 мин

Содержание

В типовых конфигурациях 1С 8.3 скрепка уже есть: в форме документа это кнопка в командной панели, которая открывает список присоединённых файлов. Если вам нужно добавить значок скрепки в списке документов в своей конфигурации, это делается в Конфигураторе: колонка-картинка в динамическом списке, которая берёт признак «есть файлы» из регистра БСП или из вашего справочника файлов.

Пользователю типовой базы достаточно найти кнопку в форме. Разработчику своей конфигурации нужно три вещи: подключить вложения к объекту, добавить признак в запрос списка и вывести его картинкой. Всё описанное относится к платформе 8.3 с интерфейсом «Такси».

Зачем нужна скрепка и как устроены вложения

Скрепка — это визуальный вход в механизм присоединённых файлов. К документу, справочнику или задаче можно приложить скан договора, фото накладной, письмо в PDF. Файл хранится в базе или в томе на диске, а в документе остаётся только связь с ним.

Что даёт механизм:

  • 📎 быстрый доступ к оригиналам первички прямо из документа;
  • 🔍 видно в списке, к каким документам уже приложены сканы, а к каким нет;
  • 🗂 версии файла, если его редактировали и сохраняли повторно;
  • 🔒 права доступа к файлам наследуются от владельца: видит документ — видит и вложения.

В типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11, ERP) это подсистема «Работа с файлами» из Библиотеки стандартных подсистем (БСП). Для каждого объекта-владельца в ней заводится отдельный справочник с именем вида <ИмяОбъекта>ПрисоединенныеФайлы. Например, у документа ПоступлениеТоваровУслуг будет справочник ПоступлениеТоваровУслугПрисоединенныеФайлы.

Скрепка в типовой конфигурации: как прикрепить файл

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

  1. Откройте документ. Если он новый — сначала запишите его: к незаписанному объекту файлы не прикрепляются.
  2. Найдите в командной панели формы кнопку со скрепкой (в части конфигураций рядом есть надпись «Файлы» или счётчик вложений).
  3. В открывшемся списке нажмите «Добавить» и выберите вариант: файл с диска, скан со сканера или файл по шаблону.
  4. Укажите файл. После записи он появится в списке, а у документа в журнале — значок скрепки.

Чтобы открыть вложение, дважды щёлкните по нему в списке файлов. Чтобы отредактировать документ Word или Excel и сохранить изменения в базу, используйте команды «Редактировать» и «Завершить редактирование» — так создаётся новая версия.

Если кнопки со скрепкой не видно, проверьте Ещё → Изменить форму. Часто пользователь сам когда-то скрыл кнопку, и её достаточно снова включить галочкой.

Где хранятся файлы

Хранение задаёт администратор в разделе Администрирование (настройки работы с файлами в общих настройках программы). Два варианта:

ВариантКогда подходитРиск
В информационной базеМало файлов, небольшая базаБаза быстро растёт, дольше бэкап
В томах на дискеМного сканов, гигабайты вложенийТом нужно бэкапить отдельно от базы

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

Как добавить значок скрепки в список документов в своей конфигурации

Теперь задача разработчика. Есть документ, файлы к нему уже прикрепляются, но в списке не видно, у каких строк есть вложения. Нужна колонка со скрепкой.

Принцип простой: в запрос динамического списка добавляем поле-признак, а на форме выводим его как картинку.

Шаг 1. Откройте форму списка

  1. В Конфигураторе найдите документ в дереве метаданных.
  2. На вкладке «Формы» откройте форму списка. Если её нет — создайте конструктором форм.
  3. В реквизитах формы выделите Список (динамический список) и откройте его свойства.

Шаг 2. Включите произвольный запрос

  1. Установите флаг «Произвольный запрос» и откройте текст запроса.
  2. Проверьте, что в свойстве «Основная таблица» указан ваш документ. Без основной таблицы список потеряет стандартные команды и сортировку по ссылке.
  3. Флаг «Динамическое считывание данных» оставьте включённым.

Шаг 3. Добавьте признак наличия файлов

Если конфигурация на БСП, признак уже хранится в регистре сведений НаличиеФайлов. Он обновляется сам при добавлении и удалении вложений. Запрос будет таким:

ВЫБРАТЬ
	ДокументСписок.Ссылка КАК Ссылка,
	ДокументСписок.Дата КАК Дата,
	ДокументСписок.Номер КАК Номер,
	ДокументСписок.Проведен КАК Проведен,
	ДокументСписок.ПометкаУдаления КАК ПометкаУдаления,
	ВЫБОР
		КОГДА ЕСТЬNULL(НаличиеФайлов.ЕстьФайлы, ЛОЖЬ)
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК ЕстьФайлы
ИЗ
	Документ.ЗаявкаНаРасход КАК ДокументСписок
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
		ПО ДокументСписок.Ссылка = НаличиеФайлов.ОбъектСФайлами

ЗаявкаНаРасход замените на имя своего документа. Число вместо булева нужно для следующего шага: по числу удобно выбирать кадр картинки.

Если БСП нет и файлы лежат в собственном справочнике (например, Файлы с реквизитом Владелец), соединяйтесь со сгруппированным подзапросом:

ВЫБРАТЬ
	ДокументСписок.Ссылка КАК Ссылка,
	ДокументСписок.Дата КАК Дата,
	ДокументСписок.Номер КАК Номер,
	ВЫБОР
		КОГДА ЕСТЬNULL(Вложения.Количество, 0) > 0
			ТОГДА 1
		ИНАЧЕ 0
	КОНЕЦ КАК ЕстьФайлы
ИЗ
	Документ.ЗаявкаНаРасход КАК ДокументСписок
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			Файлы.Владелец КАК Владелец,
			КОЛИЧЕСТВО(Файлы.Ссылка) КАК Количество
		ИЗ
			Справочник.Файлы КАК Файлы
		ГДЕ
			НЕ Файлы.ПометкаУдаления
		СГРУППИРОВАТЬ ПО
			Файлы.Владелец) КАК Вложения
		ПО ДокументСписок.Ссылка = Вложения.Владелец

Вариант с подзапросом на больших объёмах медленнее: группировка выполняется при каждом считывании порции списка. Если документов сотни тысяч, заведите свой регистр «наличие файлов» и обновляйте его при записи справочника файлов — так же, как это сделано в БСП.

Шаг 4. Выведите колонку картинкой

  1. Перетащите поле ЕстьФайлы из реквизита Список в таблицу на форме. Поставьте колонку первой.
  2. В свойствах элемента выберите вид «Поле картинки».
  3. В свойстве «Картинка значений» укажите картинку-коллекцию из двух кадров: кадр 0 — пустой, кадр 1 — скрепка. Тогда при значении 0 ячейка пустая, при 1 — видна скрепка.
  4. Ширину задайте 2, растягивание по горизонтали снимите.
  5. Чтобы и в шапке была скрепка вместо текста, заполните «Картинку заголовка» и в отображении заголовка оставьте только картинку.

Числовое поле удобно ещё и тем, что по нему работает сортировка. Бухгалтер щёлкает по шапке колонки — и все документы без сканов собираются вверху списка. Перед закрытием месяца так быстро видно, по каким поступлениям ещё не пришли оригиналы. Отбор по колонке тоже доступен: в настройках списка выберите поле ЕстьФайлы и условие «Равно 0».

В БСП уже есть общие картинки со скрепкой — найдите их в ветке Общие → Общие картинки поиском по слову «Скрепка». Если подходящей коллекции нет, создайте свою общую картинку: загрузите изображение из двух кадров одинакового размера (например, 32×16 для двух кадров 16×16) и отметьте её как коллекцию.

Шаг 5. Открытие файлов по щелчку на скрепке

Обычно пользователи ждут, что щелчок по скрепке откроет вложения. Для этого в обработчике события таблицы Выбор проверьте, что выбрано поле ЕстьФайлы, отключите стандартную обработку и откройте форму списка файлов владельца. В БСП для этого служит клиентский модуль РаботаСФайламиКлиент — нужную процедуру ищите в его программном интерфейсе по слову «Открыть».

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Поле <> Элементы.ЕстьФайлы Тогда
		Возврат;
	КонецЕсли;
	
	СтандартнаяОбработка = Ложь;
	ОткрытьВложенияДокумента(ВыбраннаяСтрока);
	
КонецПроцедуры

ОткрытьВложенияДокумента — ваша процедура: в ней вызывается открытие формы файлов из БСП либо формы списка вашего справочника Файлы с отбором по владельцу.

Проверка колонки со скрепкой
Выполнено: 0 / 5

Подключение подсистемы «Работа с файлами» к новому объекту

Колонка ничего не покажет, если к документу не подключены вложения. В конфигурации на БСП подключение выглядит так:

  1. Создайте справочник <ИмяДокумента>ПрисоединенныеФайлы. Проще всего скопировать уже существующий справочник присоединённых файлов (например, от другого документа) и переименовать. Реквизиты, формы и модули копия унаследует.
  2. У нового справочника в качестве типа реквизита ВладелецФайла укажите ваш документ.
  3. Добавьте типы в определяемые типы подсистемы. Как минимум владелец должен попасть в тип ВладелецФайлов, а новый справочник — в типы присоединённого файла. Точный список определяемых типов смотрите в описании внедрения «Работы с файлами» для вашей редакции БСП.
  4. Выдайте права на новый справочник в тех ролях, где есть права на сам документ.
  5. В форме документа подключите команду вложений. В современных редакциях БСП это делается вызовом из обработчика ПриСозданииНаСервере модуля формы через общий модуль РаботаСФайлами, и на форме появляется кнопка или гиперссылка «Файлы» со скрепкой.

После этого обновите конфигурацию базы данных (F7) и проверьте: прикрепите файл в пользовательском режиме и откройте список документов.

Не правьте типовую конфигурацию напрямую ради колонки со скрепкой. Форму списка можно заимствовать в расширение и поменять запрос и элементы там. Тогда обновления конфигурации пройдут без ручного сравнения.

Как прикрепить файл программно

Типичный сценарий — загрузка сканов из папки или вложений из почты. В БСП файл добавляется функцией РаботаСФайлами.ДобавитьФайл. Сначала содержимое кладётся во временное хранилище, затем заполняются параметры:

&НаСервере
Функция ПрикрепитьФайлКДокументу(Документ, ПолноеИмяФайла)
	
	ФайлНаДиске = Новый Файл(ПолноеИмяФайла);
	Если НЕ ФайлНаДиске.Существует() Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ДвоичныеДанные = Новый ДвоичныеДанные(ПолноеИмяФайла);
	Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
	
	ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
	ПараметрыФайла.ВладелецФайлов = Документ;
	ПараметрыФайла.ИмяБезРасширения = ФайлНаДиске.ИмяБезРасширения;
	ПараметрыФайла.РасширениеБезТочки = СтрЗаменить(ФайлНаДиске.Расширение, ".", "");
	ПараметрыФайла.ВремяИзмененияУниверсальное = ФайлНаДиске.ПолучитьУниверсальноеВремяИзменения();
	
	Возврат РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, Адрес);
	
КонецФункции

Функция вернёт ссылку на созданный присоединённый файл. Регистр НаличиеФайлов при этом обновится сам, и скрепка в списке появится без доработок.

Что учесть:

  • 📁 код выполняется на сервере, значит путь ПолноеИмяФайла должен быть доступен серверу 1С, а не компьютеру пользователя;
  • 👤 при пакетной загрузке под регламентным заданием проверьте права пользователя, от имени которого оно работает;
  • 🧩 состав параметров ПараметрыДобавленияФайла() от редакции к редакции БСП немного меняется — сверьтесь с комментарием к функции в модуле РаботаСФайлами.

Без БСП логика та же, только руками: создаёте элемент своего справочника, заполняете владельца, имя и расширение, а данные пишете в реквизит типа ХранилищеЗначения через Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)).

Почему скрепка не появляется: разбор неполадок

Диагностика: выберите симптом

Частые вопросы

Можно ли показать в списке не скрепку, а количество файлов?
Да. Выведите в запросе число вложений вместо признака и оставьте колонку обычным полем. Для БСП количество придётся считать подзапросом по справочнику присоединённых файлов: регистр НаличиеФайлов хранит только признак.
Будет ли скрепка в журнале документов?
Будет, если в запрос формы журнала добавить такое же соединение по полю Ссылка журнала. Регистр НаличиеФайлов принимает ссылки разных типов, поэтому одно соединение покрывает все документы журнала.
Сколько весит файл, который можно прикрепить?
Жёсткий предел задаётся в настройках работы с файлами в разделе администрирования. Для тяжёлых сканов лучше включить хранение в томах, чтобы база не разрасталась.
Можно ли прикрепить файл к документу через веб-клиент?
Да, в веб-клиенте добавление работает так же: браузер передаёт файл на сервер. Ограничение одно — прямое редактирование Word и Excel из веб-клиента работает только с установленным расширением для работы с файлами.