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

1. lodyr 16.02.12 22:32 Сейчас в теме
Ситуация такая.
есть журнал с документами, в документах есть реквизит "ДатаВыезда"
Как все работает.
Приходит звонок, вводится новый документ и записывается, Дата выезда устанавливается ТекущаяДата + 1
Дальше этот документ какое-то время висит, после того как его выполнили, записывается новая ДатаВыезда.

Задача отобрать из журнала документы с требуемой ДатойВыезда.
Проблема: документ после того как приняли может провисеть с незаполненной ДатойВыезда и день, и месяц, и три и т.д.
Возможно ли каким-то образом при выборке документов, автоматически задавать диапазон дат выборки, так чтобы туда точно попал документ с требуемой "ДатойВыезда"
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Cartman 16.02.12 22:48 Сейчас в теме
(1) lodyr, имеется ввиду отбор в журнале документов? Если да - то никак. В отборе может быть только одно значение.
Проще нарисовать простенький отчет. Черный запрос конструктором рисуется за несколько минут.
2. Pari 16.02.12 22:41 Сейчас в теме
Возможно ли каким-то образом при выборке документов, автоматически задавать диапазон дат выборки, так чтобы туда точно попал документ с требуемой "ДатойВыезда"

Если речь идет о методе ВыбратьДокументы(НачДата,КонДата), то диапазон:
- можно вообще не задавать, тогда в выборку попадут все документы базы (с учетом фильтров и т.п.);
- задать только первый параметр, соответственно выбираться будут документы от НачДата до последнего документа базы (аналогично в отношении задания только второго параметра).
В вопросе упоминается журнал и "отобрать из журнала". Вот с этим непонятно, что имеется ввиду.
4. lodyr 17.02.12 00:37 Сейчас в теме
Спасибо за ответы!
Забыл написать, что для отбора используется внешняя обработка. Там создается таблица значений и в нее грузятся отобранные документы.
Я не программер, просто появилась необходимость в добавлении небольшого функционала, думал получится разобраться.
для отбора документов, как раз используется вот эта конструкция
	Док = СоздатьОбъект("Документ.заявка");
		Док.ВыбратьДокументы(ДатаНач,ДатаКон);
		сч = 0;          

		Пока Док.ПолучитьДокумент()=1 Цикл

думал можно ее как-то модифицировать и вместо метода ВыбратьДокументы(НачДата,КонДата) что-то использовать еще, чтобы в качестве отбора использовать реквизит ДатаВыезда.
В принципе сейчас решение есть, сначала задаем НачДата и КонДата, а потом внутри цикла отбираем нужные документы по ДатаВыезда, но думал можно еще как-то решить. Если не задавать НачДата и КонДата, то поиск идет очень долго по всем документам.
5. Pari 17.02.12 02:38 Сейчас в теме
(4) Т.е. нужно выбрать в таблицу документы определенного вида, у которых ДатаВыезда находится в заданном интервале. Правильно я понимаю задачу?
6. lodyr 17.02.12 10:56 Сейчас в теме
(5) Pari, ага правильно, при этом не использовать дат создания документов или использовать, но так чтобы не было лишних переборов, чтобы происходило быстрое формирование таблицы

Я правда далек от 1с, но чего-то мне кажется так нельзя сделать или вообще подход должен быть другой к решению задачи.
У меня сейчас так, сначала выбираются документы за определенный интервал дат, а потом среди них отбираются документы с требуемой ДатойВыезда. Как-то можно исключить выборку документов за определенный интервал и отбирать сразу по ДатеВыезда?
9. Pari 17.02.12 13:37 Сейчас в теме
но чего-то мне кажется так нельзя сделать или вообще подход должен быть другой к решению задачи.

(6) Если ввести ограничение на выбор начальной и конечной дат, а именно получать отчет за календарный месяц (т.е. нач. дата всегда начало произвольного месяца, а кон.дата последняя дата этого месяца), то можно было бы добавить реквизит МесяцГод (типа "0112"), по которому установить отбор для заявок. Тогда можно использовать метод ВыбратьПоЗначению(,,"МесяцГод",НужныйМесяц). В новые документы записывать значение МесяцГод при выполнении заявки, а в уже существующие добить обработкой.
Если совсем произвольный интервал, тогда запросом должно получиться. Как советует Cartman в (3) с условием на ДатаВыезда, или Ёпрст в (7)
11. lodyr 17.02.12 14:13 Сейчас в теме
(9) Pari, спасибо за ответ.
Буду пробовать, но даже и не знаю с чего начать
Можно воткнуть этот реквизит в графу отбора и отбирать по ней.
Для скорости - писать прямой запрос к базе.

еще бы вот это пояснить)))
где должна быть графа отбора и где почитать про прямой запрос к базе)

Просто как я понимаю, здесь сложность в том, что все равно наверно надо будет проглядывать всю базу с начала и до дня выезда или брать какой-то промежуток, актуальный. Потому что если заказ был принят год назад, то он уже теоретически не актуален.
7. Ёпрст 1065 17.02.12 11:38 Сейчас в теме
Можно воткнуть этот реквизит в графу отбора и отбирать по ней.
Для скорости - писать прямой запрос к базе.
8. lodyr 17.02.12 12:01 Сейчас в теме
(7) Ёпрст, извиняюсь за наглость) можно какой-нибудь пример или ссылочку на что почитать
сейчас вот так
Процедура Сформировать()                      
	
	Если датанач > датакон Тогда
	    предупреждение("Проверь даты!!!");
		возврат;
	КонецЕсли;

		тдок.УдалитьСтроки();
		Док = СоздатьОбъект("Документ.заявка");
		Док.ВыбратьДокументы(ДатаНач,ДатаКон);
		сч = 0;          

		Пока Док.ПолучитьДокумент()=1 Цикл          
			ТекДок = Док.ТекущийДокумент(); 
			Если (ТекДок.Проведен()=1) и 
			((текдок.ДатаВыезда = ДатаВыезда) или (пустоезначение(ДатаВыезда) = 1)) и
			((текдок.тип = тип) или (пустоезначение(тип) = 1)) и 
			((текдок.сотрудник = сотр) или (пустоезначение(сотр) = 1)) и 
			((текдок.статус = статус) или (пустоезначение(статус) = 1))
			Тогда
				сч =сч +1;
				тдок.НоваяСтрока();
				тдок.УстановитьЗначение(сч,"док", текдок);
				тдок.УстановитьЗначение(сч,"документ", " № " + текдок.номердок + " от " + текдок.датадок);
				тдок.УстановитьЗначение(сч,"датавыезда", текдок.датавыезда);
				тдок.УстановитьЗначение(сч,"времявыезда",текдок.времявыезда);
				тдок.УстановитьЗначение(сч,"Контрагент",текдок.Контрагент);
				тдок.УстановитьЗначение(сч,"Метро",текдок.Метро);
				тдок.УстановитьЗначение(сч,"сотр", текдок.сотрудник);
				тдок.УстановитьЗначение(сч,"тип", текдок.тип);
				тдок.УстановитьЗначение(сч,"cтатусз", текдок.статус);
            
			КонецЕсли;	   
			
		КонецЦикла;	                    

		если тдок.КоличествоСтрок() = 0 тогда	
			Предупреждение("Нет документов для подбора.");
			ФлагСтандОбр = 0;
			Возврат;
		КонецЕсли;	
		
		тдок.Заполнить("+",,,2);

КонецПроцедуры
Показать
10. Ёпрст 1065 17.02.12 14:06 Сейчас в теме
Создаешь новую графу отбора в дереве метаданных, значением для неё - твоя ДатаВыезда из документа заявка.
Всё собственно.
Далее тупо
Док.ВыбратьПоЗначению(,,"ИмяГрафыОтбора",ДатаВыезда)

Если скорость не устраивает (а она будет в разы быстрее, чем сейчас у тебя даже так) - пишешь прямой запрос к данным.
12. Ёпрст 1065 17.02.12 15:12 Сейчас в теме
Открой дерево документов - Журналы - Графы отборов - создать новую - дальше, читай то, что выше.

Про прямые запросы к БД читай на http://www.1cpp.ru/forum/YaBB.pl
13. lodyr 18.02.12 03:14 Сейчас в теме
(12) Ёпрст, спасибо! Заработало)

У меня еще вопрос, а как выбирать по интервалу дат ДатаВыезда?
надо написать цикл, в котором надо несколько раз обращаться к методу ВыбратьПоЗначению(,,"ИмяГрафыОтбора",ДатаВыезда) и постепенно заполнять таблицу?
Оставьте свое сообщение

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