|
НайтиСтроки() и партионный учет | ☑ | ||
---|---|---|---|---|
0
Franchiser
гуру
07.12.19
✎
14:05
|
Появилась необходимость использовать метод ТЗ НайтиСтроки() в алгоритме партионного списания.
Почитал информацию на форумах: 1с не гарантирует сохранение порядка сортировки строк в массиве из исходной ТЗ, то есть для уверенности требуется дополнительная сортировка через отдельную ТЗ. Как решить вопрос без сортировки? P.s. строки в документе группируются по номенклатуре и цене. Из-за цены получаются связь с остатками многие ко многим, поэтом одним запросом получить результат не получится. |
|||
1
Franchiser
гуру
07.12.19
✎
14:11
|
Смотрел код в типовых конфигурациях, не нашел чтобы 1с как то обрабатывала ситуацию результата поиска этим методом в таблицах остатков с партиями.
|
|||
2
RomanYS
07.12.19
✎
14:12
|
Делай запрос с итогами, обходи по группировка.
Про цены не очень понятно зачем группировка или это учет по розничным ценам? Для списания партий по идее без разницы цена их реализации |
|||
3
Franchiser
гуру
07.12.19
✎
14:17
|
(2) в регистр для списания должна идти Цена из ТЧ, сумма = Цена*количество.
Такая постановка задачи. По одной номенклатуре может быть в ТЧ более одной цены и их все нужно сохранить. |
|||
4
RomanYS
07.12.19
✎
14:18
|
(3) Цена - это измерение регистра?
|
|||
5
Franchiser
гуру
07.12.19
✎
14:23
|
Реквизит.
|
|||
6
Franchiser
гуру
07.12.19
✎
14:25
|
Сумма тоже реквизит
|
|||
7
Franchiser
гуру
07.12.19
✎
14:26
|
Количество - ресурс
|
|||
8
RomanYS
07.12.19
✎
14:27
|
(6) может ресурс?
(5) Тогда некорректна или постановка задачи или архитектура регистра |
|||
9
Franchiser
гуру
07.12.19
✎
14:29
|
(8) ну, партионноый учет не совсем стандартный. Если не хватает количества, то списывается минимум из остатка и количества в документе.
|
|||
10
Franchiser
гуру
07.12.19
✎
14:39
|
Кто нибудь знает в каком случае может метод НайтиСтроки() выдавать неправильный порядок строк, влияет ли индекс в ТЗ?
|
|||
11
hhhh
07.12.19
✎
15:56
|
(10) индекс не влияет
|
|||
12
Franchiser
гуру
07.12.19
✎
21:03
|
(11) почему в типовых не обращают внимание на то что порядок может быть другой в НайтиСтроки() при партионноый списаниях ?
|
|||
13
RomanYS
07.12.19
✎
21:07
|
(12) Может они не читают форумов?
|
|||
14
Franchiser
гуру
07.12.19
✎
21:46
|
Не знаю, может нудно наоборот делать: обходить строки остатков с партиями и искать номенклатуру в таблице документа - тогда уже порядок не важен.
|
|||
15
vicof
08.12.19
✎
02:42
|
(14) неоптимально. Ну используй не найтистроки(), а передавай таблицу в запрос и там уже сортируй как хочешь.
|
|||
16
d4rkmesa
08.12.19
✎
12:02
|
(0) Старая тема. =) В старых типовых, к примеру, списание по сериям идет тупо через НайтиСтроки, это по FEFO. Думаю, в большинстве случаев это срабатывает правильно. Конечно, исходная ТЗ при этом создается запросом и никаких манипуляций с ней не производится, тогда ВОЗМОЖНО в большинстве случаев порядок сохранится. По крайней мере, пока на это никто не жаловался за много лет.
|
|||
17
azernot
08.12.19
✎
12:21
|
Где-то на мисте подсмотрел:
Функция НайтиСтроки(ТЗ, Структура) Экспорт М = ТЗ.НайтиСтроки(Структура); ПослеНайтиСтроки(М, ТЗ); Возврат М; КонецФункции Процедура ПослеНайтиСтроки(М, ТЗ = Неопределено) Экспорт Если М.Количество() = 0 Тогда Возврат; КонецЕсли; //Для совместимости с 1с80 Если ТЗ = Неопределено Тогда ТЗ = М[0].Владелец(); КонецЕсли; ТЗ2 = Новый ТаблицаЗначений(); ТЗ2.Колонки.Добавить("Индекс"); ТЗ2.Колонки.Добавить("Строка"); Для Каждого Эл ИЗ М Цикл НСтр = ТЗ2.Добавить(); НСтр.Индекс = ТЗ.Индекс(Эл); НСтр.Строка = Эл; КонецЦикла; ТЗ2.Сортировать("Индекс"); М.Очистить(); Для Каждого Стр2 ИЗ ТЗ2 Цикл М.Добавить(Стр2.Строка); КонецЦикла; КонецПроцедуры |
|||
18
Franchiser
гуру
08.12.19
✎
14:40
|
(17) да это это процедура гения 1с, я ее добавил себе. Но создавать из в цикле - очень затратно.
(16) вот это и странно, что считают , что будет работать в большинстве случаев. |
|||
19
Ненавижу 1С
гуру
08.12.19
✎
15:06
|
||||
20
Franchiser
гуру
08.12.19
✎
15:22
|
(19) не походит : у меня связь многие ко многим
|
|||
21
Franchiser
гуру
08.12.19
✎
15:24
|
(19) это запрос в цикле будет?
|
|||
22
Ненавижу 1С
гуру
08.12.19
✎
15:24
|
(21) нет конечно
|
|||
23
Franchiser
гуру
08.12.19
✎
15:26
|
(22) там параметр оплата
|
|||
24
H A D G E H O G s
08.12.19
✎
15:30
|
(19) Хреновый пример.
|
|||
25
Ненавижу 1С
гуру
08.12.19
✎
15:31
|
(23) это все легко переделывается на множество
|
|||
26
H A D G E H O G s
08.12.19
✎
15:31
|
(0) НайтиСтроки() в цикле?
Ну сделай ты MergeJoin кодом 1С и не парься. |
|||
27
Franchiser
гуру
08.12.19
✎
15:33
|
(26) найтистроки циклом по индексированной таблице. В чем проблема?
Что за mergejoin, можно пример? |
|||
28
Franchiser
гуру
08.12.19
✎
15:36
|
Таблица остатков:
Номенклатура1, Партия1,ГТД1, количество1 Номенклатура1, Партия2,ГТД2, количество2 Таблица в документе после группировки: Номенклатура1, цена1, количество 1 Номенклатура1, цена2, количество2 |
|||
29
H A D G E H O G s
08.12.19
✎
15:37
|
(28) По каким колонкам поиск?
|
|||
30
Franchiser
гуру
08.12.19
✎
15:39
|
Поиск по номенклатуре
В регистр для списания нужно писать Цену и сумму = Количество списано х Цену |
|||
31
Ненавижу 1С
гуру
08.12.19
✎
15:40
|
(30) и что это за документ и откуда цена берется изначально?
|
|||
32
H A D G E H O G s
08.12.19
✎
15:49
|
А нет, отбой.
Глупый 1С не даст сравнить 2 номенклатуры на больше-меньше: Если Номенклатура1>Номенклатура2 Тогда Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата) |
|||
33
H A D G E H O G s
08.12.19
✎
15:57
|
Ну тогда я бы массив строк выгружал бы в копию ТЗ и досортировывал бы.
|
|||
34
Franchiser
гуру
08.12.19
✎
16:16
|
(31) реализация
|
|||
35
Franchiser
гуру
08.12.19
✎
16:18
|
(33) ну я пока сделал той процедурой которую здесь привели. Но не нравится этот вариант по созданию из в цикле и досортировке в ТЗ
|
|||
36
H A D G E H O G s
08.12.19
✎
16:49
|
(35) Мне тоже
МассивСтрок=ТаблицаИсточника.НайтиСтроки(); ТекущаяТаблицаИсточника=ТаблицаИсточника.Скопировать(,МассивСтрок); ТекущаяТаблицаИсточника.Сортировать(КлючиСортировки,Новый СравнениеДанных); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |