Имя: Пароль:
1C
1C 7.7
v7: Заполнить в Документе1 данные из Документов2 с отбором
Ø (Злопчинский 28.01.2016 01:09)
0 irish-ka
 
27.01.16
15:46
Здравствуйте. Очень нужна помощь знающих людей. У меня нестандартная конфигурация 1С7.7 Есть документ Заказ, в котором имеются числовые реквизиты. Условно Рек1, Рек2, Рек3
Так же имеется реквизит Приёмщик (справочник ФИО). Сейчас я создаю другой вид документа, в котором нужно при нажатии кнопки "Рассчитать" (Процедура Рассчитать()) за указанный в документе период по указанному Приёмщику заполнить из документа Заказ суммы по каждому из трёх реквизитов (Рек1, Рек2 и Рек3). Проблем с кодом в модуле не возникает, когда я эти цифры в поля документа (в диалоговом окне) ввожу руками (они нужны для дальнейших рассчётов документа. Пользуюсь универсальным отчётом, чтоб узнать эти цифры), но не понимаю, как правильно прописать код в самом документе, чтоб эти цифры (суммы) вытаскивались автоматически из нужных документов Заказ.
1 vicof
 
27.01.16
15:49
Ох, Иришка. Показывай код, который ты уже написала.
2 irish-ka
 
27.01.16
16:11
Пока есть это:

Процедура Рассчитать()
Док=Док.Заказ;
Док.ВыбратьДокументы(Дата1,Дата2);
Пока Док.ПолучитьДокумент()=1 Цикл
       Если Док.Приёмщик=Приёмщик Тогда


А вот что дальше? Когда этот код идёт в Отчётах, там сосздаётся объект и таблицы. Но мне ведь не нужно этого, мне нужно только суммировать определённые данные и вывести их в диалоговом окне при прохождении процедуры Рассчитать. И правильно ли я задала Док=Док.Заказ? Этим я хотела прописать, по какому виду документа нужно выборку делать..., но сомневаюсь, что это правильно.
3 irish-ka
 
27.01.16
16:13
Ничего похожего по функционалу в моей конфигурации я не нашла, а документы с отбором данных из других документов я ещё не писала..
4 vicof
 
27.01.16
16:22
Похоже на правду. Теперь надо выбрать строки в документе и получать их, попутно суммируя в переменные нужные данные.
5 irish-ka
 
27.01.16
16:45
Выбор строк делаем так?

ВыбратьСтроки();

Пока ПолучитьСтроку()=1 Цикл

Как дальше задать, по каким реквизитам суммировать и в какое поле документа эти суммы прописывать?
6 irish-ka
 
27.01.16
16:45
Я так понимаю, что дальше должно быть условие Если, но как его тут правильно применить?
7 vicof
 
27.01.16
17:13
(6)
СуммаРек1 = 0;
....
пока получитьСтроку() = 1 цикл

  СуммаРек1 = СуммаРек1 + Док.Рек1;
...
8 Злопчинский
 
27.01.16
17:55
ТекстЗапроса="Период С ДатаН По ДатаК;
|ОбрабатыватьДокументы Проведенные;
|Без Итогов;
|Номенклатура=Документ.Номенклатура;
|Рекв1=Документ.Заказ.Рекв1;
|Рекв2=Документ.Заказ.Рекв2;
|Рекв3=Документ.Заказ.Рекв3;
|Приемщик=Документ.Заказ.Приемщик;
|Функция ИтогРекв1=Сумма(Рекв1);
|Функция ИтогРекв2=Сумма(Рекв3);
|Функция ИтогРекв3=Сумма(Рекв3);
|Условие(Приемщик=ВыбПриемщик);
|Группировка Номенклатура Без Групп;
|";

Запрос=СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса)<>1 Тогда Возврат; КонецЕли;

Пока Запрос.Группировка()=1 Цикл
Сообщить(""+Запрос.Номенклатура+" "+Запрос.ИтогРекв1+" "+Запрос.ИтогРекв2+" "+Запрос.ИтогРекв3);
КонецЦикла;

Примерно вот так, дальше сама допилишь...
9 Злопчинский
 
27.01.16
17:56
|Номенклатура=Документ.Номенклатура;
читать как
|Номенклатура=Документ.Заказ.Номенклатура;
10 HawkEye
 
27.01.16
18:38
(2) конечно не правильно, надо через СоздатьОбъект.
потом найтиДокумент
11 Злопчинский
 
27.01.16
18:39
(10) что ты хочешь от девочки, малоквалифицированной, да еще кинутой на семерку...
12 HawkEye
 
27.01.16
18:40
(11) ну уж точно не запрос писать )))))
13 irish-ka
 
27.01.16
22:25
Решила пока попробовать вывести только один реквизит в свой документ. Для начала прописать в документе сумму принятых Приемщиком заказов.

Процедура Рассчитать()  
    Процедура Рассчитать()  
    Док=СоздатьОбъект("Документ.Заказ");
Док.ВыбратьДокументы(Дата1,Дата2);
Пока Док.ПолучитьДокумент()=1 Цикл
    Если Док.ДатаДок>=Дата1 Тогда
        Продолжить;
    КонецЕсли;
    Если Док.ДатаДок<=Дата2 Тогда
        Продолжить;
        КонецЕсли;        
Если Приёмщик=Док.Приемщик Тогда           
       Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку()=1 Цикл  
    ЗаказовВсего=Док.СтоимостьЗаказаСкидка.Сумма;        
    КонецЦикла;
    КонецЕсли;
КонецЦикла;        
КонецПроцедуры


Ошибок никаких не выдаёт, но и ничего в документ не выводит.
14 irish-ka
 
27.01.16
22:28
С Запросом тоже всё сложно - с ними никогда не работала... не понимаю пока, каки куда их пихать.
15 Злопчинский
 
27.01.16
22:29
(14) стучись в скайп Zlopun - сейчас все удаленно поправим, сделаем, расскажу. покажу.
..слабость у меня к Иришкам...
16 Злопчинский
 
27.01.16
22:35
Док.ВыбратьДокументы(Дата1,Дата2);
и
    Если Док.ДатаДок>=Дата1 Тогда
        Продолжить;
    КонецЕсли;
    Если Док.ДатаДок<=Дата2 Тогда
        Продолжить;
        КонецЕсли;      

.
..как бы взаимоисключающие условия
17 Злопчинский
 
27.01.16
22:36
это что за хрень?
.
Пока Док.ПолучитьСтроку()=1 Цикл  
    ЗаказовВсего=Док.СтоимостьЗаказаСкидка.Сумма;        
КонецЦикла;
.
логика какая: перебрать все строки документа, но на выходе получить значение только для последнего? - НАФЕЙХОА?
18 Злопчинский
 
27.01.16
22:37
эти условия
    Если Док.ДатаДок>=Дата1 Тогда
        Продолжить;
    КонецЕсли;
    Если Док.ДатаДок<=Дата2 Тогда
        Продолжить;
        КонецЕсли;

вообще выкинь, они не нужны
..
чувствуется, что у тебя малость нет понимания что к чему.. ;-)
19 Смотрящий
 
27.01.16
22:39
неужель Йаркая проявилась ?
20 Хряк
 
27.01.16
22:50
вроде ещё не пятница, а здоровые мужики на развод уже клюют
21 irish-ka
 
27.01.16
22:52
По порядку...
(16)
Док.ВыбратьДокументы(Дата1,Дата2)

Дата1 и Дата2 - это реквизит документа, который я хочу заполнить. В них я задаю период отбора. В документе Заказ у меня есть разные даты. ДатаДок - дата документа, ДатаГотовности, ДатаВыдачи. Я хочу, чтоб период выборки был именно по Дате документа, а не какой либо другой.
(17)
ЗаказовВсего - это опять реквизит нового документа, который должен быть равен сумме по перебранным строкам СуммаЗаказаСкидка из документов Заказ. Тут я точно что-то не так сделала, но как сделать правильно, не поняла. Я вообще раньше не писала "с нуля" документы или отчёты, где нужно сделать выборку. Либо делала что-то по аналогии с имеющимся, меняя на нужные реквизиты. Тут же нужно написать документ, не имеющий аналогов в моей конфигурации. Так что прошу прощения, если какие-то простые для вас вещи мне не понятны...
22 irish-ka
 
27.01.16
22:53
(19) Кто такая?
23 Злопчинский
 
27.01.16
22:54
(21) "ЗаказовВсего - это опять реквизит нового документа, который должен быть равен сумме по перебранным строкам"
- ну так если должен быть равен СУММЕ по перебранным строкам - то напиши оператор с выражением суммирования!
24 Злопчинский
 
27.01.16
22:55
и для того, чтобы получить итог по строкам какого либо дока, совсем не обязательно перебирать строки - достаточно в пофигураторе для реквизита табличной части документа поставить флаг "итог" - и можно получить итог по строкам
Док.Итог("КакойТоРеквизиттабличнойЧасти")
25 Злопчинский
 
27.01.16
22:56
ну, я в (15) помощь предложил.. на нет - и сюда/туда нет...
26 irish-ka
 
27.01.16
23:06
(25) Сейчас нет возможности выйти в Скайп, поэтому спасибо за предложение, возьму на заметку, но пока попробую всё же через форум решить задачку...
27 irish-ka
 
27.01.16
23:06
(24) попробую так.
28 Злопчинский
 
27.01.16
23:11
(26) наличие фотки в прфиле увеличивает шансы на успешное решение задачи...

тимвьювер тоже покатит...
29 irish-ka
 
28.01.16
01:08
Всем спасибо, у меня получилось то, что нужно. (18) абсолютно верно. (4) это оказалось лишним. Достаточно было только выбрать Документы и суммировать определённые реквизиты из них.

Задача решена.
30 Злопчинский
 
28.01.16
01:08
..не прошло и часа ;-)