1c 7.7 Как Определить, Что Дата - Пустая?

Тема в разделе "1C и всё что с ней связано", создана пользователем Paume, 14 ноя 2011.

  1. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Добрый день.

    В документе есть поле табличной части типа дата.
    Есть обработка, которая в зависимости от того, заполнено ли это поле, выполняется или нет.

    Проверка №1:

    Если ДатаИзДокумента=Дата(0) Тогда
    Продолжить;
    КонецЕсли;

    Проверка №2:

    Если ПустоеЗначение(ДатаИзДокумента)=1 Тогда
    Продолжить;
    КонецЕсли;

    И оба раза ДатаИзДокумента=' . . ', но условие не выполняется.

    Может, я что-то не так понимаю?
    Подскажите. плиз.
     
  2. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Документ.ДатаДок = ПолучитьПустоеЗначение("Дата")
     
  3. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Проверка №3:

    ПустаяДата=ПолучитьПустоеЗначение("Дата");

    Если ДатаИзДокумента=ПустаяДата Тогда
    Продолжить;
    КонецЕсли;

    В отладчике:

    ПустаяДата = ' . . '
    ДатаИзДокумента = ' . . '

    Условие не выполняется.

    Причем, эта зараза отрабатывала месяц назад, когда я ее писала!
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Так не бывает. Проверьте типы сравниваемых значений через типзначенияСтр().
     
  5. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Отладчик сказал так:

    ТипЗначенияСтр(ДатаИзДокумента) = "Дата"

    И да - я знаю, что так не бывает.
    Это у меня глюки.
    Такое же когда-то было и на строчку.
    Я думала, может, кто-нибудь когда-то спотыкался...

    В общем, пока извратилась вот так:

    ДатаИзДокумента=Формат(ДатаИзДокумента,"ДДДММГГ");
    ДлинаДаты=СтрДлина(СокрЛП(ДатаИзДокумента));
    Если ДлинаДаты<>8 Тогда
    Продолжить;
    КонецЕсли;
     
  6. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Можно ещё одно из другого вычесть.
     
  7. Hryv

    Hryv Гость

    как заполнена переменная ДатаИзДокумента?

    конструкция типа:
    Если ПустоеЗначение(Док.ПроверяямаяДата)=1 Тогда
    Продолжить;
    КонецЕсли;

    тоже не работает?
     
  8. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Часто такое бывает - роешь землю а не там. ПустоеЗначение() - верный путь. Дам совет как психоаналитик: Вы должны поверить в себя, заодно и проверку даты. Сделайте внешний отчетик, на нем дату и проверяйте ее всеми позами, т.е. методами, пока не снизойдет благодать.
    Вот тогда и дальше в путь, товарищи!
     
  9. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Как сказал бы один из моих преподавателей "место неудачное". В тексте выше нет никаких манипуляций с датой, которую потом проверяете на пустое значение?
     
  10. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Есть.
    У меня обработка, которая из тхт получает документ, пишет его в базу, проводит, читает его и на основании того, пустая ли дата в многострочной части, создает еще один документ, который регистры двигает.

    Но то, что сравнение не отрабатывает - по-моему, это полный глюк.
    Просто непонятно, каким образом его проконтролировать.

    Когда-то давно точно так же я наступала на грабли в функции ВыбратьПодчиненныеДокументы() когда документы есть, а ничего не выбирается. Разобраться, что я написала не так, я тогда не смогла и откатывала назад, делала объединение со старой мд-шкой. Так вот - строчка с вызовом ВыбратьПодчиненныеДокументы() была один-в-один такая же, я вообще этот кусочек не трогала, а при объединении 1С показала изменения. После объединения опять все заработало. :(

    И да - ПустоеЗначение() у меня тоже не отрабатывает. Отладчик показывает, что переменная пуста, а функция говорит ноль.
     
  11. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Походу платформа кривая ( встречал такую прелесть - длл-ки все разных версий). Попробуйте на заведомо кошерной машине.
     
  12. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Спасибо, попробую.
    Спасибо, лучше давайте как программист. ;)))
     
  13. Hryv

    Hryv Гость

    код в студию
    не могёт такого быть
     
  14. Paume

    Paume Well-Known Member

    Регистрация:
    15 дек 2010
    Сообщения:
    110
    Симпатии:
    0
    Код ( (Unknown Language)):
    Док.Записать();
    Док.Провести();

    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку()=1 Цикл
    Если ПустоеЗначение(Док.ДатаПрихода)=1 Тогда
    Продолжить;
    КонецЕсли;
    КонецЦикла;
     
  15. Hryv

    Hryv Гость

    видимо все же что-то с релизом

    я побыстрому наваял в принципе то же самое

    Код ( (Unknown Language)):
    //*******************************************
    Процедура Сформировать()
    Док = СоздатьОбъект("Документ.Док1");
    Док.НайтиДокумент(ВыбДок);
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку() = 1 Цикл
    Сообщить(Док.Дата1);
    Сообщить(ПустоеЗначение(Док.Дата1));
    Сообщить("");
    КонецЦикла;
    КонецПроцедуры
    выдает исправно
     
  16. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Хе! Павлин, говоришь. ;)

    Я, наверное, не очень удачный программист - у меня по программе "барабашки" не бегают. Аж народ нечем удивить. Зато неоднократно убеждался, что зачастую проблема оказывается в собственном невнимании к данным. Есть такое правило: увидел глюк - переведи дыхание, отойди от экрана на метр. И подумай: а то ли ты проверяешь? а точно ты в нужной базе? в той стране? Второе правило: проверь положительным опытом. Делаю маленький отчет в котором проверяю ситуацию "на пальцах".
     
Загрузка...

Поделиться этой страницей