|
|
|
1С и SQL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте все! Недавно перешли на с DBF базы на sql и возникли некоторые трудности с реализацией запросов, которые в DBF базе работали, а в sql выдает ошибку: SQL State: 42000 ... Line2: incorrect synyax rear ')' все вроде ясно нет ")", но где? привожу пример процедуры которая содержит проблемный запрос Процедура Заполнить() Перем Запрос; // запрос // проверяем заполнение дат Если ПустоеЗначение(НачалоПериода)=1 Тогда Предупреждение("Не выбрана дата начала анализа движений"); Возврат; КонецЕсли; Если ПустоеЗначение(КонецПериода)=1 Тогда Предупреждение("Не выбрана дата конца анализа движений"); Возврат; КонецЕсли; Если ПустоеЗначение(ДатаОстатков)=1 Тогда Предупреждение("Не выбрана дата формирования остатков"); Возврат; КонецЕсли; Если ПустоеЗначение(КвоПлановыхДней)=1 Тогда Предупреждение("Не указано количество плановых дней"); Возврат; КонецЕсли; Если ПустоеЗначение(Контрагент)=1 Тогда Предупреждение("Не выбран контрагент"); Возврат; КонецЕсли; ПроверитьКорректностьДат(); Если КоличествоСтрок() <> 0 Тогда Если Вопрос("Удалить строки?","Да+Нет") = "Да" Тогда УдалитьСтроки(); КонецЕсли; КонецЕсли; // Здесь формируется отчет, который использует регистры, критичные к // последовательности проведения документов // поэтому сравним установленные даты периода формируемого отчета с ГП глПроверкаАктуальностиОтчета(НачалоПериода,КонецПериода,Фирма,0); ВидТовараТовар = Перечисление.ВидыТМЦ.Товар; Если КонецПериода >= ПолучитьДатуТА() Тогда ТекстЗапроса = " |Период с НачалоПериода;"; Иначе ТекстЗапроса = " |Период с НачалоПериода по КонецПериода;"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Фрм = Регистр.Партии.Фирма; |Товар = Регистр.Партии.ТМЦ; |ВидТовара = Регистр.Партии.ТМЦ.ВидТМЦ; |ПриходныйДокумент = Регистр.Партии.ПрихДокумент; |ДокументДвижения = Регистр.Партии.ТекущийДокумент; |ОстатокТовара = Регистр.Партии.ОстатокТовара; |Стоимость = Регистр.Партии.Стоимость; |Поставщик = Регистр.Партии.Поставщик; |РегКодОперации = Регистр.Партии.КодОперации; |Группировка Товар; |Группировка ПриходныйДокумент Упорядочить По ПриходныйДокумент.ДатаДок,ПриходныйДокумент.ВремяДок; |Группировка ДокументДвижения Упорядочить По ДокументДвижения.ДатаДок,ДокументДвижения.ВремяДок; |Функция НачОстатокТовара = НачОст(ОстатокТовара); |Функция КонОстатокТовара = КонОст(ОстатокТовара); |Функция РасхОстатокТовара = Расход(ОстатокТовара); |Функция ПрихОстатокТовара = Приход(ОстатокТовара); |Функция НачСтоимостьТовара = НачОст(Стоимость); |Функция КонСтоимостьТовара = КонОст(Стоимость); |Функция РасхСтоимостьТовара = Расход(Стоимость); |Функция ПрихСтоимостьТовара = Приход(Стоимость); |Условие (Фрм=Фирма); |Условие (Поставщик=Контрагент); |Условие (ВидТовара=ВидТовараТовар); |Условие (РегКодОперации в СписокКодовОпераций); |"; Загол=""; СписокКодовОпераций = СоздатьОбъект("СписокЗначений"); СписокКодовОпераций.ДобавитьЗначение(Закупка); СписокКодовОпераций.ДобавитьЗначение(ВводОстатков); СписокКодовОпераций.ДобавитьЗначение(ВозвратОтПокупателя); СписокКодовОпераций.ДобавитьЗначение(Продажа); СписокКодовОпераций.ДобавитьЗначение(РозничнаяПродажа); СписокКодовОпераций.ДобавитьЗначение(ПеремещениеВРозницу); СписокКодовОпераций.ДобавитьЗначение(ПеремещениеИзРозницы); СписокКодовОпераций.ДобавитьЗначение(ПеремещениеМеждуСкладами); СписокКодовОпераций.ДобавитьЗначение(СписаниеИзлишков); СписокКодовОпераций.ДобавитьЗначение(ОприходованиеИзлишков); СписокКодовОперацийПродажа = СоздатьОбъект("СписокЗначений"); СписокКодовОперацийПродажа.ДобавитьЗначение(Продажа); СписокКодовОперацийПродажа.ДобавитьЗначение(РозничнаяПродажа); // выполняем запрос Запрос=СоздатьОбъект("Запрос"); Если Запрос.Выполнить(ТекстЗапроса)=0 тогда Предупреждение("Запрос по Партиям не выполнился!"); Возврат; КонецЕсли; СписокВошедшихВЗапросТов = СоздатьОбъект("СписокЗначений"); // цикл по товарам, отобранным запросом Запрос.ВНачалоВыборки(); Пока Запрос.Группировка("Товар")>0 Цикл Товар = Запрос.Товар; Если ПустоеЗначение(Товар) = 1 Тогда Продолжить; КонецЕсли; Если Запрос.ЭтоГруппа("Товар")=1 Тогда // это группа Продолжить; КонецЕсли; СписокВошедшихВЗапросТов.ДобавитьЗначение(Товар); КонецЦикла; ВремРегистры=СоздатьОбъект("Регистры"); РегОстатки=ВремРегистры.Остатки; Если (ДатаОстатков-1)<ПолучитьДатуТА() Тогда РегОстатки.УстановитьЗначениеФильтра("ТМЦ",СписокВошедшихВЗапросТов,2); РегОстатки.УстановитьЗначениеФильтра("Фирма",Фирма,1); РегОстатки.ВременныйРасчет(); ВремРегистры.РассчитатьРегистрыПО(ДатаОстатков-1); КонецЕсли; СписокГруппТоваров = СоздатьОбъект("СписокЗначений"); // цикл по товарам, отобранным запросом Запрос.ВНачалоВыборки(); Пока Запрос.Группировка("Товар")>0 Цикл Товар = Запрос.Товар; Если ПустоеЗначение(Товар) = 1 Тогда Продолжить; КонецЕсли; Если Запрос.ЭтоГруппа("Товар") = 1 Тогда // это группа Продолжить; КонецЕсли; КоличествоПроданногоЗаПериод = Запрос.РасхОстатокТовара; СтоимостьПроданногоЗаПериод = Запрос.РасхСтоимостьТовара; КоличествоДнейПродажи = 0; ОстатокТовара = РегОстатки.СводныйОстаток(Фирма,Товар,,"ОстатокТовара"); БылиДвиженияТовара = 0; ДатаПоследнегоДвижения = НачалоПериода-1; Остаток = Запрос.НачОстатокТовара; ДатаПервогоПрихода = 0; ДатаПоследнегоПрихода = 0; ДатаПоследнейОтгрузки = 0; Пока Запрос.Группировка("ПриходныйДокумент")>0 Цикл ДатаПервогоПрихода = ?(ДатаПервогоПрихода=0,Запрос.ПриходныйДокумент.ДатаДок,ДатаПервогоПрихода); ДатаПоследнегоПрихода = Запрос.ПриходныйДокумент.ДатаДок; ЦенаУчетная = ОпределитьЦену(Запрос); Пока Запрос.Группировка("ДокументДвижения")>0 Цикл Если СписокКодовОперацийПродажа.НайтиЗначение(Запрос.РегКодОперации) = 0 Тогда Продолжить; КонецЕсли; // документ движения остатка товара ДокументДвижения = Запрос.ДокументДвижения; Если ПустоеЗначение(ДокументДвижения) = 1 Тогда Продолжить; КонецЕсли; ДатаПоследнейОтгрузки = ?(ДатаПоследнейОтгрузки=0,Запрос.ДокументДвижения.ДатаДок,ДатаПоследнейОтгрузки); ДатаПоследнейОтгрузки = ?(Запрос.ДокументДвижения.ДатаДок>ДатаПоследнейОтгрузки,Запрос.ДокументДвижения.ДатаДок,ДатаПоследнейОтгрузки); КонецЦикла; КонецЦикла; Если ДатаПоследнейОтгрузки = 0 Тогда КоличествоДнейПродажи = 0; глКомментарий(Шаблон("Для товара [Товар] не определено количество дней продажи."),1); ИначеЕсли ДатаПоследнейОтгрузки = 0 Тогда КоличествоДнейПродажи = 0; глКомментарий(Шаблон("Для товара [Товар] не определено количество дней продажи."),1); Иначе КоличествоДнейПродажи = ДатаПоследнейОтгрузки - ДатаПервогоПрихода + 1; КонецЕсли; // рассчитываем скорость продаж и необходимый объем закупки СкоростьПродажи = 0; Если КоличествоДнейПродажи>0 Тогда СкоростьПродажи = КоличествоПроданногоЗаПериод/(КоличествоДнейПродажи+1); КонецЕсли; Если УчитыватьОстаток=0 Тогда НеобходимыйОбъемЗакупки = СкоростьПродажи*КвоПлановыхДней; Иначе НеобходимыйОбъемЗакупки = СкоростьПродажи*КвоПлановыхДней - ОстатокТовара; КонецЕсли; Если НеобходимыйОбъемЗакупки < 0 Тогда Продолжить; КонецЕсли; НоваяСтрока(); ТМЦ = Товар; Ед = Товар.ЕдиницаПоУмолчанию; Коэффициент = Коэффициент; ЦенаБезНДС = ЦенаУчетная; ВидНДС = Товар.СтавкаНДС; ПроцНДС = глПроцентНДС(ВидНДС,ДатаДок); ЦенаСНДС = ЦенаБезНДС*(100+ПроцНДС)/100; ОстатокКво = ОстатокТовара; ОстатокСуммаБезНДС = ОстатокТовара * ЦенаБезНДС; ОстатокСуммаСНДС = ОстатокТовара * ЦенаСНДС; Прогноз = НеобходимыйОбъемЗакупки; ДатаПП = ДатаПоследнегоПрихода; КонецЦикла; КонецПроцедуры // Сформировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 12:51 |
|
||
|
1С и SQL
|
|||
|---|---|---|---|
|
#18+
да забыл 1С v 7.70.021 SQL 2000 + SP3a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2004, 12:56 |
|
||
|
1С и SQL
|
|||
|---|---|---|---|
|
#18+
Неплохо бы сначала локализовать строку процедуры в которой возникает ошибка при выполнении. Может быть и не в запросе дело. Если из конфигуратора запустить предприятие по ф11, а потом выполнить процедуру, то на какую строчку ругнется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2004, 01:11 |
|
||
|
|

start [/forum/topic.php?fid=56&fpage=46&tid=2016825]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 266ms |
| total: | 387ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...