Имя: Пароль:
1C
1С v8
Блокировка кнопки Загрузить
,
0 amadeus2010
 
18.06.12
08:47
Доброе утро, помогите пожалуйста разобраться с таким вопросом.Имеется обработка в которой товар располагается в виде дерева заказов.Сначала идет регион, номер заказа,номенклатура. Требуется чтобы если курсор стоит на номенклатуре,то при нажатии кнопки загрузить не происходило никого действия,т.е конопка Загрузить не срабатывала.
1 butterbean
 
18.06.12
08:48
и где вопрос??
2 chelentano
 
18.06.12
08:50
(0) хорошо, делай
3 vah1
 
18.06.12
09:02
Ну так эта... сходи ЛКМ словай. Ну и Enter до кучи
4 vah1
 
18.06.12
09:02
оп: сломай
5 vah1
 
18.06.12
09:04
а то зае... уже
6 amadeus2010
 
18.06.12
09:05
(1) как сделать так чтобы в ДеревеЗаказов тип ДеревоЗначений сделать проверку что если текущаястрока=строка.Номенклатура кнопка Загрузить не производила никаких действий?
7 kosts
 
18.06.12
09:11
(6)
Если ЭлементыФормы.ДеревоЗначений1.текущаястрока.Номенклатура = строка.Номенклатура Тогда
   Возврат; //чтобы в ДеревеЗаказов тип ДеревоЗначений сделать проверку что если текущаястрока=строка.Номенклатура кнопка Загрузить не производила никаких действий?
КонецЕсли
8 amadeus2010
 
18.06.12
09:31
и еще вопрос, эту проверку мне надо добавить в процедуру при активизации строки или я могу добавить ее в в процедуру кнопкаЗагрузить?
9 kosts
 
18.06.12
09:32
(8) А подумать?
10 Diose
 
18.06.12
09:39
:)
11 amadeus2010
 
18.06.12
09:41
я так думаю что эту проверку надо добавить в процедуру кнопкаЗагрузить
12 kosts
 
18.06.12
09:43
(11) Логично в принципе.
13 kosts
 
18.06.12
09:48
(11) Но если тебе именно нужно заблокировать кнопку, что бы ее нельзя было нажать совсем.
То тогда так:
ЭлементыФорма.Кнопка.Доступность = Ложь;
(или если кнопка на панели)
ЭлементыФорма.ОсновныеДействияФормы1.Кнопки.Доступность = Ложь;



Применяю подход с возвратом (с выдачей описания проблемы пользователю), если ситуация для пользователя достаточно редкая.
Или с блокировкой, если ситуация частая.
14 amadeus2010
 
18.06.12
09:53
я сделал такую проверку
//////////////////////////////////////////////////////////////
Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока=Строка.Номенклатура тогда
       Возврат;
       
       КонецЕсли;
///////////////////////////////////////////////////////////////

добавил ее в процедуру конопкаЗагрузить,но номенклатура все равно загрузилась когда я поставил курсор на нее.Мне надо чтобы если пользователь случайно поставил курсор на строку номенклатура то кнопка Загрузить не загружала тот товар на котором стоит курсор,т.е текущую строку. Кнопка на панели и мне подойдет 2-й вариант
15 kosts
 
18.06.12
09:59
(14) Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока<Тут ошибка>=Строка.Номенклатура тогда
16 amadeus2010
 
18.06.12
10:05
(14) т.е я должен указать
///////////////////////////////////////////////////////////////////////////// Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока.Номенклатура=Строка.Номенклатура
тогда
ЭлементыФормы.КоманднаяПанель5.Кнопки.Загрузить1.Доступность=Ложь;
КонецЕсли;
///////////////////////////////////////////////////////////////////////////
17 kosts
 
18.06.12
10:06
(16) Ну примерно так
18 kosts
 
18.06.12
10:07
(16) Только в истину еще где-то нужно возвести, в иначе например.
19 amadeus2010
 
18.06.12
10:11
я сейчас проверил этот кусок кода в обработке.При установки курсора на наименование номенклатуры при нажатии кнопки Загрузить товар загружается в табличное поле из дерева заказов и командная панель становится неактивой, а мне надо чтобы наименование номенклатуры не загружалось в табличную часть
20 kosts
 
18.06.12
10:17
(19) А, ну имя колонки смотри, так вроде

Если ЭлементыФормы.ДеревоЗаказов.ТекущаяКолонка.Имя="Номенклатура" тогда
21 kosts
 
18.06.12
10:25
(19) Описывай свои вопросы сразу точнее, а то двусмысленно получилось - то ли "Блокировка кнопки Загрузить ", то ли "Загрузить не срабатывала"; и "курсор стоит на номенклатуре" - не следует, что курсор стоит в колонке номенклатура.
22 amadeus2010
 
18.06.12
10:42
извиняюсь за неточный вопрос, у меня есть обработка в Дереве Значений которой имеются колонки регион, заказ,номенклатура внутри которой есть наименование товаров.Так вот задача состоит в том чтобы если курсор стоит на наименовании товара, тогда кнопка загрузить не должна загружать этот товар в табличную часть.
23 kosts
 
18.06.12
10:56
(22) Ну у тебя уже все есть, ничего нового не могу добавить
24 amadeus2010
 
18.06.12
11:09
если я выложу весь код с моими изменениями вы можете посмотреть все ли я сделал правильно, я сейчас заменил блокировку кнопки на Возврат и у меня не загружается номенклатура если курсор стоит на № заказа или регион
/////////////////////////////////////////////////////////////////
Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока.Номенклатура=Строка.Номенклатура тогда
       Возврат;
Иначе
ТаблицаТоваров = ДеревоЗаказовПолучитьТаблицуТоваровизТекущейСтроки(Строка);
   ТаблицаТоваровОставитьТолькоТоварыПодходящиеДляРейса(ТаблицаТоваров,МТекущийРейс);
   ТекущийРейсДобавитьТаблицуТоваров(ТаблицаТоваров);
       КонецЕсли;
////////////////////////////////////////////////////////////////////////
Вот весь код кнопкиЗагрузить
////////////////////////////////////////////////////////////////////////
Процедура КоманднаяПанель5Загрузить(Кнопка, Строка = Неопределено)    
   
   Если Строка = Неопределено Тогда
       Строка = ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока;
   КонецЕсли;
   

       
   Если МТекущийРейс.Ссылка.Пустая() Тогда Возврат КОнецЕсли;
   
   Запрос=Новый Запрос;

   Если МНомерДогруза<>0 Тогда
       ФильтрДогруза=" РейсТовары.НомерДогруза = &НомерДогруза И ";
       Запрос.УстановитьПараметр("НомерДогруза", МНомерДогруза);
   Иначе
       ФильтрДогруза="";
   КонецЕсли;


   Запрос.Текст=
   "ВЫБРАТЬ
   |    РейсТовары.Ссылка
   |ИЗ
   |    Документ.Рейс.Товары КАК РейсТовары
   |ГДЕ "+ФильтрДогруза+"
   |    РейсТовары.Накладная.Ссылка <> Значение(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
   |    И РейсТовары.Ссылка = &Рейс";
   
   Запрос.УстановитьПараметр("Рейс", МТекущийРейс.Ссылка);
   НакладныеПоТекРейсуИДогрузу=Запрос.Выполнить().Выгрузить();
   Если МТекущийРейс.Товары.Количество() <> 0 и НакладныеПоТекРейсуИДогрузу.Количество()<>0 Тогда //МТекущийРейс.Товары[0].Накладная.Пустая() = ЛОЖЬ Тогда
       Предупреждение("Менять состав рейса можно только в случае, если по нему не созданы накладные");
       Возврат;
   КонецЕсли;
//+Начало    
Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока.Номенклатура=Строка.Номенклатура тогда
       Возврат;
       Иначе
   ТаблицаТоваров = ДеревоЗаказовПолучитьТаблицуТоваровизТекущейСтроки(Строка);
   ТаблицаТоваровОставитьТолькоТоварыПодходящиеДляРейса(ТаблицаТоваров,МТекущийРейс);
   ТекущийРейсДобавитьТаблицуТоваров(ТаблицаТоваров);
       КонецЕсли;//-Конец
   
Если МТекущийРейс.Модифицированность() Тогда
       МТекущийРейс.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
       Если КонтрольЗагрузки ИЛИ КонтрольОстатков Тогда
           КоманднаяПанель3Обновить("", Истина);
       Иначе    
       
           Если Строка <> Неопределено Тогда
               
               СтруктураПоиска = Новый Структура;
               СтруктураПоиска.Вставить("Регион",Строка.Регион);
               СтруктураПоиска.Вставить("Контрагент", Строка.Контрагент);
               СтруктураПоиска.Вставить("Заказ" , Строка.Заказ);
               СтруктураПоиска.Вставить("Номенклатура", Строка.Номенклатура);
               
               ДеревоЗаказовУдалитьСтрокуРекурсивно(Строка, ТаблицаТоваров);
               ДеревоЗаказовНайтиТекущуюСтроку(ДеревоЗаказов,СтруктураПоиска);
               
           КонецЕсли;
       КонецЕсли;
       
       КоманднаяПанель4Обновить("");
   КонецЕсли
   
КонецПроцедуры
25 kosts
 
18.06.12
12:35
(24)

В твоем коде
Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока.Номенклатура=<<Строка>>.Номенклатура тогда

Чему равна "Строка", а она равна "ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока", т.е.

Если ОдинОдин равен ОдинОдин, то ничего не делать - логика железная.
Так чему у тебя равен параметр процедуры "Строка", может быть тут нужна строка другого табличного поля?


> курсор стоит на наименовании товара, тогда кнопка загрузить не должна загружать этот товар в табличную часть.
Т.е. При загрузке нужно пропустить всего одну строку на которой стоит курсор, а все остальные загрузить?
26 amadeus2010
 
18.06.12
13:11
нет товар можно загрузить если курсор стоит на Колонке регион или Заказ,чтобы пользователь загружал все товары из списка а не одиночный товар.
В этой части кода Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока.Номенклатура=<<Строка>>.Номенклатура я пытался проверить что если курсор стоит на Номенклатура то  при нажатии кнопки Загрузить не должно происходить никаких действий.
27 kosts
 
18.06.12
13:21
(26) А ну то есть если курсор стоит в дереве на 3-м уровне где перечислены конкретные товары, то ничего не делать?
28 amadeus2010
 
18.06.12
13:35
ну да точно.Только пока я никак не соображу как это можно реализовать.Т.е я понимаю что д.б как так Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока=Строка.Номенклатура где строка=ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока
29 kosts
 
18.06.12
13:41
(28) С одной стороны всегда можно проверить на то, что в ячейке заполнена номенклатура. В вышестоящих же строках она же не заполнена. Т.е.

Если значениеЗаполнено(ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока.Номенклатура) Тогда
   Возврат;
КонецЕсли;


С другой стороны это искусственное ограничение, пользователи будут страдать и придется им объяснять, что "поставьте курсор на эту строку, а на эту не ставьте", а оно тебе нужно, каждому объяснять.
30 amadeus2010
 
18.06.12
14:30
оно то мне не надо просто поступило распоряжение по которому пользователи могут нажать на кнопку загрузить только если текущая строка= регион или заказ и номенклатура должна загрузиться целиком а не поштучно
31 amadeus2010
 
18.06.12
14:38
мне не надо проверять строку Номенклатура на заполнение товарами, а просто поставить проверку на местоположение курсора, если он на номенклатура,то кнопка Загрузить не действует
32 kosts
 
18.06.12
15:32
(30) Просто если стоим на номенклатуре, то она же принадлежит какому то документу, ну вот и загружать целиком этот документ.

(31) Не пойму в чем проблема, дерево такое?

|Регион  |номера заказов   |Номенклатура
|регион1 |Пусто                |Пусто
|регион1 |номер заказа 31  |Пусто
|регион1 |номер заказа 31  |номенклатура 1   <- Если стоим на строке с номенклатурой, то значение тут заполнено, почему не подходит?
|регион1 |номер заказа 31  |номенклатура 2
|регион1 |номер заказа 31  |номенклатура 3
33 amadeus2010
 
18.06.12
15:44
Не у меня так
Регион,Заказ,Номенклатура
20
2110
Лимонад 1,5л
Пепси кола 0,5л.
Список группируется иерархически по регион

У нас может быть несколько таких веток дерева заказа.В любом случае надо сделать проверку на то что если текущая строка=Лимонад,то кнопка загрузить не должна работать, а если текущая строка 20 или 2110 то Загрузить загружает всю номенклатуру что есть в заказе,что она в принципе и делает.Осталось только сделать проверку.
34 kosts
 
18.06.12
17:25
(33) Ну так попробуй, если у тебя все в одну колонку внесено.

Если ЭлементыФормы.Дерево.ТекущаяСтрока.Родитель.Родитель.Родитель = Неопределено и
ЭлементыФормы.Дерево.ТекущаяСтрока.Родитель.Родитель <> Неопределено Тогда
Возврат;
35 del123
 
18.06.12
17:32
если тип значения в колонке = Справочник номенклатуры, то ничего не делать
Условие в свободной форме :)
36 del123
 
18.06.12
17:37
либо
СтрокаДереваЗначений (ValueTreeRow)
Уровень (Level)
Синтаксис:

Уровень()
Возвращаемое значение:

Тип: Число.
Для строки, не имеющей родителя, уровень будет равен 0.
Описание:

Получает уровень строки дерева значений.
37 amadeus2010
 
19.06.12
10:20
(34) этот код не сработал,думаю что надо определить что если строка номенклатура является текущей тогда возврат.Для этого хочу использовать что-то типа поиска если дерево заказов.найти(строка.номенклатура,"номенклатура")=элементыформы.деревозаказов.текущаястрока тогда возврат конецесли;
Возможно ли использование такого варианта в коде?
38 amadeus2010
 
19.06.12
10:49
есть кто-нибудь?
39 del123
 
19.06.12
10:55
Если ЭлементыФормы.Дерево.ТекущаяСтрока.Уровень() = 2 тогда
    возврат;
конецесли;
так попробуй
40 amadeus2010
 
19.06.12
11:41
(39)большое спасибо получилось,при попытке загрузить один товар из списка кнопка Загрузить не работает,только при установке курсора на Регион или Заказ загружается вся номенклатура из списка, как и было изначально задано по условию задачи.Окончательно код выглядит так
///////////////////////////////////////////////
Если ЭлементыФормы.ДеревоЗаказов.ТекущаяСтрока.Уровень() = 3 тогда
               возврат;
       КонецЕсли;
////////////////////////////////////////////////////
Насколько я понял в дереве заказов подчиненные элменты определяются по № уровня?