Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:21

Проблема с циклом

Автор grey0895, 29 янв 2015, 16:28

0 Пользователей и 1 гость просматривают эту тему.

grey0895

У меня тема аптека. есть перечень лекарств,, которые можно продать людям и купить у поставщика. есть виды измерения товара(граммы, упаковки и штуки).Есть количество упаковок, мы можем выбрать, сколько в упаковке пластинок с лекарствами и таблетками (например, 1:10 означает 1 пластинка по 10 таблеток). При выборе измерения товара(упаковки), программа умножает 1*10 * количество упаковок, т.е. мы получаем общее количество таблеток. на основании общего количества мы формируем цену и т.д.  Итак, сама проблема: у некоторых лекарств при заполнении всех данных и выборе измерения (упаковка) у некоторых лекарств ничего не происходит, т.е. не происходит умножения   1*10 * количество упаковок. при анализе даннной странности я пришел к циклу
   ОбТов = Элемент.Родитель.ТекущиеДанные;    
    Сер=     ОбТов.Серия;
   ЕдИзм = ОбТов.ЕдиницыИзмерения;
   Если ЕдИзм =  ЕдИзмер("Упаковка") Тогда
       Сообщить(Сер);//здесь у всех лекарств выводит сообщение
       Если Сер = Серии("1:10") Тогда
          Сообщить(Сер);//здесь у некоторых лекарств выводит сообщение
      КонецЕсли;
КонецЕсли;
Функция Серии(Строк)
   Возврат Справочники.Серии.НайтиПоНаименованию(Строк);
КонецФункции
если вы зайтете в конфигурацию, там в документе поступление товаров есть документ, в котором 2 лекарства. с одним все отлично, со вторым беда.

LexaK

бред какой-то! зачем такого урода изобретать?
есть же уже в УТ отработанный механизм
в номенклатуре есть реквизит
ЕдиницаХраненияОстатков

во всех других единицах измерения связанных(подчиненных) этой номенклатуре задан Коэффициент пересчета, и все отлично в УТ работает, перетащите от туда этот функционал и не канифольте мозги себе (и другим)

пример:
товар1, ед.хранения остатков кг(коэф=1)
есть еще ед.изм
тн(тонна)(коэф =1000)
гр(грамм)(коэф =0.001)


поступило,    количество,     ед.из.
товар1,  100, кг   - в регистр пишем приход, товар1,кг,100 * кг.коэф(1) = 100
товар1,  1,  тн -  приход,  товар1,кг,1 * тн.коэф(1000) = 1000
расход
товар1, 50000, гр - расход, товар1,кг,50000 * гр.коэф(0.001) = 50

остаток Товар1,кг,1050
и зная коэф. у других ед.измерений, легко получить остаток и в граммах и в тоннах!

тоже самое можете завести для своих пилюлек и микстурок,
и не надо разбирать текстовые строки типа Серии("1:10")
если помогло нажмите: Спасибо!

grey0895

Цитата: LexaK от 29 янв 2015, 17:52
бред какой-то! зачем такого урода изобретать?
есть же уже в УТ отработанный механизм
в номенклатуре есть реквизит
ЕдиницаХраненияОстатков

во всех других единицах измерения связанных(подчиненных) этой номенклатуре задан Коэффициент пересчета, и все отлично в УТ работает, перетащите от туда этот функционал и не канифольте мозги себе (и другим)

пример:
товар1, ед.хранения остатков кг(коэф=1)
есть еще ед.изм
тн(тонна)(коэф =1000)
гр(грамм)(коэф =0.001)


поступило,    количество,     ед.из.
товар1,  100, кг   - в регистр пишем приход, товар1,кг,100 * кг.коэф(1) = 100
товар1,  1,  тн -  приход,  товар1,кг,1 * тн.коэф(1000) = 1000
расход
товар1, 50000, гр - расход, товар1,кг,50000 * гр.коэф(0.001) = 50

остаток Товар1,кг,1050
и зная коэф. у других ед.измерений, легко получить остаток и в граммах и в тоннах!

тоже самое можете завести для своих пилюлек и микстурок,
и не надо разбирать текстовые строки типа Серии("1:10")
конечно круто что есть специальная 1с, но мне курсовую уже завтра сдавать, а все переделывать не хочется

LexaK

если препод увидит такой код, точно влепит толстый кол!!!
почти в рифму :zebzdr:

так нельзя программировать! если только вы не на франчайзера учитесь, им можно! :befhbt:
много раз был свидетелем того, как крутые франчайзеры нам такой (подобный) код писали.

извините, но тут трудно как либо помочь, :dfbbdrfb:

&НаКлиенте
Процедура ТоварыЕдиницыИзмеренияПриИзменении(Элемент)
ОбТов = Элемент.Родитель.ТекущиеДанные;
ЕдИзм = ОбТов.ЕдиницыИзмерения;
Сер=     ОбТов.Серия;
Если ОбТов.Количество = 0 Тогда
ОбТов.Количество = 1;
ОбТов.ОбщееКоличество = 10;
КонецЕсли;

Кол = ОбТов.Количество;

Если ЕдИзм = ЕдИзмер("Шт") Тогда
ОбТов.ОбщееКоличество  = Кол*Число(10);
КонецЕсли;

Если ЕдИзм = ЕдИзмер("Грамм") Тогда
ОбТов.ОбщееКоличество  = Кол*Число(1);
КонецЕсли;

Если ЕдИзм =  ЕдИзмер("Упаковка") Тогда
Сообщить(Сер);
Если Сер = Серии("1:10") Тогда
Сообщить(Сер);
//ИЛИ Сер=Серии("0,2:20") Тогда
// ОбТов.ОбщееКоличество  = Кол*Число(10);
//
// ИначеЕсли Сер=Серии("2:10") ИЛИ Сер=Серии("1:20") Тогда
// ОбТов.ОбщееКоличество  = Кол*Число(20);
//
// ИначеЕсли Сер=Серии("4:10") ИЛИ Сер=Серии("2:20") Тогда
// ОбТов.ОбщееКоличество  = Кол*Число(40);
//
// ИначеЕсли Сер=Серии("0,2:10") ИЛИ Сер=Серии("0,3:15") Тогда
// ОбТов.ОбщееКоличество  = Кол*Число(5);
//
// ИначеЕсли Сер=Серии("1:15")Тогда
// ОбТов.ОбщееКоличество  = Кол*Число(15);
// ИначеЕсли Сер=Серии("3:15")Тогда
// ОбТов.ОбщееКоличество  = Кол*Число(45);
// ИначеЕсли Сер=Серии("3:10") ИЛИ Сер=Серии("2:15") Тогда
// ОбТов.ОбщееКоличество  = Кол*Число(30);
КонецЕсли;
КонецЕсли;

ОбТов.Количество = Кол;
ТоварыКоличествоПриИзменении(Элемент);
КонецПроцедуры

если помогло нажмите: Спасибо!

grey0895

Как подсказал мне хороший человек, дело было в справочнике Серии. там я просто убрал владельца, и дело пошло :P + сам виноват, не смог донести нормально свой вопрос :^454^:

Теги:  аптека 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск