Имя: Пароль:
1C
1C 7.7
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) спасибо.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший