7.7 Цикл

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем kible, 1 июн 2010.

  1. TopicStarter Overlay
    kible
    Offline

    kible Опытный в 1С

    Регистрация:
    14 апр 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Добрый день!
    Не могу разобраться с циклами. При добавлении двух строк в ТЧ Документа впадает в рекурсию.
    Код:
    Перем ОбщСумма;
    Процедура ОбработкаПроведения()
    ОбщаяСумма=0;
    Спр = СоздатьОбъект("Справочник.СпецификацияНоменклатуры");
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    Спр.ИспользоватьРодителя(СпецификацияИзделия);
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    ОбщКолВо=ОбщКолВо+Спр.Количество*Количество;
    
    Если глПределыБухгалтерскихИтогов(, ДатаДок, 1) = 0 Тогда
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;	
    
    БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");
    
    Если Метаданные.РазделительУчета.Выбран() = 1 Тогда
    БухИтоги.ИспользоватьРазделительУчета(Организация);
    КонецЕсли;	
    
    БухИтоги.ВключатьСубсчета(1); 	
    БухИтоги.ИспользоватьСубконто(ВидыСубконто.Материалы, Спр.Материал, 2);
    БухИтоги.ИспользоватьСубконто(ВидыСубконто.МестаХранения, Склад, 2);
    БухИтоги.ВыполнитьЗапрос(,ТекущийДокумент(),"131",,,,,);
    БухИтоги.ВыбратьСубконто();  
    
    Материал = Спр.Материал;		
    
    Если БухИтоги.ПолучитьСубконто(,,Материал) = 1 Тогда
    Если БухИтоги.ПолучитьСчет(,глПолучитьСчетТМЦ(Материал)) = 1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда			</span>
    ОстатокКоличество 	= БухИтоги.СКД("К");
    ОстатокСумма		= БухИтоги.СКД("С");			
    Если Спр.Количество*Количество > ОстатокКоличество  Тогда
    
    глСообщить(Операция, "Счет " + СокрЛП(глПредставлениеСчетаСтр(глПолучитьСчетТМЦ(Материал)))+ 
    ", место хранения """+СокрЛП(Склад)+""": недостаточно материала """+СокрЛП(Материал)+
    ". Не хватает "+СокрЛП(Спр.Количество*Количество - ОстатокКоличество )+". Проводка не записана!", "!");			    					
    КонецЕсли;
    Иначе //в карточке товара не верно указан счет 
    глСообщить(Операция, "Не верно указан счет учета материала. Остатки для """  + СокрЛП(Материал)+""" на счете " + СокрЛП(глПредставлениеСчетаСтр(глПолучитьСчетТМЦ(Материал))) + " - отсутствуют. Проводка не записана!", "!");	
    КонецЕсли;		
    Иначе	//Если БухИтоги.ПолучитьСубконто(,,Материал) = 1 Тогда
    // по данному ТМЦ вообще нет остатка
    глСообщить(Операция, "Счет " + СокрЛП(глПредставлениеСчетаСтр(глПолучитьСчетТМЦ(Материал)))+ 
    ", место хранения """+СокрЛП(Склад)+""": недостаточно материала """+СокрЛП(Материал)+
    ". Не хватает "+СокрЛП(Спр.Количество*Количество)+". Проводка не записана!", "!");			    					
    КонецЕсли;		   
    
    КоличествоНаСкладе		= 0; // Общий остаток на складе(количество) по выбранной позиции номенклатуры
    СуммаНаСкладе			= 0; // Общий остаток на складе(сумма) по выбранной позиции номенклатуры
    МожноСписатьКоличество	= 0; // Количество, которое можно списать по данной строке, учитывая уже списанное количество в этом документе                            
    МожноСписатьСумму		= 0; // Сумма, которую можно списать по данной строке, учитывая уже списанную сумму в этом документе
    Стр = "";
    
    КоличествоНаСкладе		= ОстатокКоличество;
    СуммаНаСкладе	        = ОстатокСумма;			
    МожноСписатьКоличество 	= Макс(0,КоличествоНаСкладе);
    МожноСписатьСумму 	= Макс(0,СуммаНаСкладе);		
    
    
    Если МожноСписатьКоличество = 0 Тогда
    Продолжить;
    КонецЕсли;     
    
    Если (МожноСписатьКоличество < Количество) или (МожноСписатьКоличество = 0)  <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда			</span>
    Продолжить;
    Иначе
    Если МожноСписатьКоличество = Количество <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда	</span>
    Сумма = МожноСписатьСумму; // Оставшаяся после списания предыдущих позиций сумма
    Иначе
    Сумма = Окр((Спр.Количество*Количество) * (СуммаНаСкладе/КоличествоНаСкладе),2);
    КонецЕсли; 
    КонецЕсли;		
    
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    
    СчетДебета = СчетПоКоду("8112",ПланыСчетов.Основной);
    СчетКредита  = СчетПоКоду("131",ПланыСчетов.Основной);  
    глПроводка(	Операция,
    СчетДебета,	 глСубконто(Подразделение,ВидДеятельности,ВидЗатрат), 
    СчетКредита, глСубконто(Спр.Материал,Склад),Спр.Количество*Количество
    ,Сумма , , , , , Организация);  
    
    ОбщаяСумма=ОбщаяСумма+Сумма;
    Прервать;
    КонецЦикла;
    
    КонецЦикла;  
    
    Счет = СчетПоКоду("131") Тогда 		
    СчетДебета = СчетПоКоду("131",ПланыСчетов.Основной);
    СчетКредита  = СчетПоКоду("8112",ПланыСчетов.Основной);
    глПроводка(	Операция,
    СчетДебета,	 глСубконто(Номенклатура, Склад, ), 
    СчетКредита, глСубконто(Подразделение, ВидДеятельности, ВидЗатрат),Количество,
    ОбщаяСумма , , , , , Организация)
    КонецЦикла;
    
    Операция.Записать();
    
    КонецПроцедуры
    
    
  2. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    А ниче так, что у тебя
    выбратьсторки
    получитьСтроку
    ...
    выбратьсторки
    получитьСтроку
    Конец
    Конец
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Внутни цикла по элементам справочника повторно запускается цикл по строкам документа...

Поделиться этой страницей