Имя: Пароль:
1C
1С v8
Движение по созданному регистру
0 Aldnepr
 
07.12.17
10:43
Создал новый регистр накопления с одним измерением- "Грузчик" и ресурсы- "Вес" и ВесПН", не могу сделать по нему движения, ругается Запись не верна! Период не может быть пустым! (Регистр накопления: Отгрузки по грузчикам; Номер строки: 1), что не доделал?

Процедура ПровестиПоГрузчику(Гр) Экспорт
                                                        
    ОбщийВес = ИтВес;
НаборЗаписей = РегистрыНакопления.ОтгрузкиПоГрузчикам.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
Запись = НаборЗаписей.Добавить();
Запись.Регистратор = ЭтотОбъект.Ссылка;
Запись.Грузчик = Гр;
Запись.Вес = 0;
Запись.ВесПН = ОбщийВес / тКоэф;
НаборЗаписей.Записать();  
    
КонецПроцедуры
1 rabbidX
 
07.12.17
10:45
Период не может быть пустым
2 Ненавижу 1С
 
гуру
07.12.17
10:45
наверное Период заполнить, логично?
3 1Садовник
 
07.12.17
10:47
Запись.Период = .... заполни нужной датой
4 Aldnepr
 
07.12.17
10:53
(3) Да, так и есть. Спасибо! Скажите, а при отмене проведения или корректировке этого документа надо удалять записи из регистра, чтобы они не задвоились? И есть ли инструмент какой то для просмотра записей регистра, что в нем накоплено
5 Веселый собака
 
07.12.17
10:56
(4) автоматические движения установи.
6 Адинэснег
 
07.12.17
10:58
семерошники подтянулись :-D
7 hhhh
 
07.12.17
10:59
(4) скопируй все мысли из типовых регистров
8 nordbox
 
07.12.17
10:59
(4)>>И есть ли инструмент какой то для просмотра записей регистра, что в нем накоплено
Есть, открой Все функции и выбери нужный тебе регистр
9 Адинэснег
 
07.12.17
10:59
она еще сырая, период какой-то все время просит в регистре накопления...
10 nordbox
 
07.12.17
11:00
(9) не издевайся над человеком
11 Волшебник
 
модератор
07.12.17
11:00
(9) Это он ещё с регистрами сведений не сталкивался. Те вообще уничтожаются одной строкой
12 Веселый собака
 
07.12.17
11:02
(11) Двумя!
13 Aldnepr
 
07.12.17
11:04
(5) где они устанавливаются?
14 Адинэснег
 
07.12.17
11:05
разберись сначала с регистрами накопления, проникся...
найди отличие РН остатов от РН оборотов...
потом покури виртуальные таблицы оборотов и таблицы остатков и оборотов
потом посмотри в консоли запросов, что всё <s>украдено</s> реализовано до нас
15 Aldnepr
 
07.12.17
11:05
(8) спасибо, нормально вроде все прописывается и в случае перепроведения и после отмены проводки. Можно успокоиться?)
16 Волшебник
 
модератор
07.12.17
11:06
(12) Одной!
17 hhhh
 
07.12.17
11:07
(15) нет нельзя,  автоматические движения - это хрень. Лучше сделай как в типовых регистрах сделано.
18 Адинэснег
 
07.12.17
11:07
(12)одной Записать();
двумя можно нечаяно отбор установить
19 Aldnepr
 
07.12.17
11:07
(11) Сталкивался. Еще та гадость) спросил разок тут- затролили только, пока отложил их
20 nordbox
 
07.12.17
11:07
(15) Ну это смотря какая у тебя задача
21 Волшебник
 
модератор
07.12.17
11:08
РегистрыСведений.СамыйВажныйРегистр.СоздатьНаборЗаписей().Записать();
22 Веселый собака
 
07.12.17
11:09
(21) Это уже намеренное вредительство. Памятка шпиону.
23 MrStomak
 
07.12.17
11:09
(18) Не можешь уничтожить РС одной строкой? Слабак!
24 Aldnepr
 
07.12.17
11:09
(20) Задача очень простая- простенький регистр для разноса перенесенного веса по грузчикам.И строить отчет по нему, и сделать как можно проще)
25 Адинэснег
 
07.12.17
11:10
26 nordbox
 
07.12.17
11:11
(24) ну поиграйся с данными. если тебя устроит то оставляй
27 nordbox
 
07.12.17
11:13
Посмотри как в типовых сделано, как у других сделано, на разных сайтах пошарься, выбери то что тебе нравится.
28 VladZ
 
07.12.17
11:13
(21) Это, конечно, они зря сделали.
Убить большой объем данных одной строкой - это нифига ненадежно.
29 Волшебник
 
модератор
07.12.17
11:16
(28) Согласен
30 Aldnepr
 
07.12.17
11:16
(21) Вот благодарка за такое! буду знать теперь, что в регистры сведений и не заходить без бахилл
31 Адинэснег
 
07.12.17
11:17
Запрос = Новый Запрос("ВЫБРАТЬ
                          |    ОтгрузкиПоГрузчикамОбороты.Грузчик КАК Грузчик,
                          |    ОтгрузкиПоГрузчикамОбороты.ВесОборот КАК ВесОборот,
                          |    ОтгрузкиПоГрузчикамОбороты.ВесПНОборот КАК ВесПНОборот
                          |ИЗ
                          |    РегистрНакопления.ОтгрузкиПоГрузчикам.Обороты КАК ОтгрузкиПоГрузчикамОбороты");
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Строка(Выборка)+ " перетащил " + Строка(Выборка.ВесОборот)  + " И "+ Строка(Выборка.ВесПНОборот));
    КонецЦикла;
32 Адинэснег
 
07.12.17
11:17
Сообщить(Строка(Выборка.Грузчик)+ " перетащил " + Строка(Выборка.ВесОборот)  + " И "+ Строка(Выборка.ВесПНОборот));
33 Aldnepr
 
07.12.17
11:19
(32) ))) "перетащил"+" И"+"  не сдох!"
34 Адинэснег
 
07.12.17
11:22
Можно без запросов, вызывать метод(у него кстати тоже параметры, для отбора и группировки), который вернет таблицу значений , потом таблицу обойти...
ТаблицаОборотов = РегистрыНакопления.ОтгрузкиПоГрузчикам.Обороты();
    Для Каждого СтрокаТаблицы Из ТаблицаОборотов Цикл
        Сообщить(Строка(СтрокаТаблицы.Грузчик)+ " перетащил " + Строка(СтрокаТаблицы.ВесОборот)  + " И "+ Строка(СтрокаТаблицы.ВесПНОборот));
    КонецЦикла;

но лучше сразу кури запросы
35 Aldnepr
 
07.12.17
11:24
(34) чего то записывает одну запись только, а участвует 2 грузчика и отладчик подтверждает((. Кину полный код
Процедура ПровестиПоГрузчику(Гр) Экспорт
                                                        
    ОбщийВес = ИтВес;
НаборЗаписей = РегистрыНакопления.ОтгрузкиПоГрузчикам.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
Запись = НаборЗаписей.Добавить();
Запись.Регистратор = ЭтотОбъект.Ссылка;
Запись.Период= Дата;
Запись.Грузчик = Гр;
Запись.Вес = 0;
Запись.ВесПН = ОбщийВес / тКоэф;
НаборЗаписей.Записать();  
    
КонецПроцедуры

// =========================================================
Процедура ПоГрузчикам()
    
    тКоэф = (ЗначениеЗаполнено(Грузчик1)) + (ЗначениеЗаполнено(Грузчик2)) + (ЗначениеЗаполнено(Грузчик3)) + (ЗначениеЗаполнено(Грузчик4));
    
    Если тКоэф > 0 Тогда

        Если ЗначениеЗаполнено(Грузчик1) = 1 Тогда
            ПровестиПоГрузчику(Грузчик1);
        КонецЕсли;
        Если ЗначениеЗаполнено(Грузчик2) = 1 Тогда
            ПровестиПоГрузчику(Грузчик2);
        КонецЕсли;
        Если ЗначениеЗаполнено(Грузчик3) = 1 Тогда
            ПровестиПоГрузчику(Грузчик3);
        КонецЕсли;
        Если ЗначениеЗаполнено(Грузчик4) = 1 Тогда
            ПровестиПоГрузчику(Грузчик4);
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры
36 Веселый собака
 
07.12.17
11:27
(35) ну.. все правильно.
Одна запись на 1 регистратор )
37 Aldnepr
 
07.12.17
11:29
(36) как исправить((
38 Веселый собака
 
07.12.17
11:31
(37) Отбором.
39 Aldnepr
 
07.12.17
11:32
(38) черкни если не трудно строчку
40 Aldnepr
 
07.12.17
11:33
(38) НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
есть же отбор
41 Веселый собака
 
07.12.17
11:35
(40) Это неполный отбор. добавь конкретного грузчика.
42 Табуретко
 
07.12.17
11:38
(35)НаборЗаписей.Записать(Ложь);
43 MrStomak
 
07.12.17
11:38
(41) И давно в РН можно ставить отбор на измерение?
44 Леха Дум
 
07.12.17
11:41
(27) Советовать новичку с неокрепшей психикой посмотреть как сделаны движения по регистрам в типовых??? да это просто знатный троллинг! :)
(30) там не бахилы нужны, а прямые руки :)
45 Адинэснег
 
07.12.17
11:42
какого енга у тебя грузчики в реквизитах? запихни в тч
46 MrStomak
 
07.12.17
11:42
(42) Да. После этого только нужно будет убедиться, что либо в начала регистр вручную очищается, либо стоит автоматическое удаление движений при отмене проведения.
47 Адинэснег
 
07.12.17
11:46
ЗначениеЗаполнено(Грузчик3) = 1
нахрена метод, возвращающий Булево сравнивать с числом?
забудь уже 7ку
48 Табуретко
 
07.12.17
11:46
(46) в (15) уже вроде разобрались с автоматом, не?
49 MrStomak
 
07.12.17
11:47
(48) Нет, там не было Записать(Ложь)
50 Aldnepr
 
07.12.17
11:47
(42) Так работает). При отмене проведения регистр очищается по этому регистратору, при корректировке накладной тоже меняет как надо. Можно считать задачу выполненой?
51 dezss
 
07.12.17
11:48
(40) только надо добавлять сразу все строки из этого документа движения, а не по-очереди.
52 Табуретко
 
07.12.17
11:48
(50) нет
53 Aldnepr
 
07.12.17
11:49
(52) что еще проверить?
54 Адинэснег
 
07.12.17
11:49
когда 5й грузчик устроится, или вес захотят не пропорционально распределить - заработаешь еще на тарелку супа...
55 Адинэснег
 
07.12.17
11:49
считай выолнено
56 1Садовник
 
07.12.17
11:51
Добавь просто что бы работало:
НаборЗаписей.Отбор.Грузчик.Установить(Гр);

А так по хорошему нужно ВСЕ переделывать
57 ИТ директор
 
07.12.17
11:53
(0) Чувак так никто не делает. Нужно один раз создать набор записей, заполнить его и записать. Но для начала пойдет, бгг, будешь потом смотреть и ржать над собой.
58 hhhh
 
07.12.17
11:53
(50) "Можно считать задачу выполненой" - когда деньги появятся у тебя в кармане, тогда и будешь считать выполненной. А пока забей, каждую минуту что ли будешь анализировать, считать выполненной или не считать?
59 Aldnepr
 
07.12.17
11:54
(56) а вот так отбор не работает!Поле объекта не обнаружено (Грузчик)
60 Aldnepr
 
07.12.17
11:55
(57) ну это все проделки 7,7. Не просто вывести ее, нужен мемори фул ирейз (
61 MrStomak
 
07.12.17
11:56
(56)
И давно в РН можно ставить отбор на измерение?
62 Веселый собака
 
07.12.17
11:56
(59) понравилось? )

Вот такой прикол- надо все из регистратора писать разом.
63 Веселый собака
 
07.12.17
11:57
(61) 1С- это квест! Без своих шишек руки не выпрямятся.
64 Ненавижу 1С
 
гуру
07.12.17
11:58
65 ИТ директор
 
07.12.17
11:58
(60) Вообще всё переделай тогда, движения заполняй в процедуре ОбработкаПроведения(), данные получай запросом, явную запись не вызывай.
66 hhhh
 
07.12.17
11:59
(59) ну так пробуй

+ Code

Процедура ПровестиПоГрузчику(Гр, НаборЗаписей) Экспорт
                                                        
    ОбщийВес = ИтВес;

Запись = НаборЗаписей.Добавить();
Запись.Регистратор = ЭтотОбъект.Ссылка;
Запись.Период= Дата;
Запись.Грузчик = Гр;
Запись.Вес = 0;
Запись.ВесПН = ОбщийВес / тКоэф;

    
КонецПроцедуры

// =========================================================

Процедура ПоГрузчикам()
    
    тКоэф = (ЗначениеЗаполнено(Грузчик1)) + (ЗначениеЗаполнено(Грузчик2)) + (ЗначениеЗаполнено(Грузчик3)) + (ЗначениеЗаполнено(Грузчик4));
    
    Если тКоэф > 0 Тогда

  НаборЗаписей = РегистрыНакопления.ОтгрузкиПоГрузчикам.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);  
    Если ЗначениеЗаполнено(Грузчик1) Тогда
            ПровестиПоГрузчику(Грузчик1, НаборЗаписей);
        КонецЕсли;
        Если ЗначениеЗаполнено(Грузчик2) Тогда
            ПровестиПоГрузчику(Грузчик2, НаборЗаписей);
        КонецЕсли;
        Если ЗначениеЗаполнено(Грузчик3) Тогда
            ПровестиПоГрузчику(Грузчик3, НаборЗаписей);
        КонецЕсли;
        Если ЗначениеЗаполнено(Грузчик4) Тогда
            ПровестиПоГрузчику(Грузчик4, НаборЗаписей);
        КонецЕсли;
НаборЗаписей.Записать();        
    КонецЕсли;

КонецПроцедуры
67 1Садовник
 
07.12.17
12:02
(61) Думал с сегодняшнего дня можно... согласен, косяк)
68 Адинэснег
 
07.12.17
12:03
ну и еще, у тебя 146% в этом коде будет "проблема последней копейки"
Общий вес 10, грузчика 3...
нужно распределить на максимальный коэффициент (хотя он у тебя всегда 1, значит на любого грузчика) остаток
69 MrStomak
 
07.12.17
12:03
Если честно, автору нужны не советы на мисте, а ударные дозы Радченко.
Всё сделано максимально неправильно.
Даже если закрыть глаза на поля Грузчик1..4, писать нужно так:
Набор = Движения.ОтгрузкиПоГрузчикам;
Набор.Записывать = истина;
Для Сч = 1 по 4 Цикл
Если НЕ ЭтотОбъект["Грузчик"+Сч].Пустая() Тогда
Запись = Набор.Добавить();
Запись.Период= Дата;
Запись.Грузчик = ЭтотОбъект["Грузчик"+Сч];
Запись.ВесПН = ОбщийВес / тКоэф;
КонецЕсли;
КонецЦикла;
70 Адинэснег
 
07.12.17
12:03
дело было не в восьмерке...
71 Адинэснег
 
07.12.17
12:06
а в начале обработки поставить...

Движения.ОтгрузкиПоГрузчикам.Записывать = Истина;    Движения.ОтгрузкиПоГрузчикам.Очистить();
72 Табуретко
 
07.12.17
12:07
щас тебе допилят до 1С совместимо ))
73 ИТ директор
 
07.12.17
12:09
(69) 4 раза запускаешь чтение объекта, если у него есть ТЧ, 4 лишних транзакции, если в ТЧ тысячи строк, это тысячи лишних чтений. Запросом надо.
74 MrStomak
 
07.12.17
12:11
(73) Ни одного чтения объекта не запускаю
75 MrStomak
 
07.12.17
12:11
И ни одного обращения к базе данных там нет.
76 Адинэснег
 
07.12.17
12:11
ЭтотОбъект["Грузчик"+Сч].Пустая()
77 ИТ директор
 
07.12.17
12:12
(74) Ты к реквизиту объекта обращаешься? Разве при этом не читается весь объект?
78 MrStomak
 
07.12.17
12:13
(76) Это не обращение к БД. Это работает даже на тонком клиенте. 1Ска умеет понимать пустые ссылки без вызова СУБД.
79 Адинэснег
 
07.12.17
12:13
(77) ну не из БД хоть, из памяти
80 MrStomak
 
07.12.17
12:14
(77)
Этот объект - это документ, который проводится. Он уже был прочитан при создании. Конструкция ЭтотОбъект["Грузчик1"] абсолютно идентична просто Грузчик1.
81 MrStomak
 
07.12.17
12:15
(77) Даже если бы я обращался по Ссылка.Грузчик - обращение к БД было бы только 1, а не 4, т.к. вызовы кешируются.
82 ИТ директор
 
07.12.17
12:17
А ну да, это же модуль объекта и читаем только его реквизиты. Чота я затупил.
83 MrStomak
 
07.12.17
12:19
(82) Код на мисте лучше не выкладывать - немедленно разведут обсуждение как всё неправильно :))
84 Адинэснег
 
07.12.17
12:21
мы семёрошника не отпинали еще, и уже между собой
85 nordbox
 
07.12.17
12:24
(83)>>немедленно разведут обсуждение как всё неправильно :))
И доведут простую задачу до абсурда )))
86 Aldnepr
 
07.12.17
12:30
(83) хоть левел тролинга на мисте и зашкаливает, даже и от модера)), но только тут можно получить оперативную и порой очень качественную инфу. На других площадках можно ждать ответа до того лета), или модеры изводят до тошноты.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn