Имя: Пароль:
1C
1C 7.7
v7: Вопрос по хранению заполненных, но не записанных доков.
, ,
0 never_sleep
 
05.06.17
09:23
Есть файл выгрузки,по нему нужно создать одно поступление и множество реализаций. Все сделал. Но алгоритм работает следующим образом, сначала создает кучу реализаций, и потом по накопленным данным реализаций делает поступление. А надо, чтобы поступление было первым, и уж потом реализации. Но не хочу переписывать логику циклов и пр. пр. Поэтому вопрос. Можно ли созданные конструкцией ДокРеализация.Новый записать в какую-нибудь структуру данных? Типа Массив. И потом по этому массиву пробежаться, проводя все подряд.
1 Ёпрст
 
05.06.17
09:25
(0)Записывай. Разрешаю.
2 Ёпрст
 
05.06.17
09:25
Если че, документы в начале записывают, потом проводят
3 never_sleep
 
05.06.17
09:29
(1) Вот и попробую. (2) Ну это само собой.
4 never_sleep
 
05.06.17
09:31
(1) А в ТЗ разрешите поместить?
5 never_sleep
 
05.06.17
09:31
Или СЗ. А то в 7ке массивов нету динамических.
6 Ёпрст
 
05.06.17
09:35
(5) есть там всё. И структура и вектор и ассоциативныйВектор.
Но, это только тем, кому религия позволяет вк использовать
7 never_sleep
 
05.06.17
09:37
(6) ВК?
8 ildary
 
05.06.17
09:39
(7) 1С++ называется. Под девизом "Вкуси прелести объектов восьмерки в 7.7".
9 HawkEye
 
05.06.17
09:41
(0) дарю:
УстановитьВремя(<?>,,);
Синтаксис:
УстановитьВремя(<Часы>,<Минуты>,<Секунды>)
Назначение:
Установить время документа.
Параметры:
<Часы> - число часов;
<Минуты> - число минут;
<Секунды> - число секунд.
Замечание:
Метод  можно использовать только для объектов, созданных функцией СоздатьОбъект.
10 never_sleep
 
05.06.17
09:45
(8) А. Знаю эту штуку, но это для меня как нож для ребенка - отрежу себе причендалы в лучшем случае)
11 never_sleep
 
05.06.17
09:48
(9) Да знаю как время устанавливать. Это надо еще цикл писать после того как доки запишу все. А я хотел красиво-красиво. Просто в цикле уже существующем помещать еще даже не записанные доки в СписокЗначений и После того как очередная накопительная приходная накладная запишется пробежаться внутри по её реализациям. Хотя вот одно и то же) Просто уже спортивный интересе. Ни разу в ТЗ, массивы и пр не пихал документы.
12 HawkEye
 
05.06.17
09:49
(11) записывай документы и не проводи, записанные пиши в СЗ.
в конце проведи поступление и проведи все реализации из СЗ...
13 Масянька
 
05.06.17
09:55
(9) Поддерживаю.
(11) А что некрасивого в том, что записал все реализации, в переменной (ну, типа того) сохранил время первой реализации, поступление записал переменная-1 секунда. Всё.
14 Злопчинский
 
05.06.17
10:02
(11)  да, в 7.7 нет никаких препятствий сделать так как ты написал
15 never_sleep
 
05.06.17
12:48
Со всем согласен. Но не могу в СЗ загнать документы. Если использовать:

СЗСписокРеализаций.ДобавитьЗначение(ДокРеализация);

То получается, что в каждую ячейку СЗ попадает ссылка на саму переменную ДокРеализация, а не на документ, на который эта переменная указывает.
Т.е. в СЗ потом будет как будто один и тот же документ, на который в данный момент указывает ДокРеализация.
Как в СЗ положить ссылку на сам документ? Я что-то туплю.
16 LazyStranger
 
05.06.17
12:51
СЗСписокРеализаций.ДобавитьЗначение(ДокРеализация.ТекущийДокумент());
17 Сияющий Асинхраль
 
05.06.17
13:07
(15) Ну тебе в (12) все сказали, что еще может непонятно?
18 never_sleep
 
05.06.17
13:29
(17) читай.
19 chelentano
 
05.06.17
13:32
(15) СЗСписокРеализаций.ДобавитьЗначение(ДокРеализация.ТекущийДокумент());
20 never_sleep
 
05.06.17
13:34
(Голосом бородача) Ребят, туплю как всегда. Стал добавлять в СЗ как указал LazyStranger в (16), но на куске:

ДокПоступление.Записать();
//ДокПоступление.Провести();
Сообщить("Проведен документ" + ДокПоступление.ТекущийДокумент());
Для К = 1 По СЗСписокРеализаций.РазмерСписка() Цикл
    ТекДокРеализация = СЗСписокРеализаций.ПолучитьЗначение(К);
    Сообщить(ТипЗначенияСтр(ТекДокРеализация));
    ТекДокРеализация.Записать();
    //ТекДокРеализация.Провести();
    Сообщить("Проведен документ" + ТекДокРеализация.ТекущийДокумент());
КонецЦикла;

Выдает:
Проведен документПоступление ТМЦ GT00030036 (30.05.17)
Документ
ТекДокРеализация.Записать();
{E.......НО.ERT(428)}: Не выбран документ!
Хотя в отладчике смотрел - есть там доки. Нормально все присваивается. Что не так сделал?
21 Ёпрст
 
05.06.17
13:35
(20) нельзя записывать ссылку, полученную только на чтение.
22 Ёпрст
 
05.06.17
13:36
записать() есть только у объектов, созданных с помощью СоздатьОбъект
23 HawkEye
 
05.06.17
13:41
(20)
ДокПоступление.Записать();
//ДокПоступление.Провести();
СЗСписокРеализаций.Добавить(ДокПоступление.ТекущийДокумент());
24 never_sleep
 
05.06.17
13:42
(22) Н. Г. Чернышевский. Что делать? 1862—1863 гг..
25 HawkEye
 
05.06.17
13:43
(20)
далее

ТекДок = СОздатьОбъект("Документ.РЕАЛИЗАЦИЯИЛИКАКОНТАМУТЕБЯ");
Для К = 1 По СЗСписокРеализаций.РазмерСписка() Цикл
    ТекДокРеализация =СЗСписокРеализаций.ПолучитьЗначение(К);
ТекДок.НайтиДОкумент(ТекДокРеализация );
    ТекДок.Провести();
КонецЦикла;
26 Ёпрст
 
05.06.17
13:44
(0)

Звонит как-то Н. Г. Чернышевский в 3 часа ночи Ф.М.Достоевскому:
-Алло, я тут подснял 2-х девиц, привёл домой, Что делать?

На следующий день вышел роман "Идиот"
27 never_sleep
 
05.06.17
13:46
(25) Ох и грабли. С таким же успехом я мог бы просто писать в СЗ номера документов и потом по ним искать и записывать/проводить. Я думал, можно все красиво сделать. А тут как всегда в 7ке.
28 never_sleep
 
05.06.17
13:46
(26) Да кто же спорит. Все так.
29 Ёпрст
 
05.06.17
13:49
(27) в 8-ке аналогично, если что.
НайтиДОкумент в клюшках, это аналог ПолучитьОбъект в снеговике.
30 HawkEye
 
05.06.17
13:49
(27) вот твое предложение - как раз и есть грабли... я уже молчу про то, как ты пытаешься записать уже записанный документ.... даже спрашивать не буду как ты до этого додумался...
31 Ёпрст
 
05.06.17
13:50
просто, в снеговике более понятно, что есть объект, а что есть ссылка.
32 HawkEye
 
05.06.17
13:51
(31) это да... но и в снеговике не надо записывать уже записанный документ ))
33 never_sleep
 
05.06.17
13:53
(32) Да что вы прикопались к записи записанного документа. Это временный код, лишь для того чтобы проверить могу ли я получить документ из СЗ и дальше с ним нормально работать.
34 AliAksA
 
05.06.17
13:53
а я бы ещё через попытку запись сделал ... а может и лишнее это ... хз
да и НайтиДокумент(...) может не сработать - Если Выбран() не помешаеть ... чисто имхо
35 HawkEye
 
05.06.17
13:54
(33) ты - не можешь, остальные - могут...
(34) зачем и почему?
36 never_sleep
 
05.06.17
13:55
(35) Так в (26) все объяснено))
37 AliAksA
 
05.06.17
13:56
(35) ну встречался с глюками ... это просто страховалки
38 never_sleep
 
05.06.17
13:57
Ребят, я тут в собственном соку варюсь. Коллег 1Сников нет. поэтому "Эдвард-РукиИзЖеппы". Вы уж не обижайтесь. Но миста для меня фактически "Окно в Европу".
39 Масянька
 
05.06.17
14:04
Афигеть... Читатели, блин... :))))
40 never_sleep
 
05.06.17
14:14
Подскажите, а зачем было ограничивать функциональность ссылок получаемых как "ТекДокРеализация = СЗСписокРеализаций.ПолучитьЗначение(К);"?
ТекДокРеализация уже объявлен как объект Документ.Реализация. Ну передал я ссылку в него на другой документ. Что бы сразу не работать с ним как с полноценным документом?
41 HawkEye
 
05.06.17
14:33
(40) во-первых... "ТекДокРеализация уже объявлен как объект Документ.Реализация" - где?
во вторых "СЗСписокРеализаций.ПолучитьЗначение(К)" - вернет ссылку...
в третьих "Что бы сразу не работать с ним как с полноценным документом" - работай как с ссылкой, в чем проблема?
42 Йохохо
 
05.06.17
14:39
(40) как доделаешь, давай еще про Неопределено, Классы и ООП
43 never_sleep
 
05.06.17
14:40
(41) Ну я не стал сюда вставлять кусок с объявлением который выше по коду шел.

ТекДокРеализация = СоздатьОбъект("Документ.Реализация");

Я вот так написал. Все работает, спасибо.
ТекДокРеализация.НайтиДокумент(СЗСписокРеализаций.ПолучитьЗначение(К));

Далее "Вернет ссылку". Ну вот и отлично. Ссылка - это же указатель на место в памяти где лежит объект, так ведь. И я её передал в корректную переменную. Что бы сразу не дать мне пользоваться всем тем, что там лежит по адресу.
44 never_sleep
 
05.06.17
14:42
(42) Да я в нем и не волоку достаточно, если бы уж быть честным.
45 Йохохо
 
05.06.17
14:43
(43) написал же Ёпрст в (29) "НайтиДОкумент в клюшках, это аналог ПолучитьОбъект в снеговике." А ты опять "Далее "Вернет ссылку"."
46 never_sleep
 
05.06.17
14:47
Я просто не пойму физическую разницу между:
СЗСписокРеализаций.ПолучитьЗначение(К)
и
ТекДокРеализация.НайтиДокумент(СЗСписокРеализаций.ПолучитьЗначение(К))

И там и там в ячейке ОЗУ, в которой будет храниться что первое что второе значение, разве будет не ссылка на конкретный документ?
47 Йохохо
 
05.06.17
14:51
(46) первое только данные, у которых нет метода .Записать()
48 never_sleep
 
05.06.17
14:53
(47) Да я понял. Что первый - это как бы гольная ссылка. А второй - уже вроде как живой объект. Вопрос в том, если на физическом уровне скорее все одинаково, зачем все разделять на идеологическом?
49 1dvd
 
05.06.17
15:04
это... А транзакции не предлагали ещё?