8.х Запись в регистр

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем rerewe, 11 янв 2013.

  1. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Привет,

    Подскажите пожалуйста,

    Пример кода:

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

    Как ускорить процесс записи в этот регистр? В данный момент на одного контрагента порядка 30-40 секунд :angry2:

    Если я не выполняю вот этот код:
    Код:
    АдресНаборЗаписей.Прочитать();
    
    то все отрабатывает в разу быстрее, но регистр затирается..

    Куда копать?
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а зачем кучу раз записывать в цикле? запишите данные 1 раз после цикла
  3. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Оу, логично все ТЗ пихнуть а потом записать в цикле, надо попробовать

    очепятна "*вне цикла"
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    может конечно меня уже клинит (пятница вечер все таки) но что вы вот тут получаете? Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;?

    в регистре у вас поле Вид какого типа?
  5. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    По моему с этим тож на тож выйдет
  6. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Представление
  7. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.980
    Симпатии:
    397
    Баллы:
    104
    У вас же набор. Это
    Код:
    АдресНаборЗаписей.Записать();
    делайте после цикла. И все будет гуд. Отладчик в помощь.
  8. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    что значит представление? судя по обращению жолжен быть СправочникСсылка.ВидыКонтактнойИнформации и думаю, что надо передавать ссылку на элемент справочника.... хотя, фиг знает как у вас там... но думаю что конструкция Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента; неправильная...

    я тоже самое предложила, ТС говорит не помогло...
  9. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    На сколько я понял записать после цикла мне нельзя, т.к. обрабатывается каждый контрагент и данные сохранятся только по последнему пройденному в цикле, или я туплю сам и путаю?

    Или контактная инфа по всем контрагентам запишется, а методом "Записать()" я запишу сразу всех в конце?
  10. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    то как вы записи определите (добавите) внутри цикла, те записи и запишутся, просто вы записываете в набор каждый раз причем дважды! внутри цикла, т.е. дергаете ваш большой регистр.
  11. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Сейчас происходит загрузка, выполняется быстро.
    АдресНаборЗаписей.Записать(); - за циклом
    Как закончится сообщу
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    1. Для чего читать весь РС? Есть отборы.
    2. Для чего его (РС) в данном случае (сужу по коду) вообще читать? Можно сразу писать. (либо дайте постановку задачи).
    3. Запись набора делать один раз после цикла
  13. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Если я не читаю, то при добавление записи в регистр затирается вся имеющаяся в нем информация, за исключением мной записанного

    Отбор нельзя поставить, т.к. не знаю еще кого буду добавлять, а кого нет
  14. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Кода в любом случае не вижу. Что такое Контрагент.Ссылка и откуда берется тоже не знаю.
    Не понял. И что?
    В чем проблема записывать набор записей только для тех, кого собираетесь добавлять? (тогда уже в цикле)
  15. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Все правильно!

    Во первых тупанул конкретно, что два раза пытался для записать набор причем в одном проходе цикла...

    Обработка выполнялась 20 минут, регистр не затерся, все добавлено корректно, при чем заказы с разных проектов за период в месяц! Раньше в моей фирме руководители мучались с этим, одним день грузился 2-4 часа. Вот такая вот разница...

    Всем спасибо!)

    после цикла т.е. "Прочитать()" ?
  16. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    ?

    Код:
    АдресНаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    
    Для Каждого Элемент Из Массив Цикл
    // ... в цикле выполняю все действия
    //...
    //...
    //Добавление контактной информации
    Если КонтактнуюИнформациюКонтрагентаНадоЗаписать Тогда
    АдресНаборЗаписей.Отбор.Объект.Установить(Контрагент.Ссылка);
    Адрес = АдресНаборЗаписей.Добавить();
    Адрес.Объект = Контрагент.Ссылка;
    Адрес.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
    Адрес.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
    Адрес.Представление = Элемент.Телефон;
    Адрес = АдресНаборЗаписей.Добавить();
    Адрес.Объект = Контрагент.Ссылка;
    Адрес.Тип = Перечисления.ТипыКонтактнойИнформации.Другое;
    Адрес.Вид = Справочники.ВидыКонтактнойИнформации.ДругаяИнформацияКонтрагента;
    Адрес.Представление = Элемент.Емайл;
    АдресНаборЗаписей.Записать();
    АдресНаборЗаписей.Очистить();
    КонецЕсли;
    
    КонецЦикла
  17. TopicStarter Overlay
    rerewe
    Offline

    rerewe

    Регистрация:
    23 ноя 2012
    Сообщения:
    49
    Симпатии:
    0
    Баллы:
    1
    Да и так хорошо работает
    Код:
    АдресНаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
    АдресНаборЗаписей.Прочитать();
    Для Каждого Элемент Из Массив Цикл
    // ... в цикле выполняю все действия
    //...
    //...
    //Добавление контактной информации
    Адрес = АдресНаборЗаписей.Добавить();
    Адрес.Объект = Контрагент.Ссылка;
    Адрес.Вид = Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента;
    Адрес.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон;
    Адрес.Представление = Элемент.Телефон;
    Адрес = АдресНаборЗаписей.Добавить();
    Адрес.Объект = Контрагент.Ссылка;
    Адрес.Тип = Перечисления.ТипыКонтактнойИнформации.Другое;
    Адрес.Вид = Справочники.ВидыКонтактнойИнформации.ДругаяИнформацияКонтрагента; 
    Адрес.Представление = Элемент.Емайл;
    //...
    //...
    КонецЦикла
    АдресНаборЗаписей.Записать();

Поделиться этой страницей