Заполнение табличной части не стирая старые данные

1. user1803583 26.10.22 12:02 Сейчас в теме
В реализации есть кнопка Заполнить, он заполняет табличную часть Товары в зависимости от Номера кроя и Планового номера(список значений).
Как сделать так что бы при добавление ещё 1-2 Плановых номеров, он не очищал табличную часть, а добавлял сверху?

Щас он очищает табличную часть и добавляет заново, стирая отредактировнные данные типа Количества,

ПРИМЕР; при первом заполнеии с плановым номером 1, количество вышло 16, но подумали что надо ещё добавить и вручную изменили количество на 25
И скажем через неделю решили ещё добавить плановые номера 2 и 3, код дожен добавить снизу ещё не стирая эти 25

(Новичек в 1с, нужна помощь)


&НаСервере
Процедура ЗаполнитьПродукциюНаСервере()



Объект.Товары.Очистить();

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

Запрос.УстановитьПараметр("МаасивНомерКроя", МассивНомерКроя);
Запрос.УстановитьПараметр("МаасивПлановыйНомер", МассивПлановыйНомер);
Запрос.УстановитьПараметр("Организация", Объект.Организация);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
МетаданныеДокумента = Объект.Ссылка.Метаданные();

Пока Выборка.Следующий() Цикл
НовСтрока = Объект.Товары.Добавить();
НовСтрока.Номенклатура = Выборка.Номенклатура;
НовСтрока.НомерКроя = Выборка.НомерКроя;
НовСтрока.ЕдиницаИзмерения = Выборка.ЕдИзм;
НовСтрока.ПлановыйНомер = Выборка.ПлановыйНомер;

НовСтрока.Характеристика = Выборка.Характеристика;
НовСтрока.УчетПоХарактеристикам = Выборка.УчетПоХарактеристикам;
НовСтрока.Количество = Выборка.Количество;
ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(НовСтрока, Объект, "Товары", МетаданныеДокумента);

Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(Объект, НовСтрока, "Товары");

КонецЦикла;

КонецПроцедуры
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. VictorRGB2 13 26.10.22 12:08 Сейчас в теме
(1)
Объект.Товары.Очистить();


самое простое - комментим эту строку и очищения не будет
ну и я бы дальше посмотрел на результат, что получится в итоге
возможно надо будет как-то свернуть данные или может пересчитать весь документ заново
5. user1803583 26.10.22 12:12 Сейчас в теме
(3) тогда Заполниться
Плановый номер 1 (отредактированный)
Плановый номер 1 (заново)
Плановый номер 2
Плановый номер 3

и будет уже ка четрые плановый номера
8. Vlan 36 26.10.22 12:13 Сейчас в теме
(5) Все зависит от того, что у Вас в массиве плановых номеров. Если там все номера, то таблица и должна очищаться, если только новые, то без очистки они добавятся.
9. VictorRGB2 13 26.10.22 12:14 Сейчас в теме
(5) ИМХО, опять по самому простому пути
перед НовСтрока = Объект.Товары.Добавить(); сделать проверку, что Объект.Товары.ПлановыйНомер <> Выборка.ПлановыйНомер
20. user1803583 26.10.22 14:54 Сейчас в теме
(17) Попробовал вот так сделать, в чем может быть проблема?



(9) {Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(2246,31)}: Неопознанный оператор
Объект.Товары.ПлановыйНомер <<?>><> Выборка.ПлановыйНомер (Проверка: Тонкий клиент)
21. user1831019 26.10.22 15:03 Сейчас в теме
23. VictorRGB2 13 26.10.22 15:41 Сейчас в теме
(20) Документ.РеализацияТоваровУслуг.Форма - это клиент
Объект.Товары - это сервер
на клиенте нельзя с сервером работать

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

в (22) уже даже показали, как правильно сделается для одного из вариантов, изучайте
24. user1831019 26.10.22 15:47 Сейчас в теме
(23)
Объект.Товары - это сервер
Чо? А если Объект - это основной реквизит формы объекта? С ним можно работать на клиенте? (подсказка: он может иметь тип ДанныеФормы).
25. VictorRGB2 13 26.10.22 15:55 Сейчас в теме
(24) это уже философия и размышления про условности ))
в контексте данного обращения по приведенному примеру процедуры
&НаСервере
Процедура ЗаполнитьПродукциюНаСервере(),
очевидно, что Объект это Документ.Ссылка, а он доступен только на сервере или на толстом клиенте
потому автору тонкий клиент и выбивает ошибку

человек. похоже, только учится
поэтому не забивая ему голову, для простоты понимания и указал на разницу между сервером и клиентом
26. user1831019 26.10.22 16:01 Сейчас в теме
(25) Как раз наоборот: наименование переменной и реквизита - это еще не обозначение его типа!
очевидно, что Объект это Документ.Ссылка, а он доступен только на сервере или на толстом клиенте

Вот о чем я и говорю.
1. С чего ты взял, что переменная Объект имеет тип "ДокументСылка"?
2. С чего ты взял, что тип "ДокументСсылка" доступен только на сервере или в толстом клиенте?

человек. похоже, только учится
Чего и тебе желаю.
27. user5300 1014 26.10.22 16:33 Сейчас в теме
(26)
1. С чего ты взял, что переменная Объект имеет тип "ДокументСылка"?

С того что в модуль "Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(Объект, НовСтрока, "Товары")" передается тип "ДокументСылка" а не тип "Объект". Модуль, кстати, доступен только на сервере.

(26)
2. С чего ты взял, что тип "ДокументСсылка" доступен только на сервере или в толстом клиенте?

С того что получить Объект из ДокументСсылка можно только на сервере.


Есть сомнения ? - Открой конфигурацию и проверяй.
(26)
Чего и тебе желаю.
Себе уже пожелал ?
29. user1831019 26.10.22 16:50 Сейчас в теме
(27) Я ваще не с тобой разговариваю! И даже не про твой говнокод. Проходи дальше.
30. user5300 1014 26.10.22 17:00 Сейчас в теме
(29) Я с тобой разговариваю. Пиши по делу, нечего других критиковать.
"Говнокод" - есть хоть с чем сравнивать ?
32. user1831019 26.10.22 17:15 Сейчас в теме
(30)
"Говнокод" - есть хоть с чем сравнивать ?
Зачем я буду сравнивать говнокод с чем то другим?
28. VictorRGB2 13 26.10.22 16:35 Сейчас в теме
(26) 1. предположил по приведенному коду процедуры по выданной ошибке
возможно не прав в предположении, опровергни
2. Тип: ДокументСсылка.<Имя документа>
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер)

взял из СП

учиться никогда не поздно, всегда готов к новым знаниям и к тому, что мне покажут в чем я заблуждаюсь
убедительно доказанная правота суждения всегда принимается
в споре достигается истина
31. user1831019 26.10.22 17:12 Сейчас в теме
(28) 1. Я может не заметил текста ошибки? Где он?
2. См. картинку 1
3. В споре не достигается истина. В споре рождается только конфликт. А истина достигается в равносторонней дискуссии.
Прикрепленные файлы:
33. VictorRGB2 13 26.10.22 17:37 Сейчас в теме
(31) 1. в (20) текст ошибки у автора
2. в СП есть и такое, см. картинку
3. согласен в СП есть и как и на твоей, т.ч. все зависит от места применения

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

допускаю, что формулировка не совсем доходчива
буду только рад, если подскажешь верную, применимо к вопросу темы
Прикрепленные файлы:
34. user1831019 26.10.22 17:43 Сейчас в теме
(33) 1. Я тут за ним бегать не готов.
2. В каком разделе СП? Наверняка в каком-то описании регистраторов регистра...
3. Так вот сначала надо разобраться с автором о месте применения, прежде чем давать хреновые советы и бравировать какими-то СП.

Автору не интересен наш с тобой спор, поэтому оставим пустое.
Пусть сам дальше долбится в новые ворота.
2. Vlan 36 26.10.22 12:07 Сейчас в теме
Навскидку - закомментировать Объект.Товары.Очистить();
Последствия на вашей совести.
4. user1803583 26.10.22 12:09 Сейчас в теме
(2)
тогда Плановый номер 1 ещё раз полниться снизу, а мне нужно что бы он заполнил Плановй номер 2 и 3 не стирая Отредактированный Плановый номер 1
6. VictorRGB2 13 26.10.22 12:13 Сейчас в теме
(4) тогда правьте запрос и передавайте в него только те параметры "Плановый", что отсутствуют в документе
или при добавлении строк ТЧ проверяйте "Плановый" на наличие и пропускайте
7. user1803583 26.10.22 12:13 Сейчас в теме
(6) а как это в коде делается?
10. VictorRGB2 13 26.10.22 12:20 Сейчас в теме
(7) как-то так
Если Объект.Товары.Найти(Выборка.ПлановыйНомер, "ПлановыйНомер") = Неопределено Тогда - строки с Выборка.ПлановыйНомер нет

но я бы через установку параметров запроса попробовал
у вас там передается МассивНомерКроя и МассивПлановыйНомер, вот в них бы и исключил уже существующие в ТЧ данные, чтобы запрос сразу получал только новые
при условии, что ТЧ документа заполнена, разумеется
11. user1803583 26.10.22 12:21 Сейчас в теме
(10) а как это в запросе делается?
14. VictorRGB2 13 26.10.22 12:25 Сейчас в теме
(11) что именно в запросе делается?
предлагается два варианта
1. перед добавлением новой строки проверить, что такой ПлановыйНомер уже есть в ТЧ
2. в параметрах запроса МассивНомерКроя и МассивПлановыйНомер убрать используемые ПлановыйНомер документа

какой вариант выбрать, решать вам

тут вот ниже еще предлагают дополнить запрос условием НЕ ПлановыйНомер в массиве, тоже реальное решение

выбирайте )
16. user1803583 26.10.22 12:47 Сейчас в теме
(14) НЕ ПлановыйНомер в массиве
а как это условие поставить?
17. VictorRGB2 13 26.10.22 13:06 Сейчас в теме
(16) И НЕ СопроводительнаяНакладнаяОсновная.Ссылка.ПлановыйНомер В(&МасивПлановыеНомераТекущегоДокумента)
18. user1803583 26.10.22 13:12 Сейчас в теме
19. VictorRGB2 13 26.10.22 13:36 Сейчас в теме
(18) что именно не понятно?
12. lmnlmn 69 26.10.22 12:21 Сейчас в теме
(7) Есть у вас в запросе вот такая штука:
| И СопроводительнаяНакладнаяОсновная.Ссылка.НомерКроя В(&МаасивНомерКроя)

Можно взять плановые номера из вашей табличной части, затолкать в массив и таким же макаром передать в запрос только "НЕ" добавить к условию отбора. Так вы исключите уже существующие плановые номера из выборки.

P.S. О, а у вас уже и параметр подготовлен
Запрос.УстановитьПараметр("МаасивПлановыйНомер", МассивПлановыйНомер);

Только в запросе нигде не используется.
15. user1803583 26.10.22 12:39 Сейчас в теме
(12) вот так?



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

Запрос.УстановитьПараметр("МаасивНомерКроя", МассивНомерКроя);
Запрос.УстановитьПараметр("МаасивПлановыйНомер", МассивПлановыйНомер);
Запрос.УстановитьПараметр("Организация", Объект.Организация);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
МетаданныеДокумента = Объект.Ссылка.Метаданные();

Пока Выборка.Следующий() Цикл
НовСтрока = Объект.Товары.Добавить();
НовСтрока.Номенклатура = Выборка.Номенклатура;
НовСтрока.НомерКроя = Выборка.НомерКроя;
НовСтрока.ЕдиницаИзмерения = Выборка.ЕдИзм;
НовСтрока.ПлановыйНомер = Выборка.ПлановыйНомер;

НовСтрока.Характеристика = Выборка.Характеристика;
НовСтрока.УчетПоХарактеристикам = Выборка.УчетПоХарактеристикам;
НовСтрока.Количество = Выборка.Количество;
ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(НовСтрока, Объект, "Товары", МетаданныеДокумента);

Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(Объект, НовСтрока, "Товары");

КонецЦикла;
22. user5300 1014 26.10.22 15:21 Сейчас в теме
(15)
&НаСервере
Процедура ЗаполнитьПродукциюНаСервере()

	//Объект.Товары.Очистить();   //комментируем

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

	Запрос.УстановитьПараметр("МаасивНомерКроя", МассивНомерКроя);
	Запрос.УстановитьПараметр("МаасивПлановыйНомер", МассивПлановыйНомер);
	Запрос.УстановитьПараметр("Организация", Объект.Организация);

	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	МетаданныеДокумента = Объект.Ссылка.Метаданные();

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

		НовСтрока.Характеристика = Выборка.Характеристика;
		НовСтрока.УчетПоХарактеристикам = Выборка.УчетПоХарактеристикам;
		НовСтрока.Количество = Выборка.Количество;
		ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(НовСтрока, Объект, "Товары", МетаданныеДокумента);

		Документы.РеализацияТоваровУслуг.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(Объект, НовСтрока, "Товары");

	КонецЦикла;

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

Показать
13. Vlan 36 26.10.22 12:22 Сейчас в теме
(7) Сделать можно по-разному. Я бы перед запросом массив проверил и оставил только нужные. Люди вон предлагают после запроса перед созданием строки проверить.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот