|
v7: Выгрузка из ТиС | ☑ | ||
---|---|---|---|---|
0
Alex1979rak
19.06.14
✎
13:17
|
Здравствуйте, уважаемые коллеги.
Нужна ваша помощь. Есть типовая конфа ТиС 7.70.942. Из нее нужно получать выгрузку информации для интернет-магазина в формате файла CSV. За основу взял типовую обработку "Печать прайса". Вот фрагменты кода обработки: // текст запроса по выбранным ценам ТекстЗапроса = "//{{ЗАПРОС(ОтборЦен) |Период с ДатаОтчета по ДатаОтчета; |Номенклатура = Справочник.Цены.Владелец; |Тип = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |Единица = Справочник.Цены.Единица; |Валюта = Справочник.Цены.Валюта; |Функция ЦенаСумма = Сумма(Цена); |Группировка Номенклатура Упорядочить по Номенклатура.Наименование; |Группировка Тип; |"//}}ЗАПРОС ; Если ПоНаличию = 1 Тогда ТекстЗапросаОстатков = " |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура; |Количество = Регистр.ОстаткиТМЦ.Количество; | |Функция КоличествоКонОст = КонОст(Количество); | |Группировка Номенклатура без групп;"; ЗапросПоОстаткам = СоздатьОбъект("Запрос"); Если ЗапросПоОстаткам.Выполнить(ТекстЗапросаОстатков) = 0 Тогда Возврат; КонецЕсли; СписокНоменклатуры = СоздатьОбъект("СписокЗначений"); Пока ЗапросПоОстаткам.Группировка(1) = 1 Цикл Если ЗапросПоОстаткам.КоличествоКонОст > 0 Тогда СписокНоменклатуры.ДобавитьЗначение(ЗапросПоОстаткам.Номенклатура); КонецЕсли; КонецЦикла; Если СписокНоменклатуры.РазмерСписка() = 0 Тогда Предупреждение("Заданным условиям фильтра не удовлетворяет ни одна позиция номенклатуры.",60); Возврат; КонецЕсли; ТекстЗапроса = ТекстЗапроса + "Условие(Номенклатура в СписокНоменклатуры);" КонецЕсли; В алгоритме обработки видно, что запросом из справочника Цены сначала отбирается информация о самом товаре и о ценах на товар. Потом, если прайс строится по товару, который есть в наличии, то дополнительно собирается список значений из регистра ОстаткиТМЦ. Вопрос 1: как можно объединить данные о товаре, цене и остатке? Вопрос 2: возможно ли данные в файл CSV записывать по определенной структуре в ячейки как это хранится в экселе? |
|||
1
Ясный перец
19.06.14
✎
13:24
|
В глобальном модуле ТиС есть 2 функции: глПолучитьЦену() и глВернутьЦену.
Попробуй воспользоваться какой-нибудь из них при обработке запроса по остаткам. А вот запрос по ценам я бы не делал вообще... (но это только моё мнение) |
|||
2
Alex1979rak
19.06.14
✎
13:31
|
(1) за идею спасибо. но все таки хочется для себя понять можно ли одним запросом вытянуть информацию о товаре, цене и остатке?
|
|||
3
Ясный перец
19.06.14
✎
13:41
|
Очевидно, что нельзя.
И да - из глобального более подходит функция глВернутьЦену() |
|||
4
mehfk
19.06.14
✎
13:48
|
(2) Да, если вместо черного запроса использовать прямой запрос.
|
|||
5
Pit0n_08
19.06.14
✎
13:54
|
Можно, только нужно ли? Если для выгрузки информации достаточно данных по остаткам на ТА, то в запрос остатки включать смысла нет - получишь их при обходе результатов. Если нужны только позиции с остатками, то танцевать надо от запроса к регистру "ОстаткиТМЦ". Будет как-то быстрее (речь о черном запросе). ИМХО
|
|||
6
Alex1979rak
19.06.14
✎
13:55
|
(5) согласен. была такая мысль.
|
|||
7
Alex1979rak
19.06.14
✎
13:56
|
(4) прямыми запросами пользоваться не умею.
|
|||
8
Злой Бобр
19.06.14
✎
13:59
|
(2) Можно. Тебе ж уже даже функции указали. Добавляй их в запрос по остаткам и будет тебе счастье.
|
|||
9
Ёпрст
19.06.14
✎
14:00
|
(2) Можно. И обычным чорным запросом в том числе.
|
|||
10
DCKiller
19.06.14
✎
14:01
|
А если так?
"Товар = Регистр.ОстаткиТМЦ.Товар, Справочник.Цены.Владелец; Количество = Регистр.ОстаткиТМЦ.Количество; Тип = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |Единица = Справочник.Цены.Единица; |Валюта = Справочник.Цены.Валюта; |Функция ЦенаСумма = Сумма(Цена); |Функция КоличествоКонОст = КонОст(Количество); |Группировка Номенклатура Упорядочить по Номенклатура.Наименование Без Групп; |Группировка Тип;" |
|||
11
Ясный перец
19.06.14
✎
14:02
|
(10) Не взлетит. Цена - реквизит периодический
|
|||
12
Alex1979rak
19.06.14
✎
14:03
|
(10) я так пробовал. не работает.
|
|||
13
DCKiller
19.06.14
✎
14:04
|
(11) Так он там в запросе цену получает!
|
|||
14
DCKiller
19.06.14
✎
14:04
|
(12) Что не работает? Запрос пустой или что?
|
|||
15
Ясный перец
19.06.14
✎
14:04
|
(13) Не получает! ))
Оптимально штатными методами как посоветовали в (5). |
|||
16
Alex1979rak
19.06.14
✎
14:06
|
(14) результат не тот, который нужен.
|
|||
17
Pit0n_08
19.06.14
✎
14:06
|
(10) я сейчас заплачу... (ударение на 2 гласной)
|
|||
18
DCKiller
19.06.14
✎
14:14
|
(15) в (5) первая половина вообще для мозга неусваеваема. Если имелось в виду, что нужно получить данные из справочника цен, включая номенклатуру, потом сделать запрос к остаткам, и выгружая данные из первого запроса, позиционироваться на результатах второго методом Получить() для выдергивания из него остатков - то да.
|
|||
19
Pit0n_08
19.06.14
✎
14:22
|
(18) Обходя итоги запроса к номенклатуре получить Регистр.ОстаткиТМЦ.СводныйОстаток(,Запрос.Товар,,,"Количество") без всяких вторых запросов.
|
|||
20
Ясный перец
19.06.14
✎
14:22
|
(18) ...неусваеваема...
Но мы же умные люди? И поди разберёмся, что к чему? )) |
|||
21
DCKiller
19.06.14
✎
14:26
|
(19) Ага, в цикле. На каждом шаге в базу лезть.
|
|||
22
Pit0n_08
19.06.14
✎
14:42
|
(21) не обижайтесь, но остатки на ТА как пенки а молоке - всегда сверху...
|
|||
23
Pit0n_08
19.06.14
✎
14:45
|
+(22) в молоке
|
|||
24
Злой Бобр
19.06.14
✎
16:49
|
(22) А еще "лучше" в цикле вызывать запрос. Эх ... молодежь. )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |