|
v7: Удаление строк документа | ☑ | ||
---|---|---|---|---|
0
OnePrg
09.12.21
✎
21:48
|
Док = СоздатьОбъект("Документ.ГрупповаяПереоценка");
тбПереоценка.ВыбратьСтроки(); Пока тбПереоценка.ПолучитьСтроку() = 1 Цикл Док.НайтиДокумент(ВыбГрупповаяПереоценка); Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку() = 1 Цикл Если (Док.Склад = тбПереоценка.Склад) и (Док.Товар = тбПереоценка.Товар) Тогда Если тбПереоценка.НаОстатке = 0 Тогда Док.УдалитьСтроку(); Док.Записать(); Иначе Док.Количество = тбПереоценка.НаОстатке; Док.СуммаНОВ = Док.Количество * Док.ЦенаНов; КонецЕсли; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; Док.Провести(); После выполнения этого кода, у меня в Док нет строк, хотя в тбПереоценка в колонка НаОстатке есть не только нули. Отладчиком проверял: заходит по условию в обе ветки. Что не так? |
|||
1
VladZ
09.12.21
✎
21:50
|
Док.ВыбратьСТроки() и Док.УдалитьСтроку() - вот что не так.
|
|||
2
OnePrg
09.12.21
✎
21:51
|
Это уже перекрученный код, изначально было так.
Док = СоздатьОбъект("Документ.ГрупповаяПереоценка"); Док.НайтиДокумент(ВыбГрупповаяПереоценка); тбПереоценка.ВыбратьСтроки(); Пока тбПереоценка.ПолучитьСтроку() = 1 Цикл Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку() = 1 Цикл Если (Док.Склад = тбПереоценка.Склад) и (Док.Товар = тбПереоценка.Товар) Тогда Если тбПереоценка.НаОстатке = 0 Тогда Док.УдалитьСтроку(); Иначе Док.Количество = тбПереоценка.НаОстатке; Док.СуммаНОВ = Док.Количество * Док.ЦенаНов; КонецЕсли; Прервать; КонецЕсли; Док.Записать(); КонецЦикла; КонецЦикла; Док.Провести(); |
|||
3
OnePrg
09.12.21
✎
21:51
|
(1) Так прервать же есть.
|
|||
4
OnePrg
09.12.21
✎
21:52
|
(1) ладно, щас переделаю
|
|||
5
OnePrg
09.12.21
✎
22:04
|
(1)
вот так тоже не работает Док = СоздатьОбъект("Документ.ГрупповаяПереоценка"); Док.НайтиДокумент(ВыбГрупповаяПереоценка); тбПереоценка.ВыбратьСтроки(); Пока тбПереоценка.ПолучитьСтроку() = 1 Цикл Для инд = 1 по Док.КоличествоСтрок() Цикл Док.ПолучитьСтрокуПоНомеру(инд); Если (Док.Склад = тбПереоценка.Склад) и (Док.Товар = тбПереоценка.Товар) Тогда Если тбПереоценка.НаОстатке = 0 Тогда Док.УдалитьСтроку(); Иначе Док.Количество = тбПереоценка.НаОстатке; Док.СуммаНОВ = Док.Количество * Док.ЦенаНов; КонецЕсли; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; Док.Провести(); |
|||
6
acanta
09.12.21
✎
22:10
|
Док.Удалить строку(инд);
Инд=инд-1; |
|||
7
OnePrg
09.12.21
✎
22:13
|
(6) странно
в СП написано УдалитьСтроку(); Синтаксис: УдалитьСтроку() Назначение: Удалить текущую строку документа. ну щас попробую |
|||
8
Харлампий Дымба
09.12.21
✎
22:15
|
Правильно, надо учить семёрку!
Безотносительно к качеству кода в (0), он рабочий, хотя и на грани. Вопрос по алгоритму: А если в тбПереоценка товар с НаОстатке<>0, а в документе его ещё нет? В твоем коде ничего не происходит в этом случае. Сдаётся мне должно быть где-то Док.НоваяСтрока() |
|||
9
OnePrg
09.12.21
✎
22:17
|
(6) нифига СП был прав
Док.УдалитьСтроку(инд); Слишком много параметров передано при вызове функции/процедуры объекта |
|||
10
OnePrg
09.12.21
✎
22:20
|
(8) операторы заполняют переоценку по остаткам, а потом шаловливые ручки задним числом правят остатки. Этот код приводит документ к новым остаткам. Если на остатке нет, а в документе есть - удаляем строку, если на остатке есть, то пишем в документ остаток.
|
|||
11
acanta
09.12.21
✎
22:22
|
Можно выгрузить в тз, дописать и свернуть. Запись документа в цикле излишне дергает базу.
|
|||
12
OnePrg
09.12.21
✎
22:23
|
(11) изначально записи в цикле не было, вставил, думал это поможет
|
|||
13
Харлампий Дымба
09.12.21
✎
22:23
|
(10) Ты изменяешь остаток, только если он уже есть в документе. А если его в документе нет, а в тбПереоценка есть - то в твоем коде остаток в документ не добавляется. То есть, если Док изначально пустой, то он пустым и останется. В этом был мой вопрос.
|
|||
14
OnePrg
09.12.21
✎
22:26
|
(13) точно
как всегда ларчик просто спасибо |
|||
15
OnePrg
09.12.21
✎
22:26
|
(13) тбПереоценка не корректно заполнялось
заработался |
|||
16
Харлампий Дымба
09.12.21
✎
22:28
|
Ты же ещё и документ перечитываешь Док.НайтиДокумент(ВыбГрупповаяПереоценка) в цикле Пока тбПереоценка.ПолучитьСтроку() = 1 Цикл - это точно надо делать перед тбПереоценка.ВыбратьСтроки();
И Док.Записать() лучше унеси из цикла и поставь перед Док.Провести() Остальное некрасиво, но терпимо |
|||
17
OnePrg
09.12.21
✎
22:29
|
(16) та я же говорю: это уже передёрганный код, щас наведу порядок
|
|||
18
Злопчинский
09.12.21
✎
22:33
|
(17) аккуратнее передергивать надо...
|
|||
19
hhhh
10.12.21
✎
01:18
|
(5) Док.Записать(); нету
|
|||
20
Ёпрст
10.12.21
✎
07:32
|
(0) весь код, в топку, было уже?
|
|||
21
Злопчинский
10.12.21
✎
12:12
|
(20) все так подумали, но толерантность растет и нельзя обижать альтернативно думающих ;-)
хотел переписать код сюда, а потом думаю - а нахрена? |
|||
22
Kigo_Kigo
10.12.21
✎
12:31
|
Ну для такого кода в принципе помогло бы после удаления строки их перевыбрать опять
Док.УдалитьСтроку() Док.ВыбратьСтроки() |
|||
23
Kigo_Kigo
10.12.21
✎
12:34
|
(20) (21) Да чт написано то написано и скорее всего это поделка на использования раз, ну или раз в месяц максимум, по этому терпимо, там главная проблема - это перепроведение задним числом, которое надо закрывать и регламентом перепроводить до точки закрытия
ну то есть можно лубую дичь вытворять минус 4 дня, далее , перепроводка и закрытие периода, кто не успел того "того" |
|||
24
Злопчинский
10.12.21
✎
12:56
|
(23) а почему 4 дня?
|
|||
25
Kigo_Kigo
10.12.21
✎
12:58
|
(24) это к примеру, кому то 4 дня (обычно сменяемость смен 3 дня + день), кому то месяц, для получения и фиксации отчетности, зависит от предприятия
|
|||
26
Злопчинский
10.12.21
✎
13:08
|
задним числом обычно приходится вводить возвраты от покупателей (это некритично), отчеты комиссионеров (это некритично). остальное - в ТА. Бывает иногда что-то надо в заднем счиле действительно подправить, но это редко и не является нормой типа "4 дня"
|
|||
27
Kigo_Kigo
10.12.21
✎
13:17
|
(26) Да хере те чушь нести, всякое подобное в сабже когда мне надоело выковыривать косяки, ввел правило 4 дня, для определенных видов доков, все как бабка пошептала, а уж что то исправить задним числом через служебку "кого надо" подписи, а там по головке за это не гладят, теперь все вовремя и в срок, редко еосяки, в основном ввода всплывают, ну люди не роботы- тоже ошибаются
|
|||
28
Злопчинский
10.12.21
✎
14:12
|
Дзен ждет тебя ещё.. ;-)
Давно-давно у себя тоже так было. Потом даже в текущем дне отрубил работу задним числом. Слава богу опт, не сильно интеллектуальные процессы.. Задним числом пару человек только могут работать. Один из них бух. И то, суко, регулярно приходится "веником бить", ну не держат они в голове нихрена кроме однйо текущей задачи типа "что надо сделать сейчас", а какие последствия этого или дальнейшую цепочку действий - всё, ноль... а сопли надоело постоянно вытирать. При более-менее активной работе даже пару дней заднего числа уже может потянуть длинную историю косяков, исправлять потом заколебешься, несложно, но мутоно. так что - закручиваю гайки и норм работают. Понятное дело, что не у всех такая хорошая ситуация, где-то побольше бардака, но julf там скорее всего надо процесс перестраивать или типовую подгонять... |
|||
29
Злопчинский
10.12.21
✎
14:13
|
(27) "ну люди не роботы- тоже ошибаются" - это точняк. поэтому основное - не давать ошибаться. а если они знают, что если вдруг что - то типа можно поправить - начинают (несознательно) халявить по чуть-чуть...
|
|||
30
Злопчинский
10.12.21
✎
14:14
|
Поэтому например у всяких лавочников тяжело идет процесс внедрения WMS, первое что сразу хотят - чтобына ТСД "можно было посмотреть и исправить если не туда кнюпнул/жмакнул"... и всё.. понеслось.. "ругаюсь" тут с заказчиками постоянно. Не иду на такое...
|
|||
31
1Сергей
10.12.21
✎
14:16
|
"...бабка пошептала..."
|
|||
32
Kigo_Kigo
10.12.21
✎
15:17
|
(30) У меня мастера смены 1/3 работают, по этому есть незавершенка, которую потом доделывают и вносят в БД, потом еще должен обработать диспетчер, в 01.00 запускается обработчик, который перепроводит день и закрывает его, если конечно по контролю проходит, если нет, то мне и диспетчерам на "стол" причину, в 90% диспетчера сами исправляют косяки и старший дисп закрывает день/период, открыть он его не может, только я и через служебку
|
|||
33
Kigo_Kigo
10.12.21
✎
15:20
|
(32) 1/2 (день 12 часов) 2 дня отдыхают, каждый мастер отвечает только за заказ наряд, по этому другой мастер его доделать не может, только тот на кого выписан
|
|||
34
Kigo_Kigo
10.12.21
✎
15:21
|
+ (33)это исправление к этому = не 1/3, а 1/2
|
|||
35
GrayS19
10.12.21
✎
17:01
|
когда то увидел код для удаления строк по условию:
Для инд = -Док.КоличествоСтрок()1 по -1 Цикл Док.ПолучитьСтрокуПоНомеру(-инд); Если Условие = 1 Тогда Док.УдалитьСтроку(); КонецЕсли; КонецЦикла; обычно им пользуюсь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |