Добрый вечер !
Имеется 2-sql базы.Соединение между базами идет через объект ComConnector.
Соединение происходит нормально.Только при попытке записать данные из табличной части
документа Командировочные из одной базы в другую (в аналогичный Документ Командировочные),
выскакивает ошибка.При просмотре отладчиком выясняется следующее: (таблица источник
ТабличнаяЧасть1 - Значение COMObject
Add - метод не найден.
Count - метод не найден и так далее...
Столбцов ТЧ тоже не видно в отладчике.
Реквизиты же шапки документа читаются нормально.
В чем может быть проблема ?
andrew76 @ Вчера, 19:39
,
В общем у всех документов с ТЧ при попытке чтения данных из этих ТЧ вываливается
следующая ошибка :
Произошла исключительная ситуация (1C:Enterprise 8.3.13.1690): Объект недоступен для изменения.
Реквизиты шапки документов читаются.
Где искать ? Что гонит ? Сервер (Windows Server 2012 Standard x 64) ? Сам компонент COMConnector ?
Есть мнение, что пример вашего кода может ускорить ответ.
Вы пробуете именно метод Add() выполнить? А если Добавить()?
Vofka @ Сегодня, 21:12
,
На методе Добавить и вылетает ошибка:
Произошла исключительная ситуация (1C:Enterprise 8.3.13.1690): Объект недоступен для изменения.
Телепатиру, что ИскомыйДокумент у вас - это ссылка. А манипулировать надо объектом:
ИскомыйДокументОбъект = ИскомыйДокумент.ПолучитьОбъект();
Строка = ИскомыйДокументОбъект.ТабличнаяЧасть1.Добавить();
Vofka @ Вчера, 22:23
,
ПолучитьОбъект() - насколько я понимаю,просто открывает объект для записи.
Но в отладчике я же не вижу столбцов ТЧ (скриншот 2).Поэтому и открывать для записи нечего.
Ничего не понимаю.
andrew76 @ Сегодня, 19:12
,
ИскомыйДокументОбъект = ИскомыйДокумент.ПолучитьОбъект();
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.3.13.1690): Ошибка инициализации модуля: Документ.Командировочные.МодульОбъекта
Предыстория событий :
Одна бухгалтерша,«замриялась», и находясь в этом режиме, удалила документ Командировочные, в ТЧ которого было 400 записей.
После ,выйдя из нирваны, начались вопли и вопросы есть ли в 1с подобие
Корзины для удаленных объектов, как в MS Windows.
Моя задача была в следующем : найти этот документ в архивной базе,и оттуда
Перенести содержимое этого документа в рабочую базу.
Коннектор=Новый COMОбъект("V83.ComConnector");
ИмяСервера="server";
ИмяБазы="buhg";
Логин="Администратор";
Пасворд="0101";
Попытка
v8=Коннектор.Connect("Srvr="""+СокрЛП(ИмяСервера)+""";Ref="""+СокрЛП(ИмяБазы)+""";Usr="""+СокрЛП(Логин)+""";Pwd = """ + СокрЛП(Пасворд) + """;");
сообщить("Соединение установлено !");
Исключение
Предупреждение("База данных не открыта!!!");
Возврат;
КонецПопытки;
ссылка_источник=Неопределено;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.Командировочные КАК Командировочные
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата И
| Номер = &ВыбНомер";
Запрос.УстановитьПараметр("НачДата", '20201001');
Запрос.УстановитьПараметр("КонДата", '20201031');
Запрос.УстановитьПараметр("ВыбНомер", "октяб");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Если ВыборкаДокументов.Следующий() Тогда
ссылка_источник=ВыборкаДокументов.Ссылка;
Сообщить(ВыборкаДокументов.Ссылка);
Иначе
Сообщить("Документ с таким номером не существует!");
КонецЕсли;
ВыборкаДокументов = v8.Документы.Командировочные.Выбрать(НачалоГода(ТекущаяДата()), КонецГода(ТекущаяДата()));
Пока ВыборкаДокументов.Следующий() Цикл
Если СокрЛП(ВыборкаДокументов.Номер)="окт1" тогда
ИскомыйДокумент=ВыборкаДокументов;
КонецЕсли;
КонецЦикла;
ИскомыйДокументОбъект = ИскомыйДокумент.ПолучитьОбъект(); //вот здесь и начинает гнать
Строка = ИскомыйДокументОбъект.ТабличнаяЧасть1.Добавить()
В архивной базе, в модуле внешнего соединения, можно прописать функцию, которая сделает нужную выборку и вернет структуру с данными, такую процедуру вы можете вызвать через коннектор и получить эти данные. Я так обычно делаю
ИскомыйДокумент = ВыборкаДокументов.Ссылка;
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua