Имя: Пароль:
1C
1С v8
Справочник контрагенты-не записывается ТЧ Менеджеры Покупателя
,
0 amadeus2010
 
01.11.13
11:58
Добрый день создал обработку которая автоматом заполняет справочник Контрагенты. Только проблема в том что не заполняется ТЧ менеджеры покупателя.Вот код
//////////////////////////////////////////////////////////////
    Спр = Справочники.Контрагенты.СоздатьЭлемент();
    //Спр.Код=Строка.Код;
    Спр.Наименование = Строка.ShopName;
    Спр.НаименованиеПолное=Строка.ShopName;
    Спр.Покупатель = Истина;
    Спр.ИНН =Строка.НомерМаршрута;
    Спр.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
    Спр.Подразделение=Справочники.Подразделения.НайтиПоНаименованию(Строка.Filial).Ссылка;
    Спр.Родитель =Группа.Ссылка;
    Спр.Комментарий = Строка.ContactPerson + ";";
    
    Стр =Спр.ОсновнойМенеджерПокупателя.МенеджерыПокупателя.Добавить();
    Стр.МенеджерПокупателя = Справочники.ФизическиеЛица.НайтиПоНаименованию(Строка.Salesman).Ссылка;
    Спр.Записать();
////////////////////////////////////////////////////////////////
1 Зойч
 
01.11.13
12:00
Стр =Спр.ОсновнойМенеджерПокупателя.МенеджерыПокупателя.Добавить();
ЧТО ЭТО???
2 amadeus2010
 
01.11.13
12:06
(1) извиняюсь вот так должно быть
Стр =МенеджерыПокупателя.Добавить();
    Стр.МенеджерПокупателя = Строка.Salesman;
    Спр.Записать();
3 Рамиль Маугли
 
01.11.13
12:06
(0) (1) И поиск по наименованию рулит.
4 amadeus2010
 
01.11.13
12:13
(3) в том и дело что при таком коде строка не записывается
Стр =МенеджерыПокупателя.Добавить();
Стр.МенеджерПокупателя = Справочники.ФизическиеЛица.НайтиПоНаименованию(Строка.Salesman).Ссылка;
проверял отладчиком
5 hhhh
 
01.11.13
12:14
(4) не так должно быть. Бред не пишите.
6 amadeus2010
 
01.11.13
12:18
(5) в принципе Строка Менеджер покупателя имеет ссылку на справочник Пользователи, подскажите как должно быть
7 bugz2003
 
01.11.13
12:20
тебе надо соответствие физ.лицо - пользователь, обычно в пользователе есть реквизит физ.лицо. НайтиПоРеквизиту надо
8 bugz2003
 
01.11.13
12:21
Стр.МенеджерПокупателя = Справочники.ФизическиеЛица.НайтиПоРеквизиту("ФизЛицо",Строка.Salesman)
9 bugz2003
 
01.11.13
12:22
тоесть

Стр.МенеджерПокупателя = Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо",Строка.Salesman)
10 hhhh
 
01.11.13
12:26
(6) ну так может

Стр =Спр.МенеджерыПокупателя.Добавить();
11 amadeus2010
 
01.11.13
12:40
(9) сейчас пройдусь отладчиком еще раз, спасибо за совет
12 amadeus2010
 
01.11.13
13:06
(9) прошелся отладчиком, поле все равно остается пустым
Стр =Спр.МенеджерыПокупателя.Добавить();
    Стр.МенеджерПокупателя = Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо",Строка.Salesman);
    Спр.Записать();
13 amadeus2010
 
01.11.13
13:22
есть в справочнике Контрагенты еще реквизит Основной менеджер покупателя, который устанавливается при нажатии кнопки Установить основным,может его тоже включить в обработку

Спр.ОсновнойМенеджерПокупателя = Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо",Строка.Salesman);
14 amadeus2010
 
01.11.13
13:28
есть какие нибудь еще предложения?
15 amadeus2010
 
01.11.13
14:52
по идее код в (12) должен сработать, так как есть список физ лиц и пользователей в базе, так что надо добавить только новых контрагентов и привязать их к менеджерам.
16 amadeus2010
 
01.11.13
16:11
есть кто-нибудь испробовал все варианты,даже давал поиск по справочнику Физические лица, результат пустое значение в строке Менеджер покупателя. Вот код целиком
////////////////////////////////////////////////////////
Таб = Номенклатура.Выгрузить(Новый Структура("Пометка", Истина));
ПоСтрокам = 1;
КоличествоИспользуемыхСтрок = Номенклатура.Количество();
    
КодГруппы = "000001169";
ПоискПоПолномуКоду = Ложь; // значение по умолчанию
Группа = Справочники.Контрагенты.НайтиПоКоду(КодГруппы, ПоискПоПолномуКоду);

Если Группа.Пустая() Тогда
    Группа = Справочники.Контрагенты.СоздатьГруппу();
    Группа.Код = КодГруппы;
    Группа.Наименование = Справочники.Контрагенты.НайтиПоНаименованию("2-Bakmil Filial?");
    Группа.ЭтоГруппа = Истина;
    Группа.Записать();
ИначеЕсли Не Группа.ЭтоГруппа Тогда
    Сообщить("Найден элемент справочника с указанным кодом!");
    
    // Предусмотреть прерывание алгоритма.
КонецЕсли;


Для Каждого Строка Из Таб Цикл
    ПоСтрокам = ПоСтрокам + 1;
    Если Строка.Пометка Тогда


    Спр = Справочники.Контрагенты.СоздатьЭлемент();
    //Спр.Код=Строка.Код;
    Спр.Наименование = Строка.ShopName;
    Спр.НаименованиеПолное=Строка.ShopName;
    Спр.Покупатель = Истина;
    Спр.ИНН =Строка.НомерМаршрута;
    Спр.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицо;
    Спр.Подразделение=Справочники.Подразделения.НайтиПоНаименованию(Строка.Filial).Ссылка;
    Спр.Родитель =Группа.Ссылка;
    Спр.Комментарий = Строка.ContactPerson + ";";
    
    Стр =Спр.МенеджерыПокупателя.Добавить();
    Стр.МенеджерПокупателя = Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо",Строка.Salesman);
    Спр.Записать();
      

    Договор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
    Договор.ТипЦен =Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Standart Qiym?t").Ссылка;
    Договор.Владелец =Спр.Ссылка;
    Договор.Организация = Справочники.Организации.НайтиПоНаименованию("Crocus").Ссылка;
    Договор.Наименование = "?sas M?qavil?";
    Договор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
    Договор.ВидУсловийДоговора = Перечисления.ВидыУсловийДоговоровВзаиморасчетов.БезДополнительныхУсловий;
    Договор.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
    Договор.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду(944).Ссылка;
    Договор.КонтролироватьСуммуЗадолженности = Истина;
    Договор.КонтролироватьЧислоДнейЗадолженности = Истина;
    Договор.ВестиПоДокументамРасчетовСКонтрагентом = Истина;
    Договор.ДопустимаяСуммаЗадолженности = 0;
    Договор.ДопустимоеЧислоДнейЗадолженности = 0;
    Договор.Дата = ТекущаяДата();
    Договор.Записать();
    
    
        
    РегистрАдрес = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
    РегистрАдрес.Объект = Спр.Ссылка;
    РегистрАдрес.Представление = Строка.Address;
    РегистрАдрес.Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента;
    РегистрАдрес.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
    РегистрАдрес.Записать();
    
    РегистрТелефон = РегистрыСведений.КонтактнаяИнформация.СоздатьМенеджерЗаписи();
    РегистрТелефон.Объект = Спр.Ссылка;
    РегистрТелефон.Поле3 = Строка.Mob;
    
    РегистрТелефон.Представление =Строка.Mob;
    РегистрТелефон.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
    РегистрТелефон.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
    РегистрТелефон.Записать();
    

    Спр.ОсновнойДоговорКонтрагента = Договор.Ссылка;


    
   КонецЕсли;
КонецЦикла;
/////////////////////////////////////////////////////////
может что-то недоглядел
17 Aleks73
 
01.11.13
16:13
Продам отладчик. Недорого.
18 amadeus2010
 
01.11.13
16:15
(17) отладчиком я и сам проверял, строка менеджер покупателя пустая не заполняется
19 Aleks73
 
01.11.13
16:16
(18) Пригласите специалиста.(С) (Он поймет, почему данные есть, но не заполняются.)
20 amadeus2010
 
01.11.13
16:25
(19) специалист не вариант,так по коду все нормально? нет пробелов
21 Aleks73
 
01.11.13
16:30
(20) Не видя базу, нельзя оценить код...может справочник изменен и длина реквизита не соответствует...100500 вариантов.
22 amadeus2010
 
01.11.13
16:36
(21) если бы длина кода была меньше строки из екселя то хотя бы часть имени отображалась, а так пусто будто нет такого реквизита
23 amadeus2010
 
01.11.13
16:42
справочник не измененен
24 Aleks73
 
01.11.13
16:51
(23) Таблица сильно левая значит справочник номенклатура изменен или это даже не справочник а НиктоНеЗнаетЧто
25 Aleks73
 
01.11.13
16:53
(22) Вряд ли в пятницу вечером кто-то будет по тимвьюверу бесплатно копаться в твоей конфиге в поисках косяков. А я чувствую есть косяки.
26 amadeus2010
 
01.11.13
16:54
(24)а причем здесь справочник номенклатура, мне надо заполнить Контрагенты, вернее его ТЧ Менеджеры
27 Aleks73
 
01.11.13
16:54
(26)

Таб = Номенклатура.Выгрузить(Новый Структура("Пометка", Истина));
28 amadeus2010
 
01.11.13
17:07
(27) а причем здесь Номенклатура еще раз повторяюсь. В принципе до меня эту базу расковырял один программист,теперь понадобилось создать обработку по загрузке новых контрагентов,попросили сделать это меня, вот и ковыряюсь. Такое ощущение что данные просто не отображаются
29 Aleks73
 
01.11.13
17:13
(28) см. (19)
30 Aleks73
 
01.11.13
17:13
(29) Да, совсем забыл...скупой платит дважды.
31 amadeus2010
 
01.11.13
17:25
(30) дело не в скупости, надо не сориться с прежнем программистом, а потом просить других чтобы выполнили работу.
32 Aleks73
 
01.11.13
17:35
(31) = (30) ...или выкинули его любимую чашку для кофе ? ж;-)
33 hhhh
 
01.11.13
17:35
а Строка.Salesman это что такое? В отладчике что показывает?
34 amadeus2010
 
01.11.13
17:42
(33) это строка и есть менеджер контрагента. В отладчике видит только это Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо",Строка.Salesman); а саму Стр.МенеджерПокупателя не видит
35 amadeus2010
 
01.11.13
17:43
сейчас еще раз проверю
36 D_E_S_131
 
01.11.13
17:48
"...так по коду все нормально? нет пробелов"

1)
Если НЕ Строка.Пометка Тогда
   Продолжить;
КонецЕсли;

2) У метода справочника "НайтиПоНаименованию" есть второй интересный параметр, который бы не плохо ставить "Истина", если нужно найти элемент точно по заданной строке (а то "Филиал1" не будет отличаться от "Филиал10" или "Филиал100").

3) Вообще при любых поисках не плохо бы проверять результат поиска прежде чем назначать найденное реквизитам (аналогично как сделано у вас при поиске Группы).

4) Если у справочника "Пользователи" реквизит ФизЛицо это справочник, то не найдете вы его по строке "Salesman". С начала надо найти элемент справочника "ФизЛица", а уже потом искать элемент справочника "Пользователи" по найденному физ.лицу.
37 amadeus2010
 
01.11.13
18:04
(36) Справочник Пользователи ссылается по реквизиту на спр.Физические Лица, там есть эти пользователи уже,просто Менеджерам привязали Контрагентов и заново надо загрузить
38 amadeus2010
 
01.11.13
18:06
(36) не совсем понял по пункту 4
39 hhhh
 
01.11.13
18:07
(38) ну строка Salesman или не строка? Может число? Или Дата?
40 D_E_S_131
 
01.11.13
18:18
(38) Ок, развел на код

НазначатьМенеджера = Ложь;

ФЛ = Справочники.ФизЛица.НайтиПоНаименованию(Строка.Salesman, Истина);

Если ФЛ = Неопределено Тогда
   Сообщить("Не задано имя менеджера!");
ИначеЕсли ФЛ.Пустая() Тогда
   Сообщить("Не найден менеджер «" + Строка.Salesman + "»");
Иначе
   НазначатьМенеджера = Истина;
КонецЕсли;

Если НазначатьМенеджера Тогда
   ПЛ = Справочники.Пользователи.НайтиПоРеквизиту("ФизЛицо", ФЛ);

   НазначатьМенеджера = НЕ ПЛ.Пустая();
КонецЕсли;

Если НазначатьМенеджера Тогда

   НовМенеджер = Спр.МенеджерыПокупателя.Добавить();
   НовМенеджер.МенеджерПокупателя = ПЛ;

   Спр.ОсновнойМенеджерПокупателя = ПЛ;
КонецЕсли;

Спр.Записать();
41 amadeus2010
 
01.11.13
18:26
(40) большое спасибо
42 D_E_S_131
 
01.11.13
18:30
Дальше при создании договора - везде после НайтиПоНаименованию(), НайтиПоКоду() не нужно ставить ".Ссылка". Эти методы и так возвращают ссылки, если успешно найдено значение. И так же не плохо бы проверять ищется там что-нибудь или нет, а то так же будете недоумевать "А чего не заполняется?".
43 amadeus2010
 
01.11.13
18:34
(42) спасибо, учту ваши советы, все кроме менеджера покупателя заполнялось, вышла заковырка только с ним
44 amadeus2010
 
01.11.13
18:51
сейчас прогнал обработку вышли сообщения что таких пользователей как они указаны в ексель файле нет.
45 amadeus2010
 
01.11.13
20:19
дополнительно, как можно сделать проверку, что если запись существует,то перейти к записи нового контрагента на примере
Спр.Наименование = Строка.ShopName;