Синтаксическая ошибка левое соединение

Im having issues trying to figure out this syntax error. Heres the SQL query:

SQL QUERY

SELECT oh.date_modified, oh.physicianNote, os.name AS status
FROM order oh 
LEFT JOIN order_status os ON oh.order_status_id = os.order_status_id
WHERE oh.order_id = '118' AND os.language_id = '1'
ORDER BY oh.date_added ASC LIMIT 0,10

SQL ERROR

1064 — You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ‘order oh LEFT JOIN order_status os ON oh.order_status_id =
os.order_status_i’ at line 2

Not really sure whats wrong with it.

Guffa's user avatar

Guffa

684k108 gold badges733 silver badges1000 bronze badges

asked Sep 14, 2012 at 15:38

Daniel Adarve's user avatar

ORDER is a reserved word. Quote it in backticks:

SELECT   oh.date_modified, oh.physicianNote, os.name AS status
FROM     `order` oh LEFT JOIN order_status os USING (order_status_id)
WHERE    oh.order_id = '118' AND os.language_id = '1'
ORDER BY oh.date_added
LIMIT    0,10

answered Sep 14, 2012 at 15:39

eggyal's user avatar

eggyaleggyal

122k18 gold badges209 silver badges236 bronze badges

«ORDER» is reserved word. This is error. Use the word order Quote in backticks

answered Sep 14, 2012 at 15:40

Jhonathan's user avatar

JhonathanJhonathan

1,6112 gold badges13 silver badges24 bronze badges

   RamzesEs

29.04.13 — 12:00

Я только начал разбираться в 8-ке. Так что не бейте сильно.

В обработке подбора, при подборе по справочнику, необходимо добавить колонку с ценами рядом с остатками. Так вот хочу организовать это в том же запросе где и остатки достаются. добавил необходимого кода но он что то ругается, выдает ошибку :

{(72, 1)}: Синтаксическая ошибка «ЛЕВОЕ»

<<?>>ЛЕВОЕ СОЕДИНЕНИЕ

подскажите в чем дело?

Вот код:

ТекстЗапроса = »

   |ВЫБРАТЬ РАЗРЕШЕННЫЕ

   |    ТоварыНаСкладах.Номенклатура                                КАК Номенклатура,

   // ++ Роман

   |   ЦеныНоменклатурыСрезПоследних.Цена,

   // ++

   |    СУММА(  ЕСТЬNULL(ТоварыНаСкладах.КоличествоОстаток, 0.00)

   |          — ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0.00)

   |          — ЕСТЬNULL(ТоварыКПередачеСоСкладов.КоличествоОстаток, 0.00)

   |          » + ?(СтруктураЗаказов = Неопределено,»»,»+ ЕСТЬNULL(ТоварыВРезерве.КоличествоОстаток, 0.00)») + »

   |    )                                                           КАК КоличествоСвободныйОстаток,

   |    СУММА(ЕСТЬNULL(ОстаткиОрганизации.КоличествоОстаток, 0.00)) КАК КоличествоОстатокОрганизации

   |ИЗ

   |    (ВЫБРАТЬ

   |        ОбщиеОстатки.Номенклатура               КАК Номенклатура,

   |        ОбщиеОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

   |        ОбщиеОстатки.Качество                   КАК Качество,

   |        СУММА(ОбщиеОстатки.КоличествоОстаток)   КАК КоличествоОстаток

   |    ИЗ

   |        («;

   ТекстЗапроса = ТекстЗапроса + ПолучитьСтрокуЗапросаСвободныеОстатки(Новый Структура(«ТоварыНаСкладах,ТоварыВРознице,ТоварыОрганизаций,ТоварыВНТТ»), ТекстУсловияКачества, Истина);

   ТекстЗапроса = ТекстЗапроса + »

   |        ) КАК ОбщиеОстатки

   |    СГРУППИРОВАТЬ ПО

   |        ОбщиеОстатки.Номенклатура, ОбщиеОстатки.ХарактеристикаНоменклатуры, ОбщиеОстатки.Качество

   |    ) КАК ТоварыНаСкладах

   |ЛЕВОЕ СОЕДИНЕНИЕ

   |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, » + мУсловиеНоменклатураСклад + «) КАК ТоварыВРезервеНаСкладах

   |ПО

   |    ТоварыВРезервеНаСкладах.Номенклатура = ТоварыНаСкладах.Номенклатура

   |    И ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

   |    И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)

   // ++ Роман

   |ЛЕВОЕ СОЕДИНЕНИЕ

   |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

   |ПО

   |    ЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладах.Номенклатура.Ссылка

   |ГДЕ

   |    (ЦеныНоменклатурыСрезПоследних.Номенклатура.ЭтоГруппа = ЛОЖЬ

   |    И ЦеныНоменклатурыСрезПоследних.ТипЦен = ТипЦен)

   // ++

   |»;

   Галахад

1 — 29.04.13 — 12:06

И как то читать?

Поставь точку останова после формирования текста запроса.

И выложи нормальный запрос.

   Godofsin

2 — 29.04.13 — 12:06

Конструктором запроса пользуйся

   RamzesEs

3 — 29.04.13 — 12:11

Запрос = Новый Запрос;

   Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();

   ДобавитьВременнуюТаблицу(Запрос);

   //Если УчитыватьЗаказ[«СтруктураЗаказов»] равен Неопределено значит в запросе не нужно считать по заказам в резерве

   //иначе нужно считать заказы в резерве

   УчитыватьЗаказ = ПолучитьСтруктуруЗаказовВРезерве();

   ДокументРезерва = Неопределено;

   ВидРегистраПлюсСвободныйОстаток = Неопределено;

   УчитыватьЗаказ.Свойство(«ДокументРезерва»                , ДокументРезерва);

   УчитыватьЗаказ.Свойство(«ВидРегистраПлюсСвободныйОстаток», ВидРегистраПлюсСвободныйОстаток);

   СтруктураЗаказов = УчитыватьЗаказ[«СтруктураЗаказов»];

   ЗаказИзШапки = УчитыватьЗаказ[«ЗаказИзШапки»];

   Запрос.УстановитьПараметр(«ДокументРезерва»        , ДокументРезерва);

   Запрос.УстановитьПараметр(«Дата»                   , КонецДня(ДатаРасчетов));

   Запрос.УстановитьПараметр(«МассивНоменклатуры»     , МассивНоменклатуры);

   Запрос.УстановитьПараметр(«Склад»                  , Склад);

   Запрос.УстановитьПараметр(«Организация»            , Организация);

   Запрос.УстановитьПараметр(«ТипЦен»                   , СтруктураИсходныхПараметров.ТипЦен);

   Запрос.УстановитьПараметр(«РазворачиватьДоКачества», РазворачиватьДоКачества);

   СформироватьОтборыДляЗапросов(Новый Структура(«Организация, Склад, ДатаЗапроса, МассивНоменклатуры», Организация, Склад, ДатаРасчетов, МассивНоменклатуры), Истина);

   СтруктураЗапросаОстаткиНоменклатурыСХарактеристиками(ДатаРасчетов, СтруктураИсходныхПараметров, Новый Структура(«ПоказыватьОстатки,ПоказыватьКолонки», Истина, ЭлементыФормы.ПоказыватьОстатки.Значение), РазворачиватьДоКачества);

   ТекстУсловияКачества = » И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ»;

   ТекстЗапроса = »

   |ВЫБРАТЬ РАЗРЕШЕННЫЕ

   |    ТоварыНаСкладах.Номенклатура                                КАК Номенклатура,

   // ++ Роман

   |   ЦеныНоменклатурыСрезПоследних.Цена,

   // ++

   |    СУММА(  ЕСТЬNULL(ТоварыНаСкладах.КоличествоОстаток, 0.00)

   |          — ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0.00)

   |          — ЕСТЬNULL(ТоварыКПередачеСоСкладов.КоличествоОстаток, 0.00)

   |          » + ?(СтруктураЗаказов = Неопределено,»»,»+ ЕСТЬNULL(ТоварыВРезерве.КоличествоОстаток, 0.00)») + »

   |    )                                                           КАК КоличествоСвободныйОстаток,

   |    СУММА(ЕСТЬNULL(ОстаткиОрганизации.КоличествоОстаток, 0.00)) КАК КоличествоОстатокОрганизации

   |ИЗ

   |    (ВЫБРАТЬ

   |        ОбщиеОстатки.Номенклатура               КАК Номенклатура,

   |        ОбщиеОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

   |        ОбщиеОстатки.Качество                   КАК Качество,

   |        СУММА(ОбщиеОстатки.КоличествоОстаток)   КАК КоличествоОстаток

   |    ИЗ

   |        («;

   ТекстЗапроса = ТекстЗапроса + ПолучитьСтрокуЗапросаСвободныеОстатки(Новый Структура(«ТоварыНаСкладах,ТоварыВРознице,ТоварыОрганизаций,ТоварыВНТТ»), ТекстУсловияКачества, Истина);

   ТекстЗапроса = ТекстЗапроса + »

   |        ) КАК ОбщиеОстатки

   |    СГРУППИРОВАТЬ ПО

   |        ОбщиеОстатки.Номенклатура, ОбщиеОстатки.ХарактеристикаНоменклатуры, ОбщиеОстатки.Качество

   |    ) КАК ТоварыНаСкладах

   |ЛЕВОЕ СОЕДИНЕНИЕ

   |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, » + мУсловиеНоменклатураСклад + «) КАК ТоварыВРезервеНаСкладах

   |ПО

   |    ТоварыВРезервеНаСкладах.Номенклатура = ТоварыНаСкладах.Номенклатура

   |    И ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

   |    И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)

   // ++ Роман

   |ЛЕВОЕ СОЕДИНЕНИЕ

   |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

   |ПО

   |    ЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладах.Номенклатура.Ссылка

   |ГДЕ

   |    ЦеныНоменклатурыСрезПоследних.Номенклатура.ЭтоГруппа = ЛОЖЬ

   |    И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен

   // ++

   |»;

   Если НЕ СтруктураЗаказов = Неопределено Тогда

       Если ЗаказИзШапки Тогда

           Если ВидРегистраПлюсСвободныйОстаток = «ТоварыВРезервеНаСкладах» Тогда

               ТекстЗапроса = ТекстЗапроса +»

               |ЛЕВОЕ СОЕДИНЕНИЕ

               |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, » + мУсловиеНоменклатураСклад + » И ДокументРезерва = &ДокументРезерва) КАК ТоварыВРезерве

               |ПО

               |    ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура

               |    И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

               |    И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)

               |»;

           ИначеЕсли ВидРегистраПлюсСвободныйОстаток = «ТоварыКПередачеСоСкладов» Тогда

               ТекстЗапроса = ТекстЗапроса +»

               |ЛЕВОЕ СОЕДИНЕНИЕ

               |    РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&Дата, » + мУсловиеНоменклатураСклад + » И ДокументПередачи = &ДокументРезерва) КАК ТоварыВРезерве

               |ПО ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура

               |    И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

               |    И ТоварыВРезерве.Качество = ТоварыНаСкладах.Качество

               |»;

           КонецЕсли;

       Иначе

           //временная таблица товаров в резерве

           Запрос.Текст = »

           |ВЫБРАТЬ РАЗРЕШЕННЫЕ

           |    ТоварыВРезервеНаСкладах.Номенклатура               КАК Номенклатура,

           |    ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

           |    СУММА(ТоварыВРезервеНаСкладах.КоличествоОстаток)   КАК КоличествоОстаток

           |ПОМЕСТИТЬ ТоварыВРезерве

           |ИЗ

           |    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, » + мУсловиеНоменклатураСклад + «) КАК ТоварыВРезервеНаСкладах

           |

           |ЛЕВОЕ СОЕДИНЕНИЕ

           |    ЗаказыТаблицаНоменклатура КАК ЗаказаноПоДокументуЗаказ

           |ПО

           |    ЗаказаноПоДокументуЗаказ.Номенклатура = ТоварыВРезервеНаСкладах.Номенклатура

           |    И ЗаказаноПоДокументуЗаказ.ХарактеристикаНоменклатуры = ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры

           |    И ЗаказаноПоДокументуЗаказ.ДокументРезерва = ТоварыВРезервеНаСкладах.ДокументРезерва

           |ГДЕ

           |    НЕ ЗаказаноПоДокументуЗаказ.ДокументРезерва ЕСТЬ NULL

           |    ИЛИ ТоварыВРезервеНаСкладах.ДокументРезерва = &ДокументРезерва

           |СГРУППИРОВАТЬ ПО ТоварыВРезервеНаСкладах.Номенклатура, ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры

           |ИНДЕКСИРОВАТЬ ПО ТоварыВРезервеНаСкладах.Номенклатура, ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры

           |»;

           Запрос.Выполнить();

           ТекстЗапроса = ТекстЗапроса +»

           |ЛЕВОЕ СОЕДИНЕНИЕ

           |    ТоварыВРезерве КАК ТоварыВРезерве

           |ПО

           |    ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура

           |    И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

           |    И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)

           |»;

       КонецЕсли;

   КонецЕсли;

   ТекстЗапроса = ТекстЗапроса +»

   |

   |ЛЕВОЕ СОЕДИНЕНИЕ

   |    РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&Дата, » + мУсловиеНоменклатураСклад + ТекстУсловияКачества + «) КАК ТоварыКПередачеСоСкладов

   |ПО

   |    ТоварыКПередачеСоСкладов.Номенклатура = ТоварыНаСкладах.Номенклатура

   |    И ТоварыКПередачеСоСкладов.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

   |    И ТоварыКПередачеСоСкладов.Качество = ТоварыНаСкладах.Качество

   |    

   |ЛЕВОЕ СОЕДИНЕНИЕ

   |    РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата, » + мУсловиеНоменклатураСкладОрганизация + ТекстУсловияКачества + «) КАК ОстаткиОрганизации

   |ПО

   |    ОстаткиОрганизации.Номенклатура = ТоварыНаСкладах.Номенклатура

   |    И ОстаткиОрганизации.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

   |    И ОстаткиОрганизации.Качество = ТоварыНаСкладах.Качество

   |

   |СГРУППИРОВАТЬ ПО

   |    ТоварыНаСкладах.Номенклатура

   |»;

   Запрос.Текст = ТекстЗапроса;

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

   Godofsin

4 — 29.04.13 — 12:13

(3) это что?

   Wobland

5 — 29.04.13 — 12:14

(4) это автор предлагает нам самим сделать (1)

   Godofsin

6 — 29.04.13 — 12:15

(5) Предложение отклоняется =)

   RamzesEs

7 — 29.04.13 — 12:16

ну это весь текст запроса в обработке с моими дополнениями. Так вот на мои дополнения и идет ошибка. А что за синтаксическая ошибка непонятно.

   Wobland

8 — 29.04.13 — 12:17

Поставь точку останова после формирования текста запроса. вот на этой строке: «Запрос.Текст = ТекстЗапроса;»

И выложи нормальный запрос. то есть, содержимое переменной ТекстЗапроса.

а лучше предварительно посмотри на него внимательными глазами и расскажи впечатления

   RamzesEs

9 — 29.04.13 — 12:40

че то не впечатлил :(

даже не знаю что и сказать :(

Вроде мой кусок выглядит нормально

»

ВЫБРАТЬ РАЗРЕШЕННЫЕ

   ТоварыНаСкладах.Номенклатура                                КАК Номенклатура,

  ЦеныНоменклатурыСрезПоследних.Цена,

   СУММА(  ЕСТЬNULL(ТоварыНаСкладах.КоличествоОстаток, 0.00)

         — ЕСТЬNULL(ТоварыВРезервеНаСкладах.КоличествоОстаток, 0.00)

         — ЕСТЬNULL(ТоварыКПередачеСоСкладов.КоличествоОстаток, 0.00)

         + ЕСТЬNULL(ТоварыВРезерве.КоличествоОстаток, 0.00)

   )                                                           КАК КоличествоСвободныйОстаток,

   СУММА(ЕСТЬNULL(ОстаткиОрганизации.КоличествоОстаток, 0.00)) КАК КоличествоОстатокОрганизации

ИЗ

   (ВЫБРАТЬ

       ОбщиеОстатки.Номенклатура               КАК Номенклатура,

       ОбщиеОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

       ОбщиеОстатки.Качество                   КАК Качество,

       СУММА(ОбщиеОстатки.КоличествоОстаток)   КАК КоличествоОстаток

   ИЗ

       (

ВЫБРАТЬ

   ТаблицаОстатков.Номенклатура               КАК Номенклатура,

   ТаблицаОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

   ТаблицаОстатков.Качество КАК Качество,

   ТаблицаОстатков.КоличествоОстаток КАК КоличествоОстаток

ИЗ

   РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ТаблицаОстатков

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

   ТаблицаОстатков.Номенклатура               КАК Номенклатура,

   ТаблицаОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

   ТаблицаОстатков.Качество КАК Качество,

   ТаблицаОстатков.КоличествоОстаток КАК КоличествоОстаток

ИЗ

   РегистрНакопления.ТоварыВРознице.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ТаблицаОстатков

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

   ТаблицаОстатков.Номенклатура               КАК Номенклатура,

   ТаблицаОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

   ТаблицаОстатков.Качество КАК Качество,

   0 КАК КоличествоОстаток

ИЗ

   РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ТаблицаОстатков

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

   ТаблицаОстатков.Номенклатура               КАК Номенклатура,

   ТаблицаОстатков.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,

   ЗНАЧЕНИЕ(Справочник.Качество.Новый) КАК Качество,

   ТаблицаОстатков.КоличествоОстаток КАК КоличествоОстаток

ИЗ

   РегистрНакопления.ТоварыВНТТ.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад) ) КАК ТаблицаОстатков

       ) КАК ОбщиеОстатки

   СГРУППИРОВАТЬ ПО

       ОбщиеОстатки.Номенклатура, ОбщиеОстатки.ХарактеристикаНоменклатуры, ОбщиеОстатки.Качество

   ) КАК ТоварыНаСкладах

ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад) ) КАК ТоварыВРезервеНаСкладах

ПО

   ТоварыВРезервеНаСкладах.Номенклатура = ТоварыНаСкладах.Номенклатура

   И ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

   И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)

ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

ПО

   ЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладах.Номенклатура.Ссылка

ГДЕ

   ЦеныНоменклатурыСрезПоследних.Номенклатура.ЭтоГруппа = ЛОЖЬ

   И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен

ЛЕВОЕ СОЕДИНЕНИЕ

   ТоварыВРезерве КАК ТоварыВРезерве

ПО

   ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура

   И ТоварыВРезерве.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

   И ТоварыНаСкладах.Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый)

ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И Склад В (&Склад)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ТоварыКПередачеСоСкладов

ПО

   ТоварыКПередачеСоСкладов.Номенклатура = ТоварыНаСкладах.Номенклатура

   И ТоварыКПередачеСоСкладов.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

   И ТоварыКПередачеСоСкладов.Качество = ТоварыНаСкладах.Качество

   
ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрНакопления.ТоварыОрганизаций.Остатки(&Дата,  Номенклатура В (&МассивНоменклатуры)  И ВЫБОР КОГДА &РазворачиватьДоКачества ТОГДА ИСТИНА ИНАЧЕ Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) КОНЕЦ) КАК ОстаткиОрганизации

ПО

   ОстаткиОрганизации.Номенклатура = ТоварыНаСкладах.Номенклатура

   И ОстаткиОрганизации.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры

   И ОстаткиОрганизации.Качество = ТоварыНаСкладах.Качество

СГРУППИРОВАТЬ ПО

   ТоварыНаСкладах.Номенклатура

«

   Wobland

10 — 29.04.13 — 12:42

и по-прежнему синтакчисеская ошибка на левое? в какой строке?

   RamzesEs

11 — 29.04.13 — 12:45

{(72, 1)}: Синтаксическая ошибка «ЛЕВОЕ»

<<?>>ЛЕВОЕ СОЕДИНЕНИЕ

   RamzesEs

12 — 29.04.13 — 12:51

такое ощущение что ему то то после моей выборке по регистру какого то символа не хватает вот в этом месте

ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних

ПО

   ЦеныНоменклатурыСрезПоследних.Номенклатура = ТоварыНаСкладах.Номенклатура.Ссылка

ГДЕ

   ЦеныНоменклатурыСрезПоследних.Номенклатура.ЭтоГруппа = ЛОЖЬ

   И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен

???????????????????????????????????????????????

ЛЕВОЕ СОЕДИНЕНИЕ

   ТоварыВРезерве КАК ТоварыВРезерве

ПО

   ТоварыВРезерве.Номенклатура = ТоварыНаСкладах.Номенклатура

   Wobland

13 — 29.04.13 — 12:55

секция ГДЕ делается после всех соединений

   RamzesEs

14 — 29.04.13 — 13:00

вот этого я не знал спасибо :) буду дальше ковырять

  

Godofsin

15 — 29.04.13 — 13:02

(14) ЖКК надо было читать

0 / 0 / 0

Регистрация: 24.03.2018

Сообщений: 2

1

24.03.2018, 18:19. Показов 10533. Ответов 3


Студворк — интернет-сервис помощи студентам

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{Документ.ОказаниеУслуги.МодульОбъекта(42)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос.Выполнить();
по причине:
{(19, 4)}: Синтаксическая ошибка «ОказаниеУслугиПереченьНоменклатуры.НаборСвойств»
<<?>>ОказаниеУслугиПереченьНоменклатуры.НаборСвойств

P.S Я по книги делаю, Радченко, 100 раз все проверил, все сделал как там.
Изначально запрос строился в конструкторе, но после добавление Плана видов характеристик, в документ Оказание услуг добавили поле НаборСвойств и запрос дополнил в ручную этой строкой!

Объясните поподробнее пожалуйста, а то я в 1С пару дней!

код

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
Процедура ОбработкаПроведения(Отказ, Режим)
    
    
    Движения.ОстаткиМатериалов.Записывать = Истина;
    Движения.СтоимостьМатериалов.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    
    // Создать менеджер временных таблиц
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    
    #Область НоменклатураДокумента
 
    Запрос = Новый Запрос;
    
     // Укажем, какой менеджер временных таблиц использует этот запрос
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
 
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
        |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры 
        |                                                     КАК ВидНоменклатуры,
        |   ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,
        |   СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) 
        |                                       КАК КоличествоВДокументе,
        |   СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) 
        |                                    КАК СуммаВДокументе
        |ПОМЕСТИТЬ НоменклатураДокумента
        |ИЗ
        |   Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
        |ГДЕ
        |   ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
        |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры
        |   ОказаниеУслугиПереченьНоменклатуры.НаборСвойств ";
 
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
 
    РезультатЗапроса = Запрос.Выполнить();
    #КонецОбласти
    
    
     #Область ДвиженияДокумента
    
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос2.Текст = "ВЫБРАТЬ
                    |    НоменклатураДокумента.Номенклатура,
                    |    НоменклатураДокумента.ВидНоменклатуры,
                    |    НоменклатураДокумента.НаборСвойств,
                    |    НоменклатураДокумента.КоличествоВДокументе,
                    |    НоменклатураДокумента.СуммаВДокументе,
                    |   ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
                    |   ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество
                    |ИЗ
                    |    НоменклатураДокумента КАК  НоменклатураДокумента
                    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
                    |               ,
                    |               Материал В
                    |                   (ВЫБРАТЬ
                    |                       НоменклатураДокумента.Номенклатура
                    |                   ИЗ
                    |                       НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки
                    |       ПО  НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал
                    |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(
                    |               ,
                    |               Материал В
                    |                   (ВЫБРАТЬ
                    |                       НоменклатураДокумента.Номенклатура
                    |                   ИЗ
                    |                       НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки
                    |       ПО  НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал  ";
                    
                    
        // Установим необходимость блокировки данных в регистрах СтоимостьМатериалов
         // и ОстаткиМатериалов
      Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;
      Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;
                    
    // Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе
    Движения.СтоимостьМатериалов.Записать();
    Движения.ОстаткиМатериалов.Записать();
                    
    РезультатЗапроса = Запрос2.Выполнить();
    
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
 
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
              СтоимостьМатериала = 0;
         Иначе
              СтоимостьМатериала =
              ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;
        КонецЕсли;
        
        
        
        Если ВыборкаДетальныеЗаписи.ВидНоменклатуры =
            Перечисления.ВидыНоменклатуры.Материал Тогда 
            // регистр ОстаткиМатериалов Расход
        Движение = Движения.ОстаткиМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;
        Движение.Склад = Склад;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
        // регистр СтоимостьМатериалов Расход
        Движение = Движения.СтоимостьМатериалов.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * СтоимостьМатериала;
                                                                  
                                                                   
    КонецЕсли;
    
    // Регистр Продажи
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
        Движение.Клиент = Клиент;
        Движение.Мастер = Мастер;
        Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
        Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
        Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;
 
    
 
    КонецЦикла;
    Движения.Записать();
    #КонецОбласти
    
    
    #Область КонтрольОстатков
           Если Режим = РежимПроведенияДокумента.Оперативный Тогда
           // Проверить отрицательные остатки
           Запрос3 = Новый Запрос;
           Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
           Запрос3.Текст = "ВЫБРАТЬ
                           |    ОстаткиМатериаловОстатки.Материал,
                           |    ОстаткиМатериаловОстатки.НаборСвойств,
                           |    ОстаткиМатериаловОстатки.КоличествоОстаток
                           |ИЗ
                           |    РегистрНакопления.ОстаткиМатериалов.Остатки(,(Материал, НаборСвойств)В
                           |                    (ВЫБРАТЬ
                           |                        НоменклатураДокумента.Номенклатура
                           |                        НоменклатураДокумента.НаборСвойств
                           |                    ИЗ
                           |                        НоменклатураДокумента)
                           |                И Склад = &Склад) КАК ОстаткиМатериаловОстатки
                           |ГДЕ
                           |    ОстаткиМатериаловОстатки.КоличествоОстаток < 0 ";
                           
           Запрос3.УстановитьПараметр("Склад", Склад);
           РезультатЗапроса = Запрос3.Выполнить();
           ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
           
              Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
              Сообщение = Новый СообщениеПользователю();
              Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +
                       " единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """" + 
                       " из набора свойств """ + ВыборкаДетальныеЗаписи.НаборСвойств + """";
               Сообщение.Сообщить();
                    Отказ = Истина;
КонецЦикла;
 
            КонецЕсли;
 
#КонецОбласти   
КонецПроцедуры

Миниатюры

Синтаксическая ошибка в запросе 1С
 



0



Я
   егаис

28.10.15 — 09:36

У некоторых пользователей вдруг стала возникать ошибка при записи операции.

«(39,27) Синтаксическая ошибка «:»

Неверное имя текущей таблицы <<?>> РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет»

Ошибок в модулях нет.

База на скуле, с /ClearCache запускал

Всю базу перерыл, не нашел бага, куда копать?

   mikecool

1 — 28.10.15 — 09:37

копать в сторону  РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет и до обеда, потом бросить и покушать

   егаис

2 — 28.10.15 — 09:43

а что в той стороне? ни модуля объекта, ни модуля менеджера, права нужные есть

Повторюсь, не для всех пользователей эта ошибка

   Cyberhawk

3 — 28.10.15 — 09:45

Полный текст ошибки в студию

   егаис

4 — 28.10.15 — 09:47

это весь текст

   Cyberhawk

5 — 28.10.15 — 09:48

Тогда показывай на картинке этот текст

   mikecool

6 — 28.10.15 — 09:48

(2) тебе вроде русским языком написано, что нет такой таблицы в качестве текущей

и кеш надо чистить выгнав пользователей и остановив сервер 1с, ибо слиркеш не всегда срабатывает однозначно

   егаис

7 — 28.10.15 — 09:54

(5) http://savepic.su/6345988.jpg

(6) «и кеш надо чистить остановив сервер 1с» o_O

   Cyberhawk

8 — 28.10.15 — 09:55

(6) «слиркеш» это что?

   Cyberhawk

9 — 28.10.15 — 09:55

(7) включи разрешение отладки и через появившуюся кнопку «Подробно» скопируй текст ошибки

   Любопытная

10 — 28.10.15 — 09:56

А конфигурация вообще типовая? Найди эту строку в конфигураторе и посмотри на нее. Такое ощущение, что там реально просто синтаксическая ошибка в коде

   Господин ПЖ

11 — 28.10.15 — 09:57

текущая таблица? rls глючит?

   егаис

12 — 28.10.15 — 10:00

(9) пока не могу сервер тормознуть

(10) добавил новый РС, после этого полезла эта ошибка. Под полными правами все работает

(11) так в операции РС вообще не указываю, только РБ. По сути записываю пустую операцию, ошибка проявляется

   Cyberhawk

13 — 28.10.15 — 10:01

(12) Я ничего про сервер не говорил, разрешение отладки включается в настройках пользовательского сеанса

   егаис

14 — 28.10.15 — 10:03

Все, всем спасибо, вопрос решился

   егаис

15 — 28.10.15 — 10:04

Права на вновь созданный регистр, но сц уко, почему ругается на РС в сабже ,я не понял

   егаис

16 — 28.10.15 — 10:04

Ошибка при выполнении обработчика — ‘ПередЗаписью’

по причине:

{Документ.ОперацияБух.МодульОбъекта(26)}: Ошибка при вызове метода контекста (Прочитать)
            Движение.Прочитать();

по причине:

Ошибка в ограничении доступа к данным.

объект: 'РегистрСведений.ПараметрыАмортизацииСпецодежды', поле: 'Регистратор'; право: 'Чтение'
{(39, 27)}: Синтаксическая ошибка ":"
НеверноеИмяТекущейТаблицы<<?>>: "РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет"
по причине:
{(39, 27)}: Синтаксическая ошибка ":"
НеверноеИмяТекущейТаблицы<<?>>: "РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет"
  

егаис

17 — 28.10.15 — 10:04

меняю логику начисления амортизации по спецодежде, способы расчета привязываю через РС + документы изменений

Спасибо еще раз

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Доброго времени суток ,подскажите пожалуйста ,если не затруднит,что не так делаю…    ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаВРознице ИЗ я только учусь …и важно не столько поправка кода сколько объяснение отчего возникает ошибка и как это поправить= избежать в последующем. спасибо)

делай конструктором: ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТипЦен) КАК ЦеныНоменклатурыСрезПоследних

(&ТипЦен) -не там и не так.

вот это лишнее, только увиливает время работы:

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,ТипЦен=&ТипЦен) КАК ЦеныНоменклатурыСрезПоследних

ЦеныНоменклатурыСрезПоследних.Цена В выборке нет ЦеныНоменклатурыСрезПоследних.Цена, а в Сгруппировать есть. Может, в этом дело?

к пардон, не туда посмотрела, вопрос снят

к текст ошибки: {Форма.Форма}: Ошибка при вызове метода контекста (Выполнить): {(6, 100)}: Ожидается имя таблицы ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних<<?>>(&ТипЦен) по причине: {(6, 100)}: Ожидается имя таблицы ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних<<?>>(&ТипЦен)

нет ппц, ты даже ничего не исправил

все исправил все работает))) сорь торможу)

спасибо за оперативность)

Тэги:

Комментарии доступны только авторизированным пользователям

Добрый день подскажите пожалуйста что значит «Синтаксическая ошибка» при формировании материального отчета (МХ-20). Заранее спасибо.
1С:Предприятие 8.3 (8.3.6.2100)
Бухгалтерия предприятия, редакция 3.0 (3.0.41.49) (http://v8.1c.ru/buhv8/)
Copyright (С) ООО «1C», 2009 — 2015. Все права защищены
(http://www.1c.ru)

Добрый день!

Приведите точный текст ошибки либо приложите скриншот ошибки.

Заполнить и подать уведомление об исчисленных суммах налогов и взносов

Добрый день!
Попробуйте сделать так:
при запуске программы удалите вашу базу из общего списка баз (предварительно запомнив путь к этой базе, он всегда прописан внизу). Потом по кнопке «Добавить» добавьте базу обратно в список. Таким образом кэш почистится и может быть проблема уйдет. Если не уйдет — ждем скриншот с описанием ошибки, и какой отчет формируете (типовой, или внешний, дописанный кем-то)

Добрый день!

Цитата (Бэлла КСК):формировании материального отчета (МХ-20).

В типовой конфигурации нет такой печатной формы, свяжитесь с тем кто ее для вас писал.

Цитата (Jilt):Добрый день!
Попробуйте сделать так:
при запуске программы удалите вашу базу из общего списка баз (предварительно запомнив путь к этой базе, он всегда прописан внизу). Потом по кнопке «Добавить» добавьте базу обратно в список. Таким образом кэш почистится и может быть проблема уйдет

Так и не понял, как очистка кэша скажется на внешнем отчете?🤦‍♀️
p.s. Кстати, кэш так не чистится, а уничтожается привязка его к данной базе. А в виде мусора на диске он остался.

Цитата (Культурный):Кстати, кэш так не чистится, а уничтожается привязка его к данной базе

Я очень даже часто так чищу, другое дело в этом случае это не поможет. При этом у базы теряется связь со старым «мусором» и появляется новый кэш. 😉
При работе с клиентом по телефону/в эл.письме как вы еще сможете ему подсказать? Ведь очень часто задача стоит не навести порядок на диске клиента, а запустить базу.

Заполняйте платежки с актуальными на сегодня КБК, кодами дохода и другими обязательными реквизитами

Добрый день, скриншот почему то не могу прикрепить, а вообще так и пишет «синтаксическая ошибка»

Цитата (Культурный):Так и не понял, как очистка кэша скажется на внешнем отчете?
p.s. Кстати, кэш так не чистится, а уничтожается привязка его к данной базе. А в виде мусора на диске он остался.

Вы когда решите в следующий раз чей-то вариант решения поправлять или критиковать, не забудьте предложить свой вариант действий — а то задающий вопрос рискует остаться без какой-либо помощи. А чтобы «мусор на диске» чистить — это еще надо уточняющие вопросы про ОС на компьютере задавать, а если там серверный вариант работы? Поэтому и был предложен оперативный вариант по отвязке старого кэша от базы

Бэлла КСК, между последним положительным формированием этого отчета и сегодняшним днем какие-то действия с базой выполнялись? Обновление ставили в этот период, права и роли для пользователей добавляли/меняли? Просто это может действительно сменилось наименование какого-то из реквизитов в коде, а во внешнем отчете идет привязка к старому наименованию. Тогда лучше обратиться к разработчикам отчета.

Цитата (Jilt):Вы когда решите в следующий раз чей-то вариант решения поправлять или критиковать, не забудьте предложить свой вариант действий

Так я не критикую, а говорю, что этот «вариант решения» никакого отношения к поставленной проблеме не имеет!
Вариант решения был прописан перед моим сообщением — внешний отчет должен исправлять его автор.

Цитата (Культурный):Так я не критикую, а говорю, что этот «вариант решения» никакого отношения к поставленной проблеме не имеет!
Вариант решения был прописан перед моим сообщением — внешний отчет должен исправлять его автор.

Я в таких случаях, когда в теме присутствуют и ответы по существу и не имеющие отношения к проблеме, просто «прохожу мимо». А Вы, видя, что ответ по существу уже был дан, не написали «последуйте совету Татьяны и обратитесь к автору внешнего отчета, очистка кэша не поможет в этом случае».
Вы написали

Цитата (Культурный): Так и не понял, как очистка кэша скажется на внешнем отчете?

Вопрос «как скажется?» это не одно и то же с утверждением «чистка кэша отношения не имеет».

Срочно нужна электронная подпись?

Подпись для госзакупок, маркировки, ЛесЕГАИС и других систем можно получить через час

Цитата (Jilt):Бэлла КСК, между последним положительным формированием этого отчета и сегодняшним днем какие-то действия с базой выполнялись? Обновление ставили в этот период, права и роли для пользователей добавляли/меняли? Просто это может действительно сменилось наименование какого-то из реквизитов в коде, а во внешнем отчете идет привязка к старому наименованию. Тогда лучше обратиться к разработчикам отчета.

Добрый день, да обновления производили, представители 1С с которыми мы работаем каждый месяц это делают, хотела попробовать , не вызывая их решить эту проблему, спасибо,обращусь к ним.

Приведены некоторые ошибки, их причины и решения при обновлении конфигураций баз всеми любимой 1С 8.3.


Обновление УТ 11.1.10.199 => 11.2.2.119
После обновления конфы при запуске в режиме Предприятия ошибка:
{ОбщийМодуль.Б_ОбменССайтомСервер.Модуль(225)}: Тип не определен (СправочникОбъект.ЕдиницыИзмерения)

Причина:
В новой версии конфы удаляется справочник ЕдиницыИзмерения и соответственно удаляются все обращения к нему в коде.
Но т.к. модуль БУС (модуль для обмена с сайтом Битрикс) не находится на поддержке, он обращается к справочнику, которого уже нет.

Решение:
1) Удалить в новой версии модуль БУС (отметить галочки)
2) Обновить модуль БУС после обновления


Обновление УТ 11.2.2.119 => 11.2.3.84
При внесении изменений в конфигурацию ошибка:

Записи регистра сведений стали неуникальными: ВерсииОбъектов.

Решение:
Зайти в Предприятие, ВсеФункции -> РегистрыСведений -> ВерсииОбъектов и удалить косячный объект.


В данном случае был объект с незаполненным реквизитом Объект.


“Виснет” обновление базы в режиме предприятия – запускается, но постоянно 0%.

Решение:
Отредактировать регламентное задание “Отложенное обновление ИБ”: устанавливал чтобы запускалось каждые 60 сек.


Ошибка после обновления платформы и запуске синхронизации:
"Не удалось подключиться к другой программе: Метод объекта не обнаружен (Connect)"

Решение:
Выполнить регистрацию COM-соединения:
Regsvr32 “C:Program Files (x86)1cv8НОМЕР_ПЛАТФОРМЫbincomcntr.dll”


При обновлении ЗУП 2.5 на 3.0 на платформе 8.3.12.1412 при запуске в режиме Предприятия:
Ошибка (идентификаторы могут быть разные):
ERROR: column "fld16387rref" does not exist
LINE 2: COALESCE(Fld16387RRef,Q_001_F_000RRef)

Причина: В клиент-серверном варианте инфорационной базы с использованием PostgreSQL при выполнении запроса, содержащего ПОЛНОЕ СОЕДИНЕНИЕ может происходить ошибка вида. Код ошибки: 10193154.
Решение:
Обновить платформу на 8.3.12.1529.


Обновление УТ 11.4.6.166 => 11.4.6.174
Ошибка на этапе запуска в режиме Предприятия (кажется):
{Документ.РеализацияТоваровУслуг.МодульОбъекта(3237,7)}: Переменная не определена (СуммаПредоплаты)
ВызватьИсключение(ТекстОшибки);

Причина:
Новый код в модуле объекта РеализацияТоваровУслуг я пометил на объединение с имеющимся в текущей конфигурации. Но, объединился он криво (или я недоглядел). Реквизит СуммаПредоплаты на самом деле был переименован в УдалитьСуммаПредоплаты, и вызываться в коде не должен).

Решение:
Откатился назад и обновился еще раз без объединения с имеющимся кодом. Уже после обновления исправил код вручную.


Обновление УТ 1.3.4.228 => 11.4.6.174
Ошибка на этапе объединения конфигураций:
На удаляемый объект ОбщийМодуль.УчетНДСУТ есть ссылки в объектах основной конфигурации:
Подсистема.РегламентированныйУчет.Подсистема.УчетНДС.Состав
На удаляемый объект РегламентноеЗадание.ФормированиеДвиженийПоПартиямЗатратамНДС есть ссылки в объектах основной конфигурации:
Подсистема.РегламентированныйУчет.Подсистема.УчетНДС.Состав
На удаляемый объект ЖурналДокументов.ПередачиВозвратыТоваровМеждуОрганизациями есть ссылки в объектах основной конфигурации:
Подсистема.РегламентированныйУчет.Подсистема.ПродажиМеждуОрганизациями.Состав
На удаляемый объект Обработка.НастройкаПередачиТоваровМеждуОрганизациями есть ссылки в объектах основной конфигурации:
Подсистема.РегламентированныйУчет.Подсистема.ПродажиМеждуОрганизациями.Состав
На удаляемый объект Обработка.ПомощникИсправленияОстатковТоваровОрганизаций есть ссылки в объектах основной конфигурации:
Подсистема.РегламентированныйУчет.Состав
На удаляемый объект Обработка.ТекущиеДелаПоЭДО есть ссылки в объектах основной конфигурации:
Подсистема.Органайзер.Состав
На удаляемый объект РегистрСведений.УдалитьАдресныйКлассификатор есть ссылки в объектах основной конфигурации:
Подсистема.НормативноСправочнаяИнформация.Подсистема.БазовыеКлассификаторы.Состав

ПричинЫ:
Почему остались ссылки на удаляемые объекты в конфе?
1) Возможно, объекты со ссылками тоже должны были быть удалены, но по какой-то причине этого не произошло.
2) Просто тупняк обработки обновления, которая не “зачистила” места использования удаляемых объектов.

РешениЯ:
1) По хорошему, нужно найти все места использования и разобраться, почему остались ссылки на удаляемые объекты. Устранить их и вновь запустить обновление, чтобы объекты смогли удалиться автоматически.
2) Но можно и проще: убрать галки в форме сравнения конфигураций с этих объектов, чтобы они не пытались удалиться из текущей конфы. Но теперь в базе будут мусорные объекты, которые никто и никогда не будет использовать.


Обновление УТ
Ошибка:
Ошибка инициализации модуля: Документ.УдалитьАктОРасхожденияхПриПоступленииТоваров.МодульМенеджера
по причине:
{Документ.УдалитьАктОРасхожденияхПриПоступленииТоваров.МодульМенеджера(13,2)}: Переменная не определена (ВводНаОснованииПереопределяемый)
<<?>>ВводНаОснованииПереопределяемый.ДобавитьКомандуСоздатьНаОснованииБизнесПроцессЗадание(КомандыСоздатьНаОсновании);
{Документ.УдалитьАктОРасхожденияхПриПоступленииТоваров.МодульМенеджера(14,2)}: Переменная не определена (ВводНаОснованииПереопределяемый)
<<?>>ВводНаОснованииПереопределяемый.ДобавитьКомандыСоздатьНаОснованииПисмаПоШаблону(КомандыСоздатьНаОсновании);
{Документ.УдалитьАктОРасхожденияхПриПоступленииТоваров.МодульМенеджера(23,45)}: Переменная не определена (ВводНаОсновании)
КомандаСоздатьНаОсновании.Представление = <<?>>ВводНаОсновании.ПредставлениеОбъекта(Метаданные.Документы.УдалитьАктОРасхожденияхПриПоступленииТоваров);

Причина:
Комбинация двух предыдущих ошибок. В предыдущем релизе конфигурации объект УдалитьАктОРасхожденияхПриПоступленииТоваров был “помечен на удаление” (т.к. в имени написано “Удалить”), значит в этом новом релизе он должен был быть удален. Но на него остались ссылки в других объектах, поэтому автоматически он не удалился. Соответственно, проблемный объект УдалитьАктОРасхожденияхПриПоступленииТоваров содержит неактуальные обращения к уже несуществующим реквизитам других объектов (ВводНаОснованииПереопределяемый и др.).

Решение:
Удалить объект УдалитьАктОРасхожденияхПриПоступленииТоваров из конфы:
1) найти места использования: ПКМ на объекте => Найти места использования. Как оказалось, ссылались некоторые команды в других объектах
2) убрать места использования: поснимать галочки на удаляемый объект в этих командах (в реквизите “Тип параметра команды”, кажется)
3) запустить выполнение обновления повторно, и этот объект должен спокойно выпилиться из конфы


Обновление УТ
Ошибка:
Роль.ДобавлениеИзменениеФизическихЛиц: Дублирование имени объекта метаданных:
Обработка.ПомощникИсправленияОстатковТоваровОрганизаций: Дублирование имени объекта метаданных:
При проверке метаданных обнаружены ошибки!
Операция не может быть выполнена.

Причина:
Тупняк обработки обновления: дубликат не должен быть создаваться.

Решение:
(точно не помню) По логике – удалил дубликаты из конфы.


Обновление УТ
В режиме Предприятия:
Ошибка при выполнении запроса.
по причине: Ошибка получения данных
по причине: Ошибка создания набора данных "НаборДанныхДинамическогоСписка"
по причине: Ошибка при исполнении запроса набора данных
по причине: Ошибка выполнения запроса
по причине: Ошибка в ограничении доступа к данным.
объект: 'Документ.ПриобретениеТоваровУслуг', поле: 'Проведен'; право: 'Чтение'
{(38, 27)}: Синтаксическая ошибка ":"
НеверноеИмяТекущейТаблицы<<?>>: "Документ.ПоступлениеТоваровУслуг"
по причине:
{(38, 27)}: Синтаксическая ошибка ":"
НеверноеИмяТекущейТаблицы<<?>>: "Документ.ПоступлениеТоваровУслуг"

Причина:
В последних версиях УТ осуществляется переход от документов ПоступленияТоваровУслуг к ПриобретениямТоваровУслуг. Виновником была самописная роль ДобавлениеИзменениеПоступленийТоваровУслугБезРаспроведения, созданная копированием стандартной ДобавлениеИзменениеПоступленийТоваровУслуг. Но если стандартная была автоматически как нужно подпилена обработкой обновления (или же вообще удалена), то самописная осталась с неверными ссылками на старые документы.

Решение:
Убрал в самописной роли галки на документ ПоступлениеТоваровУслуг, оставил только на Приобретения.


Просмотров:
2 912

Содержание:

1.       Причина возникновения ошибки «Неверное имя колонки»

2.       Выявление места возникновения ошибки о неверном имени колонки   

1.      Причина возникновения ошибки «Неверное имя колонки»

Ошибка «Неверное имя колонки» может возникать при работе с таблицами. Ошибка связана с несоблюдением требований в части формата служебного свойства объекта встроенного языка.

Информации не так много про эти требования. Известно, что используется имя колонки как идентификатор, и должно удовлетворять следующим моментам:

·         Начинаться должно с символа подчеркивания, либо с буквы

·         Не должно содержать никаких символов кроме алфавитных, символа подчеркивания и цифр.

Таким образом, если при выполнении кода возникает ошибка «Неверное имя колонки» в 1С — смело целенаправленно смотрим на имя, которое мы пытаемся присвоить нашей колонке, возможно нужно изменить имя колонки.   

2.      Выявление места возникновения ошибки о неверном имени колонки

Пара способов, оба по-своему хороши:

1.       В тексте ошибки содержится информация о модуле, в котором произошла ошибка и номере строки. Нажимаем «Подробно» и смотрим, где что произошло:

Сообщение Неверное имя колонки


Неверное имя колонки в 1С Предприятие

Идем сверху вниз. На моем примере: строка 42 модуля управляемой формы моей внешней обработки 1С Предприятие повлекла за собой ошибку в 32 строке модуля формы, которая, в свою очередь, нашла свое отражение в 9 строке модуля формы моей внешней обработки. Т.е. неверное имя колонке я попытался присвоить в 42 строке кода модуля формы.

2.       В конфигураторе в режиме отладки: «Отладка» — «Остановка по ошибке» 

Остановка по ошибке

Останавливаться по ошибке Неверное имя колонки

При возникновении ошибки будет открыт модуль – источник, и активная строка в 1С, где произошла ошибка.

Модуль источник Неверного имя колонки

Далее, можно посмотреть, какое имя мы пытались присвоить колонке и внести изменения, чтобы имя колонки было указано верно.

Набросаем простенькую обработку для проверки, что же можно указывать в имени колонки, и чего нельзя.

Проверка изменения имени колонки

Пробуем:

1.       «1абвгдеёжзиклмнопрстуфхцчшщъыьэюя» — Нельзя

Пример Неверное имя колонки

2.       Убираем с первой позиции – Можно

Исправление Неверное имя колонки в 1С

3.       Пробелы – Нельзя

Пример Неверное имя колонки в 1С

4.       Точки, запятые и т.д. – Нельзя

Пример с точками и запятыми — Неверное имя колонки

5.       Знак подчеркивания «_» — Можно. Можно даже на первой позиции имени колонки

Пример с точками и запятыми Неверное имя колонки

6.       Пустая строка «» — как оказалось, можно

Пример отсутствия ошибки Неверное имя колонки

Специалист компании «Кодерлайн»

Сергей Пушкин

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Ivan_Ivanov

Дата регистрации: 06.06.2007
Сообщений: 168

«Народ проблема такая:<br>пишу запрос:<br>ПечатаемыДокумент.Дата как ДатаДок»;<br>Если ПечатаемыйДокумент тогда<br>Запрос.Текст= Запрос.Текст+»<br>ПечатаемыйДокумент.СчетКонтрагента как СчетКонтрагента»;<br>Иначе<br>Запрос.Текст= Запрос.Текст+»<br>ПечатаемыйДокумент.Банк.ОсновнойБанковскийСчет.НомерСчета как СчетКонтрагента»;<br>КонецЕсли;<br>Запрос.Текст = Запрос.Текст+»<br>Далее оставшийся текст запроса<br>….<br>Возврат Запрос.Выполнить();<br><br>При выводе документа на печать 1с выдает ошибку: Ошибка метода контекста Выполнить<br><br>Значения всем параметрам присвоены, условия до запроса тоже выполняются<br>В чем может быть проблема?»

Prikum

активный пользователь

онлайн

Дата регистрации: 18.02.2002
Сообщений: 20881

Весь текст ошибки приведи! Весь код приведи, а то непонятно, что к чему!

Wee

Дата регистрации: 24.11.2007
Сообщений: 464

Скорее всего ошибка в тексте запроса. Полностью текст в студию :)

Ivan_Ivanov

Дата регистрации: 06.06.2007
Сообщений: 168

«Функция СформироватьЗапросПоДокументу(ДокументСсылка)<br> <br> Запрос = Новый Запрос;<br> Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;<br> <br> // Установим параметры запроса<br> Запрос.УстановитьПараметр(«ДокументСсылка», ДокументСсылка);<br> Запрос.УстановитьПараметр(«ДатаДокумента», ДокументСсылка.Дата);<br><br> Запрос.УстановитьПараметр(«СтруктурнаяЕдиница»,ДокументСсылка.Организация);<br><br> Если ТипЗнч(ДокументСсылка) = Тип(«ДокументСсылка.ПлатежноеПоручениеИсходящее») Тогда<br> ПечатьПлатежногоПоручения = Истина;<br> Запрос.УстановитьПараметр(«СчетКонтрагента», ДокументСсылка.СчетКонтрагента);<br> Иначе<br> ПечатьПлатежногоПоручения = Ложь;<br> Запрос.УстановитьПараметр(«СчетКонтрагента», ДокументСсылка.Банк);<br><br> КонецЕсли;<br><br> <br> Запрос.Текст =<br> «ВЫБРАТЬ РАЗРЕШЕННЫЕ<br> | ОтветственныеЛицаСрезПоследних.ФизическоеЛицо.Наименование КАК ФизическоеЛицоНаименование,<br> | ОтветственныеЛицаСрезПоследних.Должность.Наименование КАК ДолжностьНаименование,<br> | ОтветственныеЛицаСрезПоследних.ОтветственноеЛицо,<br> | ОтветственныеЛицаСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо,<br> | ФизическиеЛица.Комментарий<br> |ПОМЕСТИТЬ ВТОтветственныеЛица<br> |ИЗ<br> | РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(<br> | &ДатаДокумента,<br> | СтруктурнаяЕдиница = &СтруктурнаяЕдиница<br> | И ОтветственноеЛицо В (ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель), ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Кассир), ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.ГлавныйБухгалтер))) КАК ОтветственныеЛицаСрезПоследних<br> | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица<br> | ПО ОтветственныеЛицаСрезПоследних.ФизическоеЛицо = ФизическиеЛица.Ссылка<br> |<br> |ИНДЕКСИРОВАТЬ ПО<br> | ФизическоеЛицо»;<br> Запрос.Выполнить();<br> <br> Запрос.Текст =<br> «ВЫБРАТЬ<br> | ОтветственныеЛицаСрезПоследних.ДолжностьНаименование,<br> | ОтветственныеЛицаСрезПоследних.ОтветственноеЛицо КАК ОтветственноеЛицо,<br> | ЕСТЬNULL(ФИОФизЛицСрезПоследнихРуководитель.Фамилия + ВЫБОР<br> | КОГДА ПОДСТРОКА(ФИОФизЛицСрезПоследнихРуководитель.Имя, 1, 1) <> «»»»<br> | ТОГДА «»»» «»»» + ПОДСТРОКА(ФИОФизЛицСрезПоследнихРуководитель.Имя, 1, 1) + «»»».»»»»<br> | ИНАЧЕ «»»»<br> | КОНЕЦ + ВЫБОР<br> | КОГДА ПОДСТРОКА(ФИОФизЛицСрезПоследнихРуководитель.Отчество, 1, 1) <> «»»»<br> | ТОГДА «»»» «»»» + ПОДСТРОКА(ФИОФизЛицСрезПоследнихРуководитель.Отчество, 1, 1) + «»»».»»»»<br> | ИНАЧЕ «»»»<br> | КОНЕЦ, ОтветственныеЛицаСрезПоследних.ФизическоеЛицоНаименование) КАК ФИОРуководителя<br> |ПОМЕСТИТЬ ВТДанныеОтветственныхЛиц<br> |ИЗ<br> | ВТОтветственныеЛица КАК ОтветственныеЛицаСрезПоследних<br> | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(<br> | &ДатаДокумента,<br> | ФизЛицо В<br> | (ВЫБРАТЬ<br> | ОтветственныеЛицаСрезПоследних.ФизическоеЛицо<br> | ИЗ<br> | ВТОтветственныеЛица КАК ОтветственныеЛицаСрезПоследних)) КАК ФИОФизЛицСрезПоследнихРуководитель<br> | ПО ОтветственныеЛицаСрезПоследних.ФизическоеЛицо = ФИОФизЛицСрезПоследнихРуководитель.ФизЛицо<br> |<br> |ИНДЕКСИРОВАТЬ ПО<br> | ОтветственноеЛицо»;<br> Запрос.Выполнить();<br> <br> Запрос.Текст =<br> «ВЫБРАТЬ РАЗЛИЧНЫЕ<br> | ПечатаемыйДокумент.Дата КАК ДатаДок»;<br> Если ПечатьПлатежногоПоручения тогда<br> Запрос.Текст = Запрос.Текст +»<br> | ПечатаемыйДокумент.СчетКонтрагента.НомерСчета КАК СчетКонтрагента»;<br>Иначе<br> Запрос.Текст = Запрос.Текст +»<br> | ПечатаемыйДокумент.Банк.ОсновнойБанковскийСчет.НомерСчета КАК СчетКонтрагента»;<br>КонецЕсли;<br>Запрос.Текст = Запрос.Текст +»<br><br> | ВЫРАЗИТЬ(ПечатаемыйДокумент.Организация.НаименованиеПолное КАК СТРОКА(300)) КАК НазваниеОрганизации,<br> | ОтветственныеЛицаОрганизацийСрезПоследнихГлБух.ФИОРуководителя КАК ФИОГлБуха<br> |ИЗ<br> | Документ.» + ДокументСсылка.Метаданные().Имя + » КАК ПечатаемыйДокумент<br> | ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОтветственныхЛиц КАК ОтветственныеЛицаОрганизацийСрезПоследнихРуководитель<br> | ПО (ОтветственныеЛицаОрганизацийСрезПоследнихРуководитель.ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель))<br> | ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОтветственныхЛиц КАК ОтветственныеЛицаОрганизацийСрезПоследнихГлБух<br> | ПО (ОтветственныеЛицаОрганизацийСрезПоследнихГлБух.ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.ГлавныйБухгалтер))<br> | ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОтветственныхЛиц КАК ОтветственныеЛицаОрганизацийСрезПоследнихКассир<br> | ПО (ОтветственныеЛицаОрганизацийСрезПоследнихКассир.ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Кассир))<br> |ГДЕ<br> | ПечатамыйДокумент.Ссылка = &ДокументСсылка»;<br> <br> Если ПечатьПлатежногоПоручения Тогда<br> Запрос.Текст = Запрос.Текст + «<br> | ПечатаемыйДокумент.Ссылка В(&ДокументСсылка)»;<br> Иначе<br> Запрос.Текст = Запрос.Текст + «<br> | ПечатаемыйДокумент.Ссылка = &ДокументСсылка»;<br> КонецЕсли;<br> <br><br><br>Возврат Запрос.Выполнить();<br><br><br>КонецФункции // СформироватьЗапросДляПечати()<br>»

Prikum

активный пользователь

онлайн

Дата регистрации: 18.02.2002
Сообщений: 20881

Ivan_Ivanov

Дата регистрации: 06.06.2007
Сообщений: 168

«{ОбщийМодуль.ФормированиеПечатныхФормДополнительный(117)}: Ошибка при вызове метода контекста (Выполнить): {(3, 2)}: Синтаксическая ошибка «ПечатаемыйДокумент.СчетКонтрагента.НомерСчета»<br><<?>>ПечатаемыйДокумент.СчетКонтрагента.НомерСчета КАК СчетКонтрагента<br>Возврат Запрос.Выполнить();<br>по причине:<br>{(3, 2)}: Синтаксическая ошибка «ПечатаемыйДокумент.СчетКонтрагента.НомерСчета»<br><<?>>ПечатаемыйДокумент.СчетКонтрагента.НомерСчета КАК СчетКонтрагента<br><br>такая же ошибка выдается при запуске на печать из документа ЗарплатаКВыплатеОрганизаций»

Prikum

активный пользователь

онлайн

Дата регистрации: 18.02.2002
Сообщений: 20881

Запятые Печкин будет ставить?

Ivan_Ivanov

Дата регистрации: 06.06.2007
Сообщений: 168

где именно у меня их не хватает? вроде все есть

BelikovS

Дата регистрации: 05.03.2007
Сообщений: 1701

«Согласно этому:<br>> Запрос.Текст =<br>> «ВЫБРАТЬ РАЗЛИЧНЫЕ<br>> | ПечатаемыйДокумент.Дата КАК ДатаДок»;<br>> Если ПечатьПлатежногоПоручения тогда<br>> Запрос.Текст = Запрос.Текст +»<br>> | ПечатаемыйДокумент.СчетКонтрагента.НомерСчета КАК СчетКонтрагента»;<br>> Иначе<br>> Запрос.Текст = Запрос.Текст +»<br>> | ПечатаемыйДокумент.Банк.ОсновнойБанковскийСчет.НомерСчета КАК СчетКонтрагента»;<br>> КонецЕсли;<br>> Запрос.Текст = Запрос.Текст +»<br>> <br>> | ВЫРАЗИТЬ(ПечатаемыйДокумент.Организация.НаименованиеПолное КАК СТРОКА(300)) КАК НазваниеОрганизации,<br>> | ОтветственныеЛицаОрганизацийСрезПоследнихГлБух.ФИОРуководителя КАК ФИОГлБуха<br>у вас получиться:<br>»ВЫБРАТЬ РАЗЛИЧНЫЕ<br> ПечатаемыйДокумент.Дата КАК ДатаДок<br> ПечатаемыйДокумент.СчетКонтрагента.НомерСчета КАК СчетКонтрагента<br> ВЫРАЗИТЬ(ПечатаемыйДокумент.Организация.НаименованиеПолное КАК СТРОКА(300)) КАК НазваниеОрганизации,<br> ОтветственныеЛицаОрганизацийСрезПоследнихГлБух.ФИОРуководителя КАК ФИОГлБуха»<br>Ничего необычного в первых 2-х строчках (после выбрать) не замечаете?»

Ivan_Ivanov

Дата регистрации: 06.06.2007
Сообщений: 168

Блин, точно! Спасибо большое! Это уже просто после долгой писанины глаз замылился :))

Показывать по
10
20
40
сообщений

Читают тему:

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь выполнить следующий процесс, у меня есть две разные базы данных access, и я программирую некоторые sql-запросы в Excel Vba для обработки данных этих баз данных. Я установил связь с этой базой данных, используя ADOX Connection, вы можете увидеть сценарий ниже. Мой вопрос связан с самим запросом, из одной таблицы у меня много данных, и я ищу эти данные из другой таблицы, которые находятся в другой БД, но если запрос не находит отношения, он должен сообщить все данные из первой таблицы и использовать другуютаблицы в качестве дополнительной информации, если совпадения нет, то результат будет нулевым.

Чтобы сделать такую вещь, я использую LEFT OUTER JOIN on all таблицы, но они не подходят. Поскольку он возвращает сообщение

«Синтаксическая ошибка при операции соединения»

Как я могу исправить эту ошибку?

 Public Function getUMEByIdent()
Dim i As Long
Dim j As Integer
Dim nData() As Variant
Dim adox_table1 As ADOX.Table
Dim adox_table2 As ADOX.Table
Dim adox_table3 As ADOX.Table
Dim fatorConv As Double

With connection
    .ConectDB ("compDraw.mdb")
        Set adox_catalog = New ADOX.Catalog
        Set adox_catalog.ActiveConnection = connection.conn
        
        Set adox_table1 = New ADOX.Table
        With adox_table1
            Set .ParentCatalog = adox_catalog
            .Name = "lkdTbl1"
            .Properties("Jet OLEDB:Link Datasource") = ThisWorkbook.Path amp; "assetsconfigs.mdb"
            .Properties("Jet OLEDB:Link Provider String") = "MS Access"
            .Properties("Jet OLEDB:Remote Table Name") = "mditems"
            .Properties("Jet OLEDB:Create Link") = True
        End With
    
        Set adox_table2 = New ADOX.Table
        With adox_table2
            Set .ParentCatalog = adox_catalog
            .Name = "lkdTbl2"
            .Properties("Jet OLEDB:Link Datasource") = ThisWorkbook.Path amp; "assetsconfigs.mdb"
            .Properties("Jet OLEDB:Link Provider String") = "MS Access"
            .Properties("Jet OLEDB:Remote Table Name") = "umestatistics"
            .Properties("Jet OLEDB:Create Link") = True
        End With

        Set adox_table3 = New ADOX.Table
        With adox_table3
            Set .ParentCatalog = adox_catalog
            .Name = "lkdTbl3"
            .Properties("Jet OLEDB:Link Datasource") = ThisWorkbook.Path amp; "assetsconfigs.mdb"
            .Properties("Jet OLEDB:Link Provider String") = "MS Access"
            .Properties("Jet OLEDB:Remote Table Name") = "convume"
            .Properties("Jet OLEDB:Create Link") = True
        End With
        
        Set .rs = .conn.Execute( _
            "SELECT bom.ident_mp, lkdTbl1.ncm, lkdTbl1.umc, lkdTbl2.ume, lkdTbl3.fator_conv FROM" amp; _
            " ((bom LEFT OUTER JOIN lkdTbl1 ON lkdTbl1.ident = bom.ident_mp) " amp; _
            " LEFT OUTER JOIN tkdTbl2 ON lkdTb1.ncm = lkdTbl2.ncm)" amp; _
            " LEFT OUTER JOIN lkdTbl3 ON lkdTbl1.umc = lkdTbl3.umc AND lkdTbl2.ume = lkdTbl3.ume" amp; _
            " GROUP BY bom.ident_mp, lkdTbl1.ncm, lkdTbl1.umc, lkdTbl2.ume, lkdTbl3.fator_conv", , adCmdText)
    
        Do While Not .rs.EOF
            If IsNull(.rs.Fields("ident_mp").Value) = False Then
                ReDim Preserve nData(i)
                nData(i) = Array(.rs.Fields("ident_mp").Value, .rs.Fields("ncm").Value, .rs.Fields("umc").Value, .rs.Fields("ume").Value, .rs.Fields("fator_conv").Value)
                i = i   1
            End If
            
            .rs.MoveNext
        Loop
        .rs.Close
    
        adox_catalog.Tables.Delete "lkdTbl1"
        adox_catalog.Tables.Delete "lkdTbl2"
        adox_catalog.Tables.Delete "lkdTbl3"
    .FechaDb
End With
End Function
 

Комментарии:

1. LEFT OUTER JOIN tkdTbl2 ON Это может быть просто простая опечатка. Должно ли это быть lkdTbl2 ?

2. lkdTb1.ncm = lkdTbl2.ncm Кроме того, я думаю, что это должно быть lkdTbl1 (отсутствует L)

3. Привет, Дик Куслейка, После исправления этой ошибки sintax, теперь я получил ошибку, связанную с выражением соединения, она показывает, что выражение соединения не поддерживается. Похоже, что при использовании кратного выражения LEFT OUTER JOIN в VBA невозможно отправить два параметра, например, в третьем ЛЕВОМ ВНЕШНЕМ СОЕДИНЕНИИ » ЛЕВОЕ СОЕДИНЕНИЕ lkdTbl3 НА lkdTbl1.umc = lkdTbl3.umc И lkdTbl2.ume = lkdTbl3.ume» amp;

Ответ №1:

Анализатор запросов Access не может обрабатывать определенные соединения. Обычно вы можете обойти это, создав подзапрос.

 SELECT   temp.ident_mp
       , temp.ncm
       , temp.umc
       , temp.ume
       , lkdTbl3.fator_conv
FROM
         (SELECT *
          FROM   bom
                 LEFT OUTER JOIN lkdTbl1 ON
                     lkdTbl1.ident = bom.ident_mp
                 LEFT OUTER JOIN tkdTbl2 ON
                     lkdTb1.ncm = lkdTbl2.ncm) temp
         LEFT OUTER JOIN lkdTbl3 ON
             temp.umc = lkdTbl3.umc
             AND temp.ume = lkdTbl3.ume
GROUP BY temp.ident_mp
       , temp.ncm
       , temp.umc
       , temp.ume
       , lkdTbl3.fator_conv
 

Это помещает первые два левых соединения в подзапрос с таким именем temp , чтобы последнее левое соединение соединяло только две таблицы. Я не смог это протестировать, потому что у меня нет вашей настройки, но я сделал что-то подобное в Northwind.mdb, и это сработало.

Комментарии:

1. Привет, Дик Куслейка, я внес некоторые изменения в ваш код, и теперь он идеально подходит… Большое вам спасибо.. Окончательный код выглядит следующим образом: SELECT temp.ident_mp, temp.ncm_item, temp.umc_item, temp.ume, lkdTbl3.fator_conv FROM (SELECT * FROM (bom LEFT OUTER JOIN lkdTbl1 ON lkdTbl1.ident = bom.ident_mp) LEFT OUTER JOIN lkdTbl2 ON lkdTbl1.ncm_item = lkdTbl2.ncm) temp LEFT OUTER JOIN lkdTbl3 ON temp.umc_item = lkdTbl3.umc AND temp.ume = lkdTbl3.ume GROUP BY temp.ident_mp, temp.ncm_item, temp.umc_item, temp.ume, lkdTbl3.fator_conv

вступление

Я следую этому руководству здесь, и я застрял в последней части: http://symfony.com/doc/2.0/cookbook/security/entity_provider.html

Я пытаюсь выполнить запрос из таблицы учетных записей и присоединиться к таблице групп. Это отношение многих к многим с промежуточной таблицей account_group.

account Table Fields: id, firstName, and email

account_group Table Fields: account_id and group_id

group Table Fields: id, name, and role

проблема

Вот мой DQL:

        SELECT a.firstName, g.role
        FROM WikiRosterMainBundle:Account a
        LEFT JOIN a.groups g
        WHERE a.email = :email

Я получаю внутреннюю ошибку сервера:

Исключение произошло при выполнении «SELECT a0_.id AS id0, a0_.firstName AS firstName1, a0_.email AS email3, g1_.role AS role18 FROM account a0_ LEFT JOIN account_group a2_ ON a0_.id = a2_.account_id Группа LEFT JOIN g1_ ON g1_.id = a2_.group_id WHERE a0_.email =? ‘ с параметрами {«1»: «[email protected]»}:

SQLSTATE [42000]: Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с ‘group g1_ ON g1_.id = a2_.group_id WHERE a0_.email =’ [email protected] » в строке 1

Что я пробовал:

+Adding первичный ключ в таблице account_group (не работает)

+Writing мои собственные левые присоединяются к запросу mysql и вводят его в phpmyadmin (работает с одним левым соединением, но не удается, когда я пытаюсь присоединиться к 3 таблицам)

+Flipping таблица, в которую я присоединяюсь/выбираю из

Исследования, которые я сделал

Кажется, что левое соединение изменилось в mysql 5. Я просмотрел документы и другие вопросы:

http://dev.mysql.com/doc/refman/5.0/en/join.html

MySQL LEFT JOIN после изменений 5.0.12 — Как переписать запрос

Спасибо за любую помощь!

Понравилась статья? Поделить с друзьями:
  • Систематическая ошибка выжившего пример
  • Синтаксическая ошибка код 800a03ea
  • Систематическая ошибка выжившего презентация
  • Синтаксическая ошибка как избавиться
  • Систематическая ошибка выжившего когнитивное искажение