Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
01 дек 2023, 21:54

Копирование номенклатуры

Автор mixailz28, 27 окт 2021, 13:20

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

mixailz28

Добрый день.
Подскажите начинающему (умею только печатки делать), как решить следующую задачу:
Необходимо сделать внешнюю обработку, которая создает копии номенклатуры из выбранной папки. В обработке необходимо указать "Название новой папки", папку источник.

alexandr_ll

mixailz28, Делайте через копи-паст, никакие обработки не нужны. https://buh.ru/articles/documents/63237/

«1С:Бухгалтерия 8» (ред. 3.0): как быстро скопировать строки табличных частей из одного документа в другой

«1С:Бухгалтерия 8» (ред. 3.0): как быстро скопировать строки табличных частей из одного документа в другой

Выделенные строки табличных частей можно копировать из одного документа в другой. Рассказываем, как воспользоваться этим функционалом.

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

  • Скопировать строки (Ctrl+Shift+C)
  • Вставить строки (Ctrl+Shift+V)

Теперь такая возможность поддерживается и в производственных документах:

  • Отчет производства за смену
  • Оказание производственных услуг
  • Комплектация номенклатуры
  • Передача товаров (сырье в переработку / продукция заказчику)
  • Поступление из переработки
  • Реализация услуг по переработке

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

Рассмотрим пример:

  1. Открываем документ реализации товаров.
  2. Выделяем курсором любую строку в табличной части товаров и нажимаем комбинацию клавиш Ctrl + A («выделить все»).
  3. Нажимаем кнопку Скопировать строки (Ctrl+Shift+C), расположенную над табличной частью товаров (рис. 1).

Рис. 1 Копировать.jpg

Рис. 1. Копирование строк табличной части документа

4. Открываем документ Отчет производства за смену и нажимаем кнопку Вставить строки (Ctrl+Shift+V) (рис. 2).

Рис. 2 Вставить.jpg

Рис. 2. Заполнение табличной части копированием строк


mixailz28

alexandr_ll, это принципиально сделать через обработку.

alexandr_ll

mixailz28, https://infostart.ru/1c/articles/592192/

Копирование группы номенклатуры с иерархией вложенных элементов

Рекурсивное копирование группы номенклатуры с иерархией вложенных элементов. Описание всех процедур и изменений, статья подойдёт даже новичкам.

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

Передо мной конфигурация Управление Торговым Предприятием для Украины, описывать действия буду исходя из этого.

Для начала открываем конфигурацию и в справочнике "Номенклатура" открываем "Форму списка" выбираем табличное поле "Список" и в свойствах ставим птицу "Разрешить перетаскивание".

Листаем свойства вниз и нажимаем открыть на трёх следующих событиях:

"Начало перетаскивания" - втавляем следующий код


Процедура СписокНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.КопированиеИПеремещение;
КонецПроцедуры

"Проверка перетаскивания" - втавляем следующий код


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

и напоследок само "Претаскивание" - втавляем следующий код


Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)

// Для Левой клавиши мышки происходит простое перетаскивание и тут нам ничего не нужно делать
// Если же оператор потянул группу товаров правой клавишей...

Если ПараметрыПеретаскивания.Действие=ДействиеПеретаскивания.Выбор Тогда
СтандартнаяОбработка=Ложь;

//Готовим список действий для нашего контекстного меню
Действия=Новый СписокЗначений;
Действия.Добавить("Переместить","Переместить");
Действия.Добавить("Копировать","Копировать");
Действия.Добавить("Отмена","Отмена");

//Выводим меню рядом с нашим элементом и ждём ответа пользователя
Попытка
Действие=ВыбратьИзМеню(Действия,Элемент).Значение;
Исключение
Действие="Отмена"; //Если щёлкнул вообще мимо
КонецПопытки;

Если Действие="Переместить" Тогда //Передаём обработку стандартному механизму перетаскивания

ПараметрыПеретаскивания.Действие=ДействиеПеретаскивания.Перемещение;
СтандартнаяОбработка=Истина;

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

//Вызываем рекурсивную процедуру, параметр "строка" - это "получатель", куда будет скопирована ветка
Копировать(Строка,Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией));

КонецЕсли;

КонецЕсли;
КонецПроцедуры

Для того, чтобы всё заработало нам нужна ещё одна рекурсивная процедура "Копировать"


Процедура Копировать(Предок,Выборка) //Рекурсивная процедура для обхода всего дерева

Если Не Предок.ЭтоГруппа Тогда //Если перетащили не на группу, то кидаем всё дерево в корень
Предок=Справочники.Номенклатура.ПустаяСсылка();
КонецЕсли;

Пока Выборка.Следующий() Цикл //Обходим все элементы и просто копируем всё подряд

//Поскольку выборка добывает нам ссылки для изменения с объекта его необходимо получить
ТекСпр = Выборка.Ссылка.ПолучитьОбъект();
элементСправочника = ТекСпр.Скопировать();
элементСправочника.Родитель=Предок;

// ** Если мы хотим запомнить откуда была скопирована номенклатура - нужно **
// ** предварительно добавить реквизит ОбразецНоменклатуры в справочник Номенклатура **
// ** типа "СправочникСсылка.Номенклатура" а затем раскомментировать следующую строку **
//элементСправочника.ОбразецНоменклатуры=ТекСпр.Ссылка;

// При желании здесь можно создавать подчинённые справочники вроде "единицы измерения"
// и сюда записывать все необходимые ссылки

элементСправочника.Записать();

Если ТекСпр.ЭтоГруппа Тогда //Когда встречаем группу, то заходим внутрь и повторяем действия
Копировать(элементСправочника.Ссылка,Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией));
КонецЕсли;

КонецЦикла;
КонецПроцедуры

mixailz28

Это не то.
Как в обработке в поле Откуда выбрать именно определенную группу номенклатуры?
https://pastenow.ru/440d27165377e26b518ed5d9219092a4

mixailz28

alexandr_ll, Это не то.
Как в обработке в поле Откуда выбрать именно определенную группу номенклатуры и то что в ней?
https://pastenow.ru/440d27165377e26b518ed5d9219092a4
Я так понимаю надо делать запрос, затем выбираем поле куда копировать, и нажимаем скопировать.

alexandr_ll

mixailz28, Вместо любая ссылка выберите Справочник. Ссылка

mixailz28

alexandr_ll, Это все понятно. Как сделать выбор любой группы номенклатуры вместе с элементами в этой группе?
https://pastenow.ru/fbccd4e3a80deaf1ad9ca7e33d667e95
В идеале наверное так чтобы было, выбираем группу номенклатуры, нажимаем выгрузить, выводится в таблицу, затем выбираем куда и нажимаем скопировать.
https://pastenow.ru/c4aed60884937aed580c56c876f4c777

DmitriyF

Цитата: mixailz28 от 28 окт 2021, 13:47alexandr_ll, Это все понятно. Как сделать выбор любой группы номенклатуры вместе с элементами в этой группе?
https://pastenow.ru/fbccd4e3a80deaf1ad9ca7e33d667e95
В идеале наверное так чтобы было, выбираем группу номенклатуры, нажимаем выгрузить, выводится в таблицу, затем выбираем куда и нажимаем скопировать.
https://pastenow.ru/c4aed60884937aed580c56c876f4c777
В вашем скрине показана не группа номенклатуры, а вид номенклатуры. Чтобы видеть группы нужно справочник переключить в иерархический просмотр.

alexandr_ll

mixailz28, А что не получается? Выбираете любую группу, по кнопке Выгрузить делаем запрос по выбранному родителю и заполняем табличную часть. https://helpf.pro/faq/view/304.html

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

Распечатать

В терминах 1С:Предприятия Группа - это Родитель

Код 1C v 8.х //ПолеВводаРодитель - поле на форме
Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;

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

Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);

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

Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;

Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;

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

Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);

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

Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;

Код 1C v 7.x спр=СоздатьОбъект("Справочник.Материалы");
спрГруппа=СоздатьОбъект("Справочник.Материалы");
спрГруппа.НайтиПоНаименованию("Топливо");
спр.ИспользоватьРодителя(спрГруппа.ТекущийЭлемент());
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
Сообщить(спр.ТекущийЭлемент().Наименование);
КонецЦикла;

Теги:

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

Рейтинг@Mail.ru

Поиск