PDA

Просмотр полной версии : Перебор значений в цикле



candrey
16.02.2015, 20:37
Добрый вечер.
Подскажите с решением проблемки.

Есть три кладовщика Петя. Вася. Сережа. При форматировании расходной накладной зависимости от номера накладной ( точнее её последней цифры) выбивается кладовщик который собирает товар.
Решил проблему таким образом код ниже. Но столкнулся с проблемой что при такой схеме Петя будет за 10 собраных накладных собирать 4 раза, а Вася и Сережа по 3 раза. Получается дискриминация кладовщиков...:cool:

Хотелось бы решить так. При первом проходе цикла собирали Петя- 4 раза. Вася-3 раза и Сережа-3. при втором проходе цикла Петя-3 раза. Вася-4 раза Сережа-3 раза. При следующем проходе цикла Петя-3 раза. Вася-3 раза. Сережа-4 раза.
Т.е при таком плавающем раскладе все кладовщики в равных долях собирают товар..

Подскажите как изменить код чтоб выполнялось условие сбора в равных долях.?

код

если "0"=ПРАВ(Номер,1)
тогда СотрудникСклада="Петя"
иначе
если "1"=ПРАВ(Номер,1)
тогда СотрудникСклада="Вася"
иначе
если "2"=ПРАВ(Номер,1)
тогда СотрудникСклада="Сережа"
иначе
если "3"=Прав(Номер,1)
тогда СотрудникСклада="Петя"
иначе
если "4"=Прав(Номер,1)
тогда СотрудникСклада="Вася"
иначе
если "5"=Прав(Номер,1)
тогда СотрудникСклада="Сережа"
иначе
если "6"=Прав(Номер,1)
тогда СотрудникСклада="Петя"
иначе
если "7"=Прав(Номер,1)
тогда СотрудникСклада="Вася"
иначе
если "8"=Прав(Номер,1)
тогда СотрудникСклада="Сережа"
иначе
если "9"=Прав(Номер,1)
тогда СотрудникСклада="Петя"



конецЕсли;
конецЕсли;
конецЕсли;

конецЕсли;
конецЕсли;
конецЕсли;

конецЕсли;
конецЕсли;
конецЕсли;
конецЕсли;

Зарание спасибо.

avm3110
17.02.2015, 07:18
Млин.
У тебя 3 кладовщика. Значит делишь номер накладной на 3 и по значению остатка (0, 1 или 2) работаешь соответственно Петю, Ваню или Серёжу

ПыСы. только без обид - боже, каких только быдлокодеров только не держит 1С :mad:

candrey
17.02.2015, 10:53
Спасибо за ответ. Учится когда то нужно ж)))

Нужно чтоб сдвигались накладные по кладовщикам
т.е

накладные №0-9
Петя- берет накладные № 0,3,6,9
Вася-берет накладные № 1,4,7
Сережа-берет накладные № 2,5,8

Потом накладные №10-19
Петя- берет накладные № 2,5,8
Вася-берет накладные № 0,3,6,9
Сережа-берет накладные № 1,4,7

Потом накладные № 20-29
Петя- берет накладные № 1,4,7
Вася-берет накладные № 2,5,8
Сережа-берет накладные № 0,3,6,9

И так далее по накладным до 10000000

avm3110
17.02.2015, 11:18
Нужно чтоб сдвигались накладные по кладовщикам
Млин.
Повторяю... "Делишь на три полный номер целиком и смотришь остаток" - если остаток "0" - это Петя, если "1" - это Вася, если "2" - это Серёжа.
проверка
У Пети накладные 0, 3, 6,9,12,15,18,21,24,27,30 и т.д.

candrey
17.02.2015, 15:52
Спасибо.
Реализовал как вы писали ещё в первом посте.


x=(Формат(ПРАВ(номер,9)/3,"ЧДЦ=1"));


если "0"=прав(x,1)
тогда СотрудникСклада="П"
иначе
если "3"=прав(x,1)
тогда СотрудникСклада="В"
иначе
если "7"=прав(x,1)
тогда СотрудникСклада="С"

ИНАЧЕ СотрудникСклада="" ;



конецЕсли;
конецЕсли;
конецЕсли;

Прошу прокомментировать. Верно или нет?

avm3110
17.02.2015, 16:45
Верно или нет?
(тяжело вздыхая). А прочитать про такой вид арифметических операций как "остаток от деления"

Т.е.
x = НомерНакладной % 3;
Если х = 0 Тогда Кладовщик = "Петя";
ИначеЕсли х = 1 Тогда Кладовщик = "Саша";
ИначеЕсли х = 2 Тогда Кладовщик = "Вася";
Иначе Кладовщик = "ПустоеМесто";
КонецЕсли;


ПыСы. Только НомерНакладной должно быть число, а не "текст"

candrey
17.02.2015, 17:22
Спасибо за помощь.

ПыСы. Только НомерНакладной должно быть число, а не "текст"
Скажите, а у меня номер накладной имеет вид №ПР0000567 т.е из букв и цифр

При том условии кода что я написал, разве работать не будет?

avm3110
17.02.2015, 17:58
разве работать не будет?
Не будет
Нужно
НомерНакладной = Число(Прав(НомерДокумента,� �лСтр(НомерДокумента)-2));

Если знаете, что длина строки номера документа равно 9 символов, то можно сразу написать
НомерНакладной = Число(Прав(НомерДокумента, 7));

Или
Х = Число(Прав(НомерДокумента, 7)) % 3;

candrey
17.02.2015, 22:04
Вот так лучше?
есть преобразование к числу.



НомерСотрудника =Формат(Число(Сред(Номер,3))/3 - Цел(Число(Сред(Номер,3))/3),"ЧДЦ=1");


Если НомерСотрудника = "" Тогда
СотрудникСклада="В";
ИначеЕсли НомерСотрудника = "0,3" Тогда
СотрудникСклада="П"
ИначеЕсли НомерСотрудника = "0,7" Тогда
СотрудникСклада="С"

КонецЕсли;

avm3110
18.02.2015, 06:48
Вот так лучше?
Плохо.
Плохо и в целом, и в частности (например неверный синтаксис функции Сред)

ПыСы. Я уже дал решение, смысла дальше перетирать глупости - скучно

candrey
18.02.2015, 10:36
Функцию сред исправил)
Не придал этому внимание, что не задан второй параметр.


НомерСотрудника =Формат(Число(Сред(Номер,3,9))/3 - Цел(Число(Сред(Номер,3,9))/3),"ЧДЦ=1");