Имя: Пароль:
1C
1С v8
Регистр сведений - запутался
,
0 magicSan
 
30.09.15
10:07
Регист сведений, период день, измирения сотрудник.

Надо чтоб стал подчинен регистратору, добавляю регистратор пропадает поле отбора "Период".


Что блин не так?

код был и стал

//рег.Отбор.период.установить(дата+(день-1)*86400);
        //рег.Прочитать();
        //тз=ШтатноеРасписание.выгрузить().Скопировать(,"Сотрудник,Колонка"+день);
        //тз.Колонки.Найти("Колонка"+день).Имя="Продолжительность";
        //тз.Колонки.Добавить("Период");
        //тз.ЗаполнитьЗначения(дата+(день-1)*86400,"Период");
        //рег.Загрузить(тз);
        //рег.Записать();
        
        рег.Отбор.регистратор.установить(Ссылка);
        //рег.Отбор.период.установить(дата+(день-1)*86400);
        рег.Прочитать();
        тз=ШтатноеРасписание.выгрузить().Скопировать(,"Сотрудник,Колонка"+день);
        тз.Колонки.Найти("Колонка"+день).Имя="Продолжительность";
        тз.Колонки.Добавить("Период");
        тз.ЗаполнитьЗначения(дата+(день-1)*86400,"Период");
        рег.Загрузить(тз);
        рег.Записать();
1 magicSan
 
30.09.15
10:08
т.е. сейчас отбор только по регистратору и записывает только послдений день месяца. Если добавлю измирение день то будет ругатся что не заполнено поле период.
2 Ненавижу 1С
 
гуру
30.09.15
10:09
у наборов значений регистров, подчиненных регистратору, возможен отбор только по регистратору
3 Cyberhawk
 
30.09.15
10:09
Отбор по регистратору у набора записей достаточен, зачем тебе период-то?
4 Волшебник
 
модератор
30.09.15
10:09
Для подчинённых регистров отбор только по регистратору.
5 Ненавижу 1С
 
гуру
30.09.15
10:13
6 magicSan
 
30.09.15
10:15
чего делать? как записывать и ресурсы по дням? у регистра период день, я же могу писать с одним и тем же регистратором на 10 дней
7 magicSan
 
30.09.15
10:15
(3) регистратор делает записи на весь месяц для одного измирения
8 Ненавижу 1С
 
гуру
30.09.15
10:16
(6) и в чем проблема? делай разные периоды, никто не мешает
9 magicSan
 
30.09.15
10:18
проблема полезла с того что открываю документ провожу, меняю дату провожу - фигатц оба месяца одним документом, удаляются движения естесвенно только за месяц в "Дата". может проще сделать измирение "док" убрать подчинение и удалять движения отбором по "док"?


(8) как?
10 magicSan
 
30.09.15
10:20
(9) Как-то неправильно это выглядит.
11 hhhh
 
30.09.15
10:21
тз.Колонки.Добавить("Период");
        тз.ЗаполнитьЗначения(дата+(день-1)*86400,"Период");

вот здесь. Не заполнять Период одной и той же датой, а для каждой строчки своя дата
12 magicSan
 
30.09.15
10:24
(11)там есть измерения в рамках одного дня 30 разныхх измерений.
13 Ненавижу 1С
 
гуру
30.09.15
10:25
(12) это ты все волшебное штатное расписание лепишь?
Штатное Расписание как сделать ленивей?
14 magicSan
 
30.09.15
10:28
(13) =)) да =)
15 hhhh
 
30.09.15
10:29
(12) ну и в чем проблема? хоть сорок измерений. Единственная фишка здесь. Запись идет только вся целиком для регистратора. Нельзя записать несколько строчек. ЕСли это прочувствуешь, остальное фигня.
16 magicSan
 
30.09.15
10:31
(15) " а для каждой строчки своя дата" - у каждой строчки дата одинакова, там таблица в строках сотрудники в колонках дни месяца, ресур продолжительность дня.
17 Ненавижу 1С
 
гуру
30.09.15
10:36
(16) а причем тут штатное расписание и продолжительность дня? или я тупой?
18 Cyberhawk
 
30.09.15
10:38
(7) Ну, делает так делает, накладывай отбор тогда на весь прочитанный по регистратору набор записей, изменяй нужные тебе записи и загружай в набор обратно
19 Cyberhawk
 
30.09.15
10:39
"на весь прочитанный по регистратору набор записей" = "на ТЗ, сформированную из этого набора"
20 magicSan
 
30.09.15
10:42
(19) изначально отбор регистр по регистратору - соответсвенно записываются только записи на последний день.

(17) выглядит как табель, представляет собой штатное рапсиание  с детализацией по графику работ - потому-что удобно.
21 Ненавижу 1С
 
гуру
30.09.15
10:44
(20) наверное это и есть план-табель
в (0) я так понимаю ты записываешь в цикле где День = 1 по 31?

не делай так, записывай все сразу
22 magicSan
 
30.09.15
10:51
(21) да в цикле. Был периодический регистратор - период день. Всё сразу не получится. Или как?
23 Cyberhawk
 
30.09.15
10:52
Что-то кажется противоречивыми два утверждения:
1. "регистратор делает записи на весь месяц"
2. "отбор регистр по регистратору - соответсвенно записываются только записи на последний день"
24 magicSan
 
30.09.15
10:56
(23) 1. и чего????
     2. если регист зависисимы то в отборе только регистратор соответствено в цикле каждый раз перезаписывается набор данных по регистратору.
25 Cyberhawk
 
30.09.15
10:58
Ты не устранил мое ощущение противоречивости тех утверждений.
У тебя много регистраторов что ли?
26 Cyberhawk
 
30.09.15
10:58
Кстати, в цикле можешь не перезаписывать, а дозаписывать записи
27 Cyberhawk
 
30.09.15
10:59
Ладно, Я не въезжаю в какой-то там твой механизм, надеюсь помог чем смог ))
28 magicSan
 
30.09.15
11:02
(25) Один регистратор на месяц - строки сотрудники, колонки дни месяца.

Что значит дозаписывать?
29 Cyberhawk
 
30.09.15
11:02
Параметр у метода набора записей Записать()
30 Ненавижу 1С
 
гуру
30.09.15
11:04
(22) или как, для каждого дня свой период
31 magicSan
 
30.09.15
11:08
(29) там булево либо замещает либо нет.
32 magicSan
 
30.09.15
11:09
(30) *регистр (опечатался)
33 Cyberhawk
 
30.09.15
11:09
(31) Продолжай наблюдения
34 magicSan
 
30.09.15
11:14
(33) ! С ложью все дни запишутся!
35 Cyberhawk
 
30.09.15
11:26
(34) Я хз что там у тебя за алгоритм, ты не удосужился даже красиво расписать его, желательно с картинками
36 magicSan
 
30.09.15
11:39
(35) https://onedrive.live.com/redir?resid=86EBA954BCB1DA2A!424&authkey=!AKZVVUArIMfuhBk&v=3&ithint=photo%2cjpg


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    ОбработкаУдаленияПроведения(0);
    
    рег=РегистрыСведений.ШтатноеРасписание.СоздатьНаборЗаписей();
    енд=число(формат(КонецМесяца(Дата),"ДФ=дд"));
    для день=1 по енд цикл
        рег.Отбор.регистратор.установить(Ссылка);
        рег.Прочитать();
        тз=ШтатноеРасписание.выгрузить().Скопировать(,"Сотрудник,Колонка"+день);
        тз.Колонки.Найти("Колонка"+день).Имя="Продолжительность";
        тз.Колонки.Добавить("Период");
        тз.ЗаполнитьЗначения(дата+(день-1)*86400,"Период");
        рег.Загрузить(тз);
        рег.Записать(ложь);
    конеццикла;
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
рег=РегистрыСведений.ШтатноеРасписание.СоздатьНаборЗаписей();
рег.Отбор.регистратор.установить(Ссылка);
рег.Прочитать();
рег.Очистить();
рег.Записать();
КонецПроцедуры


Всё работает как и должно - спасибо =)
37 Ненавижу 1С
 
гуру
30.09.15
11:46
(36)
это пять:
енд=число(формат(КонецМесяца(Дата),"ДФ=дд"));

это ваще круто:

Процедура ОбработкаУдаленияПроведения(Отказ)
рег=РегистрыСведений.ШтатноеРасписание.СоздатьНаборЗаписей();
рег.Отбор.регистратор.установить(Ссылка);
рег.Прочитать();
рег.Очистить();
рег.Записать();
КонецПроцедуры
38 magicSan
 
30.09.15
11:51
(37) побыстрому переделал - было написано для реквизита "док"

енд=число(формат(КонецМесяца(Дата),"ДФ=дд")) - что не так?? есть вариант получше?
39 Cyberhawk
 
30.09.15
11:56
День(КонецМесяца(Дата))