|
v7: Вопрос по Таблице значений | ☑ | ||
---|---|---|---|---|
0
Verdi
02.03.13
✎
15:45
|
Добрый день!
Подскажите как выполнить отбор в общей ТЗ по условиям: А - количество дней 30 Б - количество дней 60 В - количество дней 90 В ТЗ отбираются остатки товаров, имеющиеся на складе и расчитывается сколько дней прошло от момента прихода. Нужно в таблицу вывести по условию только тот товар, который от конечно |
|||
1
Verdi
02.03.13
✎
15:46
|
(0) й даты равен или меньше условия.
Сама ТЗ: КатегорияA = 30; КатегорияB = 60; КатегорияC = 90; ТЗ.ВыбратьСтроки(); ТЗ.НоваяКолонка("Прод","Число"); ТЗ.НоваяКолонка("ЗЦена","Число"); ТЗ.Новаяколонка("Прих", "Число"); ТЗ.НоваяКолонка("ВсегоДней"); ТЗ.НоваяКолонка("Сумма","Число"); ТЗ.НоваяКолонка("РЦена","Число"); ТЗ.НоваяКолонка("РСумма","Число"); ЦенаП = СоздатьОбъект("Справочник.Цены"); Пока ТЗ.ПолучитьСтроку()=1 Цикл ТЗ.ЗЦена = ТЗ.ЗакЦена*100/120; ТЗ.Прод = ТЗ.Продали + ТЗ.Списали; Если ОпрСпис = 1 Тогда ТЗ.Прих = ТЗ.КолПрих + ТЗ.КолОприх; Иначе ТЗ.Прих = ТЗ.КолПрих; КонецЕсли; ТЗ.Сумма = ТЗ.ЗЦена * ТЗ.НаСкладе; Если ТЗ.НаСкладе = 0 Тогда ТЗ.ВсегоДней = 0; Иначе ТЗ.ВсегоДней = (ТЗ.ДатаП - КонДата)*(-1); КонецЕсли; ЦенаП.ИспользоватьВладельца(ТЗ.Номенклатура); Если ЦенаП.НайтиПоРеквизиту("ТипЦен",ЦенаПрод,0) = 1 Тогда ТЗ.РЦена = ЦенаП.Цена.Получить(КонДата); Иначе ТЗ.РЦена = 1; КонецЕсли; ТЗ.РСумма = ТЗ.РЦена * ТЗ.Прод; КонецЦикла; |
|||
2
K-5
02.03.13
✎
15:48
|
(1) а запросом можно?
|
|||
3
Mikeware
02.03.13
✎
15:54
|
отбора в ТЗ нет. Ищи перебором.
Ну, или готовь данные заранее (на этапе получения). или используй ИндексированнуюТаблицу или прямой запрос. |
|||
4
Verdi
02.03.13
✎
20:13
|
Запрос делает отбор в ТЗ, но вот отредактировать его не удаётся. В 8 как то проще.
Вот текст запроса. Как можно в запрос добавить список переменных отбора? Переменные - это Категория А В С.... Запрос = СоздатьОбъект("Запрос"); ВалютаОтчета = глДоллары; ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Номенклатура = Регистр.ПартииНаличие.Номенклатура; |Статус = Регистр.ПартииНаличие.КодОперации; |ДатаП = Регистр.ПартииНаличие.ДатаПартии; |Кол = Регистр.ПартииНаличие.Количество; |Докум = Регистр.ПартииНаличие.Партия.ПриходныйДокумент; |Функция КолПрих = Приход(Кол) когда (Статус = Перечисление.КодыОпераций.Закупка); |Функция КолОприх = Приход(Кол) когда (Статус = Перечисление.КодыОпераций.Оприходование); |Функция КолВоз = Приход(Кол) когда (Статус = Перечисление.КодыОпераций.ВозвратОтПокупателя); |Функция НаСкладе = КонОст(Кол); |Функция Продали = Расход(Кол) когда (Статус = Перечисление.КодыОпераций.Продажа); |Функция Списали = Расход(Кол) когда (Статус = Перечисление.КодыОпераций.Списание); |Группировка Номенклатура; |Группировка Докум;"; Если ПустоеЗначение(Ном) = 0 Тогда ТекстЗапроса = ТекстЗапроса + РазделительСтрок + "Условие (Номенклатура в Ном);"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + РазделительСтрок + "ЗакЦена = Регистр.ПартииНаличие.Партия.ЗакупочнаяЦена;"; Запрос.Выполнить(ТекстЗапроса); Запрос.Выгрузить(ТЗ,1,0); |
|||
5
Тьма
02.03.13
✎
20:17
|
ДатаА=КонДата-30;
............ |ДокумДатаДок = Регистр.ПартииНаличие.Партия.ПриходныйДокумент.ДатаДок; .............. |Функция НаСкладеА = КонОст(Кол) когда (ДатаДок<ДатаА) ///////////////// как-то так |
|||
6
Chai Nic
02.03.13
✎
20:42
|
Однако, СоздатьОбъект("Запрос")...
БРОСЬ БЯКУ! |
|||
7
Эльниньо
02.03.13
✎
21:21
|
(5) Из ТЗ по условию вытянуть. В ТЗ должно быть всё.
(4) Я правильно понял? |
|||
8
VladZ
02.03.13
✎
21:50
|
В запросе можно свою функцию использовать... Попробуй туда копнуть.
|
|||
9
VladZ
02.03.13
✎
21:54
|
||||
10
Verdi
02.03.13
✎
21:54
|
(8) Сейчас правлю запрос. в (5) не получилось
|
|||
11
КонецЦикла
02.03.13
✎
22:11
|
Скорее всего лучше вывести ту дату в ТЗ, а потом сделать сортировку ТЗ и отсечь блоком ненужное
Внешние функции - жесть по скорости |
|||
12
Verdi
02.03.13
✎
22:26
|
(11) а пример текста можешь привести?
|
|||
13
КонецЦикла
02.03.13
✎
22:32
|
Ровно 30, 60 и 90 дней?
Нужно получить в ТЗ колонку с этим значением из запроса (или с каким-то другим, но чтобы не лазить далеко) Потом сделать ТЗ.Сортировать("КолвоДней"); Потом (например нужно 60 дней) Стр = 0; ТЗ.НайтиЗначение(60, Стр, "КолвоДней"); Если Стр = 0 Тогда //ничего не делаем Иначе ТЗ.Выгрузить(ВремТЗ, Стр, ТЗ.КоличествоСтрок()); КонецЕсли; Во ВремТЗ имеем 60 дней Осталось найти 90 дней и откусить Что-то типа такого |
|||
14
КонецЦикла
02.03.13
✎
22:37
|
***
Если Стр = 0 Тогда //данных для вывода в отчет нет, так и сообщаем Иначе |
|||
15
Verdi
02.03.13
✎
22:52
|
(14) Я вставил реквизит на форму: Категория.
Теперь нужно в модуле прописать список значений (как не знаю): КатегорияА, КатегорияБ, КатегорияС. Затем я делаю расчет: ДатаА = ДатаКон-90, ДатаБ = ДатаКон - 180, ДатаС = ДатаКон - 360. Можно расчёт сразу привязать к списку реквизитов? |
|||
16
Verdi
02.03.13
✎
22:54
|
(13) В колонку КолвоДней попадает много цифр, но нужно отобрать именно те, которые удовлетворяют условиям ДатаА, ДатаБ....
|
|||
17
КонецЦикла
02.03.13
✎
23:00
|
(15) Переменную заведи, которая будет смотреть текущее значение категории
(16) Если значения разные и не хочешь заморачиваться с внешними компонентами - перебери ТЗ да и все (можно ставить пометку удаления в служебную колонку, потом блоком удалить) |
|||
18
КонецЦикла
02.03.13
✎
23:01
|
Попробуй внешнюю функцию, может будет приемлемо :)
А то как-то не очень получается |
|||
19
Verdi
02.03.13
✎
23:22
|
(18) В принципе всё получилось. Но только возврат не хочет записываться в приход, хотя движения на склад делает. Может КодОперации не тот?
ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с НачДата по КонДата; |Номенклатура = Регистр.ПартииНаличие.Номенклатура; |Статус = Регистр.ПартииНаличие.КодОперации; |ДатаП = Регистр.ПартииНаличие.ДатаПартии; |Кол = Регистр.ПартииНаличие.Количество; |Докум = Регистр.ПартииНаличие.Партия.ПриходныйДокумент; |Склад = Регистр.ПартииНаличие.МОЛ; |Функция КолПрих = Приход(Кол) когда (Статус = Перечисление.КодыОпераций.Закупка); |Функция КолОприх = Приход(Кол) когда (Статус = Перечисление.КодыОпераций.Оприходование); |Функция КолВоз = Приход(Кол) когда (Статус = Перечисление.КодыОпераций.ВозвратОтПокупателя); |Функция НаСкладе = КонОст(Кол) когда (ДатаП>=ДатаА); //|Функция Продали = Расход(Кол) когда (Статус = Перечисление.КодыОпераций.Продажа); //|Функция Списали = Расход(Кол) когда (Статус = Перечисление.КодыОпераций.Списание); |Группировка Номенклатура Без Групп;"; |
|||
20
Тьма
03.03.13
✎
00:13
|
(19)Может возврат проходит по расходу красным?
|
|||
21
КонецЦикла
03.03.13
✎
02:10
|
(19) Ну так нормально
Раньше запрос не смотрел, не нужны тут функции Возврат в ТиС проходит как приход, но код операции же другой, посмотри Можно писать Когда (Статус в СписокКодов) |
|||
22
КонецЦикла
03.03.13
✎
02:11
|
СписокКодов - список значений заранее заполненный нужными кодами операций
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |