вторник, 28 апреля 2015 г.

1c специалист. Задача 3.43.

Решение:
Основные моменты задачи:
1) "Вертикальный график". Табель выглядит как-то так:


2) Начисление ЗП происходит еженедельно, собственно из за этого и все остальные проблемы
3) При начислении оклада в первичные записи необходимо записывать базовый период. Может есть способ поэлегантнее, но как-то нужно определить количество рабочих часов в неделе.
4) Необходимо учесть, то что первичная запись может быть разделена сразу на 3: если в течении недели изменился оклад и если неделя переходит из одного месяца в другой.
5) При расчете отпуска считаем именно отработанные дни (не рабочие и не отработанные часы) плюс контроль 24 дней.


Скачать решение задачи 3.43 (1с специалист по платформе)

понедельник, 27 апреля 2015 г.

1c специалист задачи 5.10-5.14

Задача 5.10.

Для того чтобы отличать ссылки от других (например, "http" или "file") используется идентификатор схемы "e1cib".
Саму навигационную ссылку в режиме предприятия можно получить с помощью CTRL+F11.
Таким образом остается только "вычленить" из комментария  ссылку и открыть ее с помощью команды ПерейтиПоНавигационнойСсылке
&НаКлиенте
Процедура КомментарийОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекстСсылки = Элемент.ТекстРедактирования;
Если Не ЗначениеЗаполнено(ТекстСсылки) Тогда
Возврат;
КонецЕсли;
ПервыйСимволССылки = Найти(ТекстСсылки, "e1cib");
Если ПервыйСимволССылки = 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Комментарий не содержит навигационной ссылки!";
Сообщение.Поле = "Объект.Комментарий";
Сообщение.Сообщить();
Возврат;
КонецЕсли;

// урезаем 
ТекстСсылки = Сред(ТекстСсылки, ПервыйСимволССылки);
ПоследнийСимволССылки = Найти(ТекстСсылки," ");
НавигационнаяСсылка = Сред(ТекстСсылки, 1, ПоследнийСимволССылки-1 );
Попытка
ПерейтиПоНавигационнойСсылке(НавигационнаяСсылка);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка перехода по ссылке: "+ОписаниеОшибки();
Сообщение.Поле = "Объект.Комментарий";
Сообщение.Сообщить();
Возврат;
КонецПопытки;

КонецПроцедуры


Скачать решение задачи 5.10(1с специалист)


Задача 5.11.

  • Добавляем произвольную форму в справочник "Номенклатуры".
  • Из документа вызываем открытие этой формы
  • Обрабатываем перетаскивание.



&НаКлиенте
Процедура Подбор(Команда)
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора", , ЭтаФорма,,ВариантОткрытияОкна.ОтдельноеОкно);
КонецПроцедуры

&НаКлиенте
Процедура СписокНоменклатурыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
Для каждого Элемент Из ПараметрыПеретаскивания.Значение Цикл
НовСтрока = Объект.СписокНоменклатуры.Добавить();
НовСтрока.Номенклатура = Элемент;
КонецЦикла;

КонецПроцедуры

Скачать решение задачи 5.11 (1с специалист)




Задача 5.12.
Основной момент - открытие форм.
Для решения потребуется создать 2 формы справочника "Номенклатура", а в обработке выбора первым этапом открываем форму  со сроками годности  и остатками, вторым этапом заполняем строку  таб. части переданными значениями.


&НаКлиенте
Процедура СписокНоменклатурыНоменклатураОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.Номенклатура") Тогда
ВыбраннаяНом = ВыбранноеЗначение;
ПараметрыПартий = Новый Структура("НаДату, Номенклатура", Объект.Дата, ВыбранноеЗначение);
ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПартий", ПараметрыПартий, Элемент);
ИначеЕсли ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда
ТекДанные = Элементы.СписокНоменклатуры.ТекущиеДанные;
ТекДанные.Номенклатура = ВыбраннаяНом;
ТекДанные.срокГодности = ВыбранноеЗначение.СрокГодности;
ТекДанные.Количество = ВыбранноеЗначение.Количество;
КонецЕсли;
КонецПроцедуры


Скачать решение задачи 5.12 (1с специалист)


Задача 5.13.
Решается аналогично  задаче 5.12, единственное отличие нужно обработку выбора нужно "повесить" на колонку "Срок годности" (Если я правильно нашел отличие).
Скачать решение задачи 5.13 (1с специалист)


Задача 5.14.

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



Процедура ОбработкаПроведения(Отказ, Режим)
Движения.Взаиморасчеты.Записывать = Истина;
Движения.Взаиморасчеты.Очистить();
Для Каждого ТекСтрокаТабличнаяЧасть Из ТабличнаяЧасть Цикл
Движение = Движения.Взаиморасчеты.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Контрагент = ТекСтрокаТабличнаяЧасть.Контрагент;
Движение.Договор = ТекСтрокаТабличнаяЧасть.Договор;
Движение.Сумма = ТекСтрокаТабличнаяЧасть.СуммаОплаты;
КонецЦикла;
Движения.Взаиморасчеты.Записать();
Движения.Взаиморасчеты.БлокироватьДляИзменения = Истина;

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Взаиморасчеты");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = ТабличнаяЧасть;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Контрагент", "Контрагент");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Договор", "Договор");
Блокировка.Заблокировать();

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ПриходДенегТабличнаяЧасть.НомерСтроки,
| ПриходДенегТабличнаяЧасть.Контрагент,
| ПриходДенегТабличнаяЧасть.Договор,
| ПриходДенегТабличнаяЧасть.СуммаОплаты
|ПОМЕСТИТЬ ДокТЧ
|ИЗ
| Документ.ПриходДенег.ТабличнаяЧасть КАК ПриходДенегТабличнаяЧасть
|ГДЕ
| ПриходДенегТабличнаяЧасть.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДокТЧ.НомерСтроки,
| ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
| ДокТЧ.Договор
|ИЗ
| ДокТЧ КАК ДокТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Взаиморасчеты.Остатки(
| &ТочкаИтогов,
| (Договор, Контрагент) В
| (ВЫБРАТЬ
| ДокТЧ.Договор,
| ДокТЧ.Контрагент
| ИЗ
| ДокТЧ)) КАК ВзаиморасчетыОстатки
| ПО ДокТЧ.Контрагент = ВзаиморасчетыОстатки.Контрагент
| И ДокТЧ.Договор = ВзаиморасчетыОстатки.Договор
|ГДЕ
| ЕСТЬNULL(ВзаиморасчетыОстатки.СуммаОстаток, 0) < 0";


Запрос.УстановитьПараметр("ТочкаИтогов", Новый Граница(МоментВремени(),ВидГраницы.Включая));
Запрос.УстановитьПараметр("Ссылка", Ссылка);


РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой()  Тогда
Отказ = Истина;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий()  Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "По договору "+ Выборка.Договор +" сумма оплаченного товара > суммы проданного на "+(-Выборка.СуммаОстаток);
Сообщение.Поле = "ТабличнаяЧасть["+(Выборка.НомерСтроки-1)+"].СуммаОплаты";
Сообщение.УстановитьДанные(ЭтотОбъект); 
Сообщение.Сообщить();
КонецЦикла; 
КонецЕсли; 
КонецПроцедуры

Скачать решение задачи 5.14 (1с специалист)


среда, 22 апреля 2015 г.

1c специалист задача 3.41



Решение

1)  C видами расчета все очевидно
"Оклад" и "Командировка" - в Основные начисления.
Премия - в Дополнительные
2) Так как премия не меняется в течении расчетного периода, а оклад может 1 раз изменится , то наверное правильнее завести 2 регистра сведений с разной периодичностью.
3) Новый момент - это документ "Табель". Создаем ТЧ с 30 реквизитами (дни месяца) и проставляем режиме предприятия либо количество отработанных часов или "К" в случае командировки. Этот документ будет регистратором для оборотного РН "Табель", в котором и будут хранится данные о отработанном времени.

Процедура ОбработкаПроведения(Отказ, Режим)
//// регистр Табель 
Движения.Табель.Записывать = Истина;
ТЗ = РабочиеДни.Выгрузить(); 

Для Каждого ТекСтрока Из ТЗ Цикл
Движение = Движения.Табель.Добавить();
Движение.Период = Период;
Движение.Подразделение = Подразделение;
Движение.Сотрудник = ТекСтрока.Сотрудник;
// Расчет рабочих и командировочных:
ЧислоСекундВСутках = 86400;
Дат = НачалоМесяца(Период);
ДатаОкончания = КонецМесяца(Период);
ЧасыРабочие = 0;
ЧасыКоманд  = 0;
Пока Дат <= ДатаОкончания Цикл
ДеньВМассиве = День(Дат) + 1;
Если ТекСтрока[ДеньВМассиве] = "8" Тогда
ЧасыРабочие = ЧасыРабочие + 8;
ИначеЕсли ТекСтрока[ДеньВМассиве] = "К" Тогда          
ЧасыКоманд  = ЧасыКоманд  + 8;
КонецЕсли; 
Дат = Дат + ЧислоСекундВСутках;
КонецЦикла;
Движение.ЧасыРабочие = ЧасыРабочие;
Движение.ЧасыКоманд = ЧасыКоманд;
КонецЦикла;

КонецПроцедуры

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Период = НачалоМесяца(Период);

КонецПроцедуры

4)Доработаем обработку "Заполнение графиков" и заполним график хотя бы для 5-дневки. (подробнее)

5) Создаем регистры расчета.
В регистр "Основные начисления" добавим ресурс "Часы".
6) Дорабатываем документ "Начисление ЗП", в обработке проведения формируем первичные записи. 

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ПериодРегистрации = НачалоМесяца(ПериодРегистрации);
КонецПроцедуры


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

Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);

РезультатЗапроса = Запрос.ВыполнитьПакет();
ЕстьКоммандировка = Ложь;

Если Не РезультатЗапроса[0].Пустой() Тогда
Движения.ОсновныеНачисления.Записывать = Истина;
ОснСотр = Новый Массив;
ОснПодр = Новый Массив;

Выборка = РезультатЗапроса[0].Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.ОсновныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.График               = Справочники.ВидыГрафиков.Пятидневка;
Движение.Часы                 =  Выборка.ЧасовОтработано;
Если Выборка.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Командировка Тогда
Движение.БазовыйПериодНачало = ДобавитьМесяц(ПериодРегистрации, -2);
Движение.БазовыйПериодКонец   = ПериодРегистрации-1;
Движение.Часы                 =  Выборка.ЧасовВКомандировке;
ЕстьКоммандировка = Истина;
КонецЕсли; 

Если ОснСотр.Найти(Выборка.Сотрудник)= Неопределено Тогда
ОснСотр.Добавить(Выборка.Сотрудник);
КонецЕсли; 
Если ОснПодр.Найти(Выборка.Подразделение)= Неопределено Тогда
ОснПодр.Добавить(Выборка.Подразделение);
КонецЕсли; 
КонецЦикла; 
КонецЕсли; 


Если Не РезультатЗапроса[1].Пустой() Тогда
Движения.ДополнительныеНачисления.Записывать = Истина;
ДопСотр = Новый Массив;
ДопПодр = Новый Массив;

Выборка = РезультатЗапроса[1].Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Движения.ДополнительныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.БазовыйПериодНачало = ПериодРегистрации;
Движение.БазовыйПериодКонец  = КонецМесяца(ПериодРегистрации);
Движение.Параметр = Выборка.ПроцентПремии;
Если ДопСотр.Найти(Выборка.Сотрудник)= Неопределено Тогда
ДопСотр.Добавить(Выборка.Сотрудник);
КонецЕсли; 
Если ДопПодр.Найти(Выборка.Подразделение)= Неопределено Тогда
ДопПодр.Добавить(Выборка.Подразделение);
КонецЕсли; 
КонецЦикла; 
КонецЕсли; 

Движения.ОсновныеНачисления.Записать();
Движения.ДополнительныеНачисления.Записать();

Если ЕстьКоммандировка Тогда
Расчеты.РассчитатьНачисления(Движения.ОсновныеНачисления,ПланыВидовРасчета.ОсновныеНачисления.Командировка,ОснСотр, ОснПодр);
КонецЕсли; 
Расчеты.РассчитатьНачисления(Движения.ОсновныеНачисления,ПланыВидовРасчета.ОсновныеНачисления.Оклад,ОснСотр, ОснПодр);
Расчеты.РассчитатьНачисления(Движения.ДополнительныеНачисления,ПланыВидовРасчета.ДополнительныеНачисления.Премия,ДопСотр, ДопПодр);
КонецПроцедуры

7) Описываем алгоритмы расчета в общем модуле.

Процедура РассчитатьНачисления(НаборЗаписей, ВидРасчета, МассивСотрудников, МассивПодразделений) Экспорт

Регистратор = НаборЗаписей.Отбор.Регистратор.Значение;
Если ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Или  ВидРасчета =ПланыВидовРасчета.ОсновныеНачисления.Командировка Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОсновныеНачисленияДанныеГрафика.НомерСтроки,
| ОсновныеНачисленияДанныеГрафика.Часы,
| ОсновныеНачисленияДанныеГрафика.Параметр КАК Оклад,
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия, 0) КАК НормаЧасов,
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеБазовыйПериод, 0) КАК БазаЧасов,
| ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.СуммаБаза, 0) + ЕСТЬNULL(ОсновныеНачисленияБазаДополнительныеНачисления.СуммаБаза, 0) КАК База
|ИЗ
| РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
| Регистратор = &Регистратор
| И Сотрудник В (&МассивСотрудников)
| И Подразделение В (&МассивПодразделений)
| И ВидРасчета = &ВидРасчета) КАК ОсновныеНачисленияДанныеГрафика
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления(
| &ИзмерОсновного,
| &ИзмерБазового,
| ,
| Регистратор = &Регистратор
| И Сотрудник В (&МассивСотрудников)
| И Подразделение В (&МассивПодразделений)
| И ВидРасчета = &ВидРасчета) КАК ОсновныеНачисленияБазаОсновныеНачисления
| ПО ОсновныеНачисленияДанныеГрафика.НомерСтроки = ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаДополнительныеНачисления(
| &ИзмерОсновного,
| &ИзмерБазового,
| ,
| Регистратор = &Регистратор
| И Сотрудник В (&МассивСотрудников)
| И Подразделение В (&МассивПодразделений)
| И ВидРасчета = &ВидРасчета) КАК ОсновныеНачисленияБазаДополнительныеНачисления
| ПО ОсновныеНачисленияДанныеГрафика.НомерСтроки = ОсновныеНачисленияБазаДополнительныеНачисления.НомерСтроки";

Запрос.УстановитьПараметр("Регистратор",Регистратор);
Запрос.УстановитьПараметр("МассивСотрудников",МассивСотрудников);
Запрос.УстановитьПараметр("МассивПодразделений",МассивПодразделений);
Запрос.УстановитьПараметр("ВидРасчета",ВидРасчета);
Измер = Новый Массив(2);
Измер[0] = "Сотрудник" ;
Измер[1] = "Подразделение";
Запрос.УстановитьПараметр("ИзмерОсновного",Измер);
Запрос.УстановитьПараметр("ИзмерБазового",Измер);



Выборка = Запрос.Выполнить().Выбрать();
Для Каждого Запись Из НаборЗаписей  Цикл
Выборка.Сбросить();
Если Запись.ВидРасчета <> ВидРасчета Тогда
Продолжить;
КонецЕсли; 
Отбор = Новый Структура;
Отбор.Вставить("НомерСтроки", Запись.НомерСтроки);
Если Выборка.НайтиСледующий(Отбор) Тогда
Если ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад   Тогда
Запись.Сумма = (Выборка.Часы / Выборка.НормаЧасов) * Выборка.Оклад;
ИначеЕсли ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Командировка И Выборка.БазаЧасов<>0  Тогда
Запись.Сумма = (Выборка.База / Выборка.БазаЧасов) * Выборка.Часы;
КонецЕсли;
КонецЕсли; 

КонецЦикла; 

ИначеЕсли ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисления.Премия Тогда   
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ДополнительныеНачисленияБазаОсновныеНачисления.НомерСтроки,
| ЕСТЬNULL(ДополнительныеНачисленияБазаОсновныеНачисления.СуммаБаза, 0) КАК База
|ИЗ
| РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления(
| &ИзмерОсновного,
| &ИзмерБазового,
| ,
| Регистратор = &Регистратор
| И Сотрудник В (&МассивСотрудников)
| И Подразделение В (&МассивПодразделений)
| И ВидРасчета = &ВидРасчета) КАК ДополнительныеНачисленияБазаОсновныеНачисления";

Запрос.УстановитьПараметр("Регистратор",Регистратор);
Запрос.УстановитьПараметр("МассивСотрудников",МассивСотрудников);
Запрос.УстановитьПараметр("МассивПодразделений",МассивПодразделений);
Запрос.УстановитьПараметр("ВидРасчета",ВидРасчета);
Измер = Новый Массив(2);
Измер[0] = "Сотрудник" ;
Измер[1] = "Подразделение";
Запрос.УстановитьПараметр("ИзмерОсновного",Измер);
Запрос.УстановитьПараметр("ИзмерБазового",Измер);

Выборка = Запрос.Выполнить().Выбрать();
Для Каждого Запись Из НаборЗаписей  Цикл
Выборка.Сбросить();
Если Запись.ВидРасчета <> ВидРасчета Тогда
Продолжить;
КонецЕсли; 
Отбор = Новый Структура;
Отбор.Вставить("НомерСтроки", Запись.НомерСтроки);
Если Выборка.НайтиСледующий(Отбор) Тогда
Запись.Сумма = (Выборка.База /100) * Запись.Параметр;
КонецЕсли;
КонецЦикла; 
КонецЕсли;
НаборЗаписей.Записать(,Истина);
КонецПроцедуры

8) Отчет.



Скачать решение задачи 3.41(1с специалист)