Выбор номенклатуры при вводе на основании

1. Вожак 20.08.14 16:01 Сейчас в теме
Есть документ счет на оплату, на его основании вводится документ заказ, так вот заказ может формироваться только по 1 позиции. То есть если в счете на оплату 2 или 3 или 10 позиций, то нужно спрашивать у пользователя, какую именно строку переносить в заказ, как так сделать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Вожак 20.08.14 16:01 Сейчас в теме
Если ДанныеЗаполнения.Товары.Количество() > 0 Тогда
			
			
			
		Иначе
			
			Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
				
				НоваяСтрока = Товары.Добавить();
				
				НоваяСтрока.ЕдиницаИзмерения 	= ТекСтрокаТовары.ЕдиницаИзмерения;
				НоваяСтрока.Количество 				= ТекСтрокаТовары.Количество;
				НоваяСтрока.Номенклатура 			= ТекСтрокаТовары.Номенклатура;
				НоваяСтрока.СтавкаНДС 				= ТекСтрокаТовары.СтавкаНДС;
				НоваяСтрока.Сумма 					= ТекСтрокаТовары.Сумма;
				НоваяСтрока.СуммаНДС 				= ТекСтрокаТовары.СуммаНДС;
				НоваяСтрока.СуммаСНДС 				= ТекСтрокаТовары.СуммаСНДС;
				НоваяСтрока.Цена 						= ТекСтрокаТовары.Цена;
				НоваяСтрока.ВидЦены                 	= ТекСтрокаТовары.ВидЦены;
				
			КонецЦикла;
		КонецЕсли;
Показать
3. spezc 782 20.08.14 16:11 Сейчас в теме
Прописать собственную Кнопку "Создать на основании" и в ее процедуре задавать вопрос. По ответу - заполнять документ и открывать
doom2good; +1 Ответить
4. Вожак 20.08.14 16:12 Сейчас в теме
(3) spezc, почему в обработке заполнения самого заказа нельзя условие поставить7
8. Boneman 298 20.08.14 16:15 Сейчас в теме
(4) Вожак, потому-что в модуле объекта, на сервере выполняется.
Там интерактивно не получится с пользователем разговаривать.
5. spezc 782 20.08.14 16:14 Сейчас в теме
Для обычной формы прокатит. Для управляемой нет.
7. Вожак 20.08.14 16:15 Сейчас в теме
(5) spezc, у меня управляемая
12. Prikum 3 20.08.14 16:18 Сейчас в теме
(7) Вожак, сделать в документе Счет на оплату кнопку, которая будет обрабатывать текущую строку.
6. Boneman 298 20.08.14 16:14 Сейчас в теме
либо переносить все строки, а потом уже при открытии спрашивать юзера, какую строку оставить.
9. Вожак 20.08.14 16:16 Сейчас в теме
И как мне в таком случае переносить только 1 строку из множества?
10. Boneman 298 20.08.14 16:17 Сейчас в теме
(9) Вожак, тебе же уже ответили как это делать!
11. Вожак 20.08.14 16:18 Сейчас в теме
(10) Boneman, овтетили, а потом сказали что в управляемой так делать нельзя
14. Boneman 298 20.08.14 16:19 Сейчас в теме
(11) Вожак, это ответ был на твой вопрос, "почему условие нельзя в обработке заполнения поставить".
15. spezc 782 20.08.14 16:25 Сейчас в теме
(11) Вожак, я ответил как делать. А по поводу нельзя - это был ответ на твой вопрос в (4)
13. Вожак 20.08.14 16:19 Сейчас в теме
я не совсем понимаю, что в этой команде ввода на основании указывать
17. Boneman 298 20.08.14 16:26 Сейчас в теме
(13) Вожак, вот и пришло время разобраться, как программно создать, заполнить и открыть новый документ )))
16. Вожак 20.08.14 16:26 Сейчас в теме
получается я создаю команду, которая будет создавать из счета на оплату заказ, так?
18. spezc 782 20.08.14 16:27 Сейчас в теме
19. Вожак 20.08.14 16:28 Сейчас в теме
я решил в команде документа счет на оплату запросом вытащить все нужные мне поля, и потом их открывать в новом документе, примерно так?)
20. spezc 782 20.08.14 16:29 Сейчас в теме
21. Вожак 20.08.14 16:29 Сейчас в теме
щас я вам выложу код) будет обжигающе0
22. Вожак 20.08.14 16:35 Сейчас в теме
У меня встал вопрос, как мне все это дело лучше скомпановать? в массим или таблицу?,
&НаСервере
Функция ПолучениеДанныхСчетаДляВводаЗаказа(Знач СсылкаНаДок)

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

	Результат = Запрос.Выполнить();

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

		
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		// Вставить обработку выборки ВыборкаДетальныеЗаписи
	КонецЦикла;


	

КонецФункции // ОбработкаЗаполнения()
Показать
24. Boneman 298 20.08.14 16:40 Сейчас в теме
(22) Вожак,
У меня встал вопрос, как мне все это дело лучше скомпановать? в массим или таблицу?,

смотря что ты собрался дальше делать, для чего, и какими методами.
Ты же табличную часть вытащил запросом, - какой нафик массив.
26. Вожак 20.08.14 16:42 Сейчас в теме
(24) Boneman, я хочу в этой функции создать новый документ с заполнеными реквизитами ТЧ и реквизитами шапки, а так же спрашивать по какой строке заполнять этот документ, точнее его ТЧ
28. Boneman 298 20.08.14 16:48 Сейчас в теме
(26) Вожак,
разбей задачу на части,
1. Интерактивно тебе надо спросить пользователя и дать возможность выбрать нужную строку.
2. Программно создать новый докумен, заполнить его, и вставить ему нужную строку.

Т.е., как видится мне.
Тебе необходимо сделать еще одну форму выбора, с табличной частью и галочками.
Передать в нее всю табличную часть из исходного документа,
после того как пользователь отметил все там,
и создаем новый документ, заполняем и открываем его.
29. Вожак 20.08.14 16:50 Сейчас в теме
(28) Boneman, я уже подумываю, может просто засунуть флажок в мою текущую ТЧ, и там где будут стоять галочки дальше и вводить на основании?
35. Boneman 298 20.08.14 16:55 Сейчас в теме
(29) Вожак, ну кстати, да. Это самый простой вариант, изначально поставить признак нужной строки.
А ввод на основании заполнит только ту строку у которой стоит этот признак.
Или вообще пусть берет только первую строку.
36. Вожак 20.08.14 16:56 Сейчас в теме
(35) Boneman, на основании этого счета потом могут захотеть сделать заказ по 2й строке, и тут уже первая строка будет не в кайф(
23. Вожак 20.08.14 16:40 Сейчас в теме
Хотя так наверное будет лучше?
&НаСервере
Функция ПолучениеДанныхСчетаДляВводаЗаказа(Знач СсылкаНаДок)

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

	Результат = Запрос.Выполнить();

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

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


	

КонецФункции // ОбработкаЗаполнения()
Показать
25. Вожак 20.08.14 16:41 Сейчас в теме
и в этой же функции мы создаем новый документ так?
27. Вожак 20.08.14 16:44 Сейчас в теме
Потому что документ создается на сервере, а спрашивать нужно на клиенте, но мы не можем создать документ пока не спросим у клиента, какой то замкнутый запутанный круг
31. Boneman 298 20.08.14 16:51 Сейчас в теме
(27) Вожак, так распутай круг.
Передавать надо все умело, параметрами с клиента на сервер ))
и кстати, столкнешься со многими трудностями,
начиная от того как открыть и заполнить управляемую форму,
и кончая тем что далеко не любой тип значений можно перегнать параметрами с клиента на сервер ))
написать запрос, - это самое простое
32. Вожак 20.08.14 16:53 Сейчас в теме
(31) Boneman, то есть как я делал выше? ужас, я запутсял в этом дебильном управляемом приложении
30. Вожак 20.08.14 16:50 Сейчас в теме
как сделать чтобы всегда был 1 флажок? то есть если выбирают второй, то первый снимается? циклом не получается(
33. Boneman 298 20.08.14 16:53 Сейчас в теме
(30) Вожак, отлавливай событие изменения флажка, и зануляй все другие.
34. Вожак 20.08.14 16:54 Сейчас в теме
(33) Boneman,
&НаКлиенте
Процедура ТоварыФлажокПриИзменении(Элемент)
	
		
	Для каждого строка Из объект.товары Цикл
		Если строка[0].флажок Тогда
		 Строка[1].Флажок = ложь;
			
		 КонецЕсли;
		КонецЦикла; 
	
	 
	КонецПроцедуры
Показать


ошибка валится
37. Boneman 298 20.08.14 16:57 Сейчас в теме
(34) Вожак, а зачем ты в уже выбранной строке, ставишь еще номер строки ?
я бы тоже с ошибкой отвалился ))) и переменную "строка" не надо использовать в качестве переменной, т.к. программа ее может спутать с функцией Строка
38. Вожак 20.08.14 16:57 Сейчас в теме
такой вариант не дает поставить флажок вообще(
&НаКлиенте
Процедура ТоварыФлажокПриИзменении(Элемент)
	
		
	Для каждого строка Из объект.товары Цикл
		Если строка.флажок Тогда
		 Строка.Флажок = ложь;
			
		 КонецЕсли;
		КонецЦикла; 
	
	 
	КонецПроцедуры
Показать
40. Boneman 298 20.08.14 17:00 Сейчас в теме
(38) Вожак, ты вот код свой вообще читаешь ?
Смотри,
берем строку, - если флаг стоит - то сбрасываешь его.

в итоге, ты гарантированно получишь сброшенные флажки в любом случае
41. Вожак 20.08.14 17:02 Сейчас в теме
(40) Boneman, как мне его сохроанить и сбросить другие?
39. Вожак 20.08.14 16:58 Сейчас в теме
запутался, как отслеживать если хоть 1 галочка есть, то другие обнуляются?
43. Boneman 298 20.08.14 17:03 Сейчас в теме
(39) Вожак, во первых у тебя есть переменная "элемент".
Во вторых, есть текущая строка табличной части.
У каждой строки, как минимум есть номер.
Вот и определи, где стоит курсор, и если галку там поставил, то эту строку не трогай.
Поставь точку останова, и исследуй тщательно, все переменные, что в них.
44. Вожак 20.08.14 17:25 Сейчас в теме
(43) Boneman, ЭтаФорма.Элементы.Товары.ТекущиеДанные.Флажок - вот в этой строке я получаю текущие данные строки, а номер я потом как обнулять буду? ппц(
47. Boneman 298 20.08.14 17:33 Сейчас в теме
(44) Вожак, тебе нафига его обнулять то ?
ты просто поставь условие, и при обходе коллекции, когда флажки зануляешь, строку с этим номером просто не трогай, т.к. это и есть строка которую юзает пользователь.

З.Ы, Задача то простая, надо просто потыкать отладчиком, потому что так вслепую, некомильфо советы давать, можно и в заблуждение ввести.
48. Вожак 20.08.14 17:34 Сейчас в теме
(47) Boneman, вот я и спрашиваю как мне не зануять строку с галочкой?)
45. Вожак 20.08.14 17:29 Сейчас в теме
(43) Boneman, ТекущийФлажок = ЭтаФорма.Элементы.Товары.ТекущиеДанные.Флажок;
вот так я получил флажок с текущей строкой, как мне не трогать эту строку теперь?
42. Вожак 20.08.14 17:02 Сейчас в теме
в табличной части не понятно как так сделать, с элементами формы было бы проще(
46. Вожак 20.08.14 17:30 Сейчас в теме
Нет же метода для каждой строки кроме, например
50. Boneman 298 20.08.14 17:37 Сейчас в теме
(46) Вожак,
ну что ты как меленький.
На пальцах.
Стоит курсор на 3-ей строке.


далее,
для каждого текстрока из коллекциястрок цикл

если номер текстроки <> номерстроки курсора тогда

зануляем флажок;

КонецЕсли;

конеццикла;

Я просто не хочу вдумываться в точный текст кода, говорю просто о примерном методе.
51. Вожак 20.08.14 17:46 Сейчас в теме
(50) Boneman,
ТекущийФлажок = ЭтаФорма.Элементы.Товары.ТекущиеДанные.Флажок;
	
	
	Для каждого ТекСтрока Из объект.товары Цикл
		
		Если ЭтаФорма.Элементы.Товары.ТекущаяСтрока <> ЭтаФорма.Элементы.Товары.ТекущиеДанные.НомерСтроки  Тогда
		
			ТекСтрока.Флажок = ложь;
		
		КонецЕсли; 
		
			
		КонецЦикла; 
Показать

ЭтаФорма.Элементы.Товары.ТекущаяСтрока тут выпадает 0, и в итоге даже галочку не поставить
53. Boneman 298 20.08.14 17:48 Сейчас в теме
(51) Вожак, отладчиком то пользуешься ?
что с чем сравниваешь ? Дается мне, что ты далеко не номера строк сравниваешь.
Ставь точку останова, и смотри переменные.
54. Вожак 20.08.14 17:50 Сейчас в теме
(53) Boneman, ну вот первое я номер строки смотрю, а второе номер строки в таблице
55. Boneman 298 20.08.14 17:56 Сейчас в теме
(54) Вожак, посмотрел бегло отладчиком, похожую форму.
ТекущаяСтрока - нумеруется с "0" ой строки,
А номер строки в ТЧ, - идут с 1ой.
В итоге, тебе необходимо сравнивать с учетом этого.

Отладчик-отладчик и еще раз отладчик. Ну ведь это же так просто.!
56. Вожак 20.08.14 17:58 Сейчас в теме
(55) Boneman, к текущей строки сразу + 1 писать просто думаю?
57. Boneman 298 20.08.14 17:59 Сейчас в теме
58. Вожак 20.08.14 18:00 Сейчас в теме
(57) Boneman,
&НаКлиенте
Процедура ТоварыФлажокПриИзменении(Элемент)
	
	ТекущийФлажок = ЭтаФорма.Элементы.Товары.ТекущиеДанные.Флажок;
	
	ТекущаяСтрока = ЭтаФорма.Элементы.Товары.ТекущаяСтрока + 1;
	
	Для каждого ТекСтрока Из объект.товары Цикл
		
		Если НЕ ТекущаяСтрока = ЭтаФорма.Элементы.Товары.ТекущиеДанные.НомерСтроки  Тогда
		
			ТекСтрока.Флажок = ложь;
		
		КонецЕсли; 
		
			
		КонецЦикла; 
	//
	КонецПроцедуры
Показать


галочки ставятся, но в каждой строке, и не снимаются в других строках
59. Boneman 298 20.08.14 18:11 Сейчас в теме
(58) Вожак, не знаю что ты там делаешь.

Вот посмотри примерно как это должно быть,
у меня, флажки снимаются
Прикрепленные файлы:
ВнешняяОбработкаФлажки.epf
60. Вожак 20.08.14 18:16 Сейчас в теме
(59) Boneman, во, так получилось:
&НаКлиенте
Процедура ТоварыФлажокПриИзменении(Элемент)
	
	
	ТекущаяСтрока = ЭтаФорма.Элементы.Товары.ТекущаяСтрока + 1;
	
	Для каждого ТекСтрока Из объект.товары Цикл
		
		Если НЕ ТекСтрока.НомерСтроки = ТекущаяСтрока  Тогда
			
			ТекСтрока.Флажок = ложь;
		КонецЕсли; 
		
	КонецЦикла; 
КонецПроцедуры
Показать
64. Boneman 298 20.08.14 18:18 Сейчас в теме
(60) Вожак, ну вот видишь, можешь - когда захочешь )))
65. Вожак 20.08.14 18:21 Сейчас в теме
(64) Boneman, под конец дня тупить начинаю) а потом бесит что все так легко было)
61. Boneman 298 20.08.14 18:17 Сейчас в теме
(58) Вожак, я уже вижу твою ошибку )))
думаю ты найдешь и исправишь ее сам )))
ошибка в условии, при котором у тебя должен ставится флажок.

Еще раз говорю, научись, пользоваться отладчиком, - ведь при пошаговой отладке, ты сам бы понял почему твое условие никогда не отработает.
63. Вожак 20.08.14 18:17 Сейчас в теме
(61) Boneman, спасибо за помоь)
52. Boneman 298 20.08.14 17:46 Сейчас в теме
(50) Boneman, хотел сварганить быстро внешнюю, для примера, так у меня под рукой и конфы на управляемых не оказалось ((
Так, что с примерами кода, не помогу )))
49. Вожак 20.08.14 17:35 Сейчас в теме
на офрме документа было бы просто или 0 или 1, а в табличной части у меня 500 позиций, и у ме ня на 1 стоит галочка, я беру и ставлю на другой, галочка соответственно на последний выбор должна попадать, снимаясь с предыдущего
62. Вожак 20.08.14 18:17 Сейчас в теме
правда не то сравнивал, я делал сравнение:
ТекущаяСтрока = ЭтаФорма.Элементы.Товары.ТекущиеДанные.НомерСтроки
а надо было
ТекСтрока.НомерСтроки(из цикла) = ЭтаФорма.Элементы.Товары.ТекущаяСтрока + 1
Оставьте свое сообщение

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