Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Почему нельзя получить значение атрибута формы если Ид=Наименование? (число прочтений - 8361 )
CaSH
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 02. Мая 2011
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #15 - 04. Октября 2011 :: 09:44
Печать  
Eprst писал(а) 04. Октября 2011 :: 09:10:
Улыбка
А Форма.ОбработкаВыбораСтроки(1) в коде есть ?

Вот спасибо! Совсем забыл, уже больше года не ковырялся в этом 1С++, комментарий об этом не написал, и все позабывал  Смех
Все последнее время на 8-ке, а у вас тут походу хватает работы на 7-ке, что такая практика?
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #16 - 04. Октября 2011 :: 11:33
Печать  
А почему бы и нет?
7.7 SQL + (1С++,FormEx,Yoksel,dialmail,RWidjets,SQLite)
Взрывная весчь получается.
Не хуже 8.х между прочим.
Так что работы и на 7.7 фатает.
  
Наверх
 
IP записан
 
CaSH
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 02. Мая 2011
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #17 - 04. Октября 2011 :: 11:53
Печать  
Насчет не хуже - не соглашусь
По описанию - да
Но по использованию 1С 8 - стабильнее
7.7 несколько лет на ВК извращался, кроме SQLite все компоненты перепахал, со всех сайтов, но везде такие глюки - то там включи, то тут выклюи, то эту компоненту нужно только после той вызывать. А самое обидное когда все подходит, уже все сделал, и тут вылазит интерфейсный глюк - который ну никак не побороть, или какой-то мелочи не хватает.
Хотя по скорости с небольшим объемом объектов (1-2 тыс.) мне очень нравится. Обажаю конфигуратор и ненавижу отладчик -где ничего нельзя увидеть, а в 8-ке можно все выловить там
  
Наверх
 
IP записан
 
CaSH
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 02. Мая 2011
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #18 - 04. Октября 2011 :: 11:59
Печать  
А Перехватчик при программной записи справочника/документа - не отлавливает никак? А то мне нужно все запретить, но не через права
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #19 - 05. Октября 2011 :: 03:18
Печать  
CaSH писал(а) 04. Октября 2011 :: 11:59:
А Перехватчик при программной записи справочника/документа - не отлавливает никак? А то мне нужно все запретить, но не через права


Одну из лучших реализаций в этом направлении, которую я встречал (хоть и весьма и весьма громоздкую):
Есть класс ТДокумент : Документ
Для каждого вида документа есть класс ТДокумент.<Вид> : ТДокумент.

Далее, вся програмная работа с документами ведется через ТДокумент.<Вид>
(т.е. Док = СоздатьОбъект("Документ.ПриходныйОрдер"); заменяется на
Док = СоздатьОбъект("ТДокумент.ПриходныйОрдер");
Док.НазначитьКонтекст(СоздатьОбъект("Документ.ПриходныйОрдер"));

или даже в конструкторе сделать замену Сам(Контекст).ЗаменитьБазовыйОбъект("Документ", СоздатьОбъект(...)))

а дальше переопределяются методы Новый(), Записать(), etc - в которых делаешь все проверки, которые нужно.

Дополнительно, можно прикрутить перехватчик и вынести, скажем, проверки заполнения документа в отдельный метод класса, который будет вызываться перехватчиком в форме и переопределенным методом Записать().

Короче, простор для фантизии безграничен.
Хотя кода придется писать немало.
  
Наверх
 
IP записан
 
CaSH
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 02. Мая 2011
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #20 - 05. Октября 2011 :: 08:36
Печать  
А как найти этот класс? Ссылки нема?
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #21 - 05. Октября 2011 :: 10:12
Печать  
А ХЗ - скорее всего, это в публичный доступ не выкладывалось.

Да и что там выложить - только ТДокумент с каким-то базовым функционалом?
всякие ТДокумент.<Вид> - они под конкретную специфику пишутся...
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #22 - 05. Октября 2011 :: 10:18
Печать  
Примерно так выглядит:


Код
Выбрать все
///******************************** Павел  30.11.2010
Функция ПроверкаЗаполнения() Экспорт
	Сам = Сам(Контекст);
	Сам.Ошибка = "";
	Сам.ИмяОшибочногоПоля = "";

	Возврат 1;
КонецФункции	// ПроверкаЗаполнения
///******************************** Павел  30.11.2010

///******************************** Павел  30.11.2010
Функция ПриЗаписи() Экспорт
	Сам = Сам(Контекст);
	Если Сам.ПроверкаЗаполнения() <> 1 Тогда
		Возврат 0;
	КонецЕсли;

	Если фЭтоКонтекстФормы = 1 Тогда
		ПриИзмененииОбъектаМОД(Сам.ПолучитьБазовыйКласс("ГрупповойКонтекст"), Сам.ТекущийДокумент(), Сам.ДатаДок);
	КонецЕсли;
	Возврат 1;
КонецФункции
///******************************** Павел  30.11.2010

///******************************** Павел  30.11.2010
Функция ПослеЗаписи() Экспорт
	Сам = Сам(Контекст);
	Если (Строка(идДок9) = "     0   ") Или (Строка(идДок13) = "   0     0   ") Тогда
		//Если пытались получать идДок9 или идДок13 до записи объекта - нужно обновить значения
		ТекДок = Сам.ТекущийДокумент();
		идДок9 = РадугаСервис.ЗначениеВСтрокуБД(ТекДок);
		идДок13 = РадугаСервис.ЗначениеВДлиннуюСтрокуБД(ТекДок);
	КонецЕсли;

	глМенеджерСобытийДокументов.ПослатьСобытие(Контекст, "Запись");

	Если фЭтоКонтекстФормы = 1 Тогда
		Сам.УправлениеФормой();
	КонецЕсли;

	Возврат 1;
КонецФункции
///******************************** Павел  30.11.2010

///******************************** Павел  28.04.2011
Функция Записать() Экспорт
	Сам = Сам(Контекст);
	Сам.Ошибка = "";

	Если Сам.ПриЗаписи() = 0 Тогда
		Возврат 0;
	КонецЕсли;

	докБаза = Сам.ПолучитьБазовыйКласс("Документ");
	Выбран = докБаза.Выбран();


	глУстановитьВремяДокумента(докБаза);

	Попытка
		//докБаза.Записать();
		ОбъектЗаписать(докБаза);
	Исключение
		Сам.Ошибка = ОписаниеОшибки();
		Сообщить(Лев(Сам.Ошибка, 250), "!");
		//#curmeth
		//#exinfo

		Если Выбран = 1 Тогда
			ЗаписьЖурналаРегистрации("", "Docs", "DocNotWrite", докБаза.ТекущийДокумент(), 2);
		КонецЕсли;
		Возврат 0;
	КонецПопытки;

	Если Выбран = 0 Тогда
		ЗаписьЖурналаРегистрации("", "Docs", "DocWriteNew", докБаза.ТекущийДокумент(), 2);
	Иначе
		ЗаписьЖурналаРегистрации("", "Docs", "DocWrite", докБаза.ТекущийДокумент(), 2);
	КонецЕсли;

	Если Сам.ПослеЗаписи() = 0 Тогда
		Возврат 0;
	КонецЕсли;

	Возврат 1;
КонецФункции	// Записать
///******************************** Павел  28.04.2011
 



ну и во всяких ТДокумент.<Вид> ПроверкаЗаполнения() выглядит примерно так:

Код
Выбрать все
///******************************** Павел  05.08.2011
Функция ПроверкаЗаполнения() Экспорт
	Сам = Сам(Контекст);

	Если Сам.ПолучитьБазовыйКласс().ПроверкаЗаполнения() <> 1 Тогда
		Возврат 0;
	КонецЕсли;

	//пошли проверки класса наследника

	Возврат 1;
КонецФункции	// ПроверкаЗаполнения
///******************************** Павел  05.08.2011
 

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


1C++ rocks!

Сообщений: 43
Зарегистрирован: 02. Мая 2011
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #23 - 05. Октября 2011 :: 22:07
Печать  
Да без каког-то рабочего примера я такое сам не осилю  Смущённый Я со своим перехватчиком сколько намучился то, в каждом скачанном примере он по своему реализован и нигде не написано почему так а не этак.
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


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

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #24 - 06. Октября 2011 :: 01:01
Печать  
А наследование системных классов документов и справочников не лучше будет, ну например как здесь описано: http://www.vsionaidu.ru/index.php?option=com_fireboard&Itemid=34&func=view&id=23...

CaSH, по ссылке рабочего примера нет, но фактически на пальцах человек объяснил, всё должно быть понятно - Метаданные.prm (описание классов) генерится при начале работы системы до загрузки 1CPP, а Документ.txt и Справочник.txt (реализация классов) ты сам создаешь по указанному пути, и пишешь в них ну хотя бы то что в примере указано.

P.S. Только я бы конечно Метаданные.prm не каждый раз генерил, а сначала проверял есть ли изменения в метаданных по сравнению с последним записанным описанием классов. А то так можно нарваться на коллизию совместного использования. И еще где-то здесь на форуме есть примеры по динамическому созданию классов "на лету" - оно пожалуй лучше и правильнее будет.
  
Наверх
 
IP записан
 
CaSH
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 43
Зарегистрирован: 02. Мая 2011
Re: Почему нельзя получить значение атрибута формы если Ид=Наименование?
Ответ #25 - 06. Октября 2011 :: 08:14
Печать  
Это уже лучше! Спасибки. А prm я так всегда и делал на лету, и только если есть изменения.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать