|
v7: ЗапросБИ.ИспользоватьСубконто() | ☑ | ||
---|---|---|---|---|
0
Damash
07.04.12
✎
21:38
|
Есть такой код:
ЗапросБИ=СоздатьОбъект("БухгалтерскиеИтоги"); ЗапросБИ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,СписокТоваров,2,0); ЗапросБИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,СписокСкладов,2,0); Если ЗапросБИ.ВыполнитьЗапрос(,,"41.1",,,1,,4)=0 Тогда Сообщить("Запрос сработал некоректно!"); Возврат; Иначе ЗапросБИ.ВыбратьСубконто(1,1); Пока ЗапросБИ.ПолучитьСубконто(1)=1 Цикл Товар=ЗапросБИ.Субконто(1); // алгоритм заполнения шахматки КонецЦикла; КонецЕсли; где СписокТоваров и СписокСкладов - СЗ. так вот до Запроса: СписокТоваров.РазмерСписка()=15432 а в переборе ЗапросБИ.ВыбратьСубконто(1,1) и т.д. проходит цикл только 11 342. Т.е. ЗапросБИ отметает тот товар, по которому не было никаких движений еще. Вопрос: можно ли как-то включить в ЗапросБИ все таки новый товар, который только ввелся в базу без движений? |
|||
1
Slaventiya
07.04.12
✎
22:15
|
Сомневаюсь я в возможности
|
|||
2
Slaventiya
07.04.12
✎
22:15
|
Да и собственно зачем ?
|
|||
3
Classic
07.04.12
✎
22:22
|
(2)
Наверное чтоб в шахматку попадали все номенклатуры :) |
|||
4
Classic
07.04.12
✎
22:24
|
(0)
Перебирай справочник и уже там ЗапросБИ.ПолучитьСубконто(1,,СпрНоменклатура.ТекущийЭлемент()) |
|||
5
Damash
07.04.12
✎
22:26
|
это в продолжение темы:
Остатки по складам идет выгрузка всей номенклатуры, кроме архивного каталога. (3) да, верно |
|||
6
Slaventiya
07.04.12
✎
22:27
|
(4) И ? Все равно не найдет, в итогах, просто вывести в произвольный отчет как текущий элемент... да
|
|||
7
Classic
07.04.12
✎
22:29
|
(6)
Конечно не найдет, номенклатуры то нет. Иногда надо выводить и пустые поля. Например для инвентаризации |
|||
8
Slaventiya
07.04.12
✎
22:33
|
(7) Почему нет, в справочнике есть, но счет не двигала, Инвентаризировать по 0 количеству ? Или имеется в виду как таковой перечень номенклатуры ?
|
|||
9
Classic
07.04.12
✎
22:36
|
(0)
Ну конечно. Я не уверен, что ТСу нужна инвентаризация, но в инвентаризации все именно так. Распечатываешь остатки по номенклатуре, отдаешь проверяющим и они идут и заполняют фактические остатки :) Естественно нужна и номенклатура с нулевым остатком - а вдруг на складе излишки. А так как номенклатура должна быть определенным образом отсортирована, то вариант "вывести ненулевые, а потом те, которых нет" - не катит |
|||
10
Classic
07.04.12
✎
22:36
|
(9)-(8)
|
|||
11
Slaventiya
07.04.12
✎
22:40
|
(9) Согласен, но по коду в теме не попадет, от конкретики зависит
|
|||
12
Damash
07.04.12
✎
22:42
|
здесь завязана выгрузка на сайт, добавление нового товара на сайт из 1С, и выгрузка соответственно стоков по розничным точкам.
Вот и получается, что есть инвойс, но сам товар придет только через месяц. В 1С его вбить нужно, затем выгрузить на сайт пусть даже и с нулевыми остатками по всем точкам. |
|||
13
Damash
07.04.12
✎
22:43
|
Вывод я так понял: через БухИтоги.Запрос - я никак не подхвачу данный товар, да?
|
|||
14
Classic
07.04.12
✎
22:45
|
(13)
Чем тебе не нравится вариант обходить список и позиционировать запрос на каждую номенклатуру? |
|||
15
Slaventiya
07.04.12
✎
22:46
|
(13) Как ? Позиция счет не двигала, бух. запросом нет, а вот если сначала перебирать элементы номенклатуры и их уже подставлять в запрос как ТекущийЭлемент() то да.
(14) Вот с языка сорвал, но так медленнее.... но се ля ви |
|||
16
Damash
07.04.12
✎
22:49
|
(14)(15) база SQL - перебор надолго затягивает даже на 15 000 позиций, хотел полностью через запросы организовать
|
|||
17
Classic
07.04.12
✎
22:49
|
В принципе если это и вся задача, то можно обойти бухзапросом те, что есть, попутно удаляя из списка элементы. И потом выгрузить оставшийся список
|
|||
18
Classic
07.04.12
✎
22:51
|
(16)
Так ты по сформированному списку беги. Правда по запросу бегать для каждой номенклатуры будешь долго |
|||
19
Damash
07.04.12
✎
22:53
|
(18) все понятно. Ок.
по справочнику или по списку - тут повремени можно глянуть так и так и уже потом оставить наименьшее |
|||
20
Classic
07.04.12
✎
22:54
|
(19)
Я надеюсь ты правильно понял. Сначала выполнить запрос, а потом бегать по списку, а не бегать по списку и для каждой номенклатуры выполнять запрос ? ;) |
|||
21
Damash
07.04.12
✎
22:58
|
"Сначала выполнить запрос"
так после этого запроса на выходе я уже не получаю номенклатуру, по которой не было движения... |
|||
22
Slaventiya
07.04.12
✎
23:03
|
А просто запрос ? И из него элемент номенклатуры в бух. запрос... ?
|
|||
23
Damash
07.04.12
✎
23:05
|
(22) тоже как вариант
|
|||
24
Classic
07.04.12
✎
23:12
|
(21)
Значит не понял. Ты обегаешь список. И для каждого элемента списка делаешь Если БИЗапрос.ПолучитьСубконто(1,,ТвояНоменклатураИзСписка) = 1 Тогда // побежали-побежали по второму субконто Иначе // выводим номенклатуру с пустыми значениями полей КонецЕсли; Извини полный код писать лень |
|||
25
Slaventiya
07.04.12
✎
23:18
|
(24) Думаю, самый лучший вариант, хотя список номенклатуры тоже заполняет предварительно, но вариант быстрее всех, врятли из него что выжать по скорости больше получится
|
|||
26
NS
07.04.12
✎
23:18
|
(24) Это очень медленно
намного проще обойти результат бух запроса, в ТЗ, и потом добавить в него справочник. |
|||
27
Damash
07.04.12
✎
23:22
|
(26) можно чуть подробней...
бухзапрос делаю такой? ЗапросБИ=СоздатьОбъект("БухгалтерскиеИтоги"); ЗапросБИ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,,1,0); ЗапросБИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,СписокСкладов,2,0); Если ЗапросБИ.ВыполнитьЗапрос(,,"41.1",,,1,,4)=0 Тогда ... |
|||
28
Classic
07.04.12
✎
23:23
|
(26)
Я это предлагал в (17) :) Только без ТЗ. К большим ТЗ в 7.7 я отношусь как-то настороженно |
|||
29
Classic
07.04.12
✎
23:27
|
(27)
такой же как в (0) У тебя же есть уже список номенклатур, или нет? |
|||
30
Slaventiya
07.04.12
✎
23:27
|
Может стоит просто померить производительность в разных методах и выбрать?
|
|||
31
NS
07.04.12
✎
23:29
|
(28) У него миллион номенклатуры?
|
|||
32
Slaventiya
07.04.12
✎
23:29
|
С выгрузкой в ТЗ результат вариант оч. неплох, но померить стоит
|
|||
33
NS
07.04.12
✎
23:30
|
(30) Нет смысла мерить, и так всё понятно.
|
|||
34
Damash
07.04.12
✎
23:30
|
(29) да, есть!
Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Обрабатывать НеПомеченныеНаУдаление; |Товар = Справочник.Номенклатура.ТекущийЭлемент; |Группировка Товар без Групп; |Условие(НЕ(Товар В глАрхивныйКаталог)); |"; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Предупреждение("Запрос не состоялся"); Возврат; КонецЕсли; таблСписокТоваров=СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(таблСписокТоваров,,0); СписокТоваров=СоздатьОбъект("СписокЗначений"); таблСписокТоваров.Выгрузить(СписокТоваров); |
|||
35
viktor_vv
07.04.12
✎
23:50
|
(34) Тем более ТЗ с номенклатурой у тебя уже есть. Добавляешь в таблСписокТоваров необходимые тебе колонки. И при обходе результатов запоса Ищешь в табл номенклатуру и пишешь в ТЗ что тебе надо. Можешь туда сразу и колонки для складов добавить. На выходе полуишь готовую ТЗ с простым выводом в таблцу.
|
|||
36
Torquader
07.04.12
✎
23:55
|
(35) Я бы ещё посоветовал выбрать не только остатки, но и движения по товарам за определённый период (с прошлой инвентаризации, например), тогда будут получены только те товары, которые или есть на складе или были когда-то (и могут случайно остаться).
Другое дело, что в реальности на складе может быть найден товар, которого вообще не закупали, так как у поставщика тоже бывает пересортица. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |