Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: реквизит типа Дата  (Прочитано 25631 раз)
0 Пользователей и 1 Гость смотрят эту тему.
schnibbl
Гость
« : 20-04-2005 09:38 » new

есть такой очень нужный метод ПустаяСтрока, но вот беда, с переменной типа дата он не работает,
Ситуация: в справочнике есть реквизит типа дата, если его не заполнять, то присваивается значение " . . " так вот как мне узнать что дата не выбрана, а имеет именно такое значение ? (я ету шнягу в запросе использую, лудше не советовать сначала преобразовать тип, может кака системная команда есть ? )
Записан
schnibbl
Гость
« Ответ #1 : 20-04-2005 09:43 » 

или хотя бы с чем сравнить ? если дата="" всегда неравно если дата=" . . " тоже всегда неравно, с чем сравнить то ? Улыбаюсь чтоыб узнать что дата не заполнена.
Записан
schnibbl
Гость
« Ответ #2 : 20-04-2005 10:29 » 

в общем если кто знает системный метод проверки пустая ли дата отпишитесь, пока в запросе написал так:

|Договор = Справочник.Договоры.ТекущийЭлемент;
...
|Функция ССумма = Сумма(Договор.Сумма) когда (строка(Договор.ДатаРасторженияОбязательства)=""  .  .  "");
..
|Группировка Договор упорядочить по Договор.Код без групп;
|Условие(Договор.ОС = ВыбОСновное);

но есть теперь другая проблема, задумывалось вывести все договора реквизит ОС которых равен выбранному нами. и У тех ДатаРасторжения которых еще не наступила просуммировать сумму.
То есть имеем: в запрос включить всех, удовлетворяющих условию Условие(Договор.ОС = ВыбОСновное);
плюс для некоторых, вошедших, выполнить функцию ССумма, однако запрос включает только то что удовлетворяет условию в функции (когда (строка(Договор.ДатаРасторженияОбязательства)=""  .  .  "")Ага
тоесть 1С собрала конструкцию "И" из строки |Условие и строки про функцию: |функция ..... когда (....), как этого избежать ?
Записан
Harry
Модератор

ua
Offline Offline

« Ответ #3 : 21-04-2005 07:53 » 

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

Пойдет?
или еще, интересно (взято отсюда http://v8.1c.ru/predpriyatie/typical_problems_Types.htm#8)
В 1С:Предприятии 8.0 не существует понятия «пустое» значение. Любая переменная всегда имеет некоторое значение. Для многих типов данных в 1С:Предприятии 8.0 существуют значения по умолчанию. Эти значения используются системой в тех случаях, когда нет явного указания на устанавливаемое значение. Например, значение по умолчанию используется при очистке поля ввода.

Поэтому, для того чтобы проверить дату на «пустое» значение, нужно сравнить имеющееся значение со значением типа Дата по умолчанию. Например:
Код:
Функция ДатаНеЗаполнена(ПереданноеЗначение)

Если ПереданноеЗначение = Дата('00010101') Тогда

Возврат Истина;

КонецЕсли;

КонецФункции

ЭЭто для 8-й версии, на 7.7 не знаю, будет ли работать.
« Последнее редактирование: 20-12-2007 21:14 от Алексей1153++ » Записан

Слабый пол силен в силу слабости сильного пола к слабому
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 21-04-2005 08:44 » 

Как вариант:
Если ПустаяСтрока(СтрЗаменить(ВыбДата,".",""))=1 Тогда
  // ... Дата не задана
КонецЕсли;

Не совсем красиво, но работает
Записан
schnibbl
Гость
« Ответ #5 : 25-04-2005 05:53 » 

Щас проверим Улыбаюсь
Записан
schnibbl
Гость
« Ответ #6 : 25-04-2005 07:03 » 

ндас и вправду ПустоеЗначение пашет, че та я ступил.... Улыбаюсь
на повестке дня остался один вопрос Улыбаюсь если кто знает расскажите как такое сотворить: запрос добавляет переменные в отбор по условию (оператор Условие) и мне нужны все элементы удовлетворяющие этому условию. но вот беда как только в самом запросе по некоторой переменной используется функция суммирования, и если для этой функции добавить условие (функция Сумм = Сумма(траляля) КогдА (ПустоеЗначение(ДатаРасторженияОбязательства)=1)Ага то в группировку входят не все, удовлетворяющие условию (оператор Условие), а только те для кого функция посчиталась ( выполнение КогдА), а если условие верное, но функция не посчиталась (дата расторжения заполнена), тогда эта штука не заноситься в группировку. как быть ? как заставить занести её в группировку ?
« Последнее редактирование: 25-04-2005 07:28 от schnibbl » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 25-04-2005 08:52 » 

Ниче не понял Улыбаюсь Видно торможу сегодня...
Напиши запрос полность и что ты хочешь получить в примере
Записан
schnibbl
Гость
« Ответ #8 : 25-04-2005 09:12 » 

Вот постараюсь так описать есть 4 договора
договор 1:  параметрОтбора =1;  СуммаДоговора = 50;  ДатаРасторженияОбязательства = . . ;
договор 2:  параметрОтбора =1;  СуммаДоговора = 10;  ДатаРасторженияОбязательства = . . ;
договор 3:  параметрОтбора =1;  СуммаДоговора = 20;  ДатаРасторженияОбязательства = 12.05.2004 ;
договор 4:  параметрОтбора =0;  СуммаДоговора = 40;  ДатаРасторженияОбязательства = . . ;

теперь делаем запрос групируем все договора параметрОтбора которых равен 1. и суммируем суммуДоговора
пример:

|Обрабатывать НеПомеченныеНаУдаление;
|Договор = справочник.Договоры.ТекущийЭлемент();
|функция ОбщаяСумма= Сумма(Договор.СуммаДоговора);
|Группировка Договор упорядочить по Договор.Код без групп;
|Условие (Договор.ПараметрОтбора = 1);

В результате такого запроса мы получим группировку в которой есть: договор1, договор2, договор3 и соответственно сумму по ним.

если теперь ищменить функцию в запросе:
|функция ОбщаяСумма= Сумма(Договор.СуммаДоговора) когда (( ДатаРасторженияОбязательства > ТекущаяДата()) или (ПустоеЗначение(...))); =1  ;
вот в результате такого запроса хотя условие не трогали, но из группировки выпадет еще и договор3, хотя хотелось бы чтобы он не выпадал а просто сумма по нему не считалась.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 27-04-2005 14:49 » 

Ты функцию из запроса точно скопировал?
ИМХО должно быть так:
|функция ОбщаяСумма= Сумма(Договор.СуммаДоговора) когда ((Договор.ДатаРасторженияОбязательства > ТекущаяДата()) ИЛИ (ПустоеЗначение(Договор.ДатаРасторженияОбязательства)=1));
Записан
schnibbl
Гость
« Ответ #10 : 27-04-2005 14:55 » 

да, так как ты написал, но суть от этого не меняется...
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 28-04-2005 13:46 » 

Специально создал конфу чтобы проверить
У меня все нормально работает.
MD файл в приложении
Случайно не потому проблемы, что дата расторжения у тебя - 2004 год?

* 2005-04-28 ЗапросУсловие.zip (8.3 Кб - загружено 934 раз.)
Записан
schnibbl
Гость
« Ответ #12 : 29-04-2005 05:34 » 

ну вот в этой базе когда работает условие на функцию у меня обработка не включает договор 00000000000005  хотя условию группировке (параметр отбора = 1 ) договор соответствует. меня как раз интересует как включать такие (просроченные) договора, но сумму им не считать.
« Последнее редактирование: 29-04-2005 05:38 от schnibbl » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 29-04-2005 10:26 » 

Самое простое (но не самое красивое, наверное) - добавь еще одну функцию без условия:
Функция ОбщаяСумма1 = Сумма(СуммаДоговора);

Тогда для 00000000000005: ОбщаяСумма1=70, ОбщаяСумма=0;

Ну а парвильное решение: в строке Группировка добавить ключевое слово все:
Группировка Договор упорядочить по Договор.Код без групп все;
« Последнее редактирование: 29-04-2005 10:32 от Kivals » Записан
schnibbl
Гость
« Ответ #14 : 03-05-2005 05:42 » 

Спасибо добавление второй функции помогло, а ключевое слово все не подходит потому, что группировка в моей задаче вложенная, там договора к контрагенту привязаны, и первая группировка по контрагентам а вторая по договорам и если написать все тогда на каждого контра все договора высыпаются, хотя сумма и не считается Улыбаюсь
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 04-05-2005 06:03 » 

Есть еще понятие "все ВошедшиеВЗапрос"
Что оно делает - не помню Улыбаюсь Проверь, если нужно
Записан
schnibbl
Гость
« Ответ #16 : 04-05-2005 08:43 » 

все и все Вошедшие в запрос, практически равнозначно, по крайней мере нам так препод на курсах по 1С сказал.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines