Имя: Пароль:
1C
1С v8
Некорректно отрабатывает функция "сообщить"
0 KamFolc
 
16.07.19
14:48
Коллеги, добрый день. Немного доработана обработка печать ценника. Цель была добавить в ценник штрих-код. Вроде все хорошо, но есть небольшая проблема. При формировании печатной формы, не все товары имеют штрих-код. Предполагается, что о номенклатуре без ШК будет выдано соответствующее оповещение. Но функция срабатывает немного не так как надо. Если в отборе 3 товара, два из которых не имеют ШК (1 и 3). Информация о отсутствии ШК будет выведена только по первому. В случае печати всех ценников без ШК (все 3 без ШК), все ок. Получается, что сообщение прерывается для номенклатуры которая находится после товара с штрих-кодом. Подскажите, как это можно исправить? Конфигурация: УТ 10.3

[spoiler] Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |    РегШК.Штрихкод КАК ШтрихКод,
        |    РегШК.ПредставлениеШтрихкода,
        |    РегШК.ТипШтрихкода
        |ИЗ
        |    РегистрСведений.Штрихкоды КАК РегШК
        |ГДЕ
        |    РегШК.Владелец = &Владелец");
        Запрос.УстановитьПараметр("Владелец", СтрокаТаблицы.Номенклатура);
        Результат = Запрос.Выполнить();
        Выборка=Результат.Выбрать();
        Штрихкод = "";
        ПредставлениеШтрихкода = "";
        ТипКода = "";
        Пока выборка.Следующий() Цикл
            Штрихкод = выборка.ШтрихКод;
            ПредставлениеШтрихкода = Выборка.ПредставлениеШтрихкода;
            ТипШтрихкода= Выборка.ТипШтрихкода;
        КонецЦикла;              
        ТипКода = ПолучитьЗначениеТипаШтрихкодаДляЭУ(ТипШтрихкода);

        
        Если  ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13 Тогда
            ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода   = ТипКода;
            ОбластьЦенника.Рисунки.Штрихкод.Объект.Сообщение = ?(ПустаяСтрока(ПредставлениеШтрихкода),    Штрихкод, ПредставлениеШтрихкода);
            ОбластьЦенника.Рисунки.Штрихкод.Объект.ОтображатьТекст = истина;
        ИначеЕсли ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39 тогда    
            ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода   = ТипКода;
            ОбластьЦенника.Рисунки.Штрихкод.Объект.Сообщение = ?(ПустаяСтрока(ПредставлениеШтрихкода),    Штрихкод, ПредставлениеШтрихкода);
            ОбластьЦенника.Рисунки.Штрихкод.Объект.ОтображатьТекст = истина;
        ИначеЕсли  ТипШтрихкода <> ПланыВидовХарактеристик.ТипыШтрихкодов.Code39  или  ТипШтрихкода <> ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13 тогда
            ОбластьЦенника.Рисунки.Штрихкод.Объект.ТипКода   = 1;
            ОбластьЦенника.Рисунки.Штрихкод.Объект.ОтображатьТекст = ложь;
            //ОбластьЦенника.Рисунки.Штрихкод.Объект.Сообщение = "123456789128";
            Сообщить("Для арт. " + СтрокаТаблицы.Артикул + " " + СтрокаТаблицы.Номенклатура + " штрихкод не задан или не соответствует типу EAN13 или Code39");
        КонецЕсли;
                //конец изменений    

                Если ТекСтолбец = 0 Тогда
                    ТабДокумент.Вывести(ОбластьЦенника);
                Иначе
                    ТабДокумент.Присоединить(ОбластьЦенника);
                КонецЕсли;

                ТекСтолбец = ТекСтолбец + 1;

                Если ТекСтолбец = 4 Тогда  
                    ТекСтрока  = ТекСтрока + 1;
                    ТекСтолбец = 0;
                КонецЕсли;

                Если ТекСтрока = 4 Тогда  
                    ТекСтрока = 0;
                    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
[/spoiler]
1 Йохохо
 
16.07.19
14:54
проблема с Концами ЦИкла
2 DmitriyDI
 
16.07.19
15:10
(0) Напиши так:

Вместо этого:

       Пока выборка.Следующий() Цикл
            Штрихкод = выборка.ШтрихКод;
            ПредставлениеШтрихкода = Выборка.ПредставлениеШтрихкода;
            ТипШтрихкода= Выборка.ТипШтрихкода;
        КонецЦикла;    

Так надо:

       Если выборка.Следующий() Тогда
            Штрихкод = выборка.ШтрихКод;
            ПредставлениеШтрихкода = Выборка.ПредставлениеШтрихкода;
            ТипШтрихкода= Выборка.ТипШтрихкода;
Иначе
            Штрихкод = "";
            ПредставлениеШтрихкода = Неопределено;
            ТипШтрихкода= Неопределено;
        КонецЕсли;
3 KamFolc
 
17.07.19
06:51
(2) Огромное спасибо за помощь!