Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Расширение и связанные документе (не бюст 2020 конечно, но все же)

Расширение и связанные документе (не бюст 2020 конечно, но все же)
Я
   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
//    б) Регистр сведений А_СвязанныеРеквизиты, измерение Реквизит типа строка(99), реквизиты Тип, Вид, ТЧ типа строка(25)

//Добавлен регистр сведений для обхода ограничения расширения на изменение/добавление критериев отбора.


Не знаю, то это или нет, конечно.
   lucbak
 
16 - 23.12.20 - 08:07
(0) как вариант вообще отказаться от критериев отбора http://catalog.mista.ru/public/938145/
   DJ Anthon
 
17 - 28.12.20 - 16:59
(16) блин, я опять велик изобретал (
   rozer76
 
18 - 28.12.20 - 17:24
(16) зачет )

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.