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

Тема в разделе "1C и всё что с ней связано", создана пользователем olga13, 13 мар 2012.

  1. olga13

    olga13 Well-Known Member

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

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Если фильтровать по стране не надо, можно вытащить функцией (можно в запросы подставлять свои функции, а не только пользоваться типовыми). Если надо фильтровать - то лучше измерение. Но учтите - придется править проведения по этому регистру и перепроводить имеющиеся документы. Могут вылезти косяки.
     
  3. Hryv

    Hryv Гость

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

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Ну парни! Если понимать, что Страна, это страна поставщика, то сделать реквизит у клиента. Если страна ввоза, то прицепить к партии. И все Ок.

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

    Hryv Гость

    В вопросе прозвучало "получать сведения о стране происхождения товара"

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

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


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

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Вот сразу спец-казуист виден! :)
    Не надо придавать большого значения словам из нежных девичьих уст. Я всегда говорю: женщина думает одно, говорит другое (причем верит во что говорит), а на самом деле все по-третьему. Наверняка нужно в каком-нить отчете остатков товаров показать колонку Партия.Поставщик.Страна.
     
  7. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Не в отчете, а в модуле проведения нужно использовать субконто "Страна происхождения". И привязать его к поставщику нельзя - один и тот же поставщик может продавать товары, ввезенные из разных стран. Если бы можно было вытаскивать через Партия.Страна и проблемы бы не было. А поскольку Страна в табличной части, нужно как-то извращаться. Добавлять измерение не хочется, их и так много. Через запрос долго - в документе 2500-3000 строк.
     
  8. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну раз нету Партия.Страна - добавьте, напишите обработочку, которая всё заполнит, в процедуре создания партии пропишите заполнение страны из таб части.
     
  9. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Уже написала. На учебном примере работает, на реальном объеме данных пишет "Недостаточно памяти". Посему вопрос и возник - может, все-таки лучше измерение добавить?
     
  10. Hryv

    Hryv Гость

    Если у вас
    то зачем извращаться, если
    :)
     
  11. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    текст обработки в студию - я такое видел только при циклическом создании хреновой тучи объектов.
     
  12. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0

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

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

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

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

    КонецФункции
     
  13. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Мда - тут налицо действительно превышение максимальных размеров списка.

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

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

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Это идея, можно попробовать.
     
  15. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    puh14 все хорошо, только партии нужно искать по конкретному владельцу
     
  16. Allexei

    Allexei Well-Known Member

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

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Я тоже так думаю - лучше два справочника. Первый - справочник партий, второй - подчиненный, с набором реквизитов, характеризующих строку партии.

    На эти грабли я уже наступала :wacko:
     
  18. Hryv

    Hryv Гость

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

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


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

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

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

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

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

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Это нужно в том случае, если в приходном документе один и тот же товар по разной цене или разных производителей.

    А мне в этом случае и не нужно измерение. Имея сведения о партии и строке партии можно из справочника получить все остальное.

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

    Можно данные поддерживать в актуальном состоянии - при проведении документа, например.
     
  20. Hryv

    Hryv Гость

    Ого, оказывается и так бывает :)

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

Поделиться этой страницей