Имя: Пароль:
1C
1С v8
В данной транзакции уже происходили ошибки...
,
0 Лялечка
 
07.10.11
09:53
Добрый день! Понимаю, что тема обсуждалась уже ни раз, но не нашла ни одного нормального ответа на данный вопрос. Ситуация такая:
При записи контрагента необходимо проверить отмечены у него какие-нибудь категории или нет. Добавила в процедуру ПередЗаписью() проверку:

ОтметкаКатегории = Ложь;
мТаблицаКатегорийОбъекта = Категории.КатегорииОбъекта.Выгрузить();
Для каждого СтрКатегория Из мТаблицаКатегорийОбъекта Цикл
  Если СтрКатегория.Категория.УчастиеВПравах = Истина    Тогда
   Если СтрКатегория.Принадлежность = Истина Тогда
       ОтметкаКатегории = Истина;
       Прервать;
   КонецЕсли;    
  КонецЕсли;    
КонецЦикла;    
Если ОтметкаКатегории = Ложь Тогда
   Предупреждение("У контрагента должна быть отмечена хотя бы одна категория! Запись невозможна!");
   Отказ = Истина;
КонецЕсли;

Если изменять данные у записанного контрагента, то все ок. Но если создавать нового и  не отмечать категорию, то потом возникает ошибка: "В данной транзакции уже происходили ошибки!".
Подскажите, пожалуйста, как это все-таки можно обойти? Проверять категории обязательно. Заранее благодарна.
1 Wobland
 
07.10.11
09:56
(0) а Попытки часом нигде нет?
2 Лялечка
 
07.10.11
10:07
В процедуре ПередЗаписью() нигде нет.
3 Ненавижу 1С
 
гуру
07.10.11
10:08
(2) а в других местах?
4 Wobland
 
07.10.11
10:08
(2) а вообще сильно мешает?
5 Лялечка
 
07.10.11
10:11
(4) ну конечно мешает, не дает нового контрагента записать с первого раза, если категорию не заполнили.Пользователь заполняет все данные, а ему бац говорят извините вы категории не заполнили закрывайте карточку и делайте все заново:( мешает...
6 Wobland
 
07.10.11
10:11
ну там НачатьТранзакцию() мож есть где?
7 Базис
 
naïve
07.10.11
10:12
Фотки нет.
Вопрос простой, но традиции форума требуют.
8 Лялечка
 
07.10.11
10:13
(6) В ПередЗаписью(), ПриЗаписи() нет ничего подобного...
9 Лялечка
 
07.10.11
10:13
(7) блин
10 Лялечка
 
07.10.11
10:15
(7) странные люди, сами без фоток...
ладно не принципиально, мне к вечеру обязательно надо эти изменения сделать, помогите, пожалуйста, разобраться с этим...
11 unregistered
 
07.10.11
10:15
Что такое Категории?

Есть подозрение, что, пока Контрагент не записан в базу (новый), ни каких категорий нет. Соответственно мТаблицаКатегорийОбъекта - пустая и флаг ОтметкаКатегории всегда Ложь для нового контрагента.

Ошибка же (В данной транзакции уже происходили ошибки) вылетает как раз при попытке записать эти самые категории, т.к. перед записью Контрагента Отказ = Истина.
12 Базис
 
naïve
07.10.11
10:18
(10) Объясняю.
1. Кто задаёт простые вопросы, тот и выкладывыает фотки.
2. Моё фото вас рассстроит. Старый и женатый программист никому не нужен.
3. Перед записью контрагента выведите ОписаниеОшибки().
Во-первых, узнаете, что случилось.
Во-вторых ЕМНИП снимете флаг ошибки.
4. Фото ждём вечером.
13 Лялечка
 
07.10.11
10:19
(12) да фото можете посмотреть уже сейчас
14 БибиГон
 
07.10.11
10:20
Если мТаблицаКатегорийОбъекта.Количество()=0 тогда
    возврат;
Конецесли;
15 Лялечка
 
07.10.11
10:24
(14) таблица не пустая точно
16 Лялечка
 
07.10.11
10:25
(11) таблица категорий не пустая, но флаг отметки конечно ложь, потому что как раз и рассматривается ситуация, когда пользователь забыл отметить категорию
17 DailyLookingOn Sunset
 
07.10.11
10:27
У меня такая же фигня постоянно.
Попыток и транзакций нет.
Релиз 8.2.13.219
18 Лялечка
 
07.10.11
10:29
Ошибка выскакивает на моменте:
Попытка
  ВыполнитьТекст + "ПриЗаписи(ЭтотОбъект, Отказ)");
Исключение
КонецПопытки;

Это общий модуль ОбработкаСобытий.
19 Лялечка
 
07.10.11
10:31
Сорри:
Попытка
   Выполнить(Текст + "ПриЗаписи(ЭтотОбъект, Отказ)");
Исключение
КонецПопытки;
20 Лялечка
 
07.10.11
10:33
Описание ошибки: {ОбщийМодуль.ОбработчикиСобытий(1531)}: Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,1)}: Процедура или функция с указанным именем не определена (СправочникКонтрагентыПриЗаписи)
21 Базис
 
naïve
07.10.11
10:34
Ну вставь же после Исключение Сообщить(ОписаниеОшибки());

вместо Сообщить может потребоваться серверный аналог.
22 Базис
 
naïve
07.10.11
10:34
А, вот, уже лучше.
23 Джинн
 
07.10.11
10:38
Попытка внутри транзакции или другой попытки. Пилите гирю внимательнее...
24 Лялечка
 
07.10.11
10:40
(23) дело в том, что это типовой механизм...у меня модуль даже закрыт для изменения...неужели от одной моей проверки перед записью (она же без всяких Попыток и НачатьТранзакцию() сделана) все начинает так косячить. И что же делать тогда? может есть другой способ проверки заполнения обязательных реквизитов?
25 Базис
 
naïve
07.10.11
10:41
Ошибся. ПЕРЕД Попытка прочитай ОписаниеОшибки(). Если она не пустая, то начинать новую транзакцию не надо.
26 Лялечка
 
07.10.11
10:43
(25) пустая она, ничего нет
27 БибиГон
 
07.10.11
10:45
Ты делаешь подпиской на события?
28 Лялечка
 
07.10.11
10:46
(27) да, это не я делаю, это стандартно
29 Джинн
 
07.10.11
10:47
(24) Есть типовой механизм проверки. В него и "впишитесь".
30 Лялечка
 
07.10.11
11:45
(29) а никто не подскажет, где хоть смотреть этот типовой механизм?(( как он все-таки реализован хотя бы...
31 Лялечка
 
07.10.11
12:03
Хорошо, может кто-нибудь подскажет, что в моем коде не так? Ведь без этой проверки все отрабатывает нормально...Получается, что я неправильно пишу что-то...

ОтметкаКатегории = Ложь;
мТаблицаКатегорийОбъекта = Категории.КатегорииОбъекта.Выгрузить();
Для каждого СтрКатегория Из мТаблицаКатегорийОбъекта Цикл
  Если СтрКатегория.Категория.УчастиеВПравах = Истина    Тогда
   Если СтрКатегория.Принадлежность = Истина Тогда
       ОтметкаКатегории = Истина;
       Прервать;
   КонецЕсли;    
  КонецЕсли;    
КонецЦикла;    
Если ОтметкаКатегории = Ложь Тогда
   Предупреждение("У контрагента должна быть отмечена хотя бы одна категория! Запись невозможна!");
   Отказ = Истина;
КонецЕсли;