Обработка по калькуляциям
Ребят,смотрите, вопрос, есть обработка для пересчета цен в калькуляции для БП 3,0
не могу вывести, чтобы в этой обработке, мы могли делить на подразделения... то есть при выборе подразделения перечитывались калькуляции именно того подразделения
вот код, помогите , пожалуйста
не могу вывести, чтобы в этой обработке, мы могли делить на подразделения... то есть при выборе подразделения перечитывались калькуляции именно того подразделения
вот код, помогите , пожалуйста
НачалоПериода=Объект.НачалоПериода;
сообщить(НачалоПериода);
КонецПериода=Объект.КонецПериода;
сообщить(КонецПериода);
Дата=Объект.Дата;// ЭлементыФормы.Дата.Значение
сообщить(Дата);
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| Калькуляция.Ссылка КАК Ссылка
|ИЗ
| Документ.Калькуляция КАК Калькуляция
|ГДЕ
| Калькуляция.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И Калькуляция.Проведен = &Проведен";
Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",КонецДня(КонецПериода));
Запрос.УстановитьПараметр("Проведен",Истина);
/////////////////////////////////////////////////////
////////////////////////////////////////////////////
СписокДокументов=Запрос.Выполнить().Выбрать();
Пока СписокДокументов.Следующий() Цикл
ДокОбъект = СписокДокументов.Ссылка.ПолучитьОбъект();
Для каждого Стр Из ДокОбъект.Услуги Цикл
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| КалькуляцияУслуги.Ссылка КАК Ссылка,
| КалькуляцияУслуги.Номенклатура КАК Номенклатура,
| КалькуляцияУслуги.Цена КАК Цена,
| ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаНовая
|ИЗ
| Документ.Калькуляция.Услуги КАК КалькуляцияУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
| ПО (КалькуляцияУслуги.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура)
|ГДЕ
| КалькуляцияУслуги.Ссылка = &Ссылка
|";
Запрос.УстановитьПараметр("КонецПериода",КонецДня(КонецПериода));
Запрос.УстановитьПараметр("ТипЦен",Объект.ТипЦен);
Запрос.УстановитьПараметр("Ссылка",СписокДокументов.Ссылка);
СписокНовыхЦен=Запрос.Выполнить().Выгрузить();
Номенклатура=Стр.Номенклатура;
Цена = Стр.Цена;
УслугиКоличество = Стр.Количество;
НайденнаяСтрока = СписокНовыхЦен.Найти(Номенклатура, "Номенклатура");
Если НайденнаяСтрока<>Неопределено Тогда
НоваяЦена=НайденнаяСтрока.ЦенаНовая;
Иначе
НоваяЦена=0;
КонецЕсли;
Если Цена<>НоваяЦена Тогда
Стр.Цена = НоваяЦена;
Стр.Сумма = НоваяЦена * Стр.Количество * Стр.Периодичность;
ПересчитатьСуммуНДС(Стр, ДокОбъект.СуммаВключаетНДС);
КонецЕсли;
КонецЦикла;
ДокОбъект.Записать();
Сообщить("Обработан документ "+ДокОбъект);
КонецЦикла; // КонецЦикла;
ПоказатьПо теме из базы знаний
- Калькуляция плановой стоимости продукции
- Иерархия плановых калькуляций для ERP
- Калькуляция продукции, Карточка номенклатуры, Отчет о материалах. ERP 2
- Расчет затрат выпуска и продаж. Разузлование калькуляции себестоимости. Калькуляция. (БП 3.0)
- Калькуляция страхового стажа для 1С: Зарплата и управление персоналом, редакция 3.1
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(4)
Теперь другой вопрос
Смотрите, есть автоматическое создание реализаций по калькуляциям, но теперь в калькуляциях стоит отбор по подразделению, то есть если ты из группы Х, видишь только калькуляции группы Х и тд.
как сделать, чтобы в обработке для создания реализаций, создавались только те реализации, к группе которой принадлежит данный пользователь. Вот рабочий код обработки, но нет данного отбора, помогите в этом разобраться теперь
Теперь другой вопрос
Смотрите, есть автоматическое создание реализаций по калькуляциям, но теперь в калькуляциях стоит отбор по подразделению, то есть если ты из группы Х, видишь только калькуляции группы Х и тд.
как сделать, чтобы в обработке для создания реализаций, создавались только те реализации, к группе которой принадлежит данный пользователь. Вот рабочий код обработки, но нет данного отбора, помогите в этом разобраться теперь
НачалоПериода=Объект.НачалоПериода;
сообщить(НачалоПериода);
КонецПериода=Объект.КонецПериода;
сообщить(КонецПериода);
Подразделение = Объект.Подразделение;
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| Калькуляция.Ссылка КАК Ссылка,
| Калькуляция.Проведен КАК Проведен,
| Калькуляция.Период КАК Период,
| Калькуляция.Контрагент КАК Контрагент,
| Калькуляция.МГ_Объект КАК МГ_Объект,
| Калькуляция.ДоговорКонтрагента КАК Договор,
| Калькуляция.Организация КАК Организация,
| КалькуляцияУслуги.Номенклатура КАК Номенклатура,
| ЕСТЬNULL(КалькуляцияУслуги.Количество, 0) КАК Поле1,
| ЕСТЬNULL(КалькуляцияУслуги.Цена, 0) КАК Цена,
| ЕСТЬNULL(КалькуляцияУслуги.Сумма, 0) КАК Сумма,
| ЕСТЬNULL(КалькуляцияУслуги.СтавкаНДС, 0) КАК СтавкаНДС,
| ЕСТЬNULL(КалькуляцияУслуги.СуммаНДС, 0) КАК СуммаНДС,
| КалькуляцияУслуги.Служба КАК Служба,
| КалькуляцияУслуги.Январь КАК Январь,
| КалькуляцияУслуги.Февраль КАК Февраль,
| КалькуляцияУслуги.Март КАК Март,
| КалькуляцияУслуги.Апрель КАК Апрель,
| КалькуляцияУслуги.Июнь КАК Июнь,
| КалькуляцияУслуги.Июль КАК Июль,
| КалькуляцияУслуги.Август КАК Август,
| КалькуляцияУслуги.Октябрь КАК Октябрь,
| КалькуляцияУслуги.Ноябрь КАК Ноябрь,
| КалькуляцияУслуги.Декабрь КАК Декабрь,
| КалькуляцияУслуги.Май КАК Май,
| Калькуляция.Дата КАК Дата,
| КалькуляцияУслуги.СуммаПлановая КАК СуммаПлановая,
| КалькуляцияУслуги.Периодичность КАК Периодичность,
| ЕСТЬNULL(КалькуляцияУслуги.Сумма + КалькуляцияУслуги.СуммаНДС, 0) КАК Всего,
| ВЫБОР
| КОГДА КалькуляцияУслуги.Периодичность <= ЕСТЬNULL(Калькуляция.Период, 0)
| ИЛИ ЕСТЬNULL(Калькуляция.Период, 0) = 0
| ТОГДА КалькуляцияУслуги.Количество
| ИНАЧЕ КалькуляцияУслуги.Периодичность / ЕСТЬNULL(Калькуляция.Период, 0) * КалькуляцияУслуги.Количество
| КОНЕЦ КАК Количество,
| Калькуляция.До10тыс КАК До10тыс,
| КалькуляцияУслуги.Сентябрь КАК Сентябрь,
| Калькуляция.ПодразделениеОрганизации КАК ПодразделениеОрганизации
|ИЗ
| Документ.Калькуляция.Услуги КАК КалькуляцияУслуги
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Калькуляция КАК Калькуляция
| ПО КалькуляцияУслуги.Ссылка = Калькуляция.Ссылка
|ГДЕ
| Калькуляция.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И Калькуляция.До10тыс = &До10тыс
|
|УПОРЯДОЧИТЬ ПО
| Калькуляция.Контрагент.Наименование";
Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода",КонецДня(КонецПериода));
//Запрос.УстановитьПараметр("Возвращено", Истина);
// Запрос.УстановитьПараметр("Выставлять", Истина);
Запрос.УстановитьПараметр("До10тыс", Ложь);
Запрос.УстановитьПараметр("ПодразделениеОрганизации", Подразделение);
//Запрос.УстановитьПараметр("МассивКонтрагент", ЭлементыФормы.Документ.Значение);
/////////////////////////////////////////////////////
////////////////////////////////////////////////////
МассивПодразделений=Новый Массив;
МассивКонтрагентов=Новый Массив(2);
МассивПодразделений=Новый ТаблицаЗначений;
МассивПодразделений.Колонки.Добавить("Контрагент",Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
МассивПодразделений.Колонки.Добавить("ПодразделениеОрганизации",Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций"));
МассивПодразделений.Колонки.Добавить("Договор",Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов"));
МассивКонтрагентов[0] = "Контрагент";
МассивКонтрагентов[1] = "ПодразделениеОрганизации";
// Для Каждого ЭлементМассива из Массив Цикл
// Сообщить(ЭлементМассива);
//КонецЦикла;
СписокКонтрагентов=Запрос.Выполнить().Выбрать();
Пока СписокКонтрагентов.Следующий() Цикл
Для Каждого Стр Из МассивПодразделений Цикл
НоваяСтрока=МассивПодразделений.Добавить();
НоваяСтрока.Контрагент=СписокКонтрагентов.Контрагент;
НоваяСтрока.ПодразделениеОрганизации=СписокКонтрагентов.ПодразделениеОрганизации;
НоваяСтрока.Договор=СписокКонтрагентов.Договор;
КонецЦикла;
КонецЦикла;
МассивПодразделений.Свернуть("Контрагент,ПодразделениеОрганизации,Договор");
// ТекущийИндекс = 0;
// ВсегоЭлементов = МассивКонтрагентов.Количество();
// Пока ТекущийИндекс < ВсегоЭлементов Цикл
// Индекс2 = ТекущийИндекс + 1;
// сообщить("1111");
// Пока Индекс2 < ВсегоЭлементов Цикл
// Если МассивКонтрагентов[Индекс2] = МассивКонтрагентов[ТекущийИндекс] Тогда
// МассивКонтрагентов.Удалить(Индекс2);
// ВсегоЭлементов = ВсегоЭлементов - 1;
// Иначе
// Индекс2 = Индекс2 + 1;
// КонецЕсли;
// КонецЦикла;
// ТекущийИндекс = ТекущийИндекс + 1;
// КонецЦикла;
//МассивПодразделений;
СписокПодразделений=Запрос.Выполнить().Выбрать();
Пока СписокПодразделений.Следующий() Цикл
Для Каждого СтрокаСчетов Из СписокКонтрагентов.Контрагент Цикл
МассивПодразделений.Добавить(СписокПодразделений.ПодразделениеОрганизации);
КонецЦикла;
КонецЦикла;
ТекущийИндекс = 0;
ВсегоЭлементов = МассивПодразделений.Количество();
Пока ТекущийИндекс < ВсегоЭлементов Цикл
Индекс2 = ТекущийИндекс + 1;
сообщить("444");
Пока Индекс2 < ВсегоЭлементов Цикл
Если МассивПодразделений[Индекс2] = МассивПодразделений[ТекущийИндекс] Тогда
МассивПодразделений.Удалить(Индекс2);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;
КонецЦикла;
ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;
//////////////////////////////////////////////////////////// ///////////////////////////////////////
//////////////////////////////////////////////////////////// //////////////////////////////////////
//////////////////////////////////////////////////////////// /////////////////////////////////////
Дата=Объект.Дата;// ЭлементыФормы.Дата.Значение
сообщить(Дата);
//Выборка=Запрос.Выполнить().Выбрать();
//Пока Выборка.Следующий() Цикл
//Если Месяц(Дата)=1
//ТОГДА Январь=Выборка.Январь ;
// КонецЕсли;
// Если МЕСЯЦ(Дата) = 2
// ТОГДА Февраль=Выборка.Февраль;
// КонецЕсли;
// Если МЕСЯЦ(Дата) = 3
// ТОГДА Март= Выборка.Март;
// КонецЕсли;
// Если МЕСЯЦ(Дата) = 4
//ТОГДА Апрель=Выборка.Апрель;
//КонецЕсли;
// Если МЕСЯЦ(Дата) = 5
//ТОГДА Май=Выборка.Май;
//КонецЕсли;
//Если МЕСЯЦ(Дата) = 6
//ТОГДА Июнь=Выборка.Июнь;
// КонецЕсли;
//Если МЕСЯЦ(Дата) = 7
// ТОГДА Июль=Выборка.Июль;
//КонецЕсли;
//Если МЕСЯЦ(Дата) = 8
// ТОГДА Август=Выборка.Август;
// КонецЕсли;
// Если МЕСЯЦ(Дата) = 9
// ТОГДА Сентябрь=Выборка.Сентябрь;
// КонецЕсли;
// Если МЕСЯЦ(Дата) = 10
// ТОГДА Октябрь=Выборка.Октябрь;
// КонецЕсли;
// ЕСЛИ МЕСЯЦ(Дата) = 11
// ТОГДА Ноябрь=Выборка.Ноябрь;
// КонецЕсли;
// Если МЕСЯЦ(Дата) = 12
// ТОГДА Декабрь=Выборка.Декабрь;
//ИНАЧЕ КОНЕЦЕсли;
// КонецЦикла;
// Для Каждого ЭлементМассива1 Из МассивПодразделений Цикл
Для Каждого ЭлементМассива Из МассивПодразделений Цикл
//сообщить("Контрагент:" +ЭлементМассива);
ДокументАктОбъект=Документы.РеализацияТоваровУслуг.СоздатьДокумент();
ДокументАктОбъект.ВидОперации=Перечисления.ВидыОперацийРеализацияТоваров.Услуги;
ДокументАктОбъект.Дата= КонецМесяца(Дата);
ДокументАктОбъект.Организация=Справочники.Организации.НайтиПоКоду("00-000001");
ДокументАктОбъект.Контрагент=ЭлементМассива.Контрагент;
ДокументАктОбъект.ДоговорКонтрагента=ЭлементМассива.Договор;
ДокументАктОбъект.ПодразделениеОрганизации=ЭлементМассива.ПодразделениеОрганизации;
ДокументАктОбъект.СпособЗачетаАвансов=Перечисления.СпособыЗачетаАвансов.Автоматически;
ДокументАктОбъект.Комментарий = "Техническое обслуживание юр.лиц: "+Формат(Дата,"ДФ=ММММ")+" (создан автоматически)";
//ДокОб.Записать();
ДокументАктОбъект.Ответственный=ПользователиИнформационнойБазы.ТекущийПользователь();
ДокументАктОбъект.СуммаВключаетНДС=Ложь;
ДокументАктОбъект.КурсВзаиморасчетов=1;
ДокументАктОбъект.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643");
ДокументАктОбъект.КратностьВзаиморасчетов=1;
// ДокументАктОбъект.Видоперации=Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия;
ДокументАктОбъект.Руководитель=Справочники.ФизическиеЛица.НайтиПоКоду("000003536");
ДокументАктОбъект.ГлавныйБухгалтер=Справочники.ФизическиеЛица.НайтиПоКоду("000003614");
// ДокументАктОбъект.УчитыватьНДС=Истина;
//ДокументАктОбъект.Установлен=Истина;
////ДокументАктОбъект.СчетЗатрат=ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.01");
ДокументАктОбъект.СчетУчетаРасчетовПоАвансам=ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02");
ДокументАктОбъект.СчетУчетаРасчетовСКонтрагентом=ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
ДокументАктОбъект.ПодразделениеЗатрат=Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000034");
//ДокументАктОбъект.НоменклатурнаяГруппа=справочники.НоменклатурныеГруппы.НайтиПоКоду("000000004");
Услуги=ДокументАктОбъект.Услуги;
//сообщить(Услуги);
Услуги.Очистить();
Выборка=Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Контрагент=ЭлементМассива.Контрагент И
Выборка.Договор=ЭлементМассива.Договор И
Выборка.ПодразделениеОрганизации=ЭлементМассива.ПодразделениеОрганизации
Тогда
//////////////////////////////////////////////////////////// ////////////////////////////
Если Месяц(Дата)=1
ТОГДА Поле1=Выборка.Январь;
КонецЕсли;
Если МЕСЯЦ(Дата) = 2
ТОГДА Поле1=Выборка.Февраль;
КонецЕсли;
Если МЕСЯЦ(Дата) = 3
ТОГДА Поле1= Выборка.Март;
КонецЕсли;
Если МЕСЯЦ(Дата) = 4
ТОГДА Поле1=Выборка.Апрель;
КонецЕсли;
Если МЕСЯЦ(Дата) = 5
ТОГДА Поле1=Выборка.Май;
КонецЕсли;
Если МЕСЯЦ(Дата) = 6
ТОГДА Поле1=Выборка.Июнь;
КонецЕсли;
Если МЕСЯЦ(Дата) = 7
ТОГДА Поле1=Выборка.Июль;
КонецЕсли;
Если МЕСЯЦ(Дата) = 8
ТОГДА Поле1=Выборка.Август;
КонецЕсли;
Если МЕСЯЦ(Дата) = 9
ТОГДА Поле1=Выборка.Сентябрь;
КонецЕсли;
Если МЕСЯЦ(Дата) = 10
ТОГДА Поле1=Выборка.Октябрь;
КонецЕсли;
ЕСЛИ МЕСЯЦ(Дата) = 11
ТОГДА Поле1=Выборка.Ноябрь;
КонецЕсли;
Если МЕСЯЦ(Дата) = 12
ТОГДА Поле1=Выборка.Декабрь;
КОНЕЦЕсли;
//////////////////////////////////////////////////////////// ////////////////////////////////
Если Поле1=Истина Тогда
Строка = Услуги.Добавить();
Строка.Номенклатура=Выборка.Номенклатура;
// // Строка.Содержание1=Строка.Номенклатура;
Строка.Содержание =Строка(Строка.Номенклатура)+" За "+Строка(Формат(Объект.Дата,"ДФ=ММММ"))+" 2019г. " ;
//
//Строка.Содержание = Строка.Содержание1 + " За "+Формат(Дата(01,Месяц,01),"ДФ=ММММ") +" "+"2014 "+Выборка.Объект;
// сообщить(Выборка.Номенклатура);
// сообщить(Выборка.Номенклатура);
//Строка.ЕдиницаИзмерения=Выборка.ЕдиницаИзмерения;
Строка.Количество=Выборка.Количество;
Строка.СтавкаНДС=Выборка.СтавкаНДС;
// Строка.Сумма=Выборка.Сумма;
//Строка.Сумма=Выборка.Цена*Выборка.Количество*Выборка.Периодичность;
Строка.Сумма=Выборка.Цена*Выборка.Количество;
Строка.МГ_Объект=Выборка.МГ_Объект;
Строка.Цена=Выборка.Цена;
////////////////////////////
// ЗначениеСтавкиНДС = УчетНДС.ПолучитьСтавкуНДС(Строка.СтавкаНДС);
Строка.СуммаНДС = Строка.Сумма * 1.2 - Строка.Сумма ;
//Строка.СуммаНДС = ?(ЗначениеСтавкиНДС = 0, 0, Окр(Строка.Сумма * ЗначениеСтавкиНДС/(100+ЗначениеСтавкиНДС),2));
//Строка.Сумма = Строка.Сумма - Строка.СуммаНДС;
///////////////////////////////////////////////////////////
//Строка.СуммаНДС=Выборка.СуммаНДС;
//Строка.СуммаПлановая=Выборка.СуммаПлановая;
Строка.СчетДоходов=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
Строка.СчетРасходов=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
Строка.СчетУчетаНДСПоРеализации=ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03");
Строка.Субконто=справочники.НоменклатурныеГруппы.НайтиПоКоду("00-0000002");
//Строка.СчетЗатрат1=ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.01");
//Строка.Период=Формат(Дата,"ДФ=ММММ");
//Строка.Коэффициент=Выборка.Периодичность;
// Строка.Объект = Выборка.Объект;
Строка.Подразделение = Выборка.Служба;
//Строка.Ответственный = Выборка.Служба;
ДокументАктОбъект.СуммаДокумента=Строка.Сумма +Строка.СуммаНДС;//Выборка.Всего;
ДокументАктОбъект.ДоговорКонтрагента=Выборка.Договор;
// ДокументАктОбъект.ОбъектОбсл=Выборка.Объект;
// ДокументАктОбъект.ПодразделениеОрганизации=Выборка.Бригадаисполнитель;
ДокументАктОбъект.Записать(РежимЗаписиДокумента.Проведение);
сообщить(ДокументАктОбъект.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
сообщить(ДокументАктОбъект.Ссылка);
//ДокументАктОбъект.Записать();
КонецЦикла;//КонецЦикла;
Показать