• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы Paume
  • Дата начала
P

Paume

Добрый день.

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

Проверка №1:

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

Проверка №2:

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

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

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

puh14

Документ.ДатаДок = ПолучитьПустоеЗначение("Дата")
 
P

Paume

Проверка №3:

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

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

В отладчике:

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

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

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

puh14

Так не бывает. Проверьте типы сравниваемых значений через типзначенияСтр().
 
P

Paume

Отладчик сказал так:

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

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

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

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

puh14

Можно ещё одно из другого вычесть.
 
H

Hryv

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

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

тоже не работает?
 
Д

Дайнеко

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

Darlock

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

Как сказал бы один из моих преподавателей "место неудачное". В тексте выше нет никаких манипуляций с датой, которую потом проверяете на пустое значение?
 
P

Paume

Как сказал бы один из моих преподавателей "место неудачное". В тексте выше нет никаких манипуляций с датой, которую потом проверяете на пустое значение?
Есть.
У меня обработка, которая из тхт получает документ, пишет его в базу, проводит, читает его и на основании того, пустая ли дата в многострочной части, создает еще один документ, который регистры двигает.

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

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

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

puh14

Походу платформа кривая ( встречал такую прелесть - длл-ки все разных версий). Попробуйте на заведомо кошерной машине.
 
P

Paume

Походу платформа кривая ( встречал такую прелесть - длл-ки все разных версий). Попробуйте на заведомо кошерной машине.
Спасибо, попробую.
Дайнеко сказал(а):
Дам совет как психоаналитик:
Спасибо, лучше давайте как программист. ;)))
 
H

Hryv

P

Paume

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

Код:
Док.Записать();
Док.Провести(); 

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

Hryv

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

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

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

выдает исправно
 
Д

Дайнеко

Так вот - строчка с вызовом ВыбратьПодчиненныеДокументы() была один-в-один такая же
Хе! Павлин, говоришь. ;)

Цитата:
(Дайнеко)
Дам совет как психоаналитик:

Спасибо, лучше давайте как программист. ;)))

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!