Имя: Пароль:
1C
1C 7.7
v7: ОЛЕша :)
0 Денисок
 
11.10.11
13:10
Делаю Импорт документов (одного вида "Приходная накладная"), всё хорошо, вот этот блок делает запись в документ, но не все так хорошо >Продолжение после кода.
Процедура ЗаполнитьТаблицу()
сТест=БазаТест.CreateObject("Справочник.Товары");
сРеа=СоздатьОбъект("Справочник.Товары");
   ДоКРеа.Новый();
   ДокРеа.НомерДок = ДокТест.НомерДок;
   ДокРеа.ДатаДок = ДокТест.ДатаДок;  
   ДокРеа.Договор = ДокТест.Договор;
   ДокРеа.Контрагент = ДокТест.КонтрАгент;
   ДокТест.ВыбратьСтроки();
   Пока ДокТест.ПолучитьСтроку() = 1 цикл
       ДокРеа.НоваяСтрока();    
       ДокРеа.НомерСтроки = ДокТест.НомерСтроки;    
       ДокРеа.Товар = ДокТест.Товар;
       ДокРеа.Количество = ДокТест.Количество;
       ДокРеа.Цена = ДокТест.Цена;
       ДокРеа.Сумма = ДокТест.Сумма;  
       ДокРеа.Записать();
       ДокРеа.Провести();
   КонецЦикла;  
КонецПроцедуры

вот эта строчка:
ДокРеа.Товар = ДокТест.Товар;
не хочет записывать, сволочуга.
База Тест товар выбирается из справочника и я думал может в этом причина...а может и нет, опыта не хватает, сообразить не могу :)
Помоги кто чем может, люди добрые! :)

P.S. забыл добавить диалоги контрагент и договора тоже пустые и в ОЛЕ базе выбираются тоже из справочников. Как быть то с этим, что делать?
1 Попытка1С
 
11.10.11
13:12
Запись и проведение в цикле... круто!
2 DrHiHi
 
11.10.11
13:12
А как ты идентифицируешь объекты между базами??
3 povar
 
11.10.11
13:13
не понял, при чем тут ОЛЕ ?
4 Godofsin
 
11.10.11
13:13
Код серьезен
5 vde69
 
11.10.11
13:14
ДокРеа.Договор = ДокТест.Договор;

ты в одной базе хочешь иметь ссылку на договор из другой базы? так не бывает
6 DrHiHi
 
11.10.11
13:14
(3) я так понял через оле подключается к другой базе и хочет скопировать документы
7 DrHiHi
 
11.10.11
13:14
ЭТО ЖЕ ГЕНИАЛЬНО, СУСЛИК %)))
8 povar
 
11.10.11
13:14
(6) где это видно ?
9 Денисок
 
11.10.11
13:14
Это кусок который заполняет шапку и табличные данные документа, небольшой кусок. Проблема в том что все поля заполняются, кроме тех что в базе Оле выбирались из справочников.
10 DrHiHi
 
11.10.11
13:15
(8) БазаТест.CreateObject( я по этим строкам понял
11 Godofsin
 
11.10.11
13:15
(1)Запись и проведение после заполнения КАЖДОЙ строки - вот это круто!
12 marty0701
 
11.10.11
13:16
Я так понимаю, в документ то надо бы ссылку на товар в справочнике запиндюрить, с какого лешего он тебе товар вставит в документ?
13 Попытка1С
 
11.10.11
13:16
(11) Я это и имел ввиду.
14 povar
 
11.10.11
13:16
(10) и что, дальше то это не используется никак
15 Денисок
 
11.10.11
13:17
(11) да, это глупанул по началу, потом переделал...
16 DrHiHi
 
11.10.11
13:18
(14) это часть кода, а значить, что было подключение к другой базе %)), а значить OLE... так бы у него выдавало ошибку на строке БазаТест.CreateObject(
17 Денисок
 
11.10.11
13:19
(12) не подскажешь как прописать?
18 povar
 
11.10.11
13:20
(16) только она лишняя в приведенной процедуре )
19 Попытка1С
 
11.10.11
13:21
(17) Ну для начала надо его найти по коду хотя бы.
20 DrHiHi
 
11.10.11
13:21
(17) не тупи ищи элементы в создаваемой базе (по коду, по наименованию, по полному коду), если это копии базы, то можешь просто преобразовать в строку и преобразовать назад
21 Денисок
 
11.10.11
13:22
ДокРеа.Договор = ДокТест.Договор;
ДокРеа.Контрагент = ДокТест.КонтрАгент;
ДокРеа.Товар = ДокТест.Товар;

вот эти строки не работают.
22 Денисок
 
11.10.11
13:22
(20) во ща попробую
23 Денисок
 
11.10.11
13:22
(20) я не туплю, я не умею...вот и спрашиваю
24 DrHiHi
 
11.10.11
13:22
(18) повар, а котелок не варит %)))
25 povar
 
11.10.11
13:23
(24) покажи где используются переменные
сТест=БазаТест.CreateObject("Справочник.Товары");
сРеа=СоздатьОбъект("Справочник.Товары");
26 Денисок
 
11.10.11
13:28
извиняюсь ( все переперченные такого типа у меня в модуле, а не в процедурах записаны и я скинул не те :(
27 Денисок
 
11.10.11
13:28
переменные*
28 Денисок
 
11.10.11
13:28
ДокТест = БазаТест.CreateObject("Документ.Поступление_Товара");
ДоКРеа = СоздатьОбъект("Документ.Поступление_Товара");
29 DrHiHi
 
11.10.11
13:29
(25) ты спросил а причем тут ОЛЕ... а теперь еще скажи, что оно тут вообще не используется
30 povar
 
11.10.11
13:31
(29) в процедуре из (0), без уточнений из (28), не используется
31 Godofsin
 
11.10.11
13:34
(28) Так позиция товара точно существует в базе приемнике?
Попробуй сначала спозиционироваться на него в базе приемнике и подставь его.
32 DrHiHi
 
11.10.11
13:34
(30) признайся что затупил))) тут вроде бы всем (кроме одаренных) было ясно, что тут используется ОЛЕ
33 povar
 
11.10.11
13:38
(32) согласен, ты тупишь. То, что автор написал в заголовке слово ОЛЕ, не означает что он его использует, на этом форуме полно таких примеров
34 Денисок
 
11.10.11
13:39
ДокРеа.Товар = Строка(ДокТест.Товар);
Вот так сделать?
35 Godofsin
 
11.10.11
13:40
(34) Ни в коем случае!!!
36 Денисок
 
11.10.11
13:40
он везде ole пишит
37 0xFFFFFF
 
11.10.11
13:41
(34) НайтиПоКоду(ДокТест.Товар.Код)
Но сначала нужно в базе источнике его создать.. ентот элемент.
38 DrHiHi
 
11.10.11
13:42
(34) ЗначениеИзСтрокиВнутр(БазаОЛЕ.ЗначениеВСтрокуВнутр(ДокТест.Товар)) что-то вроде этого
или найти по полному коду
... только это в том случае если базы скопированы
39 0xFFFFFF
 
11.10.11
13:42
(36) Через ОЛЕ можно передавать только базовые типы (строка, число, дата). А то что ты пишеш ДокТест.Товар - имеет тип ОЛЕобъекта.
А ДокРеа.Товар - имеет тип Справочник.Товары (или как у тя там). Совершенно разные типы понимаш ли...?
40 Godofsin
 
11.10.11
13:42
НужТов = СоздатьОбъект("Справочник.Товары");
Если НужТов.НайтиПоКоду(ДокТест.Товар.Код) = 1 тогда
ДокРеа.Товар = НужТОв.ТекущийЭлемент();
иначе
...
...
///создаешь его.
КонецЕсли;
41 Денисок
 
11.10.11
13:56
ооо, мужики, большое спасибо! Вот это работает (40), я еще не особо шарю, разобраться сложно, Спасибо :)
42 Смотрящий от 1С
 
11.10.11
14:01
http://triteh.ru/ole77/index.php
чудная вещь, генерит почти весь код для переноса по ОЛЕ
43 Godofsin
 
11.10.11
14:06
(41) Только "СоздатьОбъект" в цикл не вноси =)