|
v7: Сделал выгрузку из базы. Попинайте. | ☑ | ||
---|---|---|---|---|
0
bizon2008
25.08.11
✎
15:38
|
Сделал выгрузку из базы. Попинайте. А то давно я шашек в руках не держал. Работает. Но что-то мне не нравится, не пойму. Интуиция.
Заранее признателен. Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; СпрЕдиницы = СоздатьОбъект("Справочник.Единицы"); СпрЦены = СоздатьОбъект("Справочник.Цены"); тзТовар.Очистить(); тзТовар.НоваяКолонка("Товар"); тзТовар.НоваяКолонка("Ед"); тзТовар.НоваяКолонка("Цена"); тзТовар.НоваяКолонка("ШтрихКод"); тзТовар.НоваяКолонка("Кф"); тзТовар.УстановитьПараметрыКолонки("Товар", , , , ,60); тзТовар.УстановитьПараметрыКолонки("Ед", , , , ,5); тзТовар.УстановитьПараметрыКолонки("Цена","Число",10,2, ,15); тзТовар.УстановитьПараметрыКолонки("Ед", , , , ,5); тзТовар.УстановитьПараметрыКолонки("ШтрихКод", , , , ,15); тзТовар.УстановитьПараметрыКолонки("Кф","Число",10,3, ,10); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Товар = Регистр.ОстаткиТоваров.Товар; |Склад = Регистр.ОстаткиТоваров.Склад; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция ОстатокТовараКонОст = КонОст(ОстатокТовара); |Группировка Товар без групп; |Условие(Склад = ВыбСклад); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка(1) = 1 Цикл тзТовар.НоваяСтрока(); тзТовар.Товар = Запрос.Товар; СпрЕдиницы.ИспользоватьВладельца(Запрос.Товар); Если СпрЕдиницы.НайтиЭлемент(Запрос.Товар.ЕдиницаПоУмолчанию)=1 Тогда СпрЕдиницы.ТекущийЭлемент(); тзТовар.Ед = СпрЕдиницы.ТекущийЭлемент(); тзТовар.ШтрихКод = СпрЕдиницы.ШтрихКод; тзТовар.Кф = СпрЕдиницы.Коэффициент; Иначе Сообщить("Проблема при поиске элемента" + Запрос.Товар + "в справочнике единицы измерения"); КонецЕсли; СпрЦены.ИспользоватьВладельца(Запрос.Товар); Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",ВыбТипЦены, 0)=1 Тогда СпрЦены.ТекущийЭлемент(); тзТовар.Цена = СпрЦены.Цена.Получить(ВыбКонПериода); Иначе Сообщить("Проблема при поиске элемента" + Запрос.Товар + "в справочнике цены"); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
filh
25.08.11
✎
15:40
|
а это что?
Если СпрЕдиницы.НайтиЭлемент(Запрос.Товар.ЕдиницаПоУмолчанию)=1 Тогда СпрЕдиницы.ТекущийЭлемент(); |
|||
2
1Сергей
25.08.11
✎
15:40
|
тзТовар.НоваяКолонка("Товар");
тзТовар.НоваяКолонка("Ед"); тзТовар.НоваяКолонка("Цена"); тзТовар.НоваяКолонка("ШтрихКод"); тзТовар.НоваяКолонка("Кф"); тзТовар.УстановитьПараметрыКолонки("Товар", , , , ,60); тзТовар.УстановитьПараметрыКолонки("Ед", , , , ,5); тзТовар.УстановитьПараметрыКолонки("Цена","Число",10,2, ,15); тзТовар.УстановитьПараметрыКолонки("Ед", , , , ,5); тзТовар.УстановитьПараметрыКолонки("ШтрихКод", , , , ,15); тзТовар.УстановитьПараметрыКолонки("Кф","Число",10,3, ,10); можно сократить вдвое Если СпрЕдиницы.НайтиЭлемент(Запрос.Товар.ЕдиницаПоУмолчанию)=1 Тогда СпрЕдиницы.ТекущийЭлемент(); Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",ВыбТипЦены, 0)=1 Тогда СпрЦены.ТекущийЭлемент(); Чушь! |
|||
3
filh
25.08.11
✎
15:40
|
Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",ВыбТипЦены, 0)=1 Тогда
СпрЦены.ТекущийЭлемент(); |
|||
4
bizon2008
25.08.11
✎
15:41
|
(2)Можно. Но так наглядней.
Ага. Точно перебор уже. |
|||
5
bizon2008
25.08.11
✎
15:43
|
Если СпрЕдиницы.НайтиЭлемент(Запрос.Товар.ЕдиницаПоУмолчанию)=1 Тогда
СпрЕдиницы.ТекущийЭлемент(); Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",ВыбТипЦены, 0)=1 Тогда СпрЦены.ТекущийЭлемент(); Угу. Перестарался. Привычка. |
|||
6
bizon2008
25.08.11
✎
15:46
|
Меня еще вот эта строчка смущает.
Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",ВыбТипЦены, 0)=1 Тогда Тут ноль правильно. Или лучше единица? |
|||
7
filh
25.08.11
✎
15:47
|
(6) смотря что надо...
У тебя СП украли? |
|||
8
1Сергей
25.08.11
✎
15:48
|
(6) ноль - правильно
|
|||
9
bizon2008
25.08.11
✎
15:51
|
(7)Там трактовка неоднозначная.
|
|||
10
filh
25.08.11
✎
15:53
|
(9) что неоднозначного увидел?
<ФлагГлобальногоПоиска> - флаг поиска: 0 - поиск выполняется в пределах подчинения справочника, 1 - поиск выполняется по всему справочнику. |
|||
11
bizon2008
25.08.11
✎
15:55
|
ВыбратьЭлементыПоРеквизиту(<?>,,,)
Синтаксис: ВыбратьЭлементыПоРеквизиту(<ИмяРеквизита>,<Значение>,<РежимИерархии>,<РежимГрупп>) Назначение: Открыть выборку элементов справочника по значению реквизита. Возвращает: 1 - если действие выполнено и в выборке есть хотя бы один элемент; 0 - если действие не выполнено или в выборке нет ни одного элемента. Параметры: <ИмяРеквизита> - строка с именем реквизита, по которому выполняется выборка; <Значение> - значение реквизита для выборки; <РежимИерархии> - как выбирать: 1 - выбирать элементы с учетом иерархии, 0 - выбирать элементы без учета иерархии (необязателен, по умолчанию - 1); <РежимГрупп> - что выбирать: 1 - выбирать среди групп справочника, 0 - выбирать только среди элементов справочника. Замечание: Метод можно использовать только для реквизитов с установленным признаком ''Сортировка''. Метод можно использовать только для объектов, созданных функцией СоздатьОбъект. |
|||
12
filh
25.08.11
✎
15:59
|
(11) ты это, заканчивай бухать или закусывай. Твоё ВыбратьЭлементыПоРеквизиту ни раз нет в гКоде из (0).
|
|||
13
Black Dragon
25.08.11
✎
16:09
|
(12) да ну нет же, все нормально, есть
СпрЦены.ИспользоватьВладельца(Запрос.Товар); Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",ВыбТипЦены, 0)=1 Тогда СпрЦены.ТекущийЭлемент(); тзТовар.Цена = СпрЦены.Цена.Получить(ВыбКонПериода); Иначе Сообщить("Проблема при поиске элемента" + Запрос.Товар + "в справочнике цены"); КонецЕсли; |
|||
14
bizon2008
25.08.11
✎
16:09
|
(12)А ну да. Прошу прощения. Но все рано неоднозначно.
Если я указываю СпрЦены.ИспользоватьВладельца(Запрос.Товар); и ставлю 1, то что пофик? Все равно по всему справочнику бегать будет? |
|||
15
Black Dragon
25.08.11
✎
16:10
|
наверное с 8 перепутал :)
|
|||
16
Ёпрст
25.08.11
✎
16:11
|
(14) да
|
|||
17
Black Dragon
25.08.11
✎
16:12
|
может вложенными запросами надо выбрать из остальных двух?
|
|||
18
Black Dragon
25.08.11
✎
16:15
|
однако если верить встроенной справке
НайтиПоРеквизиту(<?>,,); Синтаксис: НайтиПоРеквизиту(<ИмяРеквизита>,<Значение>,<ФлагГлобальногоПоиска>) Назначение: Найти элемент справочника по значению реквизита. Возвращает: 1 - если действие выполнено; 0 - если действие не выполнено (элемент не найден). Параметры: <ИмяРеквизита> - строка с наименованием реквизита; <Значение> - значение реквизита для поиска; <ФлагГлобальногоПоиска> - флаг поиска: 0 - поиск выполняется в пределах подчинения справочника, 1 - поиск выполняется по всему справочнику. Замечание: Метод можно использовать только для реквизитов с установленным признаком ''Сортировка''. Метод можно использовать только для объектов, созданных функцией СоздатьОбъект. |
|||
19
bizon2008
25.08.11
✎
16:26
|
(16)Круто. Всегда ставил ноль и даже не задумывался.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |