Формат дата 1с excel
Пишу полностью самописную базу.Вопрос: В EXCEL имеется файл Комитенты.xls, где в колонке G размещены в формате дата - даты,когда выдан документ.
Написал обработку - перенос из Эксель - при ее запуске строковые реквизиты переносятся прекрасно из экселя в справочник 1с8. А реквизит КогдаВыдан в справочнике остается пустая.
Справочники.Комитенты - реквизит КогдаВыдан - тип дата.
Возникает вопрос, а как присваиваете - обычным "="? 1С хочет видитеть дату в виде "дд.мм.гггг ЧЧ:ММ:СС". Поставте точку прерывания и посмотрите, что получаете из Excel-я и попробуйте преобразовать дату под нужный формат.
Да, я понимаю, что формат даты 1с хочет видеть в виде "дд.мм.гггг ЧЧ:ММ:СС". Сейчас все даты в таблицах Екселя в формате "текстовый", но могут быть и другие форматы. Попробую преобразовать.
Интересно, как тогда понимать фразу: "колонке G размещены в формате дата"?
Если у вас текстовый формат и вид соответствует, тогда используйте функцию Дата(. )
"Для кого интересно сделал так:
данные в ячейках Экселя представлены в текстовом формате.
12.01.2003
1С понимает в другом формате:
‘20030112000000’
Для этого надо вытаскивать цифры между точками, следовательно в модуль обработки пишем функцию:
Функция ВыделитьДаты(ИсходнаяСтрока) Экспорт
Буфер = СокрЛ(ИсходнаяСтрока);
ПозицияПослПробела = Найти(Буфер, " ");
Если ПозицияПослПробела = 0 Тогда
ИсходнаяСтрока = """";
Возврат Буфер;
КонецЕсли;
ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела));
ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1);
Возврат ВыделенноеСлово;
КонецФункции
А в процедуру ОсновныеДействияФормыКомитентыВСправочник(Кнопка)
.
КогдаВыданСтрока = СтрЗаменить(КогдаВыдан1,".", " ");
ДатДата = ВыделитьДаты(КогдаВыданСтрока);
ДатМесяц = ВыделитьДаты(КогдаВыданСтрока);
ДатГод = ВыделитьДаты(КогдаВыданСтрока);
ДатДата1=Лев(ДатДата,2);
ДатМесяц1=Лев(ДатМесяц,2);
ДатГод1=Лев(ДатГод,4);
ДатДляПереноса = ДатГод1 + ДатМесяц1 + ДатДата1;
КогдаВыдан1=Дата(ДатДляПереноса);
Справочник.КогдаВыдан=КогдаВыдан1;
.
Все классно."
Столкнувшись с проблемой загрузки в 1С из Excel Даты-Времени в числовом формате к удивлению не нашел нигде подобных формул. Может потому что они уж слишком банальны, а может потому что они "тайное знание посвященных". В общем, эта обработка пример конвертации Excel 1C
Сам формат даты изучался эмпирически. То есть менял число и изучал что станет с датой-временем. Оказалась все банально до ужаса:
Число Excel = Количество дней от 1 января 1900 г.
Число 1С = Количество секунд от . той же даты.
Соответственно формулы перевода выглядят следующим образом:
В приложенном файле - этот же код, обредший интерфейс и ничего более.
P.S. Может эта информация и излишне примитивна и банальна для данного ресурса, но может и сохранить кому-то время потраченное на безрезультатное гугление и яндексирование.
Специальные предложения
Ничего другого на ресурсе не нашел (особо не искал).
Но решил вставить свои 5 коп. в эту тему в "назидание потомкам":
В Excel дата 01/01/1900 соответствует числу "1". Это "первый день".
Если мы сделаем в 1С "'19000101000000' - '190001010000'", то получим "0". Уже не соответствует заявленному коду, т.е. надо сразу учитывать арифметическую прогрессию и писать "+1" имея ввиду одни сутки в размере 86 400 секунд.
Для проверки напишите в 1С такой код:
ПолучИте результат. Вставьте его в Excel и преобразуйте формат в "Дата".
Далее учитываем, что 86400 секунд в целых сутках. Это значит, что если к
прибавить 86400, то мы получим начало следующего дня.
Плюс ко всему надо учитывать известный баг про эпохи, когда "Excel ошибочно считает 1900 год високосным":
Проверьте в запросе:
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1900,2,28), ДЕНЬ, 1)
У меня в результате получается "01/03/1900" (8.2, 8.3).
В Excel та же операция показывает "29/02/1900".
Поэтому для записи в Excel даты в виде числа надо писать:
Замечу, что обратное преобразование (из числа Excel в дату 1С) тоже надо производить с учетом этого поправочного коэффициента.
При импорте в Excel данных из внешних программ, иногда возникает весьма неприятная проблема - дробные числа превращаются в даты:
Так обычно происходит, если региональные настройки внешней программы не совпадают с региональными настройками Windows и Excel. Например, вы загружаете данные с американского сайта или европейской учётной системы (где между целой и дробной частью - точка), а в Excel у вас российские настройки (где между целой и дробной частью - запятая, а точка используется как разделитель в дате).
При импорте Excel, как положено, пытается распознать тип входных данных и следует простой логике - если что-то содержит точку (т.е. российский разделитель дат) и похоже на дату - оно будет конвертировано в дату. Всё, что на дату не похоже - останется текстом.
Давайте рассмотрим все возможные сценарии на примере испорченных данных на картинке выше:
- В ячейке A1 исходное число 153.4182 осталось текстом, т.к. на дату совсем не похоже (не бывает 153-го месяца)
- В ячейке A2 число 5.1067 тоже осталось текстом, т.к. в Excel не может быть даты мая 1067 года - самая ранняя дата, с которой может работать Excel - 1 января 1900 г.
- А вот в ячейке А3 изначально было число 5.1987, которое на дату как раз очень похоже, поэтому Excel превратил его в 1 мая 1987, услужливо добавив единичку в качестве дня:
Вот такие варианты. И если текстовые числа ещё можно вылечить банальной заменой точки на запятую, то с числами превратившимися в даты такой номер уже не пройдет. А попытка поменять их формат на числовой выведет нам уже не исходные значения, а внутренние коды дат Excel - количество дней от 01.01.1900 до текущей даты:
Лечится вся эта история тремя принципиально разными способами.
Способ 1. Заранее в настройках
Если данные ещё не загружены, то можно заранее установить точку в качестве разделителя целой и дробной части через Файл - Параметры - Дополнительно (File - Options - Advanced) :
Снимаем флажок Использовать системные разделители (Use system separators) и вводим точку в поле Разделитель целой и дробной части (Decimal separator) .
После этого можно смело импортировать данные - проблем не будет.
Способ 2. Формулой
Если данные уже загружены, то для получения исходных чисел из поврежденной дата-тексто-числовой каши можно использовать простую формулу:
=--ЕСЛИ( ЯЧЕЙКА("формат";A1)="G" ; ПОДСТАВИТЬ(A1;".";",") ; ТЕКСТ(A1;"М,ГГГГ") )
В английской версии это будет:
=--IF (CELL ("format ";A1)="G"; SUBSTITUTE (A1;".";","); TEXT (A1;"M ,YYYY "))
Логика здесь простая:
- Функция ЯЧЕЙКА (CELL) определяет числовой формат исходной ячейки и выдаёт в качестве результата "G" для текста/чисел или "D3" для дат.
- Если в исходной ячейке текст, то выполняем замену точки на запятую с помощью функции ПОДСТАВИТЬ (SUBSTITUTE) .
- Если в исходной ячейке дата, то выводим её в формате "номер месяца - запятая - номер года" с помощью функции ТЕКСТ (TEXT) .
- Чтобы преобразовать получившееся текстовое значение в полноценное число - выполняем бессмысленную математическую операцию - добавляем два знака минус перед формулой, имитируя двойное умножение на -1.
Способ 3. Макросом
Если подобную процедуру лечения испорченных чисел приходится выполнять часто, то имеет смысл автоматизировать процесс макросом. Для этого жмём сочетание клавиш Alt + F11 или кнопку Visual Basic на вкладке Разработчик (Developer) , вставляем в нашу книгу новый пустой модуль через меню Insert - Module и копируем туда такой код:
Останется выделить проблемные ячейки и запустить созданный макрос сочетанием клавиш Alt + F8 или через команду Макросы на вкладке Разработчик (Developer - Macros) . Все испорченные числа будут немедленно исправлены.
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора ZIP-архив Создание 0
Для того чтобы записать файлы в ZIP-архив необходимо выполнить несколько простых действий: * Создать архив с необходимыми параметрами, в который будут помещаться файлы. * Поместить в архив необходимые файлы. * Записать архив. Создание объекта За ZIP-архив Чтение 0
Для того чтобы прочитать файлы из ZIP-архива необходимо выполнить несколько простых действий: - Открыть необходимый архив - Распаковать файлы Создание объекта ЧтениеZIPФайла можно осуществить двумя путями - создать инициализированный объект или Посмотреть все результаты поиска похожих
Еще в этой же категории
Как в excel сохраненный из 1С вставить новый лист? 15
Я думаю, все сталкивались с однолистовым excel файлом из 1С, у которого на первый взгляд, нет возможности добавить листы. Все не так страшно - их просто скрыли или, что чаще всего - даже не отображали (обусловлено созданием файла из стороннего прил Как сформировать документ в Word из 1С? (Active Document) 14
ВНИМАНИЕ! При использовании кодов описанных ниже, уберите символ _ Давайте рассмотрим на примерах как это делается! =) Мне известно 2 способа: 1. Путем замены шаблонного текста в макете Wordа. 2. Путем вставки текста с помощью закладок в Wo Экспорт и Импорт данных 1С - Microsoft Excel 12
Экспорт Процедура ОсновныеДействияФормыЭкспорт(Кнопка) - выгружает из указанного справочника данные в режиме экспорта в файл в формате Microsoft Excel с указанным именем, используя преобразование данных к типу число и типу строка; Процедура Основ Преобразование XLS в MXL 10
Конвертация таблиц из Excel в MXL - скачать Converter Excel v MXL: Для 8.х - Для 7.7 - // Выбор файла Microsoft Excel Procedure FileNameStartChoice(Element, StdProcessing) StdProcessing = False; DialogFile = New FileDialog(FileDialogMode. Работа с MS Word через OLE 10
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и опис Посмотреть все в категории Работа с Microsoft Office и OpenOffice
В форме списка справочника у меня добавлена Табличное поле с колонками Улица, Дом, Квартира , я пытаюсь загрузить данные с формы документа ТЧ.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГрупповыеУлицы.НомерСтроки КАК Колонка4,
| ГрупповыеУлицы.Улица КАК Колонка1,
| ГрупповыеУлицы.Дом КАК Колонка2,
| ГрупповыеУлицы.Кв КАК Колонка3
|ИЗ
| Справочник.Групповые.Улицы КАК ГрупповыеУлицы";
Результат = Запрос.Выполнить().Выгрузить();
ЭлементыФормы.ТабличноеПоле1.Значение = Результат;
Я пытаюсь с Excel загрузить документ там есть колонка с датой, я пытаюсь загрузить в реквиз дата и он выдает ошибку
: Ошибка при вызове метода контекста (Записать)
Об.Записать();
по причине:
Значение поля "Дата" не может быть пустой датой
Процедура КнопкаВыполнитьНажатие(Кнопка)
//проверим что файл существует
ФайлНаДиске = Новый Файл(Файл);
Если Не ФайлНаДиске.Существует() Тогда
Предупреждение("Файл не найден!");
Возврат;
КонецЕсли;
Док = Документы.Заправка;
НС = 1;
Пока Истина Цикл
Об=Док.СоздатьДокумент();
Об.Дата = СокрЛП(Ex.Cells(НС,1).NumberFormat="ДД.ММ.ГГГГ");
Об.Улица = СокрЛП(Ex.Cells(НС,2).Value);
Об.Дом = СокрЛП(Ex.Cells(НС,3).Value);
Об.Кол = СокрЛП(Ex.Cells(НС,4).Value);
Об.РУ = СокрЛП(Ex.Cells(НС,5).Value);
Об.Записать();
Сообщить("-Создан элемент: "+Об.Улица);
//Если Об.Улица = "" Тогда
// Прервать;
// КонецЕсли;
У меня строчка такая
: Ошибка при вызове метода контекста (Записать)
Об.Записать();
по причине:
Значение поля "Дата" не может быть пустой датой
3. Ex.Cells(НС,1).Value - строка с Вашей датой, именно строка, и чтобы преобразовать её в дату надо функцию написать, например, я такую написал:
Код 1C v 8.х
: Преобразование значения к типу Дата не может быть выполнено
Возврат Дата(Число(ГодСтрокой),Число(Сред(ДатаСтрокой,4,2)),Число(Сред(ДатаСтрокой,1,2)));
Подскажите вот я закачиваю информацию в справочник, есть реквизит Тип Справочники.Имя я прописал
Читайте также: