Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Чтение РС базы источника через СОМ соединение          
kosalex Подменю пользователя
сообщение 20.08.14, 9:23
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Добрый день! Пытаюсь читать данные из РС базы источника и загружать прочитанные данные в РС базы приемника.

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

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

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

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

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


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

Подскажите, как правильно читать и записывать данные?

kosalex Подменю пользователя
сообщение 20.08.14, 10:34
Сообщение #2

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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

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

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

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

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

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

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

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


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

Синтаксис помошник Записать(<Замещать>):
Определяет режим замещения существующей записи в соответствии с текущими установками отбора. Истина - перед записью существующие записи будут удалены. Ложь - записи будут дописаны к уже существующим в информационной базе записям.
Значение по умолчанию: Истина.

logist Подменю пользователя
сообщение 20.08.14, 11:48
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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



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

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kosalex Подменю пользователя
сообщение 20.08.14, 11:51
Сообщение #4

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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


Спасибо smile.gif


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



Все поля в приемнике не ссылочного типа. Типы: Строка, число. Других нет.

logist Подменю пользователя
сообщение 20.08.14, 11:57
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(kosalex @ 20.08.14, 11:51) *
Все поля в приемнике не ссылочного типа.

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kosalex Подменю пользователя
сообщение 20.08.14, 12:04
Сообщение #6

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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



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

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

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

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

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


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



logist Подменю пользователя
сообщение 20.08.14, 12:07
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(kosalex @ 20.08.14, 12:04) *
НЕ ХОЧЕТ ЗАМЕНЯТЬСЯ ВОТ ЭТИМ:

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kosalex Подменю пользователя
сообщение 20.08.14, 12:18
Сообщение #8

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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



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


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


logist Подменю пользователя
сообщение 20.08.14, 13:02
Сообщение #9

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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

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

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kosalex Подменю пользователя
сообщение 20.08.14, 13:03
Сообщение #10

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(logist @ 20.08.14, 14:02) *
а, ну раз так smile.gif

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



шутку шутите?

logist Подменю пользователя
сообщение 20.08.14, 13:29
Сообщение #11

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(kosalex @ 20.08.14, 13:03) *
шутку шутите?

А Вы до сих пор не поняли почему у вас двоятся записи? Вы же считываете текущие, а потом ДОБАВЛЯЕТЕ новые, и пытаетесь записать и старые и новые. Уберите чтение текущих.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kosalex Подменю пользователя
сообщение 20.08.14, 13:33
Сообщение #12

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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


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


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


НаборЗаписейПриемник.Очистить() - удалит все данные с набора или с базы?

logist Подменю пользователя
сообщение 20.08.14, 14:06
Сообщение #13

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(kosalex @ 20.08.14, 13:33) *
удалит все данные с набора или с базы?

Из Набора, но как в этом смысл? Можно же просто не читать. Или, лишние действия - наше всё?

Сообщение отредактировал logist - 20.08.14, 14:06


Signature
Личные бесплатные консультации не даю, для этого есть форум!

kosalex Подменю пользователя
сообщение 20.08.14, 14:35
Сообщение #14

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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


Из набора - это из базы. мне казалось что набор и бд это две разные вещи. Перекрестился - все стало на свои места smile.gif

alex040269 Подменю пользователя
сообщение 20.08.14, 14:45
Сообщение #15

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(kosalex @ 20.08.14, 15:35) *
Из набора - это из базы

набор - это объект.
база изменится после набор.записать();

Сообщение отредактировал alex040269 - 20.08.14, 14:48


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

kosalex Подменю пользователя
сообщение 20.08.14, 14:49
Сообщение #16

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

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

Да да да smile.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 0:07
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!