1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
The_ka6a4ok 22.12.20 - 22:26 | добрых дней. никогда не поздно, так сказать. создал расширение конфигурации, добавил документ, настроил ввод на основании, он действительно есть, но вот проблема в том, что при выводе дерева подчиненности, этот документ не отображается,
я знаю, что проблема в критерии отбора "СтруктураПодчиненности", добавить его в расширение и изменить не позволяет сама 1с, есть ли возможность как-то добавить критерий не продавая душу? | ||
МимохожийОднако 1 - 22.12.20 - 22:34 | нет | ||
The_ka6a4ok 2 - 22.12.20 - 22:36 | (1) критично | ||
The_ka6a4ok 3 - 22.12.20 - 22:36 | снимать с замочка, кажется, не вариант, хотя это бы решило все проблемы | ||
H A D G E H O G s 4 - 22.12.20 - 22:39 | Нет | ||
H A D G E H O G s 5 - 22.12.20 - 22:41 | Более того, даже добавив много кода по дополнению дерева новыми доками и форму подчиненности в расширение ты не выиграешь.
ДокументСсылка не будет содержать доки расширения. Только добавлять копию формы подчиненности в свое расширение. | ||
The_ka6a4ok 6 - 22.12.20 - 22:46 | блин, обидно | ||
H A D G E H O G s 7 - 22.12.20 - 22:47 | Могу кинуть код, но там надо разбираться | ||
The_ka6a4ok 8 - 22.12.20 - 22:57 | мне в любом случае придется разбираться: как в твоём коде, либо придумывать что-то другое, что дает возможность как-то связывать документы: типа на одного заказчика может быть множество перевозчиков заранее n-количество | ||
H A D G E H O G s 9 - 22.12.20 - 23:06 | https://yadi.sk/d/Av20sTsAtJvPug
Форма Обработки.АСФОбщиеФормыКомандыИМакеты.АСФСвязанныеДокументы В ней, в реквизиты ИсходныйОбъект ОсновнойОбъект ДеревоПодчиненныеОбъекты.Ссылка ДеревоРодительскиеОбъекты.Ссылка ДОБАВИТЬ твои новые доки. Их же добавить в процедурыАСФОбщегоНазначенияПовторноеИспользование.ПолучитьСоставСтруктурыПодчиненности() АСФОбщегоНазначенияПовторноеИспользование.ПолучитьСписокОбрабатываемыхТиповСтруктурыПодчиненности()
по аналогии с доком АктПостановкиНаБалансЕГАИС
Это просто тупо кусок конфы и сходу не заработает, напилите напильником. | ||
The_ka6a4ok 10 - 22.12.20 - 23:18 | (9) большое спасибо | ||
Ненавижу 1С 11 - 23.12.20 - 07:18 | Мы добавляем сами метаданные не в расширения, а в саму конфигурацию. В расширении только изменения кода и форм.
Добавили свои доки. Добавили свой критерий. Изменили код вывода дерева в расширении. Там совсем немного. | ||
DJ Anthon 12 - 23.12.20 - 07:19 | (2) а я добавил | ||
DJ Anthon 13 - 23.12.20 - 07:20 | ой, это к (1) | ||
DJ Anthon 14 - 23.12.20 - 07:22 | &НаСервере
&ИзменениеИКонтроль("ВывестиРодительскиеОбъекты") Процедура А_ВывестиРодительскиеОбъекты(ТекущийОбъект, ДеревоРодитель, ВыведенныеОбъекты) МетаданныеОбъекта = ТекущийОбъект.Метаданные(); СписокРеквизитов = Новый СписокЗначений; Для Каждого Реквизит Из МетаданныеОбъекта.Реквизиты Цикл Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда #Вставка Выборка = РегистрыСведений.А_СвязанныеРеквизиты.Выбрать(Новый Структура("Реквизит", Реквизит.Имя)); Если НЕ Выборка.Следующий() Тогда Продолжить; КонецЕсли; ИначеЕсли Ложь Тогда #КонецВставки Продолжить; КонецЕсли; Для Каждого ТекущийТип Из Реквизит.Тип.Типы() Цикл МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); Если МетаданныеРеквизита = Неопределено Тогда Продолжить; КонецЕсли; Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеРеквизита) Или Не ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда Продолжить; КонецЕсли; Если Не Метаданные.Документы.Содержит(МетаданныеРеквизита) И Не Метаданные.Справочники.Содержит(МетаданныеРеквизита) И Не Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеРеквизита) Тогда Продолжить; КонецЕсли; ЗначениеРеквизита = ТекущийОбъект[Реквизит.Имя]; Если ЗначениеЗаполнено(ЗначениеРеквизита) И ТипЗнч(ЗначениеРеквизита) = ТекущийТип И ЗначениеРеквизита <> ТекущийОбъект И СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда ЯвляетсяДокументом = ОбщегоНазначения.ЭтоДокумент(МетаданныеРеквизита); Если ЯвляетсяДокументом Тогда ДатаДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина); СписокРеквизитов.Добавить(ЗначениеРеквизита, Формат(ДатаДокумента, "ДЛФ=DT")); Иначе СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1,1,1)); КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Для Каждого ТЧ Из МетаданныеОбъекта.ТабличныеЧасти Цикл ИменаРеквизитов = ""; СодержимоеТЧ = ТекущийОбъект[ТЧ.Имя].Выгрузить();// ТаблицаЗначений Для Каждого Реквизит Из ТЧ.Реквизиты Цикл Если Не Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда #Вставка Выборка = РегистрыСведений.А_СвязанныеРеквизиты.Выбрать(Новый Структура("Реквизит", Реквизит.Имя)); Если НЕ Выборка.Следующий() Тогда Продолжить; КонецЕсли; ИначеЕсли Ложь Тогда #КонецВставки Продолжить; КонецЕсли; Для Каждого ТекущийТип Из Реквизит.Тип.Типы() Цикл МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); Если МетаданныеРеквизита = Неопределено Тогда Продолжить; КонецЕсли; Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеРеквизита) Или Не ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда Продолжить; КонецЕсли; Если Не Метаданные.Документы.Содержит(МетаданныеРеквизита) И Не Метаданные.Справочники.Содержит(МетаданныеРеквизита) И Не Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеРеквизита) Тогда Продолжить; КонецЕсли; ИменаРеквизитов = ИменаРеквизитов + ?(ИменаРеквизитов = "", "", ", ") + Реквизит.Имя; Прервать; КонецЦикла; КонецЦикла; СодержимоеТЧ.Свернуть(ИменаРеквизитов); Для Каждого КолонкаТЧ Из СодержимоеТЧ.Колонки Цикл Для Каждого СтрокаТЧ Из СодержимоеТЧ Цикл ЗначениеРеквизита = СтрокаТЧ[КолонкаТЧ.Имя]; МетаданныеЗначения = Метаданные.НайтиПоТипу(ТипЗнч(ЗначениеРеквизита)); Если МетаданныеЗначения = Неопределено Тогда Продолжить; КонецЕсли; Если Не ОбщегоНазначения.ОбъектМетаданныхДоступенПоФункциональнымОпциям(МетаданныеЗначения) Или Не ПравоДоступа("Чтение", МетаданныеЗначения) Тогда Продолжить; КонецЕсли; Если ЗначениеРеквизита = ТекущийОбъект Или СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) <> Неопределено Тогда Продолжить; КонецЕсли; ЯвляетсяДокументом = ОбщегоНазначения.ЭтоДокумент(МетаданныеЗначения); Если Не ЯвляетсяДокументом И Не Метаданные.Справочники.Содержит(МетаданныеЗначения) И Не Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеЗначения) Тогда Продолжить; КонецЕсли; Если ЯвляетсяДокументом Тогда ДатаДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗначениеРеквизита, "Дата", Истина); СписокРеквизитов.Добавить(ЗначениеРеквизита, Формат(ДатаДокумента, "ДЛФ=DT")); Иначе СписокРеквизитов.Добавить(ЗначениеРеквизита, Дата(1, 1, 1)); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; СписокРеквизитов.СортироватьПоПредставлению(); Для каждого ЭлементСписка Из СписокРеквизитов Цикл Выборка = ПолучитьВыборкуПоРеквизитамОбъекта(ЭлементСписка.Значение); Если Выборка.Следующий() Тогда НоваяСтрока = ДобавитьСтрокуВДерево(ДеревоРодитель, Выборка, ВыведенныеОбъекты); Если НоваяСтрока <> Неопределено И Не ДобавляемыйОбъектИмеетсяСредиРодителей(ДеревоРодитель, ЭлементСписка.Значение) Тогда ВывестиРодительскиеОбъекты(ЭлементСписка.Значение, НоваяСтрока, ВыведенныеОбъекты); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры&НаСервере &Вместо("ОбъектыПоКритериюОтбора") Функция А_ОбъектыПоКритериюОтбора(ЗначениеКритерияОтбора)  // Вставить содержимое метода. Результат = ПродолжитьВызов(ЗначениеКритерияОтбора); Выборка = РегистрыСведений.А_СвязанныеРеквизиты.Выбрать(); Пока Выборка.Следующий() Цикл Реквизит = ?(ПустаяСтрока(Выборка.ТЧ), Метаданные[Выборка.Тип][Выборка.Вид].Реквизиты[Выборка.Реквизит], Метаданные[Выборка.Тип][Выборка.Вид].ТабличныеЧасти[Выборка.ТЧ].Реквизиты[Выборка.Реквизит]); Если Реквизит.Тип.СодержитТип(ТипЗнч(ЗначениеКритерияОтбора)) Тогда Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ | Объект.Ссылка КАК Ссылка |ИЗ | " + СтрЗаменить(СтрЗаменить(Выборка.Тип, "Документы", "Документ"), "Справочники", "Справочник") + "." + Выборка.Вид + ?(ПустаяСтрока(Выборка.ТЧ), "", "." + Выборка.ТЧ) + " КАК Объект |ГДЕ | Объект." + Выборка.Реквизит + " = &Значение"); Запрос.УстановитьПараметр("Значение", ЗначениеКритерияОтбора); ТЗ = Запрос.Выполнить().Выгрузить(); Для Каждого Строка ИЗ ТЗ Цикл Если Результат = Неопределено Тогда Результат = Новый ТаблицаЗначений; Результат.Колонки.Добавить("Ссылка"); ИначеЕсли Результат.Найти(Строка.Ссылка, "Ссылка") = Неопределено Тогда Результат.Добавить().Ссылка = Строка.Ссылка; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции | ||
DJ Anthon 15 - 23.12.20 - 07:23 | |||
lucbak 16 - 23.12.20 - 08:07 | |||
DJ Anthon 17 - 28.12.20 - 16:59 | (16) блин, я опять велик изобретал ( | ||
rozer76 18 - 28.12.20 - 17:24 | (16) зачет ) |
|
Список тем форума |