Имя: Пароль:
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с ники делать рекомендуют, с НПП мне понравилось больше.
Во первых срез последних всегда вернет измерение Набор, периодичность регистра день, что тоже требуется условием.
Ну а дать возможность набор размножить по измерению как раз и дает НПП. Этот НПП неразрывно связан с ТЧ составляющие набора.

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

На мой взгляд не плохо получается.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший