Имя: Пароль:
1C
1С v8
Запись движений в регистр накопления
, ,
0 Яна93
 
30.11.15
15:34
Всем привет! У меня вопрос..как записать движения в регистр накопления из документа с табличной частью следующего вида:
Номенклатура | День 1 | День 2 | День 3 | День 4 ... | День N

Где дни это даты как заголовок колонки..а в значениях самой колонки будет количество самой номенклатуры.. Регистр сведений будет следующего вида: Дата | Номенклатура | Количество.. Как будет выглядеть процедура по записи в регистр?
1 Cyberhawk
 
30.11.15
15:37
Дерево реквизитов табичной части из конфигуратора покажи на картинке
2 aleks_default
 
30.11.15
15:39
Для каждого Колонка из ТабличнаяЧасть.Колонки цикл
ЧислоДень  = Число(СтрЗаменить(Колонка.Имя,"День","");
День = Дата(ЧислоГод,ЧислоМесяц,ЧислоДень);
КонецЦикла;
3 RomanYS
 
30.11.15
15:41
Запись.Дата = НачМесяца + (инд-1)*3600*24;
Запись.Количество = Строка["День"+инд];
4 Nuobu
 
30.11.15
15:41
Для каждого Колонка из ТабличнаяЧасть.Колонки цикл
Попытка
ЧислоДень  = Число(СтрЗаменить(Колонка.Имя,"День","");
Исключение
Продолжить;
КонецПопытки;
День = Дата(ЧислоГод,ЧислоМесяц,ЧислоДень);
КонецЦикла;
5 aleks_default
 
30.11.15
15:42
(4) списал:)
6 Мимохожий Однако
 
30.11.15
15:42
(0)А структуру регистра накопления Пушкин будет угадывать?
7 Nuobu
 
30.11.15
15:43
(5) Исправил.
8 Nuobu
 
30.11.15
15:43
(6) Регистр сведений будет следующего вида: Дата | Номенклатура | Количество..
9 Яна93
 
30.11.15
15:44
(1) http://pixs.ru/showimage/tchjpg_5914411_19695687.jpg
Документ с такой табличной частью составила сама сегодня..
10 salvator
 
30.11.15
15:44
(0) "Где дни это даты как заголовок колонки"
В заголовке именно "День 1" или именно полная дата указана как дд.мм.гггг?
11 aleks_default
 
30.11.15
15:44
(7)Ой да ладно, если структура таб. части постоянна, то попытка нафиг ненужна.
12 Яна93
 
30.11.15
15:45
(6) Регистр накопления оборотный..
13 Яна93
 
30.11.15
15:45
(10) полная дата указана как дд.мм.гггг
14 Nuobu
 
30.11.15
15:45
(11) А первые три колонки?
15 Cyberhawk
 
30.11.15
15:45
Лучше бы ТЧ имела три реквизита: НомерДня, Номенклатура, Количество... а в форме бы уже "обернула" их в красивую динамически создаваемую и заполняемую ТЧ
16 aleks_default
 
30.11.15
15:45
Вернее попытка нужна не при преобразовании в число, а при преобразовании в дату.
17 Nuobu
 
30.11.15
15:46
(16) Она нужна и там и там.
18 Яна93
 
30.11.15
15:47
(15) я так не умею..есть где подобная статься? Я ни чего не находила..
19 Мимохожий Однако
 
30.11.15
15:47
(15)+100500.
20 aleks_default
 
30.11.15
15:48
Ну, блин, не на полстраницы текста же мне писать учитывая все нюансы.
Идея,короче, понятна...
21 aleks_default
 
30.11.15
15:49
(15) Там дофига кода писать придется. Обработчики на все возможные события переделывать.
22 salvator
 
30.11.15
15:51
(18) Количество колонок равно количеству дней в месяце от даты документа?
23 Cyberhawk
 
30.11.15
15:53
(18) Поищи "динамическое создание элементов управления на форме" в разных вариациях на ИС
(21) Соглашусь... конечно, зависит от требований к удобству по работе с формой... судя по ТС, там нет никаких выкрутасов особых не нужно (пока)
24 Nuobu
 
30.11.15
15:53
(22) Ну, только если количество дней в месяцах совпадает, то да))
25 Cyberhawk
 
30.11.15
15:55
(22) (24) Это уже рюшечки - ведь довольно просто программно изменить видимость последних колонок в таблице в зависимости от кол-ва дней в месяце
26 Cyberhawk
 
30.11.15
15:55
+(25) или еще проще - ругаться при записи из формы, если в "запрещенном" дне введены данные
27 Яна93
 
30.11.15
15:57
Так как в итоге при проведении документа записать движения? Обычный конструктор движений тут не помощник..
28 salvator
 
30.11.15
15:57
(27) См (2), (4). Проходи циклом по колонкам, выцепляй из их имени дату и пиши ее в РС
29 Cyberhawk
 
30.11.15
15:58
(27) Создаешь набор записей... далее цикл по табличной части... по каждой строке еще один цикл по дням...
30 aleks_default
 
30.11.15
16:00
(27) Может попробуешь, для начала? А то все как, да как...
31 salvator
 
30.11.15
16:00
+(28) Только если у тебя имя колонки в формате дд.мм.гггг, то писать надо что-то типа для каждой строки

Для каждого Колонка из ТабличнаяЧасть.Колонки цикл
   ДатаРС = Дата(СокрЛП(Колонка.Имя)+" 0:00:00");
КонецЦикла;
32 Nuobu
 
30.11.15
16:02
(31) Ты представляешь имя колонки в таком формате?
33 Мимохожий Однако
 
30.11.15
16:06
(27)И всё-таки...Напиши структуру регистра.
34 Яна93
 
30.11.15
16:11
35 Nuobu
 
30.11.15
16:15
(34) Меня смущает ДатаПотребности.
36 Яна93
 
30.11.15
16:18
(35) Это и есть дата колонки
37 Мимохожий Однако
 
30.11.15
16:27
(34)Это "я сама"? )) Нет слов.
38 Яна93
 
30.11.15
16:29
(37) Что не так?
39 ejikbeznojek
 
30.11.15
16:37
(38)
Может лучше было бы оставить одну колонку "День"
И писать набор строк в этой ТЧ с разными цифрами в этой колонке?
40 Nuobu
 
30.11.15
16:40
(36) Может, Период, это дата колонки?
41 Яна93
 
30.11.15
16:45
(40) Нет...период будет начало месяца проставлено..
42 D_E_S_131
 
30.11.15
16:50
(41) А смысл?
43 Яна93
 
30.11.15
16:50
(39) Может и так оставлю..еще не определилась...зависит от того как будет проще реализовать.. пока все на стадии реализации)
44 ejikbeznojek
 
30.11.15
16:51
(43)
тогда одной строке ТЧ, будет соответствовать одна запись в регистре.
45 D_E_S_131
 
30.11.15
16:52
+ (44) и можно будет движения конструктором написать. :)
46 Яна93
 
30.11.15
16:54
(44) А, не так поняла..я подумала про наименование День 1 либо полная дата в наименовании колонки...нет..каждый день в новой колонке будет... (45) я бы только рада была упростить себе жизнь)
47 D_E_S_131
 
30.11.15
16:58
(46) В документе будет ТЧ с з-мя колонками: Номенклатура, ДатаПотребности, Количество.
В шапке документа сделаешь реквизит МесяцПотребности (если уж так надо Период в движениях ставить на начало месяца).
В форме документа можно сделать 2 ТЗ - в одной например отобразить номенклатуру и общее кол-во потребности в этом месяце, а в другой отобразить детализацию потребностей по дням. При открытии документа программно все это "отрисовывать".
48 Яна93
 
07.12.15
09:05
Еще раз всем привет) Знаю, будете ругаться, но я пока не реализовала свой замысел касаемо записи движений в регистре накопления.. Пока возникла проблема с заполнением табличной части документа.. :) Я запросом получаю все необходимое: Номенклатуру, ее характеристику и единицу измерения, Количество и дату.. Каким образом сделать обход по результату запроса так чтобы значения встали на свои места? Я имею ввиду дата попала в заголовок колонки а номенклатура и количество в соответствующие этой дате ячейки строки...
Тип у колонок Дата число..так как там будет вносится Количество... Ни где в интернете нет подобного примера..

Номенклатура | Характеристика | ЕдИзм | Дата1 | Дата2 ..  | ДатаN
49 aleks_default
 
07.12.15
09:13
(48)Ну делаешь обход по ТЧ построчно, а внутри цикл как в (2). Что сложного?
50 Яна93
 
07.12.15
09:23
(49) Имеешь ввиду обход по результату запроса? В простом варианте я бы записала вот так:
Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Новая = ТЧ.Добавить();
        ЗаполнитьЗначенияСвойств(Новая, Выборка);
    КонецЦикла;


Но у меня Дату надо в наименование колонки записать..а количество под этой датой.. Я даже представить себе не могу как это записать..
51 Яна93
 
07.12.15
09:49
Наверное стоит написать эту задачу в новой ветке? Т.к. все продолжают думать, что мне нужно реализовать движение по регистру накоплений..а у меня совсем другая проблема - (48)
52 aleks_default
 
07.12.15
10:05
(50) Зависит от того  какая у тебя структура результата запроса.
53 Яна93
 
07.12.15
10:10
(52) Ну вот итоговая часть запроса, в результате я получаю Номенклатуру, Характер.,ЕдИзм, Количество, Дату


ВЫБРАТЬ
    ВТ.Номенклатура,
    ВТ.ХарактеристикаНоменклатуры,
    СУММА(ВТ.Количество) КАК Количество,
    ВТ.ЕдиницаИзмерения,
    ВТ.Дата КАК Дата
ИЗ
    ВТ КАК ВТ
ГДЕ
    ВТ.Количество <> 0

СГРУППИРОВАТЬ ПО
    ВТ.Номенклатура,
    ВТ.ХарактеристикаНоменклатуры,
    ВТ.ЕдиницаИзмерения,
    ВТ.Дата

УПОРЯДОЧИТЬ ПО
    Дата
54 Helldown
 
07.12.15
10:13
Поддерживаю (39), (44), (45).
Сделай нормальную табличную часть и "отрисуй" её как требуется.
55 Яна93
 
07.12.15
10:16
(54) Я так сперва и делала, но нужно сделать по другому.. как обрисовала (48)
56 Helldown
 
07.12.15
10:25
(55) Нужно сделать для чего? Для визуального представления в ТЧ документа?
57 Яна93
 
07.12.15
10:29
(56) Да, чтобы пользователь мог зайти в документ и визуально ему будет удобнее ориентироваться, заодно и номенклатура сгруппируется..одна номенклатура в одной строке и количество этой номенклатуры в этой же строке, но на разных датах..повторюсь, что даты будут в наименовании колонок.. Ни когда ни чего подобного не делала - поэтому и не знаю как реализовать
58 aleks_default
 
07.12.15
10:37
Добавь в запрос
ИТОГИ ПО
Номенклатура, Характеристика,ЕдиницаИзмерения


Выборка1 = Запрос.Выполнить().Выбрать
(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка1.Следующий() цикл
Выборка2 = Выборка1 .Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка2.Следующий() цикл
Выборка3 = Выборка2 .Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка3.Следующий() цикл
        Новая = ТЧ.Добавить();
ЗаполнитьЗначенияСвойств(Новая, Выборка3);


Выборка = Выборка3.Выбрать()

    Пока Выборка.Следующий() Цикл
НомерДня = ДеньВмесяце(Выборка.дата)
                Новая["День"+НомерДня] = Выборка.Количество;
    КонецЦикла;

примерно так
наверное есть ошибки, писал на скорую руку
59 Яна93
 
07.12.15
10:43
(58) Вот это дааа) Ни когда не видела подобного)) Огромное спасибо! Буду пробовать)
60 aleks_default
 
07.12.15
10:47
(59) Я сегодня добрый, с утра :)
61 Яна93
 
07.12.15
10:49
(58) И сразу вопрос.. как я поняла ЗаполнитьЗначенияСвойств(Новая, Выборка3); мы заполним Номенклатура, Характеристика,ЕдиницаИзмерения. А после мы для них находим нужное количество..а до этого нужно будет наименование колонки переименовать в дату которую мы получим из запроса? Или я снова туплю?)
62 aleks_default
 
07.12.15
10:56
(68) Если у тебя структура колонок Табл. части такая как  описано в (48), то ничего переименовывать не надо.
Я так понимаю что у теюя колонки "Дата1,Дата2,Дата3,... Дата31"?. Ну то есть 1 месяц?
63 Яна93
 
07.12.15
11:01
(62) Ну я просто хочу эти Дата1, Дата2 переименовать в дни которые получу из запроса Дата..чтобы в дальнейшем использовать эти даты для записи в регистр накопления как было в исходной задаче (0)
64 aleks_default
 
07.12.15
11:06
(63)Переименовать ИМЯ колонки у тебя не получится. Можно поменять только заголовок.
65 hhhh
 
07.12.15
11:08
(64) заголовок тоже нельзя.
66 Яна93
 
07.12.15
11:08
(64) получается функцию по замене заголовка я вставляю в цикл
  Пока Выборка.Следующий() Цикл

{БлаБлаБла=ЗаменимЗаголовок}

НомерДня = ДеньВмесяце(Выборка.дата)
                Новая["День"+НомерДня] = Выборка.Количество;
    КонецЦикла;
67 Яна93
 
07.12.15
11:09
(65) Как нельзя? Я вроде находила подобное..
68 aleks_default
 
07.12.15
11:12
()Зачем? Тебе нужно один раз пройтись по колонкам и изменить заголовок, а не много раз при обходе выборки.
У тебя же на форме есть реквизит типа "Месяц"? Вот и сделай один цикл с обходом дней этого месяца.
69 Яна93
 
07.12.15
11:14
(68) Так вот говорят нельзя заменить заголовок - (65)
70 aleks_default
 
07.12.15
11:21
(69) В УФ можно.
71 Яна93
 
07.12.15
11:23
(70) У меня УФ :)
72 aleks_default
 
07.12.15
11:24
(70) + Про обычные уже не помню, но по-моему тоже можно было.
73 aleks_default
 
07.12.15
11:27
В общем, мне работать надо.
Тебе полезно будет посмотретьт как реализована форма табеля в любой типовой конфе.
74 Яна93
 
07.12.15
11:31
(73) Спасибо большое, Добрая душа! ;)
75 Helldown
 
07.12.15
12:56
(57) Для визуальной красоты не обязательно "уродовать" табличную часть объекта, достаточно лишь правильно визуально выводить в табличном поле то, что нужно.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший