7.7 Не правильный алгоритм

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем SerzhM, 11 май 2012.

  1. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Обработка для ТСД. Выбираем докум инвентаризации, переносим из него табличную часть.
    Проблема заключается в след если новый документ и графа колФакт не было заполнено то в него все хорошо дополняется кол новое плюсуется кол старым(если все делается в одной сессии)
    Но если записать документ потом заново его открыть и начать с ним работать то при вводе кол-ва старое колво затирается =0 а новое добавляется, если дальше добавлять колво то опять все нормально и плюсуется.
    Пример было 10шт в строке, в графе кол факт(старый документ с которым уже работали) вводим шк вбиваем кол-во 4 общее кол-во должно быть 14 а ставит 4, если еще раз введем этот шк и кол-во 5 то будет 5+4=9 т.е все нормально а должно быть 19.
    Отладчиком проблему нашел но не до конца.
    Сбрасывает колво потому что снчало нужно спозиционироваться на строке а потом брать данные( выделена 1 строка и от туда берет данные колфакт а там он равен 0)
    Мучаюсь уже 2 дня так понять и не могу что нужно сделать понимаю что загвоздка в процедуре при изменении шк. Подскажите обработку прикладываю.
  2. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Скачивать не всем удобно поэтому выложу код
    Код:
    //******************************************************************************
    Функция ВвестиКоличество(Стр)
    //Колво=Форма.Параметр.Получить.КолФакт;
    Параметр = СоздатьОбъект("СписокЗначений");
    Параметр.ДобавитьЗначение(глВзятьКонтекст(Контекст), "Контекст");
    //Параметр.ДобавитьЗначение(Колво			  , "Количество");
    //Параметр.ДобавитьЗначение(Стр			  , "Стр");
    
    // открываем форму обработки
    ОткрытьФормуМодально("Обработка.ВводКоличестваИнвентаризации", Параметр);
    
    // получаем параметр возврата.
    Если Параметр.Получить("СтатусВозврата") = 0 Тогда
    Возврат 0;
    КонецЕсли;
    
    Возврат Параметр.Получить("Количество");
    КонецФункции
    
    //******************************************************************************
    Процедура Сформировать()
    КонецПроцедуры  
    
    //******************************************************************************
    Функция ИнформацияОНоменклатуре()	  
    Попытка
    ИнфоТекст="";
    
    Если Документ.Товар.Выбран()=0 Тогда
    Возврат(ИнфоТекст);
    КонецЕсли;
    
    ИнфоТекст=ИнфоТекст+СокрЛП(Документ.Товар.Наименование);
    
    Если ПустоеЗначение(Документ.Товар.Артикул)=0 Тогда
    ИнфоТекст=?(ИнфоТекст="","",ИнфоТекст+",");
    ИнфоТекст=ИнфоТекст+" арт. "+СокрЛП(Документ.Товар.Артикул);
    КонецЕсли;
    
    Возврат(ИнфоТекст);
    Исключение
    Возврат "";
    КонецПопытки;
    КонецФункции //ИнформацияОНоменклатуре()
    //******************************************************************************
    Процедура ПриИзмененииШК()
    Перем пШтрихкод, пТовар, пЕдиница, пКоличество,НайдСтрока,КолФакт;
    Если глПолучитьТоварПоШтрихкоду(ШК, пТовар, пЕдиница, пКоличество)=1 Тогда
    Если Документ.НайтиЗначение(пТовар,НайдСтрока,"Товар")=1 Тогда
    Документ.ТекущаяСтрока(НайдСтрока);
    КолФакт=ВвестиКоличество(СокрЛП(пТовар.Артикул)+" "+пТовар.Наименование);
    Если КолФакт<>0 Тогда
    //   Если ВвестиЧисло(КолФакт,пТовар.Наименование,10,2)=1 Тогда
    Документ.УстановитьЗначение(НайдСтрока,"КолФакт",КолФакт+Документ.КолФакт);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    ШК="";
    КонецПроцедуры
    //******************************************************************************
    Процедура ЗаписатьДок()
    Док1=СоздатьОбъект("Документ.ИнвентаризацияТМЦ");
    НомСтр=1;
    Док1.НайтиДокумент(Док);
    Док1.ВыбратьСтроки();
    Пока Док1.ПолучитьСтроку() = 1 Цикл
    Документ.ПолучитьСтрокуПоНомеру(НомСтр);
    Док1.Количество=Документ.КолФакт;
    глПересчетТаблЧасти(Док1,"Количество");
    НомСтр=НомСтр+1;						
    КонецЦикла;
    Док1.Записать();
    Форма.Закрыть();
    КонецПроцедуры
    //******************************************************************************
    Процедура ПриНачалеВыбораЗначения(Док)
    Если Вопрос("Сохранить изменения в документе", "Да+Нет", 0 ) = "Да" Тогда
    ЗаписатьДок();
    Иначе Возврат;
    КонецЕсли;
    КонецПроцедуры
    
    Процедура ПриВыбореДокумента()
    //Если  Док.Выбран()=1 Тогда
    //  Если  Вопрос("Сохранить изменения в документе", "Да+Нет", 0 ) = "Да" Тогда
    //  ЗаписатьДок();
    //  КонецЕсли;
    //КонецЕсли;
    Документ.УдалитьСтроки();
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку() = 1 Цикл
    Документ.НоваяСтрока();
    Документ.Товар  =Док.Номенклатура;
    //  Документ.Код    =Док.Номенклатура.Код;
    Документ.КолУч  =Док.КоличествоУчет;
    Документ.КолФакт=Док.Количество;
    КонецЦикла;
    
    КонецПроцедуры	 
    //******************************************************************************
    Процедура СкрытьУчКол()
    Перем Стр;
    Если СкрытьУчКол=1 Тогда	
    Если ВвестиСтроку(Стр,"Введите пароль",10)=1 Тогда
    Если Стр="1234" Тогда
    Документ.ВидимостьКолонки("КолУч",0);
    Иначе
    СкрытьУчКол=0;
    КонецЕсли;
    Иначе
    СкрытьУчКол=0;
    КонецЕсли;
    Иначе
    Если ВвестиСтроку(Стр,"Введите пароль",10)=1 Тогда
    Если Стр="1234" Тогда
    Документ.ВидимостьКолонки("КолУч",1); 
    Иначе
    СкрытьУчКол=1;
    КонецЕсли;
    Иначе
    СкрытьУчКол=1;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры 
    
    Процедура ОбработкаКликаПоТаблице()
    
    Если Документ.ТекущаяСтрока()=0 Тогда
    Возврат;
    КонецЕсли;
    
    Если Документ.ТекущаяКолонка()="Товар" Тогда
    // открывает многострочную часть на выбранном в таблице значений Номенклатуры
    АктивизироватьОбъект(Документ.Товар);
    ИначеЕсли Документ.ТекущаяКолонка()="КолФакт" Тогда
    Кол=Документ.КолФакт;
    Если ВвестиЧисло(Кол,"Введите количество",10,3, 60)=0 Тогда
    Возврат;
    КонецЕсли;
    Документ.Колфакт=Кол;
    
    КонецЕсли;
    
    КонецПроцедуры // ОбработкаКликаПоТаблице()
    //******************************************************************************
    Документ.НоваяКолонка("Товар",,,,,9);
    //Документ.НоваяКолонка("Код",,,,,20);
    Документ.НоваяКолонка("КолУч",,,,,2);
    Документ.НоваяКолонка("КолФакт",,,,,1);
    Документ.ВидимостьКолонки("КолУч",0);
    СкрытьУчКол=1;
    //Документ.ВидимостьКолонки("Товар",0);
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
       КолФакт=ВвестиКоличество(СокрЛП(пТовар.Артикул)+" "+пТовар.Наименование);
    Если КолФакт<>0 Тогда
    Документ.ПолучитьСтрокуПоНомеру(НайдСтрока);
    Документ.КолФакт=Документ.КолФакт+КолФакт;
    КонецЕсли;
    
  4. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Спасибо большое.
  5. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    В процессе обкатки с ТСД обнаружилось что не совсем корректно работает поиск. Если ввести вручную код тогда ищет если с ТСД нет, если у ТСД отключить посыл клавиши ентер тогда ее приходиться нажимать самому. И провел эксперемент:
    В номенклатуре(для подбора) создал окно ввода текста (индификатор) ШКТСД в формулу написал ОбработкаВнешеногоСобытия("ТСД", "BarCodeValue", ШКТСД); ШКТСД=" "
    Все прекрасно работает ищет спрашивает количество. На самом ТСД стоит настройка посылать клавишу ентер после суффикса и префикса(сами они не посылаются, отключено).
    В обработку заменели строчку поиска шк
    Код:
    Перем пШтрихкод, пТовар, пЕдиница, пКоличество,НайдСтрока,КолФакт;
    Если глПолучитьТоварПоШтрихкоду(ШК, пТовар, пЕдиница, пКоличество)=1 Тогда
    на
    Код:
    Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
    
    Перем ВремТовар, ВремЕдиница, ВремКоличество, НайдСтрока,КолФакт ;
    
    Если Событие = "BarCodeValue" Тогда
    Если глПолучитьТоварПоШтрихкоду(Данные, ВремТовар, ВремЕдиница, ВремКоличество) <> 0 Тогда
    Если Документ.НайтиЗначение(ВремТовар,НайдСтрока,"Товар")=1 Тогда
    Документ.ТекущаяСтрока(НайдСтрока);
    Документ.ПолучитьСтрокуПоНомеру(НайдСтрока);
    КолФакт=ВвестиКоличество(СокрЛП(ВремТовар.Артикул)+" "+ВремТовар.Наименование);
    Если КолФакт<>0 Тогда
    Документ.ПолучитьСтрокуПоНомеру(НайдСтрока);
    Документ.КолФакт=Документ.КолФакт+КолФакт;
    КонецЕсли;
    глСканерПосылкаДанных(1);
    
    Иначе
    глОбработкаВнешнегоСобытия(Источник, Событие, Данные);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
    В обработке он не воспринимает данные окно остается пустым. Если опять введу вручную ищет. В настройках ТСД убираю посыл кнопки интер. Открываю обработку вводятся цифры но при этом нужно потом нажимать ентер(не удобно).
    Теперь получается когда ввожу шк в номенклатру для подбора работает ищет, когда перехожу в обработку пропискивает данные не вводятся(а может и вводятсыяя но очень быстро) и поиска не происходит, перехожу опять в любой документ, Подбор и там перестает работать(именно после обработки как будто где то процесс подвисает и все) не вводятся никакие данные.
    Так как же прописать что бы в обработке работал как простой сканер и искал только по ТЧ, с событием баркод или заработал как в подборе с моей махинацией?
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Из вышесказанного так ничего и не понял. Чем не устраивал первоначальный вариант? Что не работало-то?
  7. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Да не работало. Почему то в номенклатуре для подбора с клавишей ентер(которая посылается вместе с шк от ТСД, мне нажимать клавишу ентер не нужно что бы подтвердить ввод с ТСД) все работает, а в обработке с клавишей ентер не работает, сканируешь в поле ввода шк пролетает и ничего не происходит. Если отключить посыл клавиши ентер от ТСД вместе с шк тогда в обработке все заполняется но нужно самому нажимать ентер для подтверждения ввода шк и в номенклатуре так же теперь приходиться жать ентер.
    Так в том и вопрос почему в номенклатуре с клавшей ентер работает а в обработке нет, поэтоу и скопировал в обработку процедуру поиска по шк из номенклатуры. Чуда так и не произошло.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Нужно смотреть что попадает в процедуру глПолучитьТоварПоШтрихкоду. Выложите еще раз обработку
  9. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Разобрались спасибо. Было BarcodeValueТСД в реквизите ШКТСД, И в процедуре было Если Событие= BarcodeValueТСД Тогда..... Все равно значение передавалось как BarcodeValue отсюда никакого движение и не было. Узнать смогли только когда пред если поставили Сообщить Данные, Событие.
  10. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Новая проблема. Когда товар отсканировали вышло сообщение товар с таким шк не найден, дальше сканировать отказывается. Сканируется пикает но действий нет помогает перезапуск программы. В какую сторону смотреть??
  11. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    возможно фокус потерялся... а закрытие/открытие формы помогает ? или только перезапуск 1с ?
  12. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Только перезапуск. Закрытие формы рез не дает.
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не думаю. Судя по проблеме - фокус. Т.е. позиционирование.

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