|
Чертовщина при проведении документа | ☑ | ||
---|---|---|---|---|
0
trim89
29.01.16
✎
10:20
|
Доброго времени суток!
Пользуюсь КА 2.0.3.67. Программно создаю документ "Поступление товаров услуг", после его создания делаю "Перемещение товаров" на основании поступления. Дата перемещение + 3 сек от даты поступления. При проведении перемещения выдается ошибка, что превышен остатков товаров организации, при этом все движения поступления корректны. Фишка в том, что если вручную изменить дату перемещения в большую сторону, то документ проведётся, если в меньшую, то нет, также если сначала распровести документ, а потом провести, не меняя даты, то тоже проводится. Почему может так делаться? |
|||
1
Лефмихалыч
29.01.16
✎
10:22
|
(0) перемещение проводится моментом времени до поступления. Почему так - смотри отладчиком - у тебя в коде где-то костыли и несерьезно
|
|||
2
vde69
29.01.16
✎
10:23
|
по тому, что контроль остатков сделан до записи движений по регистрам, а надо после...
|
|||
3
vde69
29.01.16
✎
10:23
|
то есть движения самого документа не правильно учитываются
|
|||
4
trim89
29.01.16
✎
10:25
|
(1) Нет. Поступление уже проведено. Даже транзакции разные.
|
|||
5
trim89
29.01.16
✎
10:26
|
(3) А почему при распроведении/проведени они вдруг стали правильно учитываться?
|
|||
6
Serg_1960
29.01.16
✎
10:29
|
См. (1) - "у тебя в коде где-то костыли и несерьезно"
(офф) Как правильно перевести на русский язык фразу автора "выдается ошибка, что превышен остатков товаров"? :) |
|||
7
Metman
29.01.16
✎
10:30
|
База по сети? Разное время на компах.
|
|||
8
vde69
29.01.16
✎
10:30
|
(5)
01 остаток 5 02 продали 3, остаток 2 препроводим более поздним числом 01 остаток 5 02 остаток 2 (старые движения еще не удалили) 03 пытаемся продать 3, одной не хватает... |
|||
9
trim89
29.01.16
✎
10:31
|
(6) Нет костылей в коде, во всяком случае не в складском учете точно =) Практически типовая
|
|||
10
trim89
29.01.16
✎
10:31
|
(7) Локальная
|
|||
11
Metman
29.01.16
✎
10:32
|
Пытать базу отладчиком пробовал?
|
|||
12
ibreiter
29.01.16
✎
10:33
|
Если поступление создать не программно, и потом на основании создать перемещение, что получится?
Пусть также через 3 секунды |
|||
13
Metman
29.01.16
✎
10:33
|
Отладчик как цыганка. Все знает, все видит.
|
|||
14
trim89
29.01.16
✎
10:34
|
(11) Не осилил. Там километровые запросы + временные таблицы, которые хер пойми откуда. Проще вообще проверку отрубить.
|
|||
15
Масянька
29.01.16
✎
10:35
|
(10) Насчет времени док-ов - уверен на 100%?
При проведение - выведи сообщалку и глянь. |
|||
16
trim89
29.01.16
✎
10:35
|
(13) Все норм
|
|||
17
trim89
29.01.16
✎
10:36
|
(12) Все норм
|
|||
18
trim89
29.01.16
✎
10:36
|
(15) Все норм
|
|||
19
Metman
29.01.16
✎
10:36
|
(18) чудес не бывает
|
|||
20
trim89
29.01.16
✎
10:37
|
(8) Навряд ли проблема в этом, так как проводилась бы нормально пока движений нет. Или при изменении времени в меньшую сторону проводилось бы тоже норм.
|
|||
21
Масянька
29.01.16
✎
10:37
|
(18) И как 3 секунды вычисляешь о назначаешь док-ту?
|
|||
22
Serg_1960
29.01.16
✎
10:37
|
Не исключаю, что при интерактивном перепроведении документа, конфигурация "корректирует" исходные данные, заполняя их значениями "по умолчанию".
|
|||
23
vde69
29.01.16
✎
10:39
|
(20) поставь в процедуре проведения первым оператором очистку всех движений с записью в базу
|
|||
24
trim89
29.01.16
✎
10:39
|
(21) ручками =) интерактивное занесение работает
|
|||
25
trim89
29.01.16
✎
10:40
|
Может быть, посмотрю что на форме делает
|
|||
26
trim89
29.01.16
✎
10:40
|
(23) Да если нет еще движений, что мне очищать?
|
|||
27
Масянька
29.01.16
✎
10:41
|
(24) Ручки, да еще, и интерактивно, по-разному работают.
|
|||
28
hhhh
29.01.16
✎
10:42
|
(20) если меняешь в меньшую сторону, то раньше поступления получается, не должно проводиться.
|
|||
29
trim89
29.01.16
✎
10:42
|
(22) Ничего такого не делает
|
|||
30
Serg_1960
29.01.16
✎
10:42
|
А текст ошибки автор озвучит? Ошибка или ошибки? По всем позициям документа или только по некоторым?
А озвучить картинку с детальным отчетом [отрицательных] остатков этих двух документов слабо? |
|||
31
vde69
29.01.16
✎
10:43
|
просто сделай так:
Процедура ОбработкаПроведения(Отказ, РежимПроведения) ПолныеПрава.УдалитьДвиженияРегистратора(Ссылка, Отказ); |
|||
32
trim89
29.01.16
✎
10:43
|
(28) На 1 сек, получается меньше чем было, но больше поступления
|
|||
33
trim89
29.01.16
✎
10:44
|
(30) Перемещение превышает остаток товара организации Торговый дом "Комплексный" на складе Транзит под ремонты для менеджера Федоров Борис Михайлович
|
|||
34
trim89
29.01.16
✎
10:44
|
(30) По всем позициям
|
|||
35
trim89
29.01.16
✎
10:45
|
(30) Скрин делать не буду, лень. Поверь на слово, это тестовая база. Поступление, потом сразу перемещение. В отчетах все видно, остатки есть.
|
|||
36
trim89
29.01.16
✎
10:46
|
(31) Данной процедуры нет
|
|||
37
hhhh
29.01.16
✎
10:47
|
(33) оперативное проведение? Тогда оно само даты ставит. На ваши даты плюет.
|
|||
38
Масянька
29.01.16
✎
10:47
|
(33) А для другого менеджера есть?
|
|||
39
trim89
29.01.16
✎
10:48
|
Ну и что? в любом случае сначала проводится поступление одной транзакцией, потом перемещение следующей транзакцией.
|
|||
40
hhhh
29.01.16
✎
10:48
|
(36) ну так добавьте ее.
|
|||
41
trim89
29.01.16
✎
10:49
|
(38) Нет, тестовая база, информация скудная, заводить под другим долго. Да и так все должно работать
|
|||
42
hhhh
29.01.16
✎
10:50
|
(41) не должно это работать. В том виде, в котором ты описал - это задница.
|
|||
43
vde69
29.01.16
✎
10:52
|
(36)
Процедура УдалитьДвиженияРегистратора(ДокументСсылка, Отказ, СписокРегистровДляОчисткиДвижений = Неопределено) Экспорт ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); Для Каждого Движение ИЗ ДокументОбъект.Движения Цикл Если (не СписокРегистровДляОчисткиДвижений = Неопределено) И (СписокРегистровДляОчисткиДвижений.Найти(ТипЗнч(Движение)) = неопределено) Тогда Продолжить; КонецЕсли; Движение.Прочитать(); Если Движение.Количество() > 0 Тогда ПозицияТочки = Найти(Строка(Движение), "."); ТипРегистра = Лев(Строка(Движение), ПозицияТочки - 13); ИмяРегистра = СокрП(Сред(Строка(Движение), ПозицияТочки + 1)); ЕСли ТипРегистра = "РегистрНакопления" Тогда МетаданныеНабора = Метаданные.РегистрыНакопления[ИмяРегистра]; Набор = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрБухгалтерии" Тогда МетаданныеНабора = Метаданные.РегистрыБухгалтерии[ИмяРегистра]; Набор = РегистрыБухгалтерии[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрСведений" Тогда МетаданныеНабора = Метаданные.РегистрыСведений[ИмяРегистра]; Набор = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); ИначеЕсли ТипРегистра = "РегистрРасчета" Тогда МетаданныеНабора = Метаданные.РегистрыРасчета[ИмяРегистра]; Набор = РегистрыРасчета[ИмяРегистра].СоздатьНаборЗаписей(); КонецЕсли; Набор.Отбор.Регистратор.Установить(ДокументСсылка.Ссылка); Попытка Набор.Записать(); Исключение Отказ = Истина; ВызватьИсключение "Операция не выполнена"; КонецПопытки; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
44
trim89
29.01.16
✎
10:52
|
(42) Почему?
|
|||
45
trim89
29.01.16
✎
10:52
|
(43) Я уже скопировал с рабочей базы =) сейчас тестить буду
|
|||
46
Serg_1960
29.01.16
✎
10:53
|
Автор, ты - партизан? Честно признайся, я пытать - не буду.
(0) "...после его создания делаю "Перемещение товаров" на основании поступления" - кратко алгоритм или я ухожу. Если опять "не буду, лень" - код, которым проводишь документ. (37) Если и плюет, то не на дату, а только на время. (42) Я бы сказал короче. Всего два слова - "автор - задница" :) |
|||
47
trim89
29.01.16
✎
10:54
|
(43) Не работает
|
|||
48
trim89
29.01.16
✎
10:56
|
(46) Алгоритм тут не нужен, на мой взгляд - ничего интересного. Коль уж просят то конечно дам.
|
|||
49
trim89
29.01.16
✎
10:56
|
Для каждого стр из НовДер.Строки цикл
Если ТекСкладОтг<>стр.СкладПоступления или ТекСкладПол<>стр.Склад тогда ТекСкладОтг = стр.СкладПоступления; ТекСкладПол = стр.Склад; Если докП<>Неопределено тогда докП.Дата = докП.ДокументОснование.Дата + 3; докП.УстановитьНовыйНомер(); попытка докП.Записать(РежимЗаписиДокумента.Проведение); Исключение докП.Записать(РежимЗаписиДокумента.Запись); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки()); КонецПопытки; КонецЕсли; докП = Документы.ПеремещениеТоваров.СоздатьДокумент(); докП.Заполнить(стр.ДокПоступления); докП.Товары.Очистить(); докП.СкладОтправитель = стр.СкладПоступления; докП.СкладПолучатель = стр.Склад; докП.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПеремещениеТоваров; КонецЕсли; //Теперь нужно заполнить строку. Будем заполнять по поступлению, номер строки известен нов = докП.Товары.Добавить(); стрП = стр.ДокПоступления.Товары.Получить(стр.номерСтрокиП - 1); ЗаполнитьЗначенияСвойств(нов,стрП); нов.Кодстроки = 0; КонецЦикла; |
|||
50
hhhh
29.01.16
✎
10:59
|
(49) ну вот же задница
докП.Заполнить(стр.ДокПоступления); ты берешь дату Перемещения = дате поступления. |
|||
51
Serg_1960
29.01.16
✎
11:00
|
Вот ведь какой упёртый автор попался - не колется. Скажи спасибо пятнице :)
PS: Мать/перемать, разреши отрицательные остатки, проведи ты наконец-то своей программой этот чёртов документ и дай нам полюбоваться отчетом движения товаров. |
|||
52
trim89
29.01.16
✎
11:01
|
(50) Нет, перед записью меняется дата на нужную.
|
|||
53
trim89
29.01.16
✎
11:02
|
(51) Чуток попозже, у меня идея возникла =) Если не срастется, то все сделаю
|
|||
54
Serg_1960
29.01.16
✎
11:07
|
(52) Хех. Что это за "порнография" в "Если докП<>Неопределено тогда"-"КонецЕсли"? Ты меняешь дату не в том документе, как ты нам тут рассказывал.
И вот ещё, рекомендую :) Документ.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); |
|||
55
trim89
29.01.16
✎
11:10
|
(54) Хех. Что это за "порнография"
вполне обоснованная той задачей, которая нужна (54) Ты меняешь дату не в том документе, как ты нам тут рассказывал. В том |
|||
56
vde69
29.01.16
✎
11:11
|
зачем ты в разных итерациях создание и запись поместил?
как минимум это чревато, что последняя строка не запишется... по этому у тебя после цикла должно еще идти изменение даты и повторная запись, скорее всего именно после цикла ты и забыл прибавить 3 сек я понимаю ты хочешь собирать по складам, но если у тебя склады идут не по порядку??? правильно делать по другому.... |
|||
57
trim89
29.01.16
✎
11:12
|
(51) А вот тут здравое замечание. Реально отрицательный остаток появился. Каким то макаром серия не прописывается в аналитику учета партий. Буду копать. спасибо!
|
|||
58
trim89
29.01.16
✎
11:13
|
(56) Кусок с последним складом я сюда не вставил, промазал когда выделял =) Склады сортирую сначала
|
|||
59
Serg_1960
29.01.16
✎
11:20
|
(56) Насколько я понял алгоритм, автор попытался реализовать "сводный" документ перемещения по складу.
В цикле обходит документы поступления, сортированные по складам; если новый склад - предыдущий документ перемещения закрыть и провести, открыть новый; если склад тот-же - добавить позиции из поступления. |
|||
60
trim89
29.01.16
✎
11:26
|
(59) В целом, да
|
|||
61
trim89
29.01.16
✎
11:28
|
(59) Все решилось. Нужно было указать еще Статус серии для склада отправителя и склада получателя. В поступлении не было, они и не заполнялись.
|
|||
62
trim89
29.01.16
✎
11:28
|
Всем спасибо =)
|
|||
63
hhhh
29.01.16
✎
11:29
|
в общем, мы тут таких красивых гипотез навыдвигали, а оказвывается автор тупо не указал серию в документе.
|
|||
64
trim89
29.01.16
✎
11:32
|
(63) Да я сам в шоке =) Сам напридумывал гипотез не менее прекрасных =) и не серию указал, а статус серии. Наследие богомерзкого ут 11, с которым никогда не работал.
|
|||
65
Serg_1960
29.01.16
✎
12:21
|
"Истина - где-то рядом" - я был близок к истине в (22) :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |