Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Интерактивный ввод нового элемента справочника? (число прочтений - 14244 )
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Интерактивный ввод нового элемента справочника?
09. Сентября 2011 :: 09:12
Печать  
То ли я дурак, то ли как... Использую следующий подход:

Код
Выбрать все
Спр=СоздатьОбъект("Номенклатура");

МаксимальныйКод=0;

Спр.ПорядокКодов();
Спр.ОбратныйПорядок(1);
Если Спр.ВыбратьЭлементы()=1 Тогда
	Спр.ПолучитьЭлемент();
	МаксимальныйКод=Спр.Код;
КонецЕсли;

ОткрытьФормуМодально("Элемент.Номенклатура");

Спр.ПорядокКодов();
Спр.ОбратныйПорядок(1);
Если Спр.ВыбратьЭлементы()=1 Тогда
	Спр.ПолучитьЭлемент();
	Если Спр.Код>МаксимальныйКод Тогда
		// значит появился новый элемент
	КонецЕсли;
КонецЕсли; 



Работает конечно, но во-первых некрасиво, во-вторых в данном случае код у меня интерактивно изменить нельзя, а если бы можно было, то работать не будет.

Есть более красивый и универсальный подход?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Интерактивный ввод нового элемента справочника?
Ответ #1 - 09. Сентября 2011 :: 09:27
Печать  
Не вкурил, ты потом новый элемент записываешь и закрываешь что ли, после открытия модальной формы ?

И.. нафига тебе вообще нелепая привязка к коду  ?
Тупо count на количество записей в справочнике и всё.

Или..НовыйИД() смотри до того как и после у объекта метадатаворк
Улыбка

  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #2 - 09. Сентября 2011 :: 09:45
Печать  
При нажатии кнопки на форме (она до кучи у меня еще веб Улыбка), открываю модально форму нового элемента справочника, а потом мне надо получить ссылку на сохраненный элемент, и вообще факт того что пользователь именно сохранил элемент а не нажал "отмена". Насчет count согласен.

Тут еще аналогичный вопрос возникает. Точно так же нужно открыть модальную форму редактирования элемента, а потом узнать сохранили этот элемент или нажали "отмена"...

После ввода и редактирования элемента я произвожу изменения на форме, так вот чтобы мне эти изменения понапрасну не производить, надо узнать было ли осуществлено действие и получить ссылку на элемент.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #3 - 09. Сентября 2011 :: 10:03
Печать  
maljaev писал(а) 09. Сентября 2011 :: 09:12:
То ли я дурак, то ли как... Использую следующий подход:

Код
Выбрать все
Спр=СоздатьОбъект("Номенклатура");

МаксимальныйКод=0;

Спр.ПорядокКодов();
Спр.ОбратныйПорядок(1);
Если Спр.ВыбратьЭлементы()=1 Тогда
	Спр.ПолучитьЭлемент();
	МаксимальныйКод=Спр.Код;
КонецЕсли;

ОткрытьФормуМодально("Элемент.Номенклатура");

Спр.ПорядокКодов();
Спр.ОбратныйПорядок(1);
Если Спр.ВыбратьЭлементы()=1 Тогда
	Спр.ПолучитьЭлемент();
	Если Спр.Код>МаксимальныйКод Тогда
		// значит появился новый элемент
	КонецЕсли;
КонецЕсли; 



Работает конечно, но во-первых некрасиво, во-вторых в данном случае код у меня интерактивно изменить нельзя, а если бы можно было, то работать не будет.

Есть более красивый и универсальный подход?

я делаю наоборот
при открытии нового элемента вычисляю его код.
При записи ( модуль ПриЗаписи() ) для нового элемента проверяю есть ли такой код или нет.
(т.е. не создали два пользователя нов элемент одновременно).
не совсем чисто но вполне хватает да и  лучше чем 0.

  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #4 - 09. Сентября 2011 :: 10:16
Печать  
Z1, менять ради этого модуль элемента справочника не есть хорошо ИМХО. Хотелось бы простое и лаконичное решение. Типа:

Код
Выбрать все
// вводим новый элемент
Объект=ОткрытьФормуМодально("Элемент.Номенклатура",Отмена);
Если Отмена=0 Тогда
     // значит сохранили новый элемент
КонецЕсли;

// редактируем существующий элемент
ОткрытьФормуМодально(Объект,Отмена);
Если Отмена=0 Тогда
     // значит сохранили изменения в элементе
КонецЕсли;
 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Интерактивный ввод нового элемента справочника?
Ответ #5 - 09. Сентября 2011 :: 10:16
Печать  
Да ?
А может еще проще ?
Улыбка)

Код
Выбрать все
Конт="";
ОткрытьФормуМодально("Элемент.Вася",Конт);

.........
Процедура ПриЗакрытии()
   Если Выбран()=1 Тогда
	 Форма.Параметр = ТекущийЭлемент();
   КонецЕсли;
КонецПроцедуры
...........

Если ПустоеЗначение(Конт)=0 Тогда
   Сообщить("а вот и наш элементик : "+Конт);
КонецЕсли;
 



Да, чтоб не править код, класс.Перехватчик в руки.
Улыбка

  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #6 - 09. Сентября 2011 :: 10:18
Печать  
Eprst, точно! Лучше наверно не придумаешь.  Улыбка

Спасибо огромное, хоть я и пользовался раньше аналогичным приемом но в этот раз что-то в голову не пришло....
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #7 - 09. Сентября 2011 :: 10:38
Печать  
Только наверное меньше проблем будет, если делать это при записи элемента:

Код
Выбрать все
Конт="Вернуть объект";
ОткрытьФормуМодально("Элемент.Номенклатура",Конт); // или ОткрытьФормуМодально(Объект,Конт)
...........
Процедура ПриЗаписи()
	Если ТипЗначенияСтр(Форма.Параметр)="Строка" Тогда
		Если Форма.Параметр="Вернуть объект" Тогда
			Записать();
			Форма.Параметр=ТекущийЭлемент();
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
...........
Если ТипЗначенияСтр(Конт)="Справочник" Тогда
     // значит все нормально, пользователь произвел запись, вернулся новый/отредактированный объект
КонецЕсли;
 

  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #8 - 09. Сентября 2011 :: 10:44
Печать  
maljaev писал(а) 09. Сентября 2011 :: 10:38:
Только наверное меньше проблем будет, если делать это при записи элемента:

Код
Выбрать все
Конт="Вернуть объект";
ОткрытьФормуМодально("Элемент.Номенклатура",Конт); // или ОткрытьФормуМодально(Объект,Конт)
...........
Процедура ПриЗаписи()
	Если ТипЗначенияСтр(Форма.Параметр)="Строка" Тогда
		Если Форма.Параметр="Вернуть объект" Тогда
			Записать();
			Форма.Параметр=ТекущийЭлемент();
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
...........
Если ТипЗначенияСтр(Конт)="Справочник" Тогда
     // значит все нормально, пользователь произвел запись, вернулся новый/отредактированный объект
КонецЕсли;
 


так у тебя элемент будет два раза записываться ( ну может это и не важно).


  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #9 - 09. Сентября 2011 :: 10:50
Печать  
Z1, согласен, 2 раза, но временные и транзакционные накладки будут небольшими, не документ же записываем. А если присваивать "форма.параметр" при закрытии, то придется еще отслеживать факт записи редактируемого элемента (вводить переменную-флаг).
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #10 - 09. Сентября 2011 :: 10:55
Печать  
maljaev писал(а) 09. Сентября 2011 :: 10:50:
Z1, согласен, 2 раза, но временные и транзакционные накладки будут небольшими, не документ же записываем. А если присваивать "форма.параметр" при закрытии, то придется еще отслеживать факт записи редактируемого элемента (вводить переменную-флаг).

ПриЗакрытии
если новый элемент закрываем то возращаешь  ТекущийЭлемент()
иначе ничего не делаешь.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #11 - 09. Сентября 2011 :: 10:57
Печать  
(7) и как поведет (7) когда произойдет откат из-за дублирования кодов (ввели с другого компа ) ?
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #12 - 09. Сентября 2011 :: 11:02
Печать  
Ну вот тогда доработанный вариант от Епрста:

Код
Выбрать все
Конт="";
ОткрытьФормуМодально("Элемент.Номенклатура",Конт); // или ОткрытьФормуМодально(Объект,Конт)
...........
Перем ЗаписалиЭлемент;

Процедура ПриЗаписи()
	ОшибкаЗаписи=0;
	Попытка
		Записать();
	Исключение
		ОшибкаЗаписи=1;
	КонецПопытки;
	Если ОшибкаЗаписи=0 Тогда
		ЗаписалиЭлемент=1;
	КонецЕсли;
КонецПроцедуры

Процедура ПриЗакрытии()
	Если ЗаписалиЭлемент=1 Тогда
		Форма.Параметр=ТекущийЭлемент();
	КонецЕсли;
КонецПроцедуры
...........
Если ТипЗначенияСтр(Конт)="Справочник" Тогда
     // значит все нормально, пользователь произвел запись, вернулся новый/отредактированный объект
КонецЕсли; 

  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #13 - 09. Сентября 2011 :: 11:06
Печать  
В этом случае если запись не прокатит из-за накладки кодов или блокирующей транзакции, тогда флаг не установится. Ну и соответственно элемент не вернется при закрытии формы.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Интерактивный ввод нового элемента справочника?
Ответ #14 - 09. Сентября 2011 :: 11:27
Печать  
maljaev писал(а) 09. Сентября 2011 :: 09:45:
При нажатии кнопки на форме (она до кучи у меня еще веб Улыбка),


А можно про web поподробней - заинтреговал.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать