Имя: Пароль:
1C
1C 7.7
v7: Отменить ввод новой строки в списке справочника
,
0 zenon46
 
26.07.23
14:51
Доброго дня! Есть справочник, метод ввода нового - в списке, форма списка одна. Нужно запретить создание элементов путем копирования.

Делаю так, суть такая если guid есть значит скопирован, но нифига не отменяется, щелкаешь в любое место формы списка и элемент сохраняется. Это баг или фича такая ?

Процедура ПриРедактированииНовойСтроки()

    Если ПустоеЗначение(guid) = 0 Тогда    // строка скопирована
        СтатусВозврата(0);Возврат;
    КонецЕсли;        
        
КонецПроцедуры //ПриРедактированииНовойСтроки
1 Kigo_Kigo
 
26.07.23
16:07
Может ПриРедактированииНовойСтроки() ?
2 zenon46
 
26.07.23
16:13
(1) не понял, так я в этой процедуре и делаю , выше же пример
3 MWWRuza
 
гуру
26.07.23
16:15
А необходимо именно в форме списка запретить копирование?

Просто, если в форме самого элемента, то там просто решается:

Процедура ВводНового(Флаг)
    Если Флаг = 1 Тогда
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;    
КонецПроцедуры

А вот со списком, тут нужно подумать...
Может через ложное открытие формы элемента сделать?
4 zenon46
 
26.07.23
16:34
(3) формы элемента у справочника нет, редактирование через список и я так понимаю тут какой-то БАГ имеется
5 Kigo_Kigo
 
26.07.23
16:52
может ВВодНового?
6 Злопчинский
 
26.07.23
17:23
(2) значит в строке источнике гуид пустой
7 Злопчинский
 
26.07.23
17:51
не, фигня
ПриРедактированииНовойСтроки() на СтатусВозврата(0) не эрегирует...
надо как-то иначеЮ если ну прямо капец как принципиально именно в строке редактировать
8 Злопчинский
 
26.07.23
17:52
тьфу, ...!
ПриВводеСтроки()
!!!
9 zenon46
 
26.07.23
18:33
(6) точно не пустой, глазами вижу )
10 Харлампий Дымба
 
26.07.23
19:16
(8) Ну да. И, кстати, в жкк прямым текстом написано:
Вызов ПриВводеСтроки производится при интерактивном вводе новой строки (до начала ввода) в форме списка справочника. Если в данной процедуре установить статус возврата — 0, то новая строка списка справочника не будет инициирована.
Вызов ПриРедактированииНовойСтроки производится в момент начала интерактивного редактирования новой строки списка справочника (после того, как новая строка уже заведена). Процедура может использоваться для установки начальных значений реквизитов нового элемента справочника. В данной процедуре установка статуса возврата не имеет смысла, так как отказаться от ввода новой строки в этот момент уже невозможно.

Но! Обращение к реквизитам справочника из процедуры ПриВводеСтроки вернёт значения из текущего элемента (т.е. на котором спозиционирован курсор), а не нового. Поэтому, в случае ТС, guid будет возвращать в процедуре ПриВводеСтроки заполненное значение ВСЕГДА. А после попадания в процедуру ПриРедактированииНовойСтроки уже отменить ввод нельзя.
Заковыка...
11 Харлампий Дымба
 
26.07.23
19:21
Тогда остаётся ПриЗаписи. Наверняка присвоение гуида идёт там. Вот и анализируй до присвоения - если гуид уже есть, то не разрешай сохранять - СтатусВозврата(0).
12 Злопчинский
 
26.07.23
22:55
(11) достаточно ПриНачалеРедактированияСтроки() написать guid=""; И ВСЁ.
13 Харлампий Дымба
 
27.07.23
00:07
(12) Нене. Тогда гуид будет затираться у существующих элементов при их редактированиии. Нужна ПриРедактированииНовойСтроки(), а не ПриНачалеРедактированияСтроки().
Вообще по всей логике у ТС в ПриРедактированииНовойСтроки() должно быть присвоение нового guid независимо от принципа ввода (копированием или напрямую), так что зануление гуид, а также проверка на заполненность - избыточно. А стало быть и требование к запрету ввода копированием - лишнее. Но видимо присвоение гуид делается при записи в условии проверки на незаполненность, поэтому возникла проблема с копированными элементами. Если так - тогда достаточно перенести присвоение в процедуру  ПриРедактированииНовойСтроки() и выполнять его безусловно. Ну разберётся, надеюсь, теперь.

Просто мне вот стало интересно, можно ли "запретить создание элементов путем копирования" в списке справочника. И оказалось, что в семёрке это пока ещё не реализовано.
14 Злопчинский
 
27.07.23
01:40
(13) "можно ли "запретить создание элементов путем копирования"
штатно - хз.. надо думать...
а так - или RWidjets или может ПриПолученииКомандыГлавнымОкном
15 Злопчинский
 
27.07.23
01:44
(13) ну и можно ПриРедактированииНовойСтроки() написать guid="" если стоит задача избежать дублирования гуидов или тупо по метаданным пробежаться и занулить все реквизиты (кроме кода если он есть и уникальность включена) - получится что при копировании то же самое как просто ввод новой тсроки
16 zenon46
 
27.07.23
09:09
(15) не только guid а все реквизиты, нужно занулить, как раз задача была запрет копирования элементов - но как оказалось в 7.7 это пока не реализовано (в форме списка)
17 Харлампий Дымба
 
27.07.23
12:17
Процедура ПриРедактированииНовойСтроки()
    ОбъектМД=Метаданные.Справочник(Вид());
    Если (ОбъектМД.АвтоНумерация=1)и(ОбъектМД.ДлинаКода<>0) Тогда Код="" КонецЕсли;
    Если ОбъектМД.ДлинаНаименования<>0 Тогда Наименование="" КонецЕсли;
    Для СчетчикЦикла=1 По ОбъектМД.Реквизит() Цикл УстановитьАтрибут(ОбъектМД.Реквизит(СчетчикЦикла).Идентификатор,"") КонецЦикла;    
КонецПроцедуры
18 Злопчинский
 
27.07.23
12:54
(17) по идее
    Если (ОбъектМД.АвтоНумерация=1)и(ОбъектМД.ДлинаКода<>0) Тогда Код="" КонецЕсли;
- лишнее
.
при копировании или вводе нового система с кодом по идее сама разберется..?
19 Злопчинский
 
27.07.23
12:55
(16) ну если не устраивает как выше описано - то см.(14)
20 Злопчинский
 
27.07.23
12:58
гораздо интереснее чтобы было автомасштабирование форм вместе с элементами адекватное...
типа нарисовал я фейс для экрана 240-320 - опа экран 480-640 - чтобы элементф формы смасштабировались более-менее аккуратненько...
.
или проще под каждое разрешение перерисовать форму и собирать обработку для нужного разрешения...?
это хорошо если экранов 1-2-3, а если штук 20-40?
21 Харлампий Дымба
 
27.07.23
13:17
(18) Если АвтоНумерация=2, то тогда разберётся, а если АвтоНумерация=1, то тогда скопирует. Так что нет, условие нелишнее.
22 Duke1C
 
27.07.23
13:35
(0) C предопределенной процедурой ПриВводеСтроки() "играться" не пробовал?
23 Злопчинский
 
27.07.23
13:38
(22) см.(10) Харлампий написал...
24 Duke1C
 
27.07.23
13:47
(23) Да, точно. Она не как ВводНового отрабатывает(
25 Duke1C
 
27.07.23
13:49
Ну тогда запретить вводить в списке и вводить через ФормуЭлемента, или спец.обработку какую-нибудь
26 Злопчинский
 
27.07.23
14:44
(25) я везде в своих доработках ввод по строке использую только в простейших справочниках типа классификаторво, без логики. В остальных - ввод в диалоге.
27 Duke1C
 
27.07.23
16:39
(26) Да это то понятно, что так оно логичнее... ))
Если только у (0) этот справочник не открывается только для выбора, да ещё модально - иначе, проблем не вижу
28 Duke1C
 
27.07.23
16:43
(27) Ну тут надо - "Огласить весь список, пожалуйста". Что за справочник, кто, для чего и как вводит... ну и т.д.
29 MWWRuza
 
гуру
27.07.23
19:42
А если так: https://cloud.mail.ru/public/CHoh/GUGnKg89F

Да, есть форма элемента. Ну и что??? Она не открывается все равно, ее никто не видит, и она может быть пустой совсем, без единого поля.
Противно промелькивает при создании/копировании элеиента справочника. Но, новая строка создается, стандартной кнопкой, а при назатии на "+"(копировать) мелькает, но ничего не вводится...
Там, если дальше развивать эту линию, нужно добавить в справочник колонки и после закрытия формы элемента, активизировать нужную колонку со входом в режим редактирования...
30 Злопчинский
 
27.07.23
20:04
Давайте эти извращения снеговика оставим
31 MWWRuza
 
гуру
27.07.23
20:08
А в снеговике, если не ошибаюсь, вообще в списке нельзя редактировать... По крайней мере в УФ... Но, могу и ошибаться - мне простительно, "застарелый клюшечник" :-)
32 MWWRuza
 
гуру
27.07.23
20:40
+(29) Там, если дальше развивать эту линию, нужно добавить в справочник колонки и после закрытия формы элемента, активизировать нужную колонку со входом в режим редактирования...

И если отказались от редактирования новой строки, то удалять новый, только что созданный элемент.
33 Злопчинский
 
27.07.23
21:14
(32) это уже совсем какая-то мёртвая стюардесса
34 Харлампий Дымба
 
27.07.23
22:41
Джентльмены, хочу сказать: хорошо, что мы материально многого достигли и можем заниматься подобной ерундой чисто для удовольствия! Так что - достаём лопаты и:
(29) Новая строка-то создаётся, только вот в списке её не отредактировать, Активизировать(,1) не заработает так как стоит редактирование справочника "В диалоге".
35 zenon46
 
28.07.23
09:03
(15) сделал так