Имя: Пароль:
1C
1С v8
Проверка подч элем-та спр через выбор или запрос? Учусь.
0 temsa
 
03.11.12
09:42
Задача: Загрузить из трех ексель файлов коробочные штрихкода.
в файлах 360 2600 и 2040 строк.

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

Вот кусок кода в цикле :

ШтрихкодКоробочного = СокрЛП(ExcelЛист.Cells(ТекущаяСтрока, 3).Text);
               КоличествоВКоробкеСтрока  = СокрЛП(ExcelЛист.Cells(ТекущаяСтрока, 6).Text);
               КоличествоВКоробке  = Число(Прав(КоличествоВКоробкеСтрока,2));
               
               НовыйЕдИзмНом = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
               НовыйЕдИзмНом.Наименование = "Кор";
               НовыйЕдИзмНом.Владелец = Номенклатура;
               НовыйЕдИзмНом.ЕдиницаПоКлассификатору = Ед;
               НовыйЕдИзмНом.Коэффициент = КоличествоВКоробке;
               НовыйЕдИзмНом.Записать();
               
               НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
               НаборЗаписей.Отбор.Владелец.Установить(Номенклатура);
               НаборЗаписей.Отбор.Штрихкод.Установить(ШтрихкодКоробочного);
               
               НоваяЗапись = НаборЗаписей.Добавить();
               НоваяЗапись.Владелец         = Номенклатура;
               НоваяЗапись.Штрихкод         = ШтрихкодКоробочного;
               НоваяЗапись.ТипШтрихкода     = EAN13;
               НоваяЗапись.ЕдиницаИзмерения = НовыйЕдИзмНом.Ссылка;
               НоваяЗапись.Качество = Качество;
               НаборЗаписей.Записать();
               Сообщить("Найден и создан для " + НаименованиеТовара);
1 temsa
 
03.11.12
09:43
Вот нашел v8: Как перебрать элементы подчиненного справочника?
там пишут про:
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
Выбрать (Select)
Синтаксис:
Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
Параметры:
<Родитель> (необязательный)

Подойдет мне это? Или все же таки запрос? А если запрос то какой?
2 temsa
 
03.11.12
09:45
Хочу проверить перед:

НовыйЕдИзмНом = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
               НовыйЕдИзмНом.Наименование = "Кор";

Есть ли ед изм у ном-ры чтоб не дублировать...
3 ДенисЧ
 
03.11.12
09:46
Если одноразовость - то поф. Что выборка, что запрос...
4 temsa
 
03.11.12
09:51
(3) По идее если внутри цикла будет выбрать или там же запрос то кто выиграет по скорости?
5 ДенисЧ
 
03.11.12
09:52
(4) сам же сказал, что одноразовый... Да и на таких условиях - практически одинаково
6 H A D G E H O G s
 
03.11.12
09:54
В принципе - пофиг, еденице измерения - маленький справочник (по реквизитам), основной провал будет в
ExcelЛист.Cells(ТекущаяСтрока, 3).Text
7 temsa
 
03.11.12
09:54
(5) Я бы даже не проверял бы это условие потому что оно создается впервые. Но мало ли вдруг где-то что уже создавалось.

Просто хочу более грамотно сделать это.
8 ДенисЧ
 
03.11.12
09:56
(7) грамотно в этом случае - так, как написать быстрее. Ибо больше на оптимизацию потратишь, чем она работать будет.
И вообще, не мной сказано - "Преждевременная оптимизация - одно из зол (злов)" (Preliminary optimisation - is a root of a evil)
9 H A D G E H O G s
 
03.11.12
09:57
must use the power!
UserRange

http://help1c.com/faq/view/1045.html
10 H A D G E H O G s
 
03.11.12
09:59
UsedRange конечно же.. Пардонте.

Мы, русские, должны помогать друг другу.
11 temsa
 
03.11.12
10:02
(10) Спасибо за ссылку. В будущем пригодится. Но в тестовой базе я загрузил данные из трех файлов за 3-5 минут. :)
Тему создал чтоб услышать пример красивого предварительного отбора запросом и потом по ней проверку :)
12 ДенисЧ
 
03.11.12
10:03
(10) Ми таки знаем, как ви, rусские, помогаете.. :-)
13 Живой Ископаемый
 
03.11.12
10:05
(11) выбирай запросом. всяко пригодится привыкать к земле.
14 shuhard
 
03.11.12
10:12
(0) запросом
однозначно
15 temsa
 
03.11.12
10:13
(13) (14) И как же мне запросом выбрать за пределами цикла предварительно.
отбор всех ед измерений с наименованием "Короб" и с владельцем а уже в цикле выбирать из запроса так?
16 ДенисЧ
 
03.11.12
10:13
(13) Ты ещё посоветуй селёдку молоком запить...
17 shuhard
 
03.11.12
10:16
(15) [отбор всех ед измерений с наименованием "Короб" и с владельцем]
и чё ?
18 temsa
 
03.11.12
10:31
(17) Перед циклом:

Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ЕдиницыИзмерения.Ссылка,
       |    ЕдиницыИзмерения.ЕдиницаПоКлассификатору,
       |    ЕдиницыИзмерения.Коэффициент
       |ИЗ
       |    Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
       |ГДЕ
       |    ЕдиницыИзмерения.ЕдиницаПоКлассификатору = &ВыбЕдКоробка";

   Запрос.УстановитьПараметр("ВыбЕдКоробка", ВыбЕдКоробка);

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

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

А далее в цикле провряем есть ли в запросе Номенклатура и ед имзерение
19 shuhard
 
03.11.12
10:33
(18) не удачный запрос:
нет в нём главного - владельца
20 Живой Ископаемый
 
03.11.12
10:34
(16) я же запиваю. почему бы не посоветовать... только потому что я скромный, и не привык навязывать свои ценности всем вокруг.
21 Живой Ископаемый
 
03.11.12
10:36
2(18) порвал шаблон.. Лучше вернись к (1) Чтобы перебрать элементы подчиненного справочника, нужно их выбрать. И для этого наложить условие на владельца.
Ну или не накладывать, если для многих владельцев, а просто группировать по нему.
22 shuhard
 
03.11.12
10:36
(20) допьёшься до СРК
23 temsa
 
03.11.12
10:37
(19) ой, точно тупанул....
24 Живой Ископаемый
 
03.11.12
10:37
(22)мне все так с детства говорят, и где они теперь?
25 shuhard
 
03.11.12
11:01
(24) не спорь со старшими (с)
26 Живой Ископаемый
 
03.11.12
11:22
(25) почему? откуда взялось это тупое ограничение?