Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 20:41

Заполнить Номенклатурные Группы

Автор elwis91, 23 авг 2013, 08:17

0 Пользователей и 1 гость просматривают эту тему.

elwis91

Помогите написать процедуру инициализировать для этой процедуры. нужно чтобы получилась внешняя обработка:
Процедура ЗаполнитьНоменклатурныеГруппы()
    ТаблицаСчетов = ОтражениеВУчете.Выгрузить();
   СтруктураОтбораНов = Новый Структура("СчетДт", планысчетов.Хозрасчетный.РезервыПредстоящихРасходов);
         СтруктураОтбораНов.Вставить("СчетКт", планысчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда);
         СтруктураОтбораНов.Вставить("СчетКтНУ", планысчетов.Налоговый.РасчетыСПерсоналомПоОплатеТруда);
         ПодходящиеСтрокиНов = ТаблицаСчетов.НайтиСтроки(СтруктураОтбораНов);
         Если НЕ ПодходящиеСтрокиНов.Количество()=0 Тогда
            Для Каждого ОчереднаяСтрока Из ПодходящиеСтрокиНов Цикл
               ОчереднаяСтрока.СубконтоКт1 = NULL;
               ОчереднаяСтрока.СубконтоКтНУ1 = NULL;
            КонецЦикла;
         КонецЕсли;
   ТаблицаСчетов.Свернуть("СчетДт,СубконтоДт1,СубконтоДт2,СубконтоДт3,СчетКт,СубконтоКт1,СубконтоКт2,СубконтоКт3,СчетДтНУ,СубконтоДтНУ1,СубконтоДтНУ2,СубконтоДтНУ3,СчетКтНУ,СубконтоКтНУ1,СубконтоКтНУ2,СубконтоКтНУ3","СуммаНУ,Сумма");
   ОтражениеВУчете.Очистить();
   ОтражениеВУчете.Загрузить(ТаблицаСчетов);

   ТаблицаСчетов = ОтражениеВУчете.Выгрузить();
   таблицаСчетов.Свернуть("СчетДт,СубконтоДт1,СчетДтНУ,СубконтоДтНУ1");
   Для каждого ТекущаяСтрокаСчета Из ТаблицаСчетов Цикл
      
      Если ТекущаяСтрокаСчета.СчетДт <> ПланыСчетов.Хозрасчетный.ОсновноеПроизводствоНеОблагаемоеЕНВД И ТекущаяСтрокаСчета.СчетДтНУ <> ПланыСчетов.Налоговый.ПрямыеРасходыОсновногоПроизводства  Тогда
         Продолжить;
      Иначе
         
         ЗапросРаспределения = Новый Запрос();
         
         ЗапросРаспределения.Текст = "ВЫБРАТЬ
         |   СУММА(ВЫБОР КОГДА яяУправлениеЗаказамиТрудозатраты.СуммаИзм = 0 ТОГДА яяУправлениеЗаказамиТрудозатраты.Сумма ИНАЧЕ яяУправлениеЗаказамиТрудозатраты.СуммаИзм КОНЕЦ) КАК Сумма,
         |   яяУправлениеЗаказамиТрудозатраты.НоменклатурнаяГруппа
         |ИЗ
         |   РегистрСведений.яяУправлениеЗаказамиТрудозатраты КАК яяУправлениеЗаказамиТрудозатраты
         |ГДЕ
         |   яяУправлениеЗаказамиТрудозатраты.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
         |   И яяУправлениеЗаказамиТрудозатраты.ГруппаПодразделенияИсполнителя В ИЕРАРХИИ (&Подразделение)
         |   И НЕ (яяУправлениеЗаказамиТрудозатраты.НеДляБухгалтерии)         
         |
         |СГРУППИРОВАТЬ ПО
         |   яяУправлениеЗаказамиТрудозатраты.НоменклатурнаяГруппа";
         ВыборкаПодр = РегистрыСведений.СоответствиеПодразделенийИПодразделенийОрганизаций.Выбрать(Новый Структура("ПодразделениеОрганизации",?(ТекущаяСтрокаСчета.СчетДт <> ПланыСчетов.Хозрасчетный.ОсновноеПроизводствоНеОблагаемоеЕНВД,ТекущаяСтрокаСчета.СубконтоДтНУ1,ТекущаяСтрокаСчета.СубконтоДт1)));
         //ыборкаПодр = РегистрыСведений.СоответствиеПодразделенийИПодразделенийОрганизаций.Выбрать(Новый Структура("ПодразделениеОрганизации",?(ТекущаяСтрокаСчета.СчетДт <> ПланыСчетов.Хозрасчетный.ОсновноеПроизводствоНеОблагаемоеЕНВД,ТекущаяСтрокаСчета.СубконтоДтН,ТекущаяСтрокаСчета.СубконтоДт1)));
         Если ВыборкаПодр.Следующий() Тогда
            ЗапросРаспределения.УстановитьПараметр("Подразделение",ВыборкаПодр.Подразделение);
         Иначе
            ОбщегоНазначения.Сообщение("Не найдено соответствующее подразделение упр учета для " + ТекущаяСтрокаСчета.СубконтоДт1);
            Продолжить;
         КонецЕсли;
         ЗапросРаспределения.УстановитьПараметр("ДатаНачала",НачалоМесяца(ПериодРегистрации));
         ЗапросРаспределения.УстановитьПараметр("ДатаОкончания",КонецМесяца(ПериодРегистрации));
         Распределение = ЗапросРаспределения.Выполнить().Выгрузить();
         КоличествоЗатрат = Распределение.Итог("Сумма");
         Если КоличествоЗатрат = 0 Тогда
            ОбщегоНазначения.Сообщение("Нет базы для распределения по " + ТекущаяСтрокаСчета.СубконтоДт1);
            Продолжить;
         КонецЕсли;
         
         
         СтруктураОтбора = Новый Структура();
         
         Если ТекущаяСтрокаСчета.СчетДт = ПланыСчетов.Хозрасчетный.ПустаяСсылка() Тогда
            СтруктураОтбора.Вставить("СчетДт", ПланыСчетов.Хозрасчетный.ПустаяСсылка());
            СтруктураОтбора.Вставить("СубконтоДт1", Неопределено);
            СтруктураОтбора.Вставить("СчетДтНУ",ТекущаяСтрокаСчета.СчетДтНУ);
            СтруктураОтбора.Вставить("СубконтоДтНУ1",ТекущаяСтрокаСчета.СубконтоДтНУ1);
            //СтруктураОтбора.Вставить("СубконтоДт2",Справочники.НоменклатурныеГруппы.ПустаяСсылка());
         Иначе
            СтруктураОтбора.Вставить("СчетДт",ТекущаяСтрокаСчета.СчетДт);
            СтруктураОтбора.Вставить("СубконтоДт1",ТекущаяСтрокаСчета.СубконтоДт1);
            СтруктураОтбора.Вставить("СчетДтНУ",ТекущаяСтрокаСчета.СчетДтНУ);
            СтруктураОтбора.Вставить("СубконтоДтНУ1",ТекущаяСтрокаСчета.СубконтоДтНУ1);
            //СтруктураОтбора.Вставить("СубконтоДт2",Справочники.НоменклатурныеГруппы.ПустаяСсылка());
         КонецЕсли;
         
         
         ТаблицаКДобавлению = ОтражениеВУчете.Выгрузить(Новый Массив);
         МассивСтрок = ОтражениеВУчете.НайтиСтроки(СтруктураОтбора);
         
         КоличествоНайденных = МассивСтрок.Количество();
         К=0;
         
         КоличествоДобавляемых = Распределение.Количество();
         
         
         Пока К<КоличествоНайденных Цикл
            
            Строка = МассивСтрок.Получить(К);
            
            СуммаПоСтроке = Строка.Сумма;
            СуммаКДобавлению =0;
            Н = 0;
            Пока Н < КоличествоДобавляемых Цикл
               ТекущееРаспределение  =  Распределение.Получить(Н) ;
               
               СтрокаКДобавлению =  ТаблицаКДобавлению.Добавить();
               ЗаполнитьЗначенияСвойств(СтрокаКДобавлению,Строка);
               Если ТекущаяСтрокаСчета.СчетДт = ПланыСчетов.Хозрасчетный.ОсновноеПроизводствоНеОблагаемоеЕНВД Тогда
                  
                  СтрокаКДобавлению.СубконтоДт2 = ТекущееРаспределение.НоменклатурнаяГруппа;
               КонецЕсли;
               Если ТекущаяСтрокаСчета.СчетДтНУ = ПланыСчетов.Налоговый.ПрямыеРасходыОсновногоПроизводства Тогда
                  СтрокаКДобавлению.СубконтоДтНУ2 = ТекущееРаспределение.НоменклатурнаяГруппа;
               КонецЕсли;
               
               
               
               Если  Н < КоличествоДобавляемых-1 Тогда
                  
                  
                  СтрокаКДобавлению.Сумма = Строка.Сумма*ТекущееРаспределение.Сумма/КоличествоЗатрат;
                  
                  СуммаКДобавлению = СуммаКДобавлению +СтрокаКДобавлению.Сумма;
               Иначе
                  СтрокаКДобавлению.Сумма = СуммаПоСтроке - СуммаКДобавлению;
                  
               КонецЕсли;
               
               
               Н = Н+1;
               
            КонецЦикла;   
            К = К+1;
         КонецЦикла;
         
         К1 = КоличествоНайденных-1;
         Пока К1 >= 0 Цикл
            
            
            ОтражениеВУчете.Удалить(МассивСтрок.Получить(К1));
            
            К1 = К1-1;
         КонецЦикла;
         СчетчикСтрок = 0;
         ///////////////////
         СтруктураОтбораНов = Новый Структура("СчетДт", планысчетов.Хозрасчетный.ОсновноеПроизводствоНеОблагаемоеЕНВД);
         СтруктураОтбораНов.Вставить("СчетКт", планысчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда);
         ПодходящиеСтрокиНов = ТаблицаКДобавлению.НайтиСтроки(СтруктураОтбораНов);
         Если НЕ ПодходящиеСтрокиНов.Количество()=0 Тогда
            Для Каждого ОчереднаяСтрока Из ПодходящиеСтрокиНов Цикл
               ОчереднаяСтрока.СубконтоКт1 = NULL;
               ОчереднаяСтрока.СубконтоКтНУ1 = NULL;
            КонецЦикла;
         КонецЕсли;
         ТаблицаКДобавлению.Свернуть("СчетДт,СубконтоДт1,СубконтоДт2,СубконтоДт3,СчетКт,СубконтоКт1,СубконтоКт2,СубконтоКт3,СчетДтНУ,СубконтоДтНУ1,СубконтоДтНУ2,СубконтоДтНУ3,СчетКтНУ,СубконтоКтНУ1,СубконтоКтНУ2,СубконтоКтНУ3","СуммаНУ,Сумма");
         //   /////////////
         Если ТаблицаКДобавлению.Количество()>0 Тогда   
            НовыйДокОтражения = Документы.ОтражениеЗарплатыВРеглУчете.СоздатьДокумент();
            НовыйДокОтражения.Дата = Дата;
            НовыйДокОтражения.Организация = Организация;
            НовыйДокОтражения.ПериодРегистрации  =ПериодРегистрации;
            //НовыйДокОтражения.Комментарий = "20 счет " + ТекущаяСтрокаСчета.СубконтоДт1;
            Если ЗначениеЗаполнено(ТекущаяСтрокаСчета.СубконтоДт1) Тогда
               НовыйДокОтражения.Комментарий = "20 счет " + ТекущаяСтрокаСчета.СубконтоДт1;
            Иначе
               НовыйДокОтражения.Комментарий = "20 счет " + ТекущаяСтрокаСчета.СубконтоДтНУ1 + " НУ";
            КонецЕсли;   
            НовыйДокОтражения.Записать();
         КонецЕсли;
         //////////////////////////////////////
         Для Каждого СтрокаДобавление Из  ТаблицаКДобавлению Цикл
            СтрокаДобавлена = НовыйДокОтражения.ОтражениеВУчете.Добавить();
            ЗаполнитьЗначенияСвойств(СтрокаДобавлена,СтрокаДобавление);
            
            СчетчикСтрок = СчетчикСтрок + 1;
            Если СчетчикСтрок > 20000 Тогда
               СчетчикСтрок = 0;
               НовыйДокОтражения.Записать();
               НовыйДокОтражения = Документы.ОтражениеЗарплатыВРеглУчете.СоздатьДокумент();
               НовыйДокОтражения.Дата = Дата;
               НовыйДокОтражения.Организация = Организация;
               НовыйДокОтражения.ПериодРегистрации  =ПериодРегистрации;
               НовыйДокОтражения.Комментарий = "20 счет " + ТекущаяСтрокаСчета.СубконтоДт1;
               Если ЗначениеЗаполнено(ТекущаяСтрокаСчета.СубконтоДт1) Тогда
                  НовыйДокОтражения.Комментарий = "20 счет " + ТекущаяСтрокаСчета.СубконтоДт1;
               Иначе
                  НовыйДокОтражения.Комментарий = "20 счет " + ТекущаяСтрокаСчета.СубконтоДтНУ1 + " НУ";
               КонецЕсли;
               НовыйДокОтражения.Записать();
            КонецЕсли;
            
            
         КонецЦикла;   
         
         НовыйДокОтражения.Записать();
         
      КонецЕсли;
   КонецЦикла;   
   
КонецПроцедуры

mixqn

вы бы лучше вместо выкладывания этого полотна кода нормально задачу описали.
я так и не понял, в чем конкретно проблема то?

elwis91

в документе отражения зарплаты в регл учете, на форме документа есть кнопка заполнить номенклатурные группы.мне нужно, чтобы я сделал эту кнопку как внешнюю обработку.

mixqn

ну то есть вы хотите, чтобы кто-то вам готовый результат выдал или как?
не понимаю, конкретно что не получается?
Добавлено: 23 авг 2013, 10:07


В целом последовательность действий может быть примерно такой:
1.   Создать новую внешнюю обработку, в ней поле ввода для указания документа, в процедуру - обработчик события «Нажатие» кнопки «Выполнить» (основное действие формы) вставить вызов нужной вам процедуры, добавив в нее параметр СсылкаНаДокумент, который будет передавать ссылку на документ.
2.   Текст процедуры полностью скопировать, внутри получить объект по ссылке и при обращении к реквизитам и табличным частям добавлять объект через точку.
3.   Если внутри процедуры вызываются другие процедуры модуля, их можно скопировать в обработку.
Возможно, я что-то забыл или упустил из виду.

А вообще, надо просто начать реализовывать вашу задумку и если будут конкретные вопросы – обращаться на форум.

elwis91

спасибо большое.буду пробывать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск