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