Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. КонецПроцедуры
Процедура КнопкаНастройкаПериодаНажатие(Элемент) НП = Новый НастройкаПериода ; НП.ВариантНастройки=ВариантНастройкиПериода.Интервал; НП.ВариантНачала=ВариантГраницыИнтервала.КонкретнаяДата; НП.ВариантОкончания=ВариантГраницыИнтервала.КонкретнаяДата; НП.ДатаНачала=ДатаНач; НП.ДатаОкончания=ДатаКон; Если НП.Редактировать()Тогда ДатаНач=НП.ПолучитьДатуНачала(); ДатаКон= НП.ПолучитьДатуОкончания(); КонецЕсли; Если ДатаНач=Дата('00010101') Тогда ДатаКон=ТекущаяДата(); КонецЕсли; КонецПроцедуры //Проверяет заполнение обязательных полей Функция ВсеОбязательныеПоляЗаполнены() Для Каждого ЭлементФормы Из ЭтаФорма.ЭлементыФормы Цикл Если ТипЗнч(ЭлементФормы) = Тип("ПолеВвода") Тогда Если ЭлементФормы.АвтоОтметкаНезаполненного Тогда Если Не ЗначениеЗаполнено(ЭлементФормы.Значение) Тогда Возврат Ложь; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции //Заполняем ТЧ документов Процедура СоздатьОперациюБух() Если НЕ ВсеОбязательныеПоляЗаполнены() Тогда Сообщить("Заполните обязательные поля", СтатусСообщения.Важное); Возврат; КонецЕсли; //Формируем базу распределения Запрос = Новый Запрос; //Бухгалтерский Учет ТекстЗапроса = "ВЫБРАТЬ | БухгалтерскийЗапрос.Номенклатура КАК Номенклатура, | БухгалтерскийЗапрос.СуммаКРаспределению КАК СуммаКРаспределению |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКРаспределению, | ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , , Счет = &Счет, , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты | ГДЕ | ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстатокДт = 0) КАК БухгалтерскийЗапрос | ПО ЗначенияСвойствОбъектов.Объект = БухгалтерскийЗапрос.Номенклатура |ГДЕ | ЗначенияСвойствОбъектов.Свойство = &Свойство | И ЗначенияСвойствОбъектов.Значение В(&Значение)"; //Налоговый учет ТекстЗапросаНАЛОГ = "ВЫБРАТЬ | НалоговыйЗапрос.Номенклатура КАК Номенклатура, | НалоговыйЗапрос.СуммаКРаспределению КАК СуммаКРаспределению |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | НалоговыйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКРаспределению, | НалоговыйОстаткиИОбороты.Субконто1 КАК Номенклатура | ИЗ | РегистрБухгалтерии.Налоговый.ОстаткиИОбороты( | &ДатаНач, | &ДатаКон, | , | , | Счет = &Счет, | , | Организация = &Организация | И ВидУчета = &ВидУчета) КАК НалоговыйОстаткиИОбороты | ГДЕ | НалоговыйОстаткиИОбороты.КоличествоКонечныйОстатокДт = 0) КАК НалоговыйЗапрос | ПО ЗначенияСвойствОбъектов.Объект = НалоговыйЗапрос.Номенклатура |ГДЕ | ЗначенияСвойствОбъектов.Свойство = &Свойство | И ЗначенияСвойствОбъектов.Значение В(&Значение)"; // Устанавливаем параметры //Бухгалтерский учет Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач)); Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Свойство", Свойство); Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("43")); СписокЗначений = Новый СписокЗначений; //Список значений, собирается из ТЧ СписокЗначений.ЗагрузитьЗначения(ЗначенияСвойствДляОтбора.ВыгрузитьКолонку("Значение")); Запрос.УстановитьПараметр("Значение", СписокЗначений); тзЧтоРаспределять= Запрос.Выполнить().Выгрузить(); Сообщить("БУ:" + Строка(тзЧтоРаспределять.Итог("СуммаКРаспределению"))); //Налоговый учет Запрос.Текст = ТекстЗапросаНАЛОГ; Запрос.УстановитьПараметр("Счет", ПланыСчетов.Налоговый.НайтиПоКоду("43")); Запрос.УстановитьПараметр("ВидУчета", Перечисления.ВидыУчетаПоПБУ18.НУ); тзЧтоРаспределятьНАЛОГ = Запрос.Выполнить().Выгрузить(); //Определяем номенклотуры с количеством, на который надо выполнять распределение Запрос = Новый Запрос; //Бухгалтерский Учет ТекстЗапроса = "ВЫБРАТЬ | ХозрасчетныйОстатки.Субконто1 КАК Номенклатура, | ХозрасчетныйОстатки.КоличествоОстатокДт КАК Количество, | ХозрасчетныйОстатки.СуммаОстатокДт КАК Сумма |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки( | &ДатаКон, | Счет = &Счет, | , | Организация = &Организация | И Субконто2 = &Склад) КАК ХозрасчетныйОстатки | ПО ЗначенияСвойствОбъектов.Объект = ХозрасчетныйОстатки.Субконто1 |ГДЕ | ЗначенияСвойствОбъектов.Свойство = &Свойство | И ЗначенияСвойствОбъектов.Значение В(&Значение) | И ХозрасчетныйОстатки.КоличествоОстатокДт > 0 | И ХозрасчетныйОстатки.СуммаОстатокДт > 0 | |УПОРЯДОЧИТЬ ПО | Количество УБЫВ"; //Налоговый учет ТекстЗапросаНалог = "ВЫБРАТЬ | НалоговыйОстатки.Субконто1 КАК Номенклатура, | НалоговыйОстатки.КоличествоОстатокДт КАК Количество, | НалоговыйОстатки.СуммаОстатокДт КАК Сумма |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Налоговый.Остатки( | &ДатаКон, | Счет = &Счет, | , | Организация = &Организация | И Субконто2 = &Склад | И ВидУчета = &ВидУчета) КАК НалоговыйОстатки | ПО ЗначенияСвойствОбъектов.Объект = НалоговыйОстатки.Субконто1 |ГДЕ | ЗначенияСвойствОбъектов.Свойство = &Свойство | И ЗначенияСвойствОбъектов.Значение В(&Значение) | И НалоговыйОстатки.КоличествоОстатокДт > 0 | И НалоговыйОстатки.СуммаОстатокДт > 0 | |УПОРЯДОЧИТЬ ПО | Количество УБЫВ"; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ДатаКон", Новый Граница(КонецДня(ДатаКон),ВидГраницы.Включая)); Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("Свойство", Свойство); Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("43")); СписокЗначений = Новый СписокЗначений; //Список значений, собирается из ТЧ СписокЗначений.ЗагрузитьЗначения(ЗначенияСвойствДляРаспределения.ВыгрузитьКолонку("Значение")); Запрос.УстановитьПараметр("Значение", СписокЗначений); тзНаЧтоРаспределять = Запрос.Выполнить().Выгрузить(); //Добавляем коэффициент пропорционалтьности и проставляем его мОбщееКоличество = тзНаЧтоРаспределять.Итог("Количество"); тзНаЧтоРаспределять.Колонки.Добавить("Коэффициент"); Для каждого СтрокаНаЧтоРаспределять Из тзНаЧтоРаспределять Цикл СтрокаНаЧтоРаспределять.Коэффициент = ОКР(СтрокаНаЧтоРаспределять.Количество / мОбщееКоличество,2); КонецЦикла; Сообщить("Суммарный коэффициент БУ:" + Строка(тзНаЧтоРаспределять.Итог("Коэффициент"))); //Налоговый учет Запрос.Текст = ТекстЗапросаНалог; Запрос.УстановитьПараметр("Счет", ПланыСчетов.Налоговый.НайтиПоКоду("43")); Запрос.УстановитьПараметр("ВидУчета", Перечисления.ВидыУчетаПоПБУ18.НУ); тзНаЧтоРаспределятьНалог = Запрос.Выполнить().Выгрузить(); //Добавляем коэффициент пропорционалтьности и проставляем его мОбщееКоличествоНалог = тзНаЧтоРаспределятьНалог.Итог("Количество"); тзНаЧтоРаспределятьНалог.Колонки.Добавить("Коэффициент"); Для каждого СтрокаНаЧтоРаспределятьНалог Из тзНаЧтоРаспределятьНалог Цикл СтрокаНаЧтоРаспределятьНалог.Коэффициент = ОКР(СтрокаНаЧтоРаспределятьНалог.Количество / мОбщееКоличествоНалог,2); КонецЦикла; Сообщить("Суммарный коэффициент НУ:" + Строка(тзНаЧтоРаспределятьНалог.Итог("Коэффициент"))); //Создаем источник данных для формирования ОперациБУХ по регистру Хозрасчетный тзИсточникДанныхБух = Новый ТаблицаЗначений; тзИсточникДанныхБух.Колонки.Добавить("СчетДт"); тзИсточникДанныхБух.Колонки.Добавить("СубконтоДт1"); тзИсточникДанныхБух.Колонки.Добавить("СубконтоДт2"); тзИсточникДанныхБух.Колонки.Добавить("СчетКт"); тзИсточникДанныхБух.Колонки.Добавить("СубконтоКт1"); тзИсточникДанныхБух.Колонки.Добавить("СубконтоКт2"); тзИсточникДанныхБух.Колонки.Добавить("Сумма"); тзИсточникДанныхНУ = тзИсточникДанныхБух.Скопировать(); Сч43Бух = ПланыСчетов.Хозрасчетный.НайтиПоКоду("43"); Сч43Нал = ПланыСчетов.Налоговый.НайтиПоКоду("43"); Для i = 1 По 2 Цикл //1 //Определяем перемменные для дальнейшего использования Если i = 1 тогда //БУ Счет43 = Сч43Бух; тзДляРаспределения = тзЧтоРаспределять; тзПриемникРаспредения = тзНаЧтоРаспределять; тзИсточникДанных = тзИсточникДанныхБух; ИначеЕсли i =2 Тогда //НУ Счет43 = Сч43Нал; тзДляРаспределения = тзЧтоРаспределятьНАЛОГ; тзПриемникРаспредения = тзНаЧтоРаспределятьНалог; тзИсточникДанных = тзИсточникДанныхНУ; КонецЕсли; Для Каждого СтрокаЧтоРаспределять Из тзДляРаспределения Цикл мОсталосьРаспределить = СтрокаЧтоРаспределять.СуммаКРаспределению; Для Каждого СтрокаНаЧтоРаспределять Из тзПриемникРаспредения Цикл НоваяСтрокаИсточника = тзИсточникДанных .Добавить(); НоваяСтрокаИсточника.СчетКт = Счет43; НоваяСтрокаИсточника.СубконтоКт1 = СтрокаЧтоРаспределять.Номенклатура; НоваяСтрокаИсточника.СубконтоКт2 = Склад; НоваяСтрокаИсточника.СчетДт = Счет43; НоваяСтрокаИсточника.СубконтоДт1 = СтрокаНаЧтоРаспределять.Номенклатура; НоваяСтрокаИсточника.СубконтоДт2 = Склад; Если СтрокаЧтоРаспределять.СуммаКРаспределению > 1 Тогда НоваяСтрокаИсточника.Сумма = ОКР(СтрокаЧтоРаспределять.СуммаКРаспределению * СтрокаНаЧтоРаспределять.Коэффициент,2); Иначе //Если исходная сумма меньше единици, то не распределяем ее, а относим сразу на первую номенклатуру НоваяСтрокаИсточника.Сумма = СтрокаЧтоРаспределять.СуммаКРаспределению; Прервать; КонецЕсли; мОсталосьРаспределить = мОсталосьРаспределить - НоваяСтрокаИсточника.Сумма; Если мОсталосьРаспределить < 0 Тогда //наокругляли больше, чем надо НоваяСтрокаИсточника.Сумма = НоваяСтрокаИсточника.Сумма + мОсталосьРаспределить; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; //1 Сообщить("Cформирован источник данных для бухгалтерской справки по регистру бухгалтерского учета :" + Строка(тзИсточникДанныхБух.Итог("Сумма"))); Сообщить("Cформирован источник данных для бухгалтерской справки по регистру налогового учета :" + Строка(тзИсточникДанныхНУ.Итог("Сумма"))); //--------------------------------------------------------- //Создаем ОперациюБух-Хозрасчетный Док = СоздатьОперациюБух_НУ_БУ(тзИсточникДанныхБух,тзИсточникДанныхНУ); Док.ПолучитьФорму().Открыть(); КонецПроцедуры
Функция СоздатьОперациюБух_НУ_БУ(тзИсточникДанныхБух,тзИсточникДанныхНУ) Док = Документы.ОперацияБух.СоздатьДокумент(); Док.Дата = КонецДня(ДатаБухСправки); Док.Организация = Организация; Док.Содержание = "Атоматическое распределение 43 счета"; //Делаем бухгалтерские проводки мСумма = 0; Для каждого СтрокаИсточникаДанных Из тзИсточникДанныхБух Цикл НовПроводка = Док.Движения.Хозрасчетный.Добавить(); НовПроводка.Период = Док.Дата; НовПроводка.СчетДт = СтрокаИсточникаДанных.СчетДт; НовПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = СтрокаИсточникаДанных.СубконтоДт1; НовПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = СтрокаИсточникаДанных.СубконтоДт2; НовПроводка.СчетКт = СтрокаИсточникаДанных.СчетКт; НовПроводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = СтрокаИсточникаДанных.СубконтоКт1; НовПроводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = СтрокаИсточникаДанных.СубконтоКт2; НовПроводка.Сумма = СтрокаИсточникаДанных.Сумма; мСумма = мСумма + НовПроводка.Сумма; НовПроводка.Содержание = "Распределение по 43 счету"; НовПроводка.Организация = Организация; КонецЦикла; Док.СуммаОперации = мСумма;
//--------------------------------------------- //Делаем налоговые проводки Для каждого СтрокаИсточникаДанных Из тзИсточникДанныхНУ Цикл НовПроводка = Док.Движения.Налоговый.Добавить(); НовПроводка.Период = Док.Дата; НовПроводка.СчетДт = СтрокаИсточникаДанных.СчетДт; НовПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = СтрокаИсточникаДанных.СубконтоДт1; НовПроводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = СтрокаИсточникаДанных.СубконтоДт2; НовПроводка.СчетКт = СтрокаИсточникаДанных.СчетКт; НовПроводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура] = СтрокаИсточникаДанных.СубконтоКт1; НовПроводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады] = СтрокаИсточникаДанных.СубконтоКт2; НовПроводка.Сумма = СтрокаИсточникаДанных.Сумма; НовПроводка.ВидУчетаДт = Перечисления.ВидыУчетаПоПБУ18.НУ; НовПроводка.ВидУчетаКт = Перечисления.ВидыУчетаПоПБУ18.НУ; НовПроводка.Содержание = "Распределение по 43 счету"; НовПроводка.Организация = Организация; КонецЦикла; Док.Записать(РежимЗаписиДокумента.Запись); Возврат Док; КонецФункции //Изменяет и перепроводит документы ТребованиеНакладная и отчет производства за смену Процедура ИзменитьИПерепровестиДокументы() перем ДокОбъект; Ответ = Вопрос("Продолжить выполнение операции?", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; СоздатьОперациюБух(); КонецПроцедуры //Пересчитывает для заданной номенклатуры количество на закладке //РаспределениеМатериалов для ОтчетаПроизводстваЗаСмену Процедура КоманднаяПанель1ПерепровестиДокументы(Кнопка) ИзменитьИПерепровестиДокументы();//Изменяем и перепроводим поступление КонецПроцедуры //Формирует значения по умолчанию Процедура СформироватьЗначенияПоУмолчанию() //Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.ГруппаТовара; //ЗначенияСвойствДляОтбора.Очистить(); //НоваяСтрока = ЗначенияСвойствДляОтбора.Добавить(); //НоваяСтрока.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоКоду("000000087"); //НоваяСтрока = ЗначенияСвойствДляОтбора.Добавить(); //НоваяСтрока.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоКоду("000000081"); //СчетУчетаБУ = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01"); КонецПроцедуры Процедура ПриОткрытии() СформироватьЗначенияПоУмолчанию(); КонецПроцедуры Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка) ДиалогФыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогФыбораФайла.Фильтр = "Файл Excel(*.xls)|*.xls"; ДиалогФыбораФайла.Заголовок = "Выбор файла загрузки свойств"; ДиалогФыбораФайла.ПроверятьСуществованиеФайла = Истина; Если ДиалогФыбораФайла.Выбрать() Тогда Элемент.Значение = ДиалогФыбораФайла.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры
|