Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в печ.форме посчитать количество
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bereznoy
Итак, пример сразу что получилось у меня
Плитка 10 кв.м. (из справочн вытащил инфу что в 1 шт = 0,02 кв.м ) делю на 0,02 и получаю 500 шт. (дальше вытаскиваю и спр. кол. в упаковке 30 шт.) делю на 30 и получается 16,666666 а мне надо сдесь четко показать что 16 упаковок и 20 штук, вопрос КАК?
Вот мой код
ОбластьМакета.Параметры.Упаковки = ВыборкаСтрокТовары.Количество 
/ ВыборкаСтрокТовары.Номенклатура.Пакетировка.Площадьшт
/ ВыборкаСтрокТовары.Номенклатура.Пакетировка.Штупак;



Как собственно отделить целые упаковки и остаток штук ?
Ardi
Упак = Цел(500/30); (=16)
допШт = 500 - Упак*30; (=20)

Если Цел(500/30)=500/30 Тогда
ОбластьМакета.Параметры.Упаковки = ""+Упак+" упаковок "+допШт+" шт.";
Иначе
ОбластьМакета.Параметры.Упаковки = ""+Упак+" упаковок";
КонецЕсли;
bereznoy
Цитата(Ardi @ 05.10.11, 23:00) необходимо зарегистрироваться для просмотра ссылки
Упак = Цел(500/30); (=16)
допШт = 500 - Упак*30; (=20)

Если Цел(500/30)=500/30 Тогда
ОбластьМакета.Параметры.Упаковки = ""+Упак+" упаковок "+допШт+" шт.";
Иначе
ОбластьМакета.Параметры.Упаковки = ""+Упак+" упаковок";
КонецЕсли;

Огромнейшее спасибо, получилось!
shurik_shurik
Цитата(Ardi @ 05.10.11, 23:00) необходимо зарегистрироваться для просмотра ссылки
Упак = Цел(500/30); (=16)
допШт = 500 - Упак*30; (=20)

Если Цел(500/30)=500/30 Тогда
ОбластьМакета.Параметры.Упаковки = ""+Упак+" упаковок "+допШт+" шт.";
Иначе
ОбластьМакета.Параметры.Упаковки = ""+Упак+" упаковок";
КонецЕсли;


Извините, что вмешиваюсь, может здесь условие местами перепутано??? Если результат целого от деления равняется результату деления, значит дополнительных штук не нужно...
bereznoy
Итак, ситуация следующая.

Пример на моем конкретном примере, товар с кодом 604, продаем плитку, 6.3 кв.м. согласно пакетировки площадь одной штучки 0.24 в упаковке 6 штук

6.3/0.24 = 26.24 т.е. 26 плиток и четверть плитки, чего естественно не может быть

При выводе на печать форма считает сколько упаковок и сколько штук, может по ее аналогии как то подкорректировать код ,что бы при вводе например 6.3 кв.м., программа предлагала или в большую или в меньшую сторону, т.е. спросила 6,24 кв.м продать или 6,48 кв.м. и никак не давала списывать через документ реализация товаров и услуг четверть плитки
вот код вывода подсчета пакетировки
ОбластьМакета.Параметры.Пакетировка = "В упаковке: " + ВыборкаСтрокТовары.Номенклатура.Пакетировка.Штупак + " шт.";
Если  ВыборкаСтрокТовары.Номенклатура.Пакетировка.Площадьшт=0 Тогда
         Упак = 0;
Иначе
         Если  ВыборкаСтрокТовары.Номенклатура.Пакетировка.Площадьшт = 0 или ВыборкаСтрокТовары.Номенклатура.Пакетировка.Штупак = 0 Тогда Упак = 0 Иначе
                  Упак = Цел(ВыборкаСтрокТовары.Количество / ВыборкаСтрокТовары.Номенклатура.Пакетировка.Площадьшт / ВыборкаСтрокТовары.Номенклатура.Пакетировка.Штупак);
                  допШт = ВыборкаСтрокТовары.Количество / ВыборкаСтрокТовары.Номенклатура.Пакетировка.Площадьшт - Упак*ВыборкаСтрокТовары.Номенклатура.Пакетировка.Штупак;
         КонецЕсли;


         Если Цел(ВыборкаСтрокТовары.Количество / ВыборкаСтрокТовары.Номенклатура.Пакетировка.Площадьшт) = ВыборкаСтрокТовары.Количество / ВыборкаСтрокТовары.Номенклатура.Пакетировка.Площадьшт Тогда
                 ОбластьМакета.Параметры.Упаковки = ""+Упак+" уп. "+допШт+" шт.";
         Иначе
                 ОбластьМакета.Параметры.Упаковки = ""+Упак+" уп. ";
         КонецЕсли;
КонецЕсли;
MATEVI
Почитайте про:
Окр(<Число>, <Разрядность>, <РежимОкругления>)
shurik_shurik
Можно попробовать поделить общую площадь по модулю на 0,24, и сравнить с таким же делением без модуля, сделать некоторые действию з исходной площадью и уже после этого считать упаковки..
Также, думаю, можно взять целое от деления на 0,24 потом это целое помножить на 0,24 сравнить на равенство с исходной площадью.... и т.д.
Ardi
Цитата(shurik_shurik @ 06.10.11, 10:23) необходимо зарегистрироваться для просмотра ссылки
Извините, что вмешиваюсь, может здесь условие местами перепутано??? Если результат целого от деления равняется результату деления, значит дополнительных штук не нужно...

да, условие перепутал.
bereznoy
А подскажи плиз, где в модуле надо писать условие что при вводе количества он будет пересчитывать-округлять? а то что ищу куда добавить а не могу понять 64000000.gif

HELP ME, ну подскажите, плиз, где условие вписать надо что бы сразу после ввода количества он считал целые штуки, это касается тольк оесли ед.изм. "кв.м."

Что то типо этого?
Если Товар.Ед.изм. = "кв.м." Тогда Товар.Количесвто ....

64000000.gif
bereznoy
Вроде разобрался ГДЕ, теперь больше беспокоит как прописать условие пересчета количеста
Прописал тут
// Процедура - обработчик события "ПриОкончанииРедактирования" поля табличной части "Товары"
//
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

    Если Не ОтменаРедактирования Тогда
        УстановитьАвтоотметкуСклада();

        ПересчитатьАвтоматическиеСкидки();
        
        мПерерасчетПроизведен = ЛОЖЬ;
    
    КонецЕсли;
//Начало моего условия
      
Сообщить("Моё условие");

//Конец моего условия
КонецПроцедуры //ТоварыПриОкончанииРедактирования()
logist
Вероятно пересчет надо делать для конкретного поля, а не всей ТЧ.
bereznoy
Вот мои попытки, почему то условие игнорится, сообщение не выскакивает, хотя если
Сообщить(Единица);
, тогда показывает в сообщении кв.м., что я не так делаю?
код такой
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

    Если Не ОтменаРедактирования Тогда
        УстановитьАвтоотметкуСклада();

        ПересчитатьАвтоматическиеСкидки();
        
        мПерерасчетПроизведен = ЛОЖЬ;
    
    КонецЕсли;
    
    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;

    Единица = СтрокаТабличнойЧасти.ЕдиницаИзмерения;
    Если Единица = "кв.м."
        Тогда Сообщить("Условие работает");
    КонецЕсли;
    
КонецПроцедуры //ТоварыПриОкончанииРедактирования()
logist
Цитата(bereznoy @ 17.10.11, 0:11) необходимо зарегистрироваться для просмотра ссылки
    Если Единица = "кв.м."

А у Вас что единица измерения это текст??
bereznoy
Цитата(logist @ 17.10.11, 0:20) необходимо зарегистрироваться для просмотра ссылки
А у Вас что единица измерения это текст??

Нет, подвязано к реквизиту ЕдиницаИзмерения, но мне надо отсеять только те товары, у которых единица измерения кв.м., как правильно сделать условия равенства?
logist
Цитата(bereznoy @ 17.10.11, 0:24) необходимо зарегистрироваться для просмотра ссылки
как правильно сделать условия равенства?

Сравнить с элементом справочника в котором хранится эта единица измерения.
bereznoy
Я Опорукий 31000000.gif
Что то не так, сообщение не вылетает
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
НовыйОбъект = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("кв.м.");
Единица = СтрокаТабличнойЧасти.ЕдиницаИзмерения;
    Если Единица = НовыйОбъект
        Тогда Сообщить("Условие работает");
    КонецЕсли;
logist
Может бросьте это smile.gif)
А так:
    Если Единица = НовыйОбъект.Ссылка


Или может ничего не находится по наименованию?

Стоп. А справочник ЕИ наверное подчинен номенклатуре? Если так, то нужно сначала найти единицы по владельцу а потом по наименованию.
bereznoy
Цитата(logist @ 17.10.11, 1:32) необходимо зарегистрироваться для просмотра ссылки
Стоп. А справочник ЕИ наверное подчинен номенклатуре? Если так, то нужно сначала найти единицы по владельцу а потом по наименованию.


А будьте любезны, подскажите как найти ЕИ по владельцу ,а потом по наименованию 44000000.gif
bereznoy
Что же не так, если сообщает одно и то же в сообщении
код такой
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
НовыйОбъект = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("4");
Единица = СтрокаТабличнойЧасти.ЕдиницаИзмерения;
    Если Единица = НовыйОбъект
        Тогда Сообщить("Условие работает");
        Иначе Сообщить("Фиговый я программист");
    КонецЕсли;
    Сообщить(Единица);
    Сообщить(НовыйОбъект);


logist
Цитата(bereznoy @ 17.10.11, 21:42) необходимо зарегистрироваться для просмотра ссылки
А будьте любезны, подскажите как найти ЕИ по владельцу ,а потом по наименованию 44000000.gif

Как-то так
НайтиПоРеквизиту("Наименование","кв.м.",,Строка.Номенклатура);


p.s. откройте для себя мир встроенной справки...

Цитата(bereznoy @ 17.10.11, 23:19) необходимо зарегистрироваться для просмотра ссылки
Что же не так, если сообщает одно и то же в сообщении

Может стоит задуматься над первой строкой ошибки? Я не шучу, действительно может это не Ваше....

То что отображается одинаковое наименование, это не значит что оба значения имеют одинаковую ссылку.
Попробуйте вывести Код элемента для обеих, и Вы увидите разницу. Хотя может и чуть не учли что я писал выше.
bereznoy
ОкрШтук = Окр(Штук,0,0);

Штук у меня 26,25 , округляет до 26, мне надо что бы до 27, как в моем случае?
mister-x
як варіант Цел(26,25)+1, тобто
ОкрШтук = Цел(Штук)+1;
Ardi
Цитата(mister-x @ 18.10.11, 20:45) необходимо зарегистрироваться для просмотра ссылки
як варіант Цел(26,25)+1, тобто
ОкрШтук = Цел(Штук)+1;

Тогда будет Цел(26,25)+1=27
Цел(26,00)+1=27
shurik_shurik
Штук = 26.25;
Если Цел(Штук)<Штук Тогда
    Штук = Цел(Штук)+1;
КонецЕсли
alex040269
Цитата(logist @ 17.10.11, 23:40) необходимо зарегистрироваться для просмотра ссылки
Как-то так
НайтиПоРеквизиту("Наименование","кв.м.",,Строка.Номенклатура);


p.s. откройте для себя мир встроенной справки...

вот так:
НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>);

т.е.
НайтиПоНаименованию("кв.м" ,, СсылкаНаВладельца).

А вообще это значение лучше зашить в константу и не искать каждый раз, а то кто-то решит что в наименовании "лишняя" точка и адью....

Цитата(mister-x @ 18.10.11, 20:45) необходимо зарегистрироваться для просмотра ссылки
як варіант Цел(26,25)+1, тобто
ОкрШтук = Цел(Штук)+1;


лучше так:
Окр(Знч+0,4999,0,РежимОкругления.Окр15как10)

Округление с избытком
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.