Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Удалить данные из регистра сведений и регистра накопления
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Genda
Добрый вечер! Перенесли данные из ЗиК 7.7 в ЗБУ 8.2. Теперь требуется удалить сотрудников-военных и соответственно все документы по ним и данные из регистров. С документами вроде как разобралась. Движения по регистрам, как я поняла, создает документ Перенос данных. Для удаления данных по определенному сотруднику из регистра сведений РаботникиОрганизаций написала следующий код:
Процедура КнопкаВыполнитьНажатие(Кнопка)
       спр=Справочники.СотрудникиОрганизаций.Выбрать();

       Пока спр.Следующий() Цикл
             Если СокрЛП(спр.ВидДоговора)="Военная служба по контракту" ИЛИ СокрЛП(спр.ВидДоговора)="Военная служба по призыву" Тогда
           спрОб=спр.ПолучитьОбъект();
        Если спрОб.ПометкаУдаления=Ложь Тогда
              спрОб.УстановитьПометкуУдаления(Истина,);
        КонецЕсли;
           ФЛ=спр.Физлицо;
                     Сообщить(ФЛ);
                                    
                              Запрос=Новый Запрос;
            Запрос.Текст="ВЫБРАТЬ
            |    РаботникиОрганизаций.Регистратор КАК Регистратор,
            |    РаботникиОрганизаций.Сотрудник.Физлицо.Наименование КАК Физлицо
            |ИЗ
            |    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций";
            
            ТабРез=Запрос.Выполнить().Выгрузить();
            
            НаборЗаписей=РегистрыСведений.РаботникиОрганизаций.СоздатьНаборЗаписей();
            
            Для НомерСтроки=0 По ТабРез.Количество()-1 Цикл
                Если Лев(СокрЛП(ТабРез[НомерСтроки].Регистратор),14)="Перенос данных" Тогда
                    Если СокрЛП(ТабРез[НомерСтроки].Физлицо)=СокрЛП(ФЛ) Тогда
                        НаборЗаписей.Отбор.Регистратор.Установить(СокрЛП(ТабРез[НомерСтроки].Регистратор));
                        НаборЗаписей.Записать();
                    Иначе
                        Продолжить;
                    КонецЕсли;
                Иначе
                    Продолжить;
                КонецЕсли;
            КонецЦикла;
                      КонецЕсли;
            
        КонецЦикла;
                
                      
КонецПроцедуры


Но так удаляются все данные из этого регистра. Если пишу НаборЗаписей.Отбор.Сотрудник.Установить(СокрЛП(ФЛ)), то ругается на "Сотрудник".
Подскажите, пожалуйста,в чем моя ошибка?
Ardi
Тип должен соответствовать

Что делает "СокрЛП()"?
Оно берёт данные, получает СТРОКОВОЕ представление объекта. Потом оно обрезает пробелы слева и справа.

Что делает "СокрЛП()"?
Оно берёт данные, получает СТРОКОВОЕ представление объекта. Потом оно обрезает пробелы слева и справа.
Genda
Цитата(Ardi @ 01.10.12, 20:20) необходимо зарегистрироваться для просмотра ссылки
Тип должен соответствовать

Что делает "СокрЛП()"?
Оно берёт данные, получает СТРОКОВОЕ представление объекта. Потом оно обрезает пробелы слева и справа.

Что делает "СокрЛП()"?
Оно берёт данные, получает СТРОКОВОЕ представление объекта. Потом оно обрезает пробелы слева и справа.


Написала без сокрлп строчку:
НаборЗаписей.Отбор.Регистратор.Установить(ТабРез[НомерСтроки].Регистратор);

все равно удалил все записи регистра


Ardi
А где же
НаборЗаписей.Отбор.Сотрудник.Установить(ФЛ)
Genda
Цитата(Ardi @ 01.10.12, 20:29) необходимо зарегистрироваться для просмотра ссылки
А где же
НаборЗаписей.Отбор.Сотрудник.Установить(ФЛ)


На такую запись ругается "Поле объекта не обнаружено (Сотрудник)"...
Ardi
При удалении документов записи и так удалятся.
Zaval
Цитата(Genda @ 01.10.12, 17:14) необходимо зарегистрироваться для просмотра ссылки
С документами вроде как разобралась.


Вот это что значит?
Почему нельзя по условию удалить строки из документа и просто перепровести его?
Ardi
Цитата(Zaval @ 01.10.12, 17:37) необходимо зарегистрироваться для просмотра ссылки
Начал искать работу )))

Вовка наверно заразный.
Vofka
Цитата(Ardi @ 01.10.12, 17:39) необходимо зарегистрироваться для просмотра ссылки
Вовка наверно заразный.

Если в этом ключе рассуждать, то Вовка как раз таки подцепил заразу.
Zaval
Цитата(Ardi @ 01.10.12, 17:39) необходимо зарегистрироваться для просмотра ссылки
Вовка наверно заразный.

Не, у меня свои тарканы. )
Так сложилось, 7 месяцев "отпуск" был)
Genda
К примеру есть документ Кадровое перемещение военнослужащих.
Удаляю в нем строки следующим образом:
ВыборкаКадрВоен=Документы.КадровоеПеремещениеВоеннослужащих.Выбрать();
Пока ВыборкаКадрВоен.Следующий() Цикл
     ДокКадрВоен=ВыборкаКадрВоен.ПолучитьОбъект();
        Если СокрЛП(ДокКадрВоен.Номер)="" Тогда
             Продолжить;
                     КонецЕсли;
               дк=ДокКадрВоен.Военнослужащие.Количество()-1;
                    Пока дк>=0 Цикл
                     ТабДокКадрВоен=ДокКадрВоен.Военнослужащие;
                             стрДК=ТабДокКадрВоен.Получить(дк);
                       Если СокрЛП(стрДК.ФизЛицо)=СокрЛП(ФЛ) Тогда
                                          ТабДокКадрВоен.Удалить(дк);
                                                 Сообщить("Документ "+ДокКадрВоен);
                                     Сообщить("удалена строка по сотруднику "+СокрЛП(ФЛ));
                                          Иначе
                                        дк=дк-1;
                                                Продолжить;
                                     КонецЕсли;
                                                 дк=дк-1;
                     КонецЦикла;
                      ДокКадрВоен.Записать(РежимЗаписиДокумента.Запись);
                      ДокКадрВоен.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;


Но из регистра сведений записи при этом не удаляются. Видимо из-за того, что записи регистра связаны с документом Перенос данных. В одном из доков Перенос данных есть таблица регистра сведений РаботникиОрганизаций.

Вот про такой документ Перенос данных говорю:
Zaval
Как-то все у Вас слишком сложно...
Документы КадровоеПеремещениеВоеннослужащих, как я понимаю, можно было просто все пометить на удаление.
Если их много - то через УниверсальныйПодборИОбработкаОбъектов( есть на дисках ИТС, встречается в некоторых конфигурациях).

Перенос - там повеселее.
Цитата(Genda @ 01.10.12, 17:14) необходимо зарегистрироваться для просмотра ссылки
Но так удаляются все данные из этого регистра.

Вы создали НаборЗаписей с определенными свойствами. Поскольку Вы забыли его "Прочитать" - он так и остался пустым. Затем - "Записать!", и система послушно затирает все записи Набора.

Попробуйте сделать так.
1. Создайте НоборЗаписей с отбором по Регистратору( добавьте в обработку реквизит и вынесите его на форму, не нужно будет искать док программно - просто выберете его).
2. Прочитайте НаборЗаписей.
3. Перебирайте Набор( используйте "Для каждого ... Из ... Цикл"). Для каждой записи проверяйте ВидДоговора. Если "служба" - удаляйте запись из Набора.
4. Запишите НаборЗаписей.

Все должно получиться. Смотрите в СП, если непонятно - "Описание встроенного языка" или ищите примеры в других пособиях.
Включайте Отладчик - обращайте внимание на типы значений переменных.


ЗЫ. smile.gif По поводу "система ругается"... Радуйтесь, за переменную с именем "НаборЗаписей" в след раз и отшлепать может...
Genda
Zaval , большое спасибо за исчерпывающий ответ! Буду пробовать.
Vofka
Цитата(Zaval @ 02.10.12, 2:35) необходимо зарегистрироваться для просмотра ссылки
3. Перебирайте Набор( используйте "Для каждого ... Из ... Цикл")

А я бы посоветовал обходить набор записей с конца.
Genda
Zaval , еще раз большое спасибо, ваше детальное описание мне очень помогло. Но еще есть одна небольшая проблемка) Почему то не все записи удаляются с первого раза, приходится несколько раз запускать обработку. Можно ли решить это как-то?
Vofka
Проигнорировали пост №14? Ха-ха-ха.
Genda
Vofka , и вам спасибо;) учла ваш пост, все с первого раза теперь удаляется.
Zaval
Цитата(Genda @ 02.10.12, 9:59) необходимо зарегистрироваться для просмотра ссылки
Почему то не все записи удаляются с первого раза, приходится несколько раз запускать обработку.

smile.gif Упс! А как же код в посте 11? Я решил, что фишка с обратным перебором Вам уже известна.
Genda
То, что это является фишкой не знала) но теперь буду знать) еще раз всем спасибо за помощь
Vofka
Пояснение "фишки": необходимо зарегистрироваться для просмотра ссылки . Пусть вас не сбивает с толку, что там про ТЗ говорится, с набором записей дела обстоят так же.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.