Имя: Пароль:
1C
 
Получение ссылки на объект из запроса
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
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
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) У тебя одна табличная часть в документе?
Табличная часть (части) правильно связаны с табличным полем (полями) на форме?
2 + 2 = 3.9999999999999999999999999999999...