|
Быдло-Коддинг 2 | ☑ | ||
---|---|---|---|---|
0
Azxcvbn
11.03.13
✎
08:50
|
Предупреждаю! Некоторые моменты могут вызвать у вас дикий хохот.
Хотелось посмотреть как вы решили бы данную задачку. Задача такая сравнить справочники Контрагенты БП и УТ и если наименования одинаковые, но коды разные, заменить Код в торговли на Код из Бухгалтерии. Я сделал запрос с Торговли через Comobject. И начал сравнивать его с Результат = Запрос.Выполнить().Выборка(); Выборка = Справочники.Контрагенты.Выборка(); Пока Результат.Следующий() Цикл Пока Выборка.Следующий() Цикл Если Результат.Наименование = Выборка.Наименование Тогда Если Результат.Код <> Выборка.Код Тогда // Так как в Торговле Код Контрагента может быть занят, вначале прохожусь и затираю код, вставляю вместо перового нолика единичку в 9-значный код(Я знаю что эти Коды не заняты, программа будет использована 1 раз Код1 = "1" + Сред(Выборка.Код, 2); КомСправочник = Connection.Справочники.Контрагенты.НайтиПоНаименованию(Результат.Наименование).ПолучитьОбъект(); КомСправочник.Код = Код1; КомСправочник.Записать(); // Сохраняю нужные данные в массив Массив.Вставить(Колво,Выборка.Код); Массив2.Вставить(Колво,Результат.Наименование); Колво = Колво+1; КонецЕсли; КонецЕсли; КонецЦИкла; КонецЦикла; Для каждого Элемент2 из Массив2 Цикл //Номер = Массив.Получить(Колвл); //Теперь вставляю нужный Код с Бухгалтерии в Торговлю КомСправочник2 = Connection.Справочники.Контрагенты.НайтиПоНаименованиею(Элемент2).ПолучитьОбъект(); КомСправочник2.Код = Массив[Колвл]; КомСправочник2.Записать(); Колвл = Колвл+1; КонецЦикла; З.Ы. Все работает, прочту всю критику. |
|||
1
zak555
11.03.13
✎
08:51
|
сравнивать по ИНН/КПП и в случае совпадении делать перезапись ?
|
|||
2
lopus
11.03.13
✎
08:52
|
Зачем тебе это
|
|||
3
scanduta
11.03.13
✎
08:52
|
В разовых случаях быдло кодинг допустим...так что не прься если все работает
|
|||
4
mikecool
11.03.13
✎
08:53
|
код не отформатирован, даже смотреть не буду
|
|||
5
tdm
11.03.13
✎
08:53
|
работает не трожь!)
|
|||
6
tdm
11.03.13
✎
08:54
|
(3) +1, если нет проблем с производительностью и нет необходимости дальше это дело дорабатывать т.е. работает как есть
|
|||
7
tdm
11.03.13
✎
08:56
|
(0) >>Хотелось посмотреть как вы решили бы данную задачку
запросы) в 8-ке кошерно все делать через запросы... |
|||
8
Azxcvbn
11.03.13
✎
08:56
|
Люди учусь программировать, мне бы очень помогли ваши советы, мне не нравится как я их решаю, лучшее в голову не пришло, поэтому хотелось бы увидеть точки зрения более опытных людей.
|
|||
9
scanduta
11.03.13
✎
08:57
|
Иди сдавай спеца по платформе, там основы хорошие получишь.
|
|||
10
Галахад
гуру
11.03.13
✎
08:59
|
(0) Ну наверное, можно получить из Торговли запросом
наименование и код. Выгрузить в таблицу значений. Таблицу в строку ЗначениевСтрокуВнутр. В БП получить таблицу ЗначениеизСтрокиВнутр. Ну и запрос. |
|||
11
zak555
11.03.13
✎
08:59
|
(8) учи КД
|
|||
12
Эмбеддер
11.03.13
✎
08:59
|
(0) восхваляют быдлокодинг только быдлокодеры. ты же себя к ним не причисляешь, зачем такие темы создавать)))
|
|||
13
Azxcvbn
11.03.13
✎
08:59
|
(7) Можно ли как нибудь сделать 1 запрос и взять данные из БП и УТ? или Прийдется делать 2 запроса и потом их сравнвать?
|
|||
14
Azxcvbn
11.03.13
✎
09:00
|
(12) Отучиться от него
|
|||
15
tdm
11.03.13
✎
09:03
|
(8) >>справочники Контрагенты БП и УТ и если наименования одинаковые
я бы сопоставлял по ИНН и КПП а не по наименованию для начала, т.к. лишний пробел и "Результат.Наименование = Выборка.Наименование" уже не сработает) (13) можно получать таблицы, передавать и обрабатывать их внутри запросов) |
|||
16
be-may
11.03.13
✎
09:06
|
А тебе нужно полное соответствие наименований?
Т.е., например в торговле "Иванов И" а в бухии "Иванов И." (с точкой). и как ты понимаешь, с точки зрения 1С это будут разные Ивановы. Не хочешь поискать на вхождение ? -- Вообще если брать именно твой алгоритм , то я бы выборку, полученную запросом, отсортировала бы по Наименованию. Затем перебор справочника, а вторую не перебираем, а делаем поиск с помощью метода Найти(). Как только нашли подходящее наименование в выборке, начинаем двигаться в цикле. Как только наименование не совпадает с текущим наименованием элемента справочника - Прервать. чуть быстрее бы работала, т.к. не нужно каждый раз перебирать всю выборку.. |
|||
17
MrStomak
11.03.13
✎
09:07
|
Запросы или выборки тут наверное непринципиально, из кода непонятно что за запрос используется, непонятно зачем поиск по наименованию при этом еще везде присутствует - проседает производительность. Непонятно, зачем вся эта байда с массивами - почему сразу нельзя было поменять как надо? В ряде случаев можно существенно увеличить быстродействие, если выгружать данные в ТЗ и индексировать её по полю поиска, затем перебирать не вложенный цикл, а через поиск по ТЗ (требует оперативной памяти, если размер справочника очень большой, то так делать не стоит)
|
|||
18
be-may
11.03.13
✎
09:11
|
(13) можно. Ты б текст запроса к УТ написал бы, а мы б тебе помогли его "допилить"
|
|||
19
Azxcvbn
11.03.13
✎
09:11
|
(17) нелья поменять сразу так как будет ругаться что код не уникален
|
|||
20
VladZ
11.03.13
✎
09:11
|
(0) Лучший способ разрулить проблему - не создавать ее. Поэтому на этапе выгрузке из УТ в БП нужно сразу передавать правильный код. Если это изначально не сделано - со временем полезут расхождения по наименованиям. Т.е. соответствие объектов по наименованию не проканает...
|
|||
21
eduspec82
11.03.13
✎
09:12
|
хорошо что топикстартер понял кто он есть, катарсис :)
|
|||
22
MrStomak
11.03.13
✎
09:12
|
(18) Как это - одним запросом из БП и УТ?
|
|||
23
Azxcvbn
11.03.13
✎
09:13
|
(18) Запрс:
Ком = Новый COMObject("V81.COMConnector"); // создается объект COM-соединение Попытка connection = Ком.Connect("Srvr=""PC001"";Ref=""base01"";"+ "Usr=""Admin"";Pwd=111"); Исключение Сообщить(ОписаниеОшибки()); Возврат КонецПопытки; Запрос = connection.NewObject("Запрос"); Запрос.Текст = "ВЫБРАТЬ | Контрагенты.Наименование, | Контрагенты.Код, |ИЗ | Справочник.Контрагенты КАК Контрагенты |
|||
24
VladZ
11.03.13
✎
09:14
|
Я бы сравнил процесс автоматизации с игрой в шахматы... Ты должен думать, чем "система" ответит на твой ход. И какой будет твой последующих ход... И чем больше ходов ты можешь просчитывать - тем ты профессиональнее...
|
|||
25
Nandarou
11.03.13
✎
09:16
|
Весь код верхний первый избыточен из-за "НайтиПоНаименованию(Результат.Наименование)". Гонять две выборки а потом искать по наименованию бред.
Что верхний что нижний код работает только если справочники практически полностью совпадают и нет дублей по наименованию. Иначе НайтиПоНаименованию будет искать только первый из элементов справочника. |
|||
26
MrStomak
11.03.13
✎
09:16
|
(19) Есть ОбменДанными.Загрузка, есть префиксы...
|
|||
27
be-may
11.03.13
✎
09:42
|
(22) сорри, у автора ж 8.1.
в 8.2 есть внешние источники данных (http://v8.1c.ru/overview/Term_000000795.htm#1). Вот там можно В 7 с помощью прямых запросов тоже можно было. Только надо было убедиться, что сервер прилинкован. в 8.1. так сходу - не знаю как. Но, думаю, автору, на том уровне знаний, который есть сейчас, не стоит лезть в такие дебри, пусть оптимизирует свой алгоритм в (0). Тем более, что "все работает" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |