Имя: Пароль:
1C
1C 7.7
v7: Запрет данных!
0 TwoWorld
 
05.10.11
12:36
Мне нужно чтобы при каком то определенно условии нельзя было добавлять в строку новую номенклатурную позицию: т.е. если остатков нет, то запретить добавлять номенклатуру в строку:
Вот пишу:

Процедура ПриНачалеРедактированияСтроки()
   ЗапретИзмененияНоменклатуры(Контекст);
КонецПроцедуры

Процедура ПриУдаленииСтроки ()
   ЗапретИзмененияНоменклатуры(Контекст);
КонецПроцедуры

Процедура ПриВводеСтроки()

   ЗапретИзмененияНоменклатуры(Контекст);
Если СтатусВозврата() = 0 Тогда
УдалитьСтроку();
КонецЕсли;

КонецПроцедуры

Вот проблема в том, что когда я добавляю новую строку, мне надо чтобы он ее не создавал, если запрет стоит! А в моем коде, он удаляет строку на которой курсор стоит! Как поправить?
1 KRV
 
05.10.11
12:43
Чо?
2 viktor_vv
 
05.10.11
12:43
Убери УдалитьСтроку()
3 KRV
 
05.10.11
12:44
Доступность(<?>)
Синтаксис:
Доступность(<Режим>)
Назначение:
Установка режима редактирования элемента диалога. Возвращает: текущее числовое значение режима редактирования элемента диалога (на момент до исполнения метода).
Параметры:
<Режим> - число: 1 - разрешено редактирование элемента диалога, 0 - запрещено (необязателен).
Замечание:
Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
4 TwoWorld
 
05.10.11
12:44
Процедура ПриВводеСтроки()

   ЗапретИзмененияНоменклатуры(Контекст);
Если СтатусВозврата() = 0 Тогда
УдалитьСтроку();
КонецЕсли;

КонецПроцедуры

Как поправить, чтобы при выборе номенклатуры, если остатков нет запрещал добавлять строку вдокумент?
5 KRV
 
05.10.11
12:46
У тебя номенклатура выбирается в строке?
6 TwoWorld
 
05.10.11
12:47
(5) да
7 TwoWorld
 
05.10.11
12:47
(3) на счет этого у меня вот:
Процедура ПриНачалеРедактированияСтроки()
   ЗапретИзмененияНоменклатуры(Контекст);
КонецПроцедуры
8 TwoWorld
 
05.10.11
12:48
(2) нельзя убрать, он все равно добавит.
9 KRV
 
05.10.11
12:49
Ну так, млять, задумайся: где ты будешь выбирать номенклатуру, как не в той строке, которую ты уже создал?  Телепатировать предлагаешь программе какую следующую номенклатуру будешь выбирать?
10 viktor_vv
 
05.10.11
12:50
Так может тогда проверку повесить в формулу Реквизита номенклатура. А то ПриВводеСтроки() отрабатывает до появления строки в контексте.
11 TwoWorld
 
05.10.11
12:52
Строка добавляется после выбора номенклатуры, если только формулу написать и если не удовлетворяет условию - удалить строку.
12 МастерВопросов
 
05.10.11
12:52
Процедура ПриВводеСтроки()

Если КакиетоТамОстатки=0 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;

КонецПроцедуры
13 viktor_vv
 
05.10.11
12:54
(11) А выбор номенклатуры откуда инициируется ?
14 TwoWorld
 
05.10.11
12:55
изсправочника номенклатура!
15 viktor_vv
 
05.10.11
12:56
(11) Может ты последовательность попутал ? И сначала все-таки добавляется новая строка, а потом происходит выбор. Чето я тебя нифига не помойму. У тебя наверное стоит автовыбор и тебе кажется что сначала выбирается номенклатура, а потом добавляется строка, хотя все с точностью до наоборот.
16 МастерВопросов
 
05.10.11
12:57
(11)
Процедура ПриВводеСтроки()

Если ОстаткиТМЦ.СводныйОстаток(,Номенклатура,,"Количество")=0 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;

КонецПроцедуры
17 viktor_vv
 
05.10.11
12:57
(14) Из справочника он уже выполняется, а я спрашиваю по какому событию открывается справочник для выбора.
18 TwoWorld
 
05.10.11
12:58
(15) да ты прав, сначала строка потом номенклатура
19 МастерВопросов
 
05.10.11
12:58
можешь с НачатьТранзакцию(); поэкспериментировать
20 viktor_vv
 
05.10.11
12:58
(16) Если уж ему так нравятся предопреденные процедуры, то ему скорее всего надо ПриРедактированииНовойСтроки().
21 viktor_vv
 
05.10.11
13:00
(18) Ну так тогда (10). В чем проблема.
22 ZOMI
 
05.10.11
13:01
(0) Почем велик с треугольными колесами брали ?
23 TwoWorld
 
05.10.11
13:01
(16) это да, но у меня стоит условие:
Процедура ПриНачалеРедактированияСтроки()
   ЗапретИзмененияНоменклатуры(Контекст);
КонецПроцедуры

Т.е если я стою на строке которая запрещена к редактированию, то он не даст добавить строку новую, т.к

Процедура ПриВводеСтроки()
 
а=ЗапретИзмененияНоменклатуры(Контекст);
Если а = 0 Тогда
СттатусВозврата(0);
Возврат;
КонецЕсли;

КонецПроцедуры
24 viktor_vv
 
05.10.11
13:03
(23) Да забудь ты про ВводНовойСтроки(). Разве что у тебя телепат в компе есть, как написано в (9).
25 TwoWorld
 
05.10.11
13:10
(24) я понял, кроме формулы никак нельзя?
26 viktor_vv
 
05.10.11
13:14
(25) Религиозные убеждения ?
27 TwoWorld
 
05.10.11
13:14
ПриРедактированииНовойСтроки() не потянет?
28 viktor_vv
 
05.10.11
13:16
Там не помню в какой момент она отрабатывает плюс тебе все равно надо ловить момент выбора номенклатуры или момент когда она там уже есть, самое логичное это все-таки формула в реквизите.
29 TwoWorld
 
05.10.11
13:18
(28) спасибо, ветка закрыта
30 TwoWorld
 
05.10.11
14:18
Ввел формулу в поле номенклатура, в процедуре пишу:
31 TwoWorld
 
05.10.11
14:19
а = ЗапретИзмененияНоменклатуры(Контекст);
Если  а = 0 Тогда
УдалитьСтроку(); // не помогает
СтатусВозврата(0);Возврат; // не помогает
КонецЕсли;

все равно строку добавляет в документ, как сделать то?
32 МастерВопросов
 
05.10.11
14:37
Процедура ПриОкончанииРедактированияСтроки(ФлагНовойСтр)
   Если ФлагНовойСтр=1 Тогда
       Предупреждение(Номенклатура);
       УдалитьСтроку();
       СтатусВозврата(0);
       Возврат;
   КонецЕсли;
КонецПроцедуры
33 МастерВопросов
 
05.10.11
14:43
Процедура ПриОкончанииРедактированияСтроки(ФлагНовойСтр)
   Если ФлагНовойСтр=1 Тогда
       Предупреждение(Номенклатура);
       УдалитьСтроку();
       Форма.Обновить();
       Возврат;
   КонецЕсли;
КонецПроцедуры
34 TwoWorld
 
05.10.11
14:44
(35) спасибо
35 viktor_vv
 
05.10.11
14:45
(31) Нормально оно все удаляет. Там правда нафик не впали СтатусВозврата() и Возврат.
36 TwoWorld
 
05.10.11
15:29
(33) что то твой код вылетает!
37 TwoWorld
 
05.10.11
16:12
Процедура ПриОкончанииРедактированияСтроки(ФлагНовойСтр)
   Если ФлагНовойСтр=1 Тогда
       Предупреждение(Номенклатура);
       УдалитьСтроку();
       Форма.Обновить();
       Возврат;
   КонецЕсли;
КонецПроцедуры

При этом коде прогу вышибает!