Имя: Пароль:
1C
1С v8
Запрет на изменение некоторых строк
,
0 Мисти
 
23.10.13
09:47
В заказе поставщику нужно запретить редактировать строки, где выбрано назначение.
А где не выбрано - там пожалуйста!
Как это написать?
1 Нуф-Нуф
 
23.10.13
09:47
проверяй при начале редактирования, будь мужиком, блеать!
2 Asmody
 
23.10.13
09:48
в УФ в условном оформлении есть параметр Доступность.
3 zak555
 
23.10.13
09:50
(1) ей мол сменить ?
4 zak555
 
23.10.13
09:50
*ей пол сменить предлагаешь ?
5 Мисти
 
23.10.13
09:51
Ну, проверила при начале редактирования. Как его запретить-то?
6 Мисти
 
23.10.13
09:52
&НаКлиенте  
Процедура Кос_ПроверитьНаличиеЗаказа(Имя)
    Если Имя = "ТоварыОтмененоПричиныОтменыНеИспользуются" Тогда
        Отказ = Кос_ПроверитьНаличиеЗаказаНаСервере(ЭтаФорма.Элементы.Товары.ТекущиеДанные.Назначение);
    КонецЕсли;
    
КонецПроцедуры
&НаСервере
Функция Кос_ПроверитьНаличиеЗаказаНаСервере(Назначение)
    Если Назначение = Справочники.Назначения.ПустаяСсылка() Тогда
        Возврат(Истина);
    Иначе Возврат(Ложь);
    КонецЕсли;
КонецФункции
7 Мисти
 
23.10.13
09:52
Ну, это я для одной колонки проверила. На самом деле - почти ничего менять нельзя.
Как теперь отказать-то?
8 zak555
 
23.10.13
09:53
1. > ЭтаФорма.Элементы

зачем "ЭтаФорма." ?
9 Мисти
 
23.10.13
09:53
СтатусВозврата,СтандартнаяОбработка,Отказ - ничего такого в процедуре нет.
Менять доступность при начале редактирования??
10 kosts
 
23.10.13
09:53
Еще удаление и копирование нужно запретить.
11 Defender aka LINN
 
23.10.13
09:54
(5) Угу. "Ну вот начал засовывать, а там кровь. Как запретить?"
12 Мисти
 
23.10.13
09:54
(8) Потому что я гадаю. Если можно без "этаФорма" - уберу!
Но вопрос в другом!
13 Fedor-1971
 
23.10.13
10:07
ПередНачаломИзменения(Элемент, Отказ) - строка уже есть, её пытаются редактировать, проверить условие и отказать в редактировании.
14 Мисти
 
23.10.13
11:31
Ура! Оно. А я пыталась привязаться к тем функциям, которые уже обозначены были.
15 Мисти
 
23.10.13
12:46
Как поймать копирование строки?

&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    
    Если НоваяСтрока Тогда
        Элементы.Товары.ТекущиеДанные.КодСтроки = 0;
    КонецЕсли;
КонецПроцедуры

сюда почему-то не попадаю.
16 Мисти
 
23.10.13
12:47
&НаКлиенте
Процедура Кос_ТоварыПередУдалением(Элемент, Отказ)
    Отказ = Кос_ПроверитьНаличиеЗаказаНаСервере(ЭтаФорма.Элементы.Товары.ТекущиеДанные.Назначение);
КонецПроцедуры

удаление - получилось
17 Мисти
 
23.10.13
13:02
ау?
18 kosts
 
23.10.13
13:08
(15) ПриНачалеРедактирования - для отмены не смысла отлавливать. Т.к. отказ уже не сделать. См. ПередНачаломДобавления()
19 Мисти
 
23.10.13
13:46
Мне при копировании надо один показатель обнулить, а копировать-то можно!
20 Мисти
 
23.10.13
14:05
&НаКлиенте
Процедура ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Если Копирование Тогда    
    Элементы.Товары.ТекущиеДанные.Назначение = ""; // Косинус
КонецЕсли;
КонецПроцедуры
Этот фокус обнуляет и в старой строке и в новой.
21 Euguln
 
23.10.13
14:10
(20) в (15) решение, есть же параметр события Копирование
22 Мисти
 
23.10.13
14:39
Параметр есть, но при копировании я туда не попадаю.
23 Мисти
 
23.10.13
14:40
Надо что-то с (20) наверное исхитриться, чтобы только в новой строке обнулялось.
24 Fedor-1971
 
23.10.13
15:39
(20) Копирование = Истина только для новой строки, так что изменения пойдут в только новую строку
25 Мисти
 
23.10.13
17:05
(24) А вот и нет! Очищается значение в 2 строках.
26 Fedor-1971
 
23.10.13
18:49
(25) по ходу я не прав, новой строки ещё нет, а текущей является копируемая, потому надо искать другой способ
27 Мисти
 
23.10.13
19:41
Давайте искать, я согласна!
28 Мисти
 
23.10.13
20:12
Ну это же просто!
Только я не знаю, как.
29 Мимохожий Однако
 
23.10.13
20:17
Добавь скрытую колонку, в которой положи значение колонки "назначение" при окончании редактирования. Если там уже лежит значение, то записывать только его вместо выбранного.
30 kosts
 
23.10.13
20:39
Очищается только в новой копируемой строке

&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    
    Если Копирование Тогда
        элементы.Товары.ТекущиеДанные.Товар = неопределено;
    КонецЕсли;
        
КонецПроцедуры
31 Мисти
 
23.10.13
20:55
При копировании я сюда не попадаю!
Процедура в нужном месте выбрана. Куды бечь??
32 kosts
 
23.10.13
20:56
(31) Установи обработчик заново. Может быть по дороге потерялся...
33 EvgeniuXP
 
23.10.13
20:58
при выводе строки запрещай, а не при начале редактирования.
34 EvgeniuXP
 
23.10.13
20:59
(33) если 8.1, если 8.2т > - оформление.
35 kosts
 
23.10.13
21:00
(33) ТС еще хочет очистить значение.
36 Мисти
 
23.10.13
21:01
(32) Ничего не потерялось. Там такая история смешная. С заполненной колонкой "обеспечение" я вообще редактировать запрещаю, поэтому до редактирования дела не доходит.
37 Мисти
 
23.10.13
21:01
(33) с запретом на изменение всё получилось!
Теперь нужно, чтобы при копировании строчки это поле очищалось.
38 Мимохожий Однако
 
23.10.13
21:06
ИМХО. Техзадание понято неверно.
39 kosts
 
23.10.13
21:08
(36)(37) Попробовал (30) + условное оформление с установлением ТолькоПросмотра для ячейки, всё работает как надо.
40 Мисти
 
23.10.13
21:09
Техзадание я сама сочиняю по ходу дела.
Что тут непонятного?
сочиняем автоматизацию алгоритма обеспечения. По идее - в документе "заказ поставщику" обеспечение надо проставлять вручную, а мы делаем автоматически при записи документа "заказ клиента". Поэтому их нельзя трогать в заказе поставщику.
41 kosts
 
23.10.13
21:10
(39)+ Только на числовой колонке пробовал. Т.е. условное оформлении на форме сделал. Для ссылочных программно УО нужно делать.
42 Мисти
 
23.10.13
21:10
(39) Очищается в какой момент?
Мне надо, чтобы сразу при копировании - номенклатура была, а обеспечения - не было.
43 Мисти
 
23.10.13
21:11
Мне не надо только просмотр! Мне надо, чтоб в скопированнлй строке там пусто было!
44 kosts
 
23.10.13
21:12
(43) Понятно. Я понял, что тебе нужно заблокировать определенные ячейки и копировать с очищением. Про это я написал.
45 EvgeniuXP
 
23.10.13
21:15
(42) в модуле объекта - при копировании очищай
46 EvgeniuXP
 
23.10.13
21:16
(45) спутал, строку копируешь... не реквизит объекта чистить...
47 kosts
 
23.10.13
21:17
(46) см.(36) Она как-то заблокировала ячейку, по этому не копируется, так я понял...
48 Мисти
 
23.10.13
21:20
Заблокировать удалось! А скопировать с очищением - нет.
Еще никак не могу найти имя реквизита - в смысле, как его окликнуть?
Функция "ТоварыПриИзменении", а как узнать, из какой колонки я туда попала?
49 kosts
 
23.10.13
21:22
(48) Делай как в (39)

>из какой колонки я туда попала
элементы.Товары.ТекущийЭлемент наверное
50 kosts
 
23.10.13
21:25
http://infostart.ru/public/181336/  2. Программная работа с условным оформлением (УО).
51 Мисти
 
23.10.13
21:29
элементы.Товары.ТекущийЭлемент.Имя - ура!
52 Мисти
 
23.10.13
21:30
Не, ну а если я не буду редактировать?
Скопировала и сохранила!
Мне надо, чтоб прямо при копировании очищалось!
В 7 как-то получалось же.
53 Мисти
 
23.10.13
21:31
(50) Я почитаю, спасибо! Но это не совсем то.
54 kosts
 
23.10.13
21:32
Каким способом заблокировала?
55 Мисти
 
23.10.13
21:38
&НаСервере
Функция Кос_ПроверитьНаличиеЗаказаНаСервере(Назначение)
    Если Назначение = Справочники.Назначения.ПустаяСсылка() Тогда
        Возврат(Ложь);
    Иначе
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Нельзя редактировать строку, в которой проставлено Назначение");        
        Возврат(Истина);
    КонецЕсли;
КонецФункции    

&НаКлиенте
Процедура Кос_ТоварыПередНачаломИзменения(Элемент, Отказ)
    Отказ = Кос_ПроверитьНаличиеЗаказаНаСервере(ЭтаФорма.Элементы.Товары.ТекущиеДанные.Назначение);
КонецПроцедуры
56 kosts
 
23.10.13
21:50
(55) У меня при копировании ПередНачаломИзменения() вообще не вызывается.
По этому не понятно почему у тебя ПриНачалеРедактирования() не вызывается...
57 Мисти
 
23.10.13
21:51
(56) А если скопировать и ничего в строке не трогать - всё равно вызывается?
58 kosts
 
23.10.13
21:58
(57) Трогать/ не трогать всё одно как в (56)
59 Мисти
 
23.10.13
21:58
ПередНачаломИзменения - вызывается именно перед началом изменения.
К копированию никакого отношения не имеет.
2 задачи! Ничего не менять в строке, где обеспечение стоит и
и при копировании обеспечение очищать.
60 kosts
 
23.10.13
22:05
(59) Вот так у меня тоже работает как тебе надо


&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    
    Если Копирование Тогда
        элементы.Товары.ТекущиеДанные.Цена = 0;
    КонецЕсли;
        
КонецПроцедуры

&НаКлиенте
Процедура ТоварыПередНачаломИзменения(Элемент, Отказ)
    
    Если элементы.Товары.ТекущиеДанные.Цена = 10 Тогда
        Отказ = Истина;
    КонецЕсли;
    
КонецПроцедуры


PS Пошел спать. Уже не по первому кругу пошли обсуждать...
61 Мисти
 
23.10.13
22:13
(60) А в ТоварыПриНачалеРедактирования попадаешь просто при копировании? Ничего в этой строчке не меняем?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн