8.х Автозаполнение реквезитов документа

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

  1. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Всех приветствую.
    Подскажите плз. Я в своем Док. в обработке проведения по табл. части формирую массу новых док. (в моем случае "Счет на оплату покупателю" в УТ). И конечно мне нужно заполнить обязательные реквизиты счетов. Так вот, еслиб я вручную создал бы этот счет, то при выборе контрагента форма мне б сразу и основной договор вытащила и тип цен и т.д. Но в моем случае даже при передачи контрагента обработчики формы счетов молчат. Тупо слизать обработчики из формы счетов не получиться, т.к. они вперемешку ссылаются как на глобальные процедуры так и локальные. Пытался разбираться - черт ногу сломит - объектно-ориентированное программирование...
    Может кто что сможет посоветовать... Или посоветует реальную литературу по реализованой в УТ конфигурации (в картинках...).
  2. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    А при чем тут ООП ?

    ООП - это не черт из табакерки с инструкций "нажать на большую кнопку, ждать"
    Передача данных в форму не обязательно вызывает события этой формы (это не только в 1С - это и в множестве других сред, причем "именитых").
    А заполнить. Чего там заполнять то?
    Создали руками счет на оплату, сбацали микрообработку, чтобы увидеть все реквизиты документа.
    Подумали откуда какие реквизиты тянутся - все.
  3. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Тянуть, по крайней мере для меня, есть что: например мне нужно создавать счета с определенной услугой, которая определяется видом договора с контрагентом, а цена зависит от типа цен с ним. Т.о. мне нужно по контрагенту дергать его основной договор, там смотреть тип цен, смотреть вид договора чтобы услугу определять и т.п. и т.п. А если я еще цену по контрагенту в доп. условиях по договору зафигачил... Тоже нужно учесть. А в своей форме, такие параметры он уже сам получает. Зачем мне тут велосипед выдумывать и огороды городить?

    ООП может и не причем, просто как только лезу в ентот код - вязну... а все там же - на берегу...((

    Уверен, что должен быть вариант решения попроще...
  4. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Можно попробывать в обработке делать ТЗ и загружать в нее все реквизиты.
  5. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Честно говоря не понял как это мне может помочь...

    У меня нет значений, кот. я в ТЗ записать бы мог. Большинство значений форма док. сама формирует и предлагает по следующим введенным данным: , дата, организация, контрагент, услуга, количество. Сама подбирает основной договор, там тип цен смотрит, по типу цен цену услуги определяет, и т.д. Тяжко это все самому доставать...
    По идеи мне нужно активизировать форму созданного документа с его обработками. Как это сделать?...
  6. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Получить объект и открыть форму.
  7. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Подозреваю что это не вариант.
    Поля(Реквизиты) открытой формы уже будут заполнены. Событий "ОбработкаВыбора", "ПриНачалеВыбора" и т.п. не произойдет.
    Придется "прощелкивать" реквизиты - что почти равносильно ручному заполнению (я бы даже сказал что еще геморойней).

    А форму вот как раз открывать как бы и не надо, нужно эмитировать вышеуказаные события.
    Попробуйте обращаться (вызывать) к событиям формы, созданных документов.
    Как вариант. Тело событий формы переписать в отдельные процедуры
    1) процедуры вызывать в процедурах обработки событий
    2) Попробовать "финт" в виде добавки Экспорт к объявлению процедуры, ну и соответсвенно вызовом этой процедуры.
    Как то так в общем.
  8. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Я всеж сделал пока по другому: использовал метод ....
    Но вот беда - если по реквизитам он прокатывает у меня без проблем (получает нужные сведения и заполняет соответствующие характеристики), то по полю строки табличной части счета выдает ошибку, как только не пытался путь прописать...

    Код:
    Счетик = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
    Форма=Счетик.ПолучитьФорму("ФормаДокумента");
    Форма.Открыть();
    Форма.ПодключитьОбработчикИзмененияДанных("Организация", "ОрганизацияПриИзменении"); //работает на ура...
    
    Форма.ПодключитьОбработчикИзмененияДанных("Контрагент", "ПриИзмененииКонтрагента"); 		Форма.ПодключитьОбработчикИзмененияДанных("Счетик.Услуги.ТекущиеДанные.Номенклатура",
    "УслугиНоменклатураПриИзменении"); // так выдает ошибку( Ошибка при вызове метода контекста //(ПодключитьОбработчикИзмененияДанных): Неправильный путь к данным
    //Форма.ПодключитьОбработчикИзмененияДанных("Счетик.Услуги.ТекущиеДанные.Номенклатура","УслугиНоменклатураПриИзменении");)
    //пробывал вместо Счетик Форма.иТ.Д. написать - та же ошибка				
    Счетик.Организация=Справочники.Организации.НайтиПоНаименованию("ТраЛялЯ");
    Форма.ЭлементыФормы.ОсновнаяПанель.Страницы.Услуги.Видимость=Истина;
    НовСтрокаТабЧастиУслуги=Счетик.Услуги.Добавить();
    Форма.ПодключитьОбработчикИзмененияДанных("НовСтрокаТабЧастиУслуги.Номенклатура","УслугиКоличествоПриИзменении");
    //то же не работает так...
    НовСтрокаТабЧастиУслуги.Номенклатура=пч.Контрагент.Номенклатура;
    
    
    Есть предположения?
  9. BabySG
    Offline

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

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Вы обращаетесь к данным - естессно, что выдаст ошибку.
  10. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Да как только не пробывал уже!... В мануале написано что путь к данным может там быть указанным и мне нужно к табличной части и подключить "прослушку". Как должно быть правильно , чтоб "не к данным"...?
  11. BabySG
    Offline

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

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Счетик.Услуги.ТекущиеДанные.Номенклатура - в корне не верно!
    На момент создания обработчика такого понятия вообще не существует!
  12. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Согласен с тобой на все 100... Потому и ошибку выдает! Все в принципе у вас перед глазами..., чтоб сами бы указали в качестве "Пути"?
    Код:
    Синтаксис:
    ПодключитьОбработчикИзмененияДанных(<Имя данных>, <Имя процедуры>, <Отслеживать подчиненные данные>) 
    Параметры:
    <Имя данных> (обязательный)
    Тип: Строка. Имя данных (путь к данным), изменения которых необходимо отслеживать. Могут быть указаны данные, связанные с реквизитами формы, [b]табличными частями[/b], а [b]также подчиненные данные - реквизиты этих объектов[/b]. Например, "Реквизит1.Наименование".
    Параметр может содержать только один путь к данным, т.е. метод применяется для одного реквизита
    
    Если смотреть по моему коду я там второй раз уже после создания строки обработчик пытаюсь включить - один фиг...(

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