Заполнить реквизиты справочника обработка 1с

Здравствуйте, помогите решить вот такую проблему: в справочнике «Номенклатура» необходимо заполнить реквизит Бренд (он уже создан) из обработки. Данные в обработку добавляются из Excel.

Заранее спасибо!

Процедура ЗагрузитьБрэнд()

    
    Для Каждого Элемент Из Товары Цикл

        СпрНом = Справочники.Номенклатура;

        Условие = НоменклатураПоКоду(СокрЛП(Элемент.Штрихкод));

           Если(Условие = Неопределено) Тогда

            Сообщить(«Не найдена номенклатура с кодом: » + Элемент.Штрихкод,СтатусСообщения.ОченьВажное);

        Иначе    

            НоменкОбъект = Условие.ПолучитьОбъект();

            
            НоменкОбъект.Брэнд = Товары.Брэнд;

            Попытка

                НоменкОбъект.Записать();

            Исключение

                Сообщить(ОписаниеОшибки());

            КонецПопытки;

        КонецЕсли;    

    КонецЦикла;

    
    Попытка

        Обработка = Обработки.РегламентныеЗагрузкаНоменклатуры.Создать();

        Обработка.ОчиститьУзлыНоменклатуры();

    Исключение

    КонецПопытки;

    
    Предупреждение(«Загружено»);

    
Конецпроцедуры

Функция НоменклатураПоКоду(Код)

    Попытка

    Номенклатура = НайтиНоменклатуруПоPLU(Число(Код));

Исключение

    КонецПопытки;

    Если Номенклатура = Неопределено Тогда

        Номенклатура = НайтиНоменклатуруПоШК(СтрЗаменить(Код,» «,»»));

    КонецЕсли;

    
    Возврат Номенклатура;

    
КонецФункции

Функция НайтиНоменклатуруПоPLU(КодPLU)

    
    Запрос = Новый Запрос;

    Запрос.Текст = «ВЫБРАТЬ

                   |    КодыТоваровPLU.Номенклатура

                   |ИЗ

                   |    РегистрСведений.КодыТоваровPLU КАК КодыТоваровPLU

                   |ГДЕ

                   |    КодыТоваровPLU.Код = &Код»;

    Запрос.УстановитьПараметр(«Код»,КодPLU);

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

    Если Выборка.Следующий() Тогда        

        Возврат Выборка.Номенклатура.Ссылка;

    КонецЕсли;

    
    Возврат Неопределено;

    
КонецФункции

Функция НайтиНоменклатуруПоШК(Код)

    
    Запрос = Новый Запрос;

    Запрос.Текст = «ВЫБРАТЬ

                   |    Штрихкоды.Владелец КАК Номенклатура

                   |ИЗ

                   |    РегистрСведений.Штрихкоды КАК Штрихкоды

                   |ГДЕ

                   |    Штрихкоды.Штрихкод = &Код»;

    Запрос.УстановитьПараметр(«Код»,Код);

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

    Если Выборка.Следующий() Тогда        

        Возврат Выборка.Номенклатура.Ссылка;

    КонецЕсли;

    
    Возврат Неопределено;

    
КонецФункции

На чтение 6 мин Просмотров 11.1к. Опубликовано 26.04.2017

Справочники в 1С — это объекты конфигурации, предназначенные для хранения данных, имеющих одинаковую структуру и носящие списочный характер. Например, в справочниках может храниться: перечень номенклатуры, контрагентов, сотрудников, банковских счетов и т.д. В статье рассматриваются базовые принципы работы с этим объектом метаданных.

  • Создание элемента справочника
  • Поиск элементов справочника
  • Изменение элементов справочника
  • Удаление элементов справочника
  • Обход элементов справочника
  • Выбор элементов справочника запросом
  • Открытие форм справочника

Содержание

  1. Создание элемента справочника
  2. Поиск элементов справочника
  3. Изменение элементов справочника
  4. Удаление элементов справочника
  5. Обход элементов справочника
  6. Выбор элементов справочника запросом
  7. Открытие форм справочника

Создание элемента справочника

Создание новых элементов и групп справочника производится с помощью программного объекта СправочникМенеджер.<Имя справочника>. Данный объект доступен только на сервере.
Создание нового элемента или группы справочника состоит из следующих этапов:

  1. Создание элемента или группы;
  2. Заполнение владельца (если справочник подчиненный);
  3. Заполнение родителя (если справочник иерархический);
  4. Заполнение наименования и реквизитов (если не задана автоматическая нумерация, то и кода);
  5. Заполнение табличных частей;
  6. Запись элемента.

Создание новой группы:
НоваяГруппа = Справочники.Контрагенты.СоздатьГруппу(); // Создание группы
НоваяГруппа.Наименование = "Покупатели"; // Заполнение наименования
НоваяГруппа.Записать
(); // Запись группы

Создание нового элемента:
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент(); // Создание элемента
НовыйЭлемент.Родитель = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели"); // Заполнение родителя
НовыйЭлемент.Наименование = "Ромашка ООО"; // Заполнение наименования
НовыйЭлемент.ИНН = "123456789"; // Заполнение реквизита

// Добавление новой строки табличной части
НоваяСтрока = НовыйЭлемент.КонтактнаяИнформация.Добавить();
НоваяСтрока.Тип = "Адрес";
НоваяСтрока.Представление = "Москва";

НовыйЭлемент.Записать(); // Запись элемента

Поиск элементов справочника

Для поиска элементов справочников в языке программирования 1С предусмотрено несколько методов:

  • НайтиПоКоду(<Код>, <ПоискПоПолномуКоду>, <Родитель>, <Владелец>)
  • НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)
  • НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>)

Во всех методах если поиск успешный, то будет возвращена ссылка на найденный элемент.
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("123"); // Поиск контрагента с кодом "123"
НайденныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("1", , , НайденныйКонтрагент); // Поиск подчиненного найденному контрагенту договора с номером "1"
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели"); // Поиск элемента с наименованием "Покупатели"
НайденныйКонтрагент1 = Справочники.Контрагенты.НайтиПоНаименованию("Ромашка ООО", , НайденныйКонтрагент); // Поиск элемента с наименованием "Ромашка ООО" в группе "Покупатели"
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту
("ИНН", "123456789"); // Поиск контрагента с ИНН "123456789"

Изменение элементов справочника

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

  1. Получить объект элемента справочника (метод ПолучитьОбъект(), возвращает тип СправочникОбъект.<Имя справочника>);
  2. Присвоить новые значения реквизитам объекта;
  3. Записать объект элемента справочника.

Программное изменение справочника возможно только на стороне сервера.

Например, на форму обработки выведен реквизит Номенклатура типа СправочникСсылка.Номенклатура. Вот пример кода, изменяющего наименование выбранной пользователем номенклатуры:
НоменклатураОбъект = Номенклатура.ПолучитьОбъект();
НоменклатураОбъект.Наименование = "Новое наименование";
НоменклатураОбъект.Записать();

Удаление элементов справочника

Элементы справочника могут быть помечены на удаление и удалены из базы непосредственно.

Непосредственное удаление – операция необратимая, в то время как пометку на удаление можно отменить. Пометка на удаление хранится в предопределенном реквизите ПометкаУдаления. В пользовательском режиме помеченные на удаление элементы и группы справочника помечаются красным крестиком.

Пометку на удаление можно установить/снять двумя разными способами:
// Способ 1. Использование метода УстановитьПометкуУдаления()
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("123");
КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект();
КонтрагентОбъект.УстановитьПометкуУдаления(Истина);

// Способ 2. Изменение свойства ПометкаУдаления
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("123");
КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект();
КонтрагентОбъект.ПометкаУдаления = Истина;
КонтрагентОбъект.Записать();

Пример непосредственного удаления элемента справочника:
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду("123");
КонтрагентОбъект = НайденныйКонтрагент.ПолучитьОбъект();
КонтрагентОбъект.Удалить
();

Обход элементов справочника

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

  • Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
  • ВыбратьИерархически(<Родитель>, <Владелец>, <Отбор>, <Порядок>)

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

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

// Обход контрагентов из группы "Покупатели"
ГруппаПокупатели = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели");
Выборка = Справочники.Контрагенты.Выбрать(ГруппаПокупатели);
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;

// Обход договоров контрагента "Ромашка ООО"
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоНаименованию("Ромашка ООО");
Выборка = Справочники.ДоговорыКонтрагентов.Выбрать(, НайденныйКонтрагент);
Пока
Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;

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

Выбор элементов справочника запросом

Поиск данных в базе 1С предпочтительнее выполнять при помощи запросов. Запрос позволяет описать практически любые условия для отбора, в отличие от методов Выбрать() и ВыбратьИерархически(), на которые накладываются существенные ограничения. К тому же, в большинстве случаев работа с использованием запросов быстрее, чем работа с использованием программного кода.

Простой пример поиска и вывода товаров со стоимостью больше 1000:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Наименование
|ИЗ
| Справочник.Товары КАК Товары
|ГДЕ
| Товары.Стоимость > 1000"
;
Выборка = Запрос.Выполнить().Выбрать();
Пока
Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование
);
КонецЦикла;

Открытие форм справочника

Для открытия любых форм справочников рекомендуется использовать метод
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>, <ОписаниеОповещенияОЗакрытии>, <РежимОткрытияОкна>)

Для открытия формы элемента или группы справочника также возможно использовать более простой метод
ПоказатьЗначение(<ОписаниеОповещенияОЗавершении>, <Значение>)

Кроме методов ОткрытьФорму() и ПоказатьЗначение() есть и другие (ОткрытьФормуМодально, ОткрытьЗначение, ПолучитьФорму), но их использование не рекомендуется, т.к. часть этих методов использует режим модального открытия, часть противоречит свежим рекомендациям фирмы 1С.

Приведем примеры программного открытия форм справочника:
// Открыть форму списка
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка");

// Открыть форму элемента
// Контрагент – реквизит формы, заполняемый пользователем интерактивно

ПоказатьЗначение(, Контрагент);

// Еще один способ открытия формы элемента
ПараметрыОткрытия = Новый Структура("Ключ", Контрагент);
ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаЭлемента", ПараметрыОткрытия);

// Открыть форму группы
// ГруппаКонтрагентов– реквизит формы, заполняемый пользователем интерактивно

ПоказатьЗначение(, ГруппаКонтрагентов);

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


Внимание!

Следует понимать, что интерактивная работа (в том числе открытие форм) в 1С возможна только на стороне клиента. В то же время поиск и изменение данных возможны только на стороне сервера.

Обработка позволяет заполнить ЛЮБЫЕ дополнительные реквизиты в ЛЮБЫХ справочниках системы из табличного файла (Excel, dbf и прочих). Допустим для номенклатуры назначены следующие дополнительные реквизиты, причем с разным типом значения.

дополнительные реквизиты номенклатуры

И у нас есть файл Excel, из которого будем заполнять реквизиты в карточках (в данном случае доп.реквизиты будем грузить в номенклатуру). Открываем обработку, в правой части вставляем содержимое файла в табличную область. Вставку можно делать с помощью буфера обмена или по кнопке Загрузить из файла (второй способ подходит только для файлов Microsoft Excel и OpenOffice Calc).

настройка загрузки дополнительных реквизитов номенклатуры

В левой части выбираем тип объекта Справочник, имя объекта Номенклатура, указываем граничные строки таблицы данных и номер колонки с полем для поиска нужного элемента справочника. В случае номенклатуры, в этой колонке может быть указан код, наименование или артикул товара. Для остальных справочников поиск осуществляется по коду и наименованию.

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

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

После выполнения всех настроек нажимаем Заполнить. В результате в номенклатурной карточке успешно заполнятся дополнительные реквизиты.

карточка номенклатуры с дополнительными реквизитами

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

настройка номеров строк и колонок для загрузки реквизитов документа

Если в процессе выполнения загрузки возникнут какие-то ошибки/коллизии, они будут отражены в итоговом протоколе.

протокол об ошибках

Релиз 464.1.1.2 от 16.06.2020

Если загружаются дополнительные реквизиты номенклатуры, есть возможность автоматически заполнить таблицу настроек по списку реквизитов, относящихся к определенному виду номенклатуры. Удобно пользоваться, если список реквизитов большой, экономит время.

дополнительные реквизиты вида номенклатуры заполнение таблицы настроек

Релиз 464.1.1.3 от 26.07.2020

При загрузке дополнительных реквизитов номенклатуры теперь можно выбрать вариант поиска нужных товаров. Доступны следующие варианты поиска:

  • по наименованию,
  • по коду,
  • по артикулу,
  • по артикулу и наименованию,
  • по штрихкоду.

настройка поиска нужных товаров

Появилась возможность не только загружать, но и выгружать дополнительные реквизиты из базы во внешний табличный файл (Excel, OpenOffice, MXL). Например, для того чтобы проверить/поправить/загрузить доп.реквизиты в другую базу.

Для этого сделана отдельная закладка на форме.

настройки выгрузки доп.реквизитов номенклатуры

Для выборочной выгрузки сведений можно воспользоваться фильтром на форме (работает по ЛЮБЫМ реквизитам исходного справочника или документа).

К примеру выгрузим доп.реквизиты товаров (исключая услуги):

сохранение доп.реквизитов номенклатуры в файл

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

Релиз 464.1.1.4 от 27.01.2021

Теперь можно очищать значения дополнительных реквизитов в справочниках и документах системы. При этом можно использовать удобный фильтр для отбора нужных данных (например по владельцам и/или списку реквизитов). На скрине ниже показано удаление значений двух дополнительных реквизитов в номенклатурной справочнике.

настройка удаления реквизитов

После выполнения операции появится итоговый протокол:

протокол выполнения

Релиз 464.1.1.5 от 20.08.2021

Добавлена возможность сохранения настроек загрузки дополнительных реквизитов. Рядом с полем Имя объекта расположены две кнопки — одна для сохранения текущей настройки, другая для выбора сохраненной ранее настройки. Для любого справочника или документа можно сохранить неограниченное количество настроек.

Для номенклатурного справочника добавлен вариант поиска по артикулу и производителю. При этом можно указать как конкретного производителя, так и номер колонки таблицы, откуда его нужно взять.

поиск по артикулу и производителю

Добавлена возможность заполнения списка значений для дополнительных реквизитов с типом Дополнительное значение.

загрузка дополнительных значений

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

Релиз 464.1.1.6 от 14.03.2022

Если вы приобрели обработку по учету множественных реквизитов номенклатуры, то с помощью данной разработки вы теперь сможете загрузить эти множественные значения в номенклатурный справочник. Для этого нужно указать используемый разделитель значений.

разделитель для загрузки множественных значений множественные значения реквизитов номенклатуры


Дмитрий Медведков

Дмитрий Медведков

Программист, консультант 1С

Начал работать с 1С в 2012-м, специализируюсь на УТ 11

 +16 

   

Распечатать

Создание и запись нового элемента справочника

Код 1C v 8.2 УП

 &НаКлиенте
Процедура ПоКнопкеНовыйКонтрагент(Команда)
// Вставить содержимое обработчика.
Перем НовыйКонтрагент;

НовыйКонтрагент = Новый Структура("Наименование, ПолноеНаименование, ИНН");
НовыйКонтрагент.Наименование = "РиК ООО";
НовыйКонтрагент.ПолноеНаименование = "ООО Рога и копыта";
НовыйКонтрагент.ИНН = "123456789012";

Если СоздатьНовогоКонтрагента(НовыйКонтрагент) = 0 Тогда
Сообщить("Не удалось создать нового контрагента");
КонецЕсли;

КонецПроцедуры

&НаСервере
Функция СоздатьНовогоКонтрагента(СтруктураСправочника)

Перем НовыйКонтрагент,СпрПользователи;

СпрКонтрагенты = Справочники.Контрагенты;
НовыйКонтрагент = СпрКонтрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = СтруктураСправочника.Наименование;
НовыйКонтрагент.ПолноеНаименование = СтруктураСправочника.ПолноеНаименование;
НовыйКонтрагент.ИНН = СтруктураСправочника.ИНН;
Попытка
НовыйКонтрагент.Записать();
Возврат 1;
Исключение
Возврат 0;
КонецПопытки;

КонецФункции


Код 1C v 8.х

 //Пример 1
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлемент.Наименование = "ООО Березка";
// Установить другие реквизиты.
НовыйЭлемент.Записать();

НовыйЭлемент = Справочники.Банки.СоздатьЭлемент();
// Получить ссылку на группу, в которой будет находиться новый элемент.
Родитель = Справочники.Банки.НайтиПоКоду("000000001");
НовыйЭлемент.Наименование = "ВТБ";
НовыйЭлемент.Код = "000000011";
НовыйЭлемент.Родитель = Родитель;

// Установить другие реквизиты.
НовыйЭлемент.Записать();

//Пример 2
СпрСотр = Справочники.Сотрудники;
//или так:
//СпрСотр = Справочники["Сотрудники"]
НовЭл = СпрСотр.СоздатьЭлемент();
НовЭл.Наименование = "Иванов Иван Иванович";
НовЭл.Оклад = 100;
НовЭл.Записать();

Код 1C v 7.x

  //Пример 1
//создаваться будет прямо в корне справочника
спр = создатьОбъект("Справочник.Контрагенты");
спр.Новый();
спр.Наименование = "ООО Березка";
спр.УстановитьНовыйКод();
// итак далее
//спр.Реквизит1="......"
//спр.Реквизит2="......"
спр.Записать();

//Пример 2
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.Новый();
СпрСотр.Наименование = "Иванов Иван Иванович";
СпрСотр.Оклад = 100;
СпрСотр.Записать();

&НаСервере
Процедура СозданиеИИзменениеЭлементовИГруппСправочникаНаСервере()
 
    /// Как создать новый элемент справочника в 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;
 
    // преобразуем документа обратно в данные формы
    ЗначениеВДанныеФормы(Еда, ДанныеФормы);
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Здравствуйте. Помогите решить задачку. Необходимо заполнить реквизит Брэнд в справочнике Номенклатура из Excel.
1. Создала обработку в которую загружаются данные из Excel.
2. Создала кнопку Проверить, с помощью которой происходит сверка данных по коду (PLU) из справочника Номенклатура с данными из Excel.
3. Необходимо при нажатии кнопки Записать, заполнить в справочнике Номенклатура реквизит Бренд из обработки. Вот с этим у меня проблема!!!!

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Процедура ЗагрузитьБрэнд()
    
    Для Каждого Элемент Из Товары Цикл
        СпрНом = Справочники.Номенклатура;
        Условие = НоменклатураПоКоду(СокрЛП(Элемент.Штрихкод));
           Если(Условие = Неопределено) Тогда 
            Сообщить("Не найдена номенклатура с кодом: " + Элемент.Штрихкод,СтатусСообщения.ОченьВажное);
        Иначе    
            НоменкОбъект = Условие.ПолучитьОбъект();
            
            НоменкОбъект.Брэнд = Товары.Брэнд;
            Попытка
                НоменкОбъект.Записать();
            Исключение
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;    
    КонецЦикла;
    
    Попытка
        Обработка = Обработки.РегламентныеЗагрузкаНоменклатуры.Создать();
        Обработка.ОчиститьУзлыНоменклатуры();
    Исключение
    КонецПопытки;
    
    Предупреждение("Загружено"); 
    
Конецпроцедуры
 
Функция НоменклатураПоКоду(Код)
    Попытка
    Номенклатура = НайтиНоменклатуруПоPLU(Число(Код));
Исключение
    КонецПопытки;
    Если Номенклатура = Неопределено Тогда
        Номенклатура = НайтиНоменклатуруПоШК(СтрЗаменить(Код," ",""));
    КонецЕсли;
    
    Возврат Номенклатура;
    
КонецФункции
 
Функция НайтиНоменклатуруПоPLU(КодPLU)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    КодыТоваровPLU.Номенклатура
                   |ИЗ
                   |    РегистрСведений.КодыТоваровPLU КАК КодыТоваровPLU
                   |ГДЕ
                   |    КодыТоваровPLU.Код = &Код";
    Запрос.УстановитьПараметр("Код",КодPLU);
                              
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда        
        Возврат Выборка.Номенклатура.Ссылка;
    КонецЕсли;
    
    Возврат Неопределено;
    
КонецФункции
 
Функция НайтиНоменклатуруПоШК(Код)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Штрихкоды.Владелец КАК Номенклатура
                   |ИЗ
                   |    РегистрСведений.Штрихкоды КАК Штрихкоды
                   |ГДЕ
                   |    Штрихкоды.Штрихкод = &Код";
    Запрос.УстановитьПараметр("Код",Код);
                              
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда        
        Возврат Выборка.Номенклатура.Ссылка;
    КонецЕсли;
    
    Возврат Неопределено;
    
КонецФункции

Заполнение реквизитов справочника Номенклатура  программно в 1С

Заполнение реквизитов справочника Номенклатура  программно в 1С

ссылка на обработчик:

Как обойти все элементы справочника запросом 1с 8.3:

&НаСервере
Процедура ВыборкаЭлементовСправочникаЗапросом()

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| ЭтоГруппа = ЛОЖЬ
|УПОРЯДОЧИТЬ ПО
| Наименование";

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

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

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

КонецПроцедуры

Как обойти элементы с помощью менеджера справочника 1с 8.3:

//метод: Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)

СпрКонтрагентыМенеджер = Справочники.Контрагенты; //получим менеджер справочника
СпрКонтрагентыМенеджер = Справочники["Контрагенты"]; //второй вариант получения менеджера

Выборка = СпрКонтрагентыМенеджер.Выбрать();

Пока Выборка.Следующий() Цикл

  Сообщить(Выборка.Наименование);

КонецЦикла;

Создание и запись нового элемента справочника 1с 8.3:
//метод: СоздатьЭлемент()

НовыйОбъектКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйОбъектКонтрагент.Наименование = "ООО Ладога";
НовыйОбъектКонтрагент.Записать();

Создание и запись новой группы справочника (для иерархического справочника) 1с 8.3

//метод:СоздатьГруппу();

НовыйОбъектКонтрагент = Справочники.Контрагенты.СоздатьГруппу();
НовыйОбъектКонтрагент.Наименование = "Поставщики";
НовыйОбъектКонтрагент.Записать();  

Поиск элемента справочника запросом:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Наименование", "ООО Ладога");

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

Запрос.Текст = ТекстЗапроса;

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

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

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

 Поиск элемента через менеджер справочника 1с 8.3:

//Если элемент найден, возвращается ссылка, иначе пустая ссылка. Если реквизит КодНаименование в справочнике не используется, возвращается Неопределено.

//методы: НайтиПоКоду(), НайтиПоНаименованию(), НайтиПоРеквизиту();

СпрКонтрагенты = Справочники.Контрагенты;
КонтрагентСсылка = СпрКонтрагенты.НайтиПоКоду("0000000001");
Если Не ЗначениеЗаполнено(КонтрагентСсылка) Тогда
	Сообщить("Найден по коду: "+КонтрагентСсылка);
Иначе
	Сообщить("Не найдено!");
КонецЕсли;
КонтрагентСсылка = СпрКонтрагенты.НайтиПоНаименованию("ООО Ладога");
Если Не ЗначениеЗаполнено(КонтрагентСсылка) Тогда
	Сообщить("Найден по наименованию: "+КонтрагентСсылка);
Иначе
	Сообщить("Не найдено!");
КонецЕсли;
КонтрагентСсылка = СпрКонтрагенты.НайтиПоРеквизиту("ИНН","12000000001");
Если Не КонтрагентСсылка.Пустая() Тогда
	Сообщить("Найден по ИНН: "+КонтрагентСсылка);
Иначе
	Сообщить("Не найдено!");
КонецЕсли;

Удаление элементагруппы справочника 1с 8.3:

КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель");
КонтрагентОбъект = КонтрагентСсылка.ПолучитьОбъект();
//пометка удаления, элемент остается в базе:
КонтрагентОбъект.УстановитьПометкуУдаления(Истина);
//непосредственное удаление, элемент исчезает:
КонтрагентОбъект.Удалить();

Выборка элементов подчиненного справочника 1с 8.3:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Контрагент", СсылкаКонтрагент);

ТекстЗапроса = "ВЫБРАТЬ
|	ДоговорыКонтрагентов.Ссылка
|ИЗ
|	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
|	ДоговорыКонтрагентов.Владелец = &Контрагент";

Запрос.Текст = ТекстЗапроса;

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

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

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

Перенести элемент в другую группу 1с 8.3:

КонтрагентОбъект = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель").ПолучитьОбъект();
КонтрагентОбъект.Родитель = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели");
КонтрагентОбъект.Записать();

Как получить и проверить пустую ссылку справочника 1с 8.3

ПустаяСсылка = Справочники.Контрагенты.ПустаяСсылка();

Если ПустаяСсылка.Пустая() Тогда
	Сообщить("Это пустая ссылка!");	
КонецЕсли;

Если Не ЗначениеЗаполнено(ПустаяСсылка) Тогда
	Сообщить("Это пустая ссылка или неопределено!");	
КонецЕсли;

Как узнать принадлежность элемента справочника группе 1с 8.3:

КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель");
Если КонтрагентСсылка.Родитель = ГруппаКонтрагентов Тогда
	Сообщить("Элемент находится в "+ГруппаКонтрагентов);	
КонецЕсли;

//с учетом иерархии (вложенности)
Если КонтрагентСсылка.ПринадлежитЭлементу(ГруппаКонтрагентов) Тогда
	Сообщить("Элемент находится в "+ГруппаКонтрагентов);	
КонецЕсли;

Как скопировать существующий элемент справочника 1с 8.3

КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель");
КонтрагентОбъектКопия = КонтрагентСсылка.Скопировать();
КонтрагентОбъектКопия.Наименование = КонтрагентОбъектКопия.Наименование + "##копия##"; 
КонтрагентОбъектКопия.Записать();

Как выяснить уровень вложенности элемента справочника 1с 8.3

КонтрагентСсылка = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель");
Сообщить(КонтрагентСсылка.Уровень());

Как заблокировать элемент справочника перед изменениями 1с 8.3

КонтрагентОбъект = Справочники.Контрагенты.НайтиПоНаименованию("ООО Румпель").ПолучитьОбъект();
Если КонтрагентОбъект.Заблокирован() Тогда
	Сообщить("Элемент кем то заблокирован!");	
Иначе
	КонтрагентОбъект.Заблокировать();
	//изменяем реквизиты
	//....
	КонтрагентОбъект.Записать();
	КонтрагентОбъект.Разблокировать();	
КонецЕсли;

Как заполнить новый элемент справочника на основании 1с 8.3

СтруктураДанных = Новый Структура("Наименование,ИНН", "ООО Пороро", "100000001");

КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();
КонтрагентОбъект.Заполнить(СтруктураДанных);
КонтрагентОбъект.Записать();

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

Как открыть форму существующего элемента справочника, имея ссылку на него 1с 8.3

&НаКлиенте
Процедура ОткрытьФормуСуществующегоЭлементаСправочника()
	КонтрагентСсылка = ПолучитьСсылкуНаКонтрагента("ООО Пороро");
	
	//Вариант 1
	ПараметрыФормы = Новый Структура("Ключ", КонтрагентСсылка);
	
	ОткрытьФорму(
	"Справочник.Контрагенты.ФормаОбъекта", // имя формы
	ПараметрыФормы // параметры для формы
	);	
	
	//Вариант 2 разрешены модальные окна
	ОткрытьЗначение(КонтрагентСсылка);
	
	//Вариант 3
	ПоказатьЗначение(, КонтрагентСсылка);
КонецПроцедуры

Как открыть форму существующей группы справочника, имея ссылку на нее 1с 8.3

&НаКлиенте
Процедура ОткрытьФормуСуществующейГруппыСправочника()
	КонтрагентСсылка = ПолучитьСсылкуНаКонтрагента("Поставщики");
	
	ПараметрыФормы = Новый Структура("Ключ", КонтрагентСсылка);
	
	ОткрытьФорму(
	"Справочник.Контрагенты.ФормаГруппы", // имя формы
	ПараметрыФормы // параметры для формы
	);	
КонецПроцедуры

 Как открыть форму выбора элемента справочника и отследить её закрытие 1с 8.3

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

&НаКлиенте
Процедура ПослеВыбораЭлемента(Результат, Параметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		Сообщить("Был выбран элемент " + Результат);
	КонецЕсли;
	
КонецПроцедуры

Как открыть форму списка справочника и установить отбор по реквизиту 1с 8.3

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

Как открыть форму списка справочника с нужным отображением 1с 8.3

&НаКлиенте
Процедура ОткрытьФормуСпискаСправочникаСНужнымОтображением(Команда)
	
	// откроем список контрагентов с отображением "Список"
	
	ФормаСписка = ПолучитьФорму("Справочник.Контрагенты.ФормаСписка");
	ФормаСписка.Открыть();
	ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
	
КонецПроцедуры

Как открыть форму только что созданного, но ещё не записанного элемента справочника в 1с 8.3

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

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

You have no rights to post comments

Понравилась статья? Поделить с друзьями:
  • Запрет на покупку акций иностранных компаний
  • Дополнительные реквизиты документов перечень
  • Запрет на строительные работы в ночное время
  • Дополнительные реквизиты полное наименование
  • Запретить редактирование реквизита документа