Имя: Пароль:
1C
 
Как из регистра сведений вытащить данные если данные поиска не по формату
,
0 Shur1cIT
 
14.03.17
15:25
Нужно из реристра сведений ПервоначальныеСведенияОСБухгалтерскийУчет
вытащить ОС по инвентарному номеру, инвентарный номер в регистре пресутствует как 00101398 так и 00001398 , а в excel откуда загружаю значение 1398, соответственно тупо LIKE применять нельзя вопрос как наиболее корректно и быстро получить мне основное средство из регистра?
1 Одинесю
 
14.03.17
15:27
(0) Главное без запятых надо.
2 Naf2017
 
14.03.17
15:30
добавь лидирующие нули
3 Shur1cIT
 
14.03.17
15:31
(0) у меня вариант только циклом убирая нули у инвентарного номера в начале и сравнивать
4 2dolist
 
14.03.17
15:31
инвентарный номер в регистре пресутствует как 00101398 так и 00001398 , а в excel откуда загружаю значение 1398

подробнее плз
5 Shur1cIT
 
14.03.17
15:32
(2) тут еще одно условие длинна инвентарного номера разная

excel руками набили
6 2dolist
 
14.03.17
15:33
1398 должен в конечном итоге определиться как оба 00101398 и 00001398 или как первое/последнее попавшееся из них?
7 Shur1cIT
 
14.03.17
15:34
(6) толжен определяться 00001398 так как следом может идти номер 101398 для ОС под инв номером 00101398
8 2dolist
 
14.03.17
15:34
возьми просто запросом пульни с нечётким отбором по строке
9 2dolist
 
14.03.17
15:35
(7) а, ну тогда добей лидирующими нулями просто
10 Одинесю
 
14.03.17
15:36
(3) Посчитать количество символов в exсel, взять нужное количество справа у инвентарника в 1с, сравнить.
11 piter3
 
14.03.17
15:37
СтрЗаменить("00001398","0","")
12 h-sp
 
14.03.17
15:40
(11) там число в екселе
13 2dolist
 
14.03.17
15:40
(11)  
СтрЗаменить("00001098","0","") = 198
14 Shur1cIT
 
14.03.17
15:41
если в цикле проблем нет убираем везде нули и сравниваем хотя тут тоже может быть засада попадеться номер 00000198 и приехали....
15 2dolist
 
14.03.17
15:42
(14) а в чём проблема написать цикл, который сначала к данным, загруженным из экселя добавляет лидирующие нули до нужного, а потом просто запросом сравнивать
16 Shur1cIT
 
14.03.17
15:43
(14) в цикле собирался только не везде нули убирать , а только слева, (15) у нас длинна инвентарных номеров в 1с разная
17 singlych
 
14.03.17
15:43
Формат(ЧислоИзExcel, "ЧЦ=8; ЧВН=; ЧГ=")
18 Shur1cIT
 
14.03.17
15:46
(15) http://s19.radikal.ru/i192/1703/a0/51229dcb0499.jpg

длинна разная опять же тупо добить неполучиться


думаю только цикл остаёться по РС (((
19 Shur1cIT
 
14.03.17
15:47
(18) это скриншот из 1с был
20 2dolist
 
14.03.17
15:48
(18) тогда да. Делать выборку, её перебирать и по алгоритму урезать лидирующие нули, записывать в нужном виде.
21 piter3
 
14.03.17
15:50
(13) нет
22 2dolist
 
14.03.17
15:53
(21) ок

СтрЗаменить("00001098","0","") = "198"
23 2dolist
 
14.03.17
15:54
(21) на что спорим ;)
24 piter3
 
14.03.17
15:55
(23) покажи
25 mistеr
 
14.03.17
15:56
(18) Сначала убрать, потом добить.
Не нужен цикл.
26 2dolist
 
14.03.17
15:57
(24) что покажи?
27 piter3
 
14.03.17
15:57
(26) скрин
28 Shur1cIT
 
14.03.17
15:57
(25) добивать до какой величины? длинна инвентаризационног номера в 1с разная http://s19.radikal.ru/i192/1703/a0/51229dcb0499.jpg
29 2dolist
 
14.03.17
15:58
(27) а так не понятно?
30 azernot
 
14.03.17
16:00
ДлинаНомераВРегистре = Метаданные.РегистрыСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.Ресурсы.ИнвентарныйНомер.Тип.КвалификаторыСтроки.Длина;

МассивПотенциальныхНомеров = Новый Массив();

Если ТипЗнч(НомерИзЭксель) = Тип("Число") Тогда
  СтрИнвентарныйНомер = Формат(НомерИзЭксель,"ЧГ=");
Иначе
   СтрИнвентарныйНомер = СокрЛП(НомерИзЭксель);
КонецЕсли;

Пока СтрДлина(СтрИнвентарныйНомер)<ДлинаНомераВРегистре Цикл
СтрИнвентарныйНомер = "0"+СтрИнвентарныйНомер;
МассивПотенциальныхНомеров.Добавить(СтрИнвентарныйНомер);
КонецЦикла;

Запрос
Выбрать .. из ПервоначальныеСведенияОСБухгалтерскийУчет
ГДЕ ИнвентарныйНомер В (&МассивПотенциальныхНомеров)
31 DrZombi
 
гуру
14.03.17
16:02
(0) Цикл наше все.
Либо Инвентарный номер делать отдельным реквизитом.
При этом стандартный оставить на растерзание пользователям :)
32 2dolist
 
14.03.17
16:02
(28) вообще, есть 2 самых простых варианта. Либо везде урезать лидирующие нули, либо везде добавлять до какого-то количества.

Урезать надёжнее потому что мало ли что там потом введут или что прочтётся из экселя.
33 azernot
 
14.03.17
16:05
+(30)
Перед циклом вставить
МассивПотенциальныхНомеров.Добавить(СтрИнвентарныйНомер);
34 2dolist
 
14.03.17
16:11
(30) а если там наоборот больше нулей, чем нужно?
35 azernot
 
14.03.17
16:16
(34) Ну уговорил.

ДлинаНомераВРегистре = Метаданные.РегистрыСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.Ресурсы.ИнвентарныйНомер.Тип.КвалификаторыСтроки.Длина;

МассивПотенциальныхНомеров = Новый Массив();

Если ТипЗнч(НомерИзЭксель) = Тип("Число") Тогда
  СтрИнвентарныйНомер = Формат(НомерИзЭксель,"ЧГ=");
Иначе
   СтрИнвентарныйНомер = Прав(СокрЛП(НомерИзЭксель),ДлинаНомераВРегистре);
КонецЕсли;

МассивПотенциальныхНомеров.Добавить(СтрИнвентарныйНомер);

Пока СтрДлина(СтрИнвентарныйНомер)<ДлинаНомераВРегистре Цикл
СтрИнвентарныйНомер = "0"+СтрИнвентарныйНомер;
МассивПотенциальныхНомеров.Добавить(СтрИнвентарныйНомер);
КонецЦикла;

Запрос
Выбрать .. из ПервоначальныеСведенияОСБухгалтерскийУчет
ГДЕ ИнвентарныйНомер В (&МассивПотенциальныхНомеров)
36 mistеr
 
14.03.17
16:43
(28) Ну если все так запущено, то пусть руками набивают. Будет им урок.
37 k1noshkin
 
14.03.17
16:49
(0) В экселе ничего править не надо, просто в коде добавь, чтобы инвентарный номер из экселя до 8 знаков нулями слева дополнялся, а потом уже с регистром сравнивай.