Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Функция в условии

v7: Функция в условии
Я
   Mafiozaa
 
06.10.20 - 09:36
Приветствую есть функция
Функция глПолучитьТоварПоШтрихкоду(пШтрихкод, пТовар, пЕдиница, пКоличество) Экспорт
    Перем ТоварНайден;
    Штрихкод = СокрЛП(пШтрихкод);
    // Определение типа штрих-кода
    ПрефиксШтрихкода = глПрефиксШтрихкода();
    Если ПустоеЗначение(ПрефиксШтрихкода) = 0 Тогда
        Если Найти(ПрефиксШтрихкода, Лев(Штрихкод, 1)) <> 0 Тогда
            // Удаляем спец. символ из штрих-кода
            Штрихкод = Сред(Штрихкод, 2);
        Иначе
            Сообщить("Формат считанного штрих-кода не предназначен для товаров");
            Возврат 0;
        КонецЕсли;
    КонецЕсли;
    
    // идентификация полученного штрихкода
    Если Лев(Штрихкод, 2) = глПрефиксВесовогоШтрихкода Тогда
        // Используется свой внутренний штрих-код товара
        // Штрих-код построен по коду товара и весу
        ОбЕдиница = СоздатьОбъект("Справочник.Единицы");
        
        ВремШтрихкод = глСформироватьШтрихкод(глПрефиксВесовогоШтрихкода, Сред(Штрихкод, 3, 5) + "00000");
        Рез = ОбЕдиница.НайтиПоРеквизиту("ШтрихКод", ВремШтрихкод, 1);
        
        Если Рез = 1 Тогда
            пТовар        = ОбЕдиница.Владелец;
            пЕдиница    = ОбЕдиница.ТекущийЭлемент();
            пКоличество    = Число(Сред(Штрихкод, 8, 5)) / 1000;
        КонецЕсли;
    Иначе
        // Используется основной штрих-код товара
        // или свой внутренний штрих-код товара с префиксом "20"
        ОбЕдиница = СоздатьОбъект("Справочник.Единицы");
        Рез = ОбЕдиница.НайтиПоРеквизиту("ШтрихКод", Штрихкод, 1);
        ИспользоватьЮнискан = глЗначениеПоУмолчанию("СпособыИспользованияСинхронизацииПоШтрихкодам");
        
        Если Рез = 1 Тогда
            пТовар        = ОбЕдиница.Владелец;
            пЕдиница    = ОбЕдиница.ТекущийЭлемент();
            пКоличество    = 1;

        ИначеЕсли (ИспользоватьЮнискан = Перечисление.СпособыИспользованияСинхронизацииПоШтрихкодам.ЗапрашиватьОтсутствующие)
               или (ИспользоватьЮнискан = Перечисление.СпособыИспользованияСинхронизацииПоШтрихкодам.ЗапрашиватьИСинхронизировать) Тогда
            // В соответсвии с настройками пользователя выполняем запрос в ЮНИСКАН
            Парам = СоздатьОбъект("СписокЗначений");
            Парам.Установить("ПоказыватьДиалог", 0);
            Парам.Установить("Штрихкод", Штрихкод);
            ОткрытьФормуМодально("Обработка.ЗапросПоШтрихкодамЮнискан", Парам);    
            пТовар        = Парам.Получить("пТовар");
            пЕдиница    = Парам.Получить("пЕдиница");
            пКоличество    = 1;
            
            Если ПустоеЗначение(пТовар) = 0 Тогда
                Если пТовар.Выбран() = 1 Тогда
                    Рез = 1;    
                КонецЕсли;    
            КонецЕсли;
            
        КонецЕсли;
    КонецЕсли;
    
    Если Рез = 0 Тогда
        Сообщить (Данный шк не найден) //// Меняю на Возврат 0;
    КонецЕсли;
    
    Возврат  Рез;
КонецФункции // глПолучитьТоварПоШтрихкоду()
Возвращает 1 если товар есть, если нет выводит что штрихкод не найден, но да ладно изменяю функцию вместо сообщить, возврат 0,
Из документа создаю условие
Если глПолучитьТоварПоШтрихкоду(Данные, ВремТовар, ВремЕдиница, ВремКоличество) = 0 Тогда
Сообщить("sdgsdgsdg");
Вопрос в том, что он не сообщает, хотя условие выполняет
   Ёпрст
 
1 - 06.10.20 - 09:47
Потому, что есть возврат из функции раньше, чем твоё сообщить в коде
   Ёпрст
 
2 - 06.10.20 - 09:48
Открой жуколов и побегай по F8..увидишь куда заходит и что выполняется, раз так не видишь
   Mafiozaa
 
3 - 06.10.20 - 09:49
(2) Привет брат,хорошо далеко не убегай,щас гляну
   Mafiozaa
 
4 - 06.10.20 - 09:59
(2) Ну по логике правильно отрабатывает, еденицу ловит одно делаем и делает если ловит 1, но если 0, то ничего не делает
   Mafiozaa
 
5 - 06.10.20 - 10:01
(1) Действительно есть возврат из функции раньше, но с условием <> 0
   Ёпрст
 
6 - 06.10.20 - 10:09
(4) если не хочешь открывать жуколов, то втыкай сообщить во все места, егде есть возврат из функции..типа
Сообщить("были тут");
..Сообщить("еще сюда заходили");..
инайдешь куда заходит и почему.

Хотя, жуколовом быстрее, а в таком простом коде и так видно..без всего
   Mafiozaa
 
7 - 06.10.20 - 10:11
(6) Щас пробую через иначе, пока получается
   Mafiozaa
 
8 - 06.10.20 - 10:12
(6) Брат спасибо за отклик, успешно ^_^

Список тем форума
Рекламное место пустует  Рекламное место пустует
2 + 2 = 3.9999999999999999999999999999999...
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.