Имя: Пароль:
1C
1С v8
Отмена ввода в УФ
0 UFO
 
06.05.15
16:09
Есть внешний отчет. В нем есть реквизит СкладыЦКПсобственные тип ТаблицаЗначений. В редакторе форм к реквизиту СкладыЦКПсобственные доабвляется колонка Склад, имеющая тип СправочникСсылка.Склады

В серверном модуле при открытии я добавляю в этот реквизит (ТЗ) три склада (они как бы предопределены). Пользователь должен будет или пользоваться этими складами или отредактировать их. Ну дык вот:
есть обработчик события

Процедура СкладыБУСобственныеПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
    Данные     = Элемент.ТекущиеДанные;
    Склад    = Данные.Склад;
    Если ОтменаРедактирования Тогда
        Если НоваяСтрока Тогда
            Отказ = Истина;
            Отчет.СкладыБУСобственные.Удалить( Отчет.СкладыБУСобственные.Количество() - 1);
        //Иначе

        //    Отчет.СкладыБУСобственные.Удалить( Элемент.ТекущаяСтрока - 1);

        КонецЕсли;
    КонецЕсли;
    //Отказ     = ПроверитьСклад( Элемент.ТекущиеДанные.Склад);

    Сообщить( "СкладыБУСобственныеПередОкончаниемРедактирования");

КонецПроцедуры
Я обратил внимание, что из ТЗ строчка то удаляется, а вот из ТаблицыФорм нихрена... и каждый раз нажимая добавить строку и отменяя в ТаблицеФорм данные не отменяются и так и идут по нарастанию, хотя в тз остается 3, и поэтому количество строк (я так думаю) не равны в таблицезначений и в таблицформ. Можно ли сделать нормальную отмену ввода строк без глюков, нажимая ESC или просто щелкая по другой строчке?
1 Fragster
 
гуру
06.05.15
16:10
галку "изменять состав строк" сними.
2 Fragster
 
гуру
06.05.15
16:10
а код весь удали
3 Fragster
 
гуру
06.05.15
16:10
но вообще само по себе "Пользователь должен будет или пользоваться этими складами или отредактировать их" очень странно
4 UFO
 
06.05.15
16:11
Ничего странного, это сделано чтобы пользователю не добавлять в отчет склады, у нас их несколько десятков
5 UFO
 
06.05.15
16:12
Я сразу отобрал 3 основные.
6 UFO
 
06.05.15
16:12
Надо чтобы пользователь не добавил снова такой же которыйц есть и не добавлял пустых строк.
7 UFO
 
06.05.15
16:13
Так вот с пустыми строками у меня вышел затык
8 UFO
 
06.05.15
16:14
Первый ESC отрабатывает на ура. Но второй вываливается в ошибку что неверен параметр 1 на строчке Отчет.СкладыБУСобственные.Удалить( Отчет.СкладыБУСобственные.Количество() - 1);
9 UFO
 
06.05.15
16:14
Под отладчиком я увидел что количество строк в ТаблицеФорм и ТЗ не равны
10 UFO
 
06.05.15
16:15
С каждым нажатием на кнопку добавить количество строк в ТаблицеФорм не уменьшается когда отменяется ввод
11 Fragster
 
гуру
06.05.15
16:16
удали весь код.
12 Fragster
 
гуру
06.05.15
16:16
если ОтменаРедактирования - то НИЧЕГО не делай
13 UFO
 
06.05.15
16:16
И что?
14 Fragster
 
гуру
06.05.15
16:17
если нет - то выставляй отказ если дубль или пусто.
15 Fragster
 
гуру
06.05.15
16:17
всё
16 Fragster
 
гуру
06.05.15
16:17
вообще фигня это. пользователь один раз надобавляет нужные склады и пусть оно само сохраняется у него в варианте настроек
17 Fragster
 
гуру
06.05.15
16:18
а дубли и пусто можно игнорировать при самом формировании уже
18 UFO
 
06.05.15
16:19
При формировании это понятно, но хотелось бы пользователей заставить быть повнимательней
19 UFO
 
06.05.15
16:20
ЧТобы дубликаты сразу удалялись
20 UFO
 
06.05.15
16:25
Я хотел чтобы при добавлении строчки с таким же складом, чтобы пользователь не мог сохранить эту строчку и он ее или отредактирует или удалит
21 GROOVY
 
06.05.15
16:33
Вот это "Отчет.СкладыБУСобственные.Количество() - 1" нифига не последняя строка как могло бы показаться.
22 UFO
 
06.05.15
16:35
(21) Типа америку открыл.. это я и сам знаю.. это я пробовал все варианты в течение пары часов... по ходу дела свой обработчик написать нельзя..
23 UFO
 
06.05.15
16:37
ТЗ.количество() давало 3
Элемент.ТекущаяСтрока давало 4
24 UFO
 
06.05.15
16:38
во второй раз уже было
тз = 3
Элем = 5
и так далее... и я понял что в таблице форм данные не уменьшаются
25 GROOVY
 
06.05.15
16:39
"и я понял что в таблице форм данные не уменьшаются" не правильно понял.
26 UFO
 
06.05.15
16:39
(25) а что ж тогда?
27 GROOVY
 
06.05.15
16:40
Текущая строка - это идентификатор строки, а не ее номер, как я намекал в (21).
28 UFO
 
06.05.15
16:40
Значит этот ид никак не связан с количеством?
29 UFO
 
06.05.15
16:41
А почему же он по ид удалять не хотел
30 GROOVY
 
06.05.15
16:41
(28) никак не связан.
31 UFO
 
06.05.15
16:42
Самый первый вариант был
Отчет.СкладыБУСобственные.Удалить( Элемент.ТекущаяСтрока);
Почему первый раз отменялось а второй раз ошибку давало?
32 GROOVY
 
06.05.15
16:48
Попробуй в параметр передать все же не число, а элемент коллекции. Юзай метод НайтиПоИдентификатору().
33 GROOVY
 
06.05.15
16:51
Что то вроде     Реквизит1.Удалить(Реквизит1.НайтиПоИдентификатору(Элементы.Реквизит1.ТекущаяСтрока));
34 UFO
 
06.05.15
17:03
(33) Это получилось, но вот что хочу, хочу, чтобы когда пользователь нажимает на другой склад, у меня срабатывало как ESC, а не выдавало ошибку Значение не является значением объектного типа (Склад)
35 UFO
 
06.05.15
17:05
Нажимает на другой склад, находясь в режиме добавления
36 UFO
 
06.05.15
17:08
Я почему хочу этого добиться, потому что в реальном обработчике в конце обрабатывается список на поиск дубликатов.
37 UFO
 
06.05.15
17:08
А у меня до него доходит только если я ввожу все правильно
38 UFO
 
06.05.15
17:11
Я хочу исключить все ошибки пользователей. Чтобы не было шага влево шага вправо.
39 UFO
 
06.05.15
17:22
Оказалось все просто, ошибка возникала потому что в строчке
Данные     = Элемент.ТекущиеДанные;
Данные принимали значение Неопределено, когда пользователь в момент добавления щелкал в другом месте. Достаточно оказалось проверить на него.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.