В нете решения не нашел, делаю свое. Форма с 3 полями "На дату", "Организация", "На склад".
Задача тривиальная, но вот заставило задумать по работе с установкой субконто и работа с партиями.
Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстатки.Счет, | ХозрасчетныйОстатки.Субконто1, | ХозрасчетныйОстатки.Субконто2, | ХозрасчетныйОстатки.Субконто3, | ХозрасчетныйОстатки.Организация, | ХозрасчетныйОстатки.Валюта, | ХозрасчетныйОстатки.НалоговоеНазначение, | ХозрасчетныйОстатки.КоличествоОстаток КАК Количество, | ХозрасчетныйОстатки.СуммаОстаток КАК Сумма, | ХозрасчетныйОстатки.ВалютнаяСуммаОстаток КАК ВалютнаяСумма, | ХозрасчетныйОстатки.СуммаНУОстаток КАК СуммаНУ |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки( | &НаДату, | , | , | Организация = &Организация | И (ТИПЗНАЧЕНИЯ(Субконто1) = ТИП(Справочник.Склады) | ИЛИ ТИПЗНАЧЕНИЯ(Субконто2) = ТИП(Справочник.Склады) | ИЛИ ТИПЗНАЧЕНИЯ(Субконто3) = ТИП(Справочник.Склады))) КАК ХозрасчетныйОстатки"; Запрос.УстановитьПараметр("НаДату",НачалоДня(НаДату)); Запрос.УстановитьПараметр("Организация",Организация); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Операция = Документы.ОперацияБух.СоздатьДокумент(); Операция.УстановитьНовыйНомер(); Операция.Дата = НачалоДня(НаДату)-1; Операция.Организация = Организация; Операция.Содержание = "Корректировка остатков бух"; Операция.Записать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл НоваяЗапись = Операция.Движения.Хозрасчетный.Добавить(); НоваяЗапись.Активность = Истина; НоваяЗапись.Регистратор = Операция.Ссылка; НоваяЗапись.ВалютаДт = ВыборкаДетальныеЗаписи.Валюта; НоваяЗапись.ВалютаКт = ВыборкаДетальныеЗаписи.Валюта; НоваяЗапись.ВалютнаяСуммаДт = ВыборкаДетальныеЗаписи.ВалютнаяСумма; НоваяЗапись.ВалютнаяСуммаКт = ВыборкаДетальныеЗаписи.ВалютнаяСумма; НоваяЗапись.КоличествоДт = ВыборкаДетальныеЗаписи.Количество; НоваяЗапись.КоличествоКт = ВыборкаДетальныеЗаписи.Количество; НоваяЗапись.НалоговоеНазначениеДт = ВыборкаДетальныеЗаписи.НалоговоеНазначение; НоваяЗапись.НалоговоеНазначениеКт = ВыборкаДетальныеЗаписи.НалоговоеНазначение; НоваяЗапись.Организация = Организация; НоваяЗапись.Сумма = ВыборкаДетальныеЗаписи.Сумма; НоваяЗапись.СуммаНУДт = ВыборкаДетальныеЗаписи.СуммаНУ; НоваяЗапись.СуммаНУКт = ВыборкаДетальныеЗаписи.СуммаНУ; НоваяЗапись.СчетДт = ВыборкаДетальныеЗаписи.Счет; НоваяЗапись.СчетКт = ВыборкаДетальныеЗаписи.Счет; УстановитьСубконтоКт(НоваяЗапись,ВыборкаДетальныеЗаписи.Субконто1); УстановитьСубконтоКт(НоваяЗапись,ВыборкаДетальныеЗаписи.Субконто2); УстановитьСубконтоКт(НоваяЗапись,ВыборкаДетальныеЗаписи.Субконто3); Если ТипЗнч(ВыборкаДетальныеЗаписи.Субконто1) = Тип("СправочникСсылка.Склады") тогда УстановитьСубконтоДт(НоваяЗапись,Склад); Иначе УстановитьСубконтоДт(НоваяЗапись,ВыборкаДетальныеЗаписи.Субконто1); КонецЕсли; Если ТипЗнч(ВыборкаДетальныеЗаписи.Субконто2) = Тип("СправочникСсылка.Склады") тогда УстановитьСубконтоДт(НоваяЗапись,Склад); Иначе УстановитьСубконтоДт(НоваяЗапись,ВыборкаДетальныеЗаписи.Субконто2); КонецЕсли; Если ТипЗнч(ВыборкаДетальныеЗаписи.Субконто3) = Тип("СправочникСсылка.Склады") тогда УстановитьСубконтоДт(НоваяЗапись,Склад); Иначе УстановитьСубконтоДт(НоваяЗапись,ВыборкаДетальныеЗаписи.Субконто3); КонецЕсли; КонецЦикла; //Операция.записать(); Операция.ПолучитьФорму("ФормаДокумента").Открыть(); КонецПроцедуры Функция УстановитьСубконтоДт(Проводка,ЗначениеСубконто) Для Каждого ВидСубконто Из Проводка.СчетДт.ВидыСубконто Цикл Если ВидСубконто.ВидСубконто.ТипЗначения.СодержитТип(ТипЗнч(ЗначениеСубконто)) тогда Проводка.СубконтоДт[ВидСубконто.ВидСубконто.Ссылка] = ЗначениеСубконто; КонецЕсли; КонецЦикла; КонецФУнкции Функция УстановитьСубконтоКт(Проводка,ЗначениеСубконто) Для Каждого ВидСубконто Из Проводка.СчетКт.ВидыСубконто Цикл //Если Строка(ТипЗнч(ЗначениеСубконто)) = Строка(ВидСубконто.ВидСубконто.ТипЗначения) Тогда Если ВидСубконто.ВидСубконто.ТипЗначения.СодержитТип(ТипЗнч(ЗначениеСубконто)) тогда Проводка.СубконтоКт[ВидСубконто.ВидСубконто.Ссылка] = ЗначениеСубконто; КонецЕсли; КонецЦикла; КонецФУнкции Процедура ПриОткрытии() //НаДату = НачалоМесяца(ТекущаяДата()); НаДату = Дата(2015,07,01); Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад",Истина); КонецПроцедуры
No comments:
Post a Comment