Имя: Пароль:
1C
1С v8
Цикл Пока и ошибка "Значение поля свойства не может быть пустым"
0 1СникомХочу Стать
 
20.02.20
11:50
Здравствуйте, нужна ваша подсказка: моя обработка берет данные из справочника (спр ЕдиницыИзмерения Объем) и записывает их в регистр сведений (РегистрыСведений.ЗначенияСвойствОбъектов), но сыпется ошибка "Значение поля свойства не может быть пустым"...

Как можно добавить исключение в Цикл Пока - если значение пустое и тогда пропустить его и перейти на следующий?


Функция ЗаполнениеСвойстваОбъемМ3()
    
ОбъемМ3 = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00158");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |         Номенклатура.ЕдиницаХраненияОстатков.Владелец КАК Номенклатура,
    |         Номенклатура.ЕдиницаХраненияОстатков.Объем КАК Объем
    |ИЗ
    |         Справочник.Номенклатура КАК Номенклатура";
                
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
        МенеджерЗаписи.Свойство = ОбъемМ3 ;
        МенеджерЗаписи.Прочитать();
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
        МенеджерЗаписи.Свойство = ОбъемМ3 ;
        
        МенеджерЗаписи.Значение = ВыборкаДетальныеЗаписи.Объем;
        
        МенеджерЗаписи.Записать();
        
    Если ОбъемМ3.Пустая()  Тогда
     ВыборкаДетальныеЗаписи.Следующий();
         // Продолжить; тоже не помогает
    КонецЕсли;    
        
    КонецЦикла;
    

КонецФункции
1 ДенисЧ
 
20.02.20
11:51
Условие если перенеси в начало цикла и всё.
2 1СникомХочу Стать
 
20.02.20
11:56
(1) так? не получается

   РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Если НЕ ОбъемМ3.Пустая()  Тогда
    
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
            
            МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
            МенеджерЗаписи.Свойство = ОбъемМ3 ;
            МенеджерЗаписи.Прочитать();
            МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
            МенеджерЗаписи.Свойство = ОбъемМ3 ;
            
            МенеджерЗаписи.Значение = ВыборкаДетальныеЗаписи.Объем;
            МенеджерЗаписи.Записать();
        КонецЦикла;
        
    Иначе ВыборкаДетальныеЗаписи.Следующий();    
    КонецЕсли;
3 ДенисЧ
 
20.02.20
11:58
В начало цикла, а не перед циклом...

Вроде по-русски пишу...
4 vicof
 
20.02.20
12:00
ОбъемМ3 = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00158");
Если ОбъемМ3.Пустая()  Тогда
    Возврат;
КонецЕсли;
5 vicof
 
20.02.20
12:01
И из цикла все условия убрать
6 1СникомХочу Стать
 
20.02.20
12:13
(4)  если так, то ошибка Ожидается выражение
    Возврат<<?>>; (Проверка: Толстый клиент (обычное приложение))


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

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |         Номенклатура.ЕдиницаХраненияОстатков.Владелец КАК Номенклатура,
    |         Номенклатура.ЕдиницаХраненияОстатков.Объем КАК Объем
    |ИЗ
    |         Справочник.Номенклатура КАК Номенклатура";
                
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
        МенеджерЗаписи.Свойство = ОбъемМ3 ;
        МенеджерЗаписи.Прочитать();
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
        МенеджерЗаписи.Свойство = ОбъемМ3 ;
        
        МенеджерЗаписи.Значение = ВыборкаДетальныеЗаписи.Объем;
        
        МенеджерЗаписи.Записать();            
    КонецЦикла;
    

КонецФункции
7 1СникомХочу Стать
 
20.02.20
12:14
(5) сорри одним сообщением всё,  если так, то ошибка "Ожидается выражение Возврат"
8 catena
 
20.02.20
12:24
(7)А для чего там функция, что в принципе планировалось возвращать?
9 1СникомХочу Стать
 
20.02.20
12:51
(8) (((( Так тоже ошибка "Значение поля свойства не может быть пустым", что не так?


ОбъемМ3 = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00158");
Если ОбъемМ3.Пустая() Тогда
    Возврат ЗаполнениеСвойстваОбъемМ3();
КонецЕсли;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |         Номенклатура.ЕдиницаХраненияОстатков.Владелец КАК Номенклатура,
    |         Номенклатура.ЕдиницаХраненияОстатков.Объем КАК Объем
    |ИЗ
    |         Справочник.Номенклатура КАК Номенклатура";
                
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
        МенеджерЗаписи.Свойство = ОбъемМ3 ;
        МенеджерЗаписи.Прочитать();
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
        МенеджерЗаписи.Свойство = ОбъемМ3 ;
        
        МенеджерЗаписи.Значение = ВыборкаДетальныеЗаписи.Объем;
        
        МенеджерЗаписи.Записать();            
    КонецЦикла;
10 hhhh
 
20.02.20
12:55
(9) Возврат Неопределено;
11 catena
 
20.02.20
12:56
(9)За нахрена эта рекурсия? Вы думаете, если вызовете еще раз -дцать, то по коду все-таки найдется?
12 catena
 
20.02.20
12:57
+И зачем делать функцию, если не предполагаете ничего возвращать?
13 Kigo_Kigo
 
20.02.20
12:58
ОбъемМ3 = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00158");
Сообщить(ОбъемМ3);
что говорит?
14 1СникомХочу Стать
 
20.02.20
12:58
(10) такая же ошибка даже если Возврат Нопределено;
15 D_E_S_131
 
20.02.20
13:09
(14) Найдите уже глобальным поискам по модулям, где выдается сообщение "Значение поля свойства не может быть пустым"
16 1СникомХочу Стать
 
20.02.20
13:12
(13) Так говорит как надо НаименованиеСвойства
ОбъемВкубе = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00158");
Сообщить(ОбъемВкубе);
17 1СникомХочу Стать
 
20.02.20
13:13
(13) а если полностью то выдаёт ошибку - Запись не верна! Значение поля "Свойство" не может быть пустым!

ОбъемВкубе = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("00158");
Если ОбъемВкубе.Пустая() Тогда
    Возврат Неопределено;
КонецЕсли;

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |         Номенклатура.ЕдиницаХраненияОстатков.Владелец КАК Номенклатура,
    |         Номенклатура.ЕдиницаХраненияОстатков.Объем КАК Объем
    |ИЗ
    |         Справочник.Номенклатура КАК Номенклатура";
                
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
        МенеджерЗаписи.Свойство = ОбъемВкубе ;
        МенеджерЗаписи.Прочитать();
        МенеджерЗаписи.Объект = ВыборкаДетальныеЗаписи.Номенклатура;
        МенеджерЗаписи.Свойство = ОбъемВкубе ;
        
        МенеджерЗаписи.Значение = ВыборкаДетальныеЗаписи.Объем;
        
        МенеджерЗаписи.Записать();            
    КонецЦикла;
18 vicof
 
20.02.20
13:24
у тебя есть реквизит на форме ОбъемВКубе. Ставлю сотку.
19 vicof
 
20.02.20
13:24
Причем не того типа, который нужен
20 1СникомХочу Стать
 
20.02.20
13:29
(18) Да и он числового Типа, а свойство Строка
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший