Функционал присоединенных файлов без снятия с поддержки

27.05.24

Задачи пользователя - Адаптация типовых решений

Хранение файлов для конфигураций "на замке".

Скачать исходный код

Наименование Файл Версия Размер
Расширение "ПФ_ПрисоединенныеФайлы"
.cfe 182,03Kb
1
.cfe 1.0.1.1 182,03Kb 1 Скачать

Доброго всем!

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

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

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

Итак, вводные:

1. Конфигурация на замке

2. Должны быть реализованы загрузка, сохранение, удаление, чтение присоединенных файлов

3. Подключение к данному механизму не должно требовать монопольного режима, т.е. все объекты должны подключаться без изменения структуры базы данных.

4. Не хранить файлы в базе ("шобы не пухла"), хранить в отдельной папке на сервере.

Не буду расписывать реализацию, т.к. она максимально проста и незамысловата, вкратце - есть один справочник, который хранит данные файла и УИД на нужный объект; регистр, в измерении которого определен также УИД, а в ресурсах - булева переменная "ЕстьФайлы" (Почти как в БСП:)); несколько общих модулей со всей реализацией механизма.

Пример подключения

Чтобы использовать данный механизм, первое, что требуется - создать файлопомойку на сервере, куда собственно и будут сохраняться все файлы. Доступ к этой папке должен быть открыт для пользователя, от лица которого крутится сервер 1С, так как именно с сервера осуществляется запись файлов в эту папку. Путь к этой файлопомойке нужно прописать в константу "ПФ_ПутьККорнюХранилищаПрисоединенныхФайлов" (можно найти через режим тех.специалиста)

В константу "ПФ_МаксимальныйРазмерФайла" нужно записать максимально допустимый размер загружаемого файла в МБ.

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

// Пропишите получение текущего пользователя с учетом особенностей вашей базы
// ПараметрыЗаполнения.Загрузил = Строка(ПользователиКлиент.АвторизованныйПользователь());
ПараметрыЗаполнения.Загрузил = "<Текущий пользователь>";

Далее, для необходимых объектов нужно создать форму элемента и форму списка, в модуле которых нужно будет дополнить (создать) обработчик "ПриСозданииНаСервере" и создать метод-обработчик создаваемой команды. Код представлен в модулях форм справочника "_ДЕМО_", что в расширении. На примере формы списка:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// На этом этапе добавляется кнопка в ту панель, которая передается вторым параметром
	ПФ_РаботаСФайлами.ДобавитьКоманду(ЭтотОбъект, Элементы.ФормаКоманднаяПанель);
	
КонецПроцедуры

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

После того, как модули форм доработаны, осталось дополнить функцию "СписокКаталоговХраненияПрисоединенныхФайлов", что находится в общем модуле "ПФ_РаботаСФайламиПереопределяемый", а именно прописать нужный тип и указать имя подкаталога, куда буду сыпаться присоединенные файлы объектов этого типа:

Функция СписокКаталоговХраненияПрисоединенныхФайлов()

	Соответствие = Новый Соответствие;
	// Ключ = Тип объекта, Значение - имя папки
	Соответствие.Вставить(Тип("СправочникСсылка.НовыйСправочник"), "new_cat");
	
	// Соответствие.Вставить(Тип(""), "");
	
	Возврат Соответствие;
	
КонецФункции

Можно навести красивостей и вывести на форму списка скрепочку. Для этого также, как и в механизме БСП, нужно прописать в запросе динамического списка соединение с регистром "ПФ_ЕстьФайлы", однако, т.к. регистр в расширении, делать это придется обходными путями:

1. Установить флажок "Произвольный запрос" для списка

2. Добавить в выбираемые поля "0 КАК ИндексКартинки"

3. Вывести это поле на форму, установить Вид "ПолеКартинки". Картинку значений не устанавливать.

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

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

Ну, и напоследок, нужно дать всем пользователям права на чтение и запись в справочник "ПФ_ПрисоединенныеФайлы" и регистр "ПФ_ЕстьФайлы".

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

Расширение тестировалось на платформе 8.3.23.1865, тонкий клиент. Так как запросы используют функцию УНИКАЛЬНЫЙИДЕНТИФИКАТОР, вряд ли получится завести без существенных доработок на платформах ранее 8.3.22.

Не тестировалось на мобильном клиенте и веб-клиенте.

Спасибо за внимание, надеюсь, кому-нибудь это будет полезно.

ЗЫ. Сейчас смотрю, регистр ЕстьФайлы, ресурс ЕстьФайлы... Масло масляное. >_<. Ну, как есть...

Присоединенные файлы расширение

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4974    11    5    

20

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3348    6    0    

24

Каждому менеджеру нужен свой Excel

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    4536    dimanich70    15    

20

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    2843    dimanich70    8    

15

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Программист Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

27.10.2023    2387    20    avmartynov    14    

44

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2626    40    progmaster    8    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Tarlich 116 27.05.24 08:02 Сейчас в теме
без использования функционала БСП- т.е на собственной написанной с 0 без бсп взлетит ?
2. poor_developer 5 27.05.24 09:13 Сейчас в теме
(1) Да. Единственный БСПшный метод в расширении - ПользователиКлиент.АвторизованныйПользователь(), который я закомментировал - в статье написано, где нужно скорректировать, если конфа не на БСП. Перед публикацией я создал голую базу, добавил один справочник и прикрутил этот функционал. Все скриншоты как раз с пустой базы
3. user2039747 06.06.24 15:29 Сейчас в теме
Простите минус поставил случайно
Оставьте свое сообщение