Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » 1C Программирование и поддержка

Модерирует : ShIvADeSt

ShIvADeSt (30-10-2009 09:51): http://forum.ru-board.com/topic.cgi?forum=33&topic=10715  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тема для программирования 1С!!!
Это продолжение темы, предыдущие части доступны тут


ПРОГРАММЫ  1С:Предприятие 1C - 1C: Вопросы по конфигурациям

ВАРЕЗНИК   1C:Предприятие 7.7 - 1С:Предприятие v.8.x - 1C Диск ИТС - 1С: Совместимо 8.х

Топик 1C Ebooks
ЗДЕСЬ  (обновлено 17.10.2009) - небольшая библиотечка (книги, документация, видео, утилиты) по 1С, финансам, бухучету и т.п.
Все рассортировано по версиям...


Для заблудившихся в трех соснах >>> FAQ по форуму RU.Board
 
Предыдущие темы были здесь часть 4 | часть 3 | часть 1
 
Как убить рекламу при обновлении отчетности | конфигурации (ИБ)?

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:02 03-04-2009 | Исправлено: vkramnik, 12:06 23-10-2009
t4z1k

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
---

Всего записей: 8 | Зарегистр. 18-01-2009 | Отправлено: 10:13 21-05-2009 | Исправлено: t4z1k, 10:50 21-05-2009
egerLESHIK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
t4z1k
 
А при чем тут топик по программированию?

Всего записей: 950 | Зарегистр. 24-03-2004 | Отправлено: 10:24 21-05-2009
t4z1k

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Направьте плиз)

Всего записей: 8 | Зарегистр. 18-01-2009 | Отправлено: 10:26 21-05-2009
vkramnik



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
21.05.2009
В 1С-Ebooks-библиотечке очередные обновления и дополнения, в том числе :
 
Раздел 1С-Programming :
NEW - 1C v77 - 1С-Предприятие - Практика программирования на платформе v7 (Н.Н.Колпинский)
 
Ссылки - ЗДЕСЬ, пасс - стандартный

Всего записей: 1850 | Зарегистр. 14-12-2005 | Отправлено: 11:39 21-05-2009
ringvault

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Господа, загружаю справочник номенклатура из ДБФки в 7.7  
в дбфке 300000 записей и загружается у меня все это очень долго, 50к загружается около 10 часов. Если перевести базу в SQL будет быстрее? как еще можно ускорить?

Всего записей: 96 | Зарегистр. 29-08-2007 | Отправлено: 12:57 21-05-2009
vizlipuzli

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ringvault
На SQL быстрее не будет.
Что за обработка загрузки? Монопольно работаете? Алгоритм загрузки оптимальный? Под отладчиком пробовали замер производительности включать, чтобы определить проблемный участок кода? У меня, например, на C2D E6850 2Гб ОЗУ загрузка данных из ДБФ с парой десятков полей из 5000 записей занимает несколько секунд.

Всего записей: 4038 | Зарегистр. 17-08-2005 | Отправлено: 14:08 21-05-2009
ringvault

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Работаю монопольно, ниже модуль загрузки. Отладчиком не пробовал замерять
 
//*******************************************
Процедура Загрузить()
    НомГ = СоздатьОбъект("Справочник.Номенклатура");
 
    Ном = СоздатьОбъект("Справочник.Номенклатура");
    Ед  = СоздатьОбъект("Справочник.ЕдиницыИзмерений");
    ф.Первая();
    Для п = 1 По ф.КоличествоЗаписей() Цикл        
            Состояние("Загружено записей: "+п +" из "+ф.КоличествоЗаписей()+".");
            КодГруппы    = ф.ПолучитьЗначениеПоля("GRUP");
            КодЭл        = ф.ПолучитьЗначениеПоля("NNUM");
            Наименование = ф.ПолучитьЗначениеПоля("NAME");
            Единица         = ф.ПолучитьЗначениеПоля("ED");
            Цена         = ф.ПолучитьЗначениеПоля("CENA");
            Валюта         = ф.ПолучитьЗначениеПоля("CODEVAL");
    
    
    
            Ном.Новый();
            Если НомГ.НайтиПоКоду(КодГруппы,0)=1 тогда
                Ном.Родитель = НомГ.текущийЭлемент();
            КонецЕсли;
            Ном.Артикул = КодЭл;
            Ном.Наименование = Наименование;
            Ном.ПолнНаименование = Наименование;
            Ном.ТипТовара = Перечисление.ТипыТоваров.Собственный;
            Если Ед.НайтиПоНаименованию(Единица,0,0)=1 тогда
                Ном.ЕдиницаИзмерения = Ед.ТекущийЭлемент();
            Иначе
                Ном.ЕдиницаИзмерения = Константа.ОсновнаяЕдиницаИзмерения;
            КонецЕсли;        
    
            Ном.ПорядокХраненияОтпускнойЦены = 2;
            Ном.Цена = Число(Цена);
            Ном.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар;
            Ном.Записать();
            Ном.СтавкаНП.Установить(ТекущаяДата(),Константа.ОсновнаяСтавкаНП);  
            Ном.СтавкаНДС.Установить(ТекущаяДата(),Константа.ОсновнаяСтавкаНДС);  
            Ном.Записать();
            ф.Следующая();
    КонецЦикла;                      
КонецПроцедуры
 
//*******************************************
Процедура ЗагрузитьДанные()
    ф = СоздатьОбъект("XBase");
    Если ФС.СуществуетФайл(ФормИмяФайлаДанных)=1 Тогда
        ф.ОткрытьФайл(ФормИмяФайлаДанных,,0);
        Если Ф.Открыта() =0 тогда
            Сообщить("Не удалось открыть файл!");
            возврат;
        КонецЕсли;
        Состояние("Сжимаем базу данных!");
        ф.сжать();
        Загрузить();
        ф.ЗакрытьФайл();
    КонецЕсли;
КонецПроцедуры

Всего записей: 96 | Зарегистр. 29-08-2007 | Отправлено: 14:26 21-05-2009
An4eus



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ringvault
1. убрать

Код:
Состояние("Загружено записей: "+п +" из "+ф.КоличествоЗаписей()+".");

2. почему идёт поиск по наименованию??? код в dbf нельзя запихнуть?

----------
Век живи - век учись!

Всего записей: 3768 | Зарегистр. 23-07-2007 | Отправлено: 15:13 21-05-2009
vizlipuzli

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ringvault
Проверил у себя загрузка 5000 элементов за пару секунд - без записи в справочники, запись в документы без проведения. Но даже указанный код у меня загружает 1000 записей в справочник номенклатура за 2 минуты. Основное время тратится на первый метод Записать(), затем на установку периодических реквизитов. Сколько позиций номенклатуры перед загрузкой? каждый раз пытаеьесь загрузить 300000 записей? Можно Сжать() убрать - отожмите один раз DBF-вьювером. Можно убрать            
Код:
Ном.СтавкаНП.Установить(ТекущаяДата(),Константа.ОсновнаяСтавкаНП);  
Ном.СтавкаНДС.Установить(ТекущаяДата(),Константа.ОсновнаяСтавкаНДС);  
Ном.Записать();
эти параметры и после загрузки можно установить.

Всего записей: 4038 | Зарегистр. 17-08-2005 | Отправлено: 15:21 21-05-2009
dimaxmaster

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ringvault
 
Дело не в коде.  Код обычный. Дело в том, что 1С физическую запись в справочник осуществляет довольно медленно таким методом записи. SQL тут вообще не причем. Затем, файл Dbf из которого идет экспорт открывается в оперативной памяти. Если оперативки мало, то 1С начинает использовать файл подкачки на жестком диске, соответственно скорость падает в разы. Ну и самое главное - это процессор. Поэтому после начала отработки кода, советую запустить диспетчер задач и посмотреть загрузку оперативной памяти, скажем через 5-10 минут после начала работы программы. И еще. 300 000 тысяч записей в справочник для 1С - это очень и очень много. Поэтому если все это работает 10 часов (при этом не происходит утечка оперативки и процессор кома хороший), то скорее всего это норма.

Всего записей: 333 | Зарегистр. 05-06-2008 | Отправлено: 15:41 21-05-2009
An4eus



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ringvault
физически база и файл на одном диске/машине?

----------
Век живи - век учись!

Всего записей: 3768 | Зарегистр. 23-07-2007 | Отправлено: 16:19 21-05-2009
DARKDEAD

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ringvault
Юзай транзакцию, не намного, но будет пошустрее.

Всего записей: 249 | Зарегистр. 04-02-2008 | Отправлено: 16:54 21-05-2009
An4eus



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DARKDEAD
опять же... её надо грамотно юзать...

----------
Век живи - век учись!

Всего записей: 3768 | Зарегистр. 23-07-2007 | Отправлено: 17:07 21-05-2009
DARKDEAD

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
An4eus
Поставить на запись, т.к. самое узкое место.  
Хороший пример Ссылка

Всего записей: 249 | Зарегистр. 04-02-2008 | Отправлено: 17:18 21-05-2009
An4eus



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DARKDEAD
нет...
фиксацию транкзакции нужно производдить не в конце, а через определенное (оптимальное) количество "записанных" элементов

----------
Век живи - век учись!

Всего записей: 3768 | Зарегистр. 23-07-2007 | Отправлено: 17:31 21-05-2009
Yarisedan

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите при выгрузке из 1С 7.7 в хмл файл получить строку в виде:  
<атрибут xsi:nil="false"/>

Всего записей: 2 | Зарегистр. 21-05-2009 | Отправлено: 19:52 21-05-2009
An4eus



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Yarisedan
так код есть какой-нибудь?

----------
Век живи - век учись!

Всего записей: 3768 | Зарегистр. 23-07-2007 | Отправлено: 19:54 21-05-2009
ringvault

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
An4eus
Спасибо за советы!
1.состояние убирать уж очень не охота((
хуже будет так или поставить условие чтобы состояние менялось каждые 10к записей наприме...
2.Кода единицы измерения там нет к сожалению, это сторонняя дбфка, это справочник из БЭСТ 4
vizlipuzli
Спасибо! Сжать уберу, и установку ставок тоже уберу, соответственно второе записать тоже.
dimaxmaster
станция достаточно сильная
4*2Ггц + 4Гб оперативы
винты скази
кстати, максимум загрузки проца 25% с этим можно чтото сделать??
чем вызвано это ограничение??
An4eus
физически да, на одной машине. имеет ли смысл разбивать по разным физическим винтам? или он всю таблицу грузит в память?
DARKDEAD
попробую транзакции каждые 10000 записей
 
 
Добавлено:
Итоговая обработка  
Процедура Загрузить()
    НомГ = СоздатьОбъект("Справочник.Номенклатура");
 
    Ном = СоздатьОбъект("Справочник.Номенклатура");
    Ед  = СоздатьОбъект("Справочник.ЕдиницыИзмерений");
    НачатьТранзакцию();
    ф.Первая();СтатусКаждые=1000;
    Для п = 1 По ф.КоличествоЗаписей() Цикл        
            Если Цел(п/СтатусКаждые) = п/СтатусКаждые тогда            
                ЗафиксироватьТранзакцию();
                Состояние("Загружено записей: "+п +" из "+ф.КоличествоЗаписей()+".");
                НачатьТранзакцию();
            КонецЕсли;
            
            КодГруппы    = ф.ПолучитьЗначениеПоля("GRUP");
            КодЭл        = ф.ПолучитьЗначениеПоля("NNUM");
            Наименование = ф.ПолучитьЗначениеПоля("NAME");
            Единица         = ф.ПолучитьЗначениеПоля("ED");
            Цена         = ф.ПолучитьЗначениеПоля("CENA");
    
    
            Ном.Новый();
            Если НомГ.НайтиПоКоду("0000"+СокрЛП(КодГруппы),0)=1 тогда
                Ном.Родитель = НомГ.текущийЭлемент();
            КонецЕсли;
            Ном.Артикул = КодЭл;
            Ном.Наименование = Наименование;
            Ном.ПолнНаименование = Наименование;
            Ном.ТипТовара = Перечисление.ТипыТоваров.Собственный;
            Если Ед.НайтиПоНаименованию(Единица,0,0)=1 тогда
                Ном.ЕдиницаИзмерения = Ед.ТекущийЭлемент();
            Иначе
                Ном.ЕдиницаИзмерения = Константа.ОсновнаяЕдиницаИзмерения;
            КонецЕсли;        
    
            Ном.ПорядокХраненияОтпускнойЦены = 2;
            Ном.Цена = Число(Цена);
            Ном.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар;
            //Ном.СтавкаНП.Установить(ТекущаяДата(),Константа.ОсновнаяСтавкаНП);  
            //Ном.СтавкаНДС.Установить(ТекущаяДата(),Константа.ОсновнаяСтавкаНДС);  
            Ном.Записать();
            ф.Следующая();
    КонецЦикла;                      
    ЗафиксироватьТранзакцию();
КонецПроцедуры
 
//*******************************************
Процедура ЗагрузитьДанные()
    ф = СоздатьОбъект("XBase");
    Если ФС.СуществуетФайл(ФормИмяФайлаДанных)=1 Тогда
        ф.ОткрытьФайл(ФормИмяФайлаДанных,,0);
//        ф.ОткрытьФайл(ФормИмяФайлаДанных);
        Если Ф.Открыта() =0 тогда
            Сообщить("Не удалось открыть файл!");
            возврат;
        КонецЕсли;
        Загрузить();
        ф.ЗакрытьФайл();
    КонецЕсли;
КонецПроцедуры
загрузила 230к за 20 минут

Всего записей: 96 | Зарегистр. 29-08-2007 | Отправлено: 23:47 21-05-2009
Pumpurumpul



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, подскажите пожалуйста кто-нибудь, как решить вот такую задачу: 1С V. 77 торговля - склад, в одной конфигурации несколько предприятий, например: ООО Нива, ООО Ива, ООО Жнива, так вот как сделать так, чтоб при выводе счета на печать, в нем (в счете) Нива - был логотип Нивы, Ива - был логотип Ивы, Жнива - был логотип Жнивы. Как вывести единый логотип на все счета я знаю, а вот эту задачу решить пока не могу (я предполагаю, что это надо делать через установки параметров контрагентов). Если объяснять сильно долго, то может кто-нибудь скинет где это можно найти и прочитать, я тогда постараюсь разобраться сам. В любом случае, благодарю за любой совет.

Всего записей: 39 | Зарегистр. 05-04-2007 | Отправлено: 07:36 22-05-2009 | Исправлено: Pumpurumpul, 07:50 22-05-2009
DARKDEAD

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ringvault
Загрузка 25% это максимальная загрузка 1-го процессора (100/4=25), т.к. 7-ка не умеет работать с многопроцесорной системой.
 
ЗЫ. Еще ускоряемся?

Всего записей: 249 | Зарегистр. 04-02-2008 | Отправлено: 08:50 22-05-2009
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » 1C Программирование и поддержка
ShIvADeSt (30-10-2009 09:51): http://forum.ru-board.com/topic.cgi?forum=33&topic=10715


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru