8.1: УТ 10.3 "Установка типов цен по группам номенклатуры для покупателей" ОШИБКА!
24.01.2010
10:25
#1
"Столкнулся с проблемой не могу провести документ "Установка типов цен по группам номенклатуры для покупателей", выдает сообщение что "Найдены записи о типах цен для групп, которые уже действуют в выбранном периоде:" именно когда Вид операции "по номенклатурным группам"
хотя условия закрыты по дату формирования нового документа, вот модуль от 1С
Процедура ПроверитьПересекающиесяДокументы(Отказ, Заголовок)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ПустойТипЦен", Справочники.ТипыЦенНоменклатуры.ПустаяСсылка());
Запрос.УстановитьПараметр("Дата", ДатаНачала);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Док.НоменклатурнаяЦеноваяГруппа КАК Группа,
| РегТипыДляПокупателей.ТипЦен КАК ТипЦен,
| РегТипыДляПокупателей.Период КАК ДатаНачала,
| РегТипыДляПокупателей.Регистратор КАК Регистратор
|ИЗ
| Документ.УстановкаТиповЦенПоГруппамНоменклатурыДляПокупателей.НоменклатурныеЦеновыеГруппы КАК Док
|СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
|ПО Док.Ссылка = &ДокументСсылка
|И (СпрНоменклатура.НоменклатурнаяГруппа = Док.НоменклатурнаяЦеноваяГруппа
|ИЛИ СпрНоменклатура.ЦеноваяГруппа = Док.НоменклатурнаяЦеноваяГруппа)
|СОЕДИНЕНИЕ РегистрСведений.ТипыЦенПоГруппамНоменклатурыДляПокупателей КАК РегТипыДляПокупателей
|ПО (СпрНоменклатура.НоменклатурнаяГруппа = РегТипыДляПокупателей.НоменклатурнаяЦеноваяГруппа
|ИЛИ СпрНоменклатура.ЦеноваяГруппа = РегТипыДляПокупателей.НоменклатурнаяЦеноваяГруппа)
|И Контрагент = &Контрагент
|УПОРЯДОЧИТЬ ПО Период Возр, Группа Возр, ТипЦен Убыв
|";
ТЗ = Запрос.Выполнить().Выгрузить();
ТЗ.Колонки.Добавить("ДатаОкончания");
ТЗ.ЗаполнитьЗначения('00010101' ,"ДатаОкончания");
КоличествоСтрок = ТЗ.Количество() - 1;
Для Тмп = 0 По КоличествоСтрок Цикл
СтрокаТЗ = ТЗ[КоличествоСтрок - Тмп];
Если НЕ ЗначениеЗаполнено(СтрокаТЗ.ТипЦен) Тогда
Для Тмп1 = 0 По ТЗ.Количество() -1 Цикл
СтрокаПоиска = ТЗ[Тмп];
Если СтрокаПоиска.Группа = СтрокаТЗ.Группа
И НЕ ЗначениеЗаполнено(СтрокаПоиска.ДатаОкончания) Тогда
СтрокаПоиска.ДатаОкончания = СтрокаТЗ.ДатаНачала;
ТЗ.Удалить(СтрокаТЗ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
СтрокаДокументовПересечений = """";
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если НЕ ЗначениеЗаполнено(ДатаОкончания) Тогда
Если СтрокаТЗ.ДатаОкончания > Дата Или НЕ ЗначениеЗаполнено(СтрокаТЗ.ДатаОкончания) Тогда
СтрокаДокументовПересечений = СтрокаДокументовПересечений + Символы.ПС + СтрокаТЗ.Группа +": " + СтрокаТЗ.Регистратор;
КонецЕсли;
Иначе
Если (ДатаНачала >= СтрокаТЗ.ДатаНачала И ДатаОкончания <= СтрокаТЗ.ДатаОкончания)
Или (ДатаНачала <= СтрокаТЗ.ДатаНачала И ДатаОкончания >= СтрокаТЗ.ДатаОкончания)
Или (ДатаНачала <= СтрокаТЗ.ДатаНачала И ДатаОкончания >= СтрокаТЗ.ДатаНачала)
Или (ДатаНачала <= СтрокаТЗ.ДатаОкончания И ДатаОкончания >= СтрокаТЗ.ДатаОкончания) Тогда
СтрокаДокументовПересечений = СтрокаДокументовПересечений + Символы.ПС + СтрокаТЗ.Группа +": " + СтрокаТЗ.Регистратор;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НЕ ПустаяСтрока(СтрокаДокументовПересечений) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Найдены записи о типах цен для групп, которые уже действуют в выбранном периоде:" + СтрокаДокументовПересечений, Отказ, Заголовок);
Отказ = Истина;
КонецЕсли;
КонецПроцедуры //ПроверитьПересекающиесяДокументы()
как мне думается, но пропустили цифру 1 или задумка от 1С?
...
КоличествоСтрок = ТЗ.Количество() - 1;
Для Тмп = 0 По КоличествоСтрок Цикл
СтрокаТЗ = ТЗ[КоличествоСтрок - Тмп];
Если НЕ ЗначениеЗаполнено(СтрокаТЗ.ТипЦен) Тогда
Для Тмп1 = 0 По ТЗ.Количество() -1 Цикл
СтрокаПоиска = ТЗ[Тмп1]; // RR 24.01.2010
Если СтрокаПоиска.Группа = СтрокаТЗ.Группа
И НЕ ЗначениеЗаполнено(СтрокаПоиска.ДатаОкончания) Тогда
СтрокаПоиска.ДатаОкончания = СтрокаТЗ.ДатаНачала;
ТЗ.Удалить(СтрокаТЗ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
...
СтрокаПоиска = ТЗ[Тмп1];
после такого тюнинга модуля все заработало. ошибка это или нет?
тестировалось на релизе "Управление торговлей", редакция 10.3 (10.3.9.4) "
хотя условия закрыты по дату формирования нового документа, вот модуль от 1С
Процедура ПроверитьПересекающиесяДокументы(Отказ, Заголовок)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ПустойТипЦен", Справочники.ТипыЦенНоменклатуры.ПустаяСсылка());
Запрос.УстановитьПараметр("Дата", ДатаНачала);
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Док.НоменклатурнаяЦеноваяГруппа КАК Группа,
| РегТипыДляПокупателей.ТипЦен КАК ТипЦен,
| РегТипыДляПокупателей.Период КАК ДатаНачала,
| РегТипыДляПокупателей.Регистратор КАК Регистратор
|ИЗ
| Документ.УстановкаТиповЦенПоГруппамНоменклатурыДляПокупателей.НоменклатурныеЦеновыеГруппы КАК Док
|СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
|ПО Док.Ссылка = &ДокументСсылка
|И (СпрНоменклатура.НоменклатурнаяГруппа = Док.НоменклатурнаяЦеноваяГруппа
|ИЛИ СпрНоменклатура.ЦеноваяГруппа = Док.НоменклатурнаяЦеноваяГруппа)
|СОЕДИНЕНИЕ РегистрСведений.ТипыЦенПоГруппамНоменклатурыДляПокупателей КАК РегТипыДляПокупателей
|ПО (СпрНоменклатура.НоменклатурнаяГруппа = РегТипыДляПокупателей.НоменклатурнаяЦеноваяГруппа
|ИЛИ СпрНоменклатура.ЦеноваяГруппа = РегТипыДляПокупателей.НоменклатурнаяЦеноваяГруппа)
|И Контрагент = &Контрагент
|УПОРЯДОЧИТЬ ПО Период Возр, Группа Возр, ТипЦен Убыв
|";
ТЗ = Запрос.Выполнить().Выгрузить();
ТЗ.Колонки.Добавить("ДатаОкончания");
ТЗ.ЗаполнитьЗначения('00010101' ,"ДатаОкончания");
КоличествоСтрок = ТЗ.Количество() - 1;
Для Тмп = 0 По КоличествоСтрок Цикл
СтрокаТЗ = ТЗ[КоличествоСтрок - Тмп];
Если НЕ ЗначениеЗаполнено(СтрокаТЗ.ТипЦен) Тогда
Для Тмп1 = 0 По ТЗ.Количество() -1 Цикл
СтрокаПоиска = ТЗ[Тмп];
Если СтрокаПоиска.Группа = СтрокаТЗ.Группа
И НЕ ЗначениеЗаполнено(СтрокаПоиска.ДатаОкончания) Тогда
СтрокаПоиска.ДатаОкончания = СтрокаТЗ.ДатаНачала;
ТЗ.Удалить(СтрокаТЗ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
СтрокаДокументовПересечений = """";
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если НЕ ЗначениеЗаполнено(ДатаОкончания) Тогда
Если СтрокаТЗ.ДатаОкончания > Дата Или НЕ ЗначениеЗаполнено(СтрокаТЗ.ДатаОкончания) Тогда
СтрокаДокументовПересечений = СтрокаДокументовПересечений + Символы.ПС + СтрокаТЗ.Группа +": " + СтрокаТЗ.Регистратор;
КонецЕсли;
Иначе
Если (ДатаНачала >= СтрокаТЗ.ДатаНачала И ДатаОкончания <= СтрокаТЗ.ДатаОкончания)
Или (ДатаНачала <= СтрокаТЗ.ДатаНачала И ДатаОкончания >= СтрокаТЗ.ДатаОкончания)
Или (ДатаНачала <= СтрокаТЗ.ДатаНачала И ДатаОкончания >= СтрокаТЗ.ДатаНачала)
Или (ДатаНачала <= СтрокаТЗ.ДатаОкончания И ДатаОкончания >= СтрокаТЗ.ДатаОкончания) Тогда
СтрокаДокументовПересечений = СтрокаДокументовПересечений + Символы.ПС + СтрокаТЗ.Группа +": " + СтрокаТЗ.Регистратор;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НЕ ПустаяСтрока(СтрокаДокументовПересечений) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Найдены записи о типах цен для групп, которые уже действуют в выбранном периоде:" + СтрокаДокументовПересечений, Отказ, Заголовок);
Отказ = Истина;
КонецЕсли;
КонецПроцедуры //ПроверитьПересекающиесяДокументы()
как мне думается, но пропустили цифру 1 или задумка от 1С?
...
КоличествоСтрок = ТЗ.Количество() - 1;
Для Тмп = 0 По КоличествоСтрок Цикл
СтрокаТЗ = ТЗ[КоличествоСтрок - Тмп];
Если НЕ ЗначениеЗаполнено(СтрокаТЗ.ТипЦен) Тогда
Для Тмп1 = 0 По ТЗ.Количество() -1 Цикл
СтрокаПоиска = ТЗ[Тмп1]; // RR 24.01.2010
Если СтрокаПоиска.Группа = СтрокаТЗ.Группа
И НЕ ЗначениеЗаполнено(СтрокаПоиска.ДатаОкончания) Тогда
СтрокаПоиска.ДатаОкончания = СтрокаТЗ.ДатаНачала;
ТЗ.Удалить(СтрокаТЗ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
...
СтрокаПоиска = ТЗ[Тмп1];
после такого тюнинга модуля все заработало. ошибка это или нет?
тестировалось на релизе "Управление торговлей", редакция 10.3 (10.3.9.4) "
Читают тему
(гостей: 1)