|
v7: Помогите со сравнением строки справочника и строки документа. | ☑ | ||
---|---|---|---|---|
0
SashaNNA
01.08.11
✎
16:21
|
Пока Докум.ПолучитьСтроку() = 1 Цикл
СПРпартТов=СоздатьОбъект("Справочник.ПартииТовараРасчСтоим"); СПРпартТов.ВыбратьЭлементы (); Пока СПРпартТов.ПолучитьЭлемент () = 1 Цикл Если СПРпартТов.ПоступлениеТовара = Докум.ПартияТовара.Основание тогда тз.Доходность = тз.Доходность + Докум.СуммаБезНДС - (Докум.Себестоимость * СПРпартТов.ПроцКурсРазн * Докум.Количество); //Иначе // тз.Доходность = тз.Доходность + Докум.СуммаБезНДС - (Докум.Себестоимость * Докум.Количество); КонецЕсли; КонецЦикла; КонецЦикла; |
|||
1
SashaNNA
01.08.11
✎
16:22
|
Извините, сообщение отправил случайно. Сейчас сформулирую вопрос.
|
|||
5
SashaNNA
01.08.11
✎
16:28
|
Ситуация такая, предположим есть 2 справочника (справочник А и Б) с одним общим реквизитом, нужно:
Если строка справочника А совпала по этому реквизиту со строкой из Б тогда = 1 Иначе = 2, и т.д. проверить весь справочник А по порядку на совпадение его строк с любой из строк справочника Б. Заранее спасибо. |
|||
6
kupec
01.08.11
✎
16:31
|
выбираешь строки в документе, а затем запросом ищешь совпадение в справочнике (запросом быстрее получится если справочник большой)
|
|||
7
Ёпрст
01.08.11
✎
16:35
|
(5)
select СпрА.id, СпрБ.id from $Справочник.А СпрА inner join $Справочник.Б СпрБ on $СпрА.Реквизит like '%'+$СпрБ.Реквизит+'%' |
|||
8
Cthulhu
01.08.11
✎
16:35
|
Цикл перебора элементов по справочнику А
Цикл перебора элементов по справочнику Б Если <Сравнение реквизита элемента справочника А с реквизитом элемента справочника Б дало тошонадо> Тогда <Делать то, што предусмотрено для тогошонадо>; Иначе <Делать то, што предусмотрено для тогошоНЕнадо>; КонецЕсли; КонецЦикла; КонецЦикла; |
|||
9
Lepochkin
01.08.11
✎
16:36
|
(7)Напугал парня своими прямыми запросами ))
|
|||
10
SashaNNA
01.08.11
✎
16:42
|
Получается:
СпрА=СоздатьОбъект("Справочник.А"); СпрБ=СоздатьОбъект("Справочник.Б"); СпрА.ВыбратьЭлементы (); Пока СпрА.ПолучитьЭлемент() = 1 Цикл СпрБ.ВыбратьЭлементы (); Пока СпрБ.ПолучитьЭлемент () = 1 Цикл Если СпрА.Рекв= СпрБ.Рекв тогда тз.тзз = 1; Иначе тз.тзз= 2; КонецЕсли; КонецЦикла; КонецЦикла; ??? |
|||
11
SashaNNA
01.08.11
✎
16:45
|
В этом случае получается ответ будет столько же раз сколько и строк в справочнике Б. А нужен только 1 ответ на каждую строку справочника А.
|
|||
12
SashaNNA
01.08.11
✎
16:47
|
(9) действительно напугал.
|
|||
13
Lepochkin
01.08.11
✎
16:54
|
Прервать;
Синтаксис: Прервать; Назначение: Прерывает выполнение цикла. Подробнее см. в документации, глава 'Управляющие операторы' |
|||
14
SashaNNA
01.08.11
✎
16:58
|
(13) Ну совсем понятно где его прервать. На сколько я понимаю это выражение нужно построить в принципе по другому, т.к. где бы его не прервал результат будет не правильный.
|
|||
15
Lepochkin
01.08.11
✎
17:00
|
СпрА.ВыбратьЭлементы ();
Пока СпрА.ПолучитьЭлемент() = 1 Цикл флНашли=0; СпрБ.ВыбратьЭлементы (); Пока СпрБ.ПолучитьЭлемент () = 1 Цикл Если СпрА.Рекв= СпрБ.Рекв тогда флНашли=1; прервать; КонецЕсли; КонецЦикла; Если флНашли=1 тогда тз.тзз = 1; Иначе тз.тзз= 2; КонецЕсли; КонецЦикла; |
|||
16
SashaNNA
01.08.11
✎
17:01
|
(15) спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |