|   |   | 
| 
 | 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) сделал так     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |