Имя: Пароль:
1C
1С v8
Как бы переделать функцию.
0 zippygrill
 
04.06.13
10:42
не поможете переделать функцию? хочется избавиться от константы и чтобы не переделать когда новый склад появиться. это в идеале :)

функция ОпределитьНомерМагазина(текСсылка) экспорт
   
   типДок = типЗнч(текСсылка);
   
   склад1 = "<не заполнено>";
   склад2 = "<не заполнено>";
   
   складМагазин1 = _допКонстантаПолучить("СкладМагазин1");
   складМагазин2 = _допКонстантаПолучить("СкладМагазин2");
   
   если тип("ДокументСсылка.ВозвратТоваровПоставщикуИзНТТ") = типДок или
        тип("ДокументСсылка.ПоступлениеТоваровУслугВНТТ")   = типДок или    
        тип("ДокументСсылка.СписаниеТоваров")               = типДок тогда    
       
       склад1 = текСсылка.Склад;
       склад2 = "<не заполнено>";
       
   иначеЕсли тип("ДокументСсылка.ПеремещениеТоваров") = типДок тогда    
       
       склад1 = текСсылка.СкладОтправитель;
       склад2 = текСсылка.СкладПолучатель;
       
   иначе      
       
       возврат 0;    
       
   конецЕсли;
   
   если складМагазин1 = склад1 или складМагазин1 = склад2 тогда
       
       возврат 1;    
       
   иначеЕсли складМагазин2 = склад1 или складМагазин2 = склад2 тогда    
       
       возврат 2;    
       
   иначе      
       
       возврат 0;    
       
   конецЕсли;    
   
конецФункции
1 Господин ПЖ
 
04.06.13
10:43
за такие функции надо руки выдергивать и бить ими по щекам
2 zippygrill
 
04.06.13
10:44
(1) честно признаюсь что не моя.
3 Господин ПЖ
 
04.06.13
10:44
(2) дада... доставайте вашего друга, показывайте
4 skunk
 
04.06.13
10:46
5 zippygrill
 
04.06.13
10:47
(4) так и думал что кто-нибудь скинет эту ссылку :). но честное слово не я писал :)
6 Maxus43
 
04.06.13
10:47
склад с подразделением обычно связан. вот запросом выдёргивай по разным подразделениям склады например... я хз что тут вобще за логика. Всё переделать
7 skunk
 
04.06.13
10:49
надо у друга спросить, чего он хотел добиться данной функцией
8 Ненавижу 1С
 
гуру
04.06.13
10:49
сделайте у склада реквизит "НомерМагазина"
9 zippygrill
 
04.06.13
10:50
(6) вот и хочу полностью переделать
(8) регистр :)
10 Maxus43
 
04.06.13
10:50
реквизит НомерМагазина добавь в справочник склады в конце концов
11 Ненавижу 1С
 
гуру
04.06.13
10:50
(9) ну хочешь регистр, но ради этого заводить регистр сведений?
12 zippygrill
 
04.06.13
10:51
(10) у нас действует политика "девственная" конфигурация :)
13 zippygrill
 
04.06.13
10:53
а может быть для подразделение а не к складу?
14 Господин ПЖ
 
04.06.13
10:57
>у нас действует политика "девственная" конфигурация

судя по коду вас давно пора ее лишить...
15 zippygrill
 
04.06.13
11:01
да ладно тебе Д'артаньян!
16 1Сергей
 
04.06.13
11:03
Ещё есть Свойства и Категории, дабы не лишать девственности...
17 zippygrill
 
04.06.13
11:08
(16) знаю знаю :)
18 zippygrill
 
04.06.13
11:09
+ (17) и скорее всего свойства и буду использовать дабы не добавить справочник только для этого.
19 zippygrill
 
05.06.13
09:48
что-то совсем непродуктивная неделя у меня.
вот что получилось. как-то смущяет конструкция когда тип документа ПеремещениеТоваров.

   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ЗначенияСвойствОбъектов.Значение КАК КлючьНомерМагазина
       |ИЗ
       |    Документ." + СсылкаДокумента.Метаданные().Имя + " КАК ДокументРТ
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
       |        ПО ДокументРТ.Склад = ЗначенияСвойствОбъектов.Объект
       |            И (ЗначенияСвойствОбъектов.Свойство = &СвойствоСоответствиеРТиНомерМагазина)
       |ГДЕ
       |    ДокументРТ.Ссылка = &Ссылка
       |    И ЗначенияСвойствОбъектов.Значение ЕСТЬ НЕ NULL ";

   СвойствоСоответствиеРТиНомерМагазина = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Соответствие РТ и номер магазина");    
   Запрос.УстановитьПараметр("СвойствоСоответствиеРТиНомерМагазина", СвойствоСоответствиеРТиНомерМагазина);
   Запрос.УстановитьПараметр("Ссылка", СсылкаДокумента);
   
   //Меняем запрос если это ПеремешениеТоваров
   Если Тип("ДокументСсылка.ПеремещениеТоваров") = ТипЗнч(СсылкаДокумента) Тогда
       Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПО ДокументРТ.Склад = ЗначенияСвойствОбъектов.Объект", "ПО ДокументРТ.СкладОтправитель = ЗначенияСвойствОбъектов.Объект");
       
       Если Запрос.Выполнить().Выбрать().Следующий() Тогда
           
           ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
           Возврат СокрЛП(ВыборкаДетальныеЗаписи.КлючьНомерМагазина);
       
       Иначе
           З = Новый Запрос;
           З.Текст =
           "ВЫБРАТЬ
           |    ЗначенияСвойствОбъектов.Значение КАК КлючьНомерМагазина
           |ИЗ
           |    Документ." + СсылкаДокумента.Метаданные().Имя + " КАК ДокументРТ
           |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
           |        ПО ДокументРТ.СкладПолучатель = ЗначенияСвойствОбъектов.Объект
           |            И (ЗначенияСвойствОбъектов.Свойство = &СвойствоСоответствиеРТиНомерМагазина)
           |ГДЕ
           |    ДокументРТ.Ссылка = &Ссылка
           |    И ЗначенияСвойствОбъектов.Значение ЕСТЬ НЕ NULL ";
           З.УстановитьПараметр("СвойствоСоответствиеРТиНомерМагазина", СвойствоСоответствиеРТиНомерМагазина);
           З.УстановитьПараметр("Ссылка", СсылкаДокумента);
           Результат = З.Выполнить();            
           ВыборкаДетальныеЗаписи = Результат.Выбрать();            
           Если ВыборкаДетальныеЗаписи.Следующий() Тогда
               
               Возврат СокрЛП(ВыборкаДетальныеЗаписи.КлючьНомерМагазина);
               
           Иначе
               
               Возврат "";
               
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;

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

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

   Если ВыборкаДетальныеЗаписи.Следующий() Тогда
       Возврат СокрЛП(ВыборкаДетальныеЗаписи.КлючьНомерМагазина);
   Иначе
       Возврат ""; //Всегда проверить на пусту строку везде где используется функция!!        
   КонецЕсли;
20 Ненавижу 1С
 
гуру
05.06.13
09:50
надеюсь эта функция вызывается в цикле?
21 zippygrill
 
05.06.13
09:50
*смущает
22 zippygrill
 
05.06.13
09:52
причем тут вызов из цикла? :) из любой коллекции документов(да, тут цикл конечно) вызываеться это функция.
23 Ненавижу 1С
 
гуру
05.06.13
09:53
(22) ну хвост тебе в ж...
запрос в цикле тут не любят ))
24 zippygrill
 
05.06.13
09:59
))) у меня в конвертации есть массив документов которых нужно обработать/преобразовать для передачи в другой ИБ(это в общем :)) и там естественно нужно заполнить одно поле(служебное) документа. да, так получилось что циклом обхожу документы :)
25 zippygrill
 
05.06.13
10:00
возможно да, нужно пересмотреть эту обработку документов чтобы  запросы небыли в цикле :)
26 zippygrill
 
05.06.13
10:09
а так функция сгодится? :)
Основная теорема систематики: Новые системы плодят новые проблемы.