8.х Как получить форму?

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

  1. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    Обхожу результат запроса. Есть ссылка на документ - ВыборкаПоДокументам.СсылкаНаРеализацию
    получаю объект - ДокОбъект = ВыборкаПоДокументам.СсылкаНаРеализацию.ПолучитьОбъект();
    как получить форму именно этого документа в выборке???подскажите пожалуйста
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Форма = ДокОбъект.ПолучитьФорму(......)
  3. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    делал, что то не получается, сейчас ещё попробую...
    --- Объединение сообщений, 14 ноя 2014 ---
    {Документ._Маршрут.Форма.ФормаДокумента.Форма(2697)}: Ошибка при вызове метода контекста (ПолучитьФорму)
    Форма = ДокОбъект.ПолучитьФорму();
    по причине:
    Интерактивные операции недоступны

    вот ошибочка
    Последнее редактирование: 14 ноя 2014
  4. olegsemenov2005
    Offline

    olegsemenov2005 Новичок в 1С

    Регистрация:
    5 май 2014
    Сообщения:
    48
    Симпатии:
    3
    Баллы:
    4
    ПараметрыДок = Новый Структура("Ключ", ДокОбъект.Ссылка);
    ФормаДокумента = ПолучитьФорму("Документ.ТвояРеализация.ФормаОбъекта", ПараметрыДок);
    --- Объединение сообщений, 14 ноя 2014 ---
    Доступность:
    Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).

    Пытаешься на сервере?
  5. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    да на сервере, перед записью объекта сделать пересчет таб части а потом записать
    --- Объединение сообщений, 14 ноя 2014 ---
    Документ._Маршрут.Форма.ФормаДокумента.Форма(2698,19)}: Процедура или функция с указанным именем не определена (ПолучитьФорму)
    ФормаДокумента = <<?>>ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыДок); (Проверка: Сервер)
    видимо поэтому и тут из за сервера
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Каждая строка табличной части должна пересчитываться либо собственным кодом, либо экспортной процедурой в модуле объекта.
    Про получение формы для этого забудь сразу....
  7. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    ВыборкаПоДокументам = ВыборкаОбщая.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "СсылкаНаРеализацию");

    пока ВыборкаПоДокументам.Следующий() цикл
    ДокОбъект = ВыборкаПоДокументам.СсылкаНаРеализацию.ПолучитьОбъект();
    ПараметрыДок = Новый Структура("Ключ", ДокОбъект.Ссылка);
    ФормаДокумента = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыДок);
    Товары = ДокОбъект.Товары;
    для каждого строка из Товары цикл
    если строка.СчетУчета = ПланыСчетов.Хозрасчетный.ГотоваяПродукция Тогда
    строка.Сумма = строка.Сумма + За1шт;
    ОбработкаТабличныхЧастейКлиентСервер.ПриИзмененииСумма(ФормаДокумента, "Товары");
    иначе
    Продолжить;
    КонецЕсли;
    КонецЦикла;
    ДокОбъект.Записать();
    КонецЦикла;



    вот что то вроде этого хочу
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    ну дык и делай так, для чего тебе форма документа?
    возьми код из процедуры ОбработкаТабличныхЧастейКлиентСервер.ПриИзмененииСумма
    и вставь в свою обработку.
  9. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    ок буду пробовать!
    --- Объединение сообщений, 14 ноя 2014 ---
    хотел воспользоваться типовым пересчетом
  10. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    не удается пересчитать колонку "всего" нет такого реквизита, он реквизит формы в таб части что можно предпринять?

    Вложения:

  11. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Эта колонка скорее всего при выводе строки сама посчитается.
    andryscha92 нравится это.
  12. olegsemenov2005
    Offline

    olegsemenov2005 Новичок в 1С

    Регистрация:
    5 май 2014
    Сообщения:
    48
    Симпатии:
    3
    Баллы:
    4
    После пересчета табличной части посчитай её итоговую сумму и запиши в реквизит шапки "СуммаДокумента".
    andryscha92 нравится это.
  13. olegsemenov2005
    Offline

    olegsemenov2005 Новичок в 1С

    Регистрация:
    5 май 2014
    Сообщения:
    48
    Симпатии:
    3
    Баллы:
    4
    Типа такого.

    Код:
    Сообщение = Новый СообщениеПользователю;
    
    ВыборкаПоДокументам = ВыборкаОбщая.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "СсылкаНаРеализацию");
    пока ВыборкаПоДокументам.Следующий() цикл
    
        ДокОбъект = ВыборкаПоДокументам.СсылкаНаРеализацию.ПолучитьОбъект();
        ПараметрыДок = Новый Структура("Ключ", ДокОбъект.Ссылка);
        ФормаДокумента = ПолучитьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыДок);
    
        Товары = ДокОбъект.Товары;
        для каждого строка из Товары цикл
    
            если НЕ строка.СчетУчета = ПланыСчетов.Хозрасчетный.ГотоваяПродукция Тогда
                Продолжить;
            КонецЕсли;
    
            строка.Сумма = строка.Сумма + За1шт;
            строка.Цена = ?(строка.Количество = 0, 0, строка.Сумма / строка.Количество);
            ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуНДСТабЧасти(строка, Объект.СуммаВключаетНДС, Истина);
    
        КонецЦикла;
    
        ДокОбъект.СуммаДокумента = Товары.Итог("Сумма");
        Попытка
            ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
            Если ДокОбъект.Проведен Тогда
                Попытка
                    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
                Исключение
                    Сообщение.Текст = "Ошибка проведения документа " + Строка(ДокОбъект);
                    Сообщение.Сообщить();
                КонецПопытки;
            КонецЕсли;
        Исключение
            Сообщение.Текст = "Ошибка записи документа " + Строка(ДокОбъект);
            Сообщение.Сообщить();
        КонецПопытки;
    
    КонецЦикла;
    
    И еще - при таком пересчете из-за округления при обратном пересчете (цена * количество) на итоговую сумму не выйдешь, будет что то типа
    10 / 3=3.33
    3*3.33 != 10
    Последнее редактирование: 14 ноя 2014
    andryscha92 нравится это.
  14. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    вот так точно не хорошо делать:
    строка.Цена = ?(строка.Количество = 0, 0, строка.Сумма / строка.Количество);
    надо сперва узнать, а есть ли установленная цена по данной номенклатуре на дату документа, и только если ее нет, либо она отличается от цены, указанной в документе, чего-то там придумывать. цена в данном случае - очень сложный момент.
    andryscha92 нравится это.
  15. olegsemenov2005
    Offline

    olegsemenov2005 Новичок в 1С

    Регистрация:
    5 май 2014
    Сообщения:
    48
    Симпатии:
    3
    Баллы:
    4
    У автора стоит задача - увеличить сумму на заданное значение "За1шт", исходя из этого уже рассчитывается и новая цена. Так что была она или не было, это уже не важно.
  16. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    а, че-т я уже под конец пятничного рабочего дня нить обсуждения теряю находу прям, тогда ок.....
  17. TopicStarter Overlay
    andryscha92
    Offline

    andryscha92 Опытный в 1С

    Регистрация:
    31 янв 2012
    Сообщения:
    389
    Симпатии:
    1
    Баллы:
    29
    спасибо Всем за помощь!
Похожие темы
  1. Goth
    Ответов:
    0
    Просмотров:
    808
Загрузка...

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