Имя: Пароль:
1C
1С v8
Код прописан в подписке при записи
0 Sasha_uu
 
11.09.12
08:24
мФильтроватьОбмен = Ложь;
   Если Источник.Отбор.Найти("Регистратор")<>Неопределено Тогда
       мРегистратор = Источник.Отбор.Регистратор.Значение;
       мФильтроватьОбмен = Истина;
   ИначеЕсли Источник.Отбор.Найти("Объект")<>Неопределено Тогда
       Если Не (ТипЗнч(Источник.Отбор.Объект)=Тип("Строка")) Тогда
           Если ЗначениеЗаполнено(Источник.Отбор.Объект.Значение) Тогда
               Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Источник.Отбор.Объект.Значение.Ссылка)) Тогда
                   мРегистратор  = Источник.Отбор.Объект.Значение;
                   мФильтроватьОбмен = Истина;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   ИначеЕсли Источник.Отбор.Найти("ДокументСсылка")<>Неопределено Тогда
       мРегистратор = Источник.Отбор.ДокументСсылка.Значение;
       мФильтроватьОбмен = Истина;
   КонецЕсли;
       
   Если мФильтроватьОбмен Тогда                    
       Если ОбщегоНазначения.ЕстьРеквизитДокумента("Организация", мРегистратор.Метаданные()) Тогда
           Для Каждого Узел Из Источник.ОбменДанными.Получатели Цикл
               Если Узел.ПометкаУдаления Тогда
                   Продолжить;
               КонецЕсли;
               
               МассивОрганизаций = ПолучитьМассивОрганизаций(Узел);
               Если МассивОрганизаций.Количество()=0 Тогда
                   Продолжить;
               КонецЕсли;
               
               Если МассивОрганизаций.Найти(мРегистратор.Организация)=Неопределено Тогда
                   МассивУзловДляОтменыРегистрации.Добавить(Узел);
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
       
       Для СчМассива=0 По МассивУзловДляОтменыРегистрации.Количество()-1 Цикл
           Источник.ОбменДанными.Получатели.Удалить(МассивУзловДляОтменыРегистрации[СчМассива]);
       КонецЦикла;
   КонецЕсли;

Код фильтрующий обмен РИБ по организации. Оцените его.
1 Sasha_uu
 
11.09.12
08:43
ау, где все!!!
2 Defender aka LINN
 
11.09.12
08:47
(0) Че сказать-то хотел?
3 vde69
 
11.09.12
08:54
1. конструкции типа "Источник.Отбор.Объект.Значение.Ссылка" желательно оптимизировать, примерно так

мОтбор = Источник.Отбор;
мОбъект = мОтбор.Объект;
мСсылка = мОбъект.Значение.Ссылка;

и потом уже использовать переменные...

2.         Для СчМассива=0 По МассивУзловДляОтменыРегистрации.Количество()-1 Цикл
заменяем на цикл Для Каждого

3. коментов нет
4 Sasha_uu
 
11.09.12
09:09
(3) код нормально написан?
5 vde69
 
11.09.12
09:12
(4) в программисты я-бы тебя не взял с таким кодом, если только в ученики...
6 Sasha_uu
 
11.09.12
09:20
пока только учусь, (3)-только в этом улучшение видишь? как бы сам написал, мне просто интересно.
7 hhhh
 
11.09.12
09:27
(6) за этот код надо сразу расстреливать. Сделай организацию отдельным реквизитом регистра. НА лазий в регистраторы, обмен будет идти часами.
8 vde69
 
11.09.12
09:27
(6) структурно вроде все правильно (проверка необходимости---получение списка исключений---фильтрация), техническое исполнение страдает.

мелких ляпов много, например не стоит опиратся на отбор, получение метаданных лучше делать отдельно (для последующего расширения всяких проверок). Код трудно расширяемый, все заточено под конкретику, если в эту подписку захочешь впихнуть еще 5 проверок придется все переписывать...
9 Sasha_uu
 
11.09.12
16:02
(8) нужен отбор только по организации
10 acsent
 
11.09.12
16:03
сейчас все не так делается. сейчас модно делать чероез правила регистрации
11 Sasha_uu
 
11.09.12
16:07
(10) как с ними работать? Где они находятся? Можно поподробнее
12 zladenuw
 
11.09.12
16:09
(8) а если так

мФильтроватьОбмен = Ложь;
МассивОтбор = Новый Массив();
МассивОтбор.Добавить("Регистратор");
МассивОтбор.Добавить("Объект");
МассивОтбор.Добавить("ДокументСсылка");

Для каждого СтрОтбор Из МассивОтбор Цикл
   Если Источник.Отбор.Найти(СтрОтбор)<>Неопределено Тогда
       Если СтрОтбор <> "Объект" Тогда
           мРегистратор = Источник.Отбор[СтрОтбор].Значение;
           мФильтроватьОбмен = Истина;
       Иначе    
           мОтбор = Источник.Отбор;
           мОбъект = мОтбор.Объект;
           мСсылка = мОбъект.Значение.Ссылка;
           Если Не (ТипЗнч(мОбъект)=Тип("Строка")) Тогда
               Если ЗначениеЗаполнено(мОбъект.Значение) Тогда
                   Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(мСсылка)) Тогда
                       мРегистратор  = мОбъект.Значение;
                       мФильтроватьОбмен = Истина;
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;    
КонецЦикла;
13 acsent
 
11.09.12
16:10
смотри БСП, УТ 11
14 acsent
 
11.09.12
16:10
настраиваются через КД
15 Sasha_uu
 
11.09.12
16:13
(13) что такое БСП?
т.е. могу загрузить правила конвертации в план обмена и данные будут фильтроваться?
16 Sasha_uu
 
11.09.12
16:14
+1 читал что РИБ работает помимо этих правил
17 zladenuw
 
11.09.12
16:14
в правилах указываешь что да как и почем
18 Sasha_uu
 
11.09.12
16:28
у кого нибудь есть описание установки, настройки и работы с БСП, у меня доступа на сайт итс нету.
19 Sasha_uu
 
11.09.12
18:01
БСП это набор инструментов которые можно загрузить в конфигурацию 1С УПП и в дальнейшем использовать?
20 acsent
 
11.09.12
18:06
а что разве упп еще не юзает из бсп подсистему обмена?
21 Sasha_uu
 
11.09.12
18:16
по поводу обменов читал в упп, там нету такого параметра как обмен с фильтрами. немогу найти инфу в инете как это настроить
Программист всегда исправляет последнюю ошибку.