Имя: Пароль:
1C
1С v8
Получить значения номенклатуры в ТЧ
0 Gossar1C
 
05.05.13
19:58
Добрый вечер. Помогите пожалуйста разобраться в следующем... есть табличная часть в заказе клиента и допустим пользователь меняет поле количество в ней (Первоначальное если у номенклатуры есть фасовка в количество попадает фасовка к примеру 50/100/200) мне нужно сделать строгую проверочку допустим

Процедура ТоварыКоличествоПриИзменении(Элемент)
  ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
  ПроверитьКОличествоУпаковокПриИзменении(ТекущаяСтрока);
КонецПроцедуры

ПроверитьКоличествоУпаковокПриИзменении(ТекущаяСтрока)
   Если ТекущаяСтрока.Номенклатура.Фасовка > 0 Тогда
        Если Найти(Строка(ТекущаяСтрока.Количество/ТекущаяСтрока.Номенклатура.Фасовка),".") > 0 Тогда
        Сообщить("Не верно указана фасовка!!!")
        ТекущаяСтрока.Количество = ТекущаяСтрока.Номенклатура.Фасовка;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Поясню, когда пользователь хочет изменить фасовку то она должна быть кратна, тоесть фасовка к примеру 50 и пользователь может поменять либо на 100 или 150 и тд, тоесть 2 упаковки 3 упаковки. Проблема заключается в том что я не могу получить у номенклатуры в текущей строке фасовку, текущуюстроку на сервер передать тоже немогу...
1 hhhh
 
05.05.13
20:09
а зачем проверять это? И козе понятно, что

Найти(Строка(ТекущаяСтрока.Количество/ТекущаяСтрока.Номенклатура.Фасовка),".") всегда > 0
2 Gossar1C
 
05.05.13
20:12
(1) с чего?
3 ale-sarin
 
05.05.13
20:12
(1) Неправда.
4 Gossar1C
 
05.05.13
20:13
если 50 фасовка, а пользователь поставил 78, то с остатком будет
5 hhhh
 
05.05.13
20:15
(3) ну элементарный пример: количество просто 1.000, фасовка 1. Получаем > 0
6 ale-sarin
 
05.05.13
20:18
(5) Дааа? Количество - это же число.
Тоже самое: Строка(1/1) чего даст?
7 ale-sarin
 
05.05.13
20:19
+6 Другой вопрос, что проверку на дробность я бы по другому сделал. Не как автор.
8 hhhh
 
05.05.13
20:21
(6) если только у автора самописка и реквизит Количество целое число. Но в типовых не так.
9 ale-sarin
 
05.05.13
20:24
(8) Это-то понятно. Но 100 только отображается как 100.000, а на самом деле - это 100.
Результат деления 100/50 даст целое число.
10 hhhh
 
05.05.13
20:25
ща проверю
11 hhhh
 
05.05.13
20:40
(9) да, действительно, получилось 2. Тогда извиняюсь.
12 ale-sarin
 
05.05.13
20:42
(11) Бывает. У меня тоже первомай тяжелый был)
13 EugeniaK
 
06.05.13
00:51
(0)УФ, насколько я понимаю.
А в чем именно проблема то строку на сервер передать и там проверить?
Ну или по номенклатуре фасовку получить на сервере.
Вместо ТекущаяСтрока.Номенклатура.Фасовка написать
ПолучитьФасовку(ТекущаяСтрока.Номенклатура)

&НаСервере
функция ПолучитьФасовку(Номенклатура)
Возврат Номенклатура.Фасовка;
КонецФункции;
14 cw014
 
06.05.13
08:24
(13) Чего то сегодня все меня опережают. +100500
15 1Сергей
 
06.05.13
08:31
про % не слышали, да?
16 cw014
 
06.05.13
09:27
(15) ))))))))))))) Зато посмотри, как красиво получилось. Прямо индусская поэзия
17 Gossar1C
 
06.05.13
09:27
(13) спасибо сейчас попробую, но только текущую строку он вроде бы не передает на сервер оишбка XDTO
18 Gossar1C
 
06.05.13
09:39
&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
   
   ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
   
   ФасовкаНоменклатуры = ПолучитьФасовкуНоменклатуры(ТекущаяСтрока.Номенклатура);
   ПроверитьКоличествоУпаковокПриИзменении(ФасовкаНоменклатуры,ТекущаяСтрока.КоличествоУпаковок);
       
КонецПроцедуры // ТоварыКоличествоУпаковокПриИзменении()

&НаСервере
Функция ПолучитьФасовкуНоменклатуры(Номенклатура)
   Возврат Номенклатура.Фасовка;
КонецФункции

&НаСервере
Процедура ПроверитьКоличествоУпаковокПриИзменении(ФасовкаНоменклатуры,КоличествоУпаковок)
   
   Если ФасовкаНоменклатуры > 0 Тогда
       Если Найти(Строка(КоличествоУпаковок / ФасовкаНоменклатуры),".") > 0 Тогда
           Сообщить("Не соответствует количеству в упаковке!!!");
       КонецЕсли;
   КонецЕсли;

КонецПроцедуры


А как мне тогда присвоить количеству фасовку оригинальную? ну тоесть если прошло условие и не соответствует количеству в упаковке... текущую строку я передать не смогу...
19 НЕА123
 
06.05.13
09:48
(18)типа так, что-ли. можно и на клиенте

Товары.НайтиПоИдентификатору(Элементы.Товары.ТекущаяСтрока).КОличествоУпаковок = чтотоТам;
20 Gossar1C
 
06.05.13
10:12
Сделал так

&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
   
   ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
   
   // Фрагмент блокировка количества
   ФасовкаНоменклатуры = ПолучитьФасовкуНоменклатуры(ТекущаяСтрока.Номенклатура);
   Если ФасовкаНоменклатуры > 0 Тогда
       ТекущаяСтрока.КоличествоУпаковок = ПроверитьКоличествоУпаковокПриИзменении(ФасовкаНоменклатуры,ТекущаяСтрока.КоличествоУпаковок);
   КонецЕсли;
   
КонецПроцедуры // ТоварыКоличествоУпаковокПриИзменении()

&НаСервере
Функция ПолучитьФасовкуНоменклатуры(Номенклатура)
   Возврат Номенклатура.Фасовка;
КонецФункции

&НаСервере
Функция ПроверитьКоличествоУпаковокПриИзменении(ФасовкаНоменклатуры,КоличествоУпаковок)
   
   Если Найти(Строка(КоличествоУпаковок / ФасовкаНоменклатуры),",") > 0 Тогда
       Сообщить("Не соответствует количеству в упаковке!!!");
       Возврат ФасовкаНоменклатуры;
   Иначе
       Возврат КоличествоУпаковок;
   КонецЕсли;
   
КонецФункции
21 Gossar1C
 
06.05.13
10:16
Всем спасибо)
22 1Сергей
 
06.05.13
10:56
(20)
//Если Найти(Строка(КоличествоУпаковок / ФасовкаНоменклатуры),",") > 0 Тогда
Если (КоличествоУпаковок % ФасовкаНоменклатуры)<> 0 Тогда
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший