|
v7: Нифига не работает запрос ( | ☑ | ||
---|---|---|---|---|
0
ololo9
09.02.12
✎
10:29
|
Есть такой отчетик "Выпуск продукции", в нем расчет по цене отгрузки осуществляется след. образом:
Процедура Сформировать_Колонки(Ит, Таб, Стр) Флаг = 0; Таб.ВывестиСекцию(Стр+"|Начало"); Ит.ВыбратьПериоды(1); Пока Ит.ПолучитьПериод() = 1 Цикл //Таб.ПрисоединитьСекцию(Стр+"|Период"); КонецЦикла; Таб.ПрисоединитьСекцию(Стр+"|Итог"); ИтДав = СоздатьОбъект("БухгалтерскиеИтоги"); ИтДав.ИспользоватьПланСчетов(ОсновнойПланСчетов()); ИтДав.ИспользоватьСубконто(ВидыСубконто.Изделие,ТекИзделие, 1); ИтДав.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода,"Дав",,, 2,, "К"); ИтОтг = СоздатьОбъект("БухгалтерскиеИтоги"); ИтОтг.ИспользоватьПланСчетов(ОсновнойПланСчетов()); ИтОтг.ИспользоватьСубконто(ВидыСубконто.Изделие,ТекИзделие, 1); ИтОтг.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода,"Отг",,, 2,, "К"); ИтСум = СоздатьОбъект("БухгалтерскиеИтоги"); ИтСум.ИспользоватьПланСчетов(ОсновнойПланСчетов()); ИтСум.ИспользоватьСубконто(ВидыСубконто.Изделие,ТекИзделие, 1); ИтСум.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода,"Сум",,, 2,, "К"); Продукция = Ит.Субконто(ВидыСубконто.Изделие); //Если Счетчик=1 Тогда // ЦенаПоЦенеОтгрузки = 0; // Пометка = ""; // не пустое значение, когда расчет по цене отгруженного товара //Если Ит.ДО(3) > ИтОтг.ДО(3) Тогда // //ЦенаПоЦенеОтгрузки = Окр((((Ит.ДО(3)-ИтОтг.ДО(3))*Ит.Субконто(ВидыСубконто.Изделие).ЦенаДейств.Получить(ВыбКонПериода))+ИтСум.ДО(3))/Ит.ДО(3),0,1); // ЦенаПоЦенеОтгрузки = Окр((((Ит.ДО(3)-ИтОтг.ДО(3))*ЦенаДействующая)+ИтСум.ДО(3))/Ит.ДО(3),0,1); // //ЦенаПоЦенеОтгрузки = ИтСум.ДО(3)/ИтОтг.ДО(3); //Иначе // //ЦенаПоЦенеОтгрузки = ИтСум.ДО(3)/ИтОтг.ДО(3); // ЦенаПоЦенеОтгрузки = Окр(ИтСум.ДО(3)/ИтОтг.ДО(3),0,1); // Пометка = "*"; //КонецЕсли; Если ИтОтг.ДО(3) > 0 Тогда ЦенаПоЦенеОтгрузки = Окр(ИтСум.ДО(3) / ИтОтг.ДО(3),0,1); КонецЕсли; ГлСуммаДейст=ГлСуммаДейст+ЦенаДействующая*(Ит.ДО(3)-ИтДав.ДО(3)); ГлСуммаСопост=ГлСуммаСопост+ЦенаСопоставимая*Ит.ДО(3); ГлСуммаДавал=ГлСуммаДавал+ЦенаДавальческая*ИтДав.ДО(3); ГлОтгружено=ГлОтгружено+ИтОтг.ДО(3); //ГлЦенаОтгр=ГлЦенаОтгр+(((Ит.ДО(3)-ИтОтг.ДО(3))*Ит.Субконто(ВидыСубконто.Изделие).ЦенаДейств.Получить(ВыбКонПериода)+ИтСум.ДО(3))/?(ПустоеЗначение(Ит.ДО(3))=0,Ит.ДО(3),1))*Ит.ДО(3); ГлЦенаОтгр=ГлЦенаОтгр+ЦенаПоЦенеОтгрузки*Ит.ДО(3); //КонецЕсли; Таб.ПрисоединитьСекцию(Стр+"|БезДавал"); Таб.ПрисоединитьСекцию(Стр+"|ДавКол"); Таб.ПрисоединитьСекцию(Стр+"|Всего"); КонецПроцедуры Однако, если в тек. месяце отгрузки не было тогда расчет по цене отгрузки выдает значения по нулям, а нужно сделать, чтобы тогда цену он брал с док-та Цена, кот. не формирует проводок. Прописываю: // из док-та Цена берется цена отгрузки в случае, если количество отгруженной продукции = 0 ТЗ = СоздатьОбъект("ТаблицаЗначений"); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Показать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |ДатаДок = Документ.Цена.ДатаДок; |Наименование = Документ.Цена.Изделие.Наименование; |ЦенаОтгрузки = Документ.Цена.ЦенаОтгрузки; |Группировка ДатаДок; |Группировка Наименование; |Группировка ЦенаОтгрузки; |Условие(ЦенаОтгрузки > 0); |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("ДатаДок"); ТЗ.НоваяКолонка("Наименование"); ТЗ.НоваяКолонка("ЦенаОтгрузки"); Док = СоздатьОбъект("Документ.Цена"); Пока Запрос.Группировка (1) = 1 Цикл ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл ТЗ.НоваяСтрока(); ТЗ.ДатаДок = Запрос.ДатаДок; ТЗ.Наименование = Запрос.Наименование; ТЗ.ЦенаОтгрузки = Запрос.ЦенаОтгрузки; //Продукция = 0; //ЦенаОтгрузки = 0; //Пока Запрос.Группировка(2) = 1 Цикл Если (Док.Изделие = ТЗ.Наименование) и (ИтОтг.ДО(3) = 0) Тогда //Продукция = Запрос.Продукция; ЦенаОтгрузки = Запрос.ЦенаОтгрузки; ЦенаПоЦенеОтгрузки = ТЗ.ЦенаОтгрузки; ИначеЕсли ИтОтг.ДО(3) > 0 Тогда ЦенаПоЦенеОтгрузки = Окр(ИтСум.ДО(3) / ИтОтг.ДО(3),0,1); КонецЕсли; //КонецЕсли; КонецЦикла; КонецЦикла; И нихц в в отчет не попадает, что не так? |
|||
1
Mans
09.02.12
✎
10:37
|
ТЗ.ВыбратьСтроки();
строки чего? ТЗ новая |
|||
2
ololo9
09.02.12
✎
10:43
|
и при этом в тзэшку все равно попадает, все что нужно, а не выполняется походу тут
Если (Док.Изделие = ТЗ.Наименование) и (ИтОтг.ДО(3) = 0) Тогда //Продукция = Запрос.Продукция; ЦенаОтгрузки = Запрос.ЦенаОтгрузки; ЦенаПоЦенеОтгрузки = ТЗ.ЦенаОтгрузки; ИначеЕсли ИтОтг.ДО(3) > 0 Тогда ЦенаПоЦенеОтгрузки = Окр(ИтСум.ДО(3) / ИтОтг.ДО(3),0,1); КонецЕсли; |
|||
3
Mans
09.02.12
✎
11:11
|
из чего следует что попадает? тыб её визуальной на пробу сделал, на форму выложил
//ТЗ = СоздатьОбъект("ТаблицаЗначений"); |
|||
4
1Сергей
09.02.12
✎
11:14
|
+ Обходится только первая группировка запроса. Если в день несколько документов Цена, то каюк. Если в документе Цена Наименование и Цена отгрузки - реквизиты ТаблЧасти, то каюк.
|
|||
5
Он
09.02.12
✎
11:18
|
(3) Сколько комментариев! )
|
|||
6
1Сергей
09.02.12
✎
11:21
|
недоглядел:
|Наименование = Документ.Цена.Изделие.Наименование; ... |Группировка Наименование; расстрел на месте без права переписки! |
|||
7
ololo9
09.02.12
✎
11:27
|
ок ,путаница какая-то выходит, вот и интересуюсь как переделать
|
|||
8
Mans
09.02.12
✎
11:28
|
Док.Изделие = ТЗ.Наименование
тут вообще безобразие, подозреваю что Док.Изделие - справочник, да и Док = СоздатьОбъект("Документ.Цена"); нет там еще никаких изделий |
|||
9
Mans
09.02.12
✎
11:30
|
ты вот чего
Запрос.Выгрузить(ТЗНаФорме); сделай и кумекай чего получил |
|||
10
1Сергей
09.02.12
✎
11:36
|
(9) глупости. Достаточно
ТЗ.ВыбратьСтроку(); |
|||
11
ololo9
09.02.12
✎
11:51
|
вот, в тзэшку ничего не поподает.... а может это проще сделать выборкой документов?
|
|||
12
Mans
09.02.12
✎
11:54
|
давно кодить начал? дата регистрации на Мисте не показатель
|
|||
13
1Сергей
09.02.12
✎
11:55
|
(11) у бери перебор строк ТЗ
|
|||
14
ololo9
09.02.12
✎
11:58
|
с перебором или без, все равно не попадает
|
|||
15
ololo9
09.02.12
✎
12:00
|
(12) не сильно, просто с запросами по регистром как-то легче идет, а тут какой-то тупняк начался
|
|||
16
1Сергей
09.02.12
✎
12:03
|
(14) остальные группировки обходить кто будет?
|
|||
17
Mans
09.02.12
✎
12:06
|
+16 три вложеных цикла, а вот уж там ТЗ.НоваяСтрока();
|
|||
18
ЧеловекДуши
09.02.12
✎
12:08
|
Отладчик, наверное, забанили :D
|
|||
19
ololo9
09.02.12
✎
12:54
|
в кон. итоге, первая группировка не выполняется и в отчете выводятся нули по всем изделиям (
|
|||
20
Mans
09.02.12
✎
12:56
|
№9 сделал?
|
|||
21
ololo9
09.02.12
✎
12:59
|
да, изделение попадает вот только одно и не понятно по какому принципу, а вот группировка не выполняется (((
|
|||
22
Mans
09.02.12
✎
13:02
|
только в запросе поменяй
|Наименование = Документ.Цена.Изделие.Наименование; на |Изделие = Документ.Цена.Изделие; ну и группировку, а потом Пока Запрос.Группировка (1) = 1 Цикл Пока Запрос.Группировка (2) = 1 Цикл Пока Запрос.Группировка (3) = 1 Цикл |
|||
23
ololo9
09.02.12
✎
13:11
|
хорошая новость, что цена эта подставляется, но почему по остальным изделиям, где отгрузка была строки обнулились?
сдается, что я условие расчета неверное прописываю ( |
|||
24
Virtmon
09.02.12
✎
13:19
|
Перебор строк в документе нельзя делать запросом. Если там фигурирует один и тот же товар несколько раз, то он берет последнее значение. и Во втором коде по моему 2 куска. Лучше сделай выборкой.
|
|||
25
Mans
09.02.12
✎
13:29
|
ИтОтг.ДО(3) откуда БИ знает по какой аналитике обороты снимать?
этот разговор надолго, сколько в твоем городе час приходящего 1С-ника стоит? |
|||
26
ololo9
09.02.12
✎
13:51
|
это ведь прописано было
ИтОтг = СоздатьОбъект("БухгалтерскиеИтоги"); ИтОтг.ИспользоватьПланСчетов(ОсновнойПланСчетов()); ИтОтг.ИспользоватьСубконто(ВидыСубконто.Изделие,ТекИзделие, 1); ИтОтг.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода,"Отг",,, 2,, "К"); |
|||
27
ololo9
09.02.12
✎
13:53
|
(24) да, берет только последние значения
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |