|
v7: Витрина (продажа последней позиции) | ☑ | ||
---|---|---|---|---|
0
monsterZE
27.07.11
✎
17:19
|
вобщем насущная проблема - выписываются расходные накладные, правятся задним числом (т.е. в течении дня может быть переделана неск. раз)
задача, при расходовании товара полностью приписывать в печ.форме слово витрина. Сделал вот так.. протестил.. но почему-то (у операторов) бывает, что не ставится витрина, когда б по идее должна. =(( Посмотрите, плиз. Процедура ОбработкаВитрины() Док=СоздатьОбъект("Документ."+Вид()); регОст = СоздатьОбъект("Регистр.ОстаткиТоваров"); Если (Док.НайтиПоНомеру(НомерДок,ДатаДок)=1) и (Док.ТекущийДокумент().Проведен()=1) Тогда // перепроводится ВремТаб=СоздатьОбъект("ТаблицаЗначений"); Док.ВыгрузитьТабличнуюЧасть(ВремТаб,"Товар,Количество"); ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл стр=ПолучитьПустоеЗначение(); Если ВремТаб.НайтиЗначение(Товар,стр,"Товар")=1 Тогда ВремТаб.ПолучитьСтрокуПоНомеру(стр); Если ВремТаб.Количество<>Количество Тогда ПолныйОстаток = регОст.СводныйОстаток(Товар,Склад,"ОстатокТовара"); Витрина=?(ПолныйОстаток-Количество+ВремТаб.Количество>0,0,1); КонецЕсли; Иначе ПолныйОстаток = регОст.СводныйОстаток(Товар,Склад,"ОстатокТовара"); Витрина=?(ПолныйОстаток-Количество>0,0,1); КонецЕсли; КонецЦикла; Иначе // проводится первый раз ВыбратьСтроки(); Пока ПолучитьСтроку()=1 Цикл ПолныйОстаток = регОст.СводныйОстаток(Товар,Склад,"ОстатокТовара"); Витрина=?(ПолныйОстаток-Количество>0,0,1); КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
1
monsterZE
27.07.11
✎
17:20
|
срабатывает при записи документа
|
|||
2
monsterZE
27.07.11
✎
17:22
|
проверка по количеству, чтобы не писалось, когда не нужно.
т.е. если на момент первого проведения документа остаток был больше нуля, а на момент последующего стал ноль. |
|||
3
miki
27.07.11
✎
17:22
|
и что, всякий раз проводите на ТА?
|
|||
4
monsterZE
27.07.11
✎
17:23
|
выделять "витрину" на отдельный склад не хотят, т.к. товара очень много, и "им будет сложно ее контроллировать"... =(
|
|||
5
Rie
27.07.11
✎
17:24
|
(3) +1
|
|||
6
monsterZE
27.07.11
✎
17:28
|
(3) возможно и нет.. но вроде по словам операторов
у них как-то получается такое, что за день выписывал товар только один чел. купил полностью и витрина не приписалась.. |
|||
7
monsterZE
27.07.11
✎
17:29
|
вот думаю, мож я где накосячил... и ничего чет не придумывается. =) у себя тестирую - работает правильно..
|
|||
8
monsterZE
27.07.11
✎
17:31
|
как програмно заставить перепроводить на ТА? =) бо операторы жмут кнопки не глядя. =)
|
|||
9
Tatitutu
27.07.11
✎
17:32
|
ИМХО. код бред - давно такого не видел.
Что будет если у тебя в документе табличной части будет несколько строк с одинаковым товаром , но с разным количеством свернуть - попробуй вот это на кой Если (Док.НайтиПоНомеру(НомерДок,ДатаДок)=1) и (Док.ТекущийДокумент().Проведен()=1) Тогда зачем врем. таблица вместо временного расчета регистра про ТА уже сказали |
|||
10
miki
27.07.11
✎
17:34
|
и это вот шаманство:
ВремТаб.Количество<>Количество есть несколько строк с одинаковым товаром? - выгрузи в ТЗ, сверни и сравнивай один раз с остаком... |
|||
11
monsterZE
27.07.11
✎
17:36
|
ограничение
несколько строк с одинаковым товаром в ТЧ быть не может. |
|||
12
miki
27.07.11
✎
17:37
|
(8)у провести() есть параметр.
|
|||
13
monsterZE
27.07.11
✎
17:37
|
точнее одинаковый товар, при добавлении сворачивается.
|
|||
14
monsterZE
27.07.11
✎
17:39
|
(10) Шаманство =) чтобы не ставило витрина, если товар уже закончился к моменту редактирования. Но купил последний товар другой покупатель.
|
|||
15
Tatitutu
27.07.11
✎
17:39
|
Вот смотри
зашел ты в условие свое нелепое Если ВремТаб.Количество<>Количество Тогда Витрина = //вернет результат КонецЕсли а если условие не срабатывает то ничего и не будет |
|||
16
monsterZE
27.07.11
✎
17:42
|
(15) для чего это условие:
ищется этот-же документ, если он есть и проведен выгружается его ТЧ и сравнивается с сохраняемым если количество товара в редактирыемом документе не изменилось то витрину приписывать этому товару не нужно |
|||
17
Tatitutu
27.07.11
✎
17:43
|
(0) это просто жесть , а не код
ответь по твоему коду //если ты нашел Док. его выгружаешь Док.ВыгрузитьТабличнуюЧасть(ВремТаб,"Товар,Количество"); //то почему перебираешь строки так ВыбратьСтроки(); //а не Док.ВыбратьСтроки(); мой совет : удали всю эту процедуру , покури и напиши заново.Стыдно за такой код должно быть. |
|||
18
miki
27.07.11
✎
17:43
|
(16) :))
количество может и не поменяться, а вот остатки (см. (0) " правятся задним числом ") - вполне могут измениться. |
|||
19
monsterZE
27.07.11
✎
17:45
|
Tatitutu предложи свою реализацию =)
(17) мля... =) ВыбратьСтроки() это для записываемого документа а не найденного |
|||
20
miki
27.07.11
✎
17:45
|
>>сравнивается с сохраняемым
афайк, к моменту проведения док _ужЕ записан_, так что твоя проверка на изменение кол-ва - фуфел. |
|||
21
Tatitutu
27.07.11
✎
17:46
|
(16) ты сам себя слышишь ?
"(15) для чего это условие: ищется этот-же документ, если он есть и проведен" и эта процедура вызывается в документе при его записи ???? ты когда домой прийдешь - позвони с городского на сотовый себе и удостоверься что ты домой нормально дошел - поговори с собой. |
|||
22
monsterZE
27.07.11
✎
17:49
|
(20) Не понял, почему?
(21) спасибо за коменты. =) больше не нужно, если не по делу. |
|||
23
miki
27.07.11
✎
17:50
|
(19)сранивай всегда количество в доке с остаком и всё.
И ещё. Если будешь разрешать переделывать доки задним числом по-любому попадешь на некорректное заполнение витрины. Хоть двигай док на ТА, хоть не двигай. |
|||
24
miki
27.07.11
✎
17:51
|
(22)потому что, чтобы провести док, его _сначала_ надо _записать_.
|
|||
25
Tatitutu
27.07.11
✎
17:52
|
(19)
чему изначально у тебя равна витрина что это реквизит или переменная ? ну смотри же сам, как еще намекать было у тебя в документе Бублики 54 стало 59 //теперь читай код ВремТаб.ПолучитьСтрокуПоНомеру(стр); Если ВремТаб.Количество<>Количество Тогда //а если было 54 и осталось 54 чему равна Витрина ПолныйОстаток=регОст.СводныйОстатокТовар,Склад,"ОстатокТовара"); Витрина=?(ПолныйОстаток-Количество+ВремТаб.Количество>0,0,1); КонецЕсли; |
|||
26
monsterZE
27.07.11
✎
17:52
|
(23) (24) или я чего-то не понимаю... =) или криво объясняю..
ща... |
|||
27
miki
27.07.11
✎
17:57
|
(26)Объясняю: есть на остатке 1 баран. Ты проводишь док, в котором списываешь этого барана. Пусть, для простоты на ТА. В проведении сравниваешь с остаком. 1 не меньше1. Док провелся. Затем опять открываешь док. Ставишь, что баранов 2. По твоей логике на момент проведения у реквизита дока "Колиечство" будет старое значение "1"? И ты сможешь продать ужЕ двух баранов?
|
|||
28
monsterZE
27.07.11
✎
18:22
|
(25)
витрина, это реквизит тч расходника витрина изначально=0, заполняется по вышеприведенной процедуре и если количество в сохраненном и проведенном ранее документе не отличается от сохранаяемого сейчас, изменяться не должна. если бублики изначально списали 54 (5 осталось) а потом исправили на 59 и списали под ноль, должно подняться флажек витрина. (26) при проведении, я ничего не сравниваю. процедура вызывается при записи. как ты написал я вобще ничего не понял. =) с остатками я ничего не сравниваю. сравниваются количества в старом (уже проведенном документе) и в новом, редактируемом. это один и тотже документ. |
|||
29
monsterZE
27.07.11
✎
18:23
|
пардон не (26) а (27) =)
|
|||
30
miki
27.07.11
✎
18:28
|
а проглядел, показалось, что при проведении, сорри.
|
|||
31
miki
27.07.11
✎
18:32
|
но, всё равно:
>>если количество в сохраненном и проведенном ранее документе не отличается от сохранаяемого сейчас, изменяться не должна повторю: остатки-то могли измениться? и сравнивать лучше при проведении - тогда не придется заниматься лишней арифметикой, типа ПолныйОстаток-Количество+ВремТаб.Количество |
|||
32
monsterZE
27.07.11
✎
18:41
|
(31) да. изначально втыкал ее при проведении.. но по каким-то причинам отказался.. и переделал. уже не помню почему =(
вобщем, если правильно понял, стоит добавить в #Записать? Провести? Закрыть #Записать? Провести(3)? Закрыть зы. код может и бред, но приходится подстраиваться под механизм формировавшийся годами.. который не просто изменить. =(( |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |