По теме из базы знаний
- Исправление отрицательных остатков по организациям в УТ 11.4, КА 2.4, ЕРП 2.4. Интеркампани, механизм формирования резервов
- Перенос данных КА 1.1 -> УТ 11.4
- Внешние печатные формы для Управления торговлей 11.4
- Внешние печатные формы для 1С:Управление торговлей 11.4 -= Все формы за 3 $m =-
- Поиск пустых ГТД и их заполнение в документах Отчета комиссионера для УТ 11.4
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) не думаю, что это связано с косяками в учете.
это происходит с товаром, за который комиссионер отчитался в отчётах о продажах комиссионера.
пример: передали комиссионеру по одной шт.: товар1 с ГТД1, товар2 с ГТД2, товар3 с ГТД3 и товар4 с ГТД4.
Далее комиссионер в Отчете1 отчитался о продажах товара: товар1 с ГТД1 и товар2 с ГТД2.
В следующем Отчете2 комиссионер отчитался о продажах: товар3 с ГТД3 и возврате от конечного покупателя товар2 (в этом случае в Отчете2 заполняется ГТД только у товар3 с ГТД3, а товар2 остается с пустым ГТД).
Получается, что у комиссионера на остатке товар4 с ГТД4 и товар2 (без ГТД).
На оставшийся товар делаем возврат от комиссионера и при проведении получаем товар4 с ГТД4 и товар2 (без ГТД) и (допустим, конечный покупатель вернул комиссионеру товар3 с ГТД3 - он тоже попадает в возврат от комиссионера) и у товар3 в возврате тоже отсутствует ГТД.
Из-за этого появляются отрицательные остатки по номерам ГТД.
Но если сделать возврат от клиента, а не от комиссионер по товарам без ГТД, то номера ГТД у товар2 и товар3 заполняются.
Собственно вопрос почему в отчете и возврате от комиссионера ГТД не подтягиваются (даже при ручном заполнении видов запсов, при записи ГТД обнуляются), а в возврате от клиента все ГТД нормально заполняются?
это происходит с товаром, за который комиссионер отчитался в отчётах о продажах комиссионера.
пример: передали комиссионеру по одной шт.: товар1 с ГТД1, товар2 с ГТД2, товар3 с ГТД3 и товар4 с ГТД4.
Далее комиссионер в Отчете1 отчитался о продажах товара: товар1 с ГТД1 и товар2 с ГТД2.
В следующем Отчете2 комиссионер отчитался о продажах: товар3 с ГТД3 и возврате от конечного покупателя товар2 (в этом случае в Отчете2 заполняется ГТД только у товар3 с ГТД3, а товар2 остается с пустым ГТД).
Получается, что у комиссионера на остатке товар4 с ГТД4 и товар2 (без ГТД).
На оставшийся товар делаем возврат от комиссионера и при проведении получаем товар4 с ГТД4 и товар2 (без ГТД) и (допустим, конечный покупатель вернул комиссионеру товар3 с ГТД3 - он тоже попадает в возврат от комиссионера) и у товар3 в возврате тоже отсутствует ГТД.
Из-за этого появляются отрицательные остатки по номерам ГТД.
Но если сделать возврат от клиента, а не от комиссионер по товарам без ГТД, то номера ГТД у товар2 и товар3 заполняются.
Собственно вопрос почему в отчете и возврате от комиссионера ГТД не подтягиваются (даже при ручном заполнении видов запсов, при записи ГТД обнуляются), а в возврате от клиента все ГТД нормально заполняются?
(9) в итоге написал расширение, которое исправляет этот код в документе ОтчетКомиссионера.
Правда, я добавил _НомерГТД в расширении, лучше было бы в саму конфигурацию, ну да ладно.
Правда, я добавил _НомерГТД в расширении, лучше было бы в саму конфигурацию, ну да ладно.
&НаСервере
Процедура кгтд_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
//Добавляем колонку для номера ГТД
Элемент = Элементы.Добавить("_НомерГТД", Тип("ПолеФормы"), Элементы.Товары);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = "Объект.Товары._НомерГТД";
КонецПроцедуры
&После("ОбработкаПроведения")
Процедура кгтд_ОбработкаПроведения(Отказ, РежимПроведения)
//После проведения...
//Считываем движения по регистру накопления ТоварыПереданныеНаКомиссию
З = Новый Запрос(
"ВЫБРАТЬ
| ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
| ТоварыПереданныеНаКомиссию.ВидДвижения КАК ВидДвижения,
| ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыПереданныеНаКомиссию.Соглашение КАК Соглашение,
| ТоварыПереданныеНаКомиссию.Организация КАК Организация,
| ТоварыПереданныеНаКомиссию.ВидЗапасов КАК ВидЗапасов,
| ТоварыПереданныеНаКомиссию.Количество КАК Количество,
| ЕСТЬNULL(ОтчетКомиссионераТовары._НомерГТД, НЕОПРЕДЕЛЕНО) КАК НомерГТДДокумента,
| ТоварыПереданныеНаКомиссию.Период КАК Период
|ИЗ
| РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетКомиссионера.Товары КАК ОтчетКомиссионераТовары
| ПО ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры = ОтчетКомиссионераТовары.АналитикаУчетаНоменклатуры
| И ТоварыПереданныеНаКомиссию.Регистратор = ОтчетКомиссионераТовары.Ссылка
|ГДЕ
| ТоварыПереданныеНаКомиссию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И ТоварыПереданныеНаКомиссию.Количество < 0
| И ТоварыПереданныеНаКомиссию.НомерГТД = ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
| И ТоварыПереданныеНаКомиссию.Регистратор = &Регистратор");
З.УстановитьПараметр("Регистратор", Ссылка); //Отбираем движения по текущему регистратору
Выборка = З.Выполнить().Выбрать();
НЗ = Неопределено;
Пока Выборка.Следующий() Цикл
НомерГТД = Выборка.НомерГТДДокумента;
Если НЕ ЗначениеЗаполнено(НомерГТД) Тогда
//Будем искать ближайшую продажу к этому возврату
ЗВ = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
| ТоварыПереданныеНаКомиссию.Регистратор КАК Регистратор,
| ТоварыПереданныеНаКомиссию.ВидДвижения КАК ВидДвижения,
| ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыПереданныеНаКомиссию.Соглашение КАК Соглашение,
| ТоварыПереданныеНаКомиссию.Организация КАК Организация,
| ТоварыПереданныеНаКомиссию.ВидЗапасов КАК ВидЗапасов,
| ТоварыПереданныеНаКомиссию.Количество КАК Количество,
| ТоварыПереданныеНаКомиссию.НомерГТД КАК НомерГТД
|ИЗ
| РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
|ГДЕ
| ТоварыПереданныеНаКомиссию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И ТоварыПереданныеНаКомиссию.Количество > 0
| И ТоварыПереданныеНаКомиссию.Период <= &Период
| И ТоварыПереданныеНаКомиссию.Регистратор <> &Регистратор
| И ТоварыПереданныеНаКомиссию.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
|
|УПОРЯДОЧИТЬ ПО
| ТоварыПереданныеНаКомиссию.Период УБЫВ");
ЗВ.УстановитьПараметр("Регистратор", Ссылка);
ЗВ.УстановитьПараметр("Период", Выборка.Период);
ВыборкаВ = ЗВ.Выполнить().Выбрать();
Если ВыборкаВ.Следующий() Тогда
НомерГТД = ВыборкаВ.НомерГТД;
КонецЕсли;
Сообщить("Номер ГТД: " + НомерГТД + " для аналитики: " + ВыборкаВ.АналитикаУчетаНоменклатуры + " подобран из документа:" + ВыборкаВ.Регистратор);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НомерГТД) Тогда //Если нашли номер ГТД
Сообщить("Номер ГТД для аналитики: " + Выборка.АналитикаУчетаНоменклатуры + " не удалось подобрать", СтатусСообщения.Важное);
Иначе
Если НЗ = Неопределено Тогда
НЗ = РегистрыНакопления.ТоварыПереданныеНаКомиссию.СоздатьНаборЗаписей();
НЗ.Отбор.Регистратор.Значение = Ссылка;
НЗ.Прочитать();
НЗ[Выборка.НомерСтроки - 1].НомерГТД = НомерГТД;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//Если были корректировки
Если НЗ <> Неопределено Тогда
НЗ.Записать();
КонецЕсли;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
КорректировкаПустыхГТД 2020-09-29.cfe
(14)Немного перебрал код, вроде ищет и записывает. Но записывает ГТД в регистре только на первую номенклатуру, хотя в отладке происходит выборка всех отрицательных позиций и соответсвующее сообщение что присвоен номер гтд подтверждает это, но в регистре пусто.
Процедура кгтд_ОбработкаПроведения(Отказ, РежимПроведения)
//После проведения...
//Считываем движения по регистру накопления ТоварыПереданныеНаКомиссию
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
| ТоварыПереданныеНаКомиссию.ВидДвижения КАК ВидДвижения,
| ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыПереданныеНаКомиссию.Соглашение КАК Соглашение,
| ТоварыПереданныеНаКомиссию.Организация КАК Организация,
| ТоварыПереданныеНаКомиссию.ВидЗапасов КАК ВидЗапасов,
| ТоварыПереданныеНаКомиссию.Количество КАК Количество,
| ЕСТЬNULL(ОтчетКомиссионераТовары._НомерГТД, НЕОПРЕДЕЛЕНО) КАК НомерГТДДокумента,
| ТоварыПереданныеНаКомиссию.Период КАК Период
|ИЗ
| РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетКомиссионера.Товары КАК ОтчетКомиссионераТовары
| ПО ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры = ОтчетКомиссионераТовары.АналитикаУчетаНоменклатуры
| И ТоварыПереданныеНаКомиссию.Регистратор = ОтчетКомиссионераТовары.Ссылка
|ГДЕ
| ТоварыПереданныеНаКомиссию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
| И ТоварыПереданныеНаКомиссию.Количество < 0
| И ТоварыПереданныеНаКомиссию.НомерГТД = ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
| И ТоварыПереданныеНаКомиссию.Регистратор = &Регистратор");
Запрос.УстановитьПараметр("Регистратор", Ссылка); //Отбираем движения по текущему регистратору
Выборка = Запрос.Выполнить().Выбрать();
НЗ = Неопределено;
Пока Выборка.Следующий() Цикл
НомерГТД = Выборка.НомерГТДДокумента;
Если НЕ ЗначениеЗаполнено(НомерГТД) Тогда
//Будем искать ближайшую продажу к этому возврату
ЗВ = Новый Запрос(
"ВЫБРАТЬ
| ТоварыПереданныеНаКомиссию.НомерСтроки КАК НомерСтроки,
| ТоварыПереданныеНаКомиссию.Регистратор КАК Регистратор,
| ТоварыПереданныеНаКомиссию.ВидДвижения КАК ВидДвижения,
| ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
| ТоварыПереданныеНаКомиссию.Соглашение КАК Соглашение,
| ТоварыПереданныеНаКомиссию.Организация КАК Организация,
| ТоварыПереданныеНаКомиссию.ВидЗапасов КАК ВидЗапасов,
| ТоварыПереданныеНаКомиссию.Количество КАК Количество,
| ТоварыПереданныеНаКомиссию.НомерГТД КАК НомерГТД
|ИЗ
| РегистрНакопления.ТоварыПереданныеНаКомиссию КАК ТоварыПереданныеНаКомиссию
|ГДЕ
| ТоварыПереданныеНаКомиссию.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И ТоварыПереданныеНаКомиссию.Количество > 0
| И ТоварыПереданныеНаКомиссию.Период <= &Период
| И ТоварыПереданныеНаКомиссию.Регистратор <> &Регистратор
| И ТоварыПереданныеНаКомиссию.НомерГТД <> ЗНАЧЕНИЕ(Справочник.НомераГТД.ПустаяСсылка)
| И ТоварыПереданныеНаКомиссию.АналитикаУчетаНоменклатуры = &АналитикаУчетаНоменклатуры
|
|УПОРЯДОЧИТЬ ПО
| ТоварыПереданныеНаКомиссию.Период УБЫВ");
ЗВ.УстановитьПараметр("Регистратор", Ссылка);
ЗВ.УстановитьПараметр("Период", Выборка.Период);
ЗВ.УстановитьПараметр("АналитикаУчетаНоменклатуры", Выборка.АналитикаУчетаНоменклатуры);
ВыборкаВ = ЗВ.Выполнить().Выбрать();
Если ВыборкаВ.Следующий() Тогда
НомерГТД = ВыборкаВ.НомерГТД;
КонецЕсли;
Сообщить("Номер ГТД: " + НомерГТД + " для аналитики: " + ВыборкаВ.АналитикаУчетаНоменклатуры + " подобран из документа:" + ВыборкаВ.Регистратор);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(НомерГТД) Тогда //Если нашли номер ГТД
Сообщить("Номер ГТД для аналитики: " + Выборка.АналитикаУчетаНоменклатуры + " не удалось подобрать", СтатусСообщения.Важное);
Иначе
Если НЗ = Неопределено Тогда
НЗ = РегистрыНакопления.ТоварыПереданныеНаКомиссию.СоздатьНаборЗаписей();
НЗ.Отбор.Регистратор.Значение = Ссылка;
НЗ.Прочитать();
НЗ[Выборка.НомерСтроки - 1].НомерГТД = НомерГТД;
КонецЕсли;
КонецЕсли;
//Если были корректировки
Если НЗ <> Неопределено Тогда
НЗ.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(14)Что может быть не так? Если 1 позиция в документе с отрицательным количеством, то нормально. Если 2 и более, то данные для второй и последующей позиции не записываются в регистр.
Может что-то тут не отрабатывает?
Может что-то тут не отрабатывает?
Если НЗ <> Неопределено Тогда
НЗ.Записать();
КонецЕсли;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот