7.7 Количество Измерений В Регистре

olga13

Well-Known Member
10.10.2008
208
0
#1
Добрый день! В продолжение темы о регистрах. Что-то никто не отвечает, решила вынести в отдельную тему.
Нужен совет, как лучше поступить.
Имеется регистр остатков "Остатки товаров на комиссии" со следующими измерениями:
Фирма, Комитент, Договор, Товар, Партия, СтрокаПартии.
Есть необходимость для документа "Отчет комиссионера" получать сведения о стране происхождения товара. Получить их можно из приходных документов.
Вопрос: что лучше - добавить в регистр измерение "Страна" либо крутить в цикле запрос, который из приходов будет вытаскивать нужные сведения?
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#2
Если фильтровать по стране не надо, можно вытащить функцией (можно в запросы подставлять свои функции, а не только пользоваться типовыми). Если надо фильтровать - то лучше измерение. Но учтите - придется править проведения по этому регистру и перепроводить имеющиеся документы. Могут вылезти косяки.
 
H

Hryv

Гость
#3
У вас Партия - это что? Справочник или документ? Нельзя ли там хранить Страну?
В запросе тогда будет достаточно удобно с ней работать
 

Дайнеко

Well-Known Member
19.11.2009
951
0
53
Минск
#4
Ну парни! Если понимать, что Страна, это страна поставщика, то сделать реквизит у клиента. Если страна ввоза, то прицепить к партии. И все Ок.

Чем меньше измерений регистра, тем лучше со всех сторон. "СтрокаПартии" непонятный реквизит.
 
H

Hryv

Гость
#5
Ну парни! Если понимать, что Страна, это страна поставщика, то сделать реквизит у клиента. Если страна ввоза, то прицепить к партии. И все Ок.
В вопросе прозвучало "получать сведения о стране происхождения товара"

"СтрокаПартии" непонятный реквизит.
О! Я невнимательно посмотрел и его не заметил.
Раз так, то очевидно
Партия - приходный док
СтрокаПартии - его строка

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


Если же там все иначе организовано, то зря :)
 

Дайнеко

Well-Known Member
19.11.2009
951
0
53
Минск
#6
В вопросе прозвучало "получать сведения о стране происхождения товара"
Вот сразу спец-казуист виден! :)
Не надо придавать большого значения словам из нежных девичьих уст. Я всегда говорю: женщина думает одно, говорит другое (причем верит во что говорит), а на самом деле все по-третьему. Наверняка нужно в каком-нить отчете остатков товаров показать колонку Партия.Поставщик.Страна.
 

olga13

Well-Known Member
10.10.2008
208
0
#7
Я всегда говорю: женщина думает одно, говорит другое (причем верит во что говорит), а на самом деле все по-третьему. Наверняка нужно в каком-нить отчете остатков товаров показать колонку Партия.Поставщик.Страна.
Не в отчете, а в модуле проведения нужно использовать субконто "Страна происхождения". И привязать его к поставщику нельзя - один и тот же поставщик может продавать товары, ввезенные из разных стран. Если бы можно было вытаскивать через Партия.Страна и проблемы бы не было. А поскольку Страна в табличной части, нужно как-то извращаться. Добавлять измерение не хочется, их и так много. Через запрос долго - в документе 2500-3000 строк.
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#8
Ну раз нету Партия.Страна - добавьте, напишите обработочку, которая всё заполнит, в процедуре создания партии пропишите заполнение страны из таб части.
 

olga13

Well-Known Member
10.10.2008
208
0
#9
Ну раз нету Партия.Страна - добавьте, напишите обработочку, которая всё заполнит, в процедуре создания партии пропишите заполнение страны из таб части.
Уже написала. На учебном примере работает, на реальном объеме данных пишет "Недостаточно памяти". Посему вопрос и возник - может, все-таки лучше измерение добавить?
 
H

Hryv

Гость
#10

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#11
Уже написала. На учебном примере работает, на реальном объеме данных пишет "Недостаточно памяти". Посему вопрос и возник - может, все-таки лучше измерение добавить?
текст обработки в студию - я такое видел только при циклическом создании хреновой тучи объектов.
 

