Имя: Пароль:
1C
Юмор
Пробная обработка- удаление нулей в номерах перед цифрами
,
0 a237
 
11.10.11
22:03
Я новичек. Решил написать обработку которая просматрвает все документы определенного вида и удаляет у них нули если таковые имеются (например номер 0123 заменится на 123) но не выходит . Может кто видит ошибку.

Процедура Удалить()

ПР = СоздатьОбъект("Документ.Докуентпоставщика");
ПР.ВыбратьДокументы();

Пока ПР.ПолучитьСтроку() > 0 Цикл
                   
   Пока ПР.ПолучитьДокумент() > 0 Цикл                  

       номер=ПР.НомерДок;
       номерсокр=СокрЛ(номер);

       Если номерсокр=0 тогда
   
           ПР.НомерДок= номерсокр;

           ПР.Записать();    

       Конецесли;
           
   КонецЦикла;

КонецЦикла;

КонецПроцедуры
1 Темный Эльф
 
11.10.11
22:05
Ошибку вижу и не одну, а код где?
2 a237
 
11.10.11
22:05
в смысле? это и есть обработка
3 DrHiHi
 
11.10.11
22:06
что делает Пока ПР.ПолучитьСтроку() > 0 Цикл ???
и что ты будешь делать с документами у которых стоит префикс?? типа (До-0001)
4 andrewks
 
11.10.11
22:06
самая главная ошибка здесь: Докуентпоставщика
правильно так: ДокуЁнтпоставщика
5 KRV
 
11.10.11
22:07
Пока ПР.ПолучитьСтроку() > 0 Цикл
                   
   Пока ПР.ПолучитьДокумент() > 0 Цикл    
В мемориз
6 a237
 
11.10.11
22:08
новая версия


Процедура Удалить()

ПР = СоздатьОбъект("Документ.Докуентпоставщика");
ПР.ВыбратьДокументы();
               
   Пока ПР.ПолучитьДокумент() > 0 Цикл                  

       номер=ПР.НомерДок;
       номерсокр=СокрЛ(номер);

       Если номерсокр=0 тогда
   
           ПР.НомерДок= номерсокр;

           ПР.Записать();    

       Конецесли;

    КонецЦикла;

КонецПроцедуры
7 DrHiHi
 
11.10.11
22:09
Если номерсокр=0 тогда че за хрень??
8 Aleksey
 
11.10.11
22:10
(6) Все хуже и хуже
9 DrHiHi
 
11.10.11
22:10
ответь на 2-й вопрос (3)
10 KRV
 
11.10.11
22:10
а в конфиге точно есть "Докуентпоставщика"?
11 a237
 
11.10.11
22:12
(3) только если есть ноль и он первый, тогда удалить (хотя вообще-то нужно удалять если первый ноль или первый и второй ноль но это уже потом)
12 DrHiHi
 
11.10.11
22:12
лимбическая система
13 a237
 
11.10.11
22:12
(10) там другой документ просто на той базе на которой я пробую- есть
14 Темный Эльф
 
11.10.11
22:13
1. Имя процедуры. Не рекомендуется использовать предопределенные имена методов в качестве имен процедур.
2. Докуентпоставщика - как минимум орфографическая ошибка.
3. ВыбратьДокументы() используется совместно с ПолучитьДокумент(), а ПолучитьСтроку() с ВыбратьСтроки(). "Коньяк закусывается лимоном, а не запивается пивом" (с)
4. СокрЛ убирает ПРОБЕЛЫ слева, а не нули.
5. Запись документа в выборке по документу с использованием одной переменной не рекомендуется. В восьмерке для этого сделали отдельно ДокументВыборка и ДокументОбъект, а семерошники должны помнить сами, что ничто - это тоже нечто.
6. После использования СокрЛ возвращается строка. Сравнение строки с числом "Если номерсокр=0 тогда" всегда будет иметь один и тот же результат, отрицательный.
7. Смысл условия "Если номерсокр=0 тогда" неясен совершенно. Так не надо.
Вердикт - оставить на второй год.
15 DrHiHi
 
11.10.11
22:14
(11) то есть если есть префикс то мы его оставляем

ПР = СоздатьОбъект("Документ.Докуентпоставщика");
ПР.ВыбратьДокументы();
               
   Пока ПР.ПолучитьДокумент() = 1 Цикл                  

       номер=ПР.НомерДок;
       ПОпытка
       номерсокр=число(номер);
       исключение
         продолжить;
       конецпопытки;

            ПР.НомерДок= номерсокр;

           ПР.Записать();    


    КонецЦикла;

можешь так попробывать
16 Vovik
 
11.10.11
22:17
Помоему это вброс
17 a237
 
11.10.11
22:19
Ничего не вборос просто я бухгалтер по образованию
18 a237
 
11.10.11
22:21
(15)пробую вроде заработало- проверяю...
19 Темный Эльф
 
11.10.11
22:22
(17)Вот ты бухгалтер. Ты доверишь составлять баланс предприятия человеку, знакомому единственно с 4 правилами арифметики? Зайди http://mista.ru/tutor_1c/index.htm на этом сайте и учись с начала.
20 Vovik
 
11.10.11
22:27
(17)Тогда что по твоему такое СокрЛ? Интересно.
21 a237
 
11.10.11
22:28
Думал

СокрЛ= Прав
22 a237
 
11.10.11
22:31
2 DrHiHi,Темный Эльф
Спасибо

Проблема была в том что в номерах документа появились нули перед числовым значениям и счас после знакомство с
номерсокр=число(номер);

я понял что просто в конфигураторе нужно вернуть тип номера на числовой)))
23 Академик_
Келдыш
 
11.10.11
22:35
Начнем по серьезному. Кто сказал что номер 00123 неверен при пятизначной нумерации? Допустим отрежешь все нули а потом? Документу номер ручками присваивать будешь? Далее: почитай про функцию число. Может поможет.)))))
24 Академик_
Келдыш
 
11.10.11
22:40
Да кстати, если бухгалтер, ответь мне что делать с расходами в торговой организации когда нет выручки за месяц в 2001 году. Ответишь обосновав ответ пбу, письмами инстанций, фз- завтра с утра посвящу тебе час времени на приведении нумерации твоей в божеский вид
25 Академик_
Келдыш
 
11.10.11
22:40
Ой ну конечно в 2011 году
26 a237
 
11.10.11
22:41
я сказал что у меня образование бухгалтера- а так я консультант 1с и просто бухгалтера требовали вернуть все назад- убрать нули в номерах документа
27 a237
 
11.10.11
22:41
))
28 a237
 
11.10.11
22:44
(24) если нет выручки то на 90 счету убыток за месяц (я не из РФ)
29 Академик_
Келдыш
 
11.10.11
22:45
Ну понятно. Какой консультант такие и бухи. Нули появились от того что ктото получил сообщение о неуникальности номера своего доккмента. По неизведанным причинам именно этот номер был ему нужен. Он добавил нули и обощел проверку уникальности.
30 Сияющий Асинхраль
 
11.10.11
22:47
Забавно, только на двадцать третьем посту сказали, что в корне неверна сама постановка задачи. А вообще для буха это решается типовой перенумерацией с диска итс
31 a237
 
11.10.11
22:48
у меня на задачи нет времени (куча звонков и внедрений) клиент дорогой- проще вернуть КАК БЫЛО НА ПРОТЯЖЕНИИ 2-3 ЛЕТ ДО ЭТОГО
32 SnarkHunter
 
11.10.11
22:48
(0)Правильно пишется "новичОк"...
33 Академик_
Келдыш
 
11.10.11
22:51
(28) что не из рф так уж и быть. Нумерация документов какая? Числовая или текстовая? Если текстовая то в цикле запускай по докам:
Сообщить(док.номердок);
Док.номердок=прав(„0000000000" + число(номердок),а вот тут число - длина номера из конфигуратора);


На ошибочном вылетит но он у тебя в окне сообщений будет. Скажи бухам что доков с таким номером два пусть один перенумеровывают
34 Академик_
Келдыш
 
11.10.11
22:53
(30) типовую перенумерацию пусть нуралиев в своих актах выполненных работ использует и акты сверок потом подписывает
35 Академик_
Келдыш
 
11.10.11
22:54
+33 ну и после этого в цикле по докам конечно док.записать() поставь
36 SnarkHunter
 
11.10.11
22:59
>> Док.номердок=прав(„0000000000" + число(номердок),а вот тут число - длина номера из конфигуратора

Некошерно...
37 Сияющий Асинхраль
 
11.10.11
23:03
(35) что-то мне говорит, что нумерация у докуентпоставщика вряд ли будет соответствовать реальным номерам доков, поэтому перенумеровать можно
38 filh
 
11.10.11
23:56
А что в юмор то занесли?
39 KishMish
 
12.10.11
09:06
проще же так
НовыйНомер=СтрЗаменить(СокрЛП(Номер),"0"," ");
НовыйНомер=СокрЛ(НовыйНомер);
НовыйНомер=СтрЗаменить(СтрЗаменить," ","0");
40 G-Re
 
12.10.11
09:35
НовыйНомер=СтрЗаменить(СокрЛП(Номер),"0","");
41 G-Re
 
12.10.11
09:37
(40)+ Снимаю, удалятся ВСЕ нули, правильно (39)!
Программист всегда исправляет последнюю ошибку.