Форум программистов, компьютерный форум, киберфорум
1С
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/183: Рейтинг темы: голосов - 183, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208

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

12.03.2012, 13:17. Показов 34857. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! В продолжение темы о регистрах. Что-то никто не отвечает, решила вынести в отдельную тему.
Нужен совет, как лучше поступить.
Имеется регистр остатков "Остатки товаров на комиссии" со следующими измерениями:
Фирма, Комитент, Договор, Товар, Партия, СтрокаПартии.
Есть необходимость для документа "Отчет комиссионера" получать сведения о стране происхождения товара. Получить их можно из приходных документов.
Вопрос: что лучше - добавить в регистр измерение "Страна" либо крутить в цикле запрос, который из приходов будет вытаскивать нужные сведения?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.03.2012, 13:17
Ответы с готовыми решениями:

7.7 Порядок Измерений В Регистре Остатков
Добрый день. Хотелось бы узнать, имеет ли значение порядок измерений в регистре остатков? Какой вариант лучше: Товар, Партия,...

Рассчитать количество измерений
Рассчитать, сколько нужно провести измерений давления, чтобы случайная погрешность "е" не превышала 0.01. Предварительно было...

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

39
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
13.03.2012, 15:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Hryv
Зачем тогда это измерение вообще нужно?
... Как по мне то СтрокуПартии ф топку
Мои пять копеек: самая умная мысль. Все туда.
Потом грамотно продумать структуру базы, а не лепить горбатого на ходу.
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
13.03.2012, 15:45
Цитата Сообщение от Дайнеко
а не лепить горбатого на ходу
;)
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
13.03.2012, 16:56
Цитата Сообщение от Hryv
Я лично на 99.99 уверен, что она не в глПолучитьАтрибутыПартии
Вот процедура на которой все виснет:


Код ( (Unknown Language)):
Процедура Страна()
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл

глПолучитьАтрибутыПартии(Товар, Партия, СтрПартии, "ОстаткиТоваровОтгруженных");

Попытка
Страна = глСписок.ПолучитьЗначение(4);
Исключение
Сообщить("Не удалось получить атрибуты для партии " + Партия);
КонецПопытки;

КонецЦикла;
КонецПроцедуры
Где, по-вашему, ошибка?

Причем обрабатывается 1495 строк, а потом "Недостаточно памяти".
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
13.03.2012, 17:22
А долго тест выполняется?

Если не очень долго, то сначала попробуйте так

Попытка
Страна = глСписок.ПолучитьЗначение(4);
глСписок = "";
Исключение
Сообщить("Не удалось получить атрибуты для партии " + Партия);
КонецПопытки;

а я пока еще подумаю

практически 100%, что 1С не удаляет из памяти эти глСписок-и
по крайней мере до завершения цикла

можно еще так попробовать

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Процедура Страна()
Список = СоздатьОбъект("СписокЗначений");
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
 
глПолучитьАтрибутыПартии(Список, Товар, Партия, СтрПартии, "ОстаткиТоваровОтгруженных");
 
Попытка
Страна = Список.ПолучитьЗначение(4);
Список.УдалитьВсе();
Исключение
Сообщить("Не удалось получить атрибуты для партии " + Партия);
КонецПопытки;
 
КонецЦикла;
КонецПроцедуры
 
 
Функция глПолучитьАтрибутыПартии(Список, Товар, Партия, СтрПартии, Рег) Экспорт
//  глСписок = СоздатьОбъект("СписокЗначений"); - и далее по тексту исправить имя глСписок на Список
РегБН = СоздатьОбъект("Регистр." + Рег);
Если (Рег = "ОстаткиТоваровОтгруженных") или (Рег = "ОстаткиТоваровНаКомиссии") Тогда
РегБН.УстановитьФильтр(,,,Товар,Партия,СтрПартии);
Иначе
РегБН.УстановитьФильтр(,Товар,Партия,СтрПартии);
КонецЕсли;
РегБН.ВыбратьДвижения(Партия.ДатаДок, Партия.ДатаДок);
Пока РегБН.ПолучитьДвижение() = 1 Цикл
Если РегБН.СтрПартии = СтрПартии Тогда
Если Партия.ПолучитьСтрокуПоНомеру(РегБН.НомерСтроки()) = 1 Тогда
глСписок.ДобавитьЗначение(Партия.Контрагент);
глСписок.ДобавитьЗначение(Партия.Договор);
глСписок.ДобавитьЗначение(Партия.ТТН);
глСписок.ДобавитьЗначение(Партия.Страна);
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
 
Возврат глСписок;
 
