Имя: Пароль:
1C
1С v8
Получить данные регистра, которые записаны туда открытым новым документом
,
0 PolinaPykh
 
23.09.22
14:39
У меня кризис:
Есть документ ЗаданияНаРаботу
Он умеет записывать регистр трудозатрат, когда задание приостанавливается и когда завершается.
Приостанавливать и продолжать задание можно неограниченно много раз, так что записей может быть много.
Мне нужно из собрать, просуммировать и в этом же документе вывести в поле Трудоемкость. (+ эта трудоемкость будет в еще один регистр писаться)

&НаКлиенте
Процедура РассчитатьТрудоемкость(ДанныеСтроки) //не работает
        
    СуммаТрудозатрат = 0;
    
    МассивТрудозатраты = РасчетТрудозатрат();
    
    Пока МассивТрудозатраты.ЗаданиеСсылка = ДокументСсылка Цикл
        
        Для Каждого Элемент из МассивТрудозатраты Цикл
            
            Если ТипЗнч(Элемент) = Тип("Число") Тогда
                СуммаТрудозатрат = СуммаТрудозатрат + Элемент;
            Иначе
                Возврат;
                
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;    
            
    ДанныеСтроки.Трудоемкость = СуммаТрудозатрат;
    
КонецПроцедуры

//pp работает?
&НаСервереБезКонтекста
Функция РасчетТрудозатрат()
    
    ТабТрудозатраты = Новый ТаблицаЗначений();
    
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ижтисиТрудозатраты.Трудозатраты КАК Трудозатраты,
            |    ижтисиТрудозатраты.Задание.Ссылка КАК ЗаданиеСсылка
            |ИЗ
            |    РегистрСведений.ижтисиТрудозатраты КАК ижтисиТрудозатраты
            |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаРаботу КАК ЗаданиеНаРаботу
            |        ПО ижтисиТрудозатраты.Задание = ЗаданиеНаРаботу.Ссылка";
    
        //Запрос.УстановитьПараметр("Ссылка", Документы.ЗаданиеНаРаботу.Ссылка);
        
        Результат = Запрос.Выполнить().Выбрать();
        
        Массив = Новый Массив;
            
        Пока Результат.Следующий()  Цикл
        
            Структура = Новый Структура;
            Структура.Вставить("Трудозатраты", Результат.Трудозатраты);
            Структура.Вставить("ЗаданиеСсылка",Результат.ЗаданиеСсылка);
        
        КонецЦикла;
        
        Возврат Массив;    
        
КонецФункции

Основная проблема в том, что я не понимаю как связать по ссылке мой новый документ и данные, взятые из регистра.

А может я вообще неправильный способ выбрала.

Беда, короче, спасите-помогите! Пожалуйста :(
1 Мультук
 
гуру
23.09.22
15:13
(0)

1) //Запрос.УстановитьПараметр("Ссылка", Документы.ЗаданиеНаРаботу.Ссылка);  

Где условие "ГДЕ" в запросе ?

2) Волшебные слова (агрегатные функции) СУММА, СГРУППИРОВТЬ ПО -- знакомы?

3) Зачем здесь массив? Почему Функция РасчетТрудозатрат() не в состояние сама прокрутить этот цикл и выдать "наверх" число ИтогоТрудозатрат ?

P.S.

Нет тут никаких способов.
Типичное псевдослучайное программирование
2 rudnitskij
 
23.09.22
18:04
(1) классика - человек не знает как ТЗ передать с сервера и передает массив структур
3 Быдло замкадное
 
23.09.22
18:11
(2) а как передать тз с сервера? Я реально не знаю
4 Сергиус
 
24.09.22
03:07
(3)Если на форме, то через реквизит можно)
5 Сергиус
 
24.09.22
03:22
(0)Можно сделать Трудоемкость реквизитом документа и вычислять в модуле объекта ПередЗаписью. В обработке проведения подставлять расчитанное.
6 PolinaPykh
 
26.09.22
09:02
(1)Согласна насчет псевдослучайного.
Строка с передачей параметра закомментирована, потому что у меня не получается передать параметр на сервер.
Если б я знала как передать параметр на сервер, тогда конечно все бы посчиталось в запросе - так проще и логичнее.
7 Мультук
 
гуру
26.09.22
09:11
(6)

&НаКлиенте
Процедура РассчитатьТрудоемкость(ДанныеСтроки) //не работает
        
    СуммаТрудозатрат = 0;
    НекаяСсылка = <тут уже сами смотрите>;
    МассивТрудозатраты = РасчетТрудозатрат(НекаяСсылка);

&НаСервереБезКонтекста
Функция РасчетТрудозатрат(НекаяСсылка)
  Запрос = Новый Запрос;
  Запрос.УстановитьПараметр("Ссылка", НекаяСсылка);


1) Вам нужно научиться программировать. Вообще.
Pascal, Си, java - без разницы

2) Дальше учиться программировать в 1С

3) Вот прямо куча примеров есть здесь
https://helpf.pro/
8 PolinaPykh
 
26.09.22
09:13
(1)Спасибо! Я просто из бухов пришла и провилась в техподдержку, а меня в отдел разработки стажером засунули - теперь страдаю.
9 Ryzeman
 
26.09.22
09:16
(8) Жестоко...
10 PolinaPykh
 
26.09.22
09:26
(8)Да, из приличных слов только "в" и "на". Мой максимум сейчас формочки покрасивее делать, объяснять пользователю где он не то нажал, ну еще СКД более менее. Я в печали(
11 Ryzeman
 
26.09.22
09:53
(0) Из постановки задачи вообще неясно что и где ты хочешь получить. Код не рабочий и не может быть рабочим. Хуже того - он не логичен.
Я могу предположить что это форма документа, но при чём тут тогда данные строки? Тебе надо посчитать в табличной части? При каком условии? Или это у тебя обработка?
Для расчёта реквизита для всего документа это будет выглядеть примерно так:


    
&НаКлиенте
Функция РассчитатьТрудоемкость()
   МойРеквизит = РасчитатьТрудозатраты(Объект.Ссылка)
КонецФункции

&НаСервереБезКонтекста
Функция РасчитатьТрудозатраты(СсылкаНаДокумент);
Результат = 0;
Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |   СУММА(ижтисиТрудозатраты.Трудозатраты) КАК Трудозатраты,
            |ИЗ
            |    РегистрСведений.ижтисиТрудозатраты КАК ижтисиТрудозатраты
            |        ГДЕ ижтисиТрудозатраты.Задание = &ЗаданиеНаРаботу";
Запрос.УстановитьПараметр("ЗаданиеНаРаботу", СсылкаНаДокумент)
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Результат = РезультатЗапроса.Выбрать()[0].Трудозатраты;
КонецЕсли;
Возврат Результат;
КонецФункции
12 Ryzeman
 
26.09.22
09:55
(10) Но в целом, сперва перед тем как браться желательно изучить целую фигуву тучу всего, как о программировании и языке запросов в целом, так и об особенностях клиент-серверного взаимодействия и объектной модели 1с... С наскоку сможешь научиться разве что печатные формы править
13 Обработка
 
26.09.22
10:06
Человек из техподержки попал в разработчки при чем не сам а просто перевели ее.
А сама то хочешь? Или просто из за ЗП сидишь страдаешь?
14 PolinaPykh
 
26.09.22
11:10
(13)Хочу, но мне явно рано. Курсы программирования я, конечно, прошла (ну типа общая структура процесса в голове есть), но с настоящей разработкой не сталкивалась.
ЗП у меня пока такая же как у бухов, но хоть думать надо))
15 PolinaPykh
 
26.09.22
11:23
(11)Я пытаюсь доработать существующий в конфигурации документ.
Трудоемкость - это строка табличной части, которая в оригинале проставляется только руками, т.е. пользователь должен сам свою трудоемкость посчитать. Однако, документ уже заполняет регистр фактическими трудозатратами, поэтому хотелось бы передать в эту табличную часть данные из регистра.
Эти данные строки используются по идее в расчете суммы (правда сумму там никто не считает) документ используется только для учета рабочего времени.
Как вариант можно вообще не морочить себе голову и передавать в отчет о трудозатратах данные из регистра.

А вообще я попала в ситуацию, когда главный (и единственный) программист сказала, что ей не интересно этим заниматься и вообще основная программа крутится, доработки все сделаны (они классные я видела), а кому еще что надо  - не мое дело.
16 rudnitskij
 
26.09.22
23:18
(3) Запрос = новый Запрос....
(тут текст запроса, параметры вот это вот всё)
...
ТабЗначНаФорме.Загрузить(Запрос.Выполнить.Выгрузить()); // это если ТЗ в реквизите формы
Объект.Таблица.Загрузить(Запрос.Выполнить.Выгрузить()); // это для табчасти документа
Все это естественно на сервере