![]() |
![]() |
![]() |
|
Отчет увеличивает остатки на начало | ☑ | ||
---|---|---|---|---|
0
o-bol
04.01.12
✎
21:42
|
Помогите разобраться с кодом:
Запрос.Текст = ТекстЗапроса; МассивРезультатов = Запрос.ВыполнитьПакет(); РезультатОстаков = МассивРезультатов[2]; РезультатЗапроса = МассивРезультатов[3]; Если РезультатОстаков.Пустой() Тогда КонОст = 0; НачОст = 0; Иначе ВыборкаСтрокаОстатков = РезультатОстаков.Выбрать(); ВыборкаСтрокаОстатков.Следующий(); НачОст = ВыборкаСтрокаОстатков.НачОст; Сообщить ("Начальный остаток" + НачОст); КонОст = ВыборкаСтрокаОстатков.КонОст; Сообщить ("Конечный остаток" + КонОст); КонецЕсли; ОбластьМакета = Макет.ПолучитьОбласть("ОстатокНачала"); ОбластьМакета.Параметры.ДатаНачала = "Остаток на " + Формат(ДатаНач-1, "ДЛФ=Д"); ОбластьМакета.Параметры.НачСтоимостьВсего = ОбщегоНазначения.ФорматСумм(НачОст); мТабДок.Вывести(ОбластьМакета); Начальный остаток увеличивает в 2 раза. Как исправить? В программировании я новичок, а точнее чайник. |
|||
1
GROOVY
04.01.12
✎
21:44
|
Запрос где?
|
|||
2
GROOVY
04.01.12
✎
21:44
|
Группировки видать в запросе не верно указаны.
|
|||
3
Grusswelle
04.01.12
✎
21:46
|
Запрос в студию!
|
|||
4
ДенисЧ
04.01.12
✎
21:47
|
про запрос не успели сказать?
|
|||
5
andrewks
04.01.12
✎
21:48
|
а где запрос?
|
|||
6
o-bol
04.01.12
✎
21:52
|
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Дата1", НачалоДня(ДатаНач)); Запрос.УстановитьПараметр("Дата2", КонецДня(ДатаКон)); Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("ТипЦен", ТипЦен); Если Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда ТекстЗапроса = "ВЫБРАТЬ | ЦеныНоменклатуры.Период КАК Дата1, | МИНИМУМ(ЦеныНоменклатурыКопия.Период) КАК Дата2, | ЦеныНоменклатуры.Номенклатура, | ЦеныНоменклатуры.Цена |ПОМЕСТИТЬ ПредварительнаяВыборка |ИЗ | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыКопия | ПО ЦеныНоменклатуры.Номенклатура = ЦеныНоменклатурыКопия.Номенклатура | И ЦеныНоменклатуры.ЕдиницаИзмерения = ЦеныНоменклатурыКопия.ЕдиницаИзмерения | И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКопия.ХарактеристикаНоменклатуры | И ЦеныНоменклатуры.Валюта = ЦеныНоменклатурыКопия.Валюта | И ЦеныНоменклатуры.ТипЦен = ЦеныНоменклатурыКопия.ТипЦен | И ЦеныНоменклатуры.Период < ЦеныНоменклатурыКопия.Период |ГДЕ | ЦеныНоменклатуры.ТипЦен = &ТипЦен | |СГРУППИРОВАТЬ ПО | ЦеныНоменклатуры.Период, | ЦеныНоменклатуры.Номенклатура, | ЦеныНоменклатуры.Цена |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЦеныПоПериодам.Дата1 КАК Дата1, | КОНЕЦПЕРИОДА(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ЦеныПоПериодам.Дата2, ДЕНЬ, -1), ДАТАВРЕМЯ(3999, 12, 31)), ДЕНЬ) КАК Дата2, | ЦеныПоПериодам.Номенклатура КАК Номенклатура, | ЦеныПоПериодам.Цена |ПОМЕСТИТЬ Цены |ИЗ | ПредварительнаяВыборка КАК ЦеныПоПериодам |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | NULL КАК Док, | NULL КАК ДатаДок, | NULL КАК НомерДок, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК НачОст, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК КонОст, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) КАК Приход, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) КАК Расход, | ТоварыНаСкладахОстаткиИОбороты.Регистратор.СуммаДокумента КАК СуммаДокумента |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты | ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены | ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = Цены.Номенклатура | И ТоварыНаСкладахОстаткиИОбороты.Период >= Цены.Дата1 | И ТоварыНаСкладахОстаткиИОбороты.Период <= Цены.Дата2 | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстаткиИОбороты.Регистратор.СуммаДокумента | |ИМЕЮЩИЕ | (СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) <> 0 | ИЛИ СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) <> 0 | ИЛИ СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) <> 0 | ИЛИ СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) <> 0) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК НачОст, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК КонОст, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) КАК Приход, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) КАК Расход, | ТоварыНаСкладахОстаткиИОбороты.Период КАК ДатаДок, | ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер КАК НомерДок, | ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Док, | ТоварыНаСкладахОстаткиИОбороты.Регистратор.СуммаДокумента КАК СуммаДокумента |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты | ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены | ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = Цены.Номенклатура | И ТоварыНаСкладахОстаткиИОбороты.Период >= Цены.Дата1 | И ТоварыНаСкладахОстаткиИОбороты.Период <= Цены.Дата2 | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстаткиИОбороты.Период, | ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер, | ТоварыНаСкладахОстаткиИОбороты.Регистратор | |УПОРЯДОЧИТЬ ПО | ДатаДок"; КонецЕсли; Запрос.Текст = ТекстЗапроса; МассивРезультатов = Запрос.ВыполнитьПакет(); РезультатОстаков = МассивРезультатов[2]; РезультатЗапроса = МассивРезультатов[3]; |
|||
7
zak555
04.01.12
✎
21:54
|
что нужно получить ?
|
|||
8
o-bol
04.01.12
✎
21:56
|
Это по отчету Торг-29 только для оптовых складов. Остаток на начало периода в ценах реализации, приход и расход по документам, остаток на конец.
|
|||
9
GROOVY
04.01.12
✎
22:11
|
Ну вот у тебя дубли:
СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК НачОст, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК КонОст, |
|||
10
zak555
04.01.12
✎
22:13
|
а что вот это :
ВЫБРАТЬ | ЦеныНоменклатуры.Период КАК Дата1, | МИНИМУМ(ЦеныНоменклатурыКопия.Период) КАК Дата2, | ЦеныНоменклатуры.Номенклатура, | ЦеныНоменклатуры.Цена |ПОМЕСТИТЬ ПредварительнаяВыборка |ИЗ | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыКопия | ПО ЦеныНоменклатуры.Номенклатура = ЦеныНоменклатурыКопия.Номенклатура | И ЦеныНоменклатуры.ЕдиницаИзмерения = ЦеныНоменклатурыКопия.ЕдиницаИзмерения | И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКопия.ХарактеристикаНоменклатуры | И ЦеныНоменклатуры.Валюта = ЦеныНоменклатурыКопия.Валюта | И ЦеныНоменклатуры.ТипЦен = ЦеныНоменклатурыКопия.ТипЦен | И ЦеныНоменклатуры.Период < ЦеныНоменклатурыКопия.Период |ГДЕ | ЦеныНоменклатуры.ТипЦен = &ТипЦен | |СГРУППИРОВАТЬ ПО | ЦеныНоменклатуры.Период, | ЦеныНоменклатуры.Номенклатура, | ЦеныНоменклатуры.Цена |; ??? |
|||
11
o-bol
04.01.12
✎
22:20
|
Получить цену номенклатуры на период с-по. Когда формируешь отчет торг-29 он строится за определенный период, например месяц, в течение него цены могут меняться.
|
|||
12
o-bol
04.01.12
✎
22:32
|
СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК НачОст,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК КонОст, Это надо удалить или как-то подругому переписать? Я уже 2 недели пытаюсь разобраться, но мозг уже не соображает. |
|||
13
hhhh
04.01.12
✎
23:17
|
скорее полностью весь этот запрос в мусор, и написать нормальный.
|
|||
14
o-bol
04.01.12
✎
23:21
|
Еслиб я могла, то не спрашивала что не так.
Простые запросы могу, а вот со сложными напряжёнка. |
|||
15
zak555
04.01.12
✎
23:28
|
Пол: Мужской у (0)
|
|||
16
o-bol
04.01.12
✎
23:59
|
Да я не программистка ни по 1с ни вообще, просто внедряю 1с. Поставила УТ у клиента, и чтобы не заморачиваться с розницей организовали учет по оптовому складу, а бухше надо отчет торг-29. Нашла на просторах инета, а он формируется не совсем верно, если мне нормально для чайников объяснить, то поправлю, а вот полностью переписать не смогу.
|
|||
17
o-bol
05.01.12
✎
05:59
|
Вот! Получилось! Спасибо GROOVY!
Запрос = Новый Запрос; Запрос.УстановитьПараметр("Дата1", НачалоДня(ДатаНач)); Запрос.УстановитьПараметр("Дата2", КонецДня(ДатаКон)); Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("ТипЦен", ТипЦен); Если Склад.ВидСклада = Перечисления.ВидыСкладов.Оптовый Тогда ТекстЗапроса = "ВЫБРАТЬ | ЦеныНоменклатуры.Период КАК Дата1, | МИНИМУМ(ЦеныНоменклатурыКопия.Период) КАК Дата2, | ЦеныНоменклатуры.Номенклатура, | ЦеныНоменклатуры.Цена |ПОМЕСТИТЬ ПредварительнаяВыборка |ИЗ | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатурыКопия | ПО ЦеныНоменклатуры.Номенклатура = ЦеныНоменклатурыКопия.Номенклатура | И ЦеныНоменклатуры.ЕдиницаИзмерения = ЦеныНоменклатурыКопия.ЕдиницаИзмерения | И ЦеныНоменклатуры.ХарактеристикаНоменклатуры = ЦеныНоменклатурыКопия.ХарактеристикаНоменклатуры | И ЦеныНоменклатуры.Валюта = ЦеныНоменклатурыКопия.Валюта | И ЦеныНоменклатуры.ТипЦен = ЦеныНоменклатурыКопия.ТипЦен | И ЦеныНоменклатуры.Период < ЦеныНоменклатурыКопия.Период |ГДЕ | ЦеныНоменклатуры.ТипЦен = &ТипЦен | |СГРУППИРОВАТЬ ПО | ЦеныНоменклатуры.Период, | ЦеныНоменклатуры.Номенклатура, | ЦеныНоменклатуры.Цена |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЦеныПоПериодам.Дата1 КАК Дата1, | КОНЕЦПЕРИОДА(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ЦеныПоПериодам.Дата2, ДЕНЬ, -1), ДАТАВРЕМЯ(3999, 12, 31)), ДЕНЬ) КАК Дата2, | ЦеныПоПериодам.Номенклатура КАК Номенклатура, | ЦеныПоПериодам.Цена |ПОМЕСТИТЬ Цены |ИЗ | ПредварительнаяВыборка КАК ЦеныПоПериодам |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК НачОст, | СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) КАК КонОст, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) КАК Приход, | СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) КАК Расход, | ТоварыНаСкладахОстаткиИОбороты.Период КАК ДатаДок, | ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер КАК НомерДок, | ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Док, | ТоварыНаСкладахОстаткиИОбороты.Регистратор.СуммаДокумента КАК СуммаДокумента |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Регистратор, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты | ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены | ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = Цены.Номенклатура | И ТоварыНаСкладахОстаткиИОбороты.Период >= Цены.Дата1 | И ТоварыНаСкладахОстаткиИОбороты.Период <= Цены.Дата2 | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстаткиИОбороты.Период, | ТоварыНаСкладахОстаткиИОбороты.Регистратор.Номер, | ТоварыНаСкладахОстаткиИОбороты.Регистратор, | ТоварыНаСкладахОстаткиИОбороты.Регистратор.СуммаДокумента |ИМЕЮЩИЕ | (СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) <> 0 | ИЛИ СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток * ЕСТЬNULL(Цены.Цена, 0)) <> 0 | ИЛИ СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход - ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) <> 0 | ИЛИ СУММА(ВЫБОР | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0 | ТОГДА (ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход - ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) * ЕСТЬNULL(Цены.Цена, 0) | ИНАЧЕ 0 | КОНЕЦ) <> 0) | |УПОРЯДОЧИТЬ ПО | ДатаДок"; КонецЕсли; |
|||
18
o-bol
05.01.12
✎
06:39
|
А ещё подскажите, пожалуйста как мне из ТЗ.Расходы вывести в отчет сумму скидки? Её надо рассчитать по документу "Отчет о розничных продажах. Скидка=СуммаДокумента-(СуммаКоличество*Суммацена). Как-то так.
Код: ОбластьМакета = Макет.ПолучитьОбласть("Строка"); Для Каждого СтрокаРасхода Из ТЗРасходы Цикл ОбластьМакета.Параметры.Докум = СтрокаРасхода.Док; ОбластьМакета.Параметры.Расшифровка = СтрокаРасхода.Док; ОбластьМакета.Параметры.ДатаДокумента = СтрокаРасхода.ДатаДок; ОбластьМакета.Параметры.НомерДокумента = СтрокаРасхода.НомерДок; Если ТипЗнч(СтрокаРасхода.Док)=Тип("ДокументСсылка.ОтчетОРозничныхПродажах")Тогда ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.СуммаДокумента); ОбластьМакета.Параметры.СуммаСкидки = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.СуммаСкидки); КонецЕсли; ОбластьМакета.Параметры.СуммаТовара = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.Расход); ОбластьМакета.Параметры.СуммаСкидки = ОбщегоНазначения.ФорматСумм(СтрокаРасхода.СуммаДокумента-(СтрокаРасхода.Количество*СтрокаРасхода.Цена)); ОбластьМакета.Параметры.СуммаТары = ОбщегоНазначения.ФорматСумм(0); мТабДок.Вывести(ОбластьМакета); КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |