Значок скрепки в 1С: от кнопки вложений до колонки в своём списке документов
Содержание
В типовых конфигурациях 1С 8.3 скрепка уже есть: в форме документа это кнопка в командной панели, которая открывает список присоединённых файлов. Если вам нужно добавить значок скрепки в списке документов в своей конфигурации, это делается в Конфигураторе: колонка-картинка в динамическом списке, которая берёт признак «есть файлы» из регистра БСП или из вашего справочника файлов.
Пользователю типовой базы достаточно найти кнопку в форме. Разработчику своей конфигурации нужно три вещи: подключить вложения к объекту, добавить признак в запрос списка и вывести его картинкой. Всё описанное относится к платформе 8.3 с интерфейсом «Такси».
Зачем нужна скрепка и как устроены вложения
Скрепка — это визуальный вход в механизм присоединённых файлов. К документу, справочнику или задаче можно приложить скан договора, фото накладной, письмо в PDF. Файл хранится в базе или в томе на диске, а в документе остаётся только связь с ним.
Что даёт механизм:
- 📎 быстрый доступ к оригиналам первички прямо из документа;
- 🔍 видно в списке, к каким документам уже приложены сканы, а к каким нет;
- 🗂 версии файла, если его редактировали и сохраняли повторно;
- 🔒 права доступа к файлам наследуются от владельца: видит документ — видит и вложения.
В типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11, ERP) это подсистема «Работа с файлами» из Библиотеки стандартных подсистем (БСП). Для каждого объекта-владельца в ней заводится отдельный справочник с именем вида <ИмяОбъекта>ПрисоединенныеФайлы. Например, у документа ПоступлениеТоваровУслуг будет справочник ПоступлениеТоваровУслугПрисоединенныеФайлы.
Скрепка в типовой конфигурации: как прикрепить файл
Пользователю ничего настраивать не надо. Порядок действий одинаков для документов и справочников:
- Откройте документ. Если он новый — сначала запишите его: к незаписанному объекту файлы не прикрепляются.
- Найдите в командной панели формы кнопку со скрепкой (в части конфигураций рядом есть надпись «Файлы» или счётчик вложений).
- В открывшемся списке нажмите «Добавить» и выберите вариант: файл с диска, скан со сканера или файл по шаблону.
- Укажите файл. После записи он появится в списке, а у документа в журнале — значок скрепки.
Чтобы открыть вложение, дважды щёлкните по нему в списке файлов. Чтобы отредактировать документ Word или Excel и сохранить изменения в базу, используйте команды «Редактировать» и «Завершить редактирование» — так создаётся новая версия.
Если кнопки со скрепкой не видно, проверьте Ещё → Изменить форму. Часто пользователь сам когда-то скрыл кнопку, и её достаточно снова включить галочкой.
Где хранятся файлы
Хранение задаёт администратор в разделе Администрирование (настройки работы с файлами в общих настройках программы). Два варианта:
| Вариант | Когда подходит | Риск |
|---|---|---|
| В информационной базе | Мало файлов, небольшая база | База быстро растёт, дольше бэкап |
| В томах на диске | Много сканов, гигабайты вложений | Том нужно бэкапить отдельно от базы |
Если файлы хранятся в томах, резервная копия только базы их не содержит. Без копии каталога тома после восстановления скрепки останутся, а файлы открываться не будут.
Как добавить значок скрепки в список документов в своей конфигурации
Теперь задача разработчика. Есть документ, файлы к нему уже прикрепляются, но в списке не видно, у каких строк есть вложения. Нужна колонка со скрепкой.
Принцип простой: в запрос динамического списка добавляем поле-признак, а на форме выводим его как картинку.
Шаг 1. Откройте форму списка
- В Конфигураторе найдите документ в дереве метаданных.
- На вкладке «Формы» откройте форму списка. Если её нет — создайте конструктором форм.
- В реквизитах формы выделите
Список(динамический список) и откройте его свойства.
Шаг 2. Включите произвольный запрос
- Установите флаг «Произвольный запрос» и откройте текст запроса.
- Проверьте, что в свойстве «Основная таблица» указан ваш документ. Без основной таблицы список потеряет стандартные команды и сортировку по ссылке.
- Флаг «Динамическое считывание данных» оставьте включённым.
Шаг 3. Добавьте признак наличия файлов
Если конфигурация на БСП, признак уже хранится в регистре сведений НаличиеФайлов. Он обновляется сам при добавлении и удалении вложений. Запрос будет таким:
ВЫБРАТЬ
ДокументСписок.Ссылка КАК Ссылка,
ДокументСписок.Дата КАК Дата,
ДокументСписок.Номер КАК Номер,
ДокументСписок.Проведен КАК Проведен,
ДокументСписок.ПометкаУдаления КАК ПометкаУдаления,
ВЫБОР
КОГДА ЕСТЬNULL(НаличиеФайлов.ЕстьФайлы, ЛОЖЬ)
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК ЕстьФайлы
ИЗ
Документ.ЗаявкаНаРасход КАК ДокументСписок
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
ПО ДокументСписок.Ссылка = НаличиеФайлов.ОбъектСФайлами
ЗаявкаНаРасход замените на имя своего документа. Число вместо булева нужно для следующего шага: по числу удобно выбирать кадр картинки.
Если БСП нет и файлы лежат в собственном справочнике (например, Файлы с реквизитом Владелец), соединяйтесь со сгруппированным подзапросом:
ВЫБРАТЬ
ДокументСписок.Ссылка КАК Ссылка,
ДокументСписок.Дата КАК Дата,
ДокументСписок.Номер КАК Номер,
ВЫБОР
КОГДА ЕСТЬNULL(Вложения.Количество, 0) > 0
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК ЕстьФайлы
ИЗ
Документ.ЗаявкаНаРасход КАК ДокументСписок
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Файлы.Владелец КАК Владелец,
КОЛИЧЕСТВО(Файлы.Ссылка) КАК Количество
ИЗ
Справочник.Файлы КАК Файлы
ГДЕ
НЕ Файлы.ПометкаУдаления
СГРУППИРОВАТЬ ПО
Файлы.Владелец) КАК Вложения
ПО ДокументСписок.Ссылка = Вложения.Владелец
Вариант с подзапросом на больших объёмах медленнее: группировка выполняется при каждом считывании порции списка. Если документов сотни тысяч, заведите свой регистр «наличие файлов» и обновляйте его при записи справочника файлов — так же, как это сделано в БСП.
Шаг 4. Выведите колонку картинкой
- Перетащите поле
ЕстьФайлыиз реквизитаСписокв таблицу на форме. Поставьте колонку первой. - В свойствах элемента выберите вид «Поле картинки».
- В свойстве «Картинка значений» укажите картинку-коллекцию из двух кадров: кадр 0 — пустой, кадр 1 — скрепка. Тогда при значении 0 ячейка пустая, при 1 — видна скрепка.
- Ширину задайте 2, растягивание по горизонтали снимите.
- Чтобы и в шапке была скрепка вместо текста, заполните «Картинку заголовка» и в отображении заголовка оставьте только картинку.
Числовое поле удобно ещё и тем, что по нему работает сортировка. Бухгалтер щёлкает по шапке колонки — и все документы без сканов собираются вверху списка. Перед закрытием месяца так быстро видно, по каким поступлениям ещё не пришли оригиналы. Отбор по колонке тоже доступен: в настройках списка выберите поле ЕстьФайлы и условие «Равно 0».
В БСП уже есть общие картинки со скрепкой — найдите их в ветке Общие → Общие картинки поиском по слову «Скрепка». Если подходящей коллекции нет, создайте свою общую картинку: загрузите изображение из двух кадров одинакового размера (например, 32×16 для двух кадров 16×16) и отметьте её как коллекцию.
Шаг 5. Открытие файлов по щелчку на скрепке
Обычно пользователи ждут, что щелчок по скрепке откроет вложения. Для этого в обработчике события таблицы Выбор проверьте, что выбрано поле ЕстьФайлы, отключите стандартную обработку и откройте форму списка файлов владельца. В БСП для этого служит клиентский модуль РаботаСФайламиКлиент — нужную процедуру ищите в его программном интерфейсе по слову «Открыть».
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле <> Элементы.ЕстьФайлы Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ОткрытьВложенияДокумента(ВыбраннаяСтрока);
КонецПроцедуры
ОткрытьВложенияДокумента — ваша процедура: в ней вызывается открытие формы файлов из БСП либо формы списка вашего справочника Файлы с отбором по владельцу.
Подключение подсистемы «Работа с файлами» к новому объекту
Колонка ничего не покажет, если к документу не подключены вложения. В конфигурации на БСП подключение выглядит так:
- Создайте справочник
<ИмяДокумента>ПрисоединенныеФайлы. Проще всего скопировать уже существующий справочник присоединённых файлов (например, от другого документа) и переименовать. Реквизиты, формы и модули копия унаследует. - У нового справочника в качестве типа реквизита
ВладелецФайлаукажите ваш документ. - Добавьте типы в определяемые типы подсистемы. Как минимум владелец должен попасть в тип
ВладелецФайлов, а новый справочник — в типы присоединённого файла. Точный список определяемых типов смотрите в описании внедрения «Работы с файлами» для вашей редакции БСП. - Выдайте права на новый справочник в тех ролях, где есть права на сам документ.
- В форме документа подключите команду вложений. В современных редакциях БСП это делается вызовом из обработчика
ПриСозданииНаСерверемодуля формы через общий модульРаботаСФайлами, и на форме появляется кнопка или гиперссылка «Файлы» со скрепкой.
После этого обновите конфигурацию базы данных (F7) и проверьте: прикрепите файл в пользовательском режиме и откройте список документов.
Не правьте типовую конфигурацию напрямую ради колонки со скрепкой. Форму списка можно заимствовать в расширение и поменять запрос и элементы там. Тогда обновления конфигурации пройдут без ручного сравнения.
Как прикрепить файл программно
Типичный сценарий — загрузка сканов из папки или вложений из почты. В БСП файл добавляется функцией РаботаСФайлами.ДобавитьФайл. Сначала содержимое кладётся во временное хранилище, затем заполняются параметры:
&НаСервере
Функция ПрикрепитьФайлКДокументу(Документ, ПолноеИмяФайла)
ФайлНаДиске = Новый Файл(ПолноеИмяФайла);
Если НЕ ФайлНаДиске.Существует() Тогда
Возврат Неопределено;
КонецЕсли;
ДвоичныеДанные = Новый ДвоичныеДанные(ПолноеИмяФайла);
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
ПараметрыФайла.ВладелецФайлов = Документ;
ПараметрыФайла.ИмяБезРасширения = ФайлНаДиске.ИмяБезРасширения;
ПараметрыФайла.РасширениеБезТочки = СтрЗаменить(ФайлНаДиске.Расширение, ".", "");
ПараметрыФайла.ВремяИзмененияУниверсальное = ФайлНаДиске.ПолучитьУниверсальноеВремяИзменения();
Возврат РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, Адрес);
КонецФункции
Функция вернёт ссылку на созданный присоединённый файл. Регистр НаличиеФайлов при этом обновится сам, и скрепка в списке появится без доработок.
Что учесть:
- 📁 код выполняется на сервере, значит путь
ПолноеИмяФайладолжен быть доступен серверу 1С, а не компьютеру пользователя; - 👤 при пакетной загрузке под регламентным заданием проверьте права пользователя, от имени которого оно работает;
- 🧩 состав параметров
ПараметрыДобавленияФайла()от редакции к редакции БСП немного меняется — сверьтесь с комментарием к функции в модулеРаботаСФайлами.
Без БСП логика та же, только руками: создаёте элемент своего справочника, заполняете владельца, имя и расширение, а данные пишете в реквизит типа ХранилищеЗначения через Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)).
Почему скрепка не появляется: разбор неполадок
Частые вопросы
Можно ли показать в списке не скрепку, а количество файлов?
НаличиеФайлов хранит только признак.Будет ли скрепка в журнале документов?
Ссылка журнала. Регистр НаличиеФайлов принимает ссылки разных типов, поэтому одно соединение покрывает все документы журнала.