/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Переход на новую учетную систему Сигма ЕРП.
// Экспортные функции по переносу данных из 1С 7.7 Комплексная (Сигма Калина) в 1С 8 Сигма ЕРП
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//******************************************* глСформироватьТаблицуНоменклатурыСДопСвойствами ***************
// Функция возвращает Таблицу Номенклатуры С Дополнительными Свойствами по которым были остатки или движения за
// последние 183 дня, варианты запуска функции в зависимости от переданных в нее параметров слудующие.
// Если ВыгрузитьГруппы = 1 результат содержит все группы (без учета движений), Если ВыбКодРодителя = "" воз-
// вращается полный справочник, "9000001" - обрабатываются только первые 40000 движений упорядоченных по коду
// элементов справочника номенклатуры, и если за прошлые полгода было движение они выводятся в таблицу результата,
// "9000002" - в полном упорядоченном по коду справочнике номенклатуры пропускаются первые 39900 элементов
// (чтобы исключить ситуацию что Логисты Сигма успеют вставить новые элементы в первую часть выгрузки, а они
// интенсивно вволдят новые позиции в справочник Сигма) затем по оставшейся после пропуска части полного
// справочника делается запрос по движению товара и если были движения обработка номенклатуры выводится в
// таблицу результата функции. В каждой строке результата вставлена таблица "штук" и таблица "упаковок", а так
// же результат запроса по движению товара. Вспомогательная функция СформироватьТаблицуГруппНоменклатуры
// не учитывает движения и выгружает все не помеченные на удаления группы номенклатуры без исключения.
// Группы номенклатуры выгружаются всегда полностью независимо от значения установленного кода выбранной группы.
// Для запуска:
//Процедура СформироватьГруппыНоменклатуры()
// КодГруппы = "Кб20871";
// ТЗ = СформироватьТаблицуГруппНоменклатуры("",1);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Процедура Сформировать()
// ТЗ = глСформироватьТаблицуНоменклатурыСДопСвойствами(КодГруппы,0);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//******************************************* глСформироватьОперативныеОстатки ************************************
// делается обход выборки справочника номенклатуры по заданному коду группы, формируется таблица значений с данными
// регистров, у которых используются методы чтения остатков для извлечения оперативных итогов на точку актуальности
// из Регистр.ПартииНаличие, Регистр.РезервыТМЦ, Регистр.Заказы, Регистр.ОстаткиТМЦ и добавляются в таблицу значений
// к этой номенклатуре. Регистр.ПартииНаличие отдает информацию только в разрезе МОЛов, поэтому соединение данных
// из других регистров делается в цикле с дублированием строк, где по МОЛу имеет значение только себестоимость.
// Пример запуска:
//Процедура СформироватьОстатки()
// КодГруппы = "Кб20871";
// ТЗ = глСформироватьОперативныеОстатки(КодГруппы);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Функция глСформироватьОперативныеОстатки(КодГруппы) Экспорт
//******************************************* глСформироватьРезервыНаДату *******************************************
// извлекает запросом резервы из Регистр.РезервыТМЦ по заданному коду группы (элемента) номенклатуры на заданную дату.
// Данные из регистров запросом принято извлекать на начало указанного дня. Пример запуска:
//Процедура СформироватьРезервы()
// КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьРезервыНаДату(КодГруппы,ВыбНачПериода);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Функция глСформироватьРезервыНаДату(КодГруппы,ДатаРезерва) Экспорт
//******************************************* глСформироватьПартииНаДату ********************************************
// извлекает запросом себестоимость из Регистр.ПартииНаличие по заданному коду группы (элемента) номенклатуры на
// заданную дату. Данные из регистров запросом принято извлекать на начало указанного дня. Пример запуска:
//Процедура СформироватьПартии()
// КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьПартииНаДату(КодГруппы,ВыбНачПериода);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Функция глСформироватьПартииНаДату(КодГруппы,ДатаОстатков) Экспорт
//******************************************* глСформироватьОстаткиНаДату **************************************
// извлекает запросом остатки в разрезе фирмы и склада из Регистр.ОстаткиТМЦ по заданному коду группы (элемента)
// номенклатуры на заданную дату. Данные из регистров запросом принято извлекать на начало указанного дня. Пример
// запуска:
//Процедура СформироватьОстатки()
// КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьОстаткиНаДату(КодГруппы,ВыбНачПериода);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//******************************************* глСформироватьСоединениеПартииОстаткиРезервы **********************
// соединяет таблицы результата запроса резервов, остатков и себестоимости в разрезе склада и номенклатуры по за-
// данному коду группы (элемента) номенклатуры на заданную дату только по складам
// СпрСклад.НайтиПоКоду("2"); - главный склад фирмы Новосибирская
// СпрСклад.НайтиПоКоду("Кб017"); - брак
// СпрСклад.НайтиПоКоду("Кб019"); - Склад производственного брака
// СпрСклад.НайтиПоКоду("20"); - Склад спорных вопросов от ПОСТАВЩИКА
// СпрСклад.НайтиПоКоду("Кб015"); - Транзитный склад
// СпрСклад.НайтиПоКоду("Кб027"); - Склад брака по приходу
// Данные из регистров запросом принято извлекать на начало указанного дня. Пример запуска:
//Процедура СформироватьСоединение()
// КодГруппы = "Кб20871";ДатаОстатков = Дата(2017,12,20);
// ТЗ = глСформироватьСоединениеПартииОстаткиРезервы(КодГруппы, ДатаОстатков);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Функция глСформироватьСоединениеПартииОстаткиРезервы(КодГруппы,ДатаОстатков) Экспорт
//******************************************* глСформироватьИсториюЦенЗаПериод ***************************
// извлекает историю изменения цен по дням с отбором по типу цен и номенклатуре (группа или элемент) и
// ограничением по дате начала истории. Пример запуска:
//Процедура СформироватьЦены()
// КодТипаЦен = "00007";КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьИсториюЦенЗаПериод(КодТипаЦен,КодГруппы,Дата(2017,01,01));
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Функция глСформироватьИсториюЦенЗаПериод(КодТипаЦен,КодГруппыНоменклатуры,ДатаНачала) Экспорт
//******************************************* глСформироватьСоединениеПартииОстаткиРезервыЗаданСклад ************
// соединяет таблицы результата запроса резервов, остатков и себестоимости в разрезе склада и номенклатуры по за-
// данному коду группы (элемента) номенклатуры на заданную дату по единственному коду выбранного склада.
// Данные из регистров запросом принято извлекать на начало указанного дня. Пример запуска:
//Процедура СформироватьСоединение()
// КодСклада = "2";КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьСоединениеПартииОстаткиРезервыЗаданСклад(КодСклада,КодГруппы,ВыбНачПериода);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Функция глСформироватьСоединениеПартииОстаткиРезервыЗаданСклад(КодСклада,КодГруппы,ДатаОстатков) Экспорт
//******************************************* глСформироватьТаблицуКонтрагентыЮрФизЛица **************
// извлекает свойства всех контрагентов (кроме группы устаревщих) по коду выбранной группы или элемента
// Пример запуска:
//Процедура СформироватьЦены()
//КодКонтрагента = "Кб002338";ВыгрузитьГруппы = 0;
//ТЗ = глСформироватьТаблицуКонтрагентыЮрФизЛица(КодКонтрагента, ВыгрузитьГруппы);
//глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Функция глСформироватьТаблицуКонтрагентыЮрФизЛица(КодКонтрагента="", ВыгрузитьГруппы=0) Экспорт
//******************************************* глСформироватьТаблицуТорговыеТочки **********************
// извлекает свойства всех торговых точек (кроме группы устаревщих) по коду выбранной группы или элемента
// Пример запуска:
//Процедура СформироватьЦены()
//КодКонтрагента = "Кб002338";ВыгрузитьГруппы = 0;
//ТЗ = глСформироватьТаблицуТорговыеТочки(КодКонтрагента, ВыгрузитьГруппы);
//глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Функция глСформироватьТаблицуТорговыеТочки(КодКонтрагента="", ВыгрузитьГруппы=0) Экспорт
//*******************************************
Функция СформироватьТаблицуГруппНоменклатуры(ВыбКодРодителя = "", ВыгрузитьГруппы = 0)
Перем СписокНоменклатуры;
Перем ВыбНоменклатура,ВыбНоменклатура2;
Перем Запрос, ТекстЗапроса, Таб;
ВыбНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
ВыбНоменклатура2 = СоздатьОбъект("Справочник.Номенклатура");
//|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
//|Группировка ТекущийЭлемент;
//|Условие(ТекущийЭлемент В ВыбНоменклатура);
Запрос = СоздатьОбъект("Запрос");
//спиртсодержащий - это разделитель (наличие номенклатуры в Инфорр) при разбитии заявки на Эксид и Инфор
ТекстЗапроса =
"ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|КодНоменклатуры = Справочник.Номенклатура.Код;
|Наименование = Справочник.Номенклатура.Наименование;
|Родитель = Справочник.Номенклатура.Родитель.Наименование;
|РодКод = Справочник.Номенклатура.Родитель.Код;
|Артикул = Справочник.Номенклатура.Артикул;
|БазЕдКод = Справочник.Номенклатура.БазоваяЕдиница.Код;
|БазЕдОКЕИ = Справочник.Номенклатура.БазоваяЕдиница.ОКЕИ.Код;
|БазЕдВес = Справочник.Номенклатура.БазоваяЕдиница.Вес;
|БазЕдКоэф = Справочник.Номенклатура.БазоваяЕдиница.Коэффициент;
|БазЕдШтрихКод = Справочник.Номенклатура.БазоваяЕдиница.ШтрихКод;
//|БазЕдДатаСоздания = Справочник.Номенклатура.БазоваяЕдиница.ДатаСоздания;
|БазЕдВесБрутто = Справочник.Номенклатура.БазоваяЕдиница.ВесБрутто;
|ВидНоменклатуры = Справочник.Номенклатура.ВидНоменклатуры;
//|МинОстаток = Справочник.Номенклатура.МинОстаток;
|НомерГТД = Справочник.Номенклатура.НомерГТД;
|КодГТД = Справочник.Номенклатура.НомерГТД.Код;
|ОснЕдКод = Справочник.Номенклатура.ОсновнаяЕдиница.Код;
|ОснЕдОКЕИ = Справочник.Номенклатура.ОсновнаяЕдиница.ОКЕИ.Код;
|ОснЕдВес = Справочник.Номенклатура.ОсновнаяЕдиница.Вес;
|ОснЕдКоэф = Справочник.Номенклатура.ОсновнаяЕдиница.Коэффициент;
|ОснЕдШтрихКод = Справочник.Номенклатура.ОсновнаяЕдиница.ШтрихКод;
//|ОснЕдДатаСоздания = Справочник.Номенклатура.ОсновнаяЕдиница.ДатаСоздания;
|ОснЕдВесБрутто = Справочник.Номенклатура.ОсновнаяЕдиница.ВесБрутто;
|СтавкаНДС = Справочник.Номенклатура.СтавкаНДС;
|СтранаПроисхожденияКод = Справочник.Номенклатура.СтранаПроисхождения.Код;
|СтранаПроисхожденияНаименование = Справочник.Номенклатура.СтранаПроисхождения.Наименование;
|КатегорияКод = Справочник.Номенклатура.Категория.Код;
|КатегорияНаим = Справочник.Номенклатура.Категория.Наименование;
|ДелениеИнфорСпиртОтдельно = Справочник.Номенклатура.Спиртосодержащий;
|Объем = Справочник.Номенклатура.Объем;
//|СкладскойНомер = Справочник.Номенклатура.СкладскойНомер;
|ВыгруженВExceed = Справочник.Номенклатура.ВыгруженВExceed;
//|Справка = Справочник.Номенклатура.Справка;
//|ОсновнойТовар = Справочник.Номенклатура.ОсновнойТовар;
//|КодАкции = Справочник.Номенклатура.КодАкции;
|КодКлиента = Справочник.Номенклатура.КодКлиента;
|ЗагруженSkugroup2 = Справочник.Номенклатура.skugroup2;
|ЗагруженPutAwayStrategyKey = Справочник.Номенклатура.PutAwayStrategyKey;
|ЗагруженLOTTABLE06LABEL = Справочник.Номенклатура.LOTTABLE06LABEL;
|КоличествоВСпайкеСотников = Справочник.Номенклатура.КоличествоВСпайке;
|КоличествоВСкладскойУпаковкеСотников = Справочник.Номенклатура.КоличествоВСкладскойУпаковке;
|Приоритет = Справочник.Номенклатура.Приоритет;
|Код7Дней = Справочник.Номенклатура.Код7Дней;
|СрокГодности = Справочник.Номенклатура.СрокГодности;
|ДатаНачалаДействияСертификата = Справочник.Номенклатура.ДатаНачалаДействияСертификата;
|ДатаОкончанияДействияСертификата = Справочник.Номенклатура.ДатаОкончанияДействияСертификата;
|ДатаЗагрузкиСертификата = Справочник.Номенклатура.ДатаЗагрузкиСертификата;
|НоменклатураИнфор = Справочник.Номенклатура.НоменклатураИнфор;
|Группировка ТекущийЭлемент;";
ВыбКодРодителя = "Кб20892";
Если СокрЛП(ВыбКодРодителя) > "" Тогда
//|Условие(ТекущийЭлемент В ВыбНоменклатура);
ВыбНоменклатура2.НайтиПоКоду(ВыбКодРодителя);
ВыбНоменклатура = ВыбНоменклатура2.ТекущийЭлемент();
//Сообщить(ВыбНоменклатура);
ТекстЗапроса = ТекстЗапроса + "
|Условие(ТекущийЭлемент = ВыбНоменклатура);
|";
КонецЕсли;
ТЗ = СоздатьОбъект("Справочник.Номенклатура");
ТЗ2 = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ2;
КонецЕсли;
Запрос.Выгрузить(ТЗ2,3,0);
ТЗ2.УдалитьСтроки();
//Добавим свойства номенклатуры
//ТЗ2.НоваяКолонка("Секц");
ТЗ2.НоваяКолонка("Род");
ТЗ2.НоваяКолонка("РодНаим");
ТЗ2.НоваяКолонка("Коллек");
ТЗ2.НоваяКолонка("Шварц");
ТЗ2.НоваяКолонка("Серт");
ТЗ2.НоваяКолонка("НомерСертификата");
ТЗ2.НоваяКолонка("ПримечаниеВыданСертификат");
//ТЗ2.НоваяКолонка("Качест");
//ТЗ2.НоваяКолонка("РезервДляТорговыхСетей");
ТЗ2.НоваяКолонка("Комментарий");
ТЗ2.НоваяКолонка("ПолнНаименование");
ТЗ2.НоваяКолонка("ТолькоОсновная");
//ТЗ2.НоваяКолонка("НеВключатьВПрайс");
//ТЗ2.НоваяКолонка("НаценкаНеБолее15");
ТЗ2.НоваяКолонка("Штуки");
ТЗ2.НоваяКолонка("Упаковки");
ТЗ2.НоваяКолонка("НачОст");
ТЗ2.НоваяКолонка("Приход");
ТЗ2.НоваяКолонка("Расход");
ТЗ2.НоваяКолонка("КонОст");
//заполним свойства и подчиненные
ТекНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
ТекЕд = СоздатьОбъект("Справочник.Единицы");
СправочникЕдиницы = СоздатьОбъект("Справочник.Единицы");
ТЗ.ВыбратьЭлементы();
Пока ТЗ.ПолучитьЭлемент()=1 Цикл
ТекНоменклатура.НайтиЭлемент(ТЗ.ТекущийЭлемент());
Если ВыгрузитьГруппы > 0 Тогда
Если ТекНоменклатура.ЭтоГруппа()=0 Тогда
Продолжить;
КонецЕсли;
ТЗ2.НоваяСтрока();
ТЗ2.КодНоменклатуры = ТЗ.Код;
ТЗ2.Наименование = ТЗ.Наименование;
Попытка
ТЗ2.Родитель = ТЗ.Родитель;
ТЗ2.Род = ТЗ.Родитель;
ТЗ2.РодНаим = ТЗ.Родитель.Наименование;
ТЗ2.РодКод = ТЗ.Родитель.Код;
Исключение
КонецПопытки
ИначеЕсли ((ТекНоменклатура.ЭтоГруппа()=0)
И (ТекНоменклатура.ПометкаУдаления()=1)) Тогда
Продолжить;
КонецЕсли;
Если ТекНоменклатура.ЭтоГруппа()=0 Тогда
Продолжить;
ИначеЕсли ВыгрузитьГруппы = 0 Тогда
Продолжить;
КонецЕсли;
КонецЦикла;
Возврат ТЗ2;
КонецФункции
//******************************************* глСформироватьТаблицуНоменклатурыСДопСвойствами
// Функция возвращает Таблицу Номенклатуры С Дополнительными Свойствами по которым были остатки или движения за
// последние 183 дня, варианты запуска функции в зависимости от переданных в нее параметров слудующие.
// Если ВыгрузитьГруппы = 1 результат содержит все группы (без учета движений), Если ВыбКодРодителя = "" воз-
// вращается полный справочник, "9000001" - обрабатываются только первые 40000 движений упорядоченных по коду
// элементов справочника номенклатуры, и если за прошлые полгода было движение они выводятся в таблицу результата,
// "9000002" - в полном упорядоченном по коду справочнике номенклатуры пропускаются первые 39900 элементов
// (чтобы исключить ситуацию что Логисты Сигма успеют вставить новые элементы в первую часть выгрузки, а они
// интенсивно вволдят новые позиции в справочник Сигма) затем по оставшейся после пропуска части полного
// справочника делается запрос по движению товара и если были движения обработка номенклатуры выводится в
// таблицу результата функции. В каждой строке результата вставлена таблица "штук" и таблица "упаковок", а так
// же результат запроса по движению товара. Вспомогательная функция СформироватьТаблицуГруппНоменклатуры
// не учитывает движения и выгружает все не помеченные на удаления группы номенклатуры без исключения.
// Группы номенклатуры выгружаются всегда полностью независимо от значения установленного кода выбранной группы.
// Для запуска:
//Процедура СформироватьГруппыНоменклатуры()
// КодГруппы = "Кб20871";
// ТЗ = СформироватьТаблицуГруппНоменклатуры("",1);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
//Процедура Сформировать()
// КодГруппы = "Кб20871";
// ТЗ = глСформироватьТаблицуНоменклатурыСДопСвойствами(КодГруппы,0);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьТаблицуНоменклатурыСДопСвойствами(ВыбКодРодителя = "", ВыгрузитьГруппы = 0) Экспорт
Перем СписокНоменклатуры;
Перем ВыбНоменклатура,ВыбНоменклатура2;
Перем Запрос, ТекстЗапроса, Таб;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если ВыгрузитьГруппы = 1 Тогда
ТЗ = СформироватьТаблицуГруппНоменклатуры(ВыбКодРодителя, 1);
Возврат ТЗ;
КонецЕсли;
ВыбНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
ВыбНоменклатура2 = СоздатьОбъект("Справочник.Номенклатура");
ВыбКонПериода = ТекущаяДата();
ВыбНачПериода = ВыбКонПериода-183;
Если ВыбКонПериода>ПолучитьДатуТА() Тогда
ВыбКонПериода=ПолучитьДатуТА();
КонецЕсли;
//Сообщить("Движения");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ВыгрузитьДвижения)
|Период с ВыбНачПериода по ВыбКонПериода;
|Фирма = Регистр.ОстаткиТМЦ.Фирма;
|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
|Склад = Регистр.ОстаткиТМЦ.Склад;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|Функция КоличествоНачОст = НачОст(Количество);
|Функция КоличествоПриход = Приход(Количество);
|Функция КоличествоРасход = Расход(Количество);
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка Номенклатура без групп упорядочить по Номенклатура.Код;";
Если СокрЛП(ВыбКодРодителя) > "" Тогда
ВыбНоменклатура2.НайтиПоКоду(ВыбКодРодителя);
ВыбНоменклатура = ВыбНоменклатура2.ТекущийЭлемент();
ТекстЗапроса = ТекстЗапроса + "
|Условие(Номенклатура В ВыбНоменклатура);
|";
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ33 = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,3,0);
ТЗ.Свернуть("Номенклатура","КоличествоНачОст,КоличествоПриход,КоличествоРасход,КоличествоКонОст");
ТЗ33.Загрузить(ТЗ);
//глПечатьТаблицы(ТЗ33);
ТЗ.УдалитьКолонку("КоличествоНачОст");
ТЗ.УдалитьКолонку("КоличествоПриход");
ТЗ.УдалитьКолонку("КоличествоРасход");
ТЗ.УдалитьКолонку("КоличествоКонОст");
//глПечатьТаблицы(ТЗ);
КолСтрСпискаНоменклатуры = ТЗ.КоличествоСтрок();
Если КолСтрСпискаНоменклатуры = 0 Тогда
Возврат ТЗ;
КонецЕсли;
ТЗ.ВыбратьСтроки();
СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
Сч = 0;
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
Сч = Сч + 1;
Если ВыбКодРодителя = "9000001" Тогда
Если Сч > КолСтрСпискаНоменклатуры/2+50 Тогда
Прервать;
КонецЕсли;
ИначеЕсли ВыбКодРодителя = "9000002" Тогда
Если Сч < КолСтрСпискаНоменклатуры/2-50 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
СписокНоменклатуры.ДобавитьЗначение(ТЗ.Номенклатура.ТекущийЭлемент());
КонецЦикла;
//
//Сообщить("Товары");
//|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
//|Группировка ТекущийЭлемент;
//|Условие(ТекущийЭлемент В ВыбНоменклатура);
Запрос = СоздатьОбъект("Запрос");
//спиртсодержащий - это разделитель (наличие номенклатуры в Инфорр) при разбитии заявки на Эксид и Инфор
ТекстЗапроса =
"ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|КодНоменклатуры = Справочник.Номенклатура.Код;
|Наименование = Справочник.Номенклатура.Наименование;
//|Родитель = Справочник.Номенклатура.Родитель.Наименование;
//|РодКод = Справочник.Номенклатура.Родитель.Код;
|Артикул = Справочник.Номенклатура.Артикул;
|БазЕдКод = Справочник.Номенклатура.БазоваяЕдиница.Код;
|БазЕдОКЕИ = Справочник.Номенклатура.БазоваяЕдиница.ОКЕИ.Код;
|БазЕдВес = Справочник.Номенклатура.БазоваяЕдиница.Вес;
|БазЕдКоэф = Справочник.Номенклатура.БазоваяЕдиница.Коэффициент;
|БазЕдШтрихКод = Справочник.Номенклатура.БазоваяЕдиница.ШтрихКод;
//|БазЕдДатаСоздания = Справочник.Номенклатура.БазоваяЕдиница.ДатаСоздания;
|БазЕдВесБрутто = Справочник.Номенклатура.БазоваяЕдиница.ВесБрутто;
|ВидНоменклатуры = Справочник.Номенклатура.ВидНоменклатуры;
//|МинОстаток = Справочник.Номенклатура.МинОстаток;
|НомерГТД = Справочник.Номенклатура.НомерГТД;
|КодГТД = Справочник.Номенклатура.НомерГТД.Код;
|ОснЕдКод = Справочник.Номенклатура.ОсновнаяЕдиница.Код;
|ОснЕдОКЕИ = Справочник.Номенклатура.ОсновнаяЕдиница.ОКЕИ.Код;
|ОснЕдВес = Справочник.Номенклатура.ОсновнаяЕдиница.Вес;
|ОснЕдКоэф = Справочник.Номенклатура.ОсновнаяЕдиница.Коэффициент;
|ОснЕдШтрихКод = Справочник.Номенклатура.ОсновнаяЕдиница.ШтрихКод;
//|ОснЕдДатаСоздания = Справочник.Номенклатура.ОсновнаяЕдиница.ДатаСоздания;
|ОснЕдВесБрутто = Справочник.Номенклатура.ОсновнаяЕдиница.ВесБрутто;
|СтавкаНДС = Справочник.Номенклатура.СтавкаНДС;
|СтранаПроисхожденияКод = Справочник.Номенклатура.СтранаПроисхождения.Код;
|СтранаПроисхожденияНаименование = Справочник.Номенклатура.СтранаПроисхождения.Наименование;
|КатегорияКод = Справочник.Номенклатура.Категория.Код;
|КатегорияНаим = Справочник.Номенклатура.Категория.Наименование;
|ДелениеИнфорСпиртОтдельно = Справочник.Номенклатура.Спиртосодержащий;
|Объем = Справочник.Номенклатура.Объем;
//|СкладскойНомер = Справочник.Номенклатура.СкладскойНомер;
|ВыгруженВExceed = Справочник.Номенклатура.ВыгруженВExceed;
//|Справка = Справочник.Номенклатура.Справка;
//|ОсновнойТовар = Справочник.Номенклатура.ОсновнойТовар;
//|КодАкции = Справочник.Номенклатура.КодАкции;
|КодКлиента = Справочник.Номенклатура.КодКлиента;
|ЗагруженSkugroup2 = Справочник.Номенклатура.skugroup2;
|ЗагруженPutAwayStrategyKey = Справочник.Номенклатура.PutAwayStrategyKey;
|ЗагруженLOTTABLE06LABEL = Справочник.Номенклатура.LOTTABLE06LABEL;
|КоличествоВСпайкеСотников = Справочник.Номенклатура.КоличествоВСпайке;
|КоличествоВСкладскойУпаковкеСотников = Справочник.Номенклатура.КоличествоВСкладскойУпаковке;
|Приоритет = Справочник.Номенклатура.Приоритет;
|Код7Дней = Справочник.Номенклатура.Код7Дней;
|СрокГодности = Справочник.Номенклатура.СрокГодности;
|ДатаНачалаДействияСертификата = Справочник.Номенклатура.ДатаНачалаДействияСертификата;
|ДатаОкончанияДействияСертификата = Справочник.Номенклатура.ДатаОкончанияДействияСертификата;
|ДатаЗагрузкиСертификата = Справочник.Номенклатура.ДатаЗагрузкиСертификата;
|НоменклатураИнфор = Справочник.Номенклатура.НоменклатураИнфор;
|Группировка ТекущийЭлемент упорядочить по ТекущийЭлемент.Код;
|Условие(ТекущийЭлемент В СписокНоменклатуры);";
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,3,0);
ТЗ.НоваяКолонка("РодКод");
ТЗ.НоваяКолонка("РодНаим");
ТЗ.НоваяКолонка("Родитель");
ТЗ.НоваяКолонка("Род");
//Добавим свойства номенклатуры
//ТЗ.НоваяКолонка("Секц");
ТЗ.НоваяКолонка("Коллек");
ТЗ.НоваяКолонка("Шварц");
ТЗ.НоваяКолонка("Серт");
ТЗ.НоваяКолонка("НомерСертификата");
ТЗ.НоваяКолонка("ПримечаниеВыданСертификат");
//ТЗ.НоваяКолонка("Качест");
//ТЗ.НоваяКолонка("РезервДляТорговыхСетей");
ТЗ.НоваяКолонка("Комментарий");
ТЗ.НоваяКолонка("ПолнНаименование");
ТЗ.НоваяКолонка("ТолькоОсновная");
//ТЗ.НоваяКолонка("НеВключатьВПрайс");
//ТЗ.НоваяКолонка("НаценкаНеБолее15");
ТЗ.НоваяКолонка("Штуки");
ТЗ.НоваяКолонка("Упаковки");
ТЗ.НоваяКолонка("НачОст");
ТЗ.НоваяКолонка("Приход");
ТЗ.НоваяКолонка("Расход");
ТЗ.НоваяКолонка("КонОст");
ТЗ.НоваяКолонка("УдСтр");
СправочникОКЕИ = СоздатьОбъект("Справочник.ОКЕИ");
СправочникОКЕИ.НайтиПоКоду("008");
Уп1 = СправочникОКЕИ.ТекущийЭлемент();
СправочникОКЕИ.НайтиПоКоду("778");
Уп2 = СправочникОКЕИ.ТекущийЭлемент();
СправочникОКЕИ.НайтиПоКоду("000");
Уп3 = СправочникОКЕИ.ТекущийЭлемент();
СправочникОКЕИ.НайтиПоКоду("999");//спайка
Уп4 = СправочникОКЕИ.ТекущийЭлемент();
//заполним свойства и подчиненные
ТекНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
ТекЕд = СоздатьОбъект("Справочник.Единицы");
СправочникЕдиницы = СоздатьОбъект("Справочник.Единицы");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТекНоменклатура.НайтиЭлемент(ТЗ.ТекущийЭлемент);
Если ВыгрузитьГруппы > 0 Тогда
Если ТекНоменклатура.ЭтоГруппа()=0 Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
ИначеЕсли ТекНоменклатура.ПометкаУдаления()=1 Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
Если ТекНоменклатура.ЭтоГруппа()=0 Тогда
ТЗ.БазЕдКод = ЗначениеВСтрокуВнутр(ТекНоменклатура.БазоваяЕдиница);
ТЗ.КодГТД = ЗначениеВСтрокуВнутр(ТекНоменклатура.НомерГТД);
ТЗ.ОснЕдКод = ЗначениеВСтрокуВнутр(ТекНоменклатура.ОсновнаяЕдиница);
//Секц = глПолучитьСвойство(ТЗ.ТекущийЭлемент,"Секция");
//ТЗ.Секц = Секц;
Коллек = глПолучитьСвойство(ТекНоменклатура,"Коллекция");
ТЗ.Коллек = Коллек;
Шварц = глПолучитьСвойство(ТекНоменклатура,"Шварцкопф");
ТЗ.Шварц = Шварц;
Серт = СокрЛП(глПолучитьСвойство(ТекНоменклатура,"Сертификат"));
ТЗ.Серт = Серт;
КонецНомераСертификата = Найти(Серт, " с ");
Если КонецНомераСертификата = 0 Тогда
КонецНомераСертификата = СтрДлина(Серт);
КонецЕсли;
Если Найти(Серт, "Декл. о сертиф.")> 0 Тогда
НомерСертификата = СокрЛП(Сред(Серт,17,КонецНомераСертификата-16));
Иначе
НомерСертификата = СокрЛП(Лев(Серт,КонецНомераСертификата));
КонецЕсли;
ТЗ.НомерСертификата = СтрЗаменить(НомерСертификата,"Декл.о соотв.","");
КонецДатыОкончанияДействияСертификата = Найти (Серт, " выдан ")+7;
Если КонецДатыОкончанияДействияСертификата=7 Тогда
КонецДатыОкончанияДействияСертификата = Найти (Серт, "орг.по серт.") + 12;
Если КонецДатыОкончанияДействияСертификата = 0 Тогда
КонецДатыОкончанияДействияСертификата = СтрДлина(Серт);
КонецЕсли;
КонецЕсли;
ПримечаниеВыданСертификат = Прав(Серт,СтрДлина(Серт) - КонецДатыОкончанияДействияСертификата+1);
ТЗ.ПримечаниеВыданСертификат = ПримечаниеВыданСертификат;
//Качест = СокрЛП(глПолучитьСвойство(ТЗ.ТекущийЭлемент,"Качественник"));
//ТЗ.Качест = Качест;
//РезервДляТорговыхСетей = Число(глПолучитьСвойство(ТЗ.ТекущийЭлемент,"РезервДляТорговыхСетей"));
//ТЗ.РезервДляТорговыхСетей = РезервДляТорговыхСетей;
ТЗ.Комментарий = СтрЗаменить(ТекНоменклатура.Комментарий,"skugroup2","");
ТЗ.ПолнНаименование = ТекНоменклатура.ПолнНаименование;
ТЗ.ТолькоОсновная = ТекНоменклатура.ТолькоОсновная;
//ТЗ.НеВключатьВПрайс = ТЗ.ТекущийЭлемент.НеВключатьВПрайс;
//ТЗ.НаценкаНеБолее15 = ТЗ.ТекущийЭлемент.НаценкаНеБолее15;
ТекСтрока = 0;
Если ТЗ33.НайтиЗначение(ТекНоменклатура.ТекущийЭлемент(), ТекСтрока, "Номенклатура") = 1 Тогда
Если ТекСтрока >0 Тогда
ТЗ.НачОст = ТЗ33.ПолучитьЗначение(ТекСтрока,"КоличествоНачОст");
ТЗ.Приход = ТЗ33.ПолучитьЗначение(ТекСтрока,"КоличествоПриход");
ТЗ.Расход = ТЗ33.ПолучитьЗначение(ТекСтрока,"КоличествоРасход");
ТЗ.КонОст = ТЗ33.ПолучитьЗначение(ТекСтрока,"КоличествоКонОст");
Иначе
ТЗ.УдСтр = 1;
Продолжить;
КонецЕсли;
Иначе
ТЗ.УдСтр = 1;
Продолжить;
КонецЕсли;
СправочникЕдиницы.ИспользоватьВладельца(ТекНоменклатура);
СправочникЕдиницы.ВыбратьЭлементы();
УчтеныШтуки = 0;
УчтеныУпаковки = 0;
//Добавим подчиненный единицы измерения штуки
ТЗ2 = СоздатьОбъект("ТаблицаЗначений");
ТЗ2.НоваяКолонка("ШтДоп1Код");
ТЗ2.НоваяКолонка("ШтДоп1ШК");
ТЗ2.НоваяКолонка("ШтДоп1ОКЕИ");
ТЗ2.НоваяКолонка("ШтДоп1Вес");
ТЗ2.НоваяКолонка("ШтДоп1ВесБрутто");
ТЗ2.НоваяКолонка("ШтДоп1Коэф");
//Добавим подчиненный единицы измерения - спайки и упаковки
ТЗ3 = СоздатьОбъект("ТаблицаЗначений");
ТЗ3.НоваяКолонка("УпДопКод1");
ТЗ3.НоваяКолонка("УпДопОКЕИ1");
ТЗ3.НоваяКолонка("УпДопШК1");
ТЗ3.НоваяКолонка("УпДопКоэф1");
Пока СправочникЕдиницы.ПолучитьЭлемент() = 1 Цикл
ТекЕд.НайтиЭлемент(СправочникЕдиницы.ТекущийЭлемент());
Если ТекЕд.ПометкаУдаления()=1 Тогда
Продолжить;
КонецЕсли;
Если (СправочникЕдиницы.ОКЕИ = Уп1) ИЛИ (СправочникЕдиницы.ОКЕИ = Уп2)
ИЛИ (СправочникЕдиницы.ОКЕИ = Уп3) ИЛИ (СправочникЕдиницы.ОКЕИ = Уп4) Тогда
//упаковки и спайки
ТЗ3.НоваяСтрока();
ТЗ3.УпДопКод1 = СправочникЕдиницы.Код;
ТЗ3.УпДопОКЕИ1 = СправочникЕдиницы.ОКЕИ.Код;
ТЗ3.УпДопШК1 = СправочникЕдиницы.ШтрихКод;
ТЗ3.УпДопКоэф1 = СправочникЕдиницы.Коэффициент;
УчтеныУпаковки = 1;
ИначеЕсли СокрЛП(СправочникЕдиницы.ШтрихКод)>"" Тогда
//штуки
ТЗ2.НоваяСтрока();
ТЗ2.ШтДоп1Код = СправочникЕдиницы.Код;
ТЗ2.ШтДоп1ШК = СправочникЕдиницы.ШтрихКод;
ТЗ2.ШтДоп1ОКЕИ = СправочникЕдиницы.ОКЕИ.Код;
ТЗ2.ШтДоп1Вес = СправочникЕдиницы.Вес;
ТЗ2.ШтДоп1ВесБрутто = СправочникЕдиницы.ВесБрутто;
ТЗ2.ШтДоп1Коэф = СправочникЕдиницы.Коэффициент;
УчтеныШтуки = 1;
КонецЕсли;
КонецЦикла;
Если УчтеныШтуки = 1 Тогда
ТЗ.Штуки = ТЗ2;
КонецЕсли;
Если УчтеныУпаковки = 1 Тогда
ТЗ.Упаковки = ТЗ3;
КонецЕсли;
ИначеЕсли ВыгрузитьГруппы = 0 Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
Если СокрЛП(ТЗ.КодНоменклатуры)="" Тогда
ТЗ.КодНоменклатуры = ТекНоменклатура.Код;
КонецЕсли;
Если СокрЛП(ТЗ.Наименование)="" Тогда
ТЗ.Наименование = ТекНоменклатура.Наименование;
КонецЕсли;
Если СокрЛП(ТЗ.Род)="" Тогда
ТЗ.Род = ТекНоменклатура.Родитель;
КонецЕсли;
Если СокрЛП(ТЗ.Родитель)="" Тогда
ТЗ.Родитель = ТекНоменклатура.Родитель;
КонецЕсли;
Если СокрЛП(ТЗ.РодНаим)="" Тогда
ТЗ.РодНаим = ТекНоменклатура.Родитель.Наименование;
КонецЕсли;
Если СокрЛП(ТЗ.РодКод)="" Тогда
ТЗ.РодКод = ТекНоменклатура.Родитель.Код;
КонецЕсли;
КонецЦикла;
Всего=ТЗ.Количествострок();
Сч=1;
Пока Сч<=Всего цикл
Состояние("Обработка строк: "+строка(Сч)+" из "+строка(Всего));
ТЗ.ПолучитьСтрокуПоНомеру(Сч);
Если ТЗ.УдСтр=1 Тогда
ТЗ.Удалитьстроку(Сч);
Всего = Всего-1;
Иначе
Сч=Сч+1;
КонецЕсли;
Конеццикла;
ТЗ.УдалитьКолонку("УдСтр");
ТЗ.УдалитьКолонку("ТекущийЭлемент_1");
// Сообщить("Готово");
Возврат ТЗ;
КонецФункции
//******************************************* глСформироватьНоменклатуруСДопСвойствами
// Функция возвращает Таблицу Номенклатуры С Дополнительными Свойствами без учета остатков и движений без
// исключения, варианты запуска функции в зависимости от значения параметра (код номенклатуры), кодов
// номенклатуры может быть несколько через разделитель строк. Для запуска:
//Процедура Сформировать()
// КодГруппы = "Кб20871";
// или
// КодГруппы = "Кб20871
// |Кб20872
// |Кб20873
// |Кб20874
// |Кб20875";
// ТЗ = глСформироватьНоменклатуруСДопСвойствами(КодГруппы);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
// Если ВыбКодРодителя = "" действие отменяется,
Функция глСформироватьНоменклатуруСДопСвойствами(ВыбКодРодителя = "") Экспорт
Перем СписокНоменклатуры;
Перем ВыбНоменклатура,ВыбНоменклатура2;
Перем Запрос, ТекстЗапроса, Таб;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если ВыбКодРодителя = "" Тогда
Возврат ТЗ;
КонецЕсли;
СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
ВыбНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
ВыбНоменклатура2 = СоздатьОбъект("Справочник.Номенклатура");
Для СчетчикЦикла = 1 По СтрКоличествоСтрок(ВыбКодРодителя) Цикл
СтрАнализа = СтрПолучитьСтроку(ВыбКодРодителя,СчетчикЦикла);
ВыбНоменклатура2.НайтиПоКоду(СтрАнализа);
Если СокрЛП(ВыбНоменклатура2)>"" Тогда
ВыбНоменклатура = ВыбНоменклатура2.ТекущийЭлемент();
СписокНоменклатуры.ДобавитьЗначение(ВыбНоменклатура.ТекущийЭлемент());
КонецЕсли;
КонецЦикла;
Если СписокНоменклатуры.РазмерСписка()=0 Тогда
Возврат ТЗ;
КонецЕсли;
//|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
//|Группировка ТекущийЭлемент;
//|Условие(ТекущийЭлемент В ВыбНоменклатура);
Запрос = СоздатьОбъект("Запрос");
//спиртсодержащий - это разделитель (наличие номенклатуры в Инфорр) при разбитии заявки на Эксид и Инфор
ТекстЗапроса =
"ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|КодНоменклатуры = Справочник.Номенклатура.Код;
|Наименование = Справочник.Номенклатура.Наименование;
//|Родитель = Справочник.Номенклатура.Родитель.Наименование;
//|РодКод = Справочник.Номенклатура.Родитель.Код;
|Артикул = Справочник.Номенклатура.Артикул;
|БазЕдКод = Справочник.Номенклатура.БазоваяЕдиница.Код;
|БазЕдОКЕИ = Справочник.Номенклатура.БазоваяЕдиница.ОКЕИ.Код;
|БазЕдВес = Справочник.Номенклатура.БазоваяЕдиница.Вес;
|БазЕдКоэф = Справочник.Номенклатура.БазоваяЕдиница.Коэффициент;
|БазЕдШтрихКод = Справочник.Номенклатура.БазоваяЕдиница.ШтрихКод;
//|БазЕдДатаСоздания = Справочник.Номенклатура.БазоваяЕдиница.ДатаСоздания;
|БазЕдВесБрутто = Справочник.Номенклатура.БазоваяЕдиница.ВесБрутто;
|ВидНоменклатуры = Справочник.Номенклатура.ВидНоменклатуры;
//|МинОстаток = Справочник.Номенклатура.МинОстаток;
|НомерГТД = Справочник.Номенклатура.НомерГТД;
|КодГТД = Справочник.Номенклатура.НомерГТД.Код;
|ОснЕдКод = Справочник.Номенклатура.ОсновнаяЕдиница.Код;
|ОснЕдОКЕИ = Справочник.Номенклатура.ОсновнаяЕдиница.ОКЕИ.Код;
|ОснЕдВес = Справочник.Номенклатура.ОсновнаяЕдиница.Вес;
|ОснЕдКоэф = Справочник.Номенклатура.ОсновнаяЕдиница.Коэффициент;
|ОснЕдШтрихКод = Справочник.Номенклатура.ОсновнаяЕдиница.ШтрихКод;
//|ОснЕдДатаСоздания = Справочник.Номенклатура.ОсновнаяЕдиница.ДатаСоздания;
|ОснЕдВесБрутто = Справочник.Номенклатура.ОсновнаяЕдиница.ВесБрутто;
|СтавкаНДС = Справочник.Номенклатура.СтавкаНДС;
|СтранаПроисхожденияКод = Справочник.Номенклатура.СтранаПроисхождения.Код;
|СтранаПроисхожденияНаименование = Справочник.Номенклатура.СтранаПроисхождения.Наименование;
|КатегорияКод = Справочник.Номенклатура.Категория.Код;
|КатегорияНаим = Справочник.Номенклатура.Категория.Наименование;
|ДелениеИнфорСпиртОтдельно = Справочник.Номенклатура.Спиртосодержащий;
|Объем = Справочник.Номенклатура.Объем;
//|СкладскойНомер = Справочник.Номенклатура.СкладскойНомер;
|ВыгруженВExceed = Справочник.Номенклатура.ВыгруженВExceed;
//|Справка = Справочник.Номенклатура.Справка;
//|ОсновнойТовар = Справочник.Номенклатура.ОсновнойТовар;
//|КодАкции = Справочник.Номенклатура.КодАкции;
|КодКлиента = Справочник.Номенклатура.КодКлиента;
|ЗагруженSkugroup2 = Справочник.Номенклатура.skugroup2;
|ЗагруженPutAwayStrategyKey = Справочник.Номенклатура.PutAwayStrategyKey;
|ЗагруженLOTTABLE06LABEL = Справочник.Номенклатура.LOTTABLE06LABEL;
|КоличествоВСпайкеСотников = Справочник.Номенклатура.КоличествоВСпайке;
|КоличествоВСкладскойУпаковкеСотников = Справочник.Номенклатура.КоличествоВСкладскойУпаковке;
|Приоритет = Справочник.Номенклатура.Приоритет;
|Код7Дней = Справочник.Номенклатура.Код7Дней;
|СрокГодности = Справочник.Номенклатура.СрокГодности;
|ДатаНачалаДействияСертификата = Справочник.Номенклатура.ДатаНачалаДействияСертификата;
|ДатаОкончанияДействияСертификата = Справочник.Номенклатура.ДатаОкончанияДействияСертификата;
|ДатаЗагрузкиСертификата = Справочник.Номенклатура.ДатаЗагрузкиСертификата;
|НоменклатураИнфор = Справочник.Номенклатура.НоменклатураИнфор;
|Группировка ТекущийЭлемент упорядочить по ТекущийЭлемент.Код без групп;
|Условие(ТекущийЭлемент В СписокНоменклатуры);";
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,3,0);
ТЗ.НоваяКолонка("РодКод");
ТЗ.НоваяКолонка("Род");
//Добавим свойства номенклатуры
//ТЗ.НоваяКолонка("Секц");
ТЗ.НоваяКолонка("Коллек");
ТЗ.НоваяКолонка("Шварц");
ТЗ.НоваяКолонка("Серт");
ТЗ.НоваяКолонка("НомерСертификата");
ТЗ.НоваяКолонка("ПримечаниеВыданСертификат");
//ТЗ.НоваяКолонка("Качест");
//ТЗ.НоваяКолонка("РезервДляТорговыхСетей");
ТЗ.НоваяКолонка("Комментарий");
ТЗ.НоваяКолонка("ПолнНаименование");
ТЗ.НоваяКолонка("ТолькоОсновная");
//ТЗ.НоваяКолонка("НеВключатьВПрайс");
//ТЗ.НоваяКолонка("НаценкаНеБолее15");
ТЗ.НоваяКолонка("Штуки");
ТЗ.НоваяКолонка("Упаковки");
ТЗ.НоваяКолонка("НачОст");
ТЗ.НоваяКолонка("Приход");
ТЗ.НоваяКолонка("Расход");
ТЗ.НоваяКолонка("КонОст");
ТЗ.НоваяКолонка("УдСтр");
СправочникОКЕИ = СоздатьОбъект("Справочник.ОКЕИ");
СправочникОКЕИ.НайтиПоКоду("008");
Уп1 = СправочникОКЕИ.ТекущийЭлемент();
СправочникОКЕИ.НайтиПоКоду("778");
Уп2 = СправочникОКЕИ.ТекущийЭлемент();
СправочникОКЕИ.НайтиПоКоду("000");
Уп3 = СправочникОКЕИ.ТекущийЭлемент();
СправочникОКЕИ.НайтиПоКоду("999");//спайка
Уп4 = СправочникОКЕИ.ТекущийЭлемент();
//заполним свойства и подчиненные
ТекНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
ТекЕд = СоздатьОбъект("Справочник.Единицы");
СправочникЕдиницы = СоздатьОбъект("Справочник.Единицы");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТекНоменклатура.НайтиЭлемент(ТЗ.ТекущийЭлемент);
Если ТекНоменклатура.ЭтоГруппа()=0 Тогда
ТЗ.БазЕдКод = ЗначениеВСтрокуВнутр(ТекНоменклатура.БазоваяЕдиница);
ТЗ.КодГТД = ЗначениеВСтрокуВнутр(ТекНоменклатура.НомерГТД);
ТЗ.ОснЕдКод = ЗначениеВСтрокуВнутр(ТекНоменклатура.ОсновнаяЕдиница);
//Секц = глПолучитьСвойство(ТЗ.ТекущийЭлемент,"Секция");
//ТЗ.Секц = Секц;
Коллек = глПолучитьСвойство(ТекНоменклатура,"Коллекция");
ТЗ.Коллек = Коллек;
Шварц = глПолучитьСвойство(ТекНоменклатура,"Шварцкопф");
ТЗ.Шварц = Шварц;
Серт = СокрЛП(глПолучитьСвойство(ТекНоменклатура,"Сертификат"));
ТЗ.Серт = Серт;
КонецНомераСертификата = Найти(Серт, " с ");
Если КонецНомераСертификата = 0 Тогда
КонецНомераСертификата = СтрДлина(Серт);
КонецЕсли;
Если Найти(Серт, "Декл. о сертиф.")> 0 Тогда
НомерСертификата = СокрЛП(Сред(Серт,17,КонецНомераСертификата-16));
Иначе
НомерСертификата = СокрЛП(Лев(Серт,КонецНомераСертификата));
КонецЕсли;
ТЗ.НомерСертификата = СтрЗаменить(НомерСертификата,"Декл.о соотв.","");
КонецДатыОкончанияДействияСертификата = Найти (Серт, " выдан ")+7;
Если КонецДатыОкончанияДействияСертификата=7 Тогда
КонецДатыОкончанияДействияСертификата = Найти (Серт, "орг.по серт.") + 12;
Если КонецДатыОкончанияДействияСертификата = 0 Тогда
КонецДатыОкончанияДействияСертификата = СтрДлина(Серт);
КонецЕсли;
КонецЕсли;
ПримечаниеВыданСертификат = Прав(Серт,СтрДлина(Серт) - КонецДатыОкончанияДействияСертификата+1);
ТЗ.ПримечаниеВыданСертификат = ПримечаниеВыданСертификат;
//Качест = СокрЛП(глПолучитьСвойство(ТЗ.ТекущийЭлемент,"Качественник"));
//ТЗ.Качест = Качест;
//РезервДляТорговыхСетей = Число(глПолучитьСвойство(ТЗ.ТекущийЭлемент,"РезервДляТорговыхСетей"));
//ТЗ.РезервДляТорговыхСетей = РезервДляТорговыхСетей;
ТЗ.Комментарий = СтрЗаменить(ТекНоменклатура.Комментарий,"skugroup2","");
ТЗ.ПолнНаименование = ТекНоменклатура.ПолнНаименование;
ТЗ.ТолькоОсновная = ТекНоменклатура.ТолькоОсновная;
//ТЗ.НеВключатьВПрайс = ТЗ.ТекущийЭлемент.НеВключатьВПрайс;
//ТЗ.НаценкаНеБолее15 = ТЗ.ТекущийЭлемент.НаценкаНеБолее15;
СправочникЕдиницы.ИспользоватьВладельца(ТекНоменклатура);
СправочникЕдиницы.ВыбратьЭлементы();
УчтеныШтуки = 0;
УчтеныУпаковки = 0;
//Добавим подчиненный единицы измерения штуки
ТЗ2 = СоздатьОбъект("ТаблицаЗначений");
ТЗ2.НоваяКолонка("ШтДоп1Код");
ТЗ2.НоваяКолонка("ШтДоп1ШК");
ТЗ2.НоваяКолонка("ШтДоп1ОКЕИ");
ТЗ2.НоваяКолонка("ШтДоп1Вес");
ТЗ2.НоваяКолонка("ШтДоп1ВесБрутто");
ТЗ2.НоваяКолонка("ШтДоп1Коэф");
//Добавим подчиненный единицы измерения - спайки и упаковки
ТЗ3 = СоздатьОбъект("ТаблицаЗначений");
ТЗ3.НоваяКолонка("УпДопКод1");
ТЗ3.НоваяКолонка("УпДопОКЕИ1");
ТЗ3.НоваяКолонка("УпДопШК1");
ТЗ3.НоваяКолонка("УпДопКоэф1");
Пока СправочникЕдиницы.ПолучитьЭлемент() = 1 Цикл
ТекЕд.НайтиЭлемент(СправочникЕдиницы.ТекущийЭлемент());
Если ТекЕд.ПометкаУдаления()=1 Тогда
Продолжить;
КонецЕсли;
Если (СправочникЕдиницы.ОКЕИ = Уп1) ИЛИ (СправочникЕдиницы.ОКЕИ = Уп2)
ИЛИ (СправочникЕдиницы.ОКЕИ = Уп3) ИЛИ (СправочникЕдиницы.ОКЕИ = Уп4) Тогда
//упаковки и спайки
ТЗ3.НоваяСтрока();
ТЗ3.УпДопКод1 = СправочникЕдиницы.Код;
ТЗ3.УпДопОКЕИ1 = СправочникЕдиницы.ОКЕИ.Код;
ТЗ3.УпДопШК1 = СправочникЕдиницы.ШтрихКод;
ТЗ3.УпДопКоэф1 = СправочникЕдиницы.Коэффициент;
УчтеныУпаковки = 1;
ИначеЕсли СокрЛП(СправочникЕдиницы.ШтрихКод)>"" Тогда
//штуки
ТЗ2.НоваяСтрока();
ТЗ2.ШтДоп1Код = СправочникЕдиницы.Код;
ТЗ2.ШтДоп1ШК = СправочникЕдиницы.ШтрихКод;
ТЗ2.ШтДоп1ОКЕИ = СправочникЕдиницы.ОКЕИ.Код;
ТЗ2.ШтДоп1Вес = СправочникЕдиницы.Вес;
ТЗ2.ШтДоп1ВесБрутто = СправочникЕдиницы.ВесБрутто;
ТЗ2.ШтДоп1Коэф = СправочникЕдиницы.Коэффициент;
УчтеныШтуки = 1;
КонецЕсли;
КонецЦикла;
Если УчтеныШтуки = 1 Тогда
ТЗ.Штуки = ТЗ2;
КонецЕсли;
Если УчтеныУпаковки = 1 Тогда
ТЗ.Упаковки = ТЗ3;
КонецЕсли;
КонецЕсли;
Если СокрЛП(ТЗ.КодНоменклатуры)="" Тогда
ТЗ.КодНоменклатуры = ТекНоменклатура.Код;
КонецЕсли;
Если СокрЛП(ТЗ.Наименование)="" Тогда
ТЗ.Наименование = ТекНоменклатура.Наименование;
КонецЕсли;
Если СокрЛП(ТЗ.Род)="" Тогда
ТЗ.Род = ТекНоменклатура.Родитель.Наименование;
КонецЕсли;
Если СокрЛП(ТЗ.РодКод)="" Тогда
ТЗ.РодКод = ТекНоменклатура.Родитель.Код;
КонецЕсли;
КонецЦикла;
Всего=ТЗ.Количествострок();
Сч=1;
Пока Сч<=Всего цикл
Состояние("Обработка строк: "+строка(Сч)+" из "+строка(Всего));
ТЗ.ПолучитьСтрокуПоНомеру(Сч);
Если ТЗ.УдСтр=1 Тогда
ТЗ.Удалитьстроку(Сч);
Всего = Всего-1;
Иначе
Сч=Сч+1;
КонецЕсли;
Конеццикла;
ТЗ.УдалитьКолонку("УдСтр");
ТЗ.УдалитьКолонку("ТекущийЭлемент_1");
// Сообщить("Готово");
Возврат ТЗ;
КонецФункции
//******************************************* глСформироватьОперативныеОстатки ************************************
// делается обход выборки справочника номенклатуры по заданному коду группы, формируется таблица значений с данными
// регистров, у которых используются методы чтения остатков для извлечения оперативных итогов на точку актуальности
// из Регистр.ПартииНаличие, Регистр.РезервыТМЦ, Регистр.Заказы, Регистр.ОстаткиТМЦ и добавляются в таблицу значений
// к этой номенклатуре. Регистр.ПартииНаличие отдает информацию только в разрезе МОЛов, поэтому соединение данных
// из других регистров делается в цикле с дублированием строк, где по МОЛу имеет значение только себестоимость.
//Процедура СформироватьОстатки()
// ТЗ = глСформироватьОперативныеОстатки(КодГруппы);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьОперативныеОстатки(КодГруппы) Экспорт
Перем ТаблицаФормы;
Перем ГлавныйСкладФирмы,ТранзитныйСклад,ТекущийСклад;
ГруппаНоменклатуры2 = СоздатьОбъект("Справочник.Номенклатура");
ГруппаНоменклатуры2.НайтиПоКоду(КодГруппы);
ОбъектАнализа = ГруппаНоменклатуры2.ТекущийЭлемент();
ГлавныйСкладФирмы = СоздатьОбъект("Справочник.Склады");
ГлавныйСкладФирмы.НайтиПоКоду("2");
ТранзитныйСклад = СоздатьОбъект("Справочник.Склады");
ТранзитныйСклад.НайтиПоКоду("Кб015");
ТекущийСклад = СоздатьОбъект("Справочник.Склады");
ПартииНаличие = СоздатьОбъект("Регистр.ПартииНаличие");
РезервыТМЦ = СоздатьОбъект("Регистр.РезервыТМЦ");
Заказы = СоздатьОбъект("Регистр.Заказы");
ТаблицаФормы = СоздатьОбъект("ТаблицаЗначений");
ТаблицаФормы.НоваяКолонка("Фирма", "Справочник.Фирмы" ,,, ,20,,1);
ТаблицаФормы.НоваяКолонка("Склад", "Справочник.Склады" ,,, ,20,,1);
ТаблицаФормы.НоваяКолонка("МОЛ", "Справочник.ФизЛица" ,,, ,20,,1);
ТаблицаФормы.НоваяКолонка("Номенклатура", "Справочник.Номенклатура" ,,, ,20,,1);
ТаблицаФормы.НоваяКолонка("Остаток","Число",15,2);
ТаблицаФормы.НоваяКолонка("ОстатокМола","Число",15,2);
ТаблицаФормы.НоваяКолонка("Резерв","Число",15,2);
ТаблицаФормы.НоваяКолонка("Заказ","Число",15,2);
ТаблицаФормы.НоваяКолонка("Единица", "Строка" ,,,"Ед." , 5,,2);
ТаблицаФормы.НоваяКолонка("СуммаУпр","Число",15,2);
Если ОбъектАнализа.ЭтоГруппа()=0 Тогда
ТаблОстатковПартии =СоздатьОбъект("ТаблицаЗначений");
ПартииНаличие.УстановитьЗначениеФильтра("Номенклатура", ОбъектАнализа, 1);
ПартииНаличие.ВыгрузитьИтоги(ТаблОстатковПартии,1,1);
ТаблОстатковПартии.Свернуть("Фирма,Мол","Количество,СуммаУпр");
ОстаткиФирмыСклада = СоздатьОбъект("Регистр.ОстаткиТМЦ");
ТаблОстатковФирмыСклада =СоздатьОбъект("ТаблицаЗначений");
ОстаткиФирмыСклада.УстановитьЗначениеФильтра("Номенклатура", ОбъектАнализа, 1);
ОстаткиФирмыСклада.ВыгрузитьИтоги(ТаблОстатковФирмыСклада,1,1);
ТаблОстатковФирмыСклада.Свернуть("Фирма, Склад","Количество");
ТаблРезервов =СоздатьОбъект("ТаблицаЗначений");
РезервыТМЦ.УстановитьЗначениеФильтра("Номенклатура", ОбъектАнализа, 1);
РезервыТМЦ.ВыгрузитьИтоги(ТаблРезервов,1,1);
ТаблЗаказов =СоздатьОбъект("ТаблицаЗначений");
Заказы.УстановитьЗначениеФильтра("Номенклатура", ОбъектАнализа, 1);
Заказы.ВыгрузитьИтоги(ТаблЗаказов,1,1);
ТаблОстатковПартии.ВыбратьСтроки();
Пока ТаблОстатковПартии.ПолучитьСтроку() = 1 Цикл
Если ТаблОстатковПартии.Количество <> 0 Тогда
Если СокрЛП(ТаблОстатковПартии.МОЛ)="" Тогда
ЗапОстатокМола = ТаблОстатковПартии.Количество;
ЗапСуммаУпр = ТаблОстатковПартии.СуммаУпр;
ТаблОстатковФирмыСклада.ВыбратьСтроки();
Пока ТаблОстатковФирмыСклада.ПолучитьСтроку() = 1 Цикл
Если ТаблОстатковФирмыСклада.Количество <> 0 Тогда
ТаблицаФормы.НоваяСтрока();
ТаблицаФормы.Номенклатура = ОбъектАнализа;
ТаблицаФормы.Склад = ТаблОстатковФирмыСклада.Склад;
ТаблицаФормы.Фирма = ТаблОстатковФирмыСклада.Фирма;
ТаблицаФормы.Остаток = ТаблОстатковФирмыСклада.Количество;
ТаблицаФормы.ОстатокМола = ЗапОстатокМола;
ТаблицаФормы.Единица = СокрЛП(ОбъектАнализа.БазоваяЕдиница);
ТаблицаФормы.СуммаУпр = ЗапСуммаУпр;
КонецЕсли;
КонецЦикла;
Иначе
ТаблицаФормы.НоваяСтрока();
ТаблицаФормы.Номенклатура = ОбъектАнализа;
ТаблицаФормы.МОЛ = ТаблОстатковПартии.МОЛ;
ТекущийСклад.НайтиПоРеквизиту("МОЛ",ТаблОстатковПартии.МОЛ,1);
ТаблицаФормы.Склад = ТекущийСклад.ТекущийЭлемент();
ТаблицаФормы.Фирма = ТаблОстатковПартии.Фирма;
ТаблицаФормы.Остаток = ТаблОстатковПартии.Количество;
ТаблицаФормы.ОстатокМола = ТаблОстатковПартии.Количество;
ТекСтрока = 0;
ТаблицаФормы.Единица = СокрЛП(ОбъектАнализа.БазоваяЕдиница);
ТаблицаФормы.СуммаУпр = ТаблОстатковПартии.СуммаУпр;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТаблРезервов.ВыбратьСтроки();
Пока ТаблРезервов.ПолучитьСтроку() = 1 Цикл // если есть ненулевые резервы при нулевых остатках
Если ТаблРезервов.Количество <> 0 Тогда
ТаблицаФормы.НоваяСтрока();
ТаблицаФормы.Номенклатура = ОбъектАнализа;
ТаблицаФормы.Фирма = ТаблРезервов.Фирма;
ТаблицаФормы.Склад = ТаблРезервов.Склад;
ТаблицаФормы.Остаток = "";
ТаблицаФормы.Резерв = ТаблРезервов.Количество;
ТекСтрока = 0;
Если ТаблЗаказов.НайтиЗначение(ТаблРезервов.Фирма, ТекСтрока, "Фирма") = 1 Тогда
ТаблицаФормы.Заказ = ТаблЗаказов.ПолучитьЗначение(ТекСтрока,"КоличествоПриход");
ТаблЗаказов.УдалитьСтроку(ТекСтрока);
КонецЕсли;
ТаблицаФормы.Единица = СокрЛП(ОбъектАнализа.БазоваяЕдиница);
КонецЕсли;
КонецЦикла;
ТаблЗаказов.ВыбратьСтроки();
Пока ТаблЗаказов.ПолучитьСтроку() = 1 Цикл // если есть ненулевые заказы при нулевых остатках и резервах
Если ТаблЗаказов.КоличествоПриход <> 0 Тогда
ТаблицаФормы.НоваяСтрока();
ТаблицаФормы.Номенклатура = ОбъектАнализа;
ТаблицаФормы.Фирма = ТаблЗаказов.Фирма;
ТаблицаФормы.Остаток = "";
ТаблицаФормы.Резерв = "";
ТаблицаФормы.Заказ = ТаблЗаказов.КоличествоПриход;
ТекСтрока = 0;
ТаблицаФормы.Единица = СокрЛП(ОбъектАнализа.БазоваяЕдиница);
КонецЕсли;
КонецЦикла;
Иначе
//ОбъектАнализа.ВыбратьЭлементы();
ОбъектАнализа2 = СоздатьОбъект("Справочник.Номенклатура");
ОбъектАнализа2.ИспользоватьРодителя(ОбъектАнализа);
ОбъектАнализа2.ВыбратьЭлементы();
Пока ОбъектАнализа2.ПолучитьЭлемент()=1 Цикл
Если ОбъектАнализа2.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
ТаблОстатковПартии =СоздатьОбъект("ТаблицаЗначений");
ПартииНаличие.УстановитьЗначениеФильтра("Номенклатура", ОбъектАнализа2.ТекущийЭлемент(), 1);
ПартииНаличие.ВыгрузитьИтоги(ТаблОстатковПартии,1,1);
ТаблОстатковПартии.Свернуть("Фирма,Мол","Количество,СуммаУпр");
ОстаткиФирмыСклада = СоздатьОбъект("Регистр.ОстаткиТМЦ");
ТаблОстатковФирмыСклада =СоздатьОбъект("ТаблицаЗначений");
ОстаткиФирмыСклада.УстановитьЗначениеФильтра("Номенклатура", ОбъектАнализа2.ТекущийЭлемент(), 1);
ОстаткиФирмыСклада.ВыгрузитьИтоги(ТаблОстатковФирмыСклада,1,1);
ТаблОстатковФирмыСклада.Свернуть("Фирма, Склад","Количество");
ТаблРезервов =СоздатьОбъект("ТаблицаЗначений");
РезервыТМЦ.УстановитьЗначениеФильтра("Номенклатура", ОбъектАнализа2.ТекущийЭлемент(), 1);
РезервыТМЦ.ВыгрузитьИтоги(ТаблРезервов,1,1);
ТаблРезервов.Свернуть("Фирма,Номенклатура,Склад","Количество");
ТаблЗаказов =СоздатьОбъект("ТаблицаЗначений");
Заказы.УстановитьЗначениеФильтра("Номенклатура", ОбъектАнализа2.ТекущийЭлемент(), 1);
Заказы.ВыгрузитьИтоги(ТаблЗаказов,1,1);
ТаблОстатковПартии.ВыбратьСтроки();
Пока ТаблОстатковПартии.ПолучитьСтроку() = 1 Цикл
Если ТаблОстатковПартии.Количество <> 0 Тогда
Если СокрЛП(ТаблОстатковПартии.МОЛ)="" Тогда
ЗапОстатокМола = ТаблОстатковПартии.Количество;
ЗапСуммаУпр = ТаблОстатковПартии.СуммаУпр;
ТаблОстатковФирмыСклада.ВыбратьСтроки();
Пока ТаблОстатковФирмыСклада.ПолучитьСтроку() = 1 Цикл
Если ТаблОстатковФирмыСклада.Количество <> 0 Тогда
Если СокрЛП(ТаблОстатковФирмыСклада.Склад.МОЛ)<>"" Тогда
Продолжить;
КонецЕсли;
ТаблицаФормы.НоваяСтрока();
ТаблицаФормы.Номенклатура = ОбъектАнализа2.ТекущийЭлемент();
ТаблицаФормы.Склад = ТаблОстатковФирмыСклада.Склад;
ТаблицаФормы.Фирма = ТаблОстатковФирмыСклада.Фирма;
ТаблицаФормы.Остаток = ТаблОстатковФирмыСклада.Количество;
ТаблицаФормы.ОстатокМола = ЗапОстатокМола;
ТаблицаФормы.Единица = СокрЛП(ОбъектАнализа2.БазоваяЕдиница);
ТаблицаФормы.СуммаУпр = ЗапСуммаУпр;
КонецЕсли;
КонецЦикла;
Иначе
ТаблицаФормы.НоваяСтрока();
ТаблицаФормы.Номенклатура = ОбъектАнализа2.ТекущийЭлемент();
ТаблицаФормы.МОЛ = ТаблОстатковПартии.МОЛ;
ТекущийСклад.НайтиПоРеквизиту("МОЛ",ТаблОстатковПартии.МОЛ,1);
ТаблицаФормы.Склад = ТекущийСклад.ТекущийЭлемент();
ТаблицаФормы.Фирма = ТаблОстатковПартии.Фирма;
ТаблицаФормы.Остаток = ТаблОстатковПартии.Количество;
ТаблицаФормы.ОстатокМола = ТаблОстатковПартии.Количество;
ТаблицаФормы.Единица = СокрЛП(ОбъектАнализа2.БазоваяЕдиница);
ТаблицаФормы.СуммаУпр = ТаблОстатковПартии.СуммаУпр;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТаблРезервов.ВыбратьСтроки();
Пока ТаблРезервов.ПолучитьСтроку() = 1 Цикл // если есть ненулевые резервы при нулевых остатках
Если ТаблРезервов.Количество <> 0 Тогда
ТаблицаФормы.НоваяСтрока();
ТаблицаФормы.Номенклатура = ОбъектАнализа2.ТекущийЭлемент();
ТаблицаФормы.Фирма = ТаблРезервов.Фирма;
ТаблицаФормы.Склад = ТаблРезервов.Склад;
ТаблицаФормы.Остаток = "";
ТаблицаФормы.Резерв = ТаблРезервов.Количество;
Если ТаблЗаказов.НайтиЗначение(ТаблРезервов.Фирма, ТекСтрока, "Фирма") = 1 Тогда
ТаблицаФормы.Заказ = ТаблЗаказов.ПолучитьЗначение(ТекСтрока,"КоличествоПриход");
ТаблЗаказов.УдалитьСтроку(ТекСтрока);
КонецЕсли;
ТаблицаФормы.Единица = СокрЛП(ОбъектАнализа2.БазоваяЕдиница);
КонецЕсли;
КонецЦикла;
ТаблЗаказов.ВыбратьСтроки();
Пока ТаблЗаказов.ПолучитьСтроку() = 1 Цикл // если есть ненулевые заказы при нулевых остатках и резервах
Если ТаблЗаказов.КоличествоПриход <> 0 Тогда
ТаблицаФормы.НоваяСтрока();
ТаблицаФормы.Номенклатура = ОбъектАнализа2.ТекущийЭлемент();
ТаблицаФормы.Фирма = ТаблЗаказов.Фирма;
ТаблицаФормы.Остаток = "";
ТаблицаФормы.Резерв = "";
ТаблицаФормы.Заказ = ТаблЗаказов.КоличествоПриход;
ТаблицаФормы.Единица = СокрЛП(ОбъектАнализа2.БазоваяЕдиница);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
ТаблицаФормы.Свернуть("Фирма,Склад,МОЛ,Номенклатура,Единица","Остаток,ОстатокМола,Резерв,Заказ,СуммаУпр");
ТаблицаФормы.НоваяКолонка("КодНоменклатуры");
ТаблицаФормы.НоваяКолонка("СуммаФирмыСклада");
ТаблицаФормы.ВыбратьСтроки();
Пока ТаблицаФормы.ПолучитьСтроку()=1 Цикл
ТаблицаФормы.КодНоменклатуры = ТаблицаФормы.Номенклатура.Код;
ТаблицаФормы.СуммаФирмыСклада = ТаблицаФормы.СуммаУпр/ТаблицаФормы.ОстатокМола*ТаблицаФормы.Остаток;
КонецЦикла;
Возврат ТаблицаФормы;
КонецФункции
//******************************************* глСформироватьРезервыНаДату *******************************************
// извлекает запросом резервы из Регистр.РезервыТМЦ по заданному коду группы (элемента) номенклатуры на заданную дату.
// Данные из регистров запросом принято извлекать на начало указанного дня. Пример запуска:
//Процедура СформироватьРезервы()
// КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьРезервыНаДату(КодГруппы,ВыбНачПериода);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьРезервыНаДату(КодГруппы,ДатаРезерва) Экспорт
Перем Запрос, ТекстЗапроса;
Перем ГруппаНоменклатуры2, ВыбНоменклатура;
Если ДатаРезерва>ПолучитьДатуТА() Тогда
ДатаРезерва=ПолучитьДатуТА();
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаРезерва по ДатаРезерва;
|Фирма = Регистр.РезервыТМЦ.Фирма;
|ФирмаКод = Регистр.РезервыТМЦ.Фирма.Код;
|Номенклатура = Регистр.РезервыТМЦ.Номенклатура;
|НомКод = Регистр.РезервыТМЦ.Номенклатура.Код;
|Склад = Регистр.РезервыТМЦ.Склад;
|СкладКод = Регистр.РезервыТМЦ.Склад.Код;
|СкладНаим = Регистр.РезервыТМЦ.Склад.Наименование;
|Количество = Регистр.РезервыТМЦ.Количество;
|Функция РезервНачОст = НачОст(Количество);
|Группировка Фирма;
|Группировка Номенклатура без групп;
|Группировка Склад;";
Если КодГруппы>"" Тогда
ГруппаНоменклатуры2 = СоздатьОбъект("Справочник.Номенклатура");
ГруппаНоменклатуры2.НайтиПоКоду(КодГруппы);
ВыбНоменклатура = ГруппаНоменклатуры2.ТекущийЭлемент();
ТекстЗапроса = ТекстЗапроса + "
|Условие(Номенклатура в ВыбНоменклатура);
|";
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,3,0);
//ТЗ.НоваяКолонка("СкладКод");
//ТЗ.ВыбратьСтроки();
//Пока ТЗ.ПолучитьСтроку()=1 Цикл
// ТЗ.Фирма = ТЗ.Фирма.Код;
// Если СокрЛП(ТЗ.Склад)>0 Тогда
// ТЗ.СкладКод = ТЗ.Склад.Код;
// КонецЕсли;
//КонецЦикла;
ТЗ.УдалитьКолонку("Количество");
ТЗ.УдалитьКолонку("Фирма");
ТЗ.УдалитьКолонку("Номенклатура");
ТЗ.УдалитьКолонку("Склад");
//глПечатьТаблицы(ТЗ);
Возврат ТЗ;
КонецФункции
//******************************************* глСформироватьПартииНаДату ********************************************
// извлекает запросом себестоимость из Регистр.ПартииНаличие по заданному коду группы (элемента) номенклатуры на
// заданную дату. Данные из регистров запросом принято извлекать на начало указанного дня. Пример запуска:
//Процедура СформироватьПартии()
// КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьПартииНаДату(КодГруппы,ВыбНачПериода);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьПартииНаДату(КодГруппы,ДатаОстатков) Экспорт
Перем Запрос, ТекстЗапроса;
Перем ТаблицаФормы;
Перем ГлавныйСкладФирмы,ТранзитныйСклад,ТекущийСклад;
Если ДатаОстатков>ПолучитьДатуТА() Тогда
ДатаОстатков=ПолучитьДатуТА();
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаОстатков по ДатаОстатков;
|Фирма = Регистр.ПартииНаличие.Фирма;
|ФирмаКод = Регистр.ПартииНаличие.Фирма.Код;
|МОЛ = Регистр.ПартииНаличие.МОЛ;
|МОЛКод = Регистр.ПартииНаличие.МОЛ.Код;
|Номенклатура = Регистр.ПартииНаличие.Номенклатура;
|НомКод = Регистр.ПартииНаличие.Номенклатура.Код;
|Количество = Регистр.ПартииНаличие.Количество;
|СуммУпр = Регистр.ПартииНаличие.СуммаУпр;
|Функция КоличествоНачОст = НачОст(Количество);
|Функция СуммУпрНачОст = НачОст(СуммУпр);
|Группировка Фирма;
|Группировка МОЛ;
|Группировка Номенклатура без групп;";
Если КодГруппы>"" Тогда
ГруппаНоменклатуры2 = СоздатьОбъект("Справочник.Номенклатура");
ГруппаНоменклатуры2.НайтиПоКоду(КодГруппы);
ВыбНоменклатура = ГруппаНоменклатуры2.ТекущийЭлемент();
ТекстЗапроса = ТекстЗапроса + "
|Условие(Номенклатура В ВыбНоменклатура);
|";
КонецЕсли;
ТаблОстатковПартии = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТаблОстатковПартии;
КонецЕсли;
Запрос.Выгрузить(ТаблОстатковПартии,3,0);
ТаблОстатковПартии.Свернуть("НомКод,ФирмаКод,МОЛКод","КоличествоНачОст,СуммУпрНачОст");
//ТаблОстатковПартии.НоваяКолонка("МолКод");
//ТаблОстатковПартии.ВыбратьСтроки();
//Пока ТаблОстатковПартии.ПолучитьСтроку()=1 Цикл
// ТаблОстатковПартии.Фирма = ТаблОстатковПартии.Фирма.Код;
// Если СокрЛП(ТаблОстатковПартии.Мол)>0 Тогда
// ТаблОстатковПартии.МолКод = ТаблОстатковПартии.Мол.Код;
// КонецЕсли;
//КонецЦикла;
//ТаблОстатковПартии.УдалитьКолонку("Количество");
Возврат ТаблОстатковПартии;
КонецФункции
//******************************************* глСформироватьОстаткиНаДату **************************************
// извлекает запросом остатки в разрезе фирмы и склада из Регистр.ОстаткиТМЦ по заданному коду группы (элемента)
// номенклатуры на заданную дату. Данные из регистров запросом принято извлекать на начало указанного дня. Пример
// запуска:
//Процедура СформироватьОстатки()
// КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьОстаткиНаДату(КодГруппы,ВыбНачПериода);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьОстаткиНаДату(КодГруппы,ДатаОстатка) Экспорт
Перем Запрос, ТекстЗапроса;
Перем ГруппаНоменклатуры2, ВыбНоменклатура;
Если ДатаОстатка>ПолучитьДатуТА() Тогда
ДатаОстатка=ПолучитьДатуТА();
КонецЕсли;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаОстатка по ДатаОстатка;
|Фирма = Регистр.ОстаткиТМЦ.Фирма;
|ФирмаКод = Регистр.ОстаткиТМЦ.Фирма.Код;
|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
|НомКод = Регистр.ОстаткиТМЦ.Номенклатура.Код;
|Склад = Регистр.ОстаткиТМЦ.Склад;
|СкладКод = Регистр.ОстаткиТМЦ.Склад.Код;
|СкладНаим = Регистр.ОстаткиТМЦ.Склад.Наименование;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|Функция ОстатокНачОст = НачОст(Количество);
|Группировка Фирма;
|Группировка Номенклатура без групп;
|Группировка Склад;";
Если КодГруппы>"" Тогда
ГруппаНоменклатуры2 = СоздатьОбъект("Справочник.Номенклатура");
ГруппаНоменклатуры2.НайтиПоКоду(КодГруппы);
ВыбНоменклатура = ГруппаНоменклатуры2.ТекущийЭлемент();
ТекстЗапроса = ТекстЗапроса + "
|Условие(Номенклатура в ВыбНоменклатура);
|";
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,3,0);
//приводит к Неопределено во всех полях
//ТЗ.НоваяКолонка("СкладКод");
//ТЗ.ВыбратьСтроки();
//Пока ТЗ.ПолучитьСтроку()=1 Цикл
// ТЗ.Фирма = ТЗ.Фирма.Код;
// ТЗ.СкладКод = ТЗ.Склад.Код;
//КонецЦикла;
ТЗ.УдалитьКолонку("Фирма");
ТЗ.УдалитьКолонку("Номенклатура");
ТЗ.УдалитьКолонку("Склад");
Возврат ТЗ;
КонецФункции
//******************************************* глСформироватьСоединениеПартииОстаткиРезервы **********************
// соединяет таблицы результата запроса резервов, остатков и себестоимости в разрезе склада и номенклатуры по за-
// данному коду группы (элемента) номенклатуры на заданную дату только по складам
// СпрСклад.НайтиПоКоду("2"); - главный склад фирмы Новосибирская
// СпрСклад.НайтиПоКоду("Кб017"); - брак
// СпрСклад.НайтиПоКоду("Кб019"); - Склад производственного брака
// СпрСклад.НайтиПоКоду("20"); - Склад спорных вопросов от ПОСТАВЩИКА
// СпрСклад.НайтиПоКоду("Кб015"); - Транзитный склад
// СпрСклад.НайтиПоКоду("Кб027"); - Склад брака по приходу
// Данные из регистров запросом принято извлекать на начало указанного дня. Пример запуска:
//Процедура СформироватьСоединение()
// КодГруппы = "Кб20871";ДатаОстатков = Дата(2017,12,20);
// ТЗ = глСформироватьСоединениеПартииОстаткиРезервы(КодГруппы, ДатаОстатков);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьСоединениеПартииОстаткиРезервы(КодГруппы,ДатаОстатков) Экспорт
Перем Запрос, ТекстЗапроса, Таб;
СпрСклад = СоздатьОбъект("Справочник.Склады");
ТЗСклады = СоздатьОбъект("ТаблицаЗначений");
ТЗСклады.НоваяКолонка("Склад");
ТЗСклады.НоваяСтрока();
СпрСклад.НайтиПоКоду("2");
ТЗСклады.Склад = СпрСклад.ТекущийЭлемент();
ТЗСклады.НоваяСтрока();
СпрСклад.НайтиПоКоду("Кб017");
ТЗСклады.Склад = СпрСклад.ТекущийЭлемент();
ТЗСклады.НоваяСтрока();
СпрСклад.НайтиПоКоду("Кб019");
ТЗСклады.Склад = СпрСклад.ТекущийЭлемент();
ТЗСклады.НоваяСтрока();
СпрСклад.НайтиПоКоду("20");
ТЗСклады.Склад = СпрСклад.ТекущийЭлемент();
ТЗСклады.НоваяСтрока();
СпрСклад.НайтиПоКоду("Кб015");
ТЗСклады.Склад = СпрСклад.ТекущийЭлемент();
ТЗСклады.НоваяСтрока();
СпрСклад.НайтиПоКоду("Кб027");
ТЗСклады.Склад = СпрСклад.ТекущийЭлемент();
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|КодНом = Справочник.Номенклатура.Код;
|Группировка ТекущийЭлемент без групп;
|Условие(ТекущийЭлемент В ВыбНоменклатура);
|"//}}ЗАПРОС
;
ГруппаНоменклатуры2 = СоздатьОбъект("Справочник.Номенклатура");
ГруппаНоменклатуры2.НайтиПоКоду(КодГруппы);
ВыбНоменклатура = ГруппаНоменклатуры2.ТекущийЭлемент();
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,1,0);
РТЗ = СоздатьОбъект("ТаблицаЗначений");
РТЗ.НоваяКолонка("Ключ");
РТЗ.НоваяКолонка("Склад");
РТЗ.НоваяКолонка("КодНом");
РТЗ.НоваяКолонка("Резерв");
РТЗ.НоваяКолонка("Остаток");
РТЗ.НоваяКолонка("ОстатокМОЛ");
РТЗ.НоваяКолонка("СуммаУпр");
ТЗ1 = глСформироватьРезервыНаДату(КодГруппы,ДатаОстатков);
ТЗ1.НоваяКолонка("Ключ");
ТЗ1.ВыбратьСтроки();
Пока ТЗ1.ПолучитьСтроку()=1 Цикл
ТЗ1.Ключ = СокрЛП(ТЗ1.Склад) + "_" + СокрЛП(ТЗ1.КодНом);
КонецЦикла;
ТЗ2 = глСформироватьПартииНаДату(КодГруппы,ДатаОстатков);
ТЗ2.НоваяКолонка("Ключ");
ТЗ2.ВыбратьСтроки();
Пока ТЗ2.ПолучитьСтроку()=1 Цикл
ТЗ2.Ключ = СокрЛП(ТЗ2.Мол) + "_" + СокрЛП(ТЗ2.КодНом);
КонецЦикла;
ТЗ3 = глСформироватьОстаткиНаДату(КодГруппы,ДатаОстатков);
ТЗ3.НоваяКолонка("Ключ");
ТЗ3.ВыбратьСтроки();
Пока ТЗ3.ПолучитьСтроку()=1 Цикл
ТЗ3.Ключ = СокрЛП(ТЗ3.Склад) + "_" + СокрЛП(ТЗ3.КодНом);
КонецЦикла;
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТЗСклады.ВыбратьСтроки();
Пока ТЗСклады.ПолучитьСтроку()=1 Цикл
РТЗ.НоваяСтрока();
РТЗ.Ключ = СокрЛП(ТЗСклады.Склад) + "_" + СокрЛП(ТЗ.КодНом);
РТЗ.Склад = ТЗСклады.Склад.ТекущийЭлемент();
РТЗ.КодНом = СокрЛП(ТЗ.КодНом);
НомСтр = 0;
Если ТЗ1.НайтиЗначение(РТЗ.Ключ,НомСтр,"Ключ")=1 Тогда
РТЗ.Резерв = ТЗ1.ПолучитьЗначение(НомСтр,"РезервНачОст");
КонецЕсли;
НомСтр = 0;
Если ТЗ2.НайтиЗначение(СокрЛП(ТЗСклады.Склад.Мол) + "_" + СокрЛП(ТЗ.КодНом),НомСтр,"Ключ")=1 Тогда
РТЗ.ОстатокМОЛ = ТЗ2.ПолучитьЗначение(НомСтр,"КоличествоНачОст");
РТЗ.СуммаУпр = ТЗ2.ПолучитьЗначение(НомСтр,"СуммУпрНачОст");
КонецЕсли;
НомСтр = 0;
Если ТЗ3.НайтиЗначение(РТЗ.Ключ,НомСтр,"Ключ")=1 Тогда
РТЗ.Остаток = ТЗ3.ПолучитьЗначение(НомСтр,"ОстатокНачОст");
КонецЕсли;
КонецЦикла;
КонецЦикла;
Всего=РТЗ.Количествострок();
Сч=1;
Пока Сч<=Всего цикл
Состояние("Обработка строк: "+строка(Сч)+" из "+строка(Всего));
РТЗ.ПолучитьСтрокуПоНомеру(Сч);
Если (СокрЛП(РТЗ.Резерв)="") И (СокрЛП(РТЗ.Остаток)="") Тогда // И (СокрЛП(РТЗ.ОстатокМОЛ)="") И (СокрЛП(РТЗ.СуммаУпр)="")
РТЗ.Удалитьстроку(Сч);
Всего = Всего-1;
Иначе
Сч=Сч+1;
КонецЕсли;
Конеццикла;
Возврат РТЗ;
КонецФункции
//******************************************* глСформироватьСоединениеПартииОстаткиРезервыЗаданСклад ************
// соединяет таблицы результата запроса резервов, остатков и себестоимости в разрезе склада и номенклатуры по за-
// данному коду группы (элемента) номенклатуры на заданную дату по единственному коду выбранного склада.
// Данные из регистров запросом принято извлекать на начало указанного дня. Пример запуска:
//Процедура СформироватьСоединение()
// КодСклада = "2";КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьСоединениеПартииОстаткиРезервыЗаданСклад(КодСклада,КодГруппы,ВыбНачПериода);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьСоединениеПартииОстаткиРезервыЗаданСклад(КодСклада,КодГруппы,ДатаОстатков) Экспорт
Перем Запрос, ТекстЗапроса, Таб;
СпрСклад = СоздатьОбъект("Справочник.Склады");
ТЗСклады = СоздатьОбъект("ТаблицаЗначений");
ТЗСклады.НоваяКолонка("Склад");
ТЗСклады.НоваяСтрока();
СпрСклад.НайтиПоКоду(КодСклада);
ТЗСклады.Склад = СпрСклад.ТекущийЭлемент();
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|КодНом = Справочник.Номенклатура.Код;
|Группировка ТекущийЭлемент без групп;
|Условие(ТекущийЭлемент В ВыбНоменклатура);
|"//}}ЗАПРОС
;
ГруппаНоменклатуры2 = СоздатьОбъект("Справочник.Номенклатура");
ГруппаНоменклатуры2.НайтиПоКоду(КодГруппы);
ВыбНоменклатура = ГруппаНоменклатуры2.ТекущийЭлемент();
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,1,0);
РТЗ = СоздатьОбъект("ТаблицаЗначений");
РТЗ.НоваяКолонка("Ключ");
РТЗ.НоваяКолонка("Склад");
РТЗ.НоваяКолонка("КодНом");
РТЗ.НоваяКолонка("Резерв");
РТЗ.НоваяКолонка("Остаток");
РТЗ.НоваяКолонка("ОстатокМОЛ");
РТЗ.НоваяКолонка("СуммаУпр");
ТЗ1 = глСформироватьРезервыНаДату(КодГруппы,ДатаОстатков);
ТЗ1.НоваяКолонка("Ключ");
ТЗ1.ВыбратьСтроки();
Пока ТЗ1.ПолучитьСтроку()=1 Цикл
ТЗ1.Ключ = СокрЛП(ТЗ1.Склад) + "_" + СокрЛП(ТЗ1.КодНом);
КонецЦикла;
ТЗ2 = глСформироватьПартииНаДату(КодГруппы,ДатаОстатков);
ТЗ2.НоваяКолонка("Ключ");
ТЗ2.ВыбратьСтроки();
Пока ТЗ2.ПолучитьСтроку()=1 Цикл
ТЗ2.Ключ = СокрЛП(ТЗ2.Мол) + "_" + СокрЛП(ТЗ2.КодНом);
КонецЦикла;
ТЗ3 = глСформироватьОстаткиНаДату(КодГруппы,ДатаОстатков);
ТЗ3.НоваяКолонка("Ключ");
ТЗ3.ВыбратьСтроки();
Пока ТЗ3.ПолучитьСтроку()=1 Цикл
ТЗ3.Ключ = СокрЛП(ТЗ3.Склад) + "_" + СокрЛП(ТЗ3.КодНом);
КонецЦикла;
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТЗСклады.ВыбратьСтроки();
Пока ТЗСклады.ПолучитьСтроку()=1 Цикл
РТЗ.НоваяСтрока();
РТЗ.Ключ = СокрЛП(ТЗСклады.Склад) + "_" + СокрЛП(ТЗ.КодНом);
РТЗ.Склад = ТЗСклады.Склад.ТекущийЭлемент();
РТЗ.КодНом = СокрЛП(ТЗ.КодНом);
НомСтр = 0;
Если ТЗ1.НайтиЗначение(РТЗ.Ключ,НомСтр,"Ключ")=1 Тогда
РТЗ.Резерв = ТЗ1.ПолучитьЗначение(НомСтр,"РезервНачОст");
КонецЕсли;
НомСтр = 0;
Если ТЗ2.НайтиЗначение(СокрЛП(ТЗСклады.Склад.Мол) + "_" + СокрЛП(ТЗ.КодНом),НомСтр,"Ключ")=1 Тогда
РТЗ.ОстатокМОЛ = ТЗ2.ПолучитьЗначение(НомСтр,"КоличествоНачОст");
РТЗ.СуммаУпр = ТЗ2.ПолучитьЗначение(НомСтр,"СуммУпрНачОст");
КонецЕсли;
НомСтр = 0;
Если ТЗ3.НайтиЗначение(РТЗ.Ключ,НомСтр,"Ключ")=1 Тогда
РТЗ.Остаток = ТЗ3.ПолучитьЗначение(НомСтр,"ОстатокНачОст");
КонецЕсли;
КонецЦикла;
КонецЦикла;
Всего=РТЗ.Количествострок();
Сч=1;
Пока Сч<=Всего цикл
Состояние("Обработка строк: "+строка(Сч)+" из "+строка(Всего));
РТЗ.ПолучитьСтрокуПоНомеру(Сч);
Если (СокрЛП(РТЗ.Резерв)="") И (СокрЛП(РТЗ.Остаток)="") Тогда // И (СокрЛП(РТЗ.ОстатокМОЛ)="") И (СокрЛП(РТЗ.СуммаУпр)="")
РТЗ.Удалитьстроку(Сч);
Всего = Всего-1;
Иначе
Сч=Сч+1;
КонецЕсли;
Конеццикла;
Возврат РТЗ;
КонецФункции
//******************************************* глСформироватьИсториюЦенЗаПериод ***************************
// извлекает историю изменения цен по дням с отбором по типу цен и номенклатуре (группа или элемент) и
// ограничением по дате начала истории. Пример запуска:
//Процедура СформироватьЦены()
// КодТипаЦен = "00007";КодГруппы = "Кб20871";ВыбНачПериода = Дата(2017,12,20);
// ТЗ = глСформироватьИсториюЦенЗаПериод(КодТипаЦен,КодГруппы,Дата(2017,01,01));
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьИсториюЦенЗаПериод(КодТипаЦен,КодГруппыНоменклатуры,ДатаНачала) Экспорт
Перем Запрос, ТекстЗапроса;
Если СокрЛП(ДатаНачала)=". ." Тогда
ДатаНачала = Дата(2017,01,01);
КонецЕсли;
ДатаКонца = ТекущаяДата();
ТипЦен2 = СоздатьОбъект("Справочник.ТипыЦен");
ТипЦен2.НайтиПоКоду(КодТипаЦен);
ТипЦен = ТипЦен2.ТекущийЭлемент();
ГруппаНоменклатуры2 = СоздатьОбъект("Справочник.Номенклатура");
ГруппаНоменклатуры2.НайтиПоКоду(КодГруппыНоменклатуры);
ГруппаНоменклатуры = ГруппаНоменклатуры2.ТекущийЭлемент();
//СписокЭлементов = СоздатьОбъект("СписокЗначений");
//СписокЭлементов.
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Обрабатывать НеПомеченныеНаУдаление;
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|Группировка ТекущийЭлемент без групп;
//|Условие(ТекущийЭлемент в СписокЭлементовМФ);
|Условие(ТекущийЭлемент в ГруппаНоменклатуры);
|"//}}ЗАПРОС
;
ТабЦен = СоздатьОбъект("ТаблицаЗначений");
ТабЦен.НоваяКолонка("ТипЦены");
ТабЦен.НоваяКолонка("НомКод");
ТабЦен.НоваяКолонка("Штрихкод");
ТабЦен.НоваяКолонка("Дата");
ТабЦен.НоваяКолонка("Цена");
Если ТипЦен.Выбран() = 0 Тогда
Возврат ТабЦен;
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТабЦен;
КонецЕсли;
ПерЦена = СоздатьОбъект("Периодический");
Цены = СоздатьОбъект("Справочник.Цены");
Ном = 1;
НомЭл = 1;
Пока Запрос.Группировка(1) = 1 Цикл
НомЭл = НомЭл + 1;
//ТабЦен.УдалитьСтроки();
Цены.ИспользоватьВладельца(Запрос.ТекущийЭлемент);
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() > 0 Цикл
Если Цены.ТипЦен = ТипЦен Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Цены.Выбран() = 0 Тогда
Продолжить;
КонецЕсли;
ПерЦена.ИспользоватьОбъект("Цена",Цены);
ПерЦена.ОбратныйПорядок(1);
ПерЦена.ВыбратьЗначения(,ДатаКонца);
Пока ПерЦена.ПолучитьЗначение() > 0 Цикл
Если (ПерЦена.ДатаЗнач <= ДатаНачала) Тогда
//Если ТабЦен.КоличествоСтрок() > 0 Тогда
ТабЦен.НоваяСтрока();
ТабЦен.ТипЦены = КодТипаЦен;
ТабЦен.НомКод = Цены.Владелец.Код;
ТабЦен.Штрихкод = Цены.Владелец.БазоваяЕдиница.ШтрихКод;
ТабЦен.Дата = ДатаНачала;
ТабЦен.Цена = ПерЦена.Значение;
//глПечатьТаблицы(ТабЦен);
//КонецЕсли;
Прервать;
Иначе
ТабЦен.НоваяСтрока();
ТабЦен.ТипЦены = КодТипаЦен;
ТабЦен.НомКод = Цены.Владелец.Код;
ТабЦен.Штрихкод = Цены.Владелец.БазоваяЕдиница.ШтрихКод;
ТабЦен.Дата = ПерЦена.ДатаЗнач;
ТабЦен.Цена = ПерЦена.Значение;
//глПечатьТаблицы(ТабЦен);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ТабЦен;
КонецФункции
Функция глСформироватьИсториюЦенЗаПериодДляERP(КодТипаЦен,КодГруппыНоменклатуры,ДатаНачала) Экспорт
Перем Запрос, ТекстЗапроса;
Если СокрЛП(ДатаНачала)=". ." Тогда
ДатаНачала = Дата(2017,01,01);
КонецЕсли;
ДатаКонца = ТекущаяДата();
ТипЦен2 = СоздатьОбъект("Справочник.ТипыЦен");
ТипЦен2.НайтиПоКоду(КодТипаЦен);
ТипЦен = ТипЦен2.ТекущийЭлемент();
ГруппаНоменклатуры2 = СоздатьОбъект("Справочник.Номенклатура");
ГруппаНоменклатуры2.НайтиПоКоду(КодГруппыНоменклатуры);
ГруппаНоменклатуры = ГруппаНоменклатуры2.ТекущийЭлемент();
//СписокЭлементов = СоздатьОбъект("СписокЗначений");
//СписокЭлементов.
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Обрабатывать НеПомеченныеНаУдаление;
|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
|Группировка ТекущийЭлемент без групп;
//|Условие(ТекущийЭлемент в СписокЭлементовМФ);
|Условие(ТекущийЭлемент в ГруппаНоменклатуры);
|"//}}ЗАПРОС
;
ТабЦен = СоздатьОбъект("ТаблицаЗначений");
ТабЦен.НоваяКолонка("ТипЦены");
ТабЦен.НоваяКолонка("НомКод");
//ТабЦен.НоваяКолонка("Штрихкод");
//ТабЦен.НоваяКолонка("Дата");
ТабЦен.НоваяКолонка("Цена");
Если ТипЦен.Выбран() = 0 Тогда
Возврат ТабЦен;
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТабЦен;
КонецЕсли;
ПерЦена = СоздатьОбъект("Периодический");
Цены = СоздатьОбъект("Справочник.Цены");
Ном = 1;
НомЭл = 1;
Пока Запрос.Группировка(1) = 1 Цикл
Если Запрос.ТекущийЭлемент.НоменклатураИнфор=0 Тогда
Продолжить;
КонецЕсли;
НомЭл = НомЭл + 1;
//ТабЦен.УдалитьСтроки();
Цены.ИспользоватьВладельца(Запрос.ТекущийЭлемент);
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() > 0 Цикл
Если Цены.ТипЦен = ТипЦен Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Цены.Выбран() = 0 Тогда
Продолжить;
КонецЕсли;
ПерЦена.ИспользоватьОбъект("Цена",Цены);
ПерЦена.ОбратныйПорядок(1);
ПерЦена.ВыбратьЗначения(,ДатаКонца);
Пока ПерЦена.ПолучитьЗначение() > 0 Цикл
Если (ПерЦена.ДатаЗнач <= ДатаНачала) Тогда
//Если ТабЦен.КоличествоСтрок() > 0 Тогда
ТабЦен.НоваяСтрока();
ТабЦен.НомКод = Цены.Владелец.Код;
ТабЦен.ТипЦены = СокрЛП(ТипЦен);
ТабЦен.Цена = ПерЦена.Значение;
//глПечатьТаблицы(ТабЦен);
//КонецЕсли;
Прервать;
Иначе
ТабЦен.НоваяСтрока();
ТабЦен.НомКод = Цены.Владелец.Код;
ТабЦен.ТипЦены = СокрЛП(ТипЦен);
ТабЦен.Цена = ПерЦена.Значение;
//глПечатьТаблицы(ТабЦен);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ТабЦен;
КонецФункции
//******************************************* глСформироватьИсториюЦенЗаПериодпоСсылке ***************************
// извлекает историю изменения цен по дням с отбором по типу цен и номенклатуре (группа или элемент) и
// ограничением по дате начала истории. Пример запуска:
//Процедура СформироватьЦены()
// ДатаОстатка = Дата(2017,01,01);
// ТипЦен2 = СоздатьОбъект("Справочник.ТипыЦен");
// ТипЦен2.НайтиПоКоду(КодТипаЦен);
// ТипЦен = ТипЦен2.ТекущийЭлемент();
// ТЗ = глСформироватьИсториюЦенЗаПериодПоСсылке(ТипЦен,ВыбранныйТовар,ДатаОстатка);
// глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьИсториюЦенЗаПериодПоСсылке(ТипЦен,ГруппаНоменклатур,ДатаНачала) Экспорт
Перем Запрос, ТекстЗапроса;
Если СокрЛП(ДатаНачала)=". ." Тогда
ДатаНачала = Дата(2017,01,01);
КонецЕсли;
ДатаКонца = ТекущаяДата();
ТабЦен = СоздатьОбъект("ТаблицаЗначений");
ТабЦен.НоваяКолонка("НомКод");
ТабЦен.НоваяКолонка("Штрихкод");
ТабЦен.НоваяКолонка("Дата");
ТабЦен.НоваяКолонка("Цена");
Если ТипЦен.Выбран() = 0 Тогда
Возврат ТабЦен;
КонецЕсли;
ПерЦена = СоздатьОбъект("Периодический");
Цены = СоздатьОбъект("Справочник.Цены");
Ном = 1;
НомЭл = 1;
НомЭл = НомЭл + 1;
//ТабЦен.УдалитьСтроки();
Цены.ИспользоватьВладельца(ГруппаНоменклатур);
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() > 0 Цикл
Если Цены.ТипЦен = ТипЦен Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Цены.Выбран() = 0 Тогда
Возврат ТабЦен;
КонецЕсли;
ПерЦена.ИспользоватьОбъект("Цена",Цены);
ПерЦена.ОбратныйПорядок(1);
ПерЦена.ВыбратьЗначения(,ДатаКонца);
Пока ПерЦена.ПолучитьЗначение() > 0 Цикл
Если (ПерЦена.ДатаЗнач <= ДатаНачала) Тогда
//Если ТабЦен.КоличествоСтрок() > 0 Тогда
ТабЦен.НоваяСтрока();
ТабЦен.НомКод = Цены.Владелец.Код;
ТабЦен.Штрихкод = Цены.Владелец.БазоваяЕдиница.ШтрихКод;
ТабЦен.Дата = ДатаНачала;
ТабЦен.Цена = ПерЦена.Значение;
//глПечатьТаблицы(ТабЦен);
//КонецЕсли;
Возврат ТабЦен;
Иначе
ТабЦен.НоваяСтрока();
ТабЦен.НомКод = Цены.Владелец.Код;
ТабЦен.Штрихкод = Цены.Владелец.БазоваяЕдиница.ШтрихКод;
ТабЦен.Дата = ПерЦена.ДатаЗнач;
ТабЦен.Цена = ПерЦена.Значение;
//глПечатьТаблицы(ТабЦен);
КонецЕсли;
КонецЦикла;
Возврат ТабЦен;
КонецФункции
//******************************************* глСформироватьТаблицуКонтрагентыЮрФизЛица **************
// извлекает свойства всех контрагентов (кроме группы устаревщих) по коду выбранной группы или элемента
// Пример запуска:
//Процедура СформироватьЦены()
//КодКонтрагента = "Кб002338";ВыгрузитьГруппы = 0;
//ТЗ = глСформироватьТаблицуКонтрагентыЮрФизЛица(КодКонтрагента, ВыгрузитьГруппы);
//глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьТаблицуКонтрагентыЮрФизЛица(КодКонтрагента="", ВыгрузитьГруппы=0) Экспорт
Перем Запрос, ТекстЗапроса;
ГруппаКонтрагентов2 = СоздатьОбъект("Справочник.Контрагенты");
ГруппаКонтрагентов = СоздатьОбъект("Справочник.Контрагенты");
ГруппаУстаревшие = СоздатьОбъект("Справочник.Контрагенты");
Если ГруппаУстаревшие.НайтиПоКоду("У0000001") = 0 Тогда
Возврат -1;
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Контрагенты)
|ТекущийЭлемент = Справочник.Контрагенты.ТекущийЭлемент;
|Код = Справочник.Контрагенты.Код;
|Наименование = Справочник.Контрагенты.Наименование;
//|Родитель = Справочник.Контрагенты.Родитель;
|ЮрФизЛицо = Справочник.Контрагенты.ЮрФизЛицо;
|ОсновнойДоговор = Справочник.Контрагенты.ОсновнойДоговор;
|ОсновнойСчет = Справочник.Контрагенты.ОсновнойСчет;
|Идентификатор = Справочник.Контрагенты.Идентификатор;
|ЭлПочта = Справочник.Контрагенты.ЭлПочта;
|Сайт = Справочник.Контрагенты.Сайт;
|ПрайсЛист = Справочник.Контрагенты.ПрайсЛист;
|ТоргОпция = Справочник.Контрагенты.ТоргОпция;
|МинСуммаКредита = Справочник.Контрагенты.МинСуммаКредита;
|Проводить = Справочник.Контрагенты.Проводить;
|Район = Справочник.Контрагенты.Район;
|КОБ = Справочник.Контрагенты.КОБ;
|Замена = Справочник.Контрагенты.Замена;
|КОБGillette = Справочник.Контрагенты.КОБGillette;
|КОБNivea = Справочник.Контрагенты.КОБNivea;
|ЭтоПоставщик = Справочник.Контрагенты.ЭтоПоставщик;
|КодПоставщика = Справочник.Контрагенты.КодПоставщика;
|ПерваяСтрока = Справочник.Контрагенты.ПерваяСтрока;
|КолонкаКоличество = Справочник.Контрагенты.КолонкаКоличество;
|КолонкаШтрихкода = Справочник.Контрагенты.КолонкаШтрихкода;
|КолонкаЦены = Справочник.Контрагенты.КолонкаЦены;
|КолонкаОстатка = Справочник.Контрагенты.КолонкаОстатка;
|НастоящиеПодписи = Справочник.Контрагенты.НастоящиеПодписи;
|ВыгруженВExceed = Справочник.Контрагенты.ВыгруженВExceed;
|Приоритет = Справочник.Контрагенты.Приоритет;
|НужнаТОРГ12 = Справочник.Контрагенты.НужнаТОРГ12;
|Пн = Справочник.Контрагенты.Пн;
|Вт = Справочник.Контрагенты.Вт;
|Ср = Справочник.Контрагенты.Ср;
|Чт = Справочник.Контрагенты.Чт;
|Пт = Справочник.Контрагенты.Пт;
|Сб = Справочник.Контрагенты.Сб;
|Вс = Справочник.Контрагенты.Вс;
|НеДействуетОграничениеПоСтроке = Справочник.Контрагенты.НеДействуетОграничениеПоСтроке;
|ДатаЗапретаРедактированияДокументовКонтрагента = Справочник.Контрагенты.ДатаЗапретаРедактированияДокументовКонтрагента;
//|ТекущийЭлемент1 = Справочник.Контрагенты.ЮрФизЛицо.ТекущийЭлемент;
|ЮрФизЛицоКод = Справочник.Контрагенты.ЮрФизЛицо.Код;
|ЮрФизЛицоНаименование = Справочник.Контрагенты.ЮрФизЛицо.Наименование;
|Группировка ТекущийЭлемент;";
Если СокрЛП(КодКонтрагента) > "" Тогда
//|Условие(ТекущийЭлемент В ВыбНоменклатура);
ГруппаКонтрагентов2.НайтиПоКоду(КодКонтрагента);
ГруппаКонтрагентов = ГруппаКонтрагентов2.ТекущийЭлемент();
//Сообщить(ВыбНоменклатура);
ТекстЗапроса = ТекстЗапроса + "
|Условие(ТекущийЭлемент В ГруппаКонтрагентов);
|";
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,3,0);
ТЗ.НоваяКолонка("Родитель");
ТЗ.НоваяКолонка("РодКод");
ТЗ.НоваяКолонка("ЮрКод");
ТЗ.НоваяКолонка("ЮрНаименование");
ТЗ.НоваяКолонка("ЮрПолнНаименование");
ТЗ.НоваяКолонка("ЮрИНН");
ТЗ.НоваяКолонка("ЮрОКПО");
ТЗ.НоваяКолонка("ЮрТелефоны");
ТЗ.НоваяКолонка("ЮрЮрАдрес");
ТЗ.НоваяКолонка("ЮрФактАдрес");
ТЗ.НоваяКолонка("ЮрКомментарий");
ТЗ.НоваяКолонка("ФизКод");
ТЗ.НоваяКолонка("ФизНаименование");
ТЗ.НоваяКолонка("ФизПолнНаименование");
ТЗ.НоваяКолонка("ФизИНН");
ТЗ.НоваяКолонка("ФизТелефоны");
ТЗ.НоваяКолонка("ФизЮрАдрес");
ТЗ.НоваяКолонка("ФизФактАдрес");
ТЗ.НоваяКолонка("ФизКомментарий");
ТЗ.НоваяКолонка("УдСтр");
ТекКонтрагент = СоздатьОбъект("Справочник.Контрагенты");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТекКонтрагент.НайтиЭлемент(ТЗ.ТекущийЭлемент);
Если ВыгрузитьГруппы > 0 Тогда
Если ТекКонтрагент.ЭтоГруппа()=0 Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
ИначеЕсли ((ТекКонтрагент.ЭтоГруппа()=0)
И (ТекКонтрагент.ПометкаУдаления()=1)) Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
Если (ТекКонтрагент.ПринадлежитГруппе(ГруппаУстаревшие) = 1) Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
Если ТекКонтрагент.ЭтоГруппа()=0 Тогда
Если ТекКонтрагент.ЮрФизЛицо.Вид() = "ФизЛица" Тогда
ТЗ.ФизКод = ТекКонтрагент.ЮрФизЛицо.Код;
ТЗ.ФизНаименование = ТекКонтрагент.ЮрФизЛицо.Наименование;
ТЗ.ФизПолнНаименование = ТекКонтрагент.ЮрФизЛицо.ПолнНаименование;
ТЗ.ФизИНН = ТекКонтрагент.ЮрФизЛицо.ИНН;
ТЗ.ФизТелефоны = ТекКонтрагент.ЮрФизЛицо.Телефоны;
ТЗ.ФизЮрАдрес = ТекКонтрагент.ЮрФизЛицо.ЮрАдрес;
ТЗ.ФизФактАдрес = ТекКонтрагент.ЮрФизЛицо.ФактАдрес;
ТЗ.ФизКомментарий = ТекКонтрагент.ЮрФизЛицо.Комментарий;
Иначе
ТЗ.ЮрКод = ТекКонтрагент.ЮрФизЛицо.Код;
ТЗ.ЮрНаименование = ТекКонтрагент.ЮрФизЛицо.Наименование;
ТЗ.ЮрПолнНаименование = ТекКонтрагент.ЮрФизЛицо.ПолнНаименование;
ТЗ.ЮрИНН = ТекКонтрагент.ЮрФизЛицо.ИНН;
ТЗ.ЮрОКПО = ТекКонтрагент.ЮрФизЛицо.ОКПО;
ТЗ.ЮрТелефоны = ТекКонтрагент.ЮрФизЛицо.Телефоны;
ТЗ.ЮрЮрАдрес = ТекКонтрагент.ЮрФизЛицо.ЮрАдрес;
ТЗ.ЮрФактАдрес = ТекКонтрагент.ЮрФизЛицо.ФактАдрес;
ТЗ.ЮрКомментарий = ТекКонтрагент.ЮрФизЛицо.Комментарий;
КонецЕсли;
ИначеЕсли ВыгрузитьГруппы = 0 Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
ТЗ.Код = ТекКонтрагент.Код;
ТЗ.Наименование = ТекКонтрагент.Наименование;
ТЗ.Родитель = СокрЛП(ТекКонтрагент.Родитель.Наименование);
ТЗ.РодКод = СокрЛП(ТекКонтрагент.Родитель.Код);
КонецЦикла;
Всего=ТЗ.Количествострок();
Сч=1;
Пока Сч<=Всего цикл
Состояние("Обработка строк: "+строка(Сч)+" из "+строка(Всего));
ТЗ.ПолучитьСтрокуПоНомеру(Сч);
Если ТЗ.УдСтр=1 Тогда
ТЗ.Удалитьстроку(Сч);
Всего = Всего-1;
Иначе
Сч=Сч+1;
КонецЕсли;
Конеццикла;
ТЗ.УдалитьКолонку("УдСтр");
//глПечатьТаблицы(ТЗ);
Возврат ТЗ;
КонецФункции
Функция глБылВДокументахКонтрагент(КодКонтрагента) Экспорт
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ГруппаКонтрагентов2 = СоздатьОбъект("Справочник.Контрагенты");
ГруппаКонтрагентов = СоздатьОбъект("Справочник.Контрагенты");
ГруппаКонтрагентов2.НайтиПоКоду(КодКонтрагента);
ГруппаКонтрагентов = ГруппаКонтрагентов2.ТекущийЭлемент();
НайтиСсылки(ГруппаКонтрагентов,ТЗ);
Возврат ТЗ;
КонецФункции
Функция глБылВоВзаиморасчетахКонтрагентБУ(КодКонтрагента) Экспорт
Сообщить(ТекущееВремя());
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ГруппаКонтрагентов2 = СоздатьОбъект("Справочник.Контрагенты");
ГруппаКонтрагентов = СоздатьОбъект("Справочник.Контрагенты");
ГруппаКонтрагентов2.НайтиПоКоду(КодКонтрагента);
ГруппаКонтрагентов = ГруппаКонтрагентов2.ТекущийЭлемент();
НачПериодаПечати = Дата(2017,01,01);
КонПериодаПечати = ТекущаяДата();
Организация = СоздатьОбъект("Справочник.СвоиЮрЛица");
Организация.НайтиПоКоду("00001");
ВыбРазделительУчета = Организация.ТекущийЭлемент();
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьРазделительУчета(ВыбРазделительУчета);
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ГруппаКонтрагентов, 2);
Ит.ВыполнитьЗапрос(НачПериодаПечати, КонПериодаПечати,"60.1", ,, 1, "Проводка", "ДО");
Ит.ВыбратьПериоды();
Если Ит.ПолучитьПериод() = 1 Тогда
Опер = Ит.Операция;
Возврат Опер;
КонецЕсли;
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьРазделительУчета(ВыбРазделительУчета);
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ГруппаКонтрагентов, 2);
Ит.ВыполнитьЗапрос(НачПериодаПечати, КонПериодаПечати,"60.2", ,, 1, "Проводка", "ДО");
Ит.ВыбратьПериоды();
Если Ит.ПолучитьПериод() = 1 Тогда
Опер = Ит.Операция;
Возврат Опер;
КонецЕсли;
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьРазделительУчета(ВыбРазделительУчета);
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ГруппаКонтрагентов, 2);
Ит.ВыполнитьЗапрос(НачПериодаПечати, КонПериодаПечати,"62.1", ,, 1, "Проводка", "ДО");
Ит.ВыбратьПериоды();
Если Ит.ПолучитьПериод() = 1 Тогда
Опер = Ит.Операция;
Возврат Опер;
КонецЕсли;
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьРазделительУчета(ВыбРазделительУчета);
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ГруппаКонтрагентов, 2);
Ит.ВыполнитьЗапрос(НачПериодаПечати, КонПериодаПечати,"62.2", ,, 1, "Проводка", "ДО");
Ит.ВыбратьПериоды();
Если Ит.ПолучитьПериод() = 1 Тогда
Опер = Ит.Операция;
Возврат Опер;
КонецЕсли;
Сообщить(ТекущееВремя());
Возврат 0;
КонецФункции
Функция глБылВоВзаиморасчетахКонтрагент(КодКонтрагента,НачПериодаПечати) Экспорт
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ГруппаКонтрагентов2 = СоздатьОбъект("Справочник.Контрагенты");
ГруппаКонтрагентов = СоздатьОбъект("Справочник.Контрагенты");
ГруппаКонтрагентов2.НайтиПоКоду(КодКонтрагента);
ГруппаКонтрагентов = ГруппаКонтрагентов2.ТекущийЭлемент();
Фирма = СоздатьОбъект("Справочник.Фирмы");
Фирма.НайтиПоКоду("5");
ВыбФирма = Фирма.ТекущийЭлемент();
Если (СокрЛП(НачПериодаПечати) = "")ИЛИ(СокрЛП(НачПериодаПечати) = ". .") Тогда
НачПериодаПечати = Дата(2017,09,01);
КонецЕсли;
КонПериодаПечати = ТекущаяДата();
ТекстЗапроса = "Период с НачПериодаПечати по КонПериодаПечати;
|Фирма= Регистр.Покупатели.Фирма,Регистр.Поставщики.Фирма;
|Контрагент= Регистр.Покупатели.Договор.Владелец,Регистр.Поставщики.Договор.Владелец;
|КредДокумент= Регистр.Покупатели.КредДокумент,Регистр.Поставщики.КредДокумент;
|Сумма=Регистр.Покупатели.СуммаУпр,Регистр.Поставщики.СуммаУпр;
|Функция НачОст = НачОст(Сумма);
|Функция Приход = Приход(Сумма);
|Функция Расход = Расход(Сумма);
|Функция КонОст = КонОст(Сумма);
|Группировка Контрагент без групп;
|Условие(Фирма = ВыбФирма);
|Условие(Контрагент В ГруппаКонтрагентов);";
Запрос = СоздатьОбъект("Запрос");
Запрос.Выполнить(ТекстЗапроса);
Запрос.Выгрузить(ТЗ,,0);
Возврат(ТЗ);
КонецФункции
//******************************************* глСформироватьТаблицуТорговыеТочки **********************
// извлекает свойства всех торговых точек (кроме группы устаревщих) по коду выбранной группы или элемента
// Пример запуска:
//Процедура СформироватьЦены()
//КодКонтрагента = "Кб002338";ВыгрузитьГруппы = 0;
//ТЗ = глСформироватьТаблицуТорговыеТочки(КодКонтрагента, ВыгрузитьГруппы);
//глПечатьТаблицы(ТЗ);
//КонецПроцедуры
Функция глСформироватьТаблицуТорговыеТочки(КодКонтрагента="", ВыгрузитьГруппы=0) Экспорт
Перем Запрос, ТекстЗапроса, Таб;
ГруппаКонтрагентов2 = СоздатьОбъект("Справочник.Контрагенты");
ГруппаКонтрагентов = СоздатьОбъект("Справочник.Контрагенты");
ГруппаУстаревшие = СоздатьОбъект("Справочник.Контрагенты");
Если ГруппаУстаревшие.НайтиПоКоду("У0000001") = 0 Тогда
Возврат -1;
КонецЕсли;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ТорговыеТочки)
|ТекущийЭлемент = Справочник.ТорговыеТочки.ТекущийЭлемент;
|Код = Справочник.ТорговыеТочки.Код;
|Наименование = Справочник.ТорговыеТочки.Наименование;
|Контрагент = Справочник.ТорговыеТочки.Владелец;
|Владелец = Справочник.ТорговыеТочки.Владелец.Наименование;
|ВладКод = Справочник.ТорговыеТочки.Владелец.Код;
|ИНН = Справочник.ТорговыеТочки.ИНН;
|КодПоставщика = Справочник.ТорговыеТочки.КодПоставщика;
|Направление = Справочник.ТорговыеТочки.Направление.Наименование;
|НапрКод = Справочник.ТорговыеТочки.Направление.Код;
|НапрРодитель = Справочник.ТорговыеТочки.Направление.Родитель.Наименование;
|НапрРодКод = Справочник.ТорговыеТочки.Направление.Родитель.Код;
|НапрНомерГруппы = Справочник.ТорговыеТочки.Направление.НомерГруппы;
|НапрМежгород = Справочник.ТорговыеТочки.Направление.Межгород;
|НапрПриоритет = Справочник.ТорговыеТочки.Направление.Приоритет;
|Район = Справочник.ТорговыеТочки.Район;
|Приоритет = Справочник.ТорговыеТочки.Приоритет;
|Пн = Справочник.ТорговыеТочки.Пн;
|Вт = Справочник.ТорговыеТочки.Вт;
|Ср = Справочник.ТорговыеТочки.Ср;
|Чт = Справочник.ТорговыеТочки.Чт;
|Пт = Справочник.ТорговыеТочки.Пт;
|Сб = Справочник.ТорговыеТочки.Сб;
|Вс = Справочник.ТорговыеТочки.Вс;
|КОБNivea = Справочник.ТорговыеТочки.КОБNivea;
|Устарел = Справочник.ТорговыеТочки.Устарел;
|СложностьДоставки = Справочник.ТорговыеТочки.СложностьДоставки.Наименование;
|СложностьДоставкиКоэффициент = Справочник.ТорговыеТочки.СложностьДоставки.Коэффициент;
|СложностьРазгрузки = Справочник.ТорговыеТочки.СложностьРазгрузки.Наименование;
|СложностьРазгрузкиКоэффициент = Справочник.ТорговыеТочки.СложностьРазгрузки.Коэффициент;
|Группировка ТекущийЭлемент;";
Если СокрЛП(КодКонтрагента) > "" Тогда
//|Условие(ТекущийЭлемент В ВыбНоменклатура);
ГруппаКонтрагентов2.НайтиПоКоду(КодКонтрагента);
ГруппаКонтрагентов = ГруппаКонтрагентов2.ТекущийЭлемент();
//Сообщить(ВыбНоменклатура);
ТекстЗапроса = ТекстЗапроса + "
|Условие(Контрагент В ГруппаКонтрагентов);
|";
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат ТЗ;
КонецЕсли;
Запрос.Выгрузить(ТЗ,3,0);
ТЗ.НоваяКолонка("Адрес");
ТЗ.НоваяКолонка("УдСтр");
ТекКонтрагент = СоздатьОбъект("Справочник.Контрагенты");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ТекКонтрагент.НайтиЭлемент(ТЗ.Контрагент);
Если ВыгрузитьГруппы > 0 Тогда
Если ТекКонтрагент.ЭтоГруппа()=0 Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
ИначеЕсли ((ТекКонтрагент.ЭтоГруппа()=0)
И (ТекКонтрагент.ПометкаУдаления()=1)) Тогда
ТЗ.УдСтр=1;
Продолжить;
КонецЕсли;
Если (ТекКонтрагент.ПринадлежитГруппе(ГруппаУстаревшие) = 1) Тогда
Продолжить;
КонецЕсли;
Если ТекКонтрагент.ЭтоГруппа()=0 Тогда
ТЗ.Адрес = ТЗ.ТекущийЭлемент.Адрес;
ИначеЕсли ВыгрузитьГруппы = 0 Тогда
ТЗ.УдСтр=1;
Продолжить;
Иначе
ТЗ.Код = ТЗ.ТекущийЭлемент.Код;
ТЗ.Наименование = ТЗ.ТекущийЭлемент.Наименование;
Попытка
ТЗ.Родитель = ТЗ.ТекущийЭлемент.Родитель.Наименование;
ТЗ.РодКод = ТЗ.ТекущийЭлемент.Родитель.Код;
Исключение
КонецПопытки
КонецЕсли;
КонецЦикла;
Всего=ТЗ.Количествострок();
Сч=1;
Пока Сч<=Всего цикл
Состояние("Обработка строк: "+строка(Сч)+" из "+строка(Всего));
ТЗ.ПолучитьСтрокуПоНомеру(Сч);
Если ТЗ.УдСтр=1 Тогда
ТЗ.Удалитьстроку(Сч);
Всего = Всего-1;
Иначе
Сч=Сч+1;
КонецЕсли;
Конеццикла;
ТЗ.УдалитьКолонку("УдСтр");
Возврат ТЗ;
КонецФункции