Имя: Пароль:
1C
 
Обработка для корректировки копейки
,
0 mila1231
 
20.07.17
07:58
День добрый
Есть ут 11,2,300, В заказе клиента необходимо корректировать копейку, вправо влево.
Для начала делаю так т.е обработкой вытаскиваю данные из табличного поля нужного документа

&НаКлиенте
Процедура Заполнить()
    Заполнить2();
    Сообщить ("Заполнено");
КонецПроцедуры

&НаСервере

Процедура Заполнить2()
    ДокОбъект = РеквизитФормыВЗначение("Объект");
    Запрос = Новый Запрос;
    Запрос.Текст =         Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗаказКлиентаТовары.Номенклатура,
        |    ЗаказКлиентаТовары.Сумма,
        |    ЗаказКлиентаТовары.СтавкаНДС,
        |    ЗаказКлиентаТовары.СуммаНДС,
        |    ЗаказКлиентаТовары.СуммаСНДС,
        |    ЗаказКлиентаТовары.Ссылка.Ссылка
        |ИЗ
        |    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
        |ГДЕ
        |    ЗаказКлиентаТовары.Ссылка = &ссылка";
    
    Запрос.УстановитьПараметр("ссылка", Объект.Документ);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Строка = Объект.Товары.Добавить();
        Строка.Номенклатура = выборка.Номенклатура;
        Строка.Сумма = выборка.Сумма;
        Строка.СуммаНДС = выборка.СуммаНДС;
        Строка.СуммаСНДС = выборка.СуммаСНДС;

    КонецЦикла;
    
    

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

Получаю табличную часть Товары
А дальше нужна помощь, как записать уже изменённые данный в документ?
ЗЫ заранее спс, пыталась изложить кратко и понятно.
1 1dvd
 
20.07.17
08:12
путаешься. То Объект, то ДокОбъект...

в конце напиши ДокОбъект.Записать(
2 Рэйв
 
20.07.17
08:39
(0)зачем тебе РеквизитФормыВЗначение?
Работай сразу напрямую с Объект.
3 Рэйв
 
20.07.17
08:39
у тебя же на сервере с контекстом
4 mila1231
 
20.07.17
09:43
Согласна, путаюсь..... закомментирована должна была быть строка, вернее её быть не должно(.(ДокОбъект = РеквизитФормыВЗначение("Объект");)
Документ-это реквизит обработки...т.е я выбираю нужный мне документ и запросом считываю нужные позиции.
Считать считала, т.е получила те строки, что мне нужны.
Дальше я хочу эти же строки записать в тот документ который выбрала. Т.е по сути я создаю ещё одно событие(Кнопку) и там уже должна обратиться как к объекту к этому документу так?
5 1dvd
 
20.07.17
09:56
(4) а почему бы сразу не записывать в документ?
6 mila1231
 
20.07.17
10:03
сначала нужно считать те данные которые заполнены, чтоб потом изменить только или сумму, или суммусНДС, а потом уже записать.
7 h-sp
 
20.07.17
10:17
(6) надо наверно

ДокОбъект = Объект.Документ.ПолучитьОбъект();

потом изменяете что-то
и

ДокОбъект.Записать();


а Объект - это обработка. Это не заказ клиента.
8 mila1231
 
20.07.17
10:36
(7) мне же получается нужно обратиться к табличной части нужного мне документа, а документОбъект-это же по сути является просто ссылка , нет не так?
9 mila1231
 
20.07.17
10:45
До этого вроде дошла...
счас ругается на то, что не понимает строку с суммой, которая в обработке...товары.сумма;
ДокОбъект = Объект.НужныйДокумент.ПолучитьОбъект();

Для каждого стр из  ДокОбъект.Товары цикл
стр.Сумма = товары.сумма;
//сообщить(стр.Сумма);

конецЦикла;
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
10 1dvd
 
20.07.17
10:46
(9) я бы то ругнулся, но с матами
11 mila1231
 
20.07.17
10:47
(10) Вообще я думала Объект.Товары.Сумма, но всё равно не верно, поэтому вопрос как, ругайте.... правда, можно, ну и нужно... но как надо то?
12 mila1231
 
20.07.17
11:04
Частично сообразила
вторый цикл нужен...
т.е получается на данный момент так, но с ошибкой

ДокОбъект = Объект.НужныйДокумент.ПолучитьОбъект();
Для каждого стр из  ДокОбъект.Товары цикл
       Индекс=0;
    Для Каждого ТекущаяСтрока из Объект.Товары Цикл
        Индекс=Индекс+1 ;
        ТекущаяСтрока.Колонка[Индекс];
        стр.сумма = ТекущаяСтрока[Колонка.Сумма];
//сообщить(стр.Сумма);
конецЦикла;
конецЦикла;
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
13 mila1231
 
20.07.17
11:05
ошибка вот в этой строке ТекущаяСтрока.Колонка[Индекс];
14 h-sp
 
20.07.17
11:07
Для Каждого ТекущаяСтрока из Объект.Товары Цикл
        стр.сумма = ТекущаяСтрока.Сумма;
15 catena
 
20.07.17
11:14
Вот попа-то будет, если порядок строк поменяют.
16 mila1231
 
20.07.17
11:17
(14)
если так сделать, тогда всем строкам присваивается значение последней строки
т.е
            сумма1
строка 1    2
строка 2    3

при записи и первая и вторая строки принимают значение 3.
17 catena
 
20.07.17
11:22
(16)Ну очевидно же, что нужно условие на соответствие строк. Ключ связи какой-нибудь. Либо  брать всю тч и загружать потом так же во всю тч.
18 mila1231
 
20.07.17
11:26
(17) Спасибо по условию сообразила...работает
а если не сложно, грубо если всю табличную часть загружать это как?
19 mila1231
 
20.07.17
11:26
(15) и заодно про порядок строк, в чём попа.. кто поменяет?
20 catena
 
20.07.17
11:33
(18)Табличная часть (Tabular section)
Загрузить (Load)
Синтаксис:

Загрузить(<Таблица>)

(19)Если связка надежная, то ни в чем.
21 mila1231
 
21.07.17
06:05
Еще один вопрос, немогу понять причину, обработка работает только от первого пользователя, т.е если я сижу в тестовой базе одна, то обработка работает, захожу в реальную базу, где несколько человек, обработка не работает, в чём соль?
22 1dvd
 
21.07.17
06:10
(21) не работает - понятие растяжимое
23 mila1231
 
21.07.17
06:12
(22) не меняет значение, если надо могу код приложить, того как счас, но он не слишком изменился из того, что было.
24 mila1231
 
21.07.17
07:41
(23) вопрос снят, не знаю насколько в этом деле, обработка, которую подгружала находилась у меня на рабочем столе, засунула в папку с базой всё работает.Всем спасибо!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший