![]() |
![]() |
![]() |
|
Изменение записей в регистре сведений подчиненных регистратору | ☑ | ||
---|---|---|---|---|
0
LivingStar
24.09.13
✎
13:54
|
Есть регистр сведений, в который в разные периоды помещается набор записей. Регистр подчиненный регистратору, периодичность по позиции документа. В регистре актуальным должен быть один набор записей. То есть при проведении документа предыдущие значения должны ставиться в значение ложь. Как лучше это сделать??? На дату проводимого документа все что есть в регистре записывать в ложь? Как то не совсем дойду... Подскажите кому не трудно?!!!
|
|||
1
Maxus43
24.09.13
✎
13:55
|
При проведении документа набор записей будет перезаписан, старые "удалены"
|
|||
2
LivingStar
24.09.13
✎
13:57
|
(1) А если новые документы создаются? Старые остаются, поместившие данные в регистр со значением истина.
|
|||
3
LivingStar
24.09.13
✎
13:58
|
(2+) Нужно это что бы потом отбирая записи, выявлять какие на текущую дату, дату выборки актуальны имеют значение истина! Или какие были актуальны в прошлые периоды, фиксируется это все документом.
|
|||
4
Maxus43
24.09.13
✎
13:59
|
последние записи (актуальные) - СрезПоследних у регистра, другие записи трогать не надо
|
|||
5
catena
24.09.13
✎
14:29
|
Нельзя в обработке проведения одного документа исправлять движения другого. Регистра сведений обслуживает указанные нужды без всяких дополнительных телодвижений.
|
|||
6
LivingStar
25.09.13
✎
05:22
|
(5) Приведу пример:
март - документом был введен в регистр один фокусный ассортимент июнь - был введен другой фокусный ассортимент июль - был введен третий фокуксный асссортимент ... сентябрь - что бы ввести фокусный ассортимент на сентябрь документом, нужно предварительно отменить его у всей предварительно введенной номенклатуры Отчетом нужно смотреть какой был фокусный ассортимент у номенклатуры в любой из выбранных месяцев. То есть при вводе фокусного ассортимента, нужно при обработке проведения отменять предыдущий. Делать это предварительно перепроводя предыдущий документ со значением ложь для номенклатуры? Или в донном случае не нужно для регистра задавать регистратор? Документ нужен в люббом случае. Как лучше сделать? |
|||
7
LivingStar
25.09.13
✎
05:28
|
(4) Так видите в чем дело? Я записываю в регистр фокусный ассортимент номенклатуры:
| // Запись в регистр сведений текущей таблицы документа (установка номенклатуры фокусным ассортиментом) НаборЗаписей = РегистрыСведений.ФокусныйАссортимент.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка); Для каждого Стр Из ФокусныйАссортимент Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = Стр.Номенклатура; НоваяЗапись.ФА = Стр.ФА; КонецЦикла; НаборЗаписей.Записать(); // --------------------------------------------------------------------------------------------------- Получается что он и будет там храниться со значением истина, а следующим документом я помещаю туда новый фокусный ассортимент, соответственно предыдущий нужно установить в значение ложь. А так получается что вся номенклатура там будет со значением истина лежать. Как отчеты то делать потом? |
|||
8
LivingStar
25.09.13
✎
05:30
|
Не совсем понимаю тогда необходимость регистра для этой задачи, можно и документами просто ограничиться...
|
|||
9
LivingStar
25.09.13
✎
06:00
|
Решение в данном случае, - в обработке проведения документа, полшучать предыдущий документ, устанавливать номенклатуру в его табличной части в значение ложь и перепроводить его, будет верно?
|
|||
10
catena
25.09.13
✎
06:02
|
(9)Нет. Верно будет так спроектировать регистр, чтобы не патчить все документы при проведении. Ты подумал, что произойдет, если какой-нить жутко умный пользователь в сентябре перепроведет например январь?
У регистра есть период, есть периодичность - этого недостаточно для получения необходимых данных? |
|||
11
LivingStar
25.09.13
✎
06:09
|
(10) Получая данные на любуюу дату в выборку будут попадать вся номенклатура из регистра, так как у неё ФА=Истина у всей, так она попадает в регистр. Нужно как то устанавливать значение ФА=Ложь, это будет актуальная номенклатура на текущую дату... Что было актуальной в предыдущие периоды можно будет выбирать из документов.
В документе можно поставить запрет перепроведения если есть последующие документы. Пока не соображу как правильно сделать. Период и периодичность в этом случае наверное не помогут, важно значение ФА (булево) номенклатуры, табличной части документа. |
|||
12
LivingStar
25.09.13
✎
06:11
|
(11) То есть что в регистре ФА=Истина - это актуальный фокусный ассортимент номенклатуры. Он может меняться из периода в период.
|
|||
13
LivingStar
25.09.13
✎
06:29
|
Подчинение регистратору в данном случае наверное не подойдет.
Думаю сделать регистр с периодичностью день например. И записывать в него каждый раз 2 тч, 1- ФА=истина (Текущий фокусный ассортимент), 2- ФА=ложь (Предыдущий фокусный ассортимент) все на дату документа! |
|||
14
catena
25.09.13
✎
06:34
|
Тут куча вариантов.
Можно в том же документе садить проводки по всей остальной номенклатуре со значением ложь. Можно выбирать записи только максимального периода. Забудь про запросы по документам. Либо уж делай всё на документах и не парься с регистрами. |
|||
15
LivingStar
25.09.13
✎
06:39
|
(14) Решил делать так:
Регистр независимый, периодичность день. Документ 2 Тч. 1Тч актуальный фокусный ассортимент на дату документа. 2Тч Предыдущий фокусный ассортимент для установки в ложь на дату документа. При проведении одна номенклатура устанавливается ФА=Истина на дату документа. Другая в ФА=Ложь, предыдущая не актуальная номенклатура на дату докумнета. Но она остается актуальной в предыдущем периоде для истории. |
|||
16
mikeA
25.09.13
✎
06:41
|
(15) открой для себя цены номенклатуры
|
|||
17
anaed
25.09.13
✎
06:42
|
Что мешает при проведении документа поискать последний из предыдущих и его табличную часть записать в РС с ложью?
|
|||
18
LivingStar
25.09.13
✎
06:52
|
(17) Так примерно и собираюсь делать. При открытии табличную часть последнего из предыдущих занеся в Тч "ОтменяемыйФА".
|
|||
19
anaed
25.09.13
✎
07:39
|
В эту ТЧ обязательно кто-нибудь залезет и исправит. Да и зачем ее хранить в доке?
|
|||
20
LivingStar
25.09.13
✎
07:42
|
(19) неактивной сделать, или вообще не показывать, ищу решения, встречаются неправильные и не совсем правильные
|
|||
21
LivingStar
25.09.13
✎
07:44
|
При движении нужно же устанавливать отбор не только на период, но и на номенклатуру??? А то что то криво работает (((
НаборЗаписей = РегистрыСведений.ФокусныйАссортимент.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(Дата); Для каждого Стр Из ОтменяемыйФокусныйАссортимент Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = Стр.Номенклатура; НоваяЗапись.ФА = Ложь; КонецЦикла; НаборЗаписей.Записать(); |
|||
22
LivingStar
25.09.13
✎
07:47
|
можно ли установить отбор на табличную часть?
|
|||
23
LivingStar
25.09.13
✎
08:06
|
Подскажите если периодичность регистра в пределах дня. И я выбираю номенклатуру для отмены фокусного ассортимента, это нужно брать тогда не на дату документа, как туда правильнее передать дату?
|
|||
24
LivingStar
25.09.13
✎
08:31
|
почему при таком проведении:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) // Запись в регистр сведений текущей таблицы документа ОтменяемыйФокусныйАссортимент (отмена номенклатуры фокусным ассортиментом) НаборЗаписей = РегистрыСведений.ФокусныйАссортимент.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(Дата); Для каждого Стр Из ОтменяемыйФокусныйАссортимент Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = Стр.Номенклатура; НоваяЗапись.ФА = Ложь; КонецЦикла; НаборЗаписей.Записать(); // Запись в регистр сведений текущей таблицы документа УстанавливаемыйФокусныйАссортимент (установка номенклатуры фокусным ассортиментом) НаборЗаписей = РегистрыСведений.ФокусныйАссортимент.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(Дата); Для каждого Стр Из УстанавливаемыйФокусныйАссортимент Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = Стр.Номенклатура; НоваяЗапись.ФА = Истина; КонецЦикла; НаборЗаписей.Записать(); КонецПроцедуры я не вижу в регистре записей с ФА=Ложь, соответственно они потом все по новой и отбираются в Тч?!!! |
|||
25
catena
25.09.13
✎
09:07
|
(24)Один раз делай Записать()
|
|||
26
Мимохожий Однако
25.09.13
✎
09:41
|
Если фокусный ассортимент действует только месяц, в котором сделан документ, а предыдущие месяцы не учитываются, то хватит табличной части документа без всяких движений в регистрах. Очень похоже на документ инвентаризации. Он фиксирует состояние, но движений не делает. При таком подходе не надо думать о закрытии данных в регистрах сведений при переходе на очередной период.
|
|||
27
anaed
25.09.13
✎
09:45
|
И создавать набор не надо 2 раза.
НаборЗаписей = РегистрыСведений.ФокусныйАссортимент.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(Дата); Для каждого Стр Из ОтменяемыйФокусныйАссортимент Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = Стр.Номенклатура; НоваяЗапись.ФА = Ложь; КонецЦикла; Для каждого Стр Из УстанавливаемыйФокусныйАссортимент Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = Стр.Номенклатура; НоваяЗапись.ФА = Истина; КонецЦикла; НаборЗаписей.Записать(); |
|||
28
LivingStar
25.09.13
✎
09:57
|
спасибо!
|
|||
29
LivingStar
25.09.13
✎
10:33
|
(27) У меня проблема в том что ФА в "Ложь" не устанавливается вообще ((( Всегда "Истина". Почему такое может быть?
|
|||
30
Ненавижу 1С
гуру
25.09.13
✎
10:34
|
(29) неудачник, код покажи
|
|||
31
LivingStar
25.09.13
✎
10:35
|
А, или вот вижу стал ставить, а то реально сидел, везде истину пишет и все!!! Когда на (27) исправил наверное помогло!!!!
|
|||
32
LivingStar
25.09.13
✎
10:52
|
А как обойти такой момент, на который сейчас наткнулся:
Январь, ставлю 7 ФА, отменять нечего Феврать, ставлю 4 ФА, отменяю 7 Март, ставлю 5 ФА, а к отмене 11 (а должно быть 4) это как вижу... |
|||
33
LivingStar
25.09.13
✎
10:55
|
(32) При открытии когда формирую таблицу для ОтменыФокусногоАссортимента, видимо оперировать нужно только с предыдущим месяцем!!! А в периодическом регистре сведений только один период? Нужно тогда от даты документа захватывать предыдущий месяц.
|
|||
34
LivingStar
25.09.13
✎
11:32
|
можно ли делать выборку по регистру сведений передавая не период, а НачДата и КонДата ?
|
|||
35
LivingStar
25.09.13
✎
11:38
|
up!!!!
|
|||
36
LivingStar
25.09.13
✎
11:42
|
видимо только если условие накладывать не на регистр а на УСЛОВИЕ выборки, я правильно рассуждаю?
|
|||
37
Мимохожий Однако
25.09.13
✎
11:44
|
Повторяю. Откажись от регистров. Достаточно документа в месяце.
|
|||
38
LivingStar
25.09.13
✎
11:44
|
вот так на !!!
ВЫБРАТЬ ФокусныйАссортиментСрезПоследних.Период КАК Период, ФокусныйАссортиментСрезПоследних.Номенклатура, ФокусныйАссортиментСрезПоследних.ФА ИЗ РегистрСведений.ФокусныйАссортимент.СрезПоследних(, ФА = ИСТИНА) КАК ФокусныйАссортиментСрезПоследних ГДЕ ФокусныйАссортиментСрезПоследних.Период МЕЖДУ &НачДата И &КонДата УПОРЯДОЧИТЬ ПО Период |
|||
39
LivingStar
25.09.13
✎
11:45
|
(37) Понял!!!! И выборки потом по документам делать? Делать по ним соединения?
|
|||
40
LivingStar
25.09.13
✎
11:46
|
(37) Согласен, а то что то крутящееся не понятно для чего получается. Оставлю так, пусть будет!!!
|
|||
41
Мимохожий Однако
25.09.13
✎
11:47
|
(40)Не понял, но согласен.
|
|||
42
LivingStar
25.09.13
✎
11:54
|
(41) Да мож регистр пригодится!!! В отчеты из регистров же нужно брать данные. Вот и на это опираюсь....
|
|||
43
bard666
25.09.13
✎
11:55
|
(24) Не забывай Читать наборы, а то перезапишешь весь регистр, а потом возвращать из бэкапов
НаборЗаписей = РегистрыСведений.ФокусныйАссортимент.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Период.Установить(Дата); НаборЗаписей.Прочитать(); |
|||
44
Мимохожий Однако
25.09.13
✎
11:56
|
Сначала разберись какие отчеты нужны и что нужно для них. Только потом проектируй регистры и движения по ним. Программирование "на всякий случай" - это твоё ноу-хау?
|
|||
45
LivingStar
25.09.13
✎
11:59
|
(43) то есть (24) работает но не корректно???
нужно делать НаборЗаписей.Прочитать(); ? |
|||
46
LivingStar
25.09.13
✎
12:01
|
(44) Так задачи ставятся, нужно то то, то то. Ну а я типа услышав, сразу увидел правильное решение и воплотил его. Было бы так !!! Отчет где отображается то, является ли выведенная номенклатура фокусным вссортиментом?! На дату выборки. Это может пригодяться или потребоваться в любом отчете....
|
|||
47
bard666
25.09.13
✎
12:04
|
(45) Да, это может отработать некорректно. У меня было такое, когда новый документ перезаписывал весь регистр, стирая записи по предыдущим документам. Пришлось восстановить бэкап и оттуда восстанавливать регистр.
|
|||
48
LivingStar
25.09.13
✎
12:07
|
(47) Нужно 100% делать НаборЗаписей.Прочитать(); и все будет Ок? Спасибо, учту!!!
|
|||
49
LivingStar
25.09.13
✎
12:22
|
(27) А если в наборе в первом цикле номенклатура устанавливается в ложь, а во втором в истину??? У меня сейчас выдает ошибку на это, если видимо 2 раза создавать то не ругалась бы???
|
|||
50
LivingStar
25.09.13
✎
12:26
|
Как исключить такую ошибку?
шибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {Документ.УстановкаФокусногоАссортимента(25)}: Ошибка при вызове метода контекста (Записать) по причине: Запись с такими ключевыми полями существует! : ФокусныйАссортимент: 01.03.2013, Номенколатура шт. (Регистр сведений: Фокусный ассортимент; Номер строки: 6) |
|||
51
LivingStar
25.09.13
✎
12:28
|
Видимо выкинуть предварительно из таблицы ОтменаФокусногоАссортимента то что есть в таблице УстановкаФокусногоАссортимента?!!
|
|||
52
LivingStar
25.09.13
✎
12:32
|
такое название процедуры ниначто негативно не повлияет?
Процедура УборИзУстановкиТогоЧтоЕстьВОтмене() КонецПроцедуры |
|||
53
Мимохожий Однако
25.09.13
✎
12:42
|
Уже поздно. Повлияло.
|
|||
54
Enders
25.09.13
✎
12:43
|
Может вместо того что бы думать что-то с регистром, проще было бы отчет правильно написать?
А регистр оставить подчинённый регистратору и периодический?) Тогда бы просто брали бы срез последний на нужную дату и период>НачалоПериода(НужнаяДата,Месяц) |
|||
55
Enders
25.09.13
✎
12:44
|
Только в вашем случае не "Месяц", а квартал)
|
|||
56
LivingStar
25.09.13
✎
12:45
|
(54) А если скажут что а одном месяце может быть несколько смен фокусных ассортиментов? Когда внедрится это в работу и будут видны все минусы или плюсы, той или иной постановки, там и можно будет править.
|
|||
57
LivingStar
25.09.13
✎
12:46
|
Была бы Функция УборИзОтменыТогоЧтоЕстьВУстановке(Отмена, Установка)
|
|||
58
Enders
25.09.13
✎
12:51
|
(56) ну как я понял,то у вас не в одном месяце, а в квартале могут быть несколько ФА, на следующий квартал, прошлые не актуальны.
По-этому мы: а) берём срез на дату, и получаем последние данные согласно вашим измерениям б) обрезаем данные условием по периоду НачалоПериода(НужнаяДата,Квартал). И то что было введено до квартала в котором вы хотите посмотреть не попадает в отчет. |
|||
59
LivingStar
25.09.13
✎
12:54
|
Это так передается параметров в период регистра сведений НачалоПериода(НужнаяДата,Квартал)? Возможно вы правы, но я двигаюсь по своему алгоритму, так как сторонний мне не совсем понятен. Хотя вижу что ваш более адекватен и прозрачен. Я работаю как могу. делаю вот так как делаю. Сейчас я пытаюсь решить ту задачу когда из одной таблицы значений нужно выборочно удалить записи.
|
|||
60
LivingStar
25.09.13
✎
12:55
|
(59) Нужно мне это для того, что бы я не мог записать одно и тоже значение на одну и туже дату в разные.
|
|||
61
Enders
25.09.13
✎
13:03
|
(59)
Запрос выглядит примерно так "Выбрать * Из РегистрСведений.ВашРегистр.СрезПоследних(&ВыбраннаяДата) как Регистр Где Регистр.Период>=НачалоПериода(ВыбраннаяДата,Квартал)" |
|||
62
Enders
25.09.13
✎
13:05
|
(60)
То есть типо если сентябре было введено ФА1, то в октябре нельзя ввести это же ФА1, так как один и тот же квартал? |
|||
63
Enders
25.09.13
✎
13:06
|
(62)Вернее ошибочка)
Ведь октябрь и сентябрь в разных кварталах) Если в Августре было введено ФА1, то в сентябре нельзя ввести это же ФА1, так как один и тот же квартал? |
|||
64
LivingStar
25.09.13
✎
13:08
|
(62) Это уберет из Тз1 то что есть в Тз2 ?
Процедура УборИзОтменыТогоЧтоЕстьВУстановке(Тз1, Тз2) Для Каждого Стр1 Из Тз1 Цикл Для Каждого Стр2 Из Тз2 Цикл Если Стр1.Номенклатура = Стр2.Номенклатура Тогда Тз1.Удалить(Стр1.НомерСтроки); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
65
LivingStar
25.09.13
✎
13:10
|
(63) говорю требования точные не ясны, может быть как угодня, завтра только точно узнаю и буду обновлять рабочую базу на регистр и документ. У меня там и в номенклатуре выводится флажек, фокусный это ассортимент или нет. Посмотрю как это все увяжится.
|
|||
66
Мимохожий Однако
25.09.13
✎
13:13
|
Добавил бы реквизит Фокусный и обработкой прогонял установку признака, если не нужна история.
(65)Пока нет точных требований, приступать к кодированию опрометчиво. |
|||
67
LivingStar
25.09.13
✎
13:14
|
(66) Ну а что делать приходится. Требования есть, но в процессе возникает куча вопросов. Человека который на них бы ответил сейчас нет, вот и делаю как понимаю, как вижу... Все же можно исправить переписать. Пока вот как понял делаю.
|
|||
68
Мимохожий Однако
25.09.13
✎
13:17
|
ОК. Во всяком случае тебе никто не мешает делать пустую работу.
|
|||
69
LivingStar
25.09.13
✎
13:22
|
Подскажите как добиться (64) ? Что бы правильно удалить строки?????
|
|||
70
LivingStar
25.09.13
✎
13:34
|
обощел это следующим образом
Для каждого Стр Из ТзОтменаФА Цикл Если ТзУстановкаФА.Найти(Стр.Номенклатура, "Номенклатура") = Неопределено Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = Стр.Номенклатура; НоваяЗапись.ФА = Ложь; КонецЕсли; КонецЦикла; Для каждого Стр Из ТзУстановкаФА Цикл НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = Дата; НоваяЗапись.Номенклатура = Стр.Номенклатура; НоваяЗапись.ФА = Истина; КонецЦикла; НаборЗаписей.Записать(); |
|||
71
Enders
25.09.13
✎
13:56
|
(65)"говорю требования точные не ясны"
Это пять)))программировать без точных требований и ТЗ, да вы, батенька, знаете толк в извращениях. |
|||
72
LivingStar
25.09.13
✎
13:56
|
(71) я просиживаю штаны сижу, увлекаюсь программированием!!!
|
|||
73
LivingStar
26.09.13
✎
08:55
|
(63) ФА будет изменяться раз в квартал
|
|||
74
LivingStar
01.10.13
✎
11:10
|
(37) То есть можно просто вводить раз в квартал документ где в табличной части будет фокусный ассортимент и все этоадекватно помещать в отчеты при формировании в разные квартала тот фокусный ассортимент что установлен в документах, не нужны для этого регистры????
|
|||
75
LivingStar
09.10.13
✎
12:30
|
(63) Может и можно, если его задают ФА, то хоть каждый квартал думаю ....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |