Имя: Пароль:
1C
1С v8
Как создать в неуправляемой форме реквизит "Список складов"
0 suvolod
 
12.06.12
16:10
Есть внешний отчет, в нем присутствует такой запрос (привожу упрощенный вариант)

ВЫБРАТЬ
   ЦеныАТТСрезПоследних.Номенклатура,
   ЦеныАТТСрезПоследних.Склад,
   ЦеныАТТСрезПоследних.Цена
ИЗ
   РегистрСведений.ЦеныАТТ.СрезПоследних(&МомВремени,  Склад В (&Склады)) КАК ЦеныАТТСрезПоследних

Мне надо на форме (неуправляемой, в режиме толстого клиента), сделать реквизит, в котором пользователь может указать несколько складов, по которым выбирать данные. И чтобы он мог корректировать этот список (добавлять / удалять элементы)

По аналогии с тем, как это можно сделать в СКД на закладке Параметры при взведенном флажке "Доступен список значений".

Как правильно такой реквизит прописать на форме?
1 suvolod
 
12.06.12
16:17
нагуглил.. всем спасибо
2 aleks-id
 
12.06.12
16:21
интересно, что можно было нагуглить кроме использования ТЧ
3 suvolod
 
12.06.12
16:35
тч здесь и не пахнет :)
4 DrShad
 
12.06.12
16:44
не проще было сразу нагуглить?
5 suvolod
 
12.06.12
16:44
с ходу не получилось....
6 DrShad
 
12.06.12
16:45
ну так что в итоге нагуглил?
7 suvolod
 
12.06.12
16:47
Спрошу заодно, может кто ответит, хоть и выходной день.

Периодически приходиться писать отчеты на СКД, запросом похожие на приведенный выше, например:

ВЫБРАТЬ
   ЦеныАТТСрезПоследних.Номенклатура,
   ЦеныАТТСрезПоследних.Склад,
   ЦеныАТТСрезПоследних.Цена
ИЗ
   РегистрСведений.ЦеныАТТ.СрезПоследних(,  Склад = &Склад) КАК ЦеныАТТСрезПоследних

"Минус" такого запроса в том, что пользователю ВСЕГДА нужно выставлять склад в настройках, иначе отчет выкинет ошибку. Как-то можно автоматом, на уровне самой СКД настроить отчет так, что если пользователь не заполнил параметр Склад, то чтобы тогда отчет выводился по всем складам.  

Пока мне приходиться перед выводом отчета выбирать запросом все склады из БД, и отдавать их на вход СКД, но для этого приходиться выводить СКД программно.. что для такого пустяка кажется неразумным. Может есть способ проще?
8 DrShad
 
12.06.12
16:48
неставь в параметры вирт таблицы
9 suvolod
 
12.06.12
16:49
(6). Делаем реквизит списком значений, а затем в свойствах этого реквизита (как элемента формы) заполняем свойство ТипЗначенияСписка
10 pumbaEO
 
12.06.12
16:50
ВЫБРАТЬ
   ЦеныАТТСрезПоследних.Номенклатура,
   ЦеныАТТСрезПоследних.Склад,
   ЦеныАТТСрезПоследних.Цена
ИЗ
   РегистрСведений.ЦеныАТТ.СрезПоследних(, {(Склад).* КАК Склад}) КАК ЦеныАТТСрезПоследних
11 suvolod
 
12.06.12
16:51
(8)Если не ставить в параметры вирт. таблицы, а поставить в отбор СКД - не совсем кашерно получается, придется запросу всегда выбирать данные по всем складам..

(10) Спасибо :).. Должно получиться
12 suvolod
 
12.06.12
16:52
(10) если не сложно, а что за конструкция такая - {}. Не читал о таком
13 vicof
 
12.06.12
16:58
14 suvolod
 
12.06.12
16:59
(10) нет.. мимо кажется. В такой конструкции (только-что проверил) заполняется по всем складам, конечно. Но отбора по складам уже не сделаешь (в режиме 1С:Предприятие такого параметра просто нет)
15 DrShad
 
12.06.12
17:01
(9)я это делаю через отборы построителя или СКД
16 pumbaEO
 
12.06.12
17:04
(14) у меня отбирается http://www.screencast.com/t/OoTepW058I6j
17 pumbaEO
 
12.06.12
17:05
(15) +1 , СКД предпочтительней для управляемых форм.
18 suvolod
 
12.06.12
17:16
чуть попозже отпишусь, что-то пока не могу разобраться с твоим примером.
19 ILM
 
гуру
12.06.12
17:21
Повите )))

ГДЕ
 (&Склад = Неопределено) ИЛИ (Склад = &Склад)
20 suvolod
 
12.06.12
17:26
Несколько раз просмотрел твой видеоурок, и понял следующее:
если обращаться к твоему исходному примеру (10), то это фактически аналогично простому запросу вообще без параметров

ВЫБРАТЬ
   ЦеныАТТСрезПоследних.Номенклатура,
   ЦеныАТТСрезПоследних.Склад,
   ЦеныАТТСрезПоследних.Цена
ИЗ
   РегистрСведений.ЦеныАТТ.СрезПоследних() КАК ЦеныАТТСрезПоследних

... т.е. запросом выбираются все склады, и затем уже на уровне СКД (отбором) отсеиваются ненужные записи, если этот отбор включит пользователь. Я же хотел отсеить ненужные записи еще на этапе формирования запроса (а не после, уже на уровне самой СКД)

(19). Спасибо :). Сейчас попробую...
21 suvolod
 
12.06.12
18:01
Получилось, и даже удалось засунуть в виртуальную таблицу.

ВЫБРАТЬ
   ЦеныАТТСрезПоследних.Номенклатура,
   ЦеныАТТСрезПоследних.Склад,
   ЦеныАТТСрезПоследних.Цена
ИЗ
   РегистрСведений.ЦеныАТТ.СрезПоследних(
           ,
           ВЫБОР
               КОГДА &Склад = НЕОПРЕДЕЛЕНО
                   ТОГДА Склад В
                           (ВЫБРАТЬ
                               Склады.Ссылка
                           ИЗ
                               Справочник.Склады КАК Склады)
               ИНАЧЕ Склад = &Склад
           КОНЕЦ) КАК ЦеныАТТСрезПоследних

Вопрос сразу: а конструкцию (ВЫБРАТЬ Склады.Ссылка из Справочник.Склады КАК Склады) как-то можно покороче написать? А то слишком громоздкий код получается ...
22 ILM
 
гуру
12.06.12
18:17
(21) Конечно ))
Вместо

Склад В (ВЫБРАТЬ
                               Склады.Ссылка
                           ИЗ
                               Справочник.Склады КАК Склады)


Напишите

ИСТИНА

)))
23 suvolod
 
12.06.12
18:37
Черт, какой маленький и красивый запрос получился :). Обязательно в свою базу знаний добавлю.

Но появился еще вопрос. Уже точно последний. Когда в режиме предприятия пытаешься указать нужный склад в качестве настроек пользователя, то сперва появляется список выбора "Выбор типа данных":

Склады(места хранения)
Поле компоновки данных

Как мне указать, что "Поле компоновки данных" меня не интересует. Т.е. чтобы в подборе сразу можно было выбирать склад?

Смотрел в параметрах СКД - там напротив склада стоит Тип "СправочникСсылка.Склады". Но все-равно в режиме предприятия "цепляется" ненужный мне вариант подбора "Поле компоновки данных"
24 ILM
 
гуру
12.06.12
19:06
Проверьте тип поля в параметрах СКД. Иногда достаточно очистить тип. Сохранить СКД и задать тип параметра заново.
25 suvolod
 
12.06.12
19:23
нет.. не то. Вроде стало немного понятнее.

Для того, чтобы сработал код из (21), мне приходиться при конфигурировании на закладке Параметры взводить галку Склад, оставляя само значение склада пустым (иначе формирование отчета заканчивается ошибкой) "Не задано значение параметра &Склад). После этого в режиме предприятия и начинает вылезать диалог "Выбор типа данных". Самое плохое, что выбрать (и сохранить)сразу в конфигураторе в качестве склада хотя-бы Справочник.Склады.ПустаяСсылка не получается (вариант выбора склада даже предлагается).
26 ILM
 
гуру
12.06.12
19:25
Можно же проверять не только на "Неопределено", но и  на "ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)"
27 suvolod
 
12.06.12
19:33
Это я уже пробовал использовать. Но чтобы такой вариант заработал при открытии сразу при открытии отчета, надо каким-то образом в конфигураторе в параметре Склад сохранить пустую ссылку. А у меня в конфигураторе диалог "Выбор типа данных" предлагает только

Поле компоновки данных
Предопределенное значение компоновки данных

а вариант выбора Склады(места хранения) появляется уже только в режиме предприятия. Получается, в конфигураторе этому параметру я никак не могу присвоить ссылку на Справочник.Склады.ПустаяСсылка
28 ILM
 
гуру
12.06.12
19:37
задайте тип поля изначение в параметрах схемы скд.
29 ILM
 
гуру
12.06.12
19:39
счас точно 1С не буду загружать... Может завтра)))
30 suvolod
 
12.06.12
19:44
попробовал.. не получилось. Как в воду глядел, я уже файл на файлообменник выложил. Вот: http://ifolder.ru/31059260
31 suvolod
 
12.06.12
19:44
может завтра посмотришь :)
32 suvolod
 
12.06.12
19:46
На самом деле я один способ знаю. Гружу Отчет в режиме предприятия, выбираю там в параметрах пустой склад. Затем эту схему выгружаю в xml и загружаю уже под конфигуратором. В итоге в параметре прописывается Справочник.Склад.ПустаяСсылка. И все работает. Но может есть проще способ.. без этих промежуточных выгрузок/загрузок
33 Никола_
Питерский
 
12.06.12
19:57
(11) Вообще-то СКД умная и сама сделает все как надо ! По этому не обязательно использавать параметры вирт. таб. !
34 suvolod
 
12.06.12
20:13
(33)эх, не читал ты про оптимизацию. Иначе бы знал, что без использования параметров в вирт. таблицах сначала запросом выберутся абсолютно все записи по регистру,  и только потом будут отсеиваться ненужные на уровне СКД. С использованием же параметров все левые записи будут не попадут в выборку еще на уровне запроса. И отработает такой вариант гораздо быстрее. Для моей задачи, возможно, это пока не так актуально. Но я пытаюсь писать правильно всегда.
35 0xFFFFFF
 
12.06.12
20:22
(34) :) это ты не читал про СКД.
Вся прелесть СКД как раз в том, что она сама накладывает параметры на виртуальные таблицы. И переформировывает текст запроса перед тем, как его отправить на сервер.
36 0xFFFFFF
 
12.06.12
20:34
А ну и собственно фильтр должен быть в фигурных скобках.
37 experimentator76
 
12.06.12
23:11
(35) дада надо не мешать СКД работать)