КонецФункции
но лучше если бы помогло глСписок = "";
если вы глПолучитьАтрибутыПартии уже используете в разных местах, то не надо будет исправлять
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
13.03.2012, 17:32
Цитата Сообщение от Дайнеко
Мои пять копеек: самая умная мысль. Все туда.
Потом грамотно продумать структуру базы, а не лепить горбатого на ходу.
Ваши предложения?

Вот кусок реальной накладной. Одни и тот же товар, разные производители, разные страны, разный процент комиссионного вознаграждения.

Добавлено:


Цитата Сообщение от Hryv
Если не очень долго, то сначала попробуйте так
Попробовала, результат тот же.
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
13.03.2012, 18:07
Цитата Сообщение от Hryv
можно еще так попробовать
К сожалению, не помогло.
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
13.03.2012, 18:32
утро вечера мудреней
0
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
13.03.2012, 21:49
Цитата Сообщение от Ольга13
Ваши предложения?
Ну мыслимо ли дело? Что бы выяснить страну, перебирать кучу строк чего-то там. Да если бы даже Оно и не висло, то все равно бы никуда не годилось.
Одним из способов решения проблемы, есть устранение самой проблемы. Чем ломать голову над вопросом "как достать" надо долго и внимательно обдумать структуру базы. Вот изложите коротенько ее структуру.
P.S.
Чур, не выкладывать MD и полное описание конфигурации!
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
14.03.2012, 09:59
Конечно, чем лучше спроектирована структура регистров, тем удобнее потом программировать
Но лично мне сейчас стало интересно выяснить и устранить причину этой странной ошибки


Я правильно понимаю, что в стороке
Страна = Список.ПолучитьЗначение(4);

Страна - это реквизит ТЧ того дока внутри которого находится Страна()?
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
14.03.2012, 10:10
Ну самым простым, для начала, будет отказ от глобальной функции, хотя бы узнаем она ли память жрет
Список был раньше устранен, а РегБН = СоздатьОбъект - остался


Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Процедура Страна()
Список = СоздатьОбъект("СписокЗначений");
РегБН = СоздатьОбъект("Регистр.ОстаткиТоваровОтгруженных");
 
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
РегБН.УстановитьФильтр(,,,Товар,Партия,СтрПартии);
РегБН.ВыбратьДвижения(Партия.ДатаДок, Партия.ДатаДок);
Пока РегБН.ПолучитьДвижение() = 1 Цикл
Если Партия.ПолучитьСтрокуПоНомеру(РегБН.НомерСтроки()) = 1 Тогда
Страна = Партия.Страна;
Прервать; //хотя если все как надо, то и так всегда только один проход будет
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
14.03.2012, 10:15
Цитата Сообщение от Hryv
Страна - это реквизит ТЧ того дока внутри которого находится Страна()?
Именно так
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
14.03.2012, 10:22
Ольга13, вдруг не заметили, я в последнем посте на 1-ой странице вариант предложил
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
14.03.2012, 10:36
Цитата Сообщение от Hryv
Ну самым простым, для начала, будет отказ от глобальной функции, хотя бы узнаем она ли память жрет
Список был раньше устранен, а РегБН = СоздатьОбъект - остался
Попробовала, обработалось на 1 строку больше
Добавила еще в цикл Список.УдалитьВсе() - результат тот же.
Судя по замеру производительности, больше всего времени жрет Партия.ПолучитьСтрокуПоНомеру(РегБН.Номе рСтроки()) - 89.7%. Может, и память в ту же пропасть уходит?

Добавлено:


Цитата Сообщение от Hryv
Ольга13, вдруг не заметили, я в последнем посте на 1-ой странице вариант предложил
Спасибо, я видела и пробовала - все равно вылетает.
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
14.03.2012, 10:49
Цитата Сообщение от Дайнеко
Вот изложите коротенько ее структуру.
Даже не представляю, как это можно сделать коротенько. У нас все в одном флаконе: оперативный учет + бухгалтерия + расчеты. Что конкретно вас интересует?
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
14.03.2012, 11:29
Блин, странно
А что у вас с релизом самой платформы?

Я еще попробовал бы напрямую перебор строк Партии
Думаю, что не на много дольше по времени будет, чем с использованием регистра (хотя, конечно, точно не узнаем пока не проверим)

Если заработает в принципе, то можно будет думать как оптимизировать

ЗЫ в последенем примере строку Список = СоздатьОбъект("СписокЗначений"); я просто забыл удалить
0
0 / 0 / 0
Регистрация: 07.07.2008
Сообщений: 1,401
14.03.2012, 11:50
Если я правильнопонял - то партия - это документ оприходования. Жаль. немного расскажу как у меня устроено.

Предметная область - оптовая торговля медикаментами. Целая туча ограничений и отчетов. Во всех документах, двигающих товар есть измерение серия номенклатуры. Это элемент справочника серии подчиненный справочнику номенклатура. В этой серии хранится практически всё по медикаменту - сертификаты, сроки годности, цены реестра, цены поставщиков, поставщик, ГТД, страна проихождения и.т.д. При этом во всех регистрах, в которых есть измерение номенклатура также есть и измерение серия номенклатуры. То бишь при создании любого отчета на этих регистрах я всегда могу поставить любое из полей серии в условие/группировку. Одна из тонкостей - каждая строка документов поступления содержит уникальную ссылку на серию, даже если введены копированием и товары ничем не отличаются - надо для разделения себестоимости по строкам, цены прихода бывают разные.

Вот сколько за это время не требовали отчетов в разных комбинациях полей - никогда проблем не было. Если были тормоза - переписывал на прямой запрос.
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
14.03.2012, 11:52
Цитата Сообщение от Hryv
Если заработает в принципе, то можно будет думать как оптимизировать
Мне все-таки больше понравилась идея puh14 со справочниками. И вовсе не много там возни, я уже попробовала. Зато какое повышение быстродействия!
Хотя все равно интересно, где ошибка. Эта же функция стоит в этом же документе в процедуре Заполнить() в теле цикла по группировкам запроса - и все работает -_-
0
1 / 1 / 0
Регистрация: 15.11.2009
Сообщений: 947
14.03.2012, 12:40
Цитата Сообщение от Ольга13
Даже не представляю, как это можно сделать коротенько.
Вот так:
* Спр-к Товары

* Спр-к Партии - подчинен Товарам
- Ссылка на Приходную
- Страна ввоза (строка или ссылка на Спр-к)
- Серия медикаментов
- Срок годности
- ......

* Регистр ОстаткиТоваров
Изм
- Склад
- Товар
- Партия
Рес
- Количество
- Стоимость

* Приходная
Шака
- Клиент
- Склад
ТЧ
- Товар
- Партия
- Количество
- Стоимость

А то уж народ устал спрашивать "Партия" - это что?

Ремарки:
* Puh14. Как видишь мое видение примерно такое-же. Только я вынужден не циклиться на фармацевтах, и называю не Серия а
Партия.
* Многие программы используют принцип: все данные набирается в колонках документа, а при записи нужное переписывается в спр-ки. И выше тут предлагалось так делать со Страной. Но я считаю это не технологичным.
Во-первых: когда в справочниках много заполняемых данных, то столько колонок в Приходной не нарисуешь. Кроме Страны и приведенных мной полей в Партии чего только может не быть: цвет, размер одежды, инд. номер партии завода, кол-во в упаковке (меняется у разных приходов) и т.д. до бесконечности.
Во-вторых: Пользователю так нравится, только пока он не освоился в программе. Потом его станет напрягать 15 колонок (по опыту, документ набирается 1 раз а просматривается раз 5-8).
В-третьих: А еще дублированность данных никогда к добру не приходит. Это нехорошо, когда пользователь заполняет в одном месте, а программа пользуется некоторой копией данных. Пусть чел знает, где что лежит. А программист не ломает голову откуда брать.
В-четвертых: о размере базы полезно заботится.
0
1 / 1 / 0
Регистрация: 24.07.2008
Сообщений: 658
14.03.2012, 12:43
Спору нет, система станет значительно гибче, если заменить измерение СтрокаПартии на справочник со всем нужным, заполняемый при проведении прихода
И даже если не сразу поймете что в нем нужно, а что нет, то исправить можно потом абсолютно без последствий

И уже так и так получается, что причина ошибки не выясняется, а лишь обходится
0
0 / 0 / 0
Регистрация: 29.04.2010
Сообщений: 208
14.03.2012, 16:07
Спасибо за дельные советы, обязательно воспользуюсь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2012, 16:07

Напишите функцию, которая возвращает строку strв нижнем регистре, но каждый третий знак в верхнем регистре
Задание 1 Напишите функцию, которая возвращает строку strв нижнем регистре, но каждый третий знак в верхнем регистре.

Задать количество измерений multi_array в рантайме
допустим есть класс, в котором сидит multi_array. Как задать ему размерность, при создании экземпляра класса? Может плохо читал доку, но не...

Как увеличить количество измерений массива?
допустим, я создал двумерный массив размера n*m int *mas; mas = (int*)malloc(n*m*sizeof(int)); вопрос: как можно увеличить...

Количество слов в верхнем регистре
Добрый вечер. Можно ли подсчитать количество слов в верхнем регистре? Пример: "СЕГОДНЯ ПРЕКРАСНАЯ ПОГОДА и чудесный воздух"...

Посчитать количество букв в верхнем регистре
Всем привет! Задача такая: в функцию передаем строку, а она считает и возвращает количество букв в верхнем регистре, которые есть в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru