Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 июл 2021, 14:24

Загрузить выбранную номенклатуру в ТЧ документа

Автор Алексей_1985_06, 12 дек 2020, 19:49

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Всем привет! Сделал формы выбора номенклатуры, в документе "ПриходнаяНакладная" есть ТЧ "СписокНоменклатуры" с полем "Номенклатура".
Помогите реализовать так, чтобы не по одной номенклатуре помещать в ТЧ (очень геморно это....), а выбрать перечень номенклатуры (отметить их) и сразу загрузить все в ТЧ "СписокНоменклатуры" документа "ПриходнаяНакладная". :dfbbdrfb::dfbbdrfb::dfbbdrfb:
Буду очень благодарен за помощь!!!

LexaK

кот один из вариантов
на форме выбора, в элементе списокноменклатуры, на событие Выбор добавляете процедуру

&НаКлиенте
Процедура СписокНоменклатураВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//здесь можно какие нужно проверки добавить
ОповеститьОВыборе(НоменклатураСсылка);
КонецПроцедуры


при открытии формы выбора установите Реквизит: ЗакрыватьПриВыборе = Ложь;

а еще как совет, скачайте где нибудь ознакомительную/тестовую типовую базу УТ или БП или др..., в большинстве вопросов там уже есть наработанные технологические решения, такой режим программирования называется Копи-Паст, умение найти уже отлаженный рабочий код и применить его к решению своей задачи. 
ответ Понравился? (в смысле пригодился?)

Алексей_1985_06

Цитата: LexaK от 12 дек 2020, 23:19
кот один из вариантов
на форме выбора, в элементе списокноменклатуры, на событие Выбор добавляете процедуру

&НаКлиенте
Процедура СписокНоменклатураВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//здесь можно какие нужно проверки добавить
ОповеститьОВыборе(НоменклатураСсылка);
КонецПроцедуры


при открытии формы выбора установите Реквизит: ЗакрыватьПриВыборе = Ложь;

а еще как совет, скачайте где нибудь ознакомительную/тестовую типовую базу УТ или БП или др..., в большинстве вопросов там уже есть наработанные технологические решения, такой режим программирования называется Копи-Паст, умение найти уже отлаженный рабочий код и применить его к решению своей задачи.

LexaK Сделал так:
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
  СтандартнаяОбработка = Ложь;
   ОповеститьОВыборе(Список.Наименование.Ссылка);
КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗакрыватьПриВыборе = Ложь;
КонецПроцедуры


Но при выборе номенклатуру не добавляются строки в ТЧ документа, т.е при выборе, в ТЧ документа изменяется только ее название в первой строке, а нужно чтоб при нажатии на кнопку "Выбрать" она (номенклатура) добавлялась следующей строкой в ТЧ документа.
Можете помочь с этим?
Добавлено: 13 дек 2020, 11:43


Цитата: Алексей_1985_06 от 13 дек 2020, 11:16
Цитата: LexaK от 12 дек 2020, 23:19
кот один из вариантов
на форме выбора, в элементе списокноменклатуры, на событие Выбор добавляете процедуру

&НаКлиенте
Процедура СписокНоменклатураВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//здесь можно какие нужно проверки добавить
ОповеститьОВыборе(НоменклатураСсылка);
КонецПроцедуры


при открытии формы выбора установите Реквизит: ЗакрыватьПриВыборе = Ложь;

а еще как совет, скачайте где нибудь ознакомительную/тестовую типовую базу УТ или БП или др..., в большинстве вопросов там уже есть наработанные технологические решения, такой режим программирования называется Копи-Паст, умение найти уже отлаженный рабочий код и применить его к решению своей задачи.

LexaK Сделал так:
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
  СтандартнаяОбработка = Ложь;
   ОповеститьОВыборе(Список.Наименование.Ссылка);
КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗакрыватьПриВыборе = Ложь;
КонецПроцедуры


Но при выборе номенклатуру не добавляются строки в ТЧ документа, т.е при выборе, в ТЧ документа изменяется только ее название в первой строке, а нужно чтоб при нажатии на кнопку "Выбрать" она (номенклатура) добавлялась следующей строкой в ТЧ документа.
Можете помочь с этим?

Подскажите пожалуйста, вот сам хотел сделать как-то так:
1. Создал новую форму выбора
2. В процедуре ПриСозданииНаСервере создал СписокЗначений со всей номенклатурой, для возможности поставить отметки для той, которую нужно поместить в ТЧ документа
3. Создал кнопку "ЗаписатьНоменклатуру" при нажатии на которую номенклатура должна поместиться в ТЧ документа

И вот здесь возникла трудность с тем, как номенклатуру из СЗ поместить в колонку "Номенклатура" ТЧ документа?
Или все что я сделал НЕПРАВИЛЬНО?
Код:
// Создаем СписокЗначений и помещаем в него всю номенклатуру
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| МатериальныеСредства.Ссылка КАК Ссылка
|ИЗ
| Справочник.МатериальныеСредства КАК МатериальныеСредства
|ГДЕ
| НЕ МатериальныеСредства.ЭтоГруппа";

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

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


// Процедура для кнопки "ЗаписатьНоменклатуру"

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

МассивНоменклатуры = Новый Массив; // создаем массив
Для Каждого Элемент из СписокЗначений Цикл
Если Элемент.Пометка Тогда // Если стоит пометка тогда добавляем номенклатуру в массив
МассивНоменклатуры.Добавить(Элемент.Значение);
КонецЕсли;
КонецЦикла;

// Загружаем значения в СписокЗначений из Массива
СписокЗначений.ЗагрузитьЗначения(МассивНоменклатуры); // загружаем в СЗ данные из массива
СписокЗначений.ЗаполнитьПометки(Истина); // устанавливаем все отметки в значение Истина

// Дальше возникли трудности, как выбранную номенклатуру из СЗ загрузить в ТЧ (колонка "Номенклатура") документа
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьНоменклатуру(Команда)
ЗаписатьНоменклатуруНаСервере();
КонецПроцедуры


LexaK

в форме документа, такой обработчик проверьте/сделайте, (это пример, могут быть нюансы)

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Справочник.Номенклатура.ФормаВыбора" Тогда
лкНоваяСтрока = Объект.Товары.Добавить();
лкНоваяСтрока.Номенклатура = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

Алексей_1985_06

Цитата: LexaK от 14 дек 2020, 10:34
в форме документа, такой обработчик проверьте/сделайте, (это пример, могут быть нюансы)

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Справочник.Номенклатура.ФормаВыбора" Тогда
лкНоваяСтрока = Объект.Товары.Добавить();
лкНоваяСтрока.Номенклатура = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры


LexaK спасибо за помощь, написал так, но ничего не происходит....:dfbbdrfb:
Все стандартно, кликаешь на выбранную номенклатуру и она добавляется, выбрать несколько позиций и записать их в ТЧ документа, иак и не получается...
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Справочник.МатериальныеСредства.ФормаВыбора" Тогда
        НоваяСтрока = Объект.СписокНоменклатуры.Добавить();
        НоваяСтрока.Номенклатуры = ВыбранноеЗначение;
    КонецЕсли;
КонецПроцедуры

Вроде простая задачка....а решить никак не получается....

bsn-chita

В форме документа (имена справочника и реквизитов на свой замените).
Отдельная кнопка по которой выходит форма выбора. Если добавляется номенклатура как в последней строке количество увеличивается а не добавляется новая строка. Можно выбрать несколько номенклатурных позиции.

&НаКлиенте
Процедура ДобавитьСтрокиТабличнойЧасти(Команда)
ПараметрыФормыВыбора = Новый Структура();
ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь);
ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
Владелец = ЭтотОбъект;
ФормаМножественногоВыбора = ОткрытьФорму("Справочник._ДемоНоменклатура.ФормаВыбора",ПараметрыФормыВыбора,Владелец,,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ФормаМножественногоВыбора.АвтоЗаголовок = Ложь;
ФормаМножественногоВыбора.Заголовок = "Форма множественного выбора номенклатуры";
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Справочник._ДемоНоменклатура.ФормаВыбора" И ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
Для Каждого Элм Из ВыбранноеЗначение Цикл
КоличествоСтрокТабличнойЧасти = Объект.Товары.Количество();
Если КоличествоСтрокТабличнойЧасти > 0 И Объект.Товары[Объект.Товары.Количество()-1].Номенклатура = Элм Тогда
ПоследняяСтрокаТабличнойЧасти = Объект.Товары[Объект.Товары.Количество()-1];
ПоследняяСтрокаТабличнойЧасти.Количество = ПоследняяСтрокаТабличнойЧасти.Количество + 1;
Иначе
Товар = Объект.Товары.Добавить();
Товар.Номенклатура = Элм;
Товар.Количество = 1;
КонецЕсли;
КонецЦикла;
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск