Имя: Пароль:
1C
1С v8
РегистрыНакопления
,
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
Выборка.ПолучитьОбъект()
замени на
Выборка.Ссылка.ПолучитьОбъект()

Там не СправочникСсылка, а ВыборкаСсылка