v8: Ошибка с пустыми датами в распределенных базах данныхИногда в УРБД появляются проводки и движения с пустыми датами, хотя, казалось бы, 1С не дает сделать проводку с пустыми датами. Причина, как показала практика проста. | | Автор статьи: Гений 1С | Редакторы: Последняя редакция №3 от 26.04.07 | История URL: http://kb.mista.ru/article.php?id=518 | |
Ключевые слова: ошибка,УРБД,дата
Дело в том, что одна из баз работает на файловом движке, где допустима любая дата от рождества христова, а другая база работает на SQL движке, где диапазон дат более ограничен.
Пользователи иногда ошибаются и вводят вместо 2007 года 207 год. Если эта дата не дата документа, а дата реквизита (например планируемая дата оплаты), в этом случае проводка формируется на 207 год. Соответственно, когда эта проводка приходит в SQL, 207 год заменяется на пустую дату.
К сожалению, в 1с не предусмотрено на уровне платформы ограничение диапазона рабочих дат, поэтому самый простой вариант в модуле набора записей регистра бухгалтерии контролировать дату проводок 1900-2200 года:
Процедура ПередЗаписью(Отказ, РежимЗаписи)
Для Каждого МЗ Из ЭтотОбъект Цикл
Если МЗ.Период<='19000101' ИЛИ МЗ.Период>='22000101' Тогда
Сообщить("В проводке номер "+ЭтотОбъект.Индекс(МЗ)+1+" указан период, выходящий за допустимый диапазон 1900-2200 гг ", СтатусСообщения.Важное);
ТЗ=ЭтотОбъект.Выгрузить();
Стр=ТЗ[ЭтотОбъект.Индекс(МЗ)];
Для Каждого Колонка Из ТЗ.Колонки Цикл
Сообщить(Символы.Таб+Колонка.Имя+Символы.Таб+"="+Символы.Таб+Стр[Колонка.Имя]);
КонецЦикла;
ТЗ=0;
Отказ=Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Решение этой проблемы описано в комплекте документации "Особенности использования клиент-сервера 1С": нужно при создании SQL базы указать смещение дат 2000, тогда даты SQL версии и файловой версии будут совпадать. Можно выгрузить базу в DT, поменять смещение и загрузить обратно.
Причина была выяснена после возникновения ошибки в моей практике:
v8: Помогите ментально: Запись не верна. Период не может быть пустым
|