Имя: Пароль:
1C
1С v8
Странный баг после перехода на платформу старше 8.3.9.2170
0 alex1974
 
20.04.17
09:19
Есть вот такой простенький код:

    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                          |    хр.Субконто1.Код КАК Код,
                          |    СУММА(хр.КоличествоКонечныйРазвернутыйОстатокДт) КАК Количество
                          |ИЗ
                          |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, &Дата, , ДвиженияИГраницыПериода, Счет = &Счет, , ) КАК хр
                          |                              
                          |ГДЕ
                          |    хр.Субконто1.Код В(&НоменклатураКод) И хр.Субконто"+НомерТипаСубконто+".Код = &СкладКод                              
                          |
                          |СГРУППИРОВАТЬ ПО
                          |    хр.Субконто1.Код";
    Запрос.УстановитьПараметр("Дата", НачалоДня(Объект.Дата1));
    Запрос.УстановитьПараметр("НоменклатураКод", МассивТоваровДляЗапроса);
    Запрос.УстановитьПараметр("Счет", ББСч4101);
    Запрос.УстановитьПараметр("СкладКод", Объект.СкладОтправитель.Код);
    ОстаткиТовара = Запрос.Выполнить().Выгрузить();
    
    Если ОстаткиТовара.Количество() = 0 Тогда
        Сообщить("Остатков указанного товара на складе-отправителе нет");
        Возврат;
    КонецЕсли;    
    
    Для Каждого стр Из Объект.Товары Цикл
        Если стр.Количество = 0 Тогда
            Продолжить;
        КонецЕсли;
        НайдКод = ОстаткиТовара.Найти(стр.Код, "Код");
        Если НайдКод <> Неопределено Тогда
            Если стр.Количество > НайдКод.Количество Тогда
                стр.Количество = НайдКод.Количество;
            КонецЕсли;
        Иначе
            стр.Количество = 0;    
        КонецЕсли;
    КонецЦикла;    


Эта обработка залезает в удаленную базу, берет там остатки товара и сравнивает их количество со своей табличной частью.
Обе таблицы в тесте маленькие - по 700 строк, везде тип поля Количество = "Число" В отладчике в обеих таблицах всё чисто и красиво, только определенные
числовые значения.
Этот кусок всегда работал и вот вдруг после перехода на платформу 8.3.9.2233 начала намертво падать 1С в момент вот этого присвоения
стр.Количество = НайдКод.Количество; примерно через 50 итераций цикла.

Обновление до последней версии 8.3.10 не помогло.
А знаете, что помогло?
1 Гипервизор
 
20.04.17
09:26
откат на 8.3.9.2170?
2 alex1974
 
20.04.17
09:29
Ладно не буду томить. Пришлось насильно установить тип. Хотя там кроме числа ничего не могло быть.

стр.Количество = Число(НайдКод.Количество);
3 Мимохожий Однако
 
20.04.17
09:33
Иногда помогает регистрация com...dll после установки новой платформы.
4 alex1974
 
20.04.17
09:44
А каким боком на операцию присвоения в цикле может влиять регистрация длл? Там же простой тип. Хотя... Кто его знает, что там в "ейном нутре" - отладчик показывает число, а на самом деле это неведома зверушка.
Разумеется, я нашел строку, на которой падает платформа. Никакого криминала на первый взгляд, самое обычное числовое значение в поле "Количество".
5 Про100Филя
 
20.04.17
10:00
(0) v83COMConnector зарегай заново.
6 НЕА123
 
20.04.17
10:04
(0)
ОстаткиТовара.Найти(стр.Код, "Код")
вернул пустую ссылку.
7 НЕА123
 
20.04.17
10:08
(6) сторно.
ЗЫ не проснулся
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший