|   |   | 
| 
 | Не могу разобраться с механизмом ввода на основании | ☑ | ||
|---|---|---|---|---|
| 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 | 
        У меня в коде это выглядит так:
 НоваяСтрока.ДокументОприходования = ТекСтрокаПродукция.ДокументОприходования; НоваяСтрока.ЦенаПост = НоваяСтрока.ДокументОприходования.Цена; | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |