Путевые листы (расширение + отчет) для БП 3.0

31.05.23

Задачи пользователя - Адаптация типовых решений

Доработаны штатные путевые листы (расширение). Бухгалтерия предприятия, редакция 3.0 (3.0.98.11).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Путевые листы (расширение) БП 3.0:
.zip 74,65Kb
9
9 Скачать (2 SM) Купить за 2 150 руб.

Доработаны штатные путевые листы  Бухгалтерия предприятия, редакция 3.0 (3.0.98.11) (http://v8.1c.ru/buhv8/)

В документе Путевой лист:

  1. На закладке Топливо добавлено Топливо для заправки в случае, если заправляют разными сортами бензина.
  2. На закладке Маршрут добавлено Расход Факт, заносится значение из реального путевого листа.

В справочнике Транспортные средства добавлена Норма расхода летняя.

Данное расширение отработало 4 месяца в реальных условиях, машин порядка 10.

Отчет для контроля

Сумма в проводке по Кт на списание появится после закрытия месяца. По Дт сумма есть только при оплате наличкой или картой, при оплате топливной картой сумма по Дт формируется поступлением товаров.

Исправлены ошибки 31.05.2023.

1.На совместимость

2.На создание документа Путевой лист

Платформа: 1С:Предприятие 8.3 (8.3.20.2180)

Конфигурация: Бухгалтерия предприятия, редакция 3.0 (3.0.135.16)

См. также

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5645    14    5    

24

Логистика, склад и ТМЦ Адаптация типовых решений Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3911    11    0    

29

Адаптация типовых решений Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Каждый из нас сталкивается с ситуацией, когда какой-нибудь менеджер показывает свой Excel и рассказывает, как он что-то из 1С копирует в него, снабжает пояснениями, выделяет цветом и т.д. и т.п. Заканчивается все просьбой сделать вот чтобы также было в 1С. И оказывается такой человек (почти с гарантией) либо лучшим продажником, либо каким-то важным, за все отвечающим, - на ком все держится.

2 стартмани

22.04.2024    5085    dimanich70    15    

21

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    5467    dimanich70    9    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. German_Tagil 43 21.08.21 13:11 Сейчас в теме
И что совсем не интеоесно?
2. RustIG 1728 21.08.21 22:41 Сейчас в теме
Интересно! Просто выходные , спят все.
3. blindcat2006 92 23.08.21 00:02 Сейчас в теме
Если заголовок поменять (уточнить) - еще интереснее будет.
А так -... может там под катом очередные ВПФ, и зачем они мне...
4. German_Tagil 43 23.08.21 05:22 Сейчас в теме
5. webresurs 224 23.12.21 06:48 Сейчас в теме
- выложите скриншоты уникальности вашего расширения, стандартные формы, так сказать в натуре и в 1с можно посмотреть!
6. webresurs 224 10.01.22 07:08 Сейчас в теме
(5) - видимо не в читался в описание, тут нет дополнительных печатных форм, а только добавлены дополнительные ячейки и расчеты...
7. German_Tagil 43 10.01.22 07:41 Сейчас в теме
(6) Ну да - об этом речь в публикации и была
Доработать чтобы можно было пользоваться
8. Bortkevich 70 24.05.23 07:37 Сейчас в теме
(7) на свежем релизе работает?
9. German_Tagil 43 24.05.23 13:38 Сейчас в теме
(8) Не проверял - если честно
Но организация для которой разрабатывал все еще работает на ней
10. Bortkevich 70 24.05.23 14:48 Сейчас в теме
(9) есть возможность проверить?
На закладке Топливо добавлено Топливо для заправки в случае, если заправляют разными сортами бензина.

Это как то влияет на проводки или просто так в документе выбирается?

Сумма в проводке по Кт на списание появится после закрытия месяца. По Дт сумма есть только при оплате наличкой или картой, при оплате топливной картой сумма по Дт формируется поступлением товаров.


Вот это вообще непонятно про что. Это разве не типовой механизм?
Ни одного скриншота отчета вы не приложили.
Там есть еще какой-то отчет?
11. German_Tagil 43 24.05.23 15:28 Сейчас в теме
(10)
Это как то влияет на проводки или просто так в документе выбирается?


естественно влияет. У Вас разный бензин должен и списываться по разному.

Сумма в проводке по Кт на списание появится после закрытия месяца. По Дт сумма есть только при оплате наличкой или картой, при оплате топливной картой сумма по Дт формируется поступлением товаров.


Это типовой механизм.

Позвонил знакомой она с ней до сих пор работает - нареканий нет.

Для проверить нужны данные - могу проверить на совместимость.
12. Bortkevich 70 29.05.23 10:55 Сейчас в теме
(11)расширение + отчет) там отчет какой-то есть?
13. German_Tagil 43 29.05.23 11:00 Сейчас в теме
14. Bortkevich 70 31.05.23 11:14 Сейчас в теме
Ну в общем рискнул я и скачал. Оно не работает. При создании путевого листа сразу вылетает ошибка "элемент не выбран".
Жалко потраченных денег. Может свяжетесь со своей знакомой да она вам рабочее скинет?
15. German_Tagil 43 31.05.23 13:52 Сейчас в теме
(14) Справочники все заполнили?
16. Bortkevich 70 31.05.23 14:13 Сейчас в теме
(15) &Вместо("РеквизитыТранспортногоСредства")
Функция Расш3_РеквизитыТранспортногоСредства(ТранспортноеСредство, ПоказаниеОдометраДата)

если месяц(ПоказаниеОдометраДата)<=3 или месяц(ПоказаниеОдометраДата)=4 и День(ПоказаниеОдометраДата)<=15
или месяц(ПоказаниеОдометраДата) > 10 тогда
ТранспортноеСредствоОбъект = ТранспортноеСредство.ПолучитьОбъект();
НормаРасхода = ТранспортноеСредствоОбъект.НормаРасхода;

// СвойстваТС = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТранспортноеСредство, "Топливо, НормаРасхода");
иначе
ТранспортноеСредствоОбъект = ТранспортноеСредство.ПолучитьОбъект();
НормаРасхода = ТранспортноеСредствоОбъект.НормаРасходаЛетняя;

Вот эта процедура ТранспортноеСредствоОбъект = ТранспортноеСредство.ПолучитьОбъект();
НормаРасхода = ТранспортноеСредствоОбъект.НормаРасходаЛетняя;
вызывает ошибку при создании нового путевого листа.
17. German_Tagil 43 31.05.23 14:27 Сейчас в теме
18. German_Tagil 43 31.05.23 15:09 Сейчас в теме
куда выслать? - я подправил
19. AleXpnz 07.07.23 14:13 Сейчас в теме
Добрый день, подскажите код закрыт?
20. German_Tagil 43 07.07.23 15:11 Сейчас в теме
(19) Открыт. Недавно правил. Перевыложил
21. user1444721 12.03.24 18:01 Сейчас в теме
Интересуют проводки списания топлива. Условно 26 - 10.03.2
При первой заправке(новый транспорт) через путевой лист в проводках будет доп строка с пустым субконто Номенклатура и количеством 0?
или скажем если израсходовали АИ-95 и в новом путевом указали заправку 92-го
Как то учитывается эта ситуация, если нет как можно поправить? По сути хочется чтобы удалялась строка с нулевым количеством.

По логике мы конечно должны остатки ввести изначально по транспорту(в таком случае точно не будет доп строки в проводках?). Во втором случае по логике у нас должен остаться бензин до заправки.
22. user1444721 15.03.24 07:49 Сейчас в теме
При изменении даты ошибка
Значение не является значением объектного типа (нормарасхода)
{ПутевыеЛисты Документ.ПутевойЛист.Форма.ФормаДокумента.Форма(155)}:объект.нормарасхода=РеквизитыТС.нормарасхода;
{Документ.ПутевойЛист.Форма.ФормаДокумента.Форма(240)}:ДатаПриИзмененииНаСервере();

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]
23. German_Tagil 43 15.03.24 08:37 Сейчас в теме
(22) Поподробнее - что делаете?
25. user1444721 18.03.24 20:53 Сейчас в теме
(23)Дату документа пытаемся изменить вручную
24. German_Tagil 43 15.03.24 12:18 Сейчас в теме
(21) Если Вы собираетесь указывать другой вид топлива - тогда придется копировать транспортное средство и указывать топливо и нормы расхода
26. user1444721 19.03.24 08:10 Сейчас в теме
Можно как то реализовать чтобы показания одометра подставлялись в следующих документах при записи а не при проведении. Бывают случаи когда заводят путевые на несколько дней вперед и показания встают из последнего проведенного документа, это неудобно. Можно за отдельную плату sm
27. German_Tagil 43 19.03.24 10:51 Сейчас в теме
(26) Надите в модуле менеджера справочника Транспортные Средства в расширении

 &Вместо("РеквизитыТранспортногоСредства")
Функция Расш3_РеквизитыТранспортногоСредства(ТранспортноеСредство, ПоказаниеОдометраДата)


и исправьте запрос
Запрос = Новый Запрос(
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ПутевойЛистМаршрут.ПоказаниеОдометраПосле КАК ПоказаниеОдометра
	|ИЗ
	|	Документ.ПутевойЛист КАК ПутевойЛист
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПутевойЛист.Маршрут КАК ПутевойЛистМаршрут
	|		ПО ПутевойЛист.Ссылка = ПутевойЛистМаршрут.Ссылка
	|ГДЕ
	|	ПутевойЛист.Проведен
	|	и ПутевойЛист.ТранспортноеСредство = &ТранспортноеСредство
	|	И ПутевойЛистМаршрут.ДатаОтправления <= &ДатаДокумента
	|
	|УПОРЯДОЧИТЬ ПО
	|	ПоказаниеОдометра УБЫВ");
Показать




на
Запрос = Новый Запрос(
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ПутевойЛистМаршрут.ПоказаниеОдометраПосле КАК ПоказаниеОдометра
	|ИЗ
	|	Документ.ПутевойЛист КАК ПутевойЛист
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПутевойЛист.Маршрут КАК ПутевойЛистМаршрут
	|		ПО ПутевойЛист.Ссылка = ПутевойЛистМаршрут.Ссылка
	|ГДЕ
	|	НЕ ПутевойЛист.ПометкаУдаления
	|	и ПутевойЛист.ТранспортноеСредство = &ТранспортноеСредство
	|	И ПутевойЛистМаршрут.ДатаОтправления <= &ДатаДокумента
	|
	|УПОРЯДОЧИТЬ ПО
	|	ПоказаниеОдометра УБЫВ");
Показать
28. kras_71 74 22.03.24 16:22 Сейчас в теме
Данное расширение решает проблему частично. Может потому, что не правильно было сформулировано техническое задание. И как итог, какое тех.задание, такой же и результат! Это видно по процедуре "СформироватьДвиженияРасходыПоПутевомуЛисту" в расширении. Там идет цикл по таблице "КупленноеТопливо", но при создание проводки используется номенклатура из реквизитов документа, а не из этой таблицы.

Реквизиты = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтруктураТаблиц.Реквизиты[0]);
если реквизиты.топливодлязаправки <> реквизиты.номенклатура тогда
	реквизиты.номенклатура=реквизиты.топливодлязаправки;
конецесли;

Это о чем вообще? Получается, что изначально перед циклом подменяется значение реквизита
и все! Если в таблице "КупленноеТопливо" будет больше одной записи и все с разными видами топлива, то будет применено одно при проводках, ровно так же как и раньше. В оригинале номенклатура берется из справочника "Транспортные средства", А здесь видимо из таблицы "КупленноеТопливо", но одно!!!!! Т.е. нет разделения по маркам топлива в том случае, если было несколько заправок разным топливом в рамках одного путевого листа! И далее списание затрат, точно так же происходит!!! Взлетело и работает до сих пор у заказчика, видимо по тому, что их это устроило! А в случае описанном выше просто делают несколько путевых с разным видом топлива и все. Таким образом, можно было и без этого расширения обойтись. Просто меняя при составлении Путевого листа номенклатуру у траспорта. Хотя, этот реквизит вряд ли периодический и при перепроведении все слетит. Вообщем так то полезная доработка, но слегка не доработанная! Плюс ко всему ни каких комментов в коде, что, от куда, за чем и по чему? И куча за комментированного мусора!!! Есть же определенная этика, давайте ее будем соблюдать .....
29. kras_71 74 22.03.24 16:51 Сейчас в теме
Правильнее было бы так:

Процедура СформироватьДвиженияРасходыПоПутевомуЛисту(ПриобретениеТоплива, ТаблицаРеквизиты, Движения) Экспорт
	
	СтруктураТаблиц = ПодготовитьПараметрыПоступлениеКупленногоТоплива(ПриобретениеТоплива, ТаблицаРеквизиты);
	
	Реквизиты = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтруктураТаблиц.Реквизиты[0]);
	
	Движения.Хозрасчетный.Записывать = Истина;
	
	СчетТопливо         = ПланыСчетов.Хозрасчетный.ТопливоВБаке;
	СчетПодотчетныеЛица = ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами;
	СчетТопливнаяКарта  = ПланыСчетов.Хозрасчетный.ТопливныеКарты;
	
	ТипКассовыйЧек = Перечисления.ВидыДокументовПриобретенияГСМ.КассовыйЧек;
	
	ВидСубконтоНоменклатура = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура;
	ВидСубконтоТранспортныеСредства = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ТранспортныеСредства;
	ВидСубконтоРаботникиОрганизаций = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.РаботникиОрганизаций;
	
	Для Каждого ТекущаяСтрока Из СтруктураТаблиц.КупленноеТопливо Цикл
		
		Проводка = Движения.Хозрасчетный.Добавить();
		
		Проводка.Период      = Реквизиты.Период;
		Проводка.Организация = Реквизиты.Организация;
		Проводка.Сумма       = ТекущаяСтрока.Сумма;
		
		// Дт
		Проводка.СчетДт       = СчетТопливо;
		Проводка.КоличествоДт = ТекущаяСтрока.Количество;
		
		БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт,
			ВидСубконтоНоменклатура, ТекущаяСтрока.ТопливодляЗаправки);
		БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт,
			ВидСубконтоТранспортныеСредства, Реквизиты.ТранспортноеСредство);
		
		// Кт
		Если ТекущаяСтрока.ВидВходящегоДокумента = ТипКассовыйЧек Тогда
			
			Проводка.СчетКт = СчетПодотчетныеЛица;
			
			БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт,
				ВидСубконтоРаботникиОрганизаций, Реквизиты.ФизЛицо);
			
			СодержаниеПроводки = СодержаниеПроводкиПокупкаПоПутевомуЛисту(
				Реквизиты.ТранспортноеСредство,
				ТекущаяСтрока.ВидВходящегоДокумента,
				ТекущаяСтрока.НомерВходящегоДокумента,
				Формат(ТекущаяСтрока.ДатаВходящегоДокумента, "ДЛФ=D"));
			
		Иначе
			
			Проводка.СчетКт = СчетТопливнаяКарта;
			
			БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт,
				ВидСубконтоНоменклатура, ТекущаяСтрока.ТопливодляЗаправки);
			БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт,
				ВидСубконтоТранспортныеСредства, Реквизиты.ТранспортноеСредство);
			
			Проводка.КоличествоКт = ТекущаяСтрока.Количество;
			
			СодержаниеПроводки = СодержаниеПроводкиПокупкаПоПутевомуЛисту(
				Реквизиты.ТранспортноеСредство,
				ТекущаяСтрока.ВидВходящегоДокумента,
				ТекущаяСтрока.НомерВходящегоДокумента);
			
		КонецЕсли;
		
		БухгалтерскийУчет.УстановитьПодразделенияПроводки(Проводка, Реквизиты.Подразделение, Реквизиты.Подразделение);
		Проводка.Содержание = СодержаниеПроводки;
		
	КонецЦикла;
	
	// Списание затрат
	
	И здесь уже описываем списание затрат! 
                 Сначала определяем что за номенклатура топлива оставшееся в баке на начало и списываем его, 
затем в порядке возрастания строк из таблицы "КупленноеТопливо" списываем все остальные номенклатуры.
Оставшееся топливо в баке, спишется потом.	
КонецПроцедуры

Показать
30. kras_71 74 22.03.24 17:03 Сейчас в теме
Представленное автором решение, вполне работоспособно при заправке любым способом, кроме топливных карт. В случае с топливной картой работает, но не вполне корректно!!! Там списание идет не много по другому. Путевой лист списывает количество, а суммы списываются приходным документом от поставщика. И от того как правильно путевой лист сделает списание по количеству и по топливно, зависят потом общие итоги!!!
31. kras_71 74 23.03.24 13:40 Сейчас в теме
Что бы учесть разные виды топлив в рамках одного путевого листа, я думаю правильнее будет так
&Вместо("СформироватьДвиженияРасходыПоПутевомуЛисту")
Процедура Расш3_СформироватьДвиженияРасходыПоПутевомуЛисту(ПриобретениеТоплива, ТаблицаРеквизиты, Движения)
СтруктураТаблиц = ПодготовитьПараметрыПоступлениеКупленногоТоплива(ПриобретениеТоплива, ТаблицаРеквизиты);
	
	Реквизиты = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтруктураТаблиц.Реквизиты[0]);
	
	Движения.Хозрасчетный.Записывать = Истина;
	
	СчетТопливо         = ПланыСчетов.Хозрасчетный.ТопливоВБаке;
	СчетПодотчетныеЛица = ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами;
	СчетТопливнаяКарта  = ПланыСчетов.Хозрасчетный.ТопливныеКарты;
	
	ТипКассовыйЧек = Перечисления.ВидыДокументовПриобретенияГСМ.КассовыйЧек;
	
	ВидСубконтоНоменклатура = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура;
	ВидСубконтоТранспортныеСредства = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ТранспортныеСредства;
	ВидСубконтоРаботникиОрганизаций = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.РаботникиОрганизаций;
	// Делаем проводки по купленному топливу
	Для Каждого ТекущаяСтрока Из СтруктураТаблиц.КупленноеТопливо Цикл
		
		Проводка = Движения.Хозрасчетный.Добавить();
		
		Проводка.Период      = Реквизиты.Период;
		Проводка.Организация = Реквизиты.Организация;
		Проводка.Сумма       = ТекущаяСтрока.Сумма;
		
		// Дт
		Проводка.СчетДт       = СчетТопливо;
		Проводка.КоличествоДт = ТекущаяСтрока.Количество;
		
		БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 
		// изменено, так как номенклатуру берем не из реквизитов, а из таблицы для каждой записи отдельно
		// ВидСубконтоНоменклатура, Реквизиты.Топливо);  
		// на
		ВидСубконтоНоменклатура, ТекущаяСтрока.ТопливодляЗаправки); 
		// конец изменений
		БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт,
		ВидСубконтоТранспортныеСредства, Реквизиты.ТранспортноеСредство);
		
		// Кт
		Если ТекущаяСтрока.ВидВходящегоДокумента = ТипКассовыйЧек Тогда
			
			Проводка.СчетКт = СчетПодотчетныеЛица;
			
			БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт,
				ВидСубконтоРаботникиОрганизаций, Реквизиты.ФизЛицо);
			
			СодержаниеПроводки = СодержаниеПроводкиПокупкаПоПутевомуЛисту(
				Реквизиты.ТранспортноеСредство,
				ТекущаяСтрока.ВидВходящегоДокумента,
				ТекущаяСтрока.НомерВходящегоДокумента,
				Формат(ТекущаяСтрока.ДатаВходящегоДокумента, "ДЛФ=D"));
			
		Иначе
			
			Проводка.СчетКт = СчетТопливнаяКарта;
			
			БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, 
		// изменено, так как номенклатуру берем не из реквизитов, а из таблицы для каждой записи отдельно
		// ВидСубконтоНоменклатура, Реквизиты.Топливо);  
		// на
				ВидСубконтоНоменклатура, ТекущаяСтрока.ТопливодляЗаправки);
		// конец изменений		
			БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт,
				ВидСубконтоТранспортныеСредства, Реквизиты.ТранспортноеСредство);
			
			Проводка.КоличествоКт = ТекущаяСтрока.Количество;
			
			СодержаниеПроводки = СодержаниеПроводкиПокупкаПоПутевомуЛисту(
				Реквизиты.ТранспортноеСредство,
				ТекущаяСтрока.ВидВходящегоДокумента,
				ТекущаяСтрока.НомерВходящегоДокумента);
			
		КонецЕсли;
		
		БухгалтерскийУчет.УстановитьПодразделенияПроводки(Проводка, Реквизиты.Подразделение, Реквизиты.Подразделение);
		Проводка.Содержание = СодержаниеПроводки;
		
	КонецЦикла;  
	
    СчетЗатрат = Реквизиты.СчетЗатрат;
	СвойстваСчетЗатрат = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(СчетЗатрат);
	НужноСписать=Реквизиты.КоличествоРасход;  // топливо, которое израсходовали, далее будем списывать его до нуля по разным номенклатурам топлива
	
  	// Списание затрат  
	
	// Старый алгоритм полностью переписан, если кому интересно, можно его посмотреть в оригинальной версии процедуры
	// Здесь пишем свой алгоритм
	// Алгоритм примерно такой
	// Определяем что за топливо осталось в баке  
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|ХозрасчетныйОстатки.КоличествоОстаток КАК ОстатокНаНачало,
    | ХозрасчетныйОстатки.Субконто2 как Номенклатура
    | ИЗ
	|   СПРАВОЧНИК.ТРАНСПОРТНЫЕсРЕДСТВА КАК ТРАНСПОРТНЫЕсРЕДСТВА
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(НАЧАЛОПЕРИОДА(&периодначало, ДЕНЬ), Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ТопливоВБаке), &Видысубконто, ) КАК ХозрасчетныйОстатки
	|	ПО (ХозрасчетныйОстатки.Субконто1 = ТранспортныеСредства.ССЫЛКА)
    |   ГДЕ
	   	
	| ТранспортныеСредства.ССЫЛКА = &ТранспортныеСредства";
	
	Запрос.УстановитьПараметр("ТранспортныеСредства", Реквизиты.транспортноесредство);
    
	Запрос.УстановитьПараметр("периодначало", Реквизиты.период);	
		ВидыСубконто = Новый Массив;
    ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Транспортныесредства
    );
	ВидыСубконто.Добавить(
        ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура
    );
	Запрос.УстановитьПараметр("ВидыСубконто", ВидыСубконто);	
	ТопливыВбаке = Запрос.Выполнить().Выгрузить();
	
	// По чему именно выгрузить, а не цикл по выборке?
	// Изначально думал, что логически было бы списывать в обратном порядке топливо в баке,
	// но потом понял, что ошибаюсь, нужно писывать по принципу первый пришел, первый ушел. По фиг, что там все топливо в перемешку в баке.

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

Показать
32. kras_71 74 23.03.24 13:58 Сейчас в теме
Процедура записи проводки

Процедура ЗаписатьПроводку(Реквизиты,Движения,СчетЗатрат,СвойстваСчетЗатрат,НоменклатураОстаток,КоличествоОстаток)
	
	СчетТопливо         = ПланыСчетов.Хозрасчетный.ТопливоВБаке;
	СчетПодотчетныеЛица = ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами;
	СчетТопливнаяКарта  = ПланыСчетов.Хозрасчетный.ТопливныеКарты;
	
	ТипКассовыйЧек = Перечисления.ВидыДокументовПриобретенияГСМ.КассовыйЧек;
	
	ВидСубконтоНоменклатура = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура;
	ВидСубконтоТранспортныеСредства = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ТранспортныеСредства;
	ВидСубконтоРаботникиОрганизаций = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.РаботникиОрганизаций;

	Проводка = Движения.Хозрасчетный.Добавить();
	Проводка.Период      = Реквизиты.Период;
	Проводка.Организация = Реквизиты.Организация;
	СодержаниеПроводки   = НСтр("ru='Расход топлива по %1'", ОбщегоНазначения.КодОсновногоЯзыка());
	Проводка.Содержание  = СтрШаблон(СодержаниеПроводки, Реквизиты.ТранспортноеСредство);
	
	// Дт
	Проводка.СчетДт = СчетЗатрат;
	Для НомерСубконто = 1 По 3 Цикл
		Субконто    = СтрШаблон("Субконто%1", НомерСубконто);
		ВидСубконто = СтрШаблон("ВидСубконто%1", НомерСубконто);
		Если СвойстваСчетЗатрат[ВидСубконто] <> Неопределено Тогда
			БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт,
			СвойстваСчетЗатрат[ВидСубконто], Реквизиты[Субконто]);
		КонецЕсли;
	КонецЦикла;
	
	// Кт
	Проводка.КоличествоКт = КоличествоОстаток;
	Проводка.СчетКт       = СчетТопливо;
		БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт,
		ВидСубконтоНоменклатура, НоменклатураОстаток);
	БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт,
		ВидСубконтоТранспортныеСредства, Реквизиты.ТранспортноеСредство);
		БухгалтерскийУчет.УстановитьПодразделенияПроводки(Проводка, Реквизиты.ПодразделениеЗатрат, Реквизиты.Подразделение);
	 
КонецПроцедуры	
	

Показать
33. German_Tagil 43 10.04.24 12:08 Сейчас в теме
(32) в общем поигрался с Вашим предложением - пришлось допилить слегка. Но в целом алгоритм вроде рабочий для топлива. А вот что с маршрутом делать - пока не понял
34. user702718_vnataliam 4 02.05.24 16:23 Сейчас в теме
Добрый день, работает расширение на последней версии БП?
35. German_Tagil 43 03.05.24 16:08 Сейчас в теме
Оставьте свое сообщение