Имя: Пароль:
1C
1С v8
Поиск данных по коду
0 Валидатор
 
27.12.13
13:38
Есть номенклатура в УТ 10.3 загруженная, есть ексель файл, в котором 900 позиций номенклатуры, нужно сделать обработку синхронизации данных из екселя и номенклатуры, если синхронизация есть, то записываем в созданный заранее РС. все вроде получилось, но из 900 позиций записалось только 881, то есть 19 не записались, начал разбираться в чем дело, оказалось, что в номенклатуре у некоторых элементов, которые не прошли синхронизацию код следующего вида:
123456(пробел)(пробел)(пробел)
а в экселе записано просто как 123456 без пробела, и в итоге программа ищет 123456, находит 123456(пробел)(пробел) и не выдает соответствия, как убрать эти пробелы у самой уже номенклатуры? сокр не подходит(
1 Валидатор
 
27.12.13
13:38
вот код:
НомерЛиста         = 1;
    Попытка
        Док = новый COMОбъект("Excel.Application");
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;    
    
    Док.Workbooks.Open(ПутьКФайлу);
    Док.Sheets(НомерЛиста).select();  
    
    Версия = Лев(Док.Version,Найти(Док.Version,".")-1);
    Если Версия = "8" тогда
        ФайлСтрок   = Док.Cells.CurrentRegion.Rows.Count;
        ФайлКолонок = Макс(Док.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
        ФайлСтрок   = Док.Cells(1,1).SpecialCells(11).Row;
        ФайлКолонок = Док.Cells(1,1).SpecialCells(11).Column;  
    КонецЕсли;
    
    НомерКолонкиКодаТовара             = 3;
    НомерКолонкиНаименованияТовара     = 2;
    НомерКолонкиИдентефикатораТовар    = 4;
    НомерКолонкиКодаТовараИз8рки        = 7;
    
    Для а = 2 по ФайлСтрок -1  Цикл          
        
        КодТовара             = СокрЛП(Док.Cells(а,НомерКолонкиКодаТовара).Value);
        КодТовара              = Формат(Число(КодТовара), "ЧН=0; ЧГ=0");
        НаименованиеТовара    = СокрЛП(Док.Cells(а,НомерКолонкиНаименованияТовара).Value);
        Идентификатор         = СокрЛП(Док.Cells(а,НомерКолонкиИдентефикатораТовар).Value);
        Код8ки                   = Строка(Док.Cells(а,НомерКолонкиКодаТовараИз8рки).Value);
        Код8ки                   = ДобавитьНули(Код8ки, 8);
        
        Товар = Справочники.Номенклатура.НайтиПоКоду(Код8ки);
        
        Если НЕ Товар = Справочники.Номенклатура.ПустаяСсылка() Тогда
            НовоеСоответствиеОбъектов = РегистрыСведений.ттСоответствиеОбъектов.СоздатьМенеджерЗаписи();
            НовоеСоответствиеОбъектов.Идентификатор = Идентификатор;
            НовоеСоответствиеОбъектов.Прочитать();
            Если НЕ НовоеСоответствиеОбъектов.Выбран() Тогда
                НовоеСоответствиеОбъектов.Идентификатор = Идентификатор;
            КонецЕсли;
            НовоеСоответствиеОбъектов.Код77 = КодТовара;
            НовоеСоответствиеОбъектов.НомерБазы = НомерБазы;
            НовоеСоответствиеОбъектов.Наименование77 = НаименованиеТовара;
            НовоеСоответствиеОбъектов.Ссылка = Товар;
            
            Попытка
                НовоеСоответствиеОбъектов.Записать();
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
        Иначе
            Сообщить("Товар " + НаименованиеТовара + " не найден");
            
        КонецЕсли;
        
    КонецЦикла;
    
    Док.ActiveWorkbook.Close();
2 wanderer_ица
 
27.12.13
13:42
Ммм... а ПОДОБНО не поможет?
3 Strogg
 
27.12.13
13:42
СокрЛП() жи есть.
4 Валидатор
 
27.12.13
13:45
(3)
Товар = Справочники.Номенклатура.НайтиПоКоду(СОКРЛП(Код8ки));
нам уберет нули у переменной код8ки, а не в коде справочника номенклатуры у элементов же
5 Strogg
 
27.12.13
13:47
(4) - у справочника номенклатуры есить вполне определенная длина кода. Получай сокрЛП и добивай до длины кода нулями, ну или что там у тебя будет. префикс плюс нули.