|
Вопрос выбора с выводом | ☑ | ||
---|---|---|---|---|
0
stepanov1991
31.07.14
✎
09:34
|
День добрый, ситаация такая нужно сделать так. Если документ не найден например за 31.07.14, то 1с должна сказать что есть данные на 30.07.14 Сформировать? и вывести данные на 30.07.
Вот пример кода который пытаюсь сделать. //Перебором: назначаем метод обработки данных запроса в переменную ВЫборка... Выборка=запрос.Выполнить().Выбрать(); Если выборка.Следующий() Тогда // Получили 1 документ, т.к. один за один день ДокОбъект=Выборка[0].Ссылка.ПолучитьОбъект(); //обращение к индексу выборок таблиц значений и массивов //идет с 0- тут я получил ту ссылку в запросе по индексу Выборка[0].Ссылка... это 1 док в выборке запросом, а к этой ссылке применил метод получения ДокОбъект.ДействиеПечать() ; Иначе //Сообщить("Нет документов за выбранную дату!"); Режим = РежимДиалогаВопрос.ДаНет; Ответ = Вопрос("Есть данные на другое число Сформировать?",Режим,1); Если Ответ = КодВозвратаДиалога.Да Тогда Выборка=запрос.Выполнить().Выбрать(); ДокОбъект=Выборка[1].Ссылка.ПолучитьОбъект(); ДокОбъект.ДействиеПечать() ; |
|||
1
NcSteel
31.07.14
✎
09:37
|
Прекрасно, в чем вопрос? )
|
|||
2
Wobland
31.07.14
✎
09:38
|
бери первые 1 где дата<=нужной, потом сравнивай полученную дату с датой выбранного
|
|||
3
Wobland
31.07.14
✎
09:38
|
(1) Сформировать?
|
|||
4
ZaprosMan
31.07.14
✎
09:39
|
У Вас пустая выборка, как вы хотите из неё выбрать[1].
И вообще [0] тоже не надо. Нужен запрос, текст. так ничего не понять! |
|||
5
NcSteel
31.07.14
✎
09:41
|
(3) ))) Автор данный текст забыл в ковычках написать.... А вопрос понятно, что "аАААААа у мения не работает, как?"
И ответ - правильно написать запрос. |
|||
6
stepanov1991
31.07.14
✎
09:41
|
ИначеЕсли ЭлементыФормы.СписокОтчетов.ТекущаяСтрока.Значение="Режим работы очистных сооружений на дату" Тогда
Запрос=Новый запрос; //Чререз выбрали документы ОчистныеСооруженияРежимРаботы в пределах даты в менеджере отчетов с начала по конец дня, только проведенные запрос.текст="ВЫБРАТЬ | ОчистныеСооруженияРежимРаботы.Ссылка |ИЗ | Документ.ОчистныеСооруженияРежимРаботы КАК ОчистныеСооруженияРежимРаботы |ГДЕ | ОчистныеСооруженияРежимРаботы.Дата МЕЖДУ &НачДата И &КонДата | И ОчистныеСооруженияРежимРаботы.Проведен"; Запрос.УстановитьПараметр("НачДата",НачалоДня(ЭтаФорма.ДатаОтчетов)); Запрос.УстановитьПараметр("КонДата",КонецДня(ЭтаФорма.ДатаОтчетов)); //Перебором: назначаем метод обработки данных запроса в переменную ВЫборка... Выборка=запрос.Выполнить().Выбрать(); Если выборка.Следующий() Тогда // Получили 1 документ, т.к. один за один день ДокОбъект=Выборка[0].Ссылка.ПолучитьОбъект(); //обращение к индексу выборок таблиц значений и массивов //идет с 0- тут я получил ту ссылку в запросе по индексу Выборка[0].Ссылка... это 1 док в выборке запросом, а к этой ссылке применил метод получения ДокОбъект.ДействиеПечать() ; Иначе //Сообщить("Нет документов за выбранную дату!"); Режим = РежимДиалогаВопрос.ДаНет; Ответ = Вопрос("Есть данные на другое число,Сформировать?",Режим,0); Если Ответ = КодВозвратаДиалога.Да Тогда //Выборка=запрос.Выполнить().Выбрать(); //ДокОбъект=Выборка[1].Ссылка.ПолучитьОбъект(); //ДокОбъект.ДействиеПечать() ; КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
7
salvator
31.07.14
✎
09:43
|
(0)
Ответ = Вопрос("Есть данные на другое число Сформировать?",Режим,1); Если Ответ = КодВозвратаДиалога.Да Тогда Выборка=запрос.Выполнить().Выбрать(); ... т.е. ты заранее знаешь, что за другую дату будут документы? |
|||
8
stepanov1991
31.07.14
✎
09:44
|
Нужно что бы он формировал за предыдущий день если за этот нету.
|
|||
9
ZaprosMan
31.07.14
✎
09:45
|
Тут такая темя, что если "выборка.Следующий()" <> Истина
Значит и выбрать от туда нечего. так как за один день все формируете. Возьмите первые 2 например |
|||
10
ZaprosMan
31.07.14
✎
09:46
|
(9) не непойдет первые 2, группировку по датам и тогда выбирать.
|
|||
11
Wobland
31.07.14
✎
09:46
|
(8) а ну как вообще документов не будет?
|
|||
12
NcSteel
31.07.14
✎
09:46
|
(6) смотри (2) Там все правильно сказано. И ты получишь последний документ на дату отчета.... если дата документа меньше периода отчета, то выводи соотетствующий вопрос .
|
|||
13
ZaprosMan
31.07.14
✎
09:53
|
Можно сделать в рекурсии (вынести поиск даты в отдельную процедуру) после вопроса искать той же процедурой в прошлой дате.
Процедура Рекурсия(Дата) Запрос=Новый запрос; //Чререз выбрали документы ОчистныеСооруженияРежимРаботы в пределах даты в менеджере отчетов с начала по конец дня, только проведенные запрос.текст="ВЫБРАТЬ | ОчистныеСооруженияРежимРаботы.Ссылка |ИЗ | Документ.ОчистныеСооруженияРежимРаботы КАК ОчистныеСооруженияРежимРаботы |ГДЕ | ОчистныеСооруженияРежимРаботы.Дата МЕЖДУ &НачДата И &КонДата | И ОчистныеСооруженияРежимРаботы.Проведен"; Запрос.УстановитьПараметр("НачДата",НачалоДня(Дата)); Запрос.УстановитьПараметр("КонДата",КонецДня(Дата)); //Перебором: назначаем метод обработки данных запроса в переменную ВЫборка... Выборка=запрос.Выполнить().Выбрать(); Если выборка.Следующий() Тогда // Получили 1 документ, т.к. один за один день ДокОбъект=Выборка[0].Ссылка.ПолучитьОбъект(); //обращение к индексу выборок таблиц значений и массивов //идет с 0- тут я получил ту ссылку в запросе по индексу Выборка[0].Ссылка... это 1 док в выборке запросом, а к этой ссылке применил метод получения ДокОбъект.ДействиеПечать() ; Иначе //Сообщить("Нет документов за выбранную дату!"); Режим = РежимДиалогаВопрос.ДаНет; Ответ = Вопрос("Есть данные на другое число,Сформировать?",Режим,0); Если Ответ = КодВозвратаДиалога.Да Тогда Дата = НачалоДня(НачалоДня(Дата)-1); Рекурсия(); КонецЕсли; |
|||
14
ZaprosMan
31.07.14
✎
09:54
|
(13)+
Режим = РежимДиалогаВопрос.ДаНет; Ответ = Вопрос("Есть данные на другое число,Сформировать?",Режим,0); Если Ответ = КодВозвратаДиалога.Да Тогда Дата = НачалоДня(НачалоДня(Дата)-1); Рекурсия(Дата); КонецЕсли; |
|||
15
NcSteel
31.07.14
✎
09:55
|
(13) Миллион запросов к базе в цикле... не лучшее решение
|
|||
16
Wobland
31.07.14
✎
09:55
|
// Получили 1 документ, т.к. один за один день
правильный комментарий, верный |
|||
17
ZaprosMan
31.07.14
✎
09:58
|
(15) в каким цикле? Вопрос (да нет).
|
|||
18
Wobland
31.07.14
✎
09:59
|
хорошо. миллион запросов одного и того же один за другим
|
|||
19
ZaprosMan
31.07.14
✎
10:02
|
почему миллион?
1С Спросил: "Мля, чето нет доков на 31.07.14 посмотреть на 30.07.14" Пользователь такой: "Да". 1с выполняет поиск 1 запрос. // 1С Спросил: "Мля, чето нет доков на 30.07.14 посмотреть на 29.07.14" Пользователь такой: "Да". 1с выполняет поиск 1 запрос. // // 1С Спросил: "Мля, чето нет доков на 29.07.14 посмотреть на 28.07.14" Пользователь такой: "Да". 1с выполняет поиск 1 запрос. //// опа нашел.... |
|||
20
Wobland
31.07.14
✎
10:04
|
не дошло, да? ну ладно
|
|||
21
Drac0
31.07.14
✎
10:06
|
Че за бред? У тебя есть дата. Получаешь один документ, с датой меньше или равной данной, сравниваешь его дату с текущей и спрашиваешь или нет. А сам док у тебя уже есть.
|
|||
22
ZaprosMan
31.07.14
✎
10:06
|
Объясни. что не так то?
|
|||
23
Wobland
31.07.14
✎
10:07
|
(22) запрос нужно делать один раз
|
|||
24
bigandruha
31.07.14
✎
10:54
|
А так?
Только в запросе выбрать документ с датой меньшей или равной заданной. //Перебором: назначаем метод обработки данных запроса в переменную ВЫборка... Выборка=запрос.Выполнить().Выбрать(); Если выборка.Следующий() Тогда // Получили 1 документ, т.к. один за один день ДокОбъект=Выборка[0].Ссылка.ПолучитьОбъект(); //обращение к индексу выборок таблиц значений и массивов //идет с 0- тут я получил ту ссылку в запросе по индексу Выборка[0].Ссылка... это 1 док в выборке запросом, а к этой ссылке применил метод получения Если ДокОбъект.Дата = НужнаяДата ДокОбъект.ДействиеПечать() ; Иначе //Сообщить("Нет документов за выбранную дату!"); Режим = РежимДиалогаВопрос.ДаНет; Ответ = Вопрос("Есть данные на другое число Сформировать?" + ДокОбъект.Дата,Режим,1); Если Ответ = КодВозвратаДиалога.Да Тогда Выборка=запрос.Выполнить().Выбрать(); ДокОбъект=Выборка[1].Ссылка.ПолучитьОбъект(); ДокОбъект.ДействиеПечать() ; Иначе Сообщить("Нет документов Ваабще!"); |
|||
25
bigandruha
31.07.14
✎
10:56
|
+(24)Строки
Выборка=запрос.Выполнить().Выбрать(); ДокОбъект=Выборка[1].Ссылка.ПолучитьОбъект(); Лишние |
|||
26
Drac0
31.07.14
✎
11:30
|
(24) (25) норм.
|
|||
27
Wobland
31.07.14
✎
11:35
|
(24) а я б за такой почерк руки бы да пооборвал
|
|||
28
fmrlex
31.07.14
✎
11:37
|
Зачатки интеллекта в 1с.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |