программное заполнение даты

1. user1871821 14.11.22 08:51 Сейчас в теме
Всем привет, программно пытаюсь создать создать несколько документов поступление товаров, данные для создания беру из файла excel. В файле имеются следующие поля: Дата документа, номерТТН и сумма документа. Написал обработчик, создал три реквизита, у поля дата установил тип поля "Дата", так вот при загрузке данных и файла поле дата остаётся пустым, если тип поля дата выбираю строка то данные переносятся из файла в табличную часть но при попытке создать документ получаю ошибку поле дата не может быть пустым. Подскажите пожалуйста, что делаю не так. Уровень начинающий. Надеюсь доступно объяснил проблему)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. beldieff 14.11.22 10:19 Сейчас в теме
(1) привести строковый тип из файла к типу дата. Покажи что отладчик вычисляет при чтении из эксель
user1871821; +1 Ответить
11. user1871821 14.11.22 11:55 Сейчас в теме
(3)Спасибо за помощь.
Прикрепленные файлы:
13. beldieff 14.11.22 13:31 Сейчас в теме
(11) на скрине строкаданных это строка тч, а надо посмотреть что в строке которая считана из экселя.
4. user705522_constantin_h 36 14.11.22 11:03 Сейчас в теме
(1)Если у вас дата в виде ДД.ММ.ГГГГ, при переносе перед загрузкой в 1С добавьте к полю " 00:00:00".
user1871821; +1 Ответить
5. STELEICE 14.11.22 11:09 Сейчас в теме
(1) С екселя забираем дату строкой потом преобразовываем в дату данной функцией.



Функция ПреобразоватьВДату(ИсхСтр)
	Стр = СокрЛП(ИсхСтр);
	ЭтоДата = Найти(Стр,".") или Найти(Стр,"-") или Найти(Стр,"/");
	ЭтоВремя = Найти(Стр,":");
	Если Не ЭтоДата и Не ЭтоВремя Тогда
		Возврат Дата(1,1,1,1,1,1);
	КонецЕсли;
	МассивДат = Новый Массив;
	МассивВремени = Новый Массив;
	врСтр = "";
	Для а = 1 По СтрДлина(Стр) Цикл
		Если (Сред(Стр,а,1) = "." или Сред(Стр,а,1) = "-" или Сред(Стр,а,1) = "/") и ЭтоДата Тогда
			МассивДат.Добавить(Число(врСтр));
			врСтр = "";
		ИначеЕсли Сред(Стр,а,1) = ":" и Не ЭтоДата Тогда
			МассивВремени.Добавить(Число(врСтр));
			врСтр = "";
		ИначеЕсли Сред(Стр,а,1) = " " или КодСимвола(Сред(Стр,а,1))<48 или КодСимвола(Сред(Стр,а,1))>57 Тогда
			Если МассивДат.Количество()>0 и МассивДат.Количество()<3 и врСтр <> "" Тогда
				МассивДат.Добавить(Число(врСтр));
			КонецЕсли;
			ЭтоДата = Ложь;
			врСтр = "";
		Иначе
			врСтр = врСтр + Сред(Стр,а,1);
		КонецЕсли;
	КонецЦикла;
	Если МассивВремени.Количество()>0 и МассивВремени.Количество()<3 и врСтр <> "" Тогда
		МассивВремени.Добавить(Число(врСтр));
	ИначеЕсли МассивДат.Количество()>0 и МассивДат.Количество()<3 и врСтр <> "" Тогда
		МассивДат.Добавить(Число(врСтр));
	КонецЕсли;
	врДень = 0;
	врМесяц = 0;
	врГод = 0;
	Для Каждого дСтр из МассивДат Цикл
		Если врДень <> 0 и врМесяц <> 0 Тогда
			врГод = дСтр;
		ИначеЕсли врГод <> 0 и врМесяц <> 0 Тогда
			врДень = дСтр;
		ИначеЕсли врГод <> 0 или врДень <> 0 Тогда
			врМесяц = дСтр;
		КонецЕсли;
		Если дСтр/100>1 Тогда
			врГод = дСтр;
		КонецЕсли;
		Если врГод = 0 и врДень = 0 Тогда
			врДень = дСтр;
		КонецЕсли;
	КонецЦикла;
	врЧас = 0;
	врМин = 0;
	врСек = 0;
	Для Каждого вСтр из МассивВремени Цикл
		Если врЧас = 0 Тогда
			врЧас = вСтр;
		ИначеЕсли врМин = 0 Тогда
			врМин = вСтр;
		ИначеЕсли врСек = 0 Тогда
			врСек = вСтр;
		КонецЕсли;
	КонецЦикла;
	Если врГод = 0 или врГод > 9999 Тогда
		врГод = 1;
	ИначеЕсли врГод/100<1 Тогда
		врГод = врГод + 2000;
	КонецЕсли;
	
	Если врМесяц = 0 или врМесяц>12 Тогда
		врМесяц = 1;
	КонецЕсли;
	Если врДень = 0 или врДень>31 Тогда
		врДень = 1;
	КонецЕсли;
	Если врЧас>23 Тогда
		врЧас = 0;
	КонецЕсли;
	Если врМин>59 Тогда
		врМин = 0;
	КонецЕсли;
	Если врСек>59 Тогда
		врСек = 0;
	КонецЕсли;
	Возврат Дата(врГод,врМесяц,врДень,врЧас,врМин,врСек);
КонецФункции
Показать
user1871821; +1 Ответить
7. Prikum 3 14.11.22 11:14 Сейчас в теме
(1)Что мешает привести весь код? Или мы должны догадаться?
2. laperuz 46 14.11.22 09:22 Сейчас в теме
Покажите
1. Как присваиваете полю с датой значение
2. В каком виде в файле хранится дата
VoVo; user1871821; +2 Ответить
6. beldieff 14.11.22 11:13 Сейчас в теме
(5) зачем так многобукав?
8. STELEICE 14.11.22 11:14 Сейчас в теме
(6)
(6) Зато работает. На оригинальность не претендую
user1871821; +1 Ответить
9. user1871821 14.11.22 11:45 Сейчас в теме
(4)
Спасибо всем кто откликнулся. Вот код при помощи которого получаю данные из файла.
Процедура ПрочитатьФайл_XLS_НаСервере()

	ТабДок = Новый ТабличныйДокумент;
	Попытка	
		ТабДок.Прочитать(Объект.ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);	
	Исключение
	    Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось прочитать указанный файл по причине: " + ОписаниеОшибки();
		Сообщение.Сообщить();
		Возврат;
	КонецПопытки;
	КоличествоСтрок = ТабДок.ВысотаТаблицы;
	Для НомерСтроки = 2 По КоличествоСтрок Цикл
	
		СтрокаДанных = Объект.ДанныеФайла.Добавить();
		СтрокаДанных.Дата = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;
		СтрокаДанных.НомерТТН = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;
		СтрокаДанных.Сумма = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 3).ТекущаяОбласть.Текст;
	
	КонецЦикла; 

КонецПроцедуры // ПрочитатьФайл_XLS_НаСервере()

Показать
10. VictorRGB2 14 14.11.22 11:51 Сейчас в теме
(9)
СтрокаДанных.Дата = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;

это строчное значение, переводите его в дату и все будет
user1871821; +1 Ответить
12. user705522_constantin_h 36 14.11.22 13:08 Сейчас в теме
(9)
СтрокаДанных.Дата = Дата(ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст + " 00:00:00");
user1871821; +1 Ответить
14. user1871821 14.11.22 13:44 Сейчас в теме
Всем ещё раз большое спасибо, привёл строковый тип к дате и всё заработало.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот