Вход | Регистрация


Информационные технологии ::

Метки:

Задачка 1С

Я
   AlexMan
07.01.04 - 08:12
Стоит задача: юзер заполняет табличную часть документа нельзя допустить 2-ух одинаковых позиций номенклатуры кроме того при выборе позиции уже имеющейся в табличной части необходимо перейти на строку где эта позиция уже используется и "встать" на "количестве" ниже представлен кусок кода с помощью которого удается перейти в нужную строку но не удается встать на "количество" как это сделать? (платформа 18 прога ТиС ред. 8_7)
Процедура ОбработкаВыбораЗначения(Зн,Эл,Фл)
   ТекТов=Товар;
   ТекНом=НомерСтроки;
   ВыбратьСтроки();
   Пока ПолучитьСтроку()=1 Цикл  
       Если (ТекТов=Товар) и (ТекНом<>НомерСтроки) Тогда    
           АктивизироватьСтроку(НомерСтроки);
           Активизировать("Количество",1);
           прервать;    
       КонецЕсли;
   КонецЦикла;    
КонецПроцедуры
 
  Рекламное место пустует
   skunk
 
1 - 07.01.04 - 10:02
Не спеши. У людей во первых праздник. Во вторых своих забот пока хватает.
   345
2 - 07.01.04 - 10:40
ВыгрузитьТаблЧасть(ТЗ)
тз.Свернуть ...
ЗагрузитьТабличнуюЧасть

но если этот приколист юзер продает один и тот же товар в разных строках по разным ценам ....

тогда
ВыгрузитьТаблЧасть(ТЗ)
кСтр = тз.количествострок()
тз.Свернуть ("Товар","количество")
если тз.КоличествоСтрок() <> кСтр тогда
  Предупреждение ("Бурундук - птица"+РазделительСтрок+
  "Пшел вон крылья искать");
  СтатусВозврата(0);
   AlexMan
3 - 07.01.04 - 13:01
(2) Необходимо после выбора товара сразу переместится в строку в которой товар уже использовался ,к тому же если :
ВыгрузитьТаблЧасть(ТЗ)
тз.Свернуть ...
ЗагрузитьТабличнуюЧасть

Тогда там количество сложится (и кстате налоги в частности НДС не всегда можно просто сложить)а второй пример похоже на то что я предложил только без поика строки в которой встретил тот же товар.........
Расскожу ситуацию поподробней: звонит клиент по телефону и заказывает товары нельзя допустить чтобы он (клиент) заказал один и тот же товар дважды иначе потом возникает вопрос сколько ему отгружать? причем количество он может 2 раза назвать разное.... по этому менеджер должен быстро найти товар который уже есть в табличной части.....уф........
   skunk
 
4 - 07.01.04 - 13:09
А твой, что не работает, по логике вроде верно все.
1. Если док большой прикрути к нему список, только не так как pit а просто паралельно, добавляешь товар - добавляешь в список, удаляешь товар - удаляешь из списка. Поиск товара на повторость в списке через НайтиЗначение. Если находишь получаешь номер и по нему активируешь строку и реквизит.
2. Можно сделать выгружать в список каждый раз при проверки на повторность и далее поиск (смотри п.1).
   AlexMan
5 - 07.01.04 - 13:15
(4) Твои варианты действительно хороши первый кстате мне очень нравится (с добавлением/удалением) в/из списка. Второй тоже неплох да и не тормозит некогда но я по натуре перестраховщик поэтому использую первый как правило (только когда писать лень тогда второй).
Мой код тоже работает нормально и даже строку находит нужную но нехочет активизировать "количество".... (это в (0) написано.......
   skunk
 
6 - 07.01.04 - 13:32
Конт.АктивизироватьСтроку();
Конт.Активизировать("Количество");

Незнаю у меня так есть работает
   AlexMan
7 - 07.01.04 - 13:43
(6) Платформа какая ?
   skunk
 
8 - 07.01.04 - 13:49
релиз 18, ТиС 929
   AlexMan
9 - 07.01.04 - 13:55
Как я уже писал (0) у меня платформа 18 прога ТиС ред. 8_7 и неработает , видимо придется юзерам самостоятельно из колонки "Номенклатура" курсор перевести в "количество" (мой начальник очень не любит когда юзеры делают работу которую можно не делать) попытаюсь его убедить что подругому 1С работать не умеет (это я буду делать не впервый раз так что мне непривыкать)........
   345
10 - 07.01.04 - 13:59
в форме дока прописать проверку в двух местах

Первая - когда ввели товар через Ins
Примерно так....

Процедура ПриВводеТовара()
ВыгрузитьТаблЧасть(ТЗ)
мм = "";
если ТЗ.НайтиЗначение(Товар,мм,"Товар") =1 тогда
// здесь сообщить о найденном товаре и отпозиционироваться через Активизироватьстроку

Проблема - отловить и отменить повторный ввод товара в этом случае... но это тоже делается

Второе место - ОбработкаПодбора
там - все элементарно ... см любую типовую ....
 
  Рекламное место пустует
   345
11 - 07.01.04 - 14:04
Кстати .... о птичках .... 18 релиз и опер учет несовместимы ... Глюки-С.....
   WhiteCat
12 - 07.01.04 - 14:08
(9) Решаема твоя проблема, только нужно это делать другим способом. В твоем алгоритме (0) есть пара ошибок, вернее, ситуаций, которых 1С не отработает. Смотри. Допустим, у тебя есть товар в строке №1. Юзверь вводит еще один такой же в строку №5. Даже если ты определишь, что в первой строке у тебя уже есть такой товар, то тебе нужно удалить его из строки №5 и убить саму строку, а 1С не позволит тебе это сделать, так как строка в данный момент редактируется интерактивно (первая ситуация). А потом ты активизируешь колонку "Количество", а 1С тебе говорит, что "этот метод нельзя вызвать отсюда" или что-то подобое (вторая ситуация).
Как победить: используй подбор (ОбработкаПодбора()). В этом случае табличная часть документа не редактируется ИНТЕРАКТИВНО, и ты можешь делать с ней все, что хочешь: удалять строки, добавлять их и т.д. Но удалять тебе ничего не придется. В обработке подбора ты ищешь выбранный юзером товар, если находишь - то запоминаешь его количество, введенное ранее, если не находишь - то Колво = 0. Далее просишь ввести количество. Юзверь видит, что этот товар уже есть в документе (Колво <> 0) и либо не вводит его повторно, либо исправляет количество на нужное. А дальше алгоритм либо вводит новую строку в документ, либо исправляет количество на новое, если товар уже есть в табличной части.
Начальнику должно понравиться.
   skunk
 
13 - 07.01.04 - 14:10
а подробнее если можно или линк, плиз.
   AlexMan
14 - 07.01.04 - 14:11
(10) По поводу первого случая: примерно его и обсуждаем только с той лиш разницей что я использую предопределенную процедуру  ОбработкаВыбораЗначения() (если делал ПриВыботеТовара() эффект тот же)
По поводу второго : обработка подбора срабатывает только после "ОткрытьПодбор" например после нажатия кнопки "Подбор" в типовых конф. и при этом в таблицу значений (присутствует как правило в форме подбора) можно набивать все что угодно и ини будут все время "Сворачиватся()" а это не есть хорошо тем более пользоватся подбором юзеров не заставиш....
   skunk
 
15 - 07.01.04 - 14:11
их бин, (13) для (11)
   AlexMan
16 - 07.01.04 - 14:22
Проблема почти решена всеобщими усилиями вот работающий код :Процедура ОбработкаВыбораЗначения(Зн,Эл,Фл)
   //ТекТов=Товар;
   ТекНом=НомерСтроки;
   ВыбратьСтроки();
   Пока ПолучитьСтроку()=1 Цикл  
       Если (Зн=Товар) и (ТекНом<>НомерСтроки) Тогда    
           АктивизироватьСтроку(НомерСтроки);
           Активизировать("Количество",1);
           прервать;    
       КонецЕсли;
   КонецЦикла;    
КонецПроцедуры    
теперь правда после того как прозошол переход к нудной строке нужной колонке ("количество") она (колонка "каличество") не хочет открыватся блин......
кстате при последнем варианте кода ничего удалять и не надо (12) проверь сам........
   skunk
 
17 - 07.01.04 - 14:29
16 здесь плюх наверное в том что у тебя едиться уже другая строка надо это просечь и обломать.
   AlexMan
18 - 07.01.04 - 14:33
(16) А как это сделать???
   AlexMan
19 - 07.01.04 - 14:34
Т.Е. (17) А как это сделать???
   skunk
 
20 - 07.01.04 - 14:42
Надо думать как это сделать правильно, а у меня времи сейчас в обрез. У клиента зарплат с брендила надо до утра справочник итогов восстановить, итак чухю до утра не спать. Если не найдешь или не подскажут, тоды подумаем.
   AlexMan
21 - 07.01.04 - 14:47
(20) Хорошо , спасибо за помощь ,может кто еще подскажет пока....
   345
22 - 07.01.04 - 14:49
(16) именно так ....

но можно вставить между активизироватьСтроку и Активизировать ....
------------------------------------
АктивизироватьСтроку(НомерСтроки);

запросить количество через ВвестиЧисло.... (а там есть значение по умолчанию....кстати )
записать в поле количество ....

Активизировать("Количество",1);
------------------------------------
и открывать поле количество не надо


насчет 18 релиза .... поищи на Т1С, там часто упоминается ....
   AlexMan
23 - 07.01.04 - 15:03
Вот код который очень неплохо работает (я считаю что его можно оставить как окончательный:Процедура ОбработкаВыбораЗначения(Зн,Эл,Фл)
   //ТекТов=Товар;
   ТекНом=НомерСтроки;
   ВыбратьСтроки();
   Пока ПолучитьСтроку()=1 Цикл  
       Если (Зн=Товар) и (ТекНом<>НомерСтроки) Тогда    
           АктивизироватьСтроку(НомерСтроки);
           ВвестиЧисло(КоличествоТовара,"Введите новое количество товара "+Товар,,,);
           Количество=КоличествоТовара;
           //Активизировать("Количество");
           прервать;    
       КонецЕсли;
   КонецЦикла;    
КонецПроцедуры
Даже Активировать "количество" не надо , СПАСИБО ВСЕМ А ОСОБЕННО 345........
   345
24 - 07.01.04 - 15:19
(23) немного не так....

АктивизироватьСтроку(НомерСтроки);

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

Дл = Metadata.Document(CurrentDocument().Kind()).TableAttribute("Количество").Length;

Тч = Metadata.Document(CurrentDocument().Kind()).TableAttribute("Количество").precision;

если ВвестиЧисло(КТ,"Кол-во "+Товар,Дл,Тч,)= 1 тогда
    если КТ <= 0  тогда
         DoMessageBox ("Идиот.... И кто такое количество продать могЁт?");  
         return;
    иначе
         Количество=КТ;
         прервать;    
иначе
    Break;
конецесли;


зы - играть с подсказкой бесполезно ... полезно посмотреть, сколько символов для подсказки будет использовано .....
   345
25 - 07.01.04 - 15:19
Пардон...
Это вставка в процедуру в (23)...
   AlexMan
26 - 07.01.04 - 15:33
(24) Абсолютно согласен ,что необходимо еще некоторые проверки поставить (да и строку пересчитать послеввода количества через ВвестиЧисло тоже надо) но я отражал в коде только основную мысль и не включал ничего лишнего для пущей понятновти........Но извеняюсь не понял почему синтаксис Аглицкий?????
   AlexMan
27 - 07.01.04 - 15:35
(24) По поводу подсказки ты прав.
   345
28 - 07.01.04 - 16:02
Да как то родней английский ... привычней .... знаете ли ... и от других продуктов не отвыкаешь ....



Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует