Имя: Пароль:
1C
1C 7.7
v7: Запись в ТиС цены через OLE
0 Маркусс
 
28.03.14
15:30
Добрый день.

Через оле цепляюсь к другой базе ТиС.
Нахожу цену.
Запихиваю её как элемент справочника оле в ТЗ.
После выполнения манипуляций с размером цены Пытаюсь
записать цену обратно. Ничего не просходит.
Ошибок нет. Цена не меняется.
Чего делаю не так?

    ТЗНомЦены.ВыбратьСтроки();
    Пока ТЗНомЦены.ПолучитьСтроку()=1 Цикл
    
        ИзменяемаяЦена = ТЗНомЦены.ЦенаС_ОЛЕ_базы;//Элемент справочника цены, полученный через ОЛЕ
        ИзменяемаяЦена.ИспользоватьДату(ТекущаяДата());
        ИзменяемаяЦена.Цена = ТЗНомЦены.НоваяЦена;
        ИзменяемаяЦена.Записать();
        
    КонецЦикла;

Спасибо.
1 Маркусс
 
28.03.14
15:31
В целевой базе в ПриЗаписи() убрал все проверки, которые могли бы помешать.
2 Маркусс
 
28.03.14
15:32
Права у подключения полные
3 КонецЦикла
 
28.03.14
15:32
Используй объект "Периодический"
4 Маркусс
 
28.03.14
15:38
(3) а можно поподробнее?
5 КонецЦикла
 
28.03.14
15:52
Периодический.ИспользоватьОбъект(Объект);
Периодический.Значение = Значение;
Периодический.ДатаЗнач = ТекДата;
Периодический.Записать();
6 Маркусс
 
28.03.14
15:52
ИзменяемаяЦена.ТекущийОбъект() ошибку даёт
7 КонецЦикла
 
28.03.14
15:56
ТЗНомЦены.ЦенаС_ОЛЕ_базы
8 КонецЦикла
 
28.03.14
15:56
Не знаю что там, но судя по каменту в коде может подойти
9 Мимохожий Однако
 
28.03.14
15:59
Через ОЛЕ можно передать только простые типы. Посмотри в базе знаний форума примеры
10 ksupalo
 
28.03.14
16:01
Такие вещи лучше вызывать на OLE сервере.
Пишешь в глобальном модуле процедуру с этим кодом
ИзменяемаяЦена = ПередаваемаяЦенаВФункцию;//Элемент справочника цены, полученный через ОЛЕ

        ИзменяемаяЦена.ИспользоватьДату(ТекущаяДата());
        ИзменяемаяЦена.Цена = ТЗНомЦены.НоваяЦена;
        ИзменяемаяЦена.Записать();
и вызываешь через OLE эту новую функцию.

Таких приколов много, разбираться можно, конечно, но смысл есть только тогда, когда нет возможности изменять конфу OLE базы. Если можно - просто добавляешь и не заморачиваешься.

Сталкивался при получение уникальных идентификаторов...
11 Маркусс
 
28.03.14
16:03
(8)    Периодический.ИспользоватьОбъект("Цена",ИзменяемаяЦена);
                Периодический.Значение =  ТЗНомЦены.НоваяЦена;
                Периодический.ДатаЗнач = ТекущаяДата();
                Периодический.Записать();
Пишет ошибку :Периодический.ИспользоватьОбъект("Цена",ИзменяемаяЦена);
{Z:\ВЫГРУЗЦЕНКП_КЦ.ERT(17)}: Цена не является константой или периодическим параметром!
12 Маркусс
 
28.03.14
16:04
(9) в тз хранится объект оле, вполне могу обращаться к его реквизитам
13 Маркусс
 
28.03.14
16:04
+ к 11 цена точно периодическая.
14 ksupalo
 
28.03.14
16:13
Проверь код на базе.
А потом уже по OLE. Это займет 3 минуты, будешь знать причину сразу.
15 Мимохожий Однако
 
28.03.14
16:26
(12)Включи отладчик и увидишь, что передаёшь
16 Маркусс
 
01.04.14
11:12
Если кому интересно.
Идея запихивать ОЛЕ в ТЗ была неудачной.
оле хранит только последний полученный объект.
Процедура записи имеет вид:
    ТекНом_КЦ = ПолучитьНомКЦ(ТЗНомЦены.КодКредоЦентр);
            ТекЦена_КЦ = ПолучитьЦенуКЦ(ТекНом_КЦ);
            ТекЦена_КЦ.ИспользоватьДату(ТекущаяДата());
            ТекЦена_КЦ.Единица = ПолучитьЕИ_КЦ(ТекНом_КЦ,ТЗНомЦены.НаимЕИКредоЦентр);
            ТекЦена_КЦ.Цена = ТЗНомЦены.Цена;
            ТекЦена_КЦ.Записать();
17 Маркусс
 
01.04.14
11:13
ПолучитьЕИ_КЦ и ПолучитьЦенуКЦ - каждый раз достаём из оле базы
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс