Имя: Пароль:
1C
1C 7.7
v7: Запрос по обработке документов...
Ø (длинная ветка 27.02.2013 18:51)
0 bananan
 
15.02.13
17:57
Значит так, написал (ко нечно же с вашей помощью) скрипт который проверяет расходные документы за указанный период и если в документе находит "ошибку" (скорее неточность) - то он и сообщает этот документэ, эго автора строку документа товар и выдает описание ошибки...
ТАк вот документы за ноябрь прошлого года - скрипт обрабатывал 13,5 минут - это долго...
как бы оптимизировать работу чтобы скрипт работал раза в 2-3 быстрее?
1 Rie
 
15.02.13
17:59
(0) А что за скрипт-то? Как он выглядит?
2 aka MIK
 
15.02.13
18:00
(0) Подзабить
3 bananan
 
15.02.13
18:00
Показыва весь код:
// Lita-M
Перем ПечататьЧек Экспорт;
Перем АвтоЯщик Экспорт;
Перем curUsers Экспорт;
Перем ДрайверККМЗагружен Экспорт;
Перем ДрайверККМустановлен Экспорт;
Перем ДоступАдмина Экспорт;
Перем ДоступМенеджера Экспорт;
Перем ДоступКадры Экспорт;

Перем ДоступБуха Экспорт;
Перем ДоступБухаФ Экспорт;
перем scanner Экспорт;
перем drvFPL Экспорт;

Перем OPOSDatecs Экспорт;  

Перем СписокИсторииОбъектов Экспорт;
Перем ПослОткрДок Экспорт;
Перем ТекущаяИБ Экспорт;
Перем обЧат Экспорт; // глобальная
Перем logJournal Экспорт; // глобальная
Перем lockObjects Экспорт; // глобальная
//(с) ABBYY 1999
Перем ВсеВыбрано Экспорт;
Перем Пользователь Экспорт;
Перем Да Экспорт;
Перем Нет Экспорт;
Перем Гривня Экспорт;
Перем ЧислоСтрок Экспорт;
Перем глГрупповаяОбработка Экспорт;
// (c) 1C Российские настройки
Перем глРасшифровка Экспорт;
Перем глФлагРасшифровки Экспорт;
Перем глТаблица Экспорт;
Перем глОбновить Экспорт;
Перем глТаблицаСчетов Экспорт;
Перем СчетаОстатковВВалюте Экспорт;
Перем СчетаЗадолженностейВВалюте Экспорт, НеМонетарныеСчета Экспорт;

// ЗП
Перем глДатаПереходаНаНДФЛ Экспорт;
Перем глДатаНачалаРасчетаИндексации Экспорт;
Перем ОсновнаяЗП Экспорт;
Перем глОбщиеУстановки Экспорт;
Перем Класс8 Экспорт;
Перем Класс9 Экспорт;
Перем Класс89 Экспорт;
Перем глИспользуетсяразделительУчета Экспорт;
Перем глТбИндексИнфляции Экспорт;
Перем глСписокОшибокОкругления Экспорт;

Перем СостояниеУРБД;
Перем глВсеВыбрано Экспорт;
Перем vk_hook Экспорт;

// ЗП
// Логгер
Перем глКомпонента1cpp Экспорт;
//для единого взноса
Перем глДатаПереходаНаЕСВ Экспорт;    

Перем ФильтрЖурнСпр Экспорт;    


// ===============================
Функция глЕстьРеквизитШапки(ИмяРеквизита, ВидДокумента) Экспорт
   Перем Реквизит;
   Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
        (ПустоеЗначение(ИмяРеквизита) = 1) Тогда
       Возврат Нет;
   КонецЕсли;
   Реквизит=Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита);
   Возврат ?(Реквизит.Выбран()=1, Да, Нет );
КонецФункции
// ===============================
Функция глЕстьРеквизитМнЧ(ИмяРеквизита,ВидДокумента) Экспорт
   Перем Реквизит;    
   Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
        (ПустоеЗначение(ИмяРеквизита) = 1) Тогда
       Возврат Нет;
   КонецЕсли;
   Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита);
   Возврат ?(Реквизит.Выбран()=1, Да, Нет );
КонецФункции //глЕстьРеквизитМнЧ
// ===============================

Функция глПолучитьДоговор(ТекКонтрагент) Экспорт
   тДог = СоздатьОбъект("Документ");
   тДог.ОбратныйПорядок(1);
   тДог.ВыбратьПоЗначению(ДобавитьМесяц(РабочаяДата(),-120),Дата(0),"ДогКонтрагентов",ТекКонтрагент);
   Пока тДог.ПолучитьДокумент() =  1 Цикл
       Возврат тДог.ТекущийДокумент();
   Конеццикла;    
   Возврат ПолучитьПустоеЗначение("Документ.Договор");
Конецфункции    

Процедура ПоставитьБлок(Дока) Экспорт
   Док=СоздатьОбъект("Документ");
   Док.НайтиДокумент(Дока);
   Если Док.утвержден=1 Тогда
       Если Найти("Бухгалтер,Администратор",НазваниеНабораПрав())>0 Тогда    
           Док.утвержден=0;  
           Док.ИзмБлок = 1;
       Иначе  
           Предупреждение("Нету на то прав",3);    
           Возврат;
       Конецесли;        
   Иначе
       Док.утвержден=1;
   Конецесли;
   
   Попытка
       Док.Записать();
       Предупреждение("Документ "+Док+" Блоировка = "+Док.утвержден,2);    
   Исключение
       Предупреждение("Документ заблокирован. Нужно его закрыть сначала",5);    
   Конецпопытки
КонецПроцедуры
// ===============================        
Процедура NPS_КонтрольПриЗаписи(Документ) Экспорт
   Если Документ.SyncStatus = 1 Тогда
       Документ.SyncStatus = 2;
   Конецесли;
КонецПроцедуры
// ===============================        
Функция глЯщикКоэф(Товар) Экспорт
   Подч=СоздатьОбъект("Справочник.ЕдИзм");
   Подч.ИспользоватьВладельца(Товар);
   Подч.ВыбратьЭлементы();
   Кол=0;    
   Пока Подч.ПолучитьЭлемент()=1 Цикл
       Кол=0;    
       Если Подч.ПометкаУдаления()=1 Тогда
           продолжить;    
       Конецесли;
       Если Подч.Ед=Перечисление.Единицы.ящик Тогда
           Кол=Подч.Коэффициент;
           прервать;    
       конецесли;
   конеццикла;    
   Возврат Кол;    
Конецфункции
// ===============================        
Функция глНайтиЕдиницу(ТМЦ,Ед) Экспорт
   Перем СпрЕд;
   СпрЕд=СоздатьОбъект("Справочник.ЕдИзм");
   СпрЕд.ИспользоватьВладельца(ТМЦ);
   СпрЕд.ВыбратьЭлементы();
   Пока СпрЕд.ПолучитьЭлемент()=1 Цикл
       Если (СпрЕД.ПометкаУдаления()=0) Тогда
           Если СпрЕд.Ед=Ед Тогда
               возврат СпрЕд;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   возврат СоздатьОбъект("Справочник.ЕдИзм");
КонецФункции
// ===============================        
Функция глТоварШтучный(ТМЦ) Экспорт
   Если (ТМЦ.БазЕдиница=Перечисление.Единицы.шт)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.комплект)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.вагон)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.бутылка)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.упаковка)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.ящик)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.пачка)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.блок)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.коробка)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.контейнер)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.поддон)
   или (ТМЦ.БазЕдиница=Перечисление.Единицы.цистерна)
   Тогда
       возврат 1;
   КонецЕсли;
   возврат 0;
КонецФункции
// ===============================        
Функция глПроверкаТМЦнаКратность(Тов,Клво) Экспорт
   Кратность=глНайтиЕдиницу(Тов,Перечисление.Единицы.блок).Коэффициент;
   Если Кратность=0 тогда
       Если глТоварШтучный(Тов)=1 Тогда
           Кратность=1;
       иначе
           Кратность=глНайтиЕдиницу(Тов,Перечисление.Единицы.ящик).Коэффициент;
       КонецЕсли;
   КонецЕсли;
   
   Если НЕ(Кратность=0) Тогда
       Если НЕ(Цел(Клво/Кратность)=Клво/Кратность) Тогда
           Сообщить("Количество для товара "+Тов+" не кратно ящику","!!!" );
           Возврат 0;
           //блок
       КонецЕсли;
   Иначе
       Сообщить("В весовом товаре "+Тов+" не установлена единица ящик","!!!");
       Возврат 0;
       //блок
   КонецЕсли;
   Возврат ВсеВыбрано;
КонецФункции
// ===============================        
Функция глПроверкаОтгрузкиКлиентаПоФорме(Конт) Экспорт
   Если Константа.КонтрольОтгрузкиКлиентовПоФорме = Да Тогда
       Если Найти("РасходнаяНакладная \ ВозвратнаяНакладная \ ПриходнаяНакладная",Конт.Вид()) > 0 Тогда
           Если Конт.Клиент.НужноФ1 = 0 Тогда
               Сообщить("Клиенту "+Конт.Клиент+" не разрешена отгрузка по форме 1");
               Возврат 0;
           КонецЕсли;    
           
       ИначеЕсли Найти("РасходнаяНакладнаяН \ ВозвратнаяНакладнаяН \ ПриходнаяНакладнаяН",Конт.Вид()) > 0 Тогда    
           Если Конт.Клиент.НужноФ2 = 0 Тогда
               Сообщить("Клиенту "+Конт.Клиент+" не разрешена отгрузка по форме 2");
               Возврат 0;
           КонецЕсли;    
       Конецесли;
       Возврат ВсеВыбрано;
   Иначе    
       Возврат ВсеВыбрано;
   КонецЕсли;
КонецФункции
// ===============================            


Функция ПоказатьБлок(Дока) Экспорт
   Попытка // для док логист
       ДокИзмБлок = ?(Дока.ИзмБлок=1,"З","");
       Если Дока.утвержден=1 Тогда
           Возврат(" "+ДокИзмБлок+"Б ");
       Иначе
           Возврат ""+ДокИзмБлок
       Конецесли;
   Исключение
       Возврат "";
   КонецПопытки;    
Конецфункции
// ===============================    
Процедура ЗафиксироватьПечать(Конт) Экспорт
   Конт.Печать = Конт.Печать + 1;
   Попытка
       Конт.Записать();
   Исключение
   Конецпопытки;
Конецпроцедуры
// ===============================
Функция глПроверкаПоРевизии(Конт,Действие=1) Экспорт
   Шаг = 0;
   ~М1:          
   Если (Конт.Вид() = "Перемещение") или (Конт.Вид() = "Хранение")  Тогда
       Если (Конт.Куда.Выбран() = 0) или (Конт.Откуда.Выбран() = 0) Тогда
           Возврат 0;
       Конецесли;
       Если Шаг = 2 Тогда
           Возврат 0;
       Конецесли;
       Склад = ?(шаг=0,Конт.Откуда,Конт.Куда);
       Шаг = Шаг + 1;
       Если Склад.Вид()<>"Склады" Тогда
           Перейти ~М1;
       Конецесли;    
       Док = Склад.ДокРевизия.Получить(РабочаяДата());
       Если Док.Выбран() = 0 Тогда    
           Перейти ~М1;
       Конецесли;    
   Иначе    
       Если Конт.Склад.Выбран() = 0 Тогда
           Возврат 0;
       Конецесли;    
       Склад = Конт.Склад;
       Док = Склад.ДокРевизия.Получить(РабочаяДата());
       Если Док.Выбран() = 0 Тогда    
           Возврат 0;    
       Конецесли;    
   Конецесли;    
   ДатаРевизия = Док.ДатаДок;
   Если Конт.ДатаДок <= ДатаРевизия Тогда
       Сообщить("Блок по ревизии "+Док);
       Если НазваниеНабораПрав()<>"Администратор" Тогда
           Если  Действие = 2 Тогда // При записи прочее
               СтатусВозврата(0);
               Возврат 1;
           Иначе           // Открытие документа    
               Конт.Форма.ТолькоПросмотр(1);                                                              
               Конт.Форма.кОК.Доступность(0);
               Возврат 1;
           Конецесли;
       Иначе    
           Возврат 0;            
       Конецесли;            
   Конецесли;            
   Если (Конт.Вид() = "Перемещение")или  (Конт.Вид() = "Хранение")  Тогда
       Перейти ~М1;
   Конецесли;                
   Возврат 0;
Конецфункции    
// ===============================
Функция ГотовностьККМ() Экспорт
   Если Константа.ИспользоватьOPOS = Да Тогда
       Возврат  1;
   КонецЕсли;    
   Результат = 1;
   Если Пользователь.ДоступкККМ=Да Тогда
       drvFPL.GetStatus(0);
       Если drvFPL.Enabled=0 Тогда Сообщить("Компонента не включена");Иначе
               Если drvFPL.AddPaper=0 Тогда Сообщить("Предупреждение: Добавьте бумагу !");КонецЕсли;
               Если drvFPL.PaperOut=0 Тогда Сообщить("Ошибка: Закончилась бумага !");Иначе
                       Если drvFPL.FiscalOpen=0 Тогда Сообщить("Ошибка: Открыт фискальный чек !");Иначе
                               Если drvFPL.NonFiscalOpen=0 Тогда Сообщить("Ошибка: Открыт не фискальный чек !");Иначе
                                       Если drvFPL.ServiceOpen=0 Тогда Сообщить("Ошибка: Открыт сервисный чек !");Иначе
                                               Если drvFPL.Abscent=0 Тогда Сообщить("Ошибка: Нет места в памяти ККМ !");Иначе
                                                       Если drvFPL.Less30=0 Тогда Сообщить("Предупреждение: Мало места в памяти ККМ !");Иначе
                                                               Если drvFPL.ResultCode<>0 Тогда Сообщить("Ошибка: ККМ не включен ! Включите ККМ и подождите 10 секунд.");
                                                               Иначе Результат = 0;                                                                
                                                               КонецЕсли;КонецЕсли;КонецЕсли;КонецЕсли;
                                                           КонецЕсли;КонецЕсли;КонецЕсли;КонецЕсли;
                                                       КонецЕсли;
                                                       Возврат Результат;
                                                   КонецФункции
// ===============================
Процедура ПодключитьККМ()
   Если ДрайверККМЗагружен=Да Тогда
       if drvFPL.Enabled=1 Then
           //drvFPL.GetStatus(0);
           if ГотовностьККМ()=0 Then
               RegNumber=drvFPL.TaxNumber;
               curUsers=CreateObject("Справочник.Регистраторы");
               curUsers.НайтиПоРеквизиту("РегНомер",RegNumber,1);
               if curUsers.Выбран()=1 Then       // to do what operator name
                   drvFPL.SetOperatorName(1,curUsers.Пароль1,Пользователь.КодПользователя);
                   Если Число(drvFPL.RetItem0)=0 Тогда
                       ДрайверККМустановлен=Да;
                       Message("Users setted as: "+Пользователь.КодПользователя);
                       Message("интерфейс ККМ");
                   Иначе    
                       Message("Datecs FP3530 ошибка установки Имени Кассира");
                   КонецЕсли;
               else
                   Message("Datecs FP3530 не найдена в справочнике "+RegNumber);
               EndIf;
           else
               Message("Datecs FP3530 не обнаружен или не включено питание");
           EndIf;                  
           
       else
           Message("Datecs FP3530 не включена компонента");
           ДрайверККМустановлен=Нет;
       EndIf;
   КонецЕсли;
КонецПроцедуры

// ===============================
функция UPCExt(in) Экспорт
   if strlen(in)<>8 then
       return 0;
   endif;
   sb=number(mid(in,7,1));
   if sb<3 then
       in=mid(in,1,3)+mid(in,7,1)+"0000"+mid(in,4,3)+mid(in,8,1);
   elsif sb=3 then
       in=mid(in,1,4)+"00000"+mid(in,5,2)+mid(in,8,1);
   elsif sb=4 then
       in=mid(in,1,5)+"00000"+mid(in,6,1)+mid(in,8,1);
   else
       in=mid(in,1,6)+"0000"+mid(in,7,2);
   endif;
   return 1;
EndFunction
Функция EANUPC(инпарам) Экспорт
   парам=инпарам; // для того чтобьі не изменился параметр
   Если mid(парам,1,2)="LM" Тогда
       return 1;
   КонецЕсли;
   Если mid(парам,1,1)="0" Тогда
       UPCExt(парам);
   КонецЕсли;
   // check crc
   длин=СтрДлина(парам);
   пар=0;нпар=0;
   Для і=1 по длин-1 Цикл
       Зн=Число(Сред(парам,длин-і,1));
       нпар=нпар+?(і%2=0,0,Зн);
       пар=пар+?(і%2=0,Зн,0);
   КонецЦикла;
   црц=Число(Сред(парам,длин,1));
   Если (нпар*3+пар+црц)%10=0 Тогда
       возврат длин
   КонецЕсли;
   возврат -(10-(нпар*3+пар)%10);
Конецфункции
// ===============================
Функция ПолучитьЛицензию(Пар1,Н) Экспорт; //К=фирма или клиент //Н=1 тютюн Н=2 алкоголь
   Если Н=1 Тогда
       Вид=Перечисление.ВидЛицензии.Тютюн;
   Иначе
       Вид=Перечисление.ВидЛицензии.Алкоголь;
   КонецЕсли;
   Если Пар1.Вид()="Фирмы" Тогда
       Л=СоздатьОбъект("Справочник.ЛицензииФирмы");
   Иначе
       Л=СоздатьОбъект("Справочник.ЛицензииКлиента");
   КонецЕсли;
   Л.ИспользоватьВладельца(Пар1);
   Л.ОбратныйПорядок(1);
   Л.ВыбратьЭлементы();
   Пока Л.ПолучитьЭлемент()=1 Цикл
       Если Л.ВидЛицензии=Вид Тогда
           Возврат "ліцензія на "+Л.ВидЛицензии+" "+СокрЛП(Л.НомерЛицензии)+?(Л.ДатаЛицензии>Дата("01.01.00")," до "+Л.ДатаЛицензии,"");
       КонецЕсли
   КонецЦикла;
   Возврат "";
КонецФункции

Функция ПолучитьДоговор(Клиент)  Экспорт; //К=фирма или клиент //Н=1 тютюн Н=2 алкоголь
   Л=СоздатьОбъект("Справочник.Договора");
   Л.ИспользоватьВладельца(Клиент);
   Л.ОбратныйПорядок(1);
   Л.ВыбратьЭлементы();
   Пока Л.ПолучитьЭлемент()=1 Цикл
       Возврат "договір куплі-продажу № "+СокрЛП(Л.Номер)+?(Л.ДатаЗак>Дата("01.01.99")," від "+Л.ДатаЗак,"")+?(Л.СумаДог>0," на суму "+Л.СумаДог,"")+ " до "+Л.ДатаЗакр;
   КонецЦикла;
   Возврат "";
КонецФункции

Функция ПолучитьДоговорН(Клиент)  Экспорт; //К=фирма или клиент //Н=1 тютюн Н=2 алкоголь
   Л=СоздатьОбъект("Справочник.ДоговораН");
   Л.ИспользоватьВладельца(Клиент);
   Л.ОбратныйПорядок(1);
   Л.ВыбратьЭлементы();
   Пока Л.ПолучитьЭлемент()=1 Цикл
       Возврат ""+СокрЛП(Л.Договор.ВидДоговора)+" № "+СокрЛП(Л.Договор.НомерДок)+" від "+Л.Договор.ДатаНачала + " до "+Л.Договор.ДатаКонца;
   КонецЦикла;
   Возврат "";
КонецФункции

// ===============================
// ===============================
Функция ДоступКдокументу(Конт,Сообщение=1)
   Если Найти(Константа.ЮзерыДоступа,"/"+Число(Пользователь.Код)+"/")>0 Тогда
       возврат 1;
   КонецЕсли;
   Если (Конт.ДатаДок > Константа.ДатаЗапретаРедактирования) и ((Конт.ДатаДок > '31.03.11') или (Константа.ЗапретПроведенияДоАпреля2011=Нет)) Тогда  
   Иначе      
       Сообщение=0;
       ДатаСооб = ?(Константа.ДатаЗапретаРедактирования > '31.03.11',Формат(Константа.ДатаЗапретаРедактирования,"ДДДММММГГГГ"), '31.03.2011');
       Предупреждение("Запрещено редактирование \ удаление документов (операций), "+РазделительСтрок+"введенных по "+ДатаСооб+" !",4);
       Возврат 0;
   КонецЕсли;
   //Если Конт.ДатаДок<=Константа.ДатаЗапретаРедактирования Тогда
   //    возврат 0;
   //КонецЕсли;  
   
   Если ДоступАдмина = 1 Тогда
       Если Конт.утвержден=1 Тогда
           возврат 0;
       КонецЕсли;
   КонецЕсли;    
   
   возврат 1;
КонецФункции

Процедура ИсторияОбъектов(Значение) Экспорт Далее    

Функция глПроверкаПериода(Дата1,Дата2) Экспорт
   Если Дата1 > Дата2 Тогда
       Предупреждение("Неправильно задан период отчета!"+РазделительСтрок+
       "Дата начала больше даты окончания периода.");
       Возврат 0;
   КонецЕсли;
   Если Дата2 > КонецРассчитанногоПериодаБИ() Тогда
       Предупреждение("За выбранный период итоги не рассчитаны!"+РазделительСтрок+
       "Расчет итогов выполняется в режиме"+РазделительСтрок+
       """Операции - Управление бухгалтерскими итогами"".");
       Возврат 0;
   КонецЕсли;
   Возврат 1;
КонецФункции

Процедура ПроверкаРазрешенияРедактирования(Конт) Экспорт
   Перем Сообщение;
   ПослОткрДок=Конт.ТекущийДокумент();
   ИсторияОбъектов(Конт.ТекущийДокумент());    
   //Если Конт.АвторСозд.Выбран()=1 Тогда
   //    Если ПустаяСтрока(Конт.АвторСозд.Група)=1 Тогда
   //        Предупреждение("У Вас немає Коду ГРУПИ"+РазделительСтрок+"Зверніться До адміністратора!",4);
   //        СтатусВозврата(0);
   //        возврат;
   //    Иначе
   //        Если Найти(СокрЛП(Пользователь.Група),Сред(Конт.АвторСозд.Група,1,1))=0 Тогда
   //            Предупреждение("У Вас немає права доступу до документів НЕ Вашої ГРУПИ",4);
   //            Конт.Форма.ТолькоПросмотр(1);
   //            Возврат;
   //        КонецЕсли;
   //    КонецЕсли;
   //Иначе
   //    Если Найти(СокрЛП(Пользователь.Група),Сред(Конт.АвторСозд.Група,1,1))=0 Тогда
   //        Предупреждение("У Вас немає права доступу до документів НЕ Вашої ГРУПИ",4);
   //        Конт.Форма.ТолькоПросмотр(1);
   //        Возврат;
   //    КонецЕсли;
   //КонецЕсли;
   
   Если ДоступКдокументу(Конт,Сообщение)=0 Тогда
       //Если Последовательность.СписаниеПартий.ПринадлежитПоследовательности(Конт.ТекущийДокумент())>0 Тогда
           Конт.Форма.ТолькоПросмотр(1);
       //КонецЕсли;
       Если Сообщение = 1 Тогда
           Предупреждение("Разрешен только просмотр документа!",4);
       Конецесли;
       Возврат;
   КонецЕсли;
   Если Конт.ТекущийДокумент().Выбран()=1 Тогда
       попытка
           Если (ДоступАдмина=1)и(Конт.Склад.Вид=Перечисление.ВидыСкладов.оптовый)и(Конт.Склад.КодИБ<>ТекущаяИБКод())и(Найти(Константа.ЮзерыДоступа,"/"+Число(Пользователь.Код)+"/")=0) Тогда
               Конт.Форма.ТолькоПросмотр(1);
               Предупреждение("Разрешен только просмотр документа!"+Разделительстрок+"документ принадлежит другой базе",4);
               Возврат;
           КонецЕсли;
       исключение
       конецпопытки;
   КонецЕсли;
   Конт.ПриЗаписиПерепроводить(1);
   Если ДоступАдмина = 1 Тогда
       Если Конт.утвержден=1 Тогда
           Конт.Форма.ТолькоПросмотр(1);
           //Предупреждение("Разрешен только просмотр документа!",4);
       КонецЕсли;
   КонецЕсли;    
   Если (Константа.ВидимостьУчета=Нет)и(ДоступАдмина+ДоступБуха=2) Тогда
       попытка
           Конт.Форма.ВидУчета.Видимость(0);
       исключение
       конецпопытки;
       попытка
           Конт.Форма.утвержден.Видимость(0);
       исключение
       конецпопытки;
   иначе
       Конт.Форма.ТолькоПросмотр(0);
   КонецЕсли;
КонецПроцедуры
//=============================================================================
Процедура ОбработкаЯчейкиТаблицы(Расшифровка, СтандартнаяОбработка, Таблица) Экспорт
   Перем Отчет;
   
   Если ТипЗначенияСтр(Расшифровка) <> "СписокЗначений" Тогда
       СтандартнаяОбработка = 1;
       Возврат;
   КонецЕсли;
   
   // Расшифровка отчета
   Док = Расшифровка.Получить("Документ");
   Если ТипЗначения(Док) <> 0 Тогда
       ОткрытьФорму("Операция",, Док, Расшифровка.Получить("НомерПроводки"),
       Расшифровка.Получить("НомерКорреспонденции"),-1);
   Иначе
       Если Расшифровка.Получить("Меню") = 1 Тогда
           Меню = СоздатьОбъект("СписокЗначений");
           Меню.ДобавитьЗначение("КарточкаСчета", "Карточка счета");
           Если Расшифровка.Получить("Счет").КоличествоСубконто()>0 Тогда
               Меню.ДобавитьЗначение("ОборотноСальдоваяВедомостьПоСчету", "Ведомость по субконто");
           КонецЕсли;
           Меню.ДобавитьЗначение("АнализСчета", "Анализ счета");
           Меню.ДобавитьЗначение("ОтчетПоПроводкам", "Отчет по проводкам");
           Меню.ДобавитьЗначение("ГлавнаяКнига", "Обороты счета (Гл. книга)");
           Меню.ДобавитьЗначение("ЖурналОрдер", "Журнал-ордер (ведомость) по счету");
           Если Меню.ВыбратьЗначение(Отчет, "",,, 1) = 0 Тогда
               Возврат;
           КонецЕсли;
       Иначе
           Отчет = Расшифровка.Получить("Отчет");
       КонецЕсли;
       
       глРасшифровка = Расшифровка;
       глФлагРасшифровки = 1;
       глОбновить = Число(Расшифровка.Получить("Обновить"));
       Если глОбновить <> 0 Тогда
           глТаблица = Таблица;
       КонецЕсли;
       
       ОткрытьФорму("Отчет."+Отчет+"#");
       глФлагРасшифровки = 0;
       глРасшифровка = 0;
       глОбновить = 0;
   КонецЕсли;
КонецПроцедуры

//(с) ABBYY 1999
// ===============================
Процедура УстановкаБазЕд(Конт,Тов,УстЕд = 0) Экспорт
   
   ЕдИзм = СоздатьОбъект("Справочник.ЕдИзм");
   Если Тов = 0 Тогда
       Если ПустоеЗначение(Константа.СлужебныйТМЦ) = 0 Тогда
           Тов = Константа.СлужебныйТМЦ;
       Иначе
           Предупреждение("Не заполнено значение константы ""Служебный ТМЦ"", установка единицы измерения не выполнена!");  
           Возврат;
       КонецЕсли;
   КонецЕсли;
   Если ПустоеЗначение(Тов) = 1 Тогда
       Возврат
   КонецЕсли;
   НовЕд = ?(УстЕд = 0, Тов.БазЕдиница, УстЕд);
   
   ЕдИзм.ИспользоватьВладельца(Тов);
   ЕдИзм.ВыбратьЭлементы();
   Пока ЕдИзм.ПолучитьЭлемент()>0 Цикл
       Если ЕдИзм.Ед=НовЕд Тогда
           Конт.Ед = ЕдИзм.ТекущийЭлемент();
           Конт.Коэффициент = ЕдИзм.Коэффициент;
           Возврат;
       КонецЕсли;
   КонецЦикла;
   // еще нет базовой единицы
   ЕдИзм.Новый();
   ЕдИзм.Ед = НовЕд;
   ЕдИзм.Коэффициент = 1;
   ЕдИзм.Наименование = Строка(НовЕд);
   ЕдИзм.Записать();
   
   Конт.Ед = ЕдИзм.ТекущийЭлемент();
   Конт.Коэффициент=1;
КонецПроцедуры
Функция ПолучитьБазЕд(Тов,УстЕд = 0) Экспорт
   ЕдИзм = СоздатьОбъект("Справочник.ЕдИзм");
   НовЕд = ?(УстЕд = 0, Тов.БазЕдиница, УстЕд);
   ЕдИзм.ИспользоватьВладельца(Тов);
   ЕдИзм.ВыбратьЭлементы();
   Пока ЕдИзм.ПолучитьЭлемент()>0 Цикл
       Если ЕдИзм.Ед=НовЕд Тогда
           Возврат ЕдИзм.ТекущийЭлемент();
       КонецЕсли;
   КонецЦикла;
   // еще нет базовой единицы
   ЕдИзм.Новый();
   ЕдИзм.Ед = НовЕд;
   ЕдИзм.Коэффициент = 1;
   ЕдИзм.Наименование = Строка(НовЕд);
   ЕдИзм.Записать();

   Возврат ЕдИзм.ТекущийЭлемент();
КонецФункции

// ===============================
Функция КурсДляВалюты(Валюта,ДатаКурса) Экспорт
   Если Валюта=Константа.Гривня Тогда
       // Для базовой валюты курс всегда равен 1, поэтому отображаем курс Основной валюты
       Возврат Константа.ОсновнаяВалюта.Курс.Получить(ДатаКурса);
   Иначе    // для других валют записываем их собственный курс
       Возврат Валюта.Курс.Получить(ДатаКурса);
   КонецЕсли;
КонецФункции
// ===============================
// Возвращает номер документа без префикса
Функция глНомерБезПрефикса(Знач НомерДок) Экспорт
   Если Найти(НомерДок,"-") > 0 Тогда
       Возврат Число(Сред(НомерДок,Найти(НомерДок,"-")+1));
   Иначе
       Возврат Число(НомерДок);
   КонецЕсли;
КонецФункции
// ===========================
// Используется 4 формы:
// Пересчет(Сумма,ВалН,ВалК,КурсН,КурсК,Дата)
// Пересчет(Сумма,ВалН,ВалК,КурсН,Дата)
// Пересчет(Сумма,ВалН,ВалК,Дата,КурсК)
// Пересчет(Сумма,ВалН,ВалК,Дата)
Функция Пересчет(Сумма,ВалН,ВалК,Пар4,Пар5=0,Пар6=0) Экспорт
   Перем КурсН, КурсК, Дт;
   Перем КратН, КратК;
   Если (ТипЗначения(Пар4)=3) и (Пар5=0) и (Пар6=0) Тогда // форма 4
       Дт = Пар4;
       КурсН = ВалН.Курс.Получить(Дт);
       КурсК = ВалК.Курс.Получить(Дт);
   ИначеЕсли Пар6 = 0 Тогда
       Если (ТипЗначения(Пар4)=1) и (ТипЗначения(Пар5)=3) Тогда // форма 2
           КурсН = Пар4;
           Дт = Пар5;
           КурсК = ВалК.Курс.Получить(Дт);
       ИначеЕсли (ТипЗначения(Пар4)=3) и (ТипЗначения(Пар5)=1) Тогда // форма 3
           Дт = Пар4;
           КурсК = Пар5;
           КурсН = ВалН.Курс.Получить(Дт);
       Иначе
           Сообщить("Неверные параметры в функции Пересчет!");
           Возврат Сумма;
       КонецЕсли;
   ИначеЕсли (ТипЗначения(Пар4)=1) и (ТипЗначения(Пар5)=1) и (ТипЗначения(Пар6)=3) Тогда // форма 1
       КурсН = Пар4;
       КурсК = Пар5;
       Дт = Пар6;
   Иначе
       Сообщить("Неверные параметры в функции Пересчет!");
       Возврат Сумма;
   КонецЕсли;
   КратН = ВалН.Кратность.Получить(Дт);
   КратК = ВалК.Кратность.Получить(Дт);
   
   // пересчитываем
   Если ВалН = ВалК Тогда
       Возврат Сумма;
   КонецЕсли;
   Если ВалН = Константа.Гривня Тогда
       // грн -> вал
       Возврат Сумма*КратК/КурсК;
   ИначеЕсли ВалК = Константа.Гривня Тогда
       // вал -> грн
       Возврат Сумма*КурсН/КратН;
   Иначе
       // вал -> вал
       СуммаГрн = Сумма*КурсН/КратН;
       Возврат СуммаГрн*КратК/КурсК;
   КонецЕсли;
КонецФункции

// ===============================
Функция КурсСтр(Конт) Экспорт
   Если Конт.Валюта = Константа.Гривня Тогда
       Возврат "грн за "+Константа.ОсновнаяВалюта.Кратность.Получить(Конт.ДатаДок)+
       " "+Константа.ОсновнаяВалюта.Кратко;
   Иначе
       Возврат "грн за "+Конт.Валюта.Кратность.Получить(Конт.ДатаДок)+
       " "+Конт.Валюта.Кратко;
   КонецЕсли;
КонецФункции

// ===============================
Функция С_НДС(СуммаБезНДС, СтавкаНДС, Дт) Экспорт
   Возврат СуммаБезНДС * (1 + СтавкаНДС.Ставка.Получить(Дт));
КонецФункции                      

Функция глВалютаЗаказа(Заказ) Экспорт
   Если ПустоеЗначение(Заказ) = 1 Тогда
       Возврат Гривня;
   КонецЕсли;
   Попытка
       Вал = Заказ.Валюта;
   Исключение
       Вал = Гривня;
   КонецПопытки;
   Возврат Вал;
КонецФункции
// ===============================
Функция ФРМВал(Сум, Вал, СВалютой = 0) Экспорт
   Стр=СокрЛ(Формат(Сум,"Ч015.2.'"));
   Если ((Свалютой=1) ИЛИ (СВалютой = Да)) И (ПустаяСтрока(Стр)=0) Тогда
       Возврат Стр+" "+СокрП(Вал.Кратко);
   Иначе
       Возврат Стр;
   КонецЕсли;
КонецФункции

// ===============================
Процедура Радио3(ф1, ф2, ф3) Экспорт
   Если ф1 = 1 Тогда
       ф2 = 0;    ф3 = 0;
   Иначе
       Если (ф2 = 0) и (ф3 = 0) Тогда
           ф1 = 1;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

// ===============================
Процедура Радио2(ф1, ф2) Экспорт
   Если ф1 = 1 Тогда
       ф2 = 0;
   Иначе
       ф2 = 1;
   КонецЕсли;
КонецПроцедуры

//-(с) 1с ----------------------
Процедура Оживить(ДобСтрок) Экспорт
   ЧислоСтрок=ЧислоСтрок+ДобСтрок;
   Состояние("В отчет выведено "+ЧислоСтрок+" строк.");
КонецПроцедуры

// ===========================
Функция ПроверкаСканераШтрихКодов() Экспорт
   Если Константа.ИспользоватьСканерШтрихКодов = Да Тогда
       Возврат 1;
   Иначе
       Возврат 0;
   КонецЕсли;
КонецФункции

// ===============================
Функция УрбПН(Ин)
   сайз=СтрДлина(Ин);
   возврат Лев(Лев(Ин,сайз-1)+Симв(КодСимв(Прав(Ин,1))+Число(Прав(ТекущаяИБКод(),2))),сайз);
КонецФункции
// ===============================

Функция ПолучитьПрефиксНомераДокументов(Конт)
   Перем ПрефиксФирмы;
   ПрефиксФирмы = Сокрлп(Конт.Фирма.ПрефиксНомера);
   Если ТекущаяИБЦентральная()=0 Тогда      
       ПрефиксФирмы = СокрЛП(ТекущаяИБ.ПрефиксНомера);
       Если ПустоеЗначение(ПрефиксФирмы) = 0 Тогда
           Возврат ПрефиксФирмы;
       КонецЕсли;    
       
       Если глЕстьРеквизитШапки("Склад",Конт.Вид()) = Да Тогда
           Если ПустоеЗначение(Сокрлп(Конт.Склад.ПрефиксНомера)) = 0 Тогда
               ПрефиксФирмы = Сокрлп(Конт.Склад.ПрефиксНомера);
           Конецесли;
       ИначеЕсли глЕстьРеквизитШапки("Откуда",Конт.Вид()) = Да Тогда    
           Если Конт.Откуда.Вид()="Склады" Тогда
               Если ПустоеЗначение(Сокрлп(Конт.Откуда.ПрефиксНомера)) = 0 Тогда
                   ПрефиксФирмы = Сокрлп(Конт.Откуда.ПрефиксНомера);
               Конецесли;
           Конецесли;
       ИначеЕсли глЕстьРеквизитШапки("РСчет",Конт.Вид()) = Да Тогда    
           Если ПустоеЗначение(Сокрлп(Конт.РСчет.ПрефиксНомера)) = 0 Тогда
               ПрефиксФирмы = Сокрлп(Конт.РСчет.ПрефиксНомера);
           Конецесли;    
       ИначеЕсли глЕстьРеквизитШапки("Заказ",Конт.Вид()) = Да Тогда        
           Если глЕстьРеквизитШапки("Склад",Конт.Заказ.Вид()) = Да Тогда    
               Если ПустоеЗначение(Сокрлп(Конт.Заказ.Склад.ПрефиксНомера)) = 0 Тогда
                   ПрефиксФирмы = Сокрлп(Конт.Заказ.Склад.ПрефиксНомера);
               Конецесли;    
           Конецесли;    
       Конецесли;
   Конецесли;
   Возврат ПрефиксФирмы    
КонецФункции    

// ===============================
Процедура УстановитьНомерДокумента(Конт) Экспорт
   Если Конт.ТекущийДокумент().Выбран()=0 Тогда
       Конт.АвторСозд = Пользователь;
   КонецЕсли;
   ПрефиксФирмы = ПолучитьПрефиксНомераДокументов(Конт);
   ПрефиксНалоговыхДокументов = "";
   Если (Конт.Вид() = "Приложение2")
   ИЛИ ( (Ко
4 shadowfiend10
 
15.02.13
18:00
ну хоть бы код скрипта выложил
5 bananan
 
15.02.13
18:01
Упс, пардон не тот код скинул
вот теперь тот код:
Перем ВыбНачПериода, ВыбКонПериода;

//*******************************************


Функция Разность(Конт)
//Перем кат,минцена,докцена;

   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Автор");
   ТЗ.НоваяКолонка("Товар");
   ТЗ.НоваяКолонка("Ошибка");
   ТЗ.НоваяКолонка("Стр");
   Конт.ВыбратьСтроки();
   ТЗ.Автор   = Конт.Автор;
   Пока Конт.ПолучитьСтроку()=1 Цикл
       прихцена=Окр(Конт.ТМЦ.Цена_Прих.Получить(Конт.ДатаДок)*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)),2);
       докцена=Окр(?(Конт.Кво*Конт.Коэффициент=0,0,Конт.СуммаСНДС/(Конт.Кво*Конт.Коэффициент)),2);
       Если докцена<прихцена Тогда
           ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           ТЗ.НоваяСтрока();    
           ТЗ.Товар   = Конт.ТМЦ;                  
           ТЗ.Ошибка  = " має ціну нижчу за прихідну ";
           ТЗ.Стр     = Конт.НомерСтроки;
           ТЗ.Автор   = Конт.Отпустил;
       КонецЕсли;
       кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
       Если кат.Выбран()=1 Тогда
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
           минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
           Если докцена<минцена Тогда
               ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " має надто низьку ціну="+докцена+" мiнимальна="+минцена;
               ТЗ.Стр     = Конт.НомерСтроки;            
           КонецЕсли;
       КонецЕсли;        
   КонецЦикла;
   Возврат(ТЗ);
КонецФункции
//*******************************************


Процедура Сформировать()
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
   Таб.ВывестиСекцию("Шапка");
   Таб.Опции(0,0,Таб.ВысотаТаблицы());
   ОбДок = "Документ.РасходнаяНакладная";
   СчетИтер = 0;
   Пока СчетИтер<1 Цикл                  
       ВыбДок=СоздатьОбъект(ОбДок);
       Если СчетИтер = 0 Тогда
           ОбДок = "Документ.РасходнаяНакладная";
       Иначе
           ОбДок = "Документ.РасходнаяНакладнаяН";
       КонецЕсли;
       ВыбДок=СоздатьОбъект(ОбДок);
       ВыбДок.УстановитьФильтр(1,0);
       ВыбДок.ВыбратьДокументы(ДатаС,ДатаПо);
           иф = 1;
           кво = 0;
           кДок = 0;
           кОшиб=0;
       Пока ВыбДок.ПолучитьДокумент()<>0 Цикл
             Состояние("Перевірка "+ВыбДок+" ...");            
             кДок = кДок + 1;
             ТЗ=Разность(ВыбДок);            
             Если ТЗ.КоличествоСтрок()>0 Тогда
                ПечДок = ВыбДок.ТекущийДокумент();
                ТЗ.ВыбратьСтроки();
                Пока ТЗ.ПолучитьСтроку()=1 Цикл  
                   кОшиб=кОшиб+1;
                   ПечОшибка = ТЗ.Ошибка;        
                   ПечТовар = ТЗ.Товар;
                   Если ТЗ.Стр <> 0 Тогда
                       ПечНомерСтрокиСОшибкой = ТЗ.Стр;
                   Иначе                        
                       ПечНомерСтрокиСОшибкой = "А хто його знає";
                   КонецЕсли;
                   Таб.ВывестиСекцию("Документ");
                   ПредНомер = "";
                   ПредНомер = ПечДок.НомерДок;
                   Пока ТЗ.ПолучитьСтроку()=1 Цикл
                       ПечОшибка = ТЗ.Ошибка;
                       ПечТовар = ТЗ.Товар;
                       ПечНомерСтрокиСОшибкой = ТЗ.Стр;                    
                       кво = кво+1;
                       Если СтрДлина(ТЗ.Ошибка)>0 Тогда
                           //Обл = Таб.Область(12+1*иф, 2,(12+1*иф), 2);
                           //Обл.ЦветФона(1, 1, 1);
                           //Обл.ЦветТекста(125, 125, 125);
                           Таб.ВывестиСекцию("Ошибка");    
                           иф=иф+1;
                       КонецЕсли;
                КонецЦикла;
                КонецЦикла;
             КонецЕсли;
       КонецЦикла;        
       СчетИтер = СчетИтер + 1;
   КонецЦикла;
   Состояние("Готово!");  
   Предупреждение("Количество документов - "+кДок+" в них "+кОшиб+" ошибок");
   Таб.ТолькоПросмотр(1);
   Таб.Защита(1);
   Таб.Показать("Негаразд","");      
КонецПроцедуры
6 bananan
 
15.02.13
18:03
+(5) на сколько я понимаю - в даном коде - вряд-ли что можно оптимизировать, писать прямой запрос?
С запросом - я НЕ могу придумать как в запросе обрабатывать каждую строку документа..
7 Rie
 
15.02.13
18:05
(6) Пиши прямой запрос...
"Каждую строку документа" - если используешь 1С++, то $ДокументСтроки. Если нет - то смотри в DDS, как табличная часть называется.
8 bananan
 
15.02.13
18:09
(7) О прямом запросе я и думал...
Лан. пробую писать прямой запрос (если возникнут пробдемы - бюужу орбращаться)
К стати, чуть не забыл даный код что показан выше, так вот в некоторых случаях он просто выводит документ и автора документа а ошибки вроде как и нету - не могу найти почему...
может кто увидит?
9 bananan
 
15.02.13
18:28
+(8) И еще а как в прямом запросе организв\овать функцию и можно ли ее организовать?
10 Classic
 
15.02.13
18:37
(5)
Кривой
11 bananan
 
15.02.13
18:38
(10) Что кривой? код?
12 Classic
 
15.02.13
18:38
(11)
Ага
13 bananan
 
15.02.13
18:39
(12) А советтвой в чем? Порправить код, а как??
14 Classic
 
15.02.13
18:39
Навскидку.
У тебя почему-то вложенный двойной цикл по ТЗ.
Зачем-то ты сначала в ТЗ пишешь, потом бежишь по ТЗ. При большом количестве ошибок ты делаешь два раза обход
15 Mikeware
 
15.02.13
18:40
(11) Есть анекдот. Верблюда спросили: «Почему у тебя шея кривая?». «А что у меня прямое?» - ответил верблюд.
так вот, у тебя кривое практически все. кроме, пожалуй, извилин...
16 bananan
 
15.02.13
18:41
(15) Спасибо за омплименто, о Кривоизвилистый!
17 Classic
 
15.02.13
18:42
+(14)
Это просто пробежал глазами не вникая даже в процедуру проверки
18 BlackSeaCat
 
15.02.13
18:43
Сходу:

1. Проанализировать текст, все, что можно вычислять не в цикле - вынести из цикла.

Например:

ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);

это разве меняется в цикле?

2. Минимизировать многоточечность в выражениях - ощутимо замедляет.

То есть, вместо Конт.ТМЦ.Цена_Прих.Получить() написать

КонтТовар=Конт.ТМЦ;
КонтТовар.Цена_Прих.Получить()

и далее по тексту.

Причем, КонтТовар можно определить один раз за проход в цикле, а использовать - несколько раз, там дофига конструкций типа Конт.ТМЦ.
19 bananan
 
15.02.13
18:43
(17) И за то - спасибо, может еще чего увидишь - пиши, пожалуйста
20 Classic
 
15.02.13
18:44
ИспользоватьДату - даст тебе возможность не метаться к метаданным в определении, периодический это реквизит или нет
21 bananan
 
15.02.13
18:45
(18) Спасибо - сейчас посмотрю
22 bananan
 
15.02.13
18:49
(20) А где ИспользоватьДату, вроде только здесь:
Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
23 bananan
 
15.02.13
18:53
(14) Где у меня двойной цикл по ТЗ (что-то не вижу)?
24 bananan
 
15.02.13
18:54
+(23) упс, вложен\ый цикл по ТЗ - гашел
25 bananan
 
15.02.13
19:21
Я спрашивал у шефе - по поводу скорости исполнения скрипта - так максимум 2-3 минуты, следоавательно буду писать прямой запрос... Как в прямом запросе организовать функцию?
26 Classic
 
15.02.13
20:03
(25)
Зачем тебе там функция?
Там все в запросе организовать можно
27 bananan
 
18.02.13
14:08
(26) Я уже понял что все надо делать в запросе, да и SQL не расчитан на то чтобы можно было самому писать функции...
Но, я пока что с запросами 1С, а тем более SQL - мелко плаваю..
Так что, - прошу вашей помощи..
Понятно что код который в функции:
   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Автор");
   ТЗ.НоваяКолонка("Товар");
   ТЗ.НоваяКолонка("Ошибка");
   ТЗ.НоваяКолонка("Стр");
   Конт.ВыбратьСтроки();
   ТЗ.Автор   = Конт.Автор;        
   ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
   кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
   Пока Конт.ПолучитьСтроку()=1 Цикл
       контТовар = Конт.ТМЦ;
       прихцена=Окр(КонтТовар.Цена_Прих.Получить(Конт.ДатаДок)*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)),2);
       докцена=Окр(?(Конт.Кво*Конт.Коэффициент=0,0,Конт.СуммаСНДС/(Конт.Кво*Конт.Коэффициент)),2);                    
//        ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
       Если докцена<прихцена Тогда
          // ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           ТЗ.НоваяСтрока();    
           ТЗ.Товар   = Конт.ТМЦ;                  
           ТЗ.Ошибка  = " має ціну нижчу за прихідну ";
           ТЗ.Стр     = Конт.НомерСтроки;
           ТЗ.Автор   = Конт.Отпустил;
       КонецЕсли;
       //кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
       Если кат.Выбран()=1 Тогда
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
           минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
           Если докцена<минцена Тогда
               //3/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " має надто низьку ціну="+докцена+" мiнимальна="+минцена;
               ТЗ.Стр     = Конт.НомерСтроки;            
           КонецЕсли;
       КонецЕсли;        
   КонецЦикла;
   Возврат(ТЗ);
Надо засунуть в SQL - там будет несколько джоинов... С джоинами - я вообще - почти на нуле..
Но пока мне хотя бы выбрать номер документ (чтобы в итоговой таблице по нему можно было открывать сей документ), автора документа, ТМЦ и номер строки в которой это ТМЦ стоит с неправильной ценой (правильность цены определяет функция)...
То есть, вроде все знаю как делать - а вот сижу и смотрю на монитро - как баран на новые ворота..
т.е. на данный момент - поняти не имею как задать период для документов и как достучаться до автора документа..
У кого есть время - помогите, пожалуйста!
28 ДенисЧ
 
18.02.13
14:11
" SQL не расчитан на то чтобы можно было самому писать функции... "

Оппа... А мужики-то и не знают.. И клепают всякие stored proc и user-defined functions...
29 bananan
 
18.02.13
14:16
(28) Т.е. код что я показал можна таки засунуть в фунцию?
30 bananan
 
18.02.13
14:17
+(29) и все это можно будет использовать в прямом запросе?
31 ДенисЧ
 
18.02.13
14:19
да
32 bananan
 
18.02.13
14:22
(31) Это немнго радует. Ок, понятно что дата документа - будет браться из формы запроса... Так вот: как достучаться до даты документа и до автора документа в прямом запросе?
Документ.Автор и Документ,ДатаДок - парсер их незнает..
33 Wobland
 
18.02.13
14:25
(32) $Документ.Автор, а дата в журнале живёт
34 Wobland
 
18.02.13
14:27
для размышления:
ТекстЗапроса="
|SELECT DISTINCT
|    CAST(LEFT(Жур.Date_Time_IDDoc, 8) AS DATETIME) AS ДатаДок,
|    $Док.Касса AS [Касса $Справочник.Кассы]
|FROM
|    _1SJourn AS Жур
|    INNER JOIN
|        $Документ.ОтчетККМ AS Док
|        ON Док.IDDoc=Жур.IDDoc
|WHERE
|    Жур.Date_Time_IDDoc BETWEEN :ДатаНачала AND :ДатаОкончания~
|    AND Жур.Closed&1=1";
35 Mikeware
 
18.02.13
14:28
(29) сдается мне, что и в функцию это засовывать не надо...
36 bananan
 
18.02.13
14:28
Чтобы вы не говорили, мол я ничего сам не делю и т.д...
На данный момент напимсал такой запрос:
   ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Док $Документ],
       |    Жур.IDDocDef as Док_вид
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |    Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная";
37 bananan
 
18.02.13
14:29
(3) А как? Чеорез джоины?
38 bananan
 
18.02.13
14:33
$Документ.Автор - что-то у меня тоже не получается...
Meta name parser error: объект не найден "$Документ.Автор"
такой код запроса:
|SELECT
       |    Жур.IDDoc as [Док $Документ],
       |    $Документ.Автор,
       |    Жур.IDDocDef as Док_вид
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |    Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная";
39 Wobland
 
18.02.13
14:34
(38) Документ - это что такое? //мне не нужен ответ
40 bananan
 
18.02.13
14:38
(39) |SELECT
       |    Жур.IDDoc as [Документ $Документ],
А ввобще прошу, помогите кто может
41 Wobland
 
18.02.13
14:39
(40) что ценного ты узнал из (34)?
42 sapphire
 
18.02.13
14:40
(38) Поле "Автор"  небось общий реквизит, да?
43 bananan
 
18.02.13
14:41
(41) Честно говоря не понимаю зачем там джоиню...
44 sapphire
 
18.02.13
14:42
(34) А это чё такое, что-то не припомню такую конструкцию:
AND Жур.Closed&1=1
45 bananan
 
18.02.13
14:42
(42) Поле  Автор - это автор документа
46 bananan
 
18.02.13
14:42
(44) Вроде как журнал не закрыт?
47 Wobland
 
18.02.13
14:42
(44) проведённость
48 sapphire
 
18.02.13
14:43
(43) Как освоение Ицика Бен-Гана поживает?
49 bananan
 
18.02.13
14:45
(48) Читал в последний оаз где-то две недели назад..
50 bananan
 
18.02.13
14:45
Да и  Ицик с 1С ну никак не поможет
51 sapphire
 
18.02.13
14:47
(47) Туплю, битовое И
52 sapphire
 
18.02.13
14:47
(50) Ну, в таком разе веревка и мыло тебе в помощь...
53 sapphire
 
18.02.13
14:48
(49) Кабы ты не читал, а про-решал задачки, то не постил бы весь этот около 1С-ный поток сознания.
54 Wobland
 
18.02.13
14:50
(51) тс-ссс... щас автор заинтересуется
55 bananan
 
18.02.13
14:55
(53) А как (програмно) решать те задачи
и разве это поможет достучаться до автора документа:?
56 Wobland
 
18.02.13
14:57
(55) мы на втором или третьем курсе на бумажке дазы банных решали. пофих на синтаксическую верность, оценивался подход. после такого приёма экзамена вопрос "как достучаться до автора" в принципе не мог стоять. максимум - как организована структура БД
57 sapphire
 
18.02.13
14:59
(55) Хм. Это поможет если есть мозг, вам врядли
58 bananan
 
18.02.13
15:00
(56) на бумажке - так на бумажке, но как в запросе что я написал:
       |SELECT
       |    Жур.IDDoc as [Документ $Документ],
       |    $Документ.Автор,
       |    Жур.IDDocDef as Док_вид
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |    Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная";

достучаться до поля Автор документа?
       |    $Документ.Автор,
- не прохожит... :(
59 sapphire
 
18.02.13
15:00
(58) Дебил.
В конфигураторе посмотреть или в файле dd/dds
60 bananan
 
18.02.13
15:05
(59) Спасибо за комплимент..
В конфигуратрое смотрел в шапке документа и в табличной части НЕТ поля Автор
но в текущей версии скрипта я на автора выхожу таким образом:
ВыбДок.Автор
61 sapphire
 
18.02.13
15:15
(60) Я думал, что хотя бы пост (42) читал...
62 bananan
 
18.02.13
15:16
(61) Общий это реквезит - скорее всего да, но как к нему достучаться?
63 sapphire
 
18.02.13
15:18
+(61) Так что это не комплимент.
Вы крайне невнимательны.
Вам уже столько раз говорили, что для написания прямых запросов необходимы как минимум 2 типа знаний:
где какие данные хранит платформа 1С версии 7.7 и знание t-SQL  для извлечения этих данных. Вы нашим вежливым просьбам с упорством осла противитесь...
64 sapphire
 
18.02.13
15:18
(62) $ОбщийРеквизит.{Имя реквизита}
65 sapphire
 
18.02.13
15:19
(62) Скорее всего да, у Вас что , нет конфигурации и Вы пишете вслепую?
66 bananan
 
18.02.13
15:21
(64) Написал текст запроса такой:
|SELECT
       |    Жур.IDDoc as [Документ $Документ],
       |    $ОбщийРеквизит.Автор,
       |    Жур.IDDocDef as Док_вид
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
       |    Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная OR
       |    Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН";

выдает:
Для типизации поля "Документ", не найдено дополнительное типизирующее поле.
67 bananan
 
18.02.13
15:23
с (66) разобрался я там что=-то намутил
68 bananan
 
18.02.13
15:23
но, общий реквезит выдает число - видимо ид КАК мне вывести текстовое значение Автор?
69 sapphire
 
18.02.13
15:26
(66)
(66)
|SELECT
|    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
|,   $ОбщийРеквизит.Автор  --а автора типизировать не надо, да?
//|,   Жур.IDDocDef as Док_вид
|FROM
|    _1SJourn as Жур
|WHERE
|     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
| AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
//| OR  Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН"
|UNION ALL
|SELECT
|    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
|,   $ОбщийРеквизит.Автор
//|,   Жур.IDDocDef as Док_вид
|FROM
|    _1SJourn as Жур
|WHERE
|     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
//| AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
| AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН"
70 sapphire
 
18.02.13
15:26
(68) Тип в конфигураторе посмотри
71 Mikeware
 
18.02.13
15:27
(68) а документацию читать не пробовал?
72 sapphire
 
18.02.13
15:27
|SELECT
|    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
|,   $ОбщийРеквизит.Автор  --а автора типизировать не надо, да?
//|,   Жур.IDDocDef as Док_вид

|FROM
|    _1SJourn as Жур  (NOLOCK)
|WHERE
|     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
| AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
//| OR  Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН"

|UNION ALL
|SELECT
|    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
|,   $ОбщийРеквизит.Автор
//|,   Жур.IDDocDef as Док_вид

|FROM
|    _1SJourn as Жур (NOLOCK)
|WHERE
|     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
//| AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная

| AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН
73 sapphire
 
18.02.13
15:27
(71) Он читать прямо не умеет, только косо и вскользь
74 Mikeware
 
18.02.13
15:28
(65) не только вслепую, но еще и втупую...
75 Mikeware
 
18.02.13
15:29
(73) и когда он ее читал? хотя бы "криво и вскользь"?
в том, что ему посоветовали в декабре - это в первом десятке строк написано...
76 bananan
 
18.02.13
15:29
А как типизировать $ОбщийРеквизит.Автор?
77 sapphire
 
18.02.13
15:30
(75) Жаль что он не дубовом серит... Я б на (76) ответил...
78 sapphire
 
18.02.13
15:30
(76) Тип посмотри в конфигураторе.
79 bananan
 
18.02.13
15:31
Забыл я как посмотреть общие реквизиты, сейчас посмотрел Автор - это ТОЧНО общи1 реквизит. так как егео типизировать?
80 sapphire
 
18.02.13
15:31
(75) Следующий вопрос будет как посмотреть тип общего реквизита в конфигураторе?
:'(
81 sapphire
 
18.02.13
15:31
юю занавес
82 bananan
 
18.02.13
15:31
(80)  намек понял
83 sapphire
 
18.02.13
15:32
дейін нені? ?ой жетуге ?ажетке не бы мынадай жаз-, и??
84 bananan
 
18.02.13
15:32
Тип орбщего реквизхита Автор -  Справочник.Сотрудники
85 bananan
 
18.02.13
15:33
(83) Это что молдавский или киргизский мат? :)
86 sapphire
 
18.02.13
15:33
(84) И? ыволдмшцуан!!!!!!
87 sapphire
 
18.02.13
15:33
(85) Угадай
88 Mikeware
 
18.02.13
15:33
(83)(86) этчо за слова такие?
89 sapphire
 
18.02.13
15:34
(88) Это нет слов просто :)))))))))))
90 sapphire
 
18.02.13
15:35
(84) Хлопче, а ты Котляревского хоть читал?
91 bananan
 
18.02.13
15:35
(86) либо молдавский либо какой-то азиатский, а судя с (88) этого языка не только я не знаю
92 bananan
 
18.02.13
15:35
(90) Читал, но давно еще в школе
93 sapphire
 
18.02.13
15:36
(92) Это сколько лет назад?
94 sapphire
 
18.02.13
15:37
(91) Ладно, тебе чё важней как типизировать алаи что за хня написана в тех постах?
95 bananan
 
18.02.13
15:39
Типизировал и получилось
Типизировал так:
|,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
96 sapphire
 
18.02.13
15:40
(95) И? Чё в итоге-то, получилось али как?
97 bananan
 
18.02.13
15:49
До получилось - еще очень долго :(
А получилось выдает на гора номер документа и автора документа за выбраный период..
98 sapphire
 
18.02.13
15:50
(97) И чо?
99 bananan
 
18.02.13
15:52
Мне еще здесь же надо видеть ТМЦ из документа и номер строки документа в которой этот ТМЦ стоит,
на а потом уже функцию прикрутить (чтобы он выбирал строки в документе которые соответствут функции)
100 sapphire
 
18.02.13
15:55
(99) Не вижу проблем
101 bananan
 
18.02.13
15:56
(100) Я сейчас попробую достучаться до тмц, а дальше уж точно без вашей помощи несправлюсь
102 sapphire
 
18.02.13
15:58
(101) А что так? Головка бо-бо?
103 bananan
 
18.02.13
16:00
До ТМЦ достучаться тоже вроде не получается:
   ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,     $Документ.ТМЦ [ТМЦ $Справочник.ТМЦ]
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |                AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
       |UNION ALL
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
       |,   $ОбщийРеквизит.Автор
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       | AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН";
выдает:
Meta name parser error: объект не найден "$Документ.ТМЦ"
104 sapphire
 
18.02.13
16:02
(103) Сказочный долбo-job (с)
105 sapphire
 
18.02.13
16:03
(103) А ты стучаться до ТМЦ куда ходишь?
106 bananan
 
18.02.13
16:06
104-105 ТМЦ, понятно берем из РасходнаяНакладная или из РасходнаяНакладнаяН
107 Mikeware
 
18.02.13
16:06
(104) не.... даже в сказках таких не бывает...
блин, ну я понимаю - первый день. ну первую неделю... даже первый месяц... но тут уже два месяца только с 1с++...
108 sapphire
 
18.02.13
16:06
(106) Idiotten, это и так ясно, но где этот реквизит хранится физически?
109 sapphire
 
18.02.13
16:07
(106) Ты чо настолько туп что не можешь понять разницу шапка/табличная часть?
110 bananan
 
18.02.13
16:09
нет я не туп - ТМЦ храниться в табличной части документов РасходнаяНакладная и РасходнаяНакладнаяН
111 Ёпрст
 
18.02.13
16:09
(0) читай с начала, где и что хранится
http://www.script-coding.com/v77tables.html
112 sapphire
 
18.02.13
16:11
(110) Как на "туп" откликаться, так это ты мастак, эдак тебя рас так, и еще три раза, что ж ты тогда в (103) ерунду пишешь?
113 sapphire
 
18.02.13
16:11
зараза :)
114 sapphire
 
18.02.13
16:12
(110) тебе inner join надо сделать с табличной частью
115 sapphire
 
18.02.13
16:12
(110) Что такое inner join из (114) и почему так?
116 bananan
 
18.02.13
16:14
читаю и чего-то непонимаю:
3.3.2.4. Пример 4

Получение всех документов одного вида со всеми реквизитами шапки (включая все общие и системные реквизиты) а также всех реквизитов табличной части с фильтром по дате документа (документов за один день).

В этом примере необходимо учесть, что дата документа храниться в SQL и DBF формате базы по-разному. Но, в любом случае, дата документа храниться в таблице журналов _1SJOURN, рассмотрим пример для SQL базы:
SELECT
   TabJ.*, Tab1.*, Tab2.*
FROM
   DH14 As Tab1
INNER JOIN
   _1SJOURN As TabJ ON (Tab1.IDDOC = TabJ.IDDOC)
INNER JOIN
   DT14 As Tab2 ON (Tab1.IDDOC = Tab2.IDDOC)
WHERE
   LEFT(TabJ.DATE_TIME_IDDOC,8) = '20050219'
Где здесь реквизиты табличной части и зачем два ынер джоина?
117 bananan
 
18.02.13
16:15
иннер джоин - насколько я понимаю - внутреннеэ соединение
118 bananan
 
18.02.13
16:15
а зачем - не понимаю
119 Ёпрст
 
18.02.13
16:16
(116)
DH14 - табличка шапки дока
_1SJOURN - табличка документов
DT14 - табличка табличной части документа

ЗЫ: читай вниматочнее
120 sapphire
 
18.02.13
16:17
(117) А что это значит?
121 sapphire
 
18.02.13
16:17
(118) Вот для того, что бы твоя светлость хоть что-то понимала тебе и присоветовали штудировать Бен-гана...
122 Ёпрст
 
18.02.13
16:18
123 bananan
 
18.02.13
16:18
(120) сейчас подумаю как сформулировать
124 bananan
 
18.02.13
16:19
соединяет несколько таблиц для вывода
125 sapphire
 
18.02.13
16:20
(124) Мля, мы это и так знаем, ты сам-то понимаешь КАК соединять и что?
126 bananan
 
18.02.13
16:21
(122) Это я знаю, но вот чтобы его применять на своем конкретном запросе.. пока я до этого - не дорос:(
127 bananan
 
18.02.13
16:22
(125) Чесно- говоря - слабо понимаю...
128 sapphire
 
18.02.13
16:24
(127) для того что бы писать нужно понимать что пишешь.
"сия?ты т?уір ?алады, ал алды, сия?ты ыл?и" (с)
В цитате тебе, наверное, все понятно, да?
129 sapphire
 
18.02.13
16:24
(126) Ты понимаешь по-шагово что ты хочешь сделать?
130 Classic
 
18.02.13
16:25
(126)
Для того, что б писать на 1С++ неплохо бы знать язык запросов. Если ты его не знаешь даже на самом примитивном уровне (что происходит при джойнах), то не взлетит.
Пиши на православном 77. Начальнику объяснишь, что быстрее не получитсся
131 bananan
 
18.02.13
16:26
из _1SJOURN - берем дату документа, а строки документа, насколько я понимаю - дл каждого документа своя таблица для хранения табличной части?
132 bananan
 
18.02.13
16:28
по-шагово:
выбрать
1. все документы за период времени.
2. в каждом документе смотрю ТМЦ и его цену и если эта цена "оршибочная" - мне нужен этот тмц с номером строки в документе ну и автором того документа
133 bananan
 
18.02.13
16:29
определение - нормальна цена или ошибочна - надо функцию написать
134 sapphire
 
18.02.13
16:30
(131) ты близок к истине, наш юный поддаван
135 sapphire
 
18.02.13
16:30
(132) 1. все документы за период времени.
Отнюдь не все.
136 bananan
 
18.02.13
16:31
да тлько документы РасходнаяНакладная и РасходнаяНакладнаяН
137 sapphire
 
18.02.13
16:31
(132)
2. в каждом документе смотрю ТМЦ и его цену и если эта цена "оршибочная" - мне нужен этот тмц с номером строки в документе ну и автором того документа

Чего теперь не хватает - где храниться цена и какую цену надо получить
138 sapphire
 
18.02.13
16:31
(136) Вот. Уже лучше.
139 sapphire
 
18.02.13
16:33
(132) Опять же, критерий ошибочности в том, что отгружаем в минус т.е. ниже прихолдной цены на момент документа, для того тебе вроде дата и нужна была...
140 sapphire
 
18.02.13
16:35
(136) Какие таблицы предстоит обработать запросом?
141 bananan
 
18.02.13
16:42
(140) таблицу в которой храняться номер документа и его автор
+ таблицы табличных частей документов + таблицу где справочник.ТМЦ вроде так
142 bananan
 
18.02.13
16:44
ну а джоины нужны для связывания всех этих таблиц
143 bananan
 
18.02.13
16:46
т.е. чтобы достучаться до ТМЦ в таблицной части документа толже нужен Джони?
144 sapphire
 
18.02.13
16:54
(141) Неправильно.
145 sapphire
 
18.02.13
16:54
(142) Да.
146 bananan
 
18.02.13
16:58
Хорошо, вот взял пример из http://www.script-coding.com/v77tables.html#3.3.2.3. запустил, а она ругается:
\SERVER12\VPKTEST$\EXTFORMS\ЦІНАПОКАТЕГОРІЇ.ERT(177)}: State 42S02, native 208, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'DH14'.
147 bananan
 
18.02.13
16:59
(144) То что неправильно понял, почему неправильно?
148 bananan
 
18.02.13
17:01
+(146) Прмер понятно немного переделал под себя:
   | SELECT
       |    TabJ.*, Tab1.*, Tab2.*
       |FROM
       | DH14 As Tab1
       |INNER JOIN
       |_1SJOURN As TabJ ON (Tab1.IDDOC = TabJ.IDDOC)
       |INNER JOIN
       |DT14 As Tab2 ON (Tab1.IDDOC = Tab2.IDDOC)
       |WHERE
       |LEFT(TabJ.DATE_TIME_IDDOC,8) = '20120219'";
149 bananan
 
18.02.13
17:08
(149) Кто-нибудь может помояь?
150 bananan
 
18.02.13
17:14
Ладно, кто-нибудь, почему код (148) не проходит: ]Invalid object name 'DH14'.???
151 bananan
 
18.02.13
17:32
Ну вот например:
SELECT
   Спр.Code as Код,
   Спр.Descr as Наименование
FROM
   sc433 as Спр

Его можно запустить в QA
Что такое QA?
152 Mikeware
 
18.02.13
17:45
(146) потому, что НЕТ у тебя таблицы DH14.
НЕТ!
СОВСЕМ НЕТ!
ПОЛНОСТЬЮ НЕТ!
-------------
когда ты прекратишь копипастить и начнешь думать?
153 Ёпрст
 
18.02.13
17:47
(152) тут поможет только лечение током
154 bananan
 
18.02.13
17:47
(152) Да вот и думаю но как мне достучаться до ТМЦ в табличной части документа?
155 bananan
 
18.02.13
17:48
(153) К стати..
т
119 - 18.02.13 - 16:16    (116)
DH14 - табличка шапки дока
_1SJOURN - табличка документов
DT14 - табличка табличной части документа

ЗЫ: читай вниматочнее
156 bananan
 
18.02.13
17:49
Так есть у меня DH14 или нет? и если нет, - то где искать ТМЦ из табличных чатей документво РасходнаяНакладная и РасходнаяНакладнаяН?
157 Mikeware
 
18.02.13
17:53
(156)  сиквел говорит, что нету...
"искать ТМЦ из табличных чатей документво РасходнаяНакладная и РасходнаяНакладнаяН"  нужно в табличных частях соответсвующих документах. Как они называются -  все описано в документации...
158 bananan
 
18.02.13
17:55
(157) как они нвзываются посмотрю в документации.
написал вот такой код:
   |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   $ДокС.ТМЦ as Товар
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур      
       | $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |                AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
       |UNION ALL
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
       |,   $ОбщийРеквизит.Автор
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       | AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН";
ругается:
Line 8: Incorrect syntax near 'dt1157'
Что это за ошибка и в какой строке?
159 Mikeware
 
18.02.13
17:58
(158) Ошибка - неверный синтаксис.
в 7 строке. или в шестой.
просто от твоего тупняка сиквел окуевает, и руугается на восьмую...
160 bananan
 
18.02.13
18:00
6 и 7-я строки
|    _1SJourn as Жур      
       | $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
т.е. скорее всего ему не нравиться $ДокументСтроки.РасходнаяНакладная as ДокС ?
161 bananan
 
18.02.13
18:36
Ребята, так что в код:
|SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур      
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |                AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
       |UNION ALL
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
       |,   $ОбщийРеквизит.Автор
       |FROM
       |    _1SJourn as Жур
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       | AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН";
напрямую (без добавления джоинов и тд) выбор тмц из табличнорй части документов ставить нельзя?
162 viktor_vv
 
18.02.13
18:52
(161) Ну нету у тебя в таблице _1Sjourn данных о составе табличной части документа.
А в (158) ты определись вот тут как джойнить хочешь таблицы

       |FROM
       |    _1SJourn as Жур      
       | $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)

и по каким полям.
163 viktor_vv
 
18.02.13
18:53
(162)+ Типа

       |FROM
       |    _1SJourn as Жур      
       |    Lefy join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
164 viktor_vv
 
18.02.13
18:55
(163)*

       |FROM
       |    _1SJourn as Жур      
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | on ДокС.IDDOC = Жур.IDDOC

или inner, но ты условие на тип документа в Where ставишь, так что это разве что на скорость может повлиять.
165 Mikeware
 
18.02.13
18:58
(162) ну не понимает он, что значит "по каким полям"....
понимаешь, "оно само должно"...
166 bananan
 
18.02.13
19:00
(163) Спасибо, кажется понемногу начинаю понимать, но вот я такой запрос зделал:
|SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |                AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
       |UNION ALL
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
       |,   $ОбщийРеквизит.Автор
       |FROM
       |    _1SJourn as Жур      
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокН (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       | AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН";
так он не выбирает ТМЦ а где ему задать и как чтобы он выбирал ТМЦ?
167 bananan
 
18.02.13
19:01
(165) Тебе мало той желчи что ты прымо на меня льещь, так ты еще и других подстрекаешь?
168 viktor_vv
 
18.02.13
19:05
(166)

Ты издеваешься, наверное.
У тебя ж в (158) было правильно в Select прописана выборка ТМЦ, исправь там только From как в (166) и добавь выборку ТМЦ для второго Select как в первом, только из таблицы ДокН.
170 bananan
 
18.02.13
19:09
Спасибо, и я не издеваюсь - просто я никак немогу понять всего этого
171 Mikeware
 
18.02.13
19:09
(169) "ты знал, ты знал!"©
172 viktor_vv
 
18.02.13
19:12
(171) :)).
173 bananan
 
18.02.13
19:12
+(170) Ято-то я таки не допонимаю. написал так:
|SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   $ДокН.ТМЦ as Товар
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |                AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
       |UNION ALL
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
       |,   $ОбщийРеквизит.Автор
       |FROM
       |    _1SJourn as Жур      
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокН (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       | AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН";
Ошибка:
The column prefix 'ДокН' does not match with a table name or alias name used in the query.
174 bananan
 
18.02.13
19:13
+(173) Но там же есть и ДОКС и ДОКН
175 Mikeware
 
18.02.13
19:14
Вроде достаточно понятно написано: колонки с префиксом ДокН нет в именах таблий или алиасов, используемых в запросе...
176 bananan
 
18.02.13
19:16
(175) А это что:
|    Left join $ДокументСтроки.РасходнаяНакладная as ДокН (nolock)
?
177 bananan
 
18.02.13
19:20
Т.е. вроде теперь, если я правильно понимаю, связываются таблицы - правильно..?
178 bananan
 
18.02.13
19:23
(175) Дак как по поводу альясов?
179 sapphire
 
18.02.13
19:24
(177) нет
180 sapphire
 
18.02.13
19:26
(170) Определись что именно понять ты не в силах
181 Mikeware
 
18.02.13
19:27
(180) он не может понять свю глубину того, что мешает му понять то, что он не в силах понять...
:-)))
182 bananan
 
18.02.13
19:29
(179) Если из запроса убрать:
|,   $ДокС.ТМЦ as Товар
       |,   $ДокН.ТМЦ as Товар
       
запрос работает, т.е. отсюда я и сделал вывод, что джоины заданы правильно..
а понять я не в силах почему ДокС и ДокН SQL говорит что они не определены в данном запросе...
183 bananan
 
18.02.13
19:30
(181) Ты как всегда - на вершине (только вот на вершине чего?)
184 sapphire
 
18.02.13
19:41
(182) Соединения заданы как раз неверно
185 bananan
 
18.02.13
19:41
кто-нибудь почему:
|SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   $ДокС.ТМЦ as Товар
       |,   $ДокН.ТМЦ as Товар
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |                AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
       |UNION ALL
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
       |,   $ОбщийРеквизит.Автор
       |FROM
       |    _1SJourn as Жур      
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокН (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       | AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН";
неработает и пишет что ДокС что  ДокН - неопределенны в данном запросе (хотя я вижу что они определены)
186 sapphire
 
18.02.13
19:42
(182) невнимательность чем вызвана?
187 bananan
 
18.02.13
19:42
(184) почему неправильно и как будет правильно?
188 bananan
 
18.02.13
19:43
(186) коротко - семейные обстоятельства
189 sapphire
 
18.02.13
19:43
(187) я об этом тебя и спрашивал.
190 sapphire
 
18.02.13
19:44
(188) гонят из семьи?
191 bananan
 
18.02.13
19:49
невнимательность чем вызвана? а о чем ты спрашивал?
Да нет долго расказывать
192 sapphire
 
18.02.13
19:51
(185) операторы об'единения исключения должны иметь равное количество полей в запросах
193 sapphire
 
18.02.13
19:52
(191) в том, что в одном месте опечатка а дальше лезет ахинея
194 sapphire
 
18.02.13
19:53
(191) Ну не может человек в норме так ошибаться
195 bananan
 
18.02.13
19:55
Ладно я относительно в норме.
О семеныхобстоятельствах.
почти год назад умерла моя мама.
в ноялбре прошлого года умерла моя сестра.
моя жена все это время бухает и говорит что я во всем виновати и что я ничего не делаю
196 bananan
 
18.02.13
19:57
а где в (185) надо равноре количесвто полей поставить?
197 sapphire
 
18.02.13
20:00
(195) Бухает запойно? Работает?
Если сильно прямо надо аж горит, можно посолить. Коли научится надо, то терпи... Часть подскажем, но и свою голову иметь надо.
198 sapphire
 
18.02.13
20:01
(196) Из верхнего убрать докн
199 sapphire
 
18.02.13
20:06
В нижний вставить.
200 sapphire
 
18.02.13
20:07
Исправить в нижнем условие соединения, там опечатка в алиасе
201 sapphire
 
18.02.13
20:09
Порядок следования полей документ,товар, автор должен быть одинаковым.
202 viktor_vv
 
19.02.13
01:24
(173) Ты таки не успел скопипастить (169) :)). Я ж намекал, что быстрее надо :).
203 chelentano
 
19.02.13
07:22
(195) твоя жена права, ты действительно ничего не делаешь
204 Mikeware
 
19.02.13
07:55
(203) самое смешное, что даже и не пытается.
205 chelentano
 
19.02.13
07:57
(204) имхо, это тролль какой-нибудь, таких тупых людей не бывает
206 Wobland
 
19.02.13
08:15
(205) а я верю в искренность автора.

кстати, по вашим советам заимел себе Ицика, почитываю. очень увлекательно, спасибо. чувствую, узнаю много нового ;) "недостаток" (как, впрочем, всех научных или околонаучных книг) один - нельзя читать по диагонали. а наш bananan и так с трудом читает и думает
207 Mikeware
 
19.02.13
08:47
(205) иногда тоже возникает такое чувство...
за 4-то года можно научится читать документацию, пользоваться отладчиком...
а с другой стороны смотришь на его темы - он и в самом деле такой...
208 sapphire
 
19.02.13
12:25
(207) Не, Мишь, ник передают из рук в руки, ИМХО
209 Mikeware
 
19.02.13
12:28
(208) стиль одинаков во всех постах...
210 sapphire
 
19.02.13
12:53
(209) Ну я старьё не смотрел
211 Wobland
 
19.02.13
14:33
а вот Ицик говорит про unknown. Если зарплата (поле1) равна NULL, выражение принимает значение unknown. у меня разрыв шаблона. как они связаны между собой - unknown и NULL?
212 sapphire
 
20.02.13
09:47
(211) Семантически, т.е. сравнение NULL с чем либо дает FALSE,
по сути, NULL и есть UNKNOWN, так в Analysis Services (SSAS)
значению NULL можно присвоить какое-либо нужное значение путем настройки трех свойств служб Analysis Service: свойства UnknownMember и UnknownMemberName используются для измерений, а свойство NullProcessing — для ключевых атрибутов измерений.

http://msdn.microsoft.com/ru-ru/library/ms170707(v=sql.90).aspx
213 Wobland
 
20.02.13
10:12
(212) >по сути, NULL и есть UNKNOWN
ну я как-то так для себя и определил. NULL - значение, UNKNOWN - тип. грубо говоря ;)
214 sapphire
 
20.02.13
16:48
Что-то пропал наш ТС...
215 bananan
 
21.02.13
11:47
(214) Я уже появился :)
Так вот у меня такой текст запроса:
   ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   $ДокС.ТМЦ as Товар
       |,   $ДокН.ТМЦ as Товар
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |                AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
       |UNION ALL
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
       |,   $ОбщийРеквизит.Автор
       |FROM
       |    _1SJourn as Жур      
       |    Left join $ДокументСтроки.РасходнаяНакладная as ДокН (nolock)
       | on ДокС.IDDOC = Жур.IDDOC
       |WHERE
       |     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       | AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН";
Он не проходит: ]The column prefix 'ДокН' does not match with a table name or alias name used in the query.
Что здесь не так?
217 Rie
 
21.02.13
11:50
(215)  Так он ведь действительно "not match". У тебя ведь ровно одна таблица. Какие там алиасы ты во втором члене UNION написал - это в пользу бедных.
218 bananan
 
21.02.13
11:51
(217) ТЬаблиц - две, одна по документу РасходнаяНакладная, вторая по документу РасходнаяНакладнаяН!
219 Rie
 
21.02.13
11:53
(218) Ты не понимаешь, как работает UNION.
220 Mikeware
 
21.02.13
11:53
(215) Ты догадываешься, что у каждого ключевого слова в SQL  есть русский аналог (перевод)?
ну так вот, _переведи_ все на русский. Десяток слов - несложно...
и посмотри на русском - что ж ты такое пишешь...
221 Wobland
 
21.02.13
11:53
(218) на какой странице у Ицика про юнион рассказано?
222 Mikeware
 
21.02.13
11:53
+(219) ибо не читал документацию.
223 Wobland
 
21.02.13
11:56
+(221) 200. это глава 6, не заблудись
224 bananan
 
21.02.13
11:57
(221) стр. 199 можешь проверить
(222) документацию я читал, еще не проникся я этим
225 Mikeware
 
21.02.13
11:58
(221)
Вопрос на пятерку: написать запос с юнион.
вопрос на четверку: что у ицика написано про юнион?
вопрос на тройку: на какой странице у ицика написано про юнион
вопрос на двойку: какого цвета книжка ицика?
:-)))
226 Wobland
 
21.02.13
12:00
(225) чорт! я на двойку не сдал
227 Mikeware
 
21.02.13
12:03
(226) мне хуже. я даже не знаю, кто такой ицик. :-(((
228 Wobland
 
21.02.13
12:05
(227) Эци?х (от груз. цихэ (????) — тюрьма, крепость[2]) — вымышленное исправительное учреждение и вид наказания на Плюке.
229 Mikeware
 
21.02.13
12:07
(228) как хорощо, что я не знаю, что такое ицик :-)))
230 Ёпрст
 
21.02.13
12:07
(221) 198
231 Волесвет
 
21.02.13
12:08
на одном из собеседований, меня с придыханием спросили знаю ли я прямые запросы, причем у спрашивающего лежала тооолстая книжка по запросам и он повидимому очень этим гордился, ну я и ответил, что мол в фоксе втором работал и весь синтаксис запросов можно на листочке написать))
232 bananan
 
21.02.13
12:14
Очень полезная информация от вас идет!
Какого цвета книжка Ицика - не знаю - закачал электронную версию...
233 Rie
 
21.02.13
12:15
(232) Что такое UNION и с чем его едят - разобрался?
234 Wobland
 
21.02.13
12:18
(232) похоже, тут все двоечники
235 bananan
 
21.02.13
12:18
(233) Union двух таблиц возвратит все записи из обоих таблиц
236 Wobland
 
21.02.13
12:19
(235) ОБЪЕДИНИТЬ в православной 1Ске их сгруппирует
237 bananan
 
21.02.13
12:20
А все-таки почему :
The column prefix 'ДокН' does not match with a table name or alias name used in the query.
Если ДокН в запросе:
   |    Left join $ДокументСтроки.РасходнаяНакладная as ДокН (nolock)
238 Wobland
 
21.02.13
12:20
+(236) сильно подозреваю, что в кошерном SQL тоже. против чего и придумано слово ALL
239 Wobland
 
21.02.13
12:20
(237) ну нету у тебя алиаса такого в первой таблице
240 Rie
 
21.02.13
12:22
(237) Потому что алиасы второй, третьей и всех последующих таблиц UNION ничегошеньки не значат. Они просто игнорируются. Ибо таблица в результате UNION - ровно одна.
241 bananan
 
21.02.13
12:22
(239) Первая таблица (в моем запросе) это ДокС?
242 Wobland
 
21.02.13
12:22
и заготовь ответ на вопрос "зачем у меня количество полей разное?"
243 Wobland
 
21.02.13
12:23
(241) да
244 bananan
 
21.02.13
12:23
(240) Хорошо, а как тогда мне достучаться до $ДокументСтроки.РасходнаяНакладная и$ДокументСтроки.РасходнаяНакладнаяН (это и есть товары или ТМЦ)??
245 Wobland
 
21.02.13
12:24
(244) объедини их
246 bananan
 
21.02.13
12:24
(243) Уже немного начинаю вникать, а где в ДокС объявить или вернее, выбрать поля?
247 Rie
 
21.02.13
12:25
Вот твой запрос в чуть-чуть причёсанном виде:
ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   Накладные.Товар
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    Left join
       |    (SELECT
       |        IDDOC,
       |        $ДокС.Товар
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    UNION ALL
       |    SELECT
       |        IDDOC,
       |        $ДокН.Товар
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокН (nolock)
       |    ) Накладные
       |    ON Жур.IDDOC=Накладные.IDDOC
       |        AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |";
248 bananan
 
21.02.13
12:25
(245) Я вроде как и пытаюсь их объеденить в своем запросе..
249 Wobland
 
21.02.13
12:26
(248) знавал я одну контору, которая два-три года жила с таким вот ОБЪЕДЕНИТЬ в запросе в печатной форме. обходились без печатной формы
250 bananan
 
21.02.13
12:27
(247) Причесаный тобой запрос - тоже не проходит:
Meta name parser error: поле таблицы не найдено "$ДокС.Товар"
251 bananan
 
21.02.13
12:28
(249) ОООЧЕЕНЬ полезная информация!
252 Wobland
 
21.02.13
12:28
(250) что бы это значило?
(251) не дошло?
253 Wobland
 
21.02.13
12:29
и это мы ещё не подошли к вопросу, почему источники в двух таблицах одинаковые
254 viktor_vv
 
21.02.13
12:30
(248) Ты копипасть быстрее (247) :)). А то потрут.
Mikeware таки хочет сделать из тебя человека разумного :).
Не обижайся.
255 bananan
 
21.02.13
12:30
(252) Я то доку читаю, а вот ты посты - нет!
256 Rie
 
21.02.13
12:30
(250) У тебя как реквизиты табличной части называются? Товар, ТМЦ или где?
257 Rie
 
21.02.13
12:31
(253) Там я очепятался. РасходнаяНакладнаяН (или как там она у ТС называется) во втором случае.
258 Mikeware
 
21.02.13
12:31
(254) для начала - хотя бы человека. про разумность речь пока не идет...
259 Wobland
 
21.02.13
12:31
(255) старайся понять эти странные буквы, когда читаешь
260 bananan
 
21.02.13
12:31
(254) На обиженых - воду возят
261 viktor_vv
 
21.02.13
12:31
(256) ТМЦ.
262 bananan
 
21.02.13
12:32
(259) И ты иногда пробуй понять что пишут!
263 Rie
 
21.02.13
12:33
Мляяя! Ему же ещё и IDDOCDEF вытащить надо! И [Документ $Документ], без указания вида!
264 Ёпрст
 
21.02.13
12:33
(247) как бэ иннер тогда уж там, раз так фильтр на датетайм задаешь.
265 Wobland
 
21.02.13
12:33
(262) здесь совета спрашиваешь ты, а не я. мне не советуй
266 Mikeware
 
21.02.13
12:33
(259) "12 декабря. Математичка буреет не по дням. Сегодня сказала, что я совсем не знаю математики и поставила мне в дневник какую-то цифру"©
267 bananan
 
21.02.13
12:33
(257) Это я уже увидел и исправил, все-равно выдает:
Meta name parser error: поле таблицы не найдено "$ДокС.Товар"
268 bananan
 
21.02.13
12:34
(262) Я тебе и не советую...
269 Wobland
 
21.02.13
12:34
(267) попробуй поискать поле глазами. вдруг парсер тебя обманывает
270 Rie
 
21.02.13
12:35
(267) У тебя Товар или ТМЦ? Если ТМЦ - то $ДокС.ТМЦ
272 bananan
 
21.02.13
12:36
(263) Не понял...
274 Mikeware
 
21.02.13
12:38
нне нннаддаа ссориццааа, гарячиеее финскиеее парниии..
275 bananan
 
21.02.13
12:38
(270) Нет ДокС.Товар:
|    (SELECT
       |        IDDOC,
       |        $ДокС.Товар
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
276 Wobland
 
21.02.13
12:38
(273) этак ты никогда ничему не научишься
277 Rie
 
21.02.13
12:39
(272) Документы разных видов у тебя? Значит, надо
|SELECT
|    Жур.IDDoc as [Документ $Документ]
|,   Жур.IDDOCDEF AS Документ_вид
чтобы в результате запроса можно было понять, какого вида документ.
278 bananan
 
21.02.13
12:39
(276) А чему можно у ТЕБЯ научиться? поливать грязью всех и вся - так мне это не надо
279 Wobland
 
21.02.13
12:39
(275) это просто праздник какой-то
280 bananan
 
21.02.13
12:40
(277) Вродя понял...
но прчем вид документа к
Meta name parser error: поле таблицы не найдено "$ДокС.Товар"???
281 Rie
 
модератор
21.02.13
12:41
(278) Ты сюда поругаться пришёл? Или всё же по теме спросить?
282 viktor_vv
 
21.02.13
12:41
(275) Да в конфигураторе какой идентификатор реквизита? Ты ж украинскую бухию мучаешь, там ТМЦ, а не Товар.
283 Rie
 
21.02.13
12:42
(280) Ни при чём. Я не знал, как у тебя реквизиты называются - вот и написал Товар. Если он у тебя - ТМЦ, то и пиши ТМЦ, а не Товар.
284 bananan
 
21.02.13
12:42
+(280) И, поверте мне, это все не шутки и не стеб я очень хочу во всем этом разобратьтся и мне ОЧЕНЬ нужно в этом разобраться
285 Rie
 
21.02.13
12:42
И, кстати, учти замечание Ёпрст (264).
286 Wobland
 
21.02.13
12:44
(284) начни читать и думать, ну тыщу раз говорили ж
287 bananan
 
21.02.13
12:44
(283) Да у меня украинская конфа, исправил Товар на ТМЦ, а все осталось ..
Invalid column name 'ТМЦ'.
288 Wobland
 
21.02.13
12:45
(287) теперь Номенклатуру попробуй. а вдрпуг?
289 bananan
 
21.02.13
12:45
Ок, еще раз смотрб что наваял и озвучиваю русским языком:
может так будет проще разобраться мне ну и вам мне подсказасть
290 bananan
 
21.02.13
12:47
(288) Не-а, смотрел в конфигураторе в обоих документах в табличной части - ТМЦ
291 Wobland
 
21.02.13
12:47
(290) подсказываю: неправильное имя поля
292 Rie
 
21.02.13
12:48
(290) Телепатирую: ты, случаем во внешнем запросе вместо Накладная.Товар - Накладная.ТМЦ не написал?
293 Rie
 
21.02.13
12:49
+(292) Спокойно и последовательно разберись с именами полей - и наступит счастье.
294 bananan
 
21.02.13
12:49
(292) Там я ничего не писал - скопирывал из одно подсказки:
       |,   Накладные.ТМЦ
295 bananan
 
21.02.13
12:50
+(292) А как надо написать?
296 Rie
 
21.02.13
12:51
(295) Не знаю, как у тебя сейчас запрос выглядит. Но Invalid column name говорит SQL, а не метапарсер. Поэтому предполагаю, что имена реквизитов ты правильно написал, а вот с алиасами - напутал.
297 Mikeware
 
21.02.13
12:52
(293) ты сам-то понял, что сказал? :-)
298 bananan
 
21.02.13
12:52
Ок. сейчас текст запроса такой:
|SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   Накладные.ТМЦ
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    Left join
       |    (SELECT
       |        IDDOC,
       |        $ДокС.ТМЦ
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    UNION ALL
       |    SELECT
       |        IDDOC,
       |        $ДокН.ТМЦ
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    ) Накладные
       |    ON Жур.IDDOC=Накладные.IDDOC
       |        AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |";
и я не вижу здесь путаницы с алиясами...
299 Rie
 
21.02.13
12:53
(297) Эээ... А какая буква в (293) - неправильная?
300 Wobland
 
21.02.13
12:54
триста!
301 Rie
 
21.02.13
12:55
(298) Блииин... Извини, тут я был невнимателен. Конечно же надо алиас задать.
   (SELECT
       |        IDDOC,
       |        $ДокС.ТМЦ AS ТМЦ
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    UNION ALL
       |    SELECT
       |        IDDOC,
       |        $ДокН.ТМЦ
302 Wobland
 
21.02.13
12:55
(299) Спокойно и последовательно разберись
303 Wobland
 
21.02.13
12:57
(300) 426 постов - личный рекорд ТС. догоним и перегоним?
305 Rie
 
21.02.13
12:58
+(301)  Потому что после метапарсера 1С-овское ТМЦ превратится в SQL-евское SP12345 или что-то подобное.
306 Mikeware
 
21.02.13
12:58
(299) буква "разберись". у ТС ее нету в алфавите...
307 bananan
 
21.02.13
13:03
(301) Похоже так оно и есть... Ребята, я на несколько мягко говоря голов ниже вас потому что вы подсказываете по запросу - опипастю в основном не разбираясь
308 Wobland
 
21.02.13
13:04
(307) "в основном" здесь явно лишнее
309 Mikeware
 
21.02.13
13:06
+(308) и не "полсказки" копипастит, а целиком написанное, не разбираясь...
310 trad
 
21.02.13
13:15
(298) фигня же написана
как можно ссылку на РасходнаяНакладнаяН типизировать как РасходнаяНакладная?
311 trad
 
21.02.13
13:15
+ да и юнион какой то
312 bananan
 
21.02.13
13:16
(311) А как иначе- чтбы не фигня была?
313 Mikeware
 
21.02.13
13:17
(310)(311)
Верблюда о спросили: «Верблюд, а почему у тебя шея кривая?». А он в ответ: «А что у меня прямое?»
©
314 Mikeware
 
21.02.13
13:17
(312) написать правильно
315 bananan
 
21.02.13
13:18
В результате запрос:
   |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   Накладные.ТМЦ
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    Left join
       |    (SELECT
       |        IDDOC,
       |        $ДокС.ТМЦ AS ТМЦ
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    UNION ALL
       |    SELECT
       |        IDDOC,
       |        $ДокН.ТМЦ
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    ) Накладные
       |    ON Жур.IDDOC=Накладные.IDDOC
       |        AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |";
работает. но уж что-то очень медленно..
запустил с периодом 12.12.12. по 12.12.12 - уже две минуты маслает..
316 Wobland
 
21.02.13
13:20
(315) а всё от того, что сначала оно тебе объединяет документы, а потом уже, снаружи выкидывает не проходящие по периоду
317 Wobland
 
21.02.13
13:21
(316) вот кому я это сказал? вроде объяснил, а толку?
318 Mikeware
 
21.02.13
13:22
(317) тоже самое хотел у тебя спросить...
319 trad
 
21.02.13
13:23
судя по тексту нужно наверно это?

   |SELECT
   |    Жур.IDDoc as [Документ $Документ]
   |,   Жур.IdDocDef as Документ_вид
   |,   isnull($ДокС.ТМЦ, $ДокС.ТМЦ) as [ТМЦ $Справочник.Номенклатура]--туту нужно указать правильный вид справочника, если он другой
   |,   $ОбщийРеквизит.Автор as [Автор $Справочник.Сотрудники]
   |FROM _1SJourn as Жур (nolock)
   |Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
   |Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |  AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
320 bananan
 
21.02.13
13:23
(316-317) А как иначе это сделать?
321 trad
 
21.02.13
13:24
*
вместо isnull($ДокС.ТМЦ, $ДокС.ТМЦ)
надо isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
322 Wobland
 
21.02.13
13:24
(320) вот отвечу я тебе - легче станет? период в подзапрос засунь
323 Rie
 
21.02.13
13:25
(315) См. (277) и _особенно внимательно_ - (264).
324 trad
 
21.02.13
13:25
(322) к чему он его в подзапросе пришьет?
325 Mikeware
 
21.02.13
13:26
(321) звиняй, но я хочу, чтоб эта мартышка хоть что-то сама сделала..
326 Wobland
 
21.02.13
13:26
(324) а, ну да. это ж, растак её, семёрка ;)
327 Rie
 
21.02.13
13:26
(316) Оно ещё хуже делает - поскольку LEFT JOIN.
На это выше Ёпрст указывал.
328 sapphire
 
21.02.13
13:27
(327) А кто ему левый джойн присоветовал?
329 bananan
 
21.02.13
13:27
(322) Легче немного стало... а в какой подзапрос? 1-й или второй или как? Я в этом ноль без палочки
330 trad
 
21.02.13
13:27
эээ, че за херня!! куда (319) дели?
331 bananan
 
21.02.13
13:28
(330) я не брал...
332 Rie
 
21.02.13
13:28
(328) Он там изначально был, насколько я помню.
333 Rie
 
21.02.13
13:29
(329) В оба. Сначала INNER JOIN - а потом уже объединение.
И - INNER JOIN, а никак не LEFT.
334 trad
 
21.02.13
13:30
(326) семерка то чем провинилась у вас?
335 Rie
 
21.02.13
13:30
+(333) Но перед издевательством над подзапросом - просто замени LEFT на INNER. И удивись.
336 bananan
 
21.02.13
13:31
(325) "Мартышка" думает и очень много сама делает... К стати меня не было два дня - писал прогу на Дельфи. Прогу показать?
337 Mikeware
 
21.02.13
13:31
(330) см (325)
338 Rie
 
21.02.13
13:31
(334) Тем, что через две точки не даёт писать :-)
339 trad
 
21.02.13
13:31
Кто прибил (319) верните пожалуйста на место.
340 sapphire
 
21.02.13
13:31
(329) Нуль обдолбанный, тебе же в пн написали что надо сделать
341 bananan
 
21.02.13
13:31
(335) Сейчас попробую
342 Mikeware
 
21.02.13
13:31
(336) не надо, я только что поел...
343 Rie
 
21.02.13
13:32
(336) НЕ НАДО!!!!!
344 bananan
 
21.02.13
13:32
(340) Что такое пн и где это??
345 Mikeware
 
21.02.13
13:32
(340) он не нуль, он минус :-)
346 sapphire
 
21.02.13
13:32
(344) пн=понедельник
347 trad
 
21.02.13
13:33
(325) нет это ты звиняй. у тебя нет прав на мой труд и на мое мнение. правил форума я не нарушал. так что будь добр верни.
348 Wobland
 
21.02.13
13:33
(336) ну если только две-три строчки
349 viktor_vv
 
21.02.13
13:33
(339) Это эксперимент по проверке теории Дарвина :)).
350 bananan
 
21.02.13
13:34
(335) Изменил и удивился - спасибо!!!
351 Mikeware
 
21.02.13
13:34
(347) ок. но вечером :-)
352 sapphire
 
21.02.13
13:34
(315) Зачем вообще такая конструкция?
Сделай хотя бы для одного вида документов правильно, потом для другого, а потом уже объединяй результат.
353 Wobland
 
21.02.13
13:34
(325) первый раз ему готовое что-то дают, что он не может у себя применить, что ли?
354 Privalov
 
21.02.13
13:34
(336) Давай, интересно же.
355 Ёпрст
 
21.02.13
13:35
(339) а че там было ?
356 Бертыш
 
21.02.13
13:36
Да блин сразу в прямой запрос. Может быть обычного запроса бы хватило
357 trad
 
21.02.13
13:36
(351) не, ну пошутил и хватит. верни
358 sapphire
 
21.02.13
13:37
(355) Фигня какая-то еще один писарь свой шедевр предложил
359 bananan
 
21.02.13
13:37
(353) Где мне в этой ветке "что-то готовое" дали?
360 Wobland
 
21.02.13
13:37
(355) два лефт джойна. журнал с документами. больше не помню
361 Privalov
 
21.02.13
13:37
Где прога на дельфи!!! В студию. Может зря на человека шумим, а там шедевр. Сразу и уважение появится.
362 Rie
 
21.02.13
13:37
(349) Теория Дарвина утверждает, что обезьяна человеком станет лишь посмертно. А мы имеем дело с живым ТС.
363 sapphire
 
21.02.13
13:37
(356) Он уже делал обычным.
364 Wobland
 
21.02.13
13:37
(359) у тебя есть масса других, не менее  увлекательных. искать не буду
365 trad
 
21.02.13
13:38
(358) кхм, я бы попросил ...
366 bananan
 
21.02.13
13:39
(356) Обычный запрос период месяц - обрабатывал 13 минут, потому и прямой запрос
367 Rie
 
21.02.13
13:40
(365) Там у тебя была ошибка, о которой ещё в (264) сказали.
368 Privalov
 
21.02.13
13:40
(366) Прогу на Дельфях покажи!!
369 bananan
 
21.02.13
13:40
(361) Никакого шедевра, что заказали - то и сделал...
370 viktor_vv
 
21.02.13
13:40
(362) Ну тогда теории Павлова, про условные рефлексы.
371 Rie
 
21.02.13
13:41
(368) Не надо. А то ветку в "Юмор" перенесу.
372 Privalov
 
21.02.13
13:41
(371) Зачем так жестоко, ты ж ее нее видел еще!
373 trad
 
21.02.13
13:42
(367) ты запрос то видел?
374 bananan
 
21.02.13
13:42
375 sapphire
 
21.02.13
13:43
(369) На
ТекстЗапроса = "
|SELECT
|    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
|,   $ДокС.ТМЦ as Товар
//|,   $ДокН.ТМЦ as Товар
|,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
|FROM
|    _1SJourn as Жур (nolock)            
|inner join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
|on ДокС.IDDOC = Жур.IDDOC
|WHERE
|     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
|                 AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
|UNION ALL
|SELECT
|    Жур.IDDoc as [Документ $Документ.РасходнаяНакладнаяН]
|,   $ДокН.ТМЦ as Товар
|,   Жур.$ОбщийРеквизит.Автор
|FROM
|    _1SJourn as Жур (nolock)      
|Inner join $ДокументСтроки.РасходнаяНакладная as ДокН (nolock)
| on ДокН.IDDOC = Жур.IDDOC
|WHERE
|     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
| AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладнаяН
376 Rie
 
21.02.13
13:44
(374) Забанить за выкладывание вирусов? :-)
377 Wobland
 
21.02.13
13:44
(374) ну и на хрена нам твой екзешник?
378 Privalov
 
21.02.13
13:45
(374) Ну и какого ты ехе прислал? Что дураки есть запускать? Исходники давай, что нам с твоего ехе.
379 Wobland
 
21.02.13
13:45
а инишник доставляет ;)
380 Rie
 
21.02.13
13:45
(375) Ну и зачем проверка на IDDOCDEF, если INNER JOIN?
381 trad
 
21.02.13
13:46
(375) а вот тут я бы сказал - писарь
382 Privalov
 
21.02.13
13:46
(377) Не уважает
383 trad
 
21.02.13
13:46
(380) что бы в индекс попасть
384 Wobland
 
21.02.13
13:48
как называется человек, иллюстрирующий свою проф. состоятельность двоичным кодом?
385 Ёпрст
 
21.02.13
13:49
(373) coalesce красившее использовать, имхо
386 Rie
 
21.02.13
13:51
(373) Видел.
387 bananan
 
21.02.13
13:53
Звыняйте - код дом на работу взял готовые программы чтобы отдатьт заказчику
388 Privalov
 
21.02.13
13:53
(384) ТС перестал на нас реагировать или там очень секретная программа.))
Он ее два дня писал!!!!!
389 Privalov
 
21.02.13
13:53
(387) Ха-ха.
390 Rie
 
21.02.13
13:54
+(386) Возможно, я ошибаюсь - но проверки в WHERE не компенсируют двойной LEFT JOIN.
Впрочем, готов положиться на мнение Ёпрст.
391 Privalov
 
21.02.13
13:54
Не один нормальный закзчик не возьмет ехе с такими названиями ))
392 trad
 
21.02.13
13:55
(385) в данном случае не принципиально.
я всегда пишу если два параметра, то isnull. если более - coalesce.
И чем красивше тогда, на твой взгляд?
393 trad
 
21.02.13
13:56
(390) ошибаешься.
394 bananan
 
21.02.13
13:57
А по моему запросу...
Чтобы он выдавал не арбакадаьру в товаре надо типизацию сделать, насколько я понимаю...
но по поводу самого запроса надо чтобы он еще к ТМЦ выдавл номер строки в документе где этот ТМЦ упоминается... - КАк это сделать?
395 bananan
 
21.02.13
13:58
Пардон, Заказчик сказал о программе: надо написать программу лохотрон - потому и такое название...
396 bananan
 
21.02.13
14:02
Сделал типизацию: |,   Накладные.ТМЦ as [$Справочник.ТМЦ]
теперь он выдает название ТМЦ как и надо, а как получить номер строки документа где этот ТМЦ упомянут?
397 Mikeware
 
21.02.13
14:03
(396) достать оттуда гдн этот номер строки лежит...
398 bananan
 
21.02.13
14:05
(397) не понял это стеб или опечатка?:
"достать оттуда гдн этот номер строки лежит..."
399 trad
 
21.02.13
14:05
пост 319 вернули, возьми его с учетом 321
400 bananan
 
21.02.13
14:06
Где можно узнать номер строки документа?
401 bananan
 
21.02.13
14:07
(399) Вижу, спасибо, но код запроса такой:
ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   Накладные.ТМЦ as [$Справочник.ТМЦ]
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    INNER JOIN
       |    (SELECT
       |        IDDOC,
       |        $ДокС.ТМЦ AS ТМЦ
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    UNION ALL
       |    SELECT
       |        IDDOC,
       |        $ДокН.ТМЦ
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    ) Накладные
       |    ON Жур.IDDOC=Накладные.IDDOC
       |        AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |";            
Вполне подходит, только надо еще номер строки с ТМЦ в докменте узнать
402 Wobland
 
21.02.13
14:07
(400) T=DT1611  |Документ (Мн.ч.) Реализация   |A          |DT1611     |1        
#-----Fields-------
# Name      |Descr               |Type|Length|Precision
F=IDDOC     |ID Document's       |C   |9     |0        
F=LINENO    |LineNo              |N   |4     |0
403 trad
 
21.02.13
14:07
(398) номера строк лежат в тех же таблицах что и ссылки на ТМЦ
получи их примерно так же как и ТМЦ
404 bananan
 
21.02.13
14:09
(402-403) Спасибо, сейчас буду пробывать
405 Wobland
 
21.02.13
14:09
(404) что делыть?
406 trad
 
21.02.13
14:10
(402) подсказка не верна.
Приведен фрагмент DBF-ного словаря.
Бедняга будет неделю искать LINENO тогда как такого поля нет и в SQL базе оно называется LINENO_
407 Ёпрст
 
21.02.13
14:11
(392) :)
параметров больше чем 2, как правило, мне лень isnull писать :)
408 bananan
 
21.02.13
14:12
+404 Попробывал и сразу же облом...
НАписал запрос так:
   |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   Накладные.ТМЦ as [$Справочник.ТМЦ]
       |,   Накладные.LINENO
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    INNER JOIN
       |    (SELECT
       |        IDDOC,
       |        $ДокС.ТМЦ AS ТМЦ
       |         ,$ДокС.LINENO
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    UNION ALL
       |    SELECT
       |        IDDOC,
       |        $ДокН.ТМЦ    
       |         ,$ДокН.LINENO
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    ) Накладные
       |    ON Жур.IDDOC=Накладные.IDDOC
       |        AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |";            
рушается:
Meta name parser error: поле таблицы не найдено "$ДокС.LINENO"
409 sapphire
 
21.02.13
14:12
(401) Ну ты и баран, однако
410 Wobland
 
21.02.13
14:12
(408) так что сделыл?
411 trad
 
21.02.13
14:12
(407) так ведь заранее известно что их 2
412 Wobland
 
21.02.13
14:12
(406) искать? он тупо копипастит
413 sapphire
 
21.02.13
14:13
(408) Вообще идиот
414 bananan
 
21.02.13
14:13
(406) и так ругается:
Meta name parser error: поле таблицы не найдено "$ДокС.LINENO_"
415 bananan
 
21.02.13
14:14
(409) Почему я - баран?
416 bananan
 
21.02.13
14:14
(413) А как получить номер строки?
417 trad
 
21.02.13
14:15
(413) может быть сам приведешь рабочий код? Потому как в (375) код не рабочий
418 viktor_vv
 
21.02.13
14:15
(416) В табличной части дока поле LineNo_.
419 sapphire
 
21.02.13
14:16
(415) Потому что тебе запрос нормальный дали
420 Wobland
 
21.02.13
14:16
(418) вот ты ему сейчас очень помог
421 Ёпрст
 
21.02.13
14:16
(411) с тобой не поспоришь :)
Да и на бентли не   накопишь.

Ща погоди, аутор еще пару доков добавит
422 sapphire
 
21.02.13
14:17
(417) И чем он нерабочий, просвяти, нас:)
423 Wobland
 
21.02.13
14:17
(419) ему указание надо: копипастить вот это
424 viktor_vv
 
21.02.13
14:18
(423) Я в него все еще верю :)).
425 bananan
 
21.02.13
14:18
(418) Текст запроса:
   |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,   Накладные.ТМЦ as [$Справочник.ТМЦ]
       |,   Накладные.LINENO_
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    INNER JOIN
       |    (SELECT
       |        IDDOC,
       |        $ДокС.ТМЦ AS ТМЦ
       |         ,$ДокС.LINENO_
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    UNION ALL
       |    SELECT
       |        IDDOC,
       |        $ДокН.ТМЦ    
       |         ,$ДокН.LINENO_
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    ) Накладные
       |    ON Жур.IDDOC=Накладные.IDDOC
       |        AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |";            
Ругается:
Meta name parser error: поле таблицы не найдено "$ДокС.LINENO_"
426 bananan
 
21.02.13
14:18
(419) Где?
427 Ёпрст
 
21.02.13
14:19
(425) $ выкини
428 Wobland
 
21.02.13
14:19
(424) ну.. судя по тому, что он текстом запроса попадает в текст запроса, ещё не всё потеряно
429 viktor_vv
 
21.02.13
14:19
(418)+ Обращаться через алиас без $.
430 sapphire
 
21.02.13
14:19
(426) ты читать умеешь?
431 Ёпрст
 
21.02.13
14:20
(426) см. 319 + 321
432 trad
 
21.02.13
14:20
(422)давай я тоже поиздеваюсь. Скажу включи соображалку и подумай.
433 sapphire
 
21.02.13
14:21
(432) В том запросе суть конструкция запроса, а разыменование полей - пусть хоть что-то сделает сам уже
434 bananan
 
21.02.13
14:22
(427, 429) Спасибо!
(431) Сейчас посмотрю
435 trad
 
21.02.13
14:24
(433)эээ, нет.
Не будем уходить от ответа.

Там даже если опечатки исправить, но сохранить структуру запроса, а в частности состав селект-листа, то запрос будет выдавать чушь.
436 sapphire
 
21.02.13
14:27
(435) Давай, объясни... На примере в чем же чушь?
437 sapphire
 
21.02.13
14:29
(435) Если уж на то пошло, то в его случае типизация на этом этапе вообще не нужна.
438 Rie
 
21.02.13
14:30
(398) Номер строки - это такое же поле, как и прочие.
439 viktor_vv
 
21.02.13
14:30
(435) и (436) я так понял можно идти за попкроном ?
440 sapphire
 
21.02.13
14:32
(435) Ты задачу-то его знаешь, нет?
441 Rie
 
21.02.13
14:32
(431) Просвети, пожалуйста, насчёт (390).
442 trad
 
21.02.13
14:33
(436) ты серьезно не видишь что в 375 кроме неправильной типизации документа не хватает еще и одного важного поля в выборке?
443 sapphire
 
21.02.13
14:35
(442) Цены там не хватает явно и добавить тип. Номер строки не так важен, и типизация не нужна.
444 sapphire
 
21.02.13
14:36
(442) А вот твой вариант с левым соединением будет работать явно медленней.
445 trad
 
21.02.13
14:36
(440) судя по его и твоему текстам запросов, выбрать документы двух видов за период с ТМЦ из этих документов и авторами этих документов. Нет?
446 bananan
 
21.02.13
14:38
А теперь посмотрел, но где  и как здест вставить выбор номера строки документа?
|SELECT
   |    Жур.IDDoc as [Документ $Документ]
   |,   Жур.IdDocDef as Документ_вид
   |,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as [ТМЦ $Справочник.ТМЦ]
   |,   $ОбщийРеквизит.Автор as [Автор $Справочник.Сотрудники]
   |FROM _1SJourn as Жур (nolock)
   |Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
   |Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |  AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
447 trad
 
21.02.13
14:40
(443) я не про цены и не про тип ТМЦ и не про номера строк.
Я про типизацию документа.
У тебя в выборке присутствуют ссылки на документы разных видов, а ты их типизируешь одним единственным типом
448 viktor_vv
 
21.02.13
14:40
(446) Строка будет очень похожа на это

   |,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as [ТМЦ $Справочник.ТМЦ]
449 sapphire
 
21.02.13
14:40
(445) Не совсем, ему надо выбрать документы у которых цена при отгрузке ниже закупочной.
450 bananan
 
21.02.13
14:40
+(446) теперь надо сделать самое сложное - все эти строки с Тмц нужны только тогда, когда для данного ТМЦ установлена неправильная цена:
это делала функция:
Функция Разность(Конт)
//Перем кат,минцена,докцена;

   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Автор");
   ТЗ.НоваяКолонка("Товар");
   ТЗ.НоваяКолонка("Ошибка");
   ТЗ.НоваяКолонка("Стр");
   Конт.ВыбратьСтроки();
   ТЗ.Автор   = Конт.Автор;        
   ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
   кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
   Пока Конт.ПолучитьСтроку()=1 Цикл
       контТовар = Конт.ТМЦ;
       прихцена=Окр(КонтТовар.Цена_Прих.Получить(Конт.ДатаДок)*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)),2);
       докцена=Окр(?(Конт.Кво*Конт.Коэффициент=0,0,Конт.СуммаСНДС/(Конт.Кво*Конт.Коэффициент)),2);                    
//        ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
       Если докцена<прихцена Тогда
          // ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           ТЗ.НоваяСтрока();    
           ТЗ.Товар   = Конт.ТМЦ;                  
           ТЗ.Ошибка  = " має ціну нижчу за прихідну ";
           ТЗ.Стр     = Конт.НомерСтроки;
           ТЗ.Автор   = Конт.Отпустил;
       КонецЕсли;
       //кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
       Если кат.Выбран()=1 Тогда
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
           минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
           Если докцена<минцена Тогда
               //3/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " має надто низьку ціну="+докцена+" мiнимальна="+минцена;
               ТЗ.Стр     = Конт.НомерСтроки;            
           КонецЕсли;
       КонецЕсли;        
   КонецЦикла;
   Возврат(ТЗ);
КонецФункции
451 sapphire
 
21.02.13
14:41
(447) И что? Ерунда. Ссылка это char(9) c типом - char(13)
452 Mikeware
 
21.02.13
14:42
хы. напрямую на требование написать для него запрос - его накуй послали. теперь толпа пишет ему это запрос по кусочкам :-)))
453 sapphire
 
21.02.13
14:42
(447) см (437)
454 trad
 
21.02.13
14:43
(446) по аналогии с ТМЦ
,   isnull(ДокС.lineno_, ДокН.lineno_) as НомерСтроки_
и тут уже без $, так как lineno_ это не метаимя, а обычное имя обычного поля таблицы
455 sapphire
 
21.02.13
14:44
(452) Ерунда, щас добрые люди ему скалярный запрос для определения цены предложат, как пить дать
456 bananan
 
21.02.13
14:44
(452) Ты, как всегда, - выше мирской суеты...
457 trad
 
21.02.13
14:46
(449) так какое это имеет отношение к (417) я же тебе пытаюсь доказать что структура твоего запроса - хрень
458 bananan
 
21.02.13
14:47
(454) Спасибо. Номер строки выбирается, хорошо,
А поп поводу конечного запроса значит в этом надо еще выбрать цену ТМЦ по документу и цену ТМЦ правильную и сравнить их если они не совпадают нам это и надо. ТАк?
459 trad
 
21.02.13
14:50
(451) но ведь в твоем запросе нет char(13) и взять его неоткуда.
писать такое Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
в составном запросе из нескольких документов - принципальная ошибка
460 trad
 
21.02.13
14:58
(458) осталось тебе для меня рассказать что такое "цена ТМЦ правильная"
461 bananan
 
21.02.13
14:59
(460) Честно говоря - понятия не имею, это делает функция:
Функция Разность(Конт)
//Перем кат,минцена,докцена;

   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Автор");
   ТЗ.НоваяКолонка("Товар");
   ТЗ.НоваяКолонка("Ошибка");
   ТЗ.НоваяКолонка("Стр");
   Конт.ВыбратьСтроки();
   ТЗ.Автор   = Конт.Автор;        
   ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
   кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
   Пока Конт.ПолучитьСтроку()=1 Цикл
       контТовар = Конт.ТМЦ;
       прихцена=Окр(КонтТовар.Цена_Прих.Получить(Конт.ДатаДок)*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)),2);
       докцена=Окр(?(Конт.Кво*Конт.Коэффициент=0,0,Конт.СуммаСНДС/(Конт.Кво*Конт.Коэффициент)),2);                    
//        ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
       Если докцена<прихцена Тогда
          // ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           ТЗ.НоваяСтрока();    
           ТЗ.Товар   = Конт.ТМЦ;                  
           ТЗ.Ошибка  = " має ціну нижчу за прихідну ";
           ТЗ.Стр     = Конт.НомерСтроки;
           ТЗ.Автор   = Конт.Отпустил;
       КонецЕсли;
       //кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
       Если кат.Выбран()=1 Тогда
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
           минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
           Если докцена<минцена Тогда
               //3/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " має надто низьку ціну="+докцена+" мiнимальна="+минцена;
               ТЗ.Стр     = Конт.НомерСтроки;            
           КонецЕсли;
       КонецЕсли;        
   КонецЦикла;
   Возврат(ТЗ);
КонецФункции
462 trad
 
21.02.13
15:02
(461) ты что думаешь, что я буду это разбирать?
463 Mikeware
 
21.02.13
15:04
(462) "назвался Лазо - полезай в топку!"©
464 trad
 
21.02.13
15:05
(463) да без проблем
465 trad
 
21.02.13
15:06
как понимаю тебе надо вот это загнать в запрос?
       прихцена=Окр(КонтТовар.Цена_Прих.Получить(Конт.ДатаДок)*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)),2);
       докцена=Окр(?(Конт.Кво*Конт.Коэффициент=0,0,Конт.СуммаСНДС/(Конт.Кво*Конт.Коэффициент)),2);                    
//        ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);

       Если докцена<прихцена Тогда
466 Wobland
 
21.02.13
15:06
бьётся в тесной печурке Лазо...
467 sapphire
 
21.02.13
15:09
(466) Ждем скалярный запрос определения цены...
468 trad
 
21.02.13
15:12
(467) конечно скалярный. У тебя какие то предубеждения на этот счет?
469 sapphire
 
21.02.13
15:13
(468) Давай хоть скалярный :)
470 bananan
 
21.02.13
15:14
(465) Да это и не только это...
471 trad
 
21.02.13
15:15
(470) какой вид справочника в СтавкаНДС?
472 trad
 
21.02.13
15:17
(469) Т.е. ты настаиваешь, что есть более приемлемый вариант? Не худший, не равнозначный, а именно лучший, более чем скалярный запрос?
473 bananan
 
21.02.13
15:24
(471) СтавкаНДС - это не справочник насколько я понял, сейчас ищу что это такое
474 bananan
 
21.02.13
15:26
В српвочнике ТМЦ ставкаНДс - это Справочник.ВидыНалогов
475 viktor_vv
 
21.02.13
15:28
(472) Подзапос в Select в его запросе, и там сразу фильтровать, не ?
476 viktor_vv
 
21.02.13
15:30
(475)+ Правда с этим немного геморно получится

"Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)".
477 bananan
 
21.02.13
16:00
Пробывал так:
   ТекстЗапроса = "
       |SELECT
       |    Жур.IDDoc as [Документ $Документ.РасходнаяНакладная]
       |,     СтавкаНДС as [$Справочник.ВидыНалогов]
       |,   Накладные.ТМЦ as [$Справочник.ТМЦ]
       |,   Накладные.LINENO_
       |,   $ОбщийРеквизит.Автор [Автор $Справочник.Сотрудники]
       |FROM
       |    _1SJourn as Жур              
       |    INNER JOIN
       |    (SELECT
       |        IDDOC,
       |        $ДокС.ТМЦ AS ТМЦ
       |         ,ДокС.LINENO_
       |,       $ДокС.ТМЦ.СтавкаНДС
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладная as ДокС (nolock)
       |    UNION ALL
       |    SELECT
       |        IDDOC,
       |        $ДокН.ТМЦ    
       |         ,ДокН.LINENO_      
       |,       $ДокН.ТМЦ.СтавкаНДС
       |    FROM
       |        $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock)
       |    ) Накладные
       |    ON Жур.IDDOC=Накладные.IDDOC
       |        AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
       |";
ругается:
The column prefix 'ДокС.sp1171' does not match with a table name or alias name used in the query.
Понятно, что я делаю совсем не так как нужно, но как нужно?
478 Wobland
 
21.02.13
16:04
(477) нужно учиться соотносить получаемые ошибки с выполняемым текстом
479 Wobland
 
21.02.13
16:04
+(478) и пымнить о том, что двы точкы ныльзя с прымых запросых
480 bananan
 
21.02.13
16:13
(479) тоесть $ДокС.ТМЦ.СтавкаНДС нельзя.
А как здесь быть?
481 Анна_84
 
21.02.13
16:14
извините за ОФФ: ребят, ну и терпения же у вас!

эх... мне б так работать... два дня на мисте потупить - и запрос коллективно напишут...
482 trad
 
21.02.13
16:15
(474) если дословно интерпретировать, то вот пара вариантов.
Как больше нравится, разницы нет.
   |SELECT
   |    Жур.IDDoc as [Документ $Документ]
   |,   Жур.IdDocDef as Документ_вид
   |,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as [ТМЦ $Справочник.ТМЦ]
   |,   isnull(ДокС.lineno_, ДокН.lineno_) as НомерСтроки_
   |,   $ОбщийРеквизит.Автор as [Автор $Справочник.Сотрудники]
   |FROM _1SJourn as Жур (nolock)
   |Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
   |Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
   |WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |  AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |  AND ROUND(case when isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) = 0 then 0 else
   |        isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) / isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент)
   |      end,2) <
   |      ROUND($ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) *
   |            (1+$ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime))),2)
483 trad
 
21.02.13
16:15
или так
   |SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as ТМЦ
   |   ,   isnull(ДокС.lineno_, ДокН.lineno_) lineno_
   |   ,   isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) Количество
   |   ,   isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) СуммаСНДС
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   FROM _1SJourn as Жур (nolock)
   |   Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
   |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE ROUND(case Данные.Количество = 0 then 0 else Данные.СуммаСНДС / Данные.Количество end, 2) < ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2)
484 bananan
 
21.02.13
16:21
(482) Это пара вариантов или это один из вариантов?
485 trad
 
21.02.13
16:23
(482) - это первый
(483) - это второй
486 trad
 
21.02.13
16:23
и еще хотелось бы чтобы "инженер знаний" sapphire предложил свой вариант либо забрал свои слова из (358)
487 bananan
 
21.02.13
16:24
+(484) в коде вроде разобрался, у функции несколько видов "неправильной цены":
Функция Разность(Конт)
//Перем кат,минцена,докцена;

   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Автор");
   ТЗ.НоваяКолонка("Товар");
   ТЗ.НоваяКолонка("Ошибка");
   ТЗ.НоваяКолонка("Стр");
   Конт.ВыбратьСтроки();
   ТЗ.Автор   = Конт.Автор;        
   ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
   кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
   Пока Конт.ПолучитьСтроку()=1 Цикл
       контТовар = Конт.ТМЦ;
       прихцена=Окр(КонтТовар.Цена_Прих.Получить(Конт.ДатаДок)*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)),2);
       докцена=Окр(?(Конт.Кво*Конт.Коэффициент=0,0,Конт.СуммаСНДС/(Конт.Кво*Конт.Коэффициент)),2);                    
//        ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
       Если докцена<прихцена Тогда
          // ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           ТЗ.НоваяСтрока();    
           ТЗ.Товар   = Конт.ТМЦ;                  
           ТЗ.Ошибка  = " має ціну нижчу за прихідну ";
           ТЗ.Стр     = Конт.НомерСтроки;
           ТЗ.Автор   = Конт.Отпустил;
       КонецЕсли;
       //кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
       Если кат.Выбран()=1 Тогда
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
           минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
           Если докцена<минцена Тогда
               //3/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " має надто низьку ціну="+докцена+" мiнимальна="+минцена;
               ТЗ.Стр     = Конт.НомерСтроки;            
           КонецЕсли;
       КонецЕсли;        
   КонецЦикла;
   Возврат(ТЗ);
КонецФункции
Остальные виды "неправильной цены" выбирать таким же образом?
488 bananan
 
21.02.13
16:24
(486) :) :) :)
489 viktor_vv
 
21.02.13
16:28
(486) Ну если цепляться к словам, то в (468) ты про скалярный запрос говорил, а привел варианты совсем другого.
490 bananan
 
21.02.13
16:28
(485) попрообывал второй вариант (он мне понятней вроде), да выдает ошибку:
Line 46: Incorrect syntax near '='.
а где там 46 строка.....
491 trad
 
21.02.13
16:28
(488) и ты зря смеешся
493 trad
 
21.02.13
16:31
(489) да, я говорил про скалярный, а думал про корреляционный,  извини
495 bananan
 
21.02.13
16:33
(494) Понял - не лезу.
А как по поводу неправильного синтаксиса = ?
496 Mikeware
 
21.02.13
16:33
(481) какие два дня? он пять лет уже тут тупит!
:-)))
и это еще только начало...
497 trad
 
21.02.13
16:34
(487)
надо анализировать это
Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1
и _конструировать_ соответствующий запрос на-лету
498 Mikeware
 
21.02.13
16:34
(490) после 45-й... где-то перед 47-й...
499 Mikeware
 
21.02.13
16:35
(497) не получится.
500 bananan
 
21.02.13
16:35
(496) и опять ты со своей желчью...
501 viktor_vv
 
21.02.13
16:35
Скорее всего вместо

cast(left(Жур.date_time_iddoc,8) as datetime)

надо

convert(datetime, left(Жур.date_time_iddoc,8),112)

ну и для вторго тоже. Таки cast скорее всего по дефаулту конвертит.
502 trad
 
21.02.13
16:39
(501) нет, не верно
(490) case when
503 bananan
 
21.02.13
16:40
(501) каст или конверт - позже разбиремя, где там синтаксическая ошибка использования =?
 |SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as ТМЦ
   |   ,   isnull(ДокС.lineno_, ДокН.lineno_) lineno_
   |   ,   isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) Количество
   |   ,   isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) СуммаСНДС
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   FROM _1SJourn as Жур (nolock)
   |   Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
   |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE ROUND(case Данные.Количество = 0 then 0 else Данные.СуммаСНДС / Данные.Количество end, 2) < ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2)
       |";
504 bananan
 
21.02.13
16:42
(502) case when  нет в данном тексте запроса..
505 trad
 
21.02.13
16:43
(501) на всякий случай. Слова "нет, не верно" относятся к утверждению "надо", а не к последнему предложению
506 trad
 
21.02.13
16:43
(504)
вместо
WHERE ROUND(case Данные.Количество = 0
напиши
WHERE ROUND(case when Данные.Количество = 0
507 trad
 
21.02.13
16:46
Хм.
Интересно с чего вдруг кто то утоп ветку с формулировкой:
? [длинная ветка, 21.02.13 - 16:40]

С чего вдруг она длинной стала?..
508 bananan
 
21.02.13
16:47
(506) Исправил - запрос работает, а как к нему "прикрутить" остальные "неправильные" цены и чтобы выдавать ошибку типа:
" має ціну нижчу за прихідну
не встановлена ціна категорії "
" має надто низьку ціну="+докцена+" мiнимальна="+минцена;
?
509 viktor_vv
 
21.02.13
16:55
(505) Я так и понял, таки да, по барабану как конвертить.
510 trad
 
21.02.13
16:56
(508) давай так.
Алгоритм конструирования запроса согласно (487) будет стоить 22890 российских рублей.
511 bananan
 
21.02.13
17:00
(510) Это сколько в долларах?
512 trad
 
21.02.13
17:02
761,724    по курсу ЦБ РФ на 21.02.2013
513 bananan
 
21.02.13
17:04
(512) У меня зарплата чуть больше 300...
а теперь прикинь солдат где Москва, а где Багдад
А за неоценимую помоь с запросом Огромное спасибо
514 bananan
 
21.02.13
17:11
чтобы выдавать текст ошибки задал в запросе так:
|SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |,   'Абба' as Ошибка
Дак он Столбца Ошибка не показывает что я не так сделал?
515 Mikeware
 
21.02.13
17:24
врешь ты где-то
516 bananan
 
21.02.13
17:29
(515) Не вру, что-то я в прошлый раз просмотрел...
сейчас задал так как и будет в итоге:
|,   'має ціну нижчу за прихідну' as Ошибка
В таблице значений появился столбец Ошибка
517 bananan
 
21.02.13
17:34
В итоге как я думаю сделать (так я смогу):
все три типа "ошибки" - отдельные запросы - в таблицу значений сбрасываем итог работы значений, потом из трех таблиц значений вывожу результаты в Таблицу
518 batman69
 
21.02.13
17:37
(517) Это что за уродство на Дельфях? Ты бы перестал писать, пользы больше. Тебе кто-нибудь рассказывал про дружественные интерфейсы?
519 batman69
 
21.02.13
17:39
(518) + И не говори что так заказчик пожелал.. не поверю. )))
520 bananan
 
21.02.13
17:42
Оказывается осталось не так иуж и мало (как я на радостях подумал)
ТЬеперь надо "зазапросить":
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
:(
521 bananan
 
21.02.13
17:43
(518) Ты о какой имено проге? их там три...
522 Mikeware
 
21.02.13
17:43
(518) ты рискнул запустить?
наадеюсь, где-нибудь в песочнице на виртуалке? :-)
523 bananan
 
21.02.13
17:45
(522) Не переживай за СЕБЯ ВЕЛИКОГО и ни за кого - вирусов там НЕТ и не было
524 Mikeware
 
21.02.13
17:46
(523) ты вполне мог об этом и не знать.... :-)
525 bananan
 
21.02.13
17:57
(524) Вполне, но антивирус в системе стоит довольно таки неплохой, а программы я писал без вирусов :)
526 Classic
 
21.02.13
18:01
Как можно один запрос одбсуждать 6 страниц?
527 Mikeware
 
21.02.13
18:04
(526)"все еще только начинается!"© :-))
только половину написали... или треть...
528 trad
 
21.02.13
18:30
(526) так запрос то обсуждали не много. В основном один - откровенно тормозит и отказывается учится, а другие топчутся на нем и вытирают ноги, потешая свое чсв
529 bananan
 
21.02.13
18:37
(527) Скорее на треть
530 Classic
 
21.02.13
18:41
(529)
Твоя задача пишется на чистой православной семерке за полчаса максимум и отрабатывает раза в четыре быстрее первоначального алгоритма.
Ты пишешь его уже 6 дней. При этом полез в недоступные тебе дебри.
Тебе за это платят? Или ты так, для себя?
Если платят, то скажи, где можно получать так деньги
531 batman69
 
21.02.13
18:51
(522) ну естественно )))
(521) Две из них и прогами назвать нельзя, вобщем это пиз-ц товарищи!
532 batman69
 
21.02.13
18:51
Честное слово ТС, брось писать.
533 batman69
 
21.02.13
18:53
Жаль ушел автор.
534 bananan
 
21.02.13
18:54
(528) что торможу - неспорю, по поводу "отказывается учится" - ты не прав
535 bananan
 
21.02.13
18:54
(533) а ты еще не всю желч вылил?
536 batman69
 
21.02.13
18:55
(535) О, появился ))
537 batman69
 
21.02.13
18:55
что есть "желч"?
538 bananan
 
21.02.13
18:57
(537) Пардон, это я ошибочно тебе адресовал...
539 bananan
 
21.02.13
19:21
А по поводу запроса:
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
чтобы это значило?
Получаем цену ТМЦ из документа...
а зачем : Число(Прав(кат.Идентификатор(),1)?
540 bananan
 
21.02.13
19:34
Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))) это мы значение цены по виду расчета получаем?
541 bananan
 
21.02.13
19:40
+(540) Ошибся здесь Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)))  мы получаем цену ТМЦ в данном документе...
542 bananan
 
21.02.13
19:41
+(541) точнее получаем  ЦенаБезНДС
543 bananan
 
21.02.13
19:46
Пытаюсь получить цену без НДС
написал так:
   |   ,   isnull(ДокС.ЦенаБезНДС, $ДокН.СуммаСНДС) as ЦенаБезНДС
выдает ошибку:
SQL Server]Invalid column name 'ЦенаБезНДС'.
544 bananan
 
21.02.13
19:48
+(543) написал так (предварительное ошибочно):
|   ,   isnull(ДокС.ЦенаБезНДС, $ДокН.ЦенаБезНДС) as ЦенаБезНДС
545 bananan
 
21.02.13
19:50
Почему ЦенаБезНДС ошибочный столбец?
если в доументах РасходнаяНакладная и РасходнаяНакладнаяН есть в таблицной части поле ЦенаБезНДС
546 bananan
 
21.02.13
19:52
+(545) видимо потому что ЦенаБезНДС находится в табличной части документа?
547 Mikeware
 
21.02.13
20:16
(546) потому, что где-то в ДНК записано ошибочное значение...
548 sapphire
 
21.02.13
20:23
(481) Аннушка, а шнурков отпускать надоть а то рып в водоемах совсем не останется...
549 viktor_vv
 
21.02.13
20:25
(544) Это уже проходлили

isnull(ДокС.ЦенаБезНДС, $ДокН.СуммаСНДС)


$ДокН.ЦенаБезНДС
ДокС.ЦенаБезНДС

слева направо, ничего не натораживает ?
550 trad
 
22.02.13
09:01
(548) на (486) ответишь?
551 sapphire
 
22.02.13
10:04
(526) Еще как можно :)
552 sapphire
 
22.02.13
10:04
(550) Да гумно твой запрос, успокойся уже.
553 trad
 
22.02.13
11:12
554 bananan
 
22.02.13
11:22
Доброе утро!!!
Вопрос   Данные.IdDocDef as Документ_вид
Данные.IdDocDef - имеет какой тип данных?
555 viktor_vv
 
22.02.13
11:26
(554) В скуле число, в DBF строка (шестнадцатиричное представление того же числа, если мне память не изменяет).
Правда Данные - это что ? 1Sjourn наверное.
556 bananan
 
22.02.13
11:28
(555) То что число вижу в результирующей ТЗ, просто хотелесь бы видеть не какое-то число а: Расходная накладная и т.п....
Т.е. приведение типов здесь не прокатит?
557 viktor_vv
 
22.02.13
11:29
Данные.IdDocDef as [Документ_вид $ВидДокумента]
558 trad
 
22.02.13
11:29
(555)"шестнадцатиричное представление" - 36-рично
"Правда Данные - это что ?" см. (483)
559 bananan
 
22.02.13
11:32
(557) Спасибо! Не думал, что так просто
560 Mikeware
 
22.02.13
11:33
(554) в документации, ссылке на которую дана тебе в январе, это сказано.
561 Mikeware
 
22.02.13
11:34
(559) ты вообще не думал.  а сразу на форум полез клянчить.
562 Mikeware
 
22.02.13
11:34
+(560) ссылка дана не в январе, ав декабре. 2 месяца назад
563 trad
 
22.02.13
11:35
(556) на Документ_вид в выборке можешь не обращать внимания.
Это поле необходимо для правильной типизации документа когда 1с++ преобразует результат сервера в то что ты получаешь в ТЗ
читать тут http://www.1cpp.ru/docum/icpp/html/ODBC.html#id28

Но если вместо числового идентификатора вида хочешь видеть название вида, то либо (557), либо Данные.IdDocDef as [Документ_вид $ВидДокументаПредставление]
и снова http://www.1cpp.ru/docum/icpp/html/ODBC.html#id28
564 bananan
 
22.02.13
11:36
Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)))
роазве не аналогично $ДокС.ЦенаБезНДС?
565 viktor_vv
 
22.02.13
11:36
(558) Согласен.
566 bananan
 
22.02.13
11:37
(561) Ты прям супермозг видиш у себя что я думаю и что я делаю
567 Mikeware
 
22.02.13
11:38
(563) оно не читает документацию. принципиально.
568 viktor_vv
 
22.02.13
11:38
(564) Нет.
"Цена"+Число(Прав(кат.Идентификатор(),1))
Может быть в конечном итоге чем угодно, в зависимости от
Число(Прав(кат.Идентификатор(),1))
569 bananan
 
22.02.13
11:39
(567) см. (566) и телепортируйся к моему месту работы и посмотри что я читаю или что я не читаю
570 viktor_vv
 
22.02.13
11:39
(568) ЦенаСДС это реквизит табличной части, а это вообще-то реквизит элемента справочника.
571 Privalov
 
22.02.13
11:40
Где обещанные исходники проги на дельфях!!! Обещал, давай!!! Народ в нетерпении!!
572 Mikeware
 
22.02.13
11:40
(568) только вряд ли Число("БезНДС") будет равно "БезНДС"
573 Mikeware
 
22.02.13
11:40
(569) и так ясно, без телепортации...
574 bananan
 
22.02.13
11:41
(568) Абидна, но, сейчас я в непрямом запросе это и проверю, мне почему-то кажется что с такими документами - это и будет цена без НДС.
Хотя, конечно же, я могу и ошибаться
575 bananan
 
22.02.13
11:42
(571) Я обещал? Что-то не помню.. Но раз обещал, в понедельник покажу - постараюсь не забыть
576 viktor_vv
 
22.02.13
11:46
(572) Да там видать перепаханная конфа с реквизитами в справочнике ТМЦ типа "Цена1, цена2,Цена3" и каким нибудь пречислением "КатгорииЦен" с соотвествующими идентификаторами с цифрой в конце.
В типовой такой хрени нету.
577 trad
 
22.02.13
11:47
(567) хотя документация из раздела http://www.1cpp.ru/docum/icpp/html/ODBC.html не подготовленному читателю, без знаний по языку sql и не знакомому со структурой одинесной базы, не поможет вообще никак.
578 Wobland
 
22.02.13
11:48
(573) нене, читает. тест на номер страницы из Ицика пройден ;)
579 viktor_vv
 
22.02.13
11:48
(576) Там же "Цена"+Число(Прав(кат.Идентификатор(),1)) только последний символ к числу приводят, потом к строке цепляют.
Короче там что-то ядерное такое.
580 bananan
 
22.02.13
11:49
(576) По словам начальника отдела эта конфа переделана роцентов на 70%...
Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))) как реализовать в запросе?
581 sapphire
 
22.02.13
11:49
(577) Капитан очевидность :)
582 sapphire
 
22.02.13
11:50
(576) Тут кого-то md-шником осчастливили даже :)
583 bananan
 
22.02.13
11:50
(579) Вообще-то это код из функции глобального модуля, но, судя по всему скорее всего и этот код не из типовой конфигурации
584 viktor_vv
 
22.02.13
11:50
(580) Ого, у вас там что, целый завод по перерабокте цифр :).
585 sapphire
 
22.02.13
12:02
(583) Чарівненько
586 trad
 
22.02.13
12:02
(581) а полезное есть что сказать?
587 sapphire
 
22.02.13
12:03
(586) Не, одно и тоже твердить из темы в тему бесполезно.
588 sapphire
 
22.02.13
12:04
(586) А ты думаешь откуда тут Ицика Бен-Гана поминают? Его который раз просят что б он документацию осилил... Так ведь нет же.
589 trad
 
22.02.13
12:05
(587) сказать полезное мне, а не ТС.
ты же мне это сказал
590 sapphire
 
22.02.13
12:07
(589) А что тебе полезно, милейший? Могу тебе сказать, посмотри план выполнения запроса в (319) и продумай. Что-то еще тебе от меня нужно?
591 Ёпрст
 
22.02.13
12:08
(582) у меня был, я его проипал.
Кстати, там до уатора норм разраб был - были и классы и прямые запросы в модуле проведения для получения останков.
592 sapphire
 
22.02.13
12:11
(591) :)
Видать, не выдержал он такого поддавана, али сбёг, а ли спилси...
593 sapphire
 
22.02.13
12:11
(591) У них там многокассовая розница? Зачем блокирующий расчет в модуле проведения?
594 bananan
 
22.02.13
12:14
Ну.. Вам как всегда виднее... А он не сбег и не спился а работает здесь же...
Так вот у меня сейчас задача найти минимальную цену, в функции она вычисляется так:
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
вот это и надо в запросе реализовать...
595 sapphire
 
22.02.13
12:17
(589) Ты бы ему лучше свои творения показал:
http://www.dev.citykirov.ru/
596 sapphire
 
22.02.13
12:18
(594) А с чего ты взял, что Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))) это значение минимальной цены?
597 bananan
 
22.02.13
12:19
Странно в непрямом запросе в функции написал такой код:
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Сообщить(Конт.ТМЦ+ ", минцена= "+минцена);
Так он сообщает Только название ТМЦ, даже нету!
Что здесь нетак?
598 bananan
 
22.02.13
12:20
(596) А что это потвоему?
599 sapphire
 
22.02.13
12:20
(597) А так?
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
          Сообщить(""+Конт.ТМЦ+ ", минцена= "+минцена);
600 Wobland
 
22.02.13
12:20
(597) Так он сообщает Только название ТМЦ, даже нету!
это по-русски или по-уркаински?
601 sapphire
 
22.02.13
12:22
(598) Получение атрибута вида 'Цена[0123456789]'
602 sapphire
 
22.02.13
12:23
(600) это по его-вски
603 sapphire
 
22.02.13
12:24
(594) Не сбег и не спился, только от тебя бегает, да?
604 bananan
 
22.02.13
12:24
(600) Пардон. пропустил:
", минцена= " - этой строки в сообщении даже нет!
605 sapphire
 
22.02.13
12:24
(598) Паче того, он небось еще и периодический
606 bananan
 
22.02.13
12:25
(603) Да нет - не бегает, каждый деь на работе, просто уже третий день на больничном он
607 bananan
 
22.02.13
12:26
Ну вот код:
Сообщить(Конт.ТМЦ+ ", минцена= "+минцена);
который возможно и позволить понять, что такое минцена,
но этот код выдает только Конт.ТМЦ, и все! даже ", минцена= " не выдает
Почему?
608 sapphire
 
22.02.13
12:28
(589) Вот посмотри (599) и (607), думаешь кто-то будет к ТС относится сурьезно?
609 sapphire
 
22.02.13
12:28
(607) Въ Козельскъ, зв?ре!!
610 sapphire
 
22.02.13
12:29
(607) ну ти смалиш и шкрябай далі
611 Ёпрст
 
22.02.13
12:29
(607)Неявное приведение к типу первого операнда.
612 sapphire
 
22.02.13
12:29
(607) Сообщить(""+Конт.ТМЦ+ ", минцена= "+минцена);
613 Ёпрст
 
22.02.13
12:29
+611 если че, Сообщить(""+Конт.ТМЦ+ ", минцена= "+минцена);
614 sapphire
 
22.02.13
12:30
(613) :))))
615 sapphire
 
22.02.13
12:31
(611) Я ему исчо в (599) на это намекал - ему безразлично...
616 bananan
 
22.02.13
12:32
(607) Спасибо!
Не перестаю удивляться тому как работает язык программирования 1С
Сообщить(""+Конт.ТМЦ+ ", минцена= "+минцена); - работает, а
Сообщить(Конт.ТМЦ+ ", минцена= "+минцена); - работет неправильно...
Короче выдает , минцена= НеизвестныйОбъект
ТАк что же такое эта чертова минцена?
617 Ёпрст
 
22.02.13
12:33
(616) нормально он работает.
Неявное приведение типов есть и в других языках или нужно явное приведение к строке с помощью функции преобразования.
618 sapphire
 
22.02.13
12:35
(617) Сам себя благодарит :)
Что дальше-то будет, о, ужас...
619 bananan
 
22.02.13
12:37
(618) Да после ваших комплиментов,..
Ошибся я с блаоджарностью, а спасибо было адресовано тебе
620 sapphire
 
22.02.13
12:39
(619) Ну так что же там с "минцена"?
Таки что это?
621 Mikeware
 
22.02.13
12:42
(578) это был тест не на "чтение ицика", а на его наличие.
622 bananan
 
22.02.13
12:47
(620) Судя по идентификатору - это минимальная цена..
НУ сейчас будем думать что код: Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
делает..
623 bananan
 
22.02.13
12:48
из Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
надо посмотреть что такое кат.Идентификатор(), остальное вроде все понятно...
624 sapphire
 
22.02.13
12:49
(622) Мне, например, и так ясно, я тебе уже отвечал.
625 bananan
 
22.02.13
12:49
ага, нешел кат.Идентификатор() - это категория цены
626 sapphire
 
22.02.13
12:49
(623) В конфигураторе посмотри....
Цена[0123456789] наверняка  периодическая...
627 bananan
 
22.02.13
12:50
(624) Может я пропустил? Что тебе ясно в этом коде?
628 sapphire
 
22.02.13
12:51
(625) Опять же, к вопросу о дожде,
Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(""+кат.Идентификатор(),1)));
629 sapphire
 
22.02.13
12:52
(627) Ты читать не умеешь совсем или тихо сам с собою левою рукою?
630 bananan
 
22.02.13
12:54
(629) что-то "ветка" глючит... Сейчас вот сообщения 623, 624, 629, а где 625 и далее?
Читать я умею, извини, может я пропустил где ты писал что это такое?
631 bananan
 
22.02.13
12:57
Глюки продолжаются... Извините, но создам новую ветку по теме этого запроса
632 viktor_vv
 
22.02.13
12:59
(630) да не глюки это, внизу нажми последнюю страницу.
633 bananan
 
22.02.13
13:16
Mikeware сказал что эта ветка еще жива...
Попробуем еще здесь побеседовать..
Так вот код непрямого запроса:
   Если кат.Выбран()=1 Тогда
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
            Сообщить(""+Конт.ТМЦ+ ", минцена= "+минцена);
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
нужно "выпрымить" - засунуть в прямой запрос...
634 bananan
 
22.02.13
13:18
+(633) т.е.  в первуюд очередь - надо выбрать минцена
635 bananan
 
22.02.13
13:33
+(634) Потом определить
Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1
если минцена периодический: тогда
минцена=минцена.Получить(Конт.ДатаДок);
потом
минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
хотя здесь я не вижу особой разности переодический ли минцена..
ну и если минцена=0 тогда это то ято мне и нужно - это ошибка
" не встановлена ціна категорії "....
Так вот, как в прямом запросе выбрать:
Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));

??
636 bananan
 
22.02.13
13:37
Хорошо. есть кто живой?
Как в прямом запросе определить: Конт.Доставка.КаналСбытаТТ.КатегорияЦены?
637 bananan
 
22.02.13
13:40
+(636) насколько я помню в прямом запросе "многоточие" не проходит...
Значит надо выбрать $Док.Доставка as Доставка
потом Доставка.КаналсбытаТТ as Канал
потом Канал.КатегорияЦены
так ?
638 chelentano
 
22.02.13
13:41
(636) переходи на 8.2, там это реализовано
639 Mikeware
 
22.02.13
13:41
(636) приджойнить к документу Доставку
к Доставке приджойнить КаналСбытаТТ
уж из  КаналСбытаТТ получать КатегориюЦены
640 sapphire
 
22.02.13
13:42
(636) Нужно знать типы полей:
Доставка
Доставка.КаналСбытаТТ - здесь смотреть еще периодический или нет.

КаналСбытаТТ.КатегорияЦены - та же фигня
641 Mikeware
 
22.02.13
13:42
(637) примерно
642 bananan
 
22.02.13
13:48
(640) Доставка - Справочник.Доставка
КаналСбытаТТ - Справочник.КаналыСбыта
Категория цены - Перечисление.ТипыЦен
643 bananan
 
22.02.13
13:54
+(642) выходит кажется так:
isnull($ДокС.Доставка, $ДокН.Доставка) as [Доставка Справочник.Доставка]
Так?
Дальше как?
644 bananan
 
22.02.13
14:08
Кто-нибудь, помогите!
645 Mikeware
 
22.02.13
14:09
(644) см (639)
646 bananan
 
22.02.13
14:12
Ребята, серьйозно, помогите..
Задал так в тексте запроса:
|   ,   isnull($ДокС.Доставка, $ДокН.Доставка) as [Доставка Справочник.Доставка]
Дак ругается:
поле таблицы не найдено "$ДокС.Доставка"
но в документе РасходнаяНакладная есть поле Доставка
что нетак?
647 bananan
 
22.02.13
14:14
(645) придожойнить? Дак джойны есть или это нете дойны?
|   Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
       |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
       |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
Еще надо добавить джойнов?
648 sapphire
 
22.02.13
14:15
(646) Потому что поле Доставка относится к реквизитам документа, а не к табличной части.
649 sapphire
 
22.02.13
14:16
(647) Лично я левые соединения обсуждать вообще не буду.
Пусть, Дима, как автор идеи левого соединения к журналу сам отбрехивается.
650 sapphire
 
22.02.13
14:16
(647) Я тебе уже говорил сделай хотя бы для одного типа документов, потом хватайся за другой тип.
651 bananan
 
22.02.13
14:19
(650) Ну есть же сделанный запрос для обоих типов документов.
В чем резон делать для одного типа?
652 bananan
 
22.02.13
14:31
+(651) Здесь есть кто-нибудь?
так что надо еще делать один джойн...
типа
|   left join $Справочник.Доставка Доставка (nolock) on ... ТМЦ.id = isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
а вот с on - незнаю как по Оставка его выбирать...
653 sapphire
 
22.02.13
14:40
(651) В том, что бы понять КАК делать.
654 sapphire
 
22.02.13
14:41
(652) Гадаешь? Ты вот в Delphi тоже гаданием на API занимаешься?
655 bananan
 
22.02.13
14:43
(654) ничего я не гадаю, просто опыт работы с SQL у меня практически нулевой (не учитывая простейших селектов)
656 bananan
 
22.02.13
15:02
(653) понять как делать заведомо неправильно? ЛУчше уж разобраться в правильном запросе, чем в ну в не практичном...
657 Mikeware
 
22.02.13
15:23
(655) теоретически у тебя опыт работы с SQL/1с++/Прямыми запросами - c 24.12.2012 - фактически два месяца!
(656) "чтобы узнать вкус пудинга - надо него съесть"
бери 1сQA, и в нем пиши - пробуй-отлаживай-проверяй запросы..
658 sapphire
 
22.02.13
15:23
(656) Да?
Ты уже настолько в курсе что правильно, практично, а что нет?
Ну так и разбирайся сам.
659 Mikeware
 
22.02.13
15:37
(658)
"-лёлик, это же неэстетично!
-- зато дешево, далежно и практично!"
©
660 bananan
 
22.02.13
15:37
(657) А что такое 1сQA?
661 Mikeware
 
22.02.13
15:44
662 sapphire
 
22.02.13
15:46
663 bananan
 
22.02.13
16:05
(662) Скачал 1сQA. Запустил... Выдает:
Неудачная попытка создания объекта (СервисРасшФормы)
Чего здусь уж нетак?
664 sapphire
 
22.02.13
16:18
из пятничной ветки, но актуально:
Мало открыть человеку глаза. Большинство еще просит указать дорогу и ждет волшебного пенделя.
665 bananan
 
22.02.13
16:23
(664) Несовсем так, ошибка Неудачная попытка создания объекта (СервисРасшФормы) откуда взялась?
666 Mikeware
 
22.02.13
16:27
(663) расчитано было на старую  версию 1c++
замени как тут:
   //*MS@ТКП, 2008-07-03 15:37:21
   //    гРасшФорма=СоздатьОбъект("СервисРасшФормы");
   //    гРасшФорма.ЗагрузитьМодуль();
   // -------- заменено на:
   ///MS@ТКП, 2008-07-03 15:37:21

   
   Если глВерсия1СПП >= глВерсия1СПП_2_5_0_0 Тогда
       //оФорма = СоздатьОбъект("Форма");
       //оФорма.УстановитьФорму(Форма);
       //оФорма.СоздатьЭлементУправления(Сам, ИдентификаторРеквизита);
       гРасшФорма=СоздатьОбъект("Сервис");
       гРФорма=СоздатьОбъект("Общие.Форма.Привязка");
       гРФорма.УстановитьФорму(Форма);
   Иначе

       //*MS@ТКП, 2008-07-03 15:22:25
       //        гРасшФорма=СоздатьОбъект("СервисРасшФормы");
       // -------- заменено на:
       гРасшФорма=СоздатьОбъект("Сервис");
       ///MS@ТКП, 2008-07-03 15:22:25

       гРасшФорма.ЗагрузитьМодуль();
       гРФорма=СоздатьОбъект("Общие.Форма.Привязка");
       гРФорма.УстановитьФорму(Форма);
оАтрФормы.УстановитьАтрибут(КонтекстФормы.Форма, ИдентификаторРеквизита);
   КонецЕсли;
667 bananan
 
22.02.13
16:35
Спасибо, сейчас попробую...
668 bananan
 
22.02.13
16:37
Этот код я вставил в начало процедуры ПриОткрытии()
ТЕперь выдает две ошибки.
Может код надо втавить в другое место?
669 sapphire
 
22.02.13
16:41
(666) А отсюда не проще взять было?
http://infostart.ru/public/98982/
670 bananan
 
22.02.13
16:52
(669) А нету у меня 800 рублей чтобы скачать :(
671 sapphire
 
22.02.13
16:58
(670) Ну гугл тебе в помощь
672 bananan
 
22.02.13
16:59
(671) да гуглю уже не один час..
673 viktor_vv
 
22.02.13
17:03
(666) Ну и нафига ты про этот 1СQA сказал ?
Теперь двести постов его подключать :).
Хотя я и сам так и не осилил :). Полурабочий какой-то получился.
674 viktor_vv
 
22.02.13
17:04
(672) Бедный гугль, боюсь его серваки не выдержат.
675 sapphire
 
22.02.13
17:04
(673) :)))))))
Я такое писал лет эдак 9 назад :)
676 Mikeware
 
22.02.13
17:05
(669) хренассе его там наворотили....
у меня по сравнению с инфосраньевским - какой-то жалкий огрызок. :-)
677 viktor_vv
 
22.02.13
17:07
(675) Я не про написать, я его и подключить не осилил :).
678 bananan
 
22.02.13
17:12
Кто-нибудь подскажет, что делать с 1СQA??
679 Mikeware
 
22.02.13
17:13
(678) запустить
680 sapphire
 
22.02.13
17:22
(676) (677) ИМХО, баловство это :)
681 sapphire
 
22.02.13
17:23
Выкачать даже с ИС не проблема, другое дело, что ТС не разберется с ним.
682 sapphire
 
22.02.13
17:24
(672) Вместо того, что бы вкуривать 1СQA, лучше бы посмотрел как у тебя данные лежат.
683 bananan
 
22.02.13
17:26
(682) Какиме именно данные, о типах я тебе писал, что теперь интересует?
684 sapphire
 
22.02.13
17:26
(656) Кстати, какой из запросов там у тебю правильный?
685 sapphire
 
22.02.13
17:27
(683) Меня? Меня мало что интересует :))))
686 Mikeware
 
22.02.13
17:28
(680) да самой первой версии в принципе более чем достаточно...
(682) да куле там вкуривать. дал ему, млять, что на что заменить - он йоптыть даже млять замену как-то куево сделал.  и, млять "две ошибки" - ну мистец, телепатировать теперть чо за две ошибки... хотя, млять, место одной точно знаю - ДНК....
687 sapphire
 
22.02.13
17:28
(683) Знать типы - это знать где физически хранятся данные.
688 bananan
 
22.02.13
17:29
(684) вот рабочий запрос:
|SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |,   'має ціну нижчу за прихідну' as Ошибка
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   isnull($ДокС.ТМЦ, $ДокН.ТМЦ) as ТМЦ
   |   ,   isnull(ДокС.lineno_, ДокН.lineno_) lineno_
   |   ,   isnull($ДокС.Кво*$ДокС.Коэффициент, $ДокН.Кво*$ДокН.Коэффициент) Количество
   |   ,   isnull($ДокС.СуммаСНДС, $ДокН.СуммаСНДС) СуммаСНДС
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   FROM _1SJourn as Жур (nolock)
   |   Left join $ДокументСтроки.РасходнаяНакладная as ДокС (nolock) on ДокС.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладная
   |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = isnull($ДокС.ТМЦ, $ДокН.ТМЦ)
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE ROUND(case when Данные.Количество = 0 then 0 else Данные.СуммаСНДС / Данные.Количество end, 2) < ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2)
   |";                  
ну и его надо переделать еще два раза под другие ошибки...
689 sapphire
 
22.02.13
17:30
(686) Да, Мишь он упрям, аки овен и туп, как стекло.
Бесполезно ему объяснять почему надо сделать сначала для одного типа документа, а не хвататься сделать всё сразу...
690 Mikeware
 
22.02.13
17:30
(685)
- и вотка покуй?
-- покуй!
- и бабы покуй?
-- покуй!!
- и деньги покуй??
-- а вот дентги не покуй!
- а в проавилах записано....
-- а мне правила покуй!
©
691 sapphire
 
22.02.13
17:32
(688) Ну и? От нас-то что нужно?
692 viktor_vv
 
22.02.13
17:35
(686) :)).
Прям крик души, а млять - это ты что-то про фиалки на лугу и единорогов наверное хотел сказать :)).
693 Mikeware
 
22.02.13
17:36
(692)
"-кто пасется на лугу?
-- заготовка для рагу!"
©
694 Mikeware
 
22.02.13
17:38
(691) ты тупой? тебе ж русским-по-беому сказали: " его надо переделать еще два раза под другие ошибки..." :-)
забили только волшебное слово добавить: "бегомблять!"®
695 bananan
 
22.02.13
17:45
(686) Не нервничай...так вот в том коде что я закачал строки
гРасшФорма=СоздатьОбъект("СервисРасшФормы");

нет и как я ее должен был заменить??
696 bananan
 
22.02.13
17:47
(694) ладно цеплтьсяк словам..
ну не переделать, а на основе того запроса создать запрос на два других типа ошибок в цене...
697 bananan
 
22.02.13
17:50
+(695) Ошибки:
Если глВерсия1СПП <<?>>>= глВерсия1СПП_2_5_0_0 Тогда
{\\SERVER12\VPKTEST$\EXTFORMS\1CQA.ERT(196)}: Переменная не определена (глВерсия1СПП)
оАтрФормы<<?>>.УстановитьАтрибут(КонтекстФормы.Форма, ИдентификаторРеквизита);
{\\SERVER12\VPKTEST$\EXTFORMS\1CQA.ERT(221)}: Переменная не определена (оАтрФормы)
698 Mikeware
 
22.02.13
17:51
(695) как заменить - указано в (666)
(697) ну, плять, поредели переменные. или убери вообще эти сравнения.
699 bananan
 
22.02.13
17:53
(698) в коде того что я закачал нет строки
гРасшФорма=СоздатьОбъект("СервисРасшФормы");
которую надо заменить. И как я ее должен біл заменять и чем?
700 bananan
 
22.02.13
17:58
(698) когда убрал Если...
вспліла ошибка:
оАтрФормы - переменная неопределена
701 Mikeware
 
22.02.13
17:59
Где у тебя тогда создавался этот объект?
702 Попытка1С
 
22.02.13
18:09
(693) У тебя голова от анекдотов не пухнет?)
703 Mikeware
 
22.02.13
18:20
(702) Нет. а что, должна?
она не пухнет даже когда я в нее ем...
704 Попытка1С
 
22.02.13
18:45
(703) Большая у тебя голова.. много помещается..)
705 Wobland
 
25.02.13
08:43
Блондинка по телефону:
- Я не спрашиваю твоих советов, ты мне скажи, что делать нужно!
706 Wobland
 
25.02.13
08:43
кстати, понедельник. обещанный делфийный код будет?
707 Privalov
 
25.02.13
08:47
(706) Присоединяюсь!!!!!
708 Privalov
 
25.02.13
09:31
Все замерли в ожидании )))
709 Mikeware
 
25.02.13
09:37
(708) или в страхе?
710 Wobland
 
25.02.13
09:41
солнце ещё низко над украиной
711 Mikeware
 
25.02.13
09:44
(710) "Тиха укрАинская ночь. Но сало лучше перепрятать!"©
712 Privalov
 
25.02.13
09:44
(710) Ну, да и поди еще ТС писАл всю ночь.
713 Privalov
 
25.02.13
10:25
Никого ))
714 Privalov
 
25.02.13
11:35
Не будет исходников .
715 Mikeware
 
25.02.13
11:41
(714) Сходи в кино, на http://www.kinonews.ru/movie_96810/leatherface-3d
почти то же самое...
716 Privalov
 
25.02.13
11:42
(715) )))))
717 Wobland
 
25.02.13
11:43
а послезавтра придёт ТС и скажет: "где это я исходники обещал?"
718 In123
 
25.02.13
11:46
(717) +100500
719 Privalov
 
26.02.13
12:00
И?
720 Privalov
 
26.02.13
12:00
Где?
721 bananan
 
26.02.13
12:02
Добрый день! Вижу у нас взаимная симпатия :)
Исходники - вроде не забыл
unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, ExtCtrls, StdCtrls, IniFiles, Math, Printers;

type
 TForm1 = class(TForm)
   Timer1: TTimer;
   ProgressBar1: TProgressBar;
   Label1: TLabel;
   Label2: TLabel;
   ProgressBar2: TProgressBar;
   Label3: TLabel;
   ProgressBar3: TProgressBar;
   Label4: TLabel;
   ProgressBar4: TProgressBar;
   Label5: TLabel;
   ProgressBar5: TProgressBar;
   Label6: TLabel;
   ProgressBar6: TProgressBar;
   Label7: TLabel;
   ProgressBar7: TProgressBar;
   Label8: TLabel;
   ProgressBar8: TProgressBar;
   Label9: TLabel;
   ProgressBar9: TProgressBar;
   Label10: TLabel;
   ProgressBar10: TProgressBar;
   Label11: TLabel;
   ProgressBar11: TProgressBar;
   Button1: TButton;
   PrintDialog1: TPrintDialog;
   Button2: TButton;
   procedure Timer1Timer(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
   procedure WMGETMINMAXINFO (var Msg:TWMGETMINMAXINFO); message WM_GETMINMAXINFO;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 pBar : Integer = 1;
 lab : TLabel;
 sPath: String[60];
 sIniFile: TIniFile;
 result: array [1..88] of boolean;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
 pb  : TProgressBar;
begin
pb := TProgressBar(FindComponent('ProgressBar' + IntToStr(pBar)));
 if Assigned(pb) then
 begin
   pb.Position := pb.Position + 1;
   if pb.Position >= 100 then
     inc(pBar);
   if pBar > 11 then
   begin
     Timer1.Enabled := False;
     Button1.Enabled := true;
   end;
 end;
end;
а жельше там неинтерестная лабуда...
722 bananan
 
26.02.13
12:06
А по поводу моего запроса, так вот я решил таки взяться и написать запрос по каждому виду документа отдельно (чтобы разобраться) так вот, текст запроса получился такой:
|SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |,   'має ціну нижчу за прихідну' as Ошибка
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   $ДокН.ТМЦ as ТМЦ
   |   ,   ДокН.lineno_) lineno_
   |   ,   $ДокН.Кво * $ДокН.Коэффициент /* у цьоу рядку йому щось неподобається!!!  .*/Количество
   |   ,   $ДокН.СуммаСНДС СуммаСНДС
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   FROM _1SJourn as Жур (nolock)
   |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = $ДокН.ТМЦ
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE ROUND(case when Данные.Количество = 0 then 0 else Данные.СуммаСНДС / Данные.Количество end, 2) < ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2)
   |";                      
Дак ругается что мол некорректное применение оператора *, когда я убрал * $ДокН.Коэффициент выдает ошибку в использвании from...
Что неправильно?
723 Privalov
 
26.02.13
12:17
(721) Мдя... и что это рассматривать как издевательство? Столько дней ждали, а он кинул одну процедурку и все. Нет так не пойдет. Нет тебе веры.
724 bananan
 
26.02.13
12:18
(723) Остальное - чепуха, но, если надо - принесу в следующий раз..
725 Ёпрст
 
26.02.13
12:24
ошибка в этой строке

|   ,   ДокН.lineno_) lineno_

ищи
726 Privalov
 
26.02.13
12:24
(724) Т.е. это самый важный код в трех файлах? Или больше нигде ничего нет? Это ты писал три дня?
727 bananan
 
26.02.13
12:26
(726) Я бы не сказал, что самый важный, - самый интерестный, дальше полно чернухи, (на форме 77 чекбоксво, все их надо проверить скинуть-прочитать из ини файла и т.д...
728 bananan
 
26.02.13
12:30
(725) Не понял в чем в этой строке ошибка... Когда убираю эту строку выжает такую ошибку:]Line 15: Incorrect syntax near '*'.
729 Wobland
 
26.02.13
12:30
а скажите мне как человеку, далёкому от делфей..
на зачем вот это:
if pBar > 11
не проще было прогрессбар крутить до (сколько там?) 1200?
730 Wobland
 
26.02.13
12:31
(728) может, там в строке что-то лишнее?
731 viktor_vv
 
26.02.13
12:33
(722) Тут тоже оставь один вид документа, лучше через равно

AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)

А то из-за этого у тебя в
$ДокН.Кво * $ДокН.Коэффициент

Null попадает.
732 bananan
 
26.02.13
12:44
(730) А что там может быть лишним в строке ,   ДокН.lineno_) lineno_?
(729) pBar - это объект Прогресбар а не свойсвто позиция, на форме 11 таких объектов..
(731) Сейчас посмотрю
733 Ёпрст
 
26.02.13
12:46
(732) думай, много думай..
особенно, на 21 символом призадумайся
734 bananan
 
26.02.13
12:46
(731) Это я не заметил, убрал второй вид документа...
Но вопрос не в этом.
Текст запроса такой:
|SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |,   'має ціну нижчу за прихідну' as Ошибка
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   $ДокН.ТМЦ as ТМЦ
   |   ,   ДокН.lineno_) lineno_
   |   ,   $ДокН.Кво * $ДокН.Коэффициент /* у цьоу рядку йому щось неподобається!!!  .*/Количество
   |   ,   $ДокН.СуммаСНДС СуммаСНДС
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   FROM _1SJourn as Жур (nolock)
   |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = $ДокН.ТМЦ
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE ROUND(case when Данные.Количество = 0 then 0 else Данные.СуммаСНДС / Данные.Количество end, 2) < ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2)
   |";                    
выдает ощибку:
Line 15: Incorrect syntax near '*'.
Почему???
735 bananan
 
26.02.13
12:47
(733) А что такое 21 сомвол????
736 Wobland
 
26.02.13
12:48
(734) а что ты хочешь от * там? каким смыслом существования ты эту звёздочку наделяешь?
737 Wobland
 
26.02.13
12:48
(735) это символ точно посередине между 20 и 22
738 Ёпрст
 
26.02.13
12:48
(735) в строке

|   ,   ДокН.lineno_) lineno_


найди двадцать первый символ слева. Посмотри и подумай.
739 Wobland
 
26.02.13
12:49
(738) пробелы считать за один?
740 chelentano
 
26.02.13
12:50
(735) это как 25-й кадр
(738) он ведь сейчас насчитает там :)
741 bananan
 
26.02.13
12:51
(738) посмотрел, подумал символ "_", если его убрать тоже ошибка: Incorrect syntax near the keyword 'lineno'.
742 Ёпрст
 
26.02.13
12:52
(741) ты еще и считать не умеешь, тогда в школу.
743 bananan
 
26.02.13
12:52
(736) От * хочу - умножение колиичества товара на цену да единицу товара
744 bananan
 
26.02.13
12:53
(742) Может в ясли?
Так какая там ошибка??
745 Privalov
 
26.02.13
12:53
Да, он просто троллит и издевается, нельзя быть таким тупым.
746 Ёпрст
 
26.02.13
12:53
(743) ответ в в (738)
считай символы (все, в том числе и пробелы), о юный падаван!
747 Wobland
 
26.02.13
12:54
ёмаё, а я ж не поленился посчитать, там не "_"
748 Wobland
 
26.02.13
12:54
(745) ты новенький в нашем фан-клубе, он неоднократно опровергал это утверждение
749 Mikeware
 
26.02.13
12:56
И вновь продолжается бой...©
:-)
750 bananan
 
26.02.13
12:57
(745) А тролем таки можно быть?
751 viktor_vv
 
26.02.13
12:57
(744) Не поверю, что в этой строке тебе ничего не кажется странным

|   ,   ДокН.lineno_) lineno_


это какой-то адский отжиг.
752 Ёпрст
 
26.02.13
12:58
(750)
Ладно, учу :

открой ТАБЛО в предприятии, напиши туда
Сред("|   ,   ДокН.lineno_) lineno_",21,1)
и нажми ентер, раз сам считать не научился

получишь верный ответ, дальше включай мозг и думай.
753 Wobland
 
26.02.13
12:59
видать, нашего бананана уволили. теперь следующий падаван его место занял
754 Mikeware
 
26.02.13
13:00
(752) 1) "что такое табло?"
2) "как открыть табло?"
:-)))
755 Mikeware
 
26.02.13
13:01
(753) "События имеют тенденцию развиваться от плохого к наихудшему"
756 bananan
 
26.02.13
13:01
(751) Спасибо. Исправил и запрос работает...
Это по поводу того чтобы разобраться...
Ну и насколько теперь стало легче "обзапросить"
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
??
С этой лабудой поможет кто разобраться?
757 Wobland
 
26.02.13
13:02
(755) не, мне старый больше нравился. а у этого не выходит.
"обзапросить", "лабуда" - ну не в духе того, привычного бананана
758 bananan
 
26.02.13
13:03
(752-754) Да увидел я уже там ошибку - успокойтесь и не трольте...
Если у кого есть нормальная подсказка по (756) - с радостью приму..
759 bananan
 
26.02.13
13:03
(757) Дык от вас набираюсь лексикона..
760 Ёпрст
 
26.02.13
13:05
(756) и что тебе там не понятно ?
761 viktor_vv
 
26.02.13
13:05
Вот так всегда, кто не работает, тот ест (получает спасибо) :)).
762 bananan
 
26.02.13
13:05
(755) Каждый воспринимет окружающее - по-своему!
763 bananan
 
26.02.13
13:06
(760) Непонятно многое:
1. как в запросе выбрать минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
?
764 viktor_vv
 
26.02.13
13:07
(756) Там где-то пару страниц назад тебе trdm, если не ошибаюсь, давал почти готовый код.
765 Ёпрст
 
26.02.13
13:08
(763) для начала, там бред написан, зачем его в запрос тащить ?

минцена=минцена.Получить(Конт.ДатаДок);
вот это вообще махер - получать что-то у ЧИСЛА.
766 Ёпрст
 
26.02.13
13:08
И это, какое отношение этот код имеет к запросу ?
767 bananan
 
26.02.13
13:09
(765) Не вижу я в коде функции строки:
минцена=минцена.Получить(Конт.ДатаДок)
768 Wobland
 
26.02.13
13:11
(767) ктрл+ф - поиск
769 bananan
 
26.02.13
13:11
(766) Этот код сейчас не имеет никакого отношения к запросу.
Задача запроса: выбрать документы и прочее если в строке документа "неправильная" цена установлена...
НЕПравильность цены определяте функция:
Функция Разность(Конт)
//Перем кат,минцена,докцена;

   ТЗ = СоздатьОбъект("ТаблицаЗначений");
   ТЗ.НоваяКолонка("Автор");
   ТЗ.НоваяКолонка("Товар");
   ТЗ.НоваяКолонка("Ошибка");
   ТЗ.НоваяКолонка("Стр");
   Конт.ВыбратьСтроки();
   ТЗ.Автор   = Конт.Автор;        
   ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
   кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
   Пока Конт.ПолучитьСтроку()=1 Цикл
       контТовар = Конт.ТМЦ;
       прихцена=Окр(КонтТовар.Цена_Прих.Получить(Конт.ДатаДок)*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)),2);
       докцена=Окр(?(Конт.Кво*Конт.Коэффициент=0,0,Конт.СуммаСНДС/(Конт.Кво*Конт.Коэффициент)),2);                    
       Если докцена<прихцена Тогда
          // ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
           ТЗ.НоваяСтрока();    
           ТЗ.Товар   = Конт.ТМЦ;                  
           ТЗ.Ошибка  = " має ціну нижчу за прихідну ";
           ТЗ.Стр     = Конт.НомерСтроки;
           ТЗ.Автор   = Конт.Отпустил;
       КонецЕсли;
       //кат=Конт.Доставка.КаналСбытаТТ.КатегорияЦены;        
       Если кат.Выбран()=1 Тогда
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
           минцена=Окр(минцена*(1-Конт.Доставка.КаналСбытаТТ.ДопустимаяСкидка/100),2);
           Если докцена<минцена Тогда
               //3/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " має надто низьку ціну="+докцена+" мiнимальна="+минцена;
               ТЗ.Стр     = Конт.НомерСтроки;            
           КонецЕсли;
       КонецЕсли;        
   КонецЦикла;
   Возврат(ТЗ);
КонецФункции
Вот ее и надо в запрос поставить...
И еще, я буду делать три запроса (по каждой из "ощшибок), т ак вот на первую "ошибку" запрос уже есть
770 viktor_vv
 
26.02.13
13:12
(768) Неправильно, надо дать позицию символа в (756), с которого начинается кусок этого кода.
771 bananan
 
26.02.13
13:13
(768) в 1С не кнтрл+_ф, а кнтрл-F3...
пропустил я эту строку... так эта строка получает цену на дату..
772 Wobland
 
26.02.13
13:13
(771) у числа что-то получает?
773 Wobland
 
26.02.13
13:14
(769) не, тот бананан не смог бы сказать "задача:"
774 bananan
 
26.02.13
13:14
(772) В этой функции минцина в первую очередь объект, а потом уж число..
775 Wobland
 
26.02.13
13:15
(774) точно, подменили
776 Privalov
 
26.02.13
13:15
Это ж ТС с 15-го числа с этой задачей мучается, к финалу еще даже близко не подобрался, и его еще не уволили?
Или все таки уволили и кто-то другой подхватил падающее знамя?
777 Ёпрст
 
26.02.13
13:15
(767) ты ужо не видишь, что сам написал ?!!!!!!!!
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
     !!!!!!!!!!!!!!!!          минцена=минцена.Получить(Конт.ДатаДок);!!!!!!!!!!!!!!!!
           КонецЕсли;

//Зачем у ЧИСЛА что-то получать?
778 trad
 
26.02.13
13:15
(764) не trdm тут не было. А так да, нас иногда путают.
779 bananan
 
26.02.13
13:15
(773) А Воблдан - тот, по желчи видно...
780 Ёпрст
 
26.02.13
13:16
+777
если что,
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));

Этот код присвоит минцена число, всегда.
781 viktor_vv
 
26.02.13
13:16
(774) А что за объект в первую очередь?
И этот кусок кода ты добалял ?
782 bananan
 
26.02.13
13:16
(777) эту функцию я не писал, она мне досталась в наследство от предыдущих программистов
783 viktor_vv
 
26.02.13
13:16
(778) Сорри, попутал :)).
784 Ёпрст
 
26.02.13
13:17
(774) Ты это, почитай СП на ночь.
ПолучитьАтрибут, есть такой метод у документа - получает ЗНАЧЕНИЕ
785 viktor_vv
 
26.02.13
13:18
(780) зря ты md прощелкал, судя по (782) там просто шедевральная конфа.
786 Ёпрст
 
26.02.13
13:18
(782) дык исправляй.
787 trad
 
26.02.13
13:19
(780) не, не всегда
788 Privalov
 
26.02.13
13:22
(785) Там и на дельфях не слабее шедевр походу ))))))
789 trad
 
26.02.13
13:22
(777) формально-синтаксически написано правильно
790 Ёпрст
 
26.02.13
13:23
(787) Шутишь ?
И при каких условиях Док.ПолучитьАтрибут у числовой колонки вернёт не число ?!
791 Ёпрст
 
26.02.13
13:24
(789) :))))))))))))))
792 Ёпрст
 
26.02.13
13:24
Или ты думаешь, что реквизиты
Цена"+Число(Прав(кат.Идентификатор(),1) в документе могут быть НЕ ЧИСЛОВЫЕ ?
793 bananan
 
26.02.13
13:28
Ребята, кто может что-то подсказать? - Подскажите
794 viktor_vv
 
26.02.13
13:28
(792) Не удивлюсь. Правда в таком варианте
минцена.Получить() должна ошибку вернуть.
795 trad
 
26.02.13
13:29
(790) при условии, что атрибут периодический
796 trad
 
26.02.13
13:29
(792) почему это в документе?
797 viktor_vv
 
26.02.13
13:32
(795) Думаю нет. ПолучитьАтрибут возвращает значение, а не реквизит, как объект.
И если он даже вернет значение элемента справочника, то в минцена.Получить() не хватает еще реквизита это элемента справочника.
798 bananan
 
26.02.13
13:33
Дело в том что данный код:
   Если кат.Выбран()=1 Тогда
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
               ТЗ.Стр     = Конт.НомерСтроки;
               ТЗ.Автор   = Конт.Отпустил;
           КонецЕсли;
В непрямом запросе работает...
799 viktor_vv
 
26.02.13
13:33
И если бы условие выполнилось

Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда

то была бы ошибка.
800 SherifSP
 
26.02.13
13:33
Ну
801 Wobland
 
26.02.13
13:33
(798) данный код ваще в запросе не работает
802 bananan
 
26.02.13
13:35
(798) Можно попродбывать пойти от противного или вернеее с конца (ТЗ.Ошибка  = " не встановлена ціна категорії ")
в начало или, вернее практически с нуля написать...
Т.е. для данного запроса надо найти документы и т.д., в которых на товар не установлена цена категории,
Что-то подобное кто-то когда делал? (я - нет)
803 trad
 
26.02.13
13:36
(797) можешь поверит, а можешь проверить
804 trad
 
26.02.13
13:37
*поверить
805 bananan
 
26.02.13
13:38
(801) работает!
данный код - в функции, а в непрямом запросе используется функция, вернее там таки не запрос, вот код того скрипта который работает, но ОЧЕЭНЬ медленно:
Процедура Сформировать()    
   Сообщить(ТекущееВремя());
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
   Таб.ВывестиСекцию("Шапка");
   Таб.Опции(0,0,Таб.ВысотаТаблицы());
   ОбДок = "Документ.РасходнаяНакладная";
   СчетИтер = 0;
   Пока СчетИтер<1 Цикл                  
       ВыбДок=СоздатьОбъект(ОбДок);
       Если СчетИтер = 0 Тогда
           ОбДок = "Документ.РасходнаяНакладная";
       Иначе
           ОбДок = "Документ.РасходнаяНакладнаяН";
       КонецЕсли;
       ВыбДок=СоздатьОбъект(ОбДок);
       ВыбДок.УстановитьФильтр(1,0);
       ВыбДок.ВыбратьДокументы(ДатаС,ДатаПо);
           иф = 1;
           кво = 0;
           кДок = 0;
           кОшиб=0;
       Пока ВыбДок.ПолучитьДокумент()<>0 Цикл
             Состояние("Перевірка "+ВыбДок+" ...");            
             кДок = кДок + 1;
             ТЗ=Разность(ВыбДок);            
             Если ТЗ.КоличествоСтрок()>0 Тогда
                ПечДок = ВыбДок.ТекущийДокумент();
                ТЗ.ВыбратьСтроки();
                Пока ТЗ.ПолучитьСтроку()=1 Цикл  
                   кОшиб=кОшиб+1;
                   ПечОшибка = ТЗ.Ошибка;        
                   ПечТовар = ТЗ.Товар;
                   Если ТЗ.Стр <> 0 Тогда
                       ПечНомерСтрокиСОшибкой = ТЗ.Стр;
                   Иначе                        
                       ПечНомерСтрокиСОшибкой = "А хто його знає";
                   КонецЕсли;
                   Таб.ВывестиСекцию("Документ");
                   ПредНомер = "";
                   ПредНомер = ПечДок.НомерДок;
               //    Пока ТЗ.ПолучитьСтроку()=1 Цикл
                       ПечОшибка = ТЗ.Ошибка;
                       ПечТовар = ТЗ.Товар;
                       ПечНомерСтрокиСОшибкой = ТЗ.Стр;                    
                       кво = кво+1;
                       Если СтрДлина(ТЗ.Ошибка)>0 Тогда
                           //Обл = Таб.Область(12+1*иф, 2,(12+1*иф), 2);
                           //Обл.ЦветФона(1, 1, 1);
                           //Обл.ЦветТекста(125, 125, 125);
                           Таб.ВывестиСекцию("Ошибка");    
                           иф=иф+1;
                       КонецЕсли;
                // КонецЦикла;
                КонецЦикла;
             КонецЕсли;
       КонецЦикла;        
       СчетИтер = СчетИтер + 1;
   КонецЦикла;
   Состояние("Готово!");  
   Предупреждение("Количество документов - "+кДок+" в них "+кОшиб+" ошибок");
   Таб.ТолькоПросмотр(1);
   Таб.Защита(1);
   Таб.Показать("Негаразд","");      
   Сообщить("Количество документов - "+кДок+" в них "+кОшиб+" ошибок");
   Сообщить(ТекущееВремя());
КонецПроцедуры
806 bananan
 
26.02.13
13:43
(799-800) Т.е. Вы хотите сказать, что:
Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;

вообще ненужный код?
807 viktor_vv
 
26.02.13
13:44
(803) Прикольно, таки работает.
808 viktor_vv
 
26.02.13
13:46
(807) И для числа тоже работает.
809 sapphire
 
26.02.13
13:48
(804) (807) Можно вообще без проверки на периодичность сделать.
810 Wobland
 
26.02.13
13:48
(808) шо, таки у числа можно что-то получить?
811 sapphire
 
26.02.13
13:48
(806) Отчасти, да, этот код лишний.
812 trad
 
26.02.13
13:49
(809)можно
813 sapphire
 
26.02.13
13:49
а если посмотреть на логику в (798) то можно вообще ничего не писать. Паренек явно не в курсе, что умножение числа на нуль даст нуль.
814 sapphire
 
26.02.13
13:50
(812) Тем  более к чему такая адская проверка непонятно.
815 viktor_vv
 
26.02.13
13:50
(810) Ну там не от числа. ПолучитьАтрибут() для периодического реквизита возвращает объект, для которого работает Получить(), так что там по большому счету неважен тип значения самого реквизита.
816 viktor_vv
 
26.02.13
13:52
(815)+ Я так понял для непереодического тоже самое, что ли ?
817 sapphire
 
26.02.13
13:53
(815) Проверка на периодичность не нужна вообще -
ИспользоватьДату+НайтиЭлемент
818 sapphire
 
26.02.13
13:53
(816) Да.
819 trad
 
26.02.13
13:53
(813) с чего вдрег там обязательно умножение на нуль?
820 trad
 
26.02.13
13:54
вдрег = вдруг
821 sapphire
 
26.02.13
13:54
(819) Вторая выборка по 1SCONST для Ставки явно лишняя, не находишь?
822 bananan
 
26.02.13
13:54
(811) Отчасти или не нужен совсем??
(817) ИспользоватьДату+НайтиЭлемент - это мне надо в прямом запросе исполльзовать...
823 viktor_vv
 
26.02.13
13:56
(817) Че-то попробовал, для непериодического примитивного типа возвращает само значение, соотвественно на Получить() отваливается.
824 sapphire
 
26.02.13
13:56
(820) Фрагмент и (798):
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;

           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)); // Это явно не нужно для проверки ниже, т.к. ставка врядли равна - 1 :))))
           Если минцена=0 Тогда
825 trad
 
26.02.13
13:56
(821) лишняя. код можно написать оптимальнее.
умножение на нуль то где? скажешь?
826 viktor_vv
 
26.02.13
13:56
(823)+ А, в комплекте с импользоватьДату(). Сейчас. Мне так лучше запоминается, когда сам пощупаешь :).
827 sapphire
 
26.02.13
13:57
(823) Потому что получить в данном случае применяется для периодического реквизита справочника...
828 sapphire
 
26.02.13
13:57
(822) Пиши еще :)
829 sapphire
 
26.02.13
13:58
(825)
минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));

здесь при минцена=0 какой-то иной результат можно получить?
830 trad
 
26.02.13
13:59
(824) "ставка врядли равна - 1" ну, не знаю, мне сложно ответить
831 sapphire
 
26.02.13
14:01
(826) Метод справочника ИспользоватьДату вроде как работает всегда и вне зависимости, есть периодические реквизиты, или нет, но, при использовании этого метода есть одна тонкость :)))
832 trad
 
26.02.13
14:01
(829) я понял о чем ты
833 sapphire
 
26.02.13
14:01
(832) Просто получить все отрицательные ставки проще простого, если они есть :)
834 viktor_vv
 
26.02.13
14:02
(827) Да, вкурил уже насчет использоватьДату, тогда получить() уже не надо.
835 sapphire
 
26.02.13
14:09
(834) Да, но есть ньюанс.
836 bananan
 
26.02.13
14:10
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))); - это цена товара без НДС?
---
Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
- пропускаем раз вроде как ненужная проверка
осталось еще получить минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
кто может что-то подсказать?
837 viktor_vv
 
26.02.13
14:10
(835) Это про невозможность одновременного использования ИспользоватьДату() и получить() ?
838 sapphire
 
26.02.13
14:11
(837) Нет, про особенность ИспользоватьДату
839 sapphire
 
26.02.13
14:12
(836) Кого, куда, и через что, ты там пропускаешь? :)
840 viktor_vv
 
26.02.13
14:12
(838) Колись уже :).
841 bananan
 
26.02.13
14:15
Помогите "озапросить" этот кусок кода тлт по-крайней мере - разобраться в нем:
   минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))); - это цена товара без НДС?
---
Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
- пропускаем раз вроде как ненужная проверка
осталось еще получить минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
кто может что-то подсказать?
842 Ёпрст
 
26.02.13
14:17
(795) :))))))))))))))))))))))))))))))))))))))))))))))))))))

ПЕРИОдический реквизит в табличной части документа ?!!!!!!!!1

Ну ты жгешььь!
843 trad
 
26.02.13
14:21
(842) глаза протри уже.
ценаХ - атрибут ТМЦ, а не ТЧ документа
844 Ёпрст
 
26.02.13
14:21
Пилять, опасайтесь укусов аутора - можно заболеть ненароком.
845 sapphire
 
26.02.13
14:22
(840) СП:
Замечание:
Если к объекту применен метод ИспользоватьДату, то нельзя применять к этому же объекту метод Получить.
// ВОТ ЭТО МАЛО КТО ЧИТАЕТ:
Метод нельзя использовать через две точки.
846 sapphire
 
26.02.13
14:22
(844) А ненарок излечим?
847 Ёпрст
 
26.02.13
14:22
(843) аааа, от оно че, михалыч!
:)))))))))))
848 Mikeware
 
26.02.13
14:23
(842) а я представил себе.. зачетно!
эх, еще бы _вид_  реквизита был периодическим!!! вообще бы зачетно было :-)
849 sapphire
 
26.02.13
14:24
(841) Ты так упорен в своей дремучести см. (813).
850 sapphire
 
26.02.13
14:25
(848) А он небось таковой и есть :)
851 viktor_vv
 
26.02.13
14:35
(845) А, про это, так я в (837) о том же.
Поэтому и не полюляю ИспользоватьДату(), а то потом возвращаешься воткнешь где-нибудь Получить().
852 viktor_vv
 
26.02.13
14:36
(851)+ Тьфу ты, реально, мало кто дочитывает :)), (845) понял.
853 Privalov
 
26.02.13
14:37
Скоро ветку закроют, после тыщи постов, а проблема автора так и не решена и исходники дельфевские нормально не показал.
854 viktor_vv
 
26.02.13
14:38
(853) Не боись, автор еще танчики переплюнет :).
855 Privalov
 
26.02.13
14:39
Он там уже новую ветку создал. ))
856 bananan
 
26.02.13
14:43
(855) Новую вытку зкрыли,
а создал потому что это не откликалась у меня...
Кто-то из вас мне что-нибудь полезное подскажет??
857 bananan
 
26.02.13
14:43
+(856)
Создаю новую ветку, потому что ветка Запрос по обработке документов... на 824 собщении вроде как закончилась
так вод о запросе:
есть код и его нужно "озапросить":
   минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);

               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))); - это цена товара без НДС?
---
Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
- пропускаем раз вроде как ненужная проверка
осталось еще получить минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
кто может что-то подсказать?
858 Mikeware
 
26.02.13
14:46
(857) ветка заканчивается после 1000 сообщений...
859 Wobland
 
26.02.13
14:55
(858) то есть где-то три по триста. это уже было
860 sapphire
 
26.02.13
15:10
(857) Ты, наверное, ждешь готовый запрос?
861 bananan
 
26.02.13
15:11
(859) Как всегда - бесценная информация...
862 bananan
 
26.02.13
15:12
(860) Да нет не жду,:
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);


               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))); - это цена товара без НДС?
---
Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
- пропускаем раз вроде как ненужная проверка
осталось еще получить минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
кто может что-то подсказать?
863 bananan
 
26.02.13
15:13
+(862) минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))); - это цена товара без НДС?
Да ил нет?
Если нет - тогда что это?
864 Wobland
 
26.02.13
15:15
(862) ещё пару раз, пожалуйста
865 sapphire
 
26.02.13
15:15
(863) А мы откуда знаем, что в твоей конфе имеется ввиду под
ТМЦ.СтавкаНДС.Ставка?
866 sapphire
 
26.02.13
15:17
(863) Скорее да, нежели нет.
867 bananan
 
26.02.13
15:19
(865) ТМЦ - это товар в документе, стакаНДС -Справчоник.ВидыНалогов, А ставка - число(7.4)
868 sapphire
 
26.02.13
15:20
(867) И?
869 bananan
 
26.02.13
15:21
(866) я тотже так подумал еще 15 числа, но потом мне здесь столько всего наговорили, а если минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))); - это цена товара без НДС, то ее легко в запросе получить...
870 bananan
 
26.02.13
15:21
(867) Как к этому достучаться в прямом запросе?
871 Wobland
 
26.02.13
15:27
(870) выбрать спрставки.ставка левое справочник ставки по тмц.ставкандс=спрставки.ид
как-то так
872 Wobland
 
26.02.13
15:27
(871) иннер джойн
873 bananan
 
26.02.13
15:30
(872) Спасибо - сейчас попробую, но вот исходя из того что минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))); - это цена товара без НДС
текст запросу у меня получился такой:
|SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_  
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |,   'має ціну нижчу за прихідну' as Ошибка
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   $ДокН.ТМЦ as ТМЦ
   |   ,   ДокН.lineno_ as lineno_
   |   ,   $ДокН.Кво * $ДокН.Коэффициент
   |   ,   $ДокН.СуммаСНДС СуммаСНДС      
   |   ,   $ДокН.ЦенаБезНДС AS ЦенаБезНДС
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   FROM _1SJourn as Жур (nolock)
   |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = $ДокН.ТМЦ
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE ROUND(case when Данные.Количество = 0 then 0 else Данные.СуммаСНДС / Данные.Количество end, 2) < ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2)
   |";                    
Так вот после того как добавил выбор ЦенаБезНДС выдает ошибку:
No column was specified for column 5 of 'Данные'
Что здесь нетак?
Насколько я понял надо ЦенаБезНДС еще где-то прописать?
874 bananan
 
26.02.13
15:31
+(873) Запрос без :
|   ,   $ДокН.ЦенаБезНДС AS ЦенаБезНДС
работает...
875 trad
 
26.02.13
15:35
(873) тут
|   ,   $ДокН.Кво * $ДокН.Коэффициент
потерял алиас
876 bananan
 
26.02.13
15:38
(875) Спасибо! поставилальяс - запрос заработал..
Теперь, по этому запросу не так уж много осталось :)
877 Wobland
 
26.02.13
15:40
(876) около ста двадцати постов
878 bananan
 
26.02.13
15:46
(877) Добрый ты, :(
879 Wobland
 
26.02.13
15:48
(878) злой я. ошибки логические допускаю. через 120 постов ветка кончится, а не запрос напишется
880 bananan
 
26.02.13
15:51
(879) Как-когда - то добрый, то злой :)
Ладно. по поводу запроса, на сколько я понимаю выбрать ставку НДС НАдо в подзапросе (Данные):
 |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   $ДокН.ТМЦ as ТМЦ
   |   ,   ДокН.lineno_ as lineno_
   |   ,   $ДокН.Кво * $ДокН.Коэффициент as Количество
   |   ,   $ДокН.СуммаСНДС СуммаСНДС                  
   |   ,   $ДокН.ЦенаБезНДС AS ЦенаБезНДС            
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
Да?
881 Wobland
 
26.02.13
15:52
я намекал на то, что желание получить нечто через две точки выливается в дополнительную таблицу и соединение с ней
882 bananan
 
26.02.13
15:53
(881) Это я понял. Так что теперь в подзапросе (Данные) надо еще один подзапрос писать?
883 Wobland
 
26.02.13
15:53
(882) я в твой запрос считай что не глядел
884 bananan
 
26.02.13
15:54
(883) Посмотри, ПОЖАЛУЙСТА:
|SELECT
   |    Данные.IDDoc as [Документ $Документ]
   |,   Данные.IdDocDef as Документ_вид
   |,   Данные.ТМЦ as [ТМЦ $Справочник.ТМЦ]
   |,   Данные.lineno_ as НомерСтроки_  
   |,   Данные.Автор as [Автор $Справочник.Сотрудники]
   |,   'має ціну нижчу за прихідну' as Ошибка
   |from (
   |   SELECT
   |       Жур.IDDoc as IDDoc
   |   ,   Жур.IdDocDef as IdDocDef
   |   ,   $ДокН.ТМЦ as ТМЦ
   |   ,   ДокН.lineno_ as lineno_
   |   ,   $ДокН.Кво * $ДокН.Коэффициент as Количество
   |   ,   $ДокН.СуммаСНДС СуммаСНДС                  
   |   ,   $ДокН.ЦенаБезНДС AS ЦенаБезНДС            
   |   ,   $ПоследнееЗначение.ТМЦ.Цена_Прих(ТМЦ.id, cast(left(Жур.date_time_iddoc,8) as datetime)) Цена_Прих
   |   ,   $ПоследнееЗначение.ВидыНалогов.Ставка($ТМЦ.СтавкаНДС, cast(left(Жур.date_time_iddoc,8) as datetime)) Ставка
   |   ,   $ОбщийРеквизит.Автор as Автор
   |   FROM _1SJourn as Жур (nolock)
   |   Left join $ДокументСтроки.РасходнаяНакладнаяН as ДокН (nolock) on ДокН.iddoc = Жур.iddoc and Жур.IdDocDef = $ВидДокумента.РасходнаяНакладнаяН
   |   left join $Справочник.ТМЦ ТМЦ (nolock) on ТМЦ.id = $ДокН.ТМЦ
   |   WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |     AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладнаяН)
   |) Данные
   |WHERE ROUND(case when Данные.Количество = 0 then 0 else Данные.СуммаСНДС / Данные.Количество end, 2) < ROUND(Данные.Цена_Прих * (1+Данные.Ставка),2)
   |";
885 Wobland
 
26.02.13
15:57
$ПоследнееЗначение.ВидыНалогов.Ставка - а это не ставка?
886 Wobland
 
26.02.13
16:00
(885) а типа число надо, а не справочник? ну да. ещё одна таблица, связь по этой ставке и ссылке в справочнике
887 sapphire
 
26.02.13
16:20
(872) Да уж :))))))
888 sapphire
 
26.02.13
16:21
(885) ... а зачем?!
889 Mikeware
 
26.02.13
16:25
(888)
- Доктор, я жить буду?
-- а смысл??
©
890 sapphire
 
26.02.13
16:28
(886) А типа вычислить имя нужного поля :)
Вотъ в чъм вопросъ.
891 bananan
 
26.02.13
16:49
(885_886) Не знаю, буду разбираться, перед этим искал, нашел и исправил баг в запросе, который писал месяц назад (без помощи форума)
892 bananan
 
26.02.13
16:50
(887-890) Вот из-за такого фулад ветки и закрывают
893 sapphire
 
26.02.13
16:54
(892)
аааа, от оно че, михалыч!
894 sapphire
 
26.02.13
16:55
(892) А вот в (890) указано де проблемно знаете ли,
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)))

получить прямым запросом...
895 sapphire
 
26.02.13
16:56
(892) Паче того, с арифметикой у вас зело проблемы, впрочем и мозг тоже отсутствует, как класс...
896 sapphire
 
26.02.13
16:56
(892) А ты модераторам пожалуйся :)
897 batman69
 
26.02.13
16:57
Да, то да потому 200 постов.
898 sapphire
 
26.02.13
16:57
(897) Щаз. Куда более :)
899 Злопчинский
 
26.02.13
16:58
Хорошие программисты 1С после смерти
попадают в рай. Плохие - продолжают
работать одинесником..
900 sapphire
 
26.02.13
16:58
Еще 100 постов можно :)
901 Злопчинский
 
26.02.13
16:58
900!
902 Злопчинский
 
26.02.13
16:58
тьфу, опоздун
903 Mikeware
 
26.02.13
16:58
(894) только с извратом - получить все цифровые, умножить на 1/0,ну и сложить...
904 sapphire
 
26.02.13
16:59
(903) По уму, пора предложить ему использовать временные таблицы... Но, знаете ли, сервер жалко...
905 sapphire
 
26.02.13
17:00
(903) ... а потом взять фсио и ... поделить!
906 sapphire
 
26.02.13
17:01
(903) Вот кста, ТС в решении отсутствующей цены зело разумом не радует...
907 sapphire
 
26.02.13
17:02
(903) При чем, ключевое чаво он не понел, так это то, що немае цены...
908 bananan
 
26.02.13
17:05
(885) в функции скрипта такой код:
           минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда
               //2/ВсеВыбрано = ?((ДоступАдмина+ДоступБуха)=2,0,ВсеВыбрано);
               ТЗ.НоваяСтрока();    
               ТЗ.Товар   = Конт.ТМЦ;                  
               ТЗ.Ошибка  = " не встановлена ціна категорії ";
т.е. Видимо минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок)); будет $ПоследнееЗначение.ВидыНалогов.Ставка...
ДА?
909 Mikeware
 
26.02.13
17:06
(906)(907)
Стоит негр на улице и пьёт молоко. Мимо проходит белый, останавливается перед ним, смотрит так пристально и говорит: - Не-е-е, не поможет...
©
910 sapphire
 
26.02.13
17:08
(908) Зачем тобi ся ставка далась?
911 sapphire
 
26.02.13
17:09
(909) Смотри какой упорный. А может это происки разведки сопредельной державы? На нас так сказать, свои программерские штучки тестируют? :)
912 sapphire
 
26.02.13
17:16
(908) Вот что тебе надо получить:
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
913 Mikeware
 
26.02.13
17:21
(905) а зачем делить-то? мы ж не отнимаем...
914 bananan
 
26.02.13
17:25
(912) Кажетсыя ты мне и сказал что Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1))); это вроде как ЦенаБезНДС??
915 Mikeware
 
26.02.13
17:26
а разве Число(Прав(кат.Идентификатор(),1)) может быть равно "БезНДС" ?
916 bananan
 
26.02.13
17:26
м вообще - я тото не пойму...
минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
Как минЦена может быть равной нулю??
917 sapphire
 
26.02.13
17:27
(914) И чо?
918 bananan
 
26.02.13
17:27
(915) тут, наксолько я понимаю берется цена без НДС для данного товара в гривне, ну или в рубле
919 bananan
 
26.02.13
17:28
(917)  ЦенаБезНДС в запросе уже выбирается:
|   ,   $ДокН.ЦенаБезНДС AS ЦенаБезНДС
920 sapphire
 
26.02.13
17:30
(918) Ну и? Ну и что дальше-то?
921 Mikeware
 
26.02.13
17:31
То, что эта цена без НДС - это понятно из дальнейших вычислений. а вот может ли  Число(Прав(кат.Идентификатор(),1)) быть равно "БезНДС" ?
922 sapphire
 
26.02.13
17:32
(919) А зачем, спрашивается, это надо?!
В (914) ОТКУДА ЦЕНА БЕРЕТСЯ, БЕСТОЛОЧЬ?!
923 sapphire
 
26.02.13
17:33
(921) Теоретически, да, но интересно, когда цена вообще не установлена. В этом, так сказать цель егойного очередного опуса...
924 sapphire
 
26.02.13
17:33
(921) А вот интересно, его работодатель мисту не читае?
925 Mikeware
 
26.02.13
17:37
(923) даже теоретически не может.
значения могут, конечно, совпадать - но явно не обязаны. иначе не было бы нужды во всей этой тряхомудии...
926 sapphire
 
26.02.13
17:38
(925) Мишь, ты об чем, собсно?
927 sapphire
 
26.02.13
17:39
(925) Егойное поделко:
минцена=Конт.ТМЦ.ПолучитьАтрибут("Цена"+Число(Прав(кат.Идентификатор(),1)));
           Если Метаданные.Справочник("ТМЦ").Реквизит("Цена"+Число(Прав(кат.Идентификатор(),1))).Периодический=1 Тогда
               минцена=минцена.Получить(Конт.ДатаДок);
           КонецЕсли;
           минцена=минцена*(1+Конт.ТМЦ.СтавкаНДС.Ставка.Получить(Конт.ДатаДок));
           Если минцена=0 Тогда

Ключевая строка - последняя
928 Mikeware
 
26.02.13
17:43
(927)
в военное время пи равняется четырем, а синус может достигать 3!!
может, у них ставка НДС -100% - обычное дело?
929 sapphire
 
26.02.13
17:44
(928) Ну таки лягко проверить :)
930 Mikeware
 
26.02.13
17:45
(926) о том, что Число(Прав(кат.Идентификатор(),1)) - это какая-то цифра от 0 до 9
соответсвенно, минцена - это одно из {Цена0...Цена9}
931 sapphire
 
26.02.13
17:47
(930)
аааа, от оно че, михалыч!

Дык, там ранее он публиковал кусок сей поделки где категория определяется каким-то атрибутом, то ли доставка, то ли еще чем-то....

Короче, тупо назвали так переменную и усе.
932 sapphire
 
26.02.13
17:50
(930) 9 UNION-ов или ТС выберет 9 left join?
933 Mikeware
 
26.02.13
17:53
(932) тупой case не спасет отца русской пиз... пардон, демократии?
934 sapphire
 
26.02.13
18:13
(933) Точно, и к каждому варианту кейса прилепить скалярный запрос :)
935 Mikeware
 
26.02.13
18:15
(934) ТКВ
936 bananan
 
27.02.13
12:52
Добрый день!
Вопрос: данный которые возвращает прямой запрос я вывожу в таблицу значений, можно ли всю информацию из таблицы значений сбросить через клипборд и есле можно то как?
937 Wobland
 
27.02.13
12:54
нет
938 Wobland
 
27.02.13
12:54
а на зачем?
939 bananan
 
27.02.13
12:56
(938) Чтобы с помощью Екселя сравнить результаты работы скрипта и запроса...
940 Mikeware
 
27.02.13
12:57
Ну и выведи ТЗ в таблицу. в чем проблемы?
941 Wobland
 
27.02.13
13:00
(940) а это уже вполне себе отдельная ветка. с тысячей вакантных постов
942 Mikeware
 
27.02.13
13:03
(941) да там кода строк 30 - в универсальном выводе любой ТЗ в таблицу. если без заголовков, то вообще 11 строк.
943 bananan
 
27.02.13
13:05
(942) У тебя что-то кроме желчи есть???
944 Wobland
 
27.02.13
13:06
ох уж мне ваши семёрки...
   ТабДок=Новый ТабличныйДокумент;
   Построитель=Новый ПостроительОтчета;
   Построитель.ИсточникДанных=Новый ОписаниеИсточникаДанных(ТЗ);
   Построитель.Вывести(ТабДок);
   ТабДок.Показать();
945 bananan
 
27.02.13
13:06
+(943) Сори предыдущее сообщение адресовалось ВобландУУУ
946 Wobland
 
27.02.13
13:07
(945) есть
947 bananan
 
27.02.13
13:07
(944) Новый ТабличныйДокумент - вот изит? Ты это на 1С 7.7. запустишь???
948 Wobland
 
27.02.13
13:08
(947) это восьмёрка
949 Privalov
 
27.02.13
13:18
(948)Зачем ты с ним так ? ))
950 Mikeware
 
27.02.13
13:31
(947) еще раз: _всего 11 строк!
причем самых-самых тупых. Инициализация таблицы, два вложенных цикла, две строки внутри, вывод...
по строке в минуту - и мог бы с 12:52 до 15:03 написать....
951 bananan
 
27.02.13
13:33
(950) Да сейчас буду писать
952 Wobland
 
27.02.13
13:33
(950) вот наверняка Присоединить там. а это уже второе измерение, не у всех мозг справляется (ничего личного, таких людей есть)
953 Privalov
 
27.02.13
13:35
Что будет когда ветка закончится?
954 Wobland
 
27.02.13
13:38
(953) всем участникам выдадут медаль "за долготерпение"
955 Mikeware
 
27.02.13
13:42
(954) орден сутулого. с завязкой на спине...
956 bananan
 
27.02.13
14:09
Что-то непойму. код:
ТбЗн = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
   ТбЗн.ВыбратьСтроки();
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица1");
   Таб.ВывестиСекцию("Шапка");
   Таб.Опции(0,0,Таб.ВысотаТаблицы());
   // цикл для вывода значений из ТЗ1 в Таблица1
   Пока(ТбЗн.ПолучитьСтроку=1) Цикл
Выдает ошибку
Пока(ТбЗн.ПолучитьСтроку=1) Цикл
{\\SERVER12\VPKTEST$\EXTFORMS\ЦІНАПОКАТЕГОРІЇ.ERT(250)}: Поле агрегатного объекта не обнаружено (ПолучитьСтроку)
Почему?
957 Mikeware
 
27.02.13
14:10
(956) и чего тут понимать? все по-русски написано...
958 Privalov
 
27.02.13
14:11
ПолучитьСтроку()
959 bananan
 
27.02.13
14:13
(957) Не знаешь, так и скажи..
ТбЗн.ВыбратьСтроки();
- полеагрегатного объкта есть и работает а
надо было так написать (опечатался я):
Пока(ТбЗн.ПолучитьСтроку()=1
960 viktor_vv
 
27.02.13
14:14
(956) Ты уж извини, но перед тем как постить вопрос, ты хотя бы немного подумать над ошибкой можешь, ну так, чисто для разнообразия.
961 Wobland
 
27.02.13
14:17
(960) у него в организме нет органа, которым думают
962 Wobland
 
27.02.13
14:18
пять лет человек с семёркой общается...
963 Mikeware
 
27.02.13
14:20
(962)
снял пожилой профессор проститутку...
залез на нее...
ока как подмахнула, он аж с нее свалился... встал, поправил очки на носу, и заявляет - "я не понял, тут кто кого иппет?"
©
зы. это не он с программой общается, а программа с ним... ибо программа поинтеллектуальнее будет...
964 Wobland
 
27.02.13
14:26
нашёл тут прекрасное:
Логическое И возвращает истину когда ВСЕ условия истинны?
965 Wobland
 
27.02.13
14:26
(964) это спросил человек, называющий себя программистом
966 Privalov
 
27.02.13
14:29
(959) Не разглядел? (958)
967 Wobland
 
27.02.13
14:31
добьём уже до тыщи, а?

А что нам по этому вопросу говорит Отладчик?

+(52) Предупреждая вопросы - F12, F9, F8.

(53) Спасибо. Сейчас попробую отладчик

(53) По F12 запустился Отладчик...
а дальше как его юзать?
968 Privalov
 
27.02.13
14:34
Ушел автор, сегодня не добьем. )))
969 Wobland
 
27.02.13
14:36
(968) сейчас он результат запроса научится видеть и вернётся обратно
970 Privalov
 
27.02.13
14:45
(969) Угу ))
971 bananan
 
27.02.13
15:20
Вобла-нд вышел на крыльцо да и изрыгнул...
972 bananan
 
27.02.13
17:28
еще один вопро возник, из прымого запроса данные передаются в таблицу значений, из таблицы значений в экранную таблицу...
Какое поле надо передать в таблицу, чтобы в ней можно былу кликнуть на данное поле и поле этого открылся бы документ..?
973 Mikeware
 
27.02.13
17:34
зачет!
974 Mikeware
 
27.02.13
17:35
(972) предай любое поле, однозначно идентифицирующее тот объект, который хочешь открыть...
975 bananan
 
27.02.13
17:45
Если передать номер документа - так сойдет?
976 Mikeware
 
27.02.13
17:50
(975) а номер однозначно идентифицирует данный объект?
в принципе, сожещь хоть строку передавать, типа "документ, созданый банананом в тихую лунную ночь" - только обрабатывай это сам.
977 bananan
 
27.02.13
17:53
(976) А что предать запрос простейший:
|SELECT
   |    DocNo
   |FROM _1SJourn as Жур (nolock)
   |    WHERE Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |    AND Жур.IdDocDef in ($ВидДокумента.РасходнаяНакладная, $ВидДокумента.РасходнаяНакладнаяН)
   |";    
Потому я и спрашивал о номере документа..
978 viktor_vv
 
27.02.13
17:56
Это задел на следующую тему до тысячи постов :).
|SELECT
   |    DocNo,
   |    Жур.IDDOC as [Док $Документ],
   |    Жур.IDDOCDEF as Док_вид

Передавай Док .
979 viktor_vv
 
27.02.13
17:58
И это, на всякий случай, а что в твоем понимании

"Какое поле надо передать в таблицу"
980 viktor_vv
 
27.02.13
17:59
(979)+ Имеется ввиду понимание тобой механизма расшифровки.
981 bananan
 
27.02.13
18:04
(978) Передал Док - все нормально показывает, но там чтобы его кликнуть можно было и открыть какие-то ньюансы в работае с таблицей?
982 Mikeware
 
27.02.13
18:05
(981) эти "ньюансы" описаны в локументации.
а примеры "ньюансов" - есть в типовой конфинурации.
983 bananan
 
27.02.13
18:07
(982) Спасибо за "исчерпивающий ответ"
984 viktor_vv
 
27.02.13
18:08
(983) В (980) есть ключевое слово "Расшифровка".
985 bananan
 
27.02.13
18:28
взял из типовой конфигурации такой код:
Таб.Опции(0,0,Таб.ВысотаТаблицы());
   
   Пока(ТЗ.ПолучитьСтроку()=1) Цикл
       Таб.ВывестиСекцию("Документ");
   КонецЦикла;
   Таб.ТолькоПросмотр(1);
   Таб.Защита(0);        ;
   Таб.ОбластьПечати(2);    
   Таб.Показать()
В ячейках таблицы :
идет документ (номер и дата в скобаках), но он не выбирвается...
986 Mikeware
 
27.02.13
18:36
Неправильный у тебя ник. надо было как baobab регистрится...
по песне высоцкого....
988 bananan
 
27.02.13
18:40
(986) Из-за таких вот советов и 1000 не хватит...
989 Sh1ko
 
27.02.13
18:42
Ветка - тренажер для телепатов?
990 Sh1ko
 
27.02.13
18:42
Я к вам!
991 bananan
 
27.02.13
18:43
(990) смотри (985) как сделать, чтобы документ открывался когда кликаешь на него?
992 Sh1ko
 
27.02.13
18:43
(985) Что открывался документ при двойном клике на ячейке, необходимо в свойствах ячейки, в поле расшифровка - написать что-то типа ТЗ.Док.ТекущийДокумент()
993 Mikeware
 
27.02.13
18:45
(990) телепат? вот и телепай!!! :-))
994 batman69
 
27.02.13
18:47
(991)Сработало? -  (992)
995 bananan
 
27.02.13
18:47
(992) в расшифровке так и написал: ТЗ.Док.ТекущийДокумент() а двойной щелчек не работает и курсор мыши не стал лупой....
996 batman69
 
27.02.13
18:48
(995) У тебя есть ТЗ.Док , а в ней ТекущийДокумент ?
997 batman69
 
27.02.13
18:49
Все, до 1000  и закончится сериал, жаль.
998 Sh1ko
 
27.02.13
18:50
А перед выводом таблицы таб.толькопросмотр(1) есть?
999 Sh1ko
 
27.02.13
18:50
а, вижу что есть
1000 Aswed
 
27.02.13
18:50
ТЫСЯЧА!!!!
ШТУКА!!!!!
1000!!!!
1001 bananan
 
27.02.13
18:50
(996) Тз - это таблица значений в ней только DjcNo, Док, Док_вид...
1002 Aswed
 
27.02.13
18:51
Ха!!!
Я самый крутой!!!
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.