Имя: Пароль:
1C
1С v8
Регистры сведений, периодические, не подчиненные.
0 Target1025
 
26.12.19
17:58
Столкнулся с проблемой при попытке чтения РС и удаления записей по человеку. При чтении набора записей, я считал, что он выдаст все даты записей в случае дубликатов по периодам, но в наборе выдается одна запись, по физлицу, но по случайному периоду записи. В итоге задумка собрать даты дубликатов, а потом поудалять через МенеджерЗаписи не работает. В РС СведенияОСтажеРаботыНаСевере есть только одно измерение - Физлицо

НаборЗаписей = РегистрыСведений.СведенияОСтажеРаботыНаСевере.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Физлицо.Установить(Физлицо.ссылка);
НаборЗаписей.Прочитать();
МассивПериодов = новый Массив;
Для Каждого запись из НаборЗаписей Цикл
    ПериодСтарый = Запись.Период;
        МассивПериодов.Добавить(ПериодСтарый);
    Сообщить("Прочитано " + Физлицо + " от " + ПериодСтарый );
КонецЦикла;
1 Momus
 
26.12.19
18:00
(0) мб в периодичности дело?
2 Momus
 
26.12.19
18:01
(1) хотя нет, бред
3 Target1025
 
26.12.19
18:11
(0)
https://ibb.co/KqbBDm8
https://ibb.co/jTYXLKj

Опишу задачу. ОК сошел с ума, влез в физлица, перехреначил Северную надбавку, из-за чего все начисления ЗП пошли по ....! У бухов возникла мысль сделать выгрузку сведения по СН с архивной базы и переписать в текущей. Выгрузку в текстовый документ сделал, загрузку - сделал. Но теперь осталось сделать удаление тех сотрудников, что фигурируют в выгрузке.
4 Сияющий в темноте
 
26.12.19
19:12
чего удаление?
очистить регистр и перенести с архива?
5 Target1025
 
26.12.19
19:19
(4) Тут не все так просто! ДЕло в том, что _могут_ быть приняты на работу те, кто не был в архивной базе. И вот их трогать нельзя. Т.е. можно и нужно удалить только тех физлиц, что фигурируют в выгрузке из архивной базы.
6 Target1025
 
26.12.19
19:26
Где-то наворочал что-то неправильно, что - не пойму.
        Для Инд = 1 По Текст.КоличествоСтрок() Цикл
            Строка = Текст.ПолучитьСтроку(Инд);
            МассивПодстрок = ОбщегоНазначенияЗК.РазложитьСтрокуВМассивПодстрок(Строка,    ":");
            ДатаЗаписи = Дата(МассивПодстрок[0]);
            НовыйGUID = Новый УникальныйИдентификатор(МассивПодстрок[1]);
            ФизЛицо = Справочники.ФизическиеЛица.ПолучитьСсылку(НовыйGUID);
                         /// вот тут будет кусок удаления, его не привожу
            МенеджерЗаписи.Физлицо  = Физлицо;
            МенеджерЗаписи.Период = ДатаЗаписи;
            МенеджерЗаписи.Записать();
            Сообщить("Записано " + Физлицо + " от " + ДатаЗаписи);
            ОбработкапрерыванияПользователя();
        Конеццикла;    
                          
Тут тоже вроде все просто: выбрал текстовый файл, спозиционировал менеджерзаписи, сделал запись.
Вот тут у меня вылезла проблема: менеджерзаписи пишет 1 (одну) запись в бд, хотя он вызывается дважды:

Записано XXX от 03.03.2012 0:00:00
Записано XXX от 21.11.2015 0:00:00

Но в базе после обработки одна запись от 21.11.2015. При этом, до обработки их две, а после - одна. При этом, по факту, я гружу в ту же базу, что выгружаю, т.е. база данных не должна поменяться. Но она меняется. Как с этим разрулить - я не понимаю.
7 Borteg
 
26.12.19
21:02
(6) где создание менеджера записи
8 Target1025
 
27.12.19
02:22
(7) Перед циклом:
        МенеджерЗаписи = РегистрыСведений.СведенияОСтажеРаботыНаСевере.СоздатьМенеджерЗаписи();
        Текст = Новый ТекстовыйДокумент;
        Текст.Прочитать(ИмяФайла,КодировкаТекста.UTF8,Символы.ВК+Символы.ПС);
        Для Инд = 1 По Текст.КоличествоСтрок() Цикл
                       //...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.