Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 6

Не могу разобраться с синтаксисом запросов

05.11.2019, 01:06. Показов 1212. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени!
Везде в примерах запросов указано обращение к части объекта через точку, однако, у меня отчего-то не выходит.

есть задача
Дано 2 файла с таблицами exel. В одном данные: "№ по каталогу" и "Номер производителя", в другом: "Номер производителя" и "Артикул2"
Написать внешнюю обработку (на обычной форме) в которую пользователь :

1) Загрузит эти файлы
2) Увидит их на форме
3) Сможет, отредактировать на форме данные в таблицах.

Кроме того, автоматически соединить обе таблицы в третью:
1) Данные третьей таблицы: "№ по каталогу" ,"Номер производителя" , "Артикул2"
2)К полям "№ по каталогу" и "Номер производителя" из первой таблицы, подтягивается поле "Артикул2" из второй таблицы по полностью совпадающему номеру производителя.
3) Если есть больше одного соответствия, то создаются новые строки.
4) Если "№ по каталогу" или "Номер производителя" не заполнены, то строку пропускаем.

Третья таблица должна быть отражена на форме и отсортирована по "№ по каталогу" и "Номер производителя".
На форме в третьей таблице подсветить цветом (фон - зеленый) колонки: "Номер производителя" и "Артикул2", в том случае когда они совпадают.

Первые пункты не вызывают особого труда.
Реализовал так:
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
#Область Открываем
 
&НаКлиенте
Функция ВыбратьФайл()
        
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите excel - файл";
    Диалог.ПолноеИмяФайла = "c:\";
    Диалог.Фильтр = "Таблицы (*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";
    Если Диалог.Выбрать() Тогда
        Возврат Диалог.ПолноеИмяФайла;  
    КонецЕсли;
КонецФункции
 
&НаСервере                                
Процедура ВТаблицу(набор)
    
    Если набор = "Набор 1" Тогда
        Табличка_1.Прочитать(Объект.Файл_1);
        
    ИначеЕсли набор = "Набор 2" Тогда
        Табличка_2.Прочитать(Объект.Файл_2);
        
    Иначе
        Сообщить("ошибка аргумента процедуры ВТаблицу");
    КонецЕсли; 
КонецПроцедуры
 
&НаКлиенте
Процедура НаборДляЗагрузки1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Объект.Файл_1 = ВыбратьФайл();   
    ВТаблицу("Набор 1"); 
КонецПроцедуры
 
&НаКлиенте
Процедура НаборДляЗагрузки2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    Объект.Файл_2 = ВыбратьФайл(); 
    ВТаблицу("Набор 2");  
    КонецПроцедуры 
#КонецОбласти   
    
#Область Сохраняем  
&НаКлиенте
Процедура Сохранить1(Команда) 
    Табличка_1.Записать(Объект.Файл_1,ТипФайлаТабличногоДокумента.xlsx);
КонецПроцедуры
 
&НаКлиенте
Процедура Сохранить2(Команда)
    Табличка_2.Записать(Объект.Файл_2,ТипФайлаТабличногоДокумента.xlsx);
КонецПроцедуры
 
#КонецОбласти
Для опытного человека, и остальные пункты, скорее всего, вызовут усмешку "ха, ламер, это же элементарно". Однако уже на запросе застопорился. Конфигуратор ругается на Табличка_1.ПолучитьОбласть("C1") или Табличка_1.Область("C1") в запросе. Хотя, во всех примерах, насколько я понимаю, идет обращение к колонкам. Я так понимаю, запрос представляет из себя просто ЛЕВОЕ СОЕДИНЕНИЕ с отбрасыванием NULL в номерах, но в синтаксисе запутался.
Если не затруднит, не могли бы вы объяснить в чем моя ошибка и как это сделать правильно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.11.2019, 01:06
Ответы с готовыми решениями:

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

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

Не могу разобраться с синтаксисом php
Всем доброго времени суток! Я в php чайник абсолютный, но волею судеб пришлось пилить сайт на joomla 3 с официальным шаблоном от...

12
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
05.11.2019, 01:40
Цитата Сообщение от HellQwer Посмотреть сообщение
Реализовал так:
Тут нет никаких запросов...
Табличный документ имеет следующий стиль обозначения ссылок R1C1 - где R1 Номер Строки, C1 - номер колонки

1C
1
Табличка_1.ПолучитьОбласть("R1C1").Текст
или методом область()
1C
1
Табличка_1.Область(1, 1, 1, 1); // читаем в синтаксис помощнике
0
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 6
05.11.2019, 02:15  [ТС]
Это реализация первых пунктов, да, тут нет запросов, потому что я не могу с ними разобраться.
R1C1 разве не ячейку возвращает? Когда нужна колонка. Например, если сделать присвоение
1C
1
Объединенная_таблица = Табличка_1.ПолучитьОбласть("C1");
Получаем запись в новую таблицу всей колонки целиком.
Запрос делал такой, для начала без отсеивания NULL
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
Запрос = Новый Запрос(
 
    Запрос =
        "ВЫБРАТЬ
        |   Табличка_1.ПолучитьОбласть("C1") КАК НомерТовара,
        |   Табличка_1.ПолучитьОбласть("C2") КАК Производитель,
        |   Табличка_2.ПолучитьОбласть("C2") КАК Артикул,
        |ИЗ
        |   Табличка_1 КАК Табличка_1
        |      ЛЕВОЕ СОЕДИНЕНИЕ  Табличка_2 КАК Табличка_2    
        |       ПО 
        |           Табличка_1.ПолучитьОбласть("C2") = Табличка_2.ПолучитьОбласть("C1")"
    );
Ошибка: {Обработка.ВнешняяОбработка1.Форма.Форма .Форма(93,35)}: Ожидается символ ')'

Если обращаться по ячейкам (R1C1) - получаю тоже самое.
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4137 / 944 / 265
Регистрация: 22.04.2013
Сообщений: 6,580
Записей в блоге: 1
05.11.2019, 06:31
1C
1
2
з = новый запрос;
з.текст = "выбрать ......";
дальше - воспользуйтесь советом десмонта
1
 Аватар для dggrom
198 / 158 / 45
Регистрация: 23.08.2014
Сообщений: 807
05.11.2019, 07:08
HellQwer, а вы этот запрос через конструктор писали или ручками набирали ?
0
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 6
06.11.2019, 14:49  [ТС]
Цитата Сообщение от Yulunga Посмотреть сообщение
дальше - воспользуйтесь советом десмонта
Да, точно. Спасибо!
Теперь конфигуратор считает, что после кавычки при обращении ("C1") должен быть КонецФункции;
Если обращаться к области как (,1,,1) - отсутствие значения строк и столбцов вызывают ошибку уже при запуске запроса в форме - она ждет что строки будут обозначены.
Если ввести и строки числом вот так:
Кликните здесь для просмотра всего текста
1C
1
2
3
4
5
6
7
8
9
10
11
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
        |   Табличка_1.Область(1,1,61000,1) КАК НомерТовара,
        |   Табличка_1.ПолучитьОбласть(1,2,61000,2) КАК Производитель,
        |   Табличка_2.ПолучитьОбласть(1,2,61000,2) КАК Артикул
        |ИЗ
        |   Табличка_1 КАК Табличка_1
        |      ЛЕВОЕ СОЕДИНЕНИЕ  Табличка_2 КАК Табличка_2    
        |       ПО    Табличка_1.ПолучитьОбласть(1,2,61000,2) = Табличка_2.ПолучитьОбласть(1,1,61000,1)"              
    ;
    РезультатЗапроса = Запрос.Выполнить();

пишет, что табличка_1 не найдена. При чем, табличка_1 точно находится области видимости функции, так как отдельное присвоение на другую таблицу в форме происходит без проблем.
На счет обращения к колонкам, не понимаю, почему в запросе запрещено обращаться по колонкам и как это, вообще, тогда сделать. Такое обращение - официально задокументировано. Из синтаксис-помощника:
Кликните здесь для просмотра всего текста
Если последняя строка и последняя колонка отсутствуют, то область задана единственной ячейкой. Если строки или колонки отсутствуют, то область задана диапазоном строк или колонок соответственно. Если метод вызван без параметров, то область задана всей таблицей.
Нумерация строк и колонок начинается с 1. Значение 0 трактуется как 1.
И вне запросов работает нормально.
Цитата Сообщение от dggrom Посмотреть сообщение
HellQwer, а вы этот запрос через конструктор писали или ручками набирали ?
Ручками. Он же элементарный, надо такое самому писать, по идее.
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4137 / 944 / 265
Регистрация: 22.04.2013
Сообщений: 6,580
Записей в блоге: 1
06.11.2019, 15:04
по идее запрос выполняется на сервере.
а что такое на сервере "Табличка" наверно ему неведомо имхо
0
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 6
06.11.2019, 15:09  [ТС]
Вот такое присвоение легко проходит в теле функции.
1C
1
Объединенная_таблица = Табличка_1.ПолучитьОбласть(,1,,1);
На всякий случай, пробросил таблички принудительно как аргументы - индифферентно. При чем, проброшенная табличка так же нормально существует в функции, присвоение с ней происходит, но в запросе программа не понимает что это за новая табличка такая.
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4137 / 944 / 265
Регистрация: 22.04.2013
Сообщений: 6,580
Записей в блоге: 1
06.11.2019, 15:13
и что?
Табличная часть
Каждой табличной части соответствует таблица базы данных (<pref><n>_VT<k>), содержащая следующие поля:

<pref><n>_ID<suff> - ссылка на объект базы данных, которому принадлежит запись табличной части;
_KeyField - ключ записи табличной части в рамках одного объекта базы данных
_LineNo<n> - номер записи табличной части
_Fld<n><suff> - реквизит табличной части (для каждого реквизита, определенного в конфигурации). Для реквизита составного типа создается несколько полей с одинаковыми префиксом и номером и различными суффиксами.
_Fld<n> - общие реквизиты
вототсюда
а вы пишете "табличка".
запрос обращается к элементам базы данных
причём как они там хранятся - не наше дело, это дело платформенное и что будет в следующей версии - никому неизвестно
0
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 6
06.11.2019, 16:25  [ТС]
А как получить его полное имя, чтобы составить запрос?
Очевидное Обработки.ВнешняяОбработка1.Формы.Форма. Табличка_1 - нет.

Сообщить(Табличка_1.ИспользуемоеИмяФайла ); - выдает прочерк (я понимаю, что это не файл, но вдруг вернул бы область памяти, к которой уже можно обращаться)

PS Табличка_1 - табличный документ, а не табличная часть. Или она считается табличной частью формы?
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4137 / 944 / 265
Регистрация: 22.04.2013
Сообщений: 6,580
Записей в блоге: 1
06.11.2019, 16:42
давайте я напишу ещё раз, может быть вы плохо читаете
ЗАПРОС
ВЫПОЛНЯЕТСЯ
НА
СЕРВЕРЕ

ФОРМА ТАБЛИЧКА НАРИСОВАНА У ВАС НА КЛИЕНТЕ

"НЕЛЬЗЯ ВПИХНУТЬ НЕВПИХУЕМОЕ" (С)
0
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 6
06.11.2019, 17:33  [ТС]
Вооот! Я поэтому сразу дал код как я вносил в таблицы, думая в эту же сторону. Значит надо записать, например, в справочники или во внешние источники?
Ну а вопрос для понимания теории всё ещё в силе: почему функция, выполняемая на сервере, нормально работает с таблицей вне запроса, напр. при присвоении, и почему аналогично происходит с пробросом?
Это-то как раз и смущало: если есть нормальное обращение к объекту по своему имени "Табличка_1", по идее, и в запросе должно разуметь.
0
Модератор
Эксперт 1С
 Аватар для Dethmontt
4032 / 2977 / 594
Регистрация: 10.03.2011
Сообщений: 11,701
Записей в блоге: 1
07.11.2019, 01:55
Цитата Сообщение от HellQwer Посмотреть сообщение
Это-то как раз и смущало: если есть нормальное обращение к объекту по своему имени "Табличка_1", по идее, и в запросе должно разуметь.
Запрос вообще не работает с памятью, только с диском

Добавлено через 1 минуту
1. Внешние источники
2. Сохранение таблички в таблицу БД (можно во временную)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.11.2019, 01:55
Помогаю со студенческими работами здесь

Не могу разобраться с синтаксисом (круглые скобки)
Доброго времени суток форумчане. Начал работать с библиотекой GD и понадобился мне обработчик изображений, который бы обрезал до заданных...

Не могу разобраться с синтаксисом указателя на указатель-член структуры
#include &lt;iostream&gt; int i = 100; struct str { int x; int *pi; } index, *p;

Не могу разобраться с синтаксисом Win32 API. У меня VS Express 2012
// Win32Project2.cpp: определяет точку входа для приложения. // #include &quot;stdafx.h&quot; #include &quot;Win32Project2.h&quot; #define...

Разобраться с синтаксисом
Помогите разобраться с синтаксисом... (function(J, ga) { J.dow = ga(J); })(typeof window ? window : '', function(J) { .... ...

Помогите разобраться с синтаксисом
Ошибка 'Missing operator in query expression' Dim strSQL As String strSQL = 'UPDATE Table1 SET Table1.Field1 = !+1 WHERE...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru