1. Создание информационной базы:
- Запустим 1С и в окне "Список информационных баз" выберем «Добавить»:
- в открывшемся окне ставим переключатель на «Создание информационной базы без конфигурации…»:
- далее выбираем «Создание новой информационной базы» и нажимаем «Далее»:
- Указываем имя информационной базы, нажимаем «Далее»:
- Указываем папку, где будет храниться информационная база (желательно создать папку заранее), нажимаем «Далее»:
- В открывшемся окне нажимаем «Готово»:
Информационная база с указанным именем появится в списке.
2. Открытие конфигурации:
Выбираем данную базу и нажимаем «Конфигуратор»:
- в открывшемся окне для простоты можно нажать в левом верхнем углу кнопку «Открыть конфигурацию»:
3. Создание справочника «Файлы»:
Сразу оговоримся, что рассматриваемый пример упрощен и произвольный файл мы будем хранить в одном из реквизитов самого справочника.
Итак, справочник «Файлы» будет содержать два реквизита: Файл (для хранения двоичных данных), ИмяФайла (для хранения имени загруженного файла) и СсылкаНаВладельца (для привязки файла к нужному для нас документу).
- Создадим две подсистемы «Справочники» и «Документы»:
- Создадим новый справочник и назовем его «Файлы»:
- Перейдем на закладку «Подсистемы» и добавим данный справочник к подсистеме «Справочники»:
- Перейдем на закладку «Данные» и добавим новый реквизит, назовем его «Файл» и укажем Тип «ХранилищеЗначения»:
- Добавим еще один реквизит, назовем его «ИмяФайла» и укажем Тип «Строка», поставим галочку «Неограниченная длина»:
- Добавим еще один реквизит, назовем его «СсылкаНаВладельца» и укажем Тип «ДокументСсылка»:
- Переходим на закладку «Формы» и в поле Формы элемента нажимаем кнопку «Открыть»:
- В открывшемся окне можно ничего не менять и нажать кнопку «Готово»:
- Далее создадим Форму списка, в поле Формы списка нажимаем кнопку «Открыть»:
- В открывшемся окне теперь нажимаем «Далее»:
- Теперь указываем какие колонки должны отображаться в Форме списка, поставим галочку напротив «СсылкаНаВладельца» и нажимаем «Готово»:
- В открывшейся форме для красоты столбец «Код» переместим на верх (т.е.в начало таблицы):
Форма элемента справочника "Файлы", помимо данных самого объекта, будет содержать два дополнительных реквизита: "Имя" и "СсылкаНаФайлВоВременномХранилище"
- В правой части под "Объектом" добавим реквизит и назовем его «Имя» и укажем Тип «Строка»:
- Добавим еще один реквизит, назовем его «СсылкаНаФайлВоВременномХранилище» и укажем Тип «Строка»:
Для загрузки файла с диска в информационную базу и для сохранения его на диск в форме элемента создадим две локальные команды: "ЗагрузитьСДиска" и "СохранитьНаДиск"
- Перейдем на вкладку «Команды» и создадим новую локальную команду «ЗагрузитьСДиска»:
- На вкладке «Команды» создадим еще одну локальную команду «СохранитьНаДиск»:
- На вкладке «Элементы» добавим группу «Обычная группа»:
- Теперь перетащим в созданную группу наши локальные команды:
- Установим горизонтальное положение кнопок на форме и снимем галочку «ОтображатьЗаголовок»:
- И для красоты создадим еще в этой группе «Декорацию-надпись»:
- Щелкаем правой мышкой на кнопке «Загрузить с диска» и выбираем «Действие команды»:
- оставляем «Создать на клиенте», нажимаем «ОК»:
- Вставляем код:
&НаКлиенте
Процедура ЗагрузитьСДиска(Команда)
АдресВХранилище = "";
ВыбранноеИмяФайла = "";
Если ПоместитьФайл(АдресВХранилище, , ВыбранноеИмяФайла, , УникальныйИдентификатор) Тогда
Файл = Новый Файл(ВыбранноеИмяФайла);
Имя = Файл.Имя;
СсылкаНаФайлВоВременномХранилище = АдресВХранилище;
Объект.Наименование = Файл.Имя;
Модифицированность = Истина;
Объект.ИмяФайла = Имя;
КонецЕсли;
КонецПроцедуры
- Повторяем ситуацию с кнопкой «Сохранить на диск», только теперь вставляем следующий код:
&НаКлиенте
Процедура СохранитьНаДиск(Команда)
Если Объект.ИмяФайла = "" Тогда
Предупреждение("У поставщика нет сохраненного в базе договора");
Иначе
СсылкаНаФайлВИБ = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Файл");
ПолучитьФайл(СсылкаНаФайлВИБ, Объект.ИмяФайла);
КонецЕсли;
КонецПроцедуры
- В свойствах формы создаем следующие процедуры: "ПередЗаписьюНаСервере", "ПриЗаписиНаСервере" и "ПриОткрытии и подставляем код":
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// Получить файл из хранилища и поместить его в объект.
Если ЭтоАдресВременногоХранилища(СсылкаНаФайлВоВременномХранилище) Тогда
ДвоичныеДанные = ПолучитьИзВременногоХранилища(СсылкаНаФайлВоВременномХранилище);
ТекущийОбъект.Файл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
//ТекущийОбъект.ИмяФайла = ИмяФайлаКонтрагента;
ТекущийОбъект.ИмяФайла = Имя;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
//Удалить файл из временного хранилища
Если ЭтоАдресВременногоХранилища(СсылкаНаФайлВоВременномХранилище) Тогда
УдалитьИзВременногоХранилища(СсылкаНаФайлВоВременномХранилище);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Имя = Объект.ИмяФайла;
КонецПроцедуры
- теперь запускаем "Предприятие":
- Пытаемся создать элемент справочника, если выскакивает ошибка «Использование модальных окон в данном режиме запрещено!:
Сделаем не очень хорошую вещь:
В конфигураторе правой кнопкой мышки на назвони конфигурации щелкаем и выбираем «Свойства», где в самом низу в строке «Режим использования модальности» ставим «Использовать» и перезапускаем базу.
Теперь все должно заработать!
4. Создание Критерия отбор «СвязанныеДокументы»:
В дальнейшем данный критерий отбора нам понадобится, чтобы отобрать в табличную часть документа файлы, которые с ним связаны.
- Создадим новый критерий отбора и назовем его «СвязанныеДокументы»:
- Перейдем на закладку «Подсистемы» и добавим данный критерий отбора к подсистеме «Документы»:
- Перейдем на закладку «Данные» и установим Тип «ДокументСсылка»:
- Перейдем на закладку «Состав» и выберем реквизит справочника «Файлы» «СылкаНаВладельца»:
- Перейдем на закладку «Формы» и создадим Форму списка:
- В форму списка перетаскиваем реквизит Объекта «СсылкаНаименование»:
5. Создание документа «Продажи»:
Теперь создадим простенький документ с целью прикрепить к нему файлы.
- Создадим новый документ и назовем его «Продажи»:
- Перейдем на закладку «Подсистемы» и добавим данный документ к подсистеме «Документы»:
- Перейдем на закладку «Данные» и добавим данный какой-нибудь реквизит, к примеру, «Описание» с Типом «Строка» неограниченной длины и в многострочном режиме:
- На закладке «Данные» добавим табличную часть, назовем ее «СписокДокументов»:
- На закладке «Данные» в табличную часть добавим реквизит и именем «Файл» и Типом «СправочникСсылка.Файлы»:
- На закладке «Данные» в табличную часть добавим реквизит и именем «Документ» и Типом «ДокументСсылка»:
- Перейдем на закладку «Формы» и создадим форму списка:
- В открывшемся окне нажимаем кнопку «Далее»:
- В открывшемся окне выбираем реквизит «Ссылка» и нажимаем кнопку «Готово»:
- Перейдем на закладку «Формы» и создадим форму документа:
- В открывшемся окне нажимаем кнопку «Готово»:
- В открывшейся форме документа добавляем Группу «Обычная группа» и назовем ее «Документы»:
- И перетаскиваем в нее реквизиты так как показано на картинке ниже. Аналогично создаем еще одну такую группу с названием «Файлы» и перетаскиваем в нее «Список Документов»:
- Добавляем новую Группу «Страницы» и перетаскиваем в нее группы «Документы» и «Файлы»:
- На вкладке «Команды» создадим новую локальную команду с именем «ПолучитьСписок» и перетащим ее в папку Файлы:
- На появившейся кнопке на форме документа кликаем правой кнопкой мышки выбираем «Действие команды»:
- Создаем на клиенте:
- Добавляем следующий код:
&НаКлиенте
Процедура ПолучитьСписок(Команда)
ЭтаФорма.Объект.СписокДокументов.Очистить();
МасивДокументов = ПолучитьСписокПодчиненныхДокументов(Объект.Ссылка);
Для Каждого Строка Из МасивДокументов Цикл
НоваяСтрока = Объект.СписокДокументов.Добавить();
НоваяСтрока.Файл = Строка.Файл;
НоваяСтрока.Документ = Строка.Документ;
КонецЦикла;
КонецПроцедуры
- Также добавляем функцию:
&НаСервере
Функция ПолучитьСписокПодчиненныхДокументов(ДокументОснование)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СтруктураПодчиненности.Ссылка.Ссылка КАК Файл,
| СтруктураПодчиненности.Ссылка.СсылкаНаВладельца КАК Документ
|ИЗ
| КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СтруктураПодчиненности";
Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ДокументОснование);
ТЗ = Запрос.Выполнить().Выгрузить();
Массив = Новый Массив();
СтруктураСтрокой = "";
НужнаЗапятая = Ложь;
Для Каждого Колонка Из ТЗ.Колонки Цикл
Если НужнаЗапятая Тогда
СтруктураСтрокой = СтруктураСтрокой + ",";
КонецЕсли;
СтруктураСтрокой = СтруктураСтрокой + Колонка.Имя;
НужнаЗапятая = Истина;
КонецЦикла;
Для Каждого Строка Из ТЗ Цикл
НоваяСтрока = Новый Структура(СтруктураСтрокой);
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
Массив.Добавить(НоваяСтрока);
КонецЦикла;
Возврат Массив;
КонецФункции
- Переходим к справочнику «Файлы» на закладку «Ввод на основании», в верхней части кликаем на карандаш и выбираем Документ «Продажи» и нажимаем «ОК»:
- После этого кликаем «Конструктор ввода на основании»:
- В открывшейся форме напротив Поля «СсылкаНаВладельца» кликаем и выбираем вверху «Ссылка», потом жмем «ОК»:
- Теперь всё должно заработать!
В документе через «Создать на основании» прикрепляем файлы, а список получаем, переходя на страницу «Файлы» и нажав на кнопку «Получить список». После записи документа список сохраняется.
- Все файлы записываются в справочник «Файлы»