![]() |
![]() |
![]() |
|
Импорт файла Excel в 1С строки формата дата и время | ☑ | ||
---|---|---|---|---|
0
Reraru
24.01.20
✎
19:39
|
Здравствуйте, помогите мне пожалуйста. Я понимаю что 1С умеет читать примитивные типы данных. У меня есть данные типа дата и время в экселе, а реквизиты справочника настроены на тип дата и время. После импорта файла Excel в 1С, у меня остались пустые реквизиты у которых тип дата и время.
Как научить 1С читать формат дата и время из файла Excel ? &НаСервере Функция ПолучитьОписаниеТипа(ОписаниеТиповРеквизита) Экспорт ОписаниеТипов = ""; Для каждого Тип Из ОписаниеТиповРеквизита.Типы() Цикл МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); Если Не МетаданныеТипа = Неопределено Тогда ОписаниеТипа = МетаданныеТипа.ПолноеИмя(); ИначеЕсли Тип = Тип("Строка") Тогда ОписаниеТипа = "Строка"; Если ОписаниеТиповРеквизита.КвалификаторыСтроки.Длина Тогда ОписаниеТипа = ОписаниеТипа + ", " + ОписаниеТиповРеквизита.КвалификаторыСтроки.Длина; Если ОписаниеТиповРеквизита.КвалификаторыСтроки.ДопустимаяДлина = ДопустимаяДлина.Фиксированная Тогда ОписаниеТипа = ОписаниеТипа + ", " + ДопустимаяДлина.Фиксированная; КонецЕсли; КонецЕсли; ИначеЕсли Тип = Тип("Число") Тогда ОписаниеТипа = "Число" + ", "+ ОписаниеТиповРеквизита.КвалификаторыЧисла.Разрядность + ", "+ ОписаниеТиповРеквизита.КвалификаторыЧисла.РазрядностьДробнойЧасти + ?(ОписаниеТиповРеквизита.КвалификаторыЧисла.ДопустимыйЗнак = ДопустимыйЗнак.Неотрицательный,", Неотрицательный",""); ИначеЕсли Тип = Тип("Дата") Тогда ОписаниеТипа = "" + ОписаниеТиповРеквизита.КвалификаторыДаты.ЧастиДаты; ИначеЕсли Тип = Тип("Булево") Тогда ОписаниеТипа = "Булево"; Иначе Продолжить; КонецЕсли; ОписаниеТипов = ?(ПустаяСтрока(ОписаниеТипов),"",ОписаниеТипов +Символы.ПС) + ОписаниеТипа; КонецЦикла; Возврат ОписаниеТипов; КонецФункции // ПолучитьОписаниеТипа() &НаСервере Функция ПолучитьВозможныеЗначения(Колонка, Представление, Примечание, ТекущиеДанные) Примечание = ""; НайденныеЗначения = Новый Массив; Если ПустаяСтрока(Представление) Тогда Возврат НайденныеЗначения; Иначе СвязьПоТипу = Неопределено; Если Не ПустаяСтрока(Колонка.СвязьПоТипу) Тогда Если ТипЗНЧ(Колонка.СвязьПоТипу) = Тип("Строка") Тогда ТекущиеДанные.Свойство(Колонка.СвязьПоТипу,СвязьПоТипу); Иначе СвязьПоТипу = Колонка.СвязьПоТипу; КонецЕсли; Если Не СвязьПоТипу = Неопределено Тогда ЭлементСвязиПоТипу = Колонка.ЭлементСвязиПоТипу; Если ЭлементСвязиПоТипу = 0 Тогда ЭлементСвязиПоТипу = 1; КонецЕсли; ВидыСубконто = СвязьПоТипу.ВидыСубконто; Если ЭлементСвязиПоТипу > ВидыСубконто.Количество() Тогда Возврат НайденныеЗначения; КонецЕсли; Тип = СвязьПоТипу.ВидыСубконто[ЭлементСвязиПоТипу-1].ВидСубконто.ТипЗначения; Иначе Тип = Колонка.ОписаниеТипов; КонецЕсли; Иначе Тип = Колонка.ОписаниеТипов; КонецЕсли; КонецЕсли; ПримитивныеТипы = Новый Структура ("Число, Строка, Дата, Булево", Тип("Число"), Тип("Строка"), Тип("Дата"), Тип("Булево")); Для каждого ТипРеквизита Из Тип.Типы() Цикл Если ТипРеквизита = ПримитивныеТипы.Число Или ТипРеквизита = ПримитивныеТипы.Булево Тогда НайденныеЗначения.Добавить(мПривестиКЧислу(Представление, Колонка.ОписаниеТипов, Примечание)); ИначеЕсли ТипРеквизита = ПримитивныеТипы.Строка или ТипРеквизита = ПримитивныеТипы.Дата Тогда НайденныеЗначения.Добавить(мПривестиКДате(Представление, Колонка.ОписаниеТипов, Примечание)); Иначе МетаданныеТипа = Метаданные.НайтиПоТипу(ТипРеквизита); Если Перечисления.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда //Это Перечисление Для каждого Перечисление Из ПолучитьМенеджераПоТипу(ТипРеквизита) Цикл Если Строка(Перечисление) = Представление Тогда НайденныеЗначения.Добавить(Перечисление); КонецЕсли; КонецЦикла; ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипРеквизита) Тогда //Это документ Менеджер = ПолучитьМенеджераПоТипу(ТипРеквизита); Если Колонка.ИскатьПо = "Номер" Тогда //НайденноеЗначение = Менеджер.НайтиПоКоду(Представление); ИначеЕсли Колонка.ИскатьПо = "Дата" Тогда //НайденноеЗначение = Менеджер.Найти Иначе ДлиннаСинонима = СтрДлина(""+МетаданныеТипа); Если Лев(Представление, ДлиннаСинонима) = ""+МетаданныеТипа Тогда НомерИДата = СокрЛП(Сред(Представление, ДлиннаСинонима+1)); ПозицияОт = Найти(НомерИДата, " от "); Если Не ПозицияОт = 0 Тогда НомерДок = Лев(НомерИДата, ПозицияОт-1); Попытка ДатаДок = Дата(Сред(НомерИДата, ПозицияОт+4)); Исключение ДатаДок = Неопределено; КонецПопытки; Если Не ДатаДок = Неопределено Тогда НайденноеЗначение = Менеджер.НайтиПоНомеру(НомерДок, ДатаДок); Если Не НайденноеЗначение.Пустая() Тогда НайденныеЗначения.Добавить(НайденноеЗначение); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли Не МетаданныеТипа = Неопределено Тогда ИскатьПо = Колонка.ИскатьПо; ЭтоСправочник = Справочники.ТипВсеСсылки().СодержитТип(ТипРеквизита); Если ПустаяСтрока(ИскатьПо) Тогда СтрокаОсновногоПредставления = Строка(МетаданныеТипа.ОсновноеПредставление); Если СтрокаОсновногоПредставления = "ВВидеКода" Тогда ИскатьПо = "Код"; ИначеЕсли СтрокаОсновногоПредставления = "ВВидеНаименования" Тогда ИскатьПо = "Наименование"; ИначеЕсли СтрокаОсновногоПредставления = "ВВидеНомера" Тогда ИскатьПо = "Номер"; КонецЕсли; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | _Таблица.Ссылка |ИЗ | " + МетаданныеТипа.ПолноеИмя() + " КАК _Таблица |ГДЕ"; Запрос.Текст = Запрос.Текст + " | _Таблица." + ИскатьПо + " = &Представление"; Запрос.УстановитьПараметр("Представление",Представление); Если ЭтоСправочник и Не ПустаяСтрока(Колонка.СвязьПоВладельцу) и МетаданныеТипа.Владельцы.Количество() Тогда СвязьПоВладельцу = Неопределено; Если ТипЗНЧ(Колонка.СвязьПоВладельцу) = Тип("Строка") Тогда ТекущиеДанные.Свойство(Колонка.СвязьПоВладельцу,СвязьПоВладельцу); Иначе СвязьПоВладельцу = Колонка.СвязьПоВладельцу; КонецЕсли; Если Не СвязьПоВладельцу = Неопределено Тогда Запрос.Текст = Запрос.Текст + " | И _Таблица.Владелец = &СвязьПоВладельцу"; Запрос.УстановитьПараметр("СвязьПоВладельцу",СвязьПоВладельцу); КонецЕсли; КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НайденныеЗначения.Добавить(Выборка.Ссылка); КонецЦикла; Иначе Примечание = "Не описан способ поиска"; Примечание = "Для Колонки не определен тип значения"; КонецЕсли; КонецЕсли; КонецЦикла; Возврат НайденныеЗначения; КонецФункции // () |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |