Проблемы учёта по счёту ГТД в Бухгалтерии Предприятия 3.0

18.01.16

Разработка - Механизмы типовых конфигураций

После перехода с БП 2.0 на БП 3.0 я столкнулся с весьма неприятной проблемой. Программа перестала сообщать о незаполненных номерах ГТД в Реализации товаров и услуг. Проводка просто не формировалась по счёту ГТД без какого-либо сообщения. О методике решения я расскажу в этой публикации.

Задав вопросы на форумах и не получив ни одного ответа, опросил бухгалтеров, и была поставлена следующая задача. 

1. При проведении отображать информационное сообщение о том, что не заполнен номер ГТД, хотя должен.

2. При проведении отображать информационное сообщение о том, что не хватает остатка по текущему номеру ГТД.

Разумеется, можно использовать  //infostart.ru/public/140232/ , но это спасёт, если не менять документы задним числом.

При перепроведении документов хотелось бы видеть такие ошибки.


Я открыл код БП 2.0, и вот что получилось.

1. Для БП 3.0 создаём общий модуль (на сервере).

Листинг:

Процедура ПроведениеДокументаСписанияПоСчетуГТД(Документ, ТаблицаПоТоварам, СодержаниеПроводки = "Списаны МПЗ") Экспорт
	
	ТоварыПоНомерамГТД = Новый ТаблицаЗначений;
	ТоварыПоНомерамГТД.Колонки.Добавить("Номенклатура");
	ТоварыПоНомерамГТД.Колонки.Добавить("НомерГТД");
	ТоварыПоНомерамГТД.Колонки.Добавить("СтранаПроисхождения");
	ТоварыПоНомерамГТД.Колонки.Добавить("Количество");
	
	ДатаДок = Документ.Дата;
	Организация = Документ.Организация;
	Проводки = Документ.Движения.Хозрасчетный;
	
	// Формирование параметров отбора для запроса.
	СписокНоменклатуры = Новый Массив;
	СписокНомеровГТД = Новый Массив;
	СписокСтранПроисхождения = Новый Массив;
	
	Для каждого СтрокаТЧ из ТаблицаПоТоварам Цикл
		
			 Если НеУказанНомерГТД(СтрокаТЧ.НомерГТД,СтрокаТЧ.СтранаПроисхождения) Тогда
	             ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Неверно заполнены данные по ГТД в строке "+СтрокаТЧ.НомерСтроки+"");
			 КонецЕсли;

		
		
		Если ЭтоИмпортныйТовар(СтрокаТЧ.СчетУчета, СтрокаТЧ.НомерГТД, СтрокаТЧ.СтранаПроисхождения) Тогда
	
			
			
			
			СписокНоменклатуры.Добавить(СтрокаТЧ.Номенклатура);
			СписокНомеровГТД.Добавить(СтрокаТЧ.НомерГТД);
			СписокСтранПроисхождения.Добавить(СтрокаТЧ.СтранаПроисхождения);
			
			ТоварПоНомеруГТД = ТоварыПоНомерамГТД.Добавить();
			ТоварПоНомеруГТД.Номенклатура = СтрокаТЧ.Номенклатура;
			ТоварПоНомеруГТД.НомерГТД = СтрокаТЧ.НомерГТД;
			ТоварПоНомеруГТД.СтранаПроисхождения = СтрокаТЧ.СтранаПроисхождения;
			ТоварПоНомеруГТД.Количество = СтрокаТЧ.Количество;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если СписокНоменклатуры.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;

	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
	|	ХозрасчетныйОстатки.Субконто2 КАК НомерГТД,
	|	ХозрасчетныйОстатки.Субконто3 КАК СтранаПроисхождения,
	|	ХозрасчетныйОстатки.КоличествоОстатокДт КАК Количество
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный.Остатки(
	|		&Период,
	|		Счет = &СчетУчетаНомеровГТД,
	|		&Видысубконто,
	|			Субконто1 В (&СписокНоменклатуры)
	|			И Субконто2 В (&СписокНомеровГТД)
	|			И Субконто3 В (&СписокСтранПроисхождения)
	|			И Организация = &Организация) КАК ХозрасчетныйОстатки");

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


Функция ЭтоИмпортныйТовар(СчетУчета, НомерГТД, СтранаПроисхождения) Экспорт

	Если НЕ ЗначениеЗаполнено(СтранаПроисхождения) или
		 СтранаПроисхождения = Справочники.СтраныМира.РОССИЯ или
		 НЕ ЗначениеЗаполнено(НомерГТД) Тогда
		 
		Результат = Ложь;
		
		ИначеЕсли СчетУчета.ПринадлежитЭлементу(ПланыСчетов.Хозрасчетный.ТоварыНаСкладах) или
		 СчетУчета = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах или
		 
		 СчетУчета.ПринадлежитЭлементу(ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговле) или
		 СчетУчета = ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговле или
		 
		 СчетУчета.ПринадлежитЭлементу(ПланыСчетов.Хозрасчетный.ТоварыПринятыеНаКомиссию) или
		 СчетУчета = ПланыСчетов.Хозрасчетный.ТоварыПринятыеНаКомиссию или
		 
		 СчетУчета.ПринадлежитЭлементу(ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахАТТ) или
		 СчетУчета = ПланыСчетов.Хозрасчетный.ТоварыВРозничнойТорговлеВПродажныхЦенахАТТ или
		 
		 СчетУчета.ПринадлежитЭлементу(ПланыСчетов.Хозрасчетный.ПокупныеИзделия) или
		 СчетУчета = ПланыСчетов.Хозрасчетный.ПокупныеИзделия Тогда

		Результат = Истина;

	Иначе
		Результат = Ложь;
	КонецЕсли;
	
	Возврат Результат;

КонецФункции


Функция НеУказанНомерГТД(НомерГТД, СтранаПроисхождения) Экспорт

	Если НЕ ЗначениеЗаполнено(СтранаПроисхождения) или
		 СтранаПроисхождения = Справочники.СтраныМира.РОССИЯ Тогда
		 
		Результат = Ложь;
		
	ИначеЕсли НЕ ЗначениеЗаполнено(НомерГТД) Тогда
		Результат = Истина;
		
	Иначе
		Результат = Ложь;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

2. В конец обработки проведения добавляем вызов:

ОбщийМодуль.ПроведениеДокументаСписанияПоСчетуГТД(ЭтотОбъект,ЭтотОбъект.Товары, "Реализация услуг");

Разберем на примере:

В первой строке я умышленно указал ГТД с остатком 5 вместо 10

Во второй строке не указывал совсем.

После проведения результат отображается на рисунке.

 

 Вот таким образом мы решили проблему списания остатков по счёту ГТД.

Спасибо за внимание. Моя первая публикация, прошу прощения, если отнял ваше время :)

ГТД Списание остатков по ГТД

См. также

Ценовая власть. Выносим из цикла схему СКД

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

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    483    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

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

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    370    tango    5    

3

Ценовая власть. Второй сезон

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

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    575    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    442    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    523    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2578    YA_418728146    11    

42

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1126    8    2ncom    3    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4953    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. paybaseme 14 19.01.16 12:43 Сейчас в теме
Приветствую, коллега! Подход отличный при условии что ради этого конфигурация снимается с поддержки, со всеми вытекающими. У моих клиентов ни у одного такой аргумент как говорится "не покатил". Поэтому на свет появился вот такой отчет. Публикую не рекламы ради, а в свете всяческий лучей поддержки коллеге, столкнувшейся с такой особенностью!
+
2. dkonakov 10 19.01.16 14:13 Сейчас в теме
(1) paybaseme, почему сразу "Снимается с поддержки"? Несколько сложнее обновлять, нужно хранить заметки о своих "внедрениях" =)
+
3. Alex_E 2353 19.01.16 14:25 Сейчас в теме
(2) и нет возможности обновлять программу автоматом - т.е. буху нужно или звать кого-то или содержать "карманного" программиста или самому(-ой) научиться грамотно обновлять изменённую конфигурацию - для 80% клиентов это не айс - ибо мало заплатить за настройку, нужно ещё платить за обновления - а у нас кризис на дворе.....
Вообще решение этой задачи правильно включить в расширение - с обновлениями проблем уже будет меньше, но....мы же не ищем лёгких путей? :-)
paybaseme; +1
4. dkonakov 10 19.01.16 15:30 Сейчас в теме
(3) Alex_E, я штатный программист, я лишь поделился "быстрым решением" после перехода с 2.0 на 3.0. Раздел "Практика программирования" да и первый раз опубликовался :) не судите строго)
+
5. slauter77 20 19.01.16 21:03 Сейчас в теме
(4) "Подписки на события ?" - не ! не слышал! :)
+
6. Alex_E 2353 19.01.16 21:26 Сейчас в теме
(4) это Вы не судите меня строго - просто Ваше решение - это показатель...)))))
+
7. Mx00 247 20.01.16 11:57 Сейчас в теме
Сейчас появилась возможность использовать Расширения конфигурации - важно что при этом конфигурация остаётся неизменной, а логику проверки она вполне позволяет сделать, думаю на текущий момент решение с помощью Расширения самый оптимальный вариант :-)
+
8. dkonakov 10 21.01.16 08:57 Сейчас в теме
(7) Mx00, спасибо за мнение. Я обязательно рассмотрю этот вариант и, если получится, опубликую :)
+
9. AKV77 259 24.03.19 16:55 Сейчас в теме
Коллеги, приветствую ! Про ваши замечания по поводу расширения абсолютно согласен.
Хочу сказать, что в начале 2016г. не многие из нас активно использовали расширения в своей работе.
Но благодаря автору, решил подобную задачу за 5 минут, только создав расширение и добавив в него вышеприведенный код.
Дмитрий спасибо.
kondi55; alsion2; +2
10. dkonakov 10 24.03.19 21:01 Сейчас в теме
(9) Рад, что не зря публиковался. Спасибо за отзыв!
+
11. alsion2 181 14.10.20 10:50 Сейчас в теме
Внимание! Тема сдана в архив