Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с загрузкой из Эксель
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
serkus
У меня есть база данных на 18000 контрагентов. Иногда бывает нужно перезагрузить ее из Экселевского файла (скорректированную). Но вот заметил несоответствие: в mxl файле сумма, скажем по столбцу одна, а при сохранении в xls, другая. И количество контрагентов не соответствует. Подскажите, какое максимальное количество строк в справочнике поддерживает 1с 7.7, и может лии погрешность быть из-за превышения этого количества. И как это можно побороть?

ЗЫ. При загрузке 16000 строк в базу грузится только 15982. При загрузке до 12000 все грузится корректно.
logist
у mxl файл позволяет записать более 100 тыс.строк точно.
Насчет суммирования числовых значений - mxl и xls могут по разному воспринимать тип значения в ячейке, например xls может какие-то значения воспринимать как дату.
serkus
Цитата(logist @ 20.10.13, 17:42) необходимо зарегистрироваться для просмотра ссылки
xls может какие-то значения воспринимать как дату.

но в столбце идут целые значения длиной не более 3 разрядов и точностью 0
mister-x
Цитата(serkus @ 20.10.13, 17:10) необходимо зарегистрироваться для просмотра ссылки
ЗЫ. При загрузке 16000 строк в базу грузится только 15982. При загрузке до 12000 все грузится корректно.

попробуйте автовисоту стрічки виставити чи висоту поставити 4 (якщо не помиляюсь, друге твередження вірніше), в мене була проблема колись із збереженням звіту із великою кількістю стрічок в ексель; правда в мене 1С-ка взагалі зависала при такому збереженні
Ardi
Как считается сумма?
serkus
Цитата(Ardi @ 20.10.13, 20:19) необходимо зарегистрироваться для просмотра ссылки
Как считается сумма?


по столбцу, а кол-во по номеру п/п

Цитата(mister-x @ 20.10.13, 20:10) необходимо зарегистрироваться для просмотра ссылки
попробуйте автовисоту стрічки виставити

а при чем высота строки? У меня она и так автоматически выставляется
Домовик
ничего не понятно. вы говорите о выгрузке и загрузке в вопросе одновременно.
при загрузке в базу ошибки?

или при сохранении в xls?

Цитата
ЗЫ. При загрузке 16000 строк в базу грузится только 15982. При загрузке до 12000 все грузится корректно.

может тип ячеек с какой-то строки в экселе уже другой.. по какой-то причине. не читается просто.
и потом - код обработки загрузки как читает экслевский файл? если там условие есть какое-то, то может прочесть и не сохранить в 1С. или даже не прочесть. возможно и выборочно.
И это может совсем нет от начинки файла загрузки зависеть, а от кода.
mister-x
Цитата(serkus @ 21.10.13, 6:00) необходимо зарегистрироваться для просмотра ссылки
а при чем высота строки? У меня она и так автоматически выставляется

тю, дійсно переплутав програмне завантаження/вивантаження із екселя/в ексель із стандартним збереженням в ексель, вибачайте

Цитата(serkus @ 20.10.13, 17:10) необходимо зарегистрироваться для просмотра ссылки
Иногда бывает нужно перезагрузить ее из Экселевского файла (скорректированную). Но вот заметил несоответствие: в mxl файле сумма, скажем по столбцу одна, а при сохранении в xls, другая.

якщо правильно зрозумів, ви завантажуєте із екселя в 1С дані (куди саме - в документ(и) (їх створюєте), звіт?), а потім їх зберігаєте із 1С стандартним способом в формат ексель і порівнюєте результат?
serkus
mister-x, у нас база данных пациентов по пилотному проекту гипертоников. Каждые 10 дней я отсылаю этот реестр (сформированный базой 1С, и сохраненный как xls) в областной центр. Так вот: при формировании реестра в конце есть итоговая строка. При открытии в Экселе, когда я вставляю функцию суммирования ячеек, то эти суммы отличаются. И мне приходится корректировать таблицу Эксель в соответствии с базой.

И вот мне пришлось корректировать эту базу по количеству пациентов (умершие, выбившие) - уменьшилось количество. И теперь при загрузке их из Экселя, после 12000 1С загружает их не все...

Цитата(mister-x @ 21.10.13, 10:41) необходимо зарегистрироваться для просмотра ссылки
ви завантажуєте із екселя в 1С дані (куди саме - в документ(и) (їх створюєте), звіт?)

да, я выгружаю их в "Звіт", а потом
Цитата(mister-x @ 21.10.13, 10:41) необходимо зарегистрироваться для просмотра ссылки
їх зберігаєте із 1С стандартним способом в формат ексель і порівнюєте результат?



Цитата(Домовик @ 21.10.13, 9:56) необходимо зарегистрироваться для просмотра ссылки
может тип ячеек с какой-то строки в экселе уже другой..

тип ячеек по всей таблице однотипный, начиная с 1 строки и до конца документа

забыл сказать: в таблице присутствуют формулы для подсчета, хотя не пойму, как они могут мешать? Ведь до 12 000 строк все загружается корректно!

При загрузке в 1С программа проверяет наличие пациента в базе. Если он есть, то ему добавляются записи, если же он отсутствует, он добавляется в базу. Скажу так: я гружу таблицу в ЧИСТУЮ базу!

В справочник, не в документ. upset.gif
igmig65
Опишите подробнее что вы делаете?
я понял так:
1. Вы корректируете данные в Эксель.
2. Грузите эксель файл в 1с. И сразу вопрос - что именно делает обработка: добавляет удаляет элементы справочника в соответствии с файлом эксель?
3. Формируете Реестр в 1с. Реестр - это отчет? если да, то отчет по чему по справочнику? документам?
Цитата
И вот мне пришлось корректировать эту базу по количеству пациентов (умершие, выбившие) - уменьшилось количество. И теперь при загрузке их из Экселя, после 12000 1С загружает их не все...

Куда именно в 1с загружает не всех...может в обработке на форме есть ТЗ и сначала все грузится в ТЗ, а потом оттуда отчет? который вы сохраняете в эксель и сравниваете?
короче телепатировать можно долго...а я например так толком и не понял, что и куда вы грузите и выгружаете. Ответ - гружу в 1с не принимается...
Ardi
Цитата(serkus @ 21.10.13, 13:02) необходимо зарегистрироваться для просмотра ссылки
И теперь при загрузке их из Экселя, после 12000 1С загружает их не все...

Если удалить из эксель первые 12000, и загрузить, то проблема останется? Так ведь?
serkus
Ardi, нет, проблема не в № строки, а в количестве загруженных строк в справочнике
Ardi
serkus
Молчать. Выполнять.
serkus
Цитата(igmig65 @ 21.10.13, 13:17) необходимо зарегистрироваться для просмотра ссылки
2. Грузите эксель файл в 1с. И сразу вопрос - что именно делает обработка: добавляет
элементы в справочник. Выше я упоминал, что загружаю в пустую базу.
Цитата(igmig65 @ 21.10.13, 13:17) необходимо зарегистрироваться для просмотра ссылки
3. Формируете Реестр в 1с. Реестр - это отчет?
да, это отчет, фактически 1:1 повторяющий таблицу Эксель.
igmig65,
Цитата(igmig65 @ 21.10.13, 13:17) необходимо зарегистрироваться для просмотра ссылки
Куда именно в 1с загружает не всех...
заргужает НЕ ВСЕХ в справочник.
igmig65
код обработки загрузки в справочник,
и еще, какие итоги по колонке вы сравниваете:
1. итог файла эксель который вы грузите в 1с с итогом файла эксель, сохраненного из реестра, сформированного в 1с?
2. или же итог в реестре (отчете), с итогом по колонке этого же реестра, сохраненного в эксель и пересчитанной автосуммой по колонке
serkus
Цитата(igmig65 @ 21.10.13, 13:43) необходимо зарегистрироваться для просмотра ссылки
код обработки загрузки в справочник,
:
//*******************************************
Процедура Сформировать()

КонецПроцедуры


Процедура ЗагрЕксель() // Из Excel    

        Спр=СоздатьОбъект("Справочник.Пацієнти");  
        н=1;
        //_уч=Участок;
        Экс=СоздатьОбъект("Excel.Application");
        РабочаяКнига=Экс.Workbooks;
        ИмяВыбрФайла = "";
        ИмяПути="";
        ИмяФайла="";
        //ФС.ВыбратьФайл(0, ИмяВыбрФайла, ИмяПути, "Выберите файл","Все файлы (*.*)!*.*", , );
        Если ФС.ВыбратьФайл(0, ИмяВыбрФайла, ИмяПути, "Выберите файл","Все файлы (*.*)!*.*", , ) = 1 Тогда  
            ПутьДБ = ИмяПути + ИмяВыбрФайла;
            РабочаяКнига.Open(ПутьДБ,0,1);
            Лист=Экс.WorkSheets(1);    // НомерЛиста    
            //Назва и т.п. - это номера колонок!!  
            Назва=2;                
            _3=3;
            _4=4;
            _5=5;
            _6=6;
            _7=7;
            _8=8;
            _9=9;
            _10=10;
            _11=11;
            _12=12;
            _13=13;
            _15=15;
            _17=17;
            _19=19;
            _21=21;
            _23=23;
            _25=25;
            _27=27;
            _29=29;
            _31=31;
            _33=33;
            _34=34;
            _35=35;
            _36=36;
        //_=;
            Для  н=1  по 20000  Цикл  // 20 - берем кол-во строк    
                Если (н>=НачНом) И (н<=КонНом) Тогда
                    Если ПустоеЗначение(Строка(Лист.Cells(н,Назва).Value))=0 Тогда                
                        Спр.НайтиПоНаименованию(СокрП(Строка(Лист.Cells(н,Назва).Value)));
                        Если Спр.Выбран()=1 Тогда
                            Если ПустоеЗначение(Лист.Cells(н,_3).Value)=0 Тогда
                                Спр.Ена=Число(Лист.Cells(н,_3).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_4).Value)=0 Тогда
                                Спр.Ліз=Число(Лист.Cells(н,_4).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_5).Value)=0 Тогда
                                Спр.Біс=Число(Лист.Cells(н,_5).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_6).Value)=0 Тогда
                                Спр.Мет=Число(Лист.Cells(н,_6).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_7).Value)=0 Тогда
                                Спр.Неб=Число(Лист.Cells(н,_7).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_8).Value)=0 Тогда
                                Спр.Ніф=Число(Лист.Cells(н,_8).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_9).Value)=0 Тогда
                                Спр.Амл=Число(Лист.Cells(н,_9).Value);            
                            КонецЕсли;                             
                            Если ПустоеЗначение(Лист.Cells(н,_10).Value)=0 Тогда
                                Спр.ЕТД=Число(Лист.Cells(н,_10).Value);            
                            КонецЕсли;                             
                            Если ПустоеЗначение(Лист.Cells(н,_11).Value)=0 Тогда
                                Спр.ЛТД=Число(Лист.Cells(н,_11).Value);            
                            КонецЕсли;                             
                              Если ПустоеЗначение(Лист.Cells(н,_12).Value)=0 Тогда
                                Спр.ЛТА=Число(Лист.Cells(н,_12).Value);            
                            КонецЕсли;                             
                            Если ПустоеЗначение(Лист.Cells(н,_13).Value)=0 Тогда
                                _ен=Спр.Еналаприл+Число(Лист.Cells(н,_13).Value);
                                Спр.Еналаприл=_ен;  
                                //Спр.Еналаприл=Число(Лист.Cells(н,_13).Value);
                            КонецЕсли;                            
                               Если ПустоеЗначение(Лист.Cells(н,_15).Value)=0 Тогда
                                _лі=Спр.Лізиноприл+Число(Лист.Cells(н,_15).Value);  
                                Спр.Лізиноприл=_лі;
                                //Спр.Лізиноприл=Число(Лист.Cells(н,_15).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_17).Value)=0 Тогда
                                _бі=Спр.Бісопролол+Число(Лист.Cells(н,_17).Value);    
                                Спр.Бісопролол=_бі;
                                //Спр.Бісопролол=Число(Лист.Cells(н,_17).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_19).Value)=0 Тогда
                                _ме=Спр.Метопролол+Число(Лист.Cells(н,_19).Value);    
                                Спр.Метопролол=_ме;
                                //Спр.Метопролол=Число(Лист.Cells(н,_19).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_21).Value)=0 Тогда
                                _не=Спр.Небівалол+Число(Лист.Cells(н,_21).Value);    
                                Спр.Небівалол=_не;
                                //Спр.Небівалол=Число(Лист.Cells(н,_21).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_23).Value)=0 Тогда
                                _ні=Спр.Ніфідіпін+Число(Лист.Cells(н,_23).Value);    
                                Спр.Ніфідіпін=_ні;                                    
                                //Спр.Ніфідіпін=Число(Лист.Cells(н,_23).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_25).Value)=0 Тогда
                                _ам=Спр.Амлодипін+Число(Лист.Cells(н,_25).Value);    
                                Спр.Амлодипін=_ам;                                    
                                //Спр.Амлодипін=Число(Лист.Cells(н,_25).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_27).Value)=0 Тогда
                                _ЕналТаДіур=Спр.ЕналТаДіур+Число(Лист.Cells(н,_27).Value);    
                                Спр.ЕналТаДіур=_ЕналТаДіур;                                    
                                //Спр.ЕналТаДіур=Число(Лист.Cells(н,_27).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_29).Value)=0 Тогда
                                _ЛізТаДіур=Спр.ЛізТаДіур+Число(Лист.Cells(н,_29).Value);    
                                Спр.ЛізТаДіур=_ЛізТаДіур;                                    
                                //Спр.ЛізТаДіур=Число(Лист.Cells(н,_29).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_31).Value)=0 Тогда
                                _ЛізТаАмл=Спр.ЛізТаАмл+Число(Лист.Cells(н,_31).Value);    
                                Спр.ЛізТаАмл=_ЛізТаАмл;                                    
                                //Спр.ЛізТаАмл=Число(Лист.Cells(н,_31).Value);    
                            КонецЕсли;                    
                            Если ПустоеЗначение(Лист.Cells(н,_33).Value)=0 Тогда
                                Спр.СВЛнаРік=Число(Лист.Cells(н,_33).Value);      
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_34).Value)=0 Тогда
                              _факт=Спр.СВЛфакт+Число(Лист.Cells(н,_34).Value);
                                Спр.СВЛфакт=_факт;                              
                                //Спр.СВЛфакт=Число(Лист.Cells(н,_25).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_35).Value)=0 Тогда
                              _вип=Спр.КРвиписаних+Число(Лист.Cells(н,_35).Value);
                                Спр.КРвиписаних=_вип;                              
                                //Спр.КРвиписаних=Число(Лист.Cells(н,_26).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_27).Value)=0 Тогда
                              _від=Спр.КРвідпущених+Число(Лист.Cells(н,_36).Value);
                                Спр.КРвідпущених=_від;
                                //Спр.КРвідпущених=Число(Лист.Cells(н,_36.Value);                            
                            КонецЕсли;
                            Спр.Записать();
                            Сообщить("Найдено: " + СокрП(Строка(Лист.Cells(н,Назва).Value)));
                        Иначе
                            Спр.Новый();
                            Спр.Наименование=Строка(Лист.Cells(н,Назва).Value);
                            Если ПустоеЗначение(Лист.Cells(н,_3).Value)=0 Тогда
                                Спр.Ена=Число(Лист.Cells(н,_3).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_4).Value)=0 Тогда
                                Спр.Ліз=Число(Лист.Cells(н,_4).Value);
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_5).Value)=0 Тогда
                                Спр.Біс=Число(Лист.Cells(н,_5).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_6).Value)=0 Тогда
                                Спр.Мет=Число(Лист.Cells(н,_6).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_7).Value)=0 Тогда
                                Спр.Неб=Число(Лист.Cells(н,_7).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_8).Value)=0 Тогда
                                Спр.Ніф=Число(Лист.Cells(н,_8).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_9).Value)=0 Тогда
                                Спр.Амл=Число(Лист.Cells(н,_9).Value);            
                            КонецЕсли;                            
                                Если ПустоеЗначение(Лист.Cells(н,_10).Value)=0 Тогда
                                Спр.ЕТД=Число(Лист.Cells(н,_10).Value);            
                            КонецЕсли;                            
                                Если ПустоеЗначение(Лист.Cells(н,_11).Value)=0 Тогда
                                Спр.ЛТД=Число(Лист.Cells(н,_11).Value);            
                            КонецЕсли;                            
                                Если ПустоеЗначение(Лист.Cells(н,_12).Value)=0 Тогда
                                Спр.ЛТА=Число(Лист.Cells(н,_12).Value);            
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_13).Value)=0 Тогда
                                Спр.Еналаприл=Число(Лист.Cells(н,_13).Value);    
                            КонецЕсли;
                            Если ПустоеЗначение(Лист.Cells(н,_15).Value)=0 Тогда
                                Спр.Лізиноприл=Число(Лист.Cells(н,_15).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_17).Value)=0 Тогда
                                Спр.Бісопролол=Число(Лист.Cells(н,_17).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_19).Value)=0 Тогда
                                Спр.Метопролол=Число(Лист.Cells(н,_19).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_21).Value)=0 Тогда
                                Спр.Небівалол=Число(Лист.Cells(н,_21).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_23).Value)=0 Тогда
                                Спр.Ніфідіпін=Число(Лист.Cells(н,_23).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_25).Value)=0 Тогда
                                Спр.Амлодипін=Число(Лист.Cells(н,_25).Value);    
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_27).Value)=0 Тогда
                                Спр.ЕналТаДіур=Число(Лист.Cells(н,_27).Value);    
                            КонецЕсли;                      
                            Если ПустоеЗначение(Лист.Cells(н,_29).Value)=0 Тогда
                                Спр.ЛізТаДіур=Число(Лист.Cells(н,_29).Value);    
                            КонецЕсли;                      
                            Если ПустоеЗначение(Лист.Cells(н,_31).Value)=0 Тогда
                                Спр.ЛізТаАмл=Число(Лист.Cells(н,_31).Value);    
                            КонецЕсли;
                            Если ПустоеЗначение(Лист.Cells(н,_33).Value)=0 Тогда
                                Спр.СВЛнаРік=Число(Лист.Cells(н,_33).Value);      
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_34).Value)=0 Тогда
                                Спр.СВЛфакт=Число(Лист.Cells(н,_34).Value);      
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_35).Value)=0 Тогда
                                Спр.КРвиписаних=Число(Лист.Cells(н,_35).Value);  
                            КонецЕсли;                            
                            Если ПустоеЗначение(Лист.Cells(н,_36).Value)=0 Тогда
                                Спр.КРвідпущених=Число(Лист.Cells(н,_36).Value);
                            КонецЕсли;
                            //Спр.=_;                                
                            Спр.Записать();
                            Сообщить("Добавлено нове найменування: " + СокрП(Строка(Лист.Cells(н,Назва).Value)));                     
                        КонецЕсли;                                    
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
            Сообщить("Файл "+Строка(ИмяФайла)+" завантажено");
        Иначе
            Сообщить("Файл не вибрано.");
        КонецЕсли;

КонецПроцедуры


 ! 

Правила, п 12
 

Цитата(serkus @ 21.10.13, 13:51) необходимо зарегистрироваться для просмотра ссылки
Если (н>=НачНом) И (н<=КонНом)
: возможность загружать справочник "порциями"
Ardi
Цитата(serkus @ 21.10.13, 13:51) необходимо зарегистрироваться для просмотра ссылки
Для н=1 по 20000 Цикл // 20 - берем кол-во строк

Что это за фигня?
serkus
Цитата(Ardi @ 21.10.13, 13:55) необходимо зарегистрироваться для просмотра ссылки
Что это за фигня?

цикл с 1 по 20000 номер в справочнике, // 20 - берем кол-во строк, вообще-то комментарий был написан нашим программистом для пробной версии на 20 строк smile.gif

а что, можно проще? upset.gif

igmig65,
Цитата(igmig65 @ 21.10.13, 13:43) необходимо зарегистрироваться для просмотра ссылки
итог в реестре (отчете), с итогом по колонке этого же реестра, сохраненного в эксель и пересчитанной автосуммой по колонке



logist, сорри, поспешил...
volodya1122
Цитата(serkus @ 21.10.13, 14:28) необходимо зарегистрироваться для просмотра ссылки


То, что предлагалось в (11) посте пробовали?
mister-x
як варіант, можливо
н >КонНом

тому менше стрічок завантажує. Де задаються НачНом і КонНом - я так розумію номер стрічки в екселі від якої завантажувати і до якої завантажувати, в обробці-звіті?
serkus
Цитата(Ardi @ 21.10.13, 13:21) необходимо зарегистрироваться для просмотра ссылки
Если удалить из эксель первые 12000, и загрузить, то проблема останется? Так ведь?

Цитата(volodya1122 @ 21.10.13, 14:32) необходимо зарегистрироваться для просмотра ссылки
То, что предлагалось в (11) посте пробовали?

да, пробовал даже делить Экселевскую таблицу на несколько документов, результат тот же.

мне кажется тут что-то не так в самой 1С, или в обработке...
mister-x
заберіть умову на копії обробки
Если (н>=НачНом) И (н<=КонНом) Тогда
...
КонецЕсли

і попробуйте завантажити
Домовик
Вот еще может быть.. обычно СокрЛП используется..
Спр.НайтиПоНаименованию(СокрП(Строка(Лист.Cells(н,Назва).Value)));


и еще. Вы же выгружете еще в Отчет

тут цепочка: Эксель-Справочник- отчет. надо еще проверить звено Справочник-Отчет. Вы же через отчет проверяете правильность выгрузки?

Цитата(serkus @ 21.10.13, 9:38) необходимо зарегистрироваться для просмотра ссылки
да, пробовал даже делить Экселевскую таблицу на несколько документов, результат тот же.



подробнее, какой?
volodya1122
Мені здається проблема в цьому коді;
Цитата(serkus @ 21.10.13, 13:53) необходимо зарегистрироваться для просмотра ссылки
Если ПустоеЗначение(Строка(Лист.Cells(н,Назва).Value))=0 Тогда


Тому ще раз повторю питання: якщо викинули перші 12000 рядків, тоді загрузились всі рядки, чи деякі пропали?
Ardi
Цитата(volodya1122 @ 21.10.13, 14:52) необходимо зарегистрироваться для просмотра ссылки
тоді загрузились всі рядки, чи деякі пропали?

Человек уже ответил "результат тот же" rofl.gif
volodya1122
Цитата(Ardi @ 21.10.13, 14:58) необходимо зарегистрироваться для просмотра ссылки
Человек уже ответил "результат тот же"


Цю відповідь можна трактувати по різному, тому бажано уточнити....
serkus
Вот код отчета:
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Наименование = Справочник.Пацієнти.Наименование;
    |Ена = Справочник.Пацієнти.Ена;
    |Ліз = Справочник.Пацієнти.Ліз;
    |Біс = Справочник.Пацієнти.Біс;
    |Мет = Справочник.Пацієнти.Мет;
    |Неб = Справочник.Пацієнти.Неб;
    |Ніф = Справочник.Пацієнти.Ніф;
    |Амл = Справочник.Пацієнти.Амл;
    |ЕТД = Справочник.Пацієнти.ЕТД;
    |ЛТД = Справочник.Пацієнти.ЛТД;
    |ЛТА = Справочник.Пацієнти.ЛТА;
    |Енал = Справочник.Пацієнти.Еналаприл;
    |Лізи = Справочник.Пацієнти.Лізиноприл;
    |Бісо = Справочник.Пацієнти.Бісопролол;
    |Мето = Справочник.Пацієнти.Метопролол;
    |Небі = Справочник.Пацієнти.Небівалол;
    |Ніфі = Справочник.Пацієнти.Ніфідіпін;
    |Амло = Справочник.Пацієнти.Амлодипін;
    |ЕналТаДіур = Справочник.Пацієнти.ЕналТаДіур;
    |ЛізТаДіур = Справочник.Пацієнти.ЛізТаДіур;
    |ЛізТаАмл = Справочник.Пацієнти.ЛізТаАмл;
    |СВЛР = Справочник.Пацієнти.СВЛнаРік;
    |СВЛФ = Справочник.Пацієнти.СВЛфакт;
    |КРИ = Справочник.Пацієнти.КРвиписаних;
    |КРІ = Справочник.Пацієнти.КРвідпущених;
    |КРвиписаних = Справочник.Пацієнти.КРвиписаних;
    |Функция ЕнаСумма = Сумма(Ена);
    |Функция ЛізСумма = Сумма(Ліз);
    |Функция БісСумма = Сумма(Біс);
    |Функция МетСумма = Сумма(Мет);
    |Функция НебСумма = Сумма(Неб);
    |Функция НіфСумма = Сумма(Ніф);
    |Функция АмлСумма = Сумма(Амл);
    |Функция ЕТДСумма = Сумма(ЕТД);
    |Функция ЛТДСумма = Сумма(ЛТД);
    |Функция ЛТАСумма = Сумма(ЛТА);
    |Функция ЕналСумма = Сумма(Енал);
    |Функция ЛізиСумма = Сумма(Лізи);
    |Функция БісоСумма = Сумма(Бісо);
    |Функция МетоСумма = Сумма(Мето);
    |Функция НебіСумма = Сумма(Небі);
    |Функция НіфіСумма = Сумма(Ніфі);
    |Функция АмлоСумма = Сумма(Амло);
    |Функция ЕналТаДіурСумма = Сумма(ЕналТаДіур);
    |Функция ЛізТаДіурСумма = Сумма(ЛізТаДіур);
    |Функция ЛізТаАмлСумма = Сумма(ЛізТаАмл);
    |Функция СВЛРСумма = Сумма(СВЛР);
    |Функция СВЛФСумма = Сумма(СВЛФ);
    |Функция КРИСумма = Сумма(КРИ);
    |Функция КРІСумма = Сумма(КРІ);
    |Группировка Наименование;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
        // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    _нпп=0;
    Пока Запрос.Группировка(1) = 1 Цикл
        // Заполнение полей Наименование
        _нпп=_нпп+1;
        Если (_нпп >= НппН) И (_нпп <= НппК) Тогда
            Таб.ВывестиСекцию("Наименование");
        КонецЕсли;
    КонецЦикла;
    Если Печит=1 Тогда
        Таб.ВывестиСекцию("Всього");
    КонецЕсли;
    // Вывод заполненной формы                  
    Таб.ТолькоПросмотр(0);
    Таб.Показать("Сформировать", "");
КонецПроцедуры
Процедура  
    Обрабатывать(НеПомеченныеНаУдаление);  
КонецПроцедуры;
volodya1122
Ще одне, в екселівцькім файлі можуть бути повтори назв, тому в загальному виходить менше
serkus
Цитата(volodya1122 @ 21.10.13, 15:12) необходимо зарегистрироваться для просмотра ссылки
в екселівцькім файлі можуть бути повтори назв,

повторів немає, дублів також. Та й база пуста, вона ж не зрівнює Найменування, а записи бере з № строк.

Це, якщо в базі вже є якісь найменування, тоді вона шукає співпадіння та пише: Знайдено....
alex040269
Я правильно понял?
Этот отчет выдает меньше строк, чем ожидалось?

1) Есть строки с одинаковыми наименованиями.
2) Есть строки с нулевыми значениями всех функций.
serkus
Цитата(alex040269 @ 21.10.13, 15:16) необходимо зарегистрироваться для просмотра ссылки
2) Есть строки с нулевыми значениями всех функций.

да, есть и пустые. Но почему же тогда такая маленькая разница получается? Пустых, если брать данные из Экселя около 9 000, а разница выходит 17 всего... да и до 12 000 и количество пациентов и все суммы совпадают с Экселем
volodya1122
Цитата(serkus @ 21.10.13, 15:16) необходимо зарегистрироваться для просмотра ссылки
повторів немає, дублів також. Та й база пуста, вона ж не зрівнює Найменування, а записи бере з № строк.

Це, якщо в базі вже є якісь найменування, тоді вона шукає співпадіння та пише: Знайдено....


1. Впевнені що нема дублів в екселі? Рекомендую всетаки перевірити на дублі
2. Перевірити екселівський файл на пусті назви.
3. Навіть коли загружаєте в пусту базу.... То після загрузки першого рядка, база вже не пуста. і можуть бути повтори
serkus
Извините, отлучусь на часок, потом вернусь
alex040269
Посчитайте строки с помощью:
Справочник.ВыбратьЭлементы();
Пока Справочник.ПолучитьЭлемент() = 1 Цикл
КонецЦикла;
serkus
volodya1122, до 12000 записей все происходит КОРРЕКТНО

volodya1122, до 12000 записей все происходит КОРРЕКТНО
Домовик
Желательно
    |Пациент = Справочник.Пацієнти.ТекущийЭлемент;



еще поиграть с группировкой:

   |Группировка Пациент;


попробовать
    |Группировка Пациент все;

и

    |Группировка Пациент все вошедшиевзапрос;


Цитата(serkus @ 21.10.13, 10:24) необходимо зарегистрироваться для просмотра ссылки
volodya1122, до 12000 записей все происходит КОРРЕКТНО


вы так и не говорите, что же происходит если 12001 запись, 12500, 13000, 14000, 15000 ...
volodya1122
Доречі загружати з екселю можна і набагато більше рядків. Я для тесту пробував загрузити в ТаблицуЗначений із екселю документ на 50000 рядків і 100 стовпців. Все коректно загрузилось. і в таблиці значень були всі дані....
Домовик
интересно есть ли разница в исполнении похожего кода:

для Н=1 по нН цикл
если спр.НайтиПоНАименованию()=1 тогда


или

как у автора
для н=1 по НН цикл
спр.НайтиПоНаименованию();
если спр.Выбран()=1 тогда  //может быть спозиционирован на н-1 ?
иначе
КонецЕсли;


Цитата(serkus @ 20.10.13, 13:10) необходимо зарегистрироваться для просмотра ссылки
. При загрузке 16000 строк в базу грузится только 15982


сколько этапов было загрузки? сколько вы раз при этом запустили обработку?

как вы интервал выбираете? у вас ведь в обработке в коде интервал "включительно" - <= и >=
igmig65
группировать по наименованию вообще применяется в случаях довольно редких, вам нужно группировать по элементу как сказала Домовик, и проверить сразу сколько элементов попадает в отчет.
Тогда вы узнаете хоть где ошибка, в отчете или в загрузке..

Кстати, если код справочника уникален во всем справочнике, и загружаете в пустую базу, тоесть все элементы справочника заново создаются, и нумерация кода с 1, то можно увидеть сколько элементов введено всего отсортировав справочник по коду.

А вообще в вашем случае однозначно нужно группировать по ТекущщемуЭлементу справочника, а не по Наименованию, это 1.
И 2 - в группировку добавить флаг Все, тоесть чтоб попали все элементы справочника без вариантов. тогда Функции и переменные числовых реквизитов в запросе не нужны вообще, а доступ к реквизитам будет ч-з конструкцию Запрос.<ТекщийЭлементСправочника>.<РекизитСправочника>

а вашем запросе логика не соответствует поставленной задаче, тоесть вывести все элементы справочника и показать значения их реквизитов.
serkus
сейчас поэкпериментирую
Домовик
по поводу схем поиска по Наименованию (мой вопрос) - работают схемы одинаково. Как у serkus с Выбран() тоже работает. НайтиПоНаименоваю() сбрасывает позицию с предыдущего найденного элемента. здесь обшибки нет.
serkus
Спасибо, работаю. О результате отпишусь.
Домовик
не забудьте еще все Сообщить() закомментировать в обработке. быстрее работать получится.
serkus
Цитата(Домовик @ 22.10.13, 20:31) необходимо зарегистрироваться для просмотра ссылки
не забудьте еще все Сообщить() закомментировать в обработке. быстрее работать получится.

Спасибо, учту smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.