Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 07:08

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

Автор Mr.Broock, 17 сен 2018, 10:08

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

Mr.Broock

Доброго времени суток всем форумчанам!
Столкнулся с проблемой, которую решить самостоятельно не могу. В программировании 1С новенький...
В организации есть нетиповая конфигурация 1С, в которой описана процедура импорта документов "Поступление товара" из Паруса 8. Процедура работает, но во время проверки элемента на уникальность описывает в коде, что если элемента в справочнике "Номенклатура" нет, то его необходимо добавить...

НайтиНоменклатуру = Справочники.Номенклатура.НайтиПоНаименованию(Короткая);
Если НайтиНоменклатуру = Справочники.Номенклатура.ПустаяСсылка() Тогда
    НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйЭлемент.Наименование = ТекНоменклатура;
    НовыйЭлемент.НаименованиеПолное = ТекНоменклатура;
    НовыйЭлемент.БазоваяЕдиницаИзмерения = ТекЕдИзм;
    НовыйЭлемент.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
    НовыйЭлемент.Записать();
            
    НоваяЕдИзм = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    НоваяЕдИзм.Наименование = ЕдИзмЭксель;
    НоваяЕдИзм.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(Короткая);
    НоваяЕдИзм.Коэффициент = 1;
    НоваяЕдИзм.Записать();
            
    ЗаписанныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Короткая);
    НужнаяЕдИзм = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(ЕдИзмЭксель,Ложь,,ЗаписанныйЭлемент);
    Объект = ЗаписанныйЭлемент.ПолучитьОбъект();
    Объект.ЕдиницаХраненияОстатков = НужнаяЕдИзм;
    Объект.ЕдиницаДляОтчетов = НужнаяЕдИзм;
    Объект.Записать();

Но здесь есть один минус - когда создается новый элемент, то попадает он не в группу элементов (их для примера две: Хозяйственный и Медицинский), а в саму номенклатуру, и после, не отображается на отчетах по складам.
Пробовал решить проблему таким образом (снова упомяну, что в программировании 1С новенький):

НайтиНоменклатуру = Справочники.Номенклатура.НайтиПоНаименованию(Короткая);
         Если НайтиНоменклатуру = Справочники.Номенклатура.ПустаяСсылка() Тогда
            
            Если ЭлементыФормы.ФлажокХозяйственный = Истина Тогда
               ЭлементыФормы.ФлажокМедицинский.Доступность = Ложь;
               НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
               НовыйЭлемент.Наименование = ТекНоменклатура;
               НовыйЭлемент.НаименованиеПолное = ТекНоменклатура;
               НовыйЭлемент.БазоваяЕдиницаИзмерения = ТекЕдИзм;
               НовыйЭлемент.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
               НовыйЭлемент.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Хозяйственный");
               НовыйЭлемент.Записать();
               
               НоваяЕдИзм = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
               НоваяЕдИзм.Наименование = ЕдИзмЭксель;
               НоваяЕдИзм.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(Короткая);
               НоваяЕдИзм.Коэффициент = 1;
               НоваяЕдИзм.Записать();
               
               ЗаписанныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Короткая);
               НужнаяЕдИзм = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(ЕдИзмЭксель,Ложь,,ЗаписанныйЭлемент);
               Объект = ЗаписанныйЭлемент.ПолучитьОбъект();
               Объект.ЕдиницаХраненияОстатков = НужнаяЕдИзм;
               Объект.ЕдиницаДляОтчетов = НужнаяЕдИзм;
               Объект.Записать();
            ИначеЕсли ЭлементыФормы.ФлажокМедицинский = Истина Тогда
               ЭлементыФормы.ФлажокХозяйственный.Доступность = Ложь;
               НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
               НовыйЭлемент.Наименование = ТекНоменклатура;
               НовыйЭлемент.НаименованиеПолное = ТекНоменклатура;
               НовыйЭлемент.БазоваяЕдиницаИзмерения = ТекЕдИзм;
               НовыйЭлемент.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
               НовыйЭлемент.Родитель = Справочники.Номенклатура.НайтиПоНаименованию("Медицинский");
               НовыйЭлемент.Записать();
               
               НоваяЕдИзм = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
               НоваяЕдИзм.Наименование = ЕдИзмЭксель;
               НоваяЕдИзм.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(Короткая);
               НоваяЕдИзм.Коэффициент = 1;
               НоваяЕдИзм.Записать();
               
               ЗаписанныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Короткая);
               НужнаяЕдИзм = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(ЕдИзмЭксель,Ложь,,ЗаписанныйЭлемент);
               Объект = ЗаписанныйЭлемент.ПолучитьОбъект();
               Объект.ЕдиницаХраненияОстатков = НужнаяЕдИзм;
               Объект.ЕдиницаДляОтчетов = НужнаяЕдИзм;
               Объект.Записать();
            Иначе
               Прервать;
            КонецЕсли;

Предварительно добавив на форму два флажка. Но при считывании элементов из таблицы ничего не происходит, и таблица остаётся пустой, либо заполняется до обнаружения нового элемента. Может кто подскажет мне глупому, как разделить поступления между складами?
Заранее благодарен всем, кто откликнется!

wise

(0) ошибка: Справочники.Номенклатура.ПустаяСсылка()
вместо
Справочники.Номенклатура.СоздатьЭлемент();
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Mr.Broock


wise

(2) ошибка:
Если ЭлементыФормы.ФлажокХозяйственный = Истина Тогда

Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

alex0402

Цитата: Mr.Broock от 17 сен 2018, 10:08Справочники.Номенклатура.НайтиПоНаименованию("Хозяйственный")

Цитата: Mr.Broock от 17 сен 2018, 10:08Справочники.Номенклатура.НайтиПоНаименованию("Медицинский")
точно что-то возвращают? или пустая ссылка?
Спасибо за Сказать спасибо

Mr.Broock

Цитата: wise от 17 сен 2018, 11:07
(2) ошибка:
Если ЭлементыФормы.ФлажокХозяйственный = Истина Тогда

Попробовал с точкой останова, он перепрыгивает оба условия
- Если ЭлементыФормы.ФлажокХозяйственный = Истина Тогда
- ИначеЕсли ЭлементыФормы.ФлажокМедицинский = Истина Тогда

отсюда вопрос, как прописать правильно, чтобы программа считывала отметку флажка?
Добавлено: 17 сен 2018, 11:43


Цитата: alex0402 от 17 сен 2018, 11:27
Цитата: Mr.Broock от 17 сен 2018, 10:08Справочники.Номенклатура.НайтиПоНаименованию("Хозяйственный")

Цитата: Mr.Broock от 17 сен 2018, 10:08Справочники.Номенклатура.НайтиПоНаименованию("Медицинский")
точно что-то возвращают? или пустая ссылка?

Программа даже не доходит туда, она считает, что условия:

Если ЭлементыФормы.ФлажокХозяйственный = Истина Тогда и Если ЭлементыФормы.ФлажокХозяйственный = Истина Тогда

не соблюдаются, хотя chekbox на форме, в режиме отладки я отмечаю...

wise

(5) значение реквизита формы

Если ФлажокХозяйственный Тогда
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

Mr.Broock

Цитата: wise от 17 сен 2018, 12:21
(5) значение реквизита формы

Если ФлажокХозяйственный Тогда

Заработала!!! Премного благодарен!

Теги:

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

Рейтинг@Mail.ru

Поиск