1с скопировать элемент справочника программно
Как программно скопировать элемент справочника, т.е. сделать те же самые действия что и нажатие кнопки "Скопировать" на панели инструментов в 1С?
Хочешь облегчить задачу? Воспользуйся методами метаданных. Организуй цикл в пять строк и легко и быстро симитируешь нажатие на конпу "скопировать". (блин - что реклама с людьми делает)
To : Пока в форуме общаюсь уже начал писать через установку всех атрибутов вручную (естественно через метаданные), просто для меня было сюрпризом, что нельзя просто программно скопировать элемент :((Или все-таки можно?
Ну, тут есть спецы, которые могут написать ВК, которая например, сможет вызывать системное копирование, но наверная запросят бабки :-))
а что будешь с переодическими, ну это ладно, а с элементами подчиненных справочников, а с неопределенными, а ежли какое расширение типа доков в справочнике, а если.
вот и приходим к тому, чтоб на прямую копировать запись(и) в таблице(ах), но при этом ИД, номер и что там исче нужно уникальное.
а как это: "атрибутов вручную (естественно через метаданные)", т.е. что ты имел ввиду посредством этой фразы? хотелось пример кода.
Чего к словам придираетесь :)), говорю же хотел найти как можно скопировать элемент справочника одной,двумя командами, оказалось что никак, поэтому перешел к сложному варианту - перебор реквизитов через метаданные и их установка.
Да не придираюсь я , оно мне зачем? просто хочу понять что значит "вручную через метаданные". тебе сложно пример кода?
если дбф-э, да и то ид надо поминять и номер и если связанные справочники то и там добавить записи а ид тот новый, но в общем как говорят этт дело техники.
это когда ты не прописываешь каждое поле спр. а перебираешь их из списка, список берешь в Метаданные.Справочник("ВидСпр"). ищи хелп от Пит'а
не надо мне азы объяснять - знаю я это все, я хочу код поглядеть у , а он что-то не хочет его показывать
Если открыта форма списка справочника,то копирование элемента сделать элементарно через нажатие кнопки F9 используя методы ВК для виртуального нажатия клавиш.Если форма не открыта, ее можно открыть программно,затем активизировать строку списка с элементом-образцом для копирования.
Для виртуального нажатия клавиш можно использовать WindowsScriptHost (метод SendKeys), или FormEx 1.9.8.1, объект сервис, метод "ЭмулироватьКлавиатуру", или 1С++, начиная с версии 1.8.1.3
эээ, ты это того, этого не безабразничай. уж я наскока люблю всяческие скрипты, но там же может выскачить типа "а копировать ли такието такието элементы подчиненных справочников" да исчо всякая лабуда, да и чел видать хочет ПРОГРАММНО копировать
Возвращает копию текущей таблицы значений
Метод Скопировать() имеет несколько вариантов синтаксиса:
Вариант синтаксиса 1: копирование по строкам и колонкам
Синтаксис метода, позволяющий скопировать определенные строки таблицы значений, выглядит так:
А также альтернативный англоязычный синтаксис:
Параметры
Описание параметров метода Скопировать() :
Имя параметра | Тип | Описание |
---|---|---|
Строки (необязательный) | Массив | Массив строк для копирования. Если параметр не указан, копируются все строки таблицы значений |
Колонки (необязательный) | Строка | Перечисление имен копируемых колонок через запятую. Если параметр не указан, будут скопированы все колонки |
Жирным шрифтом выделены обязательные параметры |
Возвращаемое значение
Описание варианта 1
Метод Скопировать() возвращает копию текущей таблицы значений. Если указан параметр Строки , то копируются только указанные строки. Если указан параметр Колонки , то копируются значения только для указанных колонок. Если оба параметра опущены, создается полная копия текущей таблицы значений.
Вариант синтаксиса 2: копирование по отбору
Синтаксис метода, позволяющий скопировать строки по настроенному отбору, выглядит так:
А также альтернативный англоязычный синтаксис:
Параметры
Описание параметров метода Скопировать() :
Имя параметра | Тип | Описание |
---|---|---|
ПараметрыОтбора (необязательный) | Структура | Ключ структуры — идентификатор колонки, а значение структуры — значение отбора. |
Колонки (необязательный) | Строка | Перечисление имен копируемых колонок через запятую. Если параметр не указан, будут скопированы все колонки |
Жирным шрифтом выделены обязательные параметры |
Возвращаемое значение
Описание варианта 2
Метод Скопировать() возвращает копию текущей таблицы значений. Если указан параметр ПараметрыОтбора , то копируются только строки, удовлетворяющие условиям отбора. Если указан параметр Колонки , то копируются значения только для указанных колонок. Если оба параметра опущены, создается полная копия текущей таблицы значений.
Доступность
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Все выросло из чисто прикладной задачи - ускорить и упростить копирование элементов сложных справочников.
При копировании Номенклатуры нужно было воспроизвести единицы измерения, свойства, штрихкоды и т.д. Так как данные, относящиеся к предмету, раскиданы по подчиненным справочникам и регистрам сведений, пользователи весьма удивлялись, почему по кнопочке "создать элемент копированием" у них на форме копии заполненными оказывалась едва ли треть от привычных им сведений.
Чтобы не утомлять их объяснениями, почему в 1С все так сделано. я сел и написал функцию, которая скопирует практически все, что имеет отношение к объекту. Кроме, конечно, регистров накопления и расчета, а также регистров сведений, связанных с регистраторами.
На этом описательную часть считаю законченой. Собственно сама функция:
Специальные предложения
(2) CaSH_2004, Раз вы работаете "приходящим" (без обид, ничего личного) программистом, значит Ваши клиенты сравнительно не большие предприятия, где копирование действительно больше вред чем польза.
В больших предприятиях, где различные части справочников заполняются разными специалистами (отвечающими за правильность своего набора реквизитов) иной раз и нельзя быстро создать новую запись иначе чем копированием. Поэтому говорить, что решение такое решение несет вред, это все равно, что ударив микроскопом по пальцам в попытке забить им гвоздь, заявить, что микроскопы несут вред и посему бесполезны. :-)
(3) dddxddd, если заполняют разные специалисты то как один специалист может создать ее копированием? И для чего спрашивается если опять таки оно должно заполнятся разными специалистами? Уважаемый - вы противоречите сами себе.
(10) gigabyte_artur, в смысле дали? А мы типа просили? Еще раз повторюсь - более чем за 10 лет обслуживания несколько сотен разных клиентов разных сфер и размеров от 1 до 30 пользователей 1С я не разу не встречал такой потребности как и сам ее не испытывал, зато знаю чем заканчивается обычное копирование, а вы ратуете за групповое копирование обычным пользователем!.
Я не говорю что инструмент плох. Но давать его пользователю - крайне опасно, и нормальны программист/администратор не стал бы этого делать если только он хоть как то следит за базой. Никто не застрахован от ошибок - а вот результаты их придется устранять админу, а не пользователю. Так что и сам бы использовал такой инструмент только с указанными ранее интерактивными отметками что нужно копировать, а что нет. А получить "кота в мешке" на выходе - боже упаси.
(14) CaSH_2004, "более чем за 10 лет обслуживания несколько сотен разных клиентов разных сфер и размеров от 1 до 30 пользователей 1С я не разу не встречал такой потребности как и сам ее не испытывал"
Это не означает что такой потребности нет :-) Но соглашусь, что нужно такое достаточно редко.
"Но давать его пользователю - крайне опасно, и нормальны программист/администратор не стал бы этого делать если только он хоть как то следит за базой."
Все мужчины потенциально опасны, т.к. у них есть то чем они отличаются от женщин и этим они могут изнасиловать кого нибудь. Логика примерно такая же :-)
Как при помощи подписки на событие копировать элемент справочника "Номенклатура" с данными вкладок "Единицы" и "Свойства".
Сначала нужно создать подписку на событие При копировании Элемента спр. "Номенклатура", а затем в обработчике написать следующий код:
Специальные предложения
(1) xbic, Код должен сам добавляться. Его не нужно присваивать наряду с весом, наименованием и прочим.
Вроде разобрался, у меня 2 единицы измерения, ругался на код ед.изм.
А вот разве не работает:
Просмотры 10098
Загрузки 0
Рейтинг 13
Создание 10.07.13 10:06
Обновление 10.07.13 08:55
№ Публикации 193831
Тип файла Нет файла
Операционная система Windows
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Не указано
См. также
Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо
Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.
11.07.2007 56254 tormozit 52
Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП
В данной статье я рассматриваю несколько полезных "классических" функций и процедур для работы с данными, которые уже встроены в БСП и готовы к использованию.
25.04.2022 2819 quazare 11
Вывод табличных документов с разной ориентацией страниц в один pdf файл
Привожу код для вывода нескольких табличных документов c разной ориентацией страниц в один файл pdf.
06.04.2022 1078 sdjoker 5
Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)
Мы все любим 1С, не так ли? Вот дает 1С прекрасный механизм возможности модификации макетов печатных форм в БСП. А из всех рекомендаций это получение макета и заполнение параметров областей. И вы спросите: "А что не так. ты печатные формы накодить не можешь без указаний сверху?". Да вот в том то и дело, что я могу все. А вот пользователям от такого механизма пользы 0, если из всех доступных изменений остаются только шрифты, да текст произвольный накинуть. А ведь можно больше, надо только соблюдать несколько правил при подготовке печатных форм.
07.03.2022 3242 vandalsvq 0
Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо
Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки
10.09.2017 53145 tormozit 74
Убираем параметры из отбора СКД
Заметка о некоторых технических нюансах параметров данных и отборов СКД.
17.02.2022 2680 Yashazz 28
Конвертируем печатную форму pdf в картинку (jpg, gif, png и прочие) на сервере
Была поставлена интересная задача конвертировать печатную форму в файл картинку. По условию задачи клиенту на почту нужно присылать только файл картинку (jpg, gif).
22.12.2021 2906 John_d 23
Несколько простых приемов для удобной работы в конфигураторе
Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.
12.11.2021 7852 acces969 95
Универсальные функции с примерами использования Промо
14 универсальных функций, с примерами использования - для обычного и управляемого интерфейса
26.02.2016 44114 unichkin 47
Простейший способ учета изменений управляемых форм объектов 1С
Описание методологии, позволяющей контролировать список изменений форм + вспомогательные функции программного изменения форм. Пригодятся при внесении изменений в расширениях, если есть необходимость видеть и контролировать все сделанные с формой изменения.
02.11.2021 1362 avalakh 12
Функции для преобразования справочников и документов в соответствие и обратно
Функции для преобразования справочников и документов в соответствие и обратно. Предназначены для передачи данных между одинаковыми и не очень конфигурациями или как очередной вариант сохранения (архивирования) объектов перед редактированием с последующим восстановлением.
01.11.2021 1101 avalakh 5
Программно свернуть/развернуть узел динамического списка (с основной таблицей). Жирная точка над всеми "i".
Какой пользователь не мечтал поменьше тыркать кнопкой? Особенно в малюсенькие +/- в "древесных" динамических списках. Если вас тоже озадачили, чтобы, при выборе узла дерева сами развернулись все его вложенные элементы , а при выборе другого узла - так же автоматом свернулась ранее развернутая ветка (причем эти узлы могут находится в разных "отношениях" друг с другом). То вам - сюда.
08.10.2021 2017 e-9 13
Программные перечисления, ч.2: приемы кэширования при разработке Промо
Все знают, что такое кэш, и зачем он нужен. Но в 1С разработчик обычно использует кэширование только на уровне конфигурации, а в какой-нибудь обработке скорее ломает голову над запросом - как получить все данные за один заход. Хочется рассказать о том, как можно добиться хороших результатов с стратегией "разделяй и властвуй".
30.10.2017 28423 unichkin 18
Взаимодействие с api Честный знак (Молочная продукция)
Обзор основных примеров взаимодействия с Честным знаком по api для нетиповых конфигураций.
30.08.2021 5105 user5300 57
Из Word в табличный документ
Быстро и просто: текст, списки, таблицы. Готовый код
18.08.2021 2129 Yashazz 5
Префиксация объектов - полезный типовой функционал БСП
В данной публикации предлагаю рассмотреть основные типовые возможности библиотеки стандартных подсистем (БСП), касаемые префиксации объектов конфигураций.
21.06.2021 6620 quazare 4
Выполнение произвольного кода в фоновых заданиях Промо
Если надо быстро провести 100`000 документов.
13.01.2016 25543 unichkin 13
Своя функция &Вместо &ИзменениеИКонтроль
Как добавить контроль в расширения, если не доверяешь аннотации &ИзменениеИКонтроль.
06.06.2021 8631 AntonProgma 162
Предотвращение многократного вызова "ПриПолученииДанных" во время поиска в табличном поле в обычных формах
Долго искал решение: как при выводе строк заполнить значениями колонки, которые созданы программно, чтобы, не было тормозов при стандартном поиске. И с минимальными изменениями (легко контролируемыми, при обновлении).
07.04.2021 2414 Vlad_CK 9
Самый простой, на мой взгляд, способ получить QR код для 1СV8. Без внешних компонент, как говорится, бесплатно, без смс и регистрации))
17.12.2020 6560 shell_maxim 28
Ускорение отладки управляемых форм Промо
Ускорение отладки управляемых форм в больших неповоротливых конфигурациях, когда заказчик просит что-то и сам не знает, что из этого получится.
23.05.2015 15406 moolex 5
Сохранение настроек
Делюсь еще одним не самым очевидным способом хранения настроек в базах на БСП без доработки конфигурации. Весь код в статье.
22.11.2020 5845 the1 8
Сохранение настроенного запроса набора данных СКД
Как сохранить запрос набора данных СКД в том виде, каким он будет выполнен системой для открытия в консоли запросов с диска ИТС.
09.11.2020 1904 Serge R 0
Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)
Пример рекурсивной функции, при помощи которой в табличный документ можно выводить верхний или нижний колонтитулы с произвольным содержимым, а также делать повтор шапки таблицы (или таблиц, если их несколько).
07.10.2020 7424 ellavs 3
УстановитьСсылкуНового() как ход оптимизации! Промо
Для себя открыл новую возможность применения данного метода в типовых конфигурациях. Особенность чрезвычайно интересная при загрузке справочников.
22.10.2014 57667 logarifm 85
Лайфхаки для разработчиков 1С. Часть 1
Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.
30.09.2020 7680 Neti 47
Самый простой парсинг и обработка веб-страниц в 1С
Рассмотрим самый простой парсинг веб-страниц средствами платформы 1С и еще некоторые полезные приемы работы с веб-страницами.
07.08.2020 16816 YPermitin 27
Выполнение внешней обработки по расписанию для управляемого и обычного приложения
Использование БСП для выполнения внешних обработок в управляемом и обычном приложении
06.08.2020 19246 RPGrigorev 0
[8.2] Глобальные переменные в контексте сервера (управляемое приложение) Промо
09.12.2009 38462 Душелов 34
Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)
В данном обзоре приведу примеры встроенных используемых функций для работы с печатными формами на примерах конфигураций Управление торговлей 11.4 и Бухгалтерия 3.0.
10.07.2020 9815 quazare 5
Вывод дерева в табличный документ СКД
Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.
09.07.2020 5014 Yashazz 11
Форма выбора (подбор) в управляемых формах
Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.
Т.к. часто возникают вопросы по программному созданию/копированию/обработке объектов 1С:Предприятие в режиме "Управляемые формы", то решил скомпоновать в данной публикации примеры решения таких задач, с комментариями по каждому действию. Поначалу кажется все достаточно запутанно, но если по шагам все разложить и немного вникнуть, то всё должно встать на свои места.
При переходе с "обычных форм" на "управляемые формы" нужно понимать, что теперь имеем клиент-серверной вариант работы программы.
А это означает что то что мы могли ранее программно напрямую изменять объекты в "обычных формах" и видеть на экране результат наших действий, то в "управляемых формах" объект на сервере и объект на клиенте (видимый пользователю) разделены. Так же частично разделены функции и процедуры которые можно выполнять на сервере и на клиенте. Так например на сервере выполняются в основном сложные вычисления и функции связанные с изменениями в базе данных, а на клиенте выполняются не сложные расчеты и функции юзабилити.
ПРИМЕРЫ:
Ниже я приведу пример как создавать/копировать/изменять документы. Данный пример досконально разобран и позволит понять клиент-серверную архитектуру работы и распространить эти знания на другие объекты 1С (справочники, отчеты. ).
Задача была такая: есть справочник номенклатуры, в которые заведены блюда (общепит). Каждое блюдо имеет свою калькуляцию (состав продуктов). Калькуляции хранятся в периодическом регистре сведений. В форме элемента размещен динамический список с калькуляциями, принадлежащими открытому блюду (это могла быть любая другая таблица данных). Необходимо было добавить две кнопки "Создать калькуляцию" (новую) и "Скопировать калькуляцию" (активную из списка).
Для этого я создал соответствующие команды и разместил их на форме.
1. "Создать калькуляцию".
В данном варианте все просто: мы создаем на клиенте процедуру и все действия выполняем прямо на клиенте, т.к. ничего требующего вызова сервера не делаем. Создаем/получаем форму объекта, передаем в переменную ДанныеФормы Объект формы, выполняем элементарные действия с ДанныеФормы и открываем уже заполненную форму.
2. "Скопировать калькуляцию".
С данной операцией уже немного сложнее, часть процедур выполняется на клиенте, а часть на сервере.
Порядок действий таков: Мы на клиенте создаем форму нужного нам объекта и сразу открываем её (ОткрытьФорму. ). Далее как и ранее мы передаем в переменную ДанныеФормы Объект открытой формы.
Т.к. задача состоит в том чтобы скопировать уже существующий в базе документ (старую калькуляцию, которую выбрал пользователь в динамическом списке), то действия с данными ДБ можно производить только на сервере. Таким образом, мы получаем необходимые параметры из формы номенклатуры (в моем случае старую калькуляцию) и передаем через Структуру эти параметры в серверную процедуру без контекста вместе с переменной ДанныеФормы: СкопироватьОбъектДокументаНаСервере(ДанныеФормы, СтруктураДанных).
Уже на сервере мы с помощью функции ДанныеФормыВЗначение() преобразуем ДанныеФормы в привычный нам из "обычных форм" объект документа и работаем с ним с использованием серверных процедур. Копируем данные из другого документа, запускаем экспортные процедуры из модуля объекта, дозаполняем прочие реквизиты.
Функция ДанныеФормыВЗначение() требует указания соответствия (типа получаемого объекта): Тип("ДокументОбъект.Калькуляция").
Далее процедурой ЗначениеВДанныеФормы(Док, ДанныеФормы) выполняем обратную операцию: преобразуем объект Документ в переменную ДанныеФормы - понятную для "клиента".
При этом измененные на сервере ДанныеФормы сами не попадут в нашу созданную и открыую в самом начале форму, поэтому мы выполняем процедуру КопироватьДанныеФормы(ДанныеФормы, Форма.Объект) - тем самым запихаем изменения в видимую для пользователя форму документа Калькуляция (обновим в ней данные) .
Выше приведённые примеры решения задач, не являются единственными и в каждом индивидуальном случае могут быть оптимизированы или решены иным способом.
Думаю, начинающим познавать клиент-серверную архитектуру 1С пригодится данная статья )
Читайте также: