|   |   | 
| 
 | 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 | 
        вот веть пиляха муха     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |