Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
1

Не работает условие

21.03.2016, 12:49. Просмотров 721. Ответов 38
Метки нет (Все метки)

Не понимаю почему не срабатывает условие. Должно работать:
Создано два документа у первого реквизит участок = "Нет участка", второй документ реквизит участок="Перевалка".
Вот код

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
    ТЗ=Новый ТаблицаЗначений;
    ЗапросП = Новый Запрос;
    ТекстЗапросаП = "ВЫБРАТЬ
                    |   ПланировщикРемонтныхЗаявок.Мастер,
                    |   ПланировщикРемонтныхЗаявок.Количество,
                    |   ПланировщикРемонтныхЗаявок.ВремяЗаявки КАК ВремяЗаявки,
                    |   ПланировщикРемонтныхЗаявок.ТипУслуги,
                    |   ПланировщикРемонтныхЗаявок.Период,
                    |   ПланировщикРемонтныхЗаявок.Участок
                    |ИЗ
                    |   РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                    |ГДЕ
                    |   ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |   ПланировщикРемонтныхЗаявок.Период УБЫВ";    
    
    ЗапросП.УстановитьПараметр("ТипУслуги",ТипУслуги);
    
    ЗапросП.Текст=ТекстЗапросаП;
    РезультатП = ЗапросП.Выполнить().Выгрузить();
    
    Если РезультатП.Количество() = 0 Тогда 
        Возврат 
    КонецЕсли;
    
    ПерваяДата=ДатаЗаявки; 
    ПоследняяДата=РезультатП[0].Период;
    РазницаДат=(НачалоДня(ПоследняяДата)-НачалоДня(ПерваяДата))/(60*60*24);
    
    Для Счетчик = 0 По РазницаДат Цикл
        ДатаТ=ДатаЗаявки+86400*Счетчик;
        
    ЗапросПлан = Новый Запрос;
    ЗапросПлан.Текст = "ВЫБРАТЬ
                       |    ПланировщикРемонтныхЗаявок.ТипУслуги,
                       |    ПланировщикРемонтныхЗаявок.Период,
                       |    ПланировщикРемонтныхЗаявок.Участок
                       |ИЗ
                       |    РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                       |ГДЕ
                       |    ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                       |    И ПланировщикРемонтныхЗаявок.Период МЕЖДУ &ДатаНач И &ДатаКон
                       |
                       |УПОРЯДОЧИТЬ ПО
                       |    ПланировщикРемонтныхЗаявок.Период УБЫВ";    
    
    ЗапросПлан.УстановитьПараметр("ТипУслуги",ТипУслуги);
    ЗапросПлан.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
    ЗапросПлан.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));
    
    ТЗ = ЗапросПлан.Выполнить().Выгрузить();
 
    Для Каждого Элемент из ТЗ Цикл
        НужныйУч=Элемент.Участок;
    КонецЦикла; 
        
        Если НужныйУч = Справочники.Участки.НайтиПоНаименованию("Нет участка") Тогда
            ПроверкаСвободнойДатаИВремяБезУч(ДатаТ);
        Иначе
            ПроверкаСвободнойДатаИВремяУчастки(ДатаТ);
        КонецЕсли; 
    КонецЦикла;
Когда НужныйУч="Нет участка" мы заходим в процедуру ПроверкаСвободнойДатаИВремяБезУч(ДатаТ); , а когда НужныйУч="Перевалка" мы должны зайти в процедуру ПроверкаСвободнойДатаИВремяУчастки(ДатаТ); но мы почему то не заходим что не так?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2016, 12:49
Ответы с готовыми решениями:

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

Не работает условие выборки
Есть документ, в нем есть поле Преподаватель при открытии записывается Имя пользователя в это поле...

Проверка на число: Одно и то же условие работает в случае numchar, но не работает с xchar и ychar
Помогите ламеру с ламерской программкой. В тестирующей функции запрашиваются три строки numchar,...

Не работает условие
myFile.h #pragma once #include <string> using namespace std; void read_txt (string path); ...

Не работает условие
#include <iostream> #include <math.h> #include <conio.h> #include <clocale> #include <random>...

38
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
21.03.2016, 13:42 2
Ermak27, а что с датами документа?
Для Каждого Элемент из ТЗ Цикл
НужныйУч=Элемент.Участок;
КонецЦикла;

Если НужныйУч = Справочники.Участки.НайтиПоНаименованию("Нет участка") Тогда
ПроверкаСвободнойДатаИВремяБезУч(ДатаТ);
Иначе
ПроверкаСвободнойДатаИВремяУчастки(ДатаТ);
КонецЕсли;
КонецЦикла;
Может НужныйУч всегда принимает значение "Нет участка"? Вы обходите результат запроса циклом и каждый раз переменной НужныйУч будет просыпаться последнее значение результата запроса. А только потом вызываете нужную процедуру.
1
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 13:50  [ТС] 3
GreenkO, я в отладчике проверял значение приняла НужныйУч="Перевалка" , вот почему не зашло в процедуру не понятно
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
21.03.2016, 13:58 4
Ermak27, а куда заходит?
Что с типами? Участок в регистре какого типа?
1C
1
Справочники.Участки.НайтиПоНаименованию("Нет участка")
Здесь находит нужное значение из справочника?
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 14:04  [ТС] 5
GreenkO, если значение НужныйУч="Перевалка" должен зайти в процедуру ПроверкаСвободнойДатаИВремяУчастки(ДатаТ); а он не заходит.
В регистре тип СправочникСсылка.Участки.
Да значение он находит правильно
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
21.03.2016, 14:12 6
Ermak27, а куда заходит?
Плюс вы опять не объявляете переменные! Если результат запроса будет в след раз пустой, то останется предыдущее значение... А изначально вообще может ругнуться на необъявленную переменную
1C
1
2
3
4
5
6
7
8
9
10
   НужныйУч = Справочники.Участки.ПустаяСсылка();
    Для Каждого Элемент из ТЗ Цикл
        НужныйУч=Элемент.Участок;
    КонецЦикла; 
        
        Если НужныйУч = Справочники.Участки.НайтиПоНаименованию("Нет участка") Тогда
            ПроверкаСвободнойДатаИВремяБезУч(ДатаТ);
        Иначе
            ПроверкаСвободнойДатаИВремяУчастки(ДатаТ);
        КонецЕсли;
Только в предыдущей теме обсуждали...

Добавлено через 2 минуты
Ermak27, кстати, в условии на участки вы бы проверяли на пустую ссылку, на случай если результат запроса будет пустым
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 14:21  [ТС] 7
GreenkO, пустым значением не будет, участок будет заполнен в любом случае. НужныйУч = Справочники.Участки.ПустаяСсылка();
все равно не заходит в процедуру ПроверкаСвободнойДатаИВремяУчастки(ДатаТ) если НужныйУч принимает значение "Перевалка"
0
Dethmontt
Модератор
Эксперт 1С
2650 / 2440 / 418
Регистрация: 10.03.2011
Сообщений: 8,733
Записей в блоге: 1
Завершенные тесты: 1
21.03.2016, 15:03 8
Цитата Сообщение от GreenkO Посмотреть сообщение
Если НужныйУч = Справочники.Участки.НайтиПоНаименованию("Нет участка") Тогда
Значит переменная НужныйУч РОВНА элементу справочника с наименованием "Нет участка"
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 15:12  [ТС] 9
Dethmontt, а что нужно сделать?

Добавлено через 31 секунду
в отладчике показывает НужныйУч="Перевалка"
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
21.03.2016, 15:34 10
Ermak27, и что заходит при этом в ПроверкаСвободнойДатаИВремяБезУч(ДатаТ)?
0
Dethmontt
Модератор
Эксперт 1С
2650 / 2440 / 418
Регистрация: 10.03.2011
Сообщений: 8,733
Записей в блоге: 1
Завершенные тесты: 1
21.03.2016, 15:51 11
Цитата Сообщение от Ermak27 Посмотреть сообщение
в отладчике показывает НужныйУч="Перевалка"
В каком месте ОТЛАДКИ?

Добавлено через 27 секунд
Ermak27, нужно остановку делать на УСЛОВИИ:
Цитата Сообщение от GreenkO Посмотреть сообщение
Если НужныйУч = Справочники.Участки.НайтиПоНаименованию("Нет участка") Тогда
Добавлено через 4 минуты
Лучшая отладка - если отладчиком пользоваться не умеешь =)))

1C
1
2
3
4
5
6
7
Для Каждого Элемент из ТЗ Цикл
        НужныйУч=Элемент.Участок;
    КонецЦикла; 
 
СООБЩИТЬ("НужныйУч = "+НужныйУч);
        
        Если НужныйУч = Справочники.Участки.НайтиПоНаименованию("Нет участка") Тогда
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 16:02  [ТС] 12
GreenkO, копаю дальше, обнаружил что процедура не выводит данные, я могу сделать такие параметры в запросе?
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ЗапросВремени = Новый Запрос;
        ЗапросВремени.Текст = "ВЫБРАТЬ
                              | ПланировщикРемонтныхЗаявок.ВремяЗаявки КАК ВремяЗаявки,
                              | ПланировщикРемонтныхЗаявок.ТипУслуги,
                              | ПланировщикРемонтныхЗаявок.Мастер,
                              | ПланировщикРемонтныхЗаявок.Период КАК Период,
                              | ПланировщикРемонтныхЗаявок.Участок
                              |ИЗ
                              | РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                              |ГДЕ
                              | ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                              | И ПланировщикРемонтныхЗаявок.Период МЕЖДУ &ДатаНач И &ДатаКон
                              | И ПланировщикРемонтныхЗаявок.Участок = &Участок
                              | И ПланировщикРемонтныхЗаявок.Участок = &УчастокГРО
                              |
                              |УПОРЯДОЧИТЬ ПО
                              | ВремяЗаявки УБЫВ,
                              | Период УБЫВ";
        
        ЗапросВремени.УстановитьПараметр("Участок",ЛицевойСчет.Участок);
        ЗапросВремени.УстановитьПараметр("УчастокГРО",ЛицевойСчетГРО.Участок);
        ЗапросВремени.УстановитьПараметр("ТипУслуги",ТипУслуги);
        ЗапросВремени.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
        ЗапросВремени.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));
0
Dethmontt
Модератор
Эксперт 1С
2650 / 2440 / 418
Регистрация: 10.03.2011
Сообщений: 8,733
Записей в блоге: 1
Завершенные тесты: 1
21.03.2016, 16:06 13
Цитата Сообщение от Ermak27 Посмотреть сообщение
я могу сделать такие параметры в запросе?
Конечно можешь!!!

Добавлено через 2 минуты
Только работать не будет!!!
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
21.03.2016, 16:07 14
Ermak27, условий по участку не много за раз? может там ИЛИ должно быть?
0
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 16:12  [ТС] 15
GreenkO, как это прописать с или?
0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
21.03.2016, 16:21 16
Ermak27, как и с И
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        ЗапросВремени.Текст = "ВЫБРАТЬ
                              | ПланировщикРемонтныхЗаявок.ВремяЗаявки КАК ВремяЗаявки,
                              | ПланировщикРемонтныхЗаявок.ТипУслуги,
                              | ПланировщикРемонтныхЗаявок.Мастер,
                              | ПланировщикРемонтныхЗаявок.Период КАК Период,
                              | ПланировщикРемонтныхЗаявок.Участок
                              |ИЗ
                              | РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                              |ГДЕ
                              | ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                              | И ПланировщикРемонтныхЗаявок.Период МЕЖДУ &ДатаНач И &ДатаКон
                              | И (ПланировщикРемонтныхЗаявок.Участок = &Участок
                              | ИЛИ ПланировщикРемонтныхЗаявок.Участок = &УчастокГРО)
                              |
                              |УПОРЯДОЧИТЬ ПО
                              | ВремяЗаявки УБЫВ,
                              | Период УБЫВ";
Добавлено через 49 секунд
Ermak27, Участок в записи регистра не может быть равен одновременно двум значениям, как прописано у вас в запросе.
1
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
21.03.2016, 16:34  [ТС] 17
GreenkO, все исправил, теперь если НужныйУч="Не участка" выводит дату и время только у кого нет участка(эта правильно). А когда НужныйУч="Перевалка" выводит дату и время у кого участок Перевалка и у кого Нет участка (не правильно)
Вот код

Функция 1
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Процедура ТипУслугиПриИзменении(Элемент)
    
    ТипЗаявки="";
    
    ТЗ=Новый ТаблицаЗначений;
    ЗапросП = Новый Запрос;
    ТекстЗапросаП = "ВЫБРАТЬ
                    |   ПланировщикРемонтныхЗаявок.Мастер,
                    |   ПланировщикРемонтныхЗаявок.Количество,
                    |   ПланировщикРемонтныхЗаявок.ВремяЗаявки КАК ВремяЗаявки,
                    |   ПланировщикРемонтныхЗаявок.ТипУслуги,
                    |   ПланировщикРемонтныхЗаявок.Период,
                    |   ПланировщикРемонтныхЗаявок.Участок
                    |ИЗ
                    |   РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                    |ГДЕ
                    |   ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |   ПланировщикРемонтныхЗаявок.Период УБЫВ";    
    
    ЗапросП.УстановитьПараметр("ТипУслуги",ТипУслуги);
    
    ЗапросП.Текст=ТекстЗапросаП;
    РезультатП = ЗапросП.Выполнить().Выгрузить();
    
    Если РезультатП.Количество() = 0 Тогда 
        Возврат 
    КонецЕсли;
    
    ПерваяДата=ДатаЗаявки; 
    ПоследняяДата=РезультатП[0].Период;
    РазницаДат=(НачалоДня(ПоследняяДата)-НачалоДня(ПерваяДата))/(60*60*24);
    
    Для Счетчик = 0 По РазницаДат Цикл
        ДатаТ=ДатаЗаявки+86400*Счетчик;
        
    ЗапросПлан = Новый Запрос;
    ЗапросПлан.Текст = "ВЫБРАТЬ
                       |    ПланировщикРемонтныхЗаявок.ТипУслуги,
                       |    ПланировщикРемонтныхЗаявок.Период,
                       |    ПланировщикРемонтныхЗаявок.Участок
                       |ИЗ
                       |    РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                       |ГДЕ
                       |    ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                       |    И ПланировщикРемонтныхЗаявок.Период МЕЖДУ &ДатаНач И &ДатаКон
                       |
                       |УПОРЯДОЧИТЬ ПО
                       |    ПланировщикРемонтныхЗаявок.Период УБЫВ";    
    
    ЗапросПлан.УстановитьПараметр("ТипУслуги",ТипУслуги);
    ЗапросПлан.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
    ЗапросПлан.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));
    
    ТЗ = ЗапросПлан.Выполнить().Выгрузить();
    НужныйУч = Справочники.Участки.ПустаяСсылка();
    Для Каждого Элемент из ТЗ Цикл
        НужныйУч=Элемент.Участок;
    КонецЦикла; 
        
        Если НужныйУч = Справочники.Участки.НайтиПоНаименованию("Нет участка") Тогда
            ПроверкаСвободнойДатаИВремяБезУч(ДатаТ);
 
        Иначе
            ПроверкаСвободнойДатаИВремяУчастки(ДатаТ);
        КонецЕсли;
    КонецЦикла; 
        
КонецПроцедуры

Функция 2
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
Процедура ПроверкаСвободнойДатаИВремяУчастки(ДатаТ)
        ЗапросВремени = Новый Запрос;
        ЗапросВремени.Текст = "ВЫБРАТЬ
                              | ПланировщикРемонтныхЗаявок.ВремяЗаявки КАК ВремяЗаявки,
                              | ПланировщикРемонтныхЗаявок.ТипУслуги,
                              | ПланировщикРемонтныхЗаявок.Мастер,
                              | ПланировщикРемонтныхЗаявок.Период КАК Период,
                              | ПланировщикРемонтныхЗаявок.Участок
                              |ИЗ
                              | РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                              |ГДЕ
                              | ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                              | И ПланировщикРемонтныхЗаявок.Период МЕЖДУ &ДатаНач И &ДатаКон
                              | И (ПланировщикРемонтныхЗаявок.Участок = &Участок
                              | ИЛИ ПланировщикРемонтныхЗаявок.Участок = &УчастокГРО)
                              |
                              |УПОРЯДОЧИТЬ ПО
                              | ВремяЗаявки УБЫВ,
                              | Период УБЫВ";
        
        ЗапросВремени.УстановитьПараметр("Участок",ЛицевойСчет.Участок);
        ЗапросВремени.УстановитьПараметр("УчастокГРО",ЛицевойСчетГРО.Участок);
        ЗапросВремени.УстановитьПараметр("ТипУслуги",ТипУслуги);
        ЗапросВремени.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
        ЗапросВремени.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));        
 
        РезультатВремени = ЗапросВремени.Выполнить().Выбрать();
        
        Пока РезультатВремени.Следующий() Цикл
            ВремяЗ=РезультатВремени.ВремяЗаявки;    
            Мастер=РезультатВремени.Мастер;
            
            Фильтр = Новый Структура();
            Фильтр.Вставить("Участок",ЛицевойСчетГРО.Участок);
            Фильтр.Вставить("Участок",ЛицевойСчет.Участок);
            Фильтр.Вставить("ВремяЗаявки",ВремяЗ);
            Фильтр.Вставить("ТипУслуги",ТипУслуги);
            КоличествоРЗ=РегистрыСведений.ПланировщикРемонтныхЗаявок.ПолучитьПоследнее(КонецДня(ДатаТ),Фильтр).Количество;
            
            Запрос = Новый Запрос;
            ТекстЗапрос =   "ВЫБРАТЬ
                            |   ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки КАК ВремяЗаявки,
                            |   КОЛИЧЕСТВО(ИсторияЗаявкиЕдиноеОкно.Статус) КАК Количество,
                            |   ИсторияЗаявкиЕдиноеОкно.ТипУсулги,
                            |   ИсторияЗаявкиЕдиноеОкно.ЛицевойСчет.Участок КАК Участок,
                            |   NULL КАК УчастокГРО,
                            |   ИсторияЗаявкиЕдиноеОкно.ДатаИсполнения КАК Период
                            |ИЗ
                            |   РегистрСведений.ИсторияЗаявкиЕдиноеОкно КАК ИсторияЗаявкиЕдиноеОкно
                            |ГДЕ
                            |   ИсторияЗаявкиЕдиноеОкно.Участок = &Участок
                            |   И ИсторияЗаявкиЕдиноеОкно.ТипУсулги = &ТипУсулги
                            |   И ИсторияЗаявкиЕдиноеОкно.Статус = &Количество
                            |   И ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки = &ВремяЗаявки
                            |   И ИсторияЗаявкиЕдиноеОкно.ДатаИсполнения МЕЖДУ &ДатаНач И &ДатаКон
                            |
                            |СГРУППИРОВАТЬ ПО
                            |   ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки,
                            |   ИсторияЗаявкиЕдиноеОкно.ТипУсулги,
                            |   ИсторияЗаявкиЕдиноеОкно.ЛицевойСчет.Участок,
                            |   ИсторияЗаявкиЕдиноеОкно.ДатаИсполнения
                            |
                            |ОБЪЕДИНИТЬ ВСЕ
                            |
                            |ВЫБРАТЬ
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ВремяЗаявки,
                            |   КОЛИЧЕСТВО(ИсторияЗаявкиЕдиноеОкноГРО.Статус),
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ТипУсулги,
                            |   NULL,
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ЛицевойСчет.Участок,
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ДатаИсполнения
                            |ИЗ
                            |   РегистрСведений.ИсторияЗаявкиЕдиноеОкноГРО КАК ИсторияЗаявкиЕдиноеОкноГРО
                            |ГДЕ
                            |   ИсторияЗаявкиЕдиноеОкноГРО.Участок = &УчастокГРО
                            |   И ИсторияЗаявкиЕдиноеОкноГРО.ТипУсулги = &ТипУсулги
                            |   И ИсторияЗаявкиЕдиноеОкноГРО.ВремяЗаявки = &ВремяЗаявки
                            |   И ИсторияЗаявкиЕдиноеОкноГРО.Статус = &Количество
                            |   И ИсторияЗаявкиЕдиноеОкноГРО.ДатаИсполнения МЕЖДУ &ДатаНач И &ДатаКон
                            |
                            |СГРУППИРОВАТЬ ПО
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ВремяЗаявки,
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ТипУсулги,
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ЛицевойСчет.Участок,
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ДатаИсполнения";
                            
                                        
            
            Запрос.УстановитьПараметр("Участок",ЛицевойСчет.Участок);
            Запрос.УстановитьПараметр("УчастокГРО",ЛицевойСчетГРО.Участок);
            Запрос.УстановитьПараметр("ТипУсулги",ТипУслуги);
            Запрос.УстановитьПараметр("Количество",Перечисления.СтатусЕдиноеОкно.Открыта);
            Запрос.УстановитьПараметр("ВремяЗаявки",ВремяЗ);
            Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
            Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));
            
            Запрос.Текст=ТекстЗапрос;
            Результат = Запрос.Выполнить().Выбрать();
            КоличествоЗаявок = Неопределено;
            Пока Результат.Следующий() Цикл              
                КоличествоЗаявок=Результат.Количество;      
            КонецЦикла; 
            
            Если КоличествоЗаявок=Неопределено или КоличествоЗаявок <= КоличествоРЗ или КоличествоРЗ=Неопределено Тогда
                Ответ=Вопрос("Ближайшая свободная дата: "+Формат(ДатаТ,"ДФ=dd.MM.yyyy")+" время: "+ВремяЗ+Символы.ПС+"Вы хотите добавить заявку?",РежимДиалогаВопрос.ДаНет,0);
                Если Ответ = КодВозвратаДиалога.Да Тогда
                    ДатаЗаявки=ДатаТ;
                    ВремяЗаявки=ВремяЗ;
                    Возврат
                КонецЕсли;                          
            КонецЕсли;          
        КонецЦикла;
 
    //Предупреждение("Свободныйх даты нет!");
КонецПроцедуры

Функция 3
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Процедура ПроверкаСвободнойДатаИВремяБезУч(ДатаТ)
        ЗапросВремени = Новый Запрос;
        ЗапросВремени.Текст = "ВЫБРАТЬ
                             |  ПланировщикРемонтныхЗаявок.ВремяЗаявки КАК ВремяЗаявки,
                             |  ПланировщикРемонтныхЗаявок.ТипУслуги,
                             |  ПланировщикРемонтныхЗаявок.Мастер,
                             |  ПланировщикРемонтныхЗаявок.Период
                             |ИЗ
                             |  РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                             |ГДЕ
                             |  ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                             |  И ПланировщикРемонтныхЗаявок.Период МЕЖДУ &ДатаНач И &ДатаКон
                             |
                             |УПОРЯДОЧИТЬ ПО
                             |  ВремяЗаявки УБЫВ,
                             |  Период УБЫВ";
        
        ЗапросВремени.УстановитьПараметр("ТипУслуги",ТипУслуги);
        ЗапросВремени.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
        ЗапросВремени.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));
        
        РезультатВремени = ЗапросВремени.Выполнить().Выбрать();
        
        Пока РезультатВремени.Следующий() Цикл
            ВремяЗ=РезультатВремени.ВремяЗаявки;    
            Мастер=РезультатВремени.Мастер;
            
            Фильтр = Новый Структура();
            Фильтр.Вставить("ВремяЗаявки",ВремяЗ);
            Фильтр.Вставить("ТипУслуги",ТипУслуги);
            КоличествоРЗ=РегистрыСведений.ПланировщикРемонтныхЗаявок.ПолучитьПоследнее(КонецДня(ДатаТ),Фильтр).Количество;
            
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ
                            |   ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки КАК ВремяЗаявки,
                            |   КОЛИЧЕСТВО(ИсторияЗаявкиЕдиноеОкно.Статус) КАК Количество,
                            |   ИсторияЗаявкиЕдиноеОкно.ТипУсулги,
                            |   ИсторияЗаявкиЕдиноеОкно.ДатаИсполнения
                            |ИЗ
                            |   РегистрСведений.ИсторияЗаявкиЕдиноеОкно КАК ИсторияЗаявкиЕдиноеОкно
                            |ГДЕ
                            |   ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки = &ВремяЗаявки
                            |   И ИсторияЗаявкиЕдиноеОкно.ТипУсулги = &ТипУсулги
                            |   И ИсторияЗаявкиЕдиноеОкно.Статус = &Статус
                            |   И ИсторияЗаявкиЕдиноеОкно.ДатаИсполнения МЕЖДУ &ДатаНач И &ДатаКон
                            |
                            |СГРУППИРОВАТЬ ПО
                            |   ИсторияЗаявкиЕдиноеОкно.ВремяЗаявки,
                            |   ИсторияЗаявкиЕдиноеОкно.ТипУсулги,
                            |   ИсторияЗаявкиЕдиноеОкно.ДатаИсполнения
                            |
                            |ОБЪЕДИНИТЬ ВСЕ
                            |
                            |ВЫБРАТЬ
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ВремяЗаявки,
                            |   КОЛИЧЕСТВО(ИсторияЗаявкиЕдиноеОкноГРО.Статус),
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ТипУсулги,
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ДатаИсполнения
                            |ИЗ
                            |   РегистрСведений.ИсторияЗаявкиЕдиноеОкноГРО КАК ИсторияЗаявкиЕдиноеОкноГРО
                            |ГДЕ
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ВремяЗаявки = &ВремяЗаявки
                            |   И ИсторияЗаявкиЕдиноеОкноГРО.ТипУсулги = &ТипУсулги
                            |   И ИсторияЗаявкиЕдиноеОкноГРО.Статус = &Статус
                            |   И ИсторияЗаявкиЕдиноеОкноГРО.ДатаИсполнения МЕЖДУ &ДатаНач И &ДатаКон
                            |
                            |СГРУППИРОВАТЬ ПО
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ВремяЗаявки,
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ТипУсулги,
                            |   ИсторияЗаявкиЕдиноеОкноГРО.ДатаИсполнения";
            
            
            Запрос.УстановитьПараметр("ТипУсулги",ТипУслуги);
            Запрос.УстановитьПараметр("Статус",Перечисления.СтатусЕдиноеОкно.Открыта);
            Запрос.УстановитьПараметр("ВремяЗаявки",ВремяЗ);
            Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
            Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));
            
            Результат = Запрос.Выполнить().Выбрать();
            КоличествоЗаявок = Неопределено;
            Пока Результат.Следующий() Цикл              
                КоличествоЗаявок=Результат.Количество;      
            КонецЦикла; 
            
            Если КоличествоЗаявок=Неопределено или КоличествоЗаявок < КоличествоРЗ или КоличествоРЗ=Неопределено Тогда
                Ответ=Вопрос("Ближайшая свободная дата: "+Формат(ДатаТ,"ДФ=dd.MM.yyyy")+" время: "+ВремяЗ+Символы.ПС+"Вы хотите добавить заявку?",РежимДиалогаВопрос.ДаНет,0);
                Если Ответ = КодВозвратаДиалога.Да Тогда
                    ДатаЗаявки=ДатаТ;
                    ВремяЗаявки=ВремяЗ;
                    Возврат
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
 
    //Предупреждение("Свободныйх даты нет!");
 
КонецПроцедуры
0
Dethmontt
Модератор
Эксперт 1С
2650 / 2440 / 418
Регистрация: 10.03.2011
Сообщений: 8,733
Записей в блоге: 1
Завершенные тесты: 1
22.03.2016, 02:52 18
Я пас!

Не по теме:

человек упорно не хочет думать...

0
GreenkA
Модератор
Эксперт 1С
2990 / 1911 / 520
Регистрация: 25.06.2009
Сообщений: 6,784
22.03.2016, 09:59 19
Ermak27, в процедуре ПроверкаСвободнойДатаИВремяУчастки(ДатаТ):
1C
1
2
3
4
5
6
 Фильтр = Новый Структура();
            Фильтр.Вставить("Участок",ЛицевойСчетГРО.Участок);
            Фильтр.Вставить("Участок",ЛицевойСчет.Участок);
            Фильтр.Вставить("ВремяЗаявки",ВремяЗ);
            Фильтр.Вставить("ТипУслуги",ТипУслуги);
            КоличествоРЗ=РегистрыСведений.ПланировщикРемонтныхЗаявок.ПолучитьПоследнее(КонецДня(ДатаТ),Фильтр).Количество;
Значение поля "Участок" в регистре сведений будет принимать только одно значение. Что вы пытаетесь сделать этим фильтром непонятно... Если надо суммировать значения для одного Участка и для второго, то получайте последние значения отдельно по каждому и суммируйте.

1C
1
2
3
4
            КоличествоЗаявок = Неопределено;
            Пока Результат.Следующий() Цикл              
                КоличествоЗаявок=Результат.Количество;      
            КонецЦикла;
А если у вас в запросе будет две строки? По каждому участку. У вас же в запросе объединение.

По тому, почему неправильно выводит: надо отладить код и проходиться отладчиком по каждой строке, чтобы отловить, в чем дело.
1
Ermak27
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,199
22.03.2016, 14:00  [ТС] 20
GreenkO,
Цитата Сообщение от GreenkO Посмотреть сообщение
Значение поля "Участок" в регистре сведений будет принимать только одно значение. Что вы пытаетесь сделать этим фильтром непонятно... Если надо суммировать значения для одного Участка и для второго, то получайте последние значения отдельно по каждому и суммируйте.
Я исправил так
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
ЗапросРЗ = Новый Запрос;
        ЗапросРЗ.Текст = "ВЫБРАТЬ
                              | ПланировщикРемонтныхЗаявок.ВремяЗаявки КАК ВремяЗаявки,
                              | ПланировщикРемонтныхЗаявок.ТипУслуги,
                              | ПланировщикРемонтныхЗаявок.Период КАК Период,
                              | ПланировщикРемонтныхЗаявок.Участок,
                              | КОЛИЧЕСТВО(ПланировщикРемонтныхЗаявок.Количество) КАК Количество
                              |ИЗ
                              | РегистрСведений.ПланировщикРемонтныхЗаявок КАК ПланировщикРемонтныхЗаявок
                              |ГДЕ
                              | ПланировщикРемонтныхЗаявок.ТипУслуги = &ТипУслуги
                              | И ПланировщикРемонтныхЗаявок.Период МЕЖДУ &ДатаНач И &ДатаКон
                              | И (ПланировщикРемонтныхЗаявок.Участок = &Участок
                              |         ИЛИ ПланировщикРемонтныхЗаявок.Участок = &УчастокГРО)
                              | И ПланировщикРемонтныхЗаявок.ВремяЗаявки = &ВремяЗаявки
                              |
                              |СГРУППИРОВАТЬ ПО
                              | ПланировщикРемонтныхЗаявок.ВремяЗаявки,
                              | ПланировщикРемонтныхЗаявок.ТипУслуги,
                              | ПланировщикРемонтныхЗаявок.Период,
                              | ПланировщикРемонтныхЗаявок.Участок";
        
        ЗапросРЗ.УстановитьПараметр("Участок",ЛицевойСчет.Участок);
        ЗапросРЗ.УстановитьПараметр("УчастокГРО",ЛицевойСчетГРО.Участок);
        ЗапросРЗ.УстановитьПараметр("ТипУслуги",ТипУслуги);
        ЗапросРЗ.УстановитьПараметр("ВремяЗаявки",ВремяЗ);
        ЗапросРЗ.УстановитьПараметр("ДатаНач",НачалоДня(ДатаТ));
        ЗапросРЗ.УстановитьПараметр("ДатаКон",КонецДня(ДатаТ));     
 
        РезультатРЗ = ЗапросРЗ.Выполнить().Выбрать();
        КоличествоРЗ=Неопределено;
        Пока РезультатРЗ.Следующий() Цикл
             КоличествоРЗ=РезультатРЗ.Количество;
        КонецЦикла;
Не понимаю почему он выводит даты с параметром Нет участка
0
22.03.2016, 14:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2016, 14:00

Не работает условие?
Не могу понять в чем тутдело &lt;p class=&quot;icon_list_soc&quot;&gt;&lt;a class=&quot;product-statistic-soc__item&quot;...

Не работает условие
Господа! Не могу понять, что происходит: Есть два одинаковых условия, но для разных полей select....

Не работает условие
Всем привет, помогите разобраться: Если не выбираем дату, ни в date_from, ни в date_to, пишет как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru