Предлагаю несложный способ решить данную задачу в своей конфигурации 1С:УТ.
1. Необходимо хранить историю наличия товаров при загрузке прайс-листов. Для этого создадим новый периодический регистр сведений (я сделал период секунда, чтобы можно было загружать несколько раз прайс-листы за один день и пользоваться "СрезомПоследних". Но, возможно, нужно было сделать периодичность "По позиции регистратора") и подчиненный регистратору "УстановкаЦенНоменклатуры". Отнесите регистр к подсистеме "Ценообразование" и раздайте права для ролей пользователей.
Тип реквизитов понятен: Номенклатура=СправочникСсылкаНоменклатура; Поставщик=СправочникСсылкаКонтрагенты; Док=ДокументСсылкаУстановкаЦенНоменклатуры; ЕстьВНаличии=Булево; ПредставлениеКоличества="Строка 30 переменная".
2. Добавим в документ "УстановкаЦенНоменклатуры" новую табличную часть "НаличиеУПоставщика". Она заполняется программно из обработки, которая формирует документ из прайс-листа. Интерактивной работы с этой таличной частью не предусмотрено, чтобы не "болела голова" при обновлении конфигурации.
3. Чтобы заполнять данными регистр (п.1) при проведении документа (п.2), добавим в конфигурацию новую подписку
Код обработки проведения:
Процедура УстановитьНаличиеУПоставщикаОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
л_НаборЗаписей=РегистрыСведений.НаличиеТовараУПоставщика.СоздатьНаборЗаписей();
л_НаборЗаписей.Отбор.Регистратор.Установить(Источник.Ссылка);
л_ТЗ=Источник.НаличеУПоставщика.Выгрузить();
л_ТЗ.Колонки.Добавить("Период");
л_ТЗ.Колонки.Добавить("Док");
л_ТЗ.ЗаполнитьЗначения(Источник.Дата,"Период");
л_ТЗ.ЗаполнитьЗначения(Источник.Ссылка,"Док");
л_ТЗ.Свернуть("Номенклатура,Док,Период,ЕстьВНаличии,Поставщик,ПредставлениеКоличества",""); //
л_НаборЗаписей.Загрузить(л_ТЗ);
л_НаборЗаписей.Записать(Ложь);
КонецПроцедуры
4. ВНИМАНИЕ! В ваши процедуры формирования документов "УстановкаЦенНоменклатуры" обязательно добавьте код, который заполняет новую табличную часть "НаличеУПоставщика".
Например, так:
л_НоваяСтрокаНаличие = л_НовыйДокУстановкаЦен.НаличеУПоставщика.Добавить();
л_НоваяСтрокаНаличие.Поставщик = л_АЙТИ_партнер;
л_НоваяСтрокаНаличие.Номенклатура=л_Номенклатура;
л_НоваяСтрокаНаличие.ЕстьВНаличии=Ложь;
л_ЗначЕстьВНаличии=СокрЛП ( ExcelЛист.Cells(СтрExcel, 8).value);
Если л_ЗначЕстьВНаличии = "*" ИЛИ л_ЗначЕстьВНаличии = "**" ИЛИ л_ЗначЕстьВНаличии = "***" Тогда
л_НоваяСтрокаНаличие.ЕстьВНаличии=Истина;
л_НоваяСтрокаНаличие.ПредставлениеКоличества=л_ЗначЕстьВНаличии;
КонецЕсли;
5. Для визуализации данных по наличию у поставщика необходимо добавить новые колонки "ЕстьУПоставщика" в табличной части "Товары" документа "СчетНаОплатуПокупателю". И в "ОсновнаяФорма" обработки "ПодборНоменклатуры"
6. В обработчик события Процедура СправочникНоменклатураПриПолученииДанных(Элемент, ОформленияСтрок)
добавьте код, например, такой:
//заполнить колонку "ЕстьВНаличииУПоставщика"
МодульНадстройка.ЗаполнитьКолонкуЕстьВНаличииУПоставщика(ОформленияСтрок,"Ссылка");
а в общем модуле добавьте вызываемые процедуры:
Процедура ПолучитьНаличиеУПостащика(п_НаДату,п_СписокНоменклатуры, п_ТЗ) Экспорт
л_Запрос=Новый Запрос;
л_Запрос.Текст=
"ВЫБРАТЬ
| НаличиеТовараУПоставщикаСрезПоследних.Номенклатура,
| НаличиеТовараУПоставщикаСрезПоследних.Поставщик,
| МАКСИМУМ(НаличиеТовараУПоставщикаСрезПоследних.Период) КАК Период
|ПОМЕСТИТЬ ПоследниеЗначения
|ИЗ
| РегистрСведений.НаличиеТовараУПоставщика.СрезПоследних(&НаДату, Номенклатура В (&Номенклатура)) КАК НаличиеТовараУПоставщикаСрезПоследних
|
|СГРУППИРОВАТЬ ПО
| НаличиеТовараУПоставщикаСрезПоследних.Номенклатура,
| НаличиеТовараУПоставщикаСрезПоследних.Поставщик
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НаличиеТовараУПоставщика.Номенклатура КАК Номенклатура,
| НаличиеТовараУПоставщика.Поставщик,
| НаличиеТовараУПоставщика.ЕстьВНаличии КАК ЕстьВНаличии,
| НаличиеТовараУПоставщика.Период КАК Период,
| НаличиеТовараУПоставщика.ПредставлениеКоличества
|ИЗ
| ПоследниеЗначения КАК ПоследниеЗначения
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеТовараУПоставщика КАК НаличиеТовараУПоставщика
| ПО (НаличиеТовараУПоставщика.Номенклатура = ПоследниеЗначения.Номенклатура)
| И (НаличиеТовараУПоставщика.Поставщик = ПоследниеЗначения.Поставщик)
| И (НаличиеТовараУПоставщика.Период = ПоследниеЗначения.Период)
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| ЕстьВНаличии УБЫВ,
| Период УБЫВ";
л_Запрос.УстановитьПараметр("НаДату",п_НаДату);
л_Запрос.УстановитьПараметр("Номенклатура",п_СписокНоменклатуры);
п_ТЗ=л_Запрос.Выполнить().Выгрузить();
КонецПроцедуры //ПолучитьНаличиеУПостащика
Процедура ЗаполнитьКолонкуЕстьВНаличииУПоставщика(п_ОформлениеСтрок,п_ИмяКолонкиНоменклатура,п_НаДату="") Экспорт
//заполнить колонку "ЕстьВНаличииУПоставщика"
л_СписокНоменклатуры=Новый Массив;
Для Каждого л_ОформлениеСтроки Из п_ОформлениеСтрок Цикл
л_СписокНоменклатуры.Добавить(л_ОформлениеСтроки.данныестроки[п_ИмяКолонкиНоменклатура]);
КонецЦикла;
л_ТЗ=Новый ТаблицаЗначений;
МодульНадстройка.ПолучитьНаличиеУПостащика(?(ЗначениеЗаполнено(п_НаДату),п_НаДату,ТекущаяДата()),л_СписокНоменклатуры,л_ТЗ);
Если л_ТЗ.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Для Каждого л_ОформлениеСтроки Из п_ОформлениеСтрок Цикл
л_МассивСтрок=л_ТЗ.НайтиСтроки(Новый Структура("Номенклатура",л_ОформлениеСтроки.ДанныеСтроки[п_ИмяКолонкиНоменклатура],"Номенклатура"));
л_ТекстЕстьВНаличии="";
Если л_МассивСтрок.Количество() = 0 Тогда
л_ОформлениеСтроки.Ячейки.ЕстьУПоставщика.УстановитьТекст(л_ТекстЕстьВНаличии);
Продолжить;
КонецЕсли;
л_ЕстьВНаличии=Ложь;
Для Каждого л_Элемент Из л_МассивСтрок Цикл
л_ЕстьВНаличии=л_ЕстьВНаличии ИЛИ л_Элемент.ЕстьВНаличии;
КонецЦикла;
Если НЕ л_ЕстьВНаличии Тогда
л_ТекстЕстьВНаличии="Нет";
л_ОформлениеСтроки.Ячейки.ЕстьУПоставщика.УстановитьТекст(л_ТекстЕстьВНаличии);
Продолжить;
Иначе
Для Каждого л_Элемент Из л_МассивСтрок Цикл
л_ТекстЕстьВНаличии=л_ТекстЕстьВНаличии+Символы.ПС+л_Элемент.ЕстьВНаличии
+?(ЗначениеЗаполнено(л_Элемент.ПредставлениеКоличества),"<"+л_Элемент.ПредставлениеКоличества+">","")
+"("+л_Элемент.Поставщик+")";
КонецЦикла;
л_ТекстЕстьВНаличии=Прав(л_ТекстЕстьВНаличии,СтрДлина(л_ТекстЕстьВНаличии)-1);
КонецЕсли;
л_ОформлениеСтроки.Ячейки.ЕстьУПоставщика.УстановитьТекст(л_ТекстЕстьВНаличии);
КонецЦикла;
КонецПроцедуры //ЗаполнитьКолонкуЕстьВНаличииУПоставщика
Результат проведенных изменений:
Спасибо за внимание! Кому пригодилось - плюсуйте)