|   |   | 
| 
 | 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) И кстати, я не помню, что есть единицы в бухии. Мой код для ТиС. Но тебе же без разницы :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |