Имя: Пароль:
1C
1С v8
Подскажите с переменными
0 Garikus
 
23.06.14
08:53
ИтогМасса = Груз;
    
            Если (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж0520П") или
                  (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П0520П") или
                 (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П0520К") или
                 (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж0520К") или
                 (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ0520К") или
                  (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П0520Щ") или
                  (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж0520Щ") или
                  (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ0520Щ") или              
                  (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ0520П")
            
        Тогда
            
        Мест        = ЭлементыФормы.Товары.ТекущиеДанные.Количество;
        Масса        = Мест * 17/1000;
                
        
    КонецЕсли;
        
        Если (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж156П") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П156П") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ156П") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж156К") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П156К") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ156К") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж156Щ") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П156Щ") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ156Щ")
            
        Тогда
            
        Мест        = ЭлементыФормы.Товары.ТекущиеДанные.Количество/0.9;
        Масса        = Мест * 9/1000;
        КонецЕсли;
        Если (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж0512П") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П0512П") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ0512П") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж0512К") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П0512К") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ0512К") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Ж0512Щ") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "П0512Щ") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "Щ0512Щ")
            
        Тогда
            
        Мест        = ЭлементыФормы.Товары.ТекущиеДанные.Количество/0.6;
        Масса        = Мест * 6/1000;
        КонецЕсли;

        Если (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ЖР")  или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ПРП") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ЩРП") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ЖРК") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ПРК") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ЩРК") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ЖРЩ") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ПРЩ") или
             (ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул = "ЩР")
        Тогда
            
        Мест        = ЭлементыФормы.Товары.ТекущиеДанные.Количество/5;
        Масса        = Мест * 63/1000;
        КонецЕсли;

        ИтогМасса = ИтогМасса + Масса;
        
    
        
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    
    Тон =ЭлементыФормы.Водитель.Значение.Тоннаж;

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    Если ИтогМасса > Тон Тогда
        Предупреждение("Вес в накладной превышает грузоподъемность автомобиля", 5, "Неправильный вес");
        КонецЕсли;    
    ЭлементыФормы.Груз.Значение = ИтогМасса;


Есть такой код, выполняется при изменении количества в табличном документе. Но ИтогМасса = ИтогМасса + Масса; выдает ошибку что не числовая переменная.

Если ИтогМасса =0; в начале прописать то работает, но соответственно начинает не правильно считать. Как быть?

Нужно чтобы при изменении количества считался общий вес, наведите на умную мыслю)
1 butterbean
 
23.06.14
08:55
значит Груз не число
2 Garikus
 
23.06.14
08:56
(1) Груз имеет реквизит число, мб попробывать ИтогМасса = Число(Груз);
3 Godofsin
 
23.06.14
08:57
Для начала разобраться какого типа "Груз"
4 kosts
 
23.06.14
08:57
(0) Может быть на форме есть такие реквизиты с не числовым типом.
5 Enterprise
 
23.06.14
08:57
(2) Проверь "Груз"
6 Necessitudo
 
23.06.14
09:00
(0) Господи, какой гамнокод. Нахрена писать по тыще раз ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул? Вот написал такое - теперь сам разбирайся.
7 kosts
 
23.06.14
09:00
Еще нет уверенности, что Масса обязательно будет заполнено. Возможно не сработало ни одно условие
8 Garikus
 
23.06.14
09:02
А запросом как то можно с текущего не записанного документа получить данные?
9 Ненавижу 1С
 
гуру
23.06.14
09:09
код красив и изящен я считаю
10 Godofsin
 
23.06.14
09:10
(8) Ну во врем. таблицу запихай
11 butterbean
 
23.06.14
09:12
(9) дада, в 100500 вызовах ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул и строках типа "ПРЩ" и "ЖРЩ" есть какой-то шарм
12 Enterprise
 
23.06.14
09:13
(9) тонко
13 kosts
 
23.06.14
09:14
Первое приближение

ИтогМасса = Груз;

Артикул = ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура.Артикул;

Если Найти(",Ж0520П,П0520П,П0520К,Ж0520К,Щ0520К,П0520Щ,Ж0520Щ,Щ0520Щ,Щ0520П,", ","+Артикул+",") > 0 Тогда
    КоэффициентМест     = 1;
    КоэффициентМассы    = 17/1000;
ИначеЕсли Найти(",Ж156П,П156П,Щ156П,Ж156К,П156К,Щ156К,Ж156Щ,П156Щ,Щ156Щ,", ","+Артикул+",") > 0 Тогда
    КоэффициентМест        = 0.9;
    КоэффициентМассы    = 9/1000;
ИначеЕсли Найти(",Ж0512П,П0512П,Щ0512П,Ж0512К,П0512К,Щ0512К,Ж0512Щ,П0512Щ,Щ0512Щ,", ","+Артикул+",") > 0 Тогда
    КоэффициентМест        = 0.6;
    КоэффициентМассы    = 6/1000;
ИначеЕсли Найти(",ЖР,ПРП,ЩРП,ЖРК,ПРК,ЩРК,ЖРЩ,ПРЩ,ЩР,", ","+Артикул+",") > 0 Тогда
    КоэффициентМест        = 5;
    КоэффициентМассы    = 63/1000;
Иначе
    ВызватьИсключение "Не обработан вид артикула " + Артикул;
КонецЕсли;

Мест    = ЭлементыФормы.Товары.ТекущиеДанные.Количество / КоэффициентМест;
Масса    = Мест * КоэффициентМассы;

ИтогМасса = ИтогМасса + Масса;

Тон = ЭлементыФормы.Водитель.Значение.Тоннаж;

Если ИтогМасса > Тон Тогда
    Предупреждение("Вес в накладной превышает грузоподъемность автомобиля", 5, "Неправильный вес");
КонецЕсли;    

ЭлементыФормы.Груз.Значение = ИтогМасса;
14 kosts
 
23.06.14
09:20
Тут сурьезная ошибка, изменение исходных данных, если расчет будет несколько раз, то в грузе будут очень правильные данные. Нужно добавить еще один реквизит.

ИтогМасса = Груз;
...
ЭлементыФормы.Груз.Значение = ИтогМасса;
15 butterbean
 
23.06.14
09:22
(14) шо за бред??
16 Ненавижу 1С
 
гуру
23.06.14
09:27
никому не кажется, что все эти коэффициенты надо хранить в БД?
17 kosts
 
23.06.14
09:28
(15) Если кажется, что в вашем коде нет ошибки, это не значит, что её там нету.
18 Garikus
 
23.06.14
09:30
ИтогМасса = 0;
Масса = 0;
    Для  Каждого Стр из Товары  цикл
        Если     (Стр.Номенклатура.Артикул = "Ж0520П") или
                  (Стр.Номенклатура.Артикул = "П0520П") или
                 (Стр.Номенклатура.Артикул = "П0520К") или
                 (Стр.Номенклатура.Артикул = "Ж0520К") или
                 (Стр.Номенклатура.Артикул = "Щ0520К") или
                  (Стр.Номенклатура.Артикул = "П0520Щ") или
                  (Стр.Номенклатура.Артикул = "Ж0520Щ") или
                  (Стр.Номенклатура.Артикул = "Щ0520Щ") или              
                  (Стр.Номенклатура.Артикул = "Щ0520П")
            
        Тогда
            
        Мест        = Стр.Количество;
        Масса        = Мест * 17/1000;
                
        
    КонецЕсли;
        
        Если (Стр.Номенклатура.Артикул = "Ж156П") или
             (Стр.Номенклатура.Артикул = "П156П") или
             (Стр.Номенклатура.Артикул = "Щ156П") или
             (Стр.Номенклатура.Артикул = "Ж156К") или
             (Стр.Номенклатура.Артикул = "П156К") или
             (Стр.Номенклатура.Артикул = "Щ156К") или
             (Стр.Номенклатура.Артикул = "Ж156Щ") или
             (Стр.Номенклатура.Артикул = "П156Щ") или
             (Стр.Номенклатура.Артикул = "Щ156Щ")
            
        Тогда
            
        Мест        = Стр.Количество/0.9;
        Масса        = Мест * 9/1000;
        КонецЕсли;
        Если (Стр.Номенклатура.Артикул = "Ж0512П") или
             (Стр.Номенклатура.Артикул = "П0512П") или
             (Стр.Номенклатура.Артикул = "Щ0512П") или
             (Стр.Номенклатура.Артикул = "Ж0512К") или
             (Стр.Номенклатура.Артикул = "П0512К") или
             (Стр.Номенклатура.Артикул = "Щ0512К") или
             (Стр.Номенклатура.Артикул = "Ж0512Щ") или
             (Стр.Номенклатура.Артикул = "П0512Щ") или
             (Стр.Номенклатура.Артикул = "Щ0512Щ")
            
        Тогда
            
        Мест        = Стр.Количество/0.6;
        Масса        = Мест * 6/1000;
        КонецЕсли;

        Если (Стр.Номенклатура.Артикул = "ЖР")  или
             (Стр.Номенклатура.Артикул = "ПРП") или
             (Стр.Номенклатура.Артикул = "ЩРП") или
             (Стр.Номенклатура.Артикул = "ЖРК") или
             (Стр.Номенклатура.Артикул = "ПРК") или
             (Стр.Номенклатура.Артикул = "ЩРК") или
             (Стр.Номенклатура.Артикул = "ЖРЩ") или
             (Стр.Номенклатура.Артикул = "ПРЩ") или
             (Стр.Номенклатура.Артикул = "ЩР")
        Тогда
            
        Мест        = Стр.Количество/5;
        Масса        = Мест * 63/1000;
        КонецЕсли;
            ИтогМасса = ИтогМасса + Масса;
        
    
        
         ВыборкаДетальныеЗаписи
    Тон =Водитель.тоннаж;
КонецЦикла;
        Если ИтогМасса > Тон Тогда
        Сообщить("Вес в накладной превышает грузоподъемность автомобиля");
    КонецЕсли;    
    ЭлементыФормы.Груз.Значение = ИтогМасса;

Вставил следующий код в процедуру обновления подвала и все хорошо работает) Всем спасибо
19 kosts
 
23.06.14
09:37
(18) Скажи какую автотранспортную компанию автоматизируешь, не хочу воспользоваться её услугами. Мало ли ...
20 Garikus
 
23.06.14
09:44
(19) Это не автотранспортная компания) так что можешь быть спокоен)
21 StaticUnsafe
 
23.06.14
09:56
(0) Артикул = "Ж0520П"
серьёзно?
22 samozvanec
 
23.06.14
10:06
(0) у вас что, 36 артикулов? всегда было и всегда будет?
23 Garikus
 
23.06.14
12:02
(22) Артикул это сокращение номенклатурного названия, введен для того что на данны момент работает 15 баз, и во всех доработки одни и теже. Вот и пришлось сокращать и вводить артикулы во всех базах, а сокращение такое чтобы не мудорствовать, как бы просто и понятно.
24 samozvanec
 
23.06.14
12:08
(23) а не проще какое-нибудь перечисление запилить, или справочник? я так понял, вариантов обработки всего 4?
25 Segate
 
23.06.14
12:15
(22) заведи справочник реквизитом коэфициент и тч список артикулов. и не пиши гунокод. Или регистр, или что угодно, где ты будешь хранить эти данные
26 mxs089
 
23.06.14
12:21
создай свойство, впиши туда коэф. массы
27 samozvanec
 
23.06.14
12:34
(25) не заведу. не пишу. не буду)
28 Garikus
 
23.06.14
13:07
Я просто разово занимаюсь доработками как умею, я вообще сисадмином работаю и урывками когда приспичит приходится в 1С воять