7.7 Открыть окно "история значения" программно

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Samouchka, 23 май 2014.

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Приветствую всех форумчан! Есть документ с реквизитом типа "Справочник.Валюты" и кнопка в форме документа. При нажатии на кнопку нужно открыть окно "история значения" для реквизита "Курс", т.е. отработать то же действие, что выполняется если в форме справочника "Валюты" стать на элемент (например, евро), нажать правую кнопку мыши (или кнопку "история значений" на командной панели) и выбрать реквизит "курс". На сей раз даже примерно код не знаю как писать. Понятия не имею как обратиться к этому самому окну "история значения". Помогите, пожалуйста. Пусть новый1 - это реквизит типа "Справочник.Валюты", а процедура открывающая программно окно "история значения" называется ИсторЗнач():
    Код:
    Процедура ИсторЗнач()
    //что написать?       
    КонецПроцедуры
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Конфигурация то у вас какая? В типовых есть штатный механизм работы с периодическими реквизитами
  3. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.435
    Симпатии:
    373
    Баллы:
    104
    вызов истории на формах подвязан к "F5"
  4. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Конфа - Бухгалтерский учет 4.5 (7.70.536). В ней есть обработка "Значения периодических реквизитов", и можно открыть историю из справочника "Валюты". Да хочется то сразу в форме документа нажать на кнопку для открытия нужного окна, а не лезть в справочник "Валюты", находить там нужный элемент валюты и нажимать "история значения".
  5. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Никто не запрещает сразу... Вызывайте обработку. Параметры формы гляньте в процедуре ОбновитьТаблицу()
  6. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Да, я над этим уже стал работать. Но стопорнулся вот почему: обработка "Значения периодических реквизитов" не позволяет добавить новое значение курса валюты, к примеру, на следующий день. В ней к сожалению можно редактировать только существующие значения. Отсюда следует что нужно вызвать окно "история значений" для добавления нового значения. Часто бывает нужно ввести курс вручную, когда реально он известен на следующий день (по данным сайта ЦБ РФ), а на сервере РБК его ещё нет. Тогда удобно было бы из формы документа это сделать.
  7. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Что-то вы заумное придумали. И явно не нужное (с моей точки зрения). Но охота пуще неволи. Заверите реквизит формы документа. И через него "рулите" курсом.
  8. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Короче, решил сделать так:
    1) Открываю форму справочника "Валюты"
    2) Выбираю в форме элемент, равный реквизиту документа такого же типа "Справочник.Валюты"
    3) Нажимаю кнопки F5 и Enter, тем самым открывая окно "история значений"
    4) Закрываю форму справочника "Валюты".
    Так должно быть, но у меня не получается выполнить пункты 2) и 4). В нижеприведенном коде то что не выполняется я закомментировал:
    Код:
    Процедура ВвестиКурс()
        ФормВал=ОткрытьФорму("Справочник.Валюты");
        //ФормВал.Код=ВалютаПоставки.Код;
        WSHShell = СоздатьОбъект("WScript.Shell");
        WSHShell.SendKeys("{F5}");
        WSHShell.SendKeys("{Enter}");
        //ФормВал.Закрыть();
    КонецПроцедуры
  9. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Все вы как-то через хитро закрученную ж*пу пытаетесь сделать. Извините за резкость. Вес вопрос: ЗАЧЕМ????
    Учитесь делать правильно.

    1) Заведите на форме документа реквизит КУРС.
    2) При открытии документа/выборе валюты/смены даты Меняйте его в соответствии со значение истории курса валюты.
    3) У реквизита лучше всего установить признак "пропускать при вводе" чтобы пользователь случайно не поменял/обнулил.
    4) При вводе нового значения просто записывайте... Конечно сначала спросите надо ли (еще защита от тупости)

    То что вы хотите - полная ерунда! Хотя бы потому что вы поменяете курс, а он у вас в документе останется прежним (если смотреть на ваш код)....
  10. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Дабы Вы не думали что я такой тупой, выкладываю процедуры "ОбновитьКурсы" и "ПолучитьКурсы". Я не только умею "вытаскивать" курсы на нужные мне даты, но и получать их через обработку, если курса нет. А бывает так, что курса на сервере РБК еще нет, а мы его знаем. Тогда я сначала введу его вручную, а потом вызову "ОбновитьКурсы" нажатием кнопки. Вот, любуйтесь на мой код:
    Код:
    Процедура ОбновитьКурсы()
        ВосстановитьЗначение("ДатаПоставки");
        Если ПустоеЗначение(ДатаПоставки)=1 Тогда
            ДатаПоставки=РабочаяДата();
        КонецЕсли;
        //попытаемся получить уже загруженные курсы на определенные даты по указанной валюте
        КурсПоставкиПолуч = СоздатьОбъект("Периодический");
        КурсПоставкиПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
        Если КурсПоставкиПолуч.НайтиЗначение(ДатаПоставки,0)=1 Тогда
            КурсПоставки=КурсПоставкиПолуч.ЗначениеНаДату(ДатаПоставки);
        КонецЕсли;
        Если КурсПоставкиПолуч.НайтиЗначение(ДатаПоставки,0)=0 Тогда
            Сообщить("Курс валюты на дату поставки не найден. Обновите курсы");
        КонецЕсли;
       
        КурсОплатыСегодняПолуч = СоздатьОбъект("Периодический");
        КурсОплатыСегодняПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
        Если КурсОплатыСегодняПолуч.НайтиЗначение(ДатаОплатыСегодня,0)=1 Тогда
            КурсОплатыСегодня=КурсОплатыСегодняПолуч.ЗначениеНаДату(ДатаОплатыСегодня);
        КонецЕсли;
        Если КурсОплатыСегодняПолуч.НайтиЗначение(ДатаОплатыСегодня,0)=0 Тогда
            Сообщить("Курс валюты на сегодня не найден. Обновите курсы");
        КонецЕсли;
       
        КурсОплатыЗавтраПолуч = СоздатьОбъект("Периодический");
        КурсОплатыЗавтраПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
        Если КурсОплатыЗавтраПолуч.НайтиЗначение(ДатаОплатыЗавтра,0)=1 Тогда
            КурсОплатыЗавтра=КурсОплатыЗавтраПолуч.ЗначениеНаДату(ДатаОплатыЗавтра);
        КонецЕсли;
        Если КурсОплатыЗавтраПолуч.НайтиЗначение(ДатаОплатыЗавтра,0)=0 Тогда
            Сообщить("Курс валюты на завтра не найден. Обновите курсы");
        КонецЕсли;
    КонецПроцедуры
     
    Процедура ОбновитьКурсы2()
        ВосстановитьЗначение("ДатаПоставки");
        Если ПустоеЗначение(ДатаПоставки)=1 Тогда
            ДатаПоставки=РабочаяДата();
        КонецЕсли;
        //попытаемся получить уже загруженные курсы на определенные даты по указанной валюте
        КурсПоставкиПолуч = СоздатьОбъект("Периодический");
        КурсПоставкиПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
        Если КурсПоставкиПолуч.НайтиЗначение(ДатаПоставки,0)=1 Тогда
            КурсПоставки=КурсПоставкиПолуч.ЗначениеНаДату(ДатаПоставки);
        КонецЕсли;
        Если КурсПоставкиПолуч.НайтиЗначение(ДатаПоставки,0)=0 Тогда
            Сообщить("Курс валюты на дату поставки не найден на сервере РБК");
        КонецЕсли;
       
        КурсОплатыСегодняПолуч = СоздатьОбъект("Периодический");
        КурсОплатыСегодняПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
        Если КурсОплатыСегодняПолуч.НайтиЗначение(ДатаОплатыСегодня,0)=1 Тогда
            КурсОплатыСегодня=КурсОплатыСегодняПолуч.ЗначениеНаДату(ДатаОплатыСегодня);
        КонецЕсли;
        Если КурсОплатыСегодняПолуч.НайтиЗначение(ДатаОплатыСегодня,0)=0 Тогда
            Сообщить("Курс валюты на сегодня не найден на сервере РБК");
        КонецЕсли;
       
        КурсОплатыЗавтраПолуч = СоздатьОбъект("Периодический");
        КурсОплатыЗавтраПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
        Если КурсОплатыЗавтраПолуч.НайтиЗначение(ДатаОплатыЗавтра,0)=1 Тогда
            КурсОплатыЗавтра=КурсОплатыЗавтраПолуч.ЗначениеНаДату(ДатаОплатыЗавтра);
        КонецЕсли;
        Если КурсОплатыЗавтраПолуч.НайтиЗначение(ДатаОплатыЗавтра,0)=0 Тогда
            Сообщить("Курс валюты на завтра не найден на сервере РБК");
        КонецЕсли;
    КонецПроцедуры
     
    Процедура ПолучитьКурсы()
    //запросим получение курсов, если их нет
        КурсПоставкиПолуч = СоздатьОбъект("Периодический");
        КурсПоставкиПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
       
        КурсОплатыСегодняПолуч = СоздатьОбъект("Периодический");
        КурсОплатыСегодняПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
       
        КурсОплатыЗавтраПолуч = СоздатьОбъект("Периодический");
        КурсОплатыЗавтраПолуч.ИспользоватьОбъект("Курс",ВалютаПоставки);
       
        ДатаВОбработку="";
       
        Если КурсПоставкиПолуч.НайтиЗначение(ДатаПоставки,0)=0 Тогда
            ДатаВОбработку=ДатаПоставки;
        КонецЕсли;
       
        Если КурсОплатыСегодняПолуч.НайтиЗначение(ДатаОплатыСегодня,0)=0 Тогда
            ДатаВОбработку=ДатаОплатыСегодня;
        КонецЕсли;
       
        Если КурсОплатыЗавтраПолуч.НайтиЗначение(ДатаОплатыЗавтра,0)=0 Тогда
            ДатаВОбработку=ДатаОплатыЗавтра;
        КонецЕсли;
       
        Если ПустоеЗначение(ДатаВОбработку)=0 Тогда
            //Ответ=Вопрос("Некоторые курсы валют не найдены! Получить курсы валют с сайта РБК?",4);
            //Если Ответ=7 тогда
            //    Возврат;
            //КонецЕсли;
            //Если Ответ=6 тогда
                Записать();
                ОткрытьФорму("Отчет.ИППКурсыВалютРБК",ТекущийДокумент());
            //КонецЕсли;
        КонецЕсли;
       
        ОбновитьКурсы2();
    КонецПроцедуры
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да никто вам и не говорит что вы тупой! Просто как вы хотите никто не делает.
  12. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Ну это уж до поры до времени...
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А почему не делать СРАЗУ правильно, а абы как? Не Умеете? Научим!

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