powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
9 сообщений из 9, страница 1 из 1
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38048144
-=Gremlin=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знаю, что тема поднималась не один раз, но все же решения с 1С 8.2 не нашел.
Итак: при переходе с 1С 7.7 на 8.2 БП 3.0 пришлось переписывать связь с внешним приложением. Интеграция с 1С 7.7 работает замечательно и много где расписана, а вот с 8.2 дела обстоят хуже – информации практически нет.
Но все же: запуск 1С 8.2 реализован, чтение данных из 1С 8.2 реализовать тоже удалось. А вот с записью возникли сложности, поэтому прошу помощи. Произвожу создание и запись контрагентов следующим способом:
var OneSv8Obj, Ware, ObjForm: OleVariant;
...
Ware := OneSv8Obj.Справочники.Контрагенты.СоздатьЭлемент();
Ware.ЮридическоеФизическоеЛицо := OneSv8Obj.Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо;
Ware.Наименование := edShortName.Text;
Ware.НаименованиеПолное := edFullName.Text;
Ware.ИНН := edINN.Text;
Ware.КПП := edKPP.Text;
Ware.КодПоОКПО := edOKPO.Text;
...
Ware.Записать();

На последнюю строчку ругается: «Ошибка при выполнении обработчика – ‘ПередЗаписью’. Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода Обмен1СКЗБухгалтерия30ПередЗаписью ()»

Сами данные в 1С из внешнего приложения передаются. Это можно видеть, если запустить форму следующим способом:
ObjForm := Ware1.ПолучитьФорму();
ObjForm.Открыть('ФормаЭлемента');

Всю голову сломал – как побороть не знаю. По всей видимости какие-то настройки 1С.
Help!!!
...
Рейтинг: 0 / 0
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38048186
chatm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Gremlin=-,

Вам же написано, что у Вас передаются мутабельные значения. Приводите сначала записываемые данные к простым типам и уже после присваивайте реквизитам объекта 1С и будет Вам щастье.
...
Рейтинг: 0 / 0
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38048301
-=Gremlin=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я скорее всего чего то недопонимаю...
Ткните, какой из передаваемых параметров является мутабельным?
Ware.ЮридическоеФизическоеЛицо := OneSv8Obj.Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо - это ссылка на справочник
Ware.Наименование := edShortName.Text - это простая строка
Больше ничего не передаю.
...
Рейтинг: 0 / 0
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38048338
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=Gremlin=-,
Как насчет Ware.ОбменДанными.Загрузка = Истина?
...
Рейтинг: 0 / 0
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38048370
-=Gremlin=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зарегался,
установка этого не влияет на результат, та же самая ошибка
...
Рейтинг: 0 / 0
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38048460
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Gremlin=-, надо в Обмен1СКЗБухгалтерия30ПередЗаписью () что там делается.
...
Рейтинг: 0 / 0
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38048535
-=Gremlin=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, в программировании 1С не очень силен.
Вот процедуры:

Процедура Обмен1СКЗБухгалтерия30ПередЗаписью(Источник, Отказ) Экспорт
ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписью("Обмен1С_КАМИН_ЗарплатаБухгалтерия30", Источник, Отказ);
КонецПроцедуры

Процедура МеханизмРегистрацииОбъектовПередЗаписью(ИмяПланаОбмена, Источник, Отказ) Экспорт
МеханизмРегистрацииОбъектов(ИмяПланаОбмена, Источник, Отказ);
КонецПроцедуры

Процедура МеханизмРегистрацииОбъектов(ИмяПланаОбмена,
Объект,
Отказ,
РежимЗаписи = Неопределено,
Замещение = Ложь,
ЭтоРегистр = Ложь,
ЭтоУдалениеОбъекта = Ложь,
ЭтоКонстанта = Ложь
)
ОтключитьМеханизмРегистрацииОбъектов = Ложь;
Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов", ОтключитьМеханизмРегистрацииОбъектов)
И ОтключитьМеханизмРегистрацииОбъектов = Истина Тогда
Возврат; // отказались от выполнения
КонецЕсли;
ОбъектМетаданных = Объект.Метаданные();
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
Если Не РазделенныйПланОбмена(ИмяПланаОбмена) Тогда
ВызватьИсключение НСтр("ru = 'Регистрация изменений для неразделенных планов обмена не поддерживается.'");
КонецЕсли;
Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
Если Не РазделенныеДанные(ОбъектМетаданных) Тогда
ВызватьИсключение НСтр("ru = 'Регистрация изменений неразделенных данных в разделенном режиме.'");
КонецЕсли;
Иначе
Если РазделенныеДанные(ОбъектМетаданных) Тогда
ВызватьИсключение НСтр("ru = 'Регистрация изменений разделенных данных в неразделенном режиме.'");
Иначе
// Для неразделенных данных в неразделенном режиме выполняем регистрацию изменений данных
// на всех узлах разделенных планов обмена.
// Использование механизма правил регистрации в этом режиме не поддерживается.
ТекстЗапроса =
"ВЫБРАТЬ
| ПланОбмена.Ссылка КАК Получатель
|ИЗ
| ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена
|ГДЕ
| НЕ ПланОбмена.ЭтотУзел
| И НЕ ПланОбмена.ПометкаУдаления";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Попытка
Получатели = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель");
Исключение
ТекстЗапроса =
"ВЫБРАТЬ
| ПланОбмена.Ссылка КАК Получатель
|ИЗ
| ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена
|ГДЕ
| НЕ ПланОбмена.ПометкаУдаления";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Получатели = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель");
КонецПопытки;
Для Каждого Получатель Из Получатели Цикл
Попытка
Объект.ОбменДанными.Получатели.Добавить(Получатель);
Исключение
// Обработка исключения не требуется.
// Ожидаемо наличие в параметре "Получатели" преопределенных узлов разделенных планов обмена.
КонецПопытки;
КонецЦикла;
КонецЕсли;
Возврат; // Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()
КонецЕсли;
КонецЕсли;
// проверяем актуальность кеша сеанса для МРО
ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов();
Если НЕ ОбменДаннымиВызовСервера.ОбменДаннымиВключен() Тогда
Возврат;
КонецЕсли;
// определяем необходимость регистрации объекта на узле отправителе
РегистрироватьОбъектНаУзлеОтправителе = Ложь;
Если Объект.ДополнительныеСвойства.Свойство("РегистрироватьОбъектНаУзлеОтправителе", РегистрироватьОбъектНаУзлеОтправителе)
И РегистрироватьОбъектНаУзлеОтправителе = Истина Тогда
// обнуляем ссылку на узел отправитель
Объект.ОбменДанными.Отправитель = Неопределено;
КонецЕсли;
// при физическом удалении объекта ВРО не выполняем
ЗарегистрироватьОбъектКВыгрузке = ЭтоРегистр ИЛИ ЭтоУдалениеОбъекта ИЛИ ЭтоКонстанта;
ОбъектМодифицирован = ОбъектМодифицированДляПланаОбмена(Объект, ОбъектМетаданных, ИмяПланаОбмена, РежимЗаписи, ЗарегистрироватьОбъектКВыгрузке);
Если Не ОбъектМодифицирован Тогда
Если ОбменДаннымиПовтИсп.АвтоРегистрацияРазрешена(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()) Тогда
// если объект не модифицирован и он регистрируется автоматически,
// то удаляем все узлы по авторегистрации для текущего плана обмена
СократитьПолучателей(Объект, ВсеУзлыПланаОбмена(ИмяПланаОбмена));
КонецЕсли;
// объект не модифицирован относительно текущего плана обмена
// регистрацию на узлах этого плана обмена не выполняем
Возврат;
КонецЕсли;
Если Не ОбменДаннымиПовтИсп.АвтоРегистрацияРазрешена(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()) Тогда
ПроверятьСсылку = ?(ЭтоРегистр ИЛИ ЭтоКонстанта, Ложь, Не Объект.ЭтоНовый() И Не ЭтоУдалениеОбъекта);
МассивУзловРезультат = Новый Массив;
ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловРезультат, Объект, ИмяПланаОбмена, ОбъектМетаданных, ПроверятьСсылку, ЭтоРегистр, ЭтоУдалениеОбъекта, Замещение, РежимЗаписи);
// обработчик "После определения получателей"
ОбменДаннымиПереопределяемый.ПослеОпределенияПолучателей(Объект, МассивУзловРезультат, ИмяПланаОбмена);
ДополнитьПолучателей(Объект, МассивУзловРезультат);
КонецЕсли;
КонецПроцедуры


Есть подписка "Обмен1СКАМИНЗарплатаБухгалтерия30ЗарегистрироватьИзменение", где в обработчике стоит вызов: ОбменДаннымиСобытияБП.Обмен1СКЗБухгалтерия30ПередЗаписью
...
Рейтинг: 0 / 0
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38049517
Зарегался
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-=Gremlin=-,

Какой объект используете? V82.Application или V82C.Application? Есть ли соответствующая галка (толстый или тонкий клиент) у общего модуля ОбменДаннымиСобытияБП?
...
Рейтинг: 0 / 0
Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
    #38049535
-=Gremlin=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую V82.Application - толстый клиент. С тонким клиентом даже чтение из 1С не удалось реализовать. Галки все есть.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Запись в 1С 8.2 БП 3.0 из внешнего приложения через OLE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]