Имя: Пароль:
1C
1С v8
Ошибка переброски документа COMОбъект("V82.ComConnector")
0 DenisSol
 
16.02.12
16:32
Добрый день. Помоги пожалуйста решить следующую проблему.
Необходимо через объект “V82.ComConnector” перенести документ “Реализация товаров, услуг” из конфигурации “Управление торговлей ред. 10.3” в конфигурацию “Бухгалтерия предприятия ред. 2.0”


V8                 = Новый COMОбъект("V82.ComConnector");
ОбъектБазыПриемник = V8.Connect ("File="+ПутьКбазе+"; Usr="+Пользователь+"; Pwd="+Пароль);

Документ переносится нормально, но при попытке проведения “ДокументПриемник.Записать(ОбъектБазыПриемник.РежимЗаписиДокумента.Проведение);”

выдает следующую ошибку:

Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация: Ошибка при выполнении обработчика - 'ОбработкаПроведения'

Хотя если проводишь непосредственно из конфигурации “Бухгалтерия предприятия ред. 2.0” (вручную) документ проводится с выводом следующего сообщения:

“Для номенклатуры "4х16 Заклепки комбинированные  500" в табличной части "Товары" по счету ГТД определен остаток 0 ед. 4х16 Заклепки комбинированные  500 из необходимых 4 ед.”.

Немного проанализировав ситуации сделал вывод (может не правильный).  Ошибка заключается в процедуре сообщения об ошибке:

В

Процедура ПроведениеДокументаСписанияПоСчетуГТД(

Есть

СтрокаНачалаСообщенияОбОшибке = "Для номенклатуры """+ СокрЛП(ТоварПоНомеруГТД.Номенклатура) + """ в табличной части ""Товары"" ";
           СтрокаСообщения = "по счету ГТД определен остаток "+УчетноеКоличество+" ед. "+ТоварПоНомеруГТД.Номенклатура+" из необходимых "+ТоварПоНомеруГТД.Количество+" ед.";
           ОбщегоНазначения.ОшибкаПриПроведении(СтрокаНачалаСообщенияОбОшибке + СтрокаСообщения,,);

Если её закомментировать, то документ проводится во время переноса, но думаю это не правильно. Подскажите как можно решить данную ошибку. Заранее спасибо.
1 depthzer0
 
16.02.12
16:38
нужно чтобы хватало
2 DenisSol
 
16.02.12
16:42
(1) Согласен. Только со стороны заказчика логика: документ непосредственно из самой базы  проводится,  хоть и с сообщением об ошибки. Получается, что ошибка в обработке которая не может провести.
3 Анатоль
 
16.02.12
16:44
(0) может просто попробовать вставить инструкции выполнения типа
  #Если Клиент Тогда
    // вывод сообщения об ошибке
  #КонецЕсли
4 Анатоль
 
16.02.12
16:45
(2) По описанию похоже что COM не умеет выдавать сообщения
5 DenisSol
 
16.02.12
16:48
(3) Внести изменения в конфигурацию "Бухгалтерия Предприятия" ?
6 kible
 
16.02.12
16:51
(0) Перепиши обработку так чтобы запускалась в БП, а не в УТ
7 vmv
 
16.02.12
16:53
В приемнике делаешь общий серверный модуль и при переброске документов из источника

1. передаешь структуру свойстсв объекта из источника в приемника

2. скармливаешь эту структуру серверном методу общего модуля.
при проблемах "кормления" используешь временное хранилище в приемнике, т.е. скормил структуру свойств в клиентском методе в хранилище, в серверном его вытащил.

3. секрверный метод премника получает ИЗВНЕ по п.1 и п.2 некий накбор свойств объекта и пашет как негр в своей песочнице и плевать ему уже, что кто-то скормил ему все это через ком, пом, гном и т.д.

если мысль не ясна - я буду очень опечален
8 vmv
 
16.02.12
16:58
(7) в источник можно вернуть структурированную строку разделенную Символы.ПС, которая будет содержать все тексты общибок при выполнении методов приемника и показать ее как резельтат операции в источнике.
Если она пуста, то ничего не делаем или запускаем ролик с в вставщим на дыбы конем - типа, все ок, чувак - прокатило)

усе, любая другая технология ущебна и от лукавого
9 DenisSol
 
16.02.12
17:02
(7)
Общий смысл ясен, но необходимо дорабатывать типовую конфигурацию, что не хочется делать.
10 Jaap Vduul
 
16.02.12
17:05
Скорее всего, в процедуре "ОбщегоНазначения.ОшибкаПриПроведении" написано что-то вроде:
#Если Клиент Тогда

    Сообщить(...);

#ИначеЕсли ВнешнееСодинение Тогда

    ВызватьИсключение(...);

#КонецЕсли

Т.е. надо или править обработку проведения или эту процедуру.
11 DenisSol
 
16.02.12
17:07
(10) Да это так

#Если ВнешнееСоединение Тогда
       
       Если ВызыватьИсключение Тогда
           Если ЗначениеЗаполнено(Заголовок) Тогда
               ТекстСообщения = Заголовок + Символы.ПС + ТекстСообщения;
               Заголовок = "";
           КонецЕсли;
           
           ВызватьИсключение (ТекстСообщения);
       КонецЕсли;
       
   #Иначе
       
       Если ЗначениеЗаполнено(Заголовок) Тогда
           Сообщить(Заголовок);
           Заголовок = "";
       КонецЕсли;
       
       Сообщить(ТекстСообщения, Статус);
       
   #КонецЕсли
12 DenisSol
 
16.02.12
17:08
а как править обработку ? отказываться от переноса  Новый COMОбъект("V82.ComConnector");
13 vmv
 
16.02.12
17:11
(9) Добавление префиксованных общих модулей Адд_СомКлиент и Адд_СомСервер совершенно безболезненная доработка у меня все типовые с ними живут и в ус не дуют, когда накатываешь обновления проблем нету. Зато все конфы дружат друг с другом при записи объектов без дурацкого обращения к сом.

СомКонектор должен служить просто ТРАНСПОРТОМ, а не средством модификации данных где-либо. Это нужно прнинять как молитву и больше не делать круглых глаз, когда он кома хоят того, что он вовсе не обязан делать
14 H A D G E H O G s
 
16.02.12
17:25
Бугага