|
v7: Изменение ТЧ документа. Не меняет | ☑ | ||
---|---|---|---|---|
0
AntiBuh
23.03.12
✎
08:09
|
Программно меняю реквизиты ТЧ части документа
ДВижения формируются по новым реквизитам При открытии формы документа - всё старое в чем может быть проблема? |
|||
56
alxxsssar
23.03.12
✎
10:21
|
(55) была бы она у меня... ветка то не моя)))
|
|||
57
Tymoha
23.03.12
✎
10:25
|
(56) а ну да ... пардоньте ))) хотя .... судя по имени ТС - точно бухи прячуть, а потом достают из засады ... вот ))))
|
|||
58
AntiBuh
23.03.12
✎
10:31
|
выборка движений регистра по данному документу может повлиять?
|
|||
59
Ёпрст
23.03.12
✎
10:34
|
(58) если смотреть сверху - то сбоку кажется, что снизу ничего не видно ©...
|
|||
60
alxxsssar
23.03.12
✎
10:37
|
да вряд ли, документ то сам не трогается
|
|||
61
Irbis
23.03.12
✎
10:42
|
(58) Могут, если после удара бейсбольной битой по голове у тебя шнурки развязываются.
|
|||
62
Tymoha
23.03.12
✎
10:42
|
(58) поскольку речь идет о ценах ... смею предположить, что речь будет идти или о периодике или об отдельном справочнике с ценами ... но это чистый дедуктивный метод ... )))
|
|||
63
AntiBuh
23.03.12
✎
10:49
|
вот и я думаю что не причем
но ощущение что реквизиты дока блокируются от изменения причем все |
|||
64
alxxsssar
23.03.12
✎
10:50
|
(62) я выше писал что возможно есть типы цен, а это как раз и предполагает отдельный или справочник или регистр
|
|||
65
Ёпрст
23.03.12
✎
10:50
|
(63) код покажешь али так и будешь ломаться как ц..а ?
|
|||
66
AntiBuh
23.03.12
✎
11:11
|
вот так:
|
|||
67
AntiBuh
23.03.12
✎
11:12
|
КонецЦикла
|
|||
68
Ёпрст
23.03.12
✎
11:12
|
(66) покажи весь код
|
|||
69
zak555
23.03.12
✎
11:12
|
(66) сначала умножаем, потом делим
|
|||
70
Ёпрст
23.03.12
✎
11:13
|
хотя не надо .. и так виден бред сразу
|
|||
71
AntiBuh
23.03.12
✎
11:14
|
(70) ткни носом
|
|||
72
Ёпрст
23.03.12
✎
11:15
|
(71) ну для начала вот это :
стр = рег.НомерСтроки(); Док.ПолучитьСтрокуПоНомеру(стр); |
|||
73
Ёпрст
23.03.12
✎
11:16
|
Уверен, что есть привязка строки в регистре ?
|
|||
74
Ёпрст
23.03.12
✎
11:17
|
//Рег.ВыбратьДвиженияДокумента(Док);
Рег.ВыбратьДвиженияДокумента(Док.ТекущийДокумент()); |
|||
75
Ёпрст
23.03.12
✎
11:17
|
Нахрена там ТЗ уперлаь для этого кода ?!
|
|||
76
Tymoha
23.03.12
✎
11:18
|
(73) ну ведь было же заявлено что отладчик после записи показывает нужный вариант )))
|
|||
77
AntiBuh
23.03.12
✎
11:18
|
(72) а как надо?
|
|||
78
Ёпрст
23.03.12
✎
11:19
|
потом, нужно делать так:
Док.Сумма = Рег.СуммаРуб; глПересчетТабЧасти(Док,"Сумма").. |
|||
79
Ёпрст
23.03.12
✎
11:19
|
И.. больше кода - т.е весь целиком
|
|||
80
AntiBuh
23.03.12
✎
11:19
|
(73) уверен
(74) пробовал, всё так же (75) тз используется еще в другом месте |
|||
81
Ёпрст
23.03.12
✎
11:19
|
Нам отсюда не видно твоей незавершенной транзакции
|
|||
82
Ёпрст
23.03.12
✎
11:22
|
И СуммаРуб - это ресурс ПартииНаличие, там номер строки не привязывается + если автоподбор партий - то может быть несколько строк с одной номенклатурой и разными партиями, т.е весь код в (66) в топку.
|
|||
83
Ёпрст
23.03.12
✎
11:23
|
че пытался делать автор и так понятно - продать товар по себестоимости, которая на тот момент есть в регистре, токма сделал всё это через ж..у , еще и код не хочет показывать
|
|||
84
Ёпрст
23.03.12
✎
11:24
|
даже, если строки и привязываются - еще хуже при данном коде
|
|||
85
AntiBuh
23.03.12
✎
11:24
|
(78) Док.Сумма может не соответствовать Рег.СуммаРуб
этот регистр останется без изменений, содержимое ТЧ влияет на другой (79) да нет больше ничего |
|||
86
AntiBuh
23.03.12
✎
11:28
|
(82) да может быть несколько, но выбирается одна
|
|||
87
AntiBuh
23.03.12
✎
11:29
|
в данном случае партия одна
|
|||
88
Ёпрст
23.03.12
✎
11:30
|
(85) :)
ты не поверишь - и на этот тоже - изменятся реквизиты регистра. А код не весь, не ври Хотя пофик - он и так идеологически не верный. Нужно сворачивать движуху регистра по номенклатуре сперва - потом уже изменять СУММУ (а не цену документа) И у тебя один фиг - незавершенная транзакция в коде. которую ты до сих пор не показал. |
|||
89
zak555
23.03.12
✎
11:30
|
(80) > (73) уверен
в курсе, что одна стока может породить несколько движений ?! |
|||
90
AntiBuh
23.03.12
✎
11:31
|
(83) да, смысл примерно такой
для расчета цены берется последняя партия по конкретной номенклатуре |
|||
91
AntiBuh
23.03.12
✎
11:32
|
нет транзакции
|
|||
92
Ёпрст
23.03.12
✎
11:34
|
(90) это не верно, нет понятия цены - всегда нужно опперировать понятием сумма
(91) есть, покажи весь код целиком |
|||
93
Ёпрст
23.03.12
✎
11:36
|
+ если это типовой Тис, то как минимум, ты не установил новую СуммВзаиморасчетов - тоже болт в регистрах
|
|||
94
Ёпрст
23.03.12
✎
11:37
|
в общем, один сплошной косяк.
ЗЫ: покажи весь код целиком |
|||
95
AntiBuh
23.03.12
✎
12:06
|
(93) док не реализация, а переделка Перемещения
|
|||
96
AntiBuh
23.03.12
✎
12:07
|
Регистр ПартииНаличие не изменяется
|
|||
97
Ёпрст
23.03.12
✎
12:09
|
(96) че правда ?!
И давно это у нас в перемещении появилась сумма ? Али это перемещение в розницу ? |
|||
98
Ёпрст
23.03.12
✎
12:12
|
и если что ПродСтоимость меняется в регистре при перемещении в розницу
|
|||
99
AntiBuh
23.03.12
✎
12:12
|
(97) да в розницу
|
|||
100
Ёпрст
23.03.12
✎
12:12
|
Сотка
и .. весь код показывай.. :) |
|||
101
AntiBuh
23.03.12
✎
12:15
|
да нечего больше показывать
там несколько условий на выборку и всё транзакций нет, если только они из каментов конечно как-нибудь вылазят |
|||
102
zak555
23.03.12
✎
12:21
|
секретный код
|
|||
103
AntiBuh
23.03.12
✎
12:23
|
да ничего секретного
все выдал как есть убрал пару условий и срач коментариев |
|||
104
Ёпрст
23.03.12
✎
12:27
|
Как проверяешь
1. что движения в регистре привязаны и привязка соответствует тому, что в табличной части дока ? 2. как проверяешь, что документ не записался ? |
|||
105
AntiBuh
23.03.12
✎
12:36
|
(104) не совсем понял вопрос
|
|||
106
AntiBuh
23.03.12
✎
12:38
|
Движения ПартииНиличие привязываются к строкам, это при проведении задано
а проверка записи документа Попытка Док.Записать(); Исключение Сообщить("Ошибка записи"); Сообщить(ОписаниеОшибки()); КонецПопытки; Попытка Док.Провести(); Исключение Сообщить("Ошибка проведения"); Сообщить(ОписаниеОшибки()); КонецПопытки; |
|||
107
Ёпрст
23.03.12
✎
12:40
|
Процедура сформировать()
Док= создатьОбъект("Документ.ПеремещениеТМЦ"); Рег = СоздатьОбъект("Регистр.ПартииНаличие"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Номенклатура"); ТЗ.НоваяКолонка("Сумма"); Док.УстановитьФильтр(1,0); Док.ВыбратьДокументы(НачДата, КонДата); Пока Док.ПолучитьДокумент() = 1 Цикл Если Док.Склад.РозничныйСклад+Док.СкладПолучатель.РозничныйСклад = 0 Тогда Продолжить; КонецЕсли; Рег.ВыбратьДвиженияДокумента(Док.ТекущийДокмент); Пока Рег.ПолучитьДвижение() = 1 Цикл Если Рег.Приход = 1 Тогда Продолжить; КонецЕсли; ТЗ.НоваяСтрока(); ТЗ.Номенклатура = Рег.Номенклатура; ТЗ.Сумма = Рег.СуммаРуб; КонецЦикла; ТЗ.Свернуть("Номенклатура","Сумма"); Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку()=1 Цикл сч=""; Если ТЗ.НайтиЗначение(Док.Номенклатура,Сч,"Номенклатура")=1 Тогда Док.Сумма = ТЗ.ПолучитьтЗначение(сч,"Сумма"); глПересчетТаблЧасти(Док,"Сумма"); КонецЕсли; КонецЦикла; Док.Записать(); Док.ПАровести(); КонецЦикла; КонецПроцедуры наслаждайся док.Записать(); док.Провести(); |
|||
108
Ёпрст
23.03.12
✎
12:41
|
(106) это п..ц а не проверка..
:) |
|||
109
Ёпрст
23.03.12
✎
12:42
|
вот подправил..
Процедура сформировать() Док= создатьОбъект("Документ.ПеремещениеТМЦ"); Рег = СоздатьОбъект("Регистр.ПартииНаличие"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Номенклатура"); ТЗ.НоваяКолонка("Сумма"); Док.УстановитьФильтр(1,0); Док.ВыбратьДокументы(НачДата, КонДата); Пока Док.ПолучитьДокумент() = 1 Цикл Если Док.Склад.РозничныйСклад+Док.СкладПолучатель.РозничныйСклад = 0 Тогда Продолжить; КонецЕсли; ТЗ.УдалитьСтроки(); Рег.ВыбратьДвиженияДокумента(Док.ТекущийДокмент); Пока Рег.ПолучитьДвижение() = 1 Цикл Если Рег.Приход = 1 Тогда Продолжить; КонецЕсли; ТЗ.НоваяСтрока(); ТЗ.Номенклатура = Рег.Номенклатура; ТЗ.Сумма = Рег.СуммаРуб; КонецЦикла; ТЗ.Свернуть("Номенклатура","Сумма"); Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку()=1 Цикл сч=""; Если ТЗ.НайтиЗначение(Док.Номенклатура,Сч,"Номенклатура")=1 Тогда Док.Сумма = ТЗ.ПолучитьтЗначение(сч,"Сумма"); глПересчетТаблЧасти(Док,"Сумма"); КонецЕсли; КонецЦикла; Док.Записать(); Док.Провести(); КонецЦикла; КонецПроцедуры |
|||
110
Ёпрст
23.03.12
✎
12:43
|
ну и синтаксис там сам исправишь - мне лень.
|
|||
111
AntiBuh
23.03.12
✎
12:48
|
Спасибо
т.е. получается через ПолучитьСТрокуПоНомеру() не выйдет и нужен перебор ТЧ |
|||
112
Ёпрст
23.03.12
✎
12:49
|
(111) ты не догоняешь - в регистре может быть 20 строк с одинаковой номенклатурой и разных партий.
|
|||
113
AntiBuh
23.03.12
✎
12:51
|
(112) Понимаю, нужную строку я найду и выберу партию что мне нужна
|
|||
114
Ёпрст
23.03.12
✎
12:53
|
(113) ?
какая из 20-ти будет нужная ? |
|||
115
AntiBuh
23.03.12
✎
12:56
|
(114) та которую укажет бух
может приход в определенную дату, может с опреденным ВхНомером но скорее всего последняя из списываемых партий |
|||
116
Ёпрст
23.03.12
✎
12:58
|
(115) и как твоя поделка узнает об этом, когда ты в цикле перебираешь документы ?
|
|||
117
AntiBuh
23.03.12
✎
13:03
|
(116) типа из регистра нельзя получить инфу о документе прихода
Пока Рег.ПолучитьДвижение() = 1 Цикл Если Рег.Приход = 1 Тогда Продолжить; КонецЕсли; ТЗ.НоваяСтрока(); ПрихДокумент = Рег.Партия.ПриходныйДокумент; ТЗ.Номенклатура = Рег.Номенклатура; ТЗ.Сумма = Рег.СуммаРуб; КонецЦикла; |
|||
118
Ёпрст
23.03.12
✎
13:22
|
(117) чудак человек.
Как ты слова буха будешь превращать в действия ? будешь делать таблицу соответствия для каждой номенклатуры ? Для каждого документа ? |
|||
119
AntiBuh
23.03.12
✎
13:40
|
(118) скорее всего нужна будет последняя партия из набора партий
это третье дело |
|||
120
Ёпрст
23.03.12
✎
13:43
|
(119) что значит последня ?
|
|||
121
AntiBuh
23.03.12
✎
13:47
|
Последняя попавшая в документ по данной позиции номенклатуры
|
|||
122
AntiBuh
23.03.12
✎
13:50
|
короче проблему с незаписью реквизитов решил
как - говорить не буду - стыдно |
|||
123
Ёпрст
23.03.12
✎
13:51
|
(122) это, еще сыграем в угадайку на 100 постов ?
:) колись давай, нам всем за тебя стыдно |
|||
124
AntiBuh
23.03.12
✎
13:53
|
(123) :))))
|
|||
125
AntiBuh
23.03.12
✎
13:54
|
СделатьНеПроведенным() слегка не вовремя :)
|
|||
126
Ёпрст
23.03.12
✎
13:56
|
(125) ну ёпт, грили же тебе - больше кода
|
|||
127
AntiBuh
23.03.12
✎
14:01
|
зато пятница удалась
|
|||
128
Tymoha
23.03.12
✎
14:03
|
(125) хммм .... ну и как это коррелирует с заявлением "в отладчике при записи все гуд"???
|
|||
129
viktor_vv
23.03.12
✎
14:06
|
Ну наконец-то :). Правда я тоже не понял как СделатьНеПроведенным повлияло на незапись документа.
|
|||
130
AntiBuh
23.03.12
✎
14:09
|
(128)потому что "не вовремя"
попробуй такую последовательность заполняется реквизит, Распроводится, Записывается, Проводится |
|||
131
Ёпрст
23.03.12
✎
14:11
|
(129) при переборе движений в цикл не заходило, таб часть дока не менялась
|
|||
132
Tymoha
23.03.12
✎
14:13
|
(131) ТС утверждал, что в момент записи отладчик показывал результат, нужный ТС ... КАК????
|
|||
133
AntiBuh
23.03.12
✎
14:14
|
(132) и продолжаю утверждать, так и было
|
|||
134
Ёпрст
23.03.12
✎
14:22
|
(132) я хз, код то свой он так и не показал весь целиком
|
|||
135
viktor_vv
23.03.12
✎
14:22
|
(131) Теперь понятно. ТС'у надо разведчиком работать :).
|
|||
136
viktor_vv
23.03.12
✎
14:23
|
(135)+ или шпионом, смотря с какой стороны смотреть :).
|
|||
137
AntiBuh
23.03.12
✎
14:37
|
(136) я Наш :)
было примерно так Процедура сформировать() Док= создатьОбъект("Документ.ПеремещениеТМЦ"); Рег = СоздатьОбъект("Регистр.ПартииНаличие"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Номенклатура"); ТЗ.НоваяКолонка("Сумма"); Док.УстановитьФильтр(1,0); Док.ВыбратьДокументы(НачДата, КонДата); Пока Док.ПолучитьДокумент() = 1 Цикл Если Док.Склад.РозничныйСклад+Док.СкладПолучатель.РозничныйСклад = 0 Тогда Продолжить; КонецЕсли; ТЗ.УдалитьСтроки(); Рег.ВыбратьДвиженияДокумента(Док.ТекущийДокмент); Пока Рег.ПолучитьДвижение() = 1 Цикл Если Рег.Приход = 1 Тогда Продолжить; КонецЕсли; ТЗ.НоваяСтрока(); ТЗ.Номенклатура = Рег.Номенклатура; ТЗ.Сумма = Рег.СуммаРуб; КонецЦикла; ТЗ.Свернуть("Номенклатура","Сумма"); Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку()=1 Цикл сч=""; Если ТЗ.НайтиЗначение(Док.Номенклатура,Сч,"Номенклатура")=1 Тогда Док.Сумма = ТЗ.ПолучитьтЗначение(сч,"Сумма"); глПересчетТаблЧасти(Док,"Сумма"); КонецЕсли; КонецЦикла; //------ Док. СделатьНеПроведенным(); //------ Док.Записать(); Док.Провести(); КонецЦикла; КонецПроцедуры |
|||
138
alxxsssar
23.03.12
✎
14:38
|
не понимаю как СделатьНеПроведенным() повлияло на изменение суммы в ТЧ. Я тупой наверное
|
|||
139
Tymoha
23.03.12
✎
14:38
|
(133) да дело в том что наиболее вероятный вариант в (131) .. и он абсолютно противоречит варианту в (130) ... в общем, что-то тут не так )))). ну да ладно - проблема решилась и хорошо ... только вот реально: в след раз лучше сначала отладчиком проверяй, а не на 130 постов телепатические навыки ёпрста проверяй )))
|
|||
140
Tymoha
23.03.12
✎
14:40
|
(137) а приведи-ка, мил человек, код Обработки отмены проведения ....
|
|||
141
Ёпрст
23.03.12
✎
14:49
|
(137) забавно, отменяет ли СделатьНеПроведенным все изменения с переменной Док ?
лень проверять - никогда так не писал, хотя, всё может быть |
|||
142
AntiBuh
23.03.12
✎
14:50
|
(138)вот в том то и фокус
переставил перед Док.ВыбратьСтроки() и получилось щастье (140) а нет ее |
|||
143
Ёпрст
23.03.12
✎
14:50
|
(142) а зачем ты его распроводишь?
|
|||
144
AntiBuh
23.03.12
✎
14:52
|
(141) если и изменяет то весьма странно, после отмены проведения в самой переменной ничего не изменилось, точнее всё осталось измененным
и движения сформировались с измененными данными |
|||
145
viktor_vv
23.03.12
✎
14:53
|
(141) У меня тоже была первая мысль об этом.
|
|||
146
AntiBuh
23.03.12
✎
14:53
|
(143) это с первого варианта еще осталось
время документа изменял |
|||
147
Tymoha
23.03.12
✎
14:56
|
(142) ну так а как же отладчик при записи???
|
|||
148
Ёпрст
23.03.12
✎
14:57
|
(147) если предположение в (141) верно, то отладчик будет всё верно казать.. как и говорил автор
|
|||
149
Tymoha
23.03.12
✎
15:04
|
(148) с каких делов? ведь отмена проведения происходила после заполнения ТЧ, но перед записью ... соответственно - если отмена проведения сбрасывает все итерации с ТЧ, то как жеж отладчик будет правильно казать? ... ниче не понимаю ((((
|
|||
150
viktor_vv
23.03.12
✎
15:05
|
(148) Заинтриговали. Проверил. СделатьНеПроведенным не отменяет изменения.
Процедура Сформировать() ДокРН = СоздатьОбъект("Документ.РасходнаяНакладная") ; ДокРН.НайтиДокумент(фасРН); Сообщить(ДокРН.ВидРасхода); ДокРН.ВидРасхода = Перечисление.ВидыРасхода.Нал ; Сообщить(ДокРН.ВидРасхода); ДокРН.СделатьНеПроведенным() ; Сообщить(ДокРН.ВидРасхода); ДокРН.Записать(); Сообщить(ДокРН.ВидРасхода); КонецПроцедуры Результат. По счету Нал Нал Нал то есть СделатьНеПроведенным вызывает неявную запись объекта с изменениями. |
|||
151
viktor_vv
23.03.12
✎
15:11
|
А посыпаю голову. В базе все осталось по старому :).
|
|||
152
viktor_vv
23.03.12
✎
15:15
|
Вот так нагляднее будет.
//******************************************* Процедура Сформировать() ДокРН = СоздатьОбъект("Документ.РасходнаяНакладная") ; ДокРНПроверка = СоздатьОбъект("Документ.РасходнаяНакладная") ; ДокРНПроверкаЗапись = СоздатьОбъект("Документ.РасходнаяНакладная") ; ДокРН.НайтиДокумент(фасРН); Сообщить(ДокРН.ВидРасхода); ДокРН.ВидРасхода = Перечисление.ВидыРасхода.Нал ; Сообщить(ДокРН.ВидРасхода); ДокРН.СделатьНеПроведенным() ; ДокРНПроверка.НайтиДокумент(ДокРН.ТекущийДокумент()); Сообщить(ДокРНПроверка.ВидРасхода); ДокРН.Записать(); ДокРНПроверкаЗапись.НайтиДокумент(ДокРН.ТекущийДокумент()); Сообщить(ДокРНПроверкаЗапись.ВидРасхода); //Сообщить(ДокРН.ВидРасхода); КонецПроцедуры Результат. По счету Нал По счету По счету |
|||
153
Tymoha
23.03.12
✎
15:17
|
(151), (152) - офигеть ... ТС, приношу свои извинения за недоверчивость ))))
|
|||
154
AntiBuh
23.03.12
✎
15:21
|
секретная недокументированная фича 1С :)
|
|||
155
alxxsssar
23.03.12
✎
15:26
|
вот веть пиляха муха
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |