Проблема с поиском по коду 1с 8.2 Ут 10.3

1. Вожак 27.12.13 13:42 Сейчас в теме
Есть номенклатура в УТ 10.3 загруженная, есть ексель файл, в котором 900 позиций номенклатуры, нужно сделать обработку синхронизации данных из екселя и номенклатуры, если синхронизация есть, то записываем в созданный заранее РС. все вроде получилось, но из 900 позиций записалось только 881, то есть 19 не записались, начал разбираться в чем дело, оказалось, что в номенклатуре у некоторых элементов, которые не прошли синхронизацию код следующего вида:
123456(пробел)(пробел)(пробел)
а в экселе записано просто как 123456 без пробела, и в итоге программа ищет 123456, находит 123456(пробел)(пробел) и не выдает соответствия, как убрать эти пробелы у самой уже номенклатуры? сокр не подходит(
вот код:
НомерЛиста = 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. deniseek77 86 27.12.13 13:46 Сейчас в теме
(1) Вожак, Почему не подходит? В любом случае можно еще СтрЗаменить() использовать, а в нем либо КодСимвола или " " менять на ""
3. Вожак 27.12.13 13:46 Сейчас в теме
(2) deniseek77, Товар = Справочники.Номенклатура.НайтиПоКоду(СОКРЛП(Код8ки));
нам уберет нули у переменной код8ки, а не в коде справочника номенклатуры у элементов же
5. Восьмой 88 27.12.13 13:47 Сейчас в теме
(1) Вожак, ну поправь коды руками в базе и синхронизируй в чем проблема? 19 элементов всего. на крайняк если руками лень запусти универсальный подбор и обработку и в ней убери пробелы из кода
4. Вожак 27.12.13 13:47 Сейчас в теме
У меня в справочнике получается с пробелом код, а из екселя вытаскиваю без пробела
7. deniseek77 86 27.12.13 13:50 Сейчас в теме
(4) Вожак, Ну так и ищи в 8 Справочники.Номенклатура.НайтиПоКоду(СокрЛП())
6. Вожак 27.12.13 13:49 Сейчас в теме
или обработку писать которая у всех бы элементов резала пробелы лишние?
Восьмой; +1 Ответить
8. Восьмой 88 27.12.13 13:51 Сейчас в теме
(6) Вожак, да универсальным подбором причешы коды у справочника!!!!!!
9. Вожак 27.12.13 13:52 Сейчас в теме
а где эта обработка типовая? в ут 10.3 есть 8.2?
10. Восьмой 88 27.12.13 13:54 Сейчас в теме
(9) Вожак, на диске ИТС точно есть в конфе наверно тоже где-то вшита но я не помню, на крайняк сам напиши делов то

СправочникВыборка = Справочники.Номенклатура.Выбрать();
Пока СправочникВыборка.Следующий() Цикл
Если СправочникВыборка.ЭтоГруппа тогда продолжить КонецЕсли;
Если СправочникВыборка.ПометкаУдаления тогда продолжить КонецЕсли;

ОбъектСправочника = СправочникВыборка.Ссылка.ПолучитьОбъект();
ОбъектСправочника.Код = СокрЛП(ОбъектСправочника.Код);
Попытка
ОбъектСправочника.Записать();
Исключение
Сообщить(ОписаниеОшибки()+" не удалось записать номенклатуру "+Строка(СправочникВыборка.Ссылка));
КонецПопытки;
КонецЦикла;
11. Вожак 27.12.13 14:15 Сейчас в теме
не понятно почему, но пробелы в коде даже после СОКРЛП остаются шозанах? оО
12. Восьмой 88 27.12.13 14:16 Сейчас в теме
(11) Вожак, а может это не пробелы)))??? руками исправь и не мучайся.
13. Вожак 27.12.13 14:16 Сейчас в теме
а что это еще может быть?)
14. Восьмой 88 27.12.13 14:17 Сейчас в теме
(13) Вожак, не отображаемые символы типа Таб или еще что нить.
15. Вожак 27.12.13 14:17 Сейчас в теме
и как бороться с ними?(((
17. Восьмой 88 27.12.13 14:19 Сейчас в теме
(15) Вожак, как вариант СТРЗаменить() - только глянь что у тя там за символы висят - или руками)))))))
16. Вожак 27.12.13 14:18 Сейчас в теме
заходить во все 19 элементов и удалять руками?)
18. Восьмой 88 27.12.13 14:19 Сейчас в теме
(16) Вожак, В падлу да?)))))))) аЖНО целых 19!!!!!!!!!!!!!!
другое дело - как они туда попали, вот в чем вопрос.
21. Вожак 27.12.13 14:22 Сейчас в теме
(18) Восьмой, просто грузил их туда кто то вот видимо и загрузил с пустыми пробелами)
22. Восьмой 88 27.12.13 14:23 Сейчас в теме
(21) Вожак, это скорее всего не пробелы раз сокрЛП не съел
тип кода я надеюсь у тебя строка?
24. Вожак 27.12.13 14:27 Сейчас в теме
(22) Восьмой, код по которому ищу, да строка
19. Вожак 27.12.13 14:21 Сейчас в теме
ваще лень удалять руками)
20. Восьмой 88 27.12.13 14:22 Сейчас в теме
(19) Вожак, Эх не рукоблудец Вы наш - мозГЪ вам в помощь))
23. Вожак 27.12.13 14:26 Сейчас в теме
(20) Восьмой, руками удалял, нажимаю записать, а он все равно эти 3 пробела ставит, количество элементов в коде 11, а в коде всего их 8, вот и пробелами заполняет места, блин как быть то(
25. Восьмой 88 27.12.13 14:29 Сейчас в теме
(23) Вожак,

Для К =1 по 11 Цикл
Сообщить(Строка(КодСимвола (Код,К))) ;
КонецЦикла;

У пробела код 32 что у тебя дописывается?
26. Вожак 27.12.13 14:32 Сейчас в теме
27. Восьмой 88 27.12.13 14:35 Сейчас в теме
(26) Вожак, походу я догнал те которые нормально закрузились код у них какой длины все 11 символов забиты??
вобщем вот здесь еще проверяй Код8ки на длину строки и дорисовывай ее до длины кода пробелами с права
28. Вожак 27.12.13 14:45 Сейчас в теме
Вот да, у них по 11 символов код, а заполнены по 8 допустим, как мне сделать, чтобы справа " " дорисовывались?
30. Восьмой 88 27.12.13 14:50 Сейчас в теме
(28) Вожак, типа этого

СТРБуфер = " "; // здесь забей 11 пробелов!!!
Код8ки = Код8Ки +Прав(СТРБуфер,11-СтрДлина(Код8ки));
29. Вожак 27.12.13 14:46 Сейчас в теме
Функция ДобавитьНули(Значение, НужнаяДлинаЗначения)

Значение = СтрЗаменить(Значение, " ", "");
Значение = СтрЗаменить(Значение, Символы.НПП, "");
НадоНулей = НужнаяДлинаЗначения - СтрДлина(Значение);
ВедущиеНули = Формат(0,"ЧЦ="+НадоНулей+";ЧН=; ЧВН=; ЧГ=0");

Возврат ВедущиеНули + Значение;

КонецФункции

вот для добавления нулей слева дописал, а как справа пробелы?
31. Вожак 27.12.13 14:53 Сейчас в теме
в таком случае у меня добавление нулей слетает(
33. Восьмой 88 27.12.13 14:54 Сейчас в теме
(31) Вожак, почему??? после того как нули добавил делаешь эту проверку блин приведи реальный прмер код номенклатуры и код по которому ищешь
32. Вожак 27.12.13 14:54 Сейчас в теме
Для а = 2 по ФайлСтрок -1 Цикл

КодТовара = СокрЛП(Док.Cells(а,НомерКолонкиКодаТовара).Value);
КодТовара = Формат(Число(КодТовара), "ЧН=0; ЧГ=0");
НаименованиеТовара = СокрЛП(Док.Cells(а,НомерКолонкиНаименованияТовара).Value);
Идентификатор = СокрЛП(Док.Cells(а,НомерКолонкиИдентефикатораТовар).Value);
Код8ки = Строка(Док.Cells(а,НомерКолонкиКодаТовараИз8рки).Value);
СТРБуфер = " "; // здесь забей 11 пробелов!!!
Код8ки = Код8Ки +Прав(СТРБуфер,11-СтрДлина(Код8ки));
Код8ки = ДобавитьНули(Код8ки, 8);

Товар = Справочники.Номенклатура.НайтиПоКоду(Код8ки);

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

Попытка
НовоеСоответствиеОбъектов.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Иначе
Сообщить("Товар " + НаименованиеТовара + " не найден");
//Сообщить(Строка(КодСимвола (Код)));

КонецЕсли;

КонецЦикла;

вот так сделал, все равно те же 19 элементов не попадают из за кодов их
34. Вожак 27.12.13 15:02 Сейчас в теме
УТ000005878 и ищу по УТ000005878 и не находит, хоть тут коды и абсолютно идетничные
39. AlexShap 2 29.12.13 01:21 Сейчас в теме
(34) Вожак,

Может я что не так понял, но вы нехватающие нули добавляйте после префикса УТ.
35. Вожак 27.12.13 15:06 Сейчас в теме
потому что 0 перед УТ вставляется какого то хрена(
36. Восьмой 88 27.12.13 15:07 Сейчас в теме
(35) Вожак, ))) вроде ты нашел истину или я ошибаюсь?)
37. Вожак 27.12.13 15:15 Сейчас в теме
да, но мне приходится загружать данные без 19 позиций, потом комментить строку с добавлением 0й и запускать обработку еще раз(
38. Nevskiy 28.12.13 21:12 Сейчас в теме
Набросал "на коленке" функцию, которая режет "лишние" символы.
Не проверял :)

Функция ПорезатьЛишниеСимволы(ВходящаяСтрока)

РезСтрока = ВходящаяСтрока;
ДлинаВхСтроки = СтрДлина(ВходящаяСтрока);

РазрешенныеСимволы = "0123456789";

Для й = 1 по ДлинаВхСтроки Цикл

ТекСимвол = Сред(ВходящаяСтрока,й,1);
Если Найти(РазрешенныеСимволы,ТекСимвол) = 0 Тогда
СтрЗаменить(РезСтрока,ТекСимвол,"");
КонецЕсли;

КонецЦикла;

Возврат РезСтрока;

КонецФункции
Показать
40. yura_ua88 03.01.14 12:45 Сейчас в теме
На количество знаков надо сделать проверку
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот