Прикрепление каталогов к документам 1С 7.7Часто требуется прикрепить к документам 1С каталог с документами Word, PDF и т.д.
Приведенный ниже фрагмент кода позволяет реализовать прикрепление файлов. | | Автор статьи: romix | Редакторы: Последняя редакция №2 от 29.04.07 | История URL: http://kb.mista.ru/article.php?id=408 | |
Ключевые слова: прикрепить, файл, документ, каталог
Поместите на форму документа кнопку "Файлы" с формулой ф_Файлы();
Вставьте приведенный ниже код в глобальный модуль
///////////////////////////////////////////////////////////////////////
//24-символьное представление объекта
Функция ЗначениеВСтрокуВнутр24(прм_об) Экспорт
Если ПустоеЗначение(прм_об)=1 Тогда
Возврат "";
КонецЕсли;
стр=СокрЛП(ЗначениеВСтрокуВнутр(прм_об));
стр=Сред(стр,2,СтрДлина(стр)-2); //убираем {}
сп=СоздатьОбъект("СписокЗначений");
сп.ИзСтрокиСРазделителями(стр);
Если сп.РазмерСписка()<>7 Тогда
Сообщить("Неправильный размер списка "+стр); а=1/0;
КонецЕсли;
тип=сп.ПолучитьЗначение(1);
вид=сп.ПолучитьЗначение(4);
объ=сп.ПолучитьЗначение(7);
Если СтрДлина(тип)<>1 Тогда
Сообщить("Неправильный размер идентификатора типа, ожидается 1 *"+вид+"*"); а=1/0;
КонецЕсли;
Если вид="0" Тогда
Если СтрДлина(объ)<>23 Тогда
Сообщить("Неправильный размер идентификатора, ожидается 23 *"+объ+"*"); а=1/0;
КонецЕсли;
ид=сп.ПолучитьЗначение(1)+объ;
Иначе
Если СтрДлина(объ)<>13 Тогда
Сообщить("Неправильный размер идентификатора, ожидается 13 *"+объ+"*"); а=1/0;
КонецЕсли;
вид=Прав(" "+вид,10); //дополняем пробелами слева
Если СтрДлина(вид)<>10 Тогда
Сообщить("Неправильный размер идентификатора вида, ожидается 10 *"+вид+"*"); а=1/0;
КонецЕсли;
ид=тип+вид+объ;
КонецЕсли;
стр=СтрЗаменить(ид, " ", "_");
Возврат стр;
КонецФункции
///////////////////////////////////////////////////////////////////////
//объект из 24-символьного представления
Функция ЗначениеИзСтрокиВнутр24(прм_стр) Экспорт
Если СтрДлина(прм_стр)<>24 Тогда
Сообщить("Ожидается строка длиной 24"); а=1/0;
КонецЕсли;
сп=СоздатьОбъект("СписокЗначений");
сп.ДобавитьЗначение(лев(прм_стр,1));
сп.ДобавитьЗначение("0");
сп.ДобавитьЗначение("0");
сп.ДобавитьЗначение("0");
сп.ДобавитьЗначение("0");
сп.ДобавитьЗначение("0");
стр=сред(прм_стр,2);
стр=СтрЗаменить(стр, "_", " ");
сп.ДобавитьЗначение(стр);
стр="{"+сп.ВСтрокуСРазделителями()+"}";
Возврат ЗначениеИзСтрокиВнутр(стр);
КонецФункции
А эту функцию - в форму документа:
///////////////////////////////////////////////////////////////////////
Процедура ф_Файлы()
//Записываем документ (у не записанного документа нет внутр. идентификатора)
Если Выбран()=0 Тогда
Записать();
КонецЕсли;
//Получаем внутренний идентификатор документа
стр=ЗначениеВСтрокуВнутр24(ТекущийДокумент());
//Создаем подкаталог в каталоге ИБ
каталог=КаталогИБ()+"Файлы\";
Если фс.СуществуетФайл(каталог)=0 Тогда
фс.СоздатьКаталог(каталог);
КонецЕсли;
//Создаем подкаталог для нашего документа:
каталог=КаталогИБ()+"Файлы\"+стр;
Если фс.СуществуетФайл(каталог)=0 Тогда
фс.СоздатьКаталог(каталог);
КонецЕсли;
//Открываем наш каталог
ЗапуститьПриложение(каталог);
КонецПроцедуры
|