Thursday, August 6, 2015

Перенос остатков на склад после включения в бухгалтерии "Ввести складской учет"

В общем тривиальная задача, есть 1С Бухгалтерия 8.2 необходимо перебросить остатки на счетах после включения "Ввести складской учет".
В нете решения не нашел, делаю свое. Форма с 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