Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выборка данных из базы.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
хакерок
Вот задачка

Есть документ

Заказ

Шапка: ОбщийЗаказ, Клиент,

Табличная часть : Код, Количество, Примечания

Пример

Шапка: Intercars_30 Kostik

1 4302-12-0294P 4
2 5201-01-0086P 4
3 5201-01-0086P 6
4 5201-01-0092P 4
5 5201-01-0669P 2
6 5206-15-0045P 1
7 5206-15-0098P 4
8 AD07.0126 1
9 AD11.0195 5
10 AD35.0205 1
11 AD35.0206 1
12 D1-398 2
13 D4-051 1
14 D4-609 1
15 0 204 004 320 2
16 CO07011906 6
17 CO07011906 1
18 CO07019089 5
19 CO12018001 20



Таких заказов у которых ОбщийЗаказ Intercars_30 может быть много



Вопрос как постороить запрос ("вытащить") из всех документов "Заказ" таблицу

Код Количество Клиент

у которых в шапке "Intercars_30"



говоря языком SQL

Select * from dbzakazy
where dbzakazy.obzakaz = "Intercars_30"


Пример

A70001D 4 Vadus
A70002D 4 Vadus
A70003D 3 Vadus
A70013D 2 Vadus
A70014D 2 Vadus
A70015D 2 Vadus
A70053D 6 Vadus
A70084D 4 Vadus
A80031D 4 Vadus
AGM008MT 4 Kostik
B10311PR 2 Himik
B11011UN 10 Himik
B11011UN 5 Himik
B11012UN 5 Himik
B11012UN 3 Himik
B11017UN 10 Himik
B11019UN 10 Himik
B11019UN 5 Himik
B12010UN 10 Himik
B12010UN 10 Himik
Vofka
А языком 1С вытаскивать низя? То, что Вы определили структуру документа - это хорошо. Но структуры таблицы БД врядли кто-то знает. Шаманы и ясновидящие все в отпуске.
хакерок
Цитата(Vofka @ 30.07.09, 13:34) необходимо зарегистрироваться для просмотра ссылки
А языком 1С вытаскивать низя? То, что Вы определили структуру документа - это хорошо. Но структуры таблицы БД врядли кто-то знает. Шаманы и ясновидящие все в отпуске.

А я думаю вполне реально выбрать такие данные.
хакерок
Цитата(Vofka @ 30.07.09, 13:34) необходимо зарегистрироваться для просмотра ссылки
А языком 1С вытаскивать низя? То, что Вы определили структуру документа - это хорошо. Но структуры таблицы БД врядли кто-то знает. Шаманы и ясновидящие все в отпуске.

А объект "Запрос" не поможет?
Vofka
Цитата
А объект "Запрос" не поможет?


Я ж и веду к тому, что объект "Запрос" поможет wink.gif
ЗЫ. Даже обычный перебор документов поможет, но запросом будет быстрей.
Valerka
Запрос = СоздатьОбъект(""Запрос"");

ТекстЗапроса =
""//{{ЗАПРОС(Запрос1)
|Период с НачДата по КонДата;
|ОбрабатыватьДокументы Проведенные;
|Обрабатывать НеПомеченныеНаУдаление;
|ДокументОбработки = Документ.НашДокумент.ТекущийДокумент;
|Заказ = Документ.НашДокумент.ОбщийЗаказ;
|Условие (Заказ = Intercars_30 Kostik);
|Группировка ДокументОбработки;
|""//}}ЗАПРОС
;

Intercars_30 Kostik предварительно надо либо указать в отчете, либо спозиционироваться в справочнике
Дальше обработать документы обычной выборкой ВыбратьСтроки();
З.Ы. Это самый простой вариант, запросом, впринципе, можно выбрать все элементы, текст просто получится больше smile.gif
хакерок
Цитата(Valerka @ 31.07.09, 10:16) необходимо зарегистрироваться для просмотра ссылки
Запрос = СоздатьОбъект(""Запрос"");

ТекстЗапроса =
""//{{ЗАПРОС(Запрос1)
|Период с НачДата по КонДата;
|ОбрабатыватьДокументы Проведенные;
|Обрабатывать НеПомеченныеНаУдаление;
|ДокументОбработки = Документ.НашДокумент.ТекущийДокумент;
|Заказ = Документ.НашДокумент.ОбщийЗаказ;
|Условие (Заказ = Intercars_30 Kostik);
|Группировка ДокументОбработки;
|""//}}ЗАПРОС
;

Intercars_30 Kostik предварительно надо либо указать в отчете, либо спозиционироваться в справочнике
Дальше обработать документы обычной выборкой ВыбратьСтроки();
З.Ы. Это самый простой вариант, запросом, впринципе, можно выбрать все элементы, текст просто получится больше smile.gif



А если с таким условием выберет?

|Условие (Заказ = Intercars_30);

Тоесть нужно заказ по всем клиентам а не только по Kostik

Всеравно спасибо попробую ... я просто 2 месяц чтото в 1С понимаю
Vofka
Выберет. Должно. А вообще, что мешает проверить? huh.gif
хакерок
Цитата(Vofka @ 31.07.09, 12:53) необходимо зарегистрироваться для просмотра ссылки
Выберет. Должно. А вообще, что мешает проверить? huh.gif

Блин не могу понять какие данные запрос выбирает. Как указать что выводить.
SQL ничего похожего вроде не имеет
хакерок
Чето не получаеться может хто поможет

Задачка


Документ Заказ (№1)

Шапка
ОбщийЗаказ = "Intercars_30" Клиент = Костик

Табличная часть
Код Кол
1 FE23456 10
2 AD.2345 21


Документ Заказ (№2)

Шапка
ОбщийЗаказ = "Intercars_30" Клиент = Коля

Табличная часть
Код Кол
1 ZS12345 15
2 FE07220 13


Как постороить запрос который выдаст?



FE23456 10 Костик
AD.2345 21 Костик
ZS12345 15 Коля
FE07220 13 Коля
BlackSun
Запрос = СоздатьОбъект(""Запрос"");

ТекстЗапроса =
""//{{ЗАПРОС(Запрос1)
|Период с НачДата по КонДата;
|ОбрабатыватьДокументы Проведенные;
|Обрабатывать НеПомеченныеНаУдаление;
|ДокументОбработки = Документ.НашДокумент.ТекущийДокумент;
|Заказ = Документ.НашДокумент.ОбщийЗаказ;
|Клиент = Документ.НашДокумент.Клиент;
|Код = Документ.НашДокумент.Код;
|Кво = Документ.НашДокумент.Кол;
|Условие (Заказ = Intercars_30);
|Группировка ДокументОбработки;
|Группировка Код;
|Функция Клв=Сумма(Кол);
|""//}}ЗАПРОС
;
zetovich
Цитата(BlackSun @ 03.08.09, 19:27) необходимо зарегистрироваться для просмотра ссылки
Запрос = СоздатьОбъект(""Запрос"");

ТекстЗапроса =
""//{{ЗАПРОС(Запрос1)
|Период с НачДата по КонДата;
|ОбрабатыватьДокументы Проведенные;
|Обрабатывать НеПомеченныеНаУдаление;

|ДокументОбработки = Документ.НашДокумент.ТекущийДокумент;
|Заказ = Документ.НашДокумент.ОбщийЗаказ;
|Клиент = Документ.НашДокумент.Клиент;
|Код = Документ.НашДокумент.Код;
|Кво = Документ.НашДокумент.Кол;
|Условие (Заказ = Intercars_30);
|Группировка ДокументОбработки;
|Группировка Код;
|Функция Клв=Сумма(Кол);
|""//}}ЗАПРОС
;

вот инетерсно какова вероятность то что документ проведен и помечен на удаление?
хакерок
Цитата(BlackSun @ 03.08.09, 19:27) необходимо зарегистрироваться для просмотра ссылки
Запрос = СоздатьОбъект(""Запрос"");

ТекстЗапроса =
""//{{ЗАПРОС(Запрос1)
|ОбрабатыватьДокументы все;
|ДокументОбработки = Документ.НашДокумент.ТекущийДокумент;
|Заказ = Документ.НашДокумент.ОбщийЗаказ;
|Клиент = Документ.НашДокумент.Клиент;
|Код = Документ.НашДокумент.Код;
|Кво = Документ.НашДокумент.Кол;
|Условие (Заказ = Intercars_30);
|Группировка ДокументОбработки;
|Группировка Код;
|""//}}ЗАПРОС
;


Будем считать что заказы просто вносяться и их не отмечают на удаление если хотят они сразу
удаляют( лишние автозапчасти никому не нужны)
Суммировать повторяющиеся позиции не нужно.


Хочу задать несколько вопросов


1. Имет ли право на жизнь поправленный мною запрос
2. Что понимается под этой строчкой
|ДокументОбработки = Документ.НашДокумент.ТекущийДокумент;
Тоесть мне не нужно не какойто конкретный заказ а выбрать все заказы
которые есть в базе и у которых В шапке поле заказ = Intercars_30
(Intercars_30 означает объденённый заказ на фирму Intercars за 30 неделю)

3. Я так понимаю запрос выбирает в память только те поля которые указаны
в Группировка как В табличной часте добраться до Код , Количества и Клиента
В табличной части указать Код , Кво, Клиент ведь ничего не покажет.

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

ДокументОбработки Код

А мне нужно выбрать в диалоге "Intercars_30"
и получить выборку

Код Кво Клиент

перебором из всех заказов

Вот это ж не сработает:

ДокументОбработки.Код ДокументОбработки.Количество ДокументОбработки.Клиент
Vofka
Цитата
как В табличной часте добраться до Код , Количества и Клиента


Запрос.Код
Запрос.Кво
Запрос.Клиент
хакерок
|ОбрабатыватьДокументы все;
|ДокументОбработки = Документ.Заказ.ТекущийДокумент;
|Заказ = Документ.Заказ.ОбщийЗаказ;
|Клиент = Документ.Заказ.Клиент;
|Код = Документ.Заказ.Код;
|Кво = Документ.Заказ.Количество;
|Условие (Заказ = ВыбОбщийЗаказ);
|Группировка ДокументОбработки;

Вообще ничего не выберает из базы
Vofka
А так?



|ОбрабатыватьДокументы все;
|ДокументОбработки = Документ.Заказ.ТекущийДокумент;
|Заказ = Документ.Заказ.ОбщийЗаказ;
|Клиент = Документ.Заказ.Клиент;
|Код = Документ.Заказ.Код;
|Кво = Документ.Заказ.Количество;
|Условие (ВыбОбщийЗаказ в Заказ);
|Группировка ДокументОбработки;
Batchir
Цитата(хакерок @ 04.08.09, 10:22) необходимо зарегистрироваться для просмотра ссылки
(Intercars_30 означает объденённый заказ на фирму Intercars за 30 неделю)

64000000.gif фигасе поставлен учет, каждую неделю создается один и тот же новый контрагент wacko.gif
хакерок
Цитата(Batchir @ 04.08.09, 14:29) необходимо зарегистрироваться для просмотра ссылки
64000000.gif фигасе поставлен учет, каждую неделю создается один и тот же новый контрагент wacko.gif

Отдельно список Фирм поставщиков отдельно недели от 01 до 51 а сделать строку например Kejparts_30 не такуж и сложно.
хакерок
Цитата(Batchir @ 04.08.09, 14:29) необходимо зарегистрироваться для просмотра ссылки
64000000.gif фигасе поставлен учет, каждую неделю создается один и тот же новый контрагент wacko.gif

Просто делать дом из готовых плит 1С проше чем делать плиты вместе с домом поэтому у меня взгляд на 1С абсолютно не типичный такой как тербует жизнь а не бухгалтер.
Vofka
та шо, работает мой запрос?

ЗЫ. Нафик посты плодить?
Batchir
Цитата(хакерок @ 04.08.09, 13:50) необходимо зарегистрироваться для просмотра ссылки
Просто делать дом из готовых плит 1С проше чем делать плиты вместе с домом поэтому у меня взгляд на 1С абсолютно не типичный такой как тербует жизнь а не бухгалтер.

no comments!
хакерок
Цитата(Vofka @ 04.08.09, 14:51) необходимо зарегистрироваться для просмотра ссылки
та шо, работает мой запрос?


ничего не выдаёт. даже ошибок
хакерок
Можно кому то выслать наработаное чтоб посмотрели в чём остановка?
Batchir
Цитата(хакерок @ 04.08.09, 14:41) необходимо зарегистрироваться для просмотра ссылки
Можно комуто выслать чтоб посмотрели

Заливай на обменник и ссылку в студию, и описание дай чтоб голову не ломать (где, что посмотреть) ...
хакерок
Цитата(Batchir @ 04.08.09, 15:44) необходимо зарегистрироваться для просмотра ссылки
Заливай на обменник и ссылку в студию, и описание дай чтоб голову не ломать (где, что посмотреть) ...


Значить запускаете затем

1 Нажимаете кнопку "Все заказы"
там показывает 2 заказа 1 заказ одного клиента другой другого
посмотрите их

2 Затем нажимаете Кнопку "Объединение Заказов"

Цель она должна выдать список всех заказываемых позиций всех Клиентов

Ссылка

необходимо зарегистрироваться для просмотра ссылки
Batchir
1. Определи что бы документ двигал хотябы по оперативному учету.
2. Реализуй все таки проведение документа(что бы при нажатии ОК у документа появлялся флажек)
3. Установи дату актуальности итогов !!!
4. Вот исправленный твой код:


Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
//
|ОбрабатыватьДокументы все;
|ДокументОбработки = Документ.Заказ.ТекущийДокумент;
|Заказ = Документ.Заказ.ОбщийЗаказ;
|Клиент = Документ.Заказ.Клиент;
|Код = Документ.Заказ.Код;
|Кво = Документ.Заказ.Количество;
|Условие (Заказ = ВыбОбщийЗаказ);
|Группировка Код;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей ОбщийЗаказ
Таб.ВывестиСекцию("ОбщийЗаказ");
КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");



5. В секции ОбщийЗаказ использовать нужно не ДокументОбработки.Код, а Запрос.Код

ИМХО, хернёй занимаешся, если для ведения учета - бери ТиС и не мучайся(всё равно ничего путёвого не выйдет). Если для узучения 1С-ки, тоже бери типовую и дорабатывай её, параллельно смотря как это делают знающие люди.
хакерок
Цитата(Batchir @ 04.08.09, 18:23) необходимо зарегистрироваться для просмотра ссылки
1. Определи что бы документ двигал хотябы по оперативному учету.
2. Реализуй все таки проведение документа(что бы при нажатии ОК у документа появлялся флажек)
3. Установи дату актуальности итогов !!!
4. Вот исправленный твой код:


Все эти пункты чуть позже для начала самое важное внести из текстовых файлов заказы от клиентов и отправить общий заказ ... это важно все остальное уже не столь существенно ...всё остальное позже ...
После отправки заказа нужно получить ответ что из заказаного приедет.
Batchir
Цитата(хакерок @ 04.08.09, 17:54) необходимо зарегистрироваться для просмотра ссылки
Все эти пункты чуть позже для начала самое важное внести из текстовых файлов заказы от клиентов и отправить общий заказ ... это важно все остальное уже не столь существенно ...всё остальное позже ...
После отправки заказа нужно получить ответ что из заказаного приедет.

Ну так делай это в Тисе, потом сам увидишь сколько нужного тебе уже реализовано.
хакерок
Цитата(Batchir @ 04.08.09, 18:23) необходимо зарегистрироваться для просмотра ссылки
4. Вот исправленный твой код:
|ОбрабатыватьДокументы все;
|ДокументОбработки = Документ.Заказ.ТекущийДокумент;
|Заказ = Документ.Заказ.ОбщийЗаказ;
|Клиент = Документ.Заказ.Клиент;
|Код = Документ.Заказ.Код;
|Кво = Документ.Заказ.Количество;
|Условие (Заказ = ВыбОбщийЗаказ);
|Группировка Код;


Всё исправил запроос ничего не выдаёт. Замое нужное .



Самое важное в этой задаче импорт из текстовых файлов заказов клиентов(никакого вбития вручную) сохранение их (для разбора полётов чтоб клиетну чётко сказать вот твой заказ заказывал забирай и плати) обединение и отправка на фирму поставщика ...это начало задачи.. в готовых конфигурация это совсем не удобно или вообще не пахнет. В ТИС Можно внести Фирмы Поставщики и Клиенты и всё...а всё остальное руками ... В ТИС Есть заявка на поставку но она связана с Номенклатурой которой в данной задаче нет. Тоесть здесь больше задача использовать 1С для хранения и обработки информации + взаиморасчёт с клиентами который на регистрах реализовать не сложно .
Batchir
Цитата(хакерок @ 05.08.09, 9:22) необходимо зарегистрироваться для просмотра ссылки
Всё исправил запроос ничего не выдаёт. Замое нужное .


Выполни все пункты (5 мин. делов) и будет тебе счастье
хакерок
Цитата(Batchir @ 05.08.09, 10:49) необходимо зарегистрироваться для просмотра ссылки
Выполни все пункты (5 мин. делов) и будет тебе счастье

Спасибо дружище заработало

Тоесть строка

ОбрабатыватьДокументы все; не означает что будут перебираться все документы
оно берёт только документы которые проходят либо по бух либо по оперативному учёту.

Думаю продолжить вопросы из этой задачи или не стоит форум забивать?
хакерок
Цитата(Batchir @ 05.08.09, 10:49) необходимо зарегистрироваться для просмотра ссылки
Выполни все пункты (5 мин. делов) и будет тебе счастье


Сразу возникла проблемка

Заказ №1 Kostik

6 PK 6523 6
B17023PR 45
12.2345 14

Заказ №2 Himik

B17023PR 1


Запрос выдает

12.2345 14 Kostik
6 PK 6523 10 Kostik
B17023PR 1 Нimik

Это означает что Kostikа позиция B17023PR 45 позиция ушла в некуда тоесть Kostik остаёться с носом.
Batchir
Попробуй


|ОбрабатыватьДокументы все;
|ДокументОбработки = Документ.Заказ.ТекущийДокумент;
|Заказ = Документ.Заказ.ОбщийЗаказ;
|Клиент = Документ.Заказ.Клиент;
|Код = Документ.Заказ.Код;
|Количество = Документ.Заказ.Количество;
|Условие (Заказ = ВыбОбщийЗаказ);
|Функция Кво = Сумма(Количество);
|Группировка Код;
хакерок
Цитата(Batchir @ 05.08.09, 12:47) необходимо зарегистрироваться для просмотра ссылки
|Функция Кво = Сумма(Количество);


Ещё хуже

12.2345 14 Kostik
6 PK 6523 10 Kostik
B17023PR 46 Нimik

Тоесть B17023PR 45 штук не на того клиента...

Всётаки нужно прочитать как вообще работает запрос или сделать проведение документа Заказ таким образом чтоб табличная часть добавлялась к другому документу - правельная мысль?
Batchir
Цитата(хакерок @ 05.08.09, 12:13) необходимо зарегистрироваться для просмотра ссылки
Всётаки нужно прочитать как вообще работает запрос или сделать проведение документа Заказ таким образом чтоб табличная часть добавлялась к другому документу - правельная мысль?


Читай - это правильно. А для того что бы разбивало по контрагентам, нужно добавить соответствующую группировку
хакерок
Цитата(Batchir @ 05.08.09, 13:29) необходимо зарегистрироваться для просмотра ссылки
Читай - это правильно. А для того что бы разбивало по контрагентам, нужно добавить соответствующую группировку


Я прихожу к выводу до мометна обработки данных 1С подходит а дальше даже для такой простой задачи инструмента в ней не удобный... Может в 8. язык запросов ближе к SQL
Batchir
Цитата(хакерок @ 05.08.09, 12:51) необходимо зарегистрироваться для просмотра ссылки
Я прихожу к выводу до мометна обработки данных 1С подходит а дальше даже для такой простой задачи инструмента в ней не удобный... Может в 8. язык запросов ближе к SQL


В восьмерке язык запрососв ближе к SQL. А для решения простой задачи просто не хвататет знаний программирования в 1С.
zetovich
ну харе всякий бред мусолить...уже даж и не смешно читать.
Vofka
Цитата
ну харе всякий бред мусолить...уже даж и не смешно читать.


+1

хакерок, почитай книги
хакерок
Цитата(Vofka @ 05.08.09, 15:59) необходимо зарегистрироваться для просмотра ссылки
+1
хакерок, почитай книги


глаза жалко на компьютерное га...
Vofka
я в ауте lol.gif
хакерок
Цитата(Vofka @ 05.08.09, 16:51) необходимо зарегистрироваться для просмотра ссылки
я в ауте lol.gif

Короче придумал как решить задачу поле ОбщийЗаказ прописывать в каждую заказываемую позицию и по нему группировать тогда запрос получаеться человеческий

Тему можно закрыть Всем учасникам Спасибо особено Batchir
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.