Как измени реквизит справочника при проведении документа
Автор Gendelf, 18 ноя 2013, 17:27
0 Пользователей и 1 гость просматривают эту тему.
Добрый день. В документе ПоступлениеКниги, при проведении, нужно прописать кусок кода который будет менять реквизит справочника Книга (реквизит Состояние). Проблеммы с сылкой к реквизиту справочника… как до него добраться, я не знаю.
Вот что получилось, конечно же не работает.
PS ТЧКнига — табчасть документа, в ней реквизит Книга с ссылкой к справочнику Книга.
//Смена состояния книги
Для каждого СтрокаТЧ Из ТЧКнига Цикл
ТЧКнига.Книга.Состояние = Перечисления.СостояниеКниги.ВНаличии;
КонецЦикла;
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
СтрокаТЧ.Книга.Состояние = Перечисления.СостояниеКниги.ВНаличии;
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
//Смена состояния книги
Для каждого СтрокаТЧ Из ТЧКнига Цикл
Если ЗначениеЗаполнено(ТЧКнига.Книга)
СпрОбъект = ТЧКнига.Книга.ПолучитьОбъект();
СпрОбъект.Состояние = Перечисления.СостояниеКниги.ВНаличии;
СпрОбъект.Записать();
КонецЦикла;
При
Для каждого СтрокаТЧ Из ТЧКнига Цикл
Если ЗначениеЗаполнено(ТЧКнига.Книга) Тогда
СпрОбъект = ТЧКнига.Книга.ПолучитьОбъект();
СпрОбъект.Состояние = Перечисления.СостояниеКниги.ВНаличии;
СпрОбъект.Записать();
КонецЕсли;
КонецЦикла;
Поле объекта не обнаружено (Книга)
ругается на Если….
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
Найди его в справочнике и сделай следующее
//Начало твоего цикла
//то, что ты написал
ТекущаяКнига = ТЧКнига.Книга.Ссылка; //получил ссылку на объект
ТекущаяКнига.Состояние = Перечисления.СостояниеКниги.ВНаличии;// присвоил значение реквизиту
ТекущаяКнига.Записать(); // записал элемент
//конецтвоего цикла
Добавлено: 18 ноя 2013, 17:38
Цитата: Gendelf от 18 ноя 2013, 17:34
ПриДля каждого СтрокаТЧ Из ТЧКнига ЦиклЕсли ЗначениеЗаполнено(ТЧКнига.Книга) Тогда
СпрОбъект = ТЧКнига.Книга.ПолучитьОбъект();
СпрОбъект.Состояние = Перечисления.СостояниеКниги.ВНаличии;
СпрОбъект.Записать();
КонецЕсли;
КонецЦикла;Поле объекта не обнаружено (Книга)
ругается на Если….
А с чего ты или точнее как ты собираешь ТЧКнигу?
Правильно ведите учет или пишите программы и вам воздастся!…
(Кстати — кнопочку Сказать Спасибо — никто не отменял)
Прошу прощения ступил
//Смена состояния книги
Для каждого СтрокаТЧ Из ТЧКнига Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.Книга) Тогда
СпрОбъект = СтрокаТЧ.Книга.ПолучитьОбъект();
СпрОбъект.Состояние = Перечисления.СостояниеКниги.ВНаличии;
СпрОбъект.Записать();
КонецЕсли;
КонецЦикла;
//Начало твоего цикла
//то, что ты написал
ТекущаяКнига = СтрокаТЧ.Книга.Ссылка; //получил ссылку на объект // и я ступил — понедельник день тяжелый!!
ТекущаяКнига.Состояние = Перечисления.СостояниеКниги.ВНаличии;// присвоил значение реквизиту
ТекущаяКнига.Записать(); // записал элемент
//конецтвоего цикла
Правильно ведите учет или пишите программы и вам воздастся!…
(Кстати — кнопочку Сказать Спасибо — никто не отменял)
ребят, вы меня запутали… как должен выглядить код?
Добавлено: 18 ноя 2013, 18:12
Для каждого СтрокаТЧ Из ТЧКнига Цикл
Если ЗначениеЗаполнено(ТЧКнига.Книга) Тогда
ТекущаяКнига = СтрокаТЧ.Книга.Ссылка; //получил ссылку на объект // и я ступил - понедельник день тяжелый!!
ТекущаяКнига.Состояние = Перечисления.СостояниеКниги.ВНаличии;// присвоил значение реквизиту
ТекущаяКнига.Записать(); // записал элемент
КонецЕсли;
КонецЦикла;
так вроде?
Добавлено: 18 ноя 2013, 18:15
Поле объекта не обнаружено (Книга)
на 2 строке…
ужас, как сложно то.
Логика приведёт вас от А к В. Воображение доставит вас куда угодно.
Сайт про аквариум, аквариумные рыбки и аквариумные растения http://myaquainfo.ru/
Программно изменить реквизит справочника |
Я |
26.10.07 — 17:46
ДОброго времени суток, товарищи помогите решить вот такую проблему,
ну могу программно записать в справочнике «Контрагенты» — реквизит -(Справочники.Организации) т.е. справочник.Организации подчинен контрагентам, как можно вписать туда значение?
Заранее спасибо!
1 — 26.10.07 — 17:49
Владелец
ПолучитьОбъект
Записать
+ код в студию
2 — 26.10.07 — 17:49
еще небольшая добавка
Имею Справочник контрагентов, в него надо добавить коды из XLS файла
Все считывается но никак не могу записать реквизит… при записи выходит сообщение «реквизит недоступен для редактиварония»
3 — 26.10.07 — 17:51
можно чуть чуть подробнее, я не сильно понял что куда девать
4 — 26.10.07 — 18:03
надо работать собъектом а не со ссылкой на него. судя по (2) работаешь со ссылкой
5 — 26.10.07 — 18:12
СпрКОнтр = Справочники.Контрагенты;
СпрСегмент = Справочники.СегментацияКлиентов;
Для Ячейка = 1 По 1419 Цикл
КодКонтрагента = СокрЛП(ТекЛист.Cells(Ячейка,1).Value);
Классификатор = СокрЛП(ТекЛист.Cells(Ячейка,2).Value);
НайденныйЭлемент = СпрКонтр.НайтиПоКоду(КодКонтрагента);
ТекущийОБъект = НайденныйЭлемент.ПолучитьОбъект();
ТекущийОБъект.СегментацияКонтрагентов = СпрСегмент.НайтиПоНаименованию(Классификатор);
ТекущийОБъект.Записать();
КонецЦикла;
вот код, кто нибудь может подсказать где ошибка
6 — 26.10.07 — 18:16
(5)а какая ошибка?
7 — 26.10.07 — 18:20
Не удается все это дело записать
8 — 26.10.07 — 18:21
СпрКОнтр = Справочники.Контрагенты;
СпрСегмент = Справочники.СегментацияКлиентов;
Для Ячейка = 1 По 1419 Цикл
КодКонтрагента = СокрЛП(ТекЛист.Cells(Ячейка,1).Value);
Классификатор = СокрЛП(ТекЛист.Cells(Ячейка,2).Value);
НайденныйЭлемент = СпрКонтр.НайтиПоКоду(КодКонтрагента);
Если НайденныйЭлемент = СпрКонтр.ПустаяСсылка() Тогда
Сообщить(«Я долпоёБ!!!!»);
Продолжить;
КонецЕсли;
ТекущийОБъект = НайденныйЭлемент.ПолучитьОбъект();
ТекущийОБъект.СегментацияКонтрагентов = СпрСегмент.НайтиПоНаименованию(Классификатор);
ТекущийОБъект.Записать();
КонецЦикла;
9 — 26.10.07 — 18:21
{Форма.Форма(20)}: Ошибка при вызове метода контекста (Записать): Операция не выполнена!
ТекущийОБъект.Записать();
по причине:
Операция не выполнена!
и при этом сообщает что такая запись уже есть
10 — 26.10.07 — 18:25
СегментацияКонтрагентов — это точно реквизит?
11 — 26.10.07 — 18:26
да это реквизит, с типом СправочникСсылка.СегментацияКонтрагентов
12 — 26.10.07 — 18:30
(11)да там скорее всего при записи «Контрагента» происходит создание/запись еще чегото
смотри ПриЗаписи в модулеФормы/модулеОбъекта
13 — 26.10.07 — 18:33
а еще было бо неплохо пройтись отладчиком.
14 — 26.10.07 — 18:35
да ну видать пока что ума не хватает на решение, отладчиком я проходился… ничего не нашел…ну в любом случае спасибо за рекомендт
15 — 26.10.07 — 18:40
(14) отладчиком, ПередЗаписью и ПриЗаписи, модуля объекта справочника прошелся?
смотри может где при записи в РС вылетает
13th
16 — 26.10.07 — 18:50
А открытых элеметов справочника «Контрагентов» нет в это время?
Программно можно создавать новые элементы, изменять существующие, удалять, искать элементы по коду, наименованию, реквизитам и т.п. Но нельзя программно добавить новый справочник в конфигурацию. Это выполняется только интерактивно в дереве метаданных.
СправочникиМенеджер
Объект СправочникиМенеджер предназначен для управления всеми справочниками конфигурации. Через цикл можно получить доступ к менеджеру каждого справочника:
//перебор всех менеджеров справочников: Для Каждого Мен Из Справочники Цикл //Мен - менеджер конкретного справочника КонецЦикла;
Также можно обратиться к менеджеру справочника через точку или через квадратные скобки:
//Получение менеджера конкретного справочника:
МенТовары = Справочники.Товары;
МенТовары = Справочники[«Товары»];
Также через СправочникиМенеджер можно проверить является ли ссылка справочником:
//какая-то ссылка, нужно узнать это ссылка на справочник или нет ПростоСсылка = ПолучитьКакуюТоСсылку(); //получим описание типов со всеми типами справочников конфигурации ВсеСправочникиКонфигурации = Справочники.ТипВсеСсылки(); //проверяем Если ВсеСправочникиКонфигурации.СодержитТип(ТипЗнч(ПростоСсылка)) Тогда //да, это справочник Иначе //нет, что-то другое КонецЕсли;
Программное создание элемента справочника
Для программного создания элементов есть метод СоздатьЭлемент. Для программного создания групп — метод СоздатьГруппу:
НовыйТовар = Справочники.Товары.СоздатьЭлемент(); НовыйТовар.Наименование = "Клавиатура"; //...заполнение прочих реквизитов //запись в базу НовыйТовар.Записать(); НоваяГруппаТоваров = Справочники.Товары.СоздатьГруппу(); НоваяГруппаТоваров.Наименование = "Комплектующие"; //...заполнение прочих реквизитов //запись в базу НоваяГруппаТоваров.Записать();
Программное изменение элементов справочника
Для того чтобы изменить реквизиты уже существующего элемента справочника нужно через ссылку получить объект методом ПолучитьОбъект, через объект изменить значения реквизитов и записать измененный объект в базу данных:
//функция вернула какую-то ссылку на справочник Товары СсылкаНаТовар = СсылкаНаТовар(); //получам объект из ссылки ТоварОбъект = СсылкаНаТовар.ПолучитьОбъект(); //меняем наименование ТоварОбъект.Наименование = ТоварОбъект.Наименование + " (изменение)"; //записываем ТоварОбъект.Записать();
Программное копирование элемента справочника
Методом Скопировать можно создать копию элемента справочника. Данный метод можно вызывать как у ссылки, так и у объекта:
//через ссылку КопияИзСсылки = СсылкаНаТовар.Скопировать(); КопияИзСсылки.Записать(); //через объект ТоварОбъект = СсылкаНаТовар.ПолучитьОбъект(); КопияИзОбъекта = ТоварОбъект.Скопировать(); КопияИзОбъекта.Записать();
Программное удаление элемента справочника
Для удаления применяются два метода: УстановитьПометкуУдаления и Удалить. Метод УстановитьПометкуУдаления только установит пометку на удаление, сам элемент не будет удален из базы данных. Метод Удалить удалит элемент из базы данных без проверки ссылочной целостности. То есть, если на этот элемент были ссылки в других местах, то теперь вместо ссылки будет надпись «Объект не найден». Не рекомендуется пользоваться методом Удалить. Важно отметить, что вызов метода УстановитьПометкуУдаления вызывает запись объекта. Дополнительно записывать объект не нужно.
ТоварОбъект = СсылкаНаТовар.ПолучитьОбъект(); ТоварОбъект.УстановитьПометкуУдаления(Истина); //также будут помечены на удаление все подчиненные элементы //без пометки удаления подчиненных элементов: ТоварОбъект.УстановитьПометкуУдаления(Истина, Ложь); //снятие пометки на удаление ТоварОбъект.УстановитьПометкуУдаления(Ложь); //удаление без проверки ссылочной целостности ТоварОбъект.Удалить(); //также удалит все вложенные элементы
Программный поиск по справочнику
Для поиска используются методы НайтиПоКоду, НайтиПоНаименованию и НайтиПоРеквизиту.
НайтиПоКоду
//поиск по коду ТоварСсылка = Справочники.Товары.НайтиПоКоду("000000008"); //по полному коду. Полный код включает в себя все коды родителей: //код родителя/код элемента ТоварСсылка = Справочники.Товары.НайтиПоКоду("000000003/000000008", Истина); //поиск в пределах одной группы, Группа - ссылка на группу справочника ТоварСсылка = Справочники.Товары.НайтиПоКоду("000000008",, Группа); //поиск в пределах владельца, Владелец - ссылка на владельца ТоварСсылка = Справочники.Товары.НайтиПоКоду("000000008",,, Владелец);
НайтиПоНаименованию
//поиск по наименованию, должна совпадать левая часть ТоварСсылка = Справочники.Товары.НайтиПоНаименованию("Смартфон"); //будут найдены и "Смартфон" и "Смартфон самсунг", но метод вернет первый //попавшийся элемент //точное совпадение, кроме хвостовых пробелов //будет найден только Смартфон ТоварСсылка = Справочники.Товары.НайтиПоНаименованию("Смартфон", Истина); //поиск в пределах одной группы, Группа - ссылка на группу справочника ТоварСсылка = Справочники.Товары.НайтиПоНаименованию("Смартфон",, Группа); //поиск в пределах владельца, Владелец - ссылка на владельца ТоварСсылка = Справочники.Товары.НайтиПоНаименованию("Смартфон",,,Владелец);
Для обоих методов если элемент не будет найден, то метод вернет пустую ссылку. Если для справочника указана нулевая длина кода или наименования, то метод вернет Неопределено.
НайтиПоРеквизиту
//поиск по реквизиту, 1-ый параметр имя реквизита, 2-ой значение ТоварСсылка = Справочники.Товары.НайтиПоРеквизиту("Артикул", "Арт001"); //поиск в пределах одной группы, Группа - ссылка на группу справочника ТоварСсылка = Справочники.Товары.НайтиПоРеквизиту("Артикул", "Арт001", Группа); //поиск в пределах владельца, Владелец - ссылка на владельца ТоварСсылка = Справочники.Товары.НайтиПоРеквизиту("Артикул","Арт1",,Владелец);
Если элемент не будет найден, то метод вернет пустую ссылку. Если есть несколько элементов с таким значением реквизита, то вернется первый попавшийся элемент.
Выборка справочника
Для выборки всех элементов справочника используются методы Выбрать и ВыбратьИерархически. Метод Выбрать получает прямую выборку. Метод ВыбратьИерархически получает выборку с учетом иерархии, сразу после выборки группы будут идти элементы из этой группы. В обоих методах можно выполнять отбор по родителю, по владельцу, а также по индексированным полям. Последним параметром можно указать поля для сортировки выборки:
//отбор по артикулу. Поле артикул должно быть проиндексировано //в отборе может быть только одно поле. ОтборАрт = Новый Структура("Артикул", ""); ВыборкаСпр = Справочники.Товары.Выбрать(,, ОтборАрт, "Наименование Убыв"); Пока ВыборкаСпр.Следующий() Цикл Сообщить(ВыборкаСпр.Наименование); КонецЦикла; //выборка будет отсортирована по убыванию поля Наименование //по умолчанию сортируется по основному представлению. Можно указать только //Код, наименование или проиндексированный реквизит примитивного типа. //отбор по родителю или владельцу: ВыборкаСпр = Справочники.Товары.Выбрать(Группа); ВыборкаСпр = Справочники.Товары.Выбрать(, Владелец); //иерархическая выборка, сначала группы, потом элементы из этой группы ВыборкаСпр = Справочники.Товары.ВыбратьИерархически(); //можно получить уровень элемента (для верхнего = 0) Сообщить(ВыборкаСпр.УровеньВВыборке()); //из выборки можно получить объект Пока ВыборкаСпр.Следующий() Цикл ТоварОбъект = ВыборкаСпр.ПолучитьОбъект(); КонецЦикла;
Получение ссылки по уникальному идентификатору
С помощью метода УникальныйИдентификатор можно получить уникальный идентификатор от ссылки справочника. Чтобы через уникальный идентификатор получить ссылку на справочник используется метод ПолучитьСсылку:
//получение УИД ссылки УИДСпр = ТоварСсылка.УникальныйИдентификатор(); //получение ссылки по УИД ТоварСсылка = Справочники.Товары.ПолучитьСсылку(УИДСпр); ТоварОбъект = Ссылка.ПолучитьОбъект(); //если после получения объекта от ссылки он равен Неопределено, //значит этой ссылки не соответствует ни один объект базы данных Если ТоварОбъект = Неопределено Тогда //нет такого объекта КонецЕсли;
Также с помощью метода УстановитьСсылкуНового можно установить новому объекту определенный идентификатор. Например, из другой базы был выгружен элемент справочника. В текущей базе нужно создать новый элемент с таким же идентификатором. Для этого можно воспользоваться следующим кодом:
//переменная УИДСтрокой - это строка с идентификатором из другой базы УИДСпр = Новый УникальныйИдентификатор(УИДСтрокой); ТоварСсылка = Справочники.Товары.ПолучитьСсылку(УИДСпр); ТоварОбъект = Справочники.Товары.СоздатьЭлемент(); ТоварОбъект.УстановитьСсылкуНового(ТоварСсылка); //параметром передается именно ссылка, а не идентификатор //...заполнение реквизитов ТоварОбъект.Записать(); //уникальный идентификатор нового объекта будет равен уникальному //идентификатору из другой базы
Прочие методы
//получение макета МакетСпр = Справочники.Товары.ПолучитьМакет("ИмяМакета"); //можно через объект МакетСпр = ТоварОбъект.ПолучитьМакет("ИмяМакета"); //получить полное наименование или код с учетом вложенности через / ПолноеНаименование = ТоварСсылка.ПолноеНаименование(); ПолныйКод = ТоварСсылка.ПолныйКод(); //принадлежит ли элемент определенной группе Если ТоварСсылка.ПринадлежитЭлементу(СсылкаНаГруппу) Тогда Сообщить("Принадлежит"); КонецЕсли; //уровень вложенности, если не в группе, то вернет 0 УровеньИерархии = ТоварСсылка.Уровень(); //определить пустая ссылка или нет Если ТоварСсылка.Пустая() Тогда //пустая КонецЕсли; //получение пустой ссылки ПустойТовар = Справочники.Товары.ПустаяСсылка();
Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра «Кто хочет стать миллионером?» с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, нидерландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки
0
Как изменить наименование элемента справочника?
Нужно получить ссылку запросом или найти из справочника по: коду, наименованию или реквизиту.Например вот так:
Код 1C v 8.х
Элемент = Справочники.Номенклатура.НайтиПоНаименованию("Товар").ПолучитьОбъект();
Элемент.Наименование = "Новое наименование";
Элемент.Записать();
или так:
Код 1C v 8.х
номен = Справочники.Номенклатура;
элементСсылка = номен.НайтиПоНаименованию("Наименование-ля-ля");
Если НЕ элементСсылка.Пустая() тогда
Сообщить("Найден элемент " + элементСсылка);
конецЕсли;
элементОбъект = элементСсылка.ПолучитьОбъект();
элементОбъект.Наименование = "Новое Наименование - Тру -ля- ля";
элементОбъект.Записать();
&НаСервере Процедура СозданиеИИзменениеЭлементовИГруппСправочникаНаСервере() /// Как создать новый элемент справочника в 1с 8.3, 8.2 // создадим новый элемент справочника Города // с именем Владивосток Владивосток = Справочники.Города.СоздатьЭлемент(); Владивосток.Наименование = "Владивосток"; Владивосток.Записать(); /// Как создать новую группу справочника в 1с 8.3, 8.2 // создадим новую группу справочника Города ГородаУМоря = Справочники.Города.СоздатьГруппу(); ГородаУМоря.Наименование = "Города у моря"; ГородаУМоря.Записать(); /// Как перенести элемент справочника в другую группу в 1с 8.3, 8.2 // перенесём созданный Владивосток в группу "Города у моря" Владивосток.Родитель = ГородаУМоря.Ссылка; Владивосток.Записать(); /// Как внести изменения в элемент справочника по ссылке /// в 1с 8.3, 8.2 // найдём город Калькутта КалькуттаСсылка = Справочники.Города.НайтиПоНаименованию("Калькутта"); Если Не КалькуттаСсылка.Пустая() Тогда // изменим и запишем численность жителей в городе Калькутта = КалькуттаСсылка.ПолучитьОбъект(); Калькутта.Численность = 1000000; Калькутта.Записать(); КонецЕсли; /// Как получить и проверить пустую ссылку типа справочник в 1с 8.3, 8.2 ПустаяСсылка = Справочники.Города.ПустаяСсылка(); Если ПустаяСсылка.Пустая() Тогда Сообщить("Ссылка действительно пустая."); КонецЕсли; /// Как узнать принадлежность элемента справочника группе /// с учетом уровней иерархии в 1с 8.3, 8.2 ПермьСсылка = Справочники.Города.НайтиПоНаименованию("Пермь"); РоссияСсылка = Справочники.Города.НайтиПоНаименованию("Россия"); // проверим принадлежит ли город Пермь группе Россия Если ПермьСсылка.ПринадлежитЭлементу(РоссияСсылка) Тогда Сообщить("Элемент Пермь находится в группе Россия."); КонецЕсли; /// Как скопировать существующий элемент справочника в 1с 8.3, 8.2 // скопируем элемент Пермь КопияПерми = ПермьСсылка.Скопировать(); КопияПерми.Наименование = КопияПерми.Наименование + " КОПИЯ"; КопияПерми.УстановитьНовыйКод(); КопияПерми.Записать(); /// Как выяснить уровень вложенности элемента справочника /// в 1с 8.3, 8.2 Сообщить(КопияПерми.Уровень()); // 1 /// Как заблокировать элемент справочника перед изменениями /// в 1с 8.3, 8.2 // выполним блокировку элемента справочника // от изменения другими режимами или пользователями Пермь = ПермьСсылка.ПолучитьОбъект(); Если Не Пермь.Заблокирован() Тогда Пермь.Заблокировать(); // тут идёт какой-то долгий алгоритм // в результате которого мы меняем // заблокированный элемент Пермь.Численность = 5000; Пермь.Записать(); // и только потом освобождаем его // для других режимов и пользователей Пермь.Разблокировать(); КонецЕсли; /// Как заполнить новый элемент справочника на основании /// в 1с 8.3, 8.2 // в модуле справочника Города я определил процедуру // ОбработкаЗаполнения, которая обрабатывает ситуации // когда мы заполняем один элемент на основании // данных другого (см. в базе для скачивания) Хабаровск = Справочники.Города.СоздатьЭлемент(); Хабаровск.Заполнить( Справочники.Города.НайтиПоНаименованию("Рио-де-Жанейро") ); Хабаровск.Наименование = "Хабаровск"; Хабаровск.Записать(); /// Как пометить на удаление элемент справочника в 1с 8.3, 8.2 // пометим на удаление только что созданный Хабаровск Хабаровск.УстановитьПометкуУдаления( Истина, // пометка удаления Ложь // включая подчиненные (если речь о группе справочника) ); // метод Записать вызывать не нужно КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьКлиентаПоИмени(Имя) Возврат Справочники.Клиенты.НайтиПоНаименованию(Имя); КонецФункции /// Как открыть форму существующего элемента справочника /// по ссылке в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСуществующегоЭлементаСправочника(Команда) СсылкаНаЭлемент = ПолучитьКлиентаПоИмени("Андрей"); ПараметрыФормы = Новый Структура("Ключ", СсылкаНаЭлемент); ОткрытьФорму( "Справочник.Клиенты.ФормаОбъекта", // имя формы ПараметрыФормы // параметры для формы ); КонецПроцедуры /// Как открыть форму существующей группы справочника /// по ссылке в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСуществующейГруппыСправочника(Команда) СсылкаНаГруппу = ПолучитьКлиентаПоИмени("Vip"); ПараметрыФормы = Новый Структура("Ключ", СсылкаНаГруппу); ОткрытьФорму( "Справочник.Клиенты.ФормаГруппы", // имя формы ПараметрыФормы // параметры для формы ); КонецПроцедуры /// Как открыть форму выбора элемента справочника и /// отследить её закрытие в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуВыбораЭлементаСправочника(Команда) ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораЭлемента", ЭтотОбъект); ОткрытьФорму( "Справочник.Клиенты.ФормаВыбора",,,,,,ОповещениеОЗакрытии ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораЭлемента(Результат, Параметры) Экспорт Если Результат <> Неопределено Тогда Сообщить("Был выбран элемент " + Результат); КонецЕсли; КонецПроцедуры /// Как открыть форму выбора группы справочника и /// отследить её закрытие в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуВыбораГруппыСправочника(Команда) ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораГруппы", ЭтотОбъект); ОткрытьФорму( "Справочник.Клиенты.ФормаВыбораГруппы",,,,,,ОповещениеОЗакрытии ); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораГруппы(Результат, Параметры) Экспорт Если Результат <> Неопределено Тогда Сообщить("Была выбрана группа " + Результат); КонецЕсли; КонецПроцедуры /// Как открыть форму списка справочника и /// установить отбор по реквизиту в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормаСпискаСправочникаСОтбором(Команда) // откроем список клиентов, оставив // только мужчин ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Пол", ПолучитьПеречислениеМужской()); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора); ОткрытьФорму( "Справочник.Клиенты.ФормаСписка", ПараметрыФормы ); КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьПеречислениеМужской() Возврат Перечисления.Пол.Мужской; КонецФункции /// Как открыть форму списка справочника с нужным отображением /// в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуСпискаСправочникаСНужнымОтображением(Команда) // откроем список клиентов с отображением "Список" ФормаСписка = ПолучитьФорму("Справочник.Клиенты.ФормаСписка"); ФормаСписка.Открыть(); ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список; КонецПроцедуры /// Как открыть форму только что созданного, но ещё /// не записанного элемента справочника в 1с 8.3, 8.2 &НаКлиенте Процедура КакОткрытьФормуНовогоНеЗаписанногоСправочника(Команда) // получаем форму нового справочника ФормаНовогоСправочника = ПолучитьФорму( "Справочник.Еда.ФормаОбъекта",,, Истина); // делаем копию её данных (так как напрямую их менять // нельзя) КопияДанныхФормы = ФормаНовогоСправочника.Объект; // заполняем эти данные на сервере ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы); // копируем заполненные данные в исходную форму КопироватьДанныеФормы(КопияДанныхФормы, ФормаНовогоСправочника.Объект); // показываем форму нового заполненного // элемента справочника пользователю ФормаНовогоСправочника.Открыть(); КонецПроцедуры &НаСервере Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы) // преобразуем данные формы в документ Еда = ДанныеФормыВЗначение(ДанныеФормы, Тип("СправочникОбъект.Еда")); Еда.Наименование = "Груша"; Еда.Калорийность = 500; // преобразуем документа обратно в данные формы ЗначениеВДанныеФормы(Еда, ДанныеФормы); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере
Групповая обработка справочников и документов это очень удобный инструмент платформы 1С, предназначенный для массового изменения реквизитов (в том числе дополнительных) в документах, справочниках а также их табличных частях.
Групповое изменение реквизитов в списках документов и списках справочников
Перед тем как искать групповую обработку справочников и и документов, предлагаю вам воспользоваться возможностью редактировать реквизиты документов и справочников которая появилась только в 1С 8.3 на управляемых формах и есть сейчас в большинстве типовых конфигураций.
Заключается она в том, что вы можете находясь прямо в списке документов или списке справочника выделить нужные элементы зажав кнопку «Shift» или «Ctrl» и щелкая по ним мышью. А затем нажать на правую кнопку мыши и в выпавшем меню нажать «Изменить выделенные».
В открывшемся окне вы можете менять реквизиты, проводить, отменять проведение, помечать на удаление. Если этих возможностей для вас недостаточно, если нужен гибкий отбор элементов или просто их очень много, тогда уже лучше воспользоваться групповой обработкой справочников и документов.
Например в конфигурациях УТ 11 и Бухгалтерия 3.0 она находится в меню НСИ и Администрирование/ Обслуживание/ Корректировка данных/ Групповое изменение реквизитов.
Меню Администрирование
Т.е. по сути данная обработка в 1C 8.3 называется «Групповое изменение реквизитов».
Меню Обслуживание
Как поменять реквизит сразу в нескольких элементах справочника/документах?
Рассмотрим на реальном примере. Смена ставки НДС. Не так давно всем кто использовал ставку НДС 18 % пришлось менять ее на 20 %. У тех кто установил последние обновления, смена ставки произошла автоматически, но не все устанавливают обновления. Ставка НДС в большинстве конфигураций указывается в карточке номенклатуры, т.е. ставка НДС это реквизит справочника номенклатуры, а значит чтобы ее заменить мы можем воспользоваться групповой обработкой. Что нам для этого нужно сделать:
- Открываем обработку и указываем в ней, что мы хотим менять справочник номенклатура
Выбор справочника
- Задаем отбор для элементов которые мы будем менять. Для этого нужно нажать на ссылку «Все элементы», после чего вам откроется окно в котором можно задать параметры отбора. В нашем случае, это все элементы номенклатуры в которых ставка НДС 18 %. Добавим это условие по кнопке «Добавить условие отбора». И нажмем ОК для того чтобы этот отбор применился.
Условия отбора
- Далее нам нужно задать на что мы собираемся поменять данный реквизит. Ищем в таблице реквизитов нужный реквизит, в нашем примере — Ставка НДС. И задаем его новое значение — 20 %.
Новое значение реквизита
- Теперь нам осталось только нажать на кнопку «Изменить реквизиты» и дождаться завершения работы обработки. После чего мы увидим вот такую надпись.
Окончание работы обработки
Готово, реквизиты изменены. Обработка сэкономила нам кучу времени. Только представьте себе сколько времени вы бы вручную меняли 195 элементов:)
Как поменять (заполнить) значения дополнительного реквизита справочника/документа?
Точно также как и с обычными реквизитами. Рассмотрим на примере. Допустим мы создали дополнительный реквизит «Категория» для номенклатуры. Категория может быть «Стандарт» либо «Расширенный». Реквизит изначально у нас пустой во всей номенклатуре, как же нам быстро его проставить для всех элементов?
- Открываем групповую обработку и задаем отбор, который позволит нам вычленить те элементы, для которых мы хотим установить значение доп. реквизита «Стандарт», допустим такие:
Условия отбора
- Далее ищем в списке наш дополнительный реквизит и задаем ему нужное значение:
Новое значение доп. реквизита
- Далее проделываем то же самое для заполнения дополнительного реквизита в номенклатуре следующей категории.
Готово — вы проставили значения дополнительных реквизитов во всей номенклатуре и не потратили много времени.
Как поменять реквизит в табличной части документа/справочника?
Рассмотрим также на примере — допустим вы что-то перепутали и в течение длительного времени выбирали не ту номенклатуру в документах, как теперь это исправить? Это также можно сделать при помощи групповой обработки. Если вы хотите менять реквизиты в документах или их табличных частях — сначала нужно отменить проведение этих документов, иначе сменить реквизит не удастся.
- Открываем обработку. Выбираем тип документов в которых вы хотите поменять номенклатуру. Мы выберем Реализации. После чего рядом с вкладкой реквизиты появятся также и вкладки с табличными частями, которые есть в данных документах.
Выбор типа документов для изменения
- Далее мы задаем отбор — отобрать все реализации — где в табличной части Товары наша ошибочно выбранная номенклатура:
Отбор для табличной части
- Нажимаем ОК и на вкладке «Товары» задаем ту номенклатуру на которую нужно заменить.
Новый реквизит табличной части
- Нажимаем «Изменить реквизиты» и дожидаемся окончания работы обработки.
- Проводим документы.
Готово — мы поменяли реквизит в табличной части документа и сделали все это автоматически! Если вы хотите узнать какие еще есть обработки, которые могут облегчить вам жизнь, записывайтесь на мой онлайн курс — «Сам себе Программист 1С»).
В данной статье мы рассмотрим, как можно изменить реквизиты сразу у нескольких элементов какого-либо документа или справочника. В качестве примера все действия будут производиться на демо-базе 1С 8.3 Бухгалтерия 3.0.
Такие ситуации встречаются довольно часто, а причин их множество. Только представьте, насколько неудобно и трудозатратно было бы совершать данную операцию для каждого документа по отдельности.
В программе 1С 8.3 (на управляемых формах) существуют два основных способа групповой обработки справочников и документов:
- из формы списка;
- при помощи стандартной обработки.
Первый способ достаточно прост, и любой пользователь без труда с ним справится. Второй же предназначен для администраторов и имеет гораздо больший функционал, например, изменение реквизитов в табличных частях.
Давайте начнем от простого к сложному. Рассмотрим как пользоваться обработкой в первом варианте.
Содержание
- Изменение справочников и документов из формы списка
- Стандартная обработка «Групповое изменение реквизитов»
- Введение новых значений
- С помощью произвольного алгоритма
Изменение справочников и документов из формы списка
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!
Предположим, в нашем примере нам нужно изменить ставку НДС сразу у нескольких номенклатурных позиций одноименного справочника. Для этого нам необходимо открыть его форму списка.
Выделите те позиции, которые должны подвергнуться изменению. Это можно сделать левой кнопкой мыши и зажатой клавишей на клавиатуре «Ctrl» или «Shift». Если все элементы идут подряд, то их можно выделить не мышкой, а стрелками вверх и вниз на клавиатуре.
Не снимая выделения, нажмите по одному из элементов правой кнопкой мыши и выберите пункт «Изменить выделенные» в появившемся контекстном меню.
Далее перед вами откроется окно, в левом верхнем углу которого будет отображаться, сколько элементов подлежит изменению. В табличной части ниже укажите, какие реквизиты нужно изменить, и какое значение им задать. В нашем случае мы установим у всех номенклатурных позиций в поле «% НДС» — «Без НДС».
Так же, данная обработка позволяет изменять не только несколько элементов одновременно, но и несколько групп со всеми подчиненными элементами. Для этого в форме настройки реквизитов нажмите на кнопку «Дополнительные параметры» и в открывшемся окне установите флаг в пункте «Обрабатывать дочерние элементы».
После того, как вы установили все нужные настройки, нажмите в форме указания реквизитов на кнопку «Изменить реквизиты». При большом количестве изменяемых данных, выполнение данной операции моет занять длительное время. По завершению программа выдаст соответствующее уведомление.
Теперь в той же форме списка мы видим, что процент НДС изменился во всех выделенных нами позициях.
Стандартная обработка «Групповое изменение реквизитов»
Несомненно, описанный выше способ очень прост в использовании и не требует особых навыков и прав доступа у пользователя, но, к сожалению, он не всегда может быть применим. Тогда на помощь приходит стандартная обработка, которая расположена в разделе «Администрирование» — «Поддержка и обслуживание». Так же вы можете ее найти в обработках через меню «Все функции».
Перед вами откроется форма самой обработки. В верхнем поле «Изменять» мы выберем документы «Реализация (акты, накладные)». Правее появится гиперссылка «Все элементы». Нажав на нее можно настроить отбор для выбора не всех документов, а лишь части по какому-то критерию.
В открывшейся форме отбора укажем, что нас нужны только документы с декабря прошлого года. Это можно сделать в верхнем поле окна. Отборов может быть сколько угодно. В нижней же его части динамически отбираются те документы, которые соответствуют указанному отбору. В нашем случае будет обрабатываться всего 56 документов.
Теперь нам нужно указать, какие данные и чем мы будем заменять. Обработка позволяет редактировать не только реквизиты шапки, но и табличные части. Они размещены в качестве вкладок на форме обработки.
Введение новых значений
Данная обработка позволяет, как жестко задавать значения реквизитов, так и использовать гибкие алгоритмы. В первом случае все намного проще. Этот режим установлен по умолчанию при открытии обработки и может переключаться соответствующей кнопкой.
Для простоты примера мы будем устанавливать везде в качестве склада «Основной склад». После внесения всех изменений, нажмите на кнопку «Изменить реквизиты».
При нажатии на кнопку «Дополнительные параметры» вы можете немного расширить возможность настроек изменения реквизитов, например, изменять служебные реквизиты.
С помощью произвольного алгоритма
Данный режим более гибкий, чем предыдущий, но тут не обойтись без базовых навыков в программировании. Включить его можно, нажав на кнопку «Выполнить произвольный алгоритм».
В левой части обработки нужно описать сам алгоритм, а в правой ее части для удобства расположены реквизиты нашего документа.
В нижней части формы вы можете указать, записывается изменяемый вами объект автоматически, либо данное условие будет указано в вашем алгоритме. Так же вы можете отключить использование безопасного режима при выполнении группового изменения реквизитов.













