Версия для печати темы (https://pro1c.org.ua/index.php?s=ce72a71d291cf18980d07835960f5a23&showtopic=59654)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как программно заполнить табличную часть документа 1с 7.7 конф 7.7.00

Автор: ZUBR 16.06.20, 0:43

Здравствуйте!
У меня в РасходнойНакладной есть реквизит ПриВыд с типом Справочник.Номенклатура и реквизит Ак с типом Число.
Из єтой РасходнойНакладной я создаю новую РасходнуюНакладную.
В модуле формы прописан код создания новой расходной накладной через СоздатьОбъект. Название объекта Акс.
Мне нужно, чтобы в табличной части нового документа программно прописывался товар ПриВыд в количестве Ак.
Привожу кусок кода

Акс.НоваяСтрока();
    Акс.Товар=ПриВыд;
    Акс.Количество=Ак;
...........................................................
         Акс.Записать();

Программа создает этот документ, но не подставляет сама ни единиц в графу единицы, ни цены, не считает суммы, короче, только проставляет эти два параметра. Как сделать так, чтобы программно проставлялись в табличную часть все реквизиты товара ПриВыд?
Да, и у меня еще есть ПриВыд2 и ПриВыд3 с Ак2 и Ак3 соответственно. То есть, мне нужно программно внести в табличную часть три товара с ценами, подсчитать сумму, ну, вобщем, программно создать для них расходную накладную. Спасибо!
P.S. Пустая накладная у меня создается без проблем. Меня интересует лишь заполнение табличной части, используя товар ПриВыд и количество Ак

Автор: denis84 16.06.20, 8:04

ZUBR @ Сегодня, 1:43 * ,
Добрый день! Для остальных реквизитов - прописать эти процедуры изменения т.е. при изменении ПриВыд и т.д. должна отрабатывать процедура

denis84 @ Сегодня, 8:47 * ,
Т. е. на реквизит ПриВыд назначить процедуру изменения остальных реквизитов.

Автор: denis84 16.06.20, 10:25

denis84 @ Сегодня, 9:04 * ,
Процедура ПриИзмПривыд()
Акс.цена = товар.цена;
Акс.Количество=Ак;
Акс. Сумма = Акс.количество*акс.цена;

Акс.Записать();
Что такое надо написать и установить эту процедуру на реквизит привыд

Автор: ZUBR 16.06.20, 18:52

denis84 @ Сегодня, 11:25 * ,
Спасибо! Но мне хотелось чего-то попроще. Чтобы как через кнопку Подбор. А то там еще надо и единицы прописывать, и, наверное, итог в конце...
Но если по-другому нельзя, буду дублировать...

Автор: denis84 16.06.20, 20:02

ZUBR @ Сегодня, 19:52 * ,
Для подбора есть процедура в глобальном модуле прописана. Можете там посмотреть. Но смысл такой же

Автор: ZUBR 17.06.20, 18:26

denis84 @ Вчера, 11:25 * ,
все замечательно, только Акс.Цена = Товар.Цена; не работает. Не находит поля агрегатного объекта Цена.
Оно и понятно. Ведь в справочнике номенклатура нет ореквизита Цена. Цены находятся в подчиненном справочнику "Справочник.Номенклатура" справочнике "Справочник. Цены".
Кстати, как-то пытался въехать, как эти два справочника взаимодействуют, но так и не понял.
Подскажите, как получить Акс.Цена?

Акс.цена = товар.цена;
не работает.
Спасибо!

Автор: denis84 18.06.20, 9:07

Добрый день! Если не ошибаюсь, то вроде так:

    
    ЦеныТовара = СоздатьОбъект("Справочник.Цены");
    ЦеныТовара.ИспользоватьВладельца(Товар);
    ЦеныТовара.ВыбратьЭлементы();
    Пока ЦеныТовара.ПолучитьЭлемент()  = 1 Цикл
        Если ЦеныТовара.ПометкаУдаления() = 1 Тогда
            Продолжить;
        КонецЕсли;
        
        Результат = ЦеныТовара.ТекущийЭлемент();
    
    КонецЦикла;

Автор: mut 18.06.20, 10:45

После того как заполнили товар в строке, смотрите, что вызывается в форме при изменении товара и копируйте вызов.
Там же будет и заполнение цены.
После того как заполнили цену, количество, смотрите, как в форме вызывается пересчет строки. Копируйте вызов.

Автор: ZUBR 19.06.20, 20:29

denis84 @ Вчера, 10:07 * ,
Не совсем понятно. Что такое Результат? И что такое Продолжить?

denis84 @ Вчера, 10:07 * ,
Только что пытался разобраться в глобальном модуле, как там это делается. Не смог. Мало знаний и информации.

Автор: denis84 19.06.20, 21:17

ZUBR @ Сегодня, 21:29 * ,
Если элемент помечен на удаление ищем следующий.

Результат - это и есть цена. Напишите у себя это. Подставьте свои переменные. Проверьте через сообщить(). Это кусок кода из торговли и склад 7.7. Вы спрашивали,как выбрать из подчинённого справочник а цены получить цену товар,вот этот код Вам поможет. Только замените на свои переменные, вот ту строку "продолжить" можете выбросить.

Автор: ZUBR 20.06.20, 1:13

mut @ 18.06.20, 11:45 * ,
Ваш метод, к сожалению, не действует, потому что код заполнения документа находится в другом документе.

Акс =СоздатьОбъект ("Документ.РасходнаяНакладная"); 
.................................................................................;
.................................................................................;
           Акс.НоваяСтрока();
        Акс.Товар=ПриВыд;
               глПриИзмененииТовара(Контекст);
        Акс.Количество=Ак;
                глВыч_суммы_накл(Контекст);  
.................................................................................;

То есть,ссылка глПриИзмененииТовара(Контекст); действует на текущий документ, а не на создаваемый... 64000000.gif

Автор: mut 22.06.20, 11:27

Цитата(ZUBR @ 20.06.20, 2:13) *
То есть,ссылка глПриИзмененииТовара(Контекст); действует на текущий документ, а не на создаваемый.


Ну при копировани, конечно, нужно понимать, что происходит в копируемом куске. В этом случае "Контекст" должен передать контекст вашего создаваемого документа, по этому вам у себя надо писать
глПриИзмененииТовара(Акс);

Точно также и далее.

Автор: ZUBR 22.06.20, 22:04

mut @ Сегодня, 12:27 * ,
все получилось! Теперь я знаю, что такое "контекст"!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua