Имя: Пароль:
1C
1С v8
дополнительные реквизиты в 1С 8.3
, ,
0 Darchick
 
05.03.15
09:29
Добрый день, уважаемые гуру!

Проблема возникла в связи с использованием дополнительных реквизитов в Документообороте: есть справочник ВнутренниеДокументы, а в нем табличная часть ДополнительныеРеквизиты с полями Свойство и Значение.
Пользователям понадобился запрос, в котором проводится фильтрация по дополнительным реквизитам.
Мое решение было создать доп.обработку с кучей полей для выбора(в соответствие с доп.реквизитами). В коде прописываю запрос:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Вид",Вид);
Запрос.Текст = "ВЫБРАТЬ
                |    ВД.Ссылка как ссылка,
            |    ВД.ВидДокумента,
        |ИЗ
        |    Справочник.ВнутренниеДокументы КАК ВД
        |ГДЕ
        |    ВД.ВидДокумента = &Вид";

    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();


Потом в цикле делаю отбор по доп.Реквизитам. Здесь выкладываю на примере мощности (а вообще их около 10 штук):

Пока Выборка.Следующий() Цикл
Строка=Макет.ПолучитьОбласть("Строка");
ВнДок=Выборка.Ссылка;
Таб=ВнДок.ДополнительныеРеквизиты;

Для каждого стр из Таб цикл
Если стр.свойство.наименование="Мощность"  тогда
м=стр.значение;
конецесли;
конеццикла;

//фильтруем по мощности

Если м<=МощностьДо и м>=МощностьОт тогда
продолжить;
Конецесли;

//и выводим строку в макет

Строка.Параметры.РегНом=ВнДок.РегистрационныйНомер;
Строка.Параметры.Корр=ВнДок.Корреспондент;
Строка.Параметры.РегДата=ВнДок.ДатаРегистрации;
Строка.Параметры.Мощ=м;
ТабДокумент.Вывести(Строка);

конеццикла;


В результате получаю таблицу типа:

Номер Корреспондент Дата          Мощность
1      Иванов       01.01.2014     5
2      Петров       01.02.2014     10
3      Сидоров      01.03.2014     50

И все бы хорошо, но в справочнике 12000 записей и таблица формируется минуты 4....

Пыталась такую же таблицу сделать в СКД... Мощность дополнительной колонкой не выводится, и фильтрация по доп.реквизитам тоже не получается.  Уважаемые знатоки, подскажите как в СКД сделать аналог перекрестного запроса... Ну или как ускорить вывод в макете...
1 shuhard
 
05.03.15
09:32
(0) Строка=Макет.ПолучитьОбласть("Строка");
а макет то что содержит ?
2 banco
 
05.03.15
09:40
(0) Доп. реквизиты прописать в характеристки документа и использовать в отчетах скд как обычные реквизиты
3 Defender aka LINN
 
05.03.15
09:42
Жесть какая...
4 Креатив
 
05.03.15
10:05
(0)Делай сразу запрос по табличной части.
5 cons74
 
05.03.15
11:25
(0) отбор в цикле - чего ж ты еще хотел как не тормозов.
Решение должно быть в запросе, например как (4)
6 cons74
 
05.03.15
11:29
Ах это сисадмин Даша.
Даша, посмотрите видеолекции Павла Чистова. http://forum.chistov.pro/index.php?PHPSESSID=k5g31182vt7iil40c7mcjt5kd4&board=38.0

Хоть простые вопросы отпадут.

Судя по коду с запросами у вас не важно. А у него как раз отдельные 2 лекции по запросам есть.
7 DexterMorgan
 
05.03.15
11:50
(0) В скд для этого используются характеристики -  их можно указать как на уровне самой скд, так и на уровне объекта (данные - характеристики).

После этого в отчетах, дин списках  и т.д. можно выводить доп. реквизиты как обычные реквизиты и делать по ним отбор
8 Darchick
 
06.03.15
03:00
(1) В макете области: заголовок, шапка, строка, а в строке все необходимые параметры. При исполнении кода получается табличка, как на выходе в посте (0)
9 PR
 
06.03.15
03:41
Правильный ответ в (2)
10 Darchick
 
16.03.15
09:03
(2) Разобралась с характеристиками СКД, в результате получаю вот такой запрос:

ВЫБРАТЬ
    ВнутренниеДокументы.Ссылка
ИЗ
    Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
{ХАРАКТЕРИСТИКИ
    ТИП(Справочник.ВнутренниеДокументы)
    ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения
    ПОЛЕКЛЮЧА Ссылка
    ПОЛЕИМЕНИ Наименование
    ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
    ЗНАЧЕНИЯХАРАКТЕРИСТИК (ВЫБРАТЬ
            ВнутренниеДокументыДополнительныеРеквизиты.Ссылка,
            ВнутренниеДокументыДополнительныеРеквизиты.Свойство,
            ВнутренниеДокументыДополнительныеРеквизиты.Значение
        ИЗ
            Справочник.ВнутренниеДокументы.ДополнительныеРеквизиты КАК ВнутренниеДокументыДополнительныеРеквизиты)
    ПОЛЕОБЪЕКТА Ссылка
    ПОЛЕВИДА Свойство
    ПОЛЕЗНАЧЕНИЯ Значение }

После настройки под предприятием отчет выводится ООООООЧЕНЬ медленно. И к тому же, если в поля выводишь более 2 допреквизитов, все виснет, и программа с ошибкой закрывается...
11 Darchick
 
16.03.15
09:44
Разобралась. Все гораздо проще. Запрос в конфигураторе:

ВЫБРАТЬ
    ВнутренниеДокументы.Ссылка
ИЗ
    Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы

Потом в режиме предприятия Все действия-Изменить вариант и настроить выводимые поля.

Дело в том, что в конфигурации Документооборота в справочнике "Внутренние документы" уже прописаны характеристики объекта. Поэтому лишние навороты в отчете только замедляют его вывод.

(7)Спасибо, натолкнули на мысль.
(6)Согласна, активно взялась за запросы :-)
12 D_E_S_131
 
16.03.15
09:47
Вообще-то рекомендовали

Выбрать
   тчВД.Ссылка,
   тчВД.Свойство,
   тчВД.Значение
ИЗ
   Справочник.ВнутренниеДокументы.ДополнительныеРеквизиты КАК тчВД
13 Darchick
 
17.03.15
01:56
(12) Я аналогично пробовала... Но данных 12 000 записей, только по нужному типу документов и примерно столько же всех остальных - обрабатывается очень долго.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший