Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Помощь с алгоритмом

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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует