Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Обновление табличной части документа

Обновление табличной части документа
Я
   elsakovm
 
22.10.19 - 10:56
Добрый день.
Как обновить табличную часть документа в УФ?
Нужно если есть эта номенклатура в запросе то передать количество, если нету то создать новую
Передаю параметр НоменклатураИЗТЧ с клиента
И когда обновляю на сервере

    Выборка = РезультатЗапроса.Выгрузить();
        
        Для Каждого стр Из Выборка Цикл  
                                
           Если стр.Номенклатура <> НоменклатураИЗТЧ Тогда
               НоваяСтрока = Объект.Запасы.Добавить();
               НоваяСтрока.Номенклатура = стр.Номенклатура;
               НоваяСтрока.КоличествоУвеличения = стр.КоличествоПревышенияОстаток;
               НоваяСтрока.ЕдиницаИзмерения = стр.ЕдИзм;  
           Иначе
               Возврат стр.КоличествоПревышенияОстаток;
           КонецЕсли;
              
        КонецЦикла;

Создаются лишние строки
 
 
   D_E_S_131
 
1 - 22.10.19 - 11:40
"Создаются лишние строки" - а почему считается, что строки лишние?
   Fram
 
2 - 22.10.19 - 11:43
(0) отладчик в помощь
   elsakovm
 
3 - 22.10.19 - 11:43
Потому что каждый раз когда сравнивается с результатом запроса и Номенклатура не совпадает создается новая строка
   JeHer
 
4 - 22.10.19 - 11:45
(3) а что там в "Выборка"?
   elsakovm
 
5 - 22.10.19 - 11:47
(4)результат запроса из регистра (этими данными я пытаюсь обновить табличную часть)
   hhhh
 
6 - 22.10.19 - 11:48
(4) главное НоменклатураИЗТЧ. Вот тут бредятина. Если много таких НоменклатураИЗТЧ, то для каждой создаются строки.
   JeHer
 
7 - 22.10.19 - 11:51
(6) может НоменклатураИЗТЧ не в Объект.Запасы, а в другой табличной части.
   elsakovm
 
8 - 22.10.19 - 11:54
(6) да, но не пойму как правильно сделать
   elsakovm
 
9 - 22.10.19 - 11:55
с клиента передаю
НоменклатураИЗТЧ = ТекущаяСтрокаТЧ.Номенклатура;
   JeHer
 
10 - 22.10.19 - 12:01
(9) что есть в Выборке? Поясню:
- берешь 1-ю номенклатуру из ТЧ, передаешь её в функцию
- делаешь какой-то запрос, получаешь таблицу
- перебираешь эту таблицу, сравниваешь с НоменклатураИЗТЧ
   - делаешь какие-то движения по заданному условию
   - например, условие стр.Номенклатура <> НоменклатураИЗТЧ
   - создаешь новую строку, идешь дальше по таблице
   - опять стр.Номенклатура <> НоменклатураИЗТЧ
   - создаешь новую строку, идешь дальше по таблице
- берешь 2-ю номенклатуру из ТЧ, передаешь её в функцию
- делаешь какой-то запрос, получаешь таблицу
- перебираешь эту таблицу, сравниваешь с НоменклатураИЗТЧ
   - делаешь какие-то движения по заданному условию
   - например, условие стр.Номенклатура <> НоменклатураИЗТЧ
   - создаешь новую строку, идешь дальше по таблице
   - опять стр.Номенклатура <> НоменклатураИЗТЧ
   - создаешь новую строку, идешь дальше по таблице
- и т.д. по все ТЧ

Понятно?
   Доминошник
 
11 - 22.10.19 - 12:03
(0) Я правильно понимаю - если в выборке 5 строк, и все они не совпадают - то будет создано 5 строк в ТЧ?
(10) Опередил :)
   elsakovm
 
12 - 22.10.19 - 12:12
(10) дак я думал что я так и делаю
(11) а в итоге так получается
   hhhh
 
13 - 22.10.19 - 12:15
(12) в чем вопрос тогда? ну так и делал. И так получилось. Всё путем, значит?
   elsakovm
 
14 - 22.10.19 - 12:19
   elsakovm
 
15 - 22.10.19 - 12:21
(10) видимо не понятно(. А где именно я не так делаю, вроде все так
   МимохожийОднако
 
16 - 22.10.19 - 12:23
(0) В отладчике НоменклатураИЗТЧ  какое значение имеет?
   elsakovm
 
17 - 22.10.19 - 12:24
на клиенте

Для Каждого ТекущаяСтрокаТЧ из Объект.Запасы Цикл
            НоменклатураИЗТЧ = ТекущаяСтрокаТЧ.Номенклатура;
            ТекущаяСтрокаТЧ.КоличествоУвеличения = ОбновитьКолонкуУвеличениеНаСервере(НоменклатураИЗТЧ);
        КонецЦикла;
   Ёпрст
 
18 - 22.10.19 - 12:25
(17) короче, выкинь свой код в топку, на сервере бери всю тч целиком и пихай в свой запрос, на выходе уже будешь иметь всё сразу, а не перебирать и что-то искать для каждой строки отдельно
   elsakovm
 
19 - 22.10.19 - 12:31
(18) можно и так но это не поменяет сути вопроса. как правильно обновить ТЧ документа, как будет выглядеть перебор строк
   hhhh
 
20 - 22.10.19 - 12:34
(19) как-то так
          Если МассивНоменклатурИзТЧ.Найти(стр.Номенклатура) = Неопределено Тогда 

то есть в процедуру передаете весь массив номенклатур
   elsakovm
 
21 - 22.10.19 - 12:36
(16) там одна строчка скриншот в (14)
   hhhh
 
22 - 22.10.19 - 12:36
(20)+ хотя, наверно лучше вообще выкинуть всё и переписать.
   hhhh
 
23 - 22.10.19 - 12:37
(21) в итоге что получается?
   elsakovm
 
24 - 22.10.19 - 12:38
(22) можно и переписать
   hhhh
 
25 - 22.10.19 - 12:39
(23)+ где скрин "Создаются лишние строки" ??
   elsakovm
 
26 - 22.10.19 - 12:44
   hhhh
 
27 - 22.10.19 - 13:12
(26) сначала запрос посмотреть. Отуда Выборка
   МимохожийОднако
 
28 - 22.10.19 - 13:31
(21) В таком случае условие стр.Номенклатура <> НоменклатураИЗТЧ будет всегда истиной. Ты сравниваешь ссылку справочника со строкой таблицы значений
   D_E_S_131
 
29 - 22.10.19 - 13:52
(26) Что бы найти номенклатуру, которой нет в ТЧ, надо передавать не поочередно строки из ТЧ, а сразу данные из всех строк. Выгрузить в массив и в запросе получать данные, которых нет в этом массиве.
   elsakovm
 
30 - 22.10.19 - 14:09
(27)

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

        Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);
        
        РезультатЗапроса = Запрос.Выполнить();         
        Выборка = РезультатЗапроса.Выгрузить();
        
        Для Каждого стр Из Выборка Цикл  
            
           Если стр.Номенклатура <> НоменклатураИЗТЧ Тогда
               НоваяСтрока = Объект.Запасы.Добавить();
               НоваяСтрока.Номенклатура = стр.Номенклатура;
               НоваяСтрока.КоличествоУвеличения = стр.КоличествоПревышенияОстаток;
               НоваяСтрока.ЕдиницаИзмерения = стр.ЕдИзм;  
           Иначе
               Возврат стр.КоличествоПревышенияОстаток;
           КонецЕсли;
              
        КонецЦикла;
    
КонецФункции
 
 Рекламное место пустует
   МимохожийОднако
 
31 - 22.10.19 - 14:40
(30) Еще раз...
Разберись с условием Если стр.Номенклатура <> НоменклатураИЗТЧ Тогда


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.