Имя: Пароль:
1C
1C 7.7
v7: Поиск единицы измерения и откат транзакции
0 Kifsif
 
15.10.15
12:44
7.7

Беру данные об отгрузках из табличного документа. Если номенклатуры не найдено, создаю ее на основании данных из этого табличного документа.

При любой нештатной ситуации нужен откат транзакции. В данном случае - если в табличном документе стоит вместо единиц измерения какая-то абракадабра, нужно орать и ничего не записывать в базу.

В попытке начал транзакцию.
И далее в транзакции где-то в середине модуля хотел бы кинуть исключение. Дескать, не нашел единицу измерения в справочнике, выход из транзакции.

Не получилось. Думаю, ну, ладно, надо хотя бы поймать ошибку.

Пробую так:

    ЕдиницаИзмеренияНайдена = (ПустоеЗначение(Ед.ТекущийЭлемент()) = 0);
    
    Если ЕдиницаИзмеренияНайдена Тогда
        Ном.ЕдиницаИзмерения = Ед.ТекущийЭлемент();
    Иначе
        Сообщить("Для номенклатыры " + Ном.Наименование + " неверно задана единица измерения. Проверяйте Excel-файл. Единица измерения должна соответствовать элементу справочника ""Единицы измерений"".");        
        Возврат 0;
    КонецЕсли;


Я ничего не понимаю. На 7.7 не программировал. Но все-таки.

В отладчике задушился на точке останова. Выделяю ПустоеЗначение(Ед.ТекущийЭлемент()) и вычисляю выражение.

Получаю ПустоеЗначение(Ед.ТекущийЭлемент()) = 1.
При этом если вычислить выражение ПустоеЗначение(Ед.ТекущийЭлемент()) = 0, сразу получаю "Ошибка в выражении".

Ничего не понимаю. Подскажите, пожалуйста, как мне обработать эту ошибку (если не найдена единица измерения).
1 Масянька
 
15.10.15
12:55
Вечное - конфа?
2 Ёпрст
 
15.10.15
12:59
Пробую так:

    ЕдиницаИзмеренияНайдена = (ПустоеЗначение(Ед.ТекущийЭлемент()) = 0);

Такая конструкция в 7.7 не будет работать
3 Kifsif
 
15.10.15
12:59
(1) Вообще, это для Бухгалтерии 7.70.537.

Но это внешняя обработка. Какая разница, какая конфа-то.
Просто читаю файл.
4 Kifsif
 
15.10.15
13:00
(2) Интересно. Вот функция, она вернула 1. И почему я ее не могу сразу использовать в логическом выражении.

В общем, это все сентименты. А как в записать логическое выражение?
5 Ёпрст
 
15.10.15
13:01
(4) дарю
?(,,)
6 Ёпрст
 
15.10.15
13:02
И это, в 7.7 нет булева, если че.
7 Ёпрст
 
15.10.15
13:02
И писать Если ЕдиницаИзмеренияНайдена Тогда  не имеет смысла.
8 Масянька
 
15.10.15
13:03
СпрЕдиницы    = СоздатьОбъект("Справочник.Единицы");
        Если СпрНоменклатура.НайтиПоРеквизиту("АртикулПрайс", мАртикул, 1) = 1 Тогда
            // нашли - выбираем
            мНоменклатура    = СпрНоменклатура.ТекущийЭлемент();
            мЕИ                = СпрНоменклатура.БазоваяЕдиница;
        Иначе
            // не нашли - добавляем новый элемент в группу "_Не обработано"
            Сообщить("Строка № " + (КонтекстДокумента.НомерСтроки + 1) + "." + РазделительСтрок +
                     "       Не найдена номенклатура с артикулом - " + мАртикул + ". Данная номенклатура будет добавлена в папку ""_Не обработано"".");            
            
            СпрГруппа.НайтиПоНаименованию("_Не обработано");
            СпрНоменклатура.ИспользоватьРодителя(СпрГруппа.ТекущийЭлемент());
            СпрНоменклатура.Новый();
            СпрНоменклатура.Наименование         = СокрЛП(Строка(Лист.Cells(НомерСтроки, 3).Value));
            СпрНоменклатура.ВидНоменклатуры     = Перечисление.ВидыНоменклатуры.Прочее;
            СпрНоменклатура.ПолнНаименование    = СокрЛП(Строка(Лист.Cells(НомерСтроки, 3).Value));
            СпрНоменклатура.АртикулПрайс         = мАртикул;
            СпрНоменклатура.Записать();

            // штрих-код
            КодТовараЧисло = Число(СокрЛ(Прав(СпрНоменклатура.Код, 5)));
            Для Сч = 1 По КодТовараЧисло Цикл
                ДопКод             = глДополнитьСтрокуЛ(Строка(Сч), "0", 5);
                ВремШтрихкод     = глСформироватьШтрихкод(глПрефиксВесовогоШтрихкода, ДопКод + "00000");
            КонецЦикла;
            
            // единицы измерения
            СпрЕдиницы.ИспользоватьВладельца(СпрНоменклатура.ТекущийЭлемент());
            СпрЕдиницы.Новый();
            СпрЕдиницы.ОКЕИ            = СпрОКЕИ.ТекущийЭлемент();
            СпрЕдиницы.Коэффициент    = 1;
            СпрЕдиницы.ШтрихКод        = ВремШтрихкод;
            СпрЕдиницы.Записать();
            
            СпрНоменклатура.УстановитьАтрибут("ОсновнаяЕдиница", СпрЕдиницы.ТекущийЭлемент());
            СпрНоменклатура.УстановитьАтрибут("БазоваяЕдиница", СпрЕдиницы.ТекущийЭлемент());
            СпрНоменклатура.СтавкаНДС    = Перечисление.СтавкиНДС.НДС18;
            СпрНоменклатура.СтавкаНП    = СпрСтавкаНП.ТекущийЭлемент();

            СпрНоменклатура.Записать();

            мНоменклатура    = СпрНоменклатура.ТекущийЭлемент();
            мЕИ                = СпрНоменклатура.БазоваяЕдиница;
        КонецЕсли;


Молод ты еще... Чтобы фильму смотреть :)))))))
9 Масянька
 
15.10.15
13:04
(3) И кстати, я не помню, что есть единицы в бухии. Мой код для ТиС. Но тебе же без разницы :)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан