Версия для печати темы (https://pro1c.org.ua/index.php?s=be9f516b343ab94f7503071c2b3a66b0&showtopic=42272)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Не могу произвести импорт документов с одной базы в другую

Автор: burza 29.11.17, 9:42

Пытаюсь втянуть документы из одной базы в УТ. обработку пишу сам, ну где-то не стыковка не могу рассмотреть где . помогите.

            // Создаём запрос для выборки всех исходящих платежей за период
            запр =  СоединениеБух.NewObject("Запрос");
            запр.Текст = "ВЫБРАТЬ
                    |    Платеж.Дата,
                    |    Платеж.Номер,
                    |    Платеж.Плательщик,
                    |    Платеж.Получатель,
                    |    Платеж.СтатьяДвиженияДенежныхСредств,
                    |    Платеж.СуммаВВалютеПлатежа
                    |ИЗ
                    |    Документ.Платеж КАК Платеж
                    |ГДЕ
                    |    Платеж.Дата МЕЖДУ &НачалоПериода И &КонецПериода
                    |    И Платеж.Проведен = ИСТИНА";
            запр.УстановитьПараметр("НачалоПериода",Объект.НачалоПериода);
            запр.УстановитьПараметр("КонецПериода",Объект.КонецПериода);

            Выборка = запр.Выполнить().Выбрать();
            Пока Выборка.Следующий() Цикл
                Сообщить("Импорт платежа №" + Выборка.Номер);
                Если ПроверитьСуществованиеДокумента(Перечисления.ТипыПлатежей.ПриходБезналичный, Выборка.Номер, НачалоГода(Выборка.Дата), КонецГода(Выборка.Дата)) тогда
                    Сообщить("Импорт платежа №" + Выборка.Номер + " невозможен, поскольку он уже был импортирован");
                Иначе
                    НачатьТранзакцию();
                    НовыйРасходныйКассовыйОрдер = Документы.РасходныйКассовыйОрдер.СоздатьДокумент();
                    НовыйРасходныйКассовыйОрдер.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента;
                    НовыйРасходныйКассовыйОрдер.СуммаДокумента = Выборка.СуммаВВалютеПлатежа;
                    НовыйРасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств = Выборка.СтатьяДвиженияДенежныхСредств;
                    //НовыйРасходныйКассовыйОрдер.Валюта = Справочники.Валюты.НайтиПоНаименованию(Выборка.ВалютаПлатежаНаименование);
                    //Если НовыйРасходныйКассовыйОрдер.Валюта = Константы.ОсновнаяВалютаСистемы.Получить() тогда
                    //    НовыйРасходныйКассовыйОрдер.Курс = 1;
                    //    НовыйПлатёж.СуммаВБазовойВалюте = НовыйПлатёж.СуммаВВалютеПлатежа;
                    //КонецЕсли;
                    НовыйРасходныйКассовыйОрдер.Дата = Выборка.Дата;
                    НовыйРасходныйКассовыйОрдер.СправочныйНомерДокумента = Выборка.Номер;
                    НовыйРасходныйКассовыйОрдер.Контрагент =Выборка.Плательщик;
                    НовыйРасходныйКассовыйОрдер.Касса = Выборка.Получатель;
                    НовыйРасходныйКассовыйОрдер.Кассир = ПараметрыСеанса.ТекущийПользователь;
                    НовыйРасходныйКассовыйОрдер.Записать();
                    ЗафиксироватьТранзакцию();
                КонецЕсли;
            КонецЦикла;


вот и сама ошибка

Автор: salton 29.11.17, 9:50

Здравствуйте. А документ "Платеж" у Вас есть?
У насколько мне помниться - в типовой УТ 2.3 такого документа не было...
В любом случае ошибка указывает на то, что в базе с которой Вы тянете данные нет объекта "Документ.Платеж"

Автор: burza 29.11.17, 9:57

salton @ Сегодня, 9:50 * ,
Я тяну с своей базы в УТ.Документ есть, на фото с ошибкой видно что он вытягивает его номер с другой базы УУ0132433 а дальше ошибка

Автор: salton 29.11.17, 10:02

На фото явно видно, что обработка останавливается на моменте выполнения запроса, так как не находит "Документ.Платеж".
Например в УТ2.3 точно нет "Документ.Платеж"... есть Документ.ПлатежноеПоручениеВходящее/Исходящее.


Автор: burza 29.11.17, 11:35

salton @ Сегодня, 10:02 * ,
вы не про то подумали, выгрузка идет с базы в Ут а не наоборот

Автор: Petre 29.11.17, 11:58

burza @ Сегодня, 11:35 * ,
Снимок ошибки не соответствует снимку кода.

Автор: burza 29.11.17, 12:15

Petre @ Сегодня, 11:58 * ,
Это вы что этим хотите сказать? что я дал код другой обработки?) код правильный и скрин верный.

Автор: salton 29.11.17, 12:18

Цитата(burza @ 29.11.17, 11:35) *
вы не про то подумали, выгрузка идет с базы в Ут а не наоборот

я как раз про то и подумал... из какой базы выгрузка? Какая конфигурация? В этой конфигурации есть "Документ.Платеж"?
Можете сделать скрин конфига с развернутыми документами?

Автор: Petre 29.11.17, 12:44

burza @ Сегодня, 12:15 * ,
Именно это я и хочу сказать. Ваш код:

Выборка = запр.Выполнить().Выбрать();

Код из текста ошибки:
Выборка = Запрос.Выполнить().Выбрать();

Автор: burza 29.11.17, 13:02

Petre @ Сегодня, 12:44 * ,

Исключено. я не настолько маша растеряша

Автор: Vidocq05 29.11.17, 13:35

burza @ Сегодня, 14:02 * ,

Цитата(Petre @ 29.11.17, 13:44) *
Именно это я и хочу сказать. Ваш код:
Выборка = запр.Выполнить().Выбрать();

Код из текста ошибки:
Выборка = Запрос.Выполнить().Выбрать();

Плюс к этому - судя по ошибке, Ваш запрос не выполняется. Тогда откуда взялось сообщение со скрина? Данное сообщение должно выводится после выполнения запроса.
Сообщить("Импорт платежа №" + Выборка.Номер);


Цитата(Petre @ 29.11.17, 12:58) *
Снимок ошибки не соответствует снимку кода.

Похоже на то. Что-то Вы намудрили.

Автор: Petre 29.11.17, 13:48

Цитата(burza @ 29.11.17, 13:02) *
Исключено. я не настолько маша растеряша

Я же вам привел очевидное.
Если "код правильный и скрин верный", то явно ругается не на приведенный код, а на какой-то другой...

Автор: burza 30.11.17, 15:40

Разобрался.Импорт проходит только не заполняются все поля не могу понять почему. Контрагенты одинаковые и кассы тоже.

        // Создаём запрос для выборки всех исходящих платежей за период
            запр =  СоединениеБух.NewObject("Запрос");
            запр.Текст = "ВЫБРАТЬ
                    |    Платеж.Дата,
                    |    Платеж.Номер,
                    |    Платеж.Плательщик.Наименование КАК ПлательщикНаименование,
                    |    Платеж.Получатель.Наименование КАК ПолучательНаименование,
                    |    Платеж.СтатьяДвиженияДенежныхСредств.Наименование КАК СтатьяДвиженияДенежныхСредств,
                    |    Платеж.СуммаВВалютеПлатежа КАК СуммаДокумента
                    |ИЗ
                    |    Документ.Платеж КАК Платеж
                    |ГДЕ
                    |    Платеж.Дата МЕЖДУ &НачалоПериода И &КонецПериода
                    |    И Платеж.Проведен = ИСТИНА";
            запр.УстановитьПараметр("НачалоПериода",Объект.НачалоПериода);
            запр.УстановитьПараметр("КонецПериода",Объект.КонецПериода);

            Выборка = запр.Выполнить().Выбрать();
            Пока Выборка.Следующий() Цикл
                Сообщить("Импорт платежа №" + Выборка.Номер);
                Если ПроверитьСуществованиеДокумента(Перечисления.ТипыПлатежей.ПриходБезналичный, Выборка.Номер, НачалоГода(Выборка.Дата), КонецГода(Выборка.Дата)) тогда
                    Сообщить("Импорт платежа №" + Выборка.Номер + " невозможен, поскольку он уже был импортирован");
                Иначе
                    НачатьТранзакцию();
                    НовыйПриходныйКассовыйОрдер = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
                    НовыйПриходныйКассовыйОрдер.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента;
                    НовыйПриходныйКассовыйОрдер.СуммаДокумента = Выборка.СуммаДокумента;
                    НовыйПриходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств = Выборка.СтатьяДвиженияДенежныхСредств;
                    НовыйПриходныйКассовыйОрдер.Дата = Выборка.Дата;
                    НовыйПриходныйКассовыйОрдер.Номер = Выборка.Номер;
                    НовыйПриходныйКассовыйОрдер.Контрагент = Выборка.ПлательщикНаименование;
                    НовыйПриходныйКассовыйОрдер.Касса = Выборка.ПолучательНаименование;
                    НовыйПриходныйКассовыйОрдер.Кассир = ПараметрыСеанса.ТекущийПользователь;
                    НовыйПриходныйКассовыйОрдер.Записать();
                    ЗафиксироватьТранзакцию();
                КонецЕсли;
            КонецЦикла;



Автор: logist 30.11.17, 15:59

Цитата(burza @ 30.11.17, 15:40) *
Контрагенты одинаковые и кассы тоже.

Одинаковые это когда у них одинаковый внутренний идентификатор, а не то, что вы видите как пользователь.
И если вы из источника тянете наименование, то в приемнике оно само в СправчникСсылка никак не преобразуется. Для того что бы заполнить ссылочные типы вам надо понимать и реализовать их сопоставление в базах.

Автор: Petre 30.11.17, 16:31

burza @ Сегодня, 15:40 * ,
Через COM "одинаковыми" могут быть только примитивы, все остальное - не просто разные, но и вообще другие (другой тип - "COMОбъект").

Автор: burza 01.12.17, 9:34

logist @ Вчера, 15:59 * ,
Вы скажите как написать) пример дайте.

Автор: burza 01.12.17, 11:28

burza @ Сегодня, 9:34 * ,
вот так это делается.

НовыйПриходныйКассовыйОрдер.Контрагент = ПодобратьКонтрагента(Выборка.ПлательщикНаименование, Выборка.ПлательщикКодПоЕДРПОУ, Выборка.ПлательщикИНН);

как тяжело было сказать, все хотят помоч.

Автор: Petre 01.12.17, 12:36

faceoff.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua