Имя: Пароль:
1C
1С v8
УРБД. Бухгалтерия КОРП. Банковские счета.
0 GalanEvgeny
 
13.02.13
07:37
Создал периферийную базу по правилу обмена = по организации. Не выгрузились банковские счета. Где смотреть?
1 GalanEvgeny
 
13.02.13
07:54
Не выгрузились счета контрагентов. Помогите!
2 kosts
 
13.02.13
08:00
(1) Перезапиши счет и попробуй обмен.
И смотри есть ли счета вообще в плане обмена
3 GalanEvgeny
 
13.02.13
08:08
Банковские счета входят в состав плана обмена с авторегистрацией = запрещать(это верно т.к. нам не надо счетов всех организаций, только контрагентов + по указанным организациям)
4 kosts
 
13.02.13
08:15
(3) Ну смотри, алгоритм регистрации счетов для обмена при записи счета, где-то что-то не срабатывает...
5 lion11
 
13.02.13
08:43
Банковские счета нужны по контрагентам или по самой организации?
6 GalanEvgeny
 
13.02.13
08:53
По контрагентам
7 GalanEvgeny
 
13.02.13
08:55
В справочнике "Банковские счета" в качестве владельца могут выступать как контрагенты, так и организации, поэтому авторегистрация=запретить
8 lion11
 
13.02.13
10:01
Попробуй для контрагента добавить Основной договор по данной организации, и сделай обмен.
9 GalanEvgeny
 
13.02.13
11:55
Такой способ получения банковского счета не подходит, т.к. обмен идет раз в час
10 Aleksey
 
13.02.13
11:58
А контрагенты выгрузились? Или вы правила меняли?
11 GalanEvgeny
 
13.02.13
12:36
Да, контрагенты выгрузились

В общем модуле ПроцедурыОбменаДаннымиПоОрганизации\процедура ДополнитьМассивУзловДляВыгрузкиСправочника
изменяю на след.:

Если ТипЭлемента = Тип("СправочникОбъект.БанковскиеСчета")
       ИЛИ ТипЭлемента = Тип("СправочникСсылка.БанковскиеСчета") Тогда
       
       // нужно определить владельца
       // если владелец не организация, тогда регистрируем изменения для всех узлов,
       // если организация, то только для тех узлов куда организация передается
       
       Владелец = ПолучитьЗначениеПараметраОбъектаИлиСсылки(Элемент, "Справочники", ТипЭлемента, "Владелец");
       
       Если ТипЗнч(Владелец) = Тип("СправочникСсылка.Организации") Тогда
           
           // только узлы с указанной организацией
           ДополнитьМассивУзламиПоОрганизации(МассивУзловДляПередачи, Владелец, СоответствиеУзловИОрганизаций);
           
           // {КОРП
           // обеспечивается выгрузка для всех.
           СсылкаНаГоловнуюОрганизация = Владелец;
           Если ЗначениеЗаполнено(СсылкаНаГоловнуюОрганизация) Тогда
               ДополнитьМассивПодчиненнымиОрганизациями(СсылкаНаГоловнуюОрганизация, МассивУзловДляПередачи, СоответствиеУзловИОрганизаций);
           КонецЕсли;        
           // }КОРП
           
       ИначеЕсли ТипЗнч(Владелец) = Тип("СправочникСсылка.Контрагенты") Тогда
           
       //    ДополнитьМассивУзламиПоСправочникуИПараметру("ДоговорыКонтрагентов", "Владелец",
       //        Владелец, МассивУзловДляПередачи, "Организация", СоответствиеУзловИОрганизаций, Истина);
       //        
       //Иначе
           
           // все узлы
           ОбеспечитьВыгрузкуОбъектаДляВсехУзлов(ВыгружатьДляВсехУзлов, ВозвращатьМассивВсехУзлов, МассивУзловДляПередачи);
           
       КонецЕсли;
       
   ИначеЕсли
12 GalanEvgeny
 
13.02.13
12:37
закомментировал, сделал новый тестовый образ - выгрузились только банковские счета контрагентов и организации которая указана для обиена, для 2-ой организации банковский счет остался на месте - так и надо было

//    ДополнитьМассивУзламиПоСправочникуИПараметру("ДоговорыКонтрагентов", "Владелец",

       //        Владелец, МассивУзловДляПередачи, "Организация", СоответствиеУзловИОрганизаций, Истина);

       //        

       //Иначе

           
           // все узлы
13 Aleksey
 
13.02.13
12:39
(12) попа будет
14 Aleksey
 
13.02.13
12:39
владелец есть у договора, соответственно будет выгружаться ВСЕ договора, но организаций там нет
15 GalanEvgeny
 
13.02.13
12:48
Для договоров контрагентов есть своя вилка в той же процедуре

ИначеЕсли ТипЭлемента = Тип("СправочникОбъект.ДоговорыКонтрагентов")
       ИЛИ ТипЭлемента = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда        
       
       СтруктураПараметров = Новый Структура("ЭтоГруппа, Организация", Ложь, Справочники.Организации.ПустаяСсылка());
       ЗаполнитьСтруктуруПараметровПоЭлементу(Элемент, "Справочники", ТипЭлемента, СтруктураПараметров);
       
       Если СтруктураПараметров.ЭтоГруппа Тогда
           
           // все узлы
           ОбеспечитьВыгрузкуОбъектаДляВсехУзлов(ВыгружатьДляВсехУзлов, ВозвращатьМассивВсехУзлов, МассивУзловДляПередачи);
           
       Иначе
       
           ДополнитьМассивУзламиПоОрганизации(МассивУзловДляПередачи, СтруктураПараметров.Организация, СоответствиеУзловИОрганизаций);    
           ДополнитьМассивПодчиненнымиОрганизациями(СтруктураПараметров.Организация, МассивУзловДляПередачи, СоответствиеУзловИОрганизаций);
           
       КонецЕсли;
       
   ИначеЕсли
16 lion11
 
13.02.13
12:57
Вот и я о чем - нужен договор. Можно было создать Договор, и перезаписать Контрагента и его банковский счет. И все бы пошло без изменения конф.
17 GalanEvgeny
 
13.02.13
12:59
Процедура ДополнитьМассивУзламиПоСправочникуИПараметру(ИмяСправочника, ИмяРеквизита,
   СсылкаНаСправочник, МассивУзловДляПередачи, ИмяРеквизитаОрганизации = "Организация", СоответствиеУзловИОрганизаций = Неопределено, ДополнятьПодчиненными = Ложь)
   
   Если СсылкаНаСправочник.Пустая() Тогда
       Возврат;
   КонецЕсли;
   
   РезультатЗапроса = ПолныеПрава.ПолучитьРезультатЗапросаПоВыборкеОрганизаций(ИмяСправочника, ИмяРеквизита, ИмяРеквизитаОрганизации, СсылкаНаСправочник);
   
   Если РезультатЗапроса.Пустой() Тогда
       
       ДополнитьМассивУзламиПоОрганизации(МассивУзловДляПередачи, Справочники.Организации.ПустаяСсылка(), СоответствиеУзловИОрганизаций);    
       
   Иначе
   
       МассивОрганизаций = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Организация");
       
       ДополнитьМассивУзламиПоОрганизации(МассивУзловДляПередачи, МассивОрганизаций, СоответствиеУзловИОрганизаций);
       
       Если ДополнятьПодчиненными Тогда
           ДополнитьМассивПодчиненнымиОрганизациями(МассивОрганизаций, МассивУзловДляПередачи, СоответствиеУзловИОрганизаций);
       КонецЕсли;
       
   Конецесли;
   
КонецПроцедуры



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

ункция ПолучитьРезультатЗапросаПоВыборкеОрганизаций(ИмяСправочника, ИмяРеквизита, ИмяРеквизитаОрганизации, СсылкаНаСправочник) Экспорт
   
   Запрос = Новый Запрос();
   Запрос.Текст = "ВЫБРАТЬ Различные
                  |    Спр." + ИмяРеквизитаОрганизации + " КАК Организация
                  |ИЗ
                  |    Справочник." + ИмяСправочника + " КАК Спр
                  |ГДЕ
                  |    Спр." + ИмяРеквизита + " = &СсылкаНаЭлемент";
                 
   Запрос.УстановитьПараметр("СсылкаНаЭлемент", СсылкаНаСправочник);
   
   Возврат Запрос.Выполнить();
   
КонецФункции
18 GalanEvgeny
 
13.02.13
12:59
Процедура ДополнитьМассивУзламиПоСправочникуИПараметру(ИмяСправочника, ИмяРеквизита,
   СсылкаНаСправочник, МассивУзловДляПередачи, ИмяРеквизитаОрганизации = "Организация", СоответствиеУзловИОрганизаций = Неопределено, ДополнятьПодчиненными = Ложь)
   
   Если СсылкаНаСправочник.Пустая() Тогда
       Возврат;
   КонецЕсли;
   
   РезультатЗапроса = ПолныеПрава.ПолучитьРезультатЗапросаПоВыборкеОрганизаций(ИмяСправочника, ИмяРеквизита, ИмяРеквизитаОрганизации, СсылкаНаСправочник);
   
   Если РезультатЗапроса.Пустой() Тогда
       
       ДополнитьМассивУзламиПоОрганизации(МассивУзловДляПередачи, Справочники.Организации.ПустаяСсылка(), СоответствиеУзловИОрганизаций);    
       
   Иначе
   
       МассивОрганизаций = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Организация");
       
       ДополнитьМассивУзламиПоОрганизации(МассивУзловДляПередачи, МассивОрганизаций, СоответствиеУзловИОрганизаций);
       
       Если ДополнятьПодчиненными Тогда
           ДополнитьМассивПодчиненнымиОрганизациями(МассивОрганизаций, МассивУзловДляПередачи, СоответствиеУзловИОрганизаций);
       КонецЕсли;
       
   Конецесли;
   
КонецПроцедуры


Функция ПолучитьРезультатЗапросаПоВыборкеОрганизаций(ИмяСправочника, ИмяРеквизита, ИмяРеквизитаОрганизации, СсылкаНаСправочник) Экспорт
   
   Запрос = Новый Запрос();
   Запрос.Текст = "ВЫБРАТЬ Различные
                  |    Спр." + ИмяРеквизитаОрганизации + " КАК Организация
                  |ИЗ
                  |    Справочник." + ИмяСправочника + " КАК Спр
                  |ГДЕ
                  |    Спр." + ИмяРеквизита + " = &СсылкаНаЭлемент";
                 
   Запрос.УстановитьПараметр("СсылкаНаЭлемент", СсылкаНаСправочник);
   
   Возврат Запрос.Выполнить();
   
КонецФункции
19 GalanEvgeny
 
13.02.13
13:03
Подставлю аргументы для запроса в функции ПолучитьРезультатЗапросаПоВыборкеОрганизаций

Поролучится следующее:

Запрос.Текст = "ВЫБРАТЬ Различные
                  |    Спр.Организация КАК Организация
                  |ИЗ
                  |    Справочник.ДоговорыКонтрагентов КАК Спр
                  |ГДЕ
                  |    Спр.Владелец = &СсылкаНаЭлемент";
                 
   Запрос.УстановитьПараметр("СсылкаНаЭлемент", СсылкаНаСправочник);
20 GalanEvgeny
 
13.02.13
13:03
т.е. банковские счета взялись только для тех организации у которых есть с ними договор
21 GalanEvgeny
 
13.02.13
13:04
с ними = той организации для которой сделан образ
22 GalanEvgeny
 
13.02.13
13:28
(16) Это не правильно т.к. и для последующих банковских счетов нужно создавать для этого контрагента мнимый договор.
Но все-равно большое спасибо :)
23 GalanEvgeny
 
13.02.13
13:29
(10) Контрагенты выгрузились - по ним правило было изменено
AdBlock убивает бесплатный контент. 1Сергей