Имя: Пароль:
1C
1С v8
Как определить что текущая строка только-что введена?
,
0 Молодой 1Снег
 
19.06.13
17:17
8.2 обычные формы.
На форме документа есть табличное поле, привязанное к табличной части.
Как программно определить, что текущая редактируемая строка в которой находится курсор только-что введена по кнопке Ins или нажатием зеленого плюса?
1 Молодой 1Снег
 
19.06.13
17:20
Если я зайду в редактирование существующей строки и нажму Esc, то завершится её редактирование без сохранение изменений. А если я нажму Esc в только-что введенной строке, то она полностью удалится. Значит с точки зрения платформы разница между такими строками есть.
Как это отследить программно?
2 mikecool
 
19.06.13
17:21
передначаломдобавления
3 Lama12
 
19.06.13
17:22
В момент когда ее только что ввели.
4 Молодой 1Снег
 
19.06.13
17:40
(2) Создал переменную модуля, назвал её НоваяСтрока. В процедуре ПередНачаломДобавления пишу в неё Истина, а в ПриОкончанииРедактирования Ложь. И в процессе прыгания по ячейкам смотрю на её.
Вроде всё работает. Спасибо за пинок в нужном направлении!
5 drcrasher
 
19.06.13
17:43
продам СП дорого!

ПередОкончаниемРедактирования (BeforeEditEnd)
Синтаксис:

ПередОкончаниемРедактирования(<НоваяСтрока>, <ОтменаРедактирования>, <Отказ>)
Параметры:

<НоваяСтрока>

Тип: Булево.
Установлен в Истина, если строка была добавлена или скопирована.
<ОтменаРедактирования>

Тип: Булево.
Истина, если произошла отмена редактирования.
Значение по умолчанию: Ложь
<Отказ>

Тип: Булево.
Признак отказа от выполнения действия.
Значение по умолчанию: Ложь
Описание:

Вызывается перед окончанием редактирования строки.
6 Молодой 1Снег
 
19.06.13
17:48
(5) Мне нужно в процедуре ПриАктивизацииЯчейки узнать - я нахожусь в редактировании новой строки или уже во введенной ранее. Так что ПередОкончаниемРедактирования мне не подойдет.
7 Infsams654
 
19.06.13
18:01
(6) ЗАЧЕМ "нужно в процедуре ПриАктивизацииЯчейки" ? . Сказали же уже в (2)
8 Infsams654
 
19.06.13
18:08
(6) а, понял, что хочешь - ПриНачал
еРедактирования
9 Молодой 1Снег
 
19.06.13
18:08
(7) В процедуре ПриАктивизацииЯчейки у меня обрабатывается некоторый код. Он должен выполнять разные действия в зависимости от того новая это строка или уже введенная.
Поэтому я применил механизм (4) с подсказки (2). Других вариантов я не вижу.
10 Infsams654
 
19.06.13
18:15
(7) не надо при активизации ячейки. Надо смотреть
ПриНачалеРедактирования

Если НоваяСтрока Тогда
11 Молодой 1Снег
 
19.06.13
18:17
(10) Я просто недостаточно подробно сформулировал задачу. Мне нужно ИМЕННО В процедуре ПриАктивизацииЯчейки узнать нахожусь ли я в новой строке.
12 Sj
 
19.06.13
18:18
можно попробовать добавить вычисляемый столбец ЭтоНоваяСтрока. При начале редактирования писать туда истина. при окончании ложь.
13 Infsams654
 
19.06.13
18:23
(11) так по ПриНачалеРедактирования по Если НоваяСтрока и устанавливай  флажок новой строки. Событие активизации ячейки (строки) возникает позже, если не ошибаюсь
14 Фокусник
 
19.06.13
18:37
(11) "Я просто недостаточно подробно сформулировал задачу."
+
"Мне нужно ИМЕННО В процедуре ПриАктивизацииЯчейки узнать нахожусь ли я в новой строке."

Это не формулировка задачи, это формулировка хода РЕШЕНИЯ. Задачу исходную озвучь... :)
15 Молодой 1Снег
 
19.06.13
18:56
(14) Ну если хотите саму исходную задачу то вот.

Заказчик требует, чтобы определенные сотрудники в определенном документе не могли редактировать введенные ими же строки.
То есть принцип такой: сотрудник добавляет строку заполняет в ней все необходимые колонки и как только он закончил редактирование этой строки он больше не может в ней ничего изменить и не может удалить эту строку. Несохраненный документ нельзя распечатывать.
Дело осложняется тем, что одну из колонок этого документа сотрудники должны иметь право редактировать.

Я реализовал так: в процедуре ПередНачаломИзменения проверяю роль сотрудника и название текущей редактируемой колонки. Если это не та колонка которую можно редактировать и сотр этот тот кому нельзя редактировать строки, то даю отказ.

Но всплыл косяк: сотрудник может зайти в редактирование строки через колонку которую можно редактировать, и внести изменения в колонки которые нельзя редактировать.

Тогда я в процедуре ПриАктивизацииЯчейки добавил проверку, что перешли в запрещенную колонку, проверку прав и проверку того, что это не новая строка. Если все условия срабатывают, то я вызываю Элемент.ЗакончитьРедактированиеСтроки(Ложь).

Требования заказчика выполнены.

Если отбросить вопрос о том, вменяема ли сама задача, то есть ли иные варианты её решения?
16 Infsams654
 
19.06.13
19:02
Это дурдом или как?
"То есть принцип такой: сотрудник добавляет строку заполняет в ней все необходимые колонки и как только он закончил редактирование этой строки он больше не может в ней ничего изменить и не может удалить эту строку."
17 Infsams654
 
19.06.13
19:05
(15) я серьезно спрашиваю, это тестирование сотрудника на правильность с 1-го раза ввода информации ?
18 Молодой 1Снег
 
19.06.13
19:40
(17) Заказчик таким образом пытается добиться точного соответствия документов в печатном и электронном виде.
Глупо конечно, но таковы его требования.
19 Молодой 1Снег
 
19.06.13
19:40
(15) Так что по поводу моего решения из (15)? Есть более оптимальные варианты?
20 kosts
 
19.06.13
20:02
(15) Если не ошибаюсь, то в обычных формах в процедуре при выводе строки можно установить ТолькоПросмотр для отдельных ячеек.
21 PR
 
19.06.13
20:06
В пятницу такие ветки надо заводить.
22 kosts
 
19.06.13
20:08
(18) >пытается добиться точного соответствия документов в печатном и электронном виде.

Жесткий способ. Может можно более гуманный способ сделать...
Например разрешит печать только проведенного, но запретить самому сотруднику перепроводить и делать отмену проведения. Т.е. пока не провели можно всяко его редактировать...
23 kosts
 
19.06.13
20:13
ОформлениеСтроки.Ячейки.НапомнитьПоЗавершении.ТолькоПросмотр = Истина;
24 Infsams654
 
19.06.13
20:18
(22) повторяю - дурдом. "Заказчик таким образом пытается добиться точного соответствия документов в печатном и электронном виде" - заказчик сможет, если захочет ...
Кстати, это вы такие уникальные? Отнюдь.
25 Зойч
 
19.06.13
20:25
(15) 1с правильно пошла в этом направлении. Запрет печати непроведенных. а провел, все поезд ушел
26 kosts
 
19.06.13
20:25
(24) Это к ТС, я тут ни при чем.

Кто платит тот и заказывают музыку. Но из-за драконовских мер может страдать бизнес. Когда из-за косяка в строке придется перенабирать документ, при этом возможно потеряв другого клиента. Думаю заказчик передумает.
27 Infsams654
 
19.06.13
20:35
(26) - согласен. Но только после проведения документа - поезд ушел.
Но при чем тут изменение (0) в поле проведенного документа ?
28 Молодой 1Снег
 
19.06.13
20:45
Документ никаких проводок и движений не делает. Следовательно не проводится.
Мы предлагали заказчику более адекватные пути решения. Но у него на все свой сугубо специфический
29 Молодой 1Снег
 
19.06.13
20:47
(23) Наверно проще было пойти этим путем. Но я не додумался.
30 Мимохожий Однако
 
19.06.13
21:57
Вероятно, заказчик бывший программист, т.к. формулирует не только задачу, но и варианты решения. Не дай Бог такого заказчика.