|
Не могу разобраться с механизмом ввода на основании | ☑ | ||
---|---|---|---|---|
0
Irena100
15.01.16
✎
21:59
|
Всем привет!
Создаю документ на основании, в котором есть поле, связанное с документом Партия - Партия.Цена (это ссылка на реквизит документа Партия - Цена). Когда создаю документ на основании в первый раз - все суммы подхватываютя из документа Партия. Когда меняю в партии эту цену и перепровожу программно, так: Док = СсылкаНаПартию.ПолучитьОбъект; Док.Цена = 10; Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный); То при повторном создании документа на основании цена не меняется, не обновляется на 10!!! Когда захожу в документ Партия и меняю цену, проводу вручную - нажимаю кнопку, то при создании документа на основании - Все ОК! Цена меняется, ПОЧЕМУ? Т.е. есть ли различие в 8.3 программно ли мы проводим документ или интерактивно(нажатием кнопки)? Почему документ записан, проведен, стоит правильная цена - 10(как в примере), а у документа в связанном поле(Партия.Цена) - другое значение - предыдущее? |
|||
1
Irena100
15.01.16
✎
22:05
|
Мучаюсь пол-дня, подскажите, люди добрые!
Программно текст этого поля не поменяешь, поле связано с реквизитом документа Партия. |
|||
2
Irena100
15.01.16
✎
22:07
|
Когда проводишь документ программно, то сообщения "Изменено:" справа экрана не появляется, может дело в этом? Что-то где-то не прописывается? Может на клиент не попадает новое значение!?
|
|||
3
PR третий
15.01.16
✎
22:10
|
Читал читал, читал читал...
Так короче и не понял нихрена. Ну его нахрен. Тем более фотки нет. |
|||
4
Irena100
15.01.16
✎
22:18
|
Поясню короче...
Есть поле ТЧ документа - Цена, значение которого - документ Партия.Цена. В документе цена - 10, он проведен программно, а в этом поле - допустим 5 (другая цифра), почему? Когда нажимаю провести на форме документа Партия, то в документе правильная цена - 10. |
|||
5
Cyberhawk
15.01.16
✎
22:54
|
При интерактивном проведении (из формы) сначала отрабатывает код модуля формы, а затем уже код модуля объекта и подписок.
При программном проведении отрабатывает только код модуля объекта и подписок, так что причина тому, что что-то не дозаполняется, в том, что это предусмотрено только в модуле формы. |
|||
6
Irena100
16.01.16
✎
12:29
|
Я закоментировала ВСЕ, что было в модуле формы, проверила, когда проводишь нажатием кнопки "Провести", все ОК. Т.е. даже при пустом коде модуля формы.
|
|||
7
kotletka
16.01.16
✎
12:31
|
Отладчиком могёшь?
|
|||
8
MishaD
16.01.16
✎
12:31
|
а в той ли форме заккоментировала ?
|
|||
9
Irena100
16.01.16
✎
13:12
|
Когда в первый раз создаешь документ на основании, то все ОК!
Когда второй, третий, то : Документ Партия проведен, реквизит цена в нем - 10. А в этом документе на основании в поле цена стоит - 5. Хотя это поле цена напрямую связано с реквизитом документа Партия, который равен - 10. Т.е. как-то 1с 8.3. помнит предыдущий документ, созданный на основании...!? Или на клиенте не обновляет данные по документу Партия при программном проведении. |
|||
10
Irena100
16.01.16
✎
13:18
|
Потом захожу в документ Партия(документ проведен, цена внем 10), нажимаю кнопку провети, все Ок, цена в документе на основаниии меняется на 10.
|
|||
11
GROOVY
16.01.16
✎
13:23
|
Что написано в обработчике события ОбработкаЗаполнения?
|
|||
12
Irena100
16.01.16
✎
13:24
|
Мне кажется, что дело в повторном вводе на основании. Как-то данные первого введенного на основании документа сохраняюся и обновляются только те, которые прописаны в обработке заполнения, а другие не обновляются.
|
|||
13
Irena100
16.01.16
✎
13:25
|
Я здесь ничего не меняла - 1с 8.3.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения); Если ДанныеЗаполнения <> Неопределено И ТипДанныхЗаполнения <> Тип("Структура") И Метаданные().ВводитсяНаОсновании.Содержит(ДанныеЗаполнения.Метаданные()) Тогда ЗаполнитьПоДокументуОснованию(ДанныеЗаполнения); Иначе СуммаВключаетНДС = Ложь; //1С-Минск КонецЕсли; ЗаполнениеДокументов.Заполнить(ЭтотОбъект, ДанныеЗаполнения); // Заполнение реквизитов, специфичных для документа: Если ЗначениеЗаполнено(Организация) И ЗначениеЗаполнено(Контрагент) И ЗначениеЗаполнено(ДоговорКонтрагента) Тогда Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаРасчетов(ЭтотОбъект); КонецЕсли; КонецПроцедуры |
|||
14
Irena100
16.01.16
✎
13:26
|
А вот мой код...
//{{__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ОтчетПроизводстваЗаСмену") Тогда // Заполнение шапки Комментарий = Основание.Комментарий; Организация = Основание.Организация; Ответственный = Основание.Ответственный; ПодразделениеОрганизации = Основание.ПодразделениеОрганизации; РучнаяКорректировка = Основание.РучнаяКорректировка; Склад = Основание.Склад; Для Каждого ТекСтрокаТовары Из Товары Цикл // Если Элемент.Цена=0 Тогда Товары.Удалить(ТекСтрокаТовары); // КонецЕсли; КонецЦикла; Для Каждого ТекСтрокаПродукция Из Основание.Продукция Цикл НоваяСтрока = Товары.Добавить(); ИзменитьЦену(ТекСтрокаПродукция.ДокументОприходования, ТекСтрокаПродукция.ЦенаИзготовителя); НоваяСтрока.ЕдиницаИзмерения = ТекСтрокаПродукция.ЕдиницаИзмерения; НоваяСтрока.КоличествоМест = ТекСтрокаПродукция.КоличествоМест; НоваяСтрока.Коэффициент = ТекСтрокаПродукция.Коэффициент; НоваяСтрока.Количество = ТекСтрокаПродукция.Количество; НоваяСтрока.Номенклатура = ТекСтрокаПродукция.Номенклатура; НоваяСтрока.Цена = ТекСтрокаПродукция.ПлановаяСтоимость; НоваяСтрока.Сумма = ТекСтрокаПродукция.СуммаПлановая; НоваяСтрока.СчетУчета = ТекСтрокаПродукция.Счет; НоваяСтрока.ДокументОприходования = ТекСтрокаПродукция.ДокументОприходования; // НоваяСтрока.ДокументОприходования.ПолучитьОбъект().Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный); // Сообщить(НоваяСтрока.ДокументОприходования.Цена); НоваяСтрока.СтавкаНДС = ТекСтрокаПродукция.Номенклатура.СтавкаНДС; НоваяСтрока.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Производсто и оптовая торговля",1,,); НоваяСтрока.ЦенаИзготовителя = ТекСтрокаПродукция.ЦенаИзготовителя; ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуНДСТабЧасти(НоваяСтрока, ЭтотОбъект.СуммаВключаетНДС, ЭтотОбъект.ПорядокОкругленияДЧВ); //1С-Минск ДанныеОбъекта = Новый Структура( "Дата, ВидОперации, Организация, ДеятельностьНаПатенте, |Склад, ТипЦен, ВалютаДокумента, КурсВзаиморасчетов, КратностьВзаиморасчетов, |СуммаВключаетНДС, ДоговорКонтрагента, |ЭтоКомиссия, Реализация, ПорядокОкругленияДЧВ"); //1С-Минск ЗаполнитьЗначенияСвойств(ДанныеОбъекта, ЭтотОбъект); ДанныеОбъекта.ЭтоКомиссия = ЛОЖЬ; ДанныеОбъекта.Реализация = Истина; СведенияОНоменклатуре = БухгалтерскийУчетПереопределяемый.ПолучитьСведенияОНоменклатуре( НоваяСтрока.Номенклатура, ДанныеОбъекта); Если СведенияОНоменклатуре = Неопределено Тогда Возврат; КонецЕсли; Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаВСтрокеТабличнойЧасти( ДанныеОбъекта, НоваяСтрока, "Товары", СведенияОНоменклатуре); КонецЦикла; Для Каждого ТекСтрокаУслуги Из Основание.Услуги Цикл НоваяСтрока = Услуги.Добавить(); НоваяСтрока.Количество = ТекСтрокаУслуги.Количество; НоваяСтрока.Номенклатура = ТекСтрокаУслуги.Номенклатура; КонецЦикла; //}}__КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ //)рэ Ирина 14.01.2016 КонецЕсли; |
|||
15
Irena100
16.01.16
✎
13:28
|
НоваяСтрока.ДокументОприходования - это документ Партия.
А его реквизит - Цена в документе на основании - Объект.ДокументОприходования.Цена. |
|||
16
GROOVY
16.01.16
✎
13:32
|
(12) Это бред.
Наверно соглашусь с коллегой из (3). Удачи. |
|||
17
Irena100
16.01.16
✎
13:33
|
Второй код вызывается в процедуре ЗаполнитьПоДокументуОснованию(ДанныеЗаполнения);
|
|||
18
Soul771
16.01.16
✎
23:53
|
Поставьте точку останова на первой строке вашего кода из (0), вот этого:
Док = СсылкаНаПартию.ПолучитьОбъект; Док.Цена = 10; Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный); посмотрите, заходит ли вообще в эти строки? чему равна цена до захода в этот кусок кода, чему после... |
|||
19
hhhh
16.01.16
✎
23:57
|
вот это вообще бред, кто же так пишет
Для Каждого ТекСтрокаТовары Из Товары Цикл // Если Элемент.Цена=0 Тогда Товары.Удалить(ТекСтрокаТовары); // КонецЕсли; КонецЦикла; напишите Товары.Очистить(); |
|||
20
Irena100
17.01.16
✎
19:11
|
(19) Я это вообще удалила... Ненужный кусок кода...
(18) Документ Партия записан, проведен - это точно!!! Вывожу сообщение цены - цена в нем 10! Это точно!!! Причет если создать документ на основании в первый раз - все работает и этот код правильный! Когда меняю цену в партии программным проведением, то при создании документа на основании во второй раз, третий - в партии цена - 10, а в этом поле, на прямую связанном с реквизитом цена Партии - 5. |
|||
21
Irena100
17.01.16
✎
19:14
|
Не разобралась... Заменила связанное поле Объект.ДокументОприходования.Цена на обычное: Объект.Цена.
Заполняю Объект.Цена программно: Объект.Цена = Объект.ДокументОприходования.Цена. Все работает. Может недоработка платформы? |
|||
22
Irena100
17.01.16
✎
19:17
|
У меня в коде это выглядит так:
НоваяСтрока.ДокументОприходования = ТекСтрокаПродукция.ДокументОприходования; НоваяСтрока.ЦенаПост = НоваяСтрока.ДокументОприходования.Цена; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |