Имя: Пароль:
1C
1С v8
Мой первый запрос
,
0 tolok_d
 
18.02.13
21:51
Здравствуйте уважаемые. Вот пытаюсь осваивать понемногу запросы... знаю что поздно, но надо же учиться. Ниже приведен кусок кода в теле модуля формы заказа покупателя:

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

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

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

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       Если РольДоступна(Метаданные.Роли.МенеджерПоПродажам) И ВыборкаДетальныеЗаписи.Проведен = Истина Тогда
           //Тут нужно установить доступность всей формы в занчение Ложь
       КонецЕсли;
   КонецЦикла;

Подскажите почему не находит реализацию? хотя уверен что реализация есть. И, Если не сложно, подскажите как запретить редактирование сразу для всех элементов формы, а не по одному. Заранее спасибо)
1 Aleksey
 
18.02.13
22:01
А кто сказал что тут нужен запрос?
2 Тролль главный
 
18.02.13
22:02
1. возможно реализация имеет ссылки на заказ в табличной части, а не в шапке (то есть нужно использовать не Документ.РеализацияТоваровУслуг, а что-то вроде Документ.РеализацияТоваровУслуг.Товары), но если связи вообще нет, то гораздо хуже - на нет и суда нет

2. ЭтаФорма.ТолькоПросмотр = Истина;
3 MrStomak
 
18.02.13
22:02
Если это новый объект, тот он еще не записан и ссылка на него пустая. Проведен он или нет надо проверять через ЭтотОбъект.Проведен, а не через запрос непонятно куда. Запрещать редактирование в этом случае нужно сразу в настройках ролей, там есть право "редактировать проведенные" или что-то типа того.
4 MrStomak
 
18.02.13
22:04
а, там опрашивается сделка у реализации, тогда написанное в (3) неверно
5 Очкарик
 
18.02.13
22:11
Лушче писать так:
РеализацияТоваровУслуг.Сделка.Ссылка.Ссылка.Ссылка = &Ссылка

Так надежнее будет, инфа 100%
6 toxicoff
 
18.02.13
22:26
(4) правильно говорит, только проверить проще через метод "ЭтоНовый()", если документ только что создан вернет истину..
7 toxicoff
 
18.02.13
22:27
http://programmist1s.ru/opisanie-yazyika-zaprosa-1s/
может пригодится - статейку про запросы написал
8 GANR
 
18.02.13
23:38
(0) и вот это РольДоступна(Метаданные.Роли.МенеджерПоПродажам) убери из цикла - быстродействие снижает
9 GANR
 
18.02.13
23:41
Условие из цикла надо убрать (8) - проверять до цикла, а проведен = Истина - внутри запроса
10 tolok_d
 
19.02.13
12:01
(8) дельный совет. Исправляю
11 tolok_d
 
19.02.13
12:03
(1) а что здесь надо? здесь лучьше не через запрос? Тогда вопрос, где можно почитать про случаи когда надо запрос, а когда нет. Или, если Вам не сложно, расскажите.
12 tolok_d
 
19.02.13
12:04
(2) проверил. Это вообще реквизит док-а. Или я не так Вас понял?
13 tolok_d
 
19.02.13
12:06
(2) а по поводу второго пункта - огромное спасибо
14 salvator
 
19.02.13
12:08
(11) У тебя ссылка есть. А ты ее еще раз получаешь. Вопрос: нафига?
15 tolok_d
 
19.02.13
12:10
(3) согласен, но мне главное исключить ситуацию когда по документу уже была сделана реализация, тогда надо запретить редактирование. По новому заказу же не может быть реализации?
16 tolok_d
 
19.02.13
12:11
(14) где? Если она действительно есть, и ее где-то можно взять и понять что это реализация товаров и услуг, то я буду очень Вам благодарен.
17 tolok_d
 
19.02.13
12:12
(5) спасибо. Сейчас попробую. Хотя нигде такого решения не видел
18 tolok_d
 
19.02.13
12:13
(7) очень пригодиться. Спасибо огромное
19 salvator
 
19.02.13
12:14
(16) Ок, думал Сделка - это ТЧ, сорри.
Тогда вопрос: зачем цикл для обхода выборки? Там может быть более 1-го значения?
20 tolok_d
 
19.02.13
12:16
(19) да. Согласен. Спасибо большое.
21 tolok_d
 
19.02.13
12:20
Благодаря вашим подсказкам, код немножко оптимизировался:

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

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

   ВыборкаДетальныеЗаписи = Результат.Выбрать();
   
   Если РольДоступна(Метаданные.Роли.МенеджерПоПродажам) Тогда
       Если ВыборкаДетальныеЗаписи.Ссылка.Проведен = Истина Тогда
           ЭтаФорма.ТолькоПросмотр = Истина;
       КонецЕсли;
   КонецЕсли;
 
Но даже когда я убрал условие поиска по ссылке, в выюорке появляется один элемент с значением Неопределено. Что не так? Подскажите пожалуйста.
22 salvator
 
19.02.13
12:34
(21) А условие зачем убрал из запроса? Убери только поле .Ссылка из него. Сделка и так ссылка уже, незачем масло масленое.
Далее. Нужно спозиционироваться на элементе выборки. Для этого напиши
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
  Если ВыборкаДетальныеЗаписи.Ссылка.Проведен Тогда
     ...
23 kimba
 
19.02.13
13:15
Я так понял тебе достаточно этого будет

   Если РольДоступна(Метаданные.Роли.МенеджерПоПродажам) И ЭтотОбъект.Проведен Тогда
       ЭтаФорма.ТолькоПросмотр = Истина;
   КонецЕсли;
24 Schwonder
 
19.02.13
16:04
"Выбрать * Из РегистрНакопления.Продажи КАК ПродажиНомерРаз Соединение РегистрНакопления.Продажи КАК ПродажиНомерДва По Истина". Вот так ЗБС.
25 Schwonder
 
19.02.13
16:05
Чё стисняться то? XD