|
перенос справочников контрагенты и договоры контрагентов | ☑ | ||
---|---|---|---|---|
0
alexser94
23.08.16
✎
15:54
|
Коллеги, день добрый.
Конфигурация: БП, 3.0 нетиповая, 8.3 платформа. Есть задача: переносить элементы справочников Контрагенты и Договоры контрагентов несколько раз в месяц. База-источник и база-приемник: идентичные, обе БП 3.0 на 8.3 Ранее их перенос осуществлялся через OLE технологию (но база-приемник была 1С 7.7). Переделываю для 1с8 базы. Список контрагентов и договоров выгружается запросом: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Контрагент, | ХозрасчетныйОборотыДтКт.СубконтоДт2 КАК Договор, | СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот) КАК Сумма, | ХозрасчетныйОборотыДтКт.СубконтоДт1.Код КАК КодОУ, | ВЫБОР | КОГДА ЕСТЬNULL(ХозрасчетныйОборотыДтКт.ВалютаДт, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) | ТОГДА &ВалютаРубли | ИНАЧЕ ХозрасчетныйОборотыДтКт.ВалютаДт | КОНЕЦ КАК Валюта, | МАКСИМУМ(ИСТИНА) КАК Выгружать, | ХозрасчетныйОборотыДтКт.СубконтоДт1.ибсКодДебитора КАК КодДебитора, | ХозрасчетныйОборотыДтКт.СубконтоДт1.ибсКодКредитора КАК КодКредитора |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт( | &ДатаНачала, | &ДатаОкончания, | Регистратор, | СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданным) | ИЛИ СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданнымВал) | ИЛИ СчетДт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамВыданнымУЕ), | &СубконтоДт, | , | , | СубконтоДт1.ПометкаУдаления = ЛОЖЬ | И (СубконтоДт1.ибсКодДебитора <> """" | ИЛИ СубконтоДт1.ибсКодКредитора <> """") | И СубконтоДт2.ПометкаУдаления = ЛОЖЬ) КАК ХозрасчетныйОборотыДтКт |ГДЕ | (НЕ ХозрасчетныйОборотыДтКт.СубконтоДт1 ЕСТЬ NULL ) | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОборотыДтКт.СубконтоДт1, | ХозрасчетныйОборотыДтКт.СубконтоДт2, | ХозрасчетныйОборотыДтКт.СубконтоДт1.Код, | ХозрасчетныйОборотыДтКт.СубконтоДт1.ибсКодДебитора, | ХозрасчетныйОборотыДтКт.СубконтоДт1.ибсКодКредитора, | ВЫБОР | КОГДА ЕСТЬNULL(ХозрасчетныйОборотыДтКт.ВалютаДт, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) | ТОГДА &ВалютаРубли | ИНАЧЕ ХозрасчетныйОборотыДтКт.ВалютаДт | КОНЕЦ | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | ХозрасчетныйОборотыДтКт.СубконтоКт1, | ХозрасчетныйОборотыДтКт.СубконтоКт2, | СУММА(ХозрасчетныйОборотыДтКт.СуммаОборот), | ХозрасчетныйОборотыДтКт.СубконтоКт1.Код, | ВЫБОР | КОГДА ЕСТЬNULL(ХозрасчетныйОборотыДтКт.ВалютаКт, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) | ТОГДА &ВалютаРубли | ИНАЧЕ ХозрасчетныйОборотыДтКт.ВалютаКт | КОНЕЦ, | МАКСИМУМ(ИСТИНА), | ХозрасчетныйОборотыДтКт.СубконтоКт1.ибсКодДебитора, | ХозрасчетныйОборотыДтКт.СубконтоКт1.ибсКодКредитора |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт( | &ДатаНачала, | &ДатаОкончания, | Регистратор, | , | , | СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщиками) | ИЛИ СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиВал) | ИЛИ СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщикамиУЕ), | &СубконтоКт, | СубконтоКт1.ПометкаУдаления = ЛОЖЬ | И (НЕ(СубконтоКт1.ибсКодДебитора <> """" | ИЛИ СубконтоКт1.ибсКодКредитора <> """")) | И СубконтоКт2.ПометкаУдаления = ЛОЖЬ) КАК ХозрасчетныйОборотыДтКт |ГДЕ | (НЕ ХозрасчетныйОборотыДтКт.СубконтоКт1 ЕСТЬ NULL ) | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОборотыДтКт.СубконтоКт1, | ХозрасчетныйОборотыДтКт.СубконтоКт2, | ХозрасчетныйОборотыДтКт.СубконтоКт1.Код, | ХозрасчетныйОборотыДтКт.СубконтоКт1.ибсКодДебитора, | ХозрасчетныйОборотыДтКт.СубконтоКт1.ибсКодКредитора, | ВЫБОР | КОГДА ЕСТЬNULL(ХозрасчетныйОборотыДтКт.ВалютаКт, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) | ТОГДА &ВалютаРубли | ИНАЧЕ ХозрасчетныйОборотыДтКт.ВалютаКт | КОНЕЦ"; Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания)); Запрос.УстановитьПараметр("ВалютаРубли", Константы.ВалютаРегламентированногоУчета.Получить()); Запрос.УстановитьПараметр("Склад", Справочники.ибсКонстанты.СкладТМЦ.ЗначениеКонстанты); Сп = Новый СписокЗначений; Сп.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты); Сп.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры); Запрос.УстановитьПараметр("СубконтоДт", Сп); Запрос.УстановитьПараметр("СубконтоКт", Сп); Результат = Запрос.Выполнить(); ТЗРез = Результат.Выгрузить(); ТЗРез.Свернуть("КодОУ, Контрагент, Договор, Валюта, Выгружать, КодДебитора, КодКредитора"); ВыгружаемыеДанные.Загрузить(ТЗРез); //Результат записывается в табличную часть Подключение и обращение к справочникам: Процедура КнопкаВыполнитьНажатие(Кнопка) СохранитьРеквизиты(ЭтотОбъект); ЭлементыФормы.БазаНеПодключена.Видимость = Истина; ЭлементыФормы.БазаПодключена.Видимость = Ложь; V83 = Новый COMОбъект("V83.ComConnector"); Попытка СтрокаПодключения = "Srvr=""" + "hq-ib-1c8-prod" + """;Ref=""" + "buh_office" + """;Usr=""" + "Администратор" + """;Pwd=""" + "Zz123456" + """"; СоединениеДругаяБаза = V83.Connect(СтрокаПодключения); Состояние("Соединение Установлено !!!"); Ok = Истина; Исключение Предупреждение ("Не удалось соединиться с другой базой"); КонецПопытки; Если Ok Тогда ЭлементыФормы.БазаНеПодключена.Видимость = Ложь; ЭлементыФормы.БазаПодключена.Видимость = Истина; Иначе Сообщить("Сбой открытия базы 1с8 ... Завершаем работу",СтатусСообщения.Важное); v83.ExecuteBatch("ЗавершитьРаботуСистемы(0)"); v83 = Неопределено; КонецЕсли; Если ВыгружаемыеДанные.Количество() = 0 Тогда Сформировать(Кнопка); Если ВыгружаемыеДанные.Количество() = 0 Тогда Возврат; КонецЕсли; КонецЕсли; v83_Контр = СоединениеДругаяБаза.Справочники.Контрагенты; v83_Дог = СоединениеДругаяБаза.Справочники.ДоговорыКонтрагентов; Вс = ВыгружаемыеДанные.Количество(); Тек = 0; Для каждого ТекСтр Из ВыгружаемыеДанные Цикл ОбработкаПрерыванияПользователя(); Тек = Тек + 1; Состояние("Обработка записи: " + Тек + " из " + Вс + "..."); КодОУ = ТекСтр.КодОУ; КодДебитора = ТекСтр.КодДебитора; КодКредитора = ТекСтр.КодКредитора; Контр = ТекСтр.Контрагент; НаимКонтр = ТекСтр.Контрагент.Наименование; СсылкаЭлемент = v83_Контр.НайтиПоКоду(ТекСтр.КодОУ); Если СсылкаЭлемент = v83_Контр.ПустаяСсылка() тогда Объект = v83_Контр.СоздатьЭлемент(); Объект.Код = Текстр.КодОУ; Объект.Наименование = ТекСтр.Контрагент.Наименование; Объект.ибсКодДебитора = КодДебитора; Объект.ибсКодКредитора = КодКредитора; Объект.НаименованиеПолное = СокрЛП(Контр.НаименованиеПолное); Объект.КодПоОКПО = СокрЛП(Контр.КодПоОКПО); Объект.ИНН = СокрЛП(Контр.ИНН); Объект.Записать(); иначе Объект = СсылкаЭлемент.ПолучитьОбъект(); Объект.Код = Текстр.КодОУ; Объект.Наименование = ТекСтр.Контрагент.Наименование; Объект.ибсКодДебитора = КодДебитора; Объект.ибсКодКредитора = КодКредитора; Объект.НаименованиеПолное = СокрЛП(Контр.НаименованиеПолное); Объект.КодПоОКПО = СокрЛП(Контр.КодПоОКПО); Объект.ИНН = СокрЛП(Контр.ИНН); Объект.Записать(); Конецесли; Дог = v83_Дог.НайтиПоНаименованию(СокрЛП(ТекСтр.Договор)); Если Дог = v83_Дог.ПустаяСсылка() тогда Объект = v83_Дог.СоздатьЭлемент(); Объект.Наименование = ТекСтр.Договор; Объект.Владелец = ТекСтр.Контрагент.Ссылка; Объект.Записать(); иначе Объект = Дог.ПолучитьОбъект(); Объект.Наименование = ТекСтр.Договор; Объект.Владелец = ТекСтр.Контрагент.Ссылка ; Объект.Записать(); Конецесли; Контрагенты записываются без проблем, а подчиненный справочник Договоры не записывается. Выдает ошибку: Произошла исключительная ситуация (1C:Enterprise 8.3.7.1873): Значение поля "Контрагент" не заполнено или заполнено неверно. Хотя поле Владелец (коим является ссылка на контрагента) я заполняю. И еще вопрос: почему не работает данная строчка (Произошла исключительная ситуация (1C:Enterprise 8.3.7.1873): Несоответствие типов (параметр номер '4')), в синтакс помощнике для метода НайтиПоНаименованию написано, что в качестве 4 параметра может использоваться Владелец Дог = v83_Дог.НайтиПоНаименованию(СокрЛП(ТекСтр.Договор),,,Текстр.Контрагент); |
|||
1
Cyberhawk
23.08.16
✎
15:56
|
По второму вопросу: параметром должен выступать объект той базы, а не твоей
|
|||
2
Ёпрст
23.08.16
✎
15:57
|
(0) пользуй кд, нафига эта оля впёрлась ?
|
|||
3
Ёпрст
23.08.16
✎
16:01
|
И поиск по наименованию - это п..ц какой моветон. Хотя бы по-коду, а лучше по уиду
|
|||
4
ildary
23.08.16
✎
16:14
|
(2) давно хотел спросить - а как специалисты относятся к работе КД2 с конфигурацией БП3? Раз в последних версиях БП3 все затачивается под КД3.
|
|||
5
Amra
23.08.16
✎
16:21
|
(4) Прекрасно относятся) Тем более к выгрузкам несколько раз в месяц, а не каждый полчаса)
|
|||
6
ildary
23.08.16
✎
16:25
|
(5) нет, я понимаю, что технически должно работать, но вдруг так уже не принято либо 1С вежливо не рекомендует (я новичок).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |