Имя: Пароль:
1C
1С v8
Разбить ТаблицуЗначений на две: одна с положительными числами, а другая с отриц.
,
0 SeiOkami
 
04.02.13
22:42
Задача такая. Есть ТЗ Номенклатура и остаток. Из нее нужно получить две ТЗ. В одной все строчки с положительными остатками, а в другой с отрицательными. Не перебором! (так бы уже давно сделал)

Код на данный момент такой:

   ТаблицаОстатков = ПолучитьОстаткиТовараНаСкладе(Объект.Склад);    
   
   Отбор = Новый Структура("ОстатокНоменклатуры");
   Отбор.Вставить("ОстатокНоменклатуры", ?);      
   ТаблицаНедостач = ТаблицаОстатков.Скопировать(Отбор);
   
   Отбор = Новый Структура("ОстатокНоменклатуры");
   Отбор.Вставить("ОстатокНоменклатуры", ?);
   ТаблицаИзлишков = ТаблицаОстатков.Скопировать(Отбор);


Как мне установить, чтобы отбор отобрал мне только положительные и только отрицательные числа?

Понимаю, вопрос, возможно, тупой, но никак не найду решения =(
1 Vladal
 
04.02.13
22:44
Не перебором - запросом. Поместить ТЗ во временную таблицу и по ней слепить два условия.
2 ДенисЧ
 
04.02.13
22:44
запрос напиши.
3 Нуф-Нуф
 
04.02.13
22:45
Запрос. Остатки во временную. Потом соединить саму с собой
4 SeiOkami
 
04.02.13
22:46
Неужели нельзя сделать копированием?
5 DrShad
 
04.02.13
22:47
(4) можно, но не кошерно, старшие увидят - уволят
6 SeiOkami
 
04.02.13
22:48
(5), почему? мне показалось, что так лучше. Значит я не прав. Вот только почему?
7 Нуф-Нуф
 
04.02.13
22:49
(6) по жизни
8 DrShad
 
04.02.13
22:50
(6) читать СП умеем?

Вариант синтаксиса: Скопировать по отбору

Синтаксис:

Скопировать(<ПараметрыОтбора>, <Колонки>)
Параметры:

<ПараметрыОтбора> (необязательный)

Тип: Структура.
Ключ структуры - идентификатор колонки, а значение структуры - значение отбора.

значение проверяется только на равенство!
9 DrShad
 
04.02.13
22:52
+(8) был бы вариант сравнения тогда другое дело, но и все равно такой метод строил бы запрос :)))
10 SeiOkami
 
04.02.13
22:54
ТаблицаЗначений (ValueTable)
Скопировать (Copy)
Вариант синтаксиса: Скопировать строки

Синтаксис:

Скопировать(<Строки>, <Колонки>)
Параметры:

<Строки> (необязательный)

Тип: Массив.
Массив строк для копирования. Если не указан, копируются все строки таблицы значений.
<Колонки> (необязательный)

Тип: Строка.
Список колонок для копирования в формате: "Колонка1, Колонка2...".
Описание варианта метода:

Если указаны строки и колонки, то только они будут скопированы. Если не указаны - то будет создана полная копия таблицы значений.
Вариант синтаксиса: Скопировать по отбору

Синтаксис:

Скопировать(<ПараметрыОтбора>, <Колонки>)
Параметры:

<ПараметрыОтбора> (необязательный)

Тип: Структура.
Ключ структуры - идентификатор колонки, а значение структуры - значение отбора.
<Колонки> (необязательный)

Тип: Строка.
Список колонок для копирования в формате: "Колонка1, Колонка2...".
Описание варианта метода:

Если указан отбор, то только строки из отбора будут скопированы. Если отбор не указан, то будут скопированы все строки таблицы значений. Если указаны колонки, то только эти колонки будут скопированы. Иначе, будут скопированы все колонки таблицы значений.



Прочитал сразу. Но строк про то, что "значение проверяется только на равенство!" не нашел, поэтому то...


Т.е. другого вара как запросом нет?
11 SeiOkami
 
04.02.13
22:55
Тупняк, а так удобно было бы скопировать =(
12 DrShad
 
04.02.13
22:57
(10) баян
13 mistеr
 
04.02.13
22:58
Если не миллионы строк там, я бы перебором делал. Запрос в данном случае это overkill.

Можно добавить колонку булеву, заполнить ее (тот же перебор), и копировать по отбору.
14 DrShad
 
04.02.13
22:58
(10) [Но строк про то, что "значение проверяется только на равенство!" не нашел] а другие строки видел? на будущее по умолчанию проверяется на равенство!
15 DrShad
 
04.02.13
22:59
(13) ну конечно - ты Д'Артаньян, а все остальные дураки
16 SeiOkami
 
04.02.13
23:01
(13), хм... Спасибо, навел на мысль!

Ведь можно в изначальном запросе добавить поле которое будет формироваться так:

ВЫБОР
   КОГДА ТоварыНаСкладахОстатки.ВНаличииОстаток > 0
       ТОГДА ИСТИНА
   ИНАЧЕ ЛОЖЬ
КОНЕЦ

А затем отбором уже скопировать. Спасибо!
17 DrShad
 
04.02.13
23:04
(16) а почему же ты изначально в запросе не делишь на две таблицы!? че вы за всякий копрокод хватаетесь?
18 SeiOkami
 
04.02.13
23:06
(17), этот запрос менять нельзя. Добавить поле - еще норм.

А так, для будущего: как можно в одном запросе на выходе получить две таблицы?
19 DrShad
 
04.02.13
23:09
то что у тебя уже есть поместить в ВТ, а следующие два запроса в пакете выгружать в ТЗ
20 SeiOkami
 
04.02.13
23:13
(19), спасибо, запомню на будущее =)
21 МихаилМ
 
04.02.13
23:17
какие запросы....

отсортировать ,  методом вилки найти границу
выгрузить в 2 тз.
22 mistеr
 
04.02.13
23:21
(21) Больше кода, больше!
23 mistеr
 
04.02.13
23:22
(21) Вилка не нужна, кстати. Один цикл. Так что принимается.
24 DrShad
 
04.02.13
23:22
(22) ну этот девиз твой еще в (13) был озвучен
25 mistеr
 
04.02.13
23:25
(24) Запрос за код не считается?
26 DrShad
 
04.02.13
23:28
(25) он выполняется быстрей любого цикла, внезапно!?
27 mih_io
 
04.02.13
23:38
(0) делай как в (19) будет и красиво и само быстро. Заодно узнаешь что такое МенеджерВременныхТаблиц ) полезный скилл )
28 mistеr
 
04.02.13
23:45
(26) Не факт, внезапно! Особенно если база далеко.
29 DrShad
 
04.02.13
23:48
(26) сынок, расслабься! на форуме уже 148 000 раз обсуждалось и столько же тестировалось :)))) запрос быстрее
30 H A D G E H O G s
 
05.02.13
00:00
Даже если бы и миллионы - я бы сделал перебором.
31 zak555
 
05.02.13
00:09
модифицировать ПолучитьОстаткиТовараНаСкладе?
32 SeiOkami
 
05.02.13
19:35
Новый вопрос!

Как можно найти строки ТЗ, в кторый текстовое значение содержит указанную подстроку?

К примеру у меня такие строки в ТЗ

Хлеб, "акфы", 900
Молоко, "выкф", 100
Мед, "ссвы", 845

Мне нужно найти строки, содержащие "акф".
33 Bober
 
05.02.13
20:02
(32) либо циклом через Найти(), либо запросом. Ничего по сравнению с (0) не изменилось
34 mikecool
 
05.02.13
20:10
смотря сколько строк в тз, если немного , то кошернее перебором имхо