Имя: Пароль:
1C
1С v8
Поиск значения
,
0 Валидатор
 
14.01.13
11:35
Условие такое: если значение не заполнено в карточке номенклатуры у элемента, то это значение( в нашем случае номер гтд) заполняется тем значением, которое мы передаем.

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

Но проблема в том, что если значение не заполнено, а в справочнике Номера ГТД уже есть такой элемент, то вылезает ошибка, какую проверку сделать на этот справочник, что ищется то есть номер этот, если не найден, то создается
1 Wobland
 
14.01.13
11:38
это вопрос такой?
2 Валидатор
 
14.01.13
11:41
да
3 Wobland
 
14.01.13
11:42
найтикакто().пустая()
4 Godofsin
 
14.01.13
11:43
нынче никто СП не толкает?
5 Maxus43
 
14.01.13
11:43
ГТДОбъект.Код = ГТДссылка;

типы разные же, как ты в код засунешь ссылку?
6 Godofsin
 
14.01.13
11:44
(5) с чего ты взял что там ссылка? =)
7 Wobland
 
14.01.13
11:44
(5) судя по стилю речи автора в переменной гтдссылка не обязательно лежит ссылка
8 Deon
 
14.01.13
11:45
Да я ваще нихера не понял
9 Maxus43
 
14.01.13
11:46
Ну хрен знает что там, в итоге там Ссылка должна быть типа..
ГТДссылка = ГТДОбъект.Ссылка;

Короче, автор. Спроси ещё раз внятно
10 Валидатор
 
14.01.13
11:48
Переделал, чтобы понятнее было:
Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("ПолныйАртикул", ПолныйАртикул);
       ГТДПоискПоСправочнику = Справочники.НомераГТД.НайтиПоКоду(НомерГТД);
       СтранаПоискПоСправочнику = Справочники.КлассификаторСтранМира.НайтиПоНаименованию(Страна);

Если  Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
тут создаем новый элемент -\\-
дальше смотрим, если у элемента номенклатуры не заполнен НОМЕР ГТД и страна происхождения, то нужно заполнить ТОЛЬКО их.
ИначеЕсли  НЕ ЗначениеЗаполнено(Номенклатура.НомерГТД) Тогда
           Если ГТДПоискПоСправочнику.Пустая() Тогда
                ГТДОбъект = Справочники.НомераГТД.СоздатьЭлемент();
                ГТДОбъект.Код = ГТДПоискПоСправочнику;
                ГТДОбъект.Записать();
                ГТДПоискПоСправочнику = ГТДОбъект.Ссылка;
            Иначе
                НоменклатураОбъект.НомерГТД = ГТДПоискПоСправочнику;
           КонецЕсли ;
                           
       //ИначеЕсли НЕ ЗначениеЗаполнено(СтранаСсылка)  Тогда
   ИначеЕсли НЕ ЗначениеЗаполнено(Номенклатура.СтранаПроисхождения) Тогда
       Если СтранаПоискПоСправочнику.Пустая() Тогда
                СтранаОбъект = Справочники.КлассификаторСтранМира.СоздатьЭлемент();
                Страна.Наименование = Страна;
                СтранаПоискПоСправочнику.Записать();
                СтранаПоискПоСправочнику = СтранаОбъект.Ссылка;
           КонецЕсли ;
11 Валидатор
 
14.01.13
11:48
вот как мне сделать, что если номенклатура найдена, но у нее не заполнены 2 поля, то эти два поля( номер гтд и страна происхождения) заполнялись моими данными?
12 Reset
 
14.01.13
11:51
Результат телепатии:

Если  НЕ ЗначениеЗаполнено(Номенклатура.НомерГТД) Тогда
   ГТДссылка = Справочники.НомераГТД.НайтиПоКоду(НомерГТДСтрокойКоторыйДолженБыть);
   Если ГТДссылка.Пустая() тогда
       ГТДОбъект = Справочники.НомераГТД.СоздатьЭлемент();
       ГТДОбъект.Код = НомерГТДСтрокойКоторыйДолженБыть;
       ГТДОбъект.Записать();
       ГТДссылка  = ГТДОбъект.Ссылка;
   КонецЕсли;
   Номенклатура.НомерГТД=ГТДссылка;
КонецЕсли;
13 Reset
 
14.01.13
11:53
(12) попытка ответиьть на (0).
(10) не читал
14 Валидатор
 
14.01.13
11:54
(12) если такой элемент уже создан, то будет ругаться на поле код, а мне нужно, что если элемент такой уже есть, то он его выбирает
15 Reset
 
14.01.13
11:55
(14) Не нужно считать меня придурком
16 Reset
 
14.01.13
11:58
(14) в (12) пояснение к ответу в (3)
17 Паланик
 
14.01.13
12:00
ГТДПоискПоСправочнику = Справочники.НомераГТД.НайтиПоКоду(НомерГТД);
...
ГТДОбъект.Код = ГТДПоискПоСправочнику;

Коду присваиваешь ссылку/неопределено?
18 Валидатор
 
14.01.13
12:00
НомерГТД - переменная, числовой тип, грузится из дбф файла
19 Паланик
 
14.01.13
12:03
(18) ответ в (12)
20 Валидатор
 
14.01.13
13:35
Если  НЕ ЗначениеЗаполнено(Номенклатура.НомерГТД) Тогда
               Если ГТДПоискПоСправочнику.Пустая() Тогда
                   ГТДОбъект = Справочники.НомераГТД.СоздатьЭлемент();
                   ГТДОбъект.Код = НомерГТД;
                   ГТДОбъект.Записать();
                   ГТДПоискПоСправочнику = ГТДОбъект.Ссылка;
               Иначе
                   НоменклатураОбъект = Номенклатура.ПолучитьОбъект();
                   НоменклатураОбъект.НомерГТД = ГТДПоискПоСправочнику;
               КонецЕсли;
               Попытка
               НоменклатураОбъект.Записать();
               Номенклатура = НоменклатураОбъект.Ссылка;
           Исключение
               Сообщить(ОписаниеОшибки());
           КонецПопытки;

           КонецЕсли;

                       
           Если НЕ ЗначениеЗаполнено(Номенклатура.СтранаПроисхождения) Тогда
               НоменклатураОбъект = Номенклатура.ПолучитьОбъект();
               НоменклатураОбъект.СтранаПроисхождения = СтранаПоискПоСправочнику;
           КонецЕсли;
           
           Попытка
               НоменклатураОбъект.Записать();
               Номенклатура = НоменклатураОбъект.Ссылка;
           Исключение
               Сообщить(ОписаниеОшибки());
           КонецПопытки;
           
       КонецЕсли;
21 Валидатор
 
14.01.13
13:35
Но данные не записываются все равно почему то
22 Reset
 
14.01.13
13:49
Если НЕ ЗначениеЗаполнено(Номенклатура.НомерГТД) Тогда    // кривой момент с получением реквизита через точку
                                                       // по хорошему список нужных ссылок должен быть получен заранее запросом
                                                       // да и ссылки на гтд можно было подготовить заранее, а не искать в цикле
                                                       // (ведь эта вся лабуда в цикле ведь?)
   ГТДссылка = Справочники.НомераГТД.НайтиПоКоду(НомерГТДСтрокойКоторыйДолженБыть);
   Если ГТДссылка.Пустая() тогда
       ГТДОбъект = Справочники.НомераГТД.СоздатьЭлемент();
       ГТДОбъект.Код = НомерГТДСтрокойКоторыйДолженБыть;
        ГТДОбъект.Записать();
        ГТДссылка  = ГТДОбъект.Ссылка;
    КонецЕсли;
   НоменклатураОбъект=Номенклатура.ПолучитьОбъект();
   НоменклатураОбъект.НомерГТД=ГТДссылка;
   НоменклатураОбъект.Записать();
КонецЕсли;