Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как через внешнюю обработку присвоить значение табличной части документа?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
fevz
Есть документ, создается его копия. В новом документе только меняется в табличной части 3 поля Сумма, СуммаНДС, СуммаВзаиморасчетов. (умножаются на коеф. 0,35 от значения старого). Но при этом необходимо поменять значение старого, то есть уменьшить (Сумма, СуммаНДС, СуммаВзаиморасчетов умножтить на 0,65).Вот тут и проблема.не знаю как это сделать.Помогите пожалуйста.

Процедура КнопкаВыполнитьНажатие(Кнопка)

    
    НачальнаяДата = ЭтаФорма.НачПериода;
    КонечнаяДата = ЭтаФорма.КонПериода;
    Коеффициент = ЭтаФорма.Коеффициент;
    Если ЭтаФорма.Проведен = Истина Тогда
        
        Проведен = "ИСТИНА";
    Иначе
        Проведен = "ЛОЖЬ";
    КонецЕсли;
    
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("НачальнаяДата",НачальнаяДата);    
    Запрос.УстановитьПараметр("КонечнаяДата",КонечнаяДата);
    Запрос.УстановитьПараметр("Проведен",Проведен);
    
   // Дата МЕЖДУ &НачальнаяДата И &КонечнаяДата
    Запрос.Текст = "ВЫБРАТЬ
                   |    РегистрацияВходящегоНалоговогоДокумента.Ссылка,
                   |    РегистрацияВходящегоНалоговогоДокумента.ВерсияДанных,
                   |    РегистрацияВходящегоНалоговогоДокумента.ПометкаУдаления,
                   |    РегистрацияВходящегоНалоговогоДокумента.Номер,
                   |    РегистрацияВходящегоНалоговогоДокумента.Дата,
                   |    РегистрацияВходящегоНалоговогоДокумента.Проведен,
                   |    РегистрацияВходящегоНалоговогоДокумента.ВидОперации,
                   |    РегистрацияВходящегоНалоговогоДокумента.Комментарий,
                   |    РегистрацияВходящегоНалоговогоДокумента.Ответственный,
                   |    РегистрацияВходящегоНалоговогоДокумента.Организация,
                   |    РегистрацияВходящегоНалоговогоДокумента.Контрагент,
                   |    РегистрацияВходящегоНалоговогоДокумента.ДоговорКонтрагента,
                   |    РегистрацияВходящегоНалоговогоДокумента.ДокументОснование,
                   |    РегистрацияВходящегоНалоговогоДокумента.НомерВходящегоДокумента,
                   |    РегистрацияВходящегоНалоговогоДокумента.ДатаВходящегоДокумента,
                   |    РегистрацияВходящегоНалоговогоДокумента.СуммаДокумента,
                   |    РегистрацияВходящегоНалоговогоДокумента.СуммаНДСДокумента,
                   |    РегистрацияВходящегоНалоговогоДокумента.СчетНДС,
                   |    РегистрацияВходящегоНалоговогоДокумента.СубконтоДт1,
                   |    РегистрацияВходящегоНалоговогоДокумента.СубконтоДт2,
                   |    РегистрацияВходящегоНалоговогоДокумента.СубконтоДт3,
                   |    РегистрацияВходящегоНалоговогоДокумента.СчетУчетаВексель,
                   |    РегистрацияВходящегоНалоговогоДокумента.ВексельСубконто1,
                   |    РегистрацияВходящегоНалоговогоДокумента.ВексельСубконто2,
                   |    РегистрацияВходящегоНалоговогоДокумента.ВексельСубконто3,
                   |    РегистрацияВходящегоНалоговогоДокумента.СуммаВозвратнойТары,
                   |    РегистрацияВходящегоНалоговогоДокумента.РучнаяКорректировка,
                   |    РегистрацияВходящегоНалоговогоДокумента.Сделка,
                   |    РегистрацияВходящегоНалоговогоДокумента.СчетУчетаНДС,
                   |    РегистрацияВходящегоНалоговогоДокумента.НомерКорректируемогоВходящегоДокуме
нта,
                   |    РегистрацияВходящегоНалоговогоДокумента.ДатаКорректируемогоВходящегоДокумен
та,
                   |    РегистрацияВходящегоНалоговогоДокумента.ВключаетсяВУточняющийРасчет,
                   |    РегистрацияВходящегоНалоговогоДокумента.ВидДокумента,
                   |    РегистрацияВходящегоНалоговогоДокумента.СпецРежимНалогообложения,
                   |    РегистрацияВходящегоНалоговогоДокумента.УточняемыйПериод,
                   |    РегистрацияВходящегоНалоговогоДокумента.СчетУчетаКорректировкиНДСКредит,
                   |    РегистрацияВходящегоНалоговогоДокумента.ОснованиеКорректировки,
                   |    РегистрацияВходящегоНалоговогоДокумента.ТребуетПроверкиВключенияВЕдиныйРеес
трНалоговыхНакладных,
                   |    РегистрацияВходящегоНалоговогоДокумента.ДатаВключенияВЕдиныйРеестрНалоговых
Накладных,
                   |    РегистрацияВходящегоНалоговогоДокумента.ОбособленноеПодразделение,
                   |    РегистрацияВходящегоНалоговогоДокумента.Коеффициент,
                   |    РегистрацияВходящегоНалоговогоДокумента.Товары.(
                   |        Ссылка,
                   |        НомерСтроки,
                   |        НаименованиеТовара,
                   |        Количество,
                   |        Цена,
                   |        Сумма,
                   |        СтавкаНДС,
                   |        СуммаВзаиморасчетов,
                   |        СуммаНДС,
                   |        ДляХозяйственнойДеятельности,
                   |        ДляОперацийОблагаемыхНДС,
                   |        СтатьяДекларацииНДСНалоговыйКредит,
                   |        Амортизируется,
                   |        ПропорциональныйНДС,
                   |        УДАЛИТЬСчетУчетаНДС
                   |    ),
                   |    РегистрацияВходящегоНалоговогоДокумента.Представление,
                   |    РегистрацияВходящегоНалоговогоДокумента.МоментВремени
                   |ИЗ
                   |    Документ.РегистрацияВходящегоНалоговогоДокумента КАК РегистрацияВходящегоНалоговогоДокумента
                   |ГДЕ
                   |    РегистрацияВходящегоНалоговогоДокумента.Дата МЕЖДУ &НачальнаяДата И &КонечнаяДата
                   |    И РегистрацияВходящегоНалоговогоДокумента.СпецРежимНалогообложения = 0
                   |    И РегистрацияВходящегоНалоговогоДокумента.Проведен = &Проведен";
                  
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать();
    
    
        

    Пока Выборка.Следующий() Цикл

    Док = Документы.РегистрацияВходящегоНалоговогоДокумента.СоздатьДокумент();

        
    Док.Дата = Выборка.Дата;
    Док.Контрагент = Выборка.Контрагент;
    Док.ОбособленноеПодразделение = Выборка.ОбособленноеПодразделение;
    Док.ДоговорКонтрагента = Выборка.ДоговорКонтрагента;
    Док.Организация = Выборка.Организация;
    Док.Сделка = Выборка.Сделка;
    Док.ДокументОснование = Выборка.ДокументОснование;
    Док.НомерВходящегоДокумента = Выборка.НомерВходящегоДокумента;
    Док.ДатаВходящегоДокумента = Выборка.ДатаВходящегоДокумента;
    Док.ТребуетПроверкиВключенияВЕдиныйРеестрНалоговыхНакладных = Выборка.ТребуетПроверкиВключенияВЕдиныйРеестрНалоговыхНакладных;
    Док.ДатаВключенияВЕдиныйРеестрНалоговыхНакладных = Выборка.ДатаВключенияВЕдиныйРеестрНалоговыхНакладных;
    Док.ВидДокумента = Выборка.ВидДокумента;
    Док.НомерКорректируемогоВходящегоДокумента = Выборка.НомерКорректируемогоВходящегоДокумента;
    Док.ДатаКорректируемогоВходящегоДокумента = Выборка.ДатаКорректируемогоВходящегоДокумента;
    Док.ОснованиеКорректировки = Выборка.ОснованиеКорректировки;
    
    Док.Комментарий = Выборка.Комментарий;
    Док.Ответственный = Выборка.Ответственный;
    Док.ВидОперации = Выборка.ВидОперации;
    
    Док.СуммаДокумента = Выборка.СуммаДокумента;
    Док.СуммаНДСДокумента = Выборка.СуммаНДСДокумента;
    Док.СчетНДС = Выборка.СчетНДС;
    Док.СубконтоДт1 =  Выборка.СубконтоДт1;
    Док.СубконтоДт2 =  Выборка.СубконтоДт2;
    Док.СубконтоДт3 =  Выборка.СубконтоДт3;
    Док.СчетУчетаВексель = Выборка.СчетУчетаВексель;
    Док.ВексельСубконто1 = Выборка.ВексельСубконто1;
    Док.ВексельСубконто2 = Выборка.ВексельСубконто2;
    Док.ВексельСубконто3 = Выборка.ВексельСубконто3;
    Док.СуммаВозвратнойТары = Выборка.СуммаВозвратнойТары;
    Док.РучнаяКорректировка = Выборка.РучнаяКорректировка;
    Док.СчетУчетаНДС = Выборка.СчетУчетаНДС;
    Док.ВключаетсяВУточняющийРасчет = Выборка.ВключаетсяВУточняющийРасчет;
    Док.СпецРежимНалогообложения = Выборка.СпецРежимНалогообложения;
    Док.УточняемыйПериод = Выборка.УточняемыйПериод;
    Док.СчетУчетаКорректировкиНДСКредит = Выборка.СчетУчетаКорректировкиНДСКредит;
    
    Док.Коеффициент = Выборка.Коеффициент;
    
        ТоварыВыборкаДетальныеЗаписи = Выборка.Товары.Выбрать();

        Пока ТоварыВыборкаДетальныеЗаписи.Следующий() Цикл
            
            Стр = Док.Товары.Добавить();
            //ЗаполнитьЗначенияСвойств(Стр,ТоварыВыборкаДетальныеЗаписи);
            Стр.НаименованиеТовара = ТоварыВыборкаДетальныеЗаписи.НаименованиеТовара;
            Стр.Количество = ТоварыВыборкаДетальныеЗаписи.Количество;
            Стр.Цена = ТоварыВыборкаДетальныеЗаписи.Цена;
            Стр.СтавкаНДС = ТоварыВыборкаДетальныеЗаписи.СтавкаНДС;
            Стр.Сумма = ТоварыВыборкаДетальныеЗаписи.Сумма*Коеффициент;
            Стр.СуммаНДС = ТоварыВыборкаДетальныеЗаписи.СуммаНДС*Коеффициент;
            Стр.СуммаВзаиморасчетов = ТоварыВыборкаДетальныеЗаписи.СуммаВзаиморасчетов*Коеффициент;
            Стр.ДляХозяйственнойДеятельности = ТоварыВыборкаДетальныеЗаписи.ДляХозяйственнойДеятельности;
            Стр.ДляОперацийОблагаемыхНДС = ТоварыВыборкаДетальныеЗаписи.ДляОперацийОблагаемыхНДС;
            Стр.ПропорциональныйНДС = ТоварыВыборкаДетальныеЗаписи.ПропорциональныйНДС;
            Стр.Амортизируется = ТоварыВыборкаДетальныеЗаписи.Амортизируется;
            Стр.СтатьяДекларацииНДСНалоговыйКредит = ТоварыВыборкаДетальныеЗаписи.СтатьяДекларацииНДСНалоговыйКредит;
            
        КонецЦикла;
        
        Док.Записать();
    
    
    КонецЦикла;

    
    
    
        
    
    
КонецПроцедуры
Vofka
В чём именно проблема? Конкретно что не получается?
fevz
Цитата(Vofka @ 13.05.12, 13:56) необходимо зарегистрироваться для просмотра ссылки
В чём именно проблема? Конкретно что не получается?


Просто поменять значение в табличной части в документе-оригинале. умножить 3 поля на 0,65 и сохранить документ.
Мой код пока только изменяет значение нового документа.А как оригинал изменить я не знаю.(ну как обратиться правильно к табличной части и изменить данные в нем)
Ardi
док1 = докссылка.ПолучитьОбъект();
док2 = докссылка.Скопировать();
ТоварыВыборкаДетальныеЗаписи1 = док1.Товары.Выбрать();
ТоварыВыборкаДетальныеЗаписи2 = док2.Товары.Выбрать();
Пока ТоварыВыборкаДетальныеЗаписи.Следующий() Цикл
ТоварыВыборкаДетальныеЗаписи2 .Следующий();
ТоварыВыборкаДетальныеЗаписи2.Сумма = ТоварыВыборкаДетальныеЗаписи2.Сумма*коэфициент;
ТоварыВыборкаДетальныеЗаписи1.Сумма = ТоварыВыборкаДетальныеЗаписи1.Сумма-ТоварыВыборкаДетальныеЗаписи2.Сумма;

...СуммаНДС ...
...СуммаВзаиморасчетов ...
КонецЦикла;

Док1.Записать();
Док2.Записать();
fevz
Спасибо сейчас попробую.О результате сообщу))

док1 = докссылка.ПолучитьОбъект();
док2 = докссылка.Скопировать();

эти методы не работают в контексте внешней обработки
Vofka
fevz, а где в вашем коде документ, чья копия создается?

Ardi, а давно у табличных частей появился метод Выбрать() ?
fevz
Это не совсем копия, а создание нового документа:
Док = Документы.РегистрацияВходящегоНалоговогоДокумента.СоздатьДокумент();


и он заполняется данными из запроса.

Помогите....пожалуйста
Ardi
Судя по коду это совсем копия.
Vofka
fevz, вы издеваетесь или решили на ходу придумывать постановку задачи?
fevz
Цитата(Vofka @ 13.05.12, 15:37) необходимо зарегистрироваться для просмотра ссылки
fevz, вы издеваетесь или решили на ходу придумывать постановку задачи?

вся задача описана была вначале.я просто уточняю. По коду же видно все.
logist
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    НачальнаяДата = ЭтаФорма.НачПериода;
    КонечнаяДата = ЭтаФорма.КонПериода;
    Коеффициент = ЭтаФорма.Коеффициент;
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("НачальнаяДата",НачальнаяДата);    
    Запрос.УстановитьПараметр("КонечнаяДата",КонечнаяДата);
    Запрос.УстановитьПараметр("Проведен",ЭтаФорма.Проведен);
    
    Запрос.Текст = "ВЫБРАТЬ
    |    РегистрацияВходящегоНалоговогоДокумента.Ссылка
    |ИЗ
    |    Документ.РегистрацияВходящегоНалоговогоДокумента КАК РегистрацияВходящегоНалоговогоДокумента
    |ГДЕ
    |    РегистрацияВходящегоНалоговогоДокумента.Дата МЕЖДУ &НачальнаяДата И &КонечнаяДата
    |    И РегистрацияВходящегоНалоговогоДокумента.СпецРежимНалогообложения = 0
    |    И РегистрацияВходящегоНалоговогоДокумента.Проведен = &Проведен";
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        НовыйДок = Выборка.Ссылка.Скоприровать();
        
        Для Каждого Товар Из НовыйДок.Товары Цикл
            Товар.Сумма = Товар.Сумма * Коеффициент;
            Товар.СуммаНДС = Товар.СуммаНДС * Коеффициент;
            Товар.СуммаВзаиморасчетов = Товар.Суммавзаиморасчетов * Коеффициент;
        КонецЦикла;
        НовыйДок.Записать();
        
        ИсходныйДок = Выборка.Ссылка.ПолучитьОбъект();
        
        Для Каждого Товары Из ИсходныйДок.Товары
            Товар.Сумма = Товар.Сумма * Коеффициент;
            Товар.СуммаНДС = Товар.СуммаНДС * Коеффициент;
            Товар.СуммаВзаиморасчетов = Товар.Суммавзаиморасчетов * Коеффициент;
        КонецЦикла;
        ИсходныйДок.Записать();
    КонецЦикла;    
    
КонецПроцедуры
Ardi
Цитата(Vofka @ 13.05.12, 15:02) необходимо зарегистрироваться для просмотра ссылки
а давно у табличных частей появился метод Выбрать() ?

необходимо зарегистрироваться для просмотра ссылки
Обработай напильником свой анекдот:

Американцы/китайцы/японцы купили/украли у русских/наших чертежи/кальки танка/вертолёта/самолёта/ракеты. Собрали — получился паровоз/поезд/катер/комбайн/пылесос/трактор же. Разобрали, сделали всё заново, точно следуя инструкции N раз. Всё равно получился паровоз/поезд/катер/комбайн/пылесос/трактор. Далее, если купили, зовут на помощь русских/наших, если же украли/спиздили — находят сами сноску в инструкции, набранную мелким/мельчайшим/небольшим шрифтом/буквами: «Перед сборкой/после сборки/вместо сборки деталь/изделие тщательно обработать напильником».



logist
Нужно чтобы сумма1+сумма2=сумма0.
При вычислении обоих сумм через умножение может ведь погрешность возникать. Или не может?
logist
Цитата(Ardi @ 13.05.12, 15:55) необходимо зарегистрироваться для просмотра ссылки
Нужно чтобы сумма1+сумма2=сумма0.

Я думаю автор сам догадается как это сделать, там добавить и изменить три строчки/

Цитата(Ardi @ 13.05.12, 15:55) необходимо зарегистрироваться для просмотра ссылки
При вычислении обоих сумм через умножение может ведь погрешность возникать. Или не может?

Может.
fevz
logist Спасибо за ответ.Сейчас пробую.Пока выдает ошибку из-за того что не присвоена дата новому документу.Сейчас попробую присвоить дату.


 НовыйДок = Выборка.Ссылка.Скопировать();
          НовыйДок.Дата = ТекущаяДата();


можно ли так присвоить значение реквизиту дата ?
logist
Цитата(fevz @ 13.05.12, 16:14) необходимо зарегистрироваться для просмотра ссылки
можно ли

Можно.
fevz
logist, Спасибо вам большое. я немного переделал свой код используя ваш. Вроде как бы все получилось. Буду тестить.

P.S. Ставлю вам тысячный Thanks!

logist
Работает как часики))

Еще Вам небольшой вопрос. В моем первоначальном коде
 Док.СпецРежимНалогообложения = Выборка.СпецРежимНалогообложения;

Почему я не могу реквизиту присвоить просто число?
 Док.СпецРежимНалогообложения = 4;
Ardi
Цитата(fevz @ 13.05.12, 17:01) необходимо зарегистрироваться для просмотра ссылки
Почему я не могу реквизиту присвоить просто число?

Док.СпецРежимНалогообложения = 4;

Никто и не запрещает так сделать.
fevz
Цитата(Ardi @ 13.05.12, 17:09) необходимо зарегистрироваться для просмотра ссылки
Никто и не запрещает так сделать.


Когда я в коде своем так записываю у меня не выполняется вообще ничего. Это что то из за цикла мне кажется
если пишу так
 Док.СпецРежимНалогообложения = Выборка.СпецРежимНалогообложения;
Все работает
а так
 Док.СпецРежимНалогообложения = Выборка.СпецРежимНалогообложения;
- Нет.
не пойму почему
даже если так
 Док.СпецРежимНалогообложения = Выборка.СпецРежимНалогообложения+4;
не работает

ой во второй строчке должно было быть так. описка.
Док.СпецРежимНалогообложения = 4;
logist
Цитата(fevz @ 13.05.12, 17:25) необходимо зарегистрироваться для просмотра ссылки
- Нет.
не пойму почему

Станьте там отладчиком - посмотрите что у вас в Док. и Выборка. может там тип не число (почему-то), чудес не бывает.
Ardi
просто переменная Док содержит совсем не тот объект.
Stiff
Все работало,просто у меня при стоял фильтр. И эти документы просто не отображались.Спасибо всем за помощь. Тему можно закрыть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.