Вход | Регистрация
 
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) есть.
твой документ - лишь контенер для показа.
а отдельные склады в отдельных подчиненных документах


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