Имя: Пароль:
1C
1С v8
Как выгрузить контактную информацию справочника контрагентов?
0 Damir
 
02.08.13
10:52
Ситуация в следующем. Есть база 1С БухгалтерияКОРП. 2.0 (2.0.46.8). В этой базе 10 штук "Организаций". Справочник Контрагентов общий для всех организаций. Привязка контрагентов к какой либо организации идет по реквизиту "Организация" в договоре. Необходимо написать правило которыое выгружало бы Контрагентов только по своей организации. Правило я написал. Выгружает. НО, выгружает всех подряд контрагентов, не различая их по привязке договоров. Помогите, где моя ошибка? В ПК ДоговорыКонтрагентов перед выгрузкой прописал:
Если НЕ Источник.Организация  = Неопределено Тогда
    Если    Источник.Организация <> Параметры.Организация Тогда
        Отказ = Истина;
    КонецЕсли;
Иначе
  Отказ = Истина;
КонецЕсли;

В ПК Контрагены в ПослеВыгрузки прописал
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ИСТИНА КАК Активность,
| КонтактнаяИнформация.Объект,
| КонтактнаяИнформация.Тип,
| КонтактнаяИнформация.Вид,
| КонтактнаяИнформация.Представление,
| КонтактнаяИнформация.Поле1,
| КонтактнаяИнформация.Поле2,
| КонтактнаяИнформация.Поле3,
| КонтактнаяИнформация.Поле4,
| КонтактнаяИнформация.Поле5,
| КонтактнаяИнформация.Поле6,
| КонтактнаяИнформация.Поле7,
| КонтактнаяИнформация.Поле8,
| КонтактнаяИнформация.Поле9,
| КонтактнаяИнформация.Поле10,
| КонтактнаяИнформация.Комментарий,
| КонтактнаяИнформация.ТипДома,
| КонтактнаяИнформация.ТипКорпуса,
| КонтактнаяИнформация.ТипКвартиры
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект");

Запрос.УстановитьПараметр("Объект", Источник);
Выборка = Запрос.Выполнить().Выбрать();
Сообщить(Выборка.Количество());
Пока Выборка.Следующий() Цикл
ВыгрузитьПоПравилу(Выборка, , , , "КонтактнаяИнформация");
КонецЦикла;

Что не так?
1 Damir
 
02.08.13
10:54
А да. Базы приемники точно такие же как база источник.
2 hhhh
 
02.08.13
10:58
(1) типовой обмен по организациям почему не используешь? Там в точности так, как ты хочешь. Всё сделано.
3 Damir
 
02.08.13
11:04
я дико извиняюсь, а где он лежит?
4 Damir
 
02.08.13
11:39
мне нужен именно правило обмена, для выгрузки только контрагентов и их реквизитов.
5 Мимохожий Однако
 
02.08.13
11:40
их общих правил флажков убери лишнее и оставь нужное
6 Шапокляк
 
02.08.13
11:40
Ну так перед выгрузкой надо проверять, есть ли у контрагента договор с нужной организацией и давать отлуп если нет такого.
7 hhhh
 
02.08.13
11:44
не, в 2.0 там без правил. Там кодом всё написано
8 Damir
 
02.08.13
11:48
(6) В ПК ДоговорыКонтрагентов перед выгрузкой прописал:
+ Code
Если НЕ Источник.Организация  = Неопределено Тогда
    Если    Источник.Организация <> Параметры.Организация Тогда
        Отказ = Истина;
    КонецЕсли;
Иначе
  Отказ = Истина;
КонецЕсли;
9 Damir
 
02.08.13
11:49
(5) Какие флажки?
10 hhhh
 
02.08.13
11:52
(9) в правилах выгрузки для справочника контрагентов поставь флажок отключить
11 Damir
 
02.08.13
12:06
(9) На всех полях Код, Наименование, Родитель, ИНН....?
12 Мимохожий Однако
 
02.08.13
12:14
Если уже успел выгрузить лишнее,то проще удалить лишнее, чем повторять процедуры с отбором по организации
13 Damir
 
02.08.13
12:23
(12) Нет, все испытывается в копиях. Просто такое надо будет делать периодический. Мы таким образом хотим добиться уникальности всех контрагентов во всех базах
14 Мимохожий Однако
 
02.08.13
12:54
Уникальность контрагентов определяется не принадлежность договора к организации, а ИНН, КПП или наименованием.
15 Шапокляк
 
02.08.13
13:10
(8) Ну хорошо, договоры не будут выгружены по чужой организации. Как это повлияет на выгрузку всех контрагентов?
16 Damir
 
02.08.13
13:10
(14) Ну чтоб и в организации "А" он назывался "Рога и Копыта Продакшен" и в организации "В", а не "Продакшен Рога  и Копыта", таких организаций штук 10
17 Damir
 
02.08.13
13:13
(15) В правилах есть параметр "Организация", Я хочу чтоб когда я установил организацию "А" у меня выгрузились только контрагенты(с контактной инфой) у которых есть договор с организацией "А"
18 Шапокляк
 
02.08.13
13:23
Т.е. вы в правиле для выгрузки договоров ограничиваете выгрузку договорами по организации и почему-то надеетесь, что и контрагенты не выгрузятся, которые по другому правилу выгружаются?
19 Damir
 
02.08.13
14:41
(18) что мне поправить?
20 Шапокляк
 
02.08.13
15:40
Вы можете в правиле для выгрузки именно КОНТРАГЕНТА организовать проверку, есть ли у него договор с организацией?
21 John83
 
02.08.13
16:51
а выгрузказагрузкахмл чем не нравится?
22 Damir
 
02.08.13
17:07
(21) Хочу в внешних обработках обработку сделать, бухгалтер заходит в него и нажимает кнопку "Получить контрагентов", и  контрагенты пришли
23 Damir
 
02.08.13
17:11
(20) В ПК Контрагентов "Перед выгрузкой" написал:

Запрос = Новый Запрос("
|ВЫБРАТЬ
|    ДоговорыКонтрагентов.Ссылка,
|    ДоговорыКонтрагентов.Владелец,
|    ДоговорыКонтрагентов.Организация
|ИЗ
|    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
|    ДоговорыКонтрагентов.Владелец = &Владелец
|    И ДоговорыКонтрагентов.Организация = &Организация");

Запрос.УстановитьПараметр("Владелец", Источник);
Запрос.УстановитьПараметр("Организация", Параметры.Организация);
Выборка = Запрос.Выполнить().Выбрать();
Сообщить(Параметры.Организация);
Если Выборка.Следующий() =  Ложь Тогда
        Отказ = Истина;
Конецесли;

Теперь если ручками через обмен XML делать все получается ))) Спасибо!!!
НО когда через внешнюю обработку пытаюсь то не грузит (((
Похоже Параметр.Организация не передается
24 Aprobator
 
02.08.13
17:16
(0) в ПК то нафига? Гораздо проще получить выборку в ПВД.
25 Aprobator
 
02.08.13
17:18
(23) а слабо из внешней обработки запустить универсальную?
26 Damir
 
02.08.13
17:21
ну так и делается
&НаСервере
Процедура ВыгрузитьНаСервере() Экспорт
    // Получим Универсальную обработку обмена данными XML
    мУниверсальнаяВыгрузкаДанных    = Обработки.УниверсальныйОбменДаннымиXML.Создать();

    // Получим из макета правила обмена данными
    УникальныйИдентификатор            = Новый УникальныйИдентификатор();
    ИмяВременногоФайлаПравилОбмена    = КаталогВременныхФайлов() + УникальныйИдентификатор + ".xml";

    ГСЧ = Новый ГенераторСлучайныхЧисел();
    
    ИмяФайлаВыгрузки = КаталогВременныхФайлов() + "ДокументыВХомнет" + ГСЧ.СлучайноеЧисло(0, 999) + ".xml";

    МакетПравилОбмена =ПолучитьМакет("ПравилоВыгрузкиКонтрагентов");
    
    Если МакетПравилОбмена = Неопределено Тогда
        Возврат;    
    КонецЕсли;
    
    МакетПравилОбмена.Записать(ИмяВременногоФайлаПравилОбмена);

    // Загрузка в универсальную обработку XML правил обмена
    БазаИсточник = ПодключениеКБазе();
    ВыгрузкаДанных = БазаИсточник.Обработки.УниверсальныйОбменДаннымиXML.Создать();
    ВыгрузкаДанных.РежимОбмена = "Выгрузка";
    //ВыгрузкаДанных.ЗагружатьДанныеВРежимеОбмена = Истина;
    //ЗагрузкаДанных.ИмяФайлаПравилОбмена = Истина;
    ВыгрузкаДанных.НеВыводитьНикакихИнформационныхСообщенийПользователю = Ложь;
    ВыгрузкаДанных.ИмяФайлаПравилОбмена = ИмяВременногоФайлаПравилОбмена;
    ВыгрузкаДанных.ЗагрузитьПравилаОбмена();
    ВыгрузкаДанных.ИмяФайлаОбмена = ИмяФайлаВыгрузки;
    ВременнаяТаблицаПравил = ВыгрузкаДанных.ТаблицаПравилВыгрузки.Скопировать();
    ВыгрузкаДанных.ТаблицаПравилВыгрузки    = ВременнаяТаблицаПравил.Скопировать();

   // ВыгрузкаДанных.Параметры.Организация = Организация;
    ВыгрузкаДанных.Параметры.Организация = БазаИсточник.Справочники.Организации.НайтиПоРеквизиту("ИНН", Организация.ИНН);

    
      ВыгрузкаДанных.ВыполнитьВыгрузку();

            
    // Удаляем временный файл правил и внешней обработки
    Попытка
        УдалитьФайлы(ИмяВременногоФайлаПравилОбмена);
    Исключение
        
    КонецПопытки;
    
    
    ЗагрузкаДанных = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    ЗагрузкаДанных.РежимОбмена = "Загрузка";
    ЗагрузкаДанных.ЗагружатьДанныеВРежимеОбмена = Истина;
    ЗагрузкаДанных.ОптимизированнаяЗаписьОбъектов = Истина;
    ЗагрузкаДанных.НеВыводитьНикакихИнформационныхСообщенийПользователю = Истина;
    ЗагрузкаДанных.ИмяФайлаОбмена = ИмяФайлаВыгрузки;
    ЗагрузкаДанных.ВыполнитьЗагрузку();

    Попытка
        УдалитьФайлы(ИмяФайлаВыгрузки);
    Исключение
    КонецПопытки;
    Сообщить("Успешно загрузили");
    
КонецПроцедуры
27 Aprobator
 
02.08.13
17:28
(26) Это что за народное творчество?
   ВыгрузкаДанных.Параметры.Организация = БазаИсточник.Справочники.Организации.НайтиПоРеквизиту("ИНН", Организация.ИНН);
У тебя выгрузка то идет с текущей базы?
28 Damir
 
02.08.13
17:29
нет, я подключаюсь в другую базу ((((
29 Damir
 
02.08.13
17:29
а как передать параметр?
30 Aprobator
 
02.08.13
17:31
(29) у тя походу тут COMОбъект в параметр попадает.
31 Damir
 
02.08.13
17:33
а как сделать чтоб "Организация" попадала в параметр выгрузки?
32 Aprobator
 
02.08.13
17:39
(31) попробуй так БазаИсточник.Параметры.Организация = БазаИсточник.Вычислить("Справочники.Организации.НайтиПоРеквизиту("ИНН", Организация.ИНН)");
33 Aprobator
 
02.08.13
17:40
иначе придется в обработке универсального обмена довешивать в модуле объекта экспортную процедуру. И вызывать ее с передачей туда ИНН, чтобы она уже в той базе сама параметр устанавливала.
34 Aprobator
 
02.08.13
17:46
(32) а да - ток вместо Организация.ИНН - там свое значение подставь сразу. А тоя упустил тут этот момент.
35 Михаил Козлов
 
02.08.13
17:51
(32) Вычислить-то зачем?
36 Aprobator
 
02.08.13
17:51
(35) выстрел немного наугад так сказать. ИМХО, спасет только экспортная процедура.
37 Damir
 
12.08.13
13:14
(36) А где его прописать?
38 Aprobator
 
12.08.13
13:19
(37) cv (33).
39 Aprobator
 
12.08.13
13:20
cv= см
40 Damir
 
12.08.13
13:56
где и как прописать эту экспортную процедуру?
41 Aprobator
 
12.08.13
13:57
как в модуле объекта экспортная процедура прописывается????
42 Damir
 
12.08.13
14:02
Процедура БлаБлаБла() Экспорт
....
КонецПроцедуры;
43 Aprobator
 
12.08.13
14:09
(42) только параметр ИНН забыл для процедуры указать, а так все норм.
44 Damir
 
12.08.13
15:40
Мне придется модуль УневерсальногоОбмена переделать?
45 hhhh
 
12.08.13
15:49
(18)(20) в типовой БП так и сделано. Именно проверяется наличие договора с этой организацией. И только тогда выгружается.
46 Damir
 
12.08.13
15:51
(45) Правило обмена у меня уже готова, теперь проблема в передачи параметра "Организация"
47 Aprobator
 
12.08.13
16:23
(44) вот какое слово в (33) непонятно было?
48 Damir
 
12.08.13
17:14
нехороший вариант
49 Aprobator
 
12.08.13
20:22
чем нехороший то? Одну процедуру вставить всего. И возни минут на 10. Можно, конечно, неделями искать решение.
50 m-serg74
 
12.08.13
21:09
(46) а чего не написать в ПВД:

Запрос = Новый Запрос("
|ВЫБРАТЬ
|    ДоговорыКонтрагентов.Ссылка,
|    ДоговорыКонтрагентов.Владелец,
|    ДоговорыКонтрагентов.Организация
|ИЗ
|    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
|    ДоговорыКонтрагентов.Владелец = &Владелец
|    И ДоговорыКонтрагентов.Организация.ИНН = 333333333");
51 m-serg74
 
12.08.13
21:10
ну или параметром в запрос ИНН передавать а не искать по ИНН организацию там
52 Aprobator
 
13.08.13
09:56
(51) +100500. Кстати, да, такой вариант я упстил.
53 Damir
 
13.08.13
16:17
(52)
ВыгрузкаДанных = БазаИсточник.Обработки.УниверсальныйОбменДаннымиXML.Создать();
    ВыгрузкаДанных.РежимОбмена = "Выгрузка";
    ВыгрузкаДанных.НеВыводитьНикакихИнформационныхСообщенийПользователю = Ложь;
    ВыгрузкаДанных.ИмяФайлаПравилОбмена = ИмяВременногоФайлаПравилОбмена;
    ВыгрузкаДанных.ЗагрузитьПравилаОбмена();
    ВыгрузкаДанных.ИмяФайлаОбмена = ИмяФайлаВыгрузки;
    ВременнаяТаблицаПравил = ВыгрузкаДанных.ТаблицаПравилВыгрузки.Скопировать();
    ВыгрузкаДанных.ТаблицаПравилВыгрузки    = ВременнаяТаблицаПравил.Скопировать();

    ВыгрузкаДанных.Параметры.Организация = ОрганизацияИНН;


Так похоже параметр не поставишь?
54 Damir
 
13.08.13
16:18
точнее
ВыгрузкаДанных.Параметры.ОрганизацияИНН = ОрганизацияИНН;
55 Damir
 
13.08.13
16:20
еще точнее
ВыгрузкаДанных.Параметры.ОрганизацияИНН = Организация.ИНН;
56 Aprobator
 
13.08.13
16:28
тебе сказали параметр сделай ИНН. А нахождение самой организации по ИНН прямо в правила закатай. Во ты тугой.
57 Damir
 
13.08.13
16:48
Все, спасибо ВСЕМ!!! Сделал так и все работает!

НоваяСтрока = ВыгрузкаДанных.ТаблицаНастройкиПараметров.Добавить();
    НоваяСтрока.Имя = "ОрганизацияИНН";
    НоваяСтрока.Наименование = "ИНН Организации";
    НоваяСтрока.Значение = Организация.ИНН;
    НоваяСтрока.ПередаватьПараметрПриВыгрузке = Ложь;
58 Damir
 
13.08.13
17:01
(56) Организации каждый раз будут разные, жестко фиксировать нельзя.
59 Aprobator
 
13.08.13
18:14
(58) чего фиксировать то? У всех Организаций один ИНН что ли?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн