Имя: Пароль:
1C
1С v8
Конструктор не обнаружен
0 dreamoff
 
12.10.11
11:39
подскажите пожалуйста,чем может быть вызвана такая ошибка?
{ОбщийМодуль.ОбщегоНазначения(615)}: Конструктор не обнаружен (Форма)
       Если Значение = Новый(ТипЗначения) Тогда

ошибка выпадает при попытки записать сф
1 Господин ПЖ
 
12.10.11
11:40
вроде по русски написано... "Конструктор не обнаружен"
2 Ненавижу 1С
 
гуру
12.10.11
11:40
интересно, а конструктор чего вы пытаетесь взывать?

Если Значение = Новый(ТипЗначения) Тогда

анонимного типа что ли? )))
3 dreamoff
 
12.10.11
11:41
(1)я уже прочитал,спасибо)))
(2)вот такая функция,писал не я
Результат   = Ложь;
   ТипЗначения = ТипЗнч(Значение);

   // Сначала примитивные типы
   Если Значение = Неопределено Тогда
       Результат = Истина;

   ИначеЕсли Значение = NULL Тогда
       Результат = Истина;

   ИначеЕсли ТипЗначения = Тип("Строка") Тогда
       Если СокрЛП(Значение) = "" Тогда
           Результат = Истина;
       КонецЕсли;

   ИначеЕсли ТипЗначения = Тип("Число") Тогда
       Если Значение = 0 Тогда
           Результат = Истина;
       КонецЕсли;

   ИначеЕсли ТипЗначения = Тип("Дата") Тогда
       Если Значение = Дата('00010101') Тогда
           Результат = Истина;
       КонецЕсли;

   ИначеЕсли ТипЗначения = Тип("Булево") Тогда
       Результат = Ложь; // Булево будем считать не пустым

       //Отдельное определение, так как конструкторов данного типа не существует    
   ИначеЕсли ТипЗначения = Тип("РежимПроведенияДокумента") Тогда

       Если Значение = РежимПроведенияДокумента.Неоперативный или Значение = РежимПроведенияДокумента.Оперативный тогда
           Результат = Ложь;
       КонецЕсли;

       // Для остальных будем считать значение пустым, если оно равно
       // дефолтному значению своего типа

   Иначе

       Если Значение = Новый(ТипЗначения) Тогда
           Результат = Истина;
       КонецЕсли;

   КонецЕсли;

   Возврат Результат;
4 unregistered
 
12.10.11
11:42
Используйте:

Значение = ТипЗначения.ПривестиЗначение();
5 Wobland
 
12.10.11
11:43
(3) феерично. если некий новый неизвестный тип значения, то возвращаем истину?
6 Господин ПЖ
 
12.10.11
11:44
(3) забейте автору сего в голову гвоздь...
7 unregistered
 
12.10.11
11:44
Я так понимаю это функция ЗначениеНеЗаполнено?
8 dreamoff
 
12.10.11
11:44
(6) знать бы еще кто автор
9 Wobland
 
12.10.11
11:45
(7) дополненная РежимомПроведения (на зачем?)
10 dreamoff
 
12.10.11
11:46
(7) ага
11 catena
 
12.10.11
11:46
Дак это ж функция ЗначениеНеЗаполнено :)
12 unregistered
 
12.10.11
11:46
(6) Эта функция из типовых 8.0 до появления функции ЗначениеЗаполнено().
13 catena
 
12.10.11
11:47
(9)У меня тоже есть такой кусок...
14 PR
 
12.10.11
11:48
(6) Гы :))
Это вроде типовой от 1С :))
15 Ненавижу 1С
 
гуру
12.10.11
11:49
ага, только передали тип, не имеющий конструктора
16 Steel_Wheel
 
12.10.11
11:50
(7) Она родимая
(0) А если заменить вызов на "Не ЗначениеЗаполнено()"? Правда, оно булеву "Ложь" считает незаполненной,
17 Reset
 
12.10.11
11:52
(0) Решается заменой приведенного текста в функции на "Возврат Не ЗначениеЗаполнено(Значение);
18 Wobland
 
12.10.11
11:54
(17) дописать СтрЗаменить() в конце?
19 Reset
 
12.10.11
11:55
(18) нет, какой стрзаменить.. у меня кавычка лишняя там
20 Синий зуб
 
12.10.11
11:55
Или (17) или поставь точку останова и глянь, че там за тип.
21 unregistered
 
12.10.11
11:56
(16) >> Правда, оно булеву "Ложь" считает незаполненной

И это правильно :))

Можно сделать так:

Результат   = Ложь;
ТипЗначения = ТипЗнч(Значение);
// Сначала примитивные типы
Если Значение = NULL Тогда
   Результат = Истина;
ИначеЕсли ТипЗначения = Тип("Булево") Тогда
   Результат = Ложь; // Булево будем считать не пустым
//Отдельное определение, так как конструкторов данного типа не существует    
ИначеЕсли ТипЗначения = Тип("РежимПроведенияДокумента") Тогда
   Если Значение = РежимПроведенияДокумента.Неоперативный или Значение = РежимПроведенияДокумента.Оперативный тогда
      Результат = Ложь;
   КонецЕсли;
Иначе
   Результат = ЗначениеЗаполнено(Значение);
КонецЕсли;
Возврат Результат;
22 Wobland
 
12.10.11
11:56
(19) шутку не понял
23 unregistered
 
12.10.11
11:57
*(21) Извиняюсь конечно "Результат = ЗначениеЗаполнено(Значение)" читать как "Результат = НЕ ЗначениеЗаполнено(Значение)"
24 Reset
 
12.10.11
11:58
(22) Какую шутку??
25 dreamoff
 
12.10.11
11:58
выдает
Проверка мутабельных значений на заполненность не поддерживается
в "значение" форма
26 unregistered
 
12.10.11
11:59
(25) Ты туда объект кинул.
27 unregistered
 
12.10.11
12:00
Функция ЗначениеЗаполнено не работает с мутабельными значениями.
28 Reset
 
12.10.11
12:00
(25) в попытка/исключение заключи и в исключении возвращай Ложь (=заполнено)
29 Reset
 
12.10.11
12:01
Короче, полный текст (автор 1С, с махрового года)

Функция ЗначениеНеЗаполнено(Значение) Экспорт
   Попытка
       Возврат НЕ(ЗначениеЗаполнено(Значение));
   Исключение
       Возврат Ложь;
   КонецПопытки;
КонецФункции;
30 Reset
 
12.10.11
12:01
без ; в конце
31 dreamoff
 
12.10.11
12:02
(28) так и сделал
32 Alexandr Puzakov
 
12.10.11
12:02
Насколько я знаю, конструкция Новый() сделана для исключительных случаев, и пользоваться ею не рекомендуется. Нужно так:

НовыйЭлемент = Справочники.НашСправочник.СоздатьЭлемент();

НовыйДокумент = Документы.НашДокумент.СоздатьДокумент();
33 ShoGUN
 
12.10.11
12:05
(32) конструкция Новый создана для самых обычных случаев - вызова конструктора, просто для справочников и документов не существует обычного конструктора, они не имеют смысла отдельно от базы данных.
34 unregistered
 
12.10.11
12:05
(32) Бред, не имеющий отношения к топику. Да и к жизни тоже. Что ты будешь делать, если тебе нужна пустая ссылка, а не новый объект?
Основная теорема систематики: Новые системы плодят новые проблемы.