|   |   | 
| 
 | Обновление табличной части документа | ☑ | ||
|---|---|---|---|---|
| 0
    
        elsakovm 22.10.19✎ 10:56 | 
        Добрый день.
 Как обновить табличную часть документа в УФ? Нужно если есть эта номенклатура в запросе то передать количество, если нету то создать новую Передаю параметр НоменклатураИЗТЧ с клиента И когда обновляю на сервере Выборка = РезультатЗапроса.Выгрузить(); Для Каждого стр Из Выборка Цикл Если стр.Номенклатура <> НоменклатураИЗТЧ Тогда НоваяСтрока = Объект.Запасы.Добавить(); НоваяСтрока.Номенклатура = стр.Номенклатура; НоваяСтрока.КоличествоУвеличения = стр.КоличествоПревышенияОстаток; НоваяСтрока.ЕдиницаИзмерения = стр.ЕдИзм; Иначе Возврат стр.КоличествоПревышенияОстаток; КонецЕсли; КонецЦикла; Создаются лишние строки | |||
| 1
    
        D_E_S_131 22.10.19✎ 11:40 | 
        "Создаются лишние строки" - а почему считается, что строки лишние?     | |||
| 2
    
        Fram 22.10.19✎ 11:43 | 
        (0) отладчик в помощь     | |||
| 3
    
        elsakovm 22.10.19✎ 11:43 | 
        Потому что каждый раз когда сравнивается с результатом запроса и Номенклатура не совпадает создается новая строка     | |||
| 4
    
        JeHer 22.10.19✎ 11:45 | 
        (3) а что там в "Выборка"?     | |||
| 5
    
        elsakovm 22.10.19✎ 11:47 | 
        (4)результат запроса из регистра (этими данными я пытаюсь обновить табличную часть)     | |||
| 6
    
        hhhh 22.10.19✎ 11:48 | 
        (4) главное НоменклатураИЗТЧ. Вот тут бредятина. Если много таких НоменклатураИЗТЧ, то для каждой создаются строки.     | |||
| 7
    
        JeHer 22.10.19✎ 11:51 | 
        (6) может НоменклатураИЗТЧ не в Объект.Запасы, а в другой табличной части.     | |||
| 8
    
        elsakovm 22.10.19✎ 11:54 | 
        (6) да, но не пойму как правильно сделать     | |||
| 9
    
        elsakovm 22.10.19✎ 11:55 | 
        с клиента передаю
 НоменклатураИЗТЧ = ТекущаяСтрокаТЧ.Номенклатура; | |||
| 10
    
        JeHer 22.10.19✎ 12:01 | 
        (9) что есть в Выборке? Поясню:
 - берешь 1-ю номенклатуру из ТЧ, передаешь её в функцию - делаешь какой-то запрос, получаешь таблицу - перебираешь эту таблицу, сравниваешь с НоменклатураИЗТЧ - делаешь какие-то движения по заданному условию - например, условие стр.Номенклатура <> НоменклатураИЗТЧ - создаешь новую строку, идешь дальше по таблице - опять стр.Номенклатура <> НоменклатураИЗТЧ - создаешь новую строку, идешь дальше по таблице - берешь 2-ю номенклатуру из ТЧ, передаешь её в функцию - делаешь какой-то запрос, получаешь таблицу - перебираешь эту таблицу, сравниваешь с НоменклатураИЗТЧ - делаешь какие-то движения по заданному условию - например, условие стр.Номенклатура <> НоменклатураИЗТЧ - создаешь новую строку, идешь дальше по таблице - опять стр.Номенклатура <> НоменклатураИЗТЧ - создаешь новую строку, идешь дальше по таблице - и т.д. по все ТЧ Понятно? | |||
| 11
    
        Доминошник 22.10.19✎ 12:03 | 
        (0) Я правильно понимаю - если в выборке 5 строк, и все они не совпадают - то будет создано 5 строк в ТЧ?
 (10) Опередил :) | |||
| 12
    
        elsakovm 22.10.19✎ 12:12 | 
        (10) дак я думал что я так и делаю
 (11) а в итоге так получается | |||
| 13
    
        hhhh 22.10.19✎ 12:15 | 
        (12) в чем вопрос тогда? ну так и делал. И так получилось. Всё путем, значит?     | |||
| 14
    
        elsakovm 22.10.19✎ 12:19 | 
        (13) нет
 (10) http://skrinshoter.ru/s/221019/VcDW8PGY | |||
| 15
    
        elsakovm 22.10.19✎ 12:21 | 
        (10) видимо не понятно(. А где именно я не так делаю, вроде все так     | |||
| 16
    
        Мимохожий Однако 22.10.19✎ 12:23 | 
        (0) В отладчике НоменклатураИЗТЧ  какое значение имеет?     | |||
| 17
    
        elsakovm 22.10.19✎ 12:24 | 
        на клиенте
 Для Каждого ТекущаяСтрокаТЧ из Объект.Запасы Цикл НоменклатураИЗТЧ = ТекущаяСтрокаТЧ.Номенклатура; ТекущаяСтрокаТЧ.КоличествоУвеличения = ОбновитьКолонкуУвеличениеНаСервере(НоменклатураИЗТЧ); КонецЦикла; | |||
| 18
    
        Ёпрст гуру 22.10.19✎ 12:25 | 
        (17) короче, выкинь свой код в топку, на сервере бери всю тч целиком и пихай в свой запрос, на выходе уже будешь иметь всё сразу, а не перебирать и что-то искать для каждой строки отдельно     | |||
| 19
    
        elsakovm 22.10.19✎ 12:31 | 
        (18) можно и так но это не поменяет сути вопроса. как правильно обновить ТЧ документа, как будет выглядеть перебор строк     | |||
| 20
    
        hhhh 22.10.19✎ 12:34 | 
        (19) как-то так
 Если МассивНоменклатурИзТЧ.Найти(стр.Номенклатура) = Неопределено Тогда то есть в процедуру передаете весь массив номенклатур | |||
| 21
    
        elsakovm 22.10.19✎ 12:36 | 
        (16) там одна строчка скриншот в (14)     | |||
| 22
    
        hhhh 22.10.19✎ 12:36 | 
        (20)+ хотя, наверно лучше вообще выкинуть всё и переписать.     | |||
| 23
    
        hhhh 22.10.19✎ 12:37 | 
        (21) в итоге что получается?     | |||
| 24
    
        elsakovm 22.10.19✎ 12:38 | 
        (22) можно и переписать     | |||
| 25
    
        hhhh 22.10.19✎ 12:39 | 
        (23)+ где скрин "Создаются лишние строки" ??     | |||
| 26
    
        elsakovm 22.10.19✎ 12:44 | ||||
| 27
    
        hhhh 22.10.19✎ 13:12 | 
        (26) сначала запрос посмотреть. Отуда Выборка     | |||
| 28
    
        Мимохожий Однако 22.10.19✎ 13:31 | 
        (21) В таком случае условие стр.Номенклатура <> НоменклатураИЗТЧ будет всегда истиной. Ты сравниваешь ссылку справочника со строкой таблицы значений     | |||
| 29
    
        D_E_S_131 22.10.19✎ 13:52 | 
        (26) Что бы найти номенклатуру, которой нет в ТЧ, надо передавать не поочередно строки из ТЧ, а сразу данные из всех строк. Выгрузить в массив и в запросе получать данные, которых нет в этом массиве.     | |||
| 30
    
        elsakovm 22.10.19✎ 14:09 | 
        (27) 
 &НаСервере Функция ОбновитьКолонкуУвеличениеНаСервере(НоменклатураИЗТЧ) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаявкиНаПеремещениеОстатки.СсылкаНаДок КАК СсылкаНаДок, | ЗаявкиНаПеремещениеОстатки.ПревышенЛимит КАК ПревышенЛимит, | ЗаявкиНаПеремещениеОстатки.КоличествоПревышенияОстаток КАК КоличествоПревышенияОстаток, | ЗаявкиНаПеремещениеОстатки.ЕдИзм КАК ЕдИзм, | ЗаявкиНаПеремещениеОстатки.Номенклатура КАК Номенклатура |ИЗ | РегистрНакопления.ЗаявкиНаПеремещение.Остатки( | , | СсылкаНаДок = &Ссылка | И ПревышенЛимит = ИСТИНА) КАК ЗаявкиНаПеремещениеОстатки"; Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выгрузить(); Для Каждого стр Из Выборка Цикл Если стр.Номенклатура <> НоменклатураИЗТЧ Тогда НоваяСтрока = Объект.Запасы.Добавить(); НоваяСтрока.Номенклатура = стр.Номенклатура; НоваяСтрока.КоличествоУвеличения = стр.КоличествоПревышенияОстаток; НоваяСтрока.ЕдиницаИзмерения = стр.ЕдИзм; Иначе Возврат стр.КоличествоПревышенияОстаток; КонецЕсли; КонецЦикла; КонецФункции | |||
| 31
    
        Мимохожий Однако 22.10.19✎ 14:40 | 
        (30) Еще раз...
 Разберись с условием Если стр.Номенклатура <> НоменклатураИЗТЧ Тогда | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |