Имя: Пароль:
1C
 
КД: Как загрузить в 8-ку дату дока СО ВРЕМЕНЕМ из 7.7?
0 fisher
 
14.03.09
18:43
Собсно, сабж.
С КД пока слабо знаком. И так и сяк пробовал - болт.
Подскажите, кто сталкивался.
1 ТелепатБот
 
гуру
14.03.09
18:43
2 fisher
 
14.03.09
18:45
Генерил на вход строковый литерал ГГГГММДДЧЧММСС - выдаёт ошибку преобразования XMLЗначение() при загрузке...
3 Lama12
 
14.03.09
18:46
(1) Писал в 7.7 специальную экспортную функцию в глобальном модуле.
4 Айболитов
 
14.03.09
18:51
может поможет

ПолучитьВремя(<?>,,)
Синтаксис:
ПолучитьВремя(<Часы>,<Минуты>,<Секунды>)
Назначение:
Прочитать время документа. Возвращает время документа в переданные для этого переменные <Часы>, <Минуты>, <Секунды>.
Возвращает:
Строковое значение времени записи документа в виде 'ЧЧ.ММ.СС'.
Параметры:
<Часы> - переменная для приема часа записи документа;
<Минуты> - переменная для приема минут записи документа;
<Секунды> - переменная для приема секунд записи документа.
Замечание:
Метод  можно использовать только для объектов, созданных функцией СоздатьОбъект.
5 Айболитов
 
14.03.09
18:51
Функция ПолучитьВремяДокументаЧислом(Док)
   Перем Ч,М,С;  
   Док.ПолучитьВремя(Ч,М,С);
   Возврат 3600*Ч+60*М+С;
КонецФункции // ПолучитьВремяДокументаЧислом()
6 Айболитов
 
14.03.09
18:52
ну и это строку передашь в 8, а там переконвертишь в нужный формат
7 Иду
 
14.03.09
19:02
Айболитов=банальный восьмерошный дебил.
(0) держи:
Функция ПолучитьДатуВремя(ДатаОпр) //именно дата из семерки, формат не важен
   ДатаВремяОпр="";
   Если (СтрДлина(СокрЛП(ДатаОпр))>10) Тогда
       ДатаОпр=Лев(ДатаОпр,10);
   КонецЕсли;
   Если СтрДлина(СокрЛП(ДатаОпр))=10 Тогда
       ДеньДаты=Лев(ДатаОпр,2);
       МесяцДаты=Сред(ДатаОпр,4,2);
       ГодДаты=Прав(СокрЛП(ДатаОпр),4);
       Попытка
           ДатаВремяОпр=Дата(ГодДаты+МесяцДаты+ДеньДаты+"000000");
       Исключение
           Сообщить("Ошибка даты "+ДатаОпр);
       КонецПопытки;
   КонецЕсли;
   Если СтрДлина(СокрЛП(ДатаОпр))=8 Тогда
       ДеньДаты=Лев(ДатаОпр,2);
       МесяцДаты=Сред(ДатаОпр,4,2);
       ГодДаты="20"+Прав(СокрЛП(ДатаОпр),2);
       ДатаВремяОпр=Дата(ГодДаты+МесяцДаты+ДеньДаты+" 000000");
   КонецЕсли;
   Возврат ДатаВремяОпр;    
КонецФункции
8 Айболитов
 
14.03.09
19:04
(7) опух что ль?!?!?
9 Лефмихалыч
 
14.03.09
19:09
(7) тупой код - то же самое можно в пять строчек уложить МАКСИМУМ, а то и в две вообще. Кроме того, задачи (0) это не решает
10 Иду
 
14.03.09
19:12
(9) Шо не решает? я из своей переделки КД копи-паст и делал. максимум минимум = это вообще всяку дату в виде строки полученную в голимый формат 8*хы вертит. в ней-же.
11 Лефмихалыч
 
14.03.09
19:14
(10) у тебя на выходе начало ня всегда, а автору надо реальное время
12 Лефмихалыч
 
14.03.09
19:14
начало на = начало дня
13 Лефмихалыч
 
14.03.09
19:15
таёмаЁ!!!111одинодин
14 Иду
 
14.03.09
19:19
(13) Добрый вечер.
ну поменяй
000000
на любое из
ЧЧММСС

уверяю, точонадо и получится.
15 Лефмихалыч
 
14.03.09
19:27
(2) как ты делаешь вот это загадочное: "Генерил на вход строковый литерал"
(14) терь я буду печатать медленно, по буквам, чтобы ты ни чего не пропустил: автору надо в восьмерке получить реальное время документов из семерки, а не у всех одинаковое.
16 Иду
 
14.03.09
19:36
(15) мне, придурку, можно и по-буквам. токмо топикстартеру это = не поможет.
Или КД шкку переписать, чтобы методом, предложенным Айболитовым и иксэмэльку еще и время передавать.
а оно ему точно надо?
17 Aleksey_3
 
14.03.09
19:38
В КД есть встроенная функция

Функция ПолучитьДатуV8(ЧастьДата, ЧастьВремя = "00:00:00")
   
   Если ПустоеЗначение(ЧастьДата) = 1 Тогда
       
       Возврат "0001-01-01T" + ЧастьВремя;
       
   Иначе
       
       Возврат "" + ДатаГод(ЧастьДата) + "-" + Формат(ДатаМесяц(ЧастьДата),"Ч(0)2") + "-" + Формат(ДатаЧисло(ЧастьДата),"Ч(0)2") + "T" + ЧастьВремя;
   
   КонецЕсли;

КонецФункции // ПолучитьДатуV8()
18 fisher
 
15.03.09
13:55
Народ, вы вообще сабжи внимательно читаете? С элементарными навыками скриптописания я как бы знаком. Из 7.7 могу что угодно в любом виде куда угодно подсунуть. Вопрос куда и как, чтоб КД это схавала как надо.
Я делал так: источник данных в правиле конвертации не указывал - подсовывал таблицу значений. В поле "Дата" в правиле выгрузки генерил нужный строковый литерал, который восьмерка умеет неявно преобразовывать к дате/времени (ГГГГММДДЧЧММСС), в надежде что КД правильно интерпретирует этот пассаж. Но при загрузке КД выдаёт описанную мной ошибку.
В связи с этим и вопрос - где и в каком формате в КД можно установить дату/время загружаемого документа? В каком событии? Думал, в "ПослеЗагрузки()" явно установить (если сначала обычным способом загрузить - без времени), но там уже к таблице-источнику нельзя обратиться...
(17) О! Похоже на то что надо. Т.е. КД при загрузке хавает дату/время именно в этом формате? Завтра обязательно попробую.
19 fisher
 
15.03.09
14:07
(17) А где вообще можно ознакомиться с перечнем и описанием встроенных функций КД?
21 Defender aka LINN
 
15.03.09
14:19
(19) Открываешь обработку конфигуратором и смотришь.
22 Aleksey_3
 
15.03.09
14:22
В ПКС в дате прописываешь

ЧастьДата=Источник.ДадаДок;
ЧастьВремя=СтрЗаменить(ПолучитьВремя(Источник),".",":");

Значение=ПолучитьДатуV8(ЧастьДата, ЧастьВремя)

Писал по памяти, мог где-то ошибиться. но смысл ты понял
24 fisher
 
15.03.09
19:11
(22) По использованию у меня вопросов нет, спасибо. Просто не знал, что КД восьмерочную дату/время понимает в своём хитром формате. Получется что-то типа
ГГГГ-ММ-ДДTЧЧ:ММ:СС
25 rusrus
 
15.03.09
19:38
Я понимаю, что не в тему, но (7) отжиг. Куча буков по перестановке слов, чтоб в итоге получить Формат(ДатаДок,"Д ГГГГММДД"). Матчасть надо учить
26 fisher
 
16.03.09
10:56
(17) Спасибо, всё получилось.