olga13

Well-Known Member
10.10.2008
208
0
#12
Если у вас

то зачем извращаться, если


:wacko:

Может, я туплю, но я не представляю как быстро получить значение Страны имея эти данные. Ведь СтрПартии не всегда равна номеру строки приходного документа. В идеале они совпадают, но если документ редактировался (удалялись строки, сортировались и т.д.), то номера не совпадают. Сначала нужно каким-то образом спозиционироваться на нужную строку в приходе.

Добавлено:
текст обработки в студию - я такое видел только при циклическом создании хреновой тучи объектов.
Вот функция из глобального модуля, которая возвращает список значений.

Код:
Функция глПолучитьАтрибутыПартии(Товар, Партия, СтрПартии, Рег) Экспорт
глСписок = СоздатьОбъект("СписокЗначений");
РегБН = СоздатьОбъект("Регистр." + Рег);
Если (Рег = "ОстаткиТоваровОтгруженных") или (Рег = "ОстаткиТоваровНаКомиссии") Тогда
РегБН.УстановитьФильтр(,,,Товар,Партия,СтрПартии);
Иначе
РегБН.УстановитьФильтр(,Товар,Партия,СтрПартии);
КонецЕсли;
РегБН.ВыбратьДвижения(Партия.ДатаДок, Партия.ДатаДок);
Пока РегБН.ПолучитьДвижение() = 1 Цикл
Если РегБН.СтрПартии = СтрПартии Тогда
Если Партия.ПолучитьСтрокуПоНомеру(РегБН.НомерСтроки()) = 1 Тогда
глСписок.ДобавитьЗначение(Партия.Контрагент);
глСписок.ДобавитьЗначение(Партия.Договор);
глСписок.ДобавитьЗначение(Партия.ТТН);
глСписок.ДобавитьЗначение(Партия.Страна);
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;

Возврат глСписок;

КонецФункции
 

puh14

Well-Known Member
11.07.2008
1 412
0
НеРезиновая
#13
Мда - тут налицо действительно превышение максимальных размеров списка.

Я имел ввиду другое - делаете в справочнике партия ТМЦ дополнительный реквизит типа справочник страны (или как там у вас страна хранится) и обработкой заполняете его например так:

Код:
Партия = СоздатьОбъект("Справочник.партииТМЦ");
Док = СоздатьОбъект("документ.ПоступлениеТМЦ");
док.ВыбратьДокументы();
Пока док.ПолучитьДокумент() = 1 Цикл
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если Партия.НайтиЭлемент(Док.Партия) >0 Тогда
Партия.Страна = Док.Страна;
Партия.Записать();
КонецЕсли;
КонецЦикла;
КонецЦикла;
И всё - у вас проствлены страны в партии.
 

Allexei

Well-Known Member
02.05.2008
322
1
30
Москва
#16
Если в регистре остатков движение будет происходить по стране как в плюс так и в минус то лучше сделать измерением регистра. Если нет гарантии того что регистр "будет закрываться по стране", добавлять в измерение нельзя ибо через некоторое время заметите что регистр начнет пухнуть, причем пухнуть очень быстро. С чем это связано. Приведу упрощенный пример. Допустим у нас есть регистр остатков "Остатки" с двумя измерениями "Товар" и "Страна" и ресурсом "Количество". Есть документы поступления с указанием страны и есть документы расхода без указания страны. Регистр остатков представляет собой виртуальную таблицу которая состоит из двух реальных - первая это таблица оборотов по регистру и вторая - таблица срезов актуальных остатков по регистру. Как получаются остатки на произволную дату: получаем наиболее близлежащий срез по второй таблице и в зависимости от положения на оси времени этого среза либо отнимае, либо прибавляем оборот по первой таблице. В нашем случае в таблице оборотов все будет относительно ровно, но вот в таблице остатков будут как минимум задвоеные записи(предположим у нас 1 товар и одна страна). Это будут остатки по следующим срезам: Товар_1 Страна_1 количество_1 и Товар_1 нетстраны Количество. А если у нас 1000 наименование и 10-20 стран... В общем проблем не оберетесь. Как то так...
 

olga13

Well-Known Member
10.10.2008
208
0
#17
все хорошо, только партии нужно искать по конкретному владельцу
Я тоже так думаю - лучше два справочника. Первый - справочник партий, второй - подчиненный, с набором реквизитов, характеризующих строку партии.

Если нет гарантии того что регистр "будет закрываться по стране", добавлять в измерение нельзя ибо через некоторое время заметите что регистр начнет пухнуть
На эти грабли я уже наступала :wacko:
 
H

Hryv

Гость
#18
В идеале они совпадают, но если документ редактировался (удалялись строки, сортировались и т.д.), то номера не совпадают.
Зачем тогда это измерение вообще нужно?
Только если в одном приходе один и тот же товар более чем в одной строке. Однако я лично не понимаю зачем делить остаток этого товара на части? Типа мы не ищем легких путей. Как по мне то СтрокуПартии ф топку

То что puh14 предлагает хороший вариант, но у вас в регистре, как я понял, нет измерения типа "Справочник.партииТМЦ", а Партия это Документ. Поэтому вам это вариант ничем не поможет.


К вашей обработке

Если РегБН.СтрПартии = СтрПартии Тогда - это не имеет смысла так как раньше включен фильтр
вы же не делаете проверок по Товар и Партия

А в отладчике вы ходили? Потому что я в упор не понимаю где там
налицо действительно превышение максимальных размеров списка.
Ведь цикл
Пока РегБН.ПолучитьДвижение() = 1 Цикл
должен всегда только 1 раз проходить и размер списка будет равен 4 (или ни разу и список пустой)

Может причины "Недостаточно памяти" в чем-то другом?

Добавлено:
Я тоже так думаю - лучше два справочника. Первый - справочник партий, второй - подчиненный, с набором реквизитов, характеризующих строку партии.
Оооо! И тут Астапа понесло
Не полодите вы эти справочники потом не разгр*цензура*е, особенно если возникнут проблемы с актуальностью данных (то есть в справочниках будет одно, а в доках другое - вероятность возникновения таких ситуаций хоть иногда стремиться к 100%)
разберитесь с ошибкой и пользуйтесь функцией - будет вам счастье
 

olga13

Well-Known Member
10.10.2008
208
0
#19
Только если в одном приходе один и тот же товар более чем в одной строке. Однако я лично не понимаю зачем делить остаток этого товара на части?
Это нужно в том случае, если в приходном документе один и тот же товар по разной цене или разных производителей.

То что puh14 предлагает хороший вариант, но у вас в регистре, как я понял, нет измерения типа "Справочник.партииТМЦ", а Партия это Документ. Поэтому вам это вариант ничем не поможет.
А мне в этом случае и не нужно измерение. Имея сведения о партии и строке партии можно из справочника получить все остальное.

А в отладчике вы ходили?
Ну естессно ходила. И в отладчике крутила, и замер производительности делала. Причину зависания не нашла.

особенно если возникнут проблемы с актуальностью данных
Можно данные поддерживать в актуальном состоянии - при проведении документа, например.
 
H

Hryv

Гость
#20
Это нужно в том случае, если в приходном документе один и тот же товар по разной цене или разных производителей.
Ого, оказывается и так бывает :)

А мне в этом случае и не нужно измерение. Имея сведения о партии и строке партии можно из справочника получить все остальное.
....
Можно данные поддерживать в актуальном состоянии - при проведении документа, например.
То есть чтобы не искать ошибку, вы готовы создать новый справочник и механизм по его заполнению и чтению из него.
При том, что теоретически чем больше объектов и строк кода, тем больше потенциальных ошибок
И, наконец, та ошибка которая есть сейчас, ведь может еще потом аукнуться. Я лично на 99.99 уверен, что она не в глПолучитьАтрибутыПартии