Имя: Пароль:
1C
1C 7.7
v7: Помощь с алгоритмом
0 zenon46
 
21.03.19
13:05
Доброго дня!
Как можно реализовать такой алгоритм?
Имеем табличную часть в документе, в котором есть номенклатура, у номенклатуры есть реквизит Номер склада, это строка. Как перебрав строки документа, получить на выходе строку содержащую, все номера складов встречающиеся у номенклатуры без повторения, ну т.е. есть в документе 50 строк, у этих товаров склады хранения 1,2,5 как получить строку содержащую только эти три значения?
1 Mikeware
 
21.03.19
13:12
(0) выбери запросом различные номера, а затем сконкатенируй
выгрузи в тз, свени по номеру склада и сконкатенируй...
перебором...
2 Builder
 
21.03.19
13:13
1. ТЗ и Свернуть()
2. Через СписокЗначений, метод Установить()
3. Через строку и поиск номеров, но разделенных типа такого ",1,"
3 Mikeware
 
21.03.19
13:15
5)выгрузить в индексированную таблицу, установить индекс, пройтись по индексу.
4 Mikeware
 
21.03.19
13:26
во, можно еще 6)брать номер склада из первой строки, и удалять строки с этим номером склада. пока все не удалим...
5 dk
 
21.03.19
13:27
рез = созд"СЗ"
выбратьстроки
   текСклад = товар.склад
   Если Рез.Найтизначение(текСклад) = 0 Тог
        рез.добавЗН(текСклад)
   КонЕ
КонЦ
Сообщи(Рез.ВстрокуСразд())
6 Mikeware
 
21.03.19
13:30
(5) ну, это простой перебор...т.е. п.3 А надо извращенные...
7) построить полный список номеров складов, обходить его и удалять из него отсутсвующие в ТЧ.
7 Garykom
 
гуру
21.03.19
13:33
И тут выясняется что "у номенклатуры есть реквизит Номер склада, это строка"

Строку и означает, где может быть "1", может быть "1,2" или "склад 1 или 2".
А может и "основной склад и за оградой у бытовки"
8 Mikeware
 
21.03.19
13:34
(7) и? из перечисленных 7 способов - ровно все работают со строками...
9 Garykom
 
гуру
21.03.19
13:35
(8) Угу и ТС не хочет получить из трех строк "1", "1, 2" и "2" два значения-склада 1 и 2
10 dk
 
21.03.19
13:40
(9) не надо додумывать за автора )
11 Mikeware
 
21.03.19
13:45
(9) "у номенклатуры есть реквизит Номер склада", но не "номера складов".
с "номерами" тоже можно, но лениво...
12 Garykom
 
гуру
21.03.19
13:45
(10) Так я всего то из условий (0) исхожу
13 Garykom
 
гуру
21.03.19
13:48
(11) Угу "строковый".
И ни один юзер не додумался туда несколько складов/№ записать как в голову взбредет, да еще и с комментами ))
14 Mikeware
 
21.03.19
13:50
(13) ну значит будут "с комментами"
15 dk
 
21.03.19
13:52
с несколькими складами тоже проблем нет
рез = созд"СЗ"
выбратьстроки
   текСклад = СтрЗаменить(товар.склад," ","")
   текСклад = СтрЗаменить(текСклад,",",РазделСтрок)
   Для Сч = 1 ПО СтрКолСтр(тексклад) Цикл
       Тек = СтрПолСтроку(текСклад, сч)
       Если Рез.Найтизначение(тек) = 0 Тог
           рез.добавЗН(тек)
       КонЕ
   Конц
КонЦ
Сообщи(Рез.ВстрокуСразд())
16 MWWRuza
 
гуру
21.03.19
14:28
А кто вам вообще сказал, что если "Склад" - строка, то пользователи эти строки вручную забивают?
Может эти строки туда из какого-то другого алгоритма попадают?
Например, у меня есть одна конфа, в которой справочник с документом связан через строки. Ну, так нужно, по условиям задачи, что-бы прямых ссылок из документа на справочник не было, для возможности удаления/изменения справочника, не трогая документ... Может здесь что-то аналогичное...
17 Mikeware
 
21.03.19
14:39
(16) ага, ссылочную целостность специально придумали чтоб жизнь затруднять...
18 zenon46
 
21.03.19
15:21
(13) все, переделал на "число", не отрицательное, с одноразрядное.
19 Mikeware
 
21.03.19
15:22
(18) ТКВ...
20 zenon46
 
21.03.19
15:45
(19) ????
21 Злопчинский
 
21.03.19
15:48
Если исходить из того, что номер склада не содержит кавычек и зпт, то все достаточно просто...

Результат = СоздатьОбъект("ТаблицаЗначений");
ВыбДок.ВыгрузитьТабличнуюЧасть(Результат,"НомерСклада");
Результат.Свернуть("НомерСклада",);
СЗ=""; Результат.Выгрузить(СЗ);
Результат = СЗ.ВСтрокуСРазделителями();
Результат = СтрЗаменить(Результат,"""","");
22 Mikeware
 
21.03.19
15:49
(20) ТрадиционныйКитайскийВопрос®, гласящий - "анахуа?"
23 Mikeware
 
21.03.19
15:51
(21) да, это, наверное, самый быстрый...
24 Злопчинский
 
21.03.19
15:52
ну и автору видимо пригодится вот такая хрень: http://catalog.mista.ru/public/15064/

потом в печатной форме разбить этот "документ" по складам...
25 zenon46
 
21.03.19
16:02
(24) это уже я давно сделал)
26 Злопчинский
 
21.03.19
16:03
(25) но тогда странно чего в (0) вызвало трудности?
27 zenon46
 
21.03.19
16:03
(23) я просто думал есть более "крутой" способ нежели свертка таблицы значений по колонке.
28 Mikeware
 
21.03.19
16:06
(27) смотря для чего. можно самый первый  способ...
29 Злопчинский
 
21.03.19
16:07
(27) есть.
твой документ - лишь контенер для показа.
а отдельные склады в отдельных подчиненных документах
Ошибка? Это не ошибка, это системная функция.