|
Как программно перегрузить документ из одной базы в другую? | ☑ | ||
---|---|---|---|---|
0
_stay true_
20.01.14
✎
11:39
|
Здравствуйте. Нужно написать обработку, которая перегружала бы счета - фактуры из ТКПТ(конфа от раруса по управлению магазином) в БП 2.0.
Ситуация такая: соответствия объектов баз хранятся в отдельной SQL-базе не сервере, есть база БП 2.0, нужно чтобы обработка выполнялась в ней, следовательно: 1. Нужно программно подключиться к базе ТКПТ(работает) и запросом вытянуть нужные счета-фактуры с отбором по периоду. 2. Проверить соответствие GUID объектов по базе SQL. Если есть соответствие - просто грузить, если нет - грузить и создать новое соответствие в базе SQL. 3. Загрузить документы из ТКПТ в БП. Процедура получилась такая: Процедура СчетФактураВыданный() Подключение = ПолучитьПодключениеКТКПТ(); Если Подключение = Неопределено Тогда Возврат КонецЕсли; //получить СФ в базе ТКПТ запросом Попытка ЗапросКТКПТ = Подключение.NewObject("Query"); ЗапросКТКПТ.Текст = "ВЫБРАТЬ | СчетФактураВыданный.Ссылка, | СчетФактураВыданный.ВерсияДанных, | СчетФактураВыданный.ПометкаУдаления, | СчетФактураВыданный.Номер, | СчетФактураВыданный.Дата, | СчетФактураВыданный.Проведен, | СчетФактураВыданный.Автор, | СчетФактураВыданный.Организация, | СчетФактураВыданный.ПодразделениеКомпании, | СчетФактураВыданный.РегламентированныйУчет, | СчетФактураВыданный.Комментарий, | СчетФактураВыданный.ДокументОснование, | СчетФактураВыданный.Контрагент, | СчетФактураВыданный.ДоговорВзаиморасчетов, | СчетФактураВыданный.ВалютаДокумента, | СчетФактураВыданный.КурсДокумента, | СчетФактураВыданный.СуммаДокумента, | СчетФактураВыданный.СтавкаНДС, | СчетФактураВыданный.СуммаНДС, | СчетФактураВыданный.Грузополучатель, | СчетФактураВыданный.ХозОперация, | СчетФактураВыданный.ИБСоздания, | СчетФактураВыданный.СчетФактураНаАванс, | СчетФактураВыданный.Товары.( | Ссылка, | НомерСтроки, | Номенклатура, | Количество, | ЕдиницаИзмерения, | Коэффициент, | Цена, | Сумма, | СтавкаНДС, | СуммаНДС, | СуммаВсего, | ГТД, | Партия | ), | СчетФактураВыданный.МаршрутОбмена.( | Ссылка, | НомерСтроки, | ИнформационнаяБаза | ) |ИЗ | Документ.СчетФактураВыданный КАК СчетФактураВыданный |ГДЕ | СчетФактураВыданный.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания"; ЗапросКТКПТ.УстановитьПараметр("ДатаНачала", ЭтотОбъект.ДатаНачала); ЗапросКТКПТ.УстановитьПараметр("ДатаОкончания", ЭтотОбъект.ДатаОкончания); РезультатТКПТ = ЗапросКТКПТ.Выполнить(); Если НЕ РезультатТКПТ.Пустой() Тогда ВыборкаТКПТ = РезультатТКПТ.Выбрать(); ЭлементыФормы.ИндикаторПрогресса.МаксимальноеЗначение = ВыборкаТКПТ.Count(); ЭлементыФормы.ИндикаторПрогресса.МинимальноеЗначение = 0; ИндикаторПрогресса = 0; Пока ВыборкаТКПТ.Следующий() Цикл //Получим GUID счета-фактуры в ТКПТ GUIDTKPT = Подключение.String(ВыборкаТКПТ.Ref.УникальныйИдентификатор()); //Проверим соответствие по с базой SQL GUIDобъектаТКВБазеСоответствий = ПолучитьСоответствиеВБАзеSQL(GUIDTKPT); Если GUIDTKPT = GUIDобъектаТКВБазеСоответствий Тогда //Загрузим объекты Попытка ОбъектСФДляЗагрузки = ВыборкаТКПТ.Ref.ПолучитьОбъект(); ОбъектСФДляЗагрузки.ОбменДанными.Загрузка = Истина; ОбъектСФДляЗагрузки.Записать(РежимЗаписиДокумента.Запись); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Иначе Попытка //Создадим новые объекты //ДОБАВИТЬ СООТВЕТСТВИЕ В БАЗУ СКЛ ОбъектСФДляЗагрузки = ВыборкаТКПТ.Ref.ПолучитьОбъект(); ОбъектСФДляЗагрузки.ОбменДанными.Загрузка = Истина; ОбъектСФДляЗагрузки.Записать(); GUIDBP = Документы.СчетФактураВыданный.НайтиПоНомеру(СокрЛП(ОбъектСФДляЗагрузки.Номер)).УникальныйИдентификатор(); ДобавитьСоответствиеВБазуSQL(GUIDTKPT,GUIDBP); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; КонецЕсли; ИндикаторПрогресса = ИндикаторПрогресса+1; КонецЦикла; КонецЕсли; Сообщить("Загрузка завершена", СтатусСообщения.ОченьВажное); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры Результат такой: к SQL подключается, если соответствие находит - просто грузит объект, если не находит - грузит объект и добавляет соответствие в базу SQL. Запарка начинается на этапе загрузки документов и записи: ОбъектСФДляЗагрузки = ВыборкаТКПТ.Ref.ПолучитьОбъект(); В отладчике ОбъектСФДляЗагрузки определяется как COM-объект, и, следовательно, в базу не записывается как документ. На строку ОбъектСФДляЗагрузки.Записать(РежимЗаписиДокумента.Проведение) выдаёт ошибку: Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация (1C:Enterprise 8.2.19.80): Несоответствие типов (параметр номер '1') Если кто сталкивался с подобным - подскажите, пожалуйста, как вы решали подобную проблему? Заранее спасибо. |
|||
1
andreymongol82
20.01.14
✎
11:46
|
Если ОбъектСФДляЗагрузки - это com-объект, то в записать Записать(РежимЗаписиДокумента.Проведение) - нужно как-то так
Подключение.DocumentWriteMode.Posting |
|||
2
_stay true_
20.01.14
✎
11:53
|
Попробовал так:
ОбъектСФДляЗагрузки.Записать(Подключение.DocumentWriteMode.Posting) Выдал ошибку такую: {Форма.Форма.Форма(210)}: Ошибка при вызове метода контекста (Заполнить): Произошла исключительная ситуация (1C:Enterprise 8.2.17.169): Ошибка при выполнении обработчика - 'ОбработкаЗаполнения' {ОбщийМодуль.обПроцедурыОбщегоНазначения.Модуль(390)}: Конструктор не обнаружен (ВыборкаИзРезультатаЗапроса) |
|||
3
_stay true_
20.01.14
✎
12:00
|
Неужели придется пореквизитно...
|
|||
4
_stay true_
20.01.14
✎
12:06
|
Неужели единственный выход это программно создавать новый документ и заполнять каждый реквизит отдельно?
|
|||
5
Maxus43
20.01.14
✎
12:08
|
сериализуй документ в xml, на той стороне загрузи. Если делаешь через ком - то создавай док и заполняй
|
|||
6
ptiz
20.01.14
✎
12:12
|
(4) Представь себе!
Искуственный интеллект, тягающий разнородные объекты между разными базами, еще не изобрели. То, что они называются одинаково: "СчетФактура", не значит, что это одно и то же (молчу про соответствие контрагентов, товаров и т.п.). |
|||
7
_stay true_
20.01.14
✎
12:41
|
(6) Спасибо за объяснения. Пойду пыхтеть))
|
|||
8
_stay true_
22.01.14
✎
14:54
|
Вопрос такой: как программно создать счет-фактуру с указанием ручной корректировки движений? Нужно, чтобы она дополнительно двинула регистр НДС Продажи.
|
|||
9
_stay true_
22.01.14
✎
15:13
|
Достаточно ли будет установить признак "ручная корректровка = истина" и создать и записать набор записей?
|
|||
10
ptiz
22.01.14
✎
15:25
|
(9) Да
|
|||
11
_stay true_
22.01.14
✎
16:47
|
(10) Спасибо. Пойду попробую.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |