Ошибка чтения значения в Выборке |
Я |
21.12.20 — 09:50
Ошибка чтения значения в Выборке:
ВыборкаВредность = ЗапросВредность.Выполнить().Выбрать();
Метод с «Выбрать» на «Выгрузить» не могу поменять, нужно сделать через именно через «Выбрать()»
ЗапросВредность = Новый Запрос;
ЗапросВредность.Текст =
«ВЫБРАТЬ
| ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета,
| ПриемНаРаботуВОрганизациюОсновныеНачисления.Показатель1
|ИЗ
| Документ.ПриемНаРаботуВОрганизацию.ОсновныеНачисления КАК ПриемНаРаботуВОрганизациюОсновныеНачисления
|ГДЕ
| ПриемНаРаботуВОрганизациюОсновныеНачисления.Ссылка = &ДокументСсылка
| И ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета.Ссылка = &ВидРасчетаВредность»;
ЗапросВредность.УстановитьПараметр(«ДокументСсылка», ДокументПриема.Ссылка);
ЗапросВредность.УстановитьПараметр(«ВидРасчетаВредность»,ПланыВидовХарактеристик.КП_Константы.ДоплатаЗаВредность.Значение);
ВыборкаВредность = ЗапросВредность.Выполнить().Выбрать();
ВыборкаВредность.Следующий();
1 — 21.12.20 — 09:50
Я только начинаю, не судите строго
2 — 21.12.20 — 09:52
и чего дальше?
3 — 21.12.20 — 09:54
Для начала будем судить за формулировку вопроса )))
Где ошибка? Когда возникает?
4 — 21.12.20 — 09:57
(3) Ошибка чтения значения в Выборке:
ВыборкаВредность = ЗапросВредность.Выполнить().Выбрать();
5 — 21.12.20 — 10:02
(4) что это значит? какого значения, что возвращает .следующий()?
6 — 21.12.20 — 10:03
(4) То есть. Ты делаешь ВыборкаВредность = ЗапросВредность.Выполнить().Выбрать();
Потом смотришь в ВыборкаВредность
И правильно она тебе говорит. Выборку перебирать кто будет? Сам Абд аль-Маджи́д ат-Тикри́ти ?
7 — 21.12.20 — 10:04
(6) хДДД
8 — 21.12.20 — 10:05
вангануть что ли
если написать
Пока ВыборкаВредность.Следующий() Цикл
Сообщить(ВыборкаВредность.ВидРасчета);
КонецЦикла;
что будет?
а еще лучше подключить тяжелую артиллерию — отладчик
9 — 21.12.20 — 10:06
(6) Так он и перебирает…Но только берет первый элемент из выборки:
ВыборкаВредность.Следующий();
Но вот незадача, если результат запроса пустой, то на этой строчке будет ошибка.
10 — 21.12.20 — 10:10
(8) Ничего не выдаёт, вычисляю выражение «Ошибка чтения значения»
11 — 21.12.20 — 10:12
(8) а «ВидРасчета» — переменная не определена
12 — 21.12.20 — 10:14
(6) Проблема в том, что у меня не получается :С
13 — 21.12.20 — 10:16
(12) Посмотри типы значений в отборах запроса. Какой тип значения у выражения ПланыВидовХарактеристик.КП_Константы.ДоплатаЗаВредность.Значение?
14 — 21.12.20 — 10:23
(13) https://ibb.co/Lzz8mRK
Если я правильно тебя понял
15 — 21.12.20 — 10:25
(10) значит в результате запроса ничего нет, либо параметры запроса направильные, либо в ТЧ документа ДокументПриема.Ссылка нет строк с таким видом Доплат
16 — 21.12.20 — 10:35
(15) В общем, ложилась такая ситуация: Когда у человека проставлена «ДоплатаЗаВредность» , то у него всё гучи и всё нормально работает, а когда у него нету этой доплаты, то ошибка эта вылазит. Нужно как-то сделать так, чтобы эта ошибка исправилась , чтобы если у него нет «ДоплатыЗаВредность», то и код прекращал работать
17 — 21.12.20 — 10:36
Это реально как-то сделать?
18 — 21.12.20 — 10:38
(16) для этого и есть Выборка.Следующий()
19 — 21.12.20 — 10:38
Если …
20 — 21.12.20 — 10:39
Убери ты ссылку в условии | И ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета.Ссылка = &ВидРасчетаВредность»;
Сделай | И ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета= &ВидРасчетаВредность»;
21 — 21.12.20 — 10:42
Стандартная конструкция
Пока Выборка.Следующий() Цикл
если запрос ничего не вернет, то и в цикл программа не попадет
я делаю так
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Для Каждого Строка Из Результат.Выгрузить() Цикл
тра та та
КонецЦикла;
КонецЕсли;
возможны варианты, по ситуации
22 — 21.12.20 — 10:50
(17) Ошибка чтения значения говорит о том что у тебя выборка пустая. Когда ты пишешь Выборка.Следующий в пустой выборке, возникает такая ошибка. Если подразумевается всегда 1 элемент из запроса(либо он есть, либо запрос пустой), тогда можешь писать «Если Выборка.Следующий() Тогда» и обрабатывать первый элемент выборки, иначе выборка пустая. Если нужно обойти все элементы выборка то используй «Пока выборка.Следующий Цикл» Если нужно отработать условие при пустой выборке, можешь предварительно проверить Если Выборка.Количество()=0, А лучше результат на пустоту проверяй.
23 — 21.12.20 — 10:51
(22) «Когда ты пишешь Выборка.Следующий в пустой выборке, возникает такая ошибка.» а при Выборка.Следующий() возникает Ложь
24 — 21.12.20 — 11:29
самый простой вариант это
Таб = Запрос.Выполнить().Выгрузить();
Для Каждого Стр Из Таб Цикл
КонецЦикла;
1с не рекомендует так делать, но это самое удобное.
25 — 21.12.20 — 11:38
(24) но у меня же метод «Выбрать» ,А не «Выгрузить
26 — 21.12.20 — 11:39
(24) Так же работать будет ?
27 — 21.12.20 — 11:46
(26) смысл такой же, да
28 — 21.12.20 — 12:05
Эх, ничего не получается что-то у меня, столько помощи было от Вас, но что-то я ,видимо, совсем тупой :С
29 — 21.12.20 — 12:11
не знаю, что теперь и делать
30 — 21.12.20 — 12:22
(29) самый простой вариант, заплатить денюшку тому, кто сможет объяснить и показать. Либо читай умные книжки по 1с, как правильно писать запросы и их обходить.
31 — 21.12.20 — 12:30
(29) так гучи же
>>>у него всё гучи и всё нормально работает
в чем проблема то
>>>чтобы если у него нет «ДоплатыЗаВредность», то и код прекращал работать
код и перестает работать, если Выборка.Следующий() Ложь
Пока Выборка.Следующий() Цикл //тут неявная проверка на возврат Истина
почитай как это работает, даже в синтакс-помощнике. а истина будет, пока есть записи в результате запроса, то есть когда их нет(или закончатся), тогда и
>>>и код прекращал работать
32 — 21.12.20 — 12:55
(29) что не получается?
Если ВыборкаВредность.Следующий() Тогда
уже пробовал?
33 — 21.12.20 — 14:53
(32) я читал о том, как это делать, но всё равно не могу понять, как обходить результат запроса. Я читал о методе «Следующий()», да и делал до этого что-то простое , а сейчас на попу присел и ничего не получается.
Можешь хоть как-то помочь?
34 — 21.12.20 — 15:03
ЗапросВредность = Новый Запрос;
ЗапросВредность.Текст =
«ВЫБРАТЬ
| ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета,
| ПриемНаРаботуВОрганизациюОсновныеНачисления.Показатель1
|ИЗ
| Документ.ПриемНаРаботуВОрганизацию.ОсновныеНачисления КАК ПриемНаРаботуВОрганизациюОсновныеНачисления
|ГДЕ
| ПриемНаРаботуВОрганизациюОсновныеНачисления.Ссылка = &ДокументСсылка
| И ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета.Ссылка = &ВидРасчетаВредность»;
ЗапросВредность.УстановитьПараметр(«ДокументСсылка», ДокументПриема.Ссылка);
ЗапросВредность.УстановитьПараметр(«ВидРасчетаВредность»,ПланыВидовХарактеристик.КП_Константы.ДоплатаЗаВредность.Значение);
ВыборкаВредность = ЗапросВредность.Выполнить().Выбрать();
пока ВыборкаВредность.Следующий() Цикл
сообщить(«» + ВыборкаВредность.ВидРасчета + » » + ВыборкаВредность.Показатель1);
КонецЦикла;
Что выведет?
35 — 21.12.20 — 15:42
(34)было уже
>>>можешь хоть как то помочь?
можешь?
36 — 21.12.20 — 16:03
(34) Ничего не выводит, в выборке Ошибка чтения
37 — 21.12.20 — 16:08
(36) Ничего не выводит — значит результат запроса пустой.
Проверь ещё
результат = ЗапросВредность.Выполнить();
сообщить(«ЗАпрос пустой » + результат.Пустой());
ВыборкаВредность = результат.Выбрать();
Сообщить(«В выборке » + ВыборкаВредность.Количество() + » элементов»);
38 — 21.12.20 — 16:23
(37) Я уже писал выше:
Когда у человека заполнена «ДоплатаЗаВредность», то всё нормально выводиться, всё гучи. В данный момент, я выбираю сотрудника, у которого нет «ДоплатаЗаВредность».
Вообще, я это задание связано с выводом табличной части. Я создал внешнюю обработку, заполнил все параметры, остался только этот, который я не могу адекватно вывести.
Мне нужно » Если у человека есть ДоплатаЗаВредность, то выводиться число , которое нужно, а если нет( Как в нашем случае) , то нужно выводить «0».
Человеку не понравилось как я сделал задание и он сказал переделывать. Сказал, чтобы не было там ОшибкиЧтенияЗначения,я не знаю как её оттуда убрать, и идиоту понятно, если у человека нет «ДоплатаЗаВредность», то и ошибка будет.
39 — 21.12.20 — 16:25
троль что ли
40 — 21.12.20 — 16:26
(37) Я рассказал всю подноготную сейчас. В данный момент я проверяю челвоека, у которого нет «ДоплатаЗаВредность».
т.е. Запрос пустой и в выборке 0 элементов.
41 — 21.12.20 — 16:26
(39) Да не троль я , меня ебут ( извиняюсь за мат ), а я ничего не понимаю уже
42 — 21.12.20 — 16:28
(38) «то нужно выводить «0»» — это уже другой запрос должен быть.
43 — 21.12.20 — 16:28
(41) инициализируй новую строку нулем сразу, и только если есть результат пиши в показатель данные выборки, а если нет не пиши, так можно
44 — 21.12.20 — 16:30
Я не понимаю, что я делаю не так. Я написал в самом начале :
Если ЗначениеЗаполнено(ВыборкаВредность.Показатель1) = истина тогда
ОбластьМакетаРаботник1.Параметры.Вредность = ВыборкаВредность.Показатель1;
Иначе
ОбластьМакетаРаботник1.Параметры.Вредность = «0»;
КонецЕсли;
45 — 21.12.20 — 16:32
Человеку не понравилось, сказал, чтобы я переделал, я понял, что нужно сделать выборку, я пытался разными способами сделать её, но у меня не получался ни один способ, решил обратиться на форум, чтобы помогли
46 — 21.12.20 — 16:32
(44) Если ВыборкаВредность.Следующий Тогда
ОбластьМакетаРаботник1.Параметры.Вредность = ВыборкаВредность.Показатель1;
Иначе
ОбластьМакетаРаботник1.Параметры.Вредность = «0»;
КонецЕсли;
47 — 21.12.20 — 16:33
(46) *Если ВыборкаВредность.Следующий() Тогда
48 — 21.12.20 — 16:33
ну хз, все же объяснили. Первоначальная формулировка задачи от «человека» есть?
49 — 21.12.20 — 16:35
К (42) Как-то так например:
ВЫБРАТЬ
ВложенныйЗапрос.ВидРасчета как ВидРасчета
,Сумма(ВложенныйЗапрос.Показатель1) как Показатель1
ИЗ
(ВЫБРАТЬ
&ВидРасчетаВредность как ВидРасчета
,0 как Показатель1
объединить все
ВЫБРАТЬ
ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета,
ПриемНаРаботуВОрганизациюОсновныеНачисления.Показатель1
ИЗ
Документ.ПриемНаРаботуВОрганизацию.ОсновныеНачисления КАК ПриемНаРаботуВОрганизациюОсновныеНачисления
ГДЕ
ПриемНаРаботуВОрганизациюОсновныеНачисления.Ссылка = &ДокументСсылка
И ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета = &ВидРасчетаВредность
) КАК ВложенныйЗапрос
Сгруппировать по
ВложенныйЗапрос.ВидРасчета
50 — 21.12.20 — 16:35
1. Сохранить внешнюю печатную форму “Документы на трудоустройство (Единый)”.
2. В листе “Приказ о приёме” добавить пункт “Доплата за вредность” из начислений сотрудника.
3. Загрузить печатную форму обратно. (48)
Это всё
51 — 21.12.20 — 16:36
(41) Жирный троль)
52 — 21.12.20 — 16:36
(50) см. ответ (46) (47) И будет тебе счастье
53 — 21.12.20 — 16:37
(51) может так ковид действует на организм?
54 — 21.12.20 — 16:38
Просто пипец, мне так стыдно, я и сложнее задачи решал , а тут такая фигня и я ничего не понимаю, я целый день сижу и пытаюсь сделать.
55 — 21.12.20 — 16:39
я от компа не отходил ни на секунду с 8 часов утра ( У меня уже 20:38)
56 — 21.12.20 — 16:39
(54) В (42, 49) пробовал?
57 — 21.12.20 — 16:39
(55) Ну так Новосибирск. +4 часа.
58 — 21.12.20 — 16:39
(53) да он еще малявочка, вот пару десятков тем создаст на мисте, научится вопрос формулировать. Потом еще пару сотен вопросов и можно ЕРП внедрять единолично
59 — 21.12.20 — 16:43
(55) Задача сформулирована какая-то суть только в 16:23 в посте (55). Полноценно в 16:35 в посте (50). Чего весь день сидел — не понятно.
Постановка задачи — это 80% её решения. Как-то так обычно было.
Так попробовал 42 и 49?
60 — 21.12.20 — 16:43
61 — 21.12.20 — 16:44
Читать:
Задача сформулирована какая-то суть только в 16:23 в посте (38). ТРИДЦАТЬ ВОСЕМЬ
62 — 21.12.20 — 16:45
(44) грамотно удержался на взятке, ВыборкаВредность.Показатель1 нельзя так обращаться если выборка не получила Следующий()
63 — 21.12.20 — 16:46
(59) нет, сейчас делать буду.
64 — 21.12.20 — 16:47
Просто ,мне кажется, человек завтра мне скажет :» Дак ты опять не сделал, у тебя всё равно ОшибкаЧтения, иди дальше делать»
65 — 21.12.20 — 16:47
(60) Не знаю почему, но продолжаю пользоваться обычной консолью в толстом клиенте. На мой взгляд они почти все удобнее на порядок. Пользуюсь версией десятилетней давности или более.
(63) Ждем. Там не надо тогда условий никаких в обработке результата. Результат запрос возвращает всегда.
66 — 21.12.20 — 16:48
(64) — (46)(47)
67 — 21.12.20 — 16:49
(59) Спасибо, учту формулировку вопроса, в следующий раз будет лучше!
68 — 21.12.20 — 16:50
(66) Буду знать
69 — 21.12.20 — 16:55
(52) Как я и говорил, мне сказали : У тебя всё равно осталась ошибка.
Задание: Устранить ошибку и сделать так, чтобы не лёг чужой код и свой код.
70 — 21.12.20 — 16:56
Я уже не знаю, что делать, сейчас мозг лопнет :DD
71 — 21.12.20 — 16:56
(70) скинь код в котором у тебя ошибка
72 — 21.12.20 — 16:58
(70) Пробуй (49) и не будет ошибки.
73 — 21.12.20 — 16:59
(72) там пипец сложно, я параллельно разбираю этот код, но я не могу полностью его переписать)
74 — 21.12.20 — 17:00
(71) ЗапросВредность = Новый Запрос;
ЗапросВредность.Текст =
«ВЫБРАТЬ
| ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета,
| ПриемНаРаботуВОрганизациюОсновныеНачисления.Показатель1
|ИЗ
| Документ.ПриемНаРаботуВОрганизацию.ОсновныеНачисления КАК ПриемНаРаботуВОрганизациюОсновныеНачисления
|ГДЕ
| ПриемНаРаботуВОрганизациюОсновныеНачисления.Ссылка = &ДокументСсылка
| И ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета.Ссылка = &ВидРасчетаВредность»;
ЗапросВредность.УстановитьПараметр(«ДокументСсылка», ДокументПриема.Ссылка);
ЗапросВредность.УстановитьПараметр(«ВидРасчетаВредность»,ПланыВидовХарактеристик.КП_Константы.ДоплатаЗаВредность.Значение);
ВыборкаВредность = ЗапросВредность.Выполнить().Выбрать();
Если ВыборкаВредность.Следующий() Тогда
йцу= ВыборкаВредность.Показатель1;
иначе
йцу = «0»;
КонецЕсли;
75 — 21.12.20 — 17:00
ну если правильно понял, то процедура печати уже есть, где есть и запрос и выборка и заполнение областей в цикле и вывод в табдок, если это так, то делать все это свое еще раз не надо, так и не получится. Надо: в том месте модуля, где написан запрос и последующая его обработка с выводом в Табличный документ в сам запрос добавить к Выбрать еще одну колонку «Выбрать ТабличнаяЧасть.Сотрудник, ТабличнаяЧасть.Показатель», сотрудник (например, отсюда тот запрос не видно) уже там есть, а добавляем именно размер доплаты — Показатель, после точки ТабличнаяЧасть. имя как этот реквизит называется в метаданных, ну конструктор запроса ошибиться не даст. Все остальное в запросе и параметрах запроса оставляем как есть. Дальше в коде обработки результата запроса и вывода Областей макета (в котором надеюсь » В листе “Приказ о приёме” добавить пункт “Доплата за вредность”» это уже сделано) в ТабличныйДокумент добавляем перед ТабДок.Вывести(Область) новой строкой кода
Область.Параметры.Показатель = Выборка.Показатель;
Вроде больше ничего не надо
76 — 21.12.20 — 17:02
не надо переписывать, надо просто добавить в макет новую колонку, рядом с теми что уже есть и заполнить ее значение кодом наряду с теми колонками, которые уже заполняются.
Ну это конечно если я правильно предполагаю, то что у тебя происходит.
77 — 21.12.20 — 17:02
(70) Ты прикалываешься чтоль? Какая еще ошибка, если у тебя запрос пустой, то ты в макете заполнишь 0. Вангую, ты в пустом запросе смотришь в отладке выборку и недоумеваешь, как так ашипка напротив данных! В этом варианте (46) код нормально отработает. Не надо обрабатывать данные выборки, если она пустая.
78 — 21.12.20 — 17:03
а смотрю я в (50)
79 — 21.12.20 — 17:04
(77) не понятно зачем тут писать свое что то, если печатная форма уже есть и работает, надо только добавить одну колонку
80 — 21.12.20 — 17:08
81 — 21.12.20 — 17:09
Я не знаю уже, как это комментировать
82 — 21.12.20 — 17:11
(77) Если тебе кровь из носа нужно, чтобы выборка всегда была заполнена, можешь следующим образом написать:
ВЫБРАТЬ
СУММА(ПриемНаРаботуВОрганизациюОсновныеНачисления.Показатель1) КАК Показатель1,
ЗаказКлиентаТовары.Ссылка КАК Ссылка
ПОМЕСТИТЬ ДоплатыЗаВредность
ИЗ
Документ.ПриемНаРаботуВОрганизацию.ОсновныеНачисления КАК ПриемНаРаботуВОрганизациюОсновныеНачисления
ГДЕ
ПриемНаРаботуВОрганизациюОсновныеНачисления.Ссылка = &ДокументСсылка
И ПриемНаРаботуВОрганизациюОсновныеНачисления.ВидРасчета = &ВидРасчетаВредность
СГРУППИРОВАТЬ ПО
ПриемНаРаботуВОрганизациюОсновныеНачисления.Ссылка
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ПриемНаРаботуВОрганизацию.Ссылка КАК Ссылка,
ЕСТЬNULL(ДоплатыЗаВредность.Количество, 0) КАК Количество
ИЗ
Документ.ПриемНаРаботуВОрганизацию КАК ПриемНаРаботуВОрганизацию
ЛЕВОЕ СОЕДИНЕНИЕ ДоплатыЗаВредность КАК ДоплатыЗаВредность
ПО ПриемНаРаботуВОрганизацию.Ссылка = ДоплатыЗаВредность.Ссылка
ГДЕ
ПриемНаРаботуВОрганизацию.Ссылка = &ДокументСсылка
83 — 21.12.20 — 17:12
(82) //ЕСТЬNULL(ДоплатыЗаВредность.Количество, 0) КАК Количество ЕСТЬNULL(ДоплатыЗаВредность.Показатель1, 0) КАК Показатель1
84 — 21.12.20 — 17:13
(83) поясню, а то вдруг не понял строчку ЕСТЬNULL(ДоплатыЗаВредность.Количество, 0) КАК Количество в запросе замени на
Количество ЕСТЬNULL(ДоплатыЗаВредность.Показатель1, 0) КАК Показатель1
85 — 21.12.20 — 17:15
(82) А это адекватно вообще? Просто я по факту, в самом начале написал что-то похожее на тот код, который ты написал и который работает нормально, а они до меня так докапываются.
86 — 21.12.20 — 17:16
(84) даже сейчас, говорят что не правильно и нужно исправить как-то.
87 — 21.12.20 — 17:16
(86) Какой код ты не должен поломать то?
88 — 21.12.20 — 17:17
(85) залезть в голову твоим работодателям я не могу, задай наводящие вопросы, как им нужно и какой результат они ждут
89 — 21.12.20 — 17:17
(82) смысл в том, что они говорят :» Запрос не трогай, он правильный. Сделай выборку верно». :DDD
90 — 21.12.20 — 17:18
(49) Пробовать будешь или нет?
91 — 21.12.20 — 17:18
(86) по уму посмотри как типовые печатные формы работают, как там получают шапку и данные для печати. Постарайся полученный опыт перенести в свою обработку
92 — 21.12.20 — 17:18
(87) НУ, в обработке есть ещё печсатные формы, которые не я делал, тот код поломать и не должен
93 — 21.12.20 — 17:19
(89) Значит в выборке вредность уже есть. Раз так говорят.
94 — 21.12.20 — 17:20
(90) 5 минут
95 — 21.12.20 — 17:22
(90) съехало просто не много , не могу полностью разобраться
96 — 21.12.20 — 17:23
(92) ну не трогай запрос тогда, делай как я тебе написал еще раньше с условием в выборке. Ошибка данных у тебя только в отладке, на самом деле ошибки ни какой не будет при выполнении обработки, так как ты не обрабатываешь данные пустого запроса, а всего лишь выводишь 0, если выборка пустая в ПФ.
97 — 21.12.20 — 17:29
(96) Хорошо , спасибо
sqr4
98 — 21.12.20 — 18:01
Как я понимаю остальные виды расчета тоже выводятся. И нужно как то обойти результат, выделив из него надбавку за вредность
Результат простого запроса «Ошибка чтения значения»
Автор 2Casp, 27 мая 2014, 16:01
0 Пользователей и 1 гость просматривают эту тему.
Всем привет!
Подскажите не могу понять почему в отладчике значение Результат.Выбрать().ОсновнойТехник значение равно Ошибка чтения значения. Хотя запрос в консоли выполняется верно. Куда смотреть?
Конфигурация УТ 11.1.6.17
&НаКлиенте
Процедура КлиентОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Объект.Исполнитель = ПолучитьИсполнителяНаСервере(ВыбранноеЗначение);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьИсполнителяНаСервере(Партнер)
Запрос = Новый Запрос;
ТекстЗапроса = "
|ВЫБРАТЬ
| Партнеры.Ссылка,
| Партнеры.Наименование,
| Партнеры.ОсновнойТехник.Ссылка КАК ОсновнойТехник
|ИЗ
| Справочник.Партнеры КАК Партнеры
|ГДЕ
| Партнеры.Наименование = &Наименование
|
|";
Запрос.УстановитьПараметр("Наименование", Партнер);
Запрос.Текст = ТекстЗапроса;
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Выборка.ОсновнойТехник;
КонецЦикла;
КонецФункции // ПолучитьИсполнителяНаСервере()
Потому что прежде чем получать значение из выборки сначала нужно спозиционироваться на конкретной записи.
Например это делается методом Следующий();
Смотри в отладчике строчку после Выборка.Следующий()
Выборка.ОсновнойТехник;
Цитата: MuI_I_Ika от 27 мая 2014, 17:06
Смотри в отладчике строчку после Выборка.Следующий()Выборка.ОсновнойТехник;
В том то и дело, не пойму почему я даже в цикл Пока Выборка.Следующий() Цикл не захожу. Вся Выборка Ошибка чтения значения. Открываю этот запрос в консоли, там получаю Ссылку на ОсновнойТехник
Вот эта строка выдает ошибку чтения значения?
Результат.Выбрать()
А почему кстати пытаетесь отбирать по наименованию? Вполне можно по ссылке отбирать. Что будете делать когда появятся два контрагента с одним наименованием?
Я же объясняю пока выборка не спозиционирована на конкретном значении никаких значений вы в отладчике не получите, так что все правильно вам программа показывает.
Цитата: MuI_I_Ika от 27 мая 2014, 17:30
А почему кстати пытаетесь отбирать по наименованию? Вполне можно по ссылке отбирать. Что будете делать когда появятся два контрагента с одним наименованием?
Спасибо. Поменял наименование на ссылку.
Теги:
- Форум База
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Результат простого запроса «Ошибка чтения значения»
Похожие темы (5)
Поиск
Доброго времени суток, коллеги! Много раз на нашем сайте обсуждалась тема запросов в 1С, например, как получить всех родителей элемента справочника одним запросом. В этой статье вы увидите еще много разных примеров запросов, которые помогут вам решать повседневные задачи. Вот, посмотрите.
Содержание
- Как в запросе 1с8 установить условие проверки периода на конец дня?
- Как правильно обрабатывать значения NULL в запросе 1С8?
- Как вывести результат запроса в табличный документ?
- Как посчитать возраст по дате рождения в запросе 1С8?
- Почему в результате запроса 1С8 появляется ошибка «Ошибка чтения значения» при отладке?
- Как запросом получить все подчиненные документы?
- Как выглядит недокументированный синтаксис оператора ВЫБОР?
- Как составить запрос к табличной части документа?
- Как запросом для документа найти все подчинённые ему документы?
- Как сравнить строки в запросе?
- Как в запросе проверить поле на пустую ссылку?
- Как в запросе убрать фильтр на значение параметра?
Как в запросе 1с8 установить условие проверки периода на конец дня?
В запросе воспользуемся функцией КОНЕЦПЕРИОДА(&ДатаКонец, ДЕНЬ), она приведет дату к виду «23:59:59».
Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | СчетНаОплатуПокупателю.Дата |ИЗ | Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю |ГДЕ | СчетНаОплатуПокупателю.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&ДатаНачала, ДЕНЬ) | И КОНЕЦПЕРИОДА(&ДатаКонец, ДЕНЬ)"; Запрос.УстановитьПараметр("ДатаКонец", ДатаКонец); Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); РезультатЗапроса = Запрос.Выполнить();
Как правильно обрабатывать значения NULL в запросе 1С8?
В запросе значения типа NULL образуются в результате соединений (ЛЕВОЕ, ПРАВОЕ), когда элементу из одной таблицы по условию не находится соответствующего элемента из другой. Значение типа NULL имею специфические особенности:
-
- Cравнение значения NULL с любым другим аргументом всегда возвращает ложь. Например, если в запросе поле «Количество» возвращает NULL, то если использовать операции сравнения «<», «>», или «=» с числом 1000, то результатом всегда будет «Ложь». Даже, если сравнить с самим значением NULL, то все равно результатом будет «Ложь»:
ГДЕ ГТД.Количество = NULL
-
- Применение арифметических операций к значению типа NULL всегда возвращает NULL. Например, если в запросе к полю «Количество», которое возвращает NULL, прибавить числовое значение или отнять от него числовое значение, то будет возвращено значение NULL:
ГТД.Количество+300 КАК Поле1
-
- Для определения значения NULL используется функция конструкция «IS NULL». Чтобы получить записи со значением NULL воспользуемся следующей конструкцией:
ГДЕ ГТД.Регистратор.Организация IS NULL
если нужно получить записи без NULL, тогда:
ГДЕ НЕ ГТД.Регистратор.Организация IS NULL
- Для преобразования типа NULL используется функция «isNULL» или «ЕСТЬNULL». Теперь можно сравнивать с полученным значением или применять к нему арифметические операции, не боясь за конечный результат:
- Для определения значения NULL используется функция конструкция «IS NULL». Чтобы получить записи со значением NULL воспользуемся следующей конструкцией:
ЕСТЬNULL(ГТД.Количество, 0)+300 КАК Поле1
-
- Для того, чтобы в результате запроса отсечь записи, содержащие значения NULL применяются следующие конструкции: «IS NOT NULL», «NOT <поле> is NULL»:
ГДЕ ГТД.Регистратор.Организация IS NOT NULL
или
ГДЕ NOT ГТД.Регистратор.Организация IS NULL
Как вывести результат запроса в табличный документ?
Для этого можно использовать объект ПостроительОтчета:
ТабДок = Новый ТабличныйДокумент; Результат = РезультатЗапроса.Выгрузить(); Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Результат); Построитель.Вывести(ТабДок); ТабДок.Записать("D:mxlТаблица.mxl");
Как посчитать возраст по дате рождения в запросе 1С8?
Использовать функцию языка запроса РАЗНОСТЬДАТ:
ВЫБРАТЬ Сотрудники.Сотрудник, Сотрудники.Пол, РАЗНОСТЬДАТ(Сотрудники.ДатаРождения, &ТекДата, ГОД) КАК Возраст ИЗ Сотрудники КАК Сотрудники ПОЛНОЕ СОЕДИНЕНИЕ ПриемНаРаботу КАК ПриемНаРаботу ПО Сотрудники.Сотрудник = ПриемНаРаботу.Сотрудник ПОЛНОЕ СОЕДИНЕНИЕ Пенсия КАК Пенсия ПО Сотрудники.Сотрудник = Пенсия.Сотрудник
Почему в результате запроса 1С8 появляется ошибка «Ошибка чтения значения» при отладке?
Бывает, что в консоли запрос отрабатывается нормально, но в рабочем режиме падает с ошибкой «Значение не является значением объектного типа (Сумма)». При этом отладчик показывает, что в коллекции «ВыборкаИзРезультатаЗапроса» находиться сумма со значением «Ошибка чтения значения». При отладке выдается «Ошибка чтения значения», если в функции написать так:
Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Возврат Выборка;
Ошибка чтения значений результата запроса, возникает из-за того, что в выборке еще не осуществлена установка на первый элемент выборки. Для этого существует метод «Следующий()» коллекции «ВыборкаИзРезультатаЗапроса». Поэтому надо писать так:
Если Выборка.Следующий() Тогда ДоговорКонтрагента = Выборка.Наименование; КонецЕсли;
Как запросом получить все подчиненные документы?
С помощью Функции «ПолучитьСписокВводимыхДокументовНаОсновании» получим список документов, которые вводятся на основании заданного документа:
// Параметры: ДокументПоиска: Тип - Метаданные объекта Функция ПолучитьСписокВводимыхДокументовНаОсновании(ДокументПоиска) Экспорт СписокДокументов = Новый СписокЗначений; Для Каждого Документ Из Метаданные.Документы Цикл Если Документ.ВводитсяНаОсновании.Содержит(ДокументПоиска) Тогда СписокДокументов.Добавить(Документ.Имя, Документ.Синоним); КонецЕсли; КонецЦикла; Возврат СписокДокументов; КонецФункции
Теперь, на основании списка документов найдем все подчинённые заданному документу:
Функция ПолучитьПодчиненныеДокументы() СписокЗаполнения = ПолучитьСписокВводимыхДокументовНаОсновании(СсылкаНаОбъект.Метаданные()); ТекстЗапросаПоСтатусу = ""; Для Каждого ЭлементСписка Из СписокЗаполнения Цикл Если НЕ ПустаяСтрока(ТекстЗапросаПоСтатусу) Тогда ТекстЗапросаПоСтатусу = ТекстЗапросаПоСтатусу + " |ОБЪЕДИНИТЬ ВСЕ |"; КонецЕсли; ТекстЗапросаПоСтатусу = ТекстЗапросаПоСтатусу + " |ВЫБРАТЬ " + ?(ПустаяСтрока(ТекстЗапросаПоСтатусу), "РАЗРЕШЕННЫЕ", "") + " | Док.Ссылка КАК ПодчиненныйДокумент |ИЗ | Документ." + ЭлементСписка.Значение + " КАК Док |ГДЕ | Док.ДокументОснование = &парамОснование | И Док.Проведен |"; КонецЦикла; Запрос = Новый Запрос; Запрос.УстановитьПараметр("парамОснование", СсылкаНаОбъект); Запрос.Текст = ТекстЗапросаПоСтатусу; Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ПодчиненныйДокумент"); КонецФункции // ПолучитьПодчиненныеДокументы()
Выведем полученные документы:
Процедура ВывестиПодчиненныеДокументы() Массив = ПолучитьПодчиненныеДокументы(); Для каждого Эл Из Массив Цикл Сообщить(Эл); КонецЦикла; КонецПроцедуры
Как выглядит недокументированный синтаксис оператора ВЫБОР?
Вот нестандартный вариант синтаксиса оператора ВЫБОР:
ВЫБРАТЬ ВЫБОР ДЕНЬНЕДЕЛИ(ДАТАВРЕМЯ(2015, 4, 1)) КОГДА 1 ТОГДА "Понедельник" КОГДА 2 ТОГДА "Вторник" КОГДА 3 ТОГДА "Среда" КОГДА 4 ТОГДА "Четверг" КОГДА 5 ТОГДА "Пятница" КОГДА 6 ТОГДА "Суббота" ИНАЧЕ "Воскресенье" КОНЕЦ КАК ДеньНедели
В этом примере показано, как с помощью опрератора ВЫБОР выводить текстовое представление дня недели.
Как составить запрос к табличной части документа?
Пример запроса:
Построитель.Текст = "ВЫБРАТЬ | Товары.Ответственный, | Товары.Ссылка КАК Документ, | Товары.Номенклатура, | СУММА(Товары.Сумма) КАК Сумма |ИЗ | Документ.ЧекККМ.Товары КАК Товары |ГДЕ | Товары.Ссылка.Дата Между &ДатаНач и &ДатаКон |СГРУППИРОВАТЬ ПО | Товары.Ссылка, | Товары.Ответственный, | Товары.Номенклатура";
Особенность этого запроса в том, что мы обращаемся к табличной части «Товары». Поэтому к реквизитам документа «ЧекККМ» мы обращаемся через свойство «Ссылка». Только в этом случае мы сможем получить строки табличной части документа. Если не указать свойство «Ссылка», то появится ошибка, примерно такого вида:
{(7, 5)}: Поле не найдено «Документ.ЧекККМ.Дата»
Как запросом для документа найти все подчинённые ему документы?
Воспользуемся следующим запросом:
Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | СчетФактураВыданный.Ссылка |ИЗ | Документ.СчетФактураВыданный КАК СчетФактураВыданный |ГДЕ | СчетФактураВыданный.ДокументОснование = &ДокументОснование"; Запрос.УстановитьПараметр("ДокументОснование", Накладная); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл СФ = Выборка.Ссылка.ПолучитьОбъект(); СФ.ДокументОснование = ""; СФ.Записать(РежимЗаписиДокумента.Запись); КонецЦикла;
Как сравнить строки в запросе?
| ГДЕ (Номер ПОДОБНО &НомерНакладной) Запрос.УстановитьПараметр("НомерНакладной", "%"+НомерНакладной+"%");
Как в запросе проверить поле на пустую ссылку?
ВЫБРАТЬ Начисление.Ссылка, Увольнение.Ссылка КАК Ссылка1, Начисление.ДокументОснование, Увольнение.ДокументОснование КАК ДокументОснование1 ИЗ Документ.НачислениеЗарплатыРаботникамОрганизаций КАК Начисление СОЕДИНЕНИЕ Документ.УвольнениеИзОрганизаций КАК Увольнение ПО Начисление.ДокументОснование = Увольнение.ДокументОснование ГДЕ (Начисление.ДокументОснование<> ЗНАЧЕНИЕ(Документ.ТабельУчетаРабочегоВремениОрганизации.ПустаяСсылка))
Заметим, что в параметре пишем «Документ», а не «Документы» и «ПустаяСсылка» без скобок.
Как в запросе убрать фильтр на значение параметра?
Например, нам нужно вывести данные о продажах, отфильтровав их по значению в поле формы «Товар», если в этом поле выбран нужный нам товар. И если товар не выбран, то вывести данные по всем товарам. Пример запроса такой:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиОбороты.Номенклатура, | ПродажиОбороты.СуммаОборот КАК Сумма |ИЗ | РегистрНакопления.Продажи.Обороты(&ДатаНачала, | &ДатаОкончания, , | &Товар) КАК ПродажиОбороты"; Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания); Запрос.УстановитьПараметр("Товар", Товар);
Рассмотрим четыре способа, как избавится от фильтра в запросе.
- Изменим параметр запроса с помощью функции «СтрЗаменить»:
Если Товар.Пустая() Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Товар", ""); Иначе Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Товар", "Номенклатура = &Товар"); КонецЕсли;
- В параметре виртуальной таблицы вместо значения «&Товар» запишем следующее выражение:
|&Товар = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) | ИЛИ Номенклатура = &Товар
Если параметр товар не заполнен, то первое выражение примет значение ИСТИНА, тогда значение всего выражения примет значение ИСТИНА. В этом случае как-будто и нет никакого фильтра. Но если товар заполнен, то первое выражение принимает значение ЛОЖЬ. Тогда сработает второе выражение и произойдет фильтрация по товару.
- Еще один способ возможен благодаря новому объекту платформы «СхемаЗапроса (QuerySchema)», который появился в версии 1С 8.3.5:
СхемаЗапроса = Новый СхемаЗапроса; СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст); Если ЗначениеЗаполнено(Товар) Тогда СхемаЗапроса.ПакетЗапросов[0].Операторы[0].Источники[0].Источник.Параметры[3].Выражение = Новый ВыражениеСхемыЗапроса("Номенклатура = &Товар"); КонецЕсли; Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();
- Последний способ очень громоздкий, но его тоже можно использовать:
Если Товар.Пустая() Тогда Запрос.Текст = "ВЫБРАТЬ | ПродажиОбороты.Номенклатура, | ПродажиОбороты.СуммаОборот КАК Сумма |ИЗ | РегистрНакопления.Продажи.Обороты(&ДатаНачала, | &ДатаОкончания, , ) КАК ПродажиОбороты" Иначе Запрос.Текст = "ВЫБРАТЬ | ПродажиОбороты.Номенклатура, | ПродажиОбороты.СуммаОборот КАК Сумма |ИЗ | РегистрНакопления.Продажи.Обороты(&ДатаНачала, | &ДатаОкончания, , Номенклатура = &Товар) КАК ПродажиОбороты"; КонецЕсли;
Как видите, в запросе изменилось только значение условия виртуальной таблицы.
ПОДПИСКА
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток,
| ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
| СУММА(ЕСТЬNULL(ОстаткиТоваровОстатки.СуммаОстаток, 0)) КАК СуммаОстаток,
| СУММА(ЕСТЬNULL(РасходРасходТЧ.Количество, 0)) КАК Количество
|ИЗ
| Документ.Расход.РасходТЧ КАК РасходРасходТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
| ПО ОстаткиТоваровОстатки.Номенклатура = РасходРасходТЧ.Номенклатура
|
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваровОстатки.Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
Движения.ОстаткиТоваров.Записывать = Ложь;
Движения.Продажи.Записывать = Ложь;
Сообщить("Недостаточно товара на складе!");
КонецЕсли;
СуммаСебестоимость = 0;
СуммаСебестоимость = Выборка.СуммаОстаток / Выборка.КоличествоОстаток * Выборка.Количество;
Для Каждого ТекСтрокаРасходТЧ Из РасходТЧ Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаРасходТЧ.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Сумма = СуммаСебестоимость;
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаРасходТЧ.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Сумма = Выборка.Сумма;
КонецЦикла;
КонецПроцедуры
Почему в отладчике выдается «Ошибка чтения значений»? Гуглил так и не нагуглил, не понимаю в чем ошибка. Буду рад помощи, спасибо заранее
-
Вопрос заданболее двух лет назад
-
667 просмотров
Пригласить эксперта
Выборка получена, но её обход (пока выборка.следующий() и т.п.) не осуществляется. Вообще в текущем варианте в выборке несколько строк, включая возможные null по номенклатуре. Я бы выкинул этот код и начал бы со словестного описания желаемого алгоритма.
Ну алгоритм не корректен.
Как понял цель найти остатки, если их хватает создать запись.
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
Движения.ОстаткиТоваров.Записывать = Ложь;
Движения.Продажи.Записывать = Ложь;
Сообщить("Недостаточно товара на складе!");
КонецЕсли;
Без перебора результата выборки из запроса.
И далее также идет перебор только строк табличной части документа, а не выборки данных по остаткам.
Для Каждого ТекСтрокаРасходТЧ Из РасходТЧ Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Подглядите туточки
-
Показать ещё
Загружается…
27 июн. 2023, в 21:56
30000 руб./за проект
27 июн. 2023, в 21:12
1500 руб./за проект
27 июн. 2023, в 19:13
25000 руб./за проект
Минуточку внимания
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 |
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | дфГосЗаказОбороты.Держатель КАК Держатель, | дфГосЗаказОбороты.ПостащикЛома КАК ПостащикЛома, | дфГосЗаказОбороты.ВидКонтракта КАК ВидКонтракта, | дфГосЗаказОбороты.Статус КАК Статус, | ВложенныйЗапрос.Контрагент КАК Контрагент, | дфГосЗаказОбороты.ЯнварьОборот КАК Январь, | дфГосЗаказОбороты.ФевральОборот КАК Февраль, | дфГосЗаказОбороты.МартОборот КАК Март, | дфГосЗаказОбороты.АпрельОборот КАК Апрель, | дфГосЗаказОбороты.МайОборот КАК Май, | дфГосЗаказОбороты.ИюньОборот КАК Июнь, | дфГосЗаказОбороты.ИюльОборот КАК Июль, | дфГосЗаказОбороты.АвгустОборот КАК Август, | дфГосЗаказОбороты.СентябрьОборот КАК Сентябрь, | дфГосЗаказОбороты.ОктябрьОборот КАК Октябрь, | дфГосЗаказОбороты.НоябрьОборот КАК Ноябрь, | дфГосЗаказОбороты.ДекабрьОборот КАК Декабрь |ИЗ | (ВЫБРАТЬ | ххх_МеталлоломОбороты.Контрагент КАК Контрагент, | ххх_МеталлоломОбороты.ЧистыйВесОборот КАК ЧистыйВесОборот, | ххх_МеталлоломОбороты.Держатель КАК Держатель | ИЗ | РегистрНакопления.ххх_Металлолом.Обороты КАК ххх_МеталлоломОбороты) КАК ВложенныйЗапрос | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.дфГосЗаказ.Обороты КАК дфГосЗаказОбороты | ПО дфГосЗаказОбороты.ПостащикЛома.Наименование = ВложенныйЗапрос.Контрагент.Наименование |ГДЕ | дфГосЗаказОбороты.Статус <> &Статус | И дфГосЗаказОбороты.ВидКонтракта = &ВидКонтракта | И дфГосЗаказОбороты.ПостащикЛома <> дфГосЗаказОбороты.Держатель | И ВложенныйЗапрос.Держатель = &Держатель"; Запрос.УстановитьПараметр("Статус", Перечисления.дфСтатусыГосЗаказа.Расторгнут); Запрос.УстановитьПараметр("ВидКонтракта", Перечисления.дфВидыКонтрактов.Госзаказ); Запрос.УстановитьПараметр("Держатель", Отчет.Организация); //Запрос.УстановитьПараметр("ДатаНачалаПериода", НачалоГода(Отчет.Дата)); //Запрос.УстановитьПараметр("ДатаОкончанияПериода", КонецГода(Отчет.Дата)); //Запрос.УстановитьПараметр("ВыбраннаяОрганизация", Отчет.Организация); РезультатЗапроса = Запрос.Выполнить(); Выгрузка = РезультатЗапроса.Выгрузить(); ВыборкаДетальныеЗаписиОсновнаяЧасть = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписиОсновнаяЧасть.Следующий() Цикл //заполняем остальную таблицу, где Держатель != ПоставщикЛома ОбластьОсновного.Параметры.Заполнить(ВыборкаДетальныеЗаписиОсновнаяЧасть); Если Не ТабличныйДокумент.ПроверитьВывод(ОбластьОсновного) Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); НомерЛиста = НомерЛиста + 1; ОбластьШапки.Параметры.НомерЛиста = НомерЛиста; ТабличныйДокумент.Вывести(ОбластьОсновного); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьОсновного); ОбластьОсновного.Параметры.УНП = ВыборкаДетальныеЗаписиОсновнаяЧасть.Контрагент.ИНН; ОбластьОсновного.Параметры.НаименованиеОрганизации = ВыборкаДетальныеЗаписиОсновнаяЧасть.ПостащикЛома.Наименование; МесяцЧисло = Месяц(Отчет.Дата); //Получаем число месяца из переменной КонецМесяца Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(ххх_МеталлоломОбороты.ЧистыйВесОборот) КАК СуммаЧистыйВесЗаМесяц |ИЗ | РегистрНакопления.ххх_Металлолом.Обороты(&НачалоМесяца, &КонецМесяца, Месяц, ) КАК ххх_МеталлоломОбороты |ГДЕ | ххх_МеталлоломОбороты.Период МЕЖДУ &НачалоМесяца И &КонецМесяца | И ххх_МеталлоломОбороты.Партнер = &Партнер"; Запрос.УстановитьПараметр("НачалоМесяца", НачалоМесяца(Отчет.Дата)); Запрос.УстановитьПараметр("КонецМесяца", КонецМесяца(Отчет.Дата)); Запрос.УстановитьПараметр("Партнер", Отчет.Организация); РезультатЗапроса = Запрос.Выполнить(); ВыборкаПоМесяцу = РезультатЗапроса.Выбрать(); Пока ВыборкаПоМесяцу.Следующий() Цикл Если МесяцЧисло = 1 Тогда // определяем число Месяца и считаем план за месяц ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 2 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 3 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Март; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 4 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 5 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Май; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 6 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 7 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Июль; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 8 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Август; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц;; ИначеЕсли МесяцЧисло = 9 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Сентябрь; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 10 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Октябрь; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 11 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Ноябрь; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; ИначеЕсли МесяцЧисло = 12 Тогда ОбластьОсновного.Параметры.ПланМесяц = ВыборкаДетальныеЗаписиОсновнаяЧасть.Декабрь; ОбластьОсновного.Параметры.ФактМесяц = ВыборкаПоМесяцу.СуммаЧистыйВесЗаМесяц; КонецЕсли; ОбластьОсновного.Параметры.ФактМесяц = Формат(ОбластьОсновного.Параметры.ФактМесяц,"ЧДЦ=3"); КонецЦикла; //проверка на пустоту плана за месяц Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ПланМесяц) Тогда СуммаПланМесяц = СуммаПланМесяц + ОбластьОсновного.Параметры.ПланМесяц; Иначе СуммаПланМесяц = СуммаПланМесяц + 0; КонецЕсли; //проверка на пустоту факта за месяц Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ФактМесяц) Тогда СуммаФактМесяц = СуммаФактМесяц + ОбластьОсновного.Параметры.ФактМесяц; Иначе СуммаФактМесяц = СуммаФактМесяц + 0; КонецЕсли; // подсчёт процента за Месяц и проверка на пустоту Плана и Факта Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ПланМесяц) И НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ФактМесяц) Тогда ПроцентЗаМесяц = ОбластьОсновного.Параметры.ФактМесяц/ОбластьОсновного.Параметры.ПланМесяц*100; ОбластьОсновного.Параметры.ПроцентМесяц = Формат(ПроцентЗаМесяц,"ЧДЦ=2"); Иначе ОбластьОсновного.Параметры.ПроцентМесяц = " "; КонецЕсли; //считаем план за квартал Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(ххх_МеталлоломОбороты.ЧистыйВесОборот) КАК СуммаЧистыйВесЗаКвартал |ИЗ | РегистрНакопления.ххх_Металлолом.Обороты(&НачалоКвартала, &КонецКвартала, Квартал, ) КАК ххх_МеталлоломОбороты |ГДЕ | ххх_МеталлоломОбороты.Период МЕЖДУ &НачалоКвартала И &КонецКвартала | И ххх_МеталлоломОбороты.Партнер = &Партнер"; Запрос.УстановитьПараметр("НачалоКвартала", НачалоКвартала(Отчет.Дата)); Запрос.УстановитьПараметр("КонецКвартала", КонецКвартала(Отчет.Дата)); Запрос.УстановитьПараметр("Партнер", Отчет.Организация); РезультатЗапроса = Запрос.Выполнить(); ВыборкаПоКварталу = РезультатЗапроса.Выбрать(); Пока ВыборкаПоКварталу.Следующий() Цикл //Определяем число месяца и считаем План за Квартал Если МесяцЧисло = 1 ИЛИ МесяцЧисло = 2 ИЛИ МесяцЧисло = 3 Тогда ОбластьОсновного.Параметры.ПланКвартал = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март; ОбластьОсновного.Параметры.ФактКвартал = ВыборкаПоКварталу.СуммаЧистыйВесЗаКвартал; ИначеЕсли МесяцЧисло = 4 ИЛИ МесяцЧисло = 5 ИЛИ МесяцЧисло = 6 Тогда ОбластьОсновного.Параметры.ПланКвартал = ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь; ОбластьОсновного.Параметры.ФактКвартал = ВыборкаПоКварталу.СуммаЧистыйВесЗаКвартал; ИначеЕсли МесяцЧисло = 7 ИЛИ МесяцЧисло = 8 ИЛИ МесяцЧисло = 9 Тогда ОбластьОсновного.Параметры.ПланКвартал = ВыборкаДетальныеЗаписиОсновнаяЧасть.Июль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Август + ВыборкаДетальныеЗаписиОсновнаяЧасть.Сентябрь; ОбластьОсновного.Параметры.ФактКвартал = ВыборкаПоКварталу.СуммаЧистыйВесЗаКвартал; ИначеЕсли МесяцЧисло = 10 ИЛИ МесяцЧисло = 11 ИЛИ МесяцЧисло = 12 Тогда ОбластьОсновного.Параметры.ПланКвартал = ВыборкаДетальныеЗаписиОсновнаяЧасть.Октябрь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Ноябрь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Декабрь; ОбластьОсновного.Параметры.ФактКвартал = ВыборкаПоКварталу.СуммаЧистыйВесЗаКвартал; КонецЕсли; ОбластьОсновного.Параметры.ФактКвартал = Формат(ОбластьОсновного.Параметры.ФактКвартал,"ЧДЦ=3"); КонецЦикла; //проверка на пустоту плана за квартал Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ПланКвартал) Тогда СуммаПланКвартал = СуммаПланКвартал + ОбластьОсновного.Параметры.ПланКвартал; Иначе СуммаПланКвартал = СуммаПланКвартал + 0; КонецЕсли; //проверка на пустоту факта за квартал Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ФактКвартал) Тогда СуммаФактКвартал = СуммаФактКвартал + ОбластьОсновного.Параметры.ФактКвартал; Иначе СуммаФактКвартал = СуммаФактКвартал + 0; КонецЕсли; // подсчёт процента за Квартал и проверка на пустоту Плана и Факта Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ПланКвартал) И НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ФактКвартал) Тогда ПроцентЗаКвартал = ОбластьОсновного.Параметры.ФактКвартал/ОбластьОсновного.Параметры.ПланКвартал*100; ОбластьОсновного.Параметры.ПроцентКвартал = Формат(ПроцентЗаКвартал,"ЧДЦ=2"); Иначе ОбластьОсновного.Параметры.ПроцентКвартал = " "; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СУММА(ххх_МеталлоломОбороты.ЧистыйВесОборот) КАК СуммаЧистыйВесЗаГод |ИЗ | РегистрНакопления.ххх_Металлолом.Обороты(&НачалоГода, &КонецВыбранногоМесяца, Год, ) КАК ххх_МеталлоломОбороты |ГДЕ | ххх_МеталлоломОбороты.Период МЕЖДУ &НачалоГода И &КонецВыбранногоМесяца | И ххх_МеталлоломОбороты.Партнер = &Партнер"; Запрос.УстановитьПараметр("КонецВыбранногоМесяца", КонецМесяца(Отчет.Дата)); Запрос.УстановитьПараметр("НачалоГода", НачалоГода(Отчет.Дата)); Запрос.УстановитьПараметр("Партнер", Отчет.Организация); РезультатЗапроса = Запрос.Выполнить(); ВыборкаФактЗаГод = РезультатЗапроса.Выбрать(); Пока ВыборкаФактЗаГод.Следующий() Цикл //Определяем число месяца и считаем План за Год Если МесяцЧисло=1 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 2 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписи.Февраль; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 3 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 4 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 5 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 6 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 7 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июль; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 8 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Август; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 9 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Август + ВыборкаДетальныеЗаписиОсновнаяЧасть.Сентябрь; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 10 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Август + ВыборкаДетальныеЗаписиОсновнаяЧасть.Сентябрь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Октябрь; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 11 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Август + ВыборкаДетальныеЗаписиОсновнаяЧасть.Сентябрь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Октябрь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Ноябрь; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; ИначеЕсли МесяцЧисло = 12 Тогда ОбластьОсновного.Параметры.ПланГод = ВыборкаДетальныеЗаписиОсновнаяЧасть.Январь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Февраль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Март + ВыборкаДетальныеЗаписиОсновнаяЧасть.Апрель + ВыборкаДетальныеЗаписиОсновнаяЧасть.Май + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июнь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Июль + ВыборкаДетальныеЗаписиОсновнаяЧасть.Август + ВыборкаДетальныеЗаписиОсновнаяЧасть.Сентябрь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Октябрь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Ноябрь + ВыборкаДетальныеЗаписиОсновнаяЧасть.Декабрь; ОбластьОсновного.Параметры.ФактГод = ВыборкаФактЗаГод.СуммаЧистыйВесЗаГод; КонецЕсли; ОбластьОсновного.Параметры.ФактГод = Формат(ОбластьОсновного.Параметры.ФактГод,"ЧДЦ=3"); КонецЦикла; //проверка на пустоту плана за год Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ПланГод) Тогда СуммаПланГод = СуммаПланГод + ОбластьОсновного.Параметры.ПланГод; Иначе СуммаПланГод = СуммаПланГод + 0; КонецЕсли; //проверка на пустоту факта за год Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ФактГод) Тогда СуммаФактГод = СуммаФактГод + ОбластьОсновного.Параметры.ФактГод; Иначе СуммаФактГод = СуммаФактГод + 0; КонецЕсли; // подсчёт процента за Год и проверка на пустоту Плана и Факта Если НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ПланГод) И НЕ ПустаяСтрока(ОбластьОсновного.Параметры.ФактГод) Тогда ПроцентЗаГод = ОбластьОсновного.Параметры.ФактГод/ОбластьОсновного.Параметры.ПланГод*100; ОбластьОсновного.Параметры.ПроцентГод = Формат(ПроцентЗаГод,"ЧДЦ=2"); Иначе ОбластьОсновного.Параметры.ПроцентГод = " "; КонецЕсли; //Продолжить; КонецЦикла; |