Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Цикл и ПомеченУдаление()          
Redneck Подменю пользователя
сообщение 10.10.15, 18:39
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 25
Спасибо сказали: 2 раз
Рейтинг: 0

Добрый день!

Нужна небольшая помощь с кодом...
Сразу оговорюсь, в 1с-ке пока не силен.

В общем, сейчас дописываю стандартную обработку "обмен данными с Клиентбанком" для импорта банковских выписок из формата .csv в 1С-Бух(укр).
Основной функционал уже работает, но столкнулся с проблемой.

Из файла с банковской выпиской подтягивается ЕГРПОУ и сравнивается с ЕГРПОУ в Справочнике "Контрагенты", а уже оттуда в документ "Банковская выписка" подтягивается полное название контрагента.

В самом справочнике у бухов имеется несколько на элементов помеченных на удаление с прошлых лет.
И вот при совпадении ЕГРПОУ обработка выбирает "помеченный на удаление" элемент вместо нормального.

К сожалению, никак не разберусь сам, как правильно реализовать...
Пробовал разные варианты с циклами, условиями и прочее, но безуспешно. Спр.ПометкаУдаления() никак не срабатывает так, как мне надо.

Был бы очень благодарен, если кто-то подскажет, что мне поправить в коде:

            Если (Нашли = 1) и (Спр.ПометкаУдаления()=0) Тогда // нашли
                тВыписка.сКонтрагент = Спр.ТекущийЭлемент();
                тВыписка.Контрагент = СокрЛП(Спр.ТекущийЭлемент());      
            ИначеЕсли    (Спр.ПометкаУдаления()=1)  Тогда  
                Спр.ВыбратьЭлементы();
                        Пока Спр.ПолучитьЭлемент() = 1 Цикл        
                            Сообщить(Спр.ТекущийЭлемент());    
                            Сообщить(Спр.ПолучитьАтрибут(ТипРеквизитаОКПО));
                                Сообщить(ОКПО);
                            Если (Спр.ПолучитьАтрибут(ТипРеквизитаОКПО) = ОКПО) и (Спр.ПометкаУдаления()=0) Тогда
                                Сообщить(Спр.ПолучитьАтрибут(ТипРеквизитаОКПО));
                                Сообщить(ОКПО);    
                                тВыписка.сКонтрагент = Спр.ТекущийЭлемент();
                                    тВыписка.Контрагент = СокрЛП(Спр.ТекущийЭлемент());    
                                    Прервать;
                            Иначе  
            //    Сообщить(Спр.ТекущийЭлемент());    
                                Продолжить;                    
                            КонецЕсли;  
                        КонецЦикла;
                
            Иначе // не нашли (заполняем еще и тКонтрагенты)
                тВыписка.Контрагент = КонтрагентНаименование;
                тВыписка.Предупреждение = 3;
                ТКонтрагенты.НоваяСтрока();    
                ТКонтрагенты.НСтроки = ТКонтрагенты.НомерСтроки; // номер строки для связи с тВыписка
                ТВыписка.ссылкаНатКонтрагентов = ТКонтрагенты.НСтроки;
                ТКонтрагенты.фВкл = 2;
                // ОКПО - как получили из файла от клиент-банка
                ТКонтрагенты.ОКПО = СокрЛП(Сп.Получить("ОКПО"));
                ТКонтрагенты.Контрагент = КонтрагентНаименование;
                ТКонтрагенты.РСчет = РСчет;
                ТКонтрагенты.МФО = МФО;
                Если Метаданные.Справочник("Банки").Выбран() = 1 Тогда
                    СпрБ = СоздатьОбъект("Справочник.Банки");
                    Если СпрБ.НайтиПоКоду(МФО,0) = 1 Тогда
                        ТКонтрагенты.Банк = СокрЛП(СпрБ.ТекущийЭлемент());                            
                        ТКонтрагенты.сБанк = СпрБ.ТекущийЭлемент();
                    Иначе
                        ТКонтрагенты.Банк = Банк;  
                    КонецЕсли;
                Иначе
                    ТКонтрагенты.Банк = Банк;
                КонецЕсли;
            КонецЕсли;



Вот тут что-то не срабатывает, хотя вроде должно:
(Спр.ПолучитьАтрибут(ТипРеквизитаОКПО) = ОКПО)

Redneck Подменю пользователя
сообщение 11.10.15, 6:25
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 25
Спасибо сказали: 2 раз
Рейтинг: 0

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

Pepe Подменю пользователя
сообщение 11.10.15, 8:54
Сообщение #3

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1447
Из: Ужгород
Спасибо сказали: 762 раз
Рейтинг: 231

Метод ПометкаУдаления() должен работать.
Назначение:
Прочитать флаг пометки удаления элемента справочника.
Возвращает: 1 - если на элементе справочника стоит пометка удаления; 0 - иначе.
Если простой перебор элементов, то по условию пропускать или обрабатывать.

Спасибо сказали: Redneck,

volodya1122 Подменю пользователя
сообщение 11.10.15, 11:37
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 348
Из: Тернопіль
Спасибо сказали: 139 раз
Рейтинг: 141.7

При переборі вставити провірку на помітку видалення
Щось типу цього:
  Пока Спр.ПолучитьЭлемент() = 1 Цикл      
   Если Спр.ПометкаУдаления()=1 тогда
   Продолжить;    //в даному випадку помічені на видалення елементи не будуть перевірятись
   КонецЕсли:
  ..............

Спасибо сказали: Redneck,

Redneck Подменю пользователя
сообщение 11.10.15, 13:39
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 25
Спасибо сказали: 2 раз
Рейтинг: 0

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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 01.11.24, 2:18
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!