Имя: Пароль:
1C
 
Добавление новой строки в ТЧ, если цена в предудущей строке была изменена
, ,
0 Смертник
 
18.03.15
09:50
УТ 10.3.15.9
Проблема такая, если в Чеке ККМ сканером выбрали товар и на него поменяли цену, нужно если следущим сканируют этот же товар, то добавлять новую строку, а не добавлять количество в существующую.
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    РаботаСДиалогами.ПоказатьКодАртикул(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Номенклатура);
    РаботаСДиалогами.ПоказатьСуммуБезСкидок(мКолонкиТовары, ОформлениеСтроки.Ячейки, ДанныеСтроки.Цена, ДанныеСтроки.Количество);
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
        |    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
        |    СУММА(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
        |            &Дата,
        |            ТипЦен = &ТипЦен
        |                И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних
        |
        |СГРУППИРОВАТЬ ПО
        |    ЦеныНоменклатурыСрезПоследних.Номенклатура";
    Запрос.УстановитьПараметр("Дата",ЭтотОбъект.Дата);
    Запрос.УстановитьПараметр("ТипЦен",Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничные"));
    Запрос.УстановитьПараметр("Номенклатура",ДанныеСтроки.Номенклатура);
    СигаретыЦенаПервоначальная = Запрос.Выполнить().Выгрузить();
    ГруппаСигареты = Константы.РазрешитьИзмененияЦен.Получить();
    Если мМожноМенятьЦенуВДокументе = Ложь Тогда
        Если ДанныеСтроки.Номенклатура.НоменклатурнаяГруппа = ГруппаСигареты Тогда
            //bva
            Если НомСиг = 0 Тогда
                Для Каждого Строка Из ЭтотОбъект.Товары Цикл
                    Если Строка.Номенклатура = ДанныеСтроки.Номенклатура Тогда
                           Цена = ДанныеСтроки.Сумма/ДанныеСтроки.Количество;
                        Если Цена > СигаретыЦенаПервоначальная[0].Цена Тогда
                            ЭлементыФормы.Товары.ДобавитьСтроку();
                        
                            ЭлементыФормы.Товары.ТекущиеДанные.Номенклатура = ДанныеСтроки.Номенклатура;
                            ЭлементыФормы.Товары.ТекущиеДанные.Количество = 1;
                            ЭлементыФормы.Товары.ТекущиеДанные.Артикул = ДанныеСтроки.Артикул;
                            ЭлементыФормы.Товары.ТекущиеДанные.ШтрихКод = ДанныеСтроки.Штрихкод;
                            НомСиг = 1;
                        КонецЕсли;
                        
                    КонецЕсли;
                КонецЦикла;
            КонецЕсли;
            мКолонкиТовары.Цена.ТолькоПросмотр = Ложь;
            мКолонкиТовары.Цена.Доступность = Истина;
            мКолонкиТовары.Цена.ЭлементУправления.ТолькоПросмотр = Ложь;
        Иначе
            мКолонкиТовары.Цена.ТолькоПросмотр = Истина;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры // ТоварыПриВыводеСтроки()

НомСиг - переменная, объявленнная, служит для того чтобы избежать зацикливания.
Если убрать, то идет зацикливания и 1С завершает работу, помогите разобраться в чем дело...
1 Смертник
 
18.03.15
10:26
помогите
2 Смертник
 
18.03.15
10:50
sos
3 chelentano
 
18.03.15
10:57
(0) Это всё делается при выводе строки? Жесть...
4 butterbean
 
18.03.15
10:59
(0) вы что, в одном чеке на один и тот же товар ставите разную цену??
5 Смертник
 
18.03.15
11:04
(4)да, на сигареты...
(3) а больше негде(((
6 Смертник
 
18.03.15
11:06
(4) Директора магазинов сказали что так должно быть
7 butterbean
 
18.03.15
11:08
(6) очень странно, как одно и то же может по разному стоить...
тебе нужно ковырять ОбработкаВнешнегоСобытия, смотреть что там происходит при сканировании
8 Смертник
 
18.03.15
11:12
(7)Процедура ВнешнееСобытие(Источник, Событие, Данные)
    НомСиг = 0;
    Если Не ВводДоступен() Тогда
        Возврат;
    КонецЕсли;

    ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);

КонецПроцедуры // ВнешнееСобытие()
Уходит в Истину и переходит при выводе строки....и тут наступает ж...
9 D_E_S_131
 
18.03.15
11:16
Ну и пиши все,  чтотебе нужно после "ПолучитьСерверТО()...".
10 Смертник
 
18.03.15
11:17
Так я же еще вроде не получил ни товар - ни цену или я ошибаюсь
11 chelentano
 
18.03.15
11:25
(5) ну если "а больше негде(((" тогда срочно зовите программиста
12 chelentano
 
18.03.15
11:29
а вообще, насколько я помню, должна вызываться процедура "ОбработкаПодбора", в ЧекККМ она находится в форме документа
13 Смертник
 
18.03.15
11:31
зависает все равно...не могу понять причину
14 Смертник
 
18.03.15
14:51
(12) Вызывается, то есть надо это в обработке подбора сделать?