8.х Логика

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Koliusha, 24 дек 2008.

  1. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Диагноз следующий:
    У вас паллеты рассчитываются по карточке товаров и т.д. А реальные движения по ним нет (физически паллета могла и не уехать). Поэтому здесь идет нарушение логики.

    Сделайте отдельную номенклатуру "Паллеты" или "Поддоны", чтобы знать сколько их у вас на складе количественно.

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

    Очень интересное название "ТарыНаПолете" - что этим хотелось выразить?
  2. TopicStarter Overlay
    Koliusha
    Offline

    Koliusha Опытный в 1С

    Регистрация:
    21 окт 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    "ТарыНаПолете" это емкость паллета так сказать, в какой-либо таре или весовом товаре.
  3. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    У меня это ассоциируется с авиацией, если честно.
  4. TopicStarter Overlay
    Koliusha
    Offline

    Koliusha Опытный в 1С

    Регистрация:
    21 окт 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    У меня можно найти и полет, паллет, паллетов, полетов я их так разделяю чтоб не путаться )))))
  5. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Где логика? Где смысл? (с)
  6. TopicStarter Overlay
    Koliusha
    Offline

    Koliusha Опытный в 1С

    Регистрация:
    21 окт 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Я поначалу сильно путался откуда что берется вот и разделил все значения.
    А можно сделать так, чтобы паллеты учитывались не как номенклатура, а как ячейки хранения и не расходовались, а показывались занятые места в разрезе паллета?
  7. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Можно все, только надо это запрограммировать.
  8. TopicStarter Overlay
    Koliusha
    Offline

    Koliusha Опытный в 1С

    Регистрация:
    21 окт 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    А как примерно это должно выглядеть? подскажите плиз я в тупике ((( уже все перепробовал
  9. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Как минимум добавлением реквизита и ручным заполнением паллет (а не расчетом их через количество)
  10. TopicStarter Overlay
    Koliusha
    Offline

    Koliusha Опытный в 1С

    Регистрация:
    21 окт 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Ну тада лучше пусть считают на калькуляторе )))
  11. TopicStarter Overlay
    Koliusha
    Offline

    Koliusha Опытный в 1С

    Регистрация:
    21 окт 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Проблему решил
    Код:
    Для Каждого ТекСтрокаТовары Из Товары Цикл
    Фильтр = Новый Структура;
    Фильтр.Вставить("Номенклатура",ТекСтрокаТовары.Номенклатура);
    Фильтр.Вставить("Тара",ТекСтрокаТовары.Тара);
    Фильтр.Вставить("КолВТаре",ТекСтрокаТовары.КолВТаре);
    Остати = РегистрыНакопления.Секции.Остатки(,Фильтр);
    // регистр Секции Приход
    Движение = Движения.Секции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Проект = Проект;
    Движение.Склад = Склад;
    Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
    Движение.ХарактеристикаНоменклатуры = ТекСтрокаТовары.ХарактеристикаНоменклатуры;
    Движение.Тара = ТекСтрокаТовары.Тара;
    Движение.КолВТаре = ТекСтрокаТовары.КолВТаре;
    Движение.СерияНоменклатуры = ТекСтрокаТовары.СерияНоменклатуры;
    Движение.Количество = ТекСтрокаТовары.Количество;
    Движение.КолМест = ТекСтрокаТовары.КолМест;
    Если  Остати.Количество() = 0 Тогда
    Движение.Паллеты = ТекСтрокаТовары.Паллетов;
    Иначе
    Если ТекСтрокаТовары.Тара = Неопределено Тогда
    Движение.Паллеты = Окр((Остати[0].Паллеты - (Остати[0].КолМест - ТекСтрокаТовары.КолМест)/ТекСтрокаТовары.ЕдиницаИзмерения.ТарыНаПолете) - 0.5,0,1);
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/иначе')">				Иначе	</span>
    Движение.Паллеты = Окр((Остати[0].Паллеты - (Остати[0].КолМест - ТекСтрокаТовары.КолМест)/ТекСтрокаТовары.Тара.ЕдиницаХраненияОстатков.ТарыНаПолете) - 0.5,0,1);
    КонецЕсли;
    КонецЕсли;
    Движение.Вес = ТекСтрокаТовары.Вес;                                           
    КонецЦикла;
    
    
    Но появилась новая задача, необходимо определить шаг округления.
    Например:
    1) шаг = 0.5 значение 2.3 = 2.5 или 2.8 = 3
    2) шаг = 0.078 значение 0.05 = 0.078 или 0.079 = 1
    Возможно ли такое ?
  12. TopicStarter Overlay
    Koliusha
    Offline

    Koliusha Опытный в 1С

    Регистрация:
    21 окт 2008
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    26
    Задачу решил :unsure:
    для прихода двигал:
    Код:
    Если Остати.Количество() = 0 Тогда
    Движение.Паллеты = ТекСтрокаТовары.Паллетов;
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/иначе')">		Иначе		</span>
    ЦелаяЧастьДвиж = Цел((Остати[0].КолМест + ТекСтрокаТовары.КолМест)/ТарыНаПолете);
    ДробнаяЧастьДвиж = ((Остати[0].КолМест + ТекСтрокаТовары.КолМест)/ТарыНаПолете) - ЦелаяЧастьДвиж;
    ИндДвиж = Окр((ДробнаяЧастьДвиж/ЭтотОбъект.Организация.КоэфициентПаллетностиПриПРР) + 0.5,0,0);
    ОкруглДвиж = ИндДвиж*ЭтотОбъект.Организация.КоэфициентПаллетностиПриПРР;
    Движение.Паллеты = (ЦелаяЧастьДвиж + ОкруглДвиж) - Остати[0].Паллеты;
    КонецЕсли;
    
    
    А расход двигал так:
    Код:
    Если  Остати.Количество() = 0 Тогда
    Движение.Паллеты = ТекСтрокаТовары.Паллетов;
    Иначе
    ЦелаяЧастьДвиж = Цел((Остати[0].КолМест - ТекСтрокаТовары.КолМест)/ТарыНаПолете);
    ДробнаяЧастьДвиж = ((Остати[0].КолМест - ТекСтрокаТовары.КолМест)/ТарыНаПолете) - ЦелаяЧастьДвиж;
    ИндДвиж = Окр((ДробнаяЧастьДвиж/ЭтотОбъект.Организация.КоэфициентПаллетностиПриПРР) + 0.5,0,0);
    ОкруглДвиж = ИндДвиж*ЭтотОбъект.Организация.КоэфициентПаллетностиПриПРР;
    Движение.Паллеты = Остати[0].Паллеты - (ЦелаяЧастьДвиж + ОкруглДвиж);
    КонецЕсли;
    
    
    

Поделиться этой страницей