|
Цикл по запросу! | ☑ | ||
---|---|---|---|---|
0
Aleksei_Pro
18.08.11
✎
18:01
|
Мне нужно получить отстатки за заданный период (например с 01.01.11 - 01,02,11)!
Делаю запрос в цикле: ПромежуточнаяДата = НачалоДня(НачПериода); Пока ПромежуточнаяДата <= НачалоДня(КонПериода) Цикл ПромежуточнаяДата = ПромежуточнаяДата + 24*60*60; ДатаНач = НачалоДня(ПромежуточнаяДата); КонДата = КонецДня(ПромежуточнаяДата); ........ КонецЦикла; Начальная и конечная дата не берется!Почему? Как поправить? |
|||
1
zbv
18.08.11
✎
18:02
|
а нафиг запрос в цикле ?
|
|||
2
zbv
18.08.11
✎
18:03
|
а так границу надо юзать.
|
|||
3
inka
18.08.11
✎
18:03
|
и где сам запрос? или что Вы понимаете под запросом?
|
|||
4
Axel2009
18.08.11
✎
18:04
|
остаткииобороты с периодичностью день.
|
|||
5
Aleksei_Pro
18.08.11
✎
18:06
|
Вот :
ПромежуточнаяДата = НачалоДня(НачПериода); Пока ПромежуточнаяДата <= НачалоДня(КонПериода) Цикл ПромежуточнаяДата = ПромежуточнаяДата + 24*60*60; ДатаНач = НачалоДня(ПромежуточнаяДата); КонДата = КонецДня(ПромежуточнаяДата); Запрос = Новый Запрос; Запрос.УстановитьПараметр("НачПериода",ДатаНач); Запрос.УстановитьПараметр("КонПериода",КонДата); Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток, 0)) КАК КоличествоКонечныйОстаток, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток, 0)) КАК СуммаКонечныйОстаток |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток < 0 | И ХозрасчетныйОстаткиИОбороты.Организация = &Организация | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстаткиИОбороты.Субконто1"; Рез = запрос.Выполнить(); Если Рез.Пустой()Тогда Продолжить; КонецЕсли; Результат = Рез.Выбрать(); док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); ........... |
|||
6
Aleksei_Pro
18.08.11
✎
18:07
|
(5) мне нужно чтобы строго выбираешь период на форме, и только те дни обрабатывались, которые в периоде!
|
|||
7
Kraft
18.08.11
✎
18:10
|
(5) это зло
|
|||
8
Axel2009
18.08.11
✎
18:10
|
периодичность день + итоги по периоду и вперед обрабатывай
|
|||
9
Aleksei_Pro
18.08.11
✎
18:11
|
(7) мне подкажите как только цикл поправить!
|
|||
10
Жан Пердежон
18.08.11
✎
18:12
|
(0) Толсто
|
|||
11
Aleksei_Pro
18.08.11
✎
18:18
|
(8) я это знаю , мне надо в цикле сделать, подскажите где поправить и как?
|
|||
12
Fragster
гуру
18.08.11
✎
18:25
|
(11) да нафига в цикле-то?
|
|||
13
DrHiHi
18.08.11
✎
18:26
|
а ты остатки не можешь получить за период с НачПериода по КонПериода?? периодичность день %)
|
|||
14
Aleksei_Pro
18.08.11
✎
18:31
|
так что ли:
ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток, 0)) КАК КоличествоКонечныйОстаток, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток, 0)) КАК СуммаКонечныйОстаток, | ХозрасчетныйОстаткиИОбороты.Период КАК Период |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, День, , Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток < 0 | И ХозрасчетныйОстаткиИОбороты.Организация = &Организация | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстаткиИОбороты.Субконто1, | ХозрасчетныйОстаткиИОбороты.Период |ИТОГИ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Субконто1), | СУММА(КоличествоКонечныйОстаток), | СУММА(СуммаКонечныйОстаток) |ПО | Период |
|||
15
MadHead
18.08.11
✎
18:34
|
(14) Типа того, только в таблицу могут не попасть дни по которым не было движений.
|
|||
16
DrHiHi
18.08.11
✎
18:34
|
(14) и отбор по организации засунь в параметры таблицы ОстаткиИОбороты
|
|||
17
DrHiHi
18.08.11
✎
18:36
|
(16) может при обходе оставлять предыдущее значение или в запросе сделать по дням
|
|||
18
Fragster
гуру
18.08.11
✎
18:36
|
(15) а в вариатне с циклом они тоже не попадут
|
|||
19
Aleksei_Pro
18.08.11
✎
18:38
|
Вообщем вот так :
Запрос = Новый Запрос; Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачПериода)); Запрос.УстановитьПараметр("КонПериода",КонецДня(КонПериода)); Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток, 0)) КАК КоличествоКонечныйОстаток, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток, 0)) КАК СуммаКонечныйОстаток, | ХозрасчетныйОстаткиИОбороты.Период КАК Период |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, День, , Счет В ИЕРАРХИИ (&Счет), , ) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток < 0 | И ХозрасчетныйОстаткиИОбороты.Организация = &Организация | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстаткиИОбороты.Субконто1, | ХозрасчетныйОстаткиИОбороты.Период |ИТОГИ | СУММА(КоличествоКонечныйОстаток), | СУММА(СуммаКонечныйОстаток) |ПО | Период, | Субконто1"; Рез = запрос.Выполнить(); Если Рез.Пустой()Тогда Продолжить; КонецЕсли; ВыбПоРегистратору= Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Период"); Пока ВыбПоРегистратору.Следующий() цикл док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); Док.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия; док.Организация = Организация; Док.Дата = НачалоДня(ДатаНач); док.Контрагент = Контрагент; док.ДоговорКонтрагента = Договор; док.Склад = Склад; док.СуммаВключаетНДС = истина; док.УчитыватьНДС = истина; док.Комментарий = "Создан автоматически!!!"; ВыбПоСтроке= ВыбПоРегистратору.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Субконто1"); Пока ВыбПоСтроке.Следующий() цикл ТС = Док.Товары.Добавить(); ТС.Номенклатура = Результат.Субконто1; ТС.ЕдиницаИзмерения = ТС.Номенклатура.БазоваяЕдиницаИзмерения; ТС.Количество = -(Результат.КоличествоКонечныйОстаток); ТС.Сумма = -(Результат.СуммаКонечныйОстаток); ТС.Цена = ТС.Сумма / ТС.Количество; ТС.СтавкаНДС = Перечисления.СтавкиНДС.НДС18; док.ЗаполнитьСчетаУчетаРасчетов(); ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(ТС, Док); ЗаполнитьСчетаУчетаВСтрокеТабЧасти(ТС,Организация,док.Склад, Истина); ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(ТС, Док); КонецЦикла; Док.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; |
|||
20
Aleksei_Pro
18.08.11
✎
18:40
|
Вот это еще нужно вставить перед 2 циклом:
Если ВыбПоСтроке.Количество() = 0 тогда Продолжить; КонецЕсли; |
|||
21
Axel2009
18.08.11
✎
18:42
|
(20) разрешаю.
|
|||
22
DrHiHi
18.08.11
✎
18:42
|
(19) голяк
|
|||
23
Fragster
гуру
18.08.11
✎
18:43
|
(20) а зачем?
|
|||
24
DrHiHi
18.08.11
✎
18:43
|
(19) у тебя два документа поступление товаров и услуг будет создаваться
|
|||
25
Aleksei_Pro
18.08.11
✎
18:44
|
(24) как же правильно!
|
|||
26
DrHiHi
18.08.11
✎
18:50
|
(19) замечание:
1. счет один, зачем тогда в запросе "В" 2. на null не нужно проверять 3. " И ХозрасчетныйОстаткиИОбороты.Организация = &Организация" убери, а в "РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, День, , Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация)" добавить 4. общие итоги группировать только по Периоду 5. |ИТОГИ | СУММА(КоличествоКонечныйОстаток), | СУММА(СуммаКонечныйОстаток) ------ бессмысленная группировка (25) вообще не взлетит |
|||
27
Aleksei_Pro
18.08.11
✎
18:50
|
(24) и почему же будет создаваться 2 документа?
|
|||
28
DrHiHi
18.08.11
✎
18:51
|
(27) потому что у тебя будут итоги на дату НачПериода и на КонПериода
|
|||
29
Aleksei_Pro
18.08.11
✎
18:52
|
Тогда такой запрос:
"ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток, 0)) КАК КоличествоКонечныйОстаток, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток, 0)) КАК СуммаКонечныйОстаток, | ХозрасчетныйОстаткиИОбороты.Период КАК Период |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, День, , Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток < 0 | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстаткиИОбороты.Субконто1, | ХозрасчетныйОстаткиИОбороты.Период |ИТОГИ ПО | ОБЩИЕ, | Период ПЕРИОДАМИ(ДЕНЬ, &НачПериода, &КонПериода)"; |
|||
30
Fragster
гуру
18.08.11
✎
18:54
|
(29) метод дополнения поставь "Движения" - там по умолчанию еще и границы стоят...
|
|||
31
Aleksei_Pro
18.08.11
✎
18:57
|
Не понимаю, как это сработает:
// Вставить содержимое обработчика. Запрос = Новый Запрос; Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачПериода)); Запрос.УстановитьПараметр("КонПериода",КонецДня(КонПериода)); Запрос.УстановитьПараметр("Организация",Организация); Запрос.УстановитьПараметр("Счет",ПланыСчетов.Хозрасчетный.ТоварыНаСкладах); Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток, 0)) КАК КоличествоКонечныйОстаток, | СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток, 0)) КАК СуммаКонечныйОстаток, | ХозрасчетныйОстаткиИОбороты.Период КАК Период |ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, День, Движения, Счет В ИЕРАРХИИ (&Счет), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты |ГДЕ | ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток < 0 | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОстаткиИОбороты.Субконто1, | ХозрасчетныйОстаткиИОбороты.Период |ИТОГИ ПО | ОБЩИЕ, | Период ПЕРИОДАМИ(ДЕНЬ, &НачПериода, &КонПериода)"; Рез = запрос.Выполнить(); Если Рез.Пустой()Тогда Возврат; КонецЕсли; Результат= Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Период"); Пока Результат.Следующий() цикл док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); Док.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия; док.Организация = Организация; Док.Дата = НачалоДня(Результат); док.Контрагент = Контрагент; док.ДоговорКонтрагента = Договор; док.Склад = Склад; док.СуммаВключаетНДС = истина; док.УчитыватьНДС = истина; док.Комментарий = "Создан автоматически!!!"; // строки пошли минусовые ТС = Док.Товары.Добавить(); ТС.Номенклатура = Результат.Субконто1; ТС.ЕдиницаИзмерения = ТС.Номенклатура.БазоваяЕдиницаИзмерения; ТС.Количество = -(Результат.КоличествоКонечныйОстаток); ТС.Сумма = -(Результат.СуммаКонечныйОстаток); ТС.Цена = ТС.Сумма / ТС.Количество; ТС.СтавкаНДС = Перечисления.СтавкиНДС.НДС18; док.ЗаполнитьСчетаУчетаРасчетов(); ОбработкаТабличныхЧастей.ПриИзмененииНоменклатурыТабЧасти(ТС, Док); ЗаполнитьСчетаУчетаВСтрокеТабЧасти(ТС,Организация,док.Склад, Истина); ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(ТС, Док); // конец записи строки Док.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; |
|||
32
DrHiHi
18.08.11
✎
19:03
|
(31) мы сами в шоке ))))
"СУММА(ЕСТЬNULL(" замени на "СУММА(" "Счет В ИЕРАРХИИ (&Счет)" замени на "Счет = &Счет" " |ИТОГИ ПО | ОБЩИЕ, | Период ПЕРИОДАМИ(ДЕНЬ, &НачПериода, &КонПериода)";" замени на " |ИТОГИ ПО | Период";" " // строки пошли минусовые" замени на Выборка = Результат.Выбрать() а если честно то никого не слушай а делай как делал))))) |
|||
33
DrHiHi
18.08.11
✎
19:07
|
(32) а не получиться из-за того, что таким методом у тебя выйдет таблица, например:
дата остаток 01.01.2011 -10 01.02.2011 -20 (списалось еще 10) а в документ поступление ты будешь добавлять 01.01.2011 - 10 штук 01.02.2011 - 20 штук и в итоге у тебя на складе останется 10шт)))) |
|||
34
Aleksei_Pro
18.08.11
✎
19:10
|
(33) вот и именно что в цикле все получится как в 0 я делал!
|
|||
35
DrHiHi
18.08.11
✎
19:11
|
(33) а хотя может и получиться, только вот берешь не конечний остаток, а коностаток - начостаток это и будет количество, которое нужно добавить в документ
|
|||
36
Aleksei_Pro
18.08.11
✎
19:12
|
(34)+ так там что то с циклом, как же поправить цикл , возвращаемся к 0.....
|
|||
37
Aleksei_Pro
18.08.11
✎
19:13
|
(35) годать не будем, я таким методом как в 0 уже не раз пользовался, только вот с циклом что то не так происходит, первую дату не берет и последнюю
|
|||
38
Axel2009
18.08.11
✎
19:26
|
(37) ну так прибавляй после всех обработок
|
|||
39
DrHiHi
18.08.11
✎
19:58
|
(37) если еще для тебя актуально, то могу написать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |