Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 22:33

Как заполнить таблицу с серийными номерами при выводе на основании

Автор lakykherson, 26 янв 2023, 12:57

0 Пользователей и 2 гостей просматривают эту тему.

Максим75

lakykherson, я написал, где ошибка.
больше дискутировать мне не интересно. у себя выправил, все работает.
просто возьмите в обработке, поставьте точку останова и перехватите, откуда в обработку залетает КлючСвязи,  какой табличной части документа, и увидете, что залетает он туда с табличной части Товары. О потом посмотрите, как заполняется табличная часть Товары при ввводе на основании, там КлючСвязи никак не переносится, поэтому заполняется номером строки.
Ладно, все, не хочу больше ничего обсуждать.

lakykherson

Максим75,
Помогите пожалуйста еще немного, у меня получилось почти все заполнить из своей внешней обработки, уже все правильно заполняет кроме шапки документа, так как я почти не знаю базовых понятий я не пойму почему к примеру не копируется данные о контрагенте. Подскажите как правильно скопировать данные контрагента.

вот мой код

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

Afinogen

если у вашего документа в модуле объекта есть процедура

Процедура ОбработкаЗаполнения(Основание)

вы можете ее вызвать в момент создания

ОбъектДокумент = вашДокумент.СоздатьДокумент()

ВашДокумент.Заполнить(Основание);

//в качестве основания либо передаете Неопредеелно - тогда создается пустой документ либо  набор параметров согласно того  что в процедуре прописано (обычно или ссылка или структура)

после этого  ваш документ заполнится с использованием типовых механизмов прописанных в  конфигурации

Afinogen


Afinogen

я не совсем понял,  вы создаете новый документ

НовыйДокумент = Документы.ВозвратТоваровОтПокупателя.СоздатьДокумент();


вот этот код

        Автор = НомерРеализации.Автор;
        ВалютаДокумента = НомерРеализации.ВалютаДокумента;
        ДисконтнаяКарта = НомерРеализации.ДисконтнаяКарта;
        Доверенность = НомерРеализации.Доверенность;
        ДоверенностьЧерезКого = НомерРеализации.ДоверенностьЧерезКого;
        ДоговорКонтрагента = НомерРеализации.ДоговорКонтрагента;
        ДокументОснование = НомерРеализации.ДокументОснование;
        Контрагент = НомерРеализации.Контрагент;
        КратностьВзаиморасчетов = НомерРеализации.КратностьВзаиморасчетов;
        КурсВзаиморасчетов = НомерРеализации.КурсВзаиморасчетов;
        Организация = НомерРеализации.Организация;
        Ответственный = НомерРеализации.Ответственный;
        ОтражатьВБухгалтерскомУчете = НомерРеализации.ОтражатьВБухгалтерскомУчете;
        ОтражатьВУправленческомУчете = НомерРеализации.ОтражатьВУправленческомУчете;
        Подразделение = НомерРеализации.Подразделение;
        Проект = НомерРеализации.Проект;
        РучнаяКорректировка = НомерРеализации.РучнаяКорректировка;
        Сделка = НомерРеализации.Сделка;
        СкладОрдер = НомерРеализации.Склад;
        СуммаВключаетАкциз = НомерРеализации.СуммаВключаетАкциз;
        СуммаВключаетНДС = НомерРеализации.СуммаВключаетНДС;
        СуммаДокумента = НомерРеализации.СуммаДокумента;
        ТипЦен = НомерРеализации.ТипЦен;
        УсловиеПродаж = НомерРеализации.УсловиеПродаж;
        УчитыватьАкциз = НомерРеализации.УчитыватьАкциз;
        УчитыватьНДС = НомерРеализации.УчитыватьНДС;

Это вы пытаетесь заполнить реквизиты нового документа или что?
Если реквизиты нового документа то  вы в данном случае должны указывать

НовыйДокумент.ВалютаДокумента = НомерРеализации.ВалютаДокумента;
а то по вашему коду вы просто в  вашей обработке данные из реализации сохранили в переменные)

и затем вы новый документ прежде чем открыть должны как минимум сохранить

Afinogen


lakykherson

Afinogen,

спасибо все заработало , огромное спасибо всем кто откликнулся благодаря вашим подсказкам все таки у меня все получилось.

lakykherson

подскажите как сделать что бы не создавать в таблице новые а изменить значения существующих?

    Для Каждого ТекСтрокаТовары Из НомерРеализации.Товары Цикл   
            НоваяСтрока = НовыйДокумент.Товары.Добавить();           
            НоваяСтрока.КлючСвязи = ТекСтрокаТовары.КлючСвязи;
            НоваяСтрока.КлючСтроки = ТекСтрокаТовары.КлючСтроки;
           
        КонецЦикла;

Максим75

lakykherson, Для Каждого ТекСтрокаТовары Из НомерРеализации.Товары Цикл   
            НоваяСтрока = НовыйДокумент.Товары.Найти(ТекСтрокаТовары.НомерСтроки,"НомерСтроки");
            Если НоваяСтрока = Неопределено тогда продолжить; КонецЕсли;           
            НоваяСтрока.КлючСвязи = ТекСтрокаТовары.КлючСвязи;
            НоваяСтрока.КлючСтроки = ТекСтрокаТовары.КлючСтроки;
           
        КонецЦикла;

надо искать строку в документе Возврат по номеру строки из документа Реализация (при условии, что номера строкине менялись в Возврате). Потому как если менялись, то КлючСвязи снова пойдет по одному месту.

lakykherson

Коечный вариант сделал используя стандартную функцию заполнения на основании и потом изменив значения ключа в таблице товаров и заполняя таблицы серийных номеров.

       

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



КонецПроцедуры

Теги: 1с8 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск