Вход | Регистрация


1С:Предприятие ::

Метки: 

Движение по созданному регистру

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

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

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

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

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

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

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

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


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

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

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



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