Выгрузка договоров из 1с в базу sql. Проверка корректной даты

1. olgita_n 05.03.19 10:51 Сейчас в теме
Добрый день! Помогите разобраться. Выгружаю справочник Договоров в базу SQL. В спр. есть поле Дата договора, которую пользователи иногда заполняют некорректно, например, 20.08.0216. Написала процедуру выгрузки, но она выдает ошибку при некорректных датах. Как мне перед загрузкой правильно проверить дату?


Процедура КнопкаВыполнитьНажатие(Кнопка)

СтрокаПодключения = ".....";

Connection = Новый COMОбъект("ADODB.Connection");
Command = Новый COMОбъект("ADODB.Command");
RecordSet = Новый COMОбъект("ADODB.RecordSet");

Connection.Open(СокрЛП(СтрокаПодключения));
Command.ActiveConnection = Connection;

Command.CommandText = "Delete FROM [db_1c].[asu].[vwСправочникДоговоров]";
Command.Execute();

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорыКонтрагентов.Владелец.Код КАК КодКонтрагента,
| ДоговорыКонтрагентов.Номер КАК НомерД,
| ДоговорыКонтрагентов.Дата КАК ДатаД,
| ДоговорыКонтрагентов.Код КАК КодДоговора,
| ДоговорыКонтрагентов.Наименование КАК Наименование,
| ДоговорыКонтрагентов.А_СтавкаНДС КАК СтавкаНДС,
| ДоговорыКонтрагентов.А_НомерСУЗ КАК НомерСУЗ,
| ДоговорыКонтрагентов.А_ОтветсвенноеЛицо.Наименование КАК Инициатор,
| ДоговорыКонтрагентов.А_ИдентификаторМОпо159ФЗ КАК ИГК
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ
| И ДоговорыКонтрагентов.ЭтоГруппа = ЛОЖЬ
| И ДоговорыКонтрагентов.А_ДоговорЗавершен = ЛОЖЬ";

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

Command.CommandText = "ins ert in to [db_1c].[asu].[vwСправочникДоговоров] ([Код_контрагента],[№_договора],[Код_договора],[Наименование],[Ставка_НДС],[№_СУЗ],[Инициатор договора],[ИГК],[Дата_договора]) values('"+Выборка.КодКонтрагента+"', '"+Выборка.НомерД+"', '"+Выборка.КодДоговора+"', '"+Выборка.Наименование+"', '"+СтавкаНДС+"', '"+Выборка.НомерСУЗ+"', '"+Выборка.Инициатор+"', '"+Выборка.ИГК+"', Cast('"+Формат(ДатаДоговора, "ДФ = ггггММдд")+"' as smalldatetime) )";
Command.CommandTimeOut = 9000;
Command.Execute();
КонецЦикла;

КонецПроцедуры
По теме из базы знаний
Найденные решения
2. dim_1c 05.03.19 11:07 Сейчас в теме
(1) У smalldatetime ограничение 1900-01-01 - 2079-06-06. Используйте тип, который позволит Вам принимать значения из 1С: date. Данные в 1С и SQL должны быть одинаковые, если нужно решить проблему некорректных дат - решать ее надо в 1С.
olgita_n; +1 Ответить
3. olgita_n 05.03.19 11:27 Сейчас в теме
(2)Спасибо, в запрос добавила проверку, получилось)

"ВЫБРАТЬ
| ДоговорыКонтрагентов.Владелец.Код КАК КодКонтрагента,
| ДоговорыКонтрагентов.Номер КАК НомерД,
| ВЫБОР
| КОГДА ДоговорыКонтрагентов.Дата >= ДАТАВРЕМЯ(1900, 1, 1)
| И ДоговорыКонтрагентов.Дата <= ДАТАВРЕМЯ(2079, 6, 6)
| ТОГДА ДоговорыКонтрагентов.Дата
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
| КОНЕЦ КАК ДатаД,
| ДоговорыКонтрагентов.Код КАК КодДоговора,
| ДоговорыКонтрагентов.Наименование КАК Наименование,
| ДоговорыКонтрагентов.А_СтавкаНДС КАК СтавкаНДС,
| ДоговорыКонтрагентов.А_НомерСУЗ КАК НомерСУЗ,
| ДоговорыКонтрагентов.А_ОтветсвенноеЛицо.Наименование КАК Инициатор,
| ДоговорыКонтрагентов.А_ИдентификаторМОпо159ФЗ КАК ИГК
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ
| И ДоговорыКонтрагентов.ЭтоГруппа = ЛОЖЬ
| И ДоговорыКонтрагентов.А_ДоговорЗавершен = ЛОЖЬ
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dim_1c 05.03.19 11:07 Сейчас в теме
(1) У smalldatetime ограничение 1900-01-01 - 2079-06-06. Используйте тип, который позволит Вам принимать значения из 1С: date. Данные в 1С и SQL должны быть одинаковые, если нужно решить проблему некорректных дат - решать ее надо в 1С.
olgita_n; +1 Ответить
3. olgita_n 05.03.19 11:27 Сейчас в теме
(2)Спасибо, в запрос добавила проверку, получилось)

"ВЫБРАТЬ
| ДоговорыКонтрагентов.Владелец.Код КАК КодКонтрагента,
| ДоговорыКонтрагентов.Номер КАК НомерД,
| ВЫБОР
| КОГДА ДоговорыКонтрагентов.Дата >= ДАТАВРЕМЯ(1900, 1, 1)
| И ДоговорыКонтрагентов.Дата <= ДАТАВРЕМЯ(2079, 6, 6)
| ТОГДА ДоговорыКонтрагентов.Дата
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
| КОНЕЦ КАК ДатаД,
| ДоговорыКонтрагентов.Код КАК КодДоговора,
| ДоговорыКонтрагентов.Наименование КАК Наименование,
| ДоговорыКонтрагентов.А_СтавкаНДС КАК СтавкаНДС,
| ДоговорыКонтрагентов.А_НомерСУЗ КАК НомерСУЗ,
| ДоговорыКонтрагентов.А_ОтветсвенноеЛицо.Наименование КАК Инициатор,
| ДоговорыКонтрагентов.А_ИдентификаторМОпо159ФЗ КАК ИГК
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ
| И ДоговорыКонтрагентов.ЭтоГруппа = ЛОЖЬ
| И ДоговорыКонтрагентов.А_ДоговорЗавершен = ЛОЖЬ
4. Timur.V 79 05.03.19 12:57 Сейчас в теме
Если Тип("Дата") = Дата(вашаДата) Тогда  // проверяем, что указана дата

КонецЕсли;


Даты можно ещё ограничить +/- сколько-то лет от Текущей даты.
Оставьте свое сообщение

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