Здравствуйте. Очень нужна помощь. Работаю конструктором, в распоряжении есть отраслевая конфигурация, но очень не хватает нужного функционала. В итоге лезу не в свое дело, но деваться некуда. Структура базы - головные изделия и куча их исполнений (-01, -02, -03...). В карточке у каждого элемента есть прикрепленные файлы. Задача - привязать чертежи только к головным изделиям, а у исполнений должны отображаться файлы головных изделий. Я добавил дополнительную вкладку в карточке "Прикрепленные чертежи", присвоил ей свою форму (по образцу оригинальной формы "Прикрепленные файлы"). В основном справочнике (Справочники.Изделия) создал дополнительный реквизит "ГоловноеИсполнение", его тип "ОпределяемыйТип.ВладелецФайлов", такой же как у основного реквизита "ВладелецФайлов" и раскидал значения в номенклатуре. Не могу осилить последний шаг. В форме "Прикрепленные чертежи" нужно настроить динамический список (нужно выводить прикрепленные файлы не текущей позиций, а позиции, которая указана в реквизите "ГоловноеИсполнение" в карточке изделия). При этом реквизит "ГоловноеИсполнение" принадлежит основному справочнику (Справочники.Изделия), реквизит "ВладелецФайла" принадлежит справочнику (Справочники.Изделия). На сколько я понимаю, нужно каким то образом вместо реквизита "ВладелецФайла" использовать реквизит "ГоловноеИсполнение". В итоге моих экспериментов за 3 дня я видел ошибки всех типов, но увы нужной работы не добился.
Настройка списка:
И процедура ПриСозданииНаСервере:
Настройка списка:
ВЫБРАТЬ
ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Ссылка,
ЛОЖЬ КАК ПометкаУдаления,
1 КАК ИндексКартинки,
ВЫРАЗИТЬ("" КАК СТРОКА(150)) КАК Наименование,
ВЫРАЗИТЬ("" КАК СТРОКА(10)) КАК Расширение,
ВЫРАЗИТЬ("" КАК СТРОКА(500)) КАК Описание,
ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Автор,
ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаСоздания,
ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Отредактировал,
ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаРедактирования,
ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаИзменения,
0 КАК Размер,
ЛОЖЬ КАК ПодписанЭП,
ЛОЖЬ КАК Зашифрован,
-1 КАК НомерКартинкиПодписанЗашифрован,
ЛОЖЬ КАК ФайлРедактируется,
ЛОЖЬ КАК ФайлРедактируетТекущийПользователь,
ЛОЖЬ КАК ФайлРедактируетДругойПользователь,
ЛОЖЬ КАК ХранитьВерсии,
ЛОЖЬ КАК ЭтоГруппа,
&ВладелецФайла КАК ВладелецФайла,
НЕОПРЕДЕЛЕНО КАК Редактирует,
НЕОПРЕДЕЛЕНО КАК РедактируетПользователь
ИЗ
Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданныхПереопределяемый
ПоказатьИ процедура ПриСозданииНаСервере:
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
Возврат;
КонецЕсли;
ВладелецФайла = Параметры.ВладелецФайла;
ТекущаяСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока");
СписокОткрытИзКарточкиФайла = ЗначениеЗаполнено(ТекущаяСсылка);
Элементы.ВладелецФайла.Видимость = СписокОткрытИзКарточкиФайла;
Если СписокОткрытИзКарточкиФайла И ВладелецФайла = Неопределено Тогда
ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСсылка, "ВладелецФайла");
Параметры.ВладелецФайла = ВладелецФайла;
КонецЕсли;
Если Параметры.ВладелецФайла = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Список присоединенных файлов можно посмотреть
|только в форме объекта-владельца.'");
КонецЕсли;
ТипВладельца = ТипЗнч(Параметры.ВладелецФайла);
Если Метаданные.ОпределяемыеТипы.ВладелецФайлов.Тип.СодержитТип(ТипВладельца) Тогда
ПолноеИмяВладельца = Метаданные.НайтиПоТипу(ТипВладельца).Имя;
Если Метаданные.Справочники.Найти(ПолноеИмяВладельца + "ПрисоединенныеФайлы") = Неопределено Тогда
ЭтоВладелецЭлементовСправочникаФайлы = Истина;
КонецЕсли;
КонецЕсли;
Элементы.ФормаРедактировать.ТолькоВоВсехДействиях = Параметры.ПростаяФорма;
Элементы.ФормаОткрыть.ТолькоВоВсехДействиях = Параметры.ПростаяФорма;
Элементы.ФормаЗакончитьРедактирование.ТолькоВоВсехДействиях = Параметры.ПростаяФорма;
Элементы.СписокВажныеРеквизиты.Видимость = Не Параметры.ПростаяФорма;
Предпросмотр = Параметры.ПростаяФорма;
ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебныйВызовСервера.ПолучитьПоказыватьКолонкуРазмер();
Если Не ПоказыватьКолонкуРазмер Тогда
Элементы.СписокРазмер.Видимость = Ложь;
КонецЕсли;
Если Не ПустаяСтрока(Параметры.ЗаголовокФормы) Тогда
Заголовок = Параметры.ЗаголовокФормы;
ИначеЕсли СписокОткрытИзКарточкиФайла Тогда
Заголовок = Заголовок + " (" + Строка(ТипЗнч(ВладелецФайла)) + " " + Строка(ВладелецФайла) + ")";
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ПараметрыОтправки) Тогда
ПараметрыОтправки = Параметры.ПараметрыОтправки;
Иначе
ПараметрыОтправки = РаботаСФайламиСлужебный.ПодготовитьСтруктуруПараметровОтправки();
КонецЕсли;
Если Параметры.РежимВыбора Тогда
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВыборПодбор");
РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
Заголовок = НСтр("ru = 'Выбор присоединенного файла'");
Иначе
Элементы.Список.РежимВыбора = Ложь;
КонецЕсли;
НастройкиФайлов = РаботаСФайламиСлужебный.НастройкиФайлов();
ИмяСправочникаХранилищаФайлов = Неопределено;
ЗаголовокОшибки = НСтр("ru = 'Ошибка при настройке динамического списка присоединенных файлов.'");
ОкончаниеОшибки = НСтр("ru = 'В этом случае настройка динамического списка невозможна.'");
ИмяСправочникаХранилищаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(
Параметры.ВладелецФайла, "", ЗаголовокОшибки, ОкончаниеОшибки);
ТипСправочникаСФайлами = Тип("СправочникСсылка." + ИмяСправочникаХранилищаФайлов);
МассивИсключенийСозданияФайловПоШаблону = Новый Массив;
МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами);
ИмяСправочникаХранилищаВерсийФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияВерсийФайлов(
Параметры.ВладелецФайла, "", ЗаголовокОшибки, ОкончаниеОшибки);
ВозможностьСоздаватьГруппыФайлов = МетаданныеСправочникаСФайлами.Иерархический;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
ЕстьПравоИспользоватьШаблоны = МодульУправлениеДоступом .ЕстьПраво("Чтение", Справочники.ПапкиФайлов.Шаблоны);
Иначе
ЕстьПравоИспользоватьШаблоны = ПравоДоступа("Чтение", Метаданные.Справочники.Файлы) И ПравоДоступа("Чтение", Метаданные.Справочники.ПапкиФайлов)
КонецЕсли;
Если НЕ ЕстьПравоИспользоватьШаблоны Или НастройкиФайлов.НеСоздаватьФайлыПоШаблону.Найти(Метаданные.НайтиПоТипу(ТипЗнч(ВладелецФайла))) <> Неопределено Тогда
Элементы.ДобавитьФайлПоШаблону.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюДобавитьФайлПоШаблону.Видимость = Ложь;
КонецЕсли;
ВозможностьСоздаватьВерсииФайлов = ЭтоВладелецЭлементовСправочникаФайлы;
НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов);
Если Не ВозможностьСоздаватьГруппыФайлов Тогда
СкрытьКнопкиСозданияГруппы();
КонецЕсли;
ЕстьПравоДобавления = Истина;
Если НЕ ПравоДоступа("ИнтерактивноеДобавление", МетаданныеСправочникаСФайлами) Тогда
СкрытьКнопкиДобавления();
ЕстьПравоДобавления = Ложь;
КонецЕсли;
Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
ТолькоПросмотр = Не ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами);
Иначе
ТолькоПросмотр = Параметры.ТолькоПросмотр Или НЕ ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами)
Или НЕ ПравоДоступа("Редактирование", Параметры.ВладелецФайла.Метаданные());
КонецЕсли;
Если ТолькоПросмотр Тогда
СкрытьКнопкиИзменения();
ЕстьПравоДобавления = Ложь;
КонецЕсли;
ИменаВсехКомандФормы = ПолучитьИменаКомандФормы();
ИменаЭлементов = Новый Массив;
Для Каждого ЭлементФормы Из Элементы Цикл
Если ТипЗнч(ЭлементФормы) <> Тип("КнопкаФормы") Тогда
Продолжить;
КонецЕсли;
Если ИменаВсехКомандФормы.Найти(ЭлементФормы.ИмяКоманды) <> Неопределено
Или ИменаВсехКомандФормы.Найти(ЭлементФормы.Имя) <> Неопределено Тогда
ИменаЭлементов.Добавить(ЭлементФормы.Имя);
КонецЕсли;
КонецЦикла;
ИменаЭлементовКнопокФормы = Новый ФиксированныйМассив(ИменаЭлементов);
ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере();
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
Элементы.ФормаИзменить.Видимость = Ложь;
Элементы.ФормаИзменить82.Видимость = Истина;
Элементы.ФормаСкопировать.ТолькоВоВсехДействиях = Ложь;
Элементы.УстановитьПометкуУдаления.ТолькоВоВсехДействиях = Ложь;
КонецЕсли;
ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
ТипСправочникаСФайлами,
"Предпросмотр");
Если ИспользоватьПредпросмотр <> Неопределено Тогда
Предпросмотр = ИспользоватьПредпросмотр;
КонецЕсли;
Элементы.АдресДанныхФайла.Видимость = Предпросмотр;
Элементы.Предпросмотр.Пометка = Предпросмотр;
РасширенияПоддерживающиеПредпросмотр = РаботаСФайламиСлужебный.СписокРасширенийДляПредпросмотра();
ОбновитьПояснениеОблачногоСервиса();
Элементы.НастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов);
ЕстьЭлектроннаяПодпись = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись");
Элементы.ПечатьСоШтампом.Видимость = ЕстьЭлектроннаяПодпись;
Элементы.СравнитьФайлы.Видимость = Не ОбщегоНазначенияКлиентСервер.ЭтоLinuxКлиент()
И Не ОбщегоНазначенияКлиентСервер.ЭтоВебКлиент();
ЗапрещенныеРасширения = РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений();
УстановитьУсловноеОформление();
РаботаСФайламиПереопределяемый.ПриСозданииФормыСпискаФайлов(ЭтотОбъект);
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Подсистема сохранения и восстановления настроек динамических списков
- Расширенная настройка динамического списка УФ
- Ускоряем медленный/долгий и тормозной стандартный поиск по динамическому списку, настраиваем его под себя
- Использование формы "Ввод значений списком с флажками" в настройках динамического списка
- Как "приджойнить" к динамическому списку таблицу из формы
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5)
Так не слушается. И заменить пробовал, и совмещать...упрямо выводит в "Прикрепленные чертежи" то же самое, что и в "Прикрепленные файлы". При этом в реквизите "ГоловноеИсполнение" задана другая позиция(
УправлениеСвойствами.ЗначениеСвойства(Параметры.ВладелецФайла, "ИмяДопРеквизита");
Так не слушается. И заменить пробовал, и совмещать...упрямо выводит в "Прикрепленные чертежи" то же самое, что и в "Прикрепленные файлы". При этом в реквизите "ГоловноеИсполнение" задана другая позиция(
Вам не нужен динамический список в принципе. Вам нужна таблица значений на форме, которую нужно заполнить при открытии формы информацией о прикрепленных файлах головного изделия. Как связаны элементы справочников "Головные изделия" и "Исполнения"?
(4)Это позиции одного и того же справочника. Головное это изделие или исполнение я пытаюсь определять реквизитом этого справочника "ГоловноеИсполнение", присвая его значение к каждому элементу в карточке изделия. Т.е. мне нужно выводить в форму файлы привязанные не к текущей позиции, а к позиции, которая указана в реквизите "ГоловноеИсполнение".
(7)В данной форме работает отбор такого вида. В "Присоединенные чертежи" отображаются только те чертежи, у которых ВладелецФалов и ГоловноеИсполнение совпадает. Может это Вам что то скажет.
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВладелецФайла");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ВладелецФайла.ГоловноеИсполнение;
(13)Методом построчного втыкания обнаружил:
&НаСервере
Процедура НастроитьДинамическийСписок(ИмяСправочникаХранилищаФайлов)
СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
ТекстЗапроса =
"ВЫБРАТЬ
| Файлы.Ссылка КАК Ссылка,
| Файлы.ПометкаУдаления,
| ВЫБОР
| КОГДА Файлы.ПометкаУдаления = ИСТИНА
| ТОГДА ЕСТЬNULL(Файлы.ИндексКартинки, 2) + 1
| ИНАЧЕ ЕСТЬNULL(Файлы.ИндексКартинки, 2)
| КОНЕЦ КАК ИндексКартинки,
| Файлы.Наименование КАК Наименование,
| ВЫРАЗИТЬ(Файлы.Описание КАК СТРОКА(500)) КАК Описание,
| Файлы.Автор,
| Файлы.ДатаСоздания,
| Файлы.Изменил КАК Отредактировал,
| ДОБАВИТЬКДАТЕ(Файлы.ДатаМодификацииУниверсальная, СЕКУНДА, &СекундДоМестногоВремени) КАК ДатаИзменения,
| ВЫРАЗИТЬ(Файлы.Размер / 1024 КАК ЧИСЛО(10, 0)) КАК Размер,
| Файлы.ПодписанЭП,
| Файлы.Зашифрован,
| ВЫБОР
| КОГДА Файлы.ПодписанЭП
| И Файлы.Зашифрован
| ТОГДА 2
| КОГДА Файлы.Зашифрован
| ТОГДА 1
| КОГДА Файлы.ПодписанЭП
| ТОГДА 0
| ИНАЧЕ -1
| КОНЕЦ КАК НомерКартинкиПодписанЗашифрован,
| ВЫБОР
| КОГДА НЕ Файлы.Редактирует В (&ПустыеПользователи)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ФайлРедактируется,
| ВЫБОР
| КОГДА Файлы.Редактирует = &ТекущийПользователь
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ФайлРедактируетТекущийПользователь,
| ВЫБОР
| КОГДА НЕ Файлы.Редактирует В (&ПустыеПользователи)
| И Файлы.Редактирует <> &ТекущийПользователь
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ФайлРедактируетДругойПользователь,
| Файлы.Расширение КАК Расширение,
| ВЫБОР
| КОГДА СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись <> НЕОПРЕДЕЛЕНО
| И Файлы.Редактирует = НЕОПРЕДЕЛЕНО
| ТОГДА СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись
| ИНАЧЕ Файлы.Редактирует
| КОНЕЦ КАК Редактирует,
| Файлы.Редактирует КАК РедактируетПользователь,
| &ЭтоГруппа КАК ЭтоГруппа,
| Файлы.ВладелецФайла КАК ВладелецФайла,
| Файлы.ХранитьВерсии КАК ХранитьВерсии
|ИЗ
| &ИмяСправочника КАК Файлы
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом
| ПО Файлы.Ссылка = СтатусыСинхронизацииФайловСОблачнымСервисом.Файл
|ГДЕ
| Файлы.ВладелецФайла = &ВладелецФайлов";
ПолноеИмяСправочника = "Справочник." + ИмяСправочникаХранилищаФайлов;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", ПолноеИмяСправочника);
СвойстваСписка.ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа",
?(ВозможностьСоздаватьГруппыФайлов, "Файлы.ЭтоГруппа", "ЛОЖЬ"));
СвойстваСписка.ОсновнаяТаблица = ПолноеИмяСправочника;
СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка);
ПустыеПользователи = Новый Массив;
ПустыеПользователи.Добавить(Неопределено);
ПустыеПользователи.Добавить(Справочники.Пользователи.ПустаяСсылка());
ПустыеПользователи.Добавить(Справочники.ВнешниеПользователи.ПустаяСсылка());
ПустыеПользователи.Добавить(Справочники.УчетныеЗаписиСинхронизацииФайлов.ПустаяСсылка());
Список.Параметры.УстановитьЗначениеПараметра("ГоловноеИсполнение", Параметры.ВладелецФайла);
Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.АвторизованныйПользователь());
Список.Параметры.УстановитьЗначениеПараметра("ПустыеПользователи", ПустыеПользователи);
ДатаУниверсальная = ТекущаяДатаСеанса();
Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени",
МестноеВремя(ДатаУниверсальная, ЧасовойПоясСеанса()) - ДатаУниверсальная);
КонецПроцедуры
Показать
(21)Я понимаю Вашу логику, но это не работает. Я с этих экспериментов начинал. Сейчас проверил еще раз. При этом изменении ничего не меняется. Ошибки нет, но и в ПрисоединенныеЧертежи выводится то же самое, что и ПрисоединенныеФайлы (т.е.просто игнорируется изменение). ИМХО в ПриСозданииНаСервере строка Параметры.Владелец = Параметры.Владелец нужна для нескольких последующих условий, которые в разных сценариях выводят ошибки в случае не совпадения или отсутствия имен. Я вчера вообще весь этот кусок убирал и все продолжало работать и выводить привязанные файлы, как в ПрисоединенныеФайлы
И вариант ВладелецФайла = Параметры.ВладелецФайла.ГоловноеИсполнение; работает так же.
ВладелецФайла = Параметры.ВладелецФайла;
ТекущаяСсылка = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ТекущаяСтрока");
СписокОткрытИзКарточкиФайла = ЗначениеЗаполнено(ТекущаяСсылка);
Элементы.ВладелецФайла.Видимость = СписокОткрытИзКарточкиФайла;
Если СписокОткрытИзКарточкиФайла И ВладелецФайла = Неопределено Тогда
ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСсылка, "ВладелецФайла");
Параметры.ВладелецФайла = ВладелецФайла;
КонецЕсли;
Если Параметры.ВладелецФайла = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Список присоединенных файлов можно посмотреть
|только в форме объекта-владельца.'");
КонецЕсли;
ПоказатьИ вариант ВладелецФайла = Параметры.ВладелецФайла.ГоловноеИсполнение; работает так же.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот