8.х Внесение изменений в документ

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем DikSer, 27 сен 2009.

  1. TopicStarter Overlay
    DikSer
    Offline

    DikSer Опытный в 1С

    Регистрация:
    27 сен 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Доброе время суток товарищи. Назрел такой вопрос...
    Есть два документа предположим Док1 и Док2
    Док2 создается на основе Док1 по нажатию кнопки которая имитирует действие "ВводНаОсновании".После изменения Док2 когда мы его сохраняем надо занести изменение в табличную часть Док1. Это как бы не проблема всё прямо работает как надо... НО.
    Соль вся в том что, я хочу сделать так чтобы я нажал кнопку открылась форма Док2 там данные из Док1, потом внес изменения в Док2 закрыл его и получи НЕ ЗАКРЫВАЯ Док1 нужный результат.
    Вот. Вроде бы понятно объяснил.=)
    Заранее спасибо за помощь.=)


    Товарищи может я не понятно выразился? Или это не реально совершить такую махинацию?
  2. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Проблема-то в чем?
    Код:
    Д = Документы.Док2.СоздатьДокумент();//Или найти нужный документ
    Д.ПолучитьФорму().ОткрытьМодально();//Откроется форма документа. Заполняем/меняем в ней данные
    //Дальше код выполняется только после закрытия формы
    Сообщить(Д.Номер);
    
    
  3. TopicStarter Overlay
    DikSer
    Offline

    DikSer Опытный в 1С

    Регистрация:
    27 сен 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Нет это у меня всё получается, я то хочу именно чтобы не закрывая формы. Видать это не реально?

    увидел кнопку Перечитать, теперь осталось сделать её программно, чтобы после того как отредил док2 форма сама обновилась.=)
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Какой результат вы хотите получить? Изменение Док1 в соотвествии с Док2? Передавайте в качестве параметра при открытии Док2 КОНТЕКСТ док1.....
  5. TopicStarter Overlay
    DikSer
    Offline

    DikSer Опытный в 1С

    Регистрация:
    27 сен 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Просто как результат я хочу добится того чтобы НЕ ЗАГРЫВАЯ Док1 внести в него изменения из Док2, Всё это я уже сделал, теперь хочу сделать чтобы после изменения Док2 данные занеслись и форма Док1 Обновилась и данные появились.Вот.

    Я как бы и как сделать это нашел, это выполняет кнопка "Перечитать", Теперь хочу сделать их автоматически.=)
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Передавай в док2 контекст док1 и рули им)))))))))
    Код:
    Функция ВзятьКонтекст(Конт)
    Возврат Конт;
    КонецФункции
    
    //............ 
    Парам=СоздатьОбъект("СписокЗначений");
    Парам.Добавить(ВзятьКонтекст(Контекст),"Контекст");
    ОткрытьФормуМодально(Док2,Парам,0); //открываем уже СУЖЕСТВУЮЩИЙ документ
    
    //если создаем новый - вот так:
    ОткрытьФормуМодально("Документ.МойДок2",Парам,Док1.ТекущийДокумент()); //при этом Док1 должен быть записан
    
    
    
  7. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Типа док1 открыт. Кто-то где-то меняет Док2 и в Док1 сразу изменения должны появиться чтоли?

    P.S. Бухгалтерский угодник - это по 8 тема, вроде :)
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Опсс... Не углядел. Сорри
  9. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Попробуйте метод Обновить
  10. TopicStarter Overlay
    DikSer
    Offline

    DikSer Опытный в 1С

    Регистрация:
    27 сен 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Да показалось что то что надо но почему то совсем оказалось не то...
    Во первых не могу при закрытии Док2 обновить Док1 чтобы отобразились, делаю всё локально на одной машине. Сам открыл Док1 сам на его основании сделал Док2 изменил Док2 закрыл его и по кнопке "Перечитать" обновив получил изменения не закрывая.
    А я хочу после закрытия Док2 сразу обновить Док1. Вот так.
  11. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Ну так если Вы открываете форму Док2 из Док1, открывайте ее модально. В этом случае выполнение кода из Док1 приостановится до закрытия формы Док2. А после закрытия тяните в Док1 нужные изменения из Док2. Или у Вас Док2 самостоятельно изменяет данные Док1? Тогда просто форму обновить нужно после закрытия Док2.

    Покажите уже свой код.
  12. TopicStarter Overlay
    DikSer
    Offline

    DikSer Опытный в 1С

    Регистрация:
    27 сен 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Да именно, Док 2 вносит автоматом при закртии изменения в Док1, и при закртии Док2 надо обновить форму Док1
    Код:
    Процедура ПриЗакрытии()
    .....
    Док = Дом.ПолучитьОбъект();	
    ТБ = Док.Квартиры;
    КГ = ТБ.Добавить();	
    КГ.Владелец = ОсновнойВладелец;
    КГ.Этаж = Этаж;
    КГ.Комнатность = Комнатность;
    КГ.НомерКвартиры = НомерКвартиры;
    ТМ = Док.ПолучитьФорму();
    ТМ.Обновить();
    Док.Записать();
    .....
    КонецПроцедуры
    
    Но почему то Обновить(); не работает-(
  13. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Код:
    ТМ = Док.ПолучитьФорму();
    ТМ.Обновить();
    Док.Записать();
    
    
    Вот это ненужно. Напишите каким образом в переменную "Дом" попадает ссылка на Док1.
  14. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Или можно использовать обработку оповещения. Описание в СП посмотри.
  15. TopicStarter Overlay
    DikSer
    Offline

    DikSer Опытный в 1С

    Регистрация:
    27 сен 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Ссылка в переменную Дом попадает по нажатию кнопки из Док1
    Док.Дом = ЭтотОбъект.Ссылка;
    А почему не нужно Обновление и записать?
  16. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    А "Дом" - это реквизит документа "Док2" с типом "ДокументСсылка.Док1" ?

    Записать ненужно, потому что документ лучit из самого себя записывать, а не из другого документа.
    А обновить ненужно, потому что скамо должно обновиться при таком коде.
  17. TopicStarter Overlay
    DikSer
    Offline

    DikSer Опытный в 1С

    Регистрация:
    27 сен 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Да, имеено такой реквизит.
    Без Записать не сохрянятся внесенные данные.

    Попробовал закоментить Обновить и Записать и фиг. Не получается... =(
    Я думаю если была бы возможность отловить завершенния ОткрытойМодально формы в Док1 можно было бы запустить Обновление, НО Комманда Обновить почему то не работает. пытался сделать кнопку и привязать к ней функцию Обновить. не вышло.

    Нашел как бы выход оригинальный из положения создал таблицу и присвоил ей ТипЗначений ДокументСписок.Док2, но как вообщем то не странно он выводит список всех документов... Всё как бы хорошо мне список и надо было, и колоночки какие надо выбрать можно. НО как раз весь список то мне и не нужен, а нужент тот список который был бы создан именно из того документа который Открыт, тоесть если Док1 номер 2 в списке должны были бы быть именно документы которые были Созданы Док1 Номер 2. И вот думаю. Проше сделать свою таблицу или как то обработать эту... О.о
    Ну и если решать проблему своими силами то получается проблема с редактированием(именно редактированием) Док2 так как не могу сообразить как надо не добавить строку в табчасть Док1 а именно ее изменить... это осталось главным вопросом=)
  18. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Рассказали бы лучше, зачем такое... А то не зря в типовых есть Заказ покупателя, а есть Корректировка заказа покупателя, а в УПП есть еще Изменение заказа покупателя
  19. TopicStarter Overlay
    DikSer
    Offline

    DikSer Опытный в 1С

    Регистрация:
    27 сен 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Постоянно забываю про типовые решения. Да и разобратся мне лично бывает в них сложновато, поэтому иногда приходится выдумывать велосипед или спрашивать у других.
  20. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Лучше, наверно, на уровне форм параметры передавать, а не объектами кидаться из документа в документ.
    Вот есть у нас открытый Док1 (новый или сохраненный уже). Есть у него на форме кнопка по нажатию которой создается Док2 и открывается на редактирование. Обработка нажатия этой кнопки будет примерно такая:
    Код:
    Процедура Кнопка1Нажатие(Элемент)
    Д = Документы.Док2.СоздатьДокумент();
    Ф = Д.ПолучитьФорму(,ЭтаФорма);
    Ф.ОткрытьМодально();
    КонецПроцедуры
    
    
    Можно и не модально открывать, но тогда пользователь сможет наплодить кучу документов Док2 не закрывая уже созданный.
    Далее в Док2 при закрытии (как в примере написано) выполняем следующий код:
    Код:
    Процедура ПриЗакрытии()
    Док = ЭтаФорма.ВладелецФормы.ДокументОбъект;
    ТЧ = Док.Квартиры;
    Строка = ТЧ.Добавить();
    Строка.Этаж = Этаж;
    Строка.НомерКвартиры = НомерКвартиры;
    //все остальные параметры
    КонецПроцедуры
    
    При закрытии формы Док2 в Док1 должна появиться новая строка с данными. Обновлять ничего не нужно.
    Сохранять изменения в Док1 будем уже из самого Док1
    Что касается изменения, а не добавления строки - самый простой способ, по-моему, добавить в тч Док1 реквизит-ссылку на Док2 и по нему искать создавал Док2 уже строку или нет.

    Событие ПриЗакрытии в Док2 использовать не советую, лучше ПриЗаписи.
    Ну и продумать надо еще ситуации удаления/распроведения как Док1, так и Док2.

Поделиться этой страницей