Имя: Пароль:
1C
1С v8
Расширение и связанные документе (не бюст 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) зачет )
Основная теорема систематики: Новые системы плодят новые проблемы.