Имя: Пароль:
   
1C
1C 7.7
v7: Проверьте мою логику
0 Fragster
 
31.10.16
23:35
Необходимо получить "мусорную" номенклатуру

решил действовать так: получить максимальный rowid из всего, что имело движения до 01.01.2016, получить всю номенклатуру, которая не имела товародвижений и rowid меньше, чем этот rowid.

правильная ли логика?
правильный ли запрос для 1с++ по этой логике (какую-то номенклатуру выдает)?
Select -- top 100
*
FROM
$Справочник.Номенклатура AS Спр
WHERE
Спр.IsFolder = 2
and Спр.IsMark = 0
and NOT EXISTS (
Select
1
From $Регистр.ОстаткиТМЦ AS Ост
WHERE $Ост.Номенклатура = Спр.id)
AND Спр.Row_Id < (select Max(Спр.Row_Id) From (
Select
$Ост.Номенклатура as Номенклатура,
Min(_1sJourn.Date_Time_IdDoc) as Date_Time_IdDoc
From $Регистр.ОстаткиТМЦ AS Ост
Inner join _1sJourn on Ост.IdDoc = _1sJourn.IdDoc
Group By $Ост.Номенклатура
having Min(_1sJourn.Date_Time_IdDoc) < '20160101') as SubQuery
inner join $Справочник.Номенклатура as Спр
On SubQuery.Номенклатура = Спр.Id)
1 mikecool
 
31.10.16
23:43
запрос вроде верный, давно не брал я в руки шашек 1с++ ))
если в роуид есть дата и однозначно сортируется по роуид в порядке роста дат - то вполне себе работоспособно
2 Fragster
 
31.10.16
23:47
(1) ну тут http://www.script-coding.com/v77tables.html#2.3. пишут, что rowid - порядковый номер в таблице. В скуле у колонки свойство identity = true и identity increment = 1. вроде должно быть возрастающей последовательностью...
3 FN
 
01.11.16
01:48
1с не апдейтит таблицы, а только делете / инсерт.
Соответственно ровайди никак не связан с моментом создания элемента.
4 Злопчинский
 
01.11.16
01:57
нифига не понял логики, ибо явно не обозначено что такое "мусорная" номенклатура.

У меня логика на мусорную номенклатуру простая:
http://catalog.mista.ru/public/20766/

1C v.7.7 Готовое решение. Не требует настройки. Не требует допрограммирования. Обработка предназначена для автоматической "подчистки" базы типовой ТиС от "неиспользуемых" элементов номенклатуры.

Неиспользуемыми элементами считаются те номенклатурные позиции, которые удовлетворяют 2-ум условиям:
- номенклатура, которая на данный момент отсутствует на остатках;
- и не было приходов номенклатуры за указанное количество дней;

Например, при указанной настройке = 90 дней и текущей дате = 29.06.2009, в "мусор" будут перемещены те позиции, последний приход которых был до 31.03.09.

"Подчистка" заключается в следующем:
- обнаруженные неиспользуемые элементы переносятся в группу, указанную оператором;
- модифицируется наименование элемента путем добавления текстового "маркера" ;
- полное наименование (обычно помещаемое в печатные формы) - не изменяется;
- в комментарий записывается полный путь - место (группа со всей вышестоящей иерерхией вхождения), где элемент находился до того, как его переместили в "мусор".

Наличие всех "неиспользуемых" элементов в одной группе впоследствии дает определенные удобства при их обработке программно или с использованием других (универсальных) обработок.

Разработка - из разряда мелких полезняшек. Пригодится на этапе "наведения порядка" в залохмаченных базах.
5 Fragster
 
01.11.16
08:43
(4) мусорная номенклатура - которая была создана ранее этого года и по которой не было движений (вообще)
6 FIXXXL
 
01.11.16
08:52
(0) а Код справочника у тебя как формируется? мож с него порядок взять?
7 1dvd
 
01.11.16
08:54
(5) а если она была создана ранее, но активно используется в этом году, то она тоже мусорная?
8 Aleksey
 
01.11.16
08:57
(7) Не выполняется условие  "не было движений (вообще)"

А вот недеквид, т.е. который купили давно и лежит на складе, вполне у Fragster попадает под определение мусорная
9 Aleksey
 
01.11.16
08:59
Т.е. он пропустил условие
- номенклатура, которая на данный момент отсутствует на остатках;
оставив только второе условие
- и не было приходов номенклатуры за указанное количество дней;
10 Fragster
 
01.11.16
09:03
(8) не попадает, так как если купили - то движения были. если купили и продали - также движения были.
а вот если создали ранее этого года, а движений не было - мусор. например при бездумной загрузке прайсов или после свертки базы
11 Aleksey
 
01.11.16
09:14
(10) Это называется не мусор, а неиспользуемые элементы. Это немного другое
12 Aleksey
 
01.11.16
09:16
А мы говорим о позициях которые вышли из продаж (производитель больше не производит, мы больше не закупаем и т.п.)
Т.е. к примеру год назад мы продавали карандаши, потом отказались от этого направления, решили вернуться к продажам мебели. С точки зрения пользователя карандаши в подборе - это мусор, так как снабженцы все равно не будут возить их
13 Aleksey
 
01.11.16
09:20
Так же "мусор" это и сезонные товара, ибо никто не будет летом заказывать незамерзающую жидкость
14 Fragster
 
01.11.16
09:42
(12) я как-бы хз, о чем там ВЫ говорите, а я говорю о конкретных вещах.
15 Fragster
 
01.11.16
09:48
см. (5)
16 Ёпрст
 
01.11.16
09:49
(0) и нафига знать rowid ? Шр за бред (не Пит)
17 Ёпрст
 
01.11.16
09:52
Если нужно выяснить, какой номенклатуры небыло в движениях, то накой там rowid вообще впёрся ?
Там сплошной примитив на табличку ra и привет
18 пипец
 
01.11.16
09:53
ровайди ваще к 1С отношения не имеет - это скулевое поле - чисто счетчик
19 Ёпрст
 
01.11.16
09:55
всего то надо

select id [Номенклатура $Справочник.Номенклатура]
from $Справочник.Номенклатура
where id not in (select $Рег.Номенклатура from  $Регистр.ОстаткиТМЦ Рег)
20 Ёпрст
 
01.11.16
09:55
и пофик, когда она там была создана, нет движений - в мусор.
21 Ёпрст
 
01.11.16
09:56
тем более, что дату создания ты только в лучшем случае, определишь по ЖР и то, если её программно создавали, то записей не будет там.
22 Fragster
 
01.11.16
10:53
(17) номенклатуры, которой не было в движениях, и которая создана в прошлом году
23 Fragster
 
01.11.16
10:54
(20) вот такая задача. производственный цикл длинный, оно в прайсах уже появляется, а движений - нет
24 Ёпрст
 
01.11.16
11:00
(23) дату создания номенклатуры ты никак не определишь. Только из ЖР или, спецом писать куда-либо.
25 Ёпрст
 
01.11.16
11:00
так что, (19) в силе.
26 Fragster
 
01.11.16
11:08
(24) rowid возрастающий и автогенерящийся?
27 Ёпрст
 
01.11.16
11:12
(26) в дбф его вообще нет :)
28 Ёпрст
 
01.11.16
11:13
а так да, обычный инкремент.. тупо номер записи.
29 Fragster
 
01.11.16
11:19
(28) тогда если мы на складе не работаем задним числом, то та номенклатура, которая была впервые двинута по складу до 01.01.2016 была создана до 01.01.2016?

если мы берем максимальный rowid у такой номенклатуры - то мы максимально приближаемся к rowid номенклатуры, последней созданной до 01.01.2016?
30 Aleksey
 
01.11.16
11:42
(29) см (5)

Ты сам себе противоречишь, то небыло движений ввобще, то были, но более года назад, но при этом ты не учитываешь остатки
31 Aleksey
 
01.11.16
11:44
или ты тупо ищешь максимальный rowid за тот период?
32 Ёпрст
 
01.11.16
11:47
Че ты привязался к этому rowid ? он тебе не гарантирует ничегооо.
Если уж так чешется, то возьми класс.поставщикДанныхЖурналРегистрации и ищи там дату создания твоей номенклатуры. Тоже быстро найдёт. Тем более, для разовой операции
33 Злопчинский
 
01.11.16
12:32
эээ! вот нет в клюшках менеджера справочника... был бы - при создании - хреняк в служебное поле дату создания и все...
на скуле оно понятно - такое на всяких триггерах впилить можно...
34 Fragster
 
01.11.16
12:39
(32) там куча номенклатуры программно создано
35 Fragster
 
01.11.16
12:39
(30) это ты плохо читаешь. движения для того, чтобы косвенно определить дату создания.
36 Злопчинский
 
01.11.16
12:49
(35) не, это плохая задумка.
37 Fragster
 
01.11.16
12:50
(36) ну а как тогда?
38 Ёпрст
 
01.11.16
12:51
(35) че ты паришься, то что не использут, создадут по-новой. Делов то. Выпиливай.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.