|
РегистрыНакопления | ☑ | ||
---|---|---|---|---|
0
piter99
04.12.12
✎
12:31
|
Учусь, делаю библиотеку. В документе ВыдачаНаРуки при проведении вношу в РегНакопл.ТекущиеДолги = Книг 5, ДатаВыдачи, ДатаВозврата, ДниПросрочки=0. А далее хочу сделать обработку, которая в зависимости от текущей даты будет в РегНакопл.ТекущиеДолги сама корректировать ДниПросрочки=Цел((ТекущаяДата()-ДатаВозврата)/84000);
И не справляюсь. Возникает 2 вопроса. 1) или туплю с УниверсальнымиКоллекциями (если можно - какие компоненты) 2) или в РегНакопл - не предусмотрено влазить вне регистратора? |
|||
1
Cube
04.12.12
✎
12:35
|
(0) Смысл регистр лопатить каждый день? Убери из регистра ДниПросрочки вообще. Пусть отчет считает дни просрочки...
|
|||
2
piter99
04.12.12
✎
13:04
|
Да я так, как бы проверяю возможности 1С. Если не справляешься - себя тупым считаешь. Думал раз в сутки регистр обновят (утречком), а потом ВСЕ целый день будут актуальные отчетики видеть без пересчета. Вроде как время и ресурс экономишь.
|
|||
3
piter99
04.12.12
✎
13:10
|
По универсальным обьектам бился=
1) как в сообщении <Саша80 - ТабличноеПоле> - как у него, вошел в тупик с ТабличнымПолем, 2) И никак из Выборка (РегНакопленияСписок) не мог перейти к Выборка.ПолучитьОбъект() - записи РегНакопления. Не пускает. |
|||
4
Maxus43
04.12.12
✎
13:15
|
(3) тут не помогут. набор слов про сферических саш в вакууме, не зная основы - не задашь правильно вопрос, переводить поток сознания этот никто не будет
|
|||
5
Maxus43
04.12.12
✎
13:16
|
Рекомендую прочитать Радченко наример, там будет понятно назначение объектов и т.д.
|
|||
6
piter99
04.12.12
✎
13:23
|
Я еще сам попробую, получится - напишу ответ.
А книжку Радченко - раза 2 повторил в конфигурации, научился немного читать чужой текст, но никак не мог писать свой. Пока на занятиях не обьяснили, что такое Массив, тз, сз, не поучили ими пользоваться. Есть 2 толмута офиц.документации - волосы шевелятся, а помнимания -мин. Спасибо, рад что этот форум нашел и http://mista.ru/tutor_1c/tz.htm, класс. |
|||
7
Maxus43
04.12.12
✎
13:27
|
(6) официальной документацие мало кто пользуется, это если что-то надо уточнить, понимания не придёт с ними... я с курсов начинал, основные объекты и т.д., помогает понять
|
|||
8
narayanan
04.12.12
✎
13:30
|
Удачи тебе Петр, где раньше работал?
|
|||
9
piter99
05.12.12
✎
05:40
|
Медицина, и самоучка.
У меня получилось, только хорошо ли это? |
|||
10
piter99
05.12.12
✎
05:42
|
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ рн.Период, рн.Регистратор, . рн.Читатель, рн.ДатаВозврата, рн.ДНиПРОСРОЧ, ..все_поля_*, рн.МоментВремени |ИЗ РегистрНакопления.Имя как рн"; тз=Запрос.Выполнить().Выгрузить(); Для Каждого стр из тз Цикл нз=РегистрыНакопления.ДолгиТекущие.СоздатьНаборЗаписей(); //стр1* нз.Отбор.Регистратор.Использование=Истина; //стр2* нз.Отбор.Регистратор.Значение = стр["Регистратор"]; запись=нз.Добавить(); запись.Регистратор=стр.Регистратор; запись.Период=стр.Период; ....., запись.ДниПросроч=999; //запись.МоментВремени=стр.МоментВремени; нз.Записать(Истина); КонецЦикла; // И эта штука работает. Но не прошло запись.МоментВремени=стр.МоментВремени; //и вынос стр1* и стр2* выше тела цикла - дает весьма странное дублирование записей //Вот теперь, когда получилось, Думаю, что такое упрямство 1С не случайно, и лучше так грубо в РН не вмешиваться. //(Если от спецов не будет обратных замечаний) |
|||
11
Bober
05.12.12
✎
06:57
|
(10) почему нельзя вмешиваться?
|
|||
12
piter99
05.12.12
✎
08:27
|
О ля-ля, ребята. Пропустил команду Прочитать.
Теперь выглядит в 10 раз короче, начиная с строки нз.Отбор.Регистратор.Значение = стр["Регистратор"]; нз.Прочитать(); нз.Записывать=Истина; Для Каждого Запись ИЗ НЗ Цикл запись.ДниПросроч=44; КонецЦикла; нз.Записать(Истина); и все |
|||
13
Wobland
05.12.12
✎
08:28
|
а ЗаполнитьЗначенияСвойств тут выйдет?
|
|||
14
piter99
05.12.12
✎
08:34
|
Что-то больно легко стало.
Что посоветуют спецы, можно рискнуть и править Регистр Накопления вне документа-регистратора. ??? Например в случаях, когда Ресурсы.значения хочется завязать с динамикой текущихДат. тут разные умные вслух сказали, что настоящий 1с-программист ее "чувствует изнутри, понимает внутреннюю логику". Все же это вопрос. Киньте набор мнений. Спасибо Петр. |
|||
15
Wobland
05.12.12
✎
08:38
|
(14) регистратор предназначен для отражения неких событий/изменений состояния БД. соответственно, если требуется другой набор движений, это как-то надо делать документом. научить его, попросить... ну и конечно нужно смотреть на конкретную ситуацию. вот моё имхо, ветку не читал
|
|||
16
piter99
05.12.12
✎
08:41
|
(13) а ЗаполнитьЗначенияСвойств тут выйдет?
вот ДниПроср меняет с 0 на 44. По настоящему ДниПроср=Цел((ДатаТекущая()-ДатаПолучения)/84000); И актуальная просрочка имеется. (у меня еще благо, запись рнДолгиТекущие - документ очищает, как только последнюю книгу вернули, и формирует рнЧитательОценка (сколько брал, с каким кач-вом вернул, как дела с просрочкой)) |
|||
17
Wobland
05.12.12
✎
08:45
|
(16) ДниПроср - это дни просрочки или просрачки?
Цел(1/86400) даст тебе 0 дней. если разница меж датами пара секунд, приходящихся на полночь. так и надо? |
|||
18
Wobland
05.12.12
✎
08:48
|
кстати, да! что за 84000?
|
|||
19
piter99
05.12.12
✎
08:49
|
Это детали, там и -30 выскакивает, тк сдавать еще чз месяц.
Через Если < 0 это уточняется. |
|||
20
Wobland
05.12.12
✎
08:51
|
(19) детали? текущая дата 17 часов утра, дата получения 18 часов вчера. просрачено?
|
|||
21
Wobland
05.12.12
✎
08:56
|
а ещё интересно б0ыло б взглянуть на функцию ДатаТекущая() ;)
|
|||
22
piter99
05.12.12
✎
09:09
|
Верно, я думаю калькулятор в прошлый раз глючил, надо 86400.
А я уже везде пишу 84000. О, и ДатаТекущая, бывает. Некогда думать о деталях. Я за эту библиотеку на экзамене 3-ку получил. Все пытался найти параллель м/у ведром картошки и ценным экземпляром книги. Время на экзамене как реактивный самолет. |
|||
23
piter99
05.12.12
✎
09:15
|
Кстати
нз.Отбор.Регистратор.Значение = стр["Регистратор"]; заставляет работать только с 1-й строкой. Оно вроде так и в документации написано. А все хочется обмануть, чтоб было короче. ВЫБРАТЬ * Из ... УПОРЯДОЧИТЬ ПО Регистратор"; НЗ.Отбор.Регистратор.ВидСравнения = ВидСравнения.БольшеИлиРавно; нз.Отбор.Регистратор.Значение = стр["Регистратор"]; Действительно нельзя уйти от "=", или это только у меня не получается. |
|||
24
sergeante
05.12.12
✎
09:56
|
поток сознания какой-то
|
|||
25
sergeante
05.12.12
✎
09:58
|
и в (6) по ссылке http://mista.ru/tutor_1c/tz.htm это 7.7, а не 8.х
|
|||
26
hhhh
05.12.12
✎
10:12
|
нз.Отбор.Регистратор.Установить(Стр.Регистратор);
|
|||
27
cw014
05.12.12
✎
10:37
|
По всем регистраторам бегать - здорово. А если 500 книг выдали, все 500 записей перелопачивать будешь? И как ты узнаешь, что у тебя книжка то вернулась?
|
|||
28
Bober
05.12.12
✎
15:00
|
(0) в библиотеке есть такое понятие как плановый возврат книги?
|
|||
29
Crongwild
05.12.12
✎
16:06
|
(14) А что будет, если пользователь проведет уже проведенный документ? Записи в регистре утром изменены обработкой, потом пользователь открыл документ, посмотрел, нажал ОК - движения в регистре сформировались заново.
Потому моё мнение: менять записи регистра напрямую можно только тогда, когда изменился механизм проведения документов по этому регистру и нужно доработать под эти изменения уже имеющиеся записи регистра. Проводить документ ради одного регистра бывает затратно, проще обработать напрямую сам регистр - вот тогда это оправданно. Соответственно, рекомендовал бы изменить идею решения. А насчет реализации: если один документ может делать несколько записей в регистре, то приведенный код будет несколько раз обрабатывать записи по одному и тому же документу - нерационально. Да и получение данных из регистра не нужно, поскольку набор записей потом всё равно читается. Поэтому в запросе можно выбрать лишь уникальные регистраторы и проходить по ним. Дальше - как в (12). |
|||
30
piter99
14.12.12
✎
04:26
|
Я пока оставил решение - Регистр накопления изменять (напр.раз в сутки) не док-регистратором, а автом.обработкой.
А окончательный ответ наверное дала бы практика - запустить в объемной библиотеке и посмотреть на работу полгодика. И, напомню цель - как одноразовой обработкой актуализировать в Регистре определенные значения на текущую дату, чтобы потом при вызове показателей в течении рабочего дня - не дергать процессор. |
|||
31
Web00001
14.12.12
✎
04:39
|
(30)>>что за бред - не дергать процессор?
Отнять - сложить два числа это дергать процессор? Процедура вычисления сколько прошло дней это именно вычитание одного количества секунд от второго, не страдай ерундой, Для работы с регистраторами есть жесткое правило, их движения должны зависеть, только от их реквизитов, для того, что бы их перепроведение не вызывало непредсказуемых последствий. Конечно можно и доступ запретить и пользователей по рукам бить, что б не перепроводили, но неправильно это все. Пересчеты корректировки это не штатный механиз, а аварийный не надо его закладывать в решение на стадии проектирования, если остался только такой вариант, ты что то сделал неправильно. |
|||
32
Web00001
14.12.12
✎
04:42
|
Вообщем тебе сразу сказали правильно в (1)
|
|||
33
DirecTwiX
14.12.12
✎
06:22
|
Выборка.ПолучитьОбъект()
замени на Выборка.Ссылка.ПолучитьОбъект() Там не СправочникСсылка, а ВыборкаСсылка |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |