Имя: Пароль:
1C
1С v8
из 7.7 в 8.2 через ole Дату и Время документа
,
0 ЧессМастер
 
01.08.12
17:01
Всем доброе время суток !

Делаю перенос из 7.7 в 8.2 через ole перенос документов. Все работает документы отлично заполняются записываются и проводятся. Но хочу записывать документы в 8.2 с временем 7.7. Как это сделать ?
В 7.7 я могу присвоить создаваемому документу Дату но она будет без времени (время установится 00:00:00)
А присвоить Дату через конструкцию Дата(Год,Месяц,День,Час,Минута,Секунда) не получается - работа же идет в 77

Как решить эту проблему ?
1 DrShad
 
01.08.12
17:04
что-то ты гонишь в клюшках у документов тоже есть время
2 Азат
 
01.08.12
17:05
КГ/АМ!

Док.ПолучитьВремя(ЧЧ, ММ, СС);
3 ЧессМастер
 
01.08.12
17:05
(1) в 7.7 Время и Дата отдельно
а мне надо установить Дату создаваемого документа v8
4 ЧессМастер
 
01.08.12
17:06
(2) дальше что ? время я получил
мне надо УСТАНОВИТЬ время создаваемому документу v8 находясь в 7.7
5 viktor_vv
 
01.08.12
17:06
Я так понял ты к восьмерке цепляешься из семерки и надо по ОЛЕ время в восьмерке установить.
6 DrShad
 
01.08.12
17:06
ну и что в снеговике конструкция Дата(2012, 1, 1, 1, 1, 1) что сделает?
7 hhhh
 
01.08.12
17:07
(3) ну делайте конструкцию Дата() в 8.2. Зачем вы ее в 7.7 делаете?
8 DrShad
 
01.08.12
17:07
(4) у тебя изначально неверный подход к реализации задачи, нужно было из 8-ки цепляться к клюшкам
9 Попытка1С
 
01.08.12
17:08
http://infostart.ru/public/83859/


Проблема времени из 7.7 (не можем передать)

Добавляем в нашу базу регистр накопления и документ регистратор и пишем в 7.7 простую функцию, формирующую движения данного документа

Функция ТипаПереносОстатков()
Попытка
ОткрытиеБазы("V81.ComConnector");
Исключение
Сообщить("Не удалось открыть базу с заданными параметрами");
Возврат "";
КонецПопытки;
Стр="";
Если ВвестиСтроку(Стр,"Справочник",50)=1 Тогда
Спр=connection.Справочники.Справочник1.НайтиПоНаименованию(Стр);
Если Спр.Ссылка=connection.Справочники.Справочник1.ПустаяСсылка() Тогда
Спр=connection.Справочники.Справочник1.СоздатьЭлемент();
Спр.Наименование=Стр;
Спр.Записать();
КонецЕсли;
Док=connection.Документы.Документ1.СоздатьДокумент();
Док.Дата=connection.ЗначениеИзСтрокиВнутр("{""D"",20081231235959}");
Док.Реквизит1=Спр.Ссылка;
Док.Записать();
Движение=Док.Движения.РегистрНакопления1.ДобавитьПриход();
Движение.Период=connection.ЗначениеИзСтрокиВнутр("{""D"",20081231235959}");
Движение.Измерение1=Спр.Ссылка;
Движение.Ресурс1=15;
Док.Движения.РегистрНакопления1.Записать();
Сообщить(connection.String(Док.Ссылка));
КонецЕсли;
connection = "";
cntr = "";
КонецФункции

Рассмотрим лог сообщений
Документ1 000000001 от 31.12.2008 0:00:00

Вывод из этого лога прост. Время даже при передаче через ЗначениеИзСтрокиВнутр теряется.
10 viktor_vv
 
01.08.12
17:11
(4) Мне кажется тебе надо выполнить

ДатаДокВосьмерки = ОлеОбъектВосьмерки.Дата(Год,Месяц,День,Час,Минута,Секунда) ;
11 olegves
 
02.08.12
09:47
(0) в клюшках время записано в Журнале документов (таблица _1SJOurn) в 36-ричном формате(секунд с 0 часов текущих суток). Поищи функции преобразования 36-ричного в 10-чное (есть даже на скуле, кот можно дергать ОЛЕй), ну а дальше сообразишь
12 olegves
 
02.08.12
09:50
(3) а СОМ-коннектор религия не позволяет использовать? Из клюшек спокойно можно подключиться к 8.2
13 ЧессМастер
 
02.08.12
12:11
(5) правильно понимаешь. ИЗ 7.7 В 8.2 по OLE

(6) в 7.7 нет конструкции Дата(2012, 1, 1, 1, 1, 1). Есть конструкция Дата(2012, 1, 1)

(8) а разница ? у меня ИЗ 7.7 В 8.2 по OLE все отлично получается - документы заполняются записываются и проводятся

(10)
>ДатаДокВосьмерки = ОлеОбъектВосьмерки.Дата(Год,Месяц,День,Час,Минута,Секунда);

так не работает

(11) у меня перенос ИЗ 7.7 В 8.2 по OLE
зачем мне находясь в 7.7 лезть в таблицу _1SJOurn если я могу использовать конструкцию ПолучитьВремя()
14 ЧессМастер
 
02.08.12
12:12
(12) а разница ? у меня ИЗ 7.7 В 8.2 по OLE все отлично получается - документы заполняются записываются и проводятся
15 ЧессМастер
 
02.08.12
12:16
(10) у меня импорт ИЗ 7.7 В 8.2
соответственно я могу написать

ДокВосьмерки.Дата = ДокСемерки.ДатаДок;

или
ДокВосьмерки.Дата = Дата(2012,08,02);

но не
ДокВосьмерки.Дата = Дата(2012,08,02,01,01,01);
16 DrShad
 
02.08.12
12:24
(15) а как именно не работает (10)?
17 viktor_vv
 
02.08.12
12:31
(16)+ Кстати да, ты под ОлеОбъектВосьмерки что понял ? Я имел ввиду саму базу, а не документ. По идее тогда метод будет выполняться в контексте восьмерки.
18 viktor_vv
 
02.08.12
13:00
(17)+ Не так не работает, как я думал. Поле агрегатного объекта не обнаружено.
19 viktor_vv
 
02.08.12
13:44
Это таки надо как в (9) но время все равно теряется.
20 DrShad
 
02.08.12
13:47
(19) а не лучше ли делать как нормальные люди, т.е. из 8-ки конектиться к клюшкам и тянуть доки?
21 viktor_vv
 
02.08.12
14:10
(20) Так это не ко мне :), я в принципе только за, это ТС упирается :).
Я встрял чисто для себя поразбираться.
22 DrShad
 
02.08.12
14:11
(21) а мне было влом писать конект из клюшек к снеговику :)
23 viktor_vv
 
02.08.12
14:22
Кстати прикол, оказывается все намного проще. Неявное преобразование рулит :).

ДокВосьмерки.Дата = ""+ДокСемерки.ДатаДок + " "+ДокСемерки.ПолучитьВремя();

Это все в семерке.

Вроде даже работает :).
24 viktor_vv
 
02.08.12
14:29
Проверял так. Док записывается, время есть из клюшек. фадДок - это реквизит на форме.

   ладДок = СоздатьОбъект("Документ.РасходнаяНакладная");
   ладДок.НайтиДокумент(фадДок);
   
   v8=СоздатьОбъект("V82.ComConnector");
   
   База = v8.Connect("File="""+СокрЛП(КаталогБазы)+""";Usr=""ОЛЕ"";Pwd=""12345"";");
   
   Док8=База.Документы.Проверка.СоздатьДокумент();
   //"13.06.2012 00:00:00" ;
   Док8.Дата = ""+фадДок.ДатаДок+" "+ладДок.ПолучитьВремя() ;
   
   Док8.Записать();
25 viktor_vv
 
02.08.12
14:34
(24)+ Для верности лучше так, а то неизвестно какой формат в настройках будет стоять.

   Док8.Дата = ""+Формат(фадДок.ДатаДок,"ДДДММГГГГ")+" "+ладДок.ПолучитьВремя() ;
26 Torquader
 
03.08.12
00:21
Можно создать прослойку из объекта MSScriptControl и в нём уже использовать стандартную OLE-дату, которая со временем.
27 ЧессМастер
 
06.08.12
09:41
(20) у меня сейчас так бизнес-процесс устроен. не хочется ломать
(25) да так работает отлично. спасибо за подсказку !
28 ЧессМастер
 
06.08.12
16:33
еще один вопрос

встал вопрос сверки табличных частей документов 7.7 и 8.2 по OLE

выгрузить в таблицу значений табличную часть по OLE не сложно.
проблема в том что в 7.7 и 8.2 разные методы языка по работе с таблицей значений и поэтому как сравнивать таблицы ?

например

ТЗ77 = СоздатьОбъект("ТаблицаЗначений");
Док77.ВыгрузитьТабличнуюЧасть(ТЗ77);

ТЗ82 = Док77.Товары.Выгрузить();

Для х=1 По ТЗ77.КоличествоСтрок() Цикл
               
ТекНом77 = ТЗ77.ПолучитьЗначение(х,"Материал");

// и вот тут самое интересное - такая конструкция не работает    
ТекНом77 = ТЗ82[х-1].Номенклатура;

КонецЦикла;

конструкция

Для Каждого СтрокаТаблицы Из ТЗ82 Цикл
  Сообщить(СтрокаТаблицы.Номенклатура);
КонецЦикла

выполняемая в среде 77 тоже не сработает.

в результате я сделал обходным путем - передачей текста запроса из 77 в  82 и обработка выборки  уже в 77 но интересует ответ - возможно ли как-то сравнивать ТЗ разных версий 1С?