Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение РС базы источника через СОМ соединение
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
kosalex
Добрый день! Пытаюсь читать данные из РС базы источника и загружать прочитанные данные в РС базы приемника.

Вот код:
Процедура ЗагрузитьДанныеСЮжнойЖДВесовой() Экспорт;
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";

БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
Выборка_РС_ЮЖД    = БазаИсточник.РегистрыСведений.КФЗЮжнаяЖДВесовая.Выбрать();

Данные_РС_ЮЖД = Новый ТаблицаЗначений;
СтрокаДанных = Данные_РС_ЮЖД.Добавить();

Пока Выборка_РС_ЮЖД.Следующий() Цикл
    ЗаполнитьЗначенияСвойств(СтрокаДанных,Выборка_РС_ЮЖД,,);
КонецЦикла;

МенеджерЗаписи = РегистрыСведений.КФЗЮжнаяЖДВесовая.СоздатьМенеджерЗаписи();
ЗаполнитьЗначенияСвойств(МенеджерЗаписи,Данные_РС_ЮЖД);
КонецПроцедуры


Ругается на то что в переменной "Выборка_РС_ЮЖД" не имеет метод "Следующий()"

Подскажите, как правильно читать и записывать данные?
kosalex
Подумал, и написал так:
РАБОТАЕТ!
Процедура ЗагрузитьДанныеСЮжнойЖДВесовой() Экспорт;
СОМСоединение = Новый COMОбъект("V83.ComConnector");
Сервер = "***";
ИмяБазы = "***";
Пользователь = "***";
Пароль = "***";
СтрокаПодключения = "Srvr = '" + Сервер + "';" + "Ref = '" + ИмяБазы + "';" + "Usr = '" + Пользователь + "';" + "Pwd = '" + Пароль + "';";

БазаИсточник = СОМСоединение.Connect(СтрокаПодключения);
//РегИсточник    = БазаИсточник.РегистрыСведений.КФЗЮжнаяЖДВесовая;
БазаИсточник_Запрос = БазаИсточник.Newobject("Запрос");

    ТекстЗапроса = "ВЫБРАТЬ
                   |    КФЗЮжнаяЖДВесовая.Период КАК Период,
                   |    КФЗЮжнаяЖДВесовая.НомерВесов,
                   |    КФЗЮжнаяЖДВесовая.НомерВагона,
                   |    КФЗЮжнаяЖДВесовая.Грузоотправитель,
                   |    КФЗЮжнаяЖДВесовая.Грузополучатель,
                   |    КФЗЮжнаяЖДВесовая.Номенклатура,
                   |    КФЗЮжнаяЖДВесовая.Брутто,
                   |    КФЗЮжнаяЖДВесовая.Тара,
                   |    КФЗЮжнаяЖДВесовая.Нетто,
                   |    КФЗЮжнаяЖДВесовая.Фамилия,
                   |    КФЗЮжнаяЖДВесовая.Действие
                   |ИЗ
                   |    РегистрСведений.КФЗЮжнаяЖДВесовая КАК КФЗЮжнаяЖДВесовая
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Период";

БазаИсточник_Запрос.Текст = ТекстЗапроса;

                                
ТаблицаДанныхИсточник = БазаИсточник_Запрос.Выполнить().Выгрузить();
                            
НаборЗаписейПриемник = РегистрыСведений.КФЗЮжнаяЖДВесовая.СоздатьНаборЗаписей();
НаборЗаписейПриемник.Записывать = Истина;
НаборЗаписейПриемник.Прочитать();

Для Каждого СтрокаДанных Из ТаблицаДанныхИсточник Цикл
    ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(ЗаписьПриемник,СтрокаДанных,,);
КонецЦикла;

НаборЗаписейПриемник.Записать();

КонецПроцедуры


Вопрос другой, когда записывается набор записей в приемнике, то уже существуют записи, параметр у метода Записать() не указан, значит существующие запии долджны быть удалены.
Пишет что в приемнике уже есть такая запись, запись не записана!

Синтаксис помошник Записать(<Замещать>):
Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям.
Значение по умолчанию: Истина.
logist
Цитата(kosalex @ 20.08.14, 10:34) необходимо зарегистрироваться для просмотра ссылки
Для Каждого СтрокаДанных Из ТаблицаДанныхИсточник Цикл
    ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(ЗаписьПриемник,СтрокаДанных,,);
КонецЦикла;

Можно заменить на
ЗаписьПриемник.Загрузить(ТаблицаДанныхИсточник.Выгрузить());



Цитата(kosalex @ 20.08.14, 10:34) необходимо зарегистрироваться для просмотра ссылки
Вопрос другой, когда записывается набор записей в приемнике

А у вас все поля не ссылочного типа?
kosalex
Цитата(logist @ 20.08.14, 12:48) необходимо зарегистрироваться для просмотра ссылки
Можно заменить на
ЗаписьПриемник.Загрузить(ТаблицаДанныхИсточник.Выгрузить());


Спасибо smile.gif


А у вас все поля не ссылочного типа?



Все поля в приемнике не ссылочного типа. Типы: Строка, число. Других нет.
logist
Цитата(kosalex @ 20.08.14, 11:51) необходимо зарегистрироваться для просмотра ссылки
Все поля в приемнике не ссылочного типа.

Тогда у вас попытка записать больше одной строки с одинаковыми измерениями.
kosalex
Цитата(logist @ 20.08.14, 12:57) необходимо зарегистрироваться для просмотра ссылки
Тогда у вас попытка записать больше одной строки с одинаковыми измерениями.



У меня в приемнике уже есть данные, практически те же самые данные записываются из источника в приемник, т.е. была запись в приемнике и я такую же запись записываю. По идеи должно заменить старую запись на новую. Правильно?

ВОТ ЭТО ЦИКЛ:
НаборЗаписейПриемник = РегистрыСведений.КФЗЮжнаяЖДВесовая.СоздатьНаборЗаписей();
НаборЗаписейПриемник.Записывать = Истина;
НаборЗаписейПриемник.Прочитать();

Для Каждого СтрокаДанных Из ТаблицаДанныхИсточник Цикл
    ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(ЗаписьПриемник,СтрокаДанных,,);
КонецЦикла;

НаборЗаписейПриемник.Записать(Истина)
;

НЕ ХОЧЕТ ЗАМЕНЯТЬСЯ ВОТ ЭТИМ:
ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
ЗаписьПриемник.Загрузить(ТаблицаДанныхИсточник.Выгрузить());


Метот объекта не обнаружен.


logist
Цитата(kosalex @ 20.08.14, 12:04) необходимо зарегистрироваться для просмотра ссылки
НЕ ХОЧЕТ ЗАМЕНЯТЬСЯ ВОТ ЭТИМ:

Ну вы ж как-то думайте сами, а не тупо передирайте код, додумывая еще какие-то добавки...
НаборЗаписейПриемник.Загрузить(ТаблицаДанныхИсточник.Выгрузить());
kosalex
Цитата(logist @ 20.08.14, 13:07) необходимо зарегистрироваться для просмотра ссылки
Ну вы ж как-то думайте сами, а не тупо передирайте код, додумывая еще какие-то добавки...
НаборЗаписейПриемник.Загрузить(ТаблицаДанныхИсточник.Выгрузить());



НаборЗаписейПриемник.Загрузить(ТаблицаДанныхИсточник.Выгрузить());


Метод объекта не обнаружен Выгрузить(). Тип "ТаблицаДанныхИсточник" = СОМОбъект.

logist
Цитата(kosalex @ 20.08.14, 12:18) необходимо зарегистрироваться для просмотра ссылки
Метод объекта не обнаружен Выгрузить(). Тип "ТаблицаДанныхИсточник" = СОМОбъект.

а, ну раз так smile.gif

уберите это: НаборЗаписейПриемник.Прочитать();
kosalex
Цитата(logist @ 20.08.14, 14:02) необходимо зарегистрироваться для просмотра ссылки
а, ну раз так smile.gif

уберите это: НаборЗаписейПриемник.Прочитать();



шутку шутите?
logist
Цитата(kosalex @ 20.08.14, 13:03) необходимо зарегистрироваться для просмотра ссылки
шутку шутите?

А Вы до сих пор не поняли почему у вас двоятся записи? Вы же считываете текущие, а потом ДОБАВЛЯЕТЕ новые, и пытаетесь записать и старые и новые. Уберите чтение текущих.
kosalex
Цитата(logist @ 20.08.14, 14:29) необходимо зарегистрироваться для просмотра ссылки
А Вы до сих пор не поняли почему у вас двоятся записи? Вы же считываете текущие, а потом ДОБАВЛЯЕТЕ новые, и пытаетесь записать и старые и новые. Уберите чтение текущих.


))понял), а если так напишу:
НаборЗаписейПриемник = РегистрыСведений.КФЗЮжнаяЖДВесовая.СоздатьНаборЗаписей();
НаборЗаписейПриемник.Записывать = Истина;
НаборЗаписейПриемник.Прочитать();
НаборЗаписейПриемник.Очистить();


Для Каждого СтрокаДанных Из ТаблицаДанныхИсточник Цикл
    ЗаписьПриемник = НаборЗаписейПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(ЗаписьПриемник,СтрокаДанных,,);
КонецЦикла;
НаборЗаписейПриемник.Записать();


НаборЗаписейПриемник.Очистить() - удалит все данные с набора или с базы?
logist
Цитата(kosalex @ 20.08.14, 13:33) необходимо зарегистрироваться для просмотра ссылки
удалит все данные с набора или с базы?

Из Набора, но как в этом смысл? Можно же просто не читать. Или, лишние действия - наше всё?
kosalex
Цитата(logist @ 20.08.14, 15:06) необходимо зарегистрироваться для просмотра ссылки
Из Набора, но как в этом смысл? Можно же просто не читать. Или, лишние действия - наше всё?


Из набора - это из базы. мне казалось что набор и бд это две разные вещи. Перекрестился - все стало на свои места smile.gif
alex040269
Цитата(kosalex @ 20.08.14, 15:35) необходимо зарегистрироваться для просмотра ссылки
Из набора - это из базы

набор - это объект.
база изменится после набор.записать();
kosalex
Цитата(alex040269 @ 20.08.14, 15:45) необходимо зарегистрироваться для просмотра ссылки
набор - это объект.
база изменится после набор.записать();

Да да да smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.