|
Получение ссылки на объект из запроса | ☑ | ||
|---|---|---|---|---|
|
0
stinger1988
02.09.10
✎
19:31
|
Как получить ссылку на объект из запроса?
|
|||
|
1
asady
02.09.10
✎
19:35
|
где ты в запросе объект видел?
|
|||
|
2
stinger1988
02.09.10
✎
19:47
|
Ну когда при выборе выдается допустим справочник но не все элементы справочника.
|
|||
|
3
kosts
02.09.10
✎
19:48
|
(2) Ничего не понятно.
Напиши код |
|||
|
4
stinger1988
02.09.10
✎
20:02
|
Запрос = Новый Запрос;
Запрос.Текст ="Выбрать * Поместить ТЧ Из &ТЧ КАК ТЧ; |Выбрать ТМЦ1.Наимевание КАК ТМЦ1 |ИЗ | Справочник.ТМЦ КАК ТМЦ1 |Где не (Ссылка в (Выбрать ТМЦ из ТЧ))"; Запрос.УстановитьПараметр("ТЧ", ТабличнаяЧасть1); СЗ=Новый СписокЗначений; СЗ.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ТМЦ1")); Получается как статические значения, хотелось бы как ссылку на справочник ТМЦ только не со всеми значениями справочника. |
|||
|
5
le_
02.09.10
✎
20:04
|
Здесь ответ:
v8: Выбор из результата запроса |
|||
|
6
Rie
02.09.10
✎
20:04
|
(4) Что есть "статические значения" - непонятно. Почему ВЫБРАТЬ ТМЦ1.Наименование, а не ВЫБРАТЬ ТМЦ1.Ссылка - тоже непонятно.
Что такое "ссылка на справочник ТМЦ, только не со всеми значениями справочника" - оставляем в качестве вопроса для очередного "сражения экстрасенсов" или где там телетяпы совернуются. |
|||
|
7
rs_trade
02.09.10
✎
20:18
|
(4) жесть какая... автор, лучше напиши вместо кода что тебе надо. изначально надо, а не про ссылку из запроса
|
|||
|
8
stinger1988
02.09.10
✎
20:19
|
(7) В документе выбираются товары. Надо сделать так чтобы при выборе те товары которые уже есть в документе не отображались
|
|||
|
9
kosts
02.09.10
✎
20:20
|
(8) Можно через отбор отсечь.
В типовых сделано по моему мнению удобнее, уже выбранный элемент справочника выделен серым цветом. |
|||
|
10
Pashkaa
02.09.10
✎
20:22
|
(9) > В типовых сделано по моему мнению удобнее, уже выбранный элемент справочника выделен серым цветом.
А в типовых это правда сделано, а можно пример? В какой форме и в каких случаях |
|||
|
11
stinger1988
02.09.10
✎
20:22
|
(9)Что такое отбор?
|
|||
|
12
kosts
02.09.10
✎
20:23
|
(10) В ЗУП при выборе сотрудника. Иногда так, не всегда.
|
|||
|
13
Rie
02.09.10
✎
20:23
|
(11) А документацию почитать к той софтине, над которой ты сейчас издеваешься, - не судьба?
|
|||
|
14
kosts
02.09.10
✎
20:23
|
+ (12) Да и не сложно это делается...
|
|||
|
15
rs_trade
02.09.10
✎
20:24
|
(11) это фильтр для списков
|
|||
|
16
stinger1988
02.09.10
✎
20:26
|
(12) Что такое ЗУП?
|
|||
|
17
kosts
02.09.10
✎
20:28
|
(11) В твоем возможно поступить следующим образом.
Повесить обработчик на событие выбора для реквизита документа поставить. Самому открыть форму выбора, передать ей список ТМЦ, и в ней уже сделать отбор или подсветить другим цветом. |
|||
|
18
kosts
02.09.10
✎
20:29
|
(16) http://v8.1c.ru/hrm/
|
|||
|
19
Pashkaa
02.09.10
✎
20:30
|
(8) ответ на этот вопрос, примерно так в виде запроса:
ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ (НЕ Номенклатура.Ссылка В ИЕРАРХИИ (ВЫБРАТЬ РеализацияТоваровУслугТовары.Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Ссылка)) если словами то выборка будет содержать всю номенклатуру за исключение номенклатуры из табличной части документа РеализацияТоваровИУслуг ТЧ Товары где Ссылка это ссылка на документ |
|||
|
20
kosts
02.09.10
✎
20:31
|
(19) Видимо все же нужен не запрос, а форма выбора...
|
|||
|
21
Pashkaa
02.09.10
✎
20:34
|
(20) да так то конечно отбор логичнее если не хочет отображать в форме подбора то что уже выбрано. Но тогда пусть учится формулировать мысли задавая вопросы.
|
|||
|
22
stinger1988
02.09.10
✎
21:09
|
(19)
Запрос.Текст ="ВЫБРАТЬ |ТМЦ.Ссылка |ИЗ | Справочник.ТМЦ КАК ТМЦ |ГДЕ | (НЕ ТМЦ.Ссылка В ИЕРАРХИИ |(ВЫБРАТЬ | ТЧ.ТМЦ |ИЗ | Документ.РасходнаяНакладная.ТабличнаяЧасть1 КАК ТЧ |ГДЕ | ТЧ.Ссылка = &Ссылка))"; Запрос.УстановитьПараметр("Ссылка", ЭлементыФормы.ТабличнаяЧасть1); Результат: {Документ.РасходнаяНакладная.Форма.ФормаДокумента(85)}: Ошибка при вызове метода контекста (Выполнить): {(12, 14)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. ТЧ.Ссылка <<?>>= &Ссылка)) СЗ.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ТМЦ1")); |
|||
|
23
stinger1988
02.09.10
✎
21:10
|
(20) Что такое "ФормаВыбора"?
|
|||
|
24
le_
02.09.10
✎
21:20
|
(22)В ИЕРАРХИИ тебе там совершенно ни к чему.
Запрос.УстановитьПараметр("Ссылка", ЗдесьДолжнаБытьСсылкаНаЗаписанныйДокумент); (23) ФормаВыбора - это форма выбора, см. конфигурацию. |
|||
|
25
stinger1988
02.09.10
✎
21:28
|
Какого типа должно быть поле куда возращается результат запроса?
|
|||
|
26
le_
02.09.10
✎
21:31
|
(25) Жмем Ctrl + F1 и читаем:
Запрос.Выполнить (Query.Execute) Синтаксис: Выполнить() Возвращаемое значение: Тип: РезультатЗапроса; Неопределено. Описание: Выполняет запрос к базе данных. В случае, если запросу установлен пакетный запрос, метод последовательно выполнит все запросы из пакета и вернет результат последнего запроса пакета, который не создает и не уничтожает временную таблицу. Если такого запроса нет, то будет возвращен результат исполнения последнего запроса. Результатом исполнения запроса на уничтожение временной таблицы является значение Неопределено. Примечание: При выполнении некорректного запроса в тексте исключения сообщается номер строки, в которой обнаружена ошибка. Пример: Запрос = Новый Запрос("ВЫБРАТЬ | НДФЛДоходы.Ссылка |ИЗ | Справочник.ДоходыНДФЛ КАК НДФЛДоходы | |ГДЕ | (НДФЛДоходы.Предопределенный)"); Результат = Запрос.Выполнить(); |
|||
|
27
le_
02.09.10
✎
21:36
|
+ (26) Подозреваю, что вопрос (25) сформулирован некорректно, тебе скорее всего нужен тип поля для ссылки на элемент справочника ТМЦ.
Так он (тип) такой и будет - "СправочникСсылка.ТМЦ". |
|||
|
28
stinger1988
02.09.10
✎
21:37
|
Ну тогда вообще ничего не понимаю: сделал тип "СправочникСсылка.ТМЦ", а в поле все равно все подряд записи из справочника.
|
|||
|
29
le_
02.09.10
✎
21:38
|
Действительно, непонятно.
Как в одном поле могут быть все подряд записи из справочника?.. |
|||
|
30
stinger1988
02.09.10
✎
21:39
|
Может не поля а записи
|
|||
|
31
kosts
02.09.10
✎
21:41
|
Что то в этом роде
Процедура ТабличнаяЧасть1Реквизит1НачалоВыбора(Элемент, СтандартнаяОбработка) форма = справочники.ВидТрат.ПолучитьФорму("ФормаВыбора", ЭлементыФормы.ТабличнаяЧасть1); форма.СписокЭлементовКоторыеНужноСкрыть = НашСписокЭлементовКоторыеНужноСкрыть; форма.Открыть(); СтандартнаяОбработка = Ложь; КонецПроцедуры Процедура ТабличнаяЧасть1ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) //ТабличнаяЧасть1.Добавить(); КонецПроцедуры |
|||
|
32
le_
02.09.10
✎
21:44
|
stinger1988, объясни по человечески, что ты делаешь и что хочешь получить )
Вот прямо по шагам. 1. Хочу, чтобы... 2. А когда нажимаю на... хочу, чтобы... 3. А при выборе того-то в таком-то поле хочу, чтобы... А делаю вот это: 1. Добавил на форму реквизит 2. Установил у него такой-то тип 3. Создал такой-то обработчик такого-то события... А то ты второй день уже эту задачу решаешь и похоже, еще далек от конечной цели... |
|||
|
33
kosts
02.09.10
✎
21:44
|
Так будет лучше
Процедура ТабличнаяЧасть1Реквизит1НачалоВыбора(Элемент, СтандартнаяОбработка) форма = справочники.ВидТрат.ПолучитьФорму("ФормаВыбора", ЭлементыФормы.ТабличнаяЧасть); форма.СписокЭлементовКоторыеНужноСкрыть = НашСписокЭлементовКоторыеНужноСкрыть; форма.ЗакрыватьПриВыборе = Ложь; форма.РежимВыбора = Истина; форма.Открыть(); СтандартнаяОбработка = Ложь; КонецПроцедуры |
|||
|
34
kosts
02.09.10
✎
21:47
|
+ к (32) И напиши в целом задачу тоже. Интересно, и поможет тоже.
|
|||
|
35
stinger1988
02.09.10
✎
22:44
|
1.В документе выбираются покупаемые товары, список которых храниться в Справочнике "ТМЦ". Покупаемые товары выводятся в табличной части.
2.Я хочу чтобы при нажатии на ячейку выдавался список товаров которые есть в справочнике за исключением тех которые уже выбраны и есть в табличной части документа. 3.После выбора товара в табличную часть документа из справочника должны заноситься название товара цена 1.Я поставил добавил на форму табличное поле. 2.Колонке таблицы тип значения "СправочникСсылка.ТМЦ". 3.Создал событие ТабличнаяЧасть1Колонка1НачалоВыбораИзСписка. //Запрос1=Новый Запрос; //Запрос1.Текст="ВЫБРАТЬ Наименование ИЗ Справочник.ТМЦ"; Запрос = Новый Запрос; Запрос.Текст ="ВЫБРАТЬ ТМЦ |ИЗ | Ссылка))"; Запрос.УстановитьПараметр("Ссылка", ЭлементыФормы.ТабличнаяЧасть1); СЗ=Новый СписокЗначений; СЗ.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ТМЦ1")); Элемент.СписокВыбора=СЗ; форма = справочники.ВидТрат.ПолучитьФорму("ФормаВыбора", ЭлементыФормы.ТабличнаяЧасть); форма.СписокЭлементовКоторыеНужноСкрыть = СЗ; форма.ЗакрыватьПриВыборе = Ложь; форма.РежимВыбора = Истина; форма.Открыть(); СтандартнаяОбработка = Ложь; |
|||
|
36
stinger1988
02.09.10
✎
22:45
|
Все равно выводит все товары со справочника
|
|||
|
37
le_
02.09.10
✎
23:43
|
Что касается пункта 2.
Можно сделать так: Процедура ТабЧастьТМЦНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Фрм = Справочники.ТМЦ.ПолучитьФормуВыбора(); Фрм.ВладелецФормы = ЭлементыФормы.ТабЧасть; СписокТехЧтоУжеЕсть = Новый СписокЗначений; СписокТехЧтоУжеЕсть.ЗагрузитьЗначения(ТабЧасть.ВыгрузитьКолонку("ТМЦ")); Фрм.Отбор.Ссылка.ВидСравнения = ВидСравнения.НеВСписке; Фрм.Отбор.Ссылка.Значение = СписокТехЧтоУжеЕсть; Фрм.Отбор.Ссылка.Использование = Истина; Фрм.РежимВыбора = Истина; Элемент.Значение = Фрм.ОткрытьМодально(); КонецПроцедуры Что касается пункта 3. Используй обработчик ПриИзменении(). Будет примерно так: Процедура ТабЧастьТМЦПриИзменении(Элемент) Если Элемент.Значение <> Справочники.ТМЦ.ПустаяСсылка() Тогда ЭлементыФормы.ТабЧасть.ТекущиеДанные.Цена = Элемент.Значение.Цена;//это если цена как реквизит есть в ТМЦ //или так: //ЭлементыФормы.ТабЧасть.ТекущиеДанные.Цена = ПолучитьЦенуТМЦ(Элемент.Значение);//функцию необходимо написать (зависит от того, где хранятся цены) КонецЕсли; КонецПроцедуры |
|||
|
38
stinger1988
03.09.10
✎
00:24
|
Спасибо. На процедуру ТабЧастьТМЦПриИзменении не реагирует.
|
|||
|
39
le_
03.09.10
✎
00:30
|
(38) А в свойствах этой колонки ты ее прописал?
|
|||
|
40
stinger1988
03.09.10
✎
00:32
|
Прописал
|
|||
|
41
le_
03.09.10
✎
00:33
|
Значит, чего-то не того прописал )
Либо внутри самой процедуры ошибка. |
|||
|
42
stinger1988
03.09.10
✎
00:36
|
Процедура ТабличнаяЧасть1ТМЦПриИзменении(Элемент)
Сообщить("аа"); КонецПроцедуры Даже это не работает |
|||
|
43
le_
03.09.10
✎
00:44
|
Ну, сделай так:
Процедура ТабЧастьТМЦНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Фрм = Справочники.ТМЦ.ПолучитьФормуВыбора(); Фрм.ВладелецФормы = ЭлементыФормы.ТабЧасть; СписокТехЧтоУжеЕсть = Новый СписокЗначений; СписокТехЧтоУжеЕсть.ЗагрузитьЗначения(ТабЧасть.ВыгрузитьКолонку("ТМЦ")); Фрм.Отбор.Ссылка.ВидСравнения = ВидСравнения.НеВСписке; Фрм.Отбор.Ссылка.Значение = СписокТехЧтоУжеЕсть; Фрм.Отбор.Ссылка.Использование = Истина; Фрм.РежимВыбора = Истина; Элемент.Значение = Фрм.ОткрытьМодально(); Если Элемент.Значение <> Справочники.ТМЦ.ПустаяСсылка() Тогда ЭлементыФормы.ТабЧасть.ТекущиеДанные.Цена = Элемент.Значение.Цена; //или так: //ЭлементыФормы.ТабЧасть.ТекущиеДанные.Цена = ПолучитьЦенуТМЦ(Элемент.Значение);//функцию необходимо написать (зависит от того, где хранятся цены) КонецЕсли; КонецПроцедуры |
|||
|
44
stinger1988
03.09.10
✎
00:51
|
Тоже не работает.
|
|||
|
45
le_
03.09.10
✎
00:53
|
Спать, наверное, уже хочет 1С-ка )
|
|||
|
46
stinger1988
03.09.10
✎
09:12
|
Отлик на событие не работает из-за
СтандартнаяОбработка = Ложь; А если этой строки не будет тоже плохо. И что его делать? |
|||
|
47
le_
03.09.10
✎
09:19
|
Если сделать как в (43) то обработчик ПриИзменении() тебе уже не понадобится.
|
|||
|
48
stinger1988
03.09.10
✎
09:22
|
Все равно не присваивается никакое значение колонке.
|
|||
|
49
stinger1988
03.09.10
✎
09:26
|
Даже
ЭлементыФормы.ТабЧасть.ТекущиеДанные.Цена=44; Не срабатывает |
|||
|
50
le_
03.09.10
✎
10:12
|
Поставь в отладчике точку остановки сюда:
Если Элемент.Значение <> Справочники.ТМЦ.ПустаяСсылка() Тогда И посмотри, чему у тебя Элемент.Значение равно. Потом нажми F11 и посмотри, куда шагнет, попадет ли на строчку: ЭлементыФормы.ТабЧасть.ТекущиеДанные.Цена=44; |
|||
|
51
stinger1988
03.09.10
✎
11:46
|
Элемент равен "Товар2" после F11 попадает в строчку
ЭлементыФормы.ТабЧасть.ТекущиеДанные.Цена=44; ЭлементыФормы.ТабЧасть.ТекущиеДанные.Цена даже в отладчике показывает значение 44 а в таблицу не выводит. |
|||
|
52
stinger1988
03.09.10
✎
12:24
|
Процедура ТабличнаяЧасть1ТМЦНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; Фрм = Справочники.ТМЦ.ПолучитьФормуВыбора(); Фрм.ВладелецФормы = ЭлементыФормы.ТабличнаяЧасть1; СписокТехЧтоУжеЕсть = Новый СписокЗначений; СписокТехЧтоУжеЕсть.ЗагрузитьЗначения(ТабличнаяЧасть1.ВыгрузитьКолонку("ТМЦ")); Фрм.Отбор.Ссылка.ВидСравнения = ВидСравнения.НеВСписке; Фрм.Отбор.Ссылка.Значение = СписокТехЧтоУжеЕсть; Фрм.Отбор.Ссылка.Использование = Истина; Фрм.РежимВыбора = Истина; Элемент.Значение = Фрм.ОткрытьМодально(); Если Фрм.ЗакрыватьПриВыборе Тогда ЭлементыФормы.ТабличнаяЧасть1.ТекущиеДанные.Цена = Элемент.Значение.РасхЦена; Сообщить(ЭлементыФормы.ТабличнаяЧасть1.ТекущиеДанные.Цена); КонецЕсли; КонецПроцедуры |
|||
|
53
le_
03.09.10
✎
12:30
|
(52) А для чего вот это:
Если Фрм.ЗакрыватьПриВыборе Тогда ... ? (51) У тебя одна табличная часть в документе? Табличная часть (части) правильно связаны с табличным полем (полями) на форме? |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |