Имя: Пароль:
1C
1C 7.7
v7: Отменить Регистр.ХХХ.ПривязыватьСтроку(Ном)
,
0 vcv
 
19.02.14
09:03
Есть документ, в нём делаются движения по регистру Заявки. С привязкой движений к номеру строки. В конце процедуры проведения анализируются остатки заявки и, в соответствии с определенными критериями, могут списываться. При этом Регистр.Заявки.ПривязыватьСтроку(0) не срабатывает, движения продолжают делаться с последним ненулевым номером строки.
Как делать движения по регистру без привязки к номеру строки?
1 zak555
 
19.02.14
09:05
не использовать
2 vcv
 
19.02.14
09:20
(1) В данной ситуации "не использовать" возможно, но, в общем случае, в ТиС формирование проводок по ряду регистров привязано к номерам строк, поэтому отказаться от привязки строк нежелательно. Ну и куча других соображений, когда привязка строк полезна.
3 1Сергей
 
19.02.14
09:29
(2) сначала делай движения без привязки к строкам, потом с привязками
4 vcv
 
19.02.14
10:00
(3) Очень геморройно. Попробуй представить, что тебе нужно определить, какие будут остатки по партиям после вызова глСписаниеПартийТМЦ(), но сделать это до вызова глСписаниеПартийТМЦ(). Сложно и черевато ошибками в дальнейшем сопровождении, такие объёмные алгоритмы реализовывать двумя разными методами, что бы одинаково работали.
5 1Сергей
 
19.02.14
10:13
(4) а разве глСписаниеПартийТМЦ делает привязку к строке?
6 КонецЦикла
 
19.02.14
10:14
Зачем нужно отвязывать? Используй по-другому данные
Еще как вариант - в конце движений пройтись update по таблице RA - делов-то...
7 Ёпрст
 
19.02.14
10:15
(5)в типовом ТиСе нигде не нужна привязка строк и нигде это не используется.. можно смело забить на то, что туда пишется.
8 1Сергей
 
19.02.14
10:16
(7) я про что и говорю
9 Fedor-1971
 
19.02.14
10:21
(0) Попробуй записать движения перед последней операцией и не указывай в ней ПривязатьСтроку().
Вариант 2: возможно прокатит так Регистр.Заявки.ПривязыватьСтроку() - без указания номера строки.
10 vcv
 
19.02.14
10:36
(5) Делает.
Но дело не в этом. Алгоритмы списания остатков при проведении в ТиС основаны на поддержании актуальности регистра. Когда ты по одной строке документа что-то списал, при списании по другой строке итоги будут уже с учетом предыдущего списания. Реализовать определение что будет списано без фактического списания (а делать движения по регистру нельзя, потому что появится привязка строк) - задача непростая и не хочется мелкую проблему решать черезмерно сложными средствами.

(7) Используется. Смотри, например, из глРассчитатьЗначение
ИначеЕсли (ИдЗначения = "Содержание") Тогда
  ТекДок = Рег.ТекущийДокумент();
  Если (глЕстьРеквизитМнЧ(ИдЗначения, ТекДок.Вид()) = 1) И(Рег.НомерСтроки() <> 0) Тогда
    ТекДок.ПолучитьСтрокуПоНомеру(Рег.НомерСтроки());
    Возврат ТекДок.Содержание;

(9) Не указывать номер строки нельзя, обязательный параметр. Указывать ноль не получается, потому что 1С-ка это игнорирует, повторяя номер прошлой привязки.
11 vcv
 
19.02.14
10:38
(6) Вариант. Из пушки по воробьям, особенно с учетом наличия как DBF, так и SQL баз, но всё же вариант.
12 Fedor-1971
 
19.02.14
10:48
А вообще без Регистр.Заявки.ПривязыватьСтроку(ном) для последней записи пробовал? Строка привязывается только при наличии указания привязать строку.
13 vcv
 
19.02.14
10:56
(12) Если один раз указал Регистр.Заявки.ПривязыватьСтроку(ном), все движения будут привязываться к указанной строке, пока не укажешь другую.
14 DrZombi
 
гуру
19.02.14
10:56
(10) Перепиши. Напиши свой "покер" с Блеком и со шлюхами :)
15 DrZombi
 
гуру
19.02.14
10:57
(12) Да он это понимает. Он не хочет переписывать то, что у него там наваял, кто-то и пытается все сделать малой кровью.

При этом такое чувство, что мы тут все Телепаты :)
16 vcv
 
19.02.14
11:04
(14) Проще ставить какой-нибудь нереальный номер (-1 вполне канает) и учесть его в десятке мест конфигурации, где номер проверяется. Чем переписывать кусок в пару тысяч строк.
(15) "При этом такое чувство, что мы тут все Телепаты"
:) Дык, коли пришел в ветку и чего-то непонял, задай наводящий вопрос. Я постарался объяснить, но со стороны виднее, конечно.

Номер строки стараюсь везде ставить правильный, потому что облегчает потом внесение каких-то новых разрезов хотелок (измерений и ресурсов регистров, хитрых данных по документам в отчетах). С помощью номера строки можно связать движения регистра со строками документа и проще заполнять задним числом какие-то новшества и регистрах. Перепроводить нереально, уже более ста гигов только центральная база (с периферийками около 400 гигов).

А тут вылазит неправильный номер строки. Спать мешает, навевает опасения, что когда-нибудь выйдет боком.
17 КонецЦикла
 
19.02.14
11:08
(11) Не из пушки, а из снайперки
Быстро, точно, без шума и пыли
18 Fedor-1971
 
19.02.14
11:29
(13) Объяви переменную, например, Перем Пустота; и передай оную в Регистр.Заявки.ПривязыватьСтроку(Пустота).
Проверил, будет счесце.
19 Ёпрст
 
19.02.14
11:38
У тебя ТиС ?
Если да, то забей.. НомерСтроки там нужен только для правильного заполнения "псевдо проводок" в справочнике для выгрузки потом в бухгалтерию..
Можешь вырезать это всё к едрени фени..
20 Ёпрст
 
19.02.14
11:39
для оперативных итогов и регистров ЭТО нигде не используется.. вообще.
21 vcv
 
19.02.14
12:10
(19) У меня монстр, который в прошлом десятилетии был ТиС, сейчас уже больше смахивает на Ктулху.

Исследования показали, что Регистр.Заявки.ПривязыватьСтроку(0) означает, по всей видимости, количество строк документа.
22 1Сергей
 
19.02.14
12:13
а так?

Регистр.Заявки.ПривязыватьСтроку(9999999999);
23 КонецЦикла
 
19.02.14
12:14
Ну, еще так до кучи


Регистр.Заявки.ПривязыватьСтроку("ктулху");
24 Fedor-1971
 
19.02.14
12:22
(23) Любое некорректное значение, кроме пустой переменной, выставляет последнюю строку документа (или количество строк). Пустая переменная сбрасывает привязку строки или нужно изобрести способ передать функции значение "неопределено".
25 vcv
 
19.02.14
12:38
(22) А это мысль!
Волшебная фраза Регистр.Заявки.ПривязыватьСтроку(65536); решает проблему. На SQL, где LINENO_ описан как smallint. Для DBF нужно еще проверить.
(24) У меня не получилось с пустой переменной. Тот же самое выходило, что и с нулём. Хотя это, возможно, мелкие отличия между DBF и SQL.