Имя: Пароль:
1C
1С v8
Как решить простую задачу
🠗 (Волшебник 23.07.2015 20:56)
0 ComradeKite
 
23.07.15
18:58
Всем привет, может кто знает простое решение как изменять комплекты в периоде.


Понятное дело что тут желательно использовать механизмы платформы.

Что делать если:
01.01.2015
1 НаборУтренний - Булочка
2 НаборУтренний - Чай
3 НаборУтренний - Сникерс

03.01.2015
1 НаборУтренний - Булочка
2 НаборУтренний - Чай

Срез последних вернет мне Сникерс с предыдущего набора, хотя набор у меня уже из двух номенклатур состоит.

Спасибо!
1 Desna
 
23.07.15
19:00
Сникерс не съели поэтому и вернет
2 Ненавижу 1С
 
гуру
23.07.15
19:00
Это по сути 2 разных набора
3 Рэйв
 
23.07.15
19:02
(0)Набор - измерение, все остальное ресурсы.
Так устроит?:-)
4 lEvGl
 
гуру
23.07.15
19:06
что значит "набор"? срезпоследних вернет Все последнее, если надо только то что было после 03.01.2015 тогда простое решение - условие на период наложить Где Период >= 03.01.2015
5 Рэйв
 
23.07.15
19:09
(4)Твое безумие в данный момент неизлечимо.
6 Рэйв
 
23.07.15
19:10
может быть завтра с твоего похмелья будет возможность говорить об излечении
7 kosts
 
23.07.15
19:20
(0) Регистр сведений, с двумя измерениями: Набор и НПП, в ресурсе товар.
8 DmitrO
 
23.07.15
19:20
Документ Набор с реквизитом ВидНабора и табличной частью Состав с реквизитом Номенклатура.
9 ComradeKite
 
23.07.15
19:34
kosts а что такое НПП?
10 kosts
 
23.07.15
19:36
номер по порядку
11 ComradeKite
 
23.07.15
19:38
Рэйв, набор в измерении конечно не устроит.
Измерения это ключ, то есть к примеру в течении дня набор может меняться один раз. Поставив периодичность день я смогу ввести только один раз набор в измерение.
А набор состоит из многих продуктов.
12 lEvGl
 
гуру
23.07.15
19:39
про запрос подумал
13 ComradeKite
 
23.07.15
19:41
to 10 не поможет

01,01,2015
Н1 1 Сникерс
Н1 2 Марс
Н1 3 Твикс

03,01,2015

Н1 1 Марс
Н1 2 Сникерс

Срез последних вернет кашу)))
14 zhig75
 
23.07.15
19:44
А сам набор то это что? Документ, справочник?
15 ComradeKite
 
23.07.15
19:45
to 12 Запросом тоже можно, только как в целом расположить регистры и запрос.

Идея простая в целом простая.

Есть комплекты, состоящие из номенклатур.
Комплект может меняться не чаще один раз в день.

Сегодня комплект состоит из пяти товаров.
Завтра из трех.

Как при списаниии распознать сколько сейчас реально в комплекте товаров?
16 ComradeKite
 
23.07.15
19:47
to 14
Набор это элемент справочника Номенклатура с реквизитом ВидНоменклатуры, значение Набор.

Логически это набор продуктов
То есть набор "Завтра утренний", состоит из Чая, Сникерса и Булочки.
17 GreyK
 
23.07.15
19:47
(15) По количеству в наборе вестимо.
18 ComradeKite
 
23.07.15
19:50
to 15 Да что по количество понятно, я сделаю реквизит количество и буду списывать по нему.

Как вот обработать сегодня Набор состоял из 6 наименований, а через три дня из 3 продуктов. Или так же из 6, но уже сникер поменяли на марс.
19 ComradeKite
 
23.07.15
19:51
Я бы начал рыть в сторону с двумя регистрами, делать сложную какую то проверку, но велосипед изобретать неохота.
Сто пудов такое раньше решали не раз.
20 zhig75
 
23.07.15
19:56
А В самом регистре то какие измерения и ресурсы?
21 GreyK
 
23.07.15
19:59
(18) Моя твоя не понимай? Результат запроса вчерашний день:
Чая 40 100гр - 5 шт
Пирожок засохший - 1 шт
Сникерс - 0 шт
Результат запроса сегодняшний день:
Чая 40 100гр - 0 шт
Пирожок засохший - 0 шт
Сникерс - 1 шт
Кефир - 1 шт
22 ComradeKite
 
23.07.15
20:02
to 21 Вариант имеет место быть, но явно не оптимальный и не на механизмах платформы реализован.
Надо анализировать предыдущий день, смотреть что там за список товаров, сравнивать их количество. А мне бы так срез последних дать команду и получить последний набор с учетом списка номенклатуры и количества.
23 ComradeKite
 
23.07.15
20:06
to 20
Состав регистра самый простой хотел применить

Регистр: НаборыПродуктов
Измерения Номенклатура
Ресурсы Набор, КоличествоВНаборе

Структура подходит если в наборе количество продуктов не меняется. И задав срез последних получаешь последние записи из набора.
Но не работает если было три продукта в наборе и стало после изменения 2.
Этот один тянется и предвоследнего в последний по срезу последних.
24 GreyK
 
23.07.15
20:07
(22) Ты случайно "Чая 40" не перепил, зачем анализировать предыдущий день? Это стандартный вариант формирования комплектов.
25 ComradeKite
 
23.07.15
20:14
to 24
Мне надо последний актуальный набор вытащить из регистра сведений.
Как понять какой у тебя последний?
Или какая структура регистра сведений должна быть в твоем случае?
26 GreyK
 
23.07.15
20:20
(25) Позиции с нулевым количеством убери из запроса.
27 wertyu
 
23.07.15
20:22
(25) тебе надо регистр остатков и оборотов
28 ComradeKite
 
23.07.15
20:40
to 27 можно что либо думать в этом направлении, но хотелось бы попроще))
29 Garykom
 
гуру
23.07.15
20:46
для (0) простейший вариант это вынести "комплекты" из периода

сделать отдельную сущность состав комплекта, которая(ые) будет уникальной (не меняются только заводятся новые)
и менять только ссылку на нее на даты
30 Garykom
 
гуру
23.07.15
20:48
01.01.15
набор утренний - состав комплекта 1 (булочка, чай, сникерс)

03.01.15
набор утренний - состав комплекта 2 (булочка, чай)
31 wertyu
 
23.07.15
20:48
(28) я серьёзно, у тебя типичные остатки
32 Garykom
 
гуру
23.07.15
20:49
(31) да можно и через остатки, но это слегка изврат
особенно если комплекты часто меняются то сдохнешь все 0 убирать ))
33 Nite
 
23.07.15
20:51
Хватит уж над человеком издеваться.

Например.
Временная таблица с Максимум(Дата) КАК МаксВыборка и соединение с основной либо такой же вложенный запрос.
34 ComradeKite
 
23.07.15
20:51
to 31 меня остатки не интересуют вообще.

У меня есть сегодня Множество А(а,б,с)
Завтра Множество А изменилось и стало А(а,с)

Если делать это на регистрах сведений то я хочу чтобы срез последних вернул мне А(а,с).
Но срез последних мне возвращает А(а,б,с)
35 Nite
 
23.07.15
20:52
(34) См. 33
36 wertyu
 
23.07.15
20:53
(35) а в любой момент времени?
37 wertyu
 
23.07.15
20:54
(34) у тебя на складе1 была номенклатура 1 ...
38 ComradeKite
 
23.07.15
20:54
to 33 Я думал так сделать, но если таких наборов куча то где она там максимум где минимум))) Один набор месяц назад менялся и был из 10 комплектующих, а сейчас он из 5, тоже не айс метод.
39 Garykom
 
гуру
23.07.15
20:55
(34) лучше см. (29)(30)

срез последних вернет тебе например СоставКомпдекта2, далее смотришь к примеру его ТЧ "Товары" и там твои чай с булочкой только
40 wertyu
 
23.07.15
20:56
(39) да хорош уже, это остатки
41 Garykom
 
гуру
23.07.15
20:56
(40) угу с "булевым количеством"... ;)
42 Garykom
 
гуру
23.07.15
20:57
(41)+ можно просто в регистр сведений еще ресурс/измерение засунуть булево "юзается"
43 wertyu
 
23.07.15
20:58
(42) да какой регистр сведений, регистр сведений - это меняющийся признак, а не число
44 Nite
 
23.07.15
20:59
(36) В любой. Ничто не мешает наложить ограничение на связь по периоду действия. Если ввести доп.реквизиты, то будет еще проще.
45 wertyu
 
23.07.15
21:00
(44) ага, остаток на начало, приход, расход, конечный остаток
46 ComradeKite
 
23.07.15
21:01
to 39, 38 у меня не ТЧ не Складов нет)))

Еще одна версия объяснения)))

У меня есть справочник Номенклатура
В этом справочнике хранятся Продукты, Наборы. Делятся реквизитом ВидНоменклатуры.
Наборы могут состоять из Продуктов.
Набор может меняться не чаще чем один раз в день.

При продаже набора НаборУтренний я должен списать какие то продукты.
Как определить какие продукты входят в набор?
Делаю регистр сведений, потом беру по срезу последних актуальный набор и буду списывать номенклатуру входящую в набор. Вот тут и косяк, что срез последних берет мне не правильную составляющую набора.
47 wertyu
 
23.07.15
21:02
(46) я тебе написал как правильно, делай как нравится
48 Nite
 
23.07.15
21:02
(45) Нет. Период действия регистратора. ДействуетС и До.
49 wertyu
 
23.07.15
21:04
(48) "Период действия регистратора" это в 8.3.10?
50 ComradeKite
 
23.07.15
21:06
to 47
Я не понял зачем мне регистр накопления?
У меня на остатках лежат продукты, наборов там нет.
В расходной я продаю набор, как теперь переконвертировать НаборУтренний в Марс, Чай, Булочка?
51 Nite
 
23.07.15
21:07
(49) Нет. Это на любой платформе 8-ки. Добавляем к периодическому регистру сведений нужные поля и потом по ним запросом фильтруем какой регистратор с каким набором, в случае автора, нужно взять на конкретный момент времени.
52 ComradeKite
 
23.07.15
21:07
to 48
Не получится так.
От куда я знаю когда менялся состав набора последний раз?
Я хочу взять просто последний актуальный набор.
53 wertyu
 
23.07.15
21:08
(50) я не заставляю тебя нарушать религиозные основания твоего учёта, если твой брахма запрешает, то конечно нельзя, кто я такой, чтобы запрещать?
54 Nite
 
23.07.15
21:09
(52) Ты и возьмешь последний актуальный набор! Попробуй уже!
55 wertyu
 
23.07.15
21:09
(51) ах ты хитрый, ты забыл про регистр накопления, который соберёт эти справочники (РАУЗ)
56 Nite
 
23.07.15
21:13
(55) Не нужен он в (0)
57 wertyu
 
23.07.15
21:15
(56) да только регистр накопления в (0) и нужен )
58 ComradeKite
 
23.07.15
21:15
to 54
что имеется ввиду под периодом?
У меня есть дата сейчас(Время в которое я проверяю актуальность) у меня нет периода.
59 wertyu
 
23.07.15
21:15
(56) у него обычные остатки
60 kosts
 
23.07.15
21:17
Подходящий запрос, для варианта (7).
(Как пример, можно немного и по другому делать)

ВЫБРАТЬ
    НаборыСрезПоследних.Период,
    НаборыСрезПоследних.Набор,
    НаборыСрезПоследних.НПП,
    НаборыСрезПоследних.Товар
ИЗ
    РегистрСведений.Наборы.СрезПоследних(&Период, Набор = &Набор) КАК НаборыСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            МАКСИМУМ(НаборыСрезПоследних.Период) КАК Период,
            НаборыСрезПоследних.Набор КАК Набор
        ИЗ
            РегистрСведений.Наборы.СрезПоследних(&Период, Набор = &Набор) КАК НаборыСрезПоследних
        СГРУППИРОВАТЬ ПО
            НаборыСрезПоследних.Набор) КАК ВложенныйЗапрос
        ПО НаборыСрезПоследних.Набор = ВложенныйЗапрос.Набор
            И НаборыСрезПоследних.Период = ВложенныйЗапрос.Период
61 Garykom
 
гуру
23.07.15
21:17
(46) а может не издеваться?
и не изменять номенклатуру а просто заводить новую?

ЗЫ все проблемы снимаются и ничего делать не нуна
62 Nite
 
23.07.15
21:19
(58) В регистр добавь два поля, например, ДействуетС и ДействуетПо. Потом запрос, примерно как в (60)
63 wertyu
 
23.07.15
21:20
(62) а ты прав, это же регистр расчёта )
64 ComradeKite
 
23.07.15
21:29
to 61 я набор меняю, номенклатуру я не трогаю.

to kosta Решение рабочее, но не самое простое. Надо потестировать его, что бы вариант железный был.
65 wertyu
 
23.07.15
21:31
(64) делай регистр расчёта
66 ComradeKite
 
23.07.15
21:32
to 60 За вариант с НПП спасибо, возьму обязательно на вооружение, раньше я такого не делал, но во многих случаях может пригодиться))


to 64 С регистрами расчета у меня никогда проблем не было)))
Там алгоритм один всегда почти и нового придумать тяжело))
67 wertyu
 
23.07.15
21:32
Измерения: Номенклатура
Ресурсы: Количество
68 ComradeKite
 
23.07.15
21:38
to kosta вроде все ок с решением, остановлюсь на варианте с НПП и запросе что предложил kosta.

Всем спасибо
69 wertyu
 
23.07.15
21:49
(68) забавно, там чистый регистр расчёта, но решать конечно тебе
70 Ildarovich
 
24.07.15
01:45
Кажется, что в варианте запроса (60) номер по порядку (НПП) - вообще лишний. По сути запрос (60) - это специфическая реализация среза последних, требующая одномоментности задания состава набора. Условие

И НаборыСрезПоследних.Период = ВложенныйЗапрос.Период

эту одномоментность и проверяет.
Так что в этом случае набор может быть максимально компактно задан периодическим РС с измерениями набор и номенклатура и ресурсом количество.

Но если вернуться к сути проблемы - желанию использовать стандартный срез последних, то ее тоже просто решить. Достаточно к срезу последних добавить условие Количество > 0, а при записи нового набора перекрывать нулем номенклатуру, выводимую из состава ПРЕДЫДУЩЕГО набора, как бы прекращая ее участие с этого момента в составе набора. То есть записывать ставшую ненужную в новом наборе номенклатуру с нулевым количеством. Тоже неплохой вариант.
71 kosts
 
24.07.15
06:16
(70) >при записи нового набора перекрывать нулем номенклатуру, выводимую из состава ПРЕДЫДУЩЕГО набора

Нет смысла перекрывать, т.к. не надежно это. Т.к. теоретически наборы могут записываться в любой последовательности периодов.

> набор может быть задан периодическим РС с измерениями набор и номенклатура и ресурсом количество

Вот тут ты прав. Только и количество не нужно. С другой стороны срезом последних в чистом виде так и так не воспользоваться. Так что регистр можно в принципе делать не периодическим, только вместо измерения "Период" добавить например "Дата".
72 ComradeKite
 
24.07.15
08:53
to 70 вариант хороший тоже. Так даже 1с ники делать рекомендуют, с НПП мне понравилось больше.
Во первых срез последних всегда вернет измерение Набор, периодичность регистра день, что тоже требуется условием.
Ну а дать возможность набор размножить по измерению как раз и дает НПП. Этот НПП неразрывно связан с ТЧ составляющие набора.

По срезу берем набор и последний период регистрации если что то прилетело раньше отсекаем внутренним соединением.

На мой взгляд не плохо получается.