Ошнуров Андрей | Программист | Предприниматель

«РусскийФокс — 1С-подобный язык программирования»

Новый язык 1С-подобный объектно-ориентированный язык программирования РусскийФокс (интерпретатор), FreeWare. Удобен для обучения (Размер платформы 14Мб, инсталляции не требует. Разрабатывается на FoxPro 9) Удобен для системных администраторов: писать сценарии для командной строки. Операционная система WinXP и выше. На данный момент из синтакс-помошника учебной версии 1С реализованы все функции работы со строками, все функции работы со значениями типа Дата, функции преобразования значений (число, строка, дата). Пока отсутствует отладчик, но реализованы операторы ПОПЫТКА, ИСКЛЮЧЕНИЕ, КОНЕЦПОПЫТКИ; В ближайшее время планируется создать объекты для работы с DBF-файлами (с CDX индексами), объект для работы с MySQL-сервером, генерация отчетных форм на основе шаблонов OpenOffice и LibreOffice (либо на MS Excel), создание экранных форм ввода данных, создания меню, объекты типа строка ввода, кнопки, таблица, чекбоксы и т.д.. Особое внимание будет уделено взаимодействию с платформой 1С. Доклад будет посвящен краткому обзору возможностей и демонстрации примеров написания кода.

1. jeniks 22.12.16 14:18 Сейчас в теме
Этот отчет формирует информацию о задолженности только до ноября 2015г. Как только период с декабря 2015г. ошибка типа:
Поле агрегатного объекта не обнаружено (СрокПлатежа)
Бух. итоги на 4 квартал 2016г. установлены.

Функция ПолучитьДокументы(ТекКА,Т,Знач Д1,Знач Д2, СальдоКон=0)

	Таб=СоздатьОбъект("ТаблицаЗначений");
	Таб.НоваяКолонка("Приход","Число",15,2);
	Таб.НоваяКолонка("Расход","Число",15,2);
	Таб.НоваяКолонка("Дата","Дата");
	Таб.НоваяКолонка("Позиция");
	Таб.НоваяКолонка("Документ","Документ");
	Таб.НоваяКолонка("ДатаПогашения","Дата");
                          
	Ит=СоздатьОбъект("БухгалтерскиеИтоги");
	Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты,ТекКА,2,0);
	Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",,,1,"операция","С")=0 Тогда
		Сообщить("Ошибка!");
		Возврат 0;
	КонецЕсли;                           
    
	Если СальдоКон=0 Тогда
		СальдоКон=Ит.СКД("С")-Ит.СКК("С");
		Опл=1;
	Иначе	
		Опл=0;
	КонецЕсли;
	СальдоНач=СальдоКон;
	Если СальдоКон<=0 Тогда
		Возврат 0;
	КонецЕсли;
	
	Ит.ВыбратьПериоды(); //,,,1
    Пока Ит.ПолучитьПериод()=1 Цикл
        Таб.НоваяСтрока();
		Контрагент=ТекКА;
		Таб.Приход=Ит.ДО("С");
		Таб.Расход=Ит.КО("С");       
		Таб.Документ=Ит.Операция.Документ;
		
	
Таб.Дата=Ит.Операция.Документ.ДатаДок;
		Таб.Позиция=Ит.Операция.Документ.ПолучитьПозицию();
		//Если Ит.Операция.Документ.Вид()="РасходнаяНакладная" Тогда
		Если ПустоеЗначение(Ит.Операция.Документ.СрокПлатежа) = 1 Тогда
Таб.ДатаПогашения=Ит.Операция.Документ.ДатаДок+СрокОплаты;
		Иначе
			
		Таб.ДатаПогашения=Ит.Операция.Документ.СрокПлатежа;
		КОнецЕсли;	
		//КонецЕсли;
	КонецЦикла;
    
	ДопТаб=СоздатьОбъект("ТаблицаЗначений");
	ДопТаб.НоваяКолонка("Долг","Число",15,2);
	ДопТаб.НоваяКолонка("Дата","Дата");
	ДопТаб.НоваяКолонка("Документ","Документ");
	ДопТаб.НоваяКолонка("ДатаПогашения","Дата");
	Если Таб.КоличествоСтрок()=0 Тогда
		Если СальдоКон>0 Тогда
			ПолучитьДокументы(ТекКА,ДопТаб,Д1-31,Д1-1,СальдоКон);
		Иначе	
			Возврат СальдоНач;
		КонецЕсли;
	Иначе	
		Ном=-1; 
		Таб.Сортировать("-Позиция");
		Таб.ВыбратьСтроки();
		Пока (Таб.ПолучитьСтроку()=1)и(СальдоКон>0) Цикл
			Если Таб.Приход>0 Тогда
				ДопТаб.НоваяСтрока();
				ДопТаб.Документ=Таб.Документ;
				ДопТаб.Дата=Таб.Дата;
				ДопТаб.ДатаПогашения=Таб.ДатаПогашения;
				ДопТаб.Долг=Таб.Приход;
			КонецЕсли;	
			СальдоКон=СальдоКон-Таб.Приход;
		КонецЦикла;
		Если СальдоКон>0 Тогда
			ПолучитьДокументы(ТекКА,ДопТаб,Д1-31,Д1-1,СальдоКон);
		КонецЕсли;
	КонецЕсли;
        
	Оплата=СальдоНач;
	Если Опл=1 Тогда
		ДопТаб.Сортировать("-Дата");
		ДопТаб.ВыбратьСтроки();
		Пока ДопТаб.ПолучитьСтроку()=1 Цикл
			Сум=Мин(ДопТаб.Долг,Оплата);
			Оплата=Оплата-Сум;
			ДопТаб.Долг=Сум;
		КонецЦикла;
	КонецЕсли;	
	
	ДопТаб.Сортировать("+Дата");
	ДопТаб.ВыбратьСтроки();
	Пока ДопТаб.ПолучитьСтроку()=1 Цикл
		Т.НоваяСтрока();
		Т.Документ=ДопТаб.Документ;
		Т.Дата=ДопТаб.Дата;
		Т.ДатаПогашения=ДопТаб.ДатаПогашения;
		Т.Долг=ДопТаб.Долг;
	КонецЦикла;

	Возврат ?(Опл=1,СальдоНач,Оплата);
	
КонецФункции	

//*******************************************
Процедура Сформировать()                
	КА=СоздатьОбъект("Справочник.Контрагенты"); 
	Сп=СоздатьОбъект("СписокЗначений");
	Если ВыбКА.Выбран()=1 Тогда
		Если ВыбКА.ЭтоГруппа()=1 Тогда
			КА.ВыбратьЭлементы(0);
			Пока КА.ПолучитьЭлемент()=1 Цикл
				Если КА.ЭтоГруппа()=1 Тогда
					Продолжить;
				КонецЕсли;
				Если КА.ПринадлежитГруппе(ВыбКА)=0 Тогда
					Продолжить;
				КонецЕсли;     
				Сп.ДобавитьЗначение(КА.ТекущийЭлемент());
			КонецЦикла;
		Иначе
			Сп.ДобавитьЗначение(ВыбКА);
		КонецЕсли;	
	Иначе	
		КА.ВыбратьЭлементы(0);
		Пока КА.ПолучитьЭлемент()=1 Цикл
			Если КА.ЭтоГруппа()=1 Тогда
				Продолжить;
			КонецЕсли;
			Сп.ДобавитьЗначение(КА.ТекущийЭлемент());
		КонецЦикла;
	КонецЕсли;
	Сп.Сортировать();
	ДопТаб=СоздатьОбъект("ТаблицаЗначений");
	ДопТаб.НоваяКолонка("Долг","Число",15,2);
	ДопТаб.НоваяКолонка("Дата","Дата");
	ДопТаб.НоваяКолонка("Документ","Документ");
	ДопТаб.НоваяКолонка("ДатаПогашения","Дата");

	Т=СоздатьОбъект("Таблица");
	Т.ИсходнаяТаблица("Таблица");
	Таблица.Очистить();
	_Секц=Т.ПолучитьСекцию("Шапка");
	Таблица.ВывестиСекцию(_Секц);
	    
	ОбщСуммаДолга=0;
	ОбщСуммаПросрДолга=0;
	Для К=1 По Сп.РазмерСписка() Цикл 
		Стр="";    
		Контрагент=Сп.ПолучитьЗначение(К,Стр);
		Д1=Дата(ДатаРасч-30);
		Д2=ДатаРасч;  
		ДопТаб.УдалитьСтроки();
		СуммаДолга=ПолучитьДокументы(Контрагент,ДопТаб,Д1,Д2);
		Если СуммаДолга<=0 Тогда
			Продолжить;
		КонецЕсли;
		
		ОбщСуммаДолга=ОбщСуммаДолга+СуммаДолга; 
		
		_Секц=Т.ПолучитьСекцию("Контрагент");
		Таблица.ВывестиСекцию(_Секц);
		//ДопТаб.Сортировать("+Дата");
		ДопТаб.ВыбратьСтроки();
		Пока ДопТаб.ПолучитьСтроку()=1 Цикл
			Если ДопТаб.ДатаПогашения<ДатаРасч Тогда
				ОбщСуммаПросрДолга=ОбщСуммаПросрДолга+ДопТаб.Долг;
				_Секц=Т.ПолучитьСекцию("Документ2");
			Иначе	
				_Секц=Т.ПолучитьСекцию("Документ1");
			КонецЕсли;
			Таблица.ВывестиСекцию(_Секц);
		КонецЦикла;
	КонецЦикла;                  
	_Секц=Т.ПолучитьСекцию("Подвал");
	Таблица.ВывестиСекцию(_Секц);
	Таблица.Показать(0);
КонецПроцедуры  


Процедура ПриОткрытии()
	Таблица.Опции(0,0,2,0,"ДолгиПоКА1","ДолгиПоКА2");
    Таблица.ТолькоПросмотр(1); 
	ДатаРасч=РабочаяДата();
	СрокОплаты=30;

		
КонецПроцедуры //ПриОткрытии


Показать
Найденные решения
10. jeniks 26.01.17 10:17 Сейчас в теме
Разобрался, Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",,,1,"операция","С")=0 Тогда
Операция была, а уже Проводка. :)
Остальные ответы
Сортировка: Древо
2. antz 22.12.16 14:29 Сейчас в теме
Значит, в декабре 15 года проводки делались документом, у которого нет реквизита СрокПлатежа.
3. jeniks 22.12.16 14:40 Сейчас в теме
Вот именно что учет не менялся. Как проверить можно?
4. antz 22.12.16 14:46 Сейчас в теме
Отладчиком. Как вариант - обернуть в попытку и посмотреть на каком документе спотыкается.
5. jeniks 22.12.16 15:18 Сейчас в теме
Разобрался с именем документа.
Вопрос в другом: определяю дату документа:
Функция ПолучитьДокументы(ТекКА,Т,Знач Д1,Знач Д2, СальдоКон=0)

хочу получить проводки:
Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",, 1,, "С")=0 Тогда
Ошибка:
Неверно задана периодичность запроса!
Хотя отладчиком: Д1-22.11.16 Д2-22.12.16.
9. YNik 22.12.16 20:35 Сейчас в теме
(5)
Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",, 1,, "С")=0 Тогда

пропущена запятая, т.е "С" попала а периодичность:
Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",,,1,, "С")=0 Тогда 
6. jeniks 22.12.16 15:32 Сейчас в теме
Бух итоги рассчитал на 1 кв 2017. и ошибка:
Неправильно задан период!
7. Frogger1971 22.12.16 15:41 Сейчас в теме
Таб.НоваяКолонка("Дата","Дата");


почитай, что в 1С является зарезервированными словами, тогда и, смотри, отчет нормально заработает
8. Denis_CFO 9 22.12.16 20:03 Сейчас в теме
(7) а почему он раньше работал? слова не резервировались? я с 7.7 не работал просто никогда.
10. jeniks 26.01.17 10:17 Сейчас в теме
Разобрался, Если Ит.ВыполнитьЗапрос(Д1,Д2,"62.0",,,1,"операция","С")=0 Тогда
Операция была, а уже Проводка. :)
Оставьте свое сообщение
Все разделы

Вакансии


Программист 1С
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Преподаватель 1С
Санкт-Петербург
Полный день

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата от 80 000 руб. до 150 000 руб.
Полный день