Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   УПП82. Сверка ШтрихКодов (http://forums.kuban.ru/f1040/upp82_sverka_shtrihkodov-7003190.html)

Lisonia 09.07.2015 13:49

УПП82. Сверка ШтрихКодов
 
Ситуация такая.
Есть две базы. 1Основная, 2приемник.
В обеих базах заводили номенклатуру и создавали штрихкоды.

Из базы 1 перебрасывается номенклатура в базу 2.
В 2приемник - нужно отследить штрихкоды, для которых не совпадают владельцы в базах и заменить на владельца из 1Основной.
Соединение по ОЛе. ТДСтрока - список штрихкодов из Оле.

Отбор = Новый Структура("Штрихкод",ТДСтрока.ШтрихКод);

ПоискКода = РегистрыСведений.Штрихкоды.Получить(Отбор);

Выдает ошибку Недопустимое значение параметра (параметр номер '1')
Я понимаю, что у поля ШтрихКод тип Характеристика. Но как с ней работать, так и не поняла.
-----------
Сделала Запросом:
ПоискКода= Новый ("Запрос");
ПоискКода.Текст = "ВЫБРАТЬ
|Регистр.Штрихкод КАК ШтрихКод,
|Регистр.Владелец
|ИЗ
|РегистрСведений.Штрихкоды КАК Регистр
|ГДЕ
|Регистр.ШтрихКод = &ШтрихКод";

ПоискКода.УстановитьПараметр("ШтрихКод",ТДСтрока.ШтрихКод);

ПоискШК = ПоискКода.Выполнить().Выгрузить();
Для каждого СтрокаПоискШК Из ПоискШК Цикл

//замена владельца
// как спозиционироваться в регистре на найденную запись, что бы изменить владельца?

КонецЦикла;

Пожалуйста, подскажите.

P.s. (можете не кидаться камнями - такие мне достались с "исторически сложившимися" правилами базы. Потом нужно будет решить проблему синхронизации спр.)

Пудель 09.07.2015 15:39

"Я понимаю, что у поля ШтрихКод тип Характеристика, но всё равно работаю с ней так, как будто это строка"

Пудель 09.07.2015 15:49

в общем так
1. По отбору: Я бы попробовал использовать что-то с типом характеристика , либо Строка 200, как в характеристике. Просто строка и строка 200 - это скорее всего разные типы.
2. По позиционированию: почитайте описание метода "Прочитать" менеджера записи в СП. Там вроде понятный пример.

Lisonia 09.07.2015 15:57

(2) [1] и тем не менее, в Запросе к регистру принимается параметр строка
ПоискКода.УстановитьПараметр("ШтрихКод",ТДСтрока.Ш трихКод)
где ТДСтрока.Ш трихКод="123423..." (строка)
И присвоение в регистр при записи нового ШК - тоже принимается это значение (строка). В вот в Отборе - нет.

Lisonia 09.07.2015 15:58

СП - что сие означает?

roma n 09.07.2015 16:07

Из СП - сиречь СинтаксПомощника
Из описания метода Получить() менеджера регистра сведений
===========
Параметры:

<Отбор> (необязательный)

Тип: Структура.
Структура, содержащая отбор по измерениям регистра.
В переданной структуре должны содержаться те измерения, по которым должны быть отфильтрованы записи. В элементе структуры задается имя и значение отбора. [b]Должны указываться значения для всех измерений[/b].
====
Ты ж этим методом не с набором записей работаешь, а пытаешься получить значения ресурсов в [b]структуру[/b] (возвращаемое значение метода - тип структура).

Lisonia 09.07.2015 16:09

Вопрос - как в Отбор передать параметр ШтрихКод, который у меня в строковом выражении? еще раз - я его получаю по ОЛе, т.е. в принципе могу только простое значение получить

Или - как регистратор спозиционировать на найденную строку Запроса, дабы ее изменить

Пудель 09.07.2015 16:19

Вы попробовали то, что я рекомендую в 2?

Lisonia 09.07.2015 16:29

(7) Прочитать - Считывает записи из базы данных по установленному отбору.

Я не увидела ответа на мой вопрос, который как раз и состоял в том - как этот Отбор установить по имеющимся у меня данным.
Хоть для Менеджера, хоть для Набора.

roma n 09.07.2015 16:50

8-Lisonia > считай запросом все имеющиеся в регистре комбинации измерений с твоим ШК; оббегай коллекцию и значения всех измерений на каждой итерации скармливай в отбор

Пудель 09.07.2015 19:16

8-Lisonia > Я сказал метод менеджера записи смотреть, и пример к нему.

Lisonia 10.07.2015 09:36

(10) Да, я видела, но он не работает. Проблема опять в передаче ШтрихКода (((
ПоискКода = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
ПоискКода.ШтрихКод = ТДСтрока.ШтрихКод;
ПоискКода.Прочитать();
---------Результат:
ТДСтрока.ШтрихКод="2000000997339"
ПоискКода.Штрихкод=""

roma n 10.07.2015 09:42

11-Lisonia > Регистр сведений Штрихкоды содержит [b]единственное[/b] измерение ШтрихКод?

Пудель 10.07.2015 11:00

Где-то на полках пылятся книжки Радченко, Габеца, Хрусталевой, Гончарова и других полезных Вам авторов ).

Lisonia 10.07.2015 11:34

Т.е. Вы и сами ответа не знаете ... Жаль...

roma n 10.07.2015 11:59

14-Lisonia > ты умышленно игнорируешь (12)?

Lisonia 10.07.2015 12:12

Сорри, не обижайся. Голова кругом - кучу проблем нужно решить, и все срочно.
Нет, не умышленно. Думала это риторический вопрос был, т.к. регистр в УПП стандартный.

Вот в запросе я все перечисляю :
ЗапросШтрихК.Текст = "ВЫБРАТЬ
|Регистр.Штрихкод КАК ШтрихКод,
|Регистр.ТипШтрихкода.Наименование КАК ТипШтрихкода,
|Регистр.Качество.Наименование КАК Качество,
|Регистр.ЕдиницаИзмерения КАК ЕдИзм,
|Регистр.СерияНоменклатуры.Наименование КАК СерияНоменклатуры,
|Регистр.ХарактеристикаНоменклатуры КАК Характеристика,
|Регистр.Владелец КАК Владелец
|ИЗ
|РегистрСведений.Штрихкоды КАК Регистр
|";

roma n 10.07.2015 12:23

16-Lisonia > ну так читай документацию! единичная запись регистра определяется значениями *всех его измерений*. Всех! Понимаешь?
Это в твоём сознании значение поля Штрихкод уникально и идентифицирует запись. На самом деле оно идентифицирует МНОЖЕСТВО записей (в частном случае состоящее из одной записи).
Посему для работы с единичной записью (хоть методом Получить() менеджера регистра, хоть с использованием менеджера записи) необходимо указывать значения всех измерений. Всех, а не только ШК.

Lisonia 10.07.2015 13:28

А как же Отбор, который существует для Регистров? Там можно указать только один параметр, и получить доступ ко всем записям, где есть совпадение значений по этому параметру.

Lisonia 10.07.2015 13:29

И я спрашиваю не про ЗАПИСЬ, а про то, как спозиционироваться на запись, где одно из значений=Искомому. Это я делаю с Номенклатурой(Владельцем), с Документом-Регистратором...
Но вот с ШтрихКодом - не ищет

roma n 10.07.2015 13:34

18-Lisonia > не путай отбор метода Получить() и отбор набора записей или списка.
Спозиционироваться (на единственной записи) = однозначно определить запись => единственная возможность - указать значения все измерений

Lisonia 10.07.2015 13:46

Хорошо, пусть будут выбраны ВСЕ записи по измерению ШтрихКод.
Как это сделать?

roma n 10.07.2015 14:47

21-Lisonia > Запросом

Пудель 10.07.2015 14:59

14-Lisonia > Не дерзите учителям :).

Lisonia 10.07.2015 15:13

Смайлика на вас нет! ))))

Ребят, ну можно как-то по-развернутей ответ дать?))
Задачу вроде объяснила вам, а ответ - то в учебник заглянуть, то отрывочные функции....
Прочтите внимательно(0), проникнитесь, дайте действенный рецепт, то бишь код ...

Lisonia 10.07.2015 15:58

Сделала такой код, все равно вываливается - не записывает ((
-----------
НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
ТекущиеШК= НаборЗаписей.Выгрузить();

Для Каждого СтрокаШК Из ТекущиеШК Цикл
Владелец=НайтиНоменклатуру(СтрЗагрузкаШК.Владелец);

Если НЕ СтрокаШК.Владелец = Владелец Тогда

МенеджерЗаписи = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Штрихкод = СтрокаШК.Штрихкод;
МенеджерЗаписи.Владелец = СтрокаШК.Владелец;
МенеджерЗаписи.ЕдиницаИзмерения = СтрокаШК.ЕдиницаИзмерения;
МенеджерЗаписи.Качество = СтрокаШК.Качество;
МенеджерЗаписи.СерияНоменклатуры = СтрокаШК.СерияНоменклатуры;
МенеджерЗаписи.ТипШтрихкода = СтрокаШК.ТипШтрихкода;
МенеджерЗаписи.ХарактеристикаНоменклатуры = СтрокаШК.ХарактеристикаНоменклатуры;

МенеджерЗаписи.Прочитать();

Если МенеджерЗаписи.Выбран() Тогда
МенеджерЗаписи.Владелец= Владелец;
МенеджерЗаписи.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;

roma n 10.07.2015 18:26

Не записывает? Или записывает, но не удаляет прежнюю информацию?

Пудель 10.07.2015 20:32

24-Lisonia > "[em]дайте действенный рецепт, то бишь код[/em]" Мы делаем гораздо более полезную для Вас вещь - пытаемся заставить Вас понять принцип, а не скопировать готовый код.

Разницу между измерениями и ресурсами знаете?

Lisonia 10.07.2015 21:15

)) Это я ценю )) Сама не люблю, когда бездумно переписывают чужое решение. Просто так оказалось, что магазин перевели с одной фирмы на другую "на стыке смены программистов"... И прежний программист, то ли не учел данную проблему, то ли просто забыл о ней. Вообщем, за неимением основного списка ШК магазин практически не работает. Благо повезло, что покупателей в эти дни почти нет.
Я написала, но потом решила, что не все отлавливаю. Я почти придумала код, завтра буду проверять.

(26) С этим я тоже несколько запуталась. Я так понимаю, что нужно выбирать Записать (Ложь), в таком случае запись добавляется, т.к. мой регистр не подчинен и не периодический.
Измерение - то по чем идет отбор (номенклатура, склад)
Ресурс - то по чем можно получить сводные данные (сумма, колво)
Не понимаю, для чего реквизит и что за особенность обращения к нему. По мне его в измерение можно забросить )

Кстати, хотела выгрузить в ТЗ результат запроса из Оле, но получила все-равно Оле-объект. Запрос из текущей базы выгружается в ТЗ. Это такая особенность работы с ОЛе?

Чучундер 11.07.2015 01:47

28-Lisonia > вот представь что ты в Питере но внезапно хочешь увидеть оказаться в магадане

Максимум что получится это некий путь ведущий к магадану
Но получить магадан в питере ну никак

Lisonia 11.07.2015 09:26

Хоть бы один конкретный ответ хотя бы на один из вопросов. Так, беседа, а умничать тоже нужно к месту.
Когда препода спрашиваешь, почему ошибка, он не отсылает тебя читать весь учебник. А говорит какую формулу применить. Если не получается, он объясняет в чем ошибка применения. А тут - вода, вода, кругом вода... Обидно, ребят.

Пудель 11.07.2015 11:55

Киса, ты с какого франча?

Пудель 11.07.2015 11:58

"[em]Хоть бы один конкретный ответ хотя бы на один из вопросов[/em]"
"[em]Кстати, хотела выгрузить в ТЗ результат запроса из Оле, но получила все-равно Оле-объект. Запрос из текущей базы выгружается в ТЗ. Это такая особенность работы с ОЛе?[/em]"
Да. ТЗ существует в пределах "контекста". Передавать надо простые типы, точнее типы, поддерживаемые для передачи механизмами OLE/COM+. То есть к примеру COMSafe Array.

Один конкретный ответ, получите и распишитесь.

Lisonia 11.07.2015 12:28

При чем тут "киса"? Спасибо за пренебрежение к тому, кто знает меньше.

В результате запроса ссылки на данные обозначены ОЛе, по ним можно добраться и до простых типов. Например, Владелец - Оле, но получаем Владелец.Код = "строка", владелец.Наименование ="строка" и т.д.
Ну пофиг.
Спасибо, что хоть на один, пусть и косвенный вопрос, дали ответ.
Хотя нужную помощь, из-за которой и обратилась на сей форум, я пока так и не получила. Жаль, вроде тут умные люди крутятся, а вот помочь для вас - это проблематично

Lisonia 11.07.2015 13:14

В Наборе, если новую запись создаю - то добавляется, а если в наборе уже была запись, то пишет, что ШК уже имеет другого владельца.
НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Владелец.Установить(Владелец);
НаборЗаписей.Прочитать();

НовыйШК = НаборЗаписей.Добавить();
НовыйШК.Штрихкод = СтрокаШК.ШтрихКод;
НовыйШК.Владелец = Владелец; //ссылка
НовыйШК.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;

Знч=НайтиЕдИзм(Владелец, СтрокаШК.ЕдИзм);
НовыйШК.ЕдиницаИзмерения =Знч; //Ссылка

Знч = Справочники.Качество.НайтиПоНаименованию(СтрокаШК.Качество,Истина);
НовыйШК.Качество=Знч;

Если Владелец.ВестиУчетПоХарактеристикам Тогда
Знч=НайтиХарактеристику(Владелец,СтрокаШК.Характеристика);
НовыйШК.ХарактеристикаНоменклатуры= Знч;
КонецЕсли;

Попытка
НаборЗаписей.Записать(Ложь); //Ложь
Сообщить ("Добавлен ШК "+СтрокаШК.ШтрихКод+" к номенкл.код = "+Владелец.Код);
Исключение
Сообщить(""+ОписаниеОшибки());
КонецПопытки;

Пудель 11.07.2015 16:10

33-Lisonia > Не учите преподавателей, как преподавать, и они не будут называть Вас "кисами" :). У Вас фундаментальные пробелы в образовании, и ещё раз настоятельно рекомендую подтянуть их - либо очно - найдите себе живого наставника (поэтому и вопрос о франче, они там водятся иногда), либо читая умные книжки вышеперечисленных авторов.
34:
1. Зачем вообще набор здесь?
2. Очевидно, что то сообщение, которое выдаётся - выдаётся не платформой, ведь нет такого понятия, как владелец записи регистра сведений. А как Вы считаете, чем оно может выдаваться, если не платформой?

EarlyBird 11.07.2015 17:17

(35) Борисом Нуралиевым?

Lisonia 11.07.2015 17:29

[URL=http://www.radikal.ru][IMG]http://i003.radikal.ru/1507/1c/6e32225b9e48.jpg[/IMG][/URL]

Пудель 12.07.2015 19:58

(36) Садись, "пять"! :D
(37) Скучные картинки шлёте.
[img]http://content.foto.mail.ru/bk/eddi36/_blogs/i-4765.jpg[/img]

Lisonia 12.07.2015 20:36

(38)Я поняла, похоже вы и сами-то не разбираетесь в вопросе, отсюда и отсутствие реальной помощи. Хорошо, что хоть живопись хоть немного знаете.
Надеюсь, когда Вам будет так же необходима помощь, как мне, Вы встретите более добрых людей и её все-таки найдете. Для каждого человека всегда найдутся более умные люди.

"Мудрец никогда не заявит, что знает все на свете, философ никогда не заявит, что он, мол, всегда прав."
« По-настоящему умный человек выражается простым языком, а тот, кто хочет произвести впечатление умного, старается говорить как можно сложнее, по существу не разбираясь в сути дела. »
Виилма Лууле.


Текущее время: 10:24. Часовой пояс GMT +3.