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

Хранилище

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

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



> Непонятки при записи в регистр сведений , РегистрСведений.КонтактнаяИнформация          
bizisoft Подменю пользователя
сообщение 31.07.13, 13:46
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Здравствуйте.

Подскажите пожалуйста что я делаю не так:
Есть обработка, которая берет данные из ТиС 7.7 и записывает их в Бухгалтерию 8.2.
Проблема у меня возникла именно в 1С 8.2 Бухгалтерия для Украины 1.2, на этапе записи контактной информации (Юридический адрес контрагента, Телефон контрагента) в РегистрСведений.КонтактнаяИнформация.
...
    НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Объект.Установить(Ссылка77); //Ссылка77 - ссылка на контрагента
    НаборЗаписей.Прочитать();
    Для каждого Запись из НаборЗаписей Цикл    
        Если Запись.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента Тогда
            Запись.Представление = СтрАдрес;
        КонецЕсли;               
        Если Запись.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента Тогда
            Запись.Представление = СтрТелефон;
        КонецЕсли;  
    КонецЦикла;  
    НаборЗаписей.Записать();
...

Заметил такую особенность - если у контрагента не заполнены представления для "Юредический адрес контрагента" и "Телефон контрагента", то эти позиции не запишуться, а если они заполнены, то тогда представление записывается/изменяется.

Два дня бьюсь над этой мелочью - никак решить не могу, поиск не помогает.

С Уважением, Дмитрий.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

Vofka Подменю пользователя
сообщение 31.07.13, 14:13
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Надо ещё Тип указывать.

bizisoft Подменю пользователя
сообщение 31.07.13, 14:35
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

А можно уточнить, тип указывать в условии или в отборе?


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

Vofka Подменю пользователя
сообщение 31.07.13, 14:42
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Это зависит от логики. Потелепатировав немножко, я думаю, что ваш вариант должен выглядеть как-то так:

НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Ссылка77); //Ссылка77 - ссылка на контрагента
НаборЗаписей.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Адрес);
НаборЗаписей.Прочитать();
Для каждого Запись из НаборЗаписей Цикл    
    Если Запись.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента Тогда
        Запись.Представление = СтрАдрес;
    КонецЕсли;              
КонецЦикла;  
НаборЗаписей.Записать();

НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Ссылка77); //Ссылка77 - ссылка на контрагента
НаборЗаписей.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Телефон);
НаборЗаписей.Прочитать();
Для каждого Запись из НаборЗаписей Цикл    
    Если Запись.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента Тогда
        Запись.Представление = СтрТелефон;
    КонецЕсли;              
КонецЦикла;  
НаборЗаписей.Записать();

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

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Да я так уже пробовал, но безрезультатно.

Сделал вот так
...
НаборЗаписей.Прочитать();
Сообщить(НаборЗаписей.Количество());
Для каждого Запись из НаборЗаписей Цикл  
...

Результат "0", т.е. получается в цикл даже не заходим и соответственно ничего и не меняется.

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

Так выгладит изначально таблица контактной информации (все записи серые - неактивные)
Тип                          Вид                    Представление
Адрес         Юридический адрес контрагента
Телефон        Телефон контрагента

После добавление
Тип                          Вид                    Представление
Адрес         ЮрАдресКонтрагента                            Здесь адрес
Адрес         Юридический адрес контрагента       А тут по прежнему пусто
Телефон        Телефон контрагента

Что-то я упускаю, а что не пойму.
Да кстати обработка регистра сведений происходит в процедуре внутри ф-ции Функция НайтиСоздатьКонтрагента(Ссылка77)
        // Создадим новый, если элемент не найден.  
    Если Найден = 0 Тогда
        Клиент = Справочники.Контрагенты.СоздатьЭлемент();    
        //Клиент.Код = Ссылка77.Код;
    КонецЕсли;      
    //перезаполним данные в карточке
        Клиент.Наименование  =  Ссылка77.Наименование;
    Клиент.НаименованиеПолное = Ссылка77.ПолнНаименование;
    Клиент.ИНН = СокрЛП(Ссылка77.ИНН);
    Клиент.КодПоЕДРПОУ = Ссылка77.ЕГРПОУ;
    Клиент.НомерСвидетельства = Ссылка77.НомерСвидетельства;
    Клиент.Родитель = Справочники.Контрагенты.НайтиПоНаименованию(Ссылка77.Родитель.Родитель.Наименование);

// вот здесь располагается код по работе с регистром сведений

        Если Ссылка77.ВидКонтрагента.Идентификатор() = "ЧастноеЛицо" Тогда
        Клиент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;
        Клиент.ДокументУдостоверяющийЛичность = "Паспорт серия "+СокрЛП(Ссылка77.ДокументСерия)+" номер "+(Ссылка77.ДокументНомер) +" выдан "+СокрЛП(Ссылка77.ДокументДатаВыдачи)+""+СокрЛП(Ссылка77.ДокументКемВыдан);
    Иначе
        Клиент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
    КонецЕсли;         
    Клиент.Комментарий = "Импортирован из 7.7";    
    Клиент.Записать();     
// Пробовал и после записи контрагента/клиента вставлять код - тоже ноль

С Уважением, Дмитрий.

Все разобрался, получилось таким образом (добавил условие на количество и если = 0, то просто добавляю новые)
    ...
    Клиент.Записать();     
    НаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Объект.Установить(Клиент.Ссылка);
    НаборЗаписей.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Адрес);
    НаборЗаписей.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
    НаборЗаписей.Прочитать();
    НаборЗаписей.Записывать = истина;      // не уверен что это здесь нужно, просто забыл убрать от прежних экспериментов, но т.к. не мешает убирать не буду
    Если НаборЗаписей.Количество() > 0 Тогда
        Для каждого Запись из НаборЗаписей Цикл
            Если Запись.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента Тогда
                Запись.Представление = Ссылка77.ЮридическийАдрес;
            КонецЕсли;
        КонецЦикла;               
    Иначе
        НовСтр = НаборЗаписей.Добавить();
        НовСтр.Объект = Клиент.Ссылка;
        НовСтр.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
        НовСтр.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
        НовСтр.Представление = Ссылка77.ЮридическийАдрес;
    КонецЕсли;  
    НаборЗаписей.Записать();
    ...

Теперь наверное лучше вынесу это в отдельную функцию/процедуру :-)

Спасибо, Vofka, диалог с Вами способствовал зарождению верной мысли
С Уважением, Дмитрий.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

mister-x Подменю пользователя
сообщение 31.07.13, 17:03
Сообщение #6

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1422 раз
Рейтинг: 0

я цим колись займайвся wink.gif http://pro1c.org.ua/index.php?showtopic=12192

bizisoft Подменю пользователя
сообщение 01.08.13, 10:49
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Цитата(mister-x @ 31.07.13, 18:03) *
я цим колись займайвся wink.gif http://pro1c.org.ua/index.php?showtopic=12192

Спасибо, но я не вижу смысла в использовании EvalExpr, т.к. через ОЛЕ я и так получаю строку адреса, которую и помещаю в регистр.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

mister-x Подменю пользователя
сообщение 02.08.13, 14:46
Сообщение #8

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1422 раз
Рейтинг: 0

напевне у вас ТіС не рос., в рос. стрічку адреса потрібно трансформувати

Сообщение отредактировал mister-x - 02.08.13, 14:47

Vofka Подменю пользователя
сообщение 02.08.13, 15:35
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

Цитата(mister-x @ 02.08.13, 15:46) *
напевне у вас ТіС не рос.

И подозреваю, что не для Казахстана... 64000000.gif

Сообщение отредактировал Vofka - 02.08.13, 15:35

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


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

 

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