Имя: Пароль:
1C
1C 7.7
v7: ТиС добавление общего реквизита документа
0 bug16
 
31.01.13
16:43
Здрасти!
Такой вопрос, чем чревато добавление нового общего реквизита для документов?
вообщем ситуация в следующем. В договоре создал новые реквизит для указания торгового представителя! Если в запросе обращаюсь например так:

|ТОрговый= Регистр.Продажи. Покупатель.ТекущийДокумент.Договор.ТорговыйПредставитель;

то получается ошибка. Если обращаться таким же образом в общий реквизит то ошибки нет. Так вот я создал новый общий реквизит и присвоил ему Договор.ТорговыйПредставитель!

не вылезет это потом боком?
1 Ёпрст
 
31.01.13
16:45
проще было реквизит в регистр воткнуть
2 akaBrr
 
31.01.13
16:46
(0) если данные берете из регистра, то и добавляйте измерение или реквизит в регистр, в зависимости от целей
3 bug16
 
31.01.13
16:48
а почему править лучше регистр?
4 PALESIA
 
31.01.13
16:51
(0) текст запроса может кинешь?
5 Mikeware
 
31.01.13
16:53
Все зависит от соотношения радиусов...
но на мой взгляд - "общий реквизит" - не самое лучшее решение. хотя и возможное...
6 KUBIK
 
31.01.13
16:54
чем чревато добавление нового общего реквизита для документов = новые доп. тормоза
7 bug16
 
31.01.13
16:54
(4) ЧТо это даст? Мне не жалко )
Это отчет анализ продаж если че

Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;
   |Фирма            = Регистр.Продажи.Фирма;
   |УпрАналитика    = Регистр.Продажи.Фирма.УпрАналитика;
   |ЮрЛицо        = Регистр.Продажи.Фирма.ЮрЛицо;
   |Покупатель    = Регистр.Продажи.Покупатель;

    |Торговый=Регистр.Продажи.ТекущийДокумент.ОбРеквТоргПредстав;

   |СвойствоПок    = Регистр.Продажи.Покупатель.ОсновноеСвойство.ЗначениеСвойства;
   |Номенклатура    = Регистр.Продажи.Номенклатура;                
   |СвойствоТМЦ    = Регистр.Продажи.Номенклатура.ОсновноеСвойство.ЗначениеСвойства;
   |Поставщик        = Регистр.Продажи.Поставщик;
   |СвойствоПост    = Регистр.Продажи.Поставщик.ОсновноеСвойство.ЗначениеСвойства;";
8 Mikeware
 
31.01.13
16:56
(6) если он е в индексе, не в графе - по пофиг
9 bug16
 
31.01.13
16:57
а почему не дает напрямую обратится к Договору... тобишь ТекущийДокумент.Договор
10 PALESIA
 
31.01.13
16:58
(7) это точно ничего не даст б.... весь запрос гони - чтобы видно было накуя тебе твой торговый представитель - нах из-за него регистр портить ...
11 miki
 
31.01.13
16:58
(8)Он же наверняка его последним добавит...
12 Mikeware
 
31.01.13
16:59
(9) а\патамушта неизвестно, есть ли у ТекущегоДокумента реквизит Договор... а если и есть, то как он в данном случае называется...
13 bug16
 
31.01.13
17:01
(10) торгового добавляю, чтобы была возможность формировать дебиторку, анализ продаж в разрезе торгового представителя...
14 bug16
 
31.01.13
17:02
(12) отладчиком смотрел запрос, есть такой реквизит.. ТекушийДокумент.Договор
15 PALESIA
 
31.01.13
17:03
(0) короче ни разу не телепат. если не олень, то поимеешь из ентого пользу:

НужныйПредставитель = ...;
ТекстЗапроса = "
...
ТОрговый= Регистр.Продажи.Покупатель.ТекущийДокумент;
Условие(ТОрговый.Договор.ТорговыйПредставитель = НужныйПредставитель)";
16 Mikeware
 
31.01.13
17:06
(14) у одного ТекущегоДокумента есть, у другого - нет..
17 miki
 
31.01.13
17:10
(0)
Привяжи торгпреда к контрагенту, а не к договору, как вариант.
18 bug16
 
31.01.13
17:11
(17) с одним контрагентов могут работать два торговых.. ((
(15) что ж так грубо, олень не олень.. щас попробую...
19 PALESIA
 
31.01.13
17:12
(17) Договор обычно у всех доков по Контрагерам регистра продаж есть ... хотя хз чего у него там дописано - не выдавишь)
20 PALESIA
 
31.01.13
17:13
(18) нифига не грубо: тебя код просили - вообщет ты сам в (0) должен был его кинуть, - а ты огрызок ничего не значащий скинул ...
21 bug16
 
31.01.13
17:18
Процедура Сформировать(ЗакрытьДиалог=0)
   
   Перем Запрос, ТекстЗапроса;
   
   Если глПроверкаДаты(ДатаНачала,ДатаКонца)=0 Тогда
       Возврат;
   КонецЕсли;
   
   Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда
       Таб = СоздатьОбъект("Таблица");
   Иначе
       Таб.Очистить();
   КонецЕсли;      
   
   Таб.ИсходнаяТаблица( "АнализПродаж" );  
   
   // Здесь формируется отчет, который использует регистры, критичные к
   // последовательности проведения документов
   // поэтому сравним установленные даты периода формируемого отчета с ГП
   Если глПроверкаАктуальностиОтчета(ДатаНачала,ДатаКонца,Последовательность.ОсновнаяПоследовательность)=0 Тогда
       Возврат;
   КонецЕсли;      
   
   
   
   Расшифровка = СоздатьОбъект("СписокЗначений");
   Расшифровка.Установить("Отчет", "АнализПродаж");
   
   // все настройки помещаем в список
   Расшифровка.Установить("ДатаНачала",    ДатаНачала);
   Расшифровка.Установить("ДатаКонца",    ДатаКонца);
   Расшифровка.Установить("ВыбРазделитель1",ВыбРазделитель1);
   Расшифровка.Установить("ВыбРазделитель2",ВыбРазделитель2);
   Расшифровка.Установить("ВыбРазделитель3",ВыбРазделитель3);
   Расшифровка.Установить("ВидРазделителя",ВидРазделителя);
   
   Расшифровка.Установить("ВыбТМЦ",        ВыбТМЦ);
   Расшифровка.Установить("ВыбПокупатель",    ВыбПокупатель);
   Расшифровка.Установить("ВыбПоставщик",    ВыбПоставщик);
   Расшифровка.Установить("Группировки",    Группировки);
   Расшифровка.Установить("ВидЕдиницы",    ВидЕдиницы);  
   Расшифровка.Установить("ПоГруппам",        ПоГруппам);
   ////////////
   //////2013
   Расшифровка.Установить("ВыбТорговыеПредставители",    ВыбТорговыеПредставители);
   /////////////
   ///////////
   
   
   Расшифровка.Установить("ВыбСвойствоТМЦ",        ВыбСвойствоТМЦ);
   Расшифровка.Установить("ВыбСвойствоПокупателя",    ВыбСвойствоПокупателя);
   Расшифровка.Установить("ВыбСвойствоПоставщика",    ВыбСвойствоПоставщика);
   
   
   глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были
   
   // запомним МФ только если он задан
   Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
       Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);
   КонецЕсли;
   
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаНачала по ДатаКонца;
   |Фирма            = Регистр.Продажи.Фирма;
   |УпрАналитика    = Регистр.Продажи.Фирма.УпрАналитика;
   |ЮрЛицо        = Регистр.Продажи.Фирма.ЮрЛицо;
   |Покупатель    = Регистр.Продажи.Покупатель;
   //////////////
   ///////2013  
   //|Торговый=Регистр.Продажи.ТекущийДокумент.ОбРеквТоргПредстав;  
   
   |Торговый=Регистр.Продажи.ТекущийДокумент;
   
   |Условие (ТОрговый.Договор.ТорговыйПредставительДоговор = ВыбТорговыеПредставители);    
   
   
   
   //     Запрос.Торговый.Договор.ТорговыйПредставительДоговор
   ///////////////
   ///////////////////
   |СвойствоПок    = Регистр.Продажи.Покупатель.ОсновноеСвойство.ЗначениеСвойства;
   |Номенклатура    = Регистр.Продажи.Номенклатура;                
   |СвойствоТМЦ    = Регистр.Продажи.Номенклатура.ОсновноеСвойство.ЗначениеСвойства;
   |Поставщик        = Регистр.Продажи.Поставщик;
   |СвойствоПост    = Регистр.Продажи.Поставщик.ОсновноеСвойство.ЗначениеСвойства;";
   
   ЕстьАвтор = 0;
   ЕстьПроект = 0;                          
   НомСтроки = 0;
   НомКолонки = 0;
   
   // Проверка на необходимость включения в запрос переменной "Автор"
   // Сначала проверим, есть ли множественный фильтр по автору.
   Если ТаблицаМФ.НайтиЗначение("Автор", НомСтроки, НомКолонки) = 1 Тогда
       Если ТаблицаМФ.ПолучитьЗначение(НомСтроки, "ФлВкл") = 2  Тогда
           ЕстьАвтор = 1;
       КонецЕсли;
   КонецЕсли;                                                  
   
   // Если фильтра нет, то возможно есть группировка
   Если ЕстьАвтор = 0  Тогда
       НомСтроки = Группировки.НайтиЗначение("Автор");
       Если  НомСтроки > 0 Тогда
           Если Группировки.Пометка(НомСтроки)=1 Тогда
               ЕстьАвтор = 1;                
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   // Проверка на необходимость включения в запрос переменной "Проект"    
   НомСтроки = 0;
   НомКолонки = 0;
   Если ТаблицаМФ.НайтиЗначение("Проект", НомСтроки, НомКолонки) = 1 Тогда
       Если ТаблицаМФ.ПолучитьЗначение(НомСтроки, "ФлВкл") = 2  Тогда
           ЕстьПроект = 1;
       КонецЕсли;
   КонецЕсли;            
   Если ЕстьПроект = 0  Тогда    
       НомСтроки = Группировки.НайтиЗначение("Проект");
       Если  НомСтроки > 0 Тогда
           Если Группировки.Пометка(НомСтроки)=1 Тогда
               ЕстьПроект = 1;                
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   Если ЕстьАвтор=1 Тогда
       ТекстЗапроса = ТекстЗапроса +
       "
       |Автор      = Регистр.Продажи.ТекущийДокумент.Автор;";
   КонецЕсли;    
   
   Если ЕстьПроект=1 Тогда
       ТекстЗапроса = ТекстЗапроса +
       "
       |Проект  = Регистр.Продажи.ТекущийДокумент.Проект;";
       
   КонецЕсли;
   
   ТекстЗапроса = ТекстЗапроса +
   "
   |Себест      = Регистр.Продажи.Себестоимость;
   |Количество  = Регистр.Продажи.Количество;
   |ПродСт      = Регистр.Продажи.ПродСтоимость;
   |СебестВ     = Регистр.Продажи.СебестоимостьВ;
   |КоличествоВ = Регистр.Продажи.КоличествоВ;
   |ПродСтВ     = Регистр.Продажи.ПродСтоимостьВ;    
   |Функция СуммаСебест      = Сумма(Себест);
   |Функция СуммаКоличество  = Сумма(Количество);
   |Функция СуммаПродСт      = Сумма(ПродСт);
   |Функция СуммаСебестВ     = Сумма(СебестВ);
   |Функция СуммаКоличествоВ = Сумма(КоличествоВ);
   |Функция СуммаПродСтВ     = Сумма(ПродСтВ);";
   
   Загол="";
   
   НетОш = 1; // нет ошибок при наложении фильтров
   Если ВидРазделителя = 1 Тогда
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол);
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол);
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол);
   ИначеЕсли ВидРазделителя = 2 Тогда                                                  
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол);
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол);
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол);
   ИначеЕсли ВидРазделителя = 3 Тогда                                                  
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол);
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол);
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол);
   КонецЕсли;
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура",ВыбТМЦ,               "ВыбТМЦ",ТекстЗапроса,Загол,"СвойстваНоменклатуры");
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Поставщик",   ВыбПоставщик,         "ВыбПоставщик",ТекстЗапроса,Загол,"СвойстваКонтрагентов");
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Покупатель",  ВыбПокупатель,        "ВыбПокупатель",ТекстЗапроса,Загол,"СвойстваКонтрагентов");
   //////////////
   ///////2013
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ТОрговый",  ВыбТорговыеПредставители, "ВыбТорговыеПредставители",ТекстЗапроса,Загол);
   ////////////
   //////////////
   Если (ВыбСвойствоТМЦ.Выбран() = 1) Тогда
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоТМЦ", ВыбСвойствоТМЦ,       "ВыбСвойствоТМЦ",       ТекстЗапроса,Загол);
   КонецЕсли;                              
   Если (ВыбСвойствоПоставщика.Выбран() = 1) Тогда
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоПост",ВыбСвойствоПоставщика,"ВыбСвойствоПоставщика",ТекстЗапроса,Загол);
   КонецЕсли;                                    
   Если (ВыбСвойствоПокупателя.Выбран() = 1) Тогда
       НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "СвойствоПок", ВыбСвойствоПокупателя,"ВыбСвойствоПокупателя",ТекстЗапроса,Загол);
   КонецЕсли;                                    
   Если НетОш = 0 Тогда
       Возврат;
   КонецЕсли;
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Автор",   ,        ,ТекстЗапроса,Загол,"Автор");
   НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Проект",  ,        ,ТекстЗапроса,Загол,"Проект");
   
   ПечЗаголовок = "Анализ продаж ("+глДоллары.Наименование+")";      
   
   ПечЗаголовокСтолбца = "";  
   УстановитьГруппировкиЗапроса(ТекстЗапроса, ПечЗаголовокСтолбца);
   КоличествоГруппировок = СписокГруппировок.РазмерСписка();
   
   Если КоличествоГруппировок > 5 Тогда
       Предупреждение("Нельзя сделать больше 5 группировок!",60);
       Возврат;
   КонецЕсли;
   
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;  
   
   глЧислоСтрок = 0;
   
   Таб.ВывестиСекцию("Кнопки");
   НачПовт = Таб.ВысотаСекции("Кнопки");
   
   Таб.ВывестиСекцию("Шапка");
   НачПовт = НачПовт + Таб.ВысотаСекции("Шапка");
   
   Таб.ВывестиСекцию("ЗаголовокТаблицы");
   КонПовт = НачПовт + Таб.ВысотаСекции("ЗаголовокТаблицы");
   Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);
   
   глОживить(1);
   
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0, "АнализПродаж", "АнализПродаж");
   
   // ВЫВОД ГРУППИРОВОК ЗАПРОСА
   ВывестиГруппировку(Запрос,1);
   
   ПечатьСтроки(Запрос,0,"Всего","Всего:");              
   
   Таб.ОбластьПечати(3);
   
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);      
   Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
       Таб.Защита(1);
   КонецЕсли;
   
   Таб.Показать("Анализ продаж", "");
   
   Если (Обновить = 2)ИЛИ(ЗакрытьДиалог=1) Тогда
       СтрокаДействийФормы = "#Закрыть";
   КонецЕсли;
   
КонецПроцедуры // Сформировать()
22 bug16
 
31.01.13
17:20
в Договор добавил реквизит "ТорговыйПредставительДоговор"... на форму отчета кинул реквизит "ВыбТорговыеПредставители"
23 Mikeware
 
31.01.13
17:24
(21) а глобальник - слабО? :-)
24 bug16
 
31.01.13
17:24
(15) так то по идеи должно работать таким макаром... но ничего не выводит, и ошибки нету....
25 bug16
 
31.01.13
17:25
(23) да авно вопрос )))
26 PALESIA
 
31.01.13
17:26
(21) уже что-то))) там все верно сделано
(24) а ты фильтры проверь - там у тебя их через опоглобальную функцию понатыкано .... вообщем нет данных, удовлетворяющих условиям
27 bug16
 
31.01.13
17:30
(26) а вот таким то макаром работает
|Торговый=Регистр.Продажи.ТекущийДокумент.ОбРеквТоргПредстав;
где
ОбРеквТоргПредстав=Договор.ТорговыйПредставительДоговор

значит фильтр получается работает правильно
28 bug16
 
31.01.13
17:53
усё... получилось... сэнск PALESIA
29 Злой Бобр
 
31.01.13
17:58
(0) В документе договор невыбран. Добавь усливие на выбор доков только с выбранным договором и заработает.
30 bug16
 
31.01.13
18:00
(29) договор везде автоматом проставляется.... да все работает уже.. без дополнительных общих реквизитов....
31 Boroda
 
31.01.13
18:03
Еще в SQL варианте базы общий реквизит неогр.длины должен быть последним в списке.
AdBlock убивает бесплатный контент. 1Сергей