новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Методы справочников

    • #1
    • 05.07.2012 09:19
    • Отредактировано: 05.07.2012 09:39:02
    0
    Привожу листинг:
    Процедура ПриЗаписи()
    	полный_код = ПолныйКод();
    	полное_наим = ПолноеНаименование();
    	
    	спр_товары = СоздатьОбъект("Справочник.Товары");
    	спр_товары.ВыбратьЭлементы();
    	Пока (спр_товары.ПолучитьЭлемент() = 1) Цикл
    		тов = спр_товары.ТекущийЭлемент();
    		Если (полное_наим = тов.ПолноеНаименование()) И
    		(полный_кодтов.ПолныйКод()) Тогда // это место в коде вызывает жуткие подозрения что листинг неверный
    			Предупреждение("Товар """ + тов.ПолноеНаименование() + """ уже существует!
    			|Попробуйте ввести другое наименование.");
    			СтатусВозврата(0);
    		КонецЕсли;
    	КонецЦикла;
    КонецПроцедуры
    


    Книга Т.Н. Усиков, 1С: Предприятие Эффективное программирование.

    Думаю вставлять туда код:
    (полный_код = тов.ПолныйКод())
    

    , имеет ли смысл, ведь код проверяется и сам на уникальность, я еще проверял это без самой процедуры, с одинаковым кодом позицию не записывает.
    Разъясните ситуацию, коллеги :)
    • #2
    • 05.07.2012 09:50
    0
    Автоматическая проверка выдаст ошибку, а тут ситуация корректно обрабатывается. Не считая грамматических ошибок конечно.
    • #3
    • 05.07.2012 09:59
    0
    Вадим
    Автоматическая проверка выдаст ошибку, а тут ситуация корректно обрабатывается. Не считая грамматических ошибок конечно.


    Возможно, но в переменных
    полный_код = ПолныйКод();
    полное_наим = ПолноеНаименование();

    , содержится пустота. И поэтому о корректности судить не могу.
    P.S: Какие грамматические ошибки, кажись правильно излагаю свою мысли.
    • #4
    • 05.07.2012 10:15
    0
    ПолныйКод();
    ПолноеНаименование();

    А что происходит в етих процедурах?
    • #5
    • 05.07.2012 11:17
    0
    Киселев Артем Викторович
    ПолныйКод();
    ПолноеНаименование();

    А что происходит в етих процедурах?


    По логике это функции возвращают "Имя" и "Код", вбиваемого элемента, но проверяя в Конфигураторе, я заметил что они возвращают только если элементы уже записаны в справочник. Из-за этого код всегда пропускает одинаковые "Наименования". По этому не было бы проще напрямую обращаться к идентификатору?
    • #6
    • 05.07.2012 11:43
    0
    Элемент не записан, поэтому и "содержится пустота". Более того думаю до того как запишется элемент ПолныйКод() у него и нет.. Не понятно что вы хотите добиться? Проверяйте уникальность "Наименование, Код, Родитель"
    • #7
    • 05.07.2012 12:02
    0
    Вадим
    Элемент не записан, поэтому и "содержится пустота". Более того думаю до того как запишется элемент ПолныйКод() у него и нет.. Не понятно что вы хотите добиться? Проверяйте уникальность "Наименование, Код, Родитель"

    Я изучаю 1С 7.7 по книге. Вот и удивляюсь представленному листингу. Я не лох в программировании, знаю Java, C++, PHP. По работе возникла ситуация, приходится изучать бух. учет и соответствено популярную программу по его учету. Полно ответил на вопрос?
    • #8
    • 05.07.2012 12:21
    • Отредактировано: 05.07.2012 12:26:19
    +1
    Если (полное_наим = тов.ПолноеНаименование()) И
    		(полный_код =Тов.Код)

    Я ету строку как то так вижу))


    полный_код = ПолныйКод();
          полное_наим = ПолноеНаименование();

    Эту примерно так зависит отнаименований элемента
    полный_код = Код;
    полное_наим = Наименование или ПолноеНаименование;
    • #9
    • 06.07.2012 13:46
    • Отредактировано: 06.07.2012 13:47:34
    0
    Правильно будет так:

    Процедура ПриЗаписи()
    	полный_код = Код;
    	полное_наим = Наименование;	
    	
    	спр_товары = СоздатьОбъект("Справочник.Товары");
    	спр_товары.ВыбратьЭлементы();	
    	Пока (спр_товары.ПолучитьЭлемент() = 1) Цикл
    		тов = спр_товары.ТекущийЭлемент();
    		Сообщить("" + полное_наим + ":" + тов.ПолноеНаименование());
    		Если (полное_наим = тов.ПолноеНаименование()) Тогда
    Предупреждение("Товар """ + тов.ПолноеНаименование() + """ уже существует!
    			|Попробуйте ввести другое наименование.");
    			СтатусВозврата(0);
    		КонецЕсли;
    	КонецЦикла;
    КонецПроцедуры
    
    • #10
    • 06.07.2012 16:17
    0
    Правильно то оно правильно))) тока в первом варианте была проверка по коду и наименованию!! )))
    • #11
    • 06.07.2012 16:32
    0
    Киселев Артем Викторович
    Правильно то оно правильно))) тока в первом варианте была проверка по коду и наименованию!! )))


    Ну я еще кое что поменял в коде:
    Если ((полное_наим = тов.ПолноеНаименование()) И (полный_код <> тов.ПолныйКод())) Тогда
    

    так как он не дал перезаписать данные.

    А смысл перепроверять еще и по коду, когда сама 1С не дает записать одинаковый код, не понимаю.
    • #12
    • 06.07.2012 16:43
    • Отредактировано: 06.07.2012 16:45:22
    0
    Честно сказать я тоже)))) Ну автор книги посчитал необходимым))) видимо поэтому и криво написал листинг))
    • #13
    • 06.07.2012 16:43
    0
    Честно сказать я тоже))))
    • #14
    • 23.08.2012 02:07
    0
    Уникальность кодов может быть отключена в справочнике.
    • #15
    • 02.10.2012 18:39
    0
    Делал проверку такую пришлось добавлять параметры!! Ибо при таком раскладе регистр не учитывается и можно сделать дубль только потому что первая буква заглавная или прописная)))))
    • #16
    • 02.10.2012 19:25
    0
    а в чем проблема привести к одному регистру?
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться