|
v7: При записи элемента справочника элемент перестает быть выбран | ☑ | ||
---|---|---|---|---|
0
POHNAH
21.01.15
✎
14:07
|
Ситуация такая я нахожу тем или иным способом элемент, провожу с ним манипуляции и при исполнении метода Записать() текущий элемент слетает. Становится не выбран.
При этом другие элементы этого справочника не слетают, а только этот. Что это может быть? |
|||
1
Ёпрст
21.01.15
✎
14:08
|
[:]||||||||||||||[:]
|
|||
2
Ёпрст
21.01.15
✎
14:08
|
и то, это не всегда, а только в поиске, как правило в НайтиПоРеквизиту
|
|||
3
Ёпрст
21.01.15
✎
14:09
|
ну и, надеюсь, ты не пытаешься ТекущийЭлемент() записать ?
Если че, это ссылка только на чтение |
|||
4
POHNAH
21.01.15
✎
14:34
|
(2) и (3) Пожалуйста поясни подробно.
Обработка не моя, но она работала. Ситуация такая именно эта функция находит элемент справочника по определнным входящим данным, причем разным(по айдишнику, по наименованию и тд) после этого редактирует этот элемент и записывает. При этом поиск происходит именно НайтиПоРеквизиту. |
|||
5
Ёпрст
21.01.15
✎
14:36
|
Больше кода
|
|||
6
POHNAH
21.01.15
✎
14:43
|
Функция НайтиСпр(стр,стрРод="",стрIDD="",вид,владелец="",ЭтоГруппа=0,стрКод = "",ПризнакУдаления = "OK")
Если ПустоеЗначение(стр) = 0 Тогда Если ПустоеЗначение(стрIDD) = 0 Тогда Если ЭтоГруппа="Нет" Тогда ЭтоГруппа = 0; ИначеЕсли ЭтоГруппа="Да" Тогда ЭтоГруппа = 1; КонецЕсли; стр = СокрЛП(стр); Попытка Спр = СоздатьОбъект("Справочник." + вид); Исключение Сообщить ("Не возможно создать Справочник." + вид); КонецПопытки; ДлинаНаименования = Метаданные.Справочник(Вид).ДлинаНаименования; ДлинаКода = Метаданные.Справочник(Вид).ДлинаКода; стрКод = Лев(стрКод,2) + Прав(стрКод,ДлинаКода-2); Если ПроверитьУникальностьIDD(стрIDD,вид) > 1 Тогда Сообщить("Код IDD " + стрIDD + " не уникален"); Возврат ""; КонецЕсли; Если Спр.НайтиПоРеквизиту("IDD",стрIDD,1) = 1 Тогда Если Спр.ЭтоГруппа() = ЭтоГруппа Тогда Спр.Наименование = СокрЛП(Лев(стр,ДлинаНаименования)); Если (ТипЗначения(стрРод) = 11) и (вид<>"Сотрудники") Тогда Попытка Спр.Родитель = стрРод; Исключение КонецПопытки; КонецЕсли; Если ПустоеЗначение(владелец) = 0 Тогда Спр.владелец = владелец; КонецЕсли; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Слетает вот тут!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Спр.Записать(); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Слетает вот тут!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Если Спр.Выбран() = 1 Тогда Если ПризнакУдаления = "DEL" Тогда Спр.Удалить(0); Иначе Если (вид<>"Сотрудники") и (Спр.ПометкаУдаления()<>1) Тогда Спр.СнятьПометкуУдаления(); КонецЕсли; КонецЕсли; КонецЕсли; Возврат Спр.ТекущийЭлемент(); КонецЕсли; КонецЕсли; Если ПустоеЗначение(владелец) = 0 Тогда Спр.ИспользоватьВладельца(владелец); КонецЕсли; Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл Если СокрЛП(Спр.Наименование) = СокрЛП(Лев(стр,ДлинаНаименования)) Тогда Если Спр.ЭтоГруппа() = ЭтоГруппа Тогда Если Спр.Родитель = стрРод Тогда Спр.IDD = стрIDD; Если ПустоеЗначение(владелец) = 0 Тогда Если Спр.владелец <> владелец Тогда Спр.владелец = владелец; КонецЕсли; КонецЕсли; Спр.Записать(); Если Спр.Выбран() = 1 Тогда Если ПризнакУдаления = "DEL" Тогда Спр.Удалить(0); Иначе Спр.СнятьПометкуУдаления(); КонецЕсли; КонецЕсли; Возврат Спр.ТекущийЭлемент(); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Если (вид = "Договоры") или (вид = "Контрагенты") или (вид = "ТипыЦен") или (вид = "Номенклатура") или (вид = "Сотрудники") Тогда Если ЭтоГруппа = 1 Тогда Спр.НоваяГруппа(); Иначе Спр.Новый(); КонецЕсли; Спр.Наименование = СокрЛП(Лев(стр,ДлинаНаименования)); Спр.IDD = стрIDD; Если ТипЗначения(стрРод) = 11 Тогда Попытка Спр.Родитель = стрРод; Исключение КонецПопытки; КонецЕсли; Если ПустоеЗначение(владелец) = 0 Тогда Спр.владелец = владелец; КонецЕсли; Спр.Записать(); Если Спр.Выбран() = 1 Тогда Если ПризнакУдаления = "DEL" Тогда Спр.Удалить(0); Иначе Спр.СнятьПометкуУдаления(); КонецЕсли; КонецЕсли; Возврат Спр.ТекущийЭлемент(); КонецЕсли; КонецЕсли; КонецЕсли; Ошибка = Ошибка + 1; Возврат ""; КонецФункции // НайтиСпр(стр,вид) |
|||
7
ikea
21.01.15
✎
14:46
|
Еще больше кода)
|
|||
8
ikea
21.01.15
✎
14:49
|
Там где слетает напиши констукцию:
Попытка Спр.Записать(); Исключение ОписаниеОшибки(); Конецпопытки. потом запусти обработку и посмотри что выдает. |
|||
9
Ёпрст
21.01.15
✎
14:55
|
вообще хрень с МОДА..только у меня это вот так выглядит :
Функция НайтиСпр(Вид,Имя,Режим=0,Владелец=0,Родитель=0,Создавать=0,ЭтоГруппа=0) Перем Спр; Спр=СоздатьОбъект("Справочник."+Вид); Если Владелец<>0 Тогда Спр.ИспользоватьВладельца(Владелец); КонецЕсли; Рез=Спр.НайтиПоНаименованию(Имя,Режим,1); Если Рез=1 Тогда Если Спр.ЭтоГруппа()<>ЭтоГруппа Тогда Рез=0; КонецЕсли; КонецЕсли; Если Рез=1 Тогда Возврат Спр.ТекущийЭлемент(); Иначе Если Создавать=1 Тогда Подчиненность=0; Если ЭтоГруппа=0 Тогда Спр.Новый(); Иначе Спр.НоваяГруппа(); КонецЕсли; Если Владелец<>0 Тогда Спр.Владелец=Владелец; Подчиненность=1; КонецЕсли; Если Родитель<>0 Тогда Спр.Родитель=Родитель; КонецЕсли; Мета=Метаданные.Справочник(Вид); Спр.Наименование=Имя; Спр.Код=СоздатьНовыйКод(Вид,Спр,Подчиненность,Мета); Спр.IDD=ПолучитьУникальныйIDD(); Спр.Записать(); М_Сообщить("Создан новый справочник "+Вид+" "+Имя+", "+Спр.Код); Возврат Спр.ТекущийЭлемент(); Иначе Возврат ""; КонецЕсли; КонецЕсли; КонецФункции |
|||
10
Ёпрст
21.01.15
✎
14:58
|
И.. слёт обычно после записи, нужно было через НайтиЭлемент перепозицонирование делать было
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |