Выбор номенклатуры при вводе на основании
По теме из базы знаний
- Универсальная обработка "Помощник ввода на основании для 1C v7.7"
- Информационные системы в оптовой торговле. Часть 1. Номенклатура
- Пакетный ввод документов в "1С:Бухгалтерия 3.0" (счет, реализация, и счет-фактура)
- Групповой ввод документов на основании других документов
- Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если ДанныеЗаполнения.Товары.Количество() > 0 Тогда
Иначе
Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.ЕдиницаИзмерения = ТекСтрокаТовары.ЕдиницаИзмерения;
НоваяСтрока.Количество = ТекСтрокаТовары.Количество;
НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура;
НоваяСтрока.СтавкаНДС = ТекСтрокаТовары.СтавкаНДС;
НоваяСтрока.Сумма = ТекСтрокаТовары.Сумма;
НоваяСтрока.СуммаНДС = ТекСтрокаТовары.СуммаНДС;
НоваяСтрока.СуммаСНДС = ТекСтрокаТовары.СуммаСНДС;
НоваяСтрока.Цена = ТекСтрокаТовары.Цена;
НоваяСтрока.ВидЦены = ТекСтрокаТовары.ВидЦены;
КонецЦикла;
КонецЕсли;
Показать
У меня встал вопрос, как мне все это дело лучше скомпановать? в массим или таблицу?,
&НаСервере
Функция ПолучениеДанныхСчетаДляВводаЗаказа(Знач СсылкаНаДок)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СчетНаОплатуКлиентуТовары.Ссылка.Договор,
| ПРЕДСТАВЛЕНИЕ(СчетНаОплатуКлиентуТовары.Ссылка.Контрагент) КАК Контрагент,
| ПРЕДСТАВЛЕНИЕ(СчетНаОплатуКлиентуТовары.Ссылка.Организация) КАК Организация,
| СчетНаОплатуКлиентуТовары.Ссылка.ЦенаВключаетНДС,
| СчетНаОплатуКлиентуТовары.Ссылка.Ссылка,
| СчетНаОплатуКлиентуТовары.Ссылка.НалогообложениеНДС,
| СчетНаОплатуКлиентуТовары.Ссылка.Менеджер,
| СчетНаОплатуКлиентуТовары.Ссылка.ДополнительноеСоглашение,
| ПРЕДСТАВЛЕНИЕ(СчетНаОплатуКлиентуТовары.Ссылка.ВидЦен) КАК ВидЦен,
| СчетНаОплатуКлиентуТовары.ЕдиницаИзмерения,
| СчетНаОплатуКлиентуТовары.Количество,
| ПРЕДСТАВЛЕНИЕ(СчетНаОплатуКлиентуТовары.Номенклатура) КАК Номенклатура,
| СчетНаОплатуКлиентуТовары.СтавкаНДС,
| СчетНаОплатуКлиентуТовары.Сумма,
| СчетНаОплатуКлиентуТовары.СуммаНДС,
| СчетНаОплатуКлиентуТовары.СуммаСНДС,
| СчетНаОплатуКлиентуТовары.ВидЦены,
| СчетНаОплатуКлиентуТовары.Цена
|ИЗ
| Документ.СчетНаОплатуКлиенту.Товары КАК СчетНаОплатуКлиентуТовары
|ГДЕ
| СчетНаОплатуКлиентуТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаДок);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецФункции // ОбработкаЗаполнения()
Показать
(26) Вожак,
разбей задачу на части,
1. Интерактивно тебе надо спросить пользователя и дать возможность выбрать нужную строку.
2. Программно создать новый докумен, заполнить его, и вставить ему нужную строку.
Т.е., как видится мне.
Тебе необходимо сделать еще одну форму выбора, с табличной частью и галочками.
Передать в нее всю табличную часть из исходного документа,
после того как пользователь отметил все там,
и создаем новый документ, заполняем и открываем его.
разбей задачу на части,
1. Интерактивно тебе надо спросить пользователя и дать возможность выбрать нужную строку.
2. Программно создать новый докумен, заполнить его, и вставить ему нужную строку.
Т.е., как видится мне.
Тебе необходимо сделать еще одну форму выбора, с табличной частью и галочками.
Передать в нее всю табличную часть из исходного документа,
после того как пользователь отметил все там,
и создаем новый документ, заполняем и открываем его.
Хотя так наверное будет лучше?
&НаСервере
Функция ПолучениеДанныхСчетаДляВводаЗаказа(Знач СсылкаНаДок)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СчетНаОплатуКлиентуТовары.Количество,
| СчетНаОплатуКлиентуТовары.Номенклатура,
| СчетНаОплатуКлиентуТовары.СтавкаНДС,
| СчетНаОплатуКлиентуТовары.Сумма,
| СчетНаОплатуКлиентуТовары.Цена,
| СчетНаОплатуКлиентуТовары.ЕдиницаИзмерения,
| СчетНаОплатуКлиентуТовары.СуммаНДС,
| СчетНаОплатуКлиентуТовары.СуммаСНДС,
| СчетНаОплатуКлиентуТовары.ВидЦены
|ИЗ
| Документ.СчетНаОплатуКлиенту.Товары КАК СчетНаОплатуКлиентуТовары
|ГДЕ
| СчетНаОплатуКлиентуТовары.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", СсылкаНаДок);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
МассивТабличнойЧасти = Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
МассивТабличнойЧасти.Добавить("Количество");
МассивТабличнойЧасти.Добавить("Номенклатура");
МассивТабличнойЧасти.Добавить("СтавкаНДС");
МассивТабличнойЧасти.Добавить("Сумма");
МассивТабличнойЧасти.Добавить("СуммаСНДС");
МассивТабличнойЧасти.Добавить("Цена");
МассивТабличнойЧасти.Добавить("ВидЦены");
МассивТабличнойЧасти.Добавить("ЕдиницаИзмерения");
МассивТабличнойЧасти.Добавить("СуммаНДС");
КонецЦикла;
Возврат МассивТабличнойЧасти;
КонецФункции // ОбработкаЗаполнения()
Показать
(27) Вожак, так распутай круг.
Передавать надо все умело, параметрами с клиента на сервер ))
и кстати, столкнешься со многими трудностями,
начиная от того как открыть и заполнить управляемую форму,
и кончая тем что далеко не любой тип значений можно перегнать параметрами с клиента на сервер ))
написать запрос, - это самое простое
Передавать надо все умело, параметрами с клиента на сервер ))
и кстати, столкнешься со многими трудностями,
начиная от того как открыть и заполнить управляемую форму,
и кончая тем что далеко не любой тип значений можно перегнать параметрами с клиента на сервер ))
написать запрос, - это самое простое
такой вариант не дает поставить флажок вообще(
&НаКлиенте
Процедура ТоварыФлажокПриИзменении(Элемент)
Для каждого строка Из объект.товары Цикл
Если строка.флажок Тогда
Строка.Флажок = ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(39) Вожак, во первых у тебя есть переменная "элемент".
Во вторых, есть текущая строка табличной части.
У каждой строки, как минимум есть номер.
Вот и определи, где стоит курсор, и если галку там поставил, то эту строку не трогай.
Поставь точку останова, и исследуй тщательно, все переменные, что в них.
Во вторых, есть текущая строка табличной части.
У каждой строки, как минимум есть номер.
Вот и определи, где стоит курсор, и если галку там поставил, то эту строку не трогай.
Поставь точку останова, и исследуй тщательно, все переменные, что в них.
(44) Вожак, тебе нафига его обнулять то ?
ты просто поставь условие, и при обходе коллекции, когда флажки зануляешь, строку с этим номером просто не трогай, т.к. это и есть строка которую юзает пользователь.
З.Ы, Задача то простая, надо просто потыкать отладчиком, потому что так вслепую, некомильфо советы давать, можно и в заблуждение ввести.
ты просто поставь условие, и при обходе коллекции, когда флажки зануляешь, строку с этим номером просто не трогай, т.к. это и есть строка которую юзает пользователь.
З.Ы, Задача то простая, надо просто потыкать отладчиком, потому что так вслепую, некомильфо советы давать, можно и в заблуждение ввести.
(46) Вожак,
ну что ты как меленький.
На пальцах.
Стоит курсор на 3-ей строке.
далее,
для каждого текстрока из коллекциястрок цикл
если номер текстроки <> номерстроки курсора тогда
зануляем флажок;
КонецЕсли;
конеццикла;
Я просто не хочу вдумываться в точный текст кода, говорю просто о примерном методе.
ну что ты как меленький.
На пальцах.
Стоит курсор на 3-ей строке.
далее,
для каждого текстрока из коллекциястрок цикл
если номер текстроки <> номерстроки курсора тогда
зануляем флажок;
КонецЕсли;
конеццикла;
Я просто не хочу вдумываться в точный текст кода, говорю просто о примерном методе.
(50) Boneman,
ЭтаФорма.Элементы.Товары.ТекущаяСтрока тут выпадает 0, и в итоге даже галочку не поставить
ТекущийФлажок = ЭтаФорма.Элементы.Товары.ТекущиеДанные.Флажок;
Для каждого ТекСтрока Из объект.товары Цикл
Если ЭтаФорма.Элементы.Товары.ТекущаяСтрока <> ЭтаФорма.Элементы.Товары.ТекущиеДанные.НомерСтроки Тогда
ТекСтрока.Флажок = ложь;
КонецЕсли;
КонецЦикла;
ПоказатьЭтаФорма.Элементы.Товары.ТекущаяСтрока тут выпадает 0, и в итоге даже галочку не поставить
(57) Boneman,
галочки ставятся, но в каждой строке, и не снимаются в других строках
&НаКлиенте
Процедура ТоварыФлажокПриИзменении(Элемент)
ТекущийФлажок = ЭтаФорма.Элементы.Товары.ТекущиеДанные.Флажок;
ТекущаяСтрока = ЭтаФорма.Элементы.Товары.ТекущаяСтрока + 1;
Для каждого ТекСтрока Из объект.товары Цикл
Если НЕ ТекущаяСтрока = ЭтаФорма.Элементы.Товары.ТекущиеДанные.НомерСтроки Тогда
ТекСтрока.Флажок = ложь;
КонецЕсли;
КонецЦикла;
//
КонецПроцедуры
Показатьгалочки ставятся, но в каждой строке, и не снимаются в других строках
(58) Вожак, не знаю что ты там делаешь.
Вот посмотри примерно как это должно быть,
у меня, флажки снимаются
Вот посмотри примерно как это должно быть,
у меня, флажки снимаются
Прикрепленные файлы:
ВнешняяОбработкаФлажки.epf
(59) Boneman, во, так получилось:
&НаКлиенте
Процедура ТоварыФлажокПриИзменении(Элемент)
ТекущаяСтрока = ЭтаФорма.Элементы.Товары.ТекущаяСтрока + 1;
Для каждого ТекСтрока Из объект.товары Цикл
Если НЕ ТекСтрока.НомерСтроки = ТекущаяСтрока Тогда
ТекСтрока.Флажок = ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(58) Вожак, я уже вижу твою ошибку )))
думаю ты найдешь и исправишь ее сам )))
ошибка в условии, при котором у тебя должен ставится флажок.
Еще раз говорю, научись, пользоваться отладчиком, - ведь при пошаговой отладке, ты сам бы понял почему твое условие никогда не отработает.
думаю ты найдешь и исправишь ее сам )))
ошибка в условии, при котором у тебя должен ставится флажок.
Еще раз говорю, научись, пользоваться отладчиком, - ведь при пошаговой отладке, ты сам бы понял почему твое условие никогда не отработает.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот