|
Как отследить последний проход цикла? | ☑ | ||
---|---|---|---|---|
0
svird
22.08.17
✎
11:42
|
Леплю в запросе такую конструкцию:
| ГДЕ"; Для Инд = 0 По СписокОбрабатываемыхДокументов.Количество()-1 Цикл Запрос.Текст = Запрос.Текст + " ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение + " ИЛИ "; КонецЦикла; Запрос.Текст=Запрос.Текст+ " Ругается на последнее ИЛИ |
|||
1
Вафель
22.08.17
✎
11:43
|
трезай последние ххх символов
|
|||
2
h-sp
22.08.17
✎
11:46
|
Для Инд = 0 По СписокОбрабатываемыхДокументов.Количество()-1 Цикл
Если Инд = СписокОбрабатываемыхДокументов.Количество()-1 Тогда Запрос.Текст = Запрос.Текст + " ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение; Иначе Запрос.Текст = Запрос.Текст + " ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение + " ИЛИ "; КонецЕсли; КонецЦикла; |
|||
3
svird
22.08.17
✎
11:49
|
Спасибо
|
|||
4
FIXXXL
22.08.17
✎
11:52
|
(2) лучше переопределяй текст " ИЛИ " по условию
ибо потом глаза сломаешь сопровождать такие дубли типа Запрос.Текст = Запрос.Текст + " ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение; Иначе Запрос.Текст = Запрос.Текст + " ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение + " ИЛИ "; типа: Если Инд = СписокОбрабатываемыхДокументов.Количество()-1 Тогда ТекстИЛИ = ""; Иначе ТекстИЛИ = " ИЛИ "; Запрос.Текст = Запрос.Текст + " ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение + ТекстИЛИ; |
|||
5
vde69
22.08.17
✎
11:56
|
| ГДЕ ЛОЖЬ";
Для Инд = 0 По СписокОбрабатываемыхДокументов.Количество()-1 Цикл Запрос.Текст = Запрос.Текст + " ИЛИ ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение; КонецЦикла; Запрос.Текст=Запрос.Текст+ " |
|||
6
Злопчинский
22.08.17
✎
11:59
|
Цикл
А = А+РазделительСтрок КонецЦикла А = СтрЗаменить(СокрЛП(А),РазделительСтрок," ИЛИ "); |
|||
7
Галахад
гуру
22.08.17
✎
12:00
|
(6) А последнее или? :-)
|
|||
8
Timon1405
22.08.17
✎
12:07
|
в типовых есть
Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов) Экспорт Текст = Лев(Текст, СтрДлина(Текст) - ЧислоСимволов); КонецПроцедуры |
|||
9
VladZ
22.08.17
✎
12:15
|
(0) Поставь "ИЛИ вначале:
+ "ИЛИ ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение; |
|||
10
Лефмихалыч
22.08.17
✎
12:15
|
Хосспади!
Текст = ""; Для счц=1 по 10 цикл Текст = Текст + символы.ПС + "(текст условия)"; КонецЦикла Текст = СтрЗаменить(СокрЛП(Текст), Символы.ПС, " ИЛИ "); |
|||
11
1dvd
22.08.17
✎
12:17
|
ТекстУсловия = "";
Для Каждого ОбрабатываемыйДокумент Из СписокОбрабатываемыхДокументов Цикл Если ТекстУсловия = "" Тогда ТекстУсловия = "ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ ОбрабатываемыйДокумент.Значение; Иначе ТекстУсловия = ТекстУсловия + "ИЛИ ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ ОбрабатываемыйДокумент.Значение; КонецЕсли; КонецЦикла; Запрос.Текст = Запрос.Текст + ТекстУсловия; |
|||
12
Злопчинский
22.08.17
✎
12:23
|
(7) ну так как раз отрезаем последнее ИЛИ после которого ничего не идет
|
|||
13
singlych
22.08.17
✎
12:24
|
ГДЕ ТИПЗНАЧЕНИЯ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) В (&МассивТипов)
|
|||
14
Злопчинский
22.08.17
✎
12:24
|
(10) опоздун! ;-)
|
|||
15
Вафель
22.08.17
✎
12:34
|
(10) нельзя так ибоусловие будет начинаться с ИЛИ
|
|||
16
1dvd
22.08.17
✎
12:36
|
(15) там СокрЛП
|
|||
17
Вафель
22.08.17
✎
12:37
|
За такое использование хаков нужно по рукам линейкой
|
|||
18
Basilio
22.08.17
✎
12:38
|
(15) ЭтоПервыйПроход = Истина
НачалоЦикла ... ТекстЗапроса = ТекстЗапроса + ?(ЭтоПервыйПроход, "", " Или ") + ТекстУсловия; ЭтоПервыйПроход = Ложь; ... КонецЦикла |
|||
19
Злопчинский
22.08.17
✎
12:38
|
(17) ага, а за
Флаг = 3-Флаг - 5 лет без права переписки? |
|||
20
Лефмихалыч
22.08.17
✎
12:39
|
(15) можно. Не будет. Потому что СокрЛП().
|
|||
21
Fragster
гуру
22.08.17
✎
12:39
|
текст = "...
|Где |Ложь "; Цикл "| ИЛИ " + Условие КонецЦикла; |
|||
22
Fragster
гуру
22.08.17
✎
12:39
|
ну, или воспользоваться функцией СтрСоединить(<Строки>, <Разделитель>) с массивом условий
|
|||
23
Лефмихалыч
22.08.17
✎
12:40
|
(17) это за 10 строк там, где хватит и одной, надо по рукам линейкой
|
|||
24
Вафель
22.08.17
✎
12:41
|
(23) Читабельность важнее минимального количества строк
|
|||
25
Лефмихалыч
22.08.17
✎
12:42
|
(24) одна строчка в десять раз читабельнее десяти. Особенно, когда речь про образчики из этой ветки
|
|||
26
Fragster
гуру
22.08.17
✎
12:42
|
ну а вообще за формирование текст запроса через соединение строк - сразу по рукам линейкой.
Есть за СтрЗаменить(Запрос.Текст, "&_УсловиеТипов", СформированнаяСтрокаУсловия) |
|||
27
Лефмихалыч
22.08.17
✎
12:45
|
У дельфина вообще - 50 сантиметров. Расходимся
|
|||
28
Вафель
22.08.17
✎
12:46
|
(25) далеко не факт
|
|||
29
Вафель
22.08.17
✎
12:47
|
Эта задача решается на СКД вообще без всякого кода
|
|||
30
lexasan
22.08.17
✎
12:47
|
Внесу свою лепту
Для Инд = 0 По СписокОбрабатываемыхДокументов.Количество()-1 Цикл Запрос.Текст = Запрос.Текст + ?(Инд=0, "", " ИЛИ ") +" ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ."+ СписокОбрабатываемыхДокументов.Получить(Инд).Значение; КонецЦикла; |
|||
31
Лефмихалыч
22.08.17
✎
12:49
|
(29) или на построителе хотя б.
Но бывает, что нагородить вот такой частокол эффективнее, чем существующий 100500лет механизм на скд переводить |
|||
32
Базис
naïve
22.08.17
✎
13:02
|
ГДЕ
Ложь (Или 1 условие) (Или 1 условие) ... (Или N условие) |
|||
33
Вафель
22.08.17
✎
13:03
|
(31) технический долг потом скажет о себе
|
|||
34
dmpl
22.08.17
✎
13:04
|
(0) Добавь в конце ИСТИНА.
|
|||
35
1dvd
22.08.17
✎
13:05
|
(34) Садись, два!
|
|||
36
dmpl
22.08.17
✎
13:07
|
(35) Эх, вот зачем ты? Я же научить хотел ;)
|
|||
37
dmpl
22.08.17
✎
13:07
|
+(36) И да, цель-то будет достигнута - на последнее ИЛИ ругаться перестанет :)
|
|||
38
Быдло замкадное
22.08.17
✎
13:20
|
Добавь в конце + " ЛОЖЬ"
|
|||
39
1dvd
22.08.17
✎
14:12
|
(36) <Любое условие> ИЛИ ИСТИНА
всегда вернёт истину |
|||
40
r_i_n_i_k
22.08.17
✎
14:13
|
Тогда ЛОЖЬ подойдёт же
|
|||
41
Мыш
22.08.17
✎
14:27
|
Конструктор запросов решит проблему )
|
|||
42
dmpl
23.08.17
✎
07:11
|
(39) Дык нельзя же готовое на блюдечке подавать - надо чтобы и ТС немного подумал ;)
|
|||
43
Интересно интересно
23.08.17
✎
07:19
|
(41) Нет. Его забанили: http://www.forum.mista.ru/users.php?name=Конструктор%20Запросов
|
|||
44
1dvd
23.08.17
✎
07:26
|
Чем тут КЗ поможет?
|
|||
45
Segate
23.08.17
✎
08:30
|
(0) а зачем отслеживать последнее или, когда можно отследить первый прогон?
Если не первый тогда ТекстЗапроса = текстзапроса+ "Или" Конецесли и будет тебе счастье... не? |
|||
46
Рэйв
23.08.17
✎
08:40
|
(45)У него это ИЛИ должно в последнем не ставиться:)
|
|||
47
Злопчинский
23.08.17
✎
08:40
|
(45) какая нафиг разница - отслеживать первый или последний?
|
|||
48
vde69
23.08.17
✎
08:49
|
самое простое решение уже давно было... например в (5)
|
|||
49
Segate
23.08.17
✎
08:52
|
(45) ну... последний прогон в цикле "Пока" ты толком не отследишь без доп манипуляций типа вычисления количества итераций цикла заранее... а так ничего вычеслять не надо и от количества итераций ничего не зависит...
|
|||
50
Segate
23.08.17
✎
08:53
|
(49) просто добавить ложь - это не спортивно же xD
|
|||
51
Asmody
23.08.17
✎
09:27
|
(0) Для кого в 1С схему запроса придумали?
|
|||
52
Мыш
23.08.17
✎
09:30
|
(44) Ошибся. Схема, конечно же.
(51) Для тех, кто читает документацию. |
|||
53
Мыш
23.08.17
✎
09:32
|
ОператорВыбратьСхемыЗапроса (QuerySchemaSelectOperator)
Отбор (Filter) Использование: Только чтение. Описание: Тип: ВыраженияСхемыЗапроса. Содержит выражения отбора. Соответствует выражению ГДЕ языка запросов. Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
54
Fragster
гуру
23.08.17
✎
10:58
|
(51) схема запроса относительно СКД недоделанная, причем очень сильно. построитель и СтрЗаменить (когда его не хватает) намного меньше букв требуют и проще для дальнейшего сопровождения.
|
|||
55
Мыш
23.08.17
✎
11:05
|
(54) Грузовик КамАЗ сильно недоделан относительно роторного экскаватора.
|
|||
56
Fragster
гуру
23.08.17
✎
11:16
|
(55) ну вот, например, кусок для обновления одной записи РС без её чтения через менеджер:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокЗаявкаКлиента.Ссылка КАК ЗаявкаКлиента, | // тут новые значения, которые надо проставить в запись РС | &Звездочка |ИЗ | Документ.ЗаявкаКлиента КАК ДокЗаявкаКлиента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеЗаявкиКлиента КАК ДанныеЗаявкиКлиента | ПО ДокЗаявкаКлиента.Ссылка = ДанныеЗаявкиКлиента.ЗаявкаКлиента | ЛЕВОЕ СОЕДИНЕНИЕ /// |ГДЕ | ДокЗаявкаКлиента.Ссылка В(&ЗаявкаКлиента)"; //СхемаЗапроса = Новый СхемаЗапроса; //СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст); //ОператорВыбор = СхемаЗапроса.ПакетЗапросов[0].Операторы[0]; // тут мы вынуждены завязываться на порядок подзапросов и таблиц секции ИЗ, т.е. тут можно выстрелить себе в ногу //Для каждого ИсточникСхемы Из ОператорВыбор.Источники цикл // куча бессмысленных обходов // Если ТипЗНЧ(ИсточникСхемы.Источник) = Тип("ТаблицаСхемыЗапроса") И ИсточникСхемы.Источник.ИмяТаблицы = "РегистрСведений.ДанныеЗаявкиКлиента" Тогда // Для каждого Поле Из ИсточникСхемы.Источник.ДоступныеПоля Цикл // ОператорВыбор.ВыбираемыеПоля.Добавить(Поле); // КонецЦикла; // КонецЕсли; //КонецЦикла; // //Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса(); Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Звездочка", "ДанныеЗаявкиКлиента.*"); // ну, либо сделать это одной строкой. |
|||
57
1dvd
23.08.17
✎
11:18
|
развели, блин, демагогию
|
|||
58
Вафель
23.08.17
✎
11:18
|
(56) А зачем так? Почему бы стразу звездочку не на написать?
|
|||
59
Мыш
23.08.17
✎
11:19
|
(57) Можно накидать обратных примеров. Но какой смысл?
Инструмент подбирается под задачу. И если он не подходит к энному количеству задач, то не значит, что он в принципе не годится. Не говоря уж о том, что "недоделан". Топор недоделан, пилить не может. |
|||
60
Fragster
гуру
23.08.17
✎
11:19
|
(58) потому что как только ты воспользуешься конструктором - звездочка превратится в тыкву. А потом ты превратишься в тыкву после добавления или удаления поля в регистр
|
|||
61
Мыш
23.08.17
✎
11:20
|
(59) на (56), конечно
|
|||
62
Fragster
гуру
23.08.17
✎
11:23
|
(59) Ну накидай.
пока нашел одно использование, где без нее никак (ну, или сильно сложнее) - это удаление прям целых таблиц из запросов (например для запроса ДС с колонкой внешних пользователей для пользователей, у которых нет доступа к внешним пользователям). Но из-за того, что для этого нужно делать кучу циклов в циклах, это также неудобно. Да и случай не самый частый. |
|||
63
Вафель
23.08.17
✎
11:24
|
(60) Зачем конструктором такой простой запрос?
|
|||
64
Fragster
гуру
23.08.17
✎
11:26
|
(63) во первых, он не простой - из него вырезаны куски получения обновленных значений для полей РС. во вторых - конструктор - самый простой способ проверить запрос на корректность и отформатировать его.
|
|||
65
Мыш
23.08.17
✎
11:26
|
(62) Программное добавление своего поля в запрос динамического списка.
|
|||
66
Мыш
23.08.17
✎
11:27
|
+(65) > Да и случай не самый частый
Я и не пишу, что это исключительный инструмент. Но своя область применения есть. |
|||
67
Fragster
гуру
23.08.17
✎
11:31
|
(66) ИМХО, в (0) случай, когда схема запроса проигрывает СтрЗаменить ;)
|
|||
68
Мыш
23.08.17
✎
11:35
|
(67) Это уже дискутабельно ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |