Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Цикл отбора кладовщиков.          
candrey Подменю пользователя
сообщение 16.02.15, 21:11
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 155
Спасибо сказали: 6 раз
Рейтинг: 0

Добрый вечер.
В наличии 1С Предприятие 8.2, релиз Управление тороговым предприятием для Украины 1.2. Файловый вариант.
Подскажите с решением проблемы, немогу составить цикл отбора кладовщиков.

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

Хотелось бы решить так. При первом проходе (при сквозном создании накладных от 0 до 9) собирали Петя- 4 раза. Вася-3 раза и Сережа-3.
При втором проходе (Накладные от 0 до 9) Петя-3 раза. Вася-4 раза Сережа-3 раза.
При следующем проходе Петя-3 раза. Вася-3 раза. Сережа-4 раза (Накладные от 0 до 9). И так по кругу.
Т.е при таком плавающем раскладе (происходит движение кладовщика перебором) все кладовщики в равных долях собирают товар.
Накладные идут от 0 до 10000 по порядку.

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


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



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

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

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


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

Vofka Подменю пользователя
сообщение 17.02.15, 8:05
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

В цикле обходится сразу все 10000 накладных за раз?

kosalex Подменю пользователя
сообщение 17.02.15, 8:19
Сообщение #3

Ветеран
*******
Группа: Пользователи
Сообщений: 805
Спасибо сказали: 14 раз
Рейтинг: 0

Символ = ПРАВ(Номер,1);
ЕСЛИ Символ = "9" ИЛИ  Символ = "0" ТОГДА
СотрудникСклада="Петя";
ИНАЧЕЕСЛИ ЕСЛИ Символ = "1" ИЛИ  Символ = "4" ТОГДА
СотрудникСклада = "Вася";
ИНАЧЕЕСЛИ
...........................
...........................
...........................
КОНЕЦЕСЛИ;
Символ = "";
СотрудникСклада = "";



 ! 

Правила, пункт 13!
 


Сообщение отредактировал Vofka - 17.02.15, 9:12

candrey Подменю пользователя
сообщение 17.02.15, 9:46
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 155
Спасибо сказали: 6 раз
Рейтинг: 0

Цитата(kosalex @ 17.02.15, 8:19) *
Символ = ПРАВ(Номер,1);
ЕСЛИ Символ = "9" ИЛИ  Символ = "0" ТОГДА
СотрудникСклада="Петя";
ИНАЧЕЕСЛИ ЕСЛИ Символ = "1" ИЛИ  Символ = "4" ТОГДА
СотрудникСклада = "Вася";
ИНАЧЕЕСЛИ
...........................
...........................
...........................
КОНЕЦЕСЛИ;
Символ = "";
СотрудникСклада = "";


Спасибо за ответ.
Но при вашем условии получается так же как я описал выше


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

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

накладные №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

И так по кругу.

alex040269 Подменю пользователя
сообщение 17.02.15, 13:08
Сообщение #5

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(candrey @ 17.02.15, 9:46) *
чтоб сдвигались накладные по кладовщикам

возьмите остаток от деления на 3!


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Спасибо сказали: candrey,

candrey Подменю пользователя
сообщение 17.02.15, 13:46
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 155
Спасибо сказали: 6 раз
Рейтинг: 0

Скажите, а как быть если накладная состоит из букв и цифр. например ВВ00022
при делении на 3 выдает ошибку.!

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



alex040269 Подменю пользователя
сообщение 17.02.15, 13:48
Сообщение #7

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

отрезать буквы и преобразовать.
Число(Сред(Номер,3))


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Спасибо сказали: candrey,

candrey Подменю пользователя
сообщение 17.02.15, 14:41
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 155
Спасибо сказали: 6 раз
Рейтинг: 0

Спасибо за помощь icon_beer17.gif

Решил таким способом.
Т.е Все кладовщики собирают накладные по очереди и все довольны))

 x=(Формат(ПРАВ(номер,9)/3,"ЧДЦ=1"));
    
     если "0"=прав(x,1)
         тогда СотрудникСклада="Вася"
     иначе
         если "3"=прав(x,1)  
             тогда СотрудникСклада="ПЕтя"
        иначе
            если "7"=прав(x,1)
                тогда СотрудникСклада="Сережа"

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


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

topitop Подменю пользователя
сообщение 17.02.15, 15:28
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 29
Из: Днепр
Спасибо сказали: 5 раз
Рейтинг: 0

    НомерСотрудника =Формат(Число(Номер)/3 - Цел(Число(Номер)/3),"ЧДЦ=1");
    
    Если  НомерСотрудника = "" Тогда
        СотрудникСклада="Петя";
    ИначеЕсли НомерСотрудника = "0,3" Тогда
        СотрудникСклада="Вася"
    ИначеЕсли НомерСотрудника = "0,7" Тогда
        СотрудникСклада="Сережа"
    КонецЕсли;


Проверял, вроде работает как нужно.

Сообщение отредактировал Vofka - 17.02.15, 15:32

alex040269 Подменю пользователя
сообщение 17.02.15, 15:33
Сообщение #10

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

МассивСотрудников = Новый Массив();
МассивСотрудников.Добавить("Сережа");
МассивСотрудников.Добавить("Вася");
МассивСотрудников.Добавить("Петя");

текНомер = Число(Сред(Номер,3));
текСотрудник = МассивСотрудников[текНомер-Цел(текНомер/3)*3];


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

candrey Подменю пользователя
сообщение 17.02.15, 19:37
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 155
Спасибо сказали: 6 раз
Рейтинг: 0

Цитата(topitop @ 17.02.15, 15:28) *
    НомерСотрудника =Формат(Число(Номер)/3 - Цел(Число(Номер)/3),"ЧДЦ=1");
    
    Если  НомерСотрудника = "" Тогда
        СотрудникСклада="Петя";
    ИначеЕсли НомерСотрудника = "0,3" Тогда
        СотрудникСклада="Вася"
    ИначеЕсли НомерСотрудника = "0,7" Тогда
        СотрудникСклада="Сережа"
    КонецЕсли;


Проверял, вроде работает как нужно.



Попробывал ваш метод выдает ошибку
Цитата
Преобразование значения к типу Число не может быть выполнено
НомерСотрудника =Формат(Число(Номер)/3 - Цел(Число(Номер)/3),"ЧДЦ=1");


У меня номер накладной состоит из букв и цифр. типа №АФ00000789
Как тут поступить?

Сообщение отредактировал Vofka - 17.02.15, 19:39

ignsv Подменю пользователя
сообщение 17.02.15, 19:59
Сообщение #12

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 193
Спасибо сказали: 60 раз
Рейтинг: 0

откидайте префиксы, в типовой посмотрите:
ОбщегоНазначения.ПолучитьНомерНаПечать(ЭтотОбъект)


или так например:
    
Номер = "№АФ00000789";    
    Пока НЕ (КодСимвола(Лев(Номер, 1)) >= 48 И КодСимвола(Лев(Номер, 1)) <= 57)Цикл
        Номер = Сред(Номер, 2);
    КонецЦикла;
    РезультатЧисло = Число(Номер);  //789

candrey Подменю пользователя
сообщение 17.02.15, 20:41
Сообщение #13

Завсегдатай
****
Группа: Пользователи
Сообщений: 155
Спасибо сказали: 6 раз
Рейтинг: 0

Цитата(candrey @ 17.02.15, 19:37) *
Попробывал ваш метод выдает ошибку


У меня номер накладной состоит из букв и цифр. типа №АФ00000789
Как тут поступить?


Надоглядел.Прошу прошения. 09000000.gif

Вот окончательный предложеный код

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

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


Верно все исправил?

Домовик Подменю пользователя
сообщение 17.02.15, 23:16
Сообщение #14

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

А если на склад прийдет еще какой-нибудь "Саша"... или вместо Пети прийдет Галя, и не захочет заходить в программу под Петей.. Будут Вас вызывать, править код.
Деньги Вам платить. Что, в общем, хорошо, конечно..

Указанное условие должно быть где-то подано табличкой ..в справочнике, регистре сведений...
находите номерсотрудника, потом в этой табличке по номерусотрудника находите соотвествующего пользователя. Без условий.

Может правильнее и без изменения структуры конфигурации: таблица значений создается и заполняется где-то при начале работы.



Сообщение отредактировал Домовик - 17.02.15, 23:17

Спасибо сказали: candrey,

candrey Подменю пользователя
сообщение 18.02.15, 8:52
Сообщение #15

Завсегдатай
****
Группа: Пользователи
Сообщений: 155
Спасибо сказали: 6 раз
Рейтинг: 0

Всем спасибо еще раз за верную критику icon_beer17.gif

Предыдущий пост дал новую идею. А если скажем появится новый кладовщик -четвертый "Александр" то мы этот код делим на 4 и всё?
Или тут вступает другое правило вычисления кладовщика?

Домовик Подменю пользователя
сообщение 18.02.15, 10:01
Сообщение #16

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

некоторая таблица со структурой:
ссылка на пользователя | префикс пользователя | Коэффициент |




ВасяПользователь Вася 0
ПетяПользователь Петя 0,3
СережаПользователь Сережа 0,7



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

ВасяПользователь Вася 0
ПетяПользователь Петя 0,25
СережаПользователь Сережа 0,5
СашаПользователь Саша 0,75



если пользователь добавляется и уже пять:

ВасяПользователь Вася 0
ПетяПользователь Петя 0,2
СережаПользователь Сережа 0,4
СашаПользователь Саша 0,6
ГаляПользователь Галя 0,8



а в формуле номераСотрудника деление на КоличествоКладовщиков.


Формирование коэффициентов для пользователей можно тоже запрограммировать.( А можно и указывать вручную, если таблица не расчитываемой, а в составе конфигурации.


расчет коэффициентов: делим числа от 1 до КоличествоКладовщиков на КоличествоКладовщиков.

1

Сообщение отредактировал Домовик - 18.02.15, 10:01

Спасибо сказали: candrey,

reneval Подменю пользователя
сообщение 20.02.15, 23:25
Сообщение #17

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 144
Спасибо сказали: 55 раз
Рейтинг: 0

Цитата(alex040269 @ 17.02.15, 15:33) *
МассивСотрудников = Новый Массив();
МассивСотрудников.Добавить("Сережа");
МассивСотрудников.Добавить("Вася");
МассивСотрудников.Добавить("Петя");

текНомер = Число(Сред(Номер,3));
текСотрудник = МассивСотрудников[текНомер-Цел(текНомер/3)*3];


Для 3х:
МассивСотрудников = Новый Массив();
МассивСотрудников.Добавить("Сережа");
МассивСотрудников.Добавить("Вася");
МассивСотрудников.Добавить("Петя");

текСотрудник = МассивСотрудников[НомерСотрудника % 3];


Для 4х:
МассивСотрудников = Новый Массив();
МассивСотрудников.Добавить("Сережа");
МассивСотрудников.Добавить("Вася");
МассивСотрудников.Добавить("Петя");
МассивСотрудников.Добавить("Ваня");

текСотрудник = МассивСотрудников[НомерСотрудника % 4];


и т.д.

Vofka Подменю пользователя
сообщение 22.02.15, 10:58
Сообщение #18

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

reneval,
текСотрудник = МассивСотрудников[НомерСотрудника % МассивСотрудников.Количество()];

smile.gif

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 15:09
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!