Имя: Пароль:
1C
1C 7.7
v7: Странная запись контрагента в ТиС
0 ildary
 
25.03.12
18:10
Уважаемые специалисты, посоветуйте пожалуйста, как обходится такой глюк: При записи делается транзакция, в которой записывается сам контрагент и его подчиненные справочники, после чего делается фиксирование транзакции. Если же в запись подчиненного справочника вставить свою проверку, которая вернет 0 - то вроде бы ничего ужасного не произойдет, контрагент все еще не существует, но при повторном нажатии на запись - в процедуре ПриЗаписи() при вызове Записать() - код и наименование контрагента обнуляются со всеми вытекающими для операторов. Можно конечно сделать так, чтобы транзакция всегда завершалась, но это не есть хорошо, вдруг есть более кошерный способ?
1 zak555
 
25.03.12
18:16
открыть ТиС и посмотреть не судьба ?



Функция ЗаписьОснДоговора()
   
   // Объект для записи основного счета.
   Объект = СоздатьОбъект("Справочник.Договоры");
   
   Если Объект.НайтиЭлемент(ОсновнойДоговор) = 0 Тогда
       Объект.Новый();
       Объект.Владелец = ТекущийЭлемент();
   КонецЕсли;
       
   // Заполнение реквизитов слоя "ОсновнойДоговор".
   Объект.Наименование                = НаименованиеОснДоговора;
   Объект.ВалютаВзаиморасчетов        = ВалютаВзаиморасчетов;
   Объект.ТипЦен                      = ТипЦен;
   Объект.Скидка                      = Скидка;
   Объект.ГлубинаКредита              = ГлубинаКредита;
   Объект.СуммаКредита                = СуммаКредита;
   Объект.НеКонтролироватьКредит      = НеКонтролироватьКредит;
   Объект.ФиксироватьКурсЗадолжностей = ФиксироватьКурсЗадолжностей;
   
   // Проверка необходимости и возможности записи.
   Если      НужноЗаписатьЭлемент(Объект) = 0 Тогда
       Возврат 1;
   ИначеЕсли МожноЗаписатьЭлемент(Объект) = 0 Тогда
       Возврат 0;
   КонецЕсли;
   
   Объект.Записать();
   
   // Установка основного договора.
   ОсновнойДоговор = Объект.ТекущийЭлемент();
   
   Возврат 1;
   
КонецФункции

Процедура ПриЗаписи()
   
   //проверки всякие т прочая чушь ...
   
   
       
   // Запись всех изменений производится в одной транзакции.
   

   СтатусВозврата(0);
   НачатьТранзакцию();

   Попытка
       Записать();

   Исключение
       ОтменитьТранзакцию();
       Сообщить("Запись контрагента: " + ОписаниеОшибки(), "!");

   КонецПопытки;



   Попытка
       Если ЗаписьОснДоговора() = 0 Тогда
           ОтменитьТранзакцию();
           Возврат;
       КонецЕсли;

   Исключение
       ОтменитьТранзакцию();
       Сообщить("Запись основного договора: " + ОписаниеОшибки(), "!");

   КонецПопытки;



КонецПроцедуры
2 ildary
 
25.03.12
20:02
(1) я в принципе этот код и разбирал. В итоге плюнул и не прерывал транзакцию, тем более, что результат устроил заказчика.