Заполнение реквизита ТЧ при изменении другого |
Я |
17.04.16 — 18:39
Работаю в УТ 11.1. Добавив новый реквизит в ТЧ Товары документа ЗаказКлиента нужно, чтобы при его изменении заполнялось поле ПроцентРучнойСкидки. Сразу скажу, что не опытная, поэтому никак не получается это сделать. ПроцентРучнойСкидки не меняется. Поделитесь информацией, как это правильно сделать?
1 — 17.04.16 — 18:44
(0) что конкретно не получается?
2 — 17.04.16 — 19:06
(1) Не получается установить значение в ПроцентРучнойСкидки
3 — 17.04.16 — 19:16
(2) код показывай
4 — 17.04.16 — 19:52
(3)
Думаю, теперь суть будет понятна. Но, кажется, я все делаю не тем путем, поэтому ничего не выходит.
Процедура ТоварыПредложениеПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если ТекущаяСтрока.Предложение Тогда
ТекущаяСтрока.ПроцентРучнойСкидки = РаботаСПредложениями.ПолучитьСкидку(Объект.Дата);
КонецЕсли;
Если Не ТекущаяСтрока.Предложение Тогда
ТекущаяСтрока.ПроцентРучнойСкидки = 0;
КонецЕсли;
КонецПроцедуры
Функция ПолучитьСкидку(АктуальнаяДата) Экспорт
Отбор = Новый Структура(«Период»);
ЗначенияРесурсов = РегистрыСведений.Предложения.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.ПроцентСкидкиПоПредложению;
КонецФункции
5 — 17.04.16 — 19:56
ну так период не задала
Отбор = Новый Структура(«Период»);
где значение периода?
6 — 17.04.16 — 20:11
(5) Да, с этим еще разберусь.
Главная проблема в том, что даже если, почти, все это убрать и оставить:
ТекущаяСтрока.ПроцентРучнойСкидки = 5;
Это все-равно тут не сработает.
7 — 17.04.16 — 20:47
(6) отладчик вообще заходит в эту процедуру?
8 — 17.04.16 — 21:10
(7) В процедуру заходит
9 — 17.04.16 — 21:31
(8) ну тогда посмотрите после присвоение там ТекущаяСтрока.ПроцентРучнойСкидки. Равно 5 или не равно?
10 — 17.04.16 — 21:37
(7) Хотя нет, беру свои слова обратно, оказывается процедура не выполняется. Только непонятно почему.
11 — 17.04.16 — 21:45
(10) не назначена обработчиком события
12 — 17.04.16 — 22:34
(11) Да, вроде, назначена на элемент ТоварыПредложение.
13 — 17.04.16 — 22:39
Вроде.. у Володи. Сделай точку останова в процедуре события или заново установи событие.
14 — 17.04.16 — 23:09
(12) и это? процедура на клиенте?
15 — 18.04.16 — 05:38
(14) Да, на клиенте.
(13) Даже если заново установить событие, ноль реакции.
16 — 18.04.16 — 05:49
(0) Какая версия УТ?
17 — 18.04.16 — 06:27
(16) Версия 11.1
18 — 18.04.16 — 22:56
Попробовал на 11.2, на демо-версии:
1. Создал реквизит «Предложение» в «ЗаказКлиента» -> «Товары», тип строка.
2. Для реквизита «Предложение» назначил событие «ПриИзменении»
&НаКлиенте
Процедура ТоварыПредложениеПриИзменении(Элемент)
// Вставить содержимое обработчика.
КонецПроцедуры
3. В модуле формы в процедуре «КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент)» внёс изменения (текста там много, всё копировать смысла нет и так понятно), можно прямо в этой процедуре свой код написать или как пожелаете:
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент)
ИначеЕсли Элемент.Имя = «ТоварыПредложение» Тогда
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ТекущаяСтрока.ПроцентРучнойСкидки = ТекущаяСтрока.Предложение;
КонецПроцедуры
4. Возможно при каких либо других настройках может работать и по другому, но это уже другая история.
5. Всё заработало.
19 — 19.04.16 — 07:49
(18) Огромное спасибо!
Оказывается, процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении не была учтена.
zak555
20 — 19.04.16 — 22:50
лучше опиши про свою доработку предложение, что ты хочешь этим получить
Автозаполнение реквизита табличной части документа при изменении одного реквизита
Автор Ирина1109, 26 авг 2015, 12:25
0 Пользователей и 1 гость просматривают эту тему.
Всем добрый день!
Я совсем недавно начала изучать 1С.
Сейчас стоит следующая задача: Есть документ «ПродажаЛицензии», который включает в себя реквизиты — Клиент(тип СправочникСсылка.Клиенты), СрокДействия, Стоимость. Далее был создан 2 документ — «НачислениеАбонентскойПлаты», который содержит табличную часть со следующими реквизитами — Клиент(тип СправочникСсылка.Клиенты), СрокДействия, Стоимость, АбонентскаяПлата. Мне нужно сделать так, чтобы при выборе Клиента в ТЧ автоматически заполнялись реквизиты СрокДействия и Стоимость из первого документа. Для этого я создала форму и создала событие ПриИзменении на «Клиент», написала следующий код:
&НаКлиенте
Процедура НачислениеАбонентскойПлатыКлиентПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.НачислениеАбонентскойПлаты.ТекущиеДанные;
СтрокаТабличнойЧасти.Стоимость = ОпределениеСтоимости(СтрокаТабличнойЧасти.Клиент)
КонецПроцедуры
&НаСервере
Функция ОпределениеСтоимости(Элемент)
Стоим = Документы.ПродажаЛицензии.НайтиПоРеквизиту("Клиент").Стоимость;
Возврат Стоим;
КонецФункции
Так не работает. Выдает ошибку при запуске:
{Документ.НачислениеАбонентскойПлаты.Форма.ФормаДокумента.Форма(14)}: Недостаточно фактических параметров
Стоим = Документы.ПродажаЛицензии.НайтиПоРеквизиту(«Клиент»).Стоимость;
Уже третий день сижу с этой проблемой, помогите пожалуйста разобраться
ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)
НайтиПоРеквизиту (FindByAttribute)
Синтаксис:
НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>)
Параметры:
<ИмяРеквизита> (обязательный)
Тип: Строка.
Имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения произвольный, кроме ХранилищеЗначения и строк произвольной длины.
<ЗначениеРеквизита> (обязательный)
Тип: Произвольный.
Значение реквизита, по которому должен выполняться поиск.
Возвращаемое значение:
Тип: ДокументСсылка.
Ссылка на найденный документ. Если не существует ни одного документа с требуемым значением реквизита, то будет возвращена пустая ссылка.
Описание:
Осуществляет поиск документа по реквизиту.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:
Если существует несколько документов с указанным значением реквизита, то будет найден только один из них.
Для реквизитов типа Строка поиск осуществляется по точному соответствию.
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
Цитата: cska-fanat-kz от 26 авг 2015, 12:30
ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)
НайтиПоРеквизиту (FindByAttribute)
Синтаксис:НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>)
Параметры:<ИмяРеквизита> (обязательный)
Тип: Строка.
Имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения произвольный, кроме ХранилищеЗначения и строк произвольной длины.
<ЗначениеРеквизита> (обязательный)Тип: Произвольный.
Значение реквизита, по которому должен выполняться поиск.
Возвращаемое значение:Тип: ДокументСсылка.
Ссылка на найденный документ. Если не существует ни одного документа с требуемым значением реквизита, то будет возвращена пустая ссылка.
Описание:Осуществляет поиск документа по реквизиту.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:Если существует несколько документов с указанным значением реквизита, то будет найден только один из них.
Для реквизитов типа Строка поиск осуществляется по точному соответствию.
Если честно, то до меня не очень дошло, что мне надо изменить((
у метода НайтиПоРеквизиту — 2 параметра — Имя и значение реквизита. и оба обязательные.
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
Цитата: cska-fanat-kz от 26 авг 2015, 12:30НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>)
Параметры:<ИмяРеквизита> (обязательный)
Тип: Строка.
Имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения произвольный, кроме ХранилищеЗначения и строк произвольной длины.
<ЗначениеРеквизита> (обязательный)Тип: Произвольный.
Значение реквизита, по которому должен выполняться поиск.
Возвращаемое значение:
2 параметра, у вас 1
Цитата: vitasw от 26 авг 2015, 13:22
Цитата: cska-fanat-kz от 26 авг 2015, 12:30НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>)
Параметры:<ИмяРеквизита> (обязательный)
Тип: Строка.
Имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения произвольный, кроме ХранилищеЗначения и строк произвольной длины.
<ЗначениеРеквизита> (обязательный)Тип: Произвольный.
Значение реквизита, по которому должен выполняться поиск.
Возвращаемое значение:2 параметра, у вас 1
А что может быть в качестве значения?
Вы издеваетесь?! Чтобы использовать «НайтиПоРеквизиту» нужно указать по какому реквизиту искать и значение этого реквизита.
Цитата: vitasw от 26 авг 2015, 16:58
Вы издеваетесь?! Чтобы использовать «НайтиПоРеквизиту» нужно указать по какому реквизиту искать и значение этого реквизита.
Спасибо, извините за глупые вопросы
Стоим = Документы.ПродажаЛицензии.НайтиПоРеквизиту(«Клиент», Элемент).Стоимость;
Получил помощь — скажи СПАСИБО.
Разобрался сам — расскажи другим.
Цитата: cska-fanat-kz от 27 авг 2015, 06:03
Стоим = Документы.ПродажаЛицензии.НайтиПоРеквизиту(«Клиент», Элемент).Стоимость;
Спасибо большое! До меня дошло)
У меня возник еще один вопрос. Если Вам не сложно, могли бы Вы ответить
Как можно найти значение реквизита табличной части документа, чтобы записать его в другой документ?
Добавлено: 27 авг 2015, 11:58
Есть 2 документа: НачислениеАбонентскойПлаты и ОплатаАбонентскойПлаты. В первом документе есть табличная часть,котораявключает реквизит — абонентская плата. В документе ОплатаАбонентскойПлаты я создала 2 реквизита- Клиент и АбонентскаяПлата. Надо чтобы при заполнении реквизита Клиент автоматически проставлялось значение АбонентскаяПлата из первого документа.
Подскажите пожалуйста как это реализовать?
0 / 0 / 0 Регистрация: 10.12.2013 Сообщений: 8 |
|
1 |
|
Автозаполнение реквизита при заполнении другого реквизита28.01.2021, 12:09. Показов 5812. Ответов 13
Доброго времени суток всем.
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
28.01.2021, 12:55 |
2 |
делать запрос
1 |
0 / 0 / 0 Регистрация: 10.12.2013 Сообщений: 8 |
|
28.01.2021, 13:10 [ТС] |
3 |
Конфигурация 1С ЗУП
0 |
8 / 8 / 2 Регистрация: 18.05.2012 Сообщений: 72 |
|
29.01.2021, 07:29 |
4 |
Если я Вас правильно понял, то Вам надо на форме документа/справочника создать обработчик события «СотрудникПриИзменении», в котором вызвать серверную процедуру/функцию получения данных из регистров. В принципе тебе уже это сказали выше…
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
29.01.2021, 07:39 |
5 |
McGoblin, обычная и срезпоследних плохо. надо брать из интервального.
0 |
Bormantpwnz 0 / 0 / 0 Регистрация: 10.12.2013 Сообщений: 8 |
||||
29.01.2021, 09:42 [ТС] |
6 |
|||
McGoblin, да все правильно на форме при заполнении одной строки, заполнилась другая, тк данные уже имеются в базе. Сейчас попробую по данному способу. Добавлено через 17 минут
Но при выборе нужного сотрудника в строке ФИО на форме появляется ошибка «Метод объекта не обнаружен (Найти)» Пытаюсь разобраться в чем проблема, но тк все таки не хватает знаний в понимании 1Ски это целая беда.
0 |
Yulunga |
29.01.2021, 11:47
|
Не по теме: приятно ощущать себя невидимкой )
0 |
8 / 8 / 2 Регистрация: 18.05.2012 Сообщений: 72 |
|
29.01.2021, 12:12 |
8 |
Yulunga, Не невидимка Добавлено через 2 минуты Использовать БСП — Мудро, но это тоже надо уметь,у тебя кадровые данные что возвращает? Ты хоть в отладчик загляни
0 |
0 / 0 / 0 Регистрация: 10.12.2013 Сообщений: 8 |
|
29.01.2021, 13:47 [ТС] |
9 |
Yulunga, я увидел Ваше сообщение, если Вы адресовали это мне, спасибо за информацию.
0 |
Yulunga 1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
||||
29.01.2021, 15:30 |
10 |
|||
ну только параметр дата подставить свой. и сотрудник
1 |
0 / 0 / 0 Регистрация: 10.12.2013 Сообщений: 8 |
|
29.01.2021, 16:25 [ТС] |
11 |
Yulunga, большое спасибо, сейчас попробую под себя переделать.
0 |
0 / 0 / 0 Регистрация: 10.12.2013 Сообщений: 8 |
|
01.02.2021, 11:18 [ТС] |
12 |
Всем доброго времени суток всем,
0 |
1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,159 Записей в блоге: 1 |
|
01.02.2021, 13:10 |
13 |
значит неправильно подставили.
0 |
1808 / 1228 / 442 Регистрация: 16.01.2015 Сообщений: 5,394 |
|
01.02.2021, 14:43 |
14 |
Bormantpwnz, А где сам-то код? Ни в твоем коде ни в кодеYulunga, НачалоПериода не встречается. Не надо считать форумчан экстрасенсами.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
01.02.2021, 14:43 |
14 |
Как привязать изменение одного реквизита другому?
Входные данные на форме:
Реквизит1
Реквизит2
При изменении Реквизит1.Наименование необходимо автоматическое изменение Реквизит2.Наименование. Чтобы их значения были одинаковыми.
На примере справочника «Номенклатура поставщиков». Есть привязка к справочнику «Номенклатура». В это поле указывается наименование номенклатуры. При изменении наименования должно автоматически меняться поле «Наименование» для справочника «Номенклатура поставщиков».
Как это сделать в конфигураторе?
-
Вопрос заданболее года назад
-
404 просмотра
На примере справочника «Номенклатура поставщиков» такой кейс вообще странный, потому что оно для того и сделано разными справочниками, чтобы решить проблему, когда одна и та же номенклатура, у нас и у поставщика по разному называется.
Если формально решать задачу; «при изменении реквизита изменить другой», то решение зависит от того, обычные у вас формы или управляемые. Предположу что управляемые, поскольку они используются практически во всех современных конфигурациях. Тогда нужно для реквизита1 добавить обработчик события ПриИзменении, и в нем описать алгоритм заполнения реквизита2. Чтобы в управляемых формах добавить обработчик события, нужно вызвать контектное меню реквизита1 и в пункте «События» выбрать <ПриИзменении> После чего выбрать, какой обработчик события вам нужен, на клиенте, или на клиенте с обработкой на сервере.
Пригласить эксперта
-
Показать ещё
Загружается…
22 мар. 2023, в 09:13
500 руб./за проект
22 мар. 2023, в 08:58
50000 руб./за проект
22 мар. 2023, в 08:17
800 руб./за проект
Минуточку внимания
- Опубликовано 15.03.2021 06:29
- Автор: Administrator
- Просмотров: 13939
Как часто вам достается от предыдущего бухгалтера хорошая база 1С, в которой почти нет ошибок? Да, практически, никогда! «Задвоенные», а то и «затроенные» данные, куча лишних договоров у контрагентов, некорректные счета учета, отрицательные остатки по номенклатуре – вот лишь малая часть того, с чем сталкивается новый бухгалтер. И, зачастую, совсем мало времени остается на исправление. Пользователи могут сутками вручную переносить данные на верную позицию в базе, однако в этом материале мы хотим рассказать об интересном функционале программы 1С, с помощью которого вы управитесь за считанные минуты! Речь пойдет о групповом изменении реквизитов в программе 1С: Бухгалтерия предприятия ред. 3.0.
Изменение значений реквизитов в документах
Как часто вы сталкивались с проблемой раздвоения информации по договорам или контрагенту? Например, при выгрузке из клиент-банка создался новый элемент в справочнике, и пользователь, не обратив внимание, использует оба наименования при вводе документов.
Рассмотрим на примере ИП Симоновой А.И.
В оборотно-сальдовой ведомости по счету 60 «Расчеты с поставщиками и подрядчиками» видно, что поставщик ООО «Гладиолус» повторяется дважды. Кроме этого, по второй строке ООО «Гладиолуса», в оборотах 2021 года, в документах фигурирует договор 2020 года.
Если такой случай единичный, конечно же пользователь может исправить недочет вручную. А как быть, если документов много?
В такой ситуации поможет данная обработка.
ВНИМАНИЕ: Если у вас недостаточно опыта, лучше доверить это специалистам, т.к. данная процедура необратима. И если вы всё же решите поэкспериментировать со своей базой, не забудьте сделать резервную копию.
Рассмотрим действия пошагово.
Шаг 1. Перейдите в раздел «Администрирование» — «Обслуживание».
Шаг 2. Разверните меню «Корректировка данных» и перейдите по гиперссылке «Групповое изменение реквизитов».
Кредиторская задолженность в оборотно-сальдовой ведомости по первой строке ООО «Гладиолус» образована документами «Поступление (акт, накладная, УПД)». Значит в первую очередь нам надо заменить в них ООО «Гладиолус» №1 на ООО «Гладиолус» №2. А следующим этапом приступись к обработке договоров.
Шаг 3. Выполните настройку формы.
• В поле «Изменять» укажите обрабатываемый документ. В нашем примере это «Поступление (акты, накладные, УПД)».
• Изменяемый реквизит документа отметьте галочкой «Контрагент» и в поле «Новое значение» установите ООО «Гладиолус», на который надо сделать замену.
Для того, чтобы установить дополнительные фильтры и настройки, перейдите по гиперссылке «Все элементы».
В поле «Выбранные элементы» отображаются все документы поступления. Для установления фильтра установите отбор.
Шаг 4. Нажмите кнопку «Добавить условие» и задайте: «Контрагент» равно ООО «Гладиолус». При выборе значения выберите тот элемент, который нужно заменить.
Лишние документы отсеются и останутся лишь удовлетворяющие условию отбора.
Нажмите «Ок».
Итак, задано две настройки:
Первая – отбор по контрагенту ООО «Гладиолус» (№1);
Вторая – указание нового значения поля «Контрагент» — ООО «Гладиолус» (№2).
В окне обработки нажмите «Изменить реквизиты».
Подождите окончания выполнения действия и проверьте Оборотно-сальдовую ведомость снова.
ООО «Гладиолус» у нас остался в единственном экземпляре, но с разбивкой по договорам.
Аналогично рассмотренному варианту перенесите договора «Без договора» и «Договор 2020 г.» на одну строку – «Договор 2021 г.»
Шаг 5. Выполните новую настройку.
Перейдя по гиперссылке «Все реквизиты», одновременно с отбором по контрагенту ООО «Гладиолус» (новое значение), установите отбор – «Договор» равно «Без договора».
Шаг 6. Нажмите «ОК» и в поле «Новое значение» для реквизита «Договор» укажите тот, на который производится замена – «Договор 2021».
Шаг 7. Нажмите «Изменить реквизиты».
Аналогично проделайте со вторым договором – «Договор 2020 г.». Но обратите внимание, что расхождение в данном договоре по дебету счета 60 «Расчеты с поставщиками и подрядчиками», а значит задействована оплата поставщику и документ «Списание с расчетного счета».
Шаг 8. Выберите вид обрабатываемого документа – «Списание с расчетного счета».
Перейдите по гиперссылке «Все элементы» и установите отбор по полю «Получатель» — «Контрагент» — ООО «Гладиолус» и полю «Договор» – «Договор 2020 г.».
Обратите внимание, что значение состава реквизитов в таблице меняется в зависимости от выбранного элемента обработки.
Нажмите «Изменить реквизиты». Действие замены выполнено.
Проверьте Оборотно-сальдовую ведомость по счету 60: все договора перенесены на один – «Договор 2021 г.»
Таким образом можно изменять не только реквизиты документов, но и справочников.
Изменение значений реквизитов в справочках
Например, изменим единицу измерения у товаров, находящихся в группе «Крупы».
В карточке номенклатуры товара, с одноименным названием группы – «Крупа» — установлена единица измерения – граммы. Предположим, что пользователь ошибочно, копируя при внесении в справочник номенклатуру, указал всем наименованиям эту единицу измерения. Установим с помощью обработки верное значение – килограммы.
Шаг 1. Выполните настройку, указав в поле «Изменять» справочник «Номенклатура».
Значение изменяемого реквизита «Единица» установите – «Кг».
В настройке отбора добавьте условие: «Входит в группу» равно «Крупы».
Нажмите «Ок» и кнопку выполните команду «Изменить реквизиты».
Проверим справочник «Номенклатура» группу «Крупы». Единица измерения «Кг» на входящие в нее элементы установлена.
Таким образом, можно произвести замену любого реквизита справочника.
И еще один лайфхак 1С: с помощью обработки «Групповое изменение реквизитов» можно ставить и снимать пометку на удаление.
Установка (снятие) пометки на удаление с помощью обработки
«Групповое изменение реквизитов»
Шаг 1. В нижней части обработки нажмите кнопку «Дополнительные параметры…»
Разверните пункт «Специальные возможности» и установите галочку «Показывать служебные реквизиты».
В результате этого действия в списке реквизитов появилось поле – «Пометка на удаление», где пользователь может задать значение «Да» или «Нет».
Шаг 2. Установите значение пометки на удаление «Да» и выберите объект, который надо удалить. В нашем примере обрабатываются документы «Поступление на расчетный счет».
Шаг 3. Перейдите по гиперссылке «Все элементы» и установите отбор.
Обратите внимание, если ведется учет по нескольким организациям, в условие отбора добавьте и обрабатываемую организацию.
В данном условии заложена команда – отобрать все документы «Поступления на расчетный счет», по организации «ИП Симонова А.И.», введенные датой позже 01.01.2021 года.
Нажав кнопку «Изменить реквизиты», на документы, удовлетворяющие заданному условию, установится пометка на удаление.
Одновременно установите значение реквизита проведен «Нет», чтобы при обработке система сделала их непроведенными. В противном случае 1С выдаст сообщение: «Проведенный документ не может быть помечен на удаление!»
По окончании действия обработки программа сообщит, что реквизиты изменены и покажет количество обработанных объектов.
Подведем итог: работая с большим объемом информации, пользователь может допускать некоторые ошибки, исправить которые легко можно с помощью данного инструмента, зная о его существовании.
Автор статьи: Ольга Круглова
Понравилась статья? Подпишитесь на рассылку новых материалов
Добавить комментарий
Вы здесь
Заполнение справочника частичными сведениями из другого справочника
Опубликовано вс, 05/04/2015 — 20:15 пользователем l2tp
Доброе время суток! Задача явно на 5 копеек, но пока не для меня.
Итак. Имеем два справочника. Один — перечень лекарственных средств с их описанием, другой при создании записей должен использовать сведения из первого. Т.е. как сделать, чтобы при выборе в форме элемента второго справочника наименования лекарства из первого справочника, в форму подтягивались связанные с этим наименованием поля? Какое событие используется? ПриИзменении или НачалоВыбора? Спасибо.
На чтение 6 мин. Просмотров 2.6k. Опубликовано 15.12.2019
Содержание
- Как изменить значение реквизита документа 1С?
- Изменение команд формы
- Изменение реквизитов формы
- Изменение элементов формы
- Документы
- Документы в языке 1С 8.3, 8.2 (в примерах)
Как изменить значение реквизита документа 1С?
Как изменить значение реквизита документа 1С?
Часто возникает потребность изменить какое-то значение в отдельном реквизите. И не в одном документе, в в нескольких документах. Возможно использовать запрос.
Например:
В статье был рассмотрен вопрос:
Как изменить значение реквизита документа 1С?
Платформа 1С:Предприятие позволяет программно добавлять и изменять элементы управляемой формы. Разберемся для чего это может потребоваться.
Программная модификация формы может потребоваться в нескольких случаях:
- При доработке типовых конфигураций для облегчения процедуры последующего обновления. В этом случае будет изменен только модуль формы. Модули намного проще обновлять, чем форму.
- При реализации некоторых общих алгоритмов. Например, в подсистеме БСП «Запрет редактирования реквизитов объектов» для всех подключенных к подсистеме объектов предусмотрено программное создание кнопки для включения возможности редактирования реквизитов.
- При реализации некоторых специфических алгоритмов. Например, в справочнике Номенклатура создаются поля для редактирования дополнительных реквизитов.
В управляемой форме можно программно добавить, изменить и удалить:
Все указанные операции возможны только на сервере.
Программное изменение формы имеет ограничения:
- Удалить можно только программно добавленные реквизиты/команды/элементы. Нельзя программно удалить объекты, созданные в конфигураторе.
- Нельзя назначить реквизит основным.
Изменение команд формы
Для управления составом команд у объекта УправляемаяФорма есть коллекция Команды . У коллекции есть несколько методов:
Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.
В качестве примера работы с командами формы создадим новую команду ИсторияИзменений с заголовком «История изменений…», которая будет вызвать обработчик ОтобразитьИсторию () . Создание выполняется при открытии формы.
&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ;
Команда . Заголовок = «История изменений…» ;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОтобразитьИсторию ( Команда )
// действия команды
КонецПроцедуры
Обработчик команды должен располагаться в форме и иметь директиву компиляции &НаКлиенте .
Изменение реквизитов формы
Чтение состава реквизитов формы выполняется функцией ПолучитьРеквизиты ( Путь >) , возвращающей массив типа РеквизитФормы . Параметр функции указывает путь к родительскому реквизиту (в виде строки). Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.
Изменение реквизитов выполняется методом ИзменитьРеквизиты ( ДобавляемыеРеквизиты >, УдаляемыеРеквизиты >) объекта УправляемаяФорма . В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы .
Внимание!
Процесс изменения состава реквизитов является достаточно ресурсоемким. Фактически выполняется пересоздание формы. В связи с этим работа с реквизитами формы выполняется в пакетном режиме.
Создадим новый реквизит формы с именем Покупатель:
// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив ;
ДобавляемыеРеквизиты . Добавить(Новый РеквизитФормы («Покупатель», Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));
// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
Изменение элементов формы
Для управления составом элементов у объекта УправляемаяФорма есть коллекция Элементы . У коллекции есть несколько методов:
Коллекция Элементы доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Вставить () , Добавить () , Переместить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере. Элементами коллекции могут быть:
Элементам формы можно программно назначить обработчики событий. Для этих целей предназначен метод УстановитьДействие ( ИмяСобытия >, Действие >) .
Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.
Добавление команды и связанной с ней кнопки:
// Создание команды
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ; // В форме должна быть процедура с указанным наименованием
Команда . Заголовок = «История изменений…» ;
// Создание кнопки и связь ее с командой
Элемент = Элементы . Добавить ( «ИсторияИзменений» , Тип ( «КнопкаФормы» ));
Элемент.ИмяКоманды = «ИсторияИзменений» ;
Добавление реквизита и связанного с ним поля ввода:
// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты . Добавить (Новый РеквизитФормы ( «Покупатель» , Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));
// Изменение состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
// Создание поля ввода и связь с реквизитом
Элемент = Элементы . Добавить ( «Покупатель» , Тип ( «ПолеФормы» ));
Элемент . Вид = ВидПоляФормы . ПолеВвода ;
Элемент . ПутьКДанным = «Покупатель» ;
Назначение элементу формы обработчика события:
ЭлементПокупатель . УстановитьДействие ( «ПриИзменении» , «Подключаемый_ПокупательПриИзменении» );
&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры
Внимание!
Процедурам, которые устанавливаются в качестве обработчиков событий из кода с помощью метода УстановитьДействие () , рекомендуется задавать префикс Подключаемый_.
Внимание!
Скачать обработку с примерами программного поиска и изменения реквизитов, команд и элементов управляемой формы можно ЗДЕСЬ.
Остались вопросы?
Спросите в комментариях к статье.
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Документы
Описание:
Документ — одно из основных понятий системы 1С:Предприятие. При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также ее просмотр и корректировка.
В большинстве своем документы, которые создаются в процессе настройки конфигурации задачи, являются электронными аналогами стандартных бумажных документов, являющихся основаниями для тех или иных учетных действий или расчетов. Тем не менее, использование этого типа данных может выходить далеко за рамки простой фиксации изменений, внесенных в учетные регистры.
Структура каждого конкретного вида документа определяется при его создании в конфигураторе. У любого вида документа существуют реквизиты, которые создаются автоматически — это «Дата» и «Номер». Номер создается, если при конфигурировании длина номера указана больше 0. Другие реквизиты документа определяются в конфигураторе отдельно для каждого создаваемого вида документа.
Документы в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться: