Имя: Пароль:
1C
1С v8
Помогите решить задачу для подготовки к экзамену 1с специалист
0 Merry_fellow
 
27.03.12
20:45
Доброго времени суток! помогите с задачей по специалисту, платформа 8.2
задача по управляемым формам № 5.11: Необходимо создать  управляемую основную форму документа "Расходная накладная", в которой пользователь сможет осуществлять выбор товаров с помощью специальной формы подбора. Выбор товаров должен осуществляться посредством перетаскивания мышкой нужного элемента из формы подбора в форму документа.
Решение взято отсюда http://chistov.spb.ru/forum/16-1057-1#post.
Однако вопрос, как запретить перетаскивать группу?
проверка  Если Не ЗначениеМассива.ЭтоГруппа  выдает ошибку: поле объекта не обнаружено (ЭтоГруппа)
1 aleks-id
 
27.03.12
20:49
что есть ЗначениеМассива ?
2 Feanor
 
27.03.12
20:49
предлагаю воспользоваться отладчиком
3 Merry_fellow
 
27.03.12
21:03
ЗначениеМассива - это значение типа СправочникСсылка.Номенклатура
4 Feanor
 
27.03.12
21:05
(3) это ты так думаешь, или на самом деле так?
5 Merry_fellow
 
27.03.12
21:07
это в отладчике
6 Feanor
 
27.03.12
21:11
(5) и у него действительно нет поля "ЭтоГруппа"?

а справочник "Номенклатура" иерархический?
7 Merry_fellow
 
27.03.12
21:19
&НаКлиенте
Процедура ТоварыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
   
СтандартнаяОбработка = Ложь;
   
Для каждого ЗначениеМассива Из ПараметрыПеретаскивания.Значение Цикл
  Если ТипЗнч(ЗначениеМассива) = Тип("СправочникСсылка.Номенклатура") Тогда
     Если Не ЗначениеМассива.ЭтоГруппа Тогда
         НоваяСтрока    = Объект.Товары.Добавить();        
         НоваяСтрока.Номенклатура = ЗначениеМассива;
         НоваяСтрока.Количество   = 1;
     КонецЕсли;    
  КонецЕсли;
КонецЦикла;        
КонецПроцедуры
8 Merry_fellow
 
27.03.12
21:20
Справочник номенклатура иерархический.
код процедуры представлен выше
9 Feanor
 
27.03.12
21:21
(7) в тонком клиенте нельзя обращаться к свойствам объектов
10 DUDE
 
27.03.12
21:23
(5) если ты это проверяешь на тонком клиенте, то у ссылки не будет доступа к ее свойствам.
11 DUDE
 
27.03.12
21:26
либо выполнять процедуру обработчика на сервере либо какой-то обходной маневр придумывать, например, в параметрахперетаскивания чтоб передавать и свойство ЭтаГруппа (тут надо почитать хелп)
12 Merry_fellow
 
27.03.12
21:27
ясно, спасибо большое за помощь!
13 Feanor
 
27.03.12
21:29
(12) заходите ещё))

блин, про фотку забыли((
14 sanja26
 
27.03.12
21:31
(9) К свойствам ссылки можно
15 Merry_fellow
 
27.03.12
21:46
теперь работает, вот окончательный код, если кому интересно) всем спасибо!)



&НаКлиенте
Процедура ТоварыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
   
ДобавитьТовары(ПараметрыПеретаскивания.Значение);
   
КонецПроцедуры

&НаСервере
Процедура ДобавитьТовары(МассивЭлементов)
Для Каждого ЗначениеПеретаскивания Из  МассивЭлементов Цикл
    Если ТипЗнч(ЗначениеПеретаскивания) = Тип("СправочникСсылка.Номенклатура") Тогда
   Если Не ЗначениеПеретаскивания.ЭтоГруппа Тогда
       НовСтр = Объект.Товары.Добавить();
       НовСтр.Номенклатура = ЗначениеПеретаскивания;
       НовСтр.Количество = 1;
   КонецЕсли;  
    КонецЕсли;  
КонецЦикла;  
КонецПроцедуры
16 Ranger_83
 
27.03.12
21:47
можно получить свойства ссылки на стороне клиента ,но не напрямую,а посредством серверной функции.
Например,ПолучитьЗначениеРеквизита("<ИмяРеквизита>",Ссылка)
17 Feanor
 
27.03.12
21:49
(15) лучше немного не так сделать:

оставить в целом процедуру без изменения, только переписать одну строку: "Если Не ЗначениеМассива.ЭтоГруппа Тогда" > "Если Не ЭтоГруппаНоменклатуры(ЗначениеМассива) Тогда"

ну и процедурку добавить

&НаСервереБезКонтектста
Процедура ЭтоГруппаНоменклатуры(Номенклатура)
 Возврат Номенклатура.ЭтоГруппа;
КонецПроцедуры
18 GROOVY
 
27.03.12
22:22
Перетаскивание <> подбор. Задачу нужно решать с использованием временного хранилища.
19 Feanor
 
27.03.12
22:26
(18) дак вроде по условию сказано, что нужно использовать перетаскивание
20 GROOVY
 
27.03.12
22:45
(19) Точно, стормозил, надо меньше работать.